diff -Nru mlton-20130715/basis-library/arrays-and-vectors/array2.sml mlton-20210117+dfsg/basis-library/arrays-and-vectors/array2.sml --- mlton-20130715/basis-library/arrays-and-vectors/array2.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/array2.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,19 +1,20 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) structure Array2 : ARRAY2 = struct - val op +? = SeqIndex.+? + val op +! = SeqIndex.+! val op + = SeqIndex.+ - val op -? = SeqIndex.-? + val op -! = SeqIndex.-! val op - = SeqIndex.- - val op *? = SeqIndex.*? + val op *! = SeqIndex.*! val op * = SeqIndex.* val op < = SeqIndex.< val op <= = SeqIndex.<= @@ -65,12 +66,12 @@ handle Overflow => raise Subscript in if (start < 0 orelse num < 0 - orelse start +? num > max) + orelse start +! num > max) then raise Subscript - else (start, start +? num) + else (start, start +! num) end else (SeqIndex.fromIntUnsafe start, - SeqIndex.fromIntUnsafe start +? num) + SeqIndex.fromIntUnsafe start +! num) fun checkSliceMax (start: int, num: int option, max: SeqIndex.int): SeqIndex.int * SeqIndex.int = @@ -113,10 +114,10 @@ rows = rows, cols = cols} in - fun arrayUninit' (rows, cols) = - make (rows, cols, Array.arrayUninit') + fun alloc' (rows, cols) = + make (rows, cols, Primitive.Array.alloc) fun array' (rows, cols, init) = - make (rows, cols, fn size => Array.array' (size, init)) + make (rows, cols, fn size => Primitive.Array.new (size, init)) end local fun make (rows, cols, doit) = @@ -134,19 +135,19 @@ else doit (SeqIndex.fromIntUnsafe rows, SeqIndex.fromIntUnsafe cols) in - fun arrayUninit (rows, cols) = - make (rows, cols, fn (rows, cols) => arrayUninit' (rows, cols)) + fun alloc (rows, cols) = + make (rows, cols, fn (rows, cols) => alloc' (rows, cols)) fun array (rows, cols, init) = make (rows, cols, fn (rows, cols) => array' (rows, cols, init)) end fun array0 (): 'a array = - {array = Array.arrayUninit' 0, + {array = Primitive.Array.alloc 0, rows = 0, cols = 0} fun unsafeSpot' ({cols, ...}: 'a array, r, c) = - r *? cols +? c + r *! cols +! c fun spot' (a as {rows, cols, ...}: 'a array, r, c) = if Primitive.Controls.safe andalso (geu (r, rows) orelse geu (c, cols)) @@ -154,13 +155,13 @@ else unsafeSpot' (a, r, c) fun unsafeSub' (a as {array, ...}: 'a array, r, c) = - Array.unsafeSub' (array, unsafeSpot' (a, r, c)) + Primitive.Array.unsafeSub (array, unsafeSpot' (a, r, c)) fun sub' (a as {array, ...}: 'a array, r, c) = - Array.unsafeSub' (array, spot' (a, r, c)) + Primitive.Array.unsafeSub (array, spot' (a, r, c)) fun unsafeUpdate' (a as {array, ...}: 'a array, r, c, x) = - Array.unsafeUpdate' (array, unsafeSpot' (a, r, c), x) + Primitive.Array.unsafeUpdate (array, unsafeSpot' (a, r, c), x) fun update' (a as {array, ...}: 'a array, r, c, x) = - Array.unsafeUpdate' (array, spot' (a, r, c), x) + Primitive.Array.unsafeUpdate (array, spot' (a, r, c), x) local fun make (r, c, doit) = @@ -191,18 +192,18 @@ let val cols = length row1 val a as {array, cols = cols', ...} = - arrayUninit (length rows, cols) + alloc (length rows, cols) val _ = List.foldl (fn (row: 'a list, i) => let - val max = i +? cols' + val max = i +! cols' val i' = List.foldl (fn (x: 'a, i) => (if i >= max then raise Size - else (Array.unsafeUpdate' (array, i, x) - ; i +? 1))) + else (Primitive.Array.unsafeUpdate (array, i, x) + ; i +! 1))) i row in if i' = max then i' @@ -217,7 +218,7 @@ if Primitive.Controls.safe andalso geu (r, rows) then raise Subscript else - ArraySlice.vector (ArraySlice.slice' (array, r *? cols, SOME cols)) + ArraySlice.vector (Primitive.Array.Slice.slice (array, r *! cols, SOME cols)) fun row (a, r) = if Primitive.Controls.safe then let @@ -232,7 +233,7 @@ if Primitive.Controls.safe andalso geu (c, cols) then raise Subscript else - Vector.tabulate' (rows, fn r => unsafeSub' (a, r, c)) + Primitive.Vector.tabulate (rows, fn r => unsafeSub' (a, r, c)) fun column (a, c) = if Primitive.Controls.safe then let @@ -256,9 +257,9 @@ else let fun loopCol (c, b) = if c >= stopCol then b - else loopCol (c +? 1, f (r, c, sub' (base, r, c), b)) + else loopCol (c +! 1, f (r, c, sub' (base, r, c), b)) in - loopRow (r +? 1, loopCol (startCol, b)) + loopRow (r +! 1, loopCol (startCol, b)) end in loopRow (startRow, b) @@ -270,9 +271,9 @@ else let fun loopRow (r, b) = if r >= stopRow then b - else loopRow (r +? 1, f (r, c, sub' (base, r, c), b)) + else loopRow (r +! 1, f (r, c, sub' (base, r, c), b)) in - loopCol (c +? 1, loopRow (startRow, b)) + loopCol (c +! 1, loopRow (startRow, b)) end in loopCol (startCol, b) @@ -299,7 +300,7 @@ fun tabulate trv (rows, cols, f) = let - val a = arrayUninit (rows, cols) + val a = alloc (rows, cols) val () = modifyi trv (fn (r, c, _) => f (r, c)) (wholeRegion a) in a @@ -309,8 +310,8 @@ dst, dst_row, dst_col} = let val {startRow, stopRow, startCol, stopCol} = checkRegion src - val nrows = stopRow -? startRow - val ncols = stopCol -? startCol + val nrows = stopRow -! startRow + val ncols = stopCol -! startCol val {startRow = dst_row, startCol = dst_col, ...} = checkRegion' {base = dst, row = dst_row, col = dst_col, nrows = SOME nrows, @@ -329,13 +330,13 @@ if i < start then () else (f i; loop (i - 1)) - in loop (stop -? 1) + in loop (stop -! 1) end val forRows = if startRow <= dst_row then forDown else forUp val forCols = if startCol <= dst_col then forUp else forDown in forRows (0, nrows, fn r => forCols (0, ncols, fn c => - unsafeUpdate' (dst, dst_row +? r, dst_col +? c, - unsafeSub' (base, startRow +? r, startCol +? c)))) + unsafeUpdate' (dst, dst_row +! r, dst_col +! c, + unsafeSub' (base, startRow +! r, startCol +! c)))) end end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/array.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/array.sig --- mlton-20130715/basis-library/arrays-and-vectors/array.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/array.sig 2021-12-28 17:19:36.000000000 +0000 @@ -40,16 +40,32 @@ structure ArraySlice: ARRAY_SLICE_EXTRA - val arrayUninit': SeqIndex.int -> 'a array - val arrayUninit: int -> 'a array - val array': SeqIndex.int * 'a -> 'a array - val unsafeSub': 'a array * SeqIndex.int -> 'a + val alloc: int -> 'a array + val uninitIsNop: 'a array -> bool + val uninit: 'a array * int -> unit + val unsafeAlloc: int -> 'a array + val unsafeArray: int * 'a -> 'a array + val unsafeCopy: {dst: 'a array, di: int, src: 'a array} -> unit + val unsafeCopyVec: {dst: 'a array, di: int, src: 'a vector} -> unit val unsafeSub: 'a array * int -> 'a - val unsafeUpdate': 'a array * SeqIndex.int * 'a -> unit + val unsafeUninit: 'a array * int -> unit val unsafeUpdate: 'a array * int * 'a -> unit val concat: 'a array list -> 'a array val duplicate: 'a array -> 'a array val toList: 'a array -> 'a list val unfoldi: int * 'b * (int * 'b -> 'a * 'b) -> 'a array * 'b + val unfold: int * 'b * ('b -> 'a * 'b) -> 'a array * 'b + + structure Raw: + sig + type 'a rawarr + val alloc: int -> 'a rawarr + val length: 'a rawarr -> int + val uninit: 'a rawarr * int -> unit + val uninitIsNop: 'a rawarr -> bool + val unsafeAlloc: int -> 'a rawarr + val unsafeToArray: 'a rawarr -> 'a array + val unsafeUninit: 'a rawarr * int -> unit + end end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/array-slice.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/array-slice.sig --- mlton-20130715/basis-library/arrays-and-vectors/array-slice.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/array-slice.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,3 @@ -structure Array = - struct - type 'a array = 'a array - end - signature ARRAY_SLICE_GLOBAL = sig end @@ -18,10 +13,8 @@ val appi: (int * 'a -> unit) -> 'a slice -> unit val base: 'a slice -> 'a Array.array * int * int val collate: ('a * 'a -> order) -> 'a slice * 'a slice -> order - val copy: {src: 'a slice, dst: 'a Array.array, di: int} -> unit - val copyVec: {di: int, - dst: 'a Array.array, - src: 'a VectorSlice.slice} -> unit + val copy: {dst: 'a Array.array, di: int, src: 'a slice} -> unit + val copyVec: {dst: 'a Array.array, di: int, src: 'a VectorSlice.slice} -> unit val exists: ('a -> bool) -> 'a slice -> bool val find: ('a -> bool) -> 'a slice -> 'a option val findi: (int * 'a -> bool) -> 'a slice -> (int * 'a) option @@ -46,17 +39,16 @@ sig include ARRAY_SLICE - val concat: 'a slice list -> 'a array - val toList: 'a slice -> 'a list - val slice': 'a array * SeqIndex.int * SeqIndex.int option -> 'a slice - val unsafeSlice': 'a array * SeqIndex.int * SeqIndex.int option -> 'a slice - val unsafeSlice: 'a array * int * int option -> 'a slice - val sub': 'a slice * SeqIndex.int -> 'a - val unsafeSub': 'a slice * SeqIndex.int -> 'a + val uninitIsNop: 'a slice -> bool + val uninit: 'a slice * int -> unit val unsafeSub: 'a slice * int -> 'a - val unsafeSubslice': 'a slice * SeqIndex.int * SeqIndex.int option -> 'a slice + val unsafeCopy: {dst: 'a Array.array, di: int, src: 'a slice} -> unit + val unsafeCopyVec: {dst: 'a Array.array, di: int, src: 'a VectorSlice.slice} -> unit + val unsafeSlice: 'a array * int * int option -> 'a slice val unsafeSubslice: 'a slice * int * int option -> 'a slice - val update': 'a slice * SeqIndex.int * 'a -> unit - val unsafeUpdate': 'a slice * SeqIndex.int * 'a -> unit + val unsafeUninit: 'a slice * int -> unit val unsafeUpdate: 'a slice * int * 'a -> unit + + val concat: 'a slice list -> 'a array + val toList: 'a slice -> 'a list end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/array.sml mlton-20210117+dfsg/basis-library/arrays-and-vectors/array.sml --- mlton-20130715/basis-library/arrays-and-vectors/array.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/array.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,22 +1,17 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) structure Array: ARRAY_EXTRA = struct - structure A = Sequence (type 'a sequence = 'a array - type 'a elt = 'a - val fromArray = fn a => a - val isMutable = true - val length = Primitive.Array.length - val subUnsafe = Primitive.Array.subUnsafe) + structure A = Sequence (Primitive.Array) open A - val op +? = Int.+? val op < = Int.< val op <= = Int.<= @@ -28,65 +23,53 @@ structure ArraySlice = struct open Slice - fun update' (arr, i, x) = - update'Mk Primitive.Array.updateUnsafe (arr, i, x) - fun update (arr, i, x) = - updateMk Primitive.Array.updateUnsafe (arr, i, x) - fun unsafeUpdate' (arr, i, x) = - unsafeUpdate'Mk Primitive.Array.updateUnsafe (arr, i, x) - fun unsafeUpdate (arr, i, x) = - unsafeUpdateMk Primitive.Array.updateUnsafe (arr, i, x) - fun vector sl = create Vector.tabulate' (fn x => x) sl - fun modifyi' f sl = - appi' (fn (i, x) => unsafeUpdate' (sl, i, f (i, x))) sl - fun modifyi f sl = modifyi' (wrap2 f) sl - fun modify f sl = modifyi (f o #2) sl - local - fun make (length, sub') {src, dst, di} = - modifyi' (fn (i, _) => sub' (src, i)) - (slice (dst, di, SOME (length src))) - in - fun copy (arg as {src, dst, di}) = - let val (src', si', len') = base src - in - if src' = dst andalso si' < di andalso di <= si' +? len' - then let val sl = slice (dst, di, SOME (length src)) - in - foldri' (fn (i, _, _) => - unsafeUpdate' (sl, i, unsafeSub' (src, i))) - () sl - end - else make (length, unsafeSub') arg - end - - fun copyVec arg = - make (Vector.VectorSlice.length, Vector.VectorSlice.unsafeSub') arg - end + val vector = Primitive.Array.Slice.vector + val copyVec = Vector.VectorSlice.copy + val unsafeCopyVec = Vector.VectorSlice.unsafeCopy + fun modifyi f sl = Primitive.Array.Slice.modifyi (wrap2 f) sl + val modify = Primitive.Array.Slice.modify end - local - fun make f arr = f (ArraySlice.full arr) - in - fun vector arr = make (ArraySlice.vector) arr - (* fun modifyi' f = make (ArraySlice.modifyi' f) *) - fun modifyi f = make (ArraySlice.modifyi f) - fun modify f = make (ArraySlice.modify f) - fun copy {src, dst, di} = ArraySlice.copy {src = ArraySlice.full src, - dst = dst, di = di} - fun copyVec {src, dst, di} = ArraySlice.copyVec {src = VectorSlice.full src, - dst = dst, di = di} - end - - val arrayUninit' = newUninit' - val arrayUninit = newUninit - val array' = new' val array = new + val unsafeArray = unsafeNew + val vector = Primitive.Array.vector + val copyVec = Vector.copy + val unsafeCopyVec = Vector.unsafeCopy + fun modifyi f sl = Primitive.Array.modifyi (wrap2 f) sl + val modify = Primitive.Array.modify - (* fun update' (arr, i, x) = update'Mk Primitive.Array.updateUnsafe (arr, i, x) *) - fun update (arr, i, x) = updateMk Primitive.Array.updateUnsafe (arr, i, x) - fun unsafeUpdate' (arr, i, x) = unsafeUpdate'Mk Primitive.Array.updateUnsafe (arr, i, x) - fun unsafeUpdate (arr, i, x) = unsafeUpdateMk Primitive.Array.updateUnsafe (arr, i, x) + structure Raw = Primitive.Array.Raw + structure Raw = + struct + type 'a rawarr = 'a Raw.rawarr + + fun length a = + if Primitive.Controls.safe + then (SeqIndex.toInt (Raw.length a)) + handle Overflow => raise Fail "Raw.length" + else SeqIndex.toIntUnsafe (Raw.length a) + + fun alloc n = Raw.alloc (SeqIndex.fromIntForLength n) + fun unsafeAlloc n = Raw.unsafeAlloc (SeqIndex.fromIntUnsafe n) + + val uninitIsNop = Raw.uninitIsNop + fun unsafeUninit (a, i) = + Raw.unsafeUninit (a, SeqIndex.fromIntUnsafe i) + fun uninit (a, i) = + if Primitive.Controls.safe + then let + val i = + (SeqIndex.fromInt i) + handle Overflow => raise Subscript + in + Raw.uninit (a, i) + end + else unsafeUninit (a, i) + + val unsafeToArray = Primitive.Array.Raw.unsafeToArray + end end + structure ArraySlice: ARRAY_SLICE_EXTRA = Array.ArraySlice structure ArrayGlobal: ARRAY_GLOBAL = Array diff -Nru mlton-20130715/basis-library/arrays-and-vectors/mono-array2.fun mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-array2.fun --- mlton-20130715/basis-library/arrays-and-vectors/mono-array2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-array2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,18 +1,19 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) functor MonoArray2 (type elem - structure V: MONO_VECTOR + structure MV: MONO_VECTOR where type elem = elem and type vector = elem Vector.vector): MONO_ARRAY2 = struct - type elem = V.elem - type vector = V.vector + type elem = MV.elem + type vector = MV.vector open Array2 type array = elem array type region = {base: array, diff -Nru mlton-20130715/basis-library/arrays-and-vectors/mono-array2.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-array2.sig --- mlton-20130715/basis-library/arrays-and-vectors/mono-array2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-array2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -13,21 +13,21 @@ datatype traversal = datatype Array2.traversal - val array: int * int * elem -> array - val fromList: elem list list -> array - val tabulate: traversal -> int * int * (int * int -> elem) -> array - val sub: array * int * int -> elem - val update: array * int * int * elem -> unit - val dimensions: array -> int * int - val nCols: array -> int - val nRows: array -> int - val row: array * int -> vector - val column: array * int -> vector + val app: traversal -> (elem -> unit) -> array -> unit + val appi: traversal -> (int * int * elem -> unit) -> region -> unit + val array: int * int * elem -> array + val column: array * int -> vector val copy: {src: region, dst: array, dst_row: int, dst_col: int} -> unit - val appi: traversal -> (int * int * elem -> unit) -> region -> unit - val app: traversal -> (elem -> unit) -> array -> unit - val foldi: traversal -> (int * int * elem * 'b -> 'b) -> 'b -> region -> 'b + val dimensions: array -> int * int val fold: traversal -> (elem * 'b -> 'b) -> 'b -> array -> 'b - val modifyi: traversal -> (int * int * elem -> elem) -> region -> unit - val modify: traversal -> (elem -> elem) -> array -> unit + val foldi: traversal -> (int * int * elem * 'b -> 'b) -> 'b -> region -> 'b + val fromList: elem list list -> array + val modify: traversal -> (elem -> elem) -> array -> unit + val modifyi: traversal -> (int * int * elem -> elem) -> region -> unit + val nCols: array -> int + val nRows: array -> int + val row: array * int -> vector + val sub: array * int * int -> elem + val tabulate: traversal -> int * int * (int * int -> elem) -> array + val update: array * int * int * elem -> unit end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/mono-array.fun mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-array.fun --- mlton-20130715/basis-library/arrays-and-vectors/mono-array.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-array.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,27 +1,28 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) functor MonoArray (type elem - structure V: MONO_VECTOR_EXTRA + structure MV: MONO_VECTOR_EXTRA where type elem = elem and type vector = elem Vector.vector and type MonoVectorSlice.slice = elem VectorSlice.slice ): MONO_ARRAY_EXTRA where type elem = elem - and type vector = V.vector - and type vector_slice = V.MonoVectorSlice.slice = + and type vector = MV.vector + and type vector_slice = MV.MonoVectorSlice.slice = struct open Array - type elem = V.elem + type elem = MV.elem type array = elem array - type vector = V.vector - type vector_slice = V.MonoVectorSlice.slice + type vector = MV.vector + type vector_slice = MV.MonoVectorSlice.slice val fromPoly = fn a => a val toPoly = fn a => a diff -Nru mlton-20130715/basis-library/arrays-and-vectors/mono-array.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-array.sig --- mlton-20130715/basis-library/arrays-and-vectors/mono-array.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-array.sig 2021-12-28 17:19:36.000000000 +0000 @@ -39,7 +39,9 @@ and type vector = vector and type vector_slice = vector_slice - val arrayUninit: int -> array + val alloc: int -> array + val uninitIsNop: array -> bool + val uninit: array * int -> unit val concat: array list -> array val duplicate: array -> array @@ -47,6 +49,9 @@ val toList: array -> elem list val toPoly: array -> elem Array.array val unfoldi: int * 'a * (int * 'a -> elem * 'a) -> array * 'a + + val unsafeAlloc: int -> array val unsafeSub: array * int -> elem + val unsafeUninit: array * int -> unit val unsafeUpdate: array * int * elem -> unit end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/mono-array-slice.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-array-slice.sig --- mlton-20130715/basis-library/arrays-and-vectors/mono-array-slice.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-array-slice.sig 2021-12-28 17:19:36.000000000 +0000 @@ -40,8 +40,11 @@ val concat: slice list -> array val toList: slice -> elem list val toPoly: slice -> elem ArraySlice.slice + val uninitIsNop: slice -> bool + val uninit: slice * int -> unit val unsafeSlice: array * int * int option -> slice val unsafeSub: slice * int -> elem val unsafeSubslice: slice * int * int option -> slice + val unsafeUninit: slice * int -> unit val unsafeUpdate: slice * int * elem -> unit end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/mono.sml mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono.sml --- mlton-20130715/basis-library/arrays-and-vectors/mono.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,247 +1,266 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -signature EQ_MONO = +signature EQTYPE_MONO = sig - structure Array: MONO_ARRAY_EXTRA - structure Array2: MONO_ARRAY2 - structure ArraySlice: MONO_ARRAY_SLICE_EXTRA - structure Vector: EQTYPE_MONO_VECTOR_EXTRA - structure VectorSlice: EQTYPE_MONO_VECTOR_SLICE_EXTRA - sharing type Array.array = ArraySlice.array = Vector.array - sharing type Array.elem = Array2.elem = ArraySlice.elem = Vector.elem - = VectorSlice.elem - sharing type Array.vector = Array2.vector = ArraySlice.vector - = Vector.vector = VectorSlice.vector - sharing type ArraySlice.vector_slice = VectorSlice.slice + type elem + structure MonoArray: MONO_ARRAY_EXTRA + structure MonoArray2: MONO_ARRAY2 + structure MonoVector: EQTYPE_MONO_VECTOR_EXTRA + sharing type MonoArray.array = MonoVector.array + sharing type elem = MonoArray.elem = MonoArray2.elem = MonoVector.elem + sharing type MonoArray.vector = MonoArray2.vector = MonoVector.vector + sharing type MonoArray.MonoArraySlice.vector_slice = MonoVector.MonoVectorSlice.slice end -functor EqMono (eqtype elem) = +signature MONO = + sig + type elem + structure MonoArray: MONO_ARRAY_EXTRA + structure MonoArray2: MONO_ARRAY2 + structure MonoVector: MONO_VECTOR_EXTRA + sharing type MonoArray.array = MonoVector.array + sharing type elem = MonoArray.elem = MonoArray2.elem = MonoVector.elem + sharing type MonoArray.vector = MonoArray2.vector = MonoVector.vector + sharing type MonoArray.MonoArraySlice.vector_slice = MonoVector.MonoVectorSlice.slice + end + +functor EqtypeMonoX (eqtype elem) = struct - structure Vector = EqtypeMonoVector (type elem = elem) - structure VectorSlice = Vector.MonoVectorSlice - structure Array = MonoArray (type elem = elem - structure V = Vector) - structure ArraySlice = Array.MonoArraySlice - structure Array2 = MonoArray2 (type elem = elem - structure V = Vector) + type elem = elem + structure MonoVector = EqtypeMonoVector (type elem = elem) + structure MonoArray = MonoArray (type elem = elem + structure MV = MonoVector) + structure MonoArray2 = MonoArray2 (type elem = elem + structure MV = MonoVector) end -functor Mono (type elem) = +functor EqtypeMono (eqtype elem) :> EQTYPE_MONO where type elem = elem = struct - structure Vector = MonoVector (type elem = elem) - structure VectorSlice = Vector.MonoVectorSlice - structure Array = MonoArray (type elem = elem - structure V = Vector) - structure ArraySlice = Array.MonoArraySlice - structure Array2 = MonoArray2 (type elem = elem - structure V = Vector) + type elem = elem + structure MonoVector = EqtypeMonoVector (type elem = elem) + structure MonoArray = MonoArray (type elem = elem + structure MV = MonoVector) + structure MonoArray2 = MonoArray2 (type elem = elem + structure MV = MonoVector) + end + +functor Mono (type elem) :> MONO where type elem = elem = + struct + type elem = elem + structure MonoVector = MonoVector (type elem = elem) + structure MonoArray = MonoArray (type elem = elem + structure MV = MonoVector) + structure MonoArray2 = MonoArray2 (type elem = elem + structure MV = MonoVector) end local - structure S = EqMono (type elem = Primitive.Bool.bool) + structure S = EqtypeMono (type elem = Primitive.Bool.bool) open S in - structure BoolVector = Vector - structure BoolVectorSlice = VectorSlice - structure BoolArray = Array - structure BoolArraySlice = ArraySlice - structure BoolArray2 = Array2 + structure BoolVector = MonoVector + structure BoolVectorSlice = MonoVector.MonoVectorSlice + structure BoolArray = MonoArray + structure BoolArraySlice = MonoArray.MonoArraySlice + structure BoolArray2 = MonoArray2 end local - structure S = EqMono (type elem = Primitive.Int8.int) + structure S = EqtypeMono (type elem = Primitive.Int8.int) open S in - structure Int8Vector = Vector - structure Int8VectorSlice = VectorSlice - structure Int8Array = Array - structure Int8ArraySlice = ArraySlice - structure Int8Array2 = Array2 + structure Int8Vector = MonoVector + structure Int8VectorSlice = MonoVector.MonoVectorSlice + structure Int8Array = MonoArray + structure Int8ArraySlice = MonoArray.MonoArraySlice + structure Int8Array2 = MonoArray2 end local - structure S = EqMono (type elem = Primitive.Int16.int) + structure S = EqtypeMono (type elem = Primitive.Int16.int) open S in - structure Int16Vector = Vector - structure Int16VectorSlice = VectorSlice - structure Int16Array = Array - structure Int16ArraySlice = ArraySlice - structure Int16Array2 = Array2 + structure Int16Vector = MonoVector + structure Int16VectorSlice = MonoVector.MonoVectorSlice + structure Int16Array = MonoArray + structure Int16ArraySlice = MonoArray.MonoArraySlice + structure Int16Array2 = MonoArray2 end local - structure S = EqMono (type elem = Primitive.Int32.int) + structure S = EqtypeMono (type elem = Primitive.Int32.int) open S in - structure Int32Vector = Vector - structure Int32VectorSlice = VectorSlice - structure Int32Array = Array - structure Int32ArraySlice = ArraySlice - structure Int32Array2 = Array2 + structure Int32Vector = MonoVector + structure Int32VectorSlice = MonoVector.MonoVectorSlice + structure Int32Array = MonoArray + structure Int32ArraySlice = MonoArray.MonoArraySlice + structure Int32Array2 = MonoArray2 end local - structure S = EqMono (type elem = Primitive.Int64.int) + structure S = EqtypeMono (type elem = Primitive.Int64.int) open S in - structure Int64Vector = Vector - structure Int64VectorSlice = VectorSlice - structure Int64Array = Array - structure Int64ArraySlice = ArraySlice - structure Int64Array2 = Array2 + structure Int64Vector = MonoVector + structure Int64VectorSlice = MonoVector.MonoVectorSlice + structure Int64Array = MonoArray + structure Int64ArraySlice = MonoArray.MonoArraySlice + structure Int64Array2 = MonoArray2 end local - structure S = EqMono (type elem = Primitive.IntInf.int) + structure S = EqtypeMono (type elem = Primitive.IntInf.int) open S in - structure IntInfVector = Vector - structure IntInfVectorSlice = VectorSlice - structure IntInfArray = Array - structure IntInfArraySlice = ArraySlice - structure IntInfArray2 = Array2 + structure IntInfVector = MonoVector + structure IntInfVectorSlice = MonoVector.MonoVectorSlice + structure IntInfArray = MonoArray + structure IntInfArraySlice = MonoArray.MonoArraySlice + structure IntInfArray2 = MonoArray2 end local structure S = Mono (type elem = Primitive.Real32.real) open S in - structure Real32Vector = Vector - structure Real32VectorSlice = VectorSlice - structure Real32Array = Array - structure Real32ArraySlice = ArraySlice - structure Real32Array2 = Array2 + structure Real32Vector = MonoVector + structure Real32VectorSlice = MonoVector.MonoVectorSlice + structure Real32Array = MonoArray + structure Real32ArraySlice = MonoArray.MonoArraySlice + structure Real32Array2 = MonoArray2 end local structure S = Mono (type elem = Primitive.Real64.real) open S in - structure Real64Vector = Vector - structure Real64VectorSlice = VectorSlice - structure Real64Array = Array - structure Real64ArraySlice = ArraySlice - structure Real64Array2 = Array2 + structure Real64Vector = MonoVector + structure Real64VectorSlice = MonoVector.MonoVectorSlice + structure Real64Array = MonoArray + structure Real64ArraySlice = MonoArray.MonoArraySlice + structure Real64Array2 = MonoArray2 end local - structure S = EqMono (type elem = Primitive.Word8.word) + structure S = EqtypeMono (type elem = Primitive.Word8.word) open S in - structure Word8Vector = Vector - structure Word8VectorSlice = VectorSlice - structure Word8Array = Array - structure Word8ArraySlice = ArraySlice - structure Word8Array2 = Array2 + structure Word8Vector = MonoVector + structure Word8VectorSlice = MonoVector.MonoVectorSlice + structure Word8Array = MonoArray + structure Word8ArraySlice = MonoArray.MonoArraySlice + structure Word8Array2 = MonoArray2 end local - structure S = EqMono (type elem = Primitive.Word16.word) + structure S = EqtypeMono (type elem = Primitive.Word16.word) open S in - structure Word16Vector = Vector - structure Word16VectorSlice = VectorSlice - structure Word16Array = Array - structure Word16ArraySlice = ArraySlice - structure Word16Array2 = Array2 + structure Word16Vector = MonoVector + structure Word16VectorSlice = MonoVector.MonoVectorSlice + structure Word16Array = MonoArray + structure Word16ArraySlice = MonoArray.MonoArraySlice + structure Word16Array2 = MonoArray2 end local - structure S = EqMono (type elem = Primitive.Word32.word) + structure S = EqtypeMono (type elem = Primitive.Word32.word) open S in - structure Word32Vector = Vector - structure Word32VectorSlice = VectorSlice - structure Word32Array = Array - structure Word32ArraySlice = ArraySlice - structure Word32Array2 = Array2 + structure Word32Vector = MonoVector + structure Word32VectorSlice = MonoVector.MonoVectorSlice + structure Word32Array = MonoArray + structure Word32ArraySlice = MonoArray.MonoArraySlice + structure Word32Array2 = MonoArray2 end local - structure S = EqMono (type elem = Primitive.Word64.word) + structure S = EqtypeMono (type elem = Primitive.Word64.word) open S in - structure Word64Vector = Vector - structure Word64VectorSlice = VectorSlice - structure Word64Array = Array - structure Word64ArraySlice = ArraySlice - structure Word64Array2 = Array2 + structure Word64Vector = MonoVector + structure Word64VectorSlice = MonoVector.MonoVectorSlice + structure Word64Array = MonoArray + structure Word64ArraySlice = MonoArray.MonoArraySlice + structure Word64Array2 = MonoArray2 end local - structure S = EqMono (type elem = Char.char) + structure S = EqtypeMonoX (type elem = Char.char) open S in - structure CharArray = Array - structure CharArray2 = Array2 - structure CharArraySlice = ArraySlice - structure CharVector = Vector - structure CharVectorSlice = VectorSlice + structure CharVector = MonoVector + structure CharVectorSlice = MonoVector.MonoVectorSlice + structure CharArray = MonoArray + structure CharArraySlice = MonoArray.MonoArraySlice + structure CharArray2 = MonoArray2 end local - structure S = EqMono (type elem = WideChar.char) + structure S = EqtypeMonoX (type elem = WideChar.char) open S in - structure WideCharArray = Array - structure WideCharArray2 = Array2 - structure WideCharArraySlice = ArraySlice - structure WideCharVector = Vector - structure WideCharVectorSlice = VectorSlice + structure WideCharVector = MonoVector + structure WideCharVectorSlice = MonoVector.MonoVectorSlice + structure WideCharArray = MonoArray + structure WideCharArraySlice = MonoArray.MonoArraySlice + structure WideCharArray2 = MonoArray2 end + local - structure S = EqMono (type elem = Int.int) + structure S = EqtypeMono (type elem = Int.int) open S in - structure IntVector = Vector - structure IntVectorSlice = VectorSlice - structure IntArray = Array - structure IntArraySlice = ArraySlice - structure IntArray2 = Array2 + structure IntVector = MonoVector + structure IntVectorSlice = MonoVector.MonoVectorSlice + structure IntArray = MonoArray + structure IntArraySlice = MonoArray.MonoArraySlice + structure IntArray2 = MonoArray2 end local - structure S = EqMono (type elem = LargeInt.int) + structure S = EqtypeMono (type elem = LargeInt.int) open S in - structure LargeIntVector = Vector - structure LargeIntVectorSlice = VectorSlice - structure LargeIntArray = Array - structure LargeIntArraySlice = ArraySlice - structure LargeIntArray2 = Array2 + structure LargeIntVector = MonoVector + structure LargeIntVectorSlice = MonoVector.MonoVectorSlice + structure LargeIntArray = MonoArray + structure LargeIntArraySlice = MonoArray.MonoArraySlice + structure LargeIntArray2 = MonoArray2 end local structure S = Mono (type elem = Real.real) open S in - structure RealVector = Vector - structure RealVectorSlice = VectorSlice - structure RealArray = Array - structure RealArraySlice = ArraySlice - structure RealArray2 = Array2 + structure RealVector = MonoVector + structure RealVectorSlice = MonoVector.MonoVectorSlice + structure RealArray = MonoArray + structure RealArraySlice = MonoArray.MonoArraySlice + structure RealArray2 = MonoArray2 end local structure S = Mono (type elem = LargeReal.real) open S in - structure LargeRealVector = Vector - structure LargeRealVectorSlice = VectorSlice - structure LargeRealArray = Array - structure LargeRealArraySlice = ArraySlice - structure LargeRealArray2 = Array2 + structure LargeRealVector = MonoVector + structure LargeRealVectorSlice = MonoVector.MonoVectorSlice + structure LargeRealArray = MonoArray + structure LargeRealArraySlice = MonoArray.MonoArraySlice + structure LargeRealArray2 = MonoArray2 end local - structure S = EqMono (type elem = Word.word) + structure S = EqtypeMono (type elem = Word.word) open S in - structure WordVector = Vector - structure WordVectorSlice = VectorSlice - structure WordArray = Array - structure WordArraySlice = ArraySlice - structure WordArray2 = Array2 + structure WordVector = MonoVector + structure WordVectorSlice = MonoVector.MonoVectorSlice + structure WordArray = MonoArray + structure WordArraySlice = MonoArray.MonoArraySlice + structure WordArray2 = MonoArray2 end local - structure S = EqMono (type elem = LargeWord.word) + structure S = EqtypeMono (type elem = LargeWord.word) open S in - structure LargeWordVector = Vector - structure LargeWordVectorSlice = VectorSlice - structure LargeWordArray = Array - structure LargeWordArraySlice = ArraySlice - structure LargeWordArray2 = Array2 + structure LargeWordVector = MonoVector + structure LargeWordVectorSlice = MonoVector.MonoVectorSlice + structure LargeWordArray = MonoArray + structure LargeWordArraySlice = MonoArray.MonoArraySlice + structure LargeWordArray2 = MonoArray2 end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/mono-vector.fun mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-vector.fun --- mlton-20130715/basis-library/arrays-and-vectors/mono-vector.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-vector.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -13,12 +14,16 @@ type array = elem array type elem = elem type vector = elem vector + val fromPoly = fn v => v + val toPoly = fn v => v structure MonoVectorSlice = struct open VectorSlice type elem = elem type vector = vector type slice = elem slice + val fromPoly = fn s => s + val toPoly = fn s => s end end @@ -29,6 +34,7 @@ type array = elem array type elem = elem type vector = elem vector + type vector_eqtype = vector val fromPoly = fn v => v val toPoly = fn v => v structure MonoVectorSlice = diff -Nru mlton-20130715/basis-library/arrays-and-vectors/mono-vector.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-vector.sig --- mlton-20130715/basis-library/arrays-and-vectors/mono-vector.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-vector.sig 2021-12-28 17:19:36.000000000 +0000 @@ -25,32 +25,33 @@ val update: vector * int * elem -> vector end -signature MONO_VECTOR_EXTRA_PRE = +signature MONO_VECTOR_EXTRA_COMMON = sig include MONO_VECTOR type array - val unsafeFromArray: array -> vector - val unsafeSub: vector * int -> elem - val append: vector * vector -> vector val concatWith: vector -> vector list -> vector val duplicate: vector -> vector val fields: (elem -> bool) -> vector -> vector list + val fromPoly: elem Vector.vector -> vector val isPrefix: (elem * elem -> bool) -> vector -> vector -> bool val isSubvector: (elem * elem -> bool) -> vector -> vector -> bool val isSuffix: (elem * elem -> bool) -> vector -> vector -> bool val toList: vector -> elem list + val toPoly: vector -> elem Vector.vector val tokens: (elem -> bool) -> vector -> vector list val translate: (elem -> vector) -> vector -> vector val unfoldi: int * 'a * (int * 'a -> elem * 'a) -> vector * 'a + val unsafeFromArray: array -> vector + val unsafeSub: vector * int -> elem val vector: int * elem -> vector end signature MONO_VECTOR_EXTRA = sig - include MONO_VECTOR_EXTRA_PRE + include MONO_VECTOR_EXTRA_COMMON structure MonoVectorSlice: MONO_VECTOR_SLICE_EXTRA where type elem = elem @@ -59,12 +60,11 @@ signature EQTYPE_MONO_VECTOR_EXTRA = sig - include MONO_VECTOR_EXTRA_PRE + eqtype vector_eqtype + include MONO_VECTOR_EXTRA_COMMON + sharing type vector_eqtype = vector structure MonoVectorSlice: EQTYPE_MONO_VECTOR_SLICE_EXTRA where type elem = elem and type vector = vector - - val fromPoly: elem Vector.vector -> vector - val toPoly: vector -> elem Vector.vector end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/mono-vector-slice.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-vector-slice.sig --- mlton-20130715/basis-library/arrays-and-vectors/mono-vector-slice.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/mono-vector-slice.sig 2021-12-28 17:19:36.000000000 +0000 @@ -37,6 +37,7 @@ val dropl: (elem -> bool) -> slice -> slice val dropr: (elem -> bool) -> slice -> slice val fields: (elem -> bool) -> slice -> slice list + val fromPoly: elem VectorSlice.slice -> slice val isPrefix: (elem * elem -> bool) -> vector -> slice -> bool val isSubvector: (elem * elem -> bool) -> vector -> slice -> bool val isSuffix: (elem * elem -> bool) -> vector -> slice -> bool @@ -47,6 +48,7 @@ val takel: (elem -> bool) -> slice -> slice val taker: (elem -> bool) -> slice -> slice val toList: slice -> elem list + val toPoly: slice -> elem VectorSlice.slice val tokens: (elem -> bool) -> slice -> slice list val translate: (elem -> vector) -> slice -> vector val triml: int -> slice -> slice @@ -60,7 +62,5 @@ sig include MONO_VECTOR_SLICE_EXTRA - val fromPoly: elem VectorSlice.slice -> slice val span: slice * slice -> slice - val toPoly: slice -> elem VectorSlice.slice end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/sequence0.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/sequence0.sig --- mlton-20130715/basis-library/arrays-and-vectors/sequence0.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/sequence0.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,63 @@ +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2014 Rob Simmons. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature PRIM_SEQUENCE = + sig + type 'a sequence + type 'a elt + + structure Slice: PRIM_SLICE where type 'a sequence = 'a sequence + and type 'a elt = 'a elt + + val maxLen: SeqIndex.int (* Must also be representable as an Int.int *) + val length: 'a sequence -> SeqIndex.int + val sub: 'a sequence * SeqIndex.int -> 'a elt + val unsafeSub: 'a sequence * SeqIndex.int -> 'a elt + val uninitIsNop: 'a sequence -> bool + val uninit: 'a sequence * SeqIndex.int -> unit + val unsafeUninit: 'a sequence * SeqIndex.int -> unit + val update: 'a sequence * SeqIndex.int * 'a elt -> unit + val unsafeUpdate: 'a sequence * SeqIndex.int * 'a elt -> unit + val copy: {dst: 'a elt array, di: SeqIndex.int, src: 'a sequence} -> unit + val unsafeCopy: {dst: 'a elt array, di: SeqIndex.int, src: 'a sequence} -> unit + val tabulate: SeqIndex.int * (SeqIndex.int -> 'a elt) -> 'a sequence + val appi: (SeqIndex.int * 'a elt -> unit) -> 'a sequence -> unit + val app: ('a elt -> unit) -> 'a sequence -> unit + val mapi: (SeqIndex.int * 'a elt -> 'b elt) -> 'a sequence -> 'b sequence + val map: ('a elt -> 'b elt) -> 'a sequence -> 'b sequence + val foldli: (SeqIndex.int * 'a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b + val foldl: ('a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b + val foldri: (SeqIndex.int * 'a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b + val foldr: ('a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b + val findi: (SeqIndex.int * 'a elt -> bool) -> 'a sequence -> (SeqIndex.int * 'a elt) option + val find: ('a elt -> bool) -> 'a sequence -> 'a elt option + val existsi: (SeqIndex.int * 'a elt -> bool) -> 'a sequence -> bool + val exists: ('a elt -> bool) -> 'a sequence -> bool + val alli: (SeqIndex.int * 'a elt -> bool) -> 'a sequence -> bool + val all: ('a elt -> bool) -> 'a sequence -> bool + val collate: ('a elt * 'a elt -> order) -> 'a sequence * 'a sequence -> order + + + + + (* Extra *) + val alloc: SeqIndex.int -> 'a sequence + val append: 'a sequence * 'a sequence -> 'a sequence + val create: + SeqIndex.int -> {done: unit -> 'a sequence, + sub: SeqIndex.int -> 'a elt, + update: SeqIndex.int * 'a elt -> unit} + val duplicate: 'a sequence -> 'a sequence + val new: SeqIndex.int * 'a elt -> 'a sequence + val unfoldi: SeqIndex.int * 'b * (SeqIndex.int * 'b -> 'a elt * 'b) -> 'a sequence * 'b + val unfold: SeqIndex.int * 'b * ('b -> 'a elt * 'b) -> 'a sequence * 'b + val unsafeAlloc: SeqIndex.int -> 'a sequence + val unsafeFromArray: 'a elt array -> 'a sequence + end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/sequence0.sml mlton-20210117+dfsg/basis-library/arrays-and-vectors/sequence0.sml --- mlton-20130715/basis-library/arrays-and-vectors/sequence0.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/sequence0.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,585 @@ +(* Copyright (C) 2015,2017 Matthew Fluet. + * Copyright (C) 2014 Rob Simmons. + * Copyright (C) 2013 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor PrimSequence (S: sig + type 'a sequence + type 'a elt + val copyUnsafe: 'a elt array * SeqIndex.int * 'a sequence * SeqIndex.int * SeqIndex.int -> unit + (* fromArray should be constant time. *) + val fromArray: 'a elt array -> 'a sequence + val isMutable: bool + val length: 'a sequence -> SeqIndex.int + val sameArray: 'a elt array * 'a sequence -> bool + val subUnsafe: 'a sequence * SeqIndex.int -> 'a elt + val uninitIsNop: 'a sequence -> bool + val uninitUnsafe: 'a sequence * SeqIndex.int -> unit + val updateUnsafe: 'a sequence * SeqIndex.int * 'a elt -> unit + end) :> PRIM_SEQUENCE where type 'a sequence = 'a S.sequence + where type 'a elt = 'a S.elt = + struct + structure Array = Primitive.Array + + val op +! = SeqIndex.+! + val op + = SeqIndex.+ + val op -! = SeqIndex.-! + val op < = SeqIndex.< + val op <= = SeqIndex.<= + val op > = SeqIndex.> + val op >= = SeqIndex.>= + val gtu = SeqIndex.gtu + val geu = SeqIndex.geu + val ! = Primitive.Ref.deref + val op := = Primitive.Ref.assign + fun (f o g) x = f (g x) + + type 'a sequence = 'a S.sequence + type 'a elt = 'a S.elt + + local + fun valOf x: Primitive.Int32.int = case x of SOME y => y | NONE => 0 + fun doit (precision, fromInt, maxInt') = + if Primitive.Int32.>= (valOf SeqIndex.precision, precision) + then fromInt maxInt' + else SeqIndex.maxInt' + structure S = + Int_ChooseInt + (type 'a t = SeqIndex.int + val fInt8 = doit (valOf Primitive.Int8.precision, + SeqIndex.schckFromInt8, + Primitive.Int8.maxInt') + val fInt16 = doit (valOf Primitive.Int16.precision, + SeqIndex.schckFromInt16, + Primitive.Int16.maxInt') + val fInt32 = doit (valOf Primitive.Int32.precision, + SeqIndex.schckFromInt32, + Primitive.Int32.maxInt') + val fInt64 = doit (valOf Primitive.Int64.precision, + SeqIndex.schckFromInt64, + Primitive.Int64.maxInt') + val fIntInf = SeqIndex.maxInt') + in + val maxLen = S.f + end + + fun length s = S.length s + + fun unsafeArrayAlloc n = Array.allocUnsafe n + fun arrayAlloc n = + if Primitive.Controls.safe + andalso gtu (n, maxLen) + then raise Size + else unsafeArrayAlloc n + fun unsafeAlloc n = S.fromArray (unsafeArrayAlloc n) + fun alloc n = S.fromArray (arrayAlloc n) + val unsafeFromArray = S.fromArray + exception CreateAlreadyGotVector + exception CreateVectorNotFull + fun create n = + let + val a = arrayAlloc n + val subLim : SeqIndex.t ref = ref 0 + fun sub i = + if Primitive.Controls.safe andalso geu (i, !subLim) then + raise Subscript + else + Array.subUnsafe (a, i) + val updateLim : SeqIndex.t ref = ref 0 + fun update (i, x) = + if Primitive.Controls.safe andalso geu (i, !updateLim) then + if i = !updateLim andalso i < n then + (Array.updateUnsafe (a, i, x); + subLim := i + 1; + updateLim := i + 1) + else + raise Subscript + else + Array.updateUnsafe (a, i, x) + val gotIt = ref false + fun done () = + if !gotIt then + raise CreateAlreadyGotVector + else + if n = !updateLim then + (gotIt := true; + updateLim := 0; + S.fromArray a) + else + raise CreateVectorNotFull + in + {done = done, + sub = sub, + update = update} + end + + fun unfoldi (n, b, f) = + let + val a = arrayAlloc n + fun loop (i, b) = + if i >= n + then b + else + let + val (x, b) = f (i, b) + val () = Array.updateUnsafe (a, i, x) + in + loop (i +! 1, b) + end + val b = loop (0, b) + in + (S.fromArray a, b) + end + + fun unfold (n, b, f) = unfoldi (n, b, f o #2) + + fun tabulate (n, f) = + #1 (unfoldi (n, (), fn (i, ()) => (f i, ()))) + + fun new (n, x) = tabulate (n, fn _ => x) + + structure Slice = + struct + type 'a sequence = 'a sequence + type 'a elt = 'a elt + datatype 'a t = T of {seq: 'a sequence, + start: SeqIndex.int, len: SeqIndex.int} + type 'a slice = 'a t + + fun length (T {len, ...}) = len + fun unsafeSub (T {seq, start, ...}, i) = + S.subUnsafe (seq, start +! i) + fun sub (sl as T {len, ...}, i) = + if Primitive.Controls.safe andalso geu (i, len) + then raise Subscript + else unsafeSub (sl, i) + fun unsafeUpdate (T {seq, start, ...}, i, x) = + S.updateUnsafe (seq, start +! i, x) + fun update (sl as T {len, ...}, i, x) = + if Primitive.Controls.safe andalso geu (i, len) + then raise Subscript + else unsafeUpdate (sl, i, x) + fun uninitIsNop (T {seq, ...}) = + S.uninitIsNop seq + fun unsafeUninit (T {seq, start, ...}, i) = + S.uninitUnsafe (seq, start +! i) + fun uninit (sl as T {len, ...}, i) = + if Primitive.Controls.safe andalso geu (i, len) + then raise Subscript + else unsafeUninit (sl, i) + local + fun smallCopy {dst: 'a elt array, di: SeqIndex.int, + src: 'a sequence, si: SeqIndex.int, + len: SeqIndex.int, + overlap: unit -> bool} = + let + fun move i = Array.updateUnsafe (dst, di +! i, S.subUnsafe (src, si +! i)) + val len = len -! 1 + in + if overlap () + then let + fun loop i = + if i < 0 + then () + else (move i; loop (i -! 1)) + in + loop len + end + else let + fun loop i = + if i > len + then () + else (move i; loop (i +! 1)) + in + loop 0 + end + end + val smallCopyLimit = 5 + fun maybeSmallCopy {dst: 'a elt array, di: SeqIndex.int, + src: 'a sequence, si: SeqIndex.int, + len: SeqIndex.int, + overlap: unit -> bool} = + if len < smallCopyLimit + then smallCopy {dst = dst, di = di, + src = src, si = si, + len = len, + overlap = overlap} + else S.copyUnsafe (dst, di, src, si, len) + in + fun unsafeCopy {dst: 'a elt array, di: SeqIndex.int, + src = T {seq = src, start = si, len}} = + maybeSmallCopy {dst = dst, di = di, + src = src, si = si, + len = len, + overlap = fn () => false} + fun copy {dst: 'a elt array, di: SeqIndex.int, + src = T {seq = src, start = si, len}} = + if Primitive.Controls.safe + andalso (gtu (di, Array.length dst) + orelse gtu (di +! len, Array.length dst)) + then raise Subscript + else let + fun overlap () = + S.sameArray (dst, src) + andalso si < di + andalso di <= si +! len + in + maybeSmallCopy {dst = dst, di = di, + src = src, si = si, + len = len, + overlap = overlap} + end + end + fun full (seq: 'a sequence) : 'a slice = + T {seq = seq, start = 0, len = S.length seq} + fun unsafeSubslice (T {seq, start, len}, start', len') = + T {seq = seq, + start = start +! start', + len = (case len' of + NONE => len -! start' + | SOME len' => len')} + fun unsafeSlice (seq, start, len) = + unsafeSubslice (full seq, start, len) + fun subslice (T {seq, start, len}, start', len') = + case len' of + NONE => + if Primitive.Controls.safe + andalso gtu (start', len) + then raise Subscript + else T {seq = seq, + start = start +! start', + len = len -! start'} + | SOME len' => + if Primitive.Controls.safe + andalso (gtu (start', len) + orelse gtu (len', len -! start')) + then raise Subscript + else T {seq = seq, + start = start +! start', + len = len'} + fun slice (seq: 'a sequence, start, len) = + subslice (full seq, start, len) + fun base (T {seq, start, len}) = + (seq, start, len) + fun isEmpty sl = length sl = 0 + fun getItem (sl as T {seq, start, len}) = + if isEmpty sl + then NONE + else SOME (S.subUnsafe (seq, start), + T {seq = seq, + start = start +! 1, + len = len -! 1}) + fun foldli f b (T {seq, start, len}) = + let + val min = start + val len = len -! 1 + val max = start +! len + fun loop (i, b) = + if i > max then b + else loop (i +! 1, f (i -! min, S.subUnsafe (seq, i), b)) + in loop (min, b) + end + fun foldri f b (T {seq, start, len}) = + let + val min = start + val len = len -! 1 + val max = start +! len + fun loop (i, b) = + if i < min then b + else loop (i -! 1, f (i -! min, S.subUnsafe (seq, i), b)) + in loop (max, b) + end + local + fun make foldi f b sl = foldi (fn (_, x, b) => f (x, b)) b sl + in + fun foldl f = make foldli f + fun foldr f = make foldri f + end + fun appi f sl = foldli (fn (i, x, ()) => f (i, x)) () sl + fun app f sl = appi (f o #2) sl + fun mapi f (T {seq, start, len}) = + tabulate (len, fn i => f (i, S.subUnsafe (seq, start +! i))) + fun map f sl = mapi (f o #2) sl + fun findi p (T {seq, start, len}) = + let + val min = start + val len = len -! 1 + val max = start +! len + fun loop i = + if i > max + then NONE + else let val z = (i -! min, S.subUnsafe (seq, i)) + in if p z + then SOME z + else loop (i +! 1) + end + in loop min + end + fun find p sl = + case findi (p o #2) sl of + NONE => NONE + | SOME (_, x) => SOME x + fun existsi p sl = + case findi p sl of + NONE => false + | SOME _ => true + fun exists p sl = existsi (p o #2) sl + fun alli p sl = not (existsi (not o p) sl) + fun all p sl = alli (p o #2) sl + fun collate cmp (T {seq = seq1, start = start1, len = len1}, + T {seq = seq2, start = start2, len = len2}) = + let + val min1 = start1 + val min2 = start2 + val max1 = start1 +! len1 + val max2 = start2 +! len2 + fun loop (i, j) = + case (i >= max1, j >= max2) of + (true, true) => EQUAL + | (true, false) => LESS + | (false, true) => GREATER + | (false, false) => + (case cmp (S.subUnsafe (seq1, i), + S.subUnsafe (seq2, j)) of + EQUAL => loop (i +! 1, j +! 1) + | ans => ans) + in loop (min1, min2) + end + fun sequence (sl as T {seq, start, len}): 'a sequence = + if S.isMutable orelse (start <> 0 orelse len <> S.length seq) + then let + val a = arrayAlloc len + in + S.copyUnsafe (a, 0, seq, start, len) + ; S.fromArray a + end + else seq + fun append (sl1: 'a slice, sl2: 'a slice): 'a sequence = + if length sl1 = 0 + then sequence sl2 + else if length sl2 = 0 + then sequence sl1 + else + let + val (seq1, start1, len1) = base sl1 + val (seq2, start2, len2) = base sl2 + val n = len1 +! len2 + val a = arrayAlloc n + in + S.copyUnsafe (a, 0, seq1, start1, len1) + ; S.copyUnsafe (a, len1, seq2, start2, len2) + ; S.fromArray a + end + fun split (T {seq, start, len}, i) = + (unsafeSlice (seq, start, SOME (i -! start)), + unsafeSlice (seq, i, SOME (len -! (i -! start)))) + fun splitl f (sl as T {seq, start, len}) = + let + val stop = start +! len + fun loop i = + if i >= stop + then i + else if f (S.subUnsafe (seq, i)) + then loop (i +! 1) + else i + in split (sl, loop start) + end + fun splitr f (sl as T {seq, start, len}) = + let + fun loop i = + if i < start + then start + else if f (S.subUnsafe (seq, i)) + then loop (i -! 1) + else i +! 1 + in split (sl, loop (start +! len -! 1)) + end + fun splitAt (T {seq, start, len}, i) = + if Primitive.Controls.safe andalso gtu (i, len) + then raise Subscript + else (unsafeSlice (seq, start, SOME i), + unsafeSlice (seq, start +! i, SOME (len -! i))) + fun dropl p s = #2 (splitl p s) + fun dropr p s = #1 (splitr p s) + fun takel p s = #1 (splitl p s) + fun taker p s = #2 (splitr p s) + fun position (eq: 'a elt * 'a elt -> bool) + (seq': 'a sequence) + (sl as T {seq, start, len}) = + let + val len' = S.length seq' + val max = start +! len -! len' +! 1 + (* loop returns the index of the front of the suffix. *) + fun loop i = + if i >= max + then start +! len + else let + fun loop' j = + if j >= len' + then i + else if eq (S.subUnsafe (seq, i +! j), + S.subUnsafe (seq', j)) + then loop' (j +! 1) + else loop (i +! 1) + in loop' 0 + end + in split (sl, loop start) + end + fun span (eq: 'a sequence * 'a sequence -> bool) + (T {seq, start, ...}, + T {seq = seq', start = start', len = len'}) = + if Primitive.Controls.safe andalso + (not (eq (seq, seq')) orelse start' +! len' < start) + then raise Span + else unsafeSlice (seq, start, SOME ((start' +! len') -! start)) + end + + local + fun make f seq = f (Slice.full seq) + fun make2 f (seq1, seq2) = f (Slice.full seq1, Slice.full seq2) + in + fun sub (seq, i) = Slice.sub (Slice.full seq, i) + fun unsafeSub (seq, i) = Slice.unsafeSub (Slice.full seq, i) + fun update (seq, i, x) = Slice.update (Slice.full seq, i, x) + fun unsafeUpdate (seq, i, x) = Slice.unsafeUpdate (Slice.full seq, i, x) + fun uninitIsNop seq = Slice.uninitIsNop (Slice.full seq) + fun uninit (seq, i) = Slice.uninit (Slice.full seq, i) + fun unsafeUninit (seq, i) = Slice.unsafeUninit (Slice.full seq, i) + fun copy {dst, di, src} = Slice.copy {dst = dst, di = di, src = Slice.full src} + fun unsafeCopy {dst, di, src} = Slice.unsafeCopy {dst = dst, di = di, src = Slice.full src} + fun appi f = make (Slice.appi f) + fun app f = make (Slice.app f) + fun mapi f = make (Slice.mapi f) + fun map f = make (Slice.map f) + fun foldli f b = make (Slice.foldli f b) + fun foldl f b = make (Slice.foldl f b) + fun foldri f b = make (Slice.foldri f b) + fun foldr f b = make (Slice.foldr f b) + fun findi p = make (Slice.findi p) + fun find p = make (Slice.find p) + fun existsi p = make (Slice.existsi p) + fun exists p = make (Slice.exists p) + fun alli p = make (Slice.alli p) + fun all p = make (Slice.all p) + fun collate cmp = make2 (Slice.collate cmp) + fun append seqs = make2 Slice.append seqs + fun duplicate seq = make Slice.sequence seq + end + + end + +structure Primitive = struct +open Primitive + +structure Array = + struct + local + structure P = PrimSequence (type 'a sequence = 'a array + type 'a elt = 'a + val sameArray = op = + val copyUnsafe = Primitive.Array.copyArrayUnsafe + val fromArray = fn a => a + val isMutable = true + val length = Primitive.Array.length + val subUnsafe = Primitive.Array.subUnsafe + val uninitIsNop = Primitive.Array.uninitIsNop + val uninitUnsafe = Primitive.Array.uninitUnsafe + val updateUnsafe = Primitive.Array.updateUnsafe) + in + open P + type 'a array = 'a array + structure Slice = + struct + open Slice + fun vector sl = + let + val a = unsafeAlloc (length sl) + val () = unsafeCopy {dst = a, di = 0, src = sl} + in + Vector.fromArrayUnsafe a + end + fun modifyi f sl = + appi (fn (i, x) => unsafeUpdate (sl, i, f (i, x))) sl + fun modify f sl = modifyi (fn (_, x) => f x) sl + end + fun vector s = Slice.vector (Slice.full s) + fun modifyi f s = Slice.modifyi f (Slice.full s) + fun modify f s = Slice.modify f (Slice.full s) + end + structure Raw = + struct + type 'a rawarr = 'a Primitive.Array.Raw.rawarr + + val length = Primitive.Array.Raw.length + + val unsafeAlloc = Primitive.Array.Raw.allocUnsafe + fun alloc n = + if Primitive.Controls.safe + andalso SeqIndex.gtu (n, maxLen) + then raise Size + else unsafeAlloc n + + val unsafeToArray = Primitive.Array.Raw.toArrayUnsafe + + val uninitIsNop = Primitive.Array.Raw.uninitIsNop + val unsafeUninit = Primitive.Array.Raw.uninitUnsafe + fun uninit (a, i) = + if Primitive.Controls.safe andalso SeqIndex.geu (i, length a) + then raise Subscript + else unsafeUninit (a, i) + + end + end + +structure Vector = + struct + local + exception Vector_uninitIsNop + exception Vector_uninitUnsafe + exception Vector_updateUnsafe + structure P = PrimSequence (type 'a sequence = 'a vector + type 'a elt = 'a + val copyUnsafe = Primitive.Array.copyVectorUnsafe + val fromArray = Primitive.Vector.fromArrayUnsafe + val isMutable = false + val length = Vector.length + val sameArray = fn _ => false + val subUnsafe = Primitive.Vector.subUnsafe + val uninitIsNop = fn _ => + raise Vector_uninitIsNop + val uninitUnsafe = fn _ => + raise Vector_uninitUnsafe + val updateUnsafe = fn _ => + raise Vector_updateUnsafe) + in + open P + type 'a vector = 'a vector + fun updateVector (v, i, x) = + if Primitive.Controls.safe andalso SeqIndex.geu (i, length v) + then raise Subscript + else let + val a = Array.unsafeAlloc (length v) + val () = copy {dst = a, di = 0, src = v} + val () = Array.unsafeUpdate (a, i, x) + in + unsafeFromArray a + end + end + end + +end + +structure Array = + struct + type 'a array = 'a array + end +structure Vector = + struct + type 'a vector = 'a vector + end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/sequence.fun mlton-20210117+dfsg/basis-library/arrays-and-vectors/sequence.fun --- mlton-20130715/basis-library/arrays-and-vectors/sequence.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/sequence.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2013 Matthew Fluet. +(* Copyright (C) 2013,2017-2018 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -11,7 +11,6 @@ struct open SeqIndex - val maxLen' = maxInt' local structure S = Int_ChooseInt @@ -60,30 +59,21 @@ in val toInt = S.f end + + fun fromIntForLength n = + if Primitive.Controls.safe + then (fromInt n) handle Overflow => raise Size + else fromIntUnsafe n end -functor Sequence (S: sig - type 'a sequence - type 'a elt - (* fromArray should be constant time. *) - val fromArray: 'a elt array -> 'a sequence - val isMutable: bool - val length: 'a sequence -> SeqIndex.int - val subUnsafe: 'a sequence * SeqIndex.int -> 'a elt - end - ): SEQUENCE = +functor Sequence (S: PRIM_SEQUENCE): SEQUENCE = struct - structure Array = Primitive.Array - - val op +? = SeqIndex.+? - val op + = SeqIndex.+ - val op -? = SeqIndex.-? - val op < = SeqIndex.< + val op +! = SeqIndex.+! + val op +$ = SeqIndex.+$ + val op -! = SeqIndex.-! val op <= = SeqIndex.<= val op > = SeqIndex.> val op >= = SeqIndex.>= - val gtu = SeqIndex.gtu - val geu = SeqIndex.geu (* fun wrap1 f = fn (i) => f (SeqIndex.toIntUnsafe i) *) fun wrap2 f = fn (i, x) => f (SeqIndex.toIntUnsafe i, x) @@ -94,135 +84,40 @@ type 'a sequence = 'a S.sequence type 'a elt = 'a S.elt - (* - * In general, *' values are in terms of SeqIndex.int, - * while * values are in terms of Int.int. - *) - - local - fun doit (precision, toInt, fromInt, maxInt') = - if Primitive.Int32.>= (valOf SeqIndex.precision, precision) - then (fromInt maxInt', maxInt') - else (SeqIndex.maxLen', toInt SeqIndex.maxLen') - structure S = - Int_ChooseInt - (type 'a t = SeqIndex.int * 'a - val fInt8 = doit (valOf Primitive.Int8.precision, - SeqIndex.schckToInt8, SeqIndex.schckFromInt8, - Primitive.Int8.maxInt') - val fInt16 = doit (valOf Primitive.Int16.precision, - SeqIndex.schckToInt16, SeqIndex.schckFromInt16, - Primitive.Int16.maxInt') - val fInt32 = doit (valOf Primitive.Int32.precision, - SeqIndex.schckToInt32, SeqIndex.schckFromInt32, - Primitive.Int32.maxInt') - val fInt64 = doit (valOf Primitive.Int64.precision, - SeqIndex.schckToInt64, SeqIndex.schckFromInt64, - Primitive.Int64.maxInt') - val fIntInf = (SeqIndex.maxLen', SeqIndex.schckToIntInf SeqIndex.maxLen')) - in - val (maxLen', maxLen) = S.f - end - - fun fromIntForLength n = - if Primitive.Controls.safe - then (SeqIndex.fromInt n) handle Overflow => raise Size - else SeqIndex.fromIntUnsafe n + (* S.maxLen must be representable as an Int.int already *) + val maxLen = SeqIndex.toInt S.maxLen - fun length' s = S.length s fun length s = if Primitive.Controls.safe - then (SeqIndex.toInt (length' s)) + then (SeqIndex.toInt (S.length s)) handle Overflow => raise Fail "Sequence.length" - else SeqIndex.toIntUnsafe (length' s) + else SeqIndex.toIntUnsafe (S.length s) - fun arrayUninit' n = - if not S.isMutable andalso n = 0 - then Array.array0Const () - else if Primitive.Controls.safe - andalso gtu (n, maxLen') - then raise Size - else Array.arrayUnsafe n - fun arrayUninit n = arrayUninit' (fromIntForLength n) - - fun newUninit' n = S.fromArray (arrayUninit' n) - fun newUninit n = S.fromArray (arrayUninit n) - - fun generate' n = - let - val a = arrayUninit' n - val subLim : SeqIndex.t ref = ref 0 - fun sub i = - if Primitive.Controls.safe andalso geu (i, !subLim) then - raise Subscript - else - Array.subUnsafe (a, i) - val updateLim : SeqIndex.t ref = ref 0 - fun update (i, x) = - if Primitive.Controls.safe andalso geu (i, !updateLim) then - if i = !updateLim andalso i < n then - (Array.updateUnsafe (a, i, x); - subLim := i + 1; - updateLim := i + 1) - else - raise Subscript - else - Array.updateUnsafe (a, i, x) - val gotIt = ref false - fun done () = - if !gotIt then - raise Fail "already got vector" - else - if n = !updateLim then - (gotIt := true; - updateLim := 0; - S.fromArray a) - else - raise Fail "vector not full" - in - {done = done, - sub = sub, - update = update} - end + fun alloc n = S.alloc (SeqIndex.fromIntForLength n) + fun unsafeAlloc n = S.unsafeAlloc (SeqIndex.fromIntUnsafe n) - fun generate n = + fun create n = let - val {done, sub, update} = generate' (fromIntForLength n) + val {done, sub, update} = S.create (SeqIndex.fromIntForLength n) in {done = done, sub = unwrap1 sub, update = unwrap2 update} end - fun unfoldi' (n, b, f) = - let - val a = arrayUninit' n - fun loop (i, b) = - if i >= n - then b - else - let - val (x, b') = f (i, b) - val () = Array.updateUnsafe (a, i, x) - in - loop (i +? 1, b') - end - val b = loop (0, b) - in - (S.fromArray a, b) - end - fun unfoldi (n, b, f) = unfoldi' (fromIntForLength n, b, wrap2 f) - fun unfold (n, b, f) = unfoldi (n, b, f o #2) + fun unfoldi (n, b, f) = S.unfoldi (SeqIndex.fromIntForLength n, b, wrap2 f) + fun unfold (n, b, f) = S.unfold (SeqIndex.fromIntForLength n, b, f) + fun unsafeUnfold (n, b, f) = S.unfold (SeqIndex.fromIntUnsafe n, b, f) fun seq0 () = #1 (unfold (0, (), fn _ => raise Fail "Sequence.seq0")) - fun tabulate' (n, f) = - #1 (unfoldi' (n, (), fn (i, ()) => (f i, ()))) fun tabulate (n, f) = #1 (unfoldi (n, (), fn (i, ()) => (f i, ()))) - fun new' (n, x) = tabulate' (n, fn _ => x) - fun new (n, x) = tabulate (n, fn _ => x) + fun new (n, x) = + #1 (unfold (n, (), fn () => (x, ()))) + fun unsafeNew (n, x) = + #1 (unsafeUnfold (n, (), fn () => (x, ()))) fun fromList l = #1 (unfold (List.length l, l, fn l => @@ -232,301 +127,236 @@ structure Slice = struct - type 'a sequence = 'a S.sequence - type 'a elt = 'a S.elt - datatype 'a t = T of {seq: 'a sequence, - start: SeqIndex.int, len: SeqIndex.int} - type 'a slice = 'a t + type 'a sequence = 'a S.Slice.sequence + type 'a elt = 'a S.Slice.elt + type 'a slice = 'a S.Slice.slice - fun length' (T {len, ...}) = len fun length sl = if Primitive.Controls.safe - then (SeqIndex.toInt (length' sl)) + then (SeqIndex.toInt (S.Slice.length sl)) handle Overflow => raise Fail "Sequence.Slice.length" - else SeqIndex.toIntUnsafe (length' sl) - fun unsafeSub' (T {seq, start, ...}, i) = - S.subUnsafe (seq, start +? i) + else SeqIndex.toIntUnsafe (S.Slice.length sl) + fun unsafeSub (sl, i) = - unsafeSub' (sl, SeqIndex.fromIntUnsafe i) - fun sub' (sl as T {len, ...}, i) = - if Primitive.Controls.safe andalso geu (i, len) - then raise Subscript - else unsafeSub' (sl, i) - fun sub (sl, i) = + S.Slice.unsafeSub (sl, SeqIndex.fromIntUnsafe i) + fun sub (sl, i) = if Primitive.Controls.safe - then let + then let val i = (SeqIndex.fromInt i) handle Overflow => raise Subscript in - sub' (sl, i) + S.Slice.sub (sl, i) end else unsafeSub (sl, i) - fun unsafeUpdate'Mk updateUnsafe (T {seq, start, ...}, i, x) = - updateUnsafe (seq, start +? i, x) - fun unsafeUpdateMk updateUnsafe (sl, i, x) = - (unsafeUpdate'Mk updateUnsafe) (sl, SeqIndex.fromIntUnsafe i, x) - fun update'Mk updateUnsafe (sl as T {len, ...}, i, x) = - if Primitive.Controls.safe andalso geu (i, len) - then raise Subscript - else (unsafeUpdate'Mk updateUnsafe) (sl, i, x) - fun updateMk updateUnsafe (sl, i, x) = + + fun unsafeUpdate (sl, i, x) = + S.Slice.unsafeUpdate (sl, SeqIndex.fromIntUnsafe i, x) + fun update (sl, i, x) = + if Primitive.Controls.safe + then let + val i = + (SeqIndex.fromInt i) + handle Overflow => raise Subscript + in + S.Slice.update (sl, i, x) + end + else unsafeUpdate (sl, i, x) + + val uninitIsNop = S.Slice.uninitIsNop + fun unsafeUninit (sl, i) = + S.Slice.unsafeUninit (sl, SeqIndex.fromIntUnsafe i) + fun uninit (sl, i) = if Primitive.Controls.safe then let val i = (SeqIndex.fromInt i) handle Overflow => raise Subscript in - (update'Mk updateUnsafe) (sl, i, x) + S.Slice.uninit (sl, i) end - else (unsafeUpdateMk updateUnsafe) (sl, i, x) - fun full (seq: 'a sequence) : 'a slice = - T {seq = seq, start = 0, len = S.length seq} - fun unsafeSubslice' (T {seq, start, len}, start', len') = - T {seq = seq, - start = start +? start', - len = (case len' of - NONE => len -? start' - | SOME len' => len')} + else unsafeUninit (sl, i) + + fun unsafeCopy {dst, di, src} = + S.Slice.unsafeCopy + {dst = dst, + di = SeqIndex.fromIntUnsafe di, + src = src} + fun copy {dst, di, src} = + (S.Slice.copy + {dst = dst, + di = SeqIndex.fromInt di, + src = src}) + handle Overflow => raise Subscript + + val full = S.Slice.full fun unsafeSubslice (sl, start, len) = - unsafeSubslice' + S.Slice.unsafeSubslice (sl, SeqIndex.fromIntUnsafe start, Option.map SeqIndex.fromIntUnsafe len) - fun unsafeSlice' (seq, start, len) = - unsafeSubslice' (full seq, start, len) fun unsafeSlice (seq, start, len) = - unsafeSubslice (full seq, start, len) - fun subslice' (T {seq, start, len}, start', len') = - case len' of - NONE => - if Primitive.Controls.safe - andalso gtu (start', len) - then raise Subscript - else T {seq = seq, - start = start +? start', - len = len -? start'} - | SOME len' => - if Primitive.Controls.safe - andalso (gtu (start', len) - orelse gtu (len', len -? start')) - then raise Subscript - else T {seq = seq, - start = start +? start', - len = len'} + unsafeSubslice (full seq, start, len) fun subslice (sl, start, len) = if Primitive.Controls.safe - then (subslice' (sl, - SeqIndex.fromInt start, - Option.map SeqIndex.fromInt len)) + then (S.Slice.subslice (sl, + SeqIndex.fromInt start, + Option.map SeqIndex.fromInt len)) handle Overflow => raise Subscript else unsafeSubslice (sl, start, len) - fun slice' (seq: 'a sequence, start, len) = - subslice' (full seq, start, len) fun slice (seq: 'a sequence, start, len) = subslice (full seq, start, len) - fun base' (T {seq, start, len}) = - (seq, start, len) - fun base (T {seq, start, len}) = - (seq, SeqIndex.toIntUnsafe start, SeqIndex.toIntUnsafe len) - fun isEmpty sl = length sl = 0 - fun getItem (sl as T {seq, start, len}) = - if isEmpty sl - then NONE - else SOME (S.subUnsafe (seq, start), - T {seq = seq, - start = start +? 1, - len = len -? 1}) - fun foldli' f b (T {seq, start, len}) = - let - val min = start - val len = len -? 1 - val max = start +? len - fun loop (i, b) = - if i > max then b - else loop (i +? 1, f (i -? min, S.subUnsafe (seq, i), b)) - in loop (min, b) - end - fun foldli f b sl = foldli' (wrap3 f) b sl - fun foldri' f b (T {seq, start, len}) = - let - val min = start - val len = len -? 1 - val max = start +? len - fun loop (i, b) = - if i < min then b - else loop (i -? 1, f (i -? min, S.subUnsafe (seq, i), b)) - in loop (max, b) - end - fun foldri f b sl = foldri' (wrap3 f) b sl - local - fun make foldi f b sl = foldi (fn (_, x, b) => f (x, b)) b sl - in - fun foldl f = make foldli' f - fun foldr f = make foldri' f - end - fun appi' f sl = foldli' (fn (i, x, ()) => f (i, x)) () sl - fun appi f sl = appi' (wrap2 f) sl - fun app f sl = appi (f o #2) sl - fun createi' tabulate' f (T {seq, start, len}) = - tabulate' (len, fn i => f (i, S.subUnsafe (seq, start +? i))) - fun createi tabulate' f sl = createi' tabulate' (wrap2 f) sl - fun create tabulate' f sl = createi tabulate' (f o #2) sl - fun mapi' f sl = createi' tabulate' f sl - fun mapi f sl = mapi' (wrap2 f) sl - fun map f sl = mapi (f o #2) sl - fun findi' p (T {seq, start, len}) = - let - val min = start - val len = len -? 1 - val max = start +? len - fun loop i = - if i > max - then NONE - else let val z = (i -? min, S.subUnsafe (seq, i)) - in if p z - then SOME z - else loop (i +? 1) - end - in loop min - end - fun findi p sl = Option.map (wrap2 (fn z => z)) (findi' (wrap2 p) sl) - fun find p sl = Option.map #2 (findi (p o #2) sl) - fun existsi' p sl = Option.isSome (findi' p sl) - fun existsi p sl = existsi' (wrap2 p) sl - fun exists p sl = existsi (p o #2) sl - fun alli' p sl = not (existsi' (not o p) sl) - fun alli p sl = alli' (wrap2 p) sl - fun all p sl = alli (p o #2) sl - fun collate cmp (T {seq = seq1, start = start1, len = len1}, - T {seq = seq2, start = start2, len = len2}) = + fun base sl = let - val min1 = start1 - val min2 = start2 - val max1 = start1 +? len1 - val max2 = start2 +? len2 - fun loop (i, j) = - case (i >= max1, j >= max2) of - (true, true) => EQUAL - | (true, false) => LESS - | (false, true) => GREATER - | (false, false) => - (case cmp (S.subUnsafe (seq1, i), - S.subUnsafe (seq2, j)) of - EQUAL => loop (i +? 1, j +? 1) - | ans => ans) - in loop (min1, min2) + val (seq, start, len) = S.Slice.base sl + in + if Primitive.Controls.safe + then (seq, SeqIndex.toInt start, SeqIndex.toInt len) + handle Overflow => raise Fail "Sequence.Slice.base" + else (seq, + SeqIndex.toIntUnsafe start, + SeqIndex.toIntUnsafe len) end - fun sequence (sl as T {seq, start, len}): 'a sequence = - if S.isMutable orelse (start <> 0 orelse len <> S.length seq) - then map (fn x => x) sl - else seq - fun append (sl1: 'a slice, sl2: 'a slice): 'a sequence = - if length' sl1 = 0 - then sequence sl2 - else if length' sl2 = 0 - then sequence sl1 - else - let - val l1 = length' sl1 - val l2 = length' sl2 - val n = l1 +? l2 - fun loop (i, sl) = - if SeqIndex.< (i, length' sl) - then (unsafeSub' (sl, i), - (i +? 1, sl)) - else (unsafeSub' (sl2, 0), - (1, sl2)) - in - #1 (unfoldi' (n, (0, sl1), fn (_, ac) => loop ac)) - end + val isEmpty = S.Slice.isEmpty + val getItem = S.Slice.getItem + fun foldli f b sl = S.Slice.foldli (wrap3 f) b sl + fun foldri f b sl = S.Slice.foldri (wrap3 f) b sl + val foldl = S.Slice.foldl + val foldr = S.Slice.foldr + fun appi f sl = S.Slice.appi (wrap2 f) sl + val app = S.Slice.app + fun mapi f sl = S.Slice.mapi (wrap2 f) sl + val map = S.Slice.map + fun findi p sl = + Option.map (wrap2 (fn z => z)) (S.Slice.findi (wrap2 p) sl) + val find = S.Slice.find + fun existsi p sl = S.Slice.existsi (wrap2 p) sl + val exists = S.Slice.exists + fun alli p sl = S.Slice.alli (wrap2 p) sl + val all = S.Slice.all + val collate = S.Slice.collate + val sequence = S.Slice.sequence + val append = S.Slice.append + + fun concatGen (xs: 'b list, toSlice: 'b -> 'a slice): 'a sequence = + case xs of + [] => seq0 () + | [x] => sequence (toSlice x) + | xs => + let + val add = + if Primitive.Controls.safe + then (fn (x, s) => + (s +$ S.Slice.length (toSlice x)) + handle Overflow => raise Size) + else (fn (x, s) => s +! S.Slice.length (toSlice x)) + val n = List.foldl add 0 xs + val a = Primitive.Array.alloc n + fun loop (di, xs) = + case xs of + [] => S.unsafeFromArray a + | x::xs => + let val sl = toSlice x + in + S.Slice.unsafeCopy {dst = a, di = di, src = sl} + ; loop (di +! S.Slice.length sl, xs) + end + in + loop (0, xs) + end fun concat (sls: 'a slice list): 'a sequence = - case sls of + concatGen (sls, fn sl => sl) + fun concatWithGen (sep: 'a sequence) (xs: 'b list, toSlice: 'b -> 'a slice): 'a sequence = + case xs of [] => seq0 () - | [sl] => sequence sl - | sls' as sl::sls => + | [x] => sequence (toSlice x) + | x::xs => let - val n = - List.foldl (fn (sl, s) => s +? length' sl) 0 sls' - fun loop (i, sl, sls) = - if SeqIndex.< (i, length' sl) - then (unsafeSub' (sl, i), - (i +? 1, sl, sls)) - else case sls of - [] => raise Fail "Sequence.Slice.concat" - | sl :: sls => loop (0, sl, sls) + val sep = S.Slice.full sep + val sepn = S.Slice.length sep + val add = + if Primitive.Controls.safe + then (fn (x, s) => + (s +$ sepn +$ S.Slice.length (toSlice x)) + handle Overflow => raise Size) + else (fn (x, s) => + (s +! sepn +! S.Slice.length (toSlice x))) + val n = List.foldl add (S.Slice.length (toSlice x)) xs + val a = Primitive.Array.alloc n + fun loop (di, xs) = + case xs of + [] => raise Fail "Sequence.Slice.concatWithGen" + | [x] => + let + val sl = toSlice x + val _ = S.Slice.unsafeCopy {dst = a, di = di, src = sl} + in + S.unsafeFromArray a + end + | x::xs => + let + val sl = toSlice x + val _ = S.Slice.unsafeCopy {dst = a, di = di, src = sl} + val di = di +! S.Slice.length sl + val _ = S.Slice.unsafeCopy {dst = a, di = di, src = sep} + val di = di +! sepn + in + loop (di, xs) + end in - #1 (unfoldi' (n, (0, sl, sls), fn (_, ac) => loop ac)) + loop (0, x::xs) end - fun concatWith (sep: 'a sequence) (sls: 'a slice list): 'a sequence = - case sls of - [] => seq0 () - | [sl] => sequence sl - | sl::sls => - let - val sep = full sep - val sepn = length' sep - val n = - List.foldl (fn (sl, s) => s +? sepn +? length' sl) (length' sl) sls - fun loop (b, i, sl, sls) = - if SeqIndex.< (i, length' sl) - then (unsafeSub' (sl, i), - (b, i +? 1, sl, sls)) - else case (b, sls) of - (true, _) => loop (false, 0, sep, sls) - | (_, []) => raise Fail "Sequence.Slice.concatWith" - | (_, sl :: sls) => loop (true, 0, sl, sls) - in - #1 (unfoldi' (n, (true, 0, sl, sls), fn (_, ac) => loop ac)) - end - fun triml k = + fun concatWith sep sls = concatWithGen sep (sls, fn sl => sl) + fun triml k sl = if Primitive.Controls.safe andalso Int.< (k, 0) then raise Subscript - else - (fn (T {seq, start, len}) => - let - val k = - if Primitive.Controls.safe - then SeqIndex.fromInt k - else SeqIndex.fromIntUnsafe k - in - if SeqIndex.> (k, len) - then unsafeSlice' (seq, start +? len, SOME 0) - else unsafeSlice' (seq, start +? k, SOME (len -? k)) - end handle Overflow => unsafeSlice' (seq, start +? len, SOME 0)) - fun trimr k = + else let + val len = S.Slice.length sl + val k = + if Primitive.Controls.safe + then SeqIndex.fromInt k + else SeqIndex.fromIntUnsafe k + in + if SeqIndex.> (k, len) + then S.Slice.unsafeSubslice (sl, len, SOME 0) + else S.Slice.unsafeSubslice (sl, k, SOME (len -! k)) + end handle Overflow => + (* k is positive, so behavior is specified! *) + S.Slice.unsafeSubslice (sl, S.Slice.length sl, SOME 0) + fun trimr k sl = if Primitive.Controls.safe andalso Int.< (k, 0) then raise Subscript - else - (fn (T {seq, start, len}) => - let - val k = - if Primitive.Controls.safe - then SeqIndex.fromInt k - else SeqIndex.fromIntUnsafe k - in - if SeqIndex.> (k, len) - then unsafeSlice' (seq, start, SOME 0) - else unsafeSlice' (seq, start, SOME (len -? k)) - end handle Overflow => unsafeSlice' (seq, start, SOME 0)) + else let + val len = S.Slice.length sl + val k = + if Primitive.Controls.safe + then SeqIndex.fromInt k + else SeqIndex.fromIntUnsafe k + in + if SeqIndex.> (k, len) + then S.Slice.unsafeSubslice (sl, 0, SOME 0) + else S.Slice.unsafeSubslice (sl, 0, SOME (len -! k)) + end handle Overflow => + (* k is positive, so behavior is specified! *) + S.Slice.unsafeSubslice (sl, 0, SOME 0) fun isSubsequence (eq: 'a elt * 'a elt -> bool) (seq: 'a sequence) (sl: 'a slice) = let val n = S.length seq - val n' = length' sl + val n' = S.Slice.length sl in if n <= n' then let - val n'' = n' -? n + val n'' = n' -! n fun loop (i, j) = if i > n'' then false else if j >= n then true - else if eq (S.subUnsafe (seq, j), - unsafeSub' (sl, i +? j)) - then loop (i, j +? 1) - else loop (i +? 1, 0) + else if eq (S.unsafeSub (seq, j), + S.Slice.unsafeSub (sl, i +! j)) + then loop (i, j +! 1) + else loop (i +! 1, 0) in loop (0, 0) end @@ -537,16 +367,16 @@ (sl: 'a slice) = let val n = S.length seq - val n' = length' sl + val n' = S.Slice.length sl in if n <= n' then let fun loop (j) = if j >= n then true - else if eq (S.subUnsafe (seq, j), - unsafeSub' (sl, j)) - then loop (j +? 1) + else if eq (S.unsafeSub (seq, j), + S.Slice.unsafeSub (sl, j)) + then loop (j +! 1) else false in loop (0) @@ -558,121 +388,73 @@ (sl: 'a slice) = let val n = S.length seq - val n' = length' sl + val n' = S.Slice.length sl in if n <= n' then let - val n'' = n' -? n + val n'' = n' -! n fun loop (j) = if j >= n then true - else if eq (S.subUnsafe (seq, j), - unsafeSub' (sl, n'' +? j)) - then loop (j +? 1) + else if eq (S.unsafeSub (seq, j), + S.Slice.unsafeSub (sl, n'' +! j)) + then loop (j +! 1) else false in loop (0) end else false end - fun split' (T {seq, start, len}, i) = - (unsafeSlice' (seq, start, SOME (i -? start)), - unsafeSlice' (seq, i, SOME (len -? (i -? start)))) - fun splitl f (sl as T {seq, start, len}) = - let - val stop = start +? len - fun loop i = - if i >= stop - then i - else if f (S.subUnsafe (seq, i)) - then loop (i +? 1) - else i - in split' (sl, loop start) - end - fun splitr f (sl as T {seq, start, len}) = - let - fun loop i = - if i < start - then start - else if f (S.subUnsafe (seq, i)) - then loop (i -? 1) - else i +? 1 - in split' (sl, loop (start +? len -? 1)) - end - fun splitAt' (T {seq, start, len}, i) = - if Primitive.Controls.safe andalso SeqIndex.gtu (i, len) - then raise Subscript - else (unsafeSlice' (seq, start, SOME i), - unsafeSlice' (seq, start +? i, SOME (len -? i))) - fun splitAt (sl, i) = + val splitl = S.Slice.splitl + val splitr = S.Slice.splitr + fun splitAt (sl, i) = if Primitive.Controls.safe - then (splitAt' (sl, SeqIndex.fromInt i)) + then (S.Slice.splitAt (sl, SeqIndex.fromInt i)) handle Overflow => raise Subscript - else splitAt' (sl, SeqIndex.fromIntUnsafe i) - fun dropl p s = #2 (splitl p s) - fun dropr p s = #1 (splitr p s) - fun takel p s = #1 (splitl p s) - fun taker p s = #2 (splitr p s) - fun position (eq: 'a elt * 'a elt -> bool) - (seq': 'a sequence) - (sl as T {seq, start, len}) = - let - val len' = S.length seq' - val max = start +? len -? len' +? 1 - (* loop returns the index of the front of the suffix. *) - fun loop i = - if i >= max - then start +? len - else let - fun loop' j = - if j >= len' - then i - else if eq (S.subUnsafe (seq, i +? j), - S.subUnsafe (seq', j)) - then loop' (j +? 1) - else loop (i +? 1) - in loop' 0 - end - in split' (sl, loop start) - end - fun span (eq: 'a sequence * 'a sequence -> bool) - (T {seq, start, ...}, - T {seq = seq', start = start', len = len'}) = - if Primitive.Controls.safe andalso - (not (eq (seq, seq')) orelse start' +? len' < start) - then raise Span - else unsafeSlice' (seq, start, SOME ((start' +? len') -? start)) + else S.Slice.splitAt (sl, SeqIndex.fromIntUnsafe i) + val dropl = S.Slice.dropl + val dropr = S.Slice.dropr + val takel = S.Slice.takel + val taker = S.Slice.taker + val position = S.Slice.position fun translate f (sl: 'a slice) = concat (List.rev (foldl (fn (c, l) => (full (f c)) :: l) [] sl)) local - fun make finish p (T {seq, start, len}) = + fun make finish p sl = let - val max = start +? len + val (seq, start, len) = S.Slice.base sl + val max = start +! len fun loop (i, start, sls) = if i >= max then List.rev (finish (seq, start, i, sls)) else - if p (S.subUnsafe (seq, i)) - then loop (i +? 1, i +? 1, finish (seq, start, i, sls)) - else loop (i +? 1, start, sls) + if p (S.unsafeSub (seq, i)) + then loop (i +! 1, i +! 1, finish (seq, start, i, sls)) + else loop (i +! 1, start, sls) in loop (start, start, []) end in - fun tokens p sl = + fun tokensGen fromSlice p sl = make (fn (seq, start, stop, sls) => if start = stop then sls else - (unsafeSlice' (seq, start, SOME (stop -? start))) + (fromSlice + (S.Slice.unsafeSlice + (seq, start, SOME (stop -! start)))) :: sls) p sl - fun fields p sl = + fun fieldsGen fromSlice p sl = make (fn (seq, start, stop, sls) => - (unsafeSlice' (seq, start, SOME (stop -? start))) + (fromSlice + (S.Slice.unsafeSlice + (seq, start, SOME (stop -! start)))) :: sls) p sl end - fun toList (sl: 'a slice) = foldr (fn (a,l) => a::l) [] sl + fun tokens p sl = tokensGen (fn sl => sl) p sl + fun fields p sl = fieldsGen (fn sl => sl) p sl + fun toList (sl: 'a slice) = foldr (fn (a,l) => a::l) [] sl end local @@ -680,51 +462,40 @@ fun make2 f (seq1, seq2) = f (Slice.full seq1, Slice.full seq2) in fun sub (seq, i) = Slice.sub (Slice.full seq, i) - fun sub' (seq, i) = Slice.sub' (Slice.full seq, i) - fun unsafeSub (seq, i) = Slice.unsafeSub (Slice.full seq, i) - fun unsafeSub' (seq, i) = Slice.unsafeSub' (Slice.full seq, i) - fun updateMk updateUnsafe (seq, i, x) = - Slice.updateMk updateUnsafe (Slice.full seq, i, x) - fun update'Mk updateUnsafe (seq, i, x) = - Slice.update'Mk updateUnsafe (Slice.full seq, i, x) - fun unsafeUpdateMk updateUnsafe (seq, i, x) = - Slice.unsafeUpdateMk updateUnsafe (Slice.full seq, i, x) - fun unsafeUpdate'Mk updateUnsafe (seq, i, x) = - Slice.unsafeUpdate'Mk updateUnsafe (Slice.full seq, i, x) - fun append seqs = make2 Slice.append seqs - fun concat seqs = Slice.concat (List.map Slice.full seqs) - fun appi' f = make (Slice.appi' f) + fun unsafeSub (seq, i) = Slice.unsafeSub (Slice.full seq, i) + fun update (seq, i, x) = Slice.update (Slice.full seq, i, x) + fun unsafeUpdate (seq, i, x) = Slice.unsafeUpdate (Slice.full seq, i, x) + fun uninitIsNop seq = Slice.uninitIsNop (Slice.full seq) + fun uninit (seq, i) = Slice.uninit (Slice.full seq, i) + fun unsafeUninit (seq, i) = Slice.unsafeUninit (Slice.full seq, i) + fun copy {dst, di, src} = + Slice.copy {dst = dst, di = di, src = Slice.full src} + fun unsafeCopy {dst, di, src} = + Slice.unsafeCopy {dst = dst, di = di, src = Slice.full src} + fun append seqs = make2 Slice.append seqs + fun concat seqs = Slice.concatGen (seqs, Slice.full) fun appi f = make (Slice.appi f) fun app f = make (Slice.app f) - fun mapi' f = make (Slice.mapi' f) fun mapi f = make (Slice.mapi f) fun map f = make (Slice.map f) - fun foldli' f b = make (Slice.foldli' f b) fun foldli f b = make (Slice.foldli f b) fun foldl f b = make (Slice.foldl f b) - fun foldri' f b = make (Slice.foldri' f b) fun foldri f b = make (Slice.foldri f b) fun foldr f b = make (Slice.foldr f b) - fun findi' p = make (Slice.findi' p) fun findi p = make (Slice.findi p) fun find p = make (Slice.find p) - fun existsi' p = make (Slice.existsi' p) fun existsi p = make (Slice.existsi p) fun exists p = make (Slice.exists p) - fun alli' p = make (Slice.alli' p) fun alli p = make (Slice.alli p) - fun all p = make (Slice.all p) - fun collate cmp = make2 (Slice.collate cmp) - fun concatWith sep seqs = Slice.concatWith sep (List.map Slice.full seqs) + fun all p = make (Slice.all p) + fun collate cmp = make2 (Slice.collate cmp) + fun concatWith sep seqs = Slice.concatWithGen sep (seqs, Slice.full) fun isPrefix eq seq = make (Slice.isPrefix eq seq) fun isSubsequence eq seq = make (Slice.isSubsequence eq seq) - fun isSuffix eq seq = make (Slice.isSuffix eq seq) + fun isSuffix eq seq = make (Slice.isSuffix eq seq) fun translate f = make (Slice.translate f) - fun tokens f seq = List.map Slice.sequence (make (Slice.tokens f) seq) - fun fields f seq = List.map Slice.sequence (make (Slice.fields f) seq) - fun createi' tabulate' f seq = make (Slice.createi' tabulate' f) seq - fun createi tabulate' f seq = make (Slice.createi tabulate' f) seq - fun create tabulate' f seq = make (Slice.create tabulate' f) seq + fun tokens f seq = make (Slice.tokensGen Slice.sequence f) seq + fun fields f seq = make (Slice.fieldsGen Slice.sequence f) seq fun duplicate seq = make Slice.sequence seq fun toList seq = make Slice.toList seq end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/sequence.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/sequence.sig --- mlton-20130715/basis-library/arrays-and-vectors/sequence.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/sequence.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,10 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2014 Rob Simmons. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,85 +17,56 @@ and type 'a elt = 'a elt val maxLen: int - val fromList: 'a elt list -> 'a sequence - val tabulate': SeqIndex.int * (SeqIndex.int -> 'a elt) -> 'a sequence - val tabulate: int * (int -> 'a elt) -> 'a sequence - val length': 'a sequence -> SeqIndex.int val length: 'a sequence -> int - val sub': 'a sequence * SeqIndex.int -> 'a elt val sub: 'a sequence * int -> 'a elt - val unsafeSub': 'a sequence * SeqIndex.int -> 'a elt - val unsafeSub: 'a sequence * int -> 'a elt - (* update'Mk,updateMk,unsafeUpdate'Mk,unsafeUpdateMk: - * ('a sequence * SeqIndex.int * 'a elt -> unit) should be an unsafe update. - *) - val update'Mk: ('a sequence * SeqIndex.int * 'a elt -> unit) -> - ('a sequence * SeqIndex.int * 'a elt) -> unit - val updateMk: ('a sequence * SeqIndex.int * 'a elt -> unit) -> - ('a sequence * int * 'a elt) -> unit - val unsafeUpdate'Mk: ('a sequence * SeqIndex.int * 'a elt -> unit) -> - ('a sequence * SeqIndex.int * 'a elt) -> unit - val unsafeUpdateMk: ('a sequence * SeqIndex.int * 'a elt -> unit) -> - ('a sequence * int * 'a elt) -> unit - val concat: 'a sequence list -> 'a sequence - val appi': (SeqIndex.int * 'a elt -> unit) -> 'a sequence -> unit + val unsafeSub: 'a sequence * int -> 'a elt + val update: 'a sequence * int * 'a elt -> unit + val unsafeUpdate: 'a sequence * int * 'a elt -> unit + val uninitIsNop: 'a sequence -> bool + val uninit: 'a sequence * int -> unit + val unsafeUninit: 'a sequence * int -> unit + val copy: {dst: 'a elt Array.array, di: int, src: 'a sequence} -> unit + val unsafeCopy: {dst: 'a elt Array.array, di: int, src: 'a sequence} -> unit + val tabulate: int * (int -> 'a elt) -> 'a sequence val appi: (int * 'a elt -> unit) -> 'a sequence -> unit val app: ('a elt -> unit) -> 'a sequence -> unit - val mapi' : (SeqIndex.int * 'a elt -> 'b elt) -> 'a sequence -> 'b sequence val mapi : (int * 'a elt -> 'b elt) -> 'a sequence -> 'b sequence val map: ('a elt -> 'b elt) -> 'a sequence -> 'b sequence - val foldli': (SeqIndex.int * 'a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b val foldli: (int * 'a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b val foldl: ('a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b - val foldri': (SeqIndex.int * 'a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b val foldri: (int * 'a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b val foldr: ('a elt * 'b -> 'b) -> 'b -> 'a sequence -> 'b - val findi': (SeqIndex.int * 'a elt -> bool) -> 'a sequence -> (SeqIndex.int * 'a elt) option val findi: (int * 'a elt -> bool) -> 'a sequence -> (int * 'a elt) option val find: ('a elt -> bool) -> 'a sequence -> 'a elt option - val existsi': (SeqIndex.int * 'a elt -> bool) -> 'a sequence -> bool val existsi: (int * 'a elt -> bool) -> 'a sequence -> bool val exists: ('a elt -> bool) -> 'a sequence -> bool - val alli': (SeqIndex.int * 'a elt -> bool) -> 'a sequence -> bool val alli: (int * 'a elt -> bool) -> 'a sequence -> bool val all: ('a elt -> bool) -> 'a sequence -> bool - val collate: ('a elt * 'a elt -> order) -> 'a sequence * 'a sequence -> order - - (* Used to implement Substring/String functions *) - val concatWith: 'a sequence -> 'a sequence list -> 'a sequence - val isPrefix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a sequence -> bool - val isSubsequence: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a sequence -> bool - val isSuffix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a sequence -> bool - val translate: ('a elt -> 'b sequence) -> 'a sequence -> 'b sequence - val tokens: ('a elt -> bool) -> 'a sequence -> 'a sequence list - val fields: ('a elt -> bool) -> 'a sequence -> 'a sequence list + val collate: ('a elt * 'a elt -> order) -> 'a sequence * 'a sequence -> order + val fromList: 'a elt list -> 'a sequence + val toList: 'a sequence -> 'a elt list + val concat: 'a sequence list -> 'a sequence (* Extra *) - val append: 'a sequence * 'a sequence -> 'a sequence - (* createi',createi,create: - * (SeqIndex.int * (SeqIndex.int -> 'b elt) -> 'c) should be a tabulate' function. - *) - val createi': (SeqIndex.int * (SeqIndex.int -> 'b elt) -> 'c) -> - (SeqIndex.int * 'a elt -> 'b elt) -> 'a sequence -> 'c - val createi: (SeqIndex.int * (SeqIndex.int -> 'b elt) -> 'c) -> - (int * 'a elt -> 'b elt) -> 'a sequence -> 'c - val create: (SeqIndex.int * (SeqIndex.int -> 'b elt) -> 'c) -> - ('a elt -> 'b elt) -> 'a sequence -> 'c - val duplicate: 'a sequence -> 'a sequence - val generate': - SeqIndex.int -> {done: unit -> 'a sequence, - sub: SeqIndex.int -> 'a elt, - update: SeqIndex.int * 'a elt -> unit} - val generate: + val alloc: int -> 'a sequence + val append: 'a sequence * 'a sequence -> 'a sequence + val create: int -> {done: unit -> 'a sequence, sub: int -> 'a elt, - update: int * 'a elt -> unit} - val newUninit': SeqIndex.int -> 'a sequence - val newUninit: int -> 'a sequence - val new': SeqIndex.int * 'a elt -> 'a sequence - val new: int * 'a elt -> 'a sequence - val toList: 'a sequence -> 'a elt list - val unfoldi': SeqIndex.int * 'b * (SeqIndex.int * 'b -> 'a elt * 'b) -> 'a sequence * 'b + update: int * 'a elt -> unit} + val duplicate: 'a sequence -> 'a sequence + val new: int * 'a elt -> 'a sequence val unfoldi: int * 'b * (int * 'b -> 'a elt * 'b) -> 'a sequence * 'b val unfold: int * 'b * ('b -> 'a elt * 'b) -> 'a sequence * 'b + val unsafeAlloc: int -> 'a sequence + val unsafeNew: int * 'a elt -> 'a sequence + + (* Used to implement Substring/String functions *) + val isPrefix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a sequence -> bool + val concatWith: 'a sequence -> 'a sequence list -> 'a sequence + val isSubsequence: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a sequence -> bool + val isSuffix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a sequence -> bool + val translate: ('a elt -> 'b sequence) -> 'a sequence -> 'b sequence + val tokens: ('a elt -> bool) -> 'a sequence -> 'a sequence list + val fields: ('a elt -> bool) -> 'a sequence -> 'a sequence list end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/slice0.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/slice0.sig --- mlton-20130715/basis-library/arrays-and-vectors/slice0.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/slice0.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,66 @@ +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2014 Rob Simmons. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature PRIM_SLICE = + sig + type 'a sequence + type 'a elt + type 'a slice + val length: 'a slice -> SeqIndex.int + val sub: 'a slice * SeqIndex.int -> 'a elt + val unsafeSub: 'a slice * SeqIndex.int -> 'a elt + val update: 'a slice * SeqIndex.int * 'a elt -> unit + val unsafeUpdate: 'a slice * SeqIndex.int * 'a elt -> unit + val uninitIsNop: 'a slice -> bool + val uninit: 'a slice * SeqIndex.int -> unit + val unsafeUninit: 'a slice * SeqIndex.int -> unit + val copy: {dst: 'a elt array, di: SeqIndex.int, src: 'a slice} -> unit + val unsafeCopy: {dst: 'a elt array, di: SeqIndex.int, src: 'a slice} -> unit + val full: 'a sequence -> 'a slice + val slice: 'a sequence * SeqIndex.int * SeqIndex.int option -> 'a slice + val unsafeSlice: 'a sequence * SeqIndex.int * SeqIndex.int option -> 'a slice + val subslice: 'a slice * SeqIndex.int * SeqIndex.int option -> 'a slice + val unsafeSubslice: 'a slice * SeqIndex.int * SeqIndex.int option -> 'a slice + val base: 'a slice -> 'a sequence * SeqIndex.int * SeqIndex.int + val isEmpty: 'a slice -> bool + val getItem: 'a slice -> ('a elt * 'a slice) option + val appi: (SeqIndex.int * 'a elt -> unit) -> 'a slice -> unit + val app: ('a elt -> unit) -> 'a slice -> unit + val mapi: (SeqIndex.int * 'a elt -> 'b elt) -> 'a slice -> 'b sequence + val map: ('a elt -> 'b elt) -> 'a slice -> 'b sequence + val foldli: (SeqIndex.int * 'a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b + val foldl: ('a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b + val foldri: (SeqIndex.int * 'a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b + val foldr: ('a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b + val findi: (SeqIndex.int * 'a elt -> bool) -> 'a slice -> (SeqIndex.int * 'a elt) option + val find: ('a elt -> bool) -> 'a slice -> 'a elt option + val existsi: (SeqIndex.int * 'a elt -> bool) -> 'a slice -> bool + val exists: ('a elt -> bool) -> 'a slice -> bool + val alli: (SeqIndex.int * 'a elt -> bool) -> 'a slice -> bool + val all: ('a elt -> bool) -> 'a slice -> bool + val collate: ('a elt * 'a elt -> order) -> 'a slice * 'a slice -> order + + val splitl: ('a elt -> bool) -> 'a slice -> 'a slice * 'a slice + val splitr: ('a elt -> bool) -> 'a slice -> 'a slice * 'a slice + val splitAt: 'a slice * SeqIndex.int -> 'a slice * 'a slice + val dropl: ('a elt -> bool) -> 'a slice -> 'a slice + val dropr: ('a elt -> bool) -> 'a slice -> 'a slice + val takel: ('a elt -> bool) -> 'a slice -> 'a slice + val taker: ('a elt -> bool) -> 'a slice -> 'a slice + val position: ('a elt * 'a elt -> bool) -> + 'a sequence -> 'a slice -> 'a slice * 'a slice + val append: 'a slice * 'a slice -> 'a sequence + val sequence: 'a slice -> 'a sequence + + (* span: + * ('a sequence * 'a sequence -> bool) should be polymorphic equality + *) + val span: ('a sequence * 'a sequence -> bool) -> 'a slice * 'a slice -> 'a slice + end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/slice.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/slice.sig --- mlton-20130715/basis-library/arrays-and-vectors/slice.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/slice.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,10 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2014 Rob Simmons. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -10,97 +12,63 @@ sig type 'a sequence type 'a elt - type 'a slice - val length': 'a slice -> SeqIndex.int + type 'a slice val length: 'a slice -> int - val sub': 'a slice * SeqIndex.int -> 'a elt val sub: 'a slice * int -> 'a elt - val unsafeSub': 'a slice * SeqIndex.int -> 'a elt val unsafeSub: 'a slice * int -> 'a elt - (* update'Mk,updateMk,unsafeUpdate'Mk,unsafeUpdateMk: - * ('a sequence * SeqIndex.int * 'a elt -> unit) should be an unsafe update. - *) - val update'Mk: ('a sequence * SeqIndex.int * 'a elt -> unit) -> - ('a slice * SeqIndex.int * 'a elt) -> unit - val updateMk: ('a sequence * SeqIndex.int * 'a elt -> unit) -> - ('a slice * int * 'a elt) -> unit - val unsafeUpdate'Mk: ('a sequence * SeqIndex.int * 'a elt -> unit) -> - ('a slice * SeqIndex.int * 'a elt) -> unit - val unsafeUpdateMk: ('a sequence * SeqIndex.int * 'a elt -> unit) -> - ('a slice * int * 'a elt) -> unit + val update: 'a slice * int * 'a elt -> unit + val unsafeUpdate: 'a slice * int * 'a elt -> unit + val uninitIsNop: 'a slice -> bool + val uninit: 'a slice * int -> unit + val unsafeUninit: 'a slice * int -> unit + val copy: {dst: 'a elt Array.array, di: int, src: 'a slice} -> unit + val unsafeCopy: {dst: 'a elt Array.array, di: int, src: 'a slice} -> unit val full: 'a sequence -> 'a slice - val slice': 'a sequence * SeqIndex.int * SeqIndex.int option -> 'a slice val slice: 'a sequence * int * int option -> 'a slice - val unsafeSlice': 'a sequence * SeqIndex.int * SeqIndex.int option -> 'a slice val unsafeSlice: 'a sequence * int * int option -> 'a slice - val subslice': 'a slice * SeqIndex.int * SeqIndex.int option -> 'a slice val subslice: 'a slice * int * int option -> 'a slice - val unsafeSubslice': 'a slice * SeqIndex.int * SeqIndex.int option -> 'a slice val unsafeSubslice: 'a slice * int * int option -> 'a slice - val base': 'a slice -> 'a sequence * SeqIndex.int * SeqIndex.int - val base: 'a slice -> 'a sequence * int * int - val concat: 'a slice list -> 'a sequence - val isEmpty: 'a slice -> bool - val getItem: 'a slice -> ('a elt * 'a slice) option - val appi': (SeqIndex.int * 'a elt -> unit) -> 'a slice -> unit + val base: 'a slice -> 'a sequence * int * int + val isEmpty: 'a slice -> bool + val getItem: 'a slice -> ('a elt * 'a slice) option val appi: (int * 'a elt -> unit) -> 'a slice -> unit val app: ('a elt -> unit) -> 'a slice -> unit - val mapi': (SeqIndex.int * 'a elt -> 'b elt) -> 'a slice -> 'b sequence val mapi: (int * 'a elt -> 'b elt) -> 'a slice -> 'b sequence val map: ('a elt -> 'b elt) -> 'a slice -> 'b sequence - val foldli': (SeqIndex.int * 'a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b val foldli: (int * 'a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b val foldl: ('a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b - val foldri': (SeqIndex.int * 'a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b val foldri: (int * 'a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b val foldr: ('a elt * 'b -> 'b) -> 'b -> 'a slice -> 'b - val findi': (SeqIndex.int * 'a elt -> bool) -> 'a slice -> (SeqIndex.int * 'a elt) option val findi: (int * 'a elt -> bool) -> 'a slice -> (int * 'a elt) option - val find: ('a elt -> bool) -> 'a slice -> 'a elt option - val existsi': (SeqIndex.int * 'a elt -> bool) -> 'a slice -> bool + val find: ('a elt -> bool) -> 'a slice -> 'a elt option val existsi: (int * 'a elt -> bool) -> 'a slice -> bool val exists: ('a elt -> bool) -> 'a slice -> bool - val alli': (SeqIndex.int * 'a elt -> bool) -> 'a slice -> bool val alli: (int * 'a elt -> bool) -> 'a slice -> bool - val all: ('a elt -> bool) -> 'a slice -> bool - val collate: ('a elt * 'a elt -> order) -> 'a slice * 'a slice -> order + val all: ('a elt -> bool) -> 'a slice -> bool + val collate: ('a elt * 'a elt -> order) -> 'a slice * 'a slice -> order - (* Used to implement Substring/String functions *) - val concatWith: 'a sequence -> 'a slice list -> 'a sequence - val triml: int -> 'a slice -> 'a slice - val trimr: int -> 'a slice -> 'a slice - val isPrefix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a slice -> bool - val isSubsequence: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a slice -> bool - val isSuffix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a slice -> bool val splitl: ('a elt -> bool) -> 'a slice -> 'a slice * 'a slice - val splitr: ('a elt -> bool) -> 'a slice -> 'a slice * 'a slice - val splitAt': 'a slice * SeqIndex.int -> 'a slice * 'a slice - val splitAt: 'a slice * int -> 'a slice * 'a slice + val splitr: ('a elt -> bool) -> 'a slice -> 'a slice * 'a slice + val splitAt: 'a slice * int -> 'a slice * 'a slice val dropl: ('a elt -> bool) -> 'a slice -> 'a slice val dropr: ('a elt -> bool) -> 'a slice -> 'a slice val takel: ('a elt -> bool) -> 'a slice -> 'a slice val taker: ('a elt -> bool) -> 'a slice -> 'a slice val position: ('a elt * 'a elt -> bool) -> - 'a sequence -> 'a slice -> 'a slice * 'a slice - (* span: - * ('a sequence * 'a sequence -> bool) should be polymorphic equality - *) - val span: ('a sequence * 'a sequence -> bool) -> 'a slice * 'a slice -> 'a slice + 'a sequence -> 'a slice -> 'a slice * 'a slice + val append: 'a slice * 'a slice -> 'a sequence + val sequence: 'a slice -> 'a sequence + val toList: 'a slice -> 'a elt list + + (* Used to implement Substring/String functions *) + val concat: 'a slice list -> 'a sequence + val concatWith: 'a sequence -> 'a slice list -> 'a sequence + val triml: int -> 'a slice -> 'a slice + val trimr: int -> 'a slice -> 'a slice + val isPrefix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a slice -> bool + val isSubsequence: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a slice -> bool + val isSuffix: ('a elt * 'a elt -> bool) -> 'a sequence -> 'a slice -> bool val translate: ('a elt -> 'b sequence) -> 'a slice -> 'b sequence val tokens: ('a elt -> bool) -> 'a slice -> 'a slice list - val fields: ('a elt -> bool) -> 'a slice -> 'a slice list - - (* Extra *) - val append: 'a slice * 'a slice -> 'a sequence - (* createi',createi,create: - * (SeqIndex.int * (SeqIndex.int -> 'b elt) -> 'c) should be a tabulate' function. - *) - val createi': (SeqIndex.int * (SeqIndex.int -> 'b elt) -> 'c) -> - (SeqIndex.int * 'a elt -> 'b elt) -> 'a slice -> 'c - val createi: (SeqIndex.int * (SeqIndex.int -> 'b elt) -> 'c) -> - (int * 'a elt -> 'b elt) -> 'a slice -> 'c - val create: (SeqIndex.int * (SeqIndex.int -> 'b elt) -> 'c) -> - ('a elt -> 'b elt) -> 'a slice -> 'c - val toList: 'a slice -> 'a elt list - val sequence: 'a slice -> 'a sequence + val fields: ('a elt -> bool) -> 'a slice -> 'a slice list end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/vector.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/vector.sig --- mlton-20130715/basis-library/arrays-and-vectors/vector.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/vector.sig 2021-12-28 17:19:36.000000000 +0000 @@ -34,8 +34,11 @@ include VECTOR structure VectorSlice: VECTOR_SLICE_EXTRA + val copy: {dst: 'a Array.array, di: int, src: 'a vector} -> unit + val unsafeFromArray: 'a array -> 'a vector val unsafeSub: 'a vector * int -> 'a + val unsafeCopy: {dst: 'a Array.array, di: int, src: 'a vector} -> unit (* Used to implement Substring/String functions *) val concatWith: 'a vector -> 'a vector list -> 'a vector @@ -51,8 +54,8 @@ sub: int -> 'a, update: int * 'a -> unit} val duplicate: 'a vector -> 'a vector - val tabulate': SeqIndex.int * (SeqIndex.int -> 'a) -> 'a vector val toList: 'a vector -> 'a list val unfoldi: int * 'b * (int * 'b -> 'a * 'b) -> 'a vector * 'b + val unfold: int * 'b * ('b -> 'a * 'b) -> 'a vector * 'b val vector: int * 'a -> 'a vector end diff -Nru mlton-20130715/basis-library/arrays-and-vectors/vector-slice.sig mlton-20210117+dfsg/basis-library/arrays-and-vectors/vector-slice.sig --- mlton-20130715/basis-library/arrays-and-vectors/vector-slice.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/vector-slice.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,3 @@ -structure Vector = - struct - type 'a vector = 'a vector - end - signature VECTOR_SLICE_GLOBAL = sig end @@ -42,11 +37,11 @@ sig include VECTOR_SLICE - val unsafeSub': 'a slice * SeqIndex.int -> 'a + val copy: {dst: 'a Array.array, di: int, src: 'a slice} -> unit + val unsafeSub: 'a slice * int -> 'a - val unsafeSlice': 'a Vector.vector * SeqIndex.int * SeqIndex.int option -> 'a slice + val unsafeCopy: {dst: 'a Array.array, di: int, src: 'a slice} -> unit val unsafeSlice: 'a Vector.vector * int * int option -> 'a slice - val unsafeSubslice': 'a slice * SeqIndex.int * SeqIndex.int option -> 'a slice val unsafeSubslice: 'a slice * int * int option -> 'a slice (* Used to implement Substring/String functions *) diff -Nru mlton-20130715/basis-library/arrays-and-vectors/vector.sml mlton-20210117+dfsg/basis-library/arrays-and-vectors/vector.sml --- mlton-20130715/basis-library/arrays-and-vectors/vector.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/arrays-and-vectors/vector.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,19 +1,15 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) structure Vector: VECTOR_EXTRA = struct - structure V = Sequence (type 'a sequence = 'a vector - type 'a elt = 'a - val fromArray = Primitive.Vector.fromArrayUnsafe - val isMutable = false - val length = Primitive.Vector.length - val subUnsafe = Primitive.Vector.subUnsafe) + structure V = Sequence (Primitive.Vector) open V type 'a vector = 'a vector @@ -26,42 +22,20 @@ val isSubvector = isSubsequence val span = fn (sl, sl') => - span (op = : ''a vector * ''a vector -> bool) (sl, sl') + Primitive.Vector.Slice.span + (op = : ''a vector * ''a vector -> bool) + (sl, sl') end fun update (v, i, x) = - let - fun doit i = - tabulate' (length' v, - fn j => if i = j - then x - else unsafeSub' (v, j)) - in - if Primitive.Controls.safe - then - let - val i = - (SeqIndex.fromInt i) - handle Overflow => raise Subscript - in - if SeqIndex.geu (i, length' v) - then raise Subscript - else doit i - end - else let - val i = SeqIndex.fromIntUnsafe i - in - doit i - end - end + (Primitive.Vector.updateVector (v, SeqIndex.fromInt i, x)) + handle Overflow => raise Subscript val isSubvector = isSubsequence - val unsafeFromArray = Primitive.Vector.fromArrayUnsafe + val unsafeFromArray = Primitive.Vector.unsafeFromArray val vector = new - - val create = generate end structure VectorSlice: VECTOR_SLICE_EXTRA = Vector.VectorSlice diff -Nru mlton-20130715/basis-library/basis-1997.mlb mlton-20210117+dfsg/basis-library/basis-1997.mlb --- mlton-20130715/basis-library/basis-1997.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/basis-1997.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,15 +1,16 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" - "warnUnused true" "forceUsed" + "warnUnused true" "forceUsed" in local basis-2002.mlb diff -Nru mlton-20130715/basis-library/basis-2002.mlb mlton-20210117+dfsg/basis-library/basis-2002.mlb --- mlton-20130715/basis-library/basis-2002.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/basis-2002.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,15 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local diff -Nru mlton-20130715/basis-library/basis.mlb mlton-20210117+dfsg/basis-library/basis.mlb --- mlton-20130715/basis-library/basis.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/basis.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/basis-none.mlb mlton-20210117+dfsg/basis-library/basis-none.mlb --- mlton-20130715/basis-library/basis-none.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/basis-none.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,19 +1,23 @@ -(* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local libs/basis-extra/basis-extra.mlb - libs/basis-none/top-level/basis.sig + ann "allowSpecifySpecialIds true" in + libs/basis-none/top-level/basis.sig + end libs/basis-none/top-level/basis.sml in libs/basis-none/top-level/top-level.sml diff -Nru mlton-20130715/basis-library/build/sources.mlb mlton-20210117+dfsg/basis-library/build/sources.mlb --- mlton-20130715/basis-library/build/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/build/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,15 +1,16 @@ -(* Copyright (C) 2013 Matthew Fluet. +(* Copyright (C) 2013,2016-2017 Matthew Fluet. * Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused false" "forceUsed" in ../primitive/primitive.mlb @@ -28,10 +29,25 @@ ../config/bind/word-prim.sml in ann "forceUsed" in ../config/objptr/objptr-$(OBJPTR_REP).sml - ../config/header/header-$(HEADER_WORD).sml + ../config/metadata/sequence-metadata-$(SEQUENCE_METADATA_SIZE).sml + ../config/metadata/normal-metadata-$(NORMAL_METADATA_SIZE).sml ../config/seqindex/seqindex-$(SEQINDEX_INT).sml $(LIB_MLTON_DIR)/targets/$(TARGET)/sml/c-types.sml end end + + ../arrays-and-vectors/slice0.sig + ../arrays-and-vectors/sequence0.sig + local + local + ../config/bind/int-prim.sml + ../config/bind/int-inf-prim.sml + in ann "forceUsed" in + ../config/default/default-$(DEFAULT_INT).sml + end end + in + ../arrays-and-vectors/sequence0.sml + end + ../integer/int-inf0.sml local local @@ -122,7 +138,6 @@ ../config/bind/real-prim.sml ../config/bind/word-top.sml in ann "forceUsed" in - ../config/header/header-$(HEADER_WORD).sml ../config/objptr/objptr-$(OBJPTR_REP).sml $(LIB_MLTON_DIR)/targets/$(TARGET)/sml/c-types.sml ../config/c/position.sml @@ -155,7 +170,6 @@ ../config/bind/real-prim.sml ../config/bind/word-top.sml in ann "forceUsed" in - ../config/header/header-$(HEADER_WORD).sml ../config/objptr/objptr-$(OBJPTR_REP).sml $(LIB_MLTON_DIR)/targets/$(TARGET)/sml/c-types.sml ../config/c/position.sml @@ -216,7 +230,6 @@ ../config/bind/real-top.sml ../config/bind/word-top.sml in ann "forceUsed" in - ../config/header/header-$(HEADER_WORD).sml ../config/objptr/objptr-$(OBJPTR_REP).sml $(LIB_MLTON_DIR)/targets/$(TARGET)/sml/c-types.sml ../config/c/position.sml diff -Nru mlton-20130715/basis-library/c/pointer.sig mlton-20210117+dfsg/basis-library/c/pointer.sig --- mlton-20130715/basis-library/c/pointer.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/c/pointer.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2010 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/c/pointer.sml mlton-20210117+dfsg/basis-library/c/pointer.sml --- mlton-20130715/basis-library/c/pointer.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/c/pointer.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2010 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/char-prim.sml mlton-20210117+dfsg/basis-library/config/bind/char-prim.sml --- mlton-20130715/basis-library/config/bind/char-prim.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/char-prim.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/int-inf-prim.sml mlton-20210117+dfsg/basis-library/config/bind/int-inf-prim.sml --- mlton-20130715/basis-library/config/bind/int-inf-prim.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/int-inf-prim.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/int-inf-top.sml mlton-20210117+dfsg/basis-library/config/bind/int-inf-top.sml --- mlton-20130715/basis-library/config/bind/int-inf-top.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/int-inf-top.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/int-prim.sml mlton-20210117+dfsg/basis-library/config/bind/int-prim.sml --- mlton-20130715/basis-library/config/bind/int-prim.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/int-prim.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/int-top.sml mlton-20210117+dfsg/basis-library/config/bind/int-top.sml --- mlton-20130715/basis-library/config/bind/int-top.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/int-top.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/pointer-mlton.sml mlton-20210117+dfsg/basis-library/config/bind/pointer-mlton.sml --- mlton-20130715/basis-library/config/bind/pointer-mlton.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/pointer-mlton.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/pointer-prim.sml mlton-20210117+dfsg/basis-library/config/bind/pointer-prim.sml --- mlton-20130715/basis-library/config/bind/pointer-prim.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/pointer-prim.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/real-prim.sml mlton-20210117+dfsg/basis-library/config/bind/real-prim.sml --- mlton-20130715/basis-library/config/bind/real-prim.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/real-prim.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/real-top.sml mlton-20210117+dfsg/basis-library/config/bind/real-top.sml --- mlton-20130715/basis-library/config/bind/real-top.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/real-top.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/string-prim.sml mlton-20210117+dfsg/basis-library/config/bind/string-prim.sml --- mlton-20130715/basis-library/config/bind/string-prim.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/string-prim.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/word-prim.sml mlton-20210117+dfsg/basis-library/config/bind/word-prim.sml --- mlton-20130715/basis-library/config/bind/word-prim.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/word-prim.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/bind/word-top.sml mlton-20210117+dfsg/basis-library/config/bind/word-top.sml --- mlton-20130715/basis-library/config/bind/word-top.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/bind/word-top.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/c/errno.sml mlton-20210117+dfsg/basis-library/config/c/errno.sml --- mlton-20130715/basis-library/config/c/errno.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/c/errno.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/c/position.sml mlton-20210117+dfsg/basis-library/config/c/position.sml --- mlton-20130715/basis-library/config/c/position.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/c/position.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/c/sys-types.sml mlton-20210117+dfsg/basis-library/config/c/sys-types.sml --- mlton-20130715/basis-library/config/c/sys-types.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/c/sys-types.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/c/sys-word.sml mlton-20210117+dfsg/basis-library/config/c/sys-word.sml --- mlton-20130715/basis-library/config/c/sys-word.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/c/sys-word.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/c/word-to-bool.sml mlton-20210117+dfsg/basis-library/config/c/word-to-bool.sml --- mlton-20130715/basis-library/config/c/word-to-bool.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/c/word-to-bool.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/choose-char.sml mlton-20210117+dfsg/basis-library/config/choose-char.sml --- mlton-20130715/basis-library/config/choose-char.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/choose-char.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/choose-int.sml mlton-20210117+dfsg/basis-library/config/choose-int.sml --- mlton-20130715/basis-library/config/choose-int.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/choose-int.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/choose-real.sml mlton-20210117+dfsg/basis-library/config/choose-real.sml --- mlton-20130715/basis-library/config/choose-real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/choose-real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/choose-string.sml mlton-20210117+dfsg/basis-library/config/choose-string.sml --- mlton-20130715/basis-library/config/choose-string.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/choose-string.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/choose-word.sml mlton-20210117+dfsg/basis-library/config/choose-word.sml --- mlton-20130715/basis-library/config/choose-word.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/choose-word.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/default-char8.sml mlton-20210117+dfsg/basis-library/config/default/default-char8.sml --- mlton-20130715/basis-library/config/default/default-char8.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/default-char8.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/default-int32.sml mlton-20210117+dfsg/basis-library/config/default/default-int32.sml --- mlton-20130715/basis-library/config/default/default-int32.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/default-int32.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/default-int64.sml mlton-20210117+dfsg/basis-library/config/default/default-int64.sml --- mlton-20130715/basis-library/config/default/default-int64.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/default-int64.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/default-intinf.sml mlton-20210117+dfsg/basis-library/config/default/default-intinf.sml --- mlton-20130715/basis-library/config/default/default-intinf.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/default-intinf.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/default-real32.sml mlton-20210117+dfsg/basis-library/config/default/default-real32.sml --- mlton-20130715/basis-library/config/default/default-real32.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/default-real32.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/default-real64.sml mlton-20210117+dfsg/basis-library/config/default/default-real64.sml --- mlton-20130715/basis-library/config/default/default-real64.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/default-real64.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/default-widechar16.sml mlton-20210117+dfsg/basis-library/config/default/default-widechar16.sml --- mlton-20130715/basis-library/config/default/default-widechar16.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/default-widechar16.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/default-widechar32.sml mlton-20210117+dfsg/basis-library/config/default/default-widechar32.sml --- mlton-20130715/basis-library/config/default/default-widechar32.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/default-widechar32.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/default-word32.sml mlton-20210117+dfsg/basis-library/config/default/default-word32.sml --- mlton-20130715/basis-library/config/default/default-word32.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/default-word32.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/default-word64.sml mlton-20210117+dfsg/basis-library/config/default/default-word64.sml --- mlton-20130715/basis-library/config/default/default-word64.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/default-word64.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/fixed-int.sml mlton-20210117+dfsg/basis-library/config/default/fixed-int.sml --- mlton-20130715/basis-library/config/default/fixed-int.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/fixed-int.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/large-int.sml mlton-20210117+dfsg/basis-library/config/default/large-int.sml --- mlton-20130715/basis-library/config/default/large-int.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/large-int.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/large-real.sml mlton-20210117+dfsg/basis-library/config/default/large-real.sml --- mlton-20130715/basis-library/config/default/large-real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/large-real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/default/large-word.sml mlton-20210117+dfsg/basis-library/config/default/large-word.sml --- mlton-20130715/basis-library/config/default/large-word.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/default/large-word.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/header/header-word32.sml mlton-20210117+dfsg/basis-library/config/header/header-word32.sml --- mlton-20130715/basis-library/config/header/header-word32.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/header/header-word32.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -structure HeaderWord = Word32 - -functor HeaderWord_ChooseWordN (A: CHOOSE_WORDN_ARG) : - sig val f : HeaderWord.word A.t end = - ChooseWordN_Word32 (A) diff -Nru mlton-20130715/basis-library/config/header/header-word64.sml mlton-20210117+dfsg/basis-library/config/header/header-word64.sml --- mlton-20130715/basis-library/config/header/header-word64.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/header/header-word64.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -structure HeaderWord = Word64 - -functor HeaderWord_ChooseWordN (A: CHOOSE_WORDN_ARG) : - sig val f : HeaderWord.word A.t end = - ChooseWordN_Word64 (A) diff -Nru mlton-20130715/basis-library/config/metadata/normal-metadata-size128.sml mlton-20210117+dfsg/basis-library/config/metadata/normal-metadata-size128.sml --- mlton-20130715/basis-library/config/metadata/normal-metadata-size128.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/metadata/normal-metadata-size128.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,10 @@ +(* Copyright (C) 2016-2017 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +structure NormalMetaDataSize = + struct + val bytes : Int32.int = 16 + end diff -Nru mlton-20130715/basis-library/config/metadata/normal-metadata-size32.sml mlton-20210117+dfsg/basis-library/config/metadata/normal-metadata-size32.sml --- mlton-20130715/basis-library/config/metadata/normal-metadata-size32.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/metadata/normal-metadata-size32.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,10 @@ +(* Copyright (C) 2016-2017 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +structure NormalMetaDataSize = + struct + val bytes : Int32.int = 4 + end diff -Nru mlton-20130715/basis-library/config/metadata/normal-metadata-size64.sml mlton-20210117+dfsg/basis-library/config/metadata/normal-metadata-size64.sml --- mlton-20130715/basis-library/config/metadata/normal-metadata-size64.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/metadata/normal-metadata-size64.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,10 @@ +(* Copyright (C) 2016-2017 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +structure NormalMetaDataSize = + struct + val bytes : Int32.int = 8 + end diff -Nru mlton-20130715/basis-library/config/metadata/sequence-metadata-size128.sml mlton-20210117+dfsg/basis-library/config/metadata/sequence-metadata-size128.sml --- mlton-20130715/basis-library/config/metadata/sequence-metadata-size128.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/metadata/sequence-metadata-size128.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,10 @@ +(* Copyright (C) 2017 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +structure SequenceMetaDataSize = + struct + val bytes : Int32.int = 16 + end diff -Nru mlton-20130715/basis-library/config/metadata/sequence-metadata-size192.sml mlton-20210117+dfsg/basis-library/config/metadata/sequence-metadata-size192.sml --- mlton-20130715/basis-library/config/metadata/sequence-metadata-size192.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/metadata/sequence-metadata-size192.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,10 @@ +(* Copyright (C) 2017 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +structure SequenceMetaDataSize = + struct + val bytes : Int32.int = 24 + end diff -Nru mlton-20130715/basis-library/config/metadata/sequence-metadata-size256.sml mlton-20210117+dfsg/basis-library/config/metadata/sequence-metadata-size256.sml --- mlton-20130715/basis-library/config/metadata/sequence-metadata-size256.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/metadata/sequence-metadata-size256.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,10 @@ +(* Copyright (C) 2017 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +structure SequenceMetaDataSize = + struct + val bytes : Int32.int = 32 + end diff -Nru mlton-20130715/basis-library/config/metadata/sequence-metadata-size96.sml mlton-20210117+dfsg/basis-library/config/metadata/sequence-metadata-size96.sml --- mlton-20130715/basis-library/config/metadata/sequence-metadata-size96.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/metadata/sequence-metadata-size96.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,10 @@ +(* Copyright (C) 2017 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +structure SequenceMetaDataSize = + struct + val bytes : Int32.int = 12 + end diff -Nru mlton-20130715/basis-library/config/objptr/objptr-rep32.sml mlton-20210117+dfsg/basis-library/config/objptr/objptr-rep32.sml --- mlton-20130715/basis-library/config/objptr/objptr-rep32.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/objptr/objptr-rep32.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/objptr/objptr-rep64.sml mlton-20210117+dfsg/basis-library/config/objptr/objptr-rep64.sml --- mlton-20130715/basis-library/config/objptr/objptr-rep64.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/objptr/objptr-rep64.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/seqindex/seqindex-int32.sml mlton-20210117+dfsg/basis-library/config/seqindex/seqindex-int32.sml --- mlton-20130715/basis-library/config/seqindex/seqindex-int32.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/seqindex/seqindex-int32.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/config/seqindex/seqindex-int64.sml mlton-20210117+dfsg/basis-library/config/seqindex/seqindex-int64.sml --- mlton-20130715/basis-library/config/seqindex/seqindex-int64.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/config/seqindex/seqindex-int64.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/c-types.mlb mlton-20210117+dfsg/basis-library/c-types.mlb --- mlton-20130715/basis-library/c-types.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/c-types.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,14 +2,15 @@ * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local diff -Nru mlton-20130715/basis-library/default.mlb mlton-20210117+dfsg/basis-library/default.mlb --- mlton-20130715/basis-library/default.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/default.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2005-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/equal.mlb mlton-20210117+dfsg/basis-library/equal.mlb --- mlton-20130715/basis-library/equal.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/equal.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,20 +1,24 @@ -(* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local libs/basis-2002/basis-2002.mlb basis-2002.mlb - libs/basis-2002/top-level/basis-equal.sig + ann "allowSpecifySpecialIds true" in + libs/basis-2002/top-level/basis-equal.sig + end in libs/basis-2002/top-level/pervasive-equal.sml end diff -Nru mlton-20130715/basis-library/general/bool.sml mlton-20210117+dfsg/basis-library/general/bool.sml --- mlton-20130715/basis-library/general/bool.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/general/bool.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/general/general.sml mlton-20210117+dfsg/basis-library/general/general.sml --- mlton-20130715/basis-library/general/general.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/general/general.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -19,7 +19,7 @@ exception Fail of string exception Overflow = Overflow exception Size = Size - exception Span + exception Span = Span exception Subscript = Subscript datatype order = datatype Primitive.Order.order diff -Nru mlton-20130715/basis-library/general/option.sml mlton-20210117+dfsg/basis-library/general/option.sml --- mlton-20130715/basis-library/general/option.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/general/option.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/general/sml90.sml mlton-20210117+dfsg/basis-library/general/sml90.sml --- mlton-20130715/basis-library/general/sml90.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/general/sml90.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/infixes.mlb mlton-20210117+dfsg/basis-library/infixes.mlb --- mlton-20130715/basis-library/infixes.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/infixes.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,15 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in libs/basis-2002/top-level/infixes.sml diff -Nru mlton-20130715/basis-library/integer/embed-int.sml mlton-20210117+dfsg/basis-library/integer/embed-int.sml --- mlton-20130715/basis-library/integer/embed-int.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/embed-int.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/integer/embed-word.sml mlton-20210117+dfsg/basis-library/integer/embed-word.sml --- mlton-20130715/basis-library/integer/embed-word.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/embed-word.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/integer/int1.sml mlton-20210117+dfsg/basis-library/integer/int1.sml --- mlton-20130715/basis-library/integer/int1.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/int1.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,341 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature INT_FROM_TO_ARG = - sig - type int - (* Lowbits or sign-extend. *) - val fromInt8Unsafe: Primitive.Int8.int -> int - val fromInt16Unsafe: Primitive.Int16.int -> int - val fromInt32Unsafe: Primitive.Int32.int -> int - val fromInt64Unsafe: Primitive.Int64.int -> int - val fromIntInfUnsafe: Primitive.IntInf.int -> int - (* Overflow checking, signed interp. *) - val fromInt8: Primitive.Int8.int -> int - val fromInt16: Primitive.Int16.int -> int - val fromInt32: Primitive.Int32.int -> int - val fromInt64: Primitive.Int64.int -> int - val fromIntInf: Primitive.IntInf.int -> int - (* Overflow checking, unsigned interp. *) - val fromWord8: Primitive.Word8.word -> int - val fromWord16: Primitive.Word16.word -> int - val fromWord32: Primitive.Word32.word -> int - val fromWord64: Primitive.Word64.word -> int - (* Overflow checking, signed interp. *) - val fromWord8X: Primitive.Word8.word -> int - val fromWord16X: Primitive.Word16.word -> int - val fromWord32X: Primitive.Word32.word -> int - val fromWord64X: Primitive.Word64.word -> int - (* Lowbits or sign-extend. *) - val toInt8Unsafe: int -> Primitive.Int8.int - val toInt16Unsafe: int -> Primitive.Int16.int - val toInt32Unsafe: int -> Primitive.Int32.int - val toInt64Unsafe: int -> Primitive.Int64.int - val toIntInfUnsafe: int -> Primitive.IntInf.int - (* Overflow checking. *) - val toInt8: int -> Primitive.Int8.int - val toInt16: int -> Primitive.Int16.int - val toInt32: int -> Primitive.Int32.int - val toInt64: int -> Primitive.Int64.int - val toIntInf: int -> Primitive.IntInf.int - (* Lowbits or zero extend. *) - val toWord8: int -> Primitive.Word8.word - val toWord16: int -> Primitive.Word16.word - val toWord32: int -> Primitive.Word32.word - val toWord64: int -> Primitive.Word64.word - (* Lowbits or sign extend. *) - val toWord8X: int -> Primitive.Word8.word - val toWord16X: int -> Primitive.Word16.word - val toWord32X: int -> Primitive.Word32.word - val toWord64X: int -> Primitive.Word64.word - end - -signature INT_FROM_TO_RES = - sig - type int - - val fromIntUnsafe: Int.int -> int - val fromInt: Int.int -> int - val fromLargeInt: LargeInt.int -> int - val fromLarge: LargeInt.int -> int - val fromWord: Word.word -> int - val fromWordX: Word.word -> int - val fromLargeWord: LargeWord.word -> int - val fromLargeWordX: LargeWord.word -> int - val fromSysWord: SysWord.word -> int - val fromSysWordX: SysWord.word -> int - - val toIntUnsafe: int -> Int.int - val toInt: int -> Int.int - val toLargeInt: int -> LargeInt.int - val toLarge: int -> LargeInt.int - val toWord: int -> Word.word - val toWordX: int -> Word.word - val toLargeWord: int -> LargeWord.word - val toLargeWordX: int -> LargeWord.word - val toSysWord: int -> SysWord.word - val toSysWordX: int -> SysWord.word - end - -functor IntFromTo(I: INT_FROM_TO_ARG): INT_FROM_TO_RES where type int = I.int = - struct - open I - - local - structure S = - Int_ChooseInt - (type 'a t = 'a -> int - val fInt8 = I.fromInt8Unsafe - val fInt16 = I.fromInt16Unsafe - val fInt32 = I.fromInt32Unsafe - val fInt64 = I.fromInt64Unsafe - val fIntInf = I.fromIntInfUnsafe) - in - val fromIntUnsafe = S.f - end - local - structure S = - Int_ChooseInt - (type 'a t = 'a -> int - val fInt8 = I.fromInt8 - val fInt16 = I.fromInt16 - val fInt32 = I.fromInt32 - val fInt64 = I.fromInt64 - val fIntInf = I.fromIntInf) - in - val fromInt = S.f - end - local - structure S = - LargeInt_ChooseInt - (type 'a t = 'a -> int - val fInt8 = I.fromInt8 - val fInt16 = I.fromInt16 - val fInt32 = I.fromInt32 - val fInt64 = I.fromInt64 - val fIntInf = I.fromIntInf) - in - val fromLargeInt = S.f - val fromLarge = fromLargeInt - end - local - structure S = - Word_ChooseWordN - (type 'a t = 'a -> int - val fWord8 = I.fromWord8 - val fWord16 = I.fromWord16 - val fWord32 = I.fromWord32 - val fWord64 = I.fromWord64) - in - val fromWord = S.f - end - local - structure S = - Word_ChooseWordN - (type 'a t = 'a -> int - val fWord8 = I.fromWord8X - val fWord16 = I.fromWord16X - val fWord32 = I.fromWord32X - val fWord64 = I.fromWord64X) - in - val fromWordX = S.f - end - local - structure S = - LargeWord_ChooseWordN - (type 'a t = 'a -> int - val fWord8 = I.fromWord8 - val fWord16 = I.fromWord16 - val fWord32 = I.fromWord32 - val fWord64 = I.fromWord64) - in - val fromLargeWord = S.f - end - local - structure S = - LargeWord_ChooseWordN - (type 'a t = 'a -> int - val fWord8 = I.fromWord8X - val fWord16 = I.fromWord16X - val fWord32 = I.fromWord32X - val fWord64 = I.fromWord64X) - in - val fromLargeWordX = S.f - end - local - structure S = - SysWord_ChooseWordN - (type 'a t = 'a -> int - val fWord8 = I.fromWord8 - val fWord16 = I.fromWord16 - val fWord32 = I.fromWord32 - val fWord64 = I.fromWord64) - in - val fromSysWord = S.f - end - local - structure S = - SysWord_ChooseWordN - (type 'a t = 'a -> int - val fWord8 = I.fromWord8X - val fWord16 = I.fromWord16X - val fWord32 = I.fromWord32X - val fWord64 = I.fromWord64X) - in - val fromSysWordX = S.f - end - - local - structure S = - Int_ChooseInt - (type 'a t = int -> 'a - val fInt8 = I.toInt8Unsafe - val fInt16 = I.toInt16Unsafe - val fInt32 = I.toInt32Unsafe - val fInt64 = I.toInt64Unsafe - val fIntInf = I.toIntInfUnsafe) - in - val toIntUnsafe = S.f - end - local - structure S = - Int_ChooseInt - (type 'a t = int -> 'a - val fInt8 = I.toInt8 - val fInt16 = I.toInt16 - val fInt32 = I.toInt32 - val fInt64 = I.toInt64 - val fIntInf = I.toIntInf) - in - val toInt = S.f - end - local - structure S = - LargeInt_ChooseInt - (type 'a t = int -> 'a - val fInt8 = I.toInt8 - val fInt16 = I.toInt16 - val fInt32 = I.toInt32 - val fInt64 = I.toInt64 - val fIntInf = I.toIntInf) - in - val toLargeInt = S.f - val toLarge = toLargeInt - end - local - structure S = - Word_ChooseWordN - (type 'a t = int -> 'a - val fWord8 = I.toWord8 - val fWord16 = I.toWord16 - val fWord32 = I.toWord32 - val fWord64 = I.toWord64) - in - val toWord = S.f - end - local - structure S = - Word_ChooseWordN - (type 'a t = int -> 'a - val fWord8 = I.toWord8X - val fWord16 = I.toWord16X - val fWord32 = I.toWord32X - val fWord64 = I.toWord64X) - in - val toWordX = S.f - end - local - structure S = - LargeWord_ChooseWordN - (type 'a t = int -> 'a - val fWord8 = I.toWord8 - val fWord16 = I.toWord16 - val fWord32 = I.toWord32 - val fWord64 = I.toWord64) - in - val toLargeWord = S.f - end - local - structure S = - LargeWord_ChooseWordN - (type 'a t = int -> 'a - val fWord8 = I.toWord8X - val fWord16 = I.toWord16X - val fWord32 = I.toWord32X - val fWord64 = I.toWord64X) - in - val toLargeWordX = S.f - end - local - structure S = - SysWord_ChooseWordN - (type 'a t = int -> 'a - val fWord8 = I.toWord8 - val fWord16 = I.toWord16 - val fWord32 = I.toWord32 - val fWord64 = I.toWord64) - in - val toSysWord = S.f - end - local - structure S = - SysWord_ChooseWordN - (type 'a t = int -> 'a - val fWord8 = I.toWord8X - val fWord16 = I.toWord16X - val fWord32 = I.toWord32X - val fWord64 = I.toWord64X) - in - val toSysWordX = S.f - end - end - -structure Primitive = struct -open Primitive - -structure Int8 = struct - open Int8 - local - structure S = IntFromTo (Primitive.Int8) - in - open S - end - end -structure Int16 = struct - open Int16 - local - structure S = IntFromTo (Primitive.Int16) - in - open S - end - end -structure Int32 = struct - open Int32 - local - structure S = IntFromTo (Primitive.Int32) - in - open S - end - end -structure Int64 = struct - open Int64 - local - structure S = IntFromTo (Primitive.Int64) - in - open S - end - end -structure IntInf = struct - open IntInf - local - structure S = IntFromTo (Primitive.IntInf) - in - open S - end - end -end diff -Nru mlton-20130715/basis-library/integer/integer.sig mlton-20210117+dfsg/basis-library/integer/integer.sig --- mlton-20130715/basis-library/integer/integer.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/integer.sig 2021-12-28 17:19:36.000000000 +0000 @@ -58,10 +58,10 @@ val maxInt' : int val minInt' : int - val +? : int * int -> int - val *? : int * int -> int - val -? : int * int -> int - val ~? : int -> int + val +! : int * int -> int + val *! : int * int -> int + val -! : int * int -> int + val ~! : int -> int val andb: int * int -> int val << : int * Word.word -> int diff -Nru mlton-20130715/basis-library/integer/int-global.sml mlton-20210117+dfsg/basis-library/integer/int-global.sml --- mlton-20130715/basis-library/integer/int-global.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/int-global.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/integer/int-inf0.sml mlton-20210117+dfsg/basis-library/integer/int-inf0.sml --- mlton-20130715/basis-library/integer/int-inf0.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/int-inf0.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2013 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2013-2014,2016-2017 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -27,40 +27,24 @@ val rep: int -> rep val fromRep: rep -> int option - structure Prim : - sig - val isSmall: int -> bool - val areSmall: int * int -> bool - val dropTag: ObjptrWord.word -> ObjptrWord.word - val dropTagCoerce: int -> ObjptrWord.word - val dropTagCoerceInt: int -> ObjptrInt.int - val addTag: ObjptrWord.word -> ObjptrWord.word - val addTagCoerce: ObjptrWord.word -> int - val addTagCoerceInt: ObjptrInt.int -> int - val zeroTag: ObjptrWord.word -> ObjptrWord.word - val oneTag: ObjptrWord.word -> ObjptrWord.word - val oneTagCoerce: ObjptrWord.word -> int - end + val isSmall: int -> bool + val areSmall: int * int -> bool val abs: int -> int val +! : int * int -> int - val +? : int * int -> int val + : int * int -> int val divMod: int * int -> int * int val div: int * int -> int val gcd: int * int -> int val mod: int * int -> int val *! : int * int -> int - val *? : int * int -> int val * : int * int -> int val ~! : int -> int - val ~? : int -> int val ~ : int -> int val quotRem: int * int -> int * int val quot: int * int -> int val rem: int * int -> int val -! : int * int -> int - val -? : int * int -> int val - : int * int -> int val < : int * int -> bool @@ -74,7 +58,6 @@ val leu: int * int -> bool val gtu: int * int -> bool val geu: int * int -> bool - val isNeg: int -> bool val andb: int * int -> int val < int @@ -345,31 +328,54 @@ structure A = Primitive.Array structure V = Primitive.Vector structure S = SeqIndex - structure W = struct - open ObjptrWord - local - structure S = - ObjptrInt_ChooseIntN - (type 'a t = 'a -> ObjptrWord.word - val fInt8 = ObjptrWord.zextdFromInt8 - val fInt16 = ObjptrWord.zextdFromInt16 - val fInt32 = ObjptrWord.zextdFromInt32 - val fInt64 = ObjptrWord.zextdFromInt64) - in - val idFromObjptrInt = S.f - end - local - structure S = - ObjptrInt_ChooseIntN - (type 'a t = ObjptrWord.word -> 'a - val fInt8 = ObjptrWord.zextdToInt8 - val fInt16 = ObjptrWord.zextdToInt16 - val fInt32 = ObjptrWord.zextdToInt32 - val fInt64 = ObjptrWord.zextdToInt64) - in - val idToObjptrInt = S.f - end + structure ObjptrWord = struct + open ObjptrWord + local + structure S = + ObjptrInt_ChooseIntN + (type 'a t = 'a -> ObjptrWord.word + val fInt8 = ObjptrWord.zextdFromInt8 + val fInt16 = ObjptrWord.zextdFromInt16 + val fInt32 = ObjptrWord.zextdFromInt32 + val fInt64 = ObjptrWord.zextdFromInt64) + in + val idFromObjptrInt = S.f + end + local + structure S = + ObjptrInt_ChooseIntN + (type 'a t = ObjptrWord.word -> 'a + val fInt8 = ObjptrWord.zextdToInt8 + val fInt16 = ObjptrWord.zextdToInt16 + val fInt32 = ObjptrWord.zextdToInt32 + val fInt64 = ObjptrWord.zextdToInt64) + in + val idToObjptrInt = S.f + end + local + structure S = + C_MPLimb_ChooseWordN + (type 'a t = 'a -> ObjptrWord.word + val fWord8 = ObjptrWord.castFromWord8 + val fWord16 = ObjptrWord.castFromWord16 + val fWord32 = ObjptrWord.castFromWord32 + val fWord64 = ObjptrWord.castFromWord64) + in + val castFromMPLimb = S.f + end + local + structure S = + C_MPLimb_ChooseWordN + (type 'a t = ObjptrWord.word -> 'a + val fWord8 = ObjptrWord.castToWord8 + val fWord16 = ObjptrWord.castToWord16 + val fWord32 = ObjptrWord.castToWord32 + val fWord64 = ObjptrWord.castToWord64) + in + val castToMPLimb = S.f + end end + structure W = ObjptrWord structure I = ObjptrInt structure MPLimb = C_MPLimb structure Sz = struct @@ -388,9 +394,6 @@ end type bigInt = Prim.int - datatype rep = - Big of MPLimb.t V.vector - | Small of ObjptrInt.int val zero: bigInt = 0 val one: bigInt = 1 @@ -421,28 +424,75 @@ fun oneTag (w: W.word): W.word = W.orb (w, 0w1) fun oneTagCoerce (w: W.word): bigInt = Prim.fromWord (oneTag w) + + datatype rep = + Big of MPLimb.t V.vector + | Small of ObjptrInt.int + fun rep i = if isSmall i then Small (dropTagCoerceInt i) else Big (Prim.toVector i) - + fun fromRep r = case r of - Big v => + Big v => let + val limbsPerObjptr = + if Int32.>= (MPLimb.sizeInBits, ObjptrWord.sizeInBits) + then 1 + else S.sextdFromInt32 (Int32.quot (ObjptrWord.sizeInBits, MPLimb.sizeInBits)) + + val l = V.length v val ok = - SeqIndex.> (Vector.length v, 1) andalso - MPLimb.<= (V.subUnsafe (v, 0), 0w1) + (* sign limb + magnitude limb(s) *) + S.>= (l, 2) andalso + (* sign limb is 0w0 (positive) or 0w1 (negative) *) + MPLimb.<= (V.unsafeSub (v, 0), 0w1) andalso + (* most-significant magnitude limb is non-zero *) + MPLimb.> (V.unsafeSub (v, S.- (l, 1)), 0w0) andalso + (* value exceeds Small representation; + * if positive, then mag in [1, 2^(ObjptrWord.sizeInBits - 2)]. + * if negative, then mag in [0, 2^(ObjptrWord.sizeInBits - 2) - 1]. + *) + (S.> (l, S.+ (1, limbsPerObjptr)) orelse + if Int32.<= (ObjptrWord.sizeInBits, MPLimb.sizeInBits) + then let + val mag = V.unsafeSub (v, 1) + in + MPLimb.>= + (if MPLimb.>= (V.unsafeSub (v, 0), 0w1) then MPLimb.- (mag, 0w1) else mag, + MPLimb.<= + (if MPLimb.>= (V.unsafeSub (v, 0), 0w1) then ObjptrWord.- (mag, 0w1) else mag, + ObjptrWord.< + let + val w = ObjptrWord.idFromObjptrInt i + val wt = addTag w + val ok = w = dropTag wt in - if ok then SOME (Prim.fromVector v) else NONE + if ok + then SOME (Prim.fromWord wt) + else NONE end - | Small i => - let - val out = addTagCoerceInt i - val undo = dropTagCoerceInt out - in - if i = undo then SOME out else NONE - end + local fun 'a make {zextdToMPLimb: 'a -> MPLimb.word, @@ -488,15 +538,15 @@ if sextd andalso (#isNeg other) w then loop ((#neg other) w, 1, [(0,0w1)]) else loop (w, 1, [(0,0w0)]) - val a = A.arrayUnsafe n + val a = A.unsafeAlloc n fun loop acc = case acc of [] => () - | (i, v) :: acc => (A.updateUnsafe (a, i, v) + | (i, v) :: acc => (A.unsafeUpdate (a, i, v) ; loop acc) val () = loop acc in - Prim.fromVector (V.fromArrayUnsafe a) + Prim.fromVector (V.unsafeFromArray a) end in fun extdFromWord8 (sextd, w) = @@ -629,12 +679,12 @@ else let val v = Prim.toVector i val n = V.length v - val isneg = V.subUnsafe (v, 0) <> 0w0 + val isneg = V.unsafeSub (v, 0) <> 0w0 in if Int32.>= (MPLimb.sizeInBits, #sizeInBits other) then let val limbsPer : S.t = 1 - val limb = V.subUnsafe (v, 1) + val limb = V.unsafeSub (v, 1) val extra = S.> (n, S.+ (limbsPer, 1)) orelse @@ -654,7 +704,7 @@ fun loop (i, ans) = if S.> (i, 0) then let - val limb = V.subUnsafe (v, i) + val limb = V.unsafeSub (v, i) val ans = (#orb other) ((#lshift other) @@ -897,15 +947,8 @@ local val bytesPerMPLimb = Sz.zextdFromInt32 (Int32.quot (MPLimb.sizeInBits, 8)) - val bytesPerCounter = Sz.zextdFromInt32 (Int32.quot (S.sizeInBits, 8)) - val bytesPerLength = Sz.zextdFromInt32 (Int32.quot (S.sizeInBits, 8)) - val bytesPerHeader = Sz.zextdFromInt32 (Int32.quot (HeaderWord.sizeInBits, 8)) in - val bytesPerArrayHeader = - Sz.+ (bytesPerCounter, - Sz.+ (bytesPerLength, - bytesPerHeader - )) + val bytesPerSequenceMetaData = Sz.zextdFromInt32 SequenceMetaDataSize.bytes (* Reserve heap space for a large IntInf.int with room for num + extra * `limbs'. The reason for splitting this up is that extra is intended * to be a constant, and so can be combined at compile time. @@ -914,7 +957,7 @@ Sz.+ (Sz.* (bytesPerMPLimb, Sz.zextdFromSeqIndex num), Sz.+ (Sz.* (bytesPerMPLimb, Sz.zextdFromSeqIndex extra), Sz.+ (bytesPerMPLimb, (* isneg Field *) - Sz.+ (bytesPerArrayHeader, (* Array Header *) + Sz.+ (bytesPerSequenceMetaData, (* Sequence MetaData *) case MLton.Align.align of (* alignment *) MLton.Align.Align4 => 0w3 | MLton.Align.Align8 => 0w7 @@ -939,7 +982,7 @@ (* Given a bignum bigint, test if it is (strictly) negative. *) fun bigIsNeg (arg: bigInt): bool = - V.subUnsafe (Prim.toVector arg, 0) <> 0w0 + V.unsafeSub (Prim.toVector arg, 0) <> 0w0 local fun make (smallOp, bigOp, limbsFn, extra) @@ -968,9 +1011,9 @@ | SOME i => i end in - val bigAdd = make (I.+!, Prim.+, S.max, 1) - val bigSub = make (I.-!, Prim.-, S.max, 1) - val bigMul = make (I.*!, Prim.*, S.+, 0) + val bigAdd = make (I.+$, Prim.+, S.max, 1) + val bigSub = make (I.-$, Prim.-, S.max, 1) + val bigMul = make (I.*$, Prim.*, S.+, 0) end fun bigNeg (arg: bigInt): bigInt = @@ -1240,7 +1283,7 @@ if Int32.mod (bpl, bpd) = 0 then 0 else 1) val bytes = - Sz.+ (Sz.+ (bytesPerArrayHeader (* Array Header *), + Sz.+ (Sz.+ (bytesPerSequenceMetaData (* Sequence MetaData *), Sz.+ (0w1 (* sign *), case MLton.Align.align of (* alignment *) MLton.Align.Align4 => 0w3 @@ -1262,7 +1305,7 @@ else let val v = Prim.toVector arg val n = V.length v - val w = MPLimb.log2 (V.subUnsafe (v, S.- (n, 1))) + val w = MPLimb.log2 (V.unsafeSub (v, S.- (n, 1))) in fromLarge {numLimbsMinusOne = S.- (n, 2), mostSigLimbLog2 = w} @@ -1276,40 +1319,21 @@ val maxInt = NONE val minInt = NONE - structure Prim = - struct - val isSmall = isSmall - val areSmall = areSmall - val dropTag = dropTag - val dropTagCoerce = dropTagCoerce - val dropTagCoerceInt = dropTagCoerceInt - val addTag = addTag - val addTagCoerce = addTagCoerce - val addTagCoerceInt = addTagCoerceInt - val zeroTag = zeroTag - val oneTag = oneTag - val oneTagCoerce = oneTagCoerce - end - val abs = bigAbs val op +! = bigAdd - val op +? = bigAdd val op + = bigAdd val divMod = bigDivMod val op div = bigDiv val gcd = bigGcd val op mod = bigMod val op *! = bigMul - val op *? = bigMul val op * = bigMul val op ~! = bigNeg - val op ~? = bigNeg val op ~ = bigNeg val quotRem = bigQuotRem val quot = bigQuot val rem = bigRem val op -! = bigSub - val op -? = bigSub val op - = bigSub val op < = bigLT @@ -1323,7 +1347,6 @@ val leu = bigLEU val gtu = bigGTU val geu = bigGEU - val isNeg = bigIsNeg val andb = bigAndb val < int - val fromLarge: LargeInt.int -> int - val toInt: int -> Int.int - val toLarge: int -> LargeInt.int - end - -structure Primitive = struct - -open Primitive - -structure IntInf : INT_INF1 = - struct - structure I = Primitive.IntInf - - local - structure S = - Int_ChooseInt - (type 'a t = 'a -> int - val fInt8 = I.fromInt8 - val fInt16 = I.fromInt16 - val fInt32 = I.fromInt32 - val fInt64 = I.fromInt64 - val fIntInf = I.fromIntInf) - in - val fromInt = S.f - end - local - structure S = - LargeInt_ChooseInt - (type 'a t = 'a -> int - val fInt8 = I.fromInt8 - val fInt16 = I.fromInt16 - val fInt32 = I.fromInt32 - val fInt64 = I.fromInt64 - val fIntInf = I.fromIntInf) - in - val fromLarge = S.f - end - local - structure S = - Int_ChooseInt - (type 'a t = int -> 'a - val fInt8 = I.toInt8 - val fInt16 = I.toInt16 - val fInt32 = I.toInt32 - val fInt64 = I.toInt64 - val fIntInf = I.toIntInf) - in - val toInt = S.f - end - local - structure S = - LargeInt_ChooseInt - (type 'a t = int -> 'a - val fInt8 = I.toInt8 - val fInt16 = I.toInt16 - val fInt32 = I.toInt32 - val fInt64 = I.toInt64 - val fIntInf = I.toIntInf) - in - val toLarge = S.f - end - - end - -end diff -Nru mlton-20130715/basis-library/integer/int-inf.sig mlton-20210117+dfsg/basis-library/integer/int-inf.sig --- mlton-20130715/basis-library/integer/int-inf.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/int-inf.sig 2021-12-28 17:19:36.000000000 +0000 @@ -34,10 +34,10 @@ val zero: int val one: int - val +? : int * int -> int - val *? : int * int -> int - val -? : int * int -> int - val ~? : int -> int + val +! : int * int -> int + val *! : int * int -> int + val -! : int * int -> int + val ~! : int -> int val ltu: int * int -> bool val leu: int * int -> bool diff -Nru mlton-20130715/basis-library/integer/int-inf.sml mlton-20210117+dfsg/basis-library/integer/int-inf.sml --- mlton-20130715/basis-library/integer/int-inf.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/int-inf.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2013 Matthew Fluet. +(* Copyright (C) 2013-2014 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -22,11 +22,10 @@ val precision: Int.int option = NONE fun sign (arg: int): Int.int = - if Prim.isSmall arg - then I.sign (Prim.dropTagCoerceInt arg) - else if isNeg arg - then ~1 - else 1 + case compare (arg, zero) of + LESS => ~1 + | EQUAL => 0 + | GREATER => 1 fun sameSign (x, y) = sign x = sign y @@ -201,8 +200,8 @@ NONE => (acc, s) | SOME ({more, shift, chunk}, s') => loop (more, - ((Prim.addTagCoerce shift) * acc) - + (Prim.addTagCoerce chunk), + ((W.toLargeInt shift) * acc) + + (W.toLargeInt chunk), s') else (acc, s) fun reader (s: 'a): (int * 'a) option = @@ -210,7 +209,7 @@ NONE => NONE | SOME ({more, chunk, ...}, s') => SOME (loop (more, - Prim.addTagCoerce chunk, + W.toLargeInt chunk, s')) in reader @@ -334,7 +333,4 @@ fromLarge = fn {numLimbsMinusOne, mostSigLimbLog2} => Int.+ (Int.* (MPLimb.wordSize, SeqIndex.toInt numLimbsMinusOne), Int32.toInt mostSigLimbLog2)} - - val isSmall = Prim.isSmall - val areSmall = Prim.areSmall end diff -Nru mlton-20130715/basis-library/integer/int.sml mlton-20210117+dfsg/basis-library/integer/int.sml --- mlton-20130715/basis-library/integer/int.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/int.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -80,7 +80,7 @@ let val _ = CharArray.update - (buf, i, StringCvt.digitToChar (toInt (~? (rem (q, radix))))) + (buf, i, StringCvt.digitToChar (toInt (~! (rem (q, radix))))) val q = quot (q, radix) in if q = zero @@ -103,7 +103,7 @@ else loop (q, Int.- (i, 1)) end in - loop (if n < zero then n else ~? n, Int.- (maxNumDigits, 1)) + loop (if n < zero then n else ~! n, Int.- (maxNumDigits, 1)) end) end @@ -138,15 +138,15 @@ | SOME (c, s') => case charToDigit c of NONE => SOME (zero, s) - | SOME n => finishNum (s', ~? n) + | SOME n => finishNum (s', ~! n) else case charToDigit c of NONE => SOME (zero, s) - | SOME n => finishNum (s', ~? n)) + | SOME n => finishNum (s', ~! n)) | (SOME (c, s), _) => case charToDigit c of NONE => NONE - | SOME n => finishNum (s, ~? n) + | SOME n => finishNum (s, ~! n) fun negate s = case num s of NONE => NONE diff -Nru mlton-20130715/basis-library/integer/iwconv0.sml mlton-20210117+dfsg/basis-library/integer/iwconv0.sml --- mlton-20130715/basis-library/integer/iwconv0.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/iwconv0.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/integer/num0.sml mlton-20210117+dfsg/basis-library/integer/num0.sml --- mlton-20130715/basis-library/integer/num0.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/num0.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -187,7 +187,7 @@ else if y < zero then if x = zero then zero - else quotUnsafe (x -? one, y) -? one + else quotUnsafe (x -! one, y) -! one else raise Div else if y < zero then if (Primitive.Controls.detectOverflow @@ -198,7 +198,7 @@ else minInt' else quotUnsafe (x, y) else if y > zero - then quotUnsafe (x +? one, y) -? one + then quotUnsafe (x +! one, y) -! one else raise Div fun x mod y = @@ -208,14 +208,14 @@ else if y < zero then if x = zero then zero - else remUnsafe (x -? one, y) +? (y + one) + else remUnsafe (x -! one, y) +! (y + one) else raise Div else if y < zero then if x = minInt' andalso y = ~one then zero else remUnsafe (x, y) else if y > zero - then remUnsafe (x +? one, y) +? (y -? one) + then remUnsafe (x +! one, y) +! (y -! one) else raise Div local diff -Nru mlton-20130715/basis-library/integer/num1.sml mlton-20210117+dfsg/basis-library/integer/num1.sml --- mlton-20130715/basis-library/integer/num1.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/num1.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/integer/pack-word.sml mlton-20210117+dfsg/basis-library/integer/pack-word.sml --- mlton-20130715/basis-library/integer/pack-word.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/pack-word.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/integer/word1.sml mlton-20210117+dfsg/basis-library/integer/word1.sml --- mlton-20130715/basis-library/integer/word1.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/word1.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,363 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature WORD_FROM_TO_ARG = - sig - type word - (* Lowbits or sign extend. *) - val fromInt8: Primitive.Int8.int -> word - val fromInt16: Primitive.Int16.int -> word - val fromInt32: Primitive.Int32.int -> word - val fromInt64: Primitive.Int64.int -> word - val fromIntInf: Primitive.IntInf.int -> word - (* Lowbits or zero extend. *) - val fromInt8Z: Primitive.Int8.int -> word - val fromInt16Z: Primitive.Int16.int -> word - val fromInt32Z: Primitive.Int32.int -> word - val fromInt64Z: Primitive.Int64.int -> word - val fromIntInfZ: Primitive.IntInf.int -> word - (* Lowbits or zero extend. *) - val fromWord8: Primitive.Word8.word -> word - val fromWord16: Primitive.Word16.word -> word - val fromWord32: Primitive.Word32.word -> word - val fromWord64: Primitive.Word64.word -> word - (* Lowbits or sign extend. *) - val fromWord8X: Primitive.Word8.word -> word - val fromWord16X: Primitive.Word16.word -> word - val fromWord32X: Primitive.Word32.word -> word - val fromWord64X: Primitive.Word64.word -> word - (* Overflow checking, unsigned interp. *) - val toInt8: word -> Primitive.Int8.int - val toInt16: word -> Primitive.Int16.int - val toInt32: word -> Primitive.Int32.int - val toInt64: word -> Primitive.Int64.int - val toIntInf: word -> Primitive.IntInf.int - (* Overflow checking, signed interp. *) - val toInt8X: word -> Primitive.Int8.int - val toInt16X: word -> Primitive.Int16.int - val toInt32X: word -> Primitive.Int32.int - val toInt64X: word -> Primitive.Int64.int - val toIntInfX: word -> Primitive.IntInf.int - (* Lowbits or zero extend. *) - val toWord8: word -> Primitive.Word8.word - val toWord16: word -> Primitive.Word16.word - val toWord32: word -> Primitive.Word32.word - val toWord64: word -> Primitive.Word64.word - (* Lowbits or sign extend. *) - val toWord8X: word -> Primitive.Word8.word - val toWord16X: word -> Primitive.Word16.word - val toWord32X: word -> Primitive.Word32.word - val toWord64X: word -> Primitive.Word64.word - end - -signature WORD_FROM_TO_RES = - sig - type word - - val fromInt: Int.int -> word - val fromIntZ: Int.int -> word - val fromLargeInt: LargeInt.int -> word - val fromLargeIntZ: LargeInt.int -> word - val fromWord: Word.word -> word - val fromWordX: Word.word -> word - val fromLargeWord: LargeWord.word -> word - val fromLarge: LargeWord.word -> word - val fromLargeWordX: LargeWord.word -> word - val fromLargeX: LargeWord.word -> word - val fromSysWord: SysWord.word -> word - val fromSysWordX: SysWord.word -> word - - val toInt: word -> Int.int - val toIntX: word -> Int.int - val toLargeInt: word -> LargeInt.int - val toLargeIntX: word -> LargeInt.int - val toWord: word -> Word.word - val toWordX: word -> Word.word - val toLargeWord: word -> LargeWord.word - val toLarge: word -> LargeWord.word - val toLargeWordX: word -> LargeWord.word - val toLargeX: word -> LargeWord.word - val toSysWord: word -> SysWord.word - val toSysWordX: word -> SysWord.word - end - -functor WordFromTo (W: WORD_FROM_TO_ARG): WORD_FROM_TO_RES where type word = W.word = - struct - open W - - local - structure S = - Int_ChooseInt - (type 'a t = 'a -> word - val fInt8 = W.fromInt8 - val fInt16 = W.fromInt16 - val fInt32 = W.fromInt32 - val fInt64 = W.fromInt64 - val fIntInf = W.fromIntInf) - in - val fromInt = S.f - end - local - structure S = - Int_ChooseInt - (type 'a t = 'a -> word - val fInt8 = W.fromInt8Z - val fInt16 = W.fromInt16Z - val fInt32 = W.fromInt32Z - val fInt64 = W.fromInt64Z - val fIntInf = W.fromIntInfZ) - in - val fromIntZ = S.f - end - local - structure S = - LargeInt_ChooseInt - (type 'a t = 'a -> word - val fInt8 = W.fromInt8 - val fInt16 = W.fromInt16 - val fInt32 = W.fromInt32 - val fInt64 = W.fromInt64 - val fIntInf = W.fromIntInf) - in - val fromLargeInt = S.f - end - local - structure S = - LargeInt_ChooseInt - (type 'a t = 'a -> word - val fInt8 = W.fromInt8Z - val fInt16 = W.fromInt16Z - val fInt32 = W.fromInt32Z - val fInt64 = W.fromInt64Z - val fIntInf = W.fromIntInfZ) - in - val fromLargeIntZ = S.f - end - local - structure S = - Word_ChooseWordN - (type 'a t = 'a -> word - val fWord8 = W.fromWord8 - val fWord16 = W.fromWord16 - val fWord32 = W.fromWord32 - val fWord64 = W.fromWord64) - in - val fromWord = S.f - end - local - structure S = - Word_ChooseWordN - (type 'a t = 'a -> word - val fWord8 = W.fromWord8X - val fWord16 = W.fromWord16X - val fWord32 = W.fromWord32X - val fWord64 = W.fromWord64X) - in - val fromWordX = S.f - end - local - structure S = - LargeWord_ChooseWordN - (type 'a t = 'a -> word - val fWord8 = W.fromWord8 - val fWord16 = W.fromWord16 - val fWord32 = W.fromWord32 - val fWord64 = W.fromWord64) - in - val fromLargeWord = S.f - val fromLarge = fromLargeWord - end - local - structure S = - LargeWord_ChooseWordN - (type 'a t = 'a -> word - val fWord8 = W.fromWord8X - val fWord16 = W.fromWord16X - val fWord32 = W.fromWord32X - val fWord64 = W.fromWord64X) - in - val fromLargeWordX = S.f - val fromLargeX = fromLargeWordX - end - local - structure S = - SysWord_ChooseWordN - (type 'a t = 'a -> word - val fWord8 = W.fromWord8 - val fWord16 = W.fromWord16 - val fWord32 = W.fromWord32 - val fWord64 = W.fromWord64) - in - val fromSysWord = S.f - end - local - structure S = - SysWord_ChooseWordN - (type 'a t = 'a -> word - val fWord8 = W.fromWord8X - val fWord16 = W.fromWord16X - val fWord32 = W.fromWord32X - val fWord64 = W.fromWord64X) - in - val fromSysWordX = S.f - end - - local - structure S = - Int_ChooseInt - (type 'a t = word -> 'a - val fInt8 = W.toInt8 - val fInt16 = W.toInt16 - val fInt32 = W.toInt32 - val fInt64 = W.toInt64 - val fIntInf = W.toIntInf) - in - val toInt = S.f - end - local - structure S = - Int_ChooseInt - (type 'a t = word -> 'a - val fInt8 = W.toInt8X - val fInt16 = W.toInt16X - val fInt32 = W.toInt32X - val fInt64 = W.toInt64X - val fIntInf = W.toIntInfX) - in - val toIntX = S.f - end - local - structure S = - LargeInt_ChooseInt - (type 'a t = word -> 'a - val fInt8 = W.toInt8 - val fInt16 = W.toInt16 - val fInt32 = W.toInt32 - val fInt64 = W.toInt64 - val fIntInf = W.toIntInf) - in - val toLargeInt = S.f - end - local - structure S = - LargeInt_ChooseInt - (type 'a t = word -> 'a - val fInt8 = W.toInt8X - val fInt16 = W.toInt16X - val fInt32 = W.toInt32X - val fInt64 = W.toInt64X - val fIntInf = W.toIntInfX) - in - val toLargeIntX = S.f - end - local - structure S = - Word_ChooseWordN - (type 'a t = word -> 'a - val fWord8 = W.toWord8 - val fWord16 = W.toWord16 - val fWord32 = W.toWord32 - val fWord64 = W.toWord64) - in - val toWord = S.f - end - local - structure S = - Word_ChooseWordN - (type 'a t = word -> 'a - val fWord8 = W.toWord8X - val fWord16 = W.toWord16X - val fWord32 = W.toWord32X - val fWord64 = W.toWord64X) - in - val toWordX = S.f - end - local - structure S = - LargeWord_ChooseWordN - (type 'a t = word -> 'a - val fWord8 = W.toWord8 - val fWord16 = W.toWord16 - val fWord32 = W.toWord32 - val fWord64 = W.toWord64) - in - val toLargeWord = S.f - val toLarge = toLargeWord - end - local - structure S = - LargeWord_ChooseWordN - (type 'a t = word -> 'a - val fWord8 = W.toWord8X - val fWord16 = W.toWord16X - val fWord32 = W.toWord32X - val fWord64 = W.toWord64X) - in - val toLargeWordX = S.f - val toLargeX = toLargeWordX - end - local - structure S = - SysWord_ChooseWordN - (type 'a t = word -> 'a - val fWord8 = W.toWord8 - val fWord16 = W.toWord16 - val fWord32 = W.toWord32 - val fWord64 = W.toWord64) - in - val toSysWord = S.f - end - local - structure S = - SysWord_ChooseWordN - (type 'a t = word -> 'a - val fWord8 = W.toWord8X - val fWord16 = W.toWord16X - val fWord32 = W.toWord32X - val fWord64 = W.toWord64X) - in - val toSysWordX = S.f - end - end - -structure Primitive = struct -open Primitive - -structure Word8 = struct - open Word8 - local - structure S = WordFromTo (Primitive.Word8) - in - open S - end - end -structure Word16 = struct - open Word16 - local - structure S = WordFromTo (Primitive.Word16) - in - open S - end - end -structure Word32 = struct - open Word32 - local - structure S = WordFromTo (Primitive.Word32) - in - open S - end - end -structure Word64 = struct - open Word64 - local - structure S = WordFromTo (Primitive.Word64) - in - open S - end - end -end diff -Nru mlton-20130715/basis-library/integer/word-global.sml mlton-20210117+dfsg/basis-library/integer/word-global.sml --- mlton-20130715/basis-library/integer/word-global.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/word-global.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/integer/word.sml mlton-20210117+dfsg/basis-library/integer/word.sml --- mlton-20130715/basis-library/integer/word.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/integer/word.sml 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/io/bin-io.sml mlton-20210117+dfsg/basis-library/io/bin-io.sml --- mlton-20130715/basis-library/io/bin-io.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/io/bin-io.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/io/bin-prim-io.sml mlton-20210117+dfsg/basis-library/io/bin-prim-io.sml --- mlton-20130715/basis-library/io/bin-prim-io.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/io/bin-prim-io.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/io/imperative-io.fun mlton-20210117+dfsg/basis-library/io/imperative-io.fun --- mlton-20130715/basis-library/io/imperative-io.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/io/imperative-io.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2013 Matthew Fluet. +(* Copyright (C) 2013,2017 Matthew Fluet. * Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -10,7 +10,7 @@ sig structure Array: sig include MONO_ARRAY - val arrayUninit: int -> array + val alloc: int -> array val unsafeSub: array * int -> elem end structure ArraySlice: MONO_ARRAY_SLICE @@ -219,7 +219,7 @@ local val augmentedReader = PIO.nullRd () - val buf = A.arrayUninit 0 + val buf = A.alloc 0 val first = ref 0 val last = ref 0 val reader = PIO.nullRd () @@ -374,7 +374,7 @@ (ib, "inputN", fn () => let val readArr = readArr ib - val inp = A.arrayUninit n + val inp = A.alloc n fun fill k = if k >= size then () diff -Nru mlton-20130715/basis-library/io/io.sig mlton-20210117+dfsg/basis-library/io/io.sig --- mlton-20130715/basis-library/io/io.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/io/io.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/io/io.sml mlton-20210117+dfsg/basis-library/io/io.sml --- mlton-20130715/basis-library/io/io.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/io/io.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/io/prim-io.fun mlton-20210117+dfsg/basis-library/io/prim-io.fun --- mlton-20130715/basis-library/io/prim-io.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/io/prim-io.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/io/prim-io.sig mlton-20210117+dfsg/basis-library/io/prim-io.sig --- mlton-20130715/basis-library/io/prim-io.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/io/prim-io.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/io/stream-io.fun mlton-20210117+dfsg/basis-library/io/stream-io.fun --- mlton-20130715/basis-library/io/stream-io.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/io/stream-io.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/io/text-io.sml mlton-20210117+dfsg/basis-library/io/text-io.sml --- mlton-20130715/basis-library/io/text-io.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/io/text-io.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/io/text-prim-io.sml mlton-20210117+dfsg/basis-library/io/text-prim-io.sml --- mlton-20130715/basis-library/io/text-prim-io.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/io/text-prim-io.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/all.mlb mlton-20210117+dfsg/basis-library/libs/all.mlb --- mlton-20130715/basis-library/libs/all.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/all.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/arrays-and-vectors/mono-vector-array-array2-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/arrays-and-vectors/mono-vector-array-array2-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/arrays-and-vectors/mono-vector-array-array2-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/arrays-and-vectors/mono-vector-array-array2-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/arrays-and-vectors/vector-array-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/arrays-and-vectors/vector-array-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/arrays-and-vectors/vector-array-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/arrays-and-vectors/vector-array-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/basis-1997.mlb mlton-20210117+dfsg/basis-library/libs/basis-1997/basis-1997.mlb --- mlton-20130715/basis-library/libs/basis-1997/basis-1997.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/basis-1997.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,16 @@ -(* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local @@ -68,7 +70,9 @@ io/bin-stream-io.sig io/bin-io.sig io/bin-io-convert.fun - top-level/basis.sig + ann "allowSpecifySpecialIds true" in + top-level/basis.sig + end top-level/basis.sml in signature MONO_ARRAY_1997 diff -Nru mlton-20130715/basis-library/libs/basis-1997/io/bin-io-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/io/bin-io-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/io/bin-io-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/io/bin-io-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/io/io-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/io/io-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/io/io-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/io/io-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/io/text-io-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/io/text-io-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/io/text-io-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/io/text-io-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/posix/file-sys-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/file-sys-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/posix/file-sys-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/file-sys-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/posix/flags-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/flags-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/posix/flags-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/flags-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/posix/io-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/io-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/posix/io-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/io-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/posix/posix-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/posix-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/posix/posix-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/posix-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/posix/process-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/process-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/posix/process-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/process-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/posix/tty-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/tty-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/posix/tty-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/posix/tty-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/real/IEEE-real-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/real/IEEE-real-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/real/IEEE-real-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/real/IEEE-real-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/real/real-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/real/real-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/real/real-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/real/real-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/system/file-sys-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/system/file-sys-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/system/file-sys-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/system/file-sys-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/system/os-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/system/os-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/system/os-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/system/os-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/system/path-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/system/path-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/system/path-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/system/path-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/system/process-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/system/process-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/system/process-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/system/process-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/system/timer-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/system/timer-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/system/timer-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/system/timer-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/system/unix-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/system/unix-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/system/unix-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/system/unix-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/text/text-convert.fun mlton-20210117+dfsg/basis-library/libs/basis-1997/text/text-convert.fun --- mlton-20130715/basis-library/libs/basis-1997/text/text-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/text/text-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/top-level/basis-funs.sml mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/basis-funs.sml --- mlton-20130715/basis-library/libs/basis-1997/top-level/basis-funs.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/basis-funs.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/top-level/basis-sigs.sml mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/basis-sigs.sml --- mlton-20130715/basis-library/libs/basis-1997/top-level/basis-sigs.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/basis-sigs.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/top-level/basis.sml mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/basis.sml --- mlton-20130715/basis-library/libs/basis-1997/top-level/basis.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/basis.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/top-level/infixes.sml mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/infixes.sml --- mlton-20130715/basis-library/libs/basis-1997/top-level/infixes.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/infixes.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/top-level/overloads.sml mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/overloads.sml --- mlton-20130715/basis-library/libs/basis-1997/top-level/overloads.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/overloads.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-1997/top-level/top-level.sml mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/top-level.sml --- mlton-20130715/basis-library/libs/basis-1997/top-level/top-level.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-1997/top-level/top-level.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-2002/basis-2002.mlb mlton-20210117+dfsg/basis-library/libs/basis-2002/basis-2002.mlb --- mlton-20130715/basis-library/libs/basis-2002/basis-2002.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/basis-2002.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,19 +1,23 @@ -(* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local ../basis-extra/basis-extra.mlb - top-level/basis.sig + ann "allowSpecifySpecialIds true" in + top-level/basis.sig + end top-level/basis.sml in structure Basis2002 diff -Nru mlton-20130715/basis-library/libs/basis-2002/top-level/basis-funs.sml mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/basis-funs.sml --- mlton-20130715/basis-library/libs/basis-2002/top-level/basis-funs.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/basis-funs.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-2002/top-level/basis-sigs.sml mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/basis-sigs.sml --- mlton-20130715/basis-library/libs/basis-2002/top-level/basis-sigs.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/basis-sigs.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-2002/top-level/basis.sml mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/basis.sml --- mlton-20130715/basis-library/libs/basis-2002/top-level/basis.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/basis.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-2002/top-level/generate-overloads.sml mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/generate-overloads.sml --- mlton-20130715/basis-library/libs/basis-2002/top-level/generate-overloads.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/generate-overloads.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-2002/top-level/infixes.sml mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/infixes.sml --- mlton-20130715/basis-library/libs/basis-2002/top-level/infixes.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/infixes.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-2002/top-level/Makefile mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/Makefile --- mlton-20130715/basis-library/libs/basis-2002/top-level/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ ## Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/basis-library/libs/basis-2002/top-level/pervasive-equal.sml mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/pervasive-equal.sml --- mlton-20130715/basis-library/libs/basis-2002/top-level/pervasive-equal.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/pervasive-equal.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-2002/top-level/pervasive-exns.sml mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/pervasive-exns.sml --- mlton-20130715/basis-library/libs/basis-2002/top-level/pervasive-exns.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/pervasive-exns.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-2002/top-level/pervasive-types.sml mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/pervasive-types.sml --- mlton-20130715/basis-library/libs/basis-2002/top-level/pervasive-types.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/pervasive-types.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-2002/top-level/pervasive-vals.sml mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/pervasive-vals.sml --- mlton-20130715/basis-library/libs/basis-2002/top-level/pervasive-vals.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/pervasive-vals.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-2002/top-level/top-level.sml mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/top-level.sml --- mlton-20130715/basis-library/libs/basis-2002/top-level/top-level.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002/top-level/top-level.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -16,49 +17,76 @@ structure Posix = Posix structure OS = OS structure BoolArray = BoolArray +structure BoolArray2 = BoolArray2 structure BoolVector = BoolVector structure CharArraySlice = CharArraySlice structure CharArray = CharArray +structure CharArray2 = CharArray2 structure Int8Array = Int8Array +structure Int8Array2 = Int8Array2 structure Int8Vector = Int8Vector structure Int16Array = Int16Array +structure Int16Array2 = Int16Array2 structure Int16Vector = Int16Vector structure Int32Array = Int32Array +structure Int32Array2 = Int32Array2 structure Int32Vector = Int32Vector structure Int64Array = Int64Array +structure Int64Array2 = Int64Array2 structure Int64Vector = Int64Vector structure IntArray = IntArray +structure IntArray2 = IntArray2 structure IntVector = IntVector structure LargeIntArray = LargeIntArray +structure LargeIntArray2 = LargeIntArray2 structure LargeIntVector = LargeIntVector structure LargeRealArray = LargeRealArray +structure LargeRealArray2 = LargeRealArray2 structure LargeRealVector = LargeRealVector structure LargeWordArray = LargeWordArray +structure LargeWordArray2 = LargeWordArray2 structure LargeWordVector = LargeWordVector structure Real32Array = Real32Array +structure Real32Array2 = Real32Array2 structure Real32Vector = Real32Vector structure Real64Array = Real64Array +structure Real64Array2 = Real64Array2 structure Real64Vector = Real64Vector structure RealArray = RealArray +structure RealArray2 = RealArray2 structure RealVector = RealVector structure Word8Array = Word8Array +structure Word8Array2 = Word8Array2 structure Word8Vector = Word8Vector structure Word16Array = Word16Array +structure Word16Array2 = Word16Array2 structure Word16Vector = Word16Vector structure Word32Array = Word32Array +structure Word32Array2 = Word32Array2 structure Word32Vector = Word32Vector structure Word64Array = Word64Array +structure Word64Array2 = Word64Array2 structure Word64Vector = Word64Vector structure WordArray = WordArray +structure WordArray2 = WordArray2 structure WordVector = WordVector +structure Array = Array +structure Array2 = Array2 +structure Vector = Vector structure Int8 = Int8 structure Int16 = Int16 structure Int32 = Int32 structure Int64 = Int64 structure IntInf = IntInf +structure LargeInt = LargeInt +structure Int = Int structure Real32 = Real32 structure Real64 = Real64 +structure LargeReal = LargeReal +structure Real = Real structure Word8 = Word8 structure Word16 = Word16 structure Word32 = Word32 structure Word64 = Word64 +structure LargeWord = LargeWord +structure Word = Word diff -Nru mlton-20130715/basis-library/libs/basis-2002-strict/top-level/top-level.sml mlton-20210117+dfsg/basis-library/libs/basis-2002-strict/top-level/top-level.sml --- mlton-20130715/basis-library/libs/basis-2002-strict/top-level/top-level.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-2002-strict/top-level/top-level.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-extra/basis-extra.mlb mlton-20210117+dfsg/basis-library/libs/basis-extra/basis-extra.mlb --- mlton-20130715/basis-library/libs/basis-extra/basis-extra.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-extra/basis-extra.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,23 +1,25 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local ../../build/sources.mlb - top-level/basis.sig - ann - "allowRebindEquals true" - in + ann "allowSpecifySpecialIds true" in + top-level/basis.sig + end + ann "allowRedefineSpecialIds true" in top-level/basis.sml end in diff -Nru mlton-20130715/basis-library/libs/basis-extra/top-level/basis-funs.sml mlton-20210117+dfsg/basis-library/libs/basis-extra/top-level/basis-funs.sml --- mlton-20130715/basis-library/libs/basis-extra/top-level/basis-funs.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-extra/top-level/basis-funs.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-extra/top-level/basis-sigs.sml mlton-20210117+dfsg/basis-library/libs/basis-extra/top-level/basis-sigs.sml --- mlton-20130715/basis-library/libs/basis-extra/top-level/basis-sigs.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-extra/top-level/basis-sigs.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-extra/top-level/basis.sml mlton-20210117+dfsg/basis-library/libs/basis-extra/top-level/basis.sml --- mlton-20130715/basis-library/libs/basis-extra/top-level/basis.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-extra/top-level/basis.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-extra/top-level/top-level.sml mlton-20210117+dfsg/basis-library/libs/basis-extra/top-level/top-level.sml --- mlton-20130715/basis-library/libs/basis-extra/top-level/top-level.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-extra/top-level/top-level.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-none/top-level/basis.sml mlton-20210117+dfsg/basis-library/libs/basis-none/top-level/basis.sml --- mlton-20130715/basis-library/libs/basis-none/top-level/basis.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-none/top-level/basis.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-none/top-level/infixes.sml mlton-20210117+dfsg/basis-library/libs/basis-none/top-level/infixes.sml --- mlton-20130715/basis-library/libs/basis-none/top-level/infixes.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-none/top-level/infixes.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/libs/basis-none/top-level/top-level.sml mlton-20210117+dfsg/basis-library/libs/basis-none/top-level/top-level.sml --- mlton-20130715/basis-library/libs/basis-none/top-level/top-level.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/libs/basis-none/top-level/top-level.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/list/list-pair.sml mlton-20210117+dfsg/basis-library/list/list-pair.sml --- mlton-20130715/basis-library/list/list-pair.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/list/list-pair.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/list/list.sml mlton-20210117+dfsg/basis-library/list/list.sml --- mlton-20130715/basis-library/list/list.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/list/list.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -44,7 +44,7 @@ in loop (l, b) end - fun length l = foldl (fn (_, n) => n +? 1) 0 l + fun length l = foldl (fn (_, n) => n +! 1) 0 l fun appendRev (l1, l2) = foldl (op ::) l2 l1 diff -Nru mlton-20130715/basis-library/Makefile mlton-20210117+dfsg/basis-library/Makefile --- mlton-20130715/basis-library/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,28 +1,28 @@ -## Copyright (C) 2010,2013 Matthew Fluet. +## Copyright (C) 2010,2013,2016-2017,2019 Matthew Fluet. # Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## -SRC = $(shell cd .. && pwd) -BUILD = $(SRC)/build -BIN = $(BUILD)/bin -MLTON = mlton -PATH = $(BIN):$(shell echo $$PATH) +ROOT := .. +include $(ROOT)/Makefile.config + +###################################################################### all: .PHONY: clean clean: - ../bin/clean + $(SRC)/bin/clean RESOLVE_SCOPES = program topdec strdec dec -OBJPTR_MAPS = objptr-rep32.map objptr-rep64.map -HEADER_MAPS = header-word32.map header-word64.map +OBJPTR_MAPS = objptr-rep32.map objptr-rep64.map +NORMAL_METADATA_MAPS = normal-metadata-size32.map normal-metadata-size64.map normal-metadata-size128.map +SEQUENCE_METADATA_MAPS = sequence-metadata-size96.map sequence-metadata-size128.map sequence-metadata-size196.map sequence-metadata-size256.map SEQINDEX_MAPS = seqindex-int32.map seqindex-int64.map DEFAULT_CHAR = char8 DEFAULT_INT = int32 int64 intinf @@ -31,29 +31,31 @@ .PHONY: def-use def-use: - "$(MLTON)" -disable-ann deadCode -stop tc -show-types true \ + "$(BIN)/$(MLTON)" -disable-ann deadCode -stop tc -show-types true \ -prefer-abs-paths true -show-def-use basis-library.def-use \ libs/all.mlb .PHONY: type-check-def type-check-def: - "$(MLTON)" -disable-ann deadCode -stop tc -show-types true \ + "$(BIN)/$(MLTON)" -disable-ann deadCode -stop tc -show-types true \ libs/all.mlb .PHONY: type-check-all type-check-all: for resolvescope in $(RESOLVE_SCOPES); do \ - for objptrrep in $(OBJPTR_MAPS); do \ - for header in $(HEADER_MAPS); do \ + for objptr in $(OBJPTR_MAPS); do \ + for normalmetadata in $(NORMAL_METADATA_MAPS); do \ + for sequencemetadata in $(SEQUENCE_METADATA_MAPS); do \ for seqindex in $(SEQINDEX_MAPS); do \ for defchar in $(DEFAULT_CHAR); do \ for defint in $(DEFAULT_INT); do \ for defreal in $(DEFAULT_REAL); do \ for defword in $(DEFAULT_WORD); do \ - echo "Type checking: $$resolvescope $$objptrrep $$header $$seqindex $$defchar $$defint $$defreal $$defword"; \ + echo "Type checking: $$resolvescope $$objptr $$normalmetadata $$sequencemetadata $$seqindex $$defchar $$defint $$defreal $$defword"; \ echo "$(MLTON)" -disable-ann deadCode -disable-ann resolveScope -default-ann "\"resolveScope $$resolvescope\"" -stop tc -show-types true \ - -mlb-path-map "maps/$$objptrrep" \ - -mlb-path-map "maps/$$header" \ + -mlb-path-map "maps/$$objptr" \ + -mlb-path-map "maps/$$normalmetadata" \ + -mlb-path-map "maps/$$sequencemetadata" \ -mlb-path-map "maps/$$seqindex" \ -default-type "$$defchar" \ -default-type "$$defint" \ @@ -61,12 +63,13 @@ -default-type "$$defword" \ libs/all.mlb; \ "$(MLTON)" -disable-ann deadCode -disable-ann resolveScope -default-ann "resolveScope $$resolvescope" -stop tc -show-types true \ - -mlb-path-map "maps/$$objptrrep" \ - -mlb-path-map "maps/$$header" \ + -mlb-path-map "maps/$$objptr" \ + -mlb-path-map "maps/$$normalmetadata" \ + -mlb-path-map "maps/$$sequencemetadata" \ -mlb-path-map "maps/$$seqindex" \ -default-type "$$defchar" \ -default-type "$$defint" \ -default-type "$$defreal" \ -default-type "$$defword" \ libs/all.mlb; \ - done; done; done; done; done; done; done; done; + done; done; done; done; done; done; done; done; done; diff -Nru mlton-20130715/basis-library/maps/header-word32.map mlton-20210117+dfsg/basis-library/maps/header-word32.map --- mlton-20130715/basis-library/maps/header-word32.map 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/maps/header-word32.map 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -HEADER_WORD word32 diff -Nru mlton-20130715/basis-library/maps/header-word64.map mlton-20210117+dfsg/basis-library/maps/header-word64.map --- mlton-20130715/basis-library/maps/header-word64.map 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/maps/header-word64.map 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -HEADER_WORD word64 diff -Nru mlton-20130715/basis-library/maps/normal-metadata-size128.map mlton-20210117+dfsg/basis-library/maps/normal-metadata-size128.map --- mlton-20130715/basis-library/maps/normal-metadata-size128.map 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/maps/normal-metadata-size128.map 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +NORMAL_METADATA_SIZE size128 diff -Nru mlton-20130715/basis-library/maps/normal-metadata-size32.map mlton-20210117+dfsg/basis-library/maps/normal-metadata-size32.map --- mlton-20130715/basis-library/maps/normal-metadata-size32.map 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/maps/normal-metadata-size32.map 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +NORMAL_METADATA_SIZE size32 diff -Nru mlton-20130715/basis-library/maps/normal-metadata-size64.map mlton-20210117+dfsg/basis-library/maps/normal-metadata-size64.map --- mlton-20130715/basis-library/maps/normal-metadata-size64.map 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/maps/normal-metadata-size64.map 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +NORMAL_METADATA_SIZE size64 diff -Nru mlton-20130715/basis-library/maps/sequence-metadata-size128.map mlton-20210117+dfsg/basis-library/maps/sequence-metadata-size128.map --- mlton-20130715/basis-library/maps/sequence-metadata-size128.map 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/maps/sequence-metadata-size128.map 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +SEQUENCE_METADATA_SIZE size128 diff -Nru mlton-20130715/basis-library/maps/sequence-metadata-size192.map mlton-20210117+dfsg/basis-library/maps/sequence-metadata-size192.map --- mlton-20130715/basis-library/maps/sequence-metadata-size192.map 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/maps/sequence-metadata-size192.map 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +SEQUENCE_METADATA_SIZE size192 diff -Nru mlton-20130715/basis-library/maps/sequence-metadata-size256.map mlton-20210117+dfsg/basis-library/maps/sequence-metadata-size256.map --- mlton-20130715/basis-library/maps/sequence-metadata-size256.map 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/maps/sequence-metadata-size256.map 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +SEQUENCE_METADATA_SIZE size256 diff -Nru mlton-20130715/basis-library/maps/sequence-metadata-size96.map mlton-20210117+dfsg/basis-library/maps/sequence-metadata-size96.map --- mlton-20130715/basis-library/maps/sequence-metadata-size96.map 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/maps/sequence-metadata-size96.map 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +SEQUENCE_METADATA_SIZE size96 diff -Nru mlton-20130715/basis-library/mlton/array.sig mlton-20210117+dfsg/basis-library/mlton/array.sig --- mlton-20130715/basis-library/mlton/array.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/array.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/bin-io.sig mlton-20210117+dfsg/basis-library/mlton/bin-io.sig --- mlton-20130715/basis-library/mlton/bin-io.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/bin-io.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/call-stack.sig mlton-20210117+dfsg/basis-library/mlton/call-stack.sig --- mlton-20130715/basis-library/mlton/call-stack.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/call-stack.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/call-stack.sml mlton-20210117+dfsg/basis-library/mlton/call-stack.sml --- mlton-20130715/basis-library/mlton/call-stack.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/call-stack.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -18,8 +19,8 @@ then T (Array.array (0, 0wx0)) else let - val a = Array.arrayUninit (Word32.toInt (numStackFrames gcState)) - val () = callStack (gcState, a) + val a = Array.alloc (Word32.toInt (numStackFrames (gcState ()))) + val () = callStack (gcState (), a) in T a end @@ -29,26 +30,20 @@ if not keep then [] else - let - val skip = Array.length a - 1 - in - Array.foldri - (fn (i, frameIndex, ac) => - if i >= skip - then ac - else - let - val p = frameIndexSourceSeq (gcState, frameIndex) - val max = Int32.toInt (Pointer.getInt32 (p, 0)) - fun loop (j, ac) = - if j > max - then ac - else loop (j + 1, - CUtil.C_String.toString (sourceName (gcState, Pointer.getWord32 (p, j))) - :: ac) - in - loop (1, ac) - end) - [] a - end + Array.foldr + (fn (frameIndex, ac) => + let + val p = frameIndexSourceSeq (gcState (), frameIndex) + val max = Int32.toInt (Pointer.getInt32 (p, 0)) + fun loop (j, ac) = + if j > max + then ac + else loop (j + 1, + CUtil.C_String.toString + (sourceName (gcState (), Pointer.getWord32 (p, j))) + :: ac) + in + loop (1, ac) + end) + [] a end diff -Nru mlton-20130715/basis-library/mlton/cont.sig mlton-20210117+dfsg/basis-library/mlton/cont.sig --- mlton-20130715/basis-library/mlton/cont.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/cont.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/cont.sml mlton-20210117+dfsg/basis-library/mlton/cont.sml --- mlton-20130715/basis-library/mlton/cont.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/cont.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,7 +13,7 @@ structure Thread = struct open Primitive.MLton.Thread - val savedPre = fn () => savedPre Primitive.MLton.GCState.gcState + val savedPre = fn () => savedPre (Primitive.MLton.GCState.gcState ()) end fun die (s: string): 'a = diff -Nru mlton-20130715/basis-library/mlton/exit.sml mlton-20210117+dfsg/basis-library/mlton/exit.sml --- mlton-20130715/basis-library/mlton/exit.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/exit.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 2004-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -24,7 +25,8 @@ else Cleaner.addNew (Cleaner.atExit, f) fun halt (status: Status.t) = - Primitive.MLton.halt (Status.toRep status) + (Primitive.MLton.halt (Status.toRep status) + ; Primitive.MLton.bug "MLton.Exit.halt") fun exit (status: Status.t): 'a = if !exiting diff -Nru mlton-20130715/basis-library/mlton/exn.sig mlton-20210117+dfsg/basis-library/mlton/exn.sig --- mlton-20130715/basis-library/mlton/exn.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/exn.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2001-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/exn.sml mlton-20210117+dfsg/basis-library/mlton/exn.sml --- mlton-20130715/basis-library/mlton/exn.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/exn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2001-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/ffi.sig mlton-20210117+dfsg/basis-library/mlton/ffi.sig --- mlton-20130715/basis-library/mlton/ffi.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/ffi.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/ffi.sml mlton-20210117+dfsg/basis-library/mlton/ffi.sml --- mlton-20130715/basis-library/mlton/ffi.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/ffi.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/finalizable.sig mlton-20210117+dfsg/basis-library/mlton/finalizable.sig --- mlton-20130715/basis-library/mlton/finalizable.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/finalizable.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/finalizable.sml mlton-20210117+dfsg/basis-library/mlton/finalizable.sml --- mlton-20130715/basis-library/mlton/finalizable.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/finalizable.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/gc.sig mlton-20210117+dfsg/basis-library/mlton/gc.sig --- mlton-20130715/basis-library/mlton/gc.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/gc.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/gc.sml mlton-20210117+dfsg/basis-library/mlton/gc.sml --- mlton-20130715/basis-library/mlton/gc.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/gc.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -13,24 +14,24 @@ val gcState = Primitive.MLton.GCState.gcState val pack : unit -> unit = - fn () => pack gcState + fn () => pack (gcState ()) val unpack : unit -> unit = - fn () => unpack gcState + fn () => unpack (gcState ()) val setHashConsDuringGC : bool -> unit = - fn b => setHashConsDuringGC (gcState, b) + fn b => setHashConsDuringGC (gcState (), b) val setMessages : bool -> unit = - fn b => setMessages (gcState, b) + fn b => setMessages (gcState (), b) val setRusageMeasureGC : bool -> unit = - fn b => setRusageMeasureGC (gcState, b) + fn b => setRusageMeasureGC (gcState (), b) val setSummary : bool -> unit = - fn b => setSummary (gcState, b) + fn b => setSummary (gcState (), b) structure Statistics = struct local fun mk conv prim = - fn () => conv (prim gcState) + fn () => conv (prim (gcState ())) val mkSize = mk C_Size.toLargeInt val mkUIntmax = mk C_UIntmax.toLargeInt in diff -Nru mlton-20130715/basis-library/mlton/int-inf.sig mlton-20210117+dfsg/basis-library/mlton/int-inf.sig --- mlton-20130715/basis-library/mlton/int-inf.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/int-inf.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/io.fun mlton-20210117+dfsg/basis-library/mlton/io.fun --- mlton-20130715/basis-library/mlton/io.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/io.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -23,8 +24,8 @@ in flags [irusr, iwusr] end), name)) - end handle e as PosixError.SysErr (_, SOME s) => - if s = Posix.Error.exist + end handle e as PosixError.SysErr (_, s) => + if s = SOME Posix.Error.exist then loop () else raise e in diff -Nru mlton-20130715/basis-library/mlton/io.sig mlton-20210117+dfsg/basis-library/mlton/io.sig --- mlton-20130715/basis-library/mlton/io.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/io.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/itimer.sig mlton-20210117+dfsg/basis-library/mlton/itimer.sig --- mlton-20130715/basis-library/mlton/itimer.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/itimer.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/itimer.sml mlton-20210117+dfsg/basis-library/mlton/itimer.sml --- mlton-20130715/basis-library/mlton/itimer.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/itimer.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/mlton.sig mlton-20210117+dfsg/basis-library/mlton/mlton.sig --- mlton-20130715/basis-library/mlton/mlton.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/mlton.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2013 Matthew Fluet. +(* Copyright (C) 2013,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -29,7 +29,8 @@ (* val serialize: 'a -> Word8Vector.vector *) val share: 'a -> unit val shareAll: unit -> unit - val size: 'a -> int + val size: 'a -> IntInf.int + val sizeAll: unit -> IntInf.int structure Array: MLTON_ARRAY structure BinIO: MLTON_BIN_IO diff -Nru mlton-20130715/basis-library/mlton/mlton.sml mlton-20210117+dfsg/basis-library/mlton/mlton.sml --- mlton-20130715/basis-library/mlton/mlton.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/mlton.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2010,2013 Matthew Fluet. +(* Copyright (C) 2010,2013,2016-2017,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -28,12 +28,10 @@ ; GC.collect ()) fun size x = - let - val refOverhead = - Int.div (HeaderWord.wordSize + ObjptrWord.wordSize, 8) - in - C_Size.toInt (Primitive.MLton.size (ref x)) - refOverhead - end + C_Size.toLargeInt (Primitive.MLton.size x) + +fun sizeAll () = + C_Size.toLargeInt (Primitive.MLton.sizeAll (Primitive.MLton.GCState.gcState ())) (* fun cleanAtExit () = let open Cleaner in clean atExit end *) diff -Nru mlton-20130715/basis-library/mlton/platform.sig mlton-20210117+dfsg/basis-library/mlton/platform.sig --- mlton-20130715/basis-library/mlton/platform.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/platform.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2009 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -10,7 +10,7 @@ structure Arch: sig datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k | - MIPS | PowerPC | PowerPC64 | S390 | Sparc | X86 + MIPS | PowerPC | PowerPC64 | RISCV | S390 | Sparc | X86 val fromString: string -> t option val host: t diff -Nru mlton-20130715/basis-library/mlton/platform.sml mlton-20210117+dfsg/basis-library/mlton/platform.sml --- mlton-20130715/basis-library/mlton/platform.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/platform.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2009 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -27,6 +27,7 @@ (MIPS, "MIPS"), (PowerPC, "PowerPC"), (PowerPC64, "PowerPC64"), + (RISCV, "RISCV"), (S390, "S390"), (Sparc, "Sparc"), (X86, "X86")] diff -Nru mlton-20130715/basis-library/mlton/pointer.sig mlton-20210117+dfsg/basis-library/mlton/pointer.sig --- mlton-20130715/basis-library/mlton/pointer.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/pointer.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/pointer.sml mlton-20210117+dfsg/basis-library/mlton/pointer.sml --- mlton-20130715/basis-library/mlton/pointer.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/pointer.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2003-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/proc-env.sig mlton-20210117+dfsg/basis-library/mlton/proc-env.sig --- mlton-20130715/basis-library/mlton/proc-env.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/proc-env.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/proc-env.sml mlton-20210117+dfsg/basis-library/mlton/proc-env.sml --- mlton-20130715/basis-library/mlton/proc-env.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/proc-env.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/process.sig mlton-20210117+dfsg/basis-library/mlton/process.sig --- mlton-20130715/basis-library/mlton/process.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/process.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/process.sml mlton-20210117+dfsg/basis-library/mlton/process.sml --- mlton-20130715/basis-library/mlton/process.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/process.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2002-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/profile.sig mlton-20210117+dfsg/basis-library/mlton/profile.sig --- mlton-20130715/basis-library/mlton/profile.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/profile.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/profile.sml mlton-20210117+dfsg/basis-library/mlton/profile.sml --- mlton-20130715/basis-library/mlton/profile.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/profile.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2003-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 2003-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -45,7 +46,7 @@ if equals (d, d') then ac else d' :: ac) [] (!all) - ; P.Data.free (gcState, raw) + ; P.Data.free (gcState (), raw) ; isFreed := true) fun make (raw: P.Data.t): t = @@ -57,7 +58,7 @@ let val array = if isOn - then P.Data.malloc gcState + then P.Data.malloc (gcState ()) else P.Data.dummy val d = make array val _ = all := d :: !all @@ -71,7 +72,7 @@ else if !isFreed then raise Fail "write of freed profile data" else - P.Data.write (gcState, raw, + P.Data.write (gcState (), raw, Primitive.NullString8.fromString (String.nullTerm file)) end @@ -92,7 +93,7 @@ val _ = ic := false val _ = isCurrent := true val _ = r := d - val _ = P.setCurrent (gcState, raw) + val _ = P.setCurrent (gcState (), raw) in () end @@ -105,7 +106,7 @@ DynamicWind.wind (f, fn () => setCurrent old) end -fun init () = setCurrent (Data.make (P.getCurrent gcState)) +fun init () = setCurrent (Data.make (P.getCurrent (gcState ()))) val _ = if not isOn @@ -115,9 +116,9 @@ val _ = Cleaner.addNew (Cleaner.atExit, fn () => - (P.done gcState + (P.done (gcState ()) ; Data.write (current (), "mlmon.out") - ; List.app (fn d => P.Data.free (gcState, Data.raw d)) + ; List.app (fn d => P.Data.free (gcState (), Data.raw d)) (!Data.all))) val _ = Cleaner.addNew diff -Nru mlton-20130715/basis-library/mlton/ptrace.sig mlton-20210117+dfsg/basis-library/mlton/ptrace.sig --- mlton-20130715/basis-library/mlton/ptrace.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/ptrace.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/ptrace.sml mlton-20210117+dfsg/basis-library/mlton/ptrace.sml --- mlton-20130715/basis-library/mlton/ptrace.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/ptrace.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/random.sig mlton-20210117+dfsg/basis-library/mlton/random.sig --- mlton-20130715/basis-library/mlton/random.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/random.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/random.sml mlton-20210117+dfsg/basis-library/mlton/random.sml --- mlton-20130715/basis-library/mlton/random.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/random.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/real.sig mlton-20210117+dfsg/basis-library/mlton/real.sig --- mlton-20130715/basis-library/mlton/real.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/real.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/rlimit.sig mlton-20210117+dfsg/basis-library/mlton/rlimit.sig --- mlton-20130715/basis-library/mlton/rlimit.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/rlimit.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/rlimit.sml mlton-20210117+dfsg/basis-library/mlton/rlimit.sml --- mlton-20130715/basis-library/mlton/rlimit.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/rlimit.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,15 +1,21 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) structure MLtonRlimit: MLTON_RLIMIT = struct open PrimitiveFFI.MLton.Rlimit - structure RLim = C_RLim + structure RLim = + struct + type t = C_RLim.t + val castFromSysWord = C_RLim.castFromSysWord + val castToSysWord = C_RLim.castToSysWord + end type t = C_Int.t val get = diff -Nru mlton-20130715/basis-library/mlton/rusage.sig mlton-20210117+dfsg/basis-library/mlton/rusage.sig --- mlton-20130715/basis-library/mlton/rusage.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/rusage.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/rusage.sml mlton-20210117+dfsg/basis-library/mlton/rusage.sml --- mlton-20130715/basis-library/mlton/rusage.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/rusage.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,16 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) structure MLtonRusage: MLTON_RUSAGE = struct structure Prim = PrimitiveFFI.MLton.Rusage + structure GCState = Primitive.MLton.GCState type t = {utime: Time.time, stime: Time.time} @@ -36,7 +38,7 @@ in fn () => let - val () = Prim.getrusage () + val () = Prim.getrusage (GCState.gcState ()) open Prim in {children = collect (children_utime_sec, children_utime_usec, diff -Nru mlton-20130715/basis-library/mlton/signal.sig mlton-20210117+dfsg/basis-library/mlton/signal.sig --- mlton-20130715/basis-library/mlton/signal.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/signal.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/signal.sml mlton-20210117+dfsg/basis-library/mlton/signal.sml --- mlton-20130715/basis-library/mlton/signal.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/signal.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015,2019 Matthew Fluet. + * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -11,6 +12,7 @@ open Posix.Signal structure Prim = PrimitiveFFI.Posix.Signal +structure GCState = Primitive.MLton.GCState structure Error = PosixError structure SysCall = Error.SysCall val restart = SysCall.restartFlag @@ -26,79 +28,59 @@ raiseSys inval end -val validSignals = - Array.tabulate - (C_Int.toInt Prim.NSIG, fn i => - SysCall.syscallErr - ({clear = false, restart = false, errVal = C_Int.fromInt ~1}, fn () => - {return = Prim.sigismember (repFromInt i), - post = fn _ => true, - handlers = [(Error.inval, fn () => false)]})) - structure Mask = struct - datatype t = - AllBut of signal list - | Some of signal list + type pre_sig_set = Word8.word array + type sig_set = Word8.word vector + fun newSigSet (): (pre_sig_set * (unit -> sig_set)) = + let + val sslen = C_Size.toInt Prim.sigSetLen + val ss = Array.array (sslen, 0wx0: Word8.word) + in + (ss, fn () => Array.vector ss) + end - val allBut = AllBut - val some = Some + type t = sig_set + fun allBut sigs = + let + val (ss, finish) = newSigSet () + val () = SysCall.simple (fn () => Prim.sigfillset ss) + val () = List.app (fn s => SysCall.simple + (fn () => Prim.sigdelset (ss, toRep s))) + sigs + in + finish () + end val all = allBut [] + fun some sigs = + let + val (ss, finish) = newSigSet () + val () = SysCall.simple (fn () => Prim.sigemptyset ss) + val () = List.app (fn s => SysCall.simple + (fn () => Prim.sigaddset (ss, toRep s))) + sigs + in + finish () + end val none = some [] - fun read () = - Some - (Array.foldri - (fn (i, b, sigs) => - if b - then let - val s = fromInt i - val s' = repFromInt i - val res = - SysCall.simpleResult - (fn () => Prim.sigismember s') - in - if res = C_Int.fromInt 1 - then s::sigs - else sigs - end - else sigs) - [] - validSignals) - - fun write m = - case m of - AllBut signals => - (SysCall.simple Prim.sigfillset - ; List.app (fn s => SysCall.simple - (fn () => Prim.sigdelset (toRep s))) - signals) - | Some signals => - (SysCall.simple Prim.sigemptyset - ; List.app (fn s => SysCall.simple - (fn () => Prim.sigaddset (toRep s))) - signals) - - local - fun make (how: how) (m: t) = - (write m; SysCall.simpleRestart (fn () => Prim.sigprocmask how)) - in - val block = make Prim.SIG_BLOCK - val unblock = make Prim.SIG_UNBLOCK - val setBlocked = make Prim.SIG_SETMASK - fun getBlocked () = (make Prim.SIG_BLOCK none; read ()) - end + fun isMember (ss, s) = + SysCall.simpleResult (fn () => Prim.sigismember (ss, toRep s)) <> C_Int.zero local - fun member (sigs, s) = List.exists (fn s' => s = s') sigs + fun make (how: how) (ss: t) = + let + val (oss, finish) = newSigSet () + val () = SysCall.simpleRestart (fn () => Prim.sigprocmask (how, ss, oss)) + in + finish () + end in - fun isMember (mask, s) = - if Array.sub (validSignals, toInt s) - then case mask of - AllBut sigs => not (member (sigs, s)) - | Some sigs => member (sigs, s) - else raiseInval () + val block = ignore o make Prim.SIG_BLOCK + val unblock = ignore o make Prim.SIG_UNBLOCK + val setBlocked = ignore o make Prim.SIG_SETMASK + fun getBlocked () = make Prim.SIG_BLOCK none end end @@ -190,7 +172,7 @@ val () = Mask.block (handled ()) val fs = case !gcHandler of - Handler f => if Prim.isPendingGC () <> C_Int.zero + Handler f => if Prim.isPendingGC (GCState.gcState ()) <> C_Int.zero then [f] else [] | _ => [] @@ -199,11 +181,11 @@ (fn (s, h, fs) => case h of Handler f => - if Prim.isPending (repFromInt s) <> C_Int.zero + if Prim.isPending (GCState.gcState (), repFromInt s) <> C_Int.zero then f::fs else fs | _ => fs) fs handlers - val () = Prim.resetPending () + val () = Prim.resetPending (GCState.gcState ()) val () = Mask.setBlocked mask in List.foldl (fn (f, t) => f t) t fs @@ -222,24 +204,23 @@ | (Default, Default) => () | (_, Default) => (setHandler (s, Default) - ; SysCall.simpleRestart (fn () => Prim.default (toRep s))) + ; SysCall.simpleRestart (fn () => Prim.default (GCState.gcState (), toRep s))) | (Handler _, Handler _) => setHandler (s, h) | (_, Handler _) => (setHandler (s, h) - ; SysCall.simpleRestart (fn () => Prim.handlee (toRep s))) + ; SysCall.simpleRestart (fn () => Prim.handlee (GCState.gcState (), toRep s))) | (Ignore, Ignore) => () | (_, Ignore) => (setHandler (s, Ignore) - ; SysCall.simpleRestart (fn () => Prim.ignore (toRep s))) + ; SysCall.simpleRestart (fn () => Prim.ignore (GCState.gcState (), toRep s))) fun suspend m = - (Mask.write m - ; Prim.sigsuspend () + (Prim.sigsuspend m ; MLtonThread.switchToSignalHandler ()) fun handleGC f = - (Prim.handleGC () + (Prim.handleGC (GCState.gcState ()) ; gcHandler := Handler.simple f) end diff -Nru mlton-20130715/basis-library/mlton/syslog.sig mlton-20210117+dfsg/basis-library/mlton/syslog.sig --- mlton-20130715/basis-library/mlton/syslog.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/syslog.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/syslog.sml mlton-20210117+dfsg/basis-library/mlton/syslog.sml --- mlton-20130715/basis-library/mlton/syslog.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/syslog.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/text-io.sig mlton-20210117+dfsg/basis-library/mlton/text-io.sig --- mlton-20130715/basis-library/mlton/text-io.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/text-io.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/thread.sig mlton-20210117+dfsg/basis-library/mlton/thread.sig --- mlton-20130715/basis-library/mlton/thread.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/thread.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/thread.sml mlton-20210117+dfsg/basis-library/mlton/thread.sml --- mlton-20130715/basis-library/mlton/thread.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/thread.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2014,2019 Matthew Fluet. + * Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -77,7 +78,7 @@ val () = Prim.copyCurrent () in case !func of - NONE => Prim.savedPre gcState + NONE => Prim.savedPre (gcState ()) | SOME x => (* This branch never returns. *) let @@ -116,7 +117,7 @@ val r : (unit -> 'a) ref = ref (fn () => die "Thread.atomicSwitch didn't set r.\n") val t: 'a thread ref = - ref (Paused (fn x => r := x, Prim.current gcState)) + ref (Paused (fn x => r := x, Prim.current (gcState ()))) fun fail e = (t := Dead ; switching := false ; atomicEnd () @@ -179,9 +180,9 @@ let (* Atomic 1 *) val _ = state := InHandler - val t = f (fromPrimitive (Prim.saved gcState)) + val t = f (fromPrimitive (Prim.saved (gcState ()))) val _ = state := Normal - val _ = Prim.finishSignalHandler gcState + val _ = Prim.finishSignalHandler (gcState ()) val _ = atomicSwitch (fn (T r) => @@ -201,7 +202,7 @@ (new (fn () => loop () handle e => MLtonExn.topLevelHandler e)) val _ = signalHandler := SOME p in - Prim.setSignalHandler (gcState, p) + Prim.setSignalHandler (gcState (), p) end fun switchToSignalHandler () = @@ -209,7 +210,7 @@ (* Atomic 0 *) val () = atomicBegin () (* Atomic 1 *) - val () = Prim.startSignalHandler gcState (* implicit atomicBegin () *) + val () = Prim.startSignalHandler (gcState ()) (* implicit atomicBegin () *) (* Atomic 2 *) in case !signalHandler of @@ -224,40 +225,59 @@ in val register: int * (MLtonPointer.t -> unit) -> unit = let - val exports = - Array.array (Int32.toInt (Primitive.MLton.FFI.numExports), + val exports = + Array.array (Int32.toInt (Primitive.MLton.FFI.numExports), fn _ => raise Fail "undefined export") - fun loop (): unit = + val worker : (Prim.thread * Prim.thread option ref) option ref = ref NONE + fun mkWorker (): Prim.thread * Prim.thread option ref = let - (* Atomic 2 *) - val t = Prim.saved gcState - fun doit () = + val thisWorker : (Prim.thread * Prim.thread option ref) option ref = ref NONE + val savedRef : Prim.thread option ref = ref NONE + fun workerLoop () = let (* Atomic 1 *) - val p = Primitive.MLton.FFI.getOpArgsResPtr () + val p = Primitive.MLton.FFI.getOpArgsResPtr (gcState ()) val _ = atomicEnd () (* Atomic 0 *) val i = MLtonPointer.getInt32 (MLtonPointer.getPointer (p, 0), 0) val _ = (Array.sub (exports, Int32.toInt i) p) - handle e => - (TextIO.output + handle e => + (TextIO.output (TextIO.stdErr, "Call from C to SML raised exception.\n") ; MLtonExn.topLevelHandler e) (* Atomic 0 *) val _ = atomicBegin () (* Atomic 1 *) - val _ = Prim.setSaved (gcState, t) + val _ = worker := !thisWorker + val _ = Prim.setSaved (gcState (), valOf (!savedRef)) + val _ = savedRef := NONE val _ = Prim.returnToC () (* implicit atomicEnd() *) in - () + workerLoop () end - val _ = Prim.switchTo (toPrimitive (new doit)) (* implicit atomicEnd() *) + val workerThread = toPrimitive (new workerLoop) + val _ = thisWorker := SOME (workerThread, savedRef) in - loop () + (workerThread, savedRef) + end + fun handlerLoop (): unit = + let + (* Atomic 2 *) + val saved = Prim.saved (gcState ()) + val (workerThread, savedRef) = + case !worker of + NONE => mkWorker () + | SOME (workerThread, savedRef) => + (worker := NONE + ; (workerThread, savedRef)) + val _ = savedRef := SOME saved + val _ = Prim.switchTo (workerThread) (* implicit atomicEnd() *) + in + handlerLoop () end - val p = toPrimitive (new (fn () => loop ())) - val _ = Prim.setCallFromCHandler (gcState, p) + val handlerThread = toPrimitive (new handlerLoop) + val _ = Prim.setCallFromCHandler (gcState (), handlerThread) in fn (i, f) => Array.update (exports, i, f) end diff -Nru mlton-20130715/basis-library/mlton/vector.sig mlton-20210117+dfsg/basis-library/mlton/vector.sig --- mlton-20130715/basis-library/mlton/vector.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/vector.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/weak.sig mlton-20210117+dfsg/basis-library/mlton/weak.sig --- mlton-20130715/basis-library/mlton/weak.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/weak.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/weak.sml mlton-20210117+dfsg/basis-library/mlton/weak.sml --- mlton-20130715/basis-library/mlton/weak.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/weak.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/word.sig mlton-20210117+dfsg/basis-library/mlton/word.sig --- mlton-20130715/basis-library/mlton/word.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/word.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/world.sig mlton-20210117+dfsg/basis-library/mlton/world.sig --- mlton-20130715/basis-library/mlton/world.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/world.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/mlton/world.sml mlton-20210117+dfsg/basis-library/mlton/world.sml --- mlton-20130715/basis-library/mlton/world.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton/world.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -26,11 +27,11 @@ SysCall.simple' ({errVal = false}, fn () => (Prim.save (NullString.nullTerm file) - ; Prim.getSaveStatus (gcState))) + ; Prim.getSaveStatus (gcState ()))) in - if Prim.getAmOriginal gcState + if Prim.getAmOriginal (gcState ()) then Original - else (Prim.setAmOriginal (gcState, true) + else (Prim.setAmOriginal (gcState (), true) ; Cleaner.clean Cleaner.atLoadWorld ; Clone) end diff -Nru mlton-20130715/basis-library/mlton.mlb mlton-20210117+dfsg/basis-library/mlton.mlb --- mlton-20130715/basis-library/mlton.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/mlton.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,14 +2,15 @@ * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local diff -Nru mlton-20130715/basis-library/net/generic-sock.sml mlton-20210117+dfsg/basis-library/net/generic-sock.sml --- mlton-20130715/basis-library/net/generic-sock.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/net/generic-sock.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/net/inet-sock.sml mlton-20210117+dfsg/basis-library/net/inet-sock.sml --- mlton-20130715/basis-library/net/inet-sock.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/net/inet-sock.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/net/net-host-db.sml mlton-20210117+dfsg/basis-library/net/net-host-db.sml --- mlton-20130715/basis-library/net/net-host-db.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/net/net-host-db.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/net/net-prot-db.sml mlton-20210117+dfsg/basis-library/net/net-prot-db.sml --- mlton-20130715/basis-library/net/net-prot-db.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/net/net-prot-db.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/net/net-serv-db.sml mlton-20210117+dfsg/basis-library/net/net-serv-db.sml --- mlton-20130715/basis-library/net/net-serv-db.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/net/net-serv-db.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/net/net.sig mlton-20210117+dfsg/basis-library/net/net.sig --- mlton-20130715/basis-library/net/net.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/net/net.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/net/net.sml mlton-20210117+dfsg/basis-library/net/net.sml --- mlton-20130715/basis-library/net/net.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/net/net.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2002-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/net/socket.sml mlton-20210117+dfsg/basis-library/net/socket.sml --- mlton-20130715/basis-library/net/socket.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/net/socket.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2012,2013 Matthew Fluet. +(* Copyright (C) 2012,2013,2015,2017 Matthew Fluet. * Copyright (C) 2002-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -389,10 +389,10 @@ 0x0)) local - fun make (base, primSend, primSendTo) = + fun make (toPoly, base, primSend, primSendTo) = let val base = fn sl => let val (buf, i, sz) = base sl - in (buf, i, sz) + in (toPoly buf, i, sz) end fun send' (s, sl, out_flags) = let @@ -450,10 +450,10 @@ in val (sendArr, sendArr', sendArrNB, sendArrNB', sendArrTo, sendArrTo', sendArrToNB, sendArrToNB') = - make (Word8ArraySlice.base, Prim.sendArr, Prim.sendArrTo) + make (Word8Array.toPoly, Word8ArraySlice.base, Prim.sendArr, Prim.sendArrTo) val (sendVec, sendVec', sendVecNB, sendVecNB', sendVecTo, sendVecTo', sendVecToNB, sendVecToNB') = - make (Word8VectorSlice.base, Prim.sendVec, Prim.sendVecTo) + make (Word8Vector.toPoly, Word8VectorSlice.base, Prim.sendVec, Prim.sendVecTo) end type in_flags = {peek: bool, oob: bool} @@ -482,7 +482,7 @@ fun recvVec' (sock, n, in_flags) = let - val a = Word8Array.arrayUninit n + val a = Word8Array.alloc n val bytesRead = recvArr' (sock, Word8ArraySlice.full a, in_flags) in @@ -509,7 +509,7 @@ fun recvVecFrom' (sock, n, in_flags) = let - val a = Word8Array.arrayUninit n + val a = Word8Array.alloc n val (bytesRead, sock_addr) = recvArrFrom' (sock, Word8ArraySlice.full a, in_flags) in @@ -536,7 +536,7 @@ fun recvVecNB' (s, n, in_flags) = let - val a = Word8Array.arrayUninit n + val a = Word8Array.alloc n in nonBlock (C_SSize.castFromFixedInt ~1, @@ -565,7 +565,7 @@ fun recvVecFromNB' (s, n, in_flags) = let - val a = Word8Array.arrayUninit n + val a = Word8Array.alloc n val (sa, salen, finish) = newSockAddr () in nonBlock diff -Nru mlton-20130715/basis-library/net/unix-sock.sml mlton-20210117+dfsg/basis-library/net/unix-sock.sml --- mlton-20130715/basis-library/net/unix-sock.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/net/unix-sock.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/overloads.mlb mlton-20210117+dfsg/basis-library/overloads.mlb --- mlton-20130715/basis-library/overloads.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/overloads.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,15 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local diff -Nru mlton-20130715/basis-library/pervasive-exns.mlb mlton-20210117+dfsg/basis-library/pervasive-exns.mlb --- mlton-20130715/basis-library/pervasive-exns.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/pervasive-exns.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,15 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local diff -Nru mlton-20130715/basis-library/pervasive.mlb mlton-20210117+dfsg/basis-library/pervasive.mlb --- mlton-20130715/basis-library/pervasive.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/pervasive.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/pervasive-types.mlb mlton-20210117+dfsg/basis-library/pervasive-types.mlb --- mlton-20130715/basis-library/pervasive-types.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/pervasive-types.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,15 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local diff -Nru mlton-20130715/basis-library/pervasive-vals.mlb mlton-20210117+dfsg/basis-library/pervasive-vals.mlb --- mlton-20130715/basis-library/pervasive-vals.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/pervasive-vals.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,20 +1,24 @@ -(* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local libs/basis-2002/basis-2002.mlb basis-2002.mlb - libs/basis-2002/top-level/basis-vals.sig + ann "allowSpecifySpecialIds true" in + libs/basis-2002/top-level/basis-vals.sig + end in libs/basis-2002/top-level/pervasive-vals.sml end diff -Nru mlton-20130715/basis-library/platform/cygwin.sml mlton-20210117+dfsg/basis-library/platform/cygwin.sml --- mlton-20130715/basis-library/platform/cygwin.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/platform/cygwin.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2004-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/platform/mingw.sml mlton-20210117+dfsg/basis-library/platform/mingw.sml --- mlton-20130715/basis-library/platform/mingw.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/platform/mingw.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -11,7 +12,7 @@ let fun lp bufSz = let - val buf = CharArray.arrayUninit (C_Size.toInt bufSz) + val buf = CharArray.alloc (C_Size.toInt bufSz) val reqSz = PrimitiveFFI.MinGW.getTempPath (bufSz, buf) in if 0w0 = reqSz diff -Nru mlton-20130715/basis-library/posix/error.sml mlton-20210117+dfsg/basis-library/posix/error.sml --- mlton-20130715/basis-library/posix/error.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/error.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/posix/file-sys.sml mlton-20210117+dfsg/basis-library/posix/file-sys.sml --- mlton-20130715/basis-library/posix/file-sys.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/file-sys.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -115,7 +116,7 @@ local val size: int ref = ref 1 - fun make () = Array.arrayUninit (!size) + fun make () = Array.alloc (!size) val buffer = ref (make ()) fun extractToChar (a, c) = diff -Nru mlton-20130715/basis-library/posix/flags.sig mlton-20210117+dfsg/basis-library/posix/flags.sig --- mlton-20130715/basis-library/posix/flags.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/flags.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/posix/flags.sml mlton-20210117+dfsg/basis-library/posix/flags.sml --- mlton-20130715/basis-library/posix/flags.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/flags.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/posix/io.sml mlton-20210117+dfsg/basis-library/posix/io.sml --- mlton-20130715/basis-library/posix/io.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/io.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -248,7 +249,7 @@ end fun readVec (fd, n) = let - val buf = Array.arrayUninit n + val buf = Array.alloc n val bytesRead = SysCall.simpleResultRestart' ({errVal = C_SSize.castFromFixedInt ~1}, fn () => @@ -311,8 +312,8 @@ (ensureOpen (); if !blocking then blockingOff () else (); (SOME (f x) - handle (e as PosixError.SysErr (_, SOME cause)) => - if cause = PosixError.again then NONE else raise e)) + handle (e as PosixError.SysErr (_, cause)) => + if cause = SOME PosixError.again then NONE else raise e)) val close = fn () => if !closed then () else (closed := true; close fd) val avail = @@ -368,8 +369,8 @@ (ensureOpen (); ensureBlock block; put (fd, arg)) fun handleBlock writer arg = SOME(writer arg) - handle (e as PosixError.SysErr (_, SOME cause)) => - if cause = PosixError.again then NONE else raise e + handle (e as PosixError.SysErr (_, cause)) => + if cause = SOME PosixError.again then NONE else raise e val close = fn () => if !closed then () else (closed := true; close fd) val () = setMode fd diff -Nru mlton-20130715/basis-library/posix/posix.sml mlton-20210117+dfsg/basis-library/posix/posix.sml --- mlton-20130715/basis-library/posix/posix.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/posix.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/posix/pre-posix.sml mlton-20210117+dfsg/basis-library/posix/pre-posix.sml --- mlton-20130715/basis-library/posix/pre-posix.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/pre-posix.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/posix/proc-env.sml mlton-20210117+dfsg/basis-library/posix/proc-env.sml --- mlton-20130715/basis-library/posix/proc-env.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/proc-env.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2011 Matthew Fluet. +(* Copyright (C) 2011,2017 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -57,7 +57,7 @@ (fn () => let val n = Prim.getgroupsN () - val a: C_GId.t array = Array.arrayUninit (C_Int.toInt n) + val a: C_GId.t array = Array.alloc (C_Int.toInt n) in (Prim.getgroups (n, a), fn n => (GId.listFromRep o ArraySlice.toList) diff -Nru mlton-20130715/basis-library/posix/process.sml mlton-20210117+dfsg/basis-library/posix/process.sml --- mlton-20130715/basis-library/posix/process.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/process.sml 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/posix/signal.sml mlton-20210117+dfsg/basis-library/posix/signal.sml --- mlton-20130715/basis-library/posix/signal.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/signal.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/posix/stub-mingw.sml mlton-20210117+dfsg/basis-library/posix/stub-mingw.sml --- mlton-20130715/basis-library/posix/stub-mingw.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/stub-mingw.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/posix/sys-db.sml mlton-20210117+dfsg/basis-library/posix/sys-db.sml --- mlton-20130715/basis-library/posix/sys-db.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/sys-db.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/posix/tty.sml mlton-20210117+dfsg/basis-library/posix/tty.sml --- mlton-20130715/basis-library/posix/tty.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/posix/tty.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/primitive/basis-ffi.sml mlton-20210117+dfsg/basis-library/primitive/basis-ffi.sml --- mlton-20130715/basis-library/primitive/basis-ffi.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/basis-ffi.sml 2021-12-28 17:19:36.000000000 +0000 @@ -104,7 +104,7 @@ val gc_stime_usec = _import "MLton_Rusage_gc_stime_usec" private : unit -> C_SUSeconds.t; val gc_utime_sec = _import "MLton_Rusage_gc_utime_sec" private : unit -> C_Time.t; val gc_utime_usec = _import "MLton_Rusage_gc_utime_usec" private : unit -> C_SUSeconds.t; -val getrusage = _import "MLton_Rusage_getrusage" private : unit -> unit; +val getrusage = _import "MLton_Rusage_getrusage" private : GCState.t -> unit; val self_stime_sec = _import "MLton_Rusage_self_stime_sec" private : unit -> C_Time.t; val self_stime_usec = _import "MLton_Rusage_self_stime_usec" private : unit -> C_SUSeconds.t; val self_utime_sec = _import "MLton_Rusage_self_utime_sec" private : unit -> C_Time.t; @@ -690,42 +690,43 @@ end structure Signal = struct -val default = _import "Posix_Signal_default" private : C_Signal.t -> (C_Int.t) C_Errno.t; -val handlee = _import "Posix_Signal_handlee" private : C_Signal.t -> (C_Int.t) C_Errno.t; -val handleGC = _import "Posix_Signal_handleGC" private : unit -> unit; -val ignore = _import "Posix_Signal_ignore" private : C_Signal.t -> (C_Int.t) C_Errno.t; +val default = _import "Posix_Signal_default" private : GCState.t * C_Signal.t -> (C_Int.t) C_Errno.t; +val handlee = _import "Posix_Signal_handlee" private : GCState.t * C_Signal.t -> (C_Int.t) C_Errno.t; +val handleGC = _import "Posix_Signal_handleGC" private : GCState.t -> unit; +val ignore = _import "Posix_Signal_ignore" private : GCState.t * C_Signal.t -> (C_Int.t) C_Errno.t; val isDefault = _import "Posix_Signal_isDefault" private : C_Signal.t * (C_Int.t) ref -> (C_Int.t) C_Errno.t; val isIgnore = _import "Posix_Signal_isIgnore" private : C_Signal.t * (C_Int.t) ref -> (C_Int.t) C_Errno.t; -val isPending = _import "Posix_Signal_isPending" private : C_Signal.t -> C_Int.t; -val isPendingGC = _import "Posix_Signal_isPendingGC" private : unit -> C_Int.t; +val isPending = _import "Posix_Signal_isPending" private : GCState.t * C_Signal.t -> C_Int.t; +val isPendingGC = _import "Posix_Signal_isPendingGC" private : GCState.t -> C_Int.t; val NSIG = _const "Posix_Signal_NSIG" : C_Int.t; -val resetPending = _import "Posix_Signal_resetPending" private : unit -> unit; +val resetPending = _import "Posix_Signal_resetPending" private : GCState.t -> unit; val SIG_BLOCK = _const "Posix_Signal_SIG_BLOCK" : C_Int.t; val SIG_SETMASK = _const "Posix_Signal_SIG_SETMASK" : C_Int.t; val SIG_UNBLOCK = _const "Posix_Signal_SIG_UNBLOCK" : C_Int.t; val SIGABRT = _const "Posix_Signal_SIGABRT" : C_Signal.t; -val sigaddset = _import "Posix_Signal_sigaddset" private : C_Signal.t -> (C_Int.t) C_Errno.t; +val sigaddset = _import "Posix_Signal_sigaddset" private : (Word8.t) array * C_Signal.t -> (C_Int.t) C_Errno.t; val SIGALRM = _const "Posix_Signal_SIGALRM" : C_Signal.t; val SIGBUS = _const "Posix_Signal_SIGBUS" : C_Signal.t; val SIGCHLD = _const "Posix_Signal_SIGCHLD" : C_Signal.t; val SIGCONT = _const "Posix_Signal_SIGCONT" : C_Signal.t; -val sigdelset = _import "Posix_Signal_sigdelset" private : C_Signal.t -> (C_Int.t) C_Errno.t; -val sigemptyset = _import "Posix_Signal_sigemptyset" private : unit -> (C_Int.t) C_Errno.t; -val sigfillset = _import "Posix_Signal_sigfillset" private : unit -> (C_Int.t) C_Errno.t; +val sigdelset = _import "Posix_Signal_sigdelset" private : (Word8.t) array * C_Signal.t -> (C_Int.t) C_Errno.t; +val sigemptyset = _import "Posix_Signal_sigemptyset" private : (Word8.t) array -> (C_Int.t) C_Errno.t; +val sigfillset = _import "Posix_Signal_sigfillset" private : (Word8.t) array -> (C_Int.t) C_Errno.t; val SIGFPE = _const "Posix_Signal_SIGFPE" : C_Signal.t; val SIGHUP = _const "Posix_Signal_SIGHUP" : C_Signal.t; val SIGILL = _const "Posix_Signal_SIGILL" : C_Signal.t; val SIGINT = _const "Posix_Signal_SIGINT" : C_Signal.t; -val sigismember = _import "Posix_Signal_sigismember" private : C_Signal.t -> (C_Int.t) C_Errno.t; +val sigismember = _import "Posix_Signal_sigismember" private : (Word8.t) vector * C_Signal.t -> (C_Int.t) C_Errno.t; val SIGKILL = _const "Posix_Signal_SIGKILL" : C_Signal.t; val SIGPIPE = _const "Posix_Signal_SIGPIPE" : C_Signal.t; val SIGPOLL = _const "Posix_Signal_SIGPOLL" : C_Signal.t; -val sigprocmask = _import "Posix_Signal_sigprocmask" private : C_Int.t -> (C_Int.t) C_Errno.t; +val sigprocmask = _import "Posix_Signal_sigprocmask" private : C_Int.t * (Word8.t) vector * (Word8.t) array -> (C_Int.t) C_Errno.t; val SIGPROF = _const "Posix_Signal_SIGPROF" : C_Signal.t; val SIGQUIT = _const "Posix_Signal_SIGQUIT" : C_Signal.t; val SIGSEGV = _const "Posix_Signal_SIGSEGV" : C_Signal.t; +val sigSetLen = _const "Posix_Signal_sigSetLen" : C_Size.t; val SIGSTOP = _const "Posix_Signal_SIGSTOP" : C_Signal.t; -val sigsuspend = _import "Posix_Signal_sigsuspend" private : unit -> unit; +val sigsuspend = _import "Posix_Signal_sigsuspend" private : (Word8.t) vector -> unit; val SIGSYS = _const "Posix_Signal_SIGSYS" : C_Signal.t; val SIGTERM = _const "Posix_Signal_SIGTERM" : C_Signal.t; val SIGTRAP = _const "Posix_Signal_SIGTRAP" : C_Signal.t; @@ -908,118 +909,114 @@ structure Real32 = struct type t = Real32.t -val abs = _import "Real32_abs" private : Real32.t -> Real32.t; -val add = _import "Real32_add" private : Real32.t * Real32.t -> Real32.t; -val castToWord32 = _import "Real32_castToWord32" private : Real32.t -> Word32.t; -val div = _import "Real32_div" private : Real32.t * Real32.t -> Real32.t; -val equal = _import "Real32_equal" private : Real32.t * Real32.t -> Bool.t; -val fetch = _import "Real32_fetch" private : (Real32.t) ref -> Real32.t; -val frexp = _import "Real32_frexp" private : Real32.t * (C_Int.t) ref -> Real32.t; +val abs = _import "Real32_abs" private inline : Real32.t -> Real32.t; +val add = _import "Real32_add" private inline : Real32.t * Real32.t -> Real32.t; +val castToWord32 = _import "Real32_castToWord32" private inline : Real32.t -> Word32.t; +val div = _import "Real32_div" private inline : Real32.t * Real32.t -> Real32.t; +val equal = _import "Real32_equal" private inline : Real32.t * Real32.t -> Bool.t; +val fetch = _import "Real32_fetch" private inline : (Real32.t) ref -> Real32.t; +val frexp = _import "Real32_frexp" private inline : Real32.t * (C_Int.t) ref -> Real32.t; val gdtoa = _import "Real32_gdtoa" private : Real32.t * C_Int.t * C_Int.t * C_Int.t * (C_Int.t) ref -> C_String.t; -val ldexp = _import "Real32_ldexp" private : Real32.t * C_Int.t -> Real32.t; -val le = _import "Real32_le" private : Real32.t * Real32.t -> Bool.t; -val lt = _import "Real32_lt" private : Real32.t * Real32.t -> Bool.t; +val ldexp = _import "Real32_ldexp" private inline : Real32.t * C_Int.t -> Real32.t; +val le = _import "Real32_le" private inline : Real32.t * Real32.t -> Bool.t; +val lt = _import "Real32_lt" private inline : Real32.t * Real32.t -> Bool.t; structure Math = struct -val acos = _import "Real32_Math_acos" private : Real32.t -> Real32.t; -val asin = _import "Real32_Math_asin" private : Real32.t -> Real32.t; -val atan = _import "Real32_Math_atan" private : Real32.t -> Real32.t; -val atan2 = _import "Real32_Math_atan2" private : Real32.t * Real32.t -> Real32.t; -val cos = _import "Real32_Math_cos" private : Real32.t -> Real32.t; -val cosh = _import "Real32_Math_cosh" private : Real32.t -> Real32.t; -val (eGet, eSet) = _symbol "Real32_Math_e" private : (unit -> (Real32.t)) * ((Real32.t) -> unit); -val exp = _import "Real32_Math_exp" private : Real32.t -> Real32.t; -val ln = _import "Real32_Math_ln" private : Real32.t -> Real32.t; -val log10 = _import "Real32_Math_log10" private : Real32.t -> Real32.t; -val (piGet, piSet) = _symbol "Real32_Math_pi" private : (unit -> (Real32.t)) * ((Real32.t) -> unit); -val pow = _import "Real32_Math_pow" private : Real32.t * Real32.t -> Real32.t; -val sin = _import "Real32_Math_sin" private : Real32.t -> Real32.t; -val sinh = _import "Real32_Math_sinh" private : Real32.t -> Real32.t; -val sqrt = _import "Real32_Math_sqrt" private : Real32.t -> Real32.t; -val tan = _import "Real32_Math_tan" private : Real32.t -> Real32.t; -val tanh = _import "Real32_Math_tanh" private : Real32.t -> Real32.t; -end -val modf = _import "Real32_modf" private : Real32.t * (Real32.t) ref -> Real32.t; -val move = _import "Real32_move" private : (Real32.t) ref * (Real32.t) ref -> unit; -val mul = _import "Real32_mul" private : Real32.t * Real32.t -> Real32.t; -val muladd = _import "Real32_muladd" private : Real32.t * Real32.t * Real32.t -> Real32.t; -val mulsub = _import "Real32_mulsub" private : Real32.t * Real32.t * Real32.t -> Real32.t; -val neg = _import "Real32_neg" private : Real32.t -> Real32.t; -val realCeil = _import "Real32_realCeil" private : Real32.t -> Real32.t; -val realFloor = _import "Real32_realFloor" private : Real32.t -> Real32.t; -val realTrunc = _import "Real32_realTrunc" private : Real32.t -> Real32.t; -val rndToReal32 = _import "Real32_rndToReal32" private : Real32.t -> Real32.t; -val rndToReal64 = _import "Real32_rndToReal64" private : Real32.t -> Real64.t; -val rndToWordS16 = _import "Real32_rndToWordS16" private : Real32.t -> Int16.t; -val rndToWordS32 = _import "Real32_rndToWordS32" private : Real32.t -> Int32.t; -val rndToWordS64 = _import "Real32_rndToWordS64" private : Real32.t -> Int64.t; -val rndToWordS8 = _import "Real32_rndToWordS8" private : Real32.t -> Int8.t; -val rndToWordU16 = _import "Real32_rndToWordU16" private : Real32.t -> Word16.t; -val rndToWordU32 = _import "Real32_rndToWordU32" private : Real32.t -> Word32.t; -val rndToWordU64 = _import "Real32_rndToWordU64" private : Real32.t -> Word64.t; -val rndToWordU8 = _import "Real32_rndToWordU8" private : Real32.t -> Word8.t; -val round = _import "Real32_round" private : Real32.t -> Real32.t; -val store = _import "Real32_store" private : (Real32.t) ref * Real32.t -> unit; +val acos = _import "Real32_Math_acos" private inline : Real32.t -> Real32.t; +val asin = _import "Real32_Math_asin" private inline : Real32.t -> Real32.t; +val atan = _import "Real32_Math_atan" private inline : Real32.t -> Real32.t; +val atan2 = _import "Real32_Math_atan2" private inline : Real32.t * Real32.t -> Real32.t; +val cos = _import "Real32_Math_cos" private inline : Real32.t -> Real32.t; +val cosh = _import "Real32_Math_cosh" private inline : Real32.t -> Real32.t; +val exp = _import "Real32_Math_exp" private inline : Real32.t -> Real32.t; +val ln = _import "Real32_Math_ln" private inline : Real32.t -> Real32.t; +val log10 = _import "Real32_Math_log10" private inline : Real32.t -> Real32.t; +val pow = _import "Real32_Math_pow" private inline : Real32.t * Real32.t -> Real32.t; +val sin = _import "Real32_Math_sin" private inline : Real32.t -> Real32.t; +val sinh = _import "Real32_Math_sinh" private inline : Real32.t -> Real32.t; +val sqrt = _import "Real32_Math_sqrt" private inline : Real32.t -> Real32.t; +val tan = _import "Real32_Math_tan" private inline : Real32.t -> Real32.t; +val tanh = _import "Real32_Math_tanh" private inline : Real32.t -> Real32.t; +end +val modf = _import "Real32_modf" private inline : Real32.t * (Real32.t) ref -> Real32.t; +val move = _import "Real32_move" private inline : (Real32.t) ref * (Real32.t) ref -> unit; +val mul = _import "Real32_mul" private inline : Real32.t * Real32.t -> Real32.t; +val muladd = _import "Real32_muladd" private inline : Real32.t * Real32.t * Real32.t -> Real32.t; +val mulsub = _import "Real32_mulsub" private inline : Real32.t * Real32.t * Real32.t -> Real32.t; +val neg = _import "Real32_neg" private inline : Real32.t -> Real32.t; +val realCeil = _import "Real32_realCeil" private inline : Real32.t -> Real32.t; +val realFloor = _import "Real32_realFloor" private inline : Real32.t -> Real32.t; +val realTrunc = _import "Real32_realTrunc" private inline : Real32.t -> Real32.t; +val rndToReal32 = _import "Real32_rndToReal32" private inline : Real32.t -> Real32.t; +val rndToReal64 = _import "Real32_rndToReal64" private inline : Real32.t -> Real64.t; +val rndToWordS16 = _import "Real32_rndToWordS16" private inline : Real32.t -> Int16.t; +val rndToWordS32 = _import "Real32_rndToWordS32" private inline : Real32.t -> Int32.t; +val rndToWordS64 = _import "Real32_rndToWordS64" private inline : Real32.t -> Int64.t; +val rndToWordS8 = _import "Real32_rndToWordS8" private inline : Real32.t -> Int8.t; +val rndToWordU16 = _import "Real32_rndToWordU16" private inline : Real32.t -> Word16.t; +val rndToWordU32 = _import "Real32_rndToWordU32" private inline : Real32.t -> Word32.t; +val rndToWordU64 = _import "Real32_rndToWordU64" private inline : Real32.t -> Word64.t; +val rndToWordU8 = _import "Real32_rndToWordU8" private inline : Real32.t -> Word8.t; +val round = _import "Real32_round" private inline : Real32.t -> Real32.t; +val store = _import "Real32_store" private inline : (Real32.t) ref * Real32.t -> unit; val strtor = _import "Real32_strtor" private : NullString8.t * C_Int.t -> Real32.t; -val sub = _import "Real32_sub" private : Real32.t * Real32.t -> Real32.t; +val sub = _import "Real32_sub" private inline : Real32.t * Real32.t -> Real32.t; end structure Real64 = struct type t = Real64.t -val abs = _import "Real64_abs" private : Real64.t -> Real64.t; -val add = _import "Real64_add" private : Real64.t * Real64.t -> Real64.t; -val castToWord64 = _import "Real64_castToWord64" private : Real64.t -> Word64.t; -val div = _import "Real64_div" private : Real64.t * Real64.t -> Real64.t; -val equal = _import "Real64_equal" private : Real64.t * Real64.t -> Bool.t; -val fetch = _import "Real64_fetch" private : (Real64.t) ref -> Real64.t; -val frexp = _import "Real64_frexp" private : Real64.t * (C_Int.t) ref -> Real64.t; +val abs = _import "Real64_abs" private inline : Real64.t -> Real64.t; +val add = _import "Real64_add" private inline : Real64.t * Real64.t -> Real64.t; +val castToWord64 = _import "Real64_castToWord64" private inline : Real64.t -> Word64.t; +val div = _import "Real64_div" private inline : Real64.t * Real64.t -> Real64.t; +val equal = _import "Real64_equal" private inline : Real64.t * Real64.t -> Bool.t; +val fetch = _import "Real64_fetch" private inline : (Real64.t) ref -> Real64.t; +val frexp = _import "Real64_frexp" private inline : Real64.t * (C_Int.t) ref -> Real64.t; val gdtoa = _import "Real64_gdtoa" private : Real64.t * C_Int.t * C_Int.t * C_Int.t * (C_Int.t) ref -> C_String.t; -val ldexp = _import "Real64_ldexp" private : Real64.t * C_Int.t -> Real64.t; -val le = _import "Real64_le" private : Real64.t * Real64.t -> Bool.t; -val lt = _import "Real64_lt" private : Real64.t * Real64.t -> Bool.t; +val ldexp = _import "Real64_ldexp" private inline : Real64.t * C_Int.t -> Real64.t; +val le = _import "Real64_le" private inline : Real64.t * Real64.t -> Bool.t; +val lt = _import "Real64_lt" private inline : Real64.t * Real64.t -> Bool.t; structure Math = struct -val acos = _import "Real64_Math_acos" private : Real64.t -> Real64.t; -val asin = _import "Real64_Math_asin" private : Real64.t -> Real64.t; -val atan = _import "Real64_Math_atan" private : Real64.t -> Real64.t; -val atan2 = _import "Real64_Math_atan2" private : Real64.t * Real64.t -> Real64.t; -val cos = _import "Real64_Math_cos" private : Real64.t -> Real64.t; -val cosh = _import "Real64_Math_cosh" private : Real64.t -> Real64.t; -val (eGet, eSet) = _symbol "Real64_Math_e" private : (unit -> (Real64.t)) * ((Real64.t) -> unit); -val exp = _import "Real64_Math_exp" private : Real64.t -> Real64.t; -val ln = _import "Real64_Math_ln" private : Real64.t -> Real64.t; -val log10 = _import "Real64_Math_log10" private : Real64.t -> Real64.t; -val (piGet, piSet) = _symbol "Real64_Math_pi" private : (unit -> (Real64.t)) * ((Real64.t) -> unit); -val pow = _import "Real64_Math_pow" private : Real64.t * Real64.t -> Real64.t; -val sin = _import "Real64_Math_sin" private : Real64.t -> Real64.t; -val sinh = _import "Real64_Math_sinh" private : Real64.t -> Real64.t; -val sqrt = _import "Real64_Math_sqrt" private : Real64.t -> Real64.t; -val tan = _import "Real64_Math_tan" private : Real64.t -> Real64.t; -val tanh = _import "Real64_Math_tanh" private : Real64.t -> Real64.t; -end -val modf = _import "Real64_modf" private : Real64.t * (Real64.t) ref -> Real64.t; -val move = _import "Real64_move" private : (Real64.t) ref * (Real64.t) ref -> unit; -val mul = _import "Real64_mul" private : Real64.t * Real64.t -> Real64.t; -val muladd = _import "Real64_muladd" private : Real64.t * Real64.t * Real64.t -> Real64.t; -val mulsub = _import "Real64_mulsub" private : Real64.t * Real64.t * Real64.t -> Real64.t; -val neg = _import "Real64_neg" private : Real64.t -> Real64.t; -val realCeil = _import "Real64_realCeil" private : Real64.t -> Real64.t; -val realFloor = _import "Real64_realFloor" private : Real64.t -> Real64.t; -val realTrunc = _import "Real64_realTrunc" private : Real64.t -> Real64.t; -val rndToReal32 = _import "Real64_rndToReal32" private : Real64.t -> Real32.t; -val rndToReal64 = _import "Real64_rndToReal64" private : Real64.t -> Real64.t; -val rndToWordS16 = _import "Real64_rndToWordS16" private : Real64.t -> Int16.t; -val rndToWordS32 = _import "Real64_rndToWordS32" private : Real64.t -> Int32.t; -val rndToWordS64 = _import "Real64_rndToWordS64" private : Real64.t -> Int64.t; -val rndToWordS8 = _import "Real64_rndToWordS8" private : Real64.t -> Int8.t; -val rndToWordU16 = _import "Real64_rndToWordU16" private : Real64.t -> Word16.t; -val rndToWordU32 = _import "Real64_rndToWordU32" private : Real64.t -> Word32.t; -val rndToWordU64 = _import "Real64_rndToWordU64" private : Real64.t -> Word64.t; -val rndToWordU8 = _import "Real64_rndToWordU8" private : Real64.t -> Word8.t; -val round = _import "Real64_round" private : Real64.t -> Real64.t; -val store = _import "Real64_store" private : (Real64.t) ref * Real64.t -> unit; +val acos = _import "Real64_Math_acos" private inline : Real64.t -> Real64.t; +val asin = _import "Real64_Math_asin" private inline : Real64.t -> Real64.t; +val atan = _import "Real64_Math_atan" private inline : Real64.t -> Real64.t; +val atan2 = _import "Real64_Math_atan2" private inline : Real64.t * Real64.t -> Real64.t; +val cos = _import "Real64_Math_cos" private inline : Real64.t -> Real64.t; +val cosh = _import "Real64_Math_cosh" private inline : Real64.t -> Real64.t; +val exp = _import "Real64_Math_exp" private inline : Real64.t -> Real64.t; +val ln = _import "Real64_Math_ln" private inline : Real64.t -> Real64.t; +val log10 = _import "Real64_Math_log10" private inline : Real64.t -> Real64.t; +val pow = _import "Real64_Math_pow" private inline : Real64.t * Real64.t -> Real64.t; +val sin = _import "Real64_Math_sin" private inline : Real64.t -> Real64.t; +val sinh = _import "Real64_Math_sinh" private inline : Real64.t -> Real64.t; +val sqrt = _import "Real64_Math_sqrt" private inline : Real64.t -> Real64.t; +val tan = _import "Real64_Math_tan" private inline : Real64.t -> Real64.t; +val tanh = _import "Real64_Math_tanh" private inline : Real64.t -> Real64.t; +end +val modf = _import "Real64_modf" private inline : Real64.t * (Real64.t) ref -> Real64.t; +val move = _import "Real64_move" private inline : (Real64.t) ref * (Real64.t) ref -> unit; +val mul = _import "Real64_mul" private inline : Real64.t * Real64.t -> Real64.t; +val muladd = _import "Real64_muladd" private inline : Real64.t * Real64.t * Real64.t -> Real64.t; +val mulsub = _import "Real64_mulsub" private inline : Real64.t * Real64.t * Real64.t -> Real64.t; +val neg = _import "Real64_neg" private inline : Real64.t -> Real64.t; +val realCeil = _import "Real64_realCeil" private inline : Real64.t -> Real64.t; +val realFloor = _import "Real64_realFloor" private inline : Real64.t -> Real64.t; +val realTrunc = _import "Real64_realTrunc" private inline : Real64.t -> Real64.t; +val rndToReal32 = _import "Real64_rndToReal32" private inline : Real64.t -> Real32.t; +val rndToReal64 = _import "Real64_rndToReal64" private inline : Real64.t -> Real64.t; +val rndToWordS16 = _import "Real64_rndToWordS16" private inline : Real64.t -> Int16.t; +val rndToWordS32 = _import "Real64_rndToWordS32" private inline : Real64.t -> Int32.t; +val rndToWordS64 = _import "Real64_rndToWordS64" private inline : Real64.t -> Int64.t; +val rndToWordS8 = _import "Real64_rndToWordS8" private inline : Real64.t -> Int8.t; +val rndToWordU16 = _import "Real64_rndToWordU16" private inline : Real64.t -> Word16.t; +val rndToWordU32 = _import "Real64_rndToWordU32" private inline : Real64.t -> Word32.t; +val rndToWordU64 = _import "Real64_rndToWordU64" private inline : Real64.t -> Word64.t; +val rndToWordU8 = _import "Real64_rndToWordU8" private inline : Real64.t -> Word8.t; +val round = _import "Real64_round" private inline : Real64.t -> Real64.t; +val store = _import "Real64_store" private inline : (Real64.t) ref * Real64.t -> unit; val strtor = _import "Real64_strtor" private : NullString8.t * C_Int.t -> Real64.t; -val sub = _import "Real64_sub" private : Real64.t * Real64.t -> Real64.t; +val sub = _import "Real64_sub" private inline : Real64.t * Real64.t -> Real64.t; end structure Socket = struct @@ -1142,227 +1139,235 @@ structure Word16 = struct type t = Word16.t -val add = _import "Word16_add" private : Word16.t * Word16.t -> Word16.t; -val andb = _import "Word16_andb" private : Word16.t * Word16.t -> Word16.t; -val equal = _import "Word16_equal" private : Word16.t * Word16.t -> Bool.t; -val lshift = _import "Word16_lshift" private : Word16.t * Word32.t -> Word16.t; -val neg = _import "Word16_neg" private : Word16.t -> Word16.t; -val notb = _import "Word16_notb" private : Word16.t -> Word16.t; -val orb = _import "Word16_orb" private : Word16.t * Word16.t -> Word16.t; -val rol = _import "Word16_rol" private : Word16.t * Word32.t -> Word16.t; -val ror = _import "Word16_ror" private : Word16.t * Word32.t -> Word16.t; -val sub = _import "Word16_sub" private : Word16.t * Word16.t -> Word16.t; -val xorb = _import "Word16_xorb" private : Word16.t * Word16.t -> Word16.t; +val add = _import "Word16_add" private inline : Word16.t * Word16.t -> Word16.t; +val andb = _import "Word16_andb" private inline : Word16.t * Word16.t -> Word16.t; +val equal = _import "Word16_equal" private inline : Word16.t * Word16.t -> Bool.t; +val lshift = _import "Word16_lshift" private inline : Word16.t * Word32.t -> Word16.t; +val neg = _import "Word16_neg" private inline : Word16.t -> Word16.t; +val notb = _import "Word16_notb" private inline : Word16.t -> Word16.t; +val orb = _import "Word16_orb" private inline : Word16.t * Word16.t -> Word16.t; +val rol = _import "Word16_rol" private inline : Word16.t * Word32.t -> Word16.t; +val ror = _import "Word16_ror" private inline : Word16.t * Word32.t -> Word16.t; +val sub = _import "Word16_sub" private inline : Word16.t * Word16.t -> Word16.t; +val xorb = _import "Word16_xorb" private inline : Word16.t * Word16.t -> Word16.t; end structure Word32 = struct type t = Word32.t -val add = _import "Word32_add" private : Word32.t * Word32.t -> Word32.t; -val andb = _import "Word32_andb" private : Word32.t * Word32.t -> Word32.t; -val castToReal32 = _import "Word32_castToReal32" private : Word32.t -> Real32.t; -val equal = _import "Word32_equal" private : Word32.t * Word32.t -> Bool.t; -val lshift = _import "Word32_lshift" private : Word32.t * Word32.t -> Word32.t; -val neg = _import "Word32_neg" private : Word32.t -> Word32.t; -val notb = _import "Word32_notb" private : Word32.t -> Word32.t; -val orb = _import "Word32_orb" private : Word32.t * Word32.t -> Word32.t; -val rol = _import "Word32_rol" private : Word32.t * Word32.t -> Word32.t; -val ror = _import "Word32_ror" private : Word32.t * Word32.t -> Word32.t; -val sub = _import "Word32_sub" private : Word32.t * Word32.t -> Word32.t; -val xorb = _import "Word32_xorb" private : Word32.t * Word32.t -> Word32.t; +val add = _import "Word32_add" private inline : Word32.t * Word32.t -> Word32.t; +val andb = _import "Word32_andb" private inline : Word32.t * Word32.t -> Word32.t; +val castToReal32 = _import "Word32_castToReal32" private inline : Word32.t -> Real32.t; +val equal = _import "Word32_equal" private inline : Word32.t * Word32.t -> Bool.t; +val lshift = _import "Word32_lshift" private inline : Word32.t * Word32.t -> Word32.t; +val neg = _import "Word32_neg" private inline : Word32.t -> Word32.t; +val notb = _import "Word32_notb" private inline : Word32.t -> Word32.t; +val orb = _import "Word32_orb" private inline : Word32.t * Word32.t -> Word32.t; +val rol = _import "Word32_rol" private inline : Word32.t * Word32.t -> Word32.t; +val ror = _import "Word32_ror" private inline : Word32.t * Word32.t -> Word32.t; +val sub = _import "Word32_sub" private inline : Word32.t * Word32.t -> Word32.t; +val xorb = _import "Word32_xorb" private inline : Word32.t * Word32.t -> Word32.t; end structure Word64 = struct type t = Word64.t -val add = _import "Word64_add" private : Word64.t * Word64.t -> Word64.t; -val andb = _import "Word64_andb" private : Word64.t * Word64.t -> Word64.t; -val castToReal64 = _import "Word64_castToReal64" private : Word64.t -> Real64.t; -val equal = _import "Word64_equal" private : Word64.t * Word64.t -> Bool.t; -val fetch = _import "Word64_fetch" private : (Word64.t) ref -> Word64.t; -val lshift = _import "Word64_lshift" private : Word64.t * Word32.t -> Word64.t; -val move = _import "Word64_move" private : (Word64.t) ref * (Word64.t) ref -> unit; -val neg = _import "Word64_neg" private : Word64.t -> Word64.t; -val notb = _import "Word64_notb" private : Word64.t -> Word64.t; -val orb = _import "Word64_orb" private : Word64.t * Word64.t -> Word64.t; -val rol = _import "Word64_rol" private : Word64.t * Word32.t -> Word64.t; -val ror = _import "Word64_ror" private : Word64.t * Word32.t -> Word64.t; -val store = _import "Word64_store" private : (Word64.t) ref * Word64.t -> unit; -val sub = _import "Word64_sub" private : Word64.t * Word64.t -> Word64.t; -val xorb = _import "Word64_xorb" private : Word64.t * Word64.t -> Word64.t; +val add = _import "Word64_add" private inline : Word64.t * Word64.t -> Word64.t; +val andb = _import "Word64_andb" private inline : Word64.t * Word64.t -> Word64.t; +val castToReal64 = _import "Word64_castToReal64" private inline : Word64.t -> Real64.t; +val equal = _import "Word64_equal" private inline : Word64.t * Word64.t -> Bool.t; +val fetch = _import "Word64_fetch" private inline : (Word64.t) ref -> Word64.t; +val lshift = _import "Word64_lshift" private inline : Word64.t * Word32.t -> Word64.t; +val move = _import "Word64_move" private inline : (Word64.t) ref * (Word64.t) ref -> unit; +val neg = _import "Word64_neg" private inline : Word64.t -> Word64.t; +val notb = _import "Word64_notb" private inline : Word64.t -> Word64.t; +val orb = _import "Word64_orb" private inline : Word64.t * Word64.t -> Word64.t; +val rol = _import "Word64_rol" private inline : Word64.t * Word32.t -> Word64.t; +val ror = _import "Word64_ror" private inline : Word64.t * Word32.t -> Word64.t; +val store = _import "Word64_store" private inline : (Word64.t) ref * Word64.t -> unit; +val sub = _import "Word64_sub" private inline : Word64.t * Word64.t -> Word64.t; +val xorb = _import "Word64_xorb" private inline : Word64.t * Word64.t -> Word64.t; end structure Word8 = struct type t = Word8.t -val add = _import "Word8_add" private : Word8.t * Word8.t -> Word8.t; -val andb = _import "Word8_andb" private : Word8.t * Word8.t -> Word8.t; -val equal = _import "Word8_equal" private : Word8.t * Word8.t -> Bool.t; -val lshift = _import "Word8_lshift" private : Word8.t * Word32.t -> Word8.t; -val neg = _import "Word8_neg" private : Word8.t -> Word8.t; -val notb = _import "Word8_notb" private : Word8.t -> Word8.t; -val orb = _import "Word8_orb" private : Word8.t * Word8.t -> Word8.t; -val rol = _import "Word8_rol" private : Word8.t * Word32.t -> Word8.t; -val ror = _import "Word8_ror" private : Word8.t * Word32.t -> Word8.t; -val sub = _import "Word8_sub" private : Word8.t * Word8.t -> Word8.t; -val xorb = _import "Word8_xorb" private : Word8.t * Word8.t -> Word8.t; +val add = _import "Word8_add" private inline : Word8.t * Word8.t -> Word8.t; +val andb = _import "Word8_andb" private inline : Word8.t * Word8.t -> Word8.t; +val equal = _import "Word8_equal" private inline : Word8.t * Word8.t -> Bool.t; +val lshift = _import "Word8_lshift" private inline : Word8.t * Word32.t -> Word8.t; +val neg = _import "Word8_neg" private inline : Word8.t -> Word8.t; +val notb = _import "Word8_notb" private inline : Word8.t -> Word8.t; +val orb = _import "Word8_orb" private inline : Word8.t * Word8.t -> Word8.t; +val rol = _import "Word8_rol" private inline : Word8.t * Word32.t -> Word8.t; +val ror = _import "Word8_ror" private inline : Word8.t * Word32.t -> Word8.t; +val sub = _import "Word8_sub" private inline : Word8.t * Word8.t -> Word8.t; +val xorb = _import "Word8_xorb" private inline : Word8.t * Word8.t -> Word8.t; end structure WordS16 = struct -val addCheckOverflows = _import "WordS16_addCheckOverflows" private : Int16.t * Int16.t -> Bool.t; -val extdToWord16 = _import "WordS16_extdToWord16" private : Int16.t -> Word16.t; -val extdToWord32 = _import "WordS16_extdToWord32" private : Int16.t -> Word32.t; -val extdToWord64 = _import "WordS16_extdToWord64" private : Int16.t -> Word64.t; -val extdToWord8 = _import "WordS16_extdToWord8" private : Int16.t -> Word8.t; -val ge = _import "WordS16_ge" private : Int16.t * Int16.t -> Bool.t; -val gt = _import "WordS16_gt" private : Int16.t * Int16.t -> Bool.t; -val le = _import "WordS16_le" private : Int16.t * Int16.t -> Bool.t; -val lt = _import "WordS16_lt" private : Int16.t * Int16.t -> Bool.t; -val mul = _import "WordS16_mul" private : Int16.t * Int16.t -> Int16.t; -val mulCheckOverflows = _import "WordS16_mulCheckOverflows" private : Int16.t * Int16.t -> Bool.t; -val negCheckOverflows = _import "WordS16_negCheckOverflows" private : Int16.t -> Bool.t; -val quot = _import "WordS16_quot" private : Int16.t * Int16.t -> Int16.t; -val rem = _import "WordS16_rem" private : Int16.t * Int16.t -> Int16.t; +val addCheckP = _import "WordS16_addCheckP" private inline : Int16.t * Int16.t -> Bool.t; +val extdToWord16 = _import "WordS16_extdToWord16" private inline : Int16.t -> Word16.t; +val extdToWord32 = _import "WordS16_extdToWord32" private inline : Int16.t -> Word32.t; +val extdToWord64 = _import "WordS16_extdToWord64" private inline : Int16.t -> Word64.t; +val extdToWord8 = _import "WordS16_extdToWord8" private inline : Int16.t -> Word8.t; +val ge = _import "WordS16_ge" private inline : Int16.t * Int16.t -> Bool.t; +val gt = _import "WordS16_gt" private inline : Int16.t * Int16.t -> Bool.t; +val le = _import "WordS16_le" private inline : Int16.t * Int16.t -> Bool.t; +val lt = _import "WordS16_lt" private inline : Int16.t * Int16.t -> Bool.t; +val mul = _import "WordS16_mul" private inline : Int16.t * Int16.t -> Int16.t; +val mulCheckP = _import "WordS16_mulCheckP" private inline : Int16.t * Int16.t -> Bool.t; +val negCheckP = _import "WordS16_negCheckP" private inline : Int16.t -> Bool.t; +val quot = _import "WordS16_quot" private inline : Int16.t * Int16.t -> Int16.t; +val rem = _import "WordS16_rem" private inline : Int16.t * Int16.t -> Int16.t; val rndToReal32 = _import "WordS16_rndToReal32" private : Int16.t -> Real32.t; val rndToReal64 = _import "WordS16_rndToReal64" private : Int16.t -> Real64.t; -val rshift = _import "WordS16_rshift" private : Int16.t * Word32.t -> Int16.t; -val subCheckOverflows = _import "WordS16_subCheckOverflows" private : Int16.t * Int16.t -> Bool.t; +val rshift = _import "WordS16_rshift" private inline : Int16.t * Word32.t -> Int16.t; +val subCheckP = _import "WordS16_subCheckP" private inline : Int16.t * Int16.t -> Bool.t; end structure WordS32 = struct -val addCheckOverflows = _import "WordS32_addCheckOverflows" private : Int32.t * Int32.t -> Bool.t; -val extdToWord16 = _import "WordS32_extdToWord16" private : Int32.t -> Word16.t; -val extdToWord32 = _import "WordS32_extdToWord32" private : Int32.t -> Word32.t; -val extdToWord64 = _import "WordS32_extdToWord64" private : Int32.t -> Word64.t; -val extdToWord8 = _import "WordS32_extdToWord8" private : Int32.t -> Word8.t; -val ge = _import "WordS32_ge" private : Int32.t * Int32.t -> Bool.t; -val gt = _import "WordS32_gt" private : Int32.t * Int32.t -> Bool.t; -val le = _import "WordS32_le" private : Int32.t * Int32.t -> Bool.t; -val lt = _import "WordS32_lt" private : Int32.t * Int32.t -> Bool.t; -val mul = _import "WordS32_mul" private : Int32.t * Int32.t -> Int32.t; -val mulCheckOverflows = _import "WordS32_mulCheckOverflows" private : Int32.t * Int32.t -> Bool.t; -val negCheckOverflows = _import "WordS32_negCheckOverflows" private : Int32.t -> Bool.t; -val quot = _import "WordS32_quot" private : Int32.t * Int32.t -> Int32.t; -val rem = _import "WordS32_rem" private : Int32.t * Int32.t -> Int32.t; +val addCheckP = _import "WordS32_addCheckP" private inline : Int32.t * Int32.t -> Bool.t; +val extdToWord16 = _import "WordS32_extdToWord16" private inline : Int32.t -> Word16.t; +val extdToWord32 = _import "WordS32_extdToWord32" private inline : Int32.t -> Word32.t; +val extdToWord64 = _import "WordS32_extdToWord64" private inline : Int32.t -> Word64.t; +val extdToWord8 = _import "WordS32_extdToWord8" private inline : Int32.t -> Word8.t; +val ge = _import "WordS32_ge" private inline : Int32.t * Int32.t -> Bool.t; +val gt = _import "WordS32_gt" private inline : Int32.t * Int32.t -> Bool.t; +val le = _import "WordS32_le" private inline : Int32.t * Int32.t -> Bool.t; +val lt = _import "WordS32_lt" private inline : Int32.t * Int32.t -> Bool.t; +val mul = _import "WordS32_mul" private inline : Int32.t * Int32.t -> Int32.t; +val mulCheckP = _import "WordS32_mulCheckP" private inline : Int32.t * Int32.t -> Bool.t; +val negCheckP = _import "WordS32_negCheckP" private inline : Int32.t -> Bool.t; +val quot = _import "WordS32_quot" private inline : Int32.t * Int32.t -> Int32.t; +val rem = _import "WordS32_rem" private inline : Int32.t * Int32.t -> Int32.t; val rndToReal32 = _import "WordS32_rndToReal32" private : Int32.t -> Real32.t; val rndToReal64 = _import "WordS32_rndToReal64" private : Int32.t -> Real64.t; -val rshift = _import "WordS32_rshift" private : Int32.t * Word32.t -> Int32.t; -val subCheckOverflows = _import "WordS32_subCheckOverflows" private : Int32.t * Int32.t -> Bool.t; +val rshift = _import "WordS32_rshift" private inline : Int32.t * Word32.t -> Int32.t; +val subCheckP = _import "WordS32_subCheckP" private inline : Int32.t * Int32.t -> Bool.t; end structure WordS64 = struct -val addCheckOverflows = _import "WordS64_addCheckOverflows" private : Int64.t * Int64.t -> Bool.t; -val extdToWord16 = _import "WordS64_extdToWord16" private : Int64.t -> Word16.t; -val extdToWord32 = _import "WordS64_extdToWord32" private : Int64.t -> Word32.t; -val extdToWord64 = _import "WordS64_extdToWord64" private : Int64.t -> Word64.t; -val extdToWord8 = _import "WordS64_extdToWord8" private : Int64.t -> Word8.t; -val ge = _import "WordS64_ge" private : Int64.t * Int64.t -> Bool.t; -val gt = _import "WordS64_gt" private : Int64.t * Int64.t -> Bool.t; -val le = _import "WordS64_le" private : Int64.t * Int64.t -> Bool.t; -val lt = _import "WordS64_lt" private : Int64.t * Int64.t -> Bool.t; -val mul = _import "WordS64_mul" private : Int64.t * Int64.t -> Int64.t; -val mulCheckOverflows = _import "WordS64_mulCheckOverflows" private : Int64.t * Int64.t -> Bool.t; -val negCheckOverflows = _import "WordS64_negCheckOverflows" private : Int64.t -> Bool.t; -val quot = _import "WordS64_quot" private : Int64.t * Int64.t -> Int64.t; -val rem = _import "WordS64_rem" private : Int64.t * Int64.t -> Int64.t; +val addCheckP = _import "WordS64_addCheckP" private inline : Int64.t * Int64.t -> Bool.t; +val extdToWord16 = _import "WordS64_extdToWord16" private inline : Int64.t -> Word16.t; +val extdToWord32 = _import "WordS64_extdToWord32" private inline : Int64.t -> Word32.t; +val extdToWord64 = _import "WordS64_extdToWord64" private inline : Int64.t -> Word64.t; +val extdToWord8 = _import "WordS64_extdToWord8" private inline : Int64.t -> Word8.t; +val ge = _import "WordS64_ge" private inline : Int64.t * Int64.t -> Bool.t; +val gt = _import "WordS64_gt" private inline : Int64.t * Int64.t -> Bool.t; +val le = _import "WordS64_le" private inline : Int64.t * Int64.t -> Bool.t; +val lt = _import "WordS64_lt" private inline : Int64.t * Int64.t -> Bool.t; +val mul = _import "WordS64_mul" private inline : Int64.t * Int64.t -> Int64.t; +val mulCheckP = _import "WordS64_mulCheckP" private inline : Int64.t * Int64.t -> Bool.t; +val negCheckP = _import "WordS64_negCheckP" private inline : Int64.t -> Bool.t; +val quot = _import "WordS64_quot" private inline : Int64.t * Int64.t -> Int64.t; +val rem = _import "WordS64_rem" private inline : Int64.t * Int64.t -> Int64.t; val rndToReal32 = _import "WordS64_rndToReal32" private : Int64.t -> Real32.t; val rndToReal64 = _import "WordS64_rndToReal64" private : Int64.t -> Real64.t; -val rshift = _import "WordS64_rshift" private : Int64.t * Word32.t -> Int64.t; -val subCheckOverflows = _import "WordS64_subCheckOverflows" private : Int64.t * Int64.t -> Bool.t; +val rshift = _import "WordS64_rshift" private inline : Int64.t * Word32.t -> Int64.t; +val subCheckP = _import "WordS64_subCheckP" private inline : Int64.t * Int64.t -> Bool.t; end structure WordS8 = struct -val addCheckOverflows = _import "WordS8_addCheckOverflows" private : Int8.t * Int8.t -> Bool.t; -val extdToWord16 = _import "WordS8_extdToWord16" private : Int8.t -> Word16.t; -val extdToWord32 = _import "WordS8_extdToWord32" private : Int8.t -> Word32.t; -val extdToWord64 = _import "WordS8_extdToWord64" private : Int8.t -> Word64.t; -val extdToWord8 = _import "WordS8_extdToWord8" private : Int8.t -> Word8.t; -val ge = _import "WordS8_ge" private : Int8.t * Int8.t -> Bool.t; -val gt = _import "WordS8_gt" private : Int8.t * Int8.t -> Bool.t; -val le = _import "WordS8_le" private : Int8.t * Int8.t -> Bool.t; -val lt = _import "WordS8_lt" private : Int8.t * Int8.t -> Bool.t; -val mul = _import "WordS8_mul" private : Int8.t * Int8.t -> Int8.t; -val mulCheckOverflows = _import "WordS8_mulCheckOverflows" private : Int8.t * Int8.t -> Bool.t; -val negCheckOverflows = _import "WordS8_negCheckOverflows" private : Int8.t -> Bool.t; -val quot = _import "WordS8_quot" private : Int8.t * Int8.t -> Int8.t; -val rem = _import "WordS8_rem" private : Int8.t * Int8.t -> Int8.t; +val addCheckP = _import "WordS8_addCheckP" private inline : Int8.t * Int8.t -> Bool.t; +val extdToWord16 = _import "WordS8_extdToWord16" private inline : Int8.t -> Word16.t; +val extdToWord32 = _import "WordS8_extdToWord32" private inline : Int8.t -> Word32.t; +val extdToWord64 = _import "WordS8_extdToWord64" private inline : Int8.t -> Word64.t; +val extdToWord8 = _import "WordS8_extdToWord8" private inline : Int8.t -> Word8.t; +val ge = _import "WordS8_ge" private inline : Int8.t * Int8.t -> Bool.t; +val gt = _import "WordS8_gt" private inline : Int8.t * Int8.t -> Bool.t; +val le = _import "WordS8_le" private inline : Int8.t * Int8.t -> Bool.t; +val lt = _import "WordS8_lt" private inline : Int8.t * Int8.t -> Bool.t; +val mul = _import "WordS8_mul" private inline : Int8.t * Int8.t -> Int8.t; +val mulCheckP = _import "WordS8_mulCheckP" private inline : Int8.t * Int8.t -> Bool.t; +val negCheckP = _import "WordS8_negCheckP" private inline : Int8.t -> Bool.t; +val quot = _import "WordS8_quot" private inline : Int8.t * Int8.t -> Int8.t; +val rem = _import "WordS8_rem" private inline : Int8.t * Int8.t -> Int8.t; val rndToReal32 = _import "WordS8_rndToReal32" private : Int8.t -> Real32.t; val rndToReal64 = _import "WordS8_rndToReal64" private : Int8.t -> Real64.t; -val rshift = _import "WordS8_rshift" private : Int8.t * Word32.t -> Int8.t; -val subCheckOverflows = _import "WordS8_subCheckOverflows" private : Int8.t * Int8.t -> Bool.t; +val rshift = _import "WordS8_rshift" private inline : Int8.t * Word32.t -> Int8.t; +val subCheckP = _import "WordS8_subCheckP" private inline : Int8.t * Int8.t -> Bool.t; end structure WordU16 = struct -val addCheckOverflows = _import "WordU16_addCheckOverflows" private : Word16.t * Word16.t -> Bool.t; -val extdToWord16 = _import "WordU16_extdToWord16" private : Word16.t -> Word16.t; -val extdToWord32 = _import "WordU16_extdToWord32" private : Word16.t -> Word32.t; -val extdToWord64 = _import "WordU16_extdToWord64" private : Word16.t -> Word64.t; -val extdToWord8 = _import "WordU16_extdToWord8" private : Word16.t -> Word8.t; -val ge = _import "WordU16_ge" private : Word16.t * Word16.t -> Bool.t; -val gt = _import "WordU16_gt" private : Word16.t * Word16.t -> Bool.t; -val le = _import "WordU16_le" private : Word16.t * Word16.t -> Bool.t; -val lt = _import "WordU16_lt" private : Word16.t * Word16.t -> Bool.t; -val mul = _import "WordU16_mul" private : Word16.t * Word16.t -> Word16.t; -val mulCheckOverflows = _import "WordU16_mulCheckOverflows" private : Word16.t * Word16.t -> Bool.t; -val quot = _import "WordU16_quot" private : Word16.t * Word16.t -> Word16.t; -val rem = _import "WordU16_rem" private : Word16.t * Word16.t -> Word16.t; +val addCheckP = _import "WordU16_addCheckP" private inline : Word16.t * Word16.t -> Bool.t; +val extdToWord16 = _import "WordU16_extdToWord16" private inline : Word16.t -> Word16.t; +val extdToWord32 = _import "WordU16_extdToWord32" private inline : Word16.t -> Word32.t; +val extdToWord64 = _import "WordU16_extdToWord64" private inline : Word16.t -> Word64.t; +val extdToWord8 = _import "WordU16_extdToWord8" private inline : Word16.t -> Word8.t; +val ge = _import "WordU16_ge" private inline : Word16.t * Word16.t -> Bool.t; +val gt = _import "WordU16_gt" private inline : Word16.t * Word16.t -> Bool.t; +val le = _import "WordU16_le" private inline : Word16.t * Word16.t -> Bool.t; +val lt = _import "WordU16_lt" private inline : Word16.t * Word16.t -> Bool.t; +val mul = _import "WordU16_mul" private inline : Word16.t * Word16.t -> Word16.t; +val mulCheckP = _import "WordU16_mulCheckP" private inline : Word16.t * Word16.t -> Bool.t; +val negCheckP = _import "WordU16_negCheckP" private inline : Word16.t -> Bool.t; +val quot = _import "WordU16_quot" private inline : Word16.t * Word16.t -> Word16.t; +val rem = _import "WordU16_rem" private inline : Word16.t * Word16.t -> Word16.t; val rndToReal32 = _import "WordU16_rndToReal32" private : Word16.t -> Real32.t; val rndToReal64 = _import "WordU16_rndToReal64" private : Word16.t -> Real64.t; -val rshift = _import "WordU16_rshift" private : Word16.t * Word32.t -> Word16.t; +val rshift = _import "WordU16_rshift" private inline : Word16.t * Word32.t -> Word16.t; +val subCheckP = _import "WordU16_subCheckP" private inline : Word16.t * Word16.t -> Bool.t; end structure WordU32 = struct -val addCheckOverflows = _import "WordU32_addCheckOverflows" private : Word32.t * Word32.t -> Bool.t; -val extdToWord16 = _import "WordU32_extdToWord16" private : Word32.t -> Word16.t; -val extdToWord32 = _import "WordU32_extdToWord32" private : Word32.t -> Word32.t; -val extdToWord64 = _import "WordU32_extdToWord64" private : Word32.t -> Word64.t; -val extdToWord8 = _import "WordU32_extdToWord8" private : Word32.t -> Word8.t; -val ge = _import "WordU32_ge" private : Word32.t * Word32.t -> Bool.t; -val gt = _import "WordU32_gt" private : Word32.t * Word32.t -> Bool.t; -val le = _import "WordU32_le" private : Word32.t * Word32.t -> Bool.t; -val lt = _import "WordU32_lt" private : Word32.t * Word32.t -> Bool.t; -val mul = _import "WordU32_mul" private : Word32.t * Word32.t -> Word32.t; -val mulCheckOverflows = _import "WordU32_mulCheckOverflows" private : Word32.t * Word32.t -> Bool.t; -val quot = _import "WordU32_quot" private : Word32.t * Word32.t -> Word32.t; -val rem = _import "WordU32_rem" private : Word32.t * Word32.t -> Word32.t; +val addCheckP = _import "WordU32_addCheckP" private inline : Word32.t * Word32.t -> Bool.t; +val extdToWord16 = _import "WordU32_extdToWord16" private inline : Word32.t -> Word16.t; +val extdToWord32 = _import "WordU32_extdToWord32" private inline : Word32.t -> Word32.t; +val extdToWord64 = _import "WordU32_extdToWord64" private inline : Word32.t -> Word64.t; +val extdToWord8 = _import "WordU32_extdToWord8" private inline : Word32.t -> Word8.t; +val ge = _import "WordU32_ge" private inline : Word32.t * Word32.t -> Bool.t; +val gt = _import "WordU32_gt" private inline : Word32.t * Word32.t -> Bool.t; +val le = _import "WordU32_le" private inline : Word32.t * Word32.t -> Bool.t; +val lt = _import "WordU32_lt" private inline : Word32.t * Word32.t -> Bool.t; +val mul = _import "WordU32_mul" private inline : Word32.t * Word32.t -> Word32.t; +val mulCheckP = _import "WordU32_mulCheckP" private inline : Word32.t * Word32.t -> Bool.t; +val negCheckP = _import "WordU32_negCheckP" private inline : Word32.t -> Bool.t; +val quot = _import "WordU32_quot" private inline : Word32.t * Word32.t -> Word32.t; +val rem = _import "WordU32_rem" private inline : Word32.t * Word32.t -> Word32.t; val rndToReal32 = _import "WordU32_rndToReal32" private : Word32.t -> Real32.t; val rndToReal64 = _import "WordU32_rndToReal64" private : Word32.t -> Real64.t; -val rshift = _import "WordU32_rshift" private : Word32.t * Word32.t -> Word32.t; +val rshift = _import "WordU32_rshift" private inline : Word32.t * Word32.t -> Word32.t; +val subCheckP = _import "WordU32_subCheckP" private inline : Word32.t * Word32.t -> Bool.t; end structure WordU64 = struct -val addCheckOverflows = _import "WordU64_addCheckOverflows" private : Word64.t * Word64.t -> Bool.t; -val extdToWord16 = _import "WordU64_extdToWord16" private : Word64.t -> Word16.t; -val extdToWord32 = _import "WordU64_extdToWord32" private : Word64.t -> Word32.t; -val extdToWord64 = _import "WordU64_extdToWord64" private : Word64.t -> Word64.t; -val extdToWord8 = _import "WordU64_extdToWord8" private : Word64.t -> Word8.t; -val ge = _import "WordU64_ge" private : Word64.t * Word64.t -> Bool.t; -val gt = _import "WordU64_gt" private : Word64.t * Word64.t -> Bool.t; -val le = _import "WordU64_le" private : Word64.t * Word64.t -> Bool.t; -val lt = _import "WordU64_lt" private : Word64.t * Word64.t -> Bool.t; -val mul = _import "WordU64_mul" private : Word64.t * Word64.t -> Word64.t; -val mulCheckOverflows = _import "WordU64_mulCheckOverflows" private : Word64.t * Word64.t -> Bool.t; -val quot = _import "WordU64_quot" private : Word64.t * Word64.t -> Word64.t; -val rem = _import "WordU64_rem" private : Word64.t * Word64.t -> Word64.t; +val addCheckP = _import "WordU64_addCheckP" private inline : Word64.t * Word64.t -> Bool.t; +val extdToWord16 = _import "WordU64_extdToWord16" private inline : Word64.t -> Word16.t; +val extdToWord32 = _import "WordU64_extdToWord32" private inline : Word64.t -> Word32.t; +val extdToWord64 = _import "WordU64_extdToWord64" private inline : Word64.t -> Word64.t; +val extdToWord8 = _import "WordU64_extdToWord8" private inline : Word64.t -> Word8.t; +val ge = _import "WordU64_ge" private inline : Word64.t * Word64.t -> Bool.t; +val gt = _import "WordU64_gt" private inline : Word64.t * Word64.t -> Bool.t; +val le = _import "WordU64_le" private inline : Word64.t * Word64.t -> Bool.t; +val lt = _import "WordU64_lt" private inline : Word64.t * Word64.t -> Bool.t; +val mul = _import "WordU64_mul" private inline : Word64.t * Word64.t -> Word64.t; +val mulCheckP = _import "WordU64_mulCheckP" private inline : Word64.t * Word64.t -> Bool.t; +val negCheckP = _import "WordU64_negCheckP" private inline : Word64.t -> Bool.t; +val quot = _import "WordU64_quot" private inline : Word64.t * Word64.t -> Word64.t; +val rem = _import "WordU64_rem" private inline : Word64.t * Word64.t -> Word64.t; val rndToReal32 = _import "WordU64_rndToReal32" private : Word64.t -> Real32.t; val rndToReal64 = _import "WordU64_rndToReal64" private : Word64.t -> Real64.t; -val rshift = _import "WordU64_rshift" private : Word64.t * Word32.t -> Word64.t; +val rshift = _import "WordU64_rshift" private inline : Word64.t * Word32.t -> Word64.t; +val subCheckP = _import "WordU64_subCheckP" private inline : Word64.t * Word64.t -> Bool.t; end structure WordU8 = struct -val addCheckOverflows = _import "WordU8_addCheckOverflows" private : Word8.t * Word8.t -> Bool.t; -val extdToWord16 = _import "WordU8_extdToWord16" private : Word8.t -> Word16.t; -val extdToWord32 = _import "WordU8_extdToWord32" private : Word8.t -> Word32.t; -val extdToWord64 = _import "WordU8_extdToWord64" private : Word8.t -> Word64.t; -val extdToWord8 = _import "WordU8_extdToWord8" private : Word8.t -> Word8.t; -val ge = _import "WordU8_ge" private : Word8.t * Word8.t -> Bool.t; -val gt = _import "WordU8_gt" private : Word8.t * Word8.t -> Bool.t; -val le = _import "WordU8_le" private : Word8.t * Word8.t -> Bool.t; -val lt = _import "WordU8_lt" private : Word8.t * Word8.t -> Bool.t; -val mul = _import "WordU8_mul" private : Word8.t * Word8.t -> Word8.t; -val mulCheckOverflows = _import "WordU8_mulCheckOverflows" private : Word8.t * Word8.t -> Bool.t; -val quot = _import "WordU8_quot" private : Word8.t * Word8.t -> Word8.t; -val rem = _import "WordU8_rem" private : Word8.t * Word8.t -> Word8.t; +val addCheckP = _import "WordU8_addCheckP" private inline : Word8.t * Word8.t -> Bool.t; +val extdToWord16 = _import "WordU8_extdToWord16" private inline : Word8.t -> Word16.t; +val extdToWord32 = _import "WordU8_extdToWord32" private inline : Word8.t -> Word32.t; +val extdToWord64 = _import "WordU8_extdToWord64" private inline : Word8.t -> Word64.t; +val extdToWord8 = _import "WordU8_extdToWord8" private inline : Word8.t -> Word8.t; +val ge = _import "WordU8_ge" private inline : Word8.t * Word8.t -> Bool.t; +val gt = _import "WordU8_gt" private inline : Word8.t * Word8.t -> Bool.t; +val le = _import "WordU8_le" private inline : Word8.t * Word8.t -> Bool.t; +val lt = _import "WordU8_lt" private inline : Word8.t * Word8.t -> Bool.t; +val mul = _import "WordU8_mul" private inline : Word8.t * Word8.t -> Word8.t; +val mulCheckP = _import "WordU8_mulCheckP" private inline : Word8.t * Word8.t -> Bool.t; +val negCheckP = _import "WordU8_negCheckP" private inline : Word8.t -> Bool.t; +val quot = _import "WordU8_quot" private inline : Word8.t * Word8.t -> Word8.t; +val rem = _import "WordU8_rem" private inline : Word8.t * Word8.t -> Word8.t; val rndToReal32 = _import "WordU8_rndToReal32" private : Word8.t -> Real32.t; val rndToReal64 = _import "WordU8_rndToReal64" private : Word8.t -> Real64.t; -val rshift = _import "WordU8_rshift" private : Word8.t * Word32.t -> Word8.t; +val rshift = _import "WordU8_rshift" private inline : Word8.t * Word32.t -> Word8.t; +val subCheckP = _import "WordU8_subCheckP" private inline : Word8.t * Word8.t -> Bool.t; end end end diff -Nru mlton-20130715/basis-library/primitive/check-real.sml mlton-20210117+dfsg/basis-library/primitive/check-real.sml --- mlton-20130715/basis-library/primitive/check-real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/check-real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2012,2013 Matthew Fluet. +(* Copyright (C) 2012,2013,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -20,11 +20,9 @@ val () = check (R1.Math.atan2, R2.Math.atan2) val () = check (R1.Math.cos, R2.Math.cos) val () = check (R1.Math.cosh, R2.Math.cosh) - val () = check (fn () => R1.Math.e, R2.Math.eGet) val () = check (R1.Math.exp, R2.Math.exp) val () = check (R1.Math.ln, R2.Math.ln) val () = check (R1.Math.log10, R2.Math.log10) - val () = check (fn () => R1.Math.pi, R2.Math.piGet) val () = check (R1.Math.pow, R2.Math.pow) val () = check (R1.Math.sin, R2.Math.sin) val () = check (R1.Math.sinh, R2.Math.sinh) @@ -61,11 +59,9 @@ val () = check (R1.Math.atan2, R2.Math.atan2) val () = check (R1.Math.cos, R2.Math.cos) val () = check (R1.Math.cosh, R2.Math.cosh) - val () = check (fn () => R1.Math.e, R2.Math.eGet) val () = check (R1.Math.exp, R2.Math.exp) val () = check (R1.Math.ln, R2.Math.ln) val () = check (R1.Math.log10, R2.Math.log10) - val () = check (fn () => R1.Math.pi, R2.Math.piGet) val () = check (R1.Math.pow, R2.Math.pow) val () = check (R1.Math.sin, R2.Math.sin) val () = check (R1.Math.sinh, R2.Math.sinh) diff -Nru mlton-20130715/basis-library/primitive/prim1.sml mlton-20210117+dfsg/basis-library/primitive/prim1.sml --- mlton-20130715/basis-library/primitive/prim1.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim1.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -49,10 +49,22 @@ exception Fail32 of String32.string exception Overflow exception Size + exception Span exception Subscript - val wrapOverflow: ('a -> 'b) -> ('a -> 'b) = - fn f => fn a => f a handle PrimOverflow => raise Overflow + (* Fusing of adjacent `Word_` and `Word{S,U}_CheckP` primitives + * by the codegens may depend on the relative order of `!a` and `?a`; + * see: + * - /mlton/codegen/amd64-codegen/amd64-simplify.fun:elimALRedundant + * - /mlton/codegen/c-codegen/c-codegen.fun:outputStatementsFuseOpAndChk + * - /mlton/codegen/llvm-codegen/llvm-codegen.fun:outputStatementsFuseOpAndChk + * - /mlton/codegen/x86-codegen/x86-simplify.fun:elimALRedundant + *) + val mkOverflow: ('a -> 'b) * ('a -> bool) -> ('a -> 'b) = + fn (!, ?) => fn a => + let val r = ! a + in if ? a then raise Overflow else r + end end structure Order = @@ -92,6 +104,7 @@ exception Match = Primitive.Exn.Match exception Overflow = Primitive.Exn.Overflow exception Size = Primitive.Exn.Size +exception Span = Primitive.Exn.Span exception Subscript = Primitive.Exn.Subscript datatype option = datatype Primitive.Option.option diff -Nru mlton-20130715/basis-library/primitive/prim2.sml mlton-20210117+dfsg/basis-library/primitive/prim2.sml --- mlton-20130715/basis-library/primitive/prim2.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim2.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -10,12 +11,6 @@ struct open Primitive - structure MLton = - struct - open MLton - val bug = PrimitiveFFI.MLton.bug - end - val dontInline: (unit -> 'a) -> 'a = fn f => let @@ -56,7 +51,6 @@ val _ = P.TopLevel.setSuffix (fn () => - (P.MLton.halt 0 - ; P.MLton.bug ("missing suffix in Basis Library"))) + P.MLton.bug ("missing suffix in Basis Library")) in end diff -Nru mlton-20130715/basis-library/primitive/prim-basis.mlb mlton-20210117+dfsg/basis-library/primitive/prim-basis.mlb --- mlton-20130715/basis-library/primitive/prim-basis.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-basis.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,15 +1,15 @@ (* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "allowPrim true" "deadCode true" - "nonexhaustiveMatch warn" - "redundantMatch warn" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" "warnUnused true" in diff -Nru mlton-20130715/basis-library/primitive/prim-basis.sml mlton-20210117+dfsg/basis-library/primitive/prim-basis.sml --- mlton-20130715/basis-library/primitive/prim-basis.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-basis.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -20,7 +20,6 @@ type exn = t exception Bind = Bind exception Match = Match - exception PrimOverflow = Overflow end structure List = struct diff -Nru mlton-20130715/basis-library/primitive/prim-char.sml mlton-20210117+dfsg/basis-library/primitive/prim-char.sml --- mlton-20130715/basis-library/primitive/prim-char.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-char.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/primitive/prim-int-inf.sml mlton-20210117+dfsg/basis-library/primitive/prim-int-inf.sml --- mlton-20130715/basis-library/primitive/prim-int-inf.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-int-inf.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/primitive/prim-int.sml mlton-20210117+dfsg/basis-library/primitive/prim-int.sml --- mlton-20130715/basis-library/primitive/prim-int.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-int.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -17,18 +18,22 @@ val sizeInBitsWord: Primitive.Word32.word val precision: Primitive.Int32.int option + val +? : int * int -> bool val +! : int * int -> int - val +? : int * int -> int + val +$ : int * int -> int val + : int * int -> int - val *! : int * int -> int - val *? : int * int -> int + val *? : int * int -> bool + val *! : int * int -> int + val *$ : int * int -> int val * : int * int -> int + val ~? : int -> bool val ~! : int -> int - val ~? : int -> int + val ~$ : int -> int val ~ : int -> int val quotUnsafe: int * int -> int + val -? : int * int -> bool val -! : int * int -> int - val -? : int * int -> int + val -$ : int * int -> int val - : int * int -> int val remUnsafe: int * int -> int @@ -110,31 +115,28 @@ IntWordConv.zextdFromInt32ToWord32 sizeInBits val precision = SOME sizeInBits - val +! = Exn.wrapOverflow (_prim "WordS8_addCheck": int * int -> int;) - val +? = _prim "Word8_add": int * int -> int; - val + = - if Controls.detectOverflow - then +! - else +? - val *! = Exn.wrapOverflow (_prim "WordS8_mulCheck": int * int -> int;) - val *? = _prim "WordS8_mul": int * int -> int; - val * = - if Controls.detectOverflow - then *! - else *? - val ~! = Exn.wrapOverflow (_prim "Word8_negCheck": int -> int;) - val ~? = _prim "Word8_neg": int -> int; - val ~ = - if Controls.detectOverflow - then ~! - else ~? + val +? = _prim "WordS8_addCheckP": int * int -> bool; + val +! = _prim "Word8_add": int * int -> int; + val +$ = Exn.mkOverflow (+!, +?) + val + = if Controls.detectOverflow then +$ else +! + + val *? = _prim "WordS8_mulCheckP": int * int -> bool; + val *! = _prim "WordS8_mul": int * int -> int; + val *$ = Exn.mkOverflow ( *!, *? ) + val * = if Controls.detectOverflow then *$ else *! + + val ~? = _prim "WordS8_negCheckP": int -> bool; + val ~! = _prim "Word8_neg": int -> int; + val ~$ = Exn.mkOverflow (~!, ~?) + val ~ = if Controls.detectOverflow then ~$ else ~! + val quotUnsafe = _prim "WordS8_quot": int * int -> int; - val -! = Exn.wrapOverflow (_prim "WordS8_subCheck": int * int -> int;) - val -? = _prim "Word8_sub": int * int -> int; - val - = - if Controls.detectOverflow - then -! - else -? + + val -? = _prim "WordS8_subCheckP": int * int -> bool; + val -! = _prim "Word8_sub": int * int -> int; + val -$ = Exn.mkOverflow (-!, -?) + val - = if Controls.detectOverflow then -$ else -! + val remUnsafe = _prim "WordS8_rem": int * int -> int; val < = _prim "WordS8_lt": int * int -> bool; @@ -213,31 +215,28 @@ IntWordConv.zextdFromInt32ToWord32 sizeInBits val precision = SOME sizeInBits - val +! = Exn.wrapOverflow (_prim "WordS16_addCheck": int * int -> int;) - val +? = _prim "Word16_add": int * int -> int; - val + = - if Controls.detectOverflow - then +! - else +? - val *! = Exn.wrapOverflow (_prim "WordS16_mulCheck": int * int -> int;) - val *? = _prim "WordS16_mul": int * int -> int; - val * = - if Controls.detectOverflow - then *! - else *? - val ~! = Exn.wrapOverflow (_prim "Word16_negCheck": int -> int;) - val ~? = _prim "Word16_neg": int -> int; - val ~ = - if Controls.detectOverflow - then ~! - else ~? + val +? = _prim "WordS16_addCheckP": int * int -> bool; + val +! = _prim "Word16_add": int * int -> int; + val +$ = Exn.mkOverflow (+!, +?) + val + = if Controls.detectOverflow then +$ else +! + + val *? = _prim "WordS16_mulCheckP": int * int -> bool; + val *! = _prim "WordS16_mul": int * int -> int; + val *$ = Exn.mkOverflow ( *!, *? ) + val * = if Controls.detectOverflow then *$ else *! + + val ~? = _prim "WordS16_negCheckP": int -> bool; + val ~! = _prim "Word16_neg": int -> int; + val ~$ = Exn.mkOverflow (~!, ~?) + val ~ = if Controls.detectOverflow then ~$ else ~! + val quotUnsafe = _prim "WordS16_quot": int * int -> int; - val -! = Exn.wrapOverflow (_prim "WordS16_subCheck": int * int -> int;) - val -? = _prim "Word16_sub": int * int -> int; - val - = - if Controls.detectOverflow - then -! - else -? + + val -? = _prim "WordS16_subCheckP": int * int -> bool; + val -! = _prim "Word16_sub": int * int -> int; + val -$ = Exn.mkOverflow (-!, -?) + val - = if Controls.detectOverflow then -$ else -! + val remUnsafe = _prim "WordS16_rem": int * int -> int; val < = _prim "WordS16_lt": int * int -> bool; @@ -380,31 +379,28 @@ IntWordConv.zextdFromInt32ToWord32 sizeInBits val precision = SOME sizeInBits - val +! = Exn.wrapOverflow (_prim "WordS32_addCheck": int * int -> int;) - val +? = _prim "Word32_add": int * int -> int; - val + = - if Controls.detectOverflow - then +! - else +? - val *! = Exn.wrapOverflow (_prim "WordS32_mulCheck": int * int -> int;) - val *? = _prim "WordS32_mul": int * int -> int; - val * = - if Controls.detectOverflow - then *! - else *? - val ~! = Exn.wrapOverflow (_prim "Word32_negCheck": int -> int;) - val ~? = _prim "Word32_neg": int -> int; - val ~ = - if Controls.detectOverflow - then ~! - else ~? + val +? = _prim "WordS32_addCheckP": int * int -> bool; + val +! = _prim "Word32_add": int * int -> int; + val +$ = Exn.mkOverflow (+!, +?) + val + = if Controls.detectOverflow then +$ else +! + + val *? = _prim "WordS32_mulCheckP": int * int -> bool; + val *! = _prim "WordS32_mul": int * int -> int; + val *$ = Exn.mkOverflow ( *!, *? ) + val * = if Controls.detectOverflow then *$ else *! + + val ~? = _prim "WordS32_negCheckP": int -> bool; + val ~! = _prim "Word32_neg": int -> int; + val ~$ = Exn.mkOverflow (~!, ~?) + val ~ = if Controls.detectOverflow then ~$ else ~! + val quotUnsafe = _prim "WordS32_quot": int * int -> int; - val -! = Exn.wrapOverflow (_prim "WordS32_subCheck": int * int -> int;) - val -? = _prim "Word32_sub": int * int -> int; - val - = - if Controls.detectOverflow - then -! - else -? + + val -? = _prim "WordS32_subCheckP": int * int -> bool; + val -! = _prim "Word32_sub": int * int -> int; + val -$ = Exn.mkOverflow (-!, -?) + val - = if Controls.detectOverflow then -$ else -! + val remUnsafe = _prim "WordS32_rem": int * int -> int; val < = _prim "WordS32_lt": int * int -> bool; @@ -427,31 +423,28 @@ IntWordConv.zextdFromInt32ToWord32 sizeInBits val precision = SOME sizeInBits - val +! = Exn.wrapOverflow (_prim "WordS64_addCheck": int * int -> int;) - val +? = _prim "Word64_add": int * int -> int; - val + = - if Controls.detectOverflow - then +! - else +? - val *! = Exn.wrapOverflow (_prim "WordS64_mulCheck": int * int -> int;) - val *? = _prim "WordS64_mul": int * int -> int; - val * = - if Controls.detectOverflow - then *! - else *? - val ~! = Exn.wrapOverflow (_prim "Word64_negCheck": int -> int;) - val ~? = _prim "Word64_neg": int -> int; - val ~ = - if Controls.detectOverflow - then ~! - else ~? + val +? = _prim "WordS64_addCheckP": int * int -> bool; + val +! = _prim "Word64_add": int * int -> int; + val +$ = Exn.mkOverflow (+!, +?) + val + = if Controls.detectOverflow then +$ else +! + + val *? = _prim "WordS64_mulCheckP": int * int -> bool; + val *! = _prim "WordS64_mul": int * int -> int; + val *$ = Exn.mkOverflow ( *!, *? ) + val * = if Controls.detectOverflow then *$ else *! + + val ~? = _prim "WordS64_negCheckP": int -> bool; + val ~! = _prim "Word64_neg": int -> int; + val ~$ = Exn.mkOverflow (~!, ~?) + val ~ = if Controls.detectOverflow then ~$ else ~! + val quotUnsafe = _prim "WordS64_quot": int * int -> int; - val -! = Exn.wrapOverflow (_prim "WordS64_subCheck": int * int -> int;) - val -? = _prim "Word64_sub": int * int -> int; - val - = - if Controls.detectOverflow - then -! - else -? + + val -? = _prim "WordS64_subCheckP": int * int -> bool; + val -! = _prim "Word64_sub": int * int -> int; + val -$ = Exn.mkOverflow (-!, -?) + val - = if Controls.detectOverflow then -$ else -! + val remUnsafe = _prim "WordS64_rem": int * int -> int; val < = _prim "WordS64_lt": int * int -> bool; diff -Nru mlton-20130715/basis-library/primitive/primitive.mlb mlton-20210117+dfsg/basis-library/primitive/primitive.mlb --- mlton-20130715/basis-library/primitive/primitive.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/primitive.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,22 +1,23 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2016-2017,2019 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "allowConstant true" "allowFFI true" "allowPrim true" "deadCode true" - "nonexhaustiveMatch warn" - "redundantMatch warn" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" "warnUnused false" in prim-basis.mlb - ann "allowRebindEquals true" in + ann "allowRedefineSpecialIds true" in prim1.sml end ../util/integral-comparisons.sml @@ -49,7 +50,6 @@ ../config/bind/word-prim.sml in ann "forceUsed" in ../config/objptr/objptr-$(OBJPTR_REP).sml - ../config/header/header-$(HEADER_WORD).sml ../config/seqindex/seqindex-$(SEQINDEX_INT).sml $(LIB_MLTON_DIR)/targets/$(TARGET)/sml/c-types.sml ../config/c/errno.sml @@ -59,6 +59,10 @@ prim-seq.sml prim-nullstring.sml + prim-mlton.sml + + basis-ffi.sml + prim-int-inf.sml prim-char.sml @@ -69,9 +73,6 @@ prim-pack-word.sml prim-pack-real.sml - prim-mlton.sml - - basis-ffi.sml prim2.sml (* Check compatibility between primitives and runtime functions. *) diff -Nru mlton-20130715/basis-library/primitive/prim-iwconv.sml mlton-20210117+dfsg/basis-library/primitive/prim-iwconv.sml --- mlton-20130715/basis-library/primitive/prim-iwconv.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-iwconv.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/primitive/prim-mlton.sml mlton-20210117+dfsg/basis-library/primitive/prim-mlton.sml --- mlton-20130715/basis-library/primitive/prim-mlton.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-mlton.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2010-2011 Matthew Fluet. +(* Copyright (C) 2010-2011,2013-2014,2017,2019 Matthew Fluet. * Copyright (C) 1999-2009 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,6 +15,14 @@ structure MLton = struct +structure GCState = + struct + type t = Pointer.t + + val gcState = _prim "GC_state": unit -> t; + end + +val bug = _prim "MLton_bug": String8.string -> unit; val eq = _prim "MLton_eq": 'a * 'a -> bool; val equal = _prim "MLton_equal": 'a * 'a -> bool; (* val deserialize = _prim "MLton_deserialize": Word8Vector.vector -> 'a ref; *) @@ -22,18 +30,12 @@ val hash = _prim "MLton_hash": 'a -> Word32.word; (* val serialize = _prim "MLton_serialize": 'a ref -> Word8Vector.vector; *) val share = _prim "MLton_share": 'a -> unit; -val size = _prim "MLton_size": 'a ref -> C_Size.t; +val size = _prim "MLton_size": 'a -> C_Size.t; +val sizeAll = _import "GC_sizeAll" runtime private: GCState.t -> C_Size.t; val installSignalHandler = _prim "MLton_installSignalHandler": unit -> unit; -structure GCState = - struct - type t = Pointer.t - - val gcState = #1 _symbol "gcStateAddress" private: t GetSet.t; () - end - structure Align = struct datatype t = Align4 | Align8 @@ -51,30 +53,31 @@ datatype t = T of Word32.word array val callStack = - _import "GC_callStack" private: GCState.t * Word32.word array -> unit; + _import "GC_callStack" runtime private: GCState.t * Word32.word array -> unit; val frameIndexSourceSeq = - _import "GC_frameIndexSourceSeq" private: GCState.t * Word32.word -> Pointer.t; + _import "GC_frameIndexSourceSeq" runtime private: GCState.t * Word32.word -> Pointer.t; val keep = _command_line_const "CallStack.keep": bool = false; val numStackFrames = - _import "GC_numStackFrames" private: GCState.t -> Word32.word; - val sourceName = _import "GC_sourceName" private: GCState.t * Word32.word -> C_String.t; + _import "GC_numStackFrames" runtime private: GCState.t -> Word32.word; + val sourceName = _import "GC_sourceName" runtime private: GCState.t * Word32.word -> C_String.t; end structure Codegen = struct - datatype t = amd64 | C | x86 + datatype t = AMD64 | C | LLVM | X86 val codegen = case _build_const "MLton_Codegen_codegen": Int32.int; of 0 => C - | 1 => x86 - | 2 => amd64 + | 1 => X86 + | 2 => AMD64 + | 3 => LLVM | _ => raise Primitive.Exn.Fail8 "MLton_Codegen_codegen" val isC = codegen = C - val isX86 = codegen = x86 - val isAmd64 = codegen = amd64 - (* val isNative = isX86 orelse isAmd64 *) + val isAMD64 = codegen = AMD64 + val isLLVM = codegen = LLVM + val isX86 = codegen = X86 end structure Exn = @@ -106,7 +109,7 @@ structure FFI = struct - val getOpArgsResPtr = #1 _symbol "MLton_FFI_opArgsResPtr" private: Pointer.t GetSet.t; + val getOpArgsResPtr = _import "GC_getCallFromCOpArgsResPtr" runtime private: GCState.t -> Pointer.t; val numExports = _build_const "MLton_FFI_numExports": Int32.int; end @@ -118,26 +121,26 @@ structure GC = struct val collect = _prim "GC_collect": unit -> unit; - val pack = _import "GC_pack" private: GCState.t -> unit; + val pack = _import "GC_pack" runtime private: GCState.t -> unit; val getBytesAllocated = - _import "GC_getCumulativeStatisticsBytesAllocated" private: GCState.t -> C_UIntmax.t; + _import "GC_getCumulativeStatisticsBytesAllocated" runtime private: GCState.t -> C_UIntmax.t; val getNumCopyingGCs = - _import "GC_getCumulativeStatisticsNumCopyingGCs" private: GCState.t -> C_UIntmax.t; + _import "GC_getCumulativeStatisticsNumCopyingGCs" runtime private: GCState.t -> C_UIntmax.t; val getNumMarkCompactGCs = - _import "GC_getCumulativeStatisticsNumMarkCompactGCs" private: GCState.t -> C_UIntmax.t; + _import "GC_getCumulativeStatisticsNumMarkCompactGCs" runtime private: GCState.t -> C_UIntmax.t; val getNumMinorGCs = - _import "GC_getCumulativeStatisticsNumMinorGCs" private: GCState.t -> C_UIntmax.t; + _import "GC_getCumulativeStatisticsNumMinorGCs" runtime private: GCState.t -> C_UIntmax.t; val getLastBytesLive = - _import "GC_getLastMajorStatisticsBytesLive" private: GCState.t -> C_Size.t; + _import "GC_getLastMajorStatisticsBytesLive" runtime private: GCState.t -> C_Size.t; val getMaxBytesLive = - _import "GC_getCumulativeStatisticsMaxBytesLive" private: GCState.t -> C_Size.t; + _import "GC_getCumulativeStatisticsMaxBytesLive" runtime private: GCState.t -> C_Size.t; val setHashConsDuringGC = - _import "GC_setHashConsDuringGC" private: GCState.t * bool -> unit; - val setMessages = _import "GC_setControlsMessages" private: GCState.t * bool -> unit; + _import "GC_setHashConsDuringGC" runtime private: GCState.t * bool -> unit; + val setMessages = _import "GC_setControlsMessages" runtime private: GCState.t * bool -> unit; val setRusageMeasureGC = - _import "GC_setControlsRusageMeasureGC" private: GCState.t * bool -> unit; - val setSummary = _import "GC_setControlsSummary" private: GCState.t * bool -> unit; - val unpack = _import "GC_unpack" private: GCState.t -> unit; + _import "GC_setControlsRusageMeasureGC" runtime private: GCState.t * bool -> unit; + val setSummary = _import "GC_setControlsSummary" runtime private: GCState.t * bool -> unit; + val unpack = _import "GC_unpack" runtime private: GCState.t -> unit; end structure Platform = @@ -155,6 +158,7 @@ | MIPS | PowerPC | PowerPC64 + | RISCV | S390 | Sparc | X86 @@ -171,6 +175,7 @@ | "mips" => MIPS | "powerpc" => PowerPC | "powerpc64" => PowerPC64 + | "riscv" => RISCV | "s390" => S390 | "sparc" => Sparc | "x86" => X86 @@ -299,14 +304,14 @@ type t = Pointer.t val dummy = Pointer.null - val free = _import "GC_profileFree" private: GCState.t * t -> unit; - val malloc = _import "GC_profileMalloc" private: GCState.t -> t; + val free = _import "GC_profileFree" runtime private: GCState.t * t -> unit; + val malloc = _import "GC_profileMalloc" runtime private: GCState.t -> t; val write = - _import "GC_profileWrite" private: GCState.t * t * NullString8.t -> unit; + _import "GC_profileWrite" runtime private: GCState.t * t * NullString8.t -> unit; end - val done = _import "GC_profileDone" private: GCState.t -> unit; - val getCurrent = _import "GC_getProfileCurrent" private: GCState.t -> Data.t; - val setCurrent = _import "GC_setProfileCurrent" private : GCState.t * Data.t -> unit; + val done = _import "GC_profileDone" runtime private: GCState.t -> unit; + val getCurrent = _import "GC_getProfileCurrent" runtime private: GCState.t -> Data.t; + val setCurrent = _import "GC_setProfileCurrent" runtime private : GCState.t * Data.t -> unit; end structure Thread = @@ -335,17 +340,17 @@ * switching to a copy. *) val copyCurrent = _prim "Thread_copyCurrent": unit -> unit; - val current = _import "GC_getCurrentThread" private: GCState.t -> thread; - val finishSignalHandler = _import "GC_finishSignalHandler" private: GCState.t -> unit; + val current = _import "GC_getCurrentThread" runtime private: GCState.t -> thread; + val finishSignalHandler = _import "GC_finishSignalHandler" runtime private: GCState.t -> unit; val returnToC = _prim "Thread_returnToC": unit -> unit; - val saved = _import "GC_getSavedThread" private: GCState.t -> thread; - val savedPre = _import "GC_getSavedThread" private: GCState.t -> preThread; + val saved = _import "GC_getSavedThread" runtime private: GCState.t -> thread; + val savedPre = _import "GC_getSavedThread" runtime private: GCState.t -> preThread; val setCallFromCHandler = - _import "GC_setCallFromCHandlerThread" private: GCState.t * thread -> unit; + _import "GC_setCallFromCHandlerThread" runtime private: GCState.t * thread -> unit; val setSignalHandler = - _import "GC_setSignalHandlerThread" private: GCState.t * thread -> unit; - val setSaved = _import "GC_setSavedThread" private: GCState.t * thread -> unit; - val startSignalHandler = _import "GC_startSignalHandler" private: GCState.t -> unit; + _import "GC_setSignalHandlerThread" runtime private: GCState.t * thread -> unit; + val setSaved = _import "GC_setSavedThread" runtime private: GCState.t * thread -> unit; + val startSignalHandler = _import "GC_startSignalHandler" runtime private: GCState.t -> unit; val switchTo = _prim "Thread_switchTo": thread -> unit; end @@ -360,9 +365,9 @@ structure World = struct - val getAmOriginal = _import "GC_getAmOriginal" private: GCState.t -> bool; - val setAmOriginal = _import "GC_setAmOriginal" private: GCState.t * bool -> unit; - val getSaveStatus = _import "GC_getSaveWorldStatus" private: GCState.t -> bool C_Errno.t; + val getAmOriginal = _import "GC_getAmOriginal" runtime private: GCState.t -> bool; + val setAmOriginal = _import "GC_setAmOriginal" runtime private: GCState.t * bool -> unit; + val getSaveStatus = _import "GC_getSaveWorldStatus" runtime private: GCState.t -> bool C_Errno.t; (* save's result status is accesible via getSaveStatus (). * It is not possible to have the type of save as * NullString8.t -> bool C_Errno.t, because there are two @@ -380,4 +385,6 @@ end +structure GCState = MLton.GCState + end diff -Nru mlton-20130715/basis-library/primitive/prim-nullstring.sml mlton-20210117+dfsg/basis-library/primitive/prim-nullstring.sml --- mlton-20130715/basis-library/primitive/prim-nullstring.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-nullstring.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/primitive/prim-pack-real.sml mlton-20210117+dfsg/basis-library/primitive/prim-pack-real.sml --- mlton-20130715/basis-library/primitive/prim-pack-real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-pack-real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/primitive/prim-pack-word.sml mlton-20210117+dfsg/basis-library/primitive/prim-pack-word.sml --- mlton-20130715/basis-library/primitive/prim-pack-word.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-pack-word.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/primitive/prim-real.sml mlton-20210117+dfsg/basis-library/primitive/prim-real.sml --- mlton-20130715/basis-library/primitive/prim-real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2012,2013 Matthew Fluet. +(* Copyright (C) 2012,2013,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -103,6 +103,7 @@ structure Real32 : PRIM_REAL = struct + open PrimitiveFFI.Real32 open Real32 val realSize : Int32.int = 32 @@ -113,24 +114,21 @@ structure Math = struct type real = real + open Math val acos = _prim "Real32_Math_acos": real -> real; val asin = _prim "Real32_Math_asin": real -> real; val atan = _prim "Real32_Math_atan": real -> real; val atan2 = _prim "Real32_Math_atan2": real * real -> real; val cos = _prim "Real32_Math_cos": real -> real; - val cosh = _import "Real32_Math_cosh" private: real -> real; - val e = #1 _symbol "Real32_Math_e" private: real GetSet.t; () + val e = 2.71828182845904523536 : real val exp = _prim "Real32_Math_exp": real -> real; val ln = _prim "Real32_Math_ln": real -> real; val log10 = _prim "Real32_Math_log10": real -> real; - val pi = #1 _symbol "Real32_Math_pi" private: real GetSet.t; () - val pow = _import "Real32_Math_pow" private: real * real -> real; + val pi = 3.14159265358979323846 : real val sin = _prim "Real32_Math_sin": real -> real; - val sinh = _import "Real32_Math_sinh" private: real -> real; val sqrt = _prim "Real32_Math_sqrt": real -> real; val tan = _prim "Real32_Math_tan": real -> real; - val tanh = _import "Real32_Math_tanh" private: real -> real; end val * = _prim "Real32_mul": real * real -> real; @@ -145,15 +143,8 @@ val == = _prim "Real32_equal": real * real -> bool; val ?= = _prim "Real32_qequal": real * real -> bool; val abs = _prim "Real32_abs": real -> real; - val frexp = _import "Real32_frexp" private: real * C_Int.t ref -> real; - val gdtoa = _import "Real32_gdtoa" private: real * C_Int.t * C_Int.t * C_Int.t * C_Int.t ref -> C_String.t; val ldexp = _prim "Real32_ldexp": real * C_Int.t -> real; - val modf = _import "Real32_modf" private: real * real ref -> real; val round = _prim "Real32_round": real -> real; - val realCeil = _import "Real32_realCeil" private: real -> real; - val realFloor = _import "Real32_realFloor" private: real -> real; - val realTrunc = _import "Real32_realTrunc" private: real -> real; - val strtor = _import "Real32_strtor" private: NullString8.t * C_Int.t -> real; val fromInt8Unsafe = _prim "WordS8_rndToReal32": Int8.int -> real; val fromInt16Unsafe = _prim "WordS16_rndToReal32": Int16.int -> real; @@ -193,6 +184,7 @@ structure Real64 : PRIM_REAL = struct + open PrimitiveFFI.Real64 open Real64 val realSize : Int32.int = 64 @@ -203,24 +195,21 @@ structure Math = struct type real = real + open Math val acos = _prim "Real64_Math_acos": real -> real; val asin = _prim "Real64_Math_asin": real -> real; val atan = _prim "Real64_Math_atan": real -> real; val atan2 = _prim "Real64_Math_atan2": real * real -> real; val cos = _prim "Real64_Math_cos": real -> real; - val cosh = _import "Real64_Math_cosh" private: real -> real; - val e = #1 _symbol "Real64_Math_e" private: real GetSet.t; () + val e = 2.71828182845904523536 : real val exp = _prim "Real64_Math_exp": real -> real; val ln = _prim "Real64_Math_ln": real -> real; val log10 = _prim "Real64_Math_log10": real -> real; - val pi = #1 _symbol "Real64_Math_pi" private: real GetSet.t; () - val pow = _import "Real64_Math_pow" private: real * real -> real; + val pi = 3.14159265358979323846 : real val sin = _prim "Real64_Math_sin": real -> real; - val sinh = _import "Real64_Math_sinh" private: real -> real; val sqrt = _prim "Real64_Math_sqrt": real -> real; val tan = _prim "Real64_Math_tan": real -> real; - val tanh = _import "Real64_Math_tanh" private: real -> real; end val * = _prim "Real64_mul": real * real -> real; @@ -235,15 +224,8 @@ val == = _prim "Real64_equal": real * real -> bool; val ?= = _prim "Real64_qequal": real * real -> bool; val abs = _prim "Real64_abs": real -> real; - val frexp = _import "Real64_frexp" private: real * C_Int.t ref -> real; - val gdtoa = _import "Real64_gdtoa" private: real * C_Int.t * C_Int.t * C_Int.t * C_Int.t ref -> C_String.t; val ldexp = _prim "Real64_ldexp": real * C_Int.t -> real; - val modf = _import "Real64_modf" private: real * real ref -> real; val round = _prim "Real64_round": real -> real; - val realCeil = _import "Real64_realCeil" private: real -> real; - val realFloor = _import "Real64_realFloor" private: real -> real; - val realTrunc = _import "Real64_realTrunc" private: real -> real; - val strtor = _import "Real64_strtor" private: NullString8.t * C_Int.t -> real; val fromInt8Unsafe = _prim "WordS8_rndToReal64": Int8.int -> real; val fromInt16Unsafe = _prim "WordS16_rndToReal64": Int16.int -> real; diff -Nru mlton-20130715/basis-library/primitive/prim-seq.sml mlton-20210117+dfsg/basis-library/primitive/prim-seq.sml --- mlton-20130715/basis-library/primitive/prim-seq.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-seq.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,13 +16,33 @@ structure Array = struct open Array - val arrayUnsafe = _prim "Array_array": SeqIndex.int -> 'a array; - val array0Const = _prim "Array_array0Const": unit -> 'a array; + val allocUnsafe = _prim "Array_alloc": SeqIndex.int -> 'a array; + val copyArrayUnsafe = _prim "Array_copyArray": 'a array * SeqIndex.int * 'a array * SeqIndex.int * SeqIndex.int -> unit; + val copyVectorUnsafe = _prim "Array_copyVector": 'a array * SeqIndex.int * 'a vector * SeqIndex.int * SeqIndex.int -> unit; val length = _prim "Array_length": 'a array -> SeqIndex.int; (* There is no maximum length on arrays, so maxLen' = SeqIndex.maxInt'. *) (* val maxLen': SeqIndex.int = SeqIndex.maxInt' *) val subUnsafe = _prim "Array_sub": 'a array * SeqIndex.int -> 'a; + val uninitIsNop = _prim "Array_uninitIsNop": 'a array -> bool; + val uninitUnsafe = _prim "Array_uninit": 'a array * SeqIndex.int -> unit; val updateUnsafe = _prim "Array_update": 'a array * SeqIndex.int * 'a -> unit; + + structure Raw :> sig + type 'a rawarr + val allocUnsafe: SeqIndex.int -> 'a rawarr + val length: 'a rawarr -> SeqIndex.int + val toArrayUnsafe: 'a rawarr -> 'a array + val uninitIsNop: 'a rawarr -> bool + val uninitUnsafe: 'a rawarr * SeqIndex.int -> unit + end = + struct + type 'a rawarr = 'a array + val allocUnsafe = _prim "Array_allocRaw": SeqIndex.int -> 'a rawarr; + val length = length + val toArrayUnsafe = _prim "Array_toArray": 'a rawarr -> 'a array; + val uninitIsNop = uninitIsNop + val uninitUnsafe = uninitUnsafe + end end structure Vector = @@ -33,6 +54,7 @@ val fromArrayUnsafe = _prim "Array_toVector": 'a array -> 'a vector; val length = _prim "Vector_length": 'a vector -> SeqIndex.int; val subUnsafe = _prim "Vector_sub": 'a vector * SeqIndex.int -> 'a; + val vector0 = _prim "Vector_vector": unit -> 'a vector; end end diff -Nru mlton-20130715/basis-library/primitive/prim-string.sml mlton-20210117+dfsg/basis-library/primitive/prim-string.sml --- mlton-20130715/basis-library/primitive/prim-string.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-string.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/primitive/prim-word.sml mlton-20210117+dfsg/basis-library/primitive/prim-word.sml --- mlton-20130715/basis-library/primitive/prim-word.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/primitive/prim-word.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/real/IEEE-real.sml mlton-20210117+dfsg/basis-library/real/IEEE-real.sml --- mlton-20130715/basis-library/real/IEEE-real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/real/IEEE-real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/real/pack-real.sml mlton-20210117+dfsg/basis-library/real/pack-real.sml --- mlton-20130715/basis-library/real/pack-real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/real/pack-real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -251,7 +252,7 @@ fun toBytes (r: real): Word8Vector.vector = let - val a = Array.arrayUninit bytesPerElem + val a = Array.alloc bytesPerElem in (updA (a, 0, r) ; Word8Vector.fromPoly (Array.vector a)) diff -Nru mlton-20130715/basis-library/real/real-global.sml mlton-20210117+dfsg/basis-library/real/real-global.sml --- mlton-20130715/basis-library/real/real-global.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/real/real-global.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/real/real.sml mlton-20210117+dfsg/basis-library/real/real.sml --- mlton-20130715/basis-library/real/real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/real/real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2011-2013 Matthew Fluet. +(* Copyright (C) 2011-2014,2017,2019-2020 Matthew Fluet. * Copyright (C) 2003-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -179,16 +179,7 @@ fun isNormal r = class r = NORMAL - val op ?= = - if MLton.Codegen.isX86 orelse MLton.Codegen.isAmd64 - then R.?= - else - fn (x, y) => - case (class x, class y) of - (NAN, _) => true - | (_, NAN) => true - | (ZERO, ZERO) => true - | _ => R.== (x, y) + val op ?= = R.?= fun min (x, y) = if x <= y then x @@ -382,7 +373,7 @@ Int.+ (4 (* "0." + "E" + "\000" *), Int.+ (List.length digits, String.size exp))) - val a = Array.arrayUninit n + val a = Array.alloc n fun upd (i, c) = (Array.update (a, i, c); Int.+ (i, 1)) val i = 0 val i = if sign then upd (i, #"-") else i @@ -428,7 +419,7 @@ (* toDecimal, fmt, toString: binary -> decimal conversions. *) datatype mode = Fix | Gen | Sci local - val one = One.make (fn () => ref (0: C_Int.int)) + val decpt = ref (0: C_Int.int) in fun gdtoa (x: real, mode: mode, ndig: int, rounding_mode: IEEEReal.rounding_mode) = @@ -445,10 +436,14 @@ | TO_NEGINF => 3 | TO_POSINF => 2 | TO_ZERO => 0 + val _ = Primitive.MLton.Thread.atomicBegin () in - One.use (one, fn decpt => - (Prim.gdtoa (x, mode, ndig, rounding, decpt), - C_Int.toInt (!decpt))) + DynamicWind.wind + (fn () => + (CUtil.C_String.toString + (Prim.gdtoa (x, mode, ndig, rounding, decpt)), + C_Int.toInt (!decpt)), + Primitive.MLton.Thread.atomicEnd) end end @@ -468,15 +463,15 @@ sign = signBit x} | c => let - val (cs, exp) = gdtoa (x, Gen, 0, TO_NEAREST) + val (s, exp) = gdtoa (x, Gen, 0, TO_NEAREST) fun loop (i, ac) = if Int.< (i, 0) then ac else loop (Int.- (i, 1), - (Int.- (Char.ord (CUtil.C_String.sub (cs, i)), + (Int.- (Char.ord (String.sub (s, i)), Char.ord #"0")) :: ac) - val digits = loop (Int.- (CUtil.C_String.length cs, 1), []) + val digits = loop (Int.- (String.size s, 1), []) in {class = c, digits = digits, @@ -487,16 +482,16 @@ datatype realfmt = datatype StringCvt.realfmt local - fun fix (sign: string, cs: CUtil.C_String.t, decpt: int, ndig: int): string = + fun fix (sign: string, s: String.string, decpt: int, ndig: int): string = let - val length = CUtil.C_String.length cs + val length = String.size s in if Int.< (decpt, 0) then concat [sign, "0.", String.new (Int.~ decpt, #"0"), - CUtil.C_String.toString cs, + s, String.new (Int.+ (Int.- (ndig, length), decpt), #"0")] @@ -508,7 +503,7 @@ else String.tabulate (decpt, fn i => if Int.< (i, length) - then CUtil.C_String.sub (cs, i) + then String.sub (s, i) else #"0") in if 0 = ndig @@ -522,7 +517,7 @@ val j = Int.+ (i, decpt) in if Int.< (j, length) - then CUtil.C_String.sub (cs, j) + then String.sub (s, j) else #"0" end) in @@ -533,10 +528,10 @@ fun sci (x: real, ndig: int): string = let val sign = if x < zero then "~" else "" - val (cs, decpt) = + val (s, decpt) = gdtoa (x, Sci, Int.+ (1, ndig), IEEEReal.getRoundingMode ()) - val length = CUtil.C_String.length cs - val whole = String.tabulate (1, fn _ => CUtil.C_String.sub (cs, 0)) + val length = String.size s + val whole = String.tabulate (1, fn _ => String.sub (s, 0)) val frac = if 0 = ndig then "" @@ -547,7 +542,7 @@ val j = Int.+ (i, 1) in if Int.< (j, length) - then CUtil.C_String.sub (cs, j) + then String.sub (s, j) else #"0" end)] val exp = Int.- (decpt, 1) @@ -622,10 +617,10 @@ fn x => let val sign = if x < zero then "~" else "" - val (cs, decpt) = + val (s, decpt) = gdtoa (x, Fix, n, IEEEReal.getRoundingMode ()) in - fix (sign, cs, decpt, n) + fix (sign, s, decpt, n) end end | GEN opt => diff -Nru mlton-20130715/basis-library/sml-nj/sml-nj.sml mlton-20210117+dfsg/basis-library/sml-nj/sml-nj.sml --- mlton-20130715/basis-library/sml-nj/sml-nj.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/sml-nj/sml-nj.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/sml-nj/unsafe.sig mlton-20210117+dfsg/basis-library/sml-nj/unsafe.sig --- mlton-20130715/basis-library/sml-nj/unsafe.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/sml-nj/unsafe.sig 2021-12-28 17:19:36.000000000 +0000 @@ -10,21 +10,32 @@ type array type elem + (* omit Size check; + * elements have indeterminate value + *) val create: int -> array + (* omit Subscript check *) val sub: array * int -> elem + (* omit Subscript check *) val update: array * int * elem -> unit end -(* sweeks took out update and create because vectors are immutable - * and mlton optimizations may break if you update them. +(* SML/NJ provides 'create' and 'update', + * but they are not provided with MLton, + * because vectors are immutable and optimizations may + * break if they are updated. *) signature UNSAFE_MONO_VECTOR = sig type elem type vector + (* omit Size check; + * elements have indeterminate values *) (* val create: int -> vector *) + (* omit Subscript check *) val sub: vector * int -> elem + (* omit Subscript check *) (* val update: vector * int * elem -> unit *) end @@ -32,9 +43,44 @@ sig structure Array: sig + (* omit Size check; + * objptr(s) at elements set to bogus non-objptr value; + * non-objptr(s) at elements have indeterminate value + *) + val alloc: int -> 'a array + (* omit Size check; + * elements set to initial value + *) val create: int * 'a -> 'a array + (* omit Subscript check *) val sub: 'a array * int -> 'a + val uninitIsNop: 'a array -> bool + (* omit Subscript check; + * objptr(s) at element set to bogus non-objptr value + *) + val uninit: 'a array * int -> unit + (* omit Subscript check *) val update: 'a array * int * 'a -> unit + + structure Raw: + sig + type 'a rawarr + + (* omit Size check; + * objptr(s) at elements have indeterminate value; + * non-objptr(s) at elements have indeterminate value + *) + val alloc: int -> 'a rawarr + (* prereq: all objptr(s) at elements set to bogus + * non-objptr value (via uninit) + *) + val toArray: 'a rawarr -> 'a array + val uninitIsNop: 'a rawarr -> bool + (* omit Subscript check; + * objptr(s) at element set to bogus non-objptr value + *) + val uninit: 'a rawarr * int -> unit + end end structure BoolArray: UNSAFE_MONO_ARRAY structure BoolVector: UNSAFE_MONO_VECTOR @@ -66,7 +112,7 @@ structure Real64Vector: UNSAFE_MONO_VECTOR structure Vector: sig - (* val create: int -> 'a vector *) + (* val create: int * 'a list -> 'a vector *) val sub: 'a vector * int -> 'a end structure WordArray: UNSAFE_MONO_ARRAY diff -Nru mlton-20130715/basis-library/sml-nj/unsafe.sml mlton-20210117+dfsg/basis-library/sml-nj/unsafe.sml --- mlton-20130715/basis-library/sml-nj/unsafe.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/sml-nj/unsafe.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,7 +13,7 @@ val sub = unsafeSub val update = unsafeUpdate - val create = fromPoly o Array.arrayUninit + val create = fromPoly o Array.unsafeAlloc end functor UnsafeMonoVector (V: MONO_VECTOR_EXTRA): UNSAFE_MONO_VECTOR = @@ -45,9 +46,21 @@ struct structure Array = struct + val alloc = Array.unsafeAlloc val sub = Array.unsafeSub + val uninitIsNop = Array.uninitIsNop + val uninit = Array.unsafeUninit val update = Array.unsafeUpdate - val create = Array.array + val create = Array.unsafeArray + structure Raw = Array.Raw + structure Raw = + struct + type 'a rawarr = 'a Raw.rawarr + val alloc = Raw.unsafeAlloc + val toArray = Raw.unsafeToArray + val uninitIsNop = Raw.uninitIsNop + val uninit = Raw.unsafeUninit + end end structure BoolArray = UnsafeMonoArray (BoolArray) structure BoolVector = UnsafeMonoVector (BoolVector) diff -Nru mlton-20130715/basis-library/sml-nj.mlb mlton-20210117+dfsg/basis-library/sml-nj.mlb --- mlton-20130715/basis-library/sml-nj.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/sml-nj.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,15 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local diff -Nru mlton-20130715/basis-library/system/command-line.sml mlton-20210117+dfsg/basis-library/system/command-line.sml --- mlton-20130715/basis-library/system/command-line.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/system/command-line.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/system/date.sml mlton-20210117+dfsg/basis-library/system/date.sml --- mlton-20130715/basis-library/system/date.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/system/date.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,4 +1,5 @@ (* Modified from the ML Kit 4.1.4; basislib/Date.sml + * by mfluet@acm.org on 2017-04-07 * by mfluet@acm.org on 2006-4-25 * by mfluet@acm.org on 2005-8-10 based on * modifications from the ML Kit Version 3; basislib/Date.sml @@ -316,7 +317,7 @@ let val _ = setTmBuf (dateToTmoz d) val bufLen = 50 (* more than enough for a single format char *) - val buf = Array.arrayUninit bufLen + val buf = Array.alloc bufLen fun strftime fmtChar = let val len = diff -Nru mlton-20130715/basis-library/system/io.sml mlton-20210117+dfsg/basis-library/system/io.sml --- mlton-20130715/basis-library/system/io.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/system/io.sml 2021-12-28 17:19:36.000000000 +0000 @@ -4,6 +4,7 @@ (* modified by Matthew Fluet 2006-04-30 *) (* modified by Matthew Fluet 2008-04-06 *) (* modified by Matthew Fluet 2013-06-18 *) +(* modified by Matthew Fluet 2019-11-05 *) (* os-io.sml * @@ -122,7 +123,7 @@ else (C_Int.fromLarge (Time.toMilliseconds t) handle Overflow => Error.raiseSys Error.inval) val revents = Array.array (n, 0: C_Short.t) - val _ = Posix.Error.SysCall.simpleRestart + val _ = Posix.Error.SysCall.simple (fn () => Prim.poll (PrePosix.FileDesc.vectorToRep fds, events, C_NFds.fromInt n, diff -Nru mlton-20130715/basis-library/system/os.sml mlton-20210117+dfsg/basis-library/system/os.sml --- mlton-20130715/basis-library/system/os.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/system/os.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/system/pre-os.sml mlton-20210117+dfsg/basis-library/system/pre-os.sml --- mlton-20130715/basis-library/system/pre-os.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/system/pre-os.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/system/timer.sml mlton-20210117+dfsg/basis-library/system/timer.sml --- mlton-20130715/basis-library/system/timer.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/system/timer.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/system/time.sml mlton-20210117+dfsg/basis-library/system/time.sml --- mlton-20130715/basis-library/system/time.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/system/time.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/system/unix.sml mlton-20210117+dfsg/basis-library/system/unix.sml --- mlton-20130715/basis-library/system/unix.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/system/unix.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/text/byte.sml mlton-20210117+dfsg/basis-library/text/byte.sml --- mlton-20130715/basis-library/text/byte.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/byte.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/text/char0.sml mlton-20210117+dfsg/basis-library/text/char0.sml --- mlton-20130715/basis-library/text/char0.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/char0.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -26,20 +27,20 @@ ord = Int.zextdFromWord8 o Prim8.idToWord8, minChar = #"\000", maxChar = #"\255", - numChars = 256 + numChars = 256 (* 0x100 *) } val fChar16 : Prim16.char t = { chrUnsafe = Prim16.idFromWord16 o Int.sextdToWord16, ord = Int.zextdFromWord16 o Prim16.idToWord16, minChar = #"\000", maxChar = #"\uFFFF", - numChars = 65536 + numChars = 65536 (* 0x10000 *) } val fChar32 : Prim32.char t = { chrUnsafe = Prim32.idFromWord32 o Int.sextdToWord32, ord = Int.zextdFromWord32 o Prim32.idToWord32, minChar = #"\000", - maxChar = #"\U0010FFFF", + maxChar = Prim32.idFromWord32 0wx0010FFFF, numChars = 1114112 (* 0x110000 *) } end diff -Nru mlton-20130715/basis-library/text/char-global.sml mlton-20210117+dfsg/basis-library/text/char-global.sml --- mlton-20130715/basis-library/text/char-global.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/char-global.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/text/char.sig mlton-20210117+dfsg/basis-library/text/char.sig --- mlton-20130715/basis-library/text/char.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/char.sig 2021-12-28 17:19:36.000000000 +0000 @@ -51,5 +51,7 @@ include CHAR val formatSequences: (Char.char, 'a) StringCvt.reader -> 'a -> 'a + val formatSequencesOpt: (Char.char, 'a) StringCvt.reader + -> (unit, 'a) StringCvt.reader val scanC: (Char.char, 'a) StringCvt.reader -> (char, 'a) StringCvt.reader end diff -Nru mlton-20130715/basis-library/text/char.sml mlton-20210117+dfsg/basis-library/text/char.sml --- mlton-20130715/basis-library/text/char.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/char.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -103,7 +103,7 @@ local fun make (test, diff) c = - if test c then chrUnsafe (Int.+? (ord c, diff)) else c + if test c then chrUnsafe (Int.+! (ord c, diff)) else c val diff = Int.- (ord lA, ord la) in val toLower = make (isUpper, Int.~ diff) @@ -115,7 +115,7 @@ NONE => NONE | SOME (c, state) => if Char.<= (#"@", c) andalso Char.<= (c, #"_") - then SOME (chr (Int.-? (Char.ord c, Char.ord #"@")), state) + then SOME (chr (Int.-! (Char.ord c, Char.ord #"@")), state) else NONE fun formatChar reader state = @@ -136,27 +136,36 @@ loop end - val 'a formatSequences: (Char.char, 'a) StringCvt.reader -> 'a -> 'a = + val 'a formatSequencesOpt: (Char.char, 'a) StringCvt.reader + -> (unit, 'a) StringCvt.reader = fn reader => let fun loop state = case reader state of SOME (#"\\", state1) => (case formatChar reader state1 of - NONE => state + NONE => NONE | SOME ((), state2) => let val state3 = formatChars reader state2 in case reader state3 of - SOME (#"\\", state4) => loop state4 - | _ => state + SOME (#"\\", state4) => + (case loop state4 of + state5 as SOME _ => state5 + | NONE => SOME ((), state4)) + | _ => NONE end) - | _ => state + | _ => NONE in loop end + fun formatSequences reader state = + case formatSequencesOpt reader state of + NONE => state + | SOME ((), state) => state + fun 'a scan (reader: (Char.char, 'a) StringCvt.reader) : (char, 'a) StringCvt.reader = let @@ -274,7 +283,7 @@ fun padLeft (s: String.string, n: int): String.string = let val m = String.size s - val diff = Int.-? (n, m) + val diff = Int.-! (n, m) in if Int.> (diff, 0) then String.concat [String.new (diff, #"0"), s] else if diff = 0 @@ -314,7 +323,7 @@ then String.concat ["\\^", String.new (1, Char.chrUnsafe - (Int.+? (ord, 64 (* #"@" *) )))] + (Int.+! (ord, 64 (* #"@" *) )))] else if Int.< (ord, 256) then String.concat ["\\", padLeft (Int.fmt StringCvt.DEC ord, 3)] diff -Nru mlton-20130715/basis-library/text/nullstring.sml mlton-20210117+dfsg/basis-library/text/nullstring.sml --- mlton-20130715/basis-library/text/nullstring.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/nullstring.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/text/string0.sml mlton-20210117+dfsg/basis-library/text/string0.sml --- mlton-20130715/basis-library/text/string0.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/string0.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/text/string-cvt.sml mlton-20210117+dfsg/basis-library/text/string-cvt.sml --- mlton-20130715/basis-library/text/string-cvt.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/string-cvt.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -38,7 +38,7 @@ in if n >= i then s - else f (s, String.vector (i -? n, c)) + else f (s, String.vector (i -! n, c)) end in val padLeft = pad (fn (s, pad) => String.^ (pad, s)) @@ -82,7 +82,7 @@ fun range (add: int, cmin: char, cmax: char): char -> int option = let val min = Char.ord cmin in fn c => if Char.<= (cmin, c) andalso Char.<= (c, cmax) - then SOME (add +? Char.ord c -? min) + then SOME (add +! Char.ord c -! min) else NONE end @@ -146,7 +146,7 @@ | SOME (c, state) => case charToDigit radix c of NONE => NONE - | SOME n => digits (radix, max -? 1, n) reader state + | SOME n => digits (radix, max -! 1, n) reader state fun digitsExact (radix, num) reader state = let val r = radixToInt radix diff -Nru mlton-20130715/basis-library/text/string-global.sml mlton-20210117+dfsg/basis-library/text/string-global.sml --- mlton-20130715/basis-library/text/string-global.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/string-global.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/text/string.sml mlton-20210117+dfsg/basis-library/text/string.sml --- mlton-20130715/basis-library/text/string.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/string.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -71,7 +71,16 @@ Char.formatSequences reader state) | SOME (c, state) => loop (state, c :: cs) in - fn state => loop (state, []) + fn state => + case reader state of + NONE => SOME (implode [], state) + | SOME _ => + case Char.scan reader state of + SOME (c, state) => loop (state, [c]) + | NONE => + case Char.formatSequencesOpt reader state of + SOME ((), state) => SOME (implode [], state) + | NONE => NONE end val fromString = StringCvt.scanString scan diff -Nru mlton-20130715/basis-library/text/substring-global.sml mlton-20210117+dfsg/basis-library/text/substring-global.sml --- mlton-20130715/basis-library/text/substring-global.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/substring-global.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/text/substring.sml mlton-20210117+dfsg/basis-library/text/substring.sml --- mlton-20130715/basis-library/text/substring.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/substring.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/text/text.sml mlton-20210117+dfsg/basis-library/text/text.sml --- mlton-20130715/basis-library/text/text.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/text/text.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/top-level/arithmetic.sml mlton-20210117+dfsg/basis-library/top-level/arithmetic.sml --- mlton-20130715/basis-library/top-level/arithmetic.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/top-level/arithmetic.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/top-level/infixes-overflow.sml mlton-20210117+dfsg/basis-library/top-level/infixes-overflow.sml --- mlton-20130715/basis-library/top-level/infixes-overflow.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/top-level/infixes-overflow.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,9 +2,9 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -infix 7 *! -infix 6 +! -! +infix 7 *? *$ +infix 6 +? +$ -? -$ diff -Nru mlton-20130715/basis-library/top-level/infixes.sml mlton-20210117+dfsg/basis-library/top-level/infixes.sml --- mlton-20130715/basis-library/top-level/infixes.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/top-level/infixes.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/top-level/infixes-unsafe.sml mlton-20210117+dfsg/basis-library/top-level/infixes-unsafe.sml --- mlton-20130715/basis-library/top-level/infixes-unsafe.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/top-level/infixes-unsafe.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,9 +2,9 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -infix 7 *? -infix 6 +? -? +infix 7 *! +infix 6 +! -! diff -Nru mlton-20130715/basis-library/unsafe.mlb mlton-20210117+dfsg/basis-library/unsafe.mlb --- mlton-20130715/basis-library/unsafe.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/unsafe.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,15 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -ann +ann "deadCode true" + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" "sequenceNonUnit warn" - "nonexhaustiveMatch warn" "redundantMatch warn" "warnUnused true" "forceUsed" in local diff -Nru mlton-20130715/basis-library/util/abs-rep.fun mlton-20210117+dfsg/basis-library/util/abs-rep.fun --- mlton-20130715/basis-library/util/abs-rep.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/abs-rep.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/abs-rep.sig mlton-20210117+dfsg/basis-library/util/abs-rep.sig --- mlton-20130715/basis-library/util/abs-rep.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/abs-rep.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/cleaner.sig mlton-20210117+dfsg/basis-library/util/cleaner.sig --- mlton-20130715/basis-library/util/cleaner.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/cleaner.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/cleaner.sml mlton-20210117+dfsg/basis-library/util/cleaner.sml --- mlton-20130715/basis-library/util/cleaner.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/cleaner.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/CUtil.sig mlton-20210117+dfsg/basis-library/util/CUtil.sig --- mlton-20130715/basis-library/util/CUtil.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/CUtil.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/CUtil.sml mlton-20210117+dfsg/basis-library/util/CUtil.sml --- mlton-20130715/basis-library/util/CUtil.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/CUtil.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -17,7 +17,7 @@ fun loop i = if term (sub (p, i)) then i - else loop (i +? 1) + else loop (i +! 1) in loop 0 end @@ -96,7 +96,7 @@ let val (a, _) = Array.unfoldi - (1 +? List.length l, l, fn (_, l) => + (1 +! List.length l, l, fn (_, l) => case l of [] => (NullString.empty, l) | s::l => (NullString.nullTerm s, l)) diff -Nru mlton-20130715/basis-library/util/dynamic-wind.sig mlton-20210117+dfsg/basis-library/util/dynamic-wind.sig --- mlton-20130715/basis-library/util/dynamic-wind.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/dynamic-wind.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/dynamic-wind.sml mlton-20210117+dfsg/basis-library/util/dynamic-wind.sml --- mlton-20130715/basis-library/util/dynamic-wind.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/dynamic-wind.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/heap.sml mlton-20210117+dfsg/basis-library/util/heap.sml --- mlton-20130715/basis-library/util/heap.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/heap.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2007-2007 Wesley W. Terpstra * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/integral-comparisons.sml mlton-20210117+dfsg/basis-library/util/integral-comparisons.sml --- mlton-20130715/basis-library/util/integral-comparisons.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/integral-comparisons.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/natural.sml mlton-20210117+dfsg/basis-library/util/natural.sml --- mlton-20130715/basis-library/util/natural.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/natural.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/one.sml mlton-20210117+dfsg/basis-library/util/one.sml --- mlton-20130715/basis-library/util/one.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/one.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2006-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/reader.sig mlton-20210117+dfsg/basis-library/util/reader.sig --- mlton-20130715/basis-library/util/reader.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/reader.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/reader.sml mlton-20210117+dfsg/basis-library/util/reader.sml --- mlton-20130715/basis-library/util/reader.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/reader.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/real-comparisons.sml mlton-20210117+dfsg/basis-library/util/real-comparisons.sml --- mlton-20130715/basis-library/util/real-comparisons.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/real-comparisons.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/string-comparisons.sml mlton-20210117+dfsg/basis-library/util/string-comparisons.sml --- mlton-20130715/basis-library/util/string-comparisons.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/string-comparisons.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/unique-id.fun mlton-20210117+dfsg/basis-library/util/unique-id.fun --- mlton-20130715/basis-library/util/unique-id.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/unique-id.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/basis-library/util/unique-id.sig mlton-20210117+dfsg/basis-library/util/unique-id.sig --- mlton-20130715/basis-library/util/unique-id.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/basis-library/util/unique-id.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/benchmark/benchmark.mlb mlton-20210117+dfsg/benchmark/benchmark.mlb --- mlton-20130715/benchmark/benchmark.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/benchmark.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/benchmark/call-main.sml mlton-20210117+dfsg/benchmark/call-main.sml --- mlton-20130715/benchmark/call-main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/call-main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/benchmark/main.sml mlton-20210117+dfsg/benchmark/main.sml --- mlton-20130715/benchmark/main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,10 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2013,2014,2019 Matthew Fluet. + * Copyright (C) 2009 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -54,7 +55,7 @@ datatype command = Explicit of {args: string list, com: string} - | Shell of string + | Shell of string list fun timeIt ca = Process.time @@ -62,7 +63,7 @@ case ca of Explicit {args, com} => Process.wait (Process.spawnp {file = com, args = com :: args}) - | Shell s => Process.system s) + | Shell ss => List.foreach (ss, Process.system)) local val trialTime = Time.seconds (IntInf.fromInt 60) @@ -86,64 +87,64 @@ end end -val benchCounts: (string * int * int) list = - [("barnes-hut", 4096, 1024), - ("boyer", 3000, 1000), - ("checksum", 1500, 150), - ("count-graphs", 3, 1), - ("DLXSimulator", 50, 15), - ("fft", 256, 128), - ("fib", 6, 1), - ("flat-array", 6000, 1200), - ("hamlet", 100, 10), - ("imp-for", 1000, 300), - ("knuth-bendix", 500, 100), - ("lexgen", 300, 50), - ("life", 6, 2), - ("logic", 40, 7), - ("mandelbrot", 2, 1), - ("matrix-multiply", 20, 20), - ("md5", 30, 10), - ("merge", 4000, 1000), - ("mlyacc", 500, 150), - ("model-elimination", 0, 0), - ("mpuz", 20, 5), - ("nucleic", 500, 150), - ("output1", 3, 3), - ("peek", 1000, 100), - ("psdes-random", 3, 1), - ("ratio-regions", 1024, 512), - ("ray", 100, 30), - ("raytrace", 10, 3), - ("simple", 100, 20), - ("smith-normal-form", 6, 1), - ("tailfib", 200, 60), - ("tak", 4, 2), - ("tensor", 3, 1), - ("tsp", 4, 1), - ("tyan", 80, 13), - ("vector-concat", 10, 2), - ("vector-rev", 20, 20), - ("vliw", 150, 30), - ("wc-input1", 4000, 1000), - ("wc-scanStream", 6000, 2000), - ("zebra", 15, 3), - ("zern", 2000, 500)] +val benchCounts: (string * int) list = + ("barnes-hut", 32768):: (* 41.85 sec *) + ("boyer", 12288):: (* 36.04 sec *) + ("checksum", 12288):: (* 42.48 sec *) + ("count-graphs", 12):: (* 30.27 sec *) + ("DLXSimulator", 6):: (* 31.83 sec *) + ("even-odd", 24):: (* 38.96 sec *) + ("fft", 16):: (* 39.63 sec *) + ("fib", 32):: (* 40.10 sec *) + ("flat-array", 49152):: (* 35.25 sec *) + ("hamlet", 384):: (* 45.55 sec *) + ("imp-for", 4096):: (* 31.57 sec *) + ("knuth-bendix", 3072):: (* 34.40 sec *) + ("lexgen", 1536):: (* 41.54 sec *) + ("life", 32):: (* 38.71 sec *) + ("logic", 256):: (* 33.24 sec *) + ("mandelbrot", 6):: (* 35.66 sec *) + ("matrix-multiply", 192):: (* 43.54 sec *) + ("md5", 12):: (* 34.73 sec *) + ("merge", 16384):: (* 33.35 sec *) + ("mlyacc", 3072):: (* 34.04 sec *) + ("model-elimination", 4):: (* 39.68 sec *) + ("mpuz", 128):: (* 39.63 sec *) + ("nucleic", 4096):: (* 31.41 sec *) + ("output1", 12):: (* 32.92 sec *) + ("peek", 192):: (* 36.99 sec *) + ("pidigits", 4096):: (* 37.95 sec *) + ("psdes-random", 24):: (* 33.80 sec *) + ("ratio-regions", 1536):: (* 47.22 sec *) + ("ray", 1536):: (* 37.14 sec *) + ("raytrace", 96):: (* 33.44 sec *) + ("simple", 1024):: (* 36.55 sec *) + ("smith-normal-form", 192):: (* 40.96 sec *) + ("string-concat", 256):: (* 30.66 sec *) + ("tailfib", 512):: (* 37.87 sec *) + ("tailmerge", 24576):: (* 42.64 sec *) + ("tak", 32):: (* 37.01 sec *) + ("tensor", 6):: (* 38.95 sec *) + ("tsp", 16):: (* 37.29 sec *) + ("tyan", 384):: (* 30.86 sec *) + ("vector32-concat", 48):: (* 41.15 sec *) + ("vector64-concat", 32):: (* 30.33 sec *) + ("vector-rev", 96):: (* 39.46 sec *) + ("vliw", 1024):: (* 39.60 sec *) + ("wc-input1", 16384):: (* 30.21 sec *) + ("wc-scanStream", 32768):: (* 31.67 sec *) + ("zebra", 64):: (* 30.04 sec *) + ("zern", 16384):: (* 38.98 sec *) + nil val benchCount = String.memoize (fn s => - case List.peek (benchCounts, fn (b, _, _) => b = s) of + case List.peek (benchCounts, fn (b, _) => b = s) of NONE => Error.bug (concat ["no benchCount for ", s]) - | SOME (_, x86, sparc) => - Int.toString - let - open MLton.Platform.Arch - in - case host of - Sparc => sparc - | _ => x86 - end) + | SOME (_, c) => Int.toString c) + +val default_main = (fn bench => concat ["val _ = Main.doit ", benchCount bench, "\n"]) fun compileSizeRun {command, exe, doTextPlusData: bool} = Escape.new @@ -173,40 +174,75 @@ size = size} end) -fun batch bench = concat [bench, ".batch.sml"] +fun batch_ {abbrv, bench} = + let + val abbrv = + String.translate + (abbrv, fn c => + if Char.isAlphaNum c + then String.fromChar c + else "_") + in + concat [bench, ".", abbrv, ".batch"] + end + +fun batch ab = + concat [batch_ ab, ".sml"] local - val n = Counter.new 0 - val exe = "a.out" + val next = Counter.generator 0 in fun makeMLton commandPattern = case ChoicePattern.expand commandPattern of Result.No m => usage m - | Result.Yes coms => + | Result.Yes cmds => List.map - (coms, fn com => - {name = com, - abbrv = "MLton" ^ (Int.toString (Counter.next n)), - test = (fn {bench} => - compileSizeRun - {command = Shell (concat [com, " -output ", exe, " ", batch bench]), - exe = exe, - doTextPlusData = true})}) + (cmds, fn cmd => + let + val abbrv = "MLton" ^ (Int.toString (next ())) + in + {name = cmd, + abbrv = abbrv, + main = default_main, + test = (fn {bench} => + let + val src = batch {abbrv = abbrv, bench = bench} + val exe = String.dropSuffix (src, 4) + val cmds = (concat [cmd, " -output ", exe, " ", src]):: + (*(concat ["strip ", exe])::*) + nil + in + compileSizeRun + {command = Shell cmds, + exe = exe, + doTextPlusData = true} + end)} + end) end fun kitCompile {bench} = - compileSizeRun {command = Explicit {args = [batch bench], - com = "mlkit"}, - exe = "run", - doTextPlusData = true} + let + val bargs = {abbrv = "MLKit", bench = bench} + val bin = batch_ bargs + in compileSizeRun + {command = Explicit {args = ["-o", bin, batch bargs], + com = "mlkit"}, + exe = bin, + doTextPlusData = true} + end fun mosmlCompile {bench} = - compileSizeRun - {command = Explicit {args = ["-orthodox", "-standalone", "-toplevel", - batch bench], - com = "mosmlc"}, - exe = "a.out", - doTextPlusData = false} + let + val bargs = {abbrv = "Moscow ML", bench = bench} + val bin = batch_ bargs + in compileSizeRun + {command = Explicit {args = ["-orthodox", "-standalone", "-toplevel", + "-o", bin, batch bargs], + com = "mosmlc"}, + exe = bin, + doTextPlusData = false} + end + val njSuffix = Promise.delay @@ -278,52 +314,15 @@ end) fun polyCompile {bench} = - Escape.new - (fn e => - let - val originalDbase = "/usr/lib/poly/ML_dbase" - val poly = "/usr/bin/poly" - in File.withTemp - (fn dbase => - let - val _ = File.copy (originalDbase, dbase) - val original = File.size dbase - val {system, user} = - File.withTempOut - (fn out => - Out.output - (out, - concat ["use \"", bench, ".sml\" handle _ => PolyML.quit ();\n", - "if PolyML.commit() then () else ", - "(Main.doit ", benchCount bench, "; ());\n", - "PolyML.quit();\n"]), - fn input => - withInput - (input, fn () => - timeIt (Explicit {args = [dbase], - com = poly}))) - val after = File.size dbase - in - if original = after - then {compile = NONE, - run = NONE, - size = NONE} - else - let - val compile = SOME (Time.toReal (Time.+ (user, system))) - val size = SOME (after - original) - val run = - timeCall (poly, [dbase]) - handle _ => Escape.escape (e, {compile = compile, - run = NONE, - size = size}) - in - {compile = compile, - run = SOME run, - size = size} - end - end) - end) + let + val bargs = {abbrv = "Poly/ML", bench = bench} + val bin = batch_ bargs + in compileSizeRun + {command = Explicit {args = [batch bargs, "-o", bin], + com = "polyc"}, + exe = bin, + doTextPlusData = false} + end type 'a data = {bench: string, compiler: string, @@ -333,6 +332,7 @@ let val compilers: {name: string, abbrv: string, + main: string -> string, test: {bench: File.t} -> {compile: real option, run: real option, size: Position.int option}} list ref @@ -410,13 +410,15 @@ ("err", SpaceString setErrData), ("mlkit", None (fn () => pushCompiler - {name = "ML-Kit", - abbrv = "ML-Kit", + {name = "MLKit", + abbrv = "MLKit", + main = default_main, test = kitCompile})), ("mosml", None (fn () => pushCompiler - {name = "Moscow-ML", - abbrv = "Moscow-ML", + {name = "Moscow ML", + abbrv = "Moscow ML", + main = default_main, test = mosmlCompile})), ("mlton", SpaceString (fn arg => pushCompilers @@ -427,11 +429,13 @@ None (fn () => pushCompiler {name = "Poly/ML", abbrv = "Poly/ML", + main = (fn bench => concat ["fun main _ = Main.doit ", benchCount bench, "\n"]), test = polyCompile})), ("smlnj", None (fn () => pushCompiler {name = "SML/NJ", abbrv = "SML/NJ", + main = default_main, test = njCompile})), trace, ("wiki", trueRef doWiki)]} @@ -442,7 +446,7 @@ | Result.Yes benchmarks => let val compilers = List.rev (!compilers) - val base = #name (hd compilers) + val base = #abbrv (hd compilers) val _ = let open MLton.Signal @@ -475,33 +479,31 @@ val _ = Out.output (out, concat [title, "\n"]) val compilers = List.fold - (compilers, [], - fn ({name = n, abbrv = n', ...}, ac) => + (compilers, [], fn ({name = n, abbrv = a, ...}, ac) => if showAll - orelse (List.exists - (data, fn {compiler = c, ...} => - n = c)) - then (n, n') :: ac + orelse List.exists (data, fn {compiler = c', ...} => + a = c') + then (n, a) :: ac else ac) val benchmarks = List.fold (benchmarks, [], fn (b, ac) => if showAll - orelse List.exists (data, fn {bench, ...} => - bench = b) + orelse List.exists (data, fn {bench = b', ...} => + b = b') then b :: ac else ac) fun rows toString = ("benchmark" - :: List.revMap (compilers, fn (_, n') => n')) + :: List.revMap (compilers, fn (_, a) => a)) :: (List.revMap (benchmarks, fn b => b :: (List.revMap - (compilers, fn (n, _) => + (compilers, fn (_, a) => case (List.peek (data, fn {bench = b', compiler = c', ...} => - b = b' andalso n = c')) of + b = b' andalso a = c')) of NONE => "*" | SOME {value = v, ...} => toString v)))) @@ -587,17 +589,10 @@ outs = [], errs = []}, fn (bench, ac) => let - val _ = - File.withOut - (batch bench, fn out => - (File.outputContents (concat [bench, ".sml"], out) - ; Out.output (out, concat ["val _ = Main.doit ", - benchCount bench, - "\n"]))) val foundOne = ref false val res = List.fold - (compilers, ac, fn ({name, abbrv = _, test}, + (compilers, ac, fn ({name, abbrv, main, test}, ac as {compiles: real data, runs: real data, sizes: Position.int data, @@ -606,6 +601,11 @@ if true then let + val _ = + File.withOut + (batch {abbrv = abbrv, bench = bench}, fn out => + (File.outputContents (concat [bench, ".sml"], out); + Out.output (out, (main bench)))) (* val outTmpFile = File.tempName {prefix = "tmp", suffix = "out"} @@ -660,7 +660,7 @@ | SOME v => (foundOne := true ; {bench = bench, - compiler = name, + compiler = abbrv, value = v} :: ac) val ac = {compiles = add (compile, compiles), diff -Nru mlton-20130715/benchmark/Makefile mlton-20210117+dfsg/benchmark/Makefile --- mlton-20130715/benchmark/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,35 +1,33 @@ -## Copyright (C) 2009 Matthew Fluet. +## Copyright (C) 2013,2019 Matthew Fluet. + # Copyright (C) 2009 Matthew Fluet. # Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## -SRC := $(shell cd .. && pwd) -BUILD := $(SRC)/build -BIN := $(BUILD)/bin -LIB := $(BUILD)/lib -MLTON := mlton -TARGET := self -FLAGS := -target $(TARGET) \ - -default-ann 'sequenceNonUnit warn' \ - -default-ann 'warnUnused true' +ROOT := .. +include $(ROOT)/Makefile.config + +###################################################################### + NAME := benchmark -PATH := $(BIN):$(shell echo $$PATH) all: $(NAME) -$(NAME): $(NAME).mlb $(shell PATH="$(BIN):$$PATH" && "$(MLTON)" -stop f $(NAME).mlb) +RUN_MLTON_COMPILE_XARGS := -default-ann 'sequenceNonUnit warn' -default-ann 'warnUnused true' + +$(NAME): $(NAME).mlb $(shell "$(RUN_MLTON)" -stop f $(NAME).mlb) @echo 'Compiling $(NAME)' - "$(MLTON)" $(FLAGS) $(NAME).mlb + "$(RUN_MLTON)" @MLton $(RUN_MLTON_RUNTIME_ARGS) -- $(RUN_MLTON_COMPILE_ARGS) $(RUN_MLTON_COMPILE_XARGS) -target $(TARGET) $(NAME).mlb .PHONY: clean clean: ../bin/clean -BENCH := barnes-hut boyer checksum count-graphs DLXSimulator fft fib flat-array hamlet imp-for knuth-bendix lexgen life logic mandelbrot matrix-multiply md5 merge mlyacc model-elimination mpuz nucleic output1 peek psdes-random ratio-regions ray raytrace simple smith-normal-form tailfib tak tensor tsp tyan vector-concat vector-rev vliw wc-input1 wc-scanStream zebra zern +BENCH := barnes-hut boyer checksum count-graphs DLXSimulator even-odd fft fib flat-array hamlet imp-for knuth-bendix lexgen life logic mandelbrot matrix-multiply md5 merge mlyacc model-elimination mpuz nucleic output1 peek psdes-random ratio-regions ray raytrace simple smith-normal-form string-concat tailfib tak tensor tsp tyan vector32-concat vector64-concat vector-rev vliw wc-input1 wc-scanStream zebra zern FPBENCH := barnes-hut fft hamlet mandelbrot matrix-multiply nucleic ray raytrace simple tensor tsp tyan vliw zern BFLAGS := -mlton "/usr/bin/mlton" -mlton "mlton -optimize-ssa {false,true}" @@ -41,11 +39,8 @@ cd tests && ../benchmark $(BFLAGS) $(BENCH) QBENCH := $(BENCH) -QBFLAGS := -mlton "~/devel/mlton/mlton-20061119-1.x86-darwin/build/bin/mlton" -QBFLAGS += -mlton "~/devel/mlton/mlton.svn.trunk/build/bin/mlton" -# QBFLAGS += -mlton "~/devel/mlton/mlton.svn.trunk.inline/build/bin/mlton -drop-pass introduceLoops1 -drop-pass loopInvariant1 -inline-leafa-loops true -inline-leafa-repeat false -inline-leafa-size 20 -drop-pass inlineLeaf2" -# QBFLAGS += -mlton "~/devel/mlton/mlton.svn.trunk.inline/build/bin/mlton -inline-leafa-loops true -inline-leafa-repeat true -inline-leafa-size 20 -inline-leafb-loops true -inline-leafb-repeat true -inline-leafb-size 40" -QBFLAGS += -mlton "~/devel/mlton/mlton.svn.trunk.inline/build/bin/mlton" +QBFLAGS := -mlton "~/devel/mlton/builds/20171013.233239-g5513092e3/bin/mlton" +QBFLAGS += -mlton "~/devel/mlton/mlton.git/build/bin/mlton -cse-canon {ascHash,descHash,ascIndex,descIndex}" .PHONY: qtest qtest: $(NAME) diff -Nru mlton-20130715/benchmark/sources.mlb mlton-20210117+dfsg/benchmark/sources.mlb --- mlton-20130715/benchmark/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/benchmark/tests/DATA/chess.gml mlton-20210117+dfsg/benchmark/tests/DATA/chess.gml --- mlton-20130715/benchmark/tests/DATA/chess.gml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/DATA/chess.gml 1970-01-01 00:00:00.000000000 +0000 @@ -1,271 +0,0 @@ -% chess.gml -% -% OUTPUTS: chess.ppm -% -%%% -%%% Author: -%%% Leif Kornstaedt -%%% -%%% Copyright: -%%% Leif Kornstaedt, 2000 -%%% -%%% Last change: -%%% $Date: 2000/09/04 22:34:00 $ by $Author: kornstae $ -%%% $Revision: 1.6 $ -%%% - -{ /y /x x x mulf y y mulf addf sqrt } /dist - -0.2 0.2 0.3 point /black1 -0.4 0.4 0.5 point /black2 -0.7 0.7 0.5 point /white1 -1.0 1.0 0.8 point /white2 - -%% -%% Surface functions -%% - -{ /col2 /col1 - { /v /u /face - face 0 eqi - { % rotational: stripes according to angle u - u 12.0 mulf floor 2 modi 1 eqi { col1 } { col2 } if - } - { % flat: rays according to angle from origin to (u, v) - u 0.5 subf /u v 0.5 subf /v - u u v dist apply divf /b - 0.0 v lessf { b asin } { 360.0 b asin subf } if 180.0 addf 30.0 divf - floor 2 modi 1 eqi { col1 } { col2 } if - } - if - 0.7 0.3 1.0 - } -} /figureSurface - -%% -%% Board -%% - -{ /v /u /face - 3 face lessi - { % top, bottom: checkered - 0 u 8.0 mulf floor v 8.0 mulf floor addi - } - { face 2 modi 0 eqi - { 0 } % front, left: striped black/white - { 1 } % back, right: striped white/black - if u 8.0 mulf floor - } if 2 modi eqi { black1 } { white2 } if - 0.4 0.6 0.5 -} cube -0.5 -1.0 -0.5 translate 8.0 0.3 8.0 scale /board - -%% -%% Pawns -%% - -{ /col2 /col1 - col1 col2 figureSurface apply /surface - surface sphere 0.0 1.0 0.0 translate - surface cylinder union - surface sphere 0.0 2.3 0.0 translate difference - surface sphere 0.8 uscale 0.0 2.5 0.0 translate union - 0.3 uscale -} /pawn - -white1 white2 pawn apply /whitePawn -black1 black2 pawn apply /blackPawn - -%% -%% Towers -%% - -{ /col2 /col1 - col1 col2 figureSurface apply /surface - col1 col1 figureSurface apply /surface1 - col2 col2 figureSurface apply /surface2 - % Base - surface cylinder 1.0 0.75 1.0 scale - % Wall - surface cone 0.0 -1.0 0.0 translate 180.0 rotatez 90.0 rotatey - 1.0 7.5 1.0 scale union - surface cylinder 1.0 2.8 1.0 scale intersect - % Platform - surface cylinder 0.0 3.0 0.0 translate union - % Viewholes - surface cylinder 0.7 4.0 0.7 scale - { /rot - surface1 plane 90.0 rotatex - surface2 plane -90.0 rotatex 30.0 rotatey intersect rot rotatey - } /apex - 15.0 apex apply 75.0 apex apply union 135.0 apex apply union - 195.0 apex apply union 255.0 apex apply union 315.0 apex apply union - surface cylinder intersect union - 0.0 3.5 0.0 translate difference - 0.4 uscale -} /tower - -white1 white2 tower apply /whiteTower -black1 black2 tower apply /blackTower - -%% -%% Knights -%% - -{ /col2 /col1 - col1 col2 figureSurface apply /surface - % Base - surface cylinder 1.0 0.75 1.0 scale - % Body - surface cone 180.0 rotatez 30.0 rotatey 0.0 1.0 0.0 translate - 1.0 5.0 1.0 scale - surface plane 0.0 3.0 0.0 translate intersect union - % Head - surface cone 1.0 3.0 1.0 scale 0.0 -1.0 0.0 translate - surface cylinder 1.0 2.0 1.0 scale intersect 0.0 -1.5 0.0 translate /head - head 1.25 1.0 1.25 scale 0.0 0.5 0.0 translate -90.0 rotatex - 0.0 3.2 0.0 translate difference - head 0.8 1.0 0.8 scale -90.0 rotatex 0.0 3.2 0.0 translate union - 0.4 uscale -} /knight - -white1 white2 knight apply /whiteKnight -black1 black2 knight apply 180.0 rotatey /blackKnight - -%% -%% Bishops -%% - -{ /col2 /col1 - col1 col2 figureSurface apply /surface - % Base - surface cylinder 1.0 0.75 1.0 scale - % Body - surface cone 180.0 rotatez 30.0 rotatey 0.0 1.0 0.0 translate - 1.0 5.0 1.0 scale - surface plane 0.0 3.0 0.0 translate intersect union - % Head - surface sphere 0.9 uscale 0.0 3.15 0.0 translate difference - surface sphere 0.8 uscale 0.0 3.25 0.0 translate union - 0.4 uscale -} /bishop - -white1 white2 bishop apply /whiteBishop -black1 black2 bishop apply /blackBishop - -%% -%% Queens -%% - -{ /col2 /col1 - col1 col2 figureSurface apply /surface - col1 col1 figureSurface apply /surface1 - col2 col2 figureSurface apply /surface2 - % Base - surface cylinder 1.0 0.75 1.0 scale - % Body - surface cone 180.0 rotatez 30.0 rotatey 0.0 1.0 0.0 translate - 1.0 7.5 1.0 scale - surface plane 0.0 4.0 0.0 translate intersect union - % Crown - 38.146 /phi - surface cylinder 1.0 2.0 1.0 scale - surface1 plane -90.0 phi subf rotatex - surface2 plane 90.0 phi addf rotatex intersect - -45.0 rotatez 1.0 0.0 0.0 translate /wedge - wedge wedge 60.0 rotatey union wedge 120.0 rotatey union - wedge 180.0 rotatey union wedge 240.0 rotatey union wedge 300.0 rotatey union - 0.0 1.0 0.0 translate difference - 0.6 0.25 0.6 scale 0.0 4.7 0.0 translate union - % Head - surface sphere 0.9 uscale 0.0 3.9 0.0 translate difference - surface sphere 0.8 uscale 0.0 4.0 0.0 translate union - 0.4 uscale -} /queen - -white1 white2 queen apply /whiteQueen -black1 black2 queen apply /blackQueen - -%% -%% Kings -%% - -{ /col2 /col1 - col1 col2 figureSurface apply /surface - col1 col1 figureSurface apply /surface1 - col2 col2 figureSurface apply /surface2 - % Base - surface cylinder 1.0 0.75 1.0 scale - % Body - surface cone 180.0 rotatez 30.0 rotatey 0.0 1.0 0.0 translate - 1.0 7.5 1.0 scale - surface plane 0.0 4.0 0.0 translate intersect union - % Crown - 38.146 /phi - surface cylinder 1.0 2.0 1.0 scale - surface1 plane -90.0 phi subf rotatex - surface2 plane 90.0 phi addf rotatex intersect - -45.0 rotatez 1.0 0.0 0.0 translate /wedge - wedge wedge 60.0 rotatey union wedge 120.0 rotatey union - wedge 180.0 rotatey union wedge 240.0 rotatey union wedge 300.0 rotatey union - 0.0 1.0 0.0 translate difference 0.6 0.25 0.6 scale - % Scepter - surface2 cube 0.1 0.7 0.1 scale - surface2 cube 0.6 0.1 0.1 scale -0.25 0.35 0.0 translate union - -0.05 0.4 -0.05 translate union - 0.0 4.7 0.0 translate union - % Head - surface sphere 0.9 uscale 0.0 3.9 0.0 translate difference - surface sphere 0.8 uscale 0.0 4.0 0.0 translate union - 0.4 uscale -} /king - -white1 white2 king apply /whiteKing -black1 black2 king apply /blackKing - -%% -%% The scene -%% - -board -whitePawn -3.5 0.0 -2.5 translate union -whitePawn -2.5 0.0 -2.5 translate union -whitePawn -1.5 0.0 -2.5 translate union -whitePawn -0.5 0.0 -2.5 translate union -whitePawn 0.5 0.0 -2.5 translate union -whitePawn 1.5 0.0 -2.5 translate union -whitePawn 2.5 0.0 -2.5 translate union -whitePawn 3.5 0.0 -2.5 translate union -whiteTower -3.5 0.0 -3.5 translate union -whiteTower 3.5 0.0 -3.5 translate union -whiteKnight -2.5 0.0 -3.5 translate union -whiteKnight 2.5 0.0 -3.5 translate union -whiteBishop -1.5 0.0 -3.5 translate union -whiteBishop 1.5 0.0 -3.5 translate union -whiteQueen -0.5 0.0 -3.5 translate union -whiteKing 0.5 0.0 -3.5 translate union -blackPawn -3.5 0.0 2.5 translate union -blackPawn -2.5 0.0 2.5 translate union -blackPawn -1.5 0.0 2.5 translate union -blackPawn -0.5 0.0 2.5 translate union -blackPawn 0.5 0.0 2.5 translate union -blackPawn 1.5 0.0 2.5 translate union -blackPawn 2.5 0.0 2.5 translate union -blackPawn 3.5 0.0 2.5 translate union -blackTower -3.5 0.0 3.5 translate union -blackTower 3.5 0.0 3.5 translate union -blackKnight -2.5 0.0 3.5 translate union -blackKnight 2.5 0.0 3.5 translate union -blackBishop -1.5 0.0 3.5 translate union -blackBishop 1.5 0.0 3.5 translate union -blackQueen -0.5 0.0 3.5 translate union -blackKing 0.5 0.0 3.5 translate union -30.0 rotatey -20.0 rotatex 0.4 uscale 0.3 0.0 3.0 translate - -%whiteTower -70.0 rotatex 0.0 0.0 4.0 translate - -/scene - -0.0 0.0 -1.0 point -1.0 1.0 1.0 point pointlight /l - -0.33 0.33 0.33 point [ l ] scene 3 60.0 400 300 "chess.ppm" render diff -Nru mlton-20130715/benchmark/tests/DLXSimulator.sml mlton-20210117+dfsg/benchmark/tests/DLXSimulator.sml --- mlton-20130715/benchmark/tests/DLXSimulator.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/DLXSimulator.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,3 +1,7 @@ +(* More tweaks by Matthew Fluet (Matthew.Fluet@gmail.com) on 2017-12-06 to + * generalize implementation of I/O instructions and only output the + * last run of each DLX program in the benchmark. + *) (* Minor tweaks by Stephen Weeks (sweeks@sweeks.com) on 2001-07-17 to turn into a * benchmark. * Added rand function. @@ -72,17 +76,17 @@ * After running, the DLX Simulator outputs a set of statistics * concerning memory reads and writes, and cache hits and misses. * - * Future Work: + * Future Work: * With the implementation of the PACK_REAL structures * as documented in the SML'97 Basis Library, the remainder * of the DLX instruction set should be implemented. - * Currently, without an efficient and correct means of + * Currently, without an efficient and correct means of * converting a 32 bit word into a 32 bit float, it is * difficult to incorporate these instructions. * In order to finish following the current development - * model, a FPALU structure should be implemented as the + * model, a FPALU structure should be implemented as the * floating point arithmetic-logic unit. - * Another possibility for future work would be to + * Another possibility for future work would be to * model a pipelined processor. Currently, the DLX Simulator * uses a simple one cycle per instruction model. * It should be possible to break this model and implement @@ -91,7 +95,7 @@ * * References: * Patterson, David A. and John L. Hennessy. _Computer Architecture: A - * Quantitative Approach: Second Edition_. San Francisco: Morgan + * Quantitative Approach: Second Edition_. San Francisco: Morgan * Kaufmann Publishers, Inc., 1996. * *) @@ -113,7 +117,7 @@ end end -(* +(* * ImmArray.sml * * The ImmArray structure defines an immutable array implementation. @@ -137,57 +141,57 @@ * Future Work : There are random-access list implementations * that support O(log n) sub and update functions, * which may provide a faster implementation, although - * possibly at the expense of space and the ease of + * possibly at the expense of space and the ease of * implementing app, foldl, foldr, modify, and map functions. *) signature IMMARRAY = sig type 'a immarray; - + val maxLen : int; val immarray : (int * 'a) -> 'a immarray; val fromList : 'a list -> 'a immarray; val toList : 'a immarray -> 'a list; - + val tabulate : int * (int -> 'a) -> 'a immarray; val length : 'a immarray -> int; - + val sub : 'a immarray * int -> 'a; val update : 'a immarray * int * 'a -> 'a immarray; val extract : 'a immarray * int * int option -> 'a immarray; - val copy : {src : 'a immarray, si : int, len : int option, + val copy : {src : 'a immarray, si : int, len : int option, dst : 'a immarray, di : int} -> 'a immarray; - val appi : (int * 'a -> unit) -> ('a immarray * int * int option) + val appi : (int * 'a -> unit) -> ('a immarray * int * int option) -> unit; val app : ('a -> unit) -> 'a immarray -> unit; - val foldli : ((int * 'a * 'b) -> 'b) -> 'b + val foldli : ((int * 'a * 'b) -> 'b) -> 'b -> ('a immarray * int * int option) -> 'b; - val foldri : ((int * 'a * 'b) -> 'b) -> 'b + val foldri : ((int * 'a * 'b) -> 'b) -> 'b -> ('a immarray * int * int option) -> 'b; val foldl : (('a * 'b) -> 'b) -> 'b -> 'a immarray -> 'b; val foldr : (('a * 'b) -> 'b) -> 'b -> 'a immarray -> 'b; val mapi : ((int * 'a) -> 'b) -> ('a immarray * int * int option) -> 'b immarray; val map : ('a -> 'b) -> 'a immarray -> 'b immarray; - val modifyi : ((int * 'a) -> 'a) -> ('a immarray * int * int option) + val modifyi : ((int * 'a) -> 'a) -> ('a immarray * int * int option) -> 'a immarray; val modify : ('a -> 'a) -> 'a immarray -> 'a immarray; end; - - + + structure ImmArray : IMMARRAY = struct - + (* datatype 'a immarray * An immarray is stored internally as a list. * The use of a constructor prevents list functions from * treating immarray type as a list. *) datatype 'a immarray = IA of 'a list; - + (* val maxLen : int * The maximum length of immarrays supported. * Technically, under this implementation, the maximum length @@ -212,41 +216,41 @@ fun fromList l = IA l; fun toList (IA ia) = ia; fun length (IA ia) = List.length ia; - + (* val sub : 'a immarray * int -> 'a * val update : 'a immarray * int * 'a -> 'a immarray * These functions sub and update an immarray by index. *) fun sub (IA ia, i) = List.nth (ia, i); - fun update (IA ia, i, x) = IA ((List.take (ia, i)) @ + fun update (IA ia, i, x) = IA ((List.take (ia, i)) @ (x::(List.drop (ia, i + 1)))); - + (* val extract : 'a immarray * int * int option -> 'a immarray * This function extracts an immarray slice from an immarray from * one index either through the rest of the immarray (NONE) - * or for n elements (SOME n), as described in the + * or for n elements (SOME n), as described in the * Standard ML Basis Library. *) fun extract (IA ia, i, NONE) = IA (List.drop (ia, i)) | extract (IA ia, i, SOME n) = IA (List.take (List.drop (ia, i), n)); - - (* val copy : {src : 'a immarray, si : int, len : int option, + + (* val copy : {src : 'a immarray, si : int, len : int option, dst : 'a immarray, di : int} -> 'a immarray * This function copies an immarray slice from src into dst starting * at the di element. *) - fun copy {src, si, len, dst=IA ia, di} + fun copy {src, si, len, dst=IA ia, di} = let val IA sia = extract (src, si, len); val pre = List.take (ia, di); - val post = case len + val post = case len of NONE => List.drop (ia, di+(List.length sia)) | SOME n => List.drop (ia, di+n); - in + in IA (pre @ sia @ post) end; - - (* val appi : ('a * int -> unit) -> ('a immarray * int * int option) + + (* val appi : ('a * int -> unit) -> ('a immarray * int * int option) * -> unit * val app : ('a -> unit) -> 'a immarray -> unit * These functions apply a function to every element @@ -258,15 +262,15 @@ fun appi_aux f i [] = () | appi_aux f i (h::t) = (f(i,h); appi_aux f (i + 1) t); in - fun appi f (IA ia, i, len) = let + fun appi f (IA ia, i, len) = let val IA sia = extract (IA ia, i, len); - in + in appi_aux f i sia end; end; fun app f immarr = appi (f o #2) (immarr, 0, NONE); - (* val foldli : (int * 'a * 'b -> 'b) -> 'b + (* val foldli : (int * 'a * 'b -> 'b) -> 'b * -> ('a immarray * int * int option) -> 'b; * val foldri : (int * 'a * 'b -> 'b) -> 'b * -> ('a immarray * int * int option) -> 'b; @@ -277,22 +281,22 @@ * the index of the element as an argument to the folded function * and uses an immarray slice argument. *) - local + local fun foldli_aux f b i [] = b | foldli_aux f b i (h::t) = foldli_aux f (f(i,h,b)) (i+1) t; fun foldri_aux f b i [] = b | foldri_aux f b i (h::t) = f(i,h,foldri_aux f b (i+1) t); in - fun foldli f b (IA ia, i, len) - = let + fun foldli f b (IA ia, i, len) + = let val IA ia2 = extract (IA ia, i, len); - in + in foldli_aux f b i ia2 end; - fun foldri f b (IA ia, i, len) + fun foldri f b (IA ia, i, len) = let val IA ia2 = extract (IA ia, i, len); - in + in foldri_aux f b i ia2 end; end; @@ -301,35 +305,35 @@ (* val mapi : ('a * int -> 'b) -> 'a immarray -> 'b immarray * val map : ('a -> 'b) -> 'a immarray -> 'b immarray - * These functions map a function over every element + * These functions map a function over every element * of an immarray. The mapi function also provides the * index of the element as an argument to the mapped function * and uses an immarray slice argument. Although there are - * similarities between mapi and modifyi, note that when mapi is + * similarities between mapi and modifyi, note that when mapi is * used with an immarray slice, the resulting immarray is the * same size as the slice. This is necessary to preserve the * type of the resulting immarray. Thus, mapi with the identity - * function reduces to the extract function. + * function reduces to the extract function. *) local fun mapi_aux f i [] = [] | mapi_aux f i (h::t) = (f (i,h))::(mapi_aux f (i + 1) t); in - fun mapi f (IA ia, i, len) = let + fun mapi f (IA ia, i, len) = let val IA ia2 = extract (IA ia, i, len); - in + in IA (mapi_aux f i ia2) end; end; fun map f (IA ia)= mapi (f o #2) (IA ia, 0, NONE); - (* val modifyi : (int * 'a -> 'a) -> ('a immarray * int * int option) + (* val modifyi : (int * 'a -> 'a) -> ('a immarray * int * int option) * -> 'a immarray * val modify : ('a -> 'a) -> 'a immarray -> 'a immarray * These functions apply a function to every element of an immarray * in left to right order and returns a new immarray where corresponding - * elements are replaced by their modified values. The modifyi - * function also provides the index of the element as an argument + * elements are replaced by their modified values. The modifyi + * function also provides the index of the element as an argument * to the mapped function and uses an immarray slice argument. *) local @@ -340,7 +344,7 @@ = let val pre = List.take (ia, i); val IA ia2 = extract (IA ia, i, len); - val post = case len + val post = case len of NONE => [] | SOME n => List.drop (ia, i+n); in @@ -355,21 +359,21 @@ (* * ImmArray2.sml - * - * The ImmArray2 structure defines a two dimensional immutable array - * implementation. An immarray2 is stored internally as an immutable - * array of immutable arrays. As such, the ImmArray2 makes heavy use + * + * The ImmArray2 structure defines a two dimensional immutable array + * implementation. An immarray2 is stored internally as an immutable + * array of immutable arrays. As such, the ImmArray2 makes heavy use * of the ImmArray structure. * * The ImmArray2 structure mimics the Array2 structure as much as possible. * The most obvious deviation is that unit return types in Array2 are replaced - * by 'a immarray2 return types in ImmArray2. Unlike an 'a array, + * by 'a immarray2 return types in ImmArray2. Unlike an 'a array, * an 'a immarray2 is an equality type if and only if 'a is an equality type. - * Further immarray2 equality is structural, rather than the "creation" + * Further immarray2 equality is structural, rather than the "creation" * equality used by Array2. Also, the 'a region type is not included in * ImmArray2, but all functions in Array2 that require 'a regions are present - * with arguments taken in the natural order. Finally, the functions mapi - * and map provide similar functionality as modifyi and modify, but relax + * with arguments taken in the natural order. Finally, the functions mapi + * and map provide similar functionality as modifyi and modify, but relax * the constraint that the argument function need be of type 'a -> 'a. *) @@ -381,16 +385,16 @@ datatype traversal = RowMajor | ColMajor val immarray2 : int * int * 'a -> 'a immarray2; - val tabulate : traversal -> int * int * ((int * int) -> 'a) + val tabulate : traversal -> int * int * ((int * int) -> 'a) -> 'a immarray2; val fromList : 'a list list -> 'a immarray2; val dimensions : 'a immarray2 -> int * int; val sub : 'a immarray2 * int * int -> 'a; val update : 'a immarray2 * int * int * 'a -> 'a immarray2; - val extract : 'a immarray2 * int * int * int option * int option + val extract : 'a immarray2 * int * int * int option * int option -> 'a immarray2; - + val copy : {src : 'a immarray2, si : int, sj : int, ilen : int option, jlen : int option, dst : 'a immarray2, di : int, dj : int} -> 'a immarray2; @@ -400,40 +404,40 @@ val row : 'a immarray2 * int -> 'a ImmArray.immarray; val column : 'a immarray2 * int -> 'a ImmArray.immarray; - val appi : traversal -> (int * int * 'a -> unit) - -> ('a immarray2 * int * int * int option * int option) + val appi : traversal -> (int * int * 'a -> unit) + -> ('a immarray2 * int * int * int option * int option) -> unit; val app : traversal -> ('a -> unit) -> 'a immarray2 -> unit; - val foldli : traversal -> ((int * int * 'a * 'b) -> 'b) -> 'b - -> ('a immarray2 * int * int * int option * int option) + val foldli : traversal -> ((int * int * 'a * 'b) -> 'b) -> 'b + -> ('a immarray2 * int * int * int option * int option) -> 'b - val foldri : traversal -> ((int * int * 'a * 'b) -> 'b) -> 'b - -> ('a immarray2 * int * int * int option * int option) + val foldri : traversal -> ((int * int * 'a * 'b) -> 'b) -> 'b + -> ('a immarray2 * int * int * int option * int option) -> 'b val foldl : traversal -> (('a * 'b) -> 'b) -> 'b -> 'a immarray2 -> 'b val foldr : traversal -> (('a * 'b) -> 'b) -> 'b -> 'a immarray2 -> 'b - val mapi : traversal -> (int * int * 'a -> 'b) - -> ('a immarray2 * int * int * int option * int option) + val mapi : traversal -> (int * int * 'a -> 'b) + -> ('a immarray2 * int * int * int option * int option) -> 'b immarray2; val map : traversal -> ('a -> 'b) -> 'a immarray2 -> 'b immarray2; - val modifyi : traversal -> ((int * int * 'a) -> 'a) - -> ('a immarray2 * int * int * int option * int option) + val modifyi : traversal -> ((int * int * 'a) -> 'a) + -> ('a immarray2 * int * int * int option * int option) -> 'a immarray2; val modify : traversal -> ('a -> 'a) -> 'a immarray2 -> 'a immarray2; end; structure ImmArray2 : IMMARRAY2 = struct - + (* datatype 'a immarray2 - * An immarray2 is stored internally as an immutable array + * An immarray2 is stored internally as an immutable array * of immutable arrays. The use of a contructor prevents ImmArray * functions from treating the immarray2 type as an immarray. *) datatype 'a immarray2 = IA2 of 'a ImmArray.immarray ImmArray.immarray; datatype traversal = RowMajor | ColMajor - (* val tabulate : traversal -> int * int * (int * int -> 'a) + (* val tabulate : traversal -> int * int * (int * int -> 'a) * -> 'a immarray2 * val immarray2 : int * int * 'a -> 'a immarray2 * val fromList : 'a list list -> 'a immarray2 @@ -445,23 +449,23 @@ * lengths, allowing one to create an immarray2 in which the * rows have different numbers of columns, although it is likely that * exceptions will be raised when other ImmArray2 functions are applied - * to such an immarray2. Note that dimensions will return the + * to such an immarray2. Note that dimensions will return the * number of columns in row 0. * The dimensions function returns the dimensions of an immarray2. *) fun tabulate RowMajor (r, c, initfn) - = let - fun initrow r = ImmArray.tabulate (c, fn ic => initfn (r,ic)); + = let + fun initrow r = ImmArray.tabulate (c, fn ic => initfn (r,ic)); in IA2 (ImmArray.tabulate (r, fn ir => initrow ir)) end | tabulate ColMajor (r, c, initfn) = turn (tabulate RowMajor (c,r, fn (c,r) => initfn(r,c))) and immarray2 (r, c, init) = tabulate RowMajor (r, c, fn (_, _) => init) - and fromList l - = IA2 (ImmArray.tabulate (length l, + and fromList l + = IA2 (ImmArray.tabulate (length l, fn ir => ImmArray.fromList (List.nth(l,ir)))) - and dimensions (IA2 ia2) = (ImmArray.length ia2, + and dimensions (IA2 ia2) = (ImmArray.length ia2, ImmArray.length (ImmArray.sub (ia2, 0))) (* turn : 'a immarray2 -> 'a immarray2 @@ -470,7 +474,7 @@ *) and turn ia2 = let val (r,c) = dimensions ia2; - in + in tabulate RowMajor (c,r,fn (cc,rr) => sub (ia2,rr,cc)) end @@ -480,11 +484,11 @@ *) and sub (IA2 ia2, r, c) = ImmArray.sub(ImmArray.sub (ia2, r), c); fun update (IA2 ia2, r, c, x) - = IA2 (ImmArray.update (ia2, r, - ImmArray.update (ImmArray.sub (ia2, r), - c, x))); + = IA2 (ImmArray.update (ia2, r, + ImmArray.update (ImmArray.sub (ia2, r), + c, x))); - (* val extract : 'a immarray2 * int * int * + (* val extract : 'a immarray2 * int * int * * int option * int option -> 'a immarray2 * This function extracts a subarray from an immarray2 from * one pair of indices either through the rest of the @@ -493,7 +497,7 @@ fun extract (IA2 ia2, i, j, rlen, clen) = IA2 (ImmArray.map (fn ia => ImmArray.extract (ia, j, clen)) (ImmArray.extract (ia2, i, rlen))); - + (* val nRows : 'a immarray2 -> int * val nCols : 'a immarray2 -> int * These functions return specific dimensions of an immarray2. @@ -525,18 +529,18 @@ *) fun copy {src, si, sj, ilen, jlen, dst=IA2 ia2, di, dj} = let - val nilen = case ilen + val nilen = case ilen of NONE => SOME ((nRows src) - si) | SOME n => SOME n; - in - IA2 (ImmArray.modifyi (fn (r, ia) + in + IA2 (ImmArray.modifyi (fn (r, ia) => ImmArray.copy {src=row (src, si+r-di), - si=sj, len=jlen, - dst=ia, di=dj}) + si=sj, len=jlen, + dst=ia, di=dj}) (ia2, di, nilen)) end; - (* val appi : traversal -> ('a * int * int -> unit) -> 'a immarray2 + (* val appi : traversal -> ('a * int * int -> unit) -> 'a immarray2 * -> unit * val app : traversal -> ('a -> unit) -> 'a immarray2 -> unit * These functions apply a function to every element @@ -549,14 +553,14 @@ (ia, j, clen)) (ia2, i, rlen) | appi ColMajor f (ia2, i, j, rlen, clen) - = appi RowMajor (fn (c,r,x) => f(r,c,x)) (turn ia2, j, i, clen, rlen); + = appi RowMajor (fn (c,r,x) => f(r,c,x)) (turn ia2, j, i, clen, rlen); fun app tr f (IA2 ia2) = appi tr (f o #3) (IA2 ia2, 0, 0, NONE, NONE); - (* val foldli : traversal -> ((int * int * 'a * 'b) -> 'b) -> 'b - * -> ('a immarray2 * int * int * int option * int option) + (* val foldli : traversal -> ((int * int * 'a * 'b) -> 'b) -> 'b + * -> ('a immarray2 * int * int * int option * int option) * -> 'b - * val foldri : traversal -> ((int * int * 'a * 'b) -> 'b) -> 'b - * -> ('a immarray2 * int * int * int option * int option) + * val foldri : traversal -> ((int * int * 'a * 'b) -> 'b) -> 'b + * -> ('a immarray2 * int * int * int option * int option) * -> 'b * val foldl : traversal -> ('a * 'b -> 'b) -> 'b -> 'a immarray2 -> 'b * val foldr : traversal -> ('a * 'b -> 'b) -> 'b -> 'a immarray2 -> 'b @@ -566,38 +570,38 @@ * and uses an immarray2 slice argument. *) fun foldli RowMajor f b (IA2 ia2, i, j, rlen, clen) - = ImmArray.foldli (fn (r,ia,b) + = ImmArray.foldli (fn (r,ia,b) => ImmArray.foldli (fn (c,x,b) => f(r,c,x,b)) b (ia, j, clen)) b (ia2, i, rlen) | foldli ColMajor f b (ia2, i, j, rlen, clen) - = foldli RowMajor (fn (c,r,x,b) => f(r,c,x,b)) b + = foldli RowMajor (fn (c,r,x,b) => f(r,c,x,b)) b (turn ia2, j, i, clen, rlen); fun foldri RowMajor f b (IA2 ia2, i, j, rlen, clen) - = ImmArray.foldri (fn (r,ia,b) + = ImmArray.foldri (fn (r,ia,b) => ImmArray.foldri (fn (c,x,b) => f(r,c,x,b)) b (ia, j, clen)) b (ia2, i, rlen) | foldri ColMajor f b (ia2, i, j, rlen, clen) - = foldri RowMajor (fn (c,r,x,b) => f(r,c,x,b)) b + = foldri RowMajor (fn (c,r,x,b) => f(r,c,x,b)) b (turn ia2, j, i, clen, rlen); fun foldl tr f b (IA2 ia2) = foldli tr (fn (_,_,x,b) => f(x,b)) b (IA2 ia2, 0, 0, NONE, NONE); fun foldr tr f b (IA2 ia2) = foldri tr (fn (_,_,x,b) => f(x,b)) b (IA2 ia2, 0, 0, NONE, NONE); - (* val mapi : traversal -> ('a * int * int -> 'b) -> 'a immarray2 + (* val mapi : traversal -> ('a * int * int -> 'b) -> 'a immarray2 * -> 'b immarray2 * val map : traversal -> ('a -> 'b) -> 'a immarray2 -> 'b immarray2 * These functions map a function over every element * of an immarray2. The mapi function also provides the * indices of the element as an argument to the mapped function * and uses an immarray2 slice argument. Although there are - * similarities between mapi and modifyi, note that when mapi is + * similarities between mapi and modifyi, note that when mapi is * used with an immarray2 slice, the resulting immarray2 is the * same size as the slice. This is necessary to preserve the * type of the resulting immarray2. Thus, mapi with the identity @@ -608,30 +612,30 @@ (ia, j, clen)) (ia2, i, rlen)) | mapi ColMajor f (ia2, i, j, rlen, clen) - = turn (mapi RowMajor (fn (c,r,x) => f(r,c,x)) + = turn (mapi RowMajor (fn (c,r,x) => f(r,c,x)) (turn ia2, j, i, clen, rlen)) fun map tr f (IA2 ia2) = mapi tr (f o #3) (IA2 ia2, 0, 0, NONE, NONE); - (* val modifyi : traversal -> (int * int* 'a -> 'a) - -> ('a immarray2 * int * int * int option * int option) + (* val modifyi : traversal -> (int * int* 'a -> 'a) + -> ('a immarray2 * int * int * int option * int option) * -> 'a immarray2 * val modify : traversal -> ('a -> 'a) -> 'a immarray2 -> 'a immarray2 * These functions apply a function to every element of an immarray2 * in row by column order and returns a new immarray2 where corresponding - * elements are replaced by their modified values. The modifyi - * function also provides the index of the element as an argument + * elements are replaced by their modified values. The modifyi + * function also provides the index of the element as an argument * to the mapped function and uses an immarray2 slice argument. *) fun modifyi RowMajor f (IA2 ia2, i, j, rlen, clen) - = IA2 (ImmArray.modifyi (fn (r,ia) => ImmArray.modifyi (fn (c,x) - => f(r,c,x)) - (ia, j, clen)) + = IA2 (ImmArray.modifyi (fn (r,ia) => ImmArray.modifyi (fn (c,x) + => f(r,c,x)) + (ia, j, clen)) (ia2, i, rlen)) | modifyi ColMajor f (ia2, i, j, rlen, clen) - = turn (modifyi RowMajor (fn (c,r,x) => f(r,c,x)) + = turn (modifyi RowMajor (fn (c,r,x) => f(r,c,x)) (turn ia2, j, i, clen, rlen)); - fun modify tr f (IA2 ia2) + fun modify tr f (IA2 ia2) = modifyi tr (f o #3) (IA2 ia2, 0, 0, NONE, NONE); end; @@ -655,10 +659,10 @@ signature REGISTERFILE = sig - + type registerfile; - - val InitRegisterFile : unit -> registerfile; + + val InitRegisterFile : unit -> registerfile; val LoadRegister : registerfile * int -> Word32.word; @@ -677,7 +681,7 @@ * initializes the registerfile, setting all registers to zero and * setting r0, gp, sp, and fp to their appropriate values, * LoadRegister takes a registerfile and an integer corresponding to - * the register, and returns the Word32.word value at that register, + * the register, and returns the Word32.word value at that register, * and StoreRegister takes a registerfile, an integer corresponding to * the register, and a Word32.word and returns the registerfile * updated with the word stored in the appropriate register. @@ -690,8 +694,8 @@ = struct type registerfile = Word32.word ImmArray.immarray; - - fun InitRegisterFile () + + fun InitRegisterFile () = ImmArray.update (ImmArray.update (ImmArray.update @@ -701,39 +705,39 @@ 28, 0wx00000000 : Word32.word), 29, 0wx00040000 : Word32.word), 30, 0wx00040000 : Word32.word) : registerfile; - + fun LoadRegister (rf, reg) = ImmArray.sub(rf, reg); fun StoreRegister (rf, reg, data) = ImmArray.update(rf, reg, data); - + end; - + (*****************************************************************************) (* * ALU.sig - * + * * This defines the exported datatype and function provided by the * ALU. The datatype ALUOp provides a means to specify which * operation is to be performed by the ALU, and PerformAL performs * one of the operations on two thirty-two bit words, returning the * result as a thirty-two bit word. *) - + signature ALU = sig datatype ALUOp = SLL | SRL | SRA | - ADD | ADDU | - SUB | SUBU | - AND | OR | XOR | - SEQ | SNE | - SLT | SGT | + ADD | ADDU | + SUB | SUBU | + AND | OR | XOR | + SEQ | SNE | + SLT | SGT | SLE | SGE; - + val PerformAL : (ALUOp * Word32.word * Word32.word) -> Word32.word; - + end; (*****************************************************************************) @@ -742,12 +746,12 @@ * ALU.sml * * This defines the ALU structure, which provides the functionality of - * an Arithmetic/Logic Unit. The datatype ALUOp provides a means to + * an Arithmetic/Logic Unit. The datatype ALUOp provides a means to * specify which operation is to be performed by the ALU, and * PerformAL performs one of the operations on two thirty-two bit * words, returning the result as a thirty-two bit word. * - * A note about SML'97 Basis Library implementation of thirty-two bit + * A note about SML'97 Basis Library implementation of thirty-two bit * numbers: the Word32.word is an unsigned thirty-two bit integer, * while Int.int (equivalent to Int.int) is a signed thirty-two * bit integer. In order to perform the signed operations, it is @@ -759,74 +763,74 @@ * Word.word using the Word.fromWord function. *) -structure ALU : ALU +structure ALU : ALU = struct datatype ALUOp = SLL | SRL | SRA | - ADD | ADDU | - SUB | SUBU | - AND | OR | XOR | - SEQ | SNE | - SLT | SGT | + ADD | ADDU | + SUB | SUBU | + AND | OR | XOR | + SEQ | SNE | + SLT | SGT | SLE | SGE; fun PerformAL (opcode, s1, s2) = (case opcode - of SLL => + of SLL => Word32.<< (s1, Word.fromLarge (Word32.toLarge s2)) - | SRL => + | SRL => Word32.>> (s1, Word.fromLarge (Word32.toLarge s2)) - | SRA => + | SRA => Word32.~>> (s1, Word.fromLarge (Word32.toLarge s2)) - | ADD => + | ADD => Word32.fromInt (Int.+ (Word32.toIntX s1, Word32.toIntX s2)) - | ADDU => + | ADDU => Word32.+ (s1, s2) | SUB => Word32.fromInt (Int.- (Word32.toIntX s1, Word32.toIntX s2)) - | SUBU => + | SUBU => Word32.- (s1, s2) - | AND => + | AND => Word32.andb (s1, s2) - | OR => + | OR => Word32.orb (s1, s2) - | XOR => + | XOR => Word32.xorb (s1, s2) - | SEQ => + | SEQ => if (s1 = s2) then 0wx00000001 : Word32.word else 0wx00000000 : Word32.word - | SNE => + | SNE => if not (s1 = s2) then 0wx00000001 : Word32.word else 0wx00000000 : Word32.word - | SLT => + | SLT => if Int.< (Word32.toIntX s1, Word32.toIntX s2) then 0wx00000001 : Word32.word else 0wx00000000 : Word32.word - | SGT => + | SGT => if Int.> (Word32.toIntX s1, Word32.toIntX s2) then 0wx00000001 : Word32.word else 0wx00000000 : Word32.word - | SLE => + | SLE => if Int.<= (Word32.toIntX s1, Word32.toIntX s2) then 0wx00000001 : Word32.word else 0wx00000000 : Word32.word - | SGE => + | SGE => if Int.>= (Word32.toIntX s1, Word32.toIntX s2) then 0wx00000001 : Word32.word else 0wx00000000 : Word32.word) - (* + (* * This handle will handle all ALU errors, most * notably overflow and division by zero, and will - * print an error message and return 0. + * print an error message and return 0. *) - handle _ => + handle _ => (print "Error : ALU returning 0\n"; 0wx00000000 : Word32.word); - + end; (*****************************************************************************) @@ -834,21 +838,21 @@ (* * Memory.sig * - * This defines the exported datatype and functions provided by + * This defines the exported datatype and functions provided by * memory. The datatype memory provides the encapsulation - * of memory, InitMemory initializes memory, setting all + * of memory, InitMemory initializes memory, setting all * addresses to zero, LoadWord takes memory and * a Word32.word corresponding to the address, and returns the - * Word32.word value at that address, StoreWord takes memory, + * Word32.word value at that address, StoreWord takes memory, * a Word32.word corresponding to the address, and a * Word32.word and returns memory updated with the word - * stored at the appropriate address. LoadHWord, LoadHWordU, + * stored at the appropriate address. LoadHWord, LoadHWordU, * LoadByte, and LoadByteU load halfwords, unsigned halfwords, * bytes, and unsigned bytes respectively from memory into the - * lower portion of the returned Word32.word. StoreHWord and + * lower portion of the returned Word32.word. StoreHWord and * StoreByte store halfwords and bytes taken from the lower portion * of the Word32.word into memory. - * GetStatistics takes memory and returns the read and write + * GetStatistics takes memory and returns the read and write * statistics as a string. *) @@ -856,8 +860,8 @@ = sig type memory; - - val InitMemory : unit -> memory; + + val InitMemory : unit -> memory; val LoadWord : memory * Word32.word -> memory * Word32.word; val StoreWord : memory * Word32.word * Word32.word -> memory; @@ -885,48 +889,48 @@ * * This defines the Memory structure, which provides the functionality * of memory. The datatype memory provides the encapsulation of - * memory, InitMemory initializes memory, setting all + * memory, InitMemory initializes memory, setting all * addresses to zero, LoadWord takes memory and * a Word32.word corresponding to the address, and returns the - * Word32.word value at that address and the updated memory, - * StoreWord takes memory, a Word32.word corresponding to the + * Word32.word value at that address and the updated memory, + * StoreWord takes memory, a Word32.word corresponding to the * address, and a Word32.word and returns memory updated with the word - * stored at the appropriate address. LoadHWord, LoadHWordU, + * stored at the appropriate address. LoadHWord, LoadHWordU, * LoadByte, and LoadByteU load halfwords, unsigned halfwords, * bytes, and unsigned bytes respectively from memory into the - * lower portion of the returned Word32.word. StoreHWord and + * lower portion of the returned Word32.word. StoreHWord and * StoreByte store halfwords and bytes taken from the lower portion * of the Word32.word into memory. - * GetStatistics takes memory and returns the read and write + * GetStatistics takes memory and returns the read and write * statistics as a string. * * The underlying structure of memory is an immutable array of Word32.word. * The array has a length of 0x10000, since every element of the array * corresponds to a thirty-two bit integer. * - * Also, the functions AlignWAddress and AlignHWAddress aligns a memory + * Also, the functions AlignWAddress and AlignHWAddress aligns a memory * address to a word and halfword address, respectively. If LoadWord, - * StoreWord, LoadHWord, LoadHWordU, or StoreHWord is asked to access an - * unaligned address, it writes an error message, and uses the address + * StoreWord, LoadHWord, LoadHWordU, or StoreHWord is asked to access an + * unaligned address, it writes an error message, and uses the address * rounded down to the aligned address. *) structure Memory : MEMORY = struct - + type memory = Word32.word ImmArray.immarray * (int * int); - + fun InitMemory () = (ImmArray.immarray(Word32.toInt(0wx10000 : Word32.word), - 0wx00000000 : Word32.word), + 0wx00000000 : Word32.word), (0, 0)) : memory; - fun AlignWAddress address + fun AlignWAddress address = Word32.<< (Word32.>> (address, 0wx0002), 0wx0002); - + fun AlignHWAddress address = Word32.<< (Word32.>> (address, 0wx0001), 0wx0001); - + (* Load and Store provide errorless access to memory. * They provide a common interface to memory, while * the LoadX and StoreX specifically access words, @@ -934,18 +938,18 @@ * In Load and Store, two intermediate values are * generated. The value aligned_address is the aligned * version of the given address, and is used to compare with - * the original address to determine if it was aligned. The - * value use_address is equivalent to aligned_address divided - * by four, and it corresponds to the index of the memory + * the original address to determine if it was aligned. The + * value use_address is equivalent to aligned_address divided + * by four, and it corresponds to the index of the memory * array where the corresponding aligned address can be found. *) - + fun Load ((mem, (reads, writes)), address) = let val aligned_address = AlignWAddress address; val use_address = Word32.>> (aligned_address, 0wx0002); in - ((mem, (reads + 1, writes)), + ((mem, (reads + 1, writes)), ImmArray.sub(mem, Word32.toInt(use_address))) end; @@ -961,7 +965,7 @@ fun LoadWord (mem, address) = let - val aligned_address + val aligned_address = if address = AlignWAddress address then address else (print "Error LW: Memory using aligned address\n"; @@ -969,7 +973,7 @@ in Load(mem, aligned_address) end; - + fun StoreWord (mem, address, data) = let val aligned_address @@ -983,7 +987,7 @@ fun LoadHWord (mem, address) = let - val aligned_address + val aligned_address = if address = AlignHWAddress address then address else (print "Error LH: Memory using aligned address\n"; @@ -991,9 +995,9 @@ val (nmem,l_word) = Load(mem, aligned_address); in (nmem, - case aligned_address + case aligned_address of 0wx00000000 : Word32.word - => Word32.~>>(Word32.<<(l_word, 0wx0010), + => Word32.~>>(Word32.<<(l_word, 0wx0010), 0wx0010) | 0wx00000010 : Word32.word => Word32.~>>(Word32.<<(l_word, 0wx0000), @@ -1004,7 +1008,7 @@ fun LoadHWordU (mem, address) = let - val aligned_address + val aligned_address = if address = AlignHWAddress address then address else (print "Error LHU: Memory using aligned address\n"; @@ -1012,9 +1016,9 @@ val (nmem, l_word) = Load(mem, aligned_address); in (nmem, - case aligned_address + case aligned_address of 0wx00000000 : Word32.word - => Word32.>>(Word32.<<(l_word, 0wx0010), + => Word32.>>(Word32.<<(l_word, 0wx0010), 0wx0010) | 0wx00000010 : Word32.word => Word32.>>(Word32.<<(l_word, 0wx0000), @@ -1022,7 +1026,7 @@ | _ => (print "Error LHU: Memory returning 0\n"; 0wx00000000 : Word32.word)) end; - + fun StoreHWord (mem, address, data) = let val aligned_address @@ -1037,7 +1041,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wxFFFF0000 : Word32.word, s_word), - Word32.<<(Word32.andb(0wx0000FFFF : + Word32.<<(Word32.andb(0wx0000FFFF : Word32.word, data), 0wx0000))) @@ -1045,7 +1049,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wx0000FFFF : Word32.word, s_word), - Word32.<<(Word32.andb(0wx0000FFFF : + Word32.<<(Word32.andb(0wx0000FFFF : Word32.word, data), 0wx0010))) @@ -1059,10 +1063,10 @@ val (nmem, l_word) = Load(mem, aligned_address); in (nmem, - case aligned_address + case aligned_address of 0wx00000000 : Word32.word - => Word32.~>>(Word32.<<(l_word, - 0wx0018), + => Word32.~>>(Word32.<<(l_word, + 0wx0018), 0wx0018) | 0wx00000008 : Word32.word => Word32.~>>(Word32.<<(l_word, @@ -1086,7 +1090,7 @@ val (nmem, l_word) = Load(mem, aligned_address); in (nmem, - case aligned_address + case aligned_address of 0wx00000000 : Word32.word => Word32.>>(Word32.<<(l_word, 0wx0018), @@ -1106,7 +1110,7 @@ | _ => (print "Error LBU: Memory returning 0\n"; 0wx00000000 : Word32.word)) end; - + fun StoreByte (mem, address, data) = let val aligned_address = address; @@ -1117,7 +1121,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wxFFFFFF00 : Word32.word, s_word), - Word32.<<(Word32.andb(0wx000000FF : + Word32.<<(Word32.andb(0wx000000FF : Word32.word, data), 0wx0000))) @@ -1125,7 +1129,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wxFFFF00FF : Word32.word, s_word), - Word32.<<(Word32.andb(0wx000000FF : + Word32.<<(Word32.andb(0wx000000FF : Word32.word, data), 0wx0008))) @@ -1133,7 +1137,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wxFF00FFFF : Word32.word, s_word), - Word32.<<(Word32.andb(0wx000000FF : + Word32.<<(Word32.andb(0wx000000FF : Word32.word, data), 0wx0010))) @@ -1141,7 +1145,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wx00FFFFFF : Word32.word, s_word), - Word32.<<(Word32.andb(0wx000000FF : + Word32.<<(Word32.andb(0wx000000FF : Word32.word, data), 0wx0018))) @@ -1153,7 +1157,7 @@ = "Memory :\n" ^ "Memory Reads : " ^ (Int.toString reads) ^ "\n" ^ "Memory Writes : " ^ (Int.toString writes) ^ "\n"; - + end; (*****************************************************************************) @@ -1175,7 +1179,7 @@ signature CACHESPEC = sig - + datatype WriteHitOption = Write_Through | Write_Back; @@ -1207,13 +1211,13 @@ * Word32.word at that address and the updated cache and memory, * StoreWord takes memory, a Word32.word corresponding to the address, * and a Word32.word and returns the cache and memory updated with the - * stored at the appropriate address. LoadHWord, LoadHWordU, + * stored at the appropriate address. LoadHWord, LoadHWordU, * LoadByte, and LoadByteU load halfwords, unsigned halfwords, * bytes, and unsigned bytes respectively from memory into the - * lower portion of the returned Word32.word. StoreHWord and + * lower portion of the returned Word32.word. StoreHWord and * StoreByte store halfwords and bytes taken from the lower portion * of the Word32.word into memory. - * GetStatistics takes memory and returns the read and write + * GetStatistics takes memory and returns the read and write * statistics as a string. * * The underlying structure of cache is a two dimensional array of @@ -1222,29 +1226,29 @@ * The size of the cache, the associativity, and the block size are * specified by the cache specification. * - * Also, the functions AlignWAddress and AlignHWAddress aligns a memory + * Also, the functions AlignWAddress and AlignHWAddress aligns a memory * address to a word and halfword address, respectively. If LoadWord, - * StoreWord, LoadHWord, LoadHWordU, or StoreHWord is asked to access an - * unaligned address, it writes an error message, and uses the address + * StoreWord, LoadHWord, LoadHWordU, or StoreHWord is asked to access an + * unaligned address, it writes an error message, and uses the address * rounded down to the aligned address. *) functor CachedMemory (structure CS : CACHESPEC; - structure MEM : MEMORY;) : MEMORY + structure MEM : MEMORY;) : MEMORY = struct - - type cacheline + + type cacheline = bool * bool * Word32.word * Word32.word ImmArray.immarray; type cacheset = cacheline ImmArray.immarray; - type cache + type cache = cacheset ImmArray.immarray; - + type memory = (cache * (int * int * int * int)) * MEM.memory; - - + + (* Performs log[base2] on an integer. *) fun exp2 0 = 1 | exp2 n = 2 * (exp2 (n-1)) @@ -1252,7 +1256,7 @@ fun log2_aux n = if exp2 n > x then (n-1) else log2_aux (n+1) - in + in log2_aux 0 end @@ -1267,24 +1271,24 @@ val BlockOffsetBits = log2 (BlockSize * 4); val IndexBits = log2 IndexSize; val TagBits = 32 - BlockOffsetBits - IndexBits; - + (* - * RandEntry returns a random number between + * RandEntry returns a random number between * [0, Associativity - 1]. It is used to determine * replacement of data in the cache. *) val RandEntry = let val modulus = Word.fromInt(Associativity - 1) - in + in fn () => Word.toInt(Word.mod(rand (), modulus)) end - (* + (* * The InitCache function initializes the cache to * not-valid, not-dirty, 0wx00000000 tag, blocks initialized - * to 0wx00000000. + * to 0wx00000000. *) fun InitCache () = let @@ -1292,64 +1296,64 @@ ImmArray.immarray (BlockSize, 0wx00000000 : Word32.word)); val cacheset = ImmArray.immarray (Associativity, cacheline); - in + in (ImmArray.immarray (IndexSize, cacheset), (0, 0, 0, 0)) end; - - (* + + (* * The InitMemory function initializes the cache * and the memory being cached. *) fun InitMemory () = (InitCache (), MEM.InitMemory ()) : memory; - - - (* + + + (* * GetTag returns the Word32.word corresponding to the tag field of * address *) - fun GetTag address - = Word32.>> (address, + fun GetTag address + = Word32.>> (address, Word.fromInt (IndexBits + BlockOffsetBits)); - - (* + + (* * GetIndex returns the Word32.word corresponding to the index * field of address. *) fun GetIndex address = let val mask - = Word32.notb - (Word32.<< + = Word32.notb + (Word32.<< (Word32.>> (0wxFFFFFFFF : Word32.word, - Word.fromInt (IndexBits + BlockOffsetBits)), + Word.fromInt (IndexBits + BlockOffsetBits)), Word.fromInt (IndexBits + BlockOffsetBits))); in Word32.>> (Word32.andb (address, mask), Word.fromInt (BlockOffsetBits)) end; - - (* + + (* * GetBlockOffset returns the Word32.word corresponding to the * block offset field of address. *) fun GetBlockOffset address = let val mask - = Word32.notb - (Word32.<< + = Word32.notb + (Word32.<< (Word32.>> (0wxFFFFFFFF : Word32.word, - Word.fromInt BlockOffsetBits), + Word.fromInt BlockOffsetBits), Word.fromInt BlockOffsetBits)); in Word32.andb (address, mask) end; - - - (* + + + (* * The InCache* family of functions returns a boolean value * that determines if the word specified by address is in the * cache at the current time (and that the data is valid). @@ -1358,41 +1362,41 @@ = tag = (GetTag address) andalso valid; fun InCache_aux_set (set, address) - = ImmArray.foldr (fn (entry, result) => - (InCache_aux_entry (entry, address)) orelse - result) - false + = ImmArray.foldr (fn (entry, result) => + (InCache_aux_entry (entry, address)) orelse + result) + false set; fun InCache (cac, address) - = InCache_aux_set (ImmArray.sub (cac, + = InCache_aux_set (ImmArray.sub (cac, Word32.toInt (GetIndex address)), address); - (* - * The ReadCache* family of functions returns the Word32.word + (* + * The ReadCache* family of functions returns the Word32.word * stored at address in the cache. *) - fun ReadCache_aux_entry ((valid, dirty, tag, block), address) - = ImmArray.sub (block, - Word32.toInt (Word32.>> (GetBlockOffset address, + fun ReadCache_aux_entry ((valid, dirty, tag, block), address) + = ImmArray.sub (block, + Word32.toInt (Word32.>> (GetBlockOffset address, 0wx0002))); - - fun ReadCache_aux_set (set, address) + + fun ReadCache_aux_set (set, address) = ImmArray.foldr (fn (entry, result) => if InCache_aux_entry (entry, address) then ReadCache_aux_entry (entry, address) else result) (0wx00000000 : Word32.word) set; - + fun ReadCache (cac, address) - = ReadCache_aux_set (ImmArray.sub (cac, + = ReadCache_aux_set (ImmArray.sub (cac, Word32.toInt(GetIndex address)), address); - (* + (* * The WriteCache* family of functions returns the updated * cache with data stored at address. *) @@ -1400,20 +1404,20 @@ = let val ndirty = case WriteHit of Write_Through => false - | Write_Back => true; + | Write_Back => true; in - (true, ndirty, tag, - ImmArray.update (block, - Word32.toInt (Word32.>> - (GetBlockOffset address, - 0wx0002)), + (true, ndirty, tag, + ImmArray.update (block, + Word32.toInt (Word32.>> + (GetBlockOffset address, + 0wx0002)), data)) end; - - fun WriteCache_aux_set (set, address, data) + + fun WriteCache_aux_set (set, address, data) = ImmArray.map (fn entry => if InCache_aux_entry (entry, address) - then WriteCache_aux_entry (entry, address, + then WriteCache_aux_entry (entry, address, data) else entry) set; @@ -1428,7 +1432,7 @@ end; - (* + (* * The LoadBlock function returns the updated * memory and the block containing address loaded from memory. *) @@ -1437,26 +1441,26 @@ let val laddress = Word32.+ (Word32.<< - (Word32.>> + (Word32.>> (address, - Word.fromInt + Word.fromInt BlockOffsetBits), - Word.fromInt - BlockOffsetBits), - Word32.<< (Word32.fromInt - offset, + Word.fromInt + BlockOffsetBits), + Word32.<< (Word32.fromInt + offset, 0wx0002)); - val (nmem, nword) = MEM.LoadWord (mem, + val (nmem, nword) = MEM.LoadWord (mem, laddress); in (ImmArray.update (block, offset, nword), nmem) end) - (ImmArray.immarray (BlockSize, + (ImmArray.immarray (BlockSize, 0wx00000000 : Word32.word), mem) (ImmArray.tabulate (BlockSize, fn i => i)); - - (* + + (* * The StoreBlock functionsreturns the updated * memory with block stored into the block containing address. *) @@ -1465,14 +1469,14 @@ let val saddress = Word32.+ (Word32.<< - (Word32.>> + (Word32.>> (address, - Word.fromInt + Word.fromInt BlockOffsetBits), - Word.fromInt - BlockOffsetBits), - Word32.<< (Word32.fromInt - offset, + Word.fromInt + BlockOffsetBits), + Word32.<< (Word32.fromInt + offset, 0wx0002)); in MEM.StoreWord (mem, saddress, @@ -1482,7 +1486,7 @@ (ImmArray.tabulate (BlockSize, fn i => i)); - (* + (* * The LoadCache* family of functions returns the updated * cache and memory, with the block containing address loaded * into the cache at the appropriate cache line, and dirty @@ -1490,7 +1494,7 @@ *) fun LoadCache_aux_entry ((valid, dirty, tag, block), mem, address) = let - val saddress + val saddress = Word32.orb (Word32.<< (tag, Word.fromInt TagBits), Word32.<< (GetIndex address, @@ -1506,37 +1510,37 @@ fun LoadCache_aux_set (set, mem, address) = let val entry = RandEntry (); - val (nentry, nmem) = LoadCache_aux_entry (ImmArray.sub (set, + val (nentry, nmem) = LoadCache_aux_entry (ImmArray.sub (set, entry), mem, address); in (ImmArray.update (set, entry, nentry), nmem) end; - fun LoadCache (cac, mem, address) + fun LoadCache (cac, mem, address) = let val index = Word32.toInt (GetIndex address); - val (nset, nmem) - = LoadCache_aux_set (ImmArray.sub (cac, index), + val (nset, nmem) + = LoadCache_aux_set (ImmArray.sub (cac, index), mem, address); in (ImmArray.update (cac, index, nset), nmem) end; - (* + (* * The remainder of the function defined here satisfy the MEMORY * signature. This allows a CachedMemory to act exactly like * a normal Memory, and thus caches can be nested to an arbitrary * depth. *) - fun AlignWAddress address + fun AlignWAddress address = Word32.<< (Word32.>> (address, 0wx0002), 0wx0002); - + fun AlignHWAddress address = Word32.<< (Word32.>> (address, 0wx0001), 0wx0001); - + (* Load and Store provide errorless access to memory. * They provide a common interface to memory, while * the LoadX and StoreX specifically access words, @@ -1544,9 +1548,9 @@ * In Load and Store, two intermediate values are * generated. The value aligned_address is the aligned * version of the given address, and is used to compare with - * the original address to determine if it was aligned. The - * value use_address is equivalent to aligned_address divided - * by four, and it corresponds to the index of the memory + * the original address to determine if it was aligned. The + * value use_address is equivalent to aligned_address divided + * by four, and it corresponds to the index of the memory * array where the corresponding aligned address can be found. *) @@ -1555,10 +1559,10 @@ val aligned_address = AlignWAddress address; in if InCache (cac, aligned_address) - then (((cac, (rh + 1, rm, wh, wm)), mem), + then (((cac, (rh + 1, rm, wh, wm)), mem), ReadCache (cac, aligned_address)) else let - val (ncac, nmem) + val (ncac, nmem) = LoadCache (cac, mem, aligned_address); in (((ncac, (rh, rm + 1, wh, wm)), nmem), @@ -1575,25 +1579,25 @@ then let val ncac = WriteCache (cac, aligned_address, data); in - case WriteHit - of Write_Through => + case WriteHit + of Write_Through => ((ncac, (rh, rm, wh + 1, wm)), MEM.StoreWord (mem, aligned_address, data)) - | Write_Back => + | Write_Back => ((ncac, (rh, rm, wh + 1, wm)), mem) end else case WriteMiss of Write_Allocate => let - val (ncac, nmem) + val (ncac, nmem) = LoadCache (cac, mem, aligned_address); val nncac = WriteCache (ncac, aligned_address, data); in case WriteHit - of Write_Through => - ((nncac, (rh, rm, wh, wm + 1)), - MEM.StoreWord (nmem, aligned_address, + of Write_Through => + ((nncac, (rh, rm, wh, wm + 1)), + MEM.StoreWord (nmem, aligned_address, data)) | Write_Back => ((nncac, (rh, rm, wh, wm + 1)), @@ -1606,7 +1610,7 @@ fun LoadWord (mem, address) = let - val aligned_address + val aligned_address = if address = AlignWAddress address then address else (print "Error LW: Memory using aligned address\n"; @@ -1614,7 +1618,7 @@ in Load(mem, aligned_address) end; - + fun StoreWord (mem, address, data) = let val aligned_address @@ -1628,7 +1632,7 @@ fun LoadHWord (mem, address) = let - val aligned_address + val aligned_address = if address = AlignHWAddress address then address else (print "Error LH: Memory using aligned address\n"; @@ -1636,9 +1640,9 @@ val (nmem,l_word) = Load(mem, aligned_address); in (nmem, - case aligned_address + case aligned_address of 0wx00000000 : Word32.word - => Word32.~>>(Word32.<<(l_word, 0wx0010), + => Word32.~>>(Word32.<<(l_word, 0wx0010), 0wx0010) | 0wx00000010 : Word32.word => Word32.~>>(Word32.<<(l_word, 0wx0000), @@ -1649,7 +1653,7 @@ fun LoadHWordU (mem, address) = let - val aligned_address + val aligned_address = if address = AlignHWAddress address then address else (print "Error LHU: Memory using aligned address\n"; @@ -1657,9 +1661,9 @@ val (nmem, l_word) = Load(mem, aligned_address); in (nmem, - case aligned_address + case aligned_address of 0wx00000000 : Word32.word - => Word32.>>(Word32.<<(l_word, 0wx0010), + => Word32.>>(Word32.<<(l_word, 0wx0010), 0wx0010) | 0wx00000010 : Word32.word => Word32.>>(Word32.<<(l_word, 0wx0000), @@ -1667,7 +1671,7 @@ | _ => (print "Error LHU: Memory returning 0\n"; 0wx00000000 : Word32.word)) end; - + fun StoreHWord (mem, address, data) = let val aligned_address @@ -1682,7 +1686,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wxFFFF0000 : Word32.word, s_word), - Word32.<<(Word32.andb(0wx0000FFFF : + Word32.<<(Word32.andb(0wx0000FFFF : Word32.word, data), 0wx0000))) @@ -1690,7 +1694,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wx0000FFFF : Word32.word, s_word), - Word32.<<(Word32.andb(0wx0000FFFF : + Word32.<<(Word32.andb(0wx0000FFFF : Word32.word, data), 0wx0010))) @@ -1704,10 +1708,10 @@ val (nmem, l_word) = Load(mem, aligned_address); in (nmem, - case aligned_address + case aligned_address of 0wx00000000 : Word32.word - => Word32.~>>(Word32.<<(l_word, - 0wx0018), + => Word32.~>>(Word32.<<(l_word, + 0wx0018), 0wx0018) | 0wx00000008 : Word32.word => Word32.~>>(Word32.<<(l_word, @@ -1731,7 +1735,7 @@ val (nmem, l_word) = Load(mem, aligned_address); in (nmem, - case aligned_address + case aligned_address of 0wx00000000 : Word32.word => Word32.>>(Word32.<<(l_word, 0wx0018), @@ -1751,7 +1755,7 @@ | _ => (print "Error LBU: Memory returning 0\n"; 0wx00000000 : Word32.word)) end; - + fun StoreByte (mem, address, data) = let val aligned_address = address; @@ -1762,7 +1766,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wxFFFFFF00 : Word32.word, s_word), - Word32.<<(Word32.andb(0wx000000FF : + Word32.<<(Word32.andb(0wx000000FF : Word32.word, data), 0wx0000))) @@ -1770,7 +1774,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wxFFFF00FF : Word32.word, s_word), - Word32.<<(Word32.andb(0wx000000FF : + Word32.<<(Word32.andb(0wx000000FF : Word32.word, data), 0wx0008))) @@ -1778,7 +1782,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wxFF00FFFF : Word32.word, s_word), - Word32.<<(Word32.andb(0wx000000FF : + Word32.<<(Word32.andb(0wx000000FF : Word32.word, data), 0wx0010))) @@ -1786,7 +1790,7 @@ => Store(mem, aligned_address, Word32.orb(Word32.andb(0wx00FFFFFF : Word32.word, s_word), - Word32.<<(Word32.andb(0wx000000FF : + Word32.<<(Word32.andb(0wx000000FF : Word32.word, data), 0wx0018))) @@ -1798,7 +1802,7 @@ = let val th = rh + wh; - + val tm = rm + wm; val who = case WriteHit @@ -1840,10 +1844,15 @@ signature DLXSIMULATOR = sig - + val run_file : string -> unit; - val run_prog : string list -> unit; - + val run_prog : {instructions: string list, + trap: {inputFn: {state: 'state} -> {input: int, state: 'state}, + outputFn: {output: int, state: 'state} -> {state: 'state}, + state: 'state}} -> + {state: 'state, + statistics: unit -> string} + end; (*****************************************************************************) @@ -1853,22 +1862,22 @@ * * This defines the DLXSimulatorFun functor, which takes three * structures, corresponding to the register file, the ALU, and memory, - * and provides the functionality of a DLX processor, able to execute + * and provides the functionality of a DLX processor, able to execute * DLX programs. The function run_file takes a string corresponding to the * name of the file to be executed, and executes it. The function * run_prog takes a list of instructions and executes them. *) -functor DLXSimulatorFun (structure RF : REGISTERFILE; +functor DLXSimulatorFun (structure RF : REGISTERFILE; structure ALU : ALU; structure MEM : MEMORY; ) : DLXSIMULATOR = struct - + (* * The datatype Opcode provides a means of differentiating * * among the main opcodes. *) - datatype Opcode = + datatype Opcode = (* for R-type opcodes *) SPECIAL | (* I-type opcodes *) @@ -1876,7 +1885,7 @@ ADDI | ADDUI | SUBI | SUBUI | ANDI | ORI | XORI | LHI | - SLLI | SRLI | SRAI | + SLLI | SRLI | SRAI | SEQI | SNEI | SLTI | SGTI | SLEI | SGEI | LB | LBU | SB | LH | LHU | SH | @@ -1884,19 +1893,19 @@ (* J-type opcodes *) J | JAL | TRAP | JR | JALR | (* Unrecognized opcode *) - NON_OP; - + NON_OP; + (* - * The datatype RRFuncCode provides a means of + * The datatype RRFuncCode provides a means of * differentiating among * the register-register function codes. - *) + *) datatype RRFunctCode = NOP | SLL | SRL | SRA | ADD | ADDU | SUB | SUBU | AND | OR | XOR | SEQ | SNE | SLT | SGT | SLE | SGE | NON_FUNCT; - + (* * The datatype Instruction provides a means of * differentiating among the three different types of @@ -1906,10 +1915,10 @@ * An J-type is interpreted as (opcode, offset). * An ILLEGAL causes the simulator to end. *) - datatype Instruction + datatype Instruction = ITYPE of Opcode * int * int * Word32.word - | RTYPE of Opcode * int * int * int * int * RRFunctCode - | JTYPE of Opcode * Word32.word + | RTYPE of Opcode * int * int * int * int * RRFunctCode + | JTYPE of Opcode * Word32.word | ILLEGAL; (* @@ -1917,7 +1926,7 @@ * and is used to check for the halt of the program. *) val HALT = JTYPE (TRAP, 0wx00000000); - + (* * The function DecodeIType decodes a Word32.word into an * I-type instruction. @@ -1927,7 +1936,7 @@ val opc = Word32.andb (Word32.>> (instr, 0wx001A), 0wx0000003F : Word32.word); - + val opcode = case opc of 0wx00000004 : Word32.word => BEQZ | 0wx00000005 : Word32.word => BNEZ @@ -1958,13 +1967,13 @@ | 0wx0000002B : Word32.word => SW | _ => (print "Error : Non I-Type opcode\n"; NON_OP); - + val rs1 = Word32.toInt(Word32.andb (Word32.>> (instr, 0wx0015), 0wx0000001F : Word32.word)); - + val rd = Word32.toInt(Word32.andb (Word32.>> (instr, 0wx0010), 0wx0000001F : Word32.word)); - + val immediate = Word32.~>> (Word32.<< (instr, 0wx0010), 0wx0010); @@ -1973,29 +1982,29 @@ then ILLEGAL else ITYPE (opcode, rs1, rd, immediate) end; - + (* * The function DecodeRType decodes a Word32.word into an * R-type instruction. *) fun DecodeRType instr = let - + val rs1 = Word32.toInt (Word32.andb (Word32.>> (instr, 0wx0015), 0wx0000001F : Word32.word)); - + val rs2 = Word32.toInt (Word32.andb (Word32.>> (instr, 0wx0010), 0wx0000001F : Word32.word)); - + val rd = Word32.toInt (Word32.andb (Word32.>> (instr, 0wx000B), 0wx0000001F : Word32.word)); - - val shamt + + val shamt = Word32.toInt (Word32.andb (Word32.>> (instr, 0wx0006), 0wx0000001F : Word32.word)); - + val funct = Word32.andb (instr, 0wx0000003F : Word32.word); - + val functcode = case funct of 0wx00000000 : Word32.word => NOP | 0wx00000004 : Word32.word => SLL @@ -2016,23 +2025,23 @@ | 0wx0000002D : Word32.word => SGE | _ => (print "Error : Non R-type funct\n"; NON_FUNCT); - + in if functcode = NON_FUNCT then ILLEGAL else RTYPE (SPECIAL, rs1, rs2, rd, shamt, functcode) end; - + (* * The function DecodeJType decodes a Word32.word into an * J-type instruction. *) - fun DecodeJType instr + fun DecodeJType instr = let val opc = Word32.andb (Word32.>> (instr, 0wx1A), 0wx0000003F : Word32.word); - + val opcode = case opc of 0wx00000002 : Word32.word => J | 0wx00000003 : Word32.word => JAL @@ -2041,7 +2050,7 @@ | 0wx00000013 : Word32.word => JALR | _ => (print "Error : Non J-type opcode\n"; NON_OP); - + val offset = Word32.~>> (Word32.<< (instr, 0wx0006), 0wx0006); @@ -2050,10 +2059,10 @@ then ILLEGAL else JTYPE (opcode, offset) end; - + (* * The function DecodeInstr decodes a Word32.word into an - * instruction. It first checks the opcode, and then calls + * instruction. It first checks the opcode, and then calls * one of DecodeIType, DecodeJType, and DecodeRType to * complete the decoding process. *) @@ -2062,7 +2071,7 @@ val opcode = Word32.andb (Word32.>> (instr, 0wx1A), 0wx0000003F : Word32.word); - + in case opcode of 0wx00000000 : Word32.word => DecodeRType instr @@ -2100,157 +2109,157 @@ | _ => (print "Error : Unrecognized opcode\n"; ILLEGAL) end; - + (* * The function PerformIType performs one of the I-Type * instructions. A number of the instructions make use of the * ALU, and as such, call ALU.PerformAL. *) - fun PerformIType ((BEQZ, rs1, rd, immediate), (PC, rf, mem)) + fun PerformIType ((BEQZ, rs1, rd, immediate), (PC, rf, mem, trap)) = if (RF.LoadRegister(rf, rs1) = (0wx00000000 : Word32.word)) then (Word32.fromInt (Int.+ (Word32.toIntX PC, Word32.toIntX - (Word32.<< (immediate, + (Word32.<< (immediate, 0wx0002)))), - rf, mem) - else (PC, rf, mem) - - | PerformIType ((BNEZ, rs1, rd, immediate), (PC, rf, mem)) + rf, mem, trap) + else (PC, rf, mem, trap) + + | PerformIType ((BNEZ, rs1, rd, immediate), (PC, rf, mem, trap)) = if not (RF.LoadRegister(rf, rs1) = (0wx00000000 : Word32.word)) then (Word32.fromInt (Int.+ (Word32.toIntX PC, Word32.toIntX (Word32.<< (immediate, 0wx0002)))), - rf, mem) - else (PC, rf, mem) - - | PerformIType ((ADDI, rs1, rd, immediate), (PC, rf, mem)) - = (PC, - RF.StoreRegister(rf, rd, + rf, mem, trap) + else (PC, rf, mem, trap) + + | PerformIType ((ADDI, rs1, rd, immediate), (PC, rf, mem, trap)) + = (PC, + RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.ADD, RF.LoadRegister(rf, rs1), immediate)), - mem) + mem, trap) - | PerformIType ((ADDUI, rs1, rd, immediate), (PC, rf, mem)) + | PerformIType ((ADDUI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, - RF.StoreRegister(rf, rd, + RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.ADDU, RF.LoadRegister(rf, rs1), immediate)), - mem) - - | PerformIType ((SUBI, rs1, rd, immediate), (PC, rf, mem)) + mem, trap) + + | PerformIType ((SUBI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, - RF.StoreRegister(rf, rd, + RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SUB, RF.LoadRegister(rf, rs1), immediate)), - mem) + mem, trap) - | PerformIType ((SUBUI, rs1, rd, immediate), (PC, rf, mem)) + | PerformIType ((SUBUI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, - RF.StoreRegister(rf, rd, + RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SUBU, RF.LoadRegister(rf, rs1), immediate)), - mem) - - | PerformIType ((ANDI, rs1, rd, immediate), (PC, rf, mem)) + mem, trap) + + | PerformIType ((ANDI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, - RF.StoreRegister(rf, rd, + RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.AND, RF.LoadRegister(rf, rs1), immediate)), - mem) - - | PerformIType ((ORI, rs1, rd, immediate), (PC, rf, mem)) + mem, trap) + + | PerformIType ((ORI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, - RF.StoreRegister(rf, rd, + RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.OR, RF.LoadRegister(rf, rs1), immediate)), - mem) - - | PerformIType ((XORI, rs1, rd, immediate), (PC, rf, mem)) + mem, trap) + + | PerformIType ((XORI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, - RF.StoreRegister(rf, rd, + RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.XOR, RF.LoadRegister(rf, rs1), immediate)), - mem) - - | PerformIType ((LHI, rs1, rd, immediate), (PC, rf, mem)) - = (PC, RF.StoreRegister(rf, rd, Word32.<< (immediate, 0wx0010)), mem) + mem, trap) + + | PerformIType ((LHI, rs1, rd, immediate), (PC, rf, mem, trap)) + = (PC, RF.StoreRegister(rf, rd, Word32.<< (immediate, 0wx0010)), mem, trap) - | PerformIType ((SLLI, rs1, rd, immediate), (PC, rf, mem)) - = (PC, RF.StoreRegister(rf, rd, + | PerformIType ((SLLI, rs1, rd, immediate), (PC, rf, mem, trap)) + = (PC, RF.StoreRegister(rf, rd, Word32.<< (RF.LoadRegister(rf, rs1), Word.fromLarge (Word32.toLarge immediate))), - mem) + mem, trap) - | PerformIType ((SRLI, rs1, rd, immediate), (PC, rf, mem)) - = (PC, RF.StoreRegister(rf, rd, + | PerformIType ((SRLI, rs1, rd, immediate), (PC, rf, mem, trap)) + = (PC, RF.StoreRegister(rf, rd, Word32.>> (RF.LoadRegister(rf, rs1), Word.fromLarge (Word32.toLarge immediate))), - mem) + mem, trap) - | PerformIType ((SRAI, rs1, rd, immediate), (PC, rf, mem)) - = (PC, RF.StoreRegister(rf, rd, + | PerformIType ((SRAI, rs1, rd, immediate), (PC, rf, mem, trap)) + = (PC, RF.StoreRegister(rf, rd, Word32.~>> (RF.LoadRegister(rf, rs1), Word.fromLarge (Word32.toLarge immediate))), - mem) + mem, trap) - | PerformIType ((SEQI, rs1, rd, immediate), (PC, rf, mem)) + | PerformIType ((SEQI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SEQ, RF.LoadRegister(rf, rs1), immediate)), - mem) + mem, trap) - | PerformIType ((SNEI, rs1, rd, immediate), (PC, rf, mem)) + | PerformIType ((SNEI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SNE, RF.LoadRegister(rf, rs1), immediate)), - mem) + mem, trap) - | PerformIType ((SLTI, rs1, rd, immediate), (PC, rf, mem)) + | PerformIType ((SLTI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SLT, RF.LoadRegister(rf, rs1), immediate)), - mem) + mem, trap) - | PerformIType ((SGTI, rs1, rd, immediate), (PC, rf, mem)) + | PerformIType ((SGTI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SGT, RF.LoadRegister(rf, rs1), immediate)), - mem) + mem, trap) - | PerformIType ((SLEI, rs1, rd, immediate), (PC, rf, mem)) + | PerformIType ((SLEI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SLE, RF.LoadRegister(rf, rs1), immediate)), - mem) + mem, trap) - | PerformIType ((SGEI, rs1, rd, immediate), (PC, rf, mem)) + | PerformIType ((SGEI, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SGE, RF.LoadRegister(rf, rs1), immediate)), - mem) - - | PerformIType ((LB, rs1, rd, immediate), (PC, rf, mem)) + mem, trap) + + | PerformIType ((LB, rs1, rd, immediate), (PC, rf, mem, trap)) = let val (nmem, l_byte) = MEM.LoadByte(mem, Word32.+ (RF.LoadRegister(rf, rs1), @@ -2258,10 +2267,10 @@ in (PC, RF.StoreRegister(rf, rd, l_byte), - nmem) + nmem, trap) end - | PerformIType ((LBU, rs1, rd, immediate), (PC, rf, mem)) + | PerformIType ((LBU, rs1, rd, immediate), (PC, rf, mem, trap)) = let val (nmem, l_byte) = MEM.LoadByteU(mem, Word32.+ (RF.LoadRegister(rf, rs1), @@ -2269,17 +2278,18 @@ in (PC, RF.StoreRegister(rf, rd, l_byte), - nmem) + nmem, trap) end - - | PerformIType ((SB, rs1, rd, immediate), (PC, rf, mem)) + + | PerformIType ((SB, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, rf, - MEM.StoreByte(mem, + MEM.StoreByte(mem, Word32.+ (RF.LoadRegister(rf, rs1), immediate), - Word32.andb(0wx000000FF, RF.LoadRegister(rf, rd)))) - - | PerformIType ((LH, rs1, rd, immediate), (PC, rf, mem)) + Word32.andb(0wx000000FF, RF.LoadRegister(rf, rd))), + trap) + + | PerformIType ((LH, rs1, rd, immediate), (PC, rf, mem, trap)) = let val (nmem, l_hword) = MEM.LoadHWord(mem, Word32.+ (RF.LoadRegister(rf, rs1), @@ -2287,10 +2297,10 @@ in (PC, RF.StoreRegister(rf, rd, l_hword), - nmem) + nmem, trap) end - | PerformIType ((LHU, rs1, rd, immediate), (PC, rf, mem)) + | PerformIType ((LHU, rs1, rd, immediate), (PC, rf, mem, trap)) = let val (nmem, l_hword) = MEM.LoadHWordU(mem, Word32.+ (RF.LoadRegister(rf, rs1), @@ -2298,38 +2308,40 @@ in (PC, RF.StoreRegister(rf, rd, l_hword), - nmem) + nmem, trap) end - - | PerformIType ((SH, rs1, rd, immediate), (PC, rf, mem)) + + | PerformIType ((SH, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, rf, - MEM.StoreByte(mem, + MEM.StoreByte(mem, Word32.+ (RF.LoadRegister(rf, rs1), immediate), - Word32.andb(0wx0000FFFF, RF.LoadRegister(rf, rd)))) - + Word32.andb(0wx0000FFFF, RF.LoadRegister(rf, rd))), + trap) - | PerformIType ((LW, rs1, rd, immediate), (PC, rf, mem)) + + | PerformIType ((LW, rs1, rd, immediate), (PC, rf, mem, trap)) = let - val (nmem, l_word) + val (nmem, l_word) = MEM.LoadWord(mem, Word32.+ (RF.LoadRegister(rf, rs1), immediate)); in (PC, RF.StoreRegister(rf, rd, l_word), - nmem) + nmem, trap) end - | PerformIType ((SW, rs1, rd, immediate), (PC, rf, mem)) + | PerformIType ((SW, rs1, rd, immediate), (PC, rf, mem, trap)) = (PC, rf, MEM.StoreWord(mem, Word32.+ (RF.LoadRegister(rf, rs1), immediate), - RF.LoadRegister(rf, rd))) - - | PerformIType ((_, rs1, rd, immediate), (PC, rf, mem)) + RF.LoadRegister(rf, rd)), + trap) + + | PerformIType ((_, rs1, rd, immediate), (PC, rf, mem, trap)) = (print "Error : Non I-Type opcode, performing NOP\n"; - (PC, rf, mem)); + (PC, rf, mem, trap)); (* @@ -2337,222 +2349,223 @@ * instructions. All of the instructions make use of the * ALU, and as such, call ALU.PerformAL. *) - fun PerformRType ((SPECIA, rs1, rs2, rd, shamt, NOP), (PC, rf, mem)) - = (PC, rf, mem) + fun PerformRType ((SPECIA, rs1, rs2, rd, shamt, NOP), (PC, rf, mem, trap)) + = (PC, rf, mem, trap) - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SLL), (PC, rf, mem)) + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SLL), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SLL, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) + mem, trap) - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SRL), (PC, rf, mem)) + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SRL), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SRL, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) + mem, trap) - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SRA), (PC, rf, mem)) + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SRA), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SRA, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) + mem, trap) - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, ADD), (PC, rf, mem)) + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, ADD), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.ADD, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) + mem, trap) - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, ADDU), (PC, rf, mem)) + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, ADDU), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.ADDU, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) - - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SUB), (PC, rf, mem)) + mem, trap) + + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SUB), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SUB, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) + mem, trap) - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SUBU), (PC, rf, mem)) + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SUBU), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SUBU, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) - - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, AND), (PC, rf, mem)) + mem, trap) + + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, AND), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.AND, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) - - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, OR), (PC, rf, mem)) + mem, trap) + + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, OR), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.OR, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) - - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, XOR), (PC, rf, mem)) + mem, trap) + + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, XOR), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.XOR, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) - - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SEQ), (PC, rf, mem)) + mem, trap) + + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SEQ), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SEQ, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) - - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SNE), (PC, rf, mem)) + mem, trap) + + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SNE), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SNE, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) - - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SLT), (PC, rf, mem)) + mem, trap) + + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SLT), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SLT, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) - - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SGT), (PC, rf, mem)) + mem, trap) + + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SGT), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SGT, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) - - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SLE), (PC, rf, mem)) + mem, trap) + + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SLE), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SLE, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) - - | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SGE), (PC, rf, mem)) + mem, trap) + + | PerformRType ((SPECIAL, rs1, rs2, rd, shamt, SGE), (PC, rf, mem, trap)) = (PC, RF.StoreRegister(rf, rd, ALU.PerformAL(ALU.SGE, RF.LoadRegister(rf, rs1), RF.LoadRegister(rf, rs2))), - mem) - - | PerformRType ((_, rs1, rs2, rd, shamt, _), (PC, rf, mem)) + mem, trap) + + | PerformRType ((_, rs1, rs2, rd, shamt, _), (PC, rf, mem, trap)) = (print "Error : Non R-Type opcode, performing NOP\n"; - (PC, rf, mem)); + (PC, rf, mem, trap)); + - (* * The function PerformJType performs one of the J-Type * instructions. *) - fun PerformJType ((J, offset), (PC, rf, mem)) + fun PerformJType ((J, offset), (PC, rf, mem, trap)) = (Word32.fromInt (Int.+ (Word32.toIntX PC, - Word32.toIntX - (Word32.<< (offset, 0wx0002)))), - rf, mem) - - | PerformJType ((JR, offset), (PC, rf, mem)) + Word32.toIntX + (Word32.<< (offset, 0wx0002)))), + rf, mem, trap) + + | PerformJType ((JR, offset), (PC, rf, mem, trap)) = (RF.LoadRegister(rf, Word32.toInt(Word32.andb (Word32.>> (offset, 0wx0015), - 0wx0000001F : + 0wx0000001F : Word32.word))), - rf, mem) - - | PerformJType ((JAL, offset), (PC, rf, mem)) + rf, mem, trap) + + | PerformJType ((JAL, offset), (PC, rf, mem, trap)) = (Word32.fromInt (Int.+ (Word32.toIntX PC, - Word32.toIntX + Word32.toIntX (Word32.<< (offset, 0wx0002)))), - RF.StoreRegister(rf, 31, PC), - mem) - - | PerformJType ((JALR, offset), (PC, rf, mem)) + RF.StoreRegister(rf, 31, PC), + mem, trap) + + | PerformJType ((JALR, offset), (PC, rf, mem, trap)) = (RF.LoadRegister(rf, Word32.toInt (Word32.andb (Word32.>> (offset, 0wx0015), - 0wx0000001F : + 0wx0000001F : Word32.word))), - RF.StoreRegister(rf, 31, PC), - mem) - - | PerformJType ((TRAP, 0wx00000003 : Word32.word), (PC, rf, mem)) - = let - val x = TextIO.print "Value? "; - val s = "10" (* TextIO.inputLine TextIO.stdIn; *) - val i = Int.fromString s; - val input = if isSome i - then valOf i - else (TextIO.print "Error : Returning 0\n"; - Int.fromInt 0); + RF.StoreRegister(rf, 31, PC), + mem, trap) + + | PerformJType ((TRAP, 0wx00000003 : Word32.word), (PC, rf, mem, trap)) + = let + val {inputFn, outputFn, state} = trap + val {input, state} = inputFn {state = state} + val trap = {inputFn = inputFn, + outputFn = outputFn, + state = state} in (PC, RF.StoreRegister(rf, 14, Word32.fromInt input), - mem) + mem, + trap) end - - | PerformJType ((TRAP, 0wx00000004 : Word32.word), (PC, rf, mem)) - = let - val output = Int.toString (Word32.toIntX - (RF.LoadRegister(rf, 14))); + | PerformJType ((TRAP, 0wx00000004 : Word32.word), (PC, rf, mem, trap)) + = let + val output = Word32.toIntX (RF.LoadRegister(rf, 14)); + val {inputFn, outputFn, state} = trap + val {state} = outputFn {output = output, state = state} + val trap = {inputFn = inputFn, + outputFn = outputFn, + state = state} in - (TextIO.print ("Output: " ^ output ^ "\n"); - (PC, rf, mem)) + (PC, rf, mem, trap) end - - | PerformJType ((_, offset), (PC, rf, mem)) + + | PerformJType ((_, offset), (PC, rf, mem, trap)) = (print "Error : Non J-Type opcode, performing NOP\n"; - (PC, rf, mem)); - - + (PC, rf, mem, trap)); + + (* * The function PerformInstr performs an instruction by * passing the instruction to the appropriate auxiliary function. *) - fun PerformInstr (ITYPE instr, (PC, rf, mem)) - = PerformIType (instr, (PC, rf, mem)) - | PerformInstr (RTYPE instr, (PC, rf, mem)) - = PerformRType (instr, (PC, rf, mem)) - | PerformInstr (JTYPE instr, (PC, rf, mem)) - = PerformJType (instr, (PC, rf, mem)) - | PerformInstr (ILLEGAL, (PC, rf, mem)) - = (PC, rf, mem); + fun PerformInstr (ITYPE instr, (PC, rf, mem, trap)) + = PerformIType (instr, (PC, rf, mem, trap)) + | PerformInstr (RTYPE instr, (PC, rf, mem, trap)) + = PerformRType (instr, (PC, rf, mem, trap)) + | PerformInstr (JTYPE instr, (PC, rf, mem, trap)) + = PerformJType (instr, (PC, rf, mem, trap)) + | PerformInstr (ILLEGAL, (PC, rf, mem, trap)) + = (PC, rf, mem, trap); + - (* - * The function CycleLoop represents the basic clock cylce of + * The function CycleLoop represents the basic clock cycle of * the DLX processor. It takes as input the current program * counter, the current register file, and the current memory. * It loads, decodes, and executes an instruction and increments @@ -2561,20 +2574,18 @@ * CycleLoop is recursively called with the result of performing * the instruction. *) - fun CycleLoop (PC, rf, mem) + fun CycleLoop (PC, rf, mem, trap) = let val (nmem, instr_word) = MEM.LoadWord (mem, PC); val instr = DecodeInstr instr_word; val nPC = Word32.+ (PC, 0wx00000004 : Word32.word); in if instr = HALT orelse instr = ILLEGAL - then (print "Program halted.\n"; - print (MEM.GetStatistics (nmem)); - ()) - else CycleLoop (PerformInstr (instr, (nPC, rf, nmem))) + then (fn () => MEM.GetStatistics nmem, #state trap) + else CycleLoop (PerformInstr (instr, (nPC, rf, nmem, trap))) end - + (* * The function LoadProgAux is an auxilary function that * assists in loading a program into memory. It recursively @@ -2588,7 +2599,7 @@ val instro = Word32.fromString instrs; val instr = if isSome instro then valOf instro - else (print ("Error : Invalid " ^ + else (print ("Error : Invalid " ^ "instruction format, " ^ "returning NOP\n"); 0wx00000000 : Word32.word); @@ -2623,10 +2634,17 @@ * initialized register file, and the loaded program in an * initialised memory. *) - fun run_prog instructions - = CycleLoop (0wx00010000 : Word32.word, - RF.InitRegisterFile (), - LoadProg (instructions, MEM.InitMemory ())); + fun run_prog {instructions, trap} + = let + val (statistics, state) + = CycleLoop (0wx00010000 : Word32.word, + RF.InitRegisterFile (), + LoadProg (instructions, MEM.InitMemory ()), + trap); + in + {state = state, + statistics = statistics} + end (* * The function run_file is exported by DLXSimulator. @@ -2635,8 +2653,39 @@ * initialized register file, and the loaded program in an * initialized memory. *) - fun run_file filename - = (run_prog o ReadFileToInstr) (TextIO.openIn filename); + fun run_file filename + = let + val instructions = ReadFileToInstr (TextIO.openIn filename) + val trap = let + fun inputFn {state = ()} = + let + val x = TextIO.print "Value? "; + val input = + case TextIO.inputLine TextIO.stdIn of + NONE => (TextIO.print "Error : Returning 0\n"; + Int.fromInt 0) + | SOME s => + (case Int.fromString s of + NONE => (TextIO.print "Error : Returning 0\n"; + Int.fromInt 0) + | SOME i => i) + in + {input = input, state = ()} + end + fun outputFn {output, state = ()} = + (TextIO.print ("Output: " ^ (Int.toString output) ^ "\n") + ; {state = ()}) + in + {inputFn = inputFn, + outputFn = outputFn, + state = ()} + end + val {state, statistics} = run_prog {instructions = instructions, trap = trap} + in + print "Program halted.\n"; + print (statistics ()); + () + end end; @@ -2651,7 +2700,7 @@ * This file describes a small simple level 1 cache. *) -structure L1CacheSpec1 : CACHESPEC +structure L1CacheSpec1 : CACHESPEC = struct datatype WriteHitOption = Write_Through @@ -2659,7 +2708,7 @@ datatype WriteMissOption = Write_Allocate | Write_No_Allocate; - + val CacheName = "Level 1 Cache"; val CacheSize = 256; val BlockSize = 4; @@ -2682,9 +2731,10 @@ (* Example programs *) -val Simple = ["200E002F", - "44000004", - "44000000"]; +val Simple = ["200E002F", + "44000004", + "44000000", + "00000000"]; val Twos = ["44000003", "00000000", @@ -2697,7 +2747,6 @@ "44000000", "00000000"]; - val Abs = ["44000003", "00000000", "01C0402A", @@ -2707,7 +2756,7 @@ "44000004", "00000000", "44000000", - "00000000"] + "00000000"]; val Fact = ["0C000002", "00000000", @@ -2824,13 +2873,37 @@ structure Main = struct - fun doit () = - (DLXSimulatorC1.run_prog Simple - ; DLXSimulatorC1.run_prog Twos - ; DLXSimulatorC1.run_prog Abs - ; DLXSimulatorC1.run_prog Fact - ; DLXSimulatorC1.run_prog GCD - ) + fun doit last (instructions, inputs) = + let + fun inputFn {state = (inputs, outputs)} = + case inputs of + [] => {input = 0, + state = ([], outputs)} + | input::inputs => {input = input, + state = (inputs, outputs)} + fun outputFn {output, state = (inputs, outputs)} = + {state = (inputs, output::outputs)} + val state = (inputs, []) + val trap = {inputFn = inputFn, + outputFn = outputFn, + state = state} + val {state = (_, outputs), statistics} = + DLXSimulatorC1.run_prog {instructions = instructions, trap = trap} + in + if last + then (app (fn output => print ("Output: " ^ (Int.toString output) ^ "\n")) outputs; + print (statistics ()); + print "\n"; + ()) + else () + end + val doit = fn last => + app (doit last) + [(Simple, []), + (Twos, [10]), + (Abs, [~10]), + (Fact, [12]), + (GCD, [123456789,98765])] val doit = fn size => @@ -2838,7 +2911,7 @@ fun loop n = if n = 0 then () - else (doit(); + else (doit(n = 1); loop(n-1)) in loop size end diff -Nru mlton-20130715/benchmark/tests/even-odd.sml mlton-20210117+dfsg/benchmark/tests/even-odd.sml --- mlton-20130715/benchmark/tests/even-odd.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/even-odd.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,23 @@ +local + fun even' 0 = true + | even' i = odd' (i-1) + and odd' 0 = false + | odd' i = even' (i-1) +in + fun even i = even' (abs i) + fun odd i = odd' (abs i) +end + +structure Main = + struct + fun doit n = + if n = 0 + then () + else let + val _ = if (even 500000000) <> not (odd 500000000) + then raise Fail "bug" + else () + in + doit (n - 1) + end + end diff -Nru mlton-20130715/benchmark/tests/fft.sml mlton-20210117+dfsg/benchmark/tests/fft.sml --- mlton-20130715/benchmark/tests/fft.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/fft.sml 2021-12-28 17:19:36.000000000 +0000 @@ -291,7 +291,10 @@ fun loop_np i np = if i > 15 then () else (test np; loop_np (i+1) (np*2)) -fun doit size = loop_np 1 size +fun doit n = + if n = 0 + then () + else (loop_np 1 256; doit (n - 1)) end end; diff -Nru mlton-20130715/benchmark/tests/flat-array.sml mlton-20210117+dfsg/benchmark/tests/flat-array.sml --- mlton-20130715/benchmark/tests/flat-array.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/flat-array.sml 2021-12-28 17:19:36.000000000 +0000 @@ -10,6 +10,7 @@ let val sum = Vector.foldl (fn ((a, b), c) => a + b + c handle Overflow => 0) 0 v + val _ = if 1105694191 <> sum then raise Fail "bug" else () in loop (n - 1) end @@ -17,4 +18,3 @@ loop n end end - diff -Nru mlton-20130715/benchmark/tests/.gitignore mlton-20210117+dfsg/benchmark/tests/.gitignore --- mlton-20130715/benchmark/tests/.gitignore 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/.gitignore 2021-12-28 17:19:36.000000000 +0000 @@ -7,134 +7,190 @@ /TEST /DLXSimulator -/DLXSimulator.batch.sml +/DLXSimulator.*.batch +/DLXSimulator.*.batch.sml /DLXSimulator.*-* /barnes-hut -/barnes-hut.batch.sml +/barnes-hut.*.batch +/barnes-hut.*.batch.sml /barnes-hut.*-* /boyer -/boyer.batch.sml +/boyer.*.batch +/boyer.*.batch.sml /boyer.*-* /checksum -/checksum.batch.sml +/checksum.*.batch +/checksum.*.batch.sml /checksum.*-* /count-graphs -/count-graphs.batch.sml +/count-graphs.*.batch +/count-graphs.*.batch.sml /count-graphs.*-* +/even-odd +/even-odd.*.batch +/even-odd.*.batch.sml +/even-odd.*-* /fft -/fft.batch.sml +/fft.*.batch +/fft.*.batch.sml /fft.*-* /fib -/fib.batch.sml +/fib.*.batch +/fib.*.batch.sml /fib.*-* /flat-array -/flat-array.batch.sml +/flat-array.*.batch +/flat-array.*.batch.sml /flat-array.*-* /fxp -/fxp.batch.sml +/fxp.*.batch +/fxp.*.batch.sml /fxp.*-* /hamlet -/hamlet.batch.sml +/hamlet.*.batch +/hamlet.*.batch.sml /hamlet.*-* /imp-for -/imp-for.batch.sml +/imp-for.*.batch +/imp-for.*.batch.sml /imp-for.*-* /knuth-bendix -/knuth-bendix.batch.sml +/knuth-bendix.*.batch +/knuth-bendix.*.batch.sml /knuth-bendix.*-* /lexgen -/lexgen.batch.sml +/lexgen.*.batch +/lexgen.*.batch.sml /lexgen.*-* /life -/life.batch.sml +/life.*.batch +/life.*.batch.sml /life.*-* /logic -/logic.batch.sml +/logic.*.batch +/logic.*.batch.sml /logic.*-* /mandelbrot -/mandelbrot.batch.sml +/mandelbrot.*.batch +/mandelbrot.*.batch.sml /mandelbrot.*-* /matrix-multiply -/matrix-multiply.batch.sml +/matrix-multiply.*.batch +/matrix-multiply.*.batch.sml /matrix-multiply.*-* /md5 -/md5.batch.sml +/md5.*.batch +/md5.*.batch.sml /md5.*-* /merge -/merge.batch.sml +/merge.*.batch +/merge.*.batch.sml /merge.*-* /mlyacc -/mlyacc.batch.sml +/mlyacc.*.batch +/mlyacc.*.batch.sml /mlyacc.*-* /model-elimination -/model-elimination.batch.sml +/model-elimination.*.batch +/model-elimination.*.batch.sml /model-elimination.*-* /mpuz -/mpuz.batch.sml +/mpuz.*.batch +/mpuz.*.batch.sml /mpuz.*-* /nucleic -/nucleic.batch.sml +/nucleic.*.batch +/nucleic.*.batch.sml /nucleic.*-* /output1 -/output1.batch.sml +/output1.*.batch +/output1.*.batch.sml /output1.*-* /peek -/peek.batch.sml +/peek.*.batch +/peek.*.batch.sml /peek.*-* +/pidigits +/pidigits.*.batch +/pidigits.*.batch.sml +/pidigits.*-* /psdes-random -/psdes-random.batch.sml +/psdes-random.*.batch +/psdes-random.*.batch.sml /psdes-random.*-* /ratio-regions -/ratio-regions.batch.sml +/ratio-regions.*.batch +/ratio-regions.*.batch.sml /ratio-regions.*-* /ray -/ray.batch.sml +/ray.*.batch +/ray.*.batch.sml /ray.*-* -/raytrace.batch -/raytrace.batch.batch.sml -/raytrace.batch.*-* /raytrace -/raytrace.batch.sml +/raytrace.*.batch +/raytrace.*.batch.sml /raytrace.*-* /simple -/simple.batch.sml +/simple.*.batch +/simple.*.batch.sml /simple.*-* /smith-normal-form -/smith-normal-form.batch.sml +/smith-normal-form.*.batch +/smith-normal-form.*.batch.sml /smith-normal-form.*-* +/string-concat +/string-concat.*.batch +/string-concat.*.batch.sml +/string-concat.*-* /tailfib -/tailfib.batch.sml +/tailfib.*.batch +/tailfib.*.batch.sml /tailfib.*-* /tak -/tak.batch.sml +/tak.*.batch +/tak.*.batch.sml /tak.*-* /tensor -/tensor.batch.sml +/tensor.*.batch +/tensor.*.batch.sml /tensor.*-* /tsp -/tsp.batch.sml +/tsp.*.batch +/tsp.*.batch.sml /tsp.*-* /tyan -/tyan.batch.sml +/tyan.*.batch +/tyan.*.batch.sml /tyan.*-* -/vector-concat -/vector-concat.batch.sml -/vector-concat.*-* +/vector32-concat +/vector32-concat.*.batch +/vector32-concat.*.batch.sml +/vector32-concat.*-* +/vector64-concat +/vector64-concat.*.batch +/vector64-concat.*.batch.sml +/vector64-concat.*-* /vector-rev -/vector-rev.batch.sml +/vector-rev.*.batch +/vector-rev.*.batch.sml /vector-rev.*-* /vliw -/vliw.batch.sml +/vliw.*.batch +/vliw.*.batch.sml /vliw.*-* /wc-input1 -/wc-input1.batch.sml +/wc-input1.*.batch +/wc-input1.*.batch.sml /wc-input1.*-* /wc-scanStream -/wc-scanStream.batch.sml +/wc-scanStream.*.batch +/wc-scanStream.*.batch.sml /wc-scanStream.*-* /zebra -/zebra.batch.sml +/zebra.*.batch +/zebra.*.batch.sml /zebra.*-* /zern -/zern.batch.sml +/zern.*.batch +/zern.*.batch.sml /zern.*-* diff -Nru mlton-20130715/benchmark/tests/hamlet.sml mlton-20210117+dfsg/benchmark/tests/hamlet.sml --- mlton-20130715/benchmark/tests/hamlet.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/hamlet.sml 2021-12-28 17:19:36.000000000 +0000 @@ -22892,6 +22892,7 @@ let val _ = ins := openIn "DATA/hamlet-input.sml" val _ = Main.main' ["-x"] + val _ = closeIn (!ins) in loop (n - 1) end in diff -Nru mlton-20130715/benchmark/tests/Makefile mlton-20210117+dfsg/benchmark/tests/Makefile --- mlton-20130715/benchmark/tests/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/benchmark/tests/md5.sml mlton-20210117+dfsg/benchmark/tests/md5.sml --- mlton-20130715/benchmark/tests/md5.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/md5.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,278 +0,0 @@ -(* Copyright (C) 2001 Daniel Wang. All rights reserved. - Derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm. - *) -signature MD5 = - sig - type md5state -(* type slice = (Word8Vector.vector * int * int option) *) - val init : md5state - (* val updateSlice : (md5state * slice) -> md5state - *) - val update : (md5state * Word8Vector.vector) -> md5state - val final : md5state -> Word8Vector.vector - val toHexString : Word8Vector.vector -> string - end - -(* Quick and dirty transliteration of C code *) -structure MD5 :> MD5 = - struct - structure W32 = Word32 - structure W8V = - struct - open Word8Vector - fun extract (vec, s, l) = - let - val n = - case l of - NONE => length vec - s - | SOME i => i - in - tabulate (n, fn i => sub (vec, s + i)) - end - end - type word64 = {hi:W32.word,lo:W32.word} - type word128 = {A:W32.word, B:W32.word, C:W32.word, D:W32.word} - type md5state = {digest:word128, - mlen:word64, - buf:Word8Vector.vector} - - - - val w64_zero = ({hi=0w0,lo=0w0}:word64) - fun mul8add ({hi,lo},n) = let - val mul8lo = W32.<< (W32.fromInt (n),0w3) - val mul8hi = W32.>> (W32.fromInt (n),0w29) - val lo = W32.+ (lo,mul8lo) - val cout = if W32.< (lo,mul8lo) then 0w1 else 0w0 - val hi = W32.+ (mul8hi,W32.+ (hi,cout)) - in {hi=hi,lo=lo} - end - - fun packLittle wrds = let - fun loop [] = [] - | loop (w::ws) = let - val b0 = Word8.fromLarge (W32.toLarge w) - val b1 = Word8.fromLarge (W32.toLarge (W32.>> (w,0w8))) - val b2 = Word8.fromLarge (W32.toLarge (W32.>> (w,0w16))) - val b3 = Word8.fromLarge (W32.toLarge (W32.>> (w,0w24))) - in b0::b1::b2::b3:: (loop ws) - end - in W8V.fromList (loop wrds) - end - - val S11 = 0w7 - val S12 = 0w12 - val S13 = 0w17 - val S14 = 0w22 - val S21 = 0w5 - val S22 = 0w9 - val S23 = 0w14 - val S24 = 0w20 - val S31 = 0w4 - val S32 = 0w11 - val S33 = 0w16 - val S34 = 0w23 - val S41 = 0w6 - val S42 = 0w10 - val S43 = 0w15 - val S44 = 0w21 - - fun PADDING i = W8V.tabulate (i,(fn 0 => 0wx80 | _ => 0wx0)) - - fun F (x,y,z) = W32.orb (W32.andb (x,y), - W32.andb (W32.notb x,z)) - fun G (x,y,z) = W32.orb (W32.andb (x,z), - W32.andb (y,W32.notb z)) - fun H (x,y,z) = W32.xorb (x,W32.xorb (y,z)) - fun I (x,y,z) = W32.xorb (y,W32.orb (x,W32.notb z)) - fun ROTATE_LEFT (x,n) = - W32.orb (W32.<< (x,n), W32.>> (x,0w32 - n)) - - fun XX f (a,b,c,d,x,s,ac) = let - val a = W32.+ (a,W32.+ (W32.+ (f (b,c,d),x),ac)) - val a = ROTATE_LEFT (a,s) - in W32.+ (a,b) - end - - val FF = XX F - val GG = XX G - val HH = XX H - val II = XX I - - val empty_buf = W8V.tabulate (0,(fn x => raise (Fail "buf"))) - val init = {digest= {A=0wx67452301, - B=0wxefcdab89, - C=0wx98badcfe, - D=0wx10325476}, - mlen=w64_zero, - buf=empty_buf} : md5state - - fun update ({buf,digest,mlen}:md5state,input) = let - val inputLen = W8V.length input - val needBytes = 64 - W8V.length buf - fun loop (i,digest) = - if i + 63 < inputLen then - loop (i + 64,transform (digest,i,input)) - else (i,digest) - val (buf,(i,digest)) = - if inputLen >= needBytes then let - val buf = W8V.concat [buf,W8V.extract (input,0,SOME needBytes)] - val digest = transform (digest,0,buf) - in (empty_buf,loop (needBytes,digest)) - end - else (buf,(0,digest)) - val buf = W8V.concat [buf, W8V.extract (input,i,SOME (inputLen-i))] - val mlen = mul8add (mlen,inputLen) - in {buf=buf,digest=digest,mlen=mlen} - end - and final (state:md5state) = let - val {mlen= {lo,hi},buf,...} = state - val bits = packLittle [lo,hi] - val index = W8V.length buf - val padLen = if index < 56 then 56 - index else 120 - index - val state = update (state,PADDING padLen) - val {digest= {A,B,C,D},...} = update (state,bits) - in packLittle [A,B,C,D] - end - and transform ({A,B,C,D},i,buf) = let - val off = i div PackWord32Little.bytesPerElem - fun x (n) = Word32.fromLarge (PackWord32Little.subVec (buf,n + off)) - val (a,b,c,d) = (A,B,C,D) - (* fetch to avoid range checks *) - val x_00 = x (0) val x_01 = x (1) val x_02 = x (2) val x_03 = x (3) - val x_04 = x (4) val x_05 = x (5) val x_06 = x (6) val x_07 = x (7) - val x_08 = x (8) val x_09 = x (9) val x_10 = x (10) val x_11 = x (11) - val x_12 = x (12) val x_13 = x (13) val x_14 = x (14) val x_15 = x (15) - - val a = FF (a, b, c, d, x_00, S11, 0wxd76aa478) (* 1 *) - val d = FF (d, a, b, c, x_01, S12, 0wxe8c7b756) (* 2 *) - val c = FF (c, d, a, b, x_02, S13, 0wx242070db) (* 3 *) - val b = FF (b, c, d, a, x_03, S14, 0wxc1bdceee) (* 4 *) - val a = FF (a, b, c, d, x_04, S11, 0wxf57c0faf) (* 5 *) - val d = FF (d, a, b, c, x_05, S12, 0wx4787c62a) (* 6 *) - val c = FF (c, d, a, b, x_06, S13, 0wxa8304613) (* 7 *) - val b = FF (b, c, d, a, x_07, S14, 0wxfd469501) (* 8 *) - val a = FF (a, b, c, d, x_08, S11, 0wx698098d8) (* 9 *) - val d = FF (d, a, b, c, x_09, S12, 0wx8b44f7af) (* 10 *) - val c = FF (c, d, a, b, x_10, S13, 0wxffff5bb1) (* 11 *) - val b = FF (b, c, d, a, x_11, S14, 0wx895cd7be) (* 12 *) - val a = FF (a, b, c, d, x_12, S11, 0wx6b901122) (* 13 *) - val d = FF (d, a, b, c, x_13, S12, 0wxfd987193) (* 14 *) - val c = FF (c, d, a, b, x_14, S13, 0wxa679438e) (* 15 *) - val b = FF (b, c, d, a, x_15, S14, 0wx49b40821) (* 16 *) - - (* Round 2 *) - val a = GG (a, b, c, d, x_01, S21, 0wxf61e2562) (* 17 *) - val d = GG (d, a, b, c, x_06, S22, 0wxc040b340) (* 18 *) - val c = GG (c, d, a, b, x_11, S23, 0wx265e5a51) (* 19 *) - val b = GG (b, c, d, a, x_00, S24, 0wxe9b6c7aa) (* 20 *) - val a = GG (a, b, c, d, x_05, S21, 0wxd62f105d) (* 21 *) - val d = GG (d, a, b, c, x_10, S22, 0wx2441453) (* 22 *) - val c = GG (c, d, a, b, x_15, S23, 0wxd8a1e681) (* 23 *) - val b = GG (b, c, d, a, x_04, S24, 0wxe7d3fbc8) (* 24 *) - val a = GG (a, b, c, d, x_09, S21, 0wx21e1cde6) (* 25 *) - val d = GG (d, a, b, c, x_14, S22, 0wxc33707d6) (* 26 *) - val c = GG (c, d, a, b, x_03, S23, 0wxf4d50d87) (* 27 *) - val b = GG (b, c, d, a, x_08, S24, 0wx455a14ed) (* 28 *) - val a = GG (a, b, c, d, x_13, S21, 0wxa9e3e905) (* 29 *) - val d = GG (d, a, b, c, x_02, S22, 0wxfcefa3f8) (* 30 *) - val c = GG (c, d, a, b, x_07, S23, 0wx676f02d9) (* 31 *) - val b = GG (b, c, d, a, x_12, S24, 0wx8d2a4c8a) (* 32 *) - - (* Round 3 *) - val a = HH (a, b, c, d, x_05, S31, 0wxfffa3942) (* 33 *) - val d = HH (d, a, b, c, x_08, S32, 0wx8771f681) (* 34 *) - val c = HH (c, d, a, b, x_11, S33, 0wx6d9d6122) (* 35 *) - val b = HH (b, c, d, a, x_14, S34, 0wxfde5380c) (* 36 *) - val a = HH (a, b, c, d, x_01, S31, 0wxa4beea44) (* 37 *) - val d = HH (d, a, b, c, x_04, S32, 0wx4bdecfa9) (* 38 *) - val c = HH (c, d, a, b, x_07, S33, 0wxf6bb4b60) (* 39 *) - val b = HH (b, c, d, a, x_10, S34, 0wxbebfbc70) (* 40 *) - val a = HH (a, b, c, d, x_13, S31, 0wx289b7ec6) (* 41 *) - val d = HH (d, a, b, c, x_00, S32, 0wxeaa127fa) (* 42 *) - val c = HH (c, d, a, b, x_03, S33, 0wxd4ef3085) (* 43 *) - val b = HH (b, c, d, a, x_06, S34, 0wx4881d05) (* 44 *) - val a = HH (a, b, c, d, x_09, S31, 0wxd9d4d039) (* 45 *) - val d = HH (d, a, b, c, x_12, S32, 0wxe6db99e5) (* 46 *) - val c = HH (c, d, a, b, x_15, S33, 0wx1fa27cf8) (* 47 *) - val b = HH (b, c, d, a, x_02, S34, 0wxc4ac5665) (* 48 *) - - (* Round 4 *) - val a = II (a, b, c, d, x_00, S41, 0wxf4292244) (* 49 *) - val d = II (d, a, b, c, x_07, S42, 0wx432aff97) (* 50 *) - val c = II (c, d, a, b, x_14, S43, 0wxab9423a7) (* 51 *) - val b = II (b, c, d, a, x_05, S44, 0wxfc93a039) (* 52 *) - val a = II (a, b, c, d, x_12, S41, 0wx655b59c3) (* 53 *) - val d = II (d, a, b, c, x_03, S42, 0wx8f0ccc92) (* 54 *) - val c = II (c, d, a, b, x_10, S43, 0wxffeff47d) (* 55 *) - val b = II (b, c, d, a, x_01, S44, 0wx85845dd1) (* 56 *) - val a = II (a, b, c, d, x_08, S41, 0wx6fa87e4f) (* 57 *) - val d = II (d, a, b, c, x_15, S42, 0wxfe2ce6e0) (* 58 *) - val c = II (c, d, a, b, x_06, S43, 0wxa3014314) (* 59 *) - val b = II (b, c, d, a, x_13, S44, 0wx4e0811a1) (* 60 *) - val a = II (a, b, c, d, x_04, S41, 0wxf7537e82) (* 61 *) - val d = II (d, a, b, c, x_11, S42, 0wxbd3af235) (* 62 *) - val c = II (c, d, a, b, x_02, S43, 0wx2ad7d2bb) (* 63 *) - val b = II (b, c, d, a, x_09, S44, 0wxeb86d391) (* 64 *) - - val A = Word32.+ (A,a) - val B = Word32.+ (B,b) - val C = Word32.+ (C,c) - val D = Word32.+ (D,d) - in {A=A,B=B,C=C,D=D} - end - - val hxd = "0123456789abcdef" - fun toHexString v = let - fun byte2hex (b,acc) = - (String.sub (hxd,(Word8.toInt b) div 16)):: - (String.sub (hxd,(Word8.toInt b) mod 16))::acc - val digits = Word8Vector.foldr byte2hex [] v - in String.implode (digits) - end - end - -structure Test = - struct - val tests = - [("", "d41d8cd98f00b204e9800998ecf8427e"), - ("a", "0cc175b9c0f1b6a831c399e269772661"), - ("abc", "900150983cd24fb0d6963f7d28e17f72"), - ("message digest", "f96b697d7cb7938d525a2f31aaf161d0"), - ("abcdefghijklmnopqrstuvwxyz", "c3fcd3d76192e4007dfb496cca67e13b"), - ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - "d174ab98d277d9f5a5611c2c9f419d9f"), - ("12345678901234567890123456789012345678901234567890123456789012345678901234567890", - "57edf4a22be3c955ac49da2e2107b67a")] - - fun do_tests () = let - fun f (x,s) = let - val mstate = MD5.update (MD5.init,Byte.stringToBytes x) - val hash = MD5.final (mstate) - in print (" input: "^x^"\n"); - print ("expected: "^s^"\n"); - print ("produced: "^MD5.toHexString (hash)^"\n") - end - in List.app f tests - end - val BLOCK_LEN = 10000 - val BLOCK_COUNT = 100000 - fun time_test () = let - val block = Word8Vector.tabulate (BLOCK_LEN,Word8.fromInt) - fun loop (n,s) = - if n < BLOCK_COUNT then - loop (n+1,MD5.update (s,block)) - else s - in - loop (0,MD5.init) - end - end - -structure Main = - struct - fun doit n = - if n = 0 - then () - else (Test.time_test () - ; doit (n - 1)) - end diff -Nru mlton-20130715/benchmark/tests/model-elimination.sml mlton-20210117+dfsg/benchmark/tests/model-elimination.sml --- mlton-20130715/benchmark/tests/model-elimination.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/model-elimination.sml 2021-12-28 17:19:36.000000000 +0000 @@ -8723,7 +8723,7 @@ val () = settings := update_parm_meson (K false) (!settings); val () = settings := update_parm_delta (K false) (!settings); - val l = CommandLine.arguments () + val l = (**CommandLine.arguments ()**) [] val n = opts l in split l (length l - n) @@ -8732,7 +8732,7 @@ val (opts, work) = if Milton.ml = "MLton" then options () else ([], []); (*#line 0.0 "data/benchmark.sml"*) -val pure = null (CommandLine.arguments ()); +val pure = null ((**CommandLine.arguments ()**) []); local open Useful Metis1; @@ -8793,6 +8793,9 @@ () end; -val doit = main +fun doit n = + if n = 0 + then () + else (main (); doit (n - 1)) end diff -Nru mlton-20130715/benchmark/tests/peek.sml mlton-20210117+dfsg/benchmark/tests/peek.sml --- mlton-20130715/benchmark/tests/peek.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/peek.sml 2021-12-28 17:19:36.000000000 +0000 @@ -32,15 +32,32 @@ struct fun inner () = let - val l = Plist.new () - val {add, peek} = Plist.addPeek () - val _ = add (l, 13) - fun loop (i, ac) = + val l1 = Plist.new () + val l2 = Plist.new () + val {add = addA, peek = peekA} = Plist.addPeek () + val {add = addB, peek = peekB} = Plist.addPeek () + val {add = addC, peek = peekC} = Plist.addPeek () + val {add = addD, peek = peekD} = Plist.addPeek () + val _ = addA (l1, 13: Int32.int) + val _ = addB (l1, 15: Int64.int) + val _ = addC (l1, 17: Int32.int) + val _ = addD (l1, 19: Int64.int) + val _ = addA (l2, 19: Int32.int) + val _ = addB (l2, 17: Int64.int) + val _ = addC (l2, 15: Int32.int) + val _ = addD (l2, 13: Int64.int) + fun peek l = + Int32.toInt (valOf (peekA l1)) + Int64.toInt (valOf (peekB l)) + + Int32.toInt (valOf (peekC l)) + Int64.toInt (valOf (peekD l)) + fun loop (i, ac1, ac2) = if i = 0 - then ac - else loop (i - 1, ac + valOf (peek l)) - val n = loop (10000000, 0) - val _ = print (concat [Int.toString n, "\n"]) + then (ac1, ac2) + else loop (i - 1, ac1 + peek l1, ac2 + peek l2) + val (n1, n2) = loop (10000000, 0, 0) + val _ = + if n1 <> 640000000 orelse n2 <> 580000000 + then raise Fail "bug" + else () in () end @@ -50,6 +67,6 @@ if i = 0 then () else (inner (); loop (i - 1)) - in loop 1000 + in loop size end end diff -Nru mlton-20130715/benchmark/tests/pidigits.sml mlton-20210117+dfsg/benchmark/tests/pidigits.sml --- mlton-20130715/benchmark/tests/pidigits.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/pidigits.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,138 @@ +structure Stream = +struct + datatype 'a u = Nil | Cons of 'a * 'a t + withtype 'a t = unit -> 'a u + + fun unfold (f : 'b -> ('a * 'b) option) : 'b -> 'a t = + let + fun loop b () = + case f b of + NONE => Nil + | SOME (x, b) => Cons (x, loop b) + in + loop + end + fun map (f : 'a -> 'b) : 'a t -> 'b t = + unfold (fn s => + case s () of + Nil => NONE + | Cons (x, xs) => SOME (f x, xs)) +end + +structure PiDigits = +struct + fun stream (next : 'b -> 'c) + (safe : 'b -> 'c -> bool) + (prod : 'b -> 'c -> 'b) + (cons : 'b -> 'a -> 'b) + : 'b -> 'a Stream.t -> 'c Stream.t = + let + fun loop z s () = + let + val y = next z + in + if safe z y + then Stream.Cons (y, loop (prod z y) s) + else (case s () of + Stream.Nil => Stream.Nil + | Stream.Cons (x, xs) => loop (cons z x) xs ()) + end + in + loop + end + + type lft = (IntInf.int * IntInf.int * IntInf.int * IntInf.int) + + val unit : lft = (1,0,0,1) + + fun comp (q,r,s,t) (u,v,w,x) : lft = (q*u+r*w, q*v+r*x, s*u+t*w, s*v+t*x) + + val pi = + let + val init = unit + val lfts = Stream.map (fn k => (k, 4*k+2, 0, 2*k+1)) (Stream.unfold (fn i => SOME (i, i+1)) 1) + fun floor_extr (q,r,s,t) x = (q * x + r) div (s * x + t) + fun next z = floor_extr z 3 + fun safe z n = n = floor_extr z 4 + fun prod z n = comp (10, ~10*n, 0, 1) z + fun cons z z' = comp z z' + in + stream next safe prod cons init lfts + end +end + +structure MainShootout = +struct + fun display n = + let + fun loop (ds, (k, col)) = + if k < n + then let + val col = + if col = 10 + then (print "\t:"; print (IntInf.toString k); print "\n"; + 1) + else col + 1 + in + case ds () of + Stream.Nil => raise Empty + | Stream.Cons (d, ds) => + (print (IntInf.toString d); + loop (ds, (k + 1, col))) + end + else (print (CharVector.tabulate (10 - col, fn _ => #" ")); + print "\t:"; print (IntInf.toString k); print "\n"; + ()) + in + loop (PiDigits.pi, (0, 0)) + end + fun usage name = + (TextIO.output (TextIO.stdErr, + concat ["usage: ", OS.Path.file name, " \n"]); + OS.Process.failure) + fun main (name, arguments) = + case arguments of + [n] => (case IntInf.fromString n of + SOME n => if n >= 1 + then (display n; OS.Process.success) + else usage name + | NONE => usage name) + | _ => usage name +end +(* +val _ = OS.Process.exit (MainShootout.main (CommandLine.name (), CommandLine.arguments ())) +*) + +structure MainBenchmark = +struct + fun display n = + let + fun loop (ds, k, n) = + case ds () of + Stream.Nil => raise Empty + | Stream.Cons (d, ds) => + if d = 0 + then if n = 0 + then (print (IntInf.toString k); print "\n") + else loop (ds, k + 1, n - 1) + else loop (ds, k + 1, n) + in + loop (PiDigits.pi, 0, n) + end + fun usage name = + (TextIO.output (TextIO.stdErr, + concat ["usage: ", OS.Path.file name, " \n"]); + OS.Process.failure) + fun main (name, arguments) = + case arguments of + [n] => (case IntInf.fromString n of + SOME n => if n >= 1 + then (display n; OS.Process.success) + else usage name + | NONE => usage name) + | _ => usage name + + val doit = display o IntInf.fromInt +end + +structure Main = MainBenchmark diff -Nru mlton-20130715/benchmark/tests/string-concat.sml mlton-20210117+dfsg/benchmark/tests/string-concat.sml --- mlton-20130715/benchmark/tests/string-concat.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/string-concat.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,18 @@ +structure Main = + struct + val alpha = CharVector.tabulate (26, fn i => chr (ord #"A" + i)) + fun doit n = + let + val len = 2017 + val s = CharVector.tabulate (len, fn i => + String.sub (alpha, i mod 26)) + fun loop n = + if n < 0 + then () + else + if 468705 = CharVector.foldl (fn (c, s) => s + ord c) 0 (String.concat [s, s, s]) + then loop (n - 1) + else raise Fail "bug" + in loop (n * 10000) + end + end diff -Nru mlton-20130715/benchmark/tests/tailmerge.sml mlton-20210117+dfsg/benchmark/tests/tailmerge.sml --- mlton-20130715/benchmark/tests/tailmerge.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/tailmerge.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ +(* Written by Stephen Weeks (sweeks@sweeks.com). *) +fun merge (l1: int list, l2) = + let + fun revapp (l, acc) = + case l of + [] => acc + | h :: t => revapp (t, h :: acc) + fun loop (l1, l2, acc) = + case (l1, l2) of + ([], _) => revapp (acc, l2) + | (_, []) => revapp (acc, l1) + | (x1 :: l1', x2 :: l2') => + if x1 <= x2 + then loop (l1', l2, x1 :: acc) + else loop (l1, l2', x2 :: acc) + in + loop (l1, l2, []) + end + +structure Main = + struct + fun doit size = + let + val len = 100000 + val l1 = List.tabulate (len, fn i => i * 2) + val l2 = List.tabulate (len, fn i => i * 2 + 1) + + fun test () = + if 0 = hd (merge (l1, l2)) + then () + else raise Fail "bug" + + fun loop n = + if n = 0 + then () + else (test (); loop (n - 1)) + in + loop size + end + end diff -Nru mlton-20130715/benchmark/tests/tak.sml mlton-20210117+dfsg/benchmark/tests/tak.sml --- mlton-20130715/benchmark/tests/tak.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/tak.sml 2021-12-28 17:19:36.000000000 +0000 @@ -5,11 +5,16 @@ tak (y - 1, z, x), tak (z - 1, x, y)) -val rec f = - fn 0 => () - | n => (tak (33,22,11); f (n-1)) - structure Main = struct - val doit = f + fun doit n = + if n = 0 + then () + else let + val _ = if 22 <> tak (33,22,11) + then raise Fail "bug" + else () + in + doit (n - 1) + end end diff -Nru mlton-20130715/benchmark/tests/vector32-concat.sml mlton-20210117+dfsg/benchmark/tests/vector32-concat.sml --- mlton-20130715/benchmark/tests/vector32-concat.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/vector32-concat.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,19 @@ +(* Written by Stephen Weeks (sweeks@sweeks.com). *) + +structure Main = + struct + fun doit n = + let + val len = 20000 + val sum = Int32.fromInt (len * (len - 1)) + val v = Vector.tabulate (len, fn i => Int32.fromInt i) + fun loop n = + if n < 0 + then () + else + if sum = Vector.foldl (op +) 0 (Vector.concat [v, v]) + then loop (n - 1) + else raise Fail "bug" + in loop (n * 10000) + end + end diff -Nru mlton-20130715/benchmark/tests/vector64-concat.sml mlton-20210117+dfsg/benchmark/tests/vector64-concat.sml --- mlton-20130715/benchmark/tests/vector64-concat.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/vector64-concat.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,19 @@ +(* Written by Stephen Weeks (sweeks@sweeks.com). *) + +structure Main = + struct + fun doit n = + let + val len = 20000 + val sum = Int64.fromInt (len * (len - 1)) + val v = Vector.tabulate (len, fn i => Int64.fromInt i) + fun loop n = + if n < 0 + then () + else + if sum = Vector.foldl (op +) 0 (Vector.concat [v, v]) + then loop (n - 1) + else raise Fail "bug" + in loop (n * 10000) + end + end diff -Nru mlton-20130715/benchmark/tests/vector-concat.sml mlton-20210117+dfsg/benchmark/tests/vector-concat.sml --- mlton-20130715/benchmark/tests/vector-concat.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/vector-concat.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -(* Written by Stephen Weeks (sweeks@sweeks.com). *) - -structure Main = - struct - fun doit n = - let - val len = 20000 - val sum = len * (len - 1) - val v = Vector.tabulate (len, fn i => i) - fun loop n = - if n < 0 - then () - else - if sum = Vector.foldl (op +) 0 (Vector.concat [v, v]) - then loop (n - 1) - else raise Fail "bug" - in loop (n * 10000) - end - end diff -Nru mlton-20130715/benchmark/tests/zern.sml mlton-20210117+dfsg/benchmark/tests/zern.sml --- mlton-20130715/benchmark/tests/zern.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/tests/zern.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,604 +0,0 @@ -(* - * From David McClain's language study. - * http://www.azstarnet.com/~dmcclain/LanguageStudy.html - * - * Stephen Weeks replaced Unsafe.Real64Array with Real64Array. - *) - -fun print _ = () - -(* array2.sml - * - * COPYRIGHT (c) 1998 D.McClain/MCFA - * COPYRIGHT (c) 1997 AT&T Research. - *) - -structure FastRealArray2 : - sig - type array - - type region - = {base : array, - row : int, - col : int, - nrows : int option, - ncols : int option} - - datatype traversal = RowMajor | ColMajor - - val array : int * int * real -> array - val fromList : real list list -> array - val tabulate : traversal -> (int * int * (int * int -> real)) -> array - val sub : array * int * int -> real - val update : array * int * int * real -> unit - val dimensions : array -> int * int - val size : array -> int - val nCols : array -> int - val nRows : array -> int - val row : array * int -> real Vector.vector - val column : array * int -> real Vector.vector - - val copy : region * array * int * int -> unit - val appi : traversal -> (int * int * real -> unit) -> region -> unit - val app : traversal -> (real -> unit) -> array -> unit - val modifyi : traversal -> (int * int * real -> real) -> region -> unit - val modify : traversal -> (real -> real) -> array -> unit - val foldi : traversal -> (int*int*real*'a -> 'a) -> 'a -> region -> 'a - val fold : traversal -> (real * 'a -> 'a) -> 'a -> array -> 'a - - val rmSub : array * int -> real - val rmUpdate : array * int * real -> unit - - val unop : array * array * (real -> real) -> unit - val unopi : array * array * (real * int -> real) -> unit - val binop : array * array * array * (real * real -> real) -> unit - val binopi : array * array * array * (real * real * int -> real) -> unit - val fill : array * real -> unit - val fillf : array * (int -> real) -> unit - - val transpose : array -> array - val extract : region -> array - - (* - val shift : array * int * int -> array - *) - end = - struct - - structure A = (*Unsafe.*)Real64Array - - type rawArray = A.array - - val unsafeUpdate = A.update - val unsafeSub = A.sub - fun mkRawArray n = A.array (n, 0.0) - - - type array = {data : rawArray, - nrows : int, - ncols : int, - nelts : int} - - type region = {base : array, - row : int, - col : int, - nrows : int option, - ncols : int option} - - datatype traversal = RowMajor | ColMajor - - - fun dotimes n f = - let (* going forward is twice as fast as backward! *) - fun iter k = if k >= n then () - else (f(k); iter(k+1)) - in - iter 0 - end - - - fun mkArray(n,v) = - let - val arr = mkRawArray n - in - dotimes n (fn ix => unsafeUpdate(arr,ix,v)); - arr - end - - (* compute the index of an array element *) - fun ltu(i,limit) = (i >= 0) andalso (i < limit) - fun unsafeIndex ({nrows, ncols, ...} : array, i, j) = (i*ncols + j) - fun index (arr, i, j) = - if (ltu(i, #nrows arr) andalso ltu(j, #ncols arr)) - then unsafeIndex (arr, i, j) - else raise General.Subscript - (* row major index checking *) - fun rmIndex ({nelts,...}: array, ix) = - if ltu(ix, nelts) then ix - else raise General.Subscript - - val max_length = 4096 * 4096; (* arbitrary - but this is 128 MB *) - - fun chkSize (nrows, ncols) = - if (nrows <= 0) orelse (ncols <= 0) - then raise General.Size - else let - val n = nrows*ncols handle Overflow => raise General.Size - in - if (max_length < n) then raise General.Size else n - end - - fun array (nrows, ncols, v) = - let - val nelts = chkSize (nrows, ncols) - in - {data = mkArray (nelts, v), - nrows = nrows, ncols = ncols, nelts = nelts} - end - - fun fromList [] = raise General.Size - | fromList (row1 :: rest) = let - val ncols = List.length row1 - fun chk ([], nrows, l) = (nrows, l) - | chk (row::rest, nrows, l) = let - fun chkRow ([], n, revCol) = ( - if (n <> ncols) then raise General.Size else (); - List.revAppend (revCol, l)) - | chkRow (x::r, n, revCol) = chkRow (r, n+1, x::revCol) - in - chk (rest, nrows+1, chkRow(row, 0, [])) - end - val (nrows, flatList) = chk (rest, 1, []) - val nelts = chkSize(nrows, ncols) - val arr = mkRawArray nelts - fun upd(_,nil) = arr - | upd(k,v::vs) = (unsafeUpdate(arr,k,v); upd(k+1,vs)) - in - { data = upd(0,List.@(row1, flatList)), - nrows = nrows, - ncols = ncols, - nelts = nelts } - end - - fun tabulateRM (nrows, ncols, f) = - let - val nelts = chkSize(nrows, ncols) - val arr = mkRawArray nelts - fun lp1 (i, j, k) = if (i < nrows) - then lp2 (i, 0, k) - else () - and lp2 (i, j, k) = if (j < ncols) - then ( - unsafeUpdate(arr, k, f(i, j)); - lp2 (i, j+1, k+1)) - else lp1 (i+1, 0, k) - in - lp2 (0, 0, 0); - {data = arr, nrows = nrows, ncols = ncols, nelts = nelts} - end - - fun tabulateCM (nrows, ncols, f) = - let - val nelts = chkSize(nrows,ncols) - val arr = mkRawArray nelts - val delta = nelts - 1 - fun lp1 (i, j, k) = if (j < ncols) - then lp2 (0, j, k) - else () - and lp2 (i, j, k) = if (i < nrows) - then ( - unsafeUpdate(arr, k, f(i, j)); - lp2 (i+1, j, k+ncols)) - else lp1 (0, j+1, k-delta) - in - lp2 (0, 0, 0); - {data = arr, nrows = nrows, ncols = ncols, nelts = nelts} - end - - fun tabulate RowMajor = tabulateRM - | tabulate ColMajor = tabulateCM - - fun sub (a, i, j) = unsafeSub(#data a, index(a, i, j)) - fun update (a, i, j, v) = unsafeUpdate(#data a, index(a, i, j), v) - fun dimensions ({nrows, ncols, ...}: array) = (nrows, ncols) - fun size ({nelts,...}: array) = nelts - fun nCols (arr : array) = #ncols arr - fun nRows (arr : array) = #nrows arr - fun row ({data, nrows, ncols, ...}: array, i) = - if ltu(i, nrows) then - let - val stop = i*ncols - fun mkVec (j, l) = - if (j < stop) - then Vector.fromList l - else mkVec(j-1, unsafeSub(data, j)::l) - in - if ltu(nrows, i) - then raise General.Subscript - else mkVec (stop+ncols-1, []) - end - else raise General.Subscript - fun column ({data, ncols, nelts, ...}: array, j) = - if ltu(j, ncols) then - let - fun mkVec (i, l) = - if (i < 0) - then Vector.fromList l - else mkVec(i-ncols, unsafeSub(data, i)::l) - in - if ltu(ncols, j) - then raise General.Subscript - else mkVec ((nelts - ncols) + j, []) - end - else raise General.Subscript - - datatype index = DONE | INDX of {i:int, r:int, c:int} - - fun chkRegion {base={data, nrows, ncols, ...}: array, - row, col, nrows=nr, ncols=nc} - = let - fun chk (start, n, NONE) = - if ((start < 0) orelse (n < start)) - then raise General.Subscript - else n-start - | chk (start, n, SOME len) = - if ((start < 0) orelse (len < 0) orelse (n < start+len)) - then raise General.Subscript - else len - val nr = chk (row, nrows, nr) - val nc = chk (col, ncols, nc) - in - {data = data, i = (row*ncols + col), r=row, c=col, nr=nr, nc=nc} - end - - fun copy (region, dst, dst_row, dst_col) = - raise Fail "Array2.copy unimplemented" - - - (* this function generates a stream of indices for the given region in - * row-major order. - *) - fun iterateRM arg = let - val {data, i, r, c, nr, nc} = chkRegion arg - val ii = ref i and ri = ref r and ci = ref c - fun mkIndx (r, c) = let val i = !ii - in - ii := i+1; - INDX{i=i, c=c, r=r} - end - fun iter () = let - val r = !ri and c = !ci - in - if (c < nc) - then (ci := c+1; mkIndx(r, c)) - else if (r+1 < nr) - then (ci := 0; ri := r+1; iter()) - else DONE - end - in - (data, iter) - end - - (* this function generates a stream of indices for the given region in - * col-major order. - *) - fun iterateCM (arg as {base={ncols, ...}, ...}) = let - val {data, i, r, c, nr, nc} = chkRegion arg - val delta = nr * ncols - 1 - val ii = ref i and ri = ref r and ci = ref c - fun mkIndx (r, c) = let val i = !ii - in - ii := i+ncols; - INDX{i=i, c=c, r=r} - end - fun iter () = let - val r = !ri and c = !ci - in - if (r < nr) - then (ri := r+1; mkIndx(r, c)) - else if (c+1 < nc) - then (ii := !ii-delta; ri := 0; ci := c+1; iter()) - else DONE - end - in - (data, iter) - end - - fun appi order f region = let - val (data, iter) = (case order - of RowMajor => iterateRM region - | ColMajor => iterateCM region - (* end case *)) - fun app () = (case iter() - of DONE => () - | INDX{i, r, c} => (f(r, c, unsafeSub(data, i)); app()) - (* end case *)) - in - app () - end - - fun appRM f ({data, nelts, ...}: array) = - let - fun appf k = - if k < nelts then (f(unsafeSub(data,k)); - appf(k+1)) - else () - in - appf 0 - end - - fun appCM f {data, ncols, nrows, nelts} = let - val delta = nelts - 1 - fun appf (i, k) = if (i < nrows) - then (f(unsafeSub(data, k)); appf(i+1, k+ncols)) - else let - val k = k-delta - in - if (k < ncols) then appf (0, k) else () - end - in - appf (0, 0) - end - fun app RowMajor = appRM - | app ColMajor = appCM - - fun modifyi order f region = let - val (data, iter) = (case order - of RowMajor => iterateRM region - | ColMajor => iterateCM region - (* end case *)) - fun modify () = (case iter() - of DONE => () - | INDX{i, r, c} => ( - unsafeUpdate (data, i, f(r, c, unsafeSub(data, i))); - modify()) - (* end case *)) - in - modify () - end - - fun modifyRM f ({data, nelts, ...}: array) = - let - fun modf k = - if k < nelts then (unsafeUpdate(data,k,f(unsafeSub(data,k))); - modf (k+1)) - else () - in - modf 0 - end - - fun modifyCM f {data, ncols, nrows, nelts} = let - val delta = nelts - 1 - fun modf (i, k) = if (i < nrows) - then (unsafeUpdate(data, k, f(unsafeSub(data, k))); modf(i+1, k+ncols)) - else let - val k = k-delta - in - if (k < ncols) then modf (0, k) else () - end - in - modf (0, 0) - end - fun modify RowMajor = modifyRM - | modify ColMajor = modifyCM - - fun foldi order f init region = let - val (data, iter) = (case order - of RowMajor => iterateRM region - | ColMajor => iterateCM region - (* end case *)) - fun fold accum = (case iter() - of DONE => accum - | INDX{i, r, c} => fold(f(r, c, unsafeSub(data, i), accum)) - (* end case *)) - in - fold init - end - - fun foldRM f init ({data, nelts, ...}: array) = - let - fun foldf (k, accum) = - if k < nelts then foldf(k+1,f(unsafeSub(data,k),accum)) - else accum - in - foldf (0,init) - end - - fun foldCM f init {data, ncols, nrows, nelts} = let - val delta = nelts - 1 - fun foldf (i, k, accum) = if (i < nrows) - then foldf (i+1, k+ncols, f(unsafeSub(data, k), accum)) - else let - val k = k-delta - in - if (k < ncols) then foldf (0, k, accum) else accum - end - in - foldf (0, 0, init) - end - fun fold RowMajor = foldRM - | fold ColMajor = foldCM - - - fun transpose {data, nrows, ncols, nelts} = - let - val dst = mkRawArray nelts - val delta = nelts - 1 - fun iter (k,k') = - if k >= nelts then {data = dst, - nrows = ncols, - ncols = nrows, - nelts = nelts} - else (if k' >= nelts then iter(k,k' - delta) - else (unsafeUpdate(dst,k',unsafeSub(data,k)); - iter(k+1,k'+nrows))) - in - iter(0,0) - end - - fun extract (region as {base,row,col,nrows,ncols}) = - let - fun chk (start,limit,NONE) = - if ltu(start,limit) then limit - start - else raise General.Subscript - - | chk (start, limit, SOME len) = - if ltu(start + len - 1, limit) then len - else raise General.Subscript - - val nr = chk(row, nRows(base), nrows) - val nc = chk(col, nCols(base), ncols) - val n = nr * nc - val dst = mkRawArray n - val (data, iter) = iterateRM region - fun app (k) = (case iter() of - DONE => {data = dst, - nrows = nr, - ncols = nc, - nelts = n} - | INDX{i,...} => - (unsafeUpdate(dst,k,unsafeSub(data,i)); - app(k+1))) - in - app (0) - end - - fun rmSub (arr as {data,...}: array,ix) = - unsafeSub(data,rmIndex(arr, ix)) - - fun rmUpdate(arr as {data,...}: array,ix,v) = - unsafeUpdate(data,rmIndex(arr, ix),v) - - fun binop ({data=dst,nelts=nelts,...}: array, - {data=src1,...}: array, - {data=src2,...}: array, - f) = - dotimes nelts - (fn (ix) => unsafeUpdate(dst,ix,f(unsafeSub(src1,ix), - unsafeSub(src2,ix)))) - - fun unop ({data=dst,nelts=nelts,...}: array, - {data=src,...}: array, - f) = - dotimes nelts - (fn (ix) => unsafeUpdate(dst,ix,f(unsafeSub(src,ix)))) - - fun binopi ({data=dst,nelts=nelts,...}: array, - {data=src1,...}: array, - {data=src2,...}: array, - f) = - dotimes nelts - (fn ix => unsafeUpdate(dst,ix,f(unsafeSub(src1,ix), - unsafeSub(src2,ix), - ix))) - - fun unopi ({data=dst,nelts=nelts,...}: array, - {data=src,...}: array, - f) = - dotimes nelts - (fn ix => unsafeUpdate(dst,ix,f(unsafeSub(src,ix),ix))) - - fun fill ({data=dst,nelts=nelts,...}: array,v) = - dotimes nelts - (fn ix => unsafeUpdate(dst,ix,v)) - - fun fillf ({data=dst,nelts=nelts,...}: array,f) = - dotimes nelts - (fn ix => unsafeUpdate(dst,ix,f(ix))) - - end - -(* test of Zernick phase screen E-field generation *) -(* This is 1.9 times faster than IDL!!!! *) -structure MSpeed = - struct - structure F = FastRealArray2 - - val sin = Math.sin - val cos = Math.cos - - val fromInt = LargeReal.fromInt - - (* setup working vectors and arrays *) - fun collect n f = - let - fun g 0 l = l - | g n l = g (n-1) ((f n) :: l) - in - g n nil - end - - val ncoefs = 15 - val nx = 128 - val ny = nx - val nel = nx * ny - - (* generate an array from a scaled vector *) - fun mulsv (dst, sf, a) = - F.unop(dst,a,fn(vsrc) => sf * vsrc) - - - (* compute the complex exponential of an array *) - fun cisv (a, rpart, ipart) = - (F.unop(rpart,a,cos); - F.unop(ipart,a,sin); - (rpart,ipart)) - - (* accumulate scaled vectors into an array *) - fun mpadd dst (sf, src) = - F.binop(dst,dst,src,fn(vdst,vsrc) => vdst + sf * vsrc) - - - (* compute an E-field from a set of Zernike screens *) - fun zern (dst, rpart, ipart, coefs, zerns) = - (mulsv (dst, hd coefs, hd zerns); - ListPair.app (mpadd dst) (tl coefs, tl zerns); - cisv (dst, rpart, ipart)) - - (* timing tests and reporting *) - fun report_times(niter, nel, (start, stop)) = - let - val secs = Time.-(stop,start) - val dur = Time.toReal(secs) * 1.0E6 - val ops_per_us = ((fromInt niter) * (fromInt nel)) / dur - val ns_per_op = 1000.0 / ops_per_us - in - print(Time.toString (Time.-(stop,start))); - print("\n"); - { ops_per_us = ops_per_us, ns_per_op = ns_per_op} - end - - fun time_iterations f niter = - let - fun iter 0 = Time.now() - | iter n = (ignore (f()); iter (n-1)) - in - (Time.now(), iter niter) - end - - fun ztest niter = - report_times(niter, nel, - time_iterations - (fn () => - let val sum = F.array(ny,nx, 0.0) - val rpart = F.array(ny,nx, 0.0) - val ipart = F.array(ny,nx, 0.0) - val coefs = collect ncoefs (fn(x) => real(1 + x)) - val zerns = - collect ncoefs - (fn(x) => F.tabulate F.RowMajor - (ny, nx, fn(r,c) => 0.01 * real(nx * r + c))) - val (rpart, _) = - zern (sum, rpart, ipart, coefs, zerns) - in if Real.abs(FastRealArray2.sub(rpart, 0, 1) - 0.219) - < 0.001 - then () - else raise Fail "compiler bug" - end) - niter) -end - -structure Main = - struct - fun doit n = MSpeed.ztest n - end diff -Nru mlton-20130715/benchmark/update-counts.sh mlton-20210117+dfsg/benchmark/update-counts.sh --- mlton-20130715/benchmark/update-counts.sh 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/benchmark/update-counts.sh 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +# set -e + +die () { + echo "$1" >&2 + exit 1 +} + +if $(which gtime) --version >/dev/null 2>&1; then + time=$(which gtime) +elif $(which gnutime) --version >/dev/null 2>&1; then + time=$(which gnutime) +elif $(which time) --version 2>&1 | grep -q GNU; then + time=$(which time) +else + die 'Can'\''t find GNU time' +fi + + +minTime="30.0" + +cd tests + +bench=$(for p in $(ls *.sml); do echo $(basename $p .sml); done) + +for prog in $bench; do + case "$prog" in + "fxp") + continue ;; + esac + + ( cat $prog.sml ; echo "val _ = Main.doit (valOf (Int.fromString (hd (CommandLine.arguments ()))))" ) > $prog.main.sml + mlton -output $prog $prog.main.sml 1>/dev/null 2>/dev/null + + n=0 + t=0 + + while [ "$(echo "$t < $minTime" | bc)" = "1" ]; do + if [ $n -eq 0 ]; then + n=1 + m=1 + k=1 + elif [ $n -lt $m ]; then + n=$(($n+$k)) + else + m=$((2*$m)) + if [ $m -lt 8 ]; then + n=$m + else + k=$(( ($m-$n) / 2 )) + n=$(($n+$k)) + fi + fi + $time -o $prog.time --format "%U + %S" ./$prog $n 1>/dev/null 2>/dev/null + t=$(cat $prog.time | grep -v "Command exited" | bc) + s=$(grep "Command exited" $prog.time) + if [ ! -z "$s" ]; then + s="; $s " + break + fi + done + + echo "(\"$prog\", $n):: (* $t sec $s*)" + + rm $prog $prog.main.sml $prog.time + +done diff -Nru mlton-20130715/bin/add-cross mlton-20210117+dfsg/bin/add-cross --- mlton-20130715/bin/add-cross 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/bin/add-cross 1970-01-01 00:00:00.000000000 +0000 @@ -1,168 +0,0 @@ -#!/usr/bin/env bash - -set -e - -# This script adds a new crosscompiler target for MLton. -# -# It takes four arguments. -# -# 1. , which is what MLton would pass via the -b flag to the GCC -# cross-compiler tools. You don't need to have installed these tools in order -# to run this script, since it uses ssh and the native gcc on the target. -# Examples of $crossTarget are i386-pc-cygwin and sparc-sun-solaris. -# -# 2. specifies the target architecture. -# -# 3. specifies the target OS. -# -# 4. specifies a remote machine of the target type. This script -# will ssh to $machine to compile the runtime and to compile and run the -# program that will print the values of all the constants that the MLton -# basis library needs. -# -# Here are some example uses of this script. -# -# add-cross i386-pc-cygwin x86 cygwin cygwin -# add-cross sparc-sun-solaris sparc solaris blade -# -# (Here cygwin happens to be the name of my Cygwin machine and blade -# happens to be the name of my Sparc machine.) -# -# You also may need to set $libDir, which determines where the -# cross-compiler target will be installed. - -die () { - echo >&2 "$1" - exit 1 -} - -usage () { - die "usage: $name " -} - -case "$#" in -4) - crossTarget="$1" - crossArch="$2" - crossOS="$3" - machine="$4" - ;; -*) - usage - ;; -esac - -name=`basename "$0"` -original=`pwd` -dir=`dirname "$0"` -src=`cd "$dir/.." && pwd` - -PATH="$dir":$PATH - -# libDir is the mlton lib directory where you would like the -# cross-compiler information to be installed. If you have installed -# from the rpms, this will usually be /usr/lib/mlton. You must have -# write permission there. - -lib="$src/build/lib" - -# You shouldn't need to change anything below this line. - -rm -rf "$lib/targets/$crossTarget" -mkdir -p "$lib/targets/$crossTarget" || die "Cannot write to $lib." - -tmp='/tmp/mlton-add-cross' - -( cd "$src" && - mmake TARGET=$crossTarget TARGET_ARCH=$crossArch TARGET_OS=$crossOS \ - dirs ) - -ssh $machine "rm -rf $tmp && mkdir $tmp" - -echo "Copying files." -( cd "$src" && tar cf - --exclude '*.o' --exclude '*.a' Makefile basis-library bin include runtime ) | - ssh $machine "cd $tmp && tar xf - && - if [ ! $crossArch == \`./bin/host-arch\` ]; then echo $machine is \`./bin/host-arch\`, not $crossArch; exit 1; fi && - if [ ! $crossOS == \`./bin/host-os\` ]; then echo $machine is \`./bin/host-os\`, not $crossOS; exit 1; fi" - -echo "Making runtime on $machine." -ssh $machine "cd $tmp && ./bin/mmake CPPFLAGS=\"$CPPFLAGS\" LDFLAGS=\"$LDFLAGS\" COMPILE_FAST=yes OMIT_BYTECODE=yes clean dirs runtime" - -ssh $machine "cd $tmp/build/lib/targets/self && tar cf - ." | - ( cd "$lib/targets/$crossTarget" && tar xf - ) -( cd "$src" && - mmake TARGET=$crossTarget TARGET_ARCH=$crossArch TARGET_OS=$crossOS \ - mlbpathmap ) - -case "$crossOS" in -mingw) - suf='.exe' -;; -*) - suf='' -;; -esac - -# Copied from mlton-script -case "$crossArch" in -amd64) - archOpts='-m64' -;; -hppa) - archOpts='' -;; -ia64) - archOpts='-mlp64' -;; -sparc) - archOpts='-m32' -;; -x86) - archOpts='' -;; -esac - -case "$crossOS" in -aix) - osOpts='-maix64' -;; -cygwin) - osOpts='' -;; -darwin) - osOpts='-I/usr/local/include -I/opt/local/include -I/sw/include -L/usr/local/lib -L/opt/local/lib -L/sw/lib' -;; -freebsd) - osOpts='-I/usr/local/include -L/usr/local/lib/' -;; -hurd) - osOpts='' -;; -hpux) - osOpts='' -;; -linux) - osOpts='' -;; -mingw) - libs='-lws2_32 -lkernel32 -lpsapi -lnetapi32 -lwinmm' -;; -netbsd) - osOpts='-I/usr/pkg/include -Wl,-R/usr/pkg/lib -L/usr/pkg/lib/' -;; -openbsd) - osOpts='-I/usr/local/include -L/usr/local/lib/' -;; -solaris) - osOpts='-lnsl -lsocket -lrt' -;; -esac - -exe='print-constants' -echo "Compiling and running print-constants on $machine." -"$src/build/bin/mlton" -target $crossTarget -build-constants true | - ssh $machine "cd $tmp/runtime && - cat >$exe.c && - gcc $archOpts $osOpts $CPPFLAGS -I. -o $exe $exe.c libmlton.a libgdtoa.a $LDFLAGS -lgmp -lm" -ssh $machine "$tmp/runtime/$exe$suf" >"$lib/targets/$crossTarget/constants" -ssh $machine "rm -rf $tmp" diff -Nru mlton-20130715/bin/build-cross-gcc mlton-20210117+dfsg/bin/build-cross-gcc --- mlton-20130715/bin/build-cross-gcc 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/bin/build-cross-gcc 1970-01-01 00:00:00.000000000 +0000 @@ -1,177 +0,0 @@ -#!/usr/bin/env bash - -# This script builds and installs a gcc cross compiler. - -# It has been used to build cross compilers from Linux to Cygwin, -# MinGW, and Solaris. It is unlikely that this script will work -# out-of-the-box. It is only intended as a template. You should read -# through it and understand what it does, and make changes as -# necessary. Feel free to add another targetType if you modify this -# script for another target. - -# Notes from Anoq about the mingw target: -# I downloaded the following files from www.mingw.org: -# *) binutils-2.13.90-20030111-1-src.tar.gz which I unpacked to -# binutils-2.13.90-20030111-1-src.tar -# This script unpacks the .tar to binutils-2.13.90-20030111-1-src -# *) gcc-3.2.3-20030504-1-src.tar.gz which I unpacked to -# gcc-3.2.3-20030504-1-src.tar -# This script unpacks the .tar to gcc-3.2.3-20030504-1 -# However when running make on gcc it complains about missing files -# stdlib.h and unistd.h - -set -e - -die () { - echo >&2 "$1" - exit 1 -} - -root=`pwd` -name=`basename "$0"` - -usage () { - die "usage: $name {cygwin|mingw|sun}" -} - -case "$#" in -1) - case "$1" in - cygwin|mingw|sun) - targetType="$1" - ;; - *) - usage - ;; - esac -;; -*) - usage -esac - -# You may want to change the installation prefix, which is where the -# script will install the cross-compiler tools. -prefix='/usr' - -# You must have have the sources to binutils and gcc, and place the -# tarfiles in the current directory. You can find ftp sites to -# download binutils and gcc-core at gnu.org. You may need to change -# the version numbers below to match what you download. -binutils='binutils-2.12' -gccVers='2.95.3' -gccTar="gcc-core-$gccVers.tar" - -# You may want to set the target. -case "$targetType" in -cygwin) - target='i386-pc-cygwin' - configureGCCFlags='' - makeGCCFlags='' - # For Cygwin, we also need the cygwin and w32api packages, - # which contain necessary header files and libraries. I got - # them by installing cygwin in a Windows machine (using # - # Cygwin's setup.exe program) and then getting the bzip'ed tar - # files out of their Cygwin packages dir. I had problems with - # cygwin-1.3.18-1, since its libcygwin.a contained a file, - # pseudo-reloc.o, with some strangeness that binutils didn't - # correctly handle. - cygwin='cygwin-1.3.17-1' - w32api='w32api-2.1-1' -;; -mingw) - target='i386-pc-mingw32' - # target='mingw32' - # These flags are from build-cross.sh from www.libsdl.org except: - # I added --disable-nls because of undefined references to dcgettext__ - configureGCCFlags='--with-headers=$prefix/$target/include --with-gnu-as --with-gnu-ld --without-newlib --disable-multilib --disable-nls' - makeGCCFlags='LANGUAGES=c' - # For MinGW, we also need the mingw-runtime and w32api packages, - # which contain necessary header files and libraries. I got - # them from www.mingw.org. - mingw='mingw-runtime-3.2' - w32api='w32api-2.4' -;; -sun) - target='sparc-sun-solaris' - configureGCCFlags='' - makeGCCFlags='' - # For sun, we assume that you have already copied the includes - # and libraries from a Solaris machine to the host machine. - if ! [ -d "$prefix/$target/include" -a -d "$prefix/$target/lib" ]; then - die "Must create $prefix/$target/{include,lib}." - fi - # The GCC tools expect limits.h to be in sys-include, not include. - ( cd "$prefix/$target" && - mkdir -p sys-include && - mv include/limits.h sys-include ) -;; -esac - -exists () { - if [ ! -r "$1" ]; then - die "$1 does not exist" - fi -} - -echo 'Checking that needed files exist.' -exists $binutils.tar -exists $gccTar -case "$targetType" in -cygwin) - exists $cygwin.tar - exists $w32api.tar - echo 'Copying include files and libraries needed by cross compiler.' - cd "$root" - mkdir -p cygwin - cd cygwin - tar x <../$cygwin.tar - tar x <../$w32api.tar - mkdir -p "$prefix/$target" || - die "Cannot create $prefix/$target." - (cd usr && tar c include lib) | (cd "$prefix/$target/" && tar x) -;; -mingw) - exists $mingw.tar - exists $w32api.tar - echo 'Copying include files and libraries needed by cross compiler.' - cd "$root" - mkdir -p mingw - cd mingw - tar x <../$mingw.tar - tar x <../$w32api.tar - mkdir -p "$prefix/$target" || - die "Cannot create $prefix/$target." - (tar c include lib) | (cd "$prefix/$target/" && tar x) -;; -*) -;; -esac - -echo 'Building binutils.' -cd "$root" -if [ ! -d "$binutils" ]; then - tar x <$binutils.tar -fi -mkdir -p build-binutils -cd build-binutils -"../$binutils/configure" "--prefix=$prefix" "--target=$target" \ - >"$root/configure-binutils-log" 2>&1 || - die "Configure of binutils failed." -make all install >"$root/build-binutils-log" 2>&1 || - die "Build of binutils failed." - -echo 'Building gcc.' -cd "$root" -tar x <"$gccTar" -mkdir -p build-gcc -cd build-gcc -eval "../gcc-$gccVers/configure" -v $configureGCCFlags \ - --enable-languages=c \ - "--prefix=$prefix" \ - "--target=$target" \ - >"$root/configure-gcc-log" 2>&1 || - die "Configure of gcc failed." -eval make $makeGCCFlags all install >"$root/build-gcc-log" 2>&1 || - die "Build of gcc failed." - -echo 'Success.' diff -Nru mlton-20130715/bin/clean mlton-20210117+dfsg/bin/clean --- mlton-20130715/bin/clean 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/bin/clean 2021-12-28 17:19:36.000000000 +0000 @@ -2,15 +2,46 @@ set -e +die () { + echo >&2 "$1" + exit 1 +} + +usage () { + die "usage: $name [--exclude ...]" +} + + +name=$(basename "$0") dir=$(dirname "$0") root=$(cd "$dir/.." && pwd) bin="$root/bin" +declare -a exclude +while [ "$#" -gt 0 ]; do + case "$1" in + "--exclude") + shift + if [ "$#" -gt 0 ]; then + exclude+=("$1"); + shift + fi + ;; + *) usage + ;; + esac +done + doit () { # rm -rf '.#'* .*~ *~ *.a *.o .cm core mlmon.out svn-commit.* "$bin/ls-ignore" | xargs rm -rf for f in *; do if [ -d "$f" ]; then + for ((i=0; i < ${#exclude[*]}; i++)); do + if [ "$f" == "${exclude[$i]}" ]; then + continue 2 + fi + done cd "$f" if [ -r Makefile ]; then "$bin/mmake" clean || doit diff -Nru mlton-20130715/bin/ls-ignore mlton-20210117+dfsg/bin/ls-ignore --- mlton-20130715/bin/ls-ignore 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/bin/ls-ignore 2021-12-28 17:19:36.000000000 +0000 @@ -30,7 +30,9 @@ declare -a fargs fargs+=("(") -fargs+=("-false") +fargs+=("-exec") +fargs+=("false") +fargs+=(";") idir="." while true; do if [ -r "$idir/$ignore" ]; then diff -Nru mlton-20130715/bin/Makefile mlton-20210117+dfsg/bin/Makefile --- mlton-20130715/bin/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/bin/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/bin/mlton-script mlton-20210117+dfsg/bin/mlton-script --- mlton-20130715/bin/mlton-script 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/bin/mlton-script 2021-12-28 17:19:36.000000000 +0000 @@ -2,34 +2,23 @@ # This script calls MLton. -set -e -dir=`dirname "$0"` -lib=`cd "$dir/../lib" && pwd` -eval `"$lib/platform"` -gcc='gcc' -case "$HOST_OS" in -mingw) - exe='.exe' -;; -hpux) - ia64hpux="-mlp64" -;; -*) - exe='' -;; -esac -mlton="$lib/mlton-compile$exe" +LIB_REL_BIN="../lib/mlton" -smlnj='sml' -if $smlnj -h >/dev/null 2>&1; then - smlnj_heap_suffix=`echo 'TextIO.output (TextIO.stdErr, SMLofNJ.SysInfo.getHeapSuffix ());' | $smlnj 2>&1 1> /dev/null` - mlton_smlnj_heap="$lib/mlton-smlnj.$smlnj_heap_suffix" -else - mlton_smlnj_heap="" -fi +EXE= + +CC="cc" -mlton_polyml="$lib/mlton-polyml$exe" +# You may need to set 'GMP_INC_DIR' so the C compiler can find gmp.h. +GMP_INC_DIR= +# You may need to set 'GMP_LIB_DIR' so the C compiler can find libgmp. +GMP_LIB_DIR= + + +set -e + +dir=`dirname "$0"` +lib=`cd "$dir/$LIB_REL_BIN" && pwd` declare -a rargs case "$1" in @@ -49,95 +38,78 @@ esac doitMLton () { - exec "$mlton" @MLton ram-slop 0.5 "${rargs[@]}" -- "$@" + mlton_mlton="$lib/mlton-compile$EXE" + if [ -x "$mlton_mlton" ]; then + exec "$mlton_mlton" @MLton ram-slop 0.5 "${rargs[@]}" -- "$@" + fi } doitSMLNJ () { - exec "$smlnj" @SMLload="$mlton_smlnj_heap" "$@" + smlnj='sml' + if $smlnj -h >/dev/null 2>&1; then + smlnj_heap_suffix=`echo 'TextIO.output (TextIO.stdErr, SMLofNJ.SysInfo.getHeapSuffix ());' | $smlnj 2>&1 1> /dev/null` + mlton_smlnj_heap="$lib/mlton-compile-smlnj.$smlnj_heap_suffix" + if [ -s "$mlton_smlnj_heap" ]; then + exec "$smlnj" @SMLload="$mlton_smlnj_heap" "$@" + fi + fi } doitPolyML () { - exec "$mlton_polyml" "$@" + mlton_polyml="$lib/mlton-compile-polyml$EXE" + if [ -x "$mlton_polyml" ]; then + exec "$mlton_polyml" "$@" + fi } doit () { - if [ -x "$mlton" ]; then - doitMLton "$@" - elif [ -s "$mlton_smlnj_heap" ]; then - doitSMLNJ "$@" - elif [ -x "$mlton_polyml" ]; then - doitPolyML "$@" - fi - echo 'Unable to run MLton. Check that lib is set properly.' >&2 - exit 1 + doitMLton "$@" + doitSMLNJ "$@" + doitPolyML "$@" + echo 'Unable to run MLton. Check that lib is set properly.' >&2 + exit 1 } -# For align-{functions,jumps,loops}, we use -m for now instead of -# -f because old gcc's will barf on -f, while newer ones only warn -# about -m. Someday, when we think we won't run into older gcc's, -# these should be changed to -f. - -# You may need to add a line with -cc-opt 'I/path/to/gmp.h' so the -# C compiler can find gmp.h -# You may need to add a line with -link-opt '-L/path/to/libgmp' so -# that the linker can find libgmp. - -# The darwin linker complains (loudly) about non-existent library -# search paths. -darwinLinkOpts='' -if [ -d '/usr/local/lib' ]; then - darwinLinkOpts="$darwinLinkOpts -L/usr/local/lib" +if [ -n "$GMP_INC_DIR" ]; then +gmpCCOpts="-cc-opt -I$GMP_INC_DIR" fi -if [ -d '/opt/local/lib' ]; then - darwinLinkOpts="$darwinLinkOpts -L/opt/local/lib" -fi -if [ -d '/sw/lib' ]; then - darwinLinkOpts="$darwinLinkOpts -L/sw/lib" +if [ -n "$GMP_LIB_DIR" ]; then +gmpLinkOpts="-link-opt -L$GMP_LIB_DIR -target-link-opt netbsd -Wl,-R$GMP_LIB_DIR" fi doit "$lib" \ -ar-script "$lib/static-library" \ - -cc "$gcc" \ + -cc "$CC" \ + -cc-opt '-std=gnu11 -fno-common' \ + -cc-opt '-O1 -fno-strict-aliasing' \ + -cc-opt '-foptimize-sibling-calls' \ + -cc-opt '-w' \ -cc-opt-quote "-I$lib/include" \ - -cc-opt '-O1 -fno-common' \ - -cc-opt '-fno-strict-aliasing -fomit-frame-pointer -w' \ - -link-opt '-lm -lgmp' \ - -mlb-path-map "$lib/mlb-path-map" \ + $gmpCCOpts $gmpLinkOpts \ + -llvm-llc-opt '-O2' \ + -llvm-opt-opt '-mem2reg -O2' \ + -mlb-path-var 'SML_LIB $(LIB_MLTON_DIR)/sml' \ -target-as-opt amd64 '-m64' \ -target-as-opt x86 '-m32' \ + -target-cc-opt aix '-maix64' \ -target-cc-opt alpha \ '-mieee -mbwx -mtune=ev6 -mfp-rounding-mode=d' \ -target-cc-opt amd64 '-m64' \ - -target-cc-opt darwin \ - '-I/usr/local/include - -I/opt/local/include - -I/sw/include' \ - -target-cc-opt freebsd '-I/usr/local/include' \ - -target-cc-opt netbsd '-I/usr/pkg/include' \ - -target-cc-opt openbsd '-I/usr/local/include' \ - -target-cc-opt aix '-maix64' \ - -target-cc-opt ia64 "$ia64hpux -mtune=itanium2" \ + -target-cc-opt amd64-darwin '-arch x86_64' \ + -target-cc-opt arm64-darwin '-arch arm64' \ + -target-cc-opt ia64-hpux "-mlp64" \ + -target-cc-opt ia64 "-mtune=itanium2" \ -target-cc-opt sparc '-m32 -mcpu=v8 -Wa,-xarch=v8plusa' \ - -target-cc-opt x86 \ - '-m32 - -fno-strength-reduce - -fschedule-insns - -fschedule-insns2 - -falign-functions=5 - -falign-jumps=2 - -falign-loops=2' \ - -target-link-opt amd64 '-m64' \ + -target-cc-opt x86 '-m32' \ + -target-link-opt aix '-maix64' \ -target-link-opt alpha \ '-mieee -mbwx -mtune=ev6 -mfp-rounding-mode=d' \ - -target-link-opt darwin "$darwinLinkOpts" \ - -target-link-opt freebsd '-L/usr/local/lib/' \ - -target-link-opt aix '-maix64' \ - -target-link-opt ia64 "$ia64hpux" \ + -target-link-opt amd64 '-m64' \ + -target-link-opt amd64-darwin '-arch x86_64' \ + -target-link-opt arm64-darwin '-arch arm64' \ + -target-link-opt ia64-hpux "-mlp64" \ -target-link-opt linux '-Wl,-znoexecstack' \ -target-link-opt mingw \ '-lws2_32 -lkernel32 -lpsapi -lnetapi32 -lwinmm' \ -target-link-opt mingw '-Wl,--enable-stdcall-fixup' \ - -target-link-opt netbsd \ - '-Wl,-R/usr/pkg/lib -L/usr/pkg/lib/' \ - -target-link-opt openbsd '-L/usr/local/lib/' \ -target-link-opt solaris '-lnsl -lsocket -lrt' \ -target-link-opt x86 '-m32' \ -profile-exclude '\$\(SML_LIB\)' \ diff -Nru mlton-20130715/bin/msed mlton-20210117+dfsg/bin/msed --- mlton-20130715/bin/msed 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/bin/msed 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -set -e - -die () { - echo "$1" >&2 - exit 1 -} - -if gsed --version >/dev/null 2>&1; then - sed='gsed' -elif gnused --version >/dev/null 2>&1; then - sed='gnused' -elif sed --version 2>&1 | grep -q GNU; then - sed=`which sed` -else - die 'Can'\''t find GNU sed' -fi - -exec "$sed" "$@" diff -Nru mlton-20130715/bin/platform mlton-20210117+dfsg/bin/platform --- mlton-20130715/bin/platform 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/bin/platform 2021-12-28 17:19:36.000000000 +0000 @@ -63,9 +63,7 @@ ;; SunOS) HOST_OS='solaris' - for arch in sparc amd64 i386 `uname -m`; do - optisa $arch > /dev/null && break - done + arch=`isainfo -k` ;; *) die "Unknown OS $uname." @@ -90,12 +88,18 @@ amd64) HOST_ARCH=amd64 ;; -arm*) - HOST_ARCH=arm -;; aarch64) HOST_ARCH=arm64 ;; +arm64) + HOST_ARCH=arm64 +;; +aarch*) + HOST_ARCH=arm +;; +arm*) + HOST_ARCH=arm +;; parisc*) HOST_ARCH=hppa ;; @@ -112,10 +116,10 @@ # big-endian and little-endian detect via headers HOST_ARCH=mips ;; -powerpc64) +powerpc64*) HOST_ARCH=powerpc64 ;; -ppc64) +ppc64*) HOST_ARCH=powerpc64 ;; powerpc) @@ -127,6 +131,9 @@ Power*) HOST_ARCH=powerpc ;; +riscv*) + HOST_ARCH=riscv +;; s390*) HOST_ARCH=s390 ;; diff -Nru mlton-20130715/bin/regression mlton-20210117+dfsg/bin/regression --- mlton-20130715/bin/regression 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/bin/regression 2021-12-28 17:19:36.000000000 +0000 @@ -8,86 +8,51 @@ name=`basename "$0"` usage () { - echo >&2 "usage: $name [-cross target] [-resume test] [-run-only target] [-short] [-test-reg reg] [mlton flags ...]" - exit 1 + echo >&2 "usage: $name [-fail] [-short] [-test-reg reg] [mlton flags ...]" + exit 1 } -cross='false' fail='false' -resume='true' -resumeTest='nil' -runOnly='false' short='false' testReg='false' +exitFail=false declare -a testRegs declare -a flags declare -a extraFlags flags[${#flags[@]}]="-type-check" flags[${#flags[@]}]="true" while [ "$#" -gt 0 ]; do - case "$1" in - -cross) - cross='true' - shift - if [ "$#" = 0 ]; then - usage - fi - crossTarget="$1" - shift - ;; - -fail) - fail='true' - shift - ;; - -resume) - resume='false' - shift - if [ "$#" = 0 ]; then - usage - fi - resumeTest="$1" - shift - ;; - -run-only) - runOnly='true' - shift - if [ "$#" = 0 ]; then - usage - fi - crossTarget="$1" - shift - ;; - -short) - short='true' - shift - ;; - -test-reg) - testReg='true' - shift - if [ "$#" = 0 ]; then - usage - fi - testRegs[${#testRegs[@]}]="$1" - shift - ;; - *) - flags[${#flags[@]}]="$1" - shift - ;; - esac + case "$1" in + -fail) + fail='true' + shift + ;; + -short) + short='true' + shift + ;; + -test-reg) + testReg='true' + shift + if [ "$#" = 0 ]; then + usage + fi + testRegs[${#testRegs[@]}]="$1" + shift + ;; + *) + flags[${#flags[@]}]="$1" + shift + ;; + esac done + dir=`dirname "$0"` src=`cd "$dir/.." && pwd` bin="$src/build/bin" -lib="$src/build/lib" +lib="$src/build/lib/mlton" mlton="$bin/mlton" -if $cross; then - flags[${#flags[@]}]="-target" - flags[${#flags[@]}]="$crossTarget" - flags[${#flags[@]}]="-stop" - flags[${#flags[@]}]="g" -fi cont='callcc.sml callcc2.sml callcc3.sml once.sml' flatArray='finalize.sml flat-array.sml flat-array.2.sml' intInf='conv.sml conv2.sml fixed-integer.sml harmonic.sml int-inf.*.sml slow.sml slower.sml smith-normal-form.sml' @@ -95,48 +60,65 @@ thread='thread0.sml thread1.sml thread2.sml mutex.sml prodcons.sml same-fringe.sml timeout.sml' world='world1.sml world2.sml world3.sml world4.sml world5.sml world6.sml' tmp=/tmp/z.regression.$$ -PATH="$bin:$src/bin/.:$PATH" +PATH="$bin:$PATH" -eval `"$lib/platform"` +# whitelist tests that are known to fail (will still run but exit cleanly) +declare -A whitelisted +if [ -a $src/regression/whitelist ] ; then + while read f ; do + echo "whitelisting $f..." + whitelisted["$f"]=1 + done <$src/regression/whitelist +fi + +isWhitelisted () { + local f=$1 + if [[ ${whitelisted["$f"]} ]] ; then + echo 1 + else + echo 0 + fi +} compFail () { echo "compilation of $f failed with ${flags[*]}" } -"$mlton" -verbose 1 || echo 'no mlton present' +"$mlton" -verbose 1 || (echo 'no mlton present' && exitFail=true) echo "flags = ${flags[*]}" +TARGET_ARCH=`"$mlton" -show path-map | sed -n 's/TARGET_ARCH \(.*\)/\1/p'` +TARGET_OS=`"$mlton" -show path-map | sed -n 's/TARGET_OS \(.*\)/\1/p'` +OBJPTR_REP=`"$mlton" -show path-map | sed -n 's/OBJPTR_REP \(.*\)/\1/p'` +ALIGN=`echo "${flags[@]}" | sed -n 's/.*-align \(.\).*/\1/p'` +if [ -z "$ALIGN" ]; then + ALIGN=`"$mlton" -z 2>&1 | sed -n 's/.*-align {\(.\).*/\1/p'` +fi + cd "$src/regression" if $fail; then for f in fail/*.sml; do echo "testing $f" ( "$mlton" "${flags[@]}" -stop tc "$f" >/dev/null 2>&1 && - echo "compilation of $f should have failed but did not" ) || + echo "compilation of $f should have failed but did not" && ignore=$(isWhitelisted $f) && if [ "$ignore" -eq 0 ] ; then exitFail=true ; fi ) || true done - exit 0 + + if [ "$exitFail" = true ] ; then + exit 1 + else + exit 0 + fi fi forMinGW='false' -if [ `host-os` = mingw ]; then +if [ $TARGET_OS = mingw ]; then forMinGW='true' fi -case $crossTarget in -*mingw) - forMinGW='true' -;; -esac for f in *.sml; do f=`basename "$f" .sml` - if ! ($resume); then - if [ "$f" == "$resumeTest" ]; then - resume='true' - else - continue - fi - fi if ($testReg); then skip='true' for (( i = 0 ; $i < ${#testRegs[@]} ; i++ )); do @@ -148,7 +130,7 @@ continue fi fi - case `host-os` in + case $TARGET_OS in cygwin) case "$f" in textio.2) @@ -176,7 +158,7 @@ serialize) continue ;; - esac + esac echo "testing $f" unset extraFlags case "$f" in @@ -184,115 +166,119 @@ extraFlags[${#extraFlags[@]}]="-const" extraFlags[${#extraFlags[@]}]="Exn.keepHistory true" ;; + gc-collect2) + extraFlags[${#extraFlags[@]}]="-runtime" + extraFlags[${#extraFlags[@]}]="mark-compact-ratio 1.001 copy-ratio 1.001 live-ratio 1.001" + ;; + world*) + extraFlags[${#extraFlags[@]}]="-link-opt" + extraFlags[${#extraFlags[@]}]="-no-pie" + ;; esac - if (! $runOnly); then - mlb="$f.mlb" - echo "\$(SML_LIB)/basis/basis.mlb - \$(SML_LIB)/basis/mlton.mlb - \$(SML_LIB)/basis/sml-nj.mlb - ann - \"allowFFI true\" - \"allowOverload true\" - \"nonexhaustiveMatch ignore\" - \"redundantMatch ignore\" - in $f.sml - end" >"$mlb" - "$mlton" "${flags[@]}" "${extraFlags[@]}" -output "$f" "$mlb" - if [ "$?" -ne '0' ] || ((! $cross) && [ ! -x "$f" ]); then - compFail "$f" - fi - rm "$mlb" - else - case "$crossTarget" in - *mingw) - libs='-lws2_32 -lkernel32 -lpsapi -lnetapi32' - ;; - *solaris) - libs='-lnsl -lsocket -lrt' - ;; - *) - libs='' - ;; - esac - libs="-lmlton -lgmp $libs -lgdtoa -lm" - # Must use $f.[0-9].[csS], not $f.*.[csS], because the - # latter will include other files, e.g. for finalize, - # it will also include finalize.2. This happens only - # when running cross regressions, which builds all the - # C files and saves them in this directory. - files="$f.[0-9].[csS]" - if [ 0 -ne `ls $f.[0-9][0-9].[csS] 2>/dev/null | wc -l` ]; then - files="$files $f.[0-9][0-9].[csS]" - fi - gcc -o "$f" -w -O1 \ - -I "/usr/local/include" \ - -I "../build/lib/include" \ - -I "../build/lib/targets/$crossTarget/include" \ - -L"../build/lib/targets/$crossTarget" \ - -L/usr/pkg/lib \ - -L/usr/local/lib \ - $files $libs - fi - if [ ! -r "$f".nonterm -a $cross = 'false' -a -x "$f" ]; then + + mlb="$f.mlb" + echo "\$(SML_LIB)/basis/basis.mlb + \$(SML_LIB)/basis/mlton.mlb + \$(SML_LIB)/basis/sml-nj.mlb + ann + \"allowFFI true\" + \"allowOverload true\" + \"allowExtendedTextConsts true\" + \"nonexhaustiveBind ignore\" + \"nonexhaustiveMatch ignore\" + \"redundantBind ignore\" + \"redundantMatch ignore\" + in $f.sml + end" >"$mlb" + "$mlton" "${flags[@]}" "${extraFlags[@]}" -output "$f" "$mlb" + if [ "$?" -ne '0' ] || [ ! -x "$f" ]; then + compFail "$f" + exitFail=true + fi + rm "$mlb" + + if [ ! -r "$f".nonterm -a -x "$f" ]; then nonZeroMsg='Nonzero exit status.' - if $forMinGW; then - nonZeroMsg="$nonZeroMsg"'\r' - fi + if $forMinGW; then + nonZeroMsg="$nonZeroMsg"'\r' + fi ( "./$f" || echo -e "$nonZeroMsg" ) >$tmp 2>&1 if [ -r "$f.ok" ]; then - compare="$f.$HOST_ARCH-$HOST_OS.ok" - if [ ! -r $compare ]; then - compare="$f.ok" - fi - if $forMinGW; then + compare="$f.ok" + for x in "$OBJPTR_REP" "${OBJPTR_REP}a$ALIGN" "$TARGET_OS" "$TARGET_ARCH" "$TARGET_ARCH-$TARGET_OS"; do + if [ -r "$f.$x.ok" ]; then + compare="$f.$x.ok" + fi + done + if $forMinGW; then newcompare="$f.sed.ok" sed $'s/$/\r/' <"$compare" > "$newcompare" compare="$newcompare" - fi + fi if ! diff "$compare" "$tmp"; then echo "$f: difference with ${flags[*]} ${extraFlags[*]}" + ignore=$(isWhitelisted $f) + if [ "$ignore" -eq 0 ] ; then + exitFail=true + fi fi fi fi done -if $cross || $runOnly || $short || $testReg ; then - exit 0 + +if $short || $testReg ; then + if [ "$exitFail" = true ] ; then + exit 1 + else + exit 0 + fi fi -mmake clean >/dev/null + +"$src/bin/mmake" clean >/dev/null cd "$src/benchmark/tests" for f in *.sml; do f=`basename "$f" .sml` tmpf="/tmp/$f.$$" case "$f" in - fxp|hamlet) + fxp) echo "skipping $f" ;; *) echo "testing $f" echo "val _ = Main.doit 0" | cat "$f.sml" - > "$tmpf.sml" $mlton -output "$tmpf" "${flags[@]}" \ + -default-ann 'nonexhaustiveBind ignore'\ -default-ann 'nonexhaustiveMatch ignore'\ + -default-ann 'redundantBind ignore' \ -default-ann 'redundantMatch ignore' \ "$tmpf.sml" if [ $? -ne 0 ]; then compFail "$f" + exitFail=true fi rm -f "$tmpf" "$tmpf.sml" ;; esac -done -mmake clean >/dev/null +done +"$src/bin/mmake" clean >/dev/null cd "$src" for f in mllex mlyacc mlprof; do tmpf="/tmp/$f.$$" cd "$src/$f" echo "testing $f" - mmake -W "$f" >/dev/null + "$src/bin/mmake" -W "$f" >/dev/null "$mlton" "${flags[@]}" -output "$tmpf" "$f.mlb" if [ $? -ne 0 ]; then compFail "$f" + exitFail=true fi rm -f "$tmpf" done rm -f "$tmp" + +if [ "$exitFail" = true ] ; then + exit 1 +else + exit 0 +fi diff -Nru mlton-20130715/bin/run-docker mlton-20210117+dfsg/bin/run-docker --- mlton-20130715/bin/run-docker 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/bin/run-docker 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,12 @@ +#!/bin/bash + +NAME="mlton-run-docker" + +# Remove any containers which already have $NAME. +docker image rm $NAME + +# build container, and assign it tag $NAME +docker build -t $NAME . + +# run container with the tag $NAME. +docker run --rm -it $NAME diff -Nru mlton-20130715/bin/travis-ci mlton-20210117+dfsg/bin/travis-ci --- mlton-20130715/bin/travis-ci 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/bin/travis-ci 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +set -e + +echo +mlton +echo +make -version +echo +$CC --version +echo +if [[ "$MLTON_COMPILE_ARGS" == *"llvm"* ]]; then +llvm-as -version +opt -version +llc -version +echo +fi + +MLTON_RUNTIME_ARGS="ram-slop 0.90" + +echo "Building MLton..." +make -j4 \ + CC="$CC" \ + OLD_MLTON_RUNTIME_ARGS="$MLTON_RUNTIME_ARGS" \ + MLTON_RUNTIME_ARGS="$MLTON_RUNTIME_ARGS" \ + MLTON_COMPILE_ARGS="$MLTON_COMPILE_ARGS" \ + WITH_DBG_RUNTIME=false \ + all + +if [ "$REGRESSION" == "true" ]; then +echo "Running regression tests..." +./bin/regression $MLTON_COMPILE_ARGS +fi diff -Nru mlton-20130715/bin/upgrade-basis mlton-20210117+dfsg/bin/upgrade-basis --- mlton-20130715/bin/upgrade-basis 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/bin/upgrade-basis 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ -#!/usr/bin/env bash - -set -e - -die () { - echo >&2 "$1" - exit 1 -} - -bin=`dirname "$0"` -name=`basename "$0"` - -usage () { - die "usage: $name " -} - -case "$#" in -3) - PATH="$1" - ARCH="$2" - OS="$3" -;; -*) - usage -;; -esac - -tmp="$$.sml" - -echo "val () = print \"I work\"" >"$tmp" -if ! mlton "$tmp" 1>&2; then - die "Error: cannot upgrade basis because the compiler doesn't work" -fi - -feature () { - feature="$1" - sml="$2" - echo "$feature" >"$tmp" - if ! mlton -stop tc "$tmp" >/dev/null 2>&1; then - echo "$sml" - fi -} - -feature 'fun f x : string option = TextIO.inputLine x' ' -structure TextIO = - struct - open TextIO - - fun inputLine ins = - case TextIO.inputLine ins of - "" => NONE - | s => SOME s - end' - -feature 'fun f x : string option = OS.FileSys.readDir x' ' -structure OS = - struct - open OS - structure FileSys = - struct - open FileSys - fun readDir d = - case FileSys.readDir d of - "" => NONE - | s => SOME s - end - end' - -feature 'val _ = IntInf.~>>' ' -structure IntInf = - struct - open IntInf - - val ~>> : int * Word.word -> int = - fn _ => raise Fail "IntInf.~>>" - end' - -feature 'val _ = Real32.+' 'structure Real32 = Real64' - -feature 'val _ = Word8.~' ' -structure Word8 = - struct - open Word8 - - fun ~ w = 0w0 - w - end' - -feature 'val _ = Word.~' ' -structure Word = - struct - open Word - - fun ~ w = 0w0 - w - end -structure Word32 = Word -structure LargeWord = Word' - -feature 'val _ = PackWord64Big.bytesPerElem' ' -structure PackWord64Big : PACK_WORD = struct - val bytesPerElem = 0 - val isBigEndian = true - fun subVec _ = raise Fail "PackWord64Big.subVec" - fun subVecX _ = raise Fail "PackWord64Big.subVecX" - fun subArr _ = raise Fail "PackWord64Big.subArr" - fun subArrX _ = raise Fail "PackWord64Big.subArrX" - fun update _ = raise Fail "PackWord64Big.update" -end' - -feature 'val _ = PackWord64Little.bytesPerElem' ' -structure PackWord64Little : PACK_WORD = struct - val bytesPerElem = 0 - val isBigEndian = false - fun subVec _ = raise Fail "PackWord64Little.subVec" - fun subVecX _ = raise Fail "PackWord64Little.subVecX" - fun subArr _ = raise Fail "PackWord64Little.subArr" - fun subArrX _ = raise Fail "PackWord64Little.subArrX" - fun update _ = raise Fail "PackWord64Little.update" -end' - -cat <<-EOF -structure MLton = - struct - open MLton - - structure Platform = - struct - structure Arch = - struct - type t = string - val host = "$ARCH" - val toString = fn s => s - end - structure OS = - struct - type t = string - val host = "$OS" - val toString = fn s => s - end - end - end -EOF - -rm -f "$tmp" -rm -f `basename "$tmp" .sml` diff -Nru mlton-20130715/CHANGELOG.adoc mlton-20210117+dfsg/CHANGELOG.adoc --- mlton-20130715/CHANGELOG.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/CHANGELOG.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,3519 @@ += CHANGELOG + +== Version 20210117 + +Here are the changes from version 20201002 to 20210117. + +=== Summary + +* Compiler. + ** Fix bug in `SimplifyTypes` SSA optimization pass. +* Libraries. + ** Other libraries. + *** Updated: ckit library, MLLPT library, MLRISC library, SML/NJ library +* Other. + ** Preliminary support for `arm64-darwin`. + ** Fix bug in `Makefile.binary` detecting default position-independent style. + +=== Details + +* 2021-01-17 + ** Update SML/NJ libraries to SML/NJ 110.99. + +* 2021-01-15 + ** Fix bug in `Makefile.binary` detecting default position-independent style. + Thanks to Greg Werbin for the but report. + ** Preliminary support for `arm64-darwin` ("Apple Silicon"). Thanks to Chris + Cannam for the patches. + +* 2020-10-22 + ** Fix bug in `SimplifyTypes` SSA optimization pass. Thanks to Martin Elsman + for the bug report. + +== Version 20201002 + +Here are the changes from version 20200817 to version 20201002. + +=== Summary + +* Compiler. + ** Fixed bug in handling of weak objects during mark-compact GC. + +=== Details + +* 2020-09-20 + ** Fix bug in handling of weak objects during mark-compact GC. Thanks to + Bernard Berthomieu for the bug report. + +== Version 20200817 + +Here are the changes from version 20200722 to version 20200817 + +=== Summary + +* Compiler. + ** Fixed bug in `RssaShrink` optimization that would result in an unbound + variable and an internal compiler error. +* Other. + ** Fixes for Solaris and MinGW platforms. + +=== Details + +* 2020-07-30 + ** Fix bug in jump-chaining optimization of `RssaShrink` that would + result in an unbound variable and an internal compiler error. + +== Version 20200722 + +Here are the changes from version 20180206 to version 20200722. + +=== Summary + +* Compiler. + ** Added expert `-pi-style {default|npi|pic|pie}` and + `-native-pic {false|true}` options, which can be used to override a + target-determined default. + ** Fix a number of instances of excessive live data during + compilation. + ** Disable `Zone` SSA optimization pass by default; the `Zone` pass + is known to not be safe-for-space. + ** Statically allocate and initialize some global objects. + ** Many updates and improvements to C and LLVM codegens. + ** Add new `BounceVars` RSSA optimization pass to split the live + ranges of RSSA variables. + ** Improve `RssaShrink` optimization. + ** Add support for alternate globalization strategies in + `ConstantPropagation`. + ** Strengthen `Useless` optimization with respect to a number of + primitives. + ** Add new `DuplicateGlobals` and `SplitTypes` SSA optimization + passes. + ** Introduce new `Overflow`-checking primitives and remove old + `Overflow`-checking primitives and special-case code required (e.g., + `Arith` transfers in IRs) to support them. + ** Add parsers for XML, SXML, SSA, and SSA2 IRs. +* Runtime. + ** Detect and report incompatible use of ASLR/PIE on `load-world`. + ** Added support for RISC-V architecture. +* Language. +* Libraries. + ** Basis Library. + *** Change `OS.IO.poll` to not be restarted when interrupted by a + signal. (This is consistent with `Socket.select`.) + *** Add `MLton.sizeAll: unit -> IntInf.int` that returns the size + of reachable live data. + *** Change type of `MLton.size` from `'a -> int` to + `'a -> IntInf.int`, because with 64-bit systems, the size of a + single object can exceed that representable by a signed 32-bit + integer. + ** Other libraries. + *** Updated: ckit library, MLLPT library, MLRISC library, SML/NJ library +* Tools. +* Other. + ** Updates to simplify porting MLton. + ** Support parallel build (i.e., `make -j`). This mainly supports + platforms/packagers that use a parallel `make` by default; it does + not obtain significant build speedups. + ** Various updates to ``Makefile``s. See `Makefile.config` for + common and user-customizable configuration. + ** Characterize MLton-LICENSE as an instance of the Historical + Permission Notice and Disclaimer (HPND) license, rather than + BSD-style. + +=== Details + +* 2020-07-18 + ** Update SML/NJ libraries to SML/NJ 110.98. + +* 2020-07-08 + ** Fix `Real{32,64}_gdtoa` race condition. + +* 2020-07-07 + ** Upgrade `gdtoa.tgz`. + +* 2020-06-28 + ** Update SML/NJ libraries to SML/NJ 110.97. + +* 2020-05-28 + ** Fix bug in running `blockFn`-s for `CML.sync`. + +* 2020-05-23 + ** Updates to simplify porting MLton. Add `remote-bootstrap` and + `remote-add-cross-target` goals to `Makefile`. The + `remote-bootstrap` goal automates the process of bootstraping MLton + on a remote machine that doesn't have a suitable pre-compiled + `mlton` binary. The `remote-add-cross-target` goal automatesthe + process of adding a cross-compiler target. These goals replace + `bin/add-cross` and `bin/save-bootstrap-source`. + +* 2020-05-12 + ** Fix infinte loop with jump chaining in `RssaShrink`. + +* 2020-03-11 + ** Fix `String.scan` to return `NONE` if first character is + non-printable. + +* 2020-02-14 + ** Fix bug in `SimplifyTypes` SSA optimization pass. + +* 2020-01-22 + ** Add expert `-pi-style {default|npi|pic|pie}` and + `-native-pic {false|true}` options, which can be used to override a + target-determined default. See + https://github.com/MLton/mlton/pull/365 for details. + +* 2020-01-21 + ** Support parallel build (i.e., `make -j`). This mainly supports + platforms/packagers that use a parallel `make` by default; it does + not obtain significant build speedups. + +* 2020-01-11 + ** Revise implementation of statically allocated and initialized + global objects. + +* 2019-11-22 + ** Many updates and improvements to C and LLVM codegens. See + https://github.com/MLton/mlton/pull/351 for details. + +* 2019-11-05 + ** Change `OS.IO.poll` to not be restarted when interrupted by a + signal. (This is consistent with `Socket.select`.) + +* 2019-11-04 + ** Detect and report incompatible use of ASLR/PIE on `load-world`. + ** Fix bugs in `MLton.size` and `MLton.share`; calling `MLton.size` + or `MLton.share` with a non-pointer variant of an object type that + could be represented by either a pointer or a non-pointer (e.g., the + `NONE` variant of an `int list option`) would segfault. + +* 2019-10-25 + ** Fix a number of instances of excessive live data during compilation. + ** Disable `Zone` SSA optimization pass by default; the `Zone` pass + is known to not be safe-for-space. + ** Add `MLton.sizeAll: unit -> IntInf.int` that returns the size of + reachable live data. + ** Change type of `MLton.size` from `'a -> int` to + `'a -> IntInf.int`, because with 64-bit systems, the size of a + single object can exceed that representable by a signed 32-bit + integer. + +* 2019-09-19 + ** Statically allocate and initialize some global objects. See + https://github.com/MLton/mlton/pull/328 for details. Undertaken by + Jason Carr at RIT supported by NSF CISE Research Infrastructure + (CRI) award. + +* 2019-07-18 + ** Add `-llvm-aamd {none|tbaa}` to control including alias-analysis + metadata when compiling with LLVM. See + https://github.com/MLton/mlton/pull/324 for details. Undertaken by + Jason Carr at RIT supported by NSF CISE Research Infrastructure + (CRI) award. + +* 2019-06-21 + ** Improved parser combinator library (`structure Parse`) in the + MLton Library. Undertaken by Jason Carr at RIT supported by NSF + CISE Research Infrastructure (CRI) award. + +* 2019-06-19 + ** Raise values from raiser to handler via the ML stack. See + https://github.com/MLton/mlton/pull/321 for details. + +* 2019-06-17 + ** Various updates to ``Makefile``s. See `Makefile.config` for + common and user-customizable configuration. + +* 2019-06-07 + ** Refactor pass infrastructure. See + https://github.com/MLton/mlton/pull/313 for details. + +* 2019-05-31 + ** Add new `BounceVars` RSSA optimization pass to split the live + ranges of RSSA variables. See + https://github.com/MLton/mlton/pull/299 for details. Undertaken by + Jason Carr at RIT supported by NSF CISE Research Infrastructure + (CRI) award. + +* 2019-05-24 + ** Many updates and improvements to C and LLVM codegens. See + https://github.com/MLton/mlton/pull/304 for details. + +* 2019-05-13 + ** Improve RSSA shrink optimization. Undertaken by Jason Carr at + RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2019-03-22 + ** Update word primitives. Inline signed integer `quot` and `rem` + in C codegen (C99 and C11 have reliable semantics for signed + division). + +* 2019-03-20 + ** Remove old `Overflow`-checking primitives and special-case code + required to support them. Undertaken by Daman Morris at RIT + supported by NSF CISE Research Infrastructure (CRI) award. + +* 2019-03-12 + ** Fix latent `MLton.GC.collect` bug; an explicit `MLton.GC.collect` + call was passed `0` bytes requested rather than the bytes required + by the return block(s). + +* 2019-01-16 + ** Add support for alternate globalization strategies in + `ConstantPropagation` (but defaults correspond to previous + behavior). + +* 2019-01-03 + ** Strengthen `Useless` optimization with respect to a number of primitives + (`MLton_equal`, `MLton_hash`, `MLton_eq`, `MLton_share`, `MLton_size`, + `Weak_canGet`, and `MLton_touch`). + ** Add new `DuplicateGlobals` and `SplitTypes` SSA optimization passes. + `DuplicateGlobals` introduces a distinct instance of a `ConApp` global for + each distict use within the program. `SplitTypes` performs a + unification-based analysis to split a datatype into distinct instances for + constructed values that are not unified. Because datatypes are recursive, + other analyses often conflate all defs and uses of `ConApp`-s; `SplitTypes` + allows non-unified instances of a datatype to be analyzed separately. + Undertaken by Jason Carr at RIT supported by NSF CISE Research Infrastructure + (CRI) award. + +* 2018-11-07 + ** Add support for OpenBSD 6.4, which added stack-pointer register checking to + the kernel. On OpenBSD, `%rsp`/`%esp` must be reserved by the native codegens + (so as to always point to the C stack) and the signal stack must be `mmap`-ed + with `MAP_STACK`. Thanks to Dan Cross for the pull request. + +* 2018-10-15 + ** Introduce new `Overflow`-checking primitives. Undertaken by Daman Morris + at RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2018-08-17 + ** Add a parser for the SSA2 IR (`functor ParseSsa2`). Undertaken by Manan + Joshi at RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2018-05-18 + ** Add a parser for the SSA IR (`functor ParseSsa`). Undertaken by James + Reilly at RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2018-04-28 + ** Characterize MLton-LICENSE as an instance of the Historical Permission + Notice and Disclaimer (HPND) license, rather than BSD-style. + +* 2018-04-04 + ** Added support for RISC-V architecture. Thanks to Adam Goode for the pull + request. + +* 2018-03-31 + ** Add `./bin/save-bootstrap-source` script to aid bootstrapping on a new + platform. Thanks to Adam Goode for the pull request. + +* 2018-03-28 + ** Recognize `ppc64le` in `./bin/platform` as an instance of `powerpc64` + architecture. Thanks to Adam Goode for the pull request. + +* 2018-02-15 + ** Set `LIB_REL_BIN` in `mlton` script when installing. Some systems (e.g., + x86_64 Fedora) will set `libdir` to `/usr/lib64`, so it is necessary to + compute and set the relative path from `TBIN` to `TLIB` when installing + `$(TBIN)/mlton`. + +== Version 20180206 + +Here are the changes from version 20130715 to version 20180206. + +=== Summary + +* Compiler. + ** Added an experimental LLVM codegen (`-codegen llvm`); requires LLVM tools + (`llvm-as`, `opt`, `llc`) version ≥ 3.7. + ** Made many substantial cosmetic improvements to front-end diagnostic + messages, especially with respect to source location regions, type inference + for `fun` and `val rec` declarations, signature constraints applied to a + structure, `sharing type` specifications and `where type` signature + expressions, type constructor or type variable escaping scope, and + nonexhaustive pattern matching. + ** Fixed minor bugs with exception replication, precedence parsing of function + clauses, and simultaneous `sharing` of multiple structures. + ** Made compilation deterministic (eliminate output executable name from + compile-time specified `@MLton` runtime arguments; deterministically generate + magic constant for executable). + ** Updated `-show-basis` (recursively expand structures in environments, + displaying components with long identifiers; append `(* @ region *)` + annotations to items shown in environment). + ** Forced amd64 codegen to generate PIC on amd64-linux targets. +* Runtime. + ** Added `gc-summary-file file` runtime option. + ** Reorganized runtime support for `IntInf` operations so that programs that + do not use `IntInf` compile to executables with no residual dependency on GMP. + ** Changed heap representation to store forwarding pointer for an object in + the object header (rather than in the object data and setting the header to a + sentinel value). +* Language. + ** Added support for selected SuccessorML features; see + http://mlton.org/SuccessorML for details. + ** Added `(*#showBasis "file" *)` directive; see + http://mlton.org/ShowBasisDirective for details. + ** FFI: + *** Added `pure`, `impure`, and `reentrant` attributes to `_import`. An + unattributed `_import` is treated as `impure`. A `pure` `_import` may be + subject to more aggressive optimizations (common subexpression elimination, + dead-code elimination). An `_import`-ed C function that (directly or + indirectly) calls an `_export`-ed SML function should be attributed + `reentrant`. + ** ML Basis annotations. + *** Added `allowSuccessorML {false|true}` to enable all SuccessorML features + and other annotations to enable specific SuccessorML features; see + http://mlton.org/SuccessorML for details. + *** Split `nonexhaustiveMatch {warn|error|igore}` and `redundantMatch + {warn|error|ignore}` into `nonexhaustiveMatch` and `redundantMatch` + (controls diagnostics for `case` expressions, `fn` expressions, and `fun` + declarations (which may raise `Match` on failure)) and `nonexhaustiveBind` + and `redundantBind` (controls diagnostics for `val` declarations (which may + raise `Bind` on failure)). + *** Added `valrecConstr {warn|error|ignore}` to report when a `val rec` (or + `fun`) declaration redefines an identifier that previously had constructor + status. +* Libraries. + ** Basis Library. + *** Improved performance of `Array.copy`, `Array.copyVec`, `Vector.append`, + `String.^`, `String.concat`, `String.concatWith`, and other related + functions by using `memmove` rather than element-by-element constructions. + ** `Unsafe` structure. + *** Added unsafe operations for array uninitialization and raw arrays; see + https://github.com/MLton/mlton/pull/207 for details. + ** Other libraries. + *** Updated: ckit library, MLLPT library, MLRISC library, SML/NJ library +* Tools. + ** mlnlffigen + *** Updated to warn and skip (rather than abort) when encountering functions + with `struct`/`union` argument or return type. + +=== Details + +* 2018-02-6 + ** Remove ancient and unused `cmcat` tool. + +* 2018-02-03 + ** Upgrade `gdtoa.tgz`. + +* 2018-02-02 + ** Remove docs from `all` target of `./Makefile`; this eliminates the + `all-no-docs` target (which was frequently used in favor of `all`). + +* 2018-01-31 + ** Use C compiler with `-std=gnu11` (rather than `-std=gnu99`). + ** Revert rudimentary support for `./configure`; the support was so minimal + that it seems unhelpful to pretend that there are exhaustive compatibility + checks being performed. All of the basic configuration can be accomplished + with simple `make` variable definitions. + +* 2018-01-25 + ** Remove (expert, undocumented) `-debug-format` option; the same effect can + be achieved with `-as-opt` and `-cc-opt`. + ** Propagate C compiler from `./configure` to `mlton` script. + +* 2018-01-24 + ** Extend `-target-*-opt` options to support `arch-os` pairs. + ** Remove `./package/rpm/*` and corresponding targets in `./Makefile`; + upstream MLton has not produced RPMs for years. + +* 2018-01-24 + ** Slightly improve performance of `Vector.concat` and + `String.{concat,concatWith,tokens,fields}` by avoiding `List.map`-s. + +* 2018-01-23 + ** Restore, but deprecate, `-drop-pass` compile-time expert option. + +* 2018-01-19 + ** Update SML/NJ libraries to SML/NJ 110.82. + +* 2017-12-29 + ** Add support for `(*#showBasis "file" *)` directives. This feature is + meant to facilitate auto-completion via + https://github.com/MatthewFluet/company-mlton[`company-mlton`] and similar + tools. + +* 2017-12-20 + ** Update performance comparison on website. Thanks to Curtis Dunham for the + pull request. + +* 2017-12-17 + ** Updates to `-show-basis`: + *** `-show-basis-flat`: Recursively expand structures in environments, + displaying components with long identifiers. + *** `-show-basis-def`: Appends `(* @ region *)` annotations to items shown + in environment. + *** `-show-basis-compact`: Tries to optimize vertical space (at the expense + of long lines). + +* 2017-12-11 + ** Drop `_BSD_SOURCE` and `_POSIX_C_SOURCE` feature macros in + `./runtime/cenv.h`. + +* 2017-12-10 + ** Add a `Dockerfile` to build/test MLton. Thanks to Richard Laughlin for the + pull request. + +* 2017-12-06 + ** Remove `$PREFIX` and `$prefix` from top-level `Makefile.in`; use + `./configure --prefix path`. Thanks to Richard Laughlin for the pull + request. + +* 2017-12-03 + ** Fix heap invariant predicates. + +* 2017-11-15 + ** Eliminate the use of (some) global mutable state for signal handling. + +* 2017-11-14 + ** Store forwarding pointer for an object in the object header (rather than in + the object data and setting the header to a sentinel value). + +* 2017-11-02 + ** Updates to stack management in backend: + *** Improve `Allocation.Stack.get`. + *** Do not force `Cont` block arguments to stack. + +* 2017-10-30 + ** In `signature SSA_TO_RSSA_STRUCTS` share by `Rssa.Atoms = Ssa.Atoms`. This + is the idiom used elsewhere in the compiler, rather than sharing individual + sub-structures of `Atoms`. + ** Minor updates to `DirectedGraph` and `Tree` in MLton library. + +* 2017-10-23 + ** Add `-seed-rand w` compile-time option, to seed the pseudo-random number + generator. + ** Add a new MachineShuffle pass (disabled by default) that shuffles the + collection of chunks within the program and shuffles the collection of blocks + within a chunk. With the `-seed-rand w` compile-time option, can be used to + generate executables with distinct code placements. + +* 2017-10-23 + ** Use a relative path in the `mlton` script, rather than an absolute path. + The absolute path needed to be set to the intended installation directory, + which made it difficult to install a binary release in a local directory. + Undertaken by Maksim Yegorov at RIT supported by NSF CISE Research + Infrastructure (CRI) award. + +* 2017-10-21 + ** Add unsafe operations for array uninitialization and raw arrays. + *** Rename `Array_uninit: SeqIndex.int -> 'a array` primitive to + `Array_alloc: SeqIndex.int -> 'a array`. + *** Add `Array_uninit: 'a array * SeqIndex.int -> unit` primitive to set all + objptrs in the element at the given index to a bogus non-objptr value + (`0wx1`). One motivation for this primitive is to support space-efficient + polymorphic resizeable arrays. When shrinking a resizeable array, we would + like to "`NULL`" out the elements that are no longer part of the logical + array, in order to avoid a (logical) space leak. + *** Add `Array_uninitIsNop: 'a array -> bool` primitive to answer if the + `Array_uninit` primitive applied to the same array would be a nop (i.e., if + the array has no objptrs in the elements). This can be used to skip a + bulk-`Array_uninit` loop when it is known that the `Array_uninit` operations + would be nops. + *** Add `Array_allocRaw: SeqIndex.int -> 'a array` primitive to allocate an + array, but with a header that indicates that the array has no objptrs. Add + `Array_toArray: 'a array -> 'a array` primitive to update the header of an + `Array_allocRaw` allocated array to reveal the objptrs. One motiviation for + this primitive is that, in a parallel setting, the uninitialization of an + array can be a sequential bottleneck. The `Array_allocRaw` is a constant + time operation and the subsequent `Array_uninit` operations can be performed + in parallel. + *** Extend `structure Unsafe.Array` with additional operations. See + `./basis-library/sml-nj/unsafe.sig`. + +* 2017-10-20 + ** Introduce ShareZeroVec SSA optimization to share zero-length vectors after + coercion-based optimizations. Undertaken by Maksim Yegorov at RIT supported + by NSF CISE Research Infrastructure (CRI) award. + +* 2017-10-18 + ** New canonicalization strategy for CommonSubexp SSA optimization. + Previously, the canonicalization of commutative arithmetic primitives was + sensitive to variable hashes (created by an unseeded pseudo-random number + generator); now, the canonicalization of commutative arithmetic primitives is + sensitive to relative definition order of variables. + +* 2017-10-12 + ** Fix bug in runtime argument option parsing. + +* 2017-10-05 + ** Many updates and improvements to diagnostic messages. See + https://github.com/MLton/mlton/pull/195 for details. + +* 2017-09-27 + ** Add rudimentary support for `./configure`; in particular, support + `--with-gmp-lib` and `--with-gmp-include` to set location of GMP and + `--prefix` to specify an install prefix. Undertaken by Maksim Yegorov at RIT + supported by NSF CISE Research Infrastructure (CRI) award. + +* 2017-08-21 + ** Introduce `Array_copyArray: 'a array * SeqIndex.int * 'a array * + SeqIndex.int * SeqIndex.int -> unit` and `Array_copyVector: 'a array * + SeqIndex.int * 'a vector * SeqIndex.int * SeqIndex.int -> unit` primitives + which are used to implement a number of array and vector construction + functions, particularly `append`, `concat`, and `concatWith`. The primitives + compile to `memmove` operations, which (significantly) outperforms MLton's + element-by-element construction for large sequences. Undertaken by Bryan Camp + at RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2017-07-25 + ** Force PIC generation on amd64-linux targets. Thanks to Kuen-Bang Hou + (Favonia) for the pull request. + +* 2017-07-11 + ** Generalize the `subWord` primitives to ++ +---- + | WordArray_subWord of {seqSize:WordSize.t, eleSize: WordSize.t} + | WordArray_updateWord of {seqSize: WordSize.t, eleSize: WordSize.t} + | WordVector_subWord of {seqSize: WordSize.t, eleSize: WordSize.t} +---- ++ +Undertaken by Bryan Camp at RIT supported by NSF CISE Research Infrastructure +(CRI) award. + +* 2017-07-11 + ** Add a parser combinator library (`structure StreamParser`) to the MLton + Library. Undertaken by Jason Carr at RIT supported by NSF CISE Research + Infrastructure (CRI) award. + ** Add a parser for the SXML IR (`structure ParseSxml`). Undertaken by Jason + Carr at RIT supported by NSF CISE Research Infrastructure (CRI) award. + ** Allow compilation to start with a `.sxml` file. Undertaken by Jason Carr + at RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2017-06-29 + ** Replace `-drop-pass regex` compile-time option with `-disable-pass regex` + compile option and add `-enable-pass regex` compile option. Various XML, + SXML, SSA, SSA2, RSSA, and Machine IR optimization passes are initialized with + a default status, which can be overriden by `-{disable,enable}-pass`. In + particular, it is now easy to add a work-in-progress (and potentially buggy) + pass to the simplification pipeline with `execute = false` default status, to + be selectively executed with `-enable-pass`. Undertaken by Bryan Camp at RIT + supported by NSF CISE Research Infrastructure (CRI) award. + ** Add LoopUnswitch and LoopUnroll SSA optimizations (undertaken by Matthew + Surawski as an RIT CS MS Capstone Project). Initial evaluation demonstrates + some non-trivial performance gains, no non-trivial performance losses, and + only minor code size increases, but currently disabled pending a more thorough + evaluation. + +* 2017-05-23 + ** Expand the set of MLB annotations: + *** `nonexhaustiveBind`, `nonexhaustiveExnBind`, `redundantBind`: controls + diagnostics for `val` declarations (which may raise `Bind` on failure). + *** `nonexhaustiveMatch`, `nonexhaustiveExnMatch`, `redundantMatch`: + controls diagnostics for `case` expressions, `fn` expressions, and `fun` + declarations (which may raise `Match` on failure). + *** `nonexhaustiveRaise`, `nonexhaustiveExnRaise`, `redundantRaise`: + controls diagnostics for `handle` expressions (which implicitly re-raise on + failure). Note that `nonexhaustiveRaise` and `nonexhaustiveExnRaise` + default to `ignore`. The combination of `nonexhaustiveRaise warn` and + `nonexhaustiveExnRaise ignore` can be useful for finding handlers that + handle some, but not all, values of an exception variant. + ** Make a number of improvements to diagnostic messages: + *** Display nonexhaustive exception patterns as `_ : exn`, rather than + `e`. + *** Normalize nonexhaustive patterns by sorting (e.g., by `ConApp` name). + *** Report complete enumeration of unhandled constants, rather than a single + example. + *** Report nonexhaustive patterns of record type as records, rather than as + tuples. + +* 2017-04-20 + ** Updates to SSA, SSA2, and RSSA IR support infrastructure + *** Display more context when reporting SSA and SSA2 IR type errors. + *** Add `-layout-width n` compile expert option to control the target width + for the pretty printer. + *** Make cosmetic improvments to SSA and SSA2 IR display (uses of global + variables bound to small constants and conapps are commented with the + corresponding value; include loop forest for functions with `-keep dot`). + *** Improve RSSA constant folding and copy propagation. + *** Limit Machine IR `Globals` to variables used outside of the `main` + function. + +* 2017-04-15 + ** Add `gc-summary-file file` runtime option. + +* 2017-04-15 + ** Rename and add `smlnj-mlton-x{2,4,8,16}` top-level `Makefile` targets. + ** Update SML/NJ librarys to SML/NJ 110.80 (making use of supported + SuccessorML features). + ** Note support for SML/NJ extensions via SuccessorML MLB annotations on + website. + +* 2017-04-14 + ** Add support for vector expressions (`#[e1, e2, ..., en]`) and vector + patterns (`#[p1, p2, ..., pn]`) and add `Vector_vector` n-ary primitive. + Initial support for vector expressions and the `Vector_vector` primitive were + undertaken by Krishna Ravikumar as an RIT CS MS Capstone Project. + +* 2017-03-29 + ** Update DOS eol handling and tweak error messages in lexer. + +* 2017-03-27 + ** Correct off-by-one error in column numbers. Thanks to Jacob Zimmerman for + the error report and pull request. + +* 2017-03-15 + ** Updates to SuccessorML support: + *** Add an `allowSuccessorML {false|true}` MLB annotation to enable all + Successor ML features with a single annotation. + *** Fix parsing of numeric labels to only accept an INT token that does not + begin with 0, is not an extended literal, is not negative, and is decimal. + *** Drop the alternate word prefixes (`0xw` and `0bw`). + *** Unconditionally allow line comments in MLB files. + *** Allow UTF-8 byte sequences in text constants. + *** Refactor `ml.lex` and `mlb.lex` to be more maintainable. + *** Rename `allowRecPunning` annotation to `allowRecordPunExps`. + +* 2017-02-27 + ** Update ML-Yacc examples (`calc`, `fol`, `pascal`) to comply with MLton + build process. Thanks to Hai Nguyen Van for the pull request. + +* 2017-01-25 + ** Update PortingMLton documentation and `./bin/add-cross` script. Thanks to + Daniel Moerner for the pull request. + +* 2016-09-29 + ** Constant fold `CPointer_equal(NULL, NULL)` to `true`. + +* 2016-09-29 + ** Introduce `NEEDS_SIGALTSTACK_EXEC` config in runtime system. + +* 2016-09-27 + ** Construct a devel build version string from last commit time and last + commit hash. + ** Omit build date and build node from version banner; makes self-compiles + deterministic. + ** Remove `upgrade-basis.sml` from build. The generated `upgrade-basis.sml` + was introduced to handle incompatibilities in the Basis Library provided by an + old version of MLton and the Basis Library assumed by the current sources. + However, there are no incompatibilities with MLton 20130715, MLton 20100608, + or MLton 20070826. Nonetheless, the feature testing performed by + `./bin/upgrade-basis` to generate `upgrade-basis.sml` is time consuming, + especially when trying to simply type check the compiler sources. + +* 2016-06-20 + ** Do not `gzip` man pages on OpenBSD. Thanks to Alexander Abushkevich for + the pull request. + +* 2016-06-20 + ** Generate position independent code for OpenBSD. Thanks to Alexander + Abushkevich for the pull request. + +* 2016-06-20 + ** Fix profiling for amd64-openbsd and x86-openbsd. Thanks to Alexander + Abushkevich for the pull request. + +* 2016-04-06 + ** Update SML/NJ librarys to SML/NJ 110.79. + +* 2016-03-22 + ** Update LLVM codegen to support (and require) >= llvm-3.7. Thanks to Eugene + Akentyev for the pull request. + +* 2016-02-26 + ** Configure GMP location via `Makefile`. + +* 2016-01-10 + ** Fix typo in `mlb-formal.tex`. Thanks to Jon Sterling for the pull request. + +* 2015-11-10 + ** Update SML/NJ librarys to SML/NJ 110.78. Use `allowOrPats` and + `allowSigWithtype` to minimize diffs. + +* 2015-10-20 + ** Fix elaboration of `withtype` in signature. + +* 2015-10-06 + ** Add support for setting CM anchor bindings in `cm2mlb` tool. + +* 2015-10-06 + ** Fix non-exhaustive match warnings with or-patterns. Thanks to Rob Simmons + for the bug report. + ** Distinguish between partial and fully redundant matches. + ** Report partial redundancy in `val` declarations. + ** Lower precedence of or-patterns in parser. + ** Make a variety of cosmetic improvements to non-exhaustive and redundant + error/warning messages, primarily to be consistent in formatting between + quoted AST and generated messages. + +* 2015-07-10 + ** Extend support for arm64 (aarch64). Thanks to Edmund Evans for the patch. + +* 2015-06-22 + ** Introduce `valrecConstr {warn|error|ignore}` MLB annotation to report when + a `val rec` (or `fun`) declaration redefines an identifier that previously had + constructor status. + +* 2015-06-19 + ** Add support for selected SuccessorML features (undertaken by Kevin Bradley + as an RIT CS MS Capstone Project). + *** `do`-declarations (`allowDoDecls`) + *** extended literals (`allowExtendedLiterals`) + *** line comments (`allowLineComments`) + *** optional leading bar in matches, fun decls, and datatype decls + (`allowOptBar`) + *** optional trailing semicolon in sequence expressions (`allowOptSemicolon`) + *** or patterns (`allowOrPats`) + *** record expression punning (`allowRecPunning`) + *** withtype in signatures (`allowSigWithtype`) + +* 2015-06-10 + ** Hide equality status of poly (and mono) vector and array slices. + ** Hide type equality of mono and poly `Word8.word` arrays and vectors. + +* 2015-06-08 + ** Added `reentrant` attribute to `_import`. An `_import`-ed C function that + (directly or indirectly) calls an `_export`-ed SML function should be + attributed `reentrant`. + +* 2015-06-08 + ** Make compilation deterministic: + *** Eliminate output executable name from compile-time specified `@MLton` + arguments. + *** Deterministically generate magic constant for executable. + +* 2015-06-08 + ** Add `-keep ast` compile option. Undertaken by Ross Bayer at RIT supported + by NSF CISE Research Infrastructure (CRI) award. + +* 2015-06-02 + ** Updates to Debian packaging. Thanks to Christopher Cramer for the pull + request. + +* 2015-03-30 + ** Use `LANG=en_us` when computing version and build date. Thanks to Eugene + Akentyev for the pull request. + +* 2015-02-17 + ** Update `mlnlffigen` to warn and skip functions with `struct`/`union` + arguments. Thanks to Armando Doval for the pull request. + +* 2014-12-22 + ** Move pervasive constructs from `./mlton/ast` to `./mlton/atoms`, so that + `./mlton/ast/sources.mlb` depends on `./mlton/atoms/sources.mlb` (and not the + other way around). Undertaken by Vedant Raiththa at RIT supported by NSF CISE + Research Infrastructure (CRI) award. + +* 2014-12-17 + ** Cache a worker thread to service calls of `_export`-ed functions. Thanks + to Bernard Berthomieu for the bug report. + +* 2014-12-02 + ** Post-process generated front-end files for compatibility with SML/NJ's + recent `ml-lex` and `ml-yacc` tools that generate log identifiers rather than + unqualified (top-level environment) identifiers. + ** Corrected documentation for SML/NJ `Makefile` target and fixed + `bootstrap-nj` target. Thanks to Daniel Rosenwasser for the pull request. + +* 2014-11-21 + ** Reorganized runtime support for `IntInf` operations so that programs that + do not use `IntInf` compile to executables with no residual dependency on GMP. + ** Fixed bug in `MLton.IntInf.fromRep` that could yield values that violate + the `IntInf` representation invariants. Thanks to Rob Simmons for the bug + report. + +* 2014-10-24 + ** Added `pure` and `impure` attributes to `_import`. An unattributed + `_import` is treated as `impure`. A `pure` `_import` may be subject to more + aggressive optimizations (common subexpression elimination, dead-code + elimination). Undertaken by Vedant Raiththa at RIT supported by NSF CISE + Research Infrastructure (CRI) award. + +* 2014-10-22 + ** Various updates to treatment of `IntInf` constants in the compiler. + *** Recognize both `Big` and `Small` representations of `IntInf`-s. + *** Translate `IntInf` consts to `Big` and `Small` representations in + conversion from SSA to RSSA. This is consistent with the treatment of other + `IntInf` operations in the conversion. After the conversion, `IntInf` is no + longer treated as a primitive. + *** Remove `initIntInfs` from program initialization. + *** Constant fold `IntInf_toVector` and `WordVector_toIntInf` primitives. + +* 2014-10-20 + ** Various updates to `structure WordXVector` in compiler proper. + *** Update the `WordXVector.layout` function. If the `elementSize` is + `WordX.word8` and more than 90% of the characters satisfy `Char.isGraph + orelse Char.isSpace`, then display as an SML string constant (with + non-printable characters SML-escaped). Otherwise, display as an SML/NJ-style + `#[0x0, 0xF]` vector literal. + *** Update initialization of `static struct GC_vectorInit vectorInits[]` + constants in runtime. If the `WordXVector`'s (primitive) `elementSize` is + `WordSize.W8`, then emit a C-escaped string constant. Otherwise, emit a + C-array initialization. + +* 2014-08-15 + ** More updates to benchmark infrastructure. + *** Make `update-counts.sh` script more robust. + *** Update `hamlet.sml` benchmark program to close input file after each + loop. + *** Update `fft.sml` benchmark program to only invoke `test` function with + power-of-2 arguments. + *** Update `model-elimination.sml` benchmark program to iterate `main ()` + according to `doit` size parameter. + +* 2014-08-11 + ** Include `winsock2.h` before `windows.h` in MinGW port. Thanks to Shu-Hung + You for the pull request. + +* 2014-07-31 + ** Refactor array and vector implementation in Basis Library into a primitive + implementation (using `SeqInt.int` for indexing) and a wrapper implementation + (using the default `Int.int` for indexing). Thanks to Rob Simmons for the + pull request. + ** Correct description of `MLton.{Vector,Array}.unfoldi` on website. Thanks + to Rob Simmons for the pull request. + +* 2014-07-14 + ** Updates to benchmark infrastructure. + *** Add `even-odd.sml` benchmark that exercises mutual tail recursion. + *** Add `update-counts.sh` script to calculate appropriate benchmark + iteration counts and update benchmark iteration counts so that all + benchmarks run for at least 30 seconds. + *** Updates to benchmark driver program. + +* 2014-07-07 + ** Change `./basis-library/integer/int-inf.sml` to reduce dependency on + GMP-specific details of `./basis-library/integer/int-inf0.sml`. Thanks to Rob + Simmons for the pull request. + ** Correct type and description of `MLton.IntInf.fromRep` on website. Thanks + to Rob Simmons for the pull request. + +* 2014-07-01 + ** Add experimental LLVM codegen (undertaken by Brian Leibig as an RIT CS MS + Project). + +* 2014-06-09 + ** Update `CallingFromSMLToC` page on website. Thanks to Bikal Gurung for the + pull request. + +* 2014-03-18 + ** Updates for MinGW port. + +* 2014-02-07 + ** Update AsciiDoc sources for website. + +* 2013-10-31 + ** Various updates to website. Thanks to Mauricio C Antunes for the pull + request. + *** Add Tofte's tutorial and Rossberg's grammar. + *** Fix links to implementations. + +* 2013-10-10 + ** Update links from `References` page on website. Thanks to Mauricio C + Antunes for the pull request. + +* 2013-09-02 + ** Fix example for `Lazy` page on website. Thanks to Daniel Rosenwasser for + the pull request. + +== Version 20130715 + +Here are the changes from version 20100608 to version 20130715. + +=== Summary + +* Compiler. + ** Cosmetic improvements to type-error messages. + ** Removed features: + *** Bytecode codegen: The bytecode codegen had not seen significant use and + it was not well understood by any of the active developers. + *** Support for `.cm` files as input: The ML Basis system provides much + better infrastructure for "programming in the very large" than the (very) + limited support for CM. The `cm2mlb` tool (available in the source + distribution) can be used to convert CM projects to MLB projects, preserving + the CM scoping of module identifiers. + ** Bug fixes: see changelog +* Runtime. + ** Bug fixes: see changelog +* Language. + ** Interpret `(*#line line:col "file" *)` directives as relative + file names. + ** ML Basis annotations. + *** Added: `resolveScope` +* Libraries. + ** Basis Library. + *** Improved performance of `String.concatWith`. + *** Use bit operations for `REAL.class` and other low-level operations. + *** Support additional variables with `Posix.ProcEnv.sysconf`. + *** Bug fixes: see changelog + ** `MLton` structure. + *** Removed: `MLton.Socket` + ** Other libraries. + *** Updated: ckit library, MLRISC library, SML/NJ library + *** Added: MLLPT library +* Tools. + ** mllex + *** Generate `(*#line line:col "file.lex" *)` directives with simple + (relative) file names, rather than absolute paths. + ** mlyacc + *** Generate `(*#line line:col "file.grm" *)` directives with simple + (relative) file names, rather than absolute paths. + *** Fixed bug in comment-handling in lexer. + +=== Details + +* 2013-07-06 + ** Update SML/NJ libraries to SML/NJ 110.76. + +* 2013-06-19 + ** Upgrade `gdtoa.tgz`; fixed bug in `Real32.{fmt,toDecimal,toString}`, which + in some cases produced too many digits + +* 2013-06-18 + ** Removed `MLton.Socket` structure (deprecated in last release). + +* 2013-06-10 + ** Improved performance of `String.concatWith`. + +* 2013-05-22 + ** Update SML/NJ libraries to SML/NJ 110.75. + +* 2013-04-30 + ** Detect PowerPC 64 architecture. + +* 2012-10-09 + ** Fixed bug in elaboration that erroneously accepted the following: + + signature S = sig structure A : sig type t end + and B : sig type t end where type t = A.t end + +* 2012-09-04 + ** Introduce an MLB annotation to control overload and flex record resolution + scope: `resolveScope {strdec|dec|topdec|program}`. + +* 2012-07-04 + ** Simplify use of `getsockopt` and `setsockopt` in Basis Library. + ** Direct implementation of `Socket.Ctl.{getATMARK,getNREAD}` in runtime + system, rather than indirect implementation in Basis Library via `ioctl`. + ** Replace use of casting through a union with `memcpy` in runtime. + +* 2012-06-11 + ** Use bit operations for `REAL.class` and other low-level operations. + ** Fixed bugs in `REAL.copySign`, `REAL.signBit`, and `REAL.{to,from}Decimal`. + +* 2012-06-01 + ** Cosmetic improvements to type-error messages. + ** Fixed bug in elaboration that erroneously rejected the following: + + datatype ('a, ''a) t = T + type ('a, ''a) u = unit + + and erroneously accepted the following: + + fun f (x: 'a) : ''a = x + fun g (x: 'a) : ''a = if x = x then x else x + +* 2012-02-24 + ** Fixed bug in redundant SSA optimization. + +* 2011-06-20 + ** Support additional variables with `Posix.ProcEnv.sysconf`. + +* 2011-06-17 + ** Change `mllex` and `mlyacc` to generate `#line` directives with simple file + names, rather than absolute paths. + ** Interpret `#line` directives as relative file names. + +* 2011-06-14 + ** Fixed bug in SSA/SSA2 shrinker that could erroneously turn a non-tail + function call with a `Bug` transfer as its continuation into a tail function + call. + +* 2011-06-11 + ** Update SML/NJ libraries to SML/NJ 110.73 and add ML-LPT library. + +* 2011-06-10 + ** Fixed bug in translation from SSA2 to RSSA with case expressions over + non-primitive-sized words. + ** Fixed bug in SSA/SSA2 type checking of case expressions over words. + +* 2011-06-04 + ** Upgrade `gdtoa.tgz`. + ** Remove bytecode codegen. + ** Remove support for `.cm` files as input. + +* 2011-05-03 + ** Fixed a bug with the treatment of `as`-patterns, which should not allow the + redefinition of constructor status. + +* 2011-02-18 + ** Fixed bug with treatment of nan in common subexpression elimination SSA + optimization. + +* 2011-02-18 + ** Fixed bug in translation from SSA2 to RSSA with weak pointers. + +* 2011-02-05 + ** Fixed bug in amd64 codegen calling convention for varargs C calls. + +* 2011-01-17 + ** Fixed bug in comment-handling in lexer for `mlyacc`'s input language. + +* 2010-06-22 + ** Fixed bug in elaboration of function clauses with different numbers of + arguments that would raise an uncaught `Subscript` exception. + + +== Version 20100608 + +Here are the changes from version 20070826 to version 20100608. + +=== Summary + +* New platforms. + ** ia64-hpux + ** powerpc64-aix +* Compiler. + ** Command-line switches. + *** Added: `-mlb-path-var ' '` + *** Removed: `-keep sml`, `-stop sml` + ** Improved constant folding of floating-point operations. + ** Experimental: Support for compiling to a C library; see wiki documentation. + ** Extended `-show-def-use` output to include types of variable definitions. + ** Deprecated features (to be removed in a future release) + *** Bytecode codegen: The bytecode codegen has not seen significant use and + it is not well understood by any of the active developers. + *** Support for `.cm` files as input: The ML Basis system provides much + better infrastructure for "programming in the very large" than the (very) + limited support for CM. The `cm2mlb` tool (available in the source + distribution) can be used to convert CM projects to MLB projects, preserving + the CM scoping of module identifiers. + ** Bug fixes: see changelog +* Runtime. + ** `@MLton` switches. + *** Added: `may-page-heap {false|true}` + ** `may-page-heap`: By default, MLton will not page the heap to disk when + unable to grow the heap to accomodate an allocation. (Previously, this + behavior was the default, with no means to disable, with security an + least-surprise issues.) + ** Bug fixes: see changelog +* Language. + ** Allow numeric characters in ML Basis path variables. +* Libraries. + ** Basis Library. + *** Bug fixes: see changelog. + ** `MLton` structure. + *** Added: `MLton.equal`, `MLton.hash`, `MLton.Cont.isolate`, + `MLton.GC.Statistics, `MLton.Pointer.sizeofPointer`, + `MLton.Socket.Address.toVector` + *** Changed: + *** Deprecated: `MLton.Socket` + ** `Unsafe` structure. + *** Added versions of all of the monomorphic array and vector structures. + ** Other libraries. + *** Updated: ckit library, MLRISC library, SML/NJ library. +* Tools. + ** `mllex` + *** Eliminated top-level `type int = Int.int` in output. + *** Include `(*#line line:col "file.lex" *)` directives in output. + *** Added `%posint` command, to set the `yypos` type and allow the lexing of + multi-gigabyte files. + ** `mlnlffigen` + *** Added command-line switches `-linkage archive` and `-linkage shared`. + *** Deprecated command-line switch `-linkage static`. + *** Added support for ia64 and hppa targets. + ** `mlyacc` + *** Eliminated top-level `type int = Int.int` in output. + *** Include `(*#line line:col "file.grm" *)` directives in output. + +=== Details + +* 2010-05-12 + ** Fixed bug in the mark-compact garbage collector where the C library's + `memcpy` was used to move objects during the compaction phase; this could lead + to heap corruption and segmentation faults with newer versions of `gcc` and/or + `glibc`, which assume that src and dst in a `memcpy` do not overlap. + +* 2010-03-12 + ** Fixed bug in elaboration of `datatype` declarations with `withtype` + bindings. + +* 2009-12-11 + ** Fixed performance bug in RefFlatten SSA2 optimization. + +* 2009-12-09 + ** Fixed performance bug in SimplifyTypes SSA optimization. + +* 2009-12-02 + ** Fixed bug in amd64 codegen register allocation of indirect C calls. + +* 2009-09-17 + ** Fixed bug in `IntInf.scan` and `IntInf.fromString` where leading spaces + were only accepted if the stream had an explicit sign character. + +* 2009-07-10 + ** Added CombineConversions SSA optimization. + +* 2009-06-09 + ** Removed deprecated command line switch `-show-anns {false, true}`. + +* 2009-04-18 + ** Removed command line switches `-keep sml` and `-stop sml`. Their meaning + was unclear with `.mlb` files; their effect with `.cm` files can be achieved + with `-stop f`. + +* 2009-04-16 + ** Fixed bug in `IntInf.~>>` that could cause a `glibc` assertion failure. + +* 2009-04-01 + ** Fixed exported type of `MLton.Process.reap`. + +* 2009-01-27 + ** Added `MLton.Socket.Address.toVector` to get the network-byte-order + representation of an IP address. + +* 2008-11-10 + ** Fixed bug in `MLton.size` and `MLton.share` when tracing the current stack. + +* 2008-10-27 + ** Fixed phantom typing of sockets by hiding the representation of socket + types. Previously the representation of sockets was revealed rendering the + phantom types useless. + +* 2008-10-10 + ** Fixed bug in nested `_export`/`_import` functions. + +* 2008-09-12 + ** Improved constant folding of floating point operations. + +* 2008-08-20 + ** Store the card/cross map at the end of the allocated ML heap; avoids + possible out of memory errors when resizing the ML heap cannot be followed by + a card/cross map allocation. + +* 2008-07-24 + ** Added support for compiling to a C library. The relevant new compiler + options are `-ar` and `-format`. Libraries are named based on the name of the + `-export-header` file. Libraries have two extra methods: + *** `NAME_open(argc, argv)` initializes the library and runs the SML code + until it reaches the end of the program. If the SML code exits or raises an + uncaught exception, the entire program will terminate. + *** `NAME_close()` will execute any registered atExit functions, any + outstanding finalizers, and frees the ML heap. + +* 2008-07-16 + ** Fixed bug in the name mangling of `_import`-ed functions with the `stdcall` + convention. + +* 2008-06-12 + ** Added `MLton.Pointer.sizeofPointer`. + +* 2008-06-06 + ** Added expert command line switch `-emit-main {true|false}`. + +* 2008-05-17 + ** Fixed bug in Windows code to page the heap to disk when unable to grow the + heap to a desired size. Thanks to Sami Evangelista for the bug report. + +* 2008-05-10 + ** Implemented `MLton.Cont.isolate`. + +* 2008-04-20 + ** Fixed bug in *NIX code to page the heap to disk when unable to grow the + heap to a desired size. Thanks to Nicolas Bertolotti for the bug report and + patch. + +* 2008-04-07 + ** More flexible active/paused stack resizing policy. + + Removed `thread-shrink-ratio` runtime option. + Added + `stack-current-grow-ratio`, `stack-current-max-reserved-ratio`, + `stack-current-permit-ratio`, `stack-current-shrink-ratio`, + `stack-max-reserved-ratio`, and `stack-shrink-ratio` runtime options. + +* 2008-04-07 + ** Fixed bugs in Basis Library where the representations of `OS.IO.iodesc`, + `Posix.IO.file_desc`, `Posix.Signal.signal`, `Socket.sock`, + `Socket.SOGK.sock_type` as integers were exposed. + +* 2008-03-14 + ** Added unsafe versions of all of the monomorphic array and vector + structures. + +* 2008-03-02 + ** Fixed bug in Basis Library where the representation of `OS.Process.status` + as an integer was exposed. + +* 2008-02-13 + ** Fixed space-safety bug in RefFlatten optimization (to flatten refs into + containing data structure). Thanks to Daniel Spoonhower for the bug report and + initial diagnosis and patch. + +* 2008-01-25 + ** Various updates to GC statistics gathering. Some basic GC statistics can + be accessed from SML by `MLton.GC.Statistics.*` functions. + +* 2008-01-24 + ** Added primitive (structural) polymorphic hash. + +* 2008-01-21 + ** Fixed frontend to accept `op _longvid_` patterns and expressions. Thanks to + Florian Weimer for the bug report. + +* 2008-01-17 + ** Extended `-show-def-use` output to include types of variable definitions. + +* 2008-01-09 + ** Extended `MLton_equal` to be a structural equality on all types, including + `real` and `->` types. + +* 2007-12-18 + ** Changed ML-Yacc and ML-Lex to output line directives so that MLton's + def-use information points to the source files (`.grm` and `.lex`) instead of + the generated implementations (`.grm.sml` and `.lex.sml`). + +* 2007-12-14 + ** Added runtime option `may-page-heap {false|true}`. By default, MLton will + not page the heap to disk when unable to grow the heap to a desired size. + (Previously, this behavior was the default, with no means to disable, with + security and least-surprise concerns.) Thanks to Wesley Terpstra for the + patch. + ** Fixed bug the FFI visible representation of `Int16.int ref` (and references + of other primitive types smaller than 32-bits) on big-endian platforms. Thanks + to Dave Herman for the bug report. + +* 2007-12-13 + ** Fixed bug in `ImperativeIOExtra.canInput` (`TextIO.canInput`). Thanks to + Ville Laurikari for the bug report. + +* 2007-12-09 + ** Better constant folding of `IntInf` operations. + +* 2007-12-07 + ** Fixed bug in algebraic simplification of `RealX` primitives. `Real.<= (x, + x)` is `false` when `x` is `NaN`. + +* 2007-11-29 + ** Fixed bug in type inference of flexible records. This would later cause + the compiler to raise the `TypeError` exception. Thanks to Wesley Terpstra for + the bug report. + +* 2007-11-28 + ** Fixed bug in cross-compilation of `gdtoa` library. Thanks to Wesley + Terpstra for the bug report and patch. + +* 2007-11-20 + ** Fixed bug in RefFlatten optimization (pass to flatten refs into containing + data structure). Thanks to Ruy LeyWild for the bug report. + +* 2007-11-19 + ** Fixed bug in the handling of weak pointers by the mark-compact garbage + collector. Thanks to Sean McLaughlin for the bug report and Florian Weimer for + the initial diagnosis. + +* 2007-11-07 + ** Added `%posint` command to `ml-lex`, to set the `yypos` type and allow the + lexing of multi-gigabyte input files. Thanks to Florian Weimer for the feature + concept and original patch. + +* 2007-11-07 + ** Added command-line switch `-mlb-path-var ' '` for specifying + MLB path variables. + +* 2007-11-06 + ** Allow numeric characters in MLB path variables. + +* 2007-09-20 + ** Fixed bug in elaboration of structures with signature constraints. This + would later cause the compiler to raise the `TypeError` exception. Thanks to + Vesa Karvonen for the bug report. + +* 2007-09-11 + ** Fixed bug in interaction of `_export`-ed functions and signal + handlers. Thanks to Sean McLaughlin for the bug report. + +* 2007-09-03 + ** Fixed bug in implementation of `_export`-ed functions using `char` + type. Thanks to Katsuhiro Ueno for the bug report. + + +== Version 20070826 + +Here are the changes from version 20051202 to version 20070826. + +=== Summary + +* New platforms: + ** amd64-linux, amd64-freebsd + ** hppa-hpux + ** powerpc-aix + ** x86-darwin (Mac OS X) +* Compiler. + ** Support for 64-bit platforms. + *** Native amd64 codegen. + ** Command-line switches. + *** Added: `-codegen amd64`, `-codegen x86`, `-default-type `, + `-profile-val {false|true}`. + *** Changed: `-stop f` (file listing now includes `.mlb` files) + ** Bytecode codegen. + *** Support for profiling. + *** Support for exception history. +* Language. + ** ML Basis annotations. + *** Removed: `allowExport`, `allowImport`, `sequenceUnit`, `warnMatch`. +* Libraries. + ** Basis Library. + *** Added: `PackWord16Big, `PackWord16Little`, `PackWord64Big`, + `PackWord64Little`. + *** Bug Fixes: see changelog. + ** `MLton` structure. + *** Added: `MLTON_MONO_ARRAY`, `MLTON_MONO_VECTOR`, `MLTON_REAL`, + `MLton.BinIO.tempPrefix`, `MLton.CharArray`, `MLton.CharVector`, + `MLton.IntInf.BigWord`, `MLton.IntInf.SmallInt`, + `MLton.Exn.defaultTopLevelHandler`, `MLton.Exn.getTopLevelHandler`, + `MLton.Exn.setTopLevelHandler`, `MLton.LargeReal`, `MLton.LargeWord`, + `MLton.Real`, `MLton.Real32`, `MLton.Real64`, `MLton.Rlimit.Rlim`, + `MLton.TextIO.tempPrefix`, `MLton.Vector.create`, `MLton.Word.bswap`, + `MLton.Word8.bswap`, `MLton.Word16`, `MLton.Word32`, `MLton.Word64`, + `MLton.Word8Array`, `MLton.Word8Vector`. + *** Changed: `MLton.Array.unfoldi`, `MLton.IntInf.rep`, `MLton.Rlimit`, + `MLton.Vector.unfoldi`. + *** Deprecated: `MLton.Socket` + ** Other libraries. + *** Added: MLRISC libary. + *** Updated: ckit library, SML/NJ library. +* Tools. + +=== Details + +* 2007-08-12 + ** Removed deprecated ML Basis annotations. + +* 2007-08-06 + ** Fixed bug in treatment of `Real.{scan,fromString}` operations. + `Real.{scan,fromString}` were using `TO_NEAREST` semantics, but should obey + current rounding mode. (Only `Real.fromDecimal` is specified to always + have `TO_NEAREST` semantics.) Thanks to Sean McLaughlin for the bug report. + +* 2007-07-27 + ** Fixed bugs in constant-folding of floating-point operations with C codegen. + +* 2007-07-26 + ** Fixed bug in treatment of floating-point operations. Floating-point + operations depend on the current rounding mode, but were being treated as + pure. Thanks to Sean McLaughlin for the bug report. + +* 2007-07-13 + ** Added `MLton.Exn.{default,get,set}TopLevelHandler`. + +* 2007-07-12 + ** Restored `native` option to `-codegen` flag. + +* 2007-07-11 + ** Fixed bug in `Real32.toInt`: conversion of real values close to + `Int.maxInt` could be incorrect. + +* 2007-07-07 + ** Updates to bytecode code generator: support for amd64-* targets, support + for profiling (including exception history). + ** Fixed bug in `Socket` module of Basis Library; unmarshalling of socket + options (for `get*` functions) used `andb` rather than `orb`. Thanks to Anders + Petersson for the bug report (and patch). + +* 2007-07-06 + ** Fixed bug in `Date` module of Basis Library; some functions would + erroneously raise `Date` when given a year <= 1900. Thanks to Joe Hurd for the + bug report. + ** Fixed a long-standing bug in monomorphisation pass. Thanks to Vesa Karvonen + for the bug report. + +* 2007-05-18 + ** Native amd64 code generator for amd64-* targets. + ** Eliminate `native` option from `-codegen` flag. + ** Add `x86` and `amd64` options to `-codegen` flag. + +* 2007-04-29 + ** Improved type checking of RSSA and Machine ILs. + +* 2007-04-14 + ** Fixed aliasing issues with `basis/Real/*.c` files. + ** Added real/word casts in `MLton` structure. + +* 2007-04-12 + ** Added primitives for bit cast of word to/from real. + ** Implement `PackReal{Big,Little}` using `PackWord{Big,Little}` and bit + casts. + +* 2007-04-11 + ** Move all system header `#include`-s to `platform/` os headers. + ** Use C99 ``, rather than custom `"assert.{h,c}"`. + +* 2007-03-13 + ** Implement `PackWord{Big,Little}` entirely in ML, using an ML byte swap + function. + +* 2007-02-25 + ** Change amd64-* target platforms from 32-bit compatibility mode (i.e., + `-m32`) to 64-bit mode (i.e., `-m64`). Currently, only the C codegen is able + to generate 64-bit executables. + +* 2007-02-23 + ** Removed expert command line switch `-coalesce `. + ** Added expert command line switch `-chunkify {coalesce|func|one}`. + +* 2007-02-20 + ** Fixed bug in `PackReal.toBytes`. Thanks to Eric McCorkle for the bug + report (and patch). + +* 2007-02-18 + ** Added command line switch `-profile-val`, to profile the evaluation of + `val` bindings; this is particularly useful with exception history for + debugging uncaught exceptions at the top-level. + +* 2006-12-29 + ** Added command line switch `-show {anns|path-map}` and deprecated command + line switch `-show-anns {false|true}`. Use `-show path-map` to see the + complete MLB path map as seen by the compiler. + +* 2006-12-20 + ** Changed the output of command line switch `-stop f` to include `.mlb` + files. This is useful for generating Makefile dependencies. The old output + is easy to recover if necessary (e.g. `grep -v '\.mlb$'`). + +* 2006-12-08 + ** Added command line switches `-{,target}-{as,cc,link}-opt-quote`, which pass + their argument as a single argument to `gcc` (i.e., without tokenization at + spaces). These options support using headers and libraries (including the + MLton runtime headers and libraries) from a path with spaces. + +* 2006-12-02 + ** Extensive reorganization of garbage collector, runtime system, and Basis + Library implementation. (This is in preparation for future 64bit support.) + They should be more C standards compliant and easier to port to new systems. + ** FFI revisions + *** Disallow nested indirect types (e.g., `int array array`). + +* 2006-11-30 + ** Fixed a bug in elaboration of FFI forms; unary FFI types (e.g., `array`, + `ref`, `vector`) could be used in places where `MLton.Pointer.t` was required. + This would later cause the compiler to raise the `TypeError` exception, along + with a lot of XML IL. + +* 2006-11-19 + ** On *-darwin, work with GnuMP installed via Fink or MacPorts. + +* 2006-10-30 + ** Ported to x86-darwin. + +* 2006-09-23 + ** Added missing specification of `find` to the `MONO_VECTOR` signature. + +* 2006-08-03 + ** Fixed a bug in Useless SSA optimization, caused by calling an imported C + function and then ignoring the result. + +* 2006-06-24 + ** Fixed a bug in pass to flatten data structures. Thanks to Joe Hurd for the + bug report. + +* 2006-06-08 + ** Fixed a bug in the native codegen's implementation of the C-calling + convention. + +* 2006-05-11 + ** Ported to PowerPC-AIX. + ** Fixed a bug in the runtime for the cases where nonblocking IO with sockets + was implemented using `MSG_DONTWAIT`. This flag does not exist on AIX, + Cygwin, HPUX, and MinGW and was previously just ignored. Now the runtime + simulates the flag for these platforms (except MinGW, yet, where it's still + ignored). + +* 2006-05-06 + ** Added `-default-type ''` for specifying the binding of default types + in the Basis Library (e.g., `Int.int`). + +* 2006-04-25 + ** Ported to HPPA-HPUX. + ** Fixed `PackReal{,32,64}{Big,Little}` to follow the Basis Library + specification. + +* 2006-04-19 + ** Fixed a bug in `MLton.share` that could cause a segfault. + +* 2006-03-30 + ** Changed `MLton.Vector.unfoldi` to return the state in addition to the + result vector. + +* 2006-03-30 + ** Added `MLton.Vector.create`, a more powerful vector-creation function than + is available in the basis library. + +* 2006-03-04 + ** Added MLRISC from SML/NJ 110.57 to standard distribution. + +* 2006-03-03 + ** Fixed bug in SSA simplifier that could eliminate an irredundant test. + +* 2006-03-02 + ** Ported a bugfix from SML/NJ for a bug with the combination of `withNack` + and `never` in CML. + +* 2006-02-09 + ** Support compiler specific annotations in ML Basis files. If an annotation + contains `:`, then the text preceding the `:` is meant to denote a compiler. + For MLton, if the text preceding the `:` is equal to `mlton`, then the + remaining annotation is scanned as a normal annotation. If the text preceding + the `:` is not-equal to `mlton`, then the annotation is ignored, and no + warning is issued. + +* 2006-02-04 + ** Fixed bug in elaboration of functors; a program with a very large number of + functors could exhibit the error `ElaborateEnv.functorClosure: firstTycons`. + + +== Version 20051202 + +Here are the changes from version 20041109 to version 20051202. + +=== Summary + +* New license: BSD-style instead of GPL. +* New platforms: + ** hppa: Debian Linux. + ** x86: MinGW. +* Compiler. + ** improved exception history. + ** Command-line switches. + *** Added: `-as-opt`, `-mlb-path-map`, `-target-as-opt`, `-target-cc-opt`. + *** Deprecated: none. + *** Removed: `-native`, `-sequence-unit`, `-warn-match`, `-warn-unused`. +* Language. + ** FFI syntax changes and extensions. + *** Added: `_symbol`. + *** Changed: `_export`, `_import`. + *** Removed: `_ffi`. + ** ML Basis annotations. + *** Added: `allowFFI`, `nonexhaustiveExnMatch`, `nonexhaustiveMatch`, + `redundantMatch`, `sequenceNonUnit`. + *** Deprecated: `allowExport`, `allowImport`, `sequenceUnit`, `warnMatch`. +* Libraries. + ** Basis Library. + *** Added: `Int1`, `Word1`. + ** `MLton` structure. + *** Added: `Process.create`, `ProcEnv.setgroups`, `Rusage.measureGC`, + `Socket.fdToSock`, `Socket.Ctl.getError`. + *** Changed: `MLton.Platform.Arch`. + ** Other libraries. + *** Added: ckit library, ML-NLFFI library, SML/NJ library. +* Tools. + ** updates of `mllex` and `mlyacc` from SML/NJ. + ** added `mlnlffigen`. + ** profiling supports better inclusion/exclusion of code. + +=== Details + +* 2005-11-19 + ** Updated SML/NJ Library and CKit Library from SML/NJ 110.57. + +* 2005-11-15 + ** Fixed a bug in `MLton.ProcEnv.setgroups`. + +* 2005-11-11 + ** Fixed a bug in the interleaving of lexing/parsing and elaborating of ML + Basis files, which would raise an unhandled `Force` exception on cyclic basis + references. Thanks to John Dias for the bug report. + +* 2005-11-10 + ** Fixed two bugs in `Time.scan`. One would raise `Time` on a string with a + large fractional component. Thanks to Carsten Varming for the bug report. + The other failed to scan strings with an explicit sign followed by a decimal + point. + +* 2005-11-03 + ** Removed `MLton.GC.setRusage`. + ** Added `MLton.Rusage.measureGC`. + +* 2005-09-11 + ** Fixed bug in display of types with large numbers of type variables, which + could cause unhandled exception `Chr`. + +* 2005-09-08 + ** Fixed bug in type inference of flexible records that would show up as + `"Type error: variable applied to wrong number of type args"`. + +* 2005-09-06 + ** Fixed bug in `Real.signBit`, which had assumed that the underlying C + signbit returned 0 or 1, when in fact any nonzero value is allowed to indicate + the signbit is set. + +* 2005-09-05 + ** Added `-mlb-path-map` switch. + +* 2005-08-25 + ** Fixed bug in `MLton.Finalizable.touch`, which was not keeping alive + finalizable values in all cases. + +* 2005-08-18 + ** Added SML/NJ Library and CKit Library from SML/NJ 110.55 to standard + distribution. + ** Fixed bug in `Socket.Ctl.*`, which got the endianness wrong on big-endian + machines. Thanks to Wesley Terpstra for the bug report and fix. + ** Added `MLton.GC.setRusage`. + ** Fixed bug in `mllex`, which had file positions starting at 2. They now + start at zero. + +* 2005-08-15 + ** Fixed bug in `LargeInt.scan`, which should skip leading `"0x"` and `"0X"`. + Thanks to Wesley Terpstra for the bug report and fix. + +* 2005-08-06 + ** Additional revisions of FFI: + *** Deprecated `_export` with incomplete annotation. + *** Added `_address` for address of C objects. + *** Eliminated address component of `_symbol`. + *** Changed the type of the `_symbol*` expression. + *** See documentation for more detail. + +* 2005-08-06 + ** Annotation changes: + *** Deprecated: `sequenceUnit` + *** Added: `sequenceNonUnit` + +* 2005-08-03 + ** Annotation changes: + *** Deprecated: `allowExport`, `allowImport`, `warnMatch` + *** Added: `allowFFI`, `nonexhaustiveExnMatch`, `nonexhaustiveMatch`, + `redundantMatch` + +* 2005-08-01 + ** Update `mllex` and `mlyacc` with SML/NJ 110.55+ versions. This + incorporates a small number of minor bug fixes. + +* 2005-07-23 + ** Fixed bug in pass to flatten refs into containing data structure. + +* 2005-07-23 + ** Overhaul of FFI: + *** Deprecated `_import` of C base types. + *** Added `_symbol` for address, getter, and setter of C base types. + *** See documentation for more detail. + +* 2005-07-21 + ** Update `mllex` and `mlyacc` with SML/NJ 110.55 versions. This incorporates + a small number of minor bug fixes. + +* 2005-07-20 + ** Fixed bug in front end that allowed unary constructors to be used without + an argument in patterns. + +* 2005-07-19 + ** Eliminated `_ffi`, which has been deprecated for some time. + +* 2005-07-14 + ** Fixed bug in runtime that caused getrusage to be called on every GC, even + if timing info isn't needed. + +* 2005-07-13 + ** Fixed bug in closure conversion tickled by making a weak pointer to a + closure. + +* 2005-07-12 + ** Changed `{OS,Posix}.Process.sleep` to call `nanosleep()` instead of + `sleep()`. + ** Added `MLton.ProcEnv.setgroups`. + +* 2005-07-11 + ** `InetSock.{any,toAddr}` raise `SysErr` if port is not in [0, 2^16^). + +* 2005-07-02 + ** Fixed bug in `Socket.recvVecFrom{,',NB,NB'}`. The type was too polymorphic + and allowed the creation of a bogus `sock_addr`. + +* 2005-06-28 + ** The front end now reports errors on encountering undefined or cyclicly + defined MLB path variables. + +* 2005-05-22 + ** Fixed bug in `Posix.IO.{getlk,setlk,setlkw}` that caused a link-time error: + undefined reference to `Posix_IO_FLock_typ`. + ** Improved exception history so that the first entry in the history is the + source position of the raise, and the rest is the call stack. + +* 2005-05-19 + ** Improved exception history for `Overflow` exceptions. + +* 2005-04-20 + ** Fixed a bug in pass to flatten refs into containing data structure. + +* 2005-04-14 + ** Fixed a front-end bug that could cause an internal bug message of the form + `"missing flexInst"`. + +* 2005-04-13 + ** Fixed a bug in the representation of flat arrays/vectors that caused + incorrect behavior when the element size was 2 or 4 bytes and there were + multiple components to the element (e.g. `(char * char) vector`). + +* 2005-04-01 + ** Fixed a bug in `GC_arrayAllocate` that could cause a segfault. + +* 2005-03-22 + ** Added structures `Int1`, `Word1`. + +* 2005-03-19 + ** Fixed a bug that caused `Socket.Ctl.{get,set}LINGER` to raise `Subscript`. + The problem was in the use of `PackWord32Little.update`, which scales the + supplied index by `bytesPerElem`. + +* 2005-03-13 + ** Fixed a bug in CML mailboxes. + +* 2005-02-26 + ** Fixed an off-by-one error in `mkstemp` defined in `mingw.c`. + +* 2005-02-13 + ** Added `mlnlffigen` tool (heavily adapted from SML/NJ). + +* 2005-02-12 + ** Added MLNLFFI Library (heavily adapted from SML/NJ) to standard + distribution. + +* 2005-02-04 + ** Fixed a bug in `OS.path.toString`, which did not raise `InvalidArc` when + needed. + +* 2005-02-03 + ** Fixed a bug in `OS.Path.joinDirFile`, which did not raise `InvalidArc` when + passed a file that was not an arc. + +* 2005-01-26 + ** Fixed a front end bug that incorrectly rejected expansive __valbind__s with + useless bound type variables. + +* 2005-01-22 + ** Fixed x86 codegen bug which failed to account for the possibility that a + 64-bit move could interfere with itself (as simulated by 32-bit moves). + +* 2004-12-22 + ** Fixed `Real32.fmt StringCvt.EXACT`, which had been producing too many + digits of precision because it was converting to a `Real64.real`. + +* 2004-12-15 + ** Replaced MLB path variable `MLTON_ROOT` with `SML_LIB`, to use a more + compiler-independent name. We will keep `MLTON_ROOT` aliased to `SML_LIB` + until after the next release. + +* 2004-12-02 + ** `Unix.create` now works on all platforms (including Cygwin and MinGW). + +* 2004-11-24 + ** Added support for `MLton.Process.create`, which works on all platforms + (including Windows-based ones like Cygwin and MinGW) and allows better control + over `std{in,out,err}` for child process. + + +== Version 20041109 + +Here are the changes from version 20040227 to 20041109. + +=== Summary + +* New platforms: + ** x86: FreeBSD 5.x, OpenBSD + ** PowerPC: Darwin (MacOSX) +* Support for MLBasis files. +* Support for dynamic libraries. +* Support for Concurrent ML (CML). +* New structures: `Int2`, `Int3`, ..., `Int31` and `Word2`, `Word3`, ..., `Word31`. +* A new form of profiling: `-profile count`. +* A bytecode generator. +* Data representation improvements. +* `MLton` structure changes. + ** Added: `share`, `shareAll` + ** Changed: `Exn`, `IntInf`, `Signal`, `Thread`. +* Command-line switch changes. + ** Deprecated: + *** `-native` (use `-codegen`) + *** `-sequence-unit` (use `-default-ann`) + *** `-warn-match` (use `-default-ann`) + *** `-warn-unused` (use `-default-ann`) + ** Removed: + *** `-detect-overflow` + *** `-exn-history` (use `-const`) + *** `-safe` + *** `-show-basis-used` + ** Added: + *** `-codegen` + *** `-const` + *** `-default-ann` + *** `-disable-ann` + *** `-profile-branch` + *** `-target-link-opt` + +=== Details + +* 2004-09-22 + ** Extended `_import` to support indirect function calls. + +* 2004-09-13 + ** Made `Date.{fromString,scan}` accept a space (treated as zero) in the first + character of the day of the month. + +* 2004-09-12 + ** Fixed bug in `IntInf` that could cause a segfault. + ** Remove `MLton.IntInf.size`. + +* 2004-09-05 + ** Made `-detect-overflow` and `-safe` expert options. + +* 2004-08-30 + ** Added `val MLton.share: 'a -> unit`, which maximizes sharing in a heap + object. + +* 2004-08-27 + ** Fixed bug in `Real.toLargeInt`. It would incorrectly raise `Option` + instead of `Overflow` in the case when the real was not an `INF`, but rounding + produced an `INF`. + ** Fixed bugs in `Date.{fmt,fromString,scan,toString}`. They incorrectly + allowed a space for the first character in the day of the month. + +* 2004-08-18 + ** Changed `MLton.{Thread,Signal,World}` to distinguish between implicitly and + explicitly paused threads. + +* 2004-07-28 + ** Added support for programming in the large using the ML Basis system. + +* 2004-07-11 + ** Fixed bugs in `ListPair.*Eq` functions, which incorrectly raised the + `UnequalLengths` exception. + +* 2004-07-01 + ** Added `val MLton.Exn.addExnMessager: (exn -> string option) -> unit`. + +* 2004-06-23 + ** Runtime system options that take memory sizes now accept a "`g`" suffix + indicating gigabytes. They also now take a real instead of an integer, + e.g. `fixed-heap 0.5g`. They also now accept uppercase, e.g. `150M`. + +* 2004-06-12 + ** Added support for OpenBSD. + +* 2004-06-10 + ** Added support for FreeBSD 5.x. + +* 2004-05-28 + ** Deprecated the `-native` flag. Instead, use the new flag `-codegen + {native|bytecode|C}`. This is in anticipation of adding a bytecode compiler. + +* 2004-05-26 + ** Fixed a front-end bug that could cause cascading error to print a very + large and unreadable internal bug message of the form `"datatype ... realized + with scheme Unknown"`. + +* 2004-05-17 + ** Automatically restart functions in the Basis Library that correspond + directly to interruptable system calls. + +* 2004-05-13 + ** Added `-profile count`, for dynamic counts of function calls and branches. + ** Equate the types `Posix.Signal.signal` and `Unix.signal`. + +* 2004-05-11 + ** Fixed a bug with `-basis 1997` that would cause type errors due to + differences between types in the MLton structure and types in the rest of the + basis library. + +* 2004-05-01 + ** Fixed a bug with sharing constraints in signatures that would sometimes + mistakenly treat two structures as identical when they shouldn't have been. + This would cause some programs to be mistakenly rejected. + +* 2004-04-30 + ** Added `MLton.Signal.{handled,restart}`. + +* 2004-04-23 + ** Added `Timer.checkCPUTimes`, and updated the `Timer` structure to match the + latest basis spec. Also fixed `totalCPUTimer` and `totalRealTimer`, which + were wrong. + +* 2004-04-13 + ** Added `MLton.Signal.Mask.{getBlocked,isMember}`. + +* 2004-04-12 + ** Fix bug that mistakenly generalized variable types containing unknown types + when matching against a signature. + ** Reasonable front-end error message when unification causes recursive + (circular) type. + +* 2004-04-03 + ** Fixed bug in sharing constraints so that `sharing A = B = C` means that all + pairs `A = B`, `A = C`, `B = C` are shared, not just `A = B` and `B = C`. + This matters in some situations. + +* 2004-03-20 + ** Fixed `Time.now` which was treating microseconds as nanoseconds. + +* 2004-03-14 + ** Fixed SSA optimizer bug that could cause the error `" has no + tyconInfo property"`. + +* 2004-03-11 + ** Fixed `Time.fromReal` to raise `Time`, not `Overflow`, on unrepresentable + times. + +* 2004-03-04 + ** Added structures `Word2`, `Word3`, ..., `Word31`. + +* 2004-03-03 + ** Added structures `Int2`, `Int3`, ..., `Int31`. + ** Fixed bug in elaboration of `and` with signatures, structures, and functors + so that it now evaluates all right-hand sides before binding any left-hand + sides. + + +== Version 20040227 + +Here are the changes from version 20030716 to 20040227. + +=== Summary + +* The front end now follows the Definition of SML and produces readable error +messages. +* Added support for NetBSD. +* Basis library changes tracking revisions to the specification. +* Added structures: `Int64`, `Real32`, `Word64`. +* File positions use `Int64`. +* Major improvements to `-show-basis`, which now displays the basis in a very +readable way with full type information. +* Command-line switch changes. + ** Deprecated: `-basis`. + ** Removed: `-lib-search`, `-link`, `-may-load-world`, `-static`. + ** Added: `-link-opt`, `-runtime`, `-sequence-unit`, `-show-def-use`, + `-stop tc`, `-warn-match`, `-warn-unused`. + ** Changed: `-export-header`, `-show-basis`, `-show-basis-used`. + ** Renamed: `-host` to `-target`. +* FFI changes. + ** Renamed `_ffi` as `_import`. + ** Added `cdecl` and `stdcall` attributes to `_import` and `_export` + expressions. +* MLton structure changes. + ** Added: Pointer. + ** Removed: Ptrace. + ** Changed: `Finalizable`, `IntInf`, `Platform`, `Random`, `Signal`, `Word`. + +=== Details + +* 2004-02-16 + ** Changed `-export-header`, `-show-basis`, `-show-basis-used` to take a file + name argument, and they no longer force compilation to halt. + ** Added `-show-def-use` and `-warn-unused`, which deal with def-use + information. + +* 2004-02-13 + ** Added flag `-sequence-unit`, which imposes the constraint that in the + sequence expression `(e1; e2)`, `e1` must be of type `unit`. + +* 2004-02-10 + ** Lots of changes to `MLton.Signal`: name changes, removal of superfluous + functions, additional functions. + +* 2004-02-09 + ** Extended `-show-basis` so that when used with an input program, it shows + the basis defined by the input program. + ** Added `stop` runtime argument. + ** Made `-call-graph {false|true}` an option to `mlprof` that determines + whether or not a call graph file is written. + +* 2004-01-20 + ** Fixed a bug in `IEEEReal.{fromString,scan}`, which would improperly return + `INF` instead of `ZERO` for things like `"0.0000e123456789012345"`. + ** Fixed a bug in `Real.{fromDecimal,fromString,scan}`, which didn't return an + appropriately signed zero for `~0.0`. + ** Fixed a bug in `Real.{toDecimal,fmt}`, which didn't correctly handle + `~0.0`. + ** Report a compile-time error on unrepresentable real constants. + +* 2004-01-05 + ** Removed option `-may-load-world`. You can now use `-runtime no-load-world` + instead. + ** Removed option `-static`. You can now use `-link-opt -static` instead. + ** Changed `MLton.IntInf.size` to return 0 instead of 1 on small ints. + +* 2003-12-28 + ** Fixed horrible bug in `MLton.Random.alphaNumString` that caused it to + return 0 for all characters beyond position 11. + +* 2003-12-17 + ** Removed `-basis` as a normal flag. It is still available as an expert + flag, but its use is deprecated. It will almost certainly disappear after the + next release. + +* 2003-12-10 + ** Allow multiple `@MLton --` runtime args in sequnce. This makes it easier + for scripts to prefix `@MLton` args without having to splice them with other + ones. + +* 2003-12-04 + ** Added support for files larger than 2G. This included changing + `Position` from `Int32` to `Int64`. + +* 2003-12-01 + ** Added `structure MLton.Pointer`, which includes a `type t` for pointers + (memory addresses, not SML heap pointers) and operations for loading from and + storing to memory. + +* 2003-11-03 + ** Fixed `Timer.checkGCTime` so that only the GC user time is included, not GC + system time. + +* 2003-10-13 + ** Added `-warn-match` to control display nonexhaustive and redundant + match warnings. + ** Fixed space leak in `StreamIO` causing the entire stream to be retained. + Thanks to Jared Showalter for the bug report and fix. + +* 2003-10-10 + ** Added `-stop tc` switch to stop after type checking. + +* 2003-09-25 + ** Fixed `Posix.IO.getfl`, which had mistakenly called `fcntl` with `F_GETFD` + instead of `F_GETFL`. + ** Tracking basis library changes: + *** `Socket` module datagram functions no longer return amount written, + since they always write the entire amount or fail. So, + `send{Arr,Vec}To{,'}` now return `unit` instead of `int`. + *** Added nonblocking versions of all the send and recv functions, as well + as accept and connect. So, we now have: `acceptNB`, `connectNB`, + `recv{Arr,Vec}{,From}NB{,'}`, `send{Arr,Vec}{,To}NB{,'}`. + +* 2003-09-24 + ** Tracking basis library changes: + *** `TextIO.inputLine` now returns a `string option`. + *** Slices used in `Byte`, `PRIM_IO`, `PrimIO`, `Posix.IO`, `StreamIO`. + *** `Posix.IO.readVec` raises `Size`, not `Subscript`, with negative + argument. + +* 2003-09-22 + ** Fixed `Real.toManExp` so that the mantissa is in [0.5, 1), not [1, 2). The + spec says that 1.0 <= man * radix < radix, which since radix is 2, implies + that the mantissa is in [0.5, 1). + ** Added `Time.{from,to}Nanoseconds`. + +* 2003-09-11 + ** Added `Real.realRound`. + ** Added `Char{Array,Vector}Slice` to `Text`. + +* 2003-09-11 + ** `OS.IO.poll` and `Socket.select` now raise errors on negative timeouts. + ** `Time.time` is now implemented using `IntInf` instead of `Int`, which means + that a much larger range of time values is representable. + +* 2003-09-10 + ** `Word64` is now there. + +* 2003-09-09 + ** Replaced `Pack32{Big,Little}` with `PackWord32{Big,Little}`. + ** Fixed bug in `OS.FileSys.fullPath`, which mistakenly stopped as soon as it + hit a symbolic link. + +* 2003-09-08 + ** Fixed `@MLton max-heap`, which was mistakenly ignored. Cleaned up `@MLton + fixed-heap`. Both `fixed-heap` and `max-heap` can use copying or mark-compact + collection. + +* 2003-09-06 + ** `Int64` is completely there. + ** Fixed `OS.FileSys.tmpName` so that it creates the file, and doesn't use + `tmpnam`. This eliminates an annoying linker warning message. + +* 2003-09-05 + ** Added structures `{LargeInt,LargeReal,LargeWord,Word}{Array,Array2,ArraySlice,Vector,VectorSlice}` + ** Fixed bug in `Real.toDecimal`, which return class `NORMAL` for subnormals. + ** Fixed bug in `Real.toLargeInt`, which didn't return as precise an integer + as possible. + +* 2003-09-03 + ** Lots of fixes to `REAL` functions. + *** `Real32` is now completely in place, except for `Real32.nextAfter` on + SunOS. + *** Fixed `Real.Math.exp` on x86 to return the right value when applied to + `posInf` and `negInf`. + *** Changed `Real.Math.{cos,sin,tan}` on x86 to always use a call to the C + math library instead of using the x86 instruction. This eliminates some + anomalies between compiling `-native false` and `-native true`. + *** Change `Real.Math.pow` to handle exceptional cases in the SML code. + *** Fixed `Real.signBit` on Sparcs. + +* 2003-08-28 + ** Fixed `PackReal{,64}Little` to work correctly on Sparc. + ** Added `PackReal{,64}Big`, `PackReal32{Big,Little}`. + ** Added `-runtime` switch, which passes arguments to the runtime via + `@MLton`. These arguments are processed before command line switches. + ** Eliminated MLton switch `-may-load-world`. Can use `-runtime` combined + with new runtime switch `-no-load-world` to disable load world in an + executable. + +* 2003-08-26 + ** Changed `-host` to `-target`. + ** Split `MLton.Platform.{arch,os}` into `MLton.Platform.{Arch,OS}.t`. + +* 2003-08-21 + ** Fixed bug in C codegen that would cause undefined references to + `Real_{fetch,move,store}` when compiling on Sparcs with `-align 4`. + +* 2003-08-17 + ** Eliminated `-link` and `-lib-search`, which are no longer needed. + Eliminated support for passing `-l*`, `-L*`, and `*.a` on the command line. + Use `-link-opt` instead. + +* 2003-08-16 + ** Added `-link-opt`, for passing options to `gcc` when linking. + +* 2003-07-19 + ** Renamed `_ffi` as `_import`. The old `_ffi` will remain for a while, but + is deprecated and should be replaced with `_import`. + ** Added attributes to `_export` and `_import`. For now, the only attributes + are `cdecl` and `stdcall`. + + +== Version 20030716 + +Here are the changes from version 20030711 to 20030716. + +== Summary + +* Fixed several serious bugs with the 20030711 release. + +== Details + +* 2003-07-15 + ** Fixed bug that caused a segfault when attempting to create an + array that was too large, e.g + + 1 + Array.sub (Array.tabulate (valOf Int.maxInt, fn i => i), 0) + + ** mlton now checks the command line arguments following the file to compile + that are passed to the linker to make sure they are reasonable. + +* 2003-07-14 + ** Fixed packaging for Cygwin and Sparc to include `libgmp.a`. + ** Eliminated bootstrap target. The `Makefile` automatically determines + whether to bootstrap or not. + ** Fixed XML type checker bug that could cause error: `"empty tyvars in + PolyVal dec"`. + +* 2003-07-12 + ** Turned off `FORCE_GENERATIONAL` in gc. It had been set, which caused the + gc to always use generational collection. This could seriously slow apps down + that don't need it. + + +== Version 20030711 + +Here are the changes from version 20030312 to 20030711. + +=== Summary + +* Added support for Sparc/SunOS using the C code generator. +* Completed the basis library implementation. At this point, the only missing +basis library function is `use`. +* Added `_export`, which allows one to call SML functions from C. +* Added weak pointers (via `MLton.Weak`) and finalization (via +`MLton.Finalizable`). +* Added new integer modules: `Int8`, `Int16`. +* Better profiling call graphs +* Fixed conversions between reals and their decimal representations to be +correct using the gdtoa library. + +=== Details + +* 2003-07-07 + ** Profiling improvements: + *** Eliminated `mlton -profile-split`. Added `mlprof -split`. Now the + profiling infrastructure keeps track of the splits and allows one to decide + which splits to make (if any) when `mlprof` is run, which is much better + than having to decide at compile time. + *** Changed `mlprof -graph` to `mlprof -keep`, and changed the behavior so + that `-keep` also controls which functions are displayed in the table. + *** Eliminated `mlprof -ignore`: it's behavior is now subsumed by `-keep`, + whose meaning has changed to be more like -ignore on nodes that are not + kept. + ** When calling `gcc` for linking, put `-link` args in same order as they + appeared on the MLton command line (they used to be reversed). + +* 2003-07-03 + ** Making `OS.Process.{atExit,exit}` conform to the basis library spec in that + exceptions raised during cleaners are caught and ignored. Also, calls to + `exit` from cleaners cause the rest of cleaners to run. + +* 2003-07-02 + ** Fixed bug with negative `IntInf` constants that could cause compile time + error message: `"x86Translate.translateChunk ... strange Offset: base: ..."` + ** Changed argument type of `MLton.IntInf.Small` from `word` to `int`. + ** Added fix to profiling so that the `mlmon.out` file is written even when + the program terminates due to running out of memory. + +* 2003-06-25 + ** Added `{Int{8,16},Word8}{,Array,ArraySlice,Vector,VectorSlice,Array2}` + structures. + +* 2003-06-25 + ** Fixed bug in `IntInf.sign`, which returned the wrong value for zero. + +* 2003-06-24 + ** Added `_export`, for calling from C to SML. + +* 2003-06-18 + ** Regularization of options: + *** `-diag` --> `-diag-pass` + *** `-drop-pass` takes a regexp + +* 2003-06-06 + ** Fixed bug in `OS.IO.poll` that caused it to return the input event types + polled for instead of what was actually available. + +* 2003-06-04 + ** Fixed bug in KnownCase SSA optimization that could case incorrect results + in compiled programs. + +* 2003-06-03 + ** Fixed bug in SSA optimizer that could cause the error message: + + Type error: Type.equals + {from = char vector, to = unit vector} + Type error: analyze raised exception loopStatement: ... + unhandled exception: TypeError + +* 2003-06-02 + ** Fixed `Real.rem` to work correctly on `inf`-s and `nan`-s. + ** Fixed bug in profiling that caused the function name to be omitted on + functions defined by `val rec`. + +* 2003-05-31 + ** `Fixed Real.{fmt,fromString,scan,toString}` to match the basis library + spec. + ** Added `IEEEReal.{fromString,scan}`. + ** Added `Real.{from,to}Decimal`. + +* 2003-05-25 + ** Added `Real.nextAfter`. + ** Added `OS.Path.{from,to}UnixPath`, which are the identity function on Unix. + +* 2003-05-20 + ** Added type `MLton.pointer`, the type of C pointers, for use with the FFI. + +* 2003-05-18 + ** Fixed two bugs in type inference that could cause the compiler to raise the + `TypeError` exception, along with a lot of XML IL. The `type-check.sml` + regression contains simple examples of what failed. + ** Fixed a bug in the simplifier that could cause the message: `"shrinker + raised Prim.apply raised assertion failure: SmallIntInf.fromWord"`. + +* 2003-05-15 + ** Fixed bug in `Real.class` introduced on 04-28 that cause many regression + failures with reals when using newer `gcc`-s. + ** Replaced `MLton.Finalize` with `MLton.Finalizable`, which has a more robust + approach to finalization. + +* 2003-05-13 + ** Fixed bug in `MLton.FFI` on Cygwin that caused `Thread_returnToC` to be + undefined. + +* 2003-05-12 + ** Added support for finalization with `MLton.Finalize`. + +* 2003-05-09 + ** Fixed a runtime system bug that could cause a segfault. This bug would + happen after a GC during heap resizing when copying a heap, if the heap was + allocated at a very low (<10M) address. The bug actually showed up on a + Cygwin system. + +* 2003-05-08 + ** Fixed bug in `HashType` that raised `"Vector.forall2"` when the arity of a + type constructor is changed by `SimplifyTypes`, but a newly constructed type + has the same hash value. + +* 2003-05-02 + ** Switched over to new layered IO implementation, which completes the + implementation of the `BinIO` and `TextIO` modules. + +* 2003-04-28 + ** Fixed bug that caused an assertion failure when generating a jump table for + a case dispatch on a non-word sized index with non-zero lower bound on the + range. + +* 2003-04-24 + ** Added `-align {4|8}`, which controls alignment of objects. With `-align + 8`, memory accesses to doubles are guaranteed to be aligned mod 8, and so + don't need special routines to load or store. + +* 2003-04-22 + ** Fixed bug that caused a total failure of time profiling with `-native + false`. The bug was introduced with the C codegen improvements that split the + C into multiple files. Now, the C codegen declares all profile labels used in + each file so that they are global symbols. + +* 2003-04-18 + ** Added `MLton.Weak`, which supports weak pointers. + +* 2003-04-10 + ** Replaced the basis library's `MLton.hostType` with `MLton.Platform.arch` + and `MLton.Platform.os`. + +* 2003-04 + ** Added support for SPARC/SunOS using the C codegen. + +* 2003-03-25 + ** Added `MLton.FFI`, which allows callbacks to SML from C. + +* 2003-03-21 + ** Fixed `mlprof` so that the default `-graph arg` for data from + `-profile-stack true` is `(thresh-stack x)`, not `(thresh x)`. + + +== Version 20030312 + +Here are the changes from version 20020923 to 20030312. + +=== Summary + +* Added source-level profiling of both time and allocation. +* Updated basis library to 2002 specification. To obtain the old +library, compile with `-basis 1997`. +* Added many modules to basis library: + ** `BinPrimIO`, `GenericSock`, `ImperativeIO`, `INetSock`, `NetHostDB`, + `NetProtDB`, `NetServDB`, `Socket`, `StreamIO`, `TextPrimIO`, `UnixSock`. +* Completed implementation of `IntInf` and `OS.IO`. + +=== Details + +* 2003-02-23 + ** Replaced `-profile-combine` wih `-profile-split`. + +* 2003-02-11 + ** Regularization of options: + *** `-l` --> `-link` + *** `-L` --> `-lib-search` + *** `-o` --> `-output` + *** `-v` --> `-verbose` + +* 2003-02-10 + ** Added option to `mlton`: `-profile-combine {false|true}` + +* 2003-02-09 + ** Added options to `mlprof`: `-graph-title`, `-gray`, `-ignore`, `-mlmon`, + `-tolerant`. + +* 2002-11 - 2003-01 + ** Added source-level allocation and time profiling. This includes the new + options to mlton: `-profile` and `-profile-stack`. + +* 2002-12-28 + ** Added `NetHostDB`, `NetProtDB`, `NetServDB` structures. + ** Added `Socket`, `GenericSock`, `INetSock`, `UnixSock` structures. + +* 2002-12-19 + ** Fixed bug in signal check insertion that could cause some signals to be + missed. The fix was to add a signal check on entry to each function in + addition to at each loop header. + +* 2002-12-10 + ** Fixed bug in runtime that might cause the message `"Unable to set + cardMapForMutator"`. + +* 2002-11-23 + ** Added support for the latest Basis Library specification. + ** Added option `-basis` to choose Basis Library version. Currently available + basis libraries are `2002`, `2002-strict`, `1997`, and `none`. + ** Added `IntInf.{orb,xorb,andb,notb,<<,~>>}` values. + ** Added `OS.IO.{poll_desc,poll_info}` types. + ** Added `OS.IO.{pollDesc,pollToIODesc,infoToPollDesc,Poll}` values. + ** Added `OS.IO.{pollIn,pollOut,pollPri,poll,isIn,isOut,isPri}` values. + ** Added `BinPrimIO`, `TextPrimIO` structures. + ** Added `StreamIO`, `ImperativeIO` functors. + +* 2002-11-22 + ** Fixed bug that caused time profiling to fail (with a segfault) when + resuming a saved world. + +* 2002-11-07 + ** Fixed bug in `MLton.eq` that could arise when using `eq` on functions. + +* 2002-11-05 + ** Improvements to polymorphic equality. Equality on IntInfs, vectors, and + dataypes all do an `eq` test first before a more expensive comparison. + +* 2002-11-01 + ** Added allocation profiling. Now, can compile with either `-profile alloc` + or `-profile time`. Renamed `MLton.Profile` as `MLton.ProfileTime`. Added + `MLton.ProfileAlloc`. Cleaned up and changed most `mlprof` option names. + +* 2002-10-31 + ** Eliminated `MLton.debug`. + ** Fixed bug in the optimizer that affected `IntInf.fmt`. The optimizer had + been always using base 10, instead of the passed in radix. + +* 2002-10-22 + ** Fixed `Real.toManExp` so that the mantissa is in [1, 2), not [0.5, 1). + ** Added `Real.fromLargeInt`, `Real.toLargeInt`. + ** Fixed `Real.split`, which would return an incorrect whole part due to the + underlying primitive, `Real_modf`, being treated as functional instead of + side-effecting. + +* 2002-09-30 + ** Fixed `rpath` problem with packaging. All executables in packages + previously made had included a setting for `RPATH`. + + +== Version 20020923 + +Here are the changes from version 20020410 to 20020923. + +=== Summary + +* MLton now runs on FreeBSD. +* Major runtime system improvements. The runtime now implements mark-compact +and generational collection, in addition to the copying collection that was +there before. It automatically switches between the the collection strategies +to improve performance and to try to avoid paging. +* Performance when compiling `-exn-history true` has been improved. +* Added `IntInf.log2`, `MLton.GC.pack`, `MLton.GC.unpack`. +* Fixed bug in load world that could cause "sread failed" on Cygwin. +* Fixed optimizer bug that could cause `"no analyze var value property"` +message. + +=== Details + +* 2002-09 + ** Integrated Sam Rushing's changes to port MLton to FreeBSD. + +* 2002-08-25 + ** Changed the implementation of exception history to be completely + functional. Now, the extra field in exceptions (when compiling `-exn-history + true`) is a `string list` instead of a `string list ref`, and `raise` conses a + new exception with a new element in the list instead of assigning to the list. + This changes the semantics of exception history (for the better) on some + programs. See `regression/exnHistory3.sml` for an example. It also + significantly improves performance when compiling `-exn-history true`. + +* 2002-07 and 2002-08 + ** Added generational GC, and code to the runtime that automatically turns it + on and off. + +* 2002-08-20 + ** Fixed SSA optimizer bug that could cause the following error message: `"x_0 + has no analyze var value property"` + +* 2002-07-28 + ** Added `MLton.GC.{pack,unpack}`. `pack` shrinks the heap so that other + processes can use the RAM, and its dual, `unpack`, resizes the heap to the + desired size. + +* 2002-06 and 2002-07 + ** Added mark compact GC. + ** Changed array layout so that arrays have three, not two header words. The + new word is a counter word that preceeds the array length and header. + ** Changed all header words to be indices into an array of object descriptors. + +* 2002-06-27 + ** Added patches from Michael Neumann to port runtime to FreeBSD 4.5. + +* 2002-06-05 + ** Output file and intermediate file are now saved in the current directory + instead of in the directory containing the input file. + +* 2002-05-31 + ** Fixed bug in overloading of `/` so that the following now type checks: + + fun f (x, y) = x + y / y + +* 2002-04-26 + ** Added back `max-heap` runtime option. + +* 2002-04-25 + ** Fixed load/save world so that they use binary mode. This should fix the + `sread failed` problem that Byron Hale saw on Cygwin that caused `mlton` to + fail to start. + ** Added `IntInf.log2`. + ** Changed call to linker to use `libgmp.a` (if it exists) instead of + `libgmp.so`. This is because the linker adds a dependency to a shared library + even if there are no references to it + +* 2002-04-23 + ** Rewrote heap resizing code. This fixed bug that was triggered with large + heaps and could cause a spurious out of memory error. + ** Removed GnuMP from MLton sources (again :-). + + +== Version 20020410 + +Here are the changes from version 20011006 to version 20020410. + +=== Details + +* 2002-03-28 + ** Added BinIO. + +* 2002-03-27 + ** Regularization of options + *** `-g` --> `-degug {false|true}` + *** `-h n` --> `-fixed-heap n` + *** `-p` --> `-profile {false|true}` + +* 2002-03-22 + ** Set up the stubs so that MLton can be compiled in the standard basis + library, with no `MLton` structure. Thus it is now easy to compile MLton with + an older (or newer) version of itself that has a different `MLton` structure. + +* 2002-03-17 + ** Added `MLton.Process.{spawn,spawne,spawnp}`, which use primitives when + running on Cygwin and fork/exec when running on Linux. + +* 2002-02 - 2002-03 + ** Added the ability to cross-compile to Cygwin/Windows. + +* 2002-02-24 + ** Added GnuMP back for use with Cygwin. + +* 2002-02-10 + ** Reworked object header words so that `Array.maxLen = valOf Int.maxInt`. + Also fixed a long-standing minor bug in MLton, where `Array.array + (Array.maxLen, ...)` would raise `Size` instead of attempting to allocate the + array. It was an off-by-one error in the meaning of `Array.maxLen`. + +* 2002-02-08 + ** Modifications to runtime to behave better in situations where the amount of + live data is a signifant fraction of the amount of RAM, based on code from + PolySpace. MLton executables by default can now use more than the available + amount of RAM. Executables will still respect the `max-heap` runtime arg if + it is set. + +* 2002-02-04 + ** Improvements to runtime so that it fails to get space, it attempts to get + less space instead of failing. Based on PolySpace's modifications. + ** Added `MLton.eq`. + +* 2002-02-03 + ** Added `MLton.IntInf.gcd`. + ** Removed GnuMP from MLton sources. We now link with `/usr/lib/libgmp.a`. + ** Added `TextIO.getPosOut`. + ** Renamed type `MLton.Itimer.which` to `MLton.Itimer.t` and + `MLton.Itimer.whichSignal` to `MLton.Itimer.signal`. + ** Added `-coalesce` flag, for use with the C backend. + +* 2002-01-26 + ** Added `-show-basis-used`, which prints out the parts of the basis library + that the input program uses. + ** Changed several other flags (`-print-at-fun-entry`, `-show-basis`, + `-static`) to follow the `{false|true}` convention. + +* 2002-01-22 + ** Improved `MLton.profile` so that multiple profile arrays can exist + simultaneously and so that the current one being used can be set from the SML + side. + +* 2002-01-18 + ** The Machine IL has been replaced with an RSSA (representation explicit SSA) + IL and an improved Machine IL. + +* 2002-01-16 + ** Added KnownCase SSA optimization + +* 2002-01-14 + ** Added rudimentary profiling control from with a MLton compile program via + the `MLton.Profile` structure. + +* 2002-01-09 + ** Fixed bug in match compiler that caused case expressions on datatypes with + redundant cases to be compiled incorrectly. + +* 2002-01-08 + ** Added redundant tuple construction elimination to SSA shrinker. + ** Improved Flatten SSA optimization. + +* 2001-12-06 + ** Changed the interface for `MLton.Signal`. There is no longer a separate + `Handler` substructure. This was done so that programs that just use + `default` and `ignore` signal handlers don't bring in the entire thread + mechanism. + +* 2001-12-05 + ** Added LocalRef elimination SSA optimization. + +* 2001-11-19 + ** The CPS IL has been replaced with an SSA (static-single assignment) IL. + All of the optimizations have been ported from CPS to SSA. + +* 2001-10-24 + ** Fixed bug in `Thread_atomicEnd` -- `limit` was mistakenly set to `base` + instead of to 0. This caused assertion failures when for executables compiled + `-g` because `GC_enter` didn't reset `limit`. + ** Fixed bug in register allocation of byte registers. + +* 2001-10-23 + ** Added `-D` option to `cmcat` for preprocessor defines. Thanks to Anoq for + sending the code. + ** Changed limit check insertion so that limit checks are only coalesced + within a single basic block -- not across blocks. This slows many benchmarks + down, but is needed to fix a bug in the way that limit checks were coalesced + across blocks. Hopefully we will figure out a better fix soon. + +* 2001-10-18 + ** Fixed type inference of flexrecord so that it now follows the Definition. + Many programs containing flexrecords were incorrectly rejected. Added many + new tests to regression/flexrecord.sml. + ** Changed the behavior of `-keep dot` combined with `-keep pass` for SSA + passes. Dot files are now saved for the program before and after, instead of + just after. + +* 2001-10-11 + ** Fixed a bug in the type inference that caused type variables to be + mistakenly generalized. The bug was exposed in Norman Ramsey's `sled.sml`. + Added a test to `regression/flexrecord.sml` to catch the problem. + + +== Version 20011006 + +Here are the changes from version 20010806 to version 20011006. + +=== Summary + +* Added `MLton.Exn.history`, which is similar to `SMLofNJ.exnHistory`. +* Support for `#line` directives of the form `(*#line line.col "file"*)`. +* Performance improvements in native codegenerator. +* Bug fixes in front-end, optimizer, register allocator, +`Real.{maxFinite,minPos,toManExp}`, and in heap save and restore. + +=== Details + +* 2001-10-05 + ** Fixed a bug in polymorphic layered patterns, like + + val 'a a as b = [] + + These would always fail due to the variable `a` not being handled correctly. + ** Fixed the syntax of `val rec` so that a pattern is allowed on the left-hand + side of the `=`. Thus, we used to reject, but now accept, the following. + + val rec a as b as c = fn _ => () + val rec a : unit -> unit : unit -> unit = fn () => () + + Thanks again to Andreas Rossberg's test files. This is now tested for in + `valrec.sml`. + ** Fixed dynamic semantics of `val rec` so that if `val rec` is used to + override constructor status, then at run time, the `Bind` exception is raised + as per rule 126 of the Definition. So, for example, the following program + type checks and compiles, but raises `Bind` at run time. + + val rec NONE = fn () => () + val _ = NONE () + + Again, this is checked in `valrec.sml`. + ** Added `\r\n` to ml.lex so that Windows style newlines are acceptable in + input files. + +* 2001-10-04 + ** Fixed bug in the implementation of `open` declarations, which in the case + of `open A B` had opened `A` and then looked up `B` in the resulting + environment. The correct behaviour (see rule 22 of the Definition) is to + lookup each _longstrid_ in the current environment, and then open them all in + sequence. This is now checked for in the `open.sml` regression test. Thanks + to Andreas Rossberg for pointing this bug out. + ** Fixed bug that caused tyvars of length 1 (i.e. `'`) to be rejected. This + is now checked in the `id.sml` regression test. Again, thanks to Andreas + Rossberg for the test. + +* 2001-10-02 + ** Fixed bugs in `Real.toManExp` (which always returned the wrong result + because the call to `frexp` was not treated as side-effecting by the + optimizer) and in `Real.minPos`, which was zero because of a mistake with + extra precision bits. + +* 2001-10-01 + ** Added `MLton.Exn.history`. + ** Fixed register allocation bug with `fucom` instruction. Was allowing + `fucomp` when the first source was not removable. + ** Changed `Real.isFinite` to use the C `math.h` `finite` function. This + fixed the nontermination bug which occurred in any program that used + `Real.maxFinite`. + +* 2001-09-22 + ** Bug fixes found from Ramsey's `lrtl` in `contify.fun` and + `unused-args.fun`, both of which caused compile-time exceptions to be raised. + +* 2001-09-21 + ** Fixed `MLton.World.{load,save}` so that the saved world does not store the + max heap size. Instead, the max heap size is computed upon load world in + exactly the same way as at program startup. This fixes a long-standing (but + only recently noticed) problem in which `mlton` (which uses a saved world) + would attempt to use as much memory as was on the machine used to build + `world.mlton`. + +* 2001-08-29 + ** Overlow checking is now on by default in the C backend. This is a huge + performance hit, but who cares, since we never use the C backend except for + testing anyways. + +* 2001-08-22 + ** Added support for #line directives of the form + + (*#line line.col "file"*) + + These directives only affect error messages produced by the parser and + elaborator. + +* 2001-08-17 + ** Fixed bug in RemoveUnused optimzation that caused the following program to + fail to compile. + + fun f l = case l of [] => f l | _ :: l => f l + val _ = f [13] + +* 2001-08-14 + ** New x86-codegen infrastructure. + *** support for tracking liveness of stack slots and carrying them in + registers across basic blocks + *** more specific `Entry` and `Transfer` datatypes to make calling convention + distinctions more explicit + *** new heuristic for carrying values in registers across basic blocks (look + Ma, no Overflows!) + *** new "predict" model for generating register allocation hints + *** additional bug fixes + +* 2001-08-07 + ** `MLton.Socket.shutdownWrite` flushes the outstream. + + +== Version 20010806 + +Here are the changes from version 20010706 to version 20010806. + +=== Summary + +* `Word.andb (w, 0xFF)` now works correctly +* `MLton.Rusage.rusage` has a patch to work around a linux kernel bug +* Programs of the form `_exp_ ; _program_` are now accepted +* Added the `MLton.Rlimit` structure +* Added the `-keep dot` flag, which produces call graphs, intraprocedural +control-flow graphs, and dominator trees + +=== Details + +* 2001-08-06 + ** Added simple CommonBlock elimination CPS optimization. + +* 2001-08-02 + ** Took out `-keep il`. + +* 2001-07-31 + ** Performance improvements to `TextIO.{input, output, output1}`. + +* 2001-07-25 + ** Added RedundantTest elimination CPS optimization. + +* 2001-07-21 + ** Added CommonSubexp elimination CPS optimization. + +* 2001-07-20 + ** Bug fix to x86 codegen. The `commuteBinALMD` peephole optimization would + rewrite `mov 2,Y; add Y,Y` as `mov Y,Y; add 2,Y`. Now the appropriate + interference checks are made. + ** Added intraprocedural unused argument removal. + ** Added intraprocedural flattener. This avoids some stupid tuple allocations + in loops. Decent speedup on a few benchmarks (`count-graphs`, `psdes-random`, + `wc-scanStream`) and no noticeable slowdowns. + ** Added `-keep dot` flag. + +* 2001-07-17 + ** Modified grammar to properly handle `val rec`. There were several problems. + *** MLton had accepted `val rec 'a ...` instead of `val 'a rec ...` + *** MLton had not accepted `val x = 13 and rec f = fn () => ()` + *** MLton had not accepted `val rec rec f = fn () => ()` + *** MLton had not accepted `val rec f = fn () => () and rec g = fn () => ()` + +* 2001-07-16 + ** Workaround for Linux kernel bug that can cause `getrusage` to return a wrong + system time value (low by one second). See `fixedGetrusage` in `gc.c`. + ** Bug fix to x86 codegen. The register allocator could get confused when + doing comparisons of floating point numbers and use the wrong operand. The + bug seems to have never been detected because it only happens when both of the + operands are already on the floating point stack, which is rare, since one is + almost always in memory since we don't carry floating point values in the + stack across basic blocks. + ** Added production to the grammar on page 58 of the Definition that had been + missing from MLton since day one. + + program ::= exp ; + + Also updated docs to reflect change. + ** Modified grammar to accept the empty program. + ** Added `-type-check` expert flag to turn on type checking in ILs. + +* 2001-07-15 + ** Bug fix to the algebraic simplifier. It had been rewriting + `Word32.andb (w, 0wxFF)` to `w` instead of + `Word32.andb (w, 0wxFFFFFFFF)` to `w`. + +* 2001-07-13 + ** Improved CPS shrinker so that `if`-tests where the `then` and `else` branch + jump to the same label is turned into a direct jump. + ** Improved CPS shrinker (`Prim.apply`) to handle constructors + *** `A = A` --> `true` + *** `A = B` --> `false` + *** `A x` = `B y` --> `false` + ** Rewrote a lot of loops in the basis library to use inequalities instead of + equality for the loop termination test so that the (forthcoming) overflow + detection elimination will work on the loop index variable. + +* 2001-07-11 + ** Fixed minor bugs in `Array2.{array,tabulate}`, `Substring.{slice}` that + caused the `Overflow` exception to be raised instead of `Size` or `Subscript` + ** Fixed bug in `Pack32Big.update` that caused the wrong location to be updated. + ** Fixed several bugs in `Pack32{Big,Little}.{subArr,subVec,update}` that + caused `Overflow` to be raised instead of `Subscript`. Also, improved the + implementation so that bounds checking only occurs once per call (instead of + four times, which was sometimes happening. + ** Fixed bugs in `Time.{toMilliseconds,toMicroseconds}` that could cause a + spurious `Overflow` exception. + ** Fixed bugs in `Time.{fromMilliseconds,fromMicroseconds}` that could cause a + spurious `Time` exception. + ** Improved `Pack32.sub*` by reordering the `orb`-s. + ** Improved `{Int,IntInf}.mod` to increase chances of constant folding. + ** Switched many uses of `+`, `-`, `*` in basis library to the non-overflow + checked versions. Modules changed were: `Array`, `Array2`, `Byte`, `Char`, + `Int`, `IntInf`, `List`, `Pack32{Big,Little}`, `Util`, `String`, `StringCvt`, + `Substring`, `TextIO`, `Time`, `Vector`. + ** Added regression tests for `Array2`, `Int` (overflow checking), `Pack32`, + `Substring`, `Time`. + ** Changed CPS output so that it includes a dot graph for each CPS function. + +* 2001-07-09 + ** Change `OS.Process.exit` so that it raises an exception if the exit status + is not in [0, 256). + ** Added `MLton.Rlimit` to provide access to `getrlimit` and `setrlimit`. + + +== Version 20010706 + +Here are the changes from the 20000906 version to the 20010706 version. + +=== Summary + +* Native X86 code generator (instead of using `gcc`) +* Significantly improved compile times +* Significantly improved run times for generated executables +* Many bug fixes +* Correct raising of the `Overflow` exception for integer arithmetic +* New modules in the `MLton` structure + +=== Details + +* 2001-07-06 + ** GC mods from Henry. Mostly adding `inline` declarations. + +* 2001-07-05 + ** Fixed several runtime bugs involving threads, critical sections, and + signals. + +* 2001-06-29 + ** Fixed performance bug in `cps/two-point-lattice.fun` that caused quadratic + behavior. This affects the raise-to-jump and useless analayses. In + particular, the useless analysis was blowing up when compiling `fxp`. + +* 2001-06-27 + ** Henry improved `wordAlign` -- this sped up GC by 27% (during a self + compile). + +* 2001-06-20 + ** Moved `MLton.random` to `MLton.Random.rand` and added other stuff to + `MLton.Random` + ** Added `MLton.TextIO.mkstemp`. + ** Made `Int.{div,quot}` respect the `-detect-overflow` switch. + +* 2001-06-20 + ** Added `MLton.Syslog`. + +* 2001-06-07 + ** Fixed bug in `MLton.Socket.accept` that was in the runtime implementation + `Socket_accept`. It did a `setsockopt SO_REUSEADDR` after the `accept`. It + should have been after the call to `socket` in `Socket_listen`. Thanks to + Doug Bagley for the fix. + +* 2001-05-30 + ** Fixed bug in remove-unused that caused polymorphic equality to return + `true` sometimes when constructors were never used in a pattern match. For + example, the following (in which `A` and `B` are not used as patterns): + + datatype t = A | B + datatype u = C of t + val _ = if C A = C B then raise Fail "bug" else () + +* 2001-03-27 + ** Fixed bug that caused all of the following to fail: + `{LargeWord,Word,SysWord}.{toLargeInt,toLargeIntX,fromLargeInt}` The problem + was the basis library file `integer/patch.sml` which fixed `Word32` but not + the other structures that are the same. + +* 2001-02-12 + ** Fixed bug in match compiler that caused it to spend a lot of extra time in + deep patterns. It still could be exponential however. Hopefully this will + get fixed in the release after next. This bug could cause very slow compile + times in some cases. Anyways, this fix cut the `finish infer` time of a self + compile down from 22 to under 4 seconds. I.E. most of the time used to be + spent due to this bug. + +* 2001-02-06 + ** Fixed bug in frontend that caused the wrong file and line number to be + reported with errors in functor bodys. + +* 2001-01-03 - 2000-02-05 + ** Changes to CoreML, XML, SXML, and CPS ILs to replace lists by vectors in + order to decrease space usage. + +* 2001-01-16 + ** Fixed a bug in constant propagation where the length of vectors was not + propagated properly. + +* 2000-12-11 - 2001-01-03 + ** Major rewrite of elaborator to use a single hash table for each namespace + instead of a hash table for every environment. + +* 2000-12-20 + ** Fixed some bugs in the SML/NJ compatibility library, + `src/lib/mlton-subs-in-smlnj`. + +* 2000-12-08 + ** More careful removal of tracing code when compiling `MLton_debug=0`. This + cut down self compile data size by 100k and compile time by a few seconds. + ** Added built in character and word cases propagated throughout all ILs. + +* 2000-12-06 + ** Added max stack size information to `gc-summary`. + +* 2000-12-05 + ** Added `src/benchmark`, which contains an SML program that benchmarks all of + the SML compilers I have my hands on. The script has lots of hardwired paths + for now. + +* 2000-12-04 + ** Fixed bug in `Posix.ProcEnv.environ,` which did not work correctly in a + saved world (the original `environ` was saved). In fact, it did not work at + all because the ML primitive expected a constant and the C was a nullary + function. This caused a segfault with any program using + `Posix.ProcEnv.environ`. + ** `Added MLton.ProcEnv.setenv`, since there doesn't seem to be any `setenv` + in the basis library. + +* 2000-11-29 + ** Changed backend so that it should no longer generate machine programs with + `void` operands. + ** Added `-detect-overflow` and `-safe` flags. + +* 2000-11-27 - 2000-11-28 + ** Changes in many places to use `List.revMap` instead of `List.map` to cut + down on allocation. + +* 2000-11-21 + ** Added `MLton.Word.~` and `MLton.Word8.~` to the `MLton` structure. + +* 2000-11-20 + ** Fixed a bug in the CPS shrinker that could cause a compile-time failure. + It was maintaining occurrence counts incorrectly. + +* 2000-11-15 + ** Fixed a (performance) bug in constant propagation that caused the hashing + to be bad. + ** Improved translation to XML so that the match compiler isn't called on + tuple or if expressions. This should speed up the translation and make the + output smaller. + ** Fixed a bug in the match compiler that caused it to not generate integer + case statements. This should speed up the mlyacc benchmark and the MLton + front end. + +* 2000-11-09 + ** Added `IntInf_equal` and `IntInf_compare` primitives. + ** Took out the automatic `-keep c` when compiling `-g`. + +* 2000-11-08 + ** Added a whole bunch of algebraic laws to the CPS shrinker, including some + specifically targeted to `IntInf` primitives. + +* 2000-11-03 + ** Improved implementation of properties so that sets don't allocate. + ** Improved implementation of type homomorphism in type inference. What was + there before appears to have been a bug -- it didn't use the property on + types. + +* 2000-11-02 + ** Fixed timers used with `-v` option to use user + sys time. + +* 2000-10-27 + ** Split the runtime basis library C files into many separate files so that + only the needed code would be included by the linker. + ** Fixed several bugs in the front end grammar and elaborator that caused type + specifications to be handled incorrectly. The following three programs used + to be handled incorrectly, but are now handled correctly. + + signature S = sig type t and u = int end (* reject *) + signature S = sig type t = int and u = t end (* accept *) + signature S = sig eqtype t and u = int end (* reject *) + +* 2000-10-25 + ** Changes to `main.sml` to run complete compiles with `-native` switch. + +* 2000-10-24 + ** Removed defunctorizer. + +* 2000-10-20 + ** Fixed bug in `cps-tree.fun` with `PrimExp.maySideEffect`. This bug could + cause `"no operand"` failures in the backend. + ** Fixed bug in the runtime implementation of `MLton.size`. The size for + stack objects was using the `used` instead of `reserved`, and so was too low. + +* 2000-10-19 + ** Replaced automatically generated dependencies in `src/runtime/Makefile` + with hand generated ones. Took out `make depend` from `src/Makefile`. `make + depend` was behaving really badly on RHAT 7.0. + ** Tweaked compiler to shorten width of C output lines to work around bug in + RHAT 7.0 `cpp` which silently truncates (very) long lines. + ** Fixed bug in grammar that didn't allow `op` to occur in datatype and + exception bindings, causing the following to fail + + datatype t = op T + exception op E = op Fail + + ** Improved error messages in CM processor. Fixed bug in CM Alias handling. + +* 2000-10-18 + ** Fixed two bugs in the gc that did comparisons with `(s->limit - + s->frontier)`, which of course doesn't work if `frontier` is beyond `limit`, + since these are unsigned. This could have caused segfaults, except that the + mutator checks the `frontier` upon return from the GC. + +* 2000-10-17 + ** Fixed bug in backend in the calculation of `maxFrameSize`. It could be + wrong (low) in some situations. + ** Improved CPS inliner's estimate of function sizes. The size of a function + now takes into account other inlined functions that the function calls. This + also changed the meaning of the size argument to the `-inline` switch. It now + corresponds (roughly) to the product of the size of the function and the + number of calls. In general, it should be larger than before. + +* 2000-10-13 + ** Made some calls to `Array.sub` unsafe in the implementation of `Array2`. + ** Integrated Matthew's new x86 backend with floating point support. + +* 2000-10-09 + ** Fixed CM file processor so that MLton works if it is run from a different + directory than the main CM file. + +* 2000-10-04 + ** Changed LimitCheck so it loops on the `frontier > limit` check. This fixed + a potential bug in threads caused when there is enough space available for a + thread, `t`, before switching to another thread but not enough space when it + resumes. This could have caused a segfault. + +* 2000-10-03 + ** More rewrites of `TextIO.StreamIO` to improve speed. + ** Changed `TextIO` so that only `TextIO.stdErr` is unbuffered. + ** Changed `TextIO` so that FIFOs and sockets are buffered. + +* 2000-10-02 + ** Combined remove-unused-constructors, remove-unused-functions, and + remove-unused-globals into a single pass that runs to fixed-point and produces + results at least as good as running the previous three in (any) sequence. + +* 2000-09-29 + ** Added `GC_FIRST_CHECK`, which does a gc at each limit check the first time + it reached. + ** Reimplemented `TextIO.StreamIO` (from 2000-09-12) to use lists of strings + instead of lists of characters so that the per char space overhead is small. + +* 2000-09-21 + ** Fixed bug in profiling labels in C code. The label was always the basic + block label instead of the cps function label. + ** Added `-b` switch to `mlprof` to gather data at the basic block level. + ** Improved performance of `TextIO.input1` by about 3X. + +* 2000-09-15 - 2000-09-19 + ** Added overflow exceptions to CPS and Machine ILs. + +* 2000-09-12 + ** Fixed `TextIO.scanStream`. It was very broken. + ** Added `TextIO.{getInstream,mkInstream,setInstream}` and + `TextIO.StreamIO.{canInput,closeIn,endOfStream,input1,input,inputAll,inputLine,inputN}`. + +* 2000-09-11 + ** Fixed `Real_qequal` in `mlton-lib.h`. It was missing a paren that caused + code using it to not even compile. It was also semantically incorrect. + ** Noted that `Real_{equal,lt,le,gt,ge}` may not follow basis library spec, + since ANSI does not require IEEE compliance, and hence these could return + wrong results when nans are involved. + + +== Version 20000906 + +Here are the changes from the 20000712 version to the 20000906 version. + +=== Summary + +* Version 20000906 is mostly a bugfix release over 20000712. The other major +changes are that `mllex` and `mlyacc` are now included and that `mlton` can now +process a limited subset of CM files as input. + +=== Details + +* 2000-09-06 + ** Fixed `Socket_listen` in `mlton-lib.c` so that it closes the socket if the + `bind`, `listen`, or `getsockname` fails. This could have caused a file + descriptor leak. + +* 2000-09-05 + ** Added `-static` commandline switch. + ** Changed default max heap size to .85 RAM from .95 RAM. + ** Added `PackRealLittle` structure to basis library. + +* 2000-08-25 + ** Added cases on integers to ILs (instead of using sequences of tests) so + that backend can emit more efficient test (jump table, binary tree, ...). + +* 2000-08-24 + ** Fixed bug in `gc.c`. `dfsInitializeStack` would `smummap` a `NULL` pointer + whenver `toSpace` was `NULL`. This could cause `MLton.size` to segfault. + ** Fixed bug in `Popt` that caused `-k` to fail with no keeps. + +* 2000-08-22 - 2000-08-23 + ** Ported `mllex` and `mlyacc` from SML/NJ + +* 2000-08-20 - 2000-08-21 + ** Added ability to use a `.cm` file as input to MLton. + +* 2000-08-16 + ** Ported `mlprof` to SML. + ** Fixed bug in `library/basic/assert.sml` that caused asserts to be run even + when `MLton.debug = false`. + +* 2000-08-15 + ** Fixed bug in backend -- computation of `maxFrameSize` was wrong. It didn't + count slots in frames that didn't make nontail calls. This could lead to the + stack being overwritten because a stack limit check didn't guarantee enough + space, and lead to a segfault. + ** Fixed bug in `gc.c` `newThreadOfSize`. If the thread allocation caused a + gc, then the stack wasn't forwarded, leading to a segfault. The solution was + to ensure enough memory all at once, and then fill in both objects. + +* 2000-08-14 + ** Changed limit checks so that checks < 512 bytes are replaced by a check for + 0 bytes. The runtime also moves the limit down by 512. This is done so that + the common case, a small limit check, has less code and is faster. + ** Fixed bug in `cps/cps-tree.fun`. `Program.hasPrim` returned `true` for any + program that had *any* primapp, not just programs satisfying the predicate. + This caused `cps/once.fun` to be overly conservative, since it thought that + every program used continuations. + +* 2000-08-10 + ** Fixed bug in CPS typechecker. It didn't enforce that handlers should be + defined before any reference to them -- including implicit references in + `HandlerPops`. This caused an evil bug in the liveness analysis where a + variable that was only live in the handler was missed in a continuation + because the liveness for the handler wasn't computed yet. + ** Limited the size for moving up limit checks for arrays whose size is known + at compile time to avoid huge limit checks getting moved into loops. + ** added `-indent`, `-kp`, `-show-types` switches. + ** Put optimization in CPS IL suggested by Neal Glew. It determines for each + toplevel function if it can raise an exception to its caller. Also, it + removes `HanderPush` and `HandlerPop` for handlers that are not on top of the + stack for any nontail call. + +* 2000-08-08 + ** Changed register allocator so that continuation formals can be allocated in + pseudo registers -- they aren't necessarily forced to the stack. + +* 2000-08-03 + ** Fixed bug in constant folding. `Word8.>>` had been used to implement + `Word8.~>>`. + ** Fixed bug in allocate registers that was not forcing the size argument to + `Primitive.Array.array` to be a stack slot. This could cause problems if + there was a thread switch in the limit check, since upon return the size + pseudo register would have a bogus value. + +* 2000-08-01 + ** Turned back on XML simplification after monomorphisation. + +* 2000-07-31 + ** Fixed bug in `MLton.Itimer.set` that caused the time to be doubled. + ** Fixed bug in `MLton.Thread` that made it look like asynchronous exceptions + were allowed by `throw`-ing an exception raising thunk to an interrupted + thread obtained via a signal handler. Attempting asynchronous exceptions will + now cause process death, with a helpful error message. + +* 2000-07-27 + ** Updated docs to include `structure World: MLTON_WORLD` in `MLton` + structure. + ** Added toplevel signatures `MLTON_{CONT, ..., WORLD}` to basis library. + ** Fixed broken link in docs to CM in `cmcat` section. + +* 2000-07-26 + ** Eliminated `GC_switchToThread` and `Thread_switchTo1`, since the inlined + version `Thread_switchTo` is all that's needed, and Matt's X86 backend now + handles it. + ** Added `MLton.Signal.vtalrm`, needed for `Itimer.Set{which = + Itimer.Virtual, ...}`. + +* 2000-07-25 + ** Added `MLton.Socket.shutdownWrite`. + +* 2000-07-21 + ** Updated `mlton-lib.c` `MLton_bug` with new email (MLton@sourcelight.com). + +* 2000-07-19 + ** Fixed `Posix.Process.kill` to check for errors. + +* 2000-07-18 + ** Fixed the following `Posix.ProcEnv` functions to check for errors: + `setgid`, `setpgid`, `setsid`, `setuid`. + ** Fixed `doc/examples/callcc.sml`. + + +== Version 20000712 + +Here are the changes from the 1999-07-12 to the 20000712 version. + +=== Details + +* 2000-06-10 - 2000-07-12 + ** Too many changes to count: bug fixes, new basis library modules, optimizer + improvements. + +* 2000-06-30 + ** Fixed bug in monomorphiser that caused programs with non-value carrying + exception declarations in polymorphic functions to have a compile-time error + because of a duplicate label. The problem was that the exception constructor + wasn't duplicated. + +* 2000-05-22 - 2000-06-10 + ** Finished the changes for the new CPS IL. + +* 2000-01-01 + ** Fixed some errors in the basis library: + *** `Real.copySign` + *** `Posix.FileSys.fpathconf` + *** `Posix.IO.{lseek, getlk, setlk, setlkw}` + *** `Posix.ProcEnv.setpgid` + *** `Posix.TTY.getattr` + *** `System.FileSys.realPath` + +* 1999-12-22 + ** Fixed bug in `src/closure-convert/abstract-value.fun` that caused a + compiler failure whenever a program had a vector where the element type + contained an `->`. + +* 1999-12-10 + ** Changed dead code elimination in `core-ml/dead-code.fun` so that wildcard + declarations (`val _ = ...`) in the basis are kept. Changed places in the + basis library to take advantage of this. + ** Added `setTopLevelHander` primitive so that the basis library code can + define the toplevel handler. + ** Changed `basis-library/misc/suffix.sml` to call `OS.Process.exit`. Took + out `Halt` transfer from CPS, since the program never should reach it. + ** Cleaned up `basis-library/system/{process.sml, unix.sml}` to use the new + signal handling stuff. + +* 1999-11-28 - 1999-12-20 + ** Added support for threads and cleaned up signal handling. This involved a + number of changes: + *** The stack is now allocated as just another kind of heap object. + *** Limit checks are inserted at all loop headers, whether or not there is + any allocation. This is to ensure that the signal handler always has a + chance to get called. + *** The register allocator puts more variables in stack slots. The new rule + is that a variable goes in a stack slot if it is ever live across a nontail + call, in a handler, or (this is the new part) across a limit check. + *** Arguments are passed on the stack, with the convention determined by + argument types. + *** The "locals" array of pointers that was copied to/from for GC is now + gone, because no registers (in particular no pointer valued registers) can + be live at a limit check point. + +* 1999-11-21 + ** Runtime system + *** Fixed a bug introduced by the signal code (presumably on 1999-08-09) + that caused a gc to *not* be performed when doing a save world. This caused + the heaps created by save world to be the same size as the heap -- not the + live data. This was quite bad. + *** Cleaned up the `Makefile`. Add make depend. + *** Added max gc pause to `gc-summary` info. + *** Move heap translation variables that had been file statics into the + `GC_state`. + ** Made `structure Position` available at toplevel. + ** Basis Library + *** Added `MLton.loadWorld` + ** Added `Primitive.usesCallcc` + ** Added `Primitive.safe` + ** Removed special size functions from `cps/save-world` -- they are no longer + necessary since size doesn't do a gc. + ** Fixed another (sigh) bug in `cps/simplify-types.fun` that could cause it to + not terminate. + +* 1999-11-16 + ** Cleaned up `backend/machine.fun` a bit so that it spits out macros for + allocation of objects and bumping of frontier. Added macros `MLTON_object` + and `MLTON_incFrontier` to `include/mlton-lib.h`. + ** Fixed a bug in `backend/limit-check.fun` that caused loops to not be + detected if they were only reached by a case branch. This could cause there + to be loop that allocates with no limit check. Needless to say, this could + cause a segfault if the loop ran for long enough. + +* 1999-10-18 + ** Added basis library function `Array2.copy`. + +* 1999-08-15 + ** Turned off globalization of ref cells (`closure-convert/globalize.fun`) + because it interacts badly with serialization. + +* 1999-08-13 + ** Fixed bug in `mlton-lib.h` in `MLTON_allocArrayNoPointers` that was + triggered when `bytesPerElt == 0`. The problem was that it wasn't reserving + space for the forwarding pointer. This could cause a segfault. + +* 1999-08-08 and 1999-08-09 + ** Added support for signal handling. + +* 1999-08-07 + ** Fixed bugs in `Array.tabulate` (and other `tabulate` variants) caused if + the function argument used `callcc`. + +* 1999-08-01 + ** Added serialization, which was mostly code in `src/runtime/gc.c`. + + `GC_serialize` converts an object to a `Word8Vector.vector`. + + `GC_deserialize` undoes the conversion. + (de)Serialization should work for + all objects except for functions, because I haven't yet added the support in + the flow analysis. + +* 1999-07-31 + ** Cleaned up the GC. Changed headers, by stealing a bit from the number of + non pointers and making it a mark bit (used in `GC_size`). + ** Rewrote `GC_size` so that it runs in time proportional to the number of + pointers in the object. It does a depth-first-search now, using toSpace to + hold the stack. + +* 1999-07-30 + ** Fixed bug in `SUBSTRING`. `getc` had the wrong type. This bug wasn't + noticed because MLton doesn't do enough type checking. + ** Fixed bug (segfault) caused when a GC immediately followed a throw. + +* 1999-07-29 + ** Fixed bug in `Date.fmt` (`basis-library/system/date.sml`). It was not + setting `Tm.buf`, and hence the time was always 0 unless there had been a + previous call to `setTmBuf`. + +* 1999-07-28 + ** Fixed bugs in `Posix.IO.FLock.{getlk,setlk,setlkw}`, which would cause + compilation to fail because `FLock.toInt` was defined as the C `castInt`, + which no longer exists. Instead, expand `FLock.toInt` to + `MLTON_pointerToInt`, which was added to `include/mlton-lib.h`. + ** Changed `Posix.Primitive.Flock` to `Posix.Primitive.FLock`. + ** Added `MLTON_chown`, `MLTON_ftruncate` to `include/mlton-posix.h`. They + were missing. This would cause compilation of any program using + `Posix.FileSys.{chown,ftruncate}` to fail. Also made it so all of the + primitives in `basis-library/posix/primitive.sml` use `MLTON_` versions of + functions, even if a wrapper is unnecessary. + +* 1999-07-25 + ** Added some other missing signature definitions to toplevel. + +* 1999-07-24 + ** Added missing `OS_*` signature definitions to + `basis-library/top-level/top-level.sml`. + +* 1999-07-19 + ** Fixed bug in `basis-library/arrays-and-vectors/mono-array.sml`. Used `:>` + instead of `:` so that the monomorphic array types are abstract. + + +== Version 19990712 + +Here are the changes from the 1999-03-19 version to the 1999-07-12 version. + +=== Details + +* 1999-07-12 + ** Changed `src/backend/machine.fun` so that the 'pointer locals' array is + only as large as neccessary in order to copy all pointer-valued locals, not as + large as the number of pointer-valued locals. + +* 1999-07-11 + ** Rewrote `src/backend/allocate-registers.fun` so that it does a better job + of sharing "registers" (i.e. C local variables) and stack slots. This should + cut down on the amount of copying that has to happen before and after a gc. + It should also cut down on the size of stack slots. + +* 1999-07-10 + ** Fixed a bug in `src/backend/parallel-move.fun` that should have been + triggered on most any parallel move. I guess parallel moves almost never + happened due to the old register allocation strategy -- but, with the new one + (see note for 1999-07-12) parallel moves will be frequent. + +* 1999-06-27 + ** Fixed `src/main.sml` so that when compiling `-p`, the `.c` file is compiled + `-g` and the `.o` is linked `-p`. + ** In `bakend/machine.fun`, added profiling comments before chunkswitches and + put in an optimization to avoid printing repeated profiling comments. Also, + profiling comments are only output when compiling `-p`. + +* 1999-06-17 + ** Changed `-i` to `-inline`, `-f` to `-flatten`, `-np` to `-no-polyvariance`, + `-u` to `-unsafe`. + ** Added `-i`, `-I`, `-l`, `-L` flags for includes and libraries. + ** Updated documentation for these options and for ffi. + +* 1999-06-16 + ** Hardwired version number in `src/control/control.sml`. As it stood, the + version number was computed when MLton was built after someone downloaded it, + which was clearly wrong. + +* 1999-06-16 + ** Fixed undefined variable `time` in `GC_done` in `src/runtime/gc.c`. + +* 19990-06-08 + ** in `include/mlton-lib.h`: + *** removed `#include ` + *** added `#include ` + *** and deleted all of the function signatures I had copied from `math.h` + ** Changed `Real.{minNormalPos, minPos, maxFinite}` so that they are computed + in `real.sml` instead of appearing as constants in the C. + +* 1999-06-07 + `IntInf.pow` added to basis library. + +* 1999-06-04 + ** `bin/mlton` changed to use `.arch-n-opsys` if it exists. + +* 1999-06-03 + ** `src/Makefile` changed to use `sml-cm` instead of `sml` + +* 1999-05-10 + ** Patch to `src/atoms/small-int-inf.fun` to work around a bug in the SML/NJ + implementation of bignums. This bug was causing some hex bignum constants to + be lexed incorrectly. + +* 1999-04-15 + ** Comments emitted in C code for profiling. The comments identify the CPS + function responsible for each C statement. + +* 1999-04-15 + ** `callcc` and `throw` added. + +* 1999-04-15 + ** Bug in `src/cps/simplify-types` fixed. The bug caused nontermination + whenever there was a circular datatype with a vector on the rhs. + E.g. `datatype t = T of t vector` + + +== Version 19990319 + +Here are the changes from the 1998-08-26 version to the 1999-03-19 version. + +=== Summary + +* Compile time and code size have decreased. +* Runtime performance of executables has improved. +* Large programs can now be compiled. +* MLton is self hosting. +* The basis library is mostly complete and many bugs have been fixed. +* The monomorphiser (`-m`) is no longer available. +* The heap and stack are automatically resized. +* There are now facilities for heap checkpointing (`MLton.saveWorld`) and object +size computation (`MLton.size`). +* MLton uses the GNU multiprecision (GnuMP) library to provide a fast +implementation of `IntInf`. diff -Nru mlton-20130715/debian/changelog mlton-20210117+dfsg/debian/changelog --- mlton-20130715/debian/changelog 2016-12-18 21:48:17.000000000 +0000 +++ mlton-20210117+dfsg/debian/changelog 2022-01-04 23:38:53.000000000 +0000 @@ -1,3 +1,96 @@ +mlton (20210117+dfsg-3) unstable; urgency=medium + + * Replace build-depends-arch on mlton with mlton-compiler and mlton-tools to + avoid pulling in mlton-doc + * Drop version in mlton's recommends of mlton-doc + * Make mlton-basis Arch: any instead of Arch: all. This avoids race + conditions on buildds, where mlton-compiler sometimes became uninstallable + if the new mlton-basis package got built before mlton-compiler on a given + architecture, thereby making the previous version of mlton-compiler + uninstallable. This then required manually rebootstrapping the + architecture. + + The build-indep target in debian/rules now only builds documentation + + Drop 09_install-indep.diff, no longer needed + + Transition versioned dependencies on mlton-basis from + (= ${source:Version}) to (= ${binary:Version}) + + -- Ryan Kavanagh Tue, 04 Jan 2022 18:38:53 -0500 + +mlton (20210117+dfsg-2) unstable; urgency=medium + + * Move libgmp-dev to build-depends to fix binary-all builds + * Drop dblatex build-dependency while we are not building the guide + + -- Ryan Kavanagh Tue, 04 Jan 2022 13:37:28 -0500 + +mlton (20210117+dfsg-1) unstable; urgency=medium + + * New upstream release (Closes: #992099) + * Repack sources to remove non-DFSG files (Closes: #998156) + + Extract and apply upstream patches to all nested tarballs while we are + at it + + Patch sources to handle missing non-DFSG-free files, 07_DFSG.diff + + Disable installing mlnlffigen: it requires non-DFSG-free ckit-lib to build + * Changes to patches: + + Drop ppc64el.patch: applied upstream + + Drop linux-pic.diff: no longer needed to successfully compile on amd64 + * Drop stack-hardening.diff: pass in flags via debian/rules instead + + Rename patches to make application order obvious + + Add DEP3 headers to all patches + * Overhaul control file: + + Move Homepage field from binary stanzas to source stanza + + Use substvars to eliminate description duplication + + Split Build-Depends into Build-Depends-Arch/Build-Depends-Indep + + Drop alternative dependency on mlton-runtime, which has not existed + since forever + + Drop build-dependency on quilt and on procps + + Drop breaks against mlton version now in oldoldoldstable + + Added Vcs-* tags + + Drop versioned Build-Depends-Arch on binutils and gcc for mips/mipsel: + no longer needed + + Set Rules-Requires-Root: no + + Bump standards version to 4.6.0 + * Changes to documentation: + + Updated README.Debian to reflect current mlton requirements + + Added a README.source to describe repacking and bootstrapping process + * Set myself as maintainer (Closes: #995467) + * Documentation-related changes: + + The mlton guide does not currently build. Temporarily disable building + it for the sake of getting a working mlton compiler back in the archive + + Temporarily disable installation of mllex and mlyacc guides + + Documentation requires a build-dependency on python3-pygments instead of + python-pygments (Closes: #943118) + + Reintroduce build-dependency on dblatex + + Install upstream changelog and readme. + * Changes to package build process: + + Switch from CDBS to debhelper + + Set compat to 13 via debhelper-compat + + Don't fetch resources from Github during build, 06_local_docs.diff + + Remember to clean generated files under .cm/ + + Don't automatically run tests during build, 08_postpone_tests.diff + + Add target to install arch-indep libraries, 09_install-indep.diff, and + call it from rules + + dh_missing should ignore + - files for arch-dependent packages when building + arch-independent packages + - upstream license files usr/share/doc/mlton/license/* + * Update copyright file and switch to DEP5 format + + -- Ryan Kavanagh Tue, 04 Jan 2022 09:12:48 -0500 + +mlton (20180207-1) unstable; urgency=low + + * New upstream release; new build-depends: + * changed from htmldoc to python-pygments + * changed from imagemagick to graphicsmagick + * removed dblatex, ruby-albino, librsvg2-bin + * Bump debhelper compat to 10 (cdbs broken with 11/12) + * Bump standards version to 4.1.4 + * mlton now only recommends mlton-doc + * Added riscv64 port + + -- Wesley W. Terpstra Tue, 10 Apr 2018 13:38:06 -0700 + mlton (20130715-3) unstable; urgency=low * Build-depend only on mlton-compiler and mlton-tools diff -Nru mlton-20130715/debian/clean mlton-20210117+dfsg/debian/clean --- mlton-20130715/debian/clean 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/clean 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1 @@ +lib/mllpt-lib/ml-lpt/lib/.cm/ diff -Nru mlton-20130715/debian/compat mlton-20210117+dfsg/debian/compat --- mlton-20130715/debian/compat 2016-12-09 10:11:32.000000000 +0000 +++ mlton-20210117+dfsg/debian/compat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -9 diff -Nru mlton-20130715/debian/control mlton-20210117+dfsg/debian/control --- mlton-20130715/debian/control 2016-12-18 21:48:17.000000000 +0000 +++ mlton-20210117+dfsg/debian/control 2022-01-04 23:38:53.000000000 +0000 @@ -1,43 +1,54 @@ Source: mlton Section: devel Priority: optional -Maintainer: Wesley W. Terpstra -Build-Depends: mlton-compiler, mlton-tools, libgmp-dev, htmldoc, texlive-latex-base, procps, debhelper (>= 9.0.0), cdbs (>= 0.4.52), quilt, binutils (>= 2.21.51.201104) [mips mipsel], gcc (>= 4:4.6.0-5) [mips mipsel], asciidoc, dblatex, ruby-albino, imagemagick, librsvg2-bin -Standards-Version: 3.9.8 +Maintainer: Ryan Kavanagh +Build-Depends: + debhelper-compat (= 13), + libgmp-dev, +Build-Depends-Arch: + dh-exec, + mlton-compiler, + mlton-tools, +Build-Depends-Indep: + asciidoc, + graphicsmagick, + python3-pygments, +Homepage: http://mlton.org/ +Standards-Version: 4.6.0 +Description: Optimizing compiler for Standard ML + MLton is a whole-program optimizing compiler for Standard ML. + MLton generates standalone executables with excellent runtime + performance, is SML 97 compliant, and has a complete basis + library. MLton has source-level profiling, a fast C FFI, an + interface to the GNU multiprecision library, and lots of useful + libraries. +Vcs-Browser: https://salsa.debian.org/debian/mlton +Vcs-Git: https://salsa.debian.org/debian/mlton.git -b debian/unstable +Rules-Requires-Root: no Package: mlton Architecture: all Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-compiler (>= ${source:Version}), mlton-compiler (<< ${source:Version}.1~), mlton-tools (>= ${source:Version}), mlton-tools (<< ${source:Version}.1~), mlton-doc (= ${source:Version}) -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-compiler (<< ${source:Version}.1~), + mlton-compiler (>= ${source:Version}), + mlton-tools (<< ${source:Version}.1~), + mlton-tools (>= ${source:Version}), + ${misc:Depends}, +Recommends: + mlton-doc +Description: ${source:Synopsis} + ${source:Extended-Description} . This metapackage depends on all MLton packages. Package: mlton-basis -Architecture: all +Architecture: any Multi-Arch: foreign -Depends: ${misc:Depends} -Breaks: mlton (<< 20100608-3) -Replaces: mlton (<< 20100608-3) -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - basis library - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + ${misc:Depends}, +Description: ${source:Synopsis} - basis library + ${source:Extended-Description} . This package includes the cross-platform basis. @@ -45,360 +56,267 @@ Section: doc Architecture: all Multi-Arch: foreign -Depends: ${misc:Depends} -Breaks: mlton (<< 20100608-3) -Replaces: mlton (<< 20100608-3) -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - documentation - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + ${misc:Depends}, +Description: ${source:Synopsis} - documentation + ${source:Extended-Description} . This package includes non-man-page documentation. Package: mlton-compiler -Architecture: alpha amd64 arm64 armel armhf hppa i386 kfreebsd-i386 kfreebsd-amd64 mips64el mips mipsel powerpc ppc64el s390x sparc +Architecture: alpha amd64 arm64 armel armhf hppa i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el riscv64 s390x sparc Multi-Arch: foreign -Depends: ${shlibs:Depends}, ${misc:Depends}, gcc, libc6-dev, libgmp-dev, mlton-basis (= ${source:Version}), mlton-runtime-native (= ${binary:Version}) | mlton-runtime -Breaks: mlton (<< 20100608-3) -Replaces: mlton (<< 20100608-3) -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - compiler - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + gcc, + libc6-dev, + libgmp-dev, + mlton-basis (= ${binary:Version}), + mlton-runtime-native (= ${binary:Version}), + ${misc:Depends}, + ${shlibs:Depends}, +Description: ${source:Synopsis} - compiler + ${source:Extended-Description} . This package includes the compiler itself. Package: mlton-tools -Architecture: alpha amd64 arm64 armel armhf hppa i386 kfreebsd-i386 kfreebsd-amd64 mips64el mips mipsel powerpc ppc64el s390x sparc +Architecture: alpha amd64 arm64 armel armhf hppa i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el riscv64 s390x sparc Multi-Arch: foreign -Depends: ${shlibs:Depends}, ${misc:Depends} -Breaks: mlton (<< 20100608-3) -Replaces: mlton (<< 20100608-3) -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - tools - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + ${misc:Depends}, + ${shlibs:Depends}, +Description: ${source:Synopsis} - tools + ${source:Extended-Description} . This package includes tools which autogenerate SML. Package: mlton-runtime-native -Architecture: alpha amd64 arm64 armel armhf hppa i386 kfreebsd-i386 kfreebsd-amd64 mips64el mips mipsel powerpc ppc64el s390x sparc -Depends: ${misc:Depends}, mlton-runtime-alpha-linux-gnu (= ${binary:Version}) [alpha] | mlton-runtime-x86-64-linux-gnu (= ${binary:Version}) [amd64] | mlton-runtime-aarch64-linux-gnu (= ${binary:Version}) [arm64] | mlton-runtime-arm-linux-gnueabi (= ${binary:Version}) [armel] | mlton-runtime-arm-linux-gnueabihf (= ${binary:Version}) [armhf] | mlton-runtime-hppa-linux-gnu (= ${binary:Version}) [hppa] | mlton-runtime-i486-linux-gnu (= ${binary:Version}) [i386] | mlton-runtime-i486-kfreebsd-gnu (= ${binary:Version}) [kfreebsd-i386] | mlton-runtime-x86-64-kfreebsd-gnu (= ${binary:Version}) [kfreebsd-amd64] | mlton-runtime-mips64el-linux-gnuabi64 (= ${binary:Version}) [mips64el] | mlton-runtime-mips-linux-gnu (= ${binary:Version}) [mips] | mlton-runtime-mipsel-linux-gnu (= ${binary:Version}) [mipsel] | mlton-runtime-powerpc-linux-gnu (= ${binary:Version}) [powerpc] | mlton-runtime-powerpc64le-linux-gnu (= ${binary:Version}) [ppc64el] | mlton-runtime-s390x-linux-gnu (= ${binary:Version}) [s390x] | mlton-runtime-sparc-linux-gnu (= ${binary:Version}) [sparc] -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - native runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Architecture: alpha amd64 arm64 armel armhf hppa i386 kfreebsd-amd64 kfreebsd-i386 mips mips64el mipsel powerpc ppc64el riscv64 s390x sparc +Depends: + mlton-runtime-alpha-linux-gnu (= ${binary:Version}) [alpha] | mlton-runtime-x86-64-linux-gnu (= ${binary:Version}) [amd64] | mlton-runtime-aarch64-linux-gnu (= ${binary:Version}) [arm64] | mlton-runtime-arm-linux-gnueabi (= ${binary:Version}) [armel] | mlton-runtime-arm-linux-gnueabihf (= ${binary:Version}) [armhf] | mlton-runtime-hppa-linux-gnu (= ${binary:Version}) [hppa] | mlton-runtime-i486-linux-gnu (= ${binary:Version}) [i386] | mlton-runtime-i486-kfreebsd-gnu (= ${binary:Version}) [kfreebsd-i386] | mlton-runtime-x86-64-kfreebsd-gnu (= ${binary:Version}) [kfreebsd-amd64] | mlton-runtime-mips64el-linux-gnuabi64 (= ${binary:Version}) [mips64el] | mlton-runtime-mips-linux-gnu (= ${binary:Version}) [mips] | mlton-runtime-mipsel-linux-gnu (= ${binary:Version}) [mipsel] | mlton-runtime-powerpc-linux-gnu (= ${binary:Version}) [powerpc] | mlton-runtime-powerpc64le-linux-gnu (= ${binary:Version}) [ppc64el] | mlton-runtime-s390x-linux-gnu (= ${binary:Version}) [s390x] | mlton-runtime-sparc-linux-gnu (= ${binary:Version}) [sparc], + ${misc:Depends}, +Description: ${source:Synopsis} - native runtime libraries + ${source:Extended-Description} . This metapackage depends on native target libraries. Package: mlton-runtime-alpha-linux-gnu Architecture: alpha Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - alpha runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides alpha target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-x86-64-linux-gnu Architecture: amd64 Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - amd64 runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides x86-64 target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-aarch64-linux-gnu Architecture: arm64 Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - arm64 runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides arm64 target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-arm-linux-gnueabi Architecture: armel Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - armel runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides arm target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-arm-linux-gnueabihf Architecture: armhf Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - armhf runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides armhf target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-hppa-linux-gnu Architecture: hppa Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - hppa runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides hppa target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-i486-linux-gnu Architecture: i386 Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - i386 runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides i486 target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-i486-kfreebsd-gnu Architecture: kfreebsd-i386 Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - kfreebsd-i386 runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides kfreebsd i386 target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-x86-64-kfreebsd-gnu Architecture: kfreebsd-amd64 Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - kfreebsd-amd64 runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides kfreebsd amd64 target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-mips64el-linux-gnuabi64 Architecture: mips64el Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - mips64el runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides mips64el target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-mips-linux-gnu Architecture: mips Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - mips runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides mips target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-mipsel-linux-gnu Architecture: mipsel Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - mipsel runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides mipsel target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-powerpc-linux-gnu Architecture: powerpc Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - powerpc runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides powerpc target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-powerpc64le-linux-gnu Architecture: ppc64el Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - ppc64el runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} + . + This package provides ${Arch} target libraries. + +Package: mlton-runtime-riscv64-linux-gnu +Architecture: riscv64 +Multi-Arch: foreign +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides ppc64el target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-s390x-linux-gnu Architecture: s390x Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - s390x runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides s390x target libraries. + This package provides ${Arch} target libraries. Package: mlton-runtime-sparc-linux-gnu Architecture: sparc Multi-Arch: foreign -Depends: ${misc:Depends}, mlton-basis (= ${source:Version}) -Provides: mlton-runtime -Homepage: http://mlton.org/ -Description: Optimizing compiler for Standard ML - sparc runtime libraries - MLton is a whole-program optimizing compiler - for Standard ML. MLton generates standalone - executables with excellent runtime performance, - is SML 97 compliant, and has a complete basis - library. MLton has source-level profiling, - a fast C FFI, an interface to the GNU - multiprecision library, and lots of useful - libraries. +Depends: + mlton-basis (= ${binary:Version}), + ${misc:Depends}, +Provides: + mlton-runtime, +Description: ${source:Synopsis} - ${Arch} runtime libraries + ${source:Extended-Description} . - This package provides sparc target libraries. + This package provides ${Arch} target libraries. diff -Nru mlton-20130715/debian/copyright mlton-20210117+dfsg/debian/copyright --- mlton-20130715/debian/copyright 2016-12-09 10:11:32.000000000 +0000 +++ mlton-20210117+dfsg/debian/copyright 2022-01-04 20:01:30.000000000 +0000 @@ -1,106 +1,280 @@ -Now maintained by Wesley W. Terpstra . -This package was debianized by Stephen Weeks . -The original debianization was done by Barak Pearlmutter . - -Upstream Authors: - - See http://mlton.org/Developers - - To send a comment, question, or bug report to MLton's authors, use - MLton@mlton.org. - -MLton's copyright is held in part by the NEC Research Institute. It -is released under a BSD-style license. - - MLton COPYRIGHT NOTICE, LICENSE AND DISCLAIMER. - - Copyright (C) 1999-2009 Henry Cejtin, Matthew Fluet, Suresh - Jagannathan, and Stephen Weeks. - Copyright (c) 1997-2000 by the NEC Research Institute - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both the copyright notice and this permission notice and warranty - disclaimer appear in supporting documentation, and that the name of - NEC, or any NEC entity not be used in advertising or publicity - pertaining to distribution of the software without specific, written - prior permission. - - The above copyright holders disclaim all warranties with regard to - this software, including all implied warranties of merchantability and - fitness. In no event shall the above copyright holders be liable for - any special, indirect or consequential damages or any damages - whatsoever resulting from loss of use, data or profits, whether in an - action of contract, negligence or other tortious action, arising out - of or in connection with the use or performance of this software. - -The following portions of the software are derived from the Standard ML -of New Jersey compiler: - - front-end mllex specification, front-end mlyacc specification, - precedence parser, CM lexer and parser - -Parts of MLton's Basis Library are derived from the following portions -of the Basis Library code of the SMLNJ compiler: - - OS.IO, Posix.IO, Process, and Unix - -The following utilities and libraries are derived from the SMLNJ system: - - mllex, mlyacc and MLYacc Library, Concurrent ML Library, SML/NJ - Library, CKit Library, mlnlffigen and MLNLFFI Library - -SMLNJ's copyright is held by Lucent Technologies. It was released -under a BSD-style license. - - STANDARD ML OF NEW JERSEY COPYRIGHT NOTICE, LICENSE AND DISCLAIMER. - - Copyright (c) 1989-1998 by Lucent Technologies - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose and without fee is hereby granted, - provided that the above copyright notice appear in all copies and that - both the copyright notice and this permission notice and warranty - disclaimer appear in supporting documentation, and that the name of - Lucent Technologies, Bell Labs or any Lucent entity not be used in - advertising or publicity pertaining to distribution of the software - without specific, written prior permission. - - Lucent disclaims all warranties with regard to this software, - including all implied warranties of merchantability and fitness. In no - event shall Lucent be liable for any special, indirect or - consequential damages or any damages whatsoever resulting from loss of - use, data or profits, whether in an action of contract, negligence or - other tortious action, arising out of or in connection with the use - or performance of this software. - -Parts of MLton's Basis Library are derived from the following portions -of the Basis Library code of the ML Kit compiler: - - Path, Time, and Date - -The ML Kit Basis Bibrary is distributed under the MIT License. - - Copyright (c) 2004 IT University of Copenhagen - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: mlton +Source: https://github.com/MLton/mlton +Files-Excluded: + benchmark/tests/DATA/chess.gml + benchmark/tests/md5.sml + benchmark/tests/zern.sml + lib/smlnj-lib/smlnj-lib/HTML4/tests/ + mlyacc/examples/pascal/test/c1.p + mlyacc/examples/pascal/test/t1.p + package/ +Comment: + License files can be found under `doc/license`. + . + The tarball has been repacked to remove non-free files and to unpack + the nested tarballs found in lib/. See `debian/README.source' for + details. + . + We exclude the following files because they are not DFSG-free: + * lib/smlnj-lib/smlnj-lib/HTML4/tests/*: licensed under CC-BY-SA 2.5. + . + We exclude tho following files because they are not obviously DFSG-free: + * benchmark/tests/DATA/chess.gml: + Copyright Leif Kornstaedt, 2000 + Taken from https://www.ps.uni-saarland.de/helikopter/2000/ ? + * benchmark/tests/md5.sml: + Copyright (C) 2001 Daniel Wang. All rights reserved. + * benchmark/tests/zern.sml + COPYRIGHT (c) 1998 D.McClain/MCFA + * mlyacc/examples/pascal/test/c1.p, mlyacc/examples/pascal/test/t1.p: + Copyright K. Steiglitz, 1988 + See https://bugs.debian.org/998156 for a discussion of these exclusions. + . + We exclude the following files because they are unneeded and complicate + tracking of copyright information: + * package/: + Contains subdirectories with Debian packaging dating back to 2011, + mingw packaging from 2005, etc. + +Files: * +Copyright: + 1989-1992 Andrew W. Appel + 1989-1992 David R. Tarditi + 1989-1992 James S. Mattson + 1989-1998 AT&T Bell Laboratories + 1989-2002 Lucent Technologies + 1989-2020 John Reppy + 1996 AT&T Research + 1997-2000 NEC Research Institute + 1997-2002 Bell Labs, Lucent Technologies. + 1999-2021 Henry Cejtin + 1999-2021 Matthew Fluet + 1999-2021 Stephen Weeks + 1999-2021 Suresh Jagannathan + 2001-2002 Bell Laboratories + 2004-2009 David M. Gay + 2004-2021 The Fellowship of SML/NJ + 2005-2008 Vesa Karvonen + 2009 Wesley W. Terpstra + 2013-2014 Brian Leibig + 2014 Rob Simmons + 2016 Matthew Surawski + 2018-2019 Jason Carr +License: HPND +Comment: + Files with an AT&T Bell Laboratories copyright holder are adapted from the + SML/NJ sources. Many refer to the file COPYRIGHT in the SML/NJ sources or + to the file mosml/copyrght/copyrght.att in the Moscow ML sources for license + details. These two files contains the HPND license, subject to replacing "the + above copyright holders" by "AT&T" throughout. Files by Appel, Tarditi, and + Mattson are distributed under the "PRINCETON STANDARD ML SOFTWARE LIBRARY + COPYRIGHT NOTICE, LICENSE AND DISCLAIMER", which is similarly identical to the + HPND license. + +Files: debian/* +Copyright: + 2001-2002 Barak Pearlmutter + 2002-2007 Stephen Weeks + 2009-2018 Wesley W. Terpstra + 2021-2022 Ryan Kavanagh +License: BSD-2-clause +Comment: + Contributions by Barak Pearlmutter, Stephen Weeks, and Wesley W. Terpstra were + not explicitly licensed and are assumed to be under the same terms as the + package itself. + +Files: + benchmark/tests/hamlet.sml + benchmark/tests/model-elimination.sml + lib/smlnj-lib/smlnj-lib/Util/binary-map-fn.sml + lib/smlnj-lib/smlnj-lib/Util/binary-set-fn.sml + lib/smlnj-lib/smlnj-lib/Util/int-binary-map.sml + lib/smlnj-lib/smlnj-lib/Util/int-binary-set.sml +Copyright: + 1992 Stephen Adams + 1992-1993 AT&T Bell Laboratories + 2002 Joe Hurd + 2002-2005 Stephen Weeks + 2012-2020 The Fellowship of SML/NJ + 2014 Matthew Fluet +License: HPND and Adams +Comment: + These files are adapted from the SML/NJ sources. + +Files: + benchmark/tests/tensor.sml +Copyright: + Juan Jose Garcia Ripoll + 2002-2005 Stephen Weeks + 2002 Matthew Fluet +License: HPND and BSD-4-clause + +Files: + lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.fun + lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.sig + lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.sml +Copyright: + 2018 John Reppy +License: MIT + +Files: + regression/parse.sml +Copyright: + 2000 ANOQ of the Sun (alias Johnny Andersen) +License: LGPL-2+ with ml exception + +Files: + runtime/platform/android_ucontext.h +Copyright: + 2009 Google Inc. +License: BSD-3-clause + +License: Adams + This software may be used freely provided that: + 1. This copyright notice is attached to any copy, derived work, + or work including all or part of this software. + 2. Any derived work must contain a prominent notice stating that + it has been altered from the original. + +License: BSD-2-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License: BSD-3-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + . + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + +License: BSD-4-clause + Redistribution and use in source and binary forms, with or + without modification, are permitted provided that the following + conditions are met: + . + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + . + 3. All advertising materials mentioning features or use of this + software must display the following acknowledgement: + This product includes software developed by Juan Jose + Garcia Ripoll. + . + 4. The name of Juan Jose Garcia Ripoll may not be used to endorse + or promote products derived from this software without + specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY JUAN JOSE GARCIA RIPOLL ``AS IS'' + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL HE BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + +License: HPND + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, provided that + the above copyright notice appear in all copies and that both the copyright + notice and this permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the above copyright holders, or their + entities, not be used in advertising or publicity pertaining to distribution of + the software without specific, written prior permission. + . + The above copyright holders disclaim all warranties with regard to this + software, including all implied warranties of merchantability and fitness. In + no event shall the above copyright holders be liable for any special, indirect + or consequential damages or any damages whatsoever resulting from loss of use, + data or profits, whether in an action of contract, negligence or other tortious + action, arising out of or in connection with the use or performance of this + software. + +License: LGPL-2+ with ml exception + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + . + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + . + As a special exception, if you do not do anything which is not in + the spirit of the GNU Library General Public License, you are not + required to physically compile this software into a separate library, + since this is generally not possible with current Stanard ML compilers. + However if you do something which is not in the spirit of the + GNU Library General Public License you will have to follow the + licence perpetually - thus disallowing you to use it for any + commercial purposes at all. + . + On Debian systems, the full text of the GNU Lesser General Public + License version 2 can be found in the file + `/usr/share/common-licenses/LGPL-2'. + +License: MIT + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. diff -Nru mlton-20130715/debian/gbp.conf mlton-20210117+dfsg/debian/gbp.conf --- mlton-20130715/debian/gbp.conf 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/gbp.conf 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1,9 @@ +[DEFAULT] +debian-branch = debian/unstable +dist = DEP14 +pristine-tar = False +sign-tags = True + +[dch] +# include information from meta tags: +meta = True diff -Nru mlton-20130715/debian/mlton-basis.install mlton-20210117+dfsg/debian/mlton-basis.install --- mlton-20130715/debian/mlton-basis.install 2011-03-20 13:08:28.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-basis.install 2022-01-04 20:01:30.000000000 +0000 @@ -1,4 +1,2 @@ usr/lib/mlton/include -usr/lib/mlton/mlb-path-map usr/lib/mlton/sml -usr/share/doc/mlton/basis diff -Nru mlton-20130715/debian/mlton-compiler.install mlton-20210117+dfsg/debian/mlton-compiler.install --- mlton-20130715/debian/mlton-compiler.install 2016-12-09 10:11:32.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-compiler.install 2022-01-04 20:01:30.000000000 +0000 @@ -1,6 +1,4 @@ usr/bin/mlton usr/lib/mlton/mlton-compile usr/lib/mlton/static-library -usr/lib/mlton/platform -usr/lib/mlton/targets/self usr/share/man/man1/mlton.1.gz diff -Nru mlton-20130715/debian/mlton-compiler.links mlton-20210117+dfsg/debian/mlton-compiler.links --- mlton-20130715/debian/mlton-compiler.links 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-compiler.links 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} usr/lib/mlton/targets/self diff -Nru mlton-20130715/debian/mlton-doc.install mlton-20210117+dfsg/debian/mlton-doc.install --- mlton-20130715/debian/mlton-doc.install 2011-03-20 22:33:37.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-doc.install 2022-01-04 20:01:30.000000000 +0000 @@ -1,9 +1,6 @@ +#usr/share/doc/mlton/mlton-guide.pdf +usr/share/doc/mlton/CHANGELOG.adoc +usr/share/doc/mlton/README.adoc +usr/share/doc/mlton/cm2mlb usr/share/doc/mlton/examples usr/share/doc/mlton/guide -usr/share/doc/mlton/cmcat -usr/share/doc/mlton/cm2mlb -usr/share/doc/mlton/ckit-lib -usr/share/doc/mlton/mlnlffi-lib -usr/share/doc/mlton/mlrisc-lib -usr/share/doc/mlton/smlnj-lib -usr/share/doc/mlton/mlton-guide.pdf diff -Nru mlton-20130715/debian/mlton-runtime-aarch64-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-aarch64-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-aarch64-linux-gnu.install 2016-12-17 02:39:49.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-aarch64-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/aarch64-linux-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-alpha-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-alpha-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-alpha-linux-gnu.install 2011-03-21 18:55:23.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-alpha-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/alpha-linux-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-arm-linux-gnueabihf.install mlton-20210117+dfsg/debian/mlton-runtime-arm-linux-gnueabihf.install --- mlton-20130715/debian/mlton-runtime-arm-linux-gnueabihf.install 2011-07-19 10:37:02.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-arm-linux-gnueabihf.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/arm-linux-gnueabihf/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-arm-linux-gnueabi.install mlton-20210117+dfsg/debian/mlton-runtime-arm-linux-gnueabi.install --- mlton-20130715/debian/mlton-runtime-arm-linux-gnueabi.install 2011-03-21 18:55:23.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-arm-linux-gnueabi.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/arm-linux-gnueabi/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-hppa-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-hppa-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-hppa-linux-gnu.install 2011-03-21 18:55:23.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-hppa-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/hppa-linux-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-i486-kfreebsd-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-i486-kfreebsd-gnu.install --- mlton-20130715/debian/mlton-runtime-i486-kfreebsd-gnu.install 2016-12-17 02:39:49.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-i486-kfreebsd-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/i*86-kfreebsd-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-i486-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-i486-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-i486-linux-gnu.install 2013-10-19 17:44:39.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-i486-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/i*86-linux-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-mips64el-linux-gnuabi64.install mlton-20210117+dfsg/debian/mlton-runtime-mips64el-linux-gnuabi64.install --- mlton-20130715/debian/mlton-runtime-mips64el-linux-gnuabi64.install 2016-12-17 02:39:49.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-mips64el-linux-gnuabi64.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/mips64el-linux-gnuabi64/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-mipsel-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-mipsel-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-mipsel-linux-gnu.install 2011-03-21 18:55:23.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-mipsel-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/mipsel-linux-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-mips-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-mips-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-mips-linux-gnu.install 2011-03-21 18:55:23.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-mips-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/mips-linux-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-powerpc64le-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-powerpc64le-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-powerpc64le-linux-gnu.install 2016-12-17 02:39:49.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-powerpc64le-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/powerpc64le-linux-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-powerpc-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-powerpc-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-powerpc-linux-gnu.install 2011-03-21 18:55:23.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-powerpc-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/powerpc-linux-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-riscv64-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-riscv64-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-riscv64-linux-gnu.install 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-riscv64-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1,2 @@ +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-s390x-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-s390x-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-s390x-linux-gnu.install 2016-12-17 02:39:49.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-s390x-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/s390x-linux-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-sparc-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-sparc-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-sparc-linux-gnu.install 2011-04-01 18:52:35.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-sparc-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/sparc-linux-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-x86-64-kfreebsd-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-x86-64-kfreebsd-gnu.install --- mlton-20130715/debian/mlton-runtime-x86-64-kfreebsd-gnu.install 2011-03-21 18:55:23.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-x86-64-kfreebsd-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/x86_64-kfreebsd-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-runtime-x86-64-linux-gnu.install mlton-20210117+dfsg/debian/mlton-runtime-x86-64-linux-gnu.install --- mlton-20130715/debian/mlton-runtime-x86-64-linux-gnu.install 2011-03-21 18:55:23.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-runtime-x86-64-linux-gnu.install 2022-01-04 20:01:30.000000000 +0000 @@ -1 +1,2 @@ -usr/lib/mlton/targets/x86_64-linux-gnu/* +#!/usr/bin/dh-exec +usr/lib/mlton/targets/self => /usr/lib/mlton/targets/${DEB_HOST_MULTIARCH} diff -Nru mlton-20130715/debian/mlton-tools.doc-base.mllex mlton-20210117+dfsg/debian/mlton-tools.doc-base.mllex --- mlton-20130715/debian/mlton-tools.doc-base.mllex 2011-03-20 13:08:28.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-tools.doc-base.mllex 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -Document: mllex -Title: A lexical analyzer generator for Standard ML -Author: Andrew W. Appel, James S. Mattson, David R. Tarditi -Abstract: This document describes how write lexer specification files for - mllex. -Section: Programming - -Format: PDF -Files: /usr/share/doc/mlton/mllex.pdf.gz diff -Nru mlton-20130715/debian/mlton-tools.doc-base.mlyacc mlton-20210117+dfsg/debian/mlton-tools.doc-base.mlyacc --- mlton-20130715/debian/mlton-tools.doc-base.mlyacc 2011-03-20 13:08:28.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-tools.doc-base.mlyacc 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -Document: mlyacc -Title: ML-Yacc User's Manual -Author: David R. Tarditi, Andrew W. Appel -Abstract: This document describes how to write parser specification files for - mlyacc. -Section: Programming - -Format: PDF -Files: /usr/share/doc/mlton/mlyacc.pdf.gz diff -Nru mlton-20130715/debian/mlton-tools.install mlton-20210117+dfsg/debian/mlton-tools.install --- mlton-20130715/debian/mlton-tools.install 2011-03-20 22:33:37.000000000 +0000 +++ mlton-20210117+dfsg/debian/mlton-tools.install 2022-01-04 20:01:30.000000000 +0000 @@ -1,10 +1,10 @@ +#usr/bin/mlnlffigen +#usr/share/doc/mlton/mllex.pdf +#usr/share/doc/mlton/mlyacc.pdf +#usr/share/man/man1/mlnlffigen.1.gz usr/bin/mllex -usr/bin/mlyacc usr/bin/mlprof -usr/bin/mlnlffigen +usr/bin/mlyacc usr/share/man/man1/mllex.1.gz -usr/share/man/man1/mlyacc.1.gz usr/share/man/man1/mlprof.1.gz -usr/share/man/man1/mlnlffigen.1.gz -usr/share/doc/mlton/mllex.pdf -usr/share/doc/mlton/mlyacc.pdf +usr/share/man/man1/mlyacc.1.gz diff -Nru mlton-20130715/debian/not-installed mlton-20210117+dfsg/debian/not-installed --- mlton-20130715/debian/not-installed 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/not-installed 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1 @@ +usr/share/doc/mlton/license diff -Nru mlton-20130715/debian/patches/03_kfreebsd.diff mlton-20210117+dfsg/debian/patches/03_kfreebsd.diff --- mlton-20130715/debian/patches/03_kfreebsd.diff 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/03_kfreebsd.diff 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1,21 @@ +Description: Remove getpgrp work-around for kfreebsd port +Author: Wesley W. Terpstra +Forwarded: no +Reviewed-by: Ryan Kavanagh +Last-Update: 2021-10-06 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +Index: mlton/runtime/platform/freebsd.h +=================================================================== +--- mlton.orig/runtime/platform/freebsd.h 2021-10-06 16:22:12.484705003 -0400 ++++ mlton/runtime/platform/freebsd.h 2021-10-06 16:22:12.448708208 -0400 +@@ -38,9 +38,4 @@ + + #define MLton_Platform_OS_host "freebsd" + +-/* This is probably debian specific, since freebsd worked w/o it before. */ +-#if (defined (__FreeBSD_kernel__)) +-#define getpgrp() getpgrp(getpid()) +-#endif +- + extern char **environ; /* for Posix_ProcEnv_environ */ diff -Nru mlton-20130715/debian/patches/04_mips64el.diff mlton-20210117+dfsg/debian/patches/04_mips64el.diff --- mlton-20130715/debian/patches/04_mips64el.diff 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/04_mips64el.diff 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1,144 @@ +Description: Add a mips64el port +Author: Wesley W. Terpstra +Forwarded: no +Reviewed-by: Ryan Kavanagh +Last-Update: 2021-10-06 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +Index: mlton/basis-library/mlton/platform.sig +=================================================================== +--- mlton.orig/basis-library/mlton/platform.sig 2021-10-06 16:23:37.161165313 -0400 ++++ mlton/basis-library/mlton/platform.sig 2021-10-06 16:24:14.449845088 -0400 +@@ -10,7 +10,7 @@ + structure Arch: + sig + datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k | +- MIPS | PowerPC | PowerPC64 | RISCV | S390 | Sparc | X86 ++ MIPS | MIPS64 | PowerPC | PowerPC64 | RISCV | S390 | Sparc | X86 + + val fromString: string -> t option + val host: t +Index: mlton/basis-library/mlton/platform.sml +=================================================================== +--- mlton.orig/basis-library/mlton/platform.sml 2021-10-06 16:23:37.161165313 -0400 ++++ mlton/basis-library/mlton/platform.sml 2021-10-06 16:23:37.157165669 -0400 +@@ -25,6 +25,7 @@ + (IA64, "IA64"), + (m68k, "m68k"), + (MIPS, "MIPS"), ++ (MIPS64, "MIPS64"), + (PowerPC, "PowerPC"), + (PowerPC64, "PowerPC64"), + (RISCV, "RISCV"), +Index: mlton/basis-library/primitive/prim-mlton.sml +=================================================================== +--- mlton.orig/basis-library/primitive/prim-mlton.sml 2021-10-06 16:23:37.161165313 -0400 ++++ mlton/basis-library/primitive/prim-mlton.sml 2021-10-06 16:23:37.157165669 -0400 +@@ -156,6 +156,7 @@ + | IA64 + | m68k + | MIPS ++ | MIPS64 + | PowerPC + | PowerPC64 + | RISCV +@@ -173,6 +174,7 @@ + | "ia64" => IA64 + | "m68k" => m68k + | "mips" => MIPS ++ | "mips64" => MIPS64 + | "powerpc" => PowerPC + | "powerpc64" => PowerPC64 + | "riscv" => RISCV +Index: mlton/bin/platform +=================================================================== +--- mlton.orig/bin/platform 2021-10-06 16:23:37.161165313 -0400 ++++ mlton/bin/platform 2021-10-06 16:23:37.157165669 -0400 +@@ -112,6 +112,9 @@ + m68k*) + HOST_ARCH=m68k + ;; ++mips64*) ++ HOST_ARCH=mips64 ++;; + mips*) + # big-endian and little-endian detect via headers + HOST_ARCH=mips +Index: mlton/lib/stubs/mlton-stubs/mlton.sml +=================================================================== +--- mlton.orig/lib/stubs/mlton-stubs/mlton.sml 2021-10-06 16:23:37.161165313 -0400 ++++ mlton/lib/stubs/mlton-stubs/mlton.sml 2021-10-06 16:24:36.231905587 -0400 +@@ -160,7 +160,7 @@ + structure Arch = + struct + datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | +- m68k | MIPS | PowerPC | PowerPC64 | RISCV | ++ m68k | MIPS | MIPS64 | PowerPC | PowerPC64 | RISCV | + S390 | Sparc | X86 + + val all = [(Alpha, "Alpha"), +@@ -171,6 +171,7 @@ + (IA64, "IA64"), + (m68k, "m68k"), + (MIPS, "MIPS"), ++ (MIPS64, "MIPS64"), + (PowerPC, "PowerPC"), + (PowerPC64, "PowerPC64"), + (RISCV, "RISCV"), +Index: mlton/lib/stubs/mlton-stubs/platform.sig +=================================================================== +--- mlton.orig/lib/stubs/mlton-stubs/platform.sig 2021-10-06 16:23:37.161165313 -0400 ++++ mlton/lib/stubs/mlton-stubs/platform.sig 2021-10-06 16:25:06.517208948 -0400 +@@ -10,7 +10,7 @@ + structure Arch: + sig + datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k | +- MIPS | PowerPC | PowerPC64 | RISCV | S390 | Sparc | X86 ++ MIPS | MIPS64 | PowerPC | PowerPC64 | RISCV | S390 | Sparc | X86 + + val fromString: string -> t option + val host: t +Index: mlton/mlton/main/main.fun +=================================================================== +--- mlton.orig/mlton/main/main.fun 2021-10-06 16:23:37.161165313 -0400 ++++ mlton/mlton/main/main.fun 2021-10-06 16:23:37.157165669 -0400 +@@ -200,6 +200,7 @@ + | HPPA => true + | IA64 => true + | MIPS => true ++ | MIPS64 => true + | Sparc => true + | S390 => true + | _ => false +Index: mlton/runtime/cenv.h +=================================================================== +--- mlton.orig/runtime/cenv.h 2021-10-06 16:23:37.161165313 -0400 ++++ mlton/runtime/cenv.h 2021-10-06 16:23:37.157165669 -0400 +@@ -101,6 +101,8 @@ + #include "platform/ia64.h" + #elif (defined (__m68k__)) + #include "platform/m68k.h" ++#elif (defined (__mips64)) ++#include "platform/mips64.h" + #elif (defined (__mips__)) + #include "platform/mips.h" + #elif (defined (__powerpc64__)) +Index: mlton/runtime/platform/mips64.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mlton/runtime/platform/mips64.h 2021-10-06 16:23:37.157165669 -0400 +@@ -0,0 +1 @@ ++#define MLton_Platform_Arch_host "mips64" +Index: mlton/runtime/platform/linux.c +=================================================================== +--- mlton.orig/runtime/platform/linux.c 2021-10-06 16:23:37.161165313 -0400 ++++ mlton/runtime/platform/linux.c 2021-10-06 16:23:37.161165313 -0400 +@@ -38,7 +38,7 @@ + #else + GC_handleSigProf ((code_pointer) scp->si_regs.pc); + #endif +-#elif (defined (__mips__)) ++#elif (defined (__mips64)) || (defined (__mips__)) + ucontext_t* ucp = (ucontext_t*)context; + #ifdef __UCLIBC__ + GC_handleSigProf ((code_pointer) ucp->uc_mcontext.gpregs[CTX_EPC]); diff -Nru mlton-20130715/debian/patches/05_riscv64.diff mlton-20210117+dfsg/debian/patches/05_riscv64.diff --- mlton-20130715/debian/patches/05_riscv64.diff 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/05_riscv64.diff 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1,1031 @@ +Description: Add RISCV64 support +Author: Wesley W. Terpstra +Forwarded: no +Reviewed-by: Ryan Kavanagh +Last-Update: 2021-10-06 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +Index: mlton/basis-library/mlton/platform.sig +=================================================================== +--- mlton.orig/basis-library/mlton/platform.sig 2021-10-06 16:45:12.857794991 -0400 ++++ mlton/basis-library/mlton/platform.sig 2021-10-06 16:45:12.853795347 -0400 +@@ -10,7 +10,8 @@ + structure Arch: + sig + datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k | +- MIPS | MIPS64 | PowerPC | PowerPC64 | RISCV | S390 | Sparc | X86 ++ MIPS | MIPS64 | PowerPC | PowerPC64 | RISCV | ++ RISCV64 | S390 | Sparc | X86 + + val fromString: string -> t option + val host: t +Index: mlton/basis-library/mlton/platform.sml +=================================================================== +--- mlton.orig/basis-library/mlton/platform.sml 2021-10-06 16:45:12.857794991 -0400 ++++ mlton/basis-library/mlton/platform.sml 2021-10-06 16:45:12.853795347 -0400 +@@ -29,6 +29,7 @@ + (PowerPC, "PowerPC"), + (PowerPC64, "PowerPC64"), + (RISCV, "RISCV"), ++ (RISCV64, "RISCV64"), + (S390, "S390"), + (Sparc, "Sparc"), + (X86, "X86")] +Index: mlton/basis-library/primitive/prim-mlton.sml +=================================================================== +--- mlton.orig/basis-library/primitive/prim-mlton.sml 2021-10-06 16:45:12.857794991 -0400 ++++ mlton/basis-library/primitive/prim-mlton.sml 2021-10-06 16:45:12.853795347 -0400 +@@ -160,6 +160,7 @@ + | PowerPC + | PowerPC64 + | RISCV ++ | RISCV64 + | S390 + | Sparc + | X86 +@@ -178,6 +179,7 @@ + | "powerpc" => PowerPC + | "powerpc64" => PowerPC64 + | "riscv" => RISCV ++ | "riscv64" => RISCV64 + | "s390" => S390 + | "sparc" => Sparc + | "x86" => X86 +Index: mlton/bin/platform +=================================================================== +--- mlton.orig/bin/platform 2021-10-06 16:45:12.857794991 -0400 ++++ mlton/bin/platform 2021-10-06 16:45:12.853795347 -0400 +@@ -134,6 +134,9 @@ + Power*) + HOST_ARCH=powerpc + ;; ++riscv64) ++ HOST_ARCH=riscv64 ++;; + riscv*) + HOST_ARCH=riscv + ;; +Index: mlton/doc/guide/src/MLtonPlatform.adoc +=================================================================== +--- mlton.orig/doc/guide/src/MLtonPlatform.adoc 2021-10-06 16:45:12.857794991 -0400 ++++ mlton/doc/guide/src/MLtonPlatform.adoc 2021-10-06 16:45:12.853795347 -0400 +@@ -8,7 +8,7 @@ + structure Arch: + sig + datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k +- | MIPS | PowerPC | PowerPC64 | S390 | Sparc | X86 ++ | MIPS | PowerPC | PowerPC64 | RISCV64 | S390 | Sparc | X86 + + val fromString: string -> t option + val host: t +Index: mlton/lib/stubs/mlton-stubs/mlton.sml +=================================================================== +--- mlton.orig/lib/stubs/mlton-stubs/mlton.sml 2021-10-06 16:45:12.857794991 -0400 ++++ mlton/lib/stubs/mlton-stubs/mlton.sml 2021-10-06 16:45:12.853795347 -0400 +@@ -161,7 +161,7 @@ + struct + datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | + m68k | MIPS | MIPS64 | PowerPC | PowerPC64 | RISCV | +- S390 | Sparc | X86 ++ RISCV64 | S390 | Sparc | X86 + + val all = [(Alpha, "Alpha"), + (AMD64, "AMD64"), +@@ -175,6 +175,7 @@ + (PowerPC, "PowerPC"), + (PowerPC64, "PowerPC64"), + (RISCV, "RISCV"), ++ (RISCV64, "RISCV64"), + (S390, "S390"), + (Sparc, "Sparc"), + (X86, "X86")] +Index: mlton/lib/stubs/mlton-stubs/platform.sig +=================================================================== +--- mlton.orig/lib/stubs/mlton-stubs/platform.sig 2021-10-06 16:45:12.857794991 -0400 ++++ mlton/lib/stubs/mlton-stubs/platform.sig 2021-10-06 16:45:12.853795347 -0400 +@@ -10,7 +10,8 @@ + structure Arch: + sig + datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k | +- MIPS | MIPS64 | PowerPC | PowerPC64 | RISCV | S390 | Sparc | X86 ++ MIPS | MIPS64 | PowerPC | PowerPC64 | RISCV | RISCV64 | ++ S390 | Sparc | X86 + + val fromString: string -> t option + val host: t +Index: mlton/mlton/main/main.fun +=================================================================== +--- mlton.orig/mlton/main/main.fun 2021-10-06 16:45:12.857794991 -0400 ++++ mlton/mlton/main/main.fun 2021-10-06 16:45:12.857794991 -0400 +@@ -201,6 +201,7 @@ + | IA64 => true + | MIPS => true + | MIPS64 => true ++ | RISCV64 => true + | Sparc => true + | S390 => true + | _ => false +Index: mlton/runtime/cenv.h +=================================================================== +--- mlton.orig/runtime/cenv.h 2021-10-06 16:45:12.857794991 -0400 ++++ mlton/runtime/cenv.h 2021-10-06 16:45:12.857794991 -0400 +@@ -109,6 +109,8 @@ + #include "platform/powerpc64.h" + #elif (defined (__ppc__)) || (defined (__powerpc__)) + #include "platform/powerpc.h" ++#elif (defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64) ++#include "platform/riscv64.h" + #elif (defined (__riscv)) + #include "platform/riscv.h" + #elif (defined (__s390__)) +Index: mlton/runtime/platform/linux.c +=================================================================== +--- mlton.orig/runtime/platform/linux.c 2021-10-06 16:45:12.857794991 -0400 ++++ mlton/runtime/platform/linux.c 2021-10-06 16:45:12.857794991 -0400 +@@ -31,6 +31,9 @@ + #elif (defined (__ppc__)) || (defined (__powerpc__)) + ucontext_t* ucp = (ucontext_t*)context; + GC_handleSigProf ((code_pointer) ucp->uc_mcontext.regs->nip); ++#elif (defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64) ++ ucontext_t* ucp = (ucontext_t*)context; ++ GC_handleSigProf ((code_pointer) ucp->uc_mcontext.__gregs[REG_PC]); + #elif (defined (__sparc__)) + struct sigcontext* scp = (struct sigcontext*)context; + #if __WORDSIZE == 64 +Index: mlton/runtime/platform/riscv64.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mlton/runtime/platform/riscv64.h 2021-10-06 16:45:12.857794991 -0400 +@@ -0,0 +1 @@ ++#define MLton_Platform_Arch_host "riscv64" +Index: mlton/regression/mlton.share.riscv64-linux.ok +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mlton/regression/mlton.share.riscv64-linux.ok 2021-10-06 16:45:12.857794991 -0400 +@@ -0,0 +1,718 @@ ++size of a is 2408 ++0 => NONE ++1 => (1, 1) ++2 => (0, 2) ++3 => (1, 0) ++4 => (0, 1) ++5 => (1, 2) ++6 => (0, 0) ++7 => (1, 1) ++8 => (0, 2) ++9 => (1, 0) ++10 => (0, 1) ++11 => (1, 2) ++12 => (0, 0) ++13 => (1, 1) ++14 => (0, 2) ++15 => (1, 0) ++16 => (0, 1) ++17 => (1, 2) ++18 => (0, 0) ++19 => (1, 1) ++20 => (0, 2) ++21 => (1, 0) ++22 => (0, 1) ++23 => (1, 2) ++24 => (0, 0) ++25 => (1, 1) ++26 => (0, 2) ++27 => (1, 0) ++28 => (0, 1) ++29 => (1, 2) ++30 => (0, 0) ++31 => (1, 1) ++32 => (0, 2) ++33 => (1, 0) ++34 => (0, 1) ++35 => (1, 2) ++36 => (0, 0) ++37 => (1, 1) ++38 => (0, 2) ++39 => (1, 0) ++40 => (0, 1) ++41 => (1, 2) ++42 => (0, 0) ++43 => (1, 1) ++44 => (0, 2) ++45 => (1, 0) ++46 => (0, 1) ++47 => (1, 2) ++48 => (0, 0) ++49 => (1, 1) ++50 => (0, 2) ++51 => (1, 0) ++52 => (0, 1) ++53 => (1, 2) ++54 => (0, 0) ++55 => (1, 1) ++56 => (0, 2) ++57 => (1, 0) ++58 => (0, 1) ++59 => (1, 2) ++60 => (0, 0) ++61 => (1, 1) ++62 => (0, 2) ++63 => (1, 0) ++64 => (0, 1) ++65 => (1, 2) ++66 => (0, 0) ++67 => (1, 1) ++68 => (0, 2) ++69 => (1, 0) ++70 => (0, 1) ++71 => (1, 2) ++72 => (0, 0) ++73 => (1, 1) ++74 => (0, 2) ++75 => (1, 0) ++76 => (0, 1) ++77 => (1, 2) ++78 => (0, 0) ++79 => (1, 1) ++80 => (0, 2) ++81 => (1, 0) ++82 => (0, 1) ++83 => (1, 2) ++84 => (0, 0) ++85 => (1, 1) ++86 => (0, 2) ++87 => (1, 0) ++88 => (0, 1) ++89 => (1, 2) ++90 => (0, 0) ++91 => (1, 1) ++92 => (0, 2) ++93 => (1, 0) ++94 => (0, 1) ++95 => (1, 2) ++96 => (0, 0) ++97 => (1, 1) ++98 => (0, 2) ++99 => (1, 0) ++size of a is 920 ++0 => NONE ++1 => (1, 1) ++2 => (0, 2) ++3 => (1, 0) ++4 => (0, 1) ++5 => (1, 2) ++6 => (0, 0) ++7 => (1, 1) ++8 => (0, 2) ++9 => (1, 0) ++10 => (0, 1) ++11 => (1, 2) ++12 => (0, 0) ++13 => (1, 1) ++14 => (0, 2) ++15 => (1, 0) ++16 => (0, 1) ++17 => (1, 2) ++18 => (0, 0) ++19 => (1, 1) ++20 => (0, 2) ++21 => (1, 0) ++22 => (0, 1) ++23 => (1, 2) ++24 => (0, 0) ++25 => (1, 1) ++26 => (0, 2) ++27 => (1, 0) ++28 => (0, 1) ++29 => (1, 2) ++30 => (0, 0) ++31 => (1, 1) ++32 => (0, 2) ++33 => (1, 0) ++34 => (0, 1) ++35 => (1, 2) ++36 => (0, 0) ++37 => (1, 1) ++38 => (0, 2) ++39 => (1, 0) ++40 => (0, 1) ++41 => (1, 2) ++42 => (0, 0) ++43 => (1, 1) ++44 => (0, 2) ++45 => (1, 0) ++46 => (0, 1) ++47 => (1, 2) ++48 => (0, 0) ++49 => (1, 1) ++50 => (0, 2) ++51 => (1, 0) ++52 => (0, 1) ++53 => (1, 2) ++54 => (0, 0) ++55 => (1, 1) ++56 => (0, 2) ++57 => (1, 0) ++58 => (0, 1) ++59 => (1, 2) ++60 => (0, 0) ++61 => (1, 1) ++62 => (0, 2) ++63 => (1, 0) ++64 => (0, 1) ++65 => (1, 2) ++66 => (0, 0) ++67 => (1, 1) ++68 => (0, 2) ++69 => (1, 0) ++70 => (0, 1) ++71 => (1, 2) ++72 => (0, 0) ++73 => (1, 1) ++74 => (0, 2) ++75 => (1, 0) ++76 => (0, 1) ++77 => (1, 2) ++78 => (0, 0) ++79 => (1, 1) ++80 => (0, 2) ++81 => (1, 0) ++82 => (0, 1) ++83 => (1, 2) ++84 => (0, 0) ++85 => (1, 1) ++86 => (0, 2) ++87 => (1, 0) ++88 => (0, 1) ++89 => (1, 2) ++90 => (0, 0) ++91 => (1, 1) ++92 => (0, 2) ++93 => (1, 0) ++94 => (0, 1) ++95 => (1, 2) ++96 => (0, 0) ++97 => (1, 1) ++98 => (0, 2) ++99 => (1, 0) ++size of a is 1640 ++0 => NONE ++1 => (1, 1) ++2 => (1, 1) ++3 => (0, 0) ++4 => (1, 1) ++5 => (2, 2) ++6 => (1, 1) ++7 => (1, 1) ++8 => (1, 1) ++9 => (0, 0) ++10 => (1, 1) ++11 => (2, 2) ++12 => (1, 1) ++13 => (1, 1) ++14 => (1, 1) ++15 => (0, 0) ++16 => (1, 1) ++17 => (2, 2) ++18 => (1, 1) ++19 => (1, 1) ++20 => (1, 1) ++21 => (0, 0) ++22 => (1, 1) ++23 => (2, 2) ++24 => (1, 1) ++25 => (1, 1) ++26 => (1, 1) ++27 => (0, 0) ++28 => (1, 1) ++29 => (2, 2) ++30 => (1, 1) ++31 => (1, 1) ++32 => (1, 1) ++33 => (0, 0) ++34 => (1, 1) ++35 => (2, 2) ++36 => (1, 1) ++37 => (1, 1) ++38 => (1, 1) ++39 => (0, 0) ++40 => (1, 1) ++41 => (2, 2) ++42 => (1, 1) ++43 => (1, 1) ++44 => (1, 1) ++45 => (0, 0) ++46 => (1, 1) ++47 => (2, 2) ++48 => (1, 1) ++49 => (1, 1) ++50 => (1, 1) ++51 => (0, 0) ++52 => (1, 1) ++53 => (2, 2) ++54 => (1, 1) ++55 => (1, 1) ++56 => (1, 1) ++57 => (0, 0) ++58 => (1, 1) ++59 => (2, 2) ++60 => (1, 1) ++61 => (1, 1) ++62 => (1, 1) ++63 => (0, 0) ++64 => (1, 1) ++65 => (2, 2) ++66 => (1, 1) ++67 => (1, 1) ++68 => (1, 1) ++69 => (0, 0) ++70 => (1, 1) ++71 => (2, 2) ++72 => (1, 1) ++73 => (1, 1) ++74 => (1, 1) ++75 => (0, 0) ++76 => (1, 1) ++77 => (2, 2) ++78 => (1, 1) ++79 => (1, 1) ++80 => (1, 1) ++81 => (0, 0) ++82 => (1, 1) ++83 => (2, 2) ++84 => (1, 1) ++85 => (1, 1) ++86 => (1, 1) ++87 => (0, 0) ++88 => (1, 1) ++89 => (2, 2) ++90 => (1, 1) ++91 => (1, 1) ++92 => (1, 1) ++93 => (0, 0) ++94 => (1, 1) ++95 => (2, 2) ++96 => (1, 1) ++97 => (1, 1) ++98 => (1, 1) ++99 => (0, 0) ++size of a is 872 ++0 => NONE ++1 => (1, 1) ++2 => (1, 1) ++3 => (0, 0) ++4 => (1, 1) ++5 => (2, 2) ++6 => (1, 1) ++7 => (1, 1) ++8 => (1, 1) ++9 => (0, 0) ++10 => (1, 1) ++11 => (2, 2) ++12 => (1, 1) ++13 => (1, 1) ++14 => (1, 1) ++15 => (0, 0) ++16 => (1, 1) ++17 => (2, 2) ++18 => (1, 1) ++19 => (1, 1) ++20 => (1, 1) ++21 => (0, 0) ++22 => (1, 1) ++23 => (2, 2) ++24 => (1, 1) ++25 => (1, 1) ++26 => (1, 1) ++27 => (0, 0) ++28 => (1, 1) ++29 => (2, 2) ++30 => (1, 1) ++31 => (1, 1) ++32 => (1, 1) ++33 => (0, 0) ++34 => (1, 1) ++35 => (2, 2) ++36 => (1, 1) ++37 => (1, 1) ++38 => (1, 1) ++39 => (0, 0) ++40 => (1, 1) ++41 => (2, 2) ++42 => (1, 1) ++43 => (1, 1) ++44 => (1, 1) ++45 => (0, 0) ++46 => (1, 1) ++47 => (2, 2) ++48 => (1, 1) ++49 => (1, 1) ++50 => (1, 1) ++51 => (0, 0) ++52 => (1, 1) ++53 => (2, 2) ++54 => (1, 1) ++55 => (1, 1) ++56 => (1, 1) ++57 => (0, 0) ++58 => (1, 1) ++59 => (2, 2) ++60 => (1, 1) ++61 => (1, 1) ++62 => (1, 1) ++63 => (0, 0) ++64 => (1, 1) ++65 => (2, 2) ++66 => (1, 1) ++67 => (1, 1) ++68 => (1, 1) ++69 => (0, 0) ++70 => (1, 1) ++71 => (2, 2) ++72 => (1, 1) ++73 => (1, 1) ++74 => (1, 1) ++75 => (0, 0) ++76 => (1, 1) ++77 => (2, 2) ++78 => (1, 1) ++79 => (1, 1) ++80 => (1, 1) ++81 => (0, 0) ++82 => (1, 1) ++83 => (2, 2) ++84 => (1, 1) ++85 => (1, 1) ++86 => (1, 1) ++87 => (0, 0) ++88 => (1, 1) ++89 => (2, 2) ++90 => (1, 1) ++91 => (1, 1) ++92 => (1, 1) ++93 => (0, 0) ++94 => (1, 1) ++95 => (2, 2) ++96 => (1, 1) ++97 => (1, 1) ++98 => (1, 1) ++99 => (0, 0) ++size of a is 4008 ++0 => NONE ++1 => (1, 1) ++2 => (0, 2) ++3 => (1, 0) ++4 => (0, 1) ++5 => (1, 2) ++6 => (0, 0) ++7 => (1, 1) ++8 => (0, 2) ++9 => (1, 0) ++10 => (0, 1) ++11 => (1, 2) ++12 => (0, 0) ++13 => (1, 1) ++14 => (0, 2) ++15 => (1, 0) ++16 => (0, 1) ++17 => (1, 2) ++18 => (0, 0) ++19 => (1, 1) ++20 => (0, 2) ++21 => (1, 0) ++22 => (0, 1) ++23 => (1, 2) ++24 => (0, 0) ++25 => (1, 1) ++26 => (0, 2) ++27 => (1, 0) ++28 => (0, 1) ++29 => (1, 2) ++30 => (0, 0) ++31 => (1, 1) ++32 => (0, 2) ++33 => (1, 0) ++34 => (0, 1) ++35 => (1, 2) ++36 => (0, 0) ++37 => (1, 1) ++38 => (0, 2) ++39 => (1, 0) ++40 => (0, 1) ++41 => (1, 2) ++42 => (0, 0) ++43 => (1, 1) ++44 => (0, 2) ++45 => (1, 0) ++46 => (0, 1) ++47 => (1, 2) ++48 => (0, 0) ++49 => (1, 1) ++50 => (0, 2) ++51 => (1, 0) ++52 => (0, 1) ++53 => (1, 2) ++54 => (0, 0) ++55 => (1, 1) ++56 => (0, 2) ++57 => (1, 0) ++58 => (0, 1) ++59 => (1, 2) ++60 => (0, 0) ++61 => (1, 1) ++62 => (0, 2) ++63 => (1, 0) ++64 => (0, 1) ++65 => (1, 2) ++66 => (0, 0) ++67 => (1, 1) ++68 => (0, 2) ++69 => (1, 0) ++70 => (0, 1) ++71 => (1, 2) ++72 => (0, 0) ++73 => (1, 1) ++74 => (0, 2) ++75 => (1, 0) ++76 => (0, 1) ++77 => (1, 2) ++78 => (0, 0) ++79 => (1, 1) ++80 => (0, 2) ++81 => (1, 0) ++82 => (0, 1) ++83 => (1, 2) ++84 => (0, 0) ++85 => (1, 1) ++86 => (0, 2) ++87 => (1, 0) ++88 => (0, 1) ++89 => (1, 2) ++90 => (0, 0) ++91 => (1, 1) ++92 => (0, 2) ++93 => (1, 0) ++94 => (0, 1) ++95 => (1, 2) ++96 => (0, 0) ++97 => (1, 1) ++98 => (0, 2) ++99 => (1, 0) ++size of a is 2520 ++0 => NONE ++1 => (1, 1) ++2 => (0, 2) ++3 => (1, 0) ++4 => (0, 1) ++5 => (1, 2) ++6 => (0, 0) ++7 => (1, 1) ++8 => (0, 2) ++9 => (1, 0) ++10 => (0, 1) ++11 => (1, 2) ++12 => (0, 0) ++13 => (1, 1) ++14 => (0, 2) ++15 => (1, 0) ++16 => (0, 1) ++17 => (1, 2) ++18 => (0, 0) ++19 => (1, 1) ++20 => (0, 2) ++21 => (1, 0) ++22 => (0, 1) ++23 => (1, 2) ++24 => (0, 0) ++25 => (1, 1) ++26 => (0, 2) ++27 => (1, 0) ++28 => (0, 1) ++29 => (1, 2) ++30 => (0, 0) ++31 => (1, 1) ++32 => (0, 2) ++33 => (1, 0) ++34 => (0, 1) ++35 => (1, 2) ++36 => (0, 0) ++37 => (1, 1) ++38 => (0, 2) ++39 => (1, 0) ++40 => (0, 1) ++41 => (1, 2) ++42 => (0, 0) ++43 => (1, 1) ++44 => (0, 2) ++45 => (1, 0) ++46 => (0, 1) ++47 => (1, 2) ++48 => (0, 0) ++49 => (1, 1) ++50 => (0, 2) ++51 => (1, 0) ++52 => (0, 1) ++53 => (1, 2) ++54 => (0, 0) ++55 => (1, 1) ++56 => (0, 2) ++57 => (1, 0) ++58 => (0, 1) ++59 => (1, 2) ++60 => (0, 0) ++61 => (1, 1) ++62 => (0, 2) ++63 => (1, 0) ++64 => (0, 1) ++65 => (1, 2) ++66 => (0, 0) ++67 => (1, 1) ++68 => (0, 2) ++69 => (1, 0) ++70 => (0, 1) ++71 => (1, 2) ++72 => (0, 0) ++73 => (1, 1) ++74 => (0, 2) ++75 => (1, 0) ++76 => (0, 1) ++77 => (1, 2) ++78 => (0, 0) ++79 => (1, 1) ++80 => (0, 2) ++81 => (1, 0) ++82 => (0, 1) ++83 => (1, 2) ++84 => (0, 0) ++85 => (1, 1) ++86 => (0, 2) ++87 => (1, 0) ++88 => (0, 1) ++89 => (1, 2) ++90 => (0, 0) ++91 => (1, 1) ++92 => (0, 2) ++93 => (1, 0) ++94 => (0, 1) ++95 => (1, 2) ++96 => (0, 0) ++97 => (1, 1) ++98 => (0, 2) ++99 => (1, 0) ++size of a is 4008 ++0 => NONE ++1 => (1, 1) ++2 => (0, 2) ++3 => (1, 0) ++4 => (0, 1) ++5 => (1, 2) ++6 => (0, 0) ++7 => (1, 1) ++8 => (0, 2) ++9 => (1, 0) ++10 => (0, 1) ++11 => (1, 2) ++12 => (0, 0) ++13 => (1, 1) ++14 => (0, 2) ++15 => (1, 0) ++16 => (0, 1) ++17 => (1, 2) ++18 => (0, 0) ++19 => (1, 1) ++20 => (0, 2) ++21 => (1, 0) ++22 => (0, 1) ++23 => (1, 2) ++24 => (0, 0) ++25 => (1, 1) ++26 => (0, 2) ++27 => (1, 0) ++28 => (0, 1) ++29 => (1, 2) ++30 => (0, 0) ++31 => (1, 1) ++32 => (0, 2) ++33 => (1, 0) ++34 => (0, 1) ++35 => (1, 2) ++36 => (0, 0) ++37 => (1, 1) ++38 => (0, 2) ++39 => (1, 0) ++40 => (0, 1) ++41 => (1, 2) ++42 => (0, 0) ++43 => (1, 1) ++44 => (0, 2) ++45 => (1, 0) ++46 => (0, 1) ++47 => (1, 2) ++48 => (0, 0) ++49 => (1, 1) ++50 => (0, 2) ++51 => (1, 0) ++52 => (0, 1) ++53 => (1, 2) ++54 => (0, 0) ++55 => (1, 1) ++56 => (0, 2) ++57 => (1, 0) ++58 => (0, 1) ++59 => (1, 2) ++60 => (0, 0) ++61 => (1, 1) ++62 => (0, 2) ++63 => (1, 0) ++64 => (0, 1) ++65 => (1, 2) ++66 => (0, 0) ++67 => (1, 1) ++68 => (0, 2) ++69 => (1, 0) ++70 => (0, 1) ++71 => (1, 2) ++72 => (0, 0) ++73 => (1, 1) ++74 => (0, 2) ++75 => (1, 0) ++76 => (0, 1) ++77 => (1, 2) ++78 => (0, 0) ++79 => (1, 1) ++80 => (0, 2) ++81 => (1, 0) ++82 => (0, 1) ++83 => (1, 2) ++84 => (0, 0) ++85 => (1, 1) ++86 => (0, 2) ++87 => (1, 0) ++88 => (0, 1) ++89 => (1, 2) ++90 => (0, 0) ++91 => (1, 1) ++92 => (0, 2) ++93 => (1, 0) ++94 => (0, 1) ++95 => (1, 2) ++96 => (0, 0) ++97 => (1, 1) ++98 => (0, 2) ++99 => (1, 0) ++size of a is 2400008 ++(1, 1) ++size of a is 800120 ++(1, 1) ++size is 296 ++size is 136 ++abcdef abcdef ++size is 88 ++size is 56 ++abcdef abcdef ++1 2 +Index: mlton/regression/size2.riscv64-linux.ok +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mlton/regression/size2.riscv64-linux.ok 2021-10-06 16:45:12.857794991 -0400 +@@ -0,0 +1,24 @@ ++The size of a char is = 0 bytes. ++The size of an int list of length 4 is = 96 bytes. ++The size of a string of length 10 is = 40 bytes. ++The size of an int array of length 10 is = 64 bytes. ++The size of a double array of length 10 is = 104 bytes. ++The size of a (word32 * double) array of length 10 is = 184 bytes. ++The size of a (word32 * word32 * double) array of length 10 is = 184 bytes. ++The size of a (word64 * double) array of length 10 is = 184 bytes. ++The size of a (word16 * double) array of length 10 is = 184 bytes. ++The size of a word64 array of length 10 is = 104 bytes. ++The size of a (word32 * word64) array of length 10 is = 184 bytes. ++The size of a (word32 * word32 * word64) array of length 10 is = 184 bytes. ++The size of a (word64 * word64) array of length 10 is = 184 bytes. ++The size of a (word16 * word64) array of length 10 is = 184 bytes. ++The size of an array of length 10 of 2-ples of ints is = 104 bytes. ++The size of an array of length 10 of 2-ples of (shared) ints is = 104 bytes. ++The size of an array of length 10 of arrays of length 20 of ints is = 1144 bytes. ++The size of an array of length 10 of (shared) arrays of length 20 of ints is = 208 bytes. ++The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1224 bytes. ++The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1224 bytes. ++The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1224 bytes. ++The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1224 bytes. ++The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1224 bytes. ++The size of a useless function is = 0 bytes. +Index: mlton/regression/size3.riscv64-linux.ok +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mlton/regression/size3.riscv64-linux.ok 2021-10-06 16:45:12.857794991 -0400 +@@ -0,0 +1,114 @@ ++The size of unit is = 0 bytes. ++The size of unit * unit is = 0 bytes. ++The size of bool is = 0 bytes. ++The size of bool * bool is = 16 bytes. ++The size of day is = 0 bytes. ++The size of day * day is = 0 bytes. ++The size of a char is = 0 bytes. ++The size of a char * char is = 0 bytes. ++The size of a word8 is = 0 bytes. ++The size of a word8 * word8 is = 0 bytes. ++The size of a word16 is = 0 bytes. ++The size of a word16 * word16 is = 0 bytes. ++The size of a word32 is = 0 bytes. ++The size of a word32 * word32 is = 16 bytes. ++The size of a word64 is = 0 bytes. ++The size of a word64 * word64 is = 24 bytes. ++The size of a word64 * word64 * word64 is = 32 bytes. ++The size of a word64 * word64 * word64 * word64 is = 40 bytes. ++The size of a unit list of length 4 is = 64 bytes. ++The size of a bool list of length 4 is = 96 bytes. ++The size of a day list of length 4 is = 96 bytes. ++The size of an int list of length 4 is = 96 bytes. ++The size of a string of length 10 is = 40 bytes. ++The size of a word64 array of length 0 is = 24 bytes. ++The size of a word64 array of length 1 is = 32 bytes. ++The size of a word64 array of length 2 is = 40 bytes. ++The size of a word64 array of length 3 is = 48 bytes. ++The size of a word64 array of length 4 is = 56 bytes. ++The size of a word64 array of length 5 is = 64 bytes. ++The size of a word64 array of length 6 is = 72 bytes. ++The size of a word64 array of length 7 is = 80 bytes. ++The size of a word64 array of length 8 is = 88 bytes. ++The size of a word64 array of length 9 is = 96 bytes. ++The size of a word64 array of length 10 is = 104 bytes. ++The size of a word64 array of length 11 is = 112 bytes. ++The size of a word64 array of length 12 is = 120 bytes. ++The size of a word32 array of length 0 is = 24 bytes. ++The size of a word32 array of length 1 is = 32 bytes. ++The size of a word32 array of length 2 is = 32 bytes. ++The size of a word32 array of length 3 is = 40 bytes. ++The size of a word32 array of length 4 is = 40 bytes. ++The size of a word32 array of length 5 is = 48 bytes. ++The size of a word32 array of length 6 is = 48 bytes. ++The size of a word32 array of length 7 is = 56 bytes. ++The size of a word32 array of length 8 is = 56 bytes. ++The size of a word32 array of length 9 is = 64 bytes. ++The size of a word32 array of length 10 is = 64 bytes. ++The size of a word32 array of length 11 is = 72 bytes. ++The size of a word32 array of length 12 is = 72 bytes. ++The size of a word16 array of length 0 is = 24 bytes. ++The size of a word16 array of length 1 is = 32 bytes. ++The size of a word16 array of length 2 is = 32 bytes. ++The size of a word16 array of length 3 is = 32 bytes. ++The size of a word16 array of length 4 is = 32 bytes. ++The size of a word16 array of length 5 is = 40 bytes. ++The size of a word16 array of length 6 is = 40 bytes. ++The size of a word16 array of length 7 is = 40 bytes. ++The size of a word16 array of length 8 is = 40 bytes. ++The size of a word16 array of length 9 is = 48 bytes. ++The size of a word16 array of length 10 is = 48 bytes. ++The size of a word16 array of length 11 is = 48 bytes. ++The size of a word16 array of length 12 is = 48 bytes. ++The size of a word8 array of length 0 is = 24 bytes. ++The size of a word8 array of length 1 is = 32 bytes. ++The size of a word8 array of length 2 is = 32 bytes. ++The size of a word8 array of length 3 is = 32 bytes. ++The size of a word8 array of length 4 is = 32 bytes. ++The size of a word8 array of length 5 is = 32 bytes. ++The size of a word8 array of length 6 is = 32 bytes. ++The size of a word8 array of length 7 is = 32 bytes. ++The size of a word8 array of length 8 is = 32 bytes. ++The size of a word8 array of length 9 is = 40 bytes. ++The size of a word8 array of length 10 is = 40 bytes. ++The size of a word8 array of length 11 is = 40 bytes. ++The size of a word8 array of length 12 is = 40 bytes. ++The size of a unit array of length 0 is = 24 bytes. ++The size of a unit array of length 1 is = 24 bytes. ++The size of a unit array of length 2 is = 24 bytes. ++The size of a unit array of length 3 is = 24 bytes. ++The size of a unit array of length 4 is = 24 bytes. ++The size of a unit array of length 5 is = 24 bytes. ++The size of a unit array of length 6 is = 24 bytes. ++The size of a unit array of length 7 is = 24 bytes. ++The size of a unit array of length 8 is = 24 bytes. ++The size of a unit array of length 9 is = 24 bytes. ++The size of a unit array of length 10 is = 24 bytes. ++The size of a unit array of length 11 is = 24 bytes. ++The size of a unit array of length 12 is = 24 bytes. ++The size of a word64 ref is = 16 bytes. ++The size of a word32 ref is = 16 bytes. ++The size of a word16 ref is = 16 bytes. ++The size of a word8 ref is = 16 bytes. ++The size of a unit ref is = 8 bytes. ++The size of a double array of length 10 is = 104 bytes. ++The size of a (word32 * double) array of length 10 is = 184 bytes. ++The size of a (word32 * word32 * double) array of length 10 is = 184 bytes. ++The size of a (word64 * double) array of length 10 is = 184 bytes. ++The size of a (word16 * double) array of length 10 is = 184 bytes. ++The size of a word64 array of length 10 is = 104 bytes. ++The size of a (word32 * word64) array of length 10 is = 184 bytes. ++The size of a (word32 * word32 * word64) array of length 10 is = 184 bytes. ++The size of a (word64 * word64) array of length 10 is = 184 bytes. ++The size of a (word16 * word64) array of length 10 is = 184 bytes. ++The size of an array of length 10 of 2-ples of ints is = 104 bytes. ++The size of an array of length 10 of 2-ples of (shared) ints is = 104 bytes. ++The size of an array of length 10 of arrays of length 20 of ints is = 1144 bytes. ++The size of an array of length 10 of (shared) arrays of length 20 of ints is = 208 bytes. ++The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1224 bytes. ++The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1224 bytes. ++The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1224 bytes. ++The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1224 bytes. ++The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1224 bytes. ++The size of a useless function is = 0 bytes. ++The size of an empty string is = 24 bytes. diff -Nru mlton-20130715/debian/patches/06_local_docs.diff mlton-20210117+dfsg/debian/patches/06_local_docs.diff --- mlton-20130715/debian/patches/06_local_docs.diff 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/06_local_docs.diff 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1,72 @@ +Description: Do not fetch example files from Github during build + The guide attempts to download example files from Github at build + time. Debian package builds should not attempt to access external + network resources. + . + This will break fetching from other remote repositories, e.g., + mltonlib, which happens in a few places in the guide. However, + the next upstream release (expected this month) removes these + remote fetches. +Author: Ryan Kavanagh +Forwarded: no +Last-Update: 2022-01-03 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +Index: mlton/doc/guide/bin/InclGitFile.py +=================================================================== +--- mlton.orig/doc/guide/bin/InclGitFile.py 2021-12-19 21:30:36.000000000 -0500 ++++ mlton/doc/guide/bin/InclGitFile.py 2021-12-19 21:42:52.164868746 -0500 +@@ -1,34 +1,20 @@ +-#!/usr/bin/env python3 ++#!/bin/sh ++# ++# Invocation: ++# ${SRCDIR}/doc/guide/bin/InclGitFile.py repo branch src ++# Outputs the contents of ++# url = 'https://raw.github.com/MLton/' + repo + '/' + branch + '/' + src ++# ++# We don't want to fetch from github during Debian builds, ++# so we instead just use the local version of the file. + +-import sys +-import urllib.request +-import re +- +-i = 1 +-repo = sys.argv[i] +-i += 1 +-branch = sys.argv[i] +-i += 1 +-src = sys.argv[i] +-i += 1 +-url = 'https://raw.github.com/MLton/' + repo + '/' + branch + '/' + src +-response = urllib.request.urlopen(url) +-buff = response.readlines() +- +-if len(sys.argv) > i: +- newbuff = [] +- while len(sys.argv) > i: +- lines = sys.argv[i] +- match = re.compile(r"^\s*(?P-?[0-9]+)?:(?P-?[0-9]+)?\s*$").match(lines) +- start = match.group('start') +- if start: +- start = int(start) +- end = match.group('end') +- if end: +- end = int(end) +- newbuff.extend(buff[start:end]) +- i += 1 +- buff = newbuff +- +-sys.stdout.buffer.writelines(buff) +-sys.stdout.flush() ++if test "x${1}" != "xmlton"; then ++ echo "InclGitFile.py invoked with repo ${1}; expected mlton." > /dev/stderr ++ exit 1 ++elif test "x${2}" != "xmaster"; then ++ echo "InclGitFile.py invoked with branch ${1}; expected master." > /dev/stderr ++ exit 1 ++else ++ # The path src is relative to ${SRCDIR} ++ cat $(dirname "$0")/../../../$3 ++fi diff -Nru mlton-20130715/debian/patches/07_DFSG.diff mlton-20210117+dfsg/debian/patches/07_DFSG.diff --- mlton-20130715/debian/patches/07_DFSG.diff 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/07_DFSG.diff 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1,183 @@ +Description: Handle missing non-DFSG-free files + We excluded several non-DFSG-free files from the tarball. + Update the build system to not rely or use these. + . + We disable building mlnlffigen as collateral damage from + removing ckit-lib (see dependencies in mlnlffigen/sources.mlb). + . + We comment out the paths to extracted tarballs in .gitignore + to keep the clean target from deleting them. +Author: Ryan Kavanagh +Bug-Debian: https://bugs.debian.org/998156 +Forwarded: not-needed +Last-Update: 2021-12-19 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +Index: mlton/Makefile +=================================================================== +--- mlton.orig/Makefile 2021-12-28 14:56:11.746838799 -0500 ++++ mlton/Makefile 2021-12-28 14:56:11.742838795 -0500 +@@ -106,8 +106,6 @@ + + .PHONY: libraries-no-check + libraries-no-check: +- $(MAKE) -C "$(SRC)/lib/ckit-lib" +- $(call LIBRARIES_NO_CHECK_TEMPLATE,ckit-lib,/ckit/src,) + $(call LIBRARIES_NO_CHECK_TEMPLATE,cml,,'!' -path '*/tests/*') + $(MAKE) -C "$(SRC)/lib/mllpt-lib" + $(call LIBRARIES_NO_CHECK_TEMPLATE,mllpt-lib,/ml-lpt/lib,) +@@ -126,7 +124,6 @@ + + .PHONY: libraries-check + libraries-check: +- $(call LIBRARIES_CHECK_TEMPLATE,ckit-lib) + $(call LIBRARIES_CHECK_TEMPLATE,cml) + $(call LIBRARIES_CHECK_TEMPLATE,mllpt-lib) + $(call LIBRARIES_CHECK_TEMPLATE,mlnlffi-lib) +@@ -194,7 +191,6 @@ + $(call TOOLS_TEMPLATE,mllex) + $(call TOOLS_TEMPLATE,mlyacc) + $(call TOOLS_TEMPLATE,mlprof) +- $(call TOOLS_TEMPLATE,mlnlffigen) + + .PHONY: tools-clean + tools-clean: +@@ -375,7 +371,6 @@ + MAN_PAGES := mlton.1 + MAN_PAGES := $(MAN_PAGES) \ + mllex.1 \ +- mlnlffigen.1 \ + mlprof.1 \ + mlyacc.1 + +@@ -397,7 +392,6 @@ + STRIP_PROGS := "$(TLIB)/$(MLTON_OUTPUT)$(EXE)" + STRIP_PROGS := $(STRIP_PROGS) \ + "$(TBIN)/mllex$(EXE)" \ +- "$(TBIN)/mlnlffigen$(EXE)" \ + "$(TBIN)/mlprof$(EXE)" \ + "$(TBIN)/mlyacc$(EXE)" + +Index: mlton/benchmark/Makefile +=================================================================== +--- mlton.orig/benchmark/Makefile 2021-12-28 14:56:11.746838799 -0500 ++++ mlton/benchmark/Makefile 2021-12-28 14:56:11.742838795 -0500 +@@ -27,8 +27,8 @@ + clean: + ../bin/clean + +-BENCH := barnes-hut boyer checksum count-graphs DLXSimulator even-odd fft fib flat-array hamlet imp-for knuth-bendix lexgen life logic mandelbrot matrix-multiply md5 merge mlyacc model-elimination mpuz nucleic output1 peek psdes-random ratio-regions ray raytrace simple smith-normal-form string-concat tailfib tak tensor tsp tyan vector32-concat vector64-concat vector-rev vliw wc-input1 wc-scanStream zebra zern +-FPBENCH := barnes-hut fft hamlet mandelbrot matrix-multiply nucleic ray raytrace simple tensor tsp tyan vliw zern ++BENCH := barnes-hut boyer checksum count-graphs DLXSimulator even-odd fft fib flat-array hamlet imp-for knuth-bendix lexgen life logic mandelbrot matrix-multiply merge mlyacc model-elimination mpuz nucleic output1 peek psdes-random ratio-regions ray raytrace simple smith-normal-form string-concat tailfib tak tensor tsp tyan vector32-concat vector64-concat vector-rev vliw wc-input1 wc-scanStream zebra ++FPBENCH := barnes-hut fft hamlet mandelbrot matrix-multiply nucleic ray raytrace simple tensor tsp tyan vliw + + BFLAGS := -mlton "/usr/bin/mlton" -mlton "mlton -optimize-ssa {false,true}" + BFLAGS := -wiki -mlton "/usr/bin/mlton" -mlkit -mosml -poly -smlnj +Index: mlton/benchmark/tests/raytrace.sml +=================================================================== +--- mlton.orig/benchmark/tests/raytrace.sml 2021-12-28 14:56:11.746838799 -0500 ++++ mlton/benchmark/tests/raytrace.sml 2021-12-28 14:56:11.742838795 -0500 +@@ -2371,9 +2371,7 @@ + end + structure Main = + struct +- fun doit () = +- Eval.f (Program.read (TextIO.openIn "DATA/chess.gml")) +- handle _ => () ++ fun doit () = () + + val doit = + fn n => +Index: mlton/lib/mllpt-lib/.gitignore +=================================================================== +--- mlton.orig/lib/mllpt-lib/.gitignore 2021-12-28 14:56:11.746838799 -0500 ++++ mlton/lib/mllpt-lib/.gitignore 2021-12-28 14:56:11.742838795 -0500 +@@ -1 +1 @@ +-/ml-lpt/ ++#/ml-lpt/ +Index: mlton/lib/mlrisc-lib/.gitignore +=================================================================== +--- mlton.orig/lib/mlrisc-lib/.gitignore 2021-12-28 14:56:11.746838799 -0500 ++++ mlton/lib/mlrisc-lib/.gitignore 2021-12-28 14:56:11.742838795 -0500 +@@ -1 +1 @@ +-/MLRISC/ ++#/MLRISC/ +Index: mlton/lib/smlnj-lib/.gitignore +=================================================================== +--- mlton.orig/lib/smlnj-lib/.gitignore 2021-12-28 14:56:11.746838799 -0500 ++++ mlton/lib/smlnj-lib/.gitignore 2021-12-28 14:56:11.742838795 -0500 +@@ -1 +1 @@ +-/smlnj-lib/ ++#/smlnj-lib/ +Index: mlton/lib/mllpt-lib/Makefile +=================================================================== +--- mlton.orig/lib/mllpt-lib/Makefile 2021-12-28 14:56:11.746838799 -0500 ++++ mlton/lib/mllpt-lib/Makefile 2021-12-28 14:56:11.742838795 -0500 +@@ -10,7 +10,7 @@ + ###################################################################### + ###################################################################### + +-all: ml-lpt/README ++all: + + ml-lpt/README: ml-lpt.tgz ml-lpt.patch + $(RM) ml-lpt +Index: mlton/lib/mlrisc-lib/Makefile +=================================================================== +--- mlton.orig/lib/mlrisc-lib/Makefile 2021-12-28 14:56:11.746838799 -0500 ++++ mlton/lib/mlrisc-lib/Makefile 2021-12-28 14:56:11.742838795 -0500 +@@ -12,7 +12,7 @@ + + ###################################################################### + +-all: MLRISC/README.mlton ++all: + + MLRISC/README.mlton: MLRISC.tgz MLRISC.patch + $(RM) MLRISC +Index: mlton/lib/smlnj-lib/Makefile +=================================================================== +--- mlton.orig/lib/smlnj-lib/Makefile 2021-12-28 14:56:11.746838799 -0500 ++++ mlton/lib/smlnj-lib/Makefile 2021-12-28 14:56:11.742838795 -0500 +@@ -12,7 +12,7 @@ + + ###################################################################### + +-all: smlnj-lib/README.mlton ++all: + + smlnj-lib/README.mlton: smlnj-lib.tgz smlnj-lib.patch + $(RM) smlnj-lib +Index: mlton/runtime/.gitignore +=================================================================== +--- mlton.orig/runtime/.gitignore 2021-12-28 14:56:11.746838799 -0500 ++++ mlton/runtime/.gitignore 2021-12-28 14:56:11.742838795 -0500 +@@ -3,6 +3,6 @@ + *.d + *.o + +-/gdtoa/ ++#/gdtoa/ + /c-types.h + /ml-types.h +Index: mlton/runtime/Makefile +=================================================================== +--- mlton.orig/runtime/Makefile 2021-12-28 14:56:11.746838799 -0500 ++++ mlton/runtime/Makefile 2021-12-28 14:56:23.266846837 -0500 +@@ -297,13 +297,9 @@ + gdtoa/gdtoa.h $(GDTOACFILES): gdtoa/README + @touch $@ + +-gdtoa/README: gdtoa.tgz gdtoa.may_alias-unions.patch gdtoa.rename-public-fns.patch gdtoa.hide-private-fns.patch gdtoa.hide-public-fns.patch gdtoa.include-via-gdtoa.patch +- $(GZIP) -dc gdtoa.tgz | $(TAR) xf - +- $(PATCH) -s -d gdtoa -p1 +Forwarded: not-needed +Last-Update: 2022-01-01 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +Index: mlton/Makefile +=================================================================== +--- mlton.orig/Makefile 2022-01-01 12:55:37.726343251 -0500 ++++ mlton/Makefile 2022-01-01 12:56:55.994840906 -0500 +@@ -68,7 +68,6 @@ + .PHONY: basis + basis: + $(MAKE) basis-no-check +- $(MAKE) basis-check + + .PHONY: compiler + compiler: +@@ -134,7 +133,6 @@ + .PHONY: libraries + libraries: + $(MAKE) libraries-no-check +- $(MAKE) libraries-check + + .PHONY: runtime + runtime: diff -Nru mlton-20130715/debian/patches/arm64.patch mlton-20210117+dfsg/debian/patches/arm64.patch --- mlton-20130715/debian/patches/arm64.patch 2016-12-17 02:39:49.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/arm64.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ ---- a/lib/stubs/mlton-stubs/mlton.sml -+++ b/lib/stubs/mlton-stubs/mlton.sml -@@ -158,12 +158,13 @@ - - structure Arch = - struct -- datatype t = Alpha | AMD64 | ARM | HPPA | IA64 | m68k | -+ datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k | - MIPS | PowerPC | PowerPC64 | S390 | Sparc | X86 - - val all = [(Alpha, "Alpha"), - (AMD64, "AMD64"), - (ARM, "ARM"), -+ (ARM64, "ARM64"), - (HPPA, "HPPA"), - (IA64, "IA64"), - (m68k, "m68k"), ---- a/lib/stubs/mlton-stubs/platform.sig -+++ b/lib/stubs/mlton-stubs/platform.sig -@@ -9,7 +9,7 @@ - sig - structure Arch: - sig -- datatype t = Alpha | AMD64 | ARM | HPPA | IA64 | m68k | -+ datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k | - MIPS | PowerPC | PowerPC64 | S390 | Sparc | X86 - - val fromString: string -> t option ---- a/mlton/main/main.fun -+++ b/mlton/main/main.fun -@@ -187,6 +187,7 @@ - Alpha => true - | AMD64 => true - | ARM => true -+ | ARM64 => true - | HPPA => true - | IA64 => true - | MIPS => true ---- /dev/null -+++ b/runtime/platform/arm64.h -@@ -0,0 +1 @@ -+#define MLton_Platform_Arch_host "arm64" diff -Nru mlton-20130715/debian/patches/features-fix.patch mlton-20210117+dfsg/debian/patches/features-fix.patch --- mlton-20130715/debian/patches/features-fix.patch 2016-12-09 10:11:32.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/features-fix.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -Index: mlton-20130715/runtime/cenv.h -=================================================================== ---- mlton-20130715.orig/runtime/cenv.h -+++ mlton-20130715/runtime/cenv.h -@@ -13,6 +13,7 @@ - /* GNU C Library Feature Macros */ - #define _ISOC99_SOURCE - #define _BSD_SOURCE -+#define _DEFAULT_SOURCE 1 - // #define _XOPEN_SOURCE 600 - /* Only enable _POSIX_C_SOURCE on platforms that don't have broken - * system headers. diff -Nru mlton-20130715/debian/patches/kfreebsd.patch mlton-20210117+dfsg/debian/patches/kfreebsd.patch --- mlton-20130715/debian/patches/kfreebsd.patch 2016-12-17 02:39:49.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/kfreebsd.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ ---- a/runtime/platform/freebsd.h -+++ b/runtime/platform/freebsd.h -@@ -37,9 +37,4 @@ - - #define MLton_Platform_OS_host "freebsd" - --/* This is probably debian specific, since freebsd worked w/o it before. */ --#if (defined (__FreeBSD_kernel__)) --#define getpgrp() getpgrp(getpid()) --#endif -- - extern char **environ; /* for Posix_ProcEnv_environ */ diff -Nru mlton-20130715/debian/patches/linux-pic.patch mlton-20210117+dfsg/debian/patches/linux-pic.patch --- mlton-20130715/debian/patches/linux-pic.patch 2016-12-09 10:11:32.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/linux-pic.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ ---- a/mlton/main/main.fun -+++ b/mlton/main/main.fun -@@ -886,6 +886,7 @@ - (* On ELF systems, we only need PIC for LibArchive/Library *) - | (_, _, Library) => true - | (_, _, LibArchive) => true -+ | (Linux, _, _) => true - | _ => false - val () = Control.positionIndependent := positionIndependent - diff -Nru mlton-20130715/debian/patches/mips64el.patch mlton-20210117+dfsg/debian/patches/mips64el.patch --- mlton-20130715/debian/patches/mips64el.patch 2016-12-17 02:39:49.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/mips64el.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,117 +0,0 @@ ---- a/basis-library/mlton/platform.sig -+++ b/basis-library/mlton/platform.sig -@@ -10,7 +10,7 @@ - structure Arch: - sig - datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k | -- MIPS | PowerPC | PowerPC64 | S390 | Sparc | X86 -+ MIPS | MIPS64 | PowerPC | PowerPC64 | S390 | Sparc | X86 - - val fromString: string -> t option - val host: t ---- a/basis-library/mlton/platform.sml -+++ b/basis-library/mlton/platform.sml -@@ -25,6 +25,7 @@ - (IA64, "IA64"), - (m68k, "m68k"), - (MIPS, "MIPS"), -+ (MIPS64, "MIPS64"), - (PowerPC, "PowerPC"), - (PowerPC64, "PowerPC64"), - (S390, "S390"), ---- a/basis-library/primitive/prim-mlton.sml -+++ b/basis-library/primitive/prim-mlton.sml -@@ -153,6 +153,7 @@ - | IA64 - | m68k - | MIPS -+ | MIPS64 - | PowerPC - | PowerPC64 - | S390 -@@ -169,6 +170,7 @@ - | "ia64" => IA64 - | "m68k" => m68k - | "mips" => MIPS -+ | "mips64" => MIPS64 - | "powerpc" => PowerPC - | "powerpc64" => PowerPC64 - | "s390" => S390 ---- a/bin/platform -+++ b/bin/platform -@@ -108,6 +108,9 @@ - m68k*) - HOST_ARCH=m68k - ;; -+mips64*) -+ HOST_ARCH=mips64 -+;; - mips*) - # big-endian and little-endian detect via headers - HOST_ARCH=mips ---- a/lib/stubs/mlton-stubs/mlton.sml -+++ b/lib/stubs/mlton-stubs/mlton.sml -@@ -159,7 +159,7 @@ - structure Arch = - struct - datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k | -- MIPS | PowerPC | PowerPC64 | S390 | Sparc | X86 -+ MIPS | MIPS64 | PowerPC | PowerPC64 | S390 | Sparc | X86 - - val all = [(Alpha, "Alpha"), - (AMD64, "AMD64"), -@@ -169,6 +169,7 @@ - (IA64, "IA64"), - (m68k, "m68k"), - (MIPS, "MIPS"), -+ (MIPS64, "MIPS64"), - (PowerPC, "PowerPC"), - (PowerPC64, "PowerPC64"), - (S390, "S390"), ---- a/lib/stubs/mlton-stubs/platform.sig -+++ b/lib/stubs/mlton-stubs/platform.sig -@@ -10,7 +10,7 @@ - structure Arch: - sig - datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k | -- MIPS | PowerPC | PowerPC64 | S390 | Sparc | X86 -+ MIPS | MIPS64 | PowerPC | PowerPC64 | S390 | Sparc | X86 - - val fromString: string -> t option - val host: t ---- a/mlton/main/main.fun -+++ b/mlton/main/main.fun -@@ -191,6 +191,7 @@ - | HPPA => true - | IA64 => true - | MIPS => true -+ | MIPS64 => true - | Sparc => true - | S390 => true - | _ => false ---- a/runtime/cenv.h -+++ b/runtime/cenv.h -@@ -112,6 +112,8 @@ - #include "platform/ia64.h" - #elif (defined (__m68k__)) - #include "platform/m68k.h" -+#elif (defined (__mips64)) -+#include "platform/mips64.h" - #elif (defined (__mips__)) - #include "platform/mips.h" - #elif (defined (__powerpc64__)) ---- /dev/null -+++ b/runtime/platform/mips64.h -@@ -0,0 +1 @@ -+#define MLton_Platform_Arch_host "mips64" ---- a/runtime/platform/linux.c -+++ b/runtime/platform/linux.c -@@ -37,7 +37,7 @@ - #else - GC_handleSigProf ((code_pointer) scp->si_regs.pc); - #endif --#elif (defined (__mips__)) -+#elif (defined (__mips64)) || (defined (__mips__)) - ucontext_t* ucp = (ucontext_t*)context; - #ifdef __UCLIBC__ - GC_handleSigProf ((code_pointer) ucp->uc_mcontext.gpregs[CTX_EPC]); diff -Nru mlton-20130715/debian/patches/ppc64el.patch mlton-20210117+dfsg/debian/patches/ppc64el.patch --- mlton-20130715/debian/patches/ppc64el.patch 2016-12-17 02:39:49.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/ppc64el.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ ---- a/bin/platform -+++ b/bin/platform -@@ -115,7 +115,7 @@ - powerpc64) - HOST_ARCH=powerpc64 - ;; --ppc64) -+ppc64*) - HOST_ARCH=powerpc64 - ;; - powerpc) diff -Nru mlton-20130715/debian/patches/series mlton-20210117+dfsg/debian/patches/series --- mlton-20130715/debian/patches/series 2016-12-17 02:39:49.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/series 2022-01-04 22:50:02.000000000 +0000 @@ -1,7 +1,6 @@ -linux-pic.patch -stack-hardening.patch -features-fix.patch -ppc64el.patch -kfreebsd.patch -arm64.patch -mips64el.patch +03_kfreebsd.diff +04_mips64el.diff +05_riscv64.diff +06_local_docs.diff +07_DFSG.diff +08_postpone_tests.diff diff -Nru mlton-20130715/debian/patches/stack-hardening.patch mlton-20210117+dfsg/debian/patches/stack-hardening.patch --- mlton-20130715/debian/patches/stack-hardening.patch 2016-12-09 10:11:32.000000000 +0000 +++ mlton-20210117+dfsg/debian/patches/stack-hardening.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -Index: mlton-20130715/bin/mlton-script -=================================================================== ---- mlton-20130715.orig/bin/mlton-script -+++ mlton-20130715/bin/mlton-script -@@ -113,6 +113,7 @@ doit "$lib" \ - -target-cc-opt freebsd '-I/usr/local/include' \ - -target-cc-opt netbsd '-I/usr/pkg/include' \ - -target-cc-opt openbsd '-I/usr/local/include' \ -+ -target-cc-opt linux '-fstack-protector-strong' \ - -target-cc-opt aix '-maix64' \ - -target-cc-opt ia64 "$ia64hpux -mtune=itanium2" \ - -target-cc-opt sparc '-m32 -mcpu=v8 -Wa,-xarch=v8plusa' \ -@@ -131,7 +132,7 @@ doit "$lib" \ - -target-link-opt freebsd '-L/usr/local/lib/' \ - -target-link-opt aix '-maix64' \ - -target-link-opt ia64 "$ia64hpux" \ -- -target-link-opt linux '-Wl,-znoexecstack' \ -+ -target-link-opt linux '-Wl,-znoexecstack,-zrelro' \ - -target-link-opt mingw \ - '-lws2_32 -lkernel32 -lpsapi -lnetapi32 -lwinmm' \ - -target-link-opt mingw '-Wl,--enable-stdcall-fixup' \ -Index: mlton-20130715/runtime/Makefile -=================================================================== ---- mlton-20130715.orig/runtime/Makefile -+++ mlton-20130715/runtime/Makefile -@@ -85,6 +85,11 @@ OPTXCFLAGS := -Wdisabled-optimization -O - DEBUGXCFLAGS := -DASSERT=1 -Wno-uninitialized -O0 -g - PICXCFLAGS := - -+# Use stack hardening for the C method calls on linux -+ifeq ($(TARGET_OS), linux) -+XCFLAGS += -fstack-protector-strong -+endif -+ - # Win32&64 don't use PIC code, all other platforms do - ifeq ($(findstring $(TARGET_OS), mingw cygwin),) - PICXCFLAGS += -fPIC diff -Nru mlton-20130715/debian/README.Debian mlton-20210117+dfsg/debian/README.Debian --- mlton-20130715/debian/README.Debian 2016-12-09 10:11:32.000000000 +0000 +++ mlton-20210117+dfsg/debian/README.Debian 2022-01-04 20:01:30.000000000 +0000 @@ -3,32 +3,35 @@ NOTE TO PORTERS AND AUTOBUILDERS -MLton is self-hosting, ie building MLton requires a working ML -compiler, and the Makefiles assume that this is MLton itself. This -means MLton build-depends upon itself. Please don't whine about this -fact (eg file bugs) unless you have something constructive to suggest. +MLton is self-hosting, i.e. building MLton requires a working SML +compiler, and the Makefiles assume that this is MLton itself. This means +MLton build-depends upon itself. Please don't whine about this fact +(e.g. file bugs) unless you have something constructive to suggest. You can build MLton with older versions of itself, as long as the -command-line switches haven't changed too much. You can also -bootstrap with SML/NJ. See the User Guide for details. +command-line switches haven't changed too much. Please see the file +README.source for details on the porting process. You can also bootstrap +with SML/NJ. See the MLton User Guide for details. It is easy enough to manually build: fetch the latest linux binary tgz -from www.mlton.org, symbolic link the binaries it contains into +from http://www.mlton.org, symbolic link the binaries it contains into /usr/bin/ and its library directory as /usr/lib/mlton, and you're good to go. HARDWARE REQUIREMENTS -Compiling MLton requires at least 1024M of actual RAM. Thus, if your -machine has less than this, it is likely that self-compilation will -take a very long time due to paging. Even if you have enough memory, -there simply may not be enough available, due to memory consumed by -other processes. In this case, you may see an ``Out of memory'' -message, or self-compilation may become extremely slow. The only fix -is to make sure that enough memory is available. +Compiling MLton requires at least 1G of actual RAM on 32-bit systems and +2G of actual RAM on 64-bit systems. Thus, if your machine has less than +this, it is likely that self-compilation will take a very long time due +to paging. Even if you have enough memory, there simply may not be +enough available, due to memory consumed by other processes. In this +case, you may see an ``Out of memory'' message, or self-compilation may +become extremely slow. The only fix is to make sure that enough memory +is available. Now, get out there and have a MLton of fun! -- Barak Pearlmutter , Fri, 12 Oct 2001 11:31:16 -0600 -- Stephen Weeks , Fri, 11 Jul 2003 12:27:26 -0700 -- Wesley W. Terpstra , Tue, 13 Oct 2009 03:47:12 +0200 + -- Ryan Kavanagh Mon, 27 Dec 2021 20:59:07 -0500 diff -Nru mlton-20130715/debian/README.source mlton-20210117+dfsg/debian/README.source --- mlton-20130715/debian/README.source 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/README.source 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1,152 @@ +mlton for Debian +---------------- + +1. Repacking upstream tarballs +============================== + +The upstream mlton source tarball contains non-DFSG-free files. It also +contains nested tarballs and patches for their extracted contents. We +repack the original tarball to remove the non-DFSG-free files and to +extract the nested tarballs. (Strictly speaking, we don't bother with +sources, but just use the upstream VCS tags.) Here are the instructions +for importing a new upstream release. + +First, make sure that upstream MLton's git repository is known to your +local git clone of the Debian packaging: + + git remote add mlton https://github.com/MLton/mlton.git + +Next, fetch any known tags: + + git fetch mlton + +We now merge the desired tag into the upstream branch: + + export VERSION=202YMMDD + git switch upstream + git merge on-${VERSION}-release + # Delete previously extracted tarballs to make sure that + # files deleted upstream are deleted in the repacked tarball: + rm -fr lib/mllpt-lib/ml-lpt + rm -fr lib/mlrisc-lib/MLRISC + rm -fr lib/smlnj-lib/smlnj-lib + # Extract the nested tarballs and apply upstream's patches + make -C lib/mllpt-lib ml-lpt/README + make -C lib/mlrisc-lib MLRISC/README.mlton + make -C lib/smlnj-lib smlnj-lib/README.mlton + # You'll need to manually edit runtime/Makefile to extract + # and patch runtime/gdtoa.tgz without also compiling a bunch + # of stuff, but don't forget to revert your changes. + # Delete the nested tarballs and patches + rm lib/mllpt-lib/ml-lpt.tgz lib/mllpt-lib/ml-lpt.patch + rm lib/mlrisc-lib/MLRISC.tgz lib/mlrisc-lib/MLRISC.patch + rm lib/smlnj-lib/smlnj-lib.tgz lib/smlnj-lib/smlnj-lib.patch + rm runtime/gdtoa.tgz runtime/gdtoa.*.patch + # Delete non-DFSG-free files from unpacked tarballs + rm -fr lib/smlnj-lib/smlnj-lib/HTML4/tests/ + # We need to pass -f to git add because upstream ignores + # extracted contents via .gitignore + git add -f lib runtime + git commit -m "Repacked new upstream release ${VERSION}" + git tag -s "upstream/${VERSION}+dfsg" + +Now we can merge in back into the desired packaging branch, e.g.: + + git switch debian/unstable + git merge upstream/${VERSION}+dfsg + +2. Rebootstrapping +================== + +MLton, as with most SML compilers, requires a SML compiler to compile +itself. If ever mlton becomes uninstallable, you will need to compile +it with the last installable version. Unfortunately, + + Building the runtime system requires compiling and executing + programs that determine characteristics of the platform, which is + why it isn’t currently feasible to build the runtime system on the + host machine using a cross-compiler toolchain. + +per doc/guide/src/CrossCompiling.adoc. This means that you cannot use +sbuild to locally cross-compile for a different architecture, and that +you will have to manually build the package on that architecture. +Assuming you have access to a porterbox of that architecture and that it +has sbuild, here are some instructions you can use: + +1. Fetch last working version +----------------------------- + +Use debsnap or some other mechanism to fetch the last installable +version of mlton (prune the list of packages down to those you need): + + mkdir mlton-bootstrap-debs + for p in \ + mlton \ + mlton-basis \ + mlton-compiler \ + mlton-runtime-aarch64-linux-gnu \ + mlton-runtime-arm-linux-gnueabi \ + mlton-runtime-arm-linux-gnueabihf \ + mlton-runtime-hppa-linux-gnu \ + mlton-runtime-i486-kfreebsd-gnu \ + mlton-runtime-i486-linux-gnu \ + mlton-runtime-mips-linux-gnu \ + mlton-runtime-mips64el-linux-gnuabi64 \ + mlton-runtime-mipsel-linux-gnu \ + mlton-runtime-native \ + mlton-runtime-powerpc-linux-gnu \ + mlton-runtime-powerpc64le-linux-gnu \ + mlton-runtime-s390x-linux-gnu \ + mlton-runtime-x86-64-kfreebsd-gnu \ + mlton-runtime-x86-64-linux-gnu \ + mlton-tools; do \ + debsnap --force -d mlton-bootstrap-debs --binary $p VERSION; \ + done + +2. Force schroot to use the downloaded binaries +----------------------------------------------- + +We need to pin the old version so that apt in the build environment +doesn't complain about dependencies being uninstallable. + + schroot -c mychroot -u root -- + for p in \ + mlton \ + mlton-basis \ + mlton-compiler \ + mlton-runtime-aarch64-linux-gnu \ + mlton-runtime-arm-linux-gnueabi \ + mlton-runtime-arm-linux-gnueabihf \ + mlton-runtime-hppa-linux-gnu \ + mlton-runtime-i486-kfreebsd-gnu \ + mlton-runtime-i486-linux-gnu \ + mlton-runtime-mips-linux-gnu \ + mlton-runtime-mips64el-linux-gnuabi64 \ + mlton-runtime-mipsel-linux-gnu \ + mlton-runtime-native \ + mlton-runtime-powerpc-linux-gnu \ + mlton-runtime-powerpc64le-linux-gnu \ + mlton-runtime-s390x-linux-gnu \ + mlton-runtime-x86-64-kfreebsd-gnu \ + mlton-runtime-x86-64-linux-gnu \ + mlton-tools; do \ + cat <>/etc/apt/preferences +Package: $p +Pin: version VERSION +Pin-Priority: 999 + +EOF + done + +3. Building the package +----------------------- + +We can point sbuild to the binaries we downloaded in step 1. The +pinning in step 2 ensures that these are installed, instead of the +broken or missing binaries currently in the archives: + + export DEB_BUILD_OPTS=nocheck + sbuild --no-clean-source --no-arch-all-d unstable \ + --extra-package=../mlton-bootstrap-bins/ + + -- Ryan Kavanagh Sat, 31 Dec 2021 10:21:23 -0500 diff -Nru mlton-20130715/debian/rules mlton-20210117+dfsg/debian/rules --- mlton-20130715/debian/rules 2016-12-18 21:48:17.000000000 +0000 +++ mlton-20210117+dfsg/debian/rules 2022-01-04 23:06:41.000000000 +0000 @@ -1,38 +1,47 @@ #!/usr/bin/make -f -include /usr/share/cdbs/1/rules/debhelper.mk -include /usr/share/cdbs/1/class/makefile.mk -include /usr/share/cdbs/1/rules/patchsys-quilt.mk - -# MLton compiles optimized, debug, and pic versions on its own. -DEB_MAKE_INVOKE = $(DEB_MAKE_ENVVARS) make -C $(DEB_BUILDDIR) - -# The MLton guide is html. Don't compress example .sml files. -DEB_COMPRESS_EXCLUDE_ALL = mlton/guide .sml - -DEB_MAKE_CLEAN_TARGET = clean -DEB_MAKE_BUILD_TARGET = all -DEB_MAKE_INSTALL_TARGET = install-no-strip DESTDIR=$(CURDIR)/debian/tmp/ PREFIX=/usr MAN_PREFIX_EXTRA=/share -DEB_MAKE_CHECK_TARGET = check - -DEB_DH_STRIP_ARGS_DEFAULT = --no-automatic-dbgsym - -# Useful when inspecting build logs -common-configure-arch:: - free - -# Move MLton target to per-architecture path -common-install-arch:: - mv $(CURDIR)/debian/tmp/usr/lib/mlton/targets/self $(CURDIR)/debian/tmp/usr/lib/mlton/targets/$(DEB_HOST_MULTIARCH) - ln -s $(DEB_HOST_MULTIARCH) $(CURDIR)/debian/tmp/usr/lib/mlton/targets/self - -# Remove licenses and empty directories to appease lintian -common-install-indep:: - rm README; cp doc/README . - rm -f $(CURDIR)/debian/tmp/usr/lib/mlton/sml/smlnj-lib/HTML4/helper.py # we don't need a python dependency for an unrelated helper script - rm -f $(CURDIR)/debian/tmp/usr/lib/mlton/sml/smlnj-lib/HTML4/tests/test001.html # would reveal user IP if loaded due to external validation image - find $(CURDIR)/debian/tmp -type d -empty -delete - if test -n "$(DEB_ISNATIVE)"; then mv \ - $(CURDIR)/debian/tmp/usr/share/doc/mlton/changelog \ - $(CURDIR)/debian/tmp/usr/share/doc/mlton/changelog.PreviousRelease; \ - fi +export DEB_BUILD_MAINT_OPTIONS = hardening=+all +DPKG_EXPORT_BUILDFLAGS = 1 +DPKG_EXPORT_BUILDTOOLS = 1 +include /usr/share/dpkg/buildflags.mk +include /usr/share/dpkg/buildtools.mk +include /usr/share/dpkg/pkg-info.mk + +COMMON_OPTS=CC=$(CC) \ + DESTDIR=$(CURDIR)/debian/tmp \ + MLTON_VERSION=$(DEB_VERSION) \ + PREFIX=/usr +MLTON_FLAGS=-as-opt '$(ASFLAGS)' -cc-opt '$(CFLAGS)' -link-opt '$(LDFLAGS)' + +%: + dh $@ + +override_dh_auto_build-arch: + $(MAKE) MLTON_COMPILE_ARGS="$(MLTON_FLAGS)" $(COMMON_OPTS) all + +override_dh_auto_build-indep: + $(MAKE) $(COMMON_OPTS) docs + #$(MAKE) -C doc/guide mlton-guide.pdf + +override_dh_auto_install-arch: + $(MAKE) $(COMMON_OPTS) install-no-strip + +override_dh_auto_install-indep: + $(MAKE) $(COMMON_OPTS) install-docs + +override_dh_compress: + dh_compress -Xmlton/guide -X.sml + +override_dh_strip: + dh_strip --no-automatic-dbgsym + +override_dh_missing-indep: + # The files under usr/lib/mlton/targets/self get installed into + # the mlton-runtime-* packages, which are not arch-indep. + # Exclude / ignore them when building with only -A. + dh_missing -Xusr/lib/mlton/targets/self + +override_dh_auto_test-arch: + $(MAKE) $(COMMON_OPTS) check + $(MAKE) $(COMMON_OPTS) basis-check + $(MAKE) $(COMMON_OPTS) libraries-check diff -Nru mlton-20130715/debian/watch mlton-20210117+dfsg/debian/watch --- mlton-20130715/debian/watch 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/debian/watch 2022-01-04 20:01:30.000000000 +0000 @@ -0,0 +1,8 @@ +# Compulsory line, this is a version 4 file +version=4 + +# GitHub hosted projects +opts="dversionmangle=s/\+dfsg\d*$//, \ + mode=git, gitmode=full, pgpmode=none" \ + https://github.com/MLton/mlton/ \ + refs/tags/on-@ANY_VERSION@-release diff -Nru mlton-20130715/doc/changelog mlton-20210117+dfsg/doc/changelog --- mlton-20130715/doc/changelog 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/changelog 1970-01-01 00:00:00.000000000 +0000 @@ -1,2544 +0,0 @@ -Here are the changes from version 2010608 to version 20130715. - -Summary: - + Compiler. - o Cosmetic improvements to type-error messages. - o Removed features: - * Bytecode codegen: The bytecode codegen had not seen significant - use and it was not well understood by any of the active - developers. - * Support for .cm files as input: The ML Basis system provides - much better infrastructure for "programming in the very large" - than the (very) limited support for CM. The cm2mlb tool - (available in the source distribution) can be used to convert - CM projects to MLB projects, preserving the CM scoping of - module identifiers. - o Bug fixes: see changelog - + Runtime. - o Bug fixes: see changelog - + Language. - o Interpret (*#line line:col "file" *) directives as relative file - names. - o ML Basis annotations. - * Added: resolveScope - + Libraries. - o Basis Library. - * Improved performance of String.concatWith. - * Use bit operations for REAL.class and other low-level operations. - * Support additional variables with Posix.ProcEnv.sysconf. - * Bug fixes: see changelog - o MLton structure. - * Removed: MLton.Socket - o Other libraries. - * Updated: ckit library, MLRISC library, SML/NJ library - * Added: MLLPT library - + Tools. - o mllex - * Generate (*#line line:col "file.lex" *) directives with simple - (relative) file names, rather than absolute paths. - o mlyacc - * Generate `(*#line line:col "file.grm" *)` directives with simple - (relative) file names, rather than absolute paths. - * Fixed bug in comment-handling in lexer. - -* 2013-07-06 - - Update SML/NJ libraries to SML/NJ 110.76. - -* 2013-06-19 - - Upgrade gdtoa.tgz; fixed bug in - 'Real32.{fmt,toDecimal,toString}', which in some cases produced - too many digits - -* 2013-06-18 - - Removed MLton.Socket structure (deprecated in last release). - -* 2013-06-10 - - Improved performance of String.concatWith. - -* 2013-05-22 - - Update SML/NJ libraries to SML/NJ 110.75. - -* 2013-04-30 - - Detect PowerPC 64 architecture. - -* 2012-10-09 - - Fixed bug in elaboration that erroneously accepted the following: - signature S = sig structure A : sig type t end - and B : sig type t end where type t = A.t end - -* 2012-09-04 - - Introduce an MLB annotation to control overload and flex record - resolution scope: "resolveScope {strdec|dec|topdec|program}". - -* 2012-07-04 - - Simplify use of 'getsockopt' and 'setsockopt'in Basis Library. - - Direct implementation of Socket.Ctl.{getATMARK,getNREAD} in - runtime system, rather than indirect implementation in Basis - Library via 'ioctl'. - - Replace use of casting through a union with memcpy in runtime. - -* 2012-06-11 - - Use bit operations for REAL.class and other low-level operations. - - Fixed bugs in REAL.copySign, REAL.signBit, and REAL.{to,from}Decimal. - -* 2012-06-01 - - Cosmetic improvements to type-error messages. - - Fixed bug in elaboration that erroneously rejected the following: - datatype ('a, ''a) t = T - type ('a, ''a) u = unit - and erroneously accepted the following: - fun f (x: 'a) : ''a = x - fun g (x: 'a) : ''a = if x = x then x else x - -* 2012-02-24 - - Fixed bug in redundant SSA optimization. - -* 2011-06-20 - - Support additional variables with Posix.ProcEnv.sysconf. - -* 2011-06-17 - - Change mllex and mlyacc to generate #line directives with simple - file names, rather than absolute paths. - - Interpret "#line" directives as relative file names. - -* 2011-06-14 - - Fixed bug in SSA/SSA2 shrinker that could erroneously turn a - non-tail function call with a Bug transfer as its continuation - into a tail function call. - -* 2011-06-11 - - Update SML/NJ libraries to SML/NJ 110.73 and add ML-LPT library. - -* 2011-06-10 - - Fixed bug in translation from SSA2 to RSSA with case expressions - over non-primitive-sized words. - - Fixed bug in SSA/SSA2 type checking of case expressions over - words. - -* 2011-06-04 - - Upgrade gdtoa.tgz. - - Remove bytecode codegen. - - Remove support for .cm files as input. - -* 2011-05-03 - - Fixed a bug with the treatment of as-patterns, which should not - allow the redefinition of constructor status. - -* 2011-02-18 - - Fixed bug with treatment of nan in common subexpression - elimination SSA optimization. - -* 2011-02-18 - - Fixed bug in translation from SSA2 to RSSA with weak pointers. - -* 2011-02-05 - - Fixed bug in amd64 codegen calling convention for varargs C calls. - -* 2011-01-17 - - Fixed bug in comment-handling in lexer for mlyacc's input language. - -* 2010-06-22 - - Fixed bug in elaboration of function clauses with different numbers - of arguments that would raise an uncaught Subscript exception. - --------------------------------------------------------------------------------- - -Here are the changes from version 20070826 to version 20100608. - -Summary: - + New platforms. - o ia64-hpux - o powerpc64-aix - + Compiler. - o Command-line switches. - * Added: -mlb-path-var ' ' - * Removed: -keep sml, -stop sml - o Improved constant folding of floating-point operations. - o Experimental: Support for compiling to a C library; see wiki - documentation. - o Extended -show-def-use output to include types of variable - definitions. - o Deprecated features (to be removed in a future release) - * Bytecode codegen: The bytecode codegen has not seen significant - use and it is not well understood by any of the active - developers. - * Support for .cm files as input: The ML Basis system provides - much better infrastructure for "programming in the very large" - than the (very) limited support for CM. The cm2mlb tool - (available in the source distribution) can be used to convert - CM projects to MLB projects, preserving the CM scoping of - module identifiers. - o Bug fixes: see changelog - + Runtime. - o @MLton switches. - * Added: may-page-heap {false|true} - o may-page-heap: By default, MLton will not page the heap to disk - when unable to grow the heap to accomodate an allocation. - (Previously, this behavior was the default, with no means to - disable, with security an least-surprise issues.) - o Bug fixes: see changelog - + Language. - o Allow numeric characters in ML Basis path variables. - + Libraries. - o Basis Library. - * Bug fixes: see changelog. - o MLton structure. - * Added: MLton.equal, MLton.hash, MLton.Cont.isolate, - MLton.GC.Statistics, MLton.Pointer.sizeofPointer, - MLton.Socket.Address.toVector - * Changed: - * Deprecated: MLton.Socket - o Unsafe structure. - * Added versions of all of the monomorphic array and vector - structures. - o Other libraries. - * Updated: ckit library, MLRISC library, SML/NJ library. - + Tools. - o mllex - * Eliminated top-level 'type int = Int.int' in output. - * Include (*#line line:col "file.lex" *) directives in output. - * Added %posint command, to set the yypos type and allow the - lexing of multi-gigabyte files. - o mlnlffigen - * Added command-line switches -linkage archive and -linkage shared. - * Deprecated command-line switch -linkage static. - * Added support for ia64 and hppa targets. - o mlyacc - * Eliminated top-level 'type int = Int.int' in output. - * Include (*#line line:col "file.grm" *) directives in output. - -* 2010-05-12 - - Fixed bug in the mark-compact garbage collector where the C - library's memcpy was used to move objects during the compaction - phase; this could lead to heap corruption and segmentation faults - with newer versions of gcc and/or glibc, which assume that src and - dst in a memcpy do not overlap. - -* 2010-03-12 - - Fixed bug in elaboration of datatype declarations with withtype - bindings. - -* 2009-12-11 - - Fixed performance bug in ref flatten SSA2 optimization. - -* 2009-12-09 - - Fixed performance bug in simplify types SSA optimization. - -* 2009-12-02 - - Fixed bug in amd64 codegen register allocation of indirect C calls. - -* 2009-09-17 - - Fixed bug in IntInf.scan and IntInf.fromString where leading - spaces were only accepted if the stream had an explicit sign - character. - -* 2009-07-10 - - Added combine conversions SSA optimization. - -* 2009-06-09 - - Removed deprecated command line switch -show-anns {false, true}. - -* 2009-04-18 - - Removed command line switches -keep sml and -stop sml. Their - meaning was unclear with .mlb files; their effect with .cm files - can be achieved with -stop f. - -* 2009-04-16 - - Fixed bug in IntInf.~>> that could cause a glibc assertion - failure. - -* 2009-04-01 - - Fixed exported type of MLton.Process.reap. - -* 2009-01-27 - - Added MLton.Socket.Address.toVector to get the network-byte-order - representation of an IP address. - -* 2008-11-10 - - Fixed bug in MLton.size and MLton.share when tracing the current - stack. - -* 2008-10-27 - - Fixed phantom typing of sockets by hiding the representation of socket - types. Previously the representation of sockets was revealed rendering - the phantom types useless. - -* 2008-10-10 - - Fixed bug in nexted _export/_import functions. - -* 2008-09-12 - - Improved constant folding of floating point operations. - -* 2008-08-20 - - Store the card/cross map at the end of the allocated ML heap; - avoids possible out of memory errors when resizing the ML heap - cannot be followed by a card/cross map allocation. - -* 2008-07-24 - - Added support for compiling to a C library. The relevant new compiler - options are '-ar' and '-format'. Libraries are named based on the - name of the -export-header file. Libraries have two extra methods: - * NAME_open(argc, argv) initializes the library and runs the SML code - until it reaches the end of the program. If the SML code exits or - raises an uncaught exception, the entire program will terminate. - * NAME_close() will execute any registered atExit functions, any - outstanding finalizers, and frees the ML heap. - -* 2008-07-16 - - Fixed bug in the name mangling of _import-ed functions with the - stdcall convention. - -* 2008-06-12 - - Added MLton.Pointer.sizeofPointer. - -* 2008-06-06 - - Added expert command line switch -emit-main {true|false}. - -* 2008-05-17 - - Fixed bug in Windows code to page the heap to disk when unable to - grow the heap to a desired size. - Thanks to Sami Evangelista for the bug report. - -* 2008-05-10 - - Implemented MLton.Cont.isolate. - -* 2008-04-20 - - Fixed bug in *NIX code to page the heap to disk when unable to - grow the heap to a desired size. - Thanks to Nicolas Bertolotti for the bug report and patch. - -* 2008-04-07 - - More flexible active/paused stack resizing policy. - Removed thread-shrink-ratio runtime option. - Added stack-current-grow-ratio, stack-current-max-reserved-ratio, - stack-current-permit-ratio, stack-current-shrink-ratio, - stack-max-reserved-ratio, and stack-shrink-ratio runtime options. - -* 2008-04-07 - - Fixed bugs in Basis Library where the representations of - OS.IO.iodesc, Posix.IO.file_desc, Posix.Signal.signal, - Socket.sock, Socket.SOGK.sock_type as integers were exposed. - -* 2008-03-14 - - Added unsafe versions of all of the monomorphic array and vector - structures. - -* 2008-03-02 - - Fixed bug in Basis Library where the representation of - OS.Process.status as an integer was exposed. - -* 2008-02-13 - - Fixed space-safety bug in pass to flatten refs into containing - data structure. Thanks to Daniel Spoonhower for the bug report - and initial diagnosis and patch. - -* 2008-01-25 - - Various updates to GC statistics gathering. Some basic GC - statistics can be accessed from SML by MLton.GC.Statistics.* - functions. - -* 2008-01-24 - - Added primitive (structural) polymorphic hash. - -* 2008-01-21 - - Fixed frontend to accept "op longvid" patterns and expressions. - Thanks to Florian Weimer for the bug report. - -* 2008-01-17 - - Extended -show-def-use output to include types of variable - definitions. - -* 2008-01-09 - - Extended MLton_equal to be a structural equality on all types, - including real and -> types. - -* 2007-12-18 - - Changed ML-Yacc and ML-Lex to output line directives so that - MLton's def-use information points to the source files (.grm - and .lex) instead of the generated implementations (.grm.sml - and .lex.sml). - -* 2007-12-14 - - Added runtime option 'may-page-heap {false|true}'. By default, - MLton will not page the heap to disk when unable to grow the heap - to a desired size. (Previously, this behavior was the default, - with no means to disable, with security and least-surprise - concerns.) - Thanks to Wesley Terpstra for the patch. - - Fixed bug the FFI visible representation of Int16.int ref (and - references of other primitive types smaller than 32-bits) on - big-endian platforms. - Thanks to Dave Herman for the bug report. - -* 2007-12-13 - - Fixed bug in ImperativeIOExtra.canInput (TextIO.canInput). - Thanks to Ville Laurikari for the bug report. - -* 2007-12-09 - - Better constant folding of IntInf operations. - -* 2007-12-07 - - Fixed bug in algebraic simplification of real primitives. - Real.<= (x, x) is false when x is NaN. - -* 2007-11-29 - - Fixed bug in type inference of flexible records. This would - later cause the compiler to raise the TypeError exception. - Thanks to Wesley Terpstra for the bug report. - -* 2007-11-28 - - Fixed bug in cross-compilation of gdtoa library. Thanks to - Wesley Terpstra for the bug report and patch. - -* 2007-11-20 - - Fixed bug in pass to flatten refs into containing data structure. - Thanks to Ruy LeyWild for the bug report. - -* 2007-11-19 - - Fixed bug in the handling of weak pointers by the mark-compact - garbage collector. Thanks to Sean McLaughlin for the bug report - and Florian Weimer for the initial diagnosis. - -* 2007-11-07 - - Added %posint command to ml-lex, to set the yypos type and allow - the lexing of multi-gigabyte input files. Thanks to Florian - Weimer for the feature concept and original patch. - -* 2007-11-07 - - Added command-line switch -mlb-path-var ' ' for - specifying MLB path variables. - -* 2007-11-06 - - Allow numeric characters in MLB path variables. - -* 2007-09-20 - - Fixed bug in elaboration of structures with signature - constraints. This would later cause the compiler to raise the - TypeError exception. Thanks to Vesa Karvonen for the bug report. - -* 2007-09-11 - - Fixed bug in interaction of _export-ed functions and signal - handlers. Thanks to Sean McLaughlin for the bug report. - -* 2007-09-03 - - Fixed bug in implementation of _export-ed functions using 'char' - type. Thanks to Katsuhiro Ueno for the bug report. - --------------------------------------------------------------------------------- - -Here are the changes from version 20051202 to version 20070826. - -Summary: - + New platforms: - o amd64-linux, amd64-freebsd - o hppa-hpux - o powerpc-aix - o x86-darwin (Mac OS X) - + Compiler. - o Support for 64-bit platforms. - * Native amd64 codegen. - o Command-line switches. - * Added: -codegen amd64, -codegen x86, -default-type , - -profile-val {false|true}. - * Changed: -stop f (file listing now includes .mlb files) - o Bytecode codegen. - * Support for profiling. - * Support for exception history. - + Language. - o ML Basis annotations. - * Removed: allowExport, allowImport, sequenceUnit, warnMatch. - + Libraries. - o Basis Library. - * Added: PackWord16Big, PackWord16Little, PackWord64Big, - PackWord64Little. - * Bug Fixes: see changelog. - o MLton structure. - * Added: MLTON_MONO_ARRAY, MLTON_MONO_VECTOR, MLTON_REAL, - MLton.BinIO.tempPrefix, MLton.CharArray, MLton.CharVector, - MLton.IntInf.BigWord, MLton.IntInf.SmallInt, - MLton.Exn.defaultTopLevelHandler, - MLton.Exn.getTopLevelHandler, MLton.Exn.setTopLevelHandler, - MLton.LargeReal, MLton.LargeWord, MLton.Real, MLton.Real32, - MLton.Real64, MLton.Rlimit.Rlim, MLton.TextIO.tempPrefix, - MLton.Vector.create, MLton.Word.bswap, MLton.Word8.bswap, - MLton.Word16, MLton.Word32, MLton.Word64, MLton.Word8Array, - MLton.Word8Vector. - * Changed: MLton.Array.unfoldi, MLton.IntInf.rep, MLton.Rlimit, - MLton.Vector.unfoldi. - * Deprecated: MLton.Socket - o Other libraries. - * Added: MLRISC libary. - * Updated: ckit library, SML/NJ library. - + Tools. - -* 2007-08-12 - - Removed deprecated ML Basis annotations. - -* 2007-08-06 - - Fixed bug in treatment of Real.{scan,fromString} operations. - Real.{scan,fromString} were using TO_NEAREST semantics, but - should obey current rounding mode. (Only Real.fromDecimal is - specified to always have TO_NEAREST semantics.) Thanks to Sean - McLaughlin for the bug report. - -* 2007-07-27 - - Fixed bugs in constant-folding of floating-point operations with C - codegen. - -* 2007-07-26 - - Fixed bug in treatment of floating-point operations. Floating-point - operations depend on the current rounding mode, but were being - treated as pure. Thanks to Sean McLaughlin for the bug report. - -* 2007-07-13 - - Added MLton.Exn.{default,get,set}TopLevelHandler. - -* 2007-07-12 - - Restored native option to -codegen flag. - -* 2007-07-11 - - Fixed bug in Real32.toInt: conversion of real values close to - Int.maxInt could be incorrect. - -* 2007-07-07 - - Updates to bytecode code generator: support for amd64-* targets, - support for profiling (including exception history). - - Fixed bug in Socket module of Basis Library; unmarshalling of - socket options (for get* functions) used andb rather than orb. - Thanks to Anders Petersson for the bug report (and patch). - -* 2007-07-06 - - Fixed bug in Date module of Basis Library; some functions would - erroneously raise Date when given a year <= 1900. Thanks to Joe - Hurd for the bug report. - - Fixed a long-standing bug in monomorphisation pass. Thanks to - Vesa Karvonen for the bug report. - -* 2007-05-18 - - Native amd64 code generator for amd64-* targets. - - Eliminate native option from -codegen flag. - - Add x86 and amd64 options to -codegen flag. - -* 2007-04-29 - - Improved type checking of RSSA and Machine ILs. - -* 2007-04-14 - - Fixed aliasing issues with basis/Real/*.c files. - - Added real/word casts in MLton structure. - -* 2007-04-12 - - Added primitives for bit cast of word to/from real. - - Implement PackReal{Big,Little} using PackWord{Big,Little} - and bit casts. - -* 2007-04-11 - - Move all system header #include-s to platform/ os headers. - - Use C99 , rather than custom "assert.{h,c}". - -* 2007-03-13 - - Implement PackWord{Big,Little} entirely in ML, using an ML - byte swap function. - -* 2007-02-25 - - Change amd64-* target platforms from 32-bit compatability mode - (i.e., -m32) to 64-bit mode (i.e., -m64). Currently, only the C - codegen is able to generate 64-bit executables. - -* 2007-02-23 - - Removed expert command line switch -coalesce . - - Added expert command line switch -chunkify {coalesce|func|one}. - -* 2007-02-20 - - Fixed bug in PackReal.toBytes. Thanks to Eric McCorkle for the - bug report (and patch). - -* 2007-02-18 - - Added command line switch -profile-val, to profile the evaluation of - val bindings; this is particularly useful with exception history for - debugging uncaught exceptions at the top-level. - -* 2006-12-29 - - Added command line switch -show {anns|path-map} and deprecated command - line switch -show-anns {false|true}. Use -show path-map to see the - complete MLB path map as seen by the compiler. - -* 2006-12-20 - - Changed the output of command line switch -stop f to include mlb-files. - This is useful for generating Makefile dependencies. The old output is - easy to recover if necessary (e.g. grep -v '\.mlb$'). - -* 2006-12-8 - - Added command line switches -{,target}-{as,cc,link}-opt-quote, which - pass their argument as a single argument to gcc (i.e., without - tokenization at spaces). These options support using headers and - libraries (including the MLton runtime headers and libraries) from a - path with spaces. - -* 2006-12-02 - - Extensive reorganization of garbage collector, runtime system, and - Basis Library implementation. (This is in preparation for future - 64bit support.) They should be more C standards compliant and easier - to port to new systems. - - FFI revisions - Disallow nested indirect types (e.g., int array array). - -* 2006-11-30 - - Fixed a bug in elaboration of FFI forms; unary FFI types (e.g., - array, ref, vector) could be used in places where MLton.Pointer.t was - required. This would later cause the compiler to raise the TypeError - exception, along with a lot of XML IL. - -* 2006-11-19 - - On *-darwin, work with GnuMP installed via Fink or MacPorts. - -* 2006-10-30 - - Ported to x86-darwin. - -* 2006-09-23 - - Added missing specification of find to the MONO_VECTOR signature. - -* 2006-08-03 - - Fixed a bug in the "useless" SSA optimization, caused by calling - an imported C function and then ignoring the result. - -* 2006-06-24 - - Fixed a bug in pass to flatten data structures. Thanks to Joe Hurd - for the bug report. - -* 2006-06-08 - - Fixed a bug in the native codegen's implementation of the C-calling - convention. - -* 2006-05-11 - - Ported to PowerPC-AIX. - - Fixed a bug in the runtime for the cases where nonblocking IO with - sockets was implemented using MSG_DONTWAIT. This flag does not - exist on AIX, Cygwin, HPUX, and MinGW and was previously just - ignored. Now the runtime simulates the flag for these platforms - (except MinGW, yet, where it's still ignored). - -* 2006-05-06 - - Added -default-type '' for specifying the binding of default - types in the Basis Library (e.g., Int.int). - -* 2006-04-25 - - Ported to HPPA-HPUX. - - Fixed PackReal{,32,64}{Big,Little} to follow the Basis Library - specification. - -* 2006-04-19 - - Fixed a bug in MLton.share that could cause a segfault. - -* 2006-03-30 - - Changed MLton.Vector.unfoldi to return the state in addition to the - result vector. - -* 2006-03-30 - - Added MLton.Vector.create, a more powerful vector-creation function - than is available in the basis library. - -* 2006-03-04 - - Added MLRISC from SML/NJ 110.57 to standard distribution. - -* 2006-03-03 - - Fixed bug in SSA simplifier that could eliminate an irredundant test. - -* 2006-03-02 - - Ported a bugfix from SML/NJ for a bug with the combination of withNack - and never in CML. - -* 2006-02-09 - - Support compiler specific annotations in ML Basis files. If an - annotation contains ":", then the text preceding the ":" is meant to - denote a compiler. For MLton, if the text preceding the ":" is equal - to "mlton", then the remaining annotation is scanned as a normal - annotation. If the text preceding the ":" is not-equal to "mlton", - then the annotation is ignored, and no warning is issued. - -* 2006-02-04 - - Fixed bug in elaboration of functors; a program with a very large - number of functors could exhibit the error - "ElaborateEnv.functorClosure: firstTycons". - --------------------------------------------------------------------------------- - -Here are the changes from version 20041109 to version 20051202. - -Summary: - + New license: BSD-style instead of GPL. - + New platforms: - o hppa: Debian Linux. - o x86: MinGW. - + Compiler. - o improved exception history. - o Command-line switches. - * Added: -as-opt, -mlb-path-map, -target-as-opt, -target-cc-opt. - * Deprecated: none. - * Removed: -native, -sequence-unit, -warn-match, -warn-unused. - + Language. - o FFI syntax changes and extensions. - * Added: _symbol. - * Changed: _export, _import. - * Removed: _ffi. - o ML Basis annotations. - * Added: allowFFI, nonexhaustiveExnMatch, nonexhaustiveMatch, - redundantMatch, sequenceNonUnit. - * Deprecated: allowExport, allowImport, sequenceUnit, warnMatch. - + Libraries. - o Basis Library. - * Added: Int1, Word1. - o MLton structure. - * Added: Process.create, ProcEnv.setgroups, Rusage.measureGC, - Socket.fdToSock Socket.Ctl.getError. - * Changed: MLton.Platform.Arch. - o Other libraries. - * Added: ckit library, ML-NLFFI library, SML/NJ library. - + Tools. - o updates of mllex and mlyacc from SML/NJ. - o added mlnlffigen. - o profiling supports better inclusion/exclusion of code. - -* 2005-11-19 - - Updated SML/NJ Library and CKit Library from SML/NJ 110.57. - -* 2005-11-15 - - Fixed a bug in MLton.ProcEnv.setgroups. - -* 2005-11-11 - - Fixed a bug in the interleaving of lexing/parsing and elaborating of - ML Basis files, which would raise an unhandled Force exception on - cyclic basis references. Thanks to John Dias for the bug report. - -* 2005-11-10 - - Fixed two bugs in Time.scan. One would raise Time on a string with a - large fractional component. Thanks to Carsten Varming for the bug - report. The other failed to scan strings with an explicit sign - followed by a decimal point. - -* 2005-11-03 - - Removed MLton.GC.setRusage. - - Added MLton.Rusage.measureGC. - -* 2005-09-11 - - Fixed bug in display of types with large numbers of type - variables, which could cause unhandled exception Chr. - -* 2005-09-08 - - Fixed bug in type inference of flexible records that would show up - as "Type error: variable applied to wrong number of type args". - -* 2005-09-06 - - Fixed bug in Real.signBit, which had assumed that the underlying - C signbit returned 0 or 1, when in fact any nonzero value is - allowed to indicate the signbit is set. - -* 2005-09-05 - - Added -mlb-path-map switch. - -* 2005-08-25 - - Fixed bug in MLton.Finalizable.touch, which was not keeping alive - finalizable values in all cases. - -* 2005-08-18 - - Added SML/NJ Library and CKit Library from SML/NJ 110.55 to - standard distribution. - - Fixed bug in Socket.Ctl.*, which got the endianness wrong on - big-endian machines. Thanks to Wesley Terpstra for the bug report - and fix. - - Added MLton.GC.setRusage. - - Fixed bug in mllex, which had file positions starting at 2. They - now start at zero. - -* 2005-08-15 - - Fixed bug in LargeInt.scan, which should skip leading "0x" and - "0X". Thanks to Wesley Terpstra for the bug report and fix. - -* 2005-08-06 - - Additional revisions of FFI. - Deprecated _export with incomplete annotation. - Added _address for address of C objects. - Eliminated address component of _symbol. - Changed the type of the _symbol* expression. - See documentation for more detail. - -* 2005-08-06 - - Annotation changes. - Deprecated: sequenceUnit - Added: sequenceNonUnit - -* 2005-08-03 - - Annotation changes. - Deprecated: allowExport, allowImport, warnMatch - Added: allowFFI, nonexhaustiveExnMatch, nonexhaustiveMatch, - redundantMatch - -* 2005-08-01 - - Update mllex and mlyacc with SML/NJ 110.55+ versions. This - incorporates a small number of minor bug fixes. - -* 2005-07-23 - - Fixed bug in pass to flatten refs into containing data structure. - -* 2005-07-23 - - Overhaul of FFI. - Deprecated _import of C base types. - Added _symbol for address, getter, and setter of C base types. - See documentation for more detail. - -* 2005-07-21 - - Update mllex and mlyacc with SML/NJ 110.55 versions. This - incorporates a small number of minor bug fixes. - -* 2005-07-20 - - Fixed bug in front end that allowed unary constructors to be used - without an argument in patterns. - -* 2005-07-19 - - Eliminated _ffi, which has been deprecated for some time. - -* 2005-07-14 - - Fixed bug in runtime that caused getrusage to be called on every - GC, even if timing info isn't needed. - -* 2005-07-13 - - Fixed bug in closure conversion tickled by making a weak pointer - to a closure. - -* 2005-07-12 - - Changed {OS,Posix}.Process.sleep to call nanosleep() instead of - sleep(). - - Added MLton.ProcEnv.setgroups. - -* 2005-07-11 - - InetSock.{any,toAddr} raise SysErr if port is not in [0, 2^16). - -* 2005-07-02 - - Fixed bug in Socket.recvVecFrom{,',NB,NB'}. The type was too - polymorphic and allowed the creation of a bogus sock_addr. - -* 2005-06-28 - - The front end now reports errors on encountering undefined or - cyclicly defined MLB path variables. - -* 2005-05-22 - - Fixed bug in Posix.IO.{getlk,setlk,setlkw} that caused a link-time - error: undefined reference to Posix_IO_FLock_typ. - - Improved exception history so that the first entry in the history - is the source position of the raise, and the rest is the call - stack. - -* 2005-05-19 - - Improved exception history for Overflow exceptions. - -* 2005-04-20 - - Fixed a bug in pass to flatten refs into containing data structure. - -* 2005-04-14 - - Fixed a front-end bug that could cause an internal bug message of the - form "missing flexInst". - -* 2005-04-13 - - Fixed a bug in the representation of flat arrays/vectors that - caused incorrect behavior when the element size was 2 or 4 bytes - and there were multiple components to the element (e.g. (char * - char) vector). - -* 2005-04-01 - - Fixed a bug in GC_arrayAllocate that could cause a segfault. - -* 2005-03-22 - - Added structures Int1, Word1. - -* 2005-03-19 - - Fixed a bug that caused Socket.Ctl.{get,set}LINGER to raise - Subscript. The problem was in the use of PackWord32Little.update, - which scales the supplied index by bytesPerElem. - -* 2005-03-13 - - Fixed a bug in CML mailboxes. - -* 2005-02-26 - - Fixed an off-by-one error in mkstemp defined in mingw.c. - -* 2005-02-13 - - Added mlnlffigen tool (heavily adapted from SML/NJ). - -* 2005-02-12 - - Added MLNLFFI Library (heavily adapted from SML/NJ) to standard - distribution. - -* 2005-02-04 - - Fixed a bug in OS.path.toString, which did not raise InvalidArc - when needed. - -* 2005-02-03 - - Fixed a bug in OS.Path.joinDirFile, which did not raise InvalidArc - when passed a file that was not an arc. - -* 2005-01-26 - - Fixed a front end bug that incorrectly rejected expansive valbinds - with useless bound type variables. - -* 2005-01-22 - - Fixed x86 codegen bug which failed to account for the possibility that - a 64-bit move could interfere with itself (as simulated by 32-bit - moves). - -* 2004-12-22 - - Fixed Real32.fmt StringCvt.EXACT, which had been producing too - many digits of precision because it was converting to a - Real64.real. - -* 2004-12-15 - - Replaced MLB path variable MLTON_ROOT with SML_LIB, to use a more - compiler-independent name. We will keep MLTON_ROOT aliased to - SML_LIB until after the next release. - -* 2004-12-02 - - Unix.create now works on all platforms (including Cygwin and MinGW). - -* 2004-11-24 - - Added support for MLton.Process.create, which works on all - platforms (including Windows-based ones like Cygwin and MinGW) and - allows better control over std{in,out,err} for child process. - --------------------------------------------------------------------------------- - -Here are the changes from version 20040227 to 20041109. - -Summary: - + New platforms: - o x86: FreeBSD 5.x, OpenBSD - o PowerPC: Darwin (MacOSX) - + Support for MLBasis files. - + Support for dynamic libraries. - + Support for Concurrent ML (CML). - + New structures: Int2, Int3, ..., Int31 and Word2, Word3, ..., Word31. - + A new form of profiling, -profile count. - + A bytecode generator. - + Data representation improvements. - + MLton structure changes. - o Added: share, shareAll - o Changed: Exn, IntInf, Signal, Thread. - + Command-line switch changes. - o Deprecated: - -native (use -codegen) - -sequence-unit (use -default-ann) - -warn-match (use -default-ann) - -warn-unused (use -default-ann) - o Removed: - -detect-overflow - -exn-history (use -const) - -safe - -show-basis-used - o Added: - -codegen - -const - -default-ann - -disable-ann - -profile-branch - -target-link-opt - -* 2004-09-22 - - Extended _import to support indirect function calls. - -* 2004-09-13 - - Made Date.{fromString,scan} accept a space (treated as zero) in - the first character of the day of the month. - -* 2004-09-12 - - Fixed bug in IntInf that could cause a seg fault. - - Remove MLton.IntInf.size. - -* 2004-09-05 - - Made -detect-overflow and -safe expert options. - -* 2004-08-30 - - Added val MLton.share: 'a -> unit, which maximizes sharing in a - heap object. - -* 2004-08-27 - - Fixed bug in Real.toLargeInt. It would incorrectly raise Option - instead of Overflow in the case when the real was not an INF, but - rounding produced an INF. - - Fixed bugs in Date.{fmt,fromString,scan,toString}. They - incorrectly allowed a space for the first character in the day of - the month. - -* 2004-08-18 - - Changed MLton.{Thread,Signal,World} to distinguish between - implicitly and explicitly paused threads. - -* 2004-07-28 - - Added support for programming in the large using the ML Basis - system. - -* 2004-07-11 - - Fixed bugs in ListPair.*Eq functions, which incorrectly raised - the UnequalLengths exception. - -* 2004-07-01 - - Added val MLton.Exn.addExnMessager: (exn -> string option) -> unit - -* 2004-06-23 - - Runtime system options that take memory sizes now accept a "g" - suffix indicating gigabytes. They also now take a real instead of - an integer, e.g. fixed-heap 0.5g. They also now accept uppercase, - e.g. 150M. - -* 2004-06-12 - - Added support for OpenBSD. - -* 2004-06-10 - - Added support for FreeBSD 5.x. - -* 2004-05-28 - - Deprecated the -native flag. Instead, use the new flag - -codegen {native|bytecode|C}. This is in anticipation of adding a - bytecode compiler. - -* 2004-05-26 - - Fixed a front-end bug that could cause cascading error to print a - very large and unreadable internal bug message of the form - "datatype ... realized with scheme Unknown". - -* 2004-05-17 - - Automatically restart functions in the Basis Library that correspond - directly to interruptable system calls. - -* 2004-05-13 - - Added -profile count, for dynamic counts of function calls and branches. - - Equate the types Posix.Signal.signal and Unix.signal. - -* 2004-05-11 - - Fixed a bug with -basis 1997 that would cause type errors due to - differences between types in the MLton structure and types in the - rest of the basis library. - -* 2004-05-01 - - Fixed a bug with sharing constraints in signatures that would - sometimes mistakenly treat two structures as identical when they - shouldn't have been. This would cause some programs to be - mistakenly rejected. - -* 2004-04-30 - - Added MLton.Signal.{handled,restart}. - -* 2004-04-23 - - Added Timer.checkCPUTimes, and updated the Timer structure to - match the latest basis spec. Also fixed totalCPUTimer and - totalRealTimer, which were wrong. - -* 2004-04-13 - - Added MLton.Signal.Mask.{getBlocked,isMember}. - -* 2004-04-12 - - Fix bug that mistakenly generalized variable types containing - unknown types when matching against a signature. - - Reasonable front-end error message when unification causes - recursive (circular) type. - -* 2004-04-03 - - Fixed bug in sharing constraints so that A = B = C means that all - pairs AB, AC, BC are shared, not just AB and BC. This matters in - some situations. - -* 2004-03-20 - - Fixed Time.now which was treating microseconds as nanoseconds. - -* 2004-03-14 - - Fixed SSA optimizer bug that could cause the error " has no - tyconInfo property". - -* 2004-03-11 - - Fixed Time.fromReal to raise Time, not Overflow, on - unrepresentable times. - -* 2004-03-04 - - Added structures Word2, Word3, ..., Word31. - -* 2004-03-03 - - Added structures Int2, Int3, ..., Int31. - - Fixed bug in elaboration of "and" with signatures, structures, and - functors so that it now evaluates all right-hand sides before - binding any left-hand sides. - --------------------------------------------------------------------------------- -Here are the changes from version 20030716 to 20040227. - -Summary: - + The front end now follows the Definition of SML and produces - readable error messages. - + Added support for NetBSD. - + Basis library changes tracking revisions to the specification. - + Added structures: Int64, Real32, Word64. - + File positions use Int64. - + Major improvements to -show-basis, which now displays the basis in - a very readable way with full type information. - + Command-line switch changes. - o Deprecated: -basis. - o Removed: -lib-search, -link, -may-load-world, -static. - o Added: -link-opt, -runtime, -sequence-unit, -show-def-use, - -stop tc, -warn-match, -warn-unused. - o Changed: -export-header, -show-basis, -show-basis-used. - o Renamed: -host to -target. - + FFI changes. - o Renamed _ffi as _import. - o Added cdecl and stdcall attributes to _import and _export - expressions. - + MLton structure changes. - o Added: Pointer. - o Removed: Ptrace. - o Changed: Finalizable, IntInf, Platform, Random, Signal, Word. - -* 2004-02-16 - - Changed -export-header, -show-basis, -show-basis-used to take a - file name argument, and they no longer force compilation to halt. - - Added -show-def-use and -warn-unused, which deal with def-use - information. - -* 2004-02-13 - - Added flag -sequence-unit, which imposes the constraint that in - the sequence expression (e1; e2), e1 must be of type unit. - -* 2004-02-10 - - Lots of changes to MLton.Signal: name changes, removal of - superfluous functions, additional functions. - -* 2004-02-09 - - Extended -show-basis so that when used with an input program, it - shows the basis defined by the input program. - - Added "stop" runtime argument. - - Made -call-graph {false|true} an option to mlprof that determines - whether or not a call graph file is written. - -* 2004-01-20 - - Fixed a bug in IEEEReal.{fromString,scan}, which would improperly - return INF instead of ZERO for things like "0.0000e123456789012345". - - Fixed a bug in Real.{fromDecimal,fromString,scan}, which didn't - return an appropriately signed zero for ~0.0. - - Fixed a bug in Real.{toDecimal,fmt}, which didn't correctly handle - ~0.0. - - Report a compile-time error on unrepresentable real constants. - -* 2004-01-05 - - Removed option -may-load-world. You can now use -runtime - no-load-world instead. - - Removed option -static. You can now use -link-opt -static - instead. - - Changed MLton.IntInf.size to return 0 instead of 1 on small ints. - -* 2003-12-28 - - Fixed horrible bug in MLton.Random.alphaNumString that caused it - to return 0 for all characters beyond position 11. - -* 2003-12-17 - - Removed -basis as a normal flag. It is still available as an - expert flag, but its use is deprecated. It will almost certainly - disappear after the next release. - -* 2003-12-10 - - Allow multiple @MLton -- runtime args in sequnce. This makes it - easier for scripts to prefix @MLton args without having to splice - them with other ones. - -* 2003-12-04 - - Added support for files larger than 2G. This included changing - Position from Int32 to Int64. - -* 2003-12-01 - - Added structure MLton.Pointer, which includes a type t for - pointers (memory addresses, not SML heap pointers) and operations - for loading from and storing to memory. - -* 2003-11-03 - - Fixed Timer.checkGCTime so that only the GC user time is included, - not GC system time. - -* 2003-10-13 - - Added -warn-match to control display nonexhaustive and redundant - match warnings. - - Fixed space leak in StreamIO causing the entire stream to be - retained. Thanks to Jared Showalter for the bug report and fix. - -* 2003-10-10 - - Added "-stop tc" switch to stop after type checking. - -* 2003-09-25 - - Fixed Posix.IO.getfl, which had mistakenly called fcntl with - F_GETFD instead of F_GETFL. - - Tracking basis library changes: - o Socket module datagram functions no longer return amount - written, since they always write the entire amount or fail. So, - send{Arr,Vec}To{,'} now return unit instead of int. - o Added nonblocking versions of all the send and recv functions, - as well as accept and connect. So, we now have: - acceptNB, connectNB, recv{Arr,Vec}{,From}NB{,'}, - send{Arr,Vec}{,To}NB{,'} - -* 2003-09-24 - - Tracking basis library changes: - o TextIO.inputLine now returns a string option. - o Slices used in Byte, PRIM_IO, PrimIO, Posix.IO, StreamIO - o Posix.IO.readVec raises Size, not Subscript, with negative - argument. - -* 2003-09-22 - - Fixed Real.toManExp so that the mantissa is in [0.5, 1), - not [1, 2). The spec says that 1.0 <= man * radix < radix, which - since radix is 2, implies that the mantissa is in [0.5, 1). - - Added Time.{from,to}Nanoseconds. - -* 2003-09-11 - - Added Real.realRound. - - Added Char{Array,Vector}Slice to Text. - -* 2003-09-11 - - OS.IO.poll and Socket.select now raise errors on negative - timeouts. - - Time.time is now implemented using IntInf instead of Int, which - means that a much larger range of time values is representable. - -* 2003-09-10 - - Word64 is now there. - -* 2003-09-09 - - Replaced Pack32{Big,Little} with PackWord32{Big,Little}. - - Fixed bug in OS.FileSys.fullPath, which mistakenly stopped as soon - as it hit a symbolic link. - -* 2003-09-08 - - Fixed @MLton max-heap, which was mistakenly ignored. Cleaned up - @MLton fixed-heap. Both fixed-heap and max-heap can use copying - or mark-compact collection. - -* 2003-09-06 - - Int64 is completely there. - - Fixed OS.FileSys.tmpName so that it creates the file, and doesn't - use tmpnam. This eliminates an annoying linker warning message. - -* 2003-09-05 - - Added structures {LargeInt,LargeReal,LargeWord,Word} - {Array,Array2,ArraySlice,Vector,VectorSlice} - - Fixed bug in Real.toDecimal, which return class NORMAL for - subnormals. - - Fixed bug in Real.toLargeInt, which didn't return as precise an - integer as possible. - -* 2003-09-03 - - Lots of fixes to Real functions. - o Real32 is now completely in place, except for Real32.nextAfter - on SunOS. - o Fixed Real.Math.exp on x86 to return the right value when - applied to posInf and negInf. - o Changed Real.Math.{cos,sin,tan} on x86 to always use a call to - the C math library instead of using the x86 instruction. This - eliminates some anomalies between compiling -native false and - -native true. - o Change Real.Math.pow to handle exceptional cases in the SML - code. - o Fixed Real.signBit on Sparcs. - -* 2003-08-28 - - Fixed PackReal{,64}Little to work correctly on Sparc. - - Added PackReal{,64}Big, PackReal32{Big,Little}. - - Added -runtime switch, which passes arguments to the runtime via - @MLton. These arguments are processed before command line - switches. - - Eliminated MLton switch -may-load-world. Can use -runtime - combined with new runtime switch -no-load-world to disable load - world in an executable. - -* 2003-08-26 - - Changed -host to -target. - - Split MLton.Platform.{arch,os} into MLton.Platform.{Arch,OS}.t. - -* 2003-08-21 - - Fixed bug in C codegen that would cause undefined references to - Real_{fetch,move,store} when compiling on Sparcs with -align 4. - -* 2003-08-17 - - Eliminated -link and -lib-search, which are no longer needed. - Eliminated support for passing -l*, -L*, and *.a on the command - line. Use -link-opt instead. - -* 2003-08-16 - - Added -link-opt, for passing options to gcc when linking. - -* 2003-07-19 - - Renamed _ffi as _import. The old _ffi will remain for a while, - but is deprecated and should be replaced with _import. - - Added attributes to _export and _import. For now, the only - attributes are "cdecl" and "stdcall". - --------------------------------------------------------------------------------- -Here are the changes from version 20030711 to 20030716. - -Summary: - + Fixed several serious bugs with the 20030711 release. - -* 2003-07-15 - - Fixed bug that caused a segfault when attempting to create an - array that was too large, e.g - 1 + Array.sub (Array.tabulate (valOf Int.maxInt, fn i => i), 0) - - mlton now checks the command line arguments following the file to - compile that are passed to the linker to make sure they are - reasonable. - -* 2003-07-14 - - Fixed packaging for Cygwin and Sparc to include libgmp.a. - - Eliminated bootstrap target. The Makefile automatically - determines whether to bootstrap or not. - - Fixed XML type checker bug that could cause error: empty tyvars in - PolyVal dec. - -* 2003-07-12 - - Turned off FORCE_GENERATIONAL in gc. It had been set, which - caused the gc to always use generational collection. This could - seriously slow apps down that don't need it. - --------------------------------------------------------------------------------- -Here are the changes from version 20030312 to 20030711. - -Summary: - + Added support for Sparc/SunOS using the C code generator. - + Completed the basis library implementation. At this point, the - only missing basis library function is "use". - + Added _export, which allows one to call SML functions from C. - + Added weak pointers (via MLton.Weak) and finalization (via - MLton.Finalizable). - + Added new integer modules: Int8, Int16. - + Better profiling call graphs - + Fixed conversions between reals and their decimal representations - to be correct using the gdtoa library. - -* 2003-07-07 - - Profiling improvements - o Eliminated mlton -profile-split. Added mlprof -split. Now the - profiling infrastructure keeps track of the splits and allows - one to decide which splits to make (if any) when mlprof is run, - which is much better than having to decide at compile time. - o Changed mlprof -graph to mlprof -keep, and changed the behavior - so that -keep also controls which functions are displayed in the - table. - o Eliminated mlprof -ignore: it's behavior is now subsumed by - -keep, whose meaning has changed to be more like -ignore on - nodes that are not kept. - - When calling gcc for linking, put -link args in same order as they - appeared on the MLton command line (they used to be reversed). - -* 2003-07-03 - - Making OS.Process.{atExit,exit} conform to the basis library spec - in that exceptions raised during cleaners are caught and ignored. - Also, calls to exit from cleaners cause the rest of cleaners to - run. - -* 2003-07-02 - - Fixed bug with negative IntInf constants that could cause compile - time error message: - "x86Translate.translateChunk ... strange Offset: base: ..." - - Changed argument type of MLton.IntInf.Small from word to int. - - Added fix to profiling so that the mlmon.out file is written even - when the program terminates due to running out of memory. - -* 2003-06-25 - - Added {Int{8,16},Word8}{,Array,ArraySlice,Vector,VectorSlice,Array2} - structures. - -* 2003-06-25 - - Fixed bug in IntInf.sign, which returned the wrong value for zero. - -* 2003-06-24 - - Added _export, for calling from C to SML. - -* 2003-06-18 - - Regularization of options. - -diag --> -diag-pass - -drop-pass takes a regexp - -* 2003-06-06 - - Fixed bug in OS.IO.poll that caused it to return the input event - types polled for instead of what was actually available. - -* 2003-06-04 - - Fixed bug in known case SSA optimization that could case incorrect - results in compiled programs. - -* 2003-06-03 - - Fixed bug in SSA optimizer that could cause the error message - Type error: Type.equals - {from = char vector, to = unit vector} - Type error: analyze raised exception loopStatement: ... - unhandled exception: TypeError - -* 2003-06-02 - - Fixed Real.rem to work correctly on infs and nans. - - Fixed bug in profiling that caused the function name to be omitted - on functions defined by val rec. - -* 2003-05-31 - - Fixed Real.{fmt,fromString,scan,toString} to match the basis - library spec. - - Added IEEEReal.{fromString,scan}. - - Added Real.{from,to}Decimal. - -* 2003-05-25 - - Added Real.nextAfter. - - Added OS.Path.{from,to}UnixPath, which are the identity function - on Unix. - -* 2003-05-20 - - Added type MLton.pointer, the type of C pointers, for use with the - FFI. - -* 2003-05-18 - - Fixed two bugs in type inference that could cause the compiler to - raise the TypeError exception, along with a lot of XML IL. - The type-check.sml regression contains simple examples of what - failed. - - Fixed a bug in the simplifier that could cause the message: - shrinker raised Prim.apply raised assertion failure: SmallIntInf.fromWord - -* 2003-05-15 - - Fixed bug in Real.class introduced on 04-28 that cause many - regression failures with reals when using newer gccs. - - Replaced MLton.Finalize with MLton.Finalizable, which has a more - robust approach to finalization. - -* 2003-05-13 - - Fixed bug in MLton.FFI on Cygwin that caused Thread_returnToC to - be undefined. - -* 2003-05-12 - - Added support for finalization with MLton.Finalize. - -* 2003-05-09 - - Fixed a runtime system bug that could cause a segfault. This bug - would happen after a GC during heap resizing when copying a heap, - if the heap was allocated at a very low (<10M) address. The bug - actually showed up on a Cygwin system. - -* 2003-05-08 - - Fixed bug in HashType that raised "Vector.forall2" when the - arity of a type constructor is changed by simplifyTypes, but - a newly constructed type has the same hash value. - -* 2003-05-02 - - Switched over to new layered IO implementation, which completes - the implementation of the BinIO and TextIO modules. - -* 2003-04-28 - - Fixed bug that caused an assertion failure when generating a jump - table for a case dispatch on a non-word sized index with non-zero - lower bound on the range. - -* 2003-04-24 - - Added -align {4|8}, which controls alignment of objects. With - -align 8, memory accesses to doubles are guaranteed to be aligned - mod 8, and so don't need special routines to load or store. - -* 2003-04-22 - - Fixed bug that caused a total failure of time profiling with - -native false. The bug was introduced with the C codegen - improvements that split the C into multiple files. Now, the C - codegen declares all profile labels used in each file so that they - are global symbols. - -* 2003-04-18 - - Added MLton.Weak, which supports weak pointers. - -* 2003-04-10 - - Replaced the basis library's MLton.hostType with - MLton.Platform.arch and MLton.Platform.os. - -* 2003-04 - - Added support for SPARC/SunOS using the C codegen. - -* 2003-03-25 - - Added MLton.FFI, which allows callbacks to SML from C. - -* 2003-03-21 - - Fixed mlprof so that the default -graph arg for data from - -profile-stack true is '(thresh-stack x)', not '(thresh x)'. - --------------------------------------------------------------------------------- -Here are the changes from version 20020923 to 20030312. - -Summary: - + Added source-level profiling of both time and allocation. - + Updated basis library to 2002 specification. To obtain the old - library, compile with -basis 1997. - + Added many modules to basis library: - BinPrimIO, GenericSock, ImperativeIO, INetSock, NetHostDB, - NetProtDB, NetServDB, Socket, StreamIO, TextPrimIO, UnixSock. - + Completed implementation of IntInf and OS.IO. - -* 2003-02-23 - - Replaced -profile-combine wih -profile-split. - -* 2003-02-11 - - Regularization of options. - -l --> -link - -L --> -lib-search - -o --> -output - -v --> -verbose - -* 2003-02-10 - - Added option to mlton: -profile-combine {false|true} - -* 2003-02-09 - - Added options to mlprof: -graph-title, -gray, -ignore, -mlmon, - -tolerant. - -* 2002-11 - 2003-01 - - Added source-level allocation and time profiling. This includes - the new options to mlton: -profile and -profile-stack. - -* 2002-12-28 - - Added NetHostDB,NetProtDB,NetServDB structures. - - Added Socket,GenericSock,INetSock,UnixSock structures. - -* 2002-12-19 - - Fixed bug in signal check insertion that could cause some signals - to be missed. The fix was to add a signal check on entry to each - function in addition to at each loop header. - -* 2002-12-10 - - Fixed bug in runtime that might cause the message - Unable to set cardMapForMutator. - -* 2002-11-23 - - Added support for the latest Basis Library specification. - - Added option -basis to choose Basis Library version. Currently available - basis libraries are 2002, 2002-strict, 1997, and none. - - Added IntInf.{orb,xorb,andb,notb,<<,~>>} values. - - Added OS.IO.{poll_desc,poll_info} types. - - Added OS.IO.{pollDesc,pollToIODesc,infoToPollDesc,Poll} values. - - Added OS.IO.{pollIn,pollOut,pollPri,poll,isIn,isOut,isPri} values. - - Added BinPrimIO,TextPrimIO structures. - - Added StreamIO,ImperativeIO functors. - -* 2002-11-22 - - Fixed bug that caused time profiling to fail (with a segfault) when resuming - a saved world. - -* 2002-11-07 - - Fixed bug in MLton.eq that could arise when using eq on functions. - -* 2002-11-05 - - Improvements to polymorphic equality. Equality on IntInfs, vectors, - and dataypes all do an eq test first before a more expensive comparison. - -* 2002-11-01 - - Added allocation profiling. Now, can compile with either -profile alloc - or -profile time. Renamed MLton.Profile as MLton.ProfileTime. Added - MLton.ProfileAlloc. Cleaned up and changed most mlprof option names. - -* 2002-10-31 - - Eliminated MLton.debug. - - Fixed bug in the optimizer that affected IntInf.fmt. The optimizer - had been always using base 10, instead of the passed in radix. - -* 2002-10-22 - - Fixed Real.toManExp so that the mantissa is in [1, 2), not [0.5, 1). - - Added Real.fromLargeInt, Real.toLargeInt. - - Fixed Real.split, which would return an incorrect whole part due to - the underlying primitive, Real_modf, being treated as functional instead - of side-effecting. - -* 2002-09-30 - - Fixed rpath problem with packaging. All executables in packages previously - made had included a setting for RPATH. - --------------------------------------------------------------------------------- - -Here are the changes from version 20020410 to 20020923. - -Summary: - + MLton now runs on FreeBSD. - + Major runtime system improvements. The runtime now implements - mark-compact and generational collection, in addition to the copying - collection that was there before. It automatically switches between - the the collection strategies to improve performance and to try to avoid - paging. - + Performance when compiling "-exn-history true" has been improved. - + Added IntInf.log2, MLton.GC.pack, MLton.GC.unpack. - + Fixed bug in load world that could cause "sread failed" on Cygwin. - + Fixed optimizer bug that could cause "no analyze var value property" - message. - -* 2002-09 - - Integrated Sam Rushing's changes to port MLton to FreeBSD. - -* 2002-08-25 - - Changed the implementation of exception history to be completely functional. - Now, the extra field in exceptions (when compiling -exn-history true) is a - string list instead of a string list ref, and raise conses a new exception - with a new element in the list instead of assigning to the list. This - changes the semantics of exception history (for the better) on some - programs. See regression/exnHistory3.sml for an example. It also - significantly improves performance when compiling -exn-history true. - -* 2002-07 and 2002-08 - - Added generational GC, and code to the runtime that automatically turns it - on and off. - -* 2002-08-20 - - Fixed SSA optimizer bug that could cause the following error message - x_0 has no analyze var value property - -* 2002-07-28 - - Added MLton.GC.{pack,unpack}. pack shrinks the heap so that other processes - can use the RAM, and its dual, unpack, resizes the heap to the desired size. - -* 2002-06 and 2002-07 - - Added mark compact GC. - - Changed array layout so that arrays have three, not two header words. - The new word is a counter word that preceeds the array length and header. - - Changed all header words to be indices into an array of object descriptors. - -* 2002-06-27 - - Added patches from Michael Neumann to port runtime to FreeBSD 4.5. - -* 2002-06-05 - - Output file and intermediate file are now saved in the current directory - instead of in the directory containing the input file. - -* 2002-05-31 - - Fixed bug in overloading of / so that the following now type checks: - fun f (x, y) = x + y / y - -* 2002-04-26 - - Added back max-heap runtime option. - -* 2002-04-25 - - Fixed load/save world so that they use binary mode. This should fix the - "sread failed" problem that Byron Hale saw on Cygwin that caused mlton to - fail to start. - - Added IntInf.log2. - - Changed call to linker to use libgmp.a (if it exists) instead of libgmp.so. - This is because the linker adds a dependency to a shared library even if - there are no references to it - -* 2002-04-23 - - Rewrote heap resizing code. This fixed bug that was triggered with large - heaps and could cause a spurious out of memory error. - - Removed gmp from MLton sources (again :-). - --------------------------------------------------------------------------------- - -Here are the changes from version 20011006 to version 20020410. - -* 2002-03-28 - - Added BinIO. - -* 2002-03-27 - - Regularization of options - -g --> -degug {false|true} - -h n --> -fixed-heap n - -p --> -profile {false|true} - -* 2002-03-22 - - Set up the stubs so that MLton can be compiled in the standard basis - library, with no MLton structure. Thus it is now easy to compile MLton - with an older (or newer) version of itself that has a different MLton - structure. - -* 2002-03-17 - - Added MLton.Process.{spawn,spawne,spawnp}, which use primitives when - running on Cygwin and fork/exec when running on Linux. - -* 2002-02 - 2002-03 - - Added the ability to cross-compile to Cygwin/Windows. - -* 2002-02-24 - - Added gmp back for use with Cygwin. - -* 2002-02-10 - - Reworked object header words so that Array.maxLen = valOf Int.maxInt. - Also fixed a long-standing minor bug in MLton, where - Array.array (Array.maxLen, ...) would raise Size instead of attempting - to allocate the array. It was an off-by-one error in the meaning of - Array.maxLen. - -* 2002-02-08 - - Modifications to runtime to behave better in situations where the amount of - live data is a signifant fraction of the amount of RAM, based on code from - PolySpace. MLton executables by default can now use more than the - available amount of RAM. Executables will still respect the max-heap - runtime arg if it is set. - -* 2002-02-04 - - Improvements to runtime so that it fails to get space, it attempts to get - less space instead of failing. Based on PolySpace's modifications. - - Added MLton.eq. - -* 2002-02-03 - - Added MLton.IntInf.gcd. - - Removed gmp from MLton sources. We now link with /usr/lib/gmp.a. - - Added TextIO.getPosOut. - - Renamed type MLton.Itimer.which to MLton.Itimer.t and - MLton.Itimer.whichSignal to MLton.Itimer.signal. - - Added -coalesce flag, for use with the C backend. - -* 2002-01-26 - - Added -show-basis-used, which prints out the parts of the basis library - that the input program uses. - - Changed several other flags (-print-at-fun-entry, -show-basis, -static) - to follow the {false|true} convention. - -* 2002-01-22 - - Improved MLton.profile so that multiple profile arrays can exist - simultaneously and so that the current one being used can be set from - the SML side. - -* 2002-01-18 - - The MACHINE IL has been replaced with an RSSA (representation explicit SSA) - IL and an improved MACHINE IL. - -* 2002-01-16 - - Added known case SSA optimization - -* 2002-01-14 - - Added rudimentary profiling control from with a MLton compile program via the - MLton.Profile structure. - -* 2002-01-09 - - Fixed bug in match compiler that caused case expressions on datatypes - with redundant cases to be compiled incorrectly. - -* 2002-01-08 - - Added redundant tuple construction elimination to SSA shrinker. - - Improved flatten SSA optimization. - -* 2001-12-06 - - Changed the interface for MLton.Signal. There is no longer a separate - Handler substructure. This was done so that programs that just use - default and ignore signal handlers don't bring in the entire thread - mechanism. - -* 2001-12-05 - - Added local ref elimination SSA optimization. - -* 2001-11-19 - - The CPS IL has been replaced with an SSA (static-single assignment) IL. - All of the optimizations have been ported from CPS to SSA. - -* 2001-10-24 - - Fixed bug in Thread_atomicEnd -- limit was mistakenly set to base instead of - to 0. This caused assertion failures when for executables compiled -g - because GC_enter didn't reset the limit. - - Fixed bug in register allocation of byte registers. - -* 2001-10-23 - - Added -D option to cmcat for preprocessor defines. Thanks to Anoq for - sending the code. - - Changed limit check insertion so that limit checks are only coalesced within - a single basic block -- not across blocks. This slows many benchmarks down, - but is needed to fix a bug in the way that limit checks were coalesced across - blocks. Hopefully we will figure out a better fix soon. - -* 2001-10-18 - - Fixed type inference of flexrecord so that it now follows the Definition. - Many programs containing flexrecords were incorrectly rejected. Added many - new tests to regression/flexrecord.sml. - - Changed the behavior of -keep dot combined with -keep pass for SSA passes. - Dot files are now saved for the program before and after, instead of just - after. - -* 2001-10-11 - - Fixed a bug in the type inference that caused type variables to be - mistakenly generalized. The bug was exposed in Norman Ramsey's sled.sml. - Added a test to regression/flexrecord.sml to catch the problem. - --------------------------------------------------------------------------------- - -Here are the changes from version 20010806 to version 20011006. - -Summary: - + Added MLton.Exn.history, which is similar to SMLofNJ.exnHistory. - + Support for #line directives of the form (*#line line.col "file"*). - + Performance improvements in native codegenerator. - + Bug fixes in front-end, optimizer, register allocator, - Real.{maxFinite, minPos, toManExp}, and in heap save and restore. - -* 2001-10-5 - - Fixed a bug in polymorphic layered patterns, like - val 'a a as b = [] - These would always fail due to the variable "a" not being handled correctly. - - Fixed the syntax of "val rec" so that a pattern is allowed on the left-hand - side of the =. Thus, we used to reject, but now accept, the following. - val rec a as b as c = fn _ => () - val rec a : unit -> unit : unit -> unit = fn () => () - Thanks again to Andreas Rossberg's test files. This is now tested for in - valrec.sml. - - Fixed dynamic semantics of "val rec" so that if "val rec" is used to - override constructor status, then at run time, the Bind exception is raised - as per rule 126 of the Definition. So, for example, the following program - type checks and compiles, but raises Bind at run time. - val rec NONE = fn () => () - val _ = NONE () - Again, this is checked in valrec.sml. - - Added '\r\n' to ml.lex so that Windows style newlines are acceptable in - input files. - -* 2001-10-4 - - Fixed bug in the implementation of "open" declarations, which in the case of - "open A B" had opened A and then looked up B in the resulting environment. - The correct behaviour (see rule 22 of the Definition) is to lookup each - longstrid in the current environment, and then open them all in sequence. - This is now checked for in the open.sml regression test. Thanks to Andreas - Rossberg for pointing this bug out. - - Fixed bug that caused tyvars of length 1 (i.e. ') to be rejected. This is - now checked in the id.sml regression test. Again, thanks to Andreas - Rossberg for the test. - -* 2001-10-2 - - Fixed bugs in Real.toManExp (which always returned the wrong result because - the call to frexp was not treated as side-effecting by the optimizer) and - in Real.minPos, which was zero because of a mistake with extra precision - bits. - -* 2001-10-1 - - Added MLton.Exn.history. - - Fixed register allocation bug with fucom instruction. Was - allowing fucomp when the first source was not removable. - - Changed Real.isFinite to use the C math.h finite function. This fixed the - nontermination bug which occurred in any program that used Real.maxFinite. - -* 2001-9-22 - - Bug fixes found from Ramsey's lrtl in contify.fun and unused-args.fun, both - of which caused compile-time exceptions to be raised. - -* 2001-9-21 - - Fixed MLton.World.{load,save} so that the saved world does not store the - max heap size. Instead, the max heap size is computed upon load world in - exactly the same way as at program startup. This fixes a long-standing (but - only recently noticed) problem in which mlton (which uses a saved world) - would attempt to use as much memory as was on the machine used to build - world.mlton. - -* 2001-8-29 - - Overlow checking is now on by default in the C backend. This is a huge - performance hit, but who cares, since we never use the C backend except for - testing anyways. - -* 2001-8-22 - - Added support for #line directives of the form - (*#line line.col "file"*) - These directives only affect error messages produced by the parser and - elaborator. - -* 2001-8-17 - - Fixed bug in removeUnused optimzation that caused the following program to - fail to compile. - fun f l = case l of [] => f l | _ :: l => f l - val _ = f [13] - -* 2001-8-14 - - New x86-codegen infrastructure. - o support for tracking liveness of stack slots and carrying them - in registers across basic blocks - o more specific Entry and Transfer datatypes to make calling convention - distinctions more explicit - o new heuristic for carrying values in registers across basic blocks - (look Ma, no Overflows!) - o new "predict" model for generating register allocation hints - o additional bug fixes - -* 2001-8-7 - - MLton.Socket.shutdownWrite flushes the outstream. - --------------------------------------------------------------------------------- - -Here are the changes from version 20010706 to version 20010806. - -Summary: - + Word.andb (w, 0xFF) now works correctly - + MLton.Rusage.rusage has a patch to work around a linux kernel bug - + Programs of the form "exp ; program" are now accepted - + Added the "MLton.Rlimit" structure - + Added the "-keep dot" flag, which produces call graphs, - intraprocedural control-flow graphs, and dominator trees - -* 2001-8-6 - - Added simple common block elimination CPS optimization. - -* 2001-8-2 - - Took out -keep il. - -* 2001-7-31 - - Performance improvements to TextIO.{input, output, output1} - -* 2001-7-25 - - Added redundant-test elimination CPS optimization. - -* 2001-7-21 - - Added common-subexpression elimination CPS optimization. - -* 2001-7-20 - - Bug fix to x86 codegen. The commuteBinALMD peephole optimization would - rewrite mov 2,Y; add Y,Y as mov Y,Y; add 2,Y. Now the appropriate - interference checks are made. - - Added intraprocedural unused argument removal. - - Added intraprocedural flattener. This avoids some stupid tuple - allocations in loops. Decent speedup on a few benchmarks - (count-graphs, psdes-random, wc-scanStream) and no noticeable - slowdowns. - - Added -keep dot flag. - -* 2001-7-17 - - Modified grammar to properly handle val rec. There were several problems. - o MLton had accepted "val rec 'a ..." instead of "val 'a rec ..." - o MLton had not accepted "val x = 13 and rec f = fn () => ()" - o MLton had not accepted "val rec rec f = fn () => ()" - o MLton had not accepted "val rec f = fn () => () and rec g = fn () => ()" - -* 2001-7-16 - - Workaround for Linux kernel bug that can cause getrusage to return a wrong - system time value (low by one second). See fixedGetrusage in gc.c. - - Bug fix to x86 codegen. The register allocator could get confused when - doing comparisons of floating point numbers and use the wrong operand. - The bug seems to have never been detected because it only happens when both - of the operands are already on the floating point stack, which is rare, - since one is almost always in memory since we don't carry floating point - values in the stack across basic blocks. - - Added production to the grammar on page 58 of the Definition that had been - missing from MLton since day one. - program ::= exp ; - Also updated docs to reflect change. - - Modified grammar to accept the empty program. - - Added -type-check expert flag to turn on type checking in ILs. - -* 2001-7-15 - - Bug fix to the algebraic simplifier. It had been rewriting - Word32.andb (w, 0wxFF) to w - instead of Word32.andb (w, 0wxFFFFFFFF) to w. - -* 2001-7-13 - - Improved CPS shrinker so that if-tests where the then and else branch jump - to the same label is turned into a direct jump. - - Improved CPS shrinker (Prim.apply) to handle constructors - A = A --> true - A = B --> false - A x = B y --> false - - Rewrote a lot of loops in the basis library to use inequalities instead of - equality for the loop termination test so that the (forthcoming) overflow - detection elimination will work on the loop index variable. - -* 2001-7-11 - - Fixed minor bugs in Array2.{array,tabulate}, Substring.{slice} that caused - the Overflow exception to be raised instead of Size or Subscript - - Fixed bug in Pack32Big.update that caused the wrong location to be updated. - - Fixed several bugs in Pack32{Big,Little}.{subArr,subVec,update} that caused - Overflow to be raised instead of Subscript. Also, improved the - implementation so that bounds checking only occurs once per call (instead of - four times, which was sometimes happening. - - Fixed bugs in Time.{toMilliseconds,toMicroseconds} that could cause - a spurious Overflow exception. - - Fixed bugs in Time.{fromMilliseconds,fromMicroseconds} that could cause - a spurious Time exception. - - Improved Pack32.sub* by reordering the orbs. - - Improved {Int,IntInf}.mod to increase chances of constant folding. - - Switched many uses of +, -, * in basis library to the non-overflow checked - versions. Modules changed were: Array, Array2, Byte, Char, Int, IntInf, - List, Pack32{Big,Little}, Util, String, StringCvt, Substring, TextIO, Time, - Vector. - - Added regression tests for Array2, Int (overflow checking), Pack32, - Substring, Time. - - Changed CPS output so that it includes a dot graph for each CPS function. - -* 2001-7-9 - - Change OS.Process.exit so that it raises an exception if the exit status - is not in [0, 256). - - Added MLton.Rlimit to provide access to getrlimit and setrlimit. - --------------------------------------------------------------------------------- - -Here are the changes from the 20000906 version to the 20010706 version. - -Summary: - + Native X86 code generator (instead of using gcc) - + Significantly improved compile times - + Significantly improved run times for generated executables - + Many bug fixes - + Correct raising of the Overflow exception for integer arithmetic - + New modules in the MLton structure - -* 2001-7-6 - - GC mods from Henry. Mostly adding inline declarations. - -* 2001-7-5 - - Fixed several runtime bugs involving threads, critical sections, and - signals. - -* 2001-6-29 - - Fixed performance bug in cps/two-point-lattice.fun that caused quadratic - behavior. This affects the raise-to-jump and useless analayses. In - particular, the useless analysis was blowing up when compiling fxp. - -* 2001-6-27 - - Henry improved wordAlign -- this sped up GC by 27% (during a self compile). - -* 2001-6-20 - - Moved MLton.random to MLton.Random.rand and added other stuff to - MLton.Random - - Added MLton.TextIO.mkstemp. - - Made Int.{div,quot} respect the -detect-overflow switch. - -* 2001-6-20 - - Added MLton.Syslog. - -* 2001-6-7 - - Fixed bug in MLton.Socket.accept that was in the runtime implementation - Socket_accept. It did a setsockopt SO_REUSEADDR after the accept. It - should have been after the call to socket in Socket_listen. Thanks to - Doug Bagley for the fix. - -* 2001-5-30 - - Fixed bug in remove-unused that caused polymorphic equality to return - true sometimes when constructors were never used in a pattern match. - For example, the following (in which A and B are not used as patterns): - datatype t = A | B - datatype u = C of t - val _ = if C A = C B then raise Fail "bug" else () - -* 2001-3-27 - - Fixed bug that caused all of the following to fail - {LargeWord,Word,SysWord}.{toLargeInt,toLargeIntX,fromLargeInt} - The problem was the basis library file integer/patch.sml which fixed Word32 - but not the other structures that are the same. - -* 2001-2-12 - - Fixed bug in match compiler that caused it to spend a lot of extra time in - deep patterns. It still could be exponential however. Hopefully this - will get fixed in the release after next. - This bug could cause very slow compile times in some cases. - Anyways, this fix cut the "finish infer" time of a self compile down - from 22 to under 4 seconds. I.E. most of the time used to be spent due - to this bug. - -* 2001-2-6 - - Fixed bug in frontend that caused the wrong file and line number to be - reported with errors in functor bodys. - -* 2001-1-3 - 2000-2-5 - - Changes to CoreML, XML, SXML, and CPS ILs to replace lists by vectors in - order to decrease space usage. - -* 2001-1-16 - - Fixed a bug in constant propagation where the length of vectors was not - propagated properly. - -* 2000-12-11 - 2001-1-3 - - Major rewrite of elaborator to use a single hash table for each namespace - instead of a hash table for every environment. - -* 2000-12-20 - - Fixed some bugs in the SML/NJ compatibility library, - src/lib/mlton-subs-in-smlnj. - -* 2000-12-8 - - More careful removal of tracing code when compiling MLton_debug=0. - This cut down self compile data size by 100k and compile time by a few - seconds. - - Added built in character and word cases propagated throughout all ILs. - -* 2000-12-6 - - Added max stack size information to gc-summary. - -* 2000-12-5 - - Added src/benchmark, which contains an SML program that benchmarks all of - the SML compilers I have my hands on. The script has lots of hardwired - paths for now. - -* 2000-12-4 - - Fixed bug in Posix.ProcEnv.environ, which did not work correctly in a saved - world (the original environ was saved). In fact, it did not work at all - because the ML primitive expected a constant and the C was a nullary - function. This caused a segfault with any program using - Posix.ProcEnv.environ. - - Added MLton.ProcEnv.setenv, since there doesn't seem to be any setenv in - the basis library. - -* 2000-11-29 - - Changed backend so that it should no longer generate machine programs with - void operands. - - Added -detect-overflow and -safe flags. - -* 2000-11-27 - 2000-11-28 - - Changes in many places to use List.revMap instead of List.map to cut down - on allocation. - -* 2000-11-21 - - Added MLton.Word.~ and MLton.Word8.~ to the MLton basis library structure. - -* 2000-11-20 - - Fixed a bug in the CPS shrinker that could cause a compile-time failure. - It was maintaining occurrence counts incorrectly. - -* 2000-11-15 - - Fixed a (performance) bug in constant propagation that caused the hashing - to be bad. - - Improved translation to XML so that the match compiler isn't called on - tuple or if expressions. This should speed up the translation and - make the output smaller. - - Fixed a bug in the match compiler that caused it to not generate integer - case statements. This should speed up the mlyacc benchmark and the - MLton front end. - -* 2000-11-9 - - Added IntInf_equal and IntInf_compare primitives. - - Took out the automatic -keep c when compiling -g. - -* 2000-11-8 - - Added a whole bunch of algebraic laws to the CPS shrinker, including - some specifically targeted to IntInf primitives. - -* 2000-11-3 - - Improved implementation of properties so that sets don't allocate. - - Improved implementation of type homomorphism in type inference. What - was there before appears to have been a bug -- it didn't use the property - on types. - -* 2000-11-2 - - Fixed timers used with -v option to use user + sys time. - -* 2000-10-27 - - Split the runtime basis library C files into many separate files so that - only the needed code would be included by the linker. - - Fixed several bugs in the front end grammar and elaborator that caused - type specifications to be handled incorrectly. The following three programs - used to be handled incorrectly, but are now handled correctly. - signature S = sig type t and u = int end (* reject *) - signature S = sig type t = int and u = t end (* accept *) - signature S = sig eqtype t and u = int end (* reject *) - -* 2000-10-25 - - Changes to main.sml to run complete compiles with -native switch. - -* 2000-10-24 - - Removed defunctorizer. - -* 2000-10-20 - - Fixed bug in cps-tree.fun PrimExp.maySideEffect. This bug could cause - no operand failures in the backend. - - Fixed bug in the runtime implementation of MLton.size. The size for stack - objects was using the used instead of reserved, and so was too low. - -* 2000-10-19 - - Replaced automatically generated dependencies in src/runtime/Makefile with - hand generated ones. Took out make depend from src/Makefile. makedepend - was behaving really badly on RHAT 7.0. - - Tweaked compiler to shorten width of C output lines to work around - bug in RHAT 7.0 cpp which silently truncates (very) long lines. - - Fixed bug in grammar that didn't allow "op" to occur in datatype and - exception bindings, causing the following to fail - datatype t = op T - exception op E = op Fail - - Improved error messages in CM processor. Fixed bug in CM Alias handling. - -* 2000-10-18 - - Fixed two bugs in the gc that did comparisons with (s->limit - s->frontier), - which of course doesn't work if frontier is beyond limit, since these are - unsigned. This could have caused segfaults, except that the mutator - checks the frontier upon return from the GC. - -* 2000-10-17 - - Fixed bug in backend in the calculation of maxFrameSize. It could be - wrong (low) in some situations. - - Improved CPS inliner's estimate of function sizes. The size of a function - now takes into account other inlined functions that the function calls. - This also changed the meaning of the size argument to the -inline switch. - It now corresponds (roughly) to the product of the size of the function - and the number of calls. In general, it should be larger than before. - -* 2000-10-13 - - Made some calls to Array.sub unsafe in the implementation of Array2. - - Integrated Matthew's new x86 backend with floating point support. - -* 2000-10-9 - - Fixed CM file processor so that MLton works if it is run from a different - directory than the main CM file. - -* 2000-10-4 - - Changed LimitCheck so it loops on the frontier > limit check. This fixed - a potential bug in threads caused when there is enough space available for - a thread, t, before switching to another thread but not enough space when it - resumes. This could have caused a segfault. - -* 2000-10-3 - - More rewrites of TextIO.StreamIO to improve speed. - - Changed TextIO so that only TextIO.stdErr is unbuffered. - - Changed TextIO so that FIFOs and sockets are buffered. - -* 2000-10-2 - - Combined remove-unused-constructors, remove-unused-functions, and - remove-unused-globals into a single pass that runs to fixed-point and - produces results at least as good as running the previous three in (any) - sequence. - -* 2000-9-29 - - Added GC_FIRST_CHECK, which does a gc at each limit check the first time it - reached. - - Reimplemented TextIO.StreamIO (from 2000-9-12) to use lists of strings - instead of lists of characters so that the per char space overhead is small. - -* 2000-9-21 - - Fixed bug in profiling labels in C code. The label was always the basic - block label instead of the cps function label. - - Added -b switch to mlprof to gather data at the basic block level. - - Improved performance of TextIO.input1 by about 3X. - -* 2000-9-15 - 2000-9-19 - - Added overflow exceptions to CPS and Machine ILs. - -* 2000-9-12 - - Fixed TextIO.scanStream. It was very broken. - - Added TextIO.{getInstream,mkInstream,setInstream} - TextIO.StreamIO.{canInput,closeIn,endOfStream,input1,input,inputAll, - inputLine,inputN} - -* 2000-9-11 - - Fixed Real_qequal in mlton-lib.h. It was missing a paren that caused - code using it to not even compile. It was also semantically incorrect. - - Noted that Real_{equal,lt,le,gt,ge} may not follow basis library spec, since - ANSI does not require IEEE compliance, and hence these could return wrong - results when nans are involved. - --------------------------------------------------------------------------------- - -Here are the changes from the 20000712 version to the 20000906 version. - - Version 20000906 is mostly a bugfix release over 20000712. The other major - changes are that mllex and mlyacc are now included and - that mlton can now process a limited subset of CM files as input. - -* 2000-9-6 - - Fixed Socket_listen in mlton-lib.c so that it closes the socket if the - bind, listen, or getsockname fails. This could have caused a file - descriptor leak. - -* 2000-9-5 - - Added -static commandline switch. - - Changed default max heap size to .85 RAM from .95 RAM. - - Added PackRealLittle structure to basis library. - -* 2000-8-25 - - Added cases on integers to ILs (instead of using sequences of tests) so that - backend can emit more efficient test (jump table, binary tree, ...). - -* 2000-8-24 - - Fixed bug in gc.c. dfsInitializeStack would smummap a NULL pointer whenver - toSpace was NULL. This could gause MLton.size to segfault. - - Fixed bug in Popt that caused -k to fail with no keeps. - -* 2000-8-22 - 2000-8-23 - - Ported mllex and mlyacc from SML/NJ - -* 2000-8-20 - 2000-8-21 - - Added ability to us a .cm file as input to MLton. - -* 2000-8-16 - - Ported mlprof to SML. - - Fixed bug in library/basic/assert.sml that caused asserts to be run even - when MLton.debug = false. - -* 2000-8-15 - - Fixed bug in backend -- computation of maxFrameSize was wrong. It didn't - count slots in frames that didn't make nontail calls. This could lead to - the stack being overwritten because a stack limit check didn't guarantee - enough space, and lead to a seg fault. - - Fixed bug in gc.c newThreadOfSize. If the thread allocation caused a gc, - then the stack wasn't forwarded, leading to a seg fault. The solution was - to ensure enough memory all at once, and then fill in both objects. - -* 2000-8-14 - - Changed limit checks so that checks < 512 bytes are replaced by a check for - 0. The runtime also moves the limit down by 512. This is done so that the - common case, a small limit check, has less code and is faster. - - Fixed bug in cps/cps-tree.fun Program.hasPrim returned true for any program - that had *any* primapp, not just programs satisfying the predicate. This - caused cps/once.fun to be overly conservative, since it thought that every - program used continuations. - -* 2000-8-10 - - Fixed bug in CPS typechecker. It didn't enforce that handlers should be - defined before any reference to them -- including implicit references in - HandlerPops. This caused an evil bug in the liveness analysis where a - variable that was only live in the handler was missed in a continuation - because the liveness for the handler wasn't computed yet. - - Limited the size for moving up limit checks for arrays whose size is known - at compile time to avoid huge limit checks getting moved into loops. - - added -indent, -kp, -show-types switches. - - Put optimization in CPS IL suggested by Neal Glew. It determines for each - toplevel function if it can raise an exception to its caller. Also, it - removes HanderPush and HandlerPop for handlers that are not on top of the - stack for any nontail call. - -* 2000-8-8 - - Changed register allocator so that continuation formals can be allocated in - pseudo registers -- they aren't necessarily forced to the stack. - -* 2000-8-3 - - Fixed bug in constant folding. - Word8.>> had been used to implement Word8.~>>. - - Fixed bug in allocate registers that was not forcing the size argument to - Primitive.Array.array to be a stack slot. This could cause problems if - there was a thread switch in the limit check, since upon return the size - pseudo register would have a bogus value. - -* 2000-8-1 - - Turned back on Xml simplification after monomorphisation. - -* 2000-7-31 - - Fixed bug in MLton.Itimer.set that caused the time to be doubled. - - Fixed bug in MLton.Thread that made it look like asynchronous exceptions - were allowed by throw'ing an exception raising thunk to an interrupted - thread obtained via a signal handler. Attempting asynchronous exceptions - will now cause process death, with a helpful error message. - -* 2000-7-27 - - Updated docs to include structure World: MLTON_WORLD in MLton structure. - - Added toplevel signatures MLTON_{CONT, ..., WORLD} to basis library. - - Fixed broken link in docs to CM in cmcat section. - -* 2000-7-26 - - Eliminated GC_switchToThread and Thread_switchTo1, since the inlined - version Thread_switchTo is all that's needed, and Matt's X86 backend - now handles it. - - Added MLton.Signal.vtalrm, needed for - Itimer.Set{which = Itimer.Virtual, ...} - -* 2000-7-25 - Added MLton.Socket.shutdownWrite. - -* 2000-7-21 - Updated mlton-lib.c MLton_bug with new email (MLton@sourcelight.com). - -* 2000-7-19 - Fixed Posix.Process.kill to check for errors. - -* 2000-7-18 - Fixed the following Posix.ProcEnv functions to check for errors: - setgid, setpgid, setsid, setuid. - Fixed doc/examples/callcc.sml. - --------------------------------------------------------------------------------- - -Here are the changes from the 1999-7-12 to the 20000712 version. - -* 2000-6-10 - 2000-7-12 - Too many changes to count: bug fixes, new basis library modules, - optimizer improvements. -* 2000-6-30 - Fixed bug in monomorphiser that caused programs with non-value - carrying exception declarations in polymorphic functions to have a - compile-time error because of a duplicate label. The problem was - that the exception constructor wasn't duplicated. -* 2000-5-22 - 2000-6-10 - Finished the changes for the new Cps IL. -* 2000-1-1 - Fixed some errors in the basis library. - Real.copySign - Posix.FileSys.fpathconf - Posix.IO.{lseek, getlk, setlk, setlkw} - Posix.ProcEnv.setpgid - Posix.TTY.getattr - System.FileSys.realPath -* 1999-12-22 - Fixed bug in src/closure-convert/abstract-value.fun that caused a - compiler failure whenever a program had a vector where the element - type contained an ->. -* 1999-12-10 - - Changed dead code elimination in core-ml/dead-code.fun so that - wildcard declarations (val _ = ...) in the basis are kept. - Changed places in the basis library to take advantage of this - - Added setTopLevelHander primitive so that the basis library code - can define the toplevel handler. - - Changed basis-library/misc/suffix.sml to call OS.Process.exit. - Took out Halt transfer from Cps, since the program never should - reach it. - - Cleaned up basis-library/system/{process.sml, unix.sml} to use - the new signal handling stuff. -* 1999-11-28 - 1999-12-20 - Added support for threads and cleaned up signal handling. - This involved a number of changes. - - The stack is now allocated as just another kind of heap object. - - Limit checks are inserted at all loop headers, whether or not there - is any allocation. This is to ensure that the signal handler - always has a chance to get called. - - The register allocator puts more variables in stack slots. The new - rule is that a variable goes in a stack slot if it is ever live - across a nontail call, in a handler, or (this is the new part) - across a limit check. - - Arguments are passed on the stack, with the convention determined by - argument types. - - The "locals" array of pointers that was copied to/from for GC is now - gone, because no registers (in particular no pointer valued - registers) can be live at a limit check point. -* 1999-11-21 - - Runtime system - o Fixed a bug introduced by the signal code - (presumably on 1999-8-9) that caused a gc to *not* be performed when - doing a save world. This caused the heaps created by save world to - be the same size as the heap -- not the live data. This was quite - bad. - o Cleaned up the Makefile. Add make depend. - o Added max gc pause to gc-summary info. - o Move heap translation variables that had been file statics into - the GC_state. - - Made structure Position available at toplevel. - - Basis Library - o Added MLton.loadWorld - - Added Primitive.usesCallcc - - Added Primitive.safe - - Removed special size functions from cps/save-world -- they are no - longer necessary since size doesn't do a gc. - - Fixed another (sigh) bug in cps/simplify-types.fun that could - cause it to not terminate. -* 1999-11-16 - - Cleaned up backend/machine.fun a bit so that it spits out macros - for allocation of objects and bumping of frontier. Added macros - MLTON_object and MLTON_incFrontier to include/mlton-lib.h. - - Fixed a bug in backend/limit-check.fun that caused loops to not be - detected if they were only reached by a case branch. This could - cause there to be loop that allocates with no limit check. - Needless to say, this could cause a segfault if the loop ran for - long enough. -* 1999-10-18 - Added basis library function Array2.copy. -* 1999-8-15 - Turned off globalization of ref cells - (closure-convert/globalize.fun) because it interacts badly with - serialization. -* 1999-8-13 - Fixed bug in mlton-lib.h in MLTON_allocArrayNoPointers that was - triggered when bytesPerElt == 0. The problem was that it wasn't - reserving space for the forwarding pointer. This could cause a seg - fault. -* 1999-8-8 and 1999-8-9 - Added support for signal handling. -* 1999-8-7 - Fixed bugs in Array.tabulate (and other tabulate variants) caused if - the function argument used callcc. -* 1999-8-1 - Added serialization, which was mostly code in src/runtime/gc.c. - GC_serialize converts an object to a Word8Vector.vector. - GC_deserialize undoes the conversion. - (de)Serialization should work for all objects except for functions, - because I haven't yet added the support in the flow analysis. -* 1999-7-31 - - Cleaned up the GC. Changed headers, by stealing a bit from the - number of non pointers and making it a mark bit (used in GC_size). - - Rewrote GC_size so that it runs in time proportional to the number - of pointers in the object. It does a depth-first-search now, - using toSpace to hold the stack. -* 1999-7-30 - - Fixed bug in SUBSTRING. getc had the wrong type. This bug wasn't - noticed because MLton doesn't do enough type checking. - - Fixed bug (seg fault) caused when a GC immediately followed a throw. -* 1999-7-29 - Fixed bug in Date.fmt (basis-library/system/date.sml). It was not - setting Tm.buf, and hence the time was always 0 unless there had - been a previous call to setTmBuf. -* 1999-7-28 - - Fixed bugs in Posix.IO.FLock.{getlk,setlk,setlkw}, which would - cause compilation to fail because FLock.toInt was defined as the C - castInt, which no longer exists. Instead, expand FLock.toInt to - MLTON_pointerToInt, which was added to include/mlton-lib.h. - - Changed Posix.Primitive.Flock to Posix.Primitive.FLock. - - Added MLTON_chown, MLTON_ftruncate to include/mlton-posix.h. They were - missing. This would cause compilation of any program using - Posix.FileSys.{chown,ftruncate} to fail. Also made it so all of the - primitives in basis-library/posix/primitive.sml use MLTON_ versions - of functions, even if a wrapper is unnecessary. -* 1999-7-25 - Added some other missing signature definitions to toplevel. -* 1999-7-24 - Added missing OS_* signature definitions to - basis-library/top-level/top-level.sml. -* 1999-7-19 - Fixed bug in basis-library/arrays-and-vectors/mono-array.sml. Used - :> instead of : so that the monomorphic array types are abstract. - --------------------------------------------------------------------------------- - -Here are the changes from the 1999-3-19 version to the 1999-7-12 version. - -* 1999-7-12 - Changed src/backend/machine.fun so that the 'pointer locals' array is - only as large as neccessary in order to copy all pointer-valued - locals, not as large as the number of pointer-valued locals. -* 1999-7-11 - Rewrote src/backend/allocate-registers.fun so that it does a better - job of sharing "registers" (i.e. C local variables) and stack slots. - This should cut down on the amount of copying that has to happen - before and after a gc. It should also cut down on the size of stack - slots. -* 1999-7-10 - Fixed a bug in src/backend/parallel-move.fun that should have been - triggered on most any parallel move. I guess parallel moves almost - never happened due to the old register allocation strategy -- but, - with the new one (see note for 1999-7-12) parallel moves will be - frequent. -* 1999-6-27 - Fixed src/main.sml so that when compiling -p, the .c file is compiled - -g and the .o is linked -p. - In bakend/machine.fun, added profiling comments before chunkswitches - and put in an optimization to avoid printing repeated profiling - comments. Also, profiling comments are only output when - compiling -p. -* 1999-6-17 - Changed -i to -inline, -f to -flatten, -np to -no-polyvariance, - -u to -unsafe. - Added -i, -I, -l, -L flags for includes and libraries. - Updated documentation for these options and for ffi. -* 1999-6-16 - Hardwired version number in src/control/control.sml. As it stood, - the version number was computed when MLton was built after someone - downloaded it, which was clearly wrong. -* 1999-6-16 - Fixed undefined variable time in GC_done in src/runtime/gc.c. -* 1999-6-8 - in include/mlton-lib.h, - removed #include - added #include - and deleted all of the function signatures I had copied from math.h - Changed Real.{minNormalPos, minPos, maxFinite} so that they are - computed in real.sml instead of appearing as constants in the C. -* 1999-6-7 - IntInf.pow added to basis library. -* 1999-6-4 - bin/mlton changed to use .arch-n-opsys if it exists. -* 1999-6-3 - src/Makefile changed to use sml-cm instead of sml -* 1999-5-10 - Patch to src/atoms/small-int-inf.fun to work around a bug in the SML/NJ - implementation of bignums. This bug was causing some hex bignum - constants to be lexed incorrectly. -* 1999-4-15 - Comments emitted in C code for profiling. The comments identify the - Cps function responsible for each C statement. -* 1999-4-15 - callcc and throw added. -* 1999-4-15 - Bug in src/cps/simplify-types fixed. The bug caused nontermination - whenever there was a circular datatype with a vector on the rhs. - E.g. datatype t = T of t vector - --------------------------------------------------------------------------------- - -Here are the changes from the 1998-8-26 version to the 1999-3-19 version. - -* Compile time and code size have decreased. -* Runtime performance of executables has improved. -* Large programs can now be compiled. -* MLton is self hosting. -* The basis library is mostly complete and many bugs have been fixed. -* The monomorphiser (-m) is no longer available. -* The heap and stack are automatically resized. -* There are now facilities for heap checkpointing (MLton.saveWorld) - and object size computation (MLton.size). -* MLton uses the GNU multiprecision library to provide a fast - implemenation of IntInf. diff -Nru mlton-20130715/doc/CHANGELOG.adoc mlton-20210117+dfsg/doc/CHANGELOG.adoc --- mlton-20130715/doc/CHANGELOG.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/doc/CHANGELOG.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,3519 @@ += CHANGELOG + +== Version 20210117 + +Here are the changes from version 20201002 to 20210117. + +=== Summary + +* Compiler. + ** Fix bug in `SimplifyTypes` SSA optimization pass. +* Libraries. + ** Other libraries. + *** Updated: ckit library, MLLPT library, MLRISC library, SML/NJ library +* Other. + ** Preliminary support for `arm64-darwin`. + ** Fix bug in `Makefile.binary` detecting default position-independent style. + +=== Details + +* 2021-01-17 + ** Update SML/NJ libraries to SML/NJ 110.99. + +* 2021-01-15 + ** Fix bug in `Makefile.binary` detecting default position-independent style. + Thanks to Greg Werbin for the but report. + ** Preliminary support for `arm64-darwin` ("Apple Silicon"). Thanks to Chris + Cannam for the patches. + +* 2020-10-22 + ** Fix bug in `SimplifyTypes` SSA optimization pass. Thanks to Martin Elsman + for the bug report. + +== Version 20201002 + +Here are the changes from version 20200817 to version 20201002. + +=== Summary + +* Compiler. + ** Fixed bug in handling of weak objects during mark-compact GC. + +=== Details + +* 2020-09-20 + ** Fix bug in handling of weak objects during mark-compact GC. Thanks to + Bernard Berthomieu for the bug report. + +== Version 20200817 + +Here are the changes from version 20200722 to version 20200817 + +=== Summary + +* Compiler. + ** Fixed bug in `RssaShrink` optimization that would result in an unbound + variable and an internal compiler error. +* Other. + ** Fixes for Solaris and MinGW platforms. + +=== Details + +* 2020-07-30 + ** Fix bug in jump-chaining optimization of `RssaShrink` that would + result in an unbound variable and an internal compiler error. + +== Version 20200722 + +Here are the changes from version 20180206 to version 20200722. + +=== Summary + +* Compiler. + ** Added expert `-pi-style {default|npi|pic|pie}` and + `-native-pic {false|true}` options, which can be used to override a + target-determined default. + ** Fix a number of instances of excessive live data during + compilation. + ** Disable `Zone` SSA optimization pass by default; the `Zone` pass + is known to not be safe-for-space. + ** Statically allocate and initialize some global objects. + ** Many updates and improvements to C and LLVM codegens. + ** Add new `BounceVars` RSSA optimization pass to split the live + ranges of RSSA variables. + ** Improve `RssaShrink` optimization. + ** Add support for alternate globalization strategies in + `ConstantPropagation`. + ** Strengthen `Useless` optimization with respect to a number of + primitives. + ** Add new `DuplicateGlobals` and `SplitTypes` SSA optimization + passes. + ** Introduce new `Overflow`-checking primitives and remove old + `Overflow`-checking primitives and special-case code required (e.g., + `Arith` transfers in IRs) to support them. + ** Add parsers for XML, SXML, SSA, and SSA2 IRs. +* Runtime. + ** Detect and report incompatible use of ASLR/PIE on `load-world`. + ** Added support for RISC-V architecture. +* Language. +* Libraries. + ** Basis Library. + *** Change `OS.IO.poll` to not be restarted when interrupted by a + signal. (This is consistent with `Socket.select`.) + *** Add `MLton.sizeAll: unit -> IntInf.int` that returns the size + of reachable live data. + *** Change type of `MLton.size` from `'a -> int` to + `'a -> IntInf.int`, because with 64-bit systems, the size of a + single object can exceed that representable by a signed 32-bit + integer. + ** Other libraries. + *** Updated: ckit library, MLLPT library, MLRISC library, SML/NJ library +* Tools. +* Other. + ** Updates to simplify porting MLton. + ** Support parallel build (i.e., `make -j`). This mainly supports + platforms/packagers that use a parallel `make` by default; it does + not obtain significant build speedups. + ** Various updates to ``Makefile``s. See `Makefile.config` for + common and user-customizable configuration. + ** Characterize MLton-LICENSE as an instance of the Historical + Permission Notice and Disclaimer (HPND) license, rather than + BSD-style. + +=== Details + +* 2020-07-18 + ** Update SML/NJ libraries to SML/NJ 110.98. + +* 2020-07-08 + ** Fix `Real{32,64}_gdtoa` race condition. + +* 2020-07-07 + ** Upgrade `gdtoa.tgz`. + +* 2020-06-28 + ** Update SML/NJ libraries to SML/NJ 110.97. + +* 2020-05-28 + ** Fix bug in running `blockFn`-s for `CML.sync`. + +* 2020-05-23 + ** Updates to simplify porting MLton. Add `remote-bootstrap` and + `remote-add-cross-target` goals to `Makefile`. The + `remote-bootstrap` goal automates the process of bootstraping MLton + on a remote machine that doesn't have a suitable pre-compiled + `mlton` binary. The `remote-add-cross-target` goal automatesthe + process of adding a cross-compiler target. These goals replace + `bin/add-cross` and `bin/save-bootstrap-source`. + +* 2020-05-12 + ** Fix infinte loop with jump chaining in `RssaShrink`. + +* 2020-03-11 + ** Fix `String.scan` to return `NONE` if first character is + non-printable. + +* 2020-02-14 + ** Fix bug in `SimplifyTypes` SSA optimization pass. + +* 2020-01-22 + ** Add expert `-pi-style {default|npi|pic|pie}` and + `-native-pic {false|true}` options, which can be used to override a + target-determined default. See + https://github.com/MLton/mlton/pull/365 for details. + +* 2020-01-21 + ** Support parallel build (i.e., `make -j`). This mainly supports + platforms/packagers that use a parallel `make` by default; it does + not obtain significant build speedups. + +* 2020-01-11 + ** Revise implementation of statically allocated and initialized + global objects. + +* 2019-11-22 + ** Many updates and improvements to C and LLVM codegens. See + https://github.com/MLton/mlton/pull/351 for details. + +* 2019-11-05 + ** Change `OS.IO.poll` to not be restarted when interrupted by a + signal. (This is consistent with `Socket.select`.) + +* 2019-11-04 + ** Detect and report incompatible use of ASLR/PIE on `load-world`. + ** Fix bugs in `MLton.size` and `MLton.share`; calling `MLton.size` + or `MLton.share` with a non-pointer variant of an object type that + could be represented by either a pointer or a non-pointer (e.g., the + `NONE` variant of an `int list option`) would segfault. + +* 2019-10-25 + ** Fix a number of instances of excessive live data during compilation. + ** Disable `Zone` SSA optimization pass by default; the `Zone` pass + is known to not be safe-for-space. + ** Add `MLton.sizeAll: unit -> IntInf.int` that returns the size of + reachable live data. + ** Change type of `MLton.size` from `'a -> int` to + `'a -> IntInf.int`, because with 64-bit systems, the size of a + single object can exceed that representable by a signed 32-bit + integer. + +* 2019-09-19 + ** Statically allocate and initialize some global objects. See + https://github.com/MLton/mlton/pull/328 for details. Undertaken by + Jason Carr at RIT supported by NSF CISE Research Infrastructure + (CRI) award. + +* 2019-07-18 + ** Add `-llvm-aamd {none|tbaa}` to control including alias-analysis + metadata when compiling with LLVM. See + https://github.com/MLton/mlton/pull/324 for details. Undertaken by + Jason Carr at RIT supported by NSF CISE Research Infrastructure + (CRI) award. + +* 2019-06-21 + ** Improved parser combinator library (`structure Parse`) in the + MLton Library. Undertaken by Jason Carr at RIT supported by NSF + CISE Research Infrastructure (CRI) award. + +* 2019-06-19 + ** Raise values from raiser to handler via the ML stack. See + https://github.com/MLton/mlton/pull/321 for details. + +* 2019-06-17 + ** Various updates to ``Makefile``s. See `Makefile.config` for + common and user-customizable configuration. + +* 2019-06-07 + ** Refactor pass infrastructure. See + https://github.com/MLton/mlton/pull/313 for details. + +* 2019-05-31 + ** Add new `BounceVars` RSSA optimization pass to split the live + ranges of RSSA variables. See + https://github.com/MLton/mlton/pull/299 for details. Undertaken by + Jason Carr at RIT supported by NSF CISE Research Infrastructure + (CRI) award. + +* 2019-05-24 + ** Many updates and improvements to C and LLVM codegens. See + https://github.com/MLton/mlton/pull/304 for details. + +* 2019-05-13 + ** Improve RSSA shrink optimization. Undertaken by Jason Carr at + RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2019-03-22 + ** Update word primitives. Inline signed integer `quot` and `rem` + in C codegen (C99 and C11 have reliable semantics for signed + division). + +* 2019-03-20 + ** Remove old `Overflow`-checking primitives and special-case code + required to support them. Undertaken by Daman Morris at RIT + supported by NSF CISE Research Infrastructure (CRI) award. + +* 2019-03-12 + ** Fix latent `MLton.GC.collect` bug; an explicit `MLton.GC.collect` + call was passed `0` bytes requested rather than the bytes required + by the return block(s). + +* 2019-01-16 + ** Add support for alternate globalization strategies in + `ConstantPropagation` (but defaults correspond to previous + behavior). + +* 2019-01-03 + ** Strengthen `Useless` optimization with respect to a number of primitives + (`MLton_equal`, `MLton_hash`, `MLton_eq`, `MLton_share`, `MLton_size`, + `Weak_canGet`, and `MLton_touch`). + ** Add new `DuplicateGlobals` and `SplitTypes` SSA optimization passes. + `DuplicateGlobals` introduces a distinct instance of a `ConApp` global for + each distict use within the program. `SplitTypes` performs a + unification-based analysis to split a datatype into distinct instances for + constructed values that are not unified. Because datatypes are recursive, + other analyses often conflate all defs and uses of `ConApp`-s; `SplitTypes` + allows non-unified instances of a datatype to be analyzed separately. + Undertaken by Jason Carr at RIT supported by NSF CISE Research Infrastructure + (CRI) award. + +* 2018-11-07 + ** Add support for OpenBSD 6.4, which added stack-pointer register checking to + the kernel. On OpenBSD, `%rsp`/`%esp` must be reserved by the native codegens + (so as to always point to the C stack) and the signal stack must be `mmap`-ed + with `MAP_STACK`. Thanks to Dan Cross for the pull request. + +* 2018-10-15 + ** Introduce new `Overflow`-checking primitives. Undertaken by Daman Morris + at RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2018-08-17 + ** Add a parser for the SSA2 IR (`functor ParseSsa2`). Undertaken by Manan + Joshi at RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2018-05-18 + ** Add a parser for the SSA IR (`functor ParseSsa`). Undertaken by James + Reilly at RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2018-04-28 + ** Characterize MLton-LICENSE as an instance of the Historical Permission + Notice and Disclaimer (HPND) license, rather than BSD-style. + +* 2018-04-04 + ** Added support for RISC-V architecture. Thanks to Adam Goode for the pull + request. + +* 2018-03-31 + ** Add `./bin/save-bootstrap-source` script to aid bootstrapping on a new + platform. Thanks to Adam Goode for the pull request. + +* 2018-03-28 + ** Recognize `ppc64le` in `./bin/platform` as an instance of `powerpc64` + architecture. Thanks to Adam Goode for the pull request. + +* 2018-02-15 + ** Set `LIB_REL_BIN` in `mlton` script when installing. Some systems (e.g., + x86_64 Fedora) will set `libdir` to `/usr/lib64`, so it is necessary to + compute and set the relative path from `TBIN` to `TLIB` when installing + `$(TBIN)/mlton`. + +== Version 20180206 + +Here are the changes from version 20130715 to version 20180206. + +=== Summary + +* Compiler. + ** Added an experimental LLVM codegen (`-codegen llvm`); requires LLVM tools + (`llvm-as`, `opt`, `llc`) version ≥ 3.7. + ** Made many substantial cosmetic improvements to front-end diagnostic + messages, especially with respect to source location regions, type inference + for `fun` and `val rec` declarations, signature constraints applied to a + structure, `sharing type` specifications and `where type` signature + expressions, type constructor or type variable escaping scope, and + nonexhaustive pattern matching. + ** Fixed minor bugs with exception replication, precedence parsing of function + clauses, and simultaneous `sharing` of multiple structures. + ** Made compilation deterministic (eliminate output executable name from + compile-time specified `@MLton` runtime arguments; deterministically generate + magic constant for executable). + ** Updated `-show-basis` (recursively expand structures in environments, + displaying components with long identifiers; append `(* @ region *)` + annotations to items shown in environment). + ** Forced amd64 codegen to generate PIC on amd64-linux targets. +* Runtime. + ** Added `gc-summary-file file` runtime option. + ** Reorganized runtime support for `IntInf` operations so that programs that + do not use `IntInf` compile to executables with no residual dependency on GMP. + ** Changed heap representation to store forwarding pointer for an object in + the object header (rather than in the object data and setting the header to a + sentinel value). +* Language. + ** Added support for selected SuccessorML features; see + http://mlton.org/SuccessorML for details. + ** Added `(*#showBasis "file" *)` directive; see + http://mlton.org/ShowBasisDirective for details. + ** FFI: + *** Added `pure`, `impure`, and `reentrant` attributes to `_import`. An + unattributed `_import` is treated as `impure`. A `pure` `_import` may be + subject to more aggressive optimizations (common subexpression elimination, + dead-code elimination). An `_import`-ed C function that (directly or + indirectly) calls an `_export`-ed SML function should be attributed + `reentrant`. + ** ML Basis annotations. + *** Added `allowSuccessorML {false|true}` to enable all SuccessorML features + and other annotations to enable specific SuccessorML features; see + http://mlton.org/SuccessorML for details. + *** Split `nonexhaustiveMatch {warn|error|igore}` and `redundantMatch + {warn|error|ignore}` into `nonexhaustiveMatch` and `redundantMatch` + (controls diagnostics for `case` expressions, `fn` expressions, and `fun` + declarations (which may raise `Match` on failure)) and `nonexhaustiveBind` + and `redundantBind` (controls diagnostics for `val` declarations (which may + raise `Bind` on failure)). + *** Added `valrecConstr {warn|error|ignore}` to report when a `val rec` (or + `fun`) declaration redefines an identifier that previously had constructor + status. +* Libraries. + ** Basis Library. + *** Improved performance of `Array.copy`, `Array.copyVec`, `Vector.append`, + `String.^`, `String.concat`, `String.concatWith`, and other related + functions by using `memmove` rather than element-by-element constructions. + ** `Unsafe` structure. + *** Added unsafe operations for array uninitialization and raw arrays; see + https://github.com/MLton/mlton/pull/207 for details. + ** Other libraries. + *** Updated: ckit library, MLLPT library, MLRISC library, SML/NJ library +* Tools. + ** mlnlffigen + *** Updated to warn and skip (rather than abort) when encountering functions + with `struct`/`union` argument or return type. + +=== Details + +* 2018-02-6 + ** Remove ancient and unused `cmcat` tool. + +* 2018-02-03 + ** Upgrade `gdtoa.tgz`. + +* 2018-02-02 + ** Remove docs from `all` target of `./Makefile`; this eliminates the + `all-no-docs` target (which was frequently used in favor of `all`). + +* 2018-01-31 + ** Use C compiler with `-std=gnu11` (rather than `-std=gnu99`). + ** Revert rudimentary support for `./configure`; the support was so minimal + that it seems unhelpful to pretend that there are exhaustive compatibility + checks being performed. All of the basic configuration can be accomplished + with simple `make` variable definitions. + +* 2018-01-25 + ** Remove (expert, undocumented) `-debug-format` option; the same effect can + be achieved with `-as-opt` and `-cc-opt`. + ** Propagate C compiler from `./configure` to `mlton` script. + +* 2018-01-24 + ** Extend `-target-*-opt` options to support `arch-os` pairs. + ** Remove `./package/rpm/*` and corresponding targets in `./Makefile`; + upstream MLton has not produced RPMs for years. + +* 2018-01-24 + ** Slightly improve performance of `Vector.concat` and + `String.{concat,concatWith,tokens,fields}` by avoiding `List.map`-s. + +* 2018-01-23 + ** Restore, but deprecate, `-drop-pass` compile-time expert option. + +* 2018-01-19 + ** Update SML/NJ libraries to SML/NJ 110.82. + +* 2017-12-29 + ** Add support for `(*#showBasis "file" *)` directives. This feature is + meant to facilitate auto-completion via + https://github.com/MatthewFluet/company-mlton[`company-mlton`] and similar + tools. + +* 2017-12-20 + ** Update performance comparison on website. Thanks to Curtis Dunham for the + pull request. + +* 2017-12-17 + ** Updates to `-show-basis`: + *** `-show-basis-flat`: Recursively expand structures in environments, + displaying components with long identifiers. + *** `-show-basis-def`: Appends `(* @ region *)` annotations to items shown + in environment. + *** `-show-basis-compact`: Tries to optimize vertical space (at the expense + of long lines). + +* 2017-12-11 + ** Drop `_BSD_SOURCE` and `_POSIX_C_SOURCE` feature macros in + `./runtime/cenv.h`. + +* 2017-12-10 + ** Add a `Dockerfile` to build/test MLton. Thanks to Richard Laughlin for the + pull request. + +* 2017-12-06 + ** Remove `$PREFIX` and `$prefix` from top-level `Makefile.in`; use + `./configure --prefix path`. Thanks to Richard Laughlin for the pull + request. + +* 2017-12-03 + ** Fix heap invariant predicates. + +* 2017-11-15 + ** Eliminate the use of (some) global mutable state for signal handling. + +* 2017-11-14 + ** Store forwarding pointer for an object in the object header (rather than in + the object data and setting the header to a sentinel value). + +* 2017-11-02 + ** Updates to stack management in backend: + *** Improve `Allocation.Stack.get`. + *** Do not force `Cont` block arguments to stack. + +* 2017-10-30 + ** In `signature SSA_TO_RSSA_STRUCTS` share by `Rssa.Atoms = Ssa.Atoms`. This + is the idiom used elsewhere in the compiler, rather than sharing individual + sub-structures of `Atoms`. + ** Minor updates to `DirectedGraph` and `Tree` in MLton library. + +* 2017-10-23 + ** Add `-seed-rand w` compile-time option, to seed the pseudo-random number + generator. + ** Add a new MachineShuffle pass (disabled by default) that shuffles the + collection of chunks within the program and shuffles the collection of blocks + within a chunk. With the `-seed-rand w` compile-time option, can be used to + generate executables with distinct code placements. + +* 2017-10-23 + ** Use a relative path in the `mlton` script, rather than an absolute path. + The absolute path needed to be set to the intended installation directory, + which made it difficult to install a binary release in a local directory. + Undertaken by Maksim Yegorov at RIT supported by NSF CISE Research + Infrastructure (CRI) award. + +* 2017-10-21 + ** Add unsafe operations for array uninitialization and raw arrays. + *** Rename `Array_uninit: SeqIndex.int -> 'a array` primitive to + `Array_alloc: SeqIndex.int -> 'a array`. + *** Add `Array_uninit: 'a array * SeqIndex.int -> unit` primitive to set all + objptrs in the element at the given index to a bogus non-objptr value + (`0wx1`). One motivation for this primitive is to support space-efficient + polymorphic resizeable arrays. When shrinking a resizeable array, we would + like to "`NULL`" out the elements that are no longer part of the logical + array, in order to avoid a (logical) space leak. + *** Add `Array_uninitIsNop: 'a array -> bool` primitive to answer if the + `Array_uninit` primitive applied to the same array would be a nop (i.e., if + the array has no objptrs in the elements). This can be used to skip a + bulk-`Array_uninit` loop when it is known that the `Array_uninit` operations + would be nops. + *** Add `Array_allocRaw: SeqIndex.int -> 'a array` primitive to allocate an + array, but with a header that indicates that the array has no objptrs. Add + `Array_toArray: 'a array -> 'a array` primitive to update the header of an + `Array_allocRaw` allocated array to reveal the objptrs. One motiviation for + this primitive is that, in a parallel setting, the uninitialization of an + array can be a sequential bottleneck. The `Array_allocRaw` is a constant + time operation and the subsequent `Array_uninit` operations can be performed + in parallel. + *** Extend `structure Unsafe.Array` with additional operations. See + `./basis-library/sml-nj/unsafe.sig`. + +* 2017-10-20 + ** Introduce ShareZeroVec SSA optimization to share zero-length vectors after + coercion-based optimizations. Undertaken by Maksim Yegorov at RIT supported + by NSF CISE Research Infrastructure (CRI) award. + +* 2017-10-18 + ** New canonicalization strategy for CommonSubexp SSA optimization. + Previously, the canonicalization of commutative arithmetic primitives was + sensitive to variable hashes (created by an unseeded pseudo-random number + generator); now, the canonicalization of commutative arithmetic primitives is + sensitive to relative definition order of variables. + +* 2017-10-12 + ** Fix bug in runtime argument option parsing. + +* 2017-10-05 + ** Many updates and improvements to diagnostic messages. See + https://github.com/MLton/mlton/pull/195 for details. + +* 2017-09-27 + ** Add rudimentary support for `./configure`; in particular, support + `--with-gmp-lib` and `--with-gmp-include` to set location of GMP and + `--prefix` to specify an install prefix. Undertaken by Maksim Yegorov at RIT + supported by NSF CISE Research Infrastructure (CRI) award. + +* 2017-08-21 + ** Introduce `Array_copyArray: 'a array * SeqIndex.int * 'a array * + SeqIndex.int * SeqIndex.int -> unit` and `Array_copyVector: 'a array * + SeqIndex.int * 'a vector * SeqIndex.int * SeqIndex.int -> unit` primitives + which are used to implement a number of array and vector construction + functions, particularly `append`, `concat`, and `concatWith`. The primitives + compile to `memmove` operations, which (significantly) outperforms MLton's + element-by-element construction for large sequences. Undertaken by Bryan Camp + at RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2017-07-25 + ** Force PIC generation on amd64-linux targets. Thanks to Kuen-Bang Hou + (Favonia) for the pull request. + +* 2017-07-11 + ** Generalize the `subWord` primitives to ++ +---- + | WordArray_subWord of {seqSize:WordSize.t, eleSize: WordSize.t} + | WordArray_updateWord of {seqSize: WordSize.t, eleSize: WordSize.t} + | WordVector_subWord of {seqSize: WordSize.t, eleSize: WordSize.t} +---- ++ +Undertaken by Bryan Camp at RIT supported by NSF CISE Research Infrastructure +(CRI) award. + +* 2017-07-11 + ** Add a parser combinator library (`structure StreamParser`) to the MLton + Library. Undertaken by Jason Carr at RIT supported by NSF CISE Research + Infrastructure (CRI) award. + ** Add a parser for the SXML IR (`structure ParseSxml`). Undertaken by Jason + Carr at RIT supported by NSF CISE Research Infrastructure (CRI) award. + ** Allow compilation to start with a `.sxml` file. Undertaken by Jason Carr + at RIT supported by NSF CISE Research Infrastructure (CRI) award. + +* 2017-06-29 + ** Replace `-drop-pass regex` compile-time option with `-disable-pass regex` + compile option and add `-enable-pass regex` compile option. Various XML, + SXML, SSA, SSA2, RSSA, and Machine IR optimization passes are initialized with + a default status, which can be overriden by `-{disable,enable}-pass`. In + particular, it is now easy to add a work-in-progress (and potentially buggy) + pass to the simplification pipeline with `execute = false` default status, to + be selectively executed with `-enable-pass`. Undertaken by Bryan Camp at RIT + supported by NSF CISE Research Infrastructure (CRI) award. + ** Add LoopUnswitch and LoopUnroll SSA optimizations (undertaken by Matthew + Surawski as an RIT CS MS Capstone Project). Initial evaluation demonstrates + some non-trivial performance gains, no non-trivial performance losses, and + only minor code size increases, but currently disabled pending a more thorough + evaluation. + +* 2017-05-23 + ** Expand the set of MLB annotations: + *** `nonexhaustiveBind`, `nonexhaustiveExnBind`, `redundantBind`: controls + diagnostics for `val` declarations (which may raise `Bind` on failure). + *** `nonexhaustiveMatch`, `nonexhaustiveExnMatch`, `redundantMatch`: + controls diagnostics for `case` expressions, `fn` expressions, and `fun` + declarations (which may raise `Match` on failure). + *** `nonexhaustiveRaise`, `nonexhaustiveExnRaise`, `redundantRaise`: + controls diagnostics for `handle` expressions (which implicitly re-raise on + failure). Note that `nonexhaustiveRaise` and `nonexhaustiveExnRaise` + default to `ignore`. The combination of `nonexhaustiveRaise warn` and + `nonexhaustiveExnRaise ignore` can be useful for finding handlers that + handle some, but not all, values of an exception variant. + ** Make a number of improvements to diagnostic messages: + *** Display nonexhaustive exception patterns as `_ : exn`, rather than + `e`. + *** Normalize nonexhaustive patterns by sorting (e.g., by `ConApp` name). + *** Report complete enumeration of unhandled constants, rather than a single + example. + *** Report nonexhaustive patterns of record type as records, rather than as + tuples. + +* 2017-04-20 + ** Updates to SSA, SSA2, and RSSA IR support infrastructure + *** Display more context when reporting SSA and SSA2 IR type errors. + *** Add `-layout-width n` compile expert option to control the target width + for the pretty printer. + *** Make cosmetic improvments to SSA and SSA2 IR display (uses of global + variables bound to small constants and conapps are commented with the + corresponding value; include loop forest for functions with `-keep dot`). + *** Improve RSSA constant folding and copy propagation. + *** Limit Machine IR `Globals` to variables used outside of the `main` + function. + +* 2017-04-15 + ** Add `gc-summary-file file` runtime option. + +* 2017-04-15 + ** Rename and add `smlnj-mlton-x{2,4,8,16}` top-level `Makefile` targets. + ** Update SML/NJ librarys to SML/NJ 110.80 (making use of supported + SuccessorML features). + ** Note support for SML/NJ extensions via SuccessorML MLB annotations on + website. + +* 2017-04-14 + ** Add support for vector expressions (`#[e1, e2, ..., en]`) and vector + patterns (`#[p1, p2, ..., pn]`) and add `Vector_vector` n-ary primitive. + Initial support for vector expressions and the `Vector_vector` primitive were + undertaken by Krishna Ravikumar as an RIT CS MS Capstone Project. + +* 2017-03-29 + ** Update DOS eol handling and tweak error messages in lexer. + +* 2017-03-27 + ** Correct off-by-one error in column numbers. Thanks to Jacob Zimmerman for + the error report and pull request. + +* 2017-03-15 + ** Updates to SuccessorML support: + *** Add an `allowSuccessorML {false|true}` MLB annotation to enable all + Successor ML features with a single annotation. + *** Fix parsing of numeric labels to only accept an INT token that does not + begin with 0, is not an extended literal, is not negative, and is decimal. + *** Drop the alternate word prefixes (`0xw` and `0bw`). + *** Unconditionally allow line comments in MLB files. + *** Allow UTF-8 byte sequences in text constants. + *** Refactor `ml.lex` and `mlb.lex` to be more maintainable. + *** Rename `allowRecPunning` annotation to `allowRecordPunExps`. + +* 2017-02-27 + ** Update ML-Yacc examples (`calc`, `fol`, `pascal`) to comply with MLton + build process. Thanks to Hai Nguyen Van for the pull request. + +* 2017-01-25 + ** Update PortingMLton documentation and `./bin/add-cross` script. Thanks to + Daniel Moerner for the pull request. + +* 2016-09-29 + ** Constant fold `CPointer_equal(NULL, NULL)` to `true`. + +* 2016-09-29 + ** Introduce `NEEDS_SIGALTSTACK_EXEC` config in runtime system. + +* 2016-09-27 + ** Construct a devel build version string from last commit time and last + commit hash. + ** Omit build date and build node from version banner; makes self-compiles + deterministic. + ** Remove `upgrade-basis.sml` from build. The generated `upgrade-basis.sml` + was introduced to handle incompatibilities in the Basis Library provided by an + old version of MLton and the Basis Library assumed by the current sources. + However, there are no incompatibilities with MLton 20130715, MLton 20100608, + or MLton 20070826. Nonetheless, the feature testing performed by + `./bin/upgrade-basis` to generate `upgrade-basis.sml` is time consuming, + especially when trying to simply type check the compiler sources. + +* 2016-06-20 + ** Do not `gzip` man pages on OpenBSD. Thanks to Alexander Abushkevich for + the pull request. + +* 2016-06-20 + ** Generate position independent code for OpenBSD. Thanks to Alexander + Abushkevich for the pull request. + +* 2016-06-20 + ** Fix profiling for amd64-openbsd and x86-openbsd. Thanks to Alexander + Abushkevich for the pull request. + +* 2016-04-06 + ** Update SML/NJ librarys to SML/NJ 110.79. + +* 2016-03-22 + ** Update LLVM codegen to support (and require) >= llvm-3.7. Thanks to Eugene + Akentyev for the pull request. + +* 2016-02-26 + ** Configure GMP location via `Makefile`. + +* 2016-01-10 + ** Fix typo in `mlb-formal.tex`. Thanks to Jon Sterling for the pull request. + +* 2015-11-10 + ** Update SML/NJ librarys to SML/NJ 110.78. Use `allowOrPats` and + `allowSigWithtype` to minimize diffs. + +* 2015-10-20 + ** Fix elaboration of `withtype` in signature. + +* 2015-10-06 + ** Add support for setting CM anchor bindings in `cm2mlb` tool. + +* 2015-10-06 + ** Fix non-exhaustive match warnings with or-patterns. Thanks to Rob Simmons + for the bug report. + ** Distinguish between partial and fully redundant matches. + ** Report partial redundancy in `val` declarations. + ** Lower precedence of or-patterns in parser. + ** Make a variety of cosmetic improvements to non-exhaustive and redundant + error/warning messages, primarily to be consistent in formatting between + quoted AST and generated messages. + +* 2015-07-10 + ** Extend support for arm64 (aarch64). Thanks to Edmund Evans for the patch. + +* 2015-06-22 + ** Introduce `valrecConstr {warn|error|ignore}` MLB annotation to report when + a `val rec` (or `fun`) declaration redefines an identifier that previously had + constructor status. + +* 2015-06-19 + ** Add support for selected SuccessorML features (undertaken by Kevin Bradley + as an RIT CS MS Capstone Project). + *** `do`-declarations (`allowDoDecls`) + *** extended literals (`allowExtendedLiterals`) + *** line comments (`allowLineComments`) + *** optional leading bar in matches, fun decls, and datatype decls + (`allowOptBar`) + *** optional trailing semicolon in sequence expressions (`allowOptSemicolon`) + *** or patterns (`allowOrPats`) + *** record expression punning (`allowRecPunning`) + *** withtype in signatures (`allowSigWithtype`) + +* 2015-06-10 + ** Hide equality status of poly (and mono) vector and array slices. + ** Hide type equality of mono and poly `Word8.word` arrays and vectors. + +* 2015-06-08 + ** Added `reentrant` attribute to `_import`. An `_import`-ed C function that + (directly or indirectly) calls an `_export`-ed SML function should be + attributed `reentrant`. + +* 2015-06-08 + ** Make compilation deterministic: + *** Eliminate output executable name from compile-time specified `@MLton` + arguments. + *** Deterministically generate magic constant for executable. + +* 2015-06-08 + ** Add `-keep ast` compile option. Undertaken by Ross Bayer at RIT supported + by NSF CISE Research Infrastructure (CRI) award. + +* 2015-06-02 + ** Updates to Debian packaging. Thanks to Christopher Cramer for the pull + request. + +* 2015-03-30 + ** Use `LANG=en_us` when computing version and build date. Thanks to Eugene + Akentyev for the pull request. + +* 2015-02-17 + ** Update `mlnlffigen` to warn and skip functions with `struct`/`union` + arguments. Thanks to Armando Doval for the pull request. + +* 2014-12-22 + ** Move pervasive constructs from `./mlton/ast` to `./mlton/atoms`, so that + `./mlton/ast/sources.mlb` depends on `./mlton/atoms/sources.mlb` (and not the + other way around). Undertaken by Vedant Raiththa at RIT supported by NSF CISE + Research Infrastructure (CRI) award. + +* 2014-12-17 + ** Cache a worker thread to service calls of `_export`-ed functions. Thanks + to Bernard Berthomieu for the bug report. + +* 2014-12-02 + ** Post-process generated front-end files for compatibility with SML/NJ's + recent `ml-lex` and `ml-yacc` tools that generate log identifiers rather than + unqualified (top-level environment) identifiers. + ** Corrected documentation for SML/NJ `Makefile` target and fixed + `bootstrap-nj` target. Thanks to Daniel Rosenwasser for the pull request. + +* 2014-11-21 + ** Reorganized runtime support for `IntInf` operations so that programs that + do not use `IntInf` compile to executables with no residual dependency on GMP. + ** Fixed bug in `MLton.IntInf.fromRep` that could yield values that violate + the `IntInf` representation invariants. Thanks to Rob Simmons for the bug + report. + +* 2014-10-24 + ** Added `pure` and `impure` attributes to `_import`. An unattributed + `_import` is treated as `impure`. A `pure` `_import` may be subject to more + aggressive optimizations (common subexpression elimination, dead-code + elimination). Undertaken by Vedant Raiththa at RIT supported by NSF CISE + Research Infrastructure (CRI) award. + +* 2014-10-22 + ** Various updates to treatment of `IntInf` constants in the compiler. + *** Recognize both `Big` and `Small` representations of `IntInf`-s. + *** Translate `IntInf` consts to `Big` and `Small` representations in + conversion from SSA to RSSA. This is consistent with the treatment of other + `IntInf` operations in the conversion. After the conversion, `IntInf` is no + longer treated as a primitive. + *** Remove `initIntInfs` from program initialization. + *** Constant fold `IntInf_toVector` and `WordVector_toIntInf` primitives. + +* 2014-10-20 + ** Various updates to `structure WordXVector` in compiler proper. + *** Update the `WordXVector.layout` function. If the `elementSize` is + `WordX.word8` and more than 90% of the characters satisfy `Char.isGraph + orelse Char.isSpace`, then display as an SML string constant (with + non-printable characters SML-escaped). Otherwise, display as an SML/NJ-style + `#[0x0, 0xF]` vector literal. + *** Update initialization of `static struct GC_vectorInit vectorInits[]` + constants in runtime. If the `WordXVector`'s (primitive) `elementSize` is + `WordSize.W8`, then emit a C-escaped string constant. Otherwise, emit a + C-array initialization. + +* 2014-08-15 + ** More updates to benchmark infrastructure. + *** Make `update-counts.sh` script more robust. + *** Update `hamlet.sml` benchmark program to close input file after each + loop. + *** Update `fft.sml` benchmark program to only invoke `test` function with + power-of-2 arguments. + *** Update `model-elimination.sml` benchmark program to iterate `main ()` + according to `doit` size parameter. + +* 2014-08-11 + ** Include `winsock2.h` before `windows.h` in MinGW port. Thanks to Shu-Hung + You for the pull request. + +* 2014-07-31 + ** Refactor array and vector implementation in Basis Library into a primitive + implementation (using `SeqInt.int` for indexing) and a wrapper implementation + (using the default `Int.int` for indexing). Thanks to Rob Simmons for the + pull request. + ** Correct description of `MLton.{Vector,Array}.unfoldi` on website. Thanks + to Rob Simmons for the pull request. + +* 2014-07-14 + ** Updates to benchmark infrastructure. + *** Add `even-odd.sml` benchmark that exercises mutual tail recursion. + *** Add `update-counts.sh` script to calculate appropriate benchmark + iteration counts and update benchmark iteration counts so that all + benchmarks run for at least 30 seconds. + *** Updates to benchmark driver program. + +* 2014-07-07 + ** Change `./basis-library/integer/int-inf.sml` to reduce dependency on + GMP-specific details of `./basis-library/integer/int-inf0.sml`. Thanks to Rob + Simmons for the pull request. + ** Correct type and description of `MLton.IntInf.fromRep` on website. Thanks + to Rob Simmons for the pull request. + +* 2014-07-01 + ** Add experimental LLVM codegen (undertaken by Brian Leibig as an RIT CS MS + Project). + +* 2014-06-09 + ** Update `CallingFromSMLToC` page on website. Thanks to Bikal Gurung for the + pull request. + +* 2014-03-18 + ** Updates for MinGW port. + +* 2014-02-07 + ** Update AsciiDoc sources for website. + +* 2013-10-31 + ** Various updates to website. Thanks to Mauricio C Antunes for the pull + request. + *** Add Tofte's tutorial and Rossberg's grammar. + *** Fix links to implementations. + +* 2013-10-10 + ** Update links from `References` page on website. Thanks to Mauricio C + Antunes for the pull request. + +* 2013-09-02 + ** Fix example for `Lazy` page on website. Thanks to Daniel Rosenwasser for + the pull request. + +== Version 20130715 + +Here are the changes from version 20100608 to version 20130715. + +=== Summary + +* Compiler. + ** Cosmetic improvements to type-error messages. + ** Removed features: + *** Bytecode codegen: The bytecode codegen had not seen significant use and + it was not well understood by any of the active developers. + *** Support for `.cm` files as input: The ML Basis system provides much + better infrastructure for "programming in the very large" than the (very) + limited support for CM. The `cm2mlb` tool (available in the source + distribution) can be used to convert CM projects to MLB projects, preserving + the CM scoping of module identifiers. + ** Bug fixes: see changelog +* Runtime. + ** Bug fixes: see changelog +* Language. + ** Interpret `(*#line line:col "file" *)` directives as relative + file names. + ** ML Basis annotations. + *** Added: `resolveScope` +* Libraries. + ** Basis Library. + *** Improved performance of `String.concatWith`. + *** Use bit operations for `REAL.class` and other low-level operations. + *** Support additional variables with `Posix.ProcEnv.sysconf`. + *** Bug fixes: see changelog + ** `MLton` structure. + *** Removed: `MLton.Socket` + ** Other libraries. + *** Updated: ckit library, MLRISC library, SML/NJ library + *** Added: MLLPT library +* Tools. + ** mllex + *** Generate `(*#line line:col "file.lex" *)` directives with simple + (relative) file names, rather than absolute paths. + ** mlyacc + *** Generate `(*#line line:col "file.grm" *)` directives with simple + (relative) file names, rather than absolute paths. + *** Fixed bug in comment-handling in lexer. + +=== Details + +* 2013-07-06 + ** Update SML/NJ libraries to SML/NJ 110.76. + +* 2013-06-19 + ** Upgrade `gdtoa.tgz`; fixed bug in `Real32.{fmt,toDecimal,toString}`, which + in some cases produced too many digits + +* 2013-06-18 + ** Removed `MLton.Socket` structure (deprecated in last release). + +* 2013-06-10 + ** Improved performance of `String.concatWith`. + +* 2013-05-22 + ** Update SML/NJ libraries to SML/NJ 110.75. + +* 2013-04-30 + ** Detect PowerPC 64 architecture. + +* 2012-10-09 + ** Fixed bug in elaboration that erroneously accepted the following: + + signature S = sig structure A : sig type t end + and B : sig type t end where type t = A.t end + +* 2012-09-04 + ** Introduce an MLB annotation to control overload and flex record resolution + scope: `resolveScope {strdec|dec|topdec|program}`. + +* 2012-07-04 + ** Simplify use of `getsockopt` and `setsockopt` in Basis Library. + ** Direct implementation of `Socket.Ctl.{getATMARK,getNREAD}` in runtime + system, rather than indirect implementation in Basis Library via `ioctl`. + ** Replace use of casting through a union with `memcpy` in runtime. + +* 2012-06-11 + ** Use bit operations for `REAL.class` and other low-level operations. + ** Fixed bugs in `REAL.copySign`, `REAL.signBit`, and `REAL.{to,from}Decimal`. + +* 2012-06-01 + ** Cosmetic improvements to type-error messages. + ** Fixed bug in elaboration that erroneously rejected the following: + + datatype ('a, ''a) t = T + type ('a, ''a) u = unit + + and erroneously accepted the following: + + fun f (x: 'a) : ''a = x + fun g (x: 'a) : ''a = if x = x then x else x + +* 2012-02-24 + ** Fixed bug in redundant SSA optimization. + +* 2011-06-20 + ** Support additional variables with `Posix.ProcEnv.sysconf`. + +* 2011-06-17 + ** Change `mllex` and `mlyacc` to generate `#line` directives with simple file + names, rather than absolute paths. + ** Interpret `#line` directives as relative file names. + +* 2011-06-14 + ** Fixed bug in SSA/SSA2 shrinker that could erroneously turn a non-tail + function call with a `Bug` transfer as its continuation into a tail function + call. + +* 2011-06-11 + ** Update SML/NJ libraries to SML/NJ 110.73 and add ML-LPT library. + +* 2011-06-10 + ** Fixed bug in translation from SSA2 to RSSA with case expressions over + non-primitive-sized words. + ** Fixed bug in SSA/SSA2 type checking of case expressions over words. + +* 2011-06-04 + ** Upgrade `gdtoa.tgz`. + ** Remove bytecode codegen. + ** Remove support for `.cm` files as input. + +* 2011-05-03 + ** Fixed a bug with the treatment of `as`-patterns, which should not allow the + redefinition of constructor status. + +* 2011-02-18 + ** Fixed bug with treatment of nan in common subexpression elimination SSA + optimization. + +* 2011-02-18 + ** Fixed bug in translation from SSA2 to RSSA with weak pointers. + +* 2011-02-05 + ** Fixed bug in amd64 codegen calling convention for varargs C calls. + +* 2011-01-17 + ** Fixed bug in comment-handling in lexer for `mlyacc`'s input language. + +* 2010-06-22 + ** Fixed bug in elaboration of function clauses with different numbers of + arguments that would raise an uncaught `Subscript` exception. + + +== Version 20100608 + +Here are the changes from version 20070826 to version 20100608. + +=== Summary + +* New platforms. + ** ia64-hpux + ** powerpc64-aix +* Compiler. + ** Command-line switches. + *** Added: `-mlb-path-var ' '` + *** Removed: `-keep sml`, `-stop sml` + ** Improved constant folding of floating-point operations. + ** Experimental: Support for compiling to a C library; see wiki documentation. + ** Extended `-show-def-use` output to include types of variable definitions. + ** Deprecated features (to be removed in a future release) + *** Bytecode codegen: The bytecode codegen has not seen significant use and + it is not well understood by any of the active developers. + *** Support for `.cm` files as input: The ML Basis system provides much + better infrastructure for "programming in the very large" than the (very) + limited support for CM. The `cm2mlb` tool (available in the source + distribution) can be used to convert CM projects to MLB projects, preserving + the CM scoping of module identifiers. + ** Bug fixes: see changelog +* Runtime. + ** `@MLton` switches. + *** Added: `may-page-heap {false|true}` + ** `may-page-heap`: By default, MLton will not page the heap to disk when + unable to grow the heap to accomodate an allocation. (Previously, this + behavior was the default, with no means to disable, with security an + least-surprise issues.) + ** Bug fixes: see changelog +* Language. + ** Allow numeric characters in ML Basis path variables. +* Libraries. + ** Basis Library. + *** Bug fixes: see changelog. + ** `MLton` structure. + *** Added: `MLton.equal`, `MLton.hash`, `MLton.Cont.isolate`, + `MLton.GC.Statistics, `MLton.Pointer.sizeofPointer`, + `MLton.Socket.Address.toVector` + *** Changed: + *** Deprecated: `MLton.Socket` + ** `Unsafe` structure. + *** Added versions of all of the monomorphic array and vector structures. + ** Other libraries. + *** Updated: ckit library, MLRISC library, SML/NJ library. +* Tools. + ** `mllex` + *** Eliminated top-level `type int = Int.int` in output. + *** Include `(*#line line:col "file.lex" *)` directives in output. + *** Added `%posint` command, to set the `yypos` type and allow the lexing of + multi-gigabyte files. + ** `mlnlffigen` + *** Added command-line switches `-linkage archive` and `-linkage shared`. + *** Deprecated command-line switch `-linkage static`. + *** Added support for ia64 and hppa targets. + ** `mlyacc` + *** Eliminated top-level `type int = Int.int` in output. + *** Include `(*#line line:col "file.grm" *)` directives in output. + +=== Details + +* 2010-05-12 + ** Fixed bug in the mark-compact garbage collector where the C library's + `memcpy` was used to move objects during the compaction phase; this could lead + to heap corruption and segmentation faults with newer versions of `gcc` and/or + `glibc`, which assume that src and dst in a `memcpy` do not overlap. + +* 2010-03-12 + ** Fixed bug in elaboration of `datatype` declarations with `withtype` + bindings. + +* 2009-12-11 + ** Fixed performance bug in RefFlatten SSA2 optimization. + +* 2009-12-09 + ** Fixed performance bug in SimplifyTypes SSA optimization. + +* 2009-12-02 + ** Fixed bug in amd64 codegen register allocation of indirect C calls. + +* 2009-09-17 + ** Fixed bug in `IntInf.scan` and `IntInf.fromString` where leading spaces + were only accepted if the stream had an explicit sign character. + +* 2009-07-10 + ** Added CombineConversions SSA optimization. + +* 2009-06-09 + ** Removed deprecated command line switch `-show-anns {false, true}`. + +* 2009-04-18 + ** Removed command line switches `-keep sml` and `-stop sml`. Their meaning + was unclear with `.mlb` files; their effect with `.cm` files can be achieved + with `-stop f`. + +* 2009-04-16 + ** Fixed bug in `IntInf.~>>` that could cause a `glibc` assertion failure. + +* 2009-04-01 + ** Fixed exported type of `MLton.Process.reap`. + +* 2009-01-27 + ** Added `MLton.Socket.Address.toVector` to get the network-byte-order + representation of an IP address. + +* 2008-11-10 + ** Fixed bug in `MLton.size` and `MLton.share` when tracing the current stack. + +* 2008-10-27 + ** Fixed phantom typing of sockets by hiding the representation of socket + types. Previously the representation of sockets was revealed rendering the + phantom types useless. + +* 2008-10-10 + ** Fixed bug in nested `_export`/`_import` functions. + +* 2008-09-12 + ** Improved constant folding of floating point operations. + +* 2008-08-20 + ** Store the card/cross map at the end of the allocated ML heap; avoids + possible out of memory errors when resizing the ML heap cannot be followed by + a card/cross map allocation. + +* 2008-07-24 + ** Added support for compiling to a C library. The relevant new compiler + options are `-ar` and `-format`. Libraries are named based on the name of the + `-export-header` file. Libraries have two extra methods: + *** `NAME_open(argc, argv)` initializes the library and runs the SML code + until it reaches the end of the program. If the SML code exits or raises an + uncaught exception, the entire program will terminate. + *** `NAME_close()` will execute any registered atExit functions, any + outstanding finalizers, and frees the ML heap. + +* 2008-07-16 + ** Fixed bug in the name mangling of `_import`-ed functions with the `stdcall` + convention. + +* 2008-06-12 + ** Added `MLton.Pointer.sizeofPointer`. + +* 2008-06-06 + ** Added expert command line switch `-emit-main {true|false}`. + +* 2008-05-17 + ** Fixed bug in Windows code to page the heap to disk when unable to grow the + heap to a desired size. Thanks to Sami Evangelista for the bug report. + +* 2008-05-10 + ** Implemented `MLton.Cont.isolate`. + +* 2008-04-20 + ** Fixed bug in *NIX code to page the heap to disk when unable to grow the + heap to a desired size. Thanks to Nicolas Bertolotti for the bug report and + patch. + +* 2008-04-07 + ** More flexible active/paused stack resizing policy. + + Removed `thread-shrink-ratio` runtime option. + Added + `stack-current-grow-ratio`, `stack-current-max-reserved-ratio`, + `stack-current-permit-ratio`, `stack-current-shrink-ratio`, + `stack-max-reserved-ratio`, and `stack-shrink-ratio` runtime options. + +* 2008-04-07 + ** Fixed bugs in Basis Library where the representations of `OS.IO.iodesc`, + `Posix.IO.file_desc`, `Posix.Signal.signal`, `Socket.sock`, + `Socket.SOGK.sock_type` as integers were exposed. + +* 2008-03-14 + ** Added unsafe versions of all of the monomorphic array and vector + structures. + +* 2008-03-02 + ** Fixed bug in Basis Library where the representation of `OS.Process.status` + as an integer was exposed. + +* 2008-02-13 + ** Fixed space-safety bug in RefFlatten optimization (to flatten refs into + containing data structure). Thanks to Daniel Spoonhower for the bug report and + initial diagnosis and patch. + +* 2008-01-25 + ** Various updates to GC statistics gathering. Some basic GC statistics can + be accessed from SML by `MLton.GC.Statistics.*` functions. + +* 2008-01-24 + ** Added primitive (structural) polymorphic hash. + +* 2008-01-21 + ** Fixed frontend to accept `op _longvid_` patterns and expressions. Thanks to + Florian Weimer for the bug report. + +* 2008-01-17 + ** Extended `-show-def-use` output to include types of variable definitions. + +* 2008-01-09 + ** Extended `MLton_equal` to be a structural equality on all types, including + `real` and `->` types. + +* 2007-12-18 + ** Changed ML-Yacc and ML-Lex to output line directives so that MLton's + def-use information points to the source files (`.grm` and `.lex`) instead of + the generated implementations (`.grm.sml` and `.lex.sml`). + +* 2007-12-14 + ** Added runtime option `may-page-heap {false|true}`. By default, MLton will + not page the heap to disk when unable to grow the heap to a desired size. + (Previously, this behavior was the default, with no means to disable, with + security and least-surprise concerns.) Thanks to Wesley Terpstra for the + patch. + ** Fixed bug the FFI visible representation of `Int16.int ref` (and references + of other primitive types smaller than 32-bits) on big-endian platforms. Thanks + to Dave Herman for the bug report. + +* 2007-12-13 + ** Fixed bug in `ImperativeIOExtra.canInput` (`TextIO.canInput`). Thanks to + Ville Laurikari for the bug report. + +* 2007-12-09 + ** Better constant folding of `IntInf` operations. + +* 2007-12-07 + ** Fixed bug in algebraic simplification of `RealX` primitives. `Real.<= (x, + x)` is `false` when `x` is `NaN`. + +* 2007-11-29 + ** Fixed bug in type inference of flexible records. This would later cause + the compiler to raise the `TypeError` exception. Thanks to Wesley Terpstra for + the bug report. + +* 2007-11-28 + ** Fixed bug in cross-compilation of `gdtoa` library. Thanks to Wesley + Terpstra for the bug report and patch. + +* 2007-11-20 + ** Fixed bug in RefFlatten optimization (pass to flatten refs into containing + data structure). Thanks to Ruy LeyWild for the bug report. + +* 2007-11-19 + ** Fixed bug in the handling of weak pointers by the mark-compact garbage + collector. Thanks to Sean McLaughlin for the bug report and Florian Weimer for + the initial diagnosis. + +* 2007-11-07 + ** Added `%posint` command to `ml-lex`, to set the `yypos` type and allow the + lexing of multi-gigabyte input files. Thanks to Florian Weimer for the feature + concept and original patch. + +* 2007-11-07 + ** Added command-line switch `-mlb-path-var ' '` for specifying + MLB path variables. + +* 2007-11-06 + ** Allow numeric characters in MLB path variables. + +* 2007-09-20 + ** Fixed bug in elaboration of structures with signature constraints. This + would later cause the compiler to raise the `TypeError` exception. Thanks to + Vesa Karvonen for the bug report. + +* 2007-09-11 + ** Fixed bug in interaction of `_export`-ed functions and signal + handlers. Thanks to Sean McLaughlin for the bug report. + +* 2007-09-03 + ** Fixed bug in implementation of `_export`-ed functions using `char` + type. Thanks to Katsuhiro Ueno for the bug report. + + +== Version 20070826 + +Here are the changes from version 20051202 to version 20070826. + +=== Summary + +* New platforms: + ** amd64-linux, amd64-freebsd + ** hppa-hpux + ** powerpc-aix + ** x86-darwin (Mac OS X) +* Compiler. + ** Support for 64-bit platforms. + *** Native amd64 codegen. + ** Command-line switches. + *** Added: `-codegen amd64`, `-codegen x86`, `-default-type `, + `-profile-val {false|true}`. + *** Changed: `-stop f` (file listing now includes `.mlb` files) + ** Bytecode codegen. + *** Support for profiling. + *** Support for exception history. +* Language. + ** ML Basis annotations. + *** Removed: `allowExport`, `allowImport`, `sequenceUnit`, `warnMatch`. +* Libraries. + ** Basis Library. + *** Added: `PackWord16Big, `PackWord16Little`, `PackWord64Big`, + `PackWord64Little`. + *** Bug Fixes: see changelog. + ** `MLton` structure. + *** Added: `MLTON_MONO_ARRAY`, `MLTON_MONO_VECTOR`, `MLTON_REAL`, + `MLton.BinIO.tempPrefix`, `MLton.CharArray`, `MLton.CharVector`, + `MLton.IntInf.BigWord`, `MLton.IntInf.SmallInt`, + `MLton.Exn.defaultTopLevelHandler`, `MLton.Exn.getTopLevelHandler`, + `MLton.Exn.setTopLevelHandler`, `MLton.LargeReal`, `MLton.LargeWord`, + `MLton.Real`, `MLton.Real32`, `MLton.Real64`, `MLton.Rlimit.Rlim`, + `MLton.TextIO.tempPrefix`, `MLton.Vector.create`, `MLton.Word.bswap`, + `MLton.Word8.bswap`, `MLton.Word16`, `MLton.Word32`, `MLton.Word64`, + `MLton.Word8Array`, `MLton.Word8Vector`. + *** Changed: `MLton.Array.unfoldi`, `MLton.IntInf.rep`, `MLton.Rlimit`, + `MLton.Vector.unfoldi`. + *** Deprecated: `MLton.Socket` + ** Other libraries. + *** Added: MLRISC libary. + *** Updated: ckit library, SML/NJ library. +* Tools. + +=== Details + +* 2007-08-12 + ** Removed deprecated ML Basis annotations. + +* 2007-08-06 + ** Fixed bug in treatment of `Real.{scan,fromString}` operations. + `Real.{scan,fromString}` were using `TO_NEAREST` semantics, but should obey + current rounding mode. (Only `Real.fromDecimal` is specified to always + have `TO_NEAREST` semantics.) Thanks to Sean McLaughlin for the bug report. + +* 2007-07-27 + ** Fixed bugs in constant-folding of floating-point operations with C codegen. + +* 2007-07-26 + ** Fixed bug in treatment of floating-point operations. Floating-point + operations depend on the current rounding mode, but were being treated as + pure. Thanks to Sean McLaughlin for the bug report. + +* 2007-07-13 + ** Added `MLton.Exn.{default,get,set}TopLevelHandler`. + +* 2007-07-12 + ** Restored `native` option to `-codegen` flag. + +* 2007-07-11 + ** Fixed bug in `Real32.toInt`: conversion of real values close to + `Int.maxInt` could be incorrect. + +* 2007-07-07 + ** Updates to bytecode code generator: support for amd64-* targets, support + for profiling (including exception history). + ** Fixed bug in `Socket` module of Basis Library; unmarshalling of socket + options (for `get*` functions) used `andb` rather than `orb`. Thanks to Anders + Petersson for the bug report (and patch). + +* 2007-07-06 + ** Fixed bug in `Date` module of Basis Library; some functions would + erroneously raise `Date` when given a year <= 1900. Thanks to Joe Hurd for the + bug report. + ** Fixed a long-standing bug in monomorphisation pass. Thanks to Vesa Karvonen + for the bug report. + +* 2007-05-18 + ** Native amd64 code generator for amd64-* targets. + ** Eliminate `native` option from `-codegen` flag. + ** Add `x86` and `amd64` options to `-codegen` flag. + +* 2007-04-29 + ** Improved type checking of RSSA and Machine ILs. + +* 2007-04-14 + ** Fixed aliasing issues with `basis/Real/*.c` files. + ** Added real/word casts in `MLton` structure. + +* 2007-04-12 + ** Added primitives for bit cast of word to/from real. + ** Implement `PackReal{Big,Little}` using `PackWord{Big,Little}` and bit + casts. + +* 2007-04-11 + ** Move all system header `#include`-s to `platform/` os headers. + ** Use C99 ``, rather than custom `"assert.{h,c}"`. + +* 2007-03-13 + ** Implement `PackWord{Big,Little}` entirely in ML, using an ML byte swap + function. + +* 2007-02-25 + ** Change amd64-* target platforms from 32-bit compatibility mode (i.e., + `-m32`) to 64-bit mode (i.e., `-m64`). Currently, only the C codegen is able + to generate 64-bit executables. + +* 2007-02-23 + ** Removed expert command line switch `-coalesce `. + ** Added expert command line switch `-chunkify {coalesce|func|one}`. + +* 2007-02-20 + ** Fixed bug in `PackReal.toBytes`. Thanks to Eric McCorkle for the bug + report (and patch). + +* 2007-02-18 + ** Added command line switch `-profile-val`, to profile the evaluation of + `val` bindings; this is particularly useful with exception history for + debugging uncaught exceptions at the top-level. + +* 2006-12-29 + ** Added command line switch `-show {anns|path-map}` and deprecated command + line switch `-show-anns {false|true}`. Use `-show path-map` to see the + complete MLB path map as seen by the compiler. + +* 2006-12-20 + ** Changed the output of command line switch `-stop f` to include `.mlb` + files. This is useful for generating Makefile dependencies. The old output + is easy to recover if necessary (e.g. `grep -v '\.mlb$'`). + +* 2006-12-08 + ** Added command line switches `-{,target}-{as,cc,link}-opt-quote`, which pass + their argument as a single argument to `gcc` (i.e., without tokenization at + spaces). These options support using headers and libraries (including the + MLton runtime headers and libraries) from a path with spaces. + +* 2006-12-02 + ** Extensive reorganization of garbage collector, runtime system, and Basis + Library implementation. (This is in preparation for future 64bit support.) + They should be more C standards compliant and easier to port to new systems. + ** FFI revisions + *** Disallow nested indirect types (e.g., `int array array`). + +* 2006-11-30 + ** Fixed a bug in elaboration of FFI forms; unary FFI types (e.g., `array`, + `ref`, `vector`) could be used in places where `MLton.Pointer.t` was required. + This would later cause the compiler to raise the `TypeError` exception, along + with a lot of XML IL. + +* 2006-11-19 + ** On *-darwin, work with GnuMP installed via Fink or MacPorts. + +* 2006-10-30 + ** Ported to x86-darwin. + +* 2006-09-23 + ** Added missing specification of `find` to the `MONO_VECTOR` signature. + +* 2006-08-03 + ** Fixed a bug in Useless SSA optimization, caused by calling an imported C + function and then ignoring the result. + +* 2006-06-24 + ** Fixed a bug in pass to flatten data structures. Thanks to Joe Hurd for the + bug report. + +* 2006-06-08 + ** Fixed a bug in the native codegen's implementation of the C-calling + convention. + +* 2006-05-11 + ** Ported to PowerPC-AIX. + ** Fixed a bug in the runtime for the cases where nonblocking IO with sockets + was implemented using `MSG_DONTWAIT`. This flag does not exist on AIX, + Cygwin, HPUX, and MinGW and was previously just ignored. Now the runtime + simulates the flag for these platforms (except MinGW, yet, where it's still + ignored). + +* 2006-05-06 + ** Added `-default-type ''` for specifying the binding of default types + in the Basis Library (e.g., `Int.int`). + +* 2006-04-25 + ** Ported to HPPA-HPUX. + ** Fixed `PackReal{,32,64}{Big,Little}` to follow the Basis Library + specification. + +* 2006-04-19 + ** Fixed a bug in `MLton.share` that could cause a segfault. + +* 2006-03-30 + ** Changed `MLton.Vector.unfoldi` to return the state in addition to the + result vector. + +* 2006-03-30 + ** Added `MLton.Vector.create`, a more powerful vector-creation function than + is available in the basis library. + +* 2006-03-04 + ** Added MLRISC from SML/NJ 110.57 to standard distribution. + +* 2006-03-03 + ** Fixed bug in SSA simplifier that could eliminate an irredundant test. + +* 2006-03-02 + ** Ported a bugfix from SML/NJ for a bug with the combination of `withNack` + and `never` in CML. + +* 2006-02-09 + ** Support compiler specific annotations in ML Basis files. If an annotation + contains `:`, then the text preceding the `:` is meant to denote a compiler. + For MLton, if the text preceding the `:` is equal to `mlton`, then the + remaining annotation is scanned as a normal annotation. If the text preceding + the `:` is not-equal to `mlton`, then the annotation is ignored, and no + warning is issued. + +* 2006-02-04 + ** Fixed bug in elaboration of functors; a program with a very large number of + functors could exhibit the error `ElaborateEnv.functorClosure: firstTycons`. + + +== Version 20051202 + +Here are the changes from version 20041109 to version 20051202. + +=== Summary + +* New license: BSD-style instead of GPL. +* New platforms: + ** hppa: Debian Linux. + ** x86: MinGW. +* Compiler. + ** improved exception history. + ** Command-line switches. + *** Added: `-as-opt`, `-mlb-path-map`, `-target-as-opt`, `-target-cc-opt`. + *** Deprecated: none. + *** Removed: `-native`, `-sequence-unit`, `-warn-match`, `-warn-unused`. +* Language. + ** FFI syntax changes and extensions. + *** Added: `_symbol`. + *** Changed: `_export`, `_import`. + *** Removed: `_ffi`. + ** ML Basis annotations. + *** Added: `allowFFI`, `nonexhaustiveExnMatch`, `nonexhaustiveMatch`, + `redundantMatch`, `sequenceNonUnit`. + *** Deprecated: `allowExport`, `allowImport`, `sequenceUnit`, `warnMatch`. +* Libraries. + ** Basis Library. + *** Added: `Int1`, `Word1`. + ** `MLton` structure. + *** Added: `Process.create`, `ProcEnv.setgroups`, `Rusage.measureGC`, + `Socket.fdToSock`, `Socket.Ctl.getError`. + *** Changed: `MLton.Platform.Arch`. + ** Other libraries. + *** Added: ckit library, ML-NLFFI library, SML/NJ library. +* Tools. + ** updates of `mllex` and `mlyacc` from SML/NJ. + ** added `mlnlffigen`. + ** profiling supports better inclusion/exclusion of code. + +=== Details + +* 2005-11-19 + ** Updated SML/NJ Library and CKit Library from SML/NJ 110.57. + +* 2005-11-15 + ** Fixed a bug in `MLton.ProcEnv.setgroups`. + +* 2005-11-11 + ** Fixed a bug in the interleaving of lexing/parsing and elaborating of ML + Basis files, which would raise an unhandled `Force` exception on cyclic basis + references. Thanks to John Dias for the bug report. + +* 2005-11-10 + ** Fixed two bugs in `Time.scan`. One would raise `Time` on a string with a + large fractional component. Thanks to Carsten Varming for the bug report. + The other failed to scan strings with an explicit sign followed by a decimal + point. + +* 2005-11-03 + ** Removed `MLton.GC.setRusage`. + ** Added `MLton.Rusage.measureGC`. + +* 2005-09-11 + ** Fixed bug in display of types with large numbers of type variables, which + could cause unhandled exception `Chr`. + +* 2005-09-08 + ** Fixed bug in type inference of flexible records that would show up as + `"Type error: variable applied to wrong number of type args"`. + +* 2005-09-06 + ** Fixed bug in `Real.signBit`, which had assumed that the underlying C + signbit returned 0 or 1, when in fact any nonzero value is allowed to indicate + the signbit is set. + +* 2005-09-05 + ** Added `-mlb-path-map` switch. + +* 2005-08-25 + ** Fixed bug in `MLton.Finalizable.touch`, which was not keeping alive + finalizable values in all cases. + +* 2005-08-18 + ** Added SML/NJ Library and CKit Library from SML/NJ 110.55 to standard + distribution. + ** Fixed bug in `Socket.Ctl.*`, which got the endianness wrong on big-endian + machines. Thanks to Wesley Terpstra for the bug report and fix. + ** Added `MLton.GC.setRusage`. + ** Fixed bug in `mllex`, which had file positions starting at 2. They now + start at zero. + +* 2005-08-15 + ** Fixed bug in `LargeInt.scan`, which should skip leading `"0x"` and `"0X"`. + Thanks to Wesley Terpstra for the bug report and fix. + +* 2005-08-06 + ** Additional revisions of FFI: + *** Deprecated `_export` with incomplete annotation. + *** Added `_address` for address of C objects. + *** Eliminated address component of `_symbol`. + *** Changed the type of the `_symbol*` expression. + *** See documentation for more detail. + +* 2005-08-06 + ** Annotation changes: + *** Deprecated: `sequenceUnit` + *** Added: `sequenceNonUnit` + +* 2005-08-03 + ** Annotation changes: + *** Deprecated: `allowExport`, `allowImport`, `warnMatch` + *** Added: `allowFFI`, `nonexhaustiveExnMatch`, `nonexhaustiveMatch`, + `redundantMatch` + +* 2005-08-01 + ** Update `mllex` and `mlyacc` with SML/NJ 110.55+ versions. This + incorporates a small number of minor bug fixes. + +* 2005-07-23 + ** Fixed bug in pass to flatten refs into containing data structure. + +* 2005-07-23 + ** Overhaul of FFI: + *** Deprecated `_import` of C base types. + *** Added `_symbol` for address, getter, and setter of C base types. + *** See documentation for more detail. + +* 2005-07-21 + ** Update `mllex` and `mlyacc` with SML/NJ 110.55 versions. This incorporates + a small number of minor bug fixes. + +* 2005-07-20 + ** Fixed bug in front end that allowed unary constructors to be used without + an argument in patterns. + +* 2005-07-19 + ** Eliminated `_ffi`, which has been deprecated for some time. + +* 2005-07-14 + ** Fixed bug in runtime that caused getrusage to be called on every GC, even + if timing info isn't needed. + +* 2005-07-13 + ** Fixed bug in closure conversion tickled by making a weak pointer to a + closure. + +* 2005-07-12 + ** Changed `{OS,Posix}.Process.sleep` to call `nanosleep()` instead of + `sleep()`. + ** Added `MLton.ProcEnv.setgroups`. + +* 2005-07-11 + ** `InetSock.{any,toAddr}` raise `SysErr` if port is not in [0, 2^16^). + +* 2005-07-02 + ** Fixed bug in `Socket.recvVecFrom{,',NB,NB'}`. The type was too polymorphic + and allowed the creation of a bogus `sock_addr`. + +* 2005-06-28 + ** The front end now reports errors on encountering undefined or cyclicly + defined MLB path variables. + +* 2005-05-22 + ** Fixed bug in `Posix.IO.{getlk,setlk,setlkw}` that caused a link-time error: + undefined reference to `Posix_IO_FLock_typ`. + ** Improved exception history so that the first entry in the history is the + source position of the raise, and the rest is the call stack. + +* 2005-05-19 + ** Improved exception history for `Overflow` exceptions. + +* 2005-04-20 + ** Fixed a bug in pass to flatten refs into containing data structure. + +* 2005-04-14 + ** Fixed a front-end bug that could cause an internal bug message of the form + `"missing flexInst"`. + +* 2005-04-13 + ** Fixed a bug in the representation of flat arrays/vectors that caused + incorrect behavior when the element size was 2 or 4 bytes and there were + multiple components to the element (e.g. `(char * char) vector`). + +* 2005-04-01 + ** Fixed a bug in `GC_arrayAllocate` that could cause a segfault. + +* 2005-03-22 + ** Added structures `Int1`, `Word1`. + +* 2005-03-19 + ** Fixed a bug that caused `Socket.Ctl.{get,set}LINGER` to raise `Subscript`. + The problem was in the use of `PackWord32Little.update`, which scales the + supplied index by `bytesPerElem`. + +* 2005-03-13 + ** Fixed a bug in CML mailboxes. + +* 2005-02-26 + ** Fixed an off-by-one error in `mkstemp` defined in `mingw.c`. + +* 2005-02-13 + ** Added `mlnlffigen` tool (heavily adapted from SML/NJ). + +* 2005-02-12 + ** Added MLNLFFI Library (heavily adapted from SML/NJ) to standard + distribution. + +* 2005-02-04 + ** Fixed a bug in `OS.path.toString`, which did not raise `InvalidArc` when + needed. + +* 2005-02-03 + ** Fixed a bug in `OS.Path.joinDirFile`, which did not raise `InvalidArc` when + passed a file that was not an arc. + +* 2005-01-26 + ** Fixed a front end bug that incorrectly rejected expansive __valbind__s with + useless bound type variables. + +* 2005-01-22 + ** Fixed x86 codegen bug which failed to account for the possibility that a + 64-bit move could interfere with itself (as simulated by 32-bit moves). + +* 2004-12-22 + ** Fixed `Real32.fmt StringCvt.EXACT`, which had been producing too many + digits of precision because it was converting to a `Real64.real`. + +* 2004-12-15 + ** Replaced MLB path variable `MLTON_ROOT` with `SML_LIB`, to use a more + compiler-independent name. We will keep `MLTON_ROOT` aliased to `SML_LIB` + until after the next release. + +* 2004-12-02 + ** `Unix.create` now works on all platforms (including Cygwin and MinGW). + +* 2004-11-24 + ** Added support for `MLton.Process.create`, which works on all platforms + (including Windows-based ones like Cygwin and MinGW) and allows better control + over `std{in,out,err}` for child process. + + +== Version 20041109 + +Here are the changes from version 20040227 to 20041109. + +=== Summary + +* New platforms: + ** x86: FreeBSD 5.x, OpenBSD + ** PowerPC: Darwin (MacOSX) +* Support for MLBasis files. +* Support for dynamic libraries. +* Support for Concurrent ML (CML). +* New structures: `Int2`, `Int3`, ..., `Int31` and `Word2`, `Word3`, ..., `Word31`. +* A new form of profiling: `-profile count`. +* A bytecode generator. +* Data representation improvements. +* `MLton` structure changes. + ** Added: `share`, `shareAll` + ** Changed: `Exn`, `IntInf`, `Signal`, `Thread`. +* Command-line switch changes. + ** Deprecated: + *** `-native` (use `-codegen`) + *** `-sequence-unit` (use `-default-ann`) + *** `-warn-match` (use `-default-ann`) + *** `-warn-unused` (use `-default-ann`) + ** Removed: + *** `-detect-overflow` + *** `-exn-history` (use `-const`) + *** `-safe` + *** `-show-basis-used` + ** Added: + *** `-codegen` + *** `-const` + *** `-default-ann` + *** `-disable-ann` + *** `-profile-branch` + *** `-target-link-opt` + +=== Details + +* 2004-09-22 + ** Extended `_import` to support indirect function calls. + +* 2004-09-13 + ** Made `Date.{fromString,scan}` accept a space (treated as zero) in the first + character of the day of the month. + +* 2004-09-12 + ** Fixed bug in `IntInf` that could cause a segfault. + ** Remove `MLton.IntInf.size`. + +* 2004-09-05 + ** Made `-detect-overflow` and `-safe` expert options. + +* 2004-08-30 + ** Added `val MLton.share: 'a -> unit`, which maximizes sharing in a heap + object. + +* 2004-08-27 + ** Fixed bug in `Real.toLargeInt`. It would incorrectly raise `Option` + instead of `Overflow` in the case when the real was not an `INF`, but rounding + produced an `INF`. + ** Fixed bugs in `Date.{fmt,fromString,scan,toString}`. They incorrectly + allowed a space for the first character in the day of the month. + +* 2004-08-18 + ** Changed `MLton.{Thread,Signal,World}` to distinguish between implicitly and + explicitly paused threads. + +* 2004-07-28 + ** Added support for programming in the large using the ML Basis system. + +* 2004-07-11 + ** Fixed bugs in `ListPair.*Eq` functions, which incorrectly raised the + `UnequalLengths` exception. + +* 2004-07-01 + ** Added `val MLton.Exn.addExnMessager: (exn -> string option) -> unit`. + +* 2004-06-23 + ** Runtime system options that take memory sizes now accept a "`g`" suffix + indicating gigabytes. They also now take a real instead of an integer, + e.g. `fixed-heap 0.5g`. They also now accept uppercase, e.g. `150M`. + +* 2004-06-12 + ** Added support for OpenBSD. + +* 2004-06-10 + ** Added support for FreeBSD 5.x. + +* 2004-05-28 + ** Deprecated the `-native` flag. Instead, use the new flag `-codegen + {native|bytecode|C}`. This is in anticipation of adding a bytecode compiler. + +* 2004-05-26 + ** Fixed a front-end bug that could cause cascading error to print a very + large and unreadable internal bug message of the form `"datatype ... realized + with scheme Unknown"`. + +* 2004-05-17 + ** Automatically restart functions in the Basis Library that correspond + directly to interruptable system calls. + +* 2004-05-13 + ** Added `-profile count`, for dynamic counts of function calls and branches. + ** Equate the types `Posix.Signal.signal` and `Unix.signal`. + +* 2004-05-11 + ** Fixed a bug with `-basis 1997` that would cause type errors due to + differences between types in the MLton structure and types in the rest of the + basis library. + +* 2004-05-01 + ** Fixed a bug with sharing constraints in signatures that would sometimes + mistakenly treat two structures as identical when they shouldn't have been. + This would cause some programs to be mistakenly rejected. + +* 2004-04-30 + ** Added `MLton.Signal.{handled,restart}`. + +* 2004-04-23 + ** Added `Timer.checkCPUTimes`, and updated the `Timer` structure to match the + latest basis spec. Also fixed `totalCPUTimer` and `totalRealTimer`, which + were wrong. + +* 2004-04-13 + ** Added `MLton.Signal.Mask.{getBlocked,isMember}`. + +* 2004-04-12 + ** Fix bug that mistakenly generalized variable types containing unknown types + when matching against a signature. + ** Reasonable front-end error message when unification causes recursive + (circular) type. + +* 2004-04-03 + ** Fixed bug in sharing constraints so that `sharing A = B = C` means that all + pairs `A = B`, `A = C`, `B = C` are shared, not just `A = B` and `B = C`. + This matters in some situations. + +* 2004-03-20 + ** Fixed `Time.now` which was treating microseconds as nanoseconds. + +* 2004-03-14 + ** Fixed SSA optimizer bug that could cause the error `" has no + tyconInfo property"`. + +* 2004-03-11 + ** Fixed `Time.fromReal` to raise `Time`, not `Overflow`, on unrepresentable + times. + +* 2004-03-04 + ** Added structures `Word2`, `Word3`, ..., `Word31`. + +* 2004-03-03 + ** Added structures `Int2`, `Int3`, ..., `Int31`. + ** Fixed bug in elaboration of `and` with signatures, structures, and functors + so that it now evaluates all right-hand sides before binding any left-hand + sides. + + +== Version 20040227 + +Here are the changes from version 20030716 to 20040227. + +=== Summary + +* The front end now follows the Definition of SML and produces readable error +messages. +* Added support for NetBSD. +* Basis library changes tracking revisions to the specification. +* Added structures: `Int64`, `Real32`, `Word64`. +* File positions use `Int64`. +* Major improvements to `-show-basis`, which now displays the basis in a very +readable way with full type information. +* Command-line switch changes. + ** Deprecated: `-basis`. + ** Removed: `-lib-search`, `-link`, `-may-load-world`, `-static`. + ** Added: `-link-opt`, `-runtime`, `-sequence-unit`, `-show-def-use`, + `-stop tc`, `-warn-match`, `-warn-unused`. + ** Changed: `-export-header`, `-show-basis`, `-show-basis-used`. + ** Renamed: `-host` to `-target`. +* FFI changes. + ** Renamed `_ffi` as `_import`. + ** Added `cdecl` and `stdcall` attributes to `_import` and `_export` + expressions. +* MLton structure changes. + ** Added: Pointer. + ** Removed: Ptrace. + ** Changed: `Finalizable`, `IntInf`, `Platform`, `Random`, `Signal`, `Word`. + +=== Details + +* 2004-02-16 + ** Changed `-export-header`, `-show-basis`, `-show-basis-used` to take a file + name argument, and they no longer force compilation to halt. + ** Added `-show-def-use` and `-warn-unused`, which deal with def-use + information. + +* 2004-02-13 + ** Added flag `-sequence-unit`, which imposes the constraint that in the + sequence expression `(e1; e2)`, `e1` must be of type `unit`. + +* 2004-02-10 + ** Lots of changes to `MLton.Signal`: name changes, removal of superfluous + functions, additional functions. + +* 2004-02-09 + ** Extended `-show-basis` so that when used with an input program, it shows + the basis defined by the input program. + ** Added `stop` runtime argument. + ** Made `-call-graph {false|true}` an option to `mlprof` that determines + whether or not a call graph file is written. + +* 2004-01-20 + ** Fixed a bug in `IEEEReal.{fromString,scan}`, which would improperly return + `INF` instead of `ZERO` for things like `"0.0000e123456789012345"`. + ** Fixed a bug in `Real.{fromDecimal,fromString,scan}`, which didn't return an + appropriately signed zero for `~0.0`. + ** Fixed a bug in `Real.{toDecimal,fmt}`, which didn't correctly handle + `~0.0`. + ** Report a compile-time error on unrepresentable real constants. + +* 2004-01-05 + ** Removed option `-may-load-world`. You can now use `-runtime no-load-world` + instead. + ** Removed option `-static`. You can now use `-link-opt -static` instead. + ** Changed `MLton.IntInf.size` to return 0 instead of 1 on small ints. + +* 2003-12-28 + ** Fixed horrible bug in `MLton.Random.alphaNumString` that caused it to + return 0 for all characters beyond position 11. + +* 2003-12-17 + ** Removed `-basis` as a normal flag. It is still available as an expert + flag, but its use is deprecated. It will almost certainly disappear after the + next release. + +* 2003-12-10 + ** Allow multiple `@MLton --` runtime args in sequnce. This makes it easier + for scripts to prefix `@MLton` args without having to splice them with other + ones. + +* 2003-12-04 + ** Added support for files larger than 2G. This included changing + `Position` from `Int32` to `Int64`. + +* 2003-12-01 + ** Added `structure MLton.Pointer`, which includes a `type t` for pointers + (memory addresses, not SML heap pointers) and operations for loading from and + storing to memory. + +* 2003-11-03 + ** Fixed `Timer.checkGCTime` so that only the GC user time is included, not GC + system time. + +* 2003-10-13 + ** Added `-warn-match` to control display nonexhaustive and redundant + match warnings. + ** Fixed space leak in `StreamIO` causing the entire stream to be retained. + Thanks to Jared Showalter for the bug report and fix. + +* 2003-10-10 + ** Added `-stop tc` switch to stop after type checking. + +* 2003-09-25 + ** Fixed `Posix.IO.getfl`, which had mistakenly called `fcntl` with `F_GETFD` + instead of `F_GETFL`. + ** Tracking basis library changes: + *** `Socket` module datagram functions no longer return amount written, + since they always write the entire amount or fail. So, + `send{Arr,Vec}To{,'}` now return `unit` instead of `int`. + *** Added nonblocking versions of all the send and recv functions, as well + as accept and connect. So, we now have: `acceptNB`, `connectNB`, + `recv{Arr,Vec}{,From}NB{,'}`, `send{Arr,Vec}{,To}NB{,'}`. + +* 2003-09-24 + ** Tracking basis library changes: + *** `TextIO.inputLine` now returns a `string option`. + *** Slices used in `Byte`, `PRIM_IO`, `PrimIO`, `Posix.IO`, `StreamIO`. + *** `Posix.IO.readVec` raises `Size`, not `Subscript`, with negative + argument. + +* 2003-09-22 + ** Fixed `Real.toManExp` so that the mantissa is in [0.5, 1), not [1, 2). The + spec says that 1.0 <= man * radix < radix, which since radix is 2, implies + that the mantissa is in [0.5, 1). + ** Added `Time.{from,to}Nanoseconds`. + +* 2003-09-11 + ** Added `Real.realRound`. + ** Added `Char{Array,Vector}Slice` to `Text`. + +* 2003-09-11 + ** `OS.IO.poll` and `Socket.select` now raise errors on negative timeouts. + ** `Time.time` is now implemented using `IntInf` instead of `Int`, which means + that a much larger range of time values is representable. + +* 2003-09-10 + ** `Word64` is now there. + +* 2003-09-09 + ** Replaced `Pack32{Big,Little}` with `PackWord32{Big,Little}`. + ** Fixed bug in `OS.FileSys.fullPath`, which mistakenly stopped as soon as it + hit a symbolic link. + +* 2003-09-08 + ** Fixed `@MLton max-heap`, which was mistakenly ignored. Cleaned up `@MLton + fixed-heap`. Both `fixed-heap` and `max-heap` can use copying or mark-compact + collection. + +* 2003-09-06 + ** `Int64` is completely there. + ** Fixed `OS.FileSys.tmpName` so that it creates the file, and doesn't use + `tmpnam`. This eliminates an annoying linker warning message. + +* 2003-09-05 + ** Added structures `{LargeInt,LargeReal,LargeWord,Word}{Array,Array2,ArraySlice,Vector,VectorSlice}` + ** Fixed bug in `Real.toDecimal`, which return class `NORMAL` for subnormals. + ** Fixed bug in `Real.toLargeInt`, which didn't return as precise an integer + as possible. + +* 2003-09-03 + ** Lots of fixes to `REAL` functions. + *** `Real32` is now completely in place, except for `Real32.nextAfter` on + SunOS. + *** Fixed `Real.Math.exp` on x86 to return the right value when applied to + `posInf` and `negInf`. + *** Changed `Real.Math.{cos,sin,tan}` on x86 to always use a call to the C + math library instead of using the x86 instruction. This eliminates some + anomalies between compiling `-native false` and `-native true`. + *** Change `Real.Math.pow` to handle exceptional cases in the SML code. + *** Fixed `Real.signBit` on Sparcs. + +* 2003-08-28 + ** Fixed `PackReal{,64}Little` to work correctly on Sparc. + ** Added `PackReal{,64}Big`, `PackReal32{Big,Little}`. + ** Added `-runtime` switch, which passes arguments to the runtime via + `@MLton`. These arguments are processed before command line switches. + ** Eliminated MLton switch `-may-load-world`. Can use `-runtime` combined + with new runtime switch `-no-load-world` to disable load world in an + executable. + +* 2003-08-26 + ** Changed `-host` to `-target`. + ** Split `MLton.Platform.{arch,os}` into `MLton.Platform.{Arch,OS}.t`. + +* 2003-08-21 + ** Fixed bug in C codegen that would cause undefined references to + `Real_{fetch,move,store}` when compiling on Sparcs with `-align 4`. + +* 2003-08-17 + ** Eliminated `-link` and `-lib-search`, which are no longer needed. + Eliminated support for passing `-l*`, `-L*`, and `*.a` on the command line. + Use `-link-opt` instead. + +* 2003-08-16 + ** Added `-link-opt`, for passing options to `gcc` when linking. + +* 2003-07-19 + ** Renamed `_ffi` as `_import`. The old `_ffi` will remain for a while, but + is deprecated and should be replaced with `_import`. + ** Added attributes to `_export` and `_import`. For now, the only attributes + are `cdecl` and `stdcall`. + + +== Version 20030716 + +Here are the changes from version 20030711 to 20030716. + +== Summary + +* Fixed several serious bugs with the 20030711 release. + +== Details + +* 2003-07-15 + ** Fixed bug that caused a segfault when attempting to create an + array that was too large, e.g + + 1 + Array.sub (Array.tabulate (valOf Int.maxInt, fn i => i), 0) + + ** mlton now checks the command line arguments following the file to compile + that are passed to the linker to make sure they are reasonable. + +* 2003-07-14 + ** Fixed packaging for Cygwin and Sparc to include `libgmp.a`. + ** Eliminated bootstrap target. The `Makefile` automatically determines + whether to bootstrap or not. + ** Fixed XML type checker bug that could cause error: `"empty tyvars in + PolyVal dec"`. + +* 2003-07-12 + ** Turned off `FORCE_GENERATIONAL` in gc. It had been set, which caused the + gc to always use generational collection. This could seriously slow apps down + that don't need it. + + +== Version 20030711 + +Here are the changes from version 20030312 to 20030711. + +=== Summary + +* Added support for Sparc/SunOS using the C code generator. +* Completed the basis library implementation. At this point, the only missing +basis library function is `use`. +* Added `_export`, which allows one to call SML functions from C. +* Added weak pointers (via `MLton.Weak`) and finalization (via +`MLton.Finalizable`). +* Added new integer modules: `Int8`, `Int16`. +* Better profiling call graphs +* Fixed conversions between reals and their decimal representations to be +correct using the gdtoa library. + +=== Details + +* 2003-07-07 + ** Profiling improvements: + *** Eliminated `mlton -profile-split`. Added `mlprof -split`. Now the + profiling infrastructure keeps track of the splits and allows one to decide + which splits to make (if any) when `mlprof` is run, which is much better + than having to decide at compile time. + *** Changed `mlprof -graph` to `mlprof -keep`, and changed the behavior so + that `-keep` also controls which functions are displayed in the table. + *** Eliminated `mlprof -ignore`: it's behavior is now subsumed by `-keep`, + whose meaning has changed to be more like -ignore on nodes that are not + kept. + ** When calling `gcc` for linking, put `-link` args in same order as they + appeared on the MLton command line (they used to be reversed). + +* 2003-07-03 + ** Making `OS.Process.{atExit,exit}` conform to the basis library spec in that + exceptions raised during cleaners are caught and ignored. Also, calls to + `exit` from cleaners cause the rest of cleaners to run. + +* 2003-07-02 + ** Fixed bug with negative `IntInf` constants that could cause compile time + error message: `"x86Translate.translateChunk ... strange Offset: base: ..."` + ** Changed argument type of `MLton.IntInf.Small` from `word` to `int`. + ** Added fix to profiling so that the `mlmon.out` file is written even when + the program terminates due to running out of memory. + +* 2003-06-25 + ** Added `{Int{8,16},Word8}{,Array,ArraySlice,Vector,VectorSlice,Array2}` + structures. + +* 2003-06-25 + ** Fixed bug in `IntInf.sign`, which returned the wrong value for zero. + +* 2003-06-24 + ** Added `_export`, for calling from C to SML. + +* 2003-06-18 + ** Regularization of options: + *** `-diag` --> `-diag-pass` + *** `-drop-pass` takes a regexp + +* 2003-06-06 + ** Fixed bug in `OS.IO.poll` that caused it to return the input event types + polled for instead of what was actually available. + +* 2003-06-04 + ** Fixed bug in KnownCase SSA optimization that could case incorrect results + in compiled programs. + +* 2003-06-03 + ** Fixed bug in SSA optimizer that could cause the error message: + + Type error: Type.equals + {from = char vector, to = unit vector} + Type error: analyze raised exception loopStatement: ... + unhandled exception: TypeError + +* 2003-06-02 + ** Fixed `Real.rem` to work correctly on `inf`-s and `nan`-s. + ** Fixed bug in profiling that caused the function name to be omitted on + functions defined by `val rec`. + +* 2003-05-31 + ** `Fixed Real.{fmt,fromString,scan,toString}` to match the basis library + spec. + ** Added `IEEEReal.{fromString,scan}`. + ** Added `Real.{from,to}Decimal`. + +* 2003-05-25 + ** Added `Real.nextAfter`. + ** Added `OS.Path.{from,to}UnixPath`, which are the identity function on Unix. + +* 2003-05-20 + ** Added type `MLton.pointer`, the type of C pointers, for use with the FFI. + +* 2003-05-18 + ** Fixed two bugs in type inference that could cause the compiler to raise the + `TypeError` exception, along with a lot of XML IL. The `type-check.sml` + regression contains simple examples of what failed. + ** Fixed a bug in the simplifier that could cause the message: `"shrinker + raised Prim.apply raised assertion failure: SmallIntInf.fromWord"`. + +* 2003-05-15 + ** Fixed bug in `Real.class` introduced on 04-28 that cause many regression + failures with reals when using newer `gcc`-s. + ** Replaced `MLton.Finalize` with `MLton.Finalizable`, which has a more robust + approach to finalization. + +* 2003-05-13 + ** Fixed bug in `MLton.FFI` on Cygwin that caused `Thread_returnToC` to be + undefined. + +* 2003-05-12 + ** Added support for finalization with `MLton.Finalize`. + +* 2003-05-09 + ** Fixed a runtime system bug that could cause a segfault. This bug would + happen after a GC during heap resizing when copying a heap, if the heap was + allocated at a very low (<10M) address. The bug actually showed up on a + Cygwin system. + +* 2003-05-08 + ** Fixed bug in `HashType` that raised `"Vector.forall2"` when the arity of a + type constructor is changed by `SimplifyTypes`, but a newly constructed type + has the same hash value. + +* 2003-05-02 + ** Switched over to new layered IO implementation, which completes the + implementation of the `BinIO` and `TextIO` modules. + +* 2003-04-28 + ** Fixed bug that caused an assertion failure when generating a jump table for + a case dispatch on a non-word sized index with non-zero lower bound on the + range. + +* 2003-04-24 + ** Added `-align {4|8}`, which controls alignment of objects. With `-align + 8`, memory accesses to doubles are guaranteed to be aligned mod 8, and so + don't need special routines to load or store. + +* 2003-04-22 + ** Fixed bug that caused a total failure of time profiling with `-native + false`. The bug was introduced with the C codegen improvements that split the + C into multiple files. Now, the C codegen declares all profile labels used in + each file so that they are global symbols. + +* 2003-04-18 + ** Added `MLton.Weak`, which supports weak pointers. + +* 2003-04-10 + ** Replaced the basis library's `MLton.hostType` with `MLton.Platform.arch` + and `MLton.Platform.os`. + +* 2003-04 + ** Added support for SPARC/SunOS using the C codegen. + +* 2003-03-25 + ** Added `MLton.FFI`, which allows callbacks to SML from C. + +* 2003-03-21 + ** Fixed `mlprof` so that the default `-graph arg` for data from + `-profile-stack true` is `(thresh-stack x)`, not `(thresh x)`. + + +== Version 20030312 + +Here are the changes from version 20020923 to 20030312. + +=== Summary + +* Added source-level profiling of both time and allocation. +* Updated basis library to 2002 specification. To obtain the old +library, compile with `-basis 1997`. +* Added many modules to basis library: + ** `BinPrimIO`, `GenericSock`, `ImperativeIO`, `INetSock`, `NetHostDB`, + `NetProtDB`, `NetServDB`, `Socket`, `StreamIO`, `TextPrimIO`, `UnixSock`. +* Completed implementation of `IntInf` and `OS.IO`. + +=== Details + +* 2003-02-23 + ** Replaced `-profile-combine` wih `-profile-split`. + +* 2003-02-11 + ** Regularization of options: + *** `-l` --> `-link` + *** `-L` --> `-lib-search` + *** `-o` --> `-output` + *** `-v` --> `-verbose` + +* 2003-02-10 + ** Added option to `mlton`: `-profile-combine {false|true}` + +* 2003-02-09 + ** Added options to `mlprof`: `-graph-title`, `-gray`, `-ignore`, `-mlmon`, + `-tolerant`. + +* 2002-11 - 2003-01 + ** Added source-level allocation and time profiling. This includes the new + options to mlton: `-profile` and `-profile-stack`. + +* 2002-12-28 + ** Added `NetHostDB`, `NetProtDB`, `NetServDB` structures. + ** Added `Socket`, `GenericSock`, `INetSock`, `UnixSock` structures. + +* 2002-12-19 + ** Fixed bug in signal check insertion that could cause some signals to be + missed. The fix was to add a signal check on entry to each function in + addition to at each loop header. + +* 2002-12-10 + ** Fixed bug in runtime that might cause the message `"Unable to set + cardMapForMutator"`. + +* 2002-11-23 + ** Added support for the latest Basis Library specification. + ** Added option `-basis` to choose Basis Library version. Currently available + basis libraries are `2002`, `2002-strict`, `1997`, and `none`. + ** Added `IntInf.{orb,xorb,andb,notb,<<,~>>}` values. + ** Added `OS.IO.{poll_desc,poll_info}` types. + ** Added `OS.IO.{pollDesc,pollToIODesc,infoToPollDesc,Poll}` values. + ** Added `OS.IO.{pollIn,pollOut,pollPri,poll,isIn,isOut,isPri}` values. + ** Added `BinPrimIO`, `TextPrimIO` structures. + ** Added `StreamIO`, `ImperativeIO` functors. + +* 2002-11-22 + ** Fixed bug that caused time profiling to fail (with a segfault) when + resuming a saved world. + +* 2002-11-07 + ** Fixed bug in `MLton.eq` that could arise when using `eq` on functions. + +* 2002-11-05 + ** Improvements to polymorphic equality. Equality on IntInfs, vectors, and + dataypes all do an `eq` test first before a more expensive comparison. + +* 2002-11-01 + ** Added allocation profiling. Now, can compile with either `-profile alloc` + or `-profile time`. Renamed `MLton.Profile` as `MLton.ProfileTime`. Added + `MLton.ProfileAlloc`. Cleaned up and changed most `mlprof` option names. + +* 2002-10-31 + ** Eliminated `MLton.debug`. + ** Fixed bug in the optimizer that affected `IntInf.fmt`. The optimizer had + been always using base 10, instead of the passed in radix. + +* 2002-10-22 + ** Fixed `Real.toManExp` so that the mantissa is in [1, 2), not [0.5, 1). + ** Added `Real.fromLargeInt`, `Real.toLargeInt`. + ** Fixed `Real.split`, which would return an incorrect whole part due to the + underlying primitive, `Real_modf`, being treated as functional instead of + side-effecting. + +* 2002-09-30 + ** Fixed `rpath` problem with packaging. All executables in packages + previously made had included a setting for `RPATH`. + + +== Version 20020923 + +Here are the changes from version 20020410 to 20020923. + +=== Summary + +* MLton now runs on FreeBSD. +* Major runtime system improvements. The runtime now implements mark-compact +and generational collection, in addition to the copying collection that was +there before. It automatically switches between the the collection strategies +to improve performance and to try to avoid paging. +* Performance when compiling `-exn-history true` has been improved. +* Added `IntInf.log2`, `MLton.GC.pack`, `MLton.GC.unpack`. +* Fixed bug in load world that could cause "sread failed" on Cygwin. +* Fixed optimizer bug that could cause `"no analyze var value property"` +message. + +=== Details + +* 2002-09 + ** Integrated Sam Rushing's changes to port MLton to FreeBSD. + +* 2002-08-25 + ** Changed the implementation of exception history to be completely + functional. Now, the extra field in exceptions (when compiling `-exn-history + true`) is a `string list` instead of a `string list ref`, and `raise` conses a + new exception with a new element in the list instead of assigning to the list. + This changes the semantics of exception history (for the better) on some + programs. See `regression/exnHistory3.sml` for an example. It also + significantly improves performance when compiling `-exn-history true`. + +* 2002-07 and 2002-08 + ** Added generational GC, and code to the runtime that automatically turns it + on and off. + +* 2002-08-20 + ** Fixed SSA optimizer bug that could cause the following error message: `"x_0 + has no analyze var value property"` + +* 2002-07-28 + ** Added `MLton.GC.{pack,unpack}`. `pack` shrinks the heap so that other + processes can use the RAM, and its dual, `unpack`, resizes the heap to the + desired size. + +* 2002-06 and 2002-07 + ** Added mark compact GC. + ** Changed array layout so that arrays have three, not two header words. The + new word is a counter word that preceeds the array length and header. + ** Changed all header words to be indices into an array of object descriptors. + +* 2002-06-27 + ** Added patches from Michael Neumann to port runtime to FreeBSD 4.5. + +* 2002-06-05 + ** Output file and intermediate file are now saved in the current directory + instead of in the directory containing the input file. + +* 2002-05-31 + ** Fixed bug in overloading of `/` so that the following now type checks: + + fun f (x, y) = x + y / y + +* 2002-04-26 + ** Added back `max-heap` runtime option. + +* 2002-04-25 + ** Fixed load/save world so that they use binary mode. This should fix the + `sread failed` problem that Byron Hale saw on Cygwin that caused `mlton` to + fail to start. + ** Added `IntInf.log2`. + ** Changed call to linker to use `libgmp.a` (if it exists) instead of + `libgmp.so`. This is because the linker adds a dependency to a shared library + even if there are no references to it + +* 2002-04-23 + ** Rewrote heap resizing code. This fixed bug that was triggered with large + heaps and could cause a spurious out of memory error. + ** Removed GnuMP from MLton sources (again :-). + + +== Version 20020410 + +Here are the changes from version 20011006 to version 20020410. + +=== Details + +* 2002-03-28 + ** Added BinIO. + +* 2002-03-27 + ** Regularization of options + *** `-g` --> `-degug {false|true}` + *** `-h n` --> `-fixed-heap n` + *** `-p` --> `-profile {false|true}` + +* 2002-03-22 + ** Set up the stubs so that MLton can be compiled in the standard basis + library, with no `MLton` structure. Thus it is now easy to compile MLton with + an older (or newer) version of itself that has a different `MLton` structure. + +* 2002-03-17 + ** Added `MLton.Process.{spawn,spawne,spawnp}`, which use primitives when + running on Cygwin and fork/exec when running on Linux. + +* 2002-02 - 2002-03 + ** Added the ability to cross-compile to Cygwin/Windows. + +* 2002-02-24 + ** Added GnuMP back for use with Cygwin. + +* 2002-02-10 + ** Reworked object header words so that `Array.maxLen = valOf Int.maxInt`. + Also fixed a long-standing minor bug in MLton, where `Array.array + (Array.maxLen, ...)` would raise `Size` instead of attempting to allocate the + array. It was an off-by-one error in the meaning of `Array.maxLen`. + +* 2002-02-08 + ** Modifications to runtime to behave better in situations where the amount of + live data is a signifant fraction of the amount of RAM, based on code from + PolySpace. MLton executables by default can now use more than the available + amount of RAM. Executables will still respect the `max-heap` runtime arg if + it is set. + +* 2002-02-04 + ** Improvements to runtime so that it fails to get space, it attempts to get + less space instead of failing. Based on PolySpace's modifications. + ** Added `MLton.eq`. + +* 2002-02-03 + ** Added `MLton.IntInf.gcd`. + ** Removed GnuMP from MLton sources. We now link with `/usr/lib/libgmp.a`. + ** Added `TextIO.getPosOut`. + ** Renamed type `MLton.Itimer.which` to `MLton.Itimer.t` and + `MLton.Itimer.whichSignal` to `MLton.Itimer.signal`. + ** Added `-coalesce` flag, for use with the C backend. + +* 2002-01-26 + ** Added `-show-basis-used`, which prints out the parts of the basis library + that the input program uses. + ** Changed several other flags (`-print-at-fun-entry`, `-show-basis`, + `-static`) to follow the `{false|true}` convention. + +* 2002-01-22 + ** Improved `MLton.profile` so that multiple profile arrays can exist + simultaneously and so that the current one being used can be set from the SML + side. + +* 2002-01-18 + ** The Machine IL has been replaced with an RSSA (representation explicit SSA) + IL and an improved Machine IL. + +* 2002-01-16 + ** Added KnownCase SSA optimization + +* 2002-01-14 + ** Added rudimentary profiling control from with a MLton compile program via + the `MLton.Profile` structure. + +* 2002-01-09 + ** Fixed bug in match compiler that caused case expressions on datatypes with + redundant cases to be compiled incorrectly. + +* 2002-01-08 + ** Added redundant tuple construction elimination to SSA shrinker. + ** Improved Flatten SSA optimization. + +* 2001-12-06 + ** Changed the interface for `MLton.Signal`. There is no longer a separate + `Handler` substructure. This was done so that programs that just use + `default` and `ignore` signal handlers don't bring in the entire thread + mechanism. + +* 2001-12-05 + ** Added LocalRef elimination SSA optimization. + +* 2001-11-19 + ** The CPS IL has been replaced with an SSA (static-single assignment) IL. + All of the optimizations have been ported from CPS to SSA. + +* 2001-10-24 + ** Fixed bug in `Thread_atomicEnd` -- `limit` was mistakenly set to `base` + instead of to 0. This caused assertion failures when for executables compiled + `-g` because `GC_enter` didn't reset `limit`. + ** Fixed bug in register allocation of byte registers. + +* 2001-10-23 + ** Added `-D` option to `cmcat` for preprocessor defines. Thanks to Anoq for + sending the code. + ** Changed limit check insertion so that limit checks are only coalesced + within a single basic block -- not across blocks. This slows many benchmarks + down, but is needed to fix a bug in the way that limit checks were coalesced + across blocks. Hopefully we will figure out a better fix soon. + +* 2001-10-18 + ** Fixed type inference of flexrecord so that it now follows the Definition. + Many programs containing flexrecords were incorrectly rejected. Added many + new tests to regression/flexrecord.sml. + ** Changed the behavior of `-keep dot` combined with `-keep pass` for SSA + passes. Dot files are now saved for the program before and after, instead of + just after. + +* 2001-10-11 + ** Fixed a bug in the type inference that caused type variables to be + mistakenly generalized. The bug was exposed in Norman Ramsey's `sled.sml`. + Added a test to `regression/flexrecord.sml` to catch the problem. + + +== Version 20011006 + +Here are the changes from version 20010806 to version 20011006. + +=== Summary + +* Added `MLton.Exn.history`, which is similar to `SMLofNJ.exnHistory`. +* Support for `#line` directives of the form `(*#line line.col "file"*)`. +* Performance improvements in native codegenerator. +* Bug fixes in front-end, optimizer, register allocator, +`Real.{maxFinite,minPos,toManExp}`, and in heap save and restore. + +=== Details + +* 2001-10-05 + ** Fixed a bug in polymorphic layered patterns, like + + val 'a a as b = [] + + These would always fail due to the variable `a` not being handled correctly. + ** Fixed the syntax of `val rec` so that a pattern is allowed on the left-hand + side of the `=`. Thus, we used to reject, but now accept, the following. + + val rec a as b as c = fn _ => () + val rec a : unit -> unit : unit -> unit = fn () => () + + Thanks again to Andreas Rossberg's test files. This is now tested for in + `valrec.sml`. + ** Fixed dynamic semantics of `val rec` so that if `val rec` is used to + override constructor status, then at run time, the `Bind` exception is raised + as per rule 126 of the Definition. So, for example, the following program + type checks and compiles, but raises `Bind` at run time. + + val rec NONE = fn () => () + val _ = NONE () + + Again, this is checked in `valrec.sml`. + ** Added `\r\n` to ml.lex so that Windows style newlines are acceptable in + input files. + +* 2001-10-04 + ** Fixed bug in the implementation of `open` declarations, which in the case + of `open A B` had opened `A` and then looked up `B` in the resulting + environment. The correct behaviour (see rule 22 of the Definition) is to + lookup each _longstrid_ in the current environment, and then open them all in + sequence. This is now checked for in the `open.sml` regression test. Thanks + to Andreas Rossberg for pointing this bug out. + ** Fixed bug that caused tyvars of length 1 (i.e. `'`) to be rejected. This + is now checked in the `id.sml` regression test. Again, thanks to Andreas + Rossberg for the test. + +* 2001-10-02 + ** Fixed bugs in `Real.toManExp` (which always returned the wrong result + because the call to `frexp` was not treated as side-effecting by the + optimizer) and in `Real.minPos`, which was zero because of a mistake with + extra precision bits. + +* 2001-10-01 + ** Added `MLton.Exn.history`. + ** Fixed register allocation bug with `fucom` instruction. Was allowing + `fucomp` when the first source was not removable. + ** Changed `Real.isFinite` to use the C `math.h` `finite` function. This + fixed the nontermination bug which occurred in any program that used + `Real.maxFinite`. + +* 2001-09-22 + ** Bug fixes found from Ramsey's `lrtl` in `contify.fun` and + `unused-args.fun`, both of which caused compile-time exceptions to be raised. + +* 2001-09-21 + ** Fixed `MLton.World.{load,save}` so that the saved world does not store the + max heap size. Instead, the max heap size is computed upon load world in + exactly the same way as at program startup. This fixes a long-standing (but + only recently noticed) problem in which `mlton` (which uses a saved world) + would attempt to use as much memory as was on the machine used to build + `world.mlton`. + +* 2001-08-29 + ** Overlow checking is now on by default in the C backend. This is a huge + performance hit, but who cares, since we never use the C backend except for + testing anyways. + +* 2001-08-22 + ** Added support for #line directives of the form + + (*#line line.col "file"*) + + These directives only affect error messages produced by the parser and + elaborator. + +* 2001-08-17 + ** Fixed bug in RemoveUnused optimzation that caused the following program to + fail to compile. + + fun f l = case l of [] => f l | _ :: l => f l + val _ = f [13] + +* 2001-08-14 + ** New x86-codegen infrastructure. + *** support for tracking liveness of stack slots and carrying them in + registers across basic blocks + *** more specific `Entry` and `Transfer` datatypes to make calling convention + distinctions more explicit + *** new heuristic for carrying values in registers across basic blocks (look + Ma, no Overflows!) + *** new "predict" model for generating register allocation hints + *** additional bug fixes + +* 2001-08-07 + ** `MLton.Socket.shutdownWrite` flushes the outstream. + + +== Version 20010806 + +Here are the changes from version 20010706 to version 20010806. + +=== Summary + +* `Word.andb (w, 0xFF)` now works correctly +* `MLton.Rusage.rusage` has a patch to work around a linux kernel bug +* Programs of the form `_exp_ ; _program_` are now accepted +* Added the `MLton.Rlimit` structure +* Added the `-keep dot` flag, which produces call graphs, intraprocedural +control-flow graphs, and dominator trees + +=== Details + +* 2001-08-06 + ** Added simple CommonBlock elimination CPS optimization. + +* 2001-08-02 + ** Took out `-keep il`. + +* 2001-07-31 + ** Performance improvements to `TextIO.{input, output, output1}`. + +* 2001-07-25 + ** Added RedundantTest elimination CPS optimization. + +* 2001-07-21 + ** Added CommonSubexp elimination CPS optimization. + +* 2001-07-20 + ** Bug fix to x86 codegen. The `commuteBinALMD` peephole optimization would + rewrite `mov 2,Y; add Y,Y` as `mov Y,Y; add 2,Y`. Now the appropriate + interference checks are made. + ** Added intraprocedural unused argument removal. + ** Added intraprocedural flattener. This avoids some stupid tuple allocations + in loops. Decent speedup on a few benchmarks (`count-graphs`, `psdes-random`, + `wc-scanStream`) and no noticeable slowdowns. + ** Added `-keep dot` flag. + +* 2001-07-17 + ** Modified grammar to properly handle `val rec`. There were several problems. + *** MLton had accepted `val rec 'a ...` instead of `val 'a rec ...` + *** MLton had not accepted `val x = 13 and rec f = fn () => ()` + *** MLton had not accepted `val rec rec f = fn () => ()` + *** MLton had not accepted `val rec f = fn () => () and rec g = fn () => ()` + +* 2001-07-16 + ** Workaround for Linux kernel bug that can cause `getrusage` to return a wrong + system time value (low by one second). See `fixedGetrusage` in `gc.c`. + ** Bug fix to x86 codegen. The register allocator could get confused when + doing comparisons of floating point numbers and use the wrong operand. The + bug seems to have never been detected because it only happens when both of the + operands are already on the floating point stack, which is rare, since one is + almost always in memory since we don't carry floating point values in the + stack across basic blocks. + ** Added production to the grammar on page 58 of the Definition that had been + missing from MLton since day one. + + program ::= exp ; + + Also updated docs to reflect change. + ** Modified grammar to accept the empty program. + ** Added `-type-check` expert flag to turn on type checking in ILs. + +* 2001-07-15 + ** Bug fix to the algebraic simplifier. It had been rewriting + `Word32.andb (w, 0wxFF)` to `w` instead of + `Word32.andb (w, 0wxFFFFFFFF)` to `w`. + +* 2001-07-13 + ** Improved CPS shrinker so that `if`-tests where the `then` and `else` branch + jump to the same label is turned into a direct jump. + ** Improved CPS shrinker (`Prim.apply`) to handle constructors + *** `A = A` --> `true` + *** `A = B` --> `false` + *** `A x` = `B y` --> `false` + ** Rewrote a lot of loops in the basis library to use inequalities instead of + equality for the loop termination test so that the (forthcoming) overflow + detection elimination will work on the loop index variable. + +* 2001-07-11 + ** Fixed minor bugs in `Array2.{array,tabulate}`, `Substring.{slice}` that + caused the `Overflow` exception to be raised instead of `Size` or `Subscript` + ** Fixed bug in `Pack32Big.update` that caused the wrong location to be updated. + ** Fixed several bugs in `Pack32{Big,Little}.{subArr,subVec,update}` that + caused `Overflow` to be raised instead of `Subscript`. Also, improved the + implementation so that bounds checking only occurs once per call (instead of + four times, which was sometimes happening. + ** Fixed bugs in `Time.{toMilliseconds,toMicroseconds}` that could cause a + spurious `Overflow` exception. + ** Fixed bugs in `Time.{fromMilliseconds,fromMicroseconds}` that could cause a + spurious `Time` exception. + ** Improved `Pack32.sub*` by reordering the `orb`-s. + ** Improved `{Int,IntInf}.mod` to increase chances of constant folding. + ** Switched many uses of `+`, `-`, `*` in basis library to the non-overflow + checked versions. Modules changed were: `Array`, `Array2`, `Byte`, `Char`, + `Int`, `IntInf`, `List`, `Pack32{Big,Little}`, `Util`, `String`, `StringCvt`, + `Substring`, `TextIO`, `Time`, `Vector`. + ** Added regression tests for `Array2`, `Int` (overflow checking), `Pack32`, + `Substring`, `Time`. + ** Changed CPS output so that it includes a dot graph for each CPS function. + +* 2001-07-09 + ** Change `OS.Process.exit` so that it raises an exception if the exit status + is not in [0, 256). + ** Added `MLton.Rlimit` to provide access to `getrlimit` and `setrlimit`. + + +== Version 20010706 + +Here are the changes from the 20000906 version to the 20010706 version. + +=== Summary + +* Native X86 code generator (instead of using `gcc`) +* Significantly improved compile times +* Significantly improved run times for generated executables +* Many bug fixes +* Correct raising of the `Overflow` exception for integer arithmetic +* New modules in the `MLton` structure + +=== Details + +* 2001-07-06 + ** GC mods from Henry. Mostly adding `inline` declarations. + +* 2001-07-05 + ** Fixed several runtime bugs involving threads, critical sections, and + signals. + +* 2001-06-29 + ** Fixed performance bug in `cps/two-point-lattice.fun` that caused quadratic + behavior. This affects the raise-to-jump and useless analayses. In + particular, the useless analysis was blowing up when compiling `fxp`. + +* 2001-06-27 + ** Henry improved `wordAlign` -- this sped up GC by 27% (during a self + compile). + +* 2001-06-20 + ** Moved `MLton.random` to `MLton.Random.rand` and added other stuff to + `MLton.Random` + ** Added `MLton.TextIO.mkstemp`. + ** Made `Int.{div,quot}` respect the `-detect-overflow` switch. + +* 2001-06-20 + ** Added `MLton.Syslog`. + +* 2001-06-07 + ** Fixed bug in `MLton.Socket.accept` that was in the runtime implementation + `Socket_accept`. It did a `setsockopt SO_REUSEADDR` after the `accept`. It + should have been after the call to `socket` in `Socket_listen`. Thanks to + Doug Bagley for the fix. + +* 2001-05-30 + ** Fixed bug in remove-unused that caused polymorphic equality to return + `true` sometimes when constructors were never used in a pattern match. For + example, the following (in which `A` and `B` are not used as patterns): + + datatype t = A | B + datatype u = C of t + val _ = if C A = C B then raise Fail "bug" else () + +* 2001-03-27 + ** Fixed bug that caused all of the following to fail: + `{LargeWord,Word,SysWord}.{toLargeInt,toLargeIntX,fromLargeInt}` The problem + was the basis library file `integer/patch.sml` which fixed `Word32` but not + the other structures that are the same. + +* 2001-02-12 + ** Fixed bug in match compiler that caused it to spend a lot of extra time in + deep patterns. It still could be exponential however. Hopefully this will + get fixed in the release after next. This bug could cause very slow compile + times in some cases. Anyways, this fix cut the `finish infer` time of a self + compile down from 22 to under 4 seconds. I.E. most of the time used to be + spent due to this bug. + +* 2001-02-06 + ** Fixed bug in frontend that caused the wrong file and line number to be + reported with errors in functor bodys. + +* 2001-01-03 - 2000-02-05 + ** Changes to CoreML, XML, SXML, and CPS ILs to replace lists by vectors in + order to decrease space usage. + +* 2001-01-16 + ** Fixed a bug in constant propagation where the length of vectors was not + propagated properly. + +* 2000-12-11 - 2001-01-03 + ** Major rewrite of elaborator to use a single hash table for each namespace + instead of a hash table for every environment. + +* 2000-12-20 + ** Fixed some bugs in the SML/NJ compatibility library, + `src/lib/mlton-subs-in-smlnj`. + +* 2000-12-08 + ** More careful removal of tracing code when compiling `MLton_debug=0`. This + cut down self compile data size by 100k and compile time by a few seconds. + ** Added built in character and word cases propagated throughout all ILs. + +* 2000-12-06 + ** Added max stack size information to `gc-summary`. + +* 2000-12-05 + ** Added `src/benchmark`, which contains an SML program that benchmarks all of + the SML compilers I have my hands on. The script has lots of hardwired paths + for now. + +* 2000-12-04 + ** Fixed bug in `Posix.ProcEnv.environ,` which did not work correctly in a + saved world (the original `environ` was saved). In fact, it did not work at + all because the ML primitive expected a constant and the C was a nullary + function. This caused a segfault with any program using + `Posix.ProcEnv.environ`. + ** `Added MLton.ProcEnv.setenv`, since there doesn't seem to be any `setenv` + in the basis library. + +* 2000-11-29 + ** Changed backend so that it should no longer generate machine programs with + `void` operands. + ** Added `-detect-overflow` and `-safe` flags. + +* 2000-11-27 - 2000-11-28 + ** Changes in many places to use `List.revMap` instead of `List.map` to cut + down on allocation. + +* 2000-11-21 + ** Added `MLton.Word.~` and `MLton.Word8.~` to the `MLton` structure. + +* 2000-11-20 + ** Fixed a bug in the CPS shrinker that could cause a compile-time failure. + It was maintaining occurrence counts incorrectly. + +* 2000-11-15 + ** Fixed a (performance) bug in constant propagation that caused the hashing + to be bad. + ** Improved translation to XML so that the match compiler isn't called on + tuple or if expressions. This should speed up the translation and make the + output smaller. + ** Fixed a bug in the match compiler that caused it to not generate integer + case statements. This should speed up the mlyacc benchmark and the MLton + front end. + +* 2000-11-09 + ** Added `IntInf_equal` and `IntInf_compare` primitives. + ** Took out the automatic `-keep c` when compiling `-g`. + +* 2000-11-08 + ** Added a whole bunch of algebraic laws to the CPS shrinker, including some + specifically targeted to `IntInf` primitives. + +* 2000-11-03 + ** Improved implementation of properties so that sets don't allocate. + ** Improved implementation of type homomorphism in type inference. What was + there before appears to have been a bug -- it didn't use the property on + types. + +* 2000-11-02 + ** Fixed timers used with `-v` option to use user + sys time. + +* 2000-10-27 + ** Split the runtime basis library C files into many separate files so that + only the needed code would be included by the linker. + ** Fixed several bugs in the front end grammar and elaborator that caused type + specifications to be handled incorrectly. The following three programs used + to be handled incorrectly, but are now handled correctly. + + signature S = sig type t and u = int end (* reject *) + signature S = sig type t = int and u = t end (* accept *) + signature S = sig eqtype t and u = int end (* reject *) + +* 2000-10-25 + ** Changes to `main.sml` to run complete compiles with `-native` switch. + +* 2000-10-24 + ** Removed defunctorizer. + +* 2000-10-20 + ** Fixed bug in `cps-tree.fun` with `PrimExp.maySideEffect`. This bug could + cause `"no operand"` failures in the backend. + ** Fixed bug in the runtime implementation of `MLton.size`. The size for + stack objects was using the `used` instead of `reserved`, and so was too low. + +* 2000-10-19 + ** Replaced automatically generated dependencies in `src/runtime/Makefile` + with hand generated ones. Took out `make depend` from `src/Makefile`. `make + depend` was behaving really badly on RHAT 7.0. + ** Tweaked compiler to shorten width of C output lines to work around bug in + RHAT 7.0 `cpp` which silently truncates (very) long lines. + ** Fixed bug in grammar that didn't allow `op` to occur in datatype and + exception bindings, causing the following to fail + + datatype t = op T + exception op E = op Fail + + ** Improved error messages in CM processor. Fixed bug in CM Alias handling. + +* 2000-10-18 + ** Fixed two bugs in the gc that did comparisons with `(s->limit - + s->frontier)`, which of course doesn't work if `frontier` is beyond `limit`, + since these are unsigned. This could have caused segfaults, except that the + mutator checks the `frontier` upon return from the GC. + +* 2000-10-17 + ** Fixed bug in backend in the calculation of `maxFrameSize`. It could be + wrong (low) in some situations. + ** Improved CPS inliner's estimate of function sizes. The size of a function + now takes into account other inlined functions that the function calls. This + also changed the meaning of the size argument to the `-inline` switch. It now + corresponds (roughly) to the product of the size of the function and the + number of calls. In general, it should be larger than before. + +* 2000-10-13 + ** Made some calls to `Array.sub` unsafe in the implementation of `Array2`. + ** Integrated Matthew's new x86 backend with floating point support. + +* 2000-10-09 + ** Fixed CM file processor so that MLton works if it is run from a different + directory than the main CM file. + +* 2000-10-04 + ** Changed LimitCheck so it loops on the `frontier > limit` check. This fixed + a potential bug in threads caused when there is enough space available for a + thread, `t`, before switching to another thread but not enough space when it + resumes. This could have caused a segfault. + +* 2000-10-03 + ** More rewrites of `TextIO.StreamIO` to improve speed. + ** Changed `TextIO` so that only `TextIO.stdErr` is unbuffered. + ** Changed `TextIO` so that FIFOs and sockets are buffered. + +* 2000-10-02 + ** Combined remove-unused-constructors, remove-unused-functions, and + remove-unused-globals into a single pass that runs to fixed-point and produces + results at least as good as running the previous three in (any) sequence. + +* 2000-09-29 + ** Added `GC_FIRST_CHECK`, which does a gc at each limit check the first time + it reached. + ** Reimplemented `TextIO.StreamIO` (from 2000-09-12) to use lists of strings + instead of lists of characters so that the per char space overhead is small. + +* 2000-09-21 + ** Fixed bug in profiling labels in C code. The label was always the basic + block label instead of the cps function label. + ** Added `-b` switch to `mlprof` to gather data at the basic block level. + ** Improved performance of `TextIO.input1` by about 3X. + +* 2000-09-15 - 2000-09-19 + ** Added overflow exceptions to CPS and Machine ILs. + +* 2000-09-12 + ** Fixed `TextIO.scanStream`. It was very broken. + ** Added `TextIO.{getInstream,mkInstream,setInstream}` and + `TextIO.StreamIO.{canInput,closeIn,endOfStream,input1,input,inputAll,inputLine,inputN}`. + +* 2000-09-11 + ** Fixed `Real_qequal` in `mlton-lib.h`. It was missing a paren that caused + code using it to not even compile. It was also semantically incorrect. + ** Noted that `Real_{equal,lt,le,gt,ge}` may not follow basis library spec, + since ANSI does not require IEEE compliance, and hence these could return + wrong results when nans are involved. + + +== Version 20000906 + +Here are the changes from the 20000712 version to the 20000906 version. + +=== Summary + +* Version 20000906 is mostly a bugfix release over 20000712. The other major +changes are that `mllex` and `mlyacc` are now included and that `mlton` can now +process a limited subset of CM files as input. + +=== Details + +* 2000-09-06 + ** Fixed `Socket_listen` in `mlton-lib.c` so that it closes the socket if the + `bind`, `listen`, or `getsockname` fails. This could have caused a file + descriptor leak. + +* 2000-09-05 + ** Added `-static` commandline switch. + ** Changed default max heap size to .85 RAM from .95 RAM. + ** Added `PackRealLittle` structure to basis library. + +* 2000-08-25 + ** Added cases on integers to ILs (instead of using sequences of tests) so + that backend can emit more efficient test (jump table, binary tree, ...). + +* 2000-08-24 + ** Fixed bug in `gc.c`. `dfsInitializeStack` would `smummap` a `NULL` pointer + whenver `toSpace` was `NULL`. This could cause `MLton.size` to segfault. + ** Fixed bug in `Popt` that caused `-k` to fail with no keeps. + +* 2000-08-22 - 2000-08-23 + ** Ported `mllex` and `mlyacc` from SML/NJ + +* 2000-08-20 - 2000-08-21 + ** Added ability to use a `.cm` file as input to MLton. + +* 2000-08-16 + ** Ported `mlprof` to SML. + ** Fixed bug in `library/basic/assert.sml` that caused asserts to be run even + when `MLton.debug = false`. + +* 2000-08-15 + ** Fixed bug in backend -- computation of `maxFrameSize` was wrong. It didn't + count slots in frames that didn't make nontail calls. This could lead to the + stack being overwritten because a stack limit check didn't guarantee enough + space, and lead to a segfault. + ** Fixed bug in `gc.c` `newThreadOfSize`. If the thread allocation caused a + gc, then the stack wasn't forwarded, leading to a segfault. The solution was + to ensure enough memory all at once, and then fill in both objects. + +* 2000-08-14 + ** Changed limit checks so that checks < 512 bytes are replaced by a check for + 0 bytes. The runtime also moves the limit down by 512. This is done so that + the common case, a small limit check, has less code and is faster. + ** Fixed bug in `cps/cps-tree.fun`. `Program.hasPrim` returned `true` for any + program that had *any* primapp, not just programs satisfying the predicate. + This caused `cps/once.fun` to be overly conservative, since it thought that + every program used continuations. + +* 2000-08-10 + ** Fixed bug in CPS typechecker. It didn't enforce that handlers should be + defined before any reference to them -- including implicit references in + `HandlerPops`. This caused an evil bug in the liveness analysis where a + variable that was only live in the handler was missed in a continuation + because the liveness for the handler wasn't computed yet. + ** Limited the size for moving up limit checks for arrays whose size is known + at compile time to avoid huge limit checks getting moved into loops. + ** added `-indent`, `-kp`, `-show-types` switches. + ** Put optimization in CPS IL suggested by Neal Glew. It determines for each + toplevel function if it can raise an exception to its caller. Also, it + removes `HanderPush` and `HandlerPop` for handlers that are not on top of the + stack for any nontail call. + +* 2000-08-08 + ** Changed register allocator so that continuation formals can be allocated in + pseudo registers -- they aren't necessarily forced to the stack. + +* 2000-08-03 + ** Fixed bug in constant folding. `Word8.>>` had been used to implement + `Word8.~>>`. + ** Fixed bug in allocate registers that was not forcing the size argument to + `Primitive.Array.array` to be a stack slot. This could cause problems if + there was a thread switch in the limit check, since upon return the size + pseudo register would have a bogus value. + +* 2000-08-01 + ** Turned back on XML simplification after monomorphisation. + +* 2000-07-31 + ** Fixed bug in `MLton.Itimer.set` that caused the time to be doubled. + ** Fixed bug in `MLton.Thread` that made it look like asynchronous exceptions + were allowed by `throw`-ing an exception raising thunk to an interrupted + thread obtained via a signal handler. Attempting asynchronous exceptions will + now cause process death, with a helpful error message. + +* 2000-07-27 + ** Updated docs to include `structure World: MLTON_WORLD` in `MLton` + structure. + ** Added toplevel signatures `MLTON_{CONT, ..., WORLD}` to basis library. + ** Fixed broken link in docs to CM in `cmcat` section. + +* 2000-07-26 + ** Eliminated `GC_switchToThread` and `Thread_switchTo1`, since the inlined + version `Thread_switchTo` is all that's needed, and Matt's X86 backend now + handles it. + ** Added `MLton.Signal.vtalrm`, needed for `Itimer.Set{which = + Itimer.Virtual, ...}`. + +* 2000-07-25 + ** Added `MLton.Socket.shutdownWrite`. + +* 2000-07-21 + ** Updated `mlton-lib.c` `MLton_bug` with new email (MLton@sourcelight.com). + +* 2000-07-19 + ** Fixed `Posix.Process.kill` to check for errors. + +* 2000-07-18 + ** Fixed the following `Posix.ProcEnv` functions to check for errors: + `setgid`, `setpgid`, `setsid`, `setuid`. + ** Fixed `doc/examples/callcc.sml`. + + +== Version 20000712 + +Here are the changes from the 1999-07-12 to the 20000712 version. + +=== Details + +* 2000-06-10 - 2000-07-12 + ** Too many changes to count: bug fixes, new basis library modules, optimizer + improvements. + +* 2000-06-30 + ** Fixed bug in monomorphiser that caused programs with non-value carrying + exception declarations in polymorphic functions to have a compile-time error + because of a duplicate label. The problem was that the exception constructor + wasn't duplicated. + +* 2000-05-22 - 2000-06-10 + ** Finished the changes for the new CPS IL. + +* 2000-01-01 + ** Fixed some errors in the basis library: + *** `Real.copySign` + *** `Posix.FileSys.fpathconf` + *** `Posix.IO.{lseek, getlk, setlk, setlkw}` + *** `Posix.ProcEnv.setpgid` + *** `Posix.TTY.getattr` + *** `System.FileSys.realPath` + +* 1999-12-22 + ** Fixed bug in `src/closure-convert/abstract-value.fun` that caused a + compiler failure whenever a program had a vector where the element type + contained an `->`. + +* 1999-12-10 + ** Changed dead code elimination in `core-ml/dead-code.fun` so that wildcard + declarations (`val _ = ...`) in the basis are kept. Changed places in the + basis library to take advantage of this. + ** Added `setTopLevelHander` primitive so that the basis library code can + define the toplevel handler. + ** Changed `basis-library/misc/suffix.sml` to call `OS.Process.exit`. Took + out `Halt` transfer from CPS, since the program never should reach it. + ** Cleaned up `basis-library/system/{process.sml, unix.sml}` to use the new + signal handling stuff. + +* 1999-11-28 - 1999-12-20 + ** Added support for threads and cleaned up signal handling. This involved a + number of changes: + *** The stack is now allocated as just another kind of heap object. + *** Limit checks are inserted at all loop headers, whether or not there is + any allocation. This is to ensure that the signal handler always has a + chance to get called. + *** The register allocator puts more variables in stack slots. The new rule + is that a variable goes in a stack slot if it is ever live across a nontail + call, in a handler, or (this is the new part) across a limit check. + *** Arguments are passed on the stack, with the convention determined by + argument types. + *** The "locals" array of pointers that was copied to/from for GC is now + gone, because no registers (in particular no pointer valued registers) can + be live at a limit check point. + +* 1999-11-21 + ** Runtime system + *** Fixed a bug introduced by the signal code (presumably on 1999-08-09) + that caused a gc to *not* be performed when doing a save world. This caused + the heaps created by save world to be the same size as the heap -- not the + live data. This was quite bad. + *** Cleaned up the `Makefile`. Add make depend. + *** Added max gc pause to `gc-summary` info. + *** Move heap translation variables that had been file statics into the + `GC_state`. + ** Made `structure Position` available at toplevel. + ** Basis Library + *** Added `MLton.loadWorld` + ** Added `Primitive.usesCallcc` + ** Added `Primitive.safe` + ** Removed special size functions from `cps/save-world` -- they are no longer + necessary since size doesn't do a gc. + ** Fixed another (sigh) bug in `cps/simplify-types.fun` that could cause it to + not terminate. + +* 1999-11-16 + ** Cleaned up `backend/machine.fun` a bit so that it spits out macros for + allocation of objects and bumping of frontier. Added macros `MLTON_object` + and `MLTON_incFrontier` to `include/mlton-lib.h`. + ** Fixed a bug in `backend/limit-check.fun` that caused loops to not be + detected if they were only reached by a case branch. This could cause there + to be loop that allocates with no limit check. Needless to say, this could + cause a segfault if the loop ran for long enough. + +* 1999-10-18 + ** Added basis library function `Array2.copy`. + +* 1999-08-15 + ** Turned off globalization of ref cells (`closure-convert/globalize.fun`) + because it interacts badly with serialization. + +* 1999-08-13 + ** Fixed bug in `mlton-lib.h` in `MLTON_allocArrayNoPointers` that was + triggered when `bytesPerElt == 0`. The problem was that it wasn't reserving + space for the forwarding pointer. This could cause a segfault. + +* 1999-08-08 and 1999-08-09 + ** Added support for signal handling. + +* 1999-08-07 + ** Fixed bugs in `Array.tabulate` (and other `tabulate` variants) caused if + the function argument used `callcc`. + +* 1999-08-01 + ** Added serialization, which was mostly code in `src/runtime/gc.c`. + + `GC_serialize` converts an object to a `Word8Vector.vector`. + + `GC_deserialize` undoes the conversion. + (de)Serialization should work for + all objects except for functions, because I haven't yet added the support in + the flow analysis. + +* 1999-07-31 + ** Cleaned up the GC. Changed headers, by stealing a bit from the number of + non pointers and making it a mark bit (used in `GC_size`). + ** Rewrote `GC_size` so that it runs in time proportional to the number of + pointers in the object. It does a depth-first-search now, using toSpace to + hold the stack. + +* 1999-07-30 + ** Fixed bug in `SUBSTRING`. `getc` had the wrong type. This bug wasn't + noticed because MLton doesn't do enough type checking. + ** Fixed bug (segfault) caused when a GC immediately followed a throw. + +* 1999-07-29 + ** Fixed bug in `Date.fmt` (`basis-library/system/date.sml`). It was not + setting `Tm.buf`, and hence the time was always 0 unless there had been a + previous call to `setTmBuf`. + +* 1999-07-28 + ** Fixed bugs in `Posix.IO.FLock.{getlk,setlk,setlkw}`, which would cause + compilation to fail because `FLock.toInt` was defined as the C `castInt`, + which no longer exists. Instead, expand `FLock.toInt` to + `MLTON_pointerToInt`, which was added to `include/mlton-lib.h`. + ** Changed `Posix.Primitive.Flock` to `Posix.Primitive.FLock`. + ** Added `MLTON_chown`, `MLTON_ftruncate` to `include/mlton-posix.h`. They + were missing. This would cause compilation of any program using + `Posix.FileSys.{chown,ftruncate}` to fail. Also made it so all of the + primitives in `basis-library/posix/primitive.sml` use `MLTON_` versions of + functions, even if a wrapper is unnecessary. + +* 1999-07-25 + ** Added some other missing signature definitions to toplevel. + +* 1999-07-24 + ** Added missing `OS_*` signature definitions to + `basis-library/top-level/top-level.sml`. + +* 1999-07-19 + ** Fixed bug in `basis-library/arrays-and-vectors/mono-array.sml`. Used `:>` + instead of `:` so that the monomorphic array types are abstract. + + +== Version 19990712 + +Here are the changes from the 1999-03-19 version to the 1999-07-12 version. + +=== Details + +* 1999-07-12 + ** Changed `src/backend/machine.fun` so that the 'pointer locals' array is + only as large as neccessary in order to copy all pointer-valued locals, not as + large as the number of pointer-valued locals. + +* 1999-07-11 + ** Rewrote `src/backend/allocate-registers.fun` so that it does a better job + of sharing "registers" (i.e. C local variables) and stack slots. This should + cut down on the amount of copying that has to happen before and after a gc. + It should also cut down on the size of stack slots. + +* 1999-07-10 + ** Fixed a bug in `src/backend/parallel-move.fun` that should have been + triggered on most any parallel move. I guess parallel moves almost never + happened due to the old register allocation strategy -- but, with the new one + (see note for 1999-07-12) parallel moves will be frequent. + +* 1999-06-27 + ** Fixed `src/main.sml` so that when compiling `-p`, the `.c` file is compiled + `-g` and the `.o` is linked `-p`. + ** In `bakend/machine.fun`, added profiling comments before chunkswitches and + put in an optimization to avoid printing repeated profiling comments. Also, + profiling comments are only output when compiling `-p`. + +* 1999-06-17 + ** Changed `-i` to `-inline`, `-f` to `-flatten`, `-np` to `-no-polyvariance`, + `-u` to `-unsafe`. + ** Added `-i`, `-I`, `-l`, `-L` flags for includes and libraries. + ** Updated documentation for these options and for ffi. + +* 1999-06-16 + ** Hardwired version number in `src/control/control.sml`. As it stood, the + version number was computed when MLton was built after someone downloaded it, + which was clearly wrong. + +* 1999-06-16 + ** Fixed undefined variable `time` in `GC_done` in `src/runtime/gc.c`. + +* 19990-06-08 + ** in `include/mlton-lib.h`: + *** removed `#include ` + *** added `#include ` + *** and deleted all of the function signatures I had copied from `math.h` + ** Changed `Real.{minNormalPos, minPos, maxFinite}` so that they are computed + in `real.sml` instead of appearing as constants in the C. + +* 1999-06-07 + `IntInf.pow` added to basis library. + +* 1999-06-04 + ** `bin/mlton` changed to use `.arch-n-opsys` if it exists. + +* 1999-06-03 + ** `src/Makefile` changed to use `sml-cm` instead of `sml` + +* 1999-05-10 + ** Patch to `src/atoms/small-int-inf.fun` to work around a bug in the SML/NJ + implementation of bignums. This bug was causing some hex bignum constants to + be lexed incorrectly. + +* 1999-04-15 + ** Comments emitted in C code for profiling. The comments identify the CPS + function responsible for each C statement. + +* 1999-04-15 + ** `callcc` and `throw` added. + +* 1999-04-15 + ** Bug in `src/cps/simplify-types` fixed. The bug caused nontermination + whenever there was a circular datatype with a vector on the rhs. + E.g. `datatype t = T of t vector` + + +== Version 19990319 + +Here are the changes from the 1998-08-26 version to the 1999-03-19 version. + +=== Summary + +* Compile time and code size have decreased. +* Runtime performance of executables has improved. +* Large programs can now be compiled. +* MLton is self hosting. +* The basis library is mostly complete and many bugs have been fixed. +* The monomorphiser (`-m`) is no longer available. +* The heap and stack are automatically resized. +* There are now facilities for heap checkpointing (`MLton.saveWorld`) and object +size computation (`MLton.size`). +* MLton uses the GNU multiprecision (GnuMP) library to provide a fast +implementation of `IntInf`. diff -Nru mlton-20130715/doc/examples/ffi/export.sml mlton-20210117+dfsg/doc/examples/ffi/export.sml --- mlton-20130715/doc/examples/ffi/export.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/examples/ffi/export.sml 2021-12-28 17:19:36.000000000 +0000 @@ -3,25 +3,25 @@ (print (concat ["i = ", Int.toString i, " r = ", Real.toString r, "\n"]) ; #"g")) -val g = _import "g" public: unit -> unit; +val g = _import "g" public reentrant: unit -> unit; val _ = g () val _ = g () val e = _export "f2": (Word8.word -> word array) -> unit; val _ = e (fn w => Array.tabulate (10, fn _ => Word.fromLargeWord (Word8.toLargeWord w))) -val g2 = _import "g2" public: unit -> word array; +val g2 = _import "g2" public reentrant: unit -> word array; val a = g2 () val _ = print (concat ["0wx", Word.toString (Array.sub (a, 0)), "\n"]) val e = _export "f3": (unit -> unit) -> unit; val _ = e (fn () => print "hello\n"); -val g3 = _import "g3" public: unit -> unit; +val g3 = _import "g3" public reentrant: unit -> unit; val _ = g3 () (* This example demonstrates mutual recursion between C and SML. *) val e = _export "f4": (int -> unit) -> unit; -val g4 = _import "g4" public: int -> unit; +val g4 = _import "g4" public reentrant: int -> unit; val _ = e (fn i => if i = 0 then () else g4 (i - 1)) val _ = g4 13 @@ -31,4 +31,3 @@ val _ = g5 () val _ = print "success\n" - diff -Nru mlton-20130715/doc/examples/ffi/Makefile mlton-20210117+dfsg/doc/examples/ffi/Makefile --- mlton-20130715/doc/examples/ffi/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/examples/ffi/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/doc/examples/ffi/test_quot.sml mlton-20210117+dfsg/doc/examples/ffi/test_quot.sml --- mlton-20130715/doc/examples/ffi/test_quot.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/examples/ffi/test_quot.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,11 +1,11 @@ (* By default _import is external *) -val c_quot = _import "c_quot" private: Int8.int * Int8.int -> Int8.int; +val c_quot = _import "c_quot" private pure: Int8.int * Int8.int -> Int8.int; (* By default _export is public *) val sml_quot = _export "sml_quot": (Int8.int * Int8.int -> Int8.int) -> unit; val _ = sml_quot Int8.quot -val call_sml_quot = _import "call_sml_quot" public: unit -> unit; +val call_sml_quot = _import "call_sml_quot" public reentrant: unit -> unit; val x : Int8.int = ~1 val y : Int8.int = 10 diff -Nru mlton-20130715/doc/examples/finalizable/Makefile mlton-20210117+dfsg/doc/examples/finalizable/Makefile --- mlton-20130715/doc/examples/finalizable/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/examples/finalizable/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ ## Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/doc/examples/Makefile mlton-20210117+dfsg/doc/examples/Makefile --- mlton-20130715/doc/examples/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/examples/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/doc/examples/profiling/Makefile mlton-20210117+dfsg/doc/examples/profiling/Makefile --- mlton-20130715/doc/examples/profiling/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/examples/profiling/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/doc/examples/save-world/Makefile mlton-20210117+dfsg/doc/examples/save-world/Makefile --- mlton-20130715/doc/examples/save-world/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/examples/save-world/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/doc/examples/size/size.sml mlton-20210117+dfsg/doc/examples/size/size.sml --- mlton-20130715/doc/examples/size/size.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/examples/size/size.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,32 +1,39 @@ -fun 'a printSize (name: string, value: 'a): unit= +fun 'a printSize (name: string, value: 'a, use: 'a -> unit): unit= (print "The size of " ; print name ; print " is " - ; print (Int.toString (MLton.size value)) - ; print " bytes.\n") + ; print (IntInf.toString (MLton.size value)) + ; print " bytes.\n" + ; use value) + +fun chk (x, y) = + if x = y + then () + else raise Fail "bug" val l = [1, 2, 3, 4] val _ = - ( - printSize ("an int list of length 4", l) - ; printSize ("a string of length 10", "0123456789") - ; printSize ("an int array of length 10", Array.tabulate (10, fn _ => 0)) + (printSize ("a char", #"c", fn _ => ()) + ; printSize ("an int list of length 4", + List.tabulate (4, fn i => i + 1), fn l => + chk (foldl (op +) 0 l, 10)) + ; printSize ("a string of length 10", + CharVector.tabulate (10, fn i => chr (ord #"0" + i)), fn s => + chk (CharVector.foldl (fn (c,s) => ord c + s) 0 s, 525)) + ; printSize ("an int array of length 10", + Array.tabulate (10, fn i => i), fn a => + chk (Array.foldl (op +) 0 a, 45)) ; printSize ("a double array of length 10", - Array.tabulate (10, fn _ => 0.0)) + Array.tabulate (10, real), fn a => + chk (Real.floor (Array.foldl (op +) 0.0 a), 45)) ; printSize ("an array of length 10 of 2-ples of ints", - Array.tabulate (10, fn i => (i, i + 1))) - ; printSize ("a useless function", fn _ => 13) + Array.tabulate (10, fn i => (i, i + 1)), fn a => + chk (Array.foldl (fn ((a,b),s) => a + b + s) 0 a, 100)) + ; printSize ("a useless function", + fn _ => 13, fn f => ()) ) -(* This is here so that the list is "useful". - * If it were removed, then the optimizer (remove-unused-constructors) - * would remove l entirely. - *) -val _ = if 10 = foldl (op +) 0 l - then () - else raise Fail "bug" - local open MLton.Cont in @@ -37,9 +44,8 @@ | SOME i => print (concat [Int.toString i, "\n"]) end -val _ = printSize ("a continuation option ref", rc) - -val _ = - case !rc of - NONE => () - | SOME k => (rc := NONE; MLton.Cont.throw (k, SOME 13)) +val _ = printSize ("a continuation option ref", + rc, fn rc => + case !rc of + NONE => () + | SOME k => (rc := NONE; MLton.Cont.throw (k, SOME 13))) diff -Nru mlton-20130715/doc/guide/bin/check-git-links.sh mlton-20210117+dfsg/doc/guide/bin/check-git-links.sh --- mlton-20130715/doc/guide/bin/check-git-links.sh 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/guide/bin/check-git-links.sh 2021-12-28 17:19:36.000000000 +0000 @@ -6,28 +6,28 @@ pages=$(echo $@ | sort -f) for page in ${pages}; do - for vgd in $(cat txt/${page}.txt | sed -E -n 's|.*().*|\1|p'); do + for vgd in $(cat src/${page}.adoc | sed -E -n 's|.*().*|\1|p'); do rev=$(echo "$vgd" | sed -E -n 's||\1|p') path=$(echo "$vgd" | sed -E -n 's||\2|p') - if (cd ${root} ; git ls-tree ${rev} ${path} | grep -E -q '^[0-9]+[[:space:]]tree[[:space:]][0-9a-f]+[[:space:]]'${path}'$'); then + if (cd ${root}; git ls-tree ${rev} ${path} | grep -E -q '^[0-9]+[[:space:]]tree[[:space:]][0-9a-f]+[[:space:]]'${path}'$'); then : else echo "*** ${page}: ${vgd}" fi done - for vgf in $(cat txt/${page}.txt | sed -E -n 's|.*().*|\1|p'); do + for vgf in $(cat src/${page}.adoc | sed -E -n 's|.*().*|\1|p'); do rev=$(echo "$vgf" | sed -E -n 's||\1|p') path=$(echo "$vgf" | sed -E -n 's||\2|p') - if (cd ${root} ; git ls-tree ${rev} ${path} | grep -E -q '^[0-9]+[[:space:]]blob[[:space:]][0-9a-f]+[[:space:]]'${path}'$'); then + if (cd ${root}; git ls-tree ${rev} ${path} | grep -E -q '^[0-9]+[[:space:]]blob[[:space:]][0-9a-f]+[[:space:]]'${path}'$'); then : else echo "*** ${page}: ${vgf}" fi done - for rgf in $(cat txt/${page}.txt | sed -E -n 's|.*().*|\1|p'); do + for rgf in $(cat src/${page}.adoc | sed -E -n 's|.*().*|\1|p'); do rev=$(echo "$rgf" | sed -E -n 's||\1|p') path=$(echo "$rgf" | sed -E -n 's||\2|p') - if (cd ${root} ; git ls-tree ${rev} ${path} | grep -E -q '^[0-9]+[[:space:]]blob[[:space:]][0-9a-f]+[[:space:]]'${path}'$'); then + if (cd ${root}; git ls-tree ${rev} ${path} | grep -E -q '^[0-9]+[[:space:]]blob[[:space:]][0-9a-f]+[[:space:]]'${path}'$'); then : else echo "*** ${page}: ${rgf}" diff -Nru mlton-20130715/doc/guide/bin/InclGitFile.py mlton-20210117+dfsg/doc/guide/bin/InclGitFile.py --- mlton-20130715/doc/guide/bin/InclGitFile.py 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/guide/bin/InclGitFile.py 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import sys -import urllib +import urllib.request import re i = 1 @@ -12,7 +12,7 @@ src = sys.argv[i] i += 1 url = 'https://raw.github.com/MLton/' + repo + '/' + branch + '/' + src -response = urllib.urlopen(url) +response = urllib.request.urlopen(url) buff = response.readlines() if len(sys.argv) > i: @@ -30,5 +30,5 @@ i += 1 buff = newbuff -sys.stdout.writelines(buff) +sys.stdout.buffer.writelines(buff) sys.stdout.flush() diff -Nru mlton-20130715/doc/guide/bin/mk-html5-header-conf.sh mlton-20210117+dfsg/doc/guide/bin/mk-html5-header-conf.sh --- mlton-20130715/doc/guide/bin/mk-html5-header-conf.sh 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/guide/bin/mk-html5-header-conf.sh 2021-12-28 17:19:36.000000000 +0000 @@ -2,5 +2,5 @@ prefix="$2" csplit -f ${prefix} -n 2 -s $1 '%\[header\]%' '//+1' '/
/+1' -(cat ${prefix}00 ; echo "
"; echo "template::[banner-body]"; echo "
"; cat ${prefix}01) > $2 +(cat ${prefix}00; echo "
"; echo "template::[banner-body]"; echo "
"; cat ${prefix}01) > $2 rm ${prefix}00 ${prefix}01 ${prefix}02 diff -Nru mlton-20130715/doc/guide/bin/mk-mlton-guide.sh mlton-20210117+dfsg/doc/guide/bin/mk-mlton-guide.sh --- mlton-20130715/doc/guide/bin/mk-mlton-guide.sh 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/guide/bin/mk-mlton-guide.sh 2021-12-28 17:19:36.000000000 +0000 @@ -6,8 +6,8 @@ page=$1 echo ":mlton-guide-page: ${page}" echo "[[${page}]]" - # echo "include::${page}.txt[]" - cat txt/${page}.txt | + # echo "include::${page}.adoc[]" + cat src/${page}.adoc | # sed -e '1 { s/\(.*\)/[['${page}']]\1/; h; N; g; s/./=/g; x; G; }' | sed -e '/^:toc:$/ { d; }' | cat diff -Nru mlton-20130715/doc/guide/conf/asciidoc-mlton.flags mlton-20210117+dfsg/doc/guide/conf/asciidoc-mlton.flags --- mlton-20130715/doc/guide/conf/asciidoc-mlton.flags 2013-07-16 15:00:43.000000000 +0000 +++ mlton-20210117+dfsg/doc/guide/conf/asciidoc-mlton.flags 2021-12-28 17:19:36.000000000 +0000 @@ -1,4 +1,5 @@ --attribute=lang=en ---attribute=mlton-version=20130715 +--attribute='newline=\n' +--attribute=mlton-version=MLTON_VERSION --conf-file=conf/mlton-asciidoc.conf --conf-file=conf/specialsections.conf diff -Nru mlton-20130715/doc/guide/conf/html5-footer.conf mlton-20210117+dfsg/doc/guide/conf/html5-footer.conf --- mlton-20130715/doc/guide/conf/html5-footer.conf 2013-07-16 15:01:15.000000000 +0000 +++ mlton-20210117+dfsg/doc/guide/conf/html5-footer.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -[footer] -
-{disable-javascript%

} - - - diff -Nru mlton-20130715/doc/guide/conf/html5-header.conf mlton-20210117+dfsg/doc/guide/conf/html5-header.conf --- mlton-20130715/doc/guide/conf/html5-header.conf 2013-07-16 15:01:15.000000000 +0000 +++ mlton-20210117+dfsg/doc/guide/conf/html5-header.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ -[header] - - - - - - - -{title} -{title%}{doctitle=} -ifdef::linkcss[] - -ifeval::["{source-highlighter}"=="pygments"] - -endif::[] - -# DEPRECATED: 'pygments' attribute. -ifdef::pygments[] - -ifdef::toc2[] - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -ifndef::disable-javascript[] -ifdef::linkcss[] - - - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -endif::disable-javascript[] -ifdef::asciimath[] -ifdef::linkcss[] - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -endif::asciimath[] -ifdef::latexmath[] -ifdef::linkcss[] - -endif::linkcss[] -ifndef::linkcss[] - -endif::linkcss[] -endif::latexmath[] -{docinfo1,docinfo2#}{include:{docdir}/docinfo.html} -{docinfo,docinfo2#}{include:{docdir}/{docname}-docinfo.html} -template::[docinfo] - - - -# Article, book header. -ifndef::doctype-manpage[] - -endif::doctype-manpage[] -# Man page header. -ifdef::doctype-manpage[] - -endif::doctype-manpage[] -
diff -Nru mlton-20130715/doc/guide/conf/mlton-html5.conf mlton-20210117+dfsg/doc/guide/conf/mlton-html5.conf --- mlton-20130715/doc/guide/conf/mlton-html5.conf 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/doc/guide/conf/mlton-html5.conf 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,13 @@ [+docinfo] ifdef::basebackend-html[] - + ifeval::["{mlton-guide-host}"=="www.mlton.org"] # Google Custom Search only on www.mlton.org. +ifeval::["{doctitle}"=="MLton"] +# Google+ linked website only on www.mlton.org/index.html. + +endif::[] endif::[] endif::basebackend-html[] @@ -20,19 +24,8 @@ ifeval::["{mlton-guide-host}"=="www.mlton.org"] # Google Custom Search only on www.mlton.org. endif::[] endif::basebackend-html[] @@ -45,8 +38,8 @@ # "Last updated ..." only for tracked files. {git-commit-hash#}
Last updated {git-author-date} by {git-author-name}.
# Log and Edit links only for tracked files. -{git-commit-hash#} -{git-commit-hash#} +{git-commit-hash#} +{git-commit-hash#} endif::[]
+ + + + + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/fragments/header.in mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/fragments/header.in --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/fragments/header.in 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/fragments/header.in 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,54 @@ + + + + + + + @AUTHOR@@KEYWORDS@ + + @TITLE@ + + + + + + + + +
+
+
+
+ +
+ +
@STYLED-TITLE@
+
+
+
diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/fragments/shim.in mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/fragments/shim.in --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/fragments/shim.in 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/fragments/shim.in 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2 @@ +
+
diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/fun-HashConsGroundFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/fun-HashConsGroundFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/fun-HashConsGroundFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/fun-HashConsGroundFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,68 @@ += The `HashConsGroundFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `HashConsGroundFn` functor provides a mechanism for defining +a hash-consed representations for "leaf" (or "ground") types. +These are types that might be atomic (_e.g._, +the xref:str-HashConsAtom.adoc[`HashConsAtom structure`]) or +datatypes, but they are treated as atomic values by the *HashCons Library* +and are the leaves of the hash-consed data structures. + +== Synopsis + +[source,sml] +------------ +functor HashConsGroundFn (T : HASH_KEY) +------------ + +== Arguments + +* `T : xref:../Util/sig-HASH_KEY.adoc[HASH_KEY]`:: + The argument structure `T` defines the type, equality function, and + hashing function a the "leaf" type. + +== Interface + +[source,sml] +------------ +type hash_key = T.hash_key +type obj = hash_key HashCons.obj + +val mk : hash_key -> obj +------------ + +== Description + +`[.kw]#type# hash_key = T.hash_key`:: + something + +`[.kw]#type# obj = hash_key HashCons.obj`:: + something + +`[.kw]#val# mk : hash_key \-> obj`:: + something + +== Example + +Suppose that we wish to have pairs of integers as a ground type +for a hash-consed data structure. We might implement this using +the following functor application: + +[source,sml] +------------ +structure HCPairs = HashConsGroundFn ( + struct + type hash_key = int * int + fun sameKey (a : hash_key, b) = (a = b) + fun hashVal (a, b) = Word.xorb(Word.fromInt a, Word.fromInt b) + end) +------------ + +== See Also + +xref:str-HashCons.adoc[`HashCons`], +xref:hash-cons-lib.adoc[__The HashCons Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/hash-cons-lib.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/hash-cons-lib.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/hash-cons-lib.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/hash-cons-lib.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,123 @@ += The HashCons Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Overview + +The *HashCons Library* supports the implementation of +hash-consed representations of data structures. Such representations +are useful to reduce space usage by sharing common substructures +and to provide constant-time equality testing for large structures. + +To use this library, you need to use a two-level definition of your +data structures. For example, we might define a hash-cons representation +of lambda terms as follows: + +[source,sml] +------------ +structure HC = HashCons + +type var = HashConsString.obj + +datatype term_node + = VAR of var + | LAM of (var * term) + | APP of (term * term) +withtype term = term_node HC.obj +------------ + +And you need to define an equality function on your terms (this function +can use the hash-cons identity on subterms). For example, here is the +equality function for our lambda terms: + +[source,sml] +------------ +fun eq (APP(t11, t12), APP(t21, t22)) = HC.same(t11, t21) andalso HC.same(t12, t22) + | eq (LAM(x, t1), LAM(y, t2)) = HC.same(x, y) andalso HC.same(t1, t2) + | eq (VAR x, VAR y) = HC.same(x, y) + | eq _ = false +------------ + +With the equality function defined, we can then create a hash-cons table: + +[source,sml] +------------ +val tbl = HC.new {eq = eq} +------------ + +And define constructor functions: + +[source,sml] +------------ +val mkAPP = HC.cons2 tbl (0wx1, APP) +val mkLAM = HC.cons2 tbl (0wx3, LAM) +val mkVAR = HC.cons1 tbl (0wx7, VAR) +val var = HW.mk +------------ + +Note that we pick successive prime numbers for the constructor hash codes. +Using these constructors, we can construct the representation of the +identity function "latexmath:[\lambda{} x . x]" as follows: + +[source,sml] +------------ +mkLAM(var "x", mkVAR(var "x")) +------------ + +In addition to term construction, this library also supports finite sets +and maps using the unique hash-cons codes as keys. + +== Contents + +xref:str-HashCons.adoc[`[.kw]#structure# HashCons`]:: + The main module in the library, which defines the basic types + and various utility functions. + +xref:str-HashConsAtom.adoc[`[.kw]#structure# HashConsAtom`]:: + Code to package the xref:../Util/str-Atom.adoc#type:atom[`Atom.atom`] type + as a hash-consed object. + +xref:str-HashConsMap.adoc[`[.kw]#structure# HashConsMap`]:: + Implements finite maps keyed by hash-consed objects. + +xref:str-HashConsString.adoc[`[.kw]#structure# HashConsString`]:: + Code to package the `string` type as a hash-consed object. + +xref:str-HashConsSet.adoc[`[.kw]#structure# HashConsSet`]:: + Implements finite sets of hash-consed objects. + +xref:fun-HashConsGroundFn.adoc[`[.kw]#functor# HashConsGroundFn`]:: + A functor for implementing new leaf types as hash-consed objects. + +== Usage + +For https://smlnj.org[*SML/NJ*], include `$/hash-cons-lib.cm` in your +*CM* file. + +For use in https://www.mlton.org/[*MLton*], include +`$(SML_LIB)/smlnj-lib/HashCons/hash-cons-lib.mlb` in your *MLB* file. + +ifdef::backend-pdf[] + +// Push titles down one level. +:leveloffset: 1 + +include::str-HashCons.adoc[] + +include::str-HashConsAtom.adoc[] + +include::str-HashConsMap.adoc[] + +include::str-HashConsString.adoc[] + +include::str-HashConsSet.adoc[] + +include::fun-HashConsGroundFn.adoc[] + +// Return to normal title levels. +:leveloffset: 0 + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,6 @@ +structure HashCons +structure HashConsAtom +structure HashConsMap +structure HashConsString +structure HashConsSet +functor HashConsGroundFn diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashCons.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashCons.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashCons.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashCons.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,184 @@ += The `HashCons` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `HashCons` structure is the main module for the *HashCons Library*. + +== Synopsis + +[source,sml] +------------ +signature HASH_CONS +structure HashCons : HASH_CONS +------------ + +== Interface + +[source,sml] +------------ +type 'a tbl + +val new : {eq : 'a * 'a -> bool} -> 'a tbl + +val clear : 'a tbl -> unit + +type 'a obj = { nd : 'a, tag : word, hash : word } + +val node : 'a obj -> 'a +val tag : 'a obj -> word + +val same : ('a obj * 'a obj) -> bool +val compare : ('a obj * 'a obj) -> order + +val cons0 : 'a tbl -> (word * 'a) -> 'a obj +val cons1 : 'a tbl -> (word * ('b obj -> 'a)) + -> 'b obj -> 'a obj +val cons2 : 'a tbl -> (word * ('b obj * 'c obj -> 'a)) + -> 'b obj * 'c obj -> 'a obj +val cons3 : 'a tbl -> (word * ('b obj * 'c obj * 'd obj -> 'a)) + -> 'b obj * 'c obj * 'd obj -> 'a obj +val cons4 : 'a tbl -> (word * ('b obj * 'c obj * 'd obj * 'e obj -> 'a)) + -> 'b obj * 'c obj * 'd obj * 'e obj -> 'a obj +val cons5 : 'a tbl -> (word * ('b obj * 'c obj * 'd obj * 'e obj * 'f obj -> 'a)) + -> 'b obj * 'c obj * 'd obj * 'e obj * 'f obj -> 'a obj + +val consList : 'a tbl -> (word * ('b obj list -> 'a)) -> 'b obj list -> 'a obj + +val consR1 : 'a tbl -> (word * ('b obj -> 'a) * ('r -> 'b obj)) + -> 'r -> 'a obj +val consR2 : 'a tbl + -> (word * ('b obj * 'c obj -> 'a) * ('r -> 'b obj * 'c obj)) + -> 'r -> 'a obj +val consR3 : 'a tbl + -> (word * ('b obj * 'c obj * 'd obj -> 'a) + * ('r -> 'b obj * 'c obj * 'd obj)) + -> 'r -> 'a obj +val consR4 : 'a tbl + -> (word * ('b obj * 'c obj * 'd obj * 'e obj -> 'a) + * ('r -> 'b obj * 'c obj * 'd obj * 'e obj)) + -> 'r -> 'a obj +val consR5 : 'a tbl + -> (word * ('b obj * 'c obj * 'd obj * 'e obj * 'f obj -> 'a) + * ('r -> 'b obj * 'c obj * 'd obj * 'e obj * 'f obj)) + -> 'r -> 'a obj +------------ + +== Description + +`[.kw]#type# 'a tbl`:: + The type of a table for hash-consing objects of type ``'a``. Typically, only + one table per distinct type should be defined. + +`[.kw]#val# new : {eq : 'a * 'a \-> bool} \-> 'a tbl`:: + `new {eq}` creates a new hash-cons table using the equality function `eq`. + +`[.kw]#val# clear : 'a tbl \-> unit`:: + `clear tbl` clears the table of all elements. + +`[.kw]#type# 'a obj = { ... }`:: + The representation of a hash-consed object. The fields are ++ +-- +`nd`:: + the underlying representation of the object. +`tag`:: + a tag that is unique for the object (for the object's table) +`hash`:: + a hash of the object (used to index into the table) +-- + +`[.kw]#val# node : 'a obj \-> 'a`:: + `node obj` projects out the node from `obj`. + +`[.kw]#val# tag : 'a obj \-> word`:: + `tag obj` projects out the unique tag from `obj`. + +`[.kw]#val# same : ('a obj * 'a obj) \-> bool`:: + `same (obj1, obj2)` returns true if the objects are the same; this test + is constant time (it compares the object tags). + +`[.kw]#val# compare : ('a obj * 'a obj) \-> order`:: + `compare (obj1, obj2)` returns the order of the two objects; this test + is constant time (it compares the object tags). + +`[.kw]#val# cons0 : 'a tbl \-> (word * 'a) \-> 'a obj`:: + `cons0 tbl (h, x)` creates a unique (_w.r.t._ `tbl`) representation + for the value `x`, where `h` is the hash of `x`. + +`[.kw]#val# cons1 : 'a tbl \-> (word * ('b obj \-> 'a)) \-> 'b obj \-> 'a obj`:: + `cons1 tbl (h, mk) obj1` creates a unique (_w.r.t._ `tbl`) representation + for `mk obj1`, where `h` is a hash code for the term constructor `mk`. + +`[.kw]#val# cons2 : 'a tbl \-> (word * ('b obj * 'c obj \-> 'a)) \-> ...`:: + `cons2 tbl (h, mk) (obj1, obj2)` creates a unique (_w.r.t._ `tbl`) representation + for `mk (obj1, obj2)`, where `h` is a hash code for the term constructor `mk`. + +`[.kw]#val# cons3 : 'a tbl \-> (word * ('b obj * 'c obj * 'd obj \-> 'a)) \-> ...`:: + `cons3 tbl (h, mk) (obj1, obj2, obj3)` creates a unique (_w.r.t._ `tbl`) representation + for `mk (obj1, obj2, obj3)`, where `h` is a hash code for the term constructor `mk`. + +`[.kw]#val# cons4 : 'a tbl \-> (word * ('b obj * 'c obj * 'd obj * 'e obj \-> 'a)) \-> ...`:: + `cons4 tbl (h, mk) (obj1, obj2, obj3, obj4)` creates a unique (_w.r.t._ `tbl`) + representation for `mk (obj1, obj2, obj3, obj4)`, where `h` is a hash code + for the term constructor `mk`. + +`[.kw]#val# cons5 : 'a tbl \-> (word * ('b obj * 'c obj * 'd obj * 'e obj * 'f obj \-> 'a)) \-> ...`:: + `cons5 tbl (h, mk) (obj1, obj2, obj3, obj4, obj5)` creates a unique (_w.r.t._ `tbl`) + representation for `mk (obj1, obj2, obj3, obj4, obj5)`, where `h` is a hash code + for the term constructor `mk`. + +`[.kw]#val# consList : 'a tbl \-> (word * ('b obj list \-> 'a)) \-> 'b obj list \-> 'a obj`:: + `consList tbl (h, mk) objs` creates a unique (_w.r.t._ `tbl`) representation + for `mk objs`, where `h` is a hash code for the term constructor `mk`. + +`[.kw]#val# consR1 : 'a tbl \-> (word * ('b obj \-> 'a) * ('r \-> 'b obj)) \-> 'r \-> 'a obj`:: + `consR1 (h, mk, proj) r` creates a unique (_w.r.t._ `tbl`) representation + for `mk (proj r)`, where `h` is a hash code for the term constructor `mk` + and `proj` projects the sub-component of `r` as an object. + +`[.kw]#val# consR2 : 'a tbl \-> (word * ('b obj * 'c obj \-> 'a) * ('r \-> 'b obj * 'c obj)) \-> 'r \-> 'a obj`:: + `consR2 (h, mk, proj) r` creates a unique (_w.r.t._ `tbl`) representation + for `mk (proj r)`, where `h` is a hash code for the term constructor `mk` + and `proj` projects the sub-components of `r` as a tuple of objects. + +`[.kw]#val# consR3 : 'a tbl \-> (word * ('b obj * 'c obj * 'd obj \-> 'a) \-> ...`:: + `consR3 (h, mk, proj) r` creates a unique (_w.r.t._ `tbl`) representation + for `mk (proj r)`, where `h` is a hash code for the term constructor `mk` + and `proj` projects the sub-components of `r` as a tuple of objects. + +`[.kw]#val# consR4 : 'a tbl \-> (word * ('b obj * 'c obj * 'd obj * 'e obj \-> 'a) \-> ...`:: + `consR4 (h, mk, proj) r` creates a unique (_w.r.t._ `tbl`) representation + for `mk (proj r)`, where `h` is a hash code for the term constructor `mk` + and `proj` projects the sub-components of `r` as a tuple of objects. + +`[.kw]#val# consR5 : 'a tbl \-> (word * ('b obj * 'c obj * 'd obj * 'e obj * 'f obj \-> 'a) \-> ...`:: + `consR5 (h, mk, proj) r` creates a unique (_w.r.t._ `tbl`) representation + for `mk (proj r)`, where `h` is a hash code for the term constructor `mk` + and `proj` projects the sub-components of `r` as a tuple of objects. + +== Discussion + +The functions `cons1`, `cons2`, _etc_., provide an easy way to convert a data +constructor of the given arity to a hash-cons constructor. For example, if +we have +[source,sml] +------------ +datatype t = ... | Foo of (x obj * y obj * z obj) | ... +------------ +as a constructor in our two-level hash-consed datatype, then we can +define a hash-cons constructor for `Foo` has +[source,sml] +------------ +val mkFoo : x obj * y obj * z obj -> t obj = cons3 (0w17, Foo) +------------ +where `0w17` is the hash code we selected for the `Foo` constructor. + +Likewise, the `cons1R`, `cons2R`, _etc_., functions can be used when +record types are involved. + +== See Also + +xref:hash-cons-lib.adoc[__The HashCons Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsAtom.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsAtom.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsAtom.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsAtom.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,44 @@ += The `HashConsAtom` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `HashConsAtom` structure embeds the xref:../Util/str-Atom.adoc#type:atom[`Atom.atom`] +type as a hash-consed object. +It is implemented using the xref:fun-HashConsGroundFn.adoc[`HashConsGroundFn`] +functor. + +== Synopsis + +[source,sml] +------------ +structure HashConsAtom +------------ + +== Interface + +[source,sml] +------------ +type hash_key = Atom.atom +type obj = hash_key HashCons.obj + +val mk : hash_key -> obj +------------ + +== Description + +`[.kw]#type# hash_key = Atom.atom`:: + The ground type being hashed. + +`[.kw]#type# obj = hash_key HashCons.obj`:: + The type of hash-consed atoms. + +`[.kw]#val# mk : hash_key \-> obj`:: + `mk a` converts the atom `a` to a hash-consed object. + +== See Also + +xref:str-HashCons.adoc[`HashCons`], +xref:hash-cons-lib.adoc[__The HashCons Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsMap.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsMap.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsMap.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsMap.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,341 @@ += The `HashConsMap` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `HashConsMap` structure implements functional, finite maps keyed +by hash-consed objects. A balanced tree structure is used in the +representation. + +== Synopsis + +[source,sml] +------------ +signature HASH_CONS_MAP +structure HashConsMap : HASH_CONS_MAP +------------ + +== Interface + +[source,sml] +------------ +type 'a obj = 'a HashCons.obj + +type ('a, 'b) map + +val isEmpty : ('a, 'b) map -> bool + +val singleton : ('a obj * 'b) -> ('a, 'b) map + +val insert : ('a, 'b) map * 'a obj * 'b -> ('a, 'b) map +val insert' : (('a obj * 'b) * ('a, 'b) map) -> ('a, 'b) map + +val insertWith : (('b * 'b) -> 'b) + -> ('a, 'b) map * 'a obj * 'b -> ('a, 'b) map +val insertWithi : (('a obj * 'b * 'b) -> 'b) + -> ('a, 'b) map * 'a obj * 'b -> ('a, 'b) map + +val find : ('a, 'b) map * 'a obj -> 'b option + +val lookup : ('a, 'b) map * 'a obj -> 'b + +val inDomain : (('a, 'b) map * 'a obj) -> bool + +val remove : ('a, 'b) map * 'a obj -> ('a, 'b) map * 'b + +val empty : ('a, 'b) map + +val numItems : ('a, 'b) map -> int + +val listItems : ('a, 'b) map -> 'b list +val listItemsi : ('a, 'b) map -> ('a obj * 'b) list + +val listKeys : ('a, 'b) map -> 'a obj list + +val collate : ('b * 'b -> order) -> (('a, 'b) map * ('a, 'b) map) -> order + +val unionWith : ('b * 'b -> 'b) -> (('a, 'b) map * ('a, 'b) map) + -> ('a, 'b) map +val unionWithi : ('a obj * 'b * 'b -> 'b) -> (('a, 'b) map * ('a, 'b) map) + -> ('a, 'b) map + +val intersectWith : ('b * 'c -> 'd) -> (('a, 'b) map * ('a, 'c) map) + -> ('a, 'd) map +val intersectWithi : ('a obj * 'b * 'c -> 'd) -> (('a, 'b) map * ('a, 'c) map) + -> ('a, 'd) map + +val mergeWith : ('b option * 'c option -> 'd option) + -> (('a, 'b) map * ('a, 'c) map) -> ('a, 'd) map +val mergeWithi : ('a obj * 'b option * 'c option -> 'd option) + -> (('a, 'b) map * ('a, 'c) map) -> ('a, 'd) map + +val app : ('b -> unit) -> ('a, 'b) map -> unit +val appi : (('a obj * 'b) -> unit) -> ('a, 'b) map -> unit + +val map : ('b -> 'c) -> ('a, 'b) map -> ('a, 'c) map +val mapi : ('a obj * 'b -> 'c) -> ('a, 'b) map -> ('a, 'c) map + +val fold : ('b * 'c -> 'c) -> 'c -> ('a, 'b) map -> 'c +val foldi : ('a obj * 'b * 'c -> 'c) -> 'c -> ('a, 'b) map -> 'c + +val filter : ('b -> bool) -> ('a, 'b) map -> ('a, 'b) map +val filteri : ('a obj * 'b -> bool) -> ('a, 'b) map -> ('a, 'b) map + +val mapPartial : ('b -> 'c option) -> ('a, 'b) map -> ('a, 'c) map +val mapPartiali : ('a obj * 'b -> 'c option) -> ('a, 'b) map -> ('a, 'c) map + +val exists : ('b -> bool) -> ('a, 'b) map -> bool +val existsi : ('a obj * 'b -> bool) -> ('a, 'b) map -> bool + +val all : ('b -> bool) -> ('a, 'b) map -> bool +val alli : ('a obj * 'b -> bool) -> ('a, 'b) map -> bool +------------ + +== Description + +In the description of operations below, we write latexmath:[\mathbf{dom}(m)] +for the _domain_ of the map latexmath:[m] (_i.e_, the set of keys for which +latexmath:[m] is defined), and latexmath:[\mathbf{rng}(m)] for its _range_ +(_i.e._, the set latexmath:[\{ m(k)\;|\;k \in \mathbf{dom}(m) \}]). It is also +useful to view a map as the set of key-value pairs +latexmath:[\{ (k, m(k))\;|\;k \in \mathbf{dom}(m) \}], which we call the _items_ +of latexmath:[m]. + +`[.kw]#type# 'a obj = 'a HashCons.obj`:: + Hash-consed objects are the search keys for the finite maps. + +`[.kw]#type# ('a, 'b) map`:: + A finite map from ``'a obj`` values to ``'b`` values. + +`[.kw]#val# empty : ('a, 'b) map`:: + The empty map. + +`[.kw]#val# singleton : ('a obj * 'b) \-> ('a, 'b) map`:: + `singleton (obj, v)` creates the singleton map that maps `obj` to `v`. + +`[.kw]#val# insert : ('a, 'b) map * 'a obj * 'b \-> ('a, 'b) map`:: + `insert (m, obj, v)` adds the mapping from `obj` to `v` to `m`. + This mapping overrides any previous mapping from `obj`. + +`[.kw]#val# insert' : (('a obj * 'b) * ('a, 'b) map) \-> ('a, 'b) map`:: + `insert' ((obj, v), map)` adds the mapping from `obj` to `v` to `m`. + This mapping overrides any previous mapping from `obj`. + +`[.kw]#val# insertWith : (('b * 'b) \-> 'b) \-> ('a, 'b) map * 'a obj * 'b \-> ('a, 'b) map`:: + `insertWith comb (m, obj, v)` adds the mapping from `obj` to `value` to `m`, + where `value = comb(v', v)`, if `m` already contained a mapping from `obj` + to `v'`; otherwise, `value = v`. + +`[.kw]#val# insertWithi : (('a obj * 'b * 'b) \-> 'b) \-> ('a, 'b) map * 'a obj * 'b \-> ('a, 'b) map`:: + `insertWithi comb (m, obj, v)` adds the mapping from `obj` to `value` to `m`, + where `value = comb(obj, v', v)`, if `m` already contained a mapping from `obj` + to `v'`; otherwise, `value = v`. + +`[.kw]#val# find : ('a, 'b) map * 'a obj \-> 'b option`:: + `find (m, obj)` returns `SOME v`, if `m` maps `obj` to `v` and `NONE` otherwise. + +`[.kw]#val# lookup : ('a, 'b) map * 'a obj \-> 'b`:: + `lookup (m, obj)` returns `v`, if `m` maps `obj` to `v`; otherwise it + raises the exception xref:../Util/str-LibBase.adoc#exn:NotFound[`NotFound`]. + +`[.kw]#val# inDomain : (('a, 'b) map * 'a obj) \-> bool`:: + `inDomain (m, obj)` returns `true` if `obj` is in the domain of `m`. + +`[.kw]#val# remove : ('a, 'b) map * 'a obj \-> ('a, 'b) map * 'b`:: + `remove (m, obj)` returns the pair `(m', v)`, if `m` maps `obj` to `v` + and where `m'` is `m` with `obj` removed from its domain. If `obj` + is not in the domain of `m`, then it raises the exception + xref:../Util/str-LibBase.adoc#exn:NotFound[`NotFound`]. + +`[.kw]#val# isEmpty : ('a, 'b) map \-> bool`:: + `isEmpty m` returns true if, and only if, `m` is empty. + +`[.kw]#val# numItems : ('a, 'b) map \-> int`:: + `numItems m` returns the size of ``m``'s domain. + +`[.kw]#val# listItems : ('a, 'b) map \-> 'b list`:: + `listItems m` returns a list of the values in the _range_ of `m`. + Note that this list will contain duplicates when multiple keys in + ``m``'s domain map to the same value. + +`[.kw]#val# listKeys : ('a, 'b) map \-> 'a obj list`:: + `listKeys m` returns a list of the objects in the domain of `m`. + +`[.kw]#val# listItemsi : ('a, 'b) map \-> ('a obj * 'b) list`:: + `listItemsi m` returns a list of `(obj, v)` pairs, where `m` maps + `obj` to `v`. + +`[.kw]#val# collate : ('b * 'b \-> order) \-> (('a, 'b) map * ('a, 'b) map) \-> order`:: + `collate cmpV (m1, m2)` returns the order of the two maps, where `cmpV` is + used to compare the values in the domain. + +`[.kw]#val# unionWith : ('b * 'b \-> 'b) \-> (('a, 'b) map * ('a, 'b) map) \-> ('a, 'b) map`:: + `unionWith comb (m1, m2)` returns the union of the two maps, using the function `comb` + to combine values when there is a collision of keys. More formally, this expression + returns the map ++ +[latexmath] ++++++++++++ + \begin{array}{l} + \{ (k, \mathtt{m1}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \setminus \mathbf{dom}(\mathtt{m2}) \} + \cup \\ + \{ (k, \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m2}) \setminus \mathbf{dom}(\mathtt{m1}) \} + \cup \\ + \{ (k, \mathtt{comb}(\mathtt{m1}(k), \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \cap \mathbf{dom}(\mathtt{m2}) \} + \end{array} ++++++++++++ ++ +For example, we could implement a _multiset_ of objects by mapping objects to their +multiplicity. Then, the union of two multisets could be defined by ++ +[source,sml] +------------ +fun union (ms1, ms2) = unionWith Int.+ (ms1, ms2) +------------ + +`[.kw]#val# unionWithi : ('a obj * 'b * 'b \-> 'b) \-> (('a, 'b) map * ('a, 'b) map) \-> ('a, 'b) map`:: + `unionWithi comb (m1, m2)` returns the union of the two maps, using the function `comb` + to combine values when there is a collision of keys. More formally, this expression + returns the map ++ +[latexmath] ++++++++++++ + \begin{array}{l} + \{ (k, \mathtt{m1}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \setminus \mathbf{dom}(\mathtt{m2}) \} + \cup \\ + \{ (k, \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m2}) \setminus \mathbf{dom}(\mathtt{m1}) \} + \cup \\ + \{ (k, \mathtt{comb}(k, \mathtt{m1}(k), \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \cap \mathbf{dom}(\mathtt{m2}) \} + \end{array} ++++++++++++ + + +`[.kw]#val# intersectWith : ('b * 'c \-> 'd) \-> (('a, 'b) map * ('a, 'c) map) \-> ('a, 'd) map`:: + `intersectWith comb (m1, m2)` returns the intersection of the two maps, + where the values in the range are a computed by applying the function + `comb` to the values from the two maps. More formally, this expression + returns the map ++ +[latexmath] ++++++++++++ + \{ (k, \mathtt{comb}(\mathtt{m1}(k), \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \cap \mathbf{dom}(\mathtt{m2}) \} ++++++++++++ + +`[.kw]#val# intersectWithi : ('a obj * 'b * 'c \-> 'd) \-> (('a, 'b) map * ('a, 'c) map) \-> ('a, 'd) map`:: + `intersectWithi comb (m1, m2)` returns the intersection of the two maps, + where the values in the range are a computed by applying the function + `comb` to the kay and the values from the two maps. More formally, this + expression returns the map ++ +[latexmath] ++++++++++++ + \{ (k, \mathtt{comb}(k, \mathtt{m1}(k), \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \cap \mathbf{dom}(\mathtt{m2}) \} ++++++++++++ + +`[.kw]#val# mergeWith : ('b option * 'c option \-> 'd option) \-> (('a, 'b) map * ('a, 'c) map) \-> ('a, 'd) map`:: + `mergeWith comb (m1, m2)` merges the two maps using the function `comb` + as a decision procedure for adding elements to the new map. For each object + latexmath:[\mathtt{obj} \in \mathbf{dom}(\mathtt{m1}) \cup \mathbf{dom}(\mathtt{m2})], + we evaluate `comb(optV1, optV2)`, where `optV1` is `SOME v` if + latexmath:[(\mathtt{obj}, \mathtt{v}) \in \mathtt{m1}] and is `NONE` if + latexmath:[\mathtt{obj} \not\in \mathbf{dom}(\mathtt{m1}); likewise for `optV2`. + If `comb(optV1, optV2)` returns ``SOME v'``, then we add ``(obj, v')`` + to the result. ++ +The `mergeWith` function is a generalization of the `unionWith` and +`intersectionWith` functions. + +`[.kw]#val# mergeWithi : ('a obj * 'b option * 'c option \-> 'd option) \-> (('a, 'b) map * ('a, 'c) map) \-> ('a, 'd) map`:: + `mergeWithi comb (m1, m2)` merges the two maps using the function `comb` + as a decision procedure for adding elements to the new map. The difference + between this function and `mergeWith` is that the `comb` function takes the + `key` value in addition to the optional values from the range. + +`[.kw]#val# app : ('b \-> unit) \-> ('a, 'b) map \-> unit`:: + `app f m` applies the function `f` to the values in the range of `m`. + +`[.kw]#val# appi : (('a obj * 'b) \-> unit) \-> ('a, 'b) map \-> unit`:: + `appi f map` applies the function `f` to the key-value pairs that + define `m`. + +`[.kw]#val# map : ('b \-> 'c) \-> ('a, 'b) map \-> ('a, 'c) map`:: + `map f m` creates a new finite map ``m'`` by applying the function `f` to the + values in the range of `m`. Thus, if + latexmath:[(\mathtt{obj}, \mathtt{v}) \in \mathtt{m}], then + `(obj, f v)` will be in ``m'``. + +`[.kw]#val# mapi : ('a obj * 'b \-> 'c) \-> ('a, 'b) map \-> ('a, 'c) map`:: + `mapi f m` creates a new finite map ``m'`` by applying the function `f` to the + key-value pairs of `m`. Thus, if + latexmath:[(\mathtt{obj}, \mathtt{v}) \in \mathtt{m}], then + `(obj, f(obj, v))` will be in ``m'``. + +`[.kw]#val# fold : ('b * 'c \-> 'c) \-> 'c \-> ('a, 'b) map \-> 'c`:: + `fold f init m` folds the function `f` over the range of + `m` using `init` as the initial value. + +`[.kw]#val# foldi : ('a obj * 'b * 'c \-> 'c) \-> 'c \-> ('a, 'b) map \-> 'c`:: + `foldi f init m` folds the function `f` over the key-value pairs in + `m` using `init` as the initial value. + +`[.kw]#val# filter : ('b \-> bool) \-> ('a, 'b) map \-> ('a, 'b) map`:: + `filter pred m` filters out those items `(obj, v)` from `m`, such that + `pred v` returns `false`. More formally, this expression returns the map + latexmath:[\{ (\mathtt{obj}, \mathtt{v})\;|\;\mathtt{obj} \in \mathbf{dom}(\mathtt{m}) + \wedge \mathtt{pred}(\mathtt{v}) \}]. + +`[.kw]#val# filteri : ('a obj * 'b \-> bool) \-> ('a, 'b) map \-> ('a, 'b) map`:: + `filteri pred m` filters out those items `(obj, v)` from `m`, such that + `pred(obj, v)` returns `false`. More formally, this expression returns the map + latexmath:[\{ (\mathtt{obj}, \mathtt{v})\;|\;\mathtt{obj} \in \mathbf{dom}(\mathtt{m}) + \wedge \mathtt{pred}(\mathtt{obj}, \mathtt{v}) \}]. + +`[.kw]#val# mapPartial : ('b \-> 'c option) \-> ('a, 'b) map \-> ('a, 'c) map`:: + `mapPartial f m` maps the partial function `f` over the items of `m`. + More formally, this expression returns the map +[latexmath] ++++++++++++ + \{ (k, v') \;|\; (k, v) \in \mathtt{m} \wedge \mathtt{f}(v) = \mathtt{SOME}(v') \} ++++++++++++ + +`[.kw]#val# mapPartiali : ('a obj * 'b \-> 'c option) \-> ('a, 'b) map \-> ('a, 'c) map`:: + `mapPartiali f m` maps the partial function `f` over the items of `m`. + More formally, this expression returns the map +[latexmath] ++++++++++++ + \{ (k, v') \;|\; (k, v) \in \mathtt{m} \wedge \mathtt{f}(k, v) = \mathtt{SOME}(v') \} ++++++++++++ + +`[.kw]#val# exists : ('b \-> bool) \-> ('a, 'b) map \-> bool`:: + `exists pred m` returns `true` if, and only if, there exists an item + latexmath:[(\mathtt{obj}, \mathtt{v}) \in \mathtt{m}], + such that `pred v` returns `true`. + +`[.kw]#val# existsi : ('a obj * 'b \-> bool) \-> ('a, 'b) map \-> bool`:: + `exists pred m` returns `true` if, and only if, there exists an item + latexmath:[(\mathtt{obj}, \mathtt{v}) \in \mathtt{m}], such that + `pred(obj, v)` returns `true`. + +`[.kw]#val# all : ('b \-> bool) \-> ('a, 'b) map \-> bool`:: + `all pred m` returns `true` if, and only if, `pred v` returns `true` + for all items latexmath:[(\mathtt{obj}, \mathtt{v}) \in \mathtt{m}]. + +`[.kw]#val# alli : ('a obj * 'b \-> bool) \-> ('a, 'b) map \-> bool`:: + `all pred m` returns `true` if, and only if, `pred(obj, v)` returns `true` + for all items latexmath:[(\mathtt{obj}, \mathtt{v}) \in \mathtt{m}]. + +== See Also + +xref:str-HashCons.adoc[`HashCons`], +xref:str-HashConsSet.adoc[`HashConsSet`], +xref:hash-cons-lib.adoc[__The HashCons Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsSet.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsSet.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsSet.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsSet.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,253 @@ += The `HashConsSet` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `HashConsSet` structure implements finite sets of hash-consed objects. + +== Synopsis + +[source,sml] +------------ +signature HASH_CONS_SET +structure HashConsSet : HASH_CONS_SET +------------ + +== Interface + +[source,sml] +------------ +type 'a obj = 'a HashCons.obj + +type 'a set + +val empty : 'a set + +val singleton : 'a obj -> 'a set + +val fromList : 'a obj list -> 'a set + +val add : 'a set * 'a obj -> 'a set +val add' : ('a obj * 'a set) -> 'a set + +val addList : 'a set * 'a obj list -> 'a set + +val subtract : 'a set * 'a obj -> 'a set +val subtract' : ('a obj * 'a set) -> 'a set + +val subtractList : 'a set * 'a obj list -> 'a set + +val delete : 'a set * 'a obj -> 'a set + +val member : 'a set * 'a obj -> bool + +val isEmpty : 'a set -> bool + +val equal : ('a set * 'a set) -> bool + +val compare : ('a set * 'a set) -> order + +val isSubset : ('a set * 'a set) -> bool + +val disjoint : 'a set * 'a set -> bool + +val numItems : 'a set -> int + +val toList : 'a set -> 'a obj list +val listItems : 'a set -> 'a obj list + +val union : 'a set * 'a set -> 'a set +val intersection : 'a set * 'a set -> 'a set +val difference : 'a set * 'a set -> 'a set + +val map : ('a obj -> 'b obj) -> 'a set -> 'b set + +val mapPartial : ('a obj -> 'b obj option) -> 'a set -> 'b set + +val app : ('a obj -> unit) -> 'a set -> unit + +val foldl : ('a obj * 'b -> 'b) -> 'b -> 'a set -> 'b +val foldr : ('a obj * 'b -> 'b) -> 'b -> 'a set -> 'b + +val partition : ('a obj -> bool) -> 'a set -> ('a set * 'a set) + +val filter : ('a obj -> bool) -> 'a set -> 'a set + +val all : ('a obj -> bool) -> 'a set -> bool +val exists : ('a obj -> bool) -> 'a set -> bool + +val find : ('a obj -> bool) -> 'a set -> 'a obj option +------------ + +== Description + +`[.kw]#type# 'a obj = 'a HashCons.obj`:: + The elements in the set are hash-cons objects. + +`[.kw]#type# 'a set`:: + A finite set of ``'a obj`` values. + +`[.kw]#val# empty : 'a set`:: + The empty set. + +`[.kw]#val# singleton : 'a obj \-> 'a set`:: + `singleton obj` creates a singleton set containing `obj`. + +`[.kw]#val# fromList : 'a obj list \-> 'a set`:: + `fromList objs` creates a set from the list of objects. + +`[.kw]#val# add : 'a set * 'a obj \-> 'a set`:: + `add (set, obj)` adds the object to the set. + +`[.kw]#val# add' : ('a obj * 'a set) \-> 'a set`:: + `add' (obj, set)` adds the object to the set. + +`[.kw]#val# addList : 'a set * 'a obj list \-> 'a set`:: + `addList (set, objs)` adds the list of objects to the set. + +`[.kw]#val# subtract : 'a set * 'a obj \-> 'a set`:: + `subtract (set, obj)` removes the object `obj` from `set`. + Acts as the identity if `obj` is not in the set. + +`[.kw]#val# subtract' : ('a obj * 'a set) \-> 'a set`:: + `subtract (obj, set)` removes the object `obj` from `set`. + Acts as the identity if `obj` is not in the set. + +`[.kw]#val# delete : 'a set * 'a obj \-> 'a set`:: + `delete (set, obj)` removes the object `obj` from `set`. + Unlike `subtract`, this function raises the + xref:../Util/str-LibBase.adoc#exn:NotFound[`NotFound`] + exception if `obj` is not in the set. + +`[.kw]#val# member : 'a set * 'a obj \-> bool`:: + `member (obj, set)` returns `true` if, and only if, `obj` + is an element of `set`. + +`[.kw]#val# isEmpty : 'a set \-> bool`:: + `isEmpty set` returns true if, and only if, `set` is empty. + +`[.kw]#val# equal : ('a set * 'a set) \-> bool`:: + `equal (set1, set2)` returns true if, and only if, the two + sets are equal (_i.e._, they contain the same elements). + +`[.kw]#val# compare : ('a set * 'a set) \-> order`:: + `compare (set1, set2)` returns the lexical order of + the two sets. + +`[.kw]#val# isSubset : ('a set * 'a set) \-> bool`:: + `isSubset (set1, set2)` returns true if, and only if, `set1` + is a subset of `set2` (_i.e._, any element of `set1` is an + element of `set2`). + +`[.kw]#val# disjoint : 'a set * 'a set \-> bool`:: + `equal (set1, set2)` returns true if, and only if, the two + sets are disjoint (_i.e._, their intersection is empty). + +`[.kw]#val# numItems : 'a set \-> int`:: + `numItems set` returns the number of items in the `set`. + +[[val:toList]] +`[.kw]#val# toList : 'a set \-> 'a obj list`:: + `toList set` returns a list of the objects in `set`. + +`[.kw]#val# union : 'a set * 'a set \-> 'a set`:: + `union (set1, set2)` returns the union of the two sets. + +`[.kw]#val# intersection : 'a set * 'a set \-> 'a set`:: + `intersection (set1, set2)` returns the intersection of the two sets. + +`[.kw]#val# difference : 'a set * 'a set \-> 'a set`:: + `difference (set1, set2)` returns the difference of the two sets; + _i.e._, the set of objects that are in `set1`, but not in + `set2`. + +`[.kw]#val# map : ('a obj \-> 'b obj) \-> 'a set \-> 'b set`:: + `map f set` constructs a new set from the result of applying the + function `f` to the elements of `set`. This expression is + equivalent to ++ +[source,sml] +------------ +fromList (List.map f (toList set)) +------------ + +`[.kw]#val# mapPartial : ('a obj \-> 'b obj option) \-> 'a set \-> 'b set`:: + `mapPartial f set` constructs a new set from the result of applying the + function `f` to the elements of `set`. This expression is + equivalent to ++ +[source,sml] +------------ +fromList (List.mapPartial f (toList set)) +------------ + +`[.kw]#val# app : ('a obj \-> unit) \-> 'a set \-> unit`:: + `app f set` applies the function `f` to the objects in `set`. + This expression is equivalent to ++ +[source,sml] +------------ +List.app f (toList set) +------------ + +[[val:fold]] +`[.kw]#val# fold : ('a obj * 'b \-> 'b) \-> 'b \-> 'a set \-> 'b`:: + `fold f init set` folds the function `f` over the objects in + `set` using `init` as the initial value. + This expression is equivalent to ++ +[source,sml] +------------ +List.foldl f init (toList set) +------------ + Although the order in which the elements are processed is unspecified. + +`[.kw]#val# partition : ('a obj \-> bool) \-> 'a set \-> ('a set * 'a set)`:: + `partition pred set` returns a pair of disjoint sets `(tSet, fSet)`, where + the predicate `pred` returns true for every element of `tSet`, + `false` for every element of `fSet`, and `set` is the union of `tSet` + and `fSet`. + +`[.kw]#val# filter : ('a obj \-> bool) \-> 'a set \-> 'a set`:: + `filter pred set` filters out any elements of set for which the + predicate `pred` returns false. + This expression is equivalent to ++ +[source,sml] +------------ +#1 (partition pred set) +------------ + +`[.kw]#val# all : ('a obj \-> bool) \-> 'a set \-> bool`:: + `all pred set` returns `true` if, and only if, `pred obj` returns + true for all elements `obj` in `set`. + +`[.kw]#val# exists : ('a obj \-> bool) \-> 'a set \-> bool`:: + `exists pred set` returns `true` if, and only if, there exists an + element `obj` in `set` such that `pred obj` returns `true`. + +`[.kw]#val# find : ('a obj \-> bool) \-> 'a set \-> 'a obj option`:: + `find pred set` returns `SOME obj` if there exists an object `obj` + in the set for which `pred obj` returns `true`; otherwise `NONE` is returned. + +=== Deprecated functions + +The following functions are part of the interface, but have been +deprecated. + +`[.kw]#val# listItems : 'a set \-> 'a obj list`:: + Use xref:#val:toList[`toList`] instead. + +`[.kw]#val# foldl : ('a obj * 'b \-> 'b) \-> 'b \-> 'a set \-> 'b`:: + Use xref:#val:fold[`fold`] instead. + +`[.kw]#val# foldr : ('a obj * 'b \-> 'b) \-> 'b \-> 'a set \-> 'b`:: + Use xref:#val:fold[`fold`] instead. + +== See Also + +xref:str-HashCons.adoc[`HashCons`], +xref:str-HashConsMap.adoc[`HashConsMap`], +xref:hash-cons-lib.adoc[__The HashCons Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsString.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsString.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsString.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HashCons/str-HashConsString.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,44 @@ += The `HashConsString` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `HashConsString` structure embeds the `string` +type as a hash-consed object. +It is implemented using the xref:fun-HashConsGroundFn.adoc[`HashConsGroundFn`] +functor. + +== Synopsis + +[source,sml] +------------ +structure HashConsString +------------ + +== Interface + +[source,sml] +------------ +type hash_key = string +type obj = hash_key HashCons.obj + +val mk : hash_key -> obj +------------ + +== Description + +`[.kw]#type# hash_key = string`:: + The ground type being hashed. + +`[.kw]#type# obj = hash_key HashCons.obj`:: + The type of hash-consed strings. + +`[.kw]#val# mk : hash_key \-> obj`:: + `mk s` converts the string `s` to a hash-consed object. + +== See Also + +xref:str-HashCons.adoc[`HashCons`], +xref:hash-cons-lib.adoc[__The HashCons Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HTML/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HTML/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HTML/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HTML/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,7 @@ +signature HTML_ERROR +signature HTML +structure HTML +structure MakeHTML +structure PrHTML +structure HTMLDefaults +functor HTMLParserFn diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HTML4/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HTML4/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/HTML4/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/HTML4/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,9 @@ +signature HTML4 +structure HTML4 +structure HTML4Attrs +structure HTML4Entities +structure HTML4Parser +structure HTML4Tokens +structure HTML4TokenUtils +structure HTML4Utils +structure HTML4Print Binary files /tmp/tmpeijleaj1/J0IhGCp1bz/mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/images/smlnj-logo.png and /tmp/tmpeijleaj1/Onfiehphu5/mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/images/smlnj-logo.png differ diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/index.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/index.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/index.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/index.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,108 @@ += Overview +:title: SML/NJ Library Overview +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Introduction + +The **Standard ML of New Jersey Library** (**SML/NJ Library**) +is a collection of over 200 modules grouped into 14 libraries. +It was designed to build on the {sml-basis-url}/index.html[**Standard ML Basis Library**] +by providing higher-level and application-specific services +that were out of scope for the Basis Library. +The **SML/NJ Library** is distributed as part of both the +https://smlnj.org[**SML/NJ**] and +https://mlton.org[**MLton SML Compiler**] systems. + +ifdef::backend-html[] + +== Libraries + +The following is a list of the libraries that comprise the +**SML/NJ Library** with a brief description of what they +provide. These are listed in alphabetical order: + +=== xref:Controls/controls-lib.adoc[Controls Library] +Support for managing application controls. + +=== xref:HTML/html-lib.adoc[HTML Library] +__not yet written__ + +=== xref:HTML4/html4-lib.adoc[HTML4 Library] +__not yet written__ + +=== xref:HashCons/hash-cons-lib.adoc[HashCons Library] +Supports the implementation of hash-consed representations of data structures. + +=== xref:INet/inet-lib.adoc[INet Library] +Provides utilities for network programming with sockets + +=== xref:JSON/json-lib.adoc[JSON Library] +The *JSON Library* provides support for parsing, printing, and +manipulating https://www.json.org/json-en.html[*JSON*] data. + +=== xref:PP/pp-lib.adoc[PP Library] +__not yet written__ + +=== xref:Reactive/reactive-lib.adoc[Reactive Library] +__not yet written__ + +=== xref:RegExp/regexp-lib.adoc[RegExp Library] +__not yet written__ + +=== xref:SExp/sexp-lib.adoc[SExp Library] +Supports the parsing and printing of semi-structured data as +https://en.wikipedia.org/wiki/S-expression[S-expressions]. + +=== xref:Unix/unix-lib.adoc[Unix Library] +The *Unix Library* provides some *Unix*-specific utilities. + +=== xref:Util/smlnj-lib.adoc[Util Library] +The *Util Library* provides a grab bag of data structures and +algorithms. Modules from this library are autoloaded into +the *SML/NJ* interactive environment by default. + +=== xref:UUID/uuid-lib.adoc[UUID Library] +The *UUID Library* provides support for generating and using +UUIDs (_aka_ GUIDs). + +=== xref:XML/xml-lib.adoc[XML Library] +The *XML Library* is a small library for parsing +https://www.w3.org/TR/REC-xml[*XML*] files. + +endif::[] + +ifdef::backend-pdf[] + +include::Controls/controls-lib.adoc[] + +//include::HTML/html-lib.adoc[] + +//include::HTML4/html4-lib.adoc[] + +include::HashCons/hash-cons-lib.adoc[] + +include::INet/inet-lib.adoc[] + +include::JSON/json-lib.adoc[] + +//include::PP/pp-lib.adoc[] + +include::Reactive/reactive-lib.adoc[] + +include::RegExp/regexp-lib.adoc[] + +include::SExp/sexp-lib.adoc[] + +include::Unix/unix-lib.adoc[] + +include::Util/smlnj-lib.adoc[] + +include::UUID/uuid-lib.adoc[] + +include::XML/xml-lib.adoc[] + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/INet/inet-lib.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/INet/inet-lib.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/INet/inet-lib.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/INet/inet-lib.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ += The INet Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Overview + +The *INet Library* provides utilities for network programming with sockets. + +== Contents + +xref:str-SockUtil.adoc[`[.kw]#structure# SockUtil`]:: + Various utility functions for programming with sockets. + +xref:str-UnixSockUtil.adoc[`[.kw]#structure# UnixSockUtil`]:: + Various utility functions for programming with Unix-domain sockets. + +== Usage + +For https://smlnj.org[*SML/NJ*], include `$/inet-lib.cm` in your +*CM* file. + +For use in https://www.mlton.org/[*MLton*], include +`$(SML_LIB)/smlnj-lib/INet/inet-lib.mlb` in your *MLB* file. + +ifdef::backend-pdf[] + +// Push titles down one level. +:leveloffset: 1 + +include::str-SockUtil.adoc[] + +include::str-UnixSockUtil.adoc[] + +// Return to normal title levels. +:leveloffset: 0 + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/INet/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/INet/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/INet/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/INet/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2 @@ +structure SockUtil +structure UnixSockUtil diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/INet/str-SockUtil.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/INet/str-SockUtil.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/INet/str-SockUtil.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/INet/str-SockUtil.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,114 @@ += The `SockUtil` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `SockUtil` structure provides a collection of utility functions for +programming with the *Basis Library* +{sml-basis-url}/socket.html[`Socket`] structure + +== Synopsis + +[source,sml] +------------ +signature SOCK_UTIL +structure SockUtil : SOCK_UTIL +------------ + +== Interface + +[source,sml] +------------ +datatype port = PortNumber of int | ServName of string + +datatype hostname = HostName of string | HostAddr of NetHostDB.in_addr + +val scanAddr : (char, 'a) StringCvt.reader + -> ({host : hostname, port : port option}, 'a) StringCvt.reader +val addrFromString : string -> {host : hostname, port : port option} option + +exception BadAddr of string + +val resolveAddr : {host : hostname, port : port option} + -> {host : string, addr : NetHostDB.in_addr, port : int option} + +type 'a stream_sock = ('a, Socket.active Socket.stream) Socket.sock + +val connectINetStrm : {addr : NetHostDB.in_addr, port : int} + -> INetSock.inet stream_sock + +val recvVec : ('a stream_sock * int) -> Word8Vector.vector +val recvStr : ('a stream_sock * int) -> string + +val sendVec : ('a stream_sock * Word8Vector.vector) -> unit +val sendStr : ('a stream_sock * string) -> unit +val sendArr : ('a stream_sock * Word8Array.array) -> unit +------------ + +== Description + +`[.kw]#datatype# port = PortNumber [.kw]#of# int | ServName [.kw]#of# string`:: + specifies a port identifier, which either be a number (`Port`) + or the name of a service (`ServName`). + +`[.kw]#datatype# hostname = HostName [.kw]#of# string | HostAddr [.kw]#of# NetHostDB.in_addr`:: + something + +[[val:scanAddr]] +`[.kw]#val# scanAddr : (char, 'a) StringCvt.reader \-> ({host : hostname, port : port option}, 'a) StringCvt.reader`:: + `scanAddr getc` returns an address reader. An address is a string of + the form latexmath:[\mathit{addr}\,[\,\mathtt{:}\,\mathit{port}\,]], + where latexmath:[\mathit{addr}] may either be a numeric or symbolic host + name and the optional port is either a decimal port number or alphanumeric service + name. Legal host names must begin with a letter, and may contain any alphanumeric + character, the minus sign (`-`) and period (`.`), where the period is used as a + domain separator. + +`[.kw]#val# addrFromString : string \-> {host : hostname, port : port option} option`:: + `addrFromString addr` converts the string `addr` to a host-port address specifier. + The syntax of addresses is as described for xref:#val:scanAddr[`scanAddr`]. + +[[exn:BadAddr]] +`[.kw]#exception# BadAddr [.kw]#of# string`:: + This exception is raised by xref:#val:resolveAddr[`resolveAddr`]. + +[[val:resolveAddr]] +`[.kw]#val# resolveAddr : {host : hostname, port : port option} \-> {host : string, addr : NetHostDB.in_addr, port : int option}`:: + `resolveAddr {host, port}` resolves the hostname and optional port in the + host and service databases. If either the host or service name is not + found, then the xref:#exn:BadAddr[`BadAddr`] exception is raised. + +`[.kw]#type# 'a stream_sock = ('a, Socket.active Socket.stream) Socket.sock`:: + A type abbreviation for active stream sockets. + +`[.kw]#val# connectINetStrm : {addr : NetHostDB.in_addr, port : int} \-> INetSock.inet stream_sock`:: + `connectINetStrm {addr, port}` establishs a client-side connection to an + INET domain stream socket. + +`[.kw]#val# recvVec : ('a stream_sock * int) \-> Word8Vector.vector`:: + `recvVec (sock, n)` reads `n` bytes from the stream socket `sock`; fewer than + `n` bytes is returned when the stream is closed at the other end of the connection. + It raises the {sml-basis-url}/general.html#SIG:GENERAL.Size:EXN[`Size`] exception + when `n` is negative. + +`[.kw]#val# recvStr : ('a stream_sock * int) \-> string`:: + `recvStr (sock, n)` reads `n` characters from the stream socket `sock`; fewer than + `n` characters is returned when the stream is closed at the other end of the connection. + It raises the {sml-basis-url}/general.html#SIG:GENERAL.Size:EXN[`Size`] exception + when `n` is negative. + +`[.kw]#val# sendVec : ('a stream_sock * Word8Vector.vector) \-> unit`:: + `sendVec (sock, vec)` sends the vector `vec` on the stream socket `sock`. + +`[.kw]#val# sendStr : ('a stream_sock * string) \-> unit`:: + `sendStr (sock, s)` sends the string `s` on the stream socket `sock`. + +`[.kw]#val# sendArr : ('a stream_sock * Word8Array.array) \-> unit`:: + `sendArr (sock, arr)` sends the array `arr` on the stream socket `sock`. + +== See Also + +{sml-basis-url}/socket.html[`Socket` (*SML Basis*)], +xref:inet-lib.adoc[__The INet Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/INet/str-UnixSockUtil.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/INet/str-UnixSockUtil.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/INet/str-UnixSockUtil.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/INet/str-UnixSockUtil.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,42 @@ += The `UnixSockUtil` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `UnixSockUtil` structure extends the xref:str-SockUtil.adoc[`SockUtil`] +structure with an additional operation for making Unix-domain connections. + +== Synopsis + +[source,sml] +------------ +signature UNIX_SOCK_UTIL +structure UnixSockUtil : UNIX_SOCK_UTIL +------------ + +== Interface + +[source,sml] +------------ +include SOCK_UTIL + +val connectUnixStrm : string -> UnixSock.unix stream_sock +------------ + +== Description + +`[.kw]#include# SOCK_UTIL`:: + The `UnixSockUtil` structure includes the operations from the + xref:str-SockUtil.adoc[`SockUtil`] structure. + +`[.kw]#val# connectUnixStrm : string \-> UnixSock.unix stream_sock`:: + `connectUnixStrm path` establishs a client-side connection to the + Unix-domain stream socket specified by `path`. + +== See Also + +xref:str-SockUtil.adoc[`SockUtil`], +{sml-basis-url}/unix-sock.html#UnixSock:STR:SPEC[`UnixSock` (*SML Basis*)], +xref:inet-lib.adoc[__The INet Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/json-lib.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/json-lib.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/json-lib.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/json-lib.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,67 @@ += The JSON Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Overview +The *JSON Library* provides a representation of the +https://www.json.org/json-en.html[JavaScript Object Notation (*JSON*)] +with support for parsing, printing, and manipulating *JSON* +values as trees. There is also support for processing *JSON* data as +streams using a "SAX-style" API. + +== Contents + +=== Tree-based API + + xref:str-JSON.adoc[`[.kw]#structure# JSON`]:: + Defines the representation of *JSON* values as an *SML* datatype. + + xref:str-JSONParser.adoc[`[.kw]#structure# JSONParser`]:: + A parser for *JSON* input. + + xref:str-JSONPrinter.adoc[`[.kw]#structure# JSONPrinter`]:: + A printer for *JSON* output. + + xref:str-JSONUtil.adoc[`[.kw]#structure# JSONUtil`]:: + A collection of utility functions for working with *JSON* values. + +=== Stream-based API + + xref:str-JSONStreamParser.adoc[`[.kw]#structure# JSONStreamParser`]:: + A stream (or event) based parser for JSON input. + + xref:str-JSONStreamPrinter.adoc[`[.kw]#structure# JSONStreamPrinter`]:: + A stream based printer for JSON input. + +== Usage + +For https://smlnj.org[*SML/NJ*], include `$/json-lib.cm` in your +*CM* file. + +For use in https://www.mlton.org/[*MLton*], include +`$(SML_LIB)/smlnj-lib/JSON/json-lib.mlb` in your *MLB* file. + +ifdef::backend-pdf[] + +// Push titles down one level. +:leveloffset: 1 + +include::str-JSON.adoc[] + +include::str-JSONParser.adoc[] + +include::str-JSONPrinter.adoc[] + +include::str-JSONUtil.adoc[] + +include::str-JSONStreamParser.adoc[] + +include::str-JSONStreamPrinter.adoc[] + +// Return to normal title levels. +:leveloffset: 0 + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSON.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSON.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSON.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSON.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,87 @@ += The `JSON` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Synopsis + +[source,sml] +------------ +structure JSON +------------ + +== Interface + +[source,sml] +------------ +datatype value + = OBJECT of (string * value) list + | ARRAY of value list + | NULL + | BOOL of bool + | INT of IntInf.int + | FLOAT of real + | STRING of string +------------ + +== Description + +`[.kw]#datatype# value = ...`:: + [[type:value]] + This datatype represents *JSON* values as trees. The constructors + are ++ +-- + `OBJECT [.kw]#of# (string * value) list`:: + represents a *JSON* object value; _i.e._, a list of key-value pairs. + Note that the keys should be unique. + + `ARRAY [.kw]#of# value list`:: + represents a *JSON* array value. + + `NULL`:: + represents the *JSON* value `"null"`. + + `BOOL [.kw]#of# bool`:: + represents the *JSON* values `"true"` and `"false"`. + + `INT [.kw]#of# IntInf.int`:: + represents *JSON* integer numbers. + + `FLOAT [.kw]#of# real`:: + represents *JSON* floating-point numbers. + + `STRING [.kw]#of# string`:: + represents *JSON* strings, which are assumed to be UTF-8 encoded. +-- + +== Example + +The *JSON* value + +[source,json] +------------- +{ "a" : 23, + "b" : [ false, true ], + "c" : "hello world" +} +------------- + +has the following representation using the *value* datatype: + +[source,sml] +------------ +OBJECT[ + ("a", INT 23), + ("b", ARRAY[BOOL false, BOOL true]), + ("c", STRING "hello world") +] +------------ + + +== See Also + +xref:str-JSONUtil.adoc[`JSONUtil`], +xref:json-lib.adoc[__The JSON Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONParser.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONParser.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONParser.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONParser.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,89 @@ += The `JSONParser` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `JSONParser` structure implements a parser for the +xref:str-JSON.adoc#type:value[`JSON.value`] type. + +== Synopsis + +[source,sml] +------------ +structure JSONParser +------------ + +== Interface + +[source,sml] +------------ +type source + +val openStream : TextIO.instream -> source +val openFile : string -> source +val openString : string -> source + +val close : source -> unit + +val parse : source -> JSON.value + +val parseFile : string -> JSON.value +------------ + +== Description + +[[type:source]] +`[.kw]#type# source`:: + The abstract type of JSON input sources. Note that this type is the + same as xref:str-JSONStreamParser.adoc#type:source[`JSONStreamParser.source`]. + +[[val:openStream]] +`[.kw]#val# openStream : TextIO.instream -> source`:: + `openStream inS` returns a input source for the given input stream. + +[[val:openFile]] +`[.kw]#val# openFile : string -> source`:: + `openStream file` returns a input source for the given file. This function + opens an input stream for reading from the file, so one should make sure to + call xref:val:close[`close`] on the source once all of the *JSON* values + have been read from the file. + +`[.kw]#val# openString : string -> source`:: + `openStream s` returns a input source for the given string. + +[[val:close]] +`[.kw]#val# close : source -> unit`:: + `close src` closes the input source, which has the effect of marking the source + as _closed_. Furthermore, if `src` was created by a call to + xref:#val:openFile[`openFile`], then the underlying input stream that + was created for the file is closed. This function does *not* close the + input stream for sources created by xref:#val:openStream[`openStream`] + +[[val:parse]] +`[.kw]#val# parse : source \-> JSON.value`:: + `parse src` parses a *JSON* value from the input source `src`. + If `src` is closed or if there is a syntax error, then the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception is raised. + +`[.kw]#val# parseFile : string \-> JSON.value`:: + `parse f` parses a *JSON* value from the text file `f`. + If there is a syntax error, then the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception is raised. + This function can also raise the + {sml-basis-url}/io.html#SIG:IO.Io:EXN[`Io`] exception if + there is an error opening `f`. + Note that this function will only parse a single + *JSON* value from the file; to parse multiple values, one should used + the xref:val:parse[`parse`] function with a source created by + xref:val:openFile[`openFile`]. + +== See Also + +xref:str-JSON.adoc[`JSON`], +xref:str-JSONStreamParser.adoc[`JSONStreamParser`], +xref:str-JSONUtil.adoc[`JSONUtil`], +xref:json-lib.adoc[__The JSON Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONPrinter.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONPrinter.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONPrinter.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONPrinter.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,42 @@ += The `JSONPrinter` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `JSONPrinter` structure implements a printer for the +xref:str-JSON.adoc#type:value[`JSON.value`] type. + +== Synopsis + +[source,sml] +------------ +structure JSONPrinter +------------ + +== Interface + +[source,sml] +------------ +val print : TextIO.outstream * JSON.value -> unit +val print' : {strm : TextIO.outstream, pretty : bool} -> JSON.value -> unit +------------ + +== Description + +`[.kw]#val# print : TextIO.outstream * JSON.value \-> unit`:: + `print (outS, jv)` prints the *JSON* value `jv` to the outstream `outS` + in _condensed_ format (_i.e._, without newlines or indentation). + +`[.kw]#val# print' : {strm : TextIO.outstream, pretty : bool} \-> JSON.value \-> unit`:: + `print' {outS, pretty} jv` prints the *JSON* value `jv` to the + outstream `outS`, where the value of the `pretty` field controls whether + the output is condensed (when `pretty` is `false`) or printed with + new lines and indentation to improve readability (when `pretty` is `true`). + +== See Also + +xref:str-JSON.adoc[`JSON`], +xref:str-JSONStreamPrinter.adoc[`JSONStreamPrinter`], +xref:json-lib.adoc[__The JSON Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONStreamParser.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONStreamParser.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONStreamParser.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONStreamParser.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,221 @@ += The `JSONStreamParser` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `JSONStreamParser` structure provides an event-based +(or _stream_) parsing model for *JSON* files. It is suitable +for scanning large files for particular items without having +to first build an in-memory data structure. It can also +be useful to directly translate from *JSON* to a specific *SML* +datatype without having to go through the intermediate +xref:str-JSON.adoc#type:value[`JSON.value`] representation. + +== Synopsis + +[source,sml] +------------ +structure JSONStreamParser +------------ + +== Interface + +[source,sml] +------------ +type source + +type 'ctx callbacks = { + null : 'ctx -> 'ctx, + boolean : 'ctx * bool -> 'ctx, + integer : 'ctx * IntInf.int -> 'ctx, + float : 'ctx * real -> 'ctx, + string : 'ctx * string -> 'ctx, + startObject : 'ctx -> 'ctx, + objectKey : 'ctx * string -> 'ctx, + endObject : 'ctx -> 'ctx, + startArray : 'ctx -> 'ctx, + endArray : 'ctx -> 'ctx, + error : 'ctx * string -> unit + } + +val openStream : TextIO.instream -> source +val openFile : string -> source +val openString : string -> source + +val close : source -> unit + +val parse : 'ctx callbacks -> (source * 'ctx) -> 'ctx + +val parseFile : 'ctx callbacks -> (string * 'ctx) -> 'ctx +------------ + +== Description + +[[type:source]] +`[.kw]#type# source`:: + The abstract type of JSON input sources. Note that this type is the + same as xref:str-JSONStreamParser.adoc#type:source[`JSONParser.source`]. + +`[.kw]#type# 'ctx callbacks = { ... }`:: + This type is a record of the parsing-event call-back functions, where + the type parameter ``'cxt`` is instantiated to the context (or state) + needed to preserve information between events. The call-back functions + in this record type are invoked as follows: ++ +-- + `null : 'ctx \-> 'ctx`:: + called when the *JSON* *null* value is encountered. + + `boolean : 'ctx * bool \-> 'ctx`:: + called when the *JSON* *true* or *false* values are encountered. + + `integer : 'ctx * IntInf.int \-> 'ctx`:: + called when a *JSON* integral-number value encountered. + + `float : 'ctx * real \-> 'ctx`:: + called when a *JSON* floating-point-number value encountered. + + `string : 'ctx * string \-> 'ctx`:: + called when a *JSON* string value encountered. + + `startObject : 'ctx \-> 'ctx`:: + called at the beginning of a *JSON* object definition (_i.e._, + when a "`{`" is encountered). + + `objectKey : 'ctx * string \-> 'ctx`:: + called when a *JSON* object key is encountered (including the + "`:"). The next call-back will specify the value + associated with the key. + + `endObject : 'ctx \-> 'ctx`:: + called at the end of a *JSON* object definition (_i.e._, + when a "`}`" is encountered). + + `startArray : 'ctx \-> 'ctx`:: + called at the beginning of a *JSON* array definition (_i.e._, + when a "`[`" is encountered). + + `endArray : 'ctx \-> 'ctx`:: + called at the end of a *JSON* array definition (_i.e._, + when a "`]`" is encountered). + + `error : 'ctx * string \-> unit`:: + called when a syntax error is encountered in the input. The + second argument is an error message describing the error. + It is expected that this call-back does not return (_i.e._, it + either raises an exception or terminates the program). + If it does return, then the parser will raise the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception. +-- + +[[val:openStream]] +`[.kw]#val# openStream : TextIO.instream -> source`:: + `openStream inS` returns a input source for the given input stream. + +[[val:openFile]] +`[.kw]#val# openFile : string -> source`:: + `openStream file` returns a input source for the given file. This function + opens an input stream for reading from the file, so one should make sure to + call xref:val:close[`close`] on the source once all of the *JSON* values + have been read from the file. + +`[.kw]#val# openString : string -> source`:: + `openStream s` returns a input source for the given string. + +[[val:close]] +`[.kw]#val# close : source -> unit`:: + `close src` closes the input source, which has the effect of marking the source + as _closed_. Furthermore, if `src` was created by a call to + xref:#val:openFile[`openFile`], then the underlying input stream that + was created for the file is closed. This function does *not* close the + input stream for sources created by xref:#val:openStream[`openStream`] + +[[val:parse]] +`[.kw]#val# parse : 'ctx callbacks \-> (source * 'ctx) \-> 'ctx`:: + `parse cbs (src, cxt)` will parse the *JSON* input from the input source + `src`, using the record of call-back functions `cbs` and the initial + context `cxt`. + +`[.kw]#val# parseFile : 'ctx callbacks \-> (string * 'ctx) \-> 'ctx`:: + `parse cbs (f, cxt)` will parse the *JSON* input from the file + `f`, using the record of call-back functions `cbs` and the initial + context `cxt`. Note that this function will only parse a single + *JSON* value from the file; to parse multiple values, one should used + the xref:val:parse[`parse`] function with a source created by + xref:val:openFile[`openFile`]. + +== Exampless + +Consider the following *JSON* input: + +[source,json] +------------- +{ "a" : 23, + "b" : [ false, true ], + "c" : "hello world" +} +------------- + +Parsing this value has the same result as evaluating the following +function: + +[source,sml] +------------ +fun f cxt = let + val cxt = startObject cxt + val cxt = objectKey (cxt, "a") + val cxt = integer (cxt, 23) + val cxt = objectKey (cxt, "b") + val cxt = startArray cxt + val cxt = boolean (cxt, false) + val cxt = boolean (cxt, true) + val cxt = endArray cxt + val cxt = objectKey (cxt, "c") + val cxt = objectString (cxt, "hello world") + val cxt = endObject cxt + in + cxt + end +------------ + +The following function returns a list of all of the string-valued +fields labeled as `"name"` in the input file. + +[source,sml] +------------ +fun getNames file = let + fun objectKey ({names, ...}, "name") = {names = names, isName = true} + | objectKey (cxt, _) = cxt + fun string (cxt as {names, isName}, s) = if isName + then {names = s :: names, isName = false} + else cxt + fun default ({names, isName}, _) = {names = names, isName = false} + val cbs = { + null = Fn.id, + boolean = default, + integer = default, + float = default, + string = string, + startObject = Fn.id, + objectKey = objectKey, + endObject = Fn.id, + startArray = Fn.id, + endArray = Fn.id, + error = fn (_, msg) => raise Fail msg + } + val {names, ...} = + JSONStreamParser.parseFile cbs (file, {names = [], isName = false}) + in + List.rev names + end +------------ + + +== See Also + +xref:str-JSONParser.adoc[`JSONParser`], +xref:str-JSONStreamPrinter.adoc[`JSONStreamPrinter`], +xref:json-lib.adoc[__The JSON Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONStreamPrinter.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONStreamPrinter.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONStreamPrinter.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONStreamPrinter.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,131 @@ += The `JSONStreamPrinter` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `JSONStreamPrinter` structure provides an imperative +printer for producing *JSON* output. + +== Synopsis + +[source,sml] +------------ +structure JSONStreamPrinter +------------ + +== Interface + +[source,sml] +------------ +type printer + +val new : TextIO.outstream -> printer +val new' : {strm : TextIO.outstream, pretty : bool} -> printer + +val close : printer -> unit + +val null : printer -> unit +val boolean : printer * bool -> unit +val integer : printer * IntInf.int -> unit +val float : printer * real -> unit +val string : printer * string -> unit +val beginObject : printer -> unit +val objectKey : printer * string -> unit +val endObject : printer -> unit +val beginArray : printer -> unit +val endArray : printer -> unit +------------ + +== Description + +`[.kw]#type# printer`:: + The abstract type of the pretty-printer state. + +`[.kw]#val# new : TextIO.outstream \-> printer`:: + `new outS` creates a new printer from the outputstream `outS`. + The printer produces a _condensed_ format without newlines or + indentation; use the ``new'`` function to create a pretty-printer + for *JSON* output. + +`[.kw]#val# new' : {strm : TextIO.outstream, pretty : bool} \-> printer`:: + `new' {strm, pretty}` creates a new pretty-printing stream from the output + stream `strm`, where the value of the `pretty` field controls whether + the output is condensed (when `pretty` is `false`) or printed with + new lines and indentation to improve readability (when `pretty` is `true`). + +`[.kw]#val# close : printer \-> unit`:: + `close pr` closes the printer, but not the underlying output stream. + Closing the printer while there is an open object or array results in + the {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception being raised. Also, calling any of the below printing + functions on a closed printer will result in the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception being raised. + +`[.kw]#val# null : printer \-> unit`:: + `null pr` prints the *JSON* *null* value. Raises the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception if the printer is closed. + +`[.kw]#val# boolean : printer * bool \-> unit`:: + `boolean (pr, b)` prints the *JSON* boolean value `b`. Raises the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception if the printer is closed. + +`[.kw]#val# integer : printer * IntInf.int \-> unit`:: + `integer (pr, n)` prints the *JSON* number `n`. Raises the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception if the printer is closed. + +`[.kw]#val# float : printer * real \-> unit`:: + `float (pr, r)` prints the *JSON* floating-point number `r`. + Raises the {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception if the printer is closed. + +`[.kw]#val# string : printer * string \-> unit`:: + `string (pr, s)` prints the *JSON* string `s`. Raises the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception if the printer is closed. + +`[.kw]#val# beginObject : printer \-> unit`:: + `beginArray pr` prints the opening "`{`" for a *JSON* object. + Note that each call to `beginObject` should be matched by a call + to `endObject`. Raises the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception if the printer is closed. + +`[.kw]#val# objectKey : printer * string \-> unit`:: + `objectKey (pr, key)` prints the *JSON* key-value `key` followed + by a "`:`". This function should be inside matched + `beginObject`/`endObject` calls and should be followed by + the printing of a *JSON* value. Raises the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception if the printer is closed. + +`[.kw]#val# endObject : printer \-> unit`:: + `endObject pr` prints the closing `}` for the currently open object. + The {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception is raised if the current context is not an open object, + if a key has been printed without an associated value, or + if the printer is closed. + +`[.kw]#val# beginArray : printer \-> unit`:: + `beginArray pr` prints the opening "`[`" for a *JSON* array. + Note that each call to `beginArray` should be matched by a call + to `endArray`. Raises the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception if the printer is closed. + +`[.kw]#val# endArray : printer \-> unit`:: + `endArray pr` prints the closing `]` for the currently open array. + The {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception is raised if the current context is not an open array + or if the printer is closed. + +== See Also + +xref:str-JSONPrinter.adoc[`JSONPrinter`], +xref:str-JSONStreamParser.adoc[`JSONStreamParser`], +xref:json-lib.adoc[__The JSON Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONUtil.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONUtil.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONUtil.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/JSON/str-JSONUtil.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,195 @@ += The `JSONUtil` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +some overview + +== Synopsis + +[source,sml] +------------ +structure JSONUtil +------------ + +== Interface + +[source,sml] +------------ +exception NotBool of JSON.value +exception NotInt of JSON.value +exception NotNumber of JSON.value +exception NotString of JSON.value + +exception NotObject of JSON.value + +exception FieldNotFound of JSON.value * string + +exception NotArray of JSON.value + +exception ArrayBounds of JSON.value * int + +val exnMessage : exn -> string + +val asBool : JSON.value -> bool +val asInt : JSON.value -> Int.int +val asIntInf : JSON.value -> IntInf.int +val asNumber : JSON.value -> Real.real +val asString : JSON.value -> string + +val findField : JSON.value -> string -> JSON.value option + +val lookupField : JSON.value -> string -> JSON.value + +val asArray : JSON.value -> JSON.value vector + +val arrayMap : (JSON.value -> 'a) -> JSON.value -> 'a list + +datatype edge = SUB of int | SEL of string + +type path = edge list + +val get : JSON.value * path -> JSON.value + +val replace : JSON.value * path * JSON.value -> JSON.value + +val insert : JSON.value * path * string * JSON.value -> JSON.value + +val append : JSON.value * path * JSON.value list -> JSON.value +------------ + +== Description + +`[.kw]#exception# NotBool [.kw]#of# JSON.value`:: + [[exn:NotBool]] + raised by the xref:val:asBool[`asBool`] function when the argument + is not a *JSON* boolean. + +`[.kw]#exception# NotInt [.kw]#of# JSON.value`:: + [[exn:NotInt]] + raised by the xref:val:asInt[`asInt`] and xref:val:asIntInf[`asIntInf`] + functions when the argument is not a *JSON* integer number. + +`[.kw]#exception# NotNumber [.kw]#of# JSON.value`:: + [[exn:NotNumber]] + raised by the xref:val:asNumber[`asNumber`] function when the argument + is not a *JSON* number. + +`[.kw]#exception# NotString [.kw]#of# JSON.value`:: + [[exn:NotString]] + raised by the xref:val:asString[`asString`] function when the argument + is not a *JSON* string. + +`[.kw]#exception# NotObject [.kw]#of# JSON.value`:: + [[exn:NotObject]] + raised by the xref:val:findField[`findField`] and + xref:val:lookupField[`lookupField`] functions when the + argument is not a *JSON* object. + +`[.kw]#exception# FieldNotFound [.kw]#of# JSON.value * string`:: + [[exn:FieldNotFound]] + This exception is raised when the given field is not found in an object. + +`[.kw]#exception# NotArray [.kw]#of# JSON.value`:: + [[exn:NotArray]] + This exception is raised when trying to process a non-array value as an array. + +`[.kw]#exception# ArrayBounds [.kw]#of# JSON.value * int`:: + [[exn:ArrayBounds]] + This exception is raised when access to an array value is out of bounds. + +`[.kw]#val# exnMessage : exn \-> string`:: + `exnMessage exn` returns an error-message string for the exception value + `exn`. This function produces specialized messages for the exceptions defined + in the `JSONUtil` structure and falls back to the + {sml-basis-url}/general.html#SIG:GENERAL.exnMessage:VAL[General.exnMessage] + function for other exceptions. + +`[.kw]#val# asBool : JSON.value \-> bool`:: + [[val:asBool]] + `asBool (JSON.BOOL b)` returns the value `b`. This function raises + the xref:exn:NotBool[`NotBool`] exception if the value is not a + *JSON* boolean value. + +`[.kw]#val# asInt : JSON.value \-> int`:: + [[val:asInt]] + `asInt (JSON.INT n)` returns the value `n` converted to `int`. + This function raises the xref:exn:NotInt[`NotInt`] exception if the + value is not a *JSON* integer value. It may also raise the + {sml-basis-url}/general.html#SIG:GENERAL.Overflow:EXN[`Overflow`] + exception if `n` is too large for the default `int` type. + +`[.kw]#val# asIntInf : JSON.value \-> IntInf.int`:: + [[val:asIntInf]] + `asIntInf (JSON.INT n)` returns the value `n`. + This function raises the xref:exn:NotInt[`NotInt`] exception if the + value is not a *JSON* integer value. + +`[.kw]#val# asNumber : JSON.value \-> Real.real`:: + [[val:asNumber]] + `asNumber jv` converts the *JSON* number `jv` to an SML `real` value. + The `jv` argument can either have the form `JSON.INT n`, in which case + `n` is converted to the `real` type and returned, or `JSON.FLOAT f`, + in which case `f` is returned; otherwise, the + xref:exn:NotNumber[`NotNumber`] exception is raised. + +`[.kw]#val# asString : JSON.value \-> string`:: + [[val:asString]] + `asBool (JSON.STRING s)` returns the value `s`. This function raises + the xref:exn:NotString[`NotString`] exception if the value is not a + *JSON* string value. + +`[.kw]#val# findField : JSON.value \-> string \-> JSON.value option`:: + [[val:findField]] + `findField (JSON.OBJECT flds) key` returns `SOME jv` when the + list of fields `flds` contains `(key, jv)` and `NONE` otherwise. + If `findField` is called on a value that is not a *JSON* object, + then it raises the xref:exn:NotObject[`NotObject`] exception. + +`[.kw]#val# lookupField : JSON.value \-> string \-> JSON.value`:: + [[val:lookupField]] + `lookupField (JSON.OBJECT flds) key` returns `jv` when the + list of fields `flds` contains `(key, jv)` and raises the + xref:exn:FieldNotFound[`FieldNotFound`] exception otherwise. + If `lookupField` is called on a value that is not a *JSON* object, + then it raises the xref:exn:NotObject[`NotObject`] exception. + +`[.kw]#val# asArray : JSON.value \-> JSON.value vector`:: + [[val:asArray]] + `asArray jv` converts the *JSON* array value `jv` to an *SML* + vector value. It raises the xref:exn:NotArray[`NotArray`] exception + when `jv` is not a *JSON* array. + +`[.kw]#val# arrayMap : (JSON.value \-> 'a) \-> JSON.value \-> 'a list`:: + [[val:arrayMap]] + map a conversion function over a JSON array to produce a list; this function + raises the xref:exn:NotArray[`NotArray`] exception if the second argument + is not an array. + +`[.kw]#datatype# edge = ...`:: + specifies an edge of a path into a *JSON* value. + The constructors have the following meaning: ++ +-- + `SUB [.kw]#of# int`:: + `SUB i` specifies the ``i``th element of a *JSON* array. + `SEL [.kw]#of# string`:: + `SEL key` specifies the value labeled by `key` in a *JSON* object. +-- + +`[.kw]#type# path = edge list`:: + specifies a path into a *JSON* value. + +`[.kw]#val# get : JSON.value * path \-> JSON.value`:: + [[val:get]] + `get (jv, path)` returns the component of `jv` named by `path`. It raises + one of the xref:exn:NotObject[`NotObject`], xref:exn:NotArray[`NotArray`], + or xref:exn:FieldNotFound[`FieldNotFound`] exceptions if there is an + inconsistency between the path and the structure of `jv`. + +== See Also + +xref:str-JSON.adoc[`JSON`], +xref:json-lib.adoc[__The JSON Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Makefile.in mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Makefile.in --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Makefile.in 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,91 @@ +# Makefile for SML/NJ Library documentation +# +# COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) +# All rights reserved. +# +# @configure_input@ +# + +SHELL = @SHELL@ +INSTALL = @INSTALL@ +@SET_MAKE@ + +# documentation generator tools +# +GEN_PAGES = @TOOL_BIN_DIR@/gen-pages +GEN_PAGES_FLAGS = -v +MAKE_INDEX = @TOOL_BIN_DIR@/make-index + +ifeq ($(WEB),yes) +GEN_PAGES_FLAGS += --base-url=https://smlnj.org/doc/smlnj-lib +endif + +# place to put documentation for doc target +# +HTML_DST_ROOT = @OUT_DIR@ +STYLES_DST = $(HTML_DST_ROOT)/styles +IMAGES_DST = $(HTML_DST_ROOT)/images + +# root path to place generated HTML files for the SML/NJ web site +# +WEB_HTMLDST_ROOT = @ROOT_DIR@/htdocs +WEB_STYLES_DST = $(WEB_HTML_DST_ROOT)/styles + +# we have one sub-directory per documented library +# +DOC_SUBDIRS = Controls HashCons INet JSON Reactive RegExp SExp Unix Util UUID XML + +HTML_SUBDIRS = $(addprefix $(HTML_DST_ROOT)/,$(DOC_SUBDIRS)) + +ADOC_FILES = index.adoc \ + $(wildcard */*.adoc) + +# install-offline includes the images directory so that things render +# properly offline +.PHONY: install-offline +install-offline: install + mkdir -p $(IMAGES_DST) + cp -p images/smlnj-logo.png $(IMAGES_DST) + +.PHONY: install +install: $(HTML_DST_ROOT) css html + cp -p index.html $(HTML_DST_ROOT) + cp -p styles/smlnj-lib-base.css $(STYLES_DST) + cp -p styles/smlnj-lib.css $(STYLES_DST) + cp -p styles/smlnj-lib-pygments.css $(STYLES_DST) + for dir in $(DOC_SUBDIRS) ; do \ + cp -p $$dir/*html $(HTML_DST_ROOT)/$$dir ; \ + done + +.PHONY: css +css: + scripts/gen-css.sh styles/smlnj-lib-base_css.in > styles/smlnj-lib-base.css + scripts/gen-css.sh styles/smlnj-lib_css.in > styles/smlnj-lib.css + scripts/gen-css.sh styles/smlnj-lib-pygments_css.in > styles/smlnj-lib-pygments.css + +.PHONY: html +html: index.html + +index.html: index.json + $(GEN_PAGES) $(GEN_PAGES_FLAGS) + +index.json: $(ADOC_FILES) + $(MAKE_INDEX) index.json + +$(HTML_DST_ROOT): + mkdir -p $(HTML_DST_ROOT) + mkdir -p $(STYLES_DST) + for dir in $(DOC_SUBDIRS) ; do \ + mkdir -p $(HTML_DST_ROOT)/$$dir ; \ + done + + +#################### Cleanup #################### + +CLEAN_FILES = index.html */*html index.json \ + styles/smlnj-lib-base.css \ + styles/smlnj-lib.css \ + styles/smlnj-lib-pygments.css \ + tools/gen-pages/config.sml + +include @MK_DIR@/clean-rules.gmk diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/PP/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/PP/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/PP/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/PP/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,15 @@ +signature PP_DESC +signature PP_DEVICE +signature PP_TOKEN +signature PP_STREAM +functor PPStreamFn +functor PPDescFn +functor PPDebugFn +structure TextIOPP +structure TextPP +structure SimpleTextIODev +structure CharBufferPP +structure ANSITermDev +structure ANSITermPP +structure HTMLDev +structure StringToken diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/PP/tutorial.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/PP/tutorial.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/PP/tutorial.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/PP/tutorial.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,174 @@ += Using the Pretty-Printing Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Introduction + +The pretty printing library is quite flexible, but requires some care in its use to +get the desired results. +This tutorial illustrates how the various mechanisms work and provides some examples +of how to implement common layouts. + +=== Background + +The pretty printer library was initially a port of the Ocaml `Format` module, which, in +turn is an https://doi.org/10.1145/357114.357115[_Oppen-style_] implementation of the +https://www-sop.inria.rr/croap/centaur/tutorial/tutorial.ps[_PPML] pretty-printing +model. + +Pretty printing is achived by issuing a sequence of printing commands, which the +library then uses to determine the layout. + + +=== Basics + +There are three key concepts that determine how text will be layed out: + +-- +* **boxes** are nested containers that determine the layout mode for their contents. + +* **breaks** are hints to the layout engine about where to break lines of text. + +* **indentation** controls the initial position of a line of text with respect to + the previous line. +-- + + +== Text + +// strings, tokens, nbSpace, breaks + +== Boxes + +Boxes provide a hiearchical structure that allows one to control the layout of +text. There are four main types of boxes: + +-- +* **Horizontal boxes (h) **, which pack text horizontally on a single line. + +* **Vertical boxes (v)**, which pack text vertically. + +* **Horizontal or vertical boxes (hov)**, which behave like h-boxes unless there + is insufficient space, in which case they behave like v-boxes. + +* **Horizontal then vertical boxes (hv)**, which pack text horizontally until there is + no more room, at which point a new line is started. These could also be called + _paragraph boxes_, since the layout the text in paragraph-like blocks. +-- + +In addition, there is the structural box, which is similar to hv-boxes, but with some +subtle differences that are described below. + +To add a box to the pretty printing stream, we first call the appropriate open +function (_e.g._, `openHBox`), then emit the contents of the box, and then call the `closeBox` +function. +For every open-box function call, there must be a matching call to `closeBox`. + +== Example -- Layout of C Code + +In this section, we illustrate a couple of different approaches +to formatting a simple C-like syntax. +We use the following datatypes to represent simple C statments and +functions, where we are using strings to represent expressions, _etc_. + +[source,sml] +------------ +datatype stm + = ASGN of string * string + | IF of string * stm * stm + | WHILE of string * stm list + | BLK of stm list + +datatype func + = FUNC of string * stm list +------------ + +=== Using a K&R Style Layout + +[source,sml] +------------ +fun knr ppS (FUNC(proto, body)) = let + val indent = PP.Abs 4 + fun sp () = PP.space ppS 1 + fun string s = PP.string ppS s + fun ppStm (ASGN(lhs, rhs)) = ( + PP.openHBox ppS; + string lhs; sp(); string "="; sp(); string rhs; + PP.closeBox ppS) + | ppStm (IF(cond, thenStm, elseStm)) = ( + PP.openVBox ppS (PP.Abs 0); + PP.openHBox ppS; + string "if"; sp(); string cond; + PP.closeBox ppS; + ppBlk thenStm; + PP.cut ppS; + PP.openHBox ppS; + string "else"; sp(); + PP.closeBox ppS; + ppBlk elseStm; + PP.closeBox ppS) + | ppStm (stm as BLK _) = ppBlk stm + | ppStm (WHILE(cond, body)) = ( + PP.openVBox ppS (PP.Abs 0); + PP.openHBox ppS; + string "while"; sp(); string cond; sp(); + PP.closeBox ppS; + ppBlk body; + PP.closeBox ppS) + and ppBlk (BLK stms) = ( + PP.openVBox ppS (PP.Abs 0); + string "{"; + PP.openVBox ppS indent; + List.app (fn stm => (PP.cut ppS; ppStm stm)) stms; + PP.closeBox ppS; + PP.cut ppS; + string "}"; + PP.closeBox ppS) + | ppBlk stm = ( + PP.break ppS {nsp=0, offset=inAmt}; + ppStm stm) + in + PP.openVBox ppS (PP.Abs 0); + PP.openVBox ppS indent; + PP.openHBox ppS; + string proto; + sp (); + string "{"; + PP.closeBox ppS; + List.app (fn stm => (PP.cut ppS; ppStm stm)) body; + PP.closeBox ppS; + PP.cut ppS; + string "}"; + PP.cut ppS; + PP.closeBox ppS + end +------------ + +=== Some Variations + +[source,c] +---------- +if ( ... ) { + ... +} else { + ... +} +---------- + +[source,sml] +------------ +| ppStm (IF(cond, thenBlk as BLK _, elseBlk as BLK _)) = ( + PP.openVBox ppS (PP.Abs 0); + PP.openHBox ppS; + string "if"; sp(); string cond; + PP.closeBox ppS; + ppBlk thenStm; + PP.openHBox ppS; + string "else"; sp(); + PP.closeBox ppS; + ppBlk elseStm; + PP.closeBox ppS) +------------ diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +structure Reactive diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/reactive-lib.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/reactive-lib.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/reactive-lib.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/reactive-lib.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,41 @@ += The Reactive Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Overview + +The *Reactive Library* is an implementation of a low-level reactive +engine (or toolkit). This implementation is a port of the Java +http://www-sop.inria.fr/meije/rc/SugarCubes/index.html[*SugarCubes*] +Library. The main difference (aside from the implementation language) +is that we support preemption of actions (as in Berry's +https://doi.org/10.1145/158511.158526[_Communicating Reactive Processes_] +model). + +== Contents + +xref:str-Reactive.adoc[`[.kw]#structure# Reactive`]:: + something + +== Usage + +For https://smlnj.org[*SML/NJ*], include `$/reactive-lib.cm` in your +*CM* file. + +For use in https://www.mlton.org/[*MLton*], include +`$(SML_LIB)/smlnj-lib/Reactive/reactive-lib.mlb` in your *MLB* file. + +ifdef::backend-pdf[] + +// Push titles down one level. +:leveloffset: 1 + +include::str-Reactive.adoc[] + +// Return to normal title levels. +:leveloffset: 0 + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/str-Reactive.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/str-Reactive.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/str-Reactive.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Reactive/str-Reactive.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,246 @@ += The `Reactive` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `Reactive` structure provides types and operations to build and +run reactive systems. The inputs and outputs of a reactive system +are sets of _signals_, which can either be _present_ (_i.e._, `true`) +or _absent_ (_i.e._, `false`). A reactive system runs in discrete +timesteps. + + +== Synopsis + +[source,sml] +------------ +signature REACTIVE +structure Reactive : REACTIVE +------------ + +== Interface + +[source,sml] +------------ +type machine +type instruction +type signal = Atom.atom +type config +type in_signal +type out_signal + +val machine : { + inputs : signal list, + outputs : signal list, + body : instruction + } -> machine + +val run : machine -> bool +val reset : machine -> unit + +val inputsOf : machine -> in_signal list +val outputsOf : machine -> out_signal list + +val inputSignal : in_signal -> signal +val outputSignal : out_signal -> signal + +val setInSignal : (in_signal * bool) -> unit +val getInSignal : in_signal -> bool +val getOutSignal : out_signal -> bool + +val || : (instruction * instruction) -> instruction +val & : (instruction * instruction) -> instruction + +val nothing : instruction +val stop : instruction +val suspend : instruction + +val action : (machine -> unit) -> instruction +val exec : (machine -> {stop : unit -> unit, done : unit -> bool}) + -> instruction + +val ifThenElse : ((machine -> bool) * instruction * instruction) -> instruction +val repeat : (int * instruction) -> instruction +val loop : instruction -> instruction +val close : instruction -> instruction + +val signal : (signal * instruction) -> instruction +val rebind : (signal * signal * instruction) -> instruction +val when : (config * instruction * instruction) -> instruction +val trap : (config * instruction) -> instruction +val trapWith : (config * instruction * instruction) -> instruction +val emit : signal -> instruction +val await : config -> instruction + +val posConfig : signal -> config +val negConfig : signal -> config +val orConfig : (config * config) -> config +val andConfig : (config * config) -> config +------------ + +== Description + +The description of the interface is organized into sections. + +=== Types + +`[.kw]#type# machine`:: + The type of a reactive system. + +`[.kw]#type# instruction`:: + The abstract representation of a reactive program. + +`[.kw]#type# signal = xref:../Util/str-Atom.adoc#type:atom[Atom.atom]`:: + The name of a signal. + +`[.kw]#type# config`:: + A signal configuration is a logical combination of signals. + +`[.kw]#type# in_signal`:: + An input signal for a reactive system. + +`[.kw]#type# out_signal`:: + An output signal for a reactive system. + +=== Machines + +`[.kw]#val# machine : { ... } \-> machine`:: + `machine {inputs, outputs, body}` creates a new reactive system (or machine) + from a list of input signal names, a list of output signal names, and a reactive + program. + +`[.kw]#val# run : machine \-> bool`:: + `run m` will run the reactive system `m` one instant (or activation). + It returns `true` if, and only if, the machine ends in a terminal state + (_i.e., by executing the xref:val:stop[`stop`] instruction). + +`[.kw]#val# reset : machine \-> unit`:: + `reset m` resets the state of `m` to its initial state. + +`[.kw]#val# inputsOf : machine \-> in_signal list`:: + `inputsOf m` returns a list of the input signals in the machine. + +`[.kw]#val# outputsOf : machine \-> out_signal list`:: + `outputsOf m` returns a list of the output signals in the machine. + +[[val:nameOfInput]] +`[.kw]#val# nameOfInput : in_signal \-> signal`:: + `inputSignal inSig` returns the name of the input signal. + +[[val:nameOfOutput]] +`[.kw]#val# nameOfOutput : out_signal \-> signal`:: + `inputSignal outSig` returns the name of the output signal. + +`[.kw]#val# setInSignal : (in_signal * bool) \-> unit`:: + `setInSignal (inSig, b)` sets the value of the input signal to `b`. + +`[.kw]#val# getInSignal : in_signal \-> bool`:: + `getInSignal inSig` gets the current value of the input signal. + +`[.kw]#val# getOutSignal : out_signal \-> bool`:: + `getOutSignal inSig` gets the current value of the output signal. + +=== Instructions + +`[.kw]#val# || : (instruction * instruction) \-> instruction`:: + `|| (i1, i2)` forms the parallel composition of the two programs. + Activation of the resulting program will interleave the two + programs until either one of them suspends (see the + xref:val:suspend[`suspend`] instruction) or both programs terminate. + +`[.kw]#val# & : (instruction * instruction) \-> instruction`:: + `& (i1, i2)` forms the sequential composition of the two programs. + +`[.kw]#val# nothing : instruction`:: + The program that does nothing. + +[[val:stop]] +`[.kw]#val# stop : instruction`:: + The program that stops; _i.e._, reaches the terminal state for + the current and all future activations. + +[[val:suspend]] +`[.kw]#val# suspend : instruction`:: + The program that suspends the current activation. + +`[.kw]#val# action : (machine \-> unit) \-> instruction`:: + *something* + +`[.kw]#val# exec : (machine \-> {stop : unit \-> unit, done : unit \-> bool}) \-> instruction`:: + `exec f` returns a program that encapsulates the *SML* computation defined by + the function `f`. + +`[.kw]#val# ifThenElse : ((machine \-> bool) * instruction * instruction) \-> instruction`:: + *something* + +`[.kw]#val# repeat : (int * instruction) \-> instruction`:: + *something* + +`[.kw]#val# loop : instruction \-> instruction`:: + *something* + +`[.kw]#val# close : instruction \-> instruction`:: + *something* + +`[.kw]#val# signal : (signal * instruction) \-> instruction`:: + *something* + +`[.kw]#val# rebind : (signal * signal * instruction) \-> instruction`:: + *something* + +`[.kw]#val# when : (config * instruction * instruction) \-> instruction`:: + *something* + +`[.kw]#val# trapWith : (config * instruction * instruction) \-> instruction`:: + `trapWith (cfg, i1, i2)` returns the program that ... + +`[.kw]#val# trap : (config * instruction) \-> instruction`:: + `trap (cfg, i)` + This expression is equivalent to ++ +[source,sml] +------------ +trapWith (cfg, i, nothing) +------------ + +`[.kw]#val# emit : signal \-> instruction`:: + `emit sigId` returns the program that emits the signal with the given + name (_i.e._, the signal is _present_). + +`[.kw]#val# await : config \-> instruction`:: + `await cfg` returns the program that waits for the configuration to hold. + +=== Signal configurations + +`[.kw]#val# posConfig : signal \-> config`:: + `posConfig sigId` defines a configuration that holds if, and only if, + the signal named `sigId` is present. + +`[.kw]#val# negConfig : signal \-> config`:: + `negConfig sigId` defines a configuration that holds if, and only if, + the signal named `sigId` is *not* present. + +`[.kw]#val# orConfig : (config * config) \-> config`:: + `orConfig (cfg1, cfg2)` defines a configuration that holds if either `cfg1` + or `cfg2` (inclusive) holds. + +`[.kw]#val# andConfig : (config * config) \-> config`:: + `andConfig (cfg1, cfg2)` defines a configuration that holds if both `cfg1` + and `cfg2` hold. + +=== Deprecated functions + +The following functions are part of the interface, but have been +deprecated. + +`[.kw]#val# inputSignal : in_signal -> signal`:: + use xref:#val:nameOfInput[`nameOfInput`] instead. + +`[.kw]#val# outputSignal : out_signal -> signal`:: + use xref:#val:nameOfOutput[`nameOfOutput`] instead. + +== See Also + +xref:reactive-lib.adoc[__The Reactive Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/fun-RegExpFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/fun-RegExpFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/fun-RegExpFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/fun-RegExpFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,133 @@ += The `RegExpFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `RegExpFn` functor glues together a front-end regular-expression +parser with a back-end regular-expression engine. + +== Synopsis + +[source,sml] +------------ +signature REGEXP +functor RegExpFn ( + structure P : REGEXP_PARSER + structure E : REGEXP_ENGINE + ) :> REGEXP where type regexp = E.regexp +------------ + +== Functor Argument Interface + +[source,sml] +------------ +structure P : REGEXP_PARSER +structure E : REGEXP_ENGINE +------------ + +== Functor Argument Description + +`[.kw]#structure# P : xref:sig-REGEXP_PARSER.adoc[REGEXP_PARSER]`:: + The front-end parser for the regular-expression syntax. + +`[.kw]#structure# E : xref:sig-REGEXP_ENGINE.adoc[REGEXP_ENGINE]`:: + The back-end engine. + +== Interface + +[source,sml] +------------ +type regexp + +type 'a match = {pos : 'a, len : int} MatchTree.match_tree + +exception CannotParse + +val compile : (char,'a) StringCvt.reader -> (regexp, 'a) StringCvt.reader +val compileString : string -> regexp + +val find : regexp -> (char,'a) StringCvt.reader -> ('a match, 'a) StringCvt.reader + +val prefix : regexp -> (char,'a) StringCvt.reader -> ('a match, 'a) StringCvt.reader + +val match : (string * ('a match -> 'b)) list + -> (char,'a) StringCvt.reader -> ('b, 'a) StringCvt.reader +------------ + +== Interface Description + +`[.kw]#type# regexp`:: + The type of a compiled regular expression. + + (* a match specifies the position (as a stream) and the length of the match *) +`[.kw]#type# 'a match = {pos : 'a, len : int} MatchTree.match_tree`:: + A xref:str-MatchTree.adoc#type:match_tree[match tree] specifying the starting + position and size of matches. For a general + {sml-basis-url}/string-cvt.html#SIG:STRING_CVT.reader:TY[character reader] `getc`, + we can extract the string for a match using the following function: ++ +[source,sml] +------------ +fun getMatchString {pos, len} = let + fun get (_, 0, chrs) = String.implodeRev chrs + | get (strm, n, chrs) = let + val SOME(c, rest) = getc strm + in + get (rest, n-1, c::chrs) + end + in + get (pos, len, []) + end +------------ ++ +More direct means are possible for specific input sources (_e.g._, strings, +substrings, or text input). + +[[exn:CannotParse]] +`[.kw]#exception# CannotParse`:: + This exception is raised by the functions xref:#val:compileString[`compileString`] + xref:#val:match[`match`] when the front-end encounters a syntax error. + +`[.kw]#val# compile : (char,'a) StringCvt.reader \-> (regexp, 'a) StringCvt.reader`:: + `compile getc strm` parses and compiles a regular expression from the input + stream `strm` using the + {sml-basis-url}/string-cvt.html#SIG:STRING_CVT.reader:TY[character reader] `getc`. + If successful, it returns `SOME(re, strm')`, where `re` is the compiled + regular expression and ``strm'`` is the residual input stream. It returns + `NONE` if there is a syntax error in the input. If the source regular + expression contains features that are not supported by the back-end engine, + then the xref:str-RegExpSyntax.adoc#exn:CannotCompile[`CannotCompile`] + exception is raised. + +[[val:compileString]] +`[.kw]#val# compileString : string \-> regexp`:: + `compileString s` returns the compiled regular expression defined + by the string `s`. The xref:#exn:CannotParse[`CannotParse`] exception + is raised if there was a syntax error when parsing `s` and the + xref:str-RegExpSyntax.adoc#exn:CannotCompile[`CannotCompile`] exception + is raised if the source regular expression contains features that are + not supported by the back-end engine. + +`[.kw]#val# find : regexp \-> (char,'a) StringCvt.reader \-> ('a match, 'a) StringCvt.reader`:: + `find re getc strm` returns `SOME mt` where `mt` describes the *first* + match of `re` in the input stream; otherwise it returns `NONE` if there + is no match. + +`[.kw]#val# prefix : regexp \-> (char,'a) StringCvt.reader \-> ('a match, 'a) StringCvt.reader`:: + `prefix re getc strm` returns `SOME mt` where `mt` describes the + matching of `re` at the *beginning* of the input stream; otherwise it + returns `NONE` if `re` does not match a prefix of the input. + +[[val:match]] +`[.kw]#val# match : (string * ('a match \-> 'b)) list \-> (char,'a) StringCvt.reader \-> ('b, 'a) StringCvt.reader`:: + `match rules getc strm` attempts to match one of the `rules` starting at the + current stream position. Each rule is a pair of a regular expression and + an action. The rules are tested in order; if a rule `(re, act)` matches with + the result `mt`, then the result of `match` will be `SOME(act mt)`. + If no rule matches, then `NONE` is the result. + +== See Also + +xref:regexp-lib.adoc[__The RegExp Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,9 @@ +signature REGEXP_PARSER +signature REGEXP_ENGINE +structure RegExpSyntax +structure MatchTree +structure AwkSyntax +structure BackTrackEngine +structure DfaEngine +structure ThompsonEngine +functor RegExpFn diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/regexp-lib.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/regexp-lib.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/regexp-lib.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/regexp-lib.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,77 @@ += The RegExp Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Overview + +The *RegExp Library* ... + +== Contents + +xref:tutorial.adoc[Using the *RegExp Library*]:: + A tutorial guide to using this library. + +xref:sig-REGEXP_PARSER.adoc[`[.kw]#signature# REGEXP_PARSER`]:: + Defines the interface to a parser for a concrete + regular-expression syntax. + +xref:sig-REGEXP_ENGINE.adoc[`[.kw]#signature# REGEXP_ENGINE`]:: + Defines the interface to a regular-expression search engine. + +xref:str-RegExpSyntax.adoc[`[.kw]#structure# RegExpSyntax`]:: + Defines the abstract syntax of regular expressions. + +xref:str-MatchTree.adoc[`[.kw]#structure# MatchTree`]:: + Provides a tree-structured representation + of the result of a successful regular expression match. + +xref:str-AwkSyntax.adoc[`[.kw]#structure# AwkSyntax`]:: + A parser for the regular-expression syntax defined by the AWK language. + +xref:sig-REGEXP_ENGINE.adoc#str:BackTrackEngine[`[.kw]#structure# BackTrackEngine`]:: + something + +xref:sig-REGEXP_ENGINE.adoc#str:DfaEngine[`[.kw]#structure# DfaEngine`]:: + something + +xref:sig-REGEXP_ENGINE.adoc#str:ThompsonEngine[`[.kw]#structure# ThompsonEngine`]:: + something + +xref:fun-RegExpFn.adoc[`[.kw]#functor# RegExpFn`]:: + Provides a functor for combining a regular-expression parser with an engine to + form a complete implementation of an regular-expression search module. + +== Usage + +For https://smlnj.org[*SML/NJ*], include `$/regexp-lib.cm` in your +*CM* file. + +For use in https://www.mlton.org/[*MLton*], include +`$(SML_LIB)/smlnj-lib/RegExp/regexp-lib.mlb` in your *MLB* file. + +ifdef::backend-pdf[] + +// Push titles down one level. +:leveloffset: 1 + +include::tutorial.adoc[] + +include::sig-REGEXP_PARSER.adoc[] + +include::sig-REGEXP_ENGINE.adoc[] + +include::str-RegExpSyntax.adoc[] + +include::str-MatchTree.adoc[] + +include::str-AwkSyntax.adoc[] + +include::fun-RegExpFn.adoc[] + +// Return to normal title levels. +:leveloffset: 0 + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/sig-REGEXP_ENGINE.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/sig-REGEXP_ENGINE.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/sig-REGEXP_ENGINE.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/sig-REGEXP_ENGINE.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,101 @@ += The `REGEXP_ENGINE` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `REGEXP_ENGINE` signature ... + +== Synopsis + +[source,sml] +------------ +signature REGEXP_ENGINE + +structure BackTrackEngine : REGEXP_ENGINE +structure DfaEngine : REGEXP_ENGINE +structure ThompsonEngine : REGEXP_ENGINE +------------ + +== Interface + +[source,sml] +------------ +type regexp + +type 'a match = {pos : 'a, len : int} MatchTree.match_tree + +val compile : RegExpSyntax.syntax -> regexp + +val find : regexp -> (char,'a) StringCvt.reader -> ('a match, 'a) StringCvt.reader + +val prefix : regexp ->(char,'a) StringCvt.reader -> ('a match, 'a) StringCvt.reader + +val match : (RegExpSyntax.syntax * ('a match -> 'b)) list + -> (char,'a) StringCvt.reader -> ('b, 'a) StringCvt.reader +------------ + +== Description + +`[.kw]#type# regexp`:: + *something* + (* the type of a compiled regular expression + *) + + (* a match specifies the position (as a stream) and the length of the match *) +`[.kw]#type# 'a match = {pos : 'a, len : int} MatchTree.match_tree`:: + *something* + +`[.kw]#val# compile : RegExpSyntax.syntax \-> regexp`:: + *something* + (* compile a regular expression from the abstract syntax + *) + +`[.kw]#val# find : regexp \-> (char,'a) StringCvt.reader \-> ('a match, 'a) StringCvt.reader`:: + *something* + (* scan the stream for the first occurence of the regular expression. The call + * + * find re getc strm + * + * returns NONE if the end of stream is reached without a match. Otherwise it + * returns SOME(match, strm'), where match is the match-tree for the match and + * strm' is the stream following the match. + *) + +`[.kw]#val# prefix : regexp \->(char,'a) StringCvt.reader \-> ('a match, 'a) StringCvt.reader`:: + *something* + (* attempt to match the stream at the current position with the + * regular expression + *) + +`[.kw]#val# match : (RegExpSyntax.syntax * ('a match \-> 'b)) list \-> (char,'a) StringCvt.reader \-> ('b, 'a) StringCvt.reader`:: + *something* + (* attempt to the match the stream at the current position with one of + * the abstract syntax representations of regular expressions and trigger + * the corresponding action + *) + +== Instances + +[[str:BackTrackEngine]] +`[.kw]#structure# BackTrackEngine`:: + A backtracking interpreter for the regular-expression syntax. This implementation + requires no extra compilation time, but backtracking can result in slow searches + for some regular expressions. + +[[str:DfaEngine]] +`[.kw]#structure# DfaEngine`:: + This implementation compiles the regular expression to a nondeterministic + finite-state machine and then coverts that to a deterministic machine. + The resulting machine is fast, but can be exponential in size for some + regular expressions. + +[[str:ThompsonEngine]] +`[.kw]#structure# ThompsonEngine`:: + An implementation of Ken Thompson's famous + https://doi.org/10.1145/363347.363387[__Regular Expression Search Algorithm__]. + +== See Also + +xref:regexp-lib.adoc[__The RegExp Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/sig-REGEXP_PARSER.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/sig-REGEXP_PARSER.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/sig-REGEXP_PARSER.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/sig-REGEXP_PARSER.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,47 @@ += The `REGEXP_PARSER` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `REGEXP_PARSER` signature defines the interface to a parser for a +concrete regular-expression syntax. + +== Synopsis + +[source,sml] +------------ +signature REGEXP_PARSER + +structure AwkSyntax : REGEXP_PARSER +------------ + +== Interface + +[source,sml] +------------ +val scan : (char, 'a) StringCvt.reader -> (RegExpSyntax.syntax, 'a) StringCvt.reader +------------ + +== Description + +`[.kw]#val# scan : (char, 'a) StringCvt.reader \-> (RegExpSyntax.syntax, 'a) StringCvt.reader`:: + `scan getc strm` parses a regular expression from the input stream `strm` using + the {sml-basis-url}/string-cvt.html#SIG:STRING_CVT.reader:TY[character reader] `getc`. + If successful, it returns `SOME(re, strm')`, where `re` is the abstract syntax + of the regular expression and ``strm'`` is the residual input stream. It returns + `NONE` if there is a syntax error in the input. + +== Instances + +[[str:AwkSyntax]] +`[.kw]#structure# xref:str-AwkSyntax.adoc[AwkSyntax]`:: + A parser for the regular-expression syntax defined by the AWK language. + +== See Also + +xref:str-AwkSyntax.adoc[`AwkSyntax`], +xref:fun-RegExpFn.adoc[`RegExpFn`], +xref:str-RegExpSyntax.adoc[`RegExpSyntax`], +xref:regexp-lib.adoc[__The RegExp Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-AwkSyntax.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-AwkSyntax.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-AwkSyntax.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-AwkSyntax.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,60 @@ += The `AwkSyntax` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `AwkSyntax` structure implements the AWK syntax for regular expressions. +The syntax is defined on pp. 28-30 of _The AWK Programming Language_, +by Aho, Kernighan and Weinberger. The syntax has been extended with interval +syntax, which was added as part of the POSIX standard. + +== Synopsis + +[source,sml] +------------ +structure AwkSyntax : REGEXP_PARSER +------------ + +== Description + +The meta characters are: + "\" "^" "$" "." "[" "]" "|" "(" ")" "*" "+" "?" + + Atomic REs: + c matches the character c (for non-metacharacters c) + "^" matches the empty string at the beginning of a line + "$" matches the empty string at the end of a line + "." matches any single character (except \000 and \n) + + Escape sequences: + "\b" matches backspace + "\f" matches formfeed + "\n" matches newline (linefeed) + "\r" matches carriage return + "\t" matches tab + "\"ddd matches the character with octal code ddd. + "\"c matches the character c (e.g., \\ for \, \" for ") + "\x"dd matches the character with hex code dd. + + Character classes: + [...] matches any character in "..." + [^...] a complemented character list, which matches any character not + in the list "..." + + Compound regular expressions, where A and B are REs: + A|B matches A or B + AB matches A followed by B + A? matches zero or one As + A* matches zero or more As + A+ matches one or more As + A{n} matches n copies of A + A{n,} matches n copies of A + A{n,m} matches n copies of A + (A) matches A + + +== See Also + +xref:regexp-lib.adoc[__The RegExp Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-MatchTree.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-MatchTree.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-MatchTree.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-MatchTree.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,87 @@ += The `MatchTree` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `MatchTree` structure provides a tree-structured representation +of the result of a successful regular expression match. The tree structure +corresponds to the nesting of xref:str-RegExpSyntax.adoc#con:Group[groups] +in the regular expression. + +== Synopsis + +[source,sml] +------------ +signature MATCH_TREE +structure MatchTree : MATCH_TREE +------------ + +== Interface + +[source,sml] +------------ +datatype 'a match_tree = Match of 'a * 'a match_tree list + +val root : 'a match_tree -> 'a +val nth : ('a match_tree * int) -> 'a (* raises Subscript *) +val map : ('a -> 'b) -> 'a match_tree -> 'b match_tree +val app : ('a -> unit) -> 'a match_tree -> unit +val foldl : ('a * 'b -> 'b) -> 'b -> 'a match_tree -> 'b +val foldr : ('a * 'b -> 'b) -> 'b -> 'a match_tree -> 'b +val find : ('a -> bool) -> 'a match_tree -> 'a option +val num : 'a match_tree -> int +------------ + +== Description + +[[type:match_tree]] +`[.kw]#datatype# 'a match_tree = Match of 'a * 'a match_tree list`:: + The representation of the results of a nested grouping of regular expressions. + The type variable ``'a`` is typically instantiated to information about the + particular range of the source that the node covers. For example, + it might be the pair of the start position and length of the match. + +`[.kw]#val# root : 'a match_tree \-> 'a`:: + `root mt` returns the information about the root (outermost) match in the tree. + +`[.kw]#val# nth : ('a match_tree * int) \-> 'a (* raises Subscript *)`:: + `nth (mt, i)` returns the information about the ``i``'th match in the tree, + where matches are labeled in _pre-order_ starting with `0` for the root. + This function raises the + {sml-basis-url}/general.html#SIG:GENERAL.Subscript:EXN[`Subscript`] exception + if `i < 0` or there are fewer than `i-1` nodes in the tree. + +`[.kw]#val# map : ('a \-> 'b) \-> 'a match_tree \-> 'b match_tree`:: + `map f mt` returns the result of mapping the function `f` over `mt`. + For example, this function can be used to convert a match-tree of + position information to a tree of strings. The function is applied + to the tree in pre-order. + +`[.kw]#val# app : ('a \-> unit) \-> 'a match_tree \-> unit`:: + `app f mt` applies the given function to the nodes in the tree + in pre-order. + +`[.kw]#val# foldl : ('a * 'b \-> 'b) \-> 'b \-> 'a match_tree \-> 'b`:: + `foldl f init mt` folds the function `f` over `mt` in left-to-right pre-order + using `init` as the initial value. + +`[.kw]#val# foldr : ('a * 'b \-> 'b) \-> 'b \-> 'a match_tree \-> 'b`:: + `foldr f init mt` folds the function `f` over `mt` in right-to-left post-order + using `init` as the initial value. + +`[.kw]#val# find : ('a \-> bool) \-> 'a match_tree \-> 'a option`:: + `find pred mt` returns `SOME info` where `info` is the first + information that satisfies `pred` in a pre-order traversal of + the tree. It returns `NONE` if there is no match information + that satisfies `pred`. + +`[.kw]#val# num : 'a match_tree \-> int`:: + `num mt` returns the number of *sub-matches* in the tree; _i.e._, the number + of nodes not counting the root. + +== See Also + +xref:fun-RegExpFn.adoc[`RegExpFn`], +xref:regexp-lib.adoc[__The RegExp Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-RegExpSyntax.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-RegExpSyntax.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-RegExpSyntax.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/str-RegExpSyntax.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,196 @@ += The `RegExpSyntax` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `RegExpSyntax` structure provides an abstract-syntax-tree +representation of regular expressions. Its main purpose is to +provide communication between different front-ends (implementing +different RE specification languages), and different back-ends +(implementing different compilation/searching algorithms). +It is also possible, however, to use it as a way to directly +specify a regular expression for a back-end engine. + +== Synopsis + +[source,sml] +------------ +signature REGEXP_SYNTAX +structure RegExpSyntax : REGEXP_SYNTAX +------------ + +== Interface + +[source,sml] +------------ +exception CannotCompile + +structure CharSet : ORD_SET where type Key.ord_key = char + +datatype syntax + = Group of syntax + | Alt of syntax list + | Concat of syntax list + | Interval of (syntax * int * int option) + | MatchSet of CharSet.set + | NonmatchSet of CharSet.set + | Char of char + | Begin + | End + +val optional : syntax -> syntax +val closure : syntax -> syntax +val posClosure : syntax -> syntax + +val fromRange : char * char -> CharSet.set +val addRange : CharSet.set * char * char -> CharSet.set + +val allChars : CharSet.set + +val alnum : CharSet.set +val alpha : CharSet.set +val ascii : CharSet.set +val blank : CharSet.set +val cntl : CharSet.set +val digit : CharSet.set +val graph : CharSet.set +val lower : CharSet.set +val print : CharSet.set +val punct : CharSet.set +val space : CharSet.set +val upper : CharSet.set +val word : CharSet.set +val xdigit : CharSet.se +------------ + +== Description + +[[exn:CannotCompile]] +`[.kw]#exception# CannotCompile`:: + This exception is meant to be raised by back-ends when they encounter + a feature that they cannot handle. + +`[.kw]#structure# CharSet : ORD_SET where type Key.ord_key = char`:: + This substructure implements sets of 8-bit characters. Currently it + is implemented using sorted lists (_i.e._, using the + xref:../Util/fun-ListSetFn.adoc[`ListSetFn`] functor), but that may + be changed in the future. + +`[.kw]#datatype# syntax`:: + This datatype defines the abstract syntax of regular expressions that + is supported by the library. The constructors are defined as follows: ++ +-- +[[con:Group]] +* `Group re`:: + defines a match group (_i.e._, that produce a corresponding + match-tree node for the input matched by `re`. + +* `Alt[re1, re2, ..., ren]`:: + matches any of `re1`, `re2`, ..., `ren`. If the list is empty, then it + matches nothing. + +* `Concat[re1, re2, ..., ren]`:: + matches the concatenation of `re1`, `re2`, ..., `ren`. If the list + is empty, then it matches the empty string. + +* `Interval(re, n, NONE)`:: + matches `re` repeated at least `n` times. + +* `Interval(re, n, SOME m)`:: + matches `re` repeated from `n` to `m` times. + +* `MatchSet cs`:: + matches a single character that is in the set `cs`. + +* `NonmatchSet cs`:: + matches a single character that is *not* in the set `cs`. + +* `Char c`:: + matches the single character `c`. + +* `Begin`:: + matches beginning of the input stream. + +* `End`:: + matches end of the input stream. +-- + +`[.kw]#val# optional : syntax -> syntax`:: + `optional re` is equivalent to `Interval(re, 0, SOME 1)`. + +`[.kw]#val# closure : syntax -> syntax`:: + `closure re` is equivalent to `Interval(re, 0, NONE)`. + +`[.kw]#val# posClosure : syntax -> syntax`:: + `posClosure re` is equivalent to `Interval(re, 1, NONE)`. + +`[.kw]#val# fromRange : char * char \-> CharSet.set`:: + `fromRange (c1, c2)` returns the set containing the characters + in the range from `c1` to `c2` (inclusive). This expression + raises the {sml-basis-url}/general.html#SIG:GENERAL.Size:EXN[`Size`] + exception if `c2 < c1`. + +`[.kw]#val# addRange : CharSet.set * char * char \-> CharSet.set`:: + `addRange (cs, c1, c2)` adds the set of characters in the range + from `c1` to `c2` (inclusive) to `cs`. This expression raises + the {sml-basis-url}/general.html#SIG:GENERAL.Size:EXN[`Size`] + exception if `c2 < c1`. + +`[.kw]#val# allChars : CharSet.set`:: + is the set of all 8-bit characters. + +=== POSIX Character Classes + +The `RegExpSyntax` structure pre-defines the following character sets, +which are part of the POSIX regular-expression standard (plus a couple +of extras): + +`[.kw]#val# alnum : CharSet.set`:: + is the set of letters and digits. + +`[.kw]#val# alpha : CharSet.set`:: + is the set of letters. + +`[.kw]#val# ascii : CharSet.set`:: + is the set of characters `c` such that `0 \<= ord c \<= 127`. + +`[.kw]#val# blank : CharSet.set`:: + is the set of ``#"\t"`` and space. + +`[.kw]#val# cntl : CharSet.set`:: + is the set of non-printable characters. + +`[.kw]#val# digit : CharSet.set`:: + is the set of decimal digits. + +`[.kw]#val# graph : CharSet.set`:: + is the set of visible characters (does not include space). + +`[.kw]#val# lower : CharSet.set`:: + is the set of lower-case letters. + +`[.kw]#val# print : CharSet.set`:: + is the set of printable characters (includes space). + +`[.kw]#val# punct : CharSet.set`:: + is the set of visible characters other than letters and digits. + +`[.kw]#val# space : CharSet.set`:: + is the set of ``\#"\t"``, ``#"\r"``, ``\#"\n"``, ``#"\v"``, ``#"\f"``, and space. + +`[.kw]#val# upper : CharSet.set`:: + is the set of upper-case letters. + +`[.kw]#val# word : CharSet.set`:: + is the set of letters, digit, and ``#"_"``. + +`[.kw]#val# xdigit : CharSet.set`:: + is the set of hexadecimal digits. + +== See Also + +xref:sig-REGEXP_ENGINE.adoc[`REGEXP_ENGINE`], +xref:regexp-lib.adoc[__The RegExp Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/tutorial.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/tutorial.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/tutorial.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/RegExp/tutorial.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,110 @@ += Using the RegExp Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Introduction + +The *RegExp Library* is designed for flexibility; it allows mixing and +matching of different front-end syntax with back-end engines, as well +as supporting arbitrary input sources. +This flexibility, however, comes at the cost of making some of the +simple applications a bit less obvious. This tutorial shows how the +*RegExp Library* can be used in a variety of common applications. + +== Assembling an Regular Expression Matcher + +Before we can do anything else, we must assemble a regular-expression +matcher. For the purposes of this tutorial, we will use a combination +of the `AwkSyntax` front-end and the `BackTrackEngine` back-end. + +[source,sml] +------------ +structure RE = RegExpFn( + structure P = AwkSyntax + structure E = BackTrackEngine) +------------ + +== Match trees + +[source,sml] +------------ +structure MT = MatchTree +------------ + + +== Example: scanning tokens + +The `match` function in the `REGEXP` signature allows one to distinguish +between a set of possible regular expression matches. One application of +this mechanism is a simple scanner. Let us define a datatype for tokens, +which can be white space, numbers, or identifiers. + +[source,sml] +------------ +datatype tok + = WS | NUM of IntInf.int | ID of string +------------ + +We can then define the scanner as follows: + +[source,sml] +------------ +fun scanner getc gets = let + fun getMatch cons (MT.Match({pos, len}, _)) = cons (gets (pos, len)) + in + RE.match [ + ("[ \t\n]+", getMatch (fn _ => WS)), + ("[0-9]+", getMatch (fn s => NUM(valOf(IntInf.fromString s)))), + ("[a-zA-Z][a-zA-Z0-9]*", getMatch ID) + ] getc + end +------------ + +Here the `getc` parameter is the standard character reader; we have also included +the `gets` parameter, which is a function of type + +[source,sml] +------------ +'strm * int -> string +------------ + +for getting a string from a stream. For many input sources, the `gets` function +has an efficient and direct implementation, but it can also be implemented in +terms of the `getc` function as follows: + +[source,sml] +------------ +fun gets getc (strm, n) = let + fun getChrs (0, _, chrs) = String.implodeRev chrs + | getChrs (n, strm, chrs) = (case getc strm + of NONE => raise Fail "empty stream" + | SOME(c, strm) => getChrs (n-1, strm, c::chrs) + (* end case *)) + in + getChrs (n, strm, []) + end; +------------ + +Because this function is only called *after* the `scanner` function has matched +a sequence of `n` characters from `strm`, the `"empty stream"` case will not +occur for well behaving input streams. + +Here is an example of using the scanner to tokenize strings, where we use the +*Basis Library* substring type to implement the stream type: + +[source,sml] +------------ +fun tokens s = let + fun gets (ss, n) = Substring.string(Substring.slice (ss, 0, SOME n)) + val scan = scanner Substring.getc gets + fun lp (ss, toks) = (case scan ss + of SOME(tok, ss') => lp (ss', tok::toks) + | NONE => List.rev toks + (* end case *)) + in + lp (Substring.full s, []) + end; +------------ diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/root.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/root.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/root.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/root.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,63 @@ +The Standard ML of New Jersey Library: Reference Manual +======================================================= +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} +:toc: + +== Introduction + +The **Standard ML of New Jersey Library** (**SML/NJ Library**) +is a collection of over 200 modules grouped into 14 libraries. +It was designed to build on the {sml-basis-url}/index.html[**Standard ML Basis Library**] +by providing higher-level and application-specific services +that were out of scope for the Basis Library. +The **SML/NJ Library** is distributed as part of both the +https://smlnj.org[**SML/NJ**] and +https://mlton.org[**MLton SML Compiler**] systems. + + +// include library root documents + +include::Controls/controls-lib.adoc[] + +//// +\include::HTML/html-lib.adoc[] +//// + +//// +\include::HTML4/html4-lib.adoc[] +//// + +include::HashCons/hash-cons-lib.adoc[] + +include::INet/inet-lib.adoc[] + +include::JSON/json-lib.adoc[] + +//// +\include::PP/pp-lib.adoc[] +//// + +//// +\include::Reactive/reactive-lib.adoc[] +//// + +//// +\include::RegExp/regexp-lib.adoc[] +//// + +include::SExp/sexp-lib.adoc[] + +include::UUID/uuid-lib.adoc[] + +include::Unix/unix-lib.adoc[] + +include::Util/smlnj-lib.adoc[] + +//// +\include::XML/xml-lib.adoc[] +//// + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/gen-css.sh mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/gen-css.sh --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/gen-css.sh 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/gen-css.sh 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,83 @@ +#!/bin/sh +# +# COPYRIGHT (c) 2013 The SML3d Project (http://sml3d.cs.uchicago.edu) +# All rights reserved. +# +# Script to generate CSS files for SML3d webpages by substituting specific colors +# for symbolic color names +# +# usage: +# gen-css.sh src > dst + +# +# general document colors +# +BACKGROUND="#fff" +LIGHT_BACKGROUND="#f8f8f7" +MEDIUM_BACKGROUND="#ececec" +#MEDIUM_BACKGROUND="#f8f8f7" +#MEDIUM_BACKGROUND="#99ccff" +DARK_BACKGROUND="#cae5ff" # previously #369 +BANNER_BACKGROUND="$MEDIUM_BACKGROUND" +TOC_HIGHLIGHT="#99ccff" # hover color for TOC hrefs +HIGHLIGHT_BACKGROUND="yellow" # background for highlighted text +TITLE_COLOR="#000099" # color for title in banner +MAJOR_HEADER_COLOR="#cc6600" # orange/tawny for major headers +MINOR_HEADER_COLOR="#003366" # dark blue for minor headers +DEFAULT_COLOR="#000044" # default color for text +HR_COLOR="#527bbd" # color for horizontal rules +LINK_COLOR="#000099" # color for hyperlinks +VISITED_COLOR="#6666ff" # color for visited links +EM_COLOR="#000044" # color for emphasis elements +STRONG_COLOR="#000044" # color for strong elements +BULLET_COLOR="green" # color for UL bullets +BLOCK_BORDER="#527bbd" # border for inset blocks +BLOCK_BACKGROUND="#f8f8f8" # background for inset blocks +BLOCK_COLOR="#839496" # foreground color for inset blocks + +# +# code highlighting colors (pallete from http://ethanschoonover.com/solarized) +# +CODE_BORDER="$BLOCK_BORDER" # border for listing block +CODE_BACKGROUND="$BLOCK_BACKGROUND" # background color for listings +CODE_COLOR="#6c71c4" # default foreground color for code +KW_COLOR="#268bd2" # keyword color +COM_COLOR="#dc322f" # comment color +LIT_COLOR="#b58900" # color for literals +BIND_COLOR="#6c71c4" # color for identifiers at binding sites +PUNCT_COLOR="#6c71c4" # color for punctuation +# NOTE: the following two colors are from the default pygments color scheme +TV_COLOR="#aa22ff" # color for type variables +TY_COLOR="#b00040" # color for type names + +sed -e s/@BACKGROUND@/$BACKGROUND/g \ + -e s/@LIGHT_BACKGROUND@/$MEDIUM_BACKGROUND/g \ + -e s/@MEDIUM_BACKGROUND@/$MEDIUM_BACKGROUND/g \ + -e s/@DARK_BACKGROUND@/$DARK_BACKGROUND/g \ + -e s/@BANNER_BACKGROUND@/$BANNER_BACKGROUND/g \ + -e s/@TOC_HIGHLIGHT@/$TOC_HIGHLIGHT/g \ + -e s/@HIGHLIGHT_BACKGROUND@/$HIGHLIGHT_BACKGROUND/g \ + -e s/@TITLE_COLOR@/$TITLE_COLOR/g \ + -e s/@MAJOR_HEADER_COLOR@/$MAJOR_HEADER_COLOR/g \ + -e s/@MINOR_HEADER_COLOR@/$MINOR_HEADER_COLOR/g \ + -e s/@DEFAULT_COLOR@/$DEFAULT_COLOR/g \ + -e s/@HR_COLOR@/$HR_COLOR/g \ + -e s/@LINK_COLOR@/$LINK_COLOR/g \ + -e s/@VISITED_COLOR@/$VISITED_COLOR/g \ + -e s/@EM_COLOR@/$EM_COLOR/g \ + -e s/@STRONG_COLOR@/$STRONG_COLOR/g \ + -e s/@BULLET_COLOR@/$BULLET_COLOR/g \ + -e s/@BLOCK_BORDER@/$BLOCK_BORDER/g \ + -e s/@BLOCK_BACKGROUND@/$BLOCK_BACKGROUND/g \ + -e s/@BLOCK_COLOR@/$BLOCK_COLOR/g \ + -e s/@CODE_BORDER@/$CODE_BORDER/g \ + -e s/@CODE_BACKGROUND@/$CODE_BACKGROUND/g \ + -e s/@CODE_COLOR@/$CODE_COLOR/g \ + -e s/@KW_COLOR@/$KW_COLOR/g \ + -e s/@COM_COLOR@/$COM_COLOR/g \ + -e s/@LIT_COLOR@/$LIT_COLOR/g \ + -e s/@BIND_COLOR@/$BIND_COLOR/g \ + -e s/@PUNCT_COLOR@/$PUNCT_COLOR/g \ + -e s/@TV_COLOR@/$TV_COLOR/g \ + -e s/@TY_COLOR@/$TY_COLOR/g \ + $1 diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-fun.sh mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-fun.sh --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-fun.sh 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-fun.sh 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,44 @@ +#!/bin/sh +# +# Script for adding a functor description file to an existing +# library documentation directory. +# +# usage: scripts/prepare-fun.sh +# + +function usage { + echo "usage: scripts/prepare-str.sh " + exit 1 +} + +if [ ! -x scripts/prepare-fun.sh ] ; then + usage +fi + +if [ $# -ne 2 ] ; then + usage +fi + +d=$1 ; shift +name=$1 ; shift + +if [ ! -d "$d" ] ; then + echo "$0: missing library directory $d" + exit 1 +fi + +lib=$(basename $d/*-lib.adoc .adoc) + +template=Templates/fun.adoc +stem="fun-$name" +mod_adoc="$d/$stem.adoc" + +if [ -f $mod_adoc ] ; then + echo "$0: file '$mod_adoc' already exists" + exit 1 +fi + +## create the placeholder for the module +sed -e "s/@DIR@/$d/" -e "s/@LIBRARY@/$lib/" -e "s/@NAME@/$name/" $template > $mod_adoc + +exit 0 diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-lib.sh mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-lib.sh --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-lib.sh 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-lib.sh 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,83 @@ +#!/bin/sh +# +# usage scripts/prepare-lib.sh +# + +function usage { + echo "usage: scripts/prepare-lib.sh " + exit 1 +} + +if [ ! -x scripts/prepare-lib.sh ] ; then + usage +fi + +if [ $# -ne 1 ] ; then + usage +fi + +d=$1 ; shift + +if [ ! -f $d/MODULES ] ; then + echo "missing $d/MODULES" + exit 1 +fi + +lib=$(basename ../../$d/*-lib.cm .cm) +lib_adoc=$d/$lib.adoc +## copy the header +sed -e "s/@DIR@/$d/" -e "s/@LIBRARY@/$lib/" Templates/lib-head.adoc > $lib_adoc +## add module entries +while read -r line ; do + name=$(echo $line | sed -e 's/structure //' -e 's/signature //' -e 's/functor //') + case $line in + signature*) + template=Templates/sig.adoc + kw="[.kw]#signature#" + stem="sig-$name" + ;; + structure*) + template=Templates/str.adoc + kw="[.kw]#structure#" + stem="str-$name" + ;; + functor*) + template=Templates/fun.adoc + kw="[.kw]#functor#" + stem="fun-$name" + ;; + esac + mod_adoc="$d/$stem.adoc" + link="xref:$stem.adoc" + ## add the module to the library file + echo $link"[\`"$kw $name"\`]::" >> $lib_adoc + echo " something" >> $lib_adoc + echo "" >> $lib_adoc + ## create the placeholder for the module + sed -e "s/@DIR@/$d/" -e "s/@LIBRARY@/$lib/" -e "s/@NAME@/$name/" $template > $mod_adoc +done < $d/MODULES +## copy the middle part +sed -e "s/@DIR@/$d/" -e "s/@LIBRARY@/$lib/" Templates/lib-mid.adoc >> $lib_adoc +## add the module entries for the PDF version +while read -r line ; do + name=$(echo $line | sed -e 's/structure //' -e 's/signature //' -e 's/functor //') + case $line in + signature*) + echo "include::sig-$name.adoc[]" >> $lib_adoc + echo "" >> $lib_adoc + ;; + structure*) + echo "include::str-$name.adoc[]" >> $lib_adoc + echo "" >> $lib_adoc + ;; + functor*) + echo "include::fun-$name.adoc[]" >> $lib_adoc + echo "" >> $lib_adoc + ;; + esac +done < $d/MODULES +## copy the footer +sed -e "s/@DIR@/$d/" -e "s/@LIBRARY@/$lib/" Templates/lib-foot.adoc >> $lib_adoc + + +exit 0 diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-sig.sh mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-sig.sh --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-sig.sh 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-sig.sh 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,46 @@ +#!/bin/sh +# +# Script for adding a signature description file to an existing +# library documentation directory. +# +# usage: scripts/prepare-sig.sh +# + +function usage { + echo "usage: scripts/prepare-sig.sh " + exit 1 +} + +if [ ! -x scripts/prepare-sig.sh ] ; then + usage +fi + +if [ $# -ne 2 ] ; then + usage +fi + +d=$1 ; shift +name=$1 ; shift + +if [ ! -d "$d" ] ; then + echo "$0: missing library directory $d" + exit 1 +fi + +lib=$(basename $d/*-lib.adoc .adoc) + +template=Templates/sig.adoc +stem="sig-$name" +mod_adoc="$d/$stem.adoc" + +if [ -f $mod_adoc ] ; then + echo "$0: file '$mod_adoc' already exists" + exit 1 +fi + +echo "creating $mod_adoc" + +## create the placeholder for the module +sed -e "s/@DIR@/$d/" -e "s/@LIBRARY@/$lib/" -e "s/@NAME@/$name/" $template > $mod_adoc + +exit 0 diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-str.sh mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-str.sh --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-str.sh 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/scripts/prepare-str.sh 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,44 @@ +#!/bin/sh +# +# Script for adding a structure description file to an existing +# library documentation directory. +# +# usage: scripts/prepare-str.sh +# + +function usage { + echo "usage: scripts/prepare-str.sh " + exit 1 +} + +if [ ! -x scripts/prepare-str.sh ] ; then + usage +fi + +if [ $# -ne 2 ] ; then + usage +fi + +d=$1 ; shift +name=$1 ; shift + +if [ ! -d "$d" ] ; then + echo "$0: missing library directory $d" + exit 1 +fi + +lib=$(basename $d/*-lib.adoc .adoc) + +template=Templates/str.adoc +stem="str-$name" +mod_adoc="$d/$stem.adoc" + +if [ -f $mod_adoc ] ; then + echo "$0: file '$mod_adoc' already exists" + exit 1 +fi + +## create the placeholder for the module +sed -e "s/@DIR@/$d/" -e "s/@LIBRARY@/$lib/" -e "s/@NAME@/$name/" $template > $mod_adoc + +exit 0 diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,4 @@ +structure SExp +structure SExpParser +structure SExpPP +structure SExpPrinter diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/sexp-lib.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/sexp-lib.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/sexp-lib.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/sexp-lib.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,103 @@ += The SExp Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Overview + +The *SExp Library* supports the reading and writing of structured data using +the S-expression syntax. It is a work in progress, and does not fully conform with +any formal S-exp specification. + +- End-of-line comments begin with a semicolon (`;`) + +- An S-Expression is either an atomic token (boolean, number, symbol, or + string), a quoted expression, or a list of S-Expressions enclosed in brackets. + +- Quoted expressions are formed by the single-quote character (``'``) followed + by an expression. + +- Lists are be delimited by matched pairs of `()` `[]` or `{}`, nested freely. + +- List items are separated with whitespace (space, tab, newlines, or carriage + returns). + +- Symbols (or _identifiers_) begin with an initial character followed by + zero or more _subsequent_ characters, where an initial character is + either a letter or one of the characters `-+.@!$%&*/:<=>?^_~` and + a subsequent character is either an initial character, a decimal digit, + or the character `#`. + +- Booleans are represented by the literals `#f` (false) and `#t` (true). + +- Numbers are either signed integers or floating-point numbers; the + sign (if present) is one of "'+'," "`-`," or "`~`". + +- Integers may be specified in decimal without any prefix, or in hexadecimal + with the prefix "0x". In hex, the value is assumed to be unsigned, so -255 + should be written "-0xff" rather than "0x-ff". + +- The format of a floating point number is described by the following + regular expression: ++ +[latexmath] +++++ + \mathit{sign}^{?}\,\mathit{digit}^{+}\,\mathtt{.}\;\mathit{digit}^{+}\, + ([\mathtt{eE}]\,\mathit{sign}^{?}\,\mathit{digit}^{+})^{?} +++++ ++ +Notably, "`1.`" and "`.1`" are invalid and "`1`" is parsed as an +integer -- floats must have a dot with digits +on both sides. + +- Strings are enclosed in double quotes (``"``). ++ +The difference between symbols and strings is that symbols are represented as +Atom.atom types, so equality comparisons are more efficient. + +The original version of the library was written by Damon Wang +at the University of Chicago. It has since been modified and +maintained by John Reppy. + +== Contents + +xref:str-SExp.adoc[`[.kw]#structure# SExp`]:: + Defines the tree representation of S-expression data. + +xref:str-SExpParser.adoc[`[.kw]#structure# SExpParser`]:: + Implements an S-Expression parser. + +xref:str-SExpPP.adoc[`[.kw]#structure# SExpPP`]:: + Implements an S-Expression pretty-printer. + +xref:str-SExpPrinter.adoc[`[.kw]#structure# SExpPrinter`]:: + Implements an S-Expression printer that produces _condensed_ + output without indentation or line breaks. + +== Usage + +For https://smlnj.org[*SML/NJ*], include `$/sexp-lib.cm` in your +*CM* file. + +For use in https://www.mlton.org/[*MLton*], include +`$(SML_LIB)/smlnj-lib/SExp/sexp-lib.mlb` in your *MLB* file. + +ifdef::backend-pdf[] + +// Push titles down one level. +:leveloffset: 1 + +include::str-SExp.adoc[] + +include::str-SExpParser.adoc[] + +include::str-SExpPP.adoc[] + +include::str-SExpPrinter.adoc[] + +// Return to normal title levels. +:leveloffset: 0 + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExp.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExp.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExp.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExp.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,76 @@ += The `SExp` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `SExp` structure defines the tree representation of S-expression data. + +== Synopsis + +[source,sml] +------------ +structure SExp +------------ + +== Interface + +[source,sml] +------------ +datatype value + = SYMBOL of Atom.atom + | BOOL of bool + | INT of IntInf.int + | FLOAT of real + | STRING of string + | QUOTE of value + | LIST of value list + +val same : value * value -> bool +val compare : value * value -> order +------------ + +== Description + +`[.kw]#datatype# value = ...`:: + This datatype represents S-expression trees. The constuctors are + defined as follows: ++ +-- + `SYMBOL [.kw]#of# Atom.atom`:: + represents an identifier. We use the xref:../Util/str-Atom.adoc#type:atom[`atom`] + type to represent these for fast equality testing. + + `BOOL [.kw]#of# bool`:: + represents a boolean literal. + + `INT [.kw]#of# IntInf.int`:: + represents an integer number. + + `FLOAT [.kw]#of# real`:: + represents a floating-point number. + + `STRING [.kw]#of# string`:: + represents a string value. + + `QUOTE [.kw]#of# value list`:: + represents a quoted value. + + `LIST [.kw]#of# value list`:: + represents a list of values. +-- + +`[.kw]#val# same : value * value \-> bool`:: + `same (se1, se2)` compares `se1` and `se2` for equality and returns + true if, and only if, they are equal. + +`[.kw]#val# compares : value * value \-> order`:: + `same (se1, se2)` compares `se1` and `se2` for their order. + +== See Also + +xref:str-SExpParser.adoc[`SExpParser`], +xref:str-SExpPP.adoc[`SExpPP`], +xref:str-SExpPrinter.adoc[`SExpPrinter`], +xref:sexp-lib.adoc[__The SExp Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpParser.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpParser.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpParser.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpParser.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,41 @@ += The `SExpParser` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `SExpParser` structure implements a parser for S-Expressions. + +== Synopsis + +[source,sml] +------------ +structure SExpParser +------------ + +== Interface + +[source,sml] +------------ +val parse : TextIO.instream -> SExp.value list + +val parseFile : string -> SExp.value list +------------ + +== Description + +`[.kw]#val# parse : TextIO.instream \-> SExp.value list`:: + `parse inS` parses a sequence of S-Expressions from the input + stream `inS`. The {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception is raised if a syntax error is encountered. + +`[.kw]#val# parseFile : string \-> SExp.value list`:: + `parse f` parses a sequence of S-Expressions from the file `f`. + The {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] + exception is raised if a syntax error is encountered. + +== See Also + +xref:str-SExp.adoc[`SExp`], +xref:sexp-lib.adoc[__The SExp Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpPP.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpPP.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpPP.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpPP.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,34 @@ += The `SExpPP` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `SExpPP` structure implements a pretty printer for S-Expressions. + +== Synopsis + +[source,sml] +------------ +structure SExpPP +------------ + +== Interface + +[source,sml] +------------ +val output : TextIOPP.stream * SExp.value -> unit +------------ + +== Description + +`[.kw]#val# output : TextIOPP.stream * SExp.value \-> unit`:: + `output (ppS, v)` pretty prints the value using the specified + pretty-printing stream. + +== See Also + +xref:str-SExp.adoc[`SExp`], +xref:str-SExpParser.adoc[`SExpParser`], +xref:sexp-lib.adoc[__The SExp Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpPrinter.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpPrinter.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpPrinter.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/SExp/str-SExpPrinter.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,36 @@ += The `SExpPrinter` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `SExpPrinter` structure implements a printer for S-Expressions. +This printer does not introduce any line breaks. For output that +is more readable, use the xref:str-SExpPP.adoc[`SExpPP`] module. + +== Synopsis + +[source,sml] +------------ +structure SExpPrinter +------------ + +== Interface + +[source,sml] +------------ +val print : TextIO.outstream * SExp.value -> unit +------------ + +== Description + +`[.kw]#val# print : TextIO.outstream * SExp.value \-> unit`:: + `print (outS, v)` prints the S-Expression value `v` to the + output stream `outS`. + +== See Also + +xref:str-SExp.adoc[`SExp`], +xref:str-SExpPP.adoc[`SExpPP`], +xref:sexp-lib.adoc[__The SExp Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-default.css mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-default.css --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-default.css 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-default.css 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,69 @@ +pre.pygments .hll { background-color: #ffffcc } +pre.pygments { background: #f8f8f8; } +pre.pygments .tok-c { color: #408080; font-style: italic } /* Comment */ +pre.pygments .tok-err { border: 1px solid #FF0000 } /* Error */ +pre.pygments .tok-k { color: #008000; font-weight: bold } /* Keyword */ +pre.pygments .tok-o { color: #666666 } /* Operator */ +pre.pygments .tok-ch { color: #408080; font-style: italic } /* Comment.Hashbang */ +pre.pygments .tok-cm { color: #408080; font-style: italic } /* Comment.Multiline */ +pre.pygments .tok-cp { color: #BC7A00 } /* Comment.Preproc */ +pre.pygments .tok-cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ +pre.pygments .tok-c1 { color: #408080; font-style: italic } /* Comment.Single */ +pre.pygments .tok-cs { color: #408080; font-style: italic } /* Comment.Special */ +pre.pygments .tok-gd { color: #A00000 } /* Generic.Deleted */ +pre.pygments .tok-ge { font-style: italic } /* Generic.Emph */ +pre.pygments .tok-gr { color: #FF0000 } /* Generic.Error */ +pre.pygments .tok-gh { color: #000080; font-weight: bold } /* Generic.Heading */ +pre.pygments .tok-gi { color: #00A000 } /* Generic.Inserted */ +pre.pygments .tok-go { color: #888888 } /* Generic.Output */ +pre.pygments .tok-gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +pre.pygments .tok-gs { font-weight: bold } /* Generic.Strong */ +pre.pygments .tok-gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +pre.pygments .tok-gt { color: #0044DD } /* Generic.Traceback */ +pre.pygments .tok-kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +pre.pygments .tok-kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +pre.pygments .tok-kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +pre.pygments .tok-kp { color: #008000 } /* Keyword.Pseudo */ +pre.pygments .tok-kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +pre.pygments .tok-kt { color: #B00040 } /* Keyword.Type */ +pre.pygments .tok-m { color: #666666 } /* Literal.Number */ +pre.pygments .tok-s { color: #BA2121 } /* Literal.String */ +pre.pygments .tok-na { color: #7D9029 } /* Name.Attribute */ +pre.pygments .tok-nb { color: #008000 } /* Name.Builtin */ +pre.pygments .tok-nc { color: #0000FF; font-weight: bold } /* Name.Class */ +pre.pygments .tok-no { color: #880000 } /* Name.Constant */ +pre.pygments .tok-nd { color: #AA22FF } /* Name.Decorator */ +pre.pygments .tok-ni { color: #999999; font-weight: bold } /* Name.Entity */ +pre.pygments .tok-ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +pre.pygments .tok-nf { color: #0000FF } /* Name.Function */ +pre.pygments .tok-nl { color: #A0A000 } /* Name.Label */ +pre.pygments .tok-nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +pre.pygments .tok-nt { color: #008000; font-weight: bold } /* Name.Tag */ +pre.pygments .tok-nv { color: #19177C } /* Name.Variable */ +pre.pygments .tok-ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +pre.pygments .tok-w { color: #bbbbbb } /* Text.Whitespace */ +pre.pygments .tok-mb { color: #666666 } /* Literal.Number.Bin */ +pre.pygments .tok-mf { color: #666666 } /* Literal.Number.Float */ +pre.pygments .tok-mh { color: #666666 } /* Literal.Number.Hex */ +pre.pygments .tok-mi { color: #666666 } /* Literal.Number.Integer */ +pre.pygments .tok-mo { color: #666666 } /* Literal.Number.Oct */ +pre.pygments .tok-sa { color: #BA2121 } /* Literal.String.Affix */ +pre.pygments .tok-sb { color: #BA2121 } /* Literal.String.Backtick */ +pre.pygments .tok-sc { color: #BA2121 } /* Literal.String.Char */ +pre.pygments .tok-dl { color: #BA2121 } /* Literal.String.Delimiter */ +pre.pygments .tok-sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +pre.pygments .tok-s2 { color: #BA2121 } /* Literal.String.Double */ +pre.pygments .tok-se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +pre.pygments .tok-sh { color: #BA2121 } /* Literal.String.Heredoc */ +pre.pygments .tok-si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +pre.pygments .tok-sx { color: #008000 } /* Literal.String.Other */ +pre.pygments .tok-sr { color: #BB6688 } /* Literal.String.Regex */ +pre.pygments .tok-s1 { color: #BA2121 } /* Literal.String.Single */ +pre.pygments .tok-ss { color: #19177C } /* Literal.String.Symbol */ +pre.pygments .tok-bp { color: #008000 } /* Name.Builtin.Pseudo */ +pre.pygments .tok-fm { color: #0000FF } /* Name.Function.Magic */ +pre.pygments .tok-vc { color: #19177C } /* Name.Variable.Class */ +pre.pygments .tok-vg { color: #19177C } /* Name.Variable.Global */ +pre.pygments .tok-vi { color: #19177C } /* Name.Variable.Instance */ +pre.pygments .tok-vm { color: #19177C } /* Name.Variable.Magic */ +pre.pygments .tok-il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-lovelace.css mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-lovelace.css --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-lovelace.css 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-lovelace.css 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,70 @@ +pre.pygments .hll { background-color: #ffffcc } +pre.pygments { background: #ffffff; } +pre.pygments .tok-c { color: #888888; font-style: italic } /* Comment */ +pre.pygments .tok-err { background-color: #a848a8 } /* Error */ +pre.pygments .tok-k { color: #2838b0 } /* Keyword */ +pre.pygments .tok-o { color: #666666 } /* Operator */ +pre.pygments .tok-p { color: #888888 } /* Punctuation */ +pre.pygments .tok-ch { color: #287088; font-style: italic } /* Comment.Hashbang */ +pre.pygments .tok-cm { color: #888888; font-style: italic } /* Comment.Multiline */ +pre.pygments .tok-cp { color: #289870 } /* Comment.Preproc */ +pre.pygments .tok-cpf { color: #888888; font-style: italic } /* Comment.PreprocFile */ +pre.pygments .tok-c1 { color: #888888; font-style: italic } /* Comment.Single */ +pre.pygments .tok-cs { color: #888888; font-style: italic } /* Comment.Special */ +pre.pygments .tok-gd { color: #c02828 } /* Generic.Deleted */ +pre.pygments .tok-ge { font-style: italic } /* Generic.Emph */ +pre.pygments .tok-gr { color: #c02828 } /* Generic.Error */ +pre.pygments .tok-gh { color: #666666 } /* Generic.Heading */ +pre.pygments .tok-gi { color: #388038 } /* Generic.Inserted */ +pre.pygments .tok-go { color: #666666 } /* Generic.Output */ +pre.pygments .tok-gp { color: #444444 } /* Generic.Prompt */ +pre.pygments .tok-gs { font-weight: bold } /* Generic.Strong */ +pre.pygments .tok-gu { color: #444444 } /* Generic.Subheading */ +pre.pygments .tok-gt { color: #2838b0 } /* Generic.Traceback */ +pre.pygments .tok-kc { color: #444444; font-style: italic } /* Keyword.Constant */ +pre.pygments .tok-kd { color: #2838b0; font-style: italic } /* Keyword.Declaration */ +pre.pygments .tok-kn { color: #2838b0 } /* Keyword.Namespace */ +pre.pygments .tok-kp { color: #2838b0 } /* Keyword.Pseudo */ +pre.pygments .tok-kr { color: #2838b0 } /* Keyword.Reserved */ +pre.pygments .tok-kt { color: #2838b0; font-style: italic } /* Keyword.Type */ +pre.pygments .tok-m { color: #444444 } /* Literal.Number */ +pre.pygments .tok-s { color: #b83838 } /* Literal.String */ +pre.pygments .tok-na { color: #388038 } /* Name.Attribute */ +pre.pygments .tok-nb { color: #388038 } /* Name.Builtin */ +pre.pygments .tok-nc { color: #287088 } /* Name.Class */ +pre.pygments .tok-no { color: #b85820 } /* Name.Constant */ +pre.pygments .tok-nd { color: #287088 } /* Name.Decorator */ +pre.pygments .tok-ni { color: #709030 } /* Name.Entity */ +pre.pygments .tok-ne { color: #908828 } /* Name.Exception */ +pre.pygments .tok-nf { color: #785840 } /* Name.Function */ +pre.pygments .tok-nl { color: #289870 } /* Name.Label */ +pre.pygments .tok-nn { color: #289870 } /* Name.Namespace */ +pre.pygments .tok-nt { color: #2838b0 } /* Name.Tag */ +pre.pygments .tok-nv { color: #b04040 } /* Name.Variable */ +pre.pygments .tok-ow { color: #a848a8 } /* Operator.Word */ +pre.pygments .tok-w { color: #a89028 } /* Text.Whitespace */ +pre.pygments .tok-mb { color: #444444 } /* Literal.Number.Bin */ +pre.pygments .tok-mf { color: #444444 } /* Literal.Number.Float */ +pre.pygments .tok-mh { color: #444444 } /* Literal.Number.Hex */ +pre.pygments .tok-mi { color: #444444 } /* Literal.Number.Integer */ +pre.pygments .tok-mo { color: #444444 } /* Literal.Number.Oct */ +pre.pygments .tok-sa { color: #444444 } /* Literal.String.Affix */ +pre.pygments .tok-sb { color: #b83838 } /* Literal.String.Backtick */ +pre.pygments .tok-sc { color: #a848a8 } /* Literal.String.Char */ +pre.pygments .tok-dl { color: #b85820 } /* Literal.String.Delimiter */ +pre.pygments .tok-sd { color: #b85820; font-style: italic } /* Literal.String.Doc */ +pre.pygments .tok-s2 { color: #b83838 } /* Literal.String.Double */ +pre.pygments .tok-se { color: #709030 } /* Literal.String.Escape */ +pre.pygments .tok-sh { color: #b83838 } /* Literal.String.Heredoc */ +pre.pygments .tok-si { color: #b83838; text-decoration: underline } /* Literal.String.Interpol */ +pre.pygments .tok-sx { color: #a848a8 } /* Literal.String.Other */ +pre.pygments .tok-sr { color: #a848a8 } /* Literal.String.Regex */ +pre.pygments .tok-s1 { color: #b83838 } /* Literal.String.Single */ +pre.pygments .tok-ss { color: #b83838 } /* Literal.String.Symbol */ +pre.pygments .tok-bp { color: #388038; font-style: italic } /* Name.Builtin.Pseudo */ +pre.pygments .tok-fm { color: #b85820 } /* Name.Function.Magic */ +pre.pygments .tok-vc { color: #b04040 } /* Name.Variable.Class */ +pre.pygments .tok-vg { color: #908828 } /* Name.Variable.Global */ +pre.pygments .tok-vi { color: #b04040 } /* Name.Variable.Instance */ +pre.pygments .tok-vm { color: #b85820 } /* Name.Variable.Magic */ +pre.pygments .tok-il { color: #444444 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-manni.css mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-manni.css --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-manni.css 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/pygments-manni.css 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,69 @@ +pre.pygments .hll { background-color: #ffffcc } +pre.pygments { background: #f0f3f3; } +pre.pygments .tok-c { color: #0099FF; font-style: italic } /* Comment */ +pre.pygments .tok-err { color: #AA0000; background-color: #FFAAAA } /* Error */ +pre.pygments .tok-k { color: #006699; font-weight: bold } /* Keyword */ +pre.pygments .tok-o { color: #555555 } /* Operator */ +pre.pygments .tok-ch { color: #0099FF; font-style: italic } /* Comment.Hashbang */ +pre.pygments .tok-cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ +pre.pygments .tok-cp { color: #009999 } /* Comment.Preproc */ +pre.pygments .tok-cpf { color: #0099FF; font-style: italic } /* Comment.PreprocFile */ +pre.pygments .tok-c1 { color: #0099FF; font-style: italic } /* Comment.Single */ +pre.pygments .tok-cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */ +pre.pygments .tok-gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ +pre.pygments .tok-ge { font-style: italic } /* Generic.Emph */ +pre.pygments .tok-gr { color: #FF0000 } /* Generic.Error */ +pre.pygments .tok-gh { color: #003300; font-weight: bold } /* Generic.Heading */ +pre.pygments .tok-gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ +pre.pygments .tok-go { color: #AAAAAA } /* Generic.Output */ +pre.pygments .tok-gp { color: #000099; font-weight: bold } /* Generic.Prompt */ +pre.pygments .tok-gs { font-weight: bold } /* Generic.Strong */ +pre.pygments .tok-gu { color: #003300; font-weight: bold } /* Generic.Subheading */ +pre.pygments .tok-gt { color: #99CC66 } /* Generic.Traceback */ +pre.pygments .tok-kc { color: #006699; font-weight: bold } /* Keyword.Constant */ +pre.pygments .tok-kd { color: #006699; font-weight: bold } /* Keyword.Declaration */ +pre.pygments .tok-kn { color: #006699; font-weight: bold } /* Keyword.Namespace */ +pre.pygments .tok-kp { color: #006699 } /* Keyword.Pseudo */ +pre.pygments .tok-kr { color: #006699; font-weight: bold } /* Keyword.Reserved */ +pre.pygments .tok-kt { color: #007788; font-weight: bold } /* Keyword.Type */ +pre.pygments .tok-m { color: #FF6600 } /* Literal.Number */ +pre.pygments .tok-s { color: #CC3300 } /* Literal.String */ +pre.pygments .tok-na { color: #330099 } /* Name.Attribute */ +pre.pygments .tok-nb { color: #336666 } /* Name.Builtin */ +pre.pygments .tok-nc { color: #00AA88; font-weight: bold } /* Name.Class */ +pre.pygments .tok-no { color: #336600 } /* Name.Constant */ +pre.pygments .tok-nd { color: #9999FF } /* Name.Decorator */ +pre.pygments .tok-ni { color: #999999; font-weight: bold } /* Name.Entity */ +pre.pygments .tok-ne { color: #CC0000; font-weight: bold } /* Name.Exception */ +pre.pygments .tok-nf { color: #CC00FF } /* Name.Function */ +pre.pygments .tok-nl { color: #9999FF } /* Name.Label */ +pre.pygments .tok-nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */ +pre.pygments .tok-nt { color: #330099; font-weight: bold } /* Name.Tag */ +pre.pygments .tok-nv { color: #003333 } /* Name.Variable */ +pre.pygments .tok-ow { color: #000000; font-weight: bold } /* Operator.Word */ +pre.pygments .tok-w { color: #bbbbbb } /* Text.Whitespace */ +pre.pygments .tok-mb { color: #FF6600 } /* Literal.Number.Bin */ +pre.pygments .tok-mf { color: #FF6600 } /* Literal.Number.Float */ +pre.pygments .tok-mh { color: #FF6600 } /* Literal.Number.Hex */ +pre.pygments .tok-mi { color: #FF6600 } /* Literal.Number.Integer */ +pre.pygments .tok-mo { color: #FF6600 } /* Literal.Number.Oct */ +pre.pygments .tok-sa { color: #CC3300 } /* Literal.String.Affix */ +pre.pygments .tok-sb { color: #CC3300 } /* Literal.String.Backtick */ +pre.pygments .tok-sc { color: #CC3300 } /* Literal.String.Char */ +pre.pygments .tok-dl { color: #CC3300 } /* Literal.String.Delimiter */ +pre.pygments .tok-sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ +pre.pygments .tok-s2 { color: #CC3300 } /* Literal.String.Double */ +pre.pygments .tok-se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */ +pre.pygments .tok-sh { color: #CC3300 } /* Literal.String.Heredoc */ +pre.pygments .tok-si { color: #AA0000 } /* Literal.String.Interpol */ +pre.pygments .tok-sx { color: #CC3300 } /* Literal.String.Other */ +pre.pygments .tok-sr { color: #33AAAA } /* Literal.String.Regex */ +pre.pygments .tok-s1 { color: #CC3300 } /* Literal.String.Single */ +pre.pygments .tok-ss { color: #FFCC33 } /* Literal.String.Symbol */ +pre.pygments .tok-bp { color: #336666 } /* Name.Builtin.Pseudo */ +pre.pygments .tok-fm { color: #CC00FF } /* Name.Function.Magic */ +pre.pygments .tok-vc { color: #003333 } /* Name.Variable.Class */ +pre.pygments .tok-vg { color: #003333 } /* Name.Variable.Global */ +pre.pygments .tok-vi { color: #003333 } /* Name.Variable.Instance */ +pre.pygments .tok-vm { color: #003333 } /* Name.Variable.Magic */ +pre.pygments .tok-il { color: #FF6600 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib-base_css.in mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib-base_css.in --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib-base_css.in 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib-base_css.in 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,456 @@ +/* Modified version of default asciidoctor.css */ + +/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */ +/* Uncomment @import statement when using as custom stylesheet */ +/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/ +article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block} +audio,canvas,video{display:inline-block} +audio:not([controls]){display:none;height:0} +script{display:none!important} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} +a{background:none} +a:focus{outline:thin dotted} +a:active,a:hover{outline:0} +h1{font-size:2em;margin:.67em 0} +abbr[title]{border-bottom:1px dotted} +b,strong{font-weight:bold} +dfn{font-style:italic} +hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} +mark{background:#ff0;color:#000} +code,kbd,pre,samp{font-family:monospace;font-size:1em} +pre{white-space:pre-wrap} +q{quotes:"\201C" "\201D" "\2018" "\2019"} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-.5em} +sub{bottom:-.25em} +img{border:0} +svg:not(:root){overflow:hidden} +figure{margin:0} +fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} +legend{border:0;padding:0} +button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} +button,input{line-height:normal} +button,select{text-transform:none} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +textarea{overflow:auto;vertical-align:top} +table{border-collapse:collapse;border-spacing:0} +*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} +html,body{font-size:100%} +body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased} +a:hover{cursor:pointer} +img,object,embed{max-width:100%;height:auto} +object,embed{height:100%} +img{-ms-interpolation-mode:bicubic} +.left{float:left!important} +.right{float:right!important} +.text-left{text-align:left!important} +.text-right{text-align:right!important} +.text-center{text-align:center!important} +.text-justify{text-align:justify!important} +.hide{display:none} +img,object,svg{display:inline-block;vertical-align:middle} +textarea{height:auto;min-height:50px} +select{width:100%} +.center{margin-left:auto;margin-right:auto} +.stretch{width:100%} +.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} +div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} +a{color:#2156a5;text-decoration:underline;line-height:inherit} +a:hover,a:focus{color:#1d4b8f} +a img{border:0} +p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} +p aside{font-size:.875em;line-height:1.35;font-style:italic} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} +h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} +h1{font-size:2.125em} +h2{font-size:1.6875em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} +h4,h5{font-size:1.125em} +h6{font-size:1em} +hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} +em,i{font-style:italic;line-height:inherit} +strong,b{font-weight:bold;line-height:inherit} +small{font-size:60%;line-height:inherit} +code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} +ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} +ul,ol{margin-left:1.5em} +ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} +ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} +ul.square{list-style-type:square} +ul.circle{list-style-type:circle} +ul.disc{list-style-type:disc} +ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} +dl dt{margin-bottom:.3125em;font-weight:bold} +dl dd{margin-bottom:1.25em} +abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} +abbr{text-transform:none} +blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} +blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} +blockquote cite::before{content:"\2014 \0020"} +blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} +blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} +@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} +h1{font-size:2.75em} +h2{font-size:2.3125em} +h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} +h4{font-size:1.4375em}} +table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} +table thead,table tfoot{background:#f7f8f7} +table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} +table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} +table tr.even,table tr.alt{background:#f8f8f7} +table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} +h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} +h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} +.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table} +.clearfix::after,.float-group::after{clear:both} +:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word} +:not(pre)>code.nobreak{word-wrap:normal} +:not(pre)>code.nowrap{white-space:nowrap} +pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed} +pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit} +pre>code{display:block} +pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal} +em em{font-style:normal} +strong strong{font-weight:400} +.keyseq{color:rgba(51,51,51,.8)} +kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} +.keyseq kbd:first-child{margin-left:0} +.keyseq kbd:last-child{margin-right:0} +.menuseq,.menuref{color:#000} +.menuseq b:not(.caret),.menuref{font-weight:inherit} +.menuseq{word-spacing:-.02em} +.menuseq b.caret{font-size:1.25em;line-height:.8} +.menuseq i.caret{font-weight:bold;text-align:center;width:.45em} +b.button::before,b.button::after{position:relative;top:-1px;font-weight:400} +b.button::before{content:"[";padding:0 3px 0 2px} +b.button::after{content:"]";padding:0 2px 0 3px} +p a>code:hover{color:rgba(0,0,0,.9)} +#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} +#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table} +#header::after,#content::after,#footnotes::after,#footer::after{clear:both} +#content{margin-top:1.25em} +#content::before{content:none} +#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} +#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf} +#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px} +#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} +#header .details span:first-child{margin-left:-.125em} +#header .details span.email a{color:rgba(0,0,0,.85)} +#header .details br{display:none} +#header .details br+span::before{content:"\00a0\2013\00a0"} +#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} +#header .details br+span#revremark::before{content:"\00a0|\00a0"} +#header #revnumber{text-transform:capitalize} +#header #revnumber::after{content:"\00a0"} +#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} +#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em} +#toc>ul{margin-left:.125em} +#toc ul.sectlevel0>li>a{font-style:italic} +#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} +#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} +#toc li{line-height:1.3334;margin-top:.3334em} +#toc a{text-decoration:none} +#toc a:active{text-decoration:underline} +#toctitle{color:#7a2518;font-size:1.2em} +@media screen and (min-width:768px){#toctitle{font-size:1.375em} +body.toc2{padding-left:15em;padding-right:0} +#toc.toc2{ + margin-top:0!important; + background:#f8f8f7; + position:fixed; + width:15em; + left:0; top:0; + border-right:1px solid #e7e7e9; + border-top-width:0!important; + border-bottom-width:0!important; + z-index:1000; + padding:1.25em 1em; + height:100%; + overflow:auto +} +#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} +#toc.toc2>ul{font-size:.9em;margin-bottom:0} +#toc.toc2 ul ul{margin-left:0;padding-left:1em} +#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} +body.toc2.toc-right{padding-left:0;padding-right:15em} +body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}} +@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} +#toc.toc2{width:20em} +#toc.toc2 #toctitle{font-size:1.375em} +#toc.toc2>ul{font-size:.95em} +#toc.toc2 ul ul{padding-left:1.25em} +body.toc2.toc-right{padding-left:0;padding-right:20em}} +#content #toc{ + border-style:solid; + border-width:1px; + border-color:#e0e0dc; + margin-bottom:1.25em; + padding:1.25em; + background:#f8f8f7; + -webkit-border-radius:4px; + border-radius:4px +} +#content #toc>:first-child{margin-top:0} +#content #toc>:last-child{margin-bottom:0} +#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em} +#footer-text{color:rgba(255,255,255,.8);line-height:1.44} +#content{margin-bottom:.625em} +.sect1{padding-bottom:.625em} +@media screen and (min-width:768px){#content{margin-bottom:1.25em} +.sect1{padding-bottom:1.25em}} +.sect1:last-child{padding-bottom:0} +.sect1+.sect1{border-top:1px solid #e7e7e9} +#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} +#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} +#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} +#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} +#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} +details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} +details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em} +.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} +table.tableblock.fit-content>caption.title{white-space:nowrap;width:0} +.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)} +table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit} +.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} +.admonitionblock>table td.icon{text-align:center;width:80px} +.admonitionblock>table td.icon img{max-width:none} +.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} +.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)} +.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} +.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} +.exampleblock>.content>:first-child{margin-top:0} +.exampleblock>.content>:last-child{margin-bottom:0} +.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px} +.sidebarblock>:first-child{margin-top:0} +.sidebarblock>:last-child{margin-bottom:0} +.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} +.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} +.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em} +@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}} +@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}} +.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)} +.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8} +.listingblock>.content{position:relative} +.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5} +.listingblock:hover code[data-lang]::before{display:block} +.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5} +.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"} +.listingblock pre.highlightjs{padding:0} +.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} +.listingblock pre.prettyprint{border-width:0} +.prettyprint{background:#f7f7f8} +pre.prettyprint .linenums{line-height:1.45;margin-left:2em} +pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0} +pre.prettyprint li code[data-lang]::before{opacity:1} +pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none} +table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none} +table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal} +table.linenotable td.code{padding-left:.75em} +table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em} +pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em} +pre.pygments .lineno::before{content:"";margin-right:-.125em} +.quoteblock{margin:0 1em 1.25em 1.5em;display:table} +.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em} +.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} +.quoteblock blockquote{margin:0;padding:0;border:0} +.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} +.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} +.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right} +.verseblock{margin:0 1em 1.25em} +.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} +.verseblock pre strong{font-weight:400} +.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} +.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} +.quoteblock .attribution br,.verseblock .attribution br{display:none} +.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} +.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none} +.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0} +.quoteblock.abstract{margin:0 1em 1.25em;display:block} +.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center} +.quoteblock.excerpt,.quoteblock .quoteblock{margin:0 0 1.25em;padding:0 0 .25em 1em;border-left:.25em solid #dddddf} +.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem} +.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0} +table.tableblock{max-width:100%;border-collapse:separate} +p.tableblock:last-child{margin-bottom:0} +td.tableblock>.content{margin-bottom:-1.25em} +table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} +table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0} +table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0} +table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0} +table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px} +table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0} +table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0} +table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0} +table.frame-all{border-width:1px} +table.frame-sides{border-width:0 1px} +table.frame-topbot,table.frame-ends{border-width:1px 0} +table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7} +th.halign-left,td.halign-left{text-align:left} +th.halign-right,td.halign-right{text-align:right} +th.halign-center,td.halign-center{text-align:center} +th.valign-top,td.valign-top{vertical-align:top} +th.valign-bottom,td.valign-bottom{vertical-align:bottom} +th.valign-middle,td.valign-middle{vertical-align:middle} +table thead th,table tfoot th{font-weight:bold} +tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} +tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} +p.tableblock>code:only-child{background:none;padding:0} +p.tableblock{font-size:1em} +ol{margin-left:1.75em} +ul li ol{margin-left:1.5em} +dl dd{margin-left:1.125em} +dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} +ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} +ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none} +ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em} +ul.unstyled,ol.unstyled{margin-left:0} +ul.checklist{margin-left:.625em} +ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em} +ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em} +ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em} +ul.inline>li{margin-left:1.25em} +.unstyled dl dt{font-weight:400;font-style:normal} +ol.arabic{list-style-type:decimal} +ol.decimal{list-style-type:decimal-leading-zero} +ol.loweralpha{list-style-type:lower-alpha} +ol.upperalpha{list-style-type:upper-alpha} +ol.lowerroman{list-style-type:lower-roman} +ol.upperroman{list-style-type:upper-roman} +ol.lowergreek{list-style-type:lower-greek} +.hdlist>table,.colist>table{border:0;background:none} +.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} +td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} +td.hdlist1{font-weight:bold;padding-bottom:1.25em} +.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} +.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top} +.colist td:not([class]):first-child img{max-width:none} +.colist td:not([class]):last-child{padding:.25em 0} +.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} +.imageblock.left{margin:.25em .625em 1.25em 0} +.imageblock.right{margin:.25em 0 1.25em .625em} +.imageblock>.title{margin-bottom:0} +.imageblock.thumb,.imageblock.th{border-width:6px} +.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} +.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} +.image.left{margin-right:.625em} +.image.right{margin-left:.625em} +a.image{text-decoration:none;display:inline-block} +a.image object{pointer-events:none} +sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} +sup.footnote a,sup.footnoteref a{text-decoration:none} +sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} +#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} +#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0} +#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em} +#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em} +#footnotes .footnote:last-of-type{margin-bottom:0} +#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} +.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} +.gist .file-data>table td.line-data{width:99%} +div.unbreakable{page-break-inside:avoid} +.big{font-size:larger} +.small{font-size:smaller} +.underline{text-decoration:underline} +.overline{text-decoration:overline} +.line-through{text-decoration:line-through} +.aqua{color:#00bfbf} +.aqua-background{background:#00fafa} +.black{color:#000} +.black-background{background:#000} +.blue{color:#0000bf} +.blue-background{background:#0000fa} +.fuchsia{color:#bf00bf} +.fuchsia-background{background:#fa00fa} +.gray{color:#606060} +.gray-background{background:#7d7d7d} +.green{color:#006000} +.green-background{background:#007d00} +.lime{color:#00bf00} +.lime-background{background:#00fa00} +.maroon{color:#600000} +.maroon-background{background:#7d0000} +.navy{color:#000060} +.navy-background{background:#00007d} +.olive{color:#606000} +.olive-background{background:#7d7d00} +.purple{color:#600060} +.purple-background{background:#7d007d} +.red{color:#bf0000} +.red-background{background:#fa0000} +.silver{color:#909090} +.silver-background{background:#bcbcbc} +.teal{color:#006060} +.teal-background{background:#007d7d} +.white{color:#bfbfbf} +.white-background{background:#fafafa} +.yellow{color:#bfbf00} +.yellow-background{background:#fafa00} +span.icon>.fa{cursor:default} +a span.icon>.fa{cursor:inherit} +.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} +.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c} +.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} +.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900} +.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400} +.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000} +.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} +.conum[data-value] *{color:#fff!important} +.conum[data-value]+b{display:none} +.conum[data-value]::after{content:attr(data-value)} +pre .conum[data-value]{position:relative;top:-.125em} +b.conum *{color:inherit!important} +.conum:not([data-value]):empty{display:none} +dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} +h1,h2,p,td.content,span.alt{letter-spacing:-.01em} +p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} +p,blockquote,dt,td.content,span.alt{font-size:1.0625rem} +p{margin-bottom:1.25rem} +.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} +.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} +.print-only{display:none!important} +@page{margin:1.25cm .75cm} +@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} +html{font-size:80%} +a{color:inherit!important;text-decoration:underline!important} +a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} +a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} +abbr[title]::after{content:" (" attr(title) ")"} +pre,blockquote,tr,img,object,svg{page-break-inside:avoid} +thead{display:table-header-group} +svg{max-width:100%} +p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} +h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} +#toc,.sidebarblock,.exampleblock>.content{background:none!important} +#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important} +body.book #header{text-align:center} +body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em} +body.book #header .details{border:0!important;display:block;padding:0!important} +body.book #header .details span:first-child{margin-left:0!important} +body.book #header .details br{display:block} +body.book #header .details br+span::before{content:none!important} +body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} +body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} +.listingblock code[data-lang]::before{display:block} +#footer{padding:0 .9375em} +.hide-on-print{display:none!important} +.print-only{display:block!important} +.hide-for-print{display:none!important} +.show-for-print{display:inherit!important}} +@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem} +.sect1{padding:0!important} +.sect1+.sect1{border:0} +#footer{background:none} +#footer-text{color:rgba(0,0,0,.6);font-size:.9em}} +@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}} + +/* additional code styling support */ +dt > code { color: #19177C } /* tok-nv in pygments */ +code > span.kw { color: #008000; font-weight: bold } /* tok-k in pygments */ +code > span.tv { color: #AA22FF } /* tok-nd in pygments */ +code > span.ty { color: #B00040 } /* tok-kt in pygments */ +code > span.con { color: #0000FF; font-weight: bold } /* tok-nc in pygments */ diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib_css.in mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib_css.in --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib_css.in 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib_css.in 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,184 @@ +/* CSS for SML/NJ Library documentation + * This file overrides the default asciidoctor definitions + * in smlnj-lib-base.css. + */ + +/* page layout */ + +#layout-top-mask { /* masks out scrolling material */ + position: fixed; + top: 0px; + left: 0px; + height: 2em; + width: 100%; + background-color: @BACKGROUND@; + z-index: 5; +} + +#layout-main { + margin: 0.5em 0.5em 0.5em 0.5em; +} + +#layout-banner-spacer { + position: relative; + width: 100%; + height: 10em; + clear: both; +} + +#layout-banner { + margin: 0; + padding: 1.25em; + background-color: @BANNER_BACKGROUND@; + font-family: Arial, Helvetica, Geneva, sans-serif; + text-align: left; + -webkit-border-top-left-radius: 1em; + -webkit-border-top-right-radius: 1em; + -webkit-border-bottom-right-radius: 1em; + -moz-border-radius-topright: 1em; + -moz-border-radius-bottomright: 1em; + border-top-right-radius: 1em; + border-bottom-right-radius: 1em; + position: fixed; + top: 0.5em; /* should match layout-main margin */ + left: 0.5em; + right: 0.5em; + z-index: 10; +} + +#layout-title { + height: 7.5em; + color: @TITLE_COLOR@; +} + +#layout-title-main { + font-size: 4.0em; + margin: 0 0 5px; + color: inherit; +} + +#layout-title-main a { + color: inherit; + text-decoration: none; +} + +#layout-title-description { + font-size: 2.4em; + margin: 0; + color: inherit; +} + +#layout-title-description code { + color: inherit; + background-color: inherit; +} + +#layout-logo { + height: 7.5em; + float: left; + width: 14em; +} + +#layout-logo img { + height: 7.5em; + max-width: none; /* override smlnj-lib-base.css */ +} + +#layout-toc { + position: fixed; + left: 0.5em; + width: 15em; + top: 10em; + bottom: 0; + z-index: 2; + background-color: @BANNER_BACKGROUND@; + color: @TITLE_COLOR@; + overflow: auto; +} + +#layout-content-box { + margin-left: 15em; + z-index: 0; +} + +#layout-footer-box { + margin-left: 15em; + margin-top: 4.0em; + padding-left: 1.0em; + padding-right: 0.4em; + padding-top: 0.5em; +} + +#layout-footer { + border-top: 2px solid @HR_COLOR@; +} + +#layout-footer-text { + float: left; + font-size: 0.8em; + padding-top: 0.2em; + padding-bottom: 0.5em; + border-bottom: 2px solid @HR_COLOR@; + margin-bottom: 1em; +} + +/* Navigation (aka TOC) */ +#toc { + margin-top: 2em; + margin-left: 0; + margin-bottom: 2em; +} +#toc>:first-child{margin-top:0} +#toc>:last-child{margin-bottom:0} + +#toc a{ + color: inherit; + background-color: inherit; + text-decoration: none; +} + +#toc a:hover{ + background-color: @TOC_HIGHLIGHT@; +} + +#toc code{ + color: inherit; + background-color: inherit; +} + +ul.toc-lib-list{ + font-size: 1.1em; + list-style-type:none; + padding: 0; + margin-left: 0; +} + +li.toc-lib{ + margin-left: 0; + margin-bottom: 0.2em; + padding: 2px; +} + +ul.toc-page-list{ + font-size: 0.9em; + list-style-type: none; + padding: 0; + margin-left: 1em; +} + +li.toc-page{ + margin-left: 0; + margin-bottom: 0.2em; + padding: 2px; +} + +#toc-current { + color: blue; +} + +/* additional code styling support */ +dt > code { color: #19177C } /* tok-nv in pygments */ +code > span.kw { color: @KW_COLOR@; font-weight: bold } /* tok-k in pygments */ +code > span.tv { color: #AA22FF } /* tok-nd in pygments */ +code > span.ty { color: #B00040 } /* tok-kt in pygments */ +code > span.con { color: @BIND_COLOR@; font-weight: bold } /* tok-nc in pygments */ diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib-pygments_css.in mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib-pygments_css.in --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib-pygments_css.in 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/styles/smlnj-lib-pygments_css.in 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,25 @@ +/* + pygmentize filter for SML code +*/ +pre.pygments .hll { background-color: #ffffcc } +pre.pygments { font-size: 0.9em; background: @CODE_BACKGROUND@; } /* code background */ +pre.pygments .tok-k { color: @KW_COLOR@; font-weight: bold } /* Keyword */ +pre.pygments .tok-kr { color: @KW_COLOR@; font-weight: bold; } /* keywords */ +pre.pygments .tok-kt { color: @TY_COLOR@; } /* type */ +pre.pygments .tok-o { color: @KW_COLOR@; } /* Operator */ +pre.pygments .tok-c { color: @COM_COLOR@; font-style: italic; } /* comments */ +pre.pygments .tok-cm { color: @COM_COLOR@; font-style: italic; } /* comments */ +pre.pygments .tok-s2 { color: @LIT_COLOR@; } /* strings */ +pre.pygments .tok-mb { color: @LIT_COLOR@; } /* Literal.Number.Bin */ +pre.pygments .tok-mf { color: @LIT_COLOR@; } /* Literal.Number.Float */ +pre.pygments .tok-mh { color: @LIT_COLOR@; } /* Literal.Number.Hex */ +pre.pygments .tok-mi { color: @LIT_COLOR@; } /* Literal.Number.Integer */ +pre.pygments .tok-mo { color: @LIT_COLOR@; } /* Literal.Number.Oct */ +pre.pygments .tok-kt { color: @BIND_COLOR@; } /* lhs type names */ +pre.pygments .tok-n { color: @CODE_COLOR@; } /* type names on rhs; parameters */ +pre.pygments .tok-p { color: @PUNCT_COLOR@; } /* punctuation */ +pre.pygments .tok-nn { color: @BIND_COLOR@; font-weight: bold; } /* Module names */ +pre.pygments .tok-nv { color: @BIND_COLOR@; font-weight: bold; } /* variable names in val bindings */ +pre.pygments .tok-nf { color: @BIND_COLOR@; font-weight: bold; } /* function names in fun bindings */ +pre.pygments .tok-nc { color: @BIND_COLOR@; font-weight: bold; } /* data constructor name in rhs of datatype */ +pre.pygments .tok-nd { color: @TV_COLOR@; } /* type variable */ diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/fun.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/fun.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/fun.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/fun.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,47 @@ += The `@NAME@` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `@NAME@` functor ... + +== Synopsis + +[source,sml] +------------ +functor @NAME@ () +------------ + +== Functor Argument Interface + +[source,sml] +------------ +------------ + +== Functor Argument Description + +`[.kw]#type# foo`:: + something + +`[.kw]#val# bar : foo -> foo`:: + something + +== Interface + +[source,sml] +------------ +------------ + +== Interface Description + +`[.kw]#type# foo`:: + something + +`[.kw]#val# bar : foo -> foo`:: + something + +== See Also + +xref:@LIBRARY@.adoc[__The @DIR@ Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-foot.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-foot.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-foot.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-foot.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,5 @@ + +// Return to normal title levels. +:leveloffset: 0 + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-head.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-head.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-head.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-head.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,13 @@ += The @DIR@ Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Overview + +The *@DIR@ Library* ... + +== Contents + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-mid.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-mid.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-mid.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/lib-mid.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,13 @@ +== Usage + +For https://smlnj.org[*SML/NJ*], include `$/@LIBRARY@.cm` in your +*CM* file. + +For use in https://www.mlton.org/[*MLton*], include +`$(SML_LIB)/smlnj-lib/@DIR@/@LIBRARY@.mlb` in your *MLB* file. + +ifdef::backend-pdf[] + +// Push titles down one level. +:leveloffset: 1 + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/README.md mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/README.md --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/README.md 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/README.md 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,16 @@ +This directory contains templates for creating *asciidoctor* files +to document libraries in the SML/NJ Library. The templates are + + `lib.adoc`:: + main file for documenting a library + + `sig.adoc`:: + template for documenting a signature + + `str.adoc`:: + template for documenting a structure that does not + have a named signature + + `fun.adoc`:: + template for documenting a functor + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/sig.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/sig.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/sig.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/sig.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ += The `@NAME@` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `@NAME@` signature ... + +== Synopsis + +[source,sml] +------------ +signature @NAME@ +------------ + +== Interface + +[source,sml] +------------ +------------ + +== Description + +`[.kw]#type# foo`:: + something + +`[.kw]#val# bar : foo -> foo`:: + something + +== See Also + +xref:@LIBRARY@.adoc[__The @DIR@ Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/str.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/str.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/str.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Templates/str.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ += The `@NAME@` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `@NAME@` structure ... + +== Synopsis + +[source,sml] +------------ +structure @NAME@ +------------ + +== Interface + +[source,sml] +------------ +------------ + +== Description + +`[.kw]#type# foo`:: + something + +`[.kw]#val# bar : foo -> foo`:: + something + +== See Also + +xref:@LIBRARY@.adoc[__The @DIR@ Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2 @@ +structure UnixEnv +structure UnixPath diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/str-UnixEnv.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/str-UnixEnv.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/str-UnixEnv.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/str-UnixEnv.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,77 @@ += The `UnixEnv` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `UnixEnv` structure supports operations on the host process's _environment_, +which is essentially a list of strings of the form "``__name__=__value__``", where +the "`=`" character does not appear in ``__name__``. We assume that environments +are "well formed;" _i.e._, that an environment variable is only defined once. + +[WARNING] +========= +Binding the user's environment as an SML value and then exporting the +SML heap image can result in incorrect behavior, since the environment bound +in the heap image may differ from the user's environment when the exported +heap image is loaded. +========= + +== Synopsis + +[source,sml] +------------ +signature UNIX_ENV +structure UnixEnv : UNIX_ENV +------------ + +== Interface + +[source,sml] +------------ +val getFromEnv : (string * string list) -> string option + +val getValue : {name : string, default : string, env : string list} -> string + +val removeFromEnv : (string * string list) -> string list + +val addToEnv : (string * string list) -> string list + +val environ : unit -> string list + +val getEnv : string -> string option +------------ + +== Description + +`[.kw]#val# getFromEnv : (string * string list) \-> string option`:: + `getEnv (name, env)` returns `SOME v` if `(name, v)` is in the environment + `env`. Otherwise, it returns `NONE` if `name` is not bound in `env`. + +`[.kw]#val# getValue : {name : string, default : string, env : string list} \-> string`:: + `getEnv {name, default, env}` returns `v` if `(name, v)` is in the + environment `env`. Otherwise, it returns `default` if `name` is not + bound in `env`. + +`[.kw]#val# removeFromEnv : (string * string list) \-> string list`:: + `removeFromEnv (name, env)` removes any binding of `name` from the + environment. Note that if `env` has multiple bindings of `name` + (_i.e._, `env` is *not* well formed), then only the first binding + is removed. + +`[.kw]#val# addToEnv : (string * string list) \-> string list`:: + `addToEnv (bind, env)` adds the binding `bind`, which should be of the + form "``__name__=__value__``", to the environment. If there was an + existing binding of ``__name__`` in `env`, then it will be replaced. + +`[.kw]#val# environ : unit \-> string list`:: + `env ()` returns the user's (host process) environment. + +`[.kw]#val# getEnv : string \-> string option`:: + `getEnv name` returns the binding of the environment variable `name` + in the user's (host process) environment. + +== See Also + +xref:unix-lib.adoc[__The Unix Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/str-UnixPath.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/str-UnixPath.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/str-UnixPath.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/str-UnixPath.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,86 @@ += The `UnixPath` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `UnixPath` structure provides support for searching for files +in the *Unix* file system using a list of possible locations. + +Note that this module is largely superseded by the +xref:../Util/str-PathUtil.adoc[`PathUtil`] module +in the xref:../Util/smlnj-lib.adoc[*Util Library*]. + +== Synopsis + +[source,sml] +------------ +signature UNIX_PATH +structure UnixPath : UNIX_PATH +------------ + +== Interface + +[source,sml] +------------ +type path_list = string list + +val getPath : unit -> path_list + +datatype access_mode = datatype OS.FileSys.access_mode +datatype file_type = F_REGULAR | F_DIR | F_SYMLINK | F_SOCK | F_CHR | F_BLK + +val findFile : (path_list * access_mode list) -> string -> string option + +val findFiles : (path_list * access_mode list) -> string -> string list + +val findFileOfType : (path_list * file_type * access_mode list) -> string -> string option + +val findFilesOfType : (path_list * file_type * access_mode list) -> string -> string list +------------ + +== Description + +`[.kw]#type# path_list = string list`:: + A list of file-system paths that is used to search for files. + +`[.kw]#val# getPath : unit \-> path_list`:: + `getPath ()` return's the value of the user's `PATH` shell variable + as a `path_list`. + +`[.kw]#datatype# access_mode = [.kw]#datatype# {sml-basis-url}os-file-sys.html#SIG:OS_FILE_SYS.access_mode:TY[OS.FileSys.access_mode]`:: + Rebind the file-system access-mode constructors. + +`[.kw]#datatype# file_type = F_REGULAR | F_DIR | F_SYMLINK | F_SOCK | F_CHR | F_BLK`:: + The different types of file-system objects in *Unix*. + +`[.kw]#val# findFile : (path_list * access_mode list) \-> string \-> string option`:: + `findFile (paths, mode) __name__` returns `SOME path`, where `path` is a string of + the form ``"__p__/__name__"`` and ``__p__`` is the first string in `paths` + such that `path` has the given access modes (the empty list of access modes + is used to test for existence). If no such file exists, then `NONE` is returned. + +`[.kw]#val# findFiles : (path_list * access_mode list) \-> string \-> string list`:: + `findFiles (paths, mode) __name__` returns a list of strings, such that each string + `s` in the result has the form ``"__p__/__name__"`` with ``__p__`` in `paths` + and the file named by `path` has the specified access modes. + +`[.kw]#val# findFileOfType : (path_list * file_type * access_mode list) \-> string \-> string option`:: + `findFileOfType (paths, ftype, mode) __name__` returns the `SOME path`, where `path` is + a string of the form ``"__p__/__name__"`` and ``__p__`` is the first string + in `paths` such that `path` has the given access modes (the empty list of + access modes is used to test for existence) and is of the specified file type. + If no such file exists, then `NONE` is returned. + +`[.kw]#val# findFilesOfType : (path_list * file_type * access_mode list) \-> string \-> string list`:: + `findFilesOfType (paths, mode) __name__` returns a list of strings, + such that each string `s` in the result has the form ``"__p__/__name__"`` + with ``__p__`` in `paths` and the file named by `path` has the specified + access modes and is of the specified file type. + +== See Also + +xref:str-UnixEnv.adoc[`UnixEnv`], +xref:../Util/str-PathUtil.adoc[`PathUtil`], +xref:unix-lib.adoc[__The Unix Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/unix-lib.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/unix-lib.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/unix-lib.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Unix/unix-lib.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ += The Unix Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Overview + +The *Unix Library* provides some *Unix*-specific utilities. + +== Contents + +xref:str-UnixEnv.adoc[`[.kw]#structure# UnixEnv`]:: + This structure provides support for querying the user's environment. + +xref:str-UnixPath.adoc[`[.kw]#structure# UnixPath`]:: + This structure supports *Unix*-specific file-system searches. + +== Usage + +For https://smlnj.org[*SML/NJ*], include `$/unix-lib.cm` in your +*CM* file. + +For use in https://www.mlton.org/[*MLton*], include +`$(SML_LIB)/smlnj-lib/Unix/unix-lib.mlb` in your *MLB* file. + +ifdef::backend-pdf[] + +// Push titles down one level. +:leveloffset: 1 + +include::str-UnixEnv.adoc[] + +include::str-UnixPath.adoc[] + +// Return to normal title levels. +:leveloffset: 0 + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ArrayQSortFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ArrayQSortFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ArrayQSortFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ArrayQSortFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,63 @@ += The `ArrayQSortFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ArrayQSortFn` functor provides _in situ_ sorting of monomorphic arrays +using the quicksort algorithm. + +== Synopsis + +[source,sml] +------------ +signature MONO_ARRAY_SORT +functor ArrayQSortFn (A : MONO_ARRAY) : MONO_ARRAY_SORT +------------ + +== Functor Argument Interface + +[source,sml] +------------ +A : MONO_ARRAY +------------ + +== Functor Argument Description + +`A : MONO_ARRAY`:: + A structure that implements the + {sml-basis-url}/mono-array.html[`MONO_ARRAY`] signature from + the {sml-basis-url}/index.html[*SML Basis Library*]. + +== Interface + +[source,sml] +------------ +structure A : MONO_ARRAY + +val sort : (A.elem * A.elem -> order) -> A.array -> unit + +val sorted : (A.elem * A.elem -> order) -> A.array -> bool +------------ + +== Interface Description + +`[.kw]#structure# A : MONO_ARRAY`:: + The argument structure. + +`[.kw]#val# sort : (A.elem * A.elem \-> order) \-> A.array \-> unit`:: + `sort cmp arr` sorts the array `arr` into ascending order + according to the comparison function `cmp`. + +`[.kw]#val# sorted : (A.elem * A.elem \-> order) \-> A.array \-> bool`:: + `sorted cmp arr` returns true if, and only if, the array `arr=` is + sorted in ascending order. + + +== See Also + +xref:str-ArrayQSort.adoc[`ArrayQSort`], +{sml-basis-url}/Basis/mono-array.html[`MONO_ARRAY`], +xref:fun-MonoArrayFn.adoc[`MonoArrayFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BinaryMapFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BinaryMapFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BinaryMapFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BinaryMapFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,31 @@ += The `BinaryMapFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `BinaryMapFn` functor provides a balanced-binary-tree implementation of the +xref:sig-ORD_MAP.adoc[`ORD_MAP`] signature parameterized over the key type. + +The original implementation was written by Stephen Adams and was based +on the paper https://doi.org/10.1137/0202005[Binary Search Trees of Bounded Balance] +by Nievergelt and Reingold (SIAM Journal of Computing; March 1973). + +It is recommended, however, that one use the xref:fun-RedBlackMapFn.adoc[`RedBlackMapFn`] +functor instead of `BinaryMapFn`, since experimentation has shown it to be +faster across the board. + +== Synopsis + +[source,sml] +------------ +functor BinaryMapFn (K : ORD_KEY) :> ORD_MAP where type Key.ord_key = K.ord_key +------------ + +== See Also + +xref:sig-ORD_KEY.adoc[`ORD_KEY`], +xref:sig-ORD_MAP.adoc[`ORD_MAP`], +xref:fun-RedBlackMapFn.adoc[`RedBlackMapFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BinarySetFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BinarySetFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BinarySetFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BinarySetFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,31 @@ += The `BinarySetFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `BinarySetFn` functor provides a balanced-binary-tree implementation of the +xref:sig-ORD_SET.adoc[`ORD_SET`] signature parameterized over the element type. + +The original implementation was written by Stephen Adams and was based +on the paper https://doi.org/10.1137/0202005[Binary Search Trees of Bounded Balance] +by Nievergelt and Reingold (SIAM Journal of Computing; March 1973). + +It is recommended, however, that one use the xref:fun-RedBlackSetFn.adoc[`RedBlackSetFn`] +functor instead of `BinarySetFn`, since experimentation has shown it to be +faster across the board. + +== Synopsis + +[source,sml] +------------ +functor BinarySetFn (K : ORD_KEY) :> ORD_SET where type Key.ord_key = K.ord_key +------------ + +== See Also + +xref:sig-ORD_KEY.adoc[`ORD_KEY`], +xref:sig-ORD_SET.adoc[`ORD_SET`], +xref:fun-RedBlackSetFn.adoc[`RedBlackSetFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BSearchFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BSearchFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BSearchFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-BSearchFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,61 @@ += The `BSearchFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `BSearchFn` functor provides binary search on sorted monomorphic +arrays. + +== Synopsis + +[source,sml] +------------ +functor BSearchFn (A : MONO_ARRAY) +------------ + +== Functor Argument Interface + +[source,sml] +------------ +A : MONO_ARRAY +------------ + +== Functor Argument Description + +`A : MONO_ARRAY`:: + A structure that implements the + {sml-basis-url}/mono-array.html[`MONO_ARRAY`] signature from + the {sml-basis-url}/index.html[*SML Basis Library*]. + +== Interface + +[source,sml] +------------ +structure A : MONO_ARRAY + +val bsearch : (('a * A.elem) -> order) -> ('a * A.array) -> (int * A.elem) option +------------ + +== Description + +`[.kw]#structure# A : {sml-basis-url}/Basis/mono-array.html[MONO_ARRAY]`:: + The array structure that defines the element and array types. + +`[.kw]#val# bsearch : (('a * A.elem) \-> order) \-> ('a * A.array) \-> (int * A.elem) option`:: + `bsearch cmp (key, arr)` returns `SOME(ix, elem)` where `A.sub(arr, ix)` is + `elem` and `cmp(key, elem)` returns `EQUAL`; if no such element is present, then + `NONE` is returned. This function uses a binary search over the array, + which requires that the elements be arranged in increasing order by the `cmp` + function. Usually, the type of the search key will be `A.elem`, but the + interface allows some computation on the elements, as long as the ordering + is respected. + +== See Also + +{sml-basis-url}/Basis/mono-array.html[`MONO_ARRAY`], +xref:fun-MonoArrayFn.adoc[`MonoArrayFn`], +xref:fun-ArrayQSortFn.adoc[`ArrayQSortFn`], +xref:smlnj-lib.adoc[__The Util Library__] + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-DynamicArrayFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-DynamicArrayFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-DynamicArrayFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-DynamicArrayFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,135 @@ += The `DynamicArrayFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `DynamicArrayFn` functor provides dynamically sized monomorphic +arrays. Each array has an associated _default_ value, which is +covers those elements that have not been explicitly initialized +(conceptually, one can view an array as having an infinite size). +Thus, reads from indices above the bound will return the default value. +The __bound__ of an array is the highest index of an initialized +element (or `~1` if there are no initialized elements). The +__defined range__ of the array are the elements in the positions +indexed from zero to the bound. + +== Synopsis + +[source,sml] +------------ +signature MONO_DYNAMIC_ARRAY +functor DynamicArrayFn (A : MONO_ARRAY) : MONO_DYNAMIC_ARRAY +------------ + +== Functor Argument Interface + +[source,sml] +------------ +A : MONO_ARRAY +------------ + +== Functor Argument Description + +`A : MONO_ARRAY`:: + A structure that implements the + {sml-basis-url}/mono-array.html[`MONO_ARRAY`] signature from + the {sml-basis-url}/index.html[*SML Basis Library*]. + +== Interface + +[source,sml] +------------ +type elem +type array + +val array : (int * elem) -> array + +val subArray : array * int * int -> array + +val fromList : elem list * elem -> array +val toList : array -> elem list + +val tabulate: int * (int -> elem) * elem -> array + +val default : array -> elem + +val sub : array * int -> elem + +val update : array * int * elem -> unit + +val bound : array -> int + +val truncate : array * int -> unit +------------ + +== Interface Description + +`[.kw]#type# elem`:: + The type of array elements. + +`[.kw]#type# array`:: + The type of dynamic arrays. + +`[.kw]#val# array : (int * elem) \-> array`:: + `array (sz, dflt)` returns a new array with bound `~1` and default + value `dflt`. The `sz` argument, which must be non-negative, is used + as a hint of the potential range of indices. This function raises + the {sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `sz < 0`. + +`[.kw]#val# subArray : array * int * int \-> array`:: + `subArray (arr, lo, hi)` returns a new array with the same default + as `arr`, and whose values in the range `[0, hi-lo]` are equal to + the values in `arr` in the range `[lo, hi]`. This function raises + the {sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `lo > hi`. + +`[.kw]#val# fromList : elem list * elem \-> array`:: + `fromList (lst, dflt)` returns a new array created from the elements + of `lst` and with default value `dflt`. The bound of the array will be + `length lst - 1`. + +`[.kw]#val# toList : 'a array \-> 'a list`:: + `toList arr` returns a list of the array's contents. The resulting + list will have the array's bound plus one elements. + +`[.kw]#val# tabulate: int * (int \-> elem) * elem \-> array`:: + `tabulate (sz, init, dflt)` returns a new array with the first + `sz` elements initialized using the function `init` and the + default value `dflt`. This function raises the + {sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `sz < 0`. + +`[.kw]#val# default : array \-> elem`:: + `default arr` returns the default value for the array. + +`[.kw]#val# sub : array * int \-> elem`:: + `sub (arr, ix)` returns the value of the array at index `ix`. + If that value has not been explicitly set, then it returns the array's + default value. This function raises the + {sml-basis-url}/general.html#SIG:GENERAL.Subscript:EXN:SPEC[`Subscript`] + exception if `ix < 0`. + +`[.kw]#val# update : array * int * elem \-> unit`:: + `update (arr, ix, v)` sets the value at index `ix` of the array to `v`. + If `ix` is greater than the current bound of the array, then the bound + is set to `ix`. This function raises the + {sml-basis-url}/general.html#SIG:GENERAL.Subscript:EXN:SPEC[`Subscript`] + exception if `ix < 0`. + +`[.kw]#val# bound : array \-> int`:: + `bound arr` returns the current bound of the array, which is the highest + index that has been explicitly set (__e.g.__, by `update`). + +`[.kw]#val# truncate : array * int \-> unit`:: + `truncate (arr, sz)` sets every entry with index greater or equal to + `sz` to the array's default value. + +== See Also + +xref:str-DynamicArray.adoc[`DynamicArray`], +{sml-basis-url}/Basis/mono-array.html[`MONO_ARRAY`], +xref:fun-MonoArrayFn.adoc[`MonoArrayFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-GraphSCCFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-GraphSCCFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-GraphSCCFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-GraphSCCFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,80 @@ += The `GraphSCCFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `GraphSCCFn` functor implements an algorithm for +calculating the strongly-connected components of a directed graph. +The resulting components are topologically-sorted; _i.e._, if a component +_A_ comes before a component _B_ in the result, then there is no +path from _B_ to _A_ (but there might be a path from _A_ to _B_). + +== Synopsis + +[source,sml] +------------ +functor GraphSCCFn (Nd: ORD_KEY) :> GRAPH_SCC where Nd = Nd +------------ + +== Arguments + +[source,sml] +------------ +Nd: ORD_KEY +------------ +* `Nd : xref:sig-ORD_KEY.adoc[ORD_KEY]`:: + The argument structure `Nd` defines the type of graph nodes paired with + a comparison function that is used by the algorithm to implement finite + maps keyed by nodes. + +== Interface + +[source,sml] +------------ +structure Nd : ORD_KEY + +type node = Nd.ord_key + +datatype component + = SIMPLE of node + | RECURSIVE of node list + +val topOrder' : digraph -> component list + +val topOrder : digraph -> component list +------------ + +== Description + +`structure Nd : ORD_KEY`:: + The argument structure. + +`[.kw]#type# node = Nd.ord_key`:: + The type of a node in the graph. + +`[.kw]#datatype# component`:: + The type of a component in the result. Components are either + `SIMPLE`, consisting of a single node, or `RECURSIVE`, consisting + of a list of nodes that are all connected by cyclic paths. + A single node with a self loop is represented by the `RECURSIVE` + constructor. + +`[.kw]#val# topOrder': { roots: node list, follow: node \-> node list } \-> component list`:: + `topOrder` {roots, follow}` returns a topologically-sorted list of + strongly-connected components for a directed graph. The graph is specified + by a list of root nodes and a _follow_ (or _successor_) function that returns + the list of successors for a node. The first component in the result will + contain the first node in the `roots` list. + +`[.kw]#val# topOrder : { root: node, follow: node \-> node list } \-> component list`:: + `topOrder {root, follow}` is equivalent to the expression +[source,sml] +------------ +topOrder' {roots = [root], follow = follow} +------------ + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-Hash2TableFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-Hash2TableFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-Hash2TableFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-Hash2TableFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,222 @@ += The `Hash2TableFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `Hash2TableFn` functor provides hash tables that are keyed by two +different key types. Items are inserted with two keys, either of +which may be used to lookup the item. Essentially, it is a pair of +hash tables that are kept synchronized. + +The tables are implemented as an array of _buckets_, which are +lists of key-value pairs. The number of buckets grows with the number +of table entries. + +== Synopsis + +[source,sml] +------------ +functor Hash2TableFn ( + structure Key1 : HASH_KEY + structure Key2 : HASH_KEY + ) : MONO_HASH2_TABLE +------------ + +== Functor Argument Interface + +[source,sml] +------------ +structure Key1 : HASH_KEY +structure Key2 : HASH_KEY +------------ + +== Functor Argument Description + +`[.kw]#structure# Key1 : xref:sig-HASH_KEY.adoc[HASH_KEY]`:: + The argument structure that specifies the first key type + with its hashing and equality functions. + +`[.kw]#structure# Key2 : xref:sig-HASH_KEY.adoc[HASH_KEY]`:: + The substructure that specifies the second key type + with its hashing and equality functions. + +== Interface + +[source,sml] +------------ +structure Key1 : HASH_KEY +structure Key2 : HASH_KEY + +type 'a hash_table + +val mkTable : (int * exn) -> 'a hash_table + +val clear : 'a hash_table -> unit + +val insert : 'a hash_table -> (Key1.hash_key * Key2.hash_key * 'a) -> unit + +val inDomain1 : 'a hash_table -> Key1.hash_key -> bool +val inDomain2 : 'a hash_table -> Key2.hash_key -> bool + +val lookup1 : 'a hash_table -> Key1.hash_key -> 'a +val lookup2 : 'a hash_table -> Key2.hash_key -> 'a + +val find1 : 'a hash_table -> Key1.hash_key -> 'a option +val find2 : 'a hash_table -> Key2.hash_key -> 'a option + +val remove1 : 'a hash_table -> Key1.hash_key -> 'a +val remove2 : 'a hash_table -> Key2.hash_key -> 'a + +val numItems : 'a hash_table -> int + +val listItems : 'a hash_table -> 'a list +val listItemsi : 'a hash_table -> (Key1.hash_key * Key2.hash_key * 'a) list + +val app : ('a -> unit) -> 'a hash_table -> unit +val appi : ((Key1.hash_key * Key2.hash_key * 'a) -> unit) -> 'a hash_table + -> unit + +val map : ('a -> 'b) -> 'a hash_table -> 'b hash_table +val mapi : ((Key1.hash_key * Key2.hash_key * 'a) -> 'b) -> 'a hash_table + -> 'b hash_table + +val fold : (('a * 'b) -> 'b) -> 'b -> 'a hash_table -> 'b +val foldi : ((Key1.hash_key * Key2.hash_key * 'a * 'b) -> 'b) -> 'b + +val filter : ('a -> bool) -> 'a hash_table -> unit +val filteri : ((Key1.hash_key * Key2.hash_key * 'a) -> bool) -> 'a hash_table + -> unit + +val copy : 'a hash_table -> 'a hash_table + +val bucketSizes : 'a hash_table -> (int list * int list) +------------ + +== Interface Description + +`[.kw]#structure# Key1 : xref:sig-HASH_KEY.adoc[HASH_KEY]`:: + The substructure that specifies the first key type. + +`[.kw]#structure# Key2 : xref:sig-HASH_KEY.adoc[HASH_KEY]`:: + The substructure that specifies the second key type. + +`[.kw]#type# 'a hash_table`:: + The type of imperative hash tables indexed by the key types. + +`[.kw]#val# mkTable : (int * exn) \-> 'a hash_table`:: + `mkTable (n, ex)` creates a new hash table; the table will be initially + sized to hold at least `n` items. The exception `ex` is raised by the + lookup and remove functions (described below) + when the search key is not in the domain. + +`[.kw]#val# clear : 'a hash_table \-> unit`:: + `clear tbl` removes all of the entries in the table. + +`[.kw]#val# insert : 'a hash_table \-> (Key1.hash_key * Key2.hash_key * 'a) \-> unit`:: + `insert tbl (key1, key2, item)` inserts a mappings from `key1` and `key2` + to `item` into `tbl`. Any existing mapping of the keys is discarded. + +`[.kw]#val# inDomain1 : 'a hash_table \-> Key1.hash_key \-> bool`:: + `inDomain1 tbl key` returns `true` if, and only if, `key` is in the + first domain of the table + +`[.kw]#val# inDomain2 : 'a hash_table \-> Key2.hash_key \-> bool`:: + `inDomain2 tbl key` returns `true` if, and only if, `key` is in the + second domain of the table + +[[val:lookup1]] +`[.kw]#val# lookup1 : 'a hash_table \-> Key1.hash_key \-> 'a`:: + `lookup1 tbl key` returns the item that `key` maps to if `key` is in + the first mapping of `tbl`. Otherwise, the table's exception is raised. + +[[val:lookup2]] +`[.kw]#val# lookup2 : 'a hash_table \-> Key2.hash_key \-> 'a`:: + `lookup2 tbl key` returns the item that `key` maps to if `key` is in + the second mapping of `tbl`. Otherwise, the table's exception is raised. + +`[.kw]#val# find1 : 'a hash_table \-> Key1.hash_key \-> 'a option`:: + `find1 tbl key` returns the `SOME v` if `key` is in the first domain + of `tbl` and is mapped to `v`. Otherwise, it returns `NONE`. + +`[.kw]#val# find2 : 'a hash_table \-> Key2.hash_key \-> 'a option`:: + `find2 tbl key` returns the `SOME v` if `key` is in the second domain + of `tbl` and is mapped to `v`. Otherwise, it returns `NONE`. + +[[val:remove1]] +`[.kw]#val# remove1 : 'a hash_table \-> Key1.hash_key \-> 'a`:: + `remove1 tbl key1` returns the item that `key1` maps to if `key1` is in + the first mapping of `tbl`. Furthermore, if the item was inserted with + keys `key1` and `key2`, then `key1` is removed from the first mapping + and `key2` is removed from the second mapping. If `key1` is not in the + first domain of the table, then the table's exception is raised. + +[[val:remove2]] +`[.kw]#val# remove2 : 'a hash_table \-> Key2.hash_key \-> 'a`:: + `remove2 tbl key2` returns the item that `key2` maps to if `key2` is in + the second mapping of `tbl`. Furthermore, if the item was inserted with + keys `key1` and `key2`, then `key1` is removed from the first mapping + and `key2` is removed from the second mapping. If `key2` is not in the + second domain of the table, then the table's exception is raised. + +`[.kw]#val# numItems : 'a hash_table \-> int`:: + `numItems tbl` returns the number of entries in the table. + +`[.kw]#val# listItems : 'a hash_table \-> 'a list`:: + `listItems tbl` returns a list of the items in the range of `tbl`. + +`[.kw]#val# listItemsi : 'a hash_table \-> (Key1.hash_key * Key2.hash_key * 'a) list`:: + `listItemsi tbl` returns a list of the `(key1, key2, item)` triples that + are in `tbl`. + +`[.kw]#val# app : ('a \-> unit) \-> 'a hash_table \-> unit`:: + `app f tbl` applies the function `f` to each item in `tbl`. + +`[.kw]#val# appi : ((Key1.hash_key * Key2.hash_key * 'a) \-> unit) \-> 'a hash_table`:: + `appi f tbl` applies the function `f` to each `(key1, key2, item)` triple in `tbl`. + +`[.kw]#val# map : ('a \-> 'b) \-> 'a hash_table \-> 'b hash_table`:: + `map f tbl` creates a new table with an entry `(key1, key2, f item)` + in the new table for every `(key1, key2, item)` triple in `tbl`. + The exception for the new table is copied from `tbl`. + +`[.kw]#val# mapi : ((Key1.hash_key * Key2.hash_key * 'a) \-> 'b) \-> 'a hash_table \-> 'b hash_table`:: + `mapi f tbl` creates a new table with an entry `(key1, key2, f(key1, key2, item))` + in the new table for every `(key1, key2, item)` triple in `tbl`. + The exception for the new table is copied from `tbl`. + +`[.kw]#val# fold : (('a * 'b) \-> 'b) \-> 'b \-> 'a hash_table \-> 'b`:: + `fold f init tbl` folds the function `f` over the items in the range of `tbl` + using `init` as an initial value. + +`[.kw]#val# foldi : ((Key1.hash_key * Key2.hash_key * 'a * 'b) \-> 'b) \-> 'b \-> 'a hash_table \-> 'b`:: + `foldi f init tbl` folds the function `f` over the `(key1, key2, item)` + triples in `tbl` using `init` as an initial value. + +`[.kw]#val# filter : ('a \-> bool) \-> 'a hash_table \-> unit`:: + `filter pred tbl` removes any entry `(key1, key2, item)` from `tbl` for which + `pred item` returns `false`. + +`[.kw]#val# filteri : ((Key1.hash_key * Key2.hash_key * 'a) \-> bool) \-> 'a hash_table \-> unit`:: + `filteri pred tbl` removes any entry `(key1, key2, item)` from `tbl` for which + `pred(key1, key2, item)` returns `false`. + +`[.kw]#val# copy : 'a hash_table \-> 'a hash_table`:: + `copy tbl` creates a copy of `tbl`. This expression is equivalent to ++ +[source,sml] +------------ +map (fn x => x) tbl +------------ + +`[.kw]#val# bucketSizes : 'a hash_table \-> (int list * int list)`:: + `bucketSizes tbl` returns a list of the current number of items per + bucket for each of the tables. This function allows users to gauge + the quality of their hashing functions. + +== See Also + +xref:sig-HASH_KEY.adoc[`HASH_KEY`], +xref:fun-HashTableFn.adoc[`HashTableFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-HashSetFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-HashSetFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-HashSetFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-HashSetFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,225 @@ += The `HashSetFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `HashSetFn` functor provides a hash-table-based implementation +of imperative sets parameterized over a `Key` structure. + +== Synopsis + +[source,sml] +------------ +signature MONO_HASH_SET +functor HashSetFn (Key : HASH_KEY) : MONO_HASH_SET +------------ + +== Functor Argument Interface + +[source,sml] +------------ +Key : HASH_KEY +------------ + +== Functor Argument Description + +`Key : xref:sig:HASH_KEY.adoc[HASH_KEY]`:: + A structure that implements the xref:sig:HASH_KEY.adoc[HASH_KEY]` + signature, where xref:sig:HASH_KEY.adoc#type:hash_key[`Key.hash_key`] + will be the type of the elements in the hash set. + +== Interface + +[source,sml] +------------ +structure Key : HASH_KEY + +type item = Key.hash_key +type set + +val mkEmpty : int -> set + +val mkSingleton : item -> set + +val mkFromList : item list -> set + +val toList : set -> item list + +val add : set * item -> unit +val addc : set -> item -> unit + +val addList : set * item list -> unit + +val subtract : set * item -> unit +val subtractc : set -> item -> unit + +val subtractList : set * item list -> unit + +val delete : set * item -> bool + +val member : set * item -> bool + +val isEmpty : set -> bool + +val isSubset : (set * set) -> bool + +val numItems : set -> int + +val map : (item -> item) -> set -> set +val mapPartial : (item -> item option) -> set -> set +val app : (item -> unit) -> set -> unit +val fold : (item * 'b -> 'b) -> 'b -> set -> 'b + +val partition : (item -> bool) -> set -> (set * set) + +val filter : (item -> bool) -> set -> unit + +val exists : (item -> bool) -> set -> bool +val all : (item -> bool) -> set -> bool + +val find : (item -> bool) -> set -> item option + +val listItems : set -> item list +val without : set * item -> unit +------------ + +== Interface Description + +`[.kw]#structure# Key : HASH_KEY`:: + This substructure is the argument structure, which defines the type + of set elements, and hash and equality functions on the key type. + +`[.kw]#type# item = Key.hash_key`:: + The type of items in the sets. + +`[.kw]#type# set`:: + The type of imperative sets of items. + +`[.kw]#val# mkEmpty : int \-> set`:: + `mkEmpty n` creates an empty set that has initial space to store + at least `n` items. + +`[.kw]#val# mkSingleton : item \-> set`:: + `mkSingleton item` creates a set with `item` as its only initial element. + +`[.kw]#val# mkFromList : item list \-> set`:: + `mkFromList items` creates a set with `items` as its initial elements. + +[[val:toList]] +`[.kw]#val# toList : set \-> item list`:: + `toList set` returns a list of the items in `set`. + +`[.kw]#val# add : set * item \-> unit`:: + `add (set, item)` destructively adds the item to the set. + +`[.kw]#val# addc : set \-> item \-> unit`:: + `addc set item` destructively adds the item to the set. + +`[.kw]#val# addList : set * item list \-> unit`:: + `addList (set, items)` destructively adds the list of items to the set. + +[[val:subtract]] +`[.kw]#val# subtract : set * item \-> unit`:: + `subtract (set, item)` removes the object `item` from `set`; it has no + effect if `item` is not in `set`. + +`[.kw]#val# subtractc : set \-> item \-> unit`:: + `subtractc set item` removes the object `item` from `set`; it has no + effect if `item` is not in `set`. + +`[.kw]#val# subtractList : set \-> item list \-> unit`:: + `subtractList set items` removes the `items` from `set`. This expression + is equivalent to ++ +[source,sml] +------------ +List.app (subtractc set) items +------------ + +`[.kw]#val# delete : set * item \-> bool`:: + `subtract (set, item)` removes the object `item` from `set` (if present) + and returns `true` if the item was removed and `false` if it was not + present. + +`[.kw]#val# member : set * item \-> bool`:: + `member (item, set)` returns `true` if, and only if, `item` + is an element of `set`. + +`[.kw]#val# isEmpty : set \-> bool`:: + `isEmpty set` returns true if, and only if, `set` is empty. + +`[.kw]#val# isSubset : (set * set) \-> bool`:: + `isSubset (set1, set2)` returns true if, and only if, `set1` + is a subset of `set2` (_i.e._, any element of `set1` is an + element of `set2`). + +`[.kw]#val# numItems : set \-> int`:: + `numItems set` returns the number of items in the `set`. + +`[.kw]#val# map : (item \-> item) \-> set \-> set`:: + `map f set` creates a new set from the result of applying the + function `f` to the elements of `set`. This expression is + equivalent to ++ +[source,sml] +------------ +mkFromList (List.map f (toList set)) +------------ + +`[.kw]#val# mapPartial : (item \-> item option) \-> set \-> set`:: + `mapPartial f set` creates a new set from the result of applying the + partial function `f` to the elements of `set`. This expression is + equivalent to ++ +[source,sml] +------------ +mkFromList (List.mapPartial f (toList set)) +------------ + +`[.kw]#val# app : (item \-> unit) \-> set \-> unit`:: + `app f set` applies the function `f` to the items in `set`. + +`[.kw]#val# fold : (item * 'b \-> 'b) \-> 'b \-> set \-> 'b`:: + `foldl f init set` folds the function `f` over the items in + `set` using `init` as the initial value. + +`[.kw]#val# partition : (item \-> bool) \-> set \-> (set * set)`:: + `partition pred set` returns a pair of disjoint sets `(tSet, fSet)`, + where the predicate `pred` returns true for every element of `tSet`, + `false` for every element of `fSet`, and `set` is the union of `tSet` + and `fSet`. + +`[.kw]#val# filter : (item \-> bool) \-> set \-> unit`:: + `filter pred set` removes any elements of set for which the + predicate `pred` returns false. + +`[.kw]#val# exists : (item \-> bool) \-> set \-> bool`:: + `all pred set` returns `true` if, and only if, `pred item` returns + true for all elements `item` in `set`. Elements are checked in + an undefined order. + +`[.kw]#val# all : (item \-> bool) \-> set \-> bool`:: + `exists pred set` returns `true` if, and only if, there exists an + element `item` in `set` such that `pred item` returns `true`. + Elements are checked in an undefined order. + +`[.kw]#val# find : (item \-> bool) \-> set \-> item option`:: + `find pred set` returns `SOME item` if there exists an object `item` + in the set for which `pred item` returns `true`; otherwise `NONE` is + returned. Items are tested in an undefined order. + +=== Deprecated functions + +`[.kw]#val# without : set * item \-> unit`:: + Use xref:#val:subtract[`subtract`] instead. + +`[.kw]#val# listItems : set \-> item list`:: + Use xref:#val:toList[`toList`] instead. + +== See Also + +xref:sig-HASH_KEY.adoc[`HASH_KEY`], +xref:sig-ORD_SET.adoc[`ORD_SET`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-HashTableFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-HashTableFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-HashTableFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-HashTableFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,28 @@ += The `HashTableFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `HashTableFn` functor provides an implementation of the +xref:sig-MONO_HASH_TABLE.adoc[`MONO_HASH_TABLE`] signature parameterized +over the key type. + +The tables are implemented as an array of _buckets_, which are +lists of key-value pairs. The number of buckets grows with the number +of table entries. + +== Synopsis + +[source,sml] +------------ +functor HashTableFn (Key : HASH_KEY) : MONO_HASH_TABLE +------------ + +== See Also + +xref:sig-HASH_KEY.adoc[`HASH_KEY`], +xref:str-HashTable.adoc[`HashTable`], +xref:sig-MONO_HASH_TABLE.adoc[`MONO_HASH_TABLE`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-IntervalSetFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-IntervalSetFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-IntervalSetFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-IntervalSetFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,281 @@ += The `IntervalSetFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `IntervalSetFn` functor provides sets over a discrete ordered domain, +where the sets are represented by intervals. It is meant for representing +dense sets (__e.g.__, unicode character classes). + +== Synopsis + +[source,sml] +------------ +signature INTERVAL_SET +functor IntervalSetFn (D : INTERVAL_DOMAIN) : INTERVAL_SET +------------ + +== Functor Argument Description + +`D : xref:sig-INTERVAL_DOMAIN.adoc[INTERVAL_DOMAIN]`:: + The argument defines the type of points in the domain and + their order structure. + +== Interface + +[source,sml] +------------ +structure D : INTERVAL_DOMAIN + +type item = D.point +type interval = (item * item) +type set + +val empty : set +val universe : set + +val singleton : item -> set + +val interval : item * item -> set + +val isEmpty : set -> bool +val isUniverse : set -> bool + +val member : set * item -> bool + +val items : set -> item list + +val intervals : set -> interval list + +val add : set * item -> set +val add' : item * set -> set + +val addInt : set * interval -> set +val addInt' : interval * set -> set + +val complement : set -> set +val union : (set * set) -> set +val intersect : (set * set) -> set +val difference : (set * set) -> set + +val app : (item -> unit) -> set -> unit +val foldl : (item * 'a -> 'a) -> 'a -> set -> 'a +val foldr : (item * 'a -> 'a) -> 'a -> set -> 'a +val filter : (item -> bool) -> set -> set +val exists : (item -> bool) -> set -> bool +val all : (item -> bool) -> set -> bool + +val appInt : (interval -> unit) -> set -> unit +val foldlInt : (interval * 'a -> 'a) -> 'a -> set -> 'a +val foldrInt : (interval * 'a -> 'a) -> 'a -> set -> 'a +val filterInt : (interval -> bool) -> set -> set +val existsInt : (interval -> bool) -> set -> bool +val allInt : (interval -> bool) -> set -> bool + +val compare : set * set -> order +val isSubset : set * set -> bool +------------ + +== Interface Description + +`[.kw]#structure# D : INTERVAL_DOMAIN`:: + The argument structure. + +`[.kw]#type# item = D.point`:: + The type of items in the set. + +`[.kw]#type# interval = (item * item)`:: + A collection of items defined by an interval. + +`[.kw]#type# set`:: + The type of a set of items. + +`[.kw]#val# empty : set`:: + The empty set. + +`[.kw]#val# universe : set`:: + The set of all elements in the domain, which is specified as the + interval `(xref:sig-INTERVAL_DOMAIN.adoc#val:minPt[D.minPt], xref:sig-INTERVAL_DOMAIN.adoc#val:maxPt[D.maxPt])`. + +`[.kw]#val# singleton : item \-> set`:: + `singleton item` returns the singleton set containing `item`. + +`[.kw]#val# fromList : item list \-> set`:: + `fromList items` returns the set containing the list of items. + +`[.kw]#val# interval : item * item \-> set`:: + `singleton (pt1, pt2)` returns a set containing the items between + the items `pt1` and `pt2` (as ordered by + xref:sig-INTERVAL_DOMAIN.adoc#val:compare[`D.compare`]). + This expression raises the + {sml-basis-url}/general.html#SIG:GENERAL.Domain:EXN[`Domain`] exception + if `D.compare(pt1, pt2) = GREATER`. + +`[.kw]#val# isEmpty : set \-> bool`:: + `isEmpty set` returns `true` if, and only if, `set` is empty. + +`[.kw]#val# isUniverse : set \-> bool`:: + `isUniverse set` returns `true` if, and only if, `set` contains all of + the elements of the domain. + +`[.kw]#val# member : set * item \-> bool`:: + `isEmpty (set, item)` returns `true` if, and only if, `item` is contained + in `set`. + +[[val:toList]] +`[.kw]#val# toList : set \-> item list`:: + `toList set` returns a list of the items in `set`. The items will be + sorted in increasing order. + +`[.kw]#val# intervals : set \-> interval list`:: + `intervals set` returns a list of disjoint intervals that represents + the set. The intervals will be sorted in increasing order. + +`[.kw]#val# add : set * item \-> set`:: + `add (set, item)` adds `item` to `set` and returns the resulting set. + +`[.kw]#val# add' : item * set \-> set`:: + `add' (item, set)` adds `item` to `set` and returns the resulting set. + + (* add an interval to the set *) +`[.kw]#val# addInt : set * interval \-> set`:: + `addInt (set, (pt1, pt2))` adds the items between the items `pt1` and `pt2` + (as ordered by xref:sig-INTERVAL_DOMAIN.adoc#val:compare[`D.compare`]) + to `set`. This expression raises the + {sml-basis-url}/general.html#SIG:GENERAL.Domain:EXN[`Domain`] exception + if `D.compare(pt1, pt2) = GREATER`. + +`[.kw]#val# addInt' : interval * set \-> set`:: + `addInt' ((pt1, pt2), set)` adds the items between the items `pt1` and `pt2` + (as ordered by xref:sig-INTERVAL_DOMAIN.adoc#val:compare[`D.compare`]) + to `set`. This expression raises the + {sml-basis-url}/general.html#SIG:GENERAL.Domain:EXN[`Domain`] exception + if `D.compare(pt1, pt2) = GREATER`. + +`[.kw]#val# complement : set \-> set`:: + `complement set` returns the complement of `set` (_i.e._, the set of + items from the universe that are *not* in `set`). + +`[.kw]#val# union : (set * set) \-> set`:: + `union (set1, set2)` returns the union of `set1` and `set2`; + (_i.e._, the set of items that are in `set1` or in `set2`). + +`[.kw]#val# intersect : (set * set) \-> set`:: + `intersect (set1, set2)` returns the intersection of `set1` and `set2`; + (_i.e._, the set of items that are in both `set1` and`set2`). + +`[.kw]#val# difference : (set * set) \-> set`:: + `difference (set1, set2)` returns the set difference of `set1` and `set2`; + (_i.e._, the set of items that are in `set1`, but not in `set2`). + +`[.kw]#val# app : (item \-> unit) \-> set \-> unit`:: + `app f set` applies the function `f` to the items in `set`. + This expression is equivalent to ++ +[source,sml] +------------ +List.app f (toList set) +------------ + +`[.kw]#val# foldl : (item * 'a \-> 'a) \-> 'a \-> set \-> 'a`:: + `foldl f init set` folds the function `f` over the items in + `set` in increasing order using `init` as the initial value. + This expression is equivalent to ++ +[source,sml] +------------ +List.foldl f init (toList set) +------------ + +`[.kw]#val# foldr : (item * 'a \-> 'a) \-> 'a \-> set \-> 'a`:: + `foldr f init set` folds the function `f` over the items in + `set` in decreasing order using `init` as the initial value. + This expression is equivalent to ++ +[source,sml] +------------ +List.foldr f init (toList set) +------------ + +`[.kw]#val# filter : (item \-> bool) \-> set \-> set`:: + `filter pred set` filters out any items of set for which the + predicate `pred` returns false. + +`[.kw]#val# exists : (item \-> bool) \-> set \-> bool`:: + `exists pred set` returns `true` if, and only if, there is an item + in the set for which `pred` returns `true`. This function + short-circuits evaluation once an item is encountered for which + `pred` returns `true`. + +`[.kw]#val# all : (item \-> bool) \-> set \-> bool`:: + `all pred set` returns `true` if, and only if, `pred` returns `true` + for all items in the set. This function short-circuits evaluation + once an item is encountered for which `pred` returns `false`. + +`[.kw]#val# appInt : (interval \-> unit) \-> set \-> unit`:: + `appInt f set` applies the function `f` to the intervals in `set`. + This expression is equivalent to ++ +[source,sml] +------------ +List.app f (intervals set) +------------ + +`[.kw]#val# foldlInt : (interval * 'a \-> 'a) \-> 'a \-> set \-> 'a`:: + `foldlInt f init set` folds the function `f` over the intervals in + `set` in increasing order using `init` as the initial value. + This expression is equivalent to ++ +[source,sml] +------------ +List.foldl f init (intervals set) +------------ + +`[.kw]#val# foldrInt : (interval * 'a \-> 'a) \-> 'a \-> set \-> 'a`:: + `foldrInt f init set` folds the function `f` over the intervals in + `set` in decreasing order using `init` as the initial value. + This expression is equivalent to ++ +[source,sml] +------------ +List.foldr f init (intervals set) +------------ + +`[.kw]#val# filterInt : (interval \-> bool) \-> set \-> set`:: + `filterInt pred set` filters out any intervals of set for which the + predicate `pred` returns false. + +`[.kw]#val# existsInt : (interval \-> bool) \-> set \-> bool`:: + `existsInt pred set` returns `true` if, and only if, there is an interval + in the set for which `pred` returns `true`. This function + short-circuits evaluation once an interval is encountered for which + `pred` returns `true`. + +`[.kw]#val# allInt : (interval \-> bool) \-> set \-> bool`:: + `allInt pred set` returns `true` if, and only if, `pred` returns `true` + for all of the intervals in the set. This function short-circuits evaluation + once an interval is encountered for which `pred` returns `false`. + +`[.kw]#val# compare : set * set \-> order`:: + `compare (set1, set2)` returns the lexical order of + the two sets. + +`[.kw]#val# isSubset : set * set \-> bool`:: + `isSubset (set1, set2)` returns true if, and only if, `set1` + is a subset of `set2` (_i.e._, any element of `set1` is an + element of `set2`). + +=== Deprecated functions + +The following functions are part of the interface, but have been +deprecated. + +`[.kw]#val# items : set \-> item list``:: + Use xref:#val:toList[`toList`] instead. + +== See Also + +xref:sig-INTERVAL_DOMAIN.adoc[`INTERVAL_DOMAIN`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-KeywordFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-KeywordFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-KeywordFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-KeywordFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,82 @@ += The `KeywordFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `KeywordFn` functor provides a simple way to support a table of keyword +(or reserved) identifiers in a scanner. + +== Synopsis + +[source,sml] +------------ +functor KeywordFn () +------------ + +== Functor Argument Interface + +[source,sml] +------------ +type token +type pos +val ident : (Atom.atom * pos * pos) -> token +val keywords : (string * ((pos * pos) -> token)) list +------------ + +== Functor Argument Description + +`[.kw]#type# token`:: + The type of tokens in the scanner. + +`[.kw]#type# pos`:: + The type of source file positions used by the scanner (_e.g._, character + positions in the source file). + +[[val:ident]] +`[.kw]#val# ident : (Atom.atom * pos * pos) \-> token`:: + `ident (id, pos, pos)` is used to create an identifier token (_i.e._, non-keyword) + for the given string, and start and end file positions. + +[[val:keywords]] +`[.kw]#val# keywords : (string * ((pos * pos) \-> token)) list`:: + A list of string-function pairs, where the strings are the keywords and + the functions are used to create the corresponding scanner tokens from + start and end file positions. + +== Interface + +[source,sml] +------------ + type token + type pos + val keyword : (string * pos * pos) -> token +------------ + +== Interface Description + +`[.kw]#type# token`:: + The type of tokens in the scanner. + +`[.kw]#type# pos`:: + The type of source file positions used by the scanner. + +`[.kw]#val# keyword : (string * pos * pos) -> token`:: + `keyword (id, p1, p2)` returns the token for the identifier `id`, + which is either one of the keyword tokens from the + xref:#val:keywords[`keywords`] list or otherwise is an identifier + token created using the xref:#val:ident[`ident`] function. + +== Discussion + +This functor was designed for the https://smlnj.org/doc/ML-Yacc/index.html[*ml-yacc*] +scanner interface, where tokens contain their file position. It is not clear that +it adds much utility over just using the xref:str-Atom.adoc[`atom`] type, but +is maintained for backward compatibility. + +== See Also + +xref:str-Atom.adoc[`Atom`], +xref:sig-MONO_HASH_TABLE.adoc#str:AtomTable[`AtomTable`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-LeftPriorityQFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-LeftPriorityQFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-LeftPriorityQFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-LeftPriorityQFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,128 @@ += The `MONO_PRIORITYQ` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `LeftPriorityQFn` functor provides a functional implementation of priority +queues using leaftist heaps. + +== Synopsis + +[source,sml] +------------ +signature PRIORITY +signature MONO_PRIORITYQ +functor LeftPriorityQFn (P : PRIORITY) : MONO_PRIORITYQ +------------ + +== Functor Argument Interface + +[source,sml] +------------ +type priority +val compare : (priority * priority) -> order + +type item +val priority : item -> priority +------------ + +== Functor Argument Description + +`[.kw]#type# priority`:: + The abstract type of priority values. + +`[.kw]#val# compare : (priority * priority) \-> order`:: + `compare (pri1, pri2)` returns the order of the two priority values. + +`[.kw]#type# item`:: + The type of items in the priority queue. + +`[.kw]#val# priority : item \-> priority`:: + `priority item` returns the priority value for `item`. + +== Interface + +[source,sml] +------------ +type item +type queue + +val empty : queue + +val singleton : item -> queue + +val fromList : item list -> queue + +val insert : (item * queue) -> queue + +val remove : queue -> (item * queue) + +val next : queue -> (item * queue) option + +val findAndRemove : queue * (item -> bool) -> (item * queue) option + +val delete : queue * (item -> bool) -> queue + +val merge : (queue * queue) -> queue + +val numItems : queue -> int + +val isEmpty : queue -> bool +------------ + +== Interface Description + +`[.kw]#type# item`:: + The type of items in the priority queue. + +`[.kw]#type# queue`:: + The priority queue type. + +`[.kw]#val# empty : queue`:: + The empty priority queue. + +`[.kw]#val# singleton : item \-> queue`:: + `singleton item` returns a queue containing just `item`. + +`[.kw]#val# fromList : item list \-> queue`:: + `fromList items` returns a queue containing the `items`. + +`[.kw]#val# insert : (item * queue) \-> queue`:: + `insert (pq, item)` returns the queue that is `pq` with `item` added. + +`[.kw]#val# remove : queue \-> (item * queue)`:: + `remove pq` returns `(item, pq')`, where `item` is the highest priority item + in `pq` and ``pq'`` is the result of removing `item` from `pq`. This function + raises the {sml-basis-url}/list.html#SIG:LIST.Empty:EXN[Empty] exception + when `pq` is empty. + +`[.kw]#val# next : queue \-> (item * queue) option`:: + `remove pq` returns `SOME(item, pq')`, where `item` is the highest + priority item in `pq` and ``pq'`` is the result of removing `item` + from `pq`. If `pq` is empty, then `NONE` is returned. + +`[.kw]#val# findAndRemove : queue * (item -> bool) -> (item * queue) option`:: + `findAndRemove (pq, pred)` returns `SOME(item, pq')`, where `item` is the + highest priority item in `pq` such that `pred item` returns `true`, and + and ``pq'`` is the result of removing `item` from `pq`. If no such item + exists, then `NONE` is returned. + +`[.kw]#val# delete : queue * (item -> bool) -> queue`:: + `delete (pq, pred)` deletes any item in `pq` that satisfies the predicate + and returns the resulting queue. + +`[.kw]#val# merge : (queue * queue) \-> queue`:: + `merge (pq1, pq2)` returns the priority queue formed by merging the items in + the two queues. + +`[.kw]#val# numItems : queue \-> int`:: + `numItems pq` returns the number of items in `pq`. + +`[.kw]#val# isEmpty : queue \-> bool`:: + `isEmpty pq` returns `true` if, and only if, `pq` is empty. + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ListMapFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ListMapFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ListMapFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ListMapFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,26 @@ += The `ListMapFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ListMapFn` functor provides a sorted-list implementation of the +xref:sig-ORD_MAP.adoc[`ORD_MAP`] signature parameterized over the key type. +This implementation is light weight and fast for small domains, but +for larger applications, it is recommended that one use the +xref:fun-RedBlackMapFn.adoc[`RedBlackMapFn`] functor instead. + +== Synopsis + +[source,sml] +------------ +functor ListMapFn (K : ORD_KEY) :> ORD_MAP where type Key.ord_key = K.ord_key +------------ + +== See Also + +xref:sig-ORD_KEY.adoc[`ORD_KEY`], +xref:sig-ORD_MAP.adoc[`ORD_MAP`], +xref:fun-RedBlackMapFn.adoc[`RedBlackMapFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ListSetFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ListSetFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ListSetFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-ListSetFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,25 @@ += The `ListSetFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ListSetFn` functor provides a sorted-list implementation of the +xref:sig-ORD_SET.adoc[`ORD_SET`] signature parameterized over the element type. +This implementation is light weight and fast for small sets, but +for larger applications, it is recommended that one use the +xref:fun-RedBlackSetFn.adoc[`RedBlackSetFn`] functor instead. + +== Synopsis + +[source,sml] +------------ +functor ListSetFn (K : ORD_KEY) :> ORD_SET where type Key.ord_key = K.ord_key +------------ + +== See Also + +xref:sig-ORD_KEY.adoc[`ORD_KEY`], +xref:sig-ORD_SET.adoc[`ORD_SET`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-MonoArrayFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-MonoArrayFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-MonoArrayFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-MonoArrayFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ += The `MonoArrayFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `MonoArrayFn` functor allows easy construction of new monomorphic array +structures. + +== Synopsis + +[source,sml] +------------ +functor MonoArrayFn (type elem) :> MONO_ARRAY where type elem = elem +------------ + +== Description + +This functor takes an element type and defines a structure that +matches the +{sml-basis-url}/mono-array.html[`MONO_ARRAY`] +signature from the {sml-basis-url}/Basis/index.html[*SML Basis Library*], +which can then be supplied to other functors that require such +an argument. + +== See Also + +xref:fun-ArrayQSortFn.adoc[`ArrayQSortFn`], +xref:fun-BSearchFn.adoc[`BSearchFn`], +xref:fun-DynamicArrayFn.adoc[`DynamicArrayFn`], +{sml-basis-url}/Basis/mono-array.html[`MONO_ARRAY`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-RedBlackMapFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-RedBlackMapFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-RedBlackMapFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-RedBlackMapFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,25 @@ += The `RedBlackMapFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `RedBlackMapFn` functor provides a red-black-tree implementation of the +xref:sig-ORD_MAP.adoc[`ORD_MAP`] signature parameterized over the key type. + +This functor is the preferred implementation of finite maps over ordered +keys as it is faster than the other implementations. + +== Synopsis + +[source,sml] +------------ +functor RedBlackMapFn (K : ORD_KEY) :> ORD_MAP where type Key.ord_key = K.ord_key +------------ + +== See Also + +xref:sig-ORD_KEY.adoc[`ORD_KEY`], +xref:sig-ORD_MAP.adoc[`ORD_MAP`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-RedBlackSetFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-RedBlackSetFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-RedBlackSetFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-RedBlackSetFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,25 @@ += The `RedBlackSetFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `RedBlackSetFn` functor provides a red-black-tree implementation of the +xref:sig-ORD_SET.adoc[`ORD_SET`] signature parameterized over the element type. + +This functor is the preferred implementation of finite sets of ordered +elements as it is faster than the other implementations. + +== Synopsis + +[source,sml] +------------ +functor RedBlackSetFn (K : ORD_KEY) :> ORD_SET where type Key.ord_key = K.ord_key +------------ + +== See Also + +xref:sig-ORD_KEY.adoc[`ORD_KEY`], +xref:sig-ORD_SET.adoc[`ORD_SET`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-SplayMapFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-SplayMapFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-SplayMapFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-SplayMapFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,27 @@ += The `SplayMapFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `SplayMapFn` functor provides a splay-tree implementation of the +xref:sig-ORD_MAP.adoc[`ORD_MAP`] signature parameterized over the key type. + +It is recommended, however, that one use the xref:fun-RedBlackMapFn.adoc[`RedBlackMapFn`] +functor instead of `SplayMapFn`, since experimentation has shown it to be +faster across the board. + +== Synopsis + +[source,sml] +------------ +functor SplayMapFn (K : ORD_KEY) :> ORD_MAP where type Key.ord_key = K.ord_key +------------ + +== See Also + +xref:sig-ORD_KEY.adoc[`ORD_KEY`], +xref:sig-ORD_MAP.adoc[`ORD_MAP`], +xref:fun-RedBlackMapFn.adoc[`RedBlackMapFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-SplaySetFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-SplaySetFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-SplaySetFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/fun-SplaySetFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,27 @@ += The `SplaySetFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `SplaySetFn` functor provides a splay-tree implementation of the +xref:sig-ORD_SET.adoc[`ORD_SET`] signature parameterized over the element type. + +It is recommended, however, that one use the xref:fun-RedBlackSetFn.adoc[`RedBlackSetFn`] +functor instead of `SplaySetFn`, since experimentation has shown it to be +faster across the board. + +== Synopsis + +[source,sml] +------------ +functor SplaySetFn (K : ORD_KEY) :> ORD_SET where type Key.ord_key = K.ord_key +------------ + +== See Also + +xref:sig-ORD_KEY.adoc[`ORD_KEY`], +xref:sig-ORD_SET.adoc[`ORD_SET`], +xref:fun-RedBlackSetFn.adoc[`RedBlackSetFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/INSTANCES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/INSTANCES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/INSTANCES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/INSTANCES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,77 @@ +structure AtomBinaryMap +structure AtomBinarySet +structure AtomRedBlackMap +structure AtomRedBlackSet +structure IntBinaryMap +structure IntBinarySet +structure IntHashTable (* should be IntTable *) +structure IntListMap +structure IntListSet +structure IntRedBlackMap +structure IntRedBlackSet +structure WordHashTable (* should be WordTable *) +structure WordRedBlackMap +structure WordRedBlackSet +functor BinaryMapFn +functor BinarySetFn +functor ListMapFn +functor ListSetFn +functor RedBlackMapFn +functor RedBlackSetFn +functor SplayMapFn +functor SplaySetFn + + +signature HASH_KEY + +signature HASH_SET + functor HashSetFn + +signature MONO_ARRAY_SORT + structure ArrayQSort + functor ArrayQSortFn + +signature MONO_DYNAMIC_ARRAY + functor DynamicArrayFn + +signature MONO_HASH_TABLE + structure AtomTable :> MONO_HASH_TABLE + structure IntHashTable :> MONO_HASH_TABLE where type Key.hash_key = int + structure WordHashTable :> MONO_HASH_TABLE where type Key.hash_key = word + functor HashTableFn + +signature MONO_HASH2_TABLE + +signature MONO_PRIORITYQ + +signature ORD_KEY + +signature ORD_MAP + structure AtomBinaryMap + structure AtomRedBlackMap + structure IntBinaryMap + structure IntListMap + structure IntRedBlackMap + structure WordRedBlackMap + functor BinaryMapFn + functor ListMapFn + functor RedBlackMapFn + functor SplayMapFn + +signature ORD_SET + structure AtomBinarySet + structure AtomRedBlackSet + structure IntBinarySet + structure IntListSet + structure IntRedBlackSet + structure WordRedBlackSet + functor BinarySetFn + functor ListSetFn + functor RedBlackSetFn + functor SplaySetFn + +signature PRIORITY + +signature UREF + structure SimpleURef + structure URef diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,51 @@ +signature HASH_KEY +signature HASH_SET +signature MONO_ARRAY_SORT +signature MONO_DYNAMIC_ARRAY +signature MONO_HASH_TABLE +signature MONO_PRIORITYQ +signature ORD_KEY +signature ORD_MAP +signature ORD_SET +signature PRIORITY +signature UREF +structure ANSITerm +structure Atom +structure Base64 +structure BitArray +structure BitVector +structure CharMap +structure DynamicArray +structure Fifo +structure FNVHash +structure Format +structure FormatComb +structure HashString +structure HashTable +structure IOUtil +structure GetOpt +structure LibBase +structure ListFormat +structure ListMergeSort +structure ListXProd +structure ParserComb +structure PathUtil +structure PrimeSizes +structure PropList +structure Queue +structure Rand +structure Random +structure Scan +structure SplayTree +structure TimeLimit +structure RealOrderStats +structure UnivariateStats +structure UTF8 +functor BSearchFn +functor GraphSCCFn +functor HashSetFn +functor HashTableFn +functor Hash2TableFn +functor IntervalSetFn +functor KeywordFn +functor MonoArrayFn diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-HASH_KEY.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-HASH_KEY.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-HASH_KEY.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-HASH_KEY.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,52 @@ += The `HASH_KEY` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `HASH_KEY` signature describes a monomorphic type with an equality +test and hashing function. It is used as the argument signature for +the xref:fun-HashSetFn.adoc[`HashSetFn`] and xref:fun-HashTableFn.adoc[`HashTableFn`] +functors, and as a sub-structure signature in the +xref:fun-HashSetFn.adoc[`MONO_HASH_SET`] and +xref:fun-HashTableFn.adoc[`MONO_HASH_TABLE`] signatures. + +== Synopsis + +[source,sml] +------------ +signature HASH_KEY +------------ + +== Interface + +[source,sml] +------------ +type hash_key + +val hashVal : hash_key -> word + +val sameKey : (hash_key * hash_key) -> bool +------------ + +== Description + +[[type:hash_key]] +`[.kw]#type# hash_key`:: + The type of key values. + +`[.kw]#val# hashVal : hash_key \-> word`:: + `hashVal key` returns a hash value for the key. + +`[.kw]#val# sameKey : (hash_key * hash_key) \-> bool`:: + `sameKey (key1, key2)` returns true of two hash keys are equal. + Implementations of this signature should ensure that if + `sameKey (key1, key2)`, then `hashVal key1 = hashVal key2`. + +== See Also + +xref:fun-HashSetFn.adoc[`HashSetFn`], +xref:fun-HashTableFn.adoc[`HashTableFn`], +xref:sig-MONO_HASH_TABLE.adoc[`MONO_HASH_TABLE`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-INTERVAL_DOMAIN.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-INTERVAL_DOMAIN.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-INTERVAL_DOMAIN.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-INTERVAL_DOMAIN.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,94 @@ += The `INTERVAL_DOMAIN` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `INTERVAL_DOMAIN` signature defines a representation of an +abstract ordered domain. It is required that the domain +consist of discrete values that are totally orders and that there +be a minimum and maximum value. This signature is used as the +argument signature for the xref:fun-IntervalSetFn.adoc[`IntervalSetFn`] +functor. + +== Synopsis + +[source,sml] +------------ +signature INTERVAL_DOMAIN +------------ + +== Interface + +[source,sml] +------------ +type point + +val compare : (point * point) -> order + +val succ : point -> point +val pred : point -> point + +val isSucc : (point * point) -> bool + +val minPt : point +val maxPt : point +------------ + +== Description + +`[.kw]#type# point`:: + The abstract type of elements in the ordered domain. + +[[val:compare]] +`[.kw]#val# compare : (point * point) \-> order`:: + `compare (pt1, pt2)` returns the relation between two points + in the domain. + +`[.kw]#val# succ : point \-> point`:: + `succ item` returns the successor to `item`. If `item` is + the maximum element (xref:#val:maxPt[`maxPt`]), then `maxPt` is + returned. + +`[.kw]#val# pred : point \-> point`:: + `succ item` returns the successor to `item`. If `item` is + the minimum element (xref:#val:minPt[`minPt`]), then `minPt` is + returned. + +`[.kw]#val# isSucc : (point * point) \-> bool`:: + `isSucc (pt1, pt2)` returns `true` if `pt1` is the predecessor + of `pt2` and `pt2 is the successor of `pt1`. + +[[val:minPt]] +`[.kw]#val# minPt : point`:: + The minimum point in the domain. + +[[val:maxPt]] +`[.kw]#val# maxPt : point`:: + The maximum point in the domain. + +== Example + +Here is an example of the 8-bit character type as an interval domain. + +[source,sml] +------------ +structure CharDom : INTERVAL_DOMAIN = + struct + type point = char + val compare = Char.compare + fun succ #"\255" = #"\255" + | succ c = chr(ord c + 1) + fun pred #"\000" = #"\000" + | pred c = chr(ord c - 1) + fun isSucc (c1, c2) = (ord c1 + 1 = ord c2) + val minPt = #"\000" + val maxPt = #"\255" + end +------------ + +== See Also + +xref:fun-IntervalSetFn.adoc[`IntervalSetFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-MONO_HASH_TABLE.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-MONO_HASH_TABLE.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-MONO_HASH_TABLE.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-MONO_HASH_TABLE.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,198 @@ += The `MONO_HASH_TABLE` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `MONO_HASH_TABLE` signature defines an interface to imperative hash +tables with monomorphic keys. The **SML/NJ Library** provides two +specialized implementations of this signature, as well as a functor for +constructing additional implementations. + +The tables are implemented as an array of _buckets_, which are +lists of key-value pairs. The number of buckets grows with the number +of table entries. + +== Synopsis + +[source,sml] +------------ +signature MONO_HASH_TABLE + +structure AtomTable :> MONO_HASH_TABLE where type Key.hash_key = Atom.atom +structure IntHashTable :> MONO_HASH_TABLE where type Key.hash_key = int +structure WordHashTable :> MONO_HASH_TABLE where type Key.hash_key = word +------------ + +== Interface + +[source,sml] +------------ +structure Key : HASH_KEY + +type 'a hash_table + +val mkTable : (int * exn) -> 'a hash_table + +val clear : 'a hash_table -> unit + +val insert : 'a hash_table -> (Key.hash_key * 'a) -> unit + +val inDomain : 'a hash_table -> Key.hash_key -> bool + +val lookup : 'a hash_table -> Key.hash_key -> 'a +val find : 'a hash_table -> Key.hash_key -> 'a option + +val remove : 'a hash_table -> Key.hash_key -> 'a + +val numItems : 'a hash_table -> int + +val listItems : 'a hash_table -> 'a list +val listItemsi : 'a hash_table -> (Key.hash_key * 'a) list + +val app : ('a -> unit) -> 'a hash_table -> unit +val appi : ((Key.hash_key * 'a) -> unit) -> 'a hash_table -> unit + +val map : ('a -> 'b) -> 'a hash_table -> 'b hash_table +val mapi : ((Key.hash_key * 'a) -> 'b) -> 'a hash_table -> 'b hash_table + +val fold : (('a * 'b) -> 'b) -> 'b -> 'a hash_table -> 'b +val foldi : ((Key.hash_key * 'a * 'b) -> 'b) -> 'b -> 'a hash_table -> 'b + +val modify : ('a -> 'a) -> 'a hash_table -> unit +val modifyi : ((Key.hash_key * 'a) -> 'a) -> 'a hash_table -> unit + +val filter : ('a -> bool) -> 'a hash_table -> unit +val filteri : ((Key.hash_key * 'a) -> bool) -> 'a hash_table -> unit + +val copy : 'a hash_table -> 'a hash_table + +val bucketSizes : 'a hash_table -> int list +------------ + +== Description + +`[.kw]#structure# Key : HASH_KEY`:: + This substructure defines the type of keys used to index the tables and + hash and equality functions on the key type. + +`[.kw]#type# 'a hash_table`:: + The type of imperative hash tables indexed by `Key.hash_key` values + +`[.kw]#val# mkTable : (int * exn) \-> 'a hash_table`:: + `mkTable (n, ex)` creates a new hash table; the table will be initially + sized to hold at least `n` items. The exception `ex` is raised by the + xref:#val:lookup[`lookup`] and xref:#val:remove[`remove`] functions + when the search key is not in the domain. + +`[.kw]#val# clear : 'a hash_table \-> unit`:: + `clear tbl` removes all of the entries in the table. + +`[.kw]#val# insert : 'a hash_table \-> (Key.hash_key * 'a) \-> unit`:: + `insert tbl (key, item)` inserts a mapping from `key` to `item` into `tbl`. + Any existing mapping of `key` is discarded. + +`[.kw]#val# inDomain : 'a hash_table \-> Key.hash_key \-> bool`:: + `inDomain tbl key` returns `true` if, and only if, `key` is in the + domain of the table + +[[val:lookup]] +`[.kw]#val# lookup : 'a hash_table \-> Key.hash_key \-> 'a`:: + `lookup tbl key` returns the item that `key` maps to if `key` is in + the domain of `tbl`. Otherwise, the table's exception is raised. + +`[.kw]#val# find : 'a hash_table \-> Key.hash_key \-> 'a option`:: + `find tbl key` returns the `SOME v` if `key` is mapped to `v` in `tbl`. + Otherwise, it returns `NONE`. + +[[val:remove]] +`[.kw]#val# remove : 'a hash_table \-> Key.hash_key \-> 'a`:: + `remove tbl key` returns the item that `key` maps to if `key` is in + the domain of `tbl` and removes it from the table. Otherwise, the + table's exception is raised. + +`[.kw]#val# numItems : 'a hash_table \-> int`:: + `numItems tbl` returns the number of entries in the table. + +`[.kw]#val# listItems : 'a hash_table \-> 'a list`:: + `listItems tbl` returns a list of the items in the range of `tbl`. + +`[.kw]#val# listItemsi : 'a hash_table \-> (Key.hash_key * 'a) list`:: + `listItemsi tbl` returns a list of the key-value entries in `tbl`. + +`[.kw]#val# app : ('a \-> unit) \-> 'a hash_table \-> unit`:: + `app f tbl` applies the function `f` to each item in the range of `tbl`. + +`[.kw]#val# appi : ((Key.hash_key * 'a) \-> unit) \-> 'a hash_table \-> unit`:: + `appi f tbl` applies the function `f` to each item in the + key-value entries in `tbl`. + +`[.kw]#val# map : ('a \-> 'b) \-> 'a hash_table \-> 'b hash_table`:: + `map f tbl` creates a new table with an entry `(key, f(lookup tbl key))` + in the new table for every `key` in `tbl`. The exception for the new + table is copied from `tbl`. + +`[.kw]#val# mapi : ((Key.hash_key * 'a) \-> 'b) \-> 'a hash_table \-> 'b hash_table`:: + `mapi f tbl` creates a new table with an entry `(key, f(key, lookup tbl key))` + in the new table for every `key` in `tbl`. The exception for the new + table is copied from `tbl`. + +`[.kw]#val# fold : (('a * 'b) \-> 'b) \-> 'b \-> 'a hash_table \-> 'b`:: + `fold f init tbl` folds the function `f` over the items in the range of `tbl` + using `init` as an initial value. + +`[.kw]#val# foldi : ((Key.hash_key * 'a * 'b) \-> 'b) \-> 'b \-> 'a hash_table \-> 'b`:: + `foldi f init tbl` folds the function `f` over the key-value entries in `tbl` + using `init` as an initial value. + +`[.kw]#val# modify : ('a \-> 'a) \-> 'a hash_table \-> unit`:: + `modify f tbl` applies the function `f` for effect to the items in the + range of `tbl`, replacing the old items with the result of applying `f`. + +`[.kw]#val# modifyi : ((Key.hash_key * 'a) \-> 'a) \-> 'a hash_table \-> unit`:: + `modifyi f tbl` applies the function `f` for effect to the key-value + entries in `tbl`, replacing the old items with the result of applying `f`. + +`[.kw]#val# filter : ('a \-> bool) \-> 'a hash_table \-> unit`:: + `filter pred tbl` removes any entry `(key, item)` from `tbl` for which + `pred item` returns `false`. + +`[.kw]#val# filteri : ((Key.hash_key * 'a) \-> bool) \-> 'a hash_table \-> unit`:: + `filteri pred tbl` removes any entry `(key, item)` from `tbl` for which + `pred(key, item)` returns `false`. + +`[.kw]#val# copy : 'a hash_table \-> 'a hash_table`:: + `copy tbl` creates a copy of `tbl`. This expression is equivalent to ++ +[source,sml] +------------ +map (fn x => x) tbl +------------ + +`[.kw]#val# bucketSizes : 'a hash_table \-> int list`:: + `bucketSizes tbl` returns a list of the current number of items per + bucket. This function allows users to gauge the quality of their + hashing function. + +== Instances + +[[str:AtomTable]] +`[.kw]#structure# AtomTable`:: + This structure implements hash tables keyed by the + xref:str-Atom.adoc#type:atom[`Atom.atom`] type. + +[[str:IntHashTable]] +`[.kw]#structure# IntHashTable`:: + This structure implements hash tables keyed by the default `int` type. + +[[str:WordHashTable]] +`[.kw]#structure# WordHashTable`:: + This structure implements hash tables keyed by the default `word` type. + +== See Also + +xref:sig-HASH_KEY.adoc[`HASH_KEY`], +xref:str-HashTable.adoc[`HashTable`], +xref:fun-HashTableFn.adoc[`HashTableFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_KEY.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_KEY.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_KEY.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_KEY.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,42 @@ += The `ORD_KEY` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ORD_KEY` signature defines an interface to an abstract type +of keys with a comparison function. This signature is used as +the argument to various implementations of finite maps and sets. + +== Synopsis + +[source,sml] +------------ +signature ORD_KEY +------------ + +== Interface + +[source,sml] +------------ +type ord_key + +val compare : ord_key * ord_key -> order +------------ + +== Description + +`[.kw]#type# ord_key`:: + The abstract key type. + +`[.kw]#val# compare : ord_key * ord_key \-> order`:: + `compare (k1, k2)` returns the relation between the two keys. This + function should define a *total* order on the `ord_key` type. + +== See Also + +xref:sig-ORD_MAP.adoc[`ORD_MAP`], +xref:sig-ORD_SET.adoc[`ORD_SET`], +xref:fun-GraphSCCFn.adoc[`GraphSCCFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_MAP.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_MAP.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_MAP.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_MAP.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,400 @@ += The `ORD_MAP` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ORD_MAP` signature defines an interface to finite maps +over ordered keys. The **SML/NJ Library** provides a number of +different implementations of this interface. Functors are +provided for constructing maps for user-defined key types; +in addition, a number of instances for specific types +are also provided. + +== Synopsis + +[source,sml] +------------ +signature ORD_MAP + +structure AtomMap : ORD_MAP where type Key.ord_key = Atom.atom +structure AtomBinaryMap : ORD_MAP where type Key.ord_key = Atom.atom +structure AtomRedBlackMap : ORD_MAP where type Key.ord_key = Atom.atom +structure IntBinaryMap : ORD_MAP where type Key.ord_key = int +structure IntListMap : ORD_MAP where type Key.ord_key = int +structure IntRedBlackMap : ORD_MAP where type Key.ord_key = int +structure WordRedBlackMap : ORD_MAP where type Key.ord_key = word +------------ + +== Interface + +[source,sml] +------------ +structure Key : ORD_KEY + +type 'a map + +val empty : 'a map + +val isEmpty : 'a map -> bool + +val singleton : (Key.ord_key * 'a) -> 'a map + +val insert : 'a map * Key.ord_key * 'a -> 'a map +val insert' : ((Key.ord_key * 'a) * 'a map) -> 'a map + +val insertWith : ('a * 'a -> 'a) -> 'a map * Key.ord_key * 'a -> 'a map +val insertWithi : (Key.ord_key * 'a * 'a -> 'a) -> 'a map * Key.ord_key * 'a -> 'a map + +val find : 'a map * Key.ord_key -> 'a option + +val lookup : 'a map * Key.ord_key -> 'a + +val inDomain : ('a map * Key.ord_key) -> bool + +val remove : 'a map * Key.ord_key -> 'a map * 'a + +val first : 'a map -> 'a option +val firsti : 'a map -> (Key.ord_key * 'a) option + +val numItems : 'a map -> int + +val listItems : 'a map -> 'a list +val listItemsi : 'a map -> (Key.ord_key * 'a) list + +val listKeys : 'a map -> Key.ord_key list + +val collate : ('a * 'a -> order) -> ('a map * 'a map) -> order + +val unionWith : ('a * 'a -> 'a) -> ('a map * 'a map) -> 'a map +val unionWithi : (Key.ord_key * 'a * 'a -> 'a) -> ('a map * 'a map) -> 'a map + +val intersectWith : ('a * 'b -> 'c) -> ('a map * 'b map) -> 'c map +val intersectWithi : (Key.ord_key * 'a * 'b -> 'c) -> ('a map * 'b map) -> 'c map + +val mergeWith : ('a option * 'b option -> 'c option) + -> ('a map * 'b map) -> 'c map +val mergeWithi : (Key.ord_key * 'a option * 'b option -> 'c option) + -> ('a map * 'b map) -> 'c map + +val app : ('a -> unit) -> 'a map -> unit +val appi : ((Key.ord_key * 'a) -> unit) -> 'a map -> unit + +val map : ('a -> 'b) -> 'a map -> 'b map +val mapi : (Key.ord_key * 'a -> 'b) -> 'a map -> 'b map + +val foldl : ('a * 'b -> 'b) -> 'b -> 'a map -> 'b +val foldli : (Key.ord_key * 'a * 'b -> 'b) -> 'b -> 'a map -> 'b +val foldr : ('a * 'b -> 'b) -> 'b -> 'a map -> 'b +val foldri : (Key.ord_key * 'a * 'b -> 'b) -> 'b -> 'a map -> 'b + +val filter : ('a -> bool) -> 'a map -> 'a map +val filteri : (Key.ord_key * 'a -> bool) -> 'a map -> 'a map + +val mapPartial : ('a -> 'b option) -> 'a map -> 'b map +val mapPartiali : (Key.ord_key * 'a -> 'b option) -> 'a map -> 'b map + +val exists : ('a -> bool) -> 'a map -> bool +val existsi : (Key.ord_key * 'a -> bool) -> 'a map -> bool +val all : ('a -> bool) -> 'a map -> bool +val alli : (Key.ord_key * 'a -> bool) -> 'a map -> bool +------------ + +== Description + +`[.kw]#structure# Key : ORD_KEY`:: + This substructure defines the type of keys used to index the maps and + the comparison function used to order them. + +`[.kw]#type# 'a map`:: + A finite map from `Key.ord_key` values to ``'b`` values. + +`[.kw]#val# empty : 'a map`:: + The empty map. + +`[.kw]#val# isEmpty : 'a map \-> bool`:: + `isEmpty m` returns true if, and only if, `m` is empty. + +`[.kw]#val# singleton : (Key.ord_key * 'a) \-> 'a map`:: + `singleton (key, v)` creates the singleton map that maps `key` to `v`. + +`[.kw]#val# insert : 'a map * Key.ord_key * 'a \-> 'a map`:: + `insert (m, key, v)` adds the mapping from `key` to `v` to `m`. + This mapping overrides any previous mapping from `key`. + +`[.kw]#val# insert' : ((Key.ord_key * 'a) * 'a map) \-> 'a map`:: + `insert' ((key, v), map)` adds the mapping from `key` to `v` to `m`. + This mapping overrides any previous mapping from `key`. + +`[.kw]#val# insertWith : ('a * 'a \-> 'a) \-> 'a map * Key.ord_key * 'a \-> 'a map`:: + `insertWith comb (m, key, v)` adds the mapping from `key` to `value` to `m`, + where `value = comb(v', v)`, if `m` already contained a mapping from `key` + to `v'`; otherwise, `value = v`. + +`[.kw]#val# insertWithi : (Key.ord_key * 'a * 'a \-> 'a) \-> 'a map * Key.ord_key * 'a \-> 'a map`:: + `insertWithi comb (m, key, v)` adds the mapping from `key` to `value` to `m`, + where `value = comb(key, v', v)`, if `m` already contained a mapping from `key` + to `v'`; otherwise, `value = v`. + +`[.kw]#val# find : 'a map * Key.ord_key \-> 'a option`:: + `find (m, key)` returns `SOME v`, if `m` maps `key` to `v` and `NONE` otherwise. + +`[.kw]#val# lookup : 'a map * Key.ord_key \-> 'a`:: + `lookup (m, key)` returns `v`, if `m` maps `key` to `v`; otherwise it + raises the exception xref:str-LibBase.adoc#exn:NotFound[`NotFound`]. + +`[.kw]#val# inDomain : ('a map * Key.ord_key) \-> bool`:: + `inDomain (m, key)` returns `true` if `key` is in the domain of `m`. + +`[.kw]#val# remove : 'a map * Key.ord_key \-> 'a map * 'a`:: + `remove (m, key)` returns the pair `(m', v)`, if `m` maps `key` to `v` + and where `m'` is `m` with `key` removed from its domain. If `key` + is not in the domain of `m`, then it raises the exception + xref:str-LibBase.adoc#exn:NotFound[`NotFound`]. + +`[.kw]#val# first : 'a map \-> 'a option`:: + `first m` returns `SOME item` when `item` is the value associated with + the first (or smallest) key in the domain of the map `m`. It returns + `NONE` when the map is empty. + +`[.kw]#val# firsti : 'a map \-> (Key.ord_key * 'a) option`:: + `first m` returns `SOME(key, item)` when `key` is the first (or smallest) + key in the domain of the map `m` and `key` maps to `item`. It returns + `NONE` when the map is empty. + +`[.kw]#val# numItems : 'a map \-> int`:: + `numItems m` returns the size of ``m``'s domain. + +`[.kw]#val# listItems : 'a map \-> 'a list`:: + `listItems m` returns a list of the values in the _range_ of `m`. + Note that this list will contain duplicates when multiple keys in + ``m``'s domain map to the same value. + +`[.kw]#val# listItemsi : 'a map \-> (Key.ord_key * 'a) list`:: + `listItemsi m` returns a list of the key-value pairs in `m`. + +`[.kw]#val# listKeys : 'a map \-> Key.ord_key list`:: + `listKeys m` returns a list of the keys in the domain of `m`. + +`[.kw]#val# collate : ('a * 'a \-> order) \-> ('a map * 'a map) \-> order`:: + `collate cmpV (m1, m2)` returns the order of the two maps, where `cmpV` is + used to compare the values in the domain. + +`[.kw]#val# unionWith : ('a * 'a \-> 'a) \-> ('a map * 'a map) \-> 'a map`:: + `unionWith comb (m1, m2)` returns the union of the two maps, using the function `comb` + to combine values when there is a collision of keys. More formally, this expression + returns the map ++ +[latexmath] ++++++++++++ + \begin{array}{l} + \{ (k, \mathtt{m1}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \setminus \mathbf{dom}(\mathtt{m2}) \} + \cup \\ + \{ (k, \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m2}) \setminus \mathbf{dom}(\mathtt{m1}) \} + \cup \\ + \{ (k, \mathtt{comb}(\mathtt{m1}(k), \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \cap \mathbf{dom}(\mathtt{m2}) \} + \end{array} ++++++++++++ ++ +For example, we could implement a _multiset_ of keys by mapping keys to their +multiplicity. Then, the union of two multisets could be defined by ++ +[source,sml] +------------ +fun union (ms1, ms2) = unionWith Int.+ (ms1, ms2) +------------ + +`[.kw]#val# unionWithi : (Key.ord_key * 'a * 'a \-> 'a) \-> ('a map * 'a map) \-> 'a map`:: + `unionWithi comb (m1, m2)` returns the union of the two maps, using the function `comb` + to combine values when there is a collision of keys. More formally, this expression + returns the map ++ +[latexmath] ++++++++++++ + \begin{array}{l} + \{ (k, \mathtt{m1}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \setminus \mathbf{dom}(\mathtt{m2}) \} + \cup \\ + \{ (k, \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m2}) \setminus \mathbf{dom}(\mathtt{m1}) \} + \cup \\ + \{ (k, \mathtt{comb}(k, \mathtt{m1}(k), \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \cap \mathbf{dom}(\mathtt{m2}) \} + \end{array} ++++++++++++ + +`[.kw]#val# intersectWith : ('a * 'b \-> 'c) \-> ('a map * 'b map) \-> 'c map`:: + `intersectWith comb (m1, m2)` returns the intersection of the two maps, + where the values in the range are a computed by applying the function + `comb` to the values from the two maps. More formally, this expression + returns the map ++ +[latexmath] ++++++++++++ + \{ (k, \mathtt{comb}(\mathtt{m1}(k), \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \cap \mathbf{dom}(\mathtt{m2}) \} ++++++++++++ + +`[.kw]#val# intersectWithi : (Key.ord_key * 'a * 'b \-> 'c) \-> ('a map * 'b map) \-> 'c map`:: + `intersectWithi comb (m1, m2)` returns the intersection of the two maps, + where the values in the range are a computed by applying the function + `comb` to the kay and the values from the two maps. More formally, this + expression returns the map ++ +[latexmath] ++++++++++++ + \{ (k, \mathtt{comb}(k, \mathtt{m1}(k), \mathtt{m2}(k)) + \;|\;k \in \mathbf{dom}(\mathtt{m1}) \cap \mathbf{dom}(\mathtt{m2}) \} ++++++++++++ + +`[.kw]#val# mergeWith : ('a option * 'b option \-> 'c option) \-> ('a map * 'b map) \-> 'c map`:: + `mergeWith comb (m1, m2)` merges the two maps using the function `comb` + as a decision procedure for adding elements to the new map. For each key + latexmath:[\mathtt{key} \in \mathbf{dom}(\mathtt{m1}) \cup \mathbf{dom}(\mathtt{m2})], + we evaluate `comb(optV1, optV2)`, where `optV1` is `SOME v` if + latexmath:[(\mathtt{key}, \mathtt{v}) \in \mathtt{m1}] and is `NONE` if + latexmath:[\mathtt{key} \not\in \mathbf{dom}(\mathtt{m1}); likewise for `optV2`. + If `comb(optV1, optV2)` returns ``SOME v'``, then we add ``(key, v')`` + to the result. ++ +The `mergeWith` function is a generalization of the `unionWith` and +`intersectionWith` functions. + +`[.kw]#val# mergeWithi : (Key.ord_key * 'a option * 'b option \-> 'c option) \-> ('a map * 'b map) \-> 'c map`:: + `mergeWithi comb (m1, m2)` merges the two maps using the function `comb` + as a decision procedure for adding elements to the new map. The difference + between this function and `mergeWith` is that the `comb` function takes the + `key` value in addition to the optional values from the range. + +`[.kw]#val# app : ('a \-> unit) \-> 'a map \-> unit`:: + `app f m` applies the function `f` to the values in the range of `m`. + +`[.kw]#val# appi : ((Key.ord_key * 'a) \-> unit) \-> 'a map \-> unit`:: + `appi f map` applies the function `f` to the key-value pairs that + define `m`. + +`[.kw]#val# map : ('a \-> 'b) \-> 'a map \-> 'b map`:: + `map f m` creates a new finite map ``m'`` by applying the function `f` to the + values in the range of `m`. Thus, if + latexmath:[(\mathtt{key}, \mathtt{v}) \in \mathtt{m}], then + `(key, f v)` will be in ``m'``. + +`[.kw]#val# mapi : (Key.ord_key * 'a \-> 'b) \-> 'a map \-> 'b map`:: + `mapi f m` creates a new finite map ``m'`` by applying the function `f` to the + key-value pairs of `m`. Thus, if + latexmath:[(\mathtt{key}, \mathtt{v}) \in \mathtt{m}], then + `(key, f(key, v))` will be in ``m'``. + +`[.kw]#val# foldl : ('a * 'b \-> 'b) \-> 'b \-> 'a map \-> 'b`:: + `foldl fl init m` folds the function `f` over the range of + `m` using `init` as the initial value. Items are processed in + increasing order of their key values. + +`[.kw]#val# foldli : (Key.ord_key * 'a * 'b \-> 'b) \-> 'b \-> 'a map \-> 'b`:: + `foldli f init m` folds the function `f` over the key-value pairs in + `m` using `init` as the initial value. Items are processed in + increasing order of their key values. + +`[.kw]#val# foldr : ('a * 'b \-> 'b) \-> 'b \-> 'a map \-> 'b`:: + `foldr fl init m` folds the function `f` over the range of + `m` using `init` as the initial value. Items are processed in + decreasing order of their key values. + +`[.kw]#val# foldri : (Key.ord_key * 'a * 'b \-> 'b) \-> 'b \-> 'a map \-> 'b`:: + `foldri f init m` folds the function `f` over the key-value pairs in + `m` using `init` as the initial value. Items are processed in + decreasing order of their key values. + +`[.kw]#val# filter : ('a \-> bool) \-> 'a map \-> 'a map`:: + `filter pred m` filters out those items `(key, v)` from `m`, such that + `pred v` returns `false`. More formally, this expression returns the map + latexmath:[\{ (\mathtt{key}, \mathtt{v})\;|\;\mathtt{key} \in \mathbf{dom}(\mathtt{m}) + \wedge \mathtt{pred}(\mathtt{v}) \}]. + +`[.kw]#val# filteri : (Key.ord_key * 'a \-> bool) \-> 'a map \-> 'a map`:: + `filteri pred m` filters out those items `(key, v)` from `m`, such that + `pred(key, v)` returns `false`. More formally, this expression returns the map + latexmath:[\{ (\mathtt{key}, \mathtt{v})\;|\;\mathtt{key} \in \mathbf{dom}(\mathtt{m}) + \wedge \mathtt{pred}(\mathtt{key}, \mathtt{v}) \}]. + +`[.kw]#val# mapPartial : ('a \-> 'b option) \-> 'a map \-> 'b map`:: + `mapPartial f m` maps the partial function `f` over the items of `m`. + More formally, this expression returns the map +[latexmath] ++++++++++++ + \{ (k, v') \;|\; (k, v) \in \mathtt{m} \wedge \mathtt{f}(v) = \mathtt{SOME}(v') \} ++++++++++++ + +`[.kw]#val# mapPartiali : (Key.ord_key * 'a \-> 'b option) \-> 'a map \-> 'b map`:: + `mapPartiali f m` maps the partial function `f` over the items of `m`. + More formally, this expression returns the map +[latexmath] ++++++++++++ + \{ (k, v') \;|\; (k, v) \in \mathtt{m} \wedge \mathtt{f}(k, v) = \mathtt{SOME}(v') \} ++++++++++++ + +`[.kw]#val# exists : ('a \-> bool) \-> 'a map \-> bool`:: + `exists pred m` returns `true` if, and only if, there exists an item + latexmath:[(\mathtt{key}, \mathtt{v}) \in \mathtt{m}], + such that `pred v` returns `true`. + +`[.kw]#val# existsi : (Key.ord_key * 'a \-> bool) \-> 'a map \-> bool`:: + `exists pred m` returns `true` if, and only if, there exists an item + latexmath:[(\mathtt{key}, \mathtt{v}) \in \mathtt{m}], such that + `pred(key, v)` returns `true`. + +`[.kw]#val# all : ('a \-> bool) \-> 'a map \-> bool`:: + `all pred m` returns `true` if, and only if, `pred v` returns `true` + for all items latexmath:[(\mathtt{key}, \mathtt{v}) \in \mathtt{m}]. + +`[.kw]#val# alli : (Key.ord_key * 'a \-> bool) \-> 'a map \-> bool`:: + `all pred m` returns `true` if, and only if, `pred(key, v)` returns `true` + for all items latexmath:[(\mathtt{key}, \mathtt{v}) \in \mathtt{m}]. + +== Instances + +[[str:AtomMap]] +`[.kw]#structure# AtomMap`:: + This structure is an alias for `AtomRedBlackMap`. + +[[str:AtomBinaryMap]] +`[.kw]#structure# AtomBinaryMap`:: + Maps over atoms implemented using balanced binary trees. + Note that it is recommended that one use the `AtomMap` structure + as it provides better performance. + +[[str:AtomRedBlackMap]] +`[.kw]#structure# AtomRedBlackMap`:: + Maps over atoms implemented using red-black trees. + +[[str:IntBinaryMap]] +`[.kw]#structure# IntBinaryMap`:: + Maps over ints implemented using balanced binary trees. + Note that it is recommended that one use the `IntRedBlackMap` structure + as it provides better performance. + +[[str:IntListMap]] +`[.kw]#structure# IntListMap`:: + Maps over words implemented using sorted lists. This implementation + is fast for small sets, but does not scale well to large sizes. + +[[str:IntRedBlackMap]] +`[.kw]#structure# IntRedBlackMap`:: + Maps over ints implemented using red-black binary trees. + +[[str:WordRedBlackMap]] +`[.kw]#structure# WordRedBlackMap`:: + Maps over words implemented using red-black binary trees. + +== See Also + +xref:fun-BinaryMapFn.adoc[`BinaryMapFn`], +xref:fun-ListMapFn.adoc[`ListMapFn`], +xref:sig-ORD_KEY.adoc[`ORD_KEY`], +xref:fun-RedBlackMapFn.adoc[`RedBlackMapFn`], +xref:fun-SplayMapFn.adoc[`SplayMapFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_SET.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_SET.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_SET.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/sig-ORD_SET.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,327 @@ += The `ORD_SET` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ORD_SET` signature defines an interface to finite sets of +ordered elements. The **SML/NJ Library** provides a number of +different implementations of this interface. Functors are +provided for constructing sets for user-defined item types; +in addition, a number of instances for specific types +are also provided. + +== Synopsis + +[source,sml] +------------ +signature ORD_SET + +structure AtomSet : ORD_SET where type Key.ord_key = Atom.atom +structure AtomBinarySet : ORD_SET where type Key.ord_key = Atom.atom +structure AtomRedBlackSet : ORD_SET where type Key.ord_key = Atom.atom +structure IntBinarySet : ORD_SET where type Key.ord_key = int +structure IntListSet : ORD_SET where type Key.ord_key = int +structure IntRedBlackSet : ORD_SET where type Key.ord_key = int +structure WordRedBlackSet : ORD_SET where type Key.ord_key = word +------------ + +== Interface + +[source,sml] +------------ +structure Key : ORD_KEY + +type item = Key.ord_key +type set + +val empty : set + +val singleton : item -> set + +val fromList : item list -> set + +val toList : set -> item list + +val add : set * item -> set +val add' : (item * set) -> set + +val addList : set * item list -> set + +val subtract : set * item -> set +val subtract' : (item * set) -> set + +val subtractList : set * item list -> set + +val delete : set * item -> set + +val member : set * item -> bool + +val isEmpty : set -> bool + +val minItem : set -> item +val maxItem : set -> item + +val equal : (set * set) -> bool + +val compare : (set * set) -> order + +val isSubset : (set * set) -> bool + +val disjoint : set * set -> bool + +val numItems : set -> int + +val listItems : set -> item list + +val union : set * set -> set +val intersection : set * set -> set +val difference : set * set -> set + +val map : (item -> item) -> set -> set +val mapPartial : (item -> item option) -> set -> set +val app : (item -> unit) -> set -> unit +val foldl : (item * 'b -> 'b) -> 'b -> set -> 'b +val foldr : (item * 'b -> 'b) -> 'b -> set -> 'b + +val partition : (item -> bool) -> set -> (set * set) +val filter : (item -> bool) -> set -> set + +val exists : (item -> bool) -> set -> bool +val all : (item -> bool) -> set -> bool + +val find : (item -> bool) -> set -> item option +------------ + +== Description + +`[.kw]#`structure# Key : ORD_KEY`:: + This substructure defines the type of elements in the set and + the comparison function used to order them. + +`[.kw]#type# item = Key.ord_key`:: + The type of elements in the set. + +`[.kw]#type# set`:: + A finite set of `item` values. + +`[.kw]#val# empty : set`:: + The empty set. + +`[.kw]#val# singleton : item \-> set`:: + `singleton item` returns a singleton set containing `item`. + +`[.kw]#val# fromList : item list \-> set`:: + `fromList items` returns the set containing the list of items. + +[[val:toList]] +`[.kw]#val# toList : set \-> item list`:: + `toList set` returns a list of the items in `set`. The items will be + sorted in increasing order. + +`[.kw]#val# add : set * item \-> set`:: + `add (set, item)` adds the item to the set. + +`[.kw]#val# add' : (item * set) \-> set`:: + `add' (item, set)` adds the item to the set. + +`[.kw]#val# addList : set * item list \-> set`:: + `addList (set, items)` adds the list of items to the set. + +`[.kw]#val# subtract : set * item \-> set`:: + `subtract (set, item)` removes the object `item` from `set`. + Acts as the identity if `item` is not in the set. + +`[.kw]#val# subtract' : (item * set) \-> set`:: + `subtract' (item, set)` removes the object `item` from `set`. + Acts as the identity if `item` is not in the set. + +`[.kw]#val# subtractList : set * item list \-> set`:: + `subtractList (set, items)` removes the items from the set. + +`[.kw]#val# delete : set * item \-> set`:: + `delete (set, item)` removes the object `item` from `set`. + Unlike `subtract`, the `delete` function raises the + xref:str-LibBase.adoc#exn:NotFound[`NotFound`] + exception if `item` is not in the set. + +`[.kw]#val# member : set * item \-> bool`:: + `member (item, set)` returns `true` if, and only if, `item` + is an element of `set`. + +`[.kw]#val# isEmpty : set \-> bool`:: + `isEmpty set` returns true if, and only if, `set` is empty. + +`[.kw]#val# minItem : set \-> item`:: + `minItem set` returns the *smallest* element of the set. This function + raises the {sml-basis-url}/list.html#SIG:LIST.Empty:EXN[`Empty`] + exception if the set is empty. + +`[.kw]#val# maxItem : set \-> item`:: + `minItem set` returns the *largest* element of the set. This function + raises the {sml-basis-url}/list.html#SIG:LIST.Empty:EXN[`Empty`] + exception if the set is empty. + +`[.kw]#val# equal : (set * set) \-> bool`:: + `equal (set1, set2)` returns true if, and only if, the two + sets are equal (_i.e._, they contain the same elements). + +`[.kw]#val# compare : (set * set) \-> order`:: + `compare (set1, set2)` returns the lexical order of + the two sets. + +`[.kw]#val# isSubset : (set * set) \-> bool`:: + `isSubset (set1, set2)` returns true if, and only if, `set1` + is a subset of `set2` (_i.e._, any element of `set1` is an + element of `set2`). + +`[.kw]#val# disjoint : set * set \-> bool`:: + `equal (set1, set2)` returns true if, and only if, the two + sets are disjoint (_i.e._, their intersection is empty). + +`[.kw]#val# numItems : set \-> int`:: + `numItems set` returns the number of items in the `set`. + +`[.kw]#val# union : set * set \-> set`:: + `union (set1, set2)` returns the union of the two sets. + +`[.kw]#val# intersection : set * set \-> set`:: + `intersection (set1, set2)` returns the intersection of the two sets. + +`[.kw]#val# difference : set * set \-> set`:: + `difference (set1, set2)` returns the difference of the two sets; + _i.e._, the set of items that are in `set1`, but not in + `set2`. + +`[.kw]#val# map : (item \-> item) \-> set \-> set`:: + `map f set` constructs a new set from the result of applying the + function `f` to the elements of `set`. This expression is + equivalent to ++ +[source,sml] +------------ +fromList (List.map f (toList set)) +------------ + +`[.kw]#val# mapPartial : (item \-> item option) \-> set \-> set``:: + `mapPartial f set` constructs a new set from the result of applying the + function `f` to the elements of `set`. This expression is + equivalent to ++ +[source,sml] +------------ +fromList (List.mapPartial f (toList set)) +------------ + +`[.kw]#val# app : (item \-> unit) \-> set \-> unit`:: + `app f set` applies the function `f` to the items in `set`. + This expression is equivalent to ++ +[source,sml] +------------ +List.app f (toList set) +------------ + +`[.kw]#val# foldl : (item * 'b \-> 'b) \-> 'b \-> set \-> 'b`:: + `foldl f init set` folds the function `f` over the items in + `set` in increasing order using `init` as the initial value. + This expression is equivalent to ++ +[source,sml] +------------ +List.foldl f init (toList set) +------------ + +`[.kw]#val# foldr : (item * 'b \-> 'b) \-> 'b \-> set \-> 'b`:: + `foldr f init set` folds the function `f` over the items in + `set` in decreasing order using `init` as the initial value. + This expression is equivalent to ++ +[source,sml] +------------ +List.foldr f init (toList set) +------------ + +`[.kw]#val# partition : (item \-> bool) \-> set \-> (set * set)`:: + `partition pred set` returns a pair of disjoint sets `(tSet, fSet)`, where + the predicate `pred` returns true for every element of `tSet`, + `false` for every element of `fSet`, and `set` is the union of `tSet` + and `fSet`. + +`[.kw]#val# filter : (item \-> bool) \-> set \-> set`:: + `filter pred set` filters out any elements of set for which the + predicate `pred` returns false. + This expression is equivalent to ++ +[source,sml] +------------ +#1 (partition pred set) +------------ + +`[.kw]#val# exists : (item \-> bool) \-> set \-> bool`:: + `all pred set` returns `true` if, and only if, `pred item` returns + true for all elements `item` in `set`. Elements are checked in increasing + order. + +`[.kw]#val# all : (item \-> bool) \-> set \-> bool`:: + `exists pred set` returns `true` if, and only if, there exists an + element `item` in `set` such that `pred item` returns `true`. + Elements are checked in increasing order. + +`[.kw]#val# find : (item \-> bool) \-> set \-> item option`:: + `find pred set` returns `SOME item` if there exists an object `item` + in the set for which `pred item` returns `true`; otherwise `NONE` is + returned. Items are tested in increasing order. + +=== Deprecated functions + +The following functions are part of the interface, but have been +deprecated. + +`[.kw]#val# listItems : set \-> item list``:: + Use xref:#val:toList[`toList`] instead. + +== Instances + +[[str:AtomSet]] +`[.kw]#structure# AtomSet`:: + This structure is an alias for `AtomRedBlackSet`. + +[[str:AtomBinarySet]] +`[.kw]#structure# AtomBinarySet`:: + Sets of atoms implemented using balanced binary trees. + Note that it is recommended that one use the `AtomSet` structure + as it provides better performance. + +[[str:AtomRedBlackSet]] +`[.kw]#structure# AtomRedBlackSet`:: + Sets of atoms implemented using red-black trees. + +[[str:IntBinarySet]] +`[.kw]#structure# IntBinarySet`:: + Sets of ints implemented using balanced binary trees. + Note that it is recommended that one use the `IntRedBlackSet` structure + as it provides better performance. + +[[str:IntListSet]] +`[.kw]#structure# IntListSet`:: + Sets of words implemented using sorted lists. This implementation + is fast for small sets, but does not scale well to large sizes. + +[[str:IntRedBlackSet]] +`[.kw]#structure# IntRedBlackSet`:: + Sets of ints implemented using red-black binary trees. + +[[str:WordRedBlackSet]] +`[.kw]#structure# WordRedBlackSet`:: + Sets of words implemented using red-black binary trees. + +== See Also + +xref:fun-BinarySetFn.adoc[`BinarySetFn`], +xref:fun-ListSetFn.adoc[`ListSetFn`], +xref:sig-ORD_KEY.adoc[`ORD_KEY`], +xref:fun-RedBlackSetFn.adoc[`RedBlackSetFn`], +xref:fun-SplaySetFn.adoc[`SplaySetFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/smlnj-lib.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/smlnj-lib.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/smlnj-lib.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/smlnj-lib.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,373 @@ += The Util Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Overview + +The *Util Library* provides a large collection of utility data structures +and algorithms. It is the core library in the *SML/NJ Library* suite +and dates back to the early 1990's, where it was originally developed +by Emden Gansner and John Reppy as part of the *eXene* *X11* toolkit. +Modules from this library are autoloaded into the *SML/NJ* interactive +environment by default. + +== Contents + +xref:str-ANSITerm.adoc[`[.kw]#structure# ANSITerm`]:: + provides support for displaying stylized text using the + https://en.wikipedia.org/wiki/ANSI_escape_code[ANSI escape codes]. + +xref:str-ArrayQSort.adoc[`[.kw]#structure# ArrayQSort`]:: + Provides _in situ_ sorting of polymorphic arrays + using the quicksort algorithm. + +xref:fun-ArrayQSortFn.adoc[`[.kw]#functor# ArrayQSortFn`]:: + Provides _in situ_ sorting of monomorphic arrays + using the quicksort algorithm. + +xref:str-Atom.adoc[`[.kw]#structure# Atom`]:: + provides hashed strings that have fast equality testing. + +xref:str-Base64.adoc[`[.kw]#structure# Base64`]:: + Provides support for *Base-64* encoding/decoding as specified + by https://www.ietf.org/rfc/rfc4648.txt[RFC 4648]. + +xref:fun-BinaryMapFn.adoc[`[.kw]#functor# BinaryMapFn`]:: + Provides a balanced-binary-tree implementation of the + xref:sig-ORD_MAP.adoc[`ORD_MAP`] signature parameterized over the key type. + +xref:fun-BinarySetFn.adoc[`[.kw]#functor# BinarySetFn`]:: + Provides a balanced-binary-tree implementation of the + xref:sig-ORD_SET.adoc[`ORD_SET`] signature parameterized over the element type. + +xref:str-BitArray.adoc[`[.kw]#structure# BitArray`]:: + Provides mutable arrays of booleans represented by one bit per element. + +xref:fun-BSearchFn.adoc[`[.kw]#functor# BSearchFn`]:: + Provides binary search on sorted monomorphic arrays. + +xref:str-CharMap.adoc[`[.kw]#structure# CharMap`]:: + Provides fast, read-only, maps from 8-bit characters to values. + +// 10 + +xref:str-DynamicArray.adoc[`[.kw]#structure# DynamicArray`]:: + Provides dynamically sized polymorphic arrays. + +xref:fun-DynamicArrayFn.adoc[`[.kw]#functor# DynamicArrayFn`]:: + Provides dynamically sized monomorphic arrays. + +xref:str-Fifo.adoc[`[.kw]#structure# Fifo`]:: + Provides a functional queue data structure. + +xref:str-FNVHash.adoc[`[.kw]#structure# FNVHash`]:: + Provides an implementation of the + https://en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function[__Fowler-Noll-Vo__] + hashing algorithm. + +xref:str-Format.adoc[`[.kw]#structure# Format`]:: + Provides `printf`-style string formatting. + +xref:str-FormatComb.adoc[`[.kw]#structure# FormatComb`]:: + **To be written** + +xref:str-GetOpt.adoc[`[.kw]#structure# GetOpt`]:: + Provides command-line argument processing. + +xref:fun-GraphSCCFn.adoc[`[.kw]#functor# GraphSCCFn`]:: + Provides an algorithm for computing the strongly-connected + components of a directed graph. + +xref:fun-Hash2TableFn.adoc[`[.kw]#functor# Hash2TableFn`]:: + Provides hash tables that are keyed by two different key types. + +xref:sig-HASH_KEY.adoc[`[.kw]#signature# HASH_KEY`]:: + Defines an interface to a monomorphic type with an equality + test and hashing function. + +// 20 + +xref:fun-HashSetFn.adoc[`[.kw]#functor# HashSetFn`]:: + Provides a hash-table-based implementation of imperative sets + parameterized over a `Key` structure. + +xref:str-HashString.adoc[`[.kw]#structure# HashString`]:: + Provides hashing functions for strings and substrings. + +xref:str-HashTable.adoc[`[.kw]#structure# HashTable`]:: + Provides an implementation of polymorphic hash tables. + +xref:fun-HashTableFn.adoc[`[.kw]#functor# HashTableFn`]:: + Provides a functor that implements the + xref:sig-MONO_HASH_TABLE.adoc[`MONO_HASH_TABLE`] signature. + +xref:sig-INTERVAL_DOMAIN.adoc[`[.kw]#signature# INTERVAL_DOMAIN`]:: + Defines a representation of an abstract ordered domain that is + used as an argument to the xref:fun-IntervalSetFn.adoc[`IntervalSetFn`] + functor. + +xref:fun-IntervalSetFn.adoc[`[.kw]#functor# IntervalSetFn`]:: + Provides sets over a discrete ordered domain, where the + sets are represented by intervals. + +xref:str-IOUtil.adoc[`[.kw]#structure# IOUtil`]:: + Provides support for redirecting the standard input and output streams. + +xref:fun-KeywordFn.adoc[`[.kw]#functor# KeywordFn`]:: + Provides a simple way to support a table of keyword + (or reserved) identifiers in a scanner. + +xref:fun-LeftPriorityQFn.adoc[`[.kw]#functor# LeftPriorityQFn`]:: + Provides a functional implementation of priority + queues using leaftist heaps. + +xref:str-LibBase.adoc[`[.kw]#structure# LibBase`]:: + Provides some common definitions that are + shared across the *SML/NJ Lbrary*. + +// 30 + +xref:str-ListFormat.adoc[`[.kw]#structure# ListFormat`]:: + Provides some utility functions for converting + lists into strings (and back). + +xref:fun-ListMapFn.adoc[`[.kw]#functor# ListMapFn`]:: + Provides a sorted-list implementation of the + xref:sig-ORD_MAP.adoc[`ORD_MAP`] signature parameterized over the key type. + +xref:str-ListMergeSort.adoc[`[.kw]#structure# ListMergeSort`]:: + Provides a merge-sort algorithm for lists. + +xref:fun-ListSetFn.adoc[`[.kw]#functor# ListSetFn`]:: + Provides a sorted-list implementation of the + xref:sig-ORD_SET.adoc[`ORD_SET`] signature parameterized over the element type. + +xref:str-ListXProd.adoc[`[.kw]#structure# ListXProd`]:: + Provides list combinators for computing + over the "Cartesian product" of two lists. + +xref:fun-MonoArrayFn.adoc[`[.kw]#functor# MonoArrayFn`]:: + Provides easy construction of new monomorphic array structures. + +xref:sig-MONO_HASH_TABLE.adoc[`[.kw]#signature# MONO_HASH_TABLE`]:: + Defines an interface to imperative hash tables with monomorphic keys. + +xref:sig-ORD_KEY.adoc[`[.kw]#signature# ORD_KEY`]:: + Defines an interface to an abstract type + of keys with a comparison function. + +xref:sig-ORD_MAP.adoc[`[.kw]#signature# ORD_MAP`]:: + Defines an interface to finite maps over ordered keys. + +xref:sig-ORD_SET.adoc[`[.kw]#signature# ORD_SET`]:: + Defines an interface to finite sets of ordered elements. + +// 40 + +xref:str-ParserComb.adoc[`[.kw]#structure# ParserComb`]:: + Provides parser combinators over character readers. + +xref:str-PathUtil.adoc[`[.kw]#structure# PathUtil`]:: + Provides support for searching for files + in the file system using a list of possible locations. + +xref:str-PropList.adoc[`[.kw]#structure# PropList`]:: + Provides a extensible, but type safe, implementation + of property lists. + +xref:str-Queue.adoc[`[.kw]#structure# Queue`]:: + Provides an imperative queue data structure. + +xref:str-Rand.adoc[`[.kw]#structure# Rand`]:: + Provides a simple random number generator. + +xref:str-Random.adoc[`[.kw]#structure# Random`]:: + Provides a more sophisticated random number generator. + +xref:str-RealOrderStats.adoc[`[.kw]#structure# RealOrderStats`]:: + **To be written** + +xref:fun-RedBlackMapFn.adoc[`[.kw]#functor# RedBlackMapFn`]:: + Provides a red-black-tree implementation of the + xref:sig-ORD_MAP.adoc[`ORD_MAP`] signature parameterized over the key type. + +xref:fun-RedBlackSetFn.adoc[`[.kw]#functor# RedBlackSetFn`]:: + Provides a red-black-tree implementation of the + xref:sig-ORD_SET.adoc[`ORD_SET`] signature parameterized over the element type. + +xref:str-Scan.adoc[`[.kw]#structure# Scan`]:: + **To be written** + +// 50 + +xref:fun-SplayMapFn.adoc[`[.kw]#functor# SplayMapFn`]:: + Provides a splay-tree implementation of the + xref:sig-ORD_MAP.adoc[`ORD_MAP`] signature parameterized over the key type. + +xref:fun-SplaySetFn.adoc[`[.kw]#functor# SplaySetFn`]:: + Provides a splay-tree implementation of the + xref:sig-ORD_SET.adoc[`ORD_SET`] signature parameterized over the element type. + +xref:str-TimeLimit.adoc[`[.kw]#structure# TimeLimit`]:: + Provides a mechanism for limiting the execution + time of a computation. + +xref:str-UnivariateStats.adoc[`[.kw]#structure# UnivariateStats`]:: + **To be written** + +xref:str-URef.adoc[`[.kw]#structure# URef`]:: + Provides mutable references with __Union-Find__ semantics. + +xref:str-UTF8.adoc[`[.kw]#structure# UTF8`]:: + Provides support for working with https://en.wikipedia.org/wiki/UTF-8[*UTF-8*] + encoded strings. + +// 56 + +== Usage + +By default, the *Util Library* is autoloaded by *CM*, which means that it is +immediately available to interactive use in the *SML/NJ* REPL. + +For https://smlnj.org[*SML/NJ*], include `$/smlnj-lib.cm` in your +*CM* file. + +For use in https://www.mlton.org/[*MLton*], include +`$(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb` in your *MLB* file. + +ifdef::backend-pdf[] + +// Push titles down one level. +:leveloffset: 1 + +include::str-ANSITerm.adoc[] + +include::str-ArrayQSort.adoc[] + +include::fun-ArrayQSortFn.adoc[] + +include::str-Atom.adoc[] + +include::str-Base64.adoc[] + +include::fun-BinaryMapFn.adoc[] + +include::fun-BinarySetFn.adoc[] + +include::str-BitArray.adoc[] + +include::fun-BSearchFn.adoc[] + +include::str-CharMap.adoc[] + +// 10 + +include::str-DynamicArray.adoc[] + +include::fun-DynamicArrayFn.adoc[] + +include::str-Fifo.adoc[] + +include::str-FNVHash.adoc[] + +include::str-Format.adoc[] + +include::str-FormatComb.adoc[] + +include::str-GetOpt.adoc[] + +include::fun-GraphSCCFn.adoc[] + +include::fun-Hash2TableFn.adoc[] + +include::sig-HASH_KEY.adoc[] + +// 20 + +include::fun-HashSetFn.adoc[] + +include::str-HashString.adoc[] + +include::str-HashTable.adoc[] + +include::fun-HashTableFn.adoc[] + +include::sig-INTERVAL_DOMAIN.adoc[] + +include::fun-IntervalSetFn.adoc[] + +include::str-IOUtil.adoc[] + +include::fun-KeywordFn.adoc[] + +include::fun-LeftPriorityQFn.adoc[] + +include::str-LibBase.adoc[] + +// 30 + +include::str-ListFormat.adoc[] + +include::fun-ListMapFn.adoc[] + +include::str-ListMergeSort.adoc[] + +include::fun-ListSetFn.adoc[] + +include::str-ListXProd.adoc[] + +include::fun-MonoArrayFn.adoc[] + +include::sig-MONO_HASH_TABLE.adoc[] + +include::sig-ORD_KEY.adoc[] + +include::sig-ORD_MAP.adoc[] + +include::sig-ORD_SET.adoc[] + +// 40 + +include::str-ParserComb.adoc[] + +include::str-PathUtil.adoc[] + +include::str-PropList.adoc[] + +include::str-Queue.adoc[] + +include::str-Rand.adoc[] + +include::str-Random.adoc[] + +include::str-RealOrderStats.adoc[] + +include::fun-RedBlackMapFn.adoc[] + +include::fun-RedBlackSetFn.adoc[] + +include::str-Scan.adoc[] + +// 50 + +include::fun-SplayMapFn.adoc[] + +include::fun-SplaySetFn.adoc[] + +include::str-TimeLimit.adoc[] + +include::str-UnivariateStats.adoc[] + +include::str-URef.adoc[] + +include::str-UTF8.adoc[] + +// 56 + +// Return to normal title levels. +:leveloffset: 0 + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ANSITerm.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ANSITerm.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ANSITerm.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ANSITerm.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,117 @@ += The `ANSITerm` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ANSITerm` structure provides support for displaying stylized +text using the https://en.wikipedia.org/wiki/ANSI_escape_code[ANSI escape codes]. + +Note that currently this module only supports the limited palette of +eight fixed colors. + +== Synopsis + +[source,sml] +------------ +structure ANSITerm +------------ + +== Interface + +[source,sml] +------------ +datatype color + = Black | Red | Green | Yellow | Blue | Magenta | Cyan | White | Default + +datatype style + = FG of color + | BG of color + | BF + | DIM + | NORMAL + | UL + | UL_OFF + | BLINK + | BLINK_OFF + | REV + | REV_OFF + | INVIS + | INVIS_OFF + | RESET + +val toString : style list -> string + +val setStyle : TextIO.outstream * style list -> unit +------------ + +== Description + +`[.kw]#datatype# color = ...`:: + This datatype can be used to specify the eight standard colors, plus the default + color. + +`[.kw]#datatype# style = ...`:: + This datatype specifies the different styles that can be used when + displaying text. The styles are ++ +-- + `FG [.kw]#of# color`:: + specifies the foreground color of the text. + + `BG [.kw]#of# color`:: + specifies the background color of the text. + + `BF`:: + specifies bold or bright text (note that this does not cancel the effect + of `DIM`). + + `DIM`:: + specifies dim text (note that this does not cancel the effect + of `BF`). + + `NORMAL`:: + specifies normal color and intensity (cancels the effect of + `BF` and `DIM`). + + `UL`:: + enables underlining of the text. + + `UL_OFF`:: + cancels underlining. + + `BLINK`:: + enables blinking text. + + `BLINK_OFF`:: + cancels blinking mode. + + `REV`:: + reverses the foreground and background colors. + + `REV_OFF`:: + cancels reverse mode. + + `INVIS`:: + makes the text invisible. + + `INVIS_OFF`:: + cancels invisible mode. + + `RESET`:: + resets the style to the default mode. +-- + +`[.kw]#val# toString : style list \-> string`:: + `toString styles` returns a command string that will cause the terminal + to switch to the specified styles. + + (* output commands to set the given styles; the empty list is "normal" *) +`[.kw]#val# setStyle : TextIO.outstream * style list \-> unit`:: + `setStyle (outS, styles)` sets the styles for the terminal connected + to the output stream `outS`. + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ArrayQSort.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ArrayQSort.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ArrayQSort.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ArrayQSort.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ += The `ArrayQSort` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ArrayQSort` structure provides _in situ_ sorting of polymorphic arrays +using the quicksort algorithm. + +== Synopsis + +[source,sml] +------------ +signature ARRAY_SORT +structure ArrayQSort : ARRAY_SORT +------------ + +== Interface + +[source,sml] +------------ +val sort : ('a * 'a -> order) -> 'a array -> unit +val sorted : ('a * 'a -> order) -> 'a array -> bool +------------ + +== Description + +`[.kw]#val# sort : ('a * 'a \-> order) \-> 'a array \-> unit`:: + `sort cmp arr` sorts the array `arr` into ascending order + according to the comparison function `cmp`. + +`[.kw]#val# sorted : ('a * 'a \-> order) \-> 'a array \-> bool`:: + `sorted cmp arr` returns true if, and only if, the array `arr=` is + sorted in ascending order. + +== See Also + +xref:fun-ArrayQSortFn.adoc[`ArrayQSortFn`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Atom.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Atom.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Atom.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Atom.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,86 @@ += The `Atom` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `Atom` structure provides hashed strings that have fast +equality testing. The *Util Library* provides predefined +finite maps and sets of atoms, as well as hash tables keyed by atoms. + +== Synopsis + +[source,sml] +------------ +signature ATOM +structure Atom : ATOM +------------ + +== Interface + +[source,sml] +------------ +type atom + +val atom : string -> atom +val atom' : substring -> atom + +val toString : atom -> string + +val same : (atom * atom) -> bool +val sameAtom : (atom * atom) -> bool + +val compare : (atom * atom) -> order +val lexCompare : (atom * atom) -> order + +val hash : atom -> word +------------ + +== Description + +[[type:atom]] +`[.kw]#type# atom`:: + The abstract type of hashed strings that support fast equality testing. + +`[.kw]#val# atom : string \-> atom`:: + `atom s` returns the unique hashed representation of the string `s` as an atom. + +`[.kw]#val# atom' : substring \-> atom`:: + `atom ss` returns the unique hashed representation of the substring `ss` + as an atom. + +`[.kw]#val# toString : atom \-> string`:: + `toString atm` returns the string representation of the atom `atm`. + +[[val:same]] +`[.kw]#val# same : (atom * atom) \-> bool`:: + `same (atm1, atm2)` returns true if the two atoms are the same (_i.e._, their + string representations are equal). + +`[.kw]#val# compare : (atom * atom) \-> order`:: + `compare (atm1, atm2)` returns the relation of the two atoms in some + unspecified total order. Use xref:#val:lexCompare[`lexCompare`] to + compare atoms lexicographically. + +[[val:lexCompare]] +`[.kw]#val# lexCompare : (atom * atom) \-> order`:: + `compare (atm1, atm2)` returns the relation of the two atoms in lexical order. + +`[.kw]#val# hash : atom \-> word`:: + `hash atm` returns a hash key for the atom. + +=== Deprecated functions + +The following functions are part of the interface, but have been +deprecated. + +`[.kw]#val# sameAtom : (atom * atom) \-> bool`:: + Use xref:#val:same[`same`] instead. + +== See Also + +xref:sig-ORD_MAP.adoc#str:AtomMap[`AtomMap`], +xref:sig-ORD_SET.adoc#str:AtomSet[`AtomSet`], +xref:sig-MONO_HASH_TABLE.adoc#str:AtomTable[`AtomTable`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Base64.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Base64.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Base64.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Base64.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,95 @@ += The `Base64` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `Base64` structure provides support for *Base-64* encoding/decoding +as specified by https://www.ietf.org/rfc/rfc4648.txt[RFC 4648]. + +== Synopsis + +[source,sml] +------------ +signature BASE64 +structure Base64 : BASE64 +------------ + +== Interface + +[source,sml] +------------ +val isBase64 : char -> bool + +val encode : Word8Vector.vector -> string +val encodeSlice : Word8VectorSlice.slice -> string + +exception Incomplete + +exception Invalid of (int * char) + +val decode : string -> Word8Vector.vector +val decodeSlice : substring -> Word8Vector.vector + +val decodeStrict : string -> Word8Vector.vector +val decodeSliceStrict : substring -> Word8Vector.vector +------------ + +== Description + +`[.kw]#val# isBase64 : char \-> bool`:: + `isBase64 c` returns true if the character `c` is in the *Base-64* + alphabet (_i.e._, a letter, digit, or a slash or plus character). + Note that the padding character (the equals sign) is not considered + to be in the alphabet. + +`[.kw]#val# encode : Word8Vector.vector \-> string`:: + `encode bv` returns a string that is the *Base-64* encoding of + the byte vector `bv`. + +`[.kw]#val# encodeSlice : Word8VectorSlice.slice \-> string`:: + `encode bvs` returns a string that is the *Base-64* encoding of + the byte-vector slice `bvs`. + +[[exn:Incomplete]] +`[.kw]#exception# Incomplete`:: + This exception is raised by the decoding functions if a *Base-64* string + does not end in a complete encoding quantum (_i.e._, four characters including + padding characters). + +[[exn:Invalid]] +`[.kw]#exception# Invalid of (int * char)`:: + This exception is raised by the decoding functions if an invalid *Base-64* + character is encountered. The int is the position of the character and + the char is the invalid character. + +`[.kw]#val# decode : string \-> Word8Vector.vector`:: + `decode s` returns the result of decoding the *Base-64* string `s`. + This function ignores whitespace (_e.g._, line breaks), but + will raise the xref:#exn:Incomplete[`Incomplete`] exception if the + last quantum is incomplete. + +`[.kw]#val# decodeSlice : substring \-> Word8Vector.vector`:: + `decode ss` returns the result of decoding the *Base-64* substring `ss`. + This function ignores whitespace (_e.g._, line breaks), but + will raise the xref:#exn:Incomplete[`Incomplete`] exception if the + last quantum is incomplete. + +`[.kw]#val# decodeStrict : string \-> Word8Vector.vector`:: + `decodeStrict s` returns the result of decoding the *Base-64* string `s`. + The string `s` maust only contain valid *Base-64* characters, otherwise + the xref:#exn:Invalid[`Invalid`] exception is raised. This function + will also raise the xref:#exn:Incomplete[`Incomplete`] exception if the + last quantum is incomplete. + +`[.kw]#val# decodeSliceStrict : substring \-> Word8Vector.vector`:: + `decode ss` returns the result of decoding the *Base-64* substring `ss`. + The string `s` maust only contain valid *Base-64* characters, otherwise + the xref:#exn:Invalid[`Invalid`] exception is raised. This function + will also raise the xref:#exn:Incomplete[`Incomplete`] exception if the + last quantum is incomplete. + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-BitArray.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-BitArray.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-BitArray.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-BitArray.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,211 @@ += The `BitArray` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `BitArray` structure provides a implementation of +monomorphic arrays of booleans implemented one bit per +element. The `BitArray` structure extends the +{sml-basis-url}/mono-array.html[`MONO_ARRAY`] signature +with bit-level operations. + +== Synopsis + +[source,sml] +------------ +signature BIT_ARRAY +structure BitArray :> BIT_ARRAY +------------ + +== Interface + +[source,sml] +------------ +include MONO_ARRAY + +val fromString : string -> array option + +val bits : (int * int list) -> array + +val getBits : array -> int list + +val toString : array -> string + +val isZero : array -> bool + +val extend0 : (array * int) -> array +val extend1 : (array * int) -> array + +val eqBits : (array * array) -> bool +val equal : (array * array) -> bool + +val andb : (array * array * int) -> array +val orb : (array * array * int) -> array +val xorb : (array * array * int) -> array + +val notb : array -> array + +val << : (array * word) -> array +val >> : (array * word) -> array + +val setBit : (array * int) -> unit +val clrBit : (array * int) -> unit + +val union : array -> array -> unit +val intersection : array -> array -> unit + +val complement : array -> unit + +val lshift : (array * int) -> array +val rshift : (array * int) -> array +------------ + +== Description + +`[.kw]#include# {sml-basis-url}/mono-array.html[MONO_ARRAY]`:: + The `BIT_ARRAY` signature extends the + {sml-basis-url}/mono-array.html[`MONO_ARRAY`] signature from + the *Standard ML Basis Library*. Note that while the + `MONO_ARRAY` signature includes a corresponding monomorphic + `vector` type, there is currently no implementation of a + corresponding `BitVector` structure. + +`[.kw]#val# fromString : string \-> array option`:: + `fromString s` returns `SOME ba` when the string `s` is + a sequence of hexadecimal digits. The length of `ba` will + be `4*(length s)`. Returns `NONE` of a non-hexadecimal + character is encountered. + +`[.kw]#val# bits : (int * int list) \-> array`:: + `bits (n, ixs)` returns a new array `ba` of length `n`, where + `ba[ix]` is `true` for each `ix` in the list of indices `ixs`. + This function raises the + link:{sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `n < 0` and the + link:{sml-basis-url}/general.html#SIG:GENERAL.Subscript:EXN:SPEC[`Subscript`] + exception if any index is out of bounds. + +`[.kw]#val# getBits : array \-> int list`:: + `getBits ba` returns a list of indices `ix` for which `ba[ix]` is true + in increasing order. + +`[.kw]#val# toString : array \-> string`:: + `toString ba` returns a string representation of the array as a sequence + of hexadecimal digits in little-endian order (_i.e._, ba[0] is represented + as the high-order bit in the first digit). + +`[.kw]#val# isZero : array \-> bool`:: + `isZero ba` returns true if, and only if, no elements are `true` in `ba`. + +`[.kw]#val# extend0 : (array * int) \-> array`:: + `extend0 (ba, n)` returns a new array ``ba'`` that is `max(n, length ba)` + elements long, where the `length ba` elements of ``ba'`` are copied from + `ba` and the remaining elements are `false`. + This function raises the + link:{sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `n < 0`. + +`[.kw]#val# extend1 : (array * int) \-> array`:: + `extend1 (ba, n)` returns a new array ``ba'`` that is `max(n, length ba)` + elements long, where the `length ba` elements of ``ba'`` are copied from + `ba` and the remaining elements are `true`. + This function raises the + link:{sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `n < 0`. + +`[.kw]#val# eqBits : (array * array) \-> bool`:: + `eqBits (ba1, ba2)` returns true if the two arrays have + the same `true` entries. In other words, the following identity + holds ++ +[source,sml] +------------ +eqBits(ba1, ba2) = (getBits ba1 = getBits ba2) +------------ + +`[.kw]#val# equal : (array * array) \-> bool`:: + `equal (ba1, ba2)` returns true if the two arrays are the same length + and have the same elements. + +`[.kw]#val# andb : (array * array * int) \-> array`:: + `andb (ba1, ba2, n)` returns a new array `ba` of length `n`, + where the element `ba[ix]` is the logical *AND* of `ba1[ix]` + and `ba2[ix]`, where the inputs are extended with `false` as + necessary. + This function raises the + link:{sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `n < 0`. + +`[.kw]#val# orb : (array * array * int) \-> array`:: + `orb (ba1, ba2, n)` returns a new array `ba` of length `n`, + where the element `ba[ix]` is the logical *OR* of `ba1[ix]` + and `ba2[ix]`, where the inputs are extended with `false` as + necessary. + This function raises the + link:{sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `n < 0`. + +`[.kw]#val# xorb : (array * array * int) \-> array`:: + `xorb (ba1, ba2, n)` returns a new array `ba` of length `n`, + where the element `ba[ix]` is the logical *XOR* of `ba1[ix]` + and `ba2[ix]`, where the inputs are extended with `false` as + necessary. + This function raises the + link:{sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `n < 0`. + +`[.kw]#val# notb : array \-> array`:: + `notb ba` returns a new array of the same length as `ba` with + the elements negated. + +[[val:_lt_lt_]] +`[.kw]#val# << : (array * word) \-> array`:: + `<< (ba, n)`returns a new array by appending `n` `false` + elements on the end of `ba`. The new array will have + length equal to `n + length ba`. + +[[val:_gt_gt_]] +`[.kw]#val# >> : (array * word) \-> array`:: + `>> (ba, n)`returns a new array by trimming `n` elements + from the "right" of `ba`. The new array will have + `max(0, length ba - n)` elements. + +`[.kw]#val# setBit : (array * int) \-> unit`:: + `setBit (ba, ix)` sets the element of `ba` at index `ix` to `true`. + This function raises the + link:{sml-basis-url}/general.html#SIG:GENERAL.Subscript:EXN:SPEC[`Subscript`] + exception if `ix` is out of bounds. + +`[.kw]#val# clrBit : (array * int) \-> unit`:: + `setBit (ba, ix)` sets the element of `ba` at index `ix` to `false`. + This function raises the + link:{sml-basis-url}/general.html#SIG:GENERAL.Subscript:EXN:SPEC[`Subscript`] + exception if `ix` is out of bounds. + +`[.kw]#val# union : array \-> array \-> unit`:: + `union ba1 ba2` updates `ba1` by setting each element `ba1[ix]` to + the logical *OR* of `ba1[ix]` and `ba2[ix]`, where `ba2[ix]` is + extended with `false` elements as necessary to match the length of `ba1`. + +`[.kw]#val# intersection : array \-> array \-> unit`:: + `intersection ba1 ba2` updates `ba1` by setting each element `ba1[ix]` to + the logical *AND* of `ba1[ix]` and `ba2[ix]`, where `ba2[ix]` is + extended with `false` elements as necessary to match the length of `ba1`. + +`[.kw]#val# complement : array \-> unit`:: + `complement ba` logically negates all of the elements of `ba`. + +=== Deprecated Functions + +`[.kw]#val# lshift : (array * int) \-> array`:: + Use xref:#val:_lt_lt_[`<<`] instead. + +`[.kw]#val# rshift : (array * int) \-> array`:: + Use xref:#val:_gt_gt_[`>>`] instead. + +== See Also + +{sml-basis-url}/mono-array.html[`MONO_ARRAY`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-CharMap.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-CharMap.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-CharMap.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-CharMap.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,68 @@ += The `CharMap` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `CharMap` structure provides fast, read-only, maps from 8-bit characters +to values. + +== Synopsis + +[source,sml] +------------ +signature CHAR_MAP +structure CharMap :> CHAR_MAP +------------ + +== Interface + +[source,sml] +------------ +type 'a char_map + +val mkCharMap : {default : 'a, bindings : (string * 'a) list} -> 'a char_map + +val mapChr : 'a char_map -> char -> 'a +val mapStrChr : 'a char_map -> (string * int) -> 'a +------------ + +== Description + +`[.kw]#type# 'a char_map`:: + The type of a mapping from 8-bit characters to ``'a``. + +`[.kw]#val# mkCharMap : {default : 'a, bindings : (string * 'a) list} \-> 'a char_map`:: + `mkCharMap {default, bindings}` creates a new character map. For each + item `(s, v)` in the `bindings` list, the characters in `s` are mapped to + the value `v`. If a character is bound multiple times, then the rightmost + binding is used. Characters not covered by a binding are mapped to the + default value. For example, the following code creates a mapping that classifies + characters into lower and upper case letter, digits, and other characters: ++ +[source,sml] +------------ +datatype char_kind = LOWER | UPPER | DIGIT | OTHER + +val cmap = mkCharMap { + default = OTHER, + bindings = [ + ("abcdefghijklmnopqrstuvwxyz", LOWER), + ("ABCDEFGHIJKLMNOPQRSTUVWXYZ", UPPER), + ("0123456789", DIGIT) + ] + } +------------ + +`[.kw]#val# mapChr : 'a char_map \-> char \-> 'a`:: + `mapChr cmap c` applies the map to the character. + +`[.kw]#val# mapStrChr : 'a char_map \-> (string * int) \-> 'a`:: + `mapStrChr cmap (s, i)` applies the map to the `i`th character in `s`. + The {sml-basis-url}/general.html#SIG:GENERAL.Subscript:EXN:SPEC[`Subscript`] + exception is raised if `i` is out of bounds. + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-DynamicArray.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-DynamicArray.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-DynamicArray.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-DynamicArray.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,216 @@ += The `DynamicArray` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `DynamicArray` structure provides dynamically sized polymorphic +arrays. Each array has an associated _default_ value, which is +covers those elements that have not been explicitly initialized +(conceptually, one can view an array as having an infinite size). +Thus, reads from indices above the bound will return the default value. +The __bound__ of an array is the highest index of an initialized +element (or `~1` if there are no initialized elements). The +__defined range__ of the array are the elements in the positions +indexed from zero to the bound. + +== Synopsis + +[source,sml] +------------ +structure DynamicArray +------------ + +== Interface + +[source,sml] +------------ +type 'a array + +val array : (int * 'a) -> 'a array + +val subArray : ('a array * int * int) -> 'a array + +val fromList : 'a list * 'a -> 'a array +val fromVector : 'a vector * 'a -> 'a array + +val toList : 'a array -> 'a list +val toVector : 'a array -> 'a vector + +val tabulate: (int * (int -> 'a) * 'a) -> 'a array + +val default : 'a array -> 'a + +val sub : ('a array * int) -> 'a + +val update : ('a array * int * 'a) -> unit + +val bound : 'a array -> int + +val truncate : ('a array * int) -> unit + +val appi : (int * 'a -> unit) -> 'a array -> unit +val app : ('a -> unit) -> 'a array -> unit +val modifyi : (int * 'a -> 'a) -> 'a array -> unit +val modify : ('a -> 'a) -> 'a array -> unit +val foldli : (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b +val foldri : (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b +val foldl : ('a * 'b -> 'b) -> 'b -> 'a array -> 'b +val foldr : ('a * 'b -> 'b) -> 'b -> 'a array -> 'b +val findi : (int * 'a -> bool) -> 'a array -> (int * 'a) option +val find : ('a -> bool) -> 'a array -> 'a option +val exists : ('a -> bool) -> 'a array -> bool +val all : ('a -> bool) -> 'a array -> bool +val collate : ('a * 'a -> order) -> 'a array * 'a array -> order + +val vector : 'a array -> 'a vector +------------ + +== Description + +`[.kw]#type# 'a array`:: + The polymorphic type of dynamic arrays. Each array has a _default value_ + and a _bound_, where the _bound_ is the largest index for which an explicit + value has been set. Reads from indices above the bound will return the + default value. + +`[.kw]#val# array : (int * 'a) \-> 'a array`:: + `array (sz, dflt)` returns a new array with bound `~1` and default + value `dflt`. The `sz` argument, which must be non-negative, is used + as a hint of the potential range of indices. This function raises + the {sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `sz < 0`. + +`[.kw]#val# subArray : ('a array * int * int) \-> 'a array`:: + `subArray (arr, lo, hi)` returns a new array with the same default + as `arr`, and whose values in the range `[0, hi-lo]` are equal to + the values in `arr` in the range `[lo, hi]`. This function raises + the {sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `lo > hi`. + +`[.kw]#val# fromList : 'a list * 'a \-> 'a array`:: + `fromList (lst, dflt)` returns a new array created from the elements + of `lst` and with default value `dflt`. The bound of the array will be + `length lst - 1`. + +`[.kw]#val# fromVector : 'a Vector.vector * 'a \-> 'a array`:: + `fromVector (vec, dflt)` returns a new array created from the elements + of `vec` and with default value `dflt`. The bound of the array will be + `length vec - 1`. + +`[.kw]#val# toList : 'a array \-> 'a list`:: + `toList arr` returns a list of the array's contents. The resulting + list will have the array's bound plus one elements. + +[[val:toVector]] +`[.kw]#val# toVector : 'a array \-> 'a vector`:: + `toVector arr` returns a list of the array's contents. The resulting + vector will have the array's bound plus one elements. + +`[.kw]#val# tabulate: (int * (int \-> 'a) * 'a) \-> 'a array`:: + `tabulate (sz, init, dflt)` returns a new array with the first + `sz` elements initialized using the function `init` and the + default value `dflt`. This function raises the + {sml-basis-url}/general.html#SIG:GENERAL.Size:EXN:SPEC[`Size`] + exception if `sz < 0`. + +`[.kw]#val# default : 'a array \-> 'a`:: + `default arr` returns the default value for the array. + +`[.kw]#val# sub : ('a array * int) \-> 'a`:: + `sub (arr, ix)` returns the value of the array at index `ix`. + If that value has not been explicitly set, then it returns the array's + default value. This function raises the + {sml-basis-url}/general.html#SIG:GENERAL.Subscript:EXN:SPEC[`Subscript`] + exception if `ix < 0`. + +`[.kw]#val# update : ('a array * int * 'a) \-> unit`:: + `update (arr, ix, v)` sets the value at index `ix` of the array to `v`. + If `ix` is greater than the current bound of the array, then the bound + is set to `ix`. This function raises the + {sml-basis-url}/general.html#SIG:GENERAL.Subscript:EXN:SPEC[`Subscript`] + exception if `ix < 0`. + +`[.kw]#val# bound : 'a array \-> int`:: + `bound arr` returns the current bound of the array, which is the highest + index that has been explicitly set (__e.g.__, by `update`). + +`[.kw]#val# truncate : ('a array * int) \-> unit`:: + `truncate (arr, sz)` sets every entry with index greater or equal to + `sz` to the array's default value. + +`[.kw]#val# appi : (int * 'a \-> unit) \-> 'a array \-> unit`:: + `appi f arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.appi:VAL[`Array.appi`] + function on the defined range of `arr`. + +`[.kw]#val# app : ('a \-> unit) \-> 'a array \-> unit`:: + `app f arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.app:VAL[`Array.app`] + function on the defined range of `arr`. + +`[.kw]#val# modifyi : (int * 'a \-> 'a) \-> 'a array \-> unit`:: + `modifyi f arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.modifyi:VAL[`Array.modifyi`] + function on the defined range of `arr`. + +`[.kw]#val# modify : ('a \-> 'a) \-> 'a array \-> unit`:: + `modify f arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.modify:VAL[`Array.modify`] + function on the defined range of `arr`. + +`[.kw]#val# foldli : (int * 'a * 'b \-> 'b) \-> 'b \-> 'a array \-> 'b`:: + `foldli f init arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.foldli:VAL[`Array.foldli`] + function on the defined range of `arr`. + +`[.kw]#val# foldri : (int * 'a * 'b \-> 'b) \-> 'b \-> 'a array \-> 'b`:: + `foldri f init arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.foldri:VAL[`Array.foldri`] + function on the defined range of `arr`. + +`[.kw]#val# foldl : ('a * 'b \-> 'b) \-> 'b \-> 'a array \-> 'b`:: + `foldl f init arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.foldl:VAL[`Array.foldl`] + function on the defined range of `arr`. + +`[.kw]#val# foldr : ('a * 'b \-> 'b) \-> 'b \-> 'a array \-> 'b`:: + `foldr f init arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.foldr:VAL[`Array.foldr`] + function on the defined range of `arr`. + +`[.kw]#val# findi : (int * 'a \-> bool) \-> 'a array \-> (int * 'a) option`:: + `findi f arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.findi:VAL[`Array.findi`] + function on the defined range of `arr`. + +`[.kw]#val# find : ('a \-> bool) \-> 'a array \-> 'a option`:: + `find f arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.find:VAL[`Array.find`] + function on the defined range of `arr`. + +`[.kw]#val# exists : ('a \-> bool) \-> 'a array \-> bool`:: + `exists f arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.exists:VAL[`Array.exists`] + function on the defined range of `arr`. + +`[.kw]#val# all : ('a \-> bool) \-> 'a array \-> bool`:: + `all f arr` behaves like the + {sml-basis-url}/mono-array.html#SIG:ARRAY.all:VAL[`Array.all`] + function on the defined range of `arr`. + +`[.kw]#val# collate : ('a * 'a \-> order) \-> 'a array * 'a array \-> order`:: + `collate cmp (arr1, arr2)` return the lexicographic order of the defined + ranges of the two arrays using the given comparison `cmp` on elements. + +=== Deprecated functions + +`[.kw]#val# vector : 'a array \-> 'a vector`:: + Use xref:#val:toVector[`toVector`] instead. + +== See Also + +xref:fun-DynamicArrayFn.adoc[`DynamicArrayFn`], +{sml-basis-url}/array.html[`Array`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Fifo.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Fifo.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Fifo.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Fifo.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,127 @@ += The `Fifo` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `Fifo` structure provides a functional queue data structure, +which are implemented as a pair of stacks (lists) representing the +front and rear of the queue. **Single-threaded** enqueuing and +dequeuing operations will have amortized constant time. + +== Synopsis + +[source,sml] +------------ +signature FIFO +structure Fifo :> FIFO +------------ + +== Interface + +[source,sml] +------------ +type 'a fifo + +exception Dequeue + +val empty : 'a fifo +val isEmpty : 'a fifo -> bool +val enqueue : 'a fifo * 'a -> 'a fifo +val dequeue : 'a fifo -> 'a fifo * 'a +val next : 'a fifo -> ('a * 'a fifo) option +val delete : ('a fifo * ('a -> bool)) -> 'a fifo +val head : 'a fifo -> 'a +val peek : 'a fifo -> 'a option +val length : 'a fifo -> int +val contents : 'a fifo -> 'a list +val app : ('a -> unit) -> 'a fifo -> unit +val map : ('a -> 'b) -> 'a fifo -> 'b fifo +val foldl : ('a * 'b -> 'b) -> 'b -> 'a fifo -> 'b +val foldr : ('a * 'b -> 'b) -> 'b -> 'a fifo -> 'b +------------ + +== Description + +`[.kw]#type# 'a fifo`:: + The type constructor for functional queues. + +[[exn:Dequeue]] +`[.kw]#exception# Dequeue`:: + This exceptions is raised when the `dequeue` function is + applied to an empty queue. + +`[.kw]#val# empty : 'a fifo`:: + The empty queue. + +`[.kw]#val# isEmpty : 'a fifo \-> bool`:: + `ifEmpty q` returns true if the queue is empty. + +`[.kw]#val# enqueue : 'a fifo * 'a \-> 'a fifo`:: + `enqueue (q, x)` returns a queue with `x` added to the end. + +`[.kw]#val# dequeue : 'a fifo \-> 'a fifo * 'a`:: + `dequeue q` returns a pair `(q', x)`, where `x` was the first + element in `q` and ``q'`` is the queue with `x` removed. + This function raises the xref:#exn:Dequeue[`Dequeue`] exception + if it is called on an empty queue. + +`[.kw]#val# next : 'a fifo \-> ('a * 'a fifo) option`:: + `next q` returns `SOME(q', x)`, where `x` was the first + element in `q` and ``q'`` is the queue with `x` removed, or + `NONE` if `q` is empty. + +`[.kw]#val# delete : ('a fifo * ('a \-> bool)) \-> 'a fifo`:: + `delete (q, pred)` removes those items from `q` for which the + function `pred` returns `true` and returns the resulting queue. + +`[.kw]#val# head : 'a fifo \-> 'a`:: + `head q` returns the first element of `q` or raises the exception + xref:#exn:Dequeue[`Dequeue`] if `q` is empty. + +`[.kw]#val# peek : 'a fifo \-> 'a option`:: + `peek q` returns `SOME x`, where `x` is the first element of `q`, + or `NONE` if `q` is empty. + +`[.kw]#val# length : 'a fifo \-> int`:: + `length q` returns the number of elements in the queue. + +`[.kw]#val# contents : 'a fifo \-> 'a list`:: + `contents q` returns the contents of `q` as a list. + +`[.kw]#val# app : ('a \-> unit) \-> 'a fifo \-> unit`:: + `app f q` applies the function `f` to the elements of `q`. + This expression is equivalent to ++ +[source,sml] +------------ +List.app f (contents q) +------------ + +`[.kw]#val# map : ('a \-> 'b) \-> 'a fifo \-> 'b fifo`:: + `map f q` returns the queue that results from mapping + the function `f` across the elements of the queue. + +`[.kw]#val# foldl : ('a * 'b \-> 'b) \-> 'b \-> 'a fifo \-> 'b`:: + `foldl f init q` folds the function `f` over the elements of `q` from + front to back. This expression is equivalent to ++ +[source,sml] +------------ +List.foldl f init (contents q) +------------ + +`[.kw]#val# foldr : ('a * 'b \-> 'b) \-> 'b \-> 'a fifo \-> 'b`:: + `foldr f init q` folds the function `f` over the elements of `q` from + back to front. This expression is equivalent to ++ +[source,sml] +------------ +List.foldr f init (contents q) +------------ + +== See Also + +xref:str-Queue.adoc[`Queue`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-FNVHash.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-FNVHash.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-FNVHash.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-FNVHash.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,67 @@ += The `FNVHash` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `FNVHash` structure provides an implementation of the +https://en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function[__Fowler-Noll-Vo__] +(FNV) hashing algorithm (specifically the 64-bit FNV-1a algorithm). + +== Synopsis + +[source,sml] +------------ +structure FNVHash +------------ + +== Interface + +[source,sml] +------------ +val offsetBasis : Word64.word + +val hashByte : Word8.word * Word64.word -> Word64.word +val hashChar : char * Word64.word -> Word64.word + +val hashString : string -> word +val hashSubstring : substring -> word +------------ + +== Description + +`[.kw]#val# offsetBasis : Word64.word`:: + The `offsetBasis` should be used as the initial value when + using `hashByte` and/or `hashChar` to incrementally hash a + data value. + +`[.kw]#val# hashByte : Word8.word * Word64.word \-> Word64.word`:: + `hashByte (b, h)` computes one step of the FNV hashing algorithm + for byte `b` and initial hash value `h`. + +`[.kw]#val# hashChar : char * Word64.word \-> Word64.word`:: + `hashByte (c, h)` computes one step of the FNV hashing algorithm + for character `c` and initial hash value `h`. + +`[.kw]#val# hashString : string \-> word`:: + `hashString s` returns the hash of the given string. It is equivalent to + the expression ++ +[source,sml] +------------ +CharVector.foldl hashChar offsetBasis s +------------ + +`[.kw]#val# hashSubstring : substring \-> word`:: + `hashSubstring ss` returns the hash of the given substring. It is equivalent to + the expression ++ +[source,sml] +------------ +Substring.foldl hashChar offsetBasis ss +------------ + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Format.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Format.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Format.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Format.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,222 @@ += The `Format` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `Format` structure provides `printf`-style string formatting. +The syntax of format strings is a subset of that +supported by the *C* `printf` function. + +== Synopsis + +[source,sml] +------------ +structure Format +------------ + +== Interface + +[source,sml] +------------ +datatype fmt_item + = ATOM of Atom.atom + | LINT of LargeInt.int + | INT of Int.int + | LWORD of LargeWord.word + | WORD of Word.word + | WORD8 of Word8.word + | BOOL of bool + | CHR of char + | STR of string + | REAL of Real.real + | LREAL of LargeReal.real + | LEFT of (int * fmt_item) + | RIGHT of (int * fmt_item) + +exception BadFormat +exception BadFmtList + +val format : string -> fmt_item list -> string +val formatf : string -> (string -> unit) -> fmt_item list -> unit +------------ + +== Description + +[[type:fmt_item]] +`[.kw]#datatype# fmt_item = ...`:: + The `fmt_item` datatype is a union of the types that the `format` function + supports. The constructors are interpreted as follows: ++ +-- + `ATOM atm`:: specifies an atom `atm` to convert (the conversion + specifier must be "`s`"). + + `LINT n`:: specifies a large integer value `n` to convert + (the conversion specifier must be one of "`d`", "`o`", "`x`", or "`X`"). + + `INT n`:: specifies a default integer value `n` to convert + (the conversion specifier must be one of "`d`", "`o`", "`x`", or "`X`"). + + `LWORD w`:: specifies a large word value `w` to convert + (the conversion specifier must be one of "`d`", "`o`", "`x`", or "`X`"). + + `WORD w`:: specifies a default word value `w` to convert + (the conversion specifier must be one of "`d`", "`o`", "`x`", or "`X`"). + + `WORD8 w`:: specifies an 8-bit word value `w` to convert + (the conversion specifier must be one of "`d`", "`o`", "`x`", or "`X`"). + + `BOOL b`:: specifies a Boolean value `b` to convert + (the conversion specifier must be "`b`"). + + `CHR c`:: specifies a character value + (the conversion specifier must be "`c`"). + + `STR s`:: specifies a string value `s` to convert + (the conversion specifier must be "`s`"). The conversion is the + identity; _e.g._, `STR "\n"` will produce a newline in the result + string. + + `REAL r`:: specifies a default real value `r` to convert + (the conversion specifier must be one of "`e`", "`E`", "`f`", + "`F`", "`g`", or "`G`"). + + `LREAL r`:: specifies a large real value `r` to convert + (the conversion specifier must be one of "`e`", "`E`", "`f`", + "`F`", "`g`", or "`G`"). + + `LEFT(wid, item)`:: specifies a left-padded (right-justified) + conversion, where the result of formatting `item` + is padded on the left with spaces to the width specified + by `wid`. Note that the padding occurs _after_ `item` + formatted, so it can be combined with width specifiers and + zero padding. + + `RIGHT(wid, item)`:: specifies a right-padded (left-justified) + conversion, where the result of formatting `item` + is padded on the right with spaces to the width specified + by `wid`. Note that the padding occurs _after_ `item` + formatted, so it can be combined with width specifiers and + zero padding. +-- + +`[.kw]#exception# BadFormat`:: + This exception is raised when either `format` or `formatf` is applied + to an ill-formed format string. + +`[.kw]#exception# BadFmtList`:: + This exception is raised when there is a mismatch in either + number or type between the format string and the list of items. + +`[.kw]#val# format : string \-> fmt_item list \-> string`:: + `format fmt` returns a function for formating a list of format items as + a string by converting the list of items according to the format + string `fmt`. If the format string is ill formed, the `BadFormat` + exception will be raised. Likewise, if there is a mismatch between + the conversion specifiers in the format string and the list of items, + then the `BadFmtList` exception is raised. + +`[.kw]#val# formatf : string \-> (string \-> unit) \-> fmt_item list \-> unit`:: + `format fmt consumer items` is equivalent to the expression ++ +[source,sml] +------------ +consumer (format fmt items) +------------ + +== Format Strings + +The `format and `formatf` functions take a format string and a list of +format items as arguments. The format string is composed of zero or more +directives, which are either ordinary characters (excluding `%`), which are +copied to the result, or conversion specifiers, which are used to convert +the corresponding format items to strings that are then added to the result. + +Conversion specifiers begin with the percent (`%`) character followed by +the following in sequence: + +* Zero or more of the following single-character flags. Note that these + only apply to the numeric conversion specifiers. + +** A "++ ++" (space), which means that a space character is used as the + sign for positive numbers. This flag is incompatible with the + "`+`" flag. + +** A "`+`", which means that a `+` character is used as the sign for positive + numbers. This flag is incompatible with the "` `" flag. + +** A "`~`", which means that the tilde character is used as the sign for negative + numbers (_i.e._, *SML* syntax). + +** A "`0`", which means that the zero character should be used to pad the number + (on the left) to the requested width. + +** A "`-`", which means that the minus character is used as the sign for negative + numbers, which is the default behavior. Note that this interpretation + of the "`-`" flag differs from the *C* `printf` function, where it is + used to specify left justification; use the `LEFT` constructor for that + purpose. + +** A "`#`", which means that a _base_ specifier should be prepended to + the representation of the number. + +* an optional decimal number specifying a minimum field width. If the + converted value has fewer characters than the field width, it will be padded + on the left with spaces (or zeros, when zero-padding has been specified). + +* An optional precision, in the form of a period "`.`" followed by an optional + decimal number. If the number is omitted, the precision is taken as zero. + The precision specifies the the number of digits to appear after the + decimal-point for "`a`", "`A`", "`e`", "`E`", "`f`", and "`F`" conversions, + the maximum number of significant digits for "`g`" and "`G`" conversions, and + the maximum number of characters for the "`s`" conversion. + +* The conversion-specifier character, which must match the corresponding + format item. The conversion character is one of the following: + +** A "`d`", which specifies the conversion of an integer (`INT` or `LINT`) + or word (`WORD`, `LWORD`, or `WORD8`) item to its decimal representation. + +** An "`o`", which specifies the conversion of an integer (`INT` or `LINT`) + or word (`WORD`, `LWORD`, or `WORD8`) item to its octal representation. If the + "`#`" flag was specifies, then a leading `"0"` is prepended to the result. + +** An "`x`" or "`X`", which specifies the conversion of an integer + (`INT` or `LINT`) or word (`WORD`, `LWORD`, or `WORD8`) item to its hexadecimal + representation. The digits are lower-case for "`x`" and upper-case + for "`X`". If the "`#`" flag was specifies, then a leading "`0x`" (or "`0X`") + is prepended to the result. + +** An "`e`" or "`E`", which specifies the conversion of a real (`REAL` or + `LREAL`) item to the format ``__s__ __d__ *.* __ddd__ *e* __s__ __dd__``, + where there is one digit before the decimal-point character and the + number of digits after the decimal-point is equal to the precision. + (The "``*e*``" is replaced by "``*E*``" for the "`E`" conversion specifier.) + If the precision is missing, it defaults to six and if the precision is + zero, no decimal-point character appears. The signs (``__s__``) + of the number and exponent are displayed as specified by the flags. + +** A "`f`" or "`F`", which specifies the conversion of a real (`REAL` or + `LREAL`) item to the format ``__s__ __ddd__ *.* __ddd__``, where the + number of digits after the decimal-point is equal to the precision + specification (or six if not specified). + +** A "`g`" or "`G`", which specifies the conversion of a real (`REAL` or + `LREAL`) item to either the format specified by "`e`" or "`f`" + (or "`E`" or "`F`" in the case of "`G`"). + +** A "`b`", which specifies the conversion of a boolean (`BOOL`) item, + which will be displayed as either "`true`" or "`false`." + +** A "`c`", which specifies the identity conversion of a character (`CHAR`) item. + +** A "`s`", which specifies the identity conversion of a string (`STR`) or + atom (`ATOM`) item. + +== See Also + +xref:str-FormatComb.adoc[`FormatComb`], +xref:str-Scan.adoc[`Scan`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-FormatComb.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-FormatComb.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-FormatComb.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-FormatComb.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,323 @@ += The `FormatComb` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `FormatComb` structure provides well-typed formating (or _unparsing_) +combinators in the style of Olivier Danvy's +https://www.brics.dk/RS/98/12/[__Functional Unparsing__] work. + +The idea is to use combinators for constructing something akin to +the format string of *C*'s `printf` function. The difference is, however, +that our formats are not strings. Instead, format fragments have +meaningful types, and passing them to the `format` function results +in a curried function whose arguments have precisely the types that +correspond to argument-consuming parts of the format. (Such +argument-consuming parts are similar to the conversion-specifications +the xref:str-Format.adoc[`Format`] structure.) + +There is an underlying notion of "abstract formats" of type `'a format`, +but the user operates at the level of "format fragments," which +have type `('a, 'b) fragment` and are typically polymorphic +in ``'a`` (where ``'b`` is instantiated to some type containing ``'a``). +Fragments are functions from formats to formats and can be composed +freely using the infix function-composition operator (`o`). This +form of format composition translates to a corresponding concatenation +of the resulting output. + +Fragments are composed from two kids of primitve fragments called +_elements_ and _glue_, respectively. An element is a fragment that +consumes some argument (which thanks to the typing magic appears as a +curried argument when the format gets executed). Glue are fragments +that do not consume arguments but merely insert fixed text (fixed +at format construction time) into the output. + +There are also adjustment operations that pad, trim, or fit the output +of entire fragments (primitive or not) to a given size. + +Matthias Blume wrote the code for this module. + +== Synopsis + +[source,sml] +------------ +signature FORMAT_COMB +structure FormatComb : FORMAT_COMB +------------ + +== Interface + +[source,sml] +------------ +type 'a format +type ('a, 'b) fragment = 'a format -> 'b format + +type 'a glue = ('a, 'a) fragment +type ('a, 't) element = ('a, 't -> 'a) fragment +type 'a gg + +val format : (string, 'a) fragment -> 'a + +val format' : (string list -> 'b) -> ('b, 'a) fragment -> 'a + +val using : ('t -> string) -> ('a, 't) element + +val int : ('a, int) element +val real : ('a, real) element +val bool : ('a, bool) element +val string : ('a, string) element +val string' : ('a, string) element +val char : ('a, char) element +val char' : ('a, char) element + +val int' : StringCvt.radix -> ('a, int) element +val real' : StringCvt.realfmt -> ('a, real) element + +val list : ('a, 'x) element -> ('a, 'x list) element +val option : ('a, 'x) element -> ('a, 'x option) element +val seq : (('x * 'a gg -> 'a gg) -> 'a gg -> 's -> 'a gg) + -> 'a glue + -> ('a, 'x) element + -> ('a, 's) element + +val glue : ('a, 't) element -> 't -> 'a glue + +val elem : ('t -> 'a glue) -> ('a, 't) element + +val nothing : 'a glue +val text : string -> 'a glue +val sp : int -> 'a glue +val nl : 'a glue +val tab : 'a glue + +val listg : ('t -> 'a glue) -> ('t list -> 'a glue) +val optiong : ('t -> 'a glue) -> ('t option -> 'a glue) + +val seqg : (('x * 'a gg -> 'a gg) -> 'a gg -> 's -> 'a gg) + -> 'a glue + -> ('x -> 'a glue) + -> 's -> 'a glue + +type place +val left : place +val center : place +val right : place + +val pad : place -> int -> ('a, 't) fragment -> ('a, 't) fragment +val trim : place -> int -> ('a, 't) fragment -> ('a, 't) fragment +val fit : place -> int -> ('a, 't) fragment -> ('a, 't) fragment + +val padl : int -> ('a, 't) fragment -> ('a, 't) fragment +val padr : int -> ('a, 't) fragment -> ('a, 't) fragment +------------ + +== Description + +`[.kw]#type# 'a format`:: + An abstract type; values of this type are internal to the + implementation. + +`[.kw]#type# ('a, 'b) fragment = 'a format \-> 'b format`:: + A fragment is a function from formats to formats. + +`[.kw]#type# 'a glue = ('a, 'a) fragment`:: + A `glue` fragment insertes text into the output without consuming + and argument. + +`[.kw]#type# ('a, 't) element = ('a, 't \-> 'a) fragment`:: + An `element` fragment consumes an argument of type ``'t``, converts it to a string, + and inserts the result in the output. + +`[.kw]#type# 'a gg`:: + An abstract helper type that is internal to the implementation. + +[[val:format]] +`[.kw]#val# format : (string, 'a) fragment \-> 'a`:: + `format fmt` returns a format function as defined by the expression `fmt` + that will produce a string result when applied to the necessary arguments. + +`[.kw]#val# format' : (string list \-> 'b) \-> ('b, 'a) fragment \-> 'a`:: + `format' consumer fmt` returns a format function as defined by the + expression `fmt` that will invoke the `consumer` on the list of strings + produced by formating when applied to the necessary arguments. + (The argument to the `consumer` is a string list to avoid + premature string concatenation in the implementation). + Note that the xref:#val:format[`format`] function can be defined in + terms of ``format'`` as follows: +[source,sml] +------------ +val format = format' String.concat +------------ + + (* Make a type-specific element given a toString function for this type *) +`[.kw]#val# using : ('t \-> string) \-> ('a, 't) element`:: + `using tos` returns an element fragment that represents the given + "value-to-string" conversion. + +`[.kw]#val# int : ('a, int) element`:: + an element fragment for formating integers; it is equivalent to the + expression `using {sml-basis-url}/integer.html#SIG:INTEGER.toString:VAL[Int.toString]`. + +`[.kw]#val# int' : StringCvt.radix \-> ('a, int) element`:: + `int' radix` returns an element fragment for formating integers in the specified + `radix`. It is equivalent to the expression + `using ({sml-basis-url}/integer.html#SIG:INTEGER.fmt:VAL[Int.fmt] radix)`. + +`[.kw]#val# real : ('a, real) element`:: + an element fragment for formating reals; it is equivalent to the + expression `using {sml-basis-url}/real.html#SIG:REAL.toString:VAL[Real.toString]`. + +`[.kw]#val# real' : StringCvt.realfmt \-> ('a, real) element`:: + `real' rf` returns an element fragment for formating reals with the specified + format. It is equivalent to the expression + `using ({sml-basis-url}/real.html#SIG:REAL.fmt:VAL[Real.fmt] rf)`. + +`[.kw]#val# bool : ('a, bool) element`:: + an element fragment for formating booleans; it is equivalent to the + expression `using {sml-basis-url}/bool.html#SIG:BOOL.toString:VAL[Bool.toString]`. + +`[.kw]#val# string : ('a, string) element`:: + an element fragment for formating raw strings; it is equivalent to the + expression `using (fn x => x)`. + +`[.kw]#val# string' : ('a, string) element`:: + an element fragment for formating strings with escapes; it is equivalent to the + expression `using {sml-basis-url}/string.html#SIG:STRING.toString:VAL[String.toString]`. + +`[.kw]#val# char : ('a, char) element (* using String.str *)`:: + an element fragment for formating raw characters; it is equivalent to the + expression `using {sml-basis-url}/string.html#SIG:STRING.str:VAL[String.str]`. + +`[.kw]#val# char' : ('a, char) element (* using Char.toString *)`:: + an element fragment for formating characters with escapes; it is equivalent to the + expression `using {sml-basis-url}/char.html#SIG:CHAR.toString:VAL[Char.toString]`. + + (* "polymorphic" elements *) +`[.kw]#val# list : ('a, 'x) element \-> ('a, 'x list) element (* "[", ", ", "]" *)`:: + `list elemFmt` returns an element fragment that formats lists of items + using the `elemFmt` element fragment to format items. The list will be enclosed + in brackets ("``[``" "``]``") with elements separated by commas. + +`[.kw]#val# option : ('a, 'x) element \-> ('a, 'x option) element`:: + `option elemFmt` returns an element fragment that formats optional items + using the `elemFmt` element fragment to format the item value. For + an argument of `NONE`, the string `"NONE"` is returned, while for an argument + of `SOME v`, the string `"SOME(s)"` is returned, where `s` is the result + of formatting `v` using `elemFmt`. + +`[.kw]#val# seq : (('x * 'a gg \-> 'a gg) \-> 'a gg \-> 's \-> 'a gg) \-> 'a glue \-> ('a, 'x) element \-> ('a, 's) element`:: + something + +[[val:glue]] +`[.kw]#val# glue : ('a, 't) element \-> 't \-> 'a glue`:: + `glue fmt arg` returns a glue element that renders as the string + that results from using `fmt` to convert `arg` to a string. + +`[.kw]#val# elem : ('t \-> 'a glue) \-> ('a, 't) element`:: + `elem glueGen` returns an element for rendering arguments to the + `glueGen` function. This function is the inverse of xref:#val:glue[`glue`] + and is useful for extending the set of combinators. + +`[.kw]#val# nothing : 'a glue`:: + A glue fragment that renders as the empty string. + +`[.kw]#val# text : string \-> 'a glue`:: + `text s` returns a glue fragment that renders as the text `s`. + +`[.kw]#val# sp : int \-> 'a glue`:: + `sp n` returns a glue fragment that renders as `n` space characters. + +`[.kw]#val# nl : 'a glue`:: + A glue fragment that renders as a newline character. + +`[.kw]#val# tab : 'a glue`:: + A glue fragment that renders as a tab character. + +`[.kw]#val# listg : ('t \-> 'a glue) \-> ('t list \-> 'a glue)`:: + something + +`[.kw]#val# optiong : ('t \-> 'a glue) \-> ('t option \-> 'a glue)`:: + something + +`[.kw]#val# seqg : (('x * 'a gg \-> 'a gg) \-> 'a gg \-> 's \-> 'a gg) \-> 'a glue \-> ('x \-> 'a glue) \-> 's \-> 'a glue`:: + something + +`[.kw]#type# place`:: + An abstract type that represents how to pad or trim of string. + +`[.kw]#val# left : place`:: + Pad or trim the left side of a string. + +`[.kw]#val# center : place`:: + Pad or trim both sides of a string. + +`[.kw]#val# right : place`:: + Pad or trim the left side of a string. + +[[val:pad]] +`[.kw]#val# pad : place \-> int \-> ('a, 't) fragment \-> ('a, 't) fragment`:: + `pad place n frag` wraps the fragment `frag` with padding to bring the total + with to no fewer than `n` characters. The `place` specifies where padding + spaces will be added. Padding never reduces the size of the result. + +[[val:trim]] +`[.kw]#val# trim : place \-> int \-> ('a, 't) fragment \-> ('a, 't) fragment`:: + `trim place n frag` wraps the fragment `frag` with a trimming operation + to bring the total with to no more than `n` characters. The `place` specifies + where trimming occurs. Trimming never increases the size of the result. + +[[val:fit]] +`[.kw]#val# fit : place \-> int \-> ('a, 't) fragment \-> ('a, 't) fragment`:: + `fit place n frag` wraps the fragment `frag` with an operation that + guarantees the result will be exactly `n` characters by either padding or + trimming as necessary. + +`[.kw]#val# padl : int \-> ('a, 't) fragment \-> ('a, 't) fragment`:: + `padl n frag` is equivalent to `pad left n frag`. + +`[.kw]#val# padr : int \-> ('a, 't) fragment \-> ('a, 't) fragment`:: + `padr n frag` is equivalent to `pad right n frag`. + +== Examples + +Here are examples on how to use this facility. + +[source,sml] +------------ +format nothing (* ==> "" *) +format int 1234 (* ==> "1234" *) + +format (text "The square of " o int o text " is " o int o text ".") 2 4 + (* ==> "The square of 2 is 4." *) + +format (int o bool o char) 1 true #"x" + (* ==> "1truex" *) + +format (glue string "glue vs. " o string o glue int 42 o sp 5 o int) + "ordinary text " 17 + (* ==> "glue vs. ordinary text 42 17" *) +------------ + +and here are examples of how the +xref:#val:pad[`pad`]/xref:#val:trim[`trim`]/xref:#val:fit[`fit`] functions work. + +[source,sml] +------------ +format (pad left 6 int) 1234 (* ==> " 1234" *) +format (pad center 6 int) 1234 (* ==> " 1234 " *) +format (pad right 6 int) 1234 (* ==> "1234 " *) +format (trim left 2 int) 1234 (* ==> "34" *) +format (trim center 2 int) 1234 (* ==> "23" *) +format (trim right 2 int) 1234 (* ==> "12" *) +format (fit left 3 int) 12 (* ==> " 12" *) +format (fit left 3 int) 123 (* ==> "123" *) +format (fit left 3 int) 1234 (* ==> "234" *) +------------ + + +== See Also + +xref:str-Format.adoc[`Format`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-GetOpt.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-GetOpt.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-GetOpt.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-GetOpt.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,274 @@ += The `GetOpt` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `GetOpt` structure provides command-line argument processing similar +to the GNU *getopt* library. It supports both short options (a single +character preceded by a single minus character) and long options (multi-character +names preceded by two minus characters). Options may require an argument; +for short options, the argument is the next command-line argument, while for +long options, the argument follows an equal character (_e.g._, +"++--foo=bar++"). If the command-line arguments contains the string +"++--++", then all subsequent arguments are passed through +as non-options. + +This implementation was ported from Sven Panne's Haskell implementation +by Riccardo Pucella and has then been updated in various ways. + +== Synopsis + +[source,sml] +------------ +structure GetOpt +------------ + +== Interface + +[source,sml] +------------ +datatype 'a arg_order + = RequireOrder + | Permute + | ReturnInOrder of string -> 'a + +datatype 'a arg_descr + = NoArg of unit -> 'a + | ReqArg of (string -> 'a) * string + | OptArg of (string option -> 'a) * string + +type 'a opt_descr = { + short : string, + long : string list, + desc : 'a arg_descr, + help : string + } + +val usageInfo : { + header : string, + options : 'a opt_descr list + } -> string + +val getOpt : { + argOrder : 'a arg_order, + options : 'a opt_descr list, + errFn : string -> unit + } -> string list -> ('a list * string list) +------------ + +== Description + +`[.kw]#datatype# 'a arg_order = ...`:: + This datatype is used to specify the ordering policy for command-line + arguments. The constructors are interpreted as follows: ++ +-- +`RequireOrder`:: + No options are processed after the first non-option argument is encountered. + +`Permute`:: + Options and non-options may be freely mixed. + +`ReturnInOrder [.kw]#of# string \-> 'a`:: + Non-options are converted to options using the supplied function. +-- + +`[.kw]#datatype# 'a arg_descr` = ...:: + This datatype is used to describe the optional argument of an option. + Each of the constructors has a function as an argument that is used + to generate the representation of the processed option. + The constructors are interpreted as follows: ++ +-- +[[con:NoArg]] +`NoArg of unit \-> 'a`:: + The option does not have an argument, the supplied function is applied to + unit when processing the option. + +[[con:ReqArg]] +`ReqArg of (string \-> 'a) * string`:: + The option requires an argument, which is handled by the given function. + The string is the name of the argument used when printing a usage message. + +[[con:OptArg]] +`OptArg of (string option \-> 'a) * string`:: + The argument is optional and + The string is the name of the argument used when printing a usage message. +-- + +[[type:opt_descr]] +`[.kw]#type# 'a opt_descr = { ... }`:: + This record type describes the properties of a command-line option. + Its fields have the following meaning: ++ +-- +`short : string`:: + A string containing the allowed short flags for the option. + +`long : string list`:: + A list of the allowed long flags for the option. + +`desc : 'a arg_descr`:: + The description of how to process the option's argument. + +`help : string`:: + A descriptive message that is used to construct the usage message + (see the `usageInfo` function). +-- + +`[.kw]#val# usageInfo : {header, options} \-> string`:: + `usageInfo {header, options}` returns a usage string suitable for a help + message. The `header` argument is prepended to the message (with a newline + between it and the rest of the message). Each option is described on its + own line. + +`[.kw]#val# getOpt : {...} \-> string list \-> ('a list * string list)`:: + `getOpt {argOrder, options, errFn}` returns a function for processing + command-line options, which will return a list of results from processing + the options and a list of the residual command-line arguments. The + arguments to the call are ++ +-- +`argOrder : 'a arg_order`:: + Specifies the ordering policy for processing command-line arguments. +`options : 'a opt_descr list`:: + The descriptors for the command-line options. +`errFn : string \-> unit`:: + An error callback function that is used to report errors during + argument processing. +-- + +== Examples + +There are two common approaches to using the `GetOpt` structure. The first +is to define a type that classifies the command-line options. For example, + +[source,sml] +------------ +datatype opt = AFlg | B of string | C of int | Other of string | Bad + +val opts = [ + { short = "aA", long = [], + desc = NoArg(fn () => AFlg), + help = "Set A flag" + }, + { short = "b", long = ["set-b"], + desc = ReqArg(B, ""), help = "Set B name" + }, + { short = "", long = ["cval"], + desc = OptArg ( + fn (SOME s) => (case Int.fromString s + of SOME n => C n + | NONE => Bad) + | NONE => C 0, + ""), + help = "Set C value (default 0)" + } + ] + +fun usage () = print (usageInfo{header = "usage:", options = opts}) + +val doOpts = getOpt { + argOrder = ReturnInOrder (fn s => Other s), + options = opts, + errFn = fn msg => raise Fail msg + } +------------ + +The usage function will print the following text: + +[source] +-------- +usage: + -a, -A Set A flag + -b --set-b= Set B name + --cval[=] Set C value (default 0) +-------- + +Applying the `doOpts` function with the following arguments + +[source,sml] +------------ +doOpts ["-A", "foo", "--", "-c", "baz"]; +------------ + +results in + +[source,sml] +------------ +([AFlg, Other "foo", Other "--", Other "-c", Other "baz"], []) +------------ + +Note that the second component of the result will always be the empty list +because the non-options were wrapped with `Other`. The "`-c`" argument was +treated as a non-option because it came after the "++--++." + +The other approach to using the `GetOpt` structure is to define references +for the various options and then update them in the argument-descriptor +functions. For example: +[source,sml] +------------ +val aFlg : bool ref = ref false +val bOpt : string option ref = ref NONE +val cVal : int option ref = ref NONE +val errorFlg : bool ref = ref false + +val opts = [ + { short = "aA", long = [], + desc = NoArg(fn () => aFlg := true), + help = "Set A flag" + }, + { short = "b", long = ["set-b"], + desc = ReqArg(fn s => bOpt := SOME s, ""), + help = "Set B name" + }, + { short = "", long = ["cval"], + desc = OptArg ( + fn (SOME s) => (case Int.fromString s + of NONE => errorFlg := true + | someN => cVal := someN) + | NONE => cVal := SOME 0, + ""), + help = "Set C value (default 0)" + } + ] + +val doOpts = getOpt { + argOrder = Permute, + options = opts, + errFn = fn msg => raise Fail msg + } +------------ + +With this version, applying the `doOpts` function with the following arguments + +[source,sml] +------------ +doOpts ["-A", "foo", "--", "-c", "baz"]; +------------ + +results in + +[source,sml] +------------ +([()], ["foo", "--", "-c", "baz"]) +------------ + +with the `aFlg` set to `true` and the other flags unchanged. One reason +for using this imperative approach is that it is supported by the +xref:../Controls/controls-lib.adoc[*Controls Library*]. + + +== Bugs + +The function arguments to `ReqArg` and `OptArg` should really have +an option return type so that the case where the argument is badly formed +can be identified in the `GetOpt` implementation. + +== See Also + +xref:../Controls/str-ControlUtil.adoc[`Controls`], +xref:../Controls/controls-lib.adoc[__The Controls Library__], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-HashString.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-HashString.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-HashString.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-HashString.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,39 @@ += The `HashString` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `HashString` structure provides hashing functions for strings +and substrings. It is currently implemented as an alias for the +same functions from the xref:str-FNVHash.adoc[`FNVHash`] structure. + +== Synopsis + +[source,sml] +------------ +structure HashString +------------ + +== Interface + +[source,sml] +------------ +val hashString : string -> word + +val hashSubstring : substring -> word +------------ + +== Description + +`[.kw]#val# hashString : string \-> word`:: + `hashString s` returns a hash code for the string `s`. + +`[.kw]#val# hashSubstring : substring \-> word`:: + `hashSubstring s` returns a hash code for the substring `ss`. + +== See Also + +xref:str-FNVHash.adoc[`FNVHash`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-HashTable.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-HashTable.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-HashTable.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-HashTable.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,171 @@ += The `HashTable` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `HashTable` structure implements hash tables that are polymorphic +in the key type. + +The tables are implemented as an array of _buckets_, which are +lists of key-value pairs. The number of buckets grows with the number +of table entries. + +== Synopsis + +[source,sml] +------------ +structure HashTable +------------ + +== Interface + +[source,sml] +------------ +type ('a, 'b) hash_table + +val mkTable : (('a -> word) * (('a * 'a) -> bool)) -> (int * exn) + -> ('a,'b) hash_table + +val clear : ('a, 'b) hash_table -> unit + +val insert : ('a, 'b) hash_table -> ('a * 'b) -> unit + +val inDomain : ('a, 'b) hash_table -> 'a -> bool + +val lookup : ('a, 'b) hash_table -> 'a -> 'b + +val find : ('a, 'b) hash_table -> 'a -> 'b option + +val remove : ('a, 'b) hash_table -> 'a -> 'b + +val numItems : ('a, 'b) hash_table -> int + +val listItems : ('a, 'b) hash_table -> 'b list +val listItemsi : ('a, 'b) hash_table -> ('a * 'b) list + +val app : ('b -> unit) -> ('a, 'b) hash_table -> unit +val appi : (('a * 'b) -> unit) -> ('a, 'b) hash_table -> unit + +val map : ('b -> 'c) -> ('a, 'b) hash_table -> ('a, 'c) hash_table +val mapi : (('a * 'b) -> 'c) -> ('a, 'b) hash_table -> ('a, 'c) hash_table + +val fold : (('b *'c) -> 'c) -> 'c -> ('a, 'b) hash_table -> 'c +val foldi : (('a * 'b * 'c) -> 'c) -> 'c -> ('a, 'b) hash_table -> 'c + +val modify : ('b -> 'b) -> ('a, 'b) hash_table -> unit +val modifyi : (('a * 'b) -> 'b) -> ('a, 'b) hash_table -> unit + +val filter : ('b -> bool) -> ('a, 'b) hash_table -> unit +val filteri : (('a * 'b) -> bool) -> ('a, 'b) hash_table -> unit + +val copy : ('a, 'b) hash_table -> ('a, 'b) hash_table + +val bucketSizes : ('a, 'b) hash_table -> int list +------------ + +== Description + +`[.kw]#type# ('a, 'b) hash_table`:: + The type of imperative hash tables indexed by ``'a`` values + +`[.kw]#val# mkTable : (('a \-> word) * (('a * 'a) \-> bool)) \-> (int * exn) \-> ('a,'b) hash_table`:: + `mkTable (hash, same) (n, ex)` creates a new hash table that uses the `hash` + function to compute hash values for keys and the `same` function to test + key equality. The table will be initially sized to hold at least `n` items. + The exception `ex` is raised by the xref:#val:lookup[`lookup`] and + xref:#val:remove[`remove`] functions when the search key is not in the domain. + +`[.kw]#val# clear : ('a, 'b) hash_table \-> unit`:: + `clear tbl` removes all of the entries in the table. + +`[.kw]#val# insert : ('a, 'b) hash_table \-> ('a * 'b) \-> unit`:: + `insert tbl (key, item)` inserts a mapping from `key` to `item` into `tbl`. + Any existing mapping of `key` is discarded. + +`[.kw]#val# inDomain : ('a, 'b) hash_table \-> 'a \-> bool`:: + `inDomain tbl key` returns `true` if, and only if, `key` is in the + domain of the table + +[[val:lookup]] +`[.kw]#val# lookup : ('a, 'b) hash_table \-> 'a \-> 'b`:: + `lookup tbl key` returns the item that `key` maps to if `key` is in + the domain of `tbl`. Otherwise, the table's exception is raised. + +`[.kw]#val# find : ('a, 'b) hash_table \-> 'a \-> 'b option`:: + `find tbl key` returns the `SOME v` if `key` is mapped to `v` in `tbl`. + Otherwise, it returns `NONE`. + +[[val:remove]] +`[.kw]#val# remove : ('a, 'b) hash_table \-> 'a \-> 'b`:: + `remove tbl key` returns the item that `key` maps to if `key` is in + the domain of `tbl` and removes it from the table. Otherwise, the + table's exception is raised. + +`[.kw]#val# numItems : ('a, 'b) hash_table \-> int`:: + `numItems tbl` returns the number of entries in the table. + +`[.kw]#val# listItems : ('a, 'b) hash_table \-> 'b list`:: + `listItems tbl` returns a list of the items in the range of `tbl`. + +`[.kw]#val# listItemsi : ('a, 'b) hash_table \-> ('a * 'b) list`:: + `listItemsi tbl` returns a list of the key-value entries in `tbl`. + +`[.kw]#val# app : ('b \-> unit) \-> ('a, 'b) hash_table \-> unit`:: + `app f tbl` applies the function `f` to each item in the range of `tbl`. + +`[.kw]#val# appi : (('a * 'b) \-> unit) \-> ('a, 'b) hash_table \-> unit`:: + `appi f tbl` applies the function `f` to each item in the + key-value entries in `tbl`. + +`[.kw]#val# map : ('b \-> 'c) \-> ('a, 'b) hash_table \-> ('a, 'c) hash_table`:: + `map f tbl` creates a new table with an entry `(key, f(lookup tbl key))` + in the new table for every `key` in `tbl`. The new table inherits its + hash and key-equality functions, and exception from `tbl`. + +`[.kw]#val# mapi : (('a * 'b) \-> 'c) \-> ('a, 'b) hash_table \-> ('a, 'c) hash_table`:: + `mapi f tbl` creates a new table with an entry `(key, f(key, lookup tbl key))` + in the new table for every `key` in `tbl`. The new table inherits its + hash and key-equality functions, and exception from `tbl`. + +`[.kw]#val# fold : (('b *'c) \-> 'c) \-> 'c \-> ('a, 'b) hash_table \-> 'c`:: + `fold f init tbl` folds the function `f` over the items in the range of `tbl` + using `init` as an initial value. + +`[.kw]#val# foldi : (('a * 'b * 'c) \-> 'c) \-> 'c \-> ('a, 'b) hash_table \-> 'c`:: + `foldi f init tbl` folds the function `f` over the key-velu entries in `tbl` + using `init` as an initial value. + +`[.kw]#val# modify : ('b \-> 'b) \-> ('a, 'b) hash_table \-> unit`:: + `modify f tbl` applies the function `f` for effect to the items in the + range of `tbl`, replacing the old items with the result of applying `f`. + +`[.kw]#val# modifyi : (('a * 'b) \-> 'b) \-> ('a, 'b) hash_table \-> unit`:: + `modifyi f tbl` applies the function `f` for effect to the key-value + entries in `tbl`, replacing the old items with the result of applying `f`. + +`[.kw]#val# filter : ('b \-> bool) \-> ('a, 'b) hash_table \-> unit`:: + `filter pred tbl` removes any entry `(key, item)` from `tbl` for which + `pred item` returns `false`. + +`[.kw]#val# filteri : (('a * 'b) \-> bool) \-> ('a, 'b) hash_table \-> unit`:: + `filteri pred tbl` removes any entry `(key, item)` from `tbl` for which + `pred(key, item)` returns `false`. + +`[.kw]#val# copy : ('a, 'b) hash_table \-> ('a, 'b) hash_table`:: + `copy tbl` creates a copy of `tbl`. This expression is equivalent to ++ +[source,sml] +------------ +map (fn x => x) tbl +------------ + +`[.kw]#val# bucketSizes : ('a, 'b) hash_table \-> int list`:: + `bucketSizes tbl` returns a list of the current number of items per + bucket. This function allows users to gauge the quality of their + hashing function. + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-IOUtil.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-IOUtil.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-IOUtil.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-IOUtil.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,65 @@ += The `IOUtil` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `IOUtil` structure provides support for redirecting the standard input +and output streams. + +== Synopsis + +[source,sml] +------------ +signature IO_UTIL +structure IOUtil : IO_UTIL +------------ + +== Interface + +[source,sml] +------------ +val withInputFile : string * ('a -> 'b) -> 'a -> 'b +val withInstream : TextIO.instream * ('a -> 'b) -> 'a -> 'b + +val withOutputFile : string * ('a -> 'b) -> 'a -> 'b +val withOutstream : TextIO.outstream * ('a -> 'b) -> 'a -> 'b +------------ + +== Description + +`[.kw]#val# withInputFile : string * ('a \-> 'b) \-> 'a \-> 'b`:: + `withInputFile (file, f) x` evaluates the expression `f x` with + standard input bound to `file`. The file is closed and the + `TextIO.stdIn` input stream is restored to its original binding + once evaluation terminates. + +`[.kw]#val# withInstream : TextIO.instream * ('a \-> 'b) \-> 'a \-> 'b`:: + `withInstream (inS, f) x` evaluates the expression `f x` with + standard output redirected to `inS`. The `TextIO.stdIn` input stream + is restored to its original binding once evaluation terminates. + +`[.kw]#val# withOutputFile : string * ('a \-> 'b) \-> 'a \-> 'b`:: + `withOutputFile (file, f) x` evaluates the expression `f x` with + standard output redirected to `file`. The file is closed and the + `TextIO.stdOut` output stream is restored to its original destination + once evaluation terminates. + +`[.kw]#val# withOutstream : TextIO.outstream * ('a \-> 'b) \-> 'a \-> 'b`:: + `withOutstream (outS, f) x` evaluates the expression `f x` with + standard output redirected to `outS`. The `TextIO.stdOut` output stream + is restored to its original destination once evaluation terminates. + +== Example + +The following expression will put its output in the file "hello.txt": + +[source,sml] +------------ +withOutputFile ("hello.txt", fn () => print "hello world\n") () +------------ + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-LibBase.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-LibBase.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-LibBase.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-LibBase.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,52 @@ += The `LibBase` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `LibBase` structure provides some common definitions that are +shared across the *SML/NJ Lbrary*. + +== Synopsis + +[source,sml] +------------ +signature LIB_BASE +structure LibBase : LIB_BASE +------------ + +== Interface + +[source,sml] +------------ +exception Unimplemented of string +exception Impossible of string + +exception NotFound + +val failure : {module : string, func : string, msg : string} -> 'a +------------ + +== Description + +`[.kw]#exception# Unimplemented of string`:: + This exception is raised to report unimplemented features. + +`[.kw]#exception# Impossible of string`:: + This exception is raised to report internal errors. + +[[exn:NotFound]] +`[.kw]#exception# NotFound`:: + This exception is raised by searching operations when something being + searched for is missing. + +`[.kw]#val# failure : {module : string, func : string, msg : string} \-> 'a`:: + `failure {module, func, msg}` raises the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] exception + with a message in a standard format. It is used internally to report + errors. + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListFormat.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListFormat.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListFormat.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListFormat.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,75 @@ += The `ListFormat` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ListFormat` structure provides some utility functions for converting +lists into strings (and back). + +== Synopsis + +[source,sml] +------------ +signature LIST_FORMAT +structure ListFormat : LIST_FORMAT +------------ + +== Interface + +[source,sml] +------------ +val fmt : { + init : string, + sep : string, + final : string, + fmt : 'a -> string + } -> 'a list -> string + +val listToString : ('a -> string) -> 'a list -> string + +val scan : { + init : string, + sep : string, + final : string, + scan : (char, 'b) StringCvt.reader -> ('a, 'b) StringCvt.reader + } -> (char, 'b) StringCvt.reader -> ('a list, 'b) StringCvt.reader +------------ + +== Description + +`[.kw]#val# fmt : { ... } \-> 'a list \-> string`:: + `fmt {init, sep, final, fmt} lst` converts the list `lst` to a string, + where `init` is an initial string, `sep` is the separator, `final` is + the final string, and `fmt` is a function for converting the list + elements to strings. For the list value `[a, b, ..., c]`, the resulting + string will be formatted as ++ +[source,sml] +------------ +init ^ (fmt a) ^ sep ^ (fmt b) ^ sep ^ ... ^ sep ^ (fmt c) ^ final +------------ + +`[.kw]#val# listToString : ('a \-> string) \-> 'a list \-> string`:: + `listToString fmt lst` returns a string representing `lst` using **SML**'s + list notation. In other words, the above expression is equivalent to ++ +[source,sml] +------------ +fmt {init="[", sep=",", final="]", fmt=fmt} lst +------------ + +`[.kw]#val# scan : { ... } \-> (char, 'b) StringCvt.reader \-> ('a list, 'b) StringCvt.reader`:: + `scan {init, sep, final, scan} getc` returns a + {sml-basis-url}/string-cvt.html#SIG:STRING_CVT.reader:TY[`reader`] + for scanning lists of items from a character stream. The resulting + reader expects the list to begin with the `init` string, use `sep` as + a separator, and end with the `final` string. The reader uses the `scan` + argument function to scan individual list elements. + + The reader will skip extra whitespace, so to scan a list of items separated + by spaces, use the empty string (`""`) as the separator. + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListMergeSort.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListMergeSort.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListMergeSort.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListMergeSort.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,50 @@ += The `ListMergeSort` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ListMergeSort` structure implements the merge-sort +algorithm for lists. + +== Synopsis + +[source,sml] +------------ +signature LIST_SORT +structure ListMergeSort : LIST_SORT +------------ + +== Interface + +[source,sml] +------------ + val sort : ('a * 'a -> bool) -> 'a list -> 'a list + + val uniqueSort : ('a * 'a -> order) -> 'a list -> 'a list + + val sorted : ('a * 'a -> bool) -> 'a list -> bool +------------ + +== Description + +`[.kw]#val# sort : ('a * 'a \-> bool) \-> 'a list \-> 'a list`:: + `sort gt l` sorts the list `l` in _ascending_ order using the + "greater-than" relationship defined by `gt`. This sort is _stable_ + and detects initial increasing and decreasing runs and thus is linear + time on ordered inputs. + +`[.kw]#val# uniqueSort : ('a * 'a \-> order) \-> 'a list \-> 'a list`:: + `uniquesort cmp l` sorts the list `l` in _ascending_ order using the + comparison function `cmp`, while removing duplicate elements. + +`[.kw]#val# sorted : ('a * 'a \-> bool) \-> 'a list \-> bool`:: + `sorted gt l` returns `true` if the list is sorted in _ascending_ + order under the _greater-than_ relation `gt`. + +== See Also + +sig-MONO_ARRAY_SORT.adoc[`MONO_ARRAY_SORT`], +sig-ARRAY_SORT.adoc[`ARRAY_SORT`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListXProd.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListXProd.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListXProd.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ListXProd.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,76 @@ += The `ListXProd` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ListXProd` structure provides list combinators for computing +over the "Cartesian product" of two lists. For lists `[a, b, c]` +and `[x, y, z]`, the elements are processed in the order +[source,sml] +------------ +[ (a, x), (a, y), (a, z), + (b, x), (b, y), (b, z), + (c, x), (c, y), (c, z) +] +------------ + + +== Synopsis + +[source,sml] +------------ +signature LIST_XPROD +structure ListXProd : LIST_XPROD +------------ + +== Interface + +[source,sml] +------------ +val app : (('a * 'b) -> unit) -> ('a list * 'b list) -> unit +val map : (('a * 'b) -> 'c) -> ('a list * 'b list) -> 'c list +val fold : (('a * 'b * 'c) -> 'c) -> 'c -> ('a list * 'b list) -> 'c + +val appX : (('a * 'b) -> unit) -> ('a list * 'b list) -> unit +val mapX : (('a * 'b) -> 'c) -> ('a list * 'b list) -> 'c list +val foldX : (('a * 'b * 'c) -> 'c) -> ('a list * 'b list) -> 'c -> 'c +------------ + +== Description + +[[val:app]] +`[.kw]#val# app : (('a * 'b) \-> unit) \-> ('a list * 'b list) \-> unit`:: + `appX f (l1, l2)` applies the function `f` to the Cartesian product of the + to lists `l1` and `l2`. + +[[val:map]] +`[.kw]#val# map : (('a * 'b) \-> 'c) \-> ('a list * 'b list) \-> 'c list`:: + `mapX f (l1, l2)` maps the function `f` over the Cartesian product of the + to lists `l1` and `l2` to produce a new list. + +[[val:fold]] +`[.kw]#val# fold : (('a * 'b * 'c) \-> 'c) \-> 'c \->('a list * 'b list) \-> 'c`:: + `foldX f init (l1, l2)` folds the function `f` over the Cartesian product of the + to lists `l1` and `l2`, using `init` as the initial value. + +=== Deprecated functions + +The following functions are part of the interface, but have been +deprecated. + +`[.kw]#val# appX : (('a * 'b) \-> 'c) \-> ('a list * 'b list) \-> unit`:: + Use xref:#val:app[`app`] instead. Note that xref:#val:app[`app`] expects + that its first argument will have a `unit` return type. + +`[.kw]#val# mapX : (('a * 'b) \-> 'c) \-> ('a list * 'b list) \-> 'c list`:: + Use xref:#val:map[`map`] instead. + +`[.kw]#val# foldX : (('a * 'b * 'c) \-> 'c) \-> 'c \->('a list * 'b list) \-> 'c`:: + Use xref:#val:fold[`fold`] instead. Note that the second and third + arguments of xref:#val:fold[`fold`] are swapped with respect to `foldX`. + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ParserComb.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ParserComb.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ParserComb.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-ParserComb.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,254 @@ += The `ParserComb` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `ParserComb` structure provides parser combinators over +character readers. This structure is modeled after the Haskell +combinators of Hutton and Meijer. The main difference is that +they return a single result, instead of a list of results. +This fact means that the `or` combinator is a *committed* choice; +once one branch succeeds, the others will not be enabled. While +this property is somewhat limiting, for many applications it +will not be a problem. + +== Synopsis + +[source,sml] +------------ +signature PARSER_COMB +structure ParserComb : PARSER_COMB +------------ + +== Interface + +[source,sml] +------------ +type ('a, 'strm) parser = + (char, 'strm) StringCvt.reader -> ('a, 'strm) StringCvt.reader + +val result : 'a -> ('a, 'strm) parser + +val failure : ('a, 'strm) parser + +val wrap : (('a, 'strm) parser * ('a -> 'b)) -> ('b, 'strm) parser + +val seq : (('a, 'strm) parser * ('b, 'strm) parser) -> (('a * 'b), 'strm) parser +val seqWith : (('a * 'b) -> 'c) + -> (('a, 'strm) parser * ('b, 'strm) parser) + -> ('c, 'strm) parser + +val bind : (('a, 'strm) parser * ('a -> ('b, 'strm) parser)) + -> ('b, 'strm) parser + +val eatChar : (char -> bool) -> (char, 'strm) parser + +val char : char -> (char, 'strm) parser +val string : string -> (string, 'strm) parser + +val skipBefore : (char -> bool) -> ('a, 'strm) parser -> ('a, 'strm) parser + +val or : (('a, 'strm) parser * ('a, 'strm) parser) -> ('a, 'strm) parser +val or' : ('a, 'strm) parser list -> ('a, 'strm) parser + +val zeroOrMore : ('a, 'strm) parser -> ('a list, 'strm) parser +val oneOrMore : ('a, 'strm) parser -> ('a list, 'strm) parser + +val option : ('a, 'strm) parser -> ('a option, 'strm) parser +val join : ('a option, 'strm) parser -> ('a, 'strm) parser + +val token : (char -> bool) -> (string, 'strm) parser +------------ + +== Description + +[[type:parser]] +`[.kw]#type# ('a, 'strm) parser = (char, 'strm) StringCvt.reader \-> ('a, 'strm) StringCvt.reader`:: + A parser is a function that takes a + {sml-basis-url}/string-cvt.html#SIG:STRING_CVT.reader:TY[character reader] + and returns reader for the type of values the parser accepts. + +`[.kw]#val# result : 'a \-> ('a, 'strm) parser`:: + `result v getc strm` returns `SOME(v, strm)`; _i.e._, `result v` + lifts the value `v` to a parser that returns `v` without consuming + any input. + +`[.kw]#val# failure : ('a, 'strm) parser`:: + `failure getc strm` returns `NONE`; _i.e._ it is the parser that + does not accept any input. + +`[.kw]#val# wrap : (('a, 'strm) parser * ('a \-> 'b)) \-> ('b, 'strm) parser`:: + `wrap parser f` composes the function `f` with `parser` + +`[.kw]#val# seq : (('a, 'strm) parser * ('b, 'strm) parser) \-> (('a * 'b), 'strm) parser`:: + `seq (parser1, parser2)` returns a parser is the sequential combination of the + two parsers; _i.e._, a parser that will first parse a value `v1` + from the input using `parser1` and then parse a value `v2` using `parser2` + yielding the pair `(v1, v2)`. + +`[.kw]#val# seqWith : (('a * 'b) \-> 'c) \-> (('a, 'strm) parser * ('b, 'strm) parser) \-> ('c, 'strm) parser`:: + `seq f (parser1, parser2)` is the sequential combination of the two parsers composed + with the function `f`; _i.e._, a parser that will first parse a value `v1` + from the input using `parser1` and then parse a value `v2` using `parser2` + yielding the result of `f(v1, v2)`. This expression is equivalent to ++ +[source,sml] +------------ +wrap (seq (parser1, parser2), f) +------------ + +`[.kw]#val# bind : (('a, 'strm) parser * ('a \-> ('b, 'strm) parser)) \-> ('b, 'strm) parser`:: + `bind parser f` returns a parser that first uses `parser` to parse a value `v` + from the input and then continues using the parser that results from `f v`. + +`[.kw]#val# eatChar : (char \-> bool) \-> (char, 'strm) parser`:: + `eatChar pred` returns a parser that parses *one* character `c` for which + `pred c` returns `true`. + +`[.kw]#val# char : char \-> (char, 'strm) parser`:: + `char c` returns a parser that parses the character `c`. + +`[.kw]#val# string : string \-> (string, 'strm) parser`:: + `string s`returns a parser that parses the string `s`. + +`[.kw]#val# skipBefore : (char \-> bool) \-> ('a, 'strm) parser \-> ('a, 'strm) parser`:: + `skipBefore pred parser` returns a parser that first skips any prefix of characters + that satisfy the predicate `pred` and then applies `parser` to the input. + +`[.kw]#val# or : (('a, 'strm) parser * ('a, 'strm) parser) \-> ('a, 'strm) parser`:: + `or (parser1, parser2)` returns the ordered choice of the two parsers; _i.e._, + it returns a parser that first attempts to parse the input using `parser1`; if + `parser1` fails on the input, then it uses `parser2`. + +`[.kw]#val# or' : ('a, 'strm) parser list \-> ('a, 'strm) parser`:: + `or' parsers` returns the ordered choice of a list of parsers. This + expression is equivalent to ++ +[source,sml] +------------ +List.foldr or failure parsers +------------ + +`[.kw]#val# zeroOrMore : ('a, 'strm) parser \-> ('a list, 'strm) parser`:: + `zeroOrMore parser` returns a parser that parses a list of zero or more + items using `parser`. + +`[.kw]#val# oneOrMore : ('a, 'strm) parser \-> ('a list, 'strm) parser`:: + `oneOrMore parser` returns a parser that parses a list of one or more + items using `parser`. + +`[.kw]#val# option : ('a, 'strm) parser \-> ('a option, 'strm) parser`:: + `option parser` returns a parser that parses an optional item + (_i.e._, zero or one occurrences) using `parser`. + +`[.kw]#val# join : ('a option, 'strm) parser \-> ('a, 'strm) parser`:: + `join parser` returns a parser that requires the optional item parsed + by `parser` to be present. + +`[.kw]#val# token : (char \-> bool) \-> (string, 'strm) parser`:: + `token pred` returns a parser for a string of characters, where every + character satisfies the predicate function `pred`. + +== Examples + +As noted above, the xref:#type:parser[`parser`] type and combinators are +designed around the +{sml-basis-url}/string-cvt.html#SIG:STRING_CVT.reader:TY[StringCvt.reader] +representation of input streams. +Thus, the `scan` functions defined in the {basis-lib-url}/index.html[*Basis Library*] +are compatible with the `parser` type defined here. For example, + +[source,sml] +------------ +val boolParser : (bool, 'strm) parser = Bool.scan +val intParser : (int, 'strm) parser = Int.scan StringCvt.DEC +------------ + +Let us define the abstract syntax of a small expression language with +addition, numbers, and let-bound variables. + +[source,sml] +------------ +datatype exp + = VAR of string + | NUM of int + | ADD of exp * exp + | LET of string * exp * exp +------------ + +We can use parser combinators to implement a simple parser +for this language as follows. + +We start by defining a few utility definitions: + +[source,sml] +------------ +structure P = ParserComb + +val +> = P.seq +infixr 3 +> + +fun skipWS getc = P.skipBefore Char.isSpace getc +------------ + +We can then define parsers for the atomic expressions +(numbers and variables): + +[source,sml] +------------ +fun numParser getc = P.wrap (Int.scan StringCvt.DEC, NUM) getc +fun idParser getc = P.seqWith String.^ ( + P.wrap (P.eatChar Char.isAlpha, str), + P.token Char.isAlphaNum) getc +fun varParser getc = P.wrap(idParser, VAR) getc +------------ + +We need the separate `idParser` to parse let-bound identifiers. + +We then define three, mutually-recursive, functions to parse +expressions. + +[source,sml] +------------ +fun letParser getc = P.wrap ( + P.string "let" +> skipWS(idParser) +> skipWS(P.char #"=") +> expParser + +> skipWS(P.string "in") +> expParser, + fn (_, (x, (_, (e1, (_, e2))))) => LET(x, e1, e2)) getc +and expParser getc = P.wrap ( + skipWS (P.seq ( + P.or' [letParser, numParser, varParser], + addParser)), + fn (e, es) => List.foldl (fn (a, b) => ADD(b, a)) e es) getc +and addParser getc = + P.zeroOrMore (skipWS (P.wrap (P.char #"+" +> expParser, #2))) getc +------------ + +Note that the `letParser` must appear before the `varParser` in the +list of parsers combined by ``or'`` to avoid treating the string `"let"` +as a variable. Another detail is that we use +{sml-basis-url}/list.html#SIG:LIST.foldl:VAL[`List.foldl`] with a +function that swaps the order of its arguments in order +that addition is left associative. + +If we evaluate the expression + +[source,sml] +------------ +StringCvt.scanString expParser " let x = 1+2 in x + x "; +------------ + +we get the expected result + +[source,sml] +------------ +SOME (LET ("x", ADD (NUM 1, NUM 2), ADD (VAR "x", VAR "x"))) +------------ + + +== See Also + +https://smlnj.org/doc/ml-lpt/manual.pdf[__SML/NJ Language Processing Tools: User Guide__], +https://smlnj.org/doc/ML-Yacc/index.html[__ML-Yacc User's Manual__], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-PathUtil.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-PathUtil.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-PathUtil.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-PathUtil.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,79 @@ += The `PathUtil` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `PathUtil` structure provides support for searching for files +in the file system using a list of possible locations. It is implemented +using the {sml-basis-url}/index.html[*SML Basis Library*] portable +file-system mechanisms and, thus, it itself portable across different +operating systems. + +== Synopsis + +[source,sml] +------------ +signature PATH_UTIL +structure PathUtil : PATH_UTIL +------------ + +== Interface + +[source,sml] +------------ +val findFile : string list -> string -> string option + +val findFiles : string list -> string -> string list + +val existsFile : (string -> bool) -> string list -> string -> string option + +val allFiles : (string -> bool) -> string list -> string -> string list + +val findExe : string list -> string -> string option +------------ + +== Description + +`[.kw]#val# findFile : string list \-> string \-> string option`:: + `findFile paths __name__` returns `SOME path`, where `path` is a string of + the form ``"__p__/__name__"`` and ``__p__`` is the first string in `paths` + such that `path` exists. If no such file exists, then `NONE` is returned. + If `__name__` is an absolute path, then `SOME __name__` is returned + if it exists. + +`[.kw]#val# findFiles : string list \-> string \-> string list`:: + `findFiles (paths, mode) __name__` returns a list of strings, such that each string + `s` in the result has the form ``"__p__/__name__"`` with ``__p__`` in `paths` + and the file named by `path` existing in the file system. + +`[.kw]#val# existsFile : (string \-> bool) \-> string list \-> string \-> string option`:: + `existsFile pred paths name` returns `SOME path`, where `path` is a string of + the form ``"__p__/__name__"`` and ``__p__`` is the first string in `paths` + such that `path` exists and that `pred path` returns true. If no such file exists, + then `NONE` is returned. If `__name__` is an absolute path, then + `SOME __name__` is returned if it exists and satisfies the predicate. + +`[.kw]#val# allFiles : (string \-> bool) \-> string list \-> string \-> string list`:: + `allFiles pred paths name` returns a list of strings, such that each string + `s` in the result has the form ``"__p__/__name__"`` with ``__p__`` in `paths`, + the file named by `path` existing in the file system, and `pred path` returns + `true`. The order of the path list is preserved in the result. If `__name__` + is an absolute path, then the list `[__name__]` is returned if `__name__` exists + and satisfies the predicate. + +`[.kw]#val# findExe : string list \-> string \-> string option`:: + `findExe paths name` searches `paths` for an _executable_ file with the given + name. This expression is equivalent to ++ +[source,sml] +------------ +existsFile (fn p => OS.FileSys.access(p, [OS.FileSys.A_EXEC])) paths name +------------ + + +== See Also + +xref:../Unix/str-UnixPath.adoc[`UnixPath`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-PropList.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-PropList.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-PropList.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-PropList.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,139 @@ += The `PropList` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `PropList` structure provides a extensible, but type safe, implementation +of property lists. + +== Synopsis + +[source,sml] +------------ +structure PropList +------------ + +== Interface + +[source,sml] +------------ +type holder + +val newHolder : unit -> holder + +val hasProps : holder -> bool + +val clearHolder : holder -> unit + +val sameHolder : (holder * holder) -> bool + +val newProp : (('a -> holder) * ('a -> 'b)) -> { + peekFn : 'a -> 'b option, + getFn : 'a -> 'b, + setFn : ('a * 'b) -> unit, + clrFn : 'a -> unit + } + +val newFlag : ('a -> holder) -> { + getFn : 'a -> bool, + setFn : ('a * bool) -> unit + } +------------ + +== Description + +`[.kw]#type# holder`:: + The type of a property-list container. + +`[.kw]#val# newHolder : unit \-> holder`:: + `newHolder ()` creates a new property-list holder. + +[[val:hasProps]] +`[.kw]#val# hasProps : holder \-> bool`:: + `hasProps holder` return `true` if, and only if, the holder contains + properties (including set flags). + +`[.kw]#val# clearHolder : holder \-> unit`:: + `clearHolder holder` removes all properties and flags from the holder. + +`[.kw]#val# sameHolder : (holder * holder) \-> bool`:: + `sameHolder (holder1, holder2)` returns `true` if, and only if, + the two holders are the same. + +`[.kw]#val# newProp : (('a \-> holder) * ('a \-> 'b)) \-> { ... }`:: + `newProp (getHolder, init)` creates a new property of type ``'b`` + associated with values of type ``'a``, where `getHolder` is a function + for getting the holder from a value and `init` is a function for + defining the initial value of the property for a value. The property + is represented by a record of operations, which are as follows: ++ +-- + `peekFn : 'a \-> 'b option`:: + `peekFn obj` returns `SOME v`, where `v` is the value of the + property for `obj`. If the property has not been set for `obj`, + then `NONE` is returned. + + `getFn : 'a \-> 'b`:: + `getFn obj` returns the value of the property for `obj`. If the + property has not been set for `obj`, then the `init` function is + used to set the initial value of the property. + + `setFn: ('a * 'b) \-> unit`:: + `setFn (obj, v)` sets the value of the property to `v` for `obj`. + + `clrFn : 'a \-> unit`:: + `clrFn obj` removes the property from `obj`. +-- + +`[.kw]#val# newFlag : ('a \-> holder) \-> { ... }`:: + `newFlag getHolder` creates a new boolean property for values of type ``'a``. + The property is represented by a record of two functions: ++ +-- + `getFn : 'a \-> bool`:: + `getFn obj` returns the value of the flag for `obj`. + + `setFn : ('a * bool) \-> unit`:: + `setFn (obj, b)` sets the value of the flag to `b` for `obj`. +-- ++ +Flags represent boolean properties in a way that is more space efficient +than using `newProp`. Basically, a `true` value is represented by the +presence of the property in the holder, while `false` is represented by +its absence. This representation affects the behavior of +xref:val:hasProps[`hasProps`] as flags that are `false` are not counted. + +== Examples + +A common use of property lists is to provide a mechanism for attaching +attributes to existing types. For example, we might define a representation +of variables in a compiler as: + +[source,sml] +------------ +datatype var = V of { + name : string, + props : PropList.holder + } +------------ + +We might define a _use count_ property as follows: + +[source,sml] +------------ +local + val {getFn, setFn, ...} = PropList.newProp ( + fn (V{props, ...}) => props, + fn _ => 0) +in +fun use x = setFn(x, getFn x + 1) +fun countOf x = getFn x +end +------------ + + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Queue.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Queue.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Queue.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Queue.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,129 @@ += The `Queue` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `Queue` structure provides an imperative queue data structure, +which are implemented as a pair of stacks (lists) representing the +front and rear of the queue. **Single-threaded** enqueuing and +dequeuing operations will have amortized constant time. + +== Synopsis + +[source,sml] +------------ +signature QUEUE +structure Queue :> QUEUE +------------ + +== Interface + +[source,sml] +------------ +type 'a queue + +exception Dequeue + +val mkQueue : unit -> 'a queue +val clear : 'a queue -> unit +val isEmpty : 'a queue -> bool +val enqueue : 'a queue * 'a -> unit +val dequeue : 'a queue -> 'a +val next : 'a queue -> 'a option +val delete : ('a queue * ('a -> bool)) -> unit +val head : 'a queue -> 'a +val peek : 'a queue -> 'a option +val length : 'a queue -> int +val contents : 'a queue -> 'a list +val app : ('a -> unit) -> 'a queue -> unit +val map : ('a -> 'b) -> 'a queue -> 'b queue +val foldl : ('a * 'b -> 'b) -> 'b -> 'a queue -> 'b +val foldr : ('a * 'b -> 'b) -> 'b -> 'a queue -> 'b +------------ + +== Description + +`[.kw]#type# 'a queue`:: + The type constructor for queues. + +[[exn:Dequeue]] +`[.kw]#exception# Dequeue`:: + This exceptions is raised when the `dequeue` function is + applied to an empty queue. + +`[.kw]#val# mkQueue : unit \-> 'a queue`:: + `mkQueue ()` returns a new empty queue. + +`[.kw]#val# clear : 'a queue \-> unit`:: + `clear q` removes any elements from `q` leaving it empty. + +`[.kw]#val# isEmpty : 'a queue \-> bool`:: + `ifEmpty q` returns true if the queue is empty. + +`[.kw]#val# enqueue : 'a queue * 'a \-> unit`:: + `enqueue (q, x)` adds `x` to the end of `q`. + +`[.kw]#val# dequeue : 'a queue \-> 'a`:: + `dequeue q` removes and returns the first element in `q`. + This function raises the xref:#exn:Dequeue[`Dequeue`] exception + if it is called on an empty queue. + +`[.kw]#val# next : 'a queue \-> 'a option`:: + `next q` returns `SOME x` and removes `x` from `q`, where `x` was the first + element in `q`, or `NONE` if `q` is empty. + +`[.kw]#val# delete : ('a queue * ('a \-> bool)) \-> unit`:: + `delete (q, pred)` removes those items from `q` for which the + function `pred` returns `true`. + +`[.kw]#val# head : 'a queue \-> 'a`:: + `head q` returns the first element of `q` or raises the exception + xref:#exn:Dequeue[`Dequeue`] if `q` is empty. The queue is unchanged. + +`[.kw]#val# peek : 'a queue \-> 'a option`:: + `peek q` returns `SOME x`, where `x` is the first element of `q`, + or `NONE` if `q` is empty. The queue is unchanged. + +`[.kw]#val# length : 'a queue \-> int`:: + `length q` returns the number of elements in the queue. + +`[.kw]#val# contents : 'a queue \-> 'a list`:: + `contents q` returns the contents of `q` as a list. + +`[.kw]#val# app : ('a \-> unit) \-> 'a queue \-> unit`:: + `app f q` applies the function `f` to the elements of `q`. + This expression is equivalent to ++ +[source,sml] +------------ +List.app f (contents q) +------------ + +`[.kw]#val# map : ('a \-> 'b) \-> 'a queue \-> 'b queue`:: + `map f q` returns a new queue that results from mapping + the function `f` across the elements of the queue. + +`[.kw]#val# foldl : ('a * 'b \-> 'b) \-> 'b \-> 'a queue \-> 'b`:: + `foldl f init q` folds the function `f` over the elements of `q` from + front to back. This expression is equivalent to ++ +[source,sml] +------------ +List.foldl f init (contents q) +------------ + +`[.kw]#val# foldr : ('a * 'b \-> 'b) \-> 'b \-> 'a queue \-> 'b`:: + `foldr f init q` folds the function `f` over the elements of `q` from + back to front. This expression is equivalent to ++ +[source,sml] +------------ +List.foldr f init (contents q) +------------ + +== See Also + +xref:str-Fifo.adoc[`Fifo`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Rand.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Rand.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Rand.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Rand.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,86 @@ += The `Rand` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `Rand` structure provides a simple random number generator as described +in Larry Paulson in __ML for the Working Programmer__ (pp. 170-171). +The original algorithm was recommended by Park and Miller in +https://doi.org/10.1145/63039.63042[__Random number generators: good ones +are hard to find__], CACM 1988 (pp 1192-1201) with modifications described +in CACM 1993 (pp. 105-110). + +Note: it is recommended that one use the xref:str-Random.adoc[`Random`] +structure when the quality of the generated numbers is at all important. +The main advantages of this implementation is that it is functional +(the generators provided by the `Random` structure are imperative) and +it is fast. + +== Synopsis + +[source,sml] +------------ +structure Rand +------------ + +== Interface + +[source,sml] +------------ +type rand = Word.word + +val randMin : rand +val randMax : rand + +val random : rand -> rand + +val mkRandom : rand -> unit -> rand + +val norm : rand -> real + +val range : (int * int) -> rand -> int +------------ + +== Description + +`[.kw]#type# rand = Word.word`:: + The "state" of the generator, which is just a single word. + +`[.kw]#val# randMin : rand`:: + The minimum allowed value for the state. + +`[.kw]#val# randMax : rand`:: + The maximum allowed value for the state. + +`[.kw]#val# random : rand \-> rand`:: + `random seed` returns a pseudo-random value in the range + `[randMin .. randMax]`. Iteratively using the value returned by + `random` as the next seed will produce a sequence of pseudo-random + numbers. + +`[.kw]#val# mkRandom : rand \-> unit \-> rand`:: + something + (* Given seed, return function generating a sequence of + * random numbers randMin <= v <= randMax + *) + +`[.kw]#val# norm : rand \-> real`:: + `norm rand` maps the random number in the range `[randMin .. randMax]` + to the real interval `(0..1)`. + +`[.kw]#val# range : (int * int) \-> rand \-> int`:: + `range (lo, hi) rand` maps the random number in the range `[randMin .. randMax]` + to the interval `[lo..hi]`. This function will raise the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] exception + if `hi < lo`. + +== Bugs + +This implementation needs to be updated for 64-bit systems. + +== See Also + +xref:str-Random.adoc[`Random`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Random.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Random.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Random.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Random.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,103 @@ += The `Random` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `Random` structure implements a random number generator using a +__subtract-with-borrow__ (SWB) generator as described in Marsaglia +and Zaman, "https://doi.org/10.1214/aoap/1177005878[__A New Class of +Random Number Generators__]," Annuals of Applied Probability 1(3), 1991, +pp. 462-480. + +The SWB generator is a 31-bit generator with lags 48 and 8. It has period +(2^1487^ - 2^247^) / 105 or about 10^445^. In general, these generators are +excellent. They act locally like a lagged Fibonacci generator. however, +and thus have troubles with the birthday test. Thus, we combine this SWB +generator with the linear congruential generator (48271 \* a) mod (2^31^ - 1). + +Although the interface is fairly abstract, the implementation uses +31-bit ML words. At some point, it might be good to use 32-bit words. + +== Synopsis + +[source,sml] +------------ +structure Random +------------ + +== Interface + +[source,sml] +------------ +type rand + +val rand : (int * int) -> rand + +val toString : rand -> string +val fromString : string -> rand + +val randInt : rand -> int + +val randNat : rand -> int + +val randReal : rand -> real + +val randRange : (int * int) -> rand -> int +------------ + +== Description + +`[.kw]#type# rand`:: + Represents the internal state of a random number generator. + +`[.kw]#val# rand : (int * int) \-> rand`:: + `rand (n1, n2)` creates a random number generator from the + initial seed specified by the pair `(n1, n2)`. + +`[.kw]#val# toString : rand \-> string`:: + `toString rand` returns a string representing the random-number-generator + state `rand`. This string is not meant to be human readable and will likely + contain non-printable characters. + +`[.kw]#val# fromString : string \-> rand`:: + `fromString s` returns the random-number-generator encoded as the string `s` + (presumably generated by `toString`). This expression will raise + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] exception + if the string `s` does not have the proper form. + +`[.kw]#val# randInt : rand \-> int`:: + `randInt rand` generates a random integer with a uniform distribution in + the range `[minInt .. maxInt]`. ++ +[WARNING] +The range of values is for 32-bit machines. + +`[.kw]#val# randNat : rand \-> int`:: + `randInt rand` generates a random integer with a uniform distribution in + the range `[0 .. maxInt]`. ++ +[WARNING] +The range of values is for 32-bit machines. + +`[.kw]#val# randReal : rand \-> real`:: + `randReal rand` generates a random real number in the range `[0..1)`. + +`[.kw]#val# randRange : (int * int) \-> rand \-> int`:: + `randRange (lo, hi) rand` generates a random number in the + `[lo..hi]`. This function will raise the + {sml-basis-url}/general.html#SIG:GENERAL.Fail:EXN[`Fail`] exception + if `hi < lo`. + +== Bugs + +The `toString`/`fromString` functions should be replaced with functions +that encode the state as a `Word8Vector.vector`. + +This implementation needs to be updated for 64-bit systems. + +== See Also + +xref:str-Rand.adoc[`Rand`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-RealOrderStats.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-RealOrderStats.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-RealOrderStats.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-RealOrderStats.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ += The `RealOrderStats` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `RealOrderStats` structure ... + +== Synopsis + +[source,sml] +------------ +structure RealOrderStats +------------ + +== Interface + +[source,sml] +------------ +------------ + +== Description + +`[.kw]#type# foo`:: + something + +`[.kw]#val# bar : foo \-> foo`:: + something + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Scan.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Scan.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Scan.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-Scan.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,135 @@ += The `Scan` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `Scan` structure provides **C**-style conversions from string +representations. + +== Synopsis + +[source,sml] +------------ +signature SCAN +structure Scan : SCAN +------------ + +== Interface + +[source,sml] +------------ +datatype fmt_item + = ATOM of Atom.atom + | LINT of LargeInt.int + | INT of Int.int + | LWORD of LargeWord.word + | WORD of Word.word + | WORD8 of Word8.word + | BOOL of bool + | CHR of char + | STR of string + | REAL of Real.real + | LREAL of LargeReal.real + | LEFT of (int * fmt_item) + | RIGHT of (int * fmt_item) + +exception BadFormat + +val sscanf : string -> string -> fmt_item list option +val scanf : string -> (char, 'a) StringCvt.reader + -> (fmt_item list, 'a) StringCvt.reader +------------ + +== Description + + +[[type:fmt_item]] +`[.kw]#datatype# fmt_item`:: +This datatype, which is the same type as +xref:str-Format.adoc#type:fmt_item[`Format.fmt_item`], is used as a union +type to represent the results of scanning input. + ++ +-- + `LINT n`:: wraps a large integer value `n` to convert + (the conversion specifier must be one of "`d`", "`o`", "`x`", or "`X`"). + + `INT n`:: wraps a default integer value `n` to convert + (the conversion specifier must be one of "`d`", "`o`", "`x`", or "`X`"). + + `BOOL b`:: wraps a Boolean value `b` to convert + (the conversion specifier must be "`b`"). + + `CHR c`:: wraps a character value + (the conversion specifier must be "`c`"). + + `STR s`:: wraps a string value `s` to convert + (the conversion specifier must be "`s`"). The conversion is the + identity; _e.g._, `STR "\n"` will produce a newline in the result + string. + + `REAL r`:: wraps a default real value `r` to convert + (the conversion specifier must be one of "`e`", "`E`", "`f`", + "`F`", "`g`", or "`G`"). + + `ATOM atm`:: this constructor will never be returned by `scanf` or `sscanf`. + + `LWORD w`:: this constructor will never be returned by `scanf` or `sscanf`. + + `WORD w`:: this constructor will never be returned by `scanf` or `sscanf`. + + `WORD8 w`:: this constructor will never be returned by `scanf` or `sscanf`. + + `LREAL r`:: this constructor will never be returned by `scanf` or `sscanf`. + + `LEFT _`:: this constructor will never be returned by `scanf` or `sscanf`. + + `RIGHT _`:: this constructor will never be returned by `scanf` or `sscanf`. +-- + +[[exn:BadFormat]] +`[.kw]#exception# BadFormat`:: + This exception is raised when either `sscanf` or `scanf` is applied + to an ill-formed format string. + +[[val:sscanf]] +`[.kw]#val# sscanf : string -> string -> fmt_item list option`:: + `sscanf fmt s` scans the string `s` using the format specifier `fmt`. If + successful, `SOME items` is returned, where each item in the `items` list + corresponds to a specified item in `fmt`. If the input cannot be scanned + according to `fmt`, then `NONE` is returned. + If the format string is ill formed, then the `BadFormat` exception + will be raised when `sscanf fmt` is evaluated. + +[[val:scanf]] +`[.kw]#val# scanf : string -> (char, 'a) StringCvt.reader -> (fmt_item list, 'a) StringCvt.reader`:: + `sscanf fmt getc` returns a reader that scan a character stream using + the format specifier `fmt`. If the format string is ill formed, then the + `BadFormat` exception will be raised when `scanf fmt` is evaluated. + +== Format Strings + +The `sscanf and `scanf` functions take a format string as their first +argument. The format string is composed of zero or more +directives, which are either ordinary characters (excluding `%`) +or conversion specifiers. The result of applying one of the scan functions +to an input will be a list of xref:#type:fmt_item[`fmt_item`] corresponding +to the conversion specifiers in the format string. All conversions are +introduced by the `%` character. The format string may also contain +other characters. White space (such as blanks, tabs, or newlines) in the format +string match any amount of white space, including none, in the input. Everything +else matches only itself. Scanning stops when an input character does not match +such a format character. Scanning also stops when an input conversion cannot be +made (see below). + +//Conversion specifiers begin with the percent (`%`) character followed by +//the following in sequence: + +**To be written** + +== See Also + +xref:str-Format.adoc[`Format`], +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-TimeLimit.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-TimeLimit.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-TimeLimit.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-TimeLimit.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,41 @@ += The `TimeLimit` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `TimeLimit` structure provides a mechanism for limiting the execution +time of a computation. The mechanism is implemented using the runtime +system's interval timer and the *SML/NJ* signal mechanism. + +== Synopsis + +[source,sml] +------------ +structure TimeLimit +------------ + +== Interface + +[source,sml] +------------ +exception TimeOut + +val timeLimit : Time.time -> ('a -> 'b) -> 'a -> 'b +------------ + +== Description + +[[exn:TimeOut]] +`[.kw]#exception# TimeOut`:: + The exception that is raised if the time limit expires. + +`[.kw]#val# timeLimit : Time.time \-> ('a \-> 'b) \-> 'a \-> 'b`:: + `timeLimit t f x` computes the expression `f x`. If the computation + takes longer than the time limit `t`, then the + xref:#exn:TimeOut[`TimeOut`] exception is raised. + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-UnivariateStats.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-UnivariateStats.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-UnivariateStats.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-UnivariateStats.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ += The `UnivariateStats` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `UnivariateStats` structure ... + +== Synopsis + +[source,sml] +------------ +structure UnivariateStats +------------ + +== Interface + +[source,sml] +------------ +------------ + +== Description + +`[.kw]#type# foo`:: + something + +`[.kw]#val# bar : foo \-> foo`:: + something + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-URef.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-URef.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-URef.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-URef.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,94 @@ += The `URef` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `URef` structure provides mutable references with __Union-Find__ +semantics. The interface is similar to that of references, but +adds operations to union two references together. When two `uref` +values are joined by one of the union operations, they become +equal (and, thus, their contents will be equal too). + +The original design and implementation of this module was by Fritz Henglein. + +== Synopsis + +[source,sml] +------------ +signature UREF +structure URef : UREF +------------ + +== Interface + +[source,sml] +------------ +type 'a uref + +val uRef: 'a -> 'a uref + +val equal: 'a uref * 'a uref -> bool + +val !! : 'a uref -> 'a + +val update : 'a uref * 'a -> unit + +val unify : ('a * 'a -> 'a) -> 'a uref * 'a uref -> bool + +val union : 'a uref * 'a uref -> bool + +val link : 'a uref * 'a uref -> bool +------------ + +== Description + +`[.kw]#type# 'a uref`:: + The type constructor for union-find references. + +[[val:uRef]] +`[.kw]#val# uRef: 'a \-> 'a uref`:: + `uRef v` creates a new reference with contents `v`. + +`[.kw]#val# equal: 'a uref * 'a uref \-> bool`:: + `equal (ur1, ur2)` returns `true` if, and only if, `ur1` and `ur2` were + created by the same call to xref:#val:uRef[`uRef`] or if they have been + unioned by a xref:#val:link[`link`], xref:#val:union[`union`], or + xref:#val:unify[`unify`] operation. + +`[.kw]#val# !! : 'a uref \-> 'a`:: + `!! ur` returns the contents of `ur`. + +`[.kw]#val# update : 'a uref * 'a \-> unit`:: + `update (ur, v)` updates the contents of `ur` to be `v`. + +[[val:unify]] +`[.kw]#val# unify : ('a * 'a \-> 'a) \-> 'a uref * 'a uref \-> bool`:: + `unify f (ur1, ur2)` unions `ur1` and `ur2` (_i.e._, after this + call, the expression `equal(r1, ur2)` will return `true`) and + returns `true` if they were *not* equal prior to the call to `unify`. + The contents of the unioned reference is set to `f (v1, v2)`, where `v1` + (resp. `v2`) was the contents of `ur1` (resp. `ur2`) prior to the + call to `unify`. + +[[val:union]] +`[.kw]#val# union : 'a uref * 'a uref \-> bool`:: + `union (ur1, ur2)` unions `ur1` and `ur2` (_i.e._, after this + call, the expression `equal(r1, ur2)` will return `true`) and + returns `true` if they were *not* equal prior to the call to `union`. + The contents of the unioned reference is set to one of `v1` or `v2`, + where `v1` (resp. `v2`) was the contents of `ur1` (resp. `ur2`) + prior to the call to `union`. + +[[val:link]] +`[.kw]#val# link : 'a uref * 'a uref \-> bool`:: + `link (ur1, ur2)` unions `ur1` and `ur2` (_i.e._, after this + call, the expression `equal(r1, ur2)` will return `true`) and + returns `true` if they were *not* equal prior to the call to `link`. + The contents of the unioned reference is set to `v1`, where + `v1` was the contents of `ur1` prior to the call to `link`. + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-UTF8.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-UTF8.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-UTF8.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/Util/str-UTF8.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,191 @@ += The `UTF8` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `UTF8` structure provides support for working +with https://en.wikipedia.org/wiki/UTF-8[*UTF-8*] +encoded strings. *UTF-8* is a way to represent *Unicode* +code points in an 8-bit character type while being backward +compatible with the *ASCII* encoding for 7-bit characters. +The encoding scheme uses one to four bytes as follows: + +[cols="^4a,4*^1a",options="header",align="center",grid="rows",width="80%"] +|=== +| Wide Character Bits | Byte 0 | Byte 1 | Byte 2 | Byte 3 +| `00000` `00000000` `0xxxxxxx` | `0xxxxxxx` | | | +| `00000` `00000yyy` `yyxxxxxx` | `110yyyyy` | `10xxxxxx` | | +| `00000` `zzzzyyyy` `yyxxxxxx` | `1110zzzz` | `10yyyyyy` | `10xxxxxx` | +| `wwwzz` `zzzzyyyy` `yyxxxxxx` | `11110www` | `10zzzzzz` | `10yyyyyy` | `10xxxxxx` +|=== + +== Synopsis + +[source,sml] +------------ +signature UTF8 +structure UTF8 :> UTF8 +------------ + +== Interface + +[source,sml] +------------ +type wchar = word + +val maxCodePoint : wchar + +exception Incomplete + +val getu : (char, 'strm) StringCvt.reader -> (wchar, 'strm) StringCvt.reader + +val encode : wchar -> string + +val isAscii : wchar -> bool +val toAscii : wchar -> char +val fromAscii : char -> wchar + +val toString : wchar -> string + +val size : string -> int + +val explode : string -> wchar list +val implode : wchar list -> string + +val map : (wchar -> wchar) -> string -> string +val app : (wchar -> unit) -> string -> unit +val fold : ((wchar * 'a) -> 'a) -> 'a -> string -> 'a +val all : (wchar -> bool) -> string -> bool +val exists : (wchar -> bool) -> string -> bool +------------ + +== Description + +`[.kw]#type# wchar = word`:: + The type of a *Unicode* code point. + + Note that we use the `word` type for this because *SML/NJ* does not currently + have a wide-character type. If such a type is introduced, then this type + definition will likely change. + +`[.kw]#val# maxCodePoint : wchar`:: + The maximum code point in the *Unicode* character set (`0wx10FFFF`). + +[[exn:Incomplete]] +`[.kw]#exception# Incomplete`:: + This exception is raised when certain operations are applied to incomplete + strings (_i.e._, strings that end with a partial *UTF-8* character encoding). + +`[.kw]#val# getu : (char, 'strm) {sml-basis-url}/string-cvt.html#SIG:STRING_CVT.reader:TY[StringCvt.reader] \-> (wchar, 'strm) {sml-basis-url}/string-cvt.html#SIG:STRING_CVT.reader:TY[StringCvt.reader]`:: + `getu getc` returns a wide-character reader for the character reader `getc`. + The resulting reader will raise the xref:#exn:Incomplete[`Incomplete`] exception + if it encounters an incomplete *UTF-8* character. + +`[.kw]#val# encode : wchar \-> string`:: + `encode wc` returns the *UTF-8* encoding of the wide character `wc`. + This expression raises the + {sml-basis-url}/general.html#SIG:GENERAL.Domain:EXN[`Domain`] exception + if `wc` is greater than the maximum *Unicode* code point. + +`[.kw]#val# isAscii : wchar \-> bool`:: + `isAscii wc` returns `true` if, and only if, `wc` is an ASCII character. + +`[.kw]#val# toAscii : wchar \-> char (* truncates to 7-bits *)`:: + `toAscii wc` converts `wc` to an 8-bit character by truncating `wc` + to its low seven bits. + +`[.kw]#val# fromAscii : char \-> wchar (* truncates to 7-bits *)`:: + `toAscii c` converts the 8-bit character `c` to a wide character in + the ASCII range (the high bit of `c` is ignored). + +`[.kw]#val# toString : wchar \-> string`:: + `toString wc` returns a printable string representation of a wide character + as a *Unicode* escape sequence. + +`[.kw]#val# size : string \-> int`:: + `size s` returns the number of *UTF-8* encoded *Unicode* characters + in the string `s`. This expression raises the + xref:#exn:Incomplete[`Incomplete`] exception if an incomplete + character is encountered. + +`[.kw]#val# explode : string \-> wchar list`:: + `explode s` returns the list of *UTF-8* encoded Unicode characters that + comprise the string `s`. + +`[.kw]#val# implode : wchar list \-> string`:: + `implode wcs` returns the *UTF-8* encoded string that represents + the list `wcs` of Unicode code points. + This expression raises the + {sml-basis-url}/general.html#SIG:GENERAL.Domain:EXN[`Domain`] exception + if any character in the list is greater than the maximum *Unicode* code point. + +`[.kw]#val# map : (wchar \-> wchar) \-> string \-> string`:: + `map f s` maps the function `f` over the *UTF-8* encoded characters + in the string `s` to produce a new *UTF-8* string. This expression raises + the xref:#exn:Incomplete[`Incomplete`] exception if an incomplete + character is encountered and the + {sml-basis-url}/general.html#SIG:GENERAL.Domain:EXN[`Domain`] exception + if `f` returns a value that is greater than the maximum *Unicode* code point. + It is equivalent to the expression ++ +[source,sml] +------------ +implode (List.map f (explode s)) +------------ + +`[.kw]#val# app : (wchar \-> unit) \-> string \-> unit`:: + `app f s` applies the function `f` to the *UTF-8* encoded characters + in the string `s`. This expression raises the + xref:#exn:Incomplete[`Incomplete`] exception if an incomplete + character is encountered. It is equivalent to the expression ++ +[source,sml] +------------ +List.app f (explode s) +------------ + +`[.kw]#val# fold : ((wchar * 'a) \-> 'a) \-> 'a \-> string \-> 'a`:: + `fold f init s` folds a function from left-to-right over the + *UTF-8* encoded characters in the string. This expression raises + the xref:#exn:Incomplete[`Incomplete`] exception if an incomplete + character is encountered. It is equivalent to the expression ++ +[source,sml] +------------ +List.foldl f init (explode s) +------------ + +`[.kw]#val# all : (wchar \-> bool) \-> string \-> bool`:: + `all pred s` returns `true` if, and only if, the function `pred` + returns true for all of the *UTF-8* encoded characters in the + string. It short-circuits evaluation as soon as a character + is encountered for which `pred` returns `false`. This expression + raises the xref:#exn:Incomplete[`Incomplete`] exception if an incomplete + character is encountered. It is equivalent to the expression ++ +[source,sml] +------------ +List.all pred (explode s) +------------ ++ +when `s` only contains complete characters. + +`[.kw]#val# exists : (wchar \-> bool) \-> string \-> bool`:: + `exists pred s` returns `true` if, and only if, the function `pred` + returns `true` for at least one *UTF-8* encoded character in + the string `s`. It short-circuits evaluation as soon as a character + is encountered for which `pred` returns `true`. This expression raises + the xref:#exn:Incomplete[`Incomplete`] exception if an incomplete + character is encountered. It is equivalent to the expression ++ +[source,sml] +------------ +List.exists pred (explode s) +------------ ++ +when `s` only contains complete characters. + +== See Also + +xref:smlnj-lib.adoc[__The Util Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2 @@ +structure UUID +structure GenUUID diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/str-GenUUID.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/str-GenUUID.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/str-GenUUID.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/str-GenUUID.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,34 @@ += The `GenUUID` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `GenUUID` structure implements a generator for random +(Variant 1, Type 4) UUIDs. The random number generator +is seeded by the current time. + +== Synopsis + +[source,sml] +------------ +structure GenUUID +------------ + +== Interface + +[source,sml] +------------ +val new : unit -> UUID.t +------------ + +== Description + +`[.kw]#val# new : unit \-> UUID.t`:: + `new ()` generates a new Variant 1, Type 4 UUID. + +== See Also + +xref:str-UUID.adoc[`UUID`], +xref:uuid-lib.adoc[__The UUID Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/str-UUID.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/str-UUID.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/str-UUID.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/str-UUID.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,93 @@ += The `UUID` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `UUID` structure provides an implementation of +https://en.wikipedia.org/wiki/Universally_unique_identifier[ +UUIDs (__**U**niversally **U**nique **ID**entifiers__)]. +UUIDs, which are also known as GUIDs (__**G**lobally **U**nique **ID**entifiers__), +are sequences of 16-bytes. + +== Synopsis + +[source,sml] +------------ +structure UUID +------------ + +== Interface + +[source,sml] +------------ +type t + +val null : t + +val compare : t * t -> order + +val same : t * t -> bool + +val hash : t -> word + +val toString : t -> string + +val fromString : string -> t option + +val toBytes : t -> Word8Vector.vector + +val fromBytes : Word8Vector.vector -> t +------------ + +== Description + +`[.kw]#type# t`:: + the abstract type of UUIDs. + +`[.kw]#val# null : t`:: + `null` is the all-zeros UUID + +`[.kw]#val# compare : t * t \-> order`:: + `compare (uuid1, uuid2)` does a byte-wise comparison of the two + UUIDs and returns their order. + +`[.kw]#val# same : t * t \-> bool`:: + `same (uuid1, uuid2)` does a byte-wise comparison of the two + UUIDs and returns `true` is they are equal and `false` otherwise. + +`[.kw]#val# hash : t \-> word`:: + `hash uuid` returns a hash of the UUID. + +[[val:toString]] +`[.kw]#val# toString : t \-> string`:: + `toString uuid` formats `uuid` as a string of the form +[source,sml] +------------ +"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" +------------ + where each "`x`" is a lower-case hexadecimal digit. The first two digits + in the string correspond to the first byte, and so on. + +`[.kw]#val# fromString : string \-> t option`:: + `fromString s` converts the string `s`, which should be of the form returned + by xref:val:toString[`toString`] to `SOME uuid`, where `uuid` is the UUID + denoted by the string. Leading whitespace is ignored. If the string does + not have the correct format, then `NONE` is returned. + +`[.kw]#val# toBytes : t \-> Word8Vector.vector`:: + `toBytes uuid` returns the 16-element `Word8Vector.vector` value + that represents `uuid`. + +`[.kw]#val# fromBytes : Word8Vector.vector \-> t`:: + `fromBytes bytes` takes a 16-element vector of bytes and converts it to + a UUID. The {sml-basis-url}/general.html#SIG:GENERAL.Size:EXN[`Size`] + exception is raised if the length of the vector is not exactly 16. + Otherwise, there is no validity chechking of the UUID (_i.e._, the variant + and type are not checked). + +== See Also + +xref:str-GenUUID.adoc[`GenUUID`], +xref:uuid-lib.adoc[__The UUID Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/uuid-lib.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/uuid-lib.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/uuid-lib.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/UUID/uuid-lib.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,51 @@ += The UUID Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Overview + +The *UUID Library* is a library for generating +https://en.wikipedia.org/wiki/Universally_unique_identifier[ +UUIDs (__**U**niversally **U**nique **ID**entifiers__)], which +are also known as GUIDs (__**G**lobally **U**nique **ID**entifiers__). +It currently only supports generating Variant 1, Type 4 UUIDs, which +are random bit strings (these are the UUIDs generated by the `NewGuid` +function on **Microsoft Windows**). + +The *UUID Library* was first included in Version 110.97 of *SML/NJ*. + +== Contents + +xref:str-UUID.adoc[`[.kw]#structure# UUID`]:: + This structure implements an abstract type for representing UUIDs. + +xref:str-GenUUID.adoc[`[.kw]#structure# GenUUID`]:: + This structure implements a generator for UUIDs. + +== Usage + +For https://smlnj.org[*SML/NJ*], include `$/uuid-lib.cm` in your +*CM* file. + +/* +For use in https://www.mlton.org/[*MLton*], include +`$(SML_LIB)/smlnj-lib/UUID/uuid-lib.mlb` in your *MLB* file. +*/ +The *UUID Library* is not yet included in *MLton*. + +ifdef::backend-pdf[] + +// Push titles down one level. +:leveloffset: 1 + +include::str-UUID.adoc[] + +include::str-GenUUID.adoc[] + +// Return to normal title levels. +:leveloffset: 0 + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/fun-XMLParserFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/fun-XMLParserFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/fun-XMLParserFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/fun-XMLParserFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,64 @@ += The `XMLParserFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `XMLParserFn` functor generates a parser for the given *SML* +tree representation. The treatment of whitespace and comments +when parsing is determined by the `Schema` substructure of the +functor argument. + +== Synopsis + +[source,sml] +------------ +signature XML_PARSER +functor XMLParserFn (XT : XML_TREE) : XML_PARSER +------------ + +== Functor Argument Interface + +[source,sml] +------------ +XT : XML_TREE +------------ + +== Functor Argument Description + +`XT : XML_TREE`:: + Defines the tree representation used for the result of the parser, as well + as the policy for handling whitespace and comments. + +== Interface + +[source,sml] +------------ +structure XMLTree : XML_TREE + +val parseFile : string -> XMLTree.tree + +exception ParseError of string +------------ + +== Interface Description + +`[.kw]#structure# XMLTree : XML_TREE`:: + The argument structure. + +`[.kw]#val# parseFile : string \-> XMLTree.tree`:: + `parseFile file` returns the tree representation of the named text file. + The xref:#exn:ParseError[`ParseError`] exception is raised if a syntax + error is encountered during parsing. + +[[exn:ParseError]] +`[.kw]#exception# ParseError of string`:: + This exception is raise with a useful error message as its argument when + a syntax error is encountered by the parser. + +== See Also + +xref:sig-XML_SCHEMA.adoc[`XML_SCHEMA`], +xref:sig-XML_TREE.adoc[`XML_TREE`], +xref:xml-lib.adoc[__The XML Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/fun-XMLTreeFn.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/fun-XMLTreeFn.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/fun-XMLTreeFn.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/fun-XMLTreeFn.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,22 @@ += The `XMLTreeFn` functor +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `XMLTreeFn` functor generates a tree representation of *XML* +files from a schema structure argument. + +== Synopsis + +[source,sml] +------------ +functor XMLTreeFn (Schema : XML_SCHEMA) : XML_TREE +------------ + +== See Also + +xref:sig-XML_SCHEMA.adoc[`XML_SCHEMA`], +xref:sig-XML_TREE.adoc[`XML_TREE`], +xref:xml-lib.adoc[__The XML Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/MODULES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/MODULES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/MODULES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/MODULES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,5 @@ +signature XML_SCHEMA +functor XMLTreeFn +functor XMLParserFn +structure GenericXMLTree + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/sig-XML_SCHEMA.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/sig-XML_SCHEMA.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/sig-XML_SCHEMA.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/sig-XML_SCHEMA.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,78 @@ += The `XML_SCHEMA` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `XML_SCHEMA` signature describes the elements and attributes of +an *XML* schema that are required to parse files of that schema. + +== Synopsis + +[source,sml] +------------ +signature XML_SCHEMA +------------ + +== Interface + +[source,sml] +------------ +type element +type attribute + +val element : string -> element option + +val preserveWS : element -> bool + +val preserveComment : element -> bool + +val same : element * element -> bool + +val toString : element -> string + +val attribute : (string * string) -> attribute +------------ + +== Description + +`[.kw]#type# element`:: + the representation type for *XML* elements. Note that this type is *not* + the type of a tree node in an *XML* tree, but rather the label or tag + associated with the tree. + +`[.kw]#type# attribute`:: + the representation type for *XML* attributes. + +`[.kw]#val# element : string \-> element option`:: + `element tag` returns `SOME elem` where `elem` is the representation of + the element with the given tag. It returns `NONE` when `tag` is not the + name of any element in the schema. + +`[.kw]#val# preserveWS : element \-> bool`:: + `preserveWS elem` returns `true` if whitespace should be preserved in + the element's content and `false` if whitespace can be normalized in + the element's content. Note that if true, this property is inherited by any + nested elements. + +`[.kw]#val# preserveComment : element \-> bool`:: + `preserveComment elem` returns `true` if comments should be preserved in + the element's content and `false` if comments if they should be deleted. + +`[.kw]#val# same : element * element \-> bool`:: + `same (elem1, elem2)` returns `true` if, and only if, the two elements + are the same. + +`[.kw]#val# toString : element \-> string`:: + `toString elem` returns the string representation of the element + (without the "`<`" and "`>`" brackets). + +`[.kw]#val# attribute : (string * string) \-> attribute`:: + `attribute (name, value)` returns an attribute value for the given + name-value pair. + +== See Also + +xref:fun-XMLTreeFn.adoc[`XMLTreeFn`], +xref:xml-lib.adoc[__The XML Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/sig-XML_TREE.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/sig-XML_TREE.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/sig-XML_TREE.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/sig-XML_TREE.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,110 @@ += The `XML_TREE` signature +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `XML_TREE` signature defines a tree representation of *XML* files. + +== Synopsis + +[source,sml] +------------ +signature XML_TREE +------------ + +== Interface + +[source,sml] +------------ +structure Schema : XML_SCHEMA + +datatype doctype = DOCTYPE of string * external_id option + +and external_id + = SYSTEM of string + | PUBLIC of string * string + +datatype content + = TEXT of string + | CDATA of string + | ELEMENT of { + name : Schema.element, + attrs : Schema.attribute list, + content : content list + } + +type tree = { + xmlDecl : Schema.attribute list option, + doctype : doctype option, + content : content + } +------------ + +== Description + +`[.kw]#structure# Schema : XML_SCHEMA`:: + This substructure defines the representation of elements and attributes. + +`[.kw]#datatype# doctype = DOCTYPE of string * external_id option`:: + This datatype represents the contents of the optional `DOCTYPE` + element found the beginning of the file (following the optional + *XML* declaration). We currently only support external DTDs. + +`[.kw]#datatype# external_id`:: + This datatype represents an external DTD specification; its constructors + are defined as follows: ++ +-- + `SYSTEM of url`:: + specifies a "private" external DTD, where the string `url` specifies + the DTD's location. + + `PUBLIC(name, url)`:: + specifies a "public" external DTD, where the string `name` is the name + of the DTD and `url` specifies the DTD's location. +-- + +`[.kw]#datatype# content`:: + This datatype is used to represent the content of an *XML* file as a tree. + The constructors have the following meanings: ++ +-- + `TEXT s`:: + represents the text described by the string `s`. When parsing, entities + in the source (_e.g._, `<`) are replaced by their definition and, + when printing, special characters (_e.g._, `<`) are replaced by their + entities. + + `CDATA s`:: + represents the literal text described by the string `s`. + + `ELEMENT{name, attrs, content}`:: + represents a subtree enclosed by "`` ... `" tags, + where `name` is the name of the element, `attrs` is a list of attributes + in the start tag, and `content` is the stuff between the tags. +-- + +`[.kw]#type# tree`:: + An *XML* tree, which is a record type with the following fields: ++ +-- + `xmlDecl : Schema.attribute list option`:: + This field represents the optional *XML* declaration at the beginning of + a file, where a value of `SOME attrs` means that there was an + *XML* declaration present with the list of attributes `attrs`. + + `doctype : doctype option`:: + This field represents the optional `DOCTYPE` element that follows the + *XML* declaration. + + `content : content`:: + This field is the root of the content and will always be an `ELEMENT`. +-- + +== See Also + +xref:sig-XML_SCHEMA.adoc[`XML_SCHEMA`], +xref:fun-XMLTreeFn.adoc[`XMLTreeFn`], +xref:xml-lib.adoc[__The XML Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/str-GenericXMLTree.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/str-GenericXMLTree.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/str-GenericXMLTree.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/str-GenericXMLTree.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,25 @@ += The `GenericXMLTree` structure +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +The `GenericXMLTree` structure provides a generic representation of +*XML* trees where elements and attribute names are represented as +xref:../Util/str-Atom.adoc#type:atom[`Atom.atom`] values. + +== Synopsis + +[source,sml] +------------ +structure GenericXMLTree : XML_TREE + where type Schema.element = Atom.atom + where type Scheme.attribute = Atom.atom * string +------------ + +== See Also + +xref:sig-XML_SCHEMA.adoc[`XML_SCHEMA`], +xref:sig-XML_TREE.adoc[`XML_TREE`], +xref:xml-lib.adoc[__The XML Library__] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/xml-lib.adoc mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/xml-lib.adoc --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/src/XML/xml-lib.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/src/XML/xml-lib.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,80 @@ += The XML Library +:Author: John Reppy +:Date: {release-date} +:stem: latexmath +:source-highlighter: pygments +:VERSION: {smlnj-version} + +== Overview + +The *XML Library* is a small library for parsing +https://www.w3.org/TR/REC-xml[*XML*] files. It does +*not* support validation (_e.g._, against a *DTD* or *Schema*). The +basic idea is that the user supplies a "schema" module that describes +the elements and attribute representation of an *XML* document. From this, +one builds an XML tree representation + +[source,sml] +------------ +structure MyXMLTree = XMLTreeFn (MyXMLSchema) +------------ + +and an XML parser + +[source,sml] +------------ +structure MyXMLParser = XMLParserFn (MyXMLTree) +------------ + +The library also provides a generic *XML* tree definition +(_i.e._, one that allows any element name). + +For a more complete library for XML processing, use the +https://smlnj.org/dist/other/fxp-2.1.tgz[*fxp library*]. + +== Contents + +xref:sig-XML_SCHEMA.adoc[`[.kw]#signature# XML_SCHEMA`]:: + describes the elements and attributes of an *XML* schema + that are required to parse files of that schema. + +xref:sig-XML_TREE.adoc[`[.kw]#signature# XML_TREE`]:: + Defines a tree representation of *XML* files. + +xref:fun-XMLTreeFn.adoc[`[.kw]#functor# XMLTreeFn`]:: + Generates a tree representation of *XML* + files from a schema structure argument. + +xref:fun-XMLParserFn.adoc[`[.kw]#functor# XMLParserFn`]:: + generates a parser for the given *SML* tree representation. + +xref:str-GenericXMLTree.adoc[`[.kw]#structure# GenericXMLTree`]:: + Provides a generic representation of *XML* trees. + +== Usage + +For https://smlnj.org[*SML/NJ*], include `$/xml-lib.cm` in your +*CM* file. + +For use in https://www.mlton.org/[*MLton*], include +`$(SML_LIB)/smlnj-lib/XML/xml-lib.mlb` in your *MLB* file. + +ifdef::backend-pdf[] + +// Push titles down one level. +:leveloffset: 1 + +include::sig-XML_SCHEMA.adoc[] + +include::sig-XML_TREE.adoc[] + +include::fun-XMLTreeFn.adoc[] + +include::fun-XMLParserFn.adoc[] + +include::str-GenericXMLTree.adoc[] + +// Return to normal title levels. +:leveloffset: 0 + +endif::[] diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/TODO mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/TODO --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/TODO 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/TODO 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,41 @@ +HTML Library: + + needs documentation (also, we are going to change the name of the library to + HTML3). + +HTML4 Library: + + needs documentation + +PP Library: + + needs documentation (including a tutorial) + +Reactive Library: + + - str-Reactive.adoc + many functions still need documentation + +RegExp Library: + + - tutorial is incomplete + + - str-AwkSyntax.adoc + + - sig-REGEXP_ENGINE.adoc + +Util Library: + + - str-FormatComb.adoc + a few functions remain to be documented (seq, listg, optiong, and seqg). + + - str-RealOrderStats.adoc + + - str-Scan.adoc + + - str-UnivariateStats.adoc + +## General checking: + +Scan generated HTML for →, which is the Unicode arrow symbol (occurs when +we forget to write arrow as \->. diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/config_sml.in mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/config_sml.in --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/config_sml.in 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/config_sml.in 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,17 @@ +(* config_sml.in + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Information set by the configuration. + *) + +structure Config = + struct + + val releaseDate = "@SMLNJ_DATE@" + val version = "@SMLNJ_VERSION@" + val asciidoctor = "@ASCIIDOCTOR@" + val fragDir = "@SRC_DIR@/fragments" + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/copy-file.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/copy-file.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/copy-file.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/copy-file.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,78 @@ +(* copy-file.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure CopyFile : sig + + (* `copy subst (srcFile, outS)` copys the contents of `srcFile` to the output + * stream while replacing strings of the form `@name@` with `value` where + * `(name, value)` occurs in the substitution list `subst`. + *) + val copy : (string * string) list -> string * TextIO.outstream -> unit + + end = struct + + structure SS = Substring + + structure Tbl = HashTableFn ( + struct + type hash_key = substring + val hashVal = HashString.hashSubstring + fun sameKey (ss1, ss2) = (SS.compare (ss1, ss2) = EQUAL) + end) + + fun copy subst = let + val find = let + val tbl = Tbl.mkTable (List.length subst, Fail "subst-tbl") + fun ins (ss1, s2) = Tbl.insert tbl (SS.full ss1, s2) + in + ins ("", "@"); (* map "@@" to "@" *) + List.app ins subst; + Tbl.find tbl + end + fun rewriteLine (outS, ln) = let + fun scanLine ss = let + val (prefix, rest) = SS.splitl (fn #"@" => false | _ => true) ss + in + TextIO.outputSubstr (outS, prefix); + if (SS.size rest = 0) + then () + else scanPlaceholder (SS.triml 1 rest) + end + (* scan a `@NAME@` placeholder starting from the first character of `NAME` *) + and scanPlaceholder start = let + fun scan (ss, n) = (case SS.getc ss + of NONE => raise Fail "Incomplete placeholder" + | SOME(#"@", rest) => (SS.slice(start, 0, SOME n), rest) + | SOME(_, rest) => scan (rest, n+1) + (* end case *)) + val (placeholder, rest) = scan (start, 0) + in + case find placeholder + of SOME expansion => ( + TextIO.output(outS, expansion); + scanLine rest) + | NONE => raise Fail(concat[ + "unknown placeholder @", SS.string placeholder, "@" + ]) + (* end case *) + end + in + scanLine (SS.full ln) + end + fun rewrite (srcFile, outS) = let + val inS = TextIO.openIn srcFile + fun lp () = (case TextIO.inputLine inS + of NONE => TextIO.closeIn inS + | SOME s => (rewriteLine(outS, s); lp ()) + (* end case *)) + in + lp() + end + in + rewrite + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/gen-toc.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/gen-toc.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/gen-toc.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/gen-toc.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,167 @@ +(* gen-toc.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This module is used to generate the HTML fragment for a sidebar + * table of contents. + * + * TODO: eventually, we should include the individual definitions from + * the file in the sidebar. + *) + +structure GenTOC : sig + + val root : FileTree.t -> TextIO.outstream -> unit + val lib : FileTree.t * FileTree.library -> TextIO.outstream -> unit + val page : FileTree.t * FileTree.library * FileTree.page -> TextIO.outstream -> unit + + end = struct + + structure FT = FileTree + + fun pr (outS, s) = TextIO.output(outS, s) + fun prl (outS, s) = TextIO.output(outS, concat s) + + fun doTOC outS f = ( + prl (outS, [ + "
\n", + "
\n" + ]); + f outS; + prl (outS, [ + "
\n", + "
\n" + ])) + + val styleText = Util.style + + (* returns the title string for the opening of a library item in the library + * list. The flags are as follows: + * link -- generate an HREF link + * cur -- this library is the current page + * inRoot -- the containing page is at root level + *) + fun libItemOpen {lib, link, cur, inRoot} = let + val FT.FILE{dir, stem, title, ...} = lib + val s = if link then [""] else [] + val s = if cur + then "" + :: styleText title :: "" :: s + else "" :: styleText title :: "" :: s + val s = if link + then let + val dir = if inRoot orelse cur then dir else "../" ^ dir + in + "" :: s + end + else s + val s = "
  • " :: s + in + concat s + end + + (* returns the string for a page item in the pages list. The + * flags are as follows: + * link -- generate an HREF link + * cur -- this library is the current page + *) + fun pageItem {page, link, cur} = let + val title = styleText(FT.getTitle page) + val s = if link then ["
  • "] else [""] + val s = if cur + then "" + :: title :: "" :: s + else "" :: title :: "" :: s + val s = if link + then "" :: s + else s + val s = "
  • " :: s + in + concat s + end + + fun doRoot outS (true, _) = pr(outS, "
      \n") + | doRoot outS (false, _) = pr(outS, "
    \n") + + (* generate a TOC file for the root page *) + fun root (ft) outS = doTOC outS (fn outS => let + fun doLib (true, _, lib) = + prl(outS, [ + " ", libItemOpen{lib=lib, link=true, cur=false, inRoot=true} + ]) + | doLib (false, _, _) = pr(outS, "
  • \n") + in + FT.walk { + root = doRoot outS, + lib = doLib, + page = fn _ => () + } ft + end) + + (* generate a TOC file for a library page *) + fun lib (ft, lib) outS = doTOC outS (fn outS => let + fun doLib (true, _, lib') = let + val cur = FT.same(lib, lib') + in + prl(outS, [ + " ", libItemOpen{lib=lib', link=not cur, cur=cur, inRoot=false} + ]); + if cur + then pr(outS, "\n
      \n") + else () + end + | doLib (false, _, lib') = if FT.same(lib, lib') + then prl(outS, ["
    \n", " \n"]) + else pr(outS, "\n") + fun doPage (_, lib', page) = if FT.same(lib, lib') + then prl(outS, [ + " ", + pageItem {page=page, link=true, cur=false}, + "\n" + ]) + else () + in + FT.walk { + root = doRoot outS, + lib = doLib, + page = doPage + } ft + end) + + (* generate a TOC file for a manual page *) + fun page (ft, lib, page) outS = + doTOC outS (fn outS => let + fun doLib (true, _, lib') = let + val cur = FT.same(lib, lib') + in + prl(outS, [ + " ", libItemOpen{lib=lib', link=true, cur=false, inRoot=false} + ]); + if cur + then pr(outS, "\n
      \n") + else () + end + | doLib (false, _, lib') = if FT.same(lib, lib') + then prl(outS, ["
    \n", " \n"]) + else pr(outS, "\n") + fun doPage (_, lib', page') = if FT.same(lib, lib') + then let + val cur = FT.same(page, page') + in + prl(outS, [ + " ", + pageItem {page=page', link=not cur, cur=cur}, + "\n" + ]) + end + else () + in + FT.walk { + root = doRoot outS, + lib = doLib, + page = doPage + } ft + end) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/main.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/main.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/main.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,123 @@ +(* main.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Main function for *gen-pages* tool. This program has the following + * usage: + * + * gen-pages [options] + * + * Options: + * + * -h, --help print help message and exit + * -v, --verbose run in verbose mode + * --release-date= + * --version= + * --base-url= + * --basis-lib-url= + * --index= + * + *) + +structure Main : sig + + val main : string * string list -> OS.Process.status + + end = struct + + structure FT = FileTree + structure P = OS.Path + +(* TODO: support relative path for @IMAGES_URL@. The actual value depends on + * the path of the file we are generating, since we may need an extra ".." prefix. + *) + + (* create a copy-file function with the specified substitutions *) + fun copy {meta : FT.meta, title, file, base} = let + val d = Date.fromTimeUniv(OS.FileSys.modTime file) + val date = Date.fmt "%Y-%m-%d" d + val time = Date.fmt "%H:%M:%S UTC" d + val imagesURL = Option.getOpt(!Options.imagesURL, base ^ "images") + val substs = [ + ("STYLED-TITLE", Util.style title), + ("DATE", !Options.releaseDate), + ("VERSION", !Options.version), + ("FILEDATE", date), + ("FILETIME", time), + ("BASE", base), + ("IMAGES_URL", imagesURL) + ] + fun metaStr (k, v) = concat[ + "\n " + ] + (* the contents of the element in the <head> *) + val substs = (case #title meta + of SOME s => ("TITLE", s) :: substs + | NONE => ("TITLE", Util.clean title) :: substs + (* end case *)) + val substs = (case #author meta + of SOME s => ("AUTHOR", metaStr("author", s)) :: substs + | NONE => ("AUTHOR", "") :: substs + (* end case *)) + val substs = (case #kws meta + of [] => ("KEYWORDS", "") :: substs + | l => ("KEYWORDS", metaStr("keywords", String.concatWith "," l)) + :: substs + (* end case *)) + in + CopyFile.copy substs + end + + fun gen genTOC (FT.FILE{dir, stem, title, meta, ...}) = let + val srcFile = P.concat(dir, stem ^ ".adoc") + val htmlFile = P.concat(dir, stem ^ ".html") + val copy = copy { + meta = meta, + title = title, + file = srcFile, + base = if dir = "" then "" else "../" + } + val outS = TextIO.openOut htmlFile + in + if !Options.verbose + then print(concat["generating ", htmlFile, "\n"]) + else (); + copy (P.concat(Config.fragDir, "header.in"), outS); + genTOC outS; + copy (P.concat(Config.fragDir, "shim.in"), outS); + RunAsciidoctor.run (srcFile, outS); + copy (P.concat(Config.fragDir, "footer.in"), outS); + TextIO.closeOut outS + end + + (* generate the root page *) + fun appRoot ft = gen (GenTOC.root ft) ft + + (* generate a library page *) + fun appLib (ft, lib) = gen (GenTOC.lib (ft, lib)) lib + + (* generate a TOC file for a manual page *) + fun appPage (ft, lib, page) = gen (GenTOC.page (ft, lib, page)) page + + fun loadIndex indexFile = FT.fromJSON (JSONParser.parseFile indexFile) + + (* for every documentation page, generate a table of contents file *) + val walkTree = FT.app {root = appRoot, lib = appLib, page = appPage} + + fun main (cmd, opts) = ( + Options.process opts; + walkTree (loadIndex (!Options.indexFile)); + if not(!Options.verbose) then print " done\n" else print "done\n"; + OS.Process.success) + handle ex => ( + TextIO.output(TextIO.stdErr, concat[ + "uncaught exception ", General.exnName ex, + " [", General.exnMessage ex, "]\n" + ]); + List.app + (fn s => TextIO.output(TextIO.stdErr, concat [" raised at ", s, "\n"])) + (SMLofNJ.exnHistory ex); + OS.Process.failure) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/Makefile.in mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/Makefile.in --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/Makefile.in 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ +# Makefile.in +# +# COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) +# All rights reserved. +# +# Makefile for gen-pages tool +# +# @configure_input@ +# + +SHELL = @SHELL@ +INSTALL = @INSTALL@ +@SET_MAKE@ + +TOOL_BIN = @TOOL_BIN_DIR@ +ML_BUILD = @ML_BUILD@ +HEAP_SUFFIX = @SMLNJ_HEAP_SUFFIX@ +INSTALL_WRAPPER = @ROOT_DIR@/bin/install-sml-wrapper.sh + +PROGRAM = gen-pages + +HEAP_IMAGE = $(PROGRAM).$(HEAP_SUFFIX) + +.PHONY: install +install: $(HEAP_IMAGE) + $(INSTALL_WRAPPER) $(PROGRAM) $(TOOL_BIN) + +$(HEAP_IMAGE): $(wildcard ../*.sml) $(wildcard *.sml) + $(ML_BUILD) sources.cm Main.main $(PROGRAM) + +include @MK_DIR@/clean-rules.gmk + +CLEAN_FILES = $(HEAP_IMAGE) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/options.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/options.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/options.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/options.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,103 @@ +(* options.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Handle command-line options for the gen-page tool. The options are + * + * -h, --help + * -v, --verbose + * --release-date=<date> + * --version=<version> + * --base-url=<url> + * --basis-lib-url=<url> + * --index=<file> + *) + +structure Options : sig + + val process : string list -> unit + + val usage : OS.Process.status -> unit + + (* option flags *) + val verbose : bool ref + val releaseDate : string ref + val version : string ref + val baseURL : string option ref + val basisLibURL : string ref + val indexFile : string ref + val imagesURL : string option ref + + end = struct + + structure G = GetOpt + + val verbose = ref false + val releaseDate = ref Config.releaseDate + val version = ref Config.version + val baseURL : string option ref = ref NONE + val basisLibURL = ref "https://standardml.org/Basis" + val indexFile = ref "index.json" + val imagesURL = ref(SOME "https://smlnj.org/images") + + val helpFlg = ref false + + fun setOpt (r, name) = G.ReqArg(fn s => r := s, name) + + val opts = [ + { short = "h", long = ["help"], + desc = G.NoArg(fn () => helpFlg := true), + help = "Print this message" + }, + { short = "v", long = ["verbose"], + desc = G.NoArg(fn () => verbose := true), + help = "Print progress messages" + }, + { short = "", long = ["release-date"], + desc = setOpt (releaseDate, "<date>"), + help = "Specify the release date attribute" + }, + { short = "", long = ["version"], + desc = setOpt (version, "<version>"), + help = "Specify the SML/NJ version" + }, + { short = "", long = ["base-url"], + desc = G.ReqArg(fn s => baseURL := SOME s, "<url>"), + help = "Specify a base URL for the documentation" + }, + { short = "", long = ["basis-lib-url"], + desc = setOpt (basisLibURL, "<url>"), + help = "Specify the URL for the SML Basis Library documentation" + }, + { short = "", long = ["index"], + desc = setOpt (indexFile, "<file>"), + help = "Specify the name of the index JSON file" + } + ] + + fun usage sts = ( + print (G.usageInfo{header="gen-pages [options]", options=opts}); + OS.Process.exit sts) + + fun process args = let + val errFlg = ref false + val (_, excess) = G.getOpt { + argOrder = G.RequireOrder, + options = opts, + errFn = fn msg => ( + TextIO.output(TextIO.stdErr, concat["gen-pages: ", msg, "\n"]); + errFlg := true) + } args + in + if !helpFlg + then usage OS.Process.success + else if !errFlg orelse not(null excess) + then usage OS.Process.failure + else (); + case !baseURL + of NONE => imagesURL := NONE (* use relative path to images *) + | _ => () + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/run-asciidoctor.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/run-asciidoctor.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/run-asciidoctor.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/run-asciidoctor.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,51 @@ +(* run-asciidoctor.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure RunAsciidoctor : sig + + val run : string * TextIO.outstream -> OS.Process.status + + end = struct + + fun pipe (inS, outS) = (case TextIO.input inS + of "" => TextIO.closeIn inS + | s => (TextIO.output(outS, s); pipe(inS, outS)) + (* end case *)) + + val cmd = Config.asciidoctor + + fun args file = [ + "-b", "html", + "--no-header-footer", + "-o", "-", + "-a", concat["sml-basis-url=", !Options.basisLibURL], + "-a", concat["smlnj-version=", !Options.version], + "-a", concat["release-date=", !Options.releaseDate], + file + ] + + fun run' (srcFile, outS) = let + val args = args srcFile + val _ = if !Options.verbose + then print(String.concatWith " " (cmd :: args @ ["\n"])) + else () + val proc = Unix.execute (cmd, args) + val (fromProc, toProc) = Unix.streamsOf proc + in + pipe (fromProc, outS); + TextIO.closeOut toProc; + Unix.reap proc + before (if not (!Options.verbose) then print "." else ()) + end + + (* wrapper that first verifies that the file exists *) + fun run (srcFile, outS) = if OS.FileSys.access (srcFile, [OS.FileSys.A_READ]) + then run' (srcFile, outS) + else raise Fail(concat[ + "RunAsciidoctor.run: \"", String.toString srcFile, "\" not found" + ]) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/sources.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/sources.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/sources.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,26 @@ +(* sources.cm + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +Library + + structure Main + +is + + $/basis.cm + $/smlnj-lib.cm + $/json-lib.cm + + ../index/sources.cm + + config.sml + copy-file.sml + gen-toc.sml + main.sml + options.sml + run-asciidoctor.sml + util.sml + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/util.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/util.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/util.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-pages/util.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,42 @@ +(* util.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Utilities for processing simple styled text + *) + +structure Util : sig + + val style : string -> string + val clean : string -> string + + end = struct + + (* handle some simple style notations found in the Asciidoctor title text. + * We handle code "`" and bold "*" markup. We assume that these are _not_ + * nested. + *) + fun style s = let + fun bold (#"*" :: #"*" :: r, acc) = (r, "</b>" :: acc) + | bold (#"*" :: r, acc) = (r, "</b>" :: acc) + | bold (c :: r, acc) = bold (r, str c :: acc) + | bold arg = arg + and code (#"`" :: #"`" :: r, acc) = (r, "</code>" :: acc) + | code (#"`" :: r, acc) = (r, "</code>" :: acc) + | code (c :: r, acc) = code (r, str c :: acc) + | code arg = arg + and text (#"*" :: #"*" :: r, acc) = text (bold (r, "<b>" :: acc)) + | text (#"*" :: r, acc) = text (bold (r, "<b>" :: acc)) + | text (#"`" :: #"`" :: r, acc) = text (code (r, "<code>" :: acc)) + | text (#"`" :: r, acc) = text (code (r, "<code>" :: acc)) + | text (c :: r, acc) = text (r, str c :: acc) + | text ([], acc) = acc + in + String.concat (List.rev (text (explode s, []))) + end + + (* strip code and bold markup *) + fun clean s = String.translate (fn #"`" => "" | #"*" => "" | c => str c) s + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-toc/gen-toc.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-toc/gen-toc.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-toc/gen-toc.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-toc/gen-toc.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,236 @@ +(* gen-toc.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * NOTE: the TOC generation has been integrated into the gen-pages tool. + * This program is preserved for historical interest only. + * + * This program is used to generate the HTML fragment for a sidebar + * table of contents. + * + * Usage: + * + * gen-toc index.json + * + * This command will produce a file file.toc for each source file in + * the index (including the root). These files are HTML fragments + * for a navigation sidebar specialized to the corresponding documentation + * file. + * + * NOTE: this program must be run from the root of the documentation source! + * + * TODO: eventually, we should include the individual definitions from + * the file in the sidebar. + *) + +structure GenTOC : sig + + val main : string * string list -> OS.Process.status + + end = struct + + structure FT = FileTree + structure P = OS.Path + + fun usage sts = ( + TextIO.print "usage: gen-toc index.json\n"; + OS.Process.exit sts) + + fun error msg = ( + TextIO.print(concat["gen-toc: ", msg, "\n"]); + OS.Process.exit OS.Process.failure) + + fun loadIndex indexFile = FT.fromJSON (JSONParser.parseFile indexFile) + + fun withOutS file f = let + val outS = TextIO.openOut file + in + (f outS) handle ex => (TextIO.closeOut outS; raise ex); + TextIO.closeOut outS + end + + fun pr (outS, s) = TextIO.output(outS, s) + fun prl (outS, s) = TextIO.output(outS, concat s) + + fun doTOC file f = let + fun f' outS = ( + prl (outS, [ + "<div id=\"toc\">\n" + ]); + f outS; + prl (outS, [ + "</div> <!-- toc -->\n" + ])) + in + withOutS file f' + end + + (* handle some simple style notations found in the Asciidoctor title text. + * We handle code "`", bold "*", and italic "_" markup. We assume that + * these are _not_ nested. + *) + fun styleText s = let + fun bold (#"*" :: #"*" :: r, acc) = (r, "</b>" :: acc) + | bold (#"*" :: r, acc) = (r, "</b>" :: acc) + | bold (c :: r, acc) = bold (r, str c :: acc) + | bold arg = arg + and code (#"`" :: #"`" :: r, acc) = (r, "</code>" :: acc) + | code (#"`" :: r, acc) = (r, "</code>" :: acc) + | code (c :: r, acc) = code (r, str c :: acc) + | code arg = arg + and italic (#"_" :: #"_" :: r, acc) = (r, "</i>" :: acc) + | italic (#"_" :: r, acc) = (r, "</i>" :: acc) + | italic (c :: r, acc) = code (r, str c :: acc) + | italic arg = arg + and text (#"*" :: #"*" :: r, acc) = text (bold (r, "<b>" :: acc)) + | text (#"*" :: r, acc) = text (bold (r, "<b>" :: acc)) + | text (#"`" :: #"`" :: r, acc) = text (code (r, "<code>" :: acc)) + | text (#"`" :: r, acc) = text (code (r, "<code>" :: acc)) + | text (#"_" :: #"_" :: r, acc) = text (italic (r, "<i>" :: acc)) + | text (#"_" :: r, acc) = text (italic (r, "<i>" :: acc)) + | text (c :: r, acc) = text (r, str c :: acc) + | text ([], acc) = acc + in + String.concat (List.rev (text (explode s, []))) + end + + (* returns the title string for the opening of a library item in the library + * list. The flags are as follows: + * link -- generate an HREF link + * cur -- this library is the current page + * inRoot -- the containing page is at root level + *) + fun libItemOpen {lib, link, cur, inRoot} = let + val FT.LIB{dir, stem, title, ...} = lib + val s = if link then ["</a>"] else [] + val s = if cur + then "<span id=\"toc:current\">" :: styleText title :: "</span>" :: s + else "<span class=\"toc:lib-title\">" :: styleText title :: "</span>" :: s + val s = if link + then let + val dir = if inRoot orelse cur then dir else "../" ^ dir + in + "<a href=\"" :: dir :: "/" :: stem :: ".html\">" :: s + end + else s + val s = "<li class=\"toc:lib\">" :: s + in + concat s + end + + (* returns the string for a page item in the pages list. The + * flags are as follows: + * link -- generate an HREF link + * cur -- this library is the current page + *) + fun pageItem {page, link, cur} = let + val FT.PAGE{stem, title, ...} = page + val s = if link then ["</a></li>"] else ["</li>"] + val s = if cur + then "<span id=\"toc:current\">" :: styleText title :: "</span>" :: s + else "<span class=\"toc:lib-page\">" :: styleText title :: "</span>" :: s + val s = if link + then "<a href=\"" :: stem :: ".html\">" :: s + else s + val s = "<li class=\"toc:page\">" :: s + in + concat s + end + + fun doRoot outS (true, _) = pr(outS, "<ul class=\"toc:lib-list\">\n") + | doRoot outS (false, _) = pr(outS, "</ul>\n") + + (* generate a TOC file for the root page *) + fun appRoot (ft as FT.ROOT{stem, ...}) = doTOC (stem ^ ".toc") (fn outS => let + fun doLib (true, _, lib) = + prl(outS, [ + " ", libItemOpen{lib=lib, link=true, cur=false, inRoot=true} + ]) + | doLib (false, _, _) = pr(outS, "</li>\n") + in + FT.walk { + root = doRoot outS, + lib = doLib, + page = fn _ => () + } ft + end) + + (* generate a TOC file for a library page *) + fun appLib (ft, lib as FT.LIB{dir, stem, ...}) = + doTOC (P.concat(dir, stem ^ ".toc")) (fn outS => let + fun doLib (true, _, lib') = let + val cur = FT.sameLib(lib, lib') + in + prl(outS, [ + " ", libItemOpen{lib=lib', link=false, cur=cur, inRoot=false} + ]); + if cur + then pr(outS, "\n <ul class=\"toc:page-list\">\n") + else () + end + | doLib (false, _, lib') = if FT.sameLib(lib, lib') + then prl(outS, [" </ul>\n", " </li>\n"]) + else pr(outS, "<li>\n") + fun doPage (_, lib', page) = if FT.sameLib(lib, lib') + then prl(outS, [ + " ", + pageItem {page=page, link=true, cur=false}, + "\n" + ]) + else () + in + FT.walk { + root = doRoot outS, + lib = doLib, + page = doPage + } ft + end) + + (* generate a TOC file for a manual page *) + fun appPage (ft, lib, page as FT.PAGE{dir, stem, ...}) = + doTOC (P.concat(dir, stem ^ ".toc")) (fn outS => let + fun doLib (true, _, lib') = let + val cur = FT.sameLib(lib, lib') + in + prl(outS, [ + " ", libItemOpen{lib=lib', link=false, cur=false, inRoot=false} + ]); + if cur + then pr(outS, "\n <ul class=\"toc:page-list\">\n") + else () + end + | doLib (false, _, lib') = if FT.sameLib(lib, lib') + then prl(outS, [" </ul>\n", " </li>\n"]) + else pr(outS, "<li>\n") + fun doPage (_, lib', page') = if FT.sameLib(lib, lib') + then let + val cur = FT.samePage(page, page') + in + prl(outS, [ + " ", + pageItem {page=page', link=not cur, cur=cur}, + "\n" + ]) + end + else () + in + FT.walk { + root = doRoot outS, + lib = doLib, + page = doPage + } ft + end) + + (* for every documentation page, generate a table of contents file *) + val walkTree = FT.app {root = appRoot, lib = appLib, page = appPage} + + fun main (cmd, args) = (case args + of "-h"::_ => usage OS.Process.success + | [indexFile] => ( + walkTree (loadIndex indexFile); + OS.Process.success) + | _ => usage OS.Process.failure + (* end case *)) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-toc/sources.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-toc/sources.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-toc/sources.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/gen-toc/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,19 @@ +(* sources.cm + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +Library + + structure GenTOC + +is + + $/basis.cm + $/smlnj-lib.cm + $/json-lib.cm + + ../index/sources.cm + + gen-toc.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/index/extract-index.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/index/extract-index.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/index/extract-index.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/index/extract-index.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,203 @@ +(* extract-index.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This module implements a tree walker that extracts index information + * from the documentation sources. + *) + +structure ExtractIndex : sig + + (* given the root directory of the documentation sources, extract + * index information. + *) + val extract : string -> FileTree.t + + end = struct + + structure FT = FileTree + structure P = OS.Path + structure RE = RegExpFn( + structure P = AwkSyntax + structure E = BackTrackEngine) + structure MT = MatchTree + structure SS = Substring + structure SIO = TextIO.StreamIO + + val attrRE = RE.compileString "^:!?([^!:]+)!?:(.*)" + val includeRE = RE.compileString "^include::([^.]+\\.adoc)\\[\\]" + val xrefRE = RE.compileString + "[ ]*xref:([^.]+\\.adoc)\\[([^\\]]+|`\\[\\.kw\\]#[a-z]+# [^`]+`)\\]::" + (* match the title text for a module xref *) + val pageRefRE = RE.compileString "`\\[\\.kw\\]#([a-z]+)# ([^`]+)`" + + fun match re = let + val prefix = StringCvt.scanString (RE.prefix re) + fun getSubstrs s = MT.map (fn {pos, len} => String.substring(s, pos, len)) + in + fn s => Option.map (getSubstrs s) (prefix s) + end + + fun openIn (rootDir, path) = TextIO.openIn (P.concat(rootDir, path)) + + fun trimWS ss = SS.dropr Char.isSpace (SS.dropl Char.isSpace ss) + + (* match an asciidoctor atrribute *) + val matchAttr = match attrRE + + (* extract attribute values from lines immediately following the title *) + fun scanMeta inputStrm = let + val inS' = TextIO.getInstream inputStrm + val author = ref NONE + val keywords = ref [] + val title = ref NONE + fun trim s = SS.string(trimWS(SS.full s)) + fun scan inS = (case SIO.inputLine inS + of SOME(ln, inS') => (case matchAttr ln + of SOME(MT.Match(_, [MT.Match(a, []), MT.Match(v, [])])) => ( + case String.map Char.toLower a + of "author" => author := SOME(trim v) + | "keywords" => keywords := + List.map trim + (String.tokens (fn #"," => true | _ => false) v) + | "title" => title := SOME(trim v) + | _ => () + (* end case *); + scan inS') + | _ => inS + (* end case *)) + | NONE => inS + (* end case *)) + in + TextIO.setInstream (inputStrm, scan (TextIO.getInstream inputStrm)); + { author = !author, kws = !keywords, title = !title } + end + + (* open a documentation file and extract some common information *) + fun scanFile rootDir path getContents processContent = let + val dir = P.dir path + val stem = P.base(P.file path) + val inS = openIn (rootDir, path) + val SOME firstLn = TextIO.inputLine inS + val title = if String.isPrefix "= " firstLn + then SS.string(trimWS(SS.extract(firstLn, 2, NONE))) + else "<title>" + val meta = scanMeta inS + val contents = getContents inS + in + TextIO.closeIn inS; + FT.FILE{ + dir = dir, + stem = stem, + title = title, + meta = meta, + info = processContent contents + } + end + + (* scan the input stream until a line for which f returns `SOME v` is encountered *) + fun scanLines f inS = let + fun lp () = (case TextIO.inputLine inS + of SOME ln => (case f ln + of NONE => lp () + | someV => someV + (* end case *)) + | NONE => NONE + (* end case *)) + in + lp () + end + + (* find the next "include" directive in the input stream *) + fun findInclude inS = scanLines (match includeRE) inS + + (* find the next "xref" directive in the input stream *) + fun findXRef inS = scanLines (match xrefRE) inS + + (* match a module page reference *) + val matchPageRef = match pageRefRE + + fun doPage rootDir libDir {file, info} = let + val pagePath = P.joinDirFile{dir = libDir, file = file} + in +(* NOTE: for now, we only extract the header info from pages, but eventually + * we should get the list of defined modules. + *) + scanFile rootDir pagePath + (fn inS => info) + (fn info => info) + end + + (* extract the list of page files from a library document *) + fun getPagesFromLib inS = let + (* first we get the `xref` list items *) + fun getPages pages = (case findXRef inS + of SOME(MT.Match(_, [MT.Match(file, []), MT.Match(title, [])])) => ( + case matchPageRef title + of SOME(MT.Match(_, [MT.Match(kw, []), MT.Match(name, [])])) => let + val kind = (case kw + of "signature" => FT.SigPage + | "structure" => FT.StructPage + | "functor" => FT.FunctPage + | _ => raise Fail(concat[ + "**bogus keyword \"", kw, "\"" + ]) + (* end case *)) + val page = { + file = file, + info = {kind = kind, name = name} + } + in + getPages (page :: pages) + end + | _ => let (* non-module page *) + val page = { + file = file, + info = {kind = FT.OtherPage, name = title} + } + in + getPages (page :: pages) + end + (* end case *)) + | NONE => List.rev pages + | SOME(MT.Match(s, _)) => raise Fail(concat[ + "**bogus xref \"", String.toString s, "\"" + ]) + (* end case *)) + in + {pages = getPages []} + end + + (* process a library file *) + fun doLib rootDir libPath = let + val libDir = P.dir libPath + in + scanFile rootDir libPath + getPagesFromLib + (fn {pages} => {pages = List.map (doPage rootDir libDir) pages}) + end + + (* extract the list of library files from the root document *) + fun getLibsFromRoot inS = let + fun getIncludes incs = (case findInclude inS + of SOME(MT.Match(_, [MT.Match(path, [])])) => + getIncludes(path :: incs) + | NONE => List.rev incs + | SOME(MT.Match(s, _)) => raise Fail(concat[ + "**bogus include \"", String.toString s, "\"" + ]) + (* end case *)) + in + getIncludes [] + end + + fun extract rootDir = let + val rootDir = OS.FileSys.fullPath rootDir + in + scanFile rootDir "index.adoc" + getLibsFromRoot + (fn libs => {libs = List.map (doLib rootDir) libs}) + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/index/file-tree.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/index/file-tree.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/index/file-tree.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/index/file-tree.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,268 @@ +(* file-tree.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * The file tree represents the structure of the documentation as a three-level + * tree. This structure is generated by walking over the documentation source. + *) + +structure FileTree : sig + + (* meta data extracted from the attributes *) + type meta = { + author : string option, (* value of "author" attribute *) + kws : string list, (* value of "keywords" attribute *) + title : string option (* alternate title to use in document header *) + } + + (* a node in the file tree; the `info` field is used to distinguish the kind + * of node (root, library, or page). + *) + datatype 'a file = FILE of { + dir : string, (* directory relative to the root of the documentation *) + stem : string, (* file-name stem; e.g., "json-lib" *) + title : string, (* title of page *) + meta : meta, (* meta data from attributes *) + info : 'a (* information specific to the type of file in the tree *) + } + + datatype page_kind = SigPage | StructPage | FunctPage | OtherPage + + (* the leaves of the tree are the pages that describe the modules *) + type page = { + kind : page_kind, (* specifies the kind of the main module + * or `OtherPage` for other material. + *) + name : string (* the main module name or page title *) + } file + + (* the interior nodes correspond to libraries. The info describes the pages + * that comprise the library's documentation. + *) + type library = { + pages : page list (* list of manual pages for library *) + } file + + (* the root file of the documentation; the info is the list of libraries *) + type t = {libs : library list} file + + (* test equality by name *) + val same : 'a file * 'a file -> bool + + (* is a page in a library? *) + val inLibrary : library -> page -> bool + + (* get various components of a tree node *) + val getAuthor : 'a file -> string option + val getKeywords : 'a file -> string list + val getAltTitle : 'a file -> string option + val getDir : 'a file -> string + val getStem : 'a file -> string + val getTitle : 'a file -> string + val getLibs : t -> library list + val getPages : library -> page list + + (* apply the functions to the nodes of the tree *) + val app : { + root : t -> unit, + lib : t * library -> unit, + page : t * library * page -> unit + } -> t -> unit + + (* do a walk over the tree; for interior nodes (root and libraries), + * the function is called with "true" on entry and with "false" after + * visiting the node's kids. + *) + val walk : { + root : bool * t -> unit, + lib : bool * t * library -> unit, + page : t * library * page -> unit + } -> t -> unit + + (* convert between JSON objects and the file tree datatypes *) + val fromJSON : JSON.value -> t + val toJSON : t -> JSON.value + + end = struct + + structure U = JSONUtil + + (* meta data extracted from the attributes *) + type meta = { + author : string option, (* value of "author" attribute *) + kws : string list, (* value of "keywords" attribute *) + title : string option (* alternate title to use in document header *) + } + + datatype 'a file = FILE of { + dir : string, (* directory relative to the root of the documentation *) + stem : string, (* file-name stem; e.g., "json-lib" *) + title : string, (* title of page *) + meta : meta, (* meta data from attributes *) + info : 'a (* information specific to the type of file in the tree *) + } + + datatype page_kind = SigPage | StructPage | FunctPage | OtherPage + + (* the leaves of the tree are the pages that describe the modules *) + type page = { + kind : page_kind, (* specifies the kind of the main module + * or `OtherPage` for other material. + *) + name : string (* the main module name or page title *) + } file + + (* the interior nodes correspond to libraries. The info describes the pages + * that comprise the library's documentation. + *) + type library = { + pages : page list (* list of manual pages for library *) + } file + + (* the root file of the documentation; the info is the list of libraries *) + type t = {libs : library list} file + + (* test equality by name *) + fun same (FILE f1, FILE f2) = (#dir f1 = #dir f2) andalso (#stem f1 = #stem f2) + + (* is a page in a library? *) + fun inLibrary (FILE lib) (FILE p) = (#dir lib = #dir p) + + (* get various components of a tree node *) + fun getAuthor (FILE{meta={author, ...}, ...}) = author + fun getKeywords (FILE{meta={kws, ...}, ...}) = kws + fun getAltTitle (FILE{meta={title, ...}, ...}) = title + fun getDir (FILE{dir, ...}) = dir + fun getStem (FILE{stem, ...}) = stem + fun getTitle (FILE{title, ...}) = title + fun getLibs (FILE{info={libs}, ...}) = libs + fun getPages (FILE{info={pages}, ...}) = pages + + fun inLibrary (FILE lib) (FILE p) = (#dir lib = #dir p) + + fun app {root, lib, page} (ft : t) = let + fun walkLib (l : library) = ( + lib (ft, l); + List.app (fn p => page(ft, l, p)) (getPages l)) + in + root ft; + List.app walkLib (getLibs ft) + end + + fun walk {root, lib, page} (ft : t) = let + fun walkLib (l : library) = ( + lib (true, ft, l); + List.app (fn p => page(ft, l, p)) (getPages l); + lib (false, ft, l)) + in + root (true, ft); + List.app walkLib (getLibs ft); + root (false, ft) + end + + datatype value = datatype JSON.value + + fun fromJSON root = let + fun jsonToMeta findField = { + author = (case findField "meta-author" + of NONE => NONE + | SOME NULL => NONE + | SOME obj => SOME(U.asString obj) + (* end case *)), + kws = (case findField "meta-keywords" + of NONE => [] + | SOME NULL => [] + | SOME kws => U.arrayMap U.asString kws + (* end case *)), + title = (case findField "meta-title" + of NONE => NONE + | SOME NULL => NONE + | SOME obj => SOME(U.asString obj) + (* end case *)) + } + fun jsonToFile obj getInfo = let + val get = U.lookupField obj + val find = U.findField obj + in + FILE{ + dir = U.asString(get "dir"), + stem = U.asString(get "stem"), + title = U.asString(get "title"), + meta = jsonToMeta find, + info = getInfo (get, find) + } + end + fun jsonToPage obj = jsonToFile obj (fn (_, find) => ( + case (find "kind", find "name") + of (SOME k, SOME n) => let + val kind = (case U.asString k + of "signature" => SigPage + | "structure" => StructPage + | "functor" => FunctPage + | "other" => OtherPage + | s => raise Fail(concat["unknown page kind \"", s, "\""]) + (* end case *)) + in + {kind = kind, name = U.asString n} + end + | _ => raise Fail "misformed page" + (* end case *))) + fun jsonToLib obj = jsonToFile obj (fn (get, find) => { + pages = U.arrayMap jsonToPage (get "pages") + }) + in + jsonToFile root (fn (get, _) => { + libs = U.arrayMap jsonToLib (get "libraries") + }) + end + + fun toJSON root = let + fun metaToJSON (meta : meta, fields) = let + val fields = (case #title meta + of NONE => fields + | SOME s => ("meta-title", STRING s) :: fields + (* end case *)) + val fields = (case #kws meta + of [] => fields + | kws => ("meta-keywords", ARRAY(List.map STRING kws)) :: fields + (* end case *)) + val fields = (case #author meta + of NONE => fields + | SOME s => ("meta-author", STRING s) :: fields + (* end case *)) + in + fields + end + fun fileToJSON (FILE{dir, stem, title, meta, info}) infoToJSON = let + val fields = infoToJSON info + val fields = metaToJSON (meta, fields) + in + OBJECT( + ("dir", STRING dir) :: + ("stem", STRING stem) :: + ("title", STRING title) :: + fields) + end + fun pageToJSON page = let + fun infoToJSON {kind, name} = let + val kind = (case kind + of SigPage => "signature" + | StructPage => "structure" + | FunctPage => "functor" + | OtherPage => "other" + (* end case *)) + in + [("kind", STRING kind), ("name", STRING name)] + end + in + fileToJSON page infoToJSON + end + fun libToJSON lib = fileToJSON lib + (fn _ => [("pages", ARRAY(map pageToJSON (getPages lib)))]) + in + fileToJSON root + (fn {libs} => [("libraries", ARRAY(map libToJSON libs))]) + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/index/sources.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/index/sources.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/index/sources.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/index/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,20 @@ +(* sources.cm + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +Library + + structure ExtractIndex + structure FileTree + +is + + $/basis.cm + $/smlnj-lib.cm + $/json-lib.cm + $/regexp-lib.cm + + extract-index.sml + file-tree.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/Makefile.in mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/Makefile.in --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/Makefile.in 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,29 @@ +# Makefile.in +# +# COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) +# All rights reserved. +# +# Makefile for SML/NJ Library documentation tools +# +# @configure_input@ +# + +SHELL = @SHELL@ +INSTALL = @INSTALL@ +@SET_MAKE@ + +SUBDIRS = make-index gen-pages + +.PHONY: install +install: + for d in $(SUBDIRS) ; do \ + (cd $$d && $(MAKE) install) || exit $$?; \ + done + +include @MK_DIR@/clean-rules.gmk + +CLEAN_FILES = + +CLEAN_SUBDIRS = $(DOC_SUBDIRS) + +CLEANDIST_FILES = $(TOOL_BIN_DIR)/* $(TOOL_BIN_DIR)/.heap diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/Makefile.in mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/Makefile.in --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/Makefile.in 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ +# Makefile.in +# +# COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) +# All rights reserved. +# +# Makefile for make-index tool +# +# @configure_input@ +# + +SHELL = @SHELL@ +INSTALL = @INSTALL@ +@SET_MAKE@ + +TOOL_BIN = @TOOL_BIN_DIR@ +ML_BUILD = @ML_BUILD@ +HEAP_SUFFIX = @SMLNJ_HEAP_SUFFIX@ +INSTALL_WRAPPER = @ROOT_DIR@/bin/install-sml-wrapper.sh + +PROGRAM = make-index + +HEAP_IMAGE = $(PROGRAM).$(HEAP_SUFFIX) + +.PHONY: install +install: $(HEAP_IMAGE) + $(INSTALL_WRAPPER) $(PROGRAM) $(TOOL_BIN) + +$(HEAP_IMAGE): $(wildcard ../*.sml) make-index.sml + $(ML_BUILD) sources.cm MakeIndex.main $(PROGRAM) + +include @MK_DIR@/clean-rules.gmk + +CLEAN_FILES = $(HEAP_IMAGE) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/make-index.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/make-index.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/make-index.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/make-index.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,36 @@ +(* make-index.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This program is used to generate extract index information from + * the document sources and then write it out as a JSON file. + * + * Usage: + * + * make-index index.json + *) + +structure MakeIndex : sig + + val main : string * string list -> OS.Process.status + + end = struct + + fun usage sts = ( + TextIO.print "usage: make-index <outfile>\n"; + OS.Process.exit sts) + + fun main (cmd, args) = (case args + of "-h"::_ => usage OS.Process.success + | [outFile] => let + val tree = FileTree.toJSON(ExtractIndex.extract ".") + val outS = TextIO.openOut outFile + in + JSONPrinter.print' {strm = outS, pretty = true} tree; + OS.Process.success + end + | _ => usage OS.Process.failure + (* end case *)) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/sources.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/sources.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/sources.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/make-index/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,19 @@ +(* sources.cm + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +Library + + structure MakeIndex + +is + + $/basis.cm + $/smlnj-lib.cm + $/json-lib.cm + + ../index/sources.cm + + make-index.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/README.md mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/README.md --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Doc/tools/README.md 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Doc/tools/README.md 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,4 @@ +This directory tree contains some tools for extracting information +from the document sources that can used for generating HTML +navigation, etc. + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-atom.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-atom.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-atom.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-atom.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,12 @@ +(* hash-cons-atom.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure HashConsAtom = HashConsGroundFn ( + struct + type hash_key = Atom.atom + val sameKey = Atom.same + val hashVal = Atom.hash + end) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-ground-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-ground-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-ground-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-ground-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,29 @@ +(* hash-cons-ground-fn.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Functor for defining hashed-cons representation of ground terms. + *) + +functor HashConsGroundFn (T : HASH_KEY) : sig + + type hash_key = T.hash_key + type obj = hash_key HashCons.obj + + val mk : hash_key -> obj + + end = struct + + structure HC = HashCons + + type hash_key = T.hash_key + type obj = hash_key HC.obj + + val tbl = HC.new {eq = T.sameKey} + + val cons = HC.cons0 tbl + + fun mk term = cons(T.hashVal term, term) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,39 @@ +(* hash-cons-lib.cm + * + * COPYRIGHT (c) 2001 Bell Labs, Lucent Technologies + * + * This library supports the implementation of hash-consed of data structures. + *) + +Library + + signature HASH_CONS + signature HASH_CONS_MAP + signature HASH_CONS_SET + + structure HashCons + structure HashConsAtom + structure HashConsMap + structure HashConsString + structure HashConsSet + + functor HashConsGroundFn + +is + +#if defined(NEW_CM) + $/basis.cm + $/smlnj-lib.cm +#else + ../Util/smlnj-lib.cm +#endif + + hash-cons-atom.sml + hash-cons-ground-fn.sml + hash-cons-map-sig.sml + hash-cons-map.sml + hash-cons-sig.sml + hash-cons.sml + hash-cons-set-sig.sml + hash-cons-set.sml + hash-cons-string.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,238 @@ + +ann + "nonexhaustiveBind ignore" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" +in + +local + basis l13 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb + end + basis l4 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + open l4 + in + structure gs_0 = HashString + end + local + open l4 + in + signature gs_1 = HASH_KEY + end + local + open l13 + in + structure gs_2 = Array + end + local + open l13 + in + structure gs_3 = List + end + local + open l4 + in + structure gs_4 = PrimeSizes + end + local + open l13 + in + structure gs_5 = Char + structure gs_6 = CharArray + structure gs_7 = CharVector + structure gs_8 = FixedInt + structure gs_9 = General + structure gs_10 = Int + structure gs_11 = Int32 + structure gs_12 = Int64 + structure gs_13 = IntInf + structure gs_14 = LargeInt + structure gs_15 = LargeReal + structure gs_16 = LargeWord + structure gs_17 = OS + structure gs_18 = Position + structure gs_19 = Real + structure gs_20 = Real64 + structure gs_21 = RealArray + structure gs_22 = RealArraySlice + structure gs_23 = RealVector + structure gs_24 = RealVectorSlice + structure gs_25 = SMLofNJ + structure gs_26 = Socket + structure gs_27 = String + structure gs_28 = Substring + structure gs_29 = SysWord + structure gs_30 = Time + structure gs_31 = Word + structure gs_32 = Word32 + structure gs_33 = Word64 + structure gs_34 = Word8 + end + local + hash-cons-sig.sml + in + signature gs_35 = HASH_CONS + end + local + structure Array = gs_2 + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure FixedInt = gs_8 + structure General = gs_9 + signature HASH_CONS = gs_35 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + structure List = gs_3 + structure OS = gs_17 + structure Position = gs_18 + structure PrimeSizes = gs_4 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure Substring = gs_28 + structure SysWord = gs_29 + structure Time = gs_30 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + hash-cons.sml + in + structure gs_36 = HashCons + end + local + signature HASH_KEY = gs_1 + structure HashCons = gs_36 + hash-cons-ground-fn.sml + in + functor gs_37 = HashConsGroundFn + end + local + functor HashConsGroundFn = gs_37 + structure HashString = gs_0 + hash-cons-string.sml + in + structure gs_38 = HashConsString + end + local + structure HashCons = gs_36 + hash-cons-set-sig.sml + in + signature gs_39 = HASH_CONS_SET + end + local + open l4 + in + structure gs_40 = Atom + end + local + structure Atom = gs_40 + functor HashConsGroundFn = gs_37 + hash-cons-atom.sml + in + structure gs_41 = HashConsAtom + end + local + structure HashCons = gs_36 + hash-cons-map-sig.sml + in + signature gs_42 = HASH_CONS_MAP + end + local + open l4 + in + structure gs_43 = WordRedBlackMap + end + local + open l13 + in + structure gs_44 = Option + end + local + signature HASH_CONS_MAP = gs_42 + structure HashCons = gs_36 + structure Option = gs_44 + structure WordRedBlackMap = gs_43 + hash-cons-map.sml + in + structure gs_45 = HashConsMap + end + local + open l4 + in + structure gs_46 = LibBase + end + local + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure FixedInt = gs_8 + structure General = gs_9 + signature HASH_CONS_SET = gs_39 + structure HashCons = gs_36 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + structure LibBase = gs_46 + structure List = gs_3 + structure OS = gs_17 + structure Position = gs_18 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure Substring = gs_28 + structure SysWord = gs_29 + structure Time = gs_30 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + hash-cons-set.sml + in + structure gs_47 = HashConsSet + end +in + signature HASH_CONS = gs_35 + signature HASH_CONS_MAP = gs_42 + signature HASH_CONS_SET = gs_39 + structure HashCons = gs_36 + structure HashConsAtom = gs_41 + functor HashConsGroundFn = gs_37 + structure HashConsMap = gs_45 + structure HashConsSet = gs_47 + structure HashConsString = gs_38 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-map-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-map-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-map-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-map-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,137 @@ +(* hash-cons-map-sig.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +signature HASH_CONS_MAP = + sig + + type 'a obj = 'a HashCons.obj + + type ('a, 'b) map + + val empty : ('a, 'b) map + (* The empty map *) + + val singleton : ('a obj * 'b) -> ('a, 'b) map + (* return the specified singleton map *) + + val insert : ('a, 'b) map * 'a obj * 'b -> ('a, 'b) map + val insert' : (('a obj * 'b) * ('a, 'b) map) -> ('a, 'b) map + (* Insert an item. *) + + val insertWith : (('b * 'b) -> 'b) + -> ('a, 'b) map * 'a obj * 'b -> ('a, 'b) map + (* Insert an item with a combining function to resolve collisions. + * The first argument to the combining function is the existing value, + * and the second argument is the value being inserted into the map. + *) + val insertWithi : (('a obj * 'b * 'b) -> 'b) + -> ('a, 'b) map * 'a obj * 'b -> ('a, 'b) map + (* Like insertWith, except that the combining function also takes the + * key as an argument. + *) + + val find : ('a, 'b) map * 'a obj -> 'b option + (* Look for an item, return NONE if the item doesn't exist *) + + val lookup : ('a, 'b) map * 'a obj -> 'b + (* look for an item, raise the NotFound exception if it doesn't exist *) + + val inDomain : (('a, 'b) map * 'a obj) -> bool + (* return true, if the key is in the domain of the map *) + + val remove : ('a, 'b) map * 'a obj -> ('a, 'b) map * 'b + (* Remove an item, returning new map and value removed. + * Raises LibBase.NotFound if not found. + *) + + val isEmpty : ('a, 'b) map -> bool + (* Return true if and only if the map is empty *) + + val numItems : ('a, 'b) map -> int + (* Return the number of items in the map *) + + val listItems : ('a, 'b) map -> 'b list + val listItemsi : ('a, 'b) map -> ('a obj * 'b) list + (* Return an ordered list of the items (and their keys) in the map. *) + + val listKeys : ('a, 'b) map -> 'a obj list + (* return an ordered list of the keys in the map. *) + + val collate : ('b * 'b -> order) -> (('a, 'b) map * ('a, 'b) map) -> order + (* given an ordering on the map's range, return an ordering + * on the map. + *) + + val unionWith : ('b * 'b -> 'b) -> (('a, 'b) map * ('a, 'b) map) + -> ('a, 'b) map + val unionWithi : ('a obj * 'b * 'b -> 'b) -> (('a, 'b) map * ('a, 'b) map) + -> ('a, 'b) map + (* return a map whose domain is the union of the domains of the two input + * maps, using the supplied function to define the map on elements that + * are in both domains. + *) + + val intersectWith : ('b * 'c -> 'd) -> (('a, 'b) map * ('a, 'c) map) + -> ('a, 'd) map + val intersectWithi : ('a obj * 'b * 'c -> 'd) -> (('a, 'b) map * ('a, 'c) map) + -> ('a, 'd) map + (* return a map whose domain is the intersection of the domains of the + * two input maps, using the supplied function to define the range. + *) + + val mergeWith : ('b option * 'c option -> 'd option) + -> (('a, 'b) map * ('a, 'c) map) -> ('a, 'd) map + val mergeWithi : ('a obj * 'b option * 'c option -> 'd option) + -> (('a, 'b) map * ('a, 'c) map) -> ('a, 'd) map + (* merge two maps using the given function to control the merge. For + * each key k in the union of the two maps domains, the function + * is applied to the image of the key under the map. If the function + * returns SOME y, then (k, y) is added to the resulting map. + *) + + val app : ('b -> unit) -> ('a, 'b) map -> unit + val appi : (('a obj * 'b) -> unit) -> ('a, 'b) map -> unit + (* Apply a function to the entries of the map. *) + + val map : ('b -> 'c) -> ('a, 'b) map -> ('a, 'c) map + val mapi : ('a obj * 'b -> 'c) -> ('a, 'b) map -> ('a, 'c) map + (* Create a new map by applying a map function to the + * name/value pairs in the map. + *) + + val fold : ('b * 'c -> 'c) -> 'c -> ('a, 'b) map -> 'c + val foldi : ('a obj * 'b * 'c -> 'c) -> 'c -> ('a, 'b) map -> 'c + (* Apply a folding function to the entries of the map *) + + val foldl : ('b * 'c -> 'c) -> 'c -> ('a, 'b) map -> 'c + val foldli : ('a obj * 'b * 'c -> 'c) -> 'c -> ('a, 'b) map -> 'c + val foldr : ('b * 'c -> 'c) -> 'c -> ('a, 'b) map -> 'c + val foldri : ('a obj * 'b * 'c -> 'c) -> 'c -> ('a, 'b) map -> 'c + (* these functions are DEPRECATED *) + + val filter : ('b -> bool) -> ('a, 'b) map -> ('a, 'b) map + val filteri : ('a obj * 'b -> bool) -> ('a, 'b) map -> ('a, 'b) map + (* Filter out those elements of the map that do not satisfy the + * predicate. + *) + + val mapPartial : ('b -> 'c option) -> ('a, 'b) map -> ('a, 'c) map + val mapPartiali : ('a obj * 'b -> 'c option) -> ('a, 'b) map -> ('a, 'c) map + (* map a partial function over the elements of a map. *) + + val exists : ('b -> bool) -> ('a, 'b) map -> bool + val existsi : ('a obj * 'b -> bool) -> ('a, 'b) map -> bool + (* check the elements of a map with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + *) + + val all : ('b -> bool) -> ('a, 'b) map -> bool + val alli : ('a obj * 'b -> bool) -> ('a, 'b) map -> bool + (* check the elements of a map with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. + *) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-map.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-map.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-map.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-map.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,111 @@ +(* hash-cons-map.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This is an implementation of the HASH_CONS_MAP signature that is built + * on top of the WordRedBlackMap structure. Eventually, it will be replaced + * by an implmementation that uses Patricia trees. + *) + +structure HashConsMap : HASH_CONS_MAP = + struct + + structure HC = HashCons + structure Map = WordRedBlackMap + + type 'a obj = 'a HC.obj + + type ('a, 'b) map = ('a obj * 'b) Map.map + + fun lift2 f ((_, a), (_, b)) = f(a, b) + fun lift2i f (_, (k, a), (_, b)) = f(k, a, b) + + val empty = Map.empty + fun singleton (obj, v) = Map.singleton (HC.tag obj, (obj, v)) + fun insert (m, obj, v) = Map.insert(m, HC.tag obj, (obj, v)) + fun insert' (p as (obj, v), m) = Map.insert(m, HC.tag obj, p) + + fun insertWith merge (m, obj, v) = let + val tag = HC.tag obj + in + case Map.find(m, tag) + of NONE => Map.insert(m, tag, (obj, v)) + | SOME(_, v') => Map.insert(m, tag, (obj, merge(v', v))) + (* end case *) + end + fun insertWithi merge (m, obj, v) = let + val tag = HC.tag obj + in + case Map.find(m, tag) + of NONE => Map.insert(m, tag, (obj, v)) + | SOME(_, v') => Map.insert(m, tag, (obj, merge(obj, v', v))) + (* end case *) + end + + fun find (map : ('a, 'b) map, obj) = Option.map #2 (Map.find(map, HC.tag obj)) + fun lookup (map : ('a, 'b) map, obj) = #2 (Map.lookup(map, HC.tag obj)) + fun inDomain (map, obj) = Map.inDomain (map, HC.tag obj) + fun remove (map, obj) = let + val (map, (_, v)) = Map.remove (map, HC.tag obj) + in + (map, v) + end + val isEmpty = Map.isEmpty + val numItems = Map.numItems + fun listItems map = Map.foldr (fn ((_, v), vs) => v::vs) [] map + val listItemsi = Map.listItems + fun listKeys map = Map.foldr (fn ((k, _), ks) => k::ks) [] map + fun collate cmp = Map.collate (lift2 cmp) + fun unionWith merge = + Map.unionWith (fn ((k, a), (_, b)) => (k, merge(a, b))) + fun unionWithi merge = + Map.unionWithi (lift2i (fn (k, a, b) => (k, merge(k, a, b)))) + fun intersectWith join = + Map.intersectWith (fn ((k, a), (_, b)) => (k, join(a, b))) + fun intersectWithi join = + Map.intersectWithi (lift2i (fn (k, a, b) => (k, join(k, a, b)))) + fun mergeWith join = let + fun result (k, SOME c) = SOME(k, c) + | result (_, NONE) = NONE + fun join' (SOME(k, a), SOME(_, b)) = result (k, join(SOME a, SOME b)) + | join' (SOME(k, a), NONE) = result (k, join(SOME a, NONE)) + | join' (NONE, SOME(k, b)) = result (k, join(NONE, SOME b)) + | join' (NONE, NONE) = raise Fail "impossible" + in + Map.mergeWith join' + end + fun mergeWithi join = let + fun result (k, SOME c) = SOME(k, c) + | result (_, NONE) = NONE + fun join' (SOME(k, a), SOME(_, b)) = result (k, join(k, SOME a, SOME b)) + | join' (SOME(k, a), NONE) = result (k, join(k, SOME a, NONE)) + | join' (NONE, SOME(k, b)) = result (k, join(k, NONE, SOME b)) + | join' (NONE, NONE) = raise Fail "impossible" + in + Map.mergeWith join' + end + fun app f = Map.app (fn (_, v) => f v) + val appi = Map.app + fun map f = Map.map (fn (k, v) => (k, f v)) + fun mapi f = Map.map (fn (k, v) => (k, f(k, v))) + fun fold f = Map.foldl (fn ((_, x), acc) => f(x, acc)) + fun foldi f = Map.foldl (fn ((k, x), acc) => f(k, x, acc)) + val foldl = fold (* DEPRECATED *) + val foldli = foldi (* DEPRECATED *) + val foldr = fold (* DEPRECATED *) + val foldri = foldi (* DEPRECATED *) + fun filter pred = Map.filter (fn (_, x) => pred x) + val filteri = Map.filter + fun mapPartial f = + Map.mapPartial + (fn (k, v) => case f v of SOME v => SOME(k, v) | NONE => NONE) + fun mapPartiali f = + Map.mapPartial + (fn (k, v) => case f(k, v) of SOME v => SOME(k, v) | NONE => NONE) + fun exists f = Map.exists (fn (k, v) => f v) + fun existsi f = Map.exists f + fun all f = Map.all (fn (k, v) => f v) + fun alli f = Map.all f + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-set-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-set-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-set-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-set-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,126 @@ +(* hash-cons-set-sig.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Finnite sets of hash-consed objects. + *) + + +signature HASH_CONS_SET = + sig + + type 'a obj = 'a HashCons.obj + + type 'a set + + val empty : 'a set + (* The empty set *) + + val singleton : 'a obj -> 'a set + (* Create a singleton set *) + + val fromList : 'a obj list -> 'a set + (* create a set from a list of items *) + + val add : 'a set * 'a obj -> 'a set + val add' : ('a obj * 'a set) -> 'a set + (* Insert an 'a obj. *) + + val addList : 'a set * 'a obj list -> 'a set + (* Insert items from list. *) + + val subtract : 'a set * 'a obj -> 'a set + val subtract' : ('a obj * 'a set) -> 'a set + (* Subtract an 'a obj from a set; has no effect if the 'a obj is not in the set *) + + val subtractList : 'a set * 'a obj list -> 'a set + (* Subtract a list of items from the set. *) + + val delete : 'a set * 'a obj -> 'a set + (* Remove an 'a obj. Raise NotFound if not found. *) + + val member : 'a set * 'a obj -> bool + (* Return true if and only if 'a obj is an element in the set *) + + val isEmpty : 'a set -> bool + (* Return true if and only if the set is empty *) + + val equal : ('a set * 'a set) -> bool + (* Return true if and only if the two sets are equal *) + + val compare : ('a set * 'a set) -> order + (* does a lexical comparison of two sets *) + + val isSubset : ('a set * 'a set) -> bool + (* Return true if and only if the first set is a subset of the second *) + + val disjoint : 'a set * 'a set -> bool + (* are the two sets disjoint? *) + + val numItems : 'a set -> int + (* Return the number of items in the table *) + + val toList : 'a set -> 'a obj list + (* Return an ordered list of the items in the set *) + + val listItems : 'a set -> 'a obj list + (* Return an ordered list of the items in the set. This function is + * deprecated in favor of `toList` + *) + + val union : 'a set * 'a set -> 'a set + (* Union *) + + val intersection : 'a set * 'a set -> 'a set + (* Intersection *) + + val difference : 'a set * 'a set -> 'a set + (* Difference *) + + val map : ('a obj -> 'b obj) -> 'a set -> 'b set + (* Create a new set by applying a function to the elements + * of the set. + *) + + val mapPartial : ('a obj -> 'b obj option) -> 'a set -> 'b set + (* Create a new set by applying a partial function to the elements + * of the set. + *) + + val app : ('a obj -> unit) -> 'a set -> unit + (* Apply a function to the entries of the set *) + + val fold : ('a obj * 'b -> 'b) -> 'b -> 'a set -> 'b + (* Apply a folding function to the entries of the set *) + + val foldl : ('a obj * 'b -> 'b) -> 'b -> 'a set -> 'b + val foldr : ('a obj * 'b -> 'b) -> 'b -> 'a set -> 'b + (* these functions are DEPRECATED *) + + val partition : ('a obj -> bool) -> 'a set -> ('a set * 'a set) + (* partition a set into two based using the given predicate. Returns two + * sets, where the first contains those elements for which the predicate is + * true and the second contains those elements for which the predicate is + * false. + *) + + val filter : ('a obj -> bool) -> 'a set -> 'a set + (* filter a set by the given predicate returning only those elements for + * which the predicate is true. + *) + + val all : ('a obj -> bool) -> 'a set -> bool + (* check the elements of a set with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. + *) + + val exists : ('a obj -> bool) -> 'a set -> bool + (* check the elements of a set with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + *) + + val find : ('a obj -> bool) -> 'a set -> 'a obj option + (* find an element in the set for which the predicate is true *) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-set.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-set.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-set.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-set.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,490 @@ +(* hash-cons-set.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This is an implementation of the HASH_CONS_SET signature that uses Red-Black + * trees. Eventually, it should be replaced by an implmementation that uses + * Patricia trees. + *) + +structure HashConsSet : HASH_CONS_SET = + struct + + structure HC = HashCons + + datatype color = R | B + + type 'a obj = 'a HC.obj + + datatype 'a tree + = E + | T of (color * 'a tree * 'a obj * 'a tree) + + datatype 'a set = SET of (int * 'a tree) + +(* NOTE: we should use the Word.< and = operations instead of Word.compare *) + fun cmpObj (a : 'a obj, b : 'a obj) = Word.compare(#tag a, #tag b) + + fun isEmpty (SET(_, E)) = true + | isEmpty _ = false + + val empty = SET(0, E) + + fun singleton x = SET(1, T(B, E, x, E)) + + fun add (SET(nItems, m), x) = let + val nItems' = ref nItems + fun ins E = (nItems' := nItems+1; T(R, E, x, E)) + | ins (s as T(color, a, y, b)) = (case cmpObj(x, y) + of LESS => (case a + of T(R, c, z, d) => (case cmpObj(x, z) + of LESS => (case ins c + of T(R, e, w, f) => T(R, T(B,e,w,f), z, T(B,d,y,b)) + | c => T(B, T(R,c,z,d), y, b) + (* end case *)) + | EQUAL => T(color, T(R, c, x, d), y, b) + | GREATER => (case ins d + of T(R, e, w, f) => T(R, T(B,c,z,e), w, T(B,f,y,b)) + | d => T(B, T(R,c,z,d), y, b) + (* end case *)) + (* end case *)) + | _ => T(B, ins a, y, b) + (* end case *)) + | EQUAL => T(color, a, x, b) + | GREATER => (case b + of T(R, c, z, d) => (case cmpObj(x, z) + of LESS => (case ins c + of T(R, e, w, f) => T(R, T(B,a,y,e), w, T(B,f,z,d)) + | c => T(B, a, y, T(R,c,z,d)) + (* end case *)) + | EQUAL => T(color, a, y, T(R, c, x, d)) + | GREATER => (case ins d + of T(R, e, w, f) => T(R, T(B,a,y,c), z, T(B,e,w,f)) + | d => T(B, a, y, T(R,c,z,d)) + (* end case *)) + (* end case *)) + | _ => T(B, a, y, ins b) + (* end case *)) + (* end case *)) + val T(_, a, y, b) = ins m + in + SET(!nItems', T(B, a, y, b)) + end + fun add' (x, m) = add (m, x) + + fun addList (s, []) = s + | addList (s, x::r) = addList(add(s, x), r) + + (* Remove an item. Raises LibBase.NotFound if not found. *) + local + datatype 'a zipper + = TOP + | LEFT of (color * 'a obj * 'a tree * 'a zipper) + | RIGHT of (color * 'a tree * 'a obj * 'a zipper) + in + fun delete (SET(nItems, t), k) = let + (* zip the zipper *) + fun zip (TOP, t) = t + | zip (LEFT(color, x, b, p), a) = zip(p, T(color, a, x, b)) + | zip (RIGHT(color, a, x, p), b) = zip(p, T(color, a, x, b)) + (* zip the zipper while resolving a black deficit *) + fun fixupZip (TOP, t) = (true, t) + (* case 1 from CLR *) + | fixupZip (LEFT(B, x, T(R, a, y, b), p), t) = (case a + of T(_, T(R, a11, w, a12), z, a2) => (* case 1L ==> case 3L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, x, a11), w, T(B, a12, z, a2)), y, b))) + | T(_, a1, z, T(R, a21, w, t22)) => (* case 1L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, x, a1), z, T(B, a21, w, t22)), y, b))) + | T(_, a1, z, a2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, T(B, t, x, T(R, a1, z, a2)), y, b))) + | _ => fixupZip (LEFT(R, x, a, LEFT(B, y, b, p)), t) + (* end case *)) + | fixupZip (RIGHT(B, T(R, a, x, b), y, p), t) = (case b + of T(_, b1, z, T(R, b21, w, b22)) => (* case 1R ==> case 3R ==> case 4R *) + (false, zip (p, T(B, a, x, T(R, T(B, b1, z, b21), w, T(B, b22, y, t))))) + | T(_, T(R, b11, w, b12), z, b2) => (* case 1R ==> case 4R *) + (false, zip (p, T(B, a, x, T(R, T(B, b11, w, b12), z, T(B, b2, y, t))))) + | T(_, b1, z, b2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, a, x, T(B, T(R, b1, z, b2), y, t)))) + | _ => fixupZip (RIGHT(R, b, y, RIGHT(B, a, x, p)), t) + (* end case *)) + (* case 3 from CLR *) + | fixupZip (LEFT(color, x, T(B, T(R, a1, y, a2), z, b), p), t) = + (* case 3L ==> case 4L *) + (false, zip (p, T(color, T(B, t, x, a1), y, T(B, a2, z, b)))) + | fixupZip (RIGHT(color, T(B, a, x, T(R, b1, y, b2)), z, p), t) = + (* case 3R ==> case 4R; rotate, recolor, plus rotate fixes deficit *) + (false, zip (p, T(color, T(B, a, x, b1), y, T(B, b2, z, t)))) + (* case 4 from CLR *) + | fixupZip (LEFT(color, x, T(B, a, y, T(R, b1, z, b2)), p), t) = + (false, zip (p, T(color, T(B, t, x, a), y, T(B, b1, z, b2)))) + | fixupZip (RIGHT(color, T(B, T(R, a1, z, a2), x, b), y, p), t) = + (false, zip (p, T(color, T(B, a1, z, a2), x, T(B, b, y, t)))) + (* case 2 from CLR; note that "a" and "b" are guaranteed to be black, since we did + * not match cases 3 or 4. + *) + | fixupZip (LEFT(R, x, T(B, a, y, b), p), t) = + (false, zip (p, T(B, t, x, T(R, a, y, b)))) + | fixupZip (LEFT(B, x, T(B, a, y, b), p), t) = + fixupZip (p, T(B, t, x, T(R, a, y, b))) + | fixupZip (RIGHT(R, T(B, a, x, b), y, p), t) = + (false, zip (p, T(B, T(R, a, x, b), y, t))) + | fixupZip (RIGHT(B, T(B, a, x, b), y, p), t) = + fixupZip (p, T(B, T(R, a, x, b), y, t)) + (* push deficit up the tree by recoloring a black node as red *) + | fixupZip (LEFT(_, y, E, p), t) = fixupZip (p, T(R, t, y, E)) + | fixupZip (RIGHT(_, E, y, p), t) = fixupZip (p, T(R, E, y, t)) + (* impossible cases that violate the red invariant *) + | fixupZip _ = raise Fail "Red invariant violation" + (* delete the minimum value from a non-empty tree, returning a triple + * (elem, bd, tr), where elem is the minimum element, tr is the residual + * tree with elem removed, and bd is true if tr has a black-depth that is + * less than the original tree. + *) + fun delMin (T(R, E, y, b), p) = + (* replace the node by its right subtree (which must be E) *) + (y, false, zip(p, b)) + | delMin (T(B, E, y, T(R, a', y', b')), p) = + (* replace the node with its right child, while recoloring the child black to + * preserve the black invariant. + *) + (y, false, zip (p, T(B, a', y', b'))) + | delMin (T(B, E, y, E), p) = let + (* delete the node, which reduces the black-depth by one, so we attempt to fix + * the deficit on the path back. + *) + val (blkDeficit, t) = fixupZip (p, E) + in + (y, blkDeficit, t) + end + | delMin (T(color, a, y, b), z) = delMin(a, LEFT(color, y, b, z)) + | delMin (E, _) = raise Match + fun del (E, z) = raise LibBase.NotFound + | del (T(color, a, y, b), p) = (case cmpObj(k, y) + of LESS => del (a, LEFT(color, y, b, p)) + | EQUAL => (case (color, a, b) + of (R, E, E) => zip(p, E) + | (B, E, E) => #2 (fixupZip (p, E)) + | (_, T(_, a', y', b'), E) => + (* node is black and left child is red; we replace the node with its + * left child recolored to black. + *) + zip(p, T(B, a', y', b')) + | (_, E, T(_, a', y', b')) => + (* node is black and right child is red; we replace the node with its + * right child recolored to black. + *) + zip(p, T(B, a', y', b')) + | _ => let + val (minSucc, blkDeficit, b) = delMin (b, TOP) + in + if blkDeficit + then #2 (fixupZip (RIGHT(color, a, minSucc, p), b)) + else zip (p, T(color, a, minSucc, b)) + end + (* end case *)) + | GREATER => del (b, RIGHT(color, a, y, p)) + (* end case *)) + in + case del(t, TOP) + of T(R, a, x, b) => SET(nItems-1, T(B, a, x, b)) + | t => SET(nItems-1, t) + (* end case *) + end + end (* local *) + + (* Return true if and only if item is an element in the set *) + fun member (SET(_, t), k) = let + fun find' E = false + | find' (T(_, a, y, b)) = (case cmpObj(k, y) + of LESS => find' a + | EQUAL => true + | GREATER => find' b + (* end case *)) + in + find' t + end + + (* Return the number of items in the map *) + fun numItems (SET(n, _)) = n + + fun fold f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, x, b), accum) = + foldf(b, f(x, foldf(a, accum))) + in + fn init => fn (SET(_, m)) => foldf(m, init) + end + + val foldl = fold (* DEPRECATED *) + val foldr = fold (* DEPRECATED *) + + (* return an ordered list of the items in the set. *) + fun toList s = foldr (fn (x, l) => x::l) [] s + + (* functions for walking the tree while keeping a stack of parents + * to be visited. + *) + fun next ((t as T(_, _, _, b))::rest) = (t, left(b, rest)) + | next _ = (E, []) + and left (E, rest) = rest + | left (t as T(_, a, _, _), rest) = left(a, t::rest) + fun start m = left(m, []) + + (* Return true if and only if the two sets are equal *) + fun equal (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => true + | ((E, _), _) => false + | (_, (E, _)) => false + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case cmpObj(x, y) + of EQUAL => cmp (r1, r2) + | _ => false + (* end case *)) + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return the lexical order of two sets *) + fun compare (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => EQUAL + | ((E, _), _) => LESS + | (_, (E, _)) => GREATER + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case cmpObj(x, y) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return true if and only if the first set is a subset of the second *) + fun isSubset (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => true + | ((E, _), _) => true + | (_, (E, _)) => false + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case cmpObj(x, y) + of LESS => false + | EQUAL => cmp (r1, r2) + | GREATER => cmp (t1, r2) + (* end case *)) + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return true if the two sets are disjoint *) + fun disjoint (SET(0, _), _) = true + | disjoint (_, SET(0, _)) = true + | disjoint (SET(_, s1), SET(_, s2)) = let + fun walk ((E, _), _) = true + | walk (_, (E, _)) = true + | walk (t1 as (T(_, _, x, _), r1), t2 as (T(_, _, y, _), r2)) = ( + case cmpObj(x, y) + of LESS => walk (next r1, t2) + | EQUAL => false + | GREATER => walk (t1, next r2) + (* end case *)) + in + walk (next (start s1), next (start s2)) + end + + (* support for constructing red-black trees in linear time from increasing + * ordered sequences (based on a description by R. Hinze). Note that the + * elements in the digits are ordered with the largest on the left, whereas + * the elements of the trees are ordered with the largest on the right. + *) + datatype 'a digit + = ZERO + | ONE of ('a obj * 'a tree * 'a digit) + | TWO of ('a obj * 'a tree * 'a obj * 'a tree * 'a digit) + (* add an item that is guaranteed to be larger than any in l *) + fun addItem (a, l) = let + fun incr (a, t, ZERO) = ONE(a, t, ZERO) + | incr (a1, t1, ONE(a2, t2, r)) = TWO(a1, t1, a2, t2, r) + | incr (a1, t1, TWO(a2, t2, a3, t3, r)) = + ONE(a1, t1, incr(a2, T(B, t3, a3, t2), r)) + in + incr(a, E, l) + end + (* link the digits into a tree *) + fun linkAll t = let + fun link (t, ZERO) = t + | link (t1, ONE(a, t2, r)) = link(T(B, t2, a, t1), r) + | link (t, TWO(a1, t1, a2, t2, r)) = + link(T(B, T(R, t2, a2, t1), a1, t), r) + in + link (E, t) + end + + (* create a set from a list of items; this function works in linear time if the list + * is in increasing order. + *) + fun fromList [] = empty + | fromList (first::rest) = let + fun add (prev, x::xs, n, accum) = (case cmpObj(prev, x) + of LESS => add(x, xs, n+1, addItem(x, accum)) + | _ => (* list not in order, so fall back to addList code *) + addList(SET(n, linkAll accum), x::xs) + (* end case *)) + | add (_, [], n, accum) = SET(n, linkAll accum) + in + add (first, rest, 1, addItem(first, ZERO)) + end + + (* return the union of the two sets *) + fun union (SET(_, s1), SET(_, s2)) = let + fun ins ((E, _), n, result) = (n, result) + | ins ((T(_, _, x, _), r), n, result) = + ins(next r, n+1, addItem(x, result)) + fun union' (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), t2) => ins(t2, n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case cmpObj(x, y) + of LESS => union' (r1, t2, n+1, addItem(x, result)) + | EQUAL => union' (r1, r2, n+1, addItem(x, result)) + | GREATER => union' (t1, r2, n+1, addItem(y, result)) + (* end case *)) + (* end case *)) + val (n, result) = union' (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + (* return the intersection of the two sets *) + fun intersection (SET(_, s1), SET(_, s2)) = let + fun intersect (t1, t2, n, result) = (case (next t1, next t2) + of ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case cmpObj(x, y) + of LESS => intersect (r1, t2, n, result) + | EQUAL => intersect (r1, r2, n+1, addItem(x, result)) + | GREATER => intersect (t1, r2, n, result) + (* end case *)) + | _ => (n, result) + (* end case *)) + val (n, result) = intersect (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + (* return the set difference *) + fun difference (SET(_, s1), SET(_, s2)) = let + fun ins ((E, _), n, result) = (n, result) + | ins ((T(_, _, x, _), r), n, result) = + ins(next r, n+1, addItem(x, result)) + fun diff (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), _) => (n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case cmpObj(x, y) + of LESS => diff (r1, t2, n+1, addItem(x, result)) + | EQUAL => diff (r1, r2, n, result) + | GREATER => diff (t1, r2, n, result) + (* end case *)) + (* end case *)) + val (n, result) = diff (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + fun subtract (s, item) = difference (s, singleton item) + fun subtract' (item, s) = subtract (s, item) + + fun subtractList (l, items) = let + val items' = List.foldl (fn (x, set) => add(set, x)) (SET(0, E)) items + in + difference (l, items') + end + + fun app f = let + fun appf E = () + | appf (T(_, a, x, b)) = (appf a; f x; appf b) + in + fn (SET(_, m)) => appf m + end + + fun map f = let + fun addf (x, m) = add(m, f x) + in + foldl addf empty + end + + fun mapPartial f (SET(_, m)) = let + fun mapf (E, acc) = acc + | mapf (T(_, a, x, b), acc) = (case f x + of SOME y => mapf (b, mapf (a, add (acc, y))) + | NONE => mapf (b, mapf (a, acc)) + (* end case *)) + in + mapf (m, empty) + end + + (* Filter out those elements of the set that do not satisfy the + * predicate. The filtering is done in increasing map order. + *) + fun filter pred (SET(_, t)) = let + fun walk (E, n, result) = (n, result) + | walk (T(_, a, x, b), n, result) = let + val (n, result) = walk(a, n, result) + in + if (pred x) + then walk(b, n+1, addItem(x, result)) + else walk(b, n, result) + end + val (n, result) = walk (t, 0, ZERO) + in + SET(n, linkAll result) + end + + fun partition pred (SET(_, t)) = let + fun walk (E, n1, result1, n2, result2) = (n1, result1, n2, result2) + | walk (T(_, a, x, b), n1, result1, n2, result2) = let + val (n1, result1, n2, result2) = walk(a, n1, result1, n2, result2) + in + if (pred x) + then walk(b, n1+1, addItem(x, result1), n2, result2) + else walk(b, n1, result1, n2+1, addItem(x, result2)) + end + val (n1, result1, n2, result2) = walk (t, 0, ZERO, 0, ZERO) + in + (SET(n1, linkAll result1), SET(n2, linkAll result2)) + end + + fun exists pred = let + fun test E = false + | test (T(_, a, x, b)) = test a orelse pred x orelse test b + in + fn (SET(_, t)) => test t + end + + fun all pred = let + fun test E = true + | test (T(_, a, x, b)) = test a andalso pred x andalso test b + in + fn (SET(_, t)) => test t + end + + fun find pred = let + fun test E = NONE + | test (T(_, a, x, b)) = (case test a + of NONE => if pred x then SOME x else test b + | someItem => someItem + (* end case *)) + in + fn (SET(_, t)) => test t + end + + (* deprecated *) + val listItems = toList + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,76 @@ +(* hash-cons-sig.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * TODO: better support for nodes that mix lists and non-lists as args. + * (perhaps a hashed-cons list rep)? + *) + +signature HASH_CONS = + sig + + (* hash table for consing *) + type 'a tbl + + (* create a new hash-cons table using the given equality function *) + val new : {eq : 'a * 'a -> bool} -> 'a tbl + + (* clear a table of all elements *) + val clear : 'a tbl -> unit + + (* a hashed-cons object *) + type 'a obj = { + nd : 'a, (* the underlying representation *) + tag : word, (* a tag that is unique for the object (for the object's table) *) + hash : word (* a hash of the object (used to index the table) *) + } + + (* projections *) + val node : 'a obj -> 'a + val tag : 'a obj -> word + + (* comparisons *) + val same : ('a obj * 'a obj) -> bool + val compare : ('a obj * 'a obj) -> order + + (* constructors for nodes formed from tuples of children *) + val cons0 : 'a tbl -> (word * 'a) -> 'a obj + val cons1 : 'a tbl -> (word * ('b obj -> 'a)) + -> 'b obj -> 'a obj + val cons2 : 'a tbl -> (word * ('b obj * 'c obj -> 'a)) + -> 'b obj * 'c obj -> 'a obj + val cons3 : 'a tbl -> (word * ('b obj * 'c obj * 'd obj -> 'a)) + -> 'b obj * 'c obj * 'd obj -> 'a obj + val cons4 : 'a tbl -> (word * ('b obj * 'c obj * 'd obj * 'e obj -> 'a)) + -> 'b obj * 'c obj * 'd obj * 'e obj -> 'a obj + val cons5 : 'a tbl -> (word * ('b obj * 'c obj * 'd obj * 'e obj * 'f obj -> 'a)) + -> 'b obj * 'c obj * 'd obj * 'e obj * 'f obj -> 'a obj + + (* constructor for nodes formed from a list of children *) + val consList : 'a tbl -> (word * ('b obj list -> 'a)) -> 'b obj list -> 'a obj + + (* constructors for nodes formed from records of children; the arguments include + * a node constructor from a tuple of children and a projection from the record + * type to a tuple type. + *) + val consR1 : 'a tbl -> (word * ('b obj -> 'a) * ('r -> 'b obj)) + -> 'r -> 'a obj + val consR2 : 'a tbl + -> (word * ('b obj * 'c obj -> 'a) * ('r -> 'b obj * 'c obj)) + -> 'r -> 'a obj + val consR3 : 'a tbl + -> (word * ('b obj * 'c obj * 'd obj -> 'a) + * ('r -> 'b obj * 'c obj * 'd obj)) + -> 'r -> 'a obj + val consR4 : 'a tbl + -> (word * ('b obj * 'c obj * 'd obj * 'e obj -> 'a) + * ('r -> 'b obj * 'c obj * 'd obj * 'e obj)) + -> 'r -> 'a obj + val consR5 : 'a tbl + -> (word * ('b obj * 'c obj * 'd obj * 'e obj * 'f obj -> 'a) + * ('r -> 'b obj * 'c obj * 'd obj * 'e obj * 'f obj)) + -> 'r -> 'a obj + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,91 @@ +(* hash-cons.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure HashCons :> HASH_CONS = + struct + + type 'a obj = {nd : 'a, tag : word, hash : word} + + datatype 'a tbl = Tbl of { + eq : 'a * 'a -> bool, + nextTag : word ref, + tbl : 'a obj list Array.array ref + } + + val tblSz = PrimeSizes.pick 64 + + fun new {eq} = Tbl{ + eq = eq, + nextTag = ref 0w0, + tbl = ref(Array.array(tblSz, [])) + } + + fun clear (Tbl{nextTag, tbl, ...}) = ( + nextTag := 0w0; + Array.modify (fn _ => []) (!tbl)) + + fun insert (Tbl{eq, nextTag, tbl}, h, term) = let + val tbl' = !tbl + val i = Word.toIntX(Word.mod(h, Word.fromInt(Array.length tbl'))) + val bucket = Array.sub(tbl', i) + fun find [] = let + val id = !nextTag + val obj = {nd = term, hash = h, tag = id} + in + nextTag := id + 0w1; + Array.update(tbl', i, obj::bucket); +(* check for table resize *) + obj + end + | find ((obj as {nd, hash, ...})::r) = + if (h = hash) andalso eq(term, nd) + then obj + else find r + in + find bucket + end + + fun node {nd, tag, hash} = nd + fun tag {nd, tag, hash} = tag + + fun same (a : 'a obj, b : 'a obj) = (#tag a = #tag b) + fun compare (a : 'a obj, b : 'a obj) = Word.compare(#tag a, #tag b) + + fun <+ (a, b) = Word.<<(a, 0w1) + b + infix <+ + + fun cons0 tbl (id, c) = insert (tbl, id, c) + + fun cons1 tbl (id, cf) (b : 'b obj) = + insert (tbl, id <+ (#tag b), cf b) + + fun cons2 tbl (id, cf) (b : 'b obj, c : 'c obj) = + insert (tbl, id <+ (#tag b) <+ (#tag c), cf(b, c)) + + fun cons3 tbl (id, cf) (b : 'b obj, c : 'c obj, d : 'd obj) = + insert (tbl, id <+ (#tag b) <+ (#tag c) <+ (#tag d), cf(b, c, d)) + + fun cons4 tbl (id, cf) (b : 'b obj, c : 'c obj, d : 'd obj, e : 'e obj) = + insert (tbl, id <+ (#tag b) <+ (#tag c) <+ (#tag d) <+ (#tag e), + cf(b, c, d, e)) + + fun cons5 tbl (id, cf) + (b : 'b obj, c : 'c obj, d : 'd obj, e : 'e obj, f : 'f obj) = + insert (tbl, + id <+ (#tag b) <+ (#tag c) <+ (#tag d) <+ (#tag e) <+ (#tag f), + cf(b, c, d, e, f)) + + fun consList tbl (id, cf) (l : 'b obj list) = + insert (tbl, List.foldl (fn ({tag, ...}, sum) => sum <+ tag) id l, cf l) + + (* consing for records *) + fun consR1 tbl (id, inj, prj) r = cons1 tbl (id, inj) (prj r) + fun consR2 tbl (id, inj, prj) r = cons2 tbl (id, inj) (prj r) + fun consR3 tbl (id, inj, prj) r = cons3 tbl (id, inj) (prj r) + fun consR4 tbl (id, inj, prj) r = cons4 tbl (id, inj) (prj r) + fun consR5 tbl (id, inj, prj) r = cons5 tbl (id, inj) (prj r) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-string.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-string.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-string.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/hash-cons-string.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,12 @@ +(* hash-cons-string.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure HashConsString = HashConsGroundFn ( + struct + type hash_key = string + val sameKey = (op = : string * string -> bool) + val hashVal = HashString.hashString + end) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HashCons/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HashCons/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,45 @@ +This directory contains a library supporting the implementation of +hash-consing of data structures. + +To use this library, you need to use a two-level definition of your +data structures. For example, we might define a hash-cons representation +of lambda terms as follows: + + structure HC = HashCons + type var = HashConsString.obj + datatype term_node + = VAR of var + | LAM of (var * term) + | APP of (term * term) + withtype term = term_node HC.obj + +And you need to define an equality function on your terms (this function +can use the hash-cons identity on subterms). For example, here is the +code for our lambda terms: + + fun eq (APP(t11, t12), APP(t21, t22)) = + HC.same(t11, t21) andalso HC.same(t12, t22) + | eq (LAM(x, t1), LAM(y, t2)) = HC.same(x, y) andalso HC.same(t1, t2) + | eq (VAR x, VAR y) = HC.same(x, y) + | eq _ = false + +With the equality function, we can create a hash-cons table: + + val tbl = HC.new {eq = eq} + +And then we can then define constructor functions: + + val mkAPP = HC.cons2 tbl (0wx1, APP) + val mkLAM = HC.cons2 tbl (0wx3, LAM) + val mkVAR = HC.cons1 tbl (0wx7, VAR) + val var = HW.mk + +Note that we pick successive prime numbers for the constructor hash codes. +Using these constructors, we can construct the representation of the +identity function (\x.x) as follows: + + mkLAM(var "x", mkVAR(var "x")) + +In addition to term construction, this library also supports finite sets +and maps using the unique hash-cons codes as keys. + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/check-html-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/check-html-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/check-html-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/check-html-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,207 @@ +(* check-html-fn.sml + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * This implements a tree walk over an HTML file to check for + * errors, such as violations of exclusions. + *) + +functor CheckHTMLFn (Err : HTML_ERROR) : sig + + type context = {file : string option, line : int} + + val check : context -> HTML.html -> unit + + end = struct + + type context = Err.context + + fun check context (HTML.HTML{body=HTML.BODY{content, ...}, ...}) = let + fun error (elem, ctx) = + Err.syntaxError context + (Format.format "unexpected %s element in %s" [ + Format.STR elem, Format.STR ctx + ]) + fun contentError ctx = + Err.syntaxError context + (Format.format "unexpected element in %s" [Format.STR ctx]) + fun formError elem = + Err.syntaxError context + (Format.format "unexpected %s element not in FORM" [ + Format.STR elem + ]) + fun attrError attr = Err.missingAttr context attr + fun checkBodyContent {inForm} b = (case b + of (HTML.Hn{n, align, content}) => checkText { + inAnchor=false, inForm=inForm, inPre=false, inApplet=false + } content + | (HTML.ADDRESS block) => checkAddress {inForm=inForm} block + | (HTML.BlockList bl) => + List.app (checkBodyContent {inForm=inForm}) bl + | block => checkBlock {inForm=inForm} block + (* end case *)) + and checkAddress {inForm} blk = (case blk + of (HTML.BlockList bl) => + List.app (checkAddress {inForm=inForm}) bl + | (HTML.TextBlock txt) => checkText { + inAnchor=false, inForm=inForm, inPre=false, inApplet = false + } txt + | (HTML.P{content, ...}) => checkText { + inAnchor=false, inForm=inForm, inPre=false, inApplet = false + } content + | _ => contentError "ADDRESS" + (* end case *)) + and checkBlock {inForm} blk = (case blk + of (HTML.BlockList bl) => + List.app (checkBlock {inForm=inForm}) bl + | (HTML.TextBlock txt) => checkText { + inAnchor=false, inForm=inForm, inPre=false, inApplet = false + } txt + | (HTML.P{content, ...}) => checkText { + inAnchor=false, inForm=inForm, inPre=false, inApplet = false + } content + | (HTML.UL{content, ...}) => + checkItems {inForm=inForm, inDirOrMenu=false} content + | (HTML.OL{content, ...}) => + checkItems {inForm=inForm, inDirOrMenu=false} content + | (HTML.DIR{content, ...}) => + checkItems {inForm=inForm, inDirOrMenu=true} content + | (HTML.MENU{content, ...}) => + checkItems {inForm=inForm, inDirOrMenu=true} content + | (HTML.DL{content, ...}) => + checkDLItems {inForm=inForm} content + | (HTML.PRE{content, ...}) => checkText { + inAnchor=false, inForm=inForm, inPre=true, inApplet = false + } content + | (HTML.DIV{content, ...}) => + checkBodyContent {inForm=inForm} content + | (HTML.CENTER content) => + checkBodyContent {inForm=inForm} content + | (HTML.BLOCKQUOTE content) => + checkBodyContent {inForm=inForm} content + | (HTML.FORM{content, ...}) => ( + if inForm then error("FORM", "FORM") else (); + checkBodyContent {inForm=true} content) + | (HTML.ISINDEX _) => () + | (HTML.HR _) => () + | (HTML.TABLE{ + caption=SOME(HTML.CAPTION{content=caption, ...}), + content, ... + }) => ( + checkText { + inAnchor=false, inForm=inForm, inPre=false, + inApplet = false + } caption; + checkRows {inForm=inForm} content) + | (HTML.TABLE{content, ...}) => checkRows {inForm=inForm} content + | (HTML.Hn _) => error ("Hn", "block") + | (HTML.ADDRESS _) => error ("ADDRESS", "block") + (* end case *)) + and checkItems {inForm, inDirOrMenu} items = let + fun chkBlk (HTML.BlockList bl) = List.app chkBlk bl + | chkBlk (HTML.TextBlock txt) = () + | chkBlk (HTML.P _) = () + | chkBlk _ = error ("block", "DIR/MENU") + val chk = if inDirOrMenu + then (fn (HTML.LI{content, ...}) => ( + chkBlk content; checkBlock {inForm=inForm} content)) + else (fn (HTML.LI{content, ...}) => ( + checkBlock {inForm=inForm} content)) + in + List.app chk items + end + and checkDLItems {inForm} items = let + fun chk {dt, dd} = ( + List.app + (checkText { + inAnchor=false, inForm=inForm, inPre=false, inApplet=false + }) + dt; + checkBlock {inForm=inForm} dd) + in + List.app chk items + end + and checkRows {inForm} rows = let + fun chkCell (HTML.TH{content, ...}) = + checkBodyContent {inForm=inForm} content + | chkCell (HTML.TD{content, ...}) = + checkBodyContent {inForm=inForm} content + fun chkRow (HTML.TR{content, ...}) = List.app chkCell content + in + List.app chkRow rows + end + and checkText {inAnchor, inForm, inPre, inApplet} = let + fun chk txt = (case txt + of (HTML.TextList tl) => List.app chk tl + | (HTML.PCDATA _) => () + | (HTML.TT txt) => chk txt + | (HTML.I txt) => chk txt + | (HTML.B txt) => chk txt + | (HTML.U txt) => chk txt + | (HTML.STRIKE txt) => chk txt + | (HTML.BIG txt) => ( + if inPre then error("BIG", "PRE") else (); + chk txt) + | (HTML.SMALL txt) => ( + if inPre then error("SMALL", "PRE") else (); + chk txt) + | (HTML.SUB txt) => ( + if inPre then error("SUB", "PRE") else (); + chk txt) + | (HTML.SUP txt) => ( + if inPre then error("SUP", "PRE") else (); + chk txt) + | (HTML.EM txt) => chk txt + | (HTML.STRONG txt) => chk txt + | (HTML.DFN txt) => chk txt + | (HTML.CODE txt) => chk txt + | (HTML.SAMP txt) => chk txt + | (HTML.KBD txt) => chk txt + | (HTML.VAR txt) => chk txt + | (HTML.CITE txt) => chk txt + | (HTML.A{content, ...}) => ( + if (inAnchor) then error("anchor", "anchor") else (); + checkText { + inAnchor=true, inForm=inForm, inPre=inPre, + inApplet=inApplet + } content) + | (HTML.IMG _) => + if inPre then error("IMG", "PRE") else () + | (HTML.APPLET{content, ...}) => checkText { + inAnchor=false, inForm=inForm, inPre=inPre, + inApplet=true + } content + | (HTML.PARAM _) => + if inApplet then error ("param", "applet") else () + | (HTML.FONT{content, ...}) => + if inPre then error("FONT", "PRE") else () + | (HTML.BASEFONT{content, ...}) => + if inPre then error("BASEFONT", "PRE") else () + | (HTML.BR _) => () + | (HTML.MAP _) => () + | (HTML.INPUT{ty, name, value, ...}) => ( + if (not inForm) then formError "INPUT" else (); + if ((name = NONE) + andalso (ty <> SOME(HTML.InputType.submit)) + andalso (ty <> SOME(HTML.InputType.reset))) + then attrError "NAME" + else (); + if ((value = NONE) + andalso ((ty = SOME(HTML.InputType.radio)) + orelse (ty = SOME(HTML.InputType.checkbox)))) + then attrError "VALUE" + else ()) + | (HTML.SELECT _) => + if (not inForm) then formError "SELECT" else () + | (HTML.TEXTAREA _) => + if (not inForm) then formError "TEXTAREA" else () + | (HTML.SCRIPT _) => () + (* end case *)) + in + chk + end + in + checkBodyContent {inForm=false} content + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/.cvsignore mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/.cvsignore --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/.cvsignore 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/.cvsignore 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,4 @@ +html-lex.sml +html-gram.sml +html-gram.sig +html-gram.desc diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/HTML32.dtd mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/HTML32.dtd --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/HTML32.dtd 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/HTML32.dtd 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,597 @@ +<!-- + W3C Document Type Definition for the HyperText Markup Language + version 3.2 as ratified by a vote of W3C member companies. + For more information on W3C look at URL http://www.w3.org/ + + Date: Tuesday January 14th 1997 + + Author: Dave Raggett <dsr@w3.org> + + HTML 3.2 aims to capture recommended practice as of early '96 + and as such to be used as a replacement for HTML 2.0 (RFC 1866). + Widely deployed rendering attributes are included where they + have been shown to be interoperable. SCRIPT and STYLE are + included to smooth the introduction of client-side scripts + and style sheets. Browsers must avoid showing the contents + of these element Otherwise support for them is not required. + ID, CLASS and STYLE attributes are not included in this version + of HTML. +--> + +<!ENTITY % HTML.Version + "-//W3C//DTD HTML 3.2 Final//EN" + + -- Typical usage: + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> + <html> + ... + </html> + -- + > + +<!--================== Deprecated Features Switch =========================--> + +<!ENTITY % HTML.Deprecated "INCLUDE"> + +<!--================== Imported Names =====================================--> + +<!ENTITY % Content-Type "CDATA" + -- meaning a MIME content type, as per RFC1521 + --> + +<!ENTITY % HTTP-Method "GET | POST" + -- as per HTTP specification + --> + +<!ENTITY % URL "CDATA" + -- The term URL means a CDATA attribute + whose value is a Uniform Resource Locator, + See RFC1808 (June 95) and RFC1738 (Dec 94). + --> + +<!-- Parameter Entities --> + +<!ENTITY % head.misc "SCRIPT|STYLE|META|LINK" -- repeatable head elements --> + +<!ENTITY % heading "H1|H2|H3|H4|H5|H6"> + +<!ENTITY % list "UL | OL | DIR | MENU"> + +<![ %HTML.Deprecated [ + <!ENTITY % preformatted "PRE | XMP | LISTING"> +]]> + +<!ENTITY % preformatted "PRE"> + +<!--================ Character mnemonic entities ==========================--> + +<!ENTITY % ISOlat1 PUBLIC + "ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML"> +%ISOlat1; + +<!--================ Entities for special symbols =========================--> +<!-- &trade and &cbsp are not widely deployed and so not included here --> + +<!ENTITY amp CDATA "&" -- ampersand --> +<!ENTITY gt CDATA ">" -- greater than --> +<!ENTITY lt CDATA "<" -- less than --> + +<!--=================== Text Markup =======================================--> + +<!ENTITY % font "TT | I | B | U | STRIKE | BIG | SMALL | SUB | SUP"> + +<!ENTITY % phrase "EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE"> + +<!ENTITY % special "A | IMG | APPLET | FONT | BASEFONT | BR | SCRIPT | MAP"> + +<!ENTITY % form "INPUT | SELECT | TEXTAREA"> + +<!ENTITY % text "#PCDATA | %font | %phrase | %special | %form"> + +<!ELEMENT (%font|%phrase) - - (%text)*> + +<!-- there are also 16 widely known color names although + the resulting colors are implementation dependent: + + aqua, black, blue, fuchsia, gray, green, lime, maroon, + navy, olive, purple, red, silver, teal, white, and yellow + + These colors were originally picked as being the standard + 16 colors supported with the Windows VGA palette. + --> + +<!ELEMENT FONT - - (%text)* -- local change to font --> +<!ATTLIST FONT + size CDATA #IMPLIED -- [+]nn e.g. size="+1", size=4 -- + color CDATA #IMPLIED -- #RRGGBB in hex, e.g. red: color="#FF0000" -- + > + +<!ELEMENT BASEFONT - O EMPTY -- base font size (1 to 7)--> +<!ATTLIST BASEFONT + size CDATA #IMPLIED -- e.g. size=3 -- + > + +<!ELEMENT BR - O EMPTY -- forced line break --> +<!ATTLIST BR + clear (left|all|right|none) none -- control of text flow -- + > + +<!--================== HTML content models ================================--> +<!-- + HTML has three basic content models: + + %text character level elements and text strings + %flow block-like elements e.g. paragraphs and lists + %bodytext as %flow plus headers H1-H6 and ADDRESS +--> + +<!ENTITY % block + "P | %list | %preformatted | DL | DIV | CENTER | + BLOCKQUOTE | FORM | ISINDEX | HR | TABLE"> + +<!-- %flow is used for DD and LI --> + +<!ENTITY % flow "(%text | %block)*"> + +<!--=================== Document Body =====================================--> + +<!ENTITY % body.content "(%heading | %text | %block | ADDRESS)*"> + +<!ENTITY % color "CDATA" -- a color specification: #HHHHHH @@ details? --> + +<!ENTITY % body-color-attrs " + bgcolor %color #IMPLIED + text %color #IMPLIED + link %color #IMPLIED + vlink %color #IMPLIED + alink %color #IMPLIED + "> + +<!ELEMENT BODY O O %body.content> +<!ATTLIST BODY + background %URL #IMPLIED -- texture tile for document background -- + %body-color-attrs; -- bgcolor, text, link, vlink, alink -- + > + +<!ENTITY % address.content "((%text;) | P)*"> + +<!ELEMENT ADDRESS - - %address.content> + +<!ELEMENT DIV - - %body.content> +<!ATTLIST DIV + align (left|center|right) #IMPLIED -- alignment of following text -- + > + +<!-- CENTER is a shorthand for DIV with ALIGN=CENTER --> +<!ELEMENT center - - %body.content> + +<!--================== The Anchor Element =================================--> + +<!ELEMENT A - - (%text)* -(A)> +<!ATTLIST A + name CDATA #IMPLIED -- named link end -- + href %URL #IMPLIED -- URL for linked resource -- + rel CDATA #IMPLIED -- forward link types -- + rev CDATA #IMPLIED -- reverse link types -- + title CDATA #IMPLIED -- advisory title string -- + > + +<!--================== Client-side image maps ============================--> + +<!-- These can be placed in the same document or grouped in a + separate document although this isn't yet widely supported --> + +<!ENTITY % SHAPE "(rect|circle|poly)"> +<!ENTITY % COORDS "CDATA" -- comma separated list of numbers --> + +<!ELEMENT MAP - - (AREA)*> +<!ATTLIST MAP + name CDATA #IMPLIED + > + +<!ELEMENT AREA - O EMPTY> +<!ATTLIST AREA + shape %SHAPE rect + coords %COORDS #IMPLIED -- defines coordinates for shape -- + href %URL #IMPLIED -- this region acts as hypertext link -- + nohref (nohref) #IMPLIED -- this region has no action -- + alt CDATA #REQUIRED -- needed for non-graphical user agents -- + > + +<!--================== The LINK Element ==================================--> + +<!ENTITY % Types "CDATA" + -- See Internet Draft: draft-ietf-html-relrev-00.txt + LINK has been part of HTML since the early days + although few browsers as yet take advantage of it. + + Relationship values can be used in principle: + + a) for document specific toolbars/menus when used + with the LINK element in the document head: + b) to link to a separate style sheet + c) to make a link to a script + d) by stylesheets to control how collections of + html nodes are rendered into printed documents + e) to make a link to a printable version of this document + e.g. a postscript or pdf version +--> + +<!ELEMENT LINK - O EMPTY> +<!ATTLIST LINK + href %URL #IMPLIED -- URL for linked resource -- + rel %Types #IMPLIED -- forward link types -- + rev %Types #IMPLIED -- reverse link types -- + title CDATA #IMPLIED -- advisory title string -- + > + +<!--=================== Images ============================================--> + +<!ENTITY % Length "CDATA" -- nn for pixels or nn% for percentage length --> +<!ENTITY % Pixels "NUMBER" -- integer representing length in pixels --> + +<!-- Suggested widths are used for negotiating image size + with the module responsible for painting the image. + align=left or right cause image to float to margin + and for subsequent text to wrap around image --> + +<!ENTITY % IAlign "(top|middle|bottom|left|right)"> + +<!ELEMENT IMG - O EMPTY -- Embedded image --> +<!ATTLIST IMG + src %URL #REQUIRED -- URL of image to embed -- + alt CDATA #IMPLIED -- for display in place of image -- + align %IAlign #IMPLIED -- vertical or horizontal alignment -- + height %Pixels #IMPLIED -- suggested height in pixels -- + width %Pixels #IMPLIED -- suggested width in pixels -- + border %Pixels #IMPLIED -- suggested link border width -- + hspace %Pixels #IMPLIED -- suggested horizontal gutter -- + vspace %Pixels #IMPLIED -- suggested vertical gutter -- + usemap %URL #IMPLIED -- use client-side image map -- + ismap (ismap) #IMPLIED -- use server image map -- + > + +<!-- USEMAP points to a MAP element which may be in this document + or an external document, although the latter is not widely supported --> + +<!--=================== Java APPLET tag ===================================--> +<!-- + This tag is supported by all Java enabled browsers. Applet resources + (including their classes) are normally loaded relative to the document + URL (or <BASE> element if it is defined). The CODEBASE attribute is used + to change this default behavior. If the CODEBASE attribute is defined then + it specifies a different location to find applet resources. The value + can be an absolute URL or a relative URL. The absolute URL is used as is + without modification and is not effected by the documents <BASE> element. + When the codebase attribute is relative, then it is relative to the + document URL (or <BASE> tag if defined). +--> +<!ELEMENT APPLET - - (PARAM | %text)*> +<!ATTLIST APPLET + codebase %URL #IMPLIED -- code base -- + code CDATA #REQUIRED -- class file -- + alt CDATA #IMPLIED -- for display in place of applet -- + name CDATA #IMPLIED -- applet name -- + width %Pixels #REQUIRED -- suggested width in pixels -- + height %Pixels #REQUIRED -- suggested height in pixels -- + align %IAlign #IMPLIED -- vertical or horizontal alignment -- + hspace %Pixels #IMPLIED -- suggested horizontal gutter -- + vspace %Pixels #IMPLIED -- suggested vertical gutter -- + > + +<!ELEMENT PARAM - O EMPTY> +<!ATTLIST PARAM + name NMTOKEN #REQUIRED -- The name of the parameter -- + value CDATA #IMPLIED -- The value of the parameter -- + > + +<!-- +Here is an example: + + <applet codebase="applets/NervousText" + code=NervousText.class + width=300 + height=50> + <param name=text value="Java is Cool!"> + <img src=sorry.gif alt="This looks better with Java support"> + </applet> +--> + +<!--=================== Horizontal Rule ===================================--> + +<!ELEMENT HR - O EMPTY> +<!ATTLIST HR + align (left|right|center) #IMPLIED + noshade (noshade) #IMPLIED + size %Pixels #IMPLIED + width %Length #IMPLIED + > +<!--=================== Paragraphs=========================================--> + +<!ELEMENT P - O (%text)*> +<!ATTLIST P + align (left|center|right) #IMPLIED + > + +<!--=================== Headings ==========================================--> + +<!-- + There are six levels of headers from H1 (the most important) + to H6 (the least important). +--> + +<!ELEMENT ( %heading ) - - (%text;)*> +<!ATTLIST ( %heading ) + align (left|center|right) #IMPLIED + > + +<!--=================== Preformatted Text =================================--> + +<!-- excludes images and changes in font size --> + +<!ENTITY % pre.exclusion "IMG|BIG|SMALL|SUB|SUP|FONT"> + +<!ELEMENT PRE - - (%text)* -(%pre.exclusion)> +<!ATTLIST PRE + width NUMBER #implied -- is this widely supported? -- + > + +<![ %HTML.Deprecated [ + +<!ENTITY % literal "CDATA" + -- historical, non-conforming parsing mode where + the only markup signal is the end tag + in full + --> + +<!ELEMENT (XMP|LISTING) - - %literal> +<!ELEMENT PLAINTEXT - O %literal> + +]]> + +<!--=================== Block-like Quotes =================================--> + +<!ELEMENT BLOCKQUOTE - - %body.content> + +<!--=================== Lists =============================================--> + +<!-- + HTML 3.2 allows you to control the sequence number for ordered lists. + You can set the sequence number with the START and VALUE attributes. + The TYPE attribute may be used to specify the rendering of ordered + and unordered lists. +--> + +<!-- definition lists - DT for term, DD for its definition --> + +<!ELEMENT DL - - (DT|DD)+> +<!ATTLIST DL + compact (compact) #IMPLIED -- more compact style -- + > + +<!ELEMENT DT - O (%text)*> +<!ELEMENT DD - O %flow;> + +<!-- Ordered lists OL, and unordered lists UL --> +<!ELEMENT (OL|UL) - - (LI)+> + +<!-- + Numbering style + 1 arablic numbers 1, 2, 3, ... + a lower alpha a, b, c, ... + A upper alpha A, B, C, ... + i lower roman i, ii, iii, ... + I upper roman I, II, III, ... + + The style is applied to the sequence number which by default + is reset to 1 for the first list item in an ordered list. + + This can't be expressed directly in SGML due to case folding. +--> + +<!ENTITY % OLStyle "CDATA" -- constrained to: [1|a|A|i|I] --> + +<!ATTLIST OL -- ordered lists -- + type %OLStyle #IMPLIED -- numbering style -- + start NUMBER #IMPLIED -- starting sequence number -- + compact (compact) #IMPLIED -- reduced interitem spacing -- + > + +<!-- bullet styles --> + +<!ENTITY % ULStyle "disc|square|circle"> + +<!ATTLIST UL -- unordered lists -- + type (%ULStyle) #IMPLIED -- bullet style -- + compact (compact) #IMPLIED -- reduced interitem spacing -- + > + +<!ELEMENT (DIR|MENU) - - (LI)+ -(%block)> +<!ATTLIST DIR + compact (compact) #IMPLIED + > +<!ATTLIST MENU + compact (compact) #IMPLIED + > + +<!-- <DIR> Directory list --> +<!-- <DIR COMPACT> Compact list style --> +<!-- <MENU> Menu list --> +<!-- <MENU COMPACT> Compact list style --> + +<!-- The type attribute can be used to change the bullet style + in unordered lists and the numbering style in ordered lists --> + +<!ENTITY % LIStyle "CDATA" -- constrained to: "(%ULStyle|%OLStyle)" --> + +<!ELEMENT LI - O %flow -- list item --> +<!ATTLIST LI + type %LIStyle #IMPLIED -- list item style -- + value NUMBER #IMPLIED -- reset sequence number -- + > + +<!--================ Forms ===============================================--> + +<!ELEMENT FORM - - %body.content -(FORM)> +<!ATTLIST FORM + action %URL #IMPLIED -- server-side form handler -- + method (%HTTP-Method) GET -- see HTTP specification -- + enctype %Content-Type; "application/x-www-form-urlencoded" + > + +<!ENTITY % InputType + "(TEXT | PASSWORD | CHECKBOX | RADIO | SUBMIT + | RESET | FILE | HIDDEN | IMAGE)"> + +<!ELEMENT INPUT - O EMPTY> +<!ATTLIST INPUT + type %InputType TEXT -- what kind of widget is needed -- + name CDATA #IMPLIED -- required for all but submit and reset -- + value CDATA #IMPLIED -- required for radio and checkboxes -- + checked (checked) #IMPLIED -- for radio buttons and check boxes -- + size CDATA #IMPLIED -- specific to each type of field -- + maxlength NUMBER #IMPLIED -- max chars allowed in text fields -- + src %URL #IMPLIED -- for fields with background images -- + align %IAlign #IMPLIED -- vertical or horizontal alignment -- + > + +<!ELEMENT SELECT - - (OPTION+)> +<!ATTLIST SELECT + name CDATA #REQUIRED + size NUMBER #IMPLIED + multiple (multiple) #IMPLIED + > + +<!ELEMENT OPTION - O (#PCDATA)*> +<!ATTLIST OPTION + selected (selected) #IMPLIED + value CDATA #IMPLIED -- defaults to element content -- + > + +<!-- Multi-line text input field. --> + +<!ELEMENT TEXTAREA - - (#PCDATA)*> +<!ATTLIST TEXTAREA + name CDATA #REQUIRED + rows NUMBER #REQUIRED + cols NUMBER #REQUIRED + > + +<!--======================= Tables ========================================--> + +<!-- Widely deployed subset of the full table standard, see RFC 1942 + e.g. at http://www.ics.uci.edu/pub/ietf/html/rfc1942.txt --> + +<!-- horizontal placement of table relative to window --> +<!ENTITY % Where "(left|center|right)"> + +<!-- horizontal alignment attributes for cell contents --> +<!ENTITY % cell.halign + "align (left|center|right) #IMPLIED" + > + +<!-- vertical alignment attributes for cell contents --> +<!ENTITY % cell.valign + "valign (top|middle|bottom) #IMPLIED" + > + +<!ELEMENT table - - (caption?, tr+)> +<!ELEMENT tr - O (th|td)*> +<!ELEMENT (th|td) - O %body.content> + +<!ATTLIST table -- table element -- + align %Where; #IMPLIED -- table position relative to window -- + width %Length #IMPLIED -- table width relative to window -- + border %Pixels #IMPLIED -- controls frame width around table -- + cellspacing %Pixels #IMPLIED -- spacing between cells -- + cellpadding %Pixels #IMPLIED -- spacing within cells -- + > + +<!ELEMENT CAPTION - - (%text;)* -- table or figure caption --> +<!ATTLIST CAPTION + align (top|bottom) #IMPLIED + > + +<!ATTLIST tr -- table row -- + %cell.halign; -- horizontal alignment in cells -- + %cell.valign; -- vertical alignment in cells -- + > + +<!ATTLIST (th|td) -- header or data cell -- + nowrap (nowrap) #IMPLIED -- suppress word wrap -- + rowspan NUMBER 1 -- number of rows spanned by cell -- + colspan NUMBER 1 -- number of cols spanned by cell -- + %cell.halign; -- horizontal alignment in cell -- + %cell.valign; -- vertical alignment in cell -- + width %Pixels #IMPLIED -- suggested width for cell -- + height %Pixels #IMPLIED -- suggested height for cell -- + > + +<!--================ Document Head ========================================--> + +<!-- %head.misc defined earlier on as "SCRIPT|STYLE|META|LINK" --> + +<!ENTITY % head.content "TITLE & ISINDEX? & BASE?"> + +<!ELEMENT HEAD O O (%head.content) +(%head.misc)> + +<!ELEMENT TITLE - - (#PCDATA)* -(%head.misc) + -- The TITLE element is not considered part of the flow of text. + It should be displayed, for example as the page header or + window title. + --> + +<!ELEMENT ISINDEX - O EMPTY> +<!ATTLIST ISINDEX + prompt CDATA #IMPLIED -- prompt message --> + +<!-- + The BASE element gives an absolute URL for dereferencing relative + URLs, e.g. + + <BASE href="http://foo.com/index.html"> + ... + <IMG SRC="images/bar.gif"> + + The image is deferenced to + + http://foo.com/images/bar.gif + + In the absence of a BASE element the document URL should be used. + Note that this is not necessarily the same as the URL used to + request the document, as the base URL may be overridden by an HTTP + header accompanying the document. +--> + +<!ELEMENT BASE - O EMPTY> +<!ATTLIST BASE + href %URL #REQUIRED + > + +<!ELEMENT META - O EMPTY -- Generic Metainformation --> +<!ATTLIST META + http-equiv NAME #IMPLIED -- HTTP response header name -- + name NAME #IMPLIED -- metainformation name -- + content CDATA #REQUIRED -- associated information -- + > + +<!-- SCRIPT/STYLE are place holders for transition to next version of HTML --> + +<!ELEMENT STYLE - - CDATA -- placeholder for style info --> +<!ELEMENT SCRIPT - - CDATA -- placeholder for script statements --> + +<!--================ Document Structure ===================================--> + +<!ENTITY % version.attr "VERSION CDATA #FIXED '%HTML.Version;'"> + +<![ %HTML.Deprecated [ + <!ENTITY % html.content "HEAD, BODY, PLAINTEXT?"> +]]> + +<!ENTITY % html.content "HEAD, BODY"> + +<!ELEMENT HTML O O (%html.content)> +<!ATTLIST HTML + %version.attr; + > diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-attrs-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-attrs-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-attrs-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-attrs-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,914 @@ +(* html-attrs-fn.sml + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * This provides support for parsing element start tags. + *) + +functor HTMLAttrsFn (Err : HTML_ERROR) : HTML_ATTRS = + struct + + open HTMLAttrVals (* inherit types *) + + fun attrValToString (NAME s) = s + | attrValToString (STRING s) = s + | attrValToString IMPLICIT = "" + + datatype attr_ty + = AT_TEXT (* either a string or name value *) + | AT_NAMES of string list (* one of a list of names *) + | AT_NUMBER (* an integer attribute *) + | AT_IMPLICIT + | AT_INSTANCE (* if an attribute FOO has type AT_NAMES with *) + (* values BAR and BAZ, then BAR and BAZ are *) + (* legal attributes, being shorthand for *) + (* FOO=BAR and FOO=BAZ. We introduce an *) + (* (k, AT_INSTANCE) entry for BAR and BAZ, where *) + (* k is the slot that FOO has been assigned. *) + + type context = Err.context + + structure HTbl = HashTableFn (struct + type hash_key = string + val hashVal = HashString.hashString + val sameKey = (op = : (string * string) -> bool) + end) + + (* an attribute map (attr_map) is a map from attribute names to attribute + * value slots and types. + *) + abstype attr_map = AMap of { + numAttrs : int, + attrTbl : (int * attr_ty) HTbl.hash_table + } + and attr_vec = AVec of { + vec : attr_val option Array.array, + ctx : context + } + with + (* create an attr_map from the list of attribute names and types. *) + fun mkAttrs data = let + val n = length data + val tbl = HTbl.mkTable (n, Fail "Attrs") + fun ins ((name, ty), id) = ( + HTbl.insert tbl (name, (id, ty)); + case ty + of (AT_NAMES l) => let + fun ins' nm = if (nm <> name) + then HTbl.insert tbl (nm, (id, AT_INSTANCE)) + else () + in + List.app ins' l + end + | _ => () + (* end case *); + id+1) + in + List.foldl ins 0 data; + AMap{numAttrs = n, attrTbl = tbl} + end + (* create an atttribute vector of attribute values using the attribute + * map to assign slots and typecheck the values. + *) + fun attrListToVec (ctx, AMap{numAttrs, attrTbl}, attrs) = let + val attrArray = Array.array (numAttrs, NONE) + fun update (_, NONE) = () + | update (id, SOME v) = (case Array.sub(attrArray, id) + of NONE => Array.update(attrArray, id, SOME v) + | (SOME _) => (* ignore multiple attribute definition *) () + (* end case *)) + (* compare two names for case-insensitive equality, where the second + * name is known to be all uppercase. + *) + fun eqName name name' = let + fun cmpC (c1, c2) = Char.compare(Char.toUpper c1, c2) + in + (String.collate cmpC (name, name')) = EQUAL + end + fun ins (attrName, attrVal) = let + fun error () = ( + Err.badAttrVal ctx (attrName, attrValToString attrVal); + NONE) + fun cvt (AT_IMPLICIT, IMPLICIT) = SOME IMPLICIT + | cvt (AT_INSTANCE, IMPLICIT) = SOME(NAME attrName) + | cvt (AT_TEXT, v) = SOME v + | cvt (AT_NUMBER, v) = SOME v + | cvt (AT_NAMES names, (NAME s | STRING s)) = ( + case (List.find (eqName s) names) + of NONE => error() + | (SOME name) => SOME(NAME name) + (* end case *)) + | cvt (AT_IMPLICIT, (NAME s | STRING s)) = + if (s = attrName) + then SOME IMPLICIT + else error() + | cvt _ = error() + in + case (HTbl.find attrTbl attrName) + of NONE => Err.unknownAttr ctx attrName + | (SOME(id, ty)) => update (id, cvt (ty, attrVal)) + (* end case *) + end + in + List.app ins attrs; + AVec{vec = attrArray, ctx = ctx} + end + (* given an attribute map and attribute name, return a function that + * fetches a value from the attribute's slot in an attribute vector. + *) + fun bindFindAttr (AMap{attrTbl, ...}, attr) = let + val (id, _) = HTbl.lookup attrTbl attr + in + fn (AVec{vec, ...}) => Array.sub(vec, id) + end + (* return the context of the element that contains the attribute vector *) + fun getContext (AVec{ctx, ...}) = ctx + end (* abstype *) + + fun getFlag (attrMap, attr) = let + val getFn = bindFindAttr (attrMap, attr) + fun get attrVec = (case (getFn attrVec) + of NONE => false + | _ => true + (* end case *)) + in + get + end + fun getCDATA (attrMap, attr) = let + val getFn = bindFindAttr (attrMap, attr) + fun get attrVec = (case (getFn attrVec) + of NONE => NONE + | (SOME((STRING s) | (NAME s))) => SOME s + | _ => ( + Err.missingAttrVal (getContext attrVec) attr; + NONE) + (* end case *)) + in + get + end + fun getNAMES fromString (attrMap, attr) = let + val getFn = bindFindAttr (attrMap, attr) + fun get attrVec = (case (getFn attrVec) + of NONE => NONE + | (SOME(NAME s)) => fromString s + | (SOME v) => + (** This case should be impossible, since attrListToVec + ** ensures that AT_NAMES valued attributes are always NAME. + **) + raise Fail "getNAMES" + (* end case *)) + in + get + end + fun getNUMBER (attrMap, attr) = let + val getFn = bindFindAttr (attrMap, attr) + fun get attrVec = (case (getFn attrVec) + of NONE => NONE + | (SOME((STRING s) | (NAME s))) => (case (Int.fromString s) + of NONE => ( + Err.badAttrVal (getContext attrVec) (attr, s); + NONE) + | someN => someN + (* end case *)) + | SOME IMPLICIT => raise Fail "getNUMBER: IMPLICIT unexpected" + (* end case *)) + in + get + end + fun getChar (attrMap, attr) = let + val getFn = bindFindAttr (attrMap, attr) + fun get attrVec = (case (getFn attrVec) + of NONE => NONE + | (SOME((STRING s) | (NAME s))) => + if (size s = 1) then SOME(String.sub(s, 0)) +(** NOTE: we should probably accept &#xx; as a character value **) + else ( + Err.badAttrVal (getContext attrVec) (attr, s); + NONE) + | SOME IMPLICIT => raise Fail "getChar: IMPLICIT unexpected" + (* end case *)) + in + get + end + + fun require (getFn, attrMap, attr, dflt) = let + val getFn = getFn (attrMap, attr) + fun get attrVec = (case getFn attrVec + of NONE => (Err.missingAttr (getContext attrVec) attr; dflt) + | (SOME v) => v + (* end case *)) + in + get + end + + (**** Element ISINDEX ****) + local + val attrMap = mkAttrs [ + ("PROMPT", AT_TEXT) + ] + val getPROMPT = getCDATA (attrMap, "PROMPT") + in + (* the ISINDEX element can occur in both the HEAD an BODY, so there are + * two datatype constructors for it. We just define the argument of the + * constructor here. + *) + fun mkISINDEX (ctx, attrs) = { + prompt = getPROMPT (attrListToVec(ctx, attrMap, attrs)) + } + end (* local *) + + (**** Element BASE ****) + local + val attrMap = mkAttrs [ + ("HREF", AT_TEXT) + ] + val getHREF = require (getCDATA, attrMap, "HREF", "") + in + fun mkBASE (ctx, attrs) = HTML.Head_BASE{ + href = getHREF(attrListToVec(ctx, attrMap, attrs)) + } + end (* local *) + + (**** Element META ****) + local + val attrMap = mkAttrs [ + ("HTTP-EQUIV", AT_TEXT), + ("NAME", AT_TEXT), + ("CONTENT", AT_TEXT) + ] + val getHTTP_EQUIV = getCDATA (attrMap, "HTTP-EQUIV") + val getNAME = getCDATA (attrMap, "NAME") + val getCONTENT = require (getCDATA, attrMap, "CONTENT", "") + in + fun mkMETA (ctx, attrs) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.Head_META{ + httpEquiv = getHTTP_EQUIV attrVec, + name = getNAME attrVec, + content = getCONTENT attrVec + } + end + end (* local *) + + (**** Element LINK ****) + local + val attrMap = mkAttrs [ + ("HREF", AT_TEXT), + ("ID", AT_TEXT), + ("TITLE", AT_TEXT), + ("REL", AT_TEXT), + ("REV", AT_TEXT) + ] + val getHREF = getCDATA (attrMap, "HREF") + val getID = getCDATA (attrMap, "ID") + val getREL = getCDATA (attrMap, "REL") + val getREV = getCDATA (attrMap, "REV") + val getTITLE = getCDATA (attrMap, "TITLE") + in + fun mkLINK (ctx, attrs) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.Head_LINK{ + href = getHREF attrVec, + id = getID attrVec, + rel = getREL attrVec, + rev = getREV attrVec, + title = getTITLE attrVec + } + end + end (* local *) + + (**** Element BODY ****) + local + val attrMap = mkAttrs [ + ("BACKGROUND", AT_TEXT), + ("BGCOLOR", AT_TEXT), + ("TEXT", AT_TEXT), + ("LINK", AT_TEXT), + ("VLINK", AT_TEXT), + ("ALINK", AT_TEXT) + ] + val getBACKGROUND = getCDATA (attrMap, "BACKGROUND") + val getBGCOLOR = getCDATA (attrMap, "BGCOLOR") + val getTEXT = getCDATA (attrMap, "TEXT") + val getLINK = getCDATA (attrMap, "LINK") + val getVLINK = getCDATA (attrMap, "VLINK") + val getALINK = getCDATA (attrMap, "ALINK") + in + fun mkBODY (ctx, attrs, blk) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.BODY{ + background = getBACKGROUND attrVec, + bgcolor = getBGCOLOR attrVec, + text = getTEXT attrVec, + link = getLINK attrVec, + vlink = getVLINK attrVec, + alink = getALINK attrVec, + content = blk + } + end + end (* local *) + + (**** Elements H1, H2, H3, H4, H5, H6 and P ****) + local + val attrMap = mkAttrs [ + ("ALIGN", AT_NAMES["LEFT", "CENTER", "RIGHT"]) + ] + val getALIGN = getNAMES HTML.HAlign.fromString (attrMap, "ALIGN") + in + fun mkHn (n, ctx, attrs, text) = HTML.Hn{ + n = n, + align = getALIGN(attrListToVec(ctx, attrMap, attrs)), + content = text + } + fun mkP (ctx, attrs, text) = HTML.P{ + align = getALIGN(attrListToVec(ctx, attrMap, attrs)), + content = text + } + end (* local *) + + (**** Element UL ****) + local + val attrMap = mkAttrs [ + ("COMPACT", AT_IMPLICIT), + ("TYPE", AT_NAMES["DISC", "SQUARE", "CIRCLE"]) + ] + val getCOMPACT = getFlag(attrMap, "COMPACT") + val getTYPE = getNAMES HTML.ULStyle.fromString (attrMap, "TYPE") + in + fun mkUL (ctx, attrs, items) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.UL{ + ty = getTYPE attrVec, + compact = getCOMPACT attrVec, + content = items + } + end + end (* local *) + + (**** Element OL ****) + local + val attrMap = mkAttrs [ + ("COMPACT", AT_IMPLICIT), + ("START", AT_NUMBER), + ("TYPE", AT_TEXT) + ] + val getCOMPACT = getFlag(attrMap, "COMPACT") + val getSTART = getNUMBER(attrMap, "START") + val getTYPE = getCDATA(attrMap, "TYPE") + in + fun mkOL (ctx, attrs, items) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.OL{ + compact = getCOMPACT attrVec, + start = getSTART attrVec, + ty = getTYPE attrVec, + content = items + } + end + end (* local *) + + (**** Elements DIR, MENU and DL ****) + local + val attrMap = mkAttrs [ + ("COMPACT", AT_IMPLICIT) + ] + val getCOMPACT = getFlag(attrMap, "COMPACT") + in + fun mkDIR (ctx, attrs, items) = HTML.DIR{ + compact = getCOMPACT (attrListToVec(ctx, attrMap, attrs)), + content = items + } + fun mkMENU (ctx, attrs, items) = HTML.MENU{ + compact = getCOMPACT (attrListToVec(ctx, attrMap, attrs)), + content = items + } + fun mkDL (ctx, attrs, items) = HTML.DL{ + compact = getCOMPACT (attrListToVec(ctx, attrMap, attrs)), + content = items + } + end (* local *) + + (**** Element LI ****) + local + val attrMap = mkAttrs [ + ("TYPE", AT_TEXT), + ("VALUE", AT_NUMBER) + ] + val getTYPE = getCDATA(attrMap, "TYPE") + val getVALUE = getNUMBER(attrMap, "VALUE") + in + fun mkLI (ctx, attrs, text) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.LI{ + ty = getTYPE attrVec, + value = getVALUE attrVec, + content = text + } + end + end (* local *) + + (**** Element PRE ****) + local + val attrMap = mkAttrs [ + ("WIDTH", AT_NUMBER) + ] + val getWIDTH = getNUMBER(attrMap, "WIDTH") + in + fun mkPRE (ctx, attrs, text) = HTML.PRE{ + width = getWIDTH (attrListToVec (ctx, attrMap, attrs)), + content = text + } + end (* local *) + + (**** Element DIV ****) + local + val attrMap = mkAttrs [ + ("ALIGN", AT_NAMES["LEFT", "CENTER", "RIGHT"]) + ] + val getALIGN = require (getNAMES HTML.HAlign.fromString, + attrMap, "ALIGN", HTML.HAlign.left) + in + fun mkDIV (ctx, attrs, content) = HTML.DIV{ + align = getALIGN(attrListToVec(ctx, attrMap, attrs)), + content = content + } + end (* local *) + + (**** Element FORM ****) + local + val attrMap = mkAttrs [ + ("ACTION", AT_TEXT), + ("METHOD", AT_NAMES["GET", "PUT"]), + ("ENCTYPE", AT_TEXT) + ] + val getACTION = getCDATA (attrMap, "ACTION") + val getMETHOD = require (getNAMES HTML.HttpMethod.fromString, + attrMap, "METHOD", HTML.HttpMethod.get) + val getENCTYPE = getCDATA (attrMap, "ENCTYPE") + in + fun mkFORM (ctx, attrs, contents) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.FORM{ + action = getACTION attrVec, + method = getMETHOD attrVec, + enctype = getENCTYPE attrVec, + content = contents + } + end + end (* local *) + + (**** Element HR ****) + local + val attrMap = mkAttrs [ + ("ALIGN", AT_NAMES["LEFT", "CENTER", "RIGHT"]), + ("NOSHADE", AT_IMPLICIT), + ("SIZE", AT_TEXT), + ("WIDTH", AT_TEXT) + ] + val getALIGN = getNAMES HTML.HAlign.fromString (attrMap, "ALIGN") + val getNOSHADE = getFlag (attrMap, "NOSHADE") + val getSIZE = getCDATA (attrMap, "SIZE") + val getWIDTH = getCDATA (attrMap, "WIDTH") + in + fun mkHR (ctx, attrs) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.HR{ + align = getALIGN attrVec, + noshade = getNOSHADE attrVec, + size = getSIZE attrVec, + width = getWIDTH attrVec + } + end + end (* local *) + + (**** Element TABLE ****) + local + val attrMap = mkAttrs [ + ("ALIGN", AT_NAMES["LEFT", "CENTER", "RIGHT"]), + ("BORDER", AT_TEXT), + ("CELLSPACING", AT_TEXT), + ("CELLPADDING", AT_TEXT), + ("WIDTH", AT_TEXT) + ] + val getALIGN = getNAMES HTML.HAlign.fromString (attrMap, "ALIGN") + val getBORDER = getCDATA (attrMap, "BORDER") + val getCELLSPACING = getCDATA (attrMap, "CELLSPACING") + val getCELLPADDING = getCDATA (attrMap, "CELLPADDING") + val getWIDTH = getCDATA (attrMap, "WIDTH") + in + fun mkTABLE (ctx, attrs, {caption, body}) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.TABLE{ + align = getALIGN attrVec, + border = getBORDER attrVec, + cellspacing = getCELLSPACING attrVec, + cellpadding = getCELLPADDING attrVec, + width = getWIDTH attrVec, + caption = caption, + content = body + } + end + end (* local *) + + (**** Element CAPTION ****) + local + val attrMap = mkAttrs [ + ("ALIGN", AT_NAMES["TOP", "BOTTOM"]) + ] + val getALIGN = getNAMES HTML.CaptionAlign.fromString (attrMap, "ALIGN") + in + fun mkCAPTION (ctx, attrs, text) = HTML.CAPTION{ + align = getALIGN(attrListToVec(ctx, attrMap, attrs)), + content = text + } + end (* local *) + + (**** Element TR ****) + local + val attrMap = mkAttrs [ + ("ALIGN", AT_NAMES["LEFT", "CENTER", "RIGHT"]), + ("VALIGN", AT_NAMES["TOP", "MIDDLE", "BOTTOM", "BASELINE"]) + ] + val getALIGN = getNAMES HTML.HAlign.fromString (attrMap, "ALIGN") + val getVALIGN = getNAMES HTML.CellVAlign.fromString (attrMap, "VALIGN") + in + fun mkTR (ctx, attrs, cells) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.TR{ + align = getALIGN attrVec, + valign = getVALIGN attrVec, + content = cells + } + end + end (* local *) + + (**** Elements TH and TD ****) + local + val attrMap = mkAttrs [ + ("ALIGN", AT_NAMES["LEFT", "CENTER", "RIGHT"]), + ("COLSPAN", AT_NUMBER), + ("HEIGHT", AT_TEXT), + ("NOWRAP", AT_IMPLICIT), + ("ROWSPAN", AT_NUMBER), + ("VALIGN", AT_NAMES["TOP", "MIDDLE", "BOTTOM", "BASELINE"]), + ("WIDTH", AT_TEXT) + ] + val getALIGN = getNAMES HTML.HAlign.fromString (attrMap, "ALIGN") + val getCOLSPAN = getNUMBER (attrMap, "COLSPAN") + val getHEIGHT = getCDATA (attrMap, "HEIGHT") + val getNOWRAP = getFlag (attrMap, "NOWRAP") + val getROWSPAN = getNUMBER (attrMap, "ROWSPAN") + val getVALIGN = getNAMES HTML.CellVAlign.fromString (attrMap, "VALIGN") + val getWIDTH = getCDATA (attrMap, "WIDTH") + fun mkCell (ctx, attrs, cells) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + { align = getALIGN attrVec, + colspan = getCOLSPAN attrVec, + height = getHEIGHT attrVec, + nowrap = getNOWRAP attrVec, + rowspan = getROWSPAN attrVec, + valign = getVALIGN attrVec, + width = getWIDTH attrVec, + content = cells + } + end + in + fun mkTH arg = HTML.TH(mkCell arg) + fun mkTD arg = HTML.TD(mkCell arg) + end (* local *) + + (**** Element A ****) + local + val attrMap = mkAttrs [ + ("HREF", AT_TEXT), + ("NAME", AT_TEXT), + ("REL", AT_TEXT), + ("REV", AT_TEXT), + ("TITLE", AT_TEXT) + ] + val getHREF = getCDATA (attrMap, "HREF") + val getNAME = getCDATA (attrMap, "NAME") + val getREL = getCDATA (attrMap, "REL") + val getREV = getCDATA (attrMap, "REV") + val getTITLE = getCDATA (attrMap, "TITLE") + in + fun mkA (ctx, attrs, contents) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.A{ + name = getNAME attrVec, + href = getHREF attrVec, + rel = getREL attrVec, + rev = getREV attrVec, + title = getTITLE attrVec, + content = contents + } + end + end (* local *) + + (**** Element IMG ****) + local + val attrMap = mkAttrs [ + ("ALIGN", AT_NAMES["TOP", "MIDDLE", "BOTTOM", "LEFT", "RIGHT"]), + ("ALT", AT_TEXT), + ("BORDER", AT_TEXT), + ("HEIGHT", AT_TEXT), + ("HSPACE", AT_TEXT), + ("ISMAP", AT_IMPLICIT), + ("SRC", AT_TEXT), + ("USEMAP", AT_TEXT), + ("VSPACE", AT_TEXT), + ("WIDTH", AT_TEXT) + ] + val getALIGN = getNAMES HTML.IAlign.fromString (attrMap, "ALIGN") + val getALT = getCDATA (attrMap, "ALT") + val getBORDER = getCDATA (attrMap, "BORDER") + val getHEIGHT = getCDATA (attrMap, "HEIGHT") + val getHSPACE = getCDATA (attrMap, "HSPACE") + val getISMAP = getFlag (attrMap, "ISMAP") + val getSRC = require (getCDATA, attrMap, "SRC", "") + val getUSEMAP = getCDATA (attrMap, "USEMAP") + val getVSPACE = getCDATA (attrMap, "VSPACE") + val getWIDTH = getCDATA (attrMap, "WIDTH") + in + fun mkIMG (ctx, attrs) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.IMG{ + src = getSRC attrVec, + alt = getALT attrVec, + align = getALIGN attrVec, + height = getHEIGHT attrVec, + width = getWIDTH attrVec, + border = getBORDER attrVec, + hspace = getHSPACE attrVec, + vspace = getVSPACE attrVec, + usemap = getUSEMAP attrVec, + ismap = getISMAP attrVec + } + end + end (* local *) + + (**** Element APPLET ****) + local + val attrMap = mkAttrs [ + ("ALIGN", AT_NAMES["TOP", "MIDDLE", "BOTTOM", "LEFT", "RIGHT"]), + ("ALT", AT_TEXT), + ("CODE", AT_TEXT), + ("CODEBASE", AT_TEXT), + ("HEIGHT", AT_TEXT), + ("HSPACE", AT_TEXT), + ("NAME", AT_TEXT), + ("VSPACE", AT_TEXT), + ("WIDTH", AT_TEXT) + ] + val getALIGN = getNAMES HTML.IAlign.fromString (attrMap, "ALIGN") + val getALT = getCDATA (attrMap, "ALT") + val getCODE = require (getCDATA, attrMap, "CODE", "") + val getCODEBASE = getCDATA (attrMap, "CODEBASE") + val getHEIGHT = getCDATA (attrMap, "HEIGHT") + val getHSPACE = getCDATA (attrMap, "HSPACE") + val getNAME = getCDATA (attrMap, "NAME") + val getVSPACE = getCDATA (attrMap, "VSPACE") + val getWIDTH = getCDATA (attrMap, "WIDTH") + in + fun mkAPPLET (ctx, attrs, content) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.APPLET{ + codebase = getCODEBASE attrVec, + code = getCODE attrVec, + name = getNAME attrVec, + alt = getALT attrVec, + align = getALIGN attrVec, + height = getHEIGHT attrVec, + width = getWIDTH attrVec, + hspace = getHSPACE attrVec, + vspace = getVSPACE attrVec, + content = content + } + end + end (* local *) + + (**** Element PARAM ****) + local + val attrMap = mkAttrs [ + ("NAME", AT_TEXT), + ("VALUE", AT_TEXT) + ] + val getNAME = require (getCDATA, attrMap, "NAME", "") + val getVALUE = getCDATA (attrMap, "VALUE") + in + fun mkPARAM (ctx, attrs) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.PARAM{ + name = getNAME attrVec, + value = getVALUE attrVec + } + end + end (* local *) + + (**** Element FONT ****) + local + val attrMap = mkAttrs [ + ("COLOR", AT_TEXT), + ("SIZE", AT_TEXT) + ] + val getCOLOR = getCDATA (attrMap, "COLOR") + val getSIZE = getCDATA (attrMap, "SIZE") + in + fun mkFONT (ctx, attrs, content) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.FONT{ + size = getSIZE attrVec, + color = getCOLOR attrVec, + content = content + } + end + end (* local *) + + (**** Element BASEFONT ****) + local + val attrMap = mkAttrs [ + ("SIZE", AT_TEXT) + ] + val getSIZE = getCDATA (attrMap, "SIZE") + in + fun mkBASEFONT (ctx, attrs, content) = HTML.BASEFONT{ + size = getSIZE(attrListToVec(ctx, attrMap, attrs)), + content = content + } + end (* local *) + + (**** Element BR ****) + local + val attrMap = mkAttrs [ + ("CLEAR", AT_NAMES["LEFT", "RIGHT", "ALL", "NONE"]) + ] + val getCLEAR = getNAMES HTML.TextFlowCtl.fromString (attrMap, "CLEAR") + in + fun mkBR (ctx, attrs) = HTML.BR{ + clear = getCLEAR(attrListToVec(ctx, attrMap, attrs)) + } + end (* local *) + + (**** Element MAP ****) + local + val attrMap = mkAttrs [ + ("NAME", AT_TEXT) + ] + val getNAME = getCDATA (attrMap, "NAME") + in + fun mkMAP (ctx, attrs, content) = HTML.MAP{ + name = getNAME (attrListToVec(ctx, attrMap, attrs)), + content = content + } + end (* local *) + + (**** Element INPUT ****) + local + val attrMap = mkAttrs [ + ("ALIGN", AT_NAMES["TOP", "MIDDLE", "BOTTOM", "LEFT", "RIGHT"]), + ("CHECKED", AT_IMPLICIT), + ("MAXLENGTH", AT_NUMBER), + ("NAME", AT_TEXT), + ("SIZE", AT_TEXT), + ("SRC", AT_TEXT), + ("TYPE", AT_NAMES[ + "TEXT", "PASSWORD", "CHECKBOX", + "RADIO", "SUBMIT", "RESET", + "FILE", "HIDDEN", "IMAGE" + ]), + ("VALUE", AT_TEXT) + ] + val getALIGN = getNAMES HTML.IAlign.fromString (attrMap, "ALIGN") + val getCHECKED = getFlag (attrMap, "CHECKED") + val getMAXLENGTH = getNUMBER (attrMap, "MAXLENGTH") + val getNAME = getCDATA (attrMap, "NAME") + val getSIZE = getCDATA (attrMap, "SIZE") + val getSRC = getCDATA (attrMap, "SRC") + val getTYPE = getNAMES HTML.InputType.fromString (attrMap, "TYPE") + val getVALUE = getCDATA (attrMap, "VALUE") + in + fun mkINPUT (ctx, attrs) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.INPUT{ + ty = getTYPE attrVec, + name = getNAME attrVec, + value = getVALUE attrVec, + src = getSRC attrVec, + checked = getCHECKED attrVec, + size = getSIZE attrVec, + maxlength = getMAXLENGTH attrVec, + align = getALIGN attrVec + } + end + end (* local *) + + (**** Element SELECT ****) + local + val attrMap = mkAttrs [ + ("NAME", AT_TEXT), + ("SIZE", AT_TEXT) + ] + val getNAME = require (getCDATA, attrMap, "NAME", "") + val getSIZE = getNUMBER (attrMap, "SIZE") + in + fun mkSELECT (ctx, attrs, contents) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.SELECT{ + name = getNAME attrVec, + size = getSIZE attrVec, + content = contents + } + end + end (* local *) + + (**** Element TEXTAREA ****) + local + val attrMap = mkAttrs [ + ("NAME", AT_TEXT), + ("ROWS", AT_NUMBER), + ("COLS", AT_NUMBER) + ] + val getNAME = require (getCDATA, attrMap, "NAME", "") + val getROWS = require (getNUMBER, attrMap, "ROWS", 0) + val getCOLS = require (getNUMBER, attrMap, "COLS", 0) + in + fun mkTEXTAREA (ctx, attrs, contents) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.TEXTAREA{ + name = getNAME attrVec, + rows = getROWS attrVec, + cols = getCOLS attrVec, + content = contents + } + end + end (* local *) + + (**** Element AREA ****) + local + val attrMap = mkAttrs [ + ("ALT", AT_TEXT), + ("COORDS", AT_TEXT), + ("HREF", AT_TEXT), + ("NOHREF", AT_IMPLICIT), + ("SHAPE", AT_NAMES["RECT", "CIRCLE", "POLY", "DEFAULT"]) + ] + val getALT = require (getCDATA, attrMap, "ALT", "") + val getCOORDS = getCDATA (attrMap, "COORDS") + val getHREF = getCDATA (attrMap, "HREF") + val getNOHREF = getFlag (attrMap, "NOHREF") + val getSHAPE = getNAMES HTML.Shape.fromString (attrMap, "SHAPE") + in + fun mkAREA (ctx, attrs) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.AREA{ + shape = getSHAPE attrVec, + coords = getCOORDS attrVec, + href = getHREF attrVec, + nohref = getNOHREF attrVec, + alt = getALT attrVec + } + end + end (* local *) + + (**** Element OPTION ****) + local + val attrMap = mkAttrs [ + ("SELECTED", AT_IMPLICIT), + ("VALUE", AT_TEXT) + ] + val getSELECTED = getFlag (attrMap, "SELECTED") + val getVALUE = getCDATA (attrMap, "VALUE") + in + fun mkOPTION (ctx, attrs, contents) = let + val attrVec = attrListToVec(ctx, attrMap, attrs) + in + HTML.OPTION{ + selected = getSELECTED attrVec, + value = getVALUE attrVec, + content = contents + } + end + end (* local *) + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-attrs-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-attrs-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-attrs-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-attrs-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,59 @@ +(* html-attrs.sml + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * This is the interface to HTMLAttrs, which provides support for parsing + * element start tags. + *) + +signature HTML_ATTRS = + sig + + type context = {file : string option, line : int} + + (* support for building elements that have attributes *) + datatype attr_val = datatype HTMLAttrVals.attr_val + type attrs = (string * attr_val) list + + val mkISINDEX : (context * attrs) -> {prompt : HTML.cdata option} + val mkBASE : (context * attrs) -> HTML.head_content + val mkMETA : (context * attrs) -> HTML.head_content + val mkLINK : (context * attrs) -> HTML.head_content + val mkBODY : (context * attrs * HTML.block) -> HTML.body + val mkHn : (int * context * attrs * HTML.text) -> HTML.block + val mkP : (context * attrs * HTML.text) -> HTML.block + val mkUL : (context * attrs * HTML.list_item list) -> HTML.block + val mkOL : (context * attrs * HTML.list_item list) -> HTML.block + val mkDIR : (context * attrs * HTML.list_item list) -> HTML.block + val mkMENU : (context * attrs * HTML.list_item list) -> HTML.block + val mkLI : (context * attrs * HTML.block) -> HTML.list_item + val mkDL : (context * attrs * {dt : HTML.text list, dd : HTML.block} list) + -> HTML.block + val mkPRE : (context * attrs * HTML.text) -> HTML.block + val mkDIV : (context * attrs * HTML.block) -> HTML.block + val mkFORM : (context * attrs * HTML.block) -> HTML.block + val mkHR : (context * attrs) -> HTML.block + val mkTABLE : (context * attrs * { + caption : HTML.caption option, + body : HTML.tr list + }) -> HTML.block + val mkCAPTION : (context * attrs * HTML.text) -> HTML.caption + val mkTR : (context * attrs * HTML.table_cell list) -> HTML.tr + val mkTH : (context * attrs * HTML.block) -> HTML.table_cell + val mkTD : (context * attrs * HTML.block) -> HTML.table_cell + val mkA : (context * attrs * HTML.text) -> HTML.text + val mkIMG : (context * attrs) -> HTML.text + val mkAPPLET : (context * attrs * HTML.text) -> HTML.text + val mkPARAM : (context * attrs) -> HTML.text + val mkFONT : (context * attrs * HTML.text) -> HTML.text + val mkBASEFONT : (context * attrs * HTML.text) -> HTML.text + val mkBR : (context * attrs) -> HTML.text + val mkMAP : (context * attrs * HTML.area list) -> HTML.text + val mkINPUT : (context * attrs) -> HTML.text + val mkSELECT : (context * attrs * HTML.select_option list) -> HTML.text + val mkTEXTAREA : (context * attrs * HTML.pcdata) -> HTML.text + val mkAREA : (context * attrs) -> HTML.area + val mkOPTION : (context * attrs * HTML.pcdata) -> HTML.select_option + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-attr-vals.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-attr-vals.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-attr-vals.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-attr-vals.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,20 @@ +(* html-attr-vals.sml + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * This structure is necessary since the attrs type is used in the parser, + * and there is no way to get it into the parser's signature. + *) + +structure HTMLAttrVals = + struct + + (* support for building elements that have attributes *) + datatype attr_val + = NAME of string (* [a-zA-Z.-]+ *) + | STRING of string (* a string enclosed in "" or '' *) + | IMPLICIT + + type attrs = (string * attr_val) list + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-defaults.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-defaults.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-defaults.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-defaults.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,24 @@ +(* html-defaults.sml + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * Some HTML attributes have default values specified by the DTD; this + * file defines values for these. + *) + +structure HTMLDefaults = + struct + + val br_clear = HTML.TextFlowCtl.none + val area_shape = HTML.Shape.rect + val form_method = HTML.HttpMethod.get + val form_enctype = "application/x-www-form-urlencoded" + val input_type = HTML.InputType.text + val input_align = HTML.IAlign.top + val th_rowspan = 1 + val th_colspan = 1 + val td_rowspan = 1 + val td_colspan = 1 + + end; + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-elements-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-elements-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-elements-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-elements-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,249 @@ +(* html-elements-fn.sml + * + * COPYRIGHT (c) 1996 AT&T REsearch. + * + * This module builds element tags for the lexer. + *) + +functor HTMLElementsFn ( + structure Tokens : HTML_TOKENS + structure Err : HTML_ERROR + structure HTMLAttrs : HTML_ATTRS + ) : sig + + structure T : HTML_TOKENS + + type pos = int + + val startTag : string option + -> (string * pos * pos) -> (T.svalue, pos) T.token option + val endTag : string option + -> (string * pos * pos) -> (T.svalue, pos) T.token option + + end = struct + + structure T = Tokens + structure A = HTMLAttrs + + type pos = int + + datatype start_tag + = WAttrs of ((A.attrs * pos * pos) -> (T.svalue, pos) T.token) + | WOAttrs of ((pos * pos) -> (T.svalue, pos) T.token) + datatype end_tag + = End of ((pos * pos) -> (T.svalue, pos) T.token) + | Empty + + val tokenData = [ + ("A", WAttrs T.START_A, End T.END_A), + ("ADDRESS", WOAttrs T.START_ADDRESS, End T.END_ADDRESS), + ("APPLET", WAttrs T.START_APPLET, End T.END_APPLET), + ("AREA", WAttrs T.TAG_AREA, Empty), + ("B", WOAttrs T.START_B, End T.END_B), + ("BASE", WAttrs T.TAG_BASE, Empty), + ("BASEFONT", WAttrs T.START_BASEFONT, End T.END_BASEFONT), + ("BIG", WOAttrs T.START_BIG, End T.END_BIG), + ("BLOCKQUOTE", WOAttrs T.START_BLOCKQUOTE, End T.END_BLOCKQUOTE), + ("BODY", WAttrs T.START_BODY, End T.END_BODY), + ("BR", WAttrs T.TAG_BR, Empty), + ("CAPTION", WAttrs T.START_CAPTION, End T.END_CAPTION), + ("CENTER", WOAttrs T.START_CENTER, End T.END_CENTER), + ("CITE", WOAttrs T.START_CITE, End T.END_CITE), + ("CODE", WOAttrs T.START_CODE, End T.END_CODE), + ("DD", WOAttrs T.START_DD, End T.END_DD), + ("DFN", WOAttrs T.START_DFN, End T.END_DFN), + ("DIR", WAttrs T.START_DIR, End T.END_DIR), + ("DIV", WAttrs T.START_DIV, End T.END_DIV), + ("DL", WAttrs T.START_DL, End T.END_DL), + ("DT", WOAttrs T.START_DT, End T.END_DT), + ("EM", WOAttrs T.START_EM, End T.END_EM), + ("FONT", WAttrs T.START_FONT, End T.END_FONT), + ("FORM", WAttrs T.START_FORM, End T.END_FORM), + ("H1", WAttrs T.START_H1, End T.END_H1), + ("H2", WAttrs T.START_H2, End T.END_H2), + ("H3", WAttrs T.START_H3, End T.END_H3), + ("H4", WAttrs T.START_H4, End T.END_H4), + ("H5", WAttrs T.START_H5, End T.END_H5), + ("H6", WAttrs T.START_H6, End T.END_H6), + ("HEAD", WOAttrs T.START_HEAD, End T.END_HEAD), + ("HR", WAttrs T.TAG_HR, Empty), + ("HTML", WOAttrs T.START_HTML, End T.END_HTML), + ("I", WOAttrs T.START_I, End T.END_I), + ("IMG", WAttrs T.TAG_IMG, Empty), + ("INPUT", WAttrs T.TAG_INPUT, Empty), + ("ISINDEX", WAttrs T.TAG_ISINDEX, Empty), + ("KBD", WOAttrs T.START_KBD, End T.END_KBD), + ("LI", WAttrs T.START_LI, End T.END_LI), + ("LINK", WAttrs T.TAG_LINK, Empty), + ("MAP", WAttrs T.START_MAP, End T.END_MAP), + ("MENU", WAttrs T.START_MENU, End T.END_MENU), + ("META", WAttrs T.TAG_META, Empty), + ("OL", WAttrs T.START_OL, End T.END_OL), + ("OPTION", WAttrs T.START_OPTION, End T.END_OPTION), + ("P", WAttrs T.START_P, End T.END_P), + ("PARAM", WAttrs T.TAG_PARAM, Empty), + ("PRE", WAttrs T.START_PRE, End T.END_PRE), + ("SAMP", WOAttrs T.START_SAMP, End T.END_SAMP), + ("SCRIPT", WOAttrs T.START_SCRIPT, End T.END_SCRIPT), + ("SELECT", WAttrs T.START_SELECT, End T.END_SELECT), + ("SMALL", WOAttrs T.START_SMALL, End T.END_SMALL), + ("STRIKE", WOAttrs T.START_STRIKE, End T.END_STRIKE), + ("STRONG", WOAttrs T.START_STRONG, End T.END_STRONG), + ("STYLE", WOAttrs T.START_STYLE, End T.END_STYLE), + ("SUB", WOAttrs T.START_SUB, End T.END_SUB), + ("SUP", WOAttrs T.START_SUP, End T.END_SUP), + ("TABLE", WAttrs T.START_TABLE, End T.END_TABLE), + ("TD", WAttrs T.START_TD, End T.END_TD), + ("TEXTAREA", WAttrs T.START_TEXTAREA, End T.END_TEXTAREA), + ("TH", WAttrs T.START_TH, End T.END_TH), + ("TITLE", WOAttrs T.START_TITLE, End T.END_TITLE), + ("TR", WAttrs T.START_TR, End T.END_TR), + ("TT", WOAttrs T.START_TT, End T.END_TT), + ("U", WOAttrs T.START_U, End T.END_U), + ("UL", WAttrs T.START_UL, End T.END_UL), + ("VAR", WOAttrs T.START_VAR, End T.END_VAR) + ] + + structure HTbl = HashTableFn (struct + type hash_key = string + val hashVal = HashString.hashString + val sameKey = (op = : (string * string) -> bool) + end) + + val elemTbl = let + val tbl = HTbl.mkTable (length tokenData, Fail "HTMLElements") + fun ins (tag, startTok, endTok) = + HTbl.insert tbl (tag, {startT=startTok, endT=endTok}) + in + List.app ins tokenData; tbl + end + + structure SS = Substring + + fun canonName name = SS.translate (String.str o Char.toUpper) name + + fun find name = (HTbl.find elemTbl (canonName name)) + + val skipWS = SS.dropl Char.isSpace + + fun scanStr (ctx, quoteChar, ss) = let + val (str, rest) = SS.splitl (fn c => (c <> quoteChar)) ss + in + if (SS.isEmpty rest) + then ( + Err.lexError ctx "missing close quote for string"; + (A.STRING(SS.string str), rest)) + else (A.STRING(SS.string str), SS.triml 1 rest) + end + + (* scan an attribute value from a substring, returning the value, and + * the rest of the substring. Attribute values have one of the following + * forms: + * 1) a name token (a sequence of letters, digits, periods, or hyphens). + * 2) a string literal enclosed in "" + * 3) a string literal enclosed in '' + *) + fun scanAttrVal (ctx, attrName, ss) = let + fun isNameChar (#"." | #"-") = true + | isNameChar c = (Char.isAlphaNum c) + in + case SS.getc ss + of NONE => (A.IMPLICIT, ss) + | (SOME(#"\"", rest)) => scanStr (ctx, #"\"", rest) + | (SOME(#"'", rest)) => scanStr (ctx, #"'", rest) + | (SOME(c, _)) => let + (** + * Unquoted attributes should be Names, but this is often not + * the case, so we terminate them on whitespace or ">". + *) + val notNameChar = ref false + fun isAttrChar c = + if ((Char.isSpace c) orelse (c = #">")) + then false + else ( + if isNameChar c then () else notNameChar := true; + true) + val (value, rest) = SS.splitl isAttrChar ss + in + if (SS.isEmpty value) + then ( + Err.badAttrVal ctx (SS.string attrName, ""); + (A.IMPLICIT, ss)) + else if (! notNameChar) + then ( + Err.unquotedAttrVal ctx (SS.string attrName); + (A.STRING(SS.string value), rest)) + else (A.NAME(SS.string value), rest) + end + (* end case *) + end + + fun scanStartTag (ctx, ss) = let + val (name, rest) = SS.splitl (not o Char.isSpace) ss + fun scanAttrs (rest, attrs) = let + val rest = skipWS rest + in + case SS.getc rest + of NONE => (name, List.rev attrs) + | (SOME(#"\"", rest)) => ( + Err.lexError ctx "bogus text in element"; + scanAttrs (#2(scanStr (ctx, #"\"", rest)), attrs)) + | (SOME(#"'", rest)) => ( + Err.lexError ctx "bogus text in element"; + scanAttrs (#2(scanStr (ctx, #"'", rest)), attrs)) + | (SOME(c, rest')) => + if Char.isAlpha c + then let + val (aName, rest) = SS.splitl Char.isAlphaNum rest + val rest = skipWS rest + in + case (SS.getc rest) + of (SOME(#"=", rest)) => let + (* get the attribute value *) + val (aVal, rest) = + scanAttrVal (ctx, aName, skipWS rest) + in + scanAttrs (rest, (canonName aName, aVal)::attrs) + end + | _ => scanAttrs (rest, + (canonName aName, A.IMPLICIT)::attrs) + (* end case *) + end + else ( + Err.lexError ctx "bogus character in element"; + scanAttrs (rest', attrs)) + (* end case *) + end + in + scanAttrs(rest, []) + end + + fun startTag file (tag, p1, p2) = let + val ctx = {file=file, line=p1} + val tag' = SS.triml 1 (SS.trimr 1 (SS.full tag)) + val (name, attrs) = scanStartTag (ctx, tag') + in + case (find name, attrs) + of (NONE, _) => (Err.badStartTag ctx (SS.string name); NONE) + | (SOME{startT=WOAttrs _, ...}, _::_) => ( + List.app (Err.unknownAttr ctx o #1) attrs; NONE) + | (SOME{startT=WOAttrs tag, ...}, []) => + SOME(tag (p1, p2)) + | (SOME{startT=WAttrs tag, ...}, attrs) => + SOME(tag (attrs, p1, p2)) + (* end case *) + end + + fun endTag file (tag, p1, p2) = let + val ctx = {file=file, line=p1} + val name = SS.triml 2 (SS.trimr 1 (SS.full tag)) + in + case (find name) + of NONE => (Err.badEndTag ctx (SS.string name); NONE) + | (SOME{endT=Empty, ...}) => (Err.badEndTag ctx (SS.string name); NONE) + | (SOME{endT=End endTok, ...}) => SOME(endTok (p1, p2)) + (* end case *) + end + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-error-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-error-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-error-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-error-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,41 @@ +(* html-error-sig.sml + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * This is the interface of the error functions supplied to the lexer + * (and transitively, to HTMLElemnts). + *) + +signature HTML_ERROR = + sig + + type context = {file : string option, line : int} + + val badStartTag : context -> string -> unit + (* called on unrecognized start tags; the string is the tag name *) + val badEndTag : context -> string -> unit + (* called on unrecognized end tags, or end tags for empty elements; + * the string is the tag name. + *) + val badAttrVal : context -> (string * string) -> unit + (* called on ill-formed attribute values; the first string is the + * attribute name, and the second is the value. + *) + val lexError : context -> string -> unit + (* called on other lexical errors; the string is an error message. *) + val syntaxError : context -> string -> unit + (* called on syntax errors; the string is an error message. *) + val missingAttrVal : context -> string -> unit + (* called when an attribute name is given without a value *) + val missingAttr : context -> string -> unit + (* called on a missing required attribute; the string is the attribute + * name. + *) + val unknownAttr : context -> string -> unit + (* called on unknown attributes; the string is the attribute name. *) + val unquotedAttrVal : context -> string -> unit + (* called when the attribute value should have been quoted, but wasn't; + * the string is the attribute name. + *) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-gram mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-gram --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-gram 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-gram 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,693 @@ +(* html-gram + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * This grammar parses HTML 3.2. Note that it does not enforce exclusions + * (for the content of FORM, PRE, etc). Exclusions should be enforced as + * a second pass over the parse tree. + *) + +fun textList [text] = text + | textList l = HTML.TextList l + +fun blockList [blk] = blk + | blockList l = HTML.BlockList l + +fun textBlock l = HTML.TextBlock(textList l) + +(* The elements of a definition list (<DL>) are tags (<DT>) and items (<DD>). + * To avoid shift/reduce problems, we parse them and then group them. + *) +datatype deflist_item + = DL_tag of HTML.text + | DL_item of HTML.block + +fun groupDefListContents [] = [] + | groupDefListContents (h :: t) = let + fun gdlc (DL_tag tag, []) = ({dt=[tag], dd=HTML.BlockList[]}, []) + | gdlc (DL_tag tag, h :: t) = let + val ({dt, dd}, r) = gdlc (h, t) + in + ({dt = tag :: dt, dd = dd}, r) + end + | gdlc (DL_item blk, r) = ({dt=[],dd=blk}, groupDefListContents r) + in + op :: (gdlc (h, t)) + end + +(* A list of Text, paragraphs and blocks requires grouping the Text items and + * making an implicit paragraph. We cannot directly use TextList because of + * conflicts. + *) +datatype blklist_item + = BL_text of HTML.text list + | BL_block of HTML.block list + +fun consText (txt, BL_text tl :: r) = BL_text(txt::tl) :: r + | consText (txt, l) = BL_text[txt] :: l + +fun consBlock (blk, BL_block bl :: r) = BL_block(blk::bl) :: r + | consBlock (blk, l) = BL_block[blk] :: l + +fun mkBlock blks = let + fun f (BL_text tl) = textBlock tl + | f (BL_block bl) = blockList bl + in + blockList(List.map f blks) + end + +fun mkBody blks = HTML.BODY{ + background = NONE, + bgcolor = NONE, + text = NONE, + link = NONE, + vlink = NONE, + alink = NONE, + content = mkBlock blks + } + +%% + +(* %pure *) +%verbose + +%nonterm Document of HTML.html + | StartHTML of HTML.cdata option + | EndHTML + | Head of HTML.head_content list + | StartHEAD + | EndHEAD + | HeadContents of HTML.head_content list + | HeadElements of HTML.head_content list + | HeadElement of HTML.head_content + | Body of HTML.body + | StartBODY + | EndBODY + | BodyContent of HTML.block + | BodyContent0 of HTML.body + | BodyContent1 of blklist_item list + | BodyContent2 of blklist_item list + | BodyElement of HTML.block + | AddressContent1 of blklist_item list + | AddressContent2 of blklist_item list + | BlockWOIndex of HTML.block + | Block of HTML.block + | Paragraph of HTML.block + | List of HTML.block + | ListItemList of HTML.list_item list + | ListItem of HTML.list_item + | DLItemList of deflist_item list + | DLItem of deflist_item + | Flow1 of blklist_item list + | Flow2 of blklist_item list + | EndLI + | EndDT + | EndDD + | Preformatted of HTML.block + | optCaption of HTML.caption option + | TableRowList of HTML.tr list + | TableRow of HTML.tr + | TableCellList of HTML.table_cell list + | TableCell of HTML.table_cell + | TextList of HTML.text + | TextList' of HTML.text list + | TextWOScript of HTML.text + | Text of HTML.text + | Font of HTML.text + | Phrase of HTML.text + | Special of HTML.text + | AreaList of HTML.area list + | Form of HTML.text + | OptionList of HTML.select_option list + | EndOPTION + | PCData of HTML.pcdata + | PCDataList of HTML.pcdata list + | PCDataElem of HTML.pcdata + +%term EOF + (* tags in alphabetical order *) + | START_A of HTMLAttrVals.attrs | END_A + | START_ADDRESS | END_ADDRESS + | START_APPLET of HTMLAttrVals.attrs | END_APPLET + | TAG_AREA of HTMLAttrVals.attrs + | START_B | END_B + | TAG_BASE of HTMLAttrVals.attrs + | START_BIG | END_BIG + | START_BLOCKQUOTE | END_BLOCKQUOTE + | START_BODY of HTMLAttrVals.attrs | END_BODY + | TAG_BR of HTMLAttrVals.attrs + | START_CAPTION of HTMLAttrVals.attrs | END_CAPTION + | START_CENTER | END_CENTER + | START_CITE | END_CITE + | START_CODE | END_CODE + | START_DD | END_DD + | START_DFN | END_DFN + | START_DIR of HTMLAttrVals.attrs | END_DIR + | START_DIV of HTMLAttrVals.attrs | END_DIV + | START_DL of HTMLAttrVals.attrs | END_DL + | START_DT | END_DT + | START_EM | END_EM + | START_FONT of HTMLAttrVals.attrs | END_FONT + | START_BASEFONT of HTMLAttrVals.attrs | END_BASEFONT + | START_FORM of HTMLAttrVals.attrs | END_FORM + | START_H1 of HTMLAttrVals.attrs | END_H1 + | START_H2 of HTMLAttrVals.attrs | END_H2 + | START_H3 of HTMLAttrVals.attrs | END_H3 + | START_H4 of HTMLAttrVals.attrs | END_H4 + | START_H5 of HTMLAttrVals.attrs | END_H5 + | START_H6 of HTMLAttrVals.attrs | END_H6 + | START_HEAD | END_HEAD + | TAG_HR of HTMLAttrVals.attrs + | START_HTML | END_HTML + | START_I | END_I + | TAG_IMG of HTMLAttrVals.attrs + | TAG_INPUT of HTMLAttrVals.attrs + | TAG_ISINDEX of HTMLAttrVals.attrs + | START_KBD | END_KBD + | START_LI of HTMLAttrVals.attrs | END_LI + | TAG_LINK of HTMLAttrVals.attrs + | START_MAP of HTMLAttrVals.attrs | END_MAP + | START_MENU of HTMLAttrVals.attrs | END_MENU + | TAG_META of HTMLAttrVals.attrs + | START_OL of HTMLAttrVals.attrs | END_OL + | START_OPTION of HTMLAttrVals.attrs | END_OPTION + | START_P of HTMLAttrVals.attrs | END_P + | TAG_PARAM of HTMLAttrVals.attrs + | START_PRE of HTMLAttrVals.attrs | END_PRE + | START_SAMP | END_SAMP + | START_SCRIPT | END_SCRIPT + | START_SELECT of HTMLAttrVals.attrs | END_SELECT + | START_SMALL | END_SMALL + | START_STRIKE | END_STRIKE + | START_STRONG | END_STRONG + | START_STYLE | END_STYLE + | START_SUB | END_SUB + | START_SUP | END_SUP + | START_TABLE of HTMLAttrVals.attrs | END_TABLE + | START_TD of HTMLAttrVals.attrs | END_TD + | START_TEXTAREA of HTMLAttrVals.attrs | END_TEXTAREA + | START_TH of HTMLAttrVals.attrs | END_TH + | START_TITLE | END_TITLE + | START_TR of HTMLAttrVals.attrs | END_TR + | START_TT | END_TT + | START_U | END_U + | START_UL of HTMLAttrVals.attrs | END_UL + | START_VAR | END_VAR + (* raw text data *) + | PCDATA of string + | CHAR_REF of string (* &#dd; *) + | ENTITY_REF of string (* &#name; *) + +%pure +%pos int +%name HTML +%start Document + +%header ( + functor HTMLLrValsFn ( + structure Token : TOKEN + structure HTMLAttrs : HTML_ATTRS)) + +%arg (ctx) : int -> HTMLAttrs.context + +%eop EOF +%noshift EOF (* avoids infinite loop in error recovery *) + +(** Some error-correction support **) +%value START_A ([]) +%value START_APPLET ([ + ("CODE", HTMLAttrs.NAME ""), + ("WIDTH", HTMLAttrs.NAME ""), + ("HEIGHT", HTMLAttrs.NAME "") + ]) +%value TAG_AREA ([("ALT", HTMLAttrs.NAME "")]) +%value TAG_BASE ([("URL", HTMLAttrs.NAME "")]) +%value START_BODY ([]) +%value TAG_BR ([]) +%value START_CAPTION ([]) +%value START_DIR ([]) +%value START_DIV ([]) +%value START_DL ([]) +%value START_FONT ([]) +%value START_BASEFONT ([]) +%value START_FORM ([]) +%value START_H1 ([]) +%value START_H2 ([]) +%value START_H3 ([]) +%value START_H4 ([]) +%value START_H5 ([]) +%value START_H6 ([]) +%value TAG_HR ([]) +%value TAG_IMG ([("SRC", HTMLAttrs.NAME "")]) +%value TAG_INPUT ([]) +%value TAG_ISINDEX ([]) +%value TAG_LINK ([]) +%value START_MAP ([]) +%value START_MENU ([]) +%value TAG_META ([("CONTENT", HTMLAttrs.NAME "")]) +%value START_OL ([]) +%value START_OPTION ([]) +%value START_P ([]) +%value TAG_PARAM ([("NAME", HTMLAttrs.NAME "")]) +%value START_PRE ([]) +%value START_SELECT ([("NAME", HTMLAttrs.NAME "")]) +%value START_TABLE ([]) +%value START_TD ([]) +%value START_TEXTAREA ([ + ("NAME", HTMLAttrs.NAME ""), + ("ROWS", HTMLAttrs.NAME "0"), + ("COLS", HTMLAttrs.NAME "0") + ]) +%value START_TH ([]) +%value START_TR ([]) +%value START_UL ([]) + +%% + +Document + : StartHTML Head Body EndHTML + (HTML.HTML{version=StartHTML, head=Head, body=Body}) + +StartHTML + : (* empty *) (NONE) + | START_HTML (NONE) + +EndHTML + : (* empty *) () + | END_HTML () + + +(*** Head markup ***) + +Head + : StartHEAD HeadContents EndHEAD + (HeadContents) + +StartHEAD + : (* empty *) () + | START_HEAD () +EndHEAD + : (* empty *) () + | END_HEAD () + +HeadContents + : HeadElements START_TITLE PCData END_TITLE HeadElements + (HeadElements1 @ (HTML.Head_TITLE PCData :: HeadElements2)) + +HeadElements + : (* empty *) + ([]) + | HeadElement HeadElements + (HeadElement :: HeadElements) + +HeadElement + : TAG_META + (HTMLAttrs.mkMETA(ctx TAG_METAleft, TAG_META)) + | TAG_LINK + (HTMLAttrs.mkLINK(ctx TAG_LINKleft, TAG_LINK)) + | TAG_ISINDEX + (let val stuff = + HTMLAttrs.mkISINDEX (ctx TAG_ISINDEXleft, TAG_ISINDEX) + in HTML.Head_ISINDEX stuff end + ) + | TAG_BASE + (HTMLAttrs.mkBASE(ctx TAG_BASEleft, TAG_BASE)) + | START_STYLE PCData END_STYLE + (HTML.Head_STYLE(PCData)) + | START_SCRIPT PCData END_SCRIPT + (HTML.Head_SCRIPT(PCData)) + + +(*** Body content ***) + +Body + : BodyContent0 EndBODY + (BodyContent0) + +EndBODY + : (* empty *) () + | END_BODY () + +BodyContent + : BodyContent1 + (mkBlock BodyContent1) + +BodyContent0 + : START_BODY BodyContent + (HTMLAttrs.mkBODY(ctx START_BODYleft, START_BODY, BodyContent)) + | TextWOScript BodyContent1 + (mkBody(consText(TextWOScript, BodyContent1))) + | BodyElement BodyContent1 + (mkBody(consBlock(BodyElement, BodyContent1))) + | BlockWOIndex BodyContent1 + (mkBody(consBlock(BlockWOIndex, BodyContent1))) + | Paragraph END_P BodyContent1 + (mkBody(consBlock(Paragraph, BodyContent1))) + | Paragraph BodyContent2 + (mkBody(consBlock(Paragraph, BodyContent2))) + +BodyContent1 + : (* empty *) + ([]) + | Text BodyContent1 + (consText(Text, BodyContent1)) + | BodyElement BodyContent1 + (consBlock(BodyElement, BodyContent1)) + | Block BodyContent1 + (consBlock(Block, BodyContent1)) + | Paragraph END_P BodyContent1 + (consBlock(Paragraph, BodyContent1)) + | Paragraph BodyContent2 + (consBlock(Paragraph, BodyContent2)) + +BodyContent2 + : (* empty *) + ([]) + | BodyElement BodyContent1 + (consBlock(BodyElement, BodyContent1)) + | Block BodyContent1 + (consBlock(Block, BodyContent1)) + | Paragraph END_P BodyContent1 + (consBlock(Paragraph, BodyContent1)) + | Paragraph BodyContent2 + (consBlock(Paragraph, BodyContent2)) + +BodyElement + : START_H1 TextList END_H1 + (HTMLAttrs.mkHn(1, ctx START_H1left, START_H1, TextList)) + | START_H2 TextList END_H2 + (HTMLAttrs.mkHn(2, ctx START_H2left, START_H2, TextList)) + | START_H3 TextList END_H3 + (HTMLAttrs.mkHn(3, ctx START_H3left, START_H3, TextList)) + | START_H4 TextList END_H4 + (HTMLAttrs.mkHn(4, ctx START_H4left, START_H4, TextList)) + | START_H5 TextList END_H5 + (HTMLAttrs.mkHn(5, ctx START_H5left, START_H5, TextList)) + | START_H6 TextList END_H6 + (HTMLAttrs.mkHn(6, ctx START_H6left, START_H6, TextList)) + | START_ADDRESS AddressContent1 END_ADDRESS + (HTML.ADDRESS(mkBlock AddressContent1)) + +AddressContent1 + : (* empty *) + ([]) + | Text AddressContent1 + (consText(Text, AddressContent1)) + | Paragraph END_P AddressContent1 + (consBlock(Paragraph, AddressContent1)) + | Paragraph AddressContent2 + (consBlock(Paragraph, AddressContent2)) + +AddressContent2 + : (* empty *) + ([]) + | Paragraph END_P AddressContent1 + (consBlock(Paragraph, AddressContent1)) + | Paragraph AddressContent2 + (consBlock(Paragraph, AddressContent2)) + +(*** Block ***) + +BlockWOIndex + : List + (List) + | Preformatted + (Preformatted) + | START_DIV BodyContent END_DIV + (HTMLAttrs.mkDIV(ctx START_DIVleft, START_DIV, BodyContent)) + | START_CENTER BodyContent END_CENTER + (HTML.CENTER BodyContent) + | START_BLOCKQUOTE BodyContent END_BLOCKQUOTE + (HTML.BLOCKQUOTE BodyContent) + | START_FORM BodyContent END_FORM + (HTMLAttrs.mkFORM(ctx START_FORMleft, START_FORM, BodyContent)) + | TAG_HR + (HTMLAttrs.mkHR(ctx TAG_HRleft, TAG_HR)) + | START_TABLE optCaption TableRowList END_TABLE + (HTMLAttrs.mkTABLE( + ctx START_TABLEleft, START_TABLE, + {caption = optCaption, body = TableRowList}) + ) + +Block + : BlockWOIndex + (BlockWOIndex) + | TAG_ISINDEX + (let val stuff = + HTMLAttrs.mkISINDEX (ctx TAG_ISINDEXleft, TAG_ISINDEX) + in HTML.ISINDEX stuff end + ) + +Paragraph + : START_P TextList + (HTMLAttrs.mkP(ctx START_Pleft, START_P, TextList)) + +List + : START_UL ListItemList END_UL + (HTMLAttrs.mkUL(ctx START_ULleft, START_UL, ListItemList)) + | START_OL ListItemList END_OL + (HTMLAttrs.mkOL(ctx START_OLleft, START_OL, ListItemList)) + | START_DIR ListItemList END_DIR + (HTMLAttrs.mkDIR(ctx START_DIRleft, START_DIR, ListItemList)) + | START_MENU ListItemList END_MENU + (HTMLAttrs.mkMENU(ctx START_MENUleft, START_MENU, ListItemList)) + | START_DL DLItemList END_DL + (HTMLAttrs.mkDL( + ctx START_DLleft, START_DL, + groupDefListContents DLItemList) + ) + +ListItemList + : (* empty *) + ([]) + | ListItem ListItemList + (ListItem :: ListItemList) + +ListItem + : START_LI Flow1 EndLI + (HTMLAttrs.mkLI(ctx START_LIleft, START_LI, mkBlock Flow1)) + +DLItemList + : (* empty *) + ([]) + | DLItem DLItemList + (DLItem :: DLItemList) + +DLItem + : START_DT TextList EndDT + (DL_tag TextList) + | START_DD Flow1 EndDD + (DL_item(mkBlock Flow1)) + +Flow1 + : (* empty *) + ([]) + | Text Flow1 + (consText(Text, Flow1)) + | Block Flow1 + (consBlock(Block, Flow1)) + | Paragraph END_P Flow1 + (consBlock(Paragraph, Flow1)) + | Paragraph Flow2 + (consBlock(Paragraph, Flow2)) + +Flow2 + : (* empty *) + ([]) + | Block Flow1 + (consBlock(Block, Flow1)) + | Paragraph END_P Flow1 + (consBlock(Paragraph, Flow1)) + | Paragraph Flow2 + (consBlock(Paragraph, Flow2)) + +EndLI + : (* empty *) () + | END_LI () +EndDT + : (* empty *) () + | END_DT () +EndDD + : (* empty *) () + | END_DD () + +Preformatted + : START_PRE TextList END_PRE + (HTMLAttrs.mkPRE(ctx START_PREleft, START_PRE, TextList)) + +(*** Tables ***) + +optCaption + : (* empty *) + (NONE) + | START_CAPTION TextList END_CAPTION + (SOME(HTMLAttrs.mkCAPTION( + ctx START_CAPTIONleft, START_CAPTION, TextList))) + +TableRowList + : TableRow + ([TableRow]) + | TableRow TableRowList + (TableRow :: TableRowList) + +TableRow + : START_TR TableCellList + (HTMLAttrs.mkTR(ctx START_TRleft, START_TR, TableCellList)) + | START_TR TableCellList END_TR + (HTMLAttrs.mkTR(ctx START_TRleft, START_TR, TableCellList)) + +TableCellList + : TableCell + ([TableCell]) + | TableCell TableCellList + (TableCell :: TableCellList) + +TableCell + : START_TH BodyContent END_TH + (HTMLAttrs.mkTH(ctx START_THleft, START_TH, BodyContent)) + | START_TH BodyContent + (HTMLAttrs.mkTH(ctx START_THleft, START_TH, BodyContent)) + | START_TD BodyContent END_TD + (HTMLAttrs.mkTD(ctx START_TDleft, START_TD, BodyContent)) + | START_TD BodyContent + (HTMLAttrs.mkTD(ctx START_TDleft, START_TD, BodyContent)) + +(*** Text ***) + +TextList + : TextList' + (textList TextList') + +TextList' + : (* empty *) + ([]) + | Text TextList' + (Text :: TextList') + +TextWOScript + : PCDataElem + (HTML.PCDATA PCDataElem) + | Font + (Font) + | Phrase + (Phrase) + | Special + (Special) + | Form + (Form) + +Text + : TextWOScript + (TextWOScript) + | START_SCRIPT PCData END_SCRIPT + (HTML.SCRIPT PCData) + +Font + : START_TT TextList END_TT + (HTML.TT(TextList)) + | START_I TextList END_I + (HTML.I(TextList)) + | START_B TextList END_B + (HTML.B(TextList)) + | START_U TextList END_U + (HTML.U(TextList)) + | START_STRIKE TextList END_STRIKE + (HTML.STRIKE(TextList)) + | START_BIG TextList END_BIG + (HTML.BIG(TextList)) + | START_SMALL TextList END_SMALL + (HTML.SMALL(TextList)) + | START_SUB TextList END_SUB + (HTML.SUB(TextList)) + | START_SUP TextList END_SUP + (HTML.SUP(TextList)) +Phrase + : START_EM TextList END_EM + (HTML.EM(TextList)) + | START_STRONG TextList END_STRONG + (HTML.STRONG(TextList)) + | START_CODE TextList END_CODE + (HTML.CODE(TextList)) + | START_DFN TextList END_DFN + (HTML.DFN(TextList)) + | START_SAMP TextList END_SAMP + (HTML.SAMP(TextList)) + | START_KBD TextList END_KBD + (HTML.KBD(TextList)) + | START_VAR TextList END_VAR + (HTML.VAR(TextList)) + | START_CITE TextList END_CITE + (HTML.CITE(TextList)) + +Special + : START_A TextList END_A + (HTMLAttrs.mkA(ctx START_Aleft, START_A, TextList)) + | TAG_IMG + (HTMLAttrs.mkIMG(ctx TAG_IMGleft, TAG_IMG)) + | START_APPLET TextList END_APPLET + (HTMLAttrs.mkAPPLET(ctx START_APPLETleft, START_APPLET, TextList)) + | START_FONT TextList END_FONT + (HTMLAttrs.mkFONT(ctx START_FONTleft, START_FONT, TextList)) + | START_BASEFONT TextList END_BASEFONT + (HTMLAttrs.mkBASEFONT( + ctx START_BASEFONTleft, START_BASEFONT, TextList) + ) + | TAG_BR + (HTMLAttrs.mkBR(ctx TAG_BRleft, TAG_BR)) + | START_MAP AreaList END_MAP + (HTMLAttrs.mkMAP(ctx START_MAPleft, START_MAP, AreaList)) + | TAG_PARAM + (HTMLAttrs.mkPARAM(ctx TAG_PARAMleft, TAG_PARAM)) + +AreaList + : (* empty *) + ([]) + | TAG_AREA AreaList + (HTMLAttrs.mkAREA(ctx TAG_AREAleft, TAG_AREA) :: AreaList) + +Form + : TAG_INPUT + (HTMLAttrs.mkINPUT(ctx TAG_INPUTleft, TAG_INPUT)) + | START_SELECT OptionList END_SELECT + (HTMLAttrs.mkSELECT(ctx START_SELECTleft, START_SELECT, OptionList)) + | START_TEXTAREA PCData END_TEXTAREA + (HTMLAttrs.mkTEXTAREA( + ctx START_TEXTAREAleft, START_TEXTAREA, + PCData) + ) + +OptionList + : (* empty *) + ([]) + | START_OPTION PCData EndOPTION OptionList + (HTMLAttrs.mkOPTION(ctx START_OPTIONleft, START_OPTION, PCData) + :: OptionList + ) + +EndOPTION + : (* empty *) + () + | END_OPTION + () + + +(*** PCDATA list ***) + +PCData + : PCDataList + (concat PCDataList) + +PCDataList + : (* empty *) + ([]) + | PCDataElem PCDataList + (PCDataElem :: PCDataList) + +PCDataElem + : PCDATA + (PCDATA) + | CHAR_REF + (CHAR_REF) + | ENTITY_REF + (ENTITY_REF) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-gram.sig mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-gram.sig --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-gram.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-gram.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,140 @@ +signature HTML_TOKENS = +sig +type ('a,'b) token +type svalue +val ENTITY_REF: (string) * 'a * 'a -> (svalue,'a) token +val CHAR_REF: (string) * 'a * 'a -> (svalue,'a) token +val PCDATA: (string) * 'a * 'a -> (svalue,'a) token +val END_VAR: 'a * 'a -> (svalue,'a) token +val START_VAR: 'a * 'a -> (svalue,'a) token +val END_UL: 'a * 'a -> (svalue,'a) token +val START_UL: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_U: 'a * 'a -> (svalue,'a) token +val START_U: 'a * 'a -> (svalue,'a) token +val END_TT: 'a * 'a -> (svalue,'a) token +val START_TT: 'a * 'a -> (svalue,'a) token +val END_TR: 'a * 'a -> (svalue,'a) token +val START_TR: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_TITLE: 'a * 'a -> (svalue,'a) token +val START_TITLE: 'a * 'a -> (svalue,'a) token +val END_TH: 'a * 'a -> (svalue,'a) token +val START_TH: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_TEXTAREA: 'a * 'a -> (svalue,'a) token +val START_TEXTAREA: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_TD: 'a * 'a -> (svalue,'a) token +val START_TD: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_TABLE: 'a * 'a -> (svalue,'a) token +val START_TABLE: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_SUP: 'a * 'a -> (svalue,'a) token +val START_SUP: 'a * 'a -> (svalue,'a) token +val END_SUB: 'a * 'a -> (svalue,'a) token +val START_SUB: 'a * 'a -> (svalue,'a) token +val END_STYLE: 'a * 'a -> (svalue,'a) token +val START_STYLE: 'a * 'a -> (svalue,'a) token +val END_STRONG: 'a * 'a -> (svalue,'a) token +val START_STRONG: 'a * 'a -> (svalue,'a) token +val END_STRIKE: 'a * 'a -> (svalue,'a) token +val START_STRIKE: 'a * 'a -> (svalue,'a) token +val END_SMALL: 'a * 'a -> (svalue,'a) token +val START_SMALL: 'a * 'a -> (svalue,'a) token +val END_SELECT: 'a * 'a -> (svalue,'a) token +val START_SELECT: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_SCRIPT: 'a * 'a -> (svalue,'a) token +val START_SCRIPT: 'a * 'a -> (svalue,'a) token +val END_SAMP: 'a * 'a -> (svalue,'a) token +val START_SAMP: 'a * 'a -> (svalue,'a) token +val END_PRE: 'a * 'a -> (svalue,'a) token +val START_PRE: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val TAG_PARAM: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_P: 'a * 'a -> (svalue,'a) token +val START_P: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_OPTION: 'a * 'a -> (svalue,'a) token +val START_OPTION: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_OL: 'a * 'a -> (svalue,'a) token +val START_OL: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val TAG_META: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_MENU: 'a * 'a -> (svalue,'a) token +val START_MENU: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_MAP: 'a * 'a -> (svalue,'a) token +val START_MAP: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val TAG_LINK: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_LI: 'a * 'a -> (svalue,'a) token +val START_LI: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_KBD: 'a * 'a -> (svalue,'a) token +val START_KBD: 'a * 'a -> (svalue,'a) token +val TAG_ISINDEX: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val TAG_INPUT: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val TAG_IMG: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_I: 'a * 'a -> (svalue,'a) token +val START_I: 'a * 'a -> (svalue,'a) token +val END_HTML: 'a * 'a -> (svalue,'a) token +val START_HTML: 'a * 'a -> (svalue,'a) token +val TAG_HR: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_HEAD: 'a * 'a -> (svalue,'a) token +val START_HEAD: 'a * 'a -> (svalue,'a) token +val END_H6: 'a * 'a -> (svalue,'a) token +val START_H6: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_H5: 'a * 'a -> (svalue,'a) token +val START_H5: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_H4: 'a * 'a -> (svalue,'a) token +val START_H4: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_H3: 'a * 'a -> (svalue,'a) token +val START_H3: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_H2: 'a * 'a -> (svalue,'a) token +val START_H2: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_H1: 'a * 'a -> (svalue,'a) token +val START_H1: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_FORM: 'a * 'a -> (svalue,'a) token +val START_FORM: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_BASEFONT: 'a * 'a -> (svalue,'a) token +val START_BASEFONT: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_FONT: 'a * 'a -> (svalue,'a) token +val START_FONT: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_EM: 'a * 'a -> (svalue,'a) token +val START_EM: 'a * 'a -> (svalue,'a) token +val END_DT: 'a * 'a -> (svalue,'a) token +val START_DT: 'a * 'a -> (svalue,'a) token +val END_DL: 'a * 'a -> (svalue,'a) token +val START_DL: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_DIV: 'a * 'a -> (svalue,'a) token +val START_DIV: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_DIR: 'a * 'a -> (svalue,'a) token +val START_DIR: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_DFN: 'a * 'a -> (svalue,'a) token +val START_DFN: 'a * 'a -> (svalue,'a) token +val END_DD: 'a * 'a -> (svalue,'a) token +val START_DD: 'a * 'a -> (svalue,'a) token +val END_CODE: 'a * 'a -> (svalue,'a) token +val START_CODE: 'a * 'a -> (svalue,'a) token +val END_CITE: 'a * 'a -> (svalue,'a) token +val START_CITE: 'a * 'a -> (svalue,'a) token +val END_CENTER: 'a * 'a -> (svalue,'a) token +val START_CENTER: 'a * 'a -> (svalue,'a) token +val END_CAPTION: 'a * 'a -> (svalue,'a) token +val START_CAPTION: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val TAG_BR: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_BODY: 'a * 'a -> (svalue,'a) token +val START_BODY: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_BLOCKQUOTE: 'a * 'a -> (svalue,'a) token +val START_BLOCKQUOTE: 'a * 'a -> (svalue,'a) token +val END_BIG: 'a * 'a -> (svalue,'a) token +val START_BIG: 'a * 'a -> (svalue,'a) token +val TAG_BASE: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_B: 'a * 'a -> (svalue,'a) token +val START_B: 'a * 'a -> (svalue,'a) token +val TAG_AREA: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_APPLET: 'a * 'a -> (svalue,'a) token +val START_APPLET: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val END_ADDRESS: 'a * 'a -> (svalue,'a) token +val START_ADDRESS: 'a * 'a -> (svalue,'a) token +val END_A: 'a * 'a -> (svalue,'a) token +val START_A: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token +val EOF: 'a * 'a -> (svalue,'a) token +end +signature HTML_LRVALS= +sig +structure Tokens : HTML_TOKENS +structure ParserData:PARSER_DATA +sharing type ParserData.Token.token = Tokens.token +sharing type ParserData.svalue = Tokens.svalue +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-gram.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-gram.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-gram.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-gram.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2477 @@ + + + functor HTMLLrValsFn ( + structure Token : TOKEN + structure HTMLAttrs : HTML_ATTRS) = +struct +structure ParserData= +struct +structure Header = +struct +(* html-gram + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * This grammar parses HTML 3.2. Note that it does not enforce exclusions + * (for the content of FORM, PRE, etc). Exclusions should be enforced as + * a second pass over the parse tree. + *) + +fun textList [text] = text + | textList l = HTML.TextList l + +fun blockList [blk] = blk + | blockList l = HTML.BlockList l + +fun textBlock l = HTML.TextBlock(textList l) + +(* The elements of a definition list (<DL>) are tags (<DT>) and items (<DD>). + * To avoid shift/reduce problems, we parse them and then group them. + *) +datatype deflist_item + = DL_tag of HTML.text + | DL_item of HTML.block + +fun groupDefListContents [] = [] + | groupDefListContents (h :: t) = let + fun gdlc (DL_tag tag, []) = ({dt=[tag], dd=HTML.BlockList[]}, []) + | gdlc (DL_tag tag, h :: t) = let + val ({dt, dd}, r) = gdlc (h, t) + in + ({dt = tag :: dt, dd = dd}, r) + end + | gdlc (DL_item blk, r) = ({dt=[],dd=blk}, groupDefListContents r) + in + op :: (gdlc (h, t)) + end + +(* A list of Text, paragraphs and blocks requires grouping the Text items and + * making an implicit paragraph. We cannot directly use TextList because of + * conflicts. + *) +datatype blklist_item + = BL_text of HTML.text list + | BL_block of HTML.block list + +fun consText (txt, BL_text tl :: r) = BL_text(txt::tl) :: r + | consText (txt, l) = BL_text[txt] :: l + +fun consBlock (blk, BL_block bl :: r) = BL_block(blk::bl) :: r + | consBlock (blk, l) = BL_block[blk] :: l + +fun mkBlock blks = let + fun f (BL_text tl) = textBlock tl + | f (BL_block bl) = blockList bl + in + blockList(List.map f blks) + end + +fun mkBody blks = HTML.BODY{ + background = NONE, + bgcolor = NONE, + text = NONE, + link = NONE, + vlink = NONE, + alink = NONE, + content = mkBlock blks + } + + +end +structure LrTable = Token.LrTable +structure Token = Token +local open LrTable in +val table=let val actionRows = +"\ +\\001\000\001\000\000\000\000\000\ +\\001\000\002\000\081\000\004\000\080\000\006\000\079\000\009\000\078\000\ +\\012\000\077\000\014\000\076\000\016\000\075\000\018\000\074\000\ +\\021\000\073\000\023\000\072\000\025\000\071\000\029\000\070\000\ +\\031\000\069\000\033\000\068\000\035\000\067\000\039\000\066\000\ +\\041\000\065\000\043\000\064\000\045\000\063\000\047\000\062\000\ +\\049\000\061\000\051\000\060\000\053\000\059\000\055\000\058\000\ +\\057\000\057\000\061\000\056\000\064\000\055\000\066\000\054\000\ +\\067\000\053\000\069\000\052\000\074\000\051\000\076\000\050\000\ +\\079\000\049\000\083\000\048\000\085\000\047\000\086\000\046\000\ +\\088\000\045\000\092\000\044\000\094\000\043\000\096\000\042\000\ +\\098\000\041\000\102\000\040\000\104\000\039\000\106\000\038\000\ +\\110\000\037\000\118\000\036\000\120\000\035\000\122\000\034\000\ +\\124\000\033\000\126\000\032\000\127\000\031\000\128\000\030\000\000\000\ +\\001\000\003\000\241\000\000\000\ +\\001\000\005\000\240\000\000\000\ +\\001\000\007\000\235\000\000\000\ +\\001\000\010\000\234\000\000\000\ +\\001\000\013\000\233\000\000\000\ +\\001\000\015\000\232\000\000\000\ +\\001\000\020\000\004\001\000\000\ +\\001\000\022\000\231\000\000\000\ +\\001\000\024\000\230\000\000\000\ +\\001\000\026\000\229\000\000\000\ +\\001\000\030\000\228\000\000\000\ +\\001\000\032\000\227\000\000\000\ +\\001\000\034\000\226\000\000\000\ +\\001\000\036\000\223\000\000\000\ +\\001\000\040\000\221\000\000\000\ +\\001\000\042\000\220\000\000\000\ +\\001\000\044\000\219\000\000\000\ +\\001\000\046\000\218\000\000\000\ +\\001\000\048\000\217\000\000\000\ +\\001\000\050\000\216\000\000\000\ +\\001\000\052\000\215\000\000\000\ +\\001\000\054\000\214\000\000\000\ +\\001\000\056\000\213\000\000\000\ +\\001\000\058\000\212\000\000\000\ +\\001\000\065\000\211\000\000\000\ +\\001\000\070\000\210\000\000\000\ +\\001\000\075\000\208\000\000\000\ +\\001\000\077\000\207\000\000\000\ +\\001\000\080\000\206\000\000\000\ +\\001\000\087\000\205\000\000\000\ +\\001\000\089\000\204\000\000\000\ +\\001\000\091\000\170\000\000\000\ +\\001\000\091\000\244\000\000\000\ +\\001\000\093\000\202\000\000\000\ +\\001\000\095\000\201\000\000\000\ +\\001\000\097\000\200\000\000\000\ +\\001\000\099\000\199\000\000\000\ +\\001\000\101\000\169\000\000\000\ +\\001\000\103\000\198\000\000\000\ +\\001\000\105\000\197\000\000\000\ +\\001\000\107\000\255\000\000\000\ +\\001\000\108\000\003\001\112\000\002\001\000\000\ +\\001\000\111\000\192\000\000\000\ +\\001\000\114\000\083\000\000\000\ +\\001\000\115\000\242\000\000\000\ +\\001\000\116\000\195\000\000\000\ +\\001\000\119\000\191\000\000\000\ +\\001\000\121\000\190\000\000\000\ +\\001\000\123\000\185\000\000\000\ +\\001\000\125\000\183\000\000\000\ +\\029\001\000\000\ +\\030\001\062\000\004\000\000\000\ +\\031\001\000\000\ +\\032\001\063\000\109\000\000\000\ +\\033\001\000\000\ +\\034\001\000\000\ +\\035\001\059\000\007\000\000\000\ +\\036\001\000\000\ +\\037\001\060\000\085\000\000\000\ +\\038\001\000\000\ +\\039\001\000\000\ +\\040\001\011\000\016\000\068\000\015\000\073\000\014\000\078\000\013\000\ +\\090\000\012\000\100\000\011\000\000\000\ +\\041\001\000\000\ +\\042\001\000\000\ +\\043\001\000\000\ +\\044\001\000\000\ +\\045\001\000\000\ +\\046\001\000\000\ +\\047\001\000\000\ +\\048\001\000\000\ +\\049\001\017\000\107\000\000\000\ +\\050\001\000\000\ +\\051\001\000\000\ +\\052\001\000\000\ +\\053\001\000\000\ +\\054\001\000\000\ +\\055\001\000\000\ +\\056\001\000\000\ +\\057\001\000\000\ +\\058\001\002\000\081\000\004\000\080\000\006\000\079\000\009\000\078\000\ +\\012\000\077\000\014\000\076\000\018\000\074\000\021\000\073\000\ +\\023\000\072\000\025\000\071\000\029\000\070\000\031\000\069\000\ +\\033\000\068\000\035\000\067\000\039\000\066\000\041\000\065\000\ +\\043\000\064\000\045\000\063\000\047\000\062\000\049\000\061\000\ +\\051\000\060\000\053\000\059\000\055\000\058\000\057\000\057\000\ +\\061\000\056\000\064\000\055\000\066\000\054\000\067\000\053\000\ +\\068\000\098\000\069\000\052\000\074\000\051\000\076\000\050\000\ +\\079\000\049\000\083\000\048\000\085\000\047\000\086\000\046\000\ +\\088\000\045\000\090\000\097\000\092\000\044\000\094\000\043\000\ +\\096\000\042\000\098\000\041\000\102\000\040\000\104\000\039\000\ +\\106\000\038\000\110\000\037\000\118\000\036\000\120\000\035\000\ +\\122\000\034\000\124\000\033\000\126\000\032\000\127\000\031\000\ +\\128\000\030\000\000\000\ +\\059\001\000\000\ +\\060\001\000\000\ +\\061\001\000\000\ +\\062\001\000\000\ +\\063\001\000\000\ +\\064\001\004\000\080\000\014\000\076\000\021\000\073\000\031\000\069\000\ +\\033\000\068\000\035\000\067\000\045\000\063\000\047\000\062\000\ +\\049\000\061\000\051\000\060\000\053\000\059\000\055\000\058\000\ +\\057\000\057\000\061\000\056\000\068\000\098\000\076\000\050\000\ +\\079\000\049\000\083\000\048\000\084\000\103\000\086\000\046\000\ +\\106\000\038\000\122\000\034\000\000\000\ +\\064\001\004\000\080\000\014\000\076\000\021\000\073\000\031\000\069\000\ +\\033\000\068\000\035\000\067\000\045\000\063\000\047\000\062\000\ +\\049\000\061\000\051\000\060\000\053\000\059\000\055\000\058\000\ +\\057\000\057\000\061\000\056\000\068\000\098\000\076\000\050\000\ +\\079\000\049\000\083\000\048\000\084\000\173\000\086\000\046\000\ +\\106\000\038\000\122\000\034\000\000\000\ +\\064\001\004\000\080\000\014\000\076\000\021\000\073\000\031\000\069\000\ +\\033\000\068\000\035\000\067\000\045\000\063\000\047\000\062\000\ +\\049\000\061\000\051\000\060\000\053\000\059\000\055\000\058\000\ +\\057\000\057\000\061\000\056\000\068\000\098\000\076\000\050\000\ +\\079\000\049\000\083\000\048\000\084\000\178\000\086\000\046\000\ +\\106\000\038\000\122\000\034\000\000\000\ +\\065\001\000\000\ +\\066\001\000\000\ +\\067\001\000\000\ +\\068\001\000\000\ +\\069\001\000\000\ +\\070\001\000\000\ +\\071\001\000\000\ +\\072\001\000\000\ +\\073\001\000\000\ +\\074\001\000\000\ +\\075\001\000\000\ +\\076\001\002\000\081\000\006\000\079\000\009\000\078\000\012\000\077\000\ +\\018\000\074\000\023\000\072\000\025\000\071\000\029\000\070\000\ +\\039\000\066\000\041\000\065\000\043\000\064\000\064\000\055\000\ +\\066\000\054\000\067\000\053\000\069\000\052\000\074\000\051\000\ +\\083\000\048\000\085\000\047\000\088\000\045\000\090\000\097\000\ +\\092\000\044\000\094\000\043\000\096\000\042\000\098\000\041\000\ +\\102\000\040\000\104\000\039\000\110\000\037\000\118\000\036\000\ +\\120\000\035\000\124\000\033\000\126\000\032\000\127\000\031\000\ +\\128\000\030\000\000\000\ +\\077\001\000\000\ +\\078\001\000\000\ +\\079\001\000\000\ +\\080\001\083\000\048\000\084\000\239\000\000\000\ +\\080\001\083\000\048\000\084\000\012\001\000\000\ +\\081\001\000\000\ +\\082\001\000\000\ +\\083\001\000\000\ +\\084\001\000\000\ +\\085\001\000\000\ +\\086\001\000\000\ +\\087\001\000\000\ +\\088\001\000\000\ +\\089\001\000\000\ +\\090\001\000\000\ +\\091\001\000\000\ +\\092\001\000\000\ +\\093\001\000\000\ +\\094\001\000\000\ +\\095\001\000\000\ +\\096\001\000\000\ +\\097\001\000\000\ +\\098\001\000\000\ +\\099\001\071\000\115\000\000\000\ +\\100\001\000\000\ +\\101\001\000\000\ +\\102\001\027\000\151\000\037\000\150\000\000\000\ +\\103\001\000\000\ +\\104\001\000\000\ +\\105\001\000\000\ +\\106\001\002\000\081\000\006\000\079\000\009\000\078\000\012\000\077\000\ +\\014\000\076\000\018\000\074\000\021\000\073\000\023\000\072\000\ +\\025\000\071\000\029\000\070\000\031\000\069\000\033\000\068\000\ +\\035\000\067\000\039\000\066\000\041\000\065\000\043\000\064\000\ +\\045\000\063\000\061\000\056\000\064\000\055\000\066\000\054\000\ +\\067\000\053\000\068\000\098\000\069\000\052\000\074\000\051\000\ +\\076\000\050\000\079\000\049\000\083\000\048\000\085\000\047\000\ +\\086\000\046\000\088\000\045\000\090\000\097\000\092\000\044\000\ +\\094\000\043\000\096\000\042\000\098\000\041\000\102\000\040\000\ +\\104\000\039\000\106\000\038\000\110\000\037\000\118\000\036\000\ +\\120\000\035\000\122\000\034\000\124\000\033\000\126\000\032\000\ +\\127\000\031\000\128\000\030\000\000\000\ +\\107\001\000\000\ +\\108\001\000\000\ +\\109\001\000\000\ +\\110\001\000\000\ +\\111\001\014\000\076\000\021\000\073\000\031\000\069\000\033\000\068\000\ +\\035\000\067\000\045\000\063\000\061\000\056\000\068\000\098\000\ +\\076\000\050\000\079\000\049\000\083\000\048\000\084\000\252\000\ +\\086\000\046\000\106\000\038\000\122\000\034\000\000\000\ +\\111\001\014\000\076\000\021\000\073\000\031\000\069\000\033\000\068\000\ +\\035\000\067\000\045\000\063\000\061\000\056\000\068\000\098\000\ +\\076\000\050\000\079\000\049\000\083\000\048\000\084\000\016\001\ +\\086\000\046\000\106\000\038\000\122\000\034\000\000\000\ +\\112\001\000\000\ +\\113\001\000\000\ +\\114\001\000\000\ +\\115\001\072\000\248\000\000\000\ +\\116\001\000\000\ +\\117\001\038\000\008\001\000\000\ +\\118\001\000\000\ +\\119\001\028\000\010\001\000\000\ +\\120\001\000\000\ +\\121\001\000\000\ +\\122\001\019\000\120\000\000\000\ +\\123\001\000\000\ +\\124\001\116\000\195\000\000\000\ +\\125\001\000\000\ +\\126\001\117\000\020\001\000\000\ +\\127\001\000\000\ +\\128\001\108\000\003\001\112\000\002\001\000\000\ +\\129\001\000\000\ +\\130\001\000\000\ +\\131\001\113\000\026\001\000\000\ +\\132\001\000\000\ +\\133\001\109\000\027\001\000\000\ +\\134\001\000\000\ +\\135\001\002\000\081\000\006\000\079\000\009\000\078\000\012\000\077\000\ +\\018\000\074\000\023\000\072\000\025\000\071\000\029\000\070\000\ +\\039\000\066\000\041\000\065\000\043\000\064\000\064\000\055\000\ +\\066\000\054\000\067\000\053\000\069\000\052\000\074\000\051\000\ +\\085\000\047\000\088\000\045\000\090\000\097\000\092\000\044\000\ +\\094\000\043\000\096\000\042\000\098\000\041\000\102\000\040\000\ +\\104\000\039\000\110\000\037\000\118\000\036\000\120\000\035\000\ +\\124\000\033\000\126\000\032\000\127\000\031\000\128\000\030\000\000\000\ +\\136\001\000\000\ +\\137\001\000\000\ +\\138\001\000\000\ +\\139\001\000\000\ +\\140\001\000\000\ +\\141\001\000\000\ +\\142\001\000\000\ +\\143\001\000\000\ +\\144\001\000\000\ +\\145\001\000\000\ +\\146\001\000\000\ +\\147\001\000\000\ +\\148\001\000\000\ +\\149\001\000\000\ +\\150\001\000\000\ +\\151\001\000\000\ +\\152\001\000\000\ +\\153\001\000\000\ +\\154\001\000\000\ +\\155\001\000\000\ +\\156\001\000\000\ +\\157\001\000\000\ +\\158\001\000\000\ +\\159\001\000\000\ +\\160\001\000\000\ +\\161\001\000\000\ +\\162\001\000\000\ +\\163\001\000\000\ +\\164\001\000\000\ +\\165\001\000\000\ +\\166\001\000\000\ +\\167\001\000\000\ +\\168\001\000\000\ +\\169\001\008\000\134\000\000\000\ +\\170\001\000\000\ +\\171\001\000\000\ +\\172\001\000\000\ +\\173\001\000\000\ +\\174\001\081\000\127\000\000\000\ +\\175\001\000\000\ +\\176\001\082\000\006\001\000\000\ +\\177\001\000\000\ +\\178\001\000\000\ +\\179\001\126\000\032\000\127\000\031\000\128\000\030\000\000\000\ +\\180\001\000\000\ +\\181\001\000\000\ +\\182\001\000\000\ +\\183\001\000\000\ +\" +val actionRowNumbers = +"\053\000\058\000\054\000\063\000\ +\\001\000\059\000\063\000\045\000\ +\\060\000\206\000\206\000\065\000\ +\\066\000\067\000\068\000\164\000\ +\\168\000\167\000\166\000\165\000\ +\\081\000\110\000\109\000\087\000\ +\\081\000\081\000\072\000\055\000\ +\\210\000\209\000\208\000\162\000\ +\\125\000\162\000\162\000\206\000\ +\\149\000\162\000\162\000\162\000\ +\\162\000\162\000\201\000\162\000\ +\\162\000\195\000\162\000\125\000\ +\\125\000\196\000\162\000\198\000\ +\\189\000\162\000\115\000\162\000\ +\\162\000\162\000\162\000\162\000\ +\\162\000\081\000\162\000\162\000\ +\\162\000\128\000\081\000\125\000\ +\\162\000\162\000\162\000\081\000\ +\\193\000\081\000\081\000\162\000\ +\\162\000\162\000\101\000\162\000\ +\\064\000\206\000\057\000\061\000\ +\\206\000\205\000\039\000\033\000\ +\\081\000\169\000\088\000\081\000\ +\\117\000\081\000\076\000\206\000\ +\\118\000\089\000\081\000\081\000\ +\\080\000\081\000\078\000\077\000\ +\\071\000\073\000\052\000\056\000\ +\\162\000\161\000\051\000\125\000\ +\\050\000\132\000\049\000\048\000\ +\\044\000\047\000\162\000\041\000\ +\\040\000\038\000\037\000\036\000\ +\\035\000\206\000\032\000\031\000\ +\\119\000\030\000\029\000\028\000\ +\\196\000\027\000\026\000\025\000\ +\\024\000\023\000\022\000\021\000\ +\\020\000\074\000\019\000\018\000\ +\\017\000\016\000\128\000\015\000\ +\\162\000\132\000\014\000\013\000\ +\\012\000\011\000\010\000\009\000\ +\\075\000\007\000\006\000\005\000\ +\\004\000\101\000\105\000\003\000\ +\\002\000\046\000\207\000\069\000\ +\\070\000\082\000\086\000\081\000\ +\\084\000\083\000\034\000\093\000\ +\\081\000\091\000\090\000\079\000\ +\\163\000\186\000\126\000\120\000\ +\\132\000\142\000\137\000\132\000\ +\\174\000\171\000\200\000\151\000\ +\\042\000\043\000\008\000\179\000\ +\\178\000\181\000\175\000\177\000\ +\\199\000\203\000\184\000\148\000\ +\\121\000\123\000\194\000\197\000\ +\\185\000\172\000\099\000\098\000\ +\\097\000\096\000\095\000\094\000\ +\\114\000\192\000\191\000\180\000\ +\\129\000\124\000\144\000\146\000\ +\\111\000\122\000\183\000\182\000\ +\\187\000\112\000\113\000\176\000\ +\\173\000\190\000\102\000\106\000\ +\\104\000\101\000\100\000\188\000\ +\\063\000\085\000\170\000\092\000\ +\\133\000\127\000\143\000\136\000\ +\\138\000\132\000\132\000\134\000\ +\\152\000\116\000\155\000\153\000\ +\\081\000\081\000\150\000\201\000\ +\\204\000\130\000\145\000\131\000\ +\\147\000\108\000\101\000\103\000\ +\\062\000\141\000\132\000\139\000\ +\\135\000\156\000\154\000\158\000\ +\\160\000\202\000\107\000\140\000\ +\\157\000\159\000\000\000" +val gotoT = +"\ +\\001\000\026\001\002\000\001\000\000\000\ +\\004\000\004\000\005\000\003\000\000\000\ +\\000\000\ +\\007\000\008\000\008\000\007\000\009\000\006\000\000\000\ +\\010\000\027\000\014\000\026\000\017\000\025\000\020\000\024\000\ +\\022\000\023\000\023\000\022\000\033\000\021\000\041\000\020\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\008\000\080\000\009\000\006\000\000\000\ +\\000\000\ +\\006\000\082\000\000\000\ +\\050\000\086\000\051\000\085\000\052\000\084\000\000\000\ +\\050\000\087\000\051\000\085\000\052\000\084\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\015\000\094\000\017\000\093\000\020\000\092\000\021\000\091\000\ +\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ +\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ +\\047\000\016\000\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\016\000\100\000\017\000\099\000\020\000\092\000\021\000\098\000\ +\\022\000\097\000\023\000\022\000\033\000\021\000\000\000\ +\\015\000\102\000\017\000\093\000\020\000\092\000\021\000\091\000\ +\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ +\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ +\\047\000\016\000\052\000\015\000\000\000\ +\\015\000\103\000\017\000\093\000\020\000\092\000\021\000\091\000\ +\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ +\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ +\\047\000\016\000\052\000\015\000\000\000\ +\\012\000\104\000\000\000\ +\\003\000\106\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\039\000\110\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\024\000\112\000\025\000\111\000\000\000\ +\\039\000\114\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\115\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\050\000\116\000\051\000\085\000\052\000\084\000\000\000\ +\\034\000\117\000\000\000\ +\\039\000\119\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\120\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\121\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\122\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\123\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\048\000\124\000\000\000\ +\\039\000\126\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\127\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\039\000\128\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\024\000\129\000\025\000\111\000\000\000\ +\\024\000\130\000\025\000\111\000\000\000\ +\\046\000\131\000\000\000\ +\\039\000\133\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\039\000\134\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\039\000\135\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\136\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\137\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\138\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\139\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\140\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\013\000\142\000\015\000\141\000\017\000\093\000\020\000\092\000\ +\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ +\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ +\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ +\\039\000\143\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\144\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\145\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\026\000\147\000\027\000\146\000\000\000\ +\\013\000\150\000\015\000\141\000\017\000\093\000\020\000\092\000\ +\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ +\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ +\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ +\\024\000\151\000\025\000\111\000\000\000\ +\\039\000\152\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\153\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\154\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\013\000\155\000\015\000\141\000\017\000\093\000\020\000\092\000\ +\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ +\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ +\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ +\\000\000\ +\\013\000\156\000\015\000\141\000\017\000\093\000\020\000\092\000\ +\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ +\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ +\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ +\\013\000\157\000\015\000\141\000\017\000\093\000\020\000\092\000\ +\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ +\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ +\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ +\\039\000\158\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\159\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\160\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\018\000\163\000\022\000\162\000\041\000\089\000\042\000\161\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\039\000\164\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\050\000\165\000\051\000\085\000\052\000\084\000\000\000\ +\\000\000\ +\\000\000\ +\\051\000\166\000\052\000\084\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\015\000\169\000\017\000\093\000\020\000\092\000\021\000\091\000\ +\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ +\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ +\\047\000\016\000\052\000\015\000\000\000\ +\\000\000\ +\\016\000\170\000\017\000\099\000\020\000\092\000\021\000\098\000\ +\\022\000\097\000\023\000\022\000\033\000\021\000\000\000\ +\\015\000\172\000\017\000\093\000\020\000\092\000\021\000\091\000\ +\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ +\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ +\\047\000\016\000\052\000\015\000\000\000\ +\\000\000\ +\\015\000\173\000\017\000\093\000\020\000\092\000\021\000\091\000\ +\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ +\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ +\\047\000\016\000\052\000\015\000\000\000\ +\\000\000\ +\\050\000\174\000\051\000\085\000\052\000\084\000\000\000\ +\\000\000\ +\\016\000\175\000\017\000\099\000\020\000\092\000\021\000\098\000\ +\\022\000\097\000\023\000\022\000\033\000\021\000\000\000\ +\\015\000\177\000\017\000\093\000\020\000\092\000\021\000\091\000\ +\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ +\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ +\\047\000\016\000\052\000\015\000\000\000\ +\\015\000\178\000\017\000\093\000\020\000\092\000\021\000\091\000\ +\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ +\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ +\\047\000\016\000\052\000\015\000\000\000\ +\\000\000\ +\\015\000\179\000\017\000\093\000\020\000\092\000\021\000\091\000\ +\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ +\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ +\\047\000\016\000\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\040\000\180\000\041\000\089\000\042\000\108\000\043\000\019\000\ +\\044\000\018\000\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\024\000\182\000\025\000\111\000\000\000\ +\\000\000\ +\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ +\\028\000\185\000\033\000\021\000\041\000\089\000\042\000\184\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\035\000\192\000\036\000\191\000\000\000\ +\\039\000\194\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\050\000\201\000\051\000\085\000\052\000\084\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\046\000\207\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\026\000\220\000\027\000\146\000\000\000\ +\\000\000\ +\\039\000\222\000\040\000\109\000\041\000\089\000\042\000\108\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ +\\028\000\223\000\033\000\021\000\041\000\089\000\042\000\184\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\018\000\234\000\022\000\162\000\041\000\089\000\042\000\161\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\019\000\236\000\022\000\235\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\015\000\241\000\017\000\093\000\020\000\092\000\021\000\091\000\ +\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ +\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ +\\047\000\016\000\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\015\000\243\000\017\000\093\000\020\000\092\000\021\000\091\000\ +\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ +\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ +\\047\000\016\000\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ +\\028\000\244\000\033\000\021\000\041\000\089\000\042\000\184\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\030\000\245\000\000\000\ +\\020\000\092\000\021\000\249\000\022\000\248\000\023\000\022\000\ +\\029\000\247\000\033\000\021\000\000\000\ +\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ +\\028\000\251\000\033\000\021\000\041\000\089\000\042\000\184\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\035\000\252\000\036\000\191\000\000\000\ +\\000\000\ +\\037\000\255\000\038\000\254\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\049\000\003\001\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\031\000\005\001\000\000\ +\\032\000\007\001\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\019\000\009\001\022\000\235\000\000\000\ +\\000\000\ +\\018\000\011\001\022\000\162\000\041\000\089\000\042\000\161\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\008\000\012\001\009\000\006\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\020\000\092\000\021\000\249\000\022\000\248\000\023\000\022\000\ +\\029\000\013\001\033\000\021\000\000\000\ +\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ +\\028\000\015\001\033\000\021\000\041\000\089\000\042\000\184\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ +\\028\000\016\001\033\000\021\000\041\000\089\000\042\000\184\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\037\000\017\001\038\000\254\000\000\000\ +\\000\000\ +\\013\000\019\001\015\000\141\000\017\000\093\000\020\000\092\000\ +\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ +\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ +\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ +\\013\000\020\001\015\000\141\000\017\000\093\000\020\000\092\000\ +\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ +\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ +\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ +\\000\000\ +\\048\000\021\001\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\018\000\022\001\022\000\162\000\041\000\089\000\042\000\161\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ +\\028\000\023\001\033\000\021\000\041\000\089\000\042\000\184\000\ +\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ +\\052\000\015\000\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\\000\000\ +\" +val numstates = 283 +val numrules = 155 +val s = ref "" and index = ref 0 +val string_to_int = fn () => +let val i = !index +in index := i+2; Char.ord(String.sub(!s,i)) + Char.ord(String.sub(!s,i+1)) * 256 +end +val string_to_list = fn s' => + let val len = String.size s' + fun f () = + if !index < len then string_to_int() :: f() + else nil + in index := 0; s := s'; f () + end +val string_to_pairlist = fn (conv_key,conv_entry) => + let fun f () = + case string_to_int() + of 0 => EMPTY + | n => PAIR(conv_key (n-1),conv_entry (string_to_int()),f()) + in f + end +val string_to_pairlist_default = fn (conv_key,conv_entry) => + let val conv_row = string_to_pairlist(conv_key,conv_entry) + in fn () => + let val default = conv_entry(string_to_int()) + val row = conv_row() + in (row,default) + end + end +val string_to_table = fn (convert_row,s') => + let val len = String.size s' + fun f ()= + if !index < len then convert_row() :: f() + else nil + in (s := s'; index := 0; f ()) + end +local + val memo = Array.array(numstates+numrules,ERROR) + val _ =let fun g i=(Array.update(memo,i,REDUCE(i-numstates)); g(i+1)) + fun f i = + if i=numstates then g i + else (Array.update(memo,i,SHIFT (STATE i)); f (i+1)) + in f 0 handle General.Subscript => () + end +in +val entry_to_action = fn 0 => ACCEPT | 1 => ERROR | j => Array.sub(memo,(j-2)) +end +val gotoT=Array.fromList(string_to_table(string_to_pairlist(NT,STATE),gotoT)) +val actionRows=string_to_table(string_to_pairlist_default(T,entry_to_action),actionRows) +val actionRowNumbers = string_to_list actionRowNumbers +val actionT = let val actionRowLookUp= +let val a=Array.fromList(actionRows) in fn i=>Array.sub(a,i) end +in Array.fromList(List.map actionRowLookUp actionRowNumbers) +end +in LrTable.mkLrTable {actions=actionT,gotos=gotoT,numRules=numrules, +numStates=numstates,initialState=STATE 0} +end +end +local open Header in +type pos = int +type arg = int -> HTMLAttrs.context +structure MlyValue = +struct +datatype svalue = VOID | ntVOID of unit | ENTITY_REF of (string) + | CHAR_REF of (string) | PCDATA of (string) + | START_UL of (HTMLAttrVals.attrs) + | START_TR of (HTMLAttrVals.attrs) + | START_TH of (HTMLAttrVals.attrs) + | START_TEXTAREA of (HTMLAttrVals.attrs) + | START_TD of (HTMLAttrVals.attrs) + | START_TABLE of (HTMLAttrVals.attrs) + | START_SELECT of (HTMLAttrVals.attrs) + | START_PRE of (HTMLAttrVals.attrs) + | TAG_PARAM of (HTMLAttrVals.attrs) + | START_P of (HTMLAttrVals.attrs) + | START_OPTION of (HTMLAttrVals.attrs) + | START_OL of (HTMLAttrVals.attrs) + | TAG_META of (HTMLAttrVals.attrs) + | START_MENU of (HTMLAttrVals.attrs) + | START_MAP of (HTMLAttrVals.attrs) + | TAG_LINK of (HTMLAttrVals.attrs) + | START_LI of (HTMLAttrVals.attrs) + | TAG_ISINDEX of (HTMLAttrVals.attrs) + | TAG_INPUT of (HTMLAttrVals.attrs) + | TAG_IMG of (HTMLAttrVals.attrs) | TAG_HR of (HTMLAttrVals.attrs) + | START_H6 of (HTMLAttrVals.attrs) + | START_H5 of (HTMLAttrVals.attrs) + | START_H4 of (HTMLAttrVals.attrs) + | START_H3 of (HTMLAttrVals.attrs) + | START_H2 of (HTMLAttrVals.attrs) + | START_H1 of (HTMLAttrVals.attrs) + | START_FORM of (HTMLAttrVals.attrs) + | START_BASEFONT of (HTMLAttrVals.attrs) + | START_FONT of (HTMLAttrVals.attrs) + | START_DL of (HTMLAttrVals.attrs) + | START_DIV of (HTMLAttrVals.attrs) + | START_DIR of (HTMLAttrVals.attrs) + | START_CAPTION of (HTMLAttrVals.attrs) + | TAG_BR of (HTMLAttrVals.attrs) + | START_BODY of (HTMLAttrVals.attrs) + | TAG_BASE of (HTMLAttrVals.attrs) + | TAG_AREA of (HTMLAttrVals.attrs) + | START_APPLET of (HTMLAttrVals.attrs) + | START_A of (HTMLAttrVals.attrs) | PCDataElem of (HTML.pcdata) + | PCDataList of (HTML.pcdata list) | PCData of (HTML.pcdata) + | OptionList of (HTML.select_option list) | Form of (HTML.text) + | AreaList of (HTML.area list) | Special of (HTML.text) + | Phrase of (HTML.text) | Font of (HTML.text) + | Text of (HTML.text) | TextWOScript of (HTML.text) + | TextList' of (HTML.text list) | TextList of (HTML.text) + | TableCell of (HTML.table_cell) + | TableCellList of (HTML.table_cell list) | TableRow of (HTML.tr) + | TableRowList of (HTML.tr list) + | optCaption of (HTML.caption option) + | Preformatted of (HTML.block) | Flow2 of (blklist_item list) + | Flow1 of (blklist_item list) | DLItem of (deflist_item) + | DLItemList of (deflist_item list) | ListItem of (HTML.list_item) + | ListItemList of (HTML.list_item list) | List of (HTML.block) + | Paragraph of (HTML.block) | Block of (HTML.block) + | BlockWOIndex of (HTML.block) + | AddressContent2 of (blklist_item list) + | AddressContent1 of (blklist_item list) + | BodyElement of (HTML.block) | BodyContent2 of (blklist_item list) + | BodyContent1 of (blklist_item list) | BodyContent0 of (HTML.body) + | BodyContent of (HTML.block) | Body of (HTML.body) + | HeadElement of (HTML.head_content) + | HeadElements of (HTML.head_content list) + | HeadContents of (HTML.head_content list) + | Head of (HTML.head_content list) + | StartHTML of (HTML.cdata option) | Document of (HTML.html) +end +type svalue = MlyValue.svalue +type result = HTML.html +end +structure EC= +struct +open LrTable +infix 5 $$ +fun x $$ y = y::x +val is_keyword = +fn _ => false +val preferred_change : (term list * term list) list = +nil +val noShift = +fn (T 0) => true | _ => false +val showTerminal = +fn (T 0) => "EOF" + | (T 1) => "START_A" + | (T 2) => "END_A" + | (T 3) => "START_ADDRESS" + | (T 4) => "END_ADDRESS" + | (T 5) => "START_APPLET" + | (T 6) => "END_APPLET" + | (T 7) => "TAG_AREA" + | (T 8) => "START_B" + | (T 9) => "END_B" + | (T 10) => "TAG_BASE" + | (T 11) => "START_BIG" + | (T 12) => "END_BIG" + | (T 13) => "START_BLOCKQUOTE" + | (T 14) => "END_BLOCKQUOTE" + | (T 15) => "START_BODY" + | (T 16) => "END_BODY" + | (T 17) => "TAG_BR" + | (T 18) => "START_CAPTION" + | (T 19) => "END_CAPTION" + | (T 20) => "START_CENTER" + | (T 21) => "END_CENTER" + | (T 22) => "START_CITE" + | (T 23) => "END_CITE" + | (T 24) => "START_CODE" + | (T 25) => "END_CODE" + | (T 26) => "START_DD" + | (T 27) => "END_DD" + | (T 28) => "START_DFN" + | (T 29) => "END_DFN" + | (T 30) => "START_DIR" + | (T 31) => "END_DIR" + | (T 32) => "START_DIV" + | (T 33) => "END_DIV" + | (T 34) => "START_DL" + | (T 35) => "END_DL" + | (T 36) => "START_DT" + | (T 37) => "END_DT" + | (T 38) => "START_EM" + | (T 39) => "END_EM" + | (T 40) => "START_FONT" + | (T 41) => "END_FONT" + | (T 42) => "START_BASEFONT" + | (T 43) => "END_BASEFONT" + | (T 44) => "START_FORM" + | (T 45) => "END_FORM" + | (T 46) => "START_H1" + | (T 47) => "END_H1" + | (T 48) => "START_H2" + | (T 49) => "END_H2" + | (T 50) => "START_H3" + | (T 51) => "END_H3" + | (T 52) => "START_H4" + | (T 53) => "END_H4" + | (T 54) => "START_H5" + | (T 55) => "END_H5" + | (T 56) => "START_H6" + | (T 57) => "END_H6" + | (T 58) => "START_HEAD" + | (T 59) => "END_HEAD" + | (T 60) => "TAG_HR" + | (T 61) => "START_HTML" + | (T 62) => "END_HTML" + | (T 63) => "START_I" + | (T 64) => "END_I" + | (T 65) => "TAG_IMG" + | (T 66) => "TAG_INPUT" + | (T 67) => "TAG_ISINDEX" + | (T 68) => "START_KBD" + | (T 69) => "END_KBD" + | (T 70) => "START_LI" + | (T 71) => "END_LI" + | (T 72) => "TAG_LINK" + | (T 73) => "START_MAP" + | (T 74) => "END_MAP" + | (T 75) => "START_MENU" + | (T 76) => "END_MENU" + | (T 77) => "TAG_META" + | (T 78) => "START_OL" + | (T 79) => "END_OL" + | (T 80) => "START_OPTION" + | (T 81) => "END_OPTION" + | (T 82) => "START_P" + | (T 83) => "END_P" + | (T 84) => "TAG_PARAM" + | (T 85) => "START_PRE" + | (T 86) => "END_PRE" + | (T 87) => "START_SAMP" + | (T 88) => "END_SAMP" + | (T 89) => "START_SCRIPT" + | (T 90) => "END_SCRIPT" + | (T 91) => "START_SELECT" + | (T 92) => "END_SELECT" + | (T 93) => "START_SMALL" + | (T 94) => "END_SMALL" + | (T 95) => "START_STRIKE" + | (T 96) => "END_STRIKE" + | (T 97) => "START_STRONG" + | (T 98) => "END_STRONG" + | (T 99) => "START_STYLE" + | (T 100) => "END_STYLE" + | (T 101) => "START_SUB" + | (T 102) => "END_SUB" + | (T 103) => "START_SUP" + | (T 104) => "END_SUP" + | (T 105) => "START_TABLE" + | (T 106) => "END_TABLE" + | (T 107) => "START_TD" + | (T 108) => "END_TD" + | (T 109) => "START_TEXTAREA" + | (T 110) => "END_TEXTAREA" + | (T 111) => "START_TH" + | (T 112) => "END_TH" + | (T 113) => "START_TITLE" + | (T 114) => "END_TITLE" + | (T 115) => "START_TR" + | (T 116) => "END_TR" + | (T 117) => "START_TT" + | (T 118) => "END_TT" + | (T 119) => "START_U" + | (T 120) => "END_U" + | (T 121) => "START_UL" + | (T 122) => "END_UL" + | (T 123) => "START_VAR" + | (T 124) => "END_VAR" + | (T 125) => "PCDATA" + | (T 126) => "CHAR_REF" + | (T 127) => "ENTITY_REF" + | _ => "bogus-term" +local open Header in +val errtermvalue= +fn (T 1) => MlyValue.START_A(([])) | +(T 5) => MlyValue.START_APPLET(( +[ + ("CODE", HTMLAttrs.NAME ""), + ("WIDTH", HTMLAttrs.NAME ""), + ("HEIGHT", HTMLAttrs.NAME "") + ] +)) | +(T 7) => MlyValue.TAG_AREA(([("ALT", HTMLAttrs.NAME "")])) | +(T 10) => MlyValue.TAG_BASE(([("URL", HTMLAttrs.NAME "")])) | +(T 15) => MlyValue.START_BODY(([])) | +(T 17) => MlyValue.TAG_BR(([])) | +(T 18) => MlyValue.START_CAPTION(([])) | +(T 30) => MlyValue.START_DIR(([])) | +(T 32) => MlyValue.START_DIV(([])) | +(T 34) => MlyValue.START_DL(([])) | +(T 40) => MlyValue.START_FONT(([])) | +(T 42) => MlyValue.START_BASEFONT(([])) | +(T 44) => MlyValue.START_FORM(([])) | +(T 46) => MlyValue.START_H1(([])) | +(T 48) => MlyValue.START_H2(([])) | +(T 50) => MlyValue.START_H3(([])) | +(T 52) => MlyValue.START_H4(([])) | +(T 54) => MlyValue.START_H5(([])) | +(T 56) => MlyValue.START_H6(([])) | +(T 60) => MlyValue.TAG_HR(([])) | +(T 65) => MlyValue.TAG_IMG(([("SRC", HTMLAttrs.NAME "")])) | +(T 66) => MlyValue.TAG_INPUT(([])) | +(T 67) => MlyValue.TAG_ISINDEX(([])) | +(T 72) => MlyValue.TAG_LINK(([])) | +(T 73) => MlyValue.START_MAP(([])) | +(T 75) => MlyValue.START_MENU(([])) | +(T 77) => MlyValue.TAG_META(([("CONTENT", HTMLAttrs.NAME "")])) | +(T 78) => MlyValue.START_OL(([])) | +(T 80) => MlyValue.START_OPTION(([])) | +(T 82) => MlyValue.START_P(([])) | +(T 84) => MlyValue.TAG_PARAM(([("NAME", HTMLAttrs.NAME "")])) | +(T 85) => MlyValue.START_PRE(([])) | +(T 91) => MlyValue.START_SELECT(([("NAME", HTMLAttrs.NAME "")])) | +(T 105) => MlyValue.START_TABLE(([])) | +(T 107) => MlyValue.START_TD(([])) | +(T 109) => MlyValue.START_TEXTAREA(( +[ + ("NAME", HTMLAttrs.NAME ""), + ("ROWS", HTMLAttrs.NAME "0"), + ("COLS", HTMLAttrs.NAME "0") + ] +)) | +(T 111) => MlyValue.START_TH(([])) | +(T 115) => MlyValue.START_TR(([])) | +(T 121) => MlyValue.START_UL(([])) | +_ => MlyValue.VOID +end +val terms : term list = nil + $$ (T 124) $$ (T 123) $$ (T 122) $$ (T 120) $$ (T 119) $$ (T 118) $$ +(T 117) $$ (T 116) $$ (T 114) $$ (T 113) $$ (T 112) $$ (T 110) $$ (T +108) $$ (T 106) $$ (T 104) $$ (T 103) $$ (T 102) $$ (T 101) $$ (T 100) + $$ (T 99) $$ (T 98) $$ (T 97) $$ (T 96) $$ (T 95) $$ (T 94) $$ (T 93) + $$ (T 92) $$ (T 90) $$ (T 89) $$ (T 88) $$ (T 87) $$ (T 86) $$ (T 83) + $$ (T 81) $$ (T 79) $$ (T 76) $$ (T 74) $$ (T 71) $$ (T 69) $$ (T 68) + $$ (T 64) $$ (T 63) $$ (T 62) $$ (T 61) $$ (T 59) $$ (T 58) $$ (T 57) + $$ (T 55) $$ (T 53) $$ (T 51) $$ (T 49) $$ (T 47) $$ (T 45) $$ (T 43) + $$ (T 41) $$ (T 39) $$ (T 38) $$ (T 37) $$ (T 36) $$ (T 35) $$ (T 33) + $$ (T 31) $$ (T 29) $$ (T 28) $$ (T 27) $$ (T 26) $$ (T 25) $$ (T 24) + $$ (T 23) $$ (T 22) $$ (T 21) $$ (T 20) $$ (T 19) $$ (T 16) $$ (T 14) + $$ (T 13) $$ (T 12) $$ (T 11) $$ (T 9) $$ (T 8) $$ (T 6) $$ (T 4) $$ +(T 3) $$ (T 2) $$ (T 0)end +structure Actions = +struct +exception mlyAction of int +local open Header in +val actions = +fn (i392,defaultPos,stack, + (ctx):arg) => +case (i392,stack) +of ( 0, ( ( _, ( _, _, EndHTML1right)) :: ( _, ( MlyValue.Body Body, + _, _)) :: ( _, ( MlyValue.Head Head, _, _)) :: ( _, ( +MlyValue.StartHTML StartHTML, StartHTML1left, _)) :: rest671)) => let + val result = MlyValue.Document ( +HTML.HTML{version=StartHTML, head=Head, body=Body}) + in ( LrTable.NT 0, ( result, StartHTML1left, EndHTML1right), rest671) + +end +| ( 1, ( rest671)) => let val result = MlyValue.StartHTML (NONE) + in ( LrTable.NT 1, ( result, defaultPos, defaultPos), rest671) +end +| ( 2, ( ( _, ( _, START_HTML1left, START_HTML1right)) :: rest671)) + => let val result = MlyValue.StartHTML (NONE) + in ( LrTable.NT 1, ( result, START_HTML1left, START_HTML1right), +rest671) +end +| ( 3, ( rest671)) => let val result = MlyValue.ntVOID () + in ( LrTable.NT 2, ( result, defaultPos, defaultPos), rest671) +end +| ( 4, ( ( _, ( _, END_HTML1left, END_HTML1right)) :: rest671)) => + let val result = MlyValue.ntVOID () + in ( LrTable.NT 2, ( result, END_HTML1left, END_HTML1right), rest671) + +end +| ( 5, ( ( _, ( _, _, EndHEAD1right)) :: ( _, ( MlyValue.HeadContents + HeadContents, _, _)) :: ( _, ( _, StartHEAD1left, _)) :: rest671)) => + let val result = MlyValue.Head (HeadContents) + in ( LrTable.NT 3, ( result, StartHEAD1left, EndHEAD1right), rest671) + +end +| ( 6, ( rest671)) => let val result = MlyValue.ntVOID () + in ( LrTable.NT 4, ( result, defaultPos, defaultPos), rest671) +end +| ( 7, ( ( _, ( _, START_HEAD1left, START_HEAD1right)) :: rest671)) + => let val result = MlyValue.ntVOID () + in ( LrTable.NT 4, ( result, START_HEAD1left, START_HEAD1right), +rest671) +end +| ( 8, ( rest671)) => let val result = MlyValue.ntVOID () + in ( LrTable.NT 5, ( result, defaultPos, defaultPos), rest671) +end +| ( 9, ( ( _, ( _, END_HEAD1left, END_HEAD1right)) :: rest671)) => + let val result = MlyValue.ntVOID () + in ( LrTable.NT 5, ( result, END_HEAD1left, END_HEAD1right), rest671) + +end +| ( 10, ( ( _, ( MlyValue.HeadElements HeadElements2, _, +HeadElements2right)) :: _ :: ( _, ( MlyValue.PCData PCData, _, _)) :: + _ :: ( _, ( MlyValue.HeadElements HeadElements1, HeadElements1left, _ +)) :: rest671)) => let val result = MlyValue.HeadContents ( +HeadElements1 @ (HTML.Head_TITLE PCData :: HeadElements2)) + in ( LrTable.NT 6, ( result, HeadElements1left, HeadElements2right), +rest671) +end +| ( 11, ( rest671)) => let val result = MlyValue.HeadElements ([]) + in ( LrTable.NT 7, ( result, defaultPos, defaultPos), rest671) +end +| ( 12, ( ( _, ( MlyValue.HeadElements HeadElements, _, +HeadElements1right)) :: ( _, ( MlyValue.HeadElement HeadElement, +HeadElement1left, _)) :: rest671)) => let val result = +MlyValue.HeadElements (HeadElement :: HeadElements) + in ( LrTable.NT 7, ( result, HeadElement1left, HeadElements1right), +rest671) +end +| ( 13, ( ( _, ( MlyValue.TAG_META TAG_META, (TAG_METAleft as +TAG_META1left), TAG_META1right)) :: rest671)) => let val result = +MlyValue.HeadElement (HTMLAttrs.mkMETA(ctx TAG_METAleft, TAG_META)) + in ( LrTable.NT 8, ( result, TAG_META1left, TAG_META1right), rest671) + +end +| ( 14, ( ( _, ( MlyValue.TAG_LINK TAG_LINK, (TAG_LINKleft as +TAG_LINK1left), TAG_LINK1right)) :: rest671)) => let val result = +MlyValue.HeadElement (HTMLAttrs.mkLINK(ctx TAG_LINKleft, TAG_LINK)) + in ( LrTable.NT 8, ( result, TAG_LINK1left, TAG_LINK1right), rest671) + +end +| ( 15, ( ( _, ( MlyValue.TAG_ISINDEX TAG_ISINDEX, (TAG_ISINDEXleft + as TAG_ISINDEX1left), TAG_ISINDEX1right)) :: rest671)) => let val +result = MlyValue.HeadElement ( +let val stuff = + HTMLAttrs.mkISINDEX (ctx TAG_ISINDEXleft, TAG_ISINDEX) + in HTML.Head_ISINDEX stuff end + +) + in ( LrTable.NT 8, ( result, TAG_ISINDEX1left, TAG_ISINDEX1right), +rest671) +end +| ( 16, ( ( _, ( MlyValue.TAG_BASE TAG_BASE, (TAG_BASEleft as +TAG_BASE1left), TAG_BASE1right)) :: rest671)) => let val result = +MlyValue.HeadElement (HTMLAttrs.mkBASE(ctx TAG_BASEleft, TAG_BASE)) + in ( LrTable.NT 8, ( result, TAG_BASE1left, TAG_BASE1right), rest671) + +end +| ( 17, ( ( _, ( _, _, END_STYLE1right)) :: ( _, ( MlyValue.PCData +PCData, _, _)) :: ( _, ( _, START_STYLE1left, _)) :: rest671)) => let + val result = MlyValue.HeadElement (HTML.Head_STYLE(PCData)) + in ( LrTable.NT 8, ( result, START_STYLE1left, END_STYLE1right), +rest671) +end +| ( 18, ( ( _, ( _, _, END_SCRIPT1right)) :: ( _, ( MlyValue.PCData +PCData, _, _)) :: ( _, ( _, START_SCRIPT1left, _)) :: rest671)) => let + val result = MlyValue.HeadElement (HTML.Head_SCRIPT(PCData)) + in ( LrTable.NT 8, ( result, START_SCRIPT1left, END_SCRIPT1right), +rest671) +end +| ( 19, ( ( _, ( _, _, EndBODY1right)) :: ( _, ( +MlyValue.BodyContent0 BodyContent0, BodyContent01left, _)) :: rest671) +) => let val result = MlyValue.Body (BodyContent0) + in ( LrTable.NT 9, ( result, BodyContent01left, EndBODY1right), +rest671) +end +| ( 20, ( rest671)) => let val result = MlyValue.ntVOID () + in ( LrTable.NT 11, ( result, defaultPos, defaultPos), rest671) +end +| ( 21, ( ( _, ( _, END_BODY1left, END_BODY1right)) :: rest671)) => + let val result = MlyValue.ntVOID () + in ( LrTable.NT 11, ( result, END_BODY1left, END_BODY1right), rest671 +) +end +| ( 22, ( ( _, ( MlyValue.BodyContent1 BodyContent1, +BodyContent11left, BodyContent11right)) :: rest671)) => let val +result = MlyValue.BodyContent (mkBlock BodyContent1) + in ( LrTable.NT 12, ( result, BodyContent11left, BodyContent11right), + rest671) +end +| ( 23, ( ( _, ( MlyValue.BodyContent BodyContent, _, +BodyContent1right)) :: ( _, ( MlyValue.START_BODY START_BODY, ( +START_BODYleft as START_BODY1left), _)) :: rest671)) => let val +result = MlyValue.BodyContent0 ( +HTMLAttrs.mkBODY(ctx START_BODYleft, START_BODY, BodyContent)) + in ( LrTable.NT 13, ( result, START_BODY1left, BodyContent1right), +rest671) +end +| ( 24, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, +BodyContent11right)) :: ( _, ( MlyValue.TextWOScript TextWOScript, +TextWOScript1left, _)) :: rest671)) => let val result = +MlyValue.BodyContent0 (mkBody(consText(TextWOScript, BodyContent1))) + in ( LrTable.NT 13, ( result, TextWOScript1left, BodyContent11right), + rest671) +end +| ( 25, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, +BodyContent11right)) :: ( _, ( MlyValue.BodyElement BodyElement, +BodyElement1left, _)) :: rest671)) => let val result = +MlyValue.BodyContent0 (mkBody(consBlock(BodyElement, BodyContent1))) + in ( LrTable.NT 13, ( result, BodyElement1left, BodyContent11right), +rest671) +end +| ( 26, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, +BodyContent11right)) :: ( _, ( MlyValue.BlockWOIndex BlockWOIndex, +BlockWOIndex1left, _)) :: rest671)) => let val result = +MlyValue.BodyContent0 (mkBody(consBlock(BlockWOIndex, BodyContent1))) + in ( LrTable.NT 13, ( result, BlockWOIndex1left, BodyContent11right), + rest671) +end +| ( 27, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, +BodyContent11right)) :: _ :: ( _, ( MlyValue.Paragraph Paragraph, +Paragraph1left, _)) :: rest671)) => let val result = +MlyValue.BodyContent0 (mkBody(consBlock(Paragraph, BodyContent1))) + in ( LrTable.NT 13, ( result, Paragraph1left, BodyContent11right), +rest671) +end +| ( 28, ( ( _, ( MlyValue.BodyContent2 BodyContent2, _, +BodyContent21right)) :: ( _, ( MlyValue.Paragraph Paragraph, +Paragraph1left, _)) :: rest671)) => let val result = +MlyValue.BodyContent0 (mkBody(consBlock(Paragraph, BodyContent2))) + in ( LrTable.NT 13, ( result, Paragraph1left, BodyContent21right), +rest671) +end +| ( 29, ( rest671)) => let val result = MlyValue.BodyContent1 ([]) + in ( LrTable.NT 14, ( result, defaultPos, defaultPos), rest671) +end +| ( 30, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, +BodyContent11right)) :: ( _, ( MlyValue.Text Text, Text1left, _)) :: +rest671)) => let val result = MlyValue.BodyContent1 ( +consText(Text, BodyContent1)) + in ( LrTable.NT 14, ( result, Text1left, BodyContent11right), rest671 +) +end +| ( 31, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, +BodyContent11right)) :: ( _, ( MlyValue.BodyElement BodyElement, +BodyElement1left, _)) :: rest671)) => let val result = +MlyValue.BodyContent1 (consBlock(BodyElement, BodyContent1)) + in ( LrTable.NT 14, ( result, BodyElement1left, BodyContent11right), +rest671) +end +| ( 32, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, +BodyContent11right)) :: ( _, ( MlyValue.Block Block, Block1left, _)) + :: rest671)) => let val result = MlyValue.BodyContent1 ( +consBlock(Block, BodyContent1)) + in ( LrTable.NT 14, ( result, Block1left, BodyContent11right), +rest671) +end +| ( 33, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, +BodyContent11right)) :: _ :: ( _, ( MlyValue.Paragraph Paragraph, +Paragraph1left, _)) :: rest671)) => let val result = +MlyValue.BodyContent1 (consBlock(Paragraph, BodyContent1)) + in ( LrTable.NT 14, ( result, Paragraph1left, BodyContent11right), +rest671) +end +| ( 34, ( ( _, ( MlyValue.BodyContent2 BodyContent2, _, +BodyContent21right)) :: ( _, ( MlyValue.Paragraph Paragraph, +Paragraph1left, _)) :: rest671)) => let val result = +MlyValue.BodyContent1 (consBlock(Paragraph, BodyContent2)) + in ( LrTable.NT 14, ( result, Paragraph1left, BodyContent21right), +rest671) +end +| ( 35, ( rest671)) => let val result = MlyValue.BodyContent2 ([]) + in ( LrTable.NT 15, ( result, defaultPos, defaultPos), rest671) +end +| ( 36, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, +BodyContent11right)) :: ( _, ( MlyValue.BodyElement BodyElement, +BodyElement1left, _)) :: rest671)) => let val result = +MlyValue.BodyContent2 (consBlock(BodyElement, BodyContent1)) + in ( LrTable.NT 15, ( result, BodyElement1left, BodyContent11right), +rest671) +end +| ( 37, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, +BodyContent11right)) :: ( _, ( MlyValue.Block Block, Block1left, _)) + :: rest671)) => let val result = MlyValue.BodyContent2 ( +consBlock(Block, BodyContent1)) + in ( LrTable.NT 15, ( result, Block1left, BodyContent11right), +rest671) +end +| ( 38, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, +BodyContent11right)) :: _ :: ( _, ( MlyValue.Paragraph Paragraph, +Paragraph1left, _)) :: rest671)) => let val result = +MlyValue.BodyContent2 (consBlock(Paragraph, BodyContent1)) + in ( LrTable.NT 15, ( result, Paragraph1left, BodyContent11right), +rest671) +end +| ( 39, ( ( _, ( MlyValue.BodyContent2 BodyContent2, _, +BodyContent21right)) :: ( _, ( MlyValue.Paragraph Paragraph, +Paragraph1left, _)) :: rest671)) => let val result = +MlyValue.BodyContent2 (consBlock(Paragraph, BodyContent2)) + in ( LrTable.NT 15, ( result, Paragraph1left, BodyContent21right), +rest671) +end +| ( 40, ( ( _, ( _, _, END_H11right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( MlyValue.START_H1 START_H1, (START_H1left + as START_H11left), _)) :: rest671)) => let val result = +MlyValue.BodyElement ( +HTMLAttrs.mkHn(1, ctx START_H1left, START_H1, TextList)) + in ( LrTable.NT 16, ( result, START_H11left, END_H11right), rest671) + +end +| ( 41, ( ( _, ( _, _, END_H21right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( MlyValue.START_H2 START_H2, (START_H2left + as START_H21left), _)) :: rest671)) => let val result = +MlyValue.BodyElement ( +HTMLAttrs.mkHn(2, ctx START_H2left, START_H2, TextList)) + in ( LrTable.NT 16, ( result, START_H21left, END_H21right), rest671) + +end +| ( 42, ( ( _, ( _, _, END_H31right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( MlyValue.START_H3 START_H3, (START_H3left + as START_H31left), _)) :: rest671)) => let val result = +MlyValue.BodyElement ( +HTMLAttrs.mkHn(3, ctx START_H3left, START_H3, TextList)) + in ( LrTable.NT 16, ( result, START_H31left, END_H31right), rest671) + +end +| ( 43, ( ( _, ( _, _, END_H41right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( MlyValue.START_H4 START_H4, (START_H4left + as START_H41left), _)) :: rest671)) => let val result = +MlyValue.BodyElement ( +HTMLAttrs.mkHn(4, ctx START_H4left, START_H4, TextList)) + in ( LrTable.NT 16, ( result, START_H41left, END_H41right), rest671) + +end +| ( 44, ( ( _, ( _, _, END_H51right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( MlyValue.START_H5 START_H5, (START_H5left + as START_H51left), _)) :: rest671)) => let val result = +MlyValue.BodyElement ( +HTMLAttrs.mkHn(5, ctx START_H5left, START_H5, TextList)) + in ( LrTable.NT 16, ( result, START_H51left, END_H51right), rest671) + +end +| ( 45, ( ( _, ( _, _, END_H61right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( MlyValue.START_H6 START_H6, (START_H6left + as START_H61left), _)) :: rest671)) => let val result = +MlyValue.BodyElement ( +HTMLAttrs.mkHn(6, ctx START_H6left, START_H6, TextList)) + in ( LrTable.NT 16, ( result, START_H61left, END_H61right), rest671) + +end +| ( 46, ( ( _, ( _, _, END_ADDRESS1right)) :: ( _, ( +MlyValue.AddressContent1 AddressContent1, _, _)) :: ( _, ( _, +START_ADDRESS1left, _)) :: rest671)) => let val result = +MlyValue.BodyElement (HTML.ADDRESS(mkBlock AddressContent1)) + in ( LrTable.NT 16, ( result, START_ADDRESS1left, END_ADDRESS1right), + rest671) +end +| ( 47, ( rest671)) => let val result = MlyValue.AddressContent1 ([] +) + in ( LrTable.NT 17, ( result, defaultPos, defaultPos), rest671) +end +| ( 48, ( ( _, ( MlyValue.AddressContent1 AddressContent1, _, +AddressContent11right)) :: ( _, ( MlyValue.Text Text, Text1left, _)) + :: rest671)) => let val result = MlyValue.AddressContent1 ( +consText(Text, AddressContent1)) + in ( LrTable.NT 17, ( result, Text1left, AddressContent11right), +rest671) +end +| ( 49, ( ( _, ( MlyValue.AddressContent1 AddressContent1, _, +AddressContent11right)) :: _ :: ( _, ( MlyValue.Paragraph Paragraph, +Paragraph1left, _)) :: rest671)) => let val result = +MlyValue.AddressContent1 (consBlock(Paragraph, AddressContent1)) + in ( LrTable.NT 17, ( result, Paragraph1left, AddressContent11right), + rest671) +end +| ( 50, ( ( _, ( MlyValue.AddressContent2 AddressContent2, _, +AddressContent21right)) :: ( _, ( MlyValue.Paragraph Paragraph, +Paragraph1left, _)) :: rest671)) => let val result = +MlyValue.AddressContent1 (consBlock(Paragraph, AddressContent2)) + in ( LrTable.NT 17, ( result, Paragraph1left, AddressContent21right), + rest671) +end +| ( 51, ( rest671)) => let val result = MlyValue.AddressContent2 ([] +) + in ( LrTable.NT 18, ( result, defaultPos, defaultPos), rest671) +end +| ( 52, ( ( _, ( MlyValue.AddressContent1 AddressContent1, _, +AddressContent11right)) :: _ :: ( _, ( MlyValue.Paragraph Paragraph, +Paragraph1left, _)) :: rest671)) => let val result = +MlyValue.AddressContent2 (consBlock(Paragraph, AddressContent1)) + in ( LrTable.NT 18, ( result, Paragraph1left, AddressContent11right), + rest671) +end +| ( 53, ( ( _, ( MlyValue.AddressContent2 AddressContent2, _, +AddressContent21right)) :: ( _, ( MlyValue.Paragraph Paragraph, +Paragraph1left, _)) :: rest671)) => let val result = +MlyValue.AddressContent2 (consBlock(Paragraph, AddressContent2)) + in ( LrTable.NT 18, ( result, Paragraph1left, AddressContent21right), + rest671) +end +| ( 54, ( ( _, ( MlyValue.List List, List1left, List1right)) :: +rest671)) => let val result = MlyValue.BlockWOIndex (List) + in ( LrTable.NT 19, ( result, List1left, List1right), rest671) +end +| ( 55, ( ( _, ( MlyValue.Preformatted Preformatted, +Preformatted1left, Preformatted1right)) :: rest671)) => let val +result = MlyValue.BlockWOIndex (Preformatted) + in ( LrTable.NT 19, ( result, Preformatted1left, Preformatted1right), + rest671) +end +| ( 56, ( ( _, ( _, _, END_DIV1right)) :: ( _, ( MlyValue.BodyContent + BodyContent, _, _)) :: ( _, ( MlyValue.START_DIV START_DIV, ( +START_DIVleft as START_DIV1left), _)) :: rest671)) => let val result + = MlyValue.BlockWOIndex ( +HTMLAttrs.mkDIV(ctx START_DIVleft, START_DIV, BodyContent)) + in ( LrTable.NT 19, ( result, START_DIV1left, END_DIV1right), rest671 +) +end +| ( 57, ( ( _, ( _, _, END_CENTER1right)) :: ( _, ( +MlyValue.BodyContent BodyContent, _, _)) :: ( _, ( _, +START_CENTER1left, _)) :: rest671)) => let val result = +MlyValue.BlockWOIndex (HTML.CENTER BodyContent) + in ( LrTable.NT 19, ( result, START_CENTER1left, END_CENTER1right), +rest671) +end +| ( 58, ( ( _, ( _, _, END_BLOCKQUOTE1right)) :: ( _, ( +MlyValue.BodyContent BodyContent, _, _)) :: ( _, ( _, +START_BLOCKQUOTE1left, _)) :: rest671)) => let val result = +MlyValue.BlockWOIndex (HTML.BLOCKQUOTE BodyContent) + in ( LrTable.NT 19, ( result, START_BLOCKQUOTE1left, +END_BLOCKQUOTE1right), rest671) +end +| ( 59, ( ( _, ( _, _, END_FORM1right)) :: ( _, ( +MlyValue.BodyContent BodyContent, _, _)) :: ( _, ( MlyValue.START_FORM + START_FORM, (START_FORMleft as START_FORM1left), _)) :: rest671)) => + let val result = MlyValue.BlockWOIndex ( +HTMLAttrs.mkFORM(ctx START_FORMleft, START_FORM, BodyContent)) + in ( LrTable.NT 19, ( result, START_FORM1left, END_FORM1right), +rest671) +end +| ( 60, ( ( _, ( MlyValue.TAG_HR TAG_HR, (TAG_HRleft as TAG_HR1left), + TAG_HR1right)) :: rest671)) => let val result = +MlyValue.BlockWOIndex (HTMLAttrs.mkHR(ctx TAG_HRleft, TAG_HR)) + in ( LrTable.NT 19, ( result, TAG_HR1left, TAG_HR1right), rest671) + +end +| ( 61, ( ( _, ( _, _, END_TABLE1right)) :: ( _, ( +MlyValue.TableRowList TableRowList, _, _)) :: ( _, ( +MlyValue.optCaption optCaption, _, _)) :: ( _, ( MlyValue.START_TABLE +START_TABLE, (START_TABLEleft as START_TABLE1left), _)) :: rest671)) + => let val result = MlyValue.BlockWOIndex ( +HTMLAttrs.mkTABLE( + ctx START_TABLEleft, START_TABLE, + {caption = optCaption, body = TableRowList}) + +) + in ( LrTable.NT 19, ( result, START_TABLE1left, END_TABLE1right), +rest671) +end +| ( 62, ( ( _, ( MlyValue.BlockWOIndex BlockWOIndex, +BlockWOIndex1left, BlockWOIndex1right)) :: rest671)) => let val +result = MlyValue.Block (BlockWOIndex) + in ( LrTable.NT 20, ( result, BlockWOIndex1left, BlockWOIndex1right), + rest671) +end +| ( 63, ( ( _, ( MlyValue.TAG_ISINDEX TAG_ISINDEX, (TAG_ISINDEXleft + as TAG_ISINDEX1left), TAG_ISINDEX1right)) :: rest671)) => let val +result = MlyValue.Block ( +let val stuff = + HTMLAttrs.mkISINDEX (ctx TAG_ISINDEXleft, TAG_ISINDEX) + in HTML.ISINDEX stuff end + +) + in ( LrTable.NT 20, ( result, TAG_ISINDEX1left, TAG_ISINDEX1right), +rest671) +end +| ( 64, ( ( _, ( MlyValue.TextList TextList, _, TextList1right)) :: ( + _, ( MlyValue.START_P START_P, (START_Pleft as START_P1left), _)) :: +rest671)) => let val result = MlyValue.Paragraph ( +HTMLAttrs.mkP(ctx START_Pleft, START_P, TextList)) + in ( LrTable.NT 21, ( result, START_P1left, TextList1right), rest671) + +end +| ( 65, ( ( _, ( _, _, END_UL1right)) :: ( _, ( MlyValue.ListItemList + ListItemList, _, _)) :: ( _, ( MlyValue.START_UL START_UL, ( +START_ULleft as START_UL1left), _)) :: rest671)) => let val result = +MlyValue.List ( +HTMLAttrs.mkUL(ctx START_ULleft, START_UL, ListItemList)) + in ( LrTable.NT 22, ( result, START_UL1left, END_UL1right), rest671) + +end +| ( 66, ( ( _, ( _, _, END_OL1right)) :: ( _, ( MlyValue.ListItemList + ListItemList, _, _)) :: ( _, ( MlyValue.START_OL START_OL, ( +START_OLleft as START_OL1left), _)) :: rest671)) => let val result = +MlyValue.List ( +HTMLAttrs.mkOL(ctx START_OLleft, START_OL, ListItemList)) + in ( LrTable.NT 22, ( result, START_OL1left, END_OL1right), rest671) + +end +| ( 67, ( ( _, ( _, _, END_DIR1right)) :: ( _, ( +MlyValue.ListItemList ListItemList, _, _)) :: ( _, ( +MlyValue.START_DIR START_DIR, (START_DIRleft as START_DIR1left), _)) + :: rest671)) => let val result = MlyValue.List ( +HTMLAttrs.mkDIR(ctx START_DIRleft, START_DIR, ListItemList)) + in ( LrTable.NT 22, ( result, START_DIR1left, END_DIR1right), rest671 +) +end +| ( 68, ( ( _, ( _, _, END_MENU1right)) :: ( _, ( +MlyValue.ListItemList ListItemList, _, _)) :: ( _, ( +MlyValue.START_MENU START_MENU, (START_MENUleft as START_MENU1left), _ +)) :: rest671)) => let val result = MlyValue.List ( +HTMLAttrs.mkMENU(ctx START_MENUleft, START_MENU, ListItemList)) + in ( LrTable.NT 22, ( result, START_MENU1left, END_MENU1right), +rest671) +end +| ( 69, ( ( _, ( _, _, END_DL1right)) :: ( _, ( MlyValue.DLItemList +DLItemList, _, _)) :: ( _, ( MlyValue.START_DL START_DL, (START_DLleft + as START_DL1left), _)) :: rest671)) => let val result = +MlyValue.List ( +HTMLAttrs.mkDL( + ctx START_DLleft, START_DL, + groupDefListContents DLItemList) + +) + in ( LrTable.NT 22, ( result, START_DL1left, END_DL1right), rest671) + +end +| ( 70, ( rest671)) => let val result = MlyValue.ListItemList ([]) + in ( LrTable.NT 23, ( result, defaultPos, defaultPos), rest671) +end +| ( 71, ( ( _, ( MlyValue.ListItemList ListItemList, _, +ListItemList1right)) :: ( _, ( MlyValue.ListItem ListItem, +ListItem1left, _)) :: rest671)) => let val result = +MlyValue.ListItemList (ListItem :: ListItemList) + in ( LrTable.NT 23, ( result, ListItem1left, ListItemList1right), +rest671) +end +| ( 72, ( ( _, ( _, _, EndLI1right)) :: ( _, ( MlyValue.Flow1 Flow1, + _, _)) :: ( _, ( MlyValue.START_LI START_LI, (START_LIleft as +START_LI1left), _)) :: rest671)) => let val result = +MlyValue.ListItem ( +HTMLAttrs.mkLI(ctx START_LIleft, START_LI, mkBlock Flow1)) + in ( LrTable.NT 24, ( result, START_LI1left, EndLI1right), rest671) + +end +| ( 73, ( rest671)) => let val result = MlyValue.DLItemList ([]) + in ( LrTable.NT 25, ( result, defaultPos, defaultPos), rest671) +end +| ( 74, ( ( _, ( MlyValue.DLItemList DLItemList, _, DLItemList1right) +) :: ( _, ( MlyValue.DLItem DLItem, DLItem1left, _)) :: rest671)) => + let val result = MlyValue.DLItemList (DLItem :: DLItemList) + in ( LrTable.NT 25, ( result, DLItem1left, DLItemList1right), rest671 +) +end +| ( 75, ( ( _, ( _, _, EndDT1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_DT1left, _)) :: rest671)) => let + val result = MlyValue.DLItem (DL_tag TextList) + in ( LrTable.NT 26, ( result, START_DT1left, EndDT1right), rest671) + +end +| ( 76, ( ( _, ( _, _, EndDD1right)) :: ( _, ( MlyValue.Flow1 Flow1, + _, _)) :: ( _, ( _, START_DD1left, _)) :: rest671)) => let val +result = MlyValue.DLItem (DL_item(mkBlock Flow1)) + in ( LrTable.NT 26, ( result, START_DD1left, EndDD1right), rest671) + +end +| ( 77, ( rest671)) => let val result = MlyValue.Flow1 ([]) + in ( LrTable.NT 27, ( result, defaultPos, defaultPos), rest671) +end +| ( 78, ( ( _, ( MlyValue.Flow1 Flow1, _, Flow11right)) :: ( _, ( +MlyValue.Text Text, Text1left, _)) :: rest671)) => let val result = +MlyValue.Flow1 (consText(Text, Flow1)) + in ( LrTable.NT 27, ( result, Text1left, Flow11right), rest671) +end +| ( 79, ( ( _, ( MlyValue.Flow1 Flow1, _, Flow11right)) :: ( _, ( +MlyValue.Block Block, Block1left, _)) :: rest671)) => let val result + = MlyValue.Flow1 (consBlock(Block, Flow1)) + in ( LrTable.NT 27, ( result, Block1left, Flow11right), rest671) +end +| ( 80, ( ( _, ( MlyValue.Flow1 Flow1, _, Flow11right)) :: _ :: ( _, +( MlyValue.Paragraph Paragraph, Paragraph1left, _)) :: rest671)) => + let val result = MlyValue.Flow1 (consBlock(Paragraph, Flow1)) + in ( LrTable.NT 27, ( result, Paragraph1left, Flow11right), rest671) + +end +| ( 81, ( ( _, ( MlyValue.Flow2 Flow2, _, Flow21right)) :: ( _, ( +MlyValue.Paragraph Paragraph, Paragraph1left, _)) :: rest671)) => let + val result = MlyValue.Flow1 (consBlock(Paragraph, Flow2)) + in ( LrTable.NT 27, ( result, Paragraph1left, Flow21right), rest671) + +end +| ( 82, ( rest671)) => let val result = MlyValue.Flow2 ([]) + in ( LrTable.NT 28, ( result, defaultPos, defaultPos), rest671) +end +| ( 83, ( ( _, ( MlyValue.Flow1 Flow1, _, Flow11right)) :: ( _, ( +MlyValue.Block Block, Block1left, _)) :: rest671)) => let val result + = MlyValue.Flow2 (consBlock(Block, Flow1)) + in ( LrTable.NT 28, ( result, Block1left, Flow11right), rest671) +end +| ( 84, ( ( _, ( MlyValue.Flow1 Flow1, _, Flow11right)) :: _ :: ( _, +( MlyValue.Paragraph Paragraph, Paragraph1left, _)) :: rest671)) => + let val result = MlyValue.Flow2 (consBlock(Paragraph, Flow1)) + in ( LrTable.NT 28, ( result, Paragraph1left, Flow11right), rest671) + +end +| ( 85, ( ( _, ( MlyValue.Flow2 Flow2, _, Flow21right)) :: ( _, ( +MlyValue.Paragraph Paragraph, Paragraph1left, _)) :: rest671)) => let + val result = MlyValue.Flow2 (consBlock(Paragraph, Flow2)) + in ( LrTable.NT 28, ( result, Paragraph1left, Flow21right), rest671) + +end +| ( 86, ( rest671)) => let val result = MlyValue.ntVOID () + in ( LrTable.NT 29, ( result, defaultPos, defaultPos), rest671) +end +| ( 87, ( ( _, ( _, END_LI1left, END_LI1right)) :: rest671)) => let + val result = MlyValue.ntVOID () + in ( LrTable.NT 29, ( result, END_LI1left, END_LI1right), rest671) + +end +| ( 88, ( rest671)) => let val result = MlyValue.ntVOID () + in ( LrTable.NT 30, ( result, defaultPos, defaultPos), rest671) +end +| ( 89, ( ( _, ( _, END_DT1left, END_DT1right)) :: rest671)) => let + val result = MlyValue.ntVOID () + in ( LrTable.NT 30, ( result, END_DT1left, END_DT1right), rest671) + +end +| ( 90, ( rest671)) => let val result = MlyValue.ntVOID () + in ( LrTable.NT 31, ( result, defaultPos, defaultPos), rest671) +end +| ( 91, ( ( _, ( _, END_DD1left, END_DD1right)) :: rest671)) => let + val result = MlyValue.ntVOID () + in ( LrTable.NT 31, ( result, END_DD1left, END_DD1right), rest671) + +end +| ( 92, ( ( _, ( _, _, END_PRE1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( MlyValue.START_PRE START_PRE, ( +START_PREleft as START_PRE1left), _)) :: rest671)) => let val result + = MlyValue.Preformatted ( +HTMLAttrs.mkPRE(ctx START_PREleft, START_PRE, TextList)) + in ( LrTable.NT 32, ( result, START_PRE1left, END_PRE1right), rest671 +) +end +| ( 93, ( rest671)) => let val result = MlyValue.optCaption (NONE) + in ( LrTable.NT 33, ( result, defaultPos, defaultPos), rest671) +end +| ( 94, ( ( _, ( _, _, END_CAPTION1right)) :: ( _, ( +MlyValue.TextList TextList, _, _)) :: ( _, ( MlyValue.START_CAPTION +START_CAPTION, (START_CAPTIONleft as START_CAPTION1left), _)) :: +rest671)) => let val result = MlyValue.optCaption ( +SOME(HTMLAttrs.mkCAPTION( + ctx START_CAPTIONleft, START_CAPTION, TextList)) +) + in ( LrTable.NT 33, ( result, START_CAPTION1left, END_CAPTION1right), + rest671) +end +| ( 95, ( ( _, ( MlyValue.TableRow TableRow, TableRow1left, +TableRow1right)) :: rest671)) => let val result = +MlyValue.TableRowList ([TableRow]) + in ( LrTable.NT 34, ( result, TableRow1left, TableRow1right), rest671 +) +end +| ( 96, ( ( _, ( MlyValue.TableRowList TableRowList, _, +TableRowList1right)) :: ( _, ( MlyValue.TableRow TableRow, +TableRow1left, _)) :: rest671)) => let val result = +MlyValue.TableRowList (TableRow :: TableRowList) + in ( LrTable.NT 34, ( result, TableRow1left, TableRowList1right), +rest671) +end +| ( 97, ( ( _, ( MlyValue.TableCellList TableCellList, _, +TableCellList1right)) :: ( _, ( MlyValue.START_TR START_TR, ( +START_TRleft as START_TR1left), _)) :: rest671)) => let val result = +MlyValue.TableRow ( +HTMLAttrs.mkTR(ctx START_TRleft, START_TR, TableCellList)) + in ( LrTable.NT 35, ( result, START_TR1left, TableCellList1right), +rest671) +end +| ( 98, ( ( _, ( _, _, END_TR1right)) :: ( _, ( +MlyValue.TableCellList TableCellList, _, _)) :: ( _, ( +MlyValue.START_TR START_TR, (START_TRleft as START_TR1left), _)) :: +rest671)) => let val result = MlyValue.TableRow ( +HTMLAttrs.mkTR(ctx START_TRleft, START_TR, TableCellList)) + in ( LrTable.NT 35, ( result, START_TR1left, END_TR1right), rest671) + +end +| ( 99, ( ( _, ( MlyValue.TableCell TableCell, TableCell1left, +TableCell1right)) :: rest671)) => let val result = +MlyValue.TableCellList ([TableCell]) + in ( LrTable.NT 36, ( result, TableCell1left, TableCell1right), +rest671) +end +| ( 100, ( ( _, ( MlyValue.TableCellList TableCellList, _, +TableCellList1right)) :: ( _, ( MlyValue.TableCell TableCell, +TableCell1left, _)) :: rest671)) => let val result = +MlyValue.TableCellList (TableCell :: TableCellList) + in ( LrTable.NT 36, ( result, TableCell1left, TableCellList1right), +rest671) +end +| ( 101, ( ( _, ( _, _, END_TH1right)) :: ( _, ( MlyValue.BodyContent + BodyContent, _, _)) :: ( _, ( MlyValue.START_TH START_TH, ( +START_THleft as START_TH1left), _)) :: rest671)) => let val result = +MlyValue.TableCell ( +HTMLAttrs.mkTH(ctx START_THleft, START_TH, BodyContent)) + in ( LrTable.NT 37, ( result, START_TH1left, END_TH1right), rest671) + +end +| ( 102, ( ( _, ( MlyValue.BodyContent BodyContent, _, +BodyContent1right)) :: ( _, ( MlyValue.START_TH START_TH, ( +START_THleft as START_TH1left), _)) :: rest671)) => let val result = +MlyValue.TableCell ( +HTMLAttrs.mkTH(ctx START_THleft, START_TH, BodyContent)) + in ( LrTable.NT 37, ( result, START_TH1left, BodyContent1right), +rest671) +end +| ( 103, ( ( _, ( _, _, END_TD1right)) :: ( _, ( MlyValue.BodyContent + BodyContent, _, _)) :: ( _, ( MlyValue.START_TD START_TD, ( +START_TDleft as START_TD1left), _)) :: rest671)) => let val result = +MlyValue.TableCell ( +HTMLAttrs.mkTD(ctx START_TDleft, START_TD, BodyContent)) + in ( LrTable.NT 37, ( result, START_TD1left, END_TD1right), rest671) + +end +| ( 104, ( ( _, ( MlyValue.BodyContent BodyContent, _, +BodyContent1right)) :: ( _, ( MlyValue.START_TD START_TD, ( +START_TDleft as START_TD1left), _)) :: rest671)) => let val result = +MlyValue.TableCell ( +HTMLAttrs.mkTD(ctx START_TDleft, START_TD, BodyContent)) + in ( LrTable.NT 37, ( result, START_TD1left, BodyContent1right), +rest671) +end +| ( 105, ( ( _, ( MlyValue.TextList' TextList', TextList'1left, +TextList'1right)) :: rest671)) => let val result = MlyValue.TextList + (textList TextList') + in ( LrTable.NT 38, ( result, TextList'1left, TextList'1right), +rest671) +end +| ( 106, ( rest671)) => let val result = MlyValue.TextList' ([]) + in ( LrTable.NT 39, ( result, defaultPos, defaultPos), rest671) +end +| ( 107, ( ( _, ( MlyValue.TextList' TextList', _, TextList'1right)) + :: ( _, ( MlyValue.Text Text, Text1left, _)) :: rest671)) => let val + result = MlyValue.TextList' (Text :: TextList') + in ( LrTable.NT 39, ( result, Text1left, TextList'1right), rest671) + +end +| ( 108, ( ( _, ( MlyValue.PCDataElem PCDataElem, PCDataElem1left, +PCDataElem1right)) :: rest671)) => let val result = +MlyValue.TextWOScript (HTML.PCDATA PCDataElem) + in ( LrTable.NT 40, ( result, PCDataElem1left, PCDataElem1right), +rest671) +end +| ( 109, ( ( _, ( MlyValue.Font Font, Font1left, Font1right)) :: +rest671)) => let val result = MlyValue.TextWOScript (Font) + in ( LrTable.NT 40, ( result, Font1left, Font1right), rest671) +end +| ( 110, ( ( _, ( MlyValue.Phrase Phrase, Phrase1left, Phrase1right)) + :: rest671)) => let val result = MlyValue.TextWOScript (Phrase) + in ( LrTable.NT 40, ( result, Phrase1left, Phrase1right), rest671) + +end +| ( 111, ( ( _, ( MlyValue.Special Special, Special1left, +Special1right)) :: rest671)) => let val result = +MlyValue.TextWOScript (Special) + in ( LrTable.NT 40, ( result, Special1left, Special1right), rest671) + +end +| ( 112, ( ( _, ( MlyValue.Form Form, Form1left, Form1right)) :: +rest671)) => let val result = MlyValue.TextWOScript (Form) + in ( LrTable.NT 40, ( result, Form1left, Form1right), rest671) +end +| ( 113, ( ( _, ( MlyValue.TextWOScript TextWOScript, +TextWOScript1left, TextWOScript1right)) :: rest671)) => let val +result = MlyValue.Text (TextWOScript) + in ( LrTable.NT 41, ( result, TextWOScript1left, TextWOScript1right), + rest671) +end +| ( 114, ( ( _, ( _, _, END_SCRIPT1right)) :: ( _, ( MlyValue.PCData +PCData, _, _)) :: ( _, ( _, START_SCRIPT1left, _)) :: rest671)) => let + val result = MlyValue.Text (HTML.SCRIPT PCData) + in ( LrTable.NT 41, ( result, START_SCRIPT1left, END_SCRIPT1right), +rest671) +end +| ( 115, ( ( _, ( _, _, END_TT1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_TT1left, _)) :: rest671)) => let + val result = MlyValue.Font (HTML.TT(TextList)) + in ( LrTable.NT 42, ( result, START_TT1left, END_TT1right), rest671) + +end +| ( 116, ( ( _, ( _, _, END_I1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_I1left, _)) :: rest671)) => let + val result = MlyValue.Font (HTML.I(TextList)) + in ( LrTable.NT 42, ( result, START_I1left, END_I1right), rest671) + +end +| ( 117, ( ( _, ( _, _, END_B1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_B1left, _)) :: rest671)) => let + val result = MlyValue.Font (HTML.B(TextList)) + in ( LrTable.NT 42, ( result, START_B1left, END_B1right), rest671) + +end +| ( 118, ( ( _, ( _, _, END_U1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_U1left, _)) :: rest671)) => let + val result = MlyValue.Font (HTML.U(TextList)) + in ( LrTable.NT 42, ( result, START_U1left, END_U1right), rest671) + +end +| ( 119, ( ( _, ( _, _, END_STRIKE1right)) :: ( _, ( +MlyValue.TextList TextList, _, _)) :: ( _, ( _, START_STRIKE1left, _)) + :: rest671)) => let val result = MlyValue.Font ( +HTML.STRIKE(TextList)) + in ( LrTable.NT 42, ( result, START_STRIKE1left, END_STRIKE1right), +rest671) +end +| ( 120, ( ( _, ( _, _, END_BIG1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_BIG1left, _)) :: rest671)) => let + val result = MlyValue.Font (HTML.BIG(TextList)) + in ( LrTable.NT 42, ( result, START_BIG1left, END_BIG1right), rest671 +) +end +| ( 121, ( ( _, ( _, _, END_SMALL1right)) :: ( _, ( MlyValue.TextList + TextList, _, _)) :: ( _, ( _, START_SMALL1left, _)) :: rest671)) => + let val result = MlyValue.Font (HTML.SMALL(TextList)) + in ( LrTable.NT 42, ( result, START_SMALL1left, END_SMALL1right), +rest671) +end +| ( 122, ( ( _, ( _, _, END_SUB1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_SUB1left, _)) :: rest671)) => let + val result = MlyValue.Font (HTML.SUB(TextList)) + in ( LrTable.NT 42, ( result, START_SUB1left, END_SUB1right), rest671 +) +end +| ( 123, ( ( _, ( _, _, END_SUP1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_SUP1left, _)) :: rest671)) => let + val result = MlyValue.Font (HTML.SUP(TextList)) + in ( LrTable.NT 42, ( result, START_SUP1left, END_SUP1right), rest671 +) +end +| ( 124, ( ( _, ( _, _, END_EM1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_EM1left, _)) :: rest671)) => let + val result = MlyValue.Phrase (HTML.EM(TextList)) + in ( LrTable.NT 43, ( result, START_EM1left, END_EM1right), rest671) + +end +| ( 125, ( ( _, ( _, _, END_STRONG1right)) :: ( _, ( +MlyValue.TextList TextList, _, _)) :: ( _, ( _, START_STRONG1left, _)) + :: rest671)) => let val result = MlyValue.Phrase ( +HTML.STRONG(TextList)) + in ( LrTable.NT 43, ( result, START_STRONG1left, END_STRONG1right), +rest671) +end +| ( 126, ( ( _, ( _, _, END_CODE1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_CODE1left, _)) :: rest671)) => let + val result = MlyValue.Phrase (HTML.CODE(TextList)) + in ( LrTable.NT 43, ( result, START_CODE1left, END_CODE1right), +rest671) +end +| ( 127, ( ( _, ( _, _, END_DFN1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_DFN1left, _)) :: rest671)) => let + val result = MlyValue.Phrase (HTML.DFN(TextList)) + in ( LrTable.NT 43, ( result, START_DFN1left, END_DFN1right), rest671 +) +end +| ( 128, ( ( _, ( _, _, END_SAMP1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_SAMP1left, _)) :: rest671)) => let + val result = MlyValue.Phrase (HTML.SAMP(TextList)) + in ( LrTable.NT 43, ( result, START_SAMP1left, END_SAMP1right), +rest671) +end +| ( 129, ( ( _, ( _, _, END_KBD1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_KBD1left, _)) :: rest671)) => let + val result = MlyValue.Phrase (HTML.KBD(TextList)) + in ( LrTable.NT 43, ( result, START_KBD1left, END_KBD1right), rest671 +) +end +| ( 130, ( ( _, ( _, _, END_VAR1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_VAR1left, _)) :: rest671)) => let + val result = MlyValue.Phrase (HTML.VAR(TextList)) + in ( LrTable.NT 43, ( result, START_VAR1left, END_VAR1right), rest671 +) +end +| ( 131, ( ( _, ( _, _, END_CITE1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( _, START_CITE1left, _)) :: rest671)) => let + val result = MlyValue.Phrase (HTML.CITE(TextList)) + in ( LrTable.NT 43, ( result, START_CITE1left, END_CITE1right), +rest671) +end +| ( 132, ( ( _, ( _, _, END_A1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( MlyValue.START_A START_A, (START_Aleft as +START_A1left), _)) :: rest671)) => let val result = MlyValue.Special + (HTMLAttrs.mkA(ctx START_Aleft, START_A, TextList)) + in ( LrTable.NT 44, ( result, START_A1left, END_A1right), rest671) + +end +| ( 133, ( ( _, ( MlyValue.TAG_IMG TAG_IMG, (TAG_IMGleft as +TAG_IMG1left), TAG_IMG1right)) :: rest671)) => let val result = +MlyValue.Special (HTMLAttrs.mkIMG(ctx TAG_IMGleft, TAG_IMG)) + in ( LrTable.NT 44, ( result, TAG_IMG1left, TAG_IMG1right), rest671) + +end +| ( 134, ( ( _, ( _, _, END_APPLET1right)) :: ( _, ( +MlyValue.TextList TextList, _, _)) :: ( _, ( MlyValue.START_APPLET +START_APPLET, (START_APPLETleft as START_APPLET1left), _)) :: rest671) +) => let val result = MlyValue.Special ( +HTMLAttrs.mkAPPLET(ctx START_APPLETleft, START_APPLET, TextList)) + in ( LrTable.NT 44, ( result, START_APPLET1left, END_APPLET1right), +rest671) +end +| ( 135, ( ( _, ( _, _, END_FONT1right)) :: ( _, ( MlyValue.TextList +TextList, _, _)) :: ( _, ( MlyValue.START_FONT START_FONT, ( +START_FONTleft as START_FONT1left), _)) :: rest671)) => let val +result = MlyValue.Special ( +HTMLAttrs.mkFONT(ctx START_FONTleft, START_FONT, TextList)) + in ( LrTable.NT 44, ( result, START_FONT1left, END_FONT1right), +rest671) +end +| ( 136, ( ( _, ( _, _, END_BASEFONT1right)) :: ( _, ( +MlyValue.TextList TextList, _, _)) :: ( _, ( MlyValue.START_BASEFONT +START_BASEFONT, (START_BASEFONTleft as START_BASEFONT1left), _)) :: +rest671)) => let val result = MlyValue.Special ( +HTMLAttrs.mkBASEFONT( + ctx START_BASEFONTleft, START_BASEFONT, TextList) + +) + in ( LrTable.NT 44, ( result, START_BASEFONT1left, END_BASEFONT1right +), rest671) +end +| ( 137, ( ( _, ( MlyValue.TAG_BR TAG_BR, (TAG_BRleft as TAG_BR1left) +, TAG_BR1right)) :: rest671)) => let val result = MlyValue.Special ( +HTMLAttrs.mkBR(ctx TAG_BRleft, TAG_BR)) + in ( LrTable.NT 44, ( result, TAG_BR1left, TAG_BR1right), rest671) + +end +| ( 138, ( ( _, ( _, _, END_MAP1right)) :: ( _, ( MlyValue.AreaList +AreaList, _, _)) :: ( _, ( MlyValue.START_MAP START_MAP, ( +START_MAPleft as START_MAP1left), _)) :: rest671)) => let val result + = MlyValue.Special ( +HTMLAttrs.mkMAP(ctx START_MAPleft, START_MAP, AreaList)) + in ( LrTable.NT 44, ( result, START_MAP1left, END_MAP1right), rest671 +) +end +| ( 139, ( ( _, ( MlyValue.TAG_PARAM TAG_PARAM, (TAG_PARAMleft as +TAG_PARAM1left), TAG_PARAM1right)) :: rest671)) => let val result = +MlyValue.Special (HTMLAttrs.mkPARAM(ctx TAG_PARAMleft, TAG_PARAM)) + in ( LrTable.NT 44, ( result, TAG_PARAM1left, TAG_PARAM1right), +rest671) +end +| ( 140, ( rest671)) => let val result = MlyValue.AreaList ([]) + in ( LrTable.NT 45, ( result, defaultPos, defaultPos), rest671) +end +| ( 141, ( ( _, ( MlyValue.AreaList AreaList, _, AreaList1right)) :: +( _, ( MlyValue.TAG_AREA TAG_AREA, (TAG_AREAleft as TAG_AREA1left), _) +) :: rest671)) => let val result = MlyValue.AreaList ( +HTMLAttrs.mkAREA(ctx TAG_AREAleft, TAG_AREA) :: AreaList) + in ( LrTable.NT 45, ( result, TAG_AREA1left, AreaList1right), rest671 +) +end +| ( 142, ( ( _, ( MlyValue.TAG_INPUT TAG_INPUT, (TAG_INPUTleft as +TAG_INPUT1left), TAG_INPUT1right)) :: rest671)) => let val result = +MlyValue.Form (HTMLAttrs.mkINPUT(ctx TAG_INPUTleft, TAG_INPUT)) + in ( LrTable.NT 46, ( result, TAG_INPUT1left, TAG_INPUT1right), +rest671) +end +| ( 143, ( ( _, ( _, _, END_SELECT1right)) :: ( _, ( +MlyValue.OptionList OptionList, _, _)) :: ( _, ( MlyValue.START_SELECT + START_SELECT, (START_SELECTleft as START_SELECT1left), _)) :: rest671 +)) => let val result = MlyValue.Form ( +HTMLAttrs.mkSELECT(ctx START_SELECTleft, START_SELECT, OptionList)) + in ( LrTable.NT 46, ( result, START_SELECT1left, END_SELECT1right), +rest671) +end +| ( 144, ( ( _, ( _, _, END_TEXTAREA1right)) :: ( _, ( +MlyValue.PCData PCData, _, _)) :: ( _, ( MlyValue.START_TEXTAREA +START_TEXTAREA, (START_TEXTAREAleft as START_TEXTAREA1left), _)) :: +rest671)) => let val result = MlyValue.Form ( +HTMLAttrs.mkTEXTAREA( + ctx START_TEXTAREAleft, START_TEXTAREA, + PCData) + +) + in ( LrTable.NT 46, ( result, START_TEXTAREA1left, END_TEXTAREA1right +), rest671) +end +| ( 145, ( rest671)) => let val result = MlyValue.OptionList ([]) + in ( LrTable.NT 47, ( result, defaultPos, defaultPos), rest671) +end +| ( 146, ( ( _, ( MlyValue.OptionList OptionList, _, OptionList1right +)) :: _ :: ( _, ( MlyValue.PCData PCData, _, _)) :: ( _, ( +MlyValue.START_OPTION START_OPTION, (START_OPTIONleft as +START_OPTION1left), _)) :: rest671)) => let val result = +MlyValue.OptionList ( +HTMLAttrs.mkOPTION(ctx START_OPTIONleft, START_OPTION, PCData) + :: OptionList + +) + in ( LrTable.NT 47, ( result, START_OPTION1left, OptionList1right), +rest671) +end +| ( 147, ( rest671)) => let val result = MlyValue.ntVOID () + in ( LrTable.NT 48, ( result, defaultPos, defaultPos), rest671) +end +| ( 148, ( ( _, ( _, END_OPTION1left, END_OPTION1right)) :: rest671)) + => let val result = MlyValue.ntVOID () + in ( LrTable.NT 48, ( result, END_OPTION1left, END_OPTION1right), +rest671) +end +| ( 149, ( ( _, ( MlyValue.PCDataList PCDataList, PCDataList1left, +PCDataList1right)) :: rest671)) => let val result = MlyValue.PCData ( +concat PCDataList) + in ( LrTable.NT 49, ( result, PCDataList1left, PCDataList1right), +rest671) +end +| ( 150, ( rest671)) => let val result = MlyValue.PCDataList ([]) + in ( LrTable.NT 50, ( result, defaultPos, defaultPos), rest671) +end +| ( 151, ( ( _, ( MlyValue.PCDataList PCDataList, _, PCDataList1right +)) :: ( _, ( MlyValue.PCDataElem PCDataElem, PCDataElem1left, _)) :: +rest671)) => let val result = MlyValue.PCDataList ( +PCDataElem :: PCDataList) + in ( LrTable.NT 50, ( result, PCDataElem1left, PCDataList1right), +rest671) +end +| ( 152, ( ( _, ( MlyValue.PCDATA PCDATA, PCDATA1left, PCDATA1right)) + :: rest671)) => let val result = MlyValue.PCDataElem (PCDATA) + in ( LrTable.NT 51, ( result, PCDATA1left, PCDATA1right), rest671) + +end +| ( 153, ( ( _, ( MlyValue.CHAR_REF CHAR_REF, CHAR_REF1left, +CHAR_REF1right)) :: rest671)) => let val result = MlyValue.PCDataElem + (CHAR_REF) + in ( LrTable.NT 51, ( result, CHAR_REF1left, CHAR_REF1right), rest671 +) +end +| ( 154, ( ( _, ( MlyValue.ENTITY_REF ENTITY_REF, ENTITY_REF1left, +ENTITY_REF1right)) :: rest671)) => let val result = +MlyValue.PCDataElem (ENTITY_REF) + in ( LrTable.NT 51, ( result, ENTITY_REF1left, ENTITY_REF1right), +rest671) +end +| _ => raise (mlyAction i392) +end +val void = MlyValue.VOID +val extract = fn a => (fn MlyValue.Document x => x +| _ => let exception ParseInternal + in raise ParseInternal end) a +end +end +structure Tokens : HTML_TOKENS = +struct +type svalue = ParserData.svalue +type ('a,'b) token = ('a,'b) Token.token +fun EOF (p1,p2) = Token.TOKEN (ParserData.LrTable.T 0,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_A (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 1,( +ParserData.MlyValue.START_A i,p1,p2)) +fun END_A (p1,p2) = Token.TOKEN (ParserData.LrTable.T 2,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_ADDRESS (p1,p2) = Token.TOKEN (ParserData.LrTable.T 3,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_ADDRESS (p1,p2) = Token.TOKEN (ParserData.LrTable.T 4,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_APPLET (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 5,( +ParserData.MlyValue.START_APPLET i,p1,p2)) +fun END_APPLET (p1,p2) = Token.TOKEN (ParserData.LrTable.T 6,( +ParserData.MlyValue.VOID,p1,p2)) +fun TAG_AREA (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 7,( +ParserData.MlyValue.TAG_AREA i,p1,p2)) +fun START_B (p1,p2) = Token.TOKEN (ParserData.LrTable.T 8,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_B (p1,p2) = Token.TOKEN (ParserData.LrTable.T 9,( +ParserData.MlyValue.VOID,p1,p2)) +fun TAG_BASE (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 10,( +ParserData.MlyValue.TAG_BASE i,p1,p2)) +fun START_BIG (p1,p2) = Token.TOKEN (ParserData.LrTable.T 11,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_BIG (p1,p2) = Token.TOKEN (ParserData.LrTable.T 12,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_BLOCKQUOTE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 13,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_BLOCKQUOTE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 14,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_BODY (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 15,( +ParserData.MlyValue.START_BODY i,p1,p2)) +fun END_BODY (p1,p2) = Token.TOKEN (ParserData.LrTable.T 16,( +ParserData.MlyValue.VOID,p1,p2)) +fun TAG_BR (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 17,( +ParserData.MlyValue.TAG_BR i,p1,p2)) +fun START_CAPTION (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 18,( +ParserData.MlyValue.START_CAPTION i,p1,p2)) +fun END_CAPTION (p1,p2) = Token.TOKEN (ParserData.LrTable.T 19,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_CENTER (p1,p2) = Token.TOKEN (ParserData.LrTable.T 20,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_CENTER (p1,p2) = Token.TOKEN (ParserData.LrTable.T 21,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_CITE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 22,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_CITE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 23,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_CODE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 24,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_CODE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 25,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_DD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 26,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_DD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 27,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_DFN (p1,p2) = Token.TOKEN (ParserData.LrTable.T 28,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_DFN (p1,p2) = Token.TOKEN (ParserData.LrTable.T 29,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_DIR (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 30,( +ParserData.MlyValue.START_DIR i,p1,p2)) +fun END_DIR (p1,p2) = Token.TOKEN (ParserData.LrTable.T 31,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_DIV (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 32,( +ParserData.MlyValue.START_DIV i,p1,p2)) +fun END_DIV (p1,p2) = Token.TOKEN (ParserData.LrTable.T 33,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_DL (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 34,( +ParserData.MlyValue.START_DL i,p1,p2)) +fun END_DL (p1,p2) = Token.TOKEN (ParserData.LrTable.T 35,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_DT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 36,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_DT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 37,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_EM (p1,p2) = Token.TOKEN (ParserData.LrTable.T 38,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_EM (p1,p2) = Token.TOKEN (ParserData.LrTable.T 39,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_FONT (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 40,( +ParserData.MlyValue.START_FONT i,p1,p2)) +fun END_FONT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 41,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_BASEFONT (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 42,( +ParserData.MlyValue.START_BASEFONT i,p1,p2)) +fun END_BASEFONT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 43,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_FORM (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 44,( +ParserData.MlyValue.START_FORM i,p1,p2)) +fun END_FORM (p1,p2) = Token.TOKEN (ParserData.LrTable.T 45,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_H1 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 46,( +ParserData.MlyValue.START_H1 i,p1,p2)) +fun END_H1 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 47,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_H2 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 48,( +ParserData.MlyValue.START_H2 i,p1,p2)) +fun END_H2 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 49,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_H3 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 50,( +ParserData.MlyValue.START_H3 i,p1,p2)) +fun END_H3 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 51,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_H4 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 52,( +ParserData.MlyValue.START_H4 i,p1,p2)) +fun END_H4 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 53,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_H5 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 54,( +ParserData.MlyValue.START_H5 i,p1,p2)) +fun END_H5 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 55,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_H6 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 56,( +ParserData.MlyValue.START_H6 i,p1,p2)) +fun END_H6 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 57,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_HEAD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 58,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_HEAD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 59,( +ParserData.MlyValue.VOID,p1,p2)) +fun TAG_HR (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 60,( +ParserData.MlyValue.TAG_HR i,p1,p2)) +fun START_HTML (p1,p2) = Token.TOKEN (ParserData.LrTable.T 61,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_HTML (p1,p2) = Token.TOKEN (ParserData.LrTable.T 62,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_I (p1,p2) = Token.TOKEN (ParserData.LrTable.T 63,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_I (p1,p2) = Token.TOKEN (ParserData.LrTable.T 64,( +ParserData.MlyValue.VOID,p1,p2)) +fun TAG_IMG (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 65,( +ParserData.MlyValue.TAG_IMG i,p1,p2)) +fun TAG_INPUT (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 66,( +ParserData.MlyValue.TAG_INPUT i,p1,p2)) +fun TAG_ISINDEX (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 67,( +ParserData.MlyValue.TAG_ISINDEX i,p1,p2)) +fun START_KBD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 68,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_KBD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 69,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_LI (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 70,( +ParserData.MlyValue.START_LI i,p1,p2)) +fun END_LI (p1,p2) = Token.TOKEN (ParserData.LrTable.T 71,( +ParserData.MlyValue.VOID,p1,p2)) +fun TAG_LINK (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 72,( +ParserData.MlyValue.TAG_LINK i,p1,p2)) +fun START_MAP (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 73,( +ParserData.MlyValue.START_MAP i,p1,p2)) +fun END_MAP (p1,p2) = Token.TOKEN (ParserData.LrTable.T 74,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_MENU (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 75,( +ParserData.MlyValue.START_MENU i,p1,p2)) +fun END_MENU (p1,p2) = Token.TOKEN (ParserData.LrTable.T 76,( +ParserData.MlyValue.VOID,p1,p2)) +fun TAG_META (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 77,( +ParserData.MlyValue.TAG_META i,p1,p2)) +fun START_OL (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 78,( +ParserData.MlyValue.START_OL i,p1,p2)) +fun END_OL (p1,p2) = Token.TOKEN (ParserData.LrTable.T 79,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_OPTION (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 80,( +ParserData.MlyValue.START_OPTION i,p1,p2)) +fun END_OPTION (p1,p2) = Token.TOKEN (ParserData.LrTable.T 81,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_P (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 82,( +ParserData.MlyValue.START_P i,p1,p2)) +fun END_P (p1,p2) = Token.TOKEN (ParserData.LrTable.T 83,( +ParserData.MlyValue.VOID,p1,p2)) +fun TAG_PARAM (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 84,( +ParserData.MlyValue.TAG_PARAM i,p1,p2)) +fun START_PRE (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 85,( +ParserData.MlyValue.START_PRE i,p1,p2)) +fun END_PRE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 86,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_SAMP (p1,p2) = Token.TOKEN (ParserData.LrTable.T 87,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_SAMP (p1,p2) = Token.TOKEN (ParserData.LrTable.T 88,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_SCRIPT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 89,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_SCRIPT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 90,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_SELECT (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 91,( +ParserData.MlyValue.START_SELECT i,p1,p2)) +fun END_SELECT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 92,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_SMALL (p1,p2) = Token.TOKEN (ParserData.LrTable.T 93,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_SMALL (p1,p2) = Token.TOKEN (ParserData.LrTable.T 94,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_STRIKE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 95,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_STRIKE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 96,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_STRONG (p1,p2) = Token.TOKEN (ParserData.LrTable.T 97,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_STRONG (p1,p2) = Token.TOKEN (ParserData.LrTable.T 98,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_STYLE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 99,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_STYLE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 100,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_SUB (p1,p2) = Token.TOKEN (ParserData.LrTable.T 101,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_SUB (p1,p2) = Token.TOKEN (ParserData.LrTable.T 102,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_SUP (p1,p2) = Token.TOKEN (ParserData.LrTable.T 103,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_SUP (p1,p2) = Token.TOKEN (ParserData.LrTable.T 104,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_TABLE (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 105,( +ParserData.MlyValue.START_TABLE i,p1,p2)) +fun END_TABLE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 106,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_TD (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 107,( +ParserData.MlyValue.START_TD i,p1,p2)) +fun END_TD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 108,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_TEXTAREA (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 109,( +ParserData.MlyValue.START_TEXTAREA i,p1,p2)) +fun END_TEXTAREA (p1,p2) = Token.TOKEN (ParserData.LrTable.T 110,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_TH (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 111,( +ParserData.MlyValue.START_TH i,p1,p2)) +fun END_TH (p1,p2) = Token.TOKEN (ParserData.LrTable.T 112,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_TITLE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 113,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_TITLE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 114,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_TR (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 115,( +ParserData.MlyValue.START_TR i,p1,p2)) +fun END_TR (p1,p2) = Token.TOKEN (ParserData.LrTable.T 116,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_TT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 117,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_TT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 118,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_U (p1,p2) = Token.TOKEN (ParserData.LrTable.T 119,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_U (p1,p2) = Token.TOKEN (ParserData.LrTable.T 120,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_UL (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 121,( +ParserData.MlyValue.START_UL i,p1,p2)) +fun END_UL (p1,p2) = Token.TOKEN (ParserData.LrTable.T 122,( +ParserData.MlyValue.VOID,p1,p2)) +fun START_VAR (p1,p2) = Token.TOKEN (ParserData.LrTable.T 123,( +ParserData.MlyValue.VOID,p1,p2)) +fun END_VAR (p1,p2) = Token.TOKEN (ParserData.LrTable.T 124,( +ParserData.MlyValue.VOID,p1,p2)) +fun PCDATA (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 125,( +ParserData.MlyValue.PCDATA i,p1,p2)) +fun CHAR_REF (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 126,( +ParserData.MlyValue.CHAR_REF i,p1,p2)) +fun ENTITY_REF (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 127,( +ParserData.MlyValue.ENTITY_REF i,p1,p2)) +end +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-lex mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-lex --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-lex 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-lex 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,131 @@ +(* html-lex + * + * COPYRIGHT (c) 1995 AT&T Bell Laboratories. + * COPYRIGHT (c) 1996 AT&T Research. + * + * A scanner for HTML. + * + * TODO: + * Recognize the DOCTYPE element + * <!DOCTYPE HTML PUBLIC "..."> + * Clean-up the scanning of start tags (do we need Err?). + * Whitespace in PRE elements should be preserved, but how? + *) + +structure T = Tokens +structure Elems = HTMLElementsFn ( + structure Tokens = Tokens + structure Err = Err + structure HTMLAttrs = HTMLAttrs) + +type pos = int +type svalue = T.svalue +type arg = (((string * int * int) -> unit) * string option) +type ('a, 'b) token = ('a, 'b) T.token +type lexresult= (svalue, pos) token + +fun eof _ = Tokens.EOF(0, 0) + +(* a buffer for collecting a string piecewise *) +val buffer = ref ([] : string list) +fun addStr s = (buffer := s :: !buffer) +fun getStr () = (String.concat(List.rev(! buffer)) before (buffer := [])) + +%% + +%s COM1 COM2 STAG; + +%header (functor HTMLLexFn ( + structure Tokens : HTML_TOKENS + structure Err : HTML_ERROR + structure HTMLAttrs : HTML_ATTRS)); + +%arg (errorFn, file); + +%full +%count + +alpha=[A-Za-z]; +digit=[0-9]; +namechar=[-A-Za-z0-9.]; +tag=({alpha}{namechar}*); +ws = [\ \t]; + +%% + +<INITIAL>"<"{tag} + => (addStr yytext; YYBEGIN STAG; continue()); +<STAG>">" + => (addStr yytext; + YYBEGIN INITIAL; + case Elems.startTag file (getStr(), !yylineno, !yylineno) + of NONE => continue() + | (SOME tag) => tag + (* end case *)); +<STAG>\n + => (addStr " "; continue()); +<STAG>{ws}+ + => (addStr yytext; continue()); +<STAG>{namechar}+ + => (addStr yytext; continue()); +<STAG>"=" + => (addStr yytext; continue()); +<STAG>"\""[^\"\n]*"\"" + => (addStr yytext; continue()); +<STAG>"'"[^'\n]*"'" + => (addStr yytext; continue()); +<STAG>. + => (addStr yytext; continue()); + +<INITIAL>"</"{tag}{ws}*">" + => (case Elems.endTag file (yytext, !yylineno, !yylineno) + of NONE => continue() + | (SOME tag) => tag + (* end case *)); + +<INITIAL>"<!--" + => (YYBEGIN COM1; continue()); +<COM1>"--" + => (YYBEGIN COM2; continue()); +<COM1>\n + => (continue()); +<COM1>. + => (continue()); +<COM2>"--" + => (YYBEGIN COM1; continue()); +<COM2>">" + => (YYBEGIN INITIAL; continue()); +<COM2>\n + => (continue()); +<COM2>{ws} + => (continue()); +<COM2>. + => (errorFn("bad comment syntax", !yylineno, !yylineno+1); + YYBEGIN INITIAL; + continue()); + +<INITIAL>"&#"[A-Za-z]+";" + => ( +(** At some point, we should support &#SPACE; and &#TAB; **) + continue()); + +<INITIAL>"&#"[0-9]+";" + => (T.CHAR_REF(yytext, !yylineno, !yylineno)); + +<INITIAL>"&"{tag}";" + => (T.ENTITY_REF(yytext, !yylineno, !yylineno)); + +<INITIAL>"\n" + => (continue()); +<INITIAL>{ws} + => (continue()); + +<INITIAL>[^<]+ + => (T.PCDATA(yytext, !yylineno, !yylineno)); +<INITIAL>. + => (errorFn(concat[ + "bogus character #\"", Char.toString(String.sub(yytext, 0)), + "\" in PCDATA\n" + ], !yylineno, !yylineno+1); + continue()); + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-lex.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-lex.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-lex.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-lex.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,995 @@ +functor HTMLLexFn ( + structure Tokens : HTML_TOKENS + structure Err : HTML_ERROR + structure HTMLAttrs : HTML_ATTRS) = struct + + structure yyInput : sig + + type stream + val mkStream : (int -> string) -> stream + val fromStream : TextIO.StreamIO.instream -> stream + val getc : stream -> (Char.char * stream) option + val getpos : stream -> int + val getlineNo : stream -> int + val subtract : stream * stream -> string + val eof : stream -> bool + val lastWasNL : stream -> bool + + end = struct + + structure TIO = TextIO + structure TSIO = TIO.StreamIO + structure TPIO = TextPrimIO + + datatype stream = Stream of { + strm : TSIO.instream, + id : int, (* track which streams originated + * from the same stream *) + pos : int, + lineNo : int, + lastWasNL : bool + } + + local + val next = ref 0 + in + fun nextId() = !next before (next := !next + 1) + end + + val initPos = 2 (* ml-lex bug compatibility *) + + fun mkStream inputN = let + val strm = TSIO.mkInstream + (TPIO.RD { + name = "lexgen", + chunkSize = 4096, + readVec = SOME inputN, + readArr = NONE, + readVecNB = NONE, + readArrNB = NONE, + block = NONE, + canInput = NONE, + avail = (fn () => NONE), + getPos = NONE, + setPos = NONE, + endPos = NONE, + verifyPos = NONE, + close = (fn () => ()), + ioDesc = NONE + }, "") + in + Stream {strm = strm, id = nextId(), pos = initPos, lineNo = 1, + lastWasNL = true} + end + + fun fromStream strm = Stream { + strm = strm, id = nextId(), pos = initPos, lineNo = 1, lastWasNL = true + } + + fun getc (Stream {strm, pos, id, lineNo, ...}) = (case TSIO.input1 strm + of NONE => NONE + | SOME (c, strm') => + SOME (c, Stream { + strm = strm', + pos = pos+1, + id = id, + lineNo = lineNo + + (if c = #"\n" then 1 else 0), + lastWasNL = (c = #"\n") + }) + (* end case*)) + + fun getpos (Stream {pos, ...}) = pos + + fun getlineNo (Stream {lineNo, ...}) = lineNo + + fun subtract (new, old) = let + val Stream {strm = strm, pos = oldPos, id = oldId, ...} = old + val Stream {pos = newPos, id = newId, ...} = new + val (diff, _) = if newId = oldId andalso newPos >= oldPos + then TSIO.inputN (strm, newPos - oldPos) + else raise Fail + "BUG: yyInput: attempted to subtract incompatible streams" + in + diff + end + + fun eof s = not (isSome (getc s)) + + fun lastWasNL (Stream {lastWasNL, ...}) = lastWasNL + + end + + datatype yystart_state = +COM2 | COM1 | STAG | INITIAL + structure UserDeclarations = + struct + +(* html-lex + * + * COPYRIGHT (c) 1995 AT&T Bell Laboratories. + * COPYRIGHT (c) 1996 AT&T Research. + * + * A scanner for HTML. + * + * TODO: + * Recognize the DOCTYPE element + * <!DOCTYPE HTML PUBLIC "..."> + * Clean-up the scanning of start tags (do we need Err?). + * Whitespace in PRE elements should be preserved, but how? + *) + +structure T = Tokens +structure Elems = HTMLElementsFn ( + structure Tokens = Tokens + structure Err = Err + structure HTMLAttrs = HTMLAttrs) + +type pos = int +type svalue = T.svalue +type arg = (((string * int * int) -> unit) * string option) +type ('a, 'b) token = ('a, 'b) T.token +type lexresult= (svalue, pos) token + +fun eof _ = Tokens.EOF(0, 0) + +(* a buffer for collecting a string piecewise *) +val buffer = ref ([] : string list) +fun addStr s = (buffer := s :: !buffer) +fun getStr () = (String.concat(List.rev(! buffer)) before (buffer := [])) + + + + end + + datatype yymatch + = yyNO_MATCH + | yyMATCH of yyInput.stream * action * yymatch + withtype action = yyInput.stream * yymatch -> UserDeclarations.lexresult + + local + + val yytable = +Vector.fromList [] + fun mk yyins = let + (* current start state *) + val yyss = ref INITIAL + fun YYBEGIN ss = (yyss := ss) + (* current input stream *) + val yystrm = ref yyins + (* get one char of input *) + val yygetc = yyInput.getc + (* create yytext *) + fun yymktext(strm) = yyInput.subtract (strm, !yystrm) + open UserDeclarations + fun lex +(yyarg as (errorFn, file)) () = let + fun continue() = let + val yylastwasn = yyInput.lastWasNL (!yystrm) + fun yystuck (yyNO_MATCH) = raise Fail "stuck state" + | yystuck (yyMATCH (strm, action, old)) = + action (strm, old) + val yypos = yyInput.getpos (!yystrm) + val yygetlineNo = yyInput.getlineNo + fun yyactsToMatches (strm, [], oldMatches) = oldMatches + | yyactsToMatches (strm, act::acts, oldMatches) = + yyMATCH (strm, act, yyactsToMatches (strm, acts, oldMatches)) + fun yygo actTable = + (fn (~1, _, oldMatches) => yystuck oldMatches + | (curState, strm, oldMatches) => let + val (transitions, finals') = Vector.sub (yytable, curState) + val finals = List.map (fn i => Vector.sub (actTable, i)) finals' + fun tryfinal() = + yystuck (yyactsToMatches (strm, finals, oldMatches)) + fun find (c, []) = NONE + | find (c, (c1, c2, s)::ts) = + if c1 <= c andalso c <= c2 then SOME s + else find (c, ts) + in case yygetc strm + of SOME(c, strm') => + (case find (c, transitions) + of NONE => tryfinal() + | SOME n => + yygo actTable + (n, strm', + yyactsToMatches (strm, finals, oldMatches))) + | NONE => tryfinal() + end) + in +let +fun yyAction0 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; (addStr yytext; YYBEGIN STAG; continue()) + end +fun yyAction1 (strm, lastMatch : yymatch) = let + val yylineno = ref(yygetlineNo(!(yystrm))) + val yytext = yymktext(strm) + in + yystrm := strm; + (addStr yytext; + YYBEGIN INITIAL; + case Elems.startTag file (getStr(), !yylineno, !yylineno) + of NONE => continue() + | (SOME tag) => tag + (* end case *)) + end +fun yyAction2 (strm, lastMatch : yymatch) = (yystrm := strm; + (addStr " "; continue())) +fun yyAction3 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; (addStr yytext; continue()) + end +fun yyAction4 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; (addStr yytext; continue()) + end +fun yyAction5 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; (addStr yytext; continue()) + end +fun yyAction6 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; (addStr yytext; continue()) + end +fun yyAction7 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; (addStr yytext; continue()) + end +fun yyAction8 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; (addStr yytext; continue()) + end +fun yyAction9 (strm, lastMatch : yymatch) = let + val yylineno = ref(yygetlineNo(!(yystrm))) + val yytext = yymktext(strm) + in + yystrm := strm; + (case Elems.endTag file (yytext, !yylineno, !yylineno) + of NONE => continue() + | (SOME tag) => tag + (* end case *)) + end +fun yyAction10 (strm, lastMatch : yymatch) = (yystrm := strm; + (YYBEGIN COM1; continue())) +fun yyAction11 (strm, lastMatch : yymatch) = (yystrm := strm; + (YYBEGIN COM2; continue())) +fun yyAction12 (strm, lastMatch : yymatch) = (yystrm := strm; (continue())) +fun yyAction13 (strm, lastMatch : yymatch) = (yystrm := strm; (continue())) +fun yyAction14 (strm, lastMatch : yymatch) = (yystrm := strm; + (YYBEGIN COM1; continue())) +fun yyAction15 (strm, lastMatch : yymatch) = (yystrm := strm; + (YYBEGIN INITIAL; continue())) +fun yyAction16 (strm, lastMatch : yymatch) = (yystrm := strm; (continue())) +fun yyAction17 (strm, lastMatch : yymatch) = (yystrm := strm; (continue())) +fun yyAction18 (strm, lastMatch : yymatch) = let + val yylineno = ref(yygetlineNo(!(yystrm))) + in + yystrm := strm; + (errorFn("bad comment syntax", !yylineno, !yylineno+1); + YYBEGIN INITIAL; + continue()) + end +fun yyAction19 (strm, lastMatch : yymatch) = (yystrm := strm; + ( +(** At some point, we should support &#SPACE; and &#TAB; **) + continue())) +fun yyAction20 (strm, lastMatch : yymatch) = let + val yylineno = ref(yygetlineNo(!(yystrm))) + val yytext = yymktext(strm) + in + yystrm := strm; (T.CHAR_REF(yytext, !yylineno, !yylineno)) + end +fun yyAction21 (strm, lastMatch : yymatch) = let + val yylineno = ref(yygetlineNo(!(yystrm))) + val yytext = yymktext(strm) + in + yystrm := strm; (T.ENTITY_REF(yytext, !yylineno, !yylineno)) + end +fun yyAction22 (strm, lastMatch : yymatch) = (yystrm := strm; (continue())) +fun yyAction23 (strm, lastMatch : yymatch) = (yystrm := strm; (continue())) +fun yyAction24 (strm, lastMatch : yymatch) = let + val yylineno = ref(yygetlineNo(!(yystrm))) + val yytext = yymktext(strm) + in + yystrm := strm; (T.PCDATA(yytext, !yylineno, !yylineno)) + end +fun yyAction25 (strm, lastMatch : yymatch) = let + val yylineno = ref(yygetlineNo(!(yystrm))) + val yytext = yymktext(strm) + in + yystrm := strm; + (errorFn(concat[ + "bogus character #\"", Char.toString(String.sub(yytext, 0)), + "\" in PCDATA\n" + ], !yylineno, !yylineno+1); + continue()) + end +fun yyQ35 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction0(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #":" + then yyAction0(strm, yyNO_MATCH) + else if inp < #":" + then if inp = #"/" + then yyAction0(strm, yyNO_MATCH) + else if inp < #"/" + then if inp <= #"," + then yyAction0(strm, yyNO_MATCH) + else yyQ35(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyQ35(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp = #"[" + then yyAction0(strm, yyNO_MATCH) + else if inp < #"[" + then if inp <= #"@" + then yyAction0(strm, yyNO_MATCH) + else yyQ35(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp = #"a" + then yyQ35(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < #"a" + then yyAction0(strm, yyNO_MATCH) + else if inp <= #"z" + then yyQ35(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + (* end case *)) +fun yyQ38 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction9(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction9(strm, yyNO_MATCH) + (* end case *)) +fun yyQ37 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = #" " + then yyQ37(strm', lastMatch) + else if inp < #" " + then if inp = #"\t" + then yyQ37(strm', lastMatch) + else yystuck(lastMatch) + else if inp = #">" + then yyQ38(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ36 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = #"0" + then yyQ36(strm', lastMatch) + else if inp < #"0" + then if inp = #" " + then yyQ37(strm', lastMatch) + else if inp < #" " + then if inp = #"\t" + then yyQ37(strm', lastMatch) + else yystuck(lastMatch) + else if inp = #"-" + then yyQ36(strm', lastMatch) + else if inp < #"-" + then yystuck(lastMatch) + else if inp = #"/" + then yystuck(lastMatch) + else yyQ36(strm', lastMatch) + else if inp = #"A" + then yyQ36(strm', lastMatch) + else if inp < #"A" + then if inp = #">" + then yyQ38(strm', lastMatch) + else if inp < #">" + then if inp <= #"9" + then yyQ36(strm', lastMatch) + else yystuck(lastMatch) + else yystuck(lastMatch) + else if inp = #"a" + then yyQ36(strm', lastMatch) + else if inp < #"a" + then if inp <= #"Z" + then yyQ36(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= #"z" + then yyQ36(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ34 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = #"[" + then yystuck(lastMatch) + else if inp < #"[" + then if inp <= #"@" + then yystuck(lastMatch) + else yyQ36(strm', lastMatch) + else if inp = #"a" + then yyQ36(strm', lastMatch) + else if inp < #"a" + then yystuck(lastMatch) + else if inp <= #"z" + then yyQ36(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ40 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction10(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction10(strm, yyNO_MATCH) + (* end case *)) +fun yyQ39 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = #"-" + then yyQ40(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ33 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = #"-" + then yyQ39(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ32 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction25(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"0" + then yyAction25(strm, yyNO_MATCH) + else if inp < #"0" + then if inp = #"\"" + then yyAction25(strm, yyNO_MATCH) + else if inp < #"\"" + then if inp = #"!" + then yyQ33(strm', yyMATCH(strm, yyAction25, yyNO_MATCH)) + else yyAction25(strm, yyNO_MATCH) + else if inp = #"/" + then yyQ34(strm', yyMATCH(strm, yyAction25, yyNO_MATCH)) + else yyAction25(strm, yyNO_MATCH) + else if inp = #"[" + then yyAction25(strm, yyNO_MATCH) + else if inp < #"[" + then if inp <= #"@" + then yyAction25(strm, yyNO_MATCH) + else yyQ35(strm', yyMATCH(strm, yyAction25, yyNO_MATCH)) + else if inp = #"a" + then yyQ35(strm', yyMATCH(strm, yyAction25, yyNO_MATCH)) + else if inp < #"a" + then yyAction25(strm, yyNO_MATCH) + else if inp <= #"z" + then yyQ35(strm', yyMATCH(strm, yyAction25, yyNO_MATCH)) + else yyAction25(strm, yyNO_MATCH) + (* end case *)) +fun yyQ41 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction24(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"<" + then yyAction24(strm, yyNO_MATCH) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + (* end case *)) +fun yyQ44 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction21(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"<" + then yyAction21(strm, yyNO_MATCH) + else yyQ41(strm', yyMATCH(strm, yyAction21, yyNO_MATCH)) + (* end case *)) +fun yyQ43 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction24(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"<" + then yyAction24(strm, yyNO_MATCH) + else if inp < #"<" + then if inp = #"0" + then yyQ43(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"0" + then if inp = #"-" + then yyQ43(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"-" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #"/" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ43(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #":" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #";" + then yyQ44(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ43(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #"[" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"[" + then if inp <= #"@" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ43(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #"a" + then yyQ43(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"a" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp <= #"z" + then yyQ43(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + (* end case *)) +fun yyQ47 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction19(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"<" + then yyAction19(strm, yyNO_MATCH) + else yyQ41(strm', yyMATCH(strm, yyAction19, yyNO_MATCH)) + (* end case *)) +fun yyQ46 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction24(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"A" + then yyQ46(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"A" + then if inp = #"<" + then yyAction24(strm, yyNO_MATCH) + else if inp < #"<" + then if inp = #";" + then yyQ47(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #"a" + then yyQ46(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"a" + then if inp <= #"Z" + then yyQ46(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp <= #"z" + then yyQ46(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + (* end case *)) +fun yyQ48 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction20(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"<" + then yyAction20(strm, yyNO_MATCH) + else yyQ41(strm', yyMATCH(strm, yyAction20, yyNO_MATCH)) + (* end case *)) +fun yyQ45 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction24(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #";" + then yyQ48(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #";" + then if inp = #"0" + then yyQ45(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"0" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #":" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #"<" + then yyAction24(strm, yyNO_MATCH) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + (* end case *)) +fun yyQ42 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction24(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"=" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"=" + then if inp = #":" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #":" + then if inp <= #"/" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #"<" + then yyAction24(strm, yyNO_MATCH) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #"[" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"[" + then if inp <= #"@" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ46(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #"a" + then yyQ46(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"a" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp <= #"z" + then yyQ46(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + (* end case *)) +fun yyQ31 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction24(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"=" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"=" + then if inp = #"$" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"$" + then if inp = #"#" + then yyQ42(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #"<" + then yyAction24(strm, yyNO_MATCH) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #"[" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"[" + then if inp <= #"@" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ43(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = #"a" + then yyQ43(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < #"a" + then yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp <= #"z" + then yyQ43(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + (* end case *)) +fun yyQ30 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction22(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"<" + then yyAction22(strm, yyNO_MATCH) + else yyQ41(strm', yyMATCH(strm, yyAction22, yyNO_MATCH)) + (* end case *)) +fun yyQ29 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction23(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"<" + then yyAction23(strm, yyNO_MATCH) + else yyQ41(strm', yyMATCH(strm, yyAction23, yyNO_MATCH)) + (* end case *)) +fun yyQ28 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction24(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"<" + then yyAction24(strm, yyNO_MATCH) + else yyQ41(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + (* end case *)) +fun yyQ3 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if yyInput.eof(!(yystrm)) + then UserDeclarations.eof(yyarg) + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = #"!" + then yyQ28(strm', lastMatch) + else if inp < #"!" + then if inp = #"\n" + then yyQ30(strm', lastMatch) + else if inp < #"\n" + then if inp = #"\t" + then yyQ29(strm', lastMatch) + else yyQ28(strm', lastMatch) + else if inp = #" " + then yyQ29(strm', lastMatch) + else yyQ28(strm', lastMatch) + else if inp = #"'" + then yyQ28(strm', lastMatch) + else if inp < #"'" + then if inp = #"&" + then yyQ31(strm', lastMatch) + else yyQ28(strm', lastMatch) + else if inp = #"<" + then yyQ32(strm', lastMatch) + else yyQ28(strm', lastMatch) + (* end case *)) +fun yyQ21 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction1(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction1(strm, yyNO_MATCH) + (* end case *)) +fun yyQ20 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction5(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction5(strm, yyNO_MATCH) + (* end case *)) +fun yyQ22 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction4(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #":" + then yyAction4(strm, yyNO_MATCH) + else if inp < #":" + then if inp = #"/" + then yyAction4(strm, yyNO_MATCH) + else if inp < #"/" + then if inp <= #"," + then yyAction4(strm, yyNO_MATCH) + else yyQ22(strm', yyMATCH(strm, yyAction4, yyNO_MATCH)) + else yyQ22(strm', yyMATCH(strm, yyAction4, yyNO_MATCH)) + else if inp = #"[" + then yyAction4(strm, yyNO_MATCH) + else if inp < #"[" + then if inp <= #"@" + then yyAction4(strm, yyNO_MATCH) + else yyQ22(strm', yyMATCH(strm, yyAction4, yyNO_MATCH)) + else if inp = #"a" + then yyQ22(strm', yyMATCH(strm, yyAction4, yyNO_MATCH)) + else if inp < #"a" + then yyAction4(strm, yyNO_MATCH) + else if inp <= #"z" + then yyQ22(strm', yyMATCH(strm, yyAction4, yyNO_MATCH)) + else yyAction4(strm, yyNO_MATCH) + (* end case *)) +fun yyQ19 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction4(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #":" + then yyAction4(strm, yyNO_MATCH) + else if inp < #":" + then if inp = #"/" + then yyAction4(strm, yyNO_MATCH) + else if inp < #"/" + then if inp <= #"," + then yyAction4(strm, yyNO_MATCH) + else yyQ22(strm', yyMATCH(strm, yyAction4, yyNO_MATCH)) + else yyQ22(strm', yyMATCH(strm, yyAction4, yyNO_MATCH)) + else if inp = #"[" + then yyAction4(strm, yyNO_MATCH) + else if inp < #"[" + then if inp <= #"@" + then yyAction4(strm, yyNO_MATCH) + else yyQ22(strm', yyMATCH(strm, yyAction4, yyNO_MATCH)) + else if inp = #"a" + then yyQ22(strm', yyMATCH(strm, yyAction4, yyNO_MATCH)) + else if inp < #"a" + then yyAction4(strm, yyNO_MATCH) + else if inp <= #"z" + then yyQ22(strm', yyMATCH(strm, yyAction4, yyNO_MATCH)) + else yyAction4(strm, yyNO_MATCH) + (* end case *)) +fun yyQ24 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction7(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction7(strm, yyNO_MATCH) + (* end case *)) +fun yyQ23 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = #"\v" + then yyQ23(strm', lastMatch) + else if inp < #"\v" + then if inp = #"\n" + then yystuck(lastMatch) + else yyQ23(strm', lastMatch) + else if inp = #"'" + then yyQ24(strm', lastMatch) + else yyQ23(strm', lastMatch) + (* end case *)) +fun yyQ18 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction8(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"\v" + then yyQ23(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else if inp < #"\v" + then if inp = #"\n" + then yyAction8(strm, yyNO_MATCH) + else yyQ23(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else if inp = #"'" + then yyQ24(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else yyQ23(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + (* end case *)) +fun yyQ26 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction6(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction6(strm, yyNO_MATCH) + (* end case *)) +fun yyQ25 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = #"\v" + then yyQ25(strm', lastMatch) + else if inp < #"\v" + then if inp = #"\n" + then yystuck(lastMatch) + else yyQ25(strm', lastMatch) + else if inp = #"\"" + then yyQ26(strm', lastMatch) + else yyQ25(strm', lastMatch) + (* end case *)) +fun yyQ17 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction8(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"\v" + then yyQ25(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else if inp < #"\v" + then if inp = #"\n" + then yyAction8(strm, yyNO_MATCH) + else yyQ25(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else if inp = #"\"" + then yyQ26(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else yyQ25(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + (* end case *)) +fun yyQ16 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ27 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction3(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"\n" + then yyAction3(strm, yyNO_MATCH) + else if inp < #"\n" + then if inp = #"\t" + then yyQ27(strm', yyMATCH(strm, yyAction3, yyNO_MATCH)) + else yyAction3(strm, yyNO_MATCH) + else if inp = #" " + then yyQ27(strm', yyMATCH(strm, yyAction3, yyNO_MATCH)) + else yyAction3(strm, yyNO_MATCH) + (* end case *)) +fun yyQ15 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction3(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"\n" + then yyAction3(strm, yyNO_MATCH) + else if inp < #"\n" + then if inp = #"\t" + then yyQ27(strm', yyMATCH(strm, yyAction3, yyNO_MATCH)) + else yyAction3(strm, yyNO_MATCH) + else if inp = #" " + then yyQ27(strm', yyMATCH(strm, yyAction3, yyNO_MATCH)) + else yyAction3(strm, yyNO_MATCH) + (* end case *)) +fun yyQ14 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction8(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction8(strm, yyNO_MATCH) + (* end case *)) +fun yyQ2 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if yyInput.eof(!(yystrm)) + then UserDeclarations.eof(yyarg) + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = #"-" + then yyQ19(strm', lastMatch) + else if inp < #"-" + then if inp = #"!" + then yyQ14(strm', lastMatch) + else if inp < #"!" + then if inp = #"\n" + then yyQ16(strm', lastMatch) + else if inp < #"\n" + then if inp = #"\t" + then yyQ15(strm', lastMatch) + else yyQ14(strm', lastMatch) + else if inp = #" " + then yyQ15(strm', lastMatch) + else yyQ14(strm', lastMatch) + else if inp = #"'" + then yyQ18(strm', lastMatch) + else if inp < #"'" + then if inp = #"\"" + then yyQ17(strm', lastMatch) + else yyQ14(strm', lastMatch) + else yyQ14(strm', lastMatch) + else if inp = #">" + then yyQ21(strm', lastMatch) + else if inp < #">" + then if inp = #"0" + then yyQ19(strm', lastMatch) + else if inp < #"0" + then if inp = #"/" + then yyQ14(strm', lastMatch) + else yyQ19(strm', lastMatch) + else if inp = #":" + then yyQ14(strm', lastMatch) + else if inp < #":" + then yyQ19(strm', lastMatch) + else if inp = #"=" + then yyQ20(strm', lastMatch) + else yyQ14(strm', lastMatch) + else if inp = #"[" + then yyQ14(strm', lastMatch) + else if inp < #"[" + then if inp <= #"@" + then yyQ14(strm', lastMatch) + else yyQ19(strm', lastMatch) + else if inp = #"a" + then yyQ19(strm', lastMatch) + else if inp < #"a" + then yyQ14(strm', lastMatch) + else if inp <= #"z" + then yyQ19(strm', lastMatch) + else yyQ14(strm', lastMatch) + (* end case *)) +fun yyQ13 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction11(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction11(strm, yyNO_MATCH) + (* end case *)) +fun yyQ12 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction13(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"-" + then yyQ13(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + (* end case *)) +fun yyQ11 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction12(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction12(strm, yyNO_MATCH) + (* end case *)) +fun yyQ10 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction13(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction13(strm, yyNO_MATCH) + (* end case *)) +fun yyQ1 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if yyInput.eof(!(yystrm)) + then UserDeclarations.eof(yyarg) + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = #"\v" + then yyQ10(strm', lastMatch) + else if inp < #"\v" + then if inp = #"\n" + then yyQ11(strm', lastMatch) + else yyQ10(strm', lastMatch) + else if inp = #"-" + then yyQ12(strm', lastMatch) + else yyQ10(strm', lastMatch) + (* end case *)) +fun yyQ8 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction15(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction15(strm, yyNO_MATCH) + (* end case *)) +fun yyQ9 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction14(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction14(strm, yyNO_MATCH) + (* end case *)) +fun yyQ7 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction18(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = #"-" + then yyQ9(strm', yyMATCH(strm, yyAction18, yyNO_MATCH)) + else yyAction18(strm, yyNO_MATCH) + (* end case *)) +fun yyQ6 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction16(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction16(strm, yyNO_MATCH) + (* end case *)) +fun yyQ5 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ4 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction18(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction18(strm, yyNO_MATCH) + (* end case *)) +fun yyQ0 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if yyInput.eof(!(yystrm)) + then UserDeclarations.eof(yyarg) + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = #"!" + then yyQ4(strm', lastMatch) + else if inp < #"!" + then if inp = #"\n" + then yyQ6(strm', lastMatch) + else if inp < #"\n" + then if inp = #"\t" + then yyQ5(strm', lastMatch) + else yyQ4(strm', lastMatch) + else if inp = #" " + then yyQ5(strm', lastMatch) + else yyQ4(strm', lastMatch) + else if inp = #"." + then yyQ4(strm', lastMatch) + else if inp < #"." + then if inp = #"-" + then yyQ7(strm', lastMatch) + else yyQ4(strm', lastMatch) + else if inp = #">" + then yyQ8(strm', lastMatch) + else yyQ4(strm', lastMatch) + (* end case *)) +in + (case (!(yyss)) + of COM2 => yyQ0(!(yystrm), yyNO_MATCH) + | COM1 => yyQ1(!(yystrm), yyNO_MATCH) + | STAG => yyQ2(!(yystrm), yyNO_MATCH) + | INITIAL => yyQ3(!(yystrm), yyNO_MATCH) + (* end case *)) +end + end + in + continue() + handle IO.Io{cause, ...} => raise cause + end + in + lex + end + in + fun makeLexer yyinputN = mk (yyInput.mkStream yyinputN) + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,47 @@ +(* html-lib.cm + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * Sources file for HTML parsing/pretty-printing library; part of the SML/NJ + * Library suite. + *) + +Library + signature HTML_ERROR + signature HTML + structure HTML + structure MakeHTML + structure PrHTML + structure HTMLDefaults + functor HTMLParserFn +is +#if defined(NEW_CM) + $/basis.cm + $/smlnj-lib.cm + $/ml-yacc-lib.cm +#else + ../Util/smlnj-lib.cm + ml-yacc-lib.cm +#endif + +#if defined(NO_PLUGINS) + html-lex.sml + html-gram.sig + html-gram.sml +#else + html-lex : MLLex + html-gram : MLYacc +#endif + + html-error-sig.sml + html-sig.sml + html.sml + html-attr-vals.sml + html-attrs-sig.sml + html-attrs-fn.sml + html-elements-fn.sml + html-parser-fn.sml + check-html-fn.sml + html-defaults.sml + make-html.sml + pr-html.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,476 @@ + +ann + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" + "allowOrPats true" "allowVectorExpsAndPats true" +in + +local + basis l41 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb $(SML_LIB)/basis/unsafe.mlb + end + basis l8 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end + basis l69 = + bas + (* $/ml-yacc-lib.cm ====> *) $(SML_LIB)/mlyacc-lib/mlyacc-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + html-error-sig.sml + in + signature gs_0 = HTML_ERROR + end + local + open l8 + in + structure gs_1 = Format + end + local + open l41 + in + structure gs_2 = Char + structure gs_3 = CharArray + structure gs_4 = CharVector + structure gs_5 = FixedInt + structure gs_6 = General + structure gs_7 = Int + structure gs_8 = Int32 + structure gs_9 = Int64 + structure gs_10 = IntInf + structure gs_11 = LargeInt + structure gs_12 = LargeReal + structure gs_13 = LargeWord + structure gs_14 = OS + structure gs_15 = Position + structure gs_16 = Real + structure gs_17 = Real64 + structure gs_18 = RealArray + structure gs_19 = RealArraySlice + structure gs_20 = RealVector + structure gs_21 = RealVectorSlice + structure gs_22 = SMLofNJ + structure gs_23 = Socket + structure gs_24 = String + structure gs_25 = Substring + structure gs_26 = SysWord + structure gs_27 = Time + structure gs_28 = Word + structure gs_29 = Word32 + structure gs_30 = Word64 + structure gs_31 = Word8 + end + local + open l41 + in + structure gs_32 = List + end + local + open l8 + in + structure gs_33 = ListFormat + end + local + html-sig.sml + in + signature gs_34 = HTML + end + local + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + signature HTML = gs_34 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure List = gs_32 + structure OS = gs_14 + structure Position = gs_15 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure Time = gs_27 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + html.sml + in + structure gs_35 = HTML + end + local + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure Format = gs_1 + structure General = gs_6 + structure HTML = gs_35 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure List = gs_32 + structure ListFormat = gs_33 + structure OS = gs_14 + structure Position = gs_15 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure Time = gs_27 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + pr-html.sml + in + structure gs_36 = PrHTML + end + local + structure HTML = gs_35 + make-html.sml + in + structure gs_37 = MakeHTML + end + local + structure HTML = gs_35 + html-defaults.sml + in + structure gs_38 = HTMLDefaults + end + local + open l69 + in + functor gs_39 = Join + functor gs_40 = JoinWithArg + end + local + open l69 + in + structure gs_41 = LrParser + end + local + open l41 + in + structure gs_42 = TextIO + end + local + structure Format = gs_1 + structure HTML = gs_35 + signature HTML_ERROR = gs_0 + structure List = gs_32 + check-html-fn.sml + in + functor gs_43 = CheckHTMLFn + end + local + open l41 + in + structure gs_44 = IO + end + local + open l41 + in + structure gs_45 = TextPrimIO + end + local + open l41 + in + structure gs_46 = Vector + end + local + open l8 + in + functor gs_47 = HashTableFn + end + local + open l8 + in + structure gs_48 = HashString + end + local + html-attr-vals.sml + in + structure gs_49 = HTMLAttrVals + end + local + structure HTML = gs_35 + structure HTMLAttrVals = gs_49 + html-attrs-sig.sml + in + signature gs_50 = HTML_ATTRS + end + local + open l69 + in + signature gs_51 = ARG_LEXER + signature gs_52 = ARG_PARSER + signature gs_53 = LEXER + signature gs_54 = LR_PARSER + signature gs_55 = LR_TABLE + signature gs_56 = PARSER + signature gs_57 = PARSER_DATA + signature gs_58 = STREAM + signature gs_59 = TOKEN + end + local + signature ARG_LEXER = gs_51 + signature ARG_PARSER = gs_52 + structure HTMLAttrVals = gs_49 + signature LEXER = gs_53 + signature LR_PARSER = gs_54 + signature LR_TABLE = gs_55 + signature PARSER = gs_56 + signature PARSER_DATA = gs_57 + signature STREAM = gs_58 + signature TOKEN = gs_59 + html-gram.sig + in + signature gs_60 = HTML_LRVALS + signature gs_61 = HTML_TOKENS + end + local + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + signature HTML_ATTRS = gs_50 + signature HTML_ERROR = gs_0 + signature HTML_LRVALS = gs_60 + signature HTML_TOKENS = gs_61 + structure HashString = gs_48 + functor HashTableFn = gs_47 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure List = gs_32 + structure OS = gs_14 + structure Position = gs_15 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure Time = gs_27 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + html-elements-fn.sml + in + functor gs_62 = HTMLElementsFn + end + local + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + functor HTMLElementsFn = gs_62 + signature HTML_ATTRS = gs_50 + signature HTML_ERROR = gs_0 + signature HTML_LRVALS = gs_60 + signature HTML_TOKENS = gs_61 + structure IO = gs_44 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure List = gs_32 + structure OS = gs_14 + structure Position = gs_15 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure TextIO = gs_42 + structure TextPrimIO = gs_45 + structure Time = gs_27 + structure Vector = gs_46 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + html-lex.sml + in + functor gs_63 = HTMLLexFn + end + local + open l41 + in + structure gs_64 = Array + end + local + signature ARG_LEXER = gs_51 + signature ARG_PARSER = gs_52 + structure Array = gs_64 + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + structure HTML = gs_35 + structure HTMLAttrVals = gs_49 + signature HTML_ATTRS = gs_50 + signature HTML_LRVALS = gs_60 + signature HTML_TOKENS = gs_61 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + signature LEXER = gs_53 + signature LR_PARSER = gs_54 + signature LR_TABLE = gs_55 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure List = gs_32 + structure OS = gs_14 + signature PARSER = gs_56 + signature PARSER_DATA = gs_57 + structure Position = gs_15 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + signature STREAM = gs_58 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + signature TOKEN = gs_59 + structure Time = gs_27 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + html-gram.sml + in + functor gs_65 = HTMLLrValsFn + end + local + structure Array = gs_64 + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + structure HTML = gs_35 + structure HTMLAttrVals = gs_49 + signature HTML_ATTRS = gs_50 + signature HTML_ERROR = gs_0 + structure HashString = gs_48 + functor HashTableFn = gs_47 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure List = gs_32 + structure OS = gs_14 + structure Position = gs_15 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure Time = gs_27 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + html-attrs-fn.sml + in + functor gs_66 = HTMLAttrsFn + end + local + functor CheckHTMLFn = gs_43 + structure HTML = gs_35 + functor HTMLAttrsFn = gs_66 + functor HTMLLexFn = gs_63 + functor HTMLLrValsFn = gs_65 + signature HTML_ERROR = gs_0 + functor Join = gs_39 + functor JoinWithArg = gs_40 + structure LrParser = gs_41 + structure TextIO = gs_42 + html-parser-fn.sml + in + functor gs_67 = HTMLParserFn + end +in + signature HTML = gs_34 + structure HTML = gs_35 + structure HTMLDefaults = gs_38 + functor HTMLParserFn = gs_67 + signature HTML_ERROR = gs_0 + structure MakeHTML = gs_37 + structure PrHTML = gs_36 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-parser-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-parser-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-parser-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-parser-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,53 @@ +(* html-parser-fn.sml + * + * COPYRIGHT (c) 1996 AT&T REsearch. + * + * This glues the lexer and parser together. + *) + +functor HTMLParserFn (Err : HTML_ERROR) : sig + + val parseFile : string -> HTML.html + + end = struct + + structure TIO = TextIO + + structure HTMLAttrs = HTMLAttrsFn(Err) + structure HTMLLrVals = HTMLLrValsFn( + structure Token = LrParser.Token + structure HTMLAttrs = HTMLAttrs) + structure Lex = HTMLLexFn( + structure Err = Err + structure Tokens = HTMLLrVals.Tokens + structure HTMLAttrs = HTMLAttrs) + structure Parser = JoinWithArg( + structure Lex= Lex + structure LrParser = LrParser + structure ParserData = HTMLLrVals.ParserData) + structure CheckHTML = CheckHTMLFn(Err) + + fun parseFile fname = let + (* build a context to hand to the HTMLAttrs build functions. *) + fun ctx lnum = {file = SOME fname, line=lnum} + fun lexError (msg, lnum, _) = + Err.lexError {file = SOME fname, line = lnum} msg + fun syntaxError (msg, lnum, _) = + Err.syntaxError {file = SOME fname, line = lnum} msg + val inStrm = TIO.openIn fname + fun close () = TIO.closeIn inStrm + val lexer = Parser.makeLexer (fn n => TIO.inputN(inStrm, n)) + (lexError, SOME fname) + val (result, _) = Parser.parse ( + 15, (* lookahead *) + lexer, + syntaxError, + ctx) + in + CheckHTML.check (ctx 0) result + handle ex => (close(); raise ex) + close(); + result + end + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,374 @@ +(* html-sig.sml + * + * COPYRIGHT (c) 1995 AT&T Bell Laboratories. + * COPYRIGHT (c) 1996 AT&T Research. + * + * This file defines the abstract syntax of HTML documents. The + * AST follows the HTML 3.2 Proposed Standard. + *) + +signature HTML = + sig + + val htmlVersion : string (* = "3.2" *) + + (* the HTML data representations (these are all string) *) + type pcdata = string + type cdata = string + type url = string + type pixels = cdata + type name = string + type id = string + + (* the different types of HTTP methods *) + structure HttpMethod : sig + eqtype method + val get : method + val put : method + val toString : method -> string + val fromString : string -> method option + end + + (* the different types of INPUT elements *) + structure InputType : sig + eqtype ty + val text : ty + val password : ty + val checkbox : ty + val radio : ty + val submit : ty + val reset : ty + val file : ty + val hidden : ty + val image : ty + val toString : ty -> string + val fromString : string -> ty option + end + + (* alignment attributes for IMG, APPLET and INPUT elements *) + structure IAlign : sig + eqtype align + val top : align + val middle : align + val bottom : align + val left : align + val right : align + val toString : align -> string + val fromString : string -> align option + end + + structure HAlign : sig + eqtype align + val left : align + val center : align + val right : align + val toString : align -> string + val fromString : string -> align option + end + + structure CellVAlign : sig + eqtype align + val top : align + val middle : align + val bottom : align + val baseline : align + val toString : align -> string + val fromString : string -> align option + end + + structure CaptionAlign : sig + eqtype align + val top : align + val bottom : align + val toString : align -> string + val fromString : string -> align option + end + + structure ULStyle : sig + eqtype style + val disc : style + val square : style + val circle : style + val toString : style -> string + val fromString : string -> style option + end + + structure Shape : sig + eqtype shape + val rect : shape + val circle : shape + val poly : shape + val default : shape + val toString : shape -> string + val fromString : string -> shape option + end + + structure TextFlowCtl : sig + eqtype control + val left : control + val right : control + val all : control + val none : control + val toString : control -> string + val fromString : string -> control option + end + + datatype html = HTML of { + version : cdata option, + head : head_content list, + body : body + } + + and head_content + = Head_TITLE of pcdata + | Head_ISINDEX of {prompt : cdata option} + | Head_BASE of {href : url} + | Head_META of { + httpEquiv : name option, + name : name option, + content : cdata + } + | Head_LINK of { + id : id option, + href : url option, + rel : cdata option, + rev : cdata option, + title : cdata option + } + (* SCRIPT/STYLE elements are placeholders for the next version of HTML *) + | Head_SCRIPT of pcdata + | Head_STYLE of pcdata + + and body = BODY of { + background : url option, + bgcolor : cdata option, + text : cdata option, + link : cdata option, + vlink : cdata option, + alink : cdata option, + content : block + } + + and block + = BlockList of block list + | TextBlock of text + | Hn of { + n : int, + align : HAlign.align option, + content : text + } + (* NOTE: the content of an ADDRESS element is really (text | P)* *) + | ADDRESS of block + | P of { + align : HAlign.align option, + content : text + } + | UL of { + ty : ULStyle.style option, + compact : bool, + content : list_item list + } + | OL of { + ty : cdata option, + start : int option, + compact : bool, + content : list_item list + } + | DIR of { + compact : bool, + content : list_item list + } + | MENU of { + compact : bool, + content : list_item list + } + | DL of { + compact : bool, + content : {dt : text list, dd : block} list + } + | PRE of { + width : int option, + content : text + } + | DIV of { + align : HAlign.align, + content : block + } + | CENTER of block + | BLOCKQUOTE of block + | FORM of { + action : url option, + method : HttpMethod.method, + enctype : cdata option, + content : block (* -(FORM) *) + } + | ISINDEX of {prompt : cdata option} + | HR of { + align : HAlign.align option, + noshade : bool, + size : pixels option, + width : cdata option + } + | TABLE of { + align : HAlign.align option, + width : cdata option, + border : pixels option, + cellspacing : pixels option, + cellpadding : pixels option, + caption : caption option, + content : tr list + } + + and list_item = LI of { + ty : cdata option, + value : int option, + content : block + } + + (** table content **) + and caption = CAPTION of { + align : CaptionAlign.align option, + content : text + } + and tr = TR of { + align : HAlign.align option, + valign : CellVAlign.align option, + content : table_cell list + } + and table_cell + = TH of { + nowrap : bool, + rowspan : int option, + colspan : int option, + align : HAlign.align option, + valign : CellVAlign.align option, + width : pixels option, + height : pixels option, + content : block + } + | TD of { + nowrap : bool, + rowspan : int option, + colspan : int option, + align : HAlign.align option, + valign : CellVAlign.align option, + width : pixels option, + height : pixels option, + content : block + } + + (** Text **) + and text + = TextList of text list + | PCDATA of pcdata + | TT of text + | I of text + | B of text + | U of text + | STRIKE of text + | BIG of text + | SMALL of text + | SUB of text + | SUP of text + | EM of text + | STRONG of text + | DFN of text + | CODE of text + | SAMP of text + | KBD of text + | VAR of text + | CITE of text + | A of { + name : cdata option, + href : url option, + rel : cdata option, + rev : cdata option, + title : cdata option, + content : text (* -(A) *) + } + | IMG of { + src : url, + alt : cdata option, + align : IAlign.align option, + height : pixels option, + width : pixels option, + border : pixels option, + hspace : pixels option, + vspace : pixels option, + usemap : url option, + ismap : bool + } + | APPLET of { + codebase : url option, + code : cdata, + name : cdata option, + alt : cdata option, + align : IAlign.align option, + height : pixels option, + width : pixels option, + hspace : pixels option, + vspace : pixels option, + content : text + } + | PARAM of { (* applet parameter *) + name : name, + value : cdata option + } + | FONT of { + size : cdata option, + color : cdata option, + content : text + } + | BASEFONT of { + size : cdata option, + content : text + } + | BR of { + clear : TextFlowCtl.control option + } + | MAP of { + name : cdata option, + content : area list + } + | INPUT of { + ty : InputType.ty option, + name : cdata option, + value : cdata option, + checked : bool, + size : cdata option, + maxlength : int option, + src : url option, + align : IAlign.align option + } + | SELECT of { + name : cdata, + size : int option, + content : select_option list + } + | TEXTAREA of { + name : cdata, + rows : int, + cols : int, + content : pcdata + } + (* SCRIPT elements are placeholders for the next version of HTML *) + | SCRIPT of pcdata + + (* map areas *) + and area = AREA of { + shape : Shape.shape option, + coords : cdata option, + href : url option, + nohref : bool, + alt : cdata + } + + (* SELECT options *) + and select_option = OPTION of { + selected : bool, + value : cdata option, + content : pcdata + } + + end (* signature HTML *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/html.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/html.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,395 @@ +(* html.sml + * + * COPYRIGHT (c) 1995 AT&T Bell Laboratories. + * COPYRIGHT (c) 1996 AT&T Research. + * + * This file defines the abstract syntax of HTML documents. The + * AST follows the HTML 3.2 Proposed Standard. + *) + +structure HTML : HTML = + struct + + val htmlVersion = "3.2 Final" + + type pcdata = string + type cdata = string + type url = string + type pixels = cdata + type name = string + type id = string + + fun match sl s = let + val cmp = String.collate + (fn (c1, c2) => Char.compare(Char.toUpper c1, c2)) + fun eq (ref s') = (cmp(s, s') = General.EQUAL) + in + List.find eq sl + end + + (* the different types of HTTP methods *) + structure HttpMethod = + struct + type method = string ref + val get = ref "GET" + val put = ref "PUT" + fun toString (ref s) = s + val fromString = match [get, put] + end + + (* the different types of INPUT elements *) + structure InputType = + struct + type ty = string ref + val text = ref "TEXT" + val password = ref "PASSWORD" + val checkbox = ref "CHECKBOX" + val radio = ref "RADIO" + val submit = ref "SUBMIT" + val reset = ref "RESET" + val file = ref "FILE" + val hidden = ref "HIDDEN" + val image = ref "IMAGE" + fun toString (ref s) = s + val fromString = match [ + text, password, checkbox, + radio, submit, reset, + file, hidden, image + ] + end + + (* alignment attributes for IMG, APPLET and INPUT elements *) + structure IAlign = + struct + type align = string ref + val top = ref "TOP" + val middle = ref "MIDDLE" + val bottom = ref "BOTTOM" + val left = ref "LEFT" + val right = ref "RIGHT" + fun toString (ref s) = s + val fromString = match [top, middle, bottom, left, right] + end + + structure HAlign = + struct + type align = string ref + val left = ref "LEFT" + val center = ref "CENTER" + val right = ref "RIGHT" + fun toString (ref s) = s + val fromString = match [left, center, right] + end + + structure CellVAlign = + struct + type align = string ref + val top = ref "TOP" + val middle = ref "MIDDLE" + val bottom = ref "BOTTOM" + val baseline = ref "BASELINE" + fun toString (ref s) = s + val fromString = match [top, middle, bottom, baseline] + end + + structure CaptionAlign = + struct + type align = string ref + val top = ref "TOP" + val bottom = ref "BOTTOM" + val left = ref "LEFT" + val right = ref "RIGHT" + fun toString (ref s) = s + val fromString = match [top, bottom, left, right] + end + + structure ULStyle = + struct + type style = string ref + val disc = ref "DISC" + val square = ref "SQUARE" + val circle = ref "CIRCLE" + fun toString (ref s) = s + val fromString = match [disc, square, circle] + end + + structure Shape = + struct + type shape = string ref + val rect = ref "RECT" + val circle = ref "CIRCLE" + val poly = ref "POLY" + val default = ref "DEFAULT" + fun toString (ref s) = s + val fromString = match [rect, circle, poly, default] + end + + structure TextFlowCtl = + struct + type control = string ref + val left = ref "LEFT" + val right = ref "RIGHT" + val all = ref "ALL" + val none = ref "NONE" + fun toString (ref s) = s + val fromString = match [left, right, all, none] + end + + datatype html = HTML of { + version : cdata option, + head : head_content list, + body : body + } + + and head_content + = Head_TITLE of pcdata + | Head_ISINDEX of {prompt : cdata option} + | Head_BASE of {href : url} + | Head_META of { + httpEquiv : name option, + name : name option, + content : cdata + } + | Head_LINK of { + id : id option, + href : url option, + rel : cdata option, + rev : cdata option, + title : cdata option + } + (* SCRIPT/STYLE elements are placeholders for the next version of HTML *) + | Head_SCRIPT of pcdata + | Head_STYLE of pcdata + + and body = BODY of { + background : url option, + bgcolor : cdata option, + text : cdata option, + link : cdata option, + vlink : cdata option, + alink : cdata option, + content : block + } + + and block + = BlockList of block list + | TextBlock of text + | Hn of { + n : int, + align : HAlign.align option, + content : text + } + | ADDRESS of block + | P of { + align : HAlign.align option, + content : text + } + | UL of { + ty : ULStyle.style option, + compact : bool, + content : list_item list + } + | OL of { + ty : cdata option, + start : int option, + compact : bool, + content : list_item list + } + | DIR of { + compact : bool, + content : list_item list + } + | MENU of { + compact : bool, + content : list_item list + } + | DL of { + compact : bool, + content : {dt : text list, dd : block} list + } + | PRE of { + width : int option, + content : text + } + | DIV of { + align : HAlign.align, + content : block + } + | CENTER of block + | BLOCKQUOTE of block + | FORM of { + action : url option, + method : HttpMethod.method, + enctype : cdata option, + content : block (* -(FORM) *) + } + | ISINDEX of {prompt : cdata option} + | HR of { + align : HAlign.align option, + noshade : bool, + size : pixels option, + width : cdata option + } + | TABLE of { + align : HAlign.align option, + width : cdata option, + border : pixels option, + cellspacing : pixels option, + cellpadding : pixels option, + caption : caption option, + content : tr list + } + + and list_item = LI of { + ty : cdata option, + value : int option, + content : block + } + + (** table content **) + and caption = CAPTION of { + align : CaptionAlign.align option, + content : text + } + and tr = TR of { + align : HAlign.align option, + valign : CellVAlign.align option, + content : table_cell list + } + and table_cell + = TH of { + nowrap : bool, + rowspan : int option, + colspan : int option, + align : HAlign.align option, + valign : CellVAlign.align option, + width : pixels option, + height : pixels option, + content : block + } + | TD of { + nowrap : bool, + rowspan : int option, + colspan : int option, + align : HAlign.align option, + valign : CellVAlign.align option, + width : pixels option, + height : pixels option, + content : block + } + + (** Text **) + and text + = TextList of text list + | PCDATA of pcdata + | TT of text + | I of text + | B of text + | U of text + | STRIKE of text + | BIG of text + | SMALL of text + | SUB of text + | SUP of text + | EM of text + | STRONG of text + | DFN of text + | CODE of text + | SAMP of text + | KBD of text + | VAR of text + | CITE of text + | A of { + name : cdata option, + href : url option, + rel : cdata option, + rev : cdata option, + title : cdata option, + content : text (* -(A) *) + } + | IMG of { + src : url, + alt : cdata option, + align : IAlign.align option, + height : pixels option, + width : pixels option, + border : pixels option, + hspace : pixels option, + vspace : pixels option, + usemap : url option, + ismap : bool + } + | APPLET of { + codebase : url option, + code : cdata, + name : cdata option, + alt : cdata option, + align : IAlign.align option, + height : pixels option, + width : pixels option, + hspace : pixels option, + vspace : pixels option, + content : text + } + | PARAM of { (* applet parameter *) + name : name, + value : cdata option + } + | FONT of { + size : cdata option, + color : cdata option, + content : text + } + | BASEFONT of { + size : cdata option, + content : text + } + | BR of { + clear : TextFlowCtl.control option + } + | MAP of { + name : cdata option, + content : area list + } + | INPUT of { + ty : InputType.ty option, + name : cdata option, + value : cdata option, + checked : bool, + size : cdata option, + maxlength : int option, + src : url option, + align : IAlign.align option + } + | SELECT of { + name : cdata, + size : int option, + content : select_option list + } + | TEXTAREA of { + name : cdata, + rows : int, + cols : int, + content : pcdata + } + (* SCRIPT elements are placeholders for the next version of HTML *) + | SCRIPT of pcdata + + (* map areas *) + and area = AREA of { + shape : Shape.shape option, + coords : cdata option, + href : url option, + nohref : bool, + alt : cdata + } + + (* SELECT options *) + and select_option = OPTION of { + selected : bool, + value : cdata option, + content : pcdata + } + + end (* signature HTML *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/make-html.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/make-html.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/make-html.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/make-html.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,124 @@ +(* make-html.sml + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * This is a collection of constructors for building some of the common + * kinds of HTML elements. + *) + +structure MakeHTML : sig + + val blockList : HTML.block list -> HTML.block + val textList : HTML.text list -> HTML.text + + val mkH : (int * HTML.pcdata) -> HTML.block + + val mkP : HTML.text -> HTML.block + val mkUL : HTML.list_item list -> HTML.block + val mkOL : HTML.list_item list -> HTML.block + val mkDL : {dt : HTML.text list, dd : HTML.block} list -> HTML.block + val HR : HTML.block + val BR : HTML.text + + val mkLI : HTML.block -> HTML.list_item + + val mkA_HREF : {href : HTML.url, content : HTML.text} -> HTML.text + val mkA_NAME : {name : HTML.cdata, content : HTML.text} -> HTML.text + + val mkTR : HTML.table_cell list -> HTML.tr + val mkTH : HTML.block -> HTML.table_cell + val mkTH_COLSPAN : {colspan : int, content : HTML.block} -> HTML.table_cell + val mkTD : HTML.block -> HTML.table_cell + val mkTD_COLSPAN : {colspan : int, content : HTML.block} -> HTML.table_cell + + end = struct + + fun blockList [b] = b + | blockList bl = HTML.BlockList bl + + fun textList [t] = t + | textList tl = HTML.TextList tl + + fun mkH (n, hdr) = HTML.Hn{n = n, align=NONE, content=HTML.PCDATA hdr} + + fun mkP content = HTML.P{align=NONE, content=content} + + fun mkUL items = HTML.UL{compact=false, ty=NONE, content=items} + + fun mkOL items = HTML.OL{compact=false, ty=NONE, start = NONE, content=items} + + fun mkDL items = HTML.DL{compact=false, content=items} + + val HR = HTML.HR{align=NONE, noshade=false, size=NONE, width=NONE} + + val BR = HTML.BR{clear = NONE} + + fun mkLI blk = HTML.LI{ty=NONE, value=NONE, content=blk} + + fun mkA_HREF {href, content} = HTML.A{ + href = SOME href, + title = NONE, + name = NONE, + rel = NONE, + rev = NONE, + content = content + } + + fun mkA_NAME {name, content} = HTML.A{ + href = NONE, + title = NONE, + name = SOME name, + rel = NONE, + rev = NONE, + content = content + } + + fun mkTR content = HTML.TR{ + align = NONE, + valign = NONE, + content = content + } + + fun mkTH content = HTML.TH{ + nowrap = false, + rowspan = NONE, + colspan = NONE, + align = NONE, + valign = NONE, + width = NONE, + height = NONE, + content = content + } + fun mkTH_COLSPAN {colspan, content} = HTML.TH{ + nowrap = false, + rowspan = NONE, + colspan = SOME colspan, + align = NONE, + valign = NONE, + width = NONE, + height = NONE, + content = content + } + + fun mkTD content = HTML.TD{ + nowrap = false, + rowspan = NONE, + colspan = NONE, + align = NONE, + valign = NONE, + width = NONE, + height = NONE, + content = content + } + fun mkTD_COLSPAN {colspan, content} = HTML.TD{ + nowrap = false, + rowspan = NONE, + colspan = SOME colspan, + align = NONE, + valign = NONE, + width = NONE, + height = NONE, + content = content + } + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/pr-html.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/pr-html.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/pr-html.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/pr-html.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,480 @@ +(* pr-html.sml + * + * COPYRIGHT (c) 1996 AT&T REsearch. + * + * Pretty-print an HTML tree. + *) + +structure PrHTML : sig + + val prHTML : { + putc : char -> unit, + puts : string -> unit + } -> HTML.html -> unit + + end = struct + + structure H = HTML + structure F = Format + + datatype outstream = OS of { + putc : char -> unit, + puts : string -> unit + } + + fun putc (OS{putc, ...}, c) = putc c + fun puts (OS{puts, ...}, s) = puts s + + datatype attr_data + = IMPLICIT of bool + | CDATA of string option + | NAME of string option + | NUMBER of int option + + local + fun name toString NONE = NAME NONE + | name toString (SOME x) = NAME(SOME(toString x)) + in + val httpMethod = name HTML.HttpMethod.toString + val inputType = name HTML.InputType.toString + val iAlign = name HTML.IAlign.toString + val hAlign = name HTML.HAlign.toString + val cellVAlign = name HTML.CellVAlign.toString + val captionAlign = name HTML.CaptionAlign.toString + val ulStyle = name HTML.ULStyle.toString + val shape = name HTML.Shape.toString + val textFlowCtl = name HTML.TextFlowCtl.toString + end (* local *) + + fun fmtTag (tag, []) = concat["<", tag, ">"] + | fmtTag (tag, attrs) = let + fun fmtAttr (attrName, IMPLICIT true) = SOME attrName + | fmtAttr (attrName, CDATA(SOME s)) = + SOME(F.format "%s=\"%s\"" [F.STR attrName, F.STR s]) + | fmtAttr (attrName, NAME(SOME s)) = + SOME(F.format "%s=%s" [F.STR attrName, F.STR s]) + | fmtAttr (attrName, NUMBER(SOME n)) = + SOME(F.format "%s=%d" [F.STR attrName, F.INT n]) + | fmtAttr _ = NONE + val attrs = List.mapPartial fmtAttr attrs + in + ListFormat.fmt { + init = "<", + sep = " ", + final = ">", + fmt = fn x => x + } (tag :: attrs) + end + + fun fmtEndTag tag = concat["</", tag, ">"] + + fun prTag (OS{puts, ...}, tag, attrs) = puts(fmtTag (tag, attrs)) + fun prEndTag (OS{puts, ...}, tag) = puts(fmtEndTag tag) + fun newLine (OS{putc, ...}) = putc #"\n" + fun space (OS{putc, ...}) = putc #" " + + (** NOTE: once we are doing linebreaks for text, this becomes + ** important. + **) + fun setPre (_, _) = () + + fun prBlock (strm, blk : HTML.block) = (case blk + of (HTML.BlockList bl) => + List.app (fn b => prBlock (strm, b)) bl + | (HTML.TextBlock txt) => (prText (strm, txt); newLine strm) + | (HTML.Hn{n, align, content}) => let + val tag = "H" ^ Int.toString n + in + prTag (strm, tag, [("align", hAlign align)]); + prText (strm, content); + prEndTag (strm, tag); + newLine strm + end + | (HTML.ADDRESS blk) => ( + prTag (strm, "ADDRESS", []); + newLine strm; + prBlock (strm, blk); + prEndTag (strm, "ADDRESS"); + newLine strm) + | (HTML.P{align, content}) => ( + prTag (strm, "P", [("ALIGN", hAlign align)]); + newLine strm; + prText (strm, content); + newLine strm) + | (HTML.UL{ty, compact, content}) => ( + prTag (strm, "UL", [ + ("TYPE", ulStyle ty), + ("COMPACT", IMPLICIT compact) + ]); + newLine strm; + prListItems (strm, content); + prEndTag (strm, "UL"); + newLine strm) + | (HTML.OL{ty, start, compact, content}) => ( + prTag (strm, "OL", [ + ("TYPE", CDATA ty), + ("START", NUMBER start), + ("COMPACT", IMPLICIT compact) + ]); + newLine strm; + prListItems (strm, content); + prEndTag (strm, "OL"); + newLine strm) + | (HTML.DIR{compact, content}) => ( + prTag (strm, "DIR", [("COMPACT", IMPLICIT compact)]); + newLine strm; + prListItems (strm, content); + prEndTag (strm, "DIR"); + newLine strm) + | (HTML.MENU{compact, content}) => ( + prTag (strm, "MENU", [("COMPACT", IMPLICIT compact)]); + newLine strm; + prListItems (strm, content); + prEndTag (strm, "MENU"); + newLine strm) + | (HTML.DL{compact, content}) => ( + prTag (strm, "DL", [("COMPACT", IMPLICIT compact)]); + newLine strm; + prDLItems (strm, content); + prEndTag (strm, "DL"); + newLine strm) + | (HTML.PRE{width, content}) => ( + prTag (strm, "PRE", [("WIDTH", NUMBER width)]); + newLine strm; + setPre (strm, true); + prText (strm, content); + setPre (strm, false); + newLine strm; + prEndTag (strm, "PRE"); + newLine strm) + | (HTML.DIV{align, content}) => ( + prTag (strm, "DIV", [("ALIGN", hAlign(SOME align))]); + newLine strm; + prBlock (strm, content); + prEndTag (strm, "DIV"); + newLine strm) + | (HTML.CENTER bl) => ( + prTag (strm, "CENTER", []); + newLine strm; + prBlock (strm, bl); + prEndTag (strm, "CENTER"); + newLine strm) + | (HTML.BLOCKQUOTE bl) => ( + prTag (strm, "BLOCKQUOTE", []); + newLine strm; + prBlock (strm, bl); + prEndTag (strm, "BLOCKQUOTE"); + newLine strm) + | (HTML.FORM{action, method, enctype, content}) => ( + prTag (strm, "FORM", [ + ("ACTION", CDATA action), + ("METHOD", httpMethod(SOME method)), + ("ENCTYPE", CDATA enctype) + ]); + newLine strm; + prBlock (strm, content); + prEndTag (strm, "FORM"); + newLine strm) + | (HTML.ISINDEX{prompt}) => ( + prTag (strm, "ISINDEX", [("PROMPT", CDATA prompt)]); + newLine strm) + | (HTML.HR{align, noshade, size, width}) => ( + prTag (strm, "HR", [ + ("ALIGN", hAlign align), + ("NOSHADE", IMPLICIT noshade), + ("SIZE", CDATA size), + ("WIDTH", CDATA width) + ]); + newLine strm) + | (HTML.TABLE{ + align, width, border, cellspacing, cellpadding, + caption, content + }) => ( + prTag (strm, "TABLE", [ + ("ALIGN", hAlign align), + ("WIDTH", CDATA width), + ("BORDER", CDATA border), + ("CELLSPACING", CDATA cellspacing), + ("CELLPADDING", CDATA cellpadding) + ]); + newLine strm; + prCaption (strm, caption); + prTableRows (strm, content); + prEndTag (strm, "TABLE"); + newLine strm) + (* end case *)) + + and prListItems (strm, items) = let + fun prItem (HTML.LI{ty, value, content}) = ( + prTag (strm, "LI", [("TYPE", CDATA ty), ("VALUE", NUMBER value)]); + newLine strm; + prBlock (strm, content)) + in + List.app prItem items + end + + and prDLItems (strm, items) = let + fun prDT txt = ( + prTag (strm, "DT", []); + space strm; + prText (strm, txt); + newLine strm) + fun prDD blk = ( + prTag (strm, "DD", []); + newLine strm; + prBlock (strm, blk)) + fun prItem ({dt, dd}) = (List.app prDT dt; prDD dd) + in + List.app prItem items + end + + and prCaption (strm, NONE) = () + | prCaption (strm, SOME(HTML.CAPTION{align, content})) = ( + prTag (strm, "CAPTION", [("ALIGN", captionAlign align)]); + newLine strm; + prText (strm, content); + prEndTag (strm, "CAPTION"); + newLine strm) + + and prTableRows (strm, rows) = let + fun prTR (HTML.TR{align, valign, content}) = ( + prTag (strm, "TR", [ + ("ALIGN", hAlign align), + ("VALIGN", cellVAlign valign) + ]); + newLine strm; + List.app (prTableCell strm) content) + in + List.app prTR rows + end + + and prTableCell strm cell = let + fun prCell (tag, { + nowrap, rowspan, colspan , align, valign, width, height, + content + }) = ( + prTag (strm, tag, [ + ("NOWRAP", IMPLICIT nowrap), + ("ROWSPAN", NUMBER rowspan), + ("COLSPAN", NUMBER colspan), + ("ALIGN", hAlign align), + ("VALIGN", cellVAlign valign), + ("WIDTH", CDATA width), + ("HEIGHT", CDATA height) + ]); + newLine strm; + prBlock (strm, content)) + in + case cell + of (HTML.TH stuff) => prCell ("TH", stuff) + | (HTML.TD stuff) => prCell ("TD", stuff) + (* end case *) + end + + and prEmph (strm, tag, text) = ( + prTag (strm, tag, []); + prText (strm, text); + prEndTag (strm, tag)) + + and prText (strm, text) = (case text + of (HTML.TextList tl) => + List.app (fn txt => prText(strm, txt)) tl + | (HTML.PCDATA pcdata) => prPCData(strm, pcdata) + | (HTML.TT txt) => prEmph (strm, "TT", txt) + | (HTML.I txt) => prEmph (strm, "I", txt) + | (HTML.B txt) => prEmph (strm, "B", txt) + | (HTML.U txt) => prEmph (strm, "U", txt) + | (HTML.STRIKE txt) => prEmph (strm, "STRIKE", txt) + | (HTML.BIG txt) => prEmph (strm, "BIG", txt) + | (HTML.SMALL txt) => prEmph (strm, "SMALL", txt) + | (HTML.SUB txt) => prEmph (strm, "SUB", txt) + | (HTML.SUP txt) => prEmph (strm, "SUP", txt) + | (HTML.EM txt) => prEmph (strm, "EM", txt) + | (HTML.STRONG txt) => prEmph (strm, "STRONG", txt) + | (HTML.DFN txt) => prEmph (strm, "DFN", txt) + | (HTML.CODE txt) => prEmph (strm, "CODE", txt) + | (HTML.SAMP txt) => prEmph (strm, "SAMP", txt) + | (HTML.KBD txt) => prEmph (strm, "KBD", txt) + | (HTML.VAR txt) => prEmph (strm, "VAR", txt) + | (HTML.CITE txt) => prEmph (strm, "CITE", txt) + | (HTML.A{name, href, rel, rev, title, content}) => ( + prTag (strm, "A", [ + ("NAME", CDATA name), + ("HREF", CDATA href), + ("REL", CDATA rel), + ("REV", CDATA rev), + ("TITLE", CDATA title) + ]); + prText (strm, content); + prEndTag (strm, "A")) + | (HTML.IMG{ + src, alt, align, height, width, border, + hspace, vspace, usemap, ismap + }) => prTag (strm, "IMG", [ + ("SRC", CDATA(SOME src)), + ("ALT", CDATA alt), + ("ALIGN", iAlign align), + ("HEIGHT", CDATA height), + ("WIDTH", CDATA width), + ("BORDER", CDATA border), + ("HSPACE", CDATA hspace), + ("VSPACE", CDATA vspace), + ("USEMAP", CDATA usemap), + ("ISMAP", IMPLICIT ismap) + ]) + | (HTML.APPLET{ + codebase, code, name, alt, align, height, width, + hspace, vspace, content + }) => ( + prTag (strm, "APPLET", [ + ("CODEBASE", CDATA codebase), + ("CODE", CDATA(SOME code)), + ("NAME", CDATA name), + ("ALT", CDATA alt), + ("ALIGN", iAlign align), + ("HEIGHT", CDATA height), + ("WIDTH", CDATA width), + ("HSPACE", CDATA hspace), + ("VSPACE", CDATA vspace) + ]); + prText (strm, content); + prEndTag (strm, "APPLET")) + | (HTML.PARAM{name, value}) => + prTag (strm, "PARAM", [ + ("NAME", NAME(SOME name)), + ("VALUE", CDATA value) + ]) + | (HTML.FONT{size, color, content}) => ( + prTag (strm, "FONT", [ + ("SIZE", CDATA size), + ("COLOR", CDATA color) + ]); + prText (strm, content); + prEndTag (strm, "FONT")) + | (HTML.BASEFONT{size, content}) => ( + prTag (strm, "BASEFONT", [("SIZE", CDATA size)]); + prText (strm, content); + prEndTag (strm, "BASEFONT")) + | (HTML.BR{clear}) => ( + prTag (strm, "BR", [("CLEAR", textFlowCtl clear)]); + newLine strm) + | (HTML.MAP{name, content}) => ( + prTag (strm, "MAP", [("NAME", CDATA name)]); + List.app (prArea strm) content; + prEndTag (strm, "MAP")) + | (HTML.INPUT{ + ty, name, value, checked, size, maxlength, src, align + }) => prTag (strm, "INPUT", [ + ("TYPE", inputType ty), + ("NAME", NAME name), + ("VALUE", CDATA value), + ("CHECKED", IMPLICIT checked), + ("SIZE", CDATA size), + ("MAXLENGTH", NUMBER maxlength), + ("SRC", CDATA src), + ("ALIGN", iAlign align) + ]) + | (HTML.SELECT{name, size, content}) => ( + prTag (strm, "SELECT", [ + ("NAME", NAME(SOME name)), + ("SIZE", NUMBER size) + ]); + List.app (prOption strm) content; + prEndTag (strm, "SELECT")) + | (HTML.TEXTAREA{name, rows, cols, content}) => ( + prTag (strm, "TEXTAREA", [ + ("NAME", NAME(SOME name)), + ("ROWS", NUMBER(SOME rows)), + ("COLS", NUMBER(SOME cols)) + ]); + prPCData (strm, content); + prEndTag (strm, "TEXTAREA")) + (* SCRIPT elements are placeholders for the next version of HTML *) + | (HTML.SCRIPT pcdata) => () + (* end case *)) + + and prArea strm (HTML.AREA{shape=s, coords, href, nohref, alt}) = + prTag (strm, "AREA", [ + ("SHAPE", shape s), + ("COORDS", CDATA coords), + ("HREF", CDATA href), + ("nohref", IMPLICIT nohref), + ("ALT", CDATA(SOME alt)) + ]) + + and prOption strm (HTML.OPTION{selected, value, content}) = ( + prTag (strm, "OPTION", [ + ("SELECTED", IMPLICIT selected), + ("VALUE", CDATA value) + ]); + prPCData (strm, content)) + + and prPCData (strm, data) = puts (strm, data) + + fun prBody (strm, HTML.BODY{ + background, bgcolor, text, link, vlink, alink, content + }) = ( + prTag (strm, "BODY", [ + ("BACKGROUND", CDATA background), + ("BGCOLOR", CDATA bgcolor), + ("TEXT", CDATA text), + ("LINK", CDATA link), + ("VLINK", CDATA vlink), + ("ALINK", CDATA alink) + ]); + prBlock (strm, content); + prEndTag (strm, "BODY")) + + fun prHeadElement strm elem = (case elem + of (HTML.Head_TITLE pcdata) => ( + prTag (strm, "TITLE", []); + prPCData(strm, pcdata); + prEndTag (strm, "TITLE"); + newLine strm) + | (HTML.Head_ISINDEX{prompt}) => ( + prTag (strm, "ISINDEX", [("PROMPT", CDATA prompt)]); + newLine strm) + | (HTML.Head_BASE{href}) => ( + prTag (strm, "BASE", [("HREF", CDATA(SOME href))]); + newLine strm) + | (HTML.Head_META{httpEquiv, name, content}) => ( + prTag (strm, "META", [ + ("HTTP-EQUIV", NAME httpEquiv), + ("NAME", NAME name), + ("CONTENT", CDATA(SOME content)) + ]); + newLine strm) + | (HTML.Head_LINK{id, href, rel, rev, title}) => ( + prTag (strm, "LINK", [ + ("ID", NAME id), + ("HREF", CDATA href), + ("REL", CDATA rel), + ("REV", CDATA rev), + ("TITLE", CDATA title) + ]); + newLine strm) + (* SCRIPT/STYLE elements are placeholders for the next version of HTML *) + | (HTML.Head_SCRIPT pcdata) => () + | (HTML.Head_STYLE pcdata) => () + (* end case *)) + + fun prHTML {putc, puts} html = let + val strm = OS{putc=putc, puts=puts} + val HTML.HTML{head, body, version} = html + in + case version + of NONE => () + | (SOME v) => puts (F.format + "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML %s//EN\">\n" + [F.STR v]) + (* end case *); + puts "<HTML>\n"; + puts "<HEAD>\n"; + List.app (prHeadElement strm) head; + puts "</HEAD>\n"; + prBody (strm, body); + puts "</HTML>\n" + end + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,32 @@ +This library provides support for parsing and pretty-printing HTML. +The file html-sig.sml and html.sml define a parse-tree representation +of HTML 3.2 (as defined in the January 14th 1997 specification). + +The HTML structure implements a collection of datatypes +that describe the syntax of HTML trees according to the 3.2 spec. +The library provides support for parsing and printing these +datatypes. The functor HTMLParserFn implements the parser and +the PrHTML structure provides printing of HTML trees. Also, there +is a structure called MakeHTML, which provides helper functions for +constructing HTML trees (mostly defaults of attribute values). + +Note that this is a fairly strict interpretation of the standard; +non-standard tags and attributes will cause errors. To allow some +flexibility, the parser is functorized over a collection of error +reporting functions (see html-error-sig.sml). + +The file test-parser.sml gives an example of how the parser part of the +library can be used. + +TODO LIST: + +The parser has trouble with white-space in the <HEAD>. + +The pretty-printer needs to be rewritten to deal with line breaks better. + +Some library support for entities (e.g., "<" should be provided). + + John Reppy + Bell Labs, Lucent Technologies + jhr@research.bell-labs.com + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/test-parser.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/test-parser.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML/test-parser.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML/test-parser.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,68 @@ +(* test-parser.sml + * + * COPYRIGHT (c) 1996 AT&T REsearch. + * + * This is a simple test driver for the HTML parser. + *) + +structure Main : sig + + val doit : string -> HTML.html option + val main : (string * string list) -> OS.Process.status + + end = struct + + structure Err = + struct + type context = {file : string option, line : int} + + structure F = Format + + fun prf ({file, line}, fmt, args) = ( + case file + of NONE => TextIO.output ( + TextIO.stdErr, + F.format "line %3d: " [F.INT line]) + | (SOME fname) => TextIO.output ( + TextIO.stdErr, + F.format "%s[%d]: " [F.STR fname, F.INT line]) + (* end case *); + TextIO.output(TextIO.stdErr, F.format fmt args); + TextIO.output1(TextIO.stdErr, #"\n")) + + fun badStartTag ctx tagName = + prf (ctx, "unrecognized start tag \"%s\"",[F.STR tagName]) + + fun badEndTag ctx tagName = + prf (ctx, "unrecognized end tag \"%s\"",[F.STR tagName]) + + fun badAttrVal ctx (attrName, attrVal) = + prf (ctx, "bad value \"%s\" for attribute \"%s\"", + [F.STR attrVal, F.STR attrName]) + + fun lexError ctx msg = prf (ctx, "%s", [F.STR msg]) + + fun syntaxError ctx msg = prf (ctx, "%s", [F.STR msg]) + + fun missingAttrVal ctx attrName = + prf (ctx, "missing value for \"%s\" attribute", [F.STR attrName]) + + fun missingAttr ctx attrName = + prf (ctx, "missing \"%s\" attribute", [F.STR attrName]) + + fun unknownAttr ctx attrName = + prf (ctx, "unknown attribute \"%s\"", [F.STR attrName]) + + fun unquotedAttrVal ctx attrName = + prf (ctx, "attribute value for \"%s\" should be quoted", + [F.STR attrName]) + + end + + structure P = HTMLParserFn(Err); + + fun doit fname = SOME(P.parseFile fname) (* handle _ => NONE *) + + fun main (_, files) = (List.app (ignore o doit) files; OS.Process.success) + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/helper.py mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/helper.py --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/helper.py 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/helper.py 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,108 @@ +#! /usr/bin/env python +# ______________________________________________________________________ +"""helper.py + +Quick helper script for some minor code generation tasks. Requires +the BeautifulSoup library. +""" +# ______________________________________________________________________ +# Module imports + +from BeautifulSoup import BeautifulSoup + +# ______________________________________________________________________ +# Function definitions + +def element_data_to_tuple_str ((tag_name, start_tag_data, end_tag_data, + empty_data, depr_data, dtd_data, desc_data)): + otag_ctor = u"START%s" % tag_name + if end_tag_data == u"F": + etag_ctor = u"NONE" + else: + etag_ctor = u"SOME END%s" % tag_name + return u'("%s", %s, %s)' % (tag_name, otag_ctor, etag_ctor) + +# ______________________________________________________________________ + +def element_data_to_string_fun ((tag_name, start_tag_data, end_tag_data, + empty_data, depr_data, dtd_data, desc_data)): + print (u'| tokToString (START%s payload) = "START%s " ^ (payloadToString ' + 'payload)' % (tag_name, tag_name)) + if end_tag_data != u"F": + print u'| tokToString END%s = "END%s"' % (tag_name, tag_name) + +# ______________________________________________________________________ + +def element_data_to_production ((tag_name, start_tag_data, end_tag_data, + empty_data, depr_data, dtd_data, desc_data)): + end_str = u";" + if end_tag_data != u"F": + end_str = u"END%s ;" % tag_name + if empty_data != u"E": + end_str = u"XXX %s" % end_str + print u"%s : START%s %s" % (tag_name.lower(), tag_name, end_str) + print + +# ______________________________________________________________________ +# Main routine + +def main (): + elements_doc = BeautifulSoup(open("tests/elements.html").read(), + convertEntities = BeautifulSoup.HTML_ENTITIES) + # Skip the header row. + crnt_element_row = elements_doc.table.tr.findNextSibling("tr") + strict_list = [] + loose_list = [] + frameset_list = [] + while crnt_element_row is not None: + cols = crnt_element_row.findAll("td") + assert len(cols) == 7 + element_data = tuple([cols[0].a.string.strip()] + + [table_entry.string.strip() + for table_entry in cols[1:]]) + (tag_name, start_tag_data, end_tag_data, empty_data, depr_data, + dtd_data, desc_data) = element_data + print u"| START%s of token_payload" % tag_name + if end_tag_data != u"F": + print u"| END%s" % tag_name + else: + print u"(* No END tag for %s element. *)" % tag_name + if dtd_data == u'': + strict_list.append(element_data) + elif dtd_data == u'F': + frameset_list.append(element_data) + else: + assert dtd_data == u'L' + loose_list.append(element_data) + crnt_element_row = crnt_element_row.findNextSibling("tr") + element_data_list = strict_list + loose_list + frameset_list + element_data_list.sort() + print + print "val strict_tuple_list = [" + print u",\n".join((element_data_to_tuple_str(elem_data) + for elem_data in strict_list)) + print "]" + print + print "val loose_tuple_list = [" + print u",\n".join((element_data_to_tuple_str(elem_data) + for elem_data in loose_list)) + print "]" + print + print "val frameset_tuple_list = [" + print u",\n".join((element_data_to_tuple_str(elem_data) + for elem_data in frameset_list)) + print "]" + print + for element_data in element_data_list: + element_data_to_string_fun(element_data) + print + for element_data in element_data_list: + element_data_to_production(element_data) + +# ______________________________________________________________________ + +if __name__ == "__main__": + main() + +# ______________________________________________________________________ +# End of helper.py diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.g mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.g --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.g 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.g 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,39 @@ +(* html4-attr.g + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Grammar for parsing HTML 4 attributes. + * + * FIXME: we could probably just do this in the scanner!!! + *) + +%name HTML4Attr; + +%tokens : NAME of Atom.atom + | EQUALS ("=") + | STRINGLIT of string + | DOT (".") + | NUMBER of string +; + +%start attrs; + +attrs : attr* + ; + +attr : NAME (EQUALS attr_value => (attr_value))? + => ((NAME, SR)) + ; + +attr_value : STRINGLIT + | NAME (DOT NAME => (NAME))* + => ((Atom.toString NAME) ^ (String.concatWith "." + (map Atom.toString SR))) + | NUMBER (DOT NUMBER => (NUMBER))* + => (NUMBER ^ (String.concatWith "." SR)) + ; + +(* ______________________________________________________________________ + End of html4-attr.g + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.g.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.g.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.g.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.g.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,241 @@ +structure HTML4AttrTokens = + struct + datatype token + = NAME of Atom.atom + | EQUALS + | STRINGLIT of string + | DOT + | NUMBER of string + | EOF + val allToks = [ + EQUALS, DOT, EOF + ] + fun toString tok = +(case (tok) + of (NAME(_)) => "NAME" + | (EQUALS) => "=" + | (STRINGLIT(_)) => "STRINGLIT" + | (DOT) => "." + | (NUMBER(_)) => "NUMBER" + | (EOF) => "EOF" +(* end case *)) + fun isKW tok = +(case (tok) + of (NAME(_)) => false + | (EQUALS) => false + | (STRINGLIT(_)) => false + | (DOT) => false + | (NUMBER(_)) => false + | (EOF) => false +(* end case *)) + fun isEOF EOF = true + | isEOF _ = false + end (* HTML4AttrTokens *) + +functor HTML4AttrParseFn (Lex : ANTLR_LEXER) = struct + + local + structure Tok = +HTML4AttrTokens + structure UserCode = + struct + +fun attr_PROD_1_SUBRULE_1_PROD_1_ACT (attr_value, EQUALS, NAME, attr_value_SPAN : (Lex.pos * Lex.pos), EQUALS_SPAN : (Lex.pos * Lex.pos), NAME_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (attr_value) +fun attr_PROD_1_ACT (SR, NAME, SR_SPAN : (Lex.pos * Lex.pos), NAME_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((NAME, SR)) +fun attr_value_PROD_2_SUBRULE_1_PROD_1_ACT (NAME, DOT, NAME_SPAN : (Lex.pos * Lex.pos), DOT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (NAME) +fun attr_value_PROD_2_ACT (SR, NAME, SR_SPAN : (Lex.pos * Lex.pos), NAME_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Atom.toString NAME) ^ (String.concatWith "." + (map Atom.toString SR))) +fun attr_value_PROD_3_SUBRULE_1_PROD_1_ACT (NUMBER, DOT, NUMBER_SPAN : (Lex.pos * Lex.pos), DOT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (NUMBER) +fun attr_value_PROD_3_ACT (SR, NUMBER, SR_SPAN : (Lex.pos * Lex.pos), NUMBER_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (NUMBER ^ (String.concatWith "." SR)) + end (* UserCode *) + + structure Err = AntlrErrHandler( + structure Tok = Tok + structure Lex = Lex) + +(* replace functor with inline structure for better optimization + structure EBNF = AntlrEBNF( + struct + type strm = Err.wstream + val getSpan = Err.getSpan + end) +*) + structure EBNF = + struct + fun optional (pred, parse, strm) = + if pred strm + then let + val (y, span, strm') = parse strm + in + (SOME y, span, strm') + end + else (NONE, Err.getSpan strm, strm) + + fun closure (pred, parse, strm) = let + fun iter (strm, (left, right), ys) = + if pred strm + then let + val (y, (_, right'), strm') = parse strm + in iter (strm', (left, right'), y::ys) + end + else (List.rev ys, (left, right), strm) + in + iter (strm, Err.getSpan strm, []) + end + + fun posclos (pred, parse, strm) = let + val (y, (left, _), strm') = parse strm + val (ys, (_, right), strm'') = closure (pred, parse, strm') + in + (y::ys, (left, right), strm'') + end + end + + fun mk lexFn = let +fun getS() = {} +fun putS{} = () +fun unwrap (ret, strm, repairs) = (ret, strm, repairs) + val (eh, lex) = Err.mkErrHandler {get = getS, put = putS} + fun fail() = Err.failure eh + fun tryProds (strm, prods) = let + fun try [] = fail() + | try (prod :: prods) = + (Err.whileDisabled eh (fn() => prod strm)) + handle Err.ParseError => try (prods) + in try prods end +fun matchNAME strm = (case (lex(strm)) + of (Tok.NAME(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchEQUALS strm = (case (lex(strm)) + of (Tok.EQUALS, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTRINGLIT strm = (case (lex(strm)) + of (Tok.STRINGLIT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchDOT strm = (case (lex(strm)) + of (Tok.DOT, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchNUMBER strm = (case (lex(strm)) + of (Tok.NUMBER(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchEOF strm = (case (lex(strm)) + of (Tok.EOF, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) + +val (attrs_NT) = +let +fun attr_value_NT (strm) = let + fun attr_value_PROD_1 (strm) = let + val (STRINGLIT_RES, STRINGLIT_SPAN, strm') = matchSTRINGLIT(strm) + val FULL_SPAN = (#1(STRINGLIT_SPAN), #2(STRINGLIT_SPAN)) + in + ((STRINGLIT_RES), FULL_SPAN, strm') + end + fun attr_value_PROD_2 (strm) = let + val (NAME_RES, NAME_SPAN, strm') = matchNAME(strm) + fun attr_value_PROD_2_SUBRULE_1_NT (strm) = let + val (DOT_RES, DOT_SPAN, strm') = matchDOT(strm) + val (NAME_RES, NAME_SPAN, strm') = matchNAME(strm') + val FULL_SPAN = (#1(DOT_SPAN), #2(NAME_SPAN)) + in + (UserCode.attr_value_PROD_2_SUBRULE_1_PROD_1_ACT (NAME_RES, DOT_RES, NAME_SPAN : (Lex.pos * Lex.pos), DOT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun attr_value_PROD_2_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.DOT, _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.closure(attr_value_PROD_2_SUBRULE_1_PRED, attr_value_PROD_2_SUBRULE_1_NT, strm') + val FULL_SPAN = (#1(NAME_SPAN), #2(SR_SPAN)) + in + (UserCode.attr_value_PROD_2_ACT (SR_RES, NAME_RES, SR_SPAN : (Lex.pos * Lex.pos), NAME_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun attr_value_PROD_3 (strm) = let + val (NUMBER_RES, NUMBER_SPAN, strm') = matchNUMBER(strm) + fun attr_value_PROD_3_SUBRULE_1_NT (strm) = let + val (DOT_RES, DOT_SPAN, strm') = matchDOT(strm) + val (NUMBER_RES, NUMBER_SPAN, strm') = matchNUMBER(strm') + val FULL_SPAN = (#1(DOT_SPAN), #2(NUMBER_SPAN)) + in + (UserCode.attr_value_PROD_3_SUBRULE_1_PROD_1_ACT (NUMBER_RES, DOT_RES, NUMBER_SPAN : (Lex.pos * Lex.pos), DOT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun attr_value_PROD_3_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.DOT, _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.closure(attr_value_PROD_3_SUBRULE_1_PRED, attr_value_PROD_3_SUBRULE_1_NT, strm') + val FULL_SPAN = (#1(NUMBER_SPAN), #2(SR_SPAN)) + in + (UserCode.attr_value_PROD_3_ACT (SR_RES, NUMBER_RES, SR_SPAN : (Lex.pos * Lex.pos), NUMBER_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.NUMBER(_), _, strm') => attr_value_PROD_3(strm) + | (Tok.STRINGLIT(_), _, strm') => attr_value_PROD_1(strm) + | (Tok.NAME(_), _, strm') => attr_value_PROD_2(strm) + | _ => fail() + (* end case *)) + end +fun attr_NT (strm) = let + val (NAME_RES, NAME_SPAN, strm') = matchNAME(strm) + fun attr_PROD_1_SUBRULE_1_NT (strm) = let + val (EQUALS_RES, EQUALS_SPAN, strm') = matchEQUALS(strm) + val (attr_value_RES, attr_value_SPAN, strm') = attr_value_NT(strm') + val FULL_SPAN = (#1(EQUALS_SPAN), #2(attr_value_SPAN)) + in + (UserCode.attr_PROD_1_SUBRULE_1_PROD_1_ACT (attr_value_RES, EQUALS_RES, NAME_RES, attr_value_SPAN : (Lex.pos * Lex.pos), EQUALS_SPAN : (Lex.pos * Lex.pos), NAME_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun attr_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.EQUALS, _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.optional(attr_PROD_1_SUBRULE_1_PRED, attr_PROD_1_SUBRULE_1_NT, strm') + val FULL_SPAN = (#1(NAME_SPAN), #2(SR_SPAN)) + in + (UserCode.attr_PROD_1_ACT (SR_RES, NAME_RES, SR_SPAN : (Lex.pos * Lex.pos), NAME_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun attrs_NT (strm) = let + fun attrs_PROD_1_SUBRULE_1_NT (strm) = let + val (attr_RES, attr_SPAN, strm') = attr_NT(strm) + val FULL_SPAN = (#1(attr_SPAN), #2(attr_SPAN)) + in + ((attr_RES), FULL_SPAN, strm') + end + fun attrs_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.NAME(_), _, strm') => true + | _ => false + (* end case *)) + val (attr_RES, attr_SPAN, strm') = EBNF.closure(attrs_PROD_1_SUBRULE_1_PRED, attrs_PROD_1_SUBRULE_1_NT, strm) + val FULL_SPAN = (#1(attr_SPAN), #2(attr_SPAN)) + in + ((attr_RES), FULL_SPAN, strm') + end +in + (attrs_NT) +end +val attrs_NT = fn s => unwrap (Err.launch (eh, lexFn, attrs_NT , true) s) + +in (attrs_NT) end + in +fun parse lexFn s = let val (attrs_NT) = mk lexFn in attrs_NT s end + + end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.l mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.l --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.l 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.l 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,36 @@ +(* html4-attr.l + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Lexer for parsing HTML 4 attributes. + *) + +%name HTML4AttrLexer; + +%defs ( +open HTML4AttrTokens + +fun eof() = EOF +type lex_result = token +); + +%let alpha=[A-Za-z]; +%let digit=[0-9]; +%let ws=[\ \t\r\n]; + +(* some XHTML attributes have ":" in their name *) +{alpha}({alpha}|{digit}|[-.:])* => (NAME (Atom.atom yytext)); +{digit}+ => (NUMBER yytext); +"=" => (EQUALS); +"." => (DOT); +[\"][^\"]*[\"] => (STRINGLIT yytext); +[\'][^\']*[\'] => (STRINGLIT yytext); + +{ws}+ => (continue()); + +. => ((* error; invalid character *) continue()); + +(* ______________________________________________________________________ + End of html4-attr.l + ______________________________________________________________________ *) \ No newline at end of file diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.l.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.l.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.l.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-attr.l.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,411 @@ +structure HTML4AttrLexer = struct + + datatype yystart_state = +INITIAL + local + + structure UserDeclarations = + struct + + +open HTML4AttrTokens + +fun eof() = EOF +type lex_result = token + + end + + datatype yymatch + = yyNO_MATCH + | yyMATCH of ULexBuffer.stream * action * yymatch + withtype action = ULexBuffer.stream * yymatch -> UserDeclarations.lex_result + + val yytable : ((UTF8.wchar * UTF8.wchar * int) list * int list) Vector.vector = +Vector.fromList [] + fun yystreamify' p input = ULexBuffer.mkStream (p, input) + + fun yystreamifyReader' p readFn strm = let + val s = ref strm + fun iter(strm, n, accum) = + if n > 1024 then (String.implode (rev accum), strm) + else (case readFn strm + of NONE => (String.implode (rev accum), strm) + | SOME(c, strm') => iter (strm', n+1, c::accum)) + fun input() = let + val (data, strm) = iter(!s, 0, []) + in + s := strm; + data + end + in + yystreamify' p input + end + + fun yystreamifyInstream' p strm = yystreamify' p (fn ()=>TextIO.input strm) + + fun innerLex +(yystrm_, yyss_, yysm) = let + (* current start state *) + val yyss = ref yyss_ + fun YYBEGIN ss = (yyss := ss) + (* current input stream *) + val yystrm = ref yystrm_ + fun yysetStrm strm = yystrm := strm + fun yygetPos() = ULexBuffer.getpos (!yystrm) + fun yystreamify input = yystreamify' (yygetPos()) input + fun yystreamifyReader readFn strm = yystreamifyReader' (yygetPos()) readFn strm + fun yystreamifyInstream strm = yystreamifyInstream' (yygetPos()) strm + (* start position of token -- can be updated via skip() *) + val yystartPos = ref (yygetPos()) + (* get one char of input *) + fun yygetc strm = (case ULexBuffer.getu strm + of (SOME (0w10, s')) => + (AntlrStreamPos.markNewLine yysm (ULexBuffer.getpos strm); + SOME (0w10, s')) + | x => x) + fun yygetList getc strm = let + val get1 = UTF8.getu getc + fun iter (strm, accum) = + (case get1 strm + of NONE => rev accum + | SOME (w, strm') => iter (strm', w::accum) + (* end case *)) + in + iter (strm, []) + end + (* create yytext *) + fun yymksubstr(strm) = ULexBuffer.subtract (strm, !yystrm) + fun yymktext(strm) = Substring.string (yymksubstr strm) + fun yymkunicode(strm) = yygetList Substring.getc (yymksubstr strm) + open UserDeclarations + fun lex () = let + fun yystuck (yyNO_MATCH) = raise Fail "lexer reached a stuck state" + | yystuck (yyMATCH (strm, action, old)) = + action (strm, old) + val yypos = yygetPos() + fun yygetlineNo strm = AntlrStreamPos.lineNo yysm (ULexBuffer.getpos strm) + fun yygetcolNo strm = AntlrStreamPos.colNo yysm (ULexBuffer.getpos strm) + fun yyactsToMatches (strm, [], oldMatches) = oldMatches + | yyactsToMatches (strm, act::acts, oldMatches) = + yyMATCH (strm, act, yyactsToMatches (strm, acts, oldMatches)) + fun yygo actTable = + (fn (~1, _, oldMatches) => yystuck oldMatches + | (curState, strm, oldMatches) => let + val (transitions, finals') = Vector.sub (yytable, curState) + val finals = List.map (fn i => Vector.sub (actTable, i)) finals' + fun tryfinal() = + yystuck (yyactsToMatches (strm, finals, oldMatches)) + fun find (c, []) = NONE + | find (c, (c1, c2, s)::ts) = + if c1 <= c andalso c <= c2 then SOME s + else find (c, ts) + in case yygetc strm + of SOME(c, strm') => + (case find (c, transitions) + of NONE => tryfinal() + | SOME n => + yygo actTable + (n, strm', + yyactsToMatches (strm, finals, oldMatches))) + | NONE => tryfinal() + end) + val yylastwasnref = ref (ULexBuffer.lastWasNL (!yystrm)) + fun continue() = let val yylastwasn = !yylastwasnref in +let +fun yyAction0 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; NAME (Atom.atom yytext) + end +fun yyAction1 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; NUMBER yytext + end +fun yyAction2 (strm, lastMatch : yymatch) = (yystrm := strm; EQUALS) +fun yyAction3 (strm, lastMatch : yymatch) = (yystrm := strm; DOT) +fun yyAction4 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; STRINGLIT yytext + end +fun yyAction5 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; STRINGLIT yytext + end +fun yyAction6 (strm, lastMatch : yymatch) = (yystrm := strm; continue()) +fun yyAction7 (strm, lastMatch : yymatch) = (yystrm := strm; + (* error; invalid character *) continue()) +fun yyQ9 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction0(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3B + then yyAction0(strm, yyNO_MATCH) + else if inp < 0wx3B + then if inp = 0wx2F + then yyAction0(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp <= 0wx2C + then yyAction0(strm, yyNO_MATCH) + else yyQ9(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyQ9(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp = 0wx5B + then yyAction0(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp <= 0wx40 + then yyAction0(strm, yyNO_MATCH) + else yyQ9(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ9(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < 0wx61 + then yyAction0(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ9(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + (* end case *)) +fun yyQ8 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction0(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3B + then yyAction0(strm, yyNO_MATCH) + else if inp < 0wx3B + then if inp = 0wx2F + then yyAction0(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp <= 0wx2C + then yyAction0(strm, yyNO_MATCH) + else yyQ9(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyQ9(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp = 0wx5B + then yyAction0(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp <= 0wx40 + then yyAction0(strm, yyNO_MATCH) + else yyQ9(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ9(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < 0wx61 + then yyAction0(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ9(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + (* end case *)) +fun yyQ7 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ10 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction1(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ10(strm', yyMATCH(strm, yyAction1, yyNO_MATCH)) + else if inp < 0wx30 + then yyAction1(strm, yyNO_MATCH) + else if inp <= 0wx39 + then yyQ10(strm', yyMATCH(strm, yyAction1, yyNO_MATCH)) + else yyAction1(strm, yyNO_MATCH) + (* end case *)) +fun yyQ6 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction1(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ10(strm', yyMATCH(strm, yyAction1, yyNO_MATCH)) + else if inp < 0wx30 + then yyAction1(strm, yyNO_MATCH) + else if inp <= 0wx39 + then yyQ10(strm', yyMATCH(strm, yyAction1, yyNO_MATCH)) + else yyAction1(strm, yyNO_MATCH) + (* end case *)) +fun yyQ5 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction3(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction3(strm, yyNO_MATCH) + (* end case *)) +fun yyQ12 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction5(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction5(strm, yyNO_MATCH) + (* end case *)) +fun yyQ11 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx27 + then yyQ12(strm', lastMatch) + else yyQ11(strm', lastMatch) + (* end case *)) +fun yyQ4 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction7(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx27 + then yyQ12(strm', yyMATCH(strm, yyAction7, yyNO_MATCH)) + else yyQ11(strm', yyMATCH(strm, yyAction7, yyNO_MATCH)) + (* end case *)) +fun yyQ14 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction4(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction4(strm, yyNO_MATCH) + (* end case *)) +fun yyQ13 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx22 + then yyQ14(strm', lastMatch) + else yyQ13(strm', lastMatch) + (* end case *)) +fun yyQ3 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction7(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx22 + then yyQ14(strm', yyMATCH(strm, yyAction7, yyNO_MATCH)) + else yyQ13(strm', yyMATCH(strm, yyAction7, yyNO_MATCH)) + (* end case *)) +fun yyQ15 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction6(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxD + then yyQ15(strm', yyMATCH(strm, yyAction6, yyNO_MATCH)) + else if inp < 0wxD + then if inp = 0wx9 + then yyQ15(strm', yyMATCH(strm, yyAction6, yyNO_MATCH)) + else if inp < 0wx9 + then yyAction6(strm, yyNO_MATCH) + else if inp <= 0wxA + then yyQ15(strm', yyMATCH(strm, yyAction6, yyNO_MATCH)) + else yyAction6(strm, yyNO_MATCH) + else if inp = 0wx20 + then yyQ15(strm', yyMATCH(strm, yyAction6, yyNO_MATCH)) + else yyAction6(strm, yyNO_MATCH) + (* end case *)) +fun yyQ2 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction6(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxD + then yyQ15(strm', yyMATCH(strm, yyAction6, yyNO_MATCH)) + else if inp < 0wxD + then if inp = 0wx9 + then yyQ15(strm', yyMATCH(strm, yyAction6, yyNO_MATCH)) + else if inp < 0wx9 + then yyAction6(strm, yyNO_MATCH) + else if inp <= 0wxA + then yyQ15(strm', yyMATCH(strm, yyAction6, yyNO_MATCH)) + else yyAction6(strm, yyNO_MATCH) + else if inp = 0wx20 + then yyQ15(strm', yyMATCH(strm, yyAction6, yyNO_MATCH)) + else yyAction6(strm, yyNO_MATCH) + (* end case *)) +fun yyQ1 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction7(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction7(strm, yyNO_MATCH) + (* end case *)) +fun yyQ0 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx28 + then yyQ1(strm', lastMatch) + else if inp < 0wx28 + then if inp = 0wx20 + then yyQ2(strm', lastMatch) + else if inp < 0wx20 + then if inp = 0wxB + then yyQ1(strm', lastMatch) + else if inp < 0wxB + then if inp <= 0wx8 + then yyQ1(strm', lastMatch) + else yyQ2(strm', lastMatch) + else if inp = 0wxD + then yyQ2(strm', lastMatch) + else yyQ1(strm', lastMatch) + else if inp = 0wx23 + then yyQ1(strm', lastMatch) + else if inp < 0wx23 + then if inp = 0wx21 + then yyQ1(strm', lastMatch) + else yyQ3(strm', lastMatch) + else if inp = 0wx27 + then yyQ4(strm', lastMatch) + else yyQ1(strm', lastMatch) + else if inp = 0wx3D + then yyQ7(strm', lastMatch) + else if inp < 0wx3D + then if inp = 0wx2F + then yyQ1(strm', lastMatch) + else if inp < 0wx2F + then if inp = 0wx2E + then yyQ5(strm', lastMatch) + else yyQ1(strm', lastMatch) + else if inp <= 0wx39 + then yyQ6(strm', lastMatch) + else yyQ1(strm', lastMatch) + else if inp = 0wx5B + then yyQ1(strm', lastMatch) + else if inp < 0wx5B + then if inp <= 0wx40 + then yyQ1(strm', lastMatch) + else yyQ8(strm', lastMatch) + else if inp = 0wx61 + then yyQ8(strm', lastMatch) + else if inp < 0wx61 + then yyQ1(strm', lastMatch) + else if inp <= 0wx7A + then yyQ8(strm', lastMatch) + else yyQ1(strm', lastMatch) + (* end case *)) +in + (case (!(yyss)) + of INITIAL => yyQ0(!(yystrm), yyNO_MATCH) + (* end case *)) +end +end + and skip() = (yystartPos := yygetPos(); + yylastwasnref := ULexBuffer.lastWasNL (!yystrm); + continue()) + in (continue(), (!yystartPos, yygetPos()), !yystrm, !yyss) end + in + lex() + end + in + type pos = AntlrStreamPos.pos + type span = AntlrStreamPos.span + type tok = UserDeclarations.lex_result + + datatype prestrm = STRM of ULexBuffer.stream * + (yystart_state * tok * span * prestrm * yystart_state) option ref + type strm = (prestrm * yystart_state) + + fun lex sm +(STRM (yystrm, memo), ss) = (case !memo + of NONE => let + val (tok, span, yystrm', ss') = innerLex +(yystrm, ss, sm) + val strm' = STRM (yystrm', ref NONE); + in + memo := SOME (ss, tok, span, strm', ss'); + (tok, span, (strm', ss')) + end + | SOME (ss', tok, span, strm', ss'') => + if ss = ss' then + (tok, span, (strm', ss'')) + else ( + memo := NONE; + lex sm +(STRM (yystrm, memo), ss)) + (* end case *)) + + fun streamify input = (STRM (yystreamify' 0 input, ref NONE), INITIAL) + fun streamifyReader readFn strm = (STRM (yystreamifyReader' 0 readFn strm, ref NONE), + INITIAL) + fun streamifyInstream strm = (STRM (yystreamifyInstream' 0 strm, ref NONE), + INITIAL) + + fun getPos (STRM (strm, _), _) = ULexBuffer.getpos strm + + end +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-attrs.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-attrs.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-attrs.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-attrs.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,274 @@ +(* html4-attrs.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Helper functions for creating attribute-value pairs to include in + * HTML tags. We omit the deprecated attributes (commented out below), + * but include both the strict, loose, and frameset attributes. + * + * The source of the attribute list comes from + * + * http://www.w3.org/TR/html4/index/attributes.html + *) + +structure HTML4Attrs = + struct + + local + val a_abbr = Atom.atom "abbr" + val a_accept_charset = Atom.atom "accept-charset" + val a_accept = Atom.atom "accept" + val a_action = Atom.atom "action" + val a_align = Atom.atom "align" + val a_alink = Atom.atom "alink" + val a_alt = Atom.atom "alt" + val a_archive = Atom.atom "archive" + val a_axis = Atom.atom "axis" + val a_background = Atom.atom "background" + val a_bgcolor = Atom.atom "bgcolor" + val a_border = Atom.atom "border" + val a_cellpadding = Atom.atom "cellpadding" + val a_cellspacing = Atom.atom "cellspacing" + val a_char = Atom.atom "char" + val a_charoff = Atom.atom "charoff" + val a_charset = Atom.atom "charset" + val a_checked = Atom.atom "checked" + val a_cite = Atom.atom "cite" + val a_class = Atom.atom "class" + val a_classid = Atom.atom "classid" + val a_clear = Atom.atom "clear" + val a_code = Atom.atom "code" + val a_codebase = Atom.atom "codebase" + val a_codetype = Atom.atom "codetype" + val a_color = Atom.atom "color" + val a_cols = Atom.atom "cols" + val a_colspan = Atom.atom "colspan" + val a_compact = Atom.atom "compact" + val a_content = Atom.atom "content" + val a_coords = Atom.atom "coords" + val a_data = Atom.atom "data" + val a_datetime = Atom.atom "datetime" + val a_declare = Atom.atom "declare" + val a_defer = Atom.atom "defer" + val a_dir = Atom.atom "dir" + val a_disabled = Atom.atom "disabled" + val a_enctype = Atom.atom "enctype" + val a_face = Atom.atom "face" + val a_for = Atom.atom "for" + val a_frame = Atom.atom "frame" + val a_frameborder = Atom.atom "frameborder" + val a_headers = Atom.atom "headers" + val a_height = Atom.atom "height" + val a_href = Atom.atom "href" + val a_hreflang = Atom.atom "hreflang" + val a_hspace = Atom.atom "hspace" + val a_http_equiv = Atom.atom "http-equiv" + val a_id = Atom.atom "id" + val a_ismap = Atom.atom "ismap" + val a_label = Atom.atom "label" + val a_lang = Atom.atom "lang" + val a_language = Atom.atom "language" + val a_link = Atom.atom "link" + val a_longdesc = Atom.atom "longdesc" + val a_marginheight = Atom.atom "marginheight" + val a_marginwidth = Atom.atom "marginwidth" + val a_maxlength = Atom.atom "maxlength" + val a_media = Atom.atom "media" + val a_method = Atom.atom "method" + val a_multiple = Atom.atom "multiple" + val a_name = Atom.atom "name" + val a_nohref = Atom.atom "nohref" + val a_noresize = Atom.atom "noresize" + val a_noshade = Atom.atom "noshade" + val a_nowrap = Atom.atom "nowrap" + val a_object = Atom.atom "object" + val a_onblur = Atom.atom "onblur" + val a_onchange = Atom.atom "onchange" + val a_onclick = Atom.atom "onclick" + val a_ondblclick = Atom.atom "ondblclick" + val a_onfocus = Atom.atom "onfocus" + val a_onkeydown = Atom.atom "onkeydown" + val a_onkeypress = Atom.atom "onkeypress" + val a_onkeyup = Atom.atom "onkeyup" + val a_onload = Atom.atom "onload" + val a_onmousedown = Atom.atom "onmousedown" + val a_onmousemove = Atom.atom "onmousemove" + val a_onmouseout = Atom.atom "onmouseout" + val a_onmouseover = Atom.atom "onmouseover" + val a_onmouseup = Atom.atom "onmouseup" + val a_onreset = Atom.atom "onreset" + val a_onselect = Atom.atom "onselect" + val a_onsubmit = Atom.atom "onsubmit" + val a_onunload = Atom.atom "onunload" + val a_profile = Atom.atom "profile" + val a_prompt = Atom.atom "prompt" + val a_readonly = Atom.atom "readonly" + val a_rel = Atom.atom "rel" + val a_rev = Atom.atom "rev" + val a_rows = Atom.atom "rows" + val a_rowspan = Atom.atom "rowspan" + val a_rules = Atom.atom "rules" + val a_scheme = Atom.atom "scheme" + val a_scope = Atom.atom "scope" + val a_scrolling = Atom.atom "scrolling" + val a_selected = Atom.atom "selected" + val a_shape = Atom.atom "shape" + val a_size = Atom.atom "size" + val a_span = Atom.atom "span" + val a_src = Atom.atom "src" + val a_standby = Atom.atom "standby" + val a_start = Atom.atom "start" + val a_style = Atom.atom "style" + val a_summary = Atom.atom "summary" + val a_tabindex = Atom.atom "tabindex" + val a_target = Atom.atom "target" + val a_text = Atom.atom "text" + val a_title = Atom.atom "title" + val a_type = Atom.atom "type" + val a_usemap = Atom.atom "usemap" + val a_valign = Atom.atom "valign" + val a_value = Atom.atom "value" + val a_valuetype = Atom.atom "valuetype" + val a_version = Atom.atom "version" + val a_vlink = Atom.atom "vlink" + val a_vspace = Atom.atom "vspace" + val a_width = Atom.atom "width" + in + fun abbr (v : string) = (a_abbr, SOME v) + fun accept_charset (v : string) = (a_accept_charset, SOME v) + fun accept (v : string) = (a_accept, SOME v) + fun action (v : string) = (a_action, SOME v) + fun align (v : string) = (a_align, SOME v) + fun alink (v : string) = (a_alink, SOME v) + fun alt (v : string) = (a_alt, SOME v) + fun archive (v : string) = (a_archive, SOME v) + fun axis (v : string) = (a_axis, SOME v) +(* DEPRECATED + fun background (v : string) = (a_background, SOME v) (* deprecated *) + fun bgcolor (v : string) = (a_bgcolor, SOME v) (* deprecated *) +*) + fun border (v : string) = (a_border, SOME v) + fun cellpadding (v : string) = (a_cellpadding, SOME v) + fun cellspacing (v : string) = (a_cellspacing, SOME v) + fun char (v : string) = (a_char, SOME v) + fun charoff (v : string) = (a_charoff, SOME v) + fun charset (v : string) = (a_charset, SOME v) + fun checked (v : string) = (a_checked, SOME v) + fun cite (v : string) = (a_cite, SOME v) + fun class (v : string) = (a_class, SOME v) + fun classid (v : string) = (a_classid, SOME v) + fun clear (v : string) = (a_clear, SOME v) + fun code (v : string) = (a_code, SOME v) + fun codebase (v : string) = (a_codebase, SOME v) + fun codetype (v : string) = (a_codetype, SOME v) + fun color (v : string) = (a_color, SOME v) + fun cols (v : string) = (a_cols, SOME v) + fun colspan (v : string) = (a_colspan, SOME v) +(* DEPRECATED + val compact = (a_compact, NONE) (* deprecated *) +*) + fun content (v : string) = (a_content, SOME v) + fun coords (v : string) = (a_coords, SOME v) + fun data (v : string) = (a_data, SOME v) + fun datetime (v : string) = (a_datetime, SOME v) + val declare = (a_declare, NONE) + val defer = (a_defer, NONE) + fun dir (v : string) = (a_dir, SOME v) + val disabled = (a_disabled, NONE) + fun enctype (v : string) = (a_enctype, SOME v) +(* DEPRECATED + fun face (v : string) = (a_face, SOME v) (* deprecated *) +*) + fun for (v : string) = (a_for, SOME v) + fun frame (v : string) = (a_frame, SOME v) + fun frameborder (v : string) = (a_frameborder, SOME v) + fun headers (v : string) = (a_headers, SOME v) + fun height (v : string) = (a_height, SOME v) + fun href (v : string) = (a_href, SOME v) + fun hreflang (v : string) = (a_hreflang, SOME v) + fun hspace (v : string) = (a_hspace, SOME v) + fun http_equiv (v : string) = (a_http_equiv, SOME v) + fun id (v : string) = (a_id, SOME v) + fun ismap (v : string) = (a_ismap, SOME v) + fun label (v : string) = (a_label, SOME v) + fun lang (v : string) = (a_lang, SOME v) +(* DEPRECATED + fun language (v : string) = (a_language, SOME v) (* deprecated *) + fun link (v : string) = (a_link, SOME v) (* deprecated *) +*) + fun longdesc (v : string) = (a_longdesc, SOME v) + fun marginheight (v : string) = (a_marginheight, SOME v) + fun marginwidth (v : string) = (a_marginwidth, SOME v) + fun maxlength (v : string) = (a_maxlength, SOME v) + fun media (v : string) = (a_media, SOME v) + fun method (v : string) = (a_method, SOME v) + fun multiple (v : string) = (a_multiple, SOME v) + fun name (v : string) = (a_name, SOME v) + val nohref = (a_nohref, NONE) + val noresize = (a_noresize, NONE) +(* DEPRECATED + val noshade = (a_noshade, NONE) (* deprecated *) + val nowrap = (a_nowrap, NONE) (* deprecated *) + fun object (v : string) = (a_object, SOME v) (* deprecated *) +*) + fun onblur (v : string) = (a_onblur, SOME v) + fun onchange (v : string) = (a_onchange, SOME v) + fun onclick (v : string) = (a_onclick, SOME v) + fun ondblclick (v : string) = (a_ondblclick, SOME v) + fun onfocus (v : string) = (a_onfocus, SOME v) + fun onkeydown (v : string) = (a_onkeydown, SOME v) + fun onkeypress (v : string) = (a_onkeypress, SOME v) + fun onkeyup (v : string) = (a_onkeyup, SOME v) + fun onload (v : string) = (a_onload, SOME v) + fun onmousedown (v : string) = (a_onmousedown, SOME v) + fun onmousemove (v : string) = (a_onmousemove, SOME v) + fun onmouseout (v : string) = (a_onmouseout, SOME v) + fun onmouseover (v : string) = (a_onmouseover, SOME v) + fun onmouseup (v : string) = (a_onmouseup, SOME v) + fun onreset (v : string) = (a_onreset, SOME v) + fun onselect (v : string) = (a_onselect, SOME v) + fun onsubmit (v : string) = (a_onsubmit, SOME v) + fun onunload (v : string) = (a_onunload, SOME v) + fun profile (v : string) = (a_profile, SOME v) +(* DEPRECATED + fun prompt (v : string) = (a_prompt, SOME v) (* deprecated *) +*) + val readonly = (a_readonly, NONE) + fun rel (v : string) = (a_rel, SOME v) + fun rev (v : string) = (a_rev, SOME v) + fun rows (v : string) = (a_rows, SOME v) + fun rowspan (v : string) = (a_rowspan, SOME v) + fun rules (v : string) = (a_rules, SOME v) + fun scheme (v : string) = (a_scheme, SOME v) + fun scope (v : string) = (a_scope, SOME v) + fun scrolling (v : string) = (a_scrolling, SOME v) + val selected = (a_selected, NONE) + fun shape (v : string) = (a_shape, SOME v) + fun size (v : string) = (a_size, SOME v) + fun span (v : string) = (a_span, SOME v) + fun src (v : string) = (a_src, SOME v) + fun standby (v : string) = (a_standby, SOME v) +(* DEPRECATED + fun start (v : string) = (a_start, SOME v) (* deprecated *) +*) + fun style (v : string) = (a_style, SOME v) + fun summary (v : string) = (a_summary, SOME v) + fun tabindex (v : string) = (a_tabindex, SOME v) + fun target (v : string) = (a_target, SOME v) + fun text (v : string) = (a_text, SOME v) + fun title (v : string) = (a_title, SOME v) + fun type' (v : string) = (a_type, SOME v) + fun usemap (v : string) = (a_usemap, SOME v) + fun valign (v : string) = (a_valign, SOME v) + fun value (v : string) = (a_value, SOME v) + fun valuetype (v : string) = (a_valuetype, SOME v) + fun version (v : string) = (a_version, SOME v) +(* DEPRECATED + fun vlink (v : string) = (a_vlink, SOME v) (* deprecated *) +*) + fun vspace (v : string) = (a_vspace, SOME v) + fun width (v : string) = (a_width, SOME v) + end (* local *) + + end (* HTML4Attrs *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-entities.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-entities.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-entities.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-entities.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,25 @@ +(* html4-entities.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure HTML4Entities = + struct + + val nbsp = HTML4.ENTITY(Atom.atom "nbsp") + val lt = HTML4.ENTITY(Atom.atom "lt") + val gt = HTML4.ENTITY(Atom.atom "gt") + val amp = HTML4.ENTITY(Atom.atom "amp") + val quot = HTML4.ENTITY(Atom.atom "quot") + val cent = HTML4.ENTITY(Atom.atom "cent") + val pound = HTML4.ENTITY(Atom.atom "pound") + val yen = HTML4.ENTITY(Atom.atom "yen") + val euro = HTML4.ENTITY(Atom.atom "euro") + val copy = HTML4.ENTITY(Atom.atom "copy") + val reg = HTML4.ENTITY(Atom.atom "reg") + +(* TODO: add the full set of HTML entities *) + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.g mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.g --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.g 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.g 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,929 @@ +(* html4.g + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +%name HTML4; + +%defs( + +open HTML4Utils + +fun optToList NONE = [] + | optToList (SOME thing) = [thing] + +fun optListToList NONE = [] + | optListToList (SOME thing) = thing + +); + +%tokens : OPENTAG of Atom.atom * HTML4Utils.tag_payload + | CLOSETAG of Atom.atom + | COMMENT of string + | PCDATA of string + | DOCTYPE of string + | CHAR_REF of IntInf.int + | ENTITY_REF of Atom.atom + | XML_PROCESSING of string + (* HTML 4 element tokens. *) + | STARTA of HTML4Utils.tag_payload + | ENDA + | STARTABBR of HTML4Utils.tag_payload + | ENDABBR + | STARTACRONYM of HTML4Utils.tag_payload + | ENDACRONYM + | STARTADDRESS of HTML4Utils.tag_payload + | ENDADDRESS + | STARTAPPLET of HTML4Utils.tag_payload + | ENDAPPLET + | STARTAREA of HTML4Utils.tag_payload + (* No END tag for AREA element. *) + | STARTB of HTML4Utils.tag_payload + | ENDB + | STARTBASE of HTML4Utils.tag_payload + (* No END tag for BASE element. *) + | STARTBASEFONT of HTML4Utils.tag_payload + (* No END tag for BASEFONT element. *) + | STARTBDO of HTML4Utils.tag_payload + | ENDBDO + | STARTBIG of HTML4Utils.tag_payload + | ENDBIG + | STARTBLOCKQUOTE of HTML4Utils.tag_payload + | ENDBLOCKQUOTE + | STARTBODY of HTML4Utils.tag_payload + | ENDBODY + | STARTBR of HTML4Utils.tag_payload + (* No END tag for BR element. *) + | STARTBUTTON of HTML4Utils.tag_payload + | ENDBUTTON + | STARTCAPTION of HTML4Utils.tag_payload + | ENDCAPTION + | STARTCENTER of HTML4Utils.tag_payload + | ENDCENTER + | STARTCITE of HTML4Utils.tag_payload + | ENDCITE + | STARTCODE of HTML4Utils.tag_payload + | ENDCODE + | STARTCOL of HTML4Utils.tag_payload + (* No END tag for COL element. *) + | STARTCOLGROUP of HTML4Utils.tag_payload + | ENDCOLGROUP + | STARTDD of HTML4Utils.tag_payload + | ENDDD + | STARTDEL of HTML4Utils.tag_payload + | ENDDEL + | STARTDFN of HTML4Utils.tag_payload + | ENDDFN + | STARTDIR of HTML4Utils.tag_payload + | ENDDIR + | STARTDIV of HTML4Utils.tag_payload + | ENDDIV + | STARTDL of HTML4Utils.tag_payload + | ENDDL + | STARTDT of HTML4Utils.tag_payload + | ENDDT + | STARTEM of HTML4Utils.tag_payload + | ENDEM + | STARTFIELDSET of HTML4Utils.tag_payload + | ENDFIELDSET + | STARTFONT of HTML4Utils.tag_payload + | ENDFONT + | STARTFORM of HTML4Utils.tag_payload + | ENDFORM + | STARTFRAME of HTML4Utils.tag_payload + (* No END tag for FRAME element. *) + | STARTFRAMESET of HTML4Utils.tag_payload + | ENDFRAMESET + | STARTH1 of HTML4Utils.tag_payload + | ENDH1 + | STARTH2 of HTML4Utils.tag_payload + | ENDH2 + | STARTH3 of HTML4Utils.tag_payload + | ENDH3 + | STARTH4 of HTML4Utils.tag_payload + | ENDH4 + | STARTH5 of HTML4Utils.tag_payload + | ENDH5 + | STARTH6 of HTML4Utils.tag_payload + | ENDH6 + | STARTHEAD of HTML4Utils.tag_payload + | ENDHEAD + | STARTHR of HTML4Utils.tag_payload + (* No END tag for HR element. *) + | STARTHTML of HTML4Utils.tag_payload + | ENDHTML + | STARTI of HTML4Utils.tag_payload + | ENDI + | STARTIFRAME of HTML4Utils.tag_payload + | ENDIFRAME + | STARTIMG of HTML4Utils.tag_payload + (* No END tag for IMG element. *) + | STARTINPUT of HTML4Utils.tag_payload + (* No END tag for INPUT element. *) + | STARTINS of HTML4Utils.tag_payload + | ENDINS + | STARTISINDEX of HTML4Utils.tag_payload + (* No END tag for ISINDEX element. *) + | STARTKBD of HTML4Utils.tag_payload + | ENDKBD + | STARTLABEL of HTML4Utils.tag_payload + | ENDLABEL + | STARTLEGEND of HTML4Utils.tag_payload + | ENDLEGEND + | STARTLI of HTML4Utils.tag_payload + | ENDLI + | STARTLINK of HTML4Utils.tag_payload + (* No END tag for LINK element. *) + | STARTMAP of HTML4Utils.tag_payload + | ENDMAP + | STARTMENU of HTML4Utils.tag_payload + | ENDMENU + | STARTMETA of HTML4Utils.tag_payload + (* No END tag for META element. *) + | STARTNOFRAMES of HTML4Utils.tag_payload + | ENDNOFRAMES + | STARTNOSCRIPT of HTML4Utils.tag_payload + | ENDNOSCRIPT + | STARTOBJECT of HTML4Utils.tag_payload + | ENDOBJECT + | STARTOL of HTML4Utils.tag_payload + | ENDOL + | STARTOPTGROUP of HTML4Utils.tag_payload + | ENDOPTGROUP + | STARTOPTION of HTML4Utils.tag_payload + | ENDOPTION + | STARTP of HTML4Utils.tag_payload + | ENDP + | STARTPARAM of HTML4Utils.tag_payload + (* No END tag for PARAM element. *) + | STARTPRE of HTML4Utils.tag_payload + | ENDPRE + | STARTQ of HTML4Utils.tag_payload + | ENDQ + | STARTS of HTML4Utils.tag_payload + | ENDS + | STARTSAMP of HTML4Utils.tag_payload + | ENDSAMP + | STARTSCRIPT of HTML4Utils.tag_payload + | ENDSCRIPT + | STARTSELECT of HTML4Utils.tag_payload + | ENDSELECT + | STARTSMALL of HTML4Utils.tag_payload + | ENDSMALL + | STARTSPAN of HTML4Utils.tag_payload + | ENDSPAN + | STARTSTRIKE of HTML4Utils.tag_payload + | ENDSTRIKE + | STARTSTRONG of HTML4Utils.tag_payload + | ENDSTRONG + | STARTSTYLE of HTML4Utils.tag_payload + | ENDSTYLE + | STARTSUB of HTML4Utils.tag_payload + | ENDSUB + | STARTSUP of HTML4Utils.tag_payload + | ENDSUP + | STARTTABLE of HTML4Utils.tag_payload + | ENDTABLE + | STARTTBODY of HTML4Utils.tag_payload + | ENDTBODY + | STARTTD of HTML4Utils.tag_payload + | ENDTD + | STARTTEXTAREA of HTML4Utils.tag_payload + | ENDTEXTAREA + | STARTTFOOT of HTML4Utils.tag_payload + | ENDTFOOT + | STARTTH of HTML4Utils.tag_payload + | ENDTH + | STARTTHEAD of HTML4Utils.tag_payload + | ENDTHEAD + | STARTTITLE of HTML4Utils.tag_payload + | ENDTITLE + | STARTTR of HTML4Utils.tag_payload + | ENDTR + | STARTTT of HTML4Utils.tag_payload + | ENDTT + | STARTU of HTML4Utils.tag_payload + | ENDU + | STARTUL of HTML4Utils.tag_payload + | ENDUL + | STARTVAR of HTML4Utils.tag_payload + | ENDVAR +; + +%start document; + +%entry body, flow, block, inline, cdata_opt; + +document : cdata_opt + (DOCTYPE cdata_opt => ((Lf (Tok.DOCTYPE DOCTYPE)) :: cdata_opt))? + (STARTHTML cdata_opt + => ((Lf (Tok.STARTHTML STARTHTML)) :: cdata_opt))? + head + (body | frameset) + (ENDHTML cdata_opt => ((Lf (Tok.ENDHTML)) :: cdata_opt))? + => (Nd (Atom.atom "DOCUMENT", + cdata_opt @ (optListToList SR1) @ (optListToList SR2) @ + (head :: SR3 :: (optListToList SR4)))) +; + +(* ______________________________________________________________________ + HEAD and related elements + ______________________________________________________________________ *) + +head : (STARTHEAD cdata_opt => ((Lf (Tok.STARTHEAD STARTHEAD)) :: cdata_opt))? + (head_content cdata_opt => (head_content :: cdata_opt))* + (ENDHEAD cdata_opt => ((Lf (Tok.ENDHEAD)) :: cdata_opt))? + => (Nd (Atom.atom "HEAD", + (optListToList SR1) @ (foldr op@ [] SR2) @ (optListToList SR3))) +; + +head_content : title | base | script | style | meta | link | object +; + +title : STARTTITLE cdata_opt ENDTITLE + => (Nd (Atom.atom "TITLE", + (Lf (Tok.STARTTITLE STARTTITLE)) :: + (cdata_opt @ [Lf (Tok.ENDTITLE)]))) +; + +base : STARTBASE + => (Nd (Atom.atom "BASE", [Lf (Tok.STARTBASE STARTBASE)])) +; + +script : STARTSCRIPT cdata_opt ENDSCRIPT + => (Nd (Atom.atom "SCRIPT", + (Lf (Tok.STARTSCRIPT STARTSCRIPT)) :: + (cdata_opt @ [Lf (Tok.ENDSCRIPT)]))) +; + +style : STARTSTYLE cdata_opt ENDSTYLE + => (Nd (Atom.atom "STYLE", + (Lf (Tok.STARTSTYLE STARTSTYLE)) :: + (cdata_opt @ [Lf (Tok.ENDSTYLE)]))) +; + +meta : STARTMETA + => (Nd (Atom.atom "META", [Lf (Tok.STARTMETA STARTMETA)])) +; + +link : STARTLINK + => (Nd (Atom.atom "LINK", [Lf (Tok.STARTLINK STARTLINK)])) +; + +object : STARTOBJECT (param | flow)* ENDOBJECT + => (Nd (Atom.atom "OBJECT", + (Lf (Tok.STARTOBJECT STARTOBJECT)) :: + (SR @ [Lf (Tok.ENDOBJECT)]))) +; + +param : STARTPARAM + => (Nd (Atom.atom "PARAM", [(Lf (Tok.STARTPARAM STARTPARAM))])) +; + +(* ______________________________________________________________________ + BODY and related elements + ______________________________________________________________________ *) + +body : STARTBODY body_rest + => (Nd (Atom.atom "BODY", + (Lf (Tok.STARTBODY STARTBODY)) :: body_rest)) + | (block | ins | del) body_rest + => (Nd (Atom.atom "BODY", SR :: body_rest)) +; + +body_rest : (block | script | ins | del | cdata)* + (ENDBODY cdata_opt => ((Lf (Tok.ENDBODY)) :: cdata_opt))? + => (SR1 @ (optListToList SR2)) +; + +flow : block + | inline +; + +block : p + | heading + | list + | preformatted + | dl + | div + | noscript + | blockquote + | form + | hr + | table + | fieldset + | address + | block_loose +; + +block_loose : center + | isindex +; + +heading : h1 + | h2 + | h3 + | h4 + | h5 + | h6 +; + +list : ul + | ol + | list_loose +; + +list_loose : dir + | menu +; + +preformatted : pre +; + +inline : fontstyle + | phrase + | special + | formctrl + | cdata +; + +fontstyle : tt + | i + | b + | big + | small + | fontstyle_loose +; + +fontstyle_loose : u + | s + | strike +; + +phrase : em + | strong + | dfn + | code + | samp + | kbd + | var + | cite + | abbr + | acronym +; + +special : a + | img + | object + | br + | script + | map + | q + | sub + | sup + | span + | bdo + | special_loose +; + +special_loose : applet + | basefont + | font + | iframe +; + +formctrl : input + | select + | textarea + | label + | button +; + +(* Actual elements *) + +a : STARTA inline* ENDA + => (Nd (Atom.atom "A", + (Lf (Tok.STARTA STARTA)) :: (inline @ [Lf (Tok.ENDA)]))) +; + +abbr : STARTABBR inline* ENDABBR + => (Nd (Atom.atom "ABBR", + (Lf (Tok.STARTABBR STARTABBR)) :: + (inline @ [Lf (Tok.ENDABBR)]))) +; + +acronym : STARTACRONYM inline* ENDACRONYM + => (Nd (Atom.atom "ACRONYM", + (Lf (Tok.STARTACRONYM STARTACRONYM)) :: + (inline @ [Lf (Tok.ENDACRONYM)]))) +; + +address : STARTADDRESS inline* ENDADDRESS + => (Nd (Atom.atom "ADDRESS", + (Lf (Tok.STARTADDRESS STARTADDRESS)) :: + (inline @ [Lf (Tok.ENDADDRESS)]))) +; + +applet : STARTAPPLET (param | flow)* ENDAPPLET + => (Nd (Atom.atom "APPLET", + (Lf (Tok.STARTAPPLET STARTAPPLET)) :: + (SR @ [Lf (Tok.ENDAPPLET)]))) +; + +area : STARTAREA + => (Nd (Atom.atom "AREA", [Lf (Tok.STARTAREA STARTAREA)])) +; + +b : STARTB inline* ENDB + => (Nd (Atom.atom "B", + (Lf (Tok.STARTB STARTB)) :: (inline @ [Lf (Tok.ENDB)]))) +; + +basefont : STARTBASEFONT + => (Nd (Atom.atom "BASEFONT", [Lf (Tok.STARTBASEFONT STARTBASEFONT)])) +; + +bdo : STARTBDO inline* ENDBDO + => (Nd (Atom.atom "BDO", + (Lf (Tok.STARTBDO STARTBDO)) :: + (inline @ [Lf (Tok.ENDBDO)]))) +; + +big : STARTBIG inline* ENDBIG + => (Nd (Atom.atom "BIG", + (Lf (Tok.STARTBIG STARTBIG)) :: + (inline @ [Lf (Tok.ENDBIG)]))) +; + +blockquote : STARTBLOCKQUOTE (block | script | cdata)+ ENDBLOCKQUOTE + => (Nd (Atom.atom "BLOCKQUOTE", + (Lf (Tok.STARTBLOCKQUOTE STARTBLOCKQUOTE)) :: + (SR @ [Lf (Tok.ENDBLOCKQUOTE)]))) +; + +br : STARTBR + => (Nd (Atom.atom "BR", [Lf (Tok.STARTBR STARTBR)])) +; + +button : STARTBUTTON flow* ENDBUTTON + => (Nd (Atom.atom "BUTTON", + (Lf (Tok.STARTBUTTON STARTBUTTON)) :: + (flow @ [Lf (Tok.ENDBUTTON)]))) +; + +caption : STARTCAPTION inline* ENDCAPTION + => (Nd (Atom.atom "CAPTION", + (Lf (Tok.STARTCAPTION STARTCAPTION)) :: + (inline @ [Lf (Tok.ENDCAPTION)]))) +; + +center : STARTCENTER flow* ENDCENTER + => (Nd (Atom.atom "CENTER", + (Lf (Tok.STARTCENTER STARTCENTER)) :: + (flow @ [Lf (Tok.ENDCENTER)]))) +; + +cite : STARTCITE inline* ENDCITE + => (Nd (Atom.atom "CITE", + (Lf (Tok.STARTCITE STARTCITE)) :: + (inline @ [Lf (Tok.ENDCITE)]))) +; + +code : STARTCODE inline* ENDCODE + => (Nd (Atom.atom "CODE", + (Lf (Tok.STARTCODE STARTCODE)) :: + (inline @ [Lf (Tok.ENDCODE)]))) +; + +col : STARTCOL + => (Nd (Atom.atom "COL", [Lf (Tok.STARTCOL STARTCOL)])) +; + +colgroup : STARTCOLGROUP cdata_opt + (col cdata_opt => (col :: cdata_opt))* + (ENDCOLGROUP => (Lf (Tok.ENDCOLGROUP)))? + => (Nd (Atom.atom "COLGROUP", + (Lf (Tok.STARTCOLGROUP STARTCOLGROUP)) :: + (cdata_opt @ (foldr op@ [] SR1) @ (optToList SR2)))) +; + +dd : STARTDD flow* (ENDDD => (Lf (Tok.ENDDD)))? + => (Nd (Atom.atom "DD", + (Lf (Tok.STARTDD STARTDD)) :: (flow @ (optToList SR)))) +; + +del : STARTDEL flow* ENDDEL + => (Nd (Atom.atom "DEL", + (Lf (Tok.STARTDEL STARTDEL)) :: + (flow @ [Lf (Tok.ENDDEL)]))) +; + +dfn : STARTDFN inline* ENDDFN + => (Nd (Atom.atom "DFN", + (Lf (Tok.STARTDFN STARTDFN)) :: + (inline @ [Lf (Tok.ENDDFN)]))) +; + +dir : STARTDIR cdata_opt li+ ENDDIR + => (Nd (Atom.atom "DIR", + (Lf (Tok.STARTDIR STARTDIR)) :: + (cdata_opt @ li @ [Lf (Tok.ENDDIR)]))) +; + +div : STARTDIV flow* ENDDIV + => (Nd (Atom.atom "DIV", + (Lf (Tok.STARTDIV STARTDIV)) :: + (flow @ [Lf (Tok.ENDDIV)]))) +; + +dl : STARTDL cdata_opt (dt | dd)+ ENDDL + => (Nd (Atom.atom "DL", + (Lf (Tok.STARTDL STARTDL)) :: + (cdata_opt @ SR @ [Lf (Tok.ENDDL)]))) +; + +dt : STARTDT inline* (ENDDT => (Lf (Tok.ENDDT)))? + => (Nd (Atom.atom "DT", + (Lf (Tok.STARTDT STARTDT)) :: (inline @ (optToList SR)))) +; + +em : STARTEM inline* ENDEM + => (Nd (Atom.atom "EM", + (Lf (Tok.STARTEM STARTEM)) :: (inline @ [Lf (Tok.ENDEM)]))) +; + +fieldset : STARTFIELDSET cdata_opt legend flow* ENDFIELDSET + => (Nd (Atom.atom "FIELDSET", + (Lf (Tok.STARTFIELDSET STARTFIELDSET)) :: + (cdata_opt @ [legend] @ flow @ + [Lf (Tok.ENDFIELDSET)]))) +; + +font : STARTFONT inline* ENDFONT + => (Nd (Atom.atom "FONT", + (Lf (Tok.STARTFONT STARTFONT)) :: + (inline @ [Lf (Tok.ENDFONT)]))) +; + +form : STARTFORM (cdata | block | script)+ ENDFORM + => (Nd (Atom.atom "FORM", + (Lf (Tok.STARTFORM STARTFORM)) :: + (SR @ [Lf (Tok.ENDFORM)]))) +; + +frame : STARTFRAME + => (Nd (Atom.atom "FRAME", [Lf (Tok.STARTFRAME STARTFRAME)])) +; + +frameset : STARTFRAMESET (frameset | frame | cdata)+ + (noframes cdata_opt => (noframes::cdata_opt))? ENDFRAMESET + => (Nd (Atom.atom "FRAMESET", + (Lf (Tok.STARTFRAMESET STARTFRAMESET)) :: + (SR1 @ (optListToList SR2) @ [Lf (Tok.ENDFRAMESET)]))) +; + +h1 : STARTH1 inline* ENDH1 + => (Nd (Atom.atom "H1", + (Lf (Tok.STARTH1 STARTH1)) :: (inline @ [Lf (Tok.ENDH1)]))) +; + +h2 : STARTH2 inline* ENDH2 + => (Nd (Atom.atom "H2", + (Lf (Tok.STARTH2 STARTH2)) :: (inline @ [Lf (Tok.ENDH2)]))) +; + +h3 : STARTH3 inline* ENDH3 + => (Nd (Atom.atom "H3", + (Lf (Tok.STARTH3 STARTH3)) :: (inline @ [Lf (Tok.ENDH3)]))) +; + +h4 : STARTH4 inline* ENDH4 + => (Nd (Atom.atom "H4", + (Lf (Tok.STARTH4 STARTH4)) :: (inline @ [Lf (Tok.ENDH4)]))) +; + +h5 : STARTH5 inline* ENDH5 + => (Nd (Atom.atom "H5", + (Lf (Tok.STARTH5 STARTH5)) :: (inline @ [Lf (Tok.ENDH5)]))) +; + +h6 : STARTH6 inline* ENDH6 + => (Nd (Atom.atom "H6", + (Lf (Tok.STARTH6 STARTH6)) :: (inline @ [Lf (Tok.ENDH6)]))) +; + +hr : STARTHR + => (Nd (Atom.atom "HR", [Lf (Tok.STARTHR STARTHR)])) +; + +i : STARTI inline* ENDI + => (Nd (Atom.atom "I", + (Lf (Tok.STARTI STARTI)) :: + (inline @ [Lf (Tok.ENDI)]))) +; + +iframe : STARTIFRAME flow* ENDIFRAME + => (Nd (Atom.atom "IFRAME", + (Lf (Tok.STARTIFRAME STARTIFRAME)) :: + (flow @ [Lf (Tok.ENDIFRAME)]))) +; + +img : STARTIMG + => (Nd (Atom.atom "IMG", [Lf (Tok.STARTIMG STARTIMG)])) +; + +input : STARTINPUT + => (Nd (Atom.atom "INPUT", [Lf (Tok.STARTINPUT STARTINPUT)])) +; + +ins : STARTINS flow* ENDINS + => (Nd (Atom.atom "INS", + (Lf (Tok.STARTINS STARTINS)) :: + (flow @ [Lf (Tok.ENDINS)]))) +; + +isindex : STARTISINDEX + => (Nd (Atom.atom "ISINDEX", [Lf (Tok.STARTISINDEX STARTISINDEX)])) +; + +kbd : STARTKBD inline* ENDKBD + => (Nd (Atom.atom "KBD", + (Lf (Tok.STARTKBD STARTKBD)) :: + (inline @ [Lf (Tok.ENDKBD)]))) +; + +label : STARTLABEL inline* ENDLABEL + => (Nd (Atom.atom "LABEL", + (Lf (Tok.STARTLABEL STARTLABEL)) :: + (inline @ [Lf (Tok.ENDLABEL)]))) +; + +legend : STARTLEGEND inline* ENDLEGEND + => (Nd (Atom.atom "LEGEND", + (Lf (Tok.STARTLEGEND STARTLEGEND)) :: + (inline @ [Lf (Tok.ENDLEGEND)]))) +; + +li : STARTLI flow* (ENDLI => (Lf (Tok.ENDLI)))? + => (Nd (Atom.atom "LI", + (Lf (Tok.STARTLI STARTLI)) :: (flow @ (optToList SR)))) +; + +map : STARTMAP (cdata | block | area)+ ENDMAP + => (Nd (Atom.atom "MAP", + (Lf (Tok.STARTMAP STARTMAP)) :: (SR @ [Lf (Tok.ENDMAP)]))) +; + +menu : STARTMENU cdata_opt li+ ENDMENU + => (Nd (Atom.atom "MENU", + (Lf (Tok.STARTMENU STARTMENU)) :: + (cdata_opt @ li @ [Lf (Tok.ENDMENU)]))) +; + +noframes : STARTNOFRAMES body ENDNOFRAMES + => (Nd (Atom.atom "NOFRAMES", + [Lf (Tok.STARTNOFRAMES STARTNOFRAMES), body, + Lf (Tok.ENDNOFRAMES)])) +; + +noscript : STARTNOSCRIPT (cdata | block)+ ENDNOSCRIPT + => (Nd (Atom.atom "NOSCRIPT", + (Lf (Tok.STARTNOSCRIPT STARTNOSCRIPT)) :: + (SR @ [Lf (Tok.ENDNOSCRIPT)]))) +; + +ol : STARTOL cdata_opt li+ ENDOL + => (Nd (Atom.atom "OL", + (Lf (Tok.STARTOL STARTOL)) :: + (cdata_opt @ li @ [Lf (Tok.ENDOL)]))) +; + +optgroup : STARTOPTGROUP cdata_opt option+ ENDOPTGROUP cdata_opt + => (Nd (Atom.atom "OPTGROUP", + (Lf (Tok.STARTOPTGROUP STARTOPTGROUP)) :: + (cdata_opt1 @ option @ ((Lf (Tok.ENDOPTGROUP)) + :: cdata_opt2)))) +; + +option : STARTOPTION cdata_opt + (ENDOPTION cdata_opt => ((Lf (Tok.ENDOPTION)) :: + cdata_opt))? + => (Nd (Atom.atom "OPTION", + (Lf (Tok.STARTOPTION STARTOPTION)) :: + (cdata_opt @ (optListToList SR)))) +; + +(* TODO: Making the ENDP optional, which is valid, causes +left-recursion for the inline* part. This can be fixed by having a +two state flow nonterminal, which the older HTML library does. *) + +p : STARTP inline* ENDP + => (Nd (Atom.atom "P", + (Lf (Tok.STARTP STARTP)) :: (inline @ [Lf (Tok.ENDP)]))) +; + +pre : STARTPRE inline* ENDPRE + => (Nd (Atom.atom "PRE", + (Lf (Tok.STARTPRE STARTPRE)) :: + (inline @ [Lf (Tok.ENDPRE)]))) +; + +q : STARTQ inline* ENDQ + => (Nd (Atom.atom "Q", + (Lf (Tok.STARTQ STARTQ)) :: (inline @ [Lf (Tok.ENDQ)]))) +; + +s : STARTS inline* ENDS + => (Nd (Atom.atom "S", + (Lf (Tok.STARTS STARTS)) :: (inline @ [Lf (Tok.ENDS)]))) +; + +samp : STARTSAMP inline* ENDSAMP + => (Nd (Atom.atom "SAMP", + (Lf (Tok.STARTSAMP STARTSAMP)) :: + (inline @ [Lf (Tok.ENDSAMP)]))) +; + +select : STARTSELECT cdata_opt (optgroup | option)+ ENDSELECT + => (Nd (Atom.atom "SELECT", + (Lf (Tok.STARTSELECT STARTSELECT)) :: + (cdata_opt @ SR @ [Lf (Tok.ENDSELECT)]))) +; + +small : STARTSMALL inline* ENDSMALL + => (Nd (Atom.atom "SMALL", + (Lf (Tok.STARTSMALL STARTSMALL)) :: + (inline @ [Lf (Tok.ENDSMALL)]))) +; + +span : STARTSPAN inline* ENDSPAN + => (Nd (Atom.atom "SPAN", + (Lf (Tok.STARTSPAN STARTSPAN)) :: + (inline @ [Lf (Tok.ENDSPAN)]))) +; + +strike : STARTSTRIKE inline* ENDSTRIKE + => (Nd (Atom.atom "STRIKE", + (Lf (Tok.STARTSTRIKE STARTSTRIKE)) :: + (inline @ [Lf (Tok.ENDSTRIKE)]))) +; + +strong : STARTSTRONG inline* ENDSTRONG + => (Nd (Atom.atom "STRONG", + (Lf (Tok.STARTSTRONG STARTSTRONG)) :: + (inline @ [Lf (Tok.ENDSTRONG)]))) +; + +sub : STARTSUB inline* ENDSUB + => (Nd (Atom.atom "SUB", + (Lf (Tok.STARTSUB STARTSUB)) :: + (inline @ [Lf (Tok.ENDSUB)]))) +; + +sup : STARTSUP inline* ENDSUP + => (Nd (Atom.atom "SUP", + (Lf (Tok.STARTSUP STARTSUP)) :: + (inline @ [Lf (Tok.ENDSUP)]))) +; + +(* My reading of the HTML DTD indicates the following order of +elements is enforceable: *) + +table : STARTTABLE cdata_opt + (caption cdata_opt => (caption :: cdata_opt))? + col_or_colgroups table_content ENDTABLE + => (Nd (Atom.atom "TABLE", + (Lf (Tok.STARTTABLE STARTTABLE)) :: + (cdata_opt @ (optListToList SR) @ col_or_colgroups @ + table_content @ [Lf (Tok.ENDTABLE)]))) +; + +(* The whole tr+ thing makes the original table production ambiguous: + STARTTABLE ... thead? tfoot? tbody+ ENDTABLE *) + +table_content + : thead tfoot? tbodies + => (thead :: ((optToList tfoot)) @ tbodies) + | tfoot tbodies + => (tfoot :: tbodies) + | tbodies_nostart +; + +col_or_colgroups : (* empty *) + => ([]) + | (col cdata_opt => (col :: cdata_opt))+ + => (foldr op@ [] SR) + | colgroup+ +; + + +tbodies_nostart : (STARTTBODY cdata_opt => + ((Lf (Tok.STARTTBODY STARTTBODY)) :: cdata_opt))? + tr+ tbodies_rest? + => (let val (tbody_rest, tbody_peers) = + case tbodies_rest of + NONE => ([], []) + | SOME tbodies_tup => tbodies_tup + in (Nd (Atom.atom "TBODIES_NOSTART", + (optListToList SR) @ tr @ tbody_rest)) :: + tbody_peers end) +; + +tbodies : STARTTBODY cdata_opt tr+ tbodies_rest + => (let val (tbody_rest, tbody_peers) = tbodies_rest + in (Nd (Atom.atom "TBODIES", + (Lf (Tok.STARTTBODY STARTTBODY)) :: + (cdata_opt @ tr @ tbody_rest))) :: + tbody_peers end) +; + +tbodies_rest : ENDTBODY cdata_opt tbodies? + => ((Lf (Tok.ENDTBODY)) :: cdata_opt, + optListToList tbodies) + | STARTTBODY cdata_opt tr+ tbodies_rest? + => (let val (tbody_rest, tbody_peers) = + case tbodies_rest of NONE => ([], []) + | SOME tbodies_tup => tbodies_tup + in ([], (Nd (Atom.atom "TBODIES_REST", + (Lf (Tok.STARTTBODY STARTTBODY)) :: + (cdata_opt @ tr @ tbody_rest))) :: tbody_peers) + end) +; + +td : STARTTD flow* (ENDTD cdata_opt => ((Lf (Tok.ENDTD)) :: cdata_opt))? + => (Nd (Atom.atom "TD", + (Lf (Tok.STARTTD STARTTD)) :: (flow @ (optListToList SR)))) +; + +textarea : STARTTEXTAREA cdata_opt ENDTEXTAREA + => (Nd (Atom.atom "TEXTAREA", + (Lf (Tok.STARTTEXTAREA STARTTEXTAREA)) :: + (cdata_opt @ [Lf (Tok.ENDTEXTAREA)]))) +; + +tfoot : STARTTFOOT cdata_opt tr+ + (ENDTFOOT cdata_opt => ((Lf (Tok.ENDTFOOT)) :: cdata_opt))? + => (Nd (Atom.atom "TFOOT", + (Lf (Tok.STARTTFOOT STARTTFOOT)) :: (cdata_opt @ tr @ + (optListToList SR)))) +; + +th : STARTTH flow* (ENDTH cdata_opt => ((Lf (Tok.ENDTH)) :: cdata_opt))? + => (Nd (Atom.atom "TH", + (Lf (Tok.STARTTH STARTTH)) :: (flow @ (optListToList SR)))) +; + +thead : STARTTHEAD cdata_opt tr+ + (ENDTHEAD cdata_opt => ((Lf (Tok.ENDTHEAD)) :: cdata_opt))? + => (Nd (Atom.atom "THEAD", + (Lf (Tok.STARTTHEAD STARTTHEAD)) :: (cdata_opt @ tr @ + (optListToList SR)))) +; + +tr : STARTTR cdata_opt (th | td)+ + (ENDTR cdata_opt => ((Lf (Tok.ENDTR)) :: cdata_opt))? + => (Nd (Atom.atom "TR", + (Lf (Tok.STARTTR STARTTR)) :: (cdata_opt @ SR1 @ + (optListToList SR2)))) +; + +tt : STARTTT inline* ENDTT + => (Nd (Atom.atom "TT", + (Lf (Tok.STARTTT STARTTT)) :: (inline @ [Lf (Tok.ENDTT)]))) +; + +u : STARTU inline* ENDU + => (Nd (Atom.atom "U", + (Lf (Tok.STARTU STARTU)) :: (inline @ [Lf (Tok.ENDU)]))) +; + +ul : STARTUL cdata_opt li+ ENDUL + => (Nd (Atom.atom "UL", + ((Lf (Tok.STARTUL STARTUL)) :: (cdata_opt @ li @ + [Lf (Tok.ENDUL)])))) +; + +var : STARTVAR inline* ENDVAR + => (Nd (Atom.atom "VAR", + (Lf (Tok.STARTVAR STARTVAR)) :: (inline @ + [Lf (Tok.ENDVAR)]))) +; + +(* ______________________________________________________________________ + Miscellaneous data nonterminals + ______________________________________________________________________ *) + +cdata : (PCDATA => (Tok.PCDATA PCDATA) + | CHAR_REF => (Tok.CHAR_REF CHAR_REF) + | ENTITY_REF => (Tok.ENTITY_REF ENTITY_REF) + | COMMENT => (Tok.COMMENT COMMENT)) + => ((Lf SR) : HTML4Tokens.token parsetree) +; + +cdata_opt : cdata* => (cdata : HTML4Tokens.token parsetree list) +; + +(* ______________________________________________________________________ + End of html4.g + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.g.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.g.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.g.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.g.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,8034 @@ +structure HTML4Tokens = + struct + datatype token + = OPENTAG of Atom.atom * HTML4Utils.tag_payload + | CLOSETAG of Atom.atom + | COMMENT of string + | PCDATA of string + | DOCTYPE of string + | CHAR_REF of IntInf.int + | ENTITY_REF of Atom.atom + | XML_PROCESSING of string + | STARTA of HTML4Utils.tag_payload + | ENDA + | STARTABBR of HTML4Utils.tag_payload + | ENDABBR + | STARTACRONYM of HTML4Utils.tag_payload + | ENDACRONYM + | STARTADDRESS of HTML4Utils.tag_payload + | ENDADDRESS + | STARTAPPLET of HTML4Utils.tag_payload + | ENDAPPLET + | STARTAREA of HTML4Utils.tag_payload + | STARTB of HTML4Utils.tag_payload + | ENDB + | STARTBASE of HTML4Utils.tag_payload + | STARTBASEFONT of HTML4Utils.tag_payload + | STARTBDO of HTML4Utils.tag_payload + | ENDBDO + | STARTBIG of HTML4Utils.tag_payload + | ENDBIG + | STARTBLOCKQUOTE of HTML4Utils.tag_payload + | ENDBLOCKQUOTE + | STARTBODY of HTML4Utils.tag_payload + | ENDBODY + | STARTBR of HTML4Utils.tag_payload + | STARTBUTTON of HTML4Utils.tag_payload + | ENDBUTTON + | STARTCAPTION of HTML4Utils.tag_payload + | ENDCAPTION + | STARTCENTER of HTML4Utils.tag_payload + | ENDCENTER + | STARTCITE of HTML4Utils.tag_payload + | ENDCITE + | STARTCODE of HTML4Utils.tag_payload + | ENDCODE + | STARTCOL of HTML4Utils.tag_payload + | STARTCOLGROUP of HTML4Utils.tag_payload + | ENDCOLGROUP + | STARTDD of HTML4Utils.tag_payload + | ENDDD + | STARTDEL of HTML4Utils.tag_payload + | ENDDEL + | STARTDFN of HTML4Utils.tag_payload + | ENDDFN + | STARTDIR of HTML4Utils.tag_payload + | ENDDIR + | STARTDIV of HTML4Utils.tag_payload + | ENDDIV + | STARTDL of HTML4Utils.tag_payload + | ENDDL + | STARTDT of HTML4Utils.tag_payload + | ENDDT + | STARTEM of HTML4Utils.tag_payload + | ENDEM + | STARTFIELDSET of HTML4Utils.tag_payload + | ENDFIELDSET + | STARTFONT of HTML4Utils.tag_payload + | ENDFONT + | STARTFORM of HTML4Utils.tag_payload + | ENDFORM + | STARTFRAME of HTML4Utils.tag_payload + | STARTFRAMESET of HTML4Utils.tag_payload + | ENDFRAMESET + | STARTH1 of HTML4Utils.tag_payload + | ENDH1 + | STARTH2 of HTML4Utils.tag_payload + | ENDH2 + | STARTH3 of HTML4Utils.tag_payload + | ENDH3 + | STARTH4 of HTML4Utils.tag_payload + | ENDH4 + | STARTH5 of HTML4Utils.tag_payload + | ENDH5 + | STARTH6 of HTML4Utils.tag_payload + | ENDH6 + | STARTHEAD of HTML4Utils.tag_payload + | ENDHEAD + | STARTHR of HTML4Utils.tag_payload + | STARTHTML of HTML4Utils.tag_payload + | ENDHTML + | STARTI of HTML4Utils.tag_payload + | ENDI + | STARTIFRAME of HTML4Utils.tag_payload + | ENDIFRAME + | STARTIMG of HTML4Utils.tag_payload + | STARTINPUT of HTML4Utils.tag_payload + | STARTINS of HTML4Utils.tag_payload + | ENDINS + | STARTISINDEX of HTML4Utils.tag_payload + | STARTKBD of HTML4Utils.tag_payload + | ENDKBD + | STARTLABEL of HTML4Utils.tag_payload + | ENDLABEL + | STARTLEGEND of HTML4Utils.tag_payload + | ENDLEGEND + | STARTLI of HTML4Utils.tag_payload + | ENDLI + | STARTLINK of HTML4Utils.tag_payload + | STARTMAP of HTML4Utils.tag_payload + | ENDMAP + | STARTMENU of HTML4Utils.tag_payload + | ENDMENU + | STARTMETA of HTML4Utils.tag_payload + | STARTNOFRAMES of HTML4Utils.tag_payload + | ENDNOFRAMES + | STARTNOSCRIPT of HTML4Utils.tag_payload + | ENDNOSCRIPT + | STARTOBJECT of HTML4Utils.tag_payload + | ENDOBJECT + | STARTOL of HTML4Utils.tag_payload + | ENDOL + | STARTOPTGROUP of HTML4Utils.tag_payload + | ENDOPTGROUP + | STARTOPTION of HTML4Utils.tag_payload + | ENDOPTION + | STARTP of HTML4Utils.tag_payload + | ENDP + | STARTPARAM of HTML4Utils.tag_payload + | STARTPRE of HTML4Utils.tag_payload + | ENDPRE + | STARTQ of HTML4Utils.tag_payload + | ENDQ + | STARTS of HTML4Utils.tag_payload + | ENDS + | STARTSAMP of HTML4Utils.tag_payload + | ENDSAMP + | STARTSCRIPT of HTML4Utils.tag_payload + | ENDSCRIPT + | STARTSELECT of HTML4Utils.tag_payload + | ENDSELECT + | STARTSMALL of HTML4Utils.tag_payload + | ENDSMALL + | STARTSPAN of HTML4Utils.tag_payload + | ENDSPAN + | STARTSTRIKE of HTML4Utils.tag_payload + | ENDSTRIKE + | STARTSTRONG of HTML4Utils.tag_payload + | ENDSTRONG + | STARTSTYLE of HTML4Utils.tag_payload + | ENDSTYLE + | STARTSUB of HTML4Utils.tag_payload + | ENDSUB + | STARTSUP of HTML4Utils.tag_payload + | ENDSUP + | STARTTABLE of HTML4Utils.tag_payload + | ENDTABLE + | STARTTBODY of HTML4Utils.tag_payload + | ENDTBODY + | STARTTD of HTML4Utils.tag_payload + | ENDTD + | STARTTEXTAREA of HTML4Utils.tag_payload + | ENDTEXTAREA + | STARTTFOOT of HTML4Utils.tag_payload + | ENDTFOOT + | STARTTH of HTML4Utils.tag_payload + | ENDTH + | STARTTHEAD of HTML4Utils.tag_payload + | ENDTHEAD + | STARTTITLE of HTML4Utils.tag_payload + | ENDTITLE + | STARTTR of HTML4Utils.tag_payload + | ENDTR + | STARTTT of HTML4Utils.tag_payload + | ENDTT + | STARTU of HTML4Utils.tag_payload + | ENDU + | STARTUL of HTML4Utils.tag_payload + | ENDUL + | STARTVAR of HTML4Utils.tag_payload + | ENDVAR + | EOF + val allToks = [ + ENDA, ENDABBR, ENDACRONYM, ENDADDRESS, ENDAPPLET, ENDB, ENDBDO, ENDBIG, ENDBLOCKQUOTE, ENDBODY, ENDBUTTON, ENDCAPTION, ENDCENTER, ENDCITE, ENDCODE, ENDCOLGROUP, ENDDD, ENDDEL, ENDDFN, ENDDIR, ENDDIV, ENDDL, ENDDT, ENDEM, ENDFIELDSET, ENDFONT, ENDFORM, ENDFRAMESET, ENDH1, ENDH2, ENDH3, ENDH4, ENDH5, ENDH6, ENDHEAD, ENDHTML, ENDI, ENDIFRAME, ENDINS, ENDKBD, ENDLABEL, ENDLEGEND, ENDLI, ENDMAP, ENDMENU, ENDNOFRAMES, ENDNOSCRIPT, ENDOBJECT, ENDOL, ENDOPTGROUP, ENDOPTION, ENDP, ENDPRE, ENDQ, ENDS, ENDSAMP, ENDSCRIPT, ENDSELECT, ENDSMALL, ENDSPAN, ENDSTRIKE, ENDSTRONG, ENDSTYLE, ENDSUB, ENDSUP, ENDTABLE, ENDTBODY, ENDTD, ENDTEXTAREA, ENDTFOOT, ENDTH, ENDTHEAD, ENDTITLE, ENDTR, ENDTT, ENDU, ENDUL, ENDVAR, EOF + ] + fun toString tok = +(case (tok) + of (OPENTAG(_)) => "OPENTAG" + | (CLOSETAG(_)) => "CLOSETAG" + | (COMMENT(_)) => "COMMENT" + | (PCDATA(_)) => "PCDATA" + | (DOCTYPE(_)) => "DOCTYPE" + | (CHAR_REF(_)) => "CHAR_REF" + | (ENTITY_REF(_)) => "ENTITY_REF" + | (XML_PROCESSING(_)) => "XML_PROCESSING" + | (STARTA(_)) => "STARTA" + | (ENDA) => "ENDA" + | (STARTABBR(_)) => "STARTABBR" + | (ENDABBR) => "ENDABBR" + | (STARTACRONYM(_)) => "STARTACRONYM" + | (ENDACRONYM) => "ENDACRONYM" + | (STARTADDRESS(_)) => "STARTADDRESS" + | (ENDADDRESS) => "ENDADDRESS" + | (STARTAPPLET(_)) => "STARTAPPLET" + | (ENDAPPLET) => "ENDAPPLET" + | (STARTAREA(_)) => "STARTAREA" + | (STARTB(_)) => "STARTB" + | (ENDB) => "ENDB" + | (STARTBASE(_)) => "STARTBASE" + | (STARTBASEFONT(_)) => "STARTBASEFONT" + | (STARTBDO(_)) => "STARTBDO" + | (ENDBDO) => "ENDBDO" + | (STARTBIG(_)) => "STARTBIG" + | (ENDBIG) => "ENDBIG" + | (STARTBLOCKQUOTE(_)) => "STARTBLOCKQUOTE" + | (ENDBLOCKQUOTE) => "ENDBLOCKQUOTE" + | (STARTBODY(_)) => "STARTBODY" + | (ENDBODY) => "ENDBODY" + | (STARTBR(_)) => "STARTBR" + | (STARTBUTTON(_)) => "STARTBUTTON" + | (ENDBUTTON) => "ENDBUTTON" + | (STARTCAPTION(_)) => "STARTCAPTION" + | (ENDCAPTION) => "ENDCAPTION" + | (STARTCENTER(_)) => "STARTCENTER" + | (ENDCENTER) => "ENDCENTER" + | (STARTCITE(_)) => "STARTCITE" + | (ENDCITE) => "ENDCITE" + | (STARTCODE(_)) => "STARTCODE" + | (ENDCODE) => "ENDCODE" + | (STARTCOL(_)) => "STARTCOL" + | (STARTCOLGROUP(_)) => "STARTCOLGROUP" + | (ENDCOLGROUP) => "ENDCOLGROUP" + | (STARTDD(_)) => "STARTDD" + | (ENDDD) => "ENDDD" + | (STARTDEL(_)) => "STARTDEL" + | (ENDDEL) => "ENDDEL" + | (STARTDFN(_)) => "STARTDFN" + | (ENDDFN) => "ENDDFN" + | (STARTDIR(_)) => "STARTDIR" + | (ENDDIR) => "ENDDIR" + | (STARTDIV(_)) => "STARTDIV" + | (ENDDIV) => "ENDDIV" + | (STARTDL(_)) => "STARTDL" + | (ENDDL) => "ENDDL" + | (STARTDT(_)) => "STARTDT" + | (ENDDT) => "ENDDT" + | (STARTEM(_)) => "STARTEM" + | (ENDEM) => "ENDEM" + | (STARTFIELDSET(_)) => "STARTFIELDSET" + | (ENDFIELDSET) => "ENDFIELDSET" + | (STARTFONT(_)) => "STARTFONT" + | (ENDFONT) => "ENDFONT" + | (STARTFORM(_)) => "STARTFORM" + | (ENDFORM) => "ENDFORM" + | (STARTFRAME(_)) => "STARTFRAME" + | (STARTFRAMESET(_)) => "STARTFRAMESET" + | (ENDFRAMESET) => "ENDFRAMESET" + | (STARTH1(_)) => "STARTH1" + | (ENDH1) => "ENDH1" + | (STARTH2(_)) => "STARTH2" + | (ENDH2) => "ENDH2" + | (STARTH3(_)) => "STARTH3" + | (ENDH3) => "ENDH3" + | (STARTH4(_)) => "STARTH4" + | (ENDH4) => "ENDH4" + | (STARTH5(_)) => "STARTH5" + | (ENDH5) => "ENDH5" + | (STARTH6(_)) => "STARTH6" + | (ENDH6) => "ENDH6" + | (STARTHEAD(_)) => "STARTHEAD" + | (ENDHEAD) => "ENDHEAD" + | (STARTHR(_)) => "STARTHR" + | (STARTHTML(_)) => "STARTHTML" + | (ENDHTML) => "ENDHTML" + | (STARTI(_)) => "STARTI" + | (ENDI) => "ENDI" + | (STARTIFRAME(_)) => "STARTIFRAME" + | (ENDIFRAME) => "ENDIFRAME" + | (STARTIMG(_)) => "STARTIMG" + | (STARTINPUT(_)) => "STARTINPUT" + | (STARTINS(_)) => "STARTINS" + | (ENDINS) => "ENDINS" + | (STARTISINDEX(_)) => "STARTISINDEX" + | (STARTKBD(_)) => "STARTKBD" + | (ENDKBD) => "ENDKBD" + | (STARTLABEL(_)) => "STARTLABEL" + | (ENDLABEL) => "ENDLABEL" + | (STARTLEGEND(_)) => "STARTLEGEND" + | (ENDLEGEND) => "ENDLEGEND" + | (STARTLI(_)) => "STARTLI" + | (ENDLI) => "ENDLI" + | (STARTLINK(_)) => "STARTLINK" + | (STARTMAP(_)) => "STARTMAP" + | (ENDMAP) => "ENDMAP" + | (STARTMENU(_)) => "STARTMENU" + | (ENDMENU) => "ENDMENU" + | (STARTMETA(_)) => "STARTMETA" + | (STARTNOFRAMES(_)) => "STARTNOFRAMES" + | (ENDNOFRAMES) => "ENDNOFRAMES" + | (STARTNOSCRIPT(_)) => "STARTNOSCRIPT" + | (ENDNOSCRIPT) => "ENDNOSCRIPT" + | (STARTOBJECT(_)) => "STARTOBJECT" + | (ENDOBJECT) => "ENDOBJECT" + | (STARTOL(_)) => "STARTOL" + | (ENDOL) => "ENDOL" + | (STARTOPTGROUP(_)) => "STARTOPTGROUP" + | (ENDOPTGROUP) => "ENDOPTGROUP" + | (STARTOPTION(_)) => "STARTOPTION" + | (ENDOPTION) => "ENDOPTION" + | (STARTP(_)) => "STARTP" + | (ENDP) => "ENDP" + | (STARTPARAM(_)) => "STARTPARAM" + | (STARTPRE(_)) => "STARTPRE" + | (ENDPRE) => "ENDPRE" + | (STARTQ(_)) => "STARTQ" + | (ENDQ) => "ENDQ" + | (STARTS(_)) => "STARTS" + | (ENDS) => "ENDS" + | (STARTSAMP(_)) => "STARTSAMP" + | (ENDSAMP) => "ENDSAMP" + | (STARTSCRIPT(_)) => "STARTSCRIPT" + | (ENDSCRIPT) => "ENDSCRIPT" + | (STARTSELECT(_)) => "STARTSELECT" + | (ENDSELECT) => "ENDSELECT" + | (STARTSMALL(_)) => "STARTSMALL" + | (ENDSMALL) => "ENDSMALL" + | (STARTSPAN(_)) => "STARTSPAN" + | (ENDSPAN) => "ENDSPAN" + | (STARTSTRIKE(_)) => "STARTSTRIKE" + | (ENDSTRIKE) => "ENDSTRIKE" + | (STARTSTRONG(_)) => "STARTSTRONG" + | (ENDSTRONG) => "ENDSTRONG" + | (STARTSTYLE(_)) => "STARTSTYLE" + | (ENDSTYLE) => "ENDSTYLE" + | (STARTSUB(_)) => "STARTSUB" + | (ENDSUB) => "ENDSUB" + | (STARTSUP(_)) => "STARTSUP" + | (ENDSUP) => "ENDSUP" + | (STARTTABLE(_)) => "STARTTABLE" + | (ENDTABLE) => "ENDTABLE" + | (STARTTBODY(_)) => "STARTTBODY" + | (ENDTBODY) => "ENDTBODY" + | (STARTTD(_)) => "STARTTD" + | (ENDTD) => "ENDTD" + | (STARTTEXTAREA(_)) => "STARTTEXTAREA" + | (ENDTEXTAREA) => "ENDTEXTAREA" + | (STARTTFOOT(_)) => "STARTTFOOT" + | (ENDTFOOT) => "ENDTFOOT" + | (STARTTH(_)) => "STARTTH" + | (ENDTH) => "ENDTH" + | (STARTTHEAD(_)) => "STARTTHEAD" + | (ENDTHEAD) => "ENDTHEAD" + | (STARTTITLE(_)) => "STARTTITLE" + | (ENDTITLE) => "ENDTITLE" + | (STARTTR(_)) => "STARTTR" + | (ENDTR) => "ENDTR" + | (STARTTT(_)) => "STARTTT" + | (ENDTT) => "ENDTT" + | (STARTU(_)) => "STARTU" + | (ENDU) => "ENDU" + | (STARTUL(_)) => "STARTUL" + | (ENDUL) => "ENDUL" + | (STARTVAR(_)) => "STARTVAR" + | (ENDVAR) => "ENDVAR" + | (EOF) => "EOF" +(* end case *)) + fun isKW tok = +(case (tok) + of (OPENTAG(_)) => false + | (CLOSETAG(_)) => false + | (COMMENT(_)) => false + | (PCDATA(_)) => false + | (DOCTYPE(_)) => false + | (CHAR_REF(_)) => false + | (ENTITY_REF(_)) => false + | (XML_PROCESSING(_)) => false + | (STARTA(_)) => false + | (ENDA) => false + | (STARTABBR(_)) => false + | (ENDABBR) => false + | (STARTACRONYM(_)) => false + | (ENDACRONYM) => false + | (STARTADDRESS(_)) => false + | (ENDADDRESS) => false + | (STARTAPPLET(_)) => false + | (ENDAPPLET) => false + | (STARTAREA(_)) => false + | (STARTB(_)) => false + | (ENDB) => false + | (STARTBASE(_)) => false + | (STARTBASEFONT(_)) => false + | (STARTBDO(_)) => false + | (ENDBDO) => false + | (STARTBIG(_)) => false + | (ENDBIG) => false + | (STARTBLOCKQUOTE(_)) => false + | (ENDBLOCKQUOTE) => false + | (STARTBODY(_)) => false + | (ENDBODY) => false + | (STARTBR(_)) => false + | (STARTBUTTON(_)) => false + | (ENDBUTTON) => false + | (STARTCAPTION(_)) => false + | (ENDCAPTION) => false + | (STARTCENTER(_)) => false + | (ENDCENTER) => false + | (STARTCITE(_)) => false + | (ENDCITE) => false + | (STARTCODE(_)) => false + | (ENDCODE) => false + | (STARTCOL(_)) => false + | (STARTCOLGROUP(_)) => false + | (ENDCOLGROUP) => false + | (STARTDD(_)) => false + | (ENDDD) => false + | (STARTDEL(_)) => false + | (ENDDEL) => false + | (STARTDFN(_)) => false + | (ENDDFN) => false + | (STARTDIR(_)) => false + | (ENDDIR) => false + | (STARTDIV(_)) => false + | (ENDDIV) => false + | (STARTDL(_)) => false + | (ENDDL) => false + | (STARTDT(_)) => false + | (ENDDT) => false + | (STARTEM(_)) => false + | (ENDEM) => false + | (STARTFIELDSET(_)) => false + | (ENDFIELDSET) => false + | (STARTFONT(_)) => false + | (ENDFONT) => false + | (STARTFORM(_)) => false + | (ENDFORM) => false + | (STARTFRAME(_)) => false + | (STARTFRAMESET(_)) => false + | (ENDFRAMESET) => false + | (STARTH1(_)) => false + | (ENDH1) => false + | (STARTH2(_)) => false + | (ENDH2) => false + | (STARTH3(_)) => false + | (ENDH3) => false + | (STARTH4(_)) => false + | (ENDH4) => false + | (STARTH5(_)) => false + | (ENDH5) => false + | (STARTH6(_)) => false + | (ENDH6) => false + | (STARTHEAD(_)) => false + | (ENDHEAD) => false + | (STARTHR(_)) => false + | (STARTHTML(_)) => false + | (ENDHTML) => false + | (STARTI(_)) => false + | (ENDI) => false + | (STARTIFRAME(_)) => false + | (ENDIFRAME) => false + | (STARTIMG(_)) => false + | (STARTINPUT(_)) => false + | (STARTINS(_)) => false + | (ENDINS) => false + | (STARTISINDEX(_)) => false + | (STARTKBD(_)) => false + | (ENDKBD) => false + | (STARTLABEL(_)) => false + | (ENDLABEL) => false + | (STARTLEGEND(_)) => false + | (ENDLEGEND) => false + | (STARTLI(_)) => false + | (ENDLI) => false + | (STARTLINK(_)) => false + | (STARTMAP(_)) => false + | (ENDMAP) => false + | (STARTMENU(_)) => false + | (ENDMENU) => false + | (STARTMETA(_)) => false + | (STARTNOFRAMES(_)) => false + | (ENDNOFRAMES) => false + | (STARTNOSCRIPT(_)) => false + | (ENDNOSCRIPT) => false + | (STARTOBJECT(_)) => false + | (ENDOBJECT) => false + | (STARTOL(_)) => false + | (ENDOL) => false + | (STARTOPTGROUP(_)) => false + | (ENDOPTGROUP) => false + | (STARTOPTION(_)) => false + | (ENDOPTION) => false + | (STARTP(_)) => false + | (ENDP) => false + | (STARTPARAM(_)) => false + | (STARTPRE(_)) => false + | (ENDPRE) => false + | (STARTQ(_)) => false + | (ENDQ) => false + | (STARTS(_)) => false + | (ENDS) => false + | (STARTSAMP(_)) => false + | (ENDSAMP) => false + | (STARTSCRIPT(_)) => false + | (ENDSCRIPT) => false + | (STARTSELECT(_)) => false + | (ENDSELECT) => false + | (STARTSMALL(_)) => false + | (ENDSMALL) => false + | (STARTSPAN(_)) => false + | (ENDSPAN) => false + | (STARTSTRIKE(_)) => false + | (ENDSTRIKE) => false + | (STARTSTRONG(_)) => false + | (ENDSTRONG) => false + | (STARTSTYLE(_)) => false + | (ENDSTYLE) => false + | (STARTSUB(_)) => false + | (ENDSUB) => false + | (STARTSUP(_)) => false + | (ENDSUP) => false + | (STARTTABLE(_)) => false + | (ENDTABLE) => false + | (STARTTBODY(_)) => false + | (ENDTBODY) => false + | (STARTTD(_)) => false + | (ENDTD) => false + | (STARTTEXTAREA(_)) => false + | (ENDTEXTAREA) => false + | (STARTTFOOT(_)) => false + | (ENDTFOOT) => false + | (STARTTH(_)) => false + | (ENDTH) => false + | (STARTTHEAD(_)) => false + | (ENDTHEAD) => false + | (STARTTITLE(_)) => false + | (ENDTITLE) => false + | (STARTTR(_)) => false + | (ENDTR) => false + | (STARTTT(_)) => false + | (ENDTT) => false + | (STARTU(_)) => false + | (ENDU) => false + | (STARTUL(_)) => false + | (ENDUL) => false + | (STARTVAR(_)) => false + | (ENDVAR) => false + | (EOF) => false +(* end case *)) + fun isEOF EOF = true + | isEOF _ = false + end (* HTML4Tokens *) + +functor HTML4ParseFn (Lex : ANTLR_LEXER) = struct + + local + structure Tok = +HTML4Tokens + structure UserCode = + struct + + +open HTML4Utils + +fun optToList NONE = [] + | optToList (SOME thing) = [thing] + +fun optListToList NONE = [] + | optListToList (SOME thing) = thing + + +fun document_PROD_1_SUBRULE_1_PROD_1_ACT (DOCTYPE, cdata_opt, DOCTYPE_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.DOCTYPE DOCTYPE)) :: cdata_opt) +fun document_PROD_1_SUBRULE_2_PROD_1_ACT (SR1, cdata_opt, STARTHTML, SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTHTML_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.STARTHTML STARTHTML)) :: cdata_opt) +fun document_PROD_1_SUBRULE_4_PROD_1_ACT (head, SR1, SR2, SR3, cdata_opt, ENDHTML, head_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), SR3_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDHTML_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.ENDHTML)) :: cdata_opt) +fun document_PROD_1_ACT (head, SR1, SR2, SR3, SR4, cdata_opt, head_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), SR3_SPAN : (Lex.pos * Lex.pos), SR4_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "DOCUMENT", + cdata_opt @ (optListToList SR1) @ (optListToList SR2) @ + (head :: SR3 :: (optListToList SR4)))) +fun head_PROD_1_SUBRULE_1_PROD_1_ACT (cdata_opt, STARTHEAD, cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTHEAD_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.STARTHEAD STARTHEAD)) :: cdata_opt) +fun head_PROD_1_SUBRULE_2_PROD_1_ACT (SR1, cdata_opt, head_content, SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), head_content_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (head_content :: cdata_opt) +fun head_PROD_1_SUBRULE_3_PROD_1_ACT (SR1, SR2, cdata_opt, ENDHEAD, SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDHEAD_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.ENDHEAD)) :: cdata_opt) +fun head_PROD_1_ACT (SR1, SR2, SR3, SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), SR3_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "HEAD", + (optListToList SR1) @ (foldr op@ [] SR2) @ (optListToList SR3))) +fun title_PROD_1_ACT (STARTTITLE, cdata_opt, ENDTITLE, STARTTITLE_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDTITLE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "TITLE", + (Lf (Tok.STARTTITLE STARTTITLE)) :: + (cdata_opt @ [Lf (Tok.ENDTITLE)]))) +fun base_PROD_1_ACT (STARTBASE, STARTBASE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "BASE", [Lf (Tok.STARTBASE STARTBASE)])) +fun script_PROD_1_ACT (cdata_opt, STARTSCRIPT, ENDSCRIPT, cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTSCRIPT_SPAN : (Lex.pos * Lex.pos), ENDSCRIPT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "SCRIPT", + (Lf (Tok.STARTSCRIPT STARTSCRIPT)) :: + (cdata_opt @ [Lf (Tok.ENDSCRIPT)]))) +fun style_PROD_1_ACT (cdata_opt, STARTSTYLE, ENDSTYLE, cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTSTYLE_SPAN : (Lex.pos * Lex.pos), ENDSTYLE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "STYLE", + (Lf (Tok.STARTSTYLE STARTSTYLE)) :: + (cdata_opt @ [Lf (Tok.ENDSTYLE)]))) +fun meta_PROD_1_ACT (STARTMETA, STARTMETA_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "META", [Lf (Tok.STARTMETA STARTMETA)])) +fun link_PROD_1_ACT (STARTLINK, STARTLINK_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "LINK", [Lf (Tok.STARTLINK STARTLINK)])) +fun object_PROD_1_ACT (SR, STARTOBJECT, ENDOBJECT, SR_SPAN : (Lex.pos * Lex.pos), STARTOBJECT_SPAN : (Lex.pos * Lex.pos), ENDOBJECT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "OBJECT", + (Lf (Tok.STARTOBJECT STARTOBJECT)) :: + (SR @ [Lf (Tok.ENDOBJECT)]))) +fun param_PROD_1_ACT (STARTPARAM, STARTPARAM_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "PARAM", [(Lf (Tok.STARTPARAM STARTPARAM))])) +fun body_PROD_1_ACT (STARTBODY, body_rest, STARTBODY_SPAN : (Lex.pos * Lex.pos), body_rest_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "BODY", + (Lf (Tok.STARTBODY STARTBODY)) :: body_rest)) +fun body_PROD_2_ACT (SR, body_rest, SR_SPAN : (Lex.pos * Lex.pos), body_rest_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "BODY", SR :: body_rest)) +fun body_rest_PROD_1_SUBRULE_2_PROD_1_ACT (ENDBODY, SR1, cdata_opt, ENDBODY_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.ENDBODY)) :: cdata_opt) +fun body_rest_PROD_1_ACT (SR1, SR2, SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (SR1 @ (optListToList SR2)) +fun a_PROD_1_ACT (inline, STARTA, ENDA, inline_SPAN : (Lex.pos * Lex.pos), STARTA_SPAN : (Lex.pos * Lex.pos), ENDA_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "A", + (Lf (Tok.STARTA STARTA)) :: (inline @ [Lf (Tok.ENDA)]))) +fun abbr_PROD_1_ACT (inline, ENDABBR, STARTABBR, inline_SPAN : (Lex.pos * Lex.pos), ENDABBR_SPAN : (Lex.pos * Lex.pos), STARTABBR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "ABBR", + (Lf (Tok.STARTABBR STARTABBR)) :: + (inline @ [Lf (Tok.ENDABBR)]))) +fun acronym_PROD_1_ACT (inline, STARTACRONYM, ENDACRONYM, inline_SPAN : (Lex.pos * Lex.pos), STARTACRONYM_SPAN : (Lex.pos * Lex.pos), ENDACRONYM_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "ACRONYM", + (Lf (Tok.STARTACRONYM STARTACRONYM)) :: + (inline @ [Lf (Tok.ENDACRONYM)]))) +fun address_PROD_1_ACT (inline, STARTADDRESS, ENDADDRESS, inline_SPAN : (Lex.pos * Lex.pos), STARTADDRESS_SPAN : (Lex.pos * Lex.pos), ENDADDRESS_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "ADDRESS", + (Lf (Tok.STARTADDRESS STARTADDRESS)) :: + (inline @ [Lf (Tok.ENDADDRESS)]))) +fun applet_PROD_1_ACT (SR, ENDAPPLET, STARTAPPLET, SR_SPAN : (Lex.pos * Lex.pos), ENDAPPLET_SPAN : (Lex.pos * Lex.pos), STARTAPPLET_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "APPLET", + (Lf (Tok.STARTAPPLET STARTAPPLET)) :: + (SR @ [Lf (Tok.ENDAPPLET)]))) +fun area_PROD_1_ACT (STARTAREA, STARTAREA_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "AREA", [Lf (Tok.STARTAREA STARTAREA)])) +fun b_PROD_1_ACT (inline, STARTB, ENDB, inline_SPAN : (Lex.pos * Lex.pos), STARTB_SPAN : (Lex.pos * Lex.pos), ENDB_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "B", + (Lf (Tok.STARTB STARTB)) :: (inline @ [Lf (Tok.ENDB)]))) +fun basefont_PROD_1_ACT (STARTBASEFONT, STARTBASEFONT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "BASEFONT", [Lf (Tok.STARTBASEFONT STARTBASEFONT)])) +fun bdo_PROD_1_ACT (inline, ENDBDO, STARTBDO, inline_SPAN : (Lex.pos * Lex.pos), ENDBDO_SPAN : (Lex.pos * Lex.pos), STARTBDO_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "BDO", + (Lf (Tok.STARTBDO STARTBDO)) :: + (inline @ [Lf (Tok.ENDBDO)]))) +fun big_PROD_1_ACT (inline, ENDBIG, STARTBIG, inline_SPAN : (Lex.pos * Lex.pos), ENDBIG_SPAN : (Lex.pos * Lex.pos), STARTBIG_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "BIG", + (Lf (Tok.STARTBIG STARTBIG)) :: + (inline @ [Lf (Tok.ENDBIG)]))) +fun blockquote_PROD_1_ACT (SR, STARTBLOCKQUOTE, ENDBLOCKQUOTE, SR_SPAN : (Lex.pos * Lex.pos), STARTBLOCKQUOTE_SPAN : (Lex.pos * Lex.pos), ENDBLOCKQUOTE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "BLOCKQUOTE", + (Lf (Tok.STARTBLOCKQUOTE STARTBLOCKQUOTE)) :: + (SR @ [Lf (Tok.ENDBLOCKQUOTE)]))) +fun br_PROD_1_ACT (STARTBR, STARTBR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "BR", [Lf (Tok.STARTBR STARTBR)])) +fun button_PROD_1_ACT (STARTBUTTON, flow, ENDBUTTON, STARTBUTTON_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), ENDBUTTON_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "BUTTON", + (Lf (Tok.STARTBUTTON STARTBUTTON)) :: + (flow @ [Lf (Tok.ENDBUTTON)]))) +fun caption_PROD_1_ACT (inline, STARTCAPTION, ENDCAPTION, inline_SPAN : (Lex.pos * Lex.pos), STARTCAPTION_SPAN : (Lex.pos * Lex.pos), ENDCAPTION_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "CAPTION", + (Lf (Tok.STARTCAPTION STARTCAPTION)) :: + (inline @ [Lf (Tok.ENDCAPTION)]))) +fun center_PROD_1_ACT (ENDCENTER, flow, STARTCENTER, ENDCENTER_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), STARTCENTER_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "CENTER", + (Lf (Tok.STARTCENTER STARTCENTER)) :: + (flow @ [Lf (Tok.ENDCENTER)]))) +fun cite_PROD_1_ACT (inline, ENDCITE, STARTCITE, inline_SPAN : (Lex.pos * Lex.pos), ENDCITE_SPAN : (Lex.pos * Lex.pos), STARTCITE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "CITE", + (Lf (Tok.STARTCITE STARTCITE)) :: + (inline @ [Lf (Tok.ENDCITE)]))) +fun code_PROD_1_ACT (inline, ENDCODE, STARTCODE, inline_SPAN : (Lex.pos * Lex.pos), ENDCODE_SPAN : (Lex.pos * Lex.pos), STARTCODE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "CODE", + (Lf (Tok.STARTCODE STARTCODE)) :: + (inline @ [Lf (Tok.ENDCODE)]))) +fun col_PROD_1_ACT (STARTCOL, STARTCOL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "COL", [Lf (Tok.STARTCOL STARTCOL)])) +fun colgroup_PROD_1_SUBRULE_1_PROD_1_ACT (STARTCOLGROUP, cdata_opt, col, STARTCOLGROUP_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), col_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (col :: cdata_opt) +fun colgroup_PROD_1_SUBRULE_2_PROD_1_ACT (STARTCOLGROUP, SR1, cdata_opt, ENDCOLGROUP, STARTCOLGROUP_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDCOLGROUP_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Lf (Tok.ENDCOLGROUP)) +fun colgroup_PROD_1_ACT (STARTCOLGROUP, SR1, SR2, cdata_opt, STARTCOLGROUP_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "COLGROUP", + (Lf (Tok.STARTCOLGROUP STARTCOLGROUP)) :: + (cdata_opt @ (foldr op@ [] SR1) @ (optToList SR2)))) +fun dd_PROD_1_SUBRULE_2_PROD_1_ACT (ENDDD, STARTDD, flow, ENDDD_SPAN : (Lex.pos * Lex.pos), STARTDD_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Lf (Tok.ENDDD)) +fun dd_PROD_1_ACT (SR, STARTDD, flow, SR_SPAN : (Lex.pos * Lex.pos), STARTDD_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "DD", + (Lf (Tok.STARTDD STARTDD)) :: (flow @ (optToList SR)))) +fun del_PROD_1_ACT (flow, ENDDEL, STARTDEL, flow_SPAN : (Lex.pos * Lex.pos), ENDDEL_SPAN : (Lex.pos * Lex.pos), STARTDEL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "DEL", + (Lf (Tok.STARTDEL STARTDEL)) :: + (flow @ [Lf (Tok.ENDDEL)]))) +fun dfn_PROD_1_ACT (inline, ENDDFN, STARTDFN, inline_SPAN : (Lex.pos * Lex.pos), ENDDFN_SPAN : (Lex.pos * Lex.pos), STARTDFN_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "DFN", + (Lf (Tok.STARTDFN STARTDFN)) :: + (inline @ [Lf (Tok.ENDDFN)]))) +fun dir_PROD_1_ACT (li, cdata_opt, ENDDIR, STARTDIR, li_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDDIR_SPAN : (Lex.pos * Lex.pos), STARTDIR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "DIR", + (Lf (Tok.STARTDIR STARTDIR)) :: + (cdata_opt @ li @ [Lf (Tok.ENDDIR)]))) +fun div_PROD_1_ACT (flow, ENDDIV, STARTDIV, flow_SPAN : (Lex.pos * Lex.pos), ENDDIV_SPAN : (Lex.pos * Lex.pos), STARTDIV_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "DIV", + (Lf (Tok.STARTDIV STARTDIV)) :: + (flow @ [Lf (Tok.ENDDIV)]))) +fun dl_PROD_1_ACT (ENDDL, SR, cdata_opt, STARTDL, ENDDL_SPAN : (Lex.pos * Lex.pos), SR_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTDL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "DL", + (Lf (Tok.STARTDL STARTDL)) :: + (cdata_opt @ SR @ [Lf (Tok.ENDDL)]))) +fun dt_PROD_1_SUBRULE_2_PROD_1_ACT (ENDDT, inline, STARTDT, ENDDT_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTDT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Lf (Tok.ENDDT)) +fun dt_PROD_1_ACT (SR, inline, STARTDT, SR_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTDT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "DT", + (Lf (Tok.STARTDT STARTDT)) :: (inline @ (optToList SR)))) +fun em_PROD_1_ACT (ENDEM, inline, STARTEM, ENDEM_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTEM_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "EM", + (Lf (Tok.STARTEM STARTEM)) :: (inline @ [Lf (Tok.ENDEM)]))) +fun fieldset_PROD_1_ACT (cdata_opt, legend, flow, ENDFIELDSET, STARTFIELDSET, cdata_opt_SPAN : (Lex.pos * Lex.pos), legend_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), ENDFIELDSET_SPAN : (Lex.pos * Lex.pos), STARTFIELDSET_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "FIELDSET", + (Lf (Tok.STARTFIELDSET STARTFIELDSET)) :: + (cdata_opt @ [legend] @ flow @ + [Lf (Tok.ENDFIELDSET)]))) +fun font_PROD_1_ACT (inline, ENDFONT, STARTFONT, inline_SPAN : (Lex.pos * Lex.pos), ENDFONT_SPAN : (Lex.pos * Lex.pos), STARTFONT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "FONT", + (Lf (Tok.STARTFONT STARTFONT)) :: + (inline @ [Lf (Tok.ENDFONT)]))) +fun form_PROD_1_ACT (SR, ENDFORM, STARTFORM, SR_SPAN : (Lex.pos * Lex.pos), ENDFORM_SPAN : (Lex.pos * Lex.pos), STARTFORM_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "FORM", + (Lf (Tok.STARTFORM STARTFORM)) :: + (SR @ [Lf (Tok.ENDFORM)]))) +fun frame_PROD_1_ACT (STARTFRAME, STARTFRAME_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "FRAME", [Lf (Tok.STARTFRAME STARTFRAME)])) +fun frameset_PROD_1_SUBRULE_2_PROD_1_ACT (SR1, cdata_opt, STARTFRAMESET, noframes, SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTFRAMESET_SPAN : (Lex.pos * Lex.pos), noframes_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (noframes::cdata_opt) +fun frameset_PROD_1_ACT (SR1, SR2, STARTFRAMESET, ENDFRAMESET, SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), STARTFRAMESET_SPAN : (Lex.pos * Lex.pos), ENDFRAMESET_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "FRAMESET", + (Lf (Tok.STARTFRAMESET STARTFRAMESET)) :: + (SR1 @ (optListToList SR2) @ [Lf (Tok.ENDFRAMESET)]))) +fun h1_PROD_1_ACT (ENDH1, inline, STARTH1, ENDH1_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH1_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "H1", + (Lf (Tok.STARTH1 STARTH1)) :: (inline @ [Lf (Tok.ENDH1)]))) +fun h2_PROD_1_ACT (ENDH2, inline, STARTH2, ENDH2_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH2_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "H2", + (Lf (Tok.STARTH2 STARTH2)) :: (inline @ [Lf (Tok.ENDH2)]))) +fun h3_PROD_1_ACT (ENDH3, inline, STARTH3, ENDH3_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH3_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "H3", + (Lf (Tok.STARTH3 STARTH3)) :: (inline @ [Lf (Tok.ENDH3)]))) +fun h4_PROD_1_ACT (ENDH4, inline, STARTH4, ENDH4_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH4_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "H4", + (Lf (Tok.STARTH4 STARTH4)) :: (inline @ [Lf (Tok.ENDH4)]))) +fun h5_PROD_1_ACT (ENDH5, inline, STARTH5, ENDH5_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH5_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "H5", + (Lf (Tok.STARTH5 STARTH5)) :: (inline @ [Lf (Tok.ENDH5)]))) +fun h6_PROD_1_ACT (ENDH6, inline, STARTH6, ENDH6_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH6_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "H6", + (Lf (Tok.STARTH6 STARTH6)) :: (inline @ [Lf (Tok.ENDH6)]))) +fun hr_PROD_1_ACT (STARTHR, STARTHR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "HR", [Lf (Tok.STARTHR STARTHR)])) +fun i_PROD_1_ACT (inline, STARTI, ENDI, inline_SPAN : (Lex.pos * Lex.pos), STARTI_SPAN : (Lex.pos * Lex.pos), ENDI_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "I", + (Lf (Tok.STARTI STARTI)) :: + (inline @ [Lf (Tok.ENDI)]))) +fun iframe_PROD_1_ACT (ENDIFRAME, STARTIFRAME, flow, ENDIFRAME_SPAN : (Lex.pos * Lex.pos), STARTIFRAME_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "IFRAME", + (Lf (Tok.STARTIFRAME STARTIFRAME)) :: + (flow @ [Lf (Tok.ENDIFRAME)]))) +fun img_PROD_1_ACT (STARTIMG, STARTIMG_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "IMG", [Lf (Tok.STARTIMG STARTIMG)])) +fun input_PROD_1_ACT (STARTINPUT, STARTINPUT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "INPUT", [Lf (Tok.STARTINPUT STARTINPUT)])) +fun ins_PROD_1_ACT (STARTINS, flow, ENDINS, STARTINS_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), ENDINS_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "INS", + (Lf (Tok.STARTINS STARTINS)) :: + (flow @ [Lf (Tok.ENDINS)]))) +fun isindex_PROD_1_ACT (STARTISINDEX, STARTISINDEX_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "ISINDEX", [Lf (Tok.STARTISINDEX STARTISINDEX)])) +fun kbd_PROD_1_ACT (inline, STARTKBD, ENDKBD, inline_SPAN : (Lex.pos * Lex.pos), STARTKBD_SPAN : (Lex.pos * Lex.pos), ENDKBD_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "KBD", + (Lf (Tok.STARTKBD STARTKBD)) :: + (inline @ [Lf (Tok.ENDKBD)]))) +fun label_PROD_1_ACT (inline, ENDLABEL, STARTLABEL, inline_SPAN : (Lex.pos * Lex.pos), ENDLABEL_SPAN : (Lex.pos * Lex.pos), STARTLABEL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "LABEL", + (Lf (Tok.STARTLABEL STARTLABEL)) :: + (inline @ [Lf (Tok.ENDLABEL)]))) +fun legend_PROD_1_ACT (inline, ENDLEGEND, STARTLEGEND, inline_SPAN : (Lex.pos * Lex.pos), ENDLEGEND_SPAN : (Lex.pos * Lex.pos), STARTLEGEND_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "LEGEND", + (Lf (Tok.STARTLEGEND STARTLEGEND)) :: + (inline @ [Lf (Tok.ENDLEGEND)]))) +fun li_PROD_1_SUBRULE_2_PROD_1_ACT (ENDLI, STARTLI, flow, ENDLI_SPAN : (Lex.pos * Lex.pos), STARTLI_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Lf (Tok.ENDLI)) +fun li_PROD_1_ACT (SR, STARTLI, flow, SR_SPAN : (Lex.pos * Lex.pos), STARTLI_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "LI", + (Lf (Tok.STARTLI STARTLI)) :: (flow @ (optToList SR)))) +fun map_PROD_1_ACT (SR, STARTMAP, ENDMAP, SR_SPAN : (Lex.pos * Lex.pos), STARTMAP_SPAN : (Lex.pos * Lex.pos), ENDMAP_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "MAP", + (Lf (Tok.STARTMAP STARTMAP)) :: (SR @ [Lf (Tok.ENDMAP)]))) +fun menu_PROD_1_ACT (li, cdata_opt, STARTMENU, ENDMENU, li_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTMENU_SPAN : (Lex.pos * Lex.pos), ENDMENU_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "MENU", + (Lf (Tok.STARTMENU STARTMENU)) :: + (cdata_opt @ li @ [Lf (Tok.ENDMENU)]))) +fun noframes_PROD_1_ACT (STARTNOFRAMES, ENDNOFRAMES, body, STARTNOFRAMES_SPAN : (Lex.pos * Lex.pos), ENDNOFRAMES_SPAN : (Lex.pos * Lex.pos), body_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "NOFRAMES", + [Lf (Tok.STARTNOFRAMES STARTNOFRAMES), body, + Lf (Tok.ENDNOFRAMES)])) +fun noscript_PROD_1_ACT (SR, ENDNOSCRIPT, STARTNOSCRIPT, SR_SPAN : (Lex.pos * Lex.pos), ENDNOSCRIPT_SPAN : (Lex.pos * Lex.pos), STARTNOSCRIPT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "NOSCRIPT", + (Lf (Tok.STARTNOSCRIPT STARTNOSCRIPT)) :: + (SR @ [Lf (Tok.ENDNOSCRIPT)]))) +fun ol_PROD_1_ACT (ENDOL, li, cdata_opt, STARTOL, ENDOL_SPAN : (Lex.pos * Lex.pos), li_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTOL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "OL", + (Lf (Tok.STARTOL STARTOL)) :: + (cdata_opt @ li @ [Lf (Tok.ENDOL)]))) +fun optgroup_PROD_1_ACT (option, STARTOPTGROUP, ENDOPTGROUP, cdata_opt1, cdata_opt2, option_SPAN : (Lex.pos * Lex.pos), STARTOPTGROUP_SPAN : (Lex.pos * Lex.pos), ENDOPTGROUP_SPAN : (Lex.pos * Lex.pos), cdata_opt1_SPAN : (Lex.pos * Lex.pos), cdata_opt2_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "OPTGROUP", + (Lf (Tok.STARTOPTGROUP STARTOPTGROUP)) :: + (cdata_opt1 @ option @ ((Lf (Tok.ENDOPTGROUP)) + :: cdata_opt2)))) +fun option_PROD_1_SUBRULE_1_PROD_1_ACT (STARTOPTION, cdata_opt, ENDOPTION, STARTOPTION_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDOPTION_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.ENDOPTION)) :: + cdata_opt) +fun option_PROD_1_ACT (SR, STARTOPTION, cdata_opt, SR_SPAN : (Lex.pos * Lex.pos), STARTOPTION_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "OPTION", + (Lf (Tok.STARTOPTION STARTOPTION)) :: + (cdata_opt @ (optListToList SR)))) +fun p_PROD_1_ACT (inline, STARTP, ENDP, inline_SPAN : (Lex.pos * Lex.pos), STARTP_SPAN : (Lex.pos * Lex.pos), ENDP_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "P", + (Lf (Tok.STARTP STARTP)) :: (inline @ [Lf (Tok.ENDP)]))) +fun pre_PROD_1_ACT (inline, ENDPRE, STARTPRE, inline_SPAN : (Lex.pos * Lex.pos), ENDPRE_SPAN : (Lex.pos * Lex.pos), STARTPRE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "PRE", + (Lf (Tok.STARTPRE STARTPRE)) :: + (inline @ [Lf (Tok.ENDPRE)]))) +fun q_PROD_1_ACT (inline, STARTQ, ENDQ, inline_SPAN : (Lex.pos * Lex.pos), STARTQ_SPAN : (Lex.pos * Lex.pos), ENDQ_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "Q", + (Lf (Tok.STARTQ STARTQ)) :: (inline @ [Lf (Tok.ENDQ)]))) +fun s_PROD_1_ACT (inline, STARTS, ENDS, inline_SPAN : (Lex.pos * Lex.pos), STARTS_SPAN : (Lex.pos * Lex.pos), ENDS_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "S", + (Lf (Tok.STARTS STARTS)) :: (inline @ [Lf (Tok.ENDS)]))) +fun samp_PROD_1_ACT (inline, STARTSAMP, ENDSAMP, inline_SPAN : (Lex.pos * Lex.pos), STARTSAMP_SPAN : (Lex.pos * Lex.pos), ENDSAMP_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "SAMP", + (Lf (Tok.STARTSAMP STARTSAMP)) :: + (inline @ [Lf (Tok.ENDSAMP)]))) +fun select_PROD_1_ACT (STARTSELECT, SR, cdata_opt, ENDSELECT, STARTSELECT_SPAN : (Lex.pos * Lex.pos), SR_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDSELECT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "SELECT", + (Lf (Tok.STARTSELECT STARTSELECT)) :: + (cdata_opt @ SR @ [Lf (Tok.ENDSELECT)]))) +fun small_PROD_1_ACT (inline, ENDSMALL, STARTSMALL, inline_SPAN : (Lex.pos * Lex.pos), ENDSMALL_SPAN : (Lex.pos * Lex.pos), STARTSMALL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "SMALL", + (Lf (Tok.STARTSMALL STARTSMALL)) :: + (inline @ [Lf (Tok.ENDSMALL)]))) +fun span_PROD_1_ACT (inline, STARTSPAN, ENDSPAN, inline_SPAN : (Lex.pos * Lex.pos), STARTSPAN_SPAN : (Lex.pos * Lex.pos), ENDSPAN_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "SPAN", + (Lf (Tok.STARTSPAN STARTSPAN)) :: + (inline @ [Lf (Tok.ENDSPAN)]))) +fun strike_PROD_1_ACT (inline, STARTSTRIKE, ENDSTRIKE, inline_SPAN : (Lex.pos * Lex.pos), STARTSTRIKE_SPAN : (Lex.pos * Lex.pos), ENDSTRIKE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "STRIKE", + (Lf (Tok.STARTSTRIKE STARTSTRIKE)) :: + (inline @ [Lf (Tok.ENDSTRIKE)]))) +fun strong_PROD_1_ACT (inline, STARTSTRONG, ENDSTRONG, inline_SPAN : (Lex.pos * Lex.pos), STARTSTRONG_SPAN : (Lex.pos * Lex.pos), ENDSTRONG_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "STRONG", + (Lf (Tok.STARTSTRONG STARTSTRONG)) :: + (inline @ [Lf (Tok.ENDSTRONG)]))) +fun sub_PROD_1_ACT (inline, ENDSUB, STARTSUB, inline_SPAN : (Lex.pos * Lex.pos), ENDSUB_SPAN : (Lex.pos * Lex.pos), STARTSUB_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "SUB", + (Lf (Tok.STARTSUB STARTSUB)) :: + (inline @ [Lf (Tok.ENDSUB)]))) +fun sup_PROD_1_ACT (inline, ENDSUP, STARTSUP, inline_SPAN : (Lex.pos * Lex.pos), ENDSUP_SPAN : (Lex.pos * Lex.pos), STARTSUP_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "SUP", + (Lf (Tok.STARTSUP STARTSUP)) :: + (inline @ [Lf (Tok.ENDSUP)]))) +fun table_PROD_1_SUBRULE_1_PROD_1_ACT (STARTTABLE, cdata_opt, caption, STARTTABLE_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), caption_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (caption :: cdata_opt) +fun table_PROD_1_ACT (SR, STARTTABLE, cdata_opt, table_content, ENDTABLE, col_or_colgroups, SR_SPAN : (Lex.pos * Lex.pos), STARTTABLE_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), table_content_SPAN : (Lex.pos * Lex.pos), ENDTABLE_SPAN : (Lex.pos * Lex.pos), col_or_colgroups_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "TABLE", + (Lf (Tok.STARTTABLE STARTTABLE)) :: + (cdata_opt @ (optListToList SR) @ col_or_colgroups @ + table_content @ [Lf (Tok.ENDTABLE)]))) +fun table_content_PROD_1_ACT (tbodies, tfoot, thead, tbodies_SPAN : (Lex.pos * Lex.pos), tfoot_SPAN : (Lex.pos * Lex.pos), thead_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (thead :: ((optToList tfoot)) @ tbodies) +fun table_content_PROD_2_ACT (tbodies, tfoot, tbodies_SPAN : (Lex.pos * Lex.pos), tfoot_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (tfoot :: tbodies) +fun col_or_colgroups_PROD_1_ACT (FULL_SPAN : (Lex.pos * Lex.pos)) = + ([]) +fun col_or_colgroups_PROD_2_SUBRULE_1_PROD_1_ACT (cdata_opt, col, cdata_opt_SPAN : (Lex.pos * Lex.pos), col_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (col :: cdata_opt) +fun col_or_colgroups_PROD_2_ACT (SR, SR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (foldr op@ [] SR) +fun tbodies_nostart_PROD_1_SUBRULE_1_PROD_1_ACT (cdata_opt, STARTTBODY, cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTBODY_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.STARTTBODY STARTTBODY)) :: cdata_opt) +fun tbodies_nostart_PROD_1_ACT (tr, SR, tbodies_rest, tr_SPAN : (Lex.pos * Lex.pos), SR_SPAN : (Lex.pos * Lex.pos), tbodies_rest_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (let val (tbody_rest, tbody_peers) = + case tbodies_rest of + NONE => ([], []) + | SOME tbodies_tup => tbodies_tup + in (Nd (Atom.atom "TBODIES_NOSTART", + (optListToList SR) @ tr @ tbody_rest)) :: + tbody_peers end) +fun tbodies_PROD_1_ACT (tr, cdata_opt, STARTTBODY, tbodies_rest, tr_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTBODY_SPAN : (Lex.pos * Lex.pos), tbodies_rest_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (let val (tbody_rest, tbody_peers) = tbodies_rest + in (Nd (Atom.atom "TBODIES", + (Lf (Tok.STARTTBODY STARTTBODY)) :: + (cdata_opt @ tr @ tbody_rest))) :: + tbody_peers end) +fun tbodies_rest_PROD_1_ACT (cdata_opt, tbodies, ENDTBODY, cdata_opt_SPAN : (Lex.pos * Lex.pos), tbodies_SPAN : (Lex.pos * Lex.pos), ENDTBODY_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.ENDTBODY)) :: cdata_opt, + optListToList tbodies) +fun tbodies_rest_PROD_2_ACT (tr, cdata_opt, STARTTBODY, tbodies_rest, tr_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTBODY_SPAN : (Lex.pos * Lex.pos), tbodies_rest_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (let val (tbody_rest, tbody_peers) = + case tbodies_rest of NONE => ([], []) + | SOME tbodies_tup => tbodies_tup + in ([], (Nd (Atom.atom "TBODIES_REST", + (Lf (Tok.STARTTBODY STARTTBODY)) :: + (cdata_opt @ tr @ tbody_rest))) :: tbody_peers) + end) +fun td_PROD_1_SUBRULE_2_PROD_1_ACT (ENDTD, cdata_opt, STARTTD, flow, ENDTD_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTD_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.ENDTD)) :: cdata_opt) +fun td_PROD_1_ACT (SR, STARTTD, flow, SR_SPAN : (Lex.pos * Lex.pos), STARTTD_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "TD", + (Lf (Tok.STARTTD STARTTD)) :: (flow @ (optListToList SR)))) +fun textarea_PROD_1_ACT (cdata_opt, STARTTEXTAREA, ENDTEXTAREA, cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTEXTAREA_SPAN : (Lex.pos * Lex.pos), ENDTEXTAREA_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "TEXTAREA", + (Lf (Tok.STARTTEXTAREA STARTTEXTAREA)) :: + (cdata_opt @ [Lf (Tok.ENDTEXTAREA)]))) +fun tfoot_PROD_1_SUBRULE_2_PROD_1_ACT (tr, STARTTFOOT, cdata_opt, ENDTFOOT, tr_SPAN : (Lex.pos * Lex.pos), STARTTFOOT_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDTFOOT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.ENDTFOOT)) :: cdata_opt) +fun tfoot_PROD_1_ACT (tr, SR, STARTTFOOT, cdata_opt, tr_SPAN : (Lex.pos * Lex.pos), SR_SPAN : (Lex.pos * Lex.pos), STARTTFOOT_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "TFOOT", + (Lf (Tok.STARTTFOOT STARTTFOOT)) :: (cdata_opt @ tr @ + (optListToList SR)))) +fun th_PROD_1_SUBRULE_2_PROD_1_ACT (ENDTH, cdata_opt, STARTTH, flow, ENDTH_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTH_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.ENDTH)) :: cdata_opt) +fun th_PROD_1_ACT (SR, STARTTH, flow, SR_SPAN : (Lex.pos * Lex.pos), STARTTH_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "TH", + (Lf (Tok.STARTTH STARTTH)) :: (flow @ (optListToList SR)))) +fun thead_PROD_1_SUBRULE_2_PROD_1_ACT (tr, STARTTHEAD, ENDTHEAD, cdata_opt, tr_SPAN : (Lex.pos * Lex.pos), STARTTHEAD_SPAN : (Lex.pos * Lex.pos), ENDTHEAD_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.ENDTHEAD)) :: cdata_opt) +fun thead_PROD_1_ACT (tr, SR, STARTTHEAD, cdata_opt, tr_SPAN : (Lex.pos * Lex.pos), SR_SPAN : (Lex.pos * Lex.pos), STARTTHEAD_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "THEAD", + (Lf (Tok.STARTTHEAD STARTTHEAD)) :: (cdata_opt @ tr @ + (optListToList SR)))) +fun tr_PROD_1_SUBRULE_2_PROD_1_ACT (ENDTR, SR1, cdata_opt, STARTTR, ENDTR_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf (Tok.ENDTR)) :: cdata_opt) +fun tr_PROD_1_ACT (SR1, SR2, cdata_opt, STARTTR, SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "TR", + (Lf (Tok.STARTTR STARTTR)) :: (cdata_opt @ SR1 @ + (optListToList SR2)))) +fun tt_PROD_1_ACT (ENDTT, inline, STARTTT, ENDTT_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTTT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "TT", + (Lf (Tok.STARTTT STARTTT)) :: (inline @ [Lf (Tok.ENDTT)]))) +fun u_PROD_1_ACT (inline, STARTU, ENDU, inline_SPAN : (Lex.pos * Lex.pos), STARTU_SPAN : (Lex.pos * Lex.pos), ENDU_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "U", + (Lf (Tok.STARTU STARTU)) :: (inline @ [Lf (Tok.ENDU)]))) +fun ul_PROD_1_ACT (li, ENDUL, cdata_opt, STARTUL, li_SPAN : (Lex.pos * Lex.pos), ENDUL_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTUL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "UL", + ((Lf (Tok.STARTUL STARTUL)) :: (cdata_opt @ li @ + [Lf (Tok.ENDUL)])))) +fun var_PROD_1_ACT (inline, STARTVAR, ENDVAR, inline_SPAN : (Lex.pos * Lex.pos), STARTVAR_SPAN : (Lex.pos * Lex.pos), ENDVAR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Nd (Atom.atom "VAR", + (Lf (Tok.STARTVAR STARTVAR)) :: (inline @ + [Lf (Tok.ENDVAR)]))) +fun cdata_PROD_1_SUBRULE_1_PROD_1_ACT (PCDATA, PCDATA_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Tok.PCDATA PCDATA) +fun cdata_PROD_1_SUBRULE_1_PROD_2_ACT (CHAR_REF, CHAR_REF_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Tok.CHAR_REF CHAR_REF) +fun cdata_PROD_1_SUBRULE_1_PROD_3_ACT (ENTITY_REF, ENTITY_REF_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Tok.ENTITY_REF ENTITY_REF) +fun cdata_PROD_1_SUBRULE_1_PROD_4_ACT (COMMENT, COMMENT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (Tok.COMMENT COMMENT) +fun cdata_PROD_1_ACT (SR, SR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + ((Lf SR) : HTML4Tokens.token parsetree) +fun cdata_opt_PROD_1_ACT (cdata, cdata_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)) = + (cdata : HTML4Tokens.token parsetree list) + end (* UserCode *) + + structure Err = AntlrErrHandler( + structure Tok = Tok + structure Lex = Lex) + +(* replace functor with inline structure for better optimization + structure EBNF = AntlrEBNF( + struct + type strm = Err.wstream + val getSpan = Err.getSpan + end) +*) + structure EBNF = + struct + fun optional (pred, parse, strm) = + if pred strm + then let + val (y, span, strm') = parse strm + in + (SOME y, span, strm') + end + else (NONE, Err.getSpan strm, strm) + + fun closure (pred, parse, strm) = let + fun iter (strm, (left, right), ys) = + if pred strm + then let + val (y, (_, right'), strm') = parse strm + in iter (strm', (left, right'), y::ys) + end + else (List.rev ys, (left, right), strm) + in + iter (strm, Err.getSpan strm, []) + end + + fun posclos (pred, parse, strm) = let + val (y, (left, _), strm') = parse strm + val (ys, (_, right), strm'') = closure (pred, parse, strm') + in + (y::ys, (left, right), strm'') + end + end + + fun mk lexFn = let +fun getS() = {} +fun putS{} = () +fun unwrap (ret, strm, repairs) = (ret, strm, repairs) + val (eh, lex) = Err.mkErrHandler {get = getS, put = putS} + fun fail() = Err.failure eh + fun tryProds (strm, prods) = let + fun try [] = fail() + | try (prod :: prods) = + (Err.whileDisabled eh (fn() => prod strm)) + handle Err.ParseError => try (prods) + in try prods end +fun matchOPENTAG strm = (case (lex(strm)) + of (Tok.OPENTAG(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchCLOSETAG strm = (case (lex(strm)) + of (Tok.CLOSETAG(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchCOMMENT strm = (case (lex(strm)) + of (Tok.COMMENT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchPCDATA strm = (case (lex(strm)) + of (Tok.PCDATA(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchDOCTYPE strm = (case (lex(strm)) + of (Tok.DOCTYPE(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchCHAR_REF strm = (case (lex(strm)) + of (Tok.CHAR_REF(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENTITY_REF strm = (case (lex(strm)) + of (Tok.ENTITY_REF(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchXML_PROCESSING strm = (case (lex(strm)) + of (Tok.XML_PROCESSING(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTA strm = (case (lex(strm)) + of (Tok.STARTA(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDA strm = (case (lex(strm)) + of (Tok.ENDA, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTABBR strm = (case (lex(strm)) + of (Tok.STARTABBR(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDABBR strm = (case (lex(strm)) + of (Tok.ENDABBR, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTACRONYM strm = (case (lex(strm)) + of (Tok.STARTACRONYM(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDACRONYM strm = (case (lex(strm)) + of (Tok.ENDACRONYM, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTADDRESS strm = (case (lex(strm)) + of (Tok.STARTADDRESS(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDADDRESS strm = (case (lex(strm)) + of (Tok.ENDADDRESS, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTAPPLET strm = (case (lex(strm)) + of (Tok.STARTAPPLET(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDAPPLET strm = (case (lex(strm)) + of (Tok.ENDAPPLET, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTAREA strm = (case (lex(strm)) + of (Tok.STARTAREA(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTB strm = (case (lex(strm)) + of (Tok.STARTB(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDB strm = (case (lex(strm)) + of (Tok.ENDB, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTBASE strm = (case (lex(strm)) + of (Tok.STARTBASE(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTBASEFONT strm = (case (lex(strm)) + of (Tok.STARTBASEFONT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTBDO strm = (case (lex(strm)) + of (Tok.STARTBDO(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDBDO strm = (case (lex(strm)) + of (Tok.ENDBDO, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTBIG strm = (case (lex(strm)) + of (Tok.STARTBIG(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDBIG strm = (case (lex(strm)) + of (Tok.ENDBIG, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTBLOCKQUOTE strm = (case (lex(strm)) + of (Tok.STARTBLOCKQUOTE(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDBLOCKQUOTE strm = (case (lex(strm)) + of (Tok.ENDBLOCKQUOTE, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTBODY strm = (case (lex(strm)) + of (Tok.STARTBODY(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDBODY strm = (case (lex(strm)) + of (Tok.ENDBODY, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTBR strm = (case (lex(strm)) + of (Tok.STARTBR(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTBUTTON strm = (case (lex(strm)) + of (Tok.STARTBUTTON(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDBUTTON strm = (case (lex(strm)) + of (Tok.ENDBUTTON, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTCAPTION strm = (case (lex(strm)) + of (Tok.STARTCAPTION(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDCAPTION strm = (case (lex(strm)) + of (Tok.ENDCAPTION, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTCENTER strm = (case (lex(strm)) + of (Tok.STARTCENTER(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDCENTER strm = (case (lex(strm)) + of (Tok.ENDCENTER, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTCITE strm = (case (lex(strm)) + of (Tok.STARTCITE(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDCITE strm = (case (lex(strm)) + of (Tok.ENDCITE, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTCODE strm = (case (lex(strm)) + of (Tok.STARTCODE(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDCODE strm = (case (lex(strm)) + of (Tok.ENDCODE, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTCOL strm = (case (lex(strm)) + of (Tok.STARTCOL(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTCOLGROUP strm = (case (lex(strm)) + of (Tok.STARTCOLGROUP(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDCOLGROUP strm = (case (lex(strm)) + of (Tok.ENDCOLGROUP, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTDD strm = (case (lex(strm)) + of (Tok.STARTDD(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDDD strm = (case (lex(strm)) + of (Tok.ENDDD, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTDEL strm = (case (lex(strm)) + of (Tok.STARTDEL(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDDEL strm = (case (lex(strm)) + of (Tok.ENDDEL, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTDFN strm = (case (lex(strm)) + of (Tok.STARTDFN(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDDFN strm = (case (lex(strm)) + of (Tok.ENDDFN, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTDIR strm = (case (lex(strm)) + of (Tok.STARTDIR(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDDIR strm = (case (lex(strm)) + of (Tok.ENDDIR, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTDIV strm = (case (lex(strm)) + of (Tok.STARTDIV(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDDIV strm = (case (lex(strm)) + of (Tok.ENDDIV, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTDL strm = (case (lex(strm)) + of (Tok.STARTDL(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDDL strm = (case (lex(strm)) + of (Tok.ENDDL, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTDT strm = (case (lex(strm)) + of (Tok.STARTDT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDDT strm = (case (lex(strm)) + of (Tok.ENDDT, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTEM strm = (case (lex(strm)) + of (Tok.STARTEM(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDEM strm = (case (lex(strm)) + of (Tok.ENDEM, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTFIELDSET strm = (case (lex(strm)) + of (Tok.STARTFIELDSET(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDFIELDSET strm = (case (lex(strm)) + of (Tok.ENDFIELDSET, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTFONT strm = (case (lex(strm)) + of (Tok.STARTFONT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDFONT strm = (case (lex(strm)) + of (Tok.ENDFONT, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTFORM strm = (case (lex(strm)) + of (Tok.STARTFORM(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDFORM strm = (case (lex(strm)) + of (Tok.ENDFORM, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTFRAME strm = (case (lex(strm)) + of (Tok.STARTFRAME(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTFRAMESET strm = (case (lex(strm)) + of (Tok.STARTFRAMESET(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDFRAMESET strm = (case (lex(strm)) + of (Tok.ENDFRAMESET, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTH1 strm = (case (lex(strm)) + of (Tok.STARTH1(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDH1 strm = (case (lex(strm)) + of (Tok.ENDH1, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTH2 strm = (case (lex(strm)) + of (Tok.STARTH2(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDH2 strm = (case (lex(strm)) + of (Tok.ENDH2, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTH3 strm = (case (lex(strm)) + of (Tok.STARTH3(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDH3 strm = (case (lex(strm)) + of (Tok.ENDH3, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTH4 strm = (case (lex(strm)) + of (Tok.STARTH4(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDH4 strm = (case (lex(strm)) + of (Tok.ENDH4, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTH5 strm = (case (lex(strm)) + of (Tok.STARTH5(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDH5 strm = (case (lex(strm)) + of (Tok.ENDH5, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTH6 strm = (case (lex(strm)) + of (Tok.STARTH6(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDH6 strm = (case (lex(strm)) + of (Tok.ENDH6, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTHEAD strm = (case (lex(strm)) + of (Tok.STARTHEAD(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDHEAD strm = (case (lex(strm)) + of (Tok.ENDHEAD, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTHR strm = (case (lex(strm)) + of (Tok.STARTHR(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTHTML strm = (case (lex(strm)) + of (Tok.STARTHTML(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDHTML strm = (case (lex(strm)) + of (Tok.ENDHTML, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTI strm = (case (lex(strm)) + of (Tok.STARTI(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDI strm = (case (lex(strm)) + of (Tok.ENDI, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTIFRAME strm = (case (lex(strm)) + of (Tok.STARTIFRAME(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDIFRAME strm = (case (lex(strm)) + of (Tok.ENDIFRAME, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTIMG strm = (case (lex(strm)) + of (Tok.STARTIMG(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTINPUT strm = (case (lex(strm)) + of (Tok.STARTINPUT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTINS strm = (case (lex(strm)) + of (Tok.STARTINS(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDINS strm = (case (lex(strm)) + of (Tok.ENDINS, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTISINDEX strm = (case (lex(strm)) + of (Tok.STARTISINDEX(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTKBD strm = (case (lex(strm)) + of (Tok.STARTKBD(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDKBD strm = (case (lex(strm)) + of (Tok.ENDKBD, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTLABEL strm = (case (lex(strm)) + of (Tok.STARTLABEL(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDLABEL strm = (case (lex(strm)) + of (Tok.ENDLABEL, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTLEGEND strm = (case (lex(strm)) + of (Tok.STARTLEGEND(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDLEGEND strm = (case (lex(strm)) + of (Tok.ENDLEGEND, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTLI strm = (case (lex(strm)) + of (Tok.STARTLI(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDLI strm = (case (lex(strm)) + of (Tok.ENDLI, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTLINK strm = (case (lex(strm)) + of (Tok.STARTLINK(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTMAP strm = (case (lex(strm)) + of (Tok.STARTMAP(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDMAP strm = (case (lex(strm)) + of (Tok.ENDMAP, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTMENU strm = (case (lex(strm)) + of (Tok.STARTMENU(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDMENU strm = (case (lex(strm)) + of (Tok.ENDMENU, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTMETA strm = (case (lex(strm)) + of (Tok.STARTMETA(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTNOFRAMES strm = (case (lex(strm)) + of (Tok.STARTNOFRAMES(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDNOFRAMES strm = (case (lex(strm)) + of (Tok.ENDNOFRAMES, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTNOSCRIPT strm = (case (lex(strm)) + of (Tok.STARTNOSCRIPT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDNOSCRIPT strm = (case (lex(strm)) + of (Tok.ENDNOSCRIPT, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTOBJECT strm = (case (lex(strm)) + of (Tok.STARTOBJECT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDOBJECT strm = (case (lex(strm)) + of (Tok.ENDOBJECT, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTOL strm = (case (lex(strm)) + of (Tok.STARTOL(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDOL strm = (case (lex(strm)) + of (Tok.ENDOL, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTOPTGROUP strm = (case (lex(strm)) + of (Tok.STARTOPTGROUP(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDOPTGROUP strm = (case (lex(strm)) + of (Tok.ENDOPTGROUP, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTOPTION strm = (case (lex(strm)) + of (Tok.STARTOPTION(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDOPTION strm = (case (lex(strm)) + of (Tok.ENDOPTION, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTP strm = (case (lex(strm)) + of (Tok.STARTP(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDP strm = (case (lex(strm)) + of (Tok.ENDP, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTPARAM strm = (case (lex(strm)) + of (Tok.STARTPARAM(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTPRE strm = (case (lex(strm)) + of (Tok.STARTPRE(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDPRE strm = (case (lex(strm)) + of (Tok.ENDPRE, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTQ strm = (case (lex(strm)) + of (Tok.STARTQ(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDQ strm = (case (lex(strm)) + of (Tok.ENDQ, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTS strm = (case (lex(strm)) + of (Tok.STARTS(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDS strm = (case (lex(strm)) + of (Tok.ENDS, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTSAMP strm = (case (lex(strm)) + of (Tok.STARTSAMP(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDSAMP strm = (case (lex(strm)) + of (Tok.ENDSAMP, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTSCRIPT strm = (case (lex(strm)) + of (Tok.STARTSCRIPT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDSCRIPT strm = (case (lex(strm)) + of (Tok.ENDSCRIPT, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTSELECT strm = (case (lex(strm)) + of (Tok.STARTSELECT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDSELECT strm = (case (lex(strm)) + of (Tok.ENDSELECT, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTSMALL strm = (case (lex(strm)) + of (Tok.STARTSMALL(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDSMALL strm = (case (lex(strm)) + of (Tok.ENDSMALL, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTSPAN strm = (case (lex(strm)) + of (Tok.STARTSPAN(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDSPAN strm = (case (lex(strm)) + of (Tok.ENDSPAN, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTSTRIKE strm = (case (lex(strm)) + of (Tok.STARTSTRIKE(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDSTRIKE strm = (case (lex(strm)) + of (Tok.ENDSTRIKE, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTSTRONG strm = (case (lex(strm)) + of (Tok.STARTSTRONG(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDSTRONG strm = (case (lex(strm)) + of (Tok.ENDSTRONG, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTSTYLE strm = (case (lex(strm)) + of (Tok.STARTSTYLE(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDSTYLE strm = (case (lex(strm)) + of (Tok.ENDSTYLE, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTSUB strm = (case (lex(strm)) + of (Tok.STARTSUB(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDSUB strm = (case (lex(strm)) + of (Tok.ENDSUB, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTSUP strm = (case (lex(strm)) + of (Tok.STARTSUP(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDSUP strm = (case (lex(strm)) + of (Tok.ENDSUP, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTTABLE strm = (case (lex(strm)) + of (Tok.STARTTABLE(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDTABLE strm = (case (lex(strm)) + of (Tok.ENDTABLE, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTTBODY strm = (case (lex(strm)) + of (Tok.STARTTBODY(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDTBODY strm = (case (lex(strm)) + of (Tok.ENDTBODY, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTTD strm = (case (lex(strm)) + of (Tok.STARTTD(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDTD strm = (case (lex(strm)) + of (Tok.ENDTD, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTTEXTAREA strm = (case (lex(strm)) + of (Tok.STARTTEXTAREA(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDTEXTAREA strm = (case (lex(strm)) + of (Tok.ENDTEXTAREA, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTTFOOT strm = (case (lex(strm)) + of (Tok.STARTTFOOT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDTFOOT strm = (case (lex(strm)) + of (Tok.ENDTFOOT, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTTH strm = (case (lex(strm)) + of (Tok.STARTTH(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDTH strm = (case (lex(strm)) + of (Tok.ENDTH, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTTHEAD strm = (case (lex(strm)) + of (Tok.STARTTHEAD(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDTHEAD strm = (case (lex(strm)) + of (Tok.ENDTHEAD, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTTITLE strm = (case (lex(strm)) + of (Tok.STARTTITLE(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDTITLE strm = (case (lex(strm)) + of (Tok.ENDTITLE, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTTR strm = (case (lex(strm)) + of (Tok.STARTTR(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDTR strm = (case (lex(strm)) + of (Tok.ENDTR, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTTT strm = (case (lex(strm)) + of (Tok.STARTTT(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDTT strm = (case (lex(strm)) + of (Tok.ENDTT, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTU strm = (case (lex(strm)) + of (Tok.STARTU(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDU strm = (case (lex(strm)) + of (Tok.ENDU, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTUL strm = (case (lex(strm)) + of (Tok.STARTUL(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDUL strm = (case (lex(strm)) + of (Tok.ENDUL, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchSTARTVAR strm = (case (lex(strm)) + of (Tok.STARTVAR(x), span, strm') => (x, span, strm') + | _ => fail() +(* end case *)) +fun matchENDVAR strm = (case (lex(strm)) + of (Tok.ENDVAR, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) +fun matchEOF strm = (case (lex(strm)) + of (Tok.EOF, span, strm') => ((), span, strm') + | _ => fail() +(* end case *)) + +val (document_NT, block_NT, cdata_opt_NT, inline_NT, body_NT, flow_NT) = +let +fun cdata_NT (strm) = let + val (SR_RES, SR_SPAN, strm') = let + fun cdata_PROD_1_SUBRULE_1_NT (strm) = let + fun cdata_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (PCDATA_RES, PCDATA_SPAN, strm') = matchPCDATA(strm) + val FULL_SPAN = (#1(PCDATA_SPAN), #2(PCDATA_SPAN)) + in + (UserCode.cdata_PROD_1_SUBRULE_1_PROD_1_ACT (PCDATA_RES, PCDATA_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun cdata_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (CHAR_REF_RES, CHAR_REF_SPAN, strm') = matchCHAR_REF(strm) + val FULL_SPAN = (#1(CHAR_REF_SPAN), #2(CHAR_REF_SPAN)) + in + (UserCode.cdata_PROD_1_SUBRULE_1_PROD_2_ACT (CHAR_REF_RES, CHAR_REF_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun cdata_PROD_1_SUBRULE_1_PROD_3 (strm) = let + val (ENTITY_REF_RES, ENTITY_REF_SPAN, strm') = matchENTITY_REF(strm) + val FULL_SPAN = (#1(ENTITY_REF_SPAN), #2(ENTITY_REF_SPAN)) + in + (UserCode.cdata_PROD_1_SUBRULE_1_PROD_3_ACT (ENTITY_REF_RES, ENTITY_REF_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun cdata_PROD_1_SUBRULE_1_PROD_4 (strm) = let + val (COMMENT_RES, COMMENT_SPAN, strm') = matchCOMMENT(strm) + val FULL_SPAN = (#1(COMMENT_SPAN), #2(COMMENT_SPAN)) + in + (UserCode.cdata_PROD_1_SUBRULE_1_PROD_4_ACT (COMMENT_RES, COMMENT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => + cdata_PROD_1_SUBRULE_1_PROD_4(strm) + | (Tok.CHAR_REF(_), _, strm') => + cdata_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.PCDATA(_), _, strm') => + cdata_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.ENTITY_REF(_), _, strm') => + cdata_PROD_1_SUBRULE_1_PROD_3(strm) + | _ => fail() + (* end case *)) + end + in + cdata_PROD_1_SUBRULE_1_NT(strm) + end + val FULL_SPAN = (#1(SR_SPAN), #2(SR_SPAN)) + in + (UserCode.cdata_PROD_1_ACT (SR_RES, SR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun cdata_opt_NT (strm) = let + fun cdata_opt_PROD_1_SUBRULE_1_NT (strm) = let + val (cdata_RES, cdata_SPAN, strm') = cdata_NT(strm) + val FULL_SPAN = (#1(cdata_SPAN), #2(cdata_SPAN)) + in + ((cdata_RES), FULL_SPAN, strm') + end + fun cdata_opt_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | _ => false + (* end case *)) + val (cdata_RES, cdata_SPAN, strm') = EBNF.closure(cdata_opt_PROD_1_SUBRULE_1_PRED, cdata_opt_PROD_1_SUBRULE_1_NT, strm) + val FULL_SPAN = (#1(cdata_SPAN), #2(cdata_SPAN)) + in + (UserCode.cdata_opt_PROD_1_ACT (cdata_RES, cdata_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun textarea_NT (strm) = let + val (STARTTEXTAREA_RES, STARTTEXTAREA_SPAN, strm') = matchSTARTTEXTAREA(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val (ENDTEXTAREA_RES, ENDTEXTAREA_SPAN, strm') = matchENDTEXTAREA(strm') + val FULL_SPAN = (#1(STARTTEXTAREA_SPAN), #2(ENDTEXTAREA_SPAN)) + in + (UserCode.textarea_PROD_1_ACT (cdata_opt_RES, STARTTEXTAREA_RES, ENDTEXTAREA_RES, cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTEXTAREA_SPAN : (Lex.pos * Lex.pos), ENDTEXTAREA_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun option_NT (strm) = let + val (STARTOPTION_RES, STARTOPTION_SPAN, strm') = matchSTARTOPTION(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun option_PROD_1_SUBRULE_1_NT (strm) = let + val (ENDOPTION_RES, ENDOPTION_SPAN, strm') = matchENDOPTION(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(ENDOPTION_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.option_PROD_1_SUBRULE_1_PROD_1_ACT (STARTOPTION_RES, cdata_opt_RES, ENDOPTION_RES, STARTOPTION_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDOPTION_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun option_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.ENDOPTION, _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.optional(option_PROD_1_SUBRULE_1_PRED, option_PROD_1_SUBRULE_1_NT, strm') + val FULL_SPAN = (#1(STARTOPTION_SPAN), #2(SR_SPAN)) + in + (UserCode.option_PROD_1_ACT (SR_RES, STARTOPTION_RES, cdata_opt_RES, SR_SPAN : (Lex.pos * Lex.pos), STARTOPTION_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun optgroup_NT (strm) = let + val (STARTOPTGROUP_RES, STARTOPTGROUP_SPAN, strm') = matchSTARTOPTGROUP(strm) + val (cdata_opt1_RES, cdata_opt1_SPAN, strm') = cdata_opt_NT(strm') + fun optgroup_PROD_1_SUBRULE_1_NT (strm) = let + val (option_RES, option_SPAN, strm') = option_NT(strm) + val FULL_SPAN = (#1(option_SPAN), #2(option_SPAN)) + in + ((option_RES), FULL_SPAN, strm') + end + fun optgroup_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTOPTION(_), _, strm') => true + | _ => false + (* end case *)) + val (option_RES, option_SPAN, strm') = EBNF.posclos(optgroup_PROD_1_SUBRULE_1_PRED, optgroup_PROD_1_SUBRULE_1_NT, strm') + val (ENDOPTGROUP_RES, ENDOPTGROUP_SPAN, strm') = matchENDOPTGROUP(strm') + val (cdata_opt2_RES, cdata_opt2_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(STARTOPTGROUP_SPAN), #2(cdata_opt2_SPAN)) + in + (UserCode.optgroup_PROD_1_ACT (option_RES, STARTOPTGROUP_RES, ENDOPTGROUP_RES, cdata_opt1_RES, cdata_opt2_RES, option_SPAN : (Lex.pos * Lex.pos), STARTOPTGROUP_SPAN : (Lex.pos * Lex.pos), ENDOPTGROUP_SPAN : (Lex.pos * Lex.pos), cdata_opt1_SPAN : (Lex.pos * Lex.pos), cdata_opt2_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun select_NT (strm) = let + val (STARTSELECT_RES, STARTSELECT_SPAN, strm') = matchSTARTSELECT(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun select_PROD_1_SUBRULE_1_NT (strm) = let + fun select_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (optgroup_RES, optgroup_SPAN, strm') = optgroup_NT(strm) + val FULL_SPAN = (#1(optgroup_SPAN), #2(optgroup_SPAN)) + in + ((optgroup_RES), FULL_SPAN, strm') + end + fun select_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (option_RES, option_SPAN, strm') = option_NT(strm) + val FULL_SPAN = (#1(option_SPAN), #2(option_SPAN)) + in + ((option_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTOPTION(_), _, strm') => + select_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTOPTGROUP(_), _, strm') => + select_PROD_1_SUBRULE_1_PROD_1(strm) + | _ => fail() + (* end case *)) + end + fun select_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTOPTGROUP(_), _, strm') => true + | (Tok.STARTOPTION(_), _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.posclos(select_PROD_1_SUBRULE_1_PRED, select_PROD_1_SUBRULE_1_NT, strm') + val (ENDSELECT_RES, ENDSELECT_SPAN, strm') = matchENDSELECT(strm') + val FULL_SPAN = (#1(STARTSELECT_SPAN), #2(ENDSELECT_SPAN)) + in + (UserCode.select_PROD_1_ACT (STARTSELECT_RES, SR_RES, cdata_opt_RES, ENDSELECT_RES, STARTSELECT_SPAN : (Lex.pos * Lex.pos), SR_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDSELECT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun input_NT (strm) = let + val (STARTINPUT_RES, STARTINPUT_SPAN, strm') = matchSTARTINPUT(strm) + val FULL_SPAN = (#1(STARTINPUT_SPAN), #2(STARTINPUT_SPAN)) + in + (UserCode.input_PROD_1_ACT (STARTINPUT_RES, STARTINPUT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun basefont_NT (strm) = let + val (STARTBASEFONT_RES, STARTBASEFONT_SPAN, strm') = matchSTARTBASEFONT(strm) + val FULL_SPAN = (#1(STARTBASEFONT_SPAN), #2(STARTBASEFONT_SPAN)) + in + (UserCode.basefont_PROD_1_ACT (STARTBASEFONT_RES, STARTBASEFONT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun param_NT (strm) = let + val (STARTPARAM_RES, STARTPARAM_SPAN, strm') = matchSTARTPARAM(strm) + val FULL_SPAN = (#1(STARTPARAM_SPAN), #2(STARTPARAM_SPAN)) + in + (UserCode.param_PROD_1_ACT (STARTPARAM_RES, STARTPARAM_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun area_NT (strm) = let + val (STARTAREA_RES, STARTAREA_SPAN, strm') = matchSTARTAREA(strm) + val FULL_SPAN = (#1(STARTAREA_SPAN), #2(STARTAREA_SPAN)) + in + (UserCode.area_PROD_1_ACT (STARTAREA_RES, STARTAREA_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun isindex_NT (strm) = let + val (STARTISINDEX_RES, STARTISINDEX_SPAN, strm') = matchSTARTISINDEX(strm) + val FULL_SPAN = (#1(STARTISINDEX_SPAN), #2(STARTISINDEX_SPAN)) + in + (UserCode.isindex_PROD_1_ACT (STARTISINDEX_RES, STARTISINDEX_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun col_NT (strm) = let + val (STARTCOL_RES, STARTCOL_SPAN, strm') = matchSTARTCOL(strm) + val FULL_SPAN = (#1(STARTCOL_SPAN), #2(STARTCOL_SPAN)) + in + (UserCode.col_PROD_1_ACT (STARTCOL_RES, STARTCOL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun colgroup_NT (strm) = let + val (STARTCOLGROUP_RES, STARTCOLGROUP_SPAN, strm') = matchSTARTCOLGROUP(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun colgroup_PROD_1_SUBRULE_1_NT (strm) = let + val (col_RES, col_SPAN, strm') = col_NT(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(col_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.colgroup_PROD_1_SUBRULE_1_PROD_1_ACT (STARTCOLGROUP_RES, cdata_opt_RES, col_RES, STARTCOLGROUP_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), col_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun colgroup_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTCOL(_), _, strm') => true + | _ => false + (* end case *)) + val (SR1_RES, SR1_SPAN, strm') = EBNF.closure(colgroup_PROD_1_SUBRULE_1_PRED, colgroup_PROD_1_SUBRULE_1_NT, strm') + fun colgroup_PROD_1_SUBRULE_2_NT (strm) = let + val (ENDCOLGROUP_RES, ENDCOLGROUP_SPAN, strm') = matchENDCOLGROUP(strm) + val FULL_SPAN = (#1(ENDCOLGROUP_SPAN), #2(ENDCOLGROUP_SPAN)) + in + (UserCode.colgroup_PROD_1_SUBRULE_2_PROD_1_ACT (STARTCOLGROUP_RES, SR1_RES, cdata_opt_RES, ENDCOLGROUP_RES, STARTCOLGROUP_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDCOLGROUP_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun colgroup_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.ENDCOLGROUP, _, strm') => true + | _ => false + (* end case *)) + val (SR2_RES, SR2_SPAN, strm') = EBNF.optional(colgroup_PROD_1_SUBRULE_2_PRED, colgroup_PROD_1_SUBRULE_2_NT, strm') + val FULL_SPAN = (#1(STARTCOLGROUP_SPAN), #2(SR2_SPAN)) + in + (UserCode.colgroup_PROD_1_ACT (STARTCOLGROUP_RES, SR1_RES, SR2_RES, cdata_opt_RES, STARTCOLGROUP_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun col_or_colgroups_NT (strm) = let + fun col_or_colgroups_PROD_1 (strm) = let + val FULL_SPAN = (Err.getPos(strm), Err.getPos(strm)) + in + (UserCode.col_or_colgroups_PROD_1_ACT (FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm) + end + fun col_or_colgroups_PROD_2 (strm) = let + fun col_or_colgroups_PROD_2_SUBRULE_1_NT (strm) = let + val (col_RES, col_SPAN, strm') = col_NT(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(col_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.col_or_colgroups_PROD_2_SUBRULE_1_PROD_1_ACT (cdata_opt_RES, col_RES, cdata_opt_SPAN : (Lex.pos * Lex.pos), col_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun col_or_colgroups_PROD_2_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTCOL(_), _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.posclos(col_or_colgroups_PROD_2_SUBRULE_1_PRED, col_or_colgroups_PROD_2_SUBRULE_1_NT, strm) + val FULL_SPAN = (#1(SR_SPAN), #2(SR_SPAN)) + in + (UserCode.col_or_colgroups_PROD_2_ACT (SR_RES, SR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun col_or_colgroups_PROD_3 (strm) = let + fun col_or_colgroups_PROD_3_SUBRULE_1_NT (strm) = let + val (colgroup_RES, colgroup_SPAN, strm') = colgroup_NT(strm) + val FULL_SPAN = (#1(colgroup_SPAN), #2(colgroup_SPAN)) + in + ((colgroup_RES), FULL_SPAN, strm') + end + fun col_or_colgroups_PROD_3_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTCOLGROUP(_), _, strm') => true + | _ => false + (* end case *)) + val (colgroup_RES, colgroup_SPAN, strm') = EBNF.posclos(col_or_colgroups_PROD_3_SUBRULE_1_PRED, col_or_colgroups_PROD_3_SUBRULE_1_NT, strm) + val FULL_SPAN = (#1(colgroup_SPAN), #2(colgroup_SPAN)) + in + ((colgroup_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTCOLGROUP(_), _, strm') => col_or_colgroups_PROD_3(strm) + | (Tok.STARTTBODY(_), _, strm') => col_or_colgroups_PROD_1(strm) + | (Tok.STARTTFOOT(_), _, strm') => col_or_colgroups_PROD_1(strm) + | (Tok.STARTTHEAD(_), _, strm') => col_or_colgroups_PROD_1(strm) + | (Tok.STARTTR(_), _, strm') => col_or_colgroups_PROD_1(strm) + | (Tok.STARTCOL(_), _, strm') => col_or_colgroups_PROD_2(strm) + | _ => fail() + (* end case *)) + end +fun hr_NT (strm) = let + val (STARTHR_RES, STARTHR_SPAN, strm') = matchSTARTHR(strm) + val FULL_SPAN = (#1(STARTHR_SPAN), #2(STARTHR_SPAN)) + in + (UserCode.hr_PROD_1_ACT (STARTHR_RES, STARTHR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun script_NT (strm) = let + val (STARTSCRIPT_RES, STARTSCRIPT_SPAN, strm') = matchSTARTSCRIPT(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val (ENDSCRIPT_RES, ENDSCRIPT_SPAN, strm') = matchENDSCRIPT(strm') + val FULL_SPAN = (#1(STARTSCRIPT_SPAN), #2(ENDSCRIPT_SPAN)) + in + (UserCode.script_PROD_1_ACT (cdata_opt_RES, STARTSCRIPT_RES, ENDSCRIPT_RES, cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTSCRIPT_SPAN : (Lex.pos * Lex.pos), ENDSCRIPT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun br_NT (strm) = let + val (STARTBR_RES, STARTBR_SPAN, strm') = matchSTARTBR(strm) + val FULL_SPAN = (#1(STARTBR_SPAN), #2(STARTBR_SPAN)) + in + (UserCode.br_PROD_1_ACT (STARTBR_RES, STARTBR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun img_NT (strm) = let + val (STARTIMG_RES, STARTIMG_SPAN, strm') = matchSTARTIMG(strm) + val FULL_SPAN = (#1(STARTIMG_SPAN), #2(STARTIMG_SPAN)) + in + (UserCode.img_PROD_1_ACT (STARTIMG_RES, STARTIMG_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun flow_NT (strm) = let + fun flow_PROD_1 (strm) = let + val (block_RES, block_SPAN, strm') = block_NT(strm) + val FULL_SPAN = (#1(block_SPAN), #2(block_SPAN)) + in + ((block_RES), FULL_SPAN, strm') + end + fun flow_PROD_2 (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => flow_PROD_2(strm) + | (Tok.PCDATA(_), _, strm') => flow_PROD_2(strm) + | (Tok.CHAR_REF(_), _, strm') => flow_PROD_2(strm) + | (Tok.ENTITY_REF(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTA(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTABBR(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTACRONYM(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTAPPLET(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTB(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTBASEFONT(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTBDO(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTBIG(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTBR(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTBUTTON(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTCITE(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTCODE(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTDFN(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTEM(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTFONT(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTI(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTIFRAME(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTIMG(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTINPUT(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTKBD(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTLABEL(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTMAP(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTOBJECT(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTQ(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTS(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTSAMP(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTSCRIPT(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTSELECT(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTSMALL(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTSPAN(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTSTRIKE(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTSTRONG(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTSUB(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTSUP(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTTEXTAREA(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTTT(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTU(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTVAR(_), _, strm') => flow_PROD_2(strm) + | (Tok.STARTADDRESS(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTCENTER(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTDIR(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTDIV(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTDL(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTFIELDSET(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTFORM(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTH1(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTH2(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTH3(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTH4(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTH5(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTH6(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTHR(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTISINDEX(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTMENU(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTOL(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTP(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTPRE(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTTABLE(_), _, strm') => flow_PROD_1(strm) + | (Tok.STARTUL(_), _, strm') => flow_PROD_1(strm) + | _ => fail() + (* end case *)) + end +and inline_NT (strm) = let + fun inline_PROD_1 (strm) = let + val (fontstyle_RES, fontstyle_SPAN, strm') = fontstyle_NT(strm) + val FULL_SPAN = (#1(fontstyle_SPAN), #2(fontstyle_SPAN)) + in + ((fontstyle_RES), FULL_SPAN, strm') + end + fun inline_PROD_2 (strm) = let + val (phrase_RES, phrase_SPAN, strm') = phrase_NT(strm) + val FULL_SPAN = (#1(phrase_SPAN), #2(phrase_SPAN)) + in + ((phrase_RES), FULL_SPAN, strm') + end + fun inline_PROD_3 (strm) = let + val (special_RES, special_SPAN, strm') = special_NT(strm) + val FULL_SPAN = (#1(special_SPAN), #2(special_SPAN)) + in + ((special_RES), FULL_SPAN, strm') + end + fun inline_PROD_4 (strm) = let + val (formctrl_RES, formctrl_SPAN, strm') = formctrl_NT(strm) + val FULL_SPAN = (#1(formctrl_SPAN), #2(formctrl_SPAN)) + in + ((formctrl_RES), FULL_SPAN, strm') + end + fun inline_PROD_5 (strm) = let + val (cdata_RES, cdata_SPAN, strm') = cdata_NT(strm) + val FULL_SPAN = (#1(cdata_SPAN), #2(cdata_SPAN)) + in + ((cdata_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => inline_PROD_5(strm) + | (Tok.PCDATA(_), _, strm') => inline_PROD_5(strm) + | (Tok.CHAR_REF(_), _, strm') => inline_PROD_5(strm) + | (Tok.ENTITY_REF(_), _, strm') => inline_PROD_5(strm) + | (Tok.STARTA(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTAPPLET(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTBASEFONT(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTBDO(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTBR(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTFONT(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTIFRAME(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTIMG(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTMAP(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTOBJECT(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTQ(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTSCRIPT(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTSPAN(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTSUB(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTSUP(_), _, strm') => inline_PROD_3(strm) + | (Tok.STARTB(_), _, strm') => inline_PROD_1(strm) + | (Tok.STARTBIG(_), _, strm') => inline_PROD_1(strm) + | (Tok.STARTI(_), _, strm') => inline_PROD_1(strm) + | (Tok.STARTS(_), _, strm') => inline_PROD_1(strm) + | (Tok.STARTSMALL(_), _, strm') => inline_PROD_1(strm) + | (Tok.STARTSTRIKE(_), _, strm') => inline_PROD_1(strm) + | (Tok.STARTTT(_), _, strm') => inline_PROD_1(strm) + | (Tok.STARTU(_), _, strm') => inline_PROD_1(strm) + | (Tok.STARTABBR(_), _, strm') => inline_PROD_2(strm) + | (Tok.STARTACRONYM(_), _, strm') => inline_PROD_2(strm) + | (Tok.STARTCITE(_), _, strm') => inline_PROD_2(strm) + | (Tok.STARTCODE(_), _, strm') => inline_PROD_2(strm) + | (Tok.STARTDFN(_), _, strm') => inline_PROD_2(strm) + | (Tok.STARTEM(_), _, strm') => inline_PROD_2(strm) + | (Tok.STARTKBD(_), _, strm') => inline_PROD_2(strm) + | (Tok.STARTSAMP(_), _, strm') => inline_PROD_2(strm) + | (Tok.STARTSTRONG(_), _, strm') => inline_PROD_2(strm) + | (Tok.STARTVAR(_), _, strm') => inline_PROD_2(strm) + | (Tok.STARTBUTTON(_), _, strm') => inline_PROD_4(strm) + | (Tok.STARTINPUT(_), _, strm') => inline_PROD_4(strm) + | (Tok.STARTLABEL(_), _, strm') => inline_PROD_4(strm) + | (Tok.STARTSELECT(_), _, strm') => inline_PROD_4(strm) + | (Tok.STARTTEXTAREA(_), _, strm') => inline_PROD_4(strm) + | _ => fail() + (* end case *)) + end +and formctrl_NT (strm) = let + fun formctrl_PROD_1 (strm) = let + val (input_RES, input_SPAN, strm') = input_NT(strm) + val FULL_SPAN = (#1(input_SPAN), #2(input_SPAN)) + in + ((input_RES), FULL_SPAN, strm') + end + fun formctrl_PROD_2 (strm) = let + val (select_RES, select_SPAN, strm') = select_NT(strm) + val FULL_SPAN = (#1(select_SPAN), #2(select_SPAN)) + in + ((select_RES), FULL_SPAN, strm') + end + fun formctrl_PROD_3 (strm) = let + val (textarea_RES, textarea_SPAN, strm') = textarea_NT(strm) + val FULL_SPAN = (#1(textarea_SPAN), #2(textarea_SPAN)) + in + ((textarea_RES), FULL_SPAN, strm') + end + fun formctrl_PROD_4 (strm) = let + val (label_RES, label_SPAN, strm') = label_NT(strm) + val FULL_SPAN = (#1(label_SPAN), #2(label_SPAN)) + in + ((label_RES), FULL_SPAN, strm') + end + fun formctrl_PROD_5 (strm) = let + val (button_RES, button_SPAN, strm') = button_NT(strm) + val FULL_SPAN = (#1(button_SPAN), #2(button_SPAN)) + in + ((button_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTBUTTON(_), _, strm') => formctrl_PROD_5(strm) + | (Tok.STARTTEXTAREA(_), _, strm') => formctrl_PROD_3(strm) + | (Tok.STARTINPUT(_), _, strm') => formctrl_PROD_1(strm) + | (Tok.STARTSELECT(_), _, strm') => formctrl_PROD_2(strm) + | (Tok.STARTLABEL(_), _, strm') => formctrl_PROD_4(strm) + | _ => fail() + (* end case *)) + end +and button_NT (strm) = let + val (STARTBUTTON_RES, STARTBUTTON_SPAN, strm') = matchSTARTBUTTON(strm) + fun button_PROD_1_SUBRULE_1_NT (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + fun button_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (flow_RES, flow_SPAN, strm') = EBNF.closure(button_PROD_1_SUBRULE_1_PRED, button_PROD_1_SUBRULE_1_NT, strm') + val (ENDBUTTON_RES, ENDBUTTON_SPAN, strm') = matchENDBUTTON(strm') + val FULL_SPAN = (#1(STARTBUTTON_SPAN), #2(ENDBUTTON_SPAN)) + in + (UserCode.button_PROD_1_ACT (STARTBUTTON_RES, flow_RES, ENDBUTTON_RES, STARTBUTTON_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), ENDBUTTON_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and label_NT (strm) = let + val (STARTLABEL_RES, STARTLABEL_SPAN, strm') = matchSTARTLABEL(strm) + fun label_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun label_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(label_PROD_1_SUBRULE_1_PRED, label_PROD_1_SUBRULE_1_NT, strm') + val (ENDLABEL_RES, ENDLABEL_SPAN, strm') = matchENDLABEL(strm') + val FULL_SPAN = (#1(STARTLABEL_SPAN), #2(ENDLABEL_SPAN)) + in + (UserCode.label_PROD_1_ACT (inline_RES, ENDLABEL_RES, STARTLABEL_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDLABEL_SPAN : (Lex.pos * Lex.pos), STARTLABEL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and special_NT (strm) = let + fun special_PROD_1 (strm) = let + val (a_RES, a_SPAN, strm') = a_NT(strm) + val FULL_SPAN = (#1(a_SPAN), #2(a_SPAN)) + in + ((a_RES), FULL_SPAN, strm') + end + fun special_PROD_2 (strm) = let + val (img_RES, img_SPAN, strm') = img_NT(strm) + val FULL_SPAN = (#1(img_SPAN), #2(img_SPAN)) + in + ((img_RES), FULL_SPAN, strm') + end + fun special_PROD_3 (strm) = let + val (object_RES, object_SPAN, strm') = object_NT(strm) + val FULL_SPAN = (#1(object_SPAN), #2(object_SPAN)) + in + ((object_RES), FULL_SPAN, strm') + end + fun special_PROD_4 (strm) = let + val (br_RES, br_SPAN, strm') = br_NT(strm) + val FULL_SPAN = (#1(br_SPAN), #2(br_SPAN)) + in + ((br_RES), FULL_SPAN, strm') + end + fun special_PROD_5 (strm) = let + val (script_RES, script_SPAN, strm') = script_NT(strm) + val FULL_SPAN = (#1(script_SPAN), #2(script_SPAN)) + in + ((script_RES), FULL_SPAN, strm') + end + fun special_PROD_6 (strm) = let + val (map_RES, map_SPAN, strm') = map_NT(strm) + val FULL_SPAN = (#1(map_SPAN), #2(map_SPAN)) + in + ((map_RES), FULL_SPAN, strm') + end + fun special_PROD_7 (strm) = let + val (q_RES, q_SPAN, strm') = q_NT(strm) + val FULL_SPAN = (#1(q_SPAN), #2(q_SPAN)) + in + ((q_RES), FULL_SPAN, strm') + end + fun special_PROD_8 (strm) = let + val (sub_RES, sub_SPAN, strm') = sub_NT(strm) + val FULL_SPAN = (#1(sub_SPAN), #2(sub_SPAN)) + in + ((sub_RES), FULL_SPAN, strm') + end + fun special_PROD_9 (strm) = let + val (sup_RES, sup_SPAN, strm') = sup_NT(strm) + val FULL_SPAN = (#1(sup_SPAN), #2(sup_SPAN)) + in + ((sup_RES), FULL_SPAN, strm') + end + fun special_PROD_10 (strm) = let + val (span_RES, span_SPAN, strm') = span_NT(strm) + val FULL_SPAN = (#1(span_SPAN), #2(span_SPAN)) + in + ((span_RES), FULL_SPAN, strm') + end + fun special_PROD_11 (strm) = let + val (bdo_RES, bdo_SPAN, strm') = bdo_NT(strm) + val FULL_SPAN = (#1(bdo_SPAN), #2(bdo_SPAN)) + in + ((bdo_RES), FULL_SPAN, strm') + end + fun special_PROD_12 (strm) = let + val (special_loose_RES, special_loose_SPAN, strm') = special_loose_NT(strm) + val FULL_SPAN = (#1(special_loose_SPAN), #2(special_loose_SPAN)) + in + ((special_loose_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTAPPLET(_), _, strm') => special_PROD_12(strm) + | (Tok.STARTBASEFONT(_), _, strm') => special_PROD_12(strm) + | (Tok.STARTFONT(_), _, strm') => special_PROD_12(strm) + | (Tok.STARTIFRAME(_), _, strm') => special_PROD_12(strm) + | (Tok.STARTSPAN(_), _, strm') => special_PROD_10(strm) + | (Tok.STARTSUB(_), _, strm') => special_PROD_8(strm) + | (Tok.STARTMAP(_), _, strm') => special_PROD_6(strm) + | (Tok.STARTBR(_), _, strm') => special_PROD_4(strm) + | (Tok.STARTIMG(_), _, strm') => special_PROD_2(strm) + | (Tok.STARTA(_), _, strm') => special_PROD_1(strm) + | (Tok.STARTOBJECT(_), _, strm') => special_PROD_3(strm) + | (Tok.STARTSCRIPT(_), _, strm') => special_PROD_5(strm) + | (Tok.STARTQ(_), _, strm') => special_PROD_7(strm) + | (Tok.STARTSUP(_), _, strm') => special_PROD_9(strm) + | (Tok.STARTBDO(_), _, strm') => special_PROD_11(strm) + | _ => fail() + (* end case *)) + end +and special_loose_NT (strm) = let + fun special_loose_PROD_1 (strm) = let + val (applet_RES, applet_SPAN, strm') = applet_NT(strm) + val FULL_SPAN = (#1(applet_SPAN), #2(applet_SPAN)) + in + ((applet_RES), FULL_SPAN, strm') + end + fun special_loose_PROD_2 (strm) = let + val (basefont_RES, basefont_SPAN, strm') = basefont_NT(strm) + val FULL_SPAN = (#1(basefont_SPAN), #2(basefont_SPAN)) + in + ((basefont_RES), FULL_SPAN, strm') + end + fun special_loose_PROD_3 (strm) = let + val (font_RES, font_SPAN, strm') = font_NT(strm) + val FULL_SPAN = (#1(font_SPAN), #2(font_SPAN)) + in + ((font_RES), FULL_SPAN, strm') + end + fun special_loose_PROD_4 (strm) = let + val (iframe_RES, iframe_SPAN, strm') = iframe_NT(strm) + val FULL_SPAN = (#1(iframe_SPAN), #2(iframe_SPAN)) + in + ((iframe_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTIFRAME(_), _, strm') => special_loose_PROD_4(strm) + | (Tok.STARTBASEFONT(_), _, strm') => special_loose_PROD_2(strm) + | (Tok.STARTAPPLET(_), _, strm') => special_loose_PROD_1(strm) + | (Tok.STARTFONT(_), _, strm') => special_loose_PROD_3(strm) + | _ => fail() + (* end case *)) + end +and iframe_NT (strm) = let + val (STARTIFRAME_RES, STARTIFRAME_SPAN, strm') = matchSTARTIFRAME(strm) + fun iframe_PROD_1_SUBRULE_1_NT (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + fun iframe_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (flow_RES, flow_SPAN, strm') = EBNF.closure(iframe_PROD_1_SUBRULE_1_PRED, iframe_PROD_1_SUBRULE_1_NT, strm') + val (ENDIFRAME_RES, ENDIFRAME_SPAN, strm') = matchENDIFRAME(strm') + val FULL_SPAN = (#1(STARTIFRAME_SPAN), #2(ENDIFRAME_SPAN)) + in + (UserCode.iframe_PROD_1_ACT (ENDIFRAME_RES, STARTIFRAME_RES, flow_RES, ENDIFRAME_SPAN : (Lex.pos * Lex.pos), STARTIFRAME_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and font_NT (strm) = let + val (STARTFONT_RES, STARTFONT_SPAN, strm') = matchSTARTFONT(strm) + fun font_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun font_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(font_PROD_1_SUBRULE_1_PRED, font_PROD_1_SUBRULE_1_NT, strm') + val (ENDFONT_RES, ENDFONT_SPAN, strm') = matchENDFONT(strm') + val FULL_SPAN = (#1(STARTFONT_SPAN), #2(ENDFONT_SPAN)) + in + (UserCode.font_PROD_1_ACT (inline_RES, ENDFONT_RES, STARTFONT_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDFONT_SPAN : (Lex.pos * Lex.pos), STARTFONT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and applet_NT (strm) = let + val (STARTAPPLET_RES, STARTAPPLET_SPAN, strm') = matchSTARTAPPLET(strm) + fun applet_PROD_1_SUBRULE_1_NT (strm) = let + fun applet_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (param_RES, param_SPAN, strm') = param_NT(strm) + val FULL_SPAN = (#1(param_SPAN), #2(param_SPAN)) + in + ((param_RES), FULL_SPAN, strm') + end + fun applet_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.PCDATA(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.CHAR_REF(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.ENTITY_REF(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTA(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTABBR(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTACRONYM(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTADDRESS(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTAPPLET(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTB(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBASEFONT(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBDO(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBIG(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBR(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBUTTON(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTCENTER(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTCITE(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTCODE(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDFN(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDIR(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDIV(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDL(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTEM(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFIELDSET(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFONT(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFORM(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH1(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH2(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH3(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH4(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH5(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH6(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTHR(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTI(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTIFRAME(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTIMG(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTINPUT(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTISINDEX(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTKBD(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTLABEL(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTMAP(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTMENU(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTOBJECT(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTOL(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTP(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTPRE(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTQ(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTS(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSAMP(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSCRIPT(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSELECT(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSMALL(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSPAN(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSTRIKE(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSTRONG(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSUB(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSUP(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTTABLE(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTTEXTAREA(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTTT(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTU(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTUL(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTVAR(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTPARAM(_), _, strm') => + applet_PROD_1_SUBRULE_1_PROD_1(strm) + | _ => fail() + (* end case *)) + end + fun applet_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPARAM(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.closure(applet_PROD_1_SUBRULE_1_PRED, applet_PROD_1_SUBRULE_1_NT, strm') + val (ENDAPPLET_RES, ENDAPPLET_SPAN, strm') = matchENDAPPLET(strm') + val FULL_SPAN = (#1(STARTAPPLET_SPAN), #2(ENDAPPLET_SPAN)) + in + (UserCode.applet_PROD_1_ACT (SR_RES, ENDAPPLET_RES, STARTAPPLET_RES, SR_SPAN : (Lex.pos * Lex.pos), ENDAPPLET_SPAN : (Lex.pos * Lex.pos), STARTAPPLET_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and bdo_NT (strm) = let + val (STARTBDO_RES, STARTBDO_SPAN, strm') = matchSTARTBDO(strm) + fun bdo_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun bdo_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(bdo_PROD_1_SUBRULE_1_PRED, bdo_PROD_1_SUBRULE_1_NT, strm') + val (ENDBDO_RES, ENDBDO_SPAN, strm') = matchENDBDO(strm') + val FULL_SPAN = (#1(STARTBDO_SPAN), #2(ENDBDO_SPAN)) + in + (UserCode.bdo_PROD_1_ACT (inline_RES, ENDBDO_RES, STARTBDO_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDBDO_SPAN : (Lex.pos * Lex.pos), STARTBDO_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and span_NT (strm) = let + val (STARTSPAN_RES, STARTSPAN_SPAN, strm') = matchSTARTSPAN(strm) + fun span_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun span_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(span_PROD_1_SUBRULE_1_PRED, span_PROD_1_SUBRULE_1_NT, strm') + val (ENDSPAN_RES, ENDSPAN_SPAN, strm') = matchENDSPAN(strm') + val FULL_SPAN = (#1(STARTSPAN_SPAN), #2(ENDSPAN_SPAN)) + in + (UserCode.span_PROD_1_ACT (inline_RES, STARTSPAN_RES, ENDSPAN_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTSPAN_SPAN : (Lex.pos * Lex.pos), ENDSPAN_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and sup_NT (strm) = let + val (STARTSUP_RES, STARTSUP_SPAN, strm') = matchSTARTSUP(strm) + fun sup_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun sup_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(sup_PROD_1_SUBRULE_1_PRED, sup_PROD_1_SUBRULE_1_NT, strm') + val (ENDSUP_RES, ENDSUP_SPAN, strm') = matchENDSUP(strm') + val FULL_SPAN = (#1(STARTSUP_SPAN), #2(ENDSUP_SPAN)) + in + (UserCode.sup_PROD_1_ACT (inline_RES, ENDSUP_RES, STARTSUP_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDSUP_SPAN : (Lex.pos * Lex.pos), STARTSUP_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and sub_NT (strm) = let + val (STARTSUB_RES, STARTSUB_SPAN, strm') = matchSTARTSUB(strm) + fun sub_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun sub_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(sub_PROD_1_SUBRULE_1_PRED, sub_PROD_1_SUBRULE_1_NT, strm') + val (ENDSUB_RES, ENDSUB_SPAN, strm') = matchENDSUB(strm') + val FULL_SPAN = (#1(STARTSUB_SPAN), #2(ENDSUB_SPAN)) + in + (UserCode.sub_PROD_1_ACT (inline_RES, ENDSUB_RES, STARTSUB_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDSUB_SPAN : (Lex.pos * Lex.pos), STARTSUB_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and q_NT (strm) = let + val (STARTQ_RES, STARTQ_SPAN, strm') = matchSTARTQ(strm) + fun q_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun q_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(q_PROD_1_SUBRULE_1_PRED, q_PROD_1_SUBRULE_1_NT, strm') + val (ENDQ_RES, ENDQ_SPAN, strm') = matchENDQ(strm') + val FULL_SPAN = (#1(STARTQ_SPAN), #2(ENDQ_SPAN)) + in + (UserCode.q_PROD_1_ACT (inline_RES, STARTQ_RES, ENDQ_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTQ_SPAN : (Lex.pos * Lex.pos), ENDQ_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and map_NT (strm) = let + val (STARTMAP_RES, STARTMAP_SPAN, strm') = matchSTARTMAP(strm) + fun map_PROD_1_SUBRULE_1_NT (strm) = let + fun map_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (cdata_RES, cdata_SPAN, strm') = cdata_NT(strm) + val FULL_SPAN = (#1(cdata_SPAN), #2(cdata_SPAN)) + in + ((cdata_RES), FULL_SPAN, strm') + end + fun map_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (block_RES, block_SPAN, strm') = block_NT(strm) + val FULL_SPAN = (#1(block_SPAN), #2(block_SPAN)) + in + ((block_RES), FULL_SPAN, strm') + end + fun map_PROD_1_SUBRULE_1_PROD_3 (strm) = let + val (area_RES, area_SPAN, strm') = area_NT(strm) + val FULL_SPAN = (#1(area_SPAN), #2(area_SPAN)) + in + ((area_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTAREA(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_3(strm) + | (Tok.COMMENT(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.PCDATA(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.CHAR_REF(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.ENTITY_REF(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTADDRESS(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTCENTER(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDIR(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDIV(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDL(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFIELDSET(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFORM(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH1(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH2(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH3(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH4(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH5(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH6(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTHR(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTISINDEX(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTMENU(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTOL(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTP(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTPRE(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTTABLE(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTUL(_), _, strm') => + map_PROD_1_SUBRULE_1_PROD_2(strm) + | _ => fail() + (* end case *)) + end + fun map_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAREA(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.posclos(map_PROD_1_SUBRULE_1_PRED, map_PROD_1_SUBRULE_1_NT, strm') + val (ENDMAP_RES, ENDMAP_SPAN, strm') = matchENDMAP(strm') + val FULL_SPAN = (#1(STARTMAP_SPAN), #2(ENDMAP_SPAN)) + in + (UserCode.map_PROD_1_ACT (SR_RES, STARTMAP_RES, ENDMAP_RES, SR_SPAN : (Lex.pos * Lex.pos), STARTMAP_SPAN : (Lex.pos * Lex.pos), ENDMAP_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and block_NT (strm) = let + fun block_PROD_1 (strm) = let + val (p_RES, p_SPAN, strm') = p_NT(strm) + val FULL_SPAN = (#1(p_SPAN), #2(p_SPAN)) + in + ((p_RES), FULL_SPAN, strm') + end + fun block_PROD_2 (strm) = let + val (heading_RES, heading_SPAN, strm') = heading_NT(strm) + val FULL_SPAN = (#1(heading_SPAN), #2(heading_SPAN)) + in + ((heading_RES), FULL_SPAN, strm') + end + fun block_PROD_3 (strm) = let + val (list_RES, list_SPAN, strm') = list_NT(strm) + val FULL_SPAN = (#1(list_SPAN), #2(list_SPAN)) + in + ((list_RES), FULL_SPAN, strm') + end + fun block_PROD_4 (strm) = let + val (preformatted_RES, preformatted_SPAN, strm') = preformatted_NT(strm) + val FULL_SPAN = (#1(preformatted_SPAN), #2(preformatted_SPAN)) + in + ((preformatted_RES), FULL_SPAN, strm') + end + fun block_PROD_5 (strm) = let + val (dl_RES, dl_SPAN, strm') = dl_NT(strm) + val FULL_SPAN = (#1(dl_SPAN), #2(dl_SPAN)) + in + ((dl_RES), FULL_SPAN, strm') + end + fun block_PROD_6 (strm) = let + val (div_RES, div_SPAN, strm') = div_NT(strm) + val FULL_SPAN = (#1(div_SPAN), #2(div_SPAN)) + in + ((div_RES), FULL_SPAN, strm') + end + fun block_PROD_7 (strm) = let + val (noscript_RES, noscript_SPAN, strm') = noscript_NT(strm) + val FULL_SPAN = (#1(noscript_SPAN), #2(noscript_SPAN)) + in + ((noscript_RES), FULL_SPAN, strm') + end + fun block_PROD_8 (strm) = let + val (blockquote_RES, blockquote_SPAN, strm') = blockquote_NT(strm) + val FULL_SPAN = (#1(blockquote_SPAN), #2(blockquote_SPAN)) + in + ((blockquote_RES), FULL_SPAN, strm') + end + fun block_PROD_9 (strm) = let + val (form_RES, form_SPAN, strm') = form_NT(strm) + val FULL_SPAN = (#1(form_SPAN), #2(form_SPAN)) + in + ((form_RES), FULL_SPAN, strm') + end + fun block_PROD_10 (strm) = let + val (hr_RES, hr_SPAN, strm') = hr_NT(strm) + val FULL_SPAN = (#1(hr_SPAN), #2(hr_SPAN)) + in + ((hr_RES), FULL_SPAN, strm') + end + fun block_PROD_11 (strm) = let + val (table_RES, table_SPAN, strm') = table_NT(strm) + val FULL_SPAN = (#1(table_SPAN), #2(table_SPAN)) + in + ((table_RES), FULL_SPAN, strm') + end + fun block_PROD_12 (strm) = let + val (fieldset_RES, fieldset_SPAN, strm') = fieldset_NT(strm) + val FULL_SPAN = (#1(fieldset_SPAN), #2(fieldset_SPAN)) + in + ((fieldset_RES), FULL_SPAN, strm') + end + fun block_PROD_13 (strm) = let + val (address_RES, address_SPAN, strm') = address_NT(strm) + val FULL_SPAN = (#1(address_SPAN), #2(address_SPAN)) + in + ((address_RES), FULL_SPAN, strm') + end + fun block_PROD_14 (strm) = let + val (block_loose_RES, block_loose_SPAN, strm') = block_loose_NT(strm) + val FULL_SPAN = (#1(block_loose_SPAN), #2(block_loose_SPAN)) + in + ((block_loose_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTCENTER(_), _, strm') => block_PROD_14(strm) + | (Tok.STARTISINDEX(_), _, strm') => block_PROD_14(strm) + | (Tok.STARTFIELDSET(_), _, strm') => block_PROD_12(strm) + | (Tok.STARTHR(_), _, strm') => block_PROD_10(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => block_PROD_8(strm) + | (Tok.STARTDIV(_), _, strm') => block_PROD_6(strm) + | (Tok.STARTPRE(_), _, strm') => block_PROD_4(strm) + | (Tok.STARTH1(_), _, strm') => block_PROD_2(strm) + | (Tok.STARTH2(_), _, strm') => block_PROD_2(strm) + | (Tok.STARTH3(_), _, strm') => block_PROD_2(strm) + | (Tok.STARTH4(_), _, strm') => block_PROD_2(strm) + | (Tok.STARTH5(_), _, strm') => block_PROD_2(strm) + | (Tok.STARTH6(_), _, strm') => block_PROD_2(strm) + | (Tok.STARTP(_), _, strm') => block_PROD_1(strm) + | (Tok.STARTDIR(_), _, strm') => block_PROD_3(strm) + | (Tok.STARTMENU(_), _, strm') => block_PROD_3(strm) + | (Tok.STARTOL(_), _, strm') => block_PROD_3(strm) + | (Tok.STARTUL(_), _, strm') => block_PROD_3(strm) + | (Tok.STARTDL(_), _, strm') => block_PROD_5(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => block_PROD_7(strm) + | (Tok.STARTFORM(_), _, strm') => block_PROD_9(strm) + | (Tok.STARTTABLE(_), _, strm') => block_PROD_11(strm) + | (Tok.STARTADDRESS(_), _, strm') => block_PROD_13(strm) + | _ => fail() + (* end case *)) + end +and block_loose_NT (strm) = let + fun block_loose_PROD_1 (strm) = let + val (center_RES, center_SPAN, strm') = center_NT(strm) + val FULL_SPAN = (#1(center_SPAN), #2(center_SPAN)) + in + ((center_RES), FULL_SPAN, strm') + end + fun block_loose_PROD_2 (strm) = let + val (isindex_RES, isindex_SPAN, strm') = isindex_NT(strm) + val FULL_SPAN = (#1(isindex_SPAN), #2(isindex_SPAN)) + in + ((isindex_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTISINDEX(_), _, strm') => block_loose_PROD_2(strm) + | (Tok.STARTCENTER(_), _, strm') => block_loose_PROD_1(strm) + | _ => fail() + (* end case *)) + end +and center_NT (strm) = let + val (STARTCENTER_RES, STARTCENTER_SPAN, strm') = matchSTARTCENTER(strm) + fun center_PROD_1_SUBRULE_1_NT (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + fun center_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (flow_RES, flow_SPAN, strm') = EBNF.closure(center_PROD_1_SUBRULE_1_PRED, center_PROD_1_SUBRULE_1_NT, strm') + val (ENDCENTER_RES, ENDCENTER_SPAN, strm') = matchENDCENTER(strm') + val FULL_SPAN = (#1(STARTCENTER_SPAN), #2(ENDCENTER_SPAN)) + in + (UserCode.center_PROD_1_ACT (ENDCENTER_RES, flow_RES, STARTCENTER_RES, ENDCENTER_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), STARTCENTER_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and address_NT (strm) = let + val (STARTADDRESS_RES, STARTADDRESS_SPAN, strm') = matchSTARTADDRESS(strm) + fun address_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun address_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(address_PROD_1_SUBRULE_1_PRED, address_PROD_1_SUBRULE_1_NT, strm') + val (ENDADDRESS_RES, ENDADDRESS_SPAN, strm') = matchENDADDRESS(strm') + val FULL_SPAN = (#1(STARTADDRESS_SPAN), #2(ENDADDRESS_SPAN)) + in + (UserCode.address_PROD_1_ACT (inline_RES, STARTADDRESS_RES, ENDADDRESS_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTADDRESS_SPAN : (Lex.pos * Lex.pos), ENDADDRESS_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and fieldset_NT (strm) = let + val (STARTFIELDSET_RES, STARTFIELDSET_SPAN, strm') = matchSTARTFIELDSET(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val (legend_RES, legend_SPAN, strm') = legend_NT(strm') + fun fieldset_PROD_1_SUBRULE_1_NT (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + fun fieldset_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (flow_RES, flow_SPAN, strm') = EBNF.closure(fieldset_PROD_1_SUBRULE_1_PRED, fieldset_PROD_1_SUBRULE_1_NT, strm') + val (ENDFIELDSET_RES, ENDFIELDSET_SPAN, strm') = matchENDFIELDSET(strm') + val FULL_SPAN = (#1(STARTFIELDSET_SPAN), #2(ENDFIELDSET_SPAN)) + in + (UserCode.fieldset_PROD_1_ACT (cdata_opt_RES, legend_RES, flow_RES, ENDFIELDSET_RES, STARTFIELDSET_RES, cdata_opt_SPAN : (Lex.pos * Lex.pos), legend_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), ENDFIELDSET_SPAN : (Lex.pos * Lex.pos), STARTFIELDSET_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and legend_NT (strm) = let + val (STARTLEGEND_RES, STARTLEGEND_SPAN, strm') = matchSTARTLEGEND(strm) + fun legend_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun legend_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(legend_PROD_1_SUBRULE_1_PRED, legend_PROD_1_SUBRULE_1_NT, strm') + val (ENDLEGEND_RES, ENDLEGEND_SPAN, strm') = matchENDLEGEND(strm') + val FULL_SPAN = (#1(STARTLEGEND_SPAN), #2(ENDLEGEND_SPAN)) + in + (UserCode.legend_PROD_1_ACT (inline_RES, ENDLEGEND_RES, STARTLEGEND_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDLEGEND_SPAN : (Lex.pos * Lex.pos), STARTLEGEND_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and table_NT (strm) = let + val (STARTTABLE_RES, STARTTABLE_SPAN, strm') = matchSTARTTABLE(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun table_PROD_1_SUBRULE_1_NT (strm) = let + val (caption_RES, caption_SPAN, strm') = caption_NT(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(caption_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.table_PROD_1_SUBRULE_1_PROD_1_ACT (STARTTABLE_RES, cdata_opt_RES, caption_RES, STARTTABLE_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), caption_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun table_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTCAPTION(_), _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.optional(table_PROD_1_SUBRULE_1_PRED, table_PROD_1_SUBRULE_1_NT, strm') + val (col_or_colgroups_RES, col_or_colgroups_SPAN, strm') = col_or_colgroups_NT(strm') + val (table_content_RES, table_content_SPAN, strm') = table_content_NT(strm') + val (ENDTABLE_RES, ENDTABLE_SPAN, strm') = matchENDTABLE(strm') + val FULL_SPAN = (#1(STARTTABLE_SPAN), #2(ENDTABLE_SPAN)) + in + (UserCode.table_PROD_1_ACT (SR_RES, STARTTABLE_RES, cdata_opt_RES, table_content_RES, ENDTABLE_RES, col_or_colgroups_RES, SR_SPAN : (Lex.pos * Lex.pos), STARTTABLE_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), table_content_SPAN : (Lex.pos * Lex.pos), ENDTABLE_SPAN : (Lex.pos * Lex.pos), col_or_colgroups_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and table_content_NT (strm) = let + fun table_content_PROD_1 (strm) = let + val (thead_RES, thead_SPAN, strm') = thead_NT(strm) + fun table_content_PROD_1_SUBRULE_1_NT (strm) = let + val (tfoot_RES, tfoot_SPAN, strm') = tfoot_NT(strm) + val FULL_SPAN = (#1(tfoot_SPAN), #2(tfoot_SPAN)) + in + ((tfoot_RES), FULL_SPAN, strm') + end + fun table_content_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTTFOOT(_), _, strm') => true + | _ => false + (* end case *)) + val (tfoot_RES, tfoot_SPAN, strm') = EBNF.optional(table_content_PROD_1_SUBRULE_1_PRED, table_content_PROD_1_SUBRULE_1_NT, strm') + val (tbodies_RES, tbodies_SPAN, strm') = tbodies_NT(strm') + val FULL_SPAN = (#1(thead_SPAN), #2(tbodies_SPAN)) + in + (UserCode.table_content_PROD_1_ACT (tbodies_RES, tfoot_RES, thead_RES, tbodies_SPAN : (Lex.pos * Lex.pos), tfoot_SPAN : (Lex.pos * Lex.pos), thead_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun table_content_PROD_2 (strm) = let + val (tfoot_RES, tfoot_SPAN, strm') = tfoot_NT(strm) + val (tbodies_RES, tbodies_SPAN, strm') = tbodies_NT(strm') + val FULL_SPAN = (#1(tfoot_SPAN), #2(tbodies_SPAN)) + in + (UserCode.table_content_PROD_2_ACT (tbodies_RES, tfoot_RES, tbodies_SPAN : (Lex.pos * Lex.pos), tfoot_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun table_content_PROD_3 (strm) = let + val (tbodies_nostart_RES, tbodies_nostart_SPAN, strm') = tbodies_nostart_NT(strm) + val FULL_SPAN = (#1(tbodies_nostart_SPAN), + #2(tbodies_nostart_SPAN)) + in + ((tbodies_nostart_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTTBODY(_), _, strm') => table_content_PROD_3(strm) + | (Tok.STARTTR(_), _, strm') => table_content_PROD_3(strm) + | (Tok.STARTTHEAD(_), _, strm') => table_content_PROD_1(strm) + | (Tok.STARTTFOOT(_), _, strm') => table_content_PROD_2(strm) + | _ => fail() + (* end case *)) + end +and tbodies_nostart_NT (strm) = let + fun tbodies_nostart_PROD_1_SUBRULE_1_NT (strm) = let + val (STARTTBODY_RES, STARTTBODY_SPAN, strm') = matchSTARTTBODY(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(STARTTBODY_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.tbodies_nostart_PROD_1_SUBRULE_1_PROD_1_ACT (cdata_opt_RES, STARTTBODY_RES, cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTBODY_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun tbodies_nostart_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTTBODY(_), _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.optional(tbodies_nostart_PROD_1_SUBRULE_1_PRED, tbodies_nostart_PROD_1_SUBRULE_1_NT, strm) + fun tbodies_nostart_PROD_1_SUBRULE_2_NT (strm) = let + val (tr_RES, tr_SPAN, strm') = tr_NT(strm) + val FULL_SPAN = (#1(tr_SPAN), #2(tr_SPAN)) + in + ((tr_RES), FULL_SPAN, strm') + end + fun tbodies_nostart_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.STARTTR(_), _, strm') => true + | _ => false + (* end case *)) + val (tr_RES, tr_SPAN, strm') = EBNF.posclos(tbodies_nostart_PROD_1_SUBRULE_2_PRED, tbodies_nostart_PROD_1_SUBRULE_2_NT, strm') + fun tbodies_nostart_PROD_1_SUBRULE_3_NT (strm) = let + val (tbodies_rest_RES, tbodies_rest_SPAN, strm') = tbodies_rest_NT(strm) + val FULL_SPAN = (#1(tbodies_rest_SPAN), #2(tbodies_rest_SPAN)) + in + ((tbodies_rest_RES), FULL_SPAN, strm') + end + fun tbodies_nostart_PROD_1_SUBRULE_3_PRED (strm) = (case (lex(strm)) + of (Tok.STARTTBODY(_), _, strm') => true + | (Tok.ENDTBODY, _, strm') => true + | _ => false + (* end case *)) + val (tbodies_rest_RES, tbodies_rest_SPAN, strm') = EBNF.optional(tbodies_nostart_PROD_1_SUBRULE_3_PRED, tbodies_nostart_PROD_1_SUBRULE_3_NT, strm') + val FULL_SPAN = (#1(SR_SPAN), #2(tbodies_rest_SPAN)) + in + (UserCode.tbodies_nostart_PROD_1_ACT (tr_RES, SR_RES, tbodies_rest_RES, tr_SPAN : (Lex.pos * Lex.pos), SR_SPAN : (Lex.pos * Lex.pos), tbodies_rest_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and tbodies_rest_NT (strm) = let + fun tbodies_rest_PROD_1 (strm) = let + val (ENDTBODY_RES, ENDTBODY_SPAN, strm') = matchENDTBODY(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun tbodies_rest_PROD_1_SUBRULE_1_NT (strm) = let + val (tbodies_RES, tbodies_SPAN, strm') = tbodies_NT(strm) + val FULL_SPAN = (#1(tbodies_SPAN), #2(tbodies_SPAN)) + in + ((tbodies_RES), FULL_SPAN, strm') + end + fun tbodies_rest_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTTBODY(_), _, strm') => true + | _ => false + (* end case *)) + val (tbodies_RES, tbodies_SPAN, strm') = EBNF.optional(tbodies_rest_PROD_1_SUBRULE_1_PRED, tbodies_rest_PROD_1_SUBRULE_1_NT, strm') + val FULL_SPAN = (#1(ENDTBODY_SPAN), #2(tbodies_SPAN)) + in + (UserCode.tbodies_rest_PROD_1_ACT (cdata_opt_RES, tbodies_RES, ENDTBODY_RES, cdata_opt_SPAN : (Lex.pos * Lex.pos), tbodies_SPAN : (Lex.pos * Lex.pos), ENDTBODY_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun tbodies_rest_PROD_2 (strm) = let + val (STARTTBODY_RES, STARTTBODY_SPAN, strm') = matchSTARTTBODY(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun tbodies_rest_PROD_2_SUBRULE_1_NT (strm) = let + val (tr_RES, tr_SPAN, strm') = tr_NT(strm) + val FULL_SPAN = (#1(tr_SPAN), #2(tr_SPAN)) + in + ((tr_RES), FULL_SPAN, strm') + end + fun tbodies_rest_PROD_2_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTTR(_), _, strm') => true + | _ => false + (* end case *)) + val (tr_RES, tr_SPAN, strm') = EBNF.posclos(tbodies_rest_PROD_2_SUBRULE_1_PRED, tbodies_rest_PROD_2_SUBRULE_1_NT, strm') + fun tbodies_rest_PROD_2_SUBRULE_2_NT (strm) = let + val (tbodies_rest_RES, tbodies_rest_SPAN, strm') = tbodies_rest_NT(strm) + val FULL_SPAN = (#1(tbodies_rest_SPAN), + #2(tbodies_rest_SPAN)) + in + ((tbodies_rest_RES), FULL_SPAN, strm') + end + fun tbodies_rest_PROD_2_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.STARTTBODY(_), _, strm') => true + | (Tok.ENDTBODY, _, strm') => true + | _ => false + (* end case *)) + val (tbodies_rest_RES, tbodies_rest_SPAN, strm') = EBNF.optional(tbodies_rest_PROD_2_SUBRULE_2_PRED, tbodies_rest_PROD_2_SUBRULE_2_NT, strm') + val FULL_SPAN = (#1(STARTTBODY_SPAN), #2(tbodies_rest_SPAN)) + in + (UserCode.tbodies_rest_PROD_2_ACT (tr_RES, cdata_opt_RES, STARTTBODY_RES, tbodies_rest_RES, tr_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTBODY_SPAN : (Lex.pos * Lex.pos), tbodies_rest_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTTBODY(_), _, strm') => tbodies_rest_PROD_2(strm) + | (Tok.ENDTBODY, _, strm') => tbodies_rest_PROD_1(strm) + | _ => fail() + (* end case *)) + end +and tr_NT (strm) = let + val (STARTTR_RES, STARTTR_SPAN, strm') = matchSTARTTR(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun tr_PROD_1_SUBRULE_1_NT (strm) = let + fun tr_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (th_RES, th_SPAN, strm') = th_NT(strm) + val FULL_SPAN = (#1(th_SPAN), #2(th_SPAN)) + in + ((th_RES), FULL_SPAN, strm') + end + fun tr_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (td_RES, td_SPAN, strm') = td_NT(strm) + val FULL_SPAN = (#1(td_SPAN), #2(td_SPAN)) + in + ((td_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTTD(_), _, strm') => + tr_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTTH(_), _, strm') => + tr_PROD_1_SUBRULE_1_PROD_1(strm) + | _ => fail() + (* end case *)) + end + fun tr_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTTD(_), _, strm') => true + | (Tok.STARTTH(_), _, strm') => true + | _ => false + (* end case *)) + val (SR1_RES, SR1_SPAN, strm') = EBNF.posclos(tr_PROD_1_SUBRULE_1_PRED, tr_PROD_1_SUBRULE_1_NT, strm') + fun tr_PROD_1_SUBRULE_2_NT (strm) = let + val (ENDTR_RES, ENDTR_SPAN, strm') = matchENDTR(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(ENDTR_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.tr_PROD_1_SUBRULE_2_PROD_1_ACT (ENDTR_RES, SR1_RES, cdata_opt_RES, STARTTR_RES, ENDTR_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun tr_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.ENDTR, _, strm') => true + | _ => false + (* end case *)) + val (SR2_RES, SR2_SPAN, strm') = EBNF.optional(tr_PROD_1_SUBRULE_2_PRED, tr_PROD_1_SUBRULE_2_NT, strm') + val FULL_SPAN = (#1(STARTTR_SPAN), #2(SR2_SPAN)) + in + (UserCode.tr_PROD_1_ACT (SR1_RES, SR2_RES, cdata_opt_RES, STARTTR_RES, SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and td_NT (strm) = let + val (STARTTD_RES, STARTTD_SPAN, strm') = matchSTARTTD(strm) + fun td_PROD_1_SUBRULE_1_NT (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + fun td_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (flow_RES, flow_SPAN, strm') = EBNF.closure(td_PROD_1_SUBRULE_1_PRED, td_PROD_1_SUBRULE_1_NT, strm') + fun td_PROD_1_SUBRULE_2_NT (strm) = let + val (ENDTD_RES, ENDTD_SPAN, strm') = matchENDTD(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(ENDTD_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.td_PROD_1_SUBRULE_2_PROD_1_ACT (ENDTD_RES, cdata_opt_RES, STARTTD_RES, flow_RES, ENDTD_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTD_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun td_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.ENDTD, _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.optional(td_PROD_1_SUBRULE_2_PRED, td_PROD_1_SUBRULE_2_NT, strm') + val FULL_SPAN = (#1(STARTTD_SPAN), #2(SR_SPAN)) + in + (UserCode.td_PROD_1_ACT (SR_RES, STARTTD_RES, flow_RES, SR_SPAN : (Lex.pos * Lex.pos), STARTTD_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and th_NT (strm) = let + val (STARTTH_RES, STARTTH_SPAN, strm') = matchSTARTTH(strm) + fun th_PROD_1_SUBRULE_1_NT (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + fun th_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (flow_RES, flow_SPAN, strm') = EBNF.closure(th_PROD_1_SUBRULE_1_PRED, th_PROD_1_SUBRULE_1_NT, strm') + fun th_PROD_1_SUBRULE_2_NT (strm) = let + val (ENDTH_RES, ENDTH_SPAN, strm') = matchENDTH(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(ENDTH_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.th_PROD_1_SUBRULE_2_PROD_1_ACT (ENDTH_RES, cdata_opt_RES, STARTTH_RES, flow_RES, ENDTH_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTH_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun th_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.ENDTH, _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.optional(th_PROD_1_SUBRULE_2_PRED, th_PROD_1_SUBRULE_2_NT, strm') + val FULL_SPAN = (#1(STARTTH_SPAN), #2(SR_SPAN)) + in + (UserCode.th_PROD_1_ACT (SR_RES, STARTTH_RES, flow_RES, SR_SPAN : (Lex.pos * Lex.pos), STARTTH_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and tbodies_NT (strm) = let + val (STARTTBODY_RES, STARTTBODY_SPAN, strm') = matchSTARTTBODY(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun tbodies_PROD_1_SUBRULE_1_NT (strm) = let + val (tr_RES, tr_SPAN, strm') = tr_NT(strm) + val FULL_SPAN = (#1(tr_SPAN), #2(tr_SPAN)) + in + ((tr_RES), FULL_SPAN, strm') + end + fun tbodies_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTTR(_), _, strm') => true + | _ => false + (* end case *)) + val (tr_RES, tr_SPAN, strm') = EBNF.posclos(tbodies_PROD_1_SUBRULE_1_PRED, tbodies_PROD_1_SUBRULE_1_NT, strm') + val (tbodies_rest_RES, tbodies_rest_SPAN, strm') = tbodies_rest_NT(strm') + val FULL_SPAN = (#1(STARTTBODY_SPAN), #2(tbodies_rest_SPAN)) + in + (UserCode.tbodies_PROD_1_ACT (tr_RES, cdata_opt_RES, STARTTBODY_RES, tbodies_rest_RES, tr_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTTBODY_SPAN : (Lex.pos * Lex.pos), tbodies_rest_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and tfoot_NT (strm) = let + val (STARTTFOOT_RES, STARTTFOOT_SPAN, strm') = matchSTARTTFOOT(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun tfoot_PROD_1_SUBRULE_1_NT (strm) = let + val (tr_RES, tr_SPAN, strm') = tr_NT(strm) + val FULL_SPAN = (#1(tr_SPAN), #2(tr_SPAN)) + in + ((tr_RES), FULL_SPAN, strm') + end + fun tfoot_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTTR(_), _, strm') => true + | _ => false + (* end case *)) + val (tr_RES, tr_SPAN, strm') = EBNF.posclos(tfoot_PROD_1_SUBRULE_1_PRED, tfoot_PROD_1_SUBRULE_1_NT, strm') + fun tfoot_PROD_1_SUBRULE_2_NT (strm) = let + val (ENDTFOOT_RES, ENDTFOOT_SPAN, strm') = matchENDTFOOT(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(ENDTFOOT_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.tfoot_PROD_1_SUBRULE_2_PROD_1_ACT (tr_RES, STARTTFOOT_RES, cdata_opt_RES, ENDTFOOT_RES, tr_SPAN : (Lex.pos * Lex.pos), STARTTFOOT_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDTFOOT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun tfoot_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.ENDTFOOT, _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.optional(tfoot_PROD_1_SUBRULE_2_PRED, tfoot_PROD_1_SUBRULE_2_NT, strm') + val FULL_SPAN = (#1(STARTTFOOT_SPAN), #2(SR_SPAN)) + in + (UserCode.tfoot_PROD_1_ACT (tr_RES, SR_RES, STARTTFOOT_RES, cdata_opt_RES, tr_SPAN : (Lex.pos * Lex.pos), SR_SPAN : (Lex.pos * Lex.pos), STARTTFOOT_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and thead_NT (strm) = let + val (STARTTHEAD_RES, STARTTHEAD_SPAN, strm') = matchSTARTTHEAD(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun thead_PROD_1_SUBRULE_1_NT (strm) = let + val (tr_RES, tr_SPAN, strm') = tr_NT(strm) + val FULL_SPAN = (#1(tr_SPAN), #2(tr_SPAN)) + in + ((tr_RES), FULL_SPAN, strm') + end + fun thead_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTTR(_), _, strm') => true + | _ => false + (* end case *)) + val (tr_RES, tr_SPAN, strm') = EBNF.posclos(thead_PROD_1_SUBRULE_1_PRED, thead_PROD_1_SUBRULE_1_NT, strm') + fun thead_PROD_1_SUBRULE_2_NT (strm) = let + val (ENDTHEAD_RES, ENDTHEAD_SPAN, strm') = matchENDTHEAD(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(ENDTHEAD_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.thead_PROD_1_SUBRULE_2_PROD_1_ACT (tr_RES, STARTTHEAD_RES, ENDTHEAD_RES, cdata_opt_RES, tr_SPAN : (Lex.pos * Lex.pos), STARTTHEAD_SPAN : (Lex.pos * Lex.pos), ENDTHEAD_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun thead_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.ENDTHEAD, _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.optional(thead_PROD_1_SUBRULE_2_PRED, thead_PROD_1_SUBRULE_2_NT, strm') + val FULL_SPAN = (#1(STARTTHEAD_SPAN), #2(SR_SPAN)) + in + (UserCode.thead_PROD_1_ACT (tr_RES, SR_RES, STARTTHEAD_RES, cdata_opt_RES, tr_SPAN : (Lex.pos * Lex.pos), SR_SPAN : (Lex.pos * Lex.pos), STARTTHEAD_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and caption_NT (strm) = let + val (STARTCAPTION_RES, STARTCAPTION_SPAN, strm') = matchSTARTCAPTION(strm) + fun caption_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun caption_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(caption_PROD_1_SUBRULE_1_PRED, caption_PROD_1_SUBRULE_1_NT, strm') + val (ENDCAPTION_RES, ENDCAPTION_SPAN, strm') = matchENDCAPTION(strm') + val FULL_SPAN = (#1(STARTCAPTION_SPAN), #2(ENDCAPTION_SPAN)) + in + (UserCode.caption_PROD_1_ACT (inline_RES, STARTCAPTION_RES, ENDCAPTION_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTCAPTION_SPAN : (Lex.pos * Lex.pos), ENDCAPTION_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and form_NT (strm) = let + val (STARTFORM_RES, STARTFORM_SPAN, strm') = matchSTARTFORM(strm) + fun form_PROD_1_SUBRULE_1_NT (strm) = let + fun form_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (cdata_RES, cdata_SPAN, strm') = cdata_NT(strm) + val FULL_SPAN = (#1(cdata_SPAN), #2(cdata_SPAN)) + in + ((cdata_RES), FULL_SPAN, strm') + end + fun form_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (block_RES, block_SPAN, strm') = block_NT(strm) + val FULL_SPAN = (#1(block_SPAN), #2(block_SPAN)) + in + ((block_RES), FULL_SPAN, strm') + end + fun form_PROD_1_SUBRULE_1_PROD_3 (strm) = let + val (script_RES, script_SPAN, strm') = script_NT(strm) + val FULL_SPAN = (#1(script_SPAN), #2(script_SPAN)) + in + ((script_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTSCRIPT(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_3(strm) + | (Tok.COMMENT(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.PCDATA(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.CHAR_REF(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.ENTITY_REF(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTADDRESS(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTCENTER(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDIR(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDIV(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDL(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFIELDSET(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFORM(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH1(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH2(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH3(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH4(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH5(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH6(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTHR(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTISINDEX(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTMENU(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTOL(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTP(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTPRE(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTTABLE(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTUL(_), _, strm') => + form_PROD_1_SUBRULE_1_PROD_2(strm) + | _ => fail() + (* end case *)) + end + fun form_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.posclos(form_PROD_1_SUBRULE_1_PRED, form_PROD_1_SUBRULE_1_NT, strm') + val (ENDFORM_RES, ENDFORM_SPAN, strm') = matchENDFORM(strm') + val FULL_SPAN = (#1(STARTFORM_SPAN), #2(ENDFORM_SPAN)) + in + (UserCode.form_PROD_1_ACT (SR_RES, ENDFORM_RES, STARTFORM_RES, SR_SPAN : (Lex.pos * Lex.pos), ENDFORM_SPAN : (Lex.pos * Lex.pos), STARTFORM_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and blockquote_NT (strm) = let + val (STARTBLOCKQUOTE_RES, STARTBLOCKQUOTE_SPAN, strm') = matchSTARTBLOCKQUOTE(strm) + fun blockquote_PROD_1_SUBRULE_1_NT (strm) = let + fun blockquote_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (block_RES, block_SPAN, strm') = block_NT(strm) + val FULL_SPAN = (#1(block_SPAN), #2(block_SPAN)) + in + ((block_RES), FULL_SPAN, strm') + end + fun blockquote_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (script_RES, script_SPAN, strm') = script_NT(strm) + val FULL_SPAN = (#1(script_SPAN), #2(script_SPAN)) + in + ((script_RES), FULL_SPAN, strm') + end + fun blockquote_PROD_1_SUBRULE_1_PROD_3 (strm) = let + val (cdata_RES, cdata_SPAN, strm') = cdata_NT(strm) + val FULL_SPAN = (#1(cdata_SPAN), #2(cdata_SPAN)) + in + ((cdata_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_3(strm) + | (Tok.PCDATA(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_3(strm) + | (Tok.CHAR_REF(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_3(strm) + | (Tok.ENTITY_REF(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_3(strm) + | (Tok.STARTADDRESS(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTCENTER(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTDIR(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTDIV(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTDL(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTFIELDSET(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTFORM(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH1(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH2(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH3(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH4(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH5(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH6(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTHR(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTISINDEX(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTMENU(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTOL(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTP(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTPRE(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTTABLE(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTUL(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTSCRIPT(_), _, strm') => + blockquote_PROD_1_SUBRULE_1_PROD_2(strm) + | _ => fail() + (* end case *)) + end + fun blockquote_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.posclos(blockquote_PROD_1_SUBRULE_1_PRED, blockquote_PROD_1_SUBRULE_1_NT, strm') + val (ENDBLOCKQUOTE_RES, ENDBLOCKQUOTE_SPAN, strm') = matchENDBLOCKQUOTE(strm') + val FULL_SPAN = (#1(STARTBLOCKQUOTE_SPAN), #2(ENDBLOCKQUOTE_SPAN)) + in + (UserCode.blockquote_PROD_1_ACT (SR_RES, STARTBLOCKQUOTE_RES, ENDBLOCKQUOTE_RES, SR_SPAN : (Lex.pos * Lex.pos), STARTBLOCKQUOTE_SPAN : (Lex.pos * Lex.pos), ENDBLOCKQUOTE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and noscript_NT (strm) = let + val (STARTNOSCRIPT_RES, STARTNOSCRIPT_SPAN, strm') = matchSTARTNOSCRIPT(strm) + fun noscript_PROD_1_SUBRULE_1_NT (strm) = let + fun noscript_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (cdata_RES, cdata_SPAN, strm') = cdata_NT(strm) + val FULL_SPAN = (#1(cdata_SPAN), #2(cdata_SPAN)) + in + ((cdata_RES), FULL_SPAN, strm') + end + fun noscript_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (block_RES, block_SPAN, strm') = block_NT(strm) + val FULL_SPAN = (#1(block_SPAN), #2(block_SPAN)) + in + ((block_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTADDRESS(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTCENTER(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDIR(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDIV(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDL(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFIELDSET(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFORM(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH1(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH2(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH3(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH4(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH5(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH6(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTHR(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTISINDEX(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTMENU(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTOL(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTP(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTPRE(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTTABLE(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTUL(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.COMMENT(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.PCDATA(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.CHAR_REF(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.ENTITY_REF(_), _, strm') => + noscript_PROD_1_SUBRULE_1_PROD_1(strm) + | _ => fail() + (* end case *)) + end + fun noscript_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.posclos(noscript_PROD_1_SUBRULE_1_PRED, noscript_PROD_1_SUBRULE_1_NT, strm') + val (ENDNOSCRIPT_RES, ENDNOSCRIPT_SPAN, strm') = matchENDNOSCRIPT(strm') + val FULL_SPAN = (#1(STARTNOSCRIPT_SPAN), #2(ENDNOSCRIPT_SPAN)) + in + (UserCode.noscript_PROD_1_ACT (SR_RES, ENDNOSCRIPT_RES, STARTNOSCRIPT_RES, SR_SPAN : (Lex.pos * Lex.pos), ENDNOSCRIPT_SPAN : (Lex.pos * Lex.pos), STARTNOSCRIPT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and div_NT (strm) = let + val (STARTDIV_RES, STARTDIV_SPAN, strm') = matchSTARTDIV(strm) + fun div_PROD_1_SUBRULE_1_NT (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + fun div_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (flow_RES, flow_SPAN, strm') = EBNF.closure(div_PROD_1_SUBRULE_1_PRED, div_PROD_1_SUBRULE_1_NT, strm') + val (ENDDIV_RES, ENDDIV_SPAN, strm') = matchENDDIV(strm') + val FULL_SPAN = (#1(STARTDIV_SPAN), #2(ENDDIV_SPAN)) + in + (UserCode.div_PROD_1_ACT (flow_RES, ENDDIV_RES, STARTDIV_RES, flow_SPAN : (Lex.pos * Lex.pos), ENDDIV_SPAN : (Lex.pos * Lex.pos), STARTDIV_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and dl_NT (strm) = let + val (STARTDL_RES, STARTDL_SPAN, strm') = matchSTARTDL(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun dl_PROD_1_SUBRULE_1_NT (strm) = let + fun dl_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (dt_RES, dt_SPAN, strm') = dt_NT(strm) + val FULL_SPAN = (#1(dt_SPAN), #2(dt_SPAN)) + in + ((dt_RES), FULL_SPAN, strm') + end + fun dl_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (dd_RES, dd_SPAN, strm') = dd_NT(strm) + val FULL_SPAN = (#1(dd_SPAN), #2(dd_SPAN)) + in + ((dd_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTDD(_), _, strm') => + dl_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDT(_), _, strm') => + dl_PROD_1_SUBRULE_1_PROD_1(strm) + | _ => fail() + (* end case *)) + end + fun dl_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTDD(_), _, strm') => true + | (Tok.STARTDT(_), _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.posclos(dl_PROD_1_SUBRULE_1_PRED, dl_PROD_1_SUBRULE_1_NT, strm') + val (ENDDL_RES, ENDDL_SPAN, strm') = matchENDDL(strm') + val FULL_SPAN = (#1(STARTDL_SPAN), #2(ENDDL_SPAN)) + in + (UserCode.dl_PROD_1_ACT (ENDDL_RES, SR_RES, cdata_opt_RES, STARTDL_RES, ENDDL_SPAN : (Lex.pos * Lex.pos), SR_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTDL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and dd_NT (strm) = let + val (STARTDD_RES, STARTDD_SPAN, strm') = matchSTARTDD(strm) + fun dd_PROD_1_SUBRULE_1_NT (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + fun dd_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (flow_RES, flow_SPAN, strm') = EBNF.closure(dd_PROD_1_SUBRULE_1_PRED, dd_PROD_1_SUBRULE_1_NT, strm') + fun dd_PROD_1_SUBRULE_2_NT (strm) = let + val (ENDDD_RES, ENDDD_SPAN, strm') = matchENDDD(strm) + val FULL_SPAN = (#1(ENDDD_SPAN), #2(ENDDD_SPAN)) + in + (UserCode.dd_PROD_1_SUBRULE_2_PROD_1_ACT (ENDDD_RES, STARTDD_RES, flow_RES, ENDDD_SPAN : (Lex.pos * Lex.pos), STARTDD_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun dd_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.ENDDD, _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.optional(dd_PROD_1_SUBRULE_2_PRED, dd_PROD_1_SUBRULE_2_NT, strm') + val FULL_SPAN = (#1(STARTDD_SPAN), #2(SR_SPAN)) + in + (UserCode.dd_PROD_1_ACT (SR_RES, STARTDD_RES, flow_RES, SR_SPAN : (Lex.pos * Lex.pos), STARTDD_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and dt_NT (strm) = let + val (STARTDT_RES, STARTDT_SPAN, strm') = matchSTARTDT(strm) + fun dt_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun dt_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(dt_PROD_1_SUBRULE_1_PRED, dt_PROD_1_SUBRULE_1_NT, strm') + fun dt_PROD_1_SUBRULE_2_NT (strm) = let + val (ENDDT_RES, ENDDT_SPAN, strm') = matchENDDT(strm) + val FULL_SPAN = (#1(ENDDT_SPAN), #2(ENDDT_SPAN)) + in + (UserCode.dt_PROD_1_SUBRULE_2_PROD_1_ACT (ENDDT_RES, inline_RES, STARTDT_RES, ENDDT_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTDT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun dt_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.ENDDT, _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.optional(dt_PROD_1_SUBRULE_2_PRED, dt_PROD_1_SUBRULE_2_NT, strm') + val FULL_SPAN = (#1(STARTDT_SPAN), #2(SR_SPAN)) + in + (UserCode.dt_PROD_1_ACT (SR_RES, inline_RES, STARTDT_RES, SR_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTDT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and preformatted_NT (strm) = let + val (pre_RES, pre_SPAN, strm') = pre_NT(strm) + val FULL_SPAN = (#1(pre_SPAN), #2(pre_SPAN)) + in + ((pre_RES), FULL_SPAN, strm') + end +and pre_NT (strm) = let + val (STARTPRE_RES, STARTPRE_SPAN, strm') = matchSTARTPRE(strm) + fun pre_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun pre_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(pre_PROD_1_SUBRULE_1_PRED, pre_PROD_1_SUBRULE_1_NT, strm') + val (ENDPRE_RES, ENDPRE_SPAN, strm') = matchENDPRE(strm') + val FULL_SPAN = (#1(STARTPRE_SPAN), #2(ENDPRE_SPAN)) + in + (UserCode.pre_PROD_1_ACT (inline_RES, ENDPRE_RES, STARTPRE_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDPRE_SPAN : (Lex.pos * Lex.pos), STARTPRE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and list_NT (strm) = let + fun list_PROD_1 (strm) = let + val (ul_RES, ul_SPAN, strm') = ul_NT(strm) + val FULL_SPAN = (#1(ul_SPAN), #2(ul_SPAN)) + in + ((ul_RES), FULL_SPAN, strm') + end + fun list_PROD_2 (strm) = let + val (ol_RES, ol_SPAN, strm') = ol_NT(strm) + val FULL_SPAN = (#1(ol_SPAN), #2(ol_SPAN)) + in + ((ol_RES), FULL_SPAN, strm') + end + fun list_PROD_3 (strm) = let + val (list_loose_RES, list_loose_SPAN, strm') = list_loose_NT(strm) + val FULL_SPAN = (#1(list_loose_SPAN), #2(list_loose_SPAN)) + in + ((list_loose_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTDIR(_), _, strm') => list_PROD_3(strm) + | (Tok.STARTMENU(_), _, strm') => list_PROD_3(strm) + | (Tok.STARTUL(_), _, strm') => list_PROD_1(strm) + | (Tok.STARTOL(_), _, strm') => list_PROD_2(strm) + | _ => fail() + (* end case *)) + end +and list_loose_NT (strm) = let + fun list_loose_PROD_1 (strm) = let + val (dir_RES, dir_SPAN, strm') = dir_NT(strm) + val FULL_SPAN = (#1(dir_SPAN), #2(dir_SPAN)) + in + ((dir_RES), FULL_SPAN, strm') + end + fun list_loose_PROD_2 (strm) = let + val (menu_RES, menu_SPAN, strm') = menu_NT(strm) + val FULL_SPAN = (#1(menu_SPAN), #2(menu_SPAN)) + in + ((menu_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTMENU(_), _, strm') => list_loose_PROD_2(strm) + | (Tok.STARTDIR(_), _, strm') => list_loose_PROD_1(strm) + | _ => fail() + (* end case *)) + end +and menu_NT (strm) = let + val (STARTMENU_RES, STARTMENU_SPAN, strm') = matchSTARTMENU(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun menu_PROD_1_SUBRULE_1_NT (strm) = let + val (li_RES, li_SPAN, strm') = li_NT(strm) + val FULL_SPAN = (#1(li_SPAN), #2(li_SPAN)) + in + ((li_RES), FULL_SPAN, strm') + end + fun menu_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTLI(_), _, strm') => true + | _ => false + (* end case *)) + val (li_RES, li_SPAN, strm') = EBNF.posclos(menu_PROD_1_SUBRULE_1_PRED, menu_PROD_1_SUBRULE_1_NT, strm') + val (ENDMENU_RES, ENDMENU_SPAN, strm') = matchENDMENU(strm') + val FULL_SPAN = (#1(STARTMENU_SPAN), #2(ENDMENU_SPAN)) + in + (UserCode.menu_PROD_1_ACT (li_RES, cdata_opt_RES, STARTMENU_RES, ENDMENU_RES, li_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTMENU_SPAN : (Lex.pos * Lex.pos), ENDMENU_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and li_NT (strm) = let + val (STARTLI_RES, STARTLI_SPAN, strm') = matchSTARTLI(strm) + fun li_PROD_1_SUBRULE_1_NT (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + fun li_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (flow_RES, flow_SPAN, strm') = EBNF.closure(li_PROD_1_SUBRULE_1_PRED, li_PROD_1_SUBRULE_1_NT, strm') + fun li_PROD_1_SUBRULE_2_NT (strm) = let + val (ENDLI_RES, ENDLI_SPAN, strm') = matchENDLI(strm) + val FULL_SPAN = (#1(ENDLI_SPAN), #2(ENDLI_SPAN)) + in + (UserCode.li_PROD_1_SUBRULE_2_PROD_1_ACT (ENDLI_RES, STARTLI_RES, flow_RES, ENDLI_SPAN : (Lex.pos * Lex.pos), STARTLI_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun li_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.ENDLI, _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.optional(li_PROD_1_SUBRULE_2_PRED, li_PROD_1_SUBRULE_2_NT, strm') + val FULL_SPAN = (#1(STARTLI_SPAN), #2(SR_SPAN)) + in + (UserCode.li_PROD_1_ACT (SR_RES, STARTLI_RES, flow_RES, SR_SPAN : (Lex.pos * Lex.pos), STARTLI_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and dir_NT (strm) = let + val (STARTDIR_RES, STARTDIR_SPAN, strm') = matchSTARTDIR(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun dir_PROD_1_SUBRULE_1_NT (strm) = let + val (li_RES, li_SPAN, strm') = li_NT(strm) + val FULL_SPAN = (#1(li_SPAN), #2(li_SPAN)) + in + ((li_RES), FULL_SPAN, strm') + end + fun dir_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTLI(_), _, strm') => true + | _ => false + (* end case *)) + val (li_RES, li_SPAN, strm') = EBNF.posclos(dir_PROD_1_SUBRULE_1_PRED, dir_PROD_1_SUBRULE_1_NT, strm') + val (ENDDIR_RES, ENDDIR_SPAN, strm') = matchENDDIR(strm') + val FULL_SPAN = (#1(STARTDIR_SPAN), #2(ENDDIR_SPAN)) + in + (UserCode.dir_PROD_1_ACT (li_RES, cdata_opt_RES, ENDDIR_RES, STARTDIR_RES, li_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDDIR_SPAN : (Lex.pos * Lex.pos), STARTDIR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and ol_NT (strm) = let + val (STARTOL_RES, STARTOL_SPAN, strm') = matchSTARTOL(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun ol_PROD_1_SUBRULE_1_NT (strm) = let + val (li_RES, li_SPAN, strm') = li_NT(strm) + val FULL_SPAN = (#1(li_SPAN), #2(li_SPAN)) + in + ((li_RES), FULL_SPAN, strm') + end + fun ol_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTLI(_), _, strm') => true + | _ => false + (* end case *)) + val (li_RES, li_SPAN, strm') = EBNF.posclos(ol_PROD_1_SUBRULE_1_PRED, ol_PROD_1_SUBRULE_1_NT, strm') + val (ENDOL_RES, ENDOL_SPAN, strm') = matchENDOL(strm') + val FULL_SPAN = (#1(STARTOL_SPAN), #2(ENDOL_SPAN)) + in + (UserCode.ol_PROD_1_ACT (ENDOL_RES, li_RES, cdata_opt_RES, STARTOL_RES, ENDOL_SPAN : (Lex.pos * Lex.pos), li_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTOL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and ul_NT (strm) = let + val (STARTUL_RES, STARTUL_SPAN, strm') = matchSTARTUL(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + fun ul_PROD_1_SUBRULE_1_NT (strm) = let + val (li_RES, li_SPAN, strm') = li_NT(strm) + val FULL_SPAN = (#1(li_SPAN), #2(li_SPAN)) + in + ((li_RES), FULL_SPAN, strm') + end + fun ul_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTLI(_), _, strm') => true + | _ => false + (* end case *)) + val (li_RES, li_SPAN, strm') = EBNF.posclos(ul_PROD_1_SUBRULE_1_PRED, ul_PROD_1_SUBRULE_1_NT, strm') + val (ENDUL_RES, ENDUL_SPAN, strm') = matchENDUL(strm') + val FULL_SPAN = (#1(STARTUL_SPAN), #2(ENDUL_SPAN)) + in + (UserCode.ul_PROD_1_ACT (li_RES, ENDUL_RES, cdata_opt_RES, STARTUL_RES, li_SPAN : (Lex.pos * Lex.pos), ENDUL_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTUL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and heading_NT (strm) = let + fun heading_PROD_1 (strm) = let + val (h1_RES, h1_SPAN, strm') = h1_NT(strm) + val FULL_SPAN = (#1(h1_SPAN), #2(h1_SPAN)) + in + ((h1_RES), FULL_SPAN, strm') + end + fun heading_PROD_2 (strm) = let + val (h2_RES, h2_SPAN, strm') = h2_NT(strm) + val FULL_SPAN = (#1(h2_SPAN), #2(h2_SPAN)) + in + ((h2_RES), FULL_SPAN, strm') + end + fun heading_PROD_3 (strm) = let + val (h3_RES, h3_SPAN, strm') = h3_NT(strm) + val FULL_SPAN = (#1(h3_SPAN), #2(h3_SPAN)) + in + ((h3_RES), FULL_SPAN, strm') + end + fun heading_PROD_4 (strm) = let + val (h4_RES, h4_SPAN, strm') = h4_NT(strm) + val FULL_SPAN = (#1(h4_SPAN), #2(h4_SPAN)) + in + ((h4_RES), FULL_SPAN, strm') + end + fun heading_PROD_5 (strm) = let + val (h5_RES, h5_SPAN, strm') = h5_NT(strm) + val FULL_SPAN = (#1(h5_SPAN), #2(h5_SPAN)) + in + ((h5_RES), FULL_SPAN, strm') + end + fun heading_PROD_6 (strm) = let + val (h6_RES, h6_SPAN, strm') = h6_NT(strm) + val FULL_SPAN = (#1(h6_SPAN), #2(h6_SPAN)) + in + ((h6_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTH6(_), _, strm') => heading_PROD_6(strm) + | (Tok.STARTH4(_), _, strm') => heading_PROD_4(strm) + | (Tok.STARTH2(_), _, strm') => heading_PROD_2(strm) + | (Tok.STARTH1(_), _, strm') => heading_PROD_1(strm) + | (Tok.STARTH3(_), _, strm') => heading_PROD_3(strm) + | (Tok.STARTH5(_), _, strm') => heading_PROD_5(strm) + | _ => fail() + (* end case *)) + end +and h6_NT (strm) = let + val (STARTH6_RES, STARTH6_SPAN, strm') = matchSTARTH6(strm) + fun h6_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun h6_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(h6_PROD_1_SUBRULE_1_PRED, h6_PROD_1_SUBRULE_1_NT, strm') + val (ENDH6_RES, ENDH6_SPAN, strm') = matchENDH6(strm') + val FULL_SPAN = (#1(STARTH6_SPAN), #2(ENDH6_SPAN)) + in + (UserCode.h6_PROD_1_ACT (ENDH6_RES, inline_RES, STARTH6_RES, ENDH6_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH6_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and h5_NT (strm) = let + val (STARTH5_RES, STARTH5_SPAN, strm') = matchSTARTH5(strm) + fun h5_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun h5_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(h5_PROD_1_SUBRULE_1_PRED, h5_PROD_1_SUBRULE_1_NT, strm') + val (ENDH5_RES, ENDH5_SPAN, strm') = matchENDH5(strm') + val FULL_SPAN = (#1(STARTH5_SPAN), #2(ENDH5_SPAN)) + in + (UserCode.h5_PROD_1_ACT (ENDH5_RES, inline_RES, STARTH5_RES, ENDH5_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH5_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and h4_NT (strm) = let + val (STARTH4_RES, STARTH4_SPAN, strm') = matchSTARTH4(strm) + fun h4_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun h4_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(h4_PROD_1_SUBRULE_1_PRED, h4_PROD_1_SUBRULE_1_NT, strm') + val (ENDH4_RES, ENDH4_SPAN, strm') = matchENDH4(strm') + val FULL_SPAN = (#1(STARTH4_SPAN), #2(ENDH4_SPAN)) + in + (UserCode.h4_PROD_1_ACT (ENDH4_RES, inline_RES, STARTH4_RES, ENDH4_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH4_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and h3_NT (strm) = let + val (STARTH3_RES, STARTH3_SPAN, strm') = matchSTARTH3(strm) + fun h3_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun h3_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(h3_PROD_1_SUBRULE_1_PRED, h3_PROD_1_SUBRULE_1_NT, strm') + val (ENDH3_RES, ENDH3_SPAN, strm') = matchENDH3(strm') + val FULL_SPAN = (#1(STARTH3_SPAN), #2(ENDH3_SPAN)) + in + (UserCode.h3_PROD_1_ACT (ENDH3_RES, inline_RES, STARTH3_RES, ENDH3_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH3_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and h2_NT (strm) = let + val (STARTH2_RES, STARTH2_SPAN, strm') = matchSTARTH2(strm) + fun h2_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun h2_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(h2_PROD_1_SUBRULE_1_PRED, h2_PROD_1_SUBRULE_1_NT, strm') + val (ENDH2_RES, ENDH2_SPAN, strm') = matchENDH2(strm') + val FULL_SPAN = (#1(STARTH2_SPAN), #2(ENDH2_SPAN)) + in + (UserCode.h2_PROD_1_ACT (ENDH2_RES, inline_RES, STARTH2_RES, ENDH2_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH2_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and h1_NT (strm) = let + val (STARTH1_RES, STARTH1_SPAN, strm') = matchSTARTH1(strm) + fun h1_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun h1_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(h1_PROD_1_SUBRULE_1_PRED, h1_PROD_1_SUBRULE_1_NT, strm') + val (ENDH1_RES, ENDH1_SPAN, strm') = matchENDH1(strm') + val FULL_SPAN = (#1(STARTH1_SPAN), #2(ENDH1_SPAN)) + in + (UserCode.h1_PROD_1_ACT (ENDH1_RES, inline_RES, STARTH1_RES, ENDH1_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTH1_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and p_NT (strm) = let + val (STARTP_RES, STARTP_SPAN, strm') = matchSTARTP(strm) + fun p_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun p_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(p_PROD_1_SUBRULE_1_PRED, p_PROD_1_SUBRULE_1_NT, strm') + val (ENDP_RES, ENDP_SPAN, strm') = matchENDP(strm') + val FULL_SPAN = (#1(STARTP_SPAN), #2(ENDP_SPAN)) + in + (UserCode.p_PROD_1_ACT (inline_RES, STARTP_RES, ENDP_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTP_SPAN : (Lex.pos * Lex.pos), ENDP_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and object_NT (strm) = let + val (STARTOBJECT_RES, STARTOBJECT_SPAN, strm') = matchSTARTOBJECT(strm) + fun object_PROD_1_SUBRULE_1_NT (strm) = let + fun object_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (param_RES, param_SPAN, strm') = param_NT(strm) + val FULL_SPAN = (#1(param_SPAN), #2(param_SPAN)) + in + ((param_RES), FULL_SPAN, strm') + end + fun object_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.PCDATA(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.CHAR_REF(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.ENTITY_REF(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTA(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTABBR(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTACRONYM(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTADDRESS(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTAPPLET(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTB(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBASEFONT(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBDO(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBIG(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBR(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTBUTTON(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTCENTER(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTCITE(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTCODE(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDFN(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDIR(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDIV(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDL(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTEM(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFIELDSET(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFONT(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTFORM(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH1(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH2(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH3(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH4(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH5(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTH6(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTHR(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTI(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTIFRAME(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTIMG(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTINPUT(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTISINDEX(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTKBD(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTLABEL(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTMAP(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTMENU(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTOBJECT(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTOL(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTP(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTPRE(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTQ(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTS(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSAMP(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSCRIPT(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSELECT(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSMALL(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSPAN(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSTRIKE(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSTRONG(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSUB(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTSUP(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTTABLE(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTTEXTAREA(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTTT(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTU(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTUL(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTVAR(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTPARAM(_), _, strm') => + object_PROD_1_SUBRULE_1_PROD_1(strm) + | _ => fail() + (* end case *)) + end + fun object_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPARAM(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (SR_RES, SR_SPAN, strm') = EBNF.closure(object_PROD_1_SUBRULE_1_PRED, object_PROD_1_SUBRULE_1_NT, strm') + val (ENDOBJECT_RES, ENDOBJECT_SPAN, strm') = matchENDOBJECT(strm') + val FULL_SPAN = (#1(STARTOBJECT_SPAN), #2(ENDOBJECT_SPAN)) + in + (UserCode.object_PROD_1_ACT (SR_RES, STARTOBJECT_RES, ENDOBJECT_RES, SR_SPAN : (Lex.pos * Lex.pos), STARTOBJECT_SPAN : (Lex.pos * Lex.pos), ENDOBJECT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and a_NT (strm) = let + val (STARTA_RES, STARTA_SPAN, strm') = matchSTARTA(strm) + fun a_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun a_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(a_PROD_1_SUBRULE_1_PRED, a_PROD_1_SUBRULE_1_NT, strm') + val (ENDA_RES, ENDA_SPAN, strm') = matchENDA(strm') + val FULL_SPAN = (#1(STARTA_SPAN), #2(ENDA_SPAN)) + in + (UserCode.a_PROD_1_ACT (inline_RES, STARTA_RES, ENDA_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTA_SPAN : (Lex.pos * Lex.pos), ENDA_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and phrase_NT (strm) = let + fun phrase_PROD_1 (strm) = let + val (em_RES, em_SPAN, strm') = em_NT(strm) + val FULL_SPAN = (#1(em_SPAN), #2(em_SPAN)) + in + ((em_RES), FULL_SPAN, strm') + end + fun phrase_PROD_2 (strm) = let + val (strong_RES, strong_SPAN, strm') = strong_NT(strm) + val FULL_SPAN = (#1(strong_SPAN), #2(strong_SPAN)) + in + ((strong_RES), FULL_SPAN, strm') + end + fun phrase_PROD_3 (strm) = let + val (dfn_RES, dfn_SPAN, strm') = dfn_NT(strm) + val FULL_SPAN = (#1(dfn_SPAN), #2(dfn_SPAN)) + in + ((dfn_RES), FULL_SPAN, strm') + end + fun phrase_PROD_4 (strm) = let + val (code_RES, code_SPAN, strm') = code_NT(strm) + val FULL_SPAN = (#1(code_SPAN), #2(code_SPAN)) + in + ((code_RES), FULL_SPAN, strm') + end + fun phrase_PROD_5 (strm) = let + val (samp_RES, samp_SPAN, strm') = samp_NT(strm) + val FULL_SPAN = (#1(samp_SPAN), #2(samp_SPAN)) + in + ((samp_RES), FULL_SPAN, strm') + end + fun phrase_PROD_6 (strm) = let + val (kbd_RES, kbd_SPAN, strm') = kbd_NT(strm) + val FULL_SPAN = (#1(kbd_SPAN), #2(kbd_SPAN)) + in + ((kbd_RES), FULL_SPAN, strm') + end + fun phrase_PROD_7 (strm) = let + val (var_RES, var_SPAN, strm') = var_NT(strm) + val FULL_SPAN = (#1(var_SPAN), #2(var_SPAN)) + in + ((var_RES), FULL_SPAN, strm') + end + fun phrase_PROD_8 (strm) = let + val (cite_RES, cite_SPAN, strm') = cite_NT(strm) + val FULL_SPAN = (#1(cite_SPAN), #2(cite_SPAN)) + in + ((cite_RES), FULL_SPAN, strm') + end + fun phrase_PROD_9 (strm) = let + val (abbr_RES, abbr_SPAN, strm') = abbr_NT(strm) + val FULL_SPAN = (#1(abbr_SPAN), #2(abbr_SPAN)) + in + ((abbr_RES), FULL_SPAN, strm') + end + fun phrase_PROD_10 (strm) = let + val (acronym_RES, acronym_SPAN, strm') = acronym_NT(strm) + val FULL_SPAN = (#1(acronym_SPAN), #2(acronym_SPAN)) + in + ((acronym_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTACRONYM(_), _, strm') => phrase_PROD_10(strm) + | (Tok.STARTCITE(_), _, strm') => phrase_PROD_8(strm) + | (Tok.STARTKBD(_), _, strm') => phrase_PROD_6(strm) + | (Tok.STARTCODE(_), _, strm') => phrase_PROD_4(strm) + | (Tok.STARTSTRONG(_), _, strm') => phrase_PROD_2(strm) + | (Tok.STARTEM(_), _, strm') => phrase_PROD_1(strm) + | (Tok.STARTDFN(_), _, strm') => phrase_PROD_3(strm) + | (Tok.STARTSAMP(_), _, strm') => phrase_PROD_5(strm) + | (Tok.STARTVAR(_), _, strm') => phrase_PROD_7(strm) + | (Tok.STARTABBR(_), _, strm') => phrase_PROD_9(strm) + | _ => fail() + (* end case *)) + end +and acronym_NT (strm) = let + val (STARTACRONYM_RES, STARTACRONYM_SPAN, strm') = matchSTARTACRONYM(strm) + fun acronym_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun acronym_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(acronym_PROD_1_SUBRULE_1_PRED, acronym_PROD_1_SUBRULE_1_NT, strm') + val (ENDACRONYM_RES, ENDACRONYM_SPAN, strm') = matchENDACRONYM(strm') + val FULL_SPAN = (#1(STARTACRONYM_SPAN), #2(ENDACRONYM_SPAN)) + in + (UserCode.acronym_PROD_1_ACT (inline_RES, STARTACRONYM_RES, ENDACRONYM_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTACRONYM_SPAN : (Lex.pos * Lex.pos), ENDACRONYM_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and abbr_NT (strm) = let + val (STARTABBR_RES, STARTABBR_SPAN, strm') = matchSTARTABBR(strm) + fun abbr_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun abbr_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(abbr_PROD_1_SUBRULE_1_PRED, abbr_PROD_1_SUBRULE_1_NT, strm') + val (ENDABBR_RES, ENDABBR_SPAN, strm') = matchENDABBR(strm') + val FULL_SPAN = (#1(STARTABBR_SPAN), #2(ENDABBR_SPAN)) + in + (UserCode.abbr_PROD_1_ACT (inline_RES, ENDABBR_RES, STARTABBR_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDABBR_SPAN : (Lex.pos * Lex.pos), STARTABBR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and cite_NT (strm) = let + val (STARTCITE_RES, STARTCITE_SPAN, strm') = matchSTARTCITE(strm) + fun cite_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun cite_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(cite_PROD_1_SUBRULE_1_PRED, cite_PROD_1_SUBRULE_1_NT, strm') + val (ENDCITE_RES, ENDCITE_SPAN, strm') = matchENDCITE(strm') + val FULL_SPAN = (#1(STARTCITE_SPAN), #2(ENDCITE_SPAN)) + in + (UserCode.cite_PROD_1_ACT (inline_RES, ENDCITE_RES, STARTCITE_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDCITE_SPAN : (Lex.pos * Lex.pos), STARTCITE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and var_NT (strm) = let + val (STARTVAR_RES, STARTVAR_SPAN, strm') = matchSTARTVAR(strm) + fun var_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun var_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(var_PROD_1_SUBRULE_1_PRED, var_PROD_1_SUBRULE_1_NT, strm') + val (ENDVAR_RES, ENDVAR_SPAN, strm') = matchENDVAR(strm') + val FULL_SPAN = (#1(STARTVAR_SPAN), #2(ENDVAR_SPAN)) + in + (UserCode.var_PROD_1_ACT (inline_RES, STARTVAR_RES, ENDVAR_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTVAR_SPAN : (Lex.pos * Lex.pos), ENDVAR_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and kbd_NT (strm) = let + val (STARTKBD_RES, STARTKBD_SPAN, strm') = matchSTARTKBD(strm) + fun kbd_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun kbd_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(kbd_PROD_1_SUBRULE_1_PRED, kbd_PROD_1_SUBRULE_1_NT, strm') + val (ENDKBD_RES, ENDKBD_SPAN, strm') = matchENDKBD(strm') + val FULL_SPAN = (#1(STARTKBD_SPAN), #2(ENDKBD_SPAN)) + in + (UserCode.kbd_PROD_1_ACT (inline_RES, STARTKBD_RES, ENDKBD_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTKBD_SPAN : (Lex.pos * Lex.pos), ENDKBD_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and samp_NT (strm) = let + val (STARTSAMP_RES, STARTSAMP_SPAN, strm') = matchSTARTSAMP(strm) + fun samp_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun samp_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(samp_PROD_1_SUBRULE_1_PRED, samp_PROD_1_SUBRULE_1_NT, strm') + val (ENDSAMP_RES, ENDSAMP_SPAN, strm') = matchENDSAMP(strm') + val FULL_SPAN = (#1(STARTSAMP_SPAN), #2(ENDSAMP_SPAN)) + in + (UserCode.samp_PROD_1_ACT (inline_RES, STARTSAMP_RES, ENDSAMP_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTSAMP_SPAN : (Lex.pos * Lex.pos), ENDSAMP_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and code_NT (strm) = let + val (STARTCODE_RES, STARTCODE_SPAN, strm') = matchSTARTCODE(strm) + fun code_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun code_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(code_PROD_1_SUBRULE_1_PRED, code_PROD_1_SUBRULE_1_NT, strm') + val (ENDCODE_RES, ENDCODE_SPAN, strm') = matchENDCODE(strm') + val FULL_SPAN = (#1(STARTCODE_SPAN), #2(ENDCODE_SPAN)) + in + (UserCode.code_PROD_1_ACT (inline_RES, ENDCODE_RES, STARTCODE_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDCODE_SPAN : (Lex.pos * Lex.pos), STARTCODE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and dfn_NT (strm) = let + val (STARTDFN_RES, STARTDFN_SPAN, strm') = matchSTARTDFN(strm) + fun dfn_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun dfn_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(dfn_PROD_1_SUBRULE_1_PRED, dfn_PROD_1_SUBRULE_1_NT, strm') + val (ENDDFN_RES, ENDDFN_SPAN, strm') = matchENDDFN(strm') + val FULL_SPAN = (#1(STARTDFN_SPAN), #2(ENDDFN_SPAN)) + in + (UserCode.dfn_PROD_1_ACT (inline_RES, ENDDFN_RES, STARTDFN_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDDFN_SPAN : (Lex.pos * Lex.pos), STARTDFN_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and strong_NT (strm) = let + val (STARTSTRONG_RES, STARTSTRONG_SPAN, strm') = matchSTARTSTRONG(strm) + fun strong_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun strong_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(strong_PROD_1_SUBRULE_1_PRED, strong_PROD_1_SUBRULE_1_NT, strm') + val (ENDSTRONG_RES, ENDSTRONG_SPAN, strm') = matchENDSTRONG(strm') + val FULL_SPAN = (#1(STARTSTRONG_SPAN), #2(ENDSTRONG_SPAN)) + in + (UserCode.strong_PROD_1_ACT (inline_RES, STARTSTRONG_RES, ENDSTRONG_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTSTRONG_SPAN : (Lex.pos * Lex.pos), ENDSTRONG_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and em_NT (strm) = let + val (STARTEM_RES, STARTEM_SPAN, strm') = matchSTARTEM(strm) + fun em_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun em_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(em_PROD_1_SUBRULE_1_PRED, em_PROD_1_SUBRULE_1_NT, strm') + val (ENDEM_RES, ENDEM_SPAN, strm') = matchENDEM(strm') + val FULL_SPAN = (#1(STARTEM_SPAN), #2(ENDEM_SPAN)) + in + (UserCode.em_PROD_1_ACT (ENDEM_RES, inline_RES, STARTEM_RES, ENDEM_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTEM_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and fontstyle_NT (strm) = let + fun fontstyle_PROD_1 (strm) = let + val (tt_RES, tt_SPAN, strm') = tt_NT(strm) + val FULL_SPAN = (#1(tt_SPAN), #2(tt_SPAN)) + in + ((tt_RES), FULL_SPAN, strm') + end + fun fontstyle_PROD_2 (strm) = let + val (i_RES, i_SPAN, strm') = i_NT(strm) + val FULL_SPAN = (#1(i_SPAN), #2(i_SPAN)) + in + ((i_RES), FULL_SPAN, strm') + end + fun fontstyle_PROD_3 (strm) = let + val (b_RES, b_SPAN, strm') = b_NT(strm) + val FULL_SPAN = (#1(b_SPAN), #2(b_SPAN)) + in + ((b_RES), FULL_SPAN, strm') + end + fun fontstyle_PROD_4 (strm) = let + val (big_RES, big_SPAN, strm') = big_NT(strm) + val FULL_SPAN = (#1(big_SPAN), #2(big_SPAN)) + in + ((big_RES), FULL_SPAN, strm') + end + fun fontstyle_PROD_5 (strm) = let + val (small_RES, small_SPAN, strm') = small_NT(strm) + val FULL_SPAN = (#1(small_SPAN), #2(small_SPAN)) + in + ((small_RES), FULL_SPAN, strm') + end + fun fontstyle_PROD_6 (strm) = let + val (fontstyle_loose_RES, fontstyle_loose_SPAN, strm') = fontstyle_loose_NT(strm) + val FULL_SPAN = (#1(fontstyle_loose_SPAN), + #2(fontstyle_loose_SPAN)) + in + ((fontstyle_loose_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTS(_), _, strm') => fontstyle_PROD_6(strm) + | (Tok.STARTSTRIKE(_), _, strm') => fontstyle_PROD_6(strm) + | (Tok.STARTU(_), _, strm') => fontstyle_PROD_6(strm) + | (Tok.STARTBIG(_), _, strm') => fontstyle_PROD_4(strm) + | (Tok.STARTI(_), _, strm') => fontstyle_PROD_2(strm) + | (Tok.STARTTT(_), _, strm') => fontstyle_PROD_1(strm) + | (Tok.STARTB(_), _, strm') => fontstyle_PROD_3(strm) + | (Tok.STARTSMALL(_), _, strm') => fontstyle_PROD_5(strm) + | _ => fail() + (* end case *)) + end +and fontstyle_loose_NT (strm) = let + fun fontstyle_loose_PROD_1 (strm) = let + val (u_RES, u_SPAN, strm') = u_NT(strm) + val FULL_SPAN = (#1(u_SPAN), #2(u_SPAN)) + in + ((u_RES), FULL_SPAN, strm') + end + fun fontstyle_loose_PROD_2 (strm) = let + val (s_RES, s_SPAN, strm') = s_NT(strm) + val FULL_SPAN = (#1(s_SPAN), #2(s_SPAN)) + in + ((s_RES), FULL_SPAN, strm') + end + fun fontstyle_loose_PROD_3 (strm) = let + val (strike_RES, strike_SPAN, strm') = strike_NT(strm) + val FULL_SPAN = (#1(strike_SPAN), #2(strike_SPAN)) + in + ((strike_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTSTRIKE(_), _, strm') => fontstyle_loose_PROD_3(strm) + | (Tok.STARTU(_), _, strm') => fontstyle_loose_PROD_1(strm) + | (Tok.STARTS(_), _, strm') => fontstyle_loose_PROD_2(strm) + | _ => fail() + (* end case *)) + end +and strike_NT (strm) = let + val (STARTSTRIKE_RES, STARTSTRIKE_SPAN, strm') = matchSTARTSTRIKE(strm) + fun strike_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun strike_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(strike_PROD_1_SUBRULE_1_PRED, strike_PROD_1_SUBRULE_1_NT, strm') + val (ENDSTRIKE_RES, ENDSTRIKE_SPAN, strm') = matchENDSTRIKE(strm') + val FULL_SPAN = (#1(STARTSTRIKE_SPAN), #2(ENDSTRIKE_SPAN)) + in + (UserCode.strike_PROD_1_ACT (inline_RES, STARTSTRIKE_RES, ENDSTRIKE_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTSTRIKE_SPAN : (Lex.pos * Lex.pos), ENDSTRIKE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and s_NT (strm) = let + val (STARTS_RES, STARTS_SPAN, strm') = matchSTARTS(strm) + fun s_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun s_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(s_PROD_1_SUBRULE_1_PRED, s_PROD_1_SUBRULE_1_NT, strm') + val (ENDS_RES, ENDS_SPAN, strm') = matchENDS(strm') + val FULL_SPAN = (#1(STARTS_SPAN), #2(ENDS_SPAN)) + in + (UserCode.s_PROD_1_ACT (inline_RES, STARTS_RES, ENDS_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTS_SPAN : (Lex.pos * Lex.pos), ENDS_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and u_NT (strm) = let + val (STARTU_RES, STARTU_SPAN, strm') = matchSTARTU(strm) + fun u_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun u_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(u_PROD_1_SUBRULE_1_PRED, u_PROD_1_SUBRULE_1_NT, strm') + val (ENDU_RES, ENDU_SPAN, strm') = matchENDU(strm') + val FULL_SPAN = (#1(STARTU_SPAN), #2(ENDU_SPAN)) + in + (UserCode.u_PROD_1_ACT (inline_RES, STARTU_RES, ENDU_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTU_SPAN : (Lex.pos * Lex.pos), ENDU_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and small_NT (strm) = let + val (STARTSMALL_RES, STARTSMALL_SPAN, strm') = matchSTARTSMALL(strm) + fun small_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun small_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(small_PROD_1_SUBRULE_1_PRED, small_PROD_1_SUBRULE_1_NT, strm') + val (ENDSMALL_RES, ENDSMALL_SPAN, strm') = matchENDSMALL(strm') + val FULL_SPAN = (#1(STARTSMALL_SPAN), #2(ENDSMALL_SPAN)) + in + (UserCode.small_PROD_1_ACT (inline_RES, ENDSMALL_RES, STARTSMALL_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDSMALL_SPAN : (Lex.pos * Lex.pos), STARTSMALL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and big_NT (strm) = let + val (STARTBIG_RES, STARTBIG_SPAN, strm') = matchSTARTBIG(strm) + fun big_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun big_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(big_PROD_1_SUBRULE_1_PRED, big_PROD_1_SUBRULE_1_NT, strm') + val (ENDBIG_RES, ENDBIG_SPAN, strm') = matchENDBIG(strm') + val FULL_SPAN = (#1(STARTBIG_SPAN), #2(ENDBIG_SPAN)) + in + (UserCode.big_PROD_1_ACT (inline_RES, ENDBIG_RES, STARTBIG_RES, inline_SPAN : (Lex.pos * Lex.pos), ENDBIG_SPAN : (Lex.pos * Lex.pos), STARTBIG_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and b_NT (strm) = let + val (STARTB_RES, STARTB_SPAN, strm') = matchSTARTB(strm) + fun b_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun b_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(b_PROD_1_SUBRULE_1_PRED, b_PROD_1_SUBRULE_1_NT, strm') + val (ENDB_RES, ENDB_SPAN, strm') = matchENDB(strm') + val FULL_SPAN = (#1(STARTB_SPAN), #2(ENDB_SPAN)) + in + (UserCode.b_PROD_1_ACT (inline_RES, STARTB_RES, ENDB_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTB_SPAN : (Lex.pos * Lex.pos), ENDB_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and i_NT (strm) = let + val (STARTI_RES, STARTI_SPAN, strm') = matchSTARTI(strm) + fun i_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun i_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(i_PROD_1_SUBRULE_1_PRED, i_PROD_1_SUBRULE_1_NT, strm') + val (ENDI_RES, ENDI_SPAN, strm') = matchENDI(strm') + val FULL_SPAN = (#1(STARTI_SPAN), #2(ENDI_SPAN)) + in + (UserCode.i_PROD_1_ACT (inline_RES, STARTI_RES, ENDI_RES, inline_SPAN : (Lex.pos * Lex.pos), STARTI_SPAN : (Lex.pos * Lex.pos), ENDI_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +and tt_NT (strm) = let + val (STARTTT_RES, STARTTT_SPAN, strm') = matchSTARTTT(strm) + fun tt_PROD_1_SUBRULE_1_NT (strm) = let + val (inline_RES, inline_SPAN, strm') = inline_NT(strm) + val FULL_SPAN = (#1(inline_SPAN), #2(inline_SPAN)) + in + ((inline_RES), FULL_SPAN, strm') + end + fun tt_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (inline_RES, inline_SPAN, strm') = EBNF.closure(tt_PROD_1_SUBRULE_1_PRED, tt_PROD_1_SUBRULE_1_NT, strm') + val (ENDTT_RES, ENDTT_SPAN, strm') = matchENDTT(strm') + val FULL_SPAN = (#1(STARTTT_SPAN), #2(ENDTT_SPAN)) + in + (UserCode.tt_PROD_1_ACT (ENDTT_RES, inline_RES, STARTTT_RES, ENDTT_SPAN : (Lex.pos * Lex.pos), inline_SPAN : (Lex.pos * Lex.pos), STARTTT_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun del_NT (strm) = let + val (STARTDEL_RES, STARTDEL_SPAN, strm') = matchSTARTDEL(strm) + fun del_PROD_1_SUBRULE_1_NT (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + fun del_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (flow_RES, flow_SPAN, strm') = EBNF.closure(del_PROD_1_SUBRULE_1_PRED, del_PROD_1_SUBRULE_1_NT, strm') + val (ENDDEL_RES, ENDDEL_SPAN, strm') = matchENDDEL(strm') + val FULL_SPAN = (#1(STARTDEL_SPAN), #2(ENDDEL_SPAN)) + in + (UserCode.del_PROD_1_ACT (flow_RES, ENDDEL_RES, STARTDEL_RES, flow_SPAN : (Lex.pos * Lex.pos), ENDDEL_SPAN : (Lex.pos * Lex.pos), STARTDEL_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun ins_NT (strm) = let + val (STARTINS_RES, STARTINS_SPAN, strm') = matchSTARTINS(strm) + fun ins_PROD_1_SUBRULE_1_NT (strm) = let + val (flow_RES, flow_SPAN, strm') = flow_NT(strm) + val FULL_SPAN = (#1(flow_SPAN), #2(flow_SPAN)) + in + ((flow_RES), FULL_SPAN, strm') + end + fun ins_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTA(_), _, strm') => true + | (Tok.STARTABBR(_), _, strm') => true + | (Tok.STARTACRONYM(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTAPPLET(_), _, strm') => true + | (Tok.STARTB(_), _, strm') => true + | (Tok.STARTBASEFONT(_), _, strm') => true + | (Tok.STARTBDO(_), _, strm') => true + | (Tok.STARTBIG(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTBR(_), _, strm') => true + | (Tok.STARTBUTTON(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTCITE(_), _, strm') => true + | (Tok.STARTCODE(_), _, strm') => true + | (Tok.STARTDFN(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTEM(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFONT(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTI(_), _, strm') => true + | (Tok.STARTIFRAME(_), _, strm') => true + | (Tok.STARTIMG(_), _, strm') => true + | (Tok.STARTINPUT(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTKBD(_), _, strm') => true + | (Tok.STARTLABEL(_), _, strm') => true + | (Tok.STARTMAP(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTQ(_), _, strm') => true + | (Tok.STARTS(_), _, strm') => true + | (Tok.STARTSAMP(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSELECT(_), _, strm') => true + | (Tok.STARTSMALL(_), _, strm') => true + | (Tok.STARTSPAN(_), _, strm') => true + | (Tok.STARTSTRIKE(_), _, strm') => true + | (Tok.STARTSTRONG(_), _, strm') => true + | (Tok.STARTSUB(_), _, strm') => true + | (Tok.STARTSUP(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTTEXTAREA(_), _, strm') => true + | (Tok.STARTTT(_), _, strm') => true + | (Tok.STARTU(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | (Tok.STARTVAR(_), _, strm') => true + | _ => false + (* end case *)) + val (flow_RES, flow_SPAN, strm') = EBNF.closure(ins_PROD_1_SUBRULE_1_PRED, ins_PROD_1_SUBRULE_1_NT, strm') + val (ENDINS_RES, ENDINS_SPAN, strm') = matchENDINS(strm') + val FULL_SPAN = (#1(STARTINS_SPAN), #2(ENDINS_SPAN)) + in + (UserCode.ins_PROD_1_ACT (STARTINS_RES, flow_RES, ENDINS_RES, STARTINS_SPAN : (Lex.pos * Lex.pos), flow_SPAN : (Lex.pos * Lex.pos), ENDINS_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun body_rest_NT (strm) = let + fun body_rest_PROD_1_SUBRULE_1_NT (strm) = let + fun body_rest_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (block_RES, block_SPAN, strm') = block_NT(strm) + val FULL_SPAN = (#1(block_SPAN), #2(block_SPAN)) + in + ((block_RES), FULL_SPAN, strm') + end + fun body_rest_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (script_RES, script_SPAN, strm') = script_NT(strm) + val FULL_SPAN = (#1(script_SPAN), #2(script_SPAN)) + in + ((script_RES), FULL_SPAN, strm') + end + fun body_rest_PROD_1_SUBRULE_1_PROD_3 (strm) = let + val (ins_RES, ins_SPAN, strm') = ins_NT(strm) + val FULL_SPAN = (#1(ins_SPAN), #2(ins_SPAN)) + in + ((ins_RES), FULL_SPAN, strm') + end + fun body_rest_PROD_1_SUBRULE_1_PROD_4 (strm) = let + val (del_RES, del_SPAN, strm') = del_NT(strm) + val FULL_SPAN = (#1(del_SPAN), #2(del_SPAN)) + in + ((del_RES), FULL_SPAN, strm') + end + fun body_rest_PROD_1_SUBRULE_1_PROD_5 (strm) = let + val (cdata_RES, cdata_SPAN, strm') = cdata_NT(strm) + val FULL_SPAN = (#1(cdata_SPAN), #2(cdata_SPAN)) + in + ((cdata_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_5(strm) + | (Tok.PCDATA(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_5(strm) + | (Tok.CHAR_REF(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_5(strm) + | (Tok.ENTITY_REF(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_5(strm) + | (Tok.STARTINS(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_3(strm) + | (Tok.STARTADDRESS(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTCENTER(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTDIR(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTDIV(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTDL(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTFIELDSET(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTFORM(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH1(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH2(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH3(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH4(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH5(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH6(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTHR(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTISINDEX(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTMENU(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTOL(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTP(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTPRE(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTTABLE(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTUL(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTSCRIPT(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_2(strm) + | (Tok.STARTDEL(_), _, strm') => + body_rest_PROD_1_SUBRULE_1_PROD_4(strm) + | _ => fail() + (* end case *)) + end + fun body_rest_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTADDRESS(_), _, strm') => true + | (Tok.STARTBLOCKQUOTE(_), _, strm') => true + | (Tok.STARTCENTER(_), _, strm') => true + | (Tok.STARTDEL(_), _, strm') => true + | (Tok.STARTDIR(_), _, strm') => true + | (Tok.STARTDIV(_), _, strm') => true + | (Tok.STARTDL(_), _, strm') => true + | (Tok.STARTFIELDSET(_), _, strm') => true + | (Tok.STARTFORM(_), _, strm') => true + | (Tok.STARTH1(_), _, strm') => true + | (Tok.STARTH2(_), _, strm') => true + | (Tok.STARTH3(_), _, strm') => true + | (Tok.STARTH4(_), _, strm') => true + | (Tok.STARTH5(_), _, strm') => true + | (Tok.STARTH6(_), _, strm') => true + | (Tok.STARTHR(_), _, strm') => true + | (Tok.STARTINS(_), _, strm') => true + | (Tok.STARTISINDEX(_), _, strm') => true + | (Tok.STARTMENU(_), _, strm') => true + | (Tok.STARTNOSCRIPT(_), _, strm') => true + | (Tok.STARTOL(_), _, strm') => true + | (Tok.STARTP(_), _, strm') => true + | (Tok.STARTPRE(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTTABLE(_), _, strm') => true + | (Tok.STARTUL(_), _, strm') => true + | _ => false + (* end case *)) + val (SR1_RES, SR1_SPAN, strm') = EBNF.closure(body_rest_PROD_1_SUBRULE_1_PRED, body_rest_PROD_1_SUBRULE_1_NT, strm) + fun body_rest_PROD_1_SUBRULE_2_NT (strm) = let + val (ENDBODY_RES, ENDBODY_SPAN, strm') = matchENDBODY(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(ENDBODY_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.body_rest_PROD_1_SUBRULE_2_PROD_1_ACT (ENDBODY_RES, SR1_RES, cdata_opt_RES, ENDBODY_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun body_rest_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.ENDBODY, _, strm') => true + | _ => false + (* end case *)) + val (SR2_RES, SR2_SPAN, strm') = EBNF.optional(body_rest_PROD_1_SUBRULE_2_PRED, body_rest_PROD_1_SUBRULE_2_NT, strm') + val FULL_SPAN = (#1(SR1_SPAN), #2(SR2_SPAN)) + in + (UserCode.body_rest_PROD_1_ACT (SR1_RES, SR2_RES, SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun body_NT (strm) = let + fun body_PROD_1 (strm) = let + val (STARTBODY_RES, STARTBODY_SPAN, strm') = matchSTARTBODY(strm) + val (body_rest_RES, body_rest_SPAN, strm') = body_rest_NT(strm') + val FULL_SPAN = (#1(STARTBODY_SPAN), #2(body_rest_SPAN)) + in + (UserCode.body_PROD_1_ACT (STARTBODY_RES, body_rest_RES, STARTBODY_SPAN : (Lex.pos * Lex.pos), body_rest_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun body_PROD_2 (strm) = let + val (SR_RES, SR_SPAN, strm') = let + fun body_PROD_2_SUBRULE_1_NT (strm) = let + fun body_PROD_2_SUBRULE_1_PROD_1 (strm) = let + val (block_RES, block_SPAN, strm') = block_NT(strm) + val FULL_SPAN = (#1(block_SPAN), #2(block_SPAN)) + in + ((block_RES), FULL_SPAN, strm') + end + fun body_PROD_2_SUBRULE_1_PROD_2 (strm) = let + val (ins_RES, ins_SPAN, strm') = ins_NT(strm) + val FULL_SPAN = (#1(ins_SPAN), #2(ins_SPAN)) + in + ((ins_RES), FULL_SPAN, strm') + end + fun body_PROD_2_SUBRULE_1_PROD_3 (strm) = let + val (del_RES, del_SPAN, strm') = del_NT(strm) + val FULL_SPAN = (#1(del_SPAN), #2(del_SPAN)) + in + ((del_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTDEL(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_3(strm) + | (Tok.STARTADDRESS(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTCENTER(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTDIR(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTDIV(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTDL(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTFIELDSET(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTFORM(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH1(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH2(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH3(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH4(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH5(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTH6(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTHR(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTISINDEX(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTMENU(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTOL(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTP(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTPRE(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTTABLE(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTUL(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_1(strm) + | (Tok.STARTINS(_), _, strm') => + body_PROD_2_SUBRULE_1_PROD_2(strm) + | _ => fail() + (* end case *)) + end + in + body_PROD_2_SUBRULE_1_NT(strm) + end + val (body_rest_RES, body_rest_SPAN, strm') = body_rest_NT(strm') + val FULL_SPAN = (#1(SR_SPAN), #2(body_rest_SPAN)) + in + (UserCode.body_PROD_2_ACT (SR_RES, body_rest_RES, SR_SPAN : (Lex.pos * Lex.pos), body_rest_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTADDRESS(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTCENTER(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTDEL(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTDIR(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTDIV(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTDL(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTFIELDSET(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTFORM(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTH1(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTH2(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTH3(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTH4(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTH5(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTH6(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTHR(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTINS(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTISINDEX(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTMENU(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTOL(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTP(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTPRE(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTTABLE(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTUL(_), _, strm') => body_PROD_2(strm) + | (Tok.STARTBODY(_), _, strm') => body_PROD_1(strm) + | _ => fail() + (* end case *)) + end +fun noframes_NT (strm) = let + val (STARTNOFRAMES_RES, STARTNOFRAMES_SPAN, strm') = matchSTARTNOFRAMES(strm) + val (body_RES, body_SPAN, strm') = body_NT(strm') + val (ENDNOFRAMES_RES, ENDNOFRAMES_SPAN, strm') = matchENDNOFRAMES(strm') + val FULL_SPAN = (#1(STARTNOFRAMES_SPAN), #2(ENDNOFRAMES_SPAN)) + in + (UserCode.noframes_PROD_1_ACT (STARTNOFRAMES_RES, ENDNOFRAMES_RES, body_RES, STARTNOFRAMES_SPAN : (Lex.pos * Lex.pos), ENDNOFRAMES_SPAN : (Lex.pos * Lex.pos), body_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun frame_NT (strm) = let + val (STARTFRAME_RES, STARTFRAME_SPAN, strm') = matchSTARTFRAME(strm) + val FULL_SPAN = (#1(STARTFRAME_SPAN), #2(STARTFRAME_SPAN)) + in + (UserCode.frame_PROD_1_ACT (STARTFRAME_RES, STARTFRAME_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun frameset_NT (strm) = let + val (STARTFRAMESET_RES, STARTFRAMESET_SPAN, strm') = matchSTARTFRAMESET(strm) + fun frameset_PROD_1_SUBRULE_1_NT (strm) = let + fun frameset_PROD_1_SUBRULE_1_PROD_1 (strm) = let + val (frameset_RES, frameset_SPAN, strm') = frameset_NT(strm) + val FULL_SPAN = (#1(frameset_SPAN), #2(frameset_SPAN)) + in + ((frameset_RES), FULL_SPAN, strm') + end + fun frameset_PROD_1_SUBRULE_1_PROD_2 (strm) = let + val (frame_RES, frame_SPAN, strm') = frame_NT(strm) + val FULL_SPAN = (#1(frame_SPAN), #2(frame_SPAN)) + in + ((frame_RES), FULL_SPAN, strm') + end + fun frameset_PROD_1_SUBRULE_1_PROD_3 (strm) = let + val (cdata_RES, cdata_SPAN, strm') = cdata_NT(strm) + val FULL_SPAN = (#1(cdata_SPAN), #2(cdata_SPAN)) + in + ((cdata_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => + frameset_PROD_1_SUBRULE_1_PROD_3(strm) + | (Tok.PCDATA(_), _, strm') => + frameset_PROD_1_SUBRULE_1_PROD_3(strm) + | (Tok.CHAR_REF(_), _, strm') => + frameset_PROD_1_SUBRULE_1_PROD_3(strm) + | (Tok.ENTITY_REF(_), _, strm') => + frameset_PROD_1_SUBRULE_1_PROD_3(strm) + | (Tok.STARTFRAMESET(_), _, strm') => + frameset_PROD_1_SUBRULE_1_PROD_1(strm) + | (Tok.STARTFRAME(_), _, strm') => + frameset_PROD_1_SUBRULE_1_PROD_2(strm) + | _ => fail() + (* end case *)) + end + fun frameset_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.COMMENT(_), _, strm') => true + | (Tok.PCDATA(_), _, strm') => true + | (Tok.CHAR_REF(_), _, strm') => true + | (Tok.ENTITY_REF(_), _, strm') => true + | (Tok.STARTFRAME(_), _, strm') => true + | (Tok.STARTFRAMESET(_), _, strm') => true + | _ => false + (* end case *)) + val (SR1_RES, SR1_SPAN, strm') = EBNF.posclos(frameset_PROD_1_SUBRULE_1_PRED, frameset_PROD_1_SUBRULE_1_NT, strm') + fun frameset_PROD_1_SUBRULE_2_NT (strm) = let + val (noframes_RES, noframes_SPAN, strm') = noframes_NT(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(noframes_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.frameset_PROD_1_SUBRULE_2_PROD_1_ACT (SR1_RES, cdata_opt_RES, STARTFRAMESET_RES, noframes_RES, SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTFRAMESET_SPAN : (Lex.pos * Lex.pos), noframes_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun frameset_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.STARTNOFRAMES(_), _, strm') => true + | _ => false + (* end case *)) + val (SR2_RES, SR2_SPAN, strm') = EBNF.optional(frameset_PROD_1_SUBRULE_2_PRED, frameset_PROD_1_SUBRULE_2_NT, strm') + val (ENDFRAMESET_RES, ENDFRAMESET_SPAN, strm') = matchENDFRAMESET(strm') + val FULL_SPAN = (#1(STARTFRAMESET_SPAN), #2(ENDFRAMESET_SPAN)) + in + (UserCode.frameset_PROD_1_ACT (SR1_RES, SR2_RES, STARTFRAMESET_RES, ENDFRAMESET_RES, SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), STARTFRAMESET_SPAN : (Lex.pos * Lex.pos), ENDFRAMESET_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun link_NT (strm) = let + val (STARTLINK_RES, STARTLINK_SPAN, strm') = matchSTARTLINK(strm) + val FULL_SPAN = (#1(STARTLINK_SPAN), #2(STARTLINK_SPAN)) + in + (UserCode.link_PROD_1_ACT (STARTLINK_RES, STARTLINK_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun meta_NT (strm) = let + val (STARTMETA_RES, STARTMETA_SPAN, strm') = matchSTARTMETA(strm) + val FULL_SPAN = (#1(STARTMETA_SPAN), #2(STARTMETA_SPAN)) + in + (UserCode.meta_PROD_1_ACT (STARTMETA_RES, STARTMETA_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun style_NT (strm) = let + val (STARTSTYLE_RES, STARTSTYLE_SPAN, strm') = matchSTARTSTYLE(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val (ENDSTYLE_RES, ENDSTYLE_SPAN, strm') = matchENDSTYLE(strm') + val FULL_SPAN = (#1(STARTSTYLE_SPAN), #2(ENDSTYLE_SPAN)) + in + (UserCode.style_PROD_1_ACT (cdata_opt_RES, STARTSTYLE_RES, ENDSTYLE_RES, cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTSTYLE_SPAN : (Lex.pos * Lex.pos), ENDSTYLE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun base_NT (strm) = let + val (STARTBASE_RES, STARTBASE_SPAN, strm') = matchSTARTBASE(strm) + val FULL_SPAN = (#1(STARTBASE_SPAN), #2(STARTBASE_SPAN)) + in + (UserCode.base_PROD_1_ACT (STARTBASE_RES, STARTBASE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun title_NT (strm) = let + val (STARTTITLE_RES, STARTTITLE_SPAN, strm') = matchSTARTTITLE(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val (ENDTITLE_RES, ENDTITLE_SPAN, strm') = matchENDTITLE(strm') + val FULL_SPAN = (#1(STARTTITLE_SPAN), #2(ENDTITLE_SPAN)) + in + (UserCode.title_PROD_1_ACT (STARTTITLE_RES, cdata_opt_RES, ENDTITLE_RES, STARTTITLE_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDTITLE_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun head_content_NT (strm) = let + fun head_content_PROD_1 (strm) = let + val (title_RES, title_SPAN, strm') = title_NT(strm) + val FULL_SPAN = (#1(title_SPAN), #2(title_SPAN)) + in + ((title_RES), FULL_SPAN, strm') + end + fun head_content_PROD_2 (strm) = let + val (base_RES, base_SPAN, strm') = base_NT(strm) + val FULL_SPAN = (#1(base_SPAN), #2(base_SPAN)) + in + ((base_RES), FULL_SPAN, strm') + end + fun head_content_PROD_3 (strm) = let + val (script_RES, script_SPAN, strm') = script_NT(strm) + val FULL_SPAN = (#1(script_SPAN), #2(script_SPAN)) + in + ((script_RES), FULL_SPAN, strm') + end + fun head_content_PROD_4 (strm) = let + val (style_RES, style_SPAN, strm') = style_NT(strm) + val FULL_SPAN = (#1(style_SPAN), #2(style_SPAN)) + in + ((style_RES), FULL_SPAN, strm') + end + fun head_content_PROD_5 (strm) = let + val (meta_RES, meta_SPAN, strm') = meta_NT(strm) + val FULL_SPAN = (#1(meta_SPAN), #2(meta_SPAN)) + in + ((meta_RES), FULL_SPAN, strm') + end + fun head_content_PROD_6 (strm) = let + val (link_RES, link_SPAN, strm') = link_NT(strm) + val FULL_SPAN = (#1(link_SPAN), #2(link_SPAN)) + in + ((link_RES), FULL_SPAN, strm') + end + fun head_content_PROD_7 (strm) = let + val (object_RES, object_SPAN, strm') = object_NT(strm) + val FULL_SPAN = (#1(object_SPAN), #2(object_SPAN)) + in + ((object_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTOBJECT(_), _, strm') => head_content_PROD_7(strm) + | (Tok.STARTMETA(_), _, strm') => head_content_PROD_5(strm) + | (Tok.STARTSCRIPT(_), _, strm') => head_content_PROD_3(strm) + | (Tok.STARTTITLE(_), _, strm') => head_content_PROD_1(strm) + | (Tok.STARTBASE(_), _, strm') => head_content_PROD_2(strm) + | (Tok.STARTSTYLE(_), _, strm') => head_content_PROD_4(strm) + | (Tok.STARTLINK(_), _, strm') => head_content_PROD_6(strm) + | _ => fail() + (* end case *)) + end +fun head_NT (strm) = let + fun head_PROD_1_SUBRULE_1_NT (strm) = let + val (STARTHEAD_RES, STARTHEAD_SPAN, strm') = matchSTARTHEAD(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(STARTHEAD_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.head_PROD_1_SUBRULE_1_PROD_1_ACT (cdata_opt_RES, STARTHEAD_RES, cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTHEAD_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun head_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.STARTHEAD(_), _, strm') => true + | _ => false + (* end case *)) + val (SR1_RES, SR1_SPAN, strm') = EBNF.optional(head_PROD_1_SUBRULE_1_PRED, head_PROD_1_SUBRULE_1_NT, strm) + fun head_PROD_1_SUBRULE_2_NT (strm) = let + val (head_content_RES, head_content_SPAN, strm') = head_content_NT(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(head_content_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.head_PROD_1_SUBRULE_2_PROD_1_ACT (SR1_RES, cdata_opt_RES, head_content_RES, SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), head_content_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun head_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.STARTBASE(_), _, strm') => true + | (Tok.STARTLINK(_), _, strm') => true + | (Tok.STARTMETA(_), _, strm') => true + | (Tok.STARTOBJECT(_), _, strm') => true + | (Tok.STARTSCRIPT(_), _, strm') => true + | (Tok.STARTSTYLE(_), _, strm') => true + | (Tok.STARTTITLE(_), _, strm') => true + | _ => false + (* end case *)) + val (SR2_RES, SR2_SPAN, strm') = EBNF.closure(head_PROD_1_SUBRULE_2_PRED, head_PROD_1_SUBRULE_2_NT, strm') + fun head_PROD_1_SUBRULE_3_NT (strm) = let + val (ENDHEAD_RES, ENDHEAD_SPAN, strm') = matchENDHEAD(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(ENDHEAD_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.head_PROD_1_SUBRULE_3_PROD_1_ACT (SR1_RES, SR2_RES, cdata_opt_RES, ENDHEAD_RES, SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDHEAD_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun head_PROD_1_SUBRULE_3_PRED (strm) = (case (lex(strm)) + of (Tok.ENDHEAD, _, strm') => true + | _ => false + (* end case *)) + val (SR3_RES, SR3_SPAN, strm') = EBNF.optional(head_PROD_1_SUBRULE_3_PRED, head_PROD_1_SUBRULE_3_NT, strm') + val FULL_SPAN = (#1(SR1_SPAN), #2(SR3_SPAN)) + in + (UserCode.head_PROD_1_ACT (SR1_RES, SR2_RES, SR3_RES, SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), SR3_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +fun document_NT (strm) = let + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm) + fun document_PROD_1_SUBRULE_1_NT (strm) = let + val (DOCTYPE_RES, DOCTYPE_SPAN, strm') = matchDOCTYPE(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(DOCTYPE_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.document_PROD_1_SUBRULE_1_PROD_1_ACT (DOCTYPE_RES, cdata_opt_RES, DOCTYPE_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun document_PROD_1_SUBRULE_1_PRED (strm) = (case (lex(strm)) + of (Tok.DOCTYPE(_), _, strm') => true + | _ => false + (* end case *)) + val (SR1_RES, SR1_SPAN, strm') = EBNF.optional(document_PROD_1_SUBRULE_1_PRED, document_PROD_1_SUBRULE_1_NT, strm') + fun document_PROD_1_SUBRULE_2_NT (strm) = let + val (STARTHTML_RES, STARTHTML_SPAN, strm') = matchSTARTHTML(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(STARTHTML_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.document_PROD_1_SUBRULE_2_PROD_1_ACT (SR1_RES, cdata_opt_RES, STARTHTML_RES, SR1_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), STARTHTML_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun document_PROD_1_SUBRULE_2_PRED (strm) = (case (lex(strm)) + of (Tok.STARTHTML(_), _, strm') => true + | _ => false + (* end case *)) + val (SR2_RES, SR2_SPAN, strm') = EBNF.optional(document_PROD_1_SUBRULE_2_PRED, document_PROD_1_SUBRULE_2_NT, strm') + val (head_RES, head_SPAN, strm') = head_NT(strm') + val (SR3_RES, SR3_SPAN, strm') = let + fun document_PROD_1_SUBRULE_3_NT (strm) = let + fun document_PROD_1_SUBRULE_3_PROD_1 (strm) = let + val (body_RES, body_SPAN, strm') = body_NT(strm) + val FULL_SPAN = (#1(body_SPAN), #2(body_SPAN)) + in + ((body_RES), FULL_SPAN, strm') + end + fun document_PROD_1_SUBRULE_3_PROD_2 (strm) = let + val (frameset_RES, frameset_SPAN, strm') = frameset_NT(strm) + val FULL_SPAN = (#1(frameset_SPAN), #2(frameset_SPAN)) + in + ((frameset_RES), FULL_SPAN, strm') + end + in + (case (lex(strm)) + of (Tok.STARTFRAMESET(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_2(strm) + | (Tok.STARTADDRESS(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTBLOCKQUOTE(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTBODY(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTCENTER(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTDEL(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTDIR(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTDIV(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTDL(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTFIELDSET(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTFORM(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTH1(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTH2(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTH3(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTH4(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTH5(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTH6(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTHR(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTINS(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTISINDEX(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTMENU(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTNOSCRIPT(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTOL(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTP(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTPRE(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTTABLE(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | (Tok.STARTUL(_), _, strm') => + document_PROD_1_SUBRULE_3_PROD_1(strm) + | _ => fail() + (* end case *)) + end + in + document_PROD_1_SUBRULE_3_NT(strm') + end + fun document_PROD_1_SUBRULE_4_NT (strm) = let + val (ENDHTML_RES, ENDHTML_SPAN, strm') = matchENDHTML(strm) + val (cdata_opt_RES, cdata_opt_SPAN, strm') = cdata_opt_NT(strm') + val FULL_SPAN = (#1(ENDHTML_SPAN), #2(cdata_opt_SPAN)) + in + (UserCode.document_PROD_1_SUBRULE_4_PROD_1_ACT (head_RES, SR1_RES, SR2_RES, SR3_RES, cdata_opt_RES, ENDHTML_RES, head_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), SR3_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), ENDHTML_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end + fun document_PROD_1_SUBRULE_4_PRED (strm) = (case (lex(strm)) + of (Tok.ENDHTML, _, strm') => true + | _ => false + (* end case *)) + val (SR4_RES, SR4_SPAN, strm') = EBNF.optional(document_PROD_1_SUBRULE_4_PRED, document_PROD_1_SUBRULE_4_NT, strm') + val FULL_SPAN = (#1(cdata_opt_SPAN), #2(SR4_SPAN)) + in + (UserCode.document_PROD_1_ACT (head_RES, SR1_RES, SR2_RES, SR3_RES, SR4_RES, cdata_opt_RES, head_SPAN : (Lex.pos * Lex.pos), SR1_SPAN : (Lex.pos * Lex.pos), SR2_SPAN : (Lex.pos * Lex.pos), SR3_SPAN : (Lex.pos * Lex.pos), SR4_SPAN : (Lex.pos * Lex.pos), cdata_opt_SPAN : (Lex.pos * Lex.pos), FULL_SPAN : (Lex.pos * Lex.pos)), + FULL_SPAN, strm') + end +in + (document_NT, block_NT, cdata_opt_NT, inline_NT, body_NT, flow_NT) +end +val document_NT = fn s => unwrap (Err.launch (eh, lexFn, document_NT , true) s) +val block_NT = fn s => unwrap (Err.launch (eh, lexFn, block_NT , false) s) +val cdata_opt_NT = fn s => unwrap (Err.launch (eh, lexFn, cdata_opt_NT , false) s) +val inline_NT = fn s => unwrap (Err.launch (eh, lexFn, inline_NT , false) s) +val body_NT = fn s => unwrap (Err.launch (eh, lexFn, body_NT , false) s) +val flow_NT = fn s => unwrap (Err.launch (eh, lexFn, flow_NT , false) s) + +in (document_NT, block_NT, cdata_opt_NT, inline_NT, body_NT, flow_NT) end + in +fun parse lexFn s = let val (document_NT, block_NT, cdata_opt_NT, inline_NT, body_NT, flow_NT) = mk lexFn in document_NT s end + +fun parseblock lexFn s = let val (document_NT, block_NT, cdata_opt_NT, inline_NT, body_NT, flow_NT) = mk lexFn in block_NT s end + +fun parsecdata_opt lexFn s = let val (document_NT, block_NT, cdata_opt_NT, inline_NT, body_NT, flow_NT) = mk lexFn in cdata_opt_NT s end + +fun parseinline lexFn s = let val (document_NT, block_NT, cdata_opt_NT, inline_NT, body_NT, flow_NT) = mk lexFn in inline_NT s end + +fun parsebody lexFn s = let val (document_NT, block_NT, cdata_opt_NT, inline_NT, body_NT, flow_NT) = mk lexFn in body_NT s end + +fun parseflow lexFn s = let val (document_NT, block_NT, cdata_opt_NT, inline_NT, body_NT, flow_NT) = mk lexFn in flow_NT s end + + end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.l mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.l --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.l 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.l 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,84 @@ +(* html4.l + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +%name HTML4Lexer; + +%defs ( +open HTML4TokenUtils + +fun eof() = EOF +type lex_result = token + +val buffer = ref ([] : string list) + +fun addStr s = (buffer := s :: !buffer) +fun getStr () = (String.concat(List.rev(!buffer)) before (buffer := [])) + +(* trim an optional ";" from a non-empty substring *) +fun trimSemi ss = if Substring.sub(ss, Substring.size ss - 1) = #";" + then Substring.trimr 1 ss + else ss +val scanInt = #1 o valOf o IntInf.scan StringCvt.DEC Substring.getc +val scanHex = #1 o valOf o IntInf.scan StringCvt.HEX Substring.getc +); + +%states INITIAL, INTAG, COM1, COM2; + +%let alpha=[A-Za-z]; +%let digit=[0-9]; +%let hexdigit=[0-9a-fA-F]; +%let namechar=[-.A-Za-z0-9.]; +%let tag={alpha}{namechar}*; +%let ws=[\ \t]; +%let nonct=[^>]+; + +(* Open tags *) + +<INITIAL>"<"{tag} => (addStr yytext; YYBEGIN INTAG; continue()); +<INTAG>">" => (addStr yytext; YYBEGIN INITIAL; mkOpenTag(getStr())); +<INTAG>{nonct} => (addStr yytext; continue()); + +(* Close tags *) + +<INITIAL>"</"{tag}{ws}*">" => (mkCloseTag yytext); + +(* Comments *) + +<INITIAL>"<!--" => (addStr yytext; YYBEGIN COM1; continue()); +<COM1>"--" => (addStr yytext; YYBEGIN COM2; continue()); +<COM1>. => (addStr yytext; continue()); +<COM2>"--" => (addStr yytext; YYBEGIN COM1; continue()); +<COM2>">" => (addStr yytext; YYBEGIN INITIAL; COMMENT (getStr())); +<COM2>\n => (addStr yytext; continue()); +<COM2>{ws}+ => (addStr yytext; continue()); +<COM2>. => (raise (Fail ("Unexpected text in comment: \"" ^ yytext ^ "\""))); + +(* Doctype *) + +<INITIAL>"<!DOCTYPE"{nonct}">" => (DOCTYPE yytext); + +(* XML Processing instructions. *) + +<INITIAL>"<?".*"?>" => (XML_PROCESSING yytext); + +(* Entities *) + +<INITIAL>"&#"{digit}+";"? + => (CHAR_REF(scanInt (trimSemi (Substring.slice(yysubstr, 2, NONE))))); +<INITIAL>"&#x"{hexdigit}+";"? + => (CHAR_REF(scanHex (trimSemi (Substring.slice(yysubstr, 3, NONE))))); +<INITIAL>"&"{tag}";"? + => (ENTITY_REF(Atom.atom (Substring.string (Substring.slice(yysubstr, 1, NONE))))); + +(* Character data *) + +<INITIAL>"&" => (PCDATA yytext); + +<INITIAL>[^<&]+ => (PCDATA yytext); + +(* ______________________________________________________________________ + End of html4.l + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,22 @@ +(* html4-lex-test.cm + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +Group is + $/basis.cm + $/smlnj-lib.cm + $/ml-lpt-lib.cm + + html4-utils.sml + html4-lex-test-toks.sml + html4-attr.l : ml-ulex + html4-attr.g : ml-antlr + html4-token-utils.sml + html4.l : ml-ulex + html4-lex-test.sml + +(* ______________________________________________________________________ + End of html4-lex-test.cm + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,44 @@ +(* html4-lex-test.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure Test = struct + +open HTML4Tokens + +fun handle_tok tok = print ((tokToString tok) ^ "\n") + +fun handle_toks (source_map, lex_stream) = + let val (tok, span, lex_stream') = HTML4Lexer.lex source_map lex_stream + handle ex => + (print ("Exception at " ^ (Int.toString (HTML4Lexer.getPos + lex_stream)) ^ + "\n"); raise ex) + in + handle_tok tok; + (* XXX Getting some weird equality type complaint if I use the + equality operator here... *) + case tok of EOF => () | _ => handle_toks(source_map, lex_stream') + end + +fun handle_file file_name = + let + val source_map = AntlrStreamPos.mkSourcemap () + val in_strm = TextIO.openIn file_name + val lex_strm = HTML4Lexer.streamifyInstream in_strm + val _ = handle_toks(source_map, lex_strm) + handle ex => (TextIO.closeIn in_strm; + raise ex) + in + TextIO.closeIn in_strm + end + +fun main (_, args) = (List.app handle_file args; OS.Process.success) + +end + +(* ______________________________________________________________________ + End of html4-lex-test.sml + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test-toks.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test-toks.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test-toks.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-lex-test-toks.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,484 @@ +(* html4-lex-test-toks.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure HTML4Tokens = struct + +datatype token = EOF + | OPENTAG of Atom.atom * HTML4Utils.tag_payload + | CLOSETAG of Atom.atom + | COMMENT of string + | PCDATA of string + | DOCTYPE of string + | CHAR_REF of IntInf.int + | ENTITY_REF of Atom.atom + | XML_PROCESSING of string + (* HTML 4 element tokens. *) + | STARTA of HTML4Utils.tag_payload + | ENDA + | STARTABBR of HTML4Utils.tag_payload + | ENDABBR + | STARTACRONYM of HTML4Utils.tag_payload + | ENDACRONYM + | STARTADDRESS of HTML4Utils.tag_payload + | ENDADDRESS + | STARTAPPLET of HTML4Utils.tag_payload + | ENDAPPLET + | STARTAREA of HTML4Utils.tag_payload + (* No END tag for AREA element. *) + | STARTB of HTML4Utils.tag_payload + | ENDB + | STARTBASE of HTML4Utils.tag_payload + (* No END tag for BASE element. *) + | STARTBASEFONT of HTML4Utils.tag_payload + (* No END tag for BASEFONT element. *) + | STARTBDO of HTML4Utils.tag_payload + | ENDBDO + | STARTBIG of HTML4Utils.tag_payload + | ENDBIG + | STARTBLOCKQUOTE of HTML4Utils.tag_payload + | ENDBLOCKQUOTE + | STARTBODY of HTML4Utils.tag_payload + | ENDBODY + | STARTBR of HTML4Utils.tag_payload + (* No END tag for BR element. *) + | STARTBUTTON of HTML4Utils.tag_payload + | ENDBUTTON + | STARTCAPTION of HTML4Utils.tag_payload + | ENDCAPTION + | STARTCENTER of HTML4Utils.tag_payload + | ENDCENTER + | STARTCITE of HTML4Utils.tag_payload + | ENDCITE + | STARTCODE of HTML4Utils.tag_payload + | ENDCODE + | STARTCOL of HTML4Utils.tag_payload + (* No END tag for COL element. *) + | STARTCOLGROUP of HTML4Utils.tag_payload + | ENDCOLGROUP + | STARTDD of HTML4Utils.tag_payload + | ENDDD + | STARTDEL of HTML4Utils.tag_payload + | ENDDEL + | STARTDFN of HTML4Utils.tag_payload + | ENDDFN + | STARTDIR of HTML4Utils.tag_payload + | ENDDIR + | STARTDIV of HTML4Utils.tag_payload + | ENDDIV + | STARTDL of HTML4Utils.tag_payload + | ENDDL + | STARTDT of HTML4Utils.tag_payload + | ENDDT + | STARTEM of HTML4Utils.tag_payload + | ENDEM + | STARTFIELDSET of HTML4Utils.tag_payload + | ENDFIELDSET + | STARTFONT of HTML4Utils.tag_payload + | ENDFONT + | STARTFORM of HTML4Utils.tag_payload + | ENDFORM + | STARTFRAME of HTML4Utils.tag_payload + (* No END tag for FRAME element. *) + | STARTFRAMESET of HTML4Utils.tag_payload + | ENDFRAMESET + | STARTH1 of HTML4Utils.tag_payload + | ENDH1 + | STARTH2 of HTML4Utils.tag_payload + | ENDH2 + | STARTH3 of HTML4Utils.tag_payload + | ENDH3 + | STARTH4 of HTML4Utils.tag_payload + | ENDH4 + | STARTH5 of HTML4Utils.tag_payload + | ENDH5 + | STARTH6 of HTML4Utils.tag_payload + | ENDH6 + | STARTHEAD of HTML4Utils.tag_payload + | ENDHEAD + | STARTHR of HTML4Utils.tag_payload + (* No END tag for HR element. *) + | STARTHTML of HTML4Utils.tag_payload + | ENDHTML + | STARTI of HTML4Utils.tag_payload + | ENDI + | STARTIFRAME of HTML4Utils.tag_payload + | ENDIFRAME + | STARTIMG of HTML4Utils.tag_payload + (* No END tag for IMG element. *) + | STARTINPUT of HTML4Utils.tag_payload + (* No END tag for INPUT element. *) + | STARTINS of HTML4Utils.tag_payload + | ENDINS + | STARTISINDEX of HTML4Utils.tag_payload + (* No END tag for ISINDEX element. *) + | STARTKBD of HTML4Utils.tag_payload + | ENDKBD + | STARTLABEL of HTML4Utils.tag_payload + | ENDLABEL + | STARTLEGEND of HTML4Utils.tag_payload + | ENDLEGEND + | STARTLI of HTML4Utils.tag_payload + | ENDLI + | STARTLINK of HTML4Utils.tag_payload + (* No END tag for LINK element. *) + | STARTMAP of HTML4Utils.tag_payload + | ENDMAP + | STARTMENU of HTML4Utils.tag_payload + | ENDMENU + | STARTMETA of HTML4Utils.tag_payload + (* No END tag for META element. *) + | STARTNOFRAMES of HTML4Utils.tag_payload + | ENDNOFRAMES + | STARTNOSCRIPT of HTML4Utils.tag_payload + | ENDNOSCRIPT + | STARTOBJECT of HTML4Utils.tag_payload + | ENDOBJECT + | STARTOL of HTML4Utils.tag_payload + | ENDOL + | STARTOPTGROUP of HTML4Utils.tag_payload + | ENDOPTGROUP + | STARTOPTION of HTML4Utils.tag_payload + | ENDOPTION + | STARTP of HTML4Utils.tag_payload + | ENDP + | STARTPARAM of HTML4Utils.tag_payload + (* No END tag for PARAM element. *) + | STARTPRE of HTML4Utils.tag_payload + | ENDPRE + | STARTQ of HTML4Utils.tag_payload + | ENDQ + | STARTS of HTML4Utils.tag_payload + | ENDS + | STARTSAMP of HTML4Utils.tag_payload + | ENDSAMP + | STARTSCRIPT of HTML4Utils.tag_payload + | ENDSCRIPT + | STARTSELECT of HTML4Utils.tag_payload + | ENDSELECT + | STARTSMALL of HTML4Utils.tag_payload + | ENDSMALL + | STARTSPAN of HTML4Utils.tag_payload + | ENDSPAN + | STARTSTRIKE of HTML4Utils.tag_payload + | ENDSTRIKE + | STARTSTRONG of HTML4Utils.tag_payload + | ENDSTRONG + | STARTSTYLE of HTML4Utils.tag_payload + | ENDSTYLE + | STARTSUB of HTML4Utils.tag_payload + | ENDSUB + | STARTSUP of HTML4Utils.tag_payload + | ENDSUP + | STARTTABLE of HTML4Utils.tag_payload + | ENDTABLE + | STARTTBODY of HTML4Utils.tag_payload + | ENDTBODY + | STARTTD of HTML4Utils.tag_payload + | ENDTD + | STARTTEXTAREA of HTML4Utils.tag_payload + | ENDTEXTAREA + | STARTTFOOT of HTML4Utils.tag_payload + | ENDTFOOT + | STARTTH of HTML4Utils.tag_payload + | ENDTH + | STARTTHEAD of HTML4Utils.tag_payload + | ENDTHEAD + | STARTTITLE of HTML4Utils.tag_payload + | ENDTITLE + | STARTTR of HTML4Utils.tag_payload + | ENDTR + | STARTTT of HTML4Utils.tag_payload + | ENDTT + | STARTU of HTML4Utils.tag_payload + | ENDU + | STARTUL of HTML4Utils.tag_payload + | ENDUL + | STARTVAR of HTML4Utils.tag_payload + | ENDVAR + +fun tokToString EOF = "EOF" + | tokToString (OPENTAG (tagname, tagdata)) = + String.concat ["OPENTAG ", Atom.toString tagname, " ", + HTML4Utils.payloadToStr tagdata] + | tokToString (CLOSETAG tagname) = "CLOSETAG " ^ (Atom.toString tagname) + | tokToString (DOCTYPE docdata) = "DOCTYPE " ^ docdata + | tokToString (PCDATA pcdata) = ("PCDATA \"" ^ (String.toString pcdata) + ^ "\"") + | tokToString (COMMENT comment) = "COMMENT " ^ comment + | tokToString (CHAR_REF refint) = "CHAR REF " ^ (IntInf.toString refint) + | tokToString (ENTITY_REF refatom) = "ENTITY REF " ^ (Atom.toString refatom) + | tokToString (XML_PROCESSING directive) = "XML DIRECTIVE " ^ directive + + (* Automatically generated via helper.py: *) + | tokToString (STARTA payload) = + "STARTA " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDA = "ENDA" + | tokToString (STARTABBR payload) = + "STARTABBR " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDABBR = "ENDABBR" + | tokToString (STARTACRONYM payload) = + "STARTACRONYM " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDACRONYM = "ENDACRONYM" + | tokToString (STARTADDRESS payload) = + "STARTADDRESS " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDADDRESS = "ENDADDRESS" + | tokToString (STARTAREA payload) = + "STARTAREA " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTB payload) = + "STARTB " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDB = "ENDB" + | tokToString (STARTBASE payload) = + "STARTBASE " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTBDO payload) = + "STARTBDO " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDBDO = "ENDBDO" + | tokToString (STARTBIG payload) = + "STARTBIG " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDBIG = "ENDBIG" + | tokToString (STARTBLOCKQUOTE payload) = + "STARTBLOCKQUOTE " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDBLOCKQUOTE = "ENDBLOCKQUOTE" + | tokToString (STARTBODY payload) = + "STARTBODY " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDBODY = "ENDBODY" + | tokToString (STARTBR payload) = + "STARTBR " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTBUTTON payload) = + "STARTBUTTON " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDBUTTON = "ENDBUTTON" + | tokToString (STARTCAPTION payload) = + "STARTCAPTION " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDCAPTION = "ENDCAPTION" + | tokToString (STARTCITE payload) = + "STARTCITE " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDCITE = "ENDCITE" + | tokToString (STARTCODE payload) = + "STARTCODE " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDCODE = "ENDCODE" + | tokToString (STARTCOL payload) = + "STARTCOL " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTCOLGROUP payload) = + "STARTCOLGROUP " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDCOLGROUP = "ENDCOLGROUP" + | tokToString (STARTDD payload) = + "STARTDD " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDDD = "ENDDD" + | tokToString (STARTDEL payload) = + "STARTDEL " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDDEL = "ENDDEL" + | tokToString (STARTDFN payload) = + "STARTDFN " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDDFN = "ENDDFN" + | tokToString (STARTDIV payload) = + "STARTDIV " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDDIV = "ENDDIV" + | tokToString (STARTDL payload) = + "STARTDL " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDDL = "ENDDL" + | tokToString (STARTDT payload) = + "STARTDT " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDDT = "ENDDT" + | tokToString (STARTEM payload) = + "STARTEM " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDEM = "ENDEM" + | tokToString (STARTFIELDSET payload) = + "STARTFIELDSET " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDFIELDSET = "ENDFIELDSET" + | tokToString (STARTFORM payload) = + "STARTFORM " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDFORM = "ENDFORM" + | tokToString (STARTH1 payload) = + "STARTH1 " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDH1 = "ENDH1" + | tokToString (STARTH2 payload) = + "STARTH2 " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDH2 = "ENDH2" + | tokToString (STARTH3 payload) = + "STARTH3 " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDH3 = "ENDH3" + | tokToString (STARTH4 payload) = + "STARTH4 " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDH4 = "ENDH4" + | tokToString (STARTH5 payload) = + "STARTH5 " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDH5 = "ENDH5" + | tokToString (STARTH6 payload) = + "STARTH6 " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDH6 = "ENDH6" + | tokToString (STARTHEAD payload) = + "STARTHEAD " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDHEAD = "ENDHEAD" + | tokToString (STARTHR payload) = + "STARTHR " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTHTML payload) = + "STARTHTML " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDHTML = "ENDHTML" + | tokToString (STARTI payload) = + "STARTI " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDI = "ENDI" + | tokToString (STARTIMG payload) = + "STARTIMG " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTINPUT payload) = + "STARTINPUT " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTINS payload) = + "STARTINS " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDINS = "ENDINS" + | tokToString (STARTKBD payload) = + "STARTKBD " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDKBD = "ENDKBD" + | tokToString (STARTLABEL payload) = + "STARTLABEL " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDLABEL = "ENDLABEL" + | tokToString (STARTLEGEND payload) = + "STARTLEGEND " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDLEGEND = "ENDLEGEND" + | tokToString (STARTLI payload) = + "STARTLI " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDLI = "ENDLI" + | tokToString (STARTLINK payload) = + "STARTLINK " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTMAP payload) = + "STARTMAP " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDMAP = "ENDMAP" + | tokToString (STARTMETA payload) = + "STARTMETA " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTNOSCRIPT payload) = + "STARTNOSCRIPT " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDNOSCRIPT = "ENDNOSCRIPT" + | tokToString (STARTOBJECT payload) = + "STARTOBJECT " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDOBJECT = "ENDOBJECT" + | tokToString (STARTOL payload) = + "STARTOL " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDOL = "ENDOL" + | tokToString (STARTOPTGROUP payload) = + "STARTOPTGROUP " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDOPTGROUP = "ENDOPTGROUP" + | tokToString (STARTOPTION payload) = + "STARTOPTION " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDOPTION = "ENDOPTION" + | tokToString (STARTP payload) = + "STARTP " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDP = "ENDP" + | tokToString (STARTPARAM payload) = + "STARTPARAM " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTPRE payload) = + "STARTPRE " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDPRE = "ENDPRE" + | tokToString (STARTQ payload) = + "STARTQ " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDQ = "ENDQ" + | tokToString (STARTSAMP payload) = + "STARTSAMP " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDSAMP = "ENDSAMP" + | tokToString (STARTSCRIPT payload) = + "STARTSCRIPT " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDSCRIPT = "ENDSCRIPT" + | tokToString (STARTSELECT payload) = + "STARTSELECT " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDSELECT = "ENDSELECT" + | tokToString (STARTSMALL payload) = + "STARTSMALL " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDSMALL = "ENDSMALL" + | tokToString (STARTSPAN payload) = + "STARTSPAN " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDSPAN = "ENDSPAN" + | tokToString (STARTSTRONG payload) = + "STARTSTRONG " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDSTRONG = "ENDSTRONG" + | tokToString (STARTSTYLE payload) = + "STARTSTYLE " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDSTYLE = "ENDSTYLE" + | tokToString (STARTSUB payload) = + "STARTSUB " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDSUB = "ENDSUB" + | tokToString (STARTSUP payload) = + "STARTSUP " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDSUP = "ENDSUP" + | tokToString (STARTTABLE payload) = + "STARTTABLE " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDTABLE = "ENDTABLE" + | tokToString (STARTTBODY payload) = + "STARTTBODY " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDTBODY = "ENDTBODY" + | tokToString (STARTTD payload) = + "STARTTD " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDTD = "ENDTD" + | tokToString (STARTTEXTAREA payload) = + "STARTTEXTAREA " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDTEXTAREA = "ENDTEXTAREA" + | tokToString (STARTTFOOT payload) = + "STARTTFOOT " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDTFOOT = "ENDTFOOT" + | tokToString (STARTTH payload) = + "STARTTH " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDTH = "ENDTH" + | tokToString (STARTTHEAD payload) = + "STARTTHEAD " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDTHEAD = "ENDTHEAD" + | tokToString (STARTTITLE payload) = + "STARTTITLE " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDTITLE = "ENDTITLE" + | tokToString (STARTTR payload) = + "STARTTR " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDTR = "ENDTR" + | tokToString (STARTTT payload) = + "STARTTT " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDTT = "ENDTT" + | tokToString (STARTUL payload) = + "STARTUL " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDUL = "ENDUL" + | tokToString (STARTVAR payload) = + "STARTVAR " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDVAR = "ENDVAR" + | tokToString (STARTAPPLET payload) = + "STARTAPPLET " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDAPPLET = "ENDAPPLET" + | tokToString (STARTBASEFONT payload) = + "STARTBASEFONT " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTCENTER payload) = + "STARTCENTER " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDCENTER = "ENDCENTER" + | tokToString (STARTDIR payload) = + "STARTDIR " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDDIR = "ENDDIR" + | tokToString (STARTFONT payload) = + "STARTFONT " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDFONT = "ENDFONT" + | tokToString (STARTIFRAME payload) = + "STARTIFRAME " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDIFRAME = "ENDIFRAME" + | tokToString (STARTISINDEX payload) = + "STARTISINDEX " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTMENU payload) = + "STARTMENU " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDMENU = "ENDMENU" + | tokToString (STARTS payload) = + "STARTS " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDS = "ENDS" + | tokToString (STARTSTRIKE payload) = + "STARTSTRIKE " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDSTRIKE = "ENDSTRIKE" + | tokToString (STARTU payload) = + "STARTU " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDU = "ENDU" + | tokToString (STARTFRAME payload) = + "STARTFRAME " ^ (HTML4Utils.payloadToStr payload) + | tokToString (STARTFRAMESET payload) = + "STARTFRAMESET " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDFRAMESET = "ENDFRAMESET" + | tokToString (STARTNOFRAMES payload) = + "STARTNOFRAMES " ^ (HTML4Utils.payloadToStr payload) + | tokToString ENDNOFRAMES = "ENDNOFRAMES" + + (* Should cause a "match redundant" error if code is all in synch: *) + (* | tokToString _ = "???" *) + +end + +(* ______________________________________________________________________ + End of html4-lex-test-toks.sml + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,52 @@ +(* html4-lib.cm + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * CM file for the HTML4 library. + *) + +Library + + signature HTML4 + structure HTML4 + structure HTML4Attrs + structure HTML4Entities + structure HTML4Parser + structure HTML4Tokens + structure HTML4TokenUtils + structure HTML4Utils + structure HTML4Print + +is + $/basis.cm + $/smlnj-lib.cm + $/ml-lpt-lib.cm + + $/pp-lib.cm + pp-init.sml + +#if defined(NO_PLUGINS) + html4.g.sml + html4.l.sml + html4-attr.g.sml + html4-attr.l.sml +#else + html4.g : ml-antlr + html4.l : ml-ulex + html4-attr.g : ml-antlr + html4-attr.l : ml-ulex +#endif + + html4.sig + html4.sml + html4-attrs.sml + html4-entities.sml + html4-parser.sml + html4-print.sml + html4-token-utils.sml + html4-utils.sml + +(* ______________________________________________________________________ + End of html4-lib.cm + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,569 @@ + +ann + "nonexhaustiveBind ignore" "nonexhaustiveMatch ignore" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" +in + +local + basis l14 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb + end + basis l4 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end + basis l53 = + bas + (* $/ml-lpt-lib.cm ====> *) $(SML_LIB)/mllpt-lib/mllpt-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + open l4 + in + signature gs_0 = ORD_MAP + end + local + open l4 + in + functor gs_1 = RedBlackMapFn + end + local + open l4 + in + structure gs_2 = Atom + end + local + open l14 + in + structure gs_3 = CharVectorSlice + end + local + open l14 + in + structure gs_4 = TextIO + end + local + open l14 + in + structure gs_5 = Char + structure gs_6 = CharArray + structure gs_7 = CharVector + structure gs_8 = FixedInt + structure gs_9 = General + structure gs_10 = Int + structure gs_11 = Int32 + structure gs_12 = Int64 + structure gs_13 = IntInf + structure gs_14 = LargeInt + structure gs_15 = LargeReal + structure gs_16 = LargeWord + structure gs_17 = OS + structure gs_18 = Position + structure gs_19 = Real + structure gs_20 = Real64 + structure gs_21 = RealArray + structure gs_22 = RealArraySlice + structure gs_23 = RealVector + structure gs_24 = RealVectorSlice + structure gs_25 = SMLofNJ + structure gs_26 = Socket + structure gs_27 = String + structure gs_28 = Substring + structure gs_29 = SysWord + structure gs_30 = Time + structure gs_31 = Word + structure gs_32 = Word32 + structure gs_33 = Word64 + structure gs_34 = Word8 + end + local + open l53 + in + structure gs_35 = AntlrStreamPos + end + local + open l53 + in + functor gs_36 = AntlrErrHandler + end + local + open l14 + in + structure gs_37 = List + end + local + open l53 + in + signature gs_38 = ANTLR_LEXER + end + local + structure Atom = gs_2 + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure FixedInt = gs_8 + structure General = gs_9 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + structure OS = gs_17 + structure Position = gs_18 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure Substring = gs_28 + structure SysWord = gs_29 + structure Time = gs_30 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + html4-utils.sml + in + structure gs_39 = HTML4Utils + end + local + signature ANTLR_LEXER = gs_38 + functor AntlrErrHandler = gs_36 + structure Atom = gs_2 + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure FixedInt = gs_8 + structure General = gs_9 + structure HTML4Utils = gs_39 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + structure List = gs_37 + structure OS = gs_17 + structure Position = gs_18 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure Substring = gs_28 + structure SysWord = gs_29 + structure Time = gs_30 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + html4.g.sml + in + functor gs_40 = HTML4ParseFn + structure gs_41 = HTML4Tokens + end + local + signature ANTLR_LEXER = gs_38 + functor AntlrErrHandler = gs_36 + structure Atom = gs_2 + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure FixedInt = gs_8 + structure General = gs_9 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + structure List = gs_37 + structure OS = gs_17 + structure Position = gs_18 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure Substring = gs_28 + structure SysWord = gs_29 + structure Time = gs_30 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + html4-attr.g.sml + in + functor gs_42 = HTML4AttrParseFn + structure gs_43 = HTML4AttrTokens + end + local + open l14 + in + structure gs_44 = Vector + end + local + open l53 + in + structure gs_45 = UTF8 + end + local + open l53 + in + structure gs_46 = ULexBuffer + end + local + structure AntlrStreamPos = gs_35 + structure Atom = gs_2 + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure FixedInt = gs_8 + structure General = gs_9 + functor HTML4AttrParseFn = gs_42 + structure HTML4AttrTokens = gs_43 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + structure List = gs_37 + structure OS = gs_17 + structure Position = gs_18 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure Substring = gs_28 + structure SysWord = gs_29 + structure TextIO = gs_4 + structure Time = gs_30 + structure ULexBuffer = gs_46 + structure UTF8 = gs_45 + structure Vector = gs_44 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + html4-attr.l.sml + in + structure gs_47 = HTML4AttrLexer + end + local + structure AntlrStreamPos = gs_35 + structure Atom = gs_2 + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure CharVectorSlice = gs_3 + structure FixedInt = gs_8 + structure General = gs_9 + structure HTML4AttrLexer = gs_47 + functor HTML4AttrParseFn = gs_42 + structure HTML4AttrTokens = gs_43 + functor HTML4ParseFn = gs_40 + structure HTML4Tokens = gs_41 + structure HTML4Utils = gs_39 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + signature ORD_MAP = gs_0 + structure OS = gs_17 + structure Position = gs_18 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + functor RedBlackMapFn = gs_1 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure Substring = gs_28 + structure SysWord = gs_29 + structure TextIO = gs_4 + structure Time = gs_30 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + html4-token-utils.sml + in + structure gs_48 = HTML4TokenUtils + end + local + structure Atom = gs_2 + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure FixedInt = gs_8 + structure General = gs_9 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + structure OS = gs_17 + structure Position = gs_18 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure Substring = gs_28 + structure SysWord = gs_29 + structure Time = gs_30 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + html4.sig + in + signature gs_49 = HTML4 + end + local + structure Atom = gs_2 + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure FixedInt = gs_8 + structure General = gs_9 + signature HTML4 = gs_49 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + structure OS = gs_17 + structure Position = gs_18 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure Substring = gs_28 + structure SysWord = gs_29 + structure Time = gs_30 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + html4.sml + in + structure gs_50 = HTML4 + end + local + open l14 + in + structure gs_51 = Option + end + local + open l14 + in + structure gs_52 = StringCvt + end + local + structure AntlrStreamPos = gs_35 + structure Atom = gs_2 + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure FixedInt = gs_8 + structure General = gs_9 + structure HTML4TokenUtils = gs_48 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + structure List = gs_37 + structure OS = gs_17 + structure Position = gs_18 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure StringCvt = gs_52 + structure Substring = gs_28 + structure SysWord = gs_29 + structure TextIO = gs_4 + structure Time = gs_30 + structure ULexBuffer = gs_46 + structure UTF8 = gs_45 + structure Vector = gs_44 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + html4.l.sml + in + structure gs_53 = HTML4Lexer + end + local + structure AntlrStreamPos = gs_35 + structure Atom = gs_2 + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure FixedInt = gs_8 + structure General = gs_9 + structure HTML4 = gs_50 + structure HTML4Lexer = gs_53 + functor HTML4ParseFn = gs_40 + structure HTML4TokenUtils = gs_48 + structure HTML4Tokens = gs_41 + structure HTML4Utils = gs_39 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + structure OS = gs_17 + structure Option = gs_51 + structure Position = gs_18 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure Substring = gs_28 + structure SysWord = gs_29 + structure TextIO = gs_4 + structure Time = gs_30 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + html4-parser.sml + in + structure gs_54 = HTML4Parser + end + local + open l4 + in + structure gs_55 = Format + end + local + structure Atom = gs_2 + structure Char = gs_5 + structure CharArray = gs_6 + structure CharVector = gs_7 + structure FixedInt = gs_8 + structure Format = gs_55 + structure General = gs_9 + structure HTML4 = gs_50 + structure Int = gs_10 + structure Int32 = gs_11 + structure Int64 = gs_12 + structure IntInf = gs_13 + structure LargeInt = gs_14 + structure LargeReal = gs_15 + structure LargeWord = gs_16 + structure List = gs_37 + structure OS = gs_17 + structure Position = gs_18 + structure Real = gs_19 + structure Real64 = gs_20 + structure RealArray = gs_21 + structure RealArraySlice = gs_22 + structure RealVector = gs_23 + structure RealVectorSlice = gs_24 + structure SMLofNJ = gs_25 + structure Socket = gs_26 + structure String = gs_27 + structure Substring = gs_28 + structure SysWord = gs_29 + structure Time = gs_30 + structure Word = gs_31 + structure Word32 = gs_32 + structure Word64 = gs_33 + structure Word8 = gs_34 + html4-print.sml + in + structure gs_56 = HTML4Print + end + local + structure Atom = gs_2 + structure HTML4 = gs_50 + html4-entities.sml + in + structure gs_57 = HTML4Entities + end + local + structure Atom = gs_2 + html4-attrs.sml + in + structure gs_58 = HTML4Attrs + end +in + signature HTML4 = gs_49 + structure HTML4 = gs_50 + structure HTML4Attrs = gs_58 + structure HTML4Entities = gs_57 + structure HTML4Parser = gs_54 + structure HTML4Print = gs_56 + structure HTML4TokenUtils = gs_48 + structure HTML4Tokens = gs_41 + structure HTML4Utils = gs_39 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.l.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.l.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.l.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.l.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,833 @@ +structure HTML4Lexer = struct + + datatype yystart_state = +COM2 | COM1 | INTAG | INITIAL + local + + structure UserDeclarations = + struct + + +open HTML4TokenUtils + +fun eof() = EOF +type lex_result = token + +val buffer = ref ([] : string list) + +fun addStr s = (buffer := s :: !buffer) +fun getStr () = (String.concat(List.rev(!buffer)) before (buffer := [])) + +(* trim an optional ";" from a non-empty substring *) +fun trimSemi ss = if Substring.sub(ss, Substring.size ss - 1) = #";" + then Substring.trimr 1 ss + else ss +val scanInt = #1 o valOf o IntInf.scan StringCvt.DEC Substring.getc +val scanHex = #1 o valOf o IntInf.scan StringCvt.HEX Substring.getc + + end + + datatype yymatch + = yyNO_MATCH + | yyMATCH of ULexBuffer.stream * action * yymatch + withtype action = ULexBuffer.stream * yymatch -> UserDeclarations.lex_result + + val yytable : ((UTF8.wchar * UTF8.wchar * int) list * int list) Vector.vector = +Vector.fromList [] + fun yystreamify' p input = ULexBuffer.mkStream (p, input) + + fun yystreamifyReader' p readFn strm = let + val s = ref strm + fun iter(strm, n, accum) = + if n > 1024 then (String.implode (rev accum), strm) + else (case readFn strm + of NONE => (String.implode (rev accum), strm) + | SOME(c, strm') => iter (strm', n+1, c::accum)) + fun input() = let + val (data, strm) = iter(!s, 0, []) + in + s := strm; + data + end + in + yystreamify' p input + end + + fun yystreamifyInstream' p strm = yystreamify' p (fn ()=>TextIO.input strm) + + fun innerLex +(yystrm_, yyss_, yysm) = let + (* current start state *) + val yyss = ref yyss_ + fun YYBEGIN ss = (yyss := ss) + (* current input stream *) + val yystrm = ref yystrm_ + fun yysetStrm strm = yystrm := strm + fun yygetPos() = ULexBuffer.getpos (!yystrm) + fun yystreamify input = yystreamify' (yygetPos()) input + fun yystreamifyReader readFn strm = yystreamifyReader' (yygetPos()) readFn strm + fun yystreamifyInstream strm = yystreamifyInstream' (yygetPos()) strm + (* start position of token -- can be updated via skip() *) + val yystartPos = ref (yygetPos()) + (* get one char of input *) + fun yygetc strm = (case ULexBuffer.getu strm + of (SOME (0w10, s')) => + (AntlrStreamPos.markNewLine yysm (ULexBuffer.getpos strm); + SOME (0w10, s')) + | x => x) + fun yygetList getc strm = let + val get1 = UTF8.getu getc + fun iter (strm, accum) = + (case get1 strm + of NONE => rev accum + | SOME (w, strm') => iter (strm', w::accum) + (* end case *)) + in + iter (strm, []) + end + (* create yytext *) + fun yymksubstr(strm) = ULexBuffer.subtract (strm, !yystrm) + fun yymktext(strm) = Substring.string (yymksubstr strm) + fun yymkunicode(strm) = yygetList Substring.getc (yymksubstr strm) + open UserDeclarations + fun lex () = let + fun yystuck (yyNO_MATCH) = raise Fail "lexer reached a stuck state" + | yystuck (yyMATCH (strm, action, old)) = + action (strm, old) + val yypos = yygetPos() + fun yygetlineNo strm = AntlrStreamPos.lineNo yysm (ULexBuffer.getpos strm) + fun yygetcolNo strm = AntlrStreamPos.colNo yysm (ULexBuffer.getpos strm) + fun yyactsToMatches (strm, [], oldMatches) = oldMatches + | yyactsToMatches (strm, act::acts, oldMatches) = + yyMATCH (strm, act, yyactsToMatches (strm, acts, oldMatches)) + fun yygo actTable = + (fn (~1, _, oldMatches) => yystuck oldMatches + | (curState, strm, oldMatches) => let + val (transitions, finals') = Vector.sub (yytable, curState) + val finals = List.map (fn i => Vector.sub (actTable, i)) finals' + fun tryfinal() = + yystuck (yyactsToMatches (strm, finals, oldMatches)) + fun find (c, []) = NONE + | find (c, (c1, c2, s)::ts) = + if c1 <= c andalso c <= c2 then SOME s + else find (c, ts) + in case yygetc strm + of SOME(c, strm') => + (case find (c, transitions) + of NONE => tryfinal() + | SOME n => + yygo actTable + (n, strm', + yyactsToMatches (strm, finals, oldMatches))) + | NONE => tryfinal() + end) + val yylastwasnref = ref (ULexBuffer.lastWasNL (!yystrm)) + fun continue() = let val yylastwasn = !yylastwasnref in +let +fun yyAction0 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; YYBEGIN INTAG; continue() + end +fun yyAction1 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; YYBEGIN INITIAL; mkOpenTag(getStr()) + end +fun yyAction2 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; continue() + end +fun yyAction3 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; mkCloseTag yytext + end +fun yyAction4 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; YYBEGIN COM1; continue() + end +fun yyAction5 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; YYBEGIN COM2; continue() + end +fun yyAction6 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; continue() + end +fun yyAction7 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; YYBEGIN COM1; continue() + end +fun yyAction8 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; YYBEGIN INITIAL; COMMENT (getStr()) + end +fun yyAction9 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; continue() + end +fun yyAction10 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; continue() + end +fun yyAction11 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; + raise (Fail ("Unexpected text in comment: \"" ^ yytext ^ "\"")) + end +fun yyAction12 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; DOCTYPE yytext + end +fun yyAction13 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; XML_PROCESSING yytext + end +fun yyAction14 (strm, lastMatch : yymatch) = let + val yysubstr = yymksubstr(strm) + in + yystrm := strm; + CHAR_REF(scanInt (trimSemi (Substring.slice(yysubstr, 2, NONE)))) + end +fun yyAction15 (strm, lastMatch : yymatch) = let + val yysubstr = yymksubstr(strm) + in + yystrm := strm; + CHAR_REF(scanHex (trimSemi (Substring.slice(yysubstr, 3, NONE)))) + end +fun yyAction16 (strm, lastMatch : yymatch) = let + val yysubstr = yymksubstr(strm) + in + yystrm := strm; + ENTITY_REF(Atom.atom (Substring.string (Substring.slice(yysubstr, 1, NONE)))) + end +fun yyAction17 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; PCDATA yytext + end +fun yyAction18 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; PCDATA yytext + end +fun yyQ22 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction0(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyAction0(strm, yyNO_MATCH) + else if inp < 0wx3A + then if inp = 0wx2F + then yyAction0(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp <= 0wx2C + then yyAction0(strm, yyNO_MATCH) + else yyQ22(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyQ22(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp = 0wx5B + then yyAction0(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp <= 0wx40 + then yyAction0(strm, yyNO_MATCH) + else yyQ22(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ22(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < 0wx61 + then yyAction0(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ22(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + (* end case *)) +fun yyQ21 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3F + then yyQ23(strm', lastMatch) + else yyQ21(strm', lastMatch) + (* end case *)) +and yyQ23 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3F + then yyQ23(strm', lastMatch) + else if inp < 0wx3F + then if inp = 0wx3E + then yyQ24(strm', lastMatch) + else yyQ21(strm', lastMatch) + else yyQ21(strm', lastMatch) + (* end case *)) +and yyQ24 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction13(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3F + then yyQ23(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyQ21(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + (* end case *)) +fun yyQ27 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction3(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction3(strm, yyNO_MATCH) + (* end case *)) +fun yyQ26 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx20 + then yyQ26(strm', lastMatch) + else if inp < 0wx20 + then if inp = 0wx9 + then yyQ26(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx3E + then yyQ27(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ25 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ25(strm', lastMatch) + else if inp < 0wx30 + then if inp = 0wx20 + then yyQ26(strm', lastMatch) + else if inp < 0wx20 + then if inp = 0wx9 + then yyQ26(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx2D + then yyQ25(strm', lastMatch) + else if inp < 0wx2D + then yystuck(lastMatch) + else if inp = 0wx2F + then yystuck(lastMatch) + else yyQ25(strm', lastMatch) + else if inp = 0wx41 + then yyQ25(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx3E + then yyQ27(strm', lastMatch) + else if inp < 0wx3E + then if inp <= 0wx39 + then yyQ25(strm', lastMatch) + else yystuck(lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ25(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx5A + then yyQ25(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx7A + then yyQ25(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ20 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx5B + then yystuck(lastMatch) + else if inp < 0wx5B + then if inp <= 0wx40 + then yystuck(lastMatch) + else yyQ25(strm', lastMatch) + else if inp = 0wx61 + then yyQ25(strm', lastMatch) + else if inp < 0wx61 + then yystuck(lastMatch) + else if inp <= 0wx7A + then yyQ25(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ37 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction12(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction12(strm, yyNO_MATCH) + (* end case *)) +fun yyQ36 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3E + then yyQ37(strm', lastMatch) + else yyQ36(strm', lastMatch) + (* end case *)) +fun yyQ35 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3E + then yystuck(lastMatch) + else yyQ36(strm', lastMatch) + (* end case *)) +fun yyQ34 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx45 + then yyQ35(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ33 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx50 + then yyQ34(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ32 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx59 + then yyQ33(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ31 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx54 + then yyQ32(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ30 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx43 + then yyQ31(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ29 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx4F + then yyQ30(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ38 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction4(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction4(strm, yyNO_MATCH) + (* end case *)) +fun yyQ28 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2D + then yyQ38(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ19 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2E + then yystuck(lastMatch) + else if inp < 0wx2E + then if inp = 0wx2D + then yyQ28(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx44 + then yyQ29(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ18 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3F + then yyQ21(strm', lastMatch) + else if inp < 0wx3F + then if inp = 0wx22 + then yystuck(lastMatch) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ19(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx2F + then yyQ20(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx5B + then yystuck(lastMatch) + else if inp < 0wx5B + then if inp = 0wx40 + then yystuck(lastMatch) + else yyQ22(strm', lastMatch) + else if inp = 0wx61 + then yyQ22(strm', lastMatch) + else if inp < 0wx61 + then yystuck(lastMatch) + else if inp <= 0wx7A + then yyQ22(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ41 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction16(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction16(strm, yyNO_MATCH) + (* end case *)) +fun yyQ40 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction16(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3B + then yyQ41(strm', yyMATCH(strm, yyAction16, yyNO_MATCH)) + else if inp < 0wx3B + then if inp = 0wx2F + then yyAction16(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp <= 0wx2C + then yyAction16(strm, yyNO_MATCH) + else yyQ40(strm', yyMATCH(strm, yyAction16, yyNO_MATCH)) + else if inp = 0wx3A + then yyAction16(strm, yyNO_MATCH) + else yyQ40(strm', yyMATCH(strm, yyAction16, yyNO_MATCH)) + else if inp = 0wx5B + then yyAction16(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp <= 0wx40 + then yyAction16(strm, yyNO_MATCH) + else yyQ40(strm', yyMATCH(strm, yyAction16, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ40(strm', yyMATCH(strm, yyAction16, yyNO_MATCH)) + else if inp < 0wx61 + then yyAction16(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ40(strm', yyMATCH(strm, yyAction16, yyNO_MATCH)) + else yyAction16(strm, yyNO_MATCH) + (* end case *)) +fun yyQ45 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction15(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction15(strm, yyNO_MATCH) + (* end case *)) +fun yyQ44 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction15(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3C + then yyAction15(strm, yyNO_MATCH) + else if inp < 0wx3C + then if inp = 0wx3A + then yyAction15(strm, yyNO_MATCH) + else if inp < 0wx3A + then if inp <= 0wx2F + then yyAction15(strm, yyNO_MATCH) + else yyQ44(strm', yyMATCH(strm, yyAction15, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction15, yyNO_MATCH)) + else if inp = 0wx47 + then yyAction15(strm, yyNO_MATCH) + else if inp < 0wx47 + then if inp <= 0wx40 + then yyAction15(strm, yyNO_MATCH) + else yyQ44(strm', yyMATCH(strm, yyAction15, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ44(strm', yyMATCH(strm, yyAction15, yyNO_MATCH)) + else if inp < 0wx61 + then yyAction15(strm, yyNO_MATCH) + else if inp <= 0wx66 + then yyQ44(strm', yyMATCH(strm, yyAction15, yyNO_MATCH)) + else yyAction15(strm, yyNO_MATCH) + (* end case *)) +fun yyQ43 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ44(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ44(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ44(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ44(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ44(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ44(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ46 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction14(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction14(strm, yyNO_MATCH) + (* end case *)) +fun yyQ42 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction14(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyAction14(strm, yyNO_MATCH) + else if inp < 0wx3A + then if inp <= 0wx2F + then yyAction14(strm, yyNO_MATCH) + else yyQ42(strm', yyMATCH(strm, yyAction14, yyNO_MATCH)) + else if inp = 0wx3B + then yyQ46(strm', yyMATCH(strm, yyAction14, yyNO_MATCH)) + else yyAction14(strm, yyNO_MATCH) + (* end case *)) +fun yyQ39 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3A + then yystuck(lastMatch) + else if inp < 0wx3A + then if inp <= 0wx2F + then yystuck(lastMatch) + else yyQ42(strm', lastMatch) + else if inp = 0wx78 + then yyQ43(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ17 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ40(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp = 0wx23 + then yyQ39(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx61 + then yyQ40(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx61 + then if inp <= 0wx5A + then yyQ40(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ40(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ16 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction18(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx27 + then yyQ16(strm', yyMATCH(strm, yyAction18, yyNO_MATCH)) + else if inp < 0wx27 + then if inp = 0wx26 + then yyAction18(strm, yyNO_MATCH) + else yyQ16(strm', yyMATCH(strm, yyAction18, yyNO_MATCH)) + else if inp = 0wx3C + then yyAction18(strm, yyNO_MATCH) + else yyQ16(strm', yyMATCH(strm, yyAction18, yyNO_MATCH)) + (* end case *)) +fun yyQ3 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx27 + then yyQ16(strm', lastMatch) + else if inp < 0wx27 + then if inp = 0wx26 + then yyQ17(strm', lastMatch) + else yyQ16(strm', lastMatch) + else if inp = 0wx3C + then yyQ18(strm', lastMatch) + else yyQ16(strm', lastMatch) + (* end case *)) +fun yyQ15 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction1(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction1(strm, yyNO_MATCH) + (* end case *)) +fun yyQ14 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3E + then yyAction2(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + (* end case *)) +fun yyQ2 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3E + then yyQ15(strm', lastMatch) + else yyQ14(strm', lastMatch) + (* end case *)) +fun yyQ13 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction5(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction5(strm, yyNO_MATCH) + (* end case *)) +fun yyQ12 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction6(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx2D + then yyQ13(strm', yyMATCH(strm, yyAction6, yyNO_MATCH)) + else yyAction6(strm, yyNO_MATCH) + (* end case *)) +fun yyQ11 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction6(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction6(strm, yyNO_MATCH) + (* end case *)) +fun yyQ1 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2D + then yyQ12(strm', lastMatch) + else yyQ11(strm', lastMatch) + (* end case *)) +fun yyQ8 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction8(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction8(strm, yyNO_MATCH) + (* end case *)) +fun yyQ9 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction7(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction7(strm, yyNO_MATCH) + (* end case *)) +fun yyQ7 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction11(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx2D + then yyQ9(strm', yyMATCH(strm, yyAction11, yyNO_MATCH)) + else yyAction11(strm, yyNO_MATCH) + (* end case *)) +fun yyQ6 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction9(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction9(strm, yyNO_MATCH) + (* end case *)) +fun yyQ10 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction10(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxA + then yyAction10(strm, yyNO_MATCH) + else if inp < 0wxA + then if inp = 0wx9 + then yyQ10(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + else if inp = 0wx20 + then yyQ10(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + (* end case *)) +fun yyQ5 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction10(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxA + then yyAction10(strm, yyNO_MATCH) + else if inp < 0wxA + then if inp = 0wx9 + then yyQ10(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + else if inp = 0wx20 + then yyQ10(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + (* end case *)) +fun yyQ4 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction11(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction11(strm, yyNO_MATCH) + (* end case *)) +fun yyQ0 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx21 + then yyQ4(strm', lastMatch) + else if inp < 0wx21 + then if inp = 0wxA + then yyQ6(strm', lastMatch) + else if inp < 0wxA + then if inp = 0wx9 + then yyQ5(strm', lastMatch) + else yyQ4(strm', lastMatch) + else if inp = 0wx20 + then yyQ5(strm', lastMatch) + else yyQ4(strm', lastMatch) + else if inp = 0wx2E + then yyQ4(strm', lastMatch) + else if inp < 0wx2E + then if inp = 0wx2D + then yyQ7(strm', lastMatch) + else yyQ4(strm', lastMatch) + else if inp = 0wx3E + then yyQ8(strm', lastMatch) + else yyQ4(strm', lastMatch) + (* end case *)) +in + (case (!(yyss)) + of COM2 => yyQ0(!(yystrm), yyNO_MATCH) + | COM1 => yyQ1(!(yystrm), yyNO_MATCH) + | INTAG => yyQ2(!(yystrm), yyNO_MATCH) + | INITIAL => yyQ3(!(yystrm), yyNO_MATCH) + (* end case *)) +end +end + and skip() = (yystartPos := yygetPos(); + yylastwasnref := ULexBuffer.lastWasNL (!yystrm); + continue()) + in (continue(), (!yystartPos, yygetPos()), !yystrm, !yyss) end + in + lex() + end + in + type pos = AntlrStreamPos.pos + type span = AntlrStreamPos.span + type tok = UserDeclarations.lex_result + + datatype prestrm = STRM of ULexBuffer.stream * + (yystart_state * tok * span * prestrm * yystart_state) option ref + type strm = (prestrm * yystart_state) + + fun lex sm +(STRM (yystrm, memo), ss) = (case !memo + of NONE => let + val (tok, span, yystrm', ss') = innerLex +(yystrm, ss, sm) + val strm' = STRM (yystrm', ref NONE); + in + memo := SOME (ss, tok, span, strm', ss'); + (tok, span, (strm', ss')) + end + | SOME (ss', tok, span, strm', ss'') => + if ss = ss' then + (tok, span, (strm', ss'')) + else ( + memo := NONE; + lex sm +(STRM (yystrm, memo), ss)) + (* end case *)) + + fun streamify input = (STRM (yystreamify' 0 input, ref NONE), INITIAL) + fun streamifyReader readFn strm = (STRM (yystreamifyReader' 0 readFn strm, ref NONE), + INITIAL) + fun streamifyInstream strm = (STRM (yystreamifyInstream' 0 strm, ref NONE), + INITIAL) + + fun getPos (STRM (strm, _), _) = ULexBuffer.getpos strm + + end +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-parser.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-parser.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-parser.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-parser.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,707 @@ +(* html4-parser.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Defines the HTML4Parser structure, which defunctorizes the + * automatically generated parser, defines an additional set of + * utilities for working with the parser. + *) + +structure HTML4Parser = struct + +structure H4 = HTML4 +structure H4U = HTML4Utils +structure H4T = HTML4Tokens +structure H4TU = HTML4TokenUtils +structure AtomMap = H4TU.AtomMap + +local + structure TheParser = HTML4ParseFn(HTML4Lexer) +in +open TheParser +end + +fun parseStream inStream = + let + val sourceMap = AntlrStreamPos.mkSourcemap () + val lex = HTML4Lexer.lex sourceMap + val stream = HTML4Lexer.streamifyInstream inStream + val (result, _, _) = parse lex stream + in + result + end + +exception IllFormedHTMLParseStream of + H4T.token H4U.parsevisitation H4U.stream * string option + +val tokVisitationToString = H4U.visitationToString H4T.toString + +val strVisitationToString = H4U.visitationToString (fn x : string => x) + +val visitationSimilar = let + fun tokSimilarToString (tok1, tokStr2) = (H4T.toString tok1) = tokStr2 +in H4U.visitationSame tokSimilarToString end + +fun expect expectedVisit pstrm = + let val pstrmHd = H4U.stream_hd pstrm + handle _ => H4U.VisitT H4T.EOF + fun expectationError () = + let val msg = String.concat + ["Expected ", + strVisitationToString expectedVisit, ", got ", + tokVisitationToString pstrmHd, " instead."] + in IllFormedHTMLParseStream(pstrm, SOME msg) end + in + if visitationSimilar(pstrmHd, expectedVisit) then H4U.stream_tl pstrm + else raise (expectationError()) + end + +fun expectEnterNT nt = expect (H4U.EnterNT (Atom.atom nt)) + +fun expectExitNT nt = expect (H4U.ExitNT (Atom.atom nt)) + +fun expectVisitT tokStr = expect (H4U.VisitT tokStr) + +fun expectEnterNTInDomain ntMap pstrm = let + val pstrmHd = H4U.stream_hd pstrm + handle _ => H4U.VisitT H4T.EOF + fun expectationError () = let + val expectedNTs = String.concatWith ", " (map Atom.toString (AtomMap.listKeys ntMap)) + val msg = String.concat [ + "Expected entry of one of ", expectedNTs, "; got ", + tokVisitationToString pstrmHd, " instead." + ] + in + IllFormedHTMLParseStream(pstrm, SOME msg) + end + in + case pstrmHd + of H4U.EnterNT ntAtom => + if AtomMap.inDomain (ntMap, ntAtom) + then AtomMap.lookup (ntMap, ntAtom) + else raise (expectationError ()) + | _ => raise (expectationError ()) + (* end case *) + end + +fun optional optVisit (strm as H4U.StreamCons(strmHd, _)) = + if visitationSimilar(strmHd, optVisit) + then (H4U.stream_tl strm, SOME strmHd) + else (strm, NONE) + | optional _ _ = (H4U.StreamNil, NONE) + +fun optVisitTok tokName strm = + case optional (H4U.VisitT tokName) strm + of (strm', SOME (H4U.VisitT tok)) => (strm', SOME tok) + | _ => (strm, NONE) + +fun isEnterNT nt pstrm = (expectEnterNT nt pstrm; true) + handle IllFormedHTMLParseStream _ => false + +fun isExitNT nt pstrm = (expectExitNT nt pstrm; true) + handle IllFormedHTMLParseStream _ => false + +fun isVisitT tokStr pstrm = (expectVisitT tokStr pstrm; true) + handle IllFormedHTMLParseStream _ => false + +fun isEither (is1, is2) pstrm = (is1 pstrm) orelse (is2 pstrm) + +fun streamSkipUntil _ H4U.StreamNil = H4U.StreamNil + | streamSkipUntil pred (strm as H4U.StreamCons (strmHd, _)) = + if pred strmHd then strm else streamSkipUntil pred (H4U.stream_tl strm) + +fun streamSkipWhile pred = streamSkipUntil (fn strmHd => not (pred strmHd)) + +fun streamConsumeUntil consumer until strm = + let fun streamConsumeUntil' strm' acc = + if until strm' then (strm', rev acc) + else let val (strm'', consumerVal) = consumer strm' + in streamConsumeUntil' strm'' (consumerVal :: acc) end + in streamConsumeUntil' strm [] end + +fun tokIsSpace (H4T.PCDATA pcstr) = CharVector.all Char.isSpace pcstr + | tokIsSpace _ = false + +fun tokIsComment (H4T.COMMENT _) = true + | tokIsComment _ = false + +fun visitationIsSpace (H4U.VisitT tok) = tokIsSpace tok + | visitationIsSpace _ = false + +(* XXX I don't like the solution of skipping both whitespace and +comments, but I don't know how to munge CDATA and comments into block +elements, given the current HTML 4 data structure (I could add these, +but it would break the "purity" of the existing data type). *) + +fun visitationIsSpaceOrComment (H4U.VisitT tok) = (tokIsSpace tok) orelse + (tokIsComment tok) + | visitationIsSpaceOrComment _ = false + +val skipWhitespace = streamSkipWhile visitationIsSpace + +val skipWhitespaceOrComment = streamSkipWhile visitationIsSpaceOrComment + +fun tokIsCdata (H4T.PCDATA _) = true + | tokIsCdata (H4T.ENTITY_REF _) = true + | tokIsCdata (H4T.CHAR_REF _) = true + | tokIsCdata (H4T.COMMENT _) = true + | tokIsCdata _ = false + +fun isNotCdata (H4U.StreamCons(H4U.VisitT tok, _)) = not (tokIsCdata tok) + | isNotCdata _ = true + +exception InvalidToken of H4T.token + +fun tokToCdata (H4T.PCDATA str) = H4.PCDATA str + | tokToCdata (H4T.ENTITY_REF ent) = H4.ENTITY ent + | tokToCdata (H4T.CHAR_REF chr) = H4.CHAR chr + | tokToCdata (H4T.COMMENT cmt) = H4.COMMENT cmt + | tokToCdata tok = raise (InvalidToken tok) + +(*+DEBUG*) +fun tokToString (H4T.DOCTYPE doctypeStr) = doctypeStr + | tokToString (H4T.PCDATA dataStr) = ("PCDATA \"" ^ (String.toString dataStr) + ^ "\"") + | tokToString (H4T.COMMENT commentStr) = commentStr + | tokToString tok = H4TU.tokToString tok + +fun printVisitationStream strm = + print ((H4U.visitationToString tokToString (H4U.stream_hd strm)) ^ "\n") + +fun printIllFormedErr (IllFormedHTMLParseStream (strm, msgOpt)) = ( + print "Error in parse stream at: "; + printVisitationStream strm; + (case msgOpt of SOME msg => print(concat["Message: ", msg, "\n"]) | _ => ())) + | printIllFormedErr exn = raise exn +(*-DEBUG*) + +fun getAttrsFromStream (H4U.StreamCons (H4U.VisitT tok, _)) = + (case H4TU.tokGetAttrs tok + of SOME attrs => attrs + | NONE => []) + | getAttrsFromStream _ = [] + +fun html0aryFromParseStream tag ctor pstrm = + let val pstrm1 = expectEnterNT tag pstrm + val pstrm2 = expectVisitT ("START" ^ tag) pstrm1 + val attrs = getAttrsFromStream pstrm1 + val pstrm3 = expectExitNT tag (skipWhitespaceOrComment pstrm2) + in + (pstrm3, SOME (ctor attrs)) + end + +fun listOfOptsToList lst = map Option.valOf lst +(*DEBUG*) handle ex => raise ex + +fun htmlNaryFromParseStream tag ctor childFromParseStream pstrm0 = + let val endTag = "END" ^ tag + val pstrm1 = expectEnterNT tag pstrm0 + val pstrm2 = expectVisitT ("START" ^ tag) pstrm1 + val attrs = getAttrsFromStream pstrm1 + val (pstrm3, children) = + streamConsumeUntil childFromParseStream + (isEither (isVisitT endTag, isExitNT tag)) + (skipWhitespaceOrComment pstrm2) + val (pstrm4, _) = optVisitTok endTag pstrm3 + val pstrm5 = expectExitNT tag (skipWhitespaceOrComment pstrm4) + in (pstrm5, SOME (ctor (attrs, listOfOptsToList children))) end + +type parseVisitStream = H4T.token H4U.parsevisitation H4U.stream + +(* FIXME: might as well use AtomTable.hash_table for these, since we are initializing them later *) +val headContentNTMap : (parseVisitStream -> parseVisitStream * H4.head_content option) AtomMap.map ref = + ref AtomMap.empty + +val blockNTMap : (parseVisitStream -> parseVisitStream * H4.block option) AtomMap.map ref = + ref AtomMap.empty + +val inlineNTMap : (parseVisitStream -> parseVisitStream * H4.inline option) AtomMap.map ref = + ref AtomMap.empty + +val tableDataNTMap : (parseVisitStream -> parseVisitStream * H4.table_data option) AtomMap.map ref = + ref AtomMap.empty + +fun cvtBlock ctor (SOME block) = SOME (ctor block) + | cvtBlock _ NONE = NONE + +fun cvtInline ctor (SOME inline) = SOME (ctor inline) + | cvtInline _ NONE = NONE + +fun cvtFlow ctor (SOME flow) = SOME (ctor flow) + | cvtFlow _ _ = NONE + +fun cvtOption ctor (SOME htmlopt) = SOME (ctor htmlopt) + | cvtOption _ _ = NONE + +fun cvtParam ctor (SOME param) = SOME (ctor param) + | cvtParam _ _ = NONE + +fun cvtFrameset ctor (SOME frameset) = SOME (ctor frameset) + | cvtFrameset _ NONE = NONE + +fun cvtScript ctor (SOME script) = SOME (ctor script) + | cvtScript _ _ = NONE + +fun cdataFromParseStream pstrm = + if isNotCdata pstrm + then raise (IllFormedHTMLParseStream(pstrm, + SOME "Expected character data.")) + else + let val pstrmHd = H4U.stream_hd pstrm + val pstrmTl = H4U.stream_tl pstrm + in case pstrmHd + of H4U.VisitT tok => (pstrmTl, SOME (tokToCdata tok)) + | _ => (pstrmTl, NONE) + end + +fun htmlFromParseStream pstrm0 = + let val pstrm1 = + (skipWhitespaceOrComment o (expectEnterNT "DOCUMENT")) pstrm0 + val (pstrm2, doctypeTokOpt) = optVisitTok "DOCTYPE" pstrm1 + val theVersion = (case doctypeTokOpt + of SOME (H4T.DOCTYPE doctype) => SOME doctype + | _ => NONE) + val (pstrm3, starthtmlTokOpt) = + optVisitTok "STARTHTML" (skipWhitespaceOrComment pstrm2) + val (pstrm4, headDataListOpt) = headFromParseStream + (skipWhitespaceOrComment pstrm3) + in if not (isSome headDataListOpt) + then (pstrm4, NONE) + else (case bodyOrFramesetFromParseStream pstrm4 + of (pstrm5, SOME content) => let + val (pstrm6, _) = optVisitTok "ENDHTML" pstrm5 + val pstrm7 = (skipWhitespaceOrComment o + (expectExitNT "DOCUMENT") o + skipWhitespaceOrComment) pstrm6 + in ( + pstrm7, + SOME (H4.HTML{ + version = theVersion, + head = [], + content = content + }) + ) end + | (pstrm5, NONE) => (pstrm5, NONE) + (* end case *)) + end +and headFromParseStream pstrm0 = + let val pstrm1 = (skipWhitespaceOrComment o (expectEnterNT "HEAD")) pstrm0 + val (pstrm2, startheadTokOpt) = optVisitTok "STARTHEAD" pstrm1 + val (pstrm3, children) = + streamConsumeUntil headContentFromParseStream + (isEither(isExitNT "HEAD", isVisitT "ENDHEAD")) + (skipWhitespaceOrComment pstrm2) + val (pstrm4, _) = optVisitTok "ENDHEAD" pstrm3 + val pstrm5 = expectExitNT "HEAD" (skipWhitespaceOrComment pstrm4) + in (pstrm5, SOME (listOfOptsToList children)) end +and headContentFromParseStream pstrm = + let val ntFunc = expectEnterNTInDomain (!headContentNTMap) pstrm + val (pstrm', resultOpt) = ntFunc pstrm + in (skipWhitespaceOrComment pstrm', resultOpt) end +and bodyOrFramesetFromParseStream pstrm = + let fun cvtBody (SOME body) = SOME (H4.BodyOrFrameset_BODY body) + | cvtBody _ = NONE + in + if isEnterNT "BODY" pstrm + then let val (pstrm', bodyOpt) = bodyFromParseStream pstrm + in (pstrm', cvtBody bodyOpt) end + else let val (pstrm', framesetOpt) = framesetFromParseStream pstrm + in (pstrm', + cvtFrameset H4.BodyOrFrameset_FRAMESET framesetOpt) end + end +and bodyFromParseStream pstrm0 = + let val pstrm1 = expectEnterNT "BODY" pstrm0 + val (pstrm2, startbodyTokOpt) = optVisitTok "STARTBODY" pstrm1 + val attrs = (case startbodyTokOpt + of SOME startbody => (case H4TU.tokGetAttrs startbody + of SOME attrs => attrs + | NONE => [] + (* end case *)) + | NONE => [] + (* end case *)) + val (pstrm3, children) = + streamConsumeUntil blockOrScriptFromParseStream + (isEither(isExitNT "BODY", isVisitT "ENDBODY")) + (skipWhitespaceOrComment pstrm2) + val (pstrm4, _) = optVisitTok "ENDBODY" pstrm3 + val pstrm5 = expectExitNT "BODY" (skipWhitespaceOrComment pstrm4) + in (pstrm5, SOME (H4.BODY (attrs, listOfOptsToList children))) end +and framesetFromParseStream pstrm0 = + let val pstrm1 = expectEnterNT "FRAMESET" pstrm0 + val pstrm2 = expectVisitT "STARTFRAMESET" pstrm1 + val attrs = getAttrsFromStream pstrm1 + val (pstrm3, children) = + streamConsumeUntil framesetOrFrameFromParseStream + (isEither(isVisitT "ENDFRAMESET", + isEnterNT "NOFRAMES")) + (skipWhitespaceOrComment pstrm2) + val (pstrm4, noframesOpt) = + if isEnterNT "NOFRAMES" pstrm3 then + let val (pstrm4', noframesOpt') = + noFramesFromParseStream pstrm3 + in (skipWhitespaceOrComment pstrm4', noframesOpt') end + else (pstrm3, NONE) + val pstrm5 = expectVisitT "ENDFRAMESET" pstrm4 + val pstrm6 = expectExitNT "FRAMESET" (skipWhitespaceOrComment pstrm5) + in + (pstrm6, SOME (H4.FRAMESET (attrs, listOfOptsToList children, + noframesOpt))) + end +and framesetOrFrameFromParseStream pstrm0 = + let val pstrm1 = skipWhitespaceOrComment pstrm0 + val (pstrm2, result) = + if isEnterNT "FRAMESET" pstrm1 + then let val (pstrm', result') = framesetFromParseStream pstrm1 + in (pstrm', + cvtFrameset H4.FramesetOrFrame_FRAMESET result') end + else html0aryFromParseStream "FRAME" H4.FRAME pstrm1 + in (skipWhitespaceOrComment pstrm2, result) end +and noFramesFromParseStream pstrm0 = + let val pstrm1 = expectEnterNT "NOFRAMES" pstrm0 + val pstrm2 = expectVisitT "STARTNOFRAMES" pstrm1 + val attrs = getAttrsFromStream pstrm1 + val (pstrm3, bodyOpt) = bodyFromParseStream pstrm2 + val pstrm4 = expectVisitT "ENDNOFRAMES" pstrm3 + val pstrm5 = expectExitNT "NOFRAMES" pstrm4 + in (pstrm5, SOME (H4.NOFRAMES (attrs, valOf bodyOpt))) +(* DEBUG *)handle ex => raise ex +end +and flowFromParseStream pstrm = + let val pstrmHd = H4U.stream_hd pstrm + fun procInline pstrm = + let val (pstrm', result') = inlineFromParseStream pstrm + in (pstrm', cvtInline H4.Flow_INLINE result') end + in case pstrmHd + of H4U.EnterNT ntAtom => + if AtomMap.inDomain (!blockNTMap, ntAtom) + then let val (pstrm', result') = blockFromParseStream pstrm + in (pstrm', cvtBlock H4.Flow_BLOCK result') end + else procInline pstrm + | _ => procInline pstrm + end +and blockFromParseStream pstrm = + (expectEnterNTInDomain (!blockNTMap) pstrm) pstrm +and inlineFromParseStream pstrm = + let val pstrmHd = H4U.stream_hd pstrm + in case pstrmHd + of H4U.VisitT tok => + let val (pstrm', cdataOptList) = + streamConsumeUntil cdataFromParseStream isNotCdata pstrm + in (pstrm', SOME (H4.CDATA (listOfOptsToList cdataOptList))) end + | _ => (expectEnterNTInDomain (!inlineNTMap) pstrm) pstrm + end +and listItemFromParseStream pstrm = + htmlNaryFromParseStream "LI" H4.LI flowFromParseStream pstrm +and scriptFromParseStream pstrm = + htmlNaryFromParseStream "SCRIPT" H4.SCRIPT cdataFromParseStream pstrm +and paramFromParseStream pstrm = + html0aryFromParseStream "PARAM" H4.PARAM pstrm +and legendFromParseStream pstrm = + htmlNaryFromParseStream "LEGEND" H4.LEGEND inlineFromParseStream pstrm +and defTermOrDescFromParseStream pstrm = + if isEnterNT "DT" pstrm + then htmlNaryFromParseStream "DT" H4.DT inlineFromParseStream pstrm + else htmlNaryFromParseStream "DD" H4.DD flowFromParseStream pstrm +and tableDataFromParseStream pstrm = + (expectEnterNTInDomain (!tableDataNTMap) pstrm) pstrm +and trFromParseStream pstrm = + htmlNaryFromParseStream "TR" H4.TR thOrTdFromParseStream pstrm +and thOrTdFromParseStream pstrm = + if isEnterNT "TH" pstrm + then htmlNaryFromParseStream "TH" H4.TH flowFromParseStream pstrm + else htmlNaryFromParseStream "TD" H4.TD flowFromParseStream pstrm +and optgroupOrOptionFromParseStream pstrm = + if isEnterNT "OPTGROUP" pstrm + then let + fun parseOpt pstrm = (case htmlOptionFromParseStream pstrm + of (pstrm', SOME(H4.OPTION stuff)) => (pstrm', SOME stuff) + | (pstrm', _) => (pstrm', NONE) + (* end case *)) + in htmlNaryFromParseStream "OPTGROUP" H4.OPTGROUP parseOpt pstrm end + else htmlOptionFromParseStream pstrm +and htmlOptionFromParseStream pstrm = + htmlNaryFromParseStream "OPTION" H4.OPTION cdataFromParseStream pstrm +and flowOrParamFromParseStream pstrm = + if isEnterNT "PARAM" pstrm + then let val (pstrm', paramOpt) = paramFromParseStream pstrm + in (pstrm', cvtParam H4.FlowOrParam_PARAM paramOpt) end + else let val (pstrm', flowOpt) = flowFromParseStream pstrm + in (pstrm', cvtFlow H4.FlowOrParam_FLOW flowOpt) end +and blockOrScriptFromParseStream pstrm = + if isEnterNT "SCRIPT" pstrm + then let val (pstrm', scriptOpt) = scriptFromParseStream pstrm + in (skipWhitespaceOrComment pstrm', + cvtScript H4.BlockOrScript_SCRIPT scriptOpt) end + else let val (pstrm', blockOpt) = blockFromParseStream pstrm + in (skipWhitespaceOrComment pstrm', + cvtBlock H4.BlockOrScript_BLOCK blockOpt) end +and blockOrAreaFromParseStream pstrm = + if isEnterNT "AREA" pstrm + then html0aryFromParseStream "AREA" H4.AREA pstrm + else let val (pstrm', blockOpt) = blockFromParseStream pstrm + in (pstrm', cvtBlock H4.BlockOrArea_BLOCK blockOpt) end +and headObjectFromParseStream pstrm = + htmlNaryFromParseStream "OBJECT" H4.Head_OBJECT flowOrParamFromParseStream + pstrm +and headScriptFromParseStream pstrm = + let val (pstrm', scriptOpt) = scriptFromParseStream pstrm + in (pstrm', cvtScript H4.Head_SCRIPT scriptOpt) end + +val titleFromParseStream = + htmlNaryFromParseStream "TITLE" H4.Head_TITLE cdataFromParseStream +val baseFromParseStream = html0aryFromParseStream "BASE" H4.Head_BASE +val metaFromParseStream = html0aryFromParseStream "META" H4.Head_META +val linkFromParseStream = html0aryFromParseStream "LINK" H4.Head_LINK +val pFromParseStream = htmlNaryFromParseStream "P" H4.P inlineFromParseStream +val h1FromParseStream = + htmlNaryFromParseStream "H1" H4.H1 inlineFromParseStream +val h2FromParseStream = + htmlNaryFromParseStream "H2" H4.H2 inlineFromParseStream +val h3FromParseStream = + htmlNaryFromParseStream "H3" H4.H3 inlineFromParseStream +val h4FromParseStream = + htmlNaryFromParseStream "H4" H4.H4 inlineFromParseStream +val h5FromParseStream = + htmlNaryFromParseStream "H5" H4.H5 inlineFromParseStream +val h6FromParseStream = + htmlNaryFromParseStream "H6" H4.H6 inlineFromParseStream +val ulFromParseStream = + htmlNaryFromParseStream "UL" H4.UL listItemFromParseStream +val olFromParseStream = + htmlNaryFromParseStream "OL" H4.OL listItemFromParseStream +val dirFromParseStream = + htmlNaryFromParseStream "DIR" H4.DIR listItemFromParseStream +val menuFromParseStream = + htmlNaryFromParseStream "MENU" H4.MENU listItemFromParseStream +val preFromParseStream = + (* XXX This will not properly track whitespace currently. *) + htmlNaryFromParseStream "PRE" H4.PRE inlineFromParseStream +val dlFromParseStream = + htmlNaryFromParseStream "DL" H4.DL defTermOrDescFromParseStream +val divFromParseStream = + htmlNaryFromParseStream "DIV" H4.DIV flowFromParseStream +val noscriptFromParseStream = + htmlNaryFromParseStream "NOSCRIPT" H4.NOSCRIPT blockFromParseStream +val blockquoteFromParseStream = + htmlNaryFromParseStream "BLOCKQUOTE" H4.BLOCKQUOTE + blockOrScriptFromParseStream +val formFromParseStream = + htmlNaryFromParseStream "FORM" H4.FORM blockOrScriptFromParseStream +val hrFromParseStream = html0aryFromParseStream "HR" H4.HR +val tableFromParseStream = + htmlNaryFromParseStream "TABLE" H4.TABLE tableDataFromParseStream +fun fieldsetFromParseStream pstrm0 = + let val pstrm1 = expectEnterNT "FIELDSET" pstrm0 + val pstrm2 = expectVisitT "STARTFIELDSET" pstrm1 + val attrs = getAttrsFromStream pstrm1 + val (pstrm3, legendOpt) = + legendFromParseStream (skipWhitespaceOrComment pstrm2) + val (pstrm4, flows) = + streamConsumeUntil flowFromParseStream (isVisitT "ENDFIELDSET") + pstrm3 + val pstrm5 = expectVisitT "ENDFIELDSET" pstrm4 + val pstrm6 = expectExitNT "FIELDSET" pstrm5 + in (pstrm5, SOME (H4.FIELDSET (attrs, legendOpt, + listOfOptsToList flows))) end +val addressFromParseStream = + htmlNaryFromParseStream "ADDRESS" H4.ADDRESS inlineFromParseStream +val centerFromParseStream = + htmlNaryFromParseStream "CENTER" H4.CENTER flowFromParseStream +val isindexFromParseStream = html0aryFromParseStream "ISINDEX" H4.ISINDEX +val ttFromParseStream = + htmlNaryFromParseStream "TT" H4.TT inlineFromParseStream +val iFromParseStream = + htmlNaryFromParseStream "I" H4.I inlineFromParseStream +val bFromParseStream = + htmlNaryFromParseStream "B" H4.B inlineFromParseStream +val bigFromParseStream = + htmlNaryFromParseStream "BIG" H4.BIG inlineFromParseStream +val smallFromParseStream = + htmlNaryFromParseStream "SMALL" H4.SMALL inlineFromParseStream +val uFromParseStream = + htmlNaryFromParseStream "U" H4.U inlineFromParseStream +val sFromParseStream = + htmlNaryFromParseStream "S" H4.S inlineFromParseStream +val strikeFromParseStream = + htmlNaryFromParseStream "STRIKE" H4.STRIKE inlineFromParseStream +val emFromParseStream = + htmlNaryFromParseStream "EM" H4.EM inlineFromParseStream +val strongFromParseStream = + htmlNaryFromParseStream "STRONG" H4.STRONG inlineFromParseStream +val dfnFromParseStream = + htmlNaryFromParseStream "DFN" H4.DFN inlineFromParseStream +val codeFromParseStream = + htmlNaryFromParseStream "CODE" H4.CODE inlineFromParseStream +val sampFromParseStream = + htmlNaryFromParseStream "SAMP" H4.SAMP inlineFromParseStream +val kbdFromParseStream = + htmlNaryFromParseStream "KBD" H4.KBD inlineFromParseStream +val varFromParseStream = + htmlNaryFromParseStream "VAR" H4.VAR inlineFromParseStream +val citeFromParseStream = + htmlNaryFromParseStream "CITE" H4.CITE inlineFromParseStream +val abbrFromParseStream = + htmlNaryFromParseStream "ABBR" H4.ABBR inlineFromParseStream +val acronymFromParseStream = + htmlNaryFromParseStream "ACRONYM" H4.ACRONYM inlineFromParseStream +val aFromParseStream = + htmlNaryFromParseStream "A" H4.A inlineFromParseStream +val imgFromParseStream = + html0aryFromParseStream "IMG" H4.IMG +val objectFromParseStream = + htmlNaryFromParseStream "OBJECT" H4.OBJECT flowOrParamFromParseStream +val brFromParseStream = + html0aryFromParseStream "BR" H4.BR +fun inlineScriptFromParseStream pstrm = + let val (pstrm', scriptOpt) = scriptFromParseStream pstrm + in (pstrm', cvtScript H4.Inline_SCRIPT scriptOpt) end +val mapFromParseStream = + htmlNaryFromParseStream "MAP" H4.MAP blockOrAreaFromParseStream +val qFromParseStream = + htmlNaryFromParseStream "Q" H4.Q inlineFromParseStream +val subFromParseStream = + htmlNaryFromParseStream "SUB" H4.SUB inlineFromParseStream +val supFromParseStream = + htmlNaryFromParseStream "SUP" H4.SUP inlineFromParseStream +val spanFromParseStream = + htmlNaryFromParseStream "SPAN" H4.SPAN inlineFromParseStream +val bdoFromParseStream = + htmlNaryFromParseStream "BDO" H4.BDO inlineFromParseStream +val appletFromParseStream = + htmlNaryFromParseStream "APPLET" H4.APPLET flowOrParamFromParseStream +val basefontFromParseStream = + html0aryFromParseStream "BASEFONT" H4.BASEFONT +val fontFromParseStream = + htmlNaryFromParseStream "FONT" H4.FONT inlineFromParseStream +val iframeFromParseStream = + htmlNaryFromParseStream "IFRAME" H4.IFRAME flowFromParseStream +val inputFromParseStream = + html0aryFromParseStream "INPUT" H4.INPUT +val selectFromParseStream = + htmlNaryFromParseStream "SELECT" H4.SELECT optgroupOrOptionFromParseStream +val textareaFromParseStream = + htmlNaryFromParseStream "TEXTAREA" H4.TEXTAREA cdataFromParseStream +val labelFromParseStream = + htmlNaryFromParseStream "LABEL" H4.LABEL inlineFromParseStream +val buttonFromParseStream = + htmlNaryFromParseStream "BUTTON" H4.BUTTON flowFromParseStream +val captionFromParseStream = + htmlNaryFromParseStream "CAPTION" H4.CAPTION inlineFromParseStream +val colFromParseStream = + html0aryFromParseStream "COL" H4.COL +val colgroupFromParseStream = + let fun consumeCol pstrm = + let val (pstrm', colOptVal) = colFromParseStream pstrm + fun cvtCol (SOME (H4.COL attrs)) = SOME attrs + | cvtCol _ = NONE + in (skipWhitespaceOrComment pstrm', cvtCol colOptVal) end + in htmlNaryFromParseStream "COLGROUP" H4.COLGROUP consumeCol end +val theadFromParseStream = + htmlNaryFromParseStream "THEAD" H4.THEAD trFromParseStream +val tfootFromParseStream = + htmlNaryFromParseStream "TFOOT" H4.TFOOT trFromParseStream +val tbodyFromParseStream = + htmlNaryFromParseStream "TBODY" H4.TBODY trFromParseStream + +val _ = + (headContentNTMap + := (foldl AtomMap.insert' AtomMap.empty + [ (Atom.atom "TITLE", titleFromParseStream), + (Atom.atom "BASE", baseFromParseStream), + (Atom.atom "SCRIPT", headScriptFromParseStream), + (Atom.atom "META", metaFromParseStream), + (Atom.atom "LINK", linkFromParseStream), + (Atom.atom "OBJECT", headObjectFromParseStream)]), + blockNTMap + := (foldl AtomMap.insert' AtomMap.empty + [ (Atom.atom "P", pFromParseStream), + (Atom.atom "H1", h1FromParseStream), + (Atom.atom "H2", h2FromParseStream), + (Atom.atom "H3", h3FromParseStream), + (Atom.atom "H4", h4FromParseStream), + (Atom.atom "H5", h5FromParseStream), + (Atom.atom "H6", h6FromParseStream), + (Atom.atom "UL", ulFromParseStream), + (Atom.atom "OL", olFromParseStream), + (Atom.atom "DIR", dirFromParseStream), + (Atom.atom "MENU", menuFromParseStream), + (Atom.atom "PRE", preFromParseStream), + (Atom.atom "DL", dlFromParseStream), + (Atom.atom "DIV", divFromParseStream), + (Atom.atom "NOSCRIPT", noscriptFromParseStream), + (Atom.atom "BLOCKQUOTE", blockquoteFromParseStream), + (Atom.atom "FORM", formFromParseStream), + (Atom.atom "HR", hrFromParseStream), + (Atom.atom "TABLE", tableFromParseStream), + (Atom.atom "FIELDSET", fieldsetFromParseStream), + (Atom.atom "ADDRESS", addressFromParseStream), + (Atom.atom "ISINDEX", isindexFromParseStream), + (Atom.atom "CENTER", centerFromParseStream)]), + inlineNTMap + := (foldl AtomMap.insert' AtomMap.empty + [ (Atom.atom "TT", ttFromParseStream), + (Atom.atom "I", iFromParseStream), + (Atom.atom "B", bFromParseStream), + (Atom.atom "BIG", bigFromParseStream), + (Atom.atom "SMALL", smallFromParseStream), + (Atom.atom "U", uFromParseStream), + (Atom.atom "S", sFromParseStream), + (Atom.atom "STRIKE", strikeFromParseStream), + (Atom.atom "EM", emFromParseStream), + (Atom.atom "STRONG", strongFromParseStream), + (Atom.atom "DFN", dfnFromParseStream), + (Atom.atom "CODE", codeFromParseStream), + (Atom.atom "SAMP", sampFromParseStream), + (Atom.atom "KBD", kbdFromParseStream), + (Atom.atom "VAR", varFromParseStream), + (Atom.atom "CITE", citeFromParseStream), + (Atom.atom "ABBR", abbrFromParseStream), + (Atom.atom "ACRONYM", acronymFromParseStream), + (Atom.atom "A", aFromParseStream), + (Atom.atom "IMG", imgFromParseStream), + (Atom.atom "OBJECT", objectFromParseStream), + (Atom.atom "BR", brFromParseStream), + (Atom.atom "SCRIPT", inlineScriptFromParseStream), + (Atom.atom "MAP", mapFromParseStream), + (Atom.atom "Q", qFromParseStream), + (Atom.atom "SUB", subFromParseStream), + (Atom.atom "SUP", supFromParseStream), + (Atom.atom "SPAN", spanFromParseStream), + (Atom.atom "BDO", bdoFromParseStream), + (Atom.atom "APPLET", appletFromParseStream), + (Atom.atom "BASEFONT", basefontFromParseStream), + (Atom.atom "FONT", fontFromParseStream), + (Atom.atom "IFRAME", iframeFromParseStream), + (Atom.atom "INPUT", inputFromParseStream), + (Atom.atom "SELECT", selectFromParseStream), + (Atom.atom "TEXTAREA", textareaFromParseStream), + (Atom.atom "LABEL", labelFromParseStream), + (Atom.atom "BUTTON", buttonFromParseStream)]), + tableDataNTMap + := (foldl AtomMap.insert' AtomMap.empty + [ (Atom.atom "CAPTION", captionFromParseStream), + (Atom.atom "COL", colFromParseStream), + (Atom.atom "COLGROUP", colgroupFromParseStream), + (Atom.atom "THEAD", theadFromParseStream), + (Atom.atom "TFOOT", tfootFromParseStream), + (Atom.atom "TBODY", tbodyFromParseStream)]) + ) + +fun fromParseTree pt = + let val (_, result) = + htmlFromParseStream (H4U.parsetreeToVisitationStream pt) + in result end + +fun fromString str = let + val pt_opt = parseStream (TextIO.openString str) +in case pt_opt + of NONE => NONE + | SOME pt => fromParseTree pt +end + +end (* HTML4ParserUtils *) + +(* ______________________________________________________________________ + End of html4-parser.sml + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-printer.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-printer.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-printer.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-printer.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,404 @@ +(* html4-printer.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure HTML4Printer : sig + val toString : HTML4.html -> string +end = struct + +structure H4 = HTML4 + +structure PP = PrettyPrint + +exception NotImplemented + +structure HTML4TagStrings = struct + (* Strict *) + val A = "A" + val ABBR = "ABBR" + val ACRONYM = "ACRONYM" + val ADDRESS = "ADDRESS" + val AREA = "AREA" + val B = "B" + val BASE = "BASE" + val BDO = "BDO" + val BIG = "BIG" + val BLOCKQUOTE = "BLOCKQUOTE" + val BODY = "BODY" + val BR = "BR" + val BUTTON = "BUTTON" + val CAPTION = "CAPTION" + val CITE = "CITE" + val CODE = "CODE" + val COL = "COL" + val COLGROUP = "COLGROUP" + val DD = "DD" + val DEL = "DEL" + val DFN = "DFN" + val DIV = "DIV" + val DL = "DL" + val DT = "DT" + val EM = "EM" + val FIELDSET = "FIELDSET" + val FORM = "FORM" + val H1 = "H1" + val H2 = "H2" + val H3 = "H3" + val H4 = "H4" + val H5 = "H5" + val H6 = "H6" + val HEAD = "HEAD" + val HR = "HR" + val HTML = "HTML" + val I = "I" + val IMG = "IMG" + val INPUT = "INPUT" + val INS = "INS" + val KBD = "KBD" + val LABEL = "LABEL" + val LEGEND = "LEGEND" + val LI = "LI" + val LINK = "LINK" + val MAP = "MAP" + val META = "META" + val NOSCRIPT = "NOSCRIPT" + val OBJECT = "OBJECT" + val OL = "OL" + val OPTGROUP = "OPTGROUP" + val OPTION = "OPTION" + val P = "P" + val PARAM = "PARAM" + val PRE = "PRE" + val Q = "Q" + val SAMP = "SAMP" + val SCRIPT = "SCRIPT" + val SELECT = "SELECT" + val SMALL = "SMALL" + val SPAN = "SPAN" + val STRONG = "STRONG" + val STYLE = "STYLE" + val SUB = "SUB" + val SUP = "SUP" + val TABLE = "TABLE" + val TBODY = "TBODY" + val TD = "TD" + val TEXTAREA = "TEXTAREA" + val TFOOT = "TFOOT" + val TH = "TH" + val THEAD = "THEAD" + val TITLE = "TITLE" + val TR = "TR" + val TT = "TT" + val UL = "UL" + val VAR = "VAR" + (* Frameset *) + val FRAME = "FRAME" + val FRAMESET = "FRAMESET" + val NOFRAMES = "NOFRAMES" + (* Loose *) + val APPLET = "APPLET" + val BASEFONT = "BASEFONT" + val CENTER = "CENTER" + val DIR = "DIR" + val FONT = "FONT" + val IFRAME = "IFRAME" + val ISINDEX = "ISINDEX" + val MENU = "MENU" + val S = "S" + val STRIKE = "STRIKE" + val U = "U" +end + +structure S = HTML4TagStrings + +val strictStr = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">" + +val looseStr = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">" + +val framesetStr = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">" + +val xhtmlStr = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">" + +(* ____________________________________________________________ *) + +fun isStrict _ = true + +fun getVersionStr (doc as H4.HTML {head, content, ...}) = + case content of + H4.BodyOrFrameset_BODY (H4.BODY (attrs, children)) => + if isStrict children then strictStr else looseStr + | H4.BodyOrFrameset_FRAMESET _ => framesetStr + +(* ____________________________________________________________ *) + +fun ppOpenTag ppstrm (tag, attributes) = + PP.string ppstrm (String.concat + ["<", tag, + case attributes of + attrs as _::_ => " " ^ (HTML4Utils.attrsToStr attrs) + | [] => "", + ">"]) + +fun ppCloseTag ppstrm tag = + PP.string ppstrm (String.concat ["</", tag, ">"]) + +fun ppChildren _ _ [] = () + | ppChildren ppstrm ppChild children = ( + PP.openHVBox ppstrm (PP.Abs 2); + PP.newline ppstrm; + app (ppChild ppstrm) children; + PP.closeBox ppstrm; + PP.newline ppstrm + ) + +fun ppTagAndChildren ppstrm ppChild tag (attrs, children) = ( + ppOpenTag ppstrm (tag, attrs); + ppChildren ppstrm ppChild children; + ppCloseTag ppstrm tag + ) + +(* ____________________________________________________________ *) + +local + open H4 +in + fun ppCol ppstrm attrs = ppOpenTag ppstrm (S.COL, attrs) + + fun ppCdata ppstrm (CHAR chNum) = + PP.string ppstrm ("&#" ^ (IntInf.toString chNum) ^ ";") + | ppCdata ppstrm (COMMENT comment_string) = + PP.string ppstrm comment_string + | ppCdata ppstrm (ENTITY ent) = + PP.string ppstrm ("&" ^ (Atom.toString ent) ^ ";") + | ppCdata ppstrm (PCDATA string_data) = PP.string ppstrm string_data + and ppHtml ppstrm (doc as HTML {version, head, content}) = ( + PP.string ppstrm (case version of + SOME doctype_str => doctype_str + | NONE => getVersionStr doc); + PP.newline ppstrm; + ppOpenTag ppstrm (S.HTML, []); + PP.openHVBox ppstrm (PP.Abs 2); + PP.newline ppstrm; + ppOpenTag ppstrm (S.HEAD, []); + ppChildren ppstrm ppHead_content head; + ppCloseTag ppstrm S.HEAD; + PP.newline ppstrm; + ppBody_or_frameset ppstrm content; + PP.closeBox ppstrm; + PP.newline ppstrm; + ppCloseTag ppstrm S.HTML; + PP.newline ppstrm + ) + and ppHead_content ppstrm (Head_BASE attrs) = + ppOpenTag ppstrm (S.BASE, attrs) + | ppHead_content ppstrm (Head_LINK attrs) = + ppOpenTag ppstrm (S.LINK, attrs) + | ppHead_content ppstrm (Head_META attrs) = + ppOpenTag ppstrm (S.META, attrs) + | ppHead_content ppstrm (Head_OBJECT contents) = + ppTagAndChildren ppstrm ppFlow_or_param S.OBJECT contents + | ppHead_content ppstrm (Head_SCRIPT child) = ppScript ppstrm child + | ppHead_content ppstrm (Head_STYLE contents) = + ppTagAndChildren ppstrm ppCdata S.STYLE contents + | ppHead_content ppstrm (Head_TITLE contents) = + ppTagAndChildren ppstrm ppCdata S.TITLE contents + and ppBody_or_frameset ppstrm (BodyOrFrameset_BODY body) = + ppBody ppstrm body + | ppBody_or_frameset ppstrm (BodyOrFrameset_FRAMESET frameset) = + ppFrameset ppstrm frameset + and ppBody ppstrm (BODY content) = + ppTagAndChildren ppstrm ppBlock_or_script S.BODY content + and ppFrameset ppstrm (FRAMESET (attrs, children, noframesOpt)) = ( + ppOpenTag ppstrm (S.FRAMESET, attrs); + ppChildren ppstrm ppFrameset_or_frame children; + case noframesOpt of + SOME noframes => (PP.newline ppstrm; + ppNoframes ppstrm noframes) + | _ => (); + ppCloseTag ppstrm S.FRAMESET + ) + and ppFrameset_or_frame ppstrm (FRAME attrs) = + ppOpenTag ppstrm (S.FRAME, attrs) + | ppFrameset_or_frame ppstrm (FramesetOrFrame_FRAMESET frameset) = + ppFrameset ppstrm frameset + and ppNoframes ppstrm (NOFRAMES (attrs, body)) = + (ppOpenTag ppstrm (S.NOFRAMES, attrs); + ppBody ppstrm body; + ppCloseTag ppstrm S.NOFRAMES) + and ppFlow ppstrm (Flow_BLOCK block) = ppBlock ppstrm block + | ppFlow ppstrm (Flow_INLINE inline) = ppInline ppstrm inline + and ppBlock ppstrm (ADDRESS content) = + ppTagAndChildren ppstrm ppInline S.ADDRESS content + | ppBlock ppstrm (BLOCKQUOTE content) = + ppTagAndChildren ppstrm ppBlock_or_script S.BLOCKQUOTE content + | ppBlock ppstrm (CENTER content) = + ppTagAndChildren ppstrm ppFlow S.CENTER content + | ppBlock ppstrm (DIR content) = + ppTagAndChildren ppstrm ppList_item S.DIR content + | ppBlock ppstrm (DIV content) = + ppTagAndChildren ppstrm ppFlow S.DIV content + | ppBlock ppstrm (DL content) = + ppTagAndChildren ppstrm ppDef_term_or_desc S.DL content + | ppBlock ppstrm (FIELDSET (attrs, legend_opt, children)) = ( + ppOpenTag ppstrm (S.FIELDSET, attrs); + case legend_opt of SOME legend => ppLegend ppstrm legend | NONE => (); + ppChildren ppstrm ppFlow children; + ppCloseTag ppstrm S.FIELDSET + ) + | ppBlock ppstrm (FORM content) = + ppTagAndChildren ppstrm ppBlock_or_script S.FORM content + | ppBlock ppstrm (H1 content) = + ppTagAndChildren ppstrm ppInline S.H1 content + | ppBlock ppstrm (H2 content) = + ppTagAndChildren ppstrm ppInline S.H2 content + | ppBlock ppstrm (H3 content) = + ppTagAndChildren ppstrm ppInline S.H3 content + | ppBlock ppstrm (H4 content) = + ppTagAndChildren ppstrm ppInline S.H4 content + | ppBlock ppstrm (H5 content) = + ppTagAndChildren ppstrm ppInline S.H5 content + | ppBlock ppstrm (H6 content) = + ppTagAndChildren ppstrm ppInline S.H6 content + | ppBlock ppstrm (HR attrs) = ppOpenTag ppstrm (S.HR, attrs) + | ppBlock ppstrm (ISINDEX attrs) = ppOpenTag ppstrm (S.ISINDEX, attrs) + | ppBlock ppstrm (MENU content) = + ppTagAndChildren ppstrm ppList_item S.MENU content + | ppBlock ppstrm (NOSCRIPT content) = + ppTagAndChildren ppstrm ppBlock S.NOSCRIPT content + | ppBlock ppstrm (OL content) = + ppTagAndChildren ppstrm ppList_item S.OL content + | ppBlock ppstrm (P content) = + ppTagAndChildren ppstrm ppInline S.P content + | ppBlock ppstrm (PRE content) = + ppTagAndChildren ppstrm ppInline S.PRE content + | ppBlock ppstrm (TABLE content) = + ppTagAndChildren ppstrm ppTable_data S.TABLE content + | ppBlock ppstrm (UL content) = + ppTagAndChildren ppstrm ppList_item S.UL content + and ppInline ppstrm (A content) = + ppTagAndChildren ppstrm ppInline S.A content + | ppInline ppstrm (ABBR content) = + ppTagAndChildren ppstrm ppInline S.ABBR content + | ppInline ppstrm (ACRONYM content) = + ppTagAndChildren ppstrm ppInline S.ACRONYM content + | ppInline ppstrm (APPLET content) = + ppTagAndChildren ppstrm ppFlow_or_param S.APPLET content + | ppInline ppstrm (B content) = + ppTagAndChildren ppstrm ppInline S.B content + | ppInline ppstrm (BASEFONT attrs) = ppOpenTag ppstrm (S.BASEFONT, attrs) + | ppInline ppstrm (BDO content) = + ppTagAndChildren ppstrm ppInline S.BDO content + | ppInline ppstrm (BIG content) = + ppTagAndChildren ppstrm ppInline S.BIG content + | ppInline ppstrm (BR attrs) = ppOpenTag ppstrm (S.BR, attrs) + | ppInline ppstrm (BUTTON content) = + ppTagAndChildren ppstrm ppFlow S.BUTTON content + | ppInline ppstrm (CDATA children) = app (ppCdata ppstrm) children + | ppInline ppstrm (CITE content) = + ppTagAndChildren ppstrm ppInline S.CITE content + | ppInline ppstrm (CODE content) = + ppTagAndChildren ppstrm ppInline S.CODE content + | ppInline ppstrm (DFN content) = + ppTagAndChildren ppstrm ppInline S.DFN content + | ppInline ppstrm (EM content) = + ppTagAndChildren ppstrm ppInline S.EM content + | ppInline ppstrm (FONT content) = + ppTagAndChildren ppstrm ppInline S.FONT content + | ppInline ppstrm (I content) = + ppTagAndChildren ppstrm ppInline S.I content + | ppInline ppstrm (IFRAME content) = + ppTagAndChildren ppstrm ppFlow S.IFRAME content + | ppInline ppstrm (IMG attrs) = ppOpenTag ppstrm (S.IMG, attrs) + | ppInline ppstrm (INPUT attrs) = ppOpenTag ppstrm (S.INPUT, attrs) + | ppInline ppstrm (Inline_SCRIPT script) = ppScript ppstrm script + | ppInline ppstrm (KBD content) = + ppTagAndChildren ppstrm ppInline S.KBD content + | ppInline ppstrm (LABEL content) = + ppTagAndChildren ppstrm ppInline S.LABEL content + | ppInline ppstrm (MAP content) = + ppTagAndChildren ppstrm ppBlock_or_area S.MAP content + | ppInline ppstrm (OBJECT content) = + ppTagAndChildren ppstrm ppFlow_or_param S.OBJECT content + | ppInline ppstrm (Q content) = + ppTagAndChildren ppstrm ppInline S.Q content + | ppInline ppstrm (S content) = + ppTagAndChildren ppstrm ppInline S.S content + | ppInline ppstrm (SAMP content) = + ppTagAndChildren ppstrm ppInline S.SAMP content + | ppInline ppstrm (SELECT content) = + ppTagAndChildren ppstrm ppOptgroup_or_option S.SELECT content + | ppInline ppstrm (SMALL content) = + ppTagAndChildren ppstrm ppInline S.SMALL content + | ppInline ppstrm (SPAN content) = + ppTagAndChildren ppstrm ppInline S.SPAN content + | ppInline ppstrm (STRIKE content) = + ppTagAndChildren ppstrm ppInline S.STRIKE content + | ppInline ppstrm (STRONG content) = + ppTagAndChildren ppstrm ppInline S.STRONG content + | ppInline ppstrm (SUB content) = + ppTagAndChildren ppstrm ppInline S.SUB content + | ppInline ppstrm (SUP content) = + ppTagAndChildren ppstrm ppInline S.SUP content + | ppInline ppstrm (TEXTAREA content) = + ppTagAndChildren ppstrm ppCdata S.TEXTAREA content + | ppInline ppstrm (TT content) = + ppTagAndChildren ppstrm ppInline S.TT content + | ppInline ppstrm (U content) = + ppTagAndChildren ppstrm ppInline S.U content + | ppInline ppstrm (VAR content) = + ppTagAndChildren ppstrm ppInline S.VAR content + and ppList_item ppstrm (LI content) = + ppTagAndChildren ppstrm ppFlow S.LI content + and ppScript ppstrm (SCRIPT content) = + ppTagAndChildren ppstrm ppCdata S.SCRIPT content + and ppParam ppstrm (PARAM attrs) = ppOpenTag ppstrm (S.PARAM, attrs) + and ppLegend ppstrm (LEGEND content) = + ppTagAndChildren ppstrm ppInline S.LEGEND content + and ppDef_term_or_desc ppstrm (DD content) = + ppTagAndChildren ppstrm ppFlow S.DD content + | ppDef_term_or_desc ppstrm (DT content) = + ppTagAndChildren ppstrm ppInline S.DT content + and ppTable_data ppstrm (CAPTION content) = + ppTagAndChildren ppstrm ppInline S.CAPTION content + | ppTable_data ppstrm (COL col) = ppCol ppstrm col + | ppTable_data ppstrm (COLGROUP content) = + ppTagAndChildren ppstrm ppCol S.COLGROUP content + | ppTable_data ppstrm (TBODY content) = + ppTagAndChildren ppstrm ppTr S.TBODY content + | ppTable_data ppstrm (TFOOT content) = + ppTagAndChildren ppstrm ppTr S.TFOOT content + | ppTable_data ppstrm (THEAD content) = + ppTagAndChildren ppstrm ppTr S.THEAD content + and ppTr ppstrm (TR content) = + ppTagAndChildren ppstrm ppTh_or_td S.TR content + and ppTh_or_td ppstrm (TD content) = + ppTagAndChildren ppstrm ppFlow S.TD content + | ppTh_or_td ppstrm (TH content) = + ppTagAndChildren ppstrm ppFlow S.TH content + and ppOptgroup_or_option ppstrm (OPTGROUP content) = + ppTagAndChildren ppstrm + (fn pstrm => fn opt => ppTagAndChildren ppstrm ppCdata S.OPTION opt) + S.OPTGROUP content + | ppOptgroup_or_option ppstrm (OPTION content) = + ppTagAndChildren ppstrm ppCdata S.OPTION content + and ppFlow_or_param ppstrm (FlowOrParam_FLOW flow) = ppFlow ppstrm flow + | ppFlow_or_param ppstrm (FlowOrParam_PARAM param) = ppParam ppstrm param + and ppBlock_or_script ppstrm (BlockOrScript_BLOCK block) = + ppBlock ppstrm block + | ppBlock_or_script ppstrm (BlockOrScript_SCRIPT script) = + ppScript ppstrm script + and ppBlock_or_area ppstrm (AREA attrs) = ppOpenTag ppstrm (S.AREA, attrs) + | ppBlock_or_area ppstrm (BlockOrArea_BLOCK block) = ppBlock ppstrm block +end + +(* ____________________________________________________________ *) + +val toString = PP.pp_to_string 80 ppHtml + +end (* HTML4Printer *) + +(* ______________________________________________________________________ + End of html4-printer.sml + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-print.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-print.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-print.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-print.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,315 @@ +(* html4-print.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure HTML4Print : sig + + val prHTML : { + putc : char -> unit, + puts : string -> unit + } -> HTML4.html -> unit + + val prBODY : { + putc : char -> unit, + puts : string -> unit + } -> HTML4.body -> unit + + end = struct + + structure H = HTML4 + structure F = Format + + datatype outstream = OS of { + putc : char -> unit, + puts : string -> unit + } + + fun putc (OS{putc, ...}, c) = putc c + fun puts (OS{puts, ...}, s) = puts s + + (* format an open tag *) + fun fmtTag (tag, attrs) = let + fun fmtAttr ((attrName, NONE), l) = " " :: Atom.toString attrName :: l + | fmtAttr ((attrName, SOME s), l) = " " :: Atom.toString attrName :: "=\"" :: s :: "\"" :: l + in + String.concat("<" :: tag :: List.foldr fmtAttr [">"] attrs) + end + + (* format an tag with no content tag *) + fun fmtEmptyTag (tag, attrs) = let + fun fmtAttr ((attrName, NONE), l) = " " :: Atom.toString attrName :: l + | fmtAttr ((attrName, SOME s), l) = " " :: Atom.toString attrName :: "=\"" :: s :: "\"" :: l + in + String.concat("<" :: tag :: List.foldr fmtAttr ["/>"] attrs) + end + + fun fmtEndTag tag = concat["</", tag, ">"] + + fun prTag (OS{puts, ...}, tag, attrs) = puts(fmtTag (tag, attrs)) + fun prEmptyTag (OS{puts, ...}, tag, attrs) = puts(fmtEmptyTag (tag, attrs)) + fun prEndTag (OS{puts, ...}, tag) = puts(fmtEndTag tag) + fun newline (OS{putc, ...}) = putc #"\n" + fun space (OS{putc, ...}) = putc #" " + + (* the various HTML4 headers *) + val strictHdr = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">" + val looseHdr = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">" + val framesetHdr = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">" + val xhtmlHdr = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">" + + fun isStrict _ = true (* FIXME: should check content to see if there are uses of Loose elements *) + + fun prCDATA (outS, txt) = let + fun pr (H.CHAR chNum) = puts (outS, concat["&#", (IntInf.toString chNum), ";"]) + | pr (H.COMMENT com) = puts (outS, concat["<!-- ", com, " -->"]) + | pr (H.ENTITY ent) = puts (outS, concat["&", Atom.toString ent, ";"]) + | pr (H.PCDATA s) = puts (outS, s) + in + List.app pr txt + end + + fun prScript (outS, H.SCRIPT(attrs, content)) = ( + prTag (outS, "STYLE", attrs); prCDATA (outS, content); prEndTag (outS, "STYLE")) + + fun prParam (outS, H.PARAM attrs) = prEmptyTag (outS, "PARAM", attrs) + + (* because an OBJECT element can appear in the HEAD and it contains a flow, we introduce + * a union type for the argument to the body printing code + *) + datatype body_or_flow = Body of H.body | Flow of H.flow + + fun prBodyOrFlow (outS, element) = let + fun prFlowList (nl, []) = nl + | prFlowList (nl, H.Flow_BLOCK blk :: r) = ( + if nl then () else newline outS; + prBlock blk; + prFlowList (true, r)) + | prFlowList (_, H.Flow_INLINE txt :: t) = ( + prInline txt; + prFlowList (false, t)) + and prFlowListElem (inline, tag, attrs, content) = ( + if inline + andalso not (List.exists (fn (H.Flow_BLOCK _) => true | _ => false) content) + then ( + prTag (outS, tag, attrs); + ignore (prFlowList (false, content)); + prEndTag (outS, tag)) + else ( + prTag (outS, tag, attrs); + if prFlowList (true, content) then () else newline outS; + prEndTag (outS, tag))) + and prBlock elem = ( + case elem + of H.P(attrs, content) => prInlineElem("P", attrs, content) + | H.H1(attrs, content) => prInlineElem("H1", attrs, content) + | H.H2(attrs, content) => prInlineElem("H2", attrs, content) + | H.H3(attrs, content) => prInlineElem("H3", attrs, content) + | H.H4(attrs, content) => prInlineElem("H4", attrs, content) + | H.H5(attrs, content) => prInlineElem("H5", attrs, content) + | H.H6(attrs, content) => prInlineElem("H6", attrs, content) + | H.UL(attrs, content) => prListElem("UL", attrs, content) + | H.OL(attrs, content) => prListElem("OL", attrs, content) + | H.DIR(attrs, content) => prListElem("DIR", attrs, content) + | H.MENU(attrs, content) => prListElem("MENU", attrs, content) + | H.PRE(attrs, content) => prInlineElem("PRE", attrs, content) + | H.DL(attrs, content) => let + fun prItem (H.DT(attrs, content)) = ( + prInlineElem ("DT", attrs, content); newline outS) + | prItem (H.DD(attrs, content)) = ( + prFlowListElem (false, "DD", attrs, content); newline outS) + in + prTag (outS, "DL", attrs); newline outS; + List.app prItem content; + prEndTag (outS, "DL") + end + | H.DIV(attrs, content) => prFlowListElem (false, "DIV", attrs, content) + | H.NOSCRIPT(attrs, content) => ( + prTag (outS, "NOSCRIPT", attrs); + List.app prBlock content; + prEndTag (outS, "NOSCRIPT")) + | H.BLOCKQUOTE(attrs, content) => ( + prTag (outS, "BLOCKQUOTE", attrs); newline outS; + List.app prBlockOrScript content; + prEndTag (outS, "BLOCKQUOTE")) + | H.FORM(attrs, content) => ( + prTag (outS, "FORM", attrs); newline outS; + List.app prBlockOrScript content; + prEndTag (outS, "FORM")) + | H.HR attrs => prEmptyTag(outS, "HR", attrs) + | H.TABLE(attrs, content) => let + fun prCOL attrs = prTag (outS, "COL", attrs) + fun prData (H.CAPTION(attrs, content)) = ( + prInlineElem("CAPTION", attrs, content); newline outS) + | prData (H.COL attrs) = (prCOL attrs; newline outS) + | prData (H.COLGROUP(attrs, content)) = ( + prTag (outS, "COLGROUP", attrs); + List.app prCOL content; + prEndTag (outS, "COLGROUP"); newline outS) + | prData (H.THEAD(attrs, content)) = prTableElem ("THEAD", attrs, content) + | prData (H.TFOOT(attrs, content)) = prTableElem ("TFOOT", attrs, content) + | prData (H.TBODY(attrs, content)) = prTableElem ("TBODY", attrs, content) + and prTableElem (tag, attrs, content) = let + fun prRow (H.TR(attrs, content)) = let + fun prCell (H.TH(attrs, content)) = + prFlowListElem (true, "TH", attrs, content) + | prCell (H.TD(attrs, content)) = + prFlowListElem (true, "TD", attrs, content) + in + prTag (outS, "TR", attrs); newline outS; + List.app prCell content; newline outS; + prEndTag (outS, "TR"); newline outS + end + in + prTag (outS, "TR", attrs); newline outS; + List.app prRow content; + prEndTag (outS, "TR"); newline outS + end + in + prTag (outS, "TABLE", attrs); newline outS; + List.app prData content; + prEndTag (outS, "TABLE") + end + | H.FIELDSET(attrs, legend, content) => ( + prTag (outS, "FIELDSET", attrs); newline outS; + case legend + of SOME(H.LEGEND(attrs, content)) => ( + prInlineElem("LEGEND", attrs, content); newline outS) + | NONE => () + (* end case *); + if prFlowList (false, content) then () else newline outS; + prEndTag (outS, "FIELDSET")) + | H.ADDRESS(attrs, content) => prInlineElem("ADDRESS", attrs, content) + | H.CENTER(attrs, content) => prFlowListElem (false, "CENTER", attrs, content) + | H.ISINDEX attrs => prEmptyTag(outS, "ISINDEX", attrs) + (* end case *); + newline outS) + and prListElem (tag, attrs, content) = let + fun prItem (H.LI(attrs, content)) = ( + prFlowListElem (true, "LI", attrs, content); + newline outS) + in + prTag (outS, tag, attrs); newline outS; + List.app prItem content; + prEndTag (outS, tag); newline outS + end + and prInline elem = (case elem + of H.TT(attrs, content) => prInlineElem("TT", attrs, content) + | H.I(attrs, content) => prInlineElem("I", attrs, content) + | H.B(attrs, content) => prInlineElem("B", attrs, content) + | H.BIG(attrs, content) => prInlineElem("BIG", attrs, content) + | H.SMALL(attrs, content) => prInlineElem("SMALL", attrs, content) + | H.U(attrs, content) => prInlineElem("U", attrs, content) + | H.S(attrs, content) => prInlineElem("S", attrs, content) + | H.STRIKE(attrs, content) => prInlineElem("STRIKE", attrs, content) + | H.EM(attrs, content) => prInlineElem("EM", attrs, content) + | H.STRONG(attrs, content) => prInlineElem("STRONG", attrs, content) + | H.DFN(attrs, content) => prInlineElem("DFN", attrs, content) + | H.CODE(attrs, content) => prInlineElem("CODE", attrs, content) + | H.SAMP(attrs, content) => prInlineElem("SAMP", attrs, content) + | H.KBD(attrs, content) => prInlineElem("KBD", attrs, content) + | H.VAR(attrs, content) => prInlineElem("VAR", attrs, content) + | H.CITE(attrs, content) => prInlineElem("CITE", attrs, content) + | H.ABBR(attrs, content) => prInlineElem("ABBR", attrs, content) + | H.ACRONYM(attrs, content) => prInlineElem("ACRONYM", attrs, content) + | H.A(attrs, content) => prInlineElem("A", attrs, content) + | H.IMG attrs => prEmptyTag(outS, "IMG", attrs) + | H.OBJECT(attrs, content) => ( + prTag (outS, "OBJECT", attrs); newline outS; + prFlowOrParamList content; + prEndTag (outS, "OBJECT"); newline outS) + | H.BR attrs => prEmptyTag(outS, "BR", attrs) + | H.Inline_SCRIPT script => (newline outS; prScript (outS, script)) + | H.MAP(attrs, content) => raise Fail "FIXME" + | H.Q(attrs, content) => prInlineElem("Q", attrs, content) + | H.SUB(attrs, content) => prInlineElem("SUB", attrs, content) + | H.SUP(attrs, content) => prInlineElem("SUP", attrs, content) + | H.SPAN(attrs, content) => prInlineElem("SPAN", attrs, content) + | H.BDO(attrs, content) => prInlineElem("BDO", attrs, content) + | H.APPLET(attrs, content) => ( + prTag (outS, "APPLET", attrs); newline outS; + prFlowOrParamList content; + prEndTag (outS, "APPLET"); newline outS) + | H.BASEFONT attrs => prEmptyTag(outS, "BASEFONT", attrs) + | H.FONT(attrs, content) => prInlineElem("FONT", attrs, content) + | H.IFRAME(attrs, content) => prFlowListElem (true, "IFRAME", attrs, content) + | H.INPUT attrs => prEmptyTag(outS, "INPUT", attrs) + | H.SELECT(attrs, content) => raise Fail "FIXME" + | H.TEXTAREA(attrs, content) => ( + prTag (outS, "TEXTAREA", attrs); + prCDATA (outS, content); + prEndTag (outS, "TEXTAREA")) + | H.LABEL(attrs, content) => prInlineElem("LABEL", attrs, content) + | H.BUTTON(attrs, content) => prFlowListElem (true, "BUTTON", attrs, content) + | H.CDATA txt => prCDATA (outS, txt) + (* end case *)) + and prInlineElem (tag, attrs, content) = ( + prTag (outS, tag, attrs); + List.app prInline content; + prEndTag (outS, tag)) + and prBlockOrScript (H.BlockOrScript_BLOCK blk) = prBlock blk + | prBlockOrScript (H.BlockOrScript_SCRIPT script) = (prScript (outS, script); newline outS) + and prFlowOrParamList content = let + fun pr (H.FlowOrParam_FLOW(H.Flow_BLOCK blk), nl) = ( + if nl then () else newline outS; prBlock blk; true) + | pr (H.FlowOrParam_FLOW(H.Flow_INLINE txt), _) = (prInline txt; false) + | pr (H.FlowOrParam_PARAM param, _) = (prParam (outS, param); false) + in + (* This function is always called after a newline *) + ignore (List.foldl pr true content) + end + in + case element + of Body(H.BODY(attrs, content)) => ( + prTag (outS, "BODY", attrs); newline outS; + List.app prBlockOrScript content; + prEndTag (outS, "BODY"); newline outS) + | Flow(H.Flow_BLOCK blk) => prBlock blk + | Flow(H.Flow_INLINE txt) => prInline txt + (* end case *) + end (* prBodyOrFlow *) + + fun prHTML outS (H.HTML{version, head, content}) = let + val outS = OS outS + fun prHeadContent (H.Head_TITLE(attrs, txt)) = ( + prTag (outS, "TITLE", attrs); newline outS; + prCDATA (outS, txt); newline outS; + prEndTag (outS, "TITLE"); newline outS) + | prHeadContent (H.Head_BASE attrs) = ( + prTag (outS, "TITLE", attrs); newline outS) + | prHeadContent (H.Head_SCRIPT script) = ( + prScript (outS, script); newline outS) + | prHeadContent (H.Head_STYLE(attrs, content)) = ( + prTag (outS, "STYLE", attrs); newline outS; + prCDATA (outS, content); newline outS; + prEndTag (outS, "STYLE"); newline outS) + | prHeadContent (H.Head_META attrs) = ( + prTag (outS, "META", attrs); newline outS) + | prHeadContent (H.Head_LINK attrs) = ( + prTag (outS, "LINK", attrs); newline outS) + | prHeadContent (H.Head_OBJECT(attrs, content)) = raise Fail "FIXME" + and prBodyOrFrameset (H.BodyOrFrameset_BODY body) = prBodyOrFlow (outS, Body body) + | prBodyOrFrameset (H.BodyOrFrameset_FRAMESET frameset) = prFrameset frameset + and prFrameset (H.FRAMESET(attrs, content, noframes)) = raise Fail "FIXME" + in + case (version, content) + of (SOME vers, _) => puts (outS, vers) + | (NONE, H.BodyOrFrameset_BODY(H.BODY(attrs, children))) => + if isStrict children + then puts (outS, strictHdr) + else puts (outS, looseHdr) + | (NONE, H.BodyOrFrameset_FRAMESET _) => puts (outS, framesetHdr) + (* end case *); + newline outS; + puts (outS, "<HTML>\n"); + puts (outS, "<HEAD>\n"); + List.app prHeadContent head; + puts (outS, "</HEAD>\n"); + prBodyOrFrameset content; + puts (outS, "</HTML>\n") + end + + fun prBODY outS body = prBodyOrFlow (OS outS, Body body) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.sig mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.sig --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,176 @@ +(* html4.sig + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Main signature for the HTML4 library. + *) + +signature HTML4 = + sig + + type pcdata = string + + datatype cdata + = PCDATA of pcdata + | ENTITY of Atom.atom + | CHAR of IntInf.int + | COMMENT of string + + type attribute = Atom.atom * string option + + type attributes = attribute list + + type col = attributes (* COL element is empty *) + + datatype html = HTML of { + version : string option, + head : head_content list, + content : body_or_frameset + } + + and head_content + = Head_TITLE of attributes * cdata list + | Head_BASE of attributes + | Head_SCRIPT of script + | Head_STYLE of attributes * cdata list + | Head_META of attributes + | Head_LINK of attributes + | Head_OBJECT of attributes * flow_or_param list + + and body_or_frameset + = BodyOrFrameset_BODY of body + | BodyOrFrameset_FRAMESET of frameset + + and body + = BODY of attributes * block_or_script list + + and frameset + = FRAMESET of attributes * frameset_or_frame list * noframes option + + and frameset_or_frame + = FramesetOrFrame_FRAMESET of frameset + | FRAME of attributes + + and noframes + = NOFRAMES of attributes * body + + and flow + = Flow_BLOCK of block + | Flow_INLINE of inline + + and block + = P of attributes * inline list + | H1 of attributes * inline list + | H2 of attributes * inline list + | H3 of attributes * inline list + | H4 of attributes * inline list + | H5 of attributes * inline list + | H6 of attributes * inline list + | UL of attributes * list_item list + | OL of attributes * list_item list + | DIR of attributes * list_item list (* Loose *) + | MENU of attributes * list_item list (* Loose *) + | PRE of attributes * inline list + | DL of attributes * def_term_or_desc list + | DIV of attributes * flow list + | NOSCRIPT of attributes * block list + | BLOCKQUOTE of attributes * block_or_script list + | FORM of attributes * block_or_script list + | HR of attributes + | TABLE of attributes * table_data list + | FIELDSET of attributes * legend option * flow list + | ADDRESS of attributes * inline list + | CENTER of attributes * flow list (* Loose *) + | ISINDEX of attributes (* Loose *) + + and inline + = TT of attributes * inline list + | I of attributes * inline list + | B of attributes * inline list + | BIG of attributes * inline list + | SMALL of attributes * inline list + | U of attributes * inline list (* Loose *) + | S of attributes * inline list(* Loose *) + | STRIKE of attributes * inline list (* Loose *) + | EM of attributes * inline list + | STRONG of attributes * inline list + | DFN of attributes * inline list + | CODE of attributes * inline list + | SAMP of attributes * inline list + | KBD of attributes * inline list + | VAR of attributes * inline list + | CITE of attributes * inline list + | ABBR of attributes * inline list + | ACRONYM of attributes * inline list + | A of attributes * inline list + | IMG of attributes + | OBJECT of attributes * flow_or_param list + | BR of attributes + | Inline_SCRIPT of script + | MAP of attributes * block_or_area list + | Q of attributes * inline list + | SUB of attributes * inline list + | SUP of attributes * inline list + | SPAN of attributes * inline list + | BDO of attributes * inline list + | APPLET of attributes * flow_or_param list (* Loose *) + | BASEFONT of attributes (* Loose *) + | FONT of attributes * inline list (* Loose *) + | IFRAME of attributes * flow list (* Loose *) + | INPUT of attributes + | SELECT of attributes * optgroup_or_option list + | TEXTAREA of attributes * cdata list + | LABEL of attributes * inline list + | BUTTON of attributes * flow list + | CDATA of cdata list + + and list_item = LI of attributes * flow list + + and script = SCRIPT of attributes * cdata list + + and param = PARAM of attributes + + and legend = LEGEND of attributes * inline list + + and def_term_or_desc + = DT of attributes * inline list + | DD of attributes * flow list + + and table_data + = CAPTION of attributes * inline list + | COL of col + | COLGROUP of attributes * col list + | THEAD of attributes * tr list + | TFOOT of attributes * tr list + | TBODY of attributes * tr list + + and tr + = TR of attributes * th_or_td list + + and th_or_td + = TH of attributes * flow list + | TD of attributes * flow list + + (* either "<OPTGROUP><OPTION>...</OPTION> ... </OPTGROUP>" or "<OPTION>...</OPTION>" *) + and optgroup_or_option + = OPTGROUP of attributes * (attributes * cdata list) list + | OPTION of attributes * cdata list + + and flow_or_param + = FlowOrParam_FLOW of flow + | FlowOrParam_PARAM of param + + and block_or_script + = BlockOrScript_BLOCK of block + | BlockOrScript_SCRIPT of script + + and block_or_area + = BlockOrArea_BLOCK of block + | AREA of attributes + +end + +(* ______________________________________________________________________ + End of html4.sig + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,176 @@ +(* html4.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Defines the main HTML4 structure. + *) + +structure HTML4 : HTML4 = + struct + + type pcdata = string + + datatype cdata + = PCDATA of pcdata + | ENTITY of Atom.atom + | CHAR of IntInf.int + | COMMENT of string + + type attribute = Atom.atom * string option + + type attributes = attribute list + + type col = attributes (* COL element is empty *) + + datatype html = HTML of { + version : string option, + head : head_content list, + content : body_or_frameset + } + + and head_content + = Head_TITLE of attributes * cdata list + | Head_BASE of attributes + | Head_SCRIPT of script + | Head_STYLE of attributes * cdata list + | Head_META of attributes + | Head_LINK of attributes + | Head_OBJECT of attributes * flow_or_param list + + and body_or_frameset + = BodyOrFrameset_BODY of body + | BodyOrFrameset_FRAMESET of frameset + + and body + = BODY of attributes * block_or_script list + + and frameset + = FRAMESET of attributes * frameset_or_frame list * noframes option + + and frameset_or_frame + = FramesetOrFrame_FRAMESET of frameset + | FRAME of attributes + + and noframes + = NOFRAMES of attributes * body + + and flow + = Flow_BLOCK of block + | Flow_INLINE of inline + + and block + = P of attributes * inline list + | H1 of attributes * inline list + | H2 of attributes * inline list + | H3 of attributes * inline list + | H4 of attributes * inline list + | H5 of attributes * inline list + | H6 of attributes * inline list + | UL of attributes * list_item list + | OL of attributes * list_item list + | DIR of attributes * list_item list (* Loose *) + | MENU of attributes * list_item list (* Loose *) + | PRE of attributes * inline list + | DL of attributes * def_term_or_desc list + | DIV of attributes * flow list + | NOSCRIPT of attributes * block list + | BLOCKQUOTE of attributes * block_or_script list + | FORM of attributes * block_or_script list + | HR of attributes + | TABLE of attributes * table_data list + | FIELDSET of attributes * legend option * flow list + | ADDRESS of attributes * inline list + | CENTER of attributes * flow list (* Loose *) + | ISINDEX of attributes (* Loose *) + + and inline + = TT of attributes * inline list + | I of attributes * inline list + | B of attributes * inline list + | BIG of attributes * inline list + | SMALL of attributes * inline list + | U of attributes * inline list (* Loose *) + | S of attributes * inline list(* Loose *) + | STRIKE of attributes * inline list (* Loose *) + | EM of attributes * inline list + | STRONG of attributes * inline list + | DFN of attributes * inline list + | CODE of attributes * inline list + | SAMP of attributes * inline list + | KBD of attributes * inline list + | VAR of attributes * inline list + | CITE of attributes * inline list + | ABBR of attributes * inline list + | ACRONYM of attributes * inline list + | A of attributes * inline list + | IMG of attributes + | OBJECT of attributes * flow_or_param list + | BR of attributes + | Inline_SCRIPT of script + | MAP of attributes * block_or_area list + | Q of attributes * inline list + | SUB of attributes * inline list + | SUP of attributes * inline list + | SPAN of attributes * inline list + | BDO of attributes * inline list + | APPLET of attributes * flow_or_param list (* Loose *) + | BASEFONT of attributes (* Loose *) + | FONT of attributes * inline list (* Loose *) + | IFRAME of attributes * flow list (* Loose *) + | INPUT of attributes + | SELECT of attributes * optgroup_or_option list + | TEXTAREA of attributes * cdata list + | LABEL of attributes * inline list + | BUTTON of attributes * flow list + | CDATA of cdata list + + and list_item = LI of attributes * flow list + + and script = SCRIPT of attributes * cdata list + + and param = PARAM of attributes + + and legend = LEGEND of attributes * inline list + + and def_term_or_desc + = DT of attributes * inline list + | DD of attributes * flow list + + and table_data + = CAPTION of attributes * inline list + | COL of col + | COLGROUP of attributes * col list + | THEAD of attributes * tr list + | TFOOT of attributes * tr list + | TBODY of attributes * tr list + + and tr + = TR of attributes * th_or_td list + + and th_or_td + = TH of attributes * flow list + | TD of attributes * flow list + + (* either "<OPTGROUP><OPTION>...</OPTION> ... </OPTGROUP>" or "<OPTION>...</OPTION>" *) + and optgroup_or_option + = OPTGROUP of attributes * (attributes * cdata list) list + | OPTION of attributes * cdata list + + and flow_or_param + = FlowOrParam_FLOW of flow + | FlowOrParam_PARAM of param + + and block_or_script + = BlockOrScript_BLOCK of block + | BlockOrScript_SCRIPT of script + + and block_or_area + = BlockOrArea_BLOCK of block + | AREA of attributes + + end (* HTML4 *) + +(* ______________________________________________________________________ + End of html4.sml + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-test.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-test.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-test.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-test.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,17 @@ +(* html4-test.cm + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +Group is + $/basis.cm + $/smlnj-lib.cm + $/ml-lpt-lib.cm + + html4-lib.cm + html4-test.sml + +(* ______________________________________________________________________ + End of html4-test.cm + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-test.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-test.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-test.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-test.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,74 @@ +(* html4-test.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure Test = + struct + + val parsetreeStreamToString = + HTML4Utils.mkParsetreeStreamToString HTML4Tokens.toString + + fun handleFile outS fileName = let + val inStream = TextIO.openIn fileName + val concrete_pt_opt = HTML4Parser.parseStream inStream + val pt_visit_strm = (case concrete_pt_opt + of SOME concrete_pt => HTML4Utils.parsetreeToVisitationStream concrete_pt + | NONE => HTML4Utils.StreamNil + (* end case *)) + val (_, htmlOpt) = HTML4Parser.htmlFromParseStream pt_visit_strm + handle HTML4Parser.IllFormedHTMLParseStream (strm, SOME msg) => + (HTML4Parser.printVisitationStream strm; + print (msg ^ "\n\n"); (strm, NONE)) + in + TextIO.closeIn inStream; + TextIO.output(outS, concat["<!-- ******************** start ", fileName, " ******************** -->\n"]); + case htmlOpt + of SOME html => HTML4Print.prHTML { + putc = fn c => TextIO.output1(outS, c), + puts = fn s => TextIO.output(outS, s) + } html + | NONE => TextIO.output (outS, parsetreeStreamToString pt_visit_strm) + (* end case *); + TextIO.output(outS, concat["<!-- ******************** end ", fileName, " ******************** -->\n"]) + end + + fun main (_, args) = let + val outS = TextIO.openOut "html4-test.out" + in + (List.app (handleFile outS) args; TextIO.closeOut outS; OS.Process.success) + handle ex => ( + TextIO.closeOut outS; + print(concat["uncaught exception: ", exnMessage ex, "\n"]); + List.app (fn s => print(concat[" ", s, "\n"])) (SMLofNJ.exnHistory ex); + OS.Process.failure) + end + + val tests = [ + "tests/abbr.html", + "tests/dir.html", + "tests/edit.html", + "tests/elements.html", + "tests/entities.html", + "tests/forms.html", + "tests/framebody.html", + "tests/frames.html", + "tests/id.html", + "tests/objaudio.html", + "tests/objects.html", + "tests/objvideo.html", + "tests/quote.html", + "tests/scripts.html", + "tests/spchars.html", + "tests/tables.html", + "tests/template.html", + "tests/test001.html", + "tests/test002.html" + ] + + end + +(* ______________________________________________________________________ + End of html4-test.sml + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-token-utils.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-token-utils.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-token-utils.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-token-utils.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,588 @@ +(* html4-token-utils.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A set of utilities used for working with tokens used in the HTML 4 + * parser. + *) + +structure HTML4TokenUtils = struct + +structure H4U = HTML4Utils + +(* ____________________________________________________________ *) +(* Attribute handling *) +(* XXX Is this too heavyweight? It certainly gives us some + flexibility in the future. *) + +structure HTML4AttrParser = HTML4AttrParseFn(HTML4AttrLexer) + +fun parseAttrsFromStream inStream = let + val sourceMap = AntlrStreamPos.mkSourcemap () + val lex = HTML4AttrLexer.lex sourceMap + val stream = HTML4AttrLexer.streamifyInstream inStream + in + case HTML4AttrParser.parse lex stream + of (SOME result, _, _) => result + | _ => [] + (* end case *) + end + +fun parseAttrs inStr = parseAttrsFromStream (TextIO.openString inStr) +(*DEBUG*)handle ex => (print(concat["parseAttrs: \"", String.toString inStr, "\"\n"]); raise ex) + +(* ____________________________________________________________ *) +open HTML4Tokens + +val strict_tuple_list = [ + ("A", STARTA, SOME ENDA), + ("ABBR", STARTABBR, SOME ENDABBR), + ("ACRONYM", STARTACRONYM, SOME ENDACRONYM), + ("ADDRESS", STARTADDRESS, SOME ENDADDRESS), + ("AREA", STARTAREA, NONE), + ("B", STARTB, SOME ENDB), + ("BASE", STARTBASE, NONE), + ("BDO", STARTBDO, SOME ENDBDO), + ("BIG", STARTBIG, SOME ENDBIG), + ("BLOCKQUOTE", STARTBLOCKQUOTE, SOME ENDBLOCKQUOTE), + ("BODY", STARTBODY, SOME ENDBODY), + ("BR", STARTBR, NONE), + ("BUTTON", STARTBUTTON, SOME ENDBUTTON), + ("CAPTION", STARTCAPTION, SOME ENDCAPTION), + ("CITE", STARTCITE, SOME ENDCITE), + ("CODE", STARTCODE, SOME ENDCODE), + ("COL", STARTCOL, NONE), + ("COLGROUP", STARTCOLGROUP, SOME ENDCOLGROUP), + ("DD", STARTDD, SOME ENDDD), + ("DEL", STARTDEL, SOME ENDDEL), + ("DFN", STARTDFN, SOME ENDDFN), + ("DIV", STARTDIV, SOME ENDDIV), + ("DL", STARTDL, SOME ENDDL), + ("DT", STARTDT, SOME ENDDT), + ("EM", STARTEM, SOME ENDEM), + ("FIELDSET", STARTFIELDSET, SOME ENDFIELDSET), + ("FORM", STARTFORM, SOME ENDFORM), + ("H1", STARTH1, SOME ENDH1), + ("H2", STARTH2, SOME ENDH2), + ("H3", STARTH3, SOME ENDH3), + ("H4", STARTH4, SOME ENDH4), + ("H5", STARTH5, SOME ENDH5), + ("H6", STARTH6, SOME ENDH6), + ("HEAD", STARTHEAD, SOME ENDHEAD), + ("HR", STARTHR, NONE), + ("HTML", STARTHTML, SOME ENDHTML), + ("I", STARTI, SOME ENDI), + ("IMG", STARTIMG, NONE), + ("INPUT", STARTINPUT, NONE), + ("INS", STARTINS, SOME ENDINS), + ("KBD", STARTKBD, SOME ENDKBD), + ("LABEL", STARTLABEL, SOME ENDLABEL), + ("LEGEND", STARTLEGEND, SOME ENDLEGEND), + ("LI", STARTLI, SOME ENDLI), + ("LINK", STARTLINK, NONE), + ("MAP", STARTMAP, SOME ENDMAP), + ("META", STARTMETA, NONE), + ("NOSCRIPT", STARTNOSCRIPT, SOME ENDNOSCRIPT), + ("OBJECT", STARTOBJECT, SOME ENDOBJECT), + ("OL", STARTOL, SOME ENDOL), + ("OPTGROUP", STARTOPTGROUP, SOME ENDOPTGROUP), + ("OPTION", STARTOPTION, SOME ENDOPTION), + ("P", STARTP, SOME ENDP), + ("PARAM", STARTPARAM, NONE), + ("PRE", STARTPRE, SOME ENDPRE), + ("Q", STARTQ, SOME ENDQ), + ("SAMP", STARTSAMP, SOME ENDSAMP), + ("SCRIPT", STARTSCRIPT, SOME ENDSCRIPT), + ("SELECT", STARTSELECT, SOME ENDSELECT), + ("SMALL", STARTSMALL, SOME ENDSMALL), + ("SPAN", STARTSPAN, SOME ENDSPAN), + ("STRONG", STARTSTRONG, SOME ENDSTRONG), + ("STYLE", STARTSTYLE, SOME ENDSTYLE), + ("SUB", STARTSUB, SOME ENDSUB), + ("SUP", STARTSUP, SOME ENDSUP), + ("TABLE", STARTTABLE, SOME ENDTABLE), + ("TBODY", STARTTBODY, SOME ENDTBODY), + ("TD", STARTTD, SOME ENDTD), + ("TEXTAREA", STARTTEXTAREA, SOME ENDTEXTAREA), + ("TFOOT", STARTTFOOT, SOME ENDTFOOT), + ("TH", STARTTH, SOME ENDTH), + ("THEAD", STARTTHEAD, SOME ENDTHEAD), + ("TITLE", STARTTITLE, SOME ENDTITLE), + ("TR", STARTTR, SOME ENDTR), + ("TT", STARTTT, SOME ENDTT), + ("UL", STARTUL, SOME ENDUL), + ("VAR", STARTVAR, SOME ENDVAR) +] + +val loose_tuple_list = [ + ("APPLET", STARTAPPLET, SOME ENDAPPLET), + ("BASEFONT", STARTBASEFONT, NONE), + ("CENTER", STARTCENTER, SOME ENDCENTER), + ("DIR", STARTDIR, SOME ENDDIR), + ("FONT", STARTFONT, SOME ENDFONT), + ("IFRAME", STARTIFRAME, SOME ENDIFRAME), + ("ISINDEX", STARTISINDEX, NONE), + ("MENU", STARTMENU, SOME ENDMENU), + ("S", STARTS, SOME ENDS), + ("STRIKE", STARTSTRIKE, SOME ENDSTRIKE), + ("U", STARTU, SOME ENDU) +] + +val frameset_tuple_list = [ + ("FRAME", STARTFRAME, NONE), + ("FRAMESET", STARTFRAMESET, SOME ENDFRAMESET), + ("NOFRAMES", STARTNOFRAMES, SOME ENDNOFRAMES) +] + +val endTagNameTest = Char.notContains " \t\r\n>" + +fun splitTagStart inStr = + Substring.splitl endTagNameTest (Substring.full inStr) + +fun extractTag str = let + val (tagNameChs, _) = splitTagStart str + val tagNameChs = (case CharVectorSlice.getItem tagNameChs + of SOME(#"<", r) => (case CharVectorSlice.getItem r + of SOME(#"/", r) => r + | _ => r + (* end case *)) + | _ => tagNameChs + (* end case *)) + in + Atom.atom (CharVectorSlice.map Char.toUpper tagNameChs) + end + +fun extractAttrs str = + let + val (_, tagRest) = splitTagStart str + val (tagRest', _) = Substring.splitr (fn c => c = #">") tagRest + in + parseAttrs (Substring.string tagRest') + end + +structure AtomMap : ORD_MAP = RedBlackMapFn(struct + type ord_key = Atom.atom + val compare = Atom.compare + end) + +fun element_tuple_to_ctor_maps ((tag_name, open_ctor, close_ctor_opt), + (open_map, close_map)) = + let val tag_atom = Atom.atom tag_name + val open_map' = AtomMap.insert(open_map, tag_atom, open_ctor) + val close_map' = case close_ctor_opt of + NONE => close_map + | SOME close_tok => AtomMap.insert( + close_map, tag_atom, close_tok) + in (open_map', close_map') end + +val (strict_open_map, strict_close_map) = + foldl element_tuple_to_ctor_maps (AtomMap.empty, AtomMap.empty) + strict_tuple_list + +val (loose_open_map, loose_close_map) = + foldl element_tuple_to_ctor_maps (strict_open_map, strict_close_map) + loose_tuple_list + +val (frameset_open_map, frameset_close_map) = + foldl element_tuple_to_ctor_maps (strict_open_map, strict_close_map) + frameset_tuple_list + +val open_map_ref = ref strict_open_map + +val close_map_ref = ref strict_close_map + +fun mkOpenTag payloadStr = + let val tag_atom = extractTag payloadStr + in case AtomMap.find(!open_map_ref, tag_atom) of + NONE => OPENTAG (tag_atom, (payloadStr, extractAttrs payloadStr)) + | SOME ctor => ctor (payloadStr, extractAttrs payloadStr) + end + +fun mkCloseTag payloadStr = + let val tag_atom = extractTag payloadStr + in case AtomMap.find(!close_map_ref, tag_atom) of + NONE => CLOSETAG tag_atom + | SOME tok => tok + end + +(* ____________________________________________________________ *) +(* Alternative tokToString useful for printing. + *) + +fun payloadToString (_, []) = "" + | payloadToString (_, attrs as (_ :: _)) = + " " ^ (HTML4Utils.attrsToStr attrs) + +fun tokToString EOF = "EOF" + | tokToString (OPENTAG (tagname, tagdata)) = + String.concat ["OPENTAG ", Atom.toString tagname, " ", + payloadToString tagdata] + | tokToString (CLOSETAG tagname) = "CLOSETAG " ^ (Atom.toString tagname) + | tokToString (DOCTYPE docdata) = docdata + | tokToString (PCDATA pcdata) = pcdata + | tokToString (COMMENT comment) = comment + | tokToString (CHAR_REF refint) = "&#" ^ (IntInf.toString refint) ^ ";" + | tokToString (ENTITY_REF refatom) = "&" ^ (Atom.toString refatom) ^ ";" + | tokToString (XML_PROCESSING directive) = "XML DIRECTIVE " ^ directive + | tokToString (STARTA payload) = + "<A" ^ (payloadToString payload) ^ ">" + | tokToString ENDA = "</A>" + | tokToString (STARTABBR payload) = + "<ABBR" ^ (payloadToString payload) ^ ">" + | tokToString ENDABBR = "</ABBR>" + | tokToString (STARTACRONYM payload) = + "<ACRONYM" ^ (payloadToString payload) ^ ">" + | tokToString ENDACRONYM = "</ACRONYM>" + | tokToString (STARTADDRESS payload) = + "<ADDRESS" ^ (payloadToString payload) ^ ">" + | tokToString ENDADDRESS = "</ADDRESS>" + | tokToString (STARTAREA payload) = + "<AREA" ^ (payloadToString payload) ^ ">" + | tokToString (STARTB payload) = + "<B" ^ (payloadToString payload) ^ ">" + | tokToString ENDB = "</B>" + | tokToString (STARTBASE payload) = + "<BASE" ^ (payloadToString payload) ^ ">" + | tokToString (STARTBDO payload) = + "<BDO" ^ (payloadToString payload) ^ ">" + | tokToString ENDBDO = "</BDO>" + | tokToString (STARTBIG payload) = + "<BIG" ^ (payloadToString payload) ^ ">" + | tokToString ENDBIG = "</BIG>" + | tokToString (STARTBLOCKQUOTE payload) = + "<BLOCKQUOTE" ^ (payloadToString payload) ^ ">" + | tokToString ENDBLOCKQUOTE = "</BLOCKQUOTE>" + | tokToString (STARTBODY payload) = + "<BODY" ^ (payloadToString payload) ^ ">" + | tokToString ENDBODY = "</BODY>" + | tokToString (STARTBR payload) = + "<BR" ^ (payloadToString payload) ^ ">" + | tokToString (STARTBUTTON payload) = + "<BUTTON" ^ (payloadToString payload) ^ ">" + | tokToString ENDBUTTON = "</BUTTON>" + | tokToString (STARTCAPTION payload) = + "<CAPTION" ^ (payloadToString payload) ^ ">" + | tokToString ENDCAPTION = "</CAPTION>" + | tokToString (STARTCITE payload) = + "<CITE" ^ (payloadToString payload) ^ ">" + | tokToString ENDCITE = "</CITE>" + | tokToString (STARTCODE payload) = + "<CODE" ^ (payloadToString payload) ^ ">" + | tokToString ENDCODE = "</CODE>" + | tokToString (STARTCOL payload) = + "<COL" ^ (payloadToString payload) ^ ">" + | tokToString (STARTCOLGROUP payload) = + "<COLGROUP" ^ (payloadToString payload) ^ ">" + | tokToString ENDCOLGROUP = "</COLGROUP>" + | tokToString (STARTDD payload) = + "<DD" ^ (payloadToString payload) ^ ">" + | tokToString ENDDD = "</DD>" + | tokToString (STARTDEL payload) = + "<DEL" ^ (payloadToString payload) ^ ">" + | tokToString ENDDEL = "</DEL>" + | tokToString (STARTDFN payload) = + "<DFN" ^ (payloadToString payload) ^ ">" + | tokToString ENDDFN = "</DFN>" + | tokToString (STARTDIV payload) = + "<DIV" ^ (payloadToString payload) ^ ">" + | tokToString ENDDIV = "</DIV>" + | tokToString (STARTDL payload) = + "<DL" ^ (payloadToString payload) ^ ">" + | tokToString ENDDL = "</DL>" + | tokToString (STARTDT payload) = + "<DT" ^ (payloadToString payload) ^ ">" + | tokToString ENDDT = "</DT>" + | tokToString (STARTEM payload) = + "<EM" ^ (payloadToString payload) ^ ">" + | tokToString ENDEM = "</EM>" + | tokToString (STARTFIELDSET payload) = + "<FIELDSET" ^ (payloadToString payload) ^ ">" + | tokToString ENDFIELDSET = "</FIELDSET>" + | tokToString (STARTFORM payload) = + "<FORM" ^ (payloadToString payload) ^ ">" + | tokToString ENDFORM = "</FORM>" + | tokToString (STARTH1 payload) = + "<H1" ^ (payloadToString payload) ^ ">" + | tokToString ENDH1 = "</H1>" + | tokToString (STARTH2 payload) = + "<H2" ^ (payloadToString payload) ^ ">" + | tokToString ENDH2 = "</H2>" + | tokToString (STARTH3 payload) = + "<H3" ^ (payloadToString payload) ^ ">" + | tokToString ENDH3 = "</H3>" + | tokToString (STARTH4 payload) = + "<H4" ^ (payloadToString payload) ^ ">" + | tokToString ENDH4 = "</H4>" + | tokToString (STARTH5 payload) = + "<H5" ^ (payloadToString payload) ^ ">" + | tokToString ENDH5 = "</H5>" + | tokToString (STARTH6 payload) = + "<H6" ^ (payloadToString payload) ^ ">" + | tokToString ENDH6 = "</H6>" + | tokToString (STARTHEAD payload) = + "<HEAD" ^ (payloadToString payload) ^ ">" + | tokToString ENDHEAD = "</HEAD>" + | tokToString (STARTHR payload) = + "<HR" ^ (payloadToString payload) ^ ">" + | tokToString (STARTHTML payload) = + "<HTML" ^ (payloadToString payload) ^ ">" + | tokToString ENDHTML = "</HTML>" + | tokToString (STARTI payload) = + "<I" ^ (payloadToString payload) ^ ">" + | tokToString ENDI = "</I>" + | tokToString (STARTIMG payload) = + "<IMG" ^ (payloadToString payload) ^ ">" + | tokToString (STARTINPUT payload) = + "<INPUT" ^ (payloadToString payload) ^ ">" + | tokToString (STARTINS payload) = + "<INS" ^ (payloadToString payload) ^ ">" + | tokToString ENDINS = "</INS>" + | tokToString (STARTKBD payload) = + "<KBD" ^ (payloadToString payload) ^ ">" + | tokToString ENDKBD = "</KBD>" + | tokToString (STARTLABEL payload) = + "<LABEL" ^ (payloadToString payload) ^ ">" + | tokToString ENDLABEL = "</LABEL>" + | tokToString (STARTLEGEND payload) = + "<LEGEND" ^ (payloadToString payload) ^ ">" + | tokToString ENDLEGEND = "</LEGEND>" + | tokToString (STARTLI payload) = + "<LI" ^ (payloadToString payload) ^ ">" + | tokToString ENDLI = "</LI>" + | tokToString (STARTLINK payload) = + "<LINK" ^ (payloadToString payload) ^ ">" + | tokToString (STARTMAP payload) = + "<MAP" ^ (payloadToString payload) ^ ">" + | tokToString ENDMAP = "</MAP>" + | tokToString (STARTMETA payload) = + "<META" ^ (payloadToString payload) ^ ">" + | tokToString (STARTNOSCRIPT payload) = + "<NOSCRIPT" ^ (payloadToString payload) ^ ">" + | tokToString ENDNOSCRIPT = "</NOSCRIPT>" + | tokToString (STARTOBJECT payload) = + "<OBJECT" ^ (payloadToString payload) ^ ">" + | tokToString ENDOBJECT = "</OBJECT>" + | tokToString (STARTOL payload) = + "<OL" ^ (payloadToString payload) ^ ">" + | tokToString ENDOL = "</OL>" + | tokToString (STARTOPTGROUP payload) = + "<OPTGROUP" ^ (payloadToString payload) ^ ">" + | tokToString ENDOPTGROUP = "</OPTGROUP>" + | tokToString (STARTOPTION payload) = + "<OPTION" ^ (payloadToString payload) ^ ">" + | tokToString ENDOPTION = "</OPTION>" + | tokToString (STARTP payload) = + "<P" ^ (payloadToString payload) ^ ">" + | tokToString ENDP = "</P>" + | tokToString (STARTPARAM payload) = + "<PARAM" ^ (payloadToString payload) ^ ">" + | tokToString (STARTPRE payload) = + "<PRE" ^ (payloadToString payload) ^ ">" + | tokToString ENDPRE = "</PRE>" + | tokToString (STARTQ payload) = + "<Q" ^ (payloadToString payload) ^ ">" + | tokToString ENDQ = "</Q>" + | tokToString (STARTSAMP payload) = + "<SAMP" ^ (payloadToString payload) ^ ">" + | tokToString ENDSAMP = "</SAMP>" + | tokToString (STARTSCRIPT payload) = + "<SCRIPT" ^ (payloadToString payload) ^ ">" + | tokToString ENDSCRIPT = "</SCRIPT>" + | tokToString (STARTSELECT payload) = + "<SELECT" ^ (payloadToString payload) ^ ">" + | tokToString ENDSELECT = "</SELECT>" + | tokToString (STARTSMALL payload) = + "<SMALL" ^ (payloadToString payload) ^ ">" + | tokToString ENDSMALL = "</SMALL>" + | tokToString (STARTSPAN payload) = + "<SPAN" ^ (payloadToString payload) ^ ">" + | tokToString ENDSPAN = "</SPAN>" + | tokToString (STARTSTRONG payload) = + "<STRONG" ^ (payloadToString payload) ^ ">" + | tokToString ENDSTRONG = "</STRONG>" + | tokToString (STARTSTYLE payload) = + "<STYLE" ^ (payloadToString payload) ^ ">" + | tokToString ENDSTYLE = "</STYLE>" + | tokToString (STARTSUB payload) = + "<SUB" ^ (payloadToString payload) ^ ">" + | tokToString ENDSUB = "</SUB>" + | tokToString (STARTSUP payload) = + "<SUP" ^ (payloadToString payload) ^ ">" + | tokToString ENDSUP = "</SUP>" + | tokToString (STARTTABLE payload) = + "<TABLE" ^ (payloadToString payload) ^ ">" + | tokToString ENDTABLE = "</TABLE>" + | tokToString (STARTTBODY payload) = + "<TBODY" ^ (payloadToString payload) ^ ">" + | tokToString ENDTBODY = "</TBODY>" + | tokToString (STARTTD payload) = + "<TD" ^ (payloadToString payload) ^ ">" + | tokToString ENDTD = "</TD>" + | tokToString (STARTTEXTAREA payload) = + "<TEXTAREA" ^ (payloadToString payload) ^ ">" + | tokToString ENDTEXTAREA = "</TEXTAREA>" + | tokToString (STARTTFOOT payload) = + "<TFOOT" ^ (payloadToString payload) ^ ">" + | tokToString ENDTFOOT = "</TFOOT>" + | tokToString (STARTTH payload) = + "<TH" ^ (payloadToString payload) ^ ">" + | tokToString ENDTH = "</TH>" + | tokToString (STARTTHEAD payload) = + "<THEAD" ^ (payloadToString payload) ^ ">" + | tokToString ENDTHEAD = "</THEAD>" + | tokToString (STARTTITLE payload) = + "<TITLE" ^ (payloadToString payload) ^ ">" + | tokToString ENDTITLE = "" + | tokToString (STARTTR payload) = + "" + | tokToString ENDTR = "" + | tokToString (STARTTT payload) = + "" + | tokToString ENDTT = "" + | tokToString (STARTUL payload) = + "" + | tokToString ENDUL = "" + | tokToString (STARTVAR payload) = + "" + | tokToString ENDVAR = "" + | tokToString (STARTAPPLET payload) = + "" + | tokToString ENDAPPLET = "" + | tokToString (STARTBASEFONT payload) = + "" + | tokToString (STARTCENTER payload) = + "" + | tokToString ENDCENTER = "" + | tokToString (STARTDIR payload) = + "" + | tokToString ENDDIR = "
    " + | tokToString (STARTFONT payload) = + "" + | tokToString ENDFONT = "" + | tokToString (STARTIFRAME payload) = + "" + | tokToString ENDIFRAME = "" + | tokToString (STARTISINDEX payload) = + "" + | tokToString (STARTMENU payload) = + "" + | tokToString ENDMENU = "" + | tokToString (STARTS payload) = + "" + | tokToString ENDS = "" + | tokToString (STARTSTRIKE payload) = + "" + | tokToString ENDSTRIKE = "" + | tokToString (STARTU payload) = + "" + | tokToString ENDU = "" + | tokToString (STARTFRAME payload) = + "" + | tokToString (STARTFRAMESET payload) = + "" + | tokToString ENDFRAMESET = "" + | tokToString (STARTNOFRAMES payload) = + "" + | tokToString ENDNOFRAMES = "" + +(* ______________________________________________________________________ *) + +fun tokGetAttrs (STARTA payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTABBR payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTACRONYM payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTADDRESS payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTAREA payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTB payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTBASE payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTBDO payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTBIG payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTBLOCKQUOTE payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTBODY payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTBR payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTBUTTON payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTCAPTION payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTCITE payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTCODE payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTCOL payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTCOLGROUP payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTDD payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTDEL payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTDFN payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTDIV payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTDL payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTDT payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTEM payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTFIELDSET payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTFORM payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTH1 payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTH2 payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTH3 payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTH4 payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTH5 payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTH6 payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTHEAD payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTHR payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTHTML payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTI payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTIMG payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTINPUT payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTINS payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTKBD payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTLABEL payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTLEGEND payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTLI payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTLINK payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTMAP payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTMETA payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTNOSCRIPT payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTOBJECT payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTOL payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTOPTGROUP payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTOPTION payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTP payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTPARAM payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTPRE payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTQ payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTSAMP payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTSCRIPT payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTSELECT payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTSMALL payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTSPAN payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTSTRONG payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTSTYLE payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTSUB payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTSUP payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTTABLE payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTTBODY payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTTD payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTTEXTAREA payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTTFOOT payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTTH payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTTHEAD payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTTITLE payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTTR payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTTT payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTUL payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTVAR payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTAPPLET payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTBASEFONT payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTCENTER payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTDIR payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTFONT payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTIFRAME payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTISINDEX payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTMENU payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTS payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTSTRIKE payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTU payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTFRAME payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTFRAMESET payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs (STARTNOFRAMES payload) = SOME (H4U.getAttrs payload) + | tokGetAttrs _ = NONE + +end (* HTML4TokenUtils *) + +(* ______________________________________________________________________ + End of html4-token-utils.sml + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-utils.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-utils.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/html4-utils.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/html4-utils.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,197 @@ +(* html4-utils.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Defines a set of utility data types and functions for the HTML 4 parser. + *) + +structure HTML4Utils = struct + +(* ____________________________________________________________ + Parse trees + *) + +datatype 'a parsetree = Nd of Atom.atom * 'a parsetree list + | Lf of 'a + +(* ____________________________________________________________ + Data structure and utilities for element tokens + *) + +type tag_payload = string * (Atom.atom * string option) list + +fun attrToStr (name, NONE) = Atom.toString name + | attrToStr (name, SOME a_val) = String.concat [Atom.toString name, "=", + a_val] + +fun attrsToStr attrs = String.concatWith " " (map attrToStr attrs) + +fun payloadToStr (payload, []) = payload + | payloadToStr (_, attrs as (attr :: _)) = attrsToStr attrs + +val getAttrs : tag_payload -> (Atom.atom * string option) list = #2 + +(* ____________________________________________________________ + Streams + *) + +datatype 'a stream = StreamCons of 'a * (unit -> 'a stream) + | StreamNil + +exception EmptyStream + +fun stream_hd (StreamCons (v, _)) = v + | stream_hd StreamNil = raise EmptyStream + +fun stream_tl (StreamCons (_, rst)) = rst() + | stream_tl StreamNil = raise EmptyStream + +fun stream_nth (stream, 0) = stream_hd stream + | stream_nth (stream, idx) = stream_nth(stream_tl stream, idx - 1) + +fun stream_empty StreamNil = true + | stream_empty (StreamCons _) = false + +fun stream_concat (StreamNil, stream2) = stream2 + | stream_concat (StreamCons(hdval, tl_thunk), stream2) = + StreamCons(hdval, fn () => (stream_concat (tl_thunk(), stream2))) + +fun stream_concatl [] = StreamNil + | stream_concatl (StreamNil :: streams) = stream_concatl streams + | stream_concatl ((StreamCons(hdval, tl_thunk)) :: streams) = + StreamCons(hdval, fn () => (stream_concatl ((tl_thunk())::streams))) + +(* stream_concatt() - Special concat that allows a stream thunk to be +appended to the tail of a stream. *) + +fun stream_concatt (StreamNil, tl_thunk2) = tl_thunk2() + | stream_concatt (StreamCons(hdval, tl_thunk1), tl_thunk2) = + StreamCons(hdval, fn () => stream_concatt (tl_thunk1(), tl_thunk2)) + +fun stream_map mapfn StreamNil = StreamNil + | stream_map mapfn (StreamCons (hdval, tl_thunk)) = + StreamCons(mapfn hdval, fn () => (stream_map mapfn (tl_thunk()))) + +(* stream_maps() - Full blown transduction from one kind of stream to +another, where the mapper returns a stream. This allows one to zero +and one to many mappings, as opposed to stream_map() which only allows +one to one maps. *) + +fun stream_maps mapsfn instrm = + (case instrm of + StreamNil => StreamNil + | StreamCons(crnt_hd, tl_thunk) => + let val outstrm_front = mapsfn crnt_hd + fun tl_thunk' () = stream_maps mapsfn (tl_thunk ()) + in stream_concatt(outstrm_front, tl_thunk') end) + +fun stream_app appfn StreamNil = () + | stream_app appfn (StreamCons (hdval, tl_thunk)) = + (appfn hdval; stream_app appfn (tl_thunk())); + +fun stream_filter pred StreamNil = StreamNil + | stream_filter pred (StreamCons (hdval, tl_thunk)) = + if pred hdval then StreamCons(hdval, + fn () => (stream_filter pred (tl_thunk()))) + else stream_filter pred (tl_thunk()) + +fun stream_foldl foldlfn acc StreamNil = acc + | stream_foldl foldlfn acc (StreamCons(hd_val, tl_thunk)) = + stream_foldl foldlfn (foldlfn(hd_val, acc)) (tl_thunk()) + +fun stream_singleton soleval = StreamCons(soleval, fn () => StreamNil) + +fun stream_inf infval = StreamCons(infval, fn () => (stream_inf infval)) + +fun stream_fromList [] = StreamNil + | stream_fromList (elem::elems) = + StreamCons(elem, fn () => stream_fromList elems) + +(* ____________________________________________________________ + Parse tree streams + *) + +datatype 'a parsevisitation = EnterNT of Atom.atom + | ExitNT of Atom.atom + | VisitT of 'a + +fun visitationToString _ (EnterNT ntAtom) = + concat["entry of ", Atom.toString ntAtom, " nonterminal"] + | visitationToString _ (ExitNT ntAtom) = + concat["exit of ", Atom.toString ntAtom, " nonterminal"] + | visitationToString termToString (VisitT terminal) = + concat["vistation of ", termToString terminal, " terminal"] + +fun visitationSame _ (EnterNT ntAtom, EnterNT ntAtom') = Atom.same(ntAtom, ntAtom') + | visitationSame _ (ExitNT ntAtom, ExitNT ntAtom') = Atom.same(ntAtom, ntAtom') + | visitationSame termSame (VisitT term, VisitT term') = termSame(term, term') + | visitationSame _ _ = false + +fun parsetreeToVisitationStream (node as (Nd (ntAtom, children))) = + let fun tl_thunk () = + let val children' = map parsetreeToVisitationStream children + in + stream_concat(stream_concatl children', + stream_singleton (ExitNT ntAtom)) + end + in + StreamCons(EnterNT ntAtom, tl_thunk) + end + | parsetreeToVisitationStream (node as (Lf payload)) = + StreamCons(VisitT payload, fn () => StreamNil) + +fun visitationStreamToParsetree strm = + let fun handleVisit (EnterNT _, (spine, peers)) = + (peers :: spine, []) + | handleVisit (ExitNT ntAtom, ((peers :: spine), children')) = + (spine, (Nd (ntAtom, rev children')) :: peers) + | handleVisit (VisitT term, (spine, peers)) = + (spine, (Lf term) :: peers) + val (_, result :: _) = stream_foldl handleVisit ([], []) strm + in result end + +fun parsetreeStreamMapT maptfn = + let fun transduce StreamNil = StreamNil + | transduce (StreamCons(crnt_hd, tl_thunk)) = + let val hd' = case crnt_hd of + VisitT term => VisitT (maptfn term) + | _ => crnt_hd + fun tl_thunk' () = transduce (tl_thunk ()) + in StreamCons(hd', tl_thunk') end + in transduce end + +(* parsetreeStreamMapTStream(): given a function that maps from +terminals to a parse tree visitation stream, do a map over an existing +visitation stream. This should be useful for mapping some placeholder +token into a synthetic nonterminal or list of terminals. *) + +fun parsetreeStreamMapTStream (guardfn, maptsfn) = + let fun transduce StreamNil = StreamNil + | transduce (StreamCons(crnt_hd, tl_thunk)) = + let fun tl_thunk' () = transduce (tl_thunk ()) + in case crnt_hd of + VisitT term => if (guardfn term) + then stream_concatt(maptsfn term, + tl_thunk') + else StreamCons(crnt_hd, tl_thunk') + | _ => StreamCons(crnt_hd, tl_thunk') + end + in transduce end + +fun mkParsetreeStreamToString termToString strm = + let fun handleVisit (EnterNT ntAtom, (indent, outs)) = + (String.concat [indent, " "], + (String.concat [indent, Atom.toString ntAtom, "\n"] :: outs)) + | handleVisit (ExitNT ntAtom, (indent, outs)) = + (String.extract(indent, 1, NONE), outs) + | handleVisit (VisitT term, (indent, outs)) = + (indent, String.concat [indent, termToString term, "\n"] :: outs) + val (_, outs) = stream_foldl handleVisit ("", []) strm + in String.concat(rev outs) end + +end + +(* ______________________________________________________________________ + End of html4-utils.sml + ______________________________________________________________________ *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/pp-init.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/pp-init.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/pp-init.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/pp-init.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,67 @@ + (* pp-init.sml + * + * COPYRIGHT (c) 2003 The SML/NJ Fellowship + * + * An implementation of SML/NJ's PP interface. + * - This is an (almost) literal copy of the original code in + * smlnj-lib/PP/examples/old-pp.sml + *) + + +signature PRETTYPRINT = +sig + include PP_STREAM + val with_pp : device -> (stream -> unit) -> unit + val pp_to_string : int -> (stream -> 'a -> unit) -> 'a -> string +end + +structure PrettyPrint : PRETTYPRINT = +struct + + type ppconsumer = { + consumer : string -> unit, + linewidth : int, + flush : unit -> unit + } + + structure Dev = + struct + type device = ppconsumer + type style = unit + fun sameStyle _ = true + fun pushStyle _ = () + fun popStyle _ = () + fun defaultStyle _ = () + fun depth _ = NONE + fun lineWidth {consumer, linewidth, flush} = SOME linewidth + fun textWidth _ = NONE + fun space ({consumer, linewidth, flush}, n) = + consumer (StringCvt.padLeft #" " n "") + fun newline {consumer, linewidth, flush} = consumer "\n" + fun string ({consumer, linewidth, flush}, s) = consumer s + fun char ({consumer, linewidth, flush}, c) = consumer(str c) + fun flush {consumer, linewidth, flush} = flush() + end + + structure PP = PPStreamFn + (structure Token = StringToken + structure Device = Dev) + + open PP + + fun with_pp device (f: PP.stream -> unit) = + let val ppstrm = PP.openStream device + in f ppstrm; + PP.closeStream ppstrm + end + + fun pp_to_string wid ppFn obj = + let val l = ref ([] : string list) + fun attach s = l := s :: !l + val device = {consumer = attach, linewidth = wid, flush = fn()=>()} + in with_pp device + (fn ppStrm => ppFn ppStrm obj); + String.concat(List.rev(!l)) + end + +end (* structure PrettyPrint *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,38 @@ +______________________________________________________________________ +README +______________________________________________________________________ + +This is the README for a new HTML 4.01 library for SML/NJ. + +____________________________________________________________ +Build targets +____________________________________________________________ + +The primary target is in html4-lib.cm. This will build everything +needed to provide the HTML4 structure. + +There are several test targets coded in CM files. + +The first one tests the lexer, accepting a list of files as an +argument, and outputing a token per line. For example: + +$ ml-build html4-lex-test.cm +$ sml @SMLload=html4-lex-test.platform tests/test001.html + +The next one tests the parser, accepting a list of files as input, and +outputing the parse tree (TODO). For example: + +$ ml-build html4-test.cm +$ sml @SMLload=html4-test.platform tests/test001.html + +____________________________________________________________ +Helper script +____________________________________________________________ + +We've included a helper script, which we used to create the lexical +token constructors. This script, helper.py, processes a table of +elements, published in the HTML 4.01 specification. + +______________________________________________________________________ +End of README +______________________________________________________________________ diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/TODO mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/TODO --- mlton-20130715/lib/smlnj-lib/smlnj-lib/HTML4/TODO 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/HTML4/TODO 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,8 @@ +TODO list for the HTML4 library: + + - fix bugs in conformance tests (these are parsing issues) + - streamline parser; we should be able to fold the processing of attributes (html4-attr.{lg}) + into the scaner/parser for elements. + - the printer should be "PRE" aware. + - add the rest of the standard HTML4 entites to html4-entities.sml + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/INet/inet-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/INet/inet-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/INet/inet-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/INet/inet-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,31 @@ +(* inet-lib.cm + * + * COPYRIGHT (c) 1999 Bell Labs, Lucent Technologies. + * + * Sources file for INet library; part of the SML/NJ library suite. + *) + +Library + signature SOCK_UTIL + structure SockUtil + +#if defined(OPSYS_UNIX) + signature UNIX_SOCK_UTIL + structure UnixSockUtil +#endif + +is +#if defined(NEW_CM) + $/basis.cm + $/smlnj-lib.cm +#else + ../Util/smlnj-lib.cm +#endif + + sock-util-sig.sml + sock-util.sml + +#if defined(OPSYS_UNIX) + unix-sock-util.sml +#endif + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/INet/inet-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/INet/inet-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/INet/inet-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/INet/inet-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,243 @@ + +ann + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" +in + +local + basis l33 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb + end + basis l60 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + open l33 + in + structure gs_0 = Char + structure gs_1 = CharArray + structure gs_2 = CharVector + structure gs_3 = FixedInt + structure gs_4 = General + structure gs_5 = Int + structure gs_6 = Int32 + structure gs_7 = Int64 + structure gs_8 = IntInf + structure gs_9 = LargeInt + structure gs_10 = LargeReal + structure gs_11 = LargeWord + structure gs_12 = OS + structure gs_13 = Position + structure gs_14 = Real + structure gs_15 = Real64 + structure gs_16 = RealArray + structure gs_17 = RealArraySlice + structure gs_18 = RealVector + structure gs_19 = RealVectorSlice + structure gs_20 = SMLofNJ + structure gs_21 = Socket + structure gs_22 = String + structure gs_23 = Substring + structure gs_24 = SysWord + structure gs_25 = Time + structure gs_26 = Word + structure gs_27 = Word32 + structure gs_28 = Word64 + structure gs_29 = Word8 + end + local + open l33 + in + structure gs_30 = Word8Array + end + local + open l33 + in + structure gs_31 = Word8Vector + end + local + open l33 + in + structure gs_32 = INetSock + end + local + open l33 + in + structure gs_33 = NetHostDB + end + local + open l33 + in + structure gs_34 = StringCvt + end + local + structure Char = gs_0 + structure CharArray = gs_1 + structure CharVector = gs_2 + structure FixedInt = gs_3 + structure General = gs_4 + structure INetSock = gs_32 + structure Int = gs_5 + structure Int32 = gs_6 + structure Int64 = gs_7 + structure IntInf = gs_8 + structure LargeInt = gs_9 + structure LargeReal = gs_10 + structure LargeWord = gs_11 + structure NetHostDB = gs_33 + structure OS = gs_12 + structure Position = gs_13 + structure Real = gs_14 + structure Real64 = gs_15 + structure RealArray = gs_16 + structure RealArraySlice = gs_17 + structure RealVector = gs_18 + structure RealVectorSlice = gs_19 + structure SMLofNJ = gs_20 + structure Socket = gs_21 + structure String = gs_22 + structure StringCvt = gs_34 + structure Substring = gs_23 + structure SysWord = gs_24 + structure Time = gs_25 + structure Word = gs_26 + structure Word32 = gs_27 + structure Word64 = gs_28 + structure Word8 = gs_29 + structure Word8Array = gs_30 + structure Word8Vector = gs_31 + sock-util-sig.sml + in + signature gs_35 = SOCK_UTIL + end + local + open l33 + in + structure gs_36 = UnixSock + end + local + open l60 + in + structure gs_37 = ParserComb + end + local + open l33 + in + structure gs_38 = NetServDB + end + local + open l33 + in + structure gs_39 = Word8ArraySlice + end + local + open l33 + in + structure gs_40 = Word8VectorSlice + end + local + open l33 + in + structure gs_41 = Byte + end + local + structure Byte = gs_41 + structure Char = gs_0 + structure CharArray = gs_1 + structure CharVector = gs_2 + structure FixedInt = gs_3 + structure General = gs_4 + structure INetSock = gs_32 + structure Int = gs_5 + structure Int32 = gs_6 + structure Int64 = gs_7 + structure IntInf = gs_8 + structure LargeInt = gs_9 + structure LargeReal = gs_10 + structure LargeWord = gs_11 + structure NetHostDB = gs_33 + structure NetServDB = gs_38 + structure OS = gs_12 + structure ParserComb = gs_37 + structure Position = gs_13 + structure Real = gs_14 + structure Real64 = gs_15 + structure RealArray = gs_16 + structure RealArraySlice = gs_17 + structure RealVector = gs_18 + structure RealVectorSlice = gs_19 + structure SMLofNJ = gs_20 + signature SOCK_UTIL = gs_35 + structure Socket = gs_21 + structure String = gs_22 + structure StringCvt = gs_34 + structure Substring = gs_23 + structure SysWord = gs_24 + structure Time = gs_25 + structure Word = gs_26 + structure Word32 = gs_27 + structure Word64 = gs_28 + structure Word8 = gs_29 + structure Word8Array = gs_30 + structure Word8ArraySlice = gs_39 + structure Word8Vector = gs_31 + structure Word8VectorSlice = gs_40 + sock-util.sml + in + structure gs_42 = SockUtil + end + local + structure Char = gs_0 + structure CharArray = gs_1 + structure CharVector = gs_2 + structure FixedInt = gs_3 + structure General = gs_4 + structure Int = gs_5 + structure Int32 = gs_6 + structure Int64 = gs_7 + structure IntInf = gs_8 + structure LargeInt = gs_9 + structure LargeReal = gs_10 + structure LargeWord = gs_11 + structure OS = gs_12 + structure Position = gs_13 + structure Real = gs_14 + structure Real64 = gs_15 + structure RealArray = gs_16 + structure RealArraySlice = gs_17 + structure RealVector = gs_18 + structure RealVectorSlice = gs_19 + structure SMLofNJ = gs_20 + signature SOCK_UTIL = gs_35 + structure SockUtil = gs_42 + structure Socket = gs_21 + structure String = gs_22 + structure Substring = gs_23 + structure SysWord = gs_24 + structure Time = gs_25 + structure UnixSock = gs_36 + structure Word = gs_26 + structure Word32 = gs_27 + structure Word64 = gs_28 + structure Word8 = gs_29 + unix-sock-util.sml + in + signature gs_43 = UNIX_SOCK_UTIL + structure gs_44 = UnixSockUtil + end +in + signature SOCK_UTIL = gs_35 + structure SockUtil = gs_42 + signature UNIX_SOCK_UTIL = gs_43 + structure UnixSockUtil = gs_44 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/INet/sock-util-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/INet/sock-util-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/INet/sock-util-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/INet/sock-util-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,50 @@ +(* sock-util-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Various utility functions for programming with sockets. + *) + +signature SOCK_UTIL = + sig + + datatype port = PortNumber of int | ServName of string + (* a port can be identified by number, or by the name of a service *) + + datatype hostname = HostName of string | HostAddr of NetHostDB.in_addr + + val scanAddr : (char, 'a) StringCvt.reader + -> ({host : hostname, port : port option}, 'a) StringCvt.reader + (* scan an address, which has the form + * addr [ ":" port ] + * where the addr may either be numeric or symbolic host name and the + * port is either a service name or a decimal number. Legal host names + * must begin with a letter, and may contain any alphanumeric character, + * the minus sign (-) and period (.), where the period is used as a + * domain separator. + *) + val addrFromString : string -> {host : hostname, port : port option} option + + exception BadAddr of string + + val resolveAddr : {host : hostname, port : port option} + -> {host : string, addr : NetHostDB.in_addr, port : int option} + (* Given a hostname and optional port, resolve them in the host + * and service database. If either the host or service name is not + * found, then BadAddr is raised. + *) + + type 'a stream_sock = ('a, Socket.active Socket.stream) Socket.sock + + val connectINetStrm : {addr : NetHostDB.in_addr, port : int} + -> INetSock.inet stream_sock + (* establish a client-side connection to an INET domain stream socket *) + + val recvVec : ('a stream_sock * int) -> Word8Vector.vector + val recvStr : ('a stream_sock * int) -> string + val sendVec : ('a stream_sock * Word8Vector.vector) -> unit + val sendStr : ('a stream_sock * string) -> unit + val sendArr : ('a stream_sock * Word8Array.array) -> unit + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/INet/sock-util.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/INet/sock-util.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/INet/sock-util.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/INet/sock-util.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,138 @@ +(* sock-util.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Various utility functions for programming with sockets. + *) + +structure SockUtil : SOCK_UTIL = + struct + + structure C = Char + structure PC = ParserComb + + datatype port = PortNumber of int | ServName of string + (* a port can be identified by number, or by the name of a service *) + + datatype hostname = HostName of string | HostAddr of NetHostDB.in_addr + +(** This belongs in an Option structure **) + fun filterPartial pred NONE = NONE + | filterPartial pred (SOME x) = if (pred x) then SOME x else NONE + + fun scanName getc strm = let + fun isNameChr (#".", _) = true + | isNameChr (#"-", _) = true + | isNameChr (c, _) = C.isAlphaNum c + fun getName (strm, cl) = (case filterPartial isNameChr (getc strm) + of SOME(c, strm') => getName(strm', c::cl) + | NONE => SOME(implode(rev cl), strm) + (* end case *)) + in + case (filterPartial (C.isAlpha o #1) (getc strm)) + of SOME(c, strm) => getName(strm, [c]) + | NONE => NONE + (* end case *) + end + + (* scan an address, which has the form + * addr [ ":" port ] + * where the addr may either be numeric or symbolic host name and the + * port is either a service name or a decimal number. Legal host names + * must begin with a letter, and may contain any alphanumeric character, + * the minus sign (-) and period (.), where the period is used as a + * domain separator. + *) + fun scanAddr getc strm = + PC.seqWith (fn (host, port) => {host=host, port=port}) ( + PC.or ( + PC.wrap (scanName, HostName), + PC.wrap (NetHostDB.scan, HostAddr)), + PC.option ( + PC.seqWith #2 ( + PC.eatChar (fn c => (c = #":")), + PC.or ( + PC.wrap (scanName, ServName), + PC.wrap (Int.scan StringCvt.DEC, PortNumber))))) getc strm + + val addrFromString = StringCvt.scanString scanAddr + + exception BadAddr of string + + fun resolveAddr {host, port} = let + fun err (a, b) = raise BadAddr(concat[a, " \"", b, "\" not found"]) + val (name, addr) = (case host + of HostName s => (case NetHostDB.getByName s + of NONE => err ("hostname", s) + | (SOME entry) => (s, NetHostDB.addr entry) + (* end case *)) + | HostAddr addr => (case NetHostDB.getByAddr addr + of NONE => err ("host address", NetHostDB.toString addr) + | (SOME entry) => (NetHostDB.name entry, addr) + (* end case *)) + (* end case *)) + val port = (case port + of (SOME(PortNumber n)) => SOME n + | (SOME(ServName s)) => (case NetServDB.getByName(s, NONE) + of (SOME entry) => SOME(NetServDB.port entry) + | NONE => err("service", s) + (* end case *)) + | NONE => NONE + (* end case *)) + in + {host = name, addr = addr, port = port} + end + + type 'a stream_sock = ('a, Socket.active Socket.stream) Socket.sock + + (* establish a client-side connection to a INET domain stream socket *) + fun connectINetStrm {addr, port} = let + val sock = INetSock.TCP.socket () + in + Socket.connect (sock, INetSock.toAddr(addr, port)); + sock + end + +(** If the server closes the connection, do we get 0 bytes or an error??? **) + (* read exactly n bytes from a stream socket *) + fun recvVec (sock, n) = let + fun get (0, data) = Word8Vector.concat(rev data) + | get (n, data) = let + val v = Socket.recvVec (sock, n) + in + if (Word8Vector.length v = 0) + then raise OS.SysErr("closed socket", NONE) + else get (n - Word8Vector.length v, v::data) + end + in + if (n < 0) then raise Size else get (n, []) + end + + fun recvStr arg = Byte.bytesToString (recvVec arg) + + (* send the complete contents of a vector *) + fun sendVec (sock, vec) = let + val len = Word8Vector.length vec + fun send i = Socket.sendVec (sock, Word8VectorSlice.slice (vec, i, NONE)) + fun put i = if (i < len) + then put(i + send i) + else () + in + put 0 + end + + fun sendStr (sock, str) = sendVec (sock, Byte.stringToBytes str) + + (* send the complete contents of an array *) + fun sendArr (sock, arr) = let + val len = Word8Array.length arr + fun send i = Socket.sendArr (sock, Word8ArraySlice.slice (arr, i, NONE)) + fun put i = if (i < len) + then put(i + send i) + else () + in + put 0 + end + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/INet/unix-sock-util.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/INet/unix-sock-util.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/INet/unix-sock-util.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/INet/unix-sock-util.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ +(* unix-sock-util.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Bind SockUtil structure on Unix systems + *) + +signature UNIX_SOCK_UTIL = + sig + + include SOCK_UTIL + + val connectUnixStrm : string -> UnixSock.unix stream_sock + (* establish a client-side connection to a Unix-domain stream socket *) + + end + + +structure UnixSockUtil : UNIX_SOCK_UTIL = + struct + + open SockUtil + + (* establish a client-side connection to a Unix-domain stream socket *) + fun connectUnixStrm path = let + val sock = UnixSock.Strm.socket () + in + Socket.connect (sock, UnixSock.toAddr path); + sock + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json.lex mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json.lex --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json.lex 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json.lex 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,78 @@ +(* json.lex + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Lexer for JSON files. + * + * TODO: + * EOF rules for strings + * newlines in strings + * error messages for unknown characters + *) + +%name JSONLexer; + +%defs ( + structure T = JSONTokens + type lex_result = T.token + fun eof () = T.EOF + fun int s = T.INT(valOf(IntInf.fromString s)) + fun float s = T.FLOAT(valOf(LargeReal.fromString s)) +(* support for incremental construction of strings *) + val sbuf : string list ref = ref [] + fun addStr s = sbuf := s :: !sbuf + fun addUChr lit = let + (* trim the "\u" prefix *) + val digits = Substring.triml 2 (Substring.full lit) + val SOME(w, _) = Word.scan StringCvt.HEX Substring.getc digits + in + addStr(UTF8.encode w) + end + fun finishString () = (T.STRING(String.concat(List.rev(!sbuf))) before sbuf := []) +); + +%let digit1_9 = [1-9]; +%let digit = [0-9]; +%let digits = {digit}+; +%let int = "-"?({digit} | {digit1_9}{digits}+); +%let frac = "."{digits}; +%let exp = [eE][+-]?{digits}; +%let xdigit = {digit}|[a-fA-F]; + +%states S; + +[\ \t\n\r]+ => ( skip() ); + +"{" => ( T.LCB ); +"}" => ( T.RCB ); +"[" => ( T.LB ); +"]" => ( T.RB ); +"," => ( T.COMMA ); +":" => ( T.COLON ); +"null" => ( T.KW_null ); +"true" => ( T.KW_true ); +"false" => ( T.KW_false ); + +{int} => ( T.INT(valOf(IntInf.fromString yytext)) ); + +{int}{frac} => ( float yytext ); +{int}{exp} => ( float yytext ); +{int}{frac}{exp} => ( float yytext ); + +"\"" => ( YYBEGIN S; continue() ); +"\\\\" => ( addStr "\\"; continue() ); +"\\\"" => ( addStr "\""; continue() ); +"\\/" => ( addStr "/"; continue() ); +"\\b" => ( addStr "\b"; continue() ); +"\\f" => ( addStr "\f"; continue() ); +"\\n" => ( addStr "\n"; continue() ); +"\\r" => ( addStr "\r"; continue() ); +"\\t" => ( addStr "\t"; continue() ); +"\\u"{xdigit}{4} => ( addUChr yytext; continue() ); +[^\\"]+ => ( addStr yytext; continue() ); +"\"" => ( YYBEGIN INITIAL; finishString() ); + +"/*"(~(.*"*/".*))"*/" => ( skip() ); + +. => ( T.ERROR["bad character '", String.toString yytext, "'"]); diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json.lex.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json.lex.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json.lex.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json.lex.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,935 @@ +structure JSONLexer = struct + + datatype yystart_state = +S | INITIAL + local + + structure UserDeclarations = + struct + + + structure T = JSONTokens + type lex_result = T.token + fun eof () = T.EOF + fun int s = T.INT(valOf(IntInf.fromString s)) + fun float s = T.FLOAT(valOf(LargeReal.fromString s)) +(* support for incremental construction of strings *) + val sbuf : string list ref = ref [] + fun addStr s = sbuf := s :: !sbuf + fun addUChr lit = let + (* trim the "\u" prefix *) + val digits = Substring.triml 2 (Substring.full lit) + val SOME(w, _) = Word.scan StringCvt.HEX Substring.getc digits + in + addStr(UTF8.encode w) + end + fun finishString () = (T.STRING(String.concat(List.rev(!sbuf))) before sbuf := []) + + end + + datatype yymatch + = yyNO_MATCH + | yyMATCH of ULexBuffer.stream * action * yymatch + withtype action = ULexBuffer.stream * yymatch -> UserDeclarations.lex_result + + val yytable : ((UTF8.wchar * UTF8.wchar * int) list * int list) Vector.vector = +Vector.fromList [] + fun yystreamify' p input = ULexBuffer.mkStream (p, input) + + fun yystreamifyReader' p readFn strm = let + val s = ref strm + fun iter(strm, n, accum) = + if n > 1024 then (String.implode (rev accum), strm) + else (case readFn strm + of NONE => (String.implode (rev accum), strm) + | SOME(c, strm') => iter (strm', n+1, c::accum)) + fun input() = let + val (data, strm) = iter(!s, 0, []) + in + s := strm; + data + end + in + yystreamify' p input + end + + fun yystreamifyInstream' p strm = yystreamify' p (fn ()=>TextIO.input strm) + + fun innerLex +(yystrm_, yyss_, yysm) = let + (* current start state *) + val yyss = ref yyss_ + fun YYBEGIN ss = (yyss := ss) + (* current input stream *) + val yystrm = ref yystrm_ + fun yysetStrm strm = yystrm := strm + fun yygetPos() = ULexBuffer.getpos (!yystrm) + fun yystreamify input = yystreamify' (yygetPos()) input + fun yystreamifyReader readFn strm = yystreamifyReader' (yygetPos()) readFn strm + fun yystreamifyInstream strm = yystreamifyInstream' (yygetPos()) strm + (* start position of token -- can be updated via skip() *) + val yystartPos = ref (yygetPos()) + (* get one char of input *) + fun yygetc strm = (case ULexBuffer.getu strm + of (SOME (0w10, s')) => + (AntlrStreamPos.markNewLine yysm (ULexBuffer.getpos strm); + SOME (0w10, s')) + | x => x) + fun yygetList getc strm = let + val get1 = UTF8.getu getc + fun iter (strm, accum) = + (case get1 strm + of NONE => rev accum + | SOME (w, strm') => iter (strm', w::accum) + (* end case *)) + in + iter (strm, []) + end + (* create yytext *) + fun yymksubstr(strm) = ULexBuffer.subtract (strm, !yystrm) + fun yymktext(strm) = Substring.string (yymksubstr strm) + fun yymkunicode(strm) = yygetList Substring.getc (yymksubstr strm) + open UserDeclarations + fun lex () = let + fun yystuck (yyNO_MATCH) = raise Fail "lexer reached a stuck state" + | yystuck (yyMATCH (strm, action, old)) = + action (strm, old) + val yypos = yygetPos() + fun yygetlineNo strm = AntlrStreamPos.lineNo yysm (ULexBuffer.getpos strm) + fun yygetcolNo strm = AntlrStreamPos.colNo yysm (ULexBuffer.getpos strm) + fun yyactsToMatches (strm, [], oldMatches) = oldMatches + | yyactsToMatches (strm, act::acts, oldMatches) = + yyMATCH (strm, act, yyactsToMatches (strm, acts, oldMatches)) + fun yygo actTable = + (fn (~1, _, oldMatches) => yystuck oldMatches + | (curState, strm, oldMatches) => let + val (transitions, finals') = Vector.sub (yytable, curState) + val finals = List.map (fn i => Vector.sub (actTable, i)) finals' + fun tryfinal() = + yystuck (yyactsToMatches (strm, finals, oldMatches)) + fun find (c, []) = NONE + | find (c, (c1, c2, s)::ts) = + if c1 <= c andalso c <= c2 then SOME s + else find (c, ts) + in case yygetc strm + of SOME(c, strm') => + (case find (c, transitions) + of NONE => tryfinal() + | SOME n => + yygo actTable + (n, strm', + yyactsToMatches (strm, finals, oldMatches))) + | NONE => tryfinal() + end) + val yylastwasnref = ref (ULexBuffer.lastWasNL (!yystrm)) + fun continue() = let val yylastwasn = !yylastwasnref in +let +fun yyAction0 (strm, lastMatch : yymatch) = (yystrm := strm; skip() ) +fun yyAction1 (strm, lastMatch : yymatch) = (yystrm := strm; T.LCB ) +fun yyAction2 (strm, lastMatch : yymatch) = (yystrm := strm; T.RCB ) +fun yyAction3 (strm, lastMatch : yymatch) = (yystrm := strm; T.LB ) +fun yyAction4 (strm, lastMatch : yymatch) = (yystrm := strm; T.RB ) +fun yyAction5 (strm, lastMatch : yymatch) = (yystrm := strm; T.COMMA ) +fun yyAction6 (strm, lastMatch : yymatch) = (yystrm := strm; T.COLON ) +fun yyAction7 (strm, lastMatch : yymatch) = (yystrm := strm; T.KW_null ) +fun yyAction8 (strm, lastMatch : yymatch) = (yystrm := strm; T.KW_true ) +fun yyAction9 (strm, lastMatch : yymatch) = (yystrm := strm; T.KW_false ) +fun yyAction10 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; T.INT(valOf(IntInf.fromString yytext)) + end +fun yyAction11 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; float yytext + end +fun yyAction12 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; float yytext + end +fun yyAction13 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; float yytext + end +fun yyAction14 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN S; continue() ) +fun yyAction15 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\\"; continue() ) +fun yyAction16 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\""; continue() ) +fun yyAction17 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "/"; continue() ) +fun yyAction18 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\b"; continue() ) +fun yyAction19 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\f"; continue() ) +fun yyAction20 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\n"; continue() ) +fun yyAction21 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\r"; continue() ) +fun yyAction22 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\t"; continue() ) +fun yyAction23 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addUChr yytext; continue() + end +fun yyAction24 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; continue() + end +fun yyAction25 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN INITIAL; finishString() ) +fun yyAction26 (strm, lastMatch : yymatch) = (yystrm := strm; skip() ) +fun yyAction27 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; + T.ERROR["bad character '", String.toString yytext, "'"] + end +fun yyQ33 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ32 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction1(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction1(strm, yyNO_MATCH) + (* end case *)) +fun yyQ36 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction8(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction8(strm, yyNO_MATCH) + (* end case *)) +fun yyQ35 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx65 + then yyQ36(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ34 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx75 + then yyQ35(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ31 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction27(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx72 + then yyQ34(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) + else yyAction27(strm, yyNO_MATCH) + (* end case *)) +fun yyQ39 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction7(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction7(strm, yyNO_MATCH) + (* end case *)) +fun yyQ38 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx6C + then yyQ39(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ37 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx6C + then yyQ38(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ30 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction27(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx75 + then yyQ37(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) + else yyAction27(strm, yyNO_MATCH) + (* end case *)) +fun yyQ43 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction9(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction9(strm, yyNO_MATCH) + (* end case *)) +fun yyQ42 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx65 + then yyQ43(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ41 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx73 + then yyQ42(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ40 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx6C + then yyQ41(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ29 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction27(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx61 + then yyQ40(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) + else yyAction27(strm, yyNO_MATCH) + (* end case *)) +fun yyQ28 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction4(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction4(strm, yyNO_MATCH) + (* end case *)) +fun yyQ27 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction3(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction3(strm, yyNO_MATCH) + (* end case *)) +fun yyQ26 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction6(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction6(strm, yyNO_MATCH) + (* end case *)) +fun yyQ48 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction12(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ48(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else if inp < 0wx30 + then yyAction12(strm, yyNO_MATCH) + else if inp <= 0wx39 + then yyQ48(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else yyAction12(strm, yyNO_MATCH) + (* end case *)) +fun yyQ47 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ48(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ48(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ46 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2D + then yyQ47(strm', lastMatch) + else if inp < 0wx2D + then if inp = 0wx2B + then yyQ47(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx30 + then yyQ48(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ48(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ52 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction13(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ52(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else if inp < 0wx30 + then yyAction13(strm, yyNO_MATCH) + else if inp <= 0wx39 + then yyQ52(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + (* end case *)) +fun yyQ51 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ52(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ52(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ50 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2D + then yyQ51(strm', lastMatch) + else if inp < 0wx2D + then if inp = 0wx2B + then yyQ51(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx30 + then yyQ52(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ52(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ49 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction11(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx45 + then yyQ50(strm', yyMATCH(strm, yyAction11, yyNO_MATCH)) + else if inp < 0wx45 + then if inp = 0wx30 + then yyQ49(strm', yyMATCH(strm, yyAction11, yyNO_MATCH)) + else if inp < 0wx30 + then yyAction11(strm, yyNO_MATCH) + else if inp <= 0wx39 + then yyQ49(strm', yyMATCH(strm, yyAction11, yyNO_MATCH)) + else yyAction11(strm, yyNO_MATCH) + else if inp = 0wx65 + then yyQ50(strm', yyMATCH(strm, yyAction11, yyNO_MATCH)) + else yyAction11(strm, yyNO_MATCH) + (* end case *)) +fun yyQ44 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ49(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ49(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ45 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction10(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyAction10(strm, yyNO_MATCH) + else if inp < 0wx3A + then if inp = 0wx2F + then yyAction10(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp = 0wx2E + then yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else if inp = 0wx46 + then yyAction10(strm, yyNO_MATCH) + else if inp < 0wx46 + then if inp = 0wx45 + then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + else if inp = 0wx65 + then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + (* end case *)) +fun yyQ25 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction10(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyAction10(strm, yyNO_MATCH) + else if inp < 0wx3A + then if inp = 0wx2F + then yyAction10(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp = 0wx2E + then yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else if inp = 0wx46 + then yyAction10(strm, yyNO_MATCH) + else if inp < 0wx46 + then if inp = 0wx45 + then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + else if inp = 0wx65 + then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + (* end case *)) +fun yyQ24 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction10(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx45 + then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else if inp < 0wx45 + then if inp = 0wx2E + then yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + else if inp = 0wx65 + then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + (* end case *)) +fun yyQ57 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2A + then yyQ57(strm', lastMatch) + else yyQ56(strm', lastMatch) + (* end case *)) +and yyQ56 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2A + then yyQ57(strm', lastMatch) + else yyQ56(strm', lastMatch) + (* end case *)) +fun yyQ55 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction26(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx2A + then yyQ57(strm', yyMATCH(strm, yyAction26, yyNO_MATCH)) + else yyQ56(strm', yyMATCH(strm, yyAction26, yyNO_MATCH)) + (* end case *)) +fun yyQ53 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2A + then yyQ54(strm', lastMatch) + else yyQ53(strm', lastMatch) + (* end case *)) +and yyQ54 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2B + then yyQ53(strm', lastMatch) + else if inp < 0wx2B + then if inp = 0wx2A + then yyQ54(strm', lastMatch) + else yyQ53(strm', lastMatch) + else if inp = 0wx2F + then yyQ55(strm', lastMatch) + else yyQ53(strm', lastMatch) + (* end case *)) +fun yyQ23 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction27(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx2A + then yyQ53(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) + else yyAction27(strm, yyNO_MATCH) + (* end case *)) +fun yyQ59 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction10(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyAction10(strm, yyNO_MATCH) + else if inp < 0wx3A + then if inp = 0wx2F + then yyAction10(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp = 0wx2E + then yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else if inp = 0wx46 + then yyAction10(strm, yyNO_MATCH) + else if inp < 0wx46 + then if inp = 0wx45 + then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + else if inp = 0wx65 + then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + (* end case *)) +fun yyQ58 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction10(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx45 + then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else if inp < 0wx45 + then if inp = 0wx2E + then yyQ44(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + else if inp = 0wx65 + then yyQ46(strm', yyMATCH(strm, yyAction10, yyNO_MATCH)) + else yyAction10(strm, yyNO_MATCH) + (* end case *)) +fun yyQ22 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction27(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx31 + then yyQ59(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) + else if inp < 0wx31 + then if inp = 0wx30 + then yyQ58(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) + else yyAction27(strm, yyNO_MATCH) + else if inp <= 0wx39 + then yyQ59(strm', yyMATCH(strm, yyAction27, yyNO_MATCH)) + else yyAction27(strm, yyNO_MATCH) + (* end case *)) +fun yyQ21 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction5(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction5(strm, yyNO_MATCH) + (* end case *)) +fun yyQ20 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction14(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction14(strm, yyNO_MATCH) + (* end case *)) +fun yyQ60 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction0(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxD + then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < 0wxD + then if inp = 0wx9 + then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < 0wx9 + then yyAction0(strm, yyNO_MATCH) + else if inp <= 0wxA + then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + else if inp = 0wx20 + then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + (* end case *)) +fun yyQ19 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction0(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxD + then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < 0wxD + then if inp = 0wx9 + then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < 0wx9 + then yyAction0(strm, yyNO_MATCH) + else if inp <= 0wxA + then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + else if inp = 0wx20 + then yyQ60(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + (* end case *)) +fun yyQ18 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction27(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction27(strm, yyNO_MATCH) + (* end case *)) +fun yyQ1 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3A + then yyQ26(strm', lastMatch) + else if inp < 0wx3A + then if inp = 0wx22 + then yyQ20(strm', lastMatch) + else if inp < 0wx22 + then if inp = 0wxD + then yyQ19(strm', lastMatch) + else if inp < 0wxD + then if inp = 0wx9 + then yyQ19(strm', lastMatch) + else if inp < 0wx9 + then yyQ18(strm', lastMatch) + else if inp <= 0wxA + then yyQ19(strm', lastMatch) + else yyQ18(strm', lastMatch) + else if inp = 0wx20 + then yyQ19(strm', lastMatch) + else yyQ18(strm', lastMatch) + else if inp = 0wx2E + then yyQ18(strm', lastMatch) + else if inp < 0wx2E + then if inp = 0wx2C + then yyQ21(strm', lastMatch) + else if inp = 0wx2D + then yyQ22(strm', lastMatch) + else yyQ18(strm', lastMatch) + else if inp = 0wx30 + then yyQ24(strm', lastMatch) + else if inp = 0wx2F + then yyQ23(strm', lastMatch) + else yyQ25(strm', lastMatch) + else if inp = 0wx6E + then yyQ30(strm', lastMatch) + else if inp < 0wx6E + then if inp = 0wx5D + then yyQ28(strm', lastMatch) + else if inp < 0wx5D + then if inp = 0wx5B + then yyQ27(strm', lastMatch) + else yyQ18(strm', lastMatch) + else if inp = 0wx66 + then yyQ29(strm', lastMatch) + else yyQ18(strm', lastMatch) + else if inp = 0wx7B + then yyQ32(strm', lastMatch) + else if inp < 0wx7B + then if inp = 0wx74 + then yyQ31(strm', lastMatch) + else yyQ18(strm', lastMatch) + else if inp = 0wx7D + then yyQ33(strm', lastMatch) + else yyQ18(strm', lastMatch) + (* end case *)) +fun yyQ17 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction23(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction23(strm, yyNO_MATCH) + (* end case *)) +fun yyQ16 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ17(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ17(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ17(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ17(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ17(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ17(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ15 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ16(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ16(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ16(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ16(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ16(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ16(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ14 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ15(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ15(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ15(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ15(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ15(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ15(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ13 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ14(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ14(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ14(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ14(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ14(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ14(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ12 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction22(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction22(strm, yyNO_MATCH) + (* end case *)) +fun yyQ11 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction21(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction21(strm, yyNO_MATCH) + (* end case *)) +fun yyQ10 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction20(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction20(strm, yyNO_MATCH) + (* end case *)) +fun yyQ9 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction19(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction19(strm, yyNO_MATCH) + (* end case *)) +fun yyQ8 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction18(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction18(strm, yyNO_MATCH) + (* end case *)) +fun yyQ7 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction15(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction15(strm, yyNO_MATCH) + (* end case *)) +fun yyQ6 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ5 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction16(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction16(strm, yyNO_MATCH) + (* end case *)) +fun yyQ4 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx66 + then yyQ9(strm', lastMatch) + else if inp < 0wx66 + then if inp = 0wx30 + then yystuck(lastMatch) + else if inp < 0wx30 + then if inp = 0wx23 + then yystuck(lastMatch) + else if inp < 0wx23 + then if inp = 0wx22 + then yyQ5(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx2F + then yyQ6(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx5D + then yystuck(lastMatch) + else if inp < 0wx5D + then if inp = 0wx5C + then yyQ7(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx62 + then yyQ8(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx73 + then yystuck(lastMatch) + else if inp < 0wx73 + then if inp = 0wx6F + then yystuck(lastMatch) + else if inp < 0wx6F + then if inp = 0wx6E + then yyQ10(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx72 + then yyQ11(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx75 + then yyQ13(strm', lastMatch) + else if inp = 0wx74 + then yyQ12(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ3 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction25(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction25(strm, yyNO_MATCH) + (* end case *)) +fun yyQ2 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction24(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx23 + then yyQ2(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp < 0wx23 + then if inp = 0wx22 + then yyAction24(strm, yyNO_MATCH) + else yyQ2(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + else if inp = 0wx5C + then yyAction24(strm, yyNO_MATCH) + else yyQ2(strm', yyMATCH(strm, yyAction24, yyNO_MATCH)) + (* end case *)) +fun yyQ0 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx23 + then yyQ2(strm', lastMatch) + else if inp < 0wx23 + then if inp = 0wx22 + then yyQ3(strm', lastMatch) + else yyQ2(strm', lastMatch) + else if inp = 0wx5C + then yyQ4(strm', lastMatch) + else yyQ2(strm', lastMatch) + (* end case *)) +in + (case (!(yyss)) + of S => yyQ0(!(yystrm), yyNO_MATCH) + | INITIAL => yyQ1(!(yystrm), yyNO_MATCH) + (* end case *)) +end +end + and skip() = (yystartPos := yygetPos(); + yylastwasnref := ULexBuffer.lastWasNL (!yystrm); + continue()) + in (continue(), (!yystartPos, yygetPos()), !yystrm, !yyss) end + in + lex() + end + in + type pos = AntlrStreamPos.pos + type span = AntlrStreamPos.span + type tok = UserDeclarations.lex_result + + datatype prestrm = STRM of ULexBuffer.stream * + (yystart_state * tok * span * prestrm * yystart_state) option ref + type strm = (prestrm * yystart_state) + + fun lex sm +(STRM (yystrm, memo), ss) = (case !memo + of NONE => let + val (tok, span, yystrm', ss') = innerLex +(yystrm, ss, sm) + val strm' = STRM (yystrm', ref NONE); + in + memo := SOME (ss, tok, span, strm', ss'); + (tok, span, (strm', ss')) + end + | SOME (ss', tok, span, strm', ss'') => + if ss = ss' then + (tok, span, (strm', ss'')) + else ( + memo := NONE; + lex sm +(STRM (yystrm, memo), ss)) + (* end case *)) + + fun streamify input = (STRM (yystreamify' 0 input, ref NONE), INITIAL) + fun streamifyReader readFn strm = (STRM (yystreamifyReader' 0 readFn strm, ref NONE), + INITIAL) + fun streamifyInstream strm = (STRM (yystreamifyInstream' 0 strm, ref NONE), + INITIAL) + + fun getPos (STRM (strm, _), _) = ULexBuffer.getpos strm + + end +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,38 @@ +(* json-lib.cm + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +Library + +(* DOM-style API (tree based) *) + structure JSON + structure JSONParser + structure JSONPrinter + structure JSONUtil + +(* SAX-style API (event based) *) + structure JSONStreamParser + structure JSONStreamPrinter + +is + + $/basis.cm + $/smlnj-lib.cm + $/ml-lpt-lib.cm + +#if defined(NO_PLUGINS) + json.lex.sml +#else + json.lex : ml-ulex +#endif + + json.sml + json-parser.sml + json-printer.sml + json-source.sml + json-stream-parser.sml + json-stream-printer.sml + json-tokens.sml + json-util.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,369 @@ + +ann + "nonexhaustiveBind ignore" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" +in + +local + basis l33 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb + end + basis l75 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end + basis l44 = + bas + (* $/ml-lpt-lib.cm ====> *) $(SML_LIB)/mllpt-lib/mllpt-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + open l33 + in + structure gs_0 = Char + structure gs_1 = CharArray + structure gs_2 = CharVector + structure gs_3 = FixedInt + structure gs_4 = General + structure gs_5 = Int + structure gs_6 = Int32 + structure gs_7 = Int64 + structure gs_8 = IntInf + structure gs_9 = LargeInt + structure gs_10 = LargeReal + structure gs_11 = LargeWord + structure gs_12 = OS + structure gs_13 = Position + structure gs_14 = Real + structure gs_15 = Real64 + structure gs_16 = RealArray + structure gs_17 = RealArraySlice + structure gs_18 = RealVector + structure gs_19 = RealVectorSlice + structure gs_20 = SMLofNJ + structure gs_21 = Socket + structure gs_22 = String + structure gs_23 = Substring + structure gs_24 = SysWord + structure gs_25 = Time + structure gs_26 = Word + structure gs_27 = Word32 + structure gs_28 = Word64 + structure gs_29 = Word8 + end + local + open l33 + in + structure gs_30 = TextIO + end + local + open l33 + in + structure gs_31 = List + end + local + open l44 + in + structure gs_32 = UTF8 + end + local + structure Char = gs_0 + structure CharArray = gs_1 + structure CharVector = gs_2 + structure FixedInt = gs_3 + structure General = gs_4 + structure Int = gs_5 + structure Int32 = gs_6 + structure Int64 = gs_7 + structure IntInf = gs_8 + structure LargeInt = gs_9 + structure LargeReal = gs_10 + structure LargeWord = gs_11 + structure List = gs_31 + structure OS = gs_12 + structure Position = gs_13 + structure Real = gs_14 + structure Real64 = gs_15 + structure RealArray = gs_16 + structure RealArraySlice = gs_17 + structure RealVector = gs_18 + structure RealVectorSlice = gs_19 + structure SMLofNJ = gs_20 + structure Socket = gs_21 + structure String = gs_22 + structure Substring = gs_23 + structure SysWord = gs_24 + structure Time = gs_25 + structure UTF8 = gs_32 + structure Word = gs_26 + structure Word32 = gs_27 + structure Word64 = gs_28 + structure Word8 = gs_29 + json-tokens.sml + in + structure gs_33 = JSONTokens + end + local + open l33 + in + structure gs_34 = Vector + end + local + open l44 + in + structure gs_35 = AntlrStreamPos + end + local + open l33 + in + structure gs_36 = StringCvt + end + local + open l44 + in + structure gs_37 = ULexBuffer + end + local + structure AntlrStreamPos = gs_35 + structure Char = gs_0 + structure CharArray = gs_1 + structure CharVector = gs_2 + structure FixedInt = gs_3 + structure General = gs_4 + structure Int = gs_5 + structure Int32 = gs_6 + structure Int64 = gs_7 + structure IntInf = gs_8 + structure JSONTokens = gs_33 + structure LargeInt = gs_9 + structure LargeReal = gs_10 + structure LargeWord = gs_11 + structure List = gs_31 + structure OS = gs_12 + structure Position = gs_13 + structure Real = gs_14 + structure Real64 = gs_15 + structure RealArray = gs_16 + structure RealArraySlice = gs_17 + structure RealVector = gs_18 + structure RealVectorSlice = gs_19 + structure SMLofNJ = gs_20 + structure Socket = gs_21 + structure String = gs_22 + structure StringCvt = gs_36 + structure Substring = gs_23 + structure SysWord = gs_24 + structure TextIO = gs_30 + structure Time = gs_25 + structure ULexBuffer = gs_37 + structure UTF8 = gs_32 + structure Vector = gs_34 + structure Word = gs_26 + structure Word32 = gs_27 + structure Word64 = gs_28 + structure Word8 = gs_29 + json.lex.sml + in + structure gs_38 = JSONLexer + end + local + structure AntlrStreamPos = gs_35 + structure JSONLexer = gs_38 + structure JSONTokens = gs_33 + structure TextIO = gs_30 + json-source.sml + in + structure gs_39 = JSONSource + end + local + structure Char = gs_0 + structure CharArray = gs_1 + structure CharVector = gs_2 + structure FixedInt = gs_3 + structure General = gs_4 + structure Int = gs_5 + structure Int32 = gs_6 + structure Int64 = gs_7 + structure IntInf = gs_8 + structure JSONLexer = gs_38 + structure JSONSource = gs_39 + structure JSONTokens = gs_33 + structure LargeInt = gs_9 + structure LargeReal = gs_10 + structure LargeWord = gs_11 + structure OS = gs_12 + structure Position = gs_13 + structure Real = gs_14 + structure Real64 = gs_15 + structure RealArray = gs_16 + structure RealArraySlice = gs_17 + structure RealVector = gs_18 + structure RealVectorSlice = gs_19 + structure SMLofNJ = gs_20 + structure Socket = gs_21 + structure String = gs_22 + structure Substring = gs_23 + structure SysWord = gs_24 + structure TextIO = gs_30 + structure Time = gs_25 + structure Word = gs_26 + structure Word32 = gs_27 + structure Word64 = gs_28 + structure Word8 = gs_29 + json-stream-parser.sml + in + structure gs_40 = JSONStreamParser + end + local + open l75 + in + structure gs_41 = Format + end + local + structure Char = gs_0 + structure CharArray = gs_1 + structure CharVector = gs_2 + structure FixedInt = gs_3 + structure Format = gs_41 + structure General = gs_4 + structure Int = gs_5 + structure Int32 = gs_6 + structure Int64 = gs_7 + structure IntInf = gs_8 + structure LargeInt = gs_9 + structure LargeReal = gs_10 + structure LargeWord = gs_11 + structure List = gs_31 + structure OS = gs_12 + structure Position = gs_13 + structure Real = gs_14 + structure Real64 = gs_15 + structure RealArray = gs_16 + structure RealArraySlice = gs_17 + structure RealVector = gs_18 + structure RealVectorSlice = gs_19 + structure SMLofNJ = gs_20 + structure Socket = gs_21 + structure String = gs_22 + structure Substring = gs_23 + structure SysWord = gs_24 + structure TextIO = gs_30 + structure Time = gs_25 + structure UTF8 = gs_32 + structure Word = gs_26 + structure Word32 = gs_27 + structure Word64 = gs_28 + structure Word8 = gs_29 + json-stream-printer.sml + in + structure gs_42 = JSONStreamPrinter + end + local + structure Char = gs_0 + structure CharArray = gs_1 + structure CharVector = gs_2 + structure FixedInt = gs_3 + structure General = gs_4 + structure Int = gs_5 + structure Int32 = gs_6 + structure Int64 = gs_7 + structure IntInf = gs_8 + structure LargeInt = gs_9 + structure LargeReal = gs_10 + structure LargeWord = gs_11 + structure OS = gs_12 + structure Position = gs_13 + structure Real = gs_14 + structure Real64 = gs_15 + structure RealArray = gs_16 + structure RealArraySlice = gs_17 + structure RealVector = gs_18 + structure RealVectorSlice = gs_19 + structure SMLofNJ = gs_20 + structure Socket = gs_21 + structure String = gs_22 + structure Substring = gs_23 + structure SysWord = gs_24 + structure Time = gs_25 + structure Word = gs_26 + structure Word32 = gs_27 + structure Word64 = gs_28 + structure Word8 = gs_29 + json.sml + in + structure gs_43 = JSON + end + local + structure Char = gs_0 + structure CharArray = gs_1 + structure CharVector = gs_2 + structure FixedInt = gs_3 + structure General = gs_4 + structure Int = gs_5 + structure Int32 = gs_6 + structure Int64 = gs_7 + structure IntInf = gs_8 + structure JSON = gs_43 + structure LargeInt = gs_9 + structure LargeReal = gs_10 + structure LargeWord = gs_11 + structure List = gs_31 + structure OS = gs_12 + structure Position = gs_13 + structure Real = gs_14 + structure Real64 = gs_15 + structure RealArray = gs_16 + structure RealArraySlice = gs_17 + structure RealVector = gs_18 + structure RealVectorSlice = gs_19 + structure SMLofNJ = gs_20 + structure Socket = gs_21 + structure String = gs_22 + structure Substring = gs_23 + structure SysWord = gs_24 + structure Time = gs_25 + structure Vector = gs_34 + structure Word = gs_26 + structure Word32 = gs_27 + structure Word64 = gs_28 + structure Word8 = gs_29 + json-util.sml + in + structure gs_44 = JSONUtil + end + local + structure JSON = gs_43 + structure JSONLexer = gs_38 + structure JSONSource = gs_39 + structure JSONTokens = gs_33 + structure List = gs_31 + structure TextIO = gs_30 + json-parser.sml + in + structure gs_45 = JSONParser + end + local + structure JSON = gs_43 + structure JSONStreamPrinter = gs_42 + structure List = gs_31 + structure TextIO = gs_30 + json-printer.sml + in + structure gs_46 = JSONPrinter + end +in + structure JSON = gs_43 + structure JSONParser = gs_45 + structure JSONPrinter = gs_46 + structure JSONStreamParser = gs_40 + structure JSONStreamPrinter = gs_42 + structure JSONUtil = gs_44 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-parser.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-parser.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-parser.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-parser.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,116 @@ +(* json-parser.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure JSONParser :> sig + + (* abstract type of JSON input *) + type source = JSONSource.source + + (* open a text input stream as a source *) + val openStream : TextIO.instream -> source + + (* open a text file as a source *) + val openFile : string -> source + + (* open a string as a source *) + val openString : string -> source + + (* close a source *) + val close : source -> unit + + val parse : source -> JSON.value + + val parseFile : string -> JSON.value + + end = struct + + structure Lex = JSONLexer + structure T = JSONTokens + structure J = JSON + + datatype source = datatype JSONSource.source + + val openStream = JSONSource.openStream + val openFile = JSONSource.openFile + val openString = JSONSource.openString + val close = JSONSource.close + + fun parse (Src{closed = ref true, ...}) = raise Fail "closed JSON source" + | parse (src as Src{srcMap, strm, ...}) = let + val errorMsg = JSONSource.errorMsg src + fun error arg = raise Fail(errorMsg arg) + val lexer = Lex.lex srcMap + fun parseValue (strm : Lex.strm) = let + val (tok, span, strm) = lexer strm + in + case tok + of T.LB => parseArray strm + | T.LCB => parseObject strm + | T.KW_null => (strm, J.NULL) + | T.KW_true => (strm, J.BOOL true) + | T.KW_false => (strm, J.BOOL false) + | T.INT n => (strm, J.INT n) + | T.FLOAT f => (strm, J.FLOAT f) + | T.STRING s => (strm, J.STRING s) + | _ => error (span, "parsing value", tok) + (* end case *) + end + and parseArray (strm : Lex.strm) = (case lexer strm + of (T.RB, _, strm) => (strm, J.ARRAY[]) + | _ => let + fun loop (strm, items) = let + val (strm, v) = parseValue strm + (* expect either a "," or a "]" *) + val (tok, span, strm) = lexer strm + in + case tok + of T.RB => (strm, v::items) + | T.COMMA => loop (strm, v::items) + | _ => error (span, "parsing array", tok) + (* end case *) + end + val (strm, items) = loop (strm, []) + in + (strm, J.ARRAY(List.rev items)) + end + (* end case *)) + and parseObject (strm : Lex.strm) = let + fun parseField ((T.STRING s, _, strm), flds) = (case lexer strm + of (T.COLON, _, strm) => let + val (strm, v) = parseValue strm + in + parseFields (strm, (s, v)::flds) + end + | (tok, span, _) => error (span, "parsing field", tok) + (* end case *)) + | parseField ((tok, span, _), _) = error (span, "parsing field", tok) + and parseFields (strm, flds) = (case lexer strm + of (T.RCB, span, strm) => (strm, J.OBJECT(List.rev flds)) + | (T.COMMA, span, strm) => parseField (lexer strm, flds) + | (tok, span, _) => error (span, "parsing object", tok) + (* end case *)) + in + case lexer strm + of (T.RCB, span, strm) => (strm, J.OBJECT[]) + | tokEtc => parseField (tokEtc, []) + (* end case *) + end + val (inStrm, value) = parseValue (!strm) + in + strm := inStrm; + value + end + + fun parseFile fileName = let + val inStrm = openFile fileName + val v = parse inStrm + handle ex => (close inStrm; raise ex) + in + close inStrm; + v + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-printer.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-printer.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-printer.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-printer.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,44 @@ +(* json-printer.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A printer for JSON values. + *) + +structure JSONPrinter : sig + + val print : TextIO.outstream * JSON.value -> unit + val print' : {strm : TextIO.outstream, pretty : bool} -> JSON.value -> unit + + end = struct + + structure J = JSON + structure JSP = JSONStreamPrinter + + fun printWith printer = let + fun pr (J.OBJECT fields) = let + fun prField (key, v) = (JSP.objectKey(printer, key); pr v) + in + JSP.beginObject printer; + List.app prField fields; + JSP.endObject printer + end + | pr (J.ARRAY vs) = ( + JSP.beginArray printer; + List.app pr vs; + JSP.endArray printer) + | pr J.NULL = JSP.null printer + | pr (J.BOOL b) = JSP.boolean (printer, b) + | pr (J.INT n) = JSP.integer (printer, n) + | pr (J.FLOAT f) = JSP.float (printer, f) + | pr (J.STRING s) = JSP.string (printer, s) + in + fn v => (pr v; JSP.close printer) + end + + fun print (strm, v) = printWith (JSP.new strm) v + + fun print' {strm, pretty} = printWith (JSP.new' {strm=strm, pretty=pretty}) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,22 @@ +(* json.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This is the tree representation of a JSON data as produced/consumed + * by the tree parser. + *) + +structure JSON = + struct + + datatype value + = OBJECT of (string * value) list + | ARRAY of value list + | NULL + | BOOL of bool + | INT of IntInf.int + | FLOAT of real + | STRING of string (* note that string is assumed to be UTF-8 *) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-source.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-source.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-source.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-source.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,93 @@ +(* json-source.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * JSON input sources. Note that this module is internal the the library. + *) + +structure JSONSource : sig + + datatype source = Src of { + srcMap : AntlrStreamPos.sourcemap, + strm : JSONLexer.strm ref, + closeFn : unit -> unit, + closed : bool ref + } + + (* open a text input stream as a source *) + val openStream : TextIO.instream -> source + + (* open a text file as a source *) + val openFile : string -> source + + (* open a string as a source *) + val openString : string -> source + + (* close a source *) + val close : source -> unit + + val errorMsg : source -> AntlrStreamPos.span * string * JSONTokens.token -> string + + end = struct + + structure Lex = JSONLexer + structure T = JSONTokens + + datatype source = Src of { + srcMap : AntlrStreamPos.sourcemap, + strm : Lex.strm ref, + closeFn : unit -> unit, + closed : bool ref + } + + fun openStream inS = let + val closed = ref false + in + Src{ + srcMap = AntlrStreamPos.mkSourcemap (), + strm = ref(Lex.streamifyInstream inS), + closeFn = fn () => (), + closed = closed + } + end + + fun openFile file = let + val closed = ref false + val inStrm = TextIO.openIn file + in + Src{ + srcMap = AntlrStreamPos.mkSourcemap (), + strm = ref(Lex.streamifyInstream inStrm), + closeFn = fn () => TextIO.closeIn inStrm, + closed = closed + } + end + + fun openString s = let + val closed = ref false + val data = ref s + fun input () = (!data before data := "") + in + Src{ + srcMap = AntlrStreamPos.mkSourcemap (), + strm = ref(Lex.streamify input), + closeFn = fn () => (), + closed = closed + } + end + + fun close (Src{closed = ref true, ...}) = () + | close (Src{closed, closeFn, ...}) = ( + closed := true; + closeFn()) + + fun errorMsg (Src{srcMap, ...}) (span, _, T.ERROR msg) = concat( + "error " :: AntlrStreamPos.spanToString srcMap span :: ": " :: + msg) + | errorMsg (Src{srcMap, ...}) (span, msg, tok) = concat[ + "error ", AntlrStreamPos.spanToString srcMap span, ": ", + msg, ", found '", T.toString tok, "'" + ] + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-stream-parser.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-stream-parser.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-stream-parser.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-stream-parser.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,165 @@ +(* json-stream-parser.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * TODO: use the same "source" abstraction supported by the `JSONParser` + * structure. + *) + +structure JSONStreamParser :> sig + + (* abstract type of JSON input *) + type source = JSONSource.source + + (* open a text input stream as a source *) + val openStream : TextIO.instream -> source + + (* open a text file as a source *) + val openFile : string -> source + + (* open a string as a source *) + val openString : string -> source + + (* close a source *) + val close : source -> unit + + (* callback functions for the different parsing events *) + type 'ctx callbacks = { + null : 'ctx -> 'ctx, + boolean : 'ctx * bool -> 'ctx, + integer : 'ctx * IntInf.int -> 'ctx, + float : 'ctx * real -> 'ctx, + string : 'ctx * string -> 'ctx, + startObject : 'ctx -> 'ctx, + objectKey : 'ctx * string -> 'ctx, + endObject : 'ctx -> 'ctx, + startArray : 'ctx -> 'ctx, + endArray : 'ctx -> 'ctx, + error : 'ctx * string -> unit + } + + val parse : 'ctx callbacks -> (source * 'ctx) -> 'ctx + + val parseFile : 'ctx callbacks -> (string * 'ctx) -> 'ctx + + end = struct + + structure Lex = JSONLexer + structure T = JSONTokens + + datatype source = datatype JSONSource.source + + val openStream = JSONSource.openStream + val openFile = JSONSource.openFile + val openString = JSONSource.openString + val close = JSONSource.close + + (* callback functions for the different parsing events *) + type 'ctx callbacks = { + null : 'ctx -> 'ctx, + boolean : 'ctx * bool -> 'ctx, + integer : 'ctx * IntInf.int -> 'ctx, + float : 'ctx * real -> 'ctx, + string : 'ctx * string -> 'ctx, + startObject : 'ctx -> 'ctx, + objectKey : 'ctx * string -> 'ctx, + endObject : 'ctx -> 'ctx, + startArray : 'ctx -> 'ctx, + endArray : 'ctx -> 'ctx, + error : 'ctx * string -> unit + } + + fun error (cb : 'a callbacks, ctx, msg) = ( + #error cb (ctx, msg); + raise Fail "error") + + fun parse (cb : 'a callbacks) (src as Src{srcMap, strm, ...}, ctx) = let + val lexer = Lex.lex srcMap + val errorMsg = JSONSource.errorMsg src + fun err (ctx, span, msg, tok) = error (cb, ctx, errorMsg (span, msg, tok)) + fun parseValue (strm : Lex.strm, ctx) = let + val (tok, span, strm) = lexer strm + in + case tok + of T.LB => parseArray (strm, ctx) + | T.LCB => parseObject (strm, ctx) + | T.KW_null => (strm, #null cb ctx) + | T.KW_true => (strm, #boolean cb (ctx, true)) + | T.KW_false => (strm, #boolean cb (ctx, false)) + | T.INT n => (strm, #integer cb (ctx, n)) + | T.FLOAT f => (strm, #float cb (ctx, f)) + | T.STRING s => (strm, #string cb (ctx, s)) + | _ => err (ctx, span, "error parsing value", tok) + (* end case *) + end + and parseArray (strm : Lex.strm, ctx) = (case lexer strm + of (T.RB, _, strm) => (strm, #endArray cb (#startArray cb ctx)) + | _ => let + fun loop (strm, ctx) = let + val (strm, ctx) = parseValue (strm, ctx) + (* expect either a "," or a "]" *) + val (tok, span, strm) = lexer strm + in + case tok + of T.RB => (strm, ctx) + | T.COMMA => loop (strm, ctx) + | _ => err (ctx, span, "error parsing array", tok) + (* end case *) + end + val ctx = #startArray cb ctx + val (strm, ctx) = loop (strm, #startArray cb ctx) + in + (strm, #endArray cb ctx) + end + (* end case *)) + and parseObject (strm : Lex.strm, ctx) = let + fun parseField (strm, ctx) = (case lexer strm + of (T.STRING s, span, strm) => let + val ctx = #objectKey cb (ctx, s) + in + case lexer strm + of (T.COLON, _, strm) => parseValue (strm, ctx) + | (tok, span, _) => + err (ctx, span, "error parsing field", tok) + (* end case *) + end + | _ => (strm, ctx) + (* end case *)) + fun loop (strm, ctx) = let + val (strm, ctx) = parseField (strm, ctx) + in + (* expect either "," or "}" *) + case lexer strm + of (T.RCB, span, strm) => (strm, ctx) + | (T.COMMA, span, strm) => loop (strm, ctx) + | (tok, span, _) => + err (ctx, span, "error parsing object", tok) + (* end case *) + end + val ctx = #startObject cb ctx + val (strm, ctx) = loop (strm, #startObject cb ctx) + in + (strm, #endObject cb ctx) + end + val (inStrm, cxt) = parseValue (!strm, ctx) + in + strm := inStrm; + ctx + end + + fun parseFile cb = let + val parse = parse cb + fun parser (fileName, ctx) = let + val inStrm = openFile fileName + val ctx = parse (inStrm, ctx) + handle ex => (close inStrm; raise ex) + in + close inStrm; + ctx + end + in + parser + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-stream-printer.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-stream-printer.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-stream-printer.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-stream-printer.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,187 @@ +(* json-stream-printer.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure JSONStreamPrinter : sig + + type printer + + val null : printer -> unit + val boolean : printer * bool -> unit + val integer : printer * IntInf.int -> unit + val float : printer * real -> unit + val string : printer * string -> unit + val beginObject : printer -> unit + val objectKey : printer * string -> unit + val endObject : printer -> unit + val beginArray : printer -> unit + val endArray : printer -> unit + + val new : TextIO.outstream -> printer + val new' : {strm : TextIO.outstream, pretty : bool} -> printer + val close : printer -> unit + + end = struct + + structure F = Format + + datatype printer = P of { + strm : TextIO.outstream, + indent : int ref, + ctx : context ref, + pretty : bool + } + + (* the context is used to keep track of the printing state for indentation + * and punctuation, etc. + *) + and context + = CLOSED (* closed printer *) + | TOP (* top-most context *) + | FIRST of context (* first element of object or array; the argument *) + (* must be one of OBJECT or ARRAY. *) + | OBJECT of context (* in an object (after the first element) *) + | ARRAY of context (* in an array (after the first element) *) + | KEY of context (* after the key of a object field *) + + fun new' {strm, pretty} = P{ + strm = strm, + indent = ref 0, + ctx = ref TOP, + pretty = pretty + } + + fun new strm = new' {strm = strm, pretty = false} + + fun close (P{ctx, strm, ...}) = (case !ctx + of CLOSED => () + | TOP => (TextIO.output(strm, "\n"); ctx := CLOSED) + | _ => raise Fail "premature close" + (* end case *)) + + fun pr (P{strm, ...}, s) = TextIO.output(strm, s) + + fun indent (P{pretty = false, ...}, _) = () + | indent (P{strm, indent, ...}, offset) = let + val tenSpaces = " " + fun prIndent n = if (n <= 10) + then TextIO.output(strm, String.extract(tenSpaces, 10-n, NONE)) + else (TextIO.output(strm, tenSpaces); prIndent(n-10)) + in + prIndent ((!indent+offset) * 2) + end + + fun incIndent (P{indent, ...}, n) = indent := !indent + n; + fun decIndent (P{indent, ...}, n) = indent := !indent - n; + + fun nl (P{pretty = false, ...}) = () + | nl (P{strm, ...}) = TextIO.output(strm, "\n") + + fun comma (P{strm, pretty = false, ...}) = TextIO.output(strm, ",") + | comma (p as P{strm, ...}) = ( + TextIO.output(strm, ",\n"); indent(p, 0)) + + fun optComma (p as P{ctx, pretty, ...}) = (case !ctx + of FIRST ctx' => (indent(p, 0); ctx := ctx') + | OBJECT _ => comma p + | ARRAY _ => comma p + | KEY ctx' => ( + pr (p, if pretty then " : " else ":"); + ctx := ctx') + | _ => () + (* end case *)) + + (* print a value, which may be proceeded by a comma if it is in a sequence *) + fun prVal (P{ctx = ref CLOSED, ...}, _) = raise Fail "closed printer" + | prVal (p, v) = (optComma p; pr(p, v)) + + fun null p = prVal (p, "null") + fun boolean (p, false) = prVal (p, "false") + | boolean (p, true) = prVal (p, "true") + fun integer (p, n) = prVal (p, F.format "%d" [F.LINT n]) + fun float (p, f) = prVal (p, F.format "%g" [F.REAL f]) + fun string (p, s) = let + fun getChar i = if (i < size s) then SOME(String.sub(s, i), i+1) else NONE + val getWChar = UTF8.getu getChar + fun tr (i, chrs) = (case getWChar i + of SOME(wchr, i) => if (wchr <= 0w126) + then let + val c = (case UTF8.toAscii wchr + of #"\"" => "\\\"" + | #"\\" => "\\\\" + | #"/" => "\\/" + | #"\b" => "\\b" + | #"\f" => "\\f" + | #"\n" => "\\n" + | #"\r" => "\\r" + | #"\t" => "\\t" + | c => if (wchr < 0w32) + then F.format "\\u%04x" [F.WORD wchr] + else str c + (* end case *)) + in + tr (i, c :: chrs) + end + else tr(i, F.format "\\u%04x" [F.WORD wchr] :: chrs) + | NONE => String.concat(List.rev chrs) + (* end case *)) + in + prVal (p, F.format "\"%s\"" [F.STR(tr (0, []))]) + end + + fun beginObject (p as P{ctx, ...}) = (case !ctx + of CLOSED => raise Fail "closed printer" + | _ => ( + optComma p; + pr (p, "{"); incIndent(p, 2); nl p; + ctx := FIRST(OBJECT(!ctx))) + (* end case *)) + + fun objectKey (p as P{ctx, ...}, field) = (case !ctx + of CLOSED => raise Fail "closed printer" + | KEY _ => raise Fail(concat[ + "objectKey \"", field, "\" where value was expected" + ]) + | _ => ( + string (p, field); + ctx := KEY(!ctx)) + (* end case *)) + + fun endObject (p as P{ctx, ...}) = let + fun prEnd ctx' = ( + ctx := ctx'; + indent(p, ~1); pr(p, "}"); decIndent (p, 2)) + in + case !ctx + of CLOSED => raise Fail "closed printer" + | OBJECT ctx' => (nl p; prEnd ctx') + | FIRST(OBJECT ctx') => prEnd ctx' + | KEY _ => raise Fail "expecting value after key" + | _ => raise Fail "endObject not in object context" + (* end case *) + end + + fun beginArray (p as P{ctx, ...}) = (case !ctx + of CLOSED => raise Fail "closed printer" + | _ => ( + optComma p; + pr (p, "["); incIndent(p, 2); nl p; + ctx := FIRST(ARRAY(!ctx))) + (* end case *)) + + fun endArray (p as P{ctx, ...}) = let + fun prEnd ctx' = ( + ctx := ctx'; + indent(p, ~1); pr(p, "]"); decIndent (p, 2)) + in + case !ctx + of CLOSED => raise Fail "closed printer" + | ARRAY ctx' => (nl p; prEnd ctx') + | FIRST(ARRAY ctx') => prEnd ctx' + | _ => raise Fail "endArray not in array context" + (* end case *) + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-tokens.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-tokens.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-tokens.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-tokens.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,49 @@ +(* json-tokens.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * The tokens returned by the JSON lexer. + *) + +structure JSONTokens = + struct + + datatype token + = EOF (* end-of-file *) + | LB | RB (* "[" "]" *) + | LCB | RCB (* "{" "}" *) + | COMMA (* "," *) + | COLON (* ":" *) + | KW_null (* "null" *) + | KW_true (* "true" *) + | KW_false (* "false" *) + | INT of IntInf.int + | FLOAT of real + | STRING of string + | ERROR of string list + + fun toString EOF = "" + | toString LB = "[" + | toString RB = "]" + | toString LCB = "{" + | toString RCB = "}" + | toString COMMA = "," + | toString COLON = ":" + | toString KW_null = "null" + | toString KW_true = "true" + | toString KW_false = "false" + | toString (INT i) = + if (i < 0) then "-" ^ IntInf.toString(~i) + else IntInf.toString i + | toString (FLOAT f) = + if (f < 0.0) then "-" ^ Real.toString(~f) + else Real.toString f + | toString (STRING s) = let + fun f (wchr, l) = UTF8.toString wchr :: l + in + String.concat("\"" :: (List.foldr f ["\""] (UTF8.explode s))) + end + | toString (ERROR msg) = "" (* default behavior should be overridden *) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-util.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-util.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/json-util.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/json-util.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,273 @@ +(* json-util.sml + * + * COPYRIGHT (c) 2017 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Utility functions for processing the JSON in-memory representation. + *) + +structure JSONUtil : sig + + (* exceptions for conversion functions *) + exception NotBool of JSON.value + exception NotInt of JSON.value + exception NotNumber of JSON.value + exception NotString of JSON.value + + (* exception that is raised when trying to process a non-object value as an object *) + exception NotObject of JSON.value + + (* exception that is raised when the given field is not found in an object *) + exception FieldNotFound of JSON.value * string + + (* exception that is raised when trying to process a non-array value as an array *) + exception NotArray of JSON.value + + (* exception that is raised when access to an array value is out of bounds *) + exception ArrayBounds of JSON.value * int + + (* map the above exceptions to a message string; we use General.exnMessage for other + * exceptions. + *) + val exnMessage : exn -> string + + (* conversion functions for atomic values. These raise the corresponding + * "NotXXX" exceptions when their argument has the wrong shape. Also note + * that asNumber will accept both integers and floats and asInt may raise + * Overflow if the number is too large. + *) + val asBool : JSON.value -> bool + val asInt : JSON.value -> Int.int + val asIntInf : JSON.value -> IntInf.int + val asNumber : JSON.value -> Real.real + val asString : JSON.value -> string + + (* find a field in an object; this function raises the NotObject exception when + * the supplied value is not an object. + *) + val findField : JSON.value -> string -> JSON.value option + + (* lookup a field in an object; this function raises the NotObject exception when + * the supplied value is not an object and raises FieldNotFound if the value is + * an object, but does not have the specified field. + *) + val lookupField : JSON.value -> string -> JSON.value + + (* convert a JSON array to an SML vector *) + val asArray : JSON.value -> JSON.value vector + + (* map a conversion function over a JSON array to produce a list; this function + * raises the NotArray exception if the second argument is not an array. + *) + val arrayMap : (JSON.value -> 'a) -> JSON.value -> 'a list + + (* path specification for indexing into JSON values *) + datatype edge + = SUB of int (* index into array component *) + | SEL of string (* select field of object *) + + type path = edge list + + (* `get (jv, path)` returns the component of `jv` named by `path`. It raises + * the NotObject, NotArray, and FieldNotFound exceptions if there is an inconsistency + * between the path and the structure of `jv`. + *) + val get : JSON.value * path -> JSON.value + + (* `replace (jv, path, v)` replaces the component of `jv` named by `path` + * with the value `v`. + *) + val replace : JSON.value * path * JSON.value -> JSON.value + + (* `insert (jv, path, lab, v)` inserts `lab : v` into the object named by `path` + * in `jv` + *) + val insert : JSON.value * path * string * JSON.value -> JSON.value + + (* `append (jv, path, vs)` appends the list of values `vs` onto the array named by `path` + * in `jv` + *) + val append : JSON.value * path * JSON.value list -> JSON.value + + end = struct + + structure J = JSON + + exception NotBool of J.value + exception NotInt of J.value + exception NotNumber of J.value + exception NotString of J.value + + exception NotObject of J.value + exception FieldNotFound of J.value * string + + exception NotArray of J.value + exception ArrayBounds of J.value * int + + (* conversion functions for atomic values *) + fun asBool (J.BOOL b) = b + | asBool v = raise NotBool v + + fun asInt (J.INT n) = Int.fromLarge n + | asInt v = raise NotInt v + + fun asIntInf (J.INT n) = n + | asIntInf v = raise NotInt v + + fun asNumber (J.INT n) = Real.fromLargeInt n + | asNumber (J.FLOAT f) = f + | asNumber v = raise NotNumber v + + fun asString (J.STRING s) = s + | asString v = raise NotString v + + fun findField (J.OBJECT fields) = let + fun find lab = (case List.find (fn (l, v) => (l = lab)) fields + of NONE => NONE + | SOME(_, v) => SOME v + (* end case *)) + in + find + end + | findField v = raise NotObject v + + fun lookupField (v as J.OBJECT fields) = let + fun find lab = (case List.find (fn (l, v) => (l = lab)) fields + of NONE => raise FieldNotFound(v, concat["no definition for field \"", lab, "\""]) + | SOME(_, v) => v + (* end case *)) + in + find + end + | lookupField v = raise NotObject v + + fun asArray (J.ARRAY vs) = Vector.fromList vs + | asArray v = raise NotArray v + + fun arrayMap f (J.ARRAY vs) = List.map f vs + | arrayMap f v = raise NotArray v + + (* map the above exceptions to a message string; we use General.exnMessage for other + * exceptions. + *) + fun exnMessage exn = let + fun v2s (J.ARRAY _) = "array" + | v2s (J.BOOL false) = "'false'" + | v2s (J.BOOL true) = "'true'" + | v2s (J.FLOAT _) = "number" + | v2s (J.INT _) = "number" + | v2s J.NULL = "'null'" + | v2s (J.OBJECT _) = "object" + | v2s (J.STRING _) = "string" + in + case exn + of NotBool v => String.concat[ + "expected boolean, but found ", v2s v + ] + | NotInt(J.FLOAT _) => "expected integer, but found floating-point number" + | NotInt v => String.concat[ + "expected integer, but found ", v2s v + ] + | NotNumber v => String.concat[ + "expected number, but found ", v2s v + ] + | NotString v => String.concat[ + "expected string, but found ", v2s v + ] + | NotObject v => String.concat[ + "expected object, but found ", v2s v + ] + | FieldNotFound(v, fld) => String.concat[ + "no definition for field \"", fld, "\" in object" + ] + | NotArray v => String.concat[ + "expected array, but found ", v2s v + ] + | _ => General.exnMessage exn + (* end case *) + end + + (* path specification for indexing into JSON values *) + datatype edge + = SEL of string (* select field of object *) + | SUB of int (* index into array component *) + + type path = edge list + + fun get (v, []) = v + | get (v as J.OBJECT fields, SEL lab :: rest) = + (case List.find (fn (l, v) => (l = lab)) fields + of NONE => raise raise FieldNotFound(v, concat["no definition for field \"", lab, "\""]) + | SOME(_, v) => get (v, rest) + (* end case *)) + | get (v, SEL _ :: _) = raise NotObject v + | get (J.ARRAY vs, SUB i :: rest) = get (List.nth(vs, i), rest) + | get (v, SUB _ :: _) = raise (NotArray v) + + (* top-down zipper to support functional editing *) + datatype zipper + = ZNIL + | ZOBJ of { + prefix : (string * J.value) list, + label : string, + child : zipper, + suffix : (string * J.value) list + } + | ZARR of { + prefix : J.value list, + child : zipper, + suffix : J.value list + } + + (* follow a path into a JSON value while constructing a zipper *) + fun unzip (v, []) = (ZNIL, v) + | unzip (v as J.OBJECT fields, SEL lab :: rest) = let + fun find (_, []) = raise FieldNotFound(v, concat["no definition for field \"", lab, "\""]) + | find (pre, (l, v)::flds) = if (l = lab) + then let + val (zipper, v) = unzip (v, rest) + in + (ZOBJ{prefix=pre, label=lab, suffix=flds, child=zipper}, v) + end + else find ((l, v)::pre, flds) + in + find ([], fields) + end + | unzip (v, SEL _ :: _) = raise NotObject v + | unzip (v as J.ARRAY vs, SUB i :: rest) = let + fun sub (_, [], _) = raise ArrayBounds(v, i) + | sub (prefix, v::vs, 0) = let + val (zipper, v) = unzip (v, rest) + in + (ZARR{prefix = prefix, child = zipper, suffix = vs}, v) + end + | sub (prefix, v::vs, i) = sub(v::prefix, vs, i-1) + in + sub ([], vs, i) + end + | unzip (v, SUB _ :: _) = raise NotArray v + + (* zip up a zipper *) + fun zip (zipper, v) = let + fun zip' ZNIL = v + | zip' (ZOBJ{prefix, label, suffix, child}) = + J.OBJECT(List.revAppend(prefix, (label, zip' child)::suffix)) + | zip' (ZARR{prefix, child, suffix}) = + J.ARRAY(List.revAppend(prefix, zip' child :: suffix)) + in + zip' zipper + end + + fun replace (jv, path, v) = zip (#1 (unzip (jv, path)), v) + + fun insert (jv, path, label, v) = (case unzip (jv, path) + of (zipper, J.OBJECT fields) => zip (zipper, J.OBJECT((label, v)::fields)) + | (_, v) => raise NotObject v + (* end case *)) + + fun append (jv, path, vs) = (case unzip (jv, path) + of (zipper, J.ARRAY jvs) => zip (zipper, J.ARRAY(jvs @ vs)) + | (_, v) => raise NotArray v + (* end case *)) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/JSON/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/JSON/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,15 @@ +This library supports the reading and writing of structured data using +the "JavaScript Object Notation" (JSON). This format is specified by +RFC 426 (http://tools.ietf.org/html/rfc4627). + +There are two levels of I/O supported. The "stream" level supports +event-based parsing (e.g., like a SAX parser for XML) and output at +the same level. Use this mode to extract small amounts of information +from large files or when you want to directly build your own representation +of the file. The "file" level supports a "DOM-style" approach that reads/writes +trees (see json.sml for the representation). + +TODO: + add support for UBJSON (http://ubjson.org) or possibly one of the + other binary JSON representations + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/LICENSE mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/LICENSE --- mlton-20130715/lib/smlnj-lib/smlnj-lib/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/LICENSE 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,20 @@ +STANDARD ML OF NEW JERSEY COPYRIGHT NOTICE, LICENSE AND DISCLAIMER. + +Copyright (c) 1989-2002 by Lucent Technologies + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both the copyright notice and this permission notice and warranty +disclaimer appear in supporting documentation, and that the name of +Lucent Technologies, Bell Labs or any Lucent entity not be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. + +Lucent disclaims all warranties with regard to this software, +including all implied warranties of merchantability and fitness. In no +event shall Lucent be liable for any special, indirect or +consequential damages or any damages whatsoever resulting from loss of +use, data or profits, whether in an action of contract, negligence or +other tortious action, arising out of or in connection with the use +or performance of this software. diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PORTING mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PORTING --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PORTING 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PORTING 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,174 @@ +Here is a brief description of the changes since the 0.3beta release of +the SML/NJ library in 1994. Modules are listed in alphabetical order. + +-------------------------------------------------------------------- +Summary +------- + - eliminate weak types in signatures. + + - name changes to track SML Basis conventions. + - change names, argument order of iteration combinators + - use MONO_XXX/XXX instead of XXX/POLY_XXX for signatures. + + - consolidate signatures + - e.g., use ORD_MAP for the Int*Map structures. + + - Name structure is renamed Atom. + - removed name_tbl type and operations and define free-standing + structures AtomBinaryMap, AtomBinarySet and AtomTable. + + - split Format structure into Format and Scan + + - moved Unix specific modules to Unix library (use unix-lib.cm + in sources file to access). + + - remove signatures and structures that are redundant with the + SML Basis Library. + +-------------------------------------------------------------------- +Detailed Changes +---------------- + +functor ArrayQSort (...) : ARRAY_SORT + ==> ArrayQSortFn (...) : MONO_ARRAY_SORT + +structure BigInt : BIGINT + ==> IntInf : INT_INF + The IntInf structure mostly matches that defined by SML'97. + +functor BinaryDict(...) : DICT + ==> BinaryMapFn(...) : ORD_MAP + +functor BinarySet(...) + ==> BinarySetFn(...) + +structure CType : CTYPE + Deleted. Use operations from Char structure in basis. + +signature DICT + ==> ORD_MAP + Also, various function names changed to track the SML'97 naming + conventions: + val find : ... + Deleted. + val peek : ... + ==> find : ... + val listItems : ... + ==> listItemsi : ... + val app : ... + ==> appi : ... + val revapp : ... + Deleted. + val map : ... + ==> mapi : ... + val fold : ... + ==> foldr + val revfold : ... + ==> foldl + val transform : ... + ==> map : ... + Also, the ORD_MAP interface provides the following new operations: + insert', listItems, collate, unionWith, unionWithi, intersectWith, + intersectWithi, app, foldl, foldr, filter, filteri, mapPartial, + and mapPartiali. + +structure Finalizer : FINALIZER + Deleted. No replacement as of yet. + +structure Format : FORMAT + The scanning functions were moved to a new module (Scan : SCAN). + Also, the fmt_item datatype has changed. + +functor HashTable (...) : HASH_TABLE + ==> HashTableFn (...) : MONO_HASH_TABLE + +structure IntMap : INTMAP + ==> IntBinaryMap : ORD_MAP + also IntListMap : ORD_MAP + +structure IntSet : INTSET + ==> IntBinarySet : ORD_MAP + also IntListSet : ORD_MAP + +structure LibBase + Uses of the LibBase.BadArg exception have been replaced by + the Fail exception from the SML'97 basis. The function + LibBase.failure replaces LibBase.badArg. + Uses of the type LibBase.relation have been replaced by the + order type from the SML'97 basis. + The type of the version value has changed, and the value + versionName is now called banner. + +structure ListUtil : LIST_UTIL + Deleted. Use the operations from List and ListPair in the + SML'97 basis. + +structure Name : NAME + ==> Atom : ATOM + and AtomTable : ATOM_TABLE + +structure MakeString : MAKESTRING + Deleted. In SML'97, basic types provide their own conversion + functions. + +signature ORD_SET + Many function names changed to track the SML'97 naming conventions: + val find : ... + Deleted + val peek : ... + ==> find : ... + val fold : ... + ==> foldr : ... + val revfold : ... + ==> foldl : ... + Also, the ORD_SET interface provides the following new operations: + add', compare, and filter. + +structure PolyHashTable : POLY_HASH_TABLE + ==> HashTable : HASH_TABLE + +structure PolyArrayQSort : POLY_ARRAY_SORT + ==> ArrayQSort : ARRAY_SORT + +structure Rand : RAND + ==> Random : RANDOM + +structure Random : RANDOM + ==> Rand : RAND + +functor SplayDict (...) : DICT + ==> SplayMapFn (...) : ORD_MAP + +functor SplaySet (...) + ==> SplaySetFn (...) + +structure StringUtil : STRING_UTIL + Deleted. Use operations from String and Substring structures. + +structure StringCvt : STRING_CVT + Deleted. In SML'97, basic types provide their own conversion + functions. + +structure UnixPath : UNIX_PATH + ==> structure PathUtil : PATH_UTIL + Many of the operations defined in the UnixPath structure are + now part of the OS.FileSys and OS.Path structures in the SML'97 + basis. The remaining operations are findFile and findFiles. + In addition, two new functions are provided: existsFile and + allFiles. + +-------------------------------------------------------------------- +New modules +----------- +KeywordFn +Hash2TableFn +structure ParserComb : PARSER_COMB +structure SimpleURef : UREF +structure URef : UREF + +-------------------------------------------------------------------- +New Libraries +------------- +HTML library +Reactive library +Regular expression library diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/ansi-term-dev.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/ansi-term-dev.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/ansi-term-dev.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/ansi-term-dev.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,201 @@ +(* ansi-term-dev.sml + * + * COPYRIGHT (c) 2020 John Reppy (http://www.cs.uchicago.edu/~jhr) + * All rights reserved. + * + * A pretty-printing device for text output to ANSI terminals. This device + * supports the standard ANSI output attributes. + *) + +structure ANSITermDev : sig + + include PP_DEVICE + where type style = ANSITerm.style list + + (* create an output device; if the underlying stream is connected to a TTY, + * then styled output is enabled, otherwise it will be disabled. + *) + val openDev : {dst : TextIO.outstream, wid : int} -> device + + (* enable/disable/query styled output. + * + * styleMode (dev, NONE) -- query current mode + * styleMode (dev, SOME true) -- enable styled output + * styleMode (dev, SOME false) -- disable styled output + * + * This function returns the previous state of the device. + * NOTE: this function raises Fail if called while a style is active. + *) + val styleMode : (device * bool option) -> bool + + end = struct + + structure A = ANSITerm + + type state = { + fg : A.color option, (* NONE is default color for terminal *) + bg : A.color option, (* NONE is default color for terminal *) + bold : bool, + blink : bool, + ul : bool, + rev : bool, + invis : bool + } + + val initState = { + fg=NONE, bg=NONE, + bold=false, blink=false, ul=false, rev=false, invis=false + } + + (* compute the commands to transition from one state to another *) + fun transition (s1 : state, s2 : state) = let + (* compute the commands to set the foreground color *) + val mv = (case (#fg s1, #fg s2) + of (SOME c1, SOME c2) => if c1 = c2 then [] else [A.FG c2] + | (_, SOME c) => [A.FG c] + | (_, NONE) => [A.FG A.Default] + (* end case *)) + (* compute the commands to set the background color *) + val mv = (case (#bg s1, #bg s2) + of (SOME c1, SOME c2) => if c1 = c2 then mv else A.FG c2 :: mv + | (_, SOME c) => A.BG c :: mv + | (_, NONE) => A.FG A.Default :: mv + (* end case *)) + (* compute the commands to set the other display attributes *) + fun add (proj, cmd, off, mv) = (case (proj s1, proj s2) + of (false, true) => cmd::mv + | (true, false) => off::mv + | _ => mv + (* end case *)) + val mv = add (#bold, A.BF, A.NORMAL, mv) + val mv = add (#blink, A.BLINK, A.BLINK_OFF, mv) + val mv = add (#ul, A.UL, A.UL_OFF, mv) + val mv = add (#rev, A.REV, A.REV_OFF, mv) + val mv = add (#invis, A.INVIS, A.INVIS_OFF, mv) + in + if null mv then "" else A.toString mv + end + + (* apply a command to a state *) + fun updateState1 (cmd, style as {fg, bg, bold, blink, ul, rev, invis}) = ( + case cmd + of A.FG c => + {fg=SOME c, bg=bg, bold=bold, blink=blink, ul=ul, rev=rev, invis=invis} + | A.BG c => + {fg=fg, bg=SOME c, bold=bold, blink=blink, ul=ul, rev=rev, invis=invis} + | A.BF => + {fg=fg, bg=bg, bold=true, blink=blink, ul=ul, rev=rev, invis=invis} + | A.BLINK => + {fg=fg, bg=bg, bold=bold, blink=true, ul=ul, rev=rev, invis=invis} + | A.UL => + {fg=fg, bg=bg, bold=bold, blink=blink, ul=true, rev=rev, invis=invis} + | A.REV => + {fg=fg, bg=bg, bold=bold, blink=blink, ul=ul, rev=true, invis=invis} + | A.INVIS => + {fg=fg, bg=bg, bold=bold, blink=blink, ul=ul, rev=rev, invis=true} +(* TODO: add support for A.DIM *) + | _ => style + (* end case *)) + + (* apply a sequence of commands to a state *) + fun updateState (cmds, st) = List.foldl updateState1 st cmds + + type style = A.style list + + datatype device = DEV of { + mode : bool ref, + dst : TextIO.outstream, + wid : int option ref, + stk : state list ref + } + + fun top [] = initState + | top (st::r) = st + + fun sameStyle (s1 : style, s2) = (s1 = s2) + + fun pushStyle (DEV{mode, dst, wid, stk}, sty) = + if (! mode) + then let + val curSt = top (!stk) + val newSt = updateState (sty, curSt) + in + TextIO.output (dst, transition(curSt, newSt)); + stk := newSt :: !stk + end + else () + + fun popStyle (DEV{mode, dst, wid, stk}) = + if (! mode) + then (case !stk + of [] => () + | curSt::r => let + val newSt = top r + in + TextIO.output (dst, transition(curSt, newSt)); + stk := r + end + (* end case *)) + else () + + fun defaultStyle _ = [] + + (* return true if an outstream is a TTY *) + fun isTTY outS = let + val (TextPrimIO.WR{ioDesc, ...}, _) = + TextIO.StreamIO.getWriter(TextIO.getOutstream outS) + in + case ioDesc + of SOME iod => (OS.IO.kind iod = OS.IO.Kind.tty) + | _ => false + end + + fun openDev {dst, wid} = DEV{ + dst = dst, wid = ref(SOME wid), mode = ref(isTTY dst), stk = ref[] + } + + (* maximum printing depth (in terms of boxes) *) + fun maxDepth _ = NONE + fun setMaxDepth _ = () + + fun ellipses _ = ("", 0) + fun setEllipses _ = () + fun setEllipsesWithSz _ = () + + (* the width of the device *) + fun lineWidth (DEV{wid, ...}) = !wid + fun setLineWidth (DEV{wid, ...}, w) = wid := w + + (* the suggested maximum width of indentation; `NONE` is interpreted as no limit. *) + fun maxIndent _ = NONE + fun setMaxIndent _ = () + + (* the suggested maximum width of text on a line *) + fun textWidth _ = NONE + fun setTextWidth _ = () + + (* output some number of spaces to the device *) + fun space (DEV{dst, ...}, n) = TextIO.output (dst, StringCvt.padLeft #" " n "") + + (* output an indentation of the given width to the device *) + val indent = space + + (* output a new-line to the device *) + fun newline (DEV{dst, ...}) = TextIO.output1 (dst, #"\n") + + (* output a string/character in the current style to the device *) + fun string (DEV{dst, ...}, s) = TextIO.output (dst, s) + fun char (DEV{dst, ...}, c) = TextIO.output1 (dst, c) + + (* if the device is buffered, then flush any buffered output *) + fun flush (DEV{dst, ...}) = TextIO.flushOut dst + + (* enable styled output by passing true to this function. It returns + * the previous state of the device. + *) + fun styleMode (DEV{stk = ref(_::_), ...}, _) = + raise Fail "attempt to change mode inside scope of style" + | styleMode (DEV{mode, ...}, NONE) = !mode + | styleMode (DEV{mode as ref m, ...}, SOME flg) = (mode := flg; m) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/ansi-term-pp.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/ansi-term-pp.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/ansi-term-pp.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/ansi-term-pp.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,42 @@ +(* ansi-term-pp.sml + * + * COPYRIGHT (c) 2005 John Reppy (http://www.cs.uchicago.edu/~jhr) + * All rights reserved. + *) + +structure ANSITermPP : sig + + structure Tok : sig + include PP_TOKEN + where type style = ANSITermDev.style + val token : (ANSITermDev.style * string) -> token + end + + include PP_STREAM + where type device = ANSITermDev.device + where type style = ANSITermDev.style + where type token = Tok.token + + val openOut : {dst : TextIO.outstream, wid : int} -> stream + + end = struct + + structure Tok = + struct + type style = ANSITermDev.style + datatype token = Tok of (style * string) + fun string (Tok(sty, s)) = s + fun style (Tok(sty, s)) = sty + fun size (Tok(sty, s)) = String.size s + val token = Tok + end + + structure PP = PPStreamFn ( + structure Token = Tok + structure Device = ANSITermDev) + + open PP + + fun openOut arg = openStream(ANSITermDev.openDev arg) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/char-buffer-dev.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/char-buffer-dev.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/char-buffer-dev.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/char-buffer-dev.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,44 @@ +(* char-buffer-dev.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A pretty printer that puts its output in a CharBuffer.buf object. There + * are no styles and tokens are strings. + *) + +structure CharBufferDev : sig + + include PP_DEVICE + + val openDev : {dst : CharBuffer.buf, wid : int} -> device + + end = struct + + structure DevOps = struct + type t = CharBuffer.buf + (* no style support *) + type style = unit + fun sameStyle _ = true + fun pushStyle _ = () + fun popStyle _ = () + fun defaultStyle _ = () + (* output some number of spaces to the device *) + fun space (dst, n) = CharBuffer.addVec (dst, StringCvt.padLeft #" " n "") + val indent = space + (* output a new-line to the device *) + fun newline dst = CharBuffer.add1 (dst, #"\n") + (* output a string/character in the current style to the device *) + fun string (dst, s) = CharBuffer.addVec (dst, s) + fun char (dst, c) = CharBuffer.add1 (dst, c) + (* nothing to flush *) + fun flush dst = () + end + + structure Device = DefaultDeviceFn (DevOps) + + open Device + + fun openDev {dst, wid} = Device.newWithWidth (dst, wid) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/char-buffer-pp.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/char-buffer-pp.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/char-buffer-pp.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/char-buffer-pp.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,35 @@ +(* char-buffer-pp.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A pretty printer that puts its output in a CharBuffer.buf object. There + * are no styles and tokens are strings. You can use this module to pretty-print + * into a string as follows: + * + * val buf = CharBuffer.new 1024 + * val ppStrm = CharBufferPP.openBuf {dst = buf, wid = 80} + * .... pretty printing .... + * val result = CharBuffer.contents buf + *) + +structure CharBufferPP : sig + + include PP_STREAM + where type token = string + + val openBuf : {dst : CharBuffer.buf, wid : int} -> stream + + end = struct + + structure Device = CharBufferDev + + structure PP = PPStreamFn ( + structure Token = StringToken + structure Device = Device) + + open PP + + fun openBuf arg = PP.openStream (Device.openDev arg) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/default-device-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/default-device-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/default-device-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/default-device-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,122 @@ +(* default-device-fn.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A functor that implements the device properties for a device + *) + +signature DEVICE_OPS = + sig + + type t + type style + + (* style operations *) + val sameStyle : (style * style) -> bool + val pushStyle : (t * style) -> unit + val popStyle : t -> unit + val defaultStyle : t -> style + + (* Output operations *) + val indent : (t * int) -> unit + val space : (t * int) -> unit + val newline : t -> unit + val string : (t * string) -> unit + val char : (t * char) -> unit + val flush : t -> unit + + end + +functor DefaultDeviceFn (D : DEVICE_OPS) : sig + + include PP_DEVICE + + structure DevOps : DEVICE_OPS + + (* create a new device with default properties *) + val new : DevOps.t -> device + + (* create a new device with the specified line width *) + val newWithWidth : DevOps.t * int -> device + + (* create a new device with the specified properties *) + val newWithProps : { + ops : DevOps.t, + maxDepth : int option, + ellipses : (string * int), + lineW : int option, + textW : int option, + maxIndent : int option + } -> device + + end = struct + + structure DevOps = D + + datatype device = Dev of { + ops : D.t, + depthLimit : int option ref, + ellipses : (string * int) ref, + lineWid : int option ref, + textWid : int option ref, + indentLimit : int option ref + } + + type style = D.style + + fun newWithProps {ops, maxDepth, ellipses, lineW, textW, maxIndent} = Dev{ + ops = ops, + depthLimit = ref maxDepth, + ellipses = ref ellipses, + lineWid = ref lineW, + textWid = ref textW, + indentLimit = ref maxIndent + } + + fun newWithWidth (ops, w) = newWithProps { + ops = ops, + maxDepth = NONE, + ellipses = ("...", 3), + lineW = SOME w, + textW = NONE, + maxIndent = NONE + } + + fun new ops = newWithProps { + ops = ops, + maxDepth = NONE, + ellipses = ("...", 3), + lineW = NONE, + textW = NONE, + maxIndent = NONE + } + + (* style operations *) + val sameStyle = D.sameStyle + fun pushStyle (Dev{ops, ...}, sty) = D.pushStyle (ops, sty) + fun popStyle (Dev{ops, ...}) = D.popStyle ops + fun defaultStyle (Dev{ops, ...}) = D.defaultStyle ops + + (* Output operations *) + fun indent (Dev{ops, ...}, n) = D.indent (ops, n) + fun space (Dev{ops, ...}, n) = D.space (ops, n) + fun newline (Dev{ops, ...}) = D.newline ops + fun string (Dev{ops, ...}, s) = D.string (ops, s) + fun char (Dev{ops, ...}, c) = D.char (ops, c) + fun flush (Dev{ops, ...}) = D.flush ops + + (* device properties *) + fun maxDepth (Dev{depthLimit, ...}) = !depthLimit + fun setMaxDepth (Dev{depthLimit, ...}, d) = depthLimit := d + fun ellipses (Dev{ellipses, ...}) = !ellipses + fun setEllipses (Dev{ellipses, ...}, s) = ellipses := (s, String.size s) + fun setEllipsesWithSz (Dev{ellipses, ...}, s, sz) = ellipses := (s, sz) + fun lineWidth (Dev{lineWid, ...}) = !lineWid + fun setLineWidth (Dev{lineWid, ...}, w) = lineWid := w + fun maxIndent (Dev{indentLimit, ...}) = !indentLimit + fun setMaxIndent (Dev{indentLimit, ...}, n) = indentLimit := n + fun textWidth (Dev{textWid, ...}) = !textWid + fun setTextWidth (Dev{textWid, ...}, n) = textWid := n + + end (* functor DefaultDeviceFn *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/html3-dev.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/html3-dev.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/html3-dev.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/html3-dev.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,210 @@ +(* html3-dev.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A pretty printing device that uses HTML (Version 3.2) markup to control layout. + *) + +structure HTML3Dev : sig + + include PP_DEVICE + + (* combine two styles into one *) + val combineStyle : (style * style) -> style + + (* unstyled text *) + val styleNONE : style + + (* standard HTML text styles *) + val styleTT : style + val styleI : style + val styleB : style + val styleU : style + val styleSTRIKE : style + val styleEM : style + val styleSTRONG : style + val styleDFN : style + val styleCODE : style + val styleSAMP : style + val styleKBD : style + val styleVAR : style + val styleCITE : style + + (* color text (using FONT element) *) + val color : string -> style + + (* hyper-text links and anchors *) + val link : string -> style + val anchor : string -> style + val linkAnchor : {name : string, href : string} -> style + + val openDev : {wid : int, textWid : int option} -> device + val done : device -> HTML.text + + end = struct + + datatype style + = NOEMPH + | TT | I | B | U | STRIKE | EM + | STRONG | DFN | CODE | SAMP | KBD + | VAR | CITE + | COLOR of string + | A of {href : string option, name : string option} + | STYS of style list + + datatype device = DEV of { + lineWid : int option ref, + textWid : int option ref, + emphStk : (HTML.text list * style) list ref, + txt : HTML.text list ref + } + + (* return the current emphasis *) + fun curEmph (DEV{emphStk, ...}) = (case !emphStk + of [] => NOEMPH + | ((_, em)::r) => em + (* end case *)) + + (* add PCDATA to the text list *) + fun pcdata (DEV{txt, ...}, s) = txt := HTML.PCDATA s :: !txt + + (* replace the sequence of PCDATA elements at the head of the + * txt list with its concatenation. + *) + fun concatTxt (DEV{txt, ...}) = let + fun f ([], []) = [] + | f (HTML.PCDATA s :: r, l) = f (r, s::l) + | f (r, l) = HTML.PCDATA(String.concat l) :: r + in + f (!txt, []) + end + + (* are two styles the same? *) + fun sameStyle (s1 : style, s2) = (s1 = s2) + + fun wrapStyle (sty, [], tl') = tl' + | wrapStyle (sty, tl, tl') = let + fun wrap (NOEMPH, t) = t + | wrap (TT, t) = HTML.TT t + | wrap (I, t) = HTML.I t + | wrap (B, t) = HTML.B t + | wrap (U, t) = HTML.U t + | wrap (STRIKE, t) = HTML.STRIKE t + | wrap (EM, t) = HTML.EM t + | wrap (STRONG, t) = HTML.STRONG t + | wrap (DFN, t) = HTML.DFN t + | wrap (CODE, t) = HTML.CODE t + | wrap (SAMP, t) = HTML.SAMP t + | wrap (KBD, t) = HTML.KBD t + | wrap (VAR, t) = HTML.VAR t + | wrap (CITE, t) = HTML.CITE t + | wrap (COLOR c, t) = HTML.FONT{color=SOME c, size=NONE, content=t} + | wrap (A{name, href}, t) = HTML.A{ + name = name, href = href, + rel = NONE, rev = NONE, title = NONE, + content = t + } + | wrap (STYS l, t) = List.foldr wrap t l + val t = (case tl of [t] => t | _ => HTML.TextList(List.rev tl)) + in + wrap(sty, t) :: tl' + end + + (* push/pop a style from the devices style stack. A pop on an + * empty style stack is a nop. + *) + fun pushStyle (dev as DEV{emphStk, txt, ...}, sty) = ( + emphStk := (concatTxt dev, sty) :: !emphStk; + txt := []) + fun popStyle (DEV{emphStk as ref[], ...}) = () + | popStyle (dev as DEV{emphStk as ref ((tl, sty) :: r), txt, ...}) = ( + txt := wrapStyle (sty, concatTxt dev, tl); + emphStk := r) + + (* the default style for the device (this is the current style, + * if the style stack is empty). + *) + fun defaultStyle _ = NOEMPH + + (* maximum printing depth (in terms of boxes) *) + fun maxDepth _ = NONE + fun setMaxDepth _ = () +(* DEPRECATED *) + val depth = maxDepth + + (* the sized string to print in place of boxes when the maximum depth is reached. *) + fun ellipses _ = ("", 0) + fun setEllipses _ = () + fun setEllipsesWithSz _ = () + + (* the width of the device *) + fun lineWidth (DEV{lineWid, ...}) = !lineWid + fun setLineWidth (DEV{lineWid, ...}, w) = lineWid := w + + (* the suggested maximum width of indentation; `NONE` is interpreted as no limit. *) + fun maxIndent _ = NONE + fun setMaxIndent _ = () + + (* the suggested maximum width of text on a line *) + fun textWidth (DEV{textWid, ...}) = !textWid + fun setTextWidth (DEV{textWid, ...}, w) = textWid := w + + (* output some number of spaces to the device *) + fun space (dev, n) = + pcdata(dev, concat(List.tabulate (n, fn _ => " "))) + + (* output an indentation of the given width to the device *) + val indent = space + + (* output a new-line to the device *) + fun newline (dev as DEV{txt, ...}) = + txt := HTML.BR{clear=NONE} :: (concatTxt dev) + + (* output a string/character in the current style to the device *) + val string = pcdata + fun char (dev, c) = pcdata(dev, str c) + + (* flush is a nop for us *) + fun flush _ = () + + fun combineStyle (NOEMPH, sty) = sty + | combineStyle (sty, NOEMPH) = sty + | combineStyle (STYS l1, STYS l2) = STYS(l1 @ l2) + | combineStyle (sty, STYS l) = STYS(sty::l) + | combineStyle (sty1, sty2) = STYS[sty1, sty2] + + val styleNONE = NOEMPH + val styleTT = TT + val styleI = I + val styleB = B + val styleU = U + val styleSTRIKE = STRIKE + val styleEM = EM + val styleSTRONG = STRONG + val styleDFN = DFN + val styleCODE = CODE + val styleSAMP = SAMP + val styleKBD = KBD + val styleVAR = VAR + val styleCITE = CITE + val color = COLOR + fun link s = A{href=SOME s, name=NONE} + fun anchor s = A{href=NONE, name=SOME s} + fun linkAnchor {name, href} = A{href=SOME href, name = SOME name} + + fun openDev {wid, textWid} = DEV{ + txt = ref [], + emphStk = ref [], + lineWid = ref (SOME wid), + textWid = ref textWid + } + + fun done (dev as DEV{emphStk = ref [], txt, ...}) = (case (concatTxt dev) + of [t] => (txt := []; t) + | l => (txt := []; HTML.TextList(List.rev l)) + (* end case *)) + | done _ = raise Fail "device is not done yet" + + end; (* HTMLDev *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/simple-textio-dev.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/simple-textio-dev.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/simple-textio-dev.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/simple-textio-dev.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,43 @@ +(* simple-textio-dev.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A simple (no styles) pretty-printing device for output to TextIO outstreams. + *) + +structure SimpleTextIODev : sig + + include PP_DEVICE + + val openDev : {dst : TextIO.outstream, wid : int} -> device + + end = struct + + structure DevOps = struct + type t = TextIO.outstream + (* no style support *) + type style = unit + fun sameStyle _ = true + fun pushStyle _ = () + fun popStyle _ = () + fun defaultStyle _ = () + (* output some number of spaces to the device *) + fun space (dst, n) = TextIO.output (dst, StringCvt.padLeft #" " n "") + val indent = space + (* output a new-line to the device *) + fun newline dst = TextIO.output1 (dst, #"\n") + (* output a string/character in the current style to the device *) + fun string (dst, s) = TextIO.output (dst, s) + fun char (dst, c) = TextIO.output1 (dst, c) + (* flush output stream *) + fun flush dst = TextIO.flushOut dst + end + + structure Device = DefaultDeviceFn (DevOps) + + open Device + + fun openDev {dst, wid} = Device.newWithWidth (dst, wid) + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/sources.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/sources.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/sources.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,34 @@ +(* sources.cm + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Sources file for Pretty printer device library. + *) + +Group + + structure ANSITermDev + structure ANSITermPP + structure CharBufferDev + structure CharBufferPP + structure SimpleTextIODev + structure StringToken + structure TextIOPP + structure TextPP + +is + + $/basis.cm + $/smlnj-lib.cm + ../src/sources.cm + + ansi-term-dev.sml + ansi-term-pp.sml + char-buffer-dev.sml + char-buffer-pp.sml + default-device-fn.sml + simple-textio-dev.sml + string-token.sml + textio-pp.sml + text-pp.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/string-token.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/string-token.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/string-token.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/string-token.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,16 @@ +(* string-token.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A trivial implementation of tokens as strings w/o style information. + *) + +structure StringToken : PP_TOKEN = + struct + type style = unit + type token = string + fun string s = s + fun style _ = () + fun size s = String.size s + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/textio-pp.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/textio-pp.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/textio-pp.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/textio-pp.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,28 @@ +(* textio-pp.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A pretty printer with TextIO output; there are no styles and + * tokens are atoms. + *) + +structure TextIOPP : sig + + include PP_STREAM + where type token = string + + val openOut : {dst : TextIO.outstream, wid : int} -> stream + + end = struct + + structure PP = PPStreamFn ( + structure Token = StringToken + structure Device = SimpleTextIODev) + + open PP + + fun openOut arg = openStream(SimpleTextIODev.openDev arg) + + end; + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/text-pp.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/text-pp.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/devices/text-pp.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/devices/text-pp.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,74 @@ +(* text-pp.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A pretty printer that generates plain text; either to a TextIO.outstream + * or to a CharBuffer.buf object. It essentially unifies the behavior of + * the TextIOPP and CharBufferPP structures. + *) + +structure TextPP : sig + + include PP_STREAM + where type token = string + + val openOutstream : {dst : TextIO.outstream, wid : int} -> stream + + val openBuffer : {dst : CharBuffer.buf, wid : int} -> stream + + end = struct + + structure DevOps = struct + datatype t = OPS of { + add1 : char -> unit, + addVec : string -> unit, + flush : unit -> unit + } + (* no style support *) + type style = unit + fun sameStyle _ = true + fun pushStyle _ = () + fun popStyle _ = () + fun defaultStyle _ = () + (* output some number of spaces to the device *) + fun space (OPS{addVec, ...}, n) = addVec (StringCvt.padLeft #" " n "") + val indent = space + (* output a new-line to the device *) + fun newline (OPS{add1, ...}) = add1 #"\n" + (* output a string/character in the current style to the device *) + fun string (OPS{addVec, ...}, s) = addVec s + fun char (OPS{add1, ...}, c) = add1 c + (* flush output *) + fun flush (OPS{flush, ...}) = flush() + end + + structure Device = DefaultDeviceFn (DevOps) + + structure PP = PPStreamFn ( + structure Token = StringToken + structure Device = Device) + + open PP + + fun openOutstream {dst, wid} = let + val dev = Device.newWithWidth (DevOps.OPS{ + add1 = fn c => TextIO.output1 (dst, c), + addVec = fn c => TextIO.output (dst, c), + flush = fn () => TextIO.flushOut dst + }, wid) + in + PP.openStream dev + end + + fun openBuffer {dst, wid} = let + val dev = Device.newWithWidth (DevOps.OPS{ + add1 = fn c => CharBuffer.add1 (dst, c), + addVec = fn c => CharBuffer.addVec (dst, c), + flush = fn () => () + }, wid) + in + PP.openStream dev + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/examples/old-pp.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/examples/old-pp.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/examples/old-pp.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/examples/old-pp.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,118 @@ +(* old-pp.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * An implementation of the SML/NJ's old PP interface on top of the PP library. + *) + +signature OLD_PRETTYPRINT = + sig + type ppstream + type ppconsumer = { + consumer : string -> unit, + linewidth : int, + flush : unit -> unit + } + + datatype break_style = CONSISTENT | INCONSISTENT + + exception PP_FAIL of string + + val mk_ppstream : ppconsumer -> ppstream + val dest_ppstream : ppstream -> ppconsumer + val add_break : ppstream -> int * int -> unit + val add_newline : ppstream -> unit + val add_string : ppstream -> string -> unit + val begin_block : ppstream -> break_style -> int -> unit + val end_block : ppstream -> unit + val clear_ppstream : ppstream -> unit + val flush_ppstream : ppstream -> unit + val with_pp : ppconsumer -> (ppstream -> unit) -> unit + val pp_to_string : int -> (ppstream -> 'a -> unit) -> 'a -> string + + end; + +structure OldPrettyPrint :> OLD_PRETTYPRINT = + struct + + type ppconsumer = { + consumer : string -> unit, + linewidth : int, + flush : unit -> unit + } + + structure Dev = + struct + type device = ppconsumer + type style = unit + fun sameStyle _ = true + fun pushStyle _ = () + fun popStyle _ = () + fun defaultStyle _ = () + fun maxDepth _ = NONE + fun setMaxDepth _ = () + fun ellipses _ = ("", 0) + fun setEllipses _ = () + fun setEllipsesWithSz _ = () + fun lineWidth {consumer, linewidth, flush} = SOME linewidth + fun setLineWidth _ = () + fun maxIndent _ = NONE + fun setMaxIndent _ = () + fun textWidth _ = NONE + fun setTextWidth _ = () + fun space ({consumer, linewidth, flush}, n) = + consumer (StringCvt.padLeft #" " n "") + val indent = space + fun newline {consumer, linewidth, flush} = consumer "\n" + fun string ({consumer, linewidth, flush}, s) = consumer s + fun char ({consumer, linewidth, flush}, c) = consumer(str c) + fun flush {consumer, linewidth, flush} = flush() + end + + structure PP = PPStreamFn(structure Token = StringToken structure Device = Dev) + + datatype ppstream = STRM of { + consumer : ppconsumer, + strm : PP.stream + } + + datatype break_style = CONSISTENT | INCONSISTENT + + exception PP_FAIL of string + + fun mk_ppstream ppc = STRM{ + consumer = ppc, + strm = PP.openStream ppc + } + fun dest_ppstream (STRM{consumer, ...}) = consumer + fun add_break (STRM{strm, ...}) (nsp, offset) = + PP.break strm {nsp=nsp, offset=offset} + fun add_newline (STRM{strm, ...}) = PP.newline strm + fun add_string (STRM{strm, ...}) s = PP.string strm s + fun begin_block (STRM{strm, ...}) CONSISTENT indent = + PP.openHVBox strm (PP.Rel indent) + | begin_block (STRM{strm, ...}) INCONSISTENT indent = + PP.openHOVBox strm (PP.Rel indent) + fun end_block (STRM{strm, ...}) = PP.closeBox strm + fun clear_ppstream(STRM{strm, ...}) = + raise Fail "clear_ppstream not implemented" + fun flush_ppstream (STRM{strm, ...}) = PP.flushStream strm + fun with_pp ppc f = let + val (ppStrm as (STRM{strm, ...})) = mk_ppstream ppc + in + f ppStrm; + PP.closeStream strm + end + fun pp_to_string wid ppFn obj = let + val l = ref ([] : string list) + fun attach s = l := s :: !l + in + with_pp { + consumer = attach, linewidth = wid, flush = fn()=>() + } (fn ppStrm => ppFn ppStrm obj); + String.concat(List.rev(!l)) + end + + end; + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.fun mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.fun --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,139 @@ +(* mono-buffer.fun + * + * ============================================================================ + * Copyright (c) 2018 John Reppy (http://cs.uchicago.edu/~jhr) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * ============================================================================ + * + * Reference code for SML Basis Library Proposal 2018-001. + * + * This proposal supersedes 2015-004. + *) + +functor MonoBufferFn ( + + structure V : MONO_VECTOR + structure VS : MONO_VECTOR_SLICE + where type elem = V.elem and type vector = V.vector + structure A : MONO_ARRAY + where type elem = V.elem and type vector = V.vector + structure AS : MONO_ARRAY_SLICE + where type elem = V.elem and type array = A.array + and type vector = V.vector and type vector_slice = VS.slice + val defaultElem : V.elem + + ) : MONO_BUFFER = struct + + type elem = V.elem + type vector = V.vector + type slice = VS.slice + type array = A.array + type array_slice = AS.slice + + datatype buf = BUF of { + content : array ref, (* array for holding content *) + len : int ref, (* current length of content *) + initLen : int (* initial size *) + } + + (* default initial size *) + val defaultInitLen = 4096 + + val maxLen = Int.min(V.maxLen, A.maxLen) + + fun new hint = let + val n = if (hint < 0) orelse (V.maxLen < hint) + then raise Size + else if (hint = 0) then defaultInitLen + else hint + in + BUF{ + content = ref(A.array(n, defaultElem)), + len = ref 0, + initLen = n + } + end + + fun contents (BUF{content=ref arr, len=ref n, ...}) = + AS.vector (AS.slice (arr, 0, SOME n)) + + fun copy {src=BUF{content=ref arr, len=ref n, ...}, dst, di} = + AS.copy {src = AS.slice (arr, 0, SOME n), dst = dst, di = di} + + fun length (BUF{len=ref n, ...}) = n + + fun sub (BUF{content=ref arr, len=ref n, ...}, i) = + if (i < 0) orelse (n <= i) + then raise Subscript + else A.sub(arr, i) + + fun clear (BUF{len, ...}) = (len := 0) + + fun reset (BUF{content, len, initLen}) = ( + len := 0; + if (A.length(!content) <> initLen) + then content := A.array(initLen, defaultElem) + else ()) + + (* ensure that the content array has space for amt elements *) + fun ensureCapacity (content, len, amt) = let + val capacity = (len + amt) handle Overflow => maxLen + in + if (A.length(!content) < capacity) + then let + val newArr = A.array(capacity, defaultElem) + in + AS.copy{dst = newArr, di = 0, src = AS.slice(!content, 0, SOME len)}; + content := newArr + end + else () + end + + fun reserve (_, 0) = () + | reserve (BUF{content, len=ref len, ...}, n) = + if (n < 0) then raise Size + else ensureCapacity (content, len, n) + + fun add1 (BUF{content, len, ...}, elem) = ( + ensureCapacity(content, !len, 1); + A.update(!content, !len, elem); + len := !len + 1) + + fun addVec (BUF{content, len, ...}, vec) = ( + ensureCapacity(content, !len, V.length vec); + A.copyVec{dst = !content, di = !len, src = vec}; + len := !len + V.length vec) + + fun addSlice (BUF{content, len, ...}, slice) = ( + ensureCapacity(content, !len, VS.length slice); + AS.copyVec{dst = !content, di = !len, src = slice}; + len := !len + VS.length slice) + + fun addArr (BUF{content, len, ...}, arr) = ( + ensureCapacity(content, !len, A.length arr); + A.copy{dst = !content, di = !len, src = arr}; + len := !len + A.length arr) + + fun addArrSlice (BUF{content, len, ...}, slice) = ( + ensureCapacity(content, !len, AS.length slice); + AS.copy{dst = !content, di = !len, src = slice}; + len := !len + AS.length slice) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,10 @@ +local + $(SML_LIB)/basis/basis.mlb + mono-buffer.sig + mono-buffer.fun + mono-buffer.sml +in + signature MONO_BUFFER + structure Word8Buffer + structure CharBuffer +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.sig mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.sig --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,65 @@ +(* mono-buffer.sig + * + * ============================================================================ + * Copyright (c) 2018 John Reppy (http://cs.uchicago.edu/~jhr) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * ============================================================================ + * + * Reference code for SML Basis Library Proposal 2018-001. + * + * This proposal supersedes 2015-004. + *) + +signature MONO_BUFFER = + sig + + type buf + + type elem + type vector + type slice + type array + type array_slice + + val maxLen : int + + val new : int -> buf + + val contents : buf -> vector + + val copy : {src : buf, dst : array, di : int} -> unit + + val length : buf -> int + + val sub : buf * int -> elem + + val clear : buf -> unit + + val reset : buf -> unit + + val reserve : buf * int -> unit + + val add1 : buf * elem -> unit + val addVec : buf * vector -> unit + val addSlice : buf * slice -> unit + val addArr : buf * array -> unit + val addArrSlice : buf * array_slice -> unit + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/mono-buffer/mono-buffer.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,56 @@ +(* mono-buffer.sml + * + * ============================================================================ + * Copyright (c) 2018 John Reppy (http://cs.uchicago.edu/~jhr) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * ============================================================================ + * + * Reference code for SML Basis Library Proposal 2018-001. + * + * This proposal supersedes 2015-004. + *) + +structure Word8Buffer :> MONO_BUFFER + where type elem = Word8.word + and type vector = Word8Vector.vector + and type slice = Word8VectorSlice.slice + and type array = Word8Array.array + and type array_slice = Word8ArraySlice.slice + = MonoBufferFn ( + structure V = Word8Vector + structure VS = Word8VectorSlice + structure A = Word8Array + structure AS = Word8ArraySlice + val defaultElem : Word8.word = 0w0 + ); + +structure CharBuffer :> MONO_BUFFER + where type elem = Char.char + and type vector = CharVector.vector + and type slice = CharVectorSlice.slice + and type array = CharArray.array + and type array_slice = CharArraySlice.slice + = MonoBufferFn ( + structure V = CharVector + structure VS = CharVectorSlice + structure A = CharArray + structure AS = CharArraySlice + val defaultElem : Char.char = #"\000" + ); diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/pp-extras-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/pp-extras-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/pp-extras-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/pp-extras-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,38 @@ +(* pp-extras-lib.cm + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * CM file for compiling the PP Library with the extra devices. + *) + +Library + + signature PP_DESC + signature PP_DEVICE + signature PP_TOKEN + signature PP_STREAM + + functor PPStreamFn + functor PPDescFn + functor PPDebugFn + +(* devices *) + structure TextIOPP + structure TextPP + structure SimpleTextIODev + structure CharBufferPP + structure ANSITermDev + structure ANSITermPP + structure StringToken + +(* extras *) + structure HTML3Dev + +is + + $/basis.cm + $/html-lib.cm + $/pp-lib.cm + + devices/html3-dev.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/pp-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/pp-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/pp-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/pp-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,31 @@ +(* pp-lib.cm + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * The main sources file for the PP library. + *) + +Library + + signature PP_DESC + signature PP_DEVICE + signature PP_TOKEN + signature PP_STREAM + + functor PPStreamFn + functor PPDescFn + functor PPDebugFn + +(* devices *) + structure TextIOPP + structure TextPP + structure SimpleTextIODev + structure CharBufferPP + structure ANSITermDev + structure ANSITermPP + structure StringToken + +is + src/sources.cm + devices/sources.cm diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/pp-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/pp-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/pp-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/pp-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,409 @@ + +ann + "nonexhaustiveBind warn" "nonexhaustiveMatch ignore" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" + "allowOrPats true" "allowVectorExpsAndPats true" +in + +local + basis l37 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb mono-buffer/mono-buffer.mlb + end + basis l55 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + src/pp-token-sig.sml + in + signature gs_0 = PP_TOKEN + end + local + open l37 + in + structure gs_1 = Char + structure gs_2 = CharArray + structure gs_3 = CharVector + structure gs_4 = FixedInt + structure gs_5 = General + structure gs_6 = Int + structure gs_7 = Int32 + structure gs_8 = Int64 + structure gs_9 = IntInf + structure gs_10 = LargeInt + structure gs_11 = LargeReal + structure gs_12 = LargeWord + structure gs_13 = OS + structure gs_14 = Position + structure gs_15 = Real + structure gs_16 = Real64 + structure gs_17 = RealArray + structure gs_18 = RealArraySlice + structure gs_19 = RealVector + structure gs_20 = RealVectorSlice + structure gs_21 = SMLofNJ + structure gs_22 = Socket + structure gs_23 = String + structure gs_24 = Substring + structure gs_25 = SysWord + structure gs_26 = Time + structure gs_27 = Word + structure gs_28 = Word32 + structure gs_29 = Word64 + structure gs_30 = Word8 + end + local + structure Char = gs_1 + structure CharArray = gs_2 + structure CharVector = gs_3 + structure FixedInt = gs_4 + structure General = gs_5 + structure Int = gs_6 + structure Int32 = gs_7 + structure Int64 = gs_8 + structure IntInf = gs_9 + structure LargeInt = gs_10 + structure LargeReal = gs_11 + structure LargeWord = gs_12 + structure OS = gs_13 + signature PP_TOKEN = gs_0 + structure Position = gs_14 + structure Real = gs_15 + structure Real64 = gs_16 + structure RealArray = gs_17 + structure RealArraySlice = gs_18 + structure RealVector = gs_19 + structure RealVectorSlice = gs_20 + structure SMLofNJ = gs_21 + structure Socket = gs_22 + structure String = gs_23 + structure Substring = gs_24 + structure SysWord = gs_25 + structure Time = gs_26 + structure Word = gs_27 + structure Word32 = gs_28 + structure Word64 = gs_29 + structure Word8 = gs_30 + devices/string-token.sml + in + structure gs_31 = StringToken + end + local + src/pp-stream-sig.sml + in + signature gs_32 = PP_STREAM + end + local + open l37 + in + structure gs_33 = TextIO + end + local + open l37 + in + structure gs_34 = CharBuffer + end + local + open l55 + in + structure gs_35 = Format + end + local + open l55 + in + structure gs_36 = Queue + end + local + open l37 + in + structure gs_37 = Option + end + local + open l55 + in + structure gs_38 = ListFormat + end + local + src/pp-device-sig.sml + in + signature gs_39 = PP_DEVICE + end + local + structure Char = gs_1 + structure CharArray = gs_2 + structure CharVector = gs_3 + structure FixedInt = gs_4 + structure Format = gs_35 + structure General = gs_5 + structure Int = gs_6 + structure Int32 = gs_7 + structure Int64 = gs_8 + structure IntInf = gs_9 + structure LargeInt = gs_10 + structure LargeReal = gs_11 + structure LargeWord = gs_12 + structure ListFormat = gs_38 + structure OS = gs_13 + structure Option = gs_37 + signature PP_DEVICE = gs_39 + signature PP_STREAM = gs_32 + signature PP_TOKEN = gs_0 + structure Position = gs_14 + structure Queue = gs_36 + structure Real = gs_15 + structure Real64 = gs_16 + structure RealArray = gs_17 + structure RealArraySlice = gs_18 + structure RealVector = gs_19 + structure RealVectorSlice = gs_20 + structure SMLofNJ = gs_21 + structure Socket = gs_22 + structure String = gs_23 + structure Substring = gs_24 + structure SysWord = gs_25 + structure TextIO = gs_33 + structure Time = gs_26 + structure Word = gs_27 + structure Word32 = gs_28 + structure Word64 = gs_29 + structure Word8 = gs_30 + src/pp-stream-fn.sml + in + functor gs_40 = PPStreamFn + end + local + open l37 + in + structure gs_41 = StringCvt + end + local + structure Char = gs_1 + structure CharArray = gs_2 + structure CharVector = gs_3 + structure FixedInt = gs_4 + structure General = gs_5 + structure Int = gs_6 + structure Int32 = gs_7 + structure Int64 = gs_8 + structure IntInf = gs_9 + structure LargeInt = gs_10 + structure LargeReal = gs_11 + structure LargeWord = gs_12 + structure OS = gs_13 + signature PP_DEVICE = gs_39 + structure Position = gs_14 + structure Real = gs_15 + structure Real64 = gs_16 + structure RealArray = gs_17 + structure RealArraySlice = gs_18 + structure RealVector = gs_19 + structure RealVectorSlice = gs_20 + structure SMLofNJ = gs_21 + structure Socket = gs_22 + structure String = gs_23 + structure Substring = gs_24 + structure SysWord = gs_25 + structure Time = gs_26 + structure Word = gs_27 + structure Word32 = gs_28 + structure Word64 = gs_29 + structure Word8 = gs_30 + devices/default-device-fn.sml + in + signature gs_42 = DEVICE_OPS + functor gs_43 = DefaultDeviceFn + end + local + structure CharBuffer = gs_34 + signature DEVICE_OPS = gs_42 + functor DefaultDeviceFn = gs_43 + functor PPStreamFn = gs_40 + signature PP_STREAM = gs_32 + structure StringCvt = gs_41 + structure StringToken = gs_31 + structure TextIO = gs_33 + devices/text-pp.sml + in + structure gs_44 = TextPP + end + local + open l37 + in + structure gs_45 = List + end + local + open l37 + in + structure gs_46 = TextPrimIO + end + local + open l55 + in + structure gs_47 = ANSITerm + end + local + structure ANSITerm = gs_47 + structure Char = gs_1 + structure CharArray = gs_2 + structure CharVector = gs_3 + structure FixedInt = gs_4 + structure General = gs_5 + structure Int = gs_6 + structure Int32 = gs_7 + structure Int64 = gs_8 + structure IntInf = gs_9 + structure LargeInt = gs_10 + structure LargeReal = gs_11 + structure LargeWord = gs_12 + structure List = gs_45 + structure OS = gs_13 + signature PP_DEVICE = gs_39 + structure Position = gs_14 + structure Real = gs_15 + structure Real64 = gs_16 + structure RealArray = gs_17 + structure RealArraySlice = gs_18 + structure RealVector = gs_19 + structure RealVectorSlice = gs_20 + structure SMLofNJ = gs_21 + structure Socket = gs_22 + structure String = gs_23 + structure StringCvt = gs_41 + structure Substring = gs_24 + structure SysWord = gs_25 + structure TextIO = gs_33 + structure TextPrimIO = gs_46 + structure Time = gs_26 + structure Word = gs_27 + structure Word32 = gs_28 + structure Word64 = gs_29 + structure Word8 = gs_30 + devices/ansi-term-dev.sml + in + structure gs_48 = ANSITermDev + end + local + structure ANSITermDev = gs_48 + structure Char = gs_1 + structure CharArray = gs_2 + structure CharVector = gs_3 + structure FixedInt = gs_4 + structure General = gs_5 + structure Int = gs_6 + structure Int32 = gs_7 + structure Int64 = gs_8 + structure IntInf = gs_9 + structure LargeInt = gs_10 + structure LargeReal = gs_11 + structure LargeWord = gs_12 + structure OS = gs_13 + functor PPStreamFn = gs_40 + signature PP_STREAM = gs_32 + signature PP_TOKEN = gs_0 + structure Position = gs_14 + structure Real = gs_15 + structure Real64 = gs_16 + structure RealArray = gs_17 + structure RealArraySlice = gs_18 + structure RealVector = gs_19 + structure RealVectorSlice = gs_20 + structure SMLofNJ = gs_21 + structure Socket = gs_22 + structure String = gs_23 + structure Substring = gs_24 + structure SysWord = gs_25 + structure TextIO = gs_33 + structure Time = gs_26 + structure Word = gs_27 + structure Word32 = gs_28 + structure Word64 = gs_29 + structure Word8 = gs_30 + devices/ansi-term-pp.sml + in + structure gs_49 = ANSITermPP + end + local + signature PP_STREAM = gs_32 + src/pp-desc-sig.sml + in + signature gs_50 = PP_DESC + end + local + signature PP_STREAM = gs_32 + structure TextIO = gs_33 + src/pp-debug-fn.sml + in + functor gs_51 = PPDebugFn + end + local + signature PP_DESC = gs_50 + signature PP_STREAM = gs_32 + src/pp-desc-fn.sml + in + functor gs_52 = PPDescFn + end + local + structure CharBuffer = gs_34 + signature DEVICE_OPS = gs_42 + functor DefaultDeviceFn = gs_43 + signature PP_DEVICE = gs_39 + structure StringCvt = gs_41 + devices/char-buffer-dev.sml + in + structure gs_53 = CharBufferDev + end + local + structure CharBuffer = gs_34 + structure CharBufferDev = gs_53 + functor PPStreamFn = gs_40 + signature PP_STREAM = gs_32 + structure StringToken = gs_31 + devices/char-buffer-pp.sml + in + structure gs_54 = CharBufferPP + end + local + signature DEVICE_OPS = gs_42 + functor DefaultDeviceFn = gs_43 + signature PP_DEVICE = gs_39 + structure StringCvt = gs_41 + structure TextIO = gs_33 + devices/simple-textio-dev.sml + in + structure gs_55 = SimpleTextIODev + end + local + functor PPStreamFn = gs_40 + signature PP_STREAM = gs_32 + structure SimpleTextIODev = gs_55 + structure StringToken = gs_31 + structure TextIO = gs_33 + devices/textio-pp.sml + in + structure gs_56 = TextIOPP + end +in + structure ANSITermDev = gs_48 + structure ANSITermPP = gs_49 + structure CharBufferPP = gs_54 + functor PPDebugFn = gs_51 + functor PPDescFn = gs_52 + functor PPStreamFn = gs_40 + signature PP_DESC = gs_50 + signature PP_DEVICE = gs_39 + signature PP_STREAM = gs_32 + signature PP_TOKEN = gs_0 + structure SimpleTextIODev = gs_55 + structure StringToken = gs_31 + structure TextIOPP = gs_56 + structure TextPP = gs_44 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,35 @@ +README: PP -- the pretty printer library +*** under construction *** + +This is a library for pretty printing. It provides a much richer +pretty printing model than the Oppen-style pretty printer provided +by the compiler. + +Its implementation is based on the FORMAT library by Pierre Weis +(Copyright INRIA 1996), which was written in CAML, but there are +a number of differences: + + 1) this pretty printer does not support tabulation boxes yet. + 2) this pretty-printer is functorized over abstract output + devices and input tokens. + 3) this pretty-printer supports styled text. + 4) this pretty-printer supports both absolute and relative indentation + modes (the former is necessary for block-structured language + indentation). + 5) this pretty-printer supports both imperative pretty-printer streams + and declarative pretty-printing layouts, which can be intermixed. + +The main signatures and implementation can be found in the src directory. +The devices directory has some sample output devices (including one for +generating layouts in HTML). Someday, the examples directory will have +some example pretty-printers; for now, you can look in the tests directory. + +For reference, the current OCaml implementation is available at + + https://github.com/ocaml/ocaml/blob/trunk/stdlib/format.mli + https://github.com/ocaml/ocaml/blob/trunk/stdlib/format.ml + +A short tutorial on the OCaml FORMAT pretty pringing library can be +found at + + https://ocaml.org/learn/tutorials/format.html diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/FORMAT mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/FORMAT --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/FORMAT 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/FORMAT 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,18 @@ +%h{ -- open hbox +%v{ -- open vbox +%hov{ -- open hov box +%hv{ -- open hv box +%b{ -- open box +%} -- close box + +%t -- token +%d -- integer +%s -- string +%c -- character +%b -- boolean + + -- space n +\n -- newline +%, -- cut +%; -- break +%_ -- non-breakable space diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-debug-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-debug-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-debug-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-debug-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,63 @@ +(* pp-debug-fn.sml + * + * COPYRIGHT (c) 2017 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A wrapper for the PPStreamFn, which dumps the current PP state prior + * to each operation. + *) + +functor PPDebugFn (PP : sig + include PP_STREAM + val dump : (TextIO.outstream * stream) -> unit + end) : sig + include PP_STREAM + val debugStrm : TextIO.outstream ref + end = struct + + type device = PP.device + type stream = PP.stream + type token = PP.token + type style = PP.style + datatype indent = datatype PP.indent + + val debugStrm = ref TextIO.stdErr + + fun debug name f strm arg = ( + TextIO.output(!debugStrm, concat["*** ", name, ": "]); + PP.dump (!debugStrm, strm); + TextIO.flushOut(!debugStrm); + f strm arg) + fun debug' name f strm = ( + TextIO.output(!debugStrm, concat["*** ", name, ": "]); + PP.dump (!debugStrm, strm); + TextIO.flushOut(!debugStrm); + f strm) + + val openStream = PP.openStream + val flushStream = debug' "flushStream" PP.flushStream + val closeStream = debug' "closeStream" PP.closeStream + val getDevice = PP.getDevice + + val openHBox = debug' "openHBox" PP.openHBox + val openVBox = debug "openVBox" PP.openVBox + val openHVBox = debug "openHVBox" PP.openHVBox + val openHOVBox = debug "openHOVBox" PP.openHOVBox + val openBox = debug "openBox" PP.openBox + val closeBox = debug' "closeBox" PP.closeBox + + val token = debug "token" PP.token + val string = debug "string" PP.string + + val pushStyle = PP.pushStyle + val popStyle = PP.popStyle + + val break = debug "break" PP.break + val space = debug "space" PP.space + val cut = debug' "cut" PP.cut + val newline = debug' "newline" PP.newline + val nbSpace = debug "nbSpace" PP.nbSpace + val control = debug "control" PP.control + + end; + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-desc-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-desc-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-desc-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-desc-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,72 @@ +(* pp-desc-fn.sml + * + * COPYRIGHT (c) 2017 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This functor implements a declarative way to specify pretty-printing + * (see pp-desc-sig.sml). + *) + +functor PPDescFn (S : PP_STREAM) : PP_DESC = + struct + + structure PPS = S + + type token = PPS.token + type style = PPS.style + type indent = PPS.indent + + (* The pp_desc type is a concrete representation of a PP layout. *) + datatype pp_desc + = HBox of pp_desc list + | VBox of (indent * pp_desc list) + | HVBox of (indent * pp_desc list) + | HOVBox of (indent * pp_desc list) + | Box of (indent * pp_desc list) + | Token of token + | String of string + | Style of (style * pp_desc list) + | Break of {nsp : int, offset : int} + | NewLine + | NBSpace of int + | Control of (PPS.device -> unit) + + (* pretty print a description *) + fun description (strm, ppd) = let + fun pp (HBox l) = (PPS.openHBox strm; ppList l; PPS.closeBox strm) + | pp (VBox(i, l)) = (PPS.openVBox strm i; ppList l; PPS.closeBox strm) + | pp (HVBox(i, l)) = (PPS.openHVBox strm i; ppList l; PPS.closeBox strm) + | pp (HOVBox(i, l)) = (PPS.openHOVBox strm i; ppList l; PPS.closeBox strm) + | pp (Box(i, l)) = (PPS.openBox strm i; ppList l; PPS.closeBox strm) + | pp (Token tok) = PPS.token strm tok + | pp (String s) = PPS.string strm s + | pp (Style(sty, l)) = ( + PPS.pushStyle(strm, sty); ppList l; PPS.popStyle strm) + | pp (Break brk) = PPS.break strm brk + | pp NewLine = PPS.newline strm + | pp (NBSpace n) = PPS.nbSpace strm n + | pp (Control ctlFn) = PPS.control strm ctlFn + and ppList [] = () + | ppList (item::r) = (pp item; ppList r) + in + pp ppd + end + + (* exported PP description constructors *) + val hBox = HBox + val vBox = VBox + val hvBox = HVBox + val hovBox = HOVBox + val box = Box + val token = Token + val string = String + val style = Style + val break = Break + fun space n = Break{nsp = n, offset = 0} + val cut = Break{nsp = 0, offset = 0} + val newline = NewLine + val nbSpace = NBSpace + val control = Control + + end; + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-desc-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-desc-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-desc-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-desc-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,37 @@ +(* pp-desc-sig.sml + * + * COPYRIGHT (c) 2017 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This interface provides a declarative way to specify pretty-printing. + *) + +signature PP_DESC = + sig + structure PPS : PP_STREAM + + type pp_desc + + val hBox : pp_desc list -> pp_desc + val vBox : (PPS.indent * pp_desc list) -> pp_desc + val hvBox : (PPS.indent * pp_desc list) -> pp_desc + val hovBox : (PPS.indent * pp_desc list) -> pp_desc + val box : (PPS.indent * pp_desc list) -> pp_desc + + val token : PPS.token -> pp_desc + val string : string -> pp_desc + + val style : (PPS.style * pp_desc list) -> pp_desc + + val break : {nsp : int, offset : int} -> pp_desc + val space : int -> pp_desc + val cut : pp_desc + val newline : pp_desc + val nbSpace : int -> pp_desc + + val control : (PPS.device -> unit) -> pp_desc + + val description : PPS.stream * pp_desc -> unit + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-device-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-device-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-device-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-device-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,93 @@ +(* pp-device-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A pretty-printer device is an abstraction of an output stream. + *) + +signature PP_DEVICE = + sig + + type device + (* a device is an abstraction of an output stream. *) + + type style + (* an abstraction of font and color information. For devices that + * support styled text, they should maintain a stack of styles, with + * the top of stack being the "current" style. Implementers of this + * signature should extend it with functions for creating style values. + *) + + + (***** Style operations *****) + + val sameStyle : (style * style) -> bool + (* are two styles the same? *) + + val pushStyle : (device * style) -> unit + val popStyle : device -> unit + (* push/pop a style from the devices style stack. A pop on an + * empty style stack is a nop. + *) + + val defaultStyle : device -> style + (* the default style for the device (this is the current style, + * if the style stack is empty). + *) + + + (***** Device properties ***** + ** + ** Note that the pretty-printer stream may cache these values, so that + ** changing them mid-flight may not affect existing pretty-printing + ** streams. Devices may also not support various features, in which + ** case, the `set` functions are no-ops. + **) + + (* the maximum printing depth (in number of open boxes); `NONE` is + * interpreted as no limit. + *) + val maxDepth : device -> int option + val setMaxDepth : device * int option -> unit + + (* the sized string to print in place of boxes when the maximum depth is reached. *) + val ellipses : device -> string * int + val setEllipses : device * string -> unit + val setEllipsesWithSz : device * string * int -> unit + + (* the width of the line for the device; `NONE` is infinite *) + val lineWidth : device -> int option + val setLineWidth : device * int option -> unit + + (* the suggested maximum width of indentation; `NONE` is interpreted as no limit. *) + val maxIndent : device -> int option + val setMaxIndent : device * int option -> unit + + (* the suggested maximum width of text on a line (i.e., not counting indentation). + * `NONE` is interpreted as no limit. + * NOTE: the pretty printer currently ignores this value. + *) + val textWidth : device -> int option + val setTextWidth : device * int option -> unit + + + (***** Output operations *****) + + val indent : (device * int) -> unit + (* output an indentation of the given width to the device *) + + val space : (device * int) -> unit + (* output some number of spaces to the device *) + + val newline : device -> unit + (* output a new-line to the device *) + + val string : (device * string) -> unit + val char : (device * char) -> unit + (* output a string/character in the current style to the device *) + + val flush : device -> unit + (* if the device is buffered, then flush any buffered output *) + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-stream-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-stream-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-stream-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-stream-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,569 @@ +(* pp-stream-fn.sml + * + * COPYRIGHT (c) 2017 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * The implementation of PP streams, where all the action is. + *) + +functor PPStreamFn ( + structure Token : PP_TOKEN + structure Device : PP_DEVICE + sharing type Token.style = Device.style +(** + ) : PP_STREAM = +**) + ) : sig + include PP_STREAM + val dump : (TextIO.outstream * stream) -> unit + end = struct + + structure D = Device + structure T = Token + structure Q = Queue + + (* imperative stacks *) + structure Stk :> sig + type 'a t + val new : unit -> 'a t (* create a new stack *) + val clear : 'a t -> unit (* reset the stack to empty *) + val push : 'a t * 'a -> unit (* push an item *) + val pop : 'a t -> 'a option (* pop an item (`NONE` on empty) *) + val top : 'a t -> 'a option (* top of stack or `NONE` *) + val discard : 'a t -> unit (* discard top element (or nop on empty) *) + val toList : 'a t -> 'a list (* list of items; top first *) + end = struct + type 'a t = 'a list ref + fun new () : 'a t = ref[] + fun clear (stk : 'a t) = stk := [] + fun push (stk : 'a t, x) = stk := x :: !stk + fun pop (stk : 'a t) = (case !stk + of [] => NONE + | x::r => (stk := r; SOME x) + (* end case *)) + fun top (stk : 'a t) = (case !stk of [] => NONE | x::_ => SOME x) + fun discard (stk : 'a t) = (case !stk of [] => () | _::r => stk := r) + fun toList (stk : 'a t) = !stk + end + + type device = D.device + type token = T.token + type style = T.style + + datatype indent + = Abs of int (* indent relative to outer indentation *) + | Rel of int (* indent relative to start of box *) + + (**** DATA STRUCTURES ****) + + (* tokens represent pending pretty-printing operations in the queue *) + datatype pp_token + = TEXT of string (* raw text. This includes tokens. The *) + (* width and style information is taken *) + (* care of when they are inserted in *) + (* queue. *) + | NBSP of int (* some number of non-breakable spaces *) + | BREAK of { (* a potential line break *) + nsp : int, (* width of whitespace used if there is no break *) + offset : int (* indentation offset of next line if there is a break *) + } + | BEGIN of { (* the beginning of a box *) + indent : indent, (* the box's indentation mode and width *) + ty : box_ty (* the type of box *) + } + | END (* the end of a box *) + | PUSH_STYLE of style (* push a style on the style stack *) + | POP_STYLE (* pop a style off of the style stack *) + | NL (* hard newline *) + | IF_NL (* [unimplemented] *) + | CTL of (device -> unit) (* device control operation *) + + (* the types of boxes *) + and box_ty + = HBOX (* horizontal box: breaks map to spaces *) + | VBOX (* vertical box: break map to newlines *) + | HVBOX (* horizontal/vertical box: like an HBOX if the stuff fits, + * otherwise like a VBOX. + *) + | HOVBOX (* packing box: breaks are converted to spaces when they + * fix; otherwise line breaks are introduced. + *) + | BOX (* structural box: like a packing box, but breaks are mapped + * to newlines when the result of doing so would move the + * indent to the left. + *) + | FITS (* internal marker for boxes that have been determined to + * fit on the current line. + *) + + type pp_queue_elem = { (* elements of the PP queue *) + tok : pp_token, (* the element *) + sz : int ref, (* size of block (set when known) *) + len : int (* the display length of the token for strings and breaks; + * all other tokens have len = 0. + *) + } + + datatype stream = PP of { + dev : device, (* the underlying device *) + closed : bool ref, (* set to true, when the stream is *) + (* closed *) + width : int, (* the width of the device *) + maxIndent : int, (* the maximum indentation allowed *) + maxDepth : int, (* maximum nesting depth of open boxes *) + spaceLeft : int ref, (* space left on current line *) + curIndent : int ref, (* current indentation *) + curDepth : int ref, (* current nesting level of boxes. *) + leftTot : int ref, (* total width of tokens already printed *) + rightTot : int ref, (* total width of tokens ever inserted *) + (* into the queue. *) + newline : bool ref, (* `true` when we are at the start of a new line *) + queue : pp_queue_elem Q.queue, (* the queue of pending tokens *) + fmtStk : (box_ty * int) Stk.t, (* active blocks. The int is the indentation *) + (* of the block *) + scanStk + : (int * pp_queue_elem) Stk.t, + styleStk : style Stk.t + } + + (**** DEBUGGING FUNCTIONS ****) + structure F = Format + fun boxTypeToString HBOX = "HBOX" + | boxTypeToString VBOX = "VBOX" + | boxTypeToString HVBOX = "HVBOX" + | boxTypeToString HOVBOX = "HOVBOX" + | boxTypeToString BOX = "BOX" + | boxTypeToString FITS = "FITS" + fun indentToString (Abs n) = concat["Abs ", Int.toString n] + | indentToString (Rel n) = concat["Rel ", Int.toString n] + fun tokToString (TEXT s) = concat["TEXT \"", String.toString s, "\""] + | tokToString (NBSP n) = concat["NBSP ", Int.toString n] + | tokToString (BREAK{nsp, offset}) = + F.format "BREAK{nsp=%d, offset=%d}" [F.INT nsp, F.INT offset] + | tokToString (BEGIN{indent, ty}) = F.format "BEGIN{indent=%s, ty=%s}" [ + F.STR(indentToString indent), F.STR(boxTypeToString ty) + ] + | tokToString END = "END" + | tokToString (PUSH_STYLE _) = "PUSH_STYLE _" + | tokToString POP_STYLE = "POP_STYLE" + | tokToString NL = "NL" + | tokToString IF_NL = "IF_NL" + | tokToString (CTL f) = "CTL _" + fun qelemToString {tok, sz, len} = F.format "{tok=%s, sz=%d, len=%d}" [ + F.STR(tokToString tok), F.INT(!sz), F.INT len + ] + fun scanElemToString (n, elem) = + F.format "(%d, %s)" [F.INT n, F.STR(qelemToString elem)] + fun fmtElemToString (ty, n) = + F.format "(%s, %d)" [F.STR(boxTypeToString ty), F.INT n] + fun dump (outStrm, PP pp) = let + fun pr s = TextIO.output(outStrm, s) + fun prf (fmt, items) = pr(F.format fmt items) + fun prl fmtElem [] = pr "[]" + | prl fmtElem l = pr(ListFormat.fmt { + init = "[\n ", final = "]", sep = "\n ", fmt = fmtElem + } l) + in + pr ("BEGIN\n"); + prf (" width = %3d, spaceLeft = %3d\n", [ + F.INT(#width pp), F.INT(!(#spaceLeft pp)) + ]); + prf (" curIndent = %3d, curDepth = %3d\n", [ + F.INT(!(#curIndent pp)), F.INT(!(#curDepth pp)) + ]); + prf (" leftTot = %3d, rightTot = %3d\n", [ + F.INT(!(#leftTot pp)), F.INT(!(#rightTot pp)) + ]); + pr " queue = "; prl qelemToString (Q.contents(#queue pp)); pr "\n"; + pr " fmtStk = "; prl fmtElemToString (Stk.toList(#fmtStk pp)); pr "\n"; + pr " scanStk = "; prl scanElemToString (Stk.toList(#scanStk pp)); pr "\n"; + pr ("END\n") + end + + (**** UTILITY FUNCTIONS ****) + + (* use as a limit value for when the device does not specify a limit *) + val infinity = (case Int.maxInt of SOME n => n-1 | _ => 1000000) + + (* output text to the device; note that the size is specified separately, + * since it might be different from the actual string length (e.g., UTF8 + * multibyte characters) + *) + fun output (_, "", 0) = () + | output (PP{dev, spaceLeft, newline, ...}, s, sz) = ( + spaceLeft := !spaceLeft - sz; + newline := false; + D.string(dev, s)) + + (* output a newline to the device *) + fun outputNL (PP{dev, newline, ...}) = ( + newline := true; + D.newline dev) + +(* TODO: add `indent` function to device API *) + (* output indentation to the device *) + fun outputIndent (_, 0) = () + | outputIndent (PP{dev, ...}, n) = D.space (dev, n) + + (* output non-indent spaces to the device *) + fun blanks (_, 0) = () + | blanks (PP{dev, ...}, n) = D.space (dev, n) + + (* add a token to the pretty-printer queue *) + fun enqueueTok (PP{rightTot, queue, ...}, tok) = ( + rightTot := !rightTot + #len tok; + Q.enqueue(queue, tok)) + + (* format a break as a newline; indenting the new line. + * strm -- PP stream + * offset -- the extra indent amount supplied by the break + * wid -- the remaining line width at the opening of the + * innermost enclosing box. + *) + fun breakNewLine (strm, offset, wid) = let + val PP{width, maxIndent, curIndent, spaceLeft, ...} = strm + (* limit indentation to maximum amount *) + val indent = Int.min(maxIndent, (width - wid) + offset) + in + outputNL strm; + curIndent := indent; + spaceLeft := width - indent; + outputIndent (strm, indent) + end + + (* format a break as spaces. + * strm -- PP stream + * nsp -- number of spaces to output. + *) + fun breakSameLine (strm as PP{spaceLeft, ...}, nsp) = ( + spaceLeft := !spaceLeft - nsp; + blanks (strm, nsp)) + + (* force a line break when opening a box would make the indentation larger than + * the limit. + *) + fun forceLineBreak (strm as PP{fmtStk, spaceLeft, ...}) = (case Stk.top fmtStk + of SOME(ty, wid) => if (wid > !spaceLeft) + then (case ty + of (FITS | HBOX) => () + | _ => breakNewLine (strm, 0, wid) + (* end case *)) + else () + | NONE => outputNL strm + (* end case *)) + + (* skip a token *) + fun skip (PP{queue, leftTot, spaceLeft, ...}) = (case Q.next queue + of NONE => () + | SOME{tok, sz, len} => ( + leftTot := !leftTot - len; + spaceLeft := !spaceLeft + !sz) + (* end case *)) + + (* return the current style of the PP stream *) + fun currentStyle (PP{styleStk, dev, ...}) = (case Stk.top styleStk + of NONE => D.defaultStyle dev + | SOME sty => sty + (* end case *)) + + (**** FORMATTING ****) + + (* `format (strm, sz, tok)` formats a PP token that has the specified size *) + fun format (strm, sz, tok) = ( + case tok + of (TEXT s) => output (strm, s, sz) + | (NBSP n) => let + val PP{spaceLeft, ...} = strm + in + spaceLeft := !spaceLeft - sz; + blanks (strm, n) + end + | (BREAK{nsp, offset}) => let + val PP{fmtStk, spaceLeft, width, curIndent, newline, ...} = strm + in + case Stk.top fmtStk + of SOME(HBOX, wid) => breakSameLine (strm, nsp) + | SOME(VBOX, wid) => breakNewLine (strm, offset, wid) + | SOME(HVBOX, wid) => breakNewLine (strm, offset, wid) + | SOME(HOVBOX, wid) => if (sz > !spaceLeft) + then breakNewLine (strm, offset, wid) + else breakSameLine (strm, nsp) + | SOME(BOX, wid) => + if !newline + then breakSameLine (strm, nsp) + else if (sz > !spaceLeft) + then breakNewLine (strm, offset, wid) + else if (!curIndent > (width - wid) + offset) + then breakNewLine (strm, offset, wid) + else breakSameLine (strm, nsp) + | SOME(FITS, wid) => breakSameLine (strm, nsp) + | NONE => () (* no open box *) + (* end case *) + end + | (BEGIN{indent, ty}) => let + val PP{maxIndent, curIndent, spaceLeft, width, fmtStk, ...} = strm + val _ = if (width - !spaceLeft) > maxIndent + then forceLineBreak strm + else () + val spaceLeft' = !spaceLeft + (* compute offset from right margin of this block's indent *) + val offset = (case indent + of (Rel off) => spaceLeft' - off + | (Abs off) => (case Stk.top fmtStk + of SOME(_, wid) => wid - off + | NONE => width - (!curIndent + off) + (* end case *)) + (* end case *)) + val ty' = (case ty + of VBOX => VBOX + | _ => if (sz > spaceLeft') then ty else FITS + (* end case *)) + in + Stk.push (fmtStk, (ty', offset)) + end + | END => let + val PP{fmtStk, ...} = strm + in + Stk.discard fmtStk + end + | (PUSH_STYLE sty) => let + val PP{dev, ...} = strm + in + D.pushStyle (dev, sty) + end + | POP_STYLE => let + val PP{dev, ...} = strm + in + D.popStyle dev + end + | NL => let + val PP{fmtStk, ...} = strm + in + case Stk.top fmtStk + of SOME(_, wid) => breakNewLine (strm, 0, wid) + | NONE => outputNL strm + (* end case *) + end + | IF_NL => let + val PP{newline, ...} = strm + in +(* NOTE: the Ocaml version tests if !curIndent = width - !spaceLeft, but the newline + * flag should be true in that case. + *) + if !newline then () else skip strm + end + | (CTL ctlFn) => let + val PP{dev, ...} = strm + in + ctlFn dev + end + (* end case *)) + + fun advanceLeft strm = let + val PP{spaceLeft, leftTot, rightTot, queue, ...} = strm + fun advance () = (case Q.peek queue + of (SOME{tok, sz=ref sz, len}) => + if ((sz >= 0) orelse (!rightTot - !leftTot >= !spaceLeft)) + then ( + ignore(Q.dequeue queue); + format (strm, if sz < 0 then infinity else sz, tok); + leftTot := len + !leftTot; + advance()) + else () + | NONE => () + (* end case *)) + in + advance () + end + + fun enqueueAndAdvance (strm, tok) = ( + enqueueTok (strm, tok); + advanceLeft strm) + + fun enqueueTokenWithLen (strm, tok, len) = + enqueueAndAdvance (strm, {sz = ref len, len = len, tok = tok}) + + fun enqueueStringWithLen (strm, s, len) = + enqueueTokenWithLen (strm, TEXT s, len) + + fun enqueueToken (strm, tok) = enqueueTokenWithLen (strm, tok, 0) + + (* the scan stack always has this element on its bottom *) + val scanStkBot = (~1, {sz = ref ~1, tok = TEXT "", len = 0}) + + (* clear the scan stack *) + fun clearScanStk (PP{scanStk, ...}) = ( + Stk.clear scanStk; + Stk.push(scanStk, scanStkBot)) + + (* Set the size of the element on the top of the scan stack. The isBreak + * flag is set to true for breaks and false for boxes. + *) + fun setSize (strm as PP{leftTot, rightTot, scanStk, ...}, isBreak) = ( + case Stk.top scanStk + of NONE => raise Fail "PPStreamFn:setSize: impossible: scanStk is empty" + | SOME(leftTot', elem) => + (* check for obsolete elements *) + if (leftTot' < !leftTot) + then clearScanStk strm + else (case (elem, isBreak) + of ({sz, tok=BREAK _, ...}, true) => ( + sz := !sz + !rightTot; + Stk.discard scanStk) + | ({sz, tok=BEGIN _, ...}, false) => ( + sz := !sz + !rightTot; + Stk.discard scanStk) + | _ => () + (* end case *)) + (* end case *)) + + fun pushScanElem (strm as PP{scanStk, rightTot, ...}, setSz, tok) = ( + enqueueTok (strm, tok); + if setSz then setSize (strm, true) else (); + Stk.push (scanStk, (!rightTot, tok))) + + (* Open a new box *) + fun ppOpenBox (strm, indent, boxTy) = let + val PP{dev, rightTot, maxDepth, curDepth, ...} = strm + in + curDepth := !curDepth + 1; + if (!curDepth < maxDepth) + then pushScanElem (strm, false, { + sz = ref(~(!rightTot)), + tok = BEGIN{indent=indent, ty=boxTy}, + len = 0 + }) + else if (!curDepth = maxDepth) + then let + val (s, len) = D.ellipses dev + in + enqueueStringWithLen (strm, s, len) + end + else () + end + + (* the root box, which is always open *) + fun openSysBox strm = ppOpenBox (strm, Rel 0, HOVBOX) + + (* close a box *) + fun ppCloseBox (strm as PP{maxDepth, curDepth as ref depth, ...}) = + if (depth <= 1) + then raise Fail "unmatched close box" + else if (depth < maxDepth) + then ( + enqueueTok (strm, {sz = ref 0, tok = END, len = 0}); + setSize (strm, true); + setSize (strm, false); + curDepth := depth-1) + else curDepth := depth-1 + + fun ppBreak (strm as PP{rightTot, ...}, arg) = ( + pushScanElem (strm, true, { + sz = ref(~(!rightTot)), tok = BREAK arg, len = #nsp arg + })) + + fun ppInit (strm as PP pp) = ( + Q.clear(#queue pp); + clearScanStk strm; + #spaceLeft pp := #width pp; + #curIndent pp := 0; + #curDepth pp := 0; + #leftTot pp := 1; + #rightTot pp := 1; + #newline pp := true; + Stk.clear (#fmtStk pp); + Stk.clear (#styleStk pp); + openSysBox strm) + + fun ppNewline strm = + enqueueAndAdvance (strm, {sz = ref 0, tok = NL, len = 0}) + + fun ppFlush (strm as PP{dev, curDepth, rightTot, ...}, withNL) = let + fun closeBoxes () = if (!curDepth > 1) + then (ppCloseBox strm; closeBoxes()) + else () + in + closeBoxes (); + rightTot := infinity; + advanceLeft strm; + if withNL then outputNL strm else (); + D.flush dev; + ppInit strm + end + + (**** USER FUNCTIONS ****) + fun openStream d = let + fun limit optInt = Option.getOpt(optInt, infinity) + val width = limit(D.lineWidth d) + val maxIndent = Int.min(limit(D.maxIndent d), width-1) + val maxDepth = Int.max(limit(D.maxIndent d), 2) + val strm = PP{ + dev = d, + closed = ref false, + width = width, + maxIndent = maxIndent, + maxDepth = maxDepth, + spaceLeft = ref 0, + curIndent = ref 0, + curDepth = ref 0, + leftTot = ref 1, (* why 1 ? *) + rightTot = ref 1, (* why 1 ? *) + newline = ref true, + queue = Q.mkQueue(), + fmtStk = Stk.new(), + scanStk = Stk.new(), + styleStk = Stk.new() + } + in + if (width < 0) orelse (maxIndent < 0) orelse (maxDepth < 0) + orelse (width < maxIndent) + then raise Size + else (); + ppInit strm; + strm + end + + fun flushStream strm = ppFlush(strm, false) + fun closeStream (strm as PP{closed, ...}) = (flushStream strm; closed := true) + fun getDevice (PP{dev, ...}) = dev + + fun openHBox strm = ppOpenBox (strm, Abs 0, HBOX) + fun openVBox strm indent = ppOpenBox (strm, indent, VBOX) + fun openHVBox strm indent = ppOpenBox (strm, indent, HVBOX) + fun openHOVBox strm indent = ppOpenBox (strm, indent, HOVBOX) + fun openBox strm indent = ppOpenBox (strm, indent, BOX) + fun closeBox strm = ppCloseBox strm + + fun token (strm as PP{dev, ...}) t = let + val tokStyle = T.style t + in + if (D.sameStyle(currentStyle strm, tokStyle)) + then enqueueStringWithLen (strm, T.string t, T.size t) + else ( + enqueueToken (strm, PUSH_STYLE tokStyle); + enqueueStringWithLen (strm, T.string t, T.size t); + enqueueToken (strm, POP_STYLE)) + end + fun string strm s = enqueueStringWithLen(strm, s, size s) + + fun pushStyle (strm as PP{styleStk, ...}, sty) = ( + if (D.sameStyle(currentStyle strm, sty)) + then () + else enqueueToken (strm, PUSH_STYLE sty); + Stk.push (styleStk, sty)) + fun popStyle (strm as PP{styleStk, ...}) = (case Stk.pop styleStk + of NONE => raise Fail "PP: unmatched popStyle" + | SOME sty => if (D.sameStyle(currentStyle strm, sty)) + then () + else enqueueToken (strm, POP_STYLE) + (* end case *)) + + fun break strm arg = ppBreak (strm, arg) + fun space strm n = break strm {nsp=n, offset=0} + fun cut strm = break strm {nsp=0, offset=0} + fun newline strm = ppNewline strm + fun nbSpace strm n = enqueueTokenWithLen (strm, NBSP n, n) + + fun control strm ctlFn = enqueueToken (strm, CTL ctlFn) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-stream-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-stream-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-stream-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-stream-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,81 @@ +(* pp-stream-sig.sml + * + * COPYRIGHT (c) 2017 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This interface provides a output stream interface to pretty printing. + *) + +signature PP_STREAM = + sig + type device + type stream + + type token + (* tokens are an abstraction of strings (allowing for different + * widths and style information). + *) + type style + + datatype indent + = Abs of int (* indent relative to outer indentation *) + | Rel of int (* indent relative to start of box *) + + val openStream : device -> stream + val flushStream : stream -> unit + val closeStream : stream -> unit + val getDevice : stream -> device + + (* open an horizontal box (HBox); breaks and spaces are mapped to spaces, + * even if the line width is exceeded. + *) + val openHBox : stream -> unit + + (* open a vertical box (VBox); breaks and spaces are mapped to newlines *) + val openVBox : stream -> indent -> unit + + (* open a horizontal/vertical box; this box behaves like an HBox, unless the + * contents does not fit on the line (or there is an explicit newline), in + * which case it behaves like a VBox. + *) + val openHVBox : stream -> indent -> unit + + (* open a horizontal or vertical box; the contents are layed out in horizontal + * mode until the line is full, at which point a line break is introduced and + * a new line is started. This box is essentially a paragraph box. + *) + val openHOVBox : stream -> indent -> unit + + (* similar to the `openHOVBox` function, except that breaks split the current + * line if splitting would move to the left. + *) + val openBox : stream -> indent -> unit + + (* close the most recently opened box. Note that every openBox call must be + * matched by a closeBox. + *) + val closeBox : stream -> unit + + val token : stream -> token -> unit + val string : stream -> string -> unit + + val pushStyle : (stream * style) -> unit + val popStyle : stream -> unit + + (* `break strm {nsp, offset}` expands to either `nsp` spaces or + * a line break with the specified indentation `offset`. + *) + val break : stream -> {nsp : int, offset : int} -> unit + (* `space strm n` is equivalent to `break strm {nsp=n, offset=0}` *) + val space : stream -> int -> unit + (* `cut strm` is equivalent to `break{nsp=0, offset=0}` *) + val cut : stream -> unit + (* break the current line *) + val newline : stream -> unit + (* emits a nonbreakable space *) + val nbSpace : stream -> int -> unit + + val control : stream -> (device -> unit) -> unit + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-token-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-token-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/pp-token-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/pp-token-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,24 @@ +(* pp-token-sig.sml + * + * COPYRIGHT (c) 2017 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * User-defined pretty-printer tokens. Tokens pair text with style information + * for convinence. For example, one could define tokens for the keywords of + * a language. + *) + +signature PP_TOKEN = + sig + type token + type style + + (* returns the text of the token *) + val string : token -> string + (* returns the associated style of the token *) + val style : token -> style + (* returns the size of the token's text *) + val size : token -> int + + end; + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/sources.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/sources.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/src/sources.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/src/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,35 @@ +(* sources.cm + * + * COPYRIGHT (c) 2019 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Sources file for Pretty Printing Library. + *) + +Group + + signature PP_DESC + signature PP_DEVICE + signature PP_TOKEN + signature PP_STREAM + + functor PPStreamFn + functor PPDescFn + functor PPDebugFn + +is +#if defined(NEW_CM) + $/basis.cm + $/smlnj-lib.cm +#else + ../../Util/smlnj-lib.cm +#endif + + pp-device-sig.sml + pp-token-sig.sml + pp-desc-fn.sml + pp-stream-sig.sml + pp-stream-fn.sml + pp-debug-fn.sml + pp-desc-sig.sml + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/tests/base.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/tests/base.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/tests/base.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/tests/base.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,37 @@ +(* base.sml + * + * COPYRIGHT (c) 2013 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Some common code for testing. + *) + +CM.make "sources.cm"; (* to compile and load the PP library *) + +structure TextToken = + struct + type token = string + type style = unit + fun string t = t + fun style t = () + fun size t = String.size t + end; + +structure PP = PPDebugFn(PPStreamFn( + structure Token = TextToken + structure Device = SimpleTextIODev)); + +fun withPP (name, wid) ppFn = let + val saveStrm = !PP.debugStrm + val _ = PP.debugStrm := TextIO.openAppend("out") + val ppStrm = + PP.openStream(SimpleTextIODev.openDev{dst=TextIO.stdOut, wid=wid}) + in + print(concat[name, ": width = ", Int.toString wid, "\n"]); + ppFn ppStrm; + PP.closeStream ppStrm; + print "\n"; + TextIO.closeOut (!PP.debugStrm); + PP.debugStrm := saveStrm + end; + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/tests/sources.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/tests/sources.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/tests/sources.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/tests/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,24 @@ +(* sources.cm + * + * COPYRIGHT (c) 2019 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +Library + functor PPStreamFn + functor PPDebugFn + structure SimpleTextIODev + structure HTMLDev + + structure HTML + structure PrHTML +is +#if defined(NEW_CM) + $/basis.cm + $/html-lib.cm + $/pp-lib.cm +#else + ../../HTML/html-lib.cm + ../src/sources.cm + ../devices/sources.cm +#endif diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/tests/test-html.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/tests/test-html.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/tests/test-html.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/tests/test-html.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,196 @@ +(* test.sml + * + * COPYRIGHT (c) 1997 Bell Labs, Lucent Technologies. + *) + +CM.make(); (* to compile and load the PP library *) + +structure TextToken = + struct + type token = string + type style = HTMLDev.style + fun string t = t + fun style t = HTMLDev.styleTT + fun size t = String.size t + end; + +structure PP = PPDebugFn(PPStreamFn( + structure Token = TextToken + structure Device = HTMLDev)); + +fun kw strm s = ( + PP.pushStyle(strm, HTMLDev.styleB); + PP.string strm s; + PP.popStyle strm) + +fun withPP (name, wid) ppFn = let + val saveStrm = !PP.debugStrm + val _ = PP.debugStrm := TextIO.openAppend("out") + val ppDev = HTMLDev.openDev{wid=wid, textWid=NONE} + val ppStrm = PP.openStream ppDev + in + PP.pushStyle(ppStrm, HTMLDev.styleTT); + ppFn ppStrm; + PP.popStyle ppStrm; + PP.closeStream ppStrm; + PrHTML.prHTML { + putc = fn c => TextIO.output1 (TextIO.stdOut, c), + puts = fn s => TextIO.output (TextIO.stdOut, s) + } (HTML.HTML{ + version = NONE, + head = [HTML.Head_TITLE name], + body = HTML.BODY{ + background = NONE, bgcolor = NONE, text = NONE, + link = NONE, vlink = NONE, alink = NONE, + content = HTML.TextBlock(HTMLDev.done ppDev) + } + }); + TextIO.closeOut (!PP.debugStrm); + PP.debugStrm := saveStrm + end; + +local + fun repeat c n = StringCvt.padLeft c n "" + fun simple1 (name, w, n, openBox) () = + withPP (name, w) (fn strm => ( + openBox strm (PP.Rel 0); + PP.string strm (repeat #"x" n); + PP.cut strm; + PP.string strm (repeat #"y" n); + PP.cut strm; + PP.string strm (repeat #"z" n); + PP.closeBox strm)) + fun simple2 (name, w, n, openBox1, openBox2) () = + withPP (name, w) (fn strm => ( + openBox1 strm (PP.Rel 0); + PP.string strm (repeat #"v" n); + PP.cut strm; + openBox2 strm (PP.Abs 2); + PP.string strm (repeat #"w" n); + PP.cut strm; + PP.string strm (repeat #"x" n); + PP.cut strm; + PP.string strm (repeat #"y" n); + PP.closeBox strm; + PP.cut strm; + PP.string strm (repeat #"z" n); + PP.closeBox strm)) +fun openHBox strm _ = PP.openHBox strm +in +val t01a = simple1 ("Test 01a [hbox]", 10, 2, openHBox) +val t01b = simple1 ("Test 01b [hbox]", 10, 3, openHBox) +val t02a = simple1 ("Test 02a [vbox]", 10, 2, PP.openVBox) +val t02b = simple1 ("Test 02b [vbox]", 10, 3, PP.openVBox) +val t03a = simple1 ("Test 03a [hvbox]", 10, 2, PP.openHVBox) +val t03b = simple1 ("Test 03b [hvbox]", 10, 4, PP.openHVBox) +val t04a = simple1 ("Test 04a [hovbox]", 10, 2, PP.openHOVBox) +val t04b = simple1 ("Test 04b [hovbox]", 10, 4, PP.openHOVBox) +val t05a = simple1 ("Test 05a [box]", 10, 2, PP.openBox) +val t05b = simple1 ("Test 05b [box]", 10, 4, PP.openBox) + +val t11a = simple2 ("Test 11a [hbox/hbox]", 10, 2, openHBox, openHBox) +val t11b = simple2 ("Test 11b [hbox/hbox]", 10, 3, openHBox, openHBox) +val t11c = simple2 ("Test 11c [hbox/hbox]", 10, 4, openHBox, openHBox) +val t12a = simple2 ("Test 12a [hbox/vbox]", 10, 2, openHBox, PP.openVBox) +val t12b = simple2 ("Test 12b [hbox/vbox]", 10, 3, openHBox, PP.openVBox) +val t12c = simple2 ("Test 12c [hbox/vbox]", 10, 4, openHBox, PP.openVBox) +val t13a = simple2 ("Test 13a [hbox/hvbox]", 10, 2, openHBox, PP.openHVBox) +val t13b = simple2 ("Test 13b [hbox/hvbox]", 10, 3, openHBox, PP.openHVBox) +val t13c = simple2 ("Test 13c [hbox/hvbox]", 10, 4, openHBox, PP.openHVBox) +val t14a = simple2 ("Test 14a [hbox/hovbox]", 10, 2, openHBox, PP.openHOVBox) +val t14b = simple2 ("Test 14b [hbox/hovbox]", 10, 3, openHBox, PP.openHOVBox) +val t14c = simple2 ("Test 14c [hbox/hovbox]", 10, 4, openHBox, PP.openHOVBox) +val t15a = simple2 ("Test 15a [hbox/box]", 10, 2, openHBox, PP.openBox) +val t15b = simple2 ("Test 15b [hbox/box]", 10, 3, openHBox, PP.openBox) +val t15c = simple2 ("Test 15c [hbox/box]", 10, 4, openHBox, PP.openBox) +val t16a = simple2 ("Test 16a [vbox/hbox]", 10, 2, PP.openVBox, openHBox) +val t16b = simple2 ("Test 16b [vbox/hbox]", 10, 3, PP.openVBox, openHBox) +val t16c = simple2 ("Test 16c [vbox/hbox]", 10, 4, PP.openVBox, openHBox) +val t17a = simple2 ("Test 17a [vbox/vbox]", 10, 2, PP.openVBox, PP.openVBox) +val t17b = simple2 ("Test 17b [vbox/vbox]", 10, 3, PP.openVBox, PP.openVBox) +val t17c = simple2 ("Test 17c [vbox/vbox]", 10, 4, PP.openVBox, PP.openVBox) +val t18a = simple2 ("Test 18a [vbox/hvbox]", 10, 2, PP.openVBox, PP.openHVBox) +val t18b = simple2 ("Test 18b [vbox/hvbox]", 10, 3, PP.openVBox, PP.openHVBox) +val t18c = simple2 ("Test 18c [vbox/hvbox]", 10, 4, PP.openVBox, PP.openHVBox) +val t19a = simple2 ("Test 19a [vbox/hovbox]", 10, 2, PP.openVBox, PP.openHOVBox) +val t19b = simple2 ("Test 19b [vbox/hovbox]", 10, 3, PP.openVBox, PP.openHOVBox) +val t19c = simple2 ("Test 19c [vbox/hovbox]", 10, 4, PP.openVBox, PP.openHOVBox) +val t20a = simple2 ("Test 20a [vbox/box]", 10, 2, PP.openVBox, PP.openBox) +val t20b = simple2 ("Test 20b [vbox/box]", 10, 3, PP.openVBox, PP.openBox) +val t20c = simple2 ("Test 20c [vbox/box]", 10, 4, PP.openVBox, PP.openBox) +val t21a = simple2 ("Test 21a [hvbox/hbox]", 10, 2, PP.openHVBox, openHBox) +val t21b = simple2 ("Test 21b [hvbox/hbox]", 10, 3, PP.openHVBox, openHBox) +val t21c = simple2 ("Test 21c [hvbox/hbox]", 10, 4, PP.openHVBox, openHBox) +val t22a = simple2 ("Test 22a [hvbox/vbox]", 10, 2, PP.openHVBox, PP.openVBox) +val t22b = simple2 ("Test 22b [hvbox/vbox]", 10, 3, PP.openHVBox, PP.openVBox) +val t22c = simple2 ("Test 22c [hvbox/vbox]", 10, 4, PP.openHVBox, PP.openVBox) +val t23a = simple2 ("Test 23a [hvbox/hvbox]", 10, 2, PP.openHVBox, PP.openHVBox) +val t23b = simple2 ("Test 23b [hvbox/hvbox]", 10, 3, PP.openHVBox, PP.openHVBox) +val t23c = simple2 ("Test 23c [hvbox/hvbox]", 10, 4, PP.openHVBox, PP.openHVBox) +val t24a = simple2 ("Test 24a [hvbox/hovbox]", 10, 2, PP.openHVBox, PP.openHOVBox) +val t24b = simple2 ("Test 24b [hvbox/hovbox]", 10, 3, PP.openHVBox, PP.openHOVBox) +val t24c = simple2 ("Test 24c [hvbox/hovbox]", 10, 4, PP.openHVBox, PP.openHOVBox) +val t25a = simple2 ("Test 25a [hvbox/box]", 10, 2, PP.openHVBox, PP.openBox) +val t25b = simple2 ("Test 25b [hvbox/box]", 10, 3, PP.openHVBox, PP.openBox) +val t25c = simple2 ("Test 25c [hvbox/box]", 10, 4, PP.openHVBox, PP.openBox) +val t26a = simple2 ("Test 26a [hovbox/hbox]", 10, 2, PP.openHOVBox, openHBox) +val t26b = simple2 ("Test 26b [hovbox/hbox]", 10, 3, PP.openHOVBox, openHBox) +val t26c = simple2 ("Test 26c [hovbox/hbox]", 10, 4, PP.openHOVBox, openHBox) +val t27a = simple2 ("Test 27a [hovbox/vbox]", 10, 2, PP.openHOVBox, PP.openVBox) +val t27b = simple2 ("Test 27b [hovbox/vbox]", 10, 3, PP.openHOVBox, PP.openVBox) +val t27c = simple2 ("Test 27c [hovbox/vbox]", 10, 4, PP.openHOVBox, PP.openVBox) +val t28a = simple2 ("Test 28a [hovbox/hvbox]", 10, 2, PP.openHOVBox, PP.openHVBox) +val t28b = simple2 ("Test 28b [hovbox/hvbox]", 10, 3, PP.openHOVBox, PP.openHVBox) +val t28c = simple2 ("Test 28c [hovbox/hvbox]", 10, 4, PP.openHOVBox, PP.openHVBox) +val t29a = simple2 ("Test 29a [hovbox/hovbox]", 10, 2, PP.openHOVBox, PP.openHOVBox) +val t29b = simple2 ("Test 29b [hovbox/hovbox]", 10, 3, PP.openHOVBox, PP.openHOVBox) +val t29c = simple2 ("Test 29c [hovbox/hovbox]", 10, 4, PP.openHOVBox, PP.openHOVBox) +val t30a = simple2 ("Test 30a [hovbox/box]", 10, 2, PP.openHOVBox, PP.openBox) +val t30b = simple2 ("Test 30b [hovbox/box]", 10, 3, PP.openHOVBox, PP.openBox) +val t30c = simple2 ("Test 30c [hovbox/box]", 10, 4, PP.openHOVBox, PP.openBox) +val t31a = simple2 ("Test 31a [box/hbox]", 10, 2, PP.openBox, openHBox) +val t31b = simple2 ("Test 31b [box/hbox]", 10, 3, PP.openBox, openHBox) +val t31c = simple2 ("Test 31c [box/hbox]", 10, 4, PP.openBox, openHBox) +val t32a = simple2 ("Test 32a [box/vbox]", 10, 2, PP.openBox, PP.openVBox) +val t32b = simple2 ("Test 32b [box/vbox]", 10, 3, PP.openBox, PP.openVBox) +val t32c = simple2 ("Test 32c [box/vbox]", 10, 4, PP.openBox, PP.openVBox) +val t33a = simple2 ("Test 33a [box/hvbox]", 10, 2, PP.openBox, PP.openHVBox) +val t33b = simple2 ("Test 33b [box/hvbox]", 10, 3, PP.openBox, PP.openHVBox) +val t33c = simple2 ("Test 33c [box/hvbox]", 10, 4, PP.openBox, PP.openHVBox) +val t34a = simple2 ("Test 34a [box/hovbox]", 10, 2, PP.openBox, PP.openHOVBox) +val t34b = simple2 ("Test 34b [box/hovbox]", 10, 3, PP.openBox, PP.openHOVBox) +val t34c = simple2 ("Test 34c [box/hovbox]", 10, 4, PP.openBox, PP.openHOVBox) +val t35a = simple2 ("Test 35a [box/box]", 10, 2, PP.openBox, PP.openBox) +val t35b = simple2 ("Test 35b [box/box]", 10, 3, PP.openBox, PP.openBox) +val t35c = simple2 ("Test 35c [box/box]", 10, 4, PP.openBox, PP.openBox) +end + +fun t40 () = withPP ("Test 20 [C code]", 20) (fn strm => ( + PP.openHBox strm; + kw strm "if"; + PP.space strm 1; + PP.string strm "(x < y)"; + PP.space strm 1; + PP.string strm "{"; + PP.openHVBox strm (PP.Abs 4); + PP.space strm 1; + PP.string strm "stmt1;"; PP.space strm 1; + PP.openHBox strm; + kw strm "if"; + PP.space strm 1; + PP.string strm "(w < z)"; + PP.space strm 1; + PP.string strm "{"; + PP.openHVBox strm (PP.Abs 4); + PP.space strm 1; PP.string strm "stmt2;"; + PP.space strm 1; PP.string strm "stmt3;"; + PP.space strm 1; PP.string strm "stmt4;"; + PP.closeBox strm; PP.newline strm; + PP.string strm "}"; + PP.closeBox strm; + PP.space strm 1; PP.string strm "stmt5;"; + PP.space strm 1; PP.string strm "stmt6;"; + PP.closeBox strm; PP.newline strm; + PP.string strm "}"; + PP.closeBox strm)); + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/tests/test.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/tests/test.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/tests/test.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/tests/test.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,212 @@ +(* test.sml + * + * COPYRIGHT (c) 1997 Bell Labs, Lucent Technologies. + *) + +use "base.sml"; + +local + fun repeat c n = StringCvt.padLeft c n "" + fun simple1 (name, w, n, openBox) () = + withPP (name, w) (fn strm => ( + openBox strm (PP.Rel 0); + PP.string strm (repeat #"x" n); + PP.cut strm; + PP.string strm (repeat #"y" n); + PP.cut strm; + PP.string strm (repeat #"z" n); + PP.closeBox strm)) +(** + fun simple1 (name, w, n, openBox) () = let + val outS = TextIO.openAppend "out" + fun dump (lab, strm) = (TextIO.output(outS, lab^": "); PP.dump(outS, strm)) + in + TextIO.output(outS, concat["***** ", name, " *****\n"]); + withPP (name, w) (fn strm => ( + dump ("1", strm); + openBox strm (PP.Rel 0); + dump ("2", strm); + PP.string strm (repeat #"x" n); + dump ("3", strm); + PP.cut strm; + dump ("4", strm); + PP.string strm (repeat #"y" n); + dump ("5", strm); + PP.cut strm; + dump ("6", strm); + PP.string strm (repeat #"z" n); + dump ("7", strm); + PP.closeBox strm; + dump ("8", strm))); + TextIO.closeOut outS + end +**) + fun simple2 (name, w, n, openBox1, openBox2) () = + withPP (name, w) (fn strm => ( + openBox1 strm (PP.Rel 0); + PP.string strm (repeat #"v" n); + PP.cut strm; + openBox2 strm (PP.Abs 2); + PP.string strm (repeat #"w" n); + PP.cut strm; + PP.string strm (repeat #"x" n); + PP.cut strm; + PP.string strm (repeat #"y" n); + PP.closeBox strm; + PP.cut strm; + PP.string strm (repeat #"z" n); + PP.closeBox strm)) +fun openHBox strm _ = PP.openHBox strm +in +val t01a = simple1 ("Test 01a [hbox]", 10, 2, openHBox) +val t01b = simple1 ("Test 01b [hbox]", 10, 3, openHBox) +val t02a = simple1 ("Test 02a [vbox]", 10, 2, PP.openVBox) +val t02b = simple1 ("Test 02b [vbox]", 10, 3, PP.openVBox) +val t03a = simple1 ("Test 03a [hvbox]", 10, 2, PP.openHVBox) +val t03b = simple1 ("Test 03b [hvbox]", 10, 4, PP.openHVBox) +val t04a = simple1 ("Test 04a [hovbox]", 10, 2, PP.openHOVBox) +val t04b = simple1 ("Test 04b [hovbox]", 10, 4, PP.openHOVBox) +val t05a = simple1 ("Test 05a [box]", 10, 2, PP.openBox) +val t05b = simple1 ("Test 05b [box]", 10, 4, PP.openBox) + +val t11a = simple2 ("Test 11a [hbox/hbox]", 10, 2, openHBox, openHBox) +val t11b = simple2 ("Test 11b [hbox/hbox]", 10, 3, openHBox, openHBox) +val t11c = simple2 ("Test 11c [hbox/hbox]", 10, 4, openHBox, openHBox) +val t12a = simple2 ("Test 12a [hbox/vbox]", 10, 2, openHBox, PP.openVBox) +val t12b = simple2 ("Test 12b [hbox/vbox]", 10, 3, openHBox, PP.openVBox) +val t12c = simple2 ("Test 12c [hbox/vbox]", 10, 4, openHBox, PP.openVBox) +val t13a = simple2 ("Test 13a [hbox/hvbox]", 10, 2, openHBox, PP.openHVBox) +val t13b = simple2 ("Test 13b [hbox/hvbox]", 10, 3, openHBox, PP.openHVBox) +val t13c = simple2 ("Test 13c [hbox/hvbox]", 10, 4, openHBox, PP.openHVBox) +val t14a = simple2 ("Test 14a [hbox/hovbox]", 10, 2, openHBox, PP.openHOVBox) +val t14b = simple2 ("Test 14b [hbox/hovbox]", 10, 3, openHBox, PP.openHOVBox) +val t14c = simple2 ("Test 14c [hbox/hovbox]", 10, 4, openHBox, PP.openHOVBox) +val t15a = simple2 ("Test 15a [hbox/box]", 10, 2, openHBox, PP.openBox) +val t15b = simple2 ("Test 15b [hbox/box]", 10, 3, openHBox, PP.openBox) +val t15c = simple2 ("Test 15c [hbox/box]", 10, 4, openHBox, PP.openBox) +val t16a = simple2 ("Test 16a [vbox/hbox]", 10, 2, PP.openVBox, openHBox) +val t16b = simple2 ("Test 16b [vbox/hbox]", 10, 3, PP.openVBox, openHBox) +val t16c = simple2 ("Test 16c [vbox/hbox]", 10, 4, PP.openVBox, openHBox) +val t17a = simple2 ("Test 17a [vbox/vbox]", 10, 2, PP.openVBox, PP.openVBox) +val t17b = simple2 ("Test 17b [vbox/vbox]", 10, 3, PP.openVBox, PP.openVBox) +val t17c = simple2 ("Test 17c [vbox/vbox]", 10, 4, PP.openVBox, PP.openVBox) +val t18a = simple2 ("Test 18a [vbox/hvbox]", 10, 2, PP.openVBox, PP.openHVBox) +val t18b = simple2 ("Test 18b [vbox/hvbox]", 10, 3, PP.openVBox, PP.openHVBox) +val t18c = simple2 ("Test 18c [vbox/hvbox]", 10, 4, PP.openVBox, PP.openHVBox) +val t19a = simple2 ("Test 19a [vbox/hovbox]", 10, 2, PP.openVBox, PP.openHOVBox) +val t19b = simple2 ("Test 19b [vbox/hovbox]", 10, 3, PP.openVBox, PP.openHOVBox) +val t19c = simple2 ("Test 19c [vbox/hovbox]", 10, 4, PP.openVBox, PP.openHOVBox) +val t20a = simple2 ("Test 20a [vbox/box]", 10, 2, PP.openVBox, PP.openBox) +val t20b = simple2 ("Test 20b [vbox/box]", 10, 3, PP.openVBox, PP.openBox) +val t20c = simple2 ("Test 20c [vbox/box]", 10, 4, PP.openVBox, PP.openBox) +val t21a = simple2 ("Test 21a [hvbox/hbox]", 10, 2, PP.openHVBox, openHBox) +val t21b = simple2 ("Test 21b [hvbox/hbox]", 10, 3, PP.openHVBox, openHBox) +val t21c = simple2 ("Test 21c [hvbox/hbox]", 10, 4, PP.openHVBox, openHBox) +val t22a = simple2 ("Test 22a [hvbox/vbox]", 10, 2, PP.openHVBox, PP.openVBox) +val t22b = simple2 ("Test 22b [hvbox/vbox]", 10, 3, PP.openHVBox, PP.openVBox) +val t22c = simple2 ("Test 22c [hvbox/vbox]", 10, 4, PP.openHVBox, PP.openVBox) +val t23a = simple2 ("Test 23a [hvbox/hvbox]", 10, 2, PP.openHVBox, PP.openHVBox) +val t23b = simple2 ("Test 23b [hvbox/hvbox]", 10, 3, PP.openHVBox, PP.openHVBox) +val t23c = simple2 ("Test 23c [hvbox/hvbox]", 10, 4, PP.openHVBox, PP.openHVBox) +val t24a = simple2 ("Test 24a [hvbox/hovbox]", 10, 2, PP.openHVBox, PP.openHOVBox) +val t24b = simple2 ("Test 24b [hvbox/hovbox]", 10, 3, PP.openHVBox, PP.openHOVBox) +val t24c = simple2 ("Test 24c [hvbox/hovbox]", 10, 4, PP.openHVBox, PP.openHOVBox) +val t25a = simple2 ("Test 25a [hvbox/box]", 10, 2, PP.openHVBox, PP.openBox) +val t25b = simple2 ("Test 25b [hvbox/box]", 10, 3, PP.openHVBox, PP.openBox) +val t25c = simple2 ("Test 25c [hvbox/box]", 10, 4, PP.openHVBox, PP.openBox) +val t26a = simple2 ("Test 26a [hovbox/hbox]", 10, 2, PP.openHOVBox, openHBox) +val t26b = simple2 ("Test 26b [hovbox/hbox]", 10, 3, PP.openHOVBox, openHBox) +val t26c = simple2 ("Test 26c [hovbox/hbox]", 10, 4, PP.openHOVBox, openHBox) +val t27a = simple2 ("Test 27a [hovbox/vbox]", 10, 2, PP.openHOVBox, PP.openVBox) +val t27b = simple2 ("Test 27b [hovbox/vbox]", 10, 3, PP.openHOVBox, PP.openVBox) +val t27c = simple2 ("Test 27c [hovbox/vbox]", 10, 4, PP.openHOVBox, PP.openVBox) +val t28a = simple2 ("Test 28a [hovbox/hvbox]", 10, 2, PP.openHOVBox, PP.openHVBox) +val t28b = simple2 ("Test 28b [hovbox/hvbox]", 10, 3, PP.openHOVBox, PP.openHVBox) +val t28c = simple2 ("Test 28c [hovbox/hvbox]", 10, 4, PP.openHOVBox, PP.openHVBox) +val t29a = simple2 ("Test 29a [hovbox/hovbox]", 10, 2, PP.openHOVBox, PP.openHOVBox) +val t29b = simple2 ("Test 29b [hovbox/hovbox]", 10, 3, PP.openHOVBox, PP.openHOVBox) +val t29c = simple2 ("Test 29c [hovbox/hovbox]", 10, 4, PP.openHOVBox, PP.openHOVBox) +val t30a = simple2 ("Test 30a [hovbox/box]", 10, 2, PP.openHOVBox, PP.openBox) +val t30b = simple2 ("Test 30b [hovbox/box]", 10, 3, PP.openHOVBox, PP.openBox) +val t30c = simple2 ("Test 30c [hovbox/box]", 10, 4, PP.openHOVBox, PP.openBox) +val t31a = simple2 ("Test 31a [box/hbox]", 10, 2, PP.openBox, openHBox) +val t31b = simple2 ("Test 31b [box/hbox]", 10, 3, PP.openBox, openHBox) +val t31c = simple2 ("Test 31c [box/hbox]", 10, 4, PP.openBox, openHBox) +val t32a = simple2 ("Test 32a [box/vbox]", 10, 2, PP.openBox, PP.openVBox) +val t32b = simple2 ("Test 32b [box/vbox]", 10, 3, PP.openBox, PP.openVBox) +val t32c = simple2 ("Test 32c [box/vbox]", 10, 4, PP.openBox, PP.openVBox) +val t33a = simple2 ("Test 33a [box/hvbox]", 10, 2, PP.openBox, PP.openHVBox) +val t33b = simple2 ("Test 33b [box/hvbox]", 10, 3, PP.openBox, PP.openHVBox) +val t33c = simple2 ("Test 33c [box/hvbox]", 10, 4, PP.openBox, PP.openHVBox) +val t34a = simple2 ("Test 34a [box/hovbox]", 10, 2, PP.openBox, PP.openHOVBox) +val t34b = simple2 ("Test 34b [box/hovbox]", 10, 3, PP.openBox, PP.openHOVBox) +val t34c = simple2 ("Test 34c [box/hovbox]", 10, 4, PP.openBox, PP.openHOVBox) +val t35a = simple2 ("Test 35a [box/box]", 10, 2, PP.openBox, PP.openBox) +val t35b = simple2 ("Test 35b [box/box]", 10, 3, PP.openBox, PP.openBox) +val t35c = simple2 ("Test 35c [box/box]", 10, 4, PP.openBox, PP.openBox) +end + +fun t40 () = withPP ("Test 20 [C code]", 20) (fn strm => ( + PP.openHBox strm; + PP.string strm "if"; + PP.space strm 1; + PP.string strm "(x < y)"; + PP.space strm 1; + PP.string strm "{"; + PP.openHVBox strm (PP.Abs 4); + PP.space strm 1; + PP.string strm "stmt1;"; PP.space strm 1; + PP.openHBox strm; + PP.string strm "if"; + PP.space strm 1; + PP.string strm "(w < z)"; + PP.space strm 1; + PP.string strm "{"; + PP.openHVBox strm (PP.Abs 4); + PP.space strm 1; PP.string strm "stmt2;"; + PP.space strm 1; PP.string strm "stmt3;"; + PP.space strm 1; PP.string strm "stmt4;"; + PP.closeBox strm; PP.newline strm; + PP.string strm "}"; + PP.closeBox strm; + PP.space strm 1; PP.string strm "stmt5;"; + PP.space strm 1; PP.string strm "stmt6;"; + PP.closeBox strm; PP.newline strm; + PP.string strm "}"; + PP.closeBox strm)); + +(* a test of VBox *) +fun t50 () = withPP ("Test 40 [vbox]", 20) (fn strm => let + fun pp l = let + fun pp' [] = () + | pp' [s] = PP.string strm s + | pp' (s::r) = (PP.string strm s; PP.space strm 1; pp' r) + in + PP.openHBox strm; pp' l; PP.closeBox strm + end + in + PP.openVBox strm (PP.Abs 0); + pp ["0:", "line", "1"]; PP.newline strm; + pp ["0:", "line", "2"]; PP.newline strm; + PP.openVBox strm (PP.Abs 2); + pp ["2:", "line", "3"]; PP.newline strm; + pp ["2:", "line", "4"]; + PP.closeBox strm; + PP.newline strm; + PP.openVBox strm (PP.Abs 2); + pp ["2:", "line", "5"]; PP.newline strm; + pp ["2:", "line", "6"]; + PP.closeBox strm; + PP.newline strm; + pp ["0:", "line", "7"]; PP.newline strm; + pp ["0:", "line", "8"]; PP.newline strm; + PP.openVBox strm (PP.Abs 4); + pp ["4:", "line", "9"]; PP.newline strm; + pp ["4:", "line", "10"]; + PP.closeBox strm; + PP.newline strm; + pp ["0:", "line", "11"]; PP.newline strm; + pp ["0:", "line", "12"]; PP.newline strm; + PP.closeBox strm + end) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/tests/typp.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/tests/typp.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/PP/tests/typp.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/PP/tests/typp.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,96 @@ +(* typp.sml + * + * COPYRIGHT (c) 1997 Bell Labs, Lucent Technologies. + * + * A pretty-printer for ML type expressions. + *) + +use "base.sml"; + +datatype ty + = VarTy of string + | BaseTy of (ty list * string) + | FnTy of (ty * ty) + | TupleTy of ty list + | RecordTy of (string * ty) list + +fun ppTy (strm, ty) = let + fun ppComma () = (PP.string strm ","; PP.space strm 1) + fun ppStar () = (PP.space strm 1; PP.string strm "*"; PP.nbSpace strm 1) + fun pp (VarTy s) = PP.string strm s + | pp (BaseTy([], s) = PP.string strm s + | pp (BaseTy([ty], s) = + | pp (BaseTy(l, s) = + | pp (FnTy(ty1, ty2)) = + | pp (TupleTy []) = PP.string strm "()" + | pp (TupleTy [ty]) = pp ty + | pp (TupleTy l) = + | pp (RecordTy []) = PP.string strm "{}" + | pp (RecordTy l) = let + fun ppElem (lab, ty) = ( + PP.openHVBox strm (PP.Abs 2); + PP.string lab; + PP.space strm 1; + PP.string strm ":"; + PP.nbSpace strm; + pp ty + PP.closeBox()) + in + PP.openHBox strm; + PP.string strm "{"; + PP.openHVBox (strm, PP.Abs 4); + ppl (ppElem, ppComma) l; + PP.break strm {nsp=0, offset=2}; + PP.closeBox strm; + PP.string strm "}"; + PP.closeBox strm + end + and ppParenTy ty = + and ppl (ppElem, ppSep) l = let + fun ppl' [] = () + | ppl' [ty] = ppElem ty + | ppl' (ty::r) = (ppElem ty; ppSep(); ppl' r) + in + ppl' l + end + in + PP.openHOVBox (strm, PP.Abs 2); + pp ty; + PP.closeBox strm + end; + +local + val stringTy = BaseTy([], "string") + val intTy = BaseTy([], "int") + val boolTy = BaseTy([], "bool") + val unitTy = BaseTy([], "unit") + val posTy = BaseTy([], "pos") + fun optionTy arg = BaseTy([arg], "option") + val vecBufTy = RecordTy [ + ("buf", BaseTy([], "vector")), + ("i", intTy), + ("sz", optionTy intTy) + ] + val arrBufTy = RecordTy [ + ("buf", BaseTy([], "array")), + ("i", intTy), + ("sz", optionTy intTy) + ] +in +val wrTy = RecordTy of [ + ("name", stringTy), + ("chunkSize", intTy), + ("writeVec", optionTy(FnTy(vecBufTy, intTy))), + ("writeArr", optionTy(FnTy(arrBufTy, intTy))), + ("writeVecNB", optionTy(FnTy(vecBufTy, optionTy intTy))), + ("writeArrNB", optionTy(FnTy(arrBufTy, optionTy intTy))), + ("block", optionTy(FnTy(unitTy, unitTy)), + ("canOutput", optionTy(FnTy(unitTy, boolTy)), + ("getPos", optionTy(FnTy(unitTy, posTy))), + ("setPos", optionTy(FnTy(posTy, unitTy))), + ("endPos", optionTy(FnTy(unitTy, posTy))), + ("verifyPos", optionTy(FnTy(unitTy, posTy))), + ("close", optionTy(FnTy(unitTy, unitTy))), + ("ioDesc", optionTy(BaseTy([], "OS.IO.iodesc"))) + ] +end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/instruction.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/instruction.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/instruction.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/instruction.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,39 @@ +(* instruction.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * An AST representation of reactive scripts. + *) + +structure Instruction = + struct + + datatype 'a config + = posConfig of 'a + | negConfig of 'a + | orConfig of ('a config * 'a config) + | andConfig of ('a config * 'a config) + + type signal = Atom.atom + + datatype 'ctxt instr + = || of ('ctxt instr * 'ctxt instr) (* merge *) + | & of ('ctxt instr * 'ctxt instr) (* sequencing *) + | nothing (* nop *) + | stop (* stop execution *) + | suspend (* suspend execution *) + | action of 'ctxt -> unit (* an atomic action *) + | exec of 'ctxt -> {stop : unit -> unit, done : unit -> bool} + | ifThenElse of (('ctxt -> bool) * 'ctxt instr * 'ctxt instr) + | repeat of (int * 'ctxt instr) (* repeat loop *) + | loop of 'ctxt instr (* infinite loop *) + | close of 'ctxt instr + | signal of (signal * 'ctxt instr) (* define a signal *) + | rebind of (signal * signal * 'ctxt instr) (* rename a signal *) + | when of (signal config * 'ctxt instr * 'ctxt instr) + | trapWith of (signal config * 'ctxt instr * 'ctxt instr) + | emit of signal (* generate a signal *) + | await of signal config (* wait for a signal *) + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/machine.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/machine.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/machine.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/machine.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,589 @@ +(* machine.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This is an implementation of the reactive interpreter instructions, + * and functions to generate them. + *) + +structure Machine : sig + + (* activation return codes *) + datatype state + = TERM (* execution of the instruction is complete; activation + * at future instances has no effect. + *) + | STOP (* execution is stopped in this instant, but could + * progress in the next instant. + *) + | SUSP (* exeuction is suspended and must be resumed during this + * instant. + *) + + type in_signal + type out_signal + + type instant = int + type signal_state = instant ref + + datatype signal = SIG of { + name : Atom.atom, + id : int, + state : signal_state + } + + datatype machine = M of { + now : instant ref, + moveFlg : bool ref, + endOfInstant : bool ref, + prog : code, + signals : signal list, + inputs : signal list, + outputs : signal list + } + + and code = C of { + isTerm : unit -> bool, + terminate : unit -> unit, + reset : unit -> unit, + preempt : machine -> unit, + activation : machine -> state + } + + val runMachine : machine -> bool + val resetMachine : machine -> unit + val inputsOf : machine -> in_signal list + val outputsOf : machine -> out_signal list + + val inputSignal : in_signal -> Atom.atom + val outputSignal : out_signal -> Atom.atom + val setInSignal : (in_signal * bool) -> unit + val getInSignal : in_signal -> bool + val getOutSignal : out_signal -> bool + + type config + + val || : (code * code) -> code + val & : (code * code) -> code + val nothing : code + val stop : unit -> code + val suspend : unit -> code + val action : (machine -> unit) -> code + val exec : (machine -> {stop : unit -> unit, done : unit -> bool}) -> code + val ifThenElse : ((machine -> bool) * code * code) -> code + val repeat : (int * code) -> code + val loop : code -> code + val close : code -> code + val emit : signal -> code + val await : config -> code + val when : (config * code * code) -> code + val trapWith : (config * code * code) -> code + + end = struct + + structure I = Instruction (* for the config type *) + + datatype state + = TERM + | STOP + | SUSP + + type instant = int + type signal_state = instant ref + + datatype signal = SIG of { + name : Atom.atom, + id : int, + state : signal_state + } + + type config = signal I.config + + datatype machine = M of { + now : instant ref, + moveFlg : bool ref, + endOfInstant : bool ref, + prog : code, + signals : signal list, + inputs : signal list, + outputs : signal list + } + + and code = C of { + isTerm : unit -> bool, + terminate : unit -> unit, + reset : unit -> unit, + preempt : machine -> unit, + activation : machine -> state + } + + + fun now (M{now=t, ...}) = !t + fun newMove (M{moveFlg, ...}) = moveFlg := true + fun isEndOfInstant (M{endOfInstant, ...}) = !endOfInstant + + datatype presence = PRESENT | ABSENT | UNKNOWN + + fun presence (m, SIG{state, ...}) = let + val ts = !state + val now = now m + in + if (now = ts) then PRESENT + else if ((now = ~ts) orelse (isEndOfInstant m)) then ABSENT + else UNKNOWN + end + + fun present (m, SIG{state, ...}) = (now m = !state) + fun prePresent (m, SIG{state, ...}) = (now m = !state + 1) + fun absent (m, SIG{state, ...}) = (now m = ~(!state)) + fun emitSig (m, SIG{state, ...}) = state := now m + fun emitNot (m, SIG{state, ...}) = state := ~(now m) + + datatype in_signal = IN of (machine * signal) + datatype out_signal = OUT of (machine * signal) + + fun inputSignal (IN(_, SIG{name, ...})) = name + fun outputSignal (OUT(_, SIG{name, ...})) = name + fun setInSignal (IN(m, s), false) = emitNot(m, s) + | setInSignal (IN(m, s), true) = emitSig(m, s) + fun getInSignal (IN(m, s)) = present(m, s) + fun getOutSignal (OUT(m, s)) = prePresent(m, s) + + fun terminate (C{terminate=f, ...}) = f() + fun isTerm (C{isTerm=f, ...}) = f() + fun reset (C{reset=f, ...}) = f() + fun preemption (C{preempt=f, ...}, m) = f m + fun activation (C{activation=f, ...}, m) = f m + + fun activate (i, m) = if (isTerm i) + then TERM + else (case activation(i, m) + of TERM => (terminate i; TERM) + | res => res + (* end case *)) + + fun preempt (i, m) = if (isTerm i) + then () + else (preemption(i, m); terminate i) + + (* default instruction methods *) + fun isTermMeth termFlg () = !termFlg + fun terminateMeth termFlg () = termFlg := true + fun resetMeth termFlg () = termFlg := false + + fun || (i1, i2) = let + val termFlg = ref false + val leftSts = ref SUSP + val rightSts = ref SUSP + fun resetMeth () = ( + termFlg := false; leftSts := SUSP; rightSts := SUSP; + reset i1; reset i2) + fun preemptMeth m = (preempt(i1, m); preempt(i2, m)) + fun activationMeth m = ( + if (!leftSts = SUSP) then leftSts := activate(i1, m) else (); + if (!rightSts = SUSP) then rightSts := activate(i2, m) else (); + case (!leftSts, !rightSts) + of (TERM, TERM) => TERM + | (SUSP, _) => SUSP + | (_, SUSP) => SUSP + | _ => (leftSts := SUSP; rightSts := SUSP; STOP) + (* end case *)) + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth, + preempt = preemptMeth, + activation = activationMeth + } + end + + fun & (i1, i2) = let + val termFlg = ref false + fun resetMeth () = (termFlg := false; reset i1; reset i2) + fun preemptMeth m = (preempt(i1, m); preempt(i2, m)) + fun activationMeth m = + if (isTerm i1) + then activate(i2, m) + else (case activate(i1, m) + of TERM => activate(i2, m) + | res => res + (* end case *)) + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth, + preempt = preemptMeth, + activation = activationMeth + } + end + + val nothing = C{ + isTerm = fn () => true, + terminate = fn () => (), + reset = fn () => (), + preempt = fn _ => (), + activation = fn _ => TERM + } + + fun stop () = let + val termFlg = ref false + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth termFlg, + preempt = fn _ => (), + activation = fn _ => (termFlg := true; STOP) + } + end + + fun suspend () = let + val termFlg = ref false + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth termFlg, + preempt = fn _ => (), + activation = fn _ => (termFlg := true; SUSP) + } + end + + fun action f = let + val termFlg = ref false + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth termFlg, + preempt = fn _ => (), + activation = fn m => (f m; TERM) + } + end + + fun exec f = let + val termFlg = ref false + val ops = ref(NONE : {stop : unit -> unit, done : unit -> bool} option) +(** NOTE: what if a reset occurs while we are running? We would need to change + ** the type of resetMeth to take a machine parameter. + **) + fun resetMeth () = (termFlg := false) + fun preemptMeth m = (case !ops + of NONE => () + | SOME{stop, ...} => (ops := NONE; stop()) + (* end case *)) + fun activationMeth m = (case !ops + of SOME{done, ...} => if done () + then (ops := NONE; TERM) + else STOP + | NONE => (ops := SOME(f m); SUSP) + (* end case *)) + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth, + preempt = preemptMeth, + activation = activationMeth + } + end + + fun ifThenElse (pred, i1, i2) = let + val termFlg = ref false + val cond = ref NONE + fun resetMeth () = ( + termFlg := false; + case !cond + of (SOME true) => reset i1 + | (SOME false) => reset i2 + | NONE => () + (* end case *); + cond := NONE) + fun preemptMeth m = (case !cond + of (SOME true) => preempt(i1, m) + | (SOME false) => preempt(i2, m) + | NONE => () + (* end case *)) + fun activationMeth m = (case !cond + of (SOME true) => activate(i1, m) + | (SOME false) => activate(i2, m) + | NONE => let + val b = pred m + in + cond := SOME b; + if b then activate(i1, m) else activate(i2, m) + end + (* end case *)) + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth, + preempt = preemptMeth, + activation = activationMeth + } + end + + fun repeat (n, i) = let + val termFlg = ref false + val counter = ref n + fun resetMeth () = (termFlg := false; counter := n) + fun preemptMeth m = preempt(i, m) + fun activationMeth m = + if (!counter > 0) + then (case activate(i, m) + of TERM => ( + counter := !counter-1; reset i; + activationMeth m) + | res => res + (* end case *)) + else TERM + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth, + preempt = preemptMeth, + activation = activationMeth + } + end + + fun loop i = let + val termFlg = ref false + val endReached = ref false + fun resetMeth () = (termFlg := false; reset i; endReached := false) + fun preemptMeth m = preempt (i, m) + fun activationMeth m = (case activate(i, m) + of TERM => if (!endReached) + then ( +(* say(m, "instantaneous loop detected\n"); *) + STOP) + else (endReached := true; reset i; activationMeth m) + | STOP => (endReached := false; STOP) + | SUSP => SUSP + (* end case *)) + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth, + preempt = preemptMeth, + activation = activationMeth + } + end + + fun close i = let + val termFlg = ref false + fun activationMeth m = (case activate(i, m) + of SUSP => activationMeth m + | res => res + (* end case *)) + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth termFlg, + preempt = fn _ => (), + activation = activationMeth + } + end + + (** Configuration evaluation **) + fun fixed (m, c) = let + fun fix (I.posConfig id) = (presence(m, id) <> UNKNOWN) + | fix (I.negConfig id) = (presence(m, id) <> UNKNOWN) + | fix (I.orConfig(c1, c2)) = let + val b1 = fix c1 and b2 = fix c2 + in + (b1 andalso evaluate(m, c1)) orelse + (b2 andalso evaluate(m, c2)) orelse + (b1 andalso b2) + end + | fix (I.andConfig(c1, c2)) = let + val b1 = fix c1 and b2 = fix c2 + in + (b1 andalso not(evaluate(m, c1))) orelse + (b2 andalso not(evaluate(m, c2))) orelse + (b1 andalso b2) + end + in + fix c + end + + and evaluate (m, c) = let + fun eval (I.posConfig id) = present(m, id) + | eval (I.negConfig id) = not(present(m, id)) + | eval (I.orConfig(c1, c2)) = eval c1 orelse eval c2 + | eval (I.andConfig(c1, c2)) = eval c1 andalso eval c2 + in + eval c + end + + (* evaluate the signal configuration `c` returning `SOME b` if + * the signals are in known state and `b` is the result of the + * configuration. Otherwise, return `NONE` if one or more signals + * are in unknown state. + *) + fun fixedEval (m, c) = let + fun f (I.posConfig id) = (case presence(m, id) + of UNKNOWN => NONE + | PRESENT => SOME true + | ABSENT => SOME false + (* end case *)) + | f (I.negConfig id) = (case presence(m, id) + of UNKNOWN => NONE + | PRESENT => SOME false + | ABSENT => SOME true + (* end case *)) + | f (I.andConfig(c1, c2)) = (case (f c1, f c2) + of (SOME false, _) => SOME false + | (_, SOME false) => SOME false + | (SOME true, SOME true) => SOME true + | _ => NONE + (* end case *)) + | f (I.orConfig(c1, c2)) = (case (f c1, f c2) + of (SOME true, _) => SOME true + | (_, SOME true) => SOME true + | (SOME false, SOME false) => SOME false + | _ => NONE + (* end case *)) + in + f c + end + + fun emit signal = let + val termFlg = ref false + fun activationMeth m = ( + newMove m; + emitSig(m, signal); + TERM) + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth termFlg, + preempt = fn _ => (), + activation = activationMeth + } + end + + fun await c = let + val termFlg = ref false + fun activationMeth m = (case fixedEval(m, c) + of NONE => SUSP + | (SOME false) => STOP + | (SOME true) => if (isEndOfInstant m) then STOP else TERM + (* end case *)) + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth termFlg, + preempt = fn _ => (), + activation = activationMeth + } + end + + fun when (c, i1, i2) = let + val termFlg = ref false + val value = ref NONE + fun resetMeth m = ( + termFlg := false; + reset i1; reset i2; + value := NONE) + fun preemptMeth m = (preempt(i1, m); preempt(i2, m)) + fun activationMeth m = (case !value + of NONE => (case fixedEval(m, c) + of NONE => SUSP + | (SOME v) => ( + value := SOME v; + if (isEndOfInstant m) + then STOP + else if v + then activate(i1, m) + else activate(i2, m)) + (* end case *)) + | (SOME true) => activate(i1, m) + | (SOME false) => activate(i2, m) + (* end case *)) + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth, + preempt = preemptMeth, + activation = activationMeth + } + end + + fun trapWith (c, i1, i2) = let + val termFlg = ref false + val activeHandle = ref false + val resumeBody = ref true + fun resetMeth m = ( + termFlg := false; + reset i1; reset i2; + activeHandle := false; + resumeBody := true) + fun preemptMeth m = if (! activeHandle) + then preempt(i2, m) + else preempt(i1, m) + fun activationMeth m = + if (! activeHandle) + then activate(i2, m) + else let + fun chkConfig () = (case fixedEval(m, c) + of NONE => SUSP + | (SOME true) => ( (* actual preemption *) + preempt(i1, m); + activeHandle := true; + if (isEndOfInstant m) + then STOP + else activate(i2, m)) + | (SOME false) => ( + resumeBody := true; + STOP) + (* end case *)) + in + if (! resumeBody) + then (case activate(i1, m) + of STOP => (resumeBody := false; chkConfig()) + | res => res + (* end case *)) + else chkConfig() + end + in + C{ isTerm = isTermMeth termFlg, + terminate = terminateMeth termFlg, + reset = resetMeth, + preempt = preemptMeth, + activation = activationMeth + } + end + + (* run a machine to a stable state; return true if that is a terminal state *) + fun runMachine (m as M{now, moveFlg, endOfInstant, prog, ...}) = let + fun untilStop () = (case activate(prog, m) + of SUSP => ( + if !moveFlg + then moveFlg := false + else endOfInstant := true; + untilStop ()) + | STOP => false + | TERM => true + (* end case *)) + in + endOfInstant := false; + moveFlg := false; + untilStop () before now := !now+1 + end + + (* reset a machine back to its initial state *) + fun resetMachine (M{ + now, moveFlg, endOfInstant, prog, signals, inputs, outputs + }) = let + fun resetSig (SIG{state, ...}) = state := 0 + in + now := 2; + moveFlg := false; + endOfInstant := false; + reset prog; + List.app resetSig signals; + List.app resetSig inputs; + List.app resetSig outputs + end + + fun inputsOf (m as M{inputs, ...}) = List.map (fn s => IN(m, s)) inputs + fun outputsOf (m as M{outputs, ...}) = List.map (fn s => OUT(m, s)) outputs + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/reactive-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/reactive-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/reactive-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/reactive-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,24 @@ +(* reactive-lib.cm + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Sources file for reactive engine library. + *) + +Library + signature REACTIVE + structure Reactive +is +#if defined(NEW_CM) + $/basis.cm + $/smlnj-lib.cm +#else + ../Util/smlnj-lib.cm +#endif + + instruction.sml + machine.sml + reactive-sig.sml + reactive.sml + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/reactive-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/reactive-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/reactive-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/reactive-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,72 @@ + +ann + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" +in + +local + basis l8 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb + end + basis l4 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + open l4 + in + structure gs_0 = AtomBinaryMap + end + local + open l8 + in + structure gs_1 = List + end + local + open l4 + in + structure gs_2 = Atom + end + local + structure Atom = gs_2 + reactive-sig.sml + in + signature gs_3 = REACTIVE + end + local + structure Atom = gs_2 + instruction.sml + in + structure gs_4 = Instruction + end + local + structure Atom = gs_2 + structure Instruction = gs_4 + structure List = gs_1 + machine.sml + in + structure gs_5 = Machine + end + local + structure AtomBinaryMap = gs_0 + structure Instruction = gs_4 + structure List = gs_1 + structure Machine = gs_5 + signature REACTIVE = gs_3 + reactive.sml + in + structure gs_6 = Reactive + end +in + signature REACTIVE = gs_3 + structure Reactive = gs_6 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/reactive-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/reactive-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/reactive-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/reactive-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,72 @@ +(* reactive-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A simple ractive engine modelled after RC and SugarCubes. + *) + +signature REACTIVE = + sig + + type machine + type instruction + type signal = Atom.atom + type config + type in_signal + type out_signal + + val machine : { + inputs : signal list, + outputs : signal list, + body : instruction + } -> machine + + val run : machine -> bool + (* run the machine one instant. Returns true, if the machine ends in + * a terminal state. + *) + val reset : machine -> unit + (* reset a machine to its initial state. *) + + val inputsOf : machine -> in_signal list + val outputsOf : machine -> out_signal list + + val inputSignal : in_signal -> signal + val outputSignal : out_signal -> signal + + val setInSignal : (in_signal * bool) -> unit + val getInSignal : in_signal -> bool + val getOutSignal : out_signal -> bool + + val || : (instruction * instruction) -> instruction + val & : (instruction * instruction) -> instruction + + val nothing : instruction + val stop : instruction + val suspend : instruction + + val action : (machine -> unit) -> instruction + val exec : (machine -> {stop : unit -> unit, done : unit -> bool}) + -> instruction + + val ifThenElse : ((machine -> bool) * instruction * instruction) -> instruction + val repeat : (int * instruction) -> instruction + val loop : instruction -> instruction + val close : instruction -> instruction + + val signal : (signal * instruction) -> instruction + val rebind : (signal * signal * instruction) -> instruction + val when : (config * instruction * instruction) -> instruction + val trap : (config * instruction) -> instruction + val trapWith : (config * instruction * instruction) -> instruction + val emit : signal -> instruction + val await : config -> instruction + + (* signal configurations *) + val posConfig : signal -> config + val negConfig : signal -> config + val orConfig : (config * config) -> config + val andConfig : (config * config) -> config + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/reactive.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/reactive.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/reactive.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/reactive.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,127 @@ +(* reactive.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A simple ractive engine modelled after RC and SugarCubes. + *) + +structure Reactive : REACTIVE = + struct + + structure I = Instruction + structure M = Machine + + type machine = M.machine + type instruction = machine Instruction.instr + type signal = I.signal + type config = I.signal I.config + type in_signal = M.in_signal + type out_signal = M.out_signal + + (* used to bind internal signal names *) + structure AMap = AtomBinaryMap + + exception UnboundSignal of I.signal + + fun machine {inputs, outputs, body} = let + val nextId = ref 0 + val sigList = ref [] + fun newSignal s = let + val id = !nextId + val s' = M.SIG{name=s, id=id, state = ref 0} + in + nextId := id+1; + sigList := s' :: !sigList; + s' + end + fun bindSig (env, s) = (case AMap.find (env, s) + of NONE => raise UnboundSignal s + | (SOME s') => s' + (* end case *)) + fun trans (instr, env) = (case instr + of I.||(i1, i2) => M.||(trans(i1, env), trans(i2, env)) + | I.&(i1, i2) => M.&(trans(i1, env), trans(i2, env)) + | I.nothing => M.nothing + | I.stop => M.stop() + | I.suspend => M.suspend() + | I.action act => M.action act + | I.exec f => M.exec f + | I.ifThenElse(pred, i1, i2) => + M.ifThenElse(pred, trans(i1, env), trans(i2, env)) + | I.repeat(cnt, i) => M.repeat(cnt, trans(i, env)) + | I.loop i => M.loop(trans(i, env)) + | I.close i => M.close(trans(i, env)) + | I.signal(s, i) => trans(i, AMap.insert(env, s, newSignal s)) + | I.rebind(s1, s2, i) => + trans(i, AMap.insert(env, s2, bindSig(env, s1))) + | I.emit s => M.emit(bindSig(env, s)) + | I.await cfg => M.await(transConfig(cfg, env)) + | I.when(cfg, i1, i2) => + M.when(transConfig(cfg, env), trans(i1, env), trans(i2, env)) + | I.trapWith(cfg, i1, i2) => + M.trapWith(transConfig(cfg, env), trans(i1, env), trans(i2, env)) + (* end case *)) + and transConfig (cfg, env) = let + fun transCfg (I.posConfig s) = I.posConfig(bindSig(env, s)) + | transCfg (I.negConfig s) = I.negConfig(bindSig(env, s)) + | transCfg (I.orConfig(cfg1, cfg2)) = + I.orConfig(transCfg cfg1, transCfg cfg2) + | transCfg (I.andConfig(cfg1, cfg2)) = + I.andConfig(transCfg cfg1, transCfg cfg2) + in + transCfg cfg + end + val inputs' = List.map newSignal inputs + val outputs' = List.map newSignal outputs + fun ins (s as M.SIG{name, ...}, env) = AMap.insert(env, name, s) + val initialEnv = + List.foldl ins (List.foldl ins AMap.empty inputs') outputs' + val body' = trans (body, initialEnv) + in + M.M{ + now = ref 0, + moveFlg = ref false, + endOfInstant = ref false, + prog = body', + signals = !sigList, + inputs = inputs', + outputs = outputs' + } + end + + val run = M.runMachine + val reset = M.resetMachine + val inputsOf = M.inputsOf + val outputsOf = M.outputsOf + val inputSignal = M.inputSignal + val outputSignal = M.outputSignal + val setInSignal = M.setInSignal + val getInSignal = M.getInSignal + val getOutSignal = M.getOutSignal + + val posConfig = I.posConfig + val negConfig = I.negConfig + val orConfig = I.orConfig + val andConfig = I.andConfig + + val || = I.|| + val & = I.& + val nothing = I.nothing + val stop = I.stop + val suspend = I.suspend + val action = I.action + val exec = I.exec + val ifThenElse = I.ifThenElse + val repeat = I.repeat + val loop = I.loop + val close = I.close + val signal = I.signal + val rebind = I.rebind + val when = I.when + val trapWith = I.trapWith + fun trap (c, i) = I.trapWith(c, i, I.nothing) + val emit = I.emit + val await = I.await + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Reactive/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Reactive/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,79 @@ +This is an implementation of a low-level reactive engine (or toolkit), +which is mostly translated from SugarCubes (a Java toolkit). The main +difference (aside from the implementation language) is that we support +preemption of actions (as in Berry's Communicating Reactive Processes +model). This library is meant to be the target of higher-level reactive +models. + +Note also that we use the term "signal" (al la Esterel) instead of "event". + +Information about SugarCubes can be found at + + http://www-sop.inria.fr/meije/rc/SugarCubes/index.html + +A reactive script is written as an abstract syntax tree of type +Machine.instruction, which is defined in the Instruction module. +This type is parameterized over a context type, which is the +type of the runtime environment. + +Reactive scripting language: + + i1 || i2 interleave the activation of i1 and i2 until both terminate or one + suspends. + + i1 & i2 activate in sequence + + nothing do nothing + + stop stop activation; is terminated for all future activations + + suspend suspends activation + + action(act) An atomic action; apply to the machine. + + exec(exe) Activation causes exe to be applied to the machine, which returns two + functions + + stop : unit -> unit + done : unit -> bool + + ifThenElse(pred, i1, i2) + Conditional. Evaluates predicate applied to the machine and then + activates either e1 (if the predicate is true) or e2. + + repeat(n, i) Activate the script i n times. It terminates when either the loop + has been repeated n times or i terminates. + + loop Loop forever. + + close : instruction -> instruction + + signal(sig, i) + Binds the signal sig in the enclosed script i. + + rebind(sig1, sig2, i) + Binds sig2 to the signal sig1 in the enclosed script i. + + when(cfg, i1, i2) + + trap(cfg, i) + + trapWith(cfg, i1, i2) + + emit(sig) Generate the named signal this instance. + + await(cfg) Wait for the configuration to hold. + +Signal configurations have the following forms: + + posConfig sig + Holds if sig is present this instance. + + negConfig sig + Holds if sig is not present this instance. + + orConfig(cfg1, cfg2) + Holds if either cfg1 or cfg2 holds. + + andConfig(cfg1, cfg2) + Holds if neither cfg1 or cfg2 holds. diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,36 @@ +This is the SML/NJ Library. It is free software distributed under the SML/NJ +system's license (see the LICENSE file for details). + +The library is organized as a collection of CM libraries. Here is a roadmap of +the library structure: + + Directory Sources File Description + ------------------------------------------------- + Util smlnj-lib.cm This is the general utility library. + + Controls controls-lib.cm This is a library of support code + for managing application controls. + + HashCons hash-cons-lib.cm This is a library supporting hash-consing + of data structures and efficient sets and + maps using hash-consed keys. + + HTML html-lib.cm This library provides parsing and pretty + printing of HTML (Version 3.2). + + INet inet-lib.cm Networking utilities (for both Unix + and Windows). + + PP pp-lib.cm Pretty-printing library. + + Reactive reactive-lib.cm A low-level reactive scripting library. + + RegExp regexp-lib.cm Regular-expression library. + + Unix unix-lib.cm Unix specific utilities. + +The first column is the source directory, the second gives the library sources +file alias (to be used in your application's sources.cm file), and the third +column gives a brief description. Look at the Doc dicrectory and at the README +files in the individual subdirectories for more documentation. + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/README.mlton mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/README.mlton --- mlton-20130715/lib/smlnj-lib/smlnj-lib/README.mlton 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/README.mlton 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,17 @@ +The following changes were made to the SML/NJ Library, in addition to +deriving the `.mlb` files from the `.cm` files: + +* `HTML4/pp-init.sml` (added): Implements `structure PrettyPrint` using the SML/NJ PP Library. This implementation is taken from the SML/NJ compiler source, since the SML/NJ HTML4 Library used the `structure PrettyPrint` provided by the SML/NJ compiler itself. +* `PP/mono-buffer` (added): Implements `signature MONO_BUFFER` and `structure CharBuffer: MONO_BUFFER` (see https://github.com/SMLFamily/BasisLibrary/wiki/2018-001-Addition-of-monomorphic-buffers). +* `RegExp/Glue/match-tree.sml` (modified): Rewrote use of `Either.either` (see https://github.com/SMLFamily/BasisLibrary/wiki/2015-002-Addition-of-Either-module). +* `SExp/sexp.sml` (modified): Fixed non-exhaustive match warning (and latent bug) in `compare` function. +* `Util/dynamic-array.sml` (modified): Rewrote use of `Array.fromVector`. +* `Util/base64.sml` (modified): Rewrote use of `Unsafe.CharVector.create` and `Unsafe.CharVector.update`; MLton assumes that vectors are immutable. +* `Util/engine.mlton.sml` (added, not exported): Implements `structure Engine`, providing time-limited, resumable computations using <:MLtonThread:>, <:MLtonSignal:>, and <:MLtonItimer:>. +* `Util/graph-scc-fn.sml` (modified): Rewrote use of `where` structure specification. +* `Util/hash-table-rep.sml` (modified): The computation of the `maxSize` computes succesive powers of two less than or equal to `Array.maxLen`, which overflows under MLton. Add a `handle Overflow => i` to properly find the correct maximum size. +* `Util/redblack-map-fn.sml` (modified): Rewrote use of `where` structure specification. +* `Util/redblack-set-fn.sml` (modified): Rewrote use of `where` structure specification. +* `Util/time-limit.mlb` (added): Exports `structure TimeLimit`, which is _not_ exported by `smlnj-lib.mlb`. Since MLton is very conservative in the presence of threads and signals, program performance may be adversely affected by unnecessarily including `structure TimeLimit`. +* `Util/time-limit.mlton.sml` (added): Implements `structure TimeLimit` using `structure Engine`. The SML/NJ implementation of `structure TimeLimit` uses SML/NJ's first-class continuations, signals, and interval timer. +* `Util/utf8.sml` (modified): Rewrote use of `String.implodeRev` (see https://github.com/SMLFamily/BasisLibrary/wiki/2015-003d-STRING). diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/bt-engine.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/bt-engine.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/bt-engine.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/bt-engine.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,230 @@ +(* bt-engine.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Implements a regular expressions matcher based on a backtracking search. + *) + +structure BackTrackEngine : REGEXP_ENGINE = + struct + + exception Error + + structure S = RegExpSyntax + structure M = MatchTree + + type regexp = S.syntax + + (* a match specifies the position (as a stream) and the length of the match *) + type 'a match = {pos : 'a, len : int} MatchTree.match_tree + + fun compile r = r + + fun scan (regexp,getc,pos,stream) = + let fun getc' (s) = (case (getc (s)) + of SOME v => v + | NONE => raise Subscript) + (* This function gets an empty match structure, for when the appropriate + * alternative is not followed at all + *) + fun getMatchStructure (S.Group e) = (*[M.Match (NONE,getMatchStructure e)]*) getMatchStructure e + | getMatchStructure (S.Alt l) = List.concat (map getMatchStructure l) + | getMatchStructure (S.Concat l) = List.concat (map getMatchStructure l) + | getMatchStructure (S.Interval (e,_,_)) = getMatchStructure e + | getMatchStructure (_) = [] + (* Walk a regular expression in continuation-passing style + * The continuation is simply a list of all that is left to do + * Continuations only seem to arise when concatenation is considered + * + * Walk returns the boolean status of the beast, and a match_tree + * containing the match information. + * Also: the last position scanned and the remainder stream + * MODIFICATION: walk returns a list of matches + * (because we need to extract the longest match) + *) + fun max [] sel = raise Error + | max (x::xs) sel = + let fun max' [] curr currSel = curr + | max' (x::xs) curr currSel = let val xSel = sel(x) + in if (xSel>currSel) + then max' xs x xSel + else max' xs curr currSel + end + in + max' xs x (sel x) + end + fun longest l = max l (#3: 'a * 'b * int * 'c -> int) + fun optMinus1 (SOME i) = SOME (i-1) + | optMinus1 NONE = NONE + fun walk (S.Group e,cont,p,inits) = + (case walk (e,[],p,inits) + of [] => [(false,[],p,inits)] + | ((b,matches,last,s)::ls) => + let fun loop [] cLast 1 cCont cList = + let val [(b,matches,last,s)] = cList + val [(b',matches',last',s')] = cCont + in + [(b', (M.Match ({pos=inits, len=last-p}, + matches))::matches',last',s')] + end + | loop [] cLast n cCont cList = raise Error + | loop ((b,matches,last,s)::es) cLen cNum cCont cList = + let val v as (_,_,last',_) = longest (walk (S.Concat [], cont,last,s)) + in + if (last' > cLen) + then loop es last' 1 [v] [(b,matches,last,s)] + else if (last' = cLen) + then loop es cLen (cNum+1) (v::cCont) + ((b,matches,last,s)::cList) + else loop es cLen cNum cCont cList + end + in + loop ls last 1 [longest(walk (S.Concat [],cont,last,s))] + [(b,matches,last,s)] + end) + | walk (S.Alt [],[],p,inits) = [(true,[],p,inits)] + | walk (S.Alt [], (c::cs),p,inits) = walk (c,cs,p,inits) + | walk (S.Alt l, cont,p,inits) = + let fun loop [] = [] + | loop (e::es) = let val g = longest (walk (e,cont,p,inits)) + in + if (#1 g) + then g::(loop es) + else loop es + end + in + loop l + end + | walk (S.Concat [],[],p,inits) = [(true,[],p,inits)] + | walk (S.Concat [], (c::cs),p,inits) = walk (c,cs,p,inits) + | walk (S.Concat (e::es),cont,p,inits) = walk (e,(es@cont),p,inits) + | walk (S.Interval (e,0,SOME 0),[],p,inits) = [(true,[],p,inits)] + | walk (S.Interval (e,0,SOME 0),(c::cs),p,inits) = walk (c,cs,p,inits) + | walk (S.Interval(e,0,k), cont, p, inits) = + let val (b',matches',last',s') = longest (walk (S.Concat [],cont,p,inits)) + val (b,matches,last,s) = longest (walk (S.Interval (e,1,k),cont,p,inits)) + in + if ((b andalso b' andalso last >= last') orelse (b andalso (not b'))) + then [(b,matches,last,s)] + else if ((b' andalso b andalso last' > last) orelse (b' andalso (not b))) +(* FIXME: getMatchStructure isn't really doing anything so we need to fix this code. But how? *) + then [(b',(getMatchStructure e)@matches',last',s')] + else [(false,[],p,inits)] + end + | walk (S.Interval (e,1,SOME 1),cont,p,inits) = walk (e,cont,p,inits) + | walk (S.Interval (e,1,k),cont,p,inits) = + let val (b',matches',last',s') = longest (walk (e,[],p,inits)) (* need to match 1 *) + in + if (not b') + then [(false, [], p, inits)] + else let val (b,matches,last,s) = longest (walk (S.Interval (e,1,optMinus1 k), + cont,last',s')) + val (b'',matches'',last'',s'') = longest (walk (S.Concat [], + cont,last',s')) + in + if (b andalso b'' andalso last'' >= last) + then [(b'',matches'@matches'',last'',s'')] + else if (b) + then [(b,matches,last,s)] + else [(b'',matches'@matches'',last'',s'')] + end + end + | walk (S.Interval(e,n1,k), cont, p, inits) = + walk (S.Concat [e,S.Interval (e,n1-1,optMinus1 k)],cont,p,inits) + | walk (S.MatchSet set,[],p,inits) = + if (S.CharSet.isEmpty set) + then [(true,[],p,inits)] + else + (case (getc (inits)) + of SOME (chr,s) => + let val b = S.CharSet.member (set,chr) + in + [(b,[],p+(if b then 1 else 0),(if b then s else inits))] + end + | NONE => [(false,[],p,inits)]) + | walk (S.MatchSet set,(c::cs),p,inits) = + if (S.CharSet.isEmpty set) + then walk (c,cs,p,inits) + else (case (getc (inits)) + of SOME (chr,s) => + if (S.CharSet.member (set,chr)) + then walk (c,cs,(p+1),s) + else [(false,[],p,inits)] + | NONE => [(false,[],p,inits)]) + | walk (S.NonmatchSet set,[],p,inits) = + (case (getc (inits)) + of SOME (chr,s) => + let val b = not (S.CharSet.member (set,chr)) + in + [(b, [], p+(if b then 1 else 0),(if b then s else inits))] + end + | NONE => [(false,[],p,inits)]) + | walk (S.NonmatchSet set,(c::cs),p,inits) = + (case (getc (inits)) + of SOME (chr,s) => if (S.CharSet.member (set,chr)) + then [(false,[],p,inits)] + else walk (c,cs,(p+1),s) + | NONE => [(false,[],p,inits)]) + | walk (S.Char ch,[],p,inits) = + (case (getc (inits)) + of SOME (chr,s) => + let val b = (chr = ch) + in + [(b, [],p+(if b then 1 else 0),(if b then s else inits))] + end + | NONE => [(false,[],p,inits)]) + | walk (S.Char ch,(c::cs),p,inits) = + (case (getc (inits)) + of SOME (chr,s) => if (chr = ch) + then walk (c,cs,(p+1),s) + else [(false,[],p,inits)] + | NONE => [(false,[],p,inits)]) + | walk (S.Begin,[],p,inits) = [(p=0,[],p,inits)] + | walk (S.Begin,(c::cs),p,inits) = if (p=0) + then walk (c,cs,p,inits) + else [(false,[],p,inits)] + | walk (S.End,[],p,inits) = [(not (Option.isSome (getc (inits))),[],p,inits)] + | walk (S.End,(c::cs),p,inits) = if (Option.isSome (getc (inits))) + then [(false,[],p,inits)] + else walk (c,cs,p,inits) + val l = walk (regexp,[],pos,stream) handle Subscript => [(false,[],pos,stream)] + val v as (result,matches,last,s') = longest l handle _ => (false,[],pos,stream) + in + if result then SOME(M.Match ({pos=stream,len=last-pos}, matches),s') + else NONE + end + + fun prefix regexp getc stream = scan (regexp,getc,0,stream) + + fun find regexp getc stream = + let fun loop (p,s) = (case (scan (regexp,getc,p,s)) + of NONE => (case (getc (s)) + of SOME (_,s') => loop (p+1,s') + | NONE => NONE) + | SOME v => SOME v) + in + loop (0,stream) + end + + fun match [] getc stream = NONE + | match l getc stream = + let val m = map (fn (r,f) => (scan (r, getc,0,stream), f)) l + (* find the longest SOME *) + fun loop ([],max,len) = max + | loop ((NONE,_)::xs,max,maxlen) = loop (xs,max,maxlen) + | loop ((SOME(m,cs),f)::xs,max,maxlen) = + let val {len, pos} = MatchTree.root m + in + if (len>maxlen) + then loop (xs,(SOME(m,cs),f),len) + else loop (xs,max,maxlen) + end + val (max,f) = loop (tl(m),hd(m),~1) + in + case max + of NONE => NONE + | SOME (m,cs) => SOME (f m,cs) + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/dfa-engine.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/dfa-engine.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/dfa-engine.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/dfa-engine.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,86 @@ +(* dfa-engine.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Implements a matcher engine based on deterministic finite + * automata. + *) + +structure DfaEngine : REGEXP_ENGINE = + struct + + structure D = Dfa + structure M = MatchTree + + type regexp = D.dfa + + (* a match specifies the position (as a stream) and the length of the match *) + type 'a match = {pos : 'a, len : int} MatchTree.match_tree + + fun compile r = D.build r handle _ => raise RegExpSyntax.CannotCompile + + (* scan looks at a stream and attempts to match the dfa. + * it returns NONE if it fails + * it returns SOME (pattern#,Match,rest of stream) upon success + *) + fun scan (regexp,getc,p,stream) = + let val move = D.move regexp + val accepting = D.accepting regexp + val canStart = D.canStart regexp + fun loop (state, p, inits, lastAccepting) = ( + case (getc (inits)) + of NONE => lastAccepting + | SOME (c,s') => ( + case move (state,c) + of NONE => lastAccepting + | SOME (new) => ( + case (accepting new) + of SOME n => loop (new, p+1, s', SOME(p+1,s',n)) + | NONE => loop (new, p+1, s', lastAccepting) + (* end case *)) + (* end case *)) + (* end case *)) + fun try0 stream = ( + case (accepting 0) + of (SOME n) => + SOME(n, M.Match({pos=stream,len=0},[]), stream) + | NONE => NONE + (* end case *)) + in + case (getc (stream)) + of NONE => try0 stream + | SOME (c,s') => ( + case loop (0, p, stream, NONE) + of NONE => try0 stream + | SOME(last, cs, n) => + SOME(n, M.Match({pos=stream,len=last-p},[]), cs) + (* end case *)) + (* end case *) + end + + fun prefix regexp getc stream = case (scan (regexp,getc,0,stream)) + of NONE => NONE + | SOME (n,m,cs) => SOME (m,cs) + + fun find regexp getc stream = + let fun loop (p,s) = (case (scan (regexp,getc,p,s)) + of NONE => (case (getc (s)) + of SOME (_,s') => loop (p+1,s') + | NONE => NONE) + | SOME (n,m,cs) => SOME (m,cs)) + in + loop (0,stream) + end + + fun match [] = (fn getc => fn stream => NONE) + | match l = + let val dfa = D.buildPattern (map #1 l) + val a = Vector.fromList (map (fn (a,b) => b) l) + in + fn getc => fn stream => case (scan (dfa,getc,0,stream)) + of NONE => NONE + | SOME(n,m,cs) => SOME((Vector.sub (a,n)) m,cs) + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/engine-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/engine-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/engine-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/engine-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,43 @@ +(* engine-sig.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +signature REGEXP_ENGINE = + sig + + type regexp + (* the type of a compiled regular expression + *) + + (* a match specifies the position (as a stream) and the length of the match *) + type 'a match = {pos : 'a, len : int} MatchTree.match_tree + + val compile : RegExpSyntax.syntax -> regexp + (* compile a regular expression from the abstract syntax + *) + + val find : regexp -> (char,'a) StringCvt.reader -> ('a match, 'a) StringCvt.reader + (* scan the stream for the first occurence of the regular expression. The call + * + * find re getc strm + * + * returns NONE if the end of stream is reached without a match. Otherwise it + * returns SOME(match, strm'), where match is the match-tree for the match and + * strm' is the stream following the match. + *) + + val prefix : regexp ->(char,'a) StringCvt.reader -> ('a match, 'a) StringCvt.reader + (* attempt to match the stream at the current position with the + * regular expression + *) + + val match : (RegExpSyntax.syntax * ('a match -> 'b)) list + -> (char,'a) StringCvt.reader -> ('b, 'a) StringCvt.reader + (* attempt to the match the stream at the current position with one of + * the abstract syntax representations of regular expressions and trigger + * the corresponding action + *) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/fsm.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/fsm.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/fsm.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/fsm.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,505 @@ +(* fsm.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Non-deterministic and deterministic finite-state machines. + *) + +signature NFA = + sig + + exception SyntaxNotHandled + + structure IntSet : ORD_SET where type Key.ord_key = int + + type nfa + + val build : RegExpSyntax.syntax * int -> nfa + val buildPattern : RegExpSyntax.syntax list -> nfa + val start : nfa -> IntSet.set + val move : nfa -> int * char -> IntSet.set + val chars : nfa -> int -> char list + val accepting : nfa -> int -> int option + + val print : nfa -> unit + end + +structure Nfa : NFA = + struct + + exception SyntaxNotHandled + + datatype move = Move of int * char option * int + + fun compareCharOption (NONE, NONE) = EQUAL + | compareCharOption (NONE, SOME c) = LESS + | compareCharOption (SOME c, NONE) = GREATER + | compareCharOption (SOME c, SOME c') = Char.compare (c,c') + + structure S = RegExpSyntax + structure IntSet = ListSetFn ( + struct + type ord_key = int + val compare = Int.compare + end) + structure Int2Set = ListSetFn ( + struct + type ord_key = int * int + fun compare ((i1,i2), (j1,j2)) = (case Int.compare (i1,j1) + of EQUAL => Int.compare (i2,j2) + | v => v + (* end case *)) + end) + structure MoveSet = ListSetFn ( + struct + type ord_key = move + fun compare (Move (i,c,j),Move (i',c',j')) = (case (Int.compare (i,i')) + of EQUAL => (case (compareCharOption (c, c')) + of EQUAL => Int.compare (j,j') + | v => v) + | v => v) + end) + structure CharSet = S.CharSet + + structure I = IntSet + structure I2 = Int2Set + structure M = MoveSet + structure C = CharSet + + (* create sets from lists *) + fun iList l = I.addList (I.empty,l) + fun mList l = M.addList (M.empty,l) + + datatype nfa = Nfa of {states : I.set, + moves : M.set, + accepting : I2.set} + + fun print (Nfa {states,moves,accepting}) = + let val pr = TextIO.print + val prI = TextIO.print o Int.toString + val prI2 = TextIO.print o (fn (i1,i2) => (Int.toString i1)) + val prC = TextIO.print o Char.toString + in + pr ("States: 0 -> "); + prI (I.numItems (states)-1); + pr "\nAccepting:"; + I2.app (fn k => (pr " "; prI2 k)) accepting; + pr "\nMoves\n"; + M.app (fn (Move (i,NONE,d)) => (pr " "; + prI i; + pr " --@--> "; + prI d; + pr "\n") + | (Move (i,SOME c,d)) => (pr " "; + prI i; + pr " --"; + prC c; + pr "--> "; + prI d; + pr "\n")) moves + end + + fun nullAccept n = Nfa {states=iList [0,1], moves=M.add (M.empty, Move (0,NONE,1)), + accepting=I2.singleton (1,n)} + fun nullRefuse n = Nfa {states=iList [0,1], moves=M.empty, + accepting=I2.singleton (1,n)} + + fun renumber n st = n + st + fun renumberMove n (Move (s,c,s')) = Move (renumber n s, c, renumber n s') + fun renumberAcc n (st,n') = (n+st,n') + + fun build' n (S.Group e) = build' n e + | build' n (S.Alt l) = + foldr (fn (Nfa {states=s1, + moves=m1,...}, + Nfa {states=s2, + moves=m2,...}) => + let val k1 = I.numItems s1 + val k2 = I.numItems s2 + val s1' = I.map (renumber 1) s1 + val s2' = I.map (renumber (k1+1)) s2 + val m1' = M.map (renumberMove 1) m1 + val m2' = M.map (renumberMove (k1+1)) m2 + in + Nfa {states=I.addList (I.union (s1',s2'), + [0,k1+k2+1]), + moves=M.addList (M.union (m1',m2'), + [Move (0,NONE,1), + Move (0,NONE,k1+1), + Move (k1,NONE,k1+k2+1), + Move (k1+k2,NONE,k1+k2+1)]), + accepting=I2.singleton (k1+k2+1,n)} + end) + (nullRefuse n) (map (build' n) l) + | build' n (S.Concat l) = + foldr (fn (Nfa {states=s1,moves=m1,...}, + Nfa {states=s2,moves=m2,accepting}) => + let val k = I.numItems s1 - 1 + val s2' = I.map (renumber k) s2 + val m2' = M.map (renumberMove k) m2 + val accepting' = I2.map (renumberAcc k) accepting + in + Nfa {states=I.union (s1,s2'), + moves=M.union (m1,m2'), + accepting=accepting'} + end) + (nullAccept n) (map (build' n) l) + | build' n (S.Interval(e, 0, SOME 1)) = build' n (S.Alt [S.Concat [], e]) + | build' n (S.Interval(e, 0, NONE)) = + build' n (S.Alt [S.Concat [], S.posClosure e]) + | build' n (S.Interval(e, 1, NONE)) = let + val (Nfa {states,moves,...}) = build' n e + val m = I.numItems states + in + Nfa { + states=I.add (states,m), + moves=M.addList (moves, [Move (m-1,NONE,m), Move (m-1,NONE,0)]), + accepting=I2.singleton (m,n) + } + end + | build' n (S.Interval(e, n1, n2)) = raise SyntaxNotHandled + | build' n (S.MatchSet s) = + if (S.CharSet.isEmpty s) then nullAccept (n) + else + let val moves = S.CharSet.foldl (fn (c,moveSet) => M.add (moveSet,Move (0,SOME c,1))) + M.empty s + in + Nfa {states=iList [0,1], + moves=moves, + accepting=I2.singleton (1,n)} + end + | build' n (S.NonmatchSet s) = + let val moves = S.CharSet.foldl (fn (c,moveSet) => M.add (moveSet,Move (0,SOME c,1))) + M.empty (S.CharSet.difference (S.allChars,s)) + in + Nfa {states=iList [0,1], + moves=moves, + accepting=I2.singleton (1,n)} + end + | build' n (S.Char c) = Nfa {states=iList [0,1], + moves=M.singleton (Move (0,SOME c,1)), + accepting=I2.singleton (1,n)} + | build' n (S.Begin) = raise SyntaxNotHandled + | build' n (S.End) = raise SyntaxNotHandled + + + fun build (r,n) = let val (Nfa {states,moves,accepting}) = build' n r + (* Clean up the nfa to remove epsilon moves. + * A simple way to do this: + * 1. states={0}, moves={} + * 2. for every s in states, + * 3. compute closure(s) + * 4. for any move (i,c,o) with i in closure (s) + * 5. add move (0,c,o) to moves + * 6. add state o to states + * 7. repeat until no modifications to states and moves + *) + in + Nfa {states=states, moves=moves, accepting=accepting} + end + + fun buildPattern rs = + let fun loop ([],_) = [] + | loop (r::rs,n) = (build (r,n))::(loop (rs,n+1)) + val rs' = loop (rs,0) + val renums = foldr (fn (Nfa {states,...},acc) => 1::(map (fn k=>k+I.numItems states) + acc)) [] rs' + val news = ListPair.map (fn (Nfa {states,moves,accepting},renum) => + let val newStates=I.map (renumber renum) states + val newMoves=M.map (renumberMove renum) moves + val newAcc=I2.map (renumberAcc renum) accepting + in + Nfa{states=newStates, + moves=newMoves, + accepting=newAcc} + end) (rs',renums) + val (states,moves,accepting) = foldl (fn (Nfa{states,moves,accepting},(accS,accM,accA))=> + (I.union (states,accS), + M.union (moves,accM), + I2.union (accepting,accA))) + (I.singleton 0, + M.addList (M.empty, + map (fn k => Move (0,NONE,k)) renums), + I2.empty) news + in + Nfa {states=states,moves=moves,accepting=accepting} + + end + + fun accepting (Nfa {accepting,...}) state = + let val item = I2.find (fn (i,_) => (i=state)) accepting + in + case item + of NONE => NONE + | SOME (s,n) => SOME (n) + end + + (* Compute possible next states from orig with character c *) + fun oneMove (Nfa {moves,...}) (orig,char) = + M.foldr (fn (Move (_,NONE,_),set) => set + | (Move (or,SOME c,d),set) => + if (c=char) andalso (or=orig) + then I.add (set,d) + else set) + I.empty moves + + fun closure (Nfa {moves,...}) origSet = + let fun addState (Move (orig,NONE,dest),(b,states)) = + if (I.member (states,orig) andalso + not (I.member (states,dest))) + then (true,I.add (states,dest)) + else (b,states) + | addState (_,bs) = bs + fun loop (states) = + let val (modified,new) = M.foldr addState + (false,states) moves + in + if modified + then loop (new) + else new + end + in + loop (origSet) + end + + fun move nfa = + let val closure = closure nfa + val oneMove = oneMove nfa + in + closure o oneMove + end + + fun start nfa = closure nfa (I.singleton 0) + + fun chars (Nfa{moves,...}) state = let + fun f (Move(s1, SOME c, s2), s) = + if (s1 = state) then C.add(s, c) else s + | f (_, s) = s + in + C.listItems (M.foldl f C.empty moves) + end + + end + +signature DFA = + sig + + exception SyntaxNotHandled + + type dfa + + val build : RegExpSyntax.syntax -> dfa + val buildPattern : RegExpSyntax.syntax list -> dfa + val move : dfa -> int * char -> int option + val accepting : dfa -> int -> int option + val canStart : dfa -> char -> bool + + end + +structure Dfa : DFA = + struct + + exception SyntaxNotHandled + + datatype move = Move of int * char option * int + + fun compareCharOption (NONE,NONE) = EQUAL + | compareCharOption (NONE,SOME (c)) = LESS + | compareCharOption (SOME(c),NONE) = GREATER + | compareCharOption (SOME(c),SOME(c')) = Char.compare (c,c') + + structure N = Nfa + structure IntSet = N.IntSet + structure IntSetSet = + ListSetFn (struct + type ord_key = IntSet.set + val compare = IntSet.compare + end) + structure Int2Set = + ListSetFn (struct + type ord_key = int * int + fun compare ((i1,i2),(j1,j2)) = + case (Int.compare (i1,j1)) + of EQUAL => Int.compare (i2,j2) + | v => v + end) + structure MoveSet = + ListSetFn (struct + type ord_key = move + fun compare (Move (i,c,j),Move (i',c',j')) = + (case (Int.compare (i,i')) + of EQUAL => + (case (compareCharOption (c,c')) + of EQUAL => Int.compare (j,j') + | v => v) + | v => v) + end) + structure CharSet = + ListSetFn (struct + type ord_key = char + val compare = Char.compare + end) + + structure IS = IntSetSet + structure I = IntSet + structure I2 = Int2Set + structure M = MoveSet + structure C = CharSet + structure A2 = Array2 + structure A = Array + structure Map = ListMapFn (struct + type ord_key = IntSet.set + val compare = IntSet.compare + end) + + (* create sets from lists *) + fun iList l = I.addList (I.empty,l) + fun mList l = M.addList (M.empty,l) + + datatype dfa = Dfa of {states : I.set, + moves : M.set, + accepting : I2.set, + table : int option A2.array, + accTable : (int option) A.array, + startTable : bool A.array} + + fun print (Dfa {states,moves,accepting,...}) = + let val pr = TextIO.print + val prI = TextIO.print o Int.toString + val prI2 = TextIO.print o (fn (i1,i2) => Int.toString i1) + val prC = TextIO.print o Char.toString + in + pr ("States: 0 -> "); + prI (I.numItems (states)-1); + pr "\nAccepting:"; + I2.app (fn k => (pr " "; prI2 k)) accepting; + pr "\nMoves\n"; + M.app (fn (Move (i,NONE,d)) => (pr " "; + prI i; + pr " --@--> "; + prI d; + pr "\n") + | (Move (i,SOME c,d)) => (pr " "; + prI i; + pr " --"; + prC c; + pr "--> "; + prI d; + pr "\n")) moves + end + + + fun move' moves (i,c) = + (case (M.find (fn (Move (s1,SOME c',s2)) => + (s1=i andalso c=c')) + moves) + of NONE => NONE + | SOME (Move (s1,SOME c',s2)) => SOME s2) +(* fun move (Dfa {moves,...}) (i,c) = move' moves (i,c) *) + fun move (Dfa {table,...}) (i,c) = A2.sub (table,i,ord(c)-ord(Char.minChar)) + + fun accepting' accepting i = I2.foldr (fn ((s,n),NONE) => if (s=i) + then SOME(n) + else NONE + | ((s,n),SOME(n')) => if (s=i) + then SOME(n) + else SOME(n')) + NONE accepting +(* fun accepting (Dfa {accepting,...}) i = accepting' accepting i *) + fun accepting (Dfa {accTable,...}) i = A.sub (accTable,i) + + fun canStart (Dfa {startTable,...}) c = A.sub (startTable,ord(c)) + + fun build' nfa = + let val move = N.move nfa + val accepting = N.accepting nfa + val start = N.start nfa + val chars = N.chars nfa + fun getAllChars (ps) = + I.foldl + (fn (s,cs) => C.addList (cs,chars s)) + C.empty ps + val initChars = getAllChars (start) + fun getAllStates (ps,c) = + I.foldl + (fn (s,ss) => I.union (ss,move (s,c))) + I.empty ps + fun loop ([],set,moves) = (set,moves) + | loop (x::xs,set,moves) = + let val cl = getAllChars (x) + val (nstack,sdu,ml) = + C.foldl + (fn (c,(ns,sd,ml)) => + let val u = getAllStates (x,c) + in + if (not (IS.member (set,u)) + andalso (not (IS.member (sd,u)))) + then (u::ns, + IS.add (sd,u), + (x,c,u)::ml) + else (ns,sd,(x,c,u)::ml) + end) ([],IS.empty,[]) cl + in + loop (nstack@xs,IS.union(set,sdu),ml@moves) + end + val (sSet,mList) = loop ([start],IS.singleton (start), []) + val num = ref 1 + fun new () = let val n = !num + in + num := n+1 ; n + end + val sMap = Map.insert (Map.empty, start, 0) + val sSet' = IS.delete (sSet,start) + val sMap = IS.foldl (fn (is,map) => Map.insert (map,is,new ())) + sMap sSet' + val states = I.addList (I.empty,List.tabulate(!num,fn x => x)) + val moves = M.addList (M.empty, + map (fn (is1,c,is2) => + Move (valOf (Map.find (sMap,is1)), + SOME c, + valOf (Map.find (sMap,is2)))) + mList) + (* Given a set of accepting states, look for a given state, + * with the minimal corresponding pattern number + *) + fun minPattern accSet = let val l = map (valOf o accepting) (I.listItems accSet) + fun loop ([],min) = min + | loop (n::ns,min) = + if (n + let val items = I.filter (fn k => + case (accepting k) + of SOME _ => true + | NONE => false) is + in + if (I.isEmpty items) + then cis + else + I2.add (cis,(valOf (Map.find (sMap,is)), + minPattern items)) + end) I2.empty sSet + val table = A2.tabulate A2.RowMajor (!num, + ord(Char.maxChar)-ord(Char.minChar)+1, + fn (s,c) => move' moves (s,chr(c+ord(Char.minChar)))) + val accTable = A.tabulate (!num, + fn (s) => accepting' accept s) + val startTable = A.tabulate (ord(Char.maxChar)- + ord(Char.minChar)+1, + fn (c) => C.member (initChars, + chr(c+ord(Char.minChar)))) + in + Dfa {states=states,moves=moves,accepting=accept, + table=table,accTable=accTable,startTable=startTable} + end + + fun build r = build' (N.build (r,0)) + + fun buildPattern rs = build' (N.buildPattern rs) + + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/thompson-engine.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/thompson-engine.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/thompson-engine.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/BackEnd/thompson-engine.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,309 @@ +(* thompson-engine.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This is an implementation of Ken Thompson's RE matchine algorithm from + * CACM (1968). It is based on the description of the algorithm by Russ + * Cox at http://swtch.com/~rsc/regexp/regexp1.html. + *) + +structure ThompsonEngine : REGEXP_ENGINE = + struct + + structure RE = RegExpSyntax + structure CSet = RE.CharSet + structure M = MatchTree + + (* a match specifies the position (as a stream) and the length of the match *) + type 'a match = {pos : 'a, len : int} MatchTree.match_tree + + (* intermediate representation of states *) + datatype state_kind + = CHR' of (char * state' ref) + | CSET' of (CSet.set * state' ref) + | NCSET' of (CSet.set * state' ref) + | SPLIT' of (state' ref * state' ref) + | BOL' of state' ref (* assert beginning of line *) + | EOL' of state' ref (* assert end of line *) + | FINAL' + + withtype state' = {id : int, kind : state_kind} + + type frag = {start : state', out : state' ref list} + + (* return the ID of a state *) + fun idOf {id, kind} = id + + val final = {id = 0, kind = FINAL'} + + (* interpreter representation of states *) + datatype state + = CHR of (char * int) + | CSET of (CSet.set * int) + | NCSET of (CSet.set * int) + | SPLIT of (int * int) + | BOL of int (* assert beginning of line *) + | EOL of int (* assert end of line *) + | FINAL + + fun cvtState {id, kind} = (case kind + of CHR'(c, out) => CHR(c, idOf(!out)) + | CSET'(cset, out) => CSET(cset, idOf(!out)) + | NCSET'(cset, out) => NCSET(cset, idOf(!out)) + | SPLIT'(out1, out2) => SPLIT(idOf(!out1), idOf(!out2)) + | BOL' out => BOL(idOf(!out)) + | EOL' out => EOL(idOf(!out)) + | FINAL' => FINAL + (* end case *)) + + datatype regexp = RE of {start : int, states : state vector} + + fun compile re = let + (* the list of states; state 0 is always the accepting state *) + val nStates = ref 1 + val states = ref [final] + (* create new states *) + fun new kind = let + val id = !nStates + val s = {id = id, kind = kind} + in + states := s :: !states; + nStates := id+1; + s + end + fun newChr (c, out) = new (CHR'(c, out)) + fun newCset (cset, out) = new (CSET'(cset, out)) + fun newNcset (cset, out) = new (NCSET'(cset, out)) + fun newSplit (out1, out2) = new (SPLIT'(out1, out2)) + fun newBOL out = new (BOL' out) + fun newEOL out = new (EOL' out) + (* update the outputs of a fragment *) + fun setOuts (f : frag, s : state') = List.app (fn r => r := s) (#out f) + (* compile an RE *) + fun reComp re = (case re + of RE.Group re => reComp re + | RE.Alt[] => raise RE.CannotCompile + | RE.Alt[re] => reComp re + | RE.Alt(re::rest) => let + val f1 = reComp re + val f2 = reComp (RE.Alt rest) + val s = newSplit(ref(#start f1), ref(#start f2)) + in + {start = s, out = #out f1 @ #out f2} + end + | RE.Concat[] => raise RE.CannotCompile + | RE.Concat[re] => reComp re + | RE.Concat(re::rest) => cat (re, RE.Concat rest) + | RE.Interval(re, 0, SOME 1) => option re + | RE.Interval(re, 0, NONE) => closure re + | RE.Interval(re, 1, NONE) => posClosure re + | RE.Interval _ => raise RE.CannotCompile + | RE.MatchSet cset => let + val out = ref final + in + {start = newCset(cset, out), out = [out]} + end + | RE.NonmatchSet cset => let + val out = ref final + in + {start = newNcset(cset, out), out = [out]} + end + | RE.Char c => let + val out = ref final + in + {start = newChr(c, out), out = [out]} + end + | RE.Begin => let + val out = ref final + in + {start = newBOL out, out = [out]} + end + | RE.End => raise RE.CannotCompile + (* end case *)) + (* compile re1 . re2 *) + and cat (re1, re2) = let + val f1 = reComp re1 + val f2 = reComp re2 + in + setOuts (f1, #start f2); + {start = #start f1, out = #out f2} + end + (* compile re? *) + and option re = let + val f = reComp re + val out = ref final + val s = newSplit(ref(#start f), out) + in + {start = s, out = out :: #out f} + end + (* compile re* *) + and closure re = let + val f = reComp re + val out = ref final + val s = newSplit(ref(#start f), out) + in + setOuts (f, s); + {start = s, out = [out]} + end + (* compile re+ *) + and posClosure re = let + val f = reComp re + val out = ref final + val s = newSplit(ref(#start f), out) + in + setOuts (f, s); + {start = #start f, out = [out]} + end + (* generate the intermediate state representation *) + val frag = reComp re + val _ = setOuts (frag, final) + (* convert the states to the final representation; note that we reverse the list + * so that the states are now in increasing order. + *) + val states = List.foldl (fn (s, l) => cvtState s :: l) [] (!states) + in + RE{ start = idOf(#start frag), states = Vector.fromList states } + end + +(* +DEBUG *) + fun stateToString (CHR(c, out)) = + concat["CHR (#\"", Char.toString c, "\", ", Int.toString out, ")"] + | stateToString (CSET(cs, out)) = concat["CSET (-, ", Int.toString out, ")"] + | stateToString (NCSET(cs, out)) = concat["NCSET (-, ", Int.toString out, ")"] + | stateToString (SPLIT(out1, out2)) = + concat["SPLIT (", Int.toString out1, ", ", Int.toString out2, ")"] + | stateToString (BOL out) = concat["BOL ", Int.toString out] + | stateToString (EOL out) = concat["EOL ", Int.toString out] + | stateToString FINAL = "FINAL" + fun dump (RE{start, states}) = let + fun prState st = print(stateToString st) + in + print(concat["start = ", Int.toString start, "\n"]); + Vector.appi (fn (i, st) => (print(Int.toString i ^ ": "); prState st; print "\n")) + states + end +(* -DEBUG *) + + (* scan the stream for the first occurrence of the regular expression *) + fun scan (RE{start, states}, getc : (char,'a) StringCvt.reader) = let +(*val _ = dump (RE{start=start, states=states})*) + (* to make elimination of duplicates in a state set cheap, we map state IDs + * to a stamp of the last set that they were added to. + *) + val stamp = ref 0w1 + val lastStamp = Array.array(Vector.length states, 0w0) + fun addState (stamp', stateList, id) = + if (Array.sub(lastStamp, id) = stamp') + then stateList + else ( + Array.update(lastStamp, id, stamp'); + case Vector.sub(states, id) + of SPLIT(out1, out2) => + addState (stamp', addState (stamp', stateList, out1), out2) + | state => state :: stateList + (* end case *)) + fun startState () = let + val stamp' = !stamp + in + stamp := stamp' + 0w1; + addState (stamp', [], start) + end + fun isMatch stamp' = (Array.sub(lastStamp, 0) = stamp') + (* attempt to match the RE starting with the stream startPos *) + fun find' (isFirst, startPos) = let + fun scan (_, _, _, lastAccepting, []) = lastAccepting + | scan (isFirst, n, strm, lastAccepting, nfaState) = (case getc strm + of NONE => if isMatch (!stamp) + then SOME(n, startPos) + else lastAccepting + | SOME(c, strm') => let + val stamp' = !stamp + val _ = (stamp := stamp' + 0w1) + fun test ([], nextStates) = nextStates + | test (s::r, nextStates) = let + fun continue nextStates = test(r, nextStates) + fun add out = continue(addState (stamp', nextStates, out)) + in + case s + of CHR(c', out) => if (c = c') + then add out + else continue nextStates + | CSET(cset, out) => if CSet.member(cset, c) + then add out + else continue nextStates + | NCSET(cset, out) => if CSet.member(cset, c) + then continue nextStates + else add out + | BOL out => if isFirst + then test(Vector.sub(states, out)::r, nextStates) + else continue nextStates + | EOL out => raise Fail "end-of-line not supported yet" + | _ => continue nextStates + (* end case *) + end + val nextNfaState = test (nfaState, []) + val lastAccepting = if isMatch stamp' + then SOME(n+1, startPos) + else lastAccepting + in +(* +print(concat[ +"{", String.concatWith "," (List.map stateToString nfaState), "} -- ", +"#\"", Char.toString c, "\" --> {", +String.concatWith "," (List.map stateToString nextNfaState), "}\n"]); +*) + scan ((c = #"\n"), n+1, strm', lastAccepting, nextNfaState) + end + (* end case *)) + in + case scan (isFirst, 0, startPos, NONE, startState()) + of NONE => NONE + | SOME(n, strm) => SOME(M.Match({pos=startPos, len=n}, []), strm) + (* end case *) + end + in + find' + end + + fun find re getc stream = let + val scan = scan (re, getc) + fun loop (isFirst, s) = (case (scan (isFirst, s)) + of NONE => (case (getc s) + of SOME(#"\n", s') => loop (true, s') + | SOME(_, s') => loop (false, s') + | NONE => NONE + (* end case *)) + | SOME v => SOME v + (* end case *)) + in + loop (true, stream) + end + + fun prefix re getc strm = scan (re, getc) (true, strm) + + fun match [] = (fn getc => fn strm => NONE) + | match l = let + (* compile the REs *) + val l = List.map (fn (re, act) => (compile re, act)) l + fun match' getc strm = let + (* find the longest SOME *) + fun loop ([], max, _) = max + | loop ((re, act)::r, max, maxLen) = (case scan(re, getc) (true, strm) + of NONE => loop (r, max, maxLen) + | SOME(m as MatchTree.Match({len, ...}, _), cs) => + if (len > maxLen) + then loop (r, SOME(m, act, cs), len) + else loop (r, max, maxLen) + (* end case *)) + in + case loop (l, NONE, ~1) + of NONE => NONE + | SOME(m, act, cs) => SOME(act m, cs) + (* end case *) + end + in + match' + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/awk-syntax.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/awk-syntax.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/awk-syntax.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/awk-syntax.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,254 @@ +(* awk-syntax.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This module implements the AWK syntax for regular expressions. The + * syntax is defined on pp. 28-30 of "The AWK Programming Language," + * by Aho, Kernighan and Weinberger. We have extended it with interval + * syntax, which was added as part of the POSIX standard. + * + * The meta characters are: + * "\" "^" "$" "." "[" "]" "|" "(" ")" "*" "+" "?" + * + * Atomic REs: + * c matches the character c (for non-metacharacters c) + * "^" matches the empty string at the beginning of a line + * "$" matches the empty string at the end of a line + * "." matches any single character (except \000 and \n) + * + * Escape sequences: + * "\b" matches backspace + * "\f" matches formfeed + * "\n" matches newline (linefeed) + * "\r" matches carriage return + * "\t" matches tab + * "\"ddd matches the character with octal code ddd. + * "\"c matches the character c (e.g., \\ for \, \" for ") + * "\x"dd matches the character with hex code dd. + * + * Character classes: + * [...] matches any character in "..." + * [^...] a complemented character list, which matches any character not + * in the list "..." + * + * Compound regular expressions, where A and B are REs: + * A|B matches A or B + * AB matches A followed by B + * A? matches zero or one As + * A* matches zero or more As + * A+ matches one or more As + * A{n} matches n copies of A + * A{n,} matches n copies of A + * A{n,m} matches n copies of A + * (A) matches A + *) + +structure AwkSyntax : REGEXP_PARSER = + struct + + structure R = RegExpSyntax + + structure SC = StringCvt + structure W8 = Word8 + structure C = Char + + val isMeta = C.contains "\\^$.[]|()*+?" + + exception Error + + val dotMatch = R.NonmatchSet (R.CharSet.addList (R.CharSet.empty,explode "\000\n")) + + fun scan getc cs = let + fun getc' cs = (case (getc cs) + of NONE => raise Error + | (SOME arg) => arg) + (* end case *) + fun isOctDigit c = (#"0" <= c) andalso (c <= #"7") + fun returnVal (v, cl, cs) = let + val (n, _) = valOf (Int.scan v List.getItem cl) + in + (C.chr n, cs) handle _ => raise Error + (* SC.scanString (Int.scan SC.OCT) (implode [c1,c2,c3]) *) + end + fun getDecimal cs = let + fun lp (cs, digits) = (case getc cs + of NONE => (cs, List.rev digits) + | SOME(c, cs') => + if (C.isDigit c) then lp(cs', c::digits) + else (cs, List.rev digits) + (* end case *)) + in + case lp (cs, []) + of (_, []) => raise Error (* no digits *) + | (cs, digits) => let + val SOME(n, _) = (Int.scan SC.DEC List.getItem digits) + in + (n, cs) + end + (* end case *) + end + fun getHexChar (c,cs) = (case (getc cs) + of NONE => returnVal (SC.HEX,[c],cs) + | SOME (c',cs') => + if not (C.isHexDigit c') then returnVal (SC.HEX,[c],cs) + else returnVal (SC.HEX,[c,c'],cs') + (* end case *)) + fun getOctalChar (c,cs) = (case (getc cs) + of NONE => returnVal (SC.OCT,[c],cs) + | SOME(c',cs') => + if not (isOctDigit c') then returnVal (SC.OCT,[c],cs) + else (case (getc cs') + of NONE => returnVal (SC.OCT,[c,c'],cs') + | SOME (c'',cs'') => + if not (isOctDigit c'') then returnVal (SC.OCT,[c,c'],cs') + else returnVal (SC.OCT,[c,c',c''],cs''))) + fun getEscapeChar cs = (case (getc' cs) + of (#"b", cs) => (#"\008", cs) + | (#"f", cs) => (#"\012", cs) + | (#"n", cs) => (#"\n", cs) + | (#"r", cs) => (#"\013", cs) + | (#"t", cs) => (#"\t", cs) + | (#"x", cs) => let val (c1,cs) = getc' cs + in + if (C.isHexDigit c1) then getHexChar (c1,cs) else raise Error + end + | (c1, cs) => + if (isOctDigit c1) then getOctalChar (c1,cs) else (c1, cs)) + fun scanAlt (stk, cs) = let + val (re, cs') = scanSeq([], cs) + in + case (stk, getc cs') + of ([], NONE) => (re, cs') + | (_, SOME(#"|", cs'')) => scanAlt(re::stk, cs'') + | _ => (R.Alt(rev(re::stk)), cs') + (* end case *) + end + and scanSeq (stk, cs) = let + fun continue (re, cs') = scanSeq(re::stk, cs') + fun done () = (R.Concat(rev stk), cs) + in + case (stk, getc cs) + of ([], NONE) => raise Error + | ([re], NONE) => (re, cs) + | (_, NONE) => done() + | (re::r, SOME(#"{", cs')) => let + val (n, m, cs'') = scanInterval cs' + in + scanSeq (R.Interval(re, n, m)::r, cs'') + end + | (re::r, SOME(#"?", cs')) => scanSeq (R.optional re :: r, cs') + | (re::r, SOME(#"*", cs')) => scanSeq (R.closure re :: r, cs') + | (re::r, SOME(#"+", cs')) => scanSeq (R.posClosure re :: r, cs') + | (_, SOME(#"|", _)) => done() + | (_, SOME(#")", _)) => done() + | (_, SOME(#"(", cs')) => continue(scanGrp cs') + | (_, SOME(#".", cs')) => continue(dotMatch, cs') + | (_, SOME(#"^", cs')) => continue(R.Begin, cs') + | (_, SOME(#"$",cs')) => continue(R.End, cs') + | (_, SOME(#"[", cs')) => continue(scanClass cs') + | (_, SOME(#"\\", cs')) => continue(scanEscape cs') + | (_, SOME(c, cs')) => if (isMeta c) + then raise Error + else scanSeq((R.Char c)::stk, cs') + (* end case *) + end + (* scan the tail of "{n}", "{n,}", or "{n,m"}", where the leading "{" has already + * been scanned. + *) + and scanInterval cs = let + val (n, cs) = getDecimal cs + in + case getc cs + of SOME(#",", cs) => (case getc cs + of SOME(#"}", cs) => (n, NONE, cs) + | _ => let + val (m, cs) = getDecimal cs + in + case getc cs + of SOME(#"}", cs) => (n, SOME m, cs) + | _ => raise Error + (* end case *) + end + (* end case *)) + | SOME(#"}", cs) => (n, SOME n, cs) + | _ => raise Error + (* end case *) + end + and scanGrp cs = let + val (re, cs') = scanAlt ([], cs) + in + case (getc' cs') + of (#")", cs'') => (R.Group re, cs'') + | _ => raise Error + (* end case *) + end + and scanClass cs = let + fun scanClass' cs = let + fun scanRange1 (set, cs) = (case (getc' cs) + of (#"]", cs) => (set,cs) + | (#"\\", cs) => let + val (c, cs) = getEscapeChar cs + in + scanRange2 (set, c, cs) + end + | (c, cs) => scanRange2 (set, c, cs) + (* end case *)) + and scanRange2 (set, c, cs) = (case (getc' cs) + of (#"]", cs) => (R.CharSet.add(set, c), cs) + | (#"\\", cs) => let + val (c', cs) = getEscapeChar cs + in + scanRange2 (R.CharSet.add(set, c), c', cs) + end + | (#"-", cs) => scanRange3 (set, c, cs) + | (c', cs) => + scanRange2 (R.CharSet.add(set, c), c', cs) + (* end case *)) + and scanRange3 (set, minC, cs) = (case (getc' cs) + of (#"]", cs) => + (R.CharSet.add(R.CharSet.add(set, minC), #"-"), cs) + | (#"\\", cs) => let + val (c, cs) = getEscapeChar cs + in + chkRange(set, minC, c, cs) + end + | (c, cs) => chkRange(set, minC, c, cs) + (* end case *)) + and chkRange (set, minC, maxC, cs) = + if (minC > maxC) + then scanRange1 (set,cs ) (*raise Error *) (* as per bwk test suite *) + else scanRange1 (R.addRange (set,minC,maxC),cs) (*R.CharSet.addList (set,List.tabulate (ord(maxC)-ord(minC)+1,fn v => chr (v+ord(minC)))), cs) *) + in + case (getc' cs) + of (#"-", cs) => + scanRange1(R.CharSet.add(R.CharSet.empty, #"-"), cs) + | (#"]", cs) => + scanRange2(R.CharSet.empty, #"]", cs) (* as per bwk test suite *) + | _ => scanRange1(R.CharSet.empty, cs) + (* end case *) + end + in + case (getc' cs) + of (#"^", cs) => let + val (set, cs) = scanClass' cs + in + (R.NonmatchSet set, cs) + end + | _ => let + val (set, cs) = scanClass' cs + in + (R.MatchSet set, cs) + end + (* end case *) + end + and scanEscape cs = let val (c, cs) = getEscapeChar cs + in + (R.Char c, cs) + end + in + SOME(scanAlt([], cs)) handle Error => NONE + end + + + end (* AWK_RE_Syntax *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/parser-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/parser-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/parser-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/parser-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,17 @@ +(* parser-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +signature REGEXP_PARSER = + sig + + val scan : (char, 'a) StringCvt.reader + -> (RegExpSyntax.syntax, 'a) StringCvt.reader + (* read an external representation of a regular expression + * from the stream and return an abstract syntax representation + *) + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/syntax-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/syntax-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/syntax-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/syntax-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,56 @@ +(* syntax-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This is the abstract syntax tree used to represent regular expressions. + * It serves as the glue between different front-ends (implementing + * different RE specification languages), and different back-ends (implementing + * different compilation/searching algorithms). + *) + +signature REGEXP_SYNTAX = + sig + + exception CannotCompile + + structure CharSet : ORD_SET where type Key.ord_key = char + + datatype syntax + = Group of syntax + | Alt of syntax list + | Concat of syntax list + | Interval of (syntax * int * int option) + | MatchSet of CharSet.set + | NonmatchSet of CharSet.set + | Char of char + | Begin (* Matches beginning of stream *) + | End (* Matches end of stream *) + + (* shorthand for standard RE forms *) + val optional : syntax -> syntax (* == Interval(re, 0, SOME 1) *) + val closure : syntax -> syntax (* == Interval(re, 0, NONE) *) + val posClosure : syntax -> syntax (* == Interval(re, 1, NONE) *) + + val fromRange : char * char -> CharSet.set + val addRange : CharSet.set * char * char -> CharSet.set + + val allChars : CharSet.set + + (* POSIX character sets (plus a couple) *) + val alnum : CharSet.set (* letters and digits *) + val alpha : CharSet.set (* letters *) + val ascii : CharSet.set (* 0 <= ord c <= 127 *) + val blank : CharSet.set (* #"\t" and space *) + val cntl : CharSet.set (* non-printable characters *) + val digit : CharSet.set (* decimal digits *) + val graph : CharSet.set (* visible characters (does not include space) *) + val lower : CharSet.set (* lower-case letters *) + val print : CharSet.set (* printable characters (includes space) *) + val punct : CharSet.set (* visible characters other than letters and digits *) + val space : CharSet.set (* #"\t", #"\r", #"\n", #"\v", #"\f", and space *) + val upper : CharSet.set (* upper-case letters *) + val word : CharSet.set (* letters, digit, and underscore *) + val xdigit : CharSet.set (* hexadecimal digits *) + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/syntax.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/syntax.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/syntax.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/FrontEnd/syntax.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,66 @@ +(* syntax.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This is the abstract syntax tree used to represent regular expressions. + * It serves as the glue between different front-ends (implementing + * different RE specification languages), and different back-ends (implementing + * different compilation/searching algorithms). + *) + +structure RegExpSyntax : REGEXP_SYNTAX = + struct + + exception CannotCompile + + structure CharSet = ListSetFn ( + struct type ord_key = char + val compare = Char.compare end) + + datatype syntax + = Group of syntax + | Alt of syntax list + | Concat of syntax list + | Interval of (syntax * int * int option) + | MatchSet of CharSet.set + | NonmatchSet of CharSet.set + | Char of char + | Begin + | End + + fun optional re = Interval(re, 0, SOME 1) + fun closure re = Interval(re, 0, NONE) + fun posClosure re = Interval(re, 1, NONE) + + fun addRange (s, minC ,maxC) = let + val fst = ord minC + val lst = ord maxC + in + CharSet.addList (s, List.tabulate (lst - fst + 1, fn v => chr(v + fst))) + end + fun fromRange (minC, maxC) = addRange (CharSet.empty, minC, maxC) + + val allChars = fromRange (Char.minChar, Char.maxChar) + + val digit = fromRange (#"0", #"9") + val lower = fromRange (#"a", #"z") + val upper = fromRange (#"A", #"Z") + val alpha = CharSet.union(lower, upper) + val alnum = CharSet.union(alpha, digit) + val ascii = fromRange (#"\000", #"\127") + val blank = CharSet.fromList [#" ", #"\t"] + val cntl = addRange(CharSet.singleton #"\127", #"\000", #"\031") + val graph = fromRange (#"\033", #"\126") + val print = CharSet.add (graph, #" ") + val punct = CharSet.fromList [ + #"]", #"[", #"!", #"\"", #"#", #"$", #"%", #"&", + #"'", #"(", #")", #"*", #"+", #",", #".", #"/", + #":", #";", #"<", #"=", #">", #"?", #"@", #"\\", + #"^", #"_", #"`", #"{", #"|", #"}", #"~", #"-" + ] + val space = CharSet.fromList [#"\t", #"\r", #"\n", #"\v", #"\f", #" "] + val word = CharSet.add(alnum, #"_") + val xdigit = addRange (addRange (digit, #"a", #"f"), #"A", #"F") + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/Glue/match-tree.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/Glue/match-tree.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/Glue/match-tree.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/Glue/match-tree.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,116 @@ +(* match-tree.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Match trees are used to represent the results of matching regular + * expressions. + *) + +signature MATCH_TREE = + sig + + (* a match tree is used to represent the results of a nested + * grouping of regular expressions. + *) + datatype 'a match_tree = Match of 'a * 'a match_tree list + + val root : 'a match_tree -> 'a + (* return the root (outermost) match in the tree *) + val nth : ('a match_tree * int) -> 'a (* raises Subscript *) + (* return the nth match in the tree; matches are labeled in pre-order + * starting at 0. + *) + val map : ('a -> 'b) -> 'a match_tree -> 'b match_tree + (* map a function over the tree (in preorder) *) + val app : ('a -> unit) -> 'a match_tree -> unit + (* apply a given function over ever element of the tree (in preorder) *) + val foldl : ('a * 'b -> 'b) -> 'b -> 'a match_tree -> 'b + (* fold in left-to-right pre-order *) + val foldr : ('a * 'b -> 'b) -> 'b -> 'a match_tree -> 'b + (* fold in right-to-left post-order *) + val find : ('a -> bool) -> 'a match_tree -> 'a option + (* find the first match that satisfies the predicate (or NONE) *) + val num : 'a match_tree -> int + (* return the number of submatches included in the match tree *) + + end; + +structure MatchTree :> MATCH_TREE = + struct + + datatype 'a match_tree = Match of 'a * 'a match_tree list + + fun num m = let + fun count ([], n) = n + | count (Match(_, l) :: ms, n) = count (ms, count (l, n + 1)) + in + count([m], ~1) + end + + (* return the root (outermost) match in the tree *) + fun root (Match(x,_)) = x + + (* return the nth match in the tree; matches are labeled in pre-order + * starting at 0. + *) + fun nth (t, n) = let + datatype 'a sum = INL of int | INR of 'a + fun walk (0, Match (x, _)) = INR x + | walk (i, Match (_, children)) = let + fun walkList (i, []) = INL i + | walkList (i, m::r) = (case walk(i, m) + of (INL j) => walkList (j, r) + | result => result + (* end case *)) + in + walkList (i-1, children) + end + in + case walk(n, t) + of (INR x) => x + | (INL _) => raise Subscript + (* end case *) + end + + (* map a function over the tree (in preorder) *) + fun map f = let + fun mapf (Match (x, children)) = Match(f x, mapl children) + and mapl [] = [] + | mapl (x::r) = (mapf x) :: (mapl r) + in + mapf + end + + fun app f (Match (c,children)) = (f c; List.app (app f) children) + + (* fold in left-to-right pre-order *) + fun foldl f init mt = let + fun foldf (Match(x, kids), acc) = List.foldl foldf (f (x, acc)) kids + in + foldf (mt, init) + end + + (* fold in right-to-left post-order *) + fun foldr f init mt = let + fun foldf (Match(x, kids), acc) = f (x, List.foldr foldf acc kids) + in + foldf (mt, init) + end + + (* find the first match that satisfies the predicate *) + fun find pred = let + fun findP (Match (x, children)) = + if (pred x) + then SOME x + else findList children + and findList [] = NONE + | findList (m::r) = (case (findP m) + of NONE => findList r + | result => result + (* end case *)) + in + findP + end + + end (* MatchTree *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/Glue/regexp-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/Glue/regexp-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/Glue/regexp-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/Glue/regexp-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,47 @@ +(* regexp-fn.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Functor that implements a regular expressions matcher by combining + * a surface syntax and a matching engine. + *) + +functor RegExpFn ( + structure P : REGEXP_PARSER + structure E : REGEXP_ENGINE + ) :> REGEXP where type regexp = E.regexp = struct + + structure M = MatchTree + + type regexp = E.regexp + + (* a match specifies the position (as a stream) and the length of the match *) + type 'a match = {pos : 'a, len : int} MatchTree.match_tree + + exception CannotParse + + fun compile reader s = (case (P.scan reader s) + of SOME (syntax, s') => SOME(E.compile syntax, s') + | NONE => NONE + (* end case *)) + + fun compileString str = (case (StringCvt.scanString P.scan str) + of SOME syntax => E.compile syntax + | NONE => raise CannotParse + (* end case *)) + + val prefix = E.prefix + val find = E.find + + fun match l = let + fun parse (s, f) = (case (StringCvt.scanString P.scan s) + of SOME r => (r, f) + | NONE => raise CannotParse + (* end case *)) + val m = E.match (map parse l) + in + fn getc => fn stream => m getc stream + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/Glue/regexp-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/Glue/regexp-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/Glue/regexp-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/Glue/regexp-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,46 @@ +(* regexp-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Main signature for regular expressions. + *) + +signature REGEXP = + sig + + type regexp + (* the type of a compiled regular expression + *) + + (* a match specifies the position (as a stream) and the length of the match *) + type 'a match = {pos : 'a, len : int} MatchTree.match_tree + + exception CannotParse + (* raised by compileString and match on syntax errors *) + + val compile : (char,'a) StringCvt.reader -> (regexp, 'a) StringCvt.reader + (* read an external representation of a regular expression from a stream + *) + + val compileString : string -> regexp + (* read an external representation of a regular expression from a string + *) + + val find : regexp -> (char,'a) StringCvt.reader -> ('a match, 'a) StringCvt.reader + (* scan the stream for the first occurence of the regular expression + *) + + val prefix : regexp -> (char,'a) StringCvt.reader -> ('a match, 'a) StringCvt.reader + (* attempt to match the stream at the current position with the + * regular expression + *) + + val match : (string * ('a match -> 'b)) list + -> (char,'a) StringCvt.reader -> ('b, 'a) StringCvt.reader + (* attempt to match the stream at the current position with one + * of the external representations of regular expressions and trigger + * the corresponding action + *) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,88 @@ +This is a regular expressions library. It is based on a decoupling +of the surface syntax used to specify regular expressions and the +backend engine that implements the matcher. An abstract syntax is used +to communicate between the front end and the back end of the system, + + + USING REGULAR EXPRESSIONS + +Given a structure S1 describing a surface syntax and a structure S2 +describing a matching engine, a regular expression package can be +defined by applying the functor: + + RegExpFn (structure P=S1 structure E=S2) : REGEXP + +To match a regular expression, one first needs to compile a +representation in the surface syntax. The type of a compiled regular +expression is given in the REGEXP signature as: + + type regexp + +Two functions are provided in +the REGEXP signature: + + val compile : (char,'a) StringCvt.reader -> (regexp, 'a) StringCvt.reader + val compileString : string -> regexp + +The function compile is a regexp reader, while compileString is +specialized to strings. + +Once a regular expression has been compiled, three functions are +provided to perform the matching: + + val find : + val prefix : [[ See types in Glue/regexp-sig.sml ]] + val match : + +The function find returns a reader that searches a stream and attempts +to match the given regular expression. The function prefix returns a +reader that attempts to match the regular expression at the current +position in the stream. The function match takes a list of regular +expressions and functions and returns a reader that attempts to match +one of the regular expressions at the current position in the +stream. The function corresponding to the matched regular expression +is invoked on the matching information. + + + MATCHING INFORMATION + +Once a match is found, it is returned as a match_tree datatype +(defined in Glue/match-tree.sml). This is a hierarchical structure +describing the matches of the various subexpressions appearing in the +matched regular expression. A match for an expression is a record +containing the position of the match and its length. The root of the +structure always described the outermost match (the whole string +matched by the regular expression). See the file Glue/match-tree.sml +for more details. + + + ROADMAP + +FrontEnd/ Implementation of various surface syntaxes +BackEnd/ Implementation of various matching engines +Glue/ Glue code +Tests/ Testing code + + + FRONT ENDS + +A single surface syntax is currently implemented, providing an AWK +syntax to describe regular expressions. See the file +FrontEnd/awk-syntax.sml for a description of the actual syntax. + + + BACK ENDS + +Three matching engines are implemented: +1) A backtracking engine (BackEnd/bt-engine.sml), that provides full + submatching information. Slow, low memory footprint, low startup + cost. +2) An automaton-based engine (BackEnd/dfa-engine.sml), that provides + only top-level matching information (the string matched). Fast, + but memory-intensive and high startup cost (the cost of + constructing the automaton in the first place) +3) An implementation of Ken Thompson's RE matching algorithm. This + essentially simulates the NFA using sets of states. It provides + very fast RE construction time and reasonable scanning time. + It currently does not implement groups or begin/end markers. + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/regexp-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/regexp-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/regexp-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/regexp-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,55 @@ +(* regexp-lib.cm + * + * COPYRIGHT (c) 2019 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +Library + +signature REGEXP_SYNTAX +signature REGEXP_PARSER +signature MATCH_TREE +signature REGEXP_ENGINE +signature REGEXP + +structure RegExpSyntax +structure MatchTree +structure AwkSyntax +structure BackTrackEngine +structure DfaEngine +structure ThompsonEngine + +functor RegExpFn + +is +#if defined(NEW_CM) + $/basis.cm + $/smlnj-lib.cm +#else + ../Util/smlnj-lib.cm +#endif + +(* utility functions *) + Glue/match-tree.sml + BackEnd/fsm.sml + +(* internal glue language *) + FrontEnd/syntax-sig.sml + FrontEnd/syntax.sml + +(* front/back-ends signatures *) + FrontEnd/parser-sig.sml + BackEnd/engine-sig.sml + +(* Frontends *) + FrontEnd/awk-syntax.sml + +(* Engines *) + BackEnd/bt-engine.sml + BackEnd/dfa-engine.sml + BackEnd/thompson-engine.sml + +(* Glue functor *) + Glue/regexp-sig.sml + Glue/regexp-fn.sml + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/regexp-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/regexp-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/regexp-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/regexp-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,366 @@ + +ann + "nonexhaustiveBind ignore" "nonexhaustiveMatch ignore" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" +in + +local + basis l4 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb + end + basis l12 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + open l4 + in + structure gs_0 = List + end + local + structure List = gs_0 + Glue/match-tree.sml + in + signature gs_1 = MATCH_TREE + structure gs_2 = MatchTree + end + local + open l12 + in + signature gs_3 = ORD_SET + end + local + signature ORD_SET = gs_3 + FrontEnd/syntax-sig.sml + in + signature gs_4 = REGEXP_SYNTAX + end + local + open l4 + in + structure gs_5 = Option + end + local + open l4 + in + structure gs_6 = StringCvt + end + local + open l12 + in + functor gs_7 = ListSetFn + end + local + open l4 + in + structure gs_8 = Char + structure gs_9 = CharArray + structure gs_10 = CharVector + structure gs_11 = FixedInt + structure gs_12 = General + structure gs_13 = Int + structure gs_14 = Int32 + structure gs_15 = Int64 + structure gs_16 = IntInf + structure gs_17 = LargeInt + structure gs_18 = LargeReal + structure gs_19 = LargeWord + structure gs_20 = OS + structure gs_21 = Position + structure gs_22 = Real + structure gs_23 = Real64 + structure gs_24 = RealArray + structure gs_25 = RealArraySlice + structure gs_26 = RealVector + structure gs_27 = RealVectorSlice + structure gs_28 = SMLofNJ + structure gs_29 = Socket + structure gs_30 = String + structure gs_31 = Substring + structure gs_32 = SysWord + structure gs_33 = Time + structure gs_34 = Word + structure gs_35 = Word32 + structure gs_36 = Word64 + structure gs_37 = Word8 + end + local + structure Char = gs_8 + structure CharArray = gs_9 + structure CharVector = gs_10 + structure FixedInt = gs_11 + structure General = gs_12 + structure Int = gs_13 + structure Int32 = gs_14 + structure Int64 = gs_15 + structure IntInf = gs_16 + structure LargeInt = gs_17 + structure LargeReal = gs_18 + structure LargeWord = gs_19 + structure List = gs_0 + functor ListSetFn = gs_7 + structure OS = gs_20 + structure Position = gs_21 + signature REGEXP_SYNTAX = gs_4 + structure Real = gs_22 + structure Real64 = gs_23 + structure RealArray = gs_24 + structure RealArraySlice = gs_25 + structure RealVector = gs_26 + structure RealVectorSlice = gs_27 + structure SMLofNJ = gs_28 + structure Socket = gs_29 + structure String = gs_30 + structure Substring = gs_31 + structure SysWord = gs_32 + structure Time = gs_33 + structure Word = gs_34 + structure Word32 = gs_35 + structure Word64 = gs_36 + structure Word8 = gs_37 + FrontEnd/syntax.sml + in + structure gs_38 = RegExpSyntax + end + local + signature MATCH_TREE = gs_1 + structure MatchTree = gs_2 + structure RegExpSyntax = gs_38 + structure StringCvt = gs_6 + BackEnd/engine-sig.sml + in + signature gs_39 = REGEXP_ENGINE + end + local + structure List = gs_0 + signature MATCH_TREE = gs_1 + structure MatchTree = gs_2 + structure Option = gs_5 + signature REGEXP_ENGINE = gs_39 + structure RegExpSyntax = gs_38 + BackEnd/bt-engine.sml + in + structure gs_40 = BackTrackEngine + end + local + signature MATCH_TREE = gs_1 + structure MatchTree = gs_2 + structure StringCvt = gs_6 + Glue/regexp-sig.sml + in + signature gs_41 = REGEXP + end + local + structure RegExpSyntax = gs_38 + structure StringCvt = gs_6 + FrontEnd/parser-sig.sml + in + signature gs_42 = REGEXP_PARSER + end + local + signature MATCH_TREE = gs_1 + structure MatchTree = gs_2 + signature REGEXP = gs_41 + signature REGEXP_ENGINE = gs_39 + signature REGEXP_PARSER = gs_42 + structure StringCvt = gs_6 + Glue/regexp-fn.sml + in + functor gs_43 = RegExpFn + end + local + open l4 + in + structure gs_44 = Vector + end + local + open l4 + in + structure gs_45 = Array + end + local + structure Array = gs_45 + structure Char = gs_8 + structure CharArray = gs_9 + structure CharVector = gs_10 + structure FixedInt = gs_11 + structure General = gs_12 + structure Int = gs_13 + structure Int32 = gs_14 + structure Int64 = gs_15 + structure IntInf = gs_16 + structure LargeInt = gs_17 + structure LargeReal = gs_18 + structure LargeWord = gs_19 + structure List = gs_0 + signature MATCH_TREE = gs_1 + structure MatchTree = gs_2 + structure OS = gs_20 + structure Position = gs_21 + signature REGEXP_ENGINE = gs_39 + structure Real = gs_22 + structure Real64 = gs_23 + structure RealArray = gs_24 + structure RealArraySlice = gs_25 + structure RealVector = gs_26 + structure RealVectorSlice = gs_27 + structure RegExpSyntax = gs_38 + structure SMLofNJ = gs_28 + structure Socket = gs_29 + structure String = gs_30 + structure StringCvt = gs_6 + structure Substring = gs_31 + structure SysWord = gs_32 + structure Time = gs_33 + structure Vector = gs_44 + structure Word = gs_34 + structure Word32 = gs_35 + structure Word64 = gs_36 + structure Word8 = gs_37 + BackEnd/thompson-engine.sml + in + structure gs_46 = ThompsonEngine + end + local + open l12 + in + functor gs_47 = ListMapFn + end + local + open l4 + in + structure gs_48 = Array2 + end + local + open l4 + in + structure gs_49 = TextIO + end + local + open l4 + in + structure gs_50 = ListPair + end + local + structure Array = gs_45 + structure Array2 = gs_48 + structure Char = gs_8 + structure CharArray = gs_9 + structure CharVector = gs_10 + structure FixedInt = gs_11 + structure General = gs_12 + structure Int = gs_13 + structure Int32 = gs_14 + structure Int64 = gs_15 + structure IntInf = gs_16 + structure LargeInt = gs_17 + structure LargeReal = gs_18 + structure LargeWord = gs_19 + structure List = gs_0 + functor ListMapFn = gs_47 + structure ListPair = gs_50 + functor ListSetFn = gs_7 + signature ORD_SET = gs_3 + structure OS = gs_20 + structure Position = gs_21 + structure Real = gs_22 + structure Real64 = gs_23 + structure RealArray = gs_24 + structure RealArraySlice = gs_25 + structure RealVector = gs_26 + structure RealVectorSlice = gs_27 + structure RegExpSyntax = gs_38 + structure SMLofNJ = gs_28 + structure Socket = gs_29 + structure String = gs_30 + structure Substring = gs_31 + structure SysWord = gs_32 + structure TextIO = gs_49 + structure Time = gs_33 + structure Word = gs_34 + structure Word32 = gs_35 + structure Word64 = gs_36 + structure Word8 = gs_37 + BackEnd/fsm.sml + in + signature gs_51 = DFA + structure gs_52 = Dfa + signature gs_53 = NFA + structure gs_54 = Nfa + end + local + signature DFA = gs_51 + structure Dfa = gs_52 + signature MATCH_TREE = gs_1 + structure MatchTree = gs_2 + signature NFA = gs_53 + structure Nfa = gs_54 + signature REGEXP_ENGINE = gs_39 + structure RegExpSyntax = gs_38 + structure Vector = gs_44 + BackEnd/dfa-engine.sml + in + structure gs_55 = DfaEngine + end + local + structure Char = gs_8 + structure CharArray = gs_9 + structure CharVector = gs_10 + structure FixedInt = gs_11 + structure General = gs_12 + structure Int = gs_13 + structure Int32 = gs_14 + structure Int64 = gs_15 + structure IntInf = gs_16 + structure LargeInt = gs_17 + structure LargeReal = gs_18 + structure LargeWord = gs_19 + structure List = gs_0 + structure OS = gs_20 + structure Position = gs_21 + signature REGEXP_PARSER = gs_42 + structure Real = gs_22 + structure Real64 = gs_23 + structure RealArray = gs_24 + structure RealArraySlice = gs_25 + structure RealVector = gs_26 + structure RealVectorSlice = gs_27 + structure RegExpSyntax = gs_38 + structure SMLofNJ = gs_28 + structure Socket = gs_29 + structure String = gs_30 + structure StringCvt = gs_6 + structure Substring = gs_31 + structure SysWord = gs_32 + structure Time = gs_33 + structure Word = gs_34 + structure Word32 = gs_35 + structure Word64 = gs_36 + structure Word8 = gs_37 + FrontEnd/awk-syntax.sml + in + structure gs_56 = AwkSyntax + end +in + structure AwkSyntax = gs_56 + structure BackTrackEngine = gs_40 + structure DfaEngine = gs_55 + signature MATCH_TREE = gs_1 + structure MatchTree = gs_2 + signature REGEXP = gs_41 + signature REGEXP_ENGINE = gs_39 + signature REGEXP_PARSER = gs_42 + signature REGEXP_SYNTAX = gs_4 + functor RegExpFn = gs_43 + structure RegExpSyntax = gs_38 + structure ThompsonEngine = gs_46 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/Tests/engines.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/Tests/engines.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/Tests/engines.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/Tests/engines.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,23 @@ +(* engines.sml + * + * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure ThompsonRE = TestFn ( + val engineName = "Thompson's engine" + structure RE = RegExpFn( + structure P = AwkSyntax + structure E = ThompsonEngine)) + +structure DfaRE = TestFn ( + val engineName = "DFA engine" + structure RE = RegExpFn( + structure P = AwkSyntax + structure E = DfaEngine)) + +structure BackTrackRE = TestFn ( + val engineName = "Back-tracking engine" + structure RE = RegExpFn( + structure P = AwkSyntax + structure E = BackTrackEngine)) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/Tests/run.sh mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/Tests/run.sh --- mlton-20130715/lib/smlnj-lib/smlnj-lib/RegExp/Tests/run.sh 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/RegExp/Tests/run.sh 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,11 @@ +#!/bin/sh +# +# Run the RE tests +# + +sml sources.cm < (print "compile failed\n"; raise ex) + in + case ((RE.find re (getc data) 0) handle ex => NONE) + of NONE => print "match failed\n" + | SOME(M.Match({pos, len}, _), _) => + print(concat[ + "match at ", Int.toString pos, " = \"", + String.toString(String.substring(data, pos, len)), "\"\n" + ]) + (* end case *) + end + handle _ => () + + fun doTests () = ( + print(concat[" testing ", engineName, "\n"]); + test ("01", "[0-9]+", "abc123xyz"); + test ("02", "^[0-9]+", "abc123def\n987xyz"); + test ("03", "[0-9]+$", "abc123def\n987xyz456"); + test ("04", "[0-9]+$", "987xyz456\nabc123"); + test ("05", "^$", ""); + test ("06", ".", "a"); + test ("07", "^foo$", "foo"); + test ("08", "^...$", "foo"); + test ("09", "^.*$", "foo"); + test ("10", "^.*foo@bar\\.com$", "foo@bar.com"); + test ("11", "(abc)","abc"); + test ("12", "\\(abc\\)","(abc)"); + test ("13", "(abc){2,4}$", "abcabc"); + test ("14", "(abc){2,4}$", "abcabcabc"); + test ("15", "(abc){2,4}$", "abcabcabcabc"); + print "** tests done\n") + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,46 @@ +The *SExp Library* supports the reading and writing of structured data using +the S-expression syntax. It is a work in progress, and does not fully conform with +any formal S-exp specification. + +- End-of-line comments begin with a semicolon character + +- An S-Expression is either an atomic token (boolean, number, symbol, or + string), a quoted expression, or a list of S-Expressions enclosed in brackets. + +- Quoted expressions are formed by the single-quote character (``'``) followed + by an expression. + +- Lists are be delimited by matched pairs of `()` `[]` or `{}`, nested freely. + +- List items are separated with whitespace (space, tab, newlines, or carriage + returns). + +- Symbols (or _identifiers_) begin with an initial character followed by + zero or more _subsequent_ characters, where an initial character is + either a letter or one of the characters `-+.@!$%&*/:<=>?^_~` and + a subsequent character is either an initial character, a decimal digit, + or the character `#`. + +- Booleans are represented by the literals `#f` (false) and `#t` (true). + +- Numbers are either signed integers or floating-point numbers; the + sign (if present) is one of "'+'," "`-`," or "`~`". + +- Integers may be specified in decimal without any prefix, or in hexadecimal + with the prefix "0x". In hex, the value is assumed to be unsigned, so -255 + should be written "-0xff" rather than "0x-ff". + +- The format of a floating point number is described by the following + regular expression: ? + '.' + ([eE] ? +) + Notably, "`1.`" and "`.1`" are invalid and "`1`" is an + integer --- floats must have a dot with digits + on both sides. + +- Strings are enclosed in double quotes (``"``). ++ + The difference between symbols and strings is that symbols are represented as + Atom.atom types, so equality comparisons are more efficient. + +The original version of the library was written by Damon Wang +at the University of Chicago. It has since been modified and +maintained by John Reppy. diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp.lex mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp.lex --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp.lex 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp.lex 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,107 @@ +(* sexp.lex + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Author: Damon Wang (with modifications by John Reppy) + * + * Lexer for Sexp files. + * + * TODO: + * EOF rules for strings + * newlines in strings + * error messages for unknown characters + *) + +%name SExpLexer; + +%defs ( + structure T = SExpTokens + type lex_result = T.token + fun eof () = T.EOF + fun int s = T.INT(valOf(IntInf.fromString s)) + fun float s = T.FLOAT(valOf(LargeReal.fromString s)) +(* support for incremental construction of strings *) + val sbuf : string list ref = ref [] + fun addStr s = (sbuf := s :: !sbuf) + fun addUChr lit = let + (* trim the "\u" prefix *) + val digits = Substring.triml 2 (Substring.full lit) + val SOME(w, _) = Word.scan StringCvt.HEX Substring.getc digits + in + addStr(UTF8.encode w) + end + fun finishString () = (T.STRING(String.concat(List.rev(!sbuf))) before sbuf := []) +); + +%let digit1_9 = [1-9]; +%let digit = [0-9]; +%let digits = {digit}+; +%let int = [+-]?({digit} | {digit1_9}{digits}+); +%let frac = "."{digits}; +%let exp = [eE][+-]?{digits}; +%let xdigit = {digit}|[a-fA-F]; +%let alpha = ([a-zA-Z]); +%let initial = {alpha} | "^" | [-+.@!$%&*/:<=>?_~]; +%let subsequent = {initial} | {digit}; +%let ident = {initial} {subsequent}*; + +%states S; + +[ \t\n\r]+ => ( T.WHITE ); +";"[^\n\r]*[\n\r]+ => ( skip() (* comment *)); + +{ident} => ( T.SYMBOL (yytext) ); + +"'" => ( T.QUOTE ); +"(" => ( T.DELIM (T.PAREN, T.OPEN) ); +")" => ( T.DELIM (T.PAREN, T.CLOSE) ); +"[" => ( T.DELIM (T.BRACKET, T.OPEN) ); +"]" => ( T.DELIM (T.BRACKET, T.CLOSE) ); +"{" => ( T.DELIM (T.BRACE, T.OPEN) ); +"}" => ( T.DELIM (T.BRACE, T.CLOSE) ); +"#t" => ( T.KW_true ); +"#f" => ( T.KW_false ); + + (* takes a string of form "0xdeadbeef", strips the leading "0x", and returns + * an IntInf with hex value deadbeef. Note that the hex value is unsigned; to + * get negatives, write "-0xdeadbeef". This means that the string from C's + * `printf("%x", -1)` will be parsed as INT_MAX. TODO is this a good idea? *) + +[+-]?"0x"{xdigit}+ => ( + let + (* TODO Doesn't StringCvt.HEX handle stripping the "0x" prefix? *) + val digits = if String.isPrefix "+" yytext (* "+0xdeadbeef" *) + then String.extract(yytext, 3, NONE) + else if String.isPrefix "-" yytext (* "-0xdeadbeef" *) + then "-" ^ String.extract(yytext, 3, NONE) + else String.extract(yytext, 2, NONE) (* "0xdeadbeef" *) + val SOME(value) = StringCvt.scanString (IntInf.scan StringCvt.HEX) digits + in + T.INT(value) + end +); + +{int} => ( T.INT(valOf(IntInf.fromString yytext)) ); + +{int}{frac} => ( float yytext ); +{int}{exp} => ( float yytext ); +{int}{frac}{exp} => ( float yytext ); + +"\"" => ( YYBEGIN S; continue() ); + +(* TODO backport this to the JSON parser, which hangs if it sees a \\ in a +* string. *) +"\\" => ( addStr "\\"; continue() ); +"\\\"" => ( addStr "\""; continue() ); +"\\b" => ( addStr "\b"; continue() ); +"\\f" => ( addStr "\f"; continue() ); +"\\n" => ( addStr "\n"; continue() ); +"\\r" => ( addStr "\r"; continue() ); +"\\t" => ( addStr "\t"; continue() ); +"\\u"{xdigit}{4} => ( addUChr yytext; continue() ); +[^\\"]+ => ( addStr yytext; continue() ); +"\"" => ( YYBEGIN INITIAL; finishString() ); + +(* FIXME: add some error reporting *) +. => ( skip() ); diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp.lex.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp.lex.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp.lex.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp.lex.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1723 @@ +structure SExpLexer = struct + + datatype yystart_state = +S | INITIAL + local + + structure UserDeclarations = + struct + + + structure T = SExpTokens + type lex_result = T.token + fun eof () = T.EOF + fun int s = T.INT(valOf(IntInf.fromString s)) + fun float s = T.FLOAT(valOf(LargeReal.fromString s)) +(* support for incremental construction of strings *) + val sbuf : string list ref = ref [] + fun addStr s = (sbuf := s :: !sbuf) + fun addUChr lit = let + (* trim the "\u" prefix *) + val digits = Substring.triml 2 (Substring.full lit) + val SOME(w, _) = Word.scan StringCvt.HEX Substring.getc digits + in + addStr(UTF8.encode w) + end + fun finishString () = (T.STRING(String.concat(List.rev(!sbuf))) before sbuf := []) + + end + + datatype yymatch + = yyNO_MATCH + | yyMATCH of ULexBuffer.stream * action * yymatch + withtype action = ULexBuffer.stream * yymatch -> UserDeclarations.lex_result + + val yytable : ((UTF8.wchar * UTF8.wchar * int) list * int list) Vector.vector = +Vector.fromList [] + fun yystreamify' p input = ULexBuffer.mkStream (p, input) + + fun yystreamifyReader' p readFn strm = let + val s = ref strm + fun iter(strm, n, accum) = + if n > 1024 then (String.implode (rev accum), strm) + else (case readFn strm + of NONE => (String.implode (rev accum), strm) + | SOME(c, strm') => iter (strm', n+1, c::accum)) + fun input() = let + val (data, strm) = iter(!s, 0, []) + in + s := strm; + data + end + in + yystreamify' p input + end + + fun yystreamifyInstream' p strm = yystreamify' p (fn ()=>TextIO.input strm) + + fun innerLex +(yystrm_, yyss_, yysm) = let + (* current start state *) + val yyss = ref yyss_ + fun YYBEGIN ss = (yyss := ss) + (* current input stream *) + val yystrm = ref yystrm_ + fun yysetStrm strm = yystrm := strm + fun yygetPos() = ULexBuffer.getpos (!yystrm) + fun yystreamify input = yystreamify' (yygetPos()) input + fun yystreamifyReader readFn strm = yystreamifyReader' (yygetPos()) readFn strm + fun yystreamifyInstream strm = yystreamifyInstream' (yygetPos()) strm + (* start position of token -- can be updated via skip() *) + val yystartPos = ref (yygetPos()) + (* get one char of input *) + fun yygetc strm = (case ULexBuffer.getu strm + of (SOME (0w10, s')) => + (AntlrStreamPos.markNewLine yysm (ULexBuffer.getpos strm); + SOME (0w10, s')) + | x => x) + fun yygetList getc strm = let + val get1 = UTF8.getu getc + fun iter (strm, accum) = + (case get1 strm + of NONE => rev accum + | SOME (w, strm') => iter (strm', w::accum) + (* end case *)) + in + iter (strm, []) + end + (* create yytext *) + fun yymksubstr(strm) = ULexBuffer.subtract (strm, !yystrm) + fun yymktext(strm) = Substring.string (yymksubstr strm) + fun yymkunicode(strm) = yygetList Substring.getc (yymksubstr strm) + open UserDeclarations + fun lex () = let + fun yystuck (yyNO_MATCH) = raise Fail "lexer reached a stuck state" + | yystuck (yyMATCH (strm, action, old)) = + action (strm, old) + val yypos = yygetPos() + fun yygetlineNo strm = AntlrStreamPos.lineNo yysm (ULexBuffer.getpos strm) + fun yygetcolNo strm = AntlrStreamPos.colNo yysm (ULexBuffer.getpos strm) + fun yyactsToMatches (strm, [], oldMatches) = oldMatches + | yyactsToMatches (strm, act::acts, oldMatches) = + yyMATCH (strm, act, yyactsToMatches (strm, acts, oldMatches)) + fun yygo actTable = + (fn (~1, _, oldMatches) => yystuck oldMatches + | (curState, strm, oldMatches) => let + val (transitions, finals') = Vector.sub (yytable, curState) + val finals = List.map (fn i => Vector.sub (actTable, i)) finals' + fun tryfinal() = + yystuck (yyactsToMatches (strm, finals, oldMatches)) + fun find (c, []) = NONE + | find (c, (c1, c2, s)::ts) = + if c1 <= c andalso c <= c2 then SOME s + else find (c, ts) + in case yygetc strm + of SOME(c, strm') => + (case find (c, transitions) + of NONE => tryfinal() + | SOME n => + yygo actTable + (n, strm', + yyactsToMatches (strm, finals, oldMatches))) + | NONE => tryfinal() + end) + val yylastwasnref = ref (ULexBuffer.lastWasNL (!yystrm)) + fun continue() = let val yylastwasn = !yylastwasnref in +let +fun yyAction0 (strm, lastMatch : yymatch) = (yystrm := strm; T.WHITE ) +fun yyAction1 (strm, lastMatch : yymatch) = (yystrm := strm; + skip() (* comment *)) +fun yyAction2 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; T.SYMBOL (yytext) + end +fun yyAction3 (strm, lastMatch : yymatch) = (yystrm := strm; T.QUOTE ) +fun yyAction4 (strm, lastMatch : yymatch) = (yystrm := strm; + T.DELIM (T.PAREN, T.OPEN) ) +fun yyAction5 (strm, lastMatch : yymatch) = (yystrm := strm; + T.DELIM (T.PAREN, T.CLOSE) ) +fun yyAction6 (strm, lastMatch : yymatch) = (yystrm := strm; + T.DELIM (T.BRACKET, T.OPEN) ) +fun yyAction7 (strm, lastMatch : yymatch) = (yystrm := strm; + T.DELIM (T.BRACKET, T.CLOSE) ) +fun yyAction8 (strm, lastMatch : yymatch) = (yystrm := strm; + T.DELIM (T.BRACE, T.OPEN) ) +fun yyAction9 (strm, lastMatch : yymatch) = (yystrm := strm; + T.DELIM (T.BRACE, T.CLOSE) ) +fun yyAction10 (strm, lastMatch : yymatch) = (yystrm := strm; T.KW_true ) +fun yyAction11 (strm, lastMatch : yymatch) = (yystrm := strm; T.KW_false ) +fun yyAction12 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; + + let + (* TODO Doesn't StringCvt.HEX handle stripping the "0x" prefix? *) + val digits = if String.isPrefix "+" yytext (* "+0xdeadbeef" *) + then String.extract(yytext, 3, NONE) + else if String.isPrefix "-" yytext (* "-0xdeadbeef" *) + then "-" ^ String.extract(yytext, 3, NONE) + else String.extract(yytext, 2, NONE) (* "0xdeadbeef" *) + val SOME(value) = StringCvt.scanString (IntInf.scan StringCvt.HEX) digits + in + T.INT(value) + end + + end +fun yyAction13 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; T.INT(valOf(IntInf.fromString yytext)) + end +fun yyAction14 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; float yytext + end +fun yyAction15 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; float yytext + end +fun yyAction16 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; float yytext + end +fun yyAction17 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN S; continue() ) +fun yyAction18 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\\"; continue() ) +fun yyAction19 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\""; continue() ) +fun yyAction20 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\b"; continue() ) +fun yyAction21 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\f"; continue() ) +fun yyAction22 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\n"; continue() ) +fun yyAction23 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\r"; continue() ) +fun yyAction24 (strm, lastMatch : yymatch) = (yystrm := strm; + addStr "\t"; continue() ) +fun yyAction25 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addUChr yytext; continue() + end +fun yyAction26 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addStr yytext; continue() + end +fun yyAction27 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN INITIAL; finishString() ) +fun yyAction28 (strm, lastMatch : yymatch) = (yystrm := strm; skip() ) +fun yyQ31 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction9(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction9(strm, yyNO_MATCH) + (* end case *)) +fun yyQ30 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction8(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction8(strm, yyNO_MATCH) + (* end case *)) +fun yyQ29 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction7(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction7(strm, yyNO_MATCH) + (* end case *)) +fun yyQ28 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction6(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction6(strm, yyNO_MATCH) + (* end case *)) +fun yyQ33 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction1(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxB + then yyAction1(strm, yyNO_MATCH) + else if inp < 0wxB + then if inp = 0wxA + then yyQ33(strm', yyMATCH(strm, yyAction1, yyNO_MATCH)) + else yyAction1(strm, yyNO_MATCH) + else if inp = 0wxD + then yyQ33(strm', yyMATCH(strm, yyAction1, yyNO_MATCH)) + else yyAction1(strm, yyNO_MATCH) + (* end case *)) +fun yyQ32 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wxB + then yyQ32(strm', lastMatch) + else if inp < 0wxB + then if inp = 0wxA + then yyQ33(strm', lastMatch) + else yyQ32(strm', lastMatch) + else if inp = 0wxD + then yyQ33(strm', lastMatch) + else yyQ32(strm', lastMatch) + (* end case *)) +fun yyQ27 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction28(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxB + then yyQ32(strm', yyMATCH(strm, yyAction28, yyNO_MATCH)) + else if inp < 0wxB + then if inp = 0wxA + then yyQ33(strm', yyMATCH(strm, yyAction28, yyNO_MATCH)) + else yyQ32(strm', yyMATCH(strm, yyAction28, yyNO_MATCH)) + else if inp = 0wxD + then yyQ33(strm', yyMATCH(strm, yyAction28, yyNO_MATCH)) + else yyQ32(strm', yyMATCH(strm, yyAction28, yyNO_MATCH)) + (* end case *)) +fun yyQ38 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction15(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ38(strm', yyMATCH(strm, yyAction15, yyNO_MATCH)) + else if inp < 0wx30 + then yyAction15(strm, yyNO_MATCH) + else if inp <= 0wx39 + then yyQ38(strm', yyMATCH(strm, yyAction15, yyNO_MATCH)) + else yyAction15(strm, yyNO_MATCH) + (* end case *)) +fun yyQ37 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ38(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ38(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ36 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2D + then yyQ37(strm', lastMatch) + else if inp < 0wx2D + then if inp = 0wx2B + then yyQ37(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx30 + then yyQ38(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ38(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ42 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction16(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ42(strm', yyMATCH(strm, yyAction16, yyNO_MATCH)) + else if inp < 0wx30 + then yyAction16(strm, yyNO_MATCH) + else if inp <= 0wx39 + then yyQ42(strm', yyMATCH(strm, yyAction16, yyNO_MATCH)) + else yyAction16(strm, yyNO_MATCH) + (* end case *)) +fun yyQ41 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ42(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ42(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ40 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2D + then yyQ41(strm', lastMatch) + else if inp < 0wx2D + then if inp = 0wx2B + then yyQ41(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx30 + then yyQ42(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ42(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ39 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction14(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx45 + then yyQ40(strm', yyMATCH(strm, yyAction14, yyNO_MATCH)) + else if inp < 0wx45 + then if inp = 0wx30 + then yyQ39(strm', yyMATCH(strm, yyAction14, yyNO_MATCH)) + else if inp < 0wx30 + then yyAction14(strm, yyNO_MATCH) + else if inp <= 0wx39 + then yyQ39(strm', yyMATCH(strm, yyAction14, yyNO_MATCH)) + else yyAction14(strm, yyNO_MATCH) + else if inp = 0wx65 + then yyQ40(strm', yyMATCH(strm, yyAction14, yyNO_MATCH)) + else yyAction14(strm, yyNO_MATCH) + (* end case *)) +fun yyQ34 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ39(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ39(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ35 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction13(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyAction13(strm, yyNO_MATCH) + else if inp < 0wx3A + then if inp = 0wx2F + then yyAction13(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp = 0wx2E + then yyQ34(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + else yyQ35(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else if inp = 0wx46 + then yyAction13(strm, yyNO_MATCH) + else if inp < 0wx46 + then if inp = 0wx45 + then yyQ36(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + else if inp = 0wx65 + then yyQ36(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + (* end case *)) +fun yyQ26 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction13(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyAction13(strm, yyNO_MATCH) + else if inp < 0wx3A + then if inp = 0wx2F + then yyAction13(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp = 0wx2E + then yyQ34(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + else yyQ35(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else if inp = 0wx46 + then yyAction13(strm, yyNO_MATCH) + else if inp < 0wx46 + then if inp = 0wx45 + then yyQ36(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + else if inp = 0wx65 + then yyQ36(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + (* end case *)) +fun yyQ44 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction12(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ44(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ44(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else if inp < 0wx30 + then yyAction12(strm, yyNO_MATCH) + else if inp <= 0wx39 + then yyQ44(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else yyAction12(strm, yyNO_MATCH) + else if inp = 0wx61 + then yyQ44(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ44(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else yyAction12(strm, yyNO_MATCH) + else if inp <= 0wx66 + then yyQ44(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else yyAction12(strm, yyNO_MATCH) + (* end case *)) +fun yyQ43 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ44(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ44(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ44(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ44(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ44(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ44(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ25 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction13(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx46 + then yyAction13(strm, yyNO_MATCH) + else if inp < 0wx46 + then if inp = 0wx2F + then yyAction13(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp = 0wx2E + then yyQ34(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + else if inp = 0wx45 + then yyQ36(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + else if inp = 0wx66 + then yyAction13(strm, yyNO_MATCH) + else if inp < 0wx66 + then if inp = 0wx65 + then yyQ36(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + else if inp = 0wx78 + then yyQ43(strm', yyMATCH(strm, yyAction13, yyNO_MATCH)) + else yyAction13(strm, yyNO_MATCH) + (* end case *)) +fun yyQ45 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx3B + then if inp = 0wx27 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx27 + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx23 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx2C + then if inp <= 0wx29 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx5E + then if inp <= 0wx5A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx7E + then if inp <= 0wx7A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ52 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx3A + then if inp = 0wx27 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx27 + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx23 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx2C + then if inp <= 0wx29 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx2F + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ52(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx5D + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx7E + then if inp <= 0wx7A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ51 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx3A + then if inp = 0wx27 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx27 + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx23 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx2C + then if inp <= 0wx29 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx2F + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ52(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx5D + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx7E + then if inp <= 0wx7A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ50 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ52(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2A + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx24 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx24 + then yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx26 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx2D + then yyQ51(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2D + then if inp = 0wx2B + then yyQ51(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx5E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx5E + then if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx3B + then if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ52(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx5A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx7B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx7B + then if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ56 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx3A + then if inp = 0wx27 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx27 + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx23 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx2C + then if inp <= 0wx29 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx2F + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ56(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx5D + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx7E + then if inp <= 0wx7A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ55 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx3A + then if inp = 0wx27 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx27 + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx23 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx2C + then if inp <= 0wx29 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx2F + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ56(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx5D + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx7E + then if inp <= 0wx7A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ54 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx30 + then yyQ56(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2A + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx24 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx24 + then yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx26 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx2D + then yyQ55(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2D + then if inp = 0wx2B + then yyQ55(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx5E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx5E + then if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx3B + then if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ56(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx5A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx7B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx7B + then if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ53 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3C + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx3C + then if inp = 0wx2A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2A + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx24 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx24 + then yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx26 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx30 + then yyQ53(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else yyQ53(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp = 0wx45 + then yyQ54(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx5E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx5E + then yyAction2(strm, yyNO_MATCH) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx7B + then if inp = 0wx65 + then yyQ54(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ48 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx3A + then if inp = 0wx27 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx27 + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx23 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx2C + then if inp <= 0wx29 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx2F + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ53(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx5D + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx7E + then if inp <= 0wx7A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ49 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx3B + then if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx2C + then if inp = 0wx24 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx24 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx27 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx27 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx29 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx2F + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2F + then if inp = 0wx2D + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ48(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ49(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp = 0wx45 + then yyQ50(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx5E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx5E + then yyAction2(strm, yyNO_MATCH) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx7B + then if inp = 0wx65 + then yyQ50(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ47 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx3B + then if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx2C + then if inp = 0wx24 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx24 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx27 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx27 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx29 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx2F + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2F + then if inp = 0wx2D + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ48(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ49(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp = 0wx45 + then yyQ50(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx5E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx5E + then yyAction2(strm, yyNO_MATCH) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx7B + then if inp = 0wx65 + then yyQ50(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ58 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3C + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx3C + then if inp = 0wx2A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2A + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx24 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx24 + then yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx26 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx30 + then yyQ58(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else yyQ58(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx47 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx47 + then if inp <= 0wx40 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ58(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx5D + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx7B + then if inp <= 0wx66 + then yyQ58(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ57 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3C + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx3C + then if inp = 0wx2A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2A + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx24 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx24 + then yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx26 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx30 + then yyQ58(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else yyQ58(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx47 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx47 + then if inp <= 0wx40 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ58(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx5D + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx7B + then if inp <= 0wx66 + then yyQ58(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ46 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx45 + then yyQ50(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx45 + then if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx2C + then if inp = 0wx24 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx24 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx27 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx27 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx29 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx2F + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2F + then if inp = 0wx2D + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ48(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx66 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx66 + then if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx5D + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx65 + then yyQ50(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx7B + then if inp = 0wx78 + then yyQ57(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ24 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx3A + then if inp = 0wx2A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2A + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx24 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx24 + then yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx26 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx2D + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx2D + then if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx30 + then yyQ46(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx2F + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ47(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx5B + then if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp <= 0wx5D + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx7E + then if inp <= 0wx7A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ23 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction5(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction5(strm, yyNO_MATCH) + (* end case *)) +fun yyQ22 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction4(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction4(strm, yyNO_MATCH) + (* end case *)) +fun yyQ21 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction3(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction3(strm, yyNO_MATCH) + (* end case *)) +fun yyQ60 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction10(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction10(strm, yyNO_MATCH) + (* end case *)) +fun yyQ59 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction11(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction11(strm, yyNO_MATCH) + (* end case *)) +fun yyQ20 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction28(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx67 + then yyAction28(strm, yyNO_MATCH) + else if inp < 0wx67 + then if inp = 0wx66 + then yyQ59(strm', yyMATCH(strm, yyAction28, yyNO_MATCH)) + else yyAction28(strm, yyNO_MATCH) + else if inp = 0wx74 + then yyQ60(strm', yyMATCH(strm, yyAction28, yyNO_MATCH)) + else yyAction28(strm, yyNO_MATCH) + (* end case *)) +fun yyQ19 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ18 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3B + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx3B + then if inp = 0wx27 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx27 + then if inp = 0wx22 + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wx21 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp <= 0wx23 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx2C + then yyAction2(strm, yyNO_MATCH) + else if inp < 0wx2C + then if inp <= 0wx29 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx5E + then if inp <= 0wx5A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else if inp = 0wx60 + then yyAction2(strm, yyNO_MATCH) + else yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp = 0wx7E + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else if inp < 0wx7E + then if inp <= 0wx7A + then yyQ45(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ61 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction0(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxD + then yyQ61(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < 0wxD + then if inp = 0wx9 + then yyQ61(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < 0wx9 + then yyAction0(strm, yyNO_MATCH) + else if inp <= 0wxA + then yyQ61(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + else if inp = 0wx20 + then yyQ61(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + (* end case *)) +fun yyQ17 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction0(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxD + then yyQ61(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < 0wxD + then if inp = 0wx9 + then yyQ61(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else if inp < 0wx9 + then yyAction0(strm, yyNO_MATCH) + else if inp <= 0wxA + then yyQ61(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + else if inp = 0wx20 + then yyQ61(strm', yyMATCH(strm, yyAction0, yyNO_MATCH)) + else yyAction0(strm, yyNO_MATCH) + (* end case *)) +fun yyQ16 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction28(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction28(strm, yyNO_MATCH) + (* end case *)) +fun yyQ1 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2E + then yyQ18(strm', lastMatch) + else if inp < 0wx2E + then if inp = 0wx23 + then yyQ20(strm', lastMatch) + else if inp < 0wx23 + then if inp = 0wxE + then yyQ16(strm', lastMatch) + else if inp < 0wxE + then if inp = 0wxB + then yyQ16(strm', lastMatch) + else if inp < 0wxB + then if inp <= 0wx8 + then yyQ16(strm', lastMatch) + else yyQ17(strm', lastMatch) + else if inp = 0wxD + then yyQ17(strm', lastMatch) + else yyQ16(strm', lastMatch) + else if inp = 0wx21 + then yyQ18(strm', lastMatch) + else if inp < 0wx21 + then if inp = 0wx20 + then yyQ17(strm', lastMatch) + else yyQ16(strm', lastMatch) + else yyQ19(strm', lastMatch) + else if inp = 0wx2A + then yyQ18(strm', lastMatch) + else if inp < 0wx2A + then if inp = 0wx28 + then yyQ22(strm', lastMatch) + else if inp < 0wx28 + then if inp = 0wx27 + then yyQ21(strm', lastMatch) + else yyQ18(strm', lastMatch) + else yyQ23(strm', lastMatch) + else if inp = 0wx2C + then yyQ16(strm', lastMatch) + else yyQ24(strm', lastMatch) + else if inp = 0wx5D + then yyQ29(strm', lastMatch) + else if inp < 0wx5D + then if inp = 0wx3B + then yyQ27(strm', lastMatch) + else if inp < 0wx3B + then if inp = 0wx31 + then yyQ26(strm', lastMatch) + else if inp < 0wx31 + then if inp = 0wx30 + then yyQ25(strm', lastMatch) + else yyQ18(strm', lastMatch) + else if inp = 0wx3A + then yyQ18(strm', lastMatch) + else yyQ26(strm', lastMatch) + else if inp = 0wx5B + then yyQ28(strm', lastMatch) + else if inp = 0wx5C + then yyQ16(strm', lastMatch) + else yyQ18(strm', lastMatch) + else if inp = 0wx7C + then yyQ16(strm', lastMatch) + else if inp < 0wx7C + then if inp = 0wx61 + then yyQ18(strm', lastMatch) + else if inp < 0wx61 + then if inp = 0wx60 + then yyQ16(strm', lastMatch) + else yyQ18(strm', lastMatch) + else if inp = 0wx7B + then yyQ30(strm', lastMatch) + else yyQ18(strm', lastMatch) + else if inp = 0wx7E + then yyQ18(strm', lastMatch) + else if inp = 0wx7D + then yyQ31(strm', lastMatch) + else yyQ16(strm', lastMatch) + (* end case *)) +fun yyQ15 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction25(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction25(strm, yyNO_MATCH) + (* end case *)) +fun yyQ14 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ15(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ15(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ15(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ15(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ15(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ15(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ13 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ14(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ14(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ14(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ14(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ14(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ14(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ12 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ13(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ13(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ13(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ13(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ13(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ13(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ11 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ12(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ12(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ12(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ12(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ12(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ12(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ10 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction24(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction24(strm, yyNO_MATCH) + (* end case *)) +fun yyQ9 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction23(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction23(strm, yyNO_MATCH) + (* end case *)) +fun yyQ8 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction22(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction22(strm, yyNO_MATCH) + (* end case *)) +fun yyQ7 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction21(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction21(strm, yyNO_MATCH) + (* end case *)) +fun yyQ6 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction20(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction20(strm, yyNO_MATCH) + (* end case *)) +fun yyQ5 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction19(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction19(strm, yyNO_MATCH) + (* end case *)) +fun yyQ4 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction18(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx6E + then yyQ8(strm', yyMATCH(strm, yyAction18, yyNO_MATCH)) + else if inp < 0wx6E + then if inp = 0wx62 + then yyQ6(strm', yyMATCH(strm, yyAction18, yyNO_MATCH)) + else if inp < 0wx62 + then if inp = 0wx22 + then yyQ5(strm', yyMATCH(strm, yyAction18, yyNO_MATCH)) + else yyAction18(strm, yyNO_MATCH) + else if inp = 0wx66 + then yyQ7(strm', yyMATCH(strm, yyAction18, yyNO_MATCH)) + else yyAction18(strm, yyNO_MATCH) + else if inp = 0wx74 + then yyQ10(strm', yyMATCH(strm, yyAction18, yyNO_MATCH)) + else if inp < 0wx74 + then if inp = 0wx72 + then yyQ9(strm', yyMATCH(strm, yyAction18, yyNO_MATCH)) + else yyAction18(strm, yyNO_MATCH) + else if inp = 0wx75 + then yyQ11(strm', yyMATCH(strm, yyAction18, yyNO_MATCH)) + else yyAction18(strm, yyNO_MATCH) + (* end case *)) +fun yyQ3 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction27(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction27(strm, yyNO_MATCH) + (* end case *)) +fun yyQ2 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction26(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx23 + then yyQ2(strm', yyMATCH(strm, yyAction26, yyNO_MATCH)) + else if inp < 0wx23 + then if inp = 0wx22 + then yyAction26(strm, yyNO_MATCH) + else yyQ2(strm', yyMATCH(strm, yyAction26, yyNO_MATCH)) + else if inp = 0wx5C + then yyAction26(strm, yyNO_MATCH) + else yyQ2(strm', yyMATCH(strm, yyAction26, yyNO_MATCH)) + (* end case *)) +fun yyQ0 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx23 + then yyQ2(strm', lastMatch) + else if inp < 0wx23 + then if inp = 0wx22 + then yyQ3(strm', lastMatch) + else yyQ2(strm', lastMatch) + else if inp = 0wx5C + then yyQ4(strm', lastMatch) + else yyQ2(strm', lastMatch) + (* end case *)) +in + (case (!(yyss)) + of S => yyQ0(!(yystrm), yyNO_MATCH) + | INITIAL => yyQ1(!(yystrm), yyNO_MATCH) + (* end case *)) +end +end + and skip() = (yystartPos := yygetPos(); + yylastwasnref := ULexBuffer.lastWasNL (!yystrm); + continue()) + in (continue(), (!yystartPos, yygetPos()), !yystrm, !yyss) end + in + lex() + end + in + type pos = AntlrStreamPos.pos + type span = AntlrStreamPos.span + type tok = UserDeclarations.lex_result + + datatype prestrm = STRM of ULexBuffer.stream * + (yystart_state * tok * span * prestrm * yystart_state) option ref + type strm = (prestrm * yystart_state) + + fun lex sm +(STRM (yystrm, memo), ss) = (case !memo + of NONE => let + val (tok, span, yystrm', ss') = innerLex +(yystrm, ss, sm) + val strm' = STRM (yystrm', ref NONE); + in + memo := SOME (ss, tok, span, strm', ss'); + (tok, span, (strm', ss')) + end + | SOME (ss', tok, span, strm', ss'') => + if ss = ss' then + (tok, span, (strm', ss'')) + else ( + memo := NONE; + lex sm +(STRM (yystrm, memo), ss)) + (* end case *)) + + fun streamify input = (STRM (yystreamify' 0 input, ref NONE), INITIAL) + fun streamifyReader readFn strm = (STRM (yystreamifyReader' 0 readFn strm, ref NONE), + INITIAL) + fun streamifyInstream strm = (STRM (yystreamifyInstream' 0 strm, ref NONE), + INITIAL) + + fun getPos (STRM (strm, _), _) = ULexBuffer.getpos strm + + end +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ +(* sexp-lib.cm + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Author: Damon Wang (with modifications by John Reppy) + *) + +Library + + structure SExp + structure SExpParser + structure SExpPP + structure SExpPrinter + +is + + $/basis.cm + $/smlnj-lib.cm + $/pp-lib.cm + $/ml-lpt-lib.cm + +#if defined(NO_PLUGINS) + sexp.lex.sml +#else + sexp.lex : ml-ulex +#endif + + sexp.sml + sexp-parser.sml + sexp-pp.sml + sexp-printer.sml + sexp-tokens.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,336 @@ + +ann + "nonexhaustiveBind ignore" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" +in + +local + basis l4 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb + end + basis l8 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end + basis l89 = + bas + (* $/pp-lib.cm ====> *) $(SML_LIB)/smlnj-lib/PP/pp-lib.mlb + end + basis l15 = + bas + (* $/ml-lpt-lib.cm ====> *) $(SML_LIB)/mllpt-lib/mllpt-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + open l4 + in + structure gs_0 = TextIO + end + local + open l8 + in + structure gs_1 = Atom + end + local + open l4 + in + structure gs_2 = List + end + local + open l15 + in + structure gs_3 = AntlrStreamPos + end + local + open l4 + in + structure gs_4 = Char + structure gs_5 = CharArray + structure gs_6 = CharVector + structure gs_7 = FixedInt + structure gs_8 = General + structure gs_9 = Int + structure gs_10 = Int32 + structure gs_11 = Int64 + structure gs_12 = IntInf + structure gs_13 = LargeInt + structure gs_14 = LargeReal + structure gs_15 = LargeWord + structure gs_16 = OS + structure gs_17 = Position + structure gs_18 = Real + structure gs_19 = Real64 + structure gs_20 = RealArray + structure gs_21 = RealArraySlice + structure gs_22 = RealVector + structure gs_23 = RealVectorSlice + structure gs_24 = SMLofNJ + structure gs_25 = Socket + structure gs_26 = String + structure gs_27 = Substring + structure gs_28 = SysWord + structure gs_29 = Time + structure gs_30 = Word + structure gs_31 = Word32 + structure gs_32 = Word64 + structure gs_33 = Word8 + end + local + open l15 + in + structure gs_34 = UTF8 + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_2 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure UTF8 = gs_34 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + sexp-tokens.sml + in + structure gs_35 = SExpTokens + end + local + open l4 + in + structure gs_36 = Vector + end + local + open l4 + in + structure gs_37 = StringCvt + end + local + open l15 + in + structure gs_38 = ULexBuffer + end + local + structure AntlrStreamPos = gs_3 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_2 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SExpTokens = gs_35 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure StringCvt = gs_37 + structure Substring = gs_27 + structure SysWord = gs_28 + structure TextIO = gs_0 + structure Time = gs_29 + structure ULexBuffer = gs_38 + structure UTF8 = gs_34 + structure Vector = gs_36 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + sexp.lex.sml + in + structure gs_39 = SExpLexer + end + local + open l4 + in + structure gs_40 = ListPair + end + local + structure Atom = gs_1 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_2 + structure ListPair = gs_40 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + sexp.sml + in + structure gs_41 = SExp + end + local + structure AntlrStreamPos = gs_3 + structure Atom = gs_1 + structure List = gs_2 + structure SExp = gs_41 + structure SExpLexer = gs_39 + structure SExpTokens = gs_35 + structure TextIO = gs_0 + sexp-parser.sml + in + structure gs_42 = SExpParser + end + local + open l8 + in + structure gs_43 = Format + end + local + structure Atom = gs_1 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure Format = gs_43 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_2 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SExp = gs_41 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure TextIO = gs_0 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + sexp-printer.sml + in + structure gs_44 = SExpPrinter + end + local + open l89 + in + structure gs_45 = TextIOPP + end + local + structure Atom = gs_1 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure Format = gs_43 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_2 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SExp = gs_41 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure TextIOPP = gs_45 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + sexp-pp.sml + in + structure gs_46 = SExpPP + end +in + structure SExp = gs_41 + structure SExpPP = gs_46 + structure SExpParser = gs_42 + structure SExpPrinter = gs_44 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-parser.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-parser.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-parser.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-parser.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,108 @@ +(* sexp-parser.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Author: Damon Wang (with modifications by John Reppy) + *) + +structure SExpParser : sig + + val parse : TextIO.instream -> SExp.value list + + val parseFile : string -> SExp.value list + + end = struct + + structure Lex = SExpLexer + structure T = SExpTokens + structure S = SExp + + fun parse' (srcMap, inStrm) = let + fun error (pos, msg, tok) = raise Fail(concat[ + "error ", AntlrStreamPos.spanToString srcMap pos, ": ", + msg, ", found '", T.toString tok, "'" + ]) + + val lexer = Lex.lex srcMap + + (* returns (tok, pos, nextStrm, strm) where the difference between + * nextStrm and strm is that tok is the next token in strm + * whereas the token _after_ tok is the next up in nextStrm. + * + * In other words, strm has had all leading whitespace consumed. + *) + fun lexNWS (strm : Lex.strm) = (case lexer strm + of (T.WHITE, _, strm) => lexNWS strm + | (tok, pos, nextStrm) => (tok, pos, nextStrm, strm) + (* end case *)) + + fun parseValue (strm : Lex.strm) = let + val (tok, pos, strm) = lexer strm + in + case tok + of T.DELIM(delim, T.OPEN) => parseList (delim, strm) + | T.QUOTE => let val (strm', value) = parseValue strm + in + (strm, S.QUOTE value) + end + | T.KW_true => (strm, S.BOOL true) + | T.KW_false => (strm, S.BOOL false) + | T.INT n => (strm, S.INT n) + | T.FLOAT f => (strm, S.FLOAT f) + | T.STRING s => (strm, S.STRING s) + | T.SYMBOL s => (strm, S.SYMBOL (Atom.atom s)) + | _ => error (pos, "parsing value", tok) + (* end case *) + end + (* parse a list, where delim is the type of delimiter enclosing the list *) + and parseList (delim : T.delim_type, strm : Lex.strm) = let + fun matchDelim (T.DELIM(dType, T.CLOSE)) = (dType = delim) + | matchDelim tok = false + val (tok, _, nextStrm, strm) = lexNWS strm + in + if matchDelim tok + then (nextStrm, S.LIST []) + else let + fun loop (strm, items) = let + val (strm, v) = parseValue strm + (* expect either a separator (whitespace) or a delimiter *) + val (tok, pos, nextStrm, strm) = lexNWS strm + in + if matchDelim tok + then (nextStrm, v::items) + else (loop(strm, v::items) + handle (Fail msg) => + error(pos, "parsing list gave '" ^ msg ^ "'" , tok)) + end + val (strm, items) = loop (strm, []) + in + (strm, S.LIST (List.rev items)) + end + end + (* parse top-level s-expressions until EOF *) + fun parseSExps (strm, sexps) = let + val (strm, sexp) = parseValue strm + val (tok, pos, nextStrm, strm) = lexNWS strm + in + case tok + of T.EOF => List.rev(sexp::sexps) + | _ => parseSExps (strm, sexp::sexps) + (* end case *) + end + in + parseSExps (Lex.streamifyInstream inStrm, []) + end + + fun parse inStrm = parse' (AntlrStreamPos.mkSourcemap (), inStrm) + + fun parseFile fileName = let + val inStrm = TextIO.openIn fileName + val v = parse' (AntlrStreamPos.mkSourcemap' fileName, inStrm) + handle ex => (TextIO.closeIn inStrm; raise ex) + in + TextIO.closeIn inStrm; + v + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-pp.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-pp.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-pp.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-pp.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,50 @@ +(* sexp-pp.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A pretty printer for SExp values. + *) + +structure SExpPP : sig + + val output : TextIOPP.stream * SExp.value -> unit + + end = struct + + structure S = SExp + structure PP = TextIOPP + structure F = Format + + fun output (strm, sexp) = let + val str = PP.string strm + fun sp () = PP.space strm 1 + fun ppList [] = str "()" + | ppList [v] = ( + PP.openHBox strm; + str "("; ppVal v; str ")"; + PP.closeBox strm) + | ppList (v1::v2::vr) = ( + PP.openHBox strm; + str "("; ppVal v1; sp(); + PP.openHOVBox strm (PP.Rel 0); + ppVal v2; + List.app (fn v => (sp(); ppVal v)) vr; + str ")"; + PP.closeBox strm; + PP.closeBox strm) + and ppVal (S.SYMBOL value) = str (Atom.toString value) + | ppVal (S.BOOL value) = str (if value then "#t" else "#f") + | ppVal (S.INT value) = str (F.format "%d" [F.LINT value]) + | ppVal (S.FLOAT value) = str (F.format "%g" [F.REAL value]) + | ppVal (S.STRING value) = str (concat ["\"", String.toString value, "\""]) + | ppVal (S.QUOTE value) = (str "'"; ppVal value) + | ppVal (S.LIST values) = ppList values + in + PP.openVBox strm (PP.Abs 0); + ppVal sexp; + PP.newline strm; + PP.closeBox strm + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-printer.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-printer.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-printer.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-printer.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,38 @@ +(* sexp-printer.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Author: Damon Wang (with modifications by John Reppy) + * + * A printer for SExp values. This printer does not introduce any line + * breaks. For output that is more readable, use the SExpPP module. + *) + +structure SExpPrinter : sig + + val print : TextIO.outstream * SExp.value -> unit + + end = struct + + structure S = SExp + structure F = Format + + fun print (strm, sexp) = let + fun pr s = TextIO.output(strm, s) + fun prList [] = pr ("()") + | prList [v] = (pr "("; prVal v; pr ")") + | prList (v::vs) = ( + pr "("; prVal v; List.app (fn v => (pr " "; prVal v)) vs; pr ")") + and prVal (S.SYMBOL value) = pr (Atom.toString value) + | prVal (S.BOOL value) = pr (if value then "#t" else "#f") + | prVal (S.INT value) = pr (F.format "%d" [F.LINT value]) + | prVal (S.FLOAT value) = pr (F.format "%g" [F.REAL value]) + | prVal (S.STRING value) = pr (concat ["\"", String.toString value, "\""]) + | prVal (S.QUOTE value) = (pr "'"; prVal value) + | prVal (S.LIST values) = prList values + in + prVal sexp + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,58 @@ +(* sexp.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Author: Damon Wang (with modifications by John Reppy) + * + * This is the tree representation of a SExp data as produced/consumed + * by the tree parser. + *) + +structure SExp = + struct + + datatype value + = SYMBOL of Atom.atom + | BOOL of bool + | INT of IntInf.int + | FLOAT of real + | STRING of string + | QUOTE of value + | LIST of value list + + fun same (SYMBOL a, SYMBOL b) = Atom.same (a, b) + | same (BOOL a, BOOL b) = (a = b) + | same (INT a, INT b) = (a = b) + | same (FLOAT a, FLOAT b) = Real.==(a, b) + | same (STRING a, STRING b) = (a = b) + | same (QUOTE a, QUOTE b) = same(a, b) + | same (LIST a, LIST b) = ListPair.allEq same (a, b) + | same _ = false + + fun compare (a, b) = (case (a, b) + of (SYMBOL a, SYMBOL b) => Atom.compare(a, b) + | (SYMBOL _, _) => LESS + | (_, SYMBOL _) => GREATER + | (BOOL a, BOOL b) => + if (a = b) then EQUAL + else if a then LESS + else GREATER + | (BOOL _, _) => LESS + | (_, BOOL _) => GREATER + | (INT a, INT b) => IntInf.compare (a, b) + | (INT _, _) => LESS + | (_, INT _) => GREATER + | (FLOAT a, FLOAT b) => Real.compare(a, b) + | (FLOAT _, _) => LESS + | (_, FLOAT _) => GREATER + | (STRING a, STRING b) => String.compare(a, b) + | (STRING _, _) => LESS + | (_, STRING _) => GREATER + | (QUOTE a, QUOTE b) => compare(a, b) + | (QUOTE _, _) => LESS + | (_, QUOTE _) => GREATER + | (LIST a, LIST b) => List.collate compare (a, b) + (* end case *)) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-tests.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-tests.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-tests.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-tests.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,27 @@ +(* sexp-tests.cm + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Author: Damon Wang (with modifications by John Reppy) + *) + +Library + + structure SExp + structure SExpParser + structure SExpPrinter + structure SExpTests + structure TestPP + +is + + $/basis.cm + $/smlnj-lib.cm + $/pp-lib.cm + $/ml-lpt-lib.cm + + sexp-lib.cm + + sexp-tests.sml + test-pp.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-tests.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-tests.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-tests.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-tests.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,254 @@ +(* sexp-tests.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Author: Damon Wang (with modifications by John Reppy) + * + * Some test cases for the SExp library 11 May 2011 by Damon Wang + *) + +structure TEST : sig + + exception ERROR of string option (* an error message *) + + datatype outcome = PASS of string (* test name *) + | FAIL of (string * exn) (* test name, FAIL instance *) + | PARTIAL of (string * outcome list) (* name, results *) + + datatype testcase = CASE of { name : string, test : unit -> unit } + | SUITE of { name : string, tests : testcase list } + + val run : testcase -> outcome + val count : outcome -> (int * int) (* number passed, number run *) + val summary : outcome -> string + + (* args: (msg, cond) where + * msg is a description to be printed on failure + * cond is a boolean---false means failure *) + val assert : (string * bool) -> unit + (* args: (cond) *) + val assert' : bool -> unit + + (* args: (msg, name, func) where + * msg is a description to be printed on failure + * name is the exnName of the exception to expect + * func is the function which should raise the exception *) + val throws : (string * string * (unit -> unit)) -> unit + (* args: (name, func) *) + val throws' : (string * (unit -> unit )) -> unit + +end = struct + + exception ERROR of string option (* an error message *) + + datatype outcome = PASS of string (* test name *) + | FAIL of (string * exn) (* test name, FAIL instance *) + | PARTIAL of (string * outcome list) (* name, results *) + + datatype testcase = CASE of { name : string, test : unit -> unit } + | SUITE of { name : string, tests : testcase list } + + fun run (SUITE {name, tests}) = PARTIAL(name, List.map run tests) + | run (CASE {name, test}) = (test(); PASS(name)) handle e => FAIL(name, e) + + fun addVec ((a, b), (c, d)) = (a + c, b + d) + + fun count (PASS _) = (1, 1) + | count (FAIL _) = (0, 1) + | count (PARTIAL (_, results)) = let + in + List.foldl addVec (0,0) (List.map count results) + end + + fun assert (msg, cond) = if not cond then raise ERROR (SOME msg) else () + + fun assert' cond = if not cond then raise ERROR NONE else () + + fun throws (msg, name, func) = let + fun wrongExn e = raise ERROR (SOME (String.concat [msg, + "---expected exception '", name, "' but got '", exnName e, "' with msg\n", + exnMessage e])) + fun noExn () = raise ERROR (SOME (String.concat [msg, + "---expected exception '", name, "' but got nothing"])) + in + if (func (); true) handle e => + if exnName e = name + then false + else (wrongExn e; false) + then noExn () + else () + end + + fun throws' (name, func) = throws ("", name, func) + + local + fun splitMsg msg = String.fields (fn c => EQUAL = Char.compare (#"\n", c)) msg + fun indent lines = List.map (fn s => "\t" ^ s) lines + fun summary' (PASS name) : (string list * (int * int)) = + ([ String.concat [" ", name, "\n"] ], (1, 1)) + | summary' (FAIL (name, ERROR msg)) = + (List.concat [ [ String.concat ["FAIL ", name ] ], + (case msg + of SOME msg => indent + (List.concat [["\n"], (splitMsg msg), ["\n"] ]) + | NONE => ["\n"]) ], + (0, 1)) + | summary' (FAIL (name, e)) = + (List.concat [ [ String.concat ["FAIL ", name, " with external error ", + exnName e, "\n" ] ], + indent (splitMsg (exnMessage e)), + [ "\n"] ], + (0, 1)) + | summary' (PARTIAL (name, results)) = let + val (lines, counts) = ListPair.unzip (List.map summary' results) + val indented = indent (List.concat lines) + val (n_passed, n_run) = List.foldl addVec (0, 0) counts + in + (String.concat [ "[ ", Int.toString n_passed, " / ", Int.toString n_run, + " ] ", name, "\n"] :: indented, (n_passed, n_run)) + end + in + fun summary results = String.concat (#1 (summary' results)) + end + +end + +structure SExpTests : sig + val run : unit -> unit +end = struct + + structure P = SExpParser + structure S = SExp + + val assert = TEST.assert + val assert' = TEST.assert' + val throws' = TEST.throws' + + fun pS str = hd (P.parse (TextIO.openString str)) + + val tests = TEST.SUITE{name="parsing", tests=[ + + TEST.SUITE{name="bool", tests=[ + TEST.CASE{name="true", test=fn () => + assert' (S.same(pS "#t", S.BOOL true)) }, + TEST.CASE{name="false", test=fn () => + assert' (S.same(pS "#f", S.BOOL false))} ] }, + + TEST.SUITE{name="int", tests=[ + TEST.CASE{name="negative", test=fn () => + assert' (S.same(pS "-1", S.INT ~1)) }, + TEST.CASE{name="zero", test=fn () => + assert' (S.same(pS "0", S.INT 0)) }, + TEST.CASE{name="positive", test=fn () => + assert' (S.same(pS "1", S.INT 1)) }, + TEST.CASE{name="32-bit signed max", test=fn () => + assert' (S.same(pS "2147483647", S.INT 2147483647)) }, + TEST.CASE{name="32-bit signed min", test=fn () => + assert' (S.same(pS "-2147483648", S.INT ~2147483648)) }, + TEST.CASE{name="bigger than 32-bit", test=fn () => + assert' (S.same(pS "3147483647", S.INT 3147483647)) }, + TEST.CASE{name="leading plus", test=fn () => + assert' (S.same(pS "+1", S.INT 1)) }, + TEST.CASE{name="hex", test=fn () => + assert' (S.same(pS "0xdeadbeef", S.INT 0xdeadbeef)) }, + TEST.CASE{name="positive hex", test=fn () => + assert' (S.same(pS "+0xdeadbeef", S.INT 0xdeadbeef)) }, + TEST.CASE{name="negative hex", test=fn () => + assert' (S.same(pS "-0xdeadbeef", S.INT ~0xdeadbeef)) } + ]}, + + TEST.SUITE{name="float", tests=[ + TEST.CASE{name="decimal", test=fn () => + assert' (S.same(pS "1.0", S.FLOAT 1.0))}, + TEST.CASE{name="exponent", test=fn () => + assert' (S.same(pS "1e2", S.FLOAT 100.0))}, + TEST.CASE{name="decimal and exponent", test=fn () => + assert' (S.same(pS "1.2e2", S.FLOAT 120.0))}, + TEST.CASE{name="negative", test=fn () => + assert' (S.same(pS "-1.0", S.FLOAT ~1.0))}, + TEST.CASE{name="negative exponent", test=fn () => + assert' (S.same(pS "1.0e-2", S.FLOAT 0.01))}, + TEST.CASE{name="zero first digit", test=fn () => + assert' (S.same(pS "0.1", S.FLOAT 0.1))} ]}, + + TEST.SUITE{name="string", tests=[ + TEST.CASE{name="empty", test=fn () => + assert' (S.same(pS "\"\"", S.STRING "")) }, + TEST.CASE{name="characters", test=fn () => + assert' (S.same(pS "\"foo\"", S.STRING "foo")) }, + TEST.CASE{name="escapes", test=fn () => + assert' (S.same(pS "\" \\\\ \\\" \\/ \\b \\f \\n \\r \\t \"", + S.STRING " \\ \" / \b \f \n \r \t ")) } ]}, + + TEST.SUITE{name="comments", tests=[ + TEST.CASE{name="empty", test=fn () => + assert' (S.same(pS "/* */1", S.INT 1))}, + TEST.CASE{name="with text", test=fn () => + assert' (S.same(pS "/* 1 */1", S.INT 1))}, + TEST.CASE{name="multiline allowed", test=fn () => + assert' (S.same(pS "/* 1 \n 1 */1", S.INT 1))}, + TEST.CASE{name="cannot be nested", test=fn ()=> + throws' ("Fail", fn () => (pS "/* 0 /* 1 */ 2 */ 3"; ())) } + ]}, + + TEST.SUITE{name="lists", tests=[ + TEST.CASE{name="empty", test=fn () => + assert' (S.same(pS "()", S.LIST []))}, + TEST.CASE{name="empty with spaces", test=fn () => + assert' (S.same(pS "( )", S.LIST []))}, + TEST.CASE{name="one int", test=fn () => + assert' (S.same(pS "(1)", S.LIST [ (S.INT 1) ]))}, + TEST.CASE{name="one int with space", test=fn () => + assert' (S.same(pS "( 1)", S.LIST [ (S.INT 1) ]))}, + TEST.CASE{name="one int with spaces", test=fn () => + assert' (S.same(pS "( 1 )", S.LIST [ (S.INT 1) ]))}, + TEST.CASE{name="with empty list ", test=fn () => + assert' (S.same(pS "( () )", S.LIST [ (S.LIST []) ]))}, + TEST.CASE{name="nested", test=fn () => + assert' (S.same(pS "( ( 1 ) )", S.LIST [ S.LIST [ S.INT 1 ] ]))}, + TEST.CASE{name="two elements", test=fn () => + assert' (S.same(pS "( 1 2 )", S.LIST [ S.INT 1, S.INT 2]))}, + TEST.CASE{name="three elements", test=fn () => + assert' (S.same(pS "( 1 2 3 )", S.LIST [ S.INT 1, S.INT 2]))}, + TEST.CASE{name="mixed elements", test=fn () => + assert' (S.same(pS "( 1 2.5 \"foo\" (2))", + S.LIST [ S.INT 1, S.FLOAT 2.5, S.STRING "foo", S.LIST [ S.INT 2 ] ]))}, + TEST.CASE{name="brackets", test=fn () => + assert' (S.same(pS "[ 1 2 3 ]", S.LIST [ S.INT 1, S.INT 2]))}, + TEST.CASE{name="braces", test=fn () => + assert' (S.same(pS "{ 1 2 3 }", S.LIST [ S.INT 1, S.INT 2]))}, + TEST.CASE{name="mixed delimiters", test=fn () => + assert' (S.same(pS "{ [ ( ) ] }", S.LIST [ S.LIST [ S.LIST [] ] ]))}, + TEST.CASE{name="delimiters must match", test=fn () => + throws' ("Fail", fn () => (pS "(]"; ())) }, + TEST.CASE{name="alternative separaters", test=fn () => + assert' (S.same(pS "(1;2,3)", S.LIST [ S.INT 1, S.INT 2, S.INT 3])) } + ]}, + + TEST.SUITE{name="symbols", tests=[ + TEST.CASE{name="characters", test=fn () => + assert' (S.same(pS "ab", S.SYMBOL (Atom.atom "ab")))}, + TEST.CASE{name="trailing digits", test=fn () => + assert' (S.same(pS "x0", S.SYMBOL (Atom.atom "x0")))}, + TEST.CASE{name="quoted", test=fn ()=> + assert' (S.same(pS "'0", S.SYMBOL (Atom.atom "0")))} + ]}, + + TEST.SUITE{name="bugs", tests=[ + TEST.CASE{name="bug01", test= fn () => + assert' (S.same( + pS "(set pi 3.141592653589793 :documentation \"The value of $\\pi$.\")", + S.LIST[ + S.SYMBOL(Atom.atom "set"), S.SYMBOL(Atom.atom "pi"), + S.FLOAT 3.141592653589793, S.SYMBOL(Atom.atom ":documentation"), + S.STRING "The value of $\\pi$." + ])) + } + ]} + ]} + + fun run () = TextIO.print (TEST.summary (TEST.run tests)) +end + +(* SExpTests.run (); *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-tokens.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-tokens.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/sexp-tokens.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/sexp-tokens.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,55 @@ +(* sexp-tokens.sml + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Author: Damon Wang (with modifications by John Reppy) +s * + * The tokens returned by the SExp lexer. + *) + +structure SExpTokens = + struct + + datatype delim_type = PAREN | BRACKET | BRACE + datatype delim_open = OPEN | CLOSE + + datatype token + = EOF (* end-of-file *) + | DELIM of (delim_type * delim_open) + | QUOTE (* "'" *) + | KW_true (* "#t" *) + | KW_false (* "#f" *) + | INT of IntInf.int + | FLOAT of real + | STRING of string + | WHITE (* whitespace, which separates list items *) + | SYMBOL of string + (* TODO: add a HEX constructor for encoding non-printable characters in + * some human-readable way *) + + fun toString EOF = "" + | toString (DELIM(PAREN, OPEN)) = "(" + | toString (DELIM(PAREN, CLOSE)) = ")" + | toString (DELIM(BRACKET, OPEN)) = "[" + | toString (DELIM(BRACKET, CLOSE)) = "]" + | toString (DELIM(BRACE, OPEN)) = "{" + | toString (DELIM(BRACE, CLOSE)) = "}" + | toString QUOTE = "'" + | toString KW_true = "#t" + | toString KW_false = "#f" + | toString (INT i) = + if (i < 0) then "-" ^ IntInf.toString(~i) + else IntInf.toString i + | toString (FLOAT f) = + if (f < 0.0) then "-" ^ Real.toString(~f) + else Real.toString f + | toString (STRING s) = let + fun f (wchr, l) = UTF8.toString wchr :: l + in + String.concat("\"" :: (List.foldr f ["\""] (UTF8.explode s))) + end + | toString (SYMBOL str) = str + | toString WHITE = " " + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/test-pp.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/test-pp.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/SExp/test-pp.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/SExp/test-pp.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,35 @@ +(* test-pp.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Test the pretty printing of S-Expressions. + *) + +structure TestPP = + struct + + local + structure S = SExp + structure PP = TextIOPP + + fun pr wid sexp = let + val ppStrm = PP.openOut{dst = TextIO.stdOut, wid=wid} + in + SExpPP.output (ppStrm, sexp); + PP.closeStream ppStrm + end + + fun list items = S.LIST(S.SYMBOL(Atom.atom "list") :: items) + in + (* a large list *) + fun prList wid = pr wid (list (List.tabulate(100, fn i => S.INT(IntInf.fromInt i)))) + (* list of lists *) + fun prListOfLists wid = let + fun mkList n = list (List.tabulate(n, fn i => S.INT(IntInf.fromInt i))) + in + pr wid (list (List.tabulate(50, mkList))) + end + end (* local *) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/smlnj-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/smlnj-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/smlnj-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/smlnj-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,18 @@ +local + Controls/controls-lib.mlb + HTML/html-lib.mlb + HTML4/html4-lib.mlb + HashCons/hash-cons-lib.mlb + INet/inet-lib.mlb + JSON/json-lib.mlb + PP/pp-lib.mlb + Reactive/reactive-lib.mlb + RegExp/regexp-lib.mlb + SExp/sexp-lib.mlb + Unix/unix-lib.mlb + Util/smlnj-lib.mlb + Util/time-limit.mlb + UUID/uuid-lib.mlb + XML/xml-lib.mlb +in +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/TODO mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/TODO --- mlton-20130715/lib/smlnj-lib/smlnj-lib/TODO 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/TODO 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,44 @@ +Utility library +--------------- + Polymorphic version of dynamic arrays. + New hash table implementation/API. + +HTML Library +------------ + + Rewrite parser as recursive descent (the ML-Yacc version doesn't handle + whitespace in the HEAD element very well). + +PP Library +---------- + + Add support for tabular layout. + +RegExp library +-------------- + + Add support for Interval REs to the DFA and Thompson engines + + Add support for "$" to the Thompson engine + + Add support for POSIX character classes to the AWK syntax. These + are + [:alnum:] Alphanumeric characters. + [:alpha:] Alphabetic characters. + [:blank:] Space and TAB characters. + [:cntrl:] Control characters. + [:digit:] Decimal digits. + [:graph:] Characters that are both printable and visible. + (A space is printable but not visible, whereas an ‘a’ is both.) + [:lower:] Lowercase alphabetic characters. + [:print:] Printable characters (characters that are not control characters). + [:punct:] Punctuation characters (characters that are not letters, + digits, control characters, or space characters). + [:space:] Space characters (such as space, TAB, and formfeed, etc). + [:upper:] Uppercase alphabetic characters. + [:xdigit:] Hexadecimal digits. + +New libraries +------------- + + CGI scripting diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-env-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-env-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-env-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-env-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ +(* unix-env-sig.sml + * + * COPYRIGHT (c) 2007 The Fellowship of SML/NJ (http://smlnj.org) + * All rights reserved. + * + * A UNIX environment is a list of strings of the form "name=value", where + * the "=" character does not appear in name. + * NOTE: binding the user's environment as an ML value and then exporting the + * ML image can result in incorrect behavior, since the environment bound in the + * heap image may differ from the user's environment when the exported image + * is used. + *) + +signature UNIX_ENV = + sig + + val getFromEnv : (string * string list) -> string option + (* return the value, if any, bound to the name. *) + + val getValue : {name : string, default : string, env : string list} -> string + (* return the value bound to the name, or a default value *) + + val removeFromEnv : (string * string list) -> string list + (* remove a binding from an environment *) + + val addToEnv : (string * string list) -> string list + (* add a binding to an environment, replacing an existing binding + * if necessary. + *) + + val environ : unit -> string list + (* return the user's environment *) + + val getEnv : string -> string option + (* return the binding of an environment variable in the + * user's environment. + *) + + end; (* UNIX_ENV *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-env.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-env.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-env.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-env.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,85 @@ +(* unix-env.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * A UNIX environment is a list of strings of the form "name=value", where + * the "=" character does not appear in name. + * NOTE: binding the user's environment as an ML value and then exporting the + * ML image can result in incorrect behavior, since the environment bound in the + * heap image may differ from the user's environment when the exported image + * is used. + *) + +structure UnixEnv : UNIX_ENV = + struct + + structure SS = Substring + + local + fun notEqual #"=" = false | notEqual _ = true + val split = SS.splitl notEqual + in + fun splitBinding s = let + val (a, b) = split(SS.full s) + in + if SS.isEmpty b + then (s, "") + else (SS.string a, SS.string(SS.triml 1 b)) + end + end + + (* return the value, if any, bound to the name. *) + fun getFromEnv (name, env) = let + fun look [] = NONE + | look (s::r) = let + val (n, v) = splitBinding s + in + if (n = name) then (SOME v) else look r + end + in + look env + end + + (* return the value bound to the name, or a default value *) + fun getValue {name, default, env} = (case getFromEnv(name, env) + of (SOME s) => s + | NONE => default + (* end case *)) + + (* remove a binding from an environment *) + fun removeFromEnv (name, env) = let + fun look [] = [] + | look (s::r) = let + val (n, v) = splitBinding s + in + if (n = name) then r else (s :: look r) + end + in + look env + end + + (* add a binding to an environment, replacing an existing binding + * if necessary. + *) + fun addToEnv (nameValue, env) = let + val (name, _) = splitBinding nameValue + fun look [] = [nameValue] + | look (s::r) = let + val (n, v) = splitBinding s + in + if (n = name) then r else (s :: look r) + end + in + look env + end + + (* return the user's environment *) + val environ = Posix.ProcEnv.environ + + (* return the binding of an environment variable in the + * user's environment. + *) + fun getEnv name = getFromEnv(name, environ()) + + end; (* UnixEnv *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,27 @@ +(* unix-lib.cm + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Sources file for Unix utility library; part of the SML/NJ library suite. + *) + +Library + signature UNIX_ENV + signature UNIX_PATH + + structure UnixEnv + structure UnixPath + +is +#if defined(NEW_CM) + $/basis.cm + $/smlnj-lib.cm +#else + ../Util/smlnj-lib.cm +#endif + + unix-env-sig.sml + unix-env.sml + unix-path-sig.sml + unix-path.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,189 @@ + +ann + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" +in + +local + basis l8 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb + end + basis l4 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + open l4 + in + structure gs_0 = PathUtil + end + local + open l8 + in + structure gs_1 = Posix + end + local + open l8 + in + structure gs_2 = Char + structure gs_3 = CharArray + structure gs_4 = CharVector + structure gs_5 = FixedInt + structure gs_6 = General + structure gs_7 = Int + structure gs_8 = Int32 + structure gs_9 = Int64 + structure gs_10 = IntInf + structure gs_11 = LargeInt + structure gs_12 = LargeReal + structure gs_13 = LargeWord + structure gs_14 = OS + structure gs_15 = Position + structure gs_16 = Real + structure gs_17 = Real64 + structure gs_18 = RealArray + structure gs_19 = RealArraySlice + structure gs_20 = RealVector + structure gs_21 = RealVectorSlice + structure gs_22 = SMLofNJ + structure gs_23 = Socket + structure gs_24 = String + structure gs_25 = Substring + structure gs_26 = SysWord + structure gs_27 = Time + structure gs_28 = Word + structure gs_29 = Word32 + structure gs_30 = Word64 + structure gs_31 = Word8 + end + local + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure OS = gs_14 + structure Position = gs_15 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure Time = gs_27 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + unix-path-sig.sml + in + signature gs_32 = UNIX_PATH + end + local + unix-env-sig.sml + in + signature gs_33 = UNIX_ENV + end + local + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure OS = gs_14 + structure Position = gs_15 + structure Posix = gs_1 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure Time = gs_27 + signature UNIX_ENV = gs_33 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + unix-env.sml + in + structure gs_34 = UnixEnv + end + local + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure OS = gs_14 + structure PathUtil = gs_0 + structure Position = gs_15 + structure Posix = gs_1 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure Time = gs_27 + signature UNIX_PATH = gs_32 + structure UnixEnv = gs_34 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + unix-path.sml + in + structure gs_35 = UnixPath + end +in + signature UNIX_ENV = gs_33 + signature UNIX_PATH = gs_32 + structure UnixEnv = gs_34 + structure UnixPath = gs_35 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-path-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-path-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-path-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-path-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,44 @@ +(* unix-path-sig.sml + * + * COPYRIGHT (c) 2007 The Fellowship of SML/NJ (http://smlnj.org) + * All rights reserved. + * + * Note that this module is largely superseded by the `PathUtil` module + * in the *Util Library*. + *) + +signature UNIX_PATH = + sig + + type path_list = string list + + (* get the user's PATH environment variable. *) + val getPath : unit -> path_list + + datatype access_mode = datatype OS.FileSys.access_mode + datatype file_type = F_REGULAR | F_DIR | F_SYMLINK | F_SOCK | F_CHR | F_BLK + + (* findFile (paths, mode) name + * returns the p/name, where p is the first path in paths such that p/name + * has the given access modes. + *) + val findFile : (path_list * access_mode list) -> string -> string option + + (* findFiles (paths, mode) name + * returns a list of p/name, where p is in paths and p/name has the given access modes. + *) + val findFiles : (path_list * access_mode list) -> string -> string list + + (* findFileOfType (paths, ftype, mode) name + * returns the p/name, where p is the first path in paths such that p/name + * has the given file type and access mode. + *) + val findFileOfType : (path_list * file_type * access_mode list) -> string -> string option + + (* findFileOfTypes (paths, ftype, mode) name + * returns a list of p/name, where p is in paths and p/name has the given file type + * and access mode. + *) + val findFilesOfType : (path_list * file_type * access_mode list) -> string -> string list + + end (* UNIX_PATH *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-path.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-path.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Unix/unix-path.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Unix/unix-path.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,59 @@ +(* unix-path.sml + * + * COPYRIGHT (c) 2007 The Fellowship of SML/NJ (http://smlnj.org) + * All rights reserved. + * + * Note that this module is largely superseded by the `PathUtil` module + * in the *Util Library*. + *) + +structure UnixPath : UNIX_PATH = + struct + + datatype access_mode = datatype OS.FileSys.access_mode + + datatype file_type = F_REGULAR | F_DIR | F_SYMLINK | F_SOCK | F_CHR | F_BLK + + (** Path lists **) + + type path_list = string list + + fun getPath () = let + val path = (case (UnixEnv.getEnv "PATH") of (SOME p) => p | _ => "") + in + String.fields (fn #":" => true | _ => false) path + end (* getPath *) + + local + + structure ST = Posix.FileSys.ST + fun isFileTy (path, ty) = let + val st = Posix.FileSys.stat path + in + case ty + of F_REGULAR => ST.isReg st + | F_DIR => ST.isDir st + | F_SYMLINK => ST.isLink st + | F_SOCK => ST.isSock st + | F_CHR => ST.isChr st + | F_BLK => ST.isBlk st + (* end case *) + end + fun access mode pathname = (OS.FileSys.access(pathname, mode)) + fun accessAndType (mode, ftype) pathname = ( + OS.FileSys.access(pathname, mode) + andalso isFileTy(pathname, ftype)) + handle _ => false + + in + + fun findFile (pl, mode) = PathUtil.existsFile (access mode) pl + fun findFiles (pl, mode) = PathUtil.allFiles (access mode) pl + fun findFileOfType (pl, ftype, mode) = + PathUtil.existsFile (accessAndType(mode, ftype)) pl + fun findFilesOfType (pl, ftype, mode) = + PathUtil.allFiles (accessAndType(mode, ftype)) pl + + end (* local *) + + end (* UnixPath *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/ansi-term.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/ansi-term.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/ansi-term.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/ansi-term.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,97 @@ +(* ansi-term.sml + * + * COPYRIGHT (c) 2020 John Reppy (http://www.cs.uchicago.edu/~jhr) + * All rights reserved. + * + * Support for ANSI terminal control codes. Currently, this support + * is just for display attributes. + *) + +structure ANSITerm : sig + + datatype color + = Black | Red | Green | Yellow | Blue | Magenta | Cyan | White | Default + + datatype style + = FG of color (* foreground color *) + | BG of color (* background color *) + | BF (* bold/bright *) + | DIM (* dim *) + | NORMAL (* normal intensity/brightness *) + | UL (* underline *) + | UL_OFF (* underline off *) + | BLINK (* blinking text *) + | BLINK_OFF (* blinking off *) + | REV (* reverse video *) + | REV_OFF (* reverse video off *) + | INVIS (* invisible *) + | INVIS_OFF (* invisible off *) + | RESET + + (* return the command string for the given styles; the empty list is "normal" *) + val toString : style list -> string + + (* output commands to set the given styles; the empty list is "normal" *) + val setStyle : (TextIO.outstream * style list) -> unit + + end = struct + + datatype color + = Black | Red | Green | Yellow | Blue | Magenta | Cyan | White | Default + + datatype style + = FG of color (* foreground color *) + | BG of color (* background color *) + | BF (* bold/bright *) + | DIM (* dim *) + | NORMAL (* normal intensity/brightness *) + | UL (* underline *) + | UL_OFF (* underline off *) + | BLINK (* blinking text *) + | BLINK_OFF (* blinking off *) + | REV (* reverse video *) + | REV_OFF (* reverse video off *) + | INVIS (* invisible *) + | INVIS_OFF (* invisible off *) + | RESET + + (* basic color codes *) + fun colorToCmd Black = 0 + | colorToCmd Red = 1 + | colorToCmd Green = 2 + | colorToCmd Yellow = 3 + | colorToCmd Blue = 4 + | colorToCmd Magenta = 5 + | colorToCmd Cyan = 6 + | colorToCmd White = 7 + | colorToCmd Default = 9 + + (* convert style to integer command *) + fun styleToCmd (FG c) = 30 + colorToCmd c + | styleToCmd (BG c) = 40 + colorToCmd c + | styleToCmd BF = 1 + | styleToCmd DIM = 2 + | styleToCmd NORMAL = 22 + | styleToCmd UL = 4 + | styleToCmd UL_OFF = 24 + | styleToCmd BLINK = 5 + | styleToCmd BLINK_OFF = 25 + | styleToCmd REV = 7 + | styleToCmd REV_OFF = 27 + | styleToCmd INVIS = 8 + | styleToCmd INVIS_OFF = 28 + | styleToCmd RESET = 0 + + fun cmdStr [] = "" + | cmdStr (cmd :: r) = let + fun f (cmd, l) = ";" :: Int.toString cmd :: l + in + concat ("\027[" :: Int.toString cmd :: List.foldr f ["m"] r) + end + + fun toString [] = cmdStr[0, 30] + | toString stys = cmdStr(List.map styleToCmd stys) + + fun setStyle (outStrm, stys) = TextIO.output(outStrm, toString stys) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/array-qsort-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/array-qsort-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/array-qsort-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/array-qsort-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,163 @@ +(* array-qsort-fn.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * Functor for in-place sorting of abstract arrays. + * Uses an engineered version of quicksort due to + * Bentley and McIlroy. + * + *) + +functor ArrayQSortFn (A : MONO_ARRAY) : MONO_ARRAY_SORT = + struct + + structure A = A + + fun isort (array, start, n, cmp) = let + fun item i = A.sub(array,i) + fun swap (i,j) = let + val tmp = A.sub(array,i) + in A.update(array,i,A.sub(array,j)); A.update(array,j,tmp) end + fun vecswap (i,j,0) = () + | vecswap (i,j,n) = (swap(i,j);vecswap(i+1,j+1,n-1)) + fun insertSort (start, n) = let + val limit = start+n + fun outer i = + if i >= limit then () + else let + fun inner j = + if j = start then outer(i+1) + else let + val j' = j - 1 + in + if cmp(item j',item j) = GREATER + then (swap(j,j'); inner j') + else outer(i+1) + end + in inner i end + in + outer (start+1) + end + in insertSort (start, n); array end + + fun sortRange (array, start, n, cmp) = let + fun item i = A.sub(array,i) + fun swap (i,j) = let + val tmp = A.sub(array,i) + in A.update(array,i,A.sub(array,j)); A.update(array,j,tmp) end + fun vecswap (i,j,0) = () + | vecswap (i,j,n) = (swap(i,j);vecswap(i+1,j+1,n-1)) + fun insertSort (start, n) = let + val limit = start+n + fun outer i = + if i >= limit then () + else let + fun inner j = + if j = start then outer(i+1) + else let + val j' = j - 1 + in + if cmp(item j',item j) = GREATER + then (swap(j,j'); inner j') + else outer(i+1) + end + in inner i end + in + outer (start+1) + end + + fun med3(a,b,c) = let + val a' = item a and b' = item b and c' = item c + in + case (cmp(a', b'),cmp(b', c')) + of (LESS, LESS) => b + | (LESS, _) => ( + case cmp(a', c') of LESS => c | _ => a) + | (_, GREATER) => b + | _ => (case cmp(a', c') of LESS => a | _ => c) + (* end case *) + end + + fun getPivot (a,n) = + if n <= 7 then a + n div 2 + else let + val p1 = a + val pm = a + n div 2 + val pn = a + n - 1 + in + if n <= 40 then med3(p1,pm,pn) + else let + val d = n div 8 + val p1 = med3(p1,p1+d,p1+2*d) + val pm = med3(pm-d,pm,pm+d) + val pn = med3(pn-2*d,pn-d,pn) + in + med3(p1,pm,pn) + end + end + + fun quickSort (arg as (a, n)) = let + fun bottom limit = let + fun loop (arg as (pa,pb)) = + if pb > limit then arg + else case cmp(item pb,item a) of + GREATER => arg + | LESS => loop (pa,pb+1) + | _ => (swap arg; loop (pa+1,pb+1)) + in loop end + + fun top limit = let + fun loop (arg as (pc,pd)) = + if limit > pc then arg + else case cmp(item pc,item a) of + LESS => arg + | GREATER => loop (pc-1,pd) + | _ => (swap arg; loop (pc-1,pd-1)) + in loop end + + fun split (pa,pb,pc,pd) = let + val (pa,pb) = bottom pc (pa,pb) + val (pc,pd) = top pb (pc,pd) + in + if pb > pc then (pa,pb,pc,pd) + else (swap(pb,pc); split(pa,pb+1,pc-1,pd)) + end + + val pm = getPivot arg + val _ = swap(a,pm) + val pa = a + 1 + val pc = a + (n-1) + val (pa,pb,pc,pd) = split(pa,pa,pc,pc) + val pn = a + n + val r = Int.min(pa - a, pb - pa) + val _ = vecswap(a, pb-r, r) + val r = Int.min(pd - pc, pn - pd - 1) + val _ = vecswap(pb, pn-r, r) + val n' = pb - pa + val _ = if n' > 1 then sort(a,n') else () + val n' = pd - pc + val _ = if n' > 1 then sort(pn-n',n') else () + in () end + + and sort (arg as (_, n)) = if n < 7 then insertSort arg + else quickSort arg + in sort (start,n) end + + fun sort cmp array = sortRange(array,0,A.length array, cmp) + + fun sorted cmp array = let + val len = A.length array + fun s (v,i) = let + val v' = A.sub(array,i) + in + case cmp(v,v') of + GREATER => false + | _ => if i+1 = len then true else s(v',i+1) + end + in + if len = 0 orelse len = 1 then true + else s(A.sub(array,0),1) + end + + end (* ArraySortFn *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/array-qsort.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/array-qsort.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/array-qsort.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/array-qsort.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,168 @@ +(* array-qsort.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * Structure for in-place sorting of polymorphic arrays. + * Uses an engineered version of quicksort due to + * Bentley and McIlroy. + * + *) + +structure ArrayQSort : ARRAY_SORT = + struct + + structure A = Array + + type 'a array = 'a A.array + + val sub = Unsafe.Array.sub + val update = Unsafe.Array.update + + fun isort (array, start, n, cmp) = let + fun item i = sub(array,i) + fun swap (i,j) = let + val tmp = sub(array,i) + in update(array,i,sub(array,j)); update(array,j,tmp) end + fun vecswap (i,j,0) = () + | vecswap (i,j,n) = (swap(i,j);vecswap(i+1,j+1,n-1)) + fun insertSort (start, n) = let + val limit = start+n + fun outer i = + if i >= limit then () + else let + fun inner j = + if j = start then outer(i+1) + else let + val j' = j - 1 + in + if cmp(item j',item j) = GREATER + then (swap(j,j'); inner j') + else outer(i+1) + end + in inner i end + in + outer (start+1) + end + in insertSort (start, n); array end + + fun sortRange (array, start, n, cmp) = let + fun item i = sub(array,i) + fun swap (i,j) = let + val tmp = sub(array,i) + in update(array,i,sub(array,j)); update(array,j,tmp) end + fun vecswap (i,j,0) = () + | vecswap (i,j,n) = (swap(i,j);vecswap(i+1,j+1,n-1)) + fun insertSort (start, n) = let + val limit = start+n + fun outer i = + if i >= limit then () + else let + fun inner j = + if j = start then outer(i+1) + else let + val j' = j - 1 + in + if cmp(item j',item j) = GREATER + then (swap(j,j'); inner j') + else outer(i+1) + end + in inner i end + in + outer (start+1) + end + + fun med3(a,b,c) = let + val a' = item a and b' = item b and c' = item c + in + case (cmp(a', b'),cmp(b', c')) + of (LESS, LESS) => b + | (LESS, _) => ( + case cmp(a', c') of LESS => c | _ => a) + | (_, GREATER) => b + | _ => (case cmp(a', c') of LESS => a | _ => c) + (* end case *) + end + + fun getPivot (a,n) = + if n <= 7 then a + n div 2 + else let + val p1 = a + val pm = a + n div 2 + val pn = a + n - 1 + in + if n <= 40 then med3(p1,pm,pn) + else let + val d = n div 8 + val p1 = med3(p1,p1+d,p1+2*d) + val pm = med3(pm-d,pm,pm+d) + val pn = med3(pn-2*d,pn-d,pn) + in + med3(p1,pm,pn) + end + end + + fun quickSort (arg as (a, n)) = let + fun bottom limit = let + fun loop (arg as (pa,pb)) = + if pb > limit then arg + else case cmp(item pb,item a) of + GREATER => arg + | LESS => loop (pa,pb+1) + | _ => (swap arg; loop (pa+1,pb+1)) + in loop end + + fun top limit = let + fun loop (arg as (pc,pd)) = + if limit > pc then arg + else case cmp(item pc,item a) of + LESS => arg + | GREATER => loop (pc-1,pd) + | _ => (swap arg; loop (pc-1,pd-1)) + in loop end + + fun split (pa,pb,pc,pd) = let + val (pa,pb) = bottom pc (pa,pb) + val (pc,pd) = top pb (pc,pd) + in + if pb > pc then (pa,pb,pc,pd) + else (swap(pb,pc); split(pa,pb+1,pc-1,pd)) + end + + val pm = getPivot arg + val _ = swap(a,pm) + val pa = a + 1 + val pc = a + (n-1) + val (pa,pb,pc,pd) = split(pa,pa,pc,pc) + val pn = a + n + val r = Int.min(pa - a, pb - pa) + val _ = vecswap(a, pb-r, r) + val r = Int.min(pd - pc, pn - pd - 1) + val _ = vecswap(pb, pn-r, r) + val n' = pb - pa + val _ = if n' > 1 then sort(a,n') else () + val n' = pd - pc + val _ = if n' > 1 then sort(pn-n',n') else () + in () end + + and sort (arg as (_, n)) = if n < 7 then insertSort arg + else quickSort arg + in sort (start,n) end + + fun sort cmp array = sortRange(array, 0, A.length array, cmp) + + fun sorted cmp array = let + val len = A.length array + fun chk (v, i) = let + val v' = sub(array,i) + in + case cmp(v,v') + of GREATER => false + | _ => if i+1 = len then true else chk(v',i+1) + (* end case *) + end + in + len <= 1 orelse chk(sub(array,0), 1) + end + + end (* ArraySort *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/array-sort-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/array-sort-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/array-sort-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/array-sort-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,16 @@ +(* array-sort-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Signature for in-place sorting of polymorphic arrays + *) + +signature ARRAY_SORT = + sig + + val sort : ('a * 'a -> order) -> 'a array -> unit + val sorted : ('a * 'a -> order) -> 'a array -> bool + + end (* ARRAY_SORT *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-binary-map.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-binary-map.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-binary-map.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-binary-map.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,13 @@ +(* atom-binary-map.sml + * + * COPYRIGHT (c) 1997 Bell Labs, Lucent Technologies. + * + * Functional finite maps with atom keys. + *) + +structure AtomBinaryMap = + BinaryMapFn ( + struct + type ord_key = Atom.atom + val compare = Atom.compare + end) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-binary-set.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-binary-set.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-binary-set.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-binary-set.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,13 @@ +(* atom-binary-map.sml + * + * COPYRIGHT (c) 1997 Bell Labs, Lucent Technologies. + * + * Functional sets of atoms. + *) + +structure AtomBinarySet = + BinarySetFn ( + struct + type ord_key = Atom.atom + val compare = Atom.compare + end) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-map.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-map.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-map.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-map.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,8 @@ +(* atom-map.sml + * + * COPYRIGHT (c) 1999 Bell Labs, Lucent Technologies. + * + * Functional finite maps with atom keys. + *) + +structure AtomMap = AtomRedBlackMap diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-redblack-map.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-redblack-map.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-redblack-map.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-redblack-map.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,13 @@ +(* atom-redblack-map.sml + * + * COPYRIGHT (c) 1999 Bell Labs, Lucent Technologies. + * + * Functional finite maps with atom keys. + *) + +structure AtomRedBlackMap = + RedBlackMapFn ( + struct + type ord_key = Atom.atom + val compare = Atom.compare + end) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-redblack-set.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-redblack-set.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-redblack-set.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-redblack-set.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,13 @@ +(* atom-redblack-set.sml + * + * COPYRIGHT (c) 1999 Bell Labs, Lucent Technologies. + * + * Functional sets of atoms. + *) + +structure AtomRedBlackSet = + RedBlackSetFn ( + struct + type ord_key = Atom.atom + val compare = Atom.compare + end) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-set.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-set.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-set.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-set.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,8 @@ +(* atom-map.sml + * + * COPYRIGHT (c) 1999 Bell Labs, Lucent Technologies. + * + * Functional sets of atoms. + *) + +structure AtomSet = AtomRedBlackSet diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,45 @@ +(* atom-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * COPYRIGHT (c) 1996 by AT&T Research + * + * AUTHOR: John Reppy + * AT&T Bell Laboratories + * Murray Hill, NJ 07974 + * jhr@research.att.com + * + * TODO: add a gensym operation? + *) + +signature ATOM = + sig + + type atom + (* Atoms are hashed strings that support fast equality testing. *) + + val atom : string -> atom + val atom' : substring -> atom + (* Map a string/substring to the corresponding unique atom. *) + + val toString : atom -> string + (* return the string representation of the atom *) + + val same : (atom * atom) -> bool + val sameAtom : (atom * atom) -> bool + (* return true if the atoms are the same; we provide "sameAtom" for + * backward compatibility. + *) + + val compare : (atom * atom) -> order + (* compare two atoms for their relative order; note that this is + * not lexical order! + *) + val lexCompare : (atom * atom) -> order + (* compare two atoms for their lexical order *) + + val hash : atom -> word + (* return a hash key for the atom *) + + end (* signature ATOM *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,102 @@ +(* atom.sml + * + * COPYRIGHT (c) 1996 by AT&T Research + * + * AUTHOR: John Reppy + * AT&T Bell Laboratories + * Murray Hill, NJ 07974 + * jhr@research.att.com + * + * TODO: add a gensym operation? + *) + +structure Atom :> ATOM = + struct + + (* Atoms are hashed strings that support fast equality testing. *) + datatype atom = ATOM of { + hash : word, + id : string + } + + (* return the string representation of the atom *) + fun toString (ATOM{id, ...}) = id + + (* return a hash key for the atom *) + fun hash (ATOM{hash, ...}) = hash + + (* return true if the atoms are the same *) + fun same (ATOM{hash=h1, id=id1}, ATOM{hash=h2, id=id2}) = + (h1 = h2) andalso (id1 = id2) + + (* for backward compatibility *) + val sameAtom = same + + (* compare two names for their relative order; note that this is + * not lexical order! + *) + fun compare (ATOM{hash=h1, id=id1}, ATOM{hash=h2, id=id2}) = + if h1 = h2 then String.compare (id1, id2) + else if h1 < h2 then LESS + else GREATER + + (* compare two atoms for their lexical order *) + fun lexCompare (ATOM{id=id1, ...}, ATOM{id=id2, ...}) = String.compare(id1, id2) + + (* the unique name hash table *) + val tableSz = 64 + val table = ref(Array.array(tableSz, [] : atom list)) + val numItems = ref 0 + + infix % + fun h % m = Word.toIntX (Word.andb (h, m)) + + (* Map a string or substring s to the corresponding unique atom. *) + fun atom0 (toString, hashString, sameString) s = let + val h = hashString s + val tbl = !table + val sz = Array.length tbl + val indx = h % (Word.fromInt sz - 0w1) + fun look ((a as ATOM{hash, id}) :: rest) = + if (hash = h) andalso sameString(s, id) + then a + else look rest + | look [] = let + fun new (tbl, indx) = let + val a = ATOM {hash = h, id = toString s} + in + Array.update (tbl, indx, a :: Array.sub (tbl, indx)); + a + end + in + if !numItems < sz + then new (tbl, indx) + else let + val newSz = sz + sz + val newMask = Word.fromInt newSz - 0w1 + val newTbl = Array.array (newSz, []) + fun ins (item as ATOM{hash, ...}) = let + val indx = hash % newMask + in + Array.update (newTbl, indx, item :: Array.sub (newTbl, indx)) + end + in + Array.app (app ins) tbl; + table := newTbl; + new (newTbl, h % newMask) + end + end + in + look (Array.sub (tbl, indx)) + end + + (* instantiate atom0 for the string case *) + val atom = atom0 (fn s => s, FNVHash.hashString, op = ) + + (* instantiate atom0 for the substring case *) + val atom' = atom0 ( + Substring.string, + FNVHash.hashSubstring, + fn (ss, s) => (Substring.compare(ss, Substring.full s) = EQUAL)) + + end (* structure Atom *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-table.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-table.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/atom-table.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/atom-table.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,13 @@ +(* atom-table.sml + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * Hash tables of atoms. + *) + +structure AtomTable = HashTableFn (struct + type hash_key = Atom.atom + val hashVal = Atom.hash + val sameKey = Atom.same + end); + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/base64-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/base64-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/base64-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/base64-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,38 @@ +(* base64-sig.sml + * + * COPYRIGHT (c) 2012 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Support for Base64 encoding/decoding as specified by RFC 4648. + * + * http://www.ietf.org/rfc/rfc4648.txt + *) + +signature BASE64 = + sig + + (* return true if a character is in the base64 alphabet *) + val isBase64 : char -> bool + + val encode : Word8Vector.vector -> string + val encodeSlice : Word8VectorSlice.slice -> string + + (* raised if a Base64 string does not end in a complete encoding quantum (i.e., 4 + * characters including padding characters). + *) + exception Incomplete + + (* raised if an invalid Base64 character is encountered during decode. The int + * is the position of the character and the char is the invalid character. + *) + exception Invalid of (int * char) + + (* decode functions that ignore whitespace *) + val decode : string -> Word8Vector.vector + val decodeSlice : substring -> Word8Vector.vector + + (* strict decode functions that only accept the base64 characters *) + val decodeStrict : string -> Word8Vector.vector + val decodeSliceStrict : substring -> Word8Vector.vector + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/base64.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/base64.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/base64.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/base64.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,248 @@ +(* base64.sml + * + * COPYRIGHT (c) 2012 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Support for Base64 encoding/decoding as specified by RFC 4648. + * + * http://www.ietf.org/rfc/rfc4648.txt + *) + +structure Base64 : BASE64 = + struct + + structure CA = CharArray + structure W8 = Word8 + structure W8V = Word8Vector + structure W8A = Word8Array + structure UCA = Unsafe.CharArray + structure UCV = Unsafe.CharVector + structure UW8V = Unsafe.Word8Vector + + (* encoding table *) + val encTbl = "\ + \ABCDEFGHIJKLMNOPQRSTUVWXYZ\ + \abcdefghijklmnopqrstuvwxyz\ + \0123456789+/\ + \" + val padChar = #"=" + fun incByte b = UCV.sub(encTbl, Word8.toIntX b) + + (* return true if a character is in the base64 alphabet *) + val isBase64 = Char.contains encTbl + + (* encode a triple of bytes into four base-64 characters *) + fun encode3 (b1, b2, b3) = let + val c1 = W8.>>(b1, 0w2) + val c2 = W8.orb(W8.<<(W8.andb(b1, 0wx3), 0w4), W8.>>(b2, 0w4)) + val c3 = W8.orb(W8.<<(W8.andb(0wxF, b2), 0w2), W8.>>(b3, 0w6)) + val c4 = W8.andb(0wx3f, b3) + in + (incByte c1, incByte c2, incByte c3, incByte c4) + end + + (* encode a pair of bytes into three base-64 characters plus a padding character *) + fun encode2 (b1, b2) = let + val c1 = W8.>>(b1, 0w2) + val c2 = W8.orb(W8.<<(W8.andb(b1, 0wx3), 0w4), W8.>>(b2, 0w4)) + val c3 = W8.<<(W8.andb(0wxF, b2), 0w2) + in + (incByte c1, incByte c2, incByte c3, padChar) + end + + (* encode a byte into two base-64 characters plus two padding characters *) + fun encode1 b1 = let + val c1 = W8.>>(b1, 0w2) + val c2 = W8.<<(W8.andb(b1, 0wx3), 0w4) + in + (incByte c1, incByte c2, padChar, padChar) + end + + local + fun encode64 (vec, start, len) = let + val outLen = 4 * Int.quot(len + 2, 3) + val outBuf = UCA.create outLen + val nTriples = Int.quot(len, 3) + val extra = Int.rem(len, 3) + fun insBuf (i, (c1, c2, c3, c4)) = let + val idx = 4*i + in + UCA.update(outBuf, idx, c1); + UCA.update(outBuf, idx+1, c2); + UCA.update(outBuf, idx+2, c3); + UCA.update(outBuf, idx+3, c4) + end + fun loop (i, idx) = if (i < nTriples) + then ( + insBuf(i, encode3(UW8V.sub(vec, idx), UW8V.sub(vec, idx+1), UW8V.sub(vec, idx+2))); + loop (i+1, idx+3)) + else (case extra + of 1 => insBuf(i, encode1(UW8V.sub(vec, idx))) + | 2 => insBuf(i, encode2(UW8V.sub(vec, idx), UW8V.sub(vec, idx+1))) + | _ => () + (* end case *)) + in + loop (0, start); + CA.vector outBuf + end + in + + fun encode vec = encode64 (vec, 0, W8V.length vec) + + fun encodeSlice slice = encode64 (Word8VectorSlice.base slice) + + end (* local *) + + (* raised if a Base64 string does not end in a complete encoding quantum (i.e., 4 + * characters including padding characters). + *) + exception Incomplete + + (* raised if an invalid Base64 character is encountered during decode. The int + * is the position of the character and the char is the invalid character. + *) + exception Invalid of (int * char) + + (* decoding tags *) + val errCode : W8.word = 0w255 + val spCode : W8.word = 0w65 + val padCode : W8.word = 0w66 + val decTbl = let + val tbl = W8A.array(256, errCode) + fun ins (w, c) = W8A.update(tbl, Char.ord c, w) + in + (* add space codes *) + ins(spCode, #"\t"); + ins(spCode, #"\n"); + ins(spCode, #"\r"); + ins(spCode, #" "); + (* add decoding codes *) + CharVector.appi (fn (i, c) => ins(Word8.fromInt i, c)) encTbl; + (* convert to vector *) + W8V.tabulate (256, fn i => W8A.sub(tbl, i)) + end + val strictDecTbl = let + val tbl = W8A.array(256, errCode) + fun ins (w, c) = W8A.update(tbl, Char.ord c, w) + in + (* add decoding codes *) + CharVector.appi (fn (i, c) => ins(Word8.fromInt i, c)) encTbl; + (* convert to vector *) + W8V.tabulate (256, fn i => W8A.sub(tbl, i)) + end + + fun decode64 decTbl (s, start, len) = let + fun decodeChr c = W8V.sub(decTbl, Char.ord c) + fun getc i = if (i < len) + then let + val c = String.sub(s, start+i) + val b = decodeChr c + in + if (b = errCode) then raise Invalid(i, c) + else if (b = spCode) then getc (i+1) + else (b, i+1) + end + else raise Incomplete + (* first we deal with possible padding. There are three possible situations: + * 1. the final quantum is 24 bits, so there is no padding + * 2. the final quantum is 16 bits, so there are three code characters and + * one pad character. + * 3. the final quantum is 8 bits, so there are two code characters and + * two pad characters. + *) + val (lastQ, len, tailLen) = let + fun getTail (i, n, chrs) = if (i < 0) + then raise Incomplete + else if (n < 4) + then (case String.sub(s, start+i) + of #"=" => getTail (i-1, n+1, (#"=", i)::chrs) + | c => let + val b = decodeChr c + in + if (b = spCode) + then getTail (i-1, n, chrs) (* skip whitespace *) + else if (b = errCode) + then raise Invalid(i, c) + else getTail (i-1, n+1, (c, i)::chrs) + end + (* end case *)) + else (i, chrs) + fun cvt (c, i) = let + val b = decodeChr c + in + if (b < 0w64) then b else raise Invalid(i, c) + end + in + case getTail (len-1, 0, []) + of (len, [ci0, ci1, (#"=", _), (#"=", _)]) => let + val c0 = cvt ci0 + val c1 = cvt ci1 + val b0 = W8.orb(W8.<<(c0, 0w2), W8.>>(c1, 0w4)) + in + ([b0], len, 1) + end + | (len, [ci0, ci1, ci2, (#"=", _)]) => let + val c0 = cvt ci0 + val c1 = cvt ci1 + val c2 = cvt ci2 + val b0 = W8.orb(W8.<<(c0, 0w2), W8.>>(c1, 0w4)) + val b1 = W8.orb(W8.<<(c1, 0w4), W8.>>(c2, 0w2)) + in + ([b0, b1], len, 2) + end + | (_, [_, _, _, _]) => ([], len, 0) (* fallback to regular path below *) + | (_, []) => ([], len, 0) + | _ => raise Incomplete + (* end case *) + end + (* compute upper bound on number of output bytes *) + val nBytes = 3 * Word.toIntX(Word.>>(Word.fromInt len + 0w3, 0w2)) + tailLen + val buffer = W8A.array(nBytes, 0w0) + fun cvt (inIdx, outIdx) = if (inIdx < len) + then let + val (c0, i) = getc inIdx + val (c1, i) = getc i + val (c2, i) = getc i + val (c3, i) = getc i + val b0 = W8.orb(W8.<<(c0, 0w2), W8.>>(c1, 0w4)) + val b1 = W8.orb(W8.<<(c1, 0w4), W8.>>(c2, 0w2)) + val b2 = W8.orb(W8.<<(c2, 0w6), c3) + in + W8A.update(buffer, outIdx, b0); + W8A.update(buffer, outIdx+1, b1); + W8A.update(buffer, outIdx+2, b2); + cvt (i, outIdx+3) + end + else outIdx + val outLen = cvt (0, 0) (*handle Subscript => raise Incomplete*) + (* deal with the last quantum *) + val outLen = (case lastQ + of [b0, b1] => ( + W8A.update(buffer, outLen, b0); + W8A.update(buffer, outLen+1, b1); + outLen+2) + | [b0] => ( + W8A.update(buffer, outLen, b0); + outLen+1) + | _ => outLen + (* end case *)) + in + Word8ArraySlice.vector(Word8ArraySlice.slice(buffer, 0, SOME outLen)) + end + + fun decode s = decode64 decTbl (s, 0, size s) + fun decodeSlice ss = decode64 decTbl (Substring.base ss) + + fun decodeStrict s = decode64 strictDecTbl (s, 0, size s) + fun decodeSliceStrict ss = decode64 strictDecTbl (Substring.base ss) + + end + +(* simple test code + +val v = Word8Vector.tabulate(256, fn i => Word8.fromInt i); +val enc = Base64.encode v +val v' = Base64.decode enc +val ok = (v = v') + +*) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/binary-map-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/binary-map-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/binary-map-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/binary-map-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,502 @@ +(* binary-map-fn.sml + * + * COPYRIGHT (c) 2012 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This code was adapted from Stephen Adams' binary tree implementation + * of applicative integer sets. + * + * Copyright 1992 Stephen Adams. + * + * This software may be used freely provided that: + * 1. This copyright notice is attached to any copy, derived work, + * or work including all or part of this software. + * 2. Any derived work must contain a prominent notice stating that + * it has been altered from the original. + * + * + * Name(s): Stephen Adams. + * Department, Institution: Electronics & Computer Science, + * University of Southampton + * Address: Electronics & Computer Science + * University of Southampton + * Southampton SO9 5NH + * Great Britian + * E-mail: sra@ecs.soton.ac.uk + * + * Comments: + * + * 1. The implementation is based on Binary search trees of Bounded + * Balance, similar to Nievergelt & Reingold, SIAM J. Computing + * 2(1), March 1973. The main advantage of these trees is that + * they keep the size of the tree in the node, giving a constant + * time size operation. + * + * 2. The bounded balance criterion is simpler than N&R's alpha. + * Simply, one subtree must not have more than `weight' times as + * many elements as the opposite subtree. Rebalancing is + * guaranteed to reinstate the criterion for weight>2.23, but + * the occasional incorrect behaviour for weight=2 is not + * detrimental to performance. + * + *) + +functor BinaryMapFn (K : ORD_KEY) :> ORD_MAP where type Key.ord_key = K.ord_key = + struct + + structure Key = K + + (* + ** val weight = 3 + ** fun wt i = weight * i + *) + fun wt (i : int) = i + i + i + + datatype 'a map + = E + | T of { + key : K.ord_key, + value : 'a, + cnt : int, + left : 'a map, + right : 'a map + } + + val empty = E + + fun isEmpty E = true + | isEmpty _ = false + + fun numItems E = 0 + | numItems (T{cnt,...}) = cnt + + (* return the first item in the map (or NONE if it is empty) *) + fun first E = NONE + | first (T{value, left=E, ...}) = SOME value + | first (T{left, ...}) = first left + + (* return the first item in the map and its key (or NONE if it is empty) *) + fun firsti E = NONE + | firsti (T{key, value, left=E, ...}) = SOME(key, value) + | firsti (T{left, ...}) = firsti left + +local + fun N(k,v,E,E) = T{key=k,value=v,cnt=1,left=E,right=E} + | N(k,v,E,r as T n) = T{key=k,value=v,cnt=1+(#cnt n),left=E,right=r} + | N(k,v,l as T n,E) = T{key=k,value=v,cnt=1+(#cnt n),left=l,right=E} + | N(k,v,l as T n,r as T n') = + T{key=k,value=v,cnt=1+(#cnt n)+(#cnt n'),left=l,right=r} + + fun single_L (a,av,x,T{key=b,value=bv,left=y,right=z,...}) = + N(b,bv,N(a,av,x,y),z) + | single_L _ = raise Match + fun single_R (b,bv,T{key=a,value=av,left=x,right=y,...},z) = + N(a,av,x,N(b,bv,y,z)) + | single_R _ = raise Match + fun double_L (a,av,w,T{key=c,value=cv,left=T{key=b,value=bv,left=x,right=y,...},right=z,...}) = + N(b,bv,N(a,av,w,x),N(c,cv,y,z)) + | double_L _ = raise Match + fun double_R (c,cv,T{key=a,value=av,left=w,right=T{key=b,value=bv,left=x,right=y,...},...},z) = + N(b,bv,N(a,av,w,x),N(c,cv,y,z)) + | double_R _ = raise Match + + fun T' (k,v,E,E) = T{key=k,value=v,cnt=1,left=E,right=E} + | T' (k,v,E,r as T{right=E,left=E,...}) = + T{key=k,value=v,cnt=2,left=E,right=r} + | T' (k,v,l as T{right=E,left=E,...},E) = + T{key=k,value=v,cnt=2,left=l,right=E} + + | T' (p as (_,_,E,T{left=T _,right=E,...})) = double_L p + | T' (p as (_,_,T{left=E,right=T _,...},E)) = double_R p + + (* these cases almost never happen with small weight*) + | T' (p as (_,_,E,T{left=T{cnt=ln,...},right=T{cnt=rn,...},...})) = + if ln < rn then single_L p else double_L p + | T' (p as (_,_,T{left=T{cnt=ln,...},right=T{cnt=rn,...},...},E)) = + if ln > rn then single_R p else double_R p + + | T' (p as (_,_,E,T{left=E,...})) = single_L p + | T' (p as (_,_,T{right=E,...},E)) = single_R p + + | T' (p as (k,v,l as T{cnt=ln,left=ll,right=lr,...}, + r as T{cnt=rn,left=rl,right=rr,...})) = + if rn >= wt ln then (*right is too big*) + let val rln = numItems rl + val rrn = numItems rr + in + if rln < rrn then single_L p else double_L p + end + + else if ln >= wt rn then (*left is too big*) + let val lln = numItems ll + val lrn = numItems lr + in + if lrn < lln then single_R p else double_R p + end + + else T{key=k,value=v,cnt=ln+rn+1,left=l,right=r} + + local + fun min (T{left=E,key,value,...}) = (key,value) + | min (T{left,...}) = min left + | min _ = raise Match + + fun delmin (T{left=E,right,...}) = right + | delmin (T{key,value,left,right,...}) = T'(key,value,delmin left,right) + | delmin _ = raise Match + in + fun delete' (E,r) = r + | delete' (l,E) = l + | delete' (l,r) = let val (mink,minv) = min r in + T'(mink,minv,l,delmin r) + end + end +in + fun mkDict () = E + + fun singleton (x,v) = T{key=x,value=v,cnt=1,left=E,right=E} + + fun insert (E,x,v) = T{key=x,value=v,cnt=1,left=E,right=E} + | insert (T(set as {key,left,right,value,...}),x,v) = + case K.compare (key,x) of + GREATER => T'(key,value,insert(left,x,v),right) + | LESS => T'(key,value,left,insert(right,x,v)) + | _ => T{key=x,value=v,left=left,right=right,cnt= #cnt set} + fun insert' ((k, x), m) = insert(m, k, x) + + fun insertWithi comb (m, x, v) = let + fun insert E = T{key=x,value=v,cnt=1,left=E,right=E} + | insert (T{key,left,right,value,cnt}) = ( + case K.compare (key,x) + of GREATER => T'(key, value, insert left, right) + | LESS => T'(key, value, left, insert right) + | EQUAL => let + val v' = comb(x, value, v) + in + T{key=x,value=v',left=left,right=right,cnt=cnt} + end + (* end case *)) + in + insert m + end + fun insertWith comb = insertWithi (fn (_, x1, x2) => comb(x1, x2)) + + fun inDomain (set, x) = let + fun mem E = false + | mem (T(n as {key,left,right,...})) = (case K.compare (x,key) + of GREATER => mem right + | EQUAL => true + | LESS => mem left + (* end case *)) + in + mem set + end + + fun find (set, x) = let + fun mem E = NONE + | mem (T(n as {key,left,right,...})) = (case K.compare (x,key) + of GREATER => mem right + | EQUAL => SOME(#value n) + | LESS => mem left + (* end case *)) + in + mem set + end + + fun lookup (set, x) = let + fun mem E = raise LibBase.NotFound + | mem (T(n as {key,left,right,...})) = (case K.compare (x,key) + of GREATER => mem right + | EQUAL => #value n + | LESS => mem left + (* end case *)) + in + mem set + end + + fun remove (E,x) = raise LibBase.NotFound + | remove (set as T{key,left,right,value,...},x) = ( + case K.compare (key,x) + of GREATER => let + val (left', v) = remove(left, x) + in + (T'(key, value, left', right), v) + end + | LESS => let + val (right', v) = remove (right, x) + in + (T'(key, value, left, right'), v) + end + | _ => (delete'(left,right),value) + (* end case *)) + + fun listItems d = let + fun d2l (E, l) = l + | d2l (T{key,value,left,right,...}, l) = + d2l(left, value::(d2l(right,l))) + in + d2l (d,[]) + end + + fun listItemsi d = let + fun d2l (E, l) = l + | d2l (T{key,value,left,right,...}, l) = + d2l(left, (key,value)::(d2l(right,l))) + in + d2l (d,[]) + end + + fun listKeys d = let + fun d2l (E, l) = l + | d2l (T{key,left,right,...}, l) = d2l(left, key::(d2l(right,l))) + in + d2l (d,[]) + end + + local + fun next ((t as T{right, ...})::rest) = (t, left(right, rest)) + | next _ = (E, []) + and left (E, rest) = rest + | left (t as T{left=l, ...}, rest) = left(l, t::rest) + in + fun collate cmpRng (s1, s2) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => EQUAL + | ((E, _), _) => LESS + | (_, (E, _)) => GREATER + | ((T{key=x1, value=y1, ...}, r1), (T{key=x2, value=y2, ...}, r2)) => ( + case Key.compare(x1, x2) + of EQUAL => (case cmpRng(y1, y2) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + | order => order + (* end case *)) + (* end case *)) + in + cmp (left(s1, []), left(s2, [])) + end + end (* local *) + + fun appi f d = let + fun app' E = () + | app' (T{key,value,left,right,...}) = ( + app' left; f(key, value); app' right) + in + app' d + end + fun app f d = let + fun app' E = () + | app' (T{value,left,right,...}) = ( + app' left; f value; app' right) + in + app' d + end + + fun mapi f d = let + fun map' E = E + | map' (T{key,value,left,right,cnt}) = let + val left' = map' left + val value' = f(key, value) + val right' = map' right + in + T{cnt=cnt, key=key, value=value', left = left', right = right'} + end + in + map' d + end + fun map f d = mapi (fn (_, x) => f x) d + + fun foldli f init d = let + fun fold (E, v) = v + | fold (T{key,value,left,right,...}, v) = + fold (right, f(key, value, fold(left, v))) + in + fold (d, init) + end + fun foldl f init d = foldli (fn (_, v, accum) => f (v, accum)) init d + + fun foldri f init d = let + fun fold (E,v) = v + | fold (T{key,value,left,right,...},v) = + fold (left, f(key, value, fold(right, v))) + in + fold (d, init) + end + fun foldr f init d = foldri (fn (_, v, accum) => f (v, accum)) init d + +(** To be implemented ** + val filter : ('a -> bool) -> 'a map -> 'a map + val filteri : (Key.ord_key * 'a -> bool) -> 'a map -> 'a map +**) + + end (* local *) + +(* the following are generic implementations of the unionWith, intersectWith, + * and mergeWith operetions. These should be specialized for the internal + * representations at some point. + *) + fun unionWith f (m1, m2) = let + fun ins f (key, x, m) = (case find(m, key) + of NONE => insert(m, key, x) + | (SOME x') => insert(m, key, f(x, x')) + (* end case *)) + in + if (numItems m1 > numItems m2) + then foldli (ins (fn (a, b) => f (b, a))) m1 m2 + else foldli (ins f) m2 m1 + end + fun unionWithi f (m1, m2) = let + fun ins f (key, x, m) = (case find(m, key) + of NONE => insert(m, key, x) + | (SOME x') => insert(m, key, f(key, x, x')) + (* end case *)) + in + if (numItems m1 > numItems m2) + then foldli (ins (fn (k, a, b) => f (k, b, a))) m1 m2 + else foldli (ins f) m2 m1 + end + + fun intersectWith f (m1, m2) = let + (* iterate over the elements of m1, checking for membership in m2 *) + fun intersect f (m1, m2) = let + fun ins (key, x, m) = (case find(m2, key) + of NONE => m + | (SOME x') => insert(m, key, f(x, x')) + (* end case *)) + in + foldli ins empty m1 + end + in + if (numItems m1 > numItems m2) + then intersect f (m1, m2) + else intersect (fn (a, b) => f(b, a)) (m2, m1) + end + fun intersectWithi f (m1, m2) = let + (* iterate over the elements of m1, checking for membership in m2 *) + fun intersect f (m1, m2) = let + fun ins (key, x, m) = (case find(m2, key) + of NONE => m + | (SOME x') => insert(m, key, f(key, x, x')) + (* end case *)) + in + foldli ins empty m1 + end + in + if (numItems m1 > numItems m2) + then intersect f (m1, m2) + else intersect (fn (k, a, b) => f(k, b, a)) (m2, m1) + end + + fun mergeWith f (m1, m2) = let + fun merge ([], [], m) = m + | merge ((k1, x1)::r1, [], m) = mergef (k1, SOME x1, NONE, r1, [], m) + | merge ([], (k2, x2)::r2, m) = mergef (k2, NONE, SOME x2, [], r2, m) + | merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), m) = ( + case Key.compare (k1, k2) + of LESS => mergef (k1, SOME x1, NONE, r1, m2, m) + | EQUAL => mergef (k1, SOME x1, SOME x2, r1, r2, m) + | GREATER => mergef (k2, NONE, SOME x2, m1, r2, m) + (* end case *)) + and mergef (k, x1, x2, r1, r2, m) = (case f (x1, x2) + of NONE => merge (r1, r2, m) + | SOME y => merge (r1, r2, insert(m, k, y)) + (* end case *)) + in + merge (listItemsi m1, listItemsi m2, empty) + end + fun mergeWithi f (m1, m2) = let + fun merge ([], [], m) = m + | merge ((k1, x1)::r1, [], m) = mergef (k1, SOME x1, NONE, r1, [], m) + | merge ([], (k2, x2)::r2, m) = mergef (k2, NONE, SOME x2, [], r2, m) + | merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), m) = ( + case Key.compare (k1, k2) + of LESS => mergef (k1, SOME x1, NONE, r1, m2, m) + | EQUAL => mergef (k1, SOME x1, SOME x2, r1, r2, m) + | GREATER => mergef (k2, NONE, SOME x2, m1, r2, m) + (* end case *)) + and mergef (k, x1, x2, r1, r2, m) = (case f (k, x1, x2) + of NONE => merge (r1, r2, m) + | SOME y => merge (r1, r2, insert(m, k, y)) + (* end case *)) + in + merge (listItemsi m1, listItemsi m2, empty) + end + + (* this is a generic implementation of filter. It should + * be specialized to the data-structure at some point. + *) + fun filter predFn m = let + fun f (key, item, m) = if predFn item + then insert(m, key, item) + else m + in + foldli f empty m + end + fun filteri predFn m = let + fun f (key, item, m) = if predFn(key, item) + then insert(m, key, item) + else m + in + foldli f empty m + end + + (* this is a generic implementation of mapPartial. It should + * be specialized to the data-structure at some point. + *) + fun mapPartial f m = let + fun g (key, item, m) = (case f item + of NONE => m + | (SOME item') => insert(m, key, item') + (* end case *)) + in + foldli g empty m + end + fun mapPartiali f m = let + fun g (key, item, m) = (case f(key, item) + of NONE => m + | (SOME item') => insert(m, key, item') + (* end case *)) + in + foldli g empty m + end + + (* check the elements of a map with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + * Elements are checked in key order. + *) + fun exists pred = let + fun exists' E = false + | exists' (T{value, left, right, ...}) = + exists' left orelse pred value orelse exists' right + in + exists' + end + fun existsi pred = let + fun exists' E = false + | exists' (T{key, value, left, right, ...}) = + exists' left orelse pred(key, value) orelse exists' right + in + exists' + end + + (* check the elements of a map with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. Elements + * are checked in key order. + *) + fun all pred = let + fun all' E = true + | all' (T{value, left, right, ...}) = + all' left andalso pred value andalso all' right + in + all' + end + fun alli pred = let + fun all' E = true + | all' (T{key, value, left, right, ...}) = + all' left andalso pred(key, value) andalso all' right + in + all' + end + + end (* functor BinaryMapFn *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/binary-set-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/binary-set-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/binary-set-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/binary-set-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,474 @@ +(* binary-set-fn.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This code was adapted from Stephen Adams' binary tree implementation + * of applicative integer sets. + * + * Copyright 1992 Stephen Adams. + * + * This software may be used freely provided that: + * 1. This copyright notice is attached to any copy, derived work, + * or work including all or part of this software. + * 2. Any derived work must contain a prominent notice stating that + * it has been altered from the original. + * + * Name(s): Stephen Adams. + * Department, Institution: Electronics & Computer Science, + * University of Southampton + * Address: Electronics & Computer Science + * University of Southampton + * Southampton SO9 5NH + * Great Britian + * E-mail: sra@ecs.soton.ac.uk + * + * Comments: + * + * 1. The implementation is based on Binary search trees of Bounded + * Balance, similar to Nievergelt & Reingold, SIAM J. Computing + * 2(1), March 1973. The main advantage of these trees is that + * they keep the size of the tree in the node, giving a constant + * time size operation. + * + * 2. The bounded balance criterion is simpler than N&R's alpha. + * Simply, one subtree must not have more than `weight' times as + * many elements as the opposite subtree. Rebalancing is + * guaranteed to reinstate the criterion for weight>2.23, but + * the occasional incorrect behaviour for weight=2 is not + * detrimental to performance. + * + * 3. There are two implementations of union. The default, + * hedge_union, is much more complex and usually 20% faster. I + * am not sure that the performance increase warrants the + * complexity (and time it took to write), but I am leaving it + * in for the competition. It is derived from the original + * union by replacing the split_lt(gt) operations with a lazy + * version. The `obvious' version is called old_union. + * + * 4. Most time is spent in T', the rebalancing constructor. If my + * understanding of the output of * in the sml batch + * compiler is correct then the code produced by NJSML 0.75 + * (sparc) for the final case is very disappointing. Most + * invocations fall through to this case and most of these cases + * fall to the else part, i.e. the plain contructor, + * T(v,ln+rn+1,l,r). The poor code allocates a 16 word vector + * and saves lots of registers into it. In the common case it + * then retrieves a few of the registers and allocates the 5 + * word T node. The values that it retrieves were live in + * registers before the massive save. + * + * Modified to functor to support general ordered values + *) + +functor BinarySetFn (K : ORD_KEY) :> ORD_SET where type Key.ord_key = K.ord_key = + struct + + structure Key = K + + type item = K.ord_key + + datatype set + = E + | T of { + elt : item, + cnt : int, + left : set, + right : set + } + + fun numItems E = 0 + | numItems (T{cnt,...}) = cnt + + fun isEmpty E = true + | isEmpty _ = false + + fun minItem E = raise Empty + | minItem (T{elt, left=E, ...}) = elt + | minItem (T{left, ...}) = minItem left + + fun maxItem E = raise Empty + | maxItem (T{elt, right=E, ...}) = elt + | maxItem (T{right, ...}) = maxItem right + + fun mkT(v,n,l,r) = T{elt=v,cnt=n,left=l,right=r} + + (* N(v,l,r) = T(v,1+numItems(l)+numItems(r),l,r) *) + fun N(v,E,E) = mkT(v,1,E,E) + | N(v,E,r as T{cnt=n,...}) = mkT(v,n+1,E,r) + | N(v,l as T{cnt=n,...}, E) = mkT(v,n+1,l,E) + | N(v,l as T{cnt=n,...}, r as T{cnt=m,...}) = mkT(v,n+m+1,l,r) + + fun single_L (a,x,T{elt=b,left=y,right=z,...}) = N(b,N(a,x,y),z) + | single_L _ = raise Match + fun single_R (b,T{elt=a,left=x,right=y,...},z) = N(a,x,N(b,y,z)) + | single_R _ = raise Match + fun double_L (a,w,T{elt=c,left=T{elt=b,left=x,right=y,...},right=z,...}) = + N(b,N(a,w,x),N(c,y,z)) + | double_L _ = raise Match + fun double_R (c,T{elt=a,left=w,right=T{elt=b,left=x,right=y,...},...},z) = + N(b,N(a,w,x),N(c,y,z)) + | double_R _ = raise Match + + (* + ** val weight = 3 + ** fun wt i = weight * i + *) + fun wt (i : int) = i + i + i + + fun T' (v,E,E) = mkT(v,1,E,E) + | T' (v,E,r as T{left=E,right=E,...}) = mkT(v,2,E,r) + | T' (v,l as T{left=E,right=E,...},E) = mkT(v,2,l,E) + + | T' (p as (_,E,T{left=T _,right=E,...})) = double_L p + | T' (p as (_,T{left=E,right=T _,...},E)) = double_R p + + (* these cases almost never happen with small weight*) + | T' (p as (_,E,T{left=T{cnt=ln,...},right=T{cnt=rn,...},...})) = + if lnrn then single_R p else double_R p + + | T' (p as (_,E,T{left=E,...})) = single_L p + | T' (p as (_,T{right=E,...},E)) = single_R p + + | T' (p as (v,l as T{elt=lv,cnt=ln,left=ll,right=lr}, + r as T{elt=rv,cnt=rn,left=rl,right=rr})) = + if rn >= wt ln (*right is too big*) + then + let val rln = numItems rl + val rrn = numItems rr + in + if rln < rrn then single_L p else double_L p + end + else if ln >= wt rn (*left is too big*) + then + let val lln = numItems ll + val lrn = numItems lr + in + if lrn < lln then single_R p else double_R p + end + else mkT(v,ln+rn+1,l,r) + + fun add (E,x) = mkT(x,1,E,E) + | add (set as T{elt=v,left=l,right=r,cnt},x) = + case K.compare(x,v) of + LESS => T'(v,add(l,x),r) + | GREATER => T'(v,l,add(r,x)) + | EQUAL => mkT(x,cnt,l,r) + fun add' (s, x) = add(x, s) + + fun concat3 (E,v,r) = add(r,v) + | concat3 (l,v,E) = add(l,v) + | concat3 (l as T{elt=v1,cnt=n1,left=l1,right=r1}, v, + r as T{elt=v2,cnt=n2,left=l2,right=r2}) = + if wt n1 < n2 then T'(v2,concat3(l,v,l2),r2) + else if wt n2 < n1 then T'(v1,l1,concat3(r1,v,r)) + else N(v,l,r) + + fun split_lt (E,x) = E + | split_lt (T{elt=v,left=l,right=r,...},x) = + case K.compare(v,x) of + GREATER => split_lt(l,x) + | LESS => concat3(l,v,split_lt(r,x)) + | _ => l + + fun split_gt (E,x) = E + | split_gt (T{elt=v,left=l,right=r,...},x) = + case K.compare(v,x) of + LESS => split_gt(r,x) + | GREATER => concat3(split_gt(l,x),v,r) + | _ => r + + fun min (T{elt=v,left=E,...}) = v + | min (T{left=l,...}) = min l + | min _ = raise Match + + fun delmin (T{left=E,right=r,...}) = r + | delmin (T{elt=v,left=l,right=r,...}) = T'(v,delmin l,r) + | delmin _ = raise Match + + fun delete' (E,r) = r + | delete' (l,E) = l + | delete' (l,r) = T'(min r,l,delmin r) + + fun concat (E, s) = s + | concat (s, E) = s + | concat (t1 as T{elt=v1,cnt=n1,left=l1,right=r1}, + t2 as T{elt=v2,cnt=n2,left=l2,right=r2}) = + if wt n1 < n2 then T'(v2,concat(t1,l2),r2) + else if wt n2 < n1 then T'(v1,l1,concat(r1,t2)) + else T'(min t2,t1, delmin t2) + + + local + fun trim (lo,hi,E) = E + | trim (lo,hi,s as T{elt=v,left=l,right=r,...}) = + if K.compare(v,lo) = GREATER + then if K.compare(v,hi) = LESS then s else trim(lo,hi,l) + else trim(lo,hi,r) + + fun uni_bd (s,E,_,_) = s + | uni_bd (E,T{elt=v,left=l,right=r,...},lo,hi) = + concat3(split_gt(l,lo),v,split_lt(r,hi)) + | uni_bd (T{elt=v,left=l1,right=r1,...}, + s2 as T{elt=v2,left=l2,right=r2,...},lo,hi) = + concat3(uni_bd(l1,trim(lo,v,s2),lo,v), + v, + uni_bd(r1,trim(v,hi,s2),v,hi)) + (* inv: lo < v < hi *) + + (* all the other versions of uni and trim are + * specializations of the above two functions with + * lo=-infinity and/or hi=+infinity + *) + + fun trim_lo (_, E) = E + | trim_lo (lo,s as T{elt=v,right=r,...}) = + case K.compare(v,lo) of + GREATER => s + | _ => trim_lo(lo,r) + + fun trim_hi (_, E) = E + | trim_hi (hi,s as T{elt=v,left=l,...}) = + case K.compare(v,hi) of + LESS => s + | _ => trim_hi(hi,l) + + fun uni_hi (s,E,_) = s + | uni_hi (E,T{elt=v,left=l,right=r,...},hi) = + concat3(l,v,split_lt(r,hi)) + | uni_hi (T{elt=v,left=l1,right=r1,...}, + s2 as T{elt=v2,left=l2,right=r2,...},hi) = + concat3(uni_hi(l1,trim_hi(v,s2),v),v,uni_bd(r1,trim(v,hi,s2),v,hi)) + + fun uni_lo (s,E,_) = s + | uni_lo (E,T{elt=v,left=l,right=r,...},lo) = + concat3(split_gt(l,lo),v,r) + | uni_lo (T{elt=v,left=l1,right=r1,...}, + s2 as T{elt=v2,left=l2,right=r2,...},lo) = + concat3(uni_bd(l1,trim(lo,v,s2),lo,v),v,uni_lo(r1,trim_lo(v,s2),v)) + + fun uni (s,E) = s + | uni (E,s) = s + | uni (T{elt=v,left=l1,right=r1,...}, + s2 as T{elt=v2,left=l2,right=r2,...}) = + concat3(uni_hi(l1,trim_hi(v,s2),v), v, uni_lo(r1,trim_lo(v,s2),v)) + + in + val hedge_union = uni + end + + (* The old_union version is about 20% slower than + * hedge_union in most cases + *) + fun old_union (E,s2) = s2 + | old_union (s1,E) = s1 + | old_union (T{elt=v,left=l,right=r,...},s2) = + let val l2 = split_lt(s2,v) + val r2 = split_gt(s2,v) + in + concat3(old_union(l,l2),v,old_union(r,r2)) + end + + val empty = E + fun singleton x = T{elt=x,cnt=1,left=E,right=E} + + fun addList (s,l) = List.foldl (fn (i,s) => add(s,i)) s l + + fun fromList l = addList (E, l) + + val add = add + + fun member (set, x) = let + fun pk E = false + | pk (T{elt=v, left=l, right=r, ...}) = ( + case K.compare(x,v) + of LESS => pk l + | EQUAL => true + | GREATER => pk r + (* end case *)) + in + pk set + end + + local + (* true if every item in t is in t' *) + fun treeIn (t,t') = let + fun isIn E = true + | isIn (T{elt,left=E,right=E,...}) = member(t',elt) + | isIn (T{elt,left,right=E,...}) = + member(t',elt) andalso isIn left + | isIn (T{elt,left=E,right,...}) = + member(t',elt) andalso isIn right + | isIn (T{elt,left,right,...}) = + member(t',elt) andalso isIn left andalso isIn right + in + isIn t + end + in + fun isSubset (E,_) = true + | isSubset (_,E) = false + | isSubset (t as T{cnt=n,...},t' as T{cnt=n',...}) = + (n<=n') andalso treeIn (t,t') + + fun equal (E,E) = true + | equal (t as T{cnt=n,...},t' as T{cnt=n',...}) = + (n=n') andalso treeIn (t,t') + | equal _ = false + end + + local + fun next ((t as T{right, ...})::rest) = (t, left(right, rest)) + | next _ = (E, []) + and left (E, rest) = rest + | left (t as T{left=l, ...}, rest) = left(l, t::rest) + in + fun compare (s1, s2) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => EQUAL + | ((E, _), _) => LESS + | (_, (E, _)) => GREATER + | ((T{elt=e1, ...}, r1), (T{elt=e2, ...}, r2)) => ( + case Key.compare(e1, e2) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + (* end case *)) + in + cmp (left(s1, []), left(s2, [])) + end + + fun disjoint (s1, s2) = let + fun walk (t1, t2) = (case (next t1, next t2) + of ((E, _), _) => true + | (_, (E, _)) => true + | ((T{elt=e1, ...}, r1), (T{elt=e2, ...}, r2)) => ( + case Key.compare(e1, e2) + of LESS => walk (r1, t2) + | EQUAL => false + | GREATER => walk (t1, r2) + (* end case *)) + (* end case *)) + in + walk (left(s1, []), left(s2, [])) + end + end + + fun delete (E,x) = raise LibBase.NotFound + | delete (set as T{elt=v,left=l,right=r,...},x) = + case K.compare(x,v) of + LESS => T'(v,delete(l,x),r) + | GREATER => T'(v,l,delete(r,x)) + | _ => delete'(l,r) + + val union = hedge_union + + fun intersection (E, _) = E + | intersection (_, E) = E + | intersection (s, T{elt=v,left=l,right=r,...}) = let + val l2 = split_lt(s,v) + val r2 = split_gt(s,v) + in + if member(s,v) + then concat3(intersection(l2,l),v,intersection(r2,r)) + else concat(intersection(l2,l),intersection(r2,r)) + end + + fun difference (E,s) = E + | difference (s,E) = s + | difference (s, T{elt=v,left=l,right=r,...}) = + let val l2 = split_lt(s,v) + val r2 = split_gt(s,v) + in + concat(difference(l2,l),difference(r2,r)) + end + + fun subtract (s, item) = difference (s, singleton item) + fun subtract' (item, s) = subtract (s, item) + + fun subtractList (l, items) = let + val items' = List.foldl (fn (x, set) => add(set, x)) E items + in + difference (l, items') + end + + fun map f set = let + fun map'(acc, E) = acc + | map'(acc, T{elt,left,right,...}) = + map' (add (map' (acc, left), f elt), right) + in + map' (E, set) + end + + fun mapPartial f set = let + fun map' (acc, E) = acc + | map' (acc, T{elt, left, right, ...}) = let + val acc = map' (acc, left) + in + case f elt + of NONE => map' (acc, right) + | SOME elt' => map' (add (acc, elt'), right) + (* end case *) + end + in + map' (E, set) + end + + fun app apf = + let fun apply E = () + | apply (T{elt,left,right,...}) = + (apply left;apf elt; apply right) + in + apply + end + + fun foldl f b set = let + fun foldf (E, b) = b + | foldf (T{elt,left,right,...}, b) = + foldf (right, f(elt, foldf (left, b))) + in + foldf (set, b) + end + + fun foldr f b set = let + fun foldf (E, b) = b + | foldf (T{elt,left,right,...}, b) = + foldf (left, f(elt, foldf (right, b))) + in + foldf (set, b) + end + + fun toList set = foldr (op::) [] set + + fun filter pred set = + foldl (fn (item, s) => if (pred item) then add(s, item) else s) + empty set + + fun partition pred set = + foldl + (fn (item, (s1, s2)) => + if (pred item) then (add(s1, item), s2) else (s1, add(s2, item)) + ) + (empty, empty) set + + fun exists p E = false + | exists p (T{elt, left, right,...}) = + (exists p left) orelse (p elt) orelse (exists p right) + + fun all p E = true + | all p (T{elt, left, right,...}) = + (all p left) andalso (p elt) andalso (all p right) + + fun find p E = NONE + | find p (T{elt,left,right,...}) = (case find p left + of NONE => if (p elt) + then SOME elt + else find p right + | a => a + (* end case *)) + + (* deprecated *) + val listItems = toList + + end (* BinarySetFn *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/bit-array-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/bit-array-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/bit-array-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/bit-array-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,116 @@ +(* bit-array-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Signature for mutable bit array. The model here treats bit array as an + * array of bools. + *) + +signature BIT_ARRAY = + sig + + include MONO_ARRAY + + val fromString : string -> array option + (* The string argument gives a hexadecimal + * representation of the bits set in the + * array. Characters 0-9, a-f and A-F are + * allowed. For example, + * fromString "1af8" = 0001101011111000 + * (by convention, 0 corresponds to false and 1 corresponds + * to true, bit 0 appears on the right, + * and indices increase to the left) + * The length of the array will be 4*(size string). + * Returns NONE if a non-hexadecimal character + * appears in the string. + *) + + val bits : (int * int list) -> array + (* Create array of the given length with the indices of its set bits + * given by the list argument. + * Raises Subscript if a list item is < 0 or >= length. + *) + + val getBits : array -> int list + (* Returns list of bits set in bit array, in increasing + * order of indices. + *) + + val toString : array -> string + (* Inverse of stringToBits. + * The bit array is zero-padded to the next + * length that is a multiple of 4. + *) + + val isZero : array -> bool + (* Returns true if and only if no bits are set. *) + + val extend0 : (array * int) -> array + val extend1 : (array * int) -> array + (* Extend bit array by 0's or 1's to given length. + * If bit array is already >= argument length, return a copy + * of the bit array. + * Raises Size if length < 0. + *) + + val eqBits : (array * array) -> bool + (* true if set bits are identical *) + val equal : (array * array) -> bool + (* true if same length and same set bits *) + + val andb : (array * array * int) -> array + val orb : (array * array * int) -> array + val xorb : (array * array * int) -> array + (* Create new array of the given length + * by logically combining bits of original + * array using and, or and xor, respectively. + * If necessary, the array are + * implicitly extended by 0 to be the same length + * as the new array. + *) + + val notb : array -> array + (* Create new array with all bits of original + * array inverted. + *) + + val >> : (array * word) -> array + val << : (array * word) -> array + (* shift operations *) + + val lshift : (array * int) -> array (* DEPRECATED *) + (* lshift(ba,n) creates a new array by + * inserting n 0's on the right of ba. + * The new array has length n + length ba. + *) + + val rshift : (array * int) -> array (* DEPRECATED *) + (* rshift(ba,n) creates a new array of + * of length max(0,length ba - n) consisting + * of bits n,n+1,...,length ba - 1 of ba. + * If n >= length ba, the new array has length 0. + *) + + (* mutable operations for array *) + + val setBit : (array * int) -> unit + val clrBit : (array * int) -> unit + (* Update value at given index to new value. + * Raises Subscript if index < 0 or >= length. + * setBit(ba,i) = update(ba,i,true) + * clrBit(ba,i) = update(ba,i,false) + *) + + val union : array -> array -> unit + val intersection : array -> array -> unit + (* Or (and) second bitarray into the first. Second is + * implicitly truncated or extended by 0's to match + * the length of the first. + *) + + val complement : array -> unit + (* Invert all bits. *) + + end (* BIT_ARRAY *) + where type elem = bool diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/bit-array.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/bit-array.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/bit-array.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/bit-array.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,801 @@ +(* bit-array.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure BitArray :> BIT_ARRAY = + struct + + structure Vector = + struct + local + structure W8A = Word8Array + structure W8V = Word8Vector + val sub = W8A.sub + val << = Word8.<< + val >> = Word8.>> + val ++ = Word8.orb + val & = Word8.andb + infix sub << >> ++ & + + fun badArg(f,msg) = LibBase.failure{module="BitArray",func=f,msg=msg} + + val hexs = Byte.stringToBytes "0123456789abcdef" + val lomask = W8V.fromList [0wx00, 0wx01, 0wx03, 0wx07, + 0wx0f, 0wx1f, 0wx3f, 0wx7f, 0wxff] + val himask = W8V.fromList [0wxff, 0wxfe, 0wxfc, 0wxf8, + 0wxf0, 0wxe0, 0wxc0, 0wx80, 0wx00] + fun hibits i = W8V.sub(himask,i) + fun lobits i = W8V.sub(lomask,i) + fun wmask7 i = Word.andb(Word.fromInt i, 0w7) + val mask7 = Word.toIntX o wmask7 + + (* return the number of bytes needed to represent the given number of bits *) + fun sizeOf n = ((n + 7) div 8) + + (* return the index of byte that holds bit i *) + fun byteOf i = (i div 8) + + (* return the mask for bit i in a byte *) + fun bit i : Word8.word = (0w1 << Word.andb(Word.fromInt i, 0w7)) + + in + + (* A bitvector is stored in a Word8Array.array. + * Bit n is stored in bit (n mod 8) of word (n div 8). + * We maintain the invariant that all bits >= nbits are 0. + *) + type elem = bool + datatype vector = BA of {nbits : int, bits : W8A.array} + + val maxLen = 8*Word8Array.maxLen + handle Overflow => Word8Array.maxLen (* would valOf Int.maxInt be better? *) + + fun array (0, init) = BA{nbits=0,bits=W8A.array(0, 0w0)} + | array (len, false) = BA{nbits=len,bits=W8A.array(sizeOf len, 0w0)} + | array (len, true) = let + val sz = sizeOf len + val bits = W8A.array (sz, 0wxff) + in + case len mod 8 of 0 => () | idx => W8A.update(bits,sz-1,lobits idx); + BA{nbits = len, bits = bits} + end + + val char0 = Byte.charToByte #"0" + val char9 = Byte.charToByte #"9" + val charA = Byte.charToByte #"A" + val charF = Byte.charToByte #"F" + val chara = Byte.charToByte #"a" + val charf = Byte.charToByte #"f" + fun fromString s = let + val len = 4*(size s) (* 4 bits per hex digit *) + val (bv as BA{bits, ...}) = array (len, false) + fun nibble x = let + val d = Byte.charToByte x + in + if (char0 <= d) andalso (d <= char9) + then d - char0 + else if (charA <= d) andalso (d <= charF) + then d - charA + 0w10 + else if (chara <= d) andalso (d <= charf) + then d - chara + 0w10 + else raise Domain + end + fun init ([], _) = SOME bv + | init ([x], i) = (W8A.update(bits, i, nibble x); SOME bv) + | init (x1::x2::r, i) = ( + W8A.update(bits, i, ((nibble x2) << 0w4) ++ (nibble x1)); + init (r, i+1)) + in + init (rev(explode s), 0) + end + handle _ => NONE + + fun toString (BA{nbits=0,...}) = "" + | toString (BA{nbits,bits}) = let + val len = (nbits + 3) div 4 + val buf = W8A.array (len, 0w0) + fun put (i,j) = let + val v = bits sub i + in + W8A.update (buf, j, W8V.sub(hexs, Word8.toInt(v & 0wx0f))); + W8A.update (buf, j-1, W8V.sub(hexs, Word8.toInt(v >> 0w4))); + put (i+1, j-2) + end + in + (put(0,len-1)) handle _ => (); + Byte.bytesToString (W8A.vector buf) + end + + fun bits (len,l) = let + val (bv as BA{bits, ...}) = array (len, false) + fun init i = let + val idx = byteOf i + val b = 0w1 << Word.andb(Word.fromInt i, 0w7) + in + W8A.update (bits, idx, ((bits sub idx) ++ b)) + end + in + List.app init l; + bv + end + + fun fromList [] = array (0, false) + | fromList l = let + val len = length l + val ba as BA{bits,...} = array (len, false) + fun getbyte ([],_,b) = ([],b) + | getbyte (l,0w0,b) = (l,b) + | getbyte (false::r,bit,b) = getbyte(r,bit << 0w1,b) + | getbyte (true::r,bit,b) = getbyte(r,bit << 0w1,b ++ bit) + fun fill ([],_) = () + | fill (l,idx) = let + val (l',byte) = getbyte (l,0w1,0w0) + in + if byte <> 0w0 then W8A.update(bits,idx,byte) else (); + fill (l',idx+1) + end + in + fill (l,0); + ba + end + + fun tabulate (len, genf) = let + val ba as BA{bits,...} = array (len, false) + fun getbyte (cnt,0w0,b) = (cnt,b) + | getbyte (cnt,bit,b) = + if cnt = len then (cnt,b) + else case genf cnt of + false => getbyte(cnt+1,bit << 0w1,b) + | true => getbyte(cnt+1,bit << 0w1,b ++ bit) + fun fill (cnt,idx) = + if cnt = len then () + else let + val (cnt',byte) = getbyte (cnt,0w1,0w0) + in + if byte <> 0w0 then W8A.update(bits,idx,byte) else (); + fill (cnt',idx+1) + end + in + fill (0,0); + ba + end + + fun getBits (BA{nbits = 0, ...}) = [] + | getBits (BA{nbits, bits}) = let + fun extractBits (_, 0w0, l) = l + | extractBits (bit, data, l) = let + val l' = if (data & 0wx80) = 0w0 then l else bit :: l + in + extractBits (bit-1, data<<0w1, l') + end + fun extract (~1, _, l) = l + | extract (i, bitnum, l) = + extract (i-1,bitnum-8,extractBits (bitnum, bits sub i, l)) + val maxbit = nbits-1 + val hiByte = byteOf maxbit + val delta = Word.andb(Word.fromInt maxbit, 0w7) + in + extract (hiByte-1, maxbit - (Word.toIntX delta) - 1, + extractBits(maxbit,(bits sub hiByte) << (0w7-delta),[])) + end + + fun bitOf (BA{nbits, bits}, i) = + if i >= nbits + then raise Subscript + else ((W8A.sub (bits,byteOf i)) & (bit i)) <> 0w0 + + fun isZero (BA{bits,...}) = let + fun isz i = (bits sub i) = 0w0 andalso (isz (i+1)) + in + isz 0 + end handle _ => true + + fun copybits (bits, newbits) = let + fun cpy i = (W8A.update(newbits, i, bits sub i); cpy(i+1)) + in + (cpy 0) handle _ => () + end + + fun mkCopy (BA{nbits, bits}) = let + val ba as BA{bits=newbits,...} = array (nbits, false) + in + copybits(bits, newbits); + ba + end + + fun eqBits arg = let + fun order (arg as (ba as BA{nbits,...},ba' as BA{nbits=nbits',...})) = + if nbits >= nbits' + then arg + else (ba',ba) + val (BA{nbits,bits}, BA{bits=bits',nbits=nbits'}) = order arg + val minlen = W8A.length bits' + fun iszero i = (bits sub i) = 0w0 andalso (iszero (i+1)) + fun cmp i = + if i = minlen + then iszero i + else (bits sub i) = (bits' sub i) andalso cmp(i+1) + in + (cmp 0) handle _ => true + end + fun equal (arg as (BA{nbits,...},BA{nbits=nbits',...})) = + nbits = nbits' andalso eqBits arg + + fun extend0 (ba as BA{nbits, bits}, n) = + if (nbits >= n) + then mkCopy ba + else let + val newbits = W8A.array(sizeOf n, 0w0) + fun cpy i = (W8A.update(newbits, i, bits sub i); cpy(i+1)) + in + (cpy 0) handle _ => (); + BA{nbits=n, bits=newbits} + end + + fun extend1 (ba as BA{nbits, bits}, n) = + if (nbits >= n) + then mkCopy ba + else let + val len = sizeOf n + val newbits = W8A.array(len, 0wxff) + val nbytes = byteOf nbits + val left = mask7 nbits + fun last () = (case mask7 n + of 0 => () + | lft => W8A.update(newbits, len-1, (newbits sub (len-1)) & (lobits lft)) + (* end case *)) + fun adjust j = ( + if left = 0 + then () + else W8A.update(newbits, j, (bits sub j) ++ (hibits left)); + last ()) + fun cpy i = + if i = nbytes + then adjust i + else (W8A.update(newbits, i, bits sub i); cpy(i+1)) + in + cpy 0; + BA{nbits=n, bits=newbits} + end + + fun fit(lb,rb,rbits) = (rb & (lobits rbits)) ++ (lb & (hibits rbits)) + + fun simpleCopy (src,dest,lastbyte,len) arg = let + fun last (s,d) = (case mask7 len + of 0 => W8A.update(dest,d,src sub s) + | lft => W8A.update(dest,d,fit(dest sub d,src sub s,lft)) + (* end case *)) + fun cpy (arg as (s,d)) = + if d = lastbyte + then last arg + else (W8A.update(dest,d,src sub s);cpy(s+1,d+1)) + in + cpy arg + end + + (* rightblt copies bits [shft,shft+len-1] of src to + * bits [0,len-1] in target. + * Assume all parameters and lengths are okay. + *) + fun rightblt (src,dest,shft,len) = let + val byte = byteOf shft and bitshift = wmask7 shft + fun copy lastbyte = let + val lshift = 0w8 - bitshift + fun finish (sb,s,d) = let + val left = mask7 (len - 1) + 1 + in + if Word.fromInt left <= lshift (* enough bits in sb *) + then W8A.update(dest,d,fit(dest sub d,sb >> bitshift,left)) + else let + val sb' = (sb >> bitshift) ++ ((src sub s) << lshift) + in + W8A.update(dest,d,fit(dest sub d,sb',left)) + end + end + fun loop (arg as (sb, s, d)) = + if d = lastbyte then finish arg + else let + val sb' = src sub s + in + W8A.update(dest,d,(sb >> bitshift) ++ ((sb' << lshift) & 0wxFF)); + loop(sb',s+1,d+1) + end + in + loop (src sub byte, byte+1, 0) + end + in + if bitshift = 0w0 then simpleCopy (src,dest,byteOf(len-1),len) (byte,0) + else copy (byteOf (len-1)) + end + + (* leftblt copies bits [0,len-1] of src to + * bits [shft,shft+len-1] in target. + * Assume all parameters and lengths are okay. + *) + fun leftblt (_,_,_,0) = () + | leftblt (src,dest,shft,len) = let + val byte = byteOf shft and bitshift = wmask7 shft + val lastbyte = byteOf (shft+len-1) + fun sliceCopy (s,d,len) = let + val mask = (lobits len) << bitshift + val sb = ((src sub s) << bitshift) & mask + val db = (dest sub d) & (Word8.notb mask) + in + W8A.update(dest,d,sb ++ db) + end + fun copy () = let + val sb = src sub 0 + val rshift = 0w8 - bitshift + fun finish (sb,s,d) = let + val left = mask7(shft + len - 1) + 1 + in + if Word.fromInt left <= bitshift (* enough bits in sb *) + then W8A.update(dest,d,fit(dest sub d,sb >> rshift,left)) + else let + val sb' = (sb >> rshift) ++ ((src sub s) << bitshift) + in + W8A.update(dest,d,fit(dest sub d,sb',left)) + end + end + fun loop (arg as (sb, s, d)) = + if d = lastbyte then finish arg + else let + val sb' = src sub s + in + W8A.update(dest,d,(sb >> rshift) ++ ((sb' << bitshift) & 0wxFF)); + loop(sb',s+1,d+1) + end + in + W8A.update(dest,byte,fit(sb << bitshift, dest sub byte, Word.toIntX bitshift)); + loop (sb, 1, byte+1) + end + in + if bitshift = 0w0 then simpleCopy (src,dest,lastbyte,len) (0,byte) + else if lastbyte = byte then sliceCopy (0,byte,len) + else copy () + end + + fun lshift_w (ba, 0w0) = mkCopy ba + | lshift_w (BA{nbits, bits}, n) = let + val shft = Word.toIntX n + val newlen = nbits + shft + val newbits = W8A.array(sizeOf newlen, 0w0) + in + leftblt(bits,newbits,shft,nbits); + BA{nbits=newlen,bits=newbits} + end + + fun lshift (ba, shft) = if shft < 0 + then badArg("lshift", "negative shift") + else lshift_w(ba, Word.fromInt shft) + + fun op @ (BA{nbits,bits},BA{nbits=nbits',bits=bits'}) = let + val newlen = nbits + nbits' + val newbits = W8A.array(sizeOf newlen, 0w0) + in + copybits(bits',newbits); + leftblt(bits,newbits,nbits',nbits); + BA{nbits=newlen,bits=newbits} + end + + fun concat [] = array (0, false) + | concat [ba] = mkCopy ba + | concat (l as (BA{bits,nbits}::tl)) = let + val newlen = (foldl (fn (BA{nbits,...},a) => a+nbits) 0 l) + handle Overflow => raise Size + val newbits = W8A.array(sizeOf newlen,0w0) + fun cpy (BA{bits,nbits}, shft) = ( + leftblt(bits,newbits,shft,nbits); + shft+nbits + ) + in + copybits(bits,newbits); + foldl cpy nbits tl; + BA{nbits=newlen,bits=newbits} + end + + fun slice (ba as BA{nbits,bits},sbit,0) = array (0, false) + | slice (ba as BA{nbits,bits},sbit,len) = let + val newbits = W8A.array(sizeOf len,0w0) + in + rightblt(bits,newbits,sbit,len); + BA{nbits=len,bits=newbits} + end + + fun extract (ba as BA{nbits,bits},sbit,SOME len) = + if sbit < 0 orelse len < 0 orelse sbit > nbits - len + then raise Subscript + else slice (ba,sbit,len) + | extract (ba as BA{nbits,bits},sbit,NONE) = + if sbit < 0 orelse sbit > nbits + then raise Subscript + else slice (ba,sbit,nbits-sbit) + + fun rshift_w (ba, 0w0) = mkCopy ba + | rshift_w (BA{nbits, bits}, n) = let + val shft = Word.toIntX n + in + if shft >= nbits + then array (0, false) + else let + val newlen = nbits - shft + val newbits = W8A.array(sizeOf newlen,0w0) + in + rightblt (bits, newbits, shft, newlen); + BA{nbits=newlen, bits=newbits} + end + end + + fun rshift (ba, shft) = if shft < 0 + then badArg("rshift", "negative shift") + else rshift_w(ba, Word.fromInt shft) + + fun trim (tgt,len) = + case mask7 len of + 0 => () + | lft => let + val n = (W8A.length tgt) - 1 + in + W8A.update(tgt, n, (tgt sub n) & (lobits lft)) + end + + fun andBlend (BA{nbits,bits},BA{bits=bits',nbits=nbits'},tgt,len) = let + fun copy i = (W8A.update(tgt,i,(bits sub i)&(bits' sub i));copy(i+1)) + in + (copy 0) handle _ => (); + trim (tgt,len) + end + + fun orBlend f (ba,ba',tgt,len) = let + fun order (arg as (ba as BA{nbits,...},ba' as BA{nbits=nbits',...})) = + if nbits >= nbits' + then arg + else (ba',ba) + val (BA{nbits,bits},BA{bits=bits',nbits=nbits'}) = order (ba,ba') + val bnd = W8A.length bits' (* number of bytes in smaller array *) + fun copy2 i = (W8A.update(tgt,i,bits sub i);copy2(i+1)) + fun copy1 i = + if i = bnd + then copy2 bnd + else (W8A.update(tgt,i,f(bits sub i, bits' sub i));copy1(i+1)) + in + (copy1 0) handle _ => (); + trim (tgt,len) + end + + fun newblend blendf (ba,ba',len) = let + val nb as BA{bits,...} = array (len, false) + in + blendf(ba,ba',bits,len); + nb + end + + val orb = newblend (orBlend Word8.orb) + val xorb = newblend (orBlend Word8.xorb) + val andb = newblend andBlend + + fun union ba ba' = let + val BA{bits,nbits} = ba + val BA{bits=bits',nbits=nbits'} = ba' + val nbytes = W8A.length bits + val nbytes' = W8A.length bits' + fun copy bnd = let + fun loop i = + if i = bnd + then () + else (W8A.update(bits,i,(bits sub i) ++ (bits' sub i));loop(i+1)) + in + loop 0 + end + in + if nbytes <= nbytes' + then (copy nbytes; trim (bits,nbits)) + else copy nbytes' + end + + fun intersection ba ba' = let + val BA{bits,nbits} = ba + val BA{bits=bits',nbits=nbits'} = ba' + val nbytes = W8A.length bits + val nbytes' = W8A.length bits' + fun zeroFrom(b,j) = let + fun loop i = (W8A.update(b,i,0w0);loop(i+1)) + in + (loop j) handle _ => () + end + in + if nbytes <= nbytes' + then andBlend(ba,ba',bits,nbytes * 8) + else ( + andBlend(ba,ba',bits,nbytes' * 8); + zeroFrom (bits,nbytes') + ) + end + + fun flip (nbits, src, tgt) = let + val nbytes = byteOf nbits and left = mask7 nbits + fun last j = + W8A.update(tgt,j,(Word8.notb(src sub j)) & (lobits left)) + fun flp i = + if i = nbytes + then if left = 0 then () else last i + else (W8A.update(tgt,i,Word8.notb(src sub i) & 0wxff); flp(i+1)) + in + flp 0 + end + + fun notb (BA{nbits, bits}) = let + val ba as BA{bits=newbits,...} = array (nbits, false) + in + flip (nbits,bits,newbits); + ba + end + + fun setBit (BA{nbits, bits}, i) = let + val j = byteOf i and b = bit i + in + if i >= nbits + then raise Subscript + else W8A.update (bits, j, ((bits sub j) ++ b)) + end + + fun clrBit (BA{nbits, bits}, i) = let + val j = byteOf i and b = Word8.notb(bit i) + in + if i >= nbits + then raise Subscript + else W8A.update (bits, j, ((bits sub j) & b)) + end + + fun complement (BA{bits,nbits}) = flip(nbits, bits, bits) + + fun update (ba,i,true) = setBit (ba,i) + | update (ba,i,_) = clrBit (ba,i) + + fun op sub arg = bitOf arg + + fun length (BA{nbits, ...}) = nbits + + fun app f (BA{nbits=0,bits}) = () + | app f (BA{nbits,bits}) = let + val last = byteOf (nbits-1) + fun loop (0,_) = () + | loop (n,byte) = (f ((byte&0w1) = 0w1); loop (n-1,byte >> 0w1)) + fun f' (i,byte) = + if i < last then loop (8,byte) + else loop (mask7 (nbits - 1) + 1, byte) + in + W8A.appi f' bits + end + + (* FIX: Reimplement using W8A.foldi *) + fun foldl f a (BA{nbits,bits}) = let + fun loop (i,a) = + if i = nbits then a + else let + val b = ((W8A.sub (bits,byteOf i)) & (bit i)) <> 0w0 + in + loop (i+1, f(b,a)) + end + in + loop (0,a) + end + + (* FIX: Reimplement using W8A.foldr *) + fun foldr f a (BA{nbits,bits}) = let + fun loop (~1,a) = a + | loop (i,a) = let + val b = ((W8A.sub (bits,byteOf i)) & (bit i)) <> 0w0 + in + loop (i-1, f(b,a)) + end + in + loop (nbits-1,a) + end + + fun valid (nbits,sbit,NONE) = + if sbit < 0 orelse sbit > nbits + then raise Subscript + else nbits - sbit + | valid (nbits,sbit,SOME len) = + if sbit < 0 orelse len < 0 orelse sbit > nbits - len + then raise Subscript + else len + + (* FIX: Reimplement using W8A.appi *) + fun appi' f (BA{nbits=0,bits},_,_) = () + | appi' f (BA{nbits,bits},sbit,l) = let + val len = valid (nbits, sbit, l) + fun loop (_, 0) = () + | loop (i, n) = let + val b = ((W8A.sub (bits,byteOf i)) & (bit i)) <> 0w0 + in + f(i,b); + loop (i+1,n-1) + end + in + loop (sbit,len) + end + + (* FIX: Reimplement using W8A.foldi *) + fun foldli' f a (BA{nbits,bits},sbit,l) = let + val len = valid (nbits, sbit, l) + val last = sbit+len + fun loop (i,a) = + if i = last then a + else let + val b = ((W8A.sub (bits,byteOf i)) & (bit i)) <> 0w0 + in + loop (i+1, f(i,b,a)) + end + in + loop (sbit,a) + end + + (* FIX: Reimplement using W8A.foldr *) + fun foldri' f a (BA{nbits,bits},sbit,l) = let + val len = valid (nbits, sbit, l) + fun loop (i,a) = + if i < sbit then a + else let + val b = ((W8A.sub (bits,byteOf i)) & (bit i)) <> 0w0 + in + loop (i-1, f(i,b,a)) + end + in + loop (sbit+len-1,a) + end + + (* FIX: Reimplement using general-purpose copy *) + fun copy' {src = src as BA{nbits,bits},si,len,dst,di} = let + val l = valid (nbits, si, len) + val BA{nbits=nbits',bits=bits'} = dst + val _ = if di < 0 orelse nbits' - di < l then raise Subscript + else () + val last = si + l + fun loop (si,di) = + if si = last then () + else ( + if bitOf (src, si) then setBit(dst,di) else clrBit(dst,di); + loop (si+1,di+1) + ) + in + loop (si,di) + end + + fun modify f (BA{nbits=0,bits}) = () + | modify f (BA{nbits,bits}) = let + val last = byteOf (nbits-1) + fun loop (0,_,a,_) = a + | loop (n,byte,a,mask) = + if f ((byte&mask) = mask) + then loop (n-1,byte, a&mask, mask << 0w1) + else loop (n-1,byte, a, mask << 0w1) + fun f' (i,byte) = + if i < last then loop (8,byte,0w0,0w1) + else loop (mask7 (nbits - 1) + 1, byte,0w0,0w1) + in + W8A.modifyi f' bits + end + + (* FIX: Reimplement using W8A.modifyi *) + fun modifyi' f (BA{nbits=0,bits},sbit,l) = () + | modifyi' f (BA{nbits,bits},sbit,l) = let + val len = valid (nbits, sbit, l) + val last = sbit+len + fun loop i = + if i = last then () + else let + val index = byteOf i + val biti = bit i + val byte = W8A.sub (bits,index) + val b = (byte & biti) <> 0w0 + val b' = f(i,b) + in + if b = b' then () + else if b' then W8A.update(bits,index,byte ++ biti) + else W8A.update(bits,index,byte & (Word8.notb biti)); + loop (i+1) + end + in + loop sbit + end + + (* additional operation from Basis Library proposal 2015-003 *) + fun toList (BA{nbits, bits}) = let + fun loop (~1, a) = a + | loop (i, a) = let + val b = ((Word8Array.sub (bits,byteOf i)) & (bit i)) <> 0w0 + in + loop (i-1, b :: a) + end + in + loop (nbits-1, []) + end + + end (* local *) + + val << = lshift_w + val >> = rshift_w + end (* structure Vector *) + + open Vector + type array = vector + + fun vector a = a + + fun copy { src, dst, di } = copy' { src = src, dst = dst, di = di, + si = 0, len = NONE } + + val copyVec = copy + + fun appi f a = appi' f (a, 0, NONE) + fun modifyi f a = modifyi' f (a, 0, NONE) + fun foldli f init a = foldli' f init (a, 0, NONE) + fun foldri f init a = foldri' f init (a, 0, NONE) + + (* These are slow, pedestrian implementations.... *) + fun findi p a = let + val len = length a + fun fnd i = + if i >= len then NONE + else let val x = sub (a, i) + in + if p (i, x) then SOME (i, x) else fnd (i + 1) + end + in + fnd 0 + end + + fun find p a = let + val len = length a + fun fnd i = + if i >= len then NONE + else let val x = sub (a, i) + in + if p x then SOME x else fnd (i + 1) + end + in + fnd 0 + end + + fun exists p a = let + val len = length a + fun ex i = i < len andalso (p (sub (a, i)) orelse ex (i + 1)) + in + ex 0 + end + + fun all p a = let + val len = length a + fun al i = i >= len orelse (p (sub (a, i)) andalso al (i + 1)) + in + al 0 + end + + fun collate c (a1, a2) = let + val l1 = length a1 + val l2 = length a2 + val l12 = Int.min (l1, l2) + fun col i = + if i >= l12 then Int.compare (l1, l2) + else case c (sub (a1, i), sub (a2, i)) of + EQUAL => col (i + 1) + | unequal => unequal + in + col 0 + end + + (* additional operations from Basis Library proposal 2015-003 *) + fun fromVector (Vector.BA{nbits, bits}) = let + val newBits = Unsafe.Word8Array.create(Word8Array.length bits) + in + Word8Array.copy{di = 0, dst = newBits, src = bits}; + BA{nbits = nbits, bits = newBits} + end + + val toVector = fromVector + + end (* structure BitArray *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/bsearch-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/bsearch-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/bsearch-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/bsearch-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,45 @@ +(* bsearch-fn.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Binary searching on sorted monomorphic arrays. + *) + +functor BSearchFn (A : MONO_ARRAY) : sig + + structure A : MONO_ARRAY + + val bsearch : (('a * A.elem) -> order) + -> ('a * A.array) -> (int * A.elem) option + (* binary search on ordered monomorphic arrays. The comparison function + * cmp embeds a projection function from the element type to the key + * type. + *) + + end = struct + + structure A = A + + (* binary search on ordered monomorphic arrays. The comparison function + * cmp embeds a projection function from the element type to the key + * type. + *) + fun bsearch cmp (key, arr) = let + fun look (lo, hi) = + if hi >= lo then let + val m = lo + (hi - lo) div 2 + val x = A.sub(arr, m) + in + case cmp(key, x) + of LESS => look(lo, m-1) + | EQUAL => (SOME(m, x)) + | GREATER => look(m+1, hi) + (* end case *) + end + else NONE + in + look (0, A.length arr - 1) + end + + end; (* BSearch *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/char-map-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/char-map-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/char-map-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/char-map-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,26 @@ +(* char-map-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Fast, read-only, maps from characters to values. + *) + +signature CHAR_MAP = + sig + + type 'a char_map + (* a finite map from characters to 'a *) + + val mkCharMap : {default : 'a, bindings : (string * 'a) list} -> 'a char_map + (* make a character map which maps the bound characters to their + * bindings and maps everything else to the default value. + *) + + val mapChr : 'a char_map -> char -> 'a + (* map the given character *) + val mapStrChr : 'a char_map -> (string * int) -> 'a + (* (mapStrChr c (s, i)) is equivalent to (mapChr c (String.sub(s, i))) *) + + end (* CHAR_MAP *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/char-map.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/char-map.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/char-map.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/char-map.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ +(* char-map.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Fast, read-only, maps from characters to values. + *) + +structure CharMap :> CHAR_MAP = + struct + + (* we can use unchecked array operations, since the indices are always + * in range. + *) + val sub = Unsafe.Array.sub + val update = Unsafe.Array.update + + (* a finite map from characters to 'a *) + type 'a char_map = 'a Array.array + + (* make a character map which maps the bound characters to their + * bindings and maps everything else to the default value. + *) + fun mkCharMap {default, bindings} = let + (* this array maps characters to indices in the valMap *) + val arr = Array.array (Char.maxOrd, default) + fun doBinding (s, v) = + CharVector.app (fn c => update(arr, Char.ord c, v)) s + in + List.map doBinding bindings; + arr + end + + (* map the given character ordinal *) + fun mapChr cm i = sub(cm, Char.ord i) + + (* (mapStrChr c (s, i)) is equivalent to (mapChr c (String.sub(s, i))) *) + fun mapStrChr cm (s, i) = sub(cm, Char.ord(String.sub(s, i))) + + end (* CharMap *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/dynamic-array-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/dynamic-array-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/dynamic-array-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/dynamic-array-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,106 @@ +(* dynamic-array-fn.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Monomorphic arrays of unbounded length + * + * TODO: add the missing operations that the DynamicArray structure + * provides. Adding these will require uncluding the MONO_ARRAY_SLICE + * structure as a functor parameter. + *) + +functor DynamicArrayFn (A : MONO_ARRAY) : MONO_DYNAMIC_ARRAY = + struct + + type elem = A.elem + + (* BLOCK(arr, dflt, bnd): + * arr - current data store; is at least !bnd+1 elements + * dflt - default value + * bnd - values at !bnd and above are default for reading + *) + datatype array = BLOCK of A.array ref * elem * int ref + + exception Subscript = General.Subscript + exception Size = General.Size + + fun array (sz, dflt) = BLOCK(ref (A.array (sz, dflt)), dflt, ref (~1)) + + (* fromList (l, v) creates an array using the list of values l + * plus the default value v. + *) + fun fromList (initList, dflt) = let + val arr = A.fromList initList + in + BLOCK(ref arr, dflt, ref(A.length arr - 1)) + end + + fun toList (BLOCK(ref arr, _, bnd)) = let + val len = !bnd + 1 + in + List.tabulate (len, fn i => A.sub(arr, i)) + end + + (* tabulate (sz,fill,dflt) acts like Array.tabulate, plus + * stores default value dflt. Raises Size if sz < 0. + *) + fun tabulate (sz, fillFn, dflt) = + BLOCK(ref(A.tabulate(sz, fillFn)), dflt, ref(sz-1)) + + fun subArray (BLOCK(arr, dflt, bnd), lo, hi) = let + val arrval = !arr + val bnd = !bnd + fun copy i = A.sub(arrval, i+lo) + in + if hi <= bnd + then BLOCK(ref(A.tabulate(hi-lo, copy)), dflt, ref(hi-lo)) + else if lo <= bnd + then BLOCK(ref(A.tabulate(bnd-lo, copy)), dflt, ref(bnd-lo)) + else + array(0,dflt) + end + + fun default (BLOCK(_, dflt, _)) = dflt + + fun sub (BLOCK(arr, dflt, _), idx) = (A.sub(!arr, idx)) + handle Subscript => if idx < 0 then raise Subscript else dflt + + fun bound (BLOCK(_, _, bnd)) = (!bnd) + + fun expand (arr,oldlen,newlen,dflt) = let + fun fillfn i = if i < oldlen then A.sub(arr,i) else dflt + in + A.tabulate(newlen, fillfn) + end + + fun update (BLOCK(arr, dflt, bnd), idx, v) = let + val len = A.length (!arr) + in + if idx >= len + then arr := expand(!arr, len, Int.max(len+len, idx+1), dflt) + else (); + A.update(!arr,idx,v); + if idx > !bnd then bnd := idx else () + end + + fun truncate (a as BLOCK(arr, dflt, bndref), sz) = let + val bnd = !bndref + val newbnd = sz - 1 + val arr_val = !arr + val array_sz = A.length arr_val + fun fillDflt (i,stop) = + if i = stop then () + else (A.update(arr_val,i,dflt);fillDflt(i-1,stop)) + in + if newbnd < 0 then (bndref := ~1;arr := A.array(0,dflt)) + else if newbnd >= bnd then () + else if 3 * sz < array_sz then let + val BLOCK(arr',_,bnd') = subArray(a,0,newbnd) + in + (bndref := !bnd'; arr := !arr') + end + else fillDflt(bnd,newbnd) + end + + end (* DynamicArrayFn *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/dynamic-array-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/dynamic-array-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/dynamic-array-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/dynamic-array-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,95 @@ +(* dynamic-array-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Signature for unbounded polymorphic arrays. + *) + +signature DYNAMIC_ARRAY = + sig + type 'a array + + val array : (int * 'a) -> 'a array + (* array (sz, e) creates an unbounded array all of whose elements + * are initialized to e. sz (>= 0) is used as a + * hint of the potential range of indices. Raises Size if a + * negative hint is given. + *) + + val subArray : ('a array * int * int) -> 'a array + (* `subArray (a,lo,hi)` creates a new array with the same default + * as `a`, and whose values in the range [0,hi-lo] are equal to + * the values in `a` in the range [lo, hi]. + * Raises Size if lo > hi + *) + + val fromList : 'a list * 'a -> 'a array + (* fromList (l, v) creates an array using the list of values l + * plus the default value v. + *) + + val fromVector : 'a Vector.vector * 'a -> 'a array + (* fromVector (vec, dflt) creates an array using the vector of values vec + * plus the default value dflt. + *) + + val toList : 'a array -> 'a list + (* return the array's contents as a list *) + + val toVector : 'a array -> 'a vector + (* return the array's contents as a vector *) + + val tabulate: (int * (int -> 'a) * 'a) -> 'a array + (* tabulate (sz,fill,dflt) acts like Array.tabulate, plus + * stores default value dflt. Raises Size if sz < 0. + *) + + val default : 'a array -> 'a + (* default returns array's default value *) + + val sub : ('a array * int) -> 'a + (* sub (a,idx) returns value of the array at index idx. + * If that value has not been set by update, it returns the default value. + * Raises Subscript if idx < 0 + *) + + val update : ('a array * int * 'a) -> unit + (* update (a,idx,v) sets the value at index idx of the array to v. + * Raises Subscript if idx < 0 + *) + + val bound : 'a array -> int + (* bound returns an upper bound on the index of values that have been + * changed; i.e., values at indices above the bound are the default. + *) + + val truncate : ('a array * int) -> unit + (* truncate (a,sz) makes every entry with index > sz the default value *) + + (* standard array iterators *) + val appi : (int * 'a -> unit) -> 'a array -> unit + val app : ('a -> unit) -> 'a array -> unit + val modifyi : (int * 'a -> 'a) -> 'a array -> unit + val modify : ('a -> 'a) -> 'a array -> unit + val foldli : (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b + val foldri : (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b + val foldl : ('a * 'b -> 'b) -> 'b -> 'a array -> 'b + val foldr : ('a * 'b -> 'b) -> 'b -> 'a array -> 'b + val findi : (int * 'a -> bool) -> 'a array -> (int * 'a) option + val find : ('a -> bool) -> 'a array -> 'a option + val exists : ('a -> bool) -> 'a array -> bool + val all : ('a -> bool) -> 'a array -> bool + val collate : ('a * 'a -> order) -> 'a array * 'a array -> order + +(* TODO + val copy : {di:int, dst:'a array, src:'a array} -> unit + val copyVec : {di:int, dst:'a array, src:'a vector} -> unit +*) + + val vector : 'a array -> 'a vector + (* return the array's contents as a vector. + * Note: this function is DEPRECATED in favor of toVector. + *) + + end (* DYNAMIC_ARRAY *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/dynamic-array.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/dynamic-array.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/dynamic-array.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/dynamic-array.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,140 @@ +(* dynamic-array.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Polymorhic arrays of unbounded length + *) + +structure DynamicArray :> DYNAMIC_ARRAY = + struct + + structure A = Array + + (* BLOCK(arr, dflt, bnd): + * arr - current data store; is at least !bnd+1 elements + * dflt - default value + * bnd - values at indices above !bnd are default for reading + *) + datatype 'a array = BLOCK of ('a A.array ref * 'a * int ref) + + exception Subscript = General.Subscript + exception Size = General.Size + + fun array (sz, dflt) = BLOCK(ref(A.array(sz, dflt)), dflt, ref(~1)) + + (* fromList (l, v) creates an array using the list of values l + * plus the default value v. + *) + fun fromList (initList, dflt) = let + val arr = A.fromList initList + in + BLOCK(ref arr, dflt, ref(A.length arr - 1)) + end + + fun toList (BLOCK(ref arr, _, bnd)) = let + val len = !bnd + 1 + in + List.tabulate (len, fn i => Array.sub(arr, i)) + end + + fun fromVector (vec, dflt) = let + val arr = A.tabulate (Vector.length vec, fn i => Vector.sub(vec, i)) + in + BLOCK(ref arr, dflt, ref(Vector.length vec - 1)) + end + + fun toVector (BLOCK(ref arr, _, bnd)) = let + val len = !bnd + 1 + in + ArraySlice.vector (ArraySlice.slice(arr, 0, SOME len)) + end + + (* tabulate (sz,fill,dflt) acts like Array.tabulate, plus + * stores default value dflt. Raises Size if sz < 0. + *) + fun tabulate (sz, fillFn, dflt) = + BLOCK(ref(A.tabulate(sz, fillFn)), dflt, ref(sz-1)) + + fun subArray (BLOCK(arr, dflt, bnd), lo, hi) = let + val arrval = !arr + val bnd = !bnd + fun copy i = A.sub(arrval, i+lo) + in + if hi <= bnd + then BLOCK(ref(A.tabulate(hi-lo, copy)), dflt, ref(hi-lo)) + else if lo <= bnd + then BLOCK(ref(A.tabulate(bnd-lo, copy)), dflt, ref(bnd-lo)) + else + array(0, dflt) + end + + fun default (BLOCK(_, dflt, _)) = dflt + + fun sub (BLOCK(arr, dflt, _), idx) = (A.sub(!arr, idx)) + handle Subscript => if idx < 0 then raise Subscript else dflt + + fun bound (BLOCK(_, _, bnd)) = (!bnd) + + fun expand(arr, oldlen, newlen, dflt) = let + fun fillfn i = if i < oldlen then A.sub(arr,i) else dflt + in + A.tabulate(newlen, fillfn) + end + + fun update (BLOCK(arr, dflt, bnd), idx, v) = let + val len = A.length (!arr) + in + if idx >= len + then arr := expand(!arr, len, Int.max(len+len,idx+1), dflt) + else (); + A.update(!arr,idx,v); + if idx > !bnd then bnd := idx else () + end + + fun truncate (a as BLOCK(arr, dflt, bndref), sz) = let + val bnd = !bndref + val newbnd = sz - 1 + val arr_val = !arr + val array_sz = A.length arr_val + fun fillDflt (i,stop) = + if i = stop then () + else (A.update(arr_val,i,dflt); fillDflt(i-1, stop)) + in + if newbnd < 0 then (bndref := ~1;arr := A.array(0, dflt)) + else if newbnd >= bnd then () + else if 3 * sz < array_sz then let + val BLOCK(arr',_,bnd') = subArray(a, 0, newbnd) + in + (bndref := !bnd'; arr := !arr') + end + else fillDflt(bnd, newbnd) + end + + (* get the array slice that covers the defined portion of the array *) + fun slice (BLOCK(arr, _, bnd)) = + ArraySlice.slice(!arr, 0, SOME(!bnd + 1)) + + (* we implement the iterators by using the array slice operations *) + fun vector arr = ArraySlice.vector (slice arr) + fun appi f arr = ArraySlice.appi f (slice arr) + fun app f arr = ArraySlice.app f (slice arr) + fun modifyi f arr = ArraySlice.modifyi f (slice arr) + fun modify f arr = ArraySlice.modify f (slice arr) + fun foldli f init arr = ArraySlice.foldli f init (slice arr) + fun foldri f init arr = ArraySlice.foldri f init (slice arr) + fun foldl f init arr = ArraySlice.foldl f init (slice arr) + fun foldr f init arr = ArraySlice.foldr f init (slice arr) + fun findi pred arr = ArraySlice.findi pred (slice arr) + fun find pred arr = ArraySlice.find pred (slice arr) + fun exists pred arr = ArraySlice.exists pred (slice arr) + fun all pred arr = ArraySlice.all pred (slice arr) + fun collate cmp (arr1, arr2) = ArraySlice.collate cmp (slice arr1, slice arr2) + +(* TODO + val copy : {di:int, dst:'a array, src:'a array} -> unit + val copyVec : {di:int, dst:'a array, src:'a vector} -> unit +*) + + end (* DynamicArrayFn *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/engine.mlton.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/engine.mlton.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/engine.mlton.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/engine.mlton.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,99 @@ +(* Copyright (C) 1999-2004 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under the GNU General Public License (GPL). + * Please see the file MLton-LICENSE for license information. + *) + +signature ENGINE = + sig + type 'a t + + datatype 'a res = + Done of 'a + | Raise of exn + | TimeOut of 'a t + + val new: (unit -> 'a) -> 'a t + val repeat: {thunk: unit -> 'a, + limit: Time.time, + tries: int} -> 'a option + val run: 'a t * Time.time -> 'a res + val timeLimit: Time.time * (unit -> 'a) -> 'a option + end + +structure Engine: ENGINE = +struct + +open MLton + +datatype 'a t = T of {return: 'a res Thread.t option ref, + thread: Thread.Runnable.t} +and 'a res = + Done of 'a + | Raise of exn + | TimeOut of 'a t + +val which = Itimer.Real +val signal = Itimer.signal which + +fun done (return): unit = + (return := NONE + ; Itimer.set (which, {value = Time.zeroTime, + interval = Time.zeroTime}) + ; Signal.setHandler (signal, Signal.Handler.default)) + +fun new (f: unit -> 'a): 'a t = + let + val return = ref NONE + val thread = + Thread.new + (fn () => + let + val res = Done (f ()) handle e => Raise e + val ret = valOf (!return) + val _ = done return + in + Thread.switch (fn _ => Thread.prepare (ret, res)) + end) + val thread = Thread.prepare (thread, ()) + in + T {return = return, thread = thread} + end + +fun run (T {return, thread}, time: Time.time): 'a res = + Thread.switch + (fn cur: 'a res Thread.t => + let + val _ = return := SOME cur + fun handler (me: Thread.Runnable.t): Thread.Runnable.t = + Thread.prepare + (Thread.prepend (cur, fn () => (done return + ; TimeOut (T {return = return, + thread = me}))), + ()) + val _ = Signal.setHandler (signal, Signal.Handler.handler handler) + val _ = Itimer.set (which, {value = time, + interval = Time.zeroTime}) + in + thread + end) + +fun timeLimit (t: Time.time, f: unit -> 'a): 'a option = + case run (new f, t) of + Done a => SOME a + | Raise e => raise e + | TimeOut _ => NONE + +fun repeat {thunk, limit, tries} = + let + fun loop (n: int) = + if n <= 0 + then NONE + else (case timeLimit (limit, thunk) of + NONE => loop (n - 1) + | SOME a => SOME a) + in loop tries + end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/fifo-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/fifo-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/fifo-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/fifo-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,30 @@ +(* fifo-sig.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * Applicative fifos + * + *) + +signature FIFO = + sig + type 'a fifo + + exception Dequeue + + val empty : 'a fifo + val isEmpty : 'a fifo -> bool + val enqueue : 'a fifo * 'a -> 'a fifo + val dequeue : 'a fifo -> 'a fifo * 'a + val next : 'a fifo -> ('a * 'a fifo) option + val delete : ('a fifo * ('a -> bool)) -> 'a fifo + val head : 'a fifo -> 'a + val peek : 'a fifo -> 'a option + val length : 'a fifo -> int + val contents : 'a fifo -> 'a list + val app : ('a -> unit) -> 'a fifo -> unit + val map : ('a -> 'b) -> 'a fifo -> 'b fifo + val foldl : ('a * 'b -> 'b) -> 'b -> 'a fifo -> 'b + val foldr : ('a * 'b -> 'b) -> 'b -> 'a fifo -> 'b + + end (* FIFO *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/fifo.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/fifo.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/fifo.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/fifo.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,61 @@ +(* fifo.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * Applicative fifos + * + *) + +structure Fifo : FIFO = + struct + datatype 'a fifo = Q of {front: 'a list, rear: 'a list} + + exception Dequeue + + val empty = Q{front=[],rear=[]} + + fun isEmpty (Q{front=[],rear=[]}) = true + | isEmpty _ = false + + fun enqueue (Q{front,rear},x) = Q{front=front,rear=(x::rear)} + + fun dequeue (Q{front=(hd::tl),rear}) = (Q{front=tl,rear=rear},hd) + | dequeue (Q{rear=[],...}) = raise Dequeue + | dequeue (Q{rear,...}) = dequeue(Q{front=rev rear,rear=[]}) + + fun next (Q{front=(hd::tl),rear}) = SOME(hd, Q{front=tl,rear=rear}) + | next (Q{rear=[],...}) = NONE + | next (Q{rear,...}) = next(Q{front=rev rear,rear=[]}) + + fun delete (Q{front, rear}, pred) = let + fun doFront [] = {front = doRear(rev rear), rear = []} + | doFront (x::r) = if (pred x) + then {front = r, rear = rear} + else let val {front, rear} = doFront r + in {front = x :: front, rear = rear} end + and doRear [] = [] + | doRear (x::r) = if (pred x) then r else x :: (doRear r) + in + Q(doFront front) + end + + fun peek (Q{front=(hd::_), ...}) = SOME hd + | peek (Q{rear=[], ...}) = NONE + | peek (Q{rear, ...}) = SOME(hd(rev rear)) + + fun head (Q{front=(hd::_),...}) = hd + | head (Q{rear=[],...}) = raise Dequeue + | head (Q{rear,...}) = hd(rev rear) + + fun length (Q {rear,front}) = (List.length rear) + (List.length front) + + fun contents (Q {rear, front}) = (front @ (rev rear)) + + fun app f (Q{front,rear}) = (List.app f front; List.app f (List.rev rear)) + fun map f (Q{front,rear}) = + Q{front = List.map f front, rear = rev(List.map f(rev rear))} + fun foldl f b (Q{front,rear}) = List.foldr f (List.foldl f b front) rear + fun foldr f b (Q{front,rear}) = List.foldr f (List.foldl f b rear) front + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/fmt-fields.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/fmt-fields.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/fmt-fields.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/fmt-fields.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,243 @@ +(* fmt-fields.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This module defines types and routines that are common to both + * the Format and Scan structures. + *) + +structure FmtFields : sig + + (* precompiled format specifiers *) + datatype sign + = DfltSign (* default: put a sign on negative numbers *) + | AlwaysSign (* "+" always has sign (+ or -) *) + | BlankSign (* " " put a blank in the sign field for positive numbers *) + + datatype neg_sign + = MinusSign (* default: use "-" for negative numbers *) + | TildeSign (* "~" use "~" for negative numbers *) + + type field_flags = { + sign : sign, + neg_char : neg_sign, + zero_pad : bool, + base : bool, + large : bool + } + + datatype field_wid = NoPad | Wid of int + + datatype real_format + = F_Format (* "%f" *) + | E_Format of bool (* "%e" or "%E" *) + | G_Format of bool (* "%g" or "%G" *) + + datatype field_type + = OctalField + | IntField + | HexField + | CapHexField + | CharField + | BoolField + | StrField of int option + | RealField of {prec : int, format : real_format} + + datatype fmt_spec + = Raw of substring + | CharSet of char -> bool + | Field of (field_flags * field_wid * field_type) + + datatype fmt_item + = ATOM of Atom.atom + | LINT of LargeInt.int + | INT of Int.int + | LWORD of LargeWord.word + | WORD of Word.word + | WORD8 of Word8.word + | BOOL of bool + | CHR of char + | STR of string + | REAL of Real.real + | LREAL of LargeReal.real + | LEFT of (int * fmt_item) (* left justify in field of given width *) + | RIGHT of (int * fmt_item) (* right justify in field of given width *) + + exception BadFormat (* bad format string *) + + val scanFieldSpec : substring -> (fmt_spec * substring) + val scanField : substring -> (fmt_spec * substring) + + end = struct + + structure SS = Substring + structure SC = StringCvt + + (* precompiled format specifiers *) + datatype sign + = DfltSign (* default: put a sign on negative numbers *) + | AlwaysSign (* "+" always has sign (+ or -) *) + | BlankSign (* " " put a blank in the sign field for positive numbers *) + + datatype neg_sign + = MinusSign (* default: use "-" for negative numbers *) + | TildeSign (* "~" use "~" for negative numbers *) + + type field_flags = { + sign : sign, + neg_char : neg_sign, + zero_pad : bool, + base : bool, + large : bool + } + + datatype field_wid = NoPad | Wid of int + + datatype real_format + = F_Format (* "%f" *) + | E_Format of bool (* "%e" or "%E" *) + | G_Format of bool (* "%g" or "%G" *) + + datatype field_type + = OctalField + | IntField + | HexField + | CapHexField + | CharField + | BoolField + | StrField of int option + | RealField of {prec : int, format : real_format} + + datatype fmt_spec + = Raw of substring + | CharSet of char -> bool + | Field of (field_flags * field_wid * field_type) + + datatype fmt_item + = ATOM of Atom.atom + | LINT of LargeInt.int + | INT of Int.int + | LWORD of LargeWord.word + | WORD of Word.word + | WORD8 of Word8.word + | BOOL of bool + | CHR of char + | STR of string + | REAL of Real.real + | LREAL of LargeReal.real + | LEFT of (int * fmt_item) (* left justify in field of given width *) + | RIGHT of (int * fmt_item) (* right justify in field of given width *) + + exception BadFormat (* bad format string *) + + (* string to int conversions *) + val decToInt : (char, substring) SC.reader -> (Int.int, substring) SC.reader + = Int.scan SC.DEC + + (* scan a field specification. Assume that the previous character in the + * base string was "%" and that the first character in the substring fmtStr + * is not "%". + *) + fun scanFieldSpec fmtStr = let + val (fmtStr, flags) = let + fun doFlags (ss, flags : field_flags) = ( + case (SS.getc ss, flags) + of (SOME(#" ", _), {sign=AlwaysSign, ...}) => + raise BadFormat + | (SOME(#" ", ss'), _) => + doFlags (ss', { + sign = BlankSign, neg_char = #neg_char flags, + zero_pad = #zero_pad flags, base = #base flags, + large = #large flags + }) + | (SOME(#"+", _), {sign=BlankSign, ...}) => + raise BadFormat + | (SOME(#"+", ss'), _) => + doFlags (ss', { + sign = AlwaysSign, neg_char = #neg_char flags, + zero_pad = #zero_pad flags, base = #base flags, + large = #large flags + }) + | (SOME(#"~", ss'), _) => + doFlags (ss', { + sign = #sign flags, neg_char = TildeSign, + zero_pad = #zero_pad flags, base = #base flags, + large = #large flags + }) + | (SOME(#"-", _), {neg_char = TildeSign, ...}) => + raise BadFormat + | (SOME(#"-", ss'), _) => + doFlags (ss', { + sign = #sign flags, neg_char = MinusSign, + zero_pad = #zero_pad flags, base = #base flags, + large = #large flags + }) + | (SOME(#"#", ss'), _) => + doFlags (ss', { + sign = #sign flags, neg_char = #neg_char flags, + zero_pad = #zero_pad flags, base = true, + large = #large flags + }) + | (SOME(#"0", ss'), _) => + doFlags (ss', { + sign = #sign flags, neg_char = #neg_char flags, + zero_pad = true, base = #base flags, + large = #large flags + }) + | _ => (ss, flags) + (* end case *)) + in + doFlags (fmtStr, { + sign = DfltSign, neg_char = MinusSign, + zero_pad = false, base = false, large = false + }) + end + val (wid, fmtStr) = if (Char.isDigit(valOf(SS.first fmtStr))) + then let + val (n, fmtStr) = valOf (decToInt SS.getc fmtStr) + in (Wid n, fmtStr) end + else (NoPad, fmtStr) + val (ty, fmtStr) = (case SS.getc fmtStr + of (SOME(#"d", ss)) => (IntField, ss) + | (SOME(#"X", ss)) => (CapHexField, ss) + | (SOME(#"x", ss)) => (HexField, ss) + | (SOME(#"o", ss)) => (OctalField, ss) + | (SOME(#"c", ss)) => (CharField, ss) + | (SOME(#"s", ss)) => (StrField NONE, ss) + | (SOME(#"b", ss)) => (BoolField, ss) + | (SOME(#".", ss)) => let +(* NOTE: "." ought to be allowed for d,X,x,o and s formats as it is in ANSI C *) + val (n, ss) = (case decToInt SS.getc ss + of SOME(n, ss') => (n, ss') + | NONE => (0, ss) + (* end case *)) + fun real (format, ss) = (RealField{prec = n, format = format}, ss) + in + case SS.getc ss + of (SOME(#"E" , ss))=> real(E_Format true, ss) + | (SOME(#"e" , ss))=> real(E_Format false, ss) + | (SOME(#"f" , ss))=> real(F_Format, ss) + | (SOME(#"G" , ss))=> real(G_Format true, ss) + | (SOME(#"g", ss)) => real(G_Format false, ss) + | (SOME(#"s", ss)) => (StrField(SOME n), ss) + | _ => raise BadFormat + (* end case *) + end + | (SOME(#"E", ss)) => (RealField{prec=6, format=E_Format true}, ss) + | (SOME(#"e", ss)) => (RealField{prec=6, format=E_Format false}, ss) + | (SOME(#"f", ss)) => (RealField{prec=6, format=F_Format}, ss) + | (SOME(#"G", ss)) => (RealField{prec=6, format=G_Format true}, ss) + | (SOME(#"g", ss)) => (RealField{prec=6, format=G_Format false}, ss) + | _ => raise BadFormat + (* end case *)) + in + (Field(flags, wid, ty), fmtStr) + end (* scanFieldSpec *) + + fun scanField fmtStr = (case SS.getc fmtStr + of (SOME(#"%", fmtStr')) => (Raw(SS.slice(fmtStr, 0, SOME 1)), fmtStr') + | _ => scanFieldSpec fmtStr + (* end case *)) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/fnv-hash.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/fnv-hash.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/fnv-hash.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/fnv-hash.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,37 @@ +(* fnv-hash.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * The interface to an implementation of the Fowler–Noll–Vo (FNV) hashing + * algorithm. We use the 64-bit FNV-1a algorithm. + * + * See https://en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function for details. + *) + +structure FNVHash : sig + + val offsetBasis : Word64.word + + val hashByte : Word8.word * Word64.word -> Word64.word + val hashChar : char * Word64.word -> Word64.word + + val hashString : string -> word + val hashSubstring : substring -> word + + end = struct + + (* values from https://en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function *) + val offsetBasis : Word64.word = 0wxcbf29ce484222325 + val prime : Word64.word = 0wx00000100000001B3 + + fun hashOne (b, h) = Word64.xorb(b, h) * prime + + fun hashByte (b, h) = hashOne (Word64.fromLargeWord(Word8.toLargeWord b), h) + + fun hashChar (c, h) = hashOne (Word64.fromInt(Char.ord c), h) + + fun hashString s = Word.fromLarge (CharVector.foldl hashChar offsetBasis s) + fun hashSubstring ss = Word.fromLarge (Substring.foldl hashChar offsetBasis ss) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/format-comb-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/format-comb-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/format-comb-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/format-comb-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,179 @@ +(* format-comb-sig.sml + * + * COPYRIGHT (c) 2007 The Fellowship of SML/NJ + * + * Well-typed "printf" for SML, aka "Unparsing Combinators". + * This code was written by Matthias Blume (2002). Inspiration + * obtained from Olivier Danvy's "Functional Unparsing" work. + * + * Description: + * + * The idea is to use combinators for constructing something akin to + * the format string of C's printf function. The difference is, however, + * that our formats aren't strings. Instead, format( fragment)s have + * meaningful types, and passing them to function "format" results + * in a curried function whose arguments have precisely the types that + * correspond to argument-consuming parts of the format. (Such + * argument-consuming parts are similar to the %-specifications of printf.) + * + * Here is how the typing works: There is an underlying notion of + * "abstract formats" of type 'a format. However, the user operates + * at the level of "format fragments" which have type ('a, 'b) + * fragment and are typically polymorphic in 'a (where 'b is + * instantiated to some type containing 'a). Fragments are + * functions from formats to formats and can be composed freely using + * the function composition operator 'o'. This form of format + * composition translates to a corresponding concatenation of the + * resulting output. + * + * Fragments are composed from two kids of primitve fragments called + * "elements" and "glue", respectively. An "element" is a fragment that + * consumes some argument (which thanks to the typing magic appears as a + * curried argument when the format gets executed). As "glue" we refer + * to fragments that do not consume arguments but merely insert fixed + * text (fixed at format construction time) into the output. + * + * There are also adjustment operations that pad, trim, or fit the output + * of entire fragments (primitive or not) to a given size. + * + * A number of elements and some glue has been predefined. Here are + * examples on how to use this facility: + * + * open FormatComb + * + * format nothing ==> "" + * + * format int ==> fn: int -> string + * format int 1234 ==> "1234" + * + * format (text "The square of " o int o text " is " o int o text ".") + * ==> fn: int -> int -> string + * format (text "The square of " o int o text " is " o int o text ".") 2 4 + * ==> "The square of 2 is 4." + * + * format (int o bool o char) ==> fn : int -> bool -> char -> string + * format (int o bool o char) 1 true #"x" + * ==> "1truex" + * + * format (glue string "glue vs. " o string o glue int 42 o sp 5 o int) + * "ordinary text " 17 + * ==> "glue vs. ordinary text 42 17" + * + * Fragments can be padded, trimmed, or fitted to generate text pieces of + * specified sizes. Padding/trimming/fitting may be nested. + * The operations are parameterized by a place (left, center, right) and + * a width. Padding never shrinks strings, trimming never extends + * strings, and fitting is done as necessary by either padding or trimming. + * Examples: + * + * format (pad left 6 int) 1234 ==> " 1234" + * format (pad center 6 int) 1234 ==> " 1234 " + * format (pad right 6 int) 1234 ==> "1234 " + * format (trim left 2 int) 1234 ==> "34" + * format (trim center 2 int) 1234 ==> "23" + * format (trim right 2 int) 1234 ==> "12" + * format (fit left 3 int) 12 ==> " 12" + * format (fit left 3 int) 123 ==> "123" + * format (fit left 3 int) 1234 ==> "234" + * + * Nesting: + * + * format (pad right 20 (int o pad left 10 real) o text "x") 12 22.3 + * ==> "12 22.3 x" + *) + +signature FORMAT_COMB = + sig + + (* We reveal "fragments" to be functions from abstract formats + * to abstract formats. This is to make sure we can use function + * composition on them. + *) + type 'a format + type ('a, 'b) fragment = 'a format -> 'b format + + (* Two primitive kinds of fragments: Glue inserts some text + * into the output without consuming an argument. Elements + * insert text corresponding to some (curried) argument into + * the output: + *) + type 'a glue = ('a, 'a) fragment + type ('a, 't) element = ('a, 't -> 'a) fragment + type 'a gg (* abstract helper type *) + + (* Format execution... *) + (* 1. Simple version, produce final result as a string: *) + val format : (string, 'a) fragment -> 'a + + (* 2. Complex version, take a receiver function that will + * be invoked with the final result. The result is + * still in non-concatenated form at this time. + * (Internally, the combinators avoid string concatenation + * as long as there is no padding/trimming/fitting going on.) + *) + val format' : (string list -> 'b) -> ('b, 'a) fragment -> 'a + + (* Make a type-specific element given a toString function for this type *) + val using : ('t -> string) -> ('a, 't) element + + (* Instantiate 'using' for a few types... *) + val int : ('a, int) element (* using Int.toString *) + val real : ('a, real) element (* using Real.toString *) + val bool : ('a, bool) element (* using Bool.toString *) + val string : ('a, string) element (* using (fn x => x) *) + val string' : ('a, string) element (* using String.toString *) + val char : ('a, char) element (* using String.str *) + val char' : ('a, char) element (* using Char.toString *) + + (* Parameterized elements... *) + val int' : StringCvt.radix -> ('a, int) element (* using (Int.fmt r) *) + val real' : StringCvt.realfmt -> ('a, real) element (* using(Real.fmt f) *) + + (* "polymorphic" elements *) + val list : ('a, 'x) element -> ('a, 'x list) element (* "[", ", ", "]" *) + val option : ('a, 'x) element -> ('a, 'x option) element + val seq : (('x * 'a gg -> 'a gg) -> 'a gg -> 's -> 'a gg) -> (* foldr *) + 'a glue -> (* separator *) + ('a, 'x) element -> ('a, 's) element + + (* Generic "gluifier". *) + val glue : ('a, 't) element -> 't -> 'a glue + + (* Inverse -- useful for writing extensions *) + val elem : ('t -> 'a glue) -> ('a, 't) element + + (* Other glue... *) + val nothing : 'a glue (* null glue *) + val text : string -> 'a glue (* constant text glue *) + val sp : int -> 'a glue (* n spaces glue *) + val nl : 'a glue (* newline glue *) + val tab : 'a glue (* tabulator glue *) + + (* glue generator constructors *) + val listg : ('t -> 'a glue) -> ('t list -> 'a glue) + val optiong : ('t -> 'a glue) -> ('t option -> 'a glue) + + val seqg : (('x * 'a gg -> 'a gg) -> 'a gg -> 's -> 'a gg) -> (* foldr *) + 'a glue -> (* separator *) + ('x -> 'a glue) -> (* glue maker *) + 's -> 'a glue (* glue maker for container *) + + + (* "Places" say which side of a string to pad or trim... *) + type place + val left : place + val center : place + val right : place + + (* Pad, trim, or fit to size n the output corresponding to + * a format fragment: + *) + val pad : place -> int -> ('a, 't) fragment -> ('a, 't) fragment + val trim : place -> int -> ('a, 't) fragment -> ('a, 't) fragment + val fit : place -> int -> ('a, 't) fragment -> ('a, 't) fragment + + (* specialized padding (left and right) *) + val padl : int -> ('a, 't) fragment -> ('a, 't) fragment + val padr : int -> ('a, 't) fragment -> ('a, 't) fragment + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/format-comb.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/format-comb.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/format-comb.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/format-comb.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,94 @@ +(* format-comb.sml + * + * COPYRIGHT (c) 2002 Bell Labs, Lucent Technologies + * + * Well-typed "printf" for SML, aka "Unparsing Combinators". + * This code was written by Matthias Blume (2002). Inspiration + * obtained from Olivier Danvy's "Functional Unparsing" work. + * + * See format-comb-sig.sml for details. + *) +structure FormatComb :> FORMAT_COMB = + struct + + type 'a format = string list -> 'a + type ('a, 'b) fragment = 'a format -> 'b format + type 'a glue = ('a, 'a) fragment + type ('a, 't) element = ('a, 't -> 'a) fragment + type 'a gg = 'a glue * 'a glue + + type place = int * int -> int + fun left (a, i) = a - i + fun center (a, i) = Int.quot (a - i, 2) + fun right (a, i) = 0 + + local + (* Generic padding, trimming, and fitting. Nestability + * is achieved by remembering the current state s, passing + * a new empty one to the fragment, adjusting the output + * from that, and fitting the result back into the remembered + * state. ("States" are string lists and correspond to + * output coming from fragments to the left of the current point.) *) + fun ptf adj pl n fr fm s = let + fun work s' = let + val x' = concat (rev s') + val sz = size x' + in + adj (x', sz, n, pl (sz, n)) :: s + end + in + (fr (fm o work)) [] + end + + val padRight = StringCvt.padRight #" " + val padLeft = StringCvt.padLeft #" " + fun pad0 (s, sz, n, off) = padRight n (padLeft (sz - off) s) + fun trim0 (s, _, n, off) = String.substring (s, off, n) + fun pad1 (arg as (s, sz, n, _)) = if n < sz then s else pad0 arg + fun trim1 (arg as (s, sz, n, _)) = if n > sz then s else trim0 arg + fun fit1 (arg as (_, sz, n, _)) = (if n < sz then trim0 else pad0) arg + in + fun format' rcv fr = fr (rcv o rev) [] + fun format fr = format' concat fr + + fun using cvt fm x a = fm (cvt a :: x) + + fun int fm = using Int.toString fm + fun real fm = using Real.toString fm + fun bool fm = using Bool.toString fm + fun string fm = using (fn x => x) fm + fun string' fm = using String.toString fm + fun char fm = using String.str fm + fun char' fm = using Char.toString fm + + fun int' rdx fm = using (Int.fmt rdx) fm + fun real' rfmt fm = using (Real.fmt rfmt) fm + + fun pad place = ptf pad1 place + fun trim place = ptf trim1 place + fun fit place = ptf fit1 place + end + + fun padl n = pad left n + fun padr n = pad right n + + fun glue e a fm x = e fm x a + fun elem gm fm x a = gm a fm x + + fun nothing fm = fm + fun text s = glue string s + fun sp n = pad left n nothing + fun nl fm = text "\n" fm + fun tab fm = text "\t" fm + + fun seqg (foldr : ('x * 'a gg -> 'a gg) -> 'a gg -> 'c -> 'a gg) sep g s = + #2 (foldr (fn (x, (f, r)) => (sep, g x o f o r)) (nothing, nothing) s) + fun listg g l = text "[" o seqg List.foldr (text ", ") g l o text "]" + fun optiong g NONE = text "NONE" + | optiong g (SOME a) = text "SOME(" o g a o text ")" + + fun seq foldr sep e = elem (seqg foldr sep (glue e)) + fun list e = elem (listg (glue e)) + fun option e = elem (optiong (glue e)) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/format-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/format-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/format-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/format-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,37 @@ +(* format-sig.sml + * + * COPYRIGHT (c) 1992 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * Formatted conversion to and from strings. + * + * AUTHOR: John Reppy + * AT&T Bell Laboratories + * Murray Hill, NJ 07974 + * jhr@research.att.com + *) + +signature FORMAT = + sig + + datatype fmt_item + = ATOM of Atom.atom + | LINT of LargeInt.int + | INT of Int.int + | LWORD of LargeWord.word + | WORD of Word.word + | WORD8 of Word8.word + | BOOL of bool + | CHR of char + | STR of string + | REAL of Real.real + | LREAL of LargeReal.real + | LEFT of (int * fmt_item) (* left justify in field of given width *) + | RIGHT of (int * fmt_item) (* right justify in field of given width *) + + exception BadFormat (* bad format string *) + exception BadFmtList (* raised on specifier/item type mismatch *) + + val format : string -> fmt_item list -> string + val formatf : string -> (string -> unit) -> fmt_item list -> unit + + end (* FORMAT *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/format.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/format.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/format.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/format.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,308 @@ +(* format.sml + * + * COPYRIGHT (c) 1992 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * AUTHOR: John Reppy + * AT&T Bell Laboratories + * Murray Hill, NJ 07974 + * jhr@research.att.com + * + * TODO + * - field widths in scan + * - add PREC of (int * fmt_item) constructor to allow dynamic control of + * precision. + * - precision in %d, %s, ... + * - * flag in scan (checks, but doesn't scan input) + * - %n specifier in scan + *) + +structure Format : FORMAT = + struct + + structure SS = Substring + structure SC = StringCvt + + open FmtFields + + exception BadFmtList + + fun padLeft (str, pad) = SC.padLeft #" " pad str + fun padRight (str, pad) = SC.padRight #" " pad str + fun zeroLPad (str, pad) = SC.padLeft #"0" pad str + fun zeroRPad (str, pad) = SC.padRight #"0" pad str + + (* int to string conversions (for positive integers only) *) + local + val (maxInt8, maxInt10, maxInt16) = (case LargeInt.maxInt + of (SOME n) => let + val maxP1 = LargeWord.fromLargeInt n + 0w1 + in + ( LargeWord.fmt SC.OCT maxP1, + LargeWord.fmt SC.DEC maxP1, + LargeWord.fmt SC.HEX maxP1 + ) + end + | NONE => ("", "", "") + (* end case *)) + in + (* MaxInt is used to represent the absolute value of the largest negative + * representable integer. + *) + datatype posint = PosInt of LargeInt.int | MaxInt + fun intToOctal MaxInt = maxInt8 + | intToOctal (PosInt i) = LargeInt.fmt SC.OCT i + fun intToStr MaxInt = maxInt10 + | intToStr (PosInt i) = LargeInt.toString i + fun intToHex MaxInt = maxInt16 + | intToHex (PosInt i) = LargeInt.fmt SC.HEX i + fun intToHeX i = String.map Char.toUpper (intToHex i) + end (* local *) + + (* word to string conversions *) + val wordToOctal = LargeWord.fmt SC.OCT + val wordToStr = LargeWord.fmt SC.DEC + val wordToHex = LargeWord.fmt SC.HEX + fun wordToHeX i = String.map Char.toUpper (wordToHex i) + + fun compileFormat str = let + val split = SS.splitl (fn #"%" => false | _ => true) + fun scan (ss, l) = + if (SS.isEmpty ss) + then rev l + else let val (ss1, ss2) = split ss + in + case (SS.getc ss2) + of (SOME(#"%", ss')) => let val (field, ss3) = scanField ss' + in + scan(ss3, field::(Raw ss1)::l) + end + | _ => rev((Raw ss1)::l) + (* end case *) + end + in + scan (SS.full str, []) + end + + fun format s = let + val fmts = compileFormat s + fun doField (flags : field_flags, wid, ty, arg) = let + fun padFn s = (case wid + of NoPad => s + | Wid i => padLeft(s, i) + (* end case *)) + fun zeroPadFn (sign, s) = (case wid + of NoPad => raise BadFormat + | (Wid i) => zeroLPad(s, i - (String.size sign)) + (* end case *)) + fun trimFn (NONE, s) = padFn s + | trimFn (SOME maxWid, s) = let + val s = if (size s > maxWid) + then String.substring(s, 0, maxWid) + else s + in + padFn s + end + fun negate i = ((PosInt(~i)) handle _ => MaxInt) + fun doSign i = (case (i < 0, #sign flags, #neg_char flags) + of (false, AlwaysSign, _) => ("+", PosInt i) + | (false, BlankSign, _) => (" ", PosInt i) + | (false, _, _) => ("", PosInt i) + | (true, _, TildeSign) => ("~", negate i) + | (true, _, _) => ("-", negate i) + (* end case *)) + fun doRealSign sign = (case (sign, #sign flags, #neg_char flags) + of (false, AlwaysSign, _) => "+" + | (false, BlankSign, _) => " " + | (false, _, _) => "" + | (true, _, TildeSign) => "~" + | (true, _, _) => "-" + (* end case *)) + fun doExpSign (exp, isCap) = let + val e = if isCap then "E" else "e" + fun mkExp e = zeroLPad(Int.toString e, 2) + in + case (exp < 0, #neg_char flags) + of (false, _) => [e, mkExp exp] + | (true, TildeSign) => [e, "~", mkExp(~exp)] + | (true, _) => [e, "-", mkExp(~exp)] + (* end case *) + end + fun octal i = let + val (sign, i) = doSign i + val sign = if (#base flags) then sign^"0" else sign + val s = intToOctal i + in + if (#zero_pad flags) + then sign ^ zeroPadFn(sign, s) + else padFn (sign ^ s) + end + fun decimal i = let + val (sign, i) = doSign i + val s = intToStr i + in + if (#zero_pad flags) + then sign ^ zeroPadFn(sign, s) + else padFn (sign ^ s) + end + fun hexidecimal i = let + val (sign, i) = doSign i + val sign = if (#base flags) then sign^"0x" else sign + val s = intToHex i + in + if (#zero_pad flags) + then sign ^ zeroPadFn(sign, s) + else padFn (sign ^ s) + end + fun capHexidecimal i = let + val (sign, i) = doSign i + val sign = if (#base flags) then sign^"0X" else sign + val s = intToHeX i + in + if (#zero_pad flags) + then sign ^ zeroPadFn(sign, s) + else padFn (sign ^ s) + end + (* word formatting *) + fun doWordSign () = (case (#sign flags) + of AlwaysSign => "+" + | BlankSign => " " + | _ => "" + (* end case *)) + fun octalW i = let + val sign = doWordSign () + val sign = if (#base flags) then sign^"0" else sign + val s = wordToOctal i + in + if (#zero_pad flags) + then sign ^ zeroPadFn(sign, s) + else padFn (sign ^ s) + end + fun decimalW i = let + val sign = doWordSign () + val s = wordToStr i + in + if (#zero_pad flags) + then sign ^ zeroPadFn(sign, s) + else padFn (sign ^ s) + end + fun hexidecimalW i = let + val sign = doWordSign () + val sign = if (#base flags) then sign^"0x" else sign + val s = wordToHex i + in + if (#zero_pad flags) + then sign ^ zeroPadFn(sign, s) + else padFn (sign ^ s) + end + fun capHexidecimalW i = let + val sign = doWordSign () + val sign = if (#base flags) then sign^"0X" else sign + val s = wordToHeX i + in + if (#zero_pad flags) + then sign ^ zeroPadFn(sign, s) + else padFn (sign ^ s) + end + in + case (ty, arg) + of (OctalField, LINT i) => octal i + | (OctalField, INT i) => octal(Int.toLarge i) + | (OctalField, WORD w) => octalW (Word.toLargeWord w) + | (OctalField, LWORD w) => octalW w + | (OctalField, WORD8 w) => octalW (Word8.toLargeWord w) + | (IntField, LINT i) => decimal i + | (IntField, INT i) => decimal(Int.toLarge i) + | (IntField, WORD w) => decimalW (Word.toLargeWord w) + | (IntField, LWORD w) => decimalW w + | (IntField, WORD8 w) => decimalW (Word8.toLargeWord w) + | (HexField, LINT i) => hexidecimal i + | (HexField, INT i) => hexidecimal(Int.toLarge i) + | (HexField, WORD w) => hexidecimalW (Word.toLargeWord w) + | (HexField, LWORD w) => hexidecimalW w + | (HexField, WORD8 w) => hexidecimalW (Word8.toLargeWord w) + | (CapHexField, LINT i) => capHexidecimal i + | (CapHexField, INT i) => capHexidecimal(Int.toLarge i) + | (CapHexField, WORD w) => capHexidecimalW (Word.toLargeWord w) + | (CapHexField, LWORD w) => capHexidecimalW w + | (CapHexField, WORD8 w) => capHexidecimalW (Word8.toLargeWord w) + | (CharField, CHR c) => padFn(String.str c) + | (BoolField, BOOL false) => padFn "false" + | (BoolField, BOOL true) => padFn "true" + | (StrField prec, ATOM s) => trimFn(prec, Atom.toString s) + | (StrField prec, STR s) => trimFn(prec, s) + | (RealField{prec, format}, REAL r) => + if (Real.isFinite r) + then (case format + of F_Format => let + val {sign, mantissa} = + RealFormat.realFFormat(r, prec) + val sign = doRealSign sign + in + if ((prec = 0) andalso (#base flags)) + then padFn(concat[sign, mantissa, "."]) + else padFn(sign ^ mantissa) + end + | E_Format isCap => let + val {sign, mantissa, exp} = + RealFormat.realEFormat(r, prec) + val sign = doRealSign sign + val expStr = doExpSign(exp, isCap) + in + if ((prec = 0) andalso (#base flags)) + then padFn(concat(sign :: mantissa :: "." + :: expStr)) + else padFn(concat(sign :: mantissa :: expStr)) + end + | G_Format isCap => let + val prec = if (prec = 0) then 1 else prec + val {sign, whole, frac, exp} = + RealFormat.realGFormat(r, prec) + val sign = doRealSign sign + val expStr = (case exp + of SOME e => doExpSign(e, isCap) + | NONE => [] + (* end csae *)) + val num = if (#base flags) + then let + val diff = + prec - ((size whole) + (size frac)) + in + if (diff > 0) + then zeroRPad(frac, (size frac)+diff) + else frac + end + else if (frac = "") + then "" + else ("." ^ frac) + in + padFn(concat(sign::whole::num::expStr)) + end + (* end case *)) + else if Real.==(Real.negInf, r) + then doRealSign true ^ "inf" + else if Real.==(Real.posInf, r) + then doRealSign false ^ "inf" + else "nan" + | (_, LEFT(w, arg)) => + StringCvt.padLeft #" " w (doField (flags, wid, ty, arg)) + | (_, RIGHT(w, arg)) => + StringCvt.padRight #" " w (doField (flags, Wid w, ty, arg)) + | _ => raise BadFmtList + (* end case *) + end + fun doArgs ([], [], l) = SS.concat(rev l) + | doArgs ((Raw s)::rf, args, l) = doArgs(rf, args, s::l) + | doArgs (Field(flags, wid, ty)::rf, arg::ra, l) = + doArgs (rf, ra, SS.full (doField (flags, wid, ty, arg)) :: l) + | doArgs _ = raise BadFmtList + in + fn args => doArgs (fmts, args, []) + end (* format *) + + fun formatf fmt = let + val f = format fmt + in + fn consumer => fn args => consumer(f args) + end + + end (* Format *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/getopt-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/getopt-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/getopt-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/getopt-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,83 @@ +(* getopt-sig.sml + * + * COPYRIGHT (c) 2016 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A SML port of GNU's getopt library. + * + * This port is derived from Sven Panne's + * + * implementation of the getopt library in Haskell + * + * The following comments are lifted from Sven's code: + * + * Two rather obscure features are missing: The Bash 2.0 non-option hack (if + * you don't already know it, you probably don't want to hear about it...) + * and the recognition of long options with a single dash (e.g. '-help' is + * recognised as '--help', as long as there is no short option 'h'). + * + * Other differences between GNU's getopt and this implementation: + * * To enforce a coherent description of options and arguments, there are + * explanation fields in the option/argument descriptor. + * * Error messages are now more informative, but no longer POSIX + * compliant... :-( + * + * A difference with Sven's port: errors now invoke an error callback, rather + * than returning error strings while continuing processing options. + * The full generality of the latter does not seem justified. + *) + + +signature GET_OPT = + sig + + datatype 'a arg_order + = RequireOrder + | Permute + | ReturnInOrder of string -> 'a + (* What to do with options following non-options: + * RequireOrder: no option processing after first non-option + * Permute: freely intersperse options and non-options + * ReturnInOrder: wrap non-options into options + *) + + datatype 'a arg_descr + = NoArg of unit -> 'a + | ReqArg of (string -> 'a) * string + | OptArg of (string option -> 'a) * string + (* Description of an argument option: + * NoArg: no argument required + * ReqArg: option requires an argument; the string is the argument name + * OptArg: optional argument; the string is the argument name + *) + + type 'a opt_descr = { + short : string, + long : string list, + desc : 'a arg_descr, + help : string + } + (* Description of a single option *) + + val usageInfo : { + header : string, + options : 'a opt_descr list + } -> string + (* takes a header string and a list of option descriptions and + * returns a string explaining the usage information. A newline will + * be added following the header, so it should not be newline terminated. + *) + + val getOpt : { + argOrder : 'a arg_order, + options : 'a opt_descr list, + errFn : string -> unit + } -> string list -> ('a list * string list) + (* takes as argument an arg_order to specify the non-options + * handling, a list of option descriptions, an error callback, + * and a command line containing the options and arguments, + * and returns a list of (options, non-options) + *) + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/getopt.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/getopt.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/getopt.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/getopt.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,212 @@ +(* getopt.sml + * + * COPYRIGHT (c) 2016 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure GetOpt :> GET_OPT = + struct + + datatype 'a arg_order + = RequireOrder + | Permute + | ReturnInOrder of string -> 'a + + datatype 'a arg_descr + = NoArg of unit -> 'a + | ReqArg of (string -> 'a) * string + | OptArg of (string option -> 'a) * string + + type 'a opt_descr = { + short : string, + long : string list, + desc : 'a arg_descr, + help : string + } + + datatype 'a opt_kind + = Opt of 'a + | NonOpt + + structure SS = Substring + structure S = String + + + (* helper functions *) + fun sepBy (sep, []) = "" + | sepBy (sep, x::xs) = + concat (x::foldr (fn (elem,l) => sep::elem::l) [] xs) + + val breakAtEq = SS.splitl (fn #"=" => false | _ => true) + + (* formatting of options *) + + fun fmtShort (NoArg _) so = concat ["-", str so] + | fmtShort (ReqArg (_,ad)) so = concat ["-", str so," ",ad] + | fmtShort (OptArg (_,ad)) so = concat ["-", str so,"[",ad,"]"] + + fun fmtLong (NoArg _) lo = concat ["--",lo] + | fmtLong (ReqArg (_,ad)) lo = concat ["--",lo,"=",ad] + | fmtLong (OptArg (_,ad)) lo = concat ["--",lo,"[=",ad,"]"] + + fun fmtOpt {short=sos, long=los, desc=ad, help=descr} = ( + String.concatWith ", " (map (fmtShort ad) (S.explode sos)), + String.concatWith ", " (map (fmtLong ad) los), + descr) + + (* Usage information *) + fun usageInfo {header, options} = let + fun unlines l = sepBy ("\n", l) + val fmtOptions = List.map fmtOpt options + val (ms1, ms2) = foldl + (fn ((e1,e2,_), (m1,m2)) => ( + Int.max (size e1, m1), + Int.max (size e2, m2) + )) (0,0) fmtOptions + val indent = StringCvt.padLeft #" " (ms1 + ms2 + 6) + val pad = StringCvt.padRight #" " + fun doEntry ((e1, e2, e3), l) = ( + case String.fields (fn #"\n" => true | _ => false) e3 + of [] => concat[" ", pad ms1 e1, " ", pad ms2 e2] :: l + | [e3] => concat[" ", pad ms1 e1, " ", pad ms2 e2, " ", e3] :: l + | fst::rest => + concat[" ", pad ms1 e1, " ", pad ms2 e2, " ", fst] + :: List.foldr (fn (s, l) => (indent "" ^ s) :: l) l rest + (* end case *)) + val table = List.foldr doEntry [""] fmtOptions + in + String.concatWith "\n" (header::table) + end + + (* entry point of the library + *) + + fun getOpt {argOrder, options : 'a opt_descr list, errFn} = let + (* Some error handling functions *) + fun errAmbig optStr = errFn(usageInfo{ + header = concat[ + "option `", optStr, "' is ambiguous; could be one of:" + ], + options = options + }) + fun errReq (d, optStr) = errFn(concat[ + "option `", optStr, "' requires an argument ", d + ]) + fun errUnrec optStr = errFn(concat[ + "unrecognized option `", optStr, "'" + ]) + fun errNoArg optStr = errFn(concat[ + "option `", optStr, "' does not allow an argument" + ]) + (* handle long option; `subs` is the command-line flag (minus the "--" prefix) + * and `rest` are the rest of the command-line arguments. + *) + fun longOpt (subs, rest) = let + val (opt, arg) = breakAtEq subs + val opt' = SS.string opt + val optStr = "--"^opt' + (* handle the selected options *) + fun handleLong argDesc = (case (argDesc, rest) + of (NoArg act, _) => if (SS.isEmpty arg) + then (Opt(act()), rest) + else if (SS.isPrefix "=" arg) + then (errNoArg optStr; (NonOpt, rest)) + else raise Fail "longOpt: impossible" + | (ReqArg(act, argName), []) => if (SS.isEmpty arg) + then (errReq(argName, optStr); (NonOpt, [])) + else if (SS.isPrefix "=" arg) + then (Opt(act (SS.string (SS.triml 1 arg))), []) + else raise Fail "longOpt: impossible" + | (ReqArg(act, _), r::rs) => if (SS.isEmpty arg) + then (Opt(act r), rs) + else if (SS.isPrefix "=" arg) + then (Opt(act (SS.string (SS.triml 1 arg))), rest) + else raise Fail "longOpt: impossible" + | (OptArg(act, _), _) => if (SS.isEmpty arg) + then (Opt(act NONE), rest) + else if (SS.isPrefix "=" arg) + then (Opt(act (SOME (SS.string (SS.triml 1 arg)))), rest) + else raise Fail "longOpt: impossible" + (* end case *)) + (* search the long options for a match; we allow a unique prefix of an + * option, but an exact match will take precedence. E.g., if the long options + * are "--foo", "--foobar", and "--foobaz", then "--foo" will match the first, + * but "--foob" will be flagged as ambiguous. + *) + fun findOption ([], [], NONE) = (errUnrec optStr; (NonOpt, rest)) + | findOption ([], _, SOME argDesc) = handleLong argDesc + | findOption ([], [argDesc], NONE) = handleLong argDesc + | findOption ([], _::_::_, NONE) = (errAmbig optStr; (NonOpt, rest)) + | findOption ((descr : 'a opt_descr)::descrs, prefixMatches, exactMatch) = ( + case List.filter (S.isPrefix opt') (#long descr) + of [] => findOption (descrs, prefixMatches, exactMatch) + | flgs => if List.exists (fn flg => (flg = opt')) flgs + then if Option.isSome exactMatch + then (errAmbig optStr; (NonOpt, rest)) + else findOption (descrs, prefixMatches, SOME(#desc descr)) + else findOption (descrs, #desc descr :: prefixMatches, exactMatch) + (* end case *)) + in + findOption (options, [], NONE) + end + (* handle short option. x is the option character, subs is the + * rest of the option string, rest is the rest of the command-line + * options. + *) + fun shortOpt (x, subs, rest) = let + val options = + List.filter (fn {short,...} => Char.contains short x) options + val ads = map #desc options + val optStr = "-"^(str x) + in + case (ads, rest) + of (_::_::_, rest1) => (errAmbig optStr; (NonOpt, rest1)) + | ((NoArg a)::_, rest') => + if (SS.isEmpty subs) + then (Opt(a()), rest') + else (Opt(a()), ("-"^(SS.string subs))::rest') + | ((ReqArg(f,d))::_, []) => + if (SS.isEmpty subs) + then (errReq(d, optStr); (NonOpt, [])) + else (Opt(f (SS.string subs)), []) + | ((ReqArg(f,_))::_, rest' as (r::rs)) => + if (SS.isEmpty subs) + then (Opt(f r), rs) + else (Opt(f (SS.string subs)), rest') + | ((OptArg(f,_))::_, rest') => + if (SS.isEmpty subs) + then (Opt(f NONE), rest') + else (Opt(f (SOME(SS.string subs))), rest') + | ([], rest') => (errUnrec optStr; (NonOpt, rest')) + (* end case *) + end + fun get ([], opts, nonOpts) = (List.rev opts, List.rev nonOpts) + | get ("--"::rest, opts, nonOpts) = let + val nonOpts = List.revAppend(nonOpts, "--" :: rest) + in + case argOrder + of ReturnInOrder f => (List.revAppend(opts, List.map f nonOpts), []) + | _ => (List.rev opts, nonOpts) + (* end case *) + end + | get (arg::rest, opts, nonOpts) = let + val arg' = SS.full arg + fun addOpt (Opt opt, rest) = get(rest, opt::opts, nonOpts) + | addOpt (NonOpt, rest) = get(rest, opts, arg::nonOpts) + in + if (SS.isPrefix "--" arg') + then addOpt(longOpt (SS.triml 2 arg', rest)) + else if (SS.isPrefix "-" arg') + then addOpt(shortOpt (SS.sub(arg', 1), SS.triml 2 arg', rest)) + else (case argOrder + of RequireOrder => (List.rev opts, List.revAppend(nonOpts, arg::rest)) + | Permute => get(rest, opts, arg::nonOpts) + | ReturnInOrder f => get(rest, f arg :: opts, nonOpts) + (* end case *)) + end + in + fn args => get(args, [], []) + end (* getOpt *) + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/graph-scc-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/graph-scc-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/graph-scc-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/graph-scc-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,138 @@ +(* graph-scc-fn.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Calculate strongly-connected components of directed graph. + * The graph can have nodes with self-loops. + * + * author: Matthias Blume + *) + +functor GraphSCCFn (Nd: ORD_KEY) :> GRAPH_SCC where type Nd.ord_key = Nd.ord_key = + struct + structure Nd = Nd + + type node = Nd.ord_key + + structure Map = RedBlackMapFn (Nd) + + datatype component + = SIMPLE of node + | RECURSIVE of node list + + fun eq x y = (Nd.compare(x, y) = EQUAL) + + fun topOrder' { roots, follow } = let + + fun getNode (n, nm as (npre, m)) = ( + case Map.find (m, n) + of NONE => let + val r = { pre = npre, low = ref npre } + val m' = Map.insert (m, n, r) + in + ((npre + 1, m'), r) + end + | SOME r => (nm, r) + (* end case *)) + + fun component (x, []) = + if List.exists (eq x) (follow x) then RECURSIVE [x] + else SIMPLE x + | component (x, xl) = RECURSIVE (x :: xl) + + (* depth-first search in continuation-passing, state-passing style *) + fun dfs args = let + + (* the nodemap represents the mapping from nodes to + * pre-order numbers and low-numbers. The latter are ref-cells. + * nodemap also remembers the next available pre-order number. + * The current node itself is not given as an argument. + * Instead, it is represented by grab_cont -- a function + * that "grabs" a component from the current stack and then + * continues with the regular continuation. We do it this + * way to be able to handle the topmost virtual component -- + * the one whose sole element is the virtual root node. *) + val { follow_nodes, grab_cont, + node_pre, node_low, parent_low, nodemap, + stack, sccl, nograb_cont } = args + + (* loop over the follow-set of a node *) + fun loop (tn :: tnl) (nodemap as (npre, theMap), stack, sccl) = + let val is_tn = eq tn + in + case Map.find (theMap, tn) of + SOME{ pre = tn_pre, low = tn_low } => let + val tl = !tn_low + in + if tl < (!node_low) andalso + List.exists is_tn stack then + node_low := tl + else (); + loop tnl (nodemap, stack, sccl) + end + | NONE =>let + (* lookup failed -> tn is a new node *) + val tn_pre = npre + val tn_low = ref npre + val npre = npre + 1 + val theMap = + Map.insert (theMap, tn, + { pre = tn_pre, low = tn_low }) + val nodemap = (npre, theMap) + val tn_nograb_cont = loop tnl + fun tn_grab_cont (nodemap, sccl) = let + fun grab (top :: stack, scc) = + if eq tn top then + tn_nograb_cont + (nodemap, stack, + component (top, scc) :: sccl) + else + grab (stack, top :: scc) + | grab _ = + raise Fail "scc:grab: empty stack" + in + grab + end + in + dfs { follow_nodes = follow tn, + grab_cont = tn_grab_cont, + node_pre = tn_pre, node_low = tn_low, + parent_low = node_low, + nodemap = nodemap, + stack = tn :: stack, + sccl = sccl, + nograb_cont = tn_nograb_cont } + end + end + | loop [] (nodemap, stack, sccl) = + let val nl = !node_low + in + if nl = node_pre then + grab_cont (nodemap, sccl) (stack, []) + else + ((* propagate node_low up *) + if nl < (!parent_low) then parent_low := nl else (); + (* `return' *) + nograb_cont (nodemap, stack, sccl)) + end + in + loop (rev follow_nodes) (nodemap, stack, sccl) + end + fun top_grab_cont (nodemap, sccl) ([], []) = sccl + | top_grab_cont _ _ = raise Fail "scc:top_grab: stack not empty" + in + dfs { follow_nodes = roots, + grab_cont = top_grab_cont, + node_pre = 0, + node_low = ref 0, (* low of virtual root *) + parent_low = ref 0, (* low of virtual parent of virtual root *) + nodemap = (1, Map.empty), + stack = [], + sccl = [], + nograb_cont = fn (_, _, _) => raise Fail "scc:top_nograb_cont" } + end + + fun topOrder { root, follow } = + topOrder' { roots = [root], follow = follow } + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/graph-scc-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/graph-scc-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/graph-scc-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/graph-scc-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,37 @@ +(* graph-scc-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Calculate strongly-connected components of directed graph. + * The graph can have nodes with self-loops. + * + * author: Matthias Blume + *) + +signature GRAPH_SCC = + sig + + structure Nd : ORD_KEY + + type node = Nd.ord_key + + datatype component + = SIMPLE of node (* singleton, no self-loop *) + | RECURSIVE of node list + + val topOrder': { roots: node list, follow: node -> node list } + -> component list + (* take root node(s) and follow function and return + * list of topologically sorted strongly-connected components; + * the component that contains the first of the given "roots" + * goes first + *) + + val topOrder : { root: node, follow: node -> node list } + -> component list + (* for backward compatibility; + * AXIOM: topOrder{root,follow}==topOrder'{roots=[root],follow=follow} + *) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash2-table-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash2-table-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash2-table-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash2-table-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,276 @@ +(* hash2-table-fn.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Hash tables that are keyed by two keys (in different domains). + * + * AUTHOR: John Reppy + * University of Chicago + * https://cs.uchicago.edu/~jhr + *) + +functor Hash2TableFn ( + structure Key1 : HASH_KEY + structure Key2 : HASH_KEY + ) : MONO_HASH2_TABLE = struct + + structure Key1 = Key1 + structure Key2 = Key2 + + structure HTRep = HashTableRep + + (* the representation of a double-keyed hash table is two tables + * that will always hold the same number of items and be the same + * size. + *) + datatype 'a hash_table = TBL of { + not_found : exn, + tbl1 : (Key1.hash_key, Key2.hash_key * 'a) HTRep.table ref, + tbl2 : (Key2.hash_key, Key1.hash_key * 'a) HTRep.table ref, + n_items : int ref + } + + fun index (i, sz) = Word.toIntX(Word.andb(i, Word.fromInt sz - 0w1)) + + (* Create a new table; the int is a size hint and the exception + * is to be raised by find. + *) + fun mkTable (n, exn) = TBL{ + not_found = exn, + tbl1 = ref(HTRep.alloc n), + tbl2 = ref(HTRep.alloc n), + n_items = ref 0 + } + + (* remove all elements from the table *) + fun clear (TBL{tbl1, tbl2, n_items, ...}) = ( + HTRep.clear(!tbl1); HTRep.clear(!tbl2); n_items := 0) + + (* Remove an item, returning the item. The table's exception is raised if + * the item doesn't exist. + *) + fun remove (hashVal, sameKey) (arr, not_found, key) = let + val hash = hashVal key + val indx = index (hash, Array.length arr) + fun look HTRep.NIL = raise not_found + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then (v, r) + else let val (item, r') = look r in (item, HTRep.B(h, k, v, r')) end + val (item, bucket) = look (Array.sub (arr, indx)) + in + Array.update (arr, indx, bucket); + item + end (* remove *) + fun delete1 (tbl, not_found, k) = + remove (Key1.hashVal, Key1.sameKey) (tbl, not_found, k) + fun delete2 (tbl, not_found, k) = + remove (Key2.hashVal, Key2.sameKey) (tbl, not_found, k) + + fun remove1 (TBL{tbl1, tbl2, n_items, not_found, ...}) k1 = let + val (k2, item) = delete1 (!tbl1, not_found, k1) + in + delete2 (!tbl2, not_found, k2); + n_items := !n_items - 1; + item + end + fun remove2 (TBL{tbl1, tbl2, n_items, not_found, ...}) k2 = let + val (k1, item) = delete2 (!tbl2, not_found, k2) + in + delete1 (!tbl1, not_found, k1); + n_items := !n_items - 1; + item + end + + (* Insert an item. If there is already an item that has either of the two keys, + * then the old item is discarded (from both tables) + *) + fun insert (TBL{tbl1, tbl2, n_items, ...}) (k1, k2, item) = let + val arr1 = !tbl1 and arr2 = !tbl2 + val sz = Array.length arr1 + val h1 = Key1.hashVal k1 and h2 = Key2.hashVal k2 + val i1 = index(h1, sz) and i2 = index(h2, sz) + fun look1 HTRep.NIL = ( + Array.update(arr1, i1, + HTRep.B(h1, k1, (k2, item), Array.sub(arr1, i1))); + (* we increment the number of items and grow the tables here, + * but not when inserting into tbl2. + *) + n_items := !n_items + 1; + if (HTRep.growTableIfNeeded (tbl1, !n_items)) + then tbl2 := HTRep.growTable (arr2, Array.length(! tbl1)) + else (); + HTRep.NIL) + | look1 (HTRep.B(h1', k1', (k2', v), r)) = + if ((h1' = h1) andalso Key1.sameKey(k1', k1)) + then ( + if not(Key2.sameKey(k2, k2')) + then ignore(delete2 (arr2, Fail "insert.look1", k2')) + else (); + HTRep.B(h1, k1, (k2, item), r)) + else (case (look1 r) + of HTRep.NIL => HTRep.NIL + | rest => HTRep.B(h1', k1', (k2', v), rest) + (* end case *)) + fun look2 HTRep.NIL = ( + Array.update(arr2, i2, + HTRep.B(h2, k2, (k1, item), Array.sub(arr2, i2))); + HTRep.NIL) + | look2 (HTRep.B(h2', k2', (k1', v), r)) = + if ((h2' = h2) andalso Key2.sameKey(k2', k2)) + then ( + if not(Key1.sameKey(k1, k1')) + then ignore(delete1 (arr1, Fail "insert.look2", k1')) + else (); + HTRep.B(h2, k2, (k1, item), r)) + else (case (look2 r) + of HTRep.NIL => HTRep.NIL + | rest => HTRep.B(h2, k2, (k1, v), rest) + (* end case *)) + in + case (look1 (Array.sub (arr1, i1)), look2 (Array.sub (arr2, i2))) + of (HTRep.NIL, HTRep.NIL) => () + | (b1, b2) => ( + (* NOTE: both b1 and b2 should be non-nil, since we should + * have replaced an item in both tables. + *) + Array.update(arr1, i1, b1); + Array.update(arr2, i2, b2)) + (* end case *) + end + + (* return true, if the key is in the domain of the table *) + fun inDomain (hashVal, sameKey) tbl key = let + val arr = !tbl + val hash = hashVal key + val indx = index (hash, Array.length arr) + fun look HTRep.NIL = false + | look (HTRep.B(h, k, v, r)) = + ((hash = h) andalso sameKey(key, k)) orelse look r + in + look (Array.sub (arr, indx)) + end + fun inDomain1 (TBL{tbl1, ...}) = inDomain (Key1.hashVal, Key1.sameKey) tbl1 + fun inDomain2 (TBL{tbl2, ...}) = inDomain (Key2.hashVal, Key2.sameKey) tbl2 + + (* Look for an item, the table's exception is raised if the item doesn't exist *) + fun lookup (hashVal, sameKey) (tbl, not_found) key = let + val arr = !tbl + val hash = hashVal key + val indx = index (hash, Array.length arr) + fun look HTRep.NIL = raise not_found + | look (HTRep.B(h, k, (_, v), r)) = + if ((hash = h) andalso sameKey(key, k)) then v else look r + in + look (Array.sub (arr, indx)) + end + fun lookup1 (TBL{tbl1, not_found, ...}) = + lookup (Key1.hashVal, Key1.sameKey) (tbl1, not_found) + fun lookup2 (TBL{tbl2, not_found, ...}) = + lookup (Key2.hashVal, Key2.sameKey) (tbl2, not_found) + + (* Look for an item, return NONE if the item doesn't exist *) + fun find (hashVal, sameKey) table key = let + val arr = !table + val sz = Array.length arr + val hash = hashVal key + val indx = index (hash, sz) + fun look HTRep.NIL = NONE + | look (HTRep.B(h, k, (_, v), r)) = if ((hash = h) andalso sameKey(key, k)) + then SOME v + else look r + in + look (Array.sub (arr, indx)) + end + fun find1 (TBL{tbl1, ...}) = find (Key1.hashVal, Key1.sameKey) tbl1 + fun find2 (TBL{tbl2, ...}) = find (Key2.hashVal, Key2.sameKey) tbl2 + + (* Return the number of items in the table *) + fun numItems (TBL{n_items, ...}) = !n_items + + (* Return a list of the items (and their keys) in the table *) + fun listItems (TBL{tbl1, ...}) = + HTRep.fold (fn ((_, item), l) => item::l) [] (! tbl1) + fun listItemsi (TBL{tbl1, ...}) = + HTRep.foldi (fn (k1, (k2, item), l) => (k1, k2, item)::l) [] (! tbl1) + + (* Apply a function to the entries of the table *) + fun app f (TBL{tbl1, ...}) = + HTRep.app (fn (_, v) => f v) (! tbl1) + fun appi f (TBL{tbl1, ...}) = + HTRep.appi (fn (k1, (k2, v)) => f(k1, k2, v)) (! tbl1) + + (* Map a table to a new table that has the same keys *) + fun map f (TBL{tbl1, tbl2, n_items, not_found}) = let + val sz = Array.length (! tbl1) + val newTbl = TBL{ + tbl1 = ref (HTRep.alloc sz), + tbl2 = ref (HTRep.alloc sz), + n_items = ref 0, + not_found = not_found + } + fun ins (k1, (k2, v)) = insert newTbl (k1, k2, f v) + in + HTRep.appi ins (! tbl1); newTbl + end + fun mapi f (TBL{tbl1, tbl2, n_items, not_found}) = let + val sz = Array.length (! tbl1) + val newTbl = TBL{ + tbl1 = ref (HTRep.alloc sz), + tbl2 = ref (HTRep.alloc sz), + n_items = ref 0, + not_found = not_found + } + fun ins (k1, (k2, v)) = insert newTbl (k1, k2, f(k1, k2, v)) + in + HTRep.appi ins (! tbl1); newTbl + end + +(* TODO: add mapPartial and mapPartiali *) + + fun fold f init (TBL{tbl1, ...}) = + HTRep.fold (fn ((_, v), accum) => f(v, accum)) init (! tbl1) + fun foldi f init (TBL{tbl1, ...}) = + HTRep.foldi (fn (k1, (k2, v), accum) => f(k1, k2, v, accum)) init (! tbl1) + +(* TODO: add modify and modifyi *) + + (* remove any hash table items that do not satisfy the given + * predicate. + *) + fun filter pred (TBL{tbl1, tbl2, n_items, ...}) = let + fun ins (k1, (k2, v)) = if (pred v) + then () + else ( + delete1 (!tbl1, Fail "filter", k1); + delete2 (!tbl2, Fail "filter", k2); + n_items := !n_items-1) + in + HTRep.appi ins (! tbl1) + end + fun filteri pred (TBL{tbl1, tbl2, n_items, not_found}) = let + fun ins (k1, (k2, v)) = if (pred(k1, k2, v)) + then () + else ( + delete1 (!tbl1, Fail "filteri", k1); + delete2 (!tbl2, Fail "filteri", k2); + n_items := !n_items-1) + in + HTRep.appi ins (! tbl1) + end + + (* Create a copy of a hash table *) + fun copy (TBL{tbl1, tbl2, n_items, not_found}) = TBL{ + tbl1 = ref(HTRep.copy (! tbl1)), + tbl2 = ref(HTRep.copy (! tbl2)), + n_items = ref(! n_items), + not_found = not_found + } + + (* returns a list of the sizes of the various buckets. This is to + * allow users to gauge the quality of their hashing function. + *) + fun bucketSizes (TBL{tbl1, tbl2, ...}) = + (HTRep.bucketSizes(! tbl1), HTRep.bucketSizes(! tbl2)) + + end (* MONO_HASH2_TABLE *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-key-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-key-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-key-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-key-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,27 @@ +(* hash-key-sig.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Abstract hash table keys. This is the argument signature for the hash table + * functor (see hash-table-sig.sml and hash-table.sml). + * + * AUTHOR: John Reppy + * University of Chicago + * https://cs.uchicago.edu/~jhr + *) + +signature HASH_KEY = + sig + type hash_key + + val hashVal : hash_key -> word + (* Compute an unsigned integer key from a hash key. *) + + val sameKey : (hash_key * hash_key) -> bool + (* Return true if two keys are the same. + * NOTE: if sameKey(h1, h2), then it must be the + * case that (hashVal h1 = hashVal h2). + *) + + end (* HASH_KEY *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-set-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-set-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-set-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-set-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,335 @@ +(* hash-set-fn.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * AUTHOR: John Reppy + * University of Chicago + * https://cs.uchicago.edu/~jhr + *) + +functor HashSetFn (Key : HASH_KEY) : MONO_HASH_SET = + struct + + structure Key = Key + (* NOTE: someday we will change the HASH_KEY signature to follow the naming conventions of + * the SML basis, so we use those names internally to ease future porting. + *) + type item = Key.hash_key + val hash = Key.hashVal + val same = Key.sameKey + + datatype bucket + = NIL + | B of (word * item * bucket) + + datatype set = SET of { + table : bucket array ref, + nItems : int ref + } + + fun index (i, sz) = Word.toIntX(Word.andb(i, Word.fromInt sz - 0w1)) + + (* minimum and maximum hash table sizes. We use powers of two for hash table + * sizes, since that give efficient indexing, and assume a minimum size of 32. + *) + val minSize = 32 + val maxSize = let + fun f i = let + val i' = i+i + in + if i' < Array.maxLen then f i' else i + end + in + f 0x10000 + end + + (* round up `n` to the next hash-table size *) + fun roundUp n = if (n >= maxSize) + then maxSize + else let + fun f i = if (i >= n) then i else f(i + i) + in + f minSize + end + + (* Create a new table; the int is a size hint and the exception + * is to be raised by find. + *) + fun alloc sizeHint = Array.array(roundUp sizeHint, NIL) + + (* grow a table to the specified size *) + fun growTable (table, newSz) = let + val newArr = Array.array (newSz, NIL) + fun copy NIL = () + | copy (B(h, key, rest)) = let + val indx = index (h, newSz) + in + Array.update (newArr, indx, B(h, key, Array.sub(newArr, indx))); + copy rest + end + in + Array.app copy table; + newArr + end + + (* conditionally grow a table; return true if it grew. *) + fun growTableIfNeeded (table, nItems) = let + val arr = !table + val sz = Array.length arr + in + if (nItems >= sz) + then (table := growTable (arr, sz+sz); true) + else false + end + + (* reverse-append for buckets *) + fun revAppend (NIL, b) = b + | revAppend (B(h, x, r), b) = revAppend(r, B(h, x, b)) + + fun addWithHash (tbl as SET{table, nItems}, h, item) = let + val arr = !table + val sz = Array.length arr + val indx = index (h, sz) + fun look NIL = ( + Array.update(arr, indx, B(h, item, Array.sub(arr, indx))); + nItems := !nItems + 1; + growTableIfNeeded (table, !nItems); + NIL) + | look (B(h', item', r)) = if ((h = h') andalso same(item, item')) + then NIL (* item already present *) + else (case (look r) + of NIL => NIL + | rest => B(h', item', rest) + (* end case *)) + in + case (look (Array.sub (arr, indx))) + of NIL => () + | b => Array.update(arr, indx, b) + (* end case *) + end + + (* Add an item to a set *) + fun add (tbl, item) = addWithHash(tbl, hash item, item) + fun addc set item = add(set, item) + + (* The empty set *) + fun mkEmpty sizeHint = SET{ + table = ref (alloc sizeHint), + nItems = ref 0 + } + + (* Create a singleton set *) + fun mkSingleton item = let + val set = mkEmpty minSize + in + add (set, item); + set + end + + (* create a set from a list of items *) + fun mkFromList items = let + val set = mkEmpty(List.length items) + in + List.app (addc set) items; + set + end + + fun copy (SET{table=ref tbl, nItems}) = SET{ + table = ref(Array.tabulate(Array.length tbl, fn i => Array.sub(tbl, i))), + nItems = ref(!nItems) + } + + (* Return a list of the items in the set *) + fun toList (SET{table, nItems}) = + if (!nItems = 0) + then [] + else let + fun f (NIL, l) = l + | f (B(_, x, r), l) = f(r, x::l) + in + Array.foldl f [] (!table) + end + + (* Insert items from list. *) + fun addList (set, items) = List.app (addc set) items + + (* Remove an item. Raise NotFound if not found. *) + fun delete (SET{table, nItems}, item) = let + val arr = !table + val sz = Array.length arr + val h = hash item + val indx = index (h, sz) + fun look (_, NIL) = false + | look (prefix, B(h', item', r)) = if ((h = h') andalso same(item, item')) + then ( + Array.update(arr, indx, revAppend(prefix, r)); + nItems := !nItems - 1; + true) + else look (B(h', item', prefix), r) + in + look (NIL, Array.sub(arr, indx)) + end + + (* Remove the item, if it is in the set. Otherwise the set is unchanged. *) + fun subtract (set, item) = ignore(delete (set, item)) + fun subtractc set item = subtract(set, item) + + fun subtractList (set, items) = List.app (subtractc set) items + + (* Return true if and only if item is an element in the set *) + fun member (SET{table, ...}, item) = let + val arr = !table + val sz = Array.length arr + val h = hash item + val indx = index (h, sz) + fun look NIL = false + | look (B(h', item', r)) = ((h = h') andalso same(item, item')) orelse look r + in + look (Array.sub(arr, indx)) + end + + (* Return true if and only if the set is empty *) + fun isEmpty (SET{nItems, ...}) = (!nItems = 0) + + (* Return true if and only if the first set is a subset of the second *) + fun isSubset (SET{table=tbl1, nItems=n1}, s2 as SET{table=tbl2, nItems=n2}) = + if (!n1 <= !n2) + then let + val arr1 = !tbl1 and arr2 = !tbl2 + val sz1 = Array.length arr1 and sz2 = Array.length arr2 + fun lp i = if (i <= sz1) + then let + (* iterate over the items in bucket i *) + fun look1 NIL = lp(i+1) + | look1 (B(h, item, r)) = let + (* search s2 for the item *) + fun look2 NIL = false + | look2 (B(h', item', r')) = + if ((h = h') andalso same(item, item')) + then look1 r + else look2 r' + in + look2 (Array.sub(arr2, index (h, sz2))) + end + in + look1 (Array.sub(arr1, i)) + end + else true + in + lp 0 + end + else false + + (* Return the number of items in the table *) + fun numItems (SET{nItems, ...}) = !nItems + + (* Create a new set by applying a map function to the elements + * of the set. + *) + fun map f (SET{nItems, table}) = let + val s = mkEmpty (!nItems) + fun mapf NIL = () + | mapf (B(_, x, r)) = (add(s, f x); mapf r) + in + Array.app mapf (!table); + s + end + + fun mapPartial f (SET{nItems, table}) = let + val s = mkEmpty (!nItems) + fun mapf NIL = () + | mapf (B(_, x, r)) = (case f x + of SOME x' => (add(s, x'); mapf r) + | NONE => mapf r + (* end case *)) + in + Array.app mapf (!table); + s + end + + (* Apply a function to the entries of the set. *) + fun app f (SET{nItems, table}) = let + fun appf NIL = () + | appf (B(_, x, r)) = (f x; appf r) + in + Array.app appf (!table) + end + + (* Apply a folding function to the entries of the set. *) + fun fold f init (SET{nItems, table}) = let + fun foldf (NIL, acc) = acc + | foldf (B(_, x, r), acc) = foldf (r, f(x, acc)) + in + Array.foldl foldf init (!table) + end + + fun partition pred (SET{table, nItems}) = let + val n = (!nItems div 2) + 1 + val ts = mkEmpty n + val fs = mkEmpty n + fun part NIL = () + | part (B(h, x, r)) = if pred x + then (addWithHash(ts, h, x); part r) + else (addWithHash(fs, h, x); part r) + in + Array.app part (!table); + (ts, fs) + end + + fun filter pred (SET{table=ref tbl, nItems}) = let + val len = Array.length tbl + fun remove (_, 0) = () + | remove (i, n) = if (i < len) + then (case Array.sub(tbl, i) + of NIL => remove(i+1, n) + | bucket => let + fun rmv (NIL, items, n) = ( + Array.update(tbl, i, items); + remove (i+1, n)) + | rmv (B(h, x, r), items, n) = if pred x + then rmv(r, B(h, x, items), n) + else rmv(r, items, n-1) + in + rmv (bucket, NIL, n) + end + (* end case *)) + else nItems := n + in + remove (0, !nItems) + end + + fun exists pred (SET{table, ...}) = let + fun chk NIL = false + | chk (B(_, x, r)) = pred x orelse chk r + in + Array.exists chk (!table) + end + + fun all pred (SET{table, ...}) = let + fun chk NIL = true + | chk (B(_, x, r)) = pred x andalso chk r + in + Array.all chk (!table) + end + + fun find pred (SET{table=ref tbl, ...}) = let + val len = Array.length tbl + fun find' i = if (i < len) + then let + fun chk NIL = find' (i+1) + | chk (B(_, x, r)) = if pred x then SOME x else chk r + in + chk (Array.sub(tbl, i)) + end + else NONE + in + find' 0 + end + + (* DEPRECATED FUNCTIONS *) + + val listItems = toList + val without = subtract + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-string.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-string.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-string.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-string.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,14 @@ +(* hash-string.sml + * + * COPYRIGHT (c) 2020 + * All rights reserved. + *) + +structure HashString : sig + + val hashString : string -> word + + val hashSubstring : substring -> word + + end = FNVHash + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-table-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-table-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-table-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-table-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,179 @@ +(* hash-table-fn.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A hash table functor. It takes a key type with two operations: sameKey and + * hashVal as arguments (see hash-key-sig.sml). + * + * AUTHOR: John Reppy + * University of Chicago + * https://cs.uchicago.edu/~jhr + *) + +functor HashTableFn (Key : HASH_KEY) : MONO_HASH_TABLE = + struct + + structure Key = Key + open Key + + structure HTRep = HashTableRep + + datatype 'a hash_table = HT of { + not_found : exn, + table : (hash_key, 'a) HTRep.table ref, + n_items : int ref + } + + fun index (i, sz) = Word.toIntX(Word.andb(i, Word.fromInt sz - 0w1)) + + (* Create a new table; the int is a size hint and the exception + * is to be raised by find. + *) + fun mkTable (sizeHint, notFound) = HT{ + not_found = notFound, + table = ref (HTRep.alloc sizeHint), + n_items = ref 0 + } + + (* remove all elements from the table *) + fun clear (HT{table, n_items, ...}) = (HTRep.clear(!table); n_items := 0) + + (* Insert an item. If the key already has an item associated with it, + * then the old item is discarded. + *) + fun insert (tbl as HT{table, n_items, ...}) (key, item) = let + val arr = !table + val sz = Array.length arr + val hash = hashVal key + val indx = index (hash, sz) + fun look HTRep.NIL = ( + Array.update(arr, indx, HTRep.B(hash, key, item, Array.sub(arr, indx))); + n_items := !n_items + 1; + HTRep.growTableIfNeeded (table, !n_items); + HTRep.NIL) + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then HTRep.B(hash, key, item, r) + else (case (look r) + of HTRep.NIL => HTRep.NIL + | rest => HTRep.B(h, k, v, rest) + (* end case *)) + in + case (look (Array.sub (arr, indx))) + of HTRep.NIL => () + | b => Array.update(arr, indx, b) + (* end case *) + end + + (* return true, if the key is in the domain of the table *) + fun inDomain (HT{table, ...}) key = let + val arr = !table + val hash = hashVal key + val indx = index (hash, Array.length arr) + fun look HTRep.NIL = false + | look (HTRep.B(h, k, v, r)) = + ((hash = h) andalso sameKey(key, k)) orelse look r + in + look (Array.sub (arr, indx)) + end + + (* find an item, the table's exception is raised if the item doesn't exist *) + fun lookup (HT{table, not_found, ...}) key = let + val arr = !table + val hash = hashVal key + val indx = index (hash, Array.length arr) + fun look HTRep.NIL = raise not_found + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then v + else look r + in + look (Array.sub (arr, indx)) + end + + (* look for an item, return NONE if the item doesn't exist *) + fun find (HT{table, ...}) key = let + val arr = !table + val sz = Array.length arr + val hash = hashVal key + val indx = index (hash, sz) + fun look HTRep.NIL = NONE + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then SOME v + else look r + in + look (Array.sub (arr, indx)) + end + + (* Remove an item. The table's exception is raised if + * the item doesn't exist. + *) + fun remove (HT{not_found, table, n_items}) key = let + val arr = !table + val sz = Array.length arr + val hash = hashVal key + val indx = index (hash, sz) + fun look HTRep.NIL = raise not_found + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then (v, r) + else let val (item, r') = look r in (item, HTRep.B(h, k, v, r')) end + val (item, bucket) = look (Array.sub (arr, indx)) + in + Array.update (arr, indx, bucket); + n_items := !n_items - 1; + item + end (* remove *) + + (* Return the number of items in the table *) + fun numItems (HT{n_items, ...}) = !n_items + + (* return a list of the items in the table *) + fun listItems (HT{table = ref arr, n_items, ...}) = + HTRep.listItems (arr, n_items) + fun listItemsi (HT{table = ref arr, n_items, ...}) = + HTRep.listItemsi (arr, n_items) + + (* Apply a function to the entries of the table *) + fun appi f (HT{table, ...}) = HTRep.appi f (! table) + fun app f (HT{table, ...}) = HTRep.app f (! table) + + (* Map a table to a new table that has the same keys and exception *) + fun mapi f (HT{table, n_items, not_found}) = HT{ + table = ref(HTRep.mapi f (! table)), + n_items = ref(!n_items), + not_found = not_found + } + fun map f (HT{table, n_items, not_found}) = HT{ + table = ref(HTRep.map f (! table)), + n_items = ref(!n_items), + not_found = not_found + } + + (* Fold a function over the entries of the table *) + fun foldi f init (HT{table, ...}) = HTRep.foldi f init (! table) + fun fold f init (HT{table, ...}) = HTRep.fold f init (! table) + + (* modify the hash-table items in place *) + fun modifyi f (HT{table, ...}) = HTRep.modifyi f (!table) + fun modify f (HT{table, ...}) = HTRep.modify f (!table) + + (* remove any hash table items that do not satisfy the given + * predicate. + *) + fun filteri pred (HT{table, n_items, ...}) = + n_items := HTRep.filteri pred (! table) + fun filter pred (HT{table, n_items, ...}) = + n_items := HTRep.filter pred (! table) + + (* Create a copy of a hash table *) + fun copy (HT{table, n_items, not_found}) = HT{ + table = ref(HTRep.copy(! table)), + n_items = ref(!n_items), + not_found = not_found + } + + (* returns a list of the sizes of the various buckets. This is to + * allow users to gauge the quality of their hashing function. + *) + fun bucketSizes (HT{table, ...}) = HTRep.bucketSizes (! table) + + end (* HashTableFn *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-table-rep.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-table-rep.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-table-rep.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-table-rep.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,261 @@ +(* hash-table-rep.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This is the internal representation of hash tables, along with some + * utility functions. It is used in both the polymorphic and functor + * hash table implementations. + * + * AUTHOR: John Reppy + * University of Chicago + * https://cs.uchicago.edu/~jhr + *) + +structure HashTableRep : sig + + datatype ('a, 'b) bucket + = NIL + | B of (word * 'a * 'b * ('a, 'b) bucket) + + type ('a, 'b) table = ('a, 'b) bucket array + + val alloc : int -> ('a, 'b) table + (* allocate a table of at least the given size *) + + val growTable : (('a, 'b) table * int) -> ('a, 'b) table + (* grow a table to the specified size *) + + val growTableIfNeeded : (('a, 'b) table ref * int) -> bool + (* conditionally grow a table; the second argument is the number + * of items currently in the table. + *) + + val clear : ('a, 'b) table -> unit + (* remove all items *) + + val listItems : (('a, 'b) table * int ref) -> 'b list + val listItemsi : (('a, 'b) table * int ref) -> ('a * 'b) list + + val appi : ('a * 'b -> 'c) -> ('a, 'b) table -> unit + val app : ('a -> 'b) -> ('c, 'a) table -> unit + + val mapi : ('a * 'b -> 'c) -> ('a, 'b) table -> ('a, 'c) table + val map : ('a -> 'b) -> ('c, 'a) table -> ('c, 'b) table + + val foldi : ('a * 'b * 'c -> 'c) -> 'c -> ('a, 'b) table -> 'c + val fold : ('a * 'b -> 'b) -> 'b -> ('c, 'a) table -> 'b + + val modify : ('b -> 'b) -> ('a, 'b) table -> unit + val modifyi : (('a * 'b) -> 'b) -> ('a, 'b) table -> unit + + val filteri : ('a * 'b -> bool) -> ('a, 'b) table -> int + val filter : ('a -> bool) -> ('b,'a) table -> int + + val copy : ('a, 'b) table -> ('a, 'b) table + + val bucketSizes : ('a, 'b) table -> int list + + end = struct + + datatype ('a, 'b) bucket + = NIL + | B of (word * 'a * 'b * ('a, 'b) bucket) + + type ('a, 'b) table = ('a, 'b) bucket array + + fun index (i, sz) = Word.toIntX(Word.andb(i, Word.fromInt sz - 0w1)) + + (* minimum and maximum hash table sizes. We use powers of two for hash table + * sizes, since that give efficient indexing, and assume a minimum size of 32. + *) + val minSize = 32 + val maxSize = let + fun f i = let + val i' = i+i + in + if i' < Array.maxLen then f i' else i + end handle Overflow => i + in + f 0x10000 + end + + (* round up `n` to the next hash-table size *) + fun roundUp n = if (n >= maxSize) + then maxSize + else let + fun f i = if (i >= n) then i else f(i + i) + in + f minSize + end + + (* Create a new table; the int is a size hint and the exception + * is to be raised by find. + *) + fun alloc sizeHint = Array.array(roundUp sizeHint, NIL) + + (* grow a table to the specified size *) + fun growTable (table, newSz) = let + val newArr = Array.array (newSz, NIL) + fun copy NIL = () + | copy (B(h, key, v, rest)) = let + val indx = index (h, newSz) + in + Array.update (newArr, indx, + B(h, key, v, Array.sub(newArr, indx))); + copy rest + end + in + Array.app copy table; + newArr + end + + (* conditionally grow a table; return true if it grew. *) + fun growTableIfNeeded (table, nItems) = let + val arr = !table + val sz = Array.length arr + in + if (nItems >= sz) + then (table := growTable (arr, sz+sz); true) + else false + end + + (* remove all items *) + fun clear table = Array.modify (fn _ => NIL) table + + (* return a list of the items in the table *) + fun listItems (table, nItems) = let + fun f (_, l, 0) = l + | f (~1, l, _) = l + | f (i, l, n) = let + fun g (NIL, l, n) = f (i-1, l, n) + | g (B(_, k, v, r), l, n) = g(r, v::l, n-1) + in + g (Array.sub(table, i), l, n) + end + in + f ((Array.length table) - 1, [], !nItems) + end (* listItems *) + fun listItemsi (table, nItems) = let + fun f (_, l, 0) = l + | f (~1, l, _) = l + | f (i, l, n) = let + fun g (NIL, l, n) = f (i-1, l, n) + | g (B(_, k, v, r), l, n) = g(r, (k, v)::l, n-1) + in + g (Array.sub(table, i), l, n) + end + in + f ((Array.length table) - 1, [], !nItems) + end (* listItems *) + + (* Apply a function to the entries of the table *) + fun appi f table = let + fun appF NIL = () + | appF (B(_, key, item, rest)) = (f (key, item); appF rest) + in + Array.app appF table + end (* appi *) + fun app f table = let + fun appF NIL = () + | appF (B(_, key, item, rest)) = (f item; appF rest) + in + Array.app appF table + end (* app *) + + (* Map a table to a new table that has the same keys *) + fun mapi f table = let + fun mapF NIL = NIL + | mapF (B(hash, key, item, rest)) = + B(hash, key, f (key, item), mapF rest) + val newTbl = Array.tabulate ( + Array.length table, + fn i => mapF (Array.sub(table, i))) + in + newTbl + end (* transform *) + + (* Map a table to a new table that has the same keys *) + fun map f table = let + fun mapF NIL = NIL + | mapF (B(hash, key, item, rest)) = B(hash, key, f item, mapF rest) + val newTbl = Array.tabulate ( + Array.length table, + fn i => mapF (Array.sub(table, i))) + in + newTbl + end (* map *) + + fun foldi f init table = let + fun foldF (NIL, accum) = accum + | foldF (B(hash, key, item, rest), accum) = + foldF(rest, f(key, item, accum)) + in + Array.foldl foldF init table + end + fun fold f init table = let + fun foldF (NIL, accum) = accum + | foldF (B(hash, key, item, rest), accum) = + foldF(rest, f(item, accum)) + in + Array.foldl foldF init table + end + + (* modify the hash-table items in place *) + fun modify f table = let + fun modifyF NIL = NIL + | modifyF (B(hash, key, item, rest)) = B(hash, key, f item, modifyF rest) + in + Array.modify modifyF table + end + fun modifyi f table = let + fun modifyF NIL = NIL + | modifyF (B(hash, key, item, rest)) = + B(hash, key, f(key, item), modifyF rest) + in + Array.modify modifyF table + end + + (* remove any hash table items that do not satisfy the given + * predicate. Return the number of items left in the table. + *) + fun filteri pred table = let + val nItems = ref 0 + fun filterP NIL = NIL + | filterP (B(hash, key, item, rest)) = if (pred(key, item)) + then ( + nItems := !nItems+1; + B(hash, key, item, filterP rest)) + else filterP rest + in + Array.modify filterP table; + !nItems + end (* filteri *) + fun filter pred table = let + val nItems = ref 0 + fun filterP NIL = NIL + | filterP (B(hash, key, item, rest)) = if (pred item) + then ( + nItems := !nItems+1; + B(hash, key, item, filterP rest)) + else filterP rest + in + Array.modify filterP table; + !nItems + end (* filter *) + + (* Create a copy of a hash table *) + fun copy table = + Array.tabulate (Array.length table, fn i => Array.sub(table, i)); + + (* returns a list of the sizes of the various buckets. This is to + * allow users to gauge the quality of their hashing function. + *) + fun bucketSizes table = let + fun len (NIL, n) = n + | len (B(_, _, _, r), n) = len(r, n+1) + in + Array.foldr (fn (b, l) => len(b, 0) :: l) [] table + end + + end (* HashTableRep *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-table-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-table-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-table-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-table-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,84 @@ +(* hash-table-sig.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * The signature of the polymorphic hash table structure. + * + * AUTHOR: John Reppy + * University of Chicago + * https://cs.uchicago.edu/~jhr + *) + +signature HASH_TABLE = + sig + + type ('a, 'b) hash_table + (* type of hash table mapping 'a to 'b *) + + val mkTable : (('a -> word) * (('a * 'a) -> bool)) -> (int * exn) + -> ('a,'b) hash_table + (* Given a hashing function and an equality predicate, create a new table; + * the int is a size hint and the exception is to be raised by find. + *) + + val clear : ('a, 'b) hash_table -> unit + (* remove all elements from the table *) + + val insert : ('a, 'b) hash_table -> ('a * 'b) -> unit + (* Insert an item. If the key already has an item associated with it, + * then the old item is discarded. + *) + + val inDomain : ('a, 'b) hash_table -> 'a -> bool + (* return true, if the key is in the domain of the table *) + + val lookup : ('a, 'b) hash_table -> 'a -> 'b + (* Find an item, the table's exception is raised if the item doesn't exist *) + + val find : ('a, 'b) hash_table -> 'a -> 'b option + (* Look for an item, return NONE if the item doesn't exist *) + + val remove : ('a, 'b) hash_table -> 'a -> 'b + (* Remove an item, returning the item. The table's exception is raised if + * the item doesn't exist. + *) + + val numItems : ('a, 'b) hash_table -> int + (* Return the number of items in the table *) + + val listItems : ('a, 'b) hash_table -> 'b list + val listItemsi : ('a, 'b) hash_table -> ('a * 'b) list + (* Return a list of the items (and their keys) in the table *) + + val app : ('b -> unit) -> ('a, 'b) hash_table -> unit + val appi : (('a * 'b) -> unit) -> ('a, 'b) hash_table -> unit + (* Apply a function to the entries of the table *) + + val map : ('b -> 'c) -> ('a, 'b) hash_table -> ('a, 'c) hash_table + val mapi : (('a * 'b) -> 'c) -> ('a, 'b) hash_table -> ('a, 'c) hash_table + (* Map a table to a new table that has the same keys *) + + val fold : (('b *'c) -> 'c) -> 'c -> ('a, 'b) hash_table -> 'c + val foldi : (('a * 'b * 'c) -> 'c) -> 'c -> ('a, 'b) hash_table -> 'c + (* Fold a function over the elements of a table *) + + val modify : ('b -> 'b) -> ('a, 'b) hash_table -> unit + val modifyi : (('a * 'b) -> 'b) -> ('a, 'b) hash_table -> unit + (* modify the hash-table items in place *) + + val filter : ('b -> bool) -> ('a, 'b) hash_table -> unit + val filteri : (('a * 'b) -> bool) -> ('a, 'b) hash_table -> unit + (* remove any hash table items that do not satisfy the given + * predicate. + *) + + val copy : ('a, 'b) hash_table -> ('a, 'b) hash_table + (* Create a copy of a hash table *) + + val bucketSizes : ('a, 'b) hash_table -> int list + (* returns a list of the sizes of the various buckets. This is to + * allow users to gauge the quality of their hashing function. + *) + + end (* HASH_TABLE *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-table.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-table.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/hash-table.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/hash-table.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,191 @@ +(* hash-table.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Polymorphic hash tables. + * + * AUTHOR: John Reppy + * University of Chicago + * https://cs.uchicago.edu/~jhr + *) + +structure HashTable : HASH_TABLE = + struct + + structure HTRep = HashTableRep + + datatype ('a, 'b) hash_table = HT of { + hash_fn : 'a -> word, + eq_pred : ('a * 'a) -> bool, + not_found : exn, + table : ('a, 'b) HTRep.table ref, + n_items : int ref + } + + fun index (i, sz) = Word.toIntX(Word.andb(i, Word.fromInt sz - 0w1)) + + (* find smallest power of 2 (>= 32) that is >= n *) + fun roundUp n = let + fun f i = if (i >= n) then i else f(i * 2) + in + f 32 + end + + (* Create a new table; the int is a size hint and the exception + * is to be raised by find. + *) + fun mkTable (hash, eq) (sizeHint, notFound) = HT{ + hash_fn = hash, + eq_pred = eq, + not_found = notFound, + table = ref (HTRep.alloc sizeHint), + n_items = ref 0 + } + + (* remove all elements from the table *) + fun clear (HT{table, n_items, ...}) = (HTRep.clear(!table); n_items := 0) + + (* Insert an item. If the key already has an item associated with it, + * then the old item is discarded. + *) + fun insert (tbl as HT{hash_fn, eq_pred, table, n_items, ...}) (key, item) = let + val arr = !table + val sz = Array.length arr + val hash = hash_fn key + val indx = index (hash, sz) + fun look HTRep.NIL = ( + Array.update(arr, indx, + HTRep.B(hash, key, item, Array.sub(arr, indx))); + n_items := !n_items + 1; + HTRep.growTableIfNeeded (table, !n_items); + HTRep.NIL) + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso eq_pred(key, k)) + then HTRep.B(hash, key, item, r) + else (case (look r) + of HTRep.NIL => HTRep.NIL + | rest => HTRep.B(h, k, v, rest) + (* end case *)) + in + case (look (Array.sub (arr, indx))) + of HTRep.NIL => () + | b => Array.update(arr, indx, b) + end + + (* return true, if the key is in the domain of the table *) + fun inDomain (HT{hash_fn, eq_pred, table, ...}) key = let + val arr = !table + val hash = hash_fn key + val indx = index (hash, Array.length arr) + fun look HTRep.NIL = false + | look (HTRep.B(h, k, v, r)) = + ((hash = h) andalso eq_pred(key, k)) orelse look r + in + look (Array.sub (arr, indx)) + end + + (* find an item, the table's exception is raised if the item doesn't exist *) + fun lookup (HT{hash_fn, eq_pred, table, not_found, ...}) key = let + val arr = !table + val sz = Array.length arr + val hash = hash_fn key + val indx = index (hash, sz) + fun look HTRep.NIL = raise not_found + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso eq_pred(key, k)) + then v + else look r + in + look (Array.sub (arr, indx)) + end + + (* look for an item, return NONE if the item doesn't exist *) + fun find (HT{hash_fn, eq_pred, table, ...}) key = let + val arr = !table + val sz = Array.length arr + val hash = hash_fn key + val indx = index (hash, sz) + fun look HTRep.NIL = NONE + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso eq_pred(key, k)) + then SOME v + else look r + in + look (Array.sub (arr, indx)) + end + + (* Remove an item. The table's exception is raised if + * the item doesn't exist. + *) + fun remove (HT{hash_fn, eq_pred, not_found, table, n_items}) key = let + val arr = !table + val sz = Array.length arr + val hash = hash_fn key + val indx = index (hash, sz) + fun look HTRep.NIL = raise not_found + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso eq_pred(key, k)) + then (v, r) + else let val (item, r') = look r in (item, HTRep.B(h, k, v, r')) end + val (item, bucket) = look (Array.sub (arr, indx)) + in + Array.update (arr, indx, bucket); + n_items := !n_items - 1; + item + end (* remove *) + + (* Return the number of items in the table *) + fun numItems (HT{n_items, ...}) = !n_items + + (* return a list of the items in the table *) + fun listItems (HT{table = ref arr, n_items, ...}) = + HTRep.listItems (arr, n_items) + fun listItemsi (HT{table = ref arr, n_items, ...}) = + HTRep.listItemsi (arr, n_items) + + (* Apply a function to the entries of the table *) + fun appi f (HT{table, ...}) = HTRep.appi f (! table) + fun app f (HT{table, ...}) = HTRep.app f (! table) + + (* Map a table to a new table that has the same keys and exception *) + fun mapi f (HT{hash_fn, eq_pred, table, n_items, not_found}) = HT{ + hash_fn = hash_fn, eq_pred = eq_pred, + table = ref(HTRep.mapi f (! table)), + n_items = ref(!n_items), + not_found = not_found + } + + (* Map a table to a new table that has the same keys and exception *) + fun map f (HT{hash_fn, eq_pred, table, n_items, not_found}) = HT{ + hash_fn = hash_fn, eq_pred = eq_pred, + table = ref(HTRep.map f (! table)), + n_items = ref(!n_items), + not_found = not_found + } + + (* Fold a function over the entries of the table *) + fun foldi f init (HT{table, ...}) = HTRep.foldi f init (! table) + fun fold f init (HT{table, ...}) = HTRep.fold f init (! table) + + (* modify the hash-table items in place *) + fun modifyi f (HT{table, ...}) = HTRep.modifyi f (!table) + fun modify f (HT{table, ...}) = HTRep.modify f (!table) + + (* remove any hash table items that do not satisfy the given + * predicate. + *) + fun filteri pred (HT{table, n_items, ...}) = + n_items := HTRep.filteri pred (! table) + fun filter pred (HT{table, n_items, ...}) = + n_items := HTRep.filter pred (! table) + + (* Create a copy of a hash table *) + fun copy (HT{hash_fn, eq_pred, table, n_items, not_found}) =HT{ + hash_fn = hash_fn, eq_pred = eq_pred, + table = ref(HTRep.copy (! table)), n_items = ref(!n_items), + not_found = not_found + } + + (* returns a list of the sizes of the various buckets. This is to + * allow users to gauge the quality of their hashing function. + *) + fun bucketSizes (HT{table, ...}) = HTRep.bucketSizes(! table) + + end (* HashTable *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-binary-map.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-binary-map.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-binary-map.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-binary-map.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,486 @@ +(* int-binary-map.sml + * + * COPYRIGHT (c) 2012 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * This code was adapted from Stephen Adams' binary tree implementation + * of applicative integer sets. + * + * Copyright 1992 Stephen Adams. + * + * This software may be used freely provided that: + * 1. This copyright notice is attached to any copy, derived work, + * or work including all or part of this software. + * 2. Any derived work must contain a prominent notice stating that + * it has been altered from the original. + * + * + * Name(s): Stephen Adams. + * Department, Institution: Electronics & Computer Science, + * University of Southampton + * Address: Electronics & Computer Science + * University of Southampton + * Southampton SO9 5NH + * Great Britian + * E-mail: sra@ecs.soton.ac.uk + * + * Comments: + * + * 1. The implementation is based on Binary search trees of Bounded + * Balance, similar to Nievergelt & Reingold, SIAM J. Computing + * 2(1), March 1973. The main advantage of these trees is that + * they keep the size of the tree in the node, giving a constant + * time size operation. + * + * 2. The bounded balance criterion is simpler than N&R's alpha. + * Simply, one subtree must not have more than `weight' times as + * many elements as the opposite subtree. Rebalancing is + * guaranteed to reinstate the criterion for weight>2.23, but + * the occasional incorrect behaviour for weight=2 is not + * detrimental to performance. + * + * Altered to work as a geneal intmap - Emden Gansner + *) + +structure IntBinaryMap :> ORD_MAP where type Key.ord_key = Int.int = + struct + + structure Key = + struct + type ord_key = Int.int + val compare = Int.compare + end + + (* + ** val weight = 3 + ** fun wt i = weight * i + *) + fun wt (i : int) = i + i + i + + datatype 'a map + = E + | T of { + key : int, + value : 'a, + cnt : int, + left : 'a map, + right : 'a map + } + + fun isEmpty E = true + | isEmpty _ = false + + fun numItems E = 0 + | numItems (T{cnt,...}) = cnt + + (* return the first item in the map (or NONE if it is empty) *) + fun first E = NONE + | first (T{value, left=E, ...}) = SOME value + | first (T{left, ...}) = first left + + (* return the first item in the map and its key (or NONE if it is empty) *) + fun firsti E = NONE + | firsti (T{key, value, left=E, ...}) = SOME(key, value) + | firsti (T{left, ...}) = firsti left + +local + fun N(k,v,E,E) = T{key=k,value=v,cnt=1,left=E,right=E} + | N(k,v,E,r as T n) = T{key=k,value=v,cnt=1+(#cnt n),left=E,right=r} + | N(k,v,l as T n,E) = T{key=k,value=v,cnt=1+(#cnt n),left=l,right=E} + | N(k,v,l as T n,r as T n') = + T{key=k,value=v,cnt=1+(#cnt n)+(#cnt n'),left=l,right=r} + + fun single_L (a,av,x,T{key=b,value=bv,left=y,right=z,...}) = + N(b,bv,N(a,av,x,y),z) + | single_L _ = raise Match + fun single_R (b,bv,T{key=a,value=av,left=x,right=y,...},z) = + N(a,av,x,N(b,bv,y,z)) + | single_R _ = raise Match + fun double_L (a,av,w,T{key=c,value=cv,left=T{key=b,value=bv,left=x,right=y,...},right=z,...}) = + N(b,bv,N(a,av,w,x),N(c,cv,y,z)) + | double_L _ = raise Match + fun double_R (c,cv,T{key=a,value=av,left=w,right=T{key=b,value=bv,left=x,right=y,...},...},z) = + N(b,bv,N(a,av,w,x),N(c,cv,y,z)) + | double_R _ = raise Match + + fun T' (k,v,E,E) = T{key=k,value=v,cnt=1,left=E,right=E} + | T' (k,v,E,r as T{right=E,left=E,...}) = + T{key=k,value=v,cnt=2,left=E,right=r} + | T' (k,v,l as T{right=E,left=E,...},E) = + T{key=k,value=v,cnt=2,left=l,right=E} + + | T' (p as (_,_,E,T{left=T _,right=E,...})) = double_L p + | T' (p as (_,_,T{left=E,right=T _,...},E)) = double_R p + + (* these cases almost never happen with small weight*) + | T' (p as (_,_,E,T{left=T{cnt=ln,...},right=T{cnt=rn,...},...})) = + if ln < rn then single_L p else double_L p + | T' (p as (_,_,T{left=T{cnt=ln,...},right=T{cnt=rn,...},...},E)) = + if ln > rn then single_R p else double_R p + + | T' (p as (_,_,E,T{left=E,...})) = single_L p + | T' (p as (_,_,T{right=E,...},E)) = single_R p + + | T' (p as (k,v,l as T{cnt=ln,left=ll,right=lr,...}, + r as T{cnt=rn,left=rl,right=rr,...})) = + if rn >= wt ln then (*right is too big*) + let val rln = numItems rl + val rrn = numItems rr + in + if rln < rrn then single_L p else double_L p + end + + else if ln >= wt rn then (*left is too big*) + let val lln = numItems ll + val lrn = numItems lr + in + if lrn < lln then single_R p else double_R p + end + + else T{key=k,value=v,cnt=ln+rn+1,left=l,right=r} + + local + fun min (T{left=E,key,value,...}) = (key,value) + | min (T{left,...}) = min left + | min _ = raise Match + + fun delmin (T{left=E,right,...}) = right + | delmin (T{key,value,left,right,...}) = T'(key,value,delmin left,right) + | delmin _ = raise Match + in + fun delete' (E,r) = r + | delete' (l,E) = l + | delete' (l,r) = let val (mink,minv) = min r in + T'(mink,minv,l,delmin r) + end + end +in + val empty = E + + fun singleton (x,v) = T{key=x,value=v,cnt=1,left=E,right=E} + + fun insert (E,x,v) = T{key=x,value=v,cnt=1,left=E,right=E} + | insert (T(set as {key,left,right,value,...}),x,v) = + if key > x then T'(key,value,insert(left,x,v),right) + else if key < x then T'(key,value,left,insert(right,x,v)) + else T{key=x,value=v,left=left,right=right,cnt= #cnt set} + fun insert' ((k, x), m) = insert(m, k, x) + + fun insertWithi comb (m, x, v) = let + fun insert E = T{key=x, value=v, cnt=1, left=E, right=E} + | insert (T{key, left, right, value, cnt}) = + if key > x then T'(key, value, insert left,right) + else if key < x then T'(key, value, left, insert right) + else let + val v' = comb(x, value, v) + in + T{key=x,value=v,left=left,right=right,cnt=cnt} + end + in + insert m + end + fun insertWith comb = insertWithi (fn (_, x1, x2) => comb(x1, x2)) + + fun inDomain (set, x) = let + fun mem E = false + | mem (T(n as {key,left,right,...})) = + if x > key then mem right + else if x < key then mem left + else true + in + mem set + end + + fun find (set, x) = let + fun mem E = NONE + | mem (T(n as {key,left,right,...})) = + if x > key then mem right + else if x < key then mem left + else SOME(#value n) + in + mem set + end + + fun lookup (set, x) = let + fun mem E = raise LibBase.NotFound + | mem (T(n as {key,left,right,...})) = + if x > key then mem right + else if x < key then mem left + else #value n + in + mem set + end + + fun remove (E,x) = raise LibBase.NotFound + | remove (set as T{key,left,right,value,...},x) = + if key > x then + let val (left',v) = remove(left,x) + in (T'(key,value,left',right),v) end + else if key < x then + let val (right',v) = remove(right,x) + in (T'(key,value,left,right'),v) end + else (delete'(left,right),value) + + fun listItems d = let + fun d2l (E, l) = l + | d2l (T{key,value,left,right,...}, l) = + d2l(left, value::(d2l(right,l))) + in + d2l (d,[]) + end + + fun listItemsi d = let + fun d2l (E, l) = l + | d2l (T{key,value,left,right,...}, l) = + d2l(left, (key,value)::(d2l(right,l))) + in + d2l (d,[]) + end + + fun listKeys d = let + fun d2l (E, l) = l + | d2l (T{key,left,right,...}, l) = d2l(left, key::(d2l(right,l))) + in + d2l (d,[]) + end + + local + fun next ((t as T{right, ...})::rest) = (t, left(right, rest)) + | next _ = (E, []) + and left (E, rest) = rest + | left (t as T{left=l, ...}, rest) = left(l, t::rest) + in + fun collate cmpRng (s1, s2) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => EQUAL + | ((E, _), _) => LESS + | (_, (E, _)) => GREATER + | ((T{key=x1, value=y1, ...}, r1), (T{key=x2, value=y2, ...}, r2)) => ( + case Key.compare(x1, x2) + of EQUAL => (case cmpRng(y1, y2) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + | order => order + (* end case *)) + (* end case *)) + in + cmp (left(s1, []), left(s2, [])) + end + end (* local *) + + fun appi f d = let + fun appf E = () + | appf (T{key,value,left,right,...}) = ( + appf left; f(key,value); appf right) + in + appf d + end + fun app f d = appi (fn (_, v) => f v) d + + fun mapi f d = let + fun mapf E = E + | mapf (T{key,value,left,right,cnt}) = let + val left' = mapf left + val value' = f(key, value) + val right' = mapf right + in + T{cnt=cnt, key=key, value=value', left = left', right = right'} + end + in + mapf d + end + fun map f d = mapi (fn (_, x) => f x) d + + fun foldli f init d = let + fun fold (E,v) = v + | fold (T{key,value,left,right,...},v) = + fold (right, f(key, value, fold(left, v))) + in + fold (d, init) + end + fun foldl f init d = foldli (fn (_, v, accum) => f (v, accum)) init d + + fun foldri f init d = let + fun fold (E,v) = v + | fold (T{key,value,left,right,...},v) = + fold (left, f(key, value, fold(right, v))) + in + fold (d, init) + end + fun foldr f init d = foldri (fn (_, v, accum) => f (v, accum)) init d + + end (* local *) + +(* the following are generic implementations of the unionWith, intersectWith, + * and mergeWith operetions. These should be specialized for the internal + * representations at some point. + *) + fun unionWith f (m1, m2) = let + fun ins f (key, x, m) = (case find(m, key) + of NONE => insert(m, key, x) + | (SOME x') => insert(m, key, f(x, x')) + (* end case *)) + in + if (numItems m1 > numItems m2) + then foldli (ins (fn (a, b) => f (b, a))) m1 m2 + else foldli (ins f) m2 m1 + end + fun unionWithi f (m1, m2) = let + fun ins f (key, x, m) = (case find(m, key) + of NONE => insert(m, key, x) + | (SOME x') => insert(m, key, f(key, x, x')) + (* end case *)) + in + if (numItems m1 > numItems m2) + then foldli (ins (fn (k, a, b) => f (k, b, a))) m1 m2 + else foldli (ins f) m2 m1 + end + + fun intersectWith f (m1, m2) = let + (* iterate over the elements of m1, checking for membership in m2 *) + fun intersect f (m1, m2) = let + fun ins (key, x, m) = (case find(m2, key) + of NONE => m + | (SOME x') => insert(m, key, f(x, x')) + (* end case *)) + in + foldli ins empty m1 + end + in + if (numItems m1 > numItems m2) + then intersect f (m1, m2) + else intersect (fn (a, b) => f(b, a)) (m2, m1) + end + fun intersectWithi f (m1, m2) = let + (* iterate over the elements of m1, checking for membership in m2 *) + fun intersect f (m1, m2) = let + fun ins (key, x, m) = (case find(m2, key) + of NONE => m + | (SOME x') => insert(m, key, f(key, x, x')) + (* end case *)) + in + foldli ins empty m1 + end + in + if (numItems m1 > numItems m2) + then intersect f (m1, m2) + else intersect (fn (k, a, b) => f(k, b, a)) (m2, m1) + end + + fun mergeWith f (m1, m2) = let + fun merge ([], [], m) = m + | merge ((k1, x1)::r1, [], m) = mergef (k1, SOME x1, NONE, r1, [], m) + | merge ([], (k2, x2)::r2, m) = mergef (k2, NONE, SOME x2, [], r2, m) + | merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), m) = ( + if (k1 < k2) + then mergef (k1, SOME x1, NONE, r1, m2, m) + else if (k1 = k2) + then mergef (k1, SOME x1, SOME x2, r1, r2, m) + else mergef (k2, NONE, SOME x2, m1, r2, m) + (* end case *)) + and mergef (k, x1, x2, r1, r2, m) = (case f (x1, x2) + of NONE => merge (r1, r2, m) + | SOME y => merge (r1, r2, insert(m, k, y)) + (* end case *)) + in + merge (listItemsi m1, listItemsi m2, empty) + end + fun mergeWithi f (m1, m2) = let + fun merge ([], [], m) = m + | merge ((k1, x1)::r1, [], m) = mergef (k1, SOME x1, NONE, r1, [], m) + | merge ([], (k2, x2)::r2, m) = mergef (k2, NONE, SOME x2, [], r2, m) + | merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), m) = ( + if (k1 < k2) + then mergef (k1, SOME x1, NONE, r1, m2, m) + else if (k1 = k2) + then mergef (k1, SOME x1, SOME x2, r1, r2, m) + else mergef (k2, NONE, SOME x2, m1, r2, m) + (* end case *)) + and mergef (k, x1, x2, r1, r2, m) = (case f (k, x1, x2) + of NONE => merge (r1, r2, m) + | SOME y => merge (r1, r2, insert(m, k, y)) + (* end case *)) + in + merge (listItemsi m1, listItemsi m2, empty) + end + + (* this is a generic implementation of filter. It should + * be specialized to the data-structure at some point. + *) + fun filter predFn m = let + fun f (key, item, m) = if predFn item + then insert(m, key, item) + else m + in + foldli f empty m + end + fun filteri predFn m = let + fun f (key, item, m) = if predFn(key, item) + then insert(m, key, item) + else m + in + foldli f empty m + end + + (* this is a generic implementation of mapPartial. It should + * be specialized to the data-structure at some point. + *) + fun mapPartial f m = let + fun g (key, item, m) = (case f item + of NONE => m + | (SOME item') => insert(m, key, item') + (* end case *)) + in + foldli g empty m + end + fun mapPartiali f m = let + fun g (key, item, m) = (case f(key, item) + of NONE => m + | (SOME item') => insert(m, key, item') + (* end case *)) + in + foldli g empty m + end + + (* check the elements of a map with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + * Elements are checked in key order. + *) + fun exists pred = let + fun exists' E = false + | exists' (T{value, left, right, ...}) = + exists' left orelse pred value orelse exists' right + in + exists' + end + fun existsi pred = let + fun exists' E = false + | exists' (T{key, value, left, right, ...}) = + exists' left orelse pred(key, value) orelse exists' right + in + exists' + end + + (* check the elements of a map with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. Elements + * are checked in key order. + *) + fun all pred = let + fun all' E = true + | all' (T{value, left, right, ...}) = + all' left andalso pred value andalso all' right + in + all' + end + fun alli pred = let + fun all' E = true + | all' (T{key, value, left, right, ...}) = + all' left andalso pred(key, value) andalso all' right + in + all' + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-binary-set.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-binary-set.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-binary-set.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-binary-set.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,476 @@ +(* int-binary-set.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * This code was adapted from Stephen Adams' binary tree implementation + * of applicative integer sets. + * + * Copyright 1992 Stephen Adams. + * + * This software may be used freely provided that: + * 1. This copyright notice is attached to any copy, derived work, + * or work including all or part of this software. + * 2. Any derived work must contain a prominent notice stating that + * it has been altered from the original. + * + * Altered to conform to SML library interface - Emden Gansner + * + * + * Name(s): Stephen Adams. + * Department, Institution: Electronics & Computer Science, + * University of Southampton + * Address: Electronics & Computer Science + * University of Southampton + * Southampton SO9 5NH + * Great Britian + * E-mail: sra@ecs.soton.ac.uk + * + * Comments: + * + * 1. The implementation is based on Binary search trees of Bounded + * Balance, similar to Nievergelt & Reingold, SIAM J. Computing + * 2(1), March 1973. The main advantage of these trees is that + * they keep the size of the tree in the node, giving a constant + * time size operation. + * + * 2. The bounded balance criterion is simpler than N&R's alpha. + * Simply, one subtree must not have more than `weight' times as + * many elements as the opposite subtree. Rebalancing is + * guaranteed to reinstate the criterion for weight>2.23, but + * the occasional incorrect behaviour for weight=2 is not + * detrimental to performance. + * + * 3. There are two implementations of union. The default, + * hedge_union, is much more complex and usually 20% faster. I + * am not sure that the performance increase warrants the + * complexity (and time it took to write), but I am leaving it + * in for the competition. It is derived from the original + * union by replacing the split_lt(gt) operations with a lazy + * version. The `obvious' version is called old_union. + * + * 4. Most time is spent in T', the rebalancing constructor. If my + * understanding of the output of * in the sml batch + * compiler is correct then the code produced by NJSML 0.75 + * (sparc) for the final case is very disappointing. Most + * invocations fall through to this case and most of these cases + * fall to the else part, i.e. the plain contructor, + * T(v,ln+rn+1,l,r). The poor code allocates a 16 word vector + * and saves lots of registers into it. In the common case it + * then retrieves a few of the registers and allocates the 5 + * word T node. The values that it retrieves were live in + * registers before the massive save. + *) + +structure IntBinarySet :> ORD_SET where type Key.ord_key = Int.int = + struct + + structure Key = + struct + type ord_key = Int.int + val compare = Int.compare + end + + type item = Key.ord_key + + datatype set + = E + | T of { + elt : item, + cnt : int, + left : set, + right : set + } + + fun numItems E = 0 + | numItems (T{cnt,...}) = cnt + + fun isEmpty E = true + | isEmpty _ = false + + fun minItem E = raise Empty + | minItem (T{elt, left=E, ...}) = elt + | minItem (T{left, ...}) = minItem left + + fun maxItem E = raise Empty + | maxItem (T{elt, right=E, ...}) = elt + | maxItem (T{right, ...}) = maxItem right + + fun mkT(v,n,l,r) = T{elt=v,cnt=n,left=l,right=r} + + (* N(v,l,r) = T(v,1+numItems(l)+numItems(r),l,r) *) + fun N(v,E,E) = mkT(v,1,E,E) + | N(v,E,r as T{cnt=n,...}) = mkT(v,n+1,E,r) + | N(v,l as T{cnt=n,...}, E) = mkT(v,n+1,l,E) + | N(v,l as T{cnt=n,...}, r as T{cnt=m,...}) = mkT(v,n+m+1,l,r) + + fun single_L (a,x,T{elt=b,left=y,right=z,...}) = N(b,N(a,x,y),z) + | single_L _ = raise Match + fun single_R (b,T{elt=a,left=x,right=y,...},z) = N(a,x,N(b,y,z)) + | single_R _ = raise Match + fun double_L (a,w,T{elt=c,left=T{elt=b,left=x,right=y,...},right=z,...}) = + N(b,N(a,w,x),N(c,y,z)) + | double_L _ = raise Match + fun double_R (c,T{elt=a,left=w,right=T{elt=b,left=x,right=y,...},...},z) = + N(b,N(a,w,x),N(c,y,z)) + | double_R _ = raise Match + + (* + ** val weight = 3 + ** fun wt i = weight * i + *) + fun wt (i : int) = i + i + i + + fun T' (v,E,E) = mkT(v,1,E,E) + | T' (v,E,r as T{left=E,right=E,...}) = mkT(v,2,E,r) + | T' (v,l as T{left=E,right=E,...},E) = mkT(v,2,l,E) + + | T' (p as (_,E,T{left=T _,right=E,...})) = double_L p + | T' (p as (_,T{left=E,right=T _,...},E)) = double_R p + + (* these cases almost never happen with small weight*) + | T' (p as (_,E,T{left=T{cnt=ln,...},right=T{cnt=rn,...},...})) = + if lnrn then single_R p else double_R p + + | T' (p as (_,E,T{left=E,...})) = single_L p + | T' (p as (_,T{right=E,...},E)) = single_R p + + | T' (p as (v,l as T{elt=lv,cnt=ln,left=ll,right=lr}, + r as T{elt=rv,cnt=rn,left=rl,right=rr})) = + if rn >= wt ln (*right is too big*) + then + let val rln = numItems rl + val rrn = numItems rr + in + if rln < rrn then single_L p else double_L p + end + else if ln >= wt rn (*left is too big*) + then + let val lln = numItems ll + val lrn = numItems lr + in + if lrn < lln then single_R p else double_R p + end + else mkT(v,ln+rn+1,l,r) + + fun add (E,x) = mkT(x,1,E,E) + | add (set as T{elt=v,left=l,right=r,cnt},x) = ( + case Key.compare(x,v) + of LESS => T'(v,add(l,x),r) + | GREATER => T'(v,l,add(r,x)) + | EQUAL => mkT(x,cnt,l,r) + (* end case *)) + fun add' (s, x) = add(x, s) + + fun concat3 (E,v,r) = add(r,v) + | concat3 (l,v,E) = add(l,v) + | concat3 (l as T{elt=v1,cnt=n1,left=l1,right=r1}, v, + r as T{elt=v2,cnt=n2,left=l2,right=r2}) = + if wt n1 < n2 then T'(v2,concat3(l,v,l2),r2) + else if wt n2 < n1 then T'(v1,l1,concat3(r1,v,r)) + else N(v,l,r) + + fun split_lt (E,x) = E + | split_lt (T{elt=v,left=l,right=r,...},x) = + case Key.compare(v,x) of + GREATER => split_lt(l,x) + | LESS => concat3(l,v,split_lt(r,x)) + | _ => l + + fun split_gt (E,x) = E + | split_gt (T{elt=v,left=l,right=r,...},x) = + case Key.compare(v,x) of + LESS => split_gt(r,x) + | GREATER => concat3(split_gt(l,x),v,r) + | _ => r + + fun min (T{elt=v,left=E,...}) = v + | min (T{left=l,...}) = min l + | min _ = raise Match + + fun delmin (T{left=E,right=r,...}) = r + | delmin (T{elt=v,left=l,right=r,...}) = T'(v,delmin l,r) + | delmin _ = raise Match + + fun delete' (E,r) = r + | delete' (l,E) = l + | delete' (l,r) = T'(min r,l,delmin r) + + fun concat (E, s) = s + | concat (s, E) = s + | concat (t1 as T{elt=v1,cnt=n1,left=l1,right=r1}, + t2 as T{elt=v2,cnt=n2,left=l2,right=r2}) = + if wt n1 < n2 then T'(v2,concat(t1,l2),r2) + else if wt n2 < n1 then T'(v1,l1,concat(r1,t2)) + else T'(min t2,t1, delmin t2) + + + local + fun trim (lo,hi,E) = E + | trim (lo,hi,s as T{elt=v,left=l,right=r,...}) = + if (v > lo) + then if (v < hi) then s else trim(lo,hi,l) + else trim(lo,hi,r) + + fun uni_bd (s,E,_,_) = s + | uni_bd (E,T{elt=v,left=l,right=r,...},lo,hi) = + concat3(split_gt(l,lo),v,split_lt(r,hi)) + | uni_bd (T{elt=v,left=l1,right=r1,...}, + s2 as T{elt=v2,left=l2,right=r2,...},lo,hi) = + concat3(uni_bd(l1,trim(lo,v,s2),lo,v), + v, + uni_bd(r1,trim(v,hi,s2),v,hi)) + (* inv: lo < v < hi *) + + (* all the other versions of uni and trim are + * specializations of the above two functions with + * lo=-infinity and/or hi=+infinity + *) + + fun trim_lo (_, E) = E + | trim_lo (lo,s as T{elt=v,right=r,...}) = + case Key.compare(v,lo) of + GREATER => s + | _ => trim_lo(lo,r) + + fun trim_hi (_, E) = E + | trim_hi (hi,s as T{elt=v,left=l,...}) = + case Key.compare(v,hi) of + LESS => s + | _ => trim_hi(hi,l) + + fun uni_hi (s,E,_) = s + | uni_hi (E,T{elt=v,left=l,right=r,...},hi) = + concat3(l,v,split_lt(r,hi)) + | uni_hi (T{elt=v,left=l1,right=r1,...}, + s2 as T{elt=v2,left=l2,right=r2,...},hi) = + concat3(uni_hi(l1,trim_hi(v,s2),v),v,uni_bd(r1,trim(v,hi,s2),v,hi)) + + fun uni_lo (s,E,_) = s + | uni_lo (E,T{elt=v,left=l,right=r,...},lo) = + concat3(split_gt(l,lo),v,r) + | uni_lo (T{elt=v,left=l1,right=r1,...}, + s2 as T{elt=v2,left=l2,right=r2,...},lo) = + concat3(uni_bd(l1,trim(lo,v,s2),lo,v),v,uni_lo(r1,trim_lo(v,s2),v)) + + fun uni (s,E) = s + | uni (E,s) = s + | uni (T{elt=v,left=l1,right=r1,...}, + s2 as T{elt=v2,left=l2,right=r2,...}) = + concat3(uni_hi(l1,trim_hi(v,s2),v), v, uni_lo(r1,trim_lo(v,s2),v)) + + in + val hedge_union = uni + end + + (* The old_union version is about 20% slower than + * hedge_union in most cases + *) + fun old_union (E,s2) = s2 + | old_union (s1,E) = s1 + | old_union (T{elt=v,left=l,right=r,...},s2) = + let val l2 = split_lt(s2,v) + val r2 = split_gt(s2,v) + in + concat3(old_union(l,l2),v,old_union(r,r2)) + end + + val empty = E + fun singleton x = T{elt=x,cnt=1,left=E,right=E} + + fun addList (s,l) = List.foldl (fn (i,s) => add(s,i)) s l + + fun fromList l = addList (E, l) + + val add = add + + fun member (set, x) = let + fun pk E = false + | pk (T{elt=v, left=l, right=r, ...}) = ( + case Key.compare(x,v) + of LESS => pk l + | EQUAL => true + | GREATER => pk r + (* end case *)) + in + pk set + end + + local + (* true if every item in t is in t' *) + fun treeIn (t,t') = let + fun isIn E = true + | isIn (T{elt,left=E,right=E,...}) = member(t',elt) + | isIn (T{elt,left,right=E,...}) = + member(t',elt) andalso isIn left + | isIn (T{elt,left=E,right,...}) = + member(t',elt) andalso isIn right + | isIn (T{elt,left,right,...}) = + member(t',elt) andalso isIn left andalso isIn right + in + isIn t + end + in + fun isSubset (E,_) = true + | isSubset (_,E) = false + | isSubset (t as T{cnt=n,...},t' as T{cnt=n',...}) = + (n<=n') andalso treeIn (t,t') + + fun equal (E,E) = true + | equal (t as T{cnt=n,...},t' as T{cnt=n',...}) = + (n=n') andalso treeIn (t,t') + | equal _ = false + end + + local + fun next ((t as T{right, ...})::rest) = (t, left(right, rest)) + | next _ = (E, []) + and left (E, rest) = rest + | left (t as T{left=l, ...}, rest) = left(l, t::rest) + in + fun compare (s1, s2) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => EQUAL + | ((E, _), _) => LESS + | (_, (E, _)) => GREATER + | ((T{elt=e1, ...}, r1), (T{elt=e2, ...}, r2)) => ( + case Key.compare(e1, e2) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + (* end case *)) + in + cmp (left(s1, []), left(s2, [])) + end + + fun disjoint (s1, s2) = let + fun walk (t1, t2) = (case (next t1, next t2) + of ((E, _), _) => true + | (_, (E, _)) => true + | ((T{elt=e1, ...}, r1), (T{elt=e2, ...}, r2)) => + ((e1 < e2) andalso walk (r1, t2)) + orelse ((e1 > e2) andalso walk (t1, r2)) + (* end case *)) + in + walk (left(s1, []), left(s2, [])) + end + end + + fun delete (E,x) = raise LibBase.NotFound + | delete (set as T{elt=v,left=l,right=r,...},x) = + case Key.compare(x,v) of + LESS => T'(v,delete(l,x),r) + | GREATER => T'(v,l,delete(r,x)) + | _ => delete'(l,r) + + val union = hedge_union + + fun intersection (E, _) = E + | intersection (_, E) = E + | intersection (s, T{elt=v,left=l,right=r,...}) = let + val l2 = split_lt(s,v) + val r2 = split_gt(s,v) + in + if member(s,v) + then concat3(intersection(l2,l),v,intersection(r2,r)) + else concat(intersection(l2,l),intersection(r2,r)) + end + + fun difference (E,s) = E + | difference (s,E) = s + | difference (s, T{elt=v,left=l,right=r,...}) = + let val l2 = split_lt(s,v) + val r2 = split_gt(s,v) + in + concat(difference(l2,l),difference(r2,r)) + end + + fun subtract (s, item) = difference (s, singleton item) + fun subtract' (item, s) = subtract (s, item) + + fun subtractList (l, items) = let + val items' = List.foldl (fn (x, set) => add(set, x)) E items + in + difference (l, items') + end + + fun map f set = let + fun map'(acc, E) = acc + | map'(acc, T{elt,left,right,...}) = + map' (add (map' (acc, left), f elt), right) + in + map' (E, set) + end + + fun mapPartial f set = let + fun map' (acc, E) = acc + | map' (acc, T{elt, left, right, ...}) = let + val acc = map' (acc, left) + in + case f elt + of NONE => map' (acc, right) + | SOME elt' => map' (add (acc, elt'), right) + (* end case *) + end + in + map' (E, set) + end + + fun app apf = + let fun apply E = () + | apply (T{elt,left,right,...}) = + (apply left;apf elt; apply right) + in + apply + end + + fun foldl f b set = let + fun foldf (E, b) = b + | foldf (T{elt,left,right,...}, b) = + foldf (right, f(elt, foldf (left, b))) + in + foldf (set, b) + end + + fun foldr f b set = let + fun foldf (E, b) = b + | foldf (T{elt,left,right,...}, b) = + foldf (left, f(elt, foldf (right, b))) + in + foldf (set, b) + end + + fun toList set = foldr (op::) [] set + + fun filter pred set = + foldl (fn (item, s) => if (pred item) then add(s, item) else s) + empty set + + fun partition pred set = + foldl + (fn (item, (s1, s2)) => + if (pred item) then (add(s1, item), s2) else (s1, add(s2, item)) + ) + (empty, empty) set + + fun exists p E = false + | exists p (T{elt, left, right,...}) = + (exists p left) orelse (p elt) orelse (exists p right) + + fun all p E = true + | all p (T{elt, left, right,...}) = + (all p left) andalso (p elt) andalso (all p right) + + fun find p E = NONE + | find p (T{elt,left,right,...}) = (case find p left + of NONE => if (p elt) + then SOME elt + else find p right + | a => a + (* end case *)) + + (* deprecated *) + val listItems = toList + + end (* IntBinarySet *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/interval-domain-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/interval-domain-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/interval-domain-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/interval-domain-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,31 @@ +(* interval-domain-sig.sml + * + * COPYRIGHT (c) 2005 John Reppy (http://www.cs.uchicago.edu/~jhr) + * All rights reserved. + * + * The domain over which we define interval sets. + *) + +signature INTERVAL_DOMAIN = + sig + + (* the abstract type of elements in the domain *) + type point + + (* compare the order of two points *) + val compare : (point * point) -> order + + (* successor and predecessor functions on the domain *) + val succ : point -> point + val pred : point -> point + + (* isSucc(a, b) ==> (succ a) = b and a = (pred b). *) + val isSucc : (point * point) -> bool + + (* the minimum and maximum bounds of the domain; we require that + * pred minPt = minPt and succ maxPt = maxPt. + *) + val minPt : point + val maxPt : point + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/interval-set-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/interval-set-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/interval-set-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/interval-set-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,352 @@ +(* interfun-set-fn.sml + * + * COPYRIGHT (c) 2005 John Reppy (http://www.cs.uchicago.edu/~jhr) + * All rights reserved. + * + * An implementation of sets over a discrete ordered domain, where the + * sets are represented by intervals. It is meant for representing + * dense sets (e.g., unicode character classes). + *) + +functor IntervalSetFn (D : INTERVAL_DOMAIN) : INTERVAL_SET = + struct + + structure D = D + + type item = D.point + type interval = (D.point * D.point) + + fun min (a, b) = (case D.compare(a, b) + of LESS => a + | _ => b + (* end case *)) + + (* the set is represented by an ordered list of disjoint, non-adjacent intervals *) + datatype set = SET of interval list + + val empty = SET[] + val universe = SET[(D.minPt, D.maxPt)] + + fun isEmpty (SET []) = true + | isEmpty _ = false + + fun isUniverse (SET[(a, b)]) = + (D.compare(a, D.minPt) = EQUAL) andalso (D.compare(b, D.maxPt) = EQUAL) + | isUniverse _ = false + + fun singleton x = SET[(x, x)] + + fun interval (a, b) = (case D.compare(a, b) + of GREATER => raise Domain + | _ => SET[(a, b)] + (* end case *)) + + fun addInt (SET l, (a, b)) = let + fun ins (a, b, []) = [(a, b)] + | ins (a, b, (x, y)::r) = (case D.compare(b, x) + of LESS => if (D.isSucc(b, x)) + then (a, y)::r + else (a, b)::(x, y)::r + | EQUAL => (a, y)::r + | GREATER => (case D.compare(a, y) + of GREATER => if (D.isSucc(y, a)) + then (x, b) :: r + else (x, y) :: ins(a, b, r) + | EQUAL => ins(x, b, r) + | LESS => (case D.compare(b, y) + of GREATER => ins (min(a, x), b, r) + | _ => ins (min(a, x), y, r) + (* end case *)) + (* end case *)) + (* end case *)) + in + case D.compare(a, b) + of GREATER => raise Domain + | _ => SET(ins (a, b, l)) + (* end case *) + end + fun addInt' (x, m) = addInt (m, x) + + fun add (SET l, a) = let + fun ins (a, []) = [(a, a)] + | ins (a, (x, y)::r) = (case D.compare(a, x) + of LESS => if (D.isSucc(a, x)) + then (a, y)::r + else (a, a)::(x, y)::r + | EQUAL => (a, y)::r + | GREATER => (case D.compare(a, y) + of GREATER => if (D.isSucc(y, a)) + then (x, a) :: r + else (x, y) :: ins(a, r) + | _ => (x, y)::r + (* end case *)) + (* end case *)) + in + SET(ins (a, l)) + end + fun add' (x, m) = add (m, x) + + fun fromList items = List.foldl add' empty items + + (* is a point in any of the intervals in the set *) + fun member (SET l, pt) = let + fun look [] = false + | look ((a, b) :: r) = (case D.compare(a, pt) + of LESS => (case D.compare(pt, b) + of GREATER => look r + | _ => true + (* end case *)) + | EQUAL => true + | GREATER => false + (* end case *)) + in + look l + end + + fun complement (SET[]) = universe + | complement (SET((a, b)::r)) = let + fun comp (start, (a, b)::r, l) = + comp(D.succ b, r, (start, D.pred a)::l) + | comp (start, [], l) = (case D.compare(start, D.maxPt) + of LESS => SET(List.rev((start, D.maxPt)::l)) + | _ => SET(List.rev l) + (* end case *)) + in + case D.compare(D.minPt, a) + of LESS => comp(D.succ b, r, [(D.minPt, D.pred a)]) + | _ => comp(D.succ b, r, []) + (* end case *) + end + + fun union (SET l1, SET l2) = let + fun join ([], l2) = l2 + | join (l1, []) = l1 + | join ((a1, b1)::r1, (a2, b2)::r2) = (case D.compare(a1, a2) + of LESS => (case D.compare(b1, b2) + of LESS => if D.isSucc(b1, a2) + then join(r1, (a1, b2)::r2) + else (a1, b1) :: join(r1, (a2, b2)::r2) + | EQUAL => (a1, b1) :: join(r1, r2) + | GREATER => join ((a1, b1)::r1, r2) + (* end case *)) + | EQUAL => (case D.compare(b1, b2) + of LESS => join(r1, (a2, b2)::r2) + | EQUAL => (a1, b1) :: join(r1, r2) + | GREATER => join ((a1, b1)::r1, r2) + (* end case *)) + | GREATER => (case D.compare(a1, b2) + of LESS => (case D.compare(b1, b2) + of LESS => join (r1, (a2, b2)::r2) + | EQUAL => (a2, b2) :: join(r1, r2) + | GREATER => join ((a2, b1)::r1, r2) + (* end case *)) + | EQUAL => (* a2 < a1 = b2 <= b1 *) + join ((a2, b1)::r1, r2) + | GREATER => if D.isSucc(b2, a1) + then join ((a2, b1)::r1, r2) + else (a2, b2) :: join ((a1, b1)::r1, r2) + (* end case *)) + (* end case *)) + in + SET(join(l1, l2)) + end + + fun intersect (SET l1, SET l2) = let + (* cons a possibly empty interval onto the front of l *) + fun cons (a, b, l) = (case D.compare(a, b) + of GREATER => l + | _ => (a, b) :: l + (* end case *)) + fun meet ([], _) = [] + | meet (_, []) = [] + | meet ((a1, b1)::r1, (a2, b2)::r2) = (case D.compare(a1, a2) + of LESS => (case D.compare(b1, a2) + of LESS => (* a1 <= b1 < a2 <= b2 *) + meet (r1, (a2, b2)::r2) + | EQUAL => (* a1 <= b1 = a2 <= b2 *) + (b1, b1) :: meet (r1, cons(D.succ b1, b2, r2)) + | GREATER => (case D.compare (b1, b2) + of LESS => (* a1 < a2 < b1 < b2 *) + (a2, b1) :: meet (r1, cons(D.succ b1, b2, r2)) + | EQUAL => (* a1 < a2 < b1 = b2 *) + (a2, b1) :: meet (r1, r2) + | GREATER => (* a1 < a2 < b1 & b2 < b1 *) + (a2, b2) :: meet (cons(D.succ b2, b1, r1), r2) + (* end case *)) + (* end case *)) + | EQUAL => (case D.compare(b1, b2) + of LESS => (a1, b1) :: meet (r1, cons(D.succ b1, b2, r2)) + | EQUAL => (a1, b1) :: meet (r1, r2) + | GREATER => (a1, b2) :: meet ((D.succ b2, b1)::r1, r2) + (* end case *)) + | GREATER => (case D.compare(b2, a1) + of LESS => (* a2 <= b2 < a1 <= b1 *) + meet ((a1, b1)::r1, r2) + | EQUAL => (* a2 < b2 = a1 <= b1 *) + (b2, b2) :: meet (cons(D.succ b2, b1, r1), r2) + | GREATER => (case D.compare(b1, b2) + of LESS => (* a2 < a1 <= b1 < b2 *) + (a1, b1) :: meet (r1, cons(D.succ b1, b2, r2)) + | EQUAL => (* a2 < a1 <= b1 = b2 *) + (a1, b1) :: meet (r1, r2) + | GREATER => (* a2 < a1 < b2 < b1 *) + (a1, b2) :: meet (cons(D.succ b2, b1, r1), r2) + (* end case *)) + (* end case *)) + (* end case *)) + in + SET(meet(l1, l2)) + end + + (* FIXME: replace the following with a direct implementation *) + fun difference (s1, s2) = intersect(s1, complement s2) + + (***** iterators on elements *****) + local + fun next [] = NONE + | next ((a, b)::r) = + if D.compare(a, b) = EQUAL + then SOME(a, r) + else SOME(a, (D.succ a, b)::r) + in + fun toList (SET l) = let + fun list (l, items) = (case next l + of NONE => List.rev items + | SOME(x, r) => list(r, x::items) + (* end case *)) + in + list (l, []) + end + fun app f (SET l) = let + fun appf l = (case next l + of NONE => () + | SOME(x, r) => (f x; appf r) + (* end case *)) + in + appf l + end + fun foldl f = let + fun foldf (l, acc) = (case next l + of NONE => acc + | SOME(x, r) => foldf(r, f(x, acc)) + (* end case *)) + in + fn init => fn (SET l) => foldf(l, init) + end + fun foldr f init (SET l) = let + fun foldf l = (case next l + of NONE => init + | SOME(x, r) => f (x, foldf r) + (* end case *)) + in + foldf l + end + fun filter pred (SET l) = let + (* given an interval [a, b], filter its elements and add the subintervals that pass + * the predicate to the list l. + *) + fun filterInt ((a, b), l) = let + fun lp (start, item, last, l) = let + val next = D.succ item + in + if pred next + then if (D.compare(next, last) = EQUAL) + then (start, next)::l + else lp(start, next, last, l) + else scan(D.succ next, last, (start, item)::l) + end + and scan (next, last, l) = if pred next + then lp (next, next, last, l) + else if (D.compare(next, last) = EQUAL) + then l + else scan(D.succ next, last, l) + in + scan (a, b, l) + end + (* filter the intervals *) + fun filter' ([], l) = SET(List.rev l) + | filter' (i::r, l) = filter' (r, filterInt (i, l)) + in + filter' (l, []) + end + fun all pred (SET l) = let + fun all' l = (case next l + of NONE => true + | SOME(x, r) => (pred x andalso all' r) + (* end case *)) + in + all' l + end + fun exists pred (SET l) = let + fun exists' l = (case next l + of NONE => false + | SOME(x, r) => (pred x orelse exists' r) + (* end case *)) + in + exists' l + end + end (* local *) + + (***** Iterators on interfuns *****) + fun intervals (SET l) = l + + fun appInt f (SET l) = List.app f l + + fun foldlInt f init (SET l) = List.foldl f init l + + fun foldrInt f init (SET l) = List.foldl f init l + + fun filterInt pred (SET l) = let + fun f' ([], l) = SET(List.rev l) + | f' (i::r, l) = if pred i + then f'(r, i::l) + else f'(r, l) + in + f' (l, []) + end + + fun existsInt pred (SET l) = List.exists pred l + + fun allInt pred (SET l) = List.all pred l + + fun compare (SET l1, SET l2) = let + fun comp ([], []) = EQUAL + | comp ((a1, b1)::r1, (a2, b2)::r2) = (case D.compare(a1, a2) + of EQUAL => (case D.compare(b1, b2) + of EQUAL => comp (r1, r2) + | someOrder => someOrder + (* end case *)) + | someOrder => someOrder + (* end case *)) + | comp ([], _) = LESS + | comp (_, []) = GREATER + in + comp(l1, l2) + end + + fun isSubset (SET l1, SET l2) = let + (* is the interval [a, b] covered by [x, y]? *) + fun isCovered (a, b, x, y) = (case D.compare(a, x) + of LESS => false + | _ => (case D.compare(y, b) + of LESS => false + | _ => true + (* end case *)) + (* end case *)) + fun test ([], _) = true + | test (_, []) = false + | test ((a1, b1)::r1, (a2, b2)::r2) = + if isCovered (a1, b1, a2, b2) + then test (r1, (a2, b2)::r2) + else (case D.compare(b2, a1) + of LESS => test ((a1, b1)::r1, r2) + | _ => false + (* end case *)) + in + test (l1, l2) + end + + (* DEPRECATED FUNCTIONS *) + val listItems = toList + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/interval-set-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/interval-set-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/interval-set-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/interval-set-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,80 @@ +(* interval-set-sig.sml + * + * COPYRIGHT (c) 2005 John Reppy (http://www.cs.uchicago.edu/~jhr) + * All rights reserved. + * + * This signature is the interface to sets over a discrete ordered domain, where the + * sets are represented by intervals. It is meant for representing dense sets (e.g., + * unicode character classes). + *) + +signature INTERVAL_SET = + sig + + structure D : INTERVAL_DOMAIN + + type item = D.point + type interval = (item * item) + type set + + (* the empty set and the set of all elements *) + val empty : set + val universe : set + + (* a set of a single element *) + val singleton : item -> set + + val fromList : item list -> set + + (* set that covers the given interval *) + val interval : item * item -> set + + val isEmpty : set -> bool + val isUniverse : set -> bool + + val member : set * item -> bool + + (* return the list of items in the set *) + val toList : set -> item list + + (* return a list of intervals that represents the set *) + val intervals : set -> interval list + + (* add a single element to the set *) + val add : set * item -> set + val add' : item * set -> set + + (* add an interval to the set *) + val addInt : set * interval -> set + val addInt' : interval * set -> set + + (* set operations *) + val complement : set -> set + val union : (set * set) -> set + val intersect : (set * set) -> set + val difference : (set * set) -> set + + (* iterators on elements *) + val app : (item -> unit) -> set -> unit + val foldl : (item * 'a -> 'a) -> 'a -> set -> 'a + val foldr : (item * 'a -> 'a) -> 'a -> set -> 'a + val filter : (item -> bool) -> set -> set + val all : (item -> bool) -> set -> bool + val exists : (item -> bool) -> set -> bool + + (* iterators on intervals *) + val appInt : (interval -> unit) -> set -> unit + val foldlInt : (interval * 'a -> 'a) -> 'a -> set -> 'a + val foldrInt : (interval * 'a -> 'a) -> 'a -> set -> 'a + val filterInt : (interval -> bool) -> set -> set + val allInt : (interval -> bool) -> set -> bool + val existsInt : (interval -> bool) -> set -> bool + + (* ordering on sets *) + val compare : set * set -> order + val isSubset : set * set -> bool + + (* DEPRECATED FUNCTIONS *) + val listItems : set -> item list + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-hash-table.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-hash-table.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-hash-table.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-hash-table.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,184 @@ +(* int-hash-table.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A specialization of the hash table functor to integer keys. + * + * AUTHOR: John Reppy + * University of Chicago + * https://cs.uchicago.edu/~jhr + *) + +structure IntHashTable :> MONO_HASH_TABLE where type Key.hash_key = int = + struct + + structure Key = + struct + type hash_key = int + fun sameKey (a : int, b) = (a = b) + fun hashVal a = Word.fromInt a + end + + open Key + + structure HTRep = HashTableRep + + datatype 'a hash_table = HT of { + not_found : exn, + table : (hash_key, 'a) HTRep.table ref, + n_items : int ref + } + + fun index (i, sz) = Word.toIntX(Word.andb(i, Word.fromInt sz - 0w1)) + + (* Create a new table; the int is a size hint and the exception + * is to be raised by find. + *) + fun mkTable (sizeHint, notFound) = HT{ + not_found = notFound, + table = ref (HTRep.alloc sizeHint), + n_items = ref 0 + } + + (* remove all elements from the table *) + fun clear (HT{table, n_items, ...}) = (HTRep.clear(!table); n_items := 0) + + (* Insert an item. If the key already has an item associated with it, + * then the old item is discarded. + *) + fun insert (tbl as HT{table, n_items, ...}) (key, item) = let + val arr = !table + val sz = Array.length arr + val hash = hashVal key + val indx = index (hash, sz) + fun look HTRep.NIL = ( + Array.update(arr, indx, HTRep.B(hash, key, item, Array.sub(arr, indx))); + n_items := !n_items + 1; + HTRep.growTableIfNeeded (table, !n_items); + HTRep.NIL) + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then HTRep.B(hash, key, item, r) + else (case (look r) + of HTRep.NIL => HTRep.NIL + | rest => HTRep.B(h, k, v, rest) + (* end case *)) + in + case (look (Array.sub (arr, indx))) + of HTRep.NIL => () + | b => Array.update(arr, indx, b) + (* end case *) + end + + (* return true, if the key is in the domain of the table *) + fun inDomain (HT{table, ...}) key = let + val arr = !table + val hash = hashVal key + val indx = index (hash, Array.length arr) + fun look HTRep.NIL = false + | look (HTRep.B(h, k, v, r)) = + ((hash = h) andalso sameKey(key, k)) orelse look r + in + look (Array.sub (arr, indx)) + end + + (* find an item, the table's exception is raised if the item doesn't exist *) + fun lookup (HT{table, not_found, ...}) key = let + val arr = !table + val hash = hashVal key + val indx = index (hash, Array.length arr) + fun look HTRep.NIL = raise not_found + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then v + else look r + in + look (Array.sub (arr, indx)) + end + + (* look for an item, return NONE if the item doesn't exist *) + fun find (HT{table, ...}) key = let + val arr = !table + val sz = Array.length arr + val hash = hashVal key + val indx = index (hash, sz) + fun look HTRep.NIL = NONE + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then SOME v + else look r + in + look (Array.sub (arr, indx)) + end + + (* Remove an item. The table's exception is raised if + * the item doesn't exist. + *) + fun remove (HT{not_found, table, n_items}) key = let + val arr = !table + val sz = Array.length arr + val hash = hashVal key + val indx = index (hash, sz) + fun look HTRep.NIL = raise not_found + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then (v, r) + else let val (item, r') = look r in (item, HTRep.B(h, k, v, r')) end + val (item, bucket) = look (Array.sub (arr, indx)) + in + Array.update (arr, indx, bucket); + n_items := !n_items - 1; + item + end (* remove *) + + (* Return the number of items in the table *) + fun numItems (HT{n_items, ...}) = !n_items + + (* return a list of the items in the table *) + fun listItems (HT{table = ref arr, n_items, ...}) = + HTRep.listItems (arr, n_items) + fun listItemsi (HT{table = ref arr, n_items, ...}) = + HTRep.listItemsi (arr, n_items) + + (* Apply a function to the entries of the table *) + fun appi f (HT{table, ...}) = HTRep.appi f (! table) + fun app f (HT{table, ...}) = HTRep.app f (! table) + + (* Map a table to a new table that has the same keys and exception *) + fun mapi f (HT{table, n_items, not_found}) = HT{ + table = ref(HTRep.mapi f (! table)), + n_items = ref(!n_items), + not_found = not_found + } + fun map f (HT{table, n_items, not_found}) = HT{ + table = ref(HTRep.map f (! table)), + n_items = ref(!n_items), + not_found = not_found + } + + (* Fold a function over the entries of the table *) + fun foldi f init (HT{table, ...}) = HTRep.foldi f init (! table) + fun fold f init (HT{table, ...}) = HTRep.fold f init (! table) + + (* modify the hash-table items in place *) + fun modifyi f (HT{table, ...}) = HTRep.modifyi f (!table) + fun modify f (HT{table, ...}) = HTRep.modify f (!table) + + (* remove any hash table items that do not satisfy the given + * predicate. + *) + fun filteri pred (HT{table, n_items, ...}) = + n_items := HTRep.filteri pred (! table) + fun filter pred (HT{table, n_items, ...}) = + n_items := HTRep.filter pred (! table) + + (* Create a copy of a hash table *) + fun copy (HT{table, n_items, not_found}) = HT{ + table = ref(HTRep.copy(! table)), + n_items = ref(!n_items), + not_found = not_found + } + + (* returns a list of the sizes of the various buckets. This is to + * allow users to gauge the quality of their hashing function. + *) + fun bucketSizes (HT{table, ...}) = HTRep.bucketSizes (! table) + + end (* HashTableFn *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-list-map.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-list-map.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-list-map.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-list-map.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,294 @@ +(* int-list-map.sml + * + * COPYRIGHT (c) 2012 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * COPYRIGHT (c) 1996 by AT&T Research. See COPYRIGHT file for details. + * + * An implementation of finite maps on integer keys, which uses a sorted list + * representation. + *) + +structure IntListMap :> ORD_MAP where type Key.ord_key = Int.int = + struct + + structure Key = + struct + type ord_key = int + val compare = Int.compare + end + + type 'a map = (int * 'a) list + + val empty = [] + + fun isEmpty [] = true + | isEmpty _ = false + + (* return the first item in the map (or NONE if it is empty) *) + fun first [] = NONE + | first ((_, value)::_) = SOME value + + (* return the first item in the map and its key (or NONE if it is empty) *) + fun firsti [] = NONE + | firsti ((key, value)::_) = SOME(key, value) + + fun singleton (key, item) = [(key, item)] + + fun insert (l, key, item) = let + fun f [] = [(key, item)] + | f ((elem as (key', _))::r) = (case Key.compare(key, key') + of LESS => (key, item) :: elem :: r + | EQUAL => (key, item) :: r + | GREATER => elem :: (f r) + (* end case *)) + in + f l + end + fun insert' ((k, x), m) = insert(m, k, x) + + fun insertWithi comb (l, key, item) = let + fun f [] = [(key, item)] + | f ((elem as (key', item'))::r) = (case Key.compare(key, key') + of LESS => (key, item) :: elem :: r + | EQUAL => (key, comb(key, item', item)) :: r + | GREATER => elem :: (f r) + (* end case *)) + in + f l + end + fun insertWith comb = insertWithi (fn (_, x1, x2) => comb(x1, x2)) + + (* return true if the key is in the map's domain *) + fun inDomain (l, key) = let + fun f [] = false + | f ((key', x) :: r) = (key' <= key) andalso ((key' = key) orelse f r) + in + f l + end + + (* Look for an item, return NONE if the item doesn't exist *) + fun find (l, key) = let + fun f [] = NONE + | f ((key', x) :: r) = + if (key < key') then NONE + else if (key = key') then SOME x + else f r + in + f l + end + + (* Look for an item, raise NotFound if the item doesn't exist *) + fun lookup (l, key) = let + fun f [] = raise LibBase.NotFound + | f ((key', x) :: r) = + if (key < key') then raise LibBase.NotFound + else if (key = key') then x + else f r + in + f l + end + + (* Remove an item, returning new map and value removed. + * Raise LibBase.NotFound if not found. + *) + fun remove (l, key) = let + fun f (_, []) = raise LibBase.NotFound + | f (prefix, (elem as (key', x)) :: r) = (case Key.compare(key, key') + of LESS => raise LibBase.NotFound + | EQUAL => (List.revAppend(prefix, r), x) + | GREATER => f(elem :: prefix, r) + (* end case *)) + in + f ([], l) + end + + (* Return the number of items in the map *) + fun numItems l = List.length l + + (* Return a list of the items (and their keys) in the map *) + fun listItems (l : 'a map) = List.map #2 l + fun listItemsi l = l + + fun listKeys (l : 'a map) = List.map #1 l + + fun collate cmpRng = let + fun cmp ([], []) = EQUAL + | cmp ([], _) = LESS + | cmp (_, []) = GREATER + | cmp ((x1, y1)::r1, (x2, y2)::r2) = (case Key.compare(x1, x2) + of EQUAL => (case cmpRng(y1, y2) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + | order => order + (* end case *)) + in + cmp + end + + (* return a map whose domain is the union of the domains of the two input + * maps, using the supplied function to define the map on elements that + * are in both domains. + *) + fun unionWith f (m1 : 'a map, m2 : 'a map) = let + fun merge ([], [], l) = List.rev l + | merge ([], m2, l) = List.revAppend(l, m2) + | merge (m1, [], l) = List.revAppend(l, m1) + | merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = ( + case Key.compare (k1, k2) + of LESS => merge (r1, m2, (k1, x1)::l) + | EQUAL => merge (r1, r2, (k1, f(x1, x2)) :: l) + | GREATER => merge (m1, r2, (k2, x2)::l) + (* end case *)) + in + merge (m1, m2, []) + end + fun unionWithi f (m1 : 'a map, m2 : 'a map) = let + fun merge ([], [], l) = List.rev l + | merge ([], m2, l) = List.revAppend(l, m2) + | merge (m1, [], l) = List.revAppend(l, m1) + | merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = ( + case Key.compare (k1, k2) + of LESS => merge (r1, m2, (k1, x1)::l) + | EQUAL => merge (r1, r2, (k1, f(k1, x1, x2)) :: l) + | GREATER => merge (m1, r2, (k2, x2)::l) + (* end case *)) + in + merge (m1, m2, []) + end + + (* return a map whose domain is the intersection of the domains of the + * two input maps, using the supplied function to define the range. + *) + fun intersectWith f (m1 : 'a map, m2 : 'b map) = let + fun merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = ( + case Key.compare (k1, k2) + of LESS => merge (r1, m2, l) + | EQUAL => merge (r1, r2, (k1, f(x1, x2)) :: l) + | GREATER => merge (m1, r2, l) + (* end case *)) + | merge (_, _, l) = List.rev l + in + merge (m1, m2, []) + end + fun intersectWithi f (m1 : 'a map, m2 : 'b map) = let + fun merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = ( + case Key.compare (k1, k2) + of LESS => merge (r1, m2, l) + | EQUAL => merge (r1, r2, (k1, f(k1, x1, x2)) :: l) + | GREATER => merge (m1, r2, l) + (* end case *)) + | merge (_, _, l) = List.rev l + in + merge (m1, m2, []) + end + + fun mergeWith f (m1 : 'a map, m2 : 'b map) = let + fun merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = + if (k1 < k2) + then mergef (k1, SOME x1, NONE, r1, m2, l) + else if (k1 = k2) + then mergef (k1, SOME x1, SOME x2, r1, r2, l) + else mergef (k2, NONE, SOME x2, m1, r2, l) + | merge ([], [], l) = List.rev l + | merge ((k1, x1)::r1, [], l) = mergef (k1, SOME x1, NONE, r1, [], l) + | merge ([], (k2, x2)::r2, l) = mergef (k2, NONE, SOME x2, [], r2, l) + and mergef (k, x1, x2, r1, r2, l) = (case f (x1, x2) + of NONE => merge (r1, r2, l) + | SOME y => merge (r1, r2, (k, y)::l) + (* end case *)) + in + merge (m1, m2, []) + end + fun mergeWithi f (m1 : 'a map, m2 : 'b map) = let + fun merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = + if (k1 < k2) + then mergef (k1, SOME x1, NONE, r1, m2, l) + else if (k1 = k2) + then mergef (k1, SOME x1, SOME x2, r1, r2, l) + else mergef (k2, NONE, SOME x2, m1, r2, l) + | merge ([], [], l) = List.rev l + | merge ((k1, x1)::r1, [], l) = mergef (k1, SOME x1, NONE, r1, [], l) + | merge ([], (k2, x2)::r2, l) = mergef (k2, NONE, SOME x2, [], r2, l) + and mergef (k, x1, x2, r1, r2, l) = (case f (k, x1, x2) + of NONE => merge (r1, r2, l) + | SOME y => merge (r1, r2, (k, y)::l) + (* end case *)) + in + merge (m1, m2, []) + end + + (* Apply a function to the entries of the map in map order. *) + val appi = List.app + fun app f l = appi (fn (_, item) => f item) l + + (* Create a new table by applying a map function to the + * name/value pairs in the table. + *) + fun mapi f l = List.map (fn (key, item) => (key, f(key, item))) l + fun map f l = List.map (fn (key, item) => (key, f item)) l + + (* Apply a folding function to the entries of the map + * in increasing map order. + *) + fun foldli f init l = + List.foldl (fn ((key, item), accum) => f(key, item, accum)) init l + fun foldl f init l = List.foldl (fn ((_, item), accum) => f(item, accum)) init l + + (* Apply a folding function to the entries of the map + * in decreasing map order. + *) + fun foldri f init l = + List.foldr (fn ((key, item), accum) => f(key, item, accum)) init l + fun foldr f init l = List.foldr (fn ((_, item), accum) => f(item, accum)) init l + + fun filter pred l = List.filter (fn (_, item) => pred item) l + fun filteri pred l = List.filter pred l + + fun mapPartiali f l = let + fun f' (key, item) = (case f (key, item) + of NONE => NONE + | SOME y => SOME(key, y) + (* end case *)) + in + List.mapPartial f' l + end + fun mapPartial f l = mapPartiali (fn (_, item) => f item) l + + (* check the elements of a map with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + * Elements are checked in key order. + *) + fun exists pred = let + fun exists' [] = false + | exists' ((_, x)::r) = pred x orelse exists' r + in + exists' + end + fun existsi pred = let + fun exists' [] = false + | exists' (arg::r) = pred arg orelse exists' r + in + exists' + end + + (* check the elements of a map with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. Elements + * are checked in key order. + *) + fun all pred = let + fun all' [] = false + | all' ((_, x)::r) = pred x andalso all' r + in + all' + end + fun alli pred = let + fun all' [] = false + | all' (arg::r) = pred arg andalso all' r + in + all' + end + + end (* IntListMap *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-list-set.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-list-set.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-list-set.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-list-set.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,203 @@ +(* int-list-set.sml + * + * COPYRIGHT (c) 1996 by AT&T Research. See COPYRIGHT file for details. + * + * An implementation of finite sets of integers, which uses a sorted list + * representation. + *) + +structure IntListSet :> ORD_SET where type Key.ord_key = Int.int = + struct + + structure Key = + struct + type ord_key = int + val compare = Int.compare + end + + (* sets are represented as ordered lists of integers *) + type item = Key.ord_key + type set = item list + + val empty = [] + + fun singleton x = [x] + + fun add (l, item) = let + fun f [] = [item] + | f (elem::r) = (case Key.compare(item, elem) + of LESS => item :: elem :: r + | EQUAL => item :: r + | GREATER => elem :: (f r) + (* end case *)) + in + f l + end + fun add' (s, x) = add(x, s) + + fun union (s1, s2) = let + fun merge ([], l2) = l2 + | merge (l1, []) = l1 + | merge (x::r1, y::r2) = (case Key.compare(x, y) + of LESS => x :: merge(r1, y::r2) + | EQUAL => x :: merge(r1, r2) + | GREATER => y :: merge(x::r1, r2) + (* end case *)) + in + merge (s1, s2) + end + + fun intersection (s1, s2) = let + fun merge ([], l2) = [] + | merge (l1, []) = [] + | merge (x::r1, y::r2) = (case Key.compare(x, y) + of LESS => merge(r1, y::r2) + | EQUAL => x :: merge(r1, r2) + | GREATER => merge(x::r1, r2) + (* end case *)) + in + merge (s1, s2) + end + + fun difference (s1, s2) = let + fun merge ([], l2) = [] + | merge (l1, []) = l1 + | merge (x::r1, y::r2) = (case Key.compare(x, y) + of LESS => x :: merge(r1, y::r2) + | EQUAL => merge(r1, r2) + | GREATER => merge(x::r1, r2) + (* end case *)) + in + merge (s1, s2) + end + + fun addList (l, items) = let + val items' = List.foldl (fn (x, set) => add(set, x)) [] items + in + union (l, items') + end + + fun subtract (l, item) = let + fun f ([], _) = l + | f (elem::r, prefix) = (case Key.compare(item, elem) + of LESS => l + | EQUAL => List.revAppend(prefix, r) + | GREATER => f (r, elem::prefix) + (* end case *)) + in + f (l, []) + end + fun subtract' (item, l) = subtract (l, item) + + fun subtractList (l, items) = let + val items' = List.foldl (fn (x, set) => add(set, x)) [] items + in + difference (l, items') + end + + (* create a set from a list of items; this function works in linear time if the list + * is in increasing order. + *) + fun fromList [] = [] + | fromList (first::rest) = let + fun add (prev, x::xs, s) = (case Key.compare(prev, x) + of LESS => add (x, xs, x::s) + | _ => (* not ordered, so fallback to addList *) + addList (List.rev s, x::xs) + (* end case *)) + | add (_, [], s) = List.rev s + in + add (first, rest, [first]) + end + + (* Remove an item, returning new map and value removed. + * Raise LibBase.NotFound if not found. + *) + fun delete (l, elem) = let + fun f (_, []) = raise LibBase.NotFound + | f (prefix, elem' :: r) = (case Key.compare(elem, elem') + of LESS => raise LibBase.NotFound + | EQUAL => List.revAppend(prefix, r) + | GREATER => f(elem' :: prefix, r) + (* end case *)) + in + f ([], l) + end + + fun member (l, item) = let + fun f [] = false + | f (elem :: r) = (case Key.compare(item, elem) + of LESS => false + | EQUAL => true + | GREATER => f r + (* end case *)) + in + f l + end + + fun isEmpty [] = true + | isEmpty _ = false + + fun minItem [] = raise Empty + | minItem (x::_) = x + + fun maxItem xs = List.last xs + + fun equal (s1, s2) = let + fun f ([], []) = true + | f ((x : int)::r1, y::r2) = (x = y) andalso f (r1, r2) + | f _ = false + in + f (s1, s2) + end + + fun compare ([], []) = EQUAL + | compare ([], _) = LESS + | compare (_, []) = GREATER + | compare (x1::r1, x2::r2) = (case Key.compare(x1, x2) + of EQUAL => compare (r1, r2) + | order => order + (* end case *)) + + (* Return true if and only if the first set is a subset of the second *) + fun isSubset (s1, s2) = let + fun f ([], _) = true + | f (_, []) = false + | f (x::r1, y::r2) = + ((x = y) andalso f (r1, r2)) + orelse ((x > y) andalso f (x::r1, r2)) + in + f (s1, s2) + end + + fun disjoint ([], _) = true + | disjoint (_, []) = true + | disjoint (x::r1, y::r2) = + ((x < y) andalso disjoint (r1, y::r2)) + orelse ((x > y) andalso disjoint (x::r1, r2)) + + (* Return the number of items in the set *) + fun numItems l = List.length l + + (* Return a list of the items in the set *) + fun toList l = l + + val app = List.app + fun map f s1 = List.foldl (fn (x, s) => add(s, f x)) [] s1 + fun mapPartial f s = let + fun f' (x, acc) = (case f x of SOME x' => add(acc, x') | NONE => acc) + in + List.foldl f' [] s + end + val foldr = List.foldr + val foldl = List.foldl + val filter = List.filter + val partition = List.partition + val exists = List.exists + val all = List.all + val find = List.find + + (* deprecated *) + val listItems = toList + + end (* IntListMap *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-redblack-map.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-redblack-map.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-redblack-map.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-redblack-map.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,643 @@ +(* int-redblack-map.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * COPYRIGHT (c) 1999 Bell Labs, Lucent Technologies. + * + * This code is based on Chris Okasaki's implementation of + * red-black trees. The linear-time tree construction code is + * based on the paper "Constructing red-black trees" by Hinze, + * and the delete function is based on the description in Cormen, + * Leiserson, and Rivest. + * + * A red-black tree should satisfy the following two invariants: + * + * Red Invariant: each red node has black children (empty nodes are + * considered black). + * + * Black Invariant: each path from the root to an empty node has the + * same number of black nodes (the tree's black height). + * + * The Black invariant implies that any node with only one child + * will be black and its child will be a red leaf. + *) + +structure IntRedBlackMap :> ORD_MAP where type Key.ord_key = int = + struct + + structure Key = + struct + type ord_key = int + val compare = Int.compare + end + + datatype color = R | B + + datatype 'a tree + = E + | T of (color * 'a tree * Key.ord_key * 'a * 'a tree) + + datatype 'a map = MAP of (int * 'a tree) + + fun isEmpty (MAP(_, E)) = true + | isEmpty _ = false + + val empty = MAP(0, E) + + fun singleton (xk, x) = MAP(1, T(B, E, xk, x, E)) + + fun insert (MAP(nItems, m), xk, x) = let + val nItems' = ref nItems + fun ins E = (nItems' := nItems+1; T(R, E, xk, x, E)) + | ins (s as T(color, a, yk, y, b)) = + if (xk < yk) + then (case a + of T(R, c, zk, z, d) => + if (xk < zk) + then (case ins c + of T(R, e, wk, w, f) => T(R, T(B,e,wk,w,f), zk, z, T(B,d,yk,y,b)) + | c => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + else if (xk = zk) + then T(color, T(R, c, xk, x, d), yk, y, b) + else (case ins d + of T(R, e, wk, w, f) => T(R, T(B,c,zk,z,e), wk, w, T(B,f,yk,y,b)) + | d => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + | _ => T(B, ins a, yk, y, b) + (* end case *)) + else if (xk = yk) + then T(color, a, xk, x, b) + else (case b + of T(R, c, zk, z, d) => + if (xk < zk) + then (case ins c + of T(R, e, wk, w, f) => T(R, T(B,a,yk,y,e), wk, w, T(B,f,zk,z,d)) + | c => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + else if (xk = zk) + then T(color, a, yk, y, T(R, c, xk, x, d)) + else (case ins d + of T(R, e, wk, w, f) => T(R, T(B,a,yk,y,c), zk, z, T(B,e,wk,w,f)) + | d => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + | _ => T(B, a, yk, y, ins b) + (* end case *)) + val T(_, a, yk, y, b) = ins m + in + MAP(!nItems', T(B, a, yk, y, b)) + end + fun insert' ((xk, x), m) = insert (m, xk, x) + + fun insertWithi comb (MAP(nItems, m), xk, x) = let + val nItems' = ref nItems + fun ins E = (nItems' := nItems+1; T(R, E, xk, x, E)) + | ins (s as T(color, a, yk, y, b)) = + if (xk < yk) + then (case a + of T(R, c, zk, z, d) => + if (xk < zk) + then (case ins c + of T(R, e, wk, w, f) => T(R, T(B,e,wk,w,f), zk, z, T(B,d,yk,y,b)) + | c => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + else if (xk = zk) + then T(color, T(R, c, xk, comb(xk, z, x), d), yk, y, b) + else (case ins d + of T(R, e, wk, w, f) => T(R, T(B,c,zk,z,e), wk, w, T(B,f,yk,y,b)) + | d => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + | _ => T(B, ins a, yk, y, b) + (* end case *)) + else if (xk = yk) + then T(color, a, xk, comb(xk, y, x), b) + else (case b + of T(R, c, zk, z, d) => + if (xk < zk) + then (case ins c + of T(R, e, wk, w, f) => T(R, T(B,a,yk,y,e), wk, w, T(B,f,zk,z,d)) + | c => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + else if (xk = zk) + then T(color, a, yk, y, T(R, c, xk, comb(xk, z, x), d)) + else (case ins d + of T(R, e, wk, w, f) => T(R, T(B,a,yk,y,c), zk, z, T(B,e,wk,w,f)) + | d => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + | _ => T(B, a, yk, y, ins b) + (* end case *)) + val T(_, a, yk, y, b) = ins m + in + MAP(!nItems', T(B, a, yk, y, b)) + end + fun insertWith comb = insertWithi (fn (_, x1, x2) => comb(x1, x2)) + + (* Is a key in the domain of the map? *) + fun inDomain (MAP(_, t), k) = let + fun find' E = false + | find' (T(_, a, yk, y, b)) = + (k = yk) orelse ((k < yk) andalso find' a) orelse (find' b) + in + find' t + end + + (* Look for an item, return NONE if the item doesn't exist *) + fun find (MAP(_, t), k) = let + fun find' E = NONE + | find' (T(_, a, yk, y, b)) = + if (k < yk) + then find' a + else if (k = yk) + then SOME y + else find' b + in + find' t + end + + (* Look for an item, raise NotFound if the item doesn't exist *) + fun lookup (MAP(_, t), k) = let + fun look E = raise LibBase.NotFound + | look (T(_, a, yk, y, b)) = + if (k < yk) + then look a + else if (k = yk) + then y + else look b + in + look t + end + + (* Remove an item, returning new map and value removed. + * Raises LibBase.NotFound if not found. + *) + local + datatype 'a zipper + = TOP + | LEFT of (color * Key.ord_key * 'a * 'a tree * 'a zipper) + | RIGHT of (color * 'a tree * Key.ord_key * 'a * 'a zipper) + in + fun remove (MAP(nItems, t), k) = let + (* zip the zipper *) + fun zip (TOP, t) = t + | zip (LEFT(color, xk, x, b, z), a) = zip(z, T(color, a, xk, x, b)) + | zip (RIGHT(color, a, xk, x, z), b) = zip(z, T(color, a, xk, x, b)) + (* zip the zipper while resolving a black deficit *) + fun fixupZip (TOP, t) = (true, t) + (* case 1 from CLR *) + | fixupZip (LEFT(B, xk, x, T(R, a, yk, y, b), p), t) = (case a + of T(_, T(R, a11, wk, w, a12), zk, z, a2) => (* case 1L ==> case 3L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, xk, x, a11), wk, w, T(B, a12, zk, z, a2)), yk, y, b))) + | T(_, a1, zk, z, T(R, a21, wk, w, t22)) => (* case 1L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, xk, x, a1), zk, z, T(B, a21, wk, w, t22)), yk, y, b))) + | T(_, a1, zk, z, a2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, T(B, t, xk, x, T(R, a1, zk, z, a2)), yk, y, b))) + | _ => fixupZip (LEFT(R, xk, x, a, LEFT(B, yk, y, b, p)), t) + (* end case *)) + | fixupZip (RIGHT(B, T(R, a, xk, x, b), yk, y, p), t) = (case b + of T(_, b1, zk, z, T(R, b21, wk, w, b22)) => (* case 1R ==> case 3R ==> case 4R *) + (false, zip (p, T(B, a, xk, x, T(R, T(B, b1, zk, z, b21), wk, w, T(B, b22, yk, y, t))))) + | T(_, T(R, b11, wk, w, b12), zk, z, b2) => (* case 1R ==> case 4R *) + (false, zip (p, T(B, a, xk, x, T(R, T(B, b11, wk, w, b12), zk, z, T(B, b2, yk, y, t))))) + | T(_, b1, zk, z, b2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, a, xk, x, T(B, T(R, b1, zk, z, b2), yk, y, t)))) + | _ => fixupZip (RIGHT(R, b, yk, y, RIGHT(B, a, xk, x, p)), t) + (* end case *)) + (* case 3 from CLR *) + | fixupZip (LEFT(color, xk, x, T(B, T(R, a1, yk, y, a2), zk, z, b), p), t) = + (* case 3L ==> case 4L *) + (false, zip (p, T(color, T(B, t, xk, x, a1), yk, y, T(B, a2, zk, z, b)))) + | fixupZip (RIGHT(color, T(B, a, xk, x, T(R, b1, yk, y, b2)), zk, z, p), t) = + (* case 3R ==> case 4R; rotate, recolor, plus rotate fixes deficit *) + (false, zip (p, T(color, T(B, a, xk, x, b1), yk, y, T(B, b2, zk, z, t)))) + (* case 4 from CLR *) + | fixupZip (LEFT(color, xk, x, T(B, a, yk, y, T(R, b1, zk, z, b2)), p), t) = + (false, zip (p, T(color, T(B, t, xk, x, a), yk, y, T(B, b1, zk, z, b2)))) + | fixupZip (RIGHT(color, T(B, T(R, a1, zk, z, a2), xk, x, b), yk, y, p), t) = + (false, zip (p, T(color, T(B, a1, zk, z, a2), xk, x, T(B, b, yk, y, t)))) + (* case 2 from CLR; note that "a" and "b" are guaranteed to be black, since we did + * not match cases 3 or 4. + *) + | fixupZip (LEFT(R, xk, x, T(B, a, yk, y, b), p), t) = + (false, zip (p, T(B, t, xk, x, T(R, a, yk, y, b)))) + | fixupZip (LEFT(B, xk, x, T(B, a, yk, y, b), p), t) = + fixupZip (p, T(B, t, xk, x, T(R, a, yk, y, b))) + | fixupZip (RIGHT(R, T(B, a, xk, x, b), yk, y, p), t) = + (false, zip (p, T(B, T(R, a, xk, x, b), yk, y, t))) + | fixupZip (RIGHT(B, T(B, a, xk, x, b), yk, y, p), t) = + fixupZip (p, T(B, T(R, a, xk, x, b), yk, y, t)) + (* push deficit up the tree by recoloring a black node as red *) + | fixupZip (LEFT(_, yk, y, E, p), t) = fixupZip (p, T(R, t, yk, y, E)) + | fixupZip (RIGHT(_, E, yk, y, p), t) = fixupZip (p, T(R, E, yk, y, t)) + (* impossible cases that violate the red invariant *) + | fixupZip _ = raise Fail "Red invariant violation" + (* delete the minimum value from a non-empty tree, returning a 4-tuple + * (key, elem, bd, tr), where key is the minimum key, elem is the element + * named by key, tr is the residual tree with elem removed, and bd is true + * if tr has a black-depth that is less than the original tree. + *) + fun delMin (T(R, E, yk, y, b), p) = + (* replace the node by its right subtree (which must be E) *) + (yk, y, false, zip(p, b)) + | delMin (T(B, E, yk, y, T(R, a', yk', y', b')), p) = + (* replace the node with its right child, while recoloring the child black to + * preserve the black invariant. + *) + (yk, y, false, zip (p, T(B, a', yk', y', b'))) + | delMin (T(B, E, yk, y, E), p) = let + (* delete the node, which reduces the black-depth by one, so we attempt to fix + * the deficit on the path back. + *) + val (blkDeficit, t) = fixupZip (p, E) + in + (yk, y, blkDeficit, t) + end + | delMin (T(color, a, yk, y, b), z) = delMin(a, LEFT(color, yk, y, b, z)) + | delMin (E, _) = raise Match + fun del (E, p) = raise LibBase.NotFound + | del (T(color, a, yk, y, b), p) = + if (k < yk) + then del (a, LEFT(color, yk, y, b, p)) + else if (k = yk) + then (case (color, a, b) + of (R, E, E) => (y, zip(p, E)) + | (B, E, E) => (y, #2 (fixupZip (p, E))) + | (_, T(_, a', yk', y', b'), E) => + (* node is black and left child is red; we replace the node with its + * left child recolored to black. + *) + (y, zip(p, T(B, a', yk', y', b'))) + | (_, E, T(_, a', yk', y', b')) => + (* node is black and right child is red; we replace the node with its + * right child recolored to black. + *) + (y, zip(p, T(B, a', yk', y', b'))) + | _ => let + val (minKey, minElem, blkDeficit, b) = delMin (b, TOP) + in + if blkDeficit + then (y, #2 (fixupZip (RIGHT(color, a, minKey, minElem, p), b))) + else (y, zip (p, T(color, a, minKey, minElem, b))) + end + (* end case *)) + else del (b, RIGHT(color, a, yk, y, p)) + val (item, t) = del(t, TOP) + in + case t + of T(R, a, xk, x, b) => (MAP(nItems-1, T(B, a, xk, x, b)), item) + | t => (MAP(nItems-1, t), item) + (* end case *) + end + end (* local *) + + (* return the first item in the map (or NONE if it is empty) *) + fun first (MAP(_, t)) = let + fun f E = NONE + | f (T(_, E, _, x, _)) = SOME x + | f (T(_, a, _, _, _)) = f a + in + f t + end + fun firsti (MAP(_, t)) = let + fun f E = NONE + | f (T(_, E, xk, x, _)) = SOME(xk, x) + | f (T(_, a, _, _, _)) = f a + in + f t + end + + (* Return the number of items in the map *) + fun numItems (MAP(n, _)) = n + + fun foldl f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, _, x, b), accum) = + foldf(b, f(x, foldf(a, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + fun foldli f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, xk, x, b), accum) = + foldf(b, f(xk, x, foldf(a, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + + fun foldr f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, _, x, b), accum) = + foldf(a, f(x, foldf(b, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + fun foldri f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, xk, x, b), accum) = + foldf(a, f(xk, x, foldf(b, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + + fun listItems m = foldr (op ::) [] m + fun listItemsi m = foldri (fn (xk, x, l) => (xk, x)::l) [] m + + (* return an ordered list of the keys in the map. *) + fun listKeys m = foldri (fn (k, _, l) => k::l) [] m + + (* functions for walking the tree while keeping a stack of parents + * to be visited. + *) + fun next ((t as T(_, _, _, _, b))::rest) = (t, left(b, rest)) + | next _ = (E, []) + and left (E, rest) = rest + | left (t as T(_, a, _, _, _), rest) = left(a, t::rest) + fun start m = left(m, []) + + (* given an ordering on the map's range, return an ordering + * on the map. + *) + fun collate cmpRng = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => EQUAL + | ((E, _), _) => LESS + | (_, (E, _)) => GREATER + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk = yk) + then (case cmpRng(x, y) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + else if (xk < yk) + then LESS + else GREATER + (* end case *)) + in + fn (MAP(_, m1), MAP(_, m2)) => cmp (start m1, start m2) + end + + (* support for constructing red-black trees in linear time from increasing + * ordered sequences (based on a description by R. Hinze). Note that the + * elements in the digits are ordered with the largest on the left, whereas + * the elements of the trees are ordered with the largest on the right. + *) + datatype 'a digit + = ZERO + | ONE of (Key.ord_key * 'a * 'a tree * 'a digit) + | TWO of (Key.ord_key * 'a * 'a tree * Key.ord_key * 'a * 'a tree * 'a digit) + (* add an item that is guaranteed to be larger than any in l *) + fun addItem (ak, a, l) = let + fun incr (ak, a, t, ZERO) = ONE(ak, a, t, ZERO) + | incr (ak1, a1, t1, ONE(ak2, a2, t2, r)) = + TWO(ak1, a1, t1, ak2, a2, t2, r) + | incr (ak1, a1, t1, TWO(ak2, a2, t2, ak3, a3, t3, r)) = + ONE(ak1, a1, t1, incr(ak2, a2, T(B, t3, ak3, a3, t2), r)) + in + incr(ak, a, E, l) + end + (* link the digits into a tree *) + fun linkAll t = let + fun link (t, ZERO) = t + | link (t1, ONE(ak, a, t2, r)) = link(T(B, t2, ak, a, t1), r) + | link (t, TWO(ak1, a1, t1, ak2, a2, t2, r)) = + link(T(B, T(R, t2, ak2, a2, t1), ak1, a1, t), r) + in + link (E, t) + end + + local + fun wrap f (MAP(_, m1), MAP(_, m2)) = let + val (n, result) = f (start m1, start m2, 0, ZERO) + in + MAP(n, linkAll result) + end + fun ins ((E, _), n, result) = (n, result) + | ins ((T(_, _, xk, x, _), r), n, result) = + ins(next r, n+1, addItem(xk, x, result)) + in + + (* return a map whose domain is the union of the domains of the two input + * maps, using the supplied function to define the map on elements that + * are in both domains. + *) + fun unionWith mergeFn = let + fun union (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), t2) => ins(t2, n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then union (r1, t2, n+1, addItem(xk, x, result)) + else if (xk = yk) + then union (r1, r2, n+1, addItem(xk, mergeFn(x, y), result)) + else union (t1, r2, n+1, addItem(yk, y, result)) + (* end case *)) + in + wrap union + end + fun unionWithi mergeFn = let + fun union (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), t2) => ins(t2, n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then union (r1, t2, n+1, addItem(xk, x, result)) + else if (xk = yk) + then + union (r1, r2, n+1, addItem(xk, mergeFn(xk, x, y), result)) + else union (t1, r2, n+1, addItem(yk, y, result)) + (* end case *)) + in + wrap union + end + + (* return a map whose domain is the intersection of the domains of the + * two input maps, using the supplied function to define the range. + *) + fun intersectWith mergeFn = let + fun intersect (t1, t2, n, result) = (case (next t1, next t2) + of ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then intersect (r1, t2, n, result) + else if (xk = yk) + then intersect ( + r1, r2, n+1, addItem(xk, mergeFn(x, y), result)) + else intersect (t1, r2, n, result) + | _ => (n, result) + (* end case *)) + in + wrap intersect + end + fun intersectWithi mergeFn = let + fun intersect (t1, t2, n, result) = (case (next t1, next t2) + of ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then intersect (r1, t2, n, result) + else if (xk = yk) + then intersect (r1, r2, n+1, + addItem(xk, mergeFn(xk, x, y), result)) + else intersect (t1, r2, n, result) + | _ => (n, result) + (* end case *)) + in + wrap intersect + end + + fun mergeWith mergeFn = let + fun merge (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), (T(_, _, yk, y, _), r2)) => + mergef(yk, NONE, SOME y, t1, r2, n, result) + | ((T(_, _, xk, x, _), r1), (E, _)) => + mergef(xk, SOME x, NONE, r1, t2, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then mergef(xk, SOME x, NONE, r1, t2, n, result) + else if (xk = yk) + then mergef(xk, SOME x, SOME y, r1, r2, n, result) + else mergef(yk, NONE, SOME y, t1, r2, n, result) + (* end case *)) + and mergef (k, x1, x2, r1, r2, n, result) = (case mergeFn(x1, x2) + of NONE => merge (r1, r2, n, result) + | SOME y => merge (r1, r2, n+1, addItem(k, y, result)) + (* end case *)) + in + wrap merge + end + fun mergeWithi mergeFn = let + fun merge (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), (T(_, _, yk, y, _), r2)) => + mergef(yk, NONE, SOME y, t1, r2, n, result) + | ((T(_, _, xk, x, _), r1), (E, _)) => + mergef(xk, SOME x, NONE, r1, t2, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then mergef(xk, SOME x, NONE, r1, t2, n, result) + else if (xk = yk) + then mergef(xk, SOME x, SOME y, r1, r2, n, result) + else mergef(yk, NONE, SOME y, t1, r2, n, result) + (* end case *)) + and mergef (k, x1, x2, r1, r2, n, result) = (case mergeFn(k, x1, x2) + of NONE => merge (r1, r2, n, result) + | SOME y => merge (r1, r2, n+1, addItem(k, y, result)) + (* end case *)) + in + wrap merge + end + end (* local *) + + fun app f = let + fun appf E = () + | appf (T(_, a, _, x, b)) = (appf a; f x; appf b) + in + fn (MAP(_, m)) => appf m + end + fun appi f = let + fun appf E = () + | appf (T(_, a, xk, x, b)) = (appf a; f(xk, x); appf b) + in + fn (MAP(_, m)) => appf m + end + + fun map f = let + fun mapf E = E + | mapf (T(color, a, xk, x, b)) = + T(color, mapf a, xk, f x, mapf b) + in + fn (MAP(n, m)) => MAP(n, mapf m) + end + fun mapi f = let + fun mapf E = E + | mapf (T(color, a, xk, x, b)) = + T(color, mapf a, xk, f(xk, x), mapf b) + in + fn (MAP(n, m)) => MAP(n, mapf m) + end + + (* Filter out those elements of the map that do not satisfy the + * predicate. The filtering is done in increasing map order. + *) + fun filter pred (MAP(_, t)) = let + fun walk (E, n, result) = (n, result) + | walk (T(_, a, xk, x, b), n, result) = let + val (n, result) = walk(a, n, result) + in + if (pred x) + then walk(b, n+1, addItem(xk, x, result)) + else walk(b, n, result) + end + val (n, result) = walk (t, 0, ZERO) + in + MAP(n, linkAll result) + end + fun filteri pred (MAP(_, t)) = let + fun walk (E, n, result) = (n, result) + | walk (T(_, a, xk, x, b), n, result) = let + val (n, result) = walk(a, n, result) + in + if (pred(xk, x)) + then walk(b, n+1, addItem(xk, x, result)) + else walk(b, n, result) + end + val (n, result) = walk (t, 0, ZERO) + in + MAP(n, linkAll result) + end + + (* map a partial function over the elements of a map in increasing + * map order. + *) + fun mapPartial f = let + fun f' (xk, x, m) = (case f x + of NONE => m + | (SOME y) => insert(m, xk, y) + (* end case *)) + in + foldli f' empty + end + fun mapPartiali f = let + fun f' (xk, x, m) = (case f(xk, x) + of NONE => m + | (SOME y) => insert(m, xk, y) + (* end case *)) + in + foldli f' empty + end + + (* check the elements of a map with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + * Elements are checked in key order. + *) + fun exists pred = let + fun exists' E = false + | exists' (T(_, a, _, x, b)) = exists' a orelse pred x orelse exists' b + in + fn (MAP(_, m)) => exists' m + end + fun existsi pred = let + fun exists' E = false + | exists' (T(_, a, k, x, b)) = exists' a orelse pred(k, x) orelse exists' b + in + fn (MAP(_, m)) => exists' m + end + + (* check the elements of a map with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. Elements + * are checked in key order. + *) + fun all pred = let + fun all' E = true + | all' (T(_, a, _, x, b)) = all' a andalso pred x andalso all' b + in + fn (MAP(_, m)) => all' m + end + fun alli pred = let + fun all' E = true + | all' (T(_, a, k, x, b)) = all' a andalso pred(k, x) andalso all' b + in + fn (MAP(_, m)) => all' m + end + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-redblack-set.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-redblack-set.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/int-redblack-set.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/int-redblack-set.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,515 @@ +(* int-redblack-set.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * COPYRIGHT (c) 1999 Bell Labs, Lucent Technologies. + * + * This code is based on Chris Okasaki's implementation of + * red-black trees. The linear-time tree construction code is + * based on the paper "Constructing red-black trees" by Hinze, + * and the delete function is based on the description in Cormen, + * Leiserson, and Rivest. + * + * A red-black tree should satisfy the following two invariants: + * + * Red Invariant: each red node has black children (empty nodes are + * considered black). + * + * Black Invariant: each path from the root to an empty node has the + * same number of black nodes (the tree's black height). + * + * The Black invariant implies that any node with only one child + * will be black and its child will be a red leaf. + *) + +structure IntRedBlackSet :> ORD_SET where type Key.ord_key = int = + struct + + structure Key = + struct + type ord_key = int + val compare = Int.compare + end + + type item = Key.ord_key + + datatype color = R | B + + datatype tree + = E + | T of (color * tree * item * tree) + + datatype set = SET of (int * tree) + + fun isEmpty (SET(_, E)) = true + | isEmpty _ = false + + val empty = SET(0, E) + + fun minItem (SET(_, tr)) = let + fun min E = raise Empty + | min (T(_, E, item, _)) = item + | min (T(_, tr, _, _)) = min tr + in + min tr + end + + fun maxItem (SET(_, tr)) = let + fun max E = raise Empty + | max (T(_, _, item, E)) = item + | max (T(_, _, _, tr)) = max tr + in + max tr + end + + fun singleton x = SET(1, T(B, E, x, E)) + + fun add (SET(nItems, m), x) = let + val nItems' = ref nItems + fun ins E = (nItems' := nItems+1; T(R, E, x, E)) + | ins (s as T(color, a, y, b)) = + if (x < y) + then (case a + of T(R, c, z, d) => + if (x < z) + then (case ins c + of T(R, e, w, f) => T(R, T(B,e,w,f), z, T(B,d,y,b)) + | c => T(B, T(R,c,z,d), y, b) + (* end case *)) + else if (x = z) + then T(color, T(R, c, x, d), y, b) + else (case ins d + of T(R, e, w, f) => T(R, T(B,c,z,e), w, T(B,f,y,b)) + | d => T(B, T(R,c,z,d), y, b) + (* end case *)) + | _ => T(B, ins a, y, b) + (* end case *)) + else if (x = y) + then T(color, a, x, b) + else (case b + of T(R, c, z, d) => + if (x < z) + then (case ins c + of T(R, e, w, f) => T(R, T(B,a,y,e), w, T(B,f,z,d)) + | c => T(B, a, y, T(R,c,z,d)) + (* end case *)) + else if (x = z) + then T(color, a, y, T(R, c, x, d)) + else (case ins d + of T(R, e, w, f) => T(R, T(B,a,y,c), z, T(B,e,w,f)) + | d => T(B, a, y, T(R,c,z,d)) + (* end case *)) + | _ => T(B, a, y, ins b) + (* end case *)) + val T(_, a, y, b) = ins m + in + SET(!nItems', T(B, a, y, b)) + end + fun add' (x, m) = add (m, x) + + fun addList (s, []) = s + | addList (s, x::r) = addList(add(s, x), r) + + (* Remove an item. Raises LibBase.NotFound if not found. *) + local + datatype zipper + = TOP + | LEFT of (color * item * tree * zipper) + | RIGHT of (color * tree * item * zipper) + in + fun delete (SET(nItems, t), k) = let + (* zip the zipper *) + fun zip (TOP, t) = t + | zip (LEFT(color, x, b, p), a) = zip(p, T(color, a, x, b)) + | zip (RIGHT(color, a, x, p), b) = zip(p, T(color, a, x, b)) + (* zip the zipper while resolving a black deficit *) + fun fixupZip (TOP, t) = (true, t) + (* case 1 from CLR *) + | fixupZip (LEFT(B, x, T(R, a, y, b), p), t) = (case a + of T(_, T(R, a11, w, a12), z, a2) => (* case 1L ==> case 3L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, x, a11), w, T(B, a12, z, a2)), y, b))) + | T(_, a1, z, T(R, a21, w, t22)) => (* case 1L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, x, a1), z, T(B, a21, w, t22)), y, b))) + | T(_, a1, z, a2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, T(B, t, x, T(R, a1, z, a2)), y, b))) + | _ => fixupZip (LEFT(R, x, a, LEFT(B, y, b, p)), t) + (* end case *)) + | fixupZip (RIGHT(B, T(R, a, x, b), y, p), t) = (case b + of T(_, b1, z, T(R, b21, w, b22)) => (* case 1R ==> case 3R ==> case 4R *) + (false, zip (p, T(B, a, x, T(R, T(B, b1, z, b21), w, T(B, b22, y, t))))) + | T(_, T(R, b11, w, b12), z, b2) => (* case 1R ==> case 4R *) + (false, zip (p, T(B, a, x, T(R, T(B, b11, w, b12), z, T(B, b2, y, t))))) + | T(_, b1, z, b2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, a, x, T(B, T(R, b1, z, b2), y, t)))) + | _ => fixupZip (RIGHT(R, b, y, RIGHT(B, a, x, p)), t) + (* end case *)) + (* case 3 from CLR *) + | fixupZip (LEFT(color, x, T(B, T(R, a1, y, a2), z, b), p), t) = + (* case 3L ==> case 4L *) + (false, zip (p, T(color, T(B, t, x, a1), y, T(B, a2, z, b)))) + | fixupZip (RIGHT(color, T(B, a, x, T(R, b1, y, b2)), z, p), t) = + (* case 3R ==> case 4R; rotate, recolor, plus rotate fixes deficit *) + (false, zip (p, T(color, T(B, a, x, b1), y, T(B, b2, z, t)))) + (* case 4 from CLR *) + | fixupZip (LEFT(color, x, T(B, a, y, T(R, b1, z, b2)), p), t) = + (false, zip (p, T(color, T(B, t, x, a), y, T(B, b1, z, b2)))) + | fixupZip (RIGHT(color, T(B, T(R, a1, z, a2), x, b), y, p), t) = + (false, zip (p, T(color, T(B, a1, z, a2), x, T(B, b, y, t)))) + (* case 2 from CLR; note that "a" and "b" are guaranteed to be black, since we did + * not match cases 3 or 4. + *) + | fixupZip (LEFT(R, x, T(B, a, y, b), p), t) = + (false, zip (p, T(B, t, x, T(R, a, y, b)))) + | fixupZip (LEFT(B, x, T(B, a, y, b), p), t) = + fixupZip (p, T(B, t, x, T(R, a, y, b))) + | fixupZip (RIGHT(R, T(B, a, x, b), y, p), t) = + (false, zip (p, T(B, T(R, a, x, b), y, t))) + | fixupZip (RIGHT(B, T(B, a, x, b), y, p), t) = + fixupZip (p, T(B, T(R, a, x, b), y, t)) + (* push deficit up the tree by recoloring a black node as red *) + | fixupZip (LEFT(_, y, E, p), t) = fixupZip (p, T(R, t, y, E)) + | fixupZip (RIGHT(_, E, y, p), t) = fixupZip (p, T(R, E, y, t)) + (* impossible cases that violate the red invariant *) + | fixupZip _ = raise Fail "Red invariant violation" + (* delete the minimum value from a non-empty tree, returning a triple + * (elem, bd, tr), where elem is the minimum element, tr is the residual + * tree with elem removed, and bd is true if tr has a black-depth that is + * less than the original tree. + *) + fun delMin (T(R, E, y, b), p) = + (* replace the node by its right subtree (which must be E) *) + (y, false, zip(p, b)) + | delMin (T(B, E, y, T(R, a', y', b')), p) = + (* replace the node with its right child, while recoloring the child black to + * preserve the black invariant. + *) + (y, false, zip (p, T(B, a', y', b'))) + | delMin (T(B, E, y, E), p) = let + (* delete the node, which reduces the black-depth by one, so we attempt to fix + * the deficit on the path back. + *) + val (blkDeficit, t) = fixupZip (p, E) + in + (y, blkDeficit, t) + end + | delMin (T(color, a, y, b), z) = delMin(a, LEFT(color, y, b, z)) + | delMin (E, _) = raise Match + fun del (E, z) = raise LibBase.NotFound + | del (T(color, a, y, b), p) = + if (k < y) + then del (a, LEFT(color, y, b, p)) + else if (k = y) + then (case (color, a, b) + of (R, E, E) => zip(p, E) + | (B, E, E) => #2 (fixupZip (p, E)) + | (_, T(_, a', y', b'), E) => + (* node is black and left child is red; we replace the node with its + * left child recolored to black. + *) + zip(p, T(B, a', y', b')) + | (_, E, T(_, a', y', b')) => + (* node is black and right child is red; we replace the node with its + * right child recolored to black. + *) + zip(p, T(B, a', y', b')) + | _ => let + val (minSucc, blkDeficit, b) = delMin (b, TOP) + in + if blkDeficit + then #2 (fixupZip (RIGHT(color, a, minSucc, p), b)) + else zip (p, T(color, a, minSucc, b)) + end + (* end case *)) + else del (b, RIGHT(color, a, y, p)) + in + case del(t, TOP) + of T(R, a, x, b) => SET(nItems-1, T(B, a, x, b)) + | t => SET(nItems-1, t) + (* end case *) + end + end (* local *) + + (* Return true if and only if item is an element in the set *) + fun member (SET(_, t), k) = let + fun find' E = false + | find' (T(_, a, y, b)) = + (k = y) orelse ((k < y) andalso find' a) orelse find' b + in + find' t + end + + (* Return the number of items in the map *) + fun numItems (SET(n, _)) = n + + fun foldl f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, x, b), accum) = + foldf(b, f(x, foldf(a, accum))) + in + fn init => fn (SET(_, m)) => foldf(m, init) + end + + fun foldr f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, x, b), accum) = + foldf(a, f(x, foldf(b, accum))) + in + fn init => fn (SET(_, m)) => foldf(m, init) + end + + (* return an ordered list of the items in the set. *) + fun toList s = foldr (fn (x, l) => x::l) [] s + + (* functions for walking the tree while keeping a stack of parents + * to be visited. + *) + fun next ((t as T(_, _, _, b))::rest) = (t, left(b, rest)) + | next _ = (E, []) + and left (E, rest) = rest + | left (t as T(_, a, _, _), rest) = left(a, t::rest) + fun start m = left(m, []) + + (* Return true if and only if the two sets are equal *) + fun equal (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => true + | ((E, _), _) => false + | (_, (E, _)) => false + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + (x = y) andalso cmp (r1, r2) + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return the lexical order of two sets *) + fun compare (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => EQUAL + | ((E, _), _) => LESS + | (_, (E, _)) => GREATER + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + if (x = y) + then cmp (r1, r2) + else if (x < y) + then LESS + else GREATER + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return true if and only if the first set is a subset of the second *) + fun isSubset (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => true + | ((E, _), _) => true + | (_, (E, _)) => false + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + ((x = y) andalso cmp (r1, r2)) + orelse ((x > y) andalso cmp (t1, r2)) + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return true if the two sets are disjoint *) + fun disjoint (SET(0, _), _) = true + | disjoint (_, SET(0, _)) = true + | disjoint (SET(_, s1), SET(_, s2)) = let + fun walk ((E, _), _) = true + | walk (_, (E, _)) = true + | walk (t1 as (T(_, _, x, _), r1), t2 as (T(_, _, y, _), r2)) = + ((x < y) andalso walk (next r1, t2)) + orelse ((x > y) andalso walk (t1, next r2)) + in + walk (next (start s1), next (start s2)) + end + + (* support for constructing red-black trees in linear time from increasing + * ordered sequences (based on a description by R. Hinze). Note that the + * elements in the digits are ordered with the largest on the left, whereas + * the elements of the trees are ordered with the largest on the right. + *) + datatype digit + = ZERO + | ONE of (item * tree * digit) + | TWO of (item * tree * item * tree * digit) + (* add an item that is guaranteed to be larger than any in l *) + fun addItem (a, l) = let + fun incr (a, t, ZERO) = ONE(a, t, ZERO) + | incr (a1, t1, ONE(a2, t2, r)) = TWO(a1, t1, a2, t2, r) + | incr (a1, t1, TWO(a2, t2, a3, t3, r)) = + ONE(a1, t1, incr(a2, T(B, t3, a3, t2), r)) + in + incr(a, E, l) + end + (* link the digits into a tree *) + fun linkAll t = let + fun link (t, ZERO) = t + | link (t1, ONE(a, t2, r)) = link(T(B, t2, a, t1), r) + | link (t, TWO(a1, t1, a2, t2, r)) = + link(T(B, T(R, t2, a2, t1), a1, t), r) + in + link (E, t) + end + + (* create a set from a list of items; this function works in linear time if the list + * is in increasing order. + *) + fun fromList [] = empty + | fromList (first::rest) = let + fun add (prev, x::xs, n, accum) = if (prev < x) + then add(x, xs, n+1, addItem(x, accum)) + else (* list not in order, so fall back to addList code *) + addList(SET(n, linkAll accum), x::xs) + | add (_, [], n, accum) = SET(n, linkAll accum) + in + add (first, rest, 1, addItem(first, ZERO)) + end + + (* return the union of the two sets *) + fun union (SET(_, s1), SET(_, s2)) = let + fun ins ((E, _), n, result) = (n, result) + | ins ((T(_, _, x, _), r), n, result) = + ins(next r, n+1, addItem(x, result)) + fun union' (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), t2) => ins(t2, n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + if (x < y) + then union' (r1, t2, n+1, addItem(x, result)) + else if (x = y) + then union' (r1, r2, n+1, addItem(x, result)) + else union' (t1, r2, n+1, addItem(y, result)) + (* end case *)) + val (n, result) = union' (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + (* return the intersection of the two sets *) + fun intersection (SET(_, s1), SET(_, s2)) = let + fun intersect (t1, t2, n, result) = (case (next t1, next t2) + of ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + if (x < y) + then intersect (r1, t2, n, result) + else if (x = y) + then intersect (r1, r2, n+1, addItem(x, result)) + else intersect (t1, r2, n, result) + | _ => (n, result) + (* end case *)) + val (n, result) = intersect (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + (* return the set difference *) + fun difference (SET(_, s1), SET(_, s2)) = let + fun ins ((E, _), n, result) = (n, result) + | ins ((T(_, _, x, _), r), n, result) = + ins(next r, n+1, addItem(x, result)) + fun diff (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), _) => (n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + if (x < y) + then diff (r1, t2, n+1, addItem(x, result)) + else if (x = y) + then diff (r1, r2, n, result) + else diff (t1, r2, n, result) + (* end case *)) + val (n, result) = diff (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + fun subtract (s, item) = difference (s, singleton item) + fun subtract' (item, s) = subtract (s, item) + + fun subtractList (l, items) = let + val items' = List.foldl (fn (x, set) => add(set, x)) (SET(0, E)) items + in + difference (l, items') + end + + fun app f = let + fun appf E = () + | appf (T(_, a, x, b)) = (appf a; f x; appf b) + in + fn (SET(_, m)) => appf m + end + + fun map f = let + fun addf (x, m) = add(m, f x) + in + foldl addf empty + end + + fun mapPartial f = let + fun f' (x, acc) = (case f x of SOME x' => add(acc, x') | NONE => acc) + in + foldl f' empty + end + + (* Filter out those elements of the set that do not satisfy the + * predicate. The filtering is done in increasing map order. + *) + fun filter pred (SET(_, t)) = let + fun walk (E, n, result) = (n, result) + | walk (T(_, a, x, b), n, result) = let + val (n, result) = walk(a, n, result) + in + if (pred x) + then walk(b, n+1, addItem(x, result)) + else walk(b, n, result) + end + val (n, result) = walk (t, 0, ZERO) + in + SET(n, linkAll result) + end + + fun partition pred (SET(_, t)) = let + fun walk (E, n1, result1, n2, result2) = (n1, result1, n2, result2) + | walk (T(_, a, x, b), n1, result1, n2, result2) = let + val (n1, result1, n2, result2) = walk(a, n1, result1, n2, result2) + in + if (pred x) + then walk(b, n1+1, addItem(x, result1), n2, result2) + else walk(b, n1, result1, n2+1, addItem(x, result2)) + end + val (n1, result1, n2, result2) = walk (t, 0, ZERO, 0, ZERO) + in + (SET(n1, linkAll result1), SET(n2, linkAll result2)) + end + + fun exists pred = let + fun test E = false + | test (T(_, a, x, b)) = test a orelse pred x orelse test b + in + fn (SET(_, t)) => test t + end + + fun all pred = let + fun test E = true + | test (T(_, a, x, b)) = test a andalso pred x andalso test b + in + fn (SET(_, t)) => test t + end + + fun find pred = let + fun test E = NONE + | test (T(_, a, x, b)) = (case test a + of NONE => if pred x then SOME x else test b + | someItem => someItem + (* end case *)) + in + fn (SET(_, t)) => test t + end + + (* deprecated *) + val listItems = toList + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/io-util-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/io-util-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/io-util-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/io-util-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,20 @@ +(* io-util-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Support for redirecting stdIn/stdOut. + *) + +signature IO_UTIL = + sig + + (* rebind stdIn *) + val withInputFile : string * ('a -> 'b) -> 'a -> 'b + val withInstream : TextIO.instream * ('a -> 'b) -> 'a -> 'b + + (* rebind stdOut *) + val withOutputFile : string * ('a -> 'b) -> 'a -> 'b + val withOutstream : TextIO.outstream * ('a -> 'b) -> 'a -> 'b + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/io-util.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/io-util.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/io-util.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/io-util.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,60 @@ +(* io-util.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + *) + +structure IOUtil : IO_UTIL = + struct + + type instream = TextIO.instream + type outstream = TextIO.outstream + + fun swapInstrm (s, s') = + TextIO.getInstream s before TextIO.setInstream(s, s') + + fun withInputFile (s, f) x = let + val oldStrm = swapInstrm(TextIO.stdIn, TextIO.getInstream(TextIO.openIn s)) + fun cleanUp () = + TextIO.StreamIO.closeIn(swapInstrm(TextIO.stdIn, oldStrm)) + val res = (f x) handle ex => (cleanUp(); raise ex) + in + cleanUp(); + res + end + + fun withInstream (strm, f) x = let + val oldStrm = swapInstrm(TextIO.stdIn, TextIO.getInstream strm) + fun cleanUp () = + TextIO.setInstream(strm, swapInstrm(TextIO.stdIn, oldStrm)) + val res = (f x) handle ex => (cleanUp(); raise ex) + in + cleanUp(); + res + end + + fun swapOutstrm (s, s') = + TextIO.getOutstream s before TextIO.setOutstream(s, s') + + fun withOutputFile (s, f) x = let + val oldStrm = swapOutstrm(TextIO.stdOut, TextIO.getOutstream(TextIO.openOut s)) + fun cleanUp () = + TextIO.StreamIO.closeOut(swapOutstrm(TextIO.stdOut, oldStrm)) + val res = (f x) handle ex => (cleanUp(); raise ex) + in + cleanUp(); + res + end + + fun withOutstream (strm, f) x = let + val oldStrm = swapOutstrm(TextIO.stdOut, TextIO.getOutstream strm) + fun cleanUp () = + TextIO.setOutstream(strm, swapOutstrm(TextIO.stdOut, oldStrm)) + val res = (f x) handle ex => (cleanUp(); raise ex) + in + cleanUp(); + res + end + + end (* IOUtil *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/iterate-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/iterate-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/iterate-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/iterate-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,31 @@ +(* iterate-sig.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + *) + +signature ITERATE = + sig + + val iterate : ('a -> 'a) -> int -> 'a -> 'a + (* iterate f cnt init = f(f(...f(f(init))...)) (cnt times) + * iterate f 0 init = init + * raises BadArg if cnt < 0 + *) + + val repeat : (int * 'a -> 'a) -> int -> 'a -> 'a + (* repeat f cnt init + * = #2(iterate (fn (i,v) => (i+1,f(i,v))) cnt (0,init)) + *) + + val for : (int * 'a -> 'a) -> (int * int * int) -> 'a -> 'a + (* for f (start,stop,inc) init + * "for loop" + * implements f(...f(start+2*inc,f(start+inc,f(start,init)))...) + * until the first argument of f > stop if inc > 0 + * or the first argument of f < stop if inc < 0 + * raises BadArg if inc <= 0 and start < stop or if inc >=0 and + * start > stop. + *) + + end (* ITERATE *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/iterate.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/iterate.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/iterate.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/iterate.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,42 @@ +(* iterate.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + *) + +structure Iterate : ITERATE = + struct + + fun badArg (f,msg) = LibBase.failure {module="Iterate",func=f,msg=msg} + + fun iterate f cnt init = let + fun iter (0,v) = v + | iter (n,v) = iter(n-1,f v) + in + if cnt < 0 + then badArg ("iterate","count < 0") + else iter (cnt,init) + end + + fun repeat f cnt init = let + fun iter (n,v) = if n = cnt then v else iter(n+1,f(n,v)) + in + if cnt < 0 + then badArg ("repeat","count < 0") + else iter (0,init) + end + + fun for f (start,stop,inc) = let + fun up (n,v) = if n > stop then v else up(n+inc,f(n,v)) + fun down (n,v) = if n < stop then v else down(n+inc,f(n,v)) + in + if start < stop + then if inc <= 0 then badArg ("for","inc <= 0 with start < stop") + else fn v => up(start,v) + else if stop < start + then if inc >= 0 then badArg ("for","inc >= 0 with start > stop") + else fn v => down(start,v) + else fn v => f(start,v) + end + + end (* Iterate *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/keyword-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/keyword-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/keyword-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/keyword-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,51 @@ +(* keyword-fn.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This functor is meant to be used as part of a scanner, where identifiers + * and keywords are scanned using the same lexical rules and are then + * further analyzed. + *) + +functor KeywordFn (KW : sig + type token + type pos + val ident : (Atom.atom * pos * pos) -> token + val keywords : (string * ((pos * pos) -> token)) list + end) : sig + type token + type pos + val keyword : (string * pos * pos) -> token + end = struct + + structure A = Atom + structure Tbl = AtomTable + + type token = KW.token + type pos = KW.pos + + (* the keyword hash table *) + exception Keyword + val kwTbl : ((pos * pos) -> token) Tbl.hash_table = + Tbl.mkTable(List.length KW.keywords, Keyword) + + (* insert the reserved words into the keyword hash table *) + val _ = let + val insert = Tbl.insert kwTbl + fun ins (s, item) = insert (A.atom s, item) + in + app ins KW.keywords + end + + fun keyword (s, p1, p2) = let + val name = A.atom s + in + case (Tbl.find kwTbl name) + of (SOME tokFn) => tokFn(p1, p2) + | NONE => KW.ident(name, p1, p2) + (* end case *) + end + + end; + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/left-priorityq-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/left-priorityq-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/left-priorityq-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/left-priorityq-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,88 @@ +(* left-priorityq-fn.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * An implementation of priority queues based on leaftist heaps (see + * Purely Functional Data Structures by Chris Okasaki). + *) + +functor LeftPriorityQFn (P : PRIORITY) : MONO_PRIORITYQ = + struct + + type item = P.item + + datatype queue = Q of (int * heap) + and heap = EMPTY | ND of (int * item * heap * heap) + + val empty = Q(0, EMPTY) + + fun singletonHeap x = ND(1, x, EMPTY, EMPTY) + fun singleton x = Q(1, singletonHeap x) + + fun rank EMPTY = 0 + | rank (ND(r, _, _, _)) = r + + fun mkNode (x, a, b) = if (rank a >= rank b) + then ND(rank b + 1, x, a, b) + else ND(rank a + 1, x, b, a) + + fun mergeHeap (h, EMPTY) = h + | mergeHeap (EMPTY, h) = h + | mergeHeap (h1 as ND(_, x, h11, h12), h2 as ND(_, y, h21, h22)) = ( + case P.compare(P.priority x, P.priority y) + of GREATER => mkNode(x, h11, mergeHeap(h12, h2)) + | _ => mkNode(y, h21, mergeHeap(h1, h22)) + (* end case *)) + + fun insertHeap (h, x) = mergeHeap(singletonHeap x, h) + + fun insert (x, Q(n, h)) = Q(n+1, insertHeap (h, x)) + + fun next (Q(_, EMPTY)) = NONE + | next (Q(n, ND(_, x, h1, h2))) = SOME(x, Q(n-1, mergeHeap(h1, h2))) + + fun remove (Q(_, EMPTY)) = raise List.Empty + | remove (Q(n, ND(_, x, h1, h2))) = (x, Q(n-1, mergeHeap(h1, h2))) + + (* this is a somewhat brute force implementation that probably could be improved *) + fun findAndRemove (Q(n, heap), pred) = let + fun find (EMPTY, rejects) = NONE + | find (ND(_, x, h1, h2), rejects) = if pred x + then SOME(x, Q(n-1, mergeHeap(rejects, mergeHeap(h1, h2)))) + else find (mergeHeap(h1, h2), insertHeap (rejects, x)) + in + find (heap, EMPTY) + end + + fun delete (Q(n, heap), pred) = let + fun filter (EMPTY, (n, residual)) = (n, residual) + | filter (ND(_, x, h1, h2), (n, residual)) = if pred x + then filter (h2, filter (h1, (n-1, residual))) + else filter (h2, filter (h1, (n, insertHeap (residual, x)))) + in + Q (filter (heap, (n, EMPTY))) + end + + fun merge (Q(n1, h1), Q(n2, h2)) = Q(n1+n2, mergeHeap(h1, h2)) + + fun numItems (Q(n, _)) = n + + fun isEmpty (Q(_, EMPTY)) = true + | isEmpty _ = false + + fun fromList [] = empty + | fromList [x] = Q(1, singletonHeap x) + | fromList l = let + fun init ([], n, items) = (n, items) + | init (x::r, n, items) = init (r, n+1, singletonHeap x :: items) + fun merge ([], [h]) = h + | merge ([], hl) = merge (hl, []) + | merge ([h], hl) = merge (h::hl, []) + | merge (h1::h2::r, l) = merge (r, mergeHeap(h1, h2) :: l) + val (len, hs) = init (l, 0, []) + in + Q(len, merge (hs, [])) + end + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/lib-base-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/lib-base-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/lib-base-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/lib-base-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,21 @@ +(* lib-base-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +signature LIB_BASE = + sig + + exception Unimplemented of string + (* raised to report unimplemented features *) + exception Impossible of string + (* raised to report internal errors *) + + exception NotFound + (* raised by searching operations *) + + val failure : {module : string, func : string, msg : string} -> 'a + (* raise the exception Fail with a standard format message. *) + + end (* LIB_BASE *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/lib-base.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/lib-base.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/lib-base.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/lib-base.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,23 @@ +(* lib-base.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure LibBase : LIB_BASE = + struct + + (* raised to report unimplemented features *) + exception Unimplemented of string + + (* raised to report internal errors *) + exception Impossible of string + + (* raised by searching operations *) + exception NotFound + + (* raise the exception Fail with a standard format message. *) + fun failure {module, func, msg} = + raise (Fail(concat[module, ".", func, ": ", msg])) + + end (* LibBase *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-format-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-format-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-format-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-format-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,37 @@ +(* list-format-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +signature LIST_FORMAT = + sig + + val fmt : { + init : string, + sep : string, + final : string, + fmt : 'a -> string + } -> 'a list -> string + (* given an initial string (init), a separator (sep), a terminating + * string (final), and an item formating function (fmt), return a list + * formatting function. The list ``[a, b, ..., c]'' gets formated as + * ``init ^ (fmt a) ^ sep ^ (fmt b) ^ sep ^ ... ^ sep ^ (fmt c) ^ final.'' + *) + + val listToString : ('a -> string) -> 'a list -> string + (* formats a list in SML style (i.e., init="[", sep=",", final="]"). *) + + val scan : { + init : string, + sep : string, + final : string, + scan : (char, 'b) StringCvt.reader -> ('a, 'b) StringCvt.reader + } -> (char, 'b) StringCvt.reader -> ('a list, 'b) StringCvt.reader + (* given an expected initial string, a separator, a terminating + * string, and an item scanning function, return a function that + * scans a string for a list of items. Whitespace is ignored. + * If the input string has the incorrect syntax, then NONE is returned. + *) + + end; (* LIST_FORMAT *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-format.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-format.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-format.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-format.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,84 @@ +(* list-format.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure ListFormat : LIST_FORMAT = + struct + + (* given an initial string (init), a separator (sep), a terminating + * string (final), and an item formating function (fmt), return a list + * formatting function. The list ``[a, b, ..., c]'' gets formated as + * ``init ^ (fmt a) ^ sep ^ (fmt b) ^ sep ^ ... ^ sep ^ (fmt c) ^ final.'' + *) + fun fmt {init, sep, final, fmt} = let + fun format [] = init ^ final + | format [x] = concat[init, fmt x, final] + | format (x::r) = let + fun f ([], l) = concat(rev(final::l)) + | f (x::r, l) = f (r, (fmt x) :: sep :: l) + in + f (r, [fmt x, init]) + end + in + format + end (* formatList *) + + fun listToString f = fmt {init="[", sep=",", final="]", fmt=f} + + (* given an expected initial string, a separator, a terminating + * string, and an item scanning function, return a function that + * scans a string for a list of items. Whitespace is ignored. + * If the input string has the incorrect syntax, then the exception + * ScanList is raised with the position of the first error. + *) + fun scan {init, sep, final, scan} getc strm = let + val skipWS = StringCvt.skipWS getc + val scanItem = scan getc + fun eat "" = (fn strm => (true, skipWS strm)) + | eat s = let + val n = size s + fun isPrefix (i, strm) = + if (i = n) then SOME strm + else (case getc strm + of (SOME(c, strm)) => if (String.sub(s, i) = c) + then isPrefix(i+1, strm) + else NONE + | NONE => NONE + (* end case *)) + fun eat' strm = ( + case isPrefix (0, skipWS strm) + of (SOME strm) => (true, strm) + | NONE => (false, strm) + (* end case *)) + in + eat' + end + val isInit = eat init + val isSep = eat sep + val isFinal = eat final + fun scan (strm, l) = (case (isFinal strm) + of (true, strm) => SOME(rev l, strm) + | (false, strm) => (case isSep strm + of (true, strm) => (case scanItem (skipWS strm) + of (SOME(x, strm)) => scan (strm, x::l) + | NONE => NONE + (* end case *)) + | _ => NONE + (* end case *)) + (* end case *)) + in + case (isInit strm) + of (true, strm) => (case (isFinal strm) + of (true, strm) => SOME([], strm) + | (false, strm) => (case scanItem (skipWS strm) + of (SOME(x, strm)) => scan (strm, [x]) + | NONE => NONE + (* end case *)) + (* end case *)) + | (false, i) => NONE + (* end case *) + end (* scan *) + + end; (* ListFormat *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-map-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-map-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-map-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-map-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,296 @@ +(* list-map-fn.sml + * + * COPYRIGHT (c) 2012 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * COPYRIGHT (c) 1996 by AT&T Research. See COPYRIGHT file for details. + * + * An implementation of finite maps on ordered keys, which uses a sorted list + * representation. + *) + +functor ListMapFn (K : ORD_KEY) :> ORD_MAP where type Key.ord_key = K.ord_key = + struct + + structure Key = K + + type 'a map = (K.ord_key * 'a) list + + val empty = [] + + fun isEmpty [] = true + | isEmpty _ = false + + (* return the first item in the map (or NONE if it is empty) *) + fun first [] = NONE + | first ((_, value)::_) = SOME value + + (* return the first item in the map and its key (or NONE if it is empty) *) + fun firsti [] = NONE + | firsti ((key, value)::_) = SOME(key, value) + + fun singleton (key, item) = [(key, item)] + + fun insert (l, key, item) = let + fun f [] = [(key, item)] + | f ((elem as (key', _))::r) = (case Key.compare(key, key') + of LESS => (key, item) :: elem :: r + | EQUAL => (key, item) :: r + | GREATER => elem :: (f r) + (* end case *)) + in + f l + end + fun insert' ((k, x), m) = insert(m, k, x) + + fun insertWithi comb (l, key, item) = let + fun f [] = [(key, item)] + | f ((elem as (key', item'))::r) = (case Key.compare(key, key') + of LESS => (key, item) :: elem :: r + | EQUAL => (key, comb(key, item', item)) :: r + | GREATER => elem :: (f r) + (* end case *)) + in + f l + end + fun insertWith comb = insertWithi (fn (_, x1, x2) => comb(x1, x2)) + + (* return true if the key is in the map's domain *) + fun inDomain (l, key) = let + fun f [] = false + | f ((key', x) :: r) = (case Key.compare(key, key') + of LESS => false + | EQUAL => true + | GREATER => f r + (* end case *)) + in + f l + end + + (* Look for an item, return NONE if the item doesn't exist *) + fun find (l, key) = let + fun f [] = NONE + | f ((key', x) :: r) = (case Key.compare(key, key') + of LESS => NONE + | EQUAL => SOME x + | GREATER => f r + (* end case *)) + in + f l + end + + (* Look for an item, raise NotFound if the item doesn't exist *) + fun lookup (l, key) = let + fun f [] = raise LibBase.NotFound + | f ((key', x) :: r) = (case Key.compare(key, key') + of LESS => raise LibBase.NotFound + | EQUAL => x + | GREATER => f r + (* end case *)) + in + f l + end + + (* Remove an item, returning new map and value removed. + * Raise LibBase.NotFound if not found. + *) + fun remove (l, key) = let + fun f (_, []) = raise LibBase.NotFound + | f (prefix, (elem as (key', x)) :: r) = (case Key.compare(key, key') + of LESS => raise LibBase.NotFound + | EQUAL => (List.revAppend(prefix, r), x) + | GREATER => f(elem :: prefix, r) + (* end case *)) + in + f ([], l) + end + + (* Return the number of items in the map *) + fun numItems l = List.length l + + (* Return a list of the items (and their keys) in the map *) + fun listItems (l : 'a map) = List.map #2 l + fun listItemsi l = l + + fun listKeys (l : 'a map) = List.map #1 l + + fun collate cmpRng = let + fun cmp ([], []) = EQUAL + | cmp ([], _) = LESS + | cmp (_, []) = GREATER + | cmp ((x1, y1)::r1, (x2, y2)::r2) = (case Key.compare(x1, x2) + of EQUAL => (case cmpRng(y1, y2) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + | order => order + (* end case *)) + in + cmp + end + + (* return a map whose domain is the union of the domains of the two input + * maps, using the supplied function to define the map on elements that + * are in both domains. + *) + fun unionWith f (m1 : 'a map, m2 : 'a map) = let + fun merge ([], [], l) = List.rev l + | merge ([], m2, l) = List.revAppend(l, m2) + | merge (m1, [], l) = List.revAppend(l, m1) + | merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = ( + case Key.compare (k1, k2) + of LESS => merge (r1, m2, (k1, x1)::l) + | EQUAL => merge (r1, r2, (k1, f(x1, x2)) :: l) + | GREATER => merge (m1, r2, (k2, x2)::l) + (* end case *)) + in + merge (m1, m2, []) + end + fun unionWithi f (m1 : 'a map, m2 : 'a map) = let + fun merge ([], [], l) = List.rev l + | merge ([], m2, l) = List.revAppend(l, m2) + | merge (m1, [], l) = List.revAppend(l, m1) + | merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = ( + case Key.compare (k1, k2) + of LESS => merge (r1, m2, (k1, x1)::l) + | EQUAL => merge (r1, r2, (k1, f(k1, x1, x2)) :: l) + | GREATER => merge (m1, r2, (k2, x2)::l) + (* end case *)) + in + merge (m1, m2, []) + end + + (* return a map whose domain is the intersection of the domains of the + * two input maps, using the supplied function to define the range. + *) + fun intersectWith f (m1 : 'a map, m2 : 'b map) = let + fun merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = ( + case Key.compare (k1, k2) + of LESS => merge (r1, m2, l) + | EQUAL => merge (r1, r2, (k1, f(x1, x2)) :: l) + | GREATER => merge (m1, r2, l) + (* end case *)) + | merge (_, _, l) = List.rev l + in + merge (m1, m2, []) + end + fun intersectWithi f (m1 : 'a map, m2 : 'b map) = let + fun merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = ( + case Key.compare (k1, k2) + of LESS => merge (r1, m2, l) + | EQUAL => merge (r1, r2, (k1, f(k1, x1, x2)) :: l) + | GREATER => merge (m1, r2, l) + (* end case *)) + | merge (_, _, l) = List.rev l + in + merge (m1, m2, []) + end + + fun mergeWith f (m1 : 'a map, m2 : 'b map) = let + fun merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = ( + case Key.compare (k1, k2) + of LESS => mergef (k1, SOME x1, NONE, r1, m2, l) + | EQUAL => mergef (k1, SOME x1, SOME x2, r1, r2, l) + | GREATER => mergef (k2, NONE, SOME x2, m1, r2, l) + (* end case *)) + | merge ([], [], l) = List.rev l + | merge ((k1, x1)::r1, [], l) = mergef (k1, SOME x1, NONE, r1, [], l) + | merge ([], (k2, x2)::r2, l) = mergef (k2, NONE, SOME x2, [], r2, l) + and mergef (k, x1, x2, r1, r2, l) = (case f (x1, x2) + of NONE => merge (r1, r2, l) + | SOME y => merge (r1, r2, (k, y)::l) + (* end case *)) + in + merge (m1, m2, []) + end + fun mergeWithi f (m1 : 'a map, m2 : 'b map) = let + fun merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), l) = ( + case Key.compare (k1, k2) + of LESS => mergef (k1, SOME x1, NONE, r1, m2, l) + | EQUAL => mergef (k1, SOME x1, SOME x2, r1, r2, l) + | GREATER => mergef (k2, NONE, SOME x2, m1, r2, l) + (* end case *)) + | merge ([], [], l) = List.rev l + | merge ((k1, x1)::r1, [], l) = mergef (k1, SOME x1, NONE, r1, [], l) + | merge ([], (k2, x2)::r2, l) = mergef (k2, NONE, SOME x2, [], r2, l) + and mergef (k, x1, x2, r1, r2, l) = (case f (k, x1, x2) + of NONE => merge (r1, r2, l) + | SOME y => merge (r1, r2, (k, y)::l) + (* end case *)) + in + merge (m1, m2, []) + end + + (* Apply a function to the entries of the map in map order. *) + val appi = List.app + fun app f l = appi (fn (_, item) => f item) l + + (* Create a new table by applying a map function to the + * name/value pairs in the table. + *) + fun mapi f l = List.map (fn (key, item) => (key, f(key, item))) l + fun map f l = List.map (fn (key, item) => (key, f item)) l + + (* Apply a folding function to the entries of the map + * in increasing map order. + *) + fun foldli f init l = + List.foldl (fn ((key, item), accum) => f(key, item, accum)) init l + fun foldl f init l = List.foldl (fn ((_, item), accum) => f(item, accum)) init l + + (* Apply a folding function to the entries of the map + * in decreasing map order. + *) + fun foldri f init l = + List.foldr (fn ((key, item), accum) => f(key, item, accum)) init l + fun foldr f init l = List.foldr (fn ((_, item), accum) => f(item, accum)) init l + + fun filter pred l = List.filter (fn (_, item) => pred item) l + fun filteri pred l = List.filter pred l + + fun mapPartiali f l = let + fun f' (key, item) = (case f (key, item) + of NONE => NONE + | SOME y => SOME(key, y) + (* end case *)) + in + List.mapPartial f' l + end + fun mapPartial f l = mapPartiali (fn (_, item) => f item) l + + (* check the elements of a map with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + * Elements are checked in key order. + *) + fun exists pred = let + fun exists' [] = false + | exists' ((_, x)::r) = pred x orelse exists' r + in + exists' + end + fun existsi pred = let + fun exists' [] = false + | exists' (arg::r) = pred arg orelse exists' r + in + exists' + end + + (* check the elements of a map with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. Elements + * are checked in key order. + *) + fun all pred = let + fun all' [] = false + | all' ((_, x)::r) = pred x andalso all' r + in + all' + end + fun alli pred = let + fun all' [] = false + | all' (arg::r) = pred arg andalso all' r + in + all' + end + + end (* functor ListMapFn *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-mergesort.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-mergesort.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-mergesort.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-mergesort.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,101 @@ +(* list-mergesort.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure ListMergeSort : LIST_SORT = + struct + + (* Given a ">" relation, sort the list into increasing order. This sort + * detects initial increasing and decreasing runs and thus is linear + * time on ordered input. + *) + fun sort gt = let + fun revAppend ([], ys) = ys + | revAppend (x::xs, ys) = revAppend(xs, x::ys) + fun merge ([], ys, acc) = revAppend(acc, ys) + | merge (xs, [], acc) = revAppend(acc, xs) + | merge (xs as (x::xr), ys as (y::yr), acc) = + if gt(x, y) + then merge (xs, yr, y::acc) + else merge (xr, ys, x::acc) + fun mergeNeighbors ([], yss) = finishPass yss + | mergeNeighbors ([xs], yss) = finishPass (xs::yss) + | mergeNeighbors (xs1::xs2::xss, yss) = + mergeNeighbors (xss, merge(xs1, xs2, [])::yss) + and finishPass [] = [] + | finishPass [xs] = xs + | finishPass xss = mergeNeighbors (xss, []) + fun init (prev, [], yss) = mergeNeighbors ([prev]::yss, []) + | init (prev, x::xs, yss) = if gt(prev, x) + then runDn (x, xs, [prev], yss) + else runUp (x, xs, [prev], yss) + and runUp (prev, [], run, yss) = mergeNeighbors (revAppend(prev::run, [])::yss, []) + | runUp (prev, x::xr, run, yss) = + if gt(prev, x) + then init (x, xr, revAppend(prev::run, [])::yss) + else runUp (x, xr, prev::run, yss) + and runDn (prev, [], run, yss) = mergeNeighbors ((prev::run)::yss, []) + | runDn (prev, x::xr, run, yss) = + if gt(x, prev) + then init (x, xr, (prev::run)::yss) + else runDn (x, xr, prev::run, yss) + in + fn [] => [] | (x::xs) => init(x, xs, []) + end + + (* Given a comparison function, sort the sequence in ascending order while eliminating + * duplicates. This sort detects initial increasing and decreasing runs and thus is linear + * time on ordered input. + *) + fun uniqueSort cmp = let + fun revAppend ([], ys) = ys + | revAppend (x::xs, ys) = revAppend(xs, x::ys) + fun merge ([], ys, acc) = revAppend(acc, ys) + | merge (xs, [], acc) = revAppend(acc, xs) + | merge (xs as (x::xr), ys as (y::yr), acc) = ( + case cmp (x, y) + of LESS => merge (xr, ys, x::acc) + | EQUAL => merge (xr, yr, x::acc) (* discard duplicate *) + | GREATER => merge (xs, yr, y::acc) + (* end case *)) + fun mergeNeighbors ([], yss) = finishPass yss + | mergeNeighbors ([xs], yss) = finishPass (xs::yss) + | mergeNeighbors (xs1::xs2::xss, yss) = + mergeNeighbors (xss, merge(xs1, xs2, [])::yss) + and finishPass [] = [] + | finishPass [xs] = xs + | finishPass xss = mergeNeighbors (xss, []) + fun init (prev, [], yss) = mergeNeighbors ([prev]::yss, []) + | init (prev, x::xs, yss) = (case cmp(prev, x) + of LESS => runUp (x, xs, [prev], yss) + | EQUAL => init (prev, xs, yss) (* discard duplicate *) + | GREATER => runDn (x, xs, [prev], yss) + (* end case *)) + and runUp (prev, [], run, yss) = mergeNeighbors (revAppend(prev::run, [])::yss, []) + | runUp (prev, x::xr, run, yss) = (case cmp (prev, x) + of LESS => runUp (x, xr, prev::run, yss) + | EQUAL => runUp (prev, xr, run, yss) (* discard duplicate *) + | GREATER => init (x, xr, revAppend(prev::run, [])::yss) + (* end case *)) + and runDn (prev, [], run, yss) = mergeNeighbors ((prev::run)::yss, []) + | runDn (prev, x::xr, run, yss) = (case cmp (prev, x) + of LESS => init (x, xr, (prev::run)::yss) + | EQUAL => runDn (prev, xr, run, yss) (* discard duplicate *) + | GREATER => runDn (x, xr, prev::run, yss) + (* end case *)) + in + fn [] => [] | (x::xs) => init(x, xs, []) + end + + (* is the list sorted in ascending order according to the given ">" relation? *) + fun sorted (op >) = let + fun chk (_, []) = true + | chk (x1, x2::xs) = not(x1>x2) andalso chk(x2, xs) + in + fn [] => true + | (x::xs) => chk(x, xs) + end + + end (* ListMergeSort *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-set-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-set-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-set-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-set-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,205 @@ +(* list-set-fn.sml + * + * COPYRIGHT (c) 2012 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * An implementation of finite sets of ordered values, which uses a sorted list + * representation. + *) + +functor ListSetFn (K : ORD_KEY) :> ORD_SET where type Key.ord_key = K.ord_key = + struct + + structure Key = K + + (* sets are represented as ordered lists of key values *) + type item = Key.ord_key + type set = item list + + val empty = [] + + fun singleton x = [x] + + fun add (l, item) = let + fun f [] = [item] + | f (elem::r) = (case Key.compare(item, elem) + of LESS => item :: elem :: r + | EQUAL => item :: r + | GREATER => elem :: (f r) + (* end case *)) + in + f l + end + fun add' (s, x) = add(x, s) + + fun union (s1, s2) = let + fun merge ([], l2) = l2 + | merge (l1, []) = l1 + | merge (x::r1, y::r2) = (case Key.compare(x, y) + of LESS => x :: merge(r1, y::r2) + | EQUAL => x :: merge(r1, r2) + | GREATER => y :: merge(x::r1, r2) + (* end case *)) + in + merge (s1, s2) + end + + fun intersection (s1, s2) = let + fun merge ([], l2) = [] + | merge (l1, []) = [] + | merge (x::r1, y::r2) = (case Key.compare(x, y) + of LESS => merge(r1, y::r2) + | EQUAL => x :: merge(r1, r2) + | GREATER => merge(x::r1, r2) + (* end case *)) + in + merge (s1, s2) + end + + fun difference (s1, s2) = let + fun merge ([], l2) = [] + | merge (l1, []) = l1 + | merge (x::r1, y::r2) = (case Key.compare(x, y) + of LESS => x :: merge(r1, y::r2) + | EQUAL => merge(r1, r2) + | GREATER => merge(x::r1, r2) + (* end case *)) + in + merge (s1, s2) + end + + fun addList (l, items) = let + val items' = List.foldl (fn (x, set) => add(set, x)) [] items + in + union (l, items') + end + + fun subtract (l, item) = let + fun f ([], _) = l + | f (elem::r, prefix) = (case Key.compare(item, elem) + of LESS => l + | EQUAL => List.revAppend(prefix, r) + | GREATER => f (r, elem::prefix) + (* end case *)) + in + f (l, []) + end + fun subtract' (item, l) = subtract (l, item) + + fun subtractList (l, items) = let + val items' = List.foldl (fn (x, set) => add(set, x)) [] items + in + difference (l, items') + end + + (* create a set from a list of items; this function works in linear time if the list + * is in increasing order. + *) + fun fromList [] = [] + | fromList (first::rest) = let + fun add (prev, x::xs, s) = (case Key.compare(prev, x) + of LESS => add (x, xs, x::s) + | _ => (* not ordered, so fallback to addList *) + addList (List.rev s, x::xs) + (* end case *)) + | add (_, [], s) = List.rev s + in + add (first, rest, [first]) + end + + (* Remove an item, returning new map and value removed. + * Raise LibBase.NotFound if not found. + *) + fun delete (l, elem) = let + fun f (_, []) = raise LibBase.NotFound + | f (prefix, elem' :: r) = (case Key.compare(elem, elem') + of LESS => raise LibBase.NotFound + | EQUAL => List.revAppend(prefix, r) + | GREATER => f(elem' :: prefix, r) + (* end case *)) + in + f ([], l) + end + + fun member (l, item) = let + fun f [] = false + | f (elem :: r) = (case Key.compare(item, elem) + of LESS => false + | EQUAL => true + | GREATER => f r + (* end case *)) + in + f l + end + + fun isEmpty [] = true + | isEmpty _ = false + + fun minItem [] = raise Empty + | minItem (x::_) = x + + fun maxItem xs = List.last xs + + fun equal (s1, s2) = let + fun f ([], []) = true + | f (x::r1, y::r2) = (Key.compare(x, y) = EQUAL) andalso f (r1, r2) + | f _ = false + in + f (s1, s2) + end + + fun compare ([], []) = EQUAL + | compare ([], _) = LESS + | compare (_, []) = GREATER + | compare (x1::r1, x2::r2) = (case Key.compare(x1, x2) + of EQUAL => compare (r1, r2) + | order => order + (* end case *)) + + (* Return true if and only if the first set is a subset of the second *) + fun isSubset (s1, s2) = let + fun f ([], _) = true + | f (_, []) = false + | f (x::r1, y::r2) = (case Key.compare(x, y) + of LESS => false + | EQUAL => f (r1, r2) + | GREATER => f (x::r1, r2) + (* end case *)) + in + f (s1, s2) + end + + fun disjoint ([], _) = true + | disjoint (_, []) = true + | disjoint (x::r1, y::r2) = (case Key.compare(x, y) + of LESS => disjoint (r1, y::r2) + | EQUAL => false + | GREATER => disjoint (x::r1, r2) + (* end case *)) + + (* Return the number of items in the set *) + fun numItems l = List.length l + + (* Return a list of the items in the set *) + fun toList l = l + + val app = List.app + fun map f s1 = List.foldl (fn (x, s) => add(s, f x)) [] s1 + fun mapPartial f s = let + fun f' (x, acc) = (case f x of SOME x' => add(acc, x') | NONE => acc) + in + List.foldl f' [] s + end + val foldr = List.foldr + val foldl = List.foldl + val filter = List.filter + val partition = List.partition + val exists = List.exists + val all = List.all + val find = List.find + + (* deprecated *) + val listItems = toList + + end (* IntListMap *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/listsort-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/listsort-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/listsort-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/listsort-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,27 @@ +(* listsort-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * The generic list sorting interface. Taken from the SML/NJ compiler. + *) + +signature LIST_SORT = + sig + + val sort : ('a * 'a -> bool) -> 'a list -> 'a list + (* (sort gt l) sorts the list l in ascending order using the + * ``greater-than'' relationship defined by gt. + *) + + val uniqueSort : ('a * 'a -> order) -> 'a list -> 'a list + (* uniquesort produces an increasing list, removing equal + * elements + *) + + val sorted : ('a * 'a -> bool) -> 'a list -> bool + (* (sorted gt l) returns true if the list is sorted in ascending + * order under the ``greater-than'' predicate gt. + *) + + end; (* LIST_SORT *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-xprod-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-xprod-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-xprod-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-xprod-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,27 @@ +(* list-xprod-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Functions for computing with the Cartesian product of two lists. + *) + +signature LIST_XPROD = + sig + + val app : (('a * 'b) -> unit) -> ('a list * 'b list) -> unit + (* apply a function to the Cartesian product of two lists *) + + val map : (('a * 'b) -> 'c) -> ('a list * 'b list) -> 'c list + (* map a function across the Cartesian product of two lists *) + + val fold : (('a * 'b * 'c) -> 'c) -> 'c -> ('a list * 'b list) -> 'c + (* fold a function across the Cartesian product of two lists *) + + (* DEPRECATED FUNCTIONS *) + + val appX : (('a * 'b) -> unit) -> ('a list * 'b list) -> unit + val mapX : (('a * 'b) -> 'c) -> ('a list * 'b list) -> 'c list + val foldX : (('a * 'b * 'c) -> 'c) -> ('a list * 'b list) -> 'c -> 'c + + end; (* LIST_XPROD *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-xprod.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-xprod.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/list-xprod.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/list-xprod.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,57 @@ +(* list-xprod.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Functions for computing with the Cartesian product of two lists. + *) + +structure ListXProd : LIST_XPROD = + struct + + (* apply a function to the Cartesian product of two lists *) + fun app f (l1, l2) = let + fun lp1 [] = () + | lp1 (x::r) = let + fun lp2 [] = lp1 r + | lp2 (y::r) = (f(x, y); lp2 r) + in + lp2 l2 + end + in + lp1 l1 + end + + (* map a function across the Cartesian product of two lists *) + fun map f (l1, l2) = let + fun lp1 ([], resL) = rev resL + | lp1 (x::r, resL) = let + fun lp2 ([], resL) = lp1 (r, resL) + | lp2 (y::r, resL) = lp2 (r, f(x, y) :: resL) + in + lp2 (l2, resL) + end + in + lp1 (l1, []) + end + + (* fold a function across the Cartesian product of two lists *) + fun fold f init (l1, l2) = let + fun lp1 ([], accum) = accum + | lp1 (x::r, accum) = let + fun lp2 ([], accum) = lp1 (r, accum) + | lp2 (y::r, accum) = lp2 (r, f(x, y, accum)) + in + lp2 (l2, accum) + end + in + lp1 (l1, init) + end + + (* DEPRECATED FUNCTIONS *) + + val appX = app + val mapX = map + fun foldX f arg init = fold f init arg + + end; (* ListXProd *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-array-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-array-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-array-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-array-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,17 @@ +(* mono-array-fn.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This simple functor allows easy construction of new monomorphic array + * structures. + *) + +functor MonoArrayFn (type elem) :> MONO_ARRAY where type elem = elem + = struct + open Array + type elem = elem + type array = elem Array.array + type vector = elem Vector.vector + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-array-sort-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-array-sort-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-array-sort-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-array-sort-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,19 @@ +(* mono-array-sort-sig.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * Signature for in-place sorting of monomorphic arrays + * + *) + +signature MONO_ARRAY_SORT = + sig + + structure A : MONO_ARRAY + + val sort : (A.elem * A.elem -> order) -> A.array -> unit + + val sorted : (A.elem * A.elem -> order) -> A.array -> bool + + end; (* MONO_ARRAY_SORT *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-dynamic-array-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-dynamic-array-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-dynamic-array-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-dynamic-array-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,87 @@ +(* mono-dynamic-array-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Signature for monomorphic unbounded arrays. + * + * TODO: add the missing operations that the DynamicArray structure + * provides. + *) + +signature MONO_DYNAMIC_ARRAY = + sig + type elem + type array + + val array : (int * elem) -> array + (* array (sz, e) creates an unbounded array all of whose elements + * are initialized to e. sz (>= 0) is used as a + * hint of the potential range of indices. Raises Size if a + * negative hint is given. + *) + + val subArray : array * int * int -> array + (* subArray (a,lo,hi) creates a new array with the same default + * as a, and whose values in the range [0,hi-lo] are equal to + * the values in b in the range [lo, hi]. + * Raises Size if lo > hi + *) + + val fromList : elem list * elem -> array + (* arrayoflist (l, v) creates an array using the list of values l + * plus the default value v. + *) + + val toList : array -> elem list + (* return the array's contents as a list *) + + val tabulate: int * (int -> elem) * elem -> array + (* tabulate (sz,fill,dflt) acts like Array.tabulate, plus + * stores default value dflt. Raises Size if sz < 0. + *) + + val default : array -> elem + (* default returns array's default value *) + + val sub : array * int -> elem + (* sub (a,idx) returns value of the array at index idx. + * If that value has not been set by update, it returns the default value. + * Raises Subscript if idx < 0 + *) + + val update : array * int * elem -> unit + (* update (a,idx,v) sets the value at index idx of the array to v. + * Raises Subscript if idx < 0 + *) + + val bound : array -> int + (* bound returns an upper bound on the index of values that have been + * changed. + *) + + val truncate : array * int -> unit + (* truncate (a,sz) makes every entry with index > sz the default value *) + +(** what about iterators??? **) +(* + val vector : array -> 'a vector + val copy : {di:int, dst:array, src:array} -> unit + val copyVec : {di:int, dst:array, src:'a vector} -> unit + val appi : (int * 'a -> unit) -> array -> unit + val app : ('a -> unit) -> array -> unit + val modifyi : (int * 'a -> 'a) -> array -> unit + val modify : ('a -> 'a) -> array -> unit + val foldli : (int * 'a * 'b -> 'b) -> 'b -> array -> 'b + val foldri : (int * 'a * 'b -> 'b) -> 'b -> array -> 'b + val foldl : ('a * 'b -> 'b) -> 'b -> array -> 'b + val foldr : ('a * 'b -> 'b) -> 'b -> array -> 'b + val findi : (int * 'a -> bool) -> array -> (int * 'a) option + val find : ('a -> bool) -> array -> 'a option + val exists : ('a -> bool) -> array -> bool + val all : ('a -> bool) -> array -> bool + val collate : ('a * 'a -> order) -> array * array -> order +*) + + end (* MONO_DYNAMIC_ARRAY *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-hash2-table-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-hash2-table-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-hash2-table-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-hash2-table-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,92 @@ +(* mono-hash2-table-sig.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Hash tables that are keyed by two keys (in different domains). + * + * AUTHOR: John Reppy + * University of Chicago + * https://cs.uchicago.edu/~jhr + *) + +signature MONO_HASH2_TABLE = + sig + + structure Key1 : HASH_KEY + structure Key2 : HASH_KEY + + type 'a hash_table + + val mkTable : (int * exn) -> 'a hash_table + (* Create a new table; the int is a size hint and the exception + * is to be raised by find. + *) + + val clear : 'a hash_table -> unit + (* remove all elements from the table *) + + val insert : 'a hash_table -> (Key1.hash_key * Key2.hash_key * 'a) -> unit + (* Insert an item. If the key already has an item associated with it, + * then the old item is discarded. + *) + + val inDomain1 : 'a hash_table -> Key1.hash_key -> bool + val inDomain2 : 'a hash_table -> Key2.hash_key -> bool + (* return true, if the key is in the domain of the table *) + + val lookup1 : 'a hash_table -> Key1.hash_key -> 'a + val lookup2 : 'a hash_table -> Key2.hash_key -> 'a + (* Find an item, the table's exception is raised if the item doesn't exist *) + + val find1 : 'a hash_table -> Key1.hash_key -> 'a option + val find2 : 'a hash_table -> Key2.hash_key -> 'a option + (* Look for an item, return NONE if the item doesn't exist *) + + val remove1 : 'a hash_table -> Key1.hash_key -> 'a + val remove2 : 'a hash_table -> Key2.hash_key -> 'a + (* Remove an item, returning the item. The table's exception is raised if + * the item doesn't exist. + *) + + val numItems : 'a hash_table -> int + (* Return the number of items in the table *) + + val listItems : 'a hash_table -> 'a list + val listItemsi : 'a hash_table -> (Key1.hash_key * Key2.hash_key * 'a) list + (* Return a list of the items (and their keys) in the table *) + + val app : ('a -> unit) -> 'a hash_table -> unit + val appi : ((Key1.hash_key * Key2.hash_key * 'a) -> unit) -> 'a hash_table + -> unit + (* Apply a function to the entries of the table *) + + val map : ('a -> 'b) -> 'a hash_table -> 'b hash_table + val mapi : ((Key1.hash_key * Key2.hash_key * 'a) -> 'b) -> 'a hash_table + -> 'b hash_table + (* Map a table to a new table that has the same keys *) + +(* TODO: add mapPartial and mapPartiali *) + + val fold : (('a * 'b) -> 'b) -> 'b -> 'a hash_table -> 'b + val foldi : ((Key1.hash_key * Key2.hash_key * 'a * 'b) -> 'b) -> 'b + -> 'a hash_table -> 'b + +(* TODO: add modify and modifyi *) + + val filter : ('a -> bool) -> 'a hash_table -> unit + val filteri : ((Key1.hash_key * Key2.hash_key * 'a) -> bool) -> 'a hash_table + -> unit + (* remove any hash table items that do not satisfy the given + * predicate. + *) + + val copy : 'a hash_table -> 'a hash_table + (* Create a copy of a hash table *) + + val bucketSizes : 'a hash_table -> (int list * int list) + (* returns a list of the sizes of the various buckets. This is to + * allow users to gauge the quality of their hashing function. + *) + + end (* MONO_HASH2_TABLE *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-hash-set-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-hash-set-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-hash-set-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-hash-set-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,110 @@ +(* mono-hash-set-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +signature MONO_HASH_SET = + sig + + structure Key : HASH_KEY + + type item = Key.hash_key + type set + + val mkEmpty : int -> set + (* The empty set; argument specifies initial table size *) + + val mkSingleton : item -> set + (* Create a singleton set *) + + val mkFromList : item list -> set + (* create a set from a list of items *) + + val copy : set -> set + (* returns a copy of the set *) + + val toList : set -> item list + (* Return a list of the items in the set *) + + val add : set * item -> unit + val addc : set -> item -> unit + (* Insert an item. *) + + val addList : set * item list -> unit + (* Insert items from list. *) + + val subtract : set * item -> unit + val subtractc : set -> item -> unit + (* Remove the item, if it is in the set. Otherwise the set is unchanged. + * The `without` function is deprecated in favor of `subtract`, whose name + * is consistent with the other set-like APIs. + *) + + val subtractList : set * item list -> unit + (* Subtract a list of items from the set. *) + + val delete : set * item -> bool + (* Remove an item. Return false if the item was not present. *) + + val member : set * item -> bool + (* Return true if and only if item is an element in the set *) + + val isEmpty : set -> bool + (* Return true if and only if the set is empty *) + + val isSubset : (set * set) -> bool + (* Return true if and only if the first set is a subset of the second *) + + val numItems : set -> int + (* Return the number of items in the table *) + + val map : (item -> item) -> set -> set + (* Create a new set by applying a map function to the elements + * of the set. + *) + + val mapPartial : (item -> item option) -> set -> set + (* Create a new set by mapping a partial function over the + * items in the set. + *) + + val app : (item -> unit) -> set -> unit + (* Apply a function to the entries of the set. *) + + val fold : (item * 'b -> 'b) -> 'b -> set -> 'b + (* Apply a folding function to the entries of the set. *) + + val partition : (item -> bool) -> set -> (set * set) + (* partition a set into two based using the given predicate. Returns two + * sets, where the first contains those elements for which the predicate is + * true and the second contains those elements for which the predicate is + * false. + *) + + val filter : (item -> bool) -> set -> unit + (* filter a set by removing those elements for which the predicate + * is false. + *) + + val exists : (item -> bool) -> set -> bool + (* check the elements of a set with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + * Elements are checked in key order. + *) + + val all : (item -> bool) -> set -> bool + (* check the elements of a set with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. Elements + * are checked in key order. + *) + + val find : (item -> bool) -> set -> item option + (* find an element in the set for which the predicate is true *) + + (* DEPRECATED FUNCTIONS *) + + val listItems : set -> item list + val without : set * item -> unit + + end (* MONO_HASH_SET *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-hash-table-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-hash-table-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-hash-table-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-hash-table-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,84 @@ +(* mono-hash-table-sig.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * The result signature of the hash table functor (see hash-table.sml). + * + * AUTHOR: John Reppy + * University of Chicago + * https://cs.uchicago.edu/~jhr + *) + +signature MONO_HASH_TABLE = + sig + + structure Key : HASH_KEY + + type 'a hash_table + + val mkTable : (int * exn) -> 'a hash_table + (* Create a new table; the int is a size hint and the exception + * is to be raised by find. + *) + + val clear : 'a hash_table -> unit + (* remove all elements from the table *) + + val insert : 'a hash_table -> (Key.hash_key * 'a) -> unit + (* Insert an item. If the key already has an item associated with it, + * then the old item is discarded. + *) + + val inDomain : 'a hash_table -> Key.hash_key -> bool + (* return true, if the key is in the domain of the table *) + + val lookup : 'a hash_table -> Key.hash_key -> 'a + (* Find an item, the table's exception is raised if the item doesn't exist *) + + val find : 'a hash_table -> Key.hash_key -> 'a option + (* Look for an item, return NONE if the item doesn't exist *) + + val remove : 'a hash_table -> Key.hash_key -> 'a + (* Remove an item, returning the item. The table's exception is raised if + * the item doesn't exist. + *) + + val numItems : 'a hash_table -> int + (* Return the number of items in the table *) + + val listItems : 'a hash_table -> 'a list + val listItemsi : 'a hash_table -> (Key.hash_key * 'a) list + (* Return a list of the items (and their keys) in the table *) + + val app : ('a -> unit) -> 'a hash_table -> unit + val appi : ((Key.hash_key * 'a) -> unit) -> 'a hash_table -> unit + (* Apply a function to the entries of the table *) + + val map : ('a -> 'b) -> 'a hash_table -> 'b hash_table + val mapi : ((Key.hash_key * 'a) -> 'b) -> 'a hash_table -> 'b hash_table + (* Map a table to a new table that has the same keys *) + + val fold : (('a * 'b) -> 'b) -> 'b -> 'a hash_table -> 'b + val foldi : ((Key.hash_key * 'a * 'b) -> 'b) -> 'b -> 'a hash_table -> 'b + + val modify : ('a -> 'a) -> 'a hash_table -> unit + val modifyi : ((Key.hash_key * 'a) -> 'a) -> 'a hash_table -> unit + (* modify the hash-table items in place *) + +(** Also mapPartial?? *) + val filter : ('a -> bool) -> 'a hash_table -> unit + val filteri : ((Key.hash_key * 'a) -> bool) -> 'a hash_table -> unit + (* remove any hash table items that do not satisfy the given + * predicate. + *) + + val copy : 'a hash_table -> 'a hash_table + (* Create a copy of a hash table *) + + val bucketSizes : 'a hash_table -> int list + (* returns a list of the sizes of the various buckets. This is to + * allow users to gauge the quality of their hashing function. + *) + + end (* MONO_HASH_TABLE *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-priorityq-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-priorityq-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/mono-priorityq-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/mono-priorityq-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,52 @@ +(* mono-priorityq-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This signature describes the interface to monomorphic functional + * priority queues. + *) + +signature MONO_PRIORITYQ = + sig + + type item + type queue + + val empty : queue + + val singleton : item -> queue + (* create a queue from a single item *) + + val fromList : item list -> queue + (* build a queue from a list of items *) + + val insert : (item * queue) -> queue + (* insert an item *) + + val remove : queue -> (item * queue) + (* remove the highest priority item from the queue; raise List.Empty + * if the queue is empty. + *) + + val next : queue -> (item * queue) option + (* remove the highest priority item from the queue; return NONE + * if the queue is empty. + *) + + val findAndRemove : queue * (item -> bool) -> (item * queue) option + (* find the item with the highest priority that satisfies the predicate *) + + val delete : queue * (item -> bool) -> queue + (* delete all elements satisfying the given predicate *) + + val merge : (queue * queue) -> queue + (* Merge two queues. *) + + val numItems : queue -> int + (* return the number of items in the queue *) + + val isEmpty : queue -> bool + (* return true, if the queue is empty *) + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/NEW-UTIL-NOTES mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/NEW-UTIL-NOTES --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/NEW-UTIL-NOTES 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/NEW-UTIL-NOTES 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,20 @@ +The **Util Library** has code that is over 30 years old and many of the interfaces +could do with a redesign. Since such a change would break lots of existing code, +we will instead create a new library called the **SML/NJ Util Library** with +CM file `smlnj-util-lib.cm`. This file contains notes about things that should be +fixed/changed in that redesign. + +The HASH_KEY and ORD_KEY signatures should be changed to match newer conventions. + +The MONO_ARRAY_SORT should have a fixed comparison function and should also +contain the Binary Search function from the `BSearchFn` functor. + +Eliminate currying from the hash-table modules + +Eliminate the SplayTree and BinaryTree implementations of maps and sets; the +RedBlackTree implementation is more performant across the board. We'll keep +the sorted-list based versions too for a lightweight implementation. + +The logical bit-sequence operations in BitArray need rethinking. Specifically +w.r.t. padding lengths. + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/ord-key-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/ord-key-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/ord-key-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/ord-key-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,18 @@ +(* ord-key-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Abstract linearly ordered keys. + *) + +signature ORD_KEY = + sig + + (* the type of keys *) + type ord_key + + (* defines a total ordering on the ord_key type *) + val compare : ord_key * ord_key -> order + + end (* ORD_KEY *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/ord-map-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/ord-map-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/ord-map-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/ord-map-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,147 @@ +(* ord-map-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * COPYRIGHT (c) 1996 by AT&T Research. See COPYRIGHT file for details. + * + * Abstract signature of an applicative-style finite maps (dictionaries) + * structure over ordered monomorphic keys. + *) + +signature ORD_MAP = + sig + + structure Key : ORD_KEY + (* the map's domain and its comparison function *) + + type 'a map + + val empty : 'a map + (* The empty map *) + + val isEmpty : 'a map -> bool + (* Return true if and only if the map is empty *) + + val singleton : (Key.ord_key * 'a) -> 'a map + (* return the specified singleton map *) + + val insert : 'a map * Key.ord_key * 'a -> 'a map + val insert' : ((Key.ord_key * 'a) * 'a map) -> 'a map + (* Insert an item. *) + + val insertWith : ('a * 'a -> 'a) -> 'a map * Key.ord_key * 'a -> 'a map + (* Insert an item with a combining function to resolve collisions. + * The first argument to the combining function is the existing value, + * and the second argument is the value being inserted into the map. + *) + val insertWithi : (Key.ord_key * 'a * 'a -> 'a) -> 'a map * Key.ord_key * 'a -> 'a map + (* Like insertWith, except that the combining function also takes the + * key as an argument. + *) + + val find : 'a map * Key.ord_key -> 'a option + (* Look for an item, return NONE if the item doesn't exist *) + + val lookup : 'a map * Key.ord_key -> 'a + (* look for an item, raise the NotFound exception if it doesn't exist *) + + val inDomain : ('a map * Key.ord_key) -> bool + (* return true, if the key is in the domain of the map *) + + val remove : 'a map * Key.ord_key -> 'a map * 'a + (* Remove an item, returning new map and value removed. + * Raises LibBase.NotFound if not found. + *) + + val first : 'a map -> 'a option + val firsti : 'a map -> (Key.ord_key * 'a) option + (* return the first item in the map (or NONE if it is empty) *) + + val numItems : 'a map -> int + (* Return the number of items in the map *) + + val listItems : 'a map -> 'a list + val listItemsi : 'a map -> (Key.ord_key * 'a) list + (* Return an ordered list of the items (and their keys) in the map. *) + + val listKeys : 'a map -> Key.ord_key list + (* return an ordered list of the keys in the map. *) + + val collate : ('a * 'a -> order) -> ('a map * 'a map) -> order + (* given an ordering on the map's range, return an ordering + * on the map. + *) + + val unionWith : ('a * 'a -> 'a) -> ('a map * 'a map) -> 'a map + val unionWithi : (Key.ord_key * 'a * 'a -> 'a) -> ('a map * 'a map) -> 'a map + (* return a map whose domain is the union of the domains of the two input + * maps, using the supplied function to define the map on elements that + * are in both domains. + *) + + val intersectWith : ('a * 'b -> 'c) -> ('a map * 'b map) -> 'c map + val intersectWithi : (Key.ord_key * 'a * 'b -> 'c) -> ('a map * 'b map) -> 'c map + (* return a map whose domain is the intersection of the domains of the + * two input maps, using the supplied function to define the range. + *) + + val mergeWith : ('a option * 'b option -> 'c option) + -> ('a map * 'b map) -> 'c map + val mergeWithi : (Key.ord_key * 'a option * 'b option -> 'c option) + -> ('a map * 'b map) -> 'c map + (* merge two maps using the given function to control the merge. For + * each key k in the union of the two maps domains, the function + * is applied to the image of the key under the map. If the function + * returns SOME y, then (k, y) is added to the resulting map. + *) + + val app : ('a -> unit) -> 'a map -> unit + val appi : ((Key.ord_key * 'a) -> unit) -> 'a map -> unit + (* Apply a function to the entries of the map in map order. *) + + val map : ('a -> 'b) -> 'a map -> 'b map + val mapi : (Key.ord_key * 'a -> 'b) -> 'a map -> 'b map + (* Create a new map by applying a map function to the + * name/value pairs in the map. + *) + + val foldl : ('a * 'b -> 'b) -> 'b -> 'a map -> 'b + val foldli : (Key.ord_key * 'a * 'b -> 'b) -> 'b -> 'a map -> 'b + (* Apply a folding function to the entries of the map + * in increasing map order. + *) + + val foldr : ('a * 'b -> 'b) -> 'b -> 'a map -> 'b + val foldri : (Key.ord_key * 'a * 'b -> 'b) -> 'b -> 'a map -> 'b + (* Apply a folding function to the entries of the map + * in decreasing map order. + *) + + val filter : ('a -> bool) -> 'a map -> 'a map + val filteri : (Key.ord_key * 'a -> bool) -> 'a map -> 'a map + (* Filter out those elements of the map that do not satisfy the + * predicate. The filtering is done in increasing map order. + *) + + val mapPartial : ('a -> 'b option) -> 'a map -> 'b map + val mapPartiali : (Key.ord_key * 'a -> 'b option) -> 'a map -> 'b map + (* map a partial function over the elements of a map in increasing + * map order. + *) + + val exists : ('a -> bool) -> 'a map -> bool + val existsi : (Key.ord_key * 'a -> bool) -> 'a map -> bool + (* check the elements of a map with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + * Elements are checked in key order. + *) + + val all : ('a -> bool) -> 'a map -> bool + val alli : (Key.ord_key * 'a -> bool) -> 'a map -> bool + (* check the elements of a map with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. Elements + * are checked in key order. + *) + + end (* ORD_MAP *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/ord-set-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/ord-set-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/ord-set-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/ord-set-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,143 @@ +(* ordset-sig.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * Signature for a set of values with an order relation. + *) + +signature ORD_SET = + sig + + structure Key : ORD_KEY + (* the set elements and their comparison function *) + + type item = Key.ord_key + type set + + val empty : set + (* The empty set *) + + val singleton : item -> set + (* Create a singleton set *) + + val fromList : item list -> set + (* create a set from a list of items *) + + val toList : set -> item list + (* Return an ordered list of the items in the set. + * Added in SML/NJ 110.80. + *) + + val add : set * item -> set + val add' : (item * set) -> set + (* Add an item. *) + + val addList : set * item list -> set + (* Add a list of items. *) + + val subtract : set * item -> set + val subtract' : (item * set) -> set + (* Subtract an item from a set; has no effect if the item is not in the set *) + + val subtractList : set * item list -> set + (* Subtract a list of items from the set. *) + + val delete : set * item -> set + (* Remove an item. Raise NotFound if not found. *) + + val member : set * item -> bool + (* Return true if and only if item is an element in the set *) + + val isEmpty : set -> bool + (* Return true if and only if the set is empty *) + + val minItem : set -> item + (* return the smallest element of the set (raises Empty if the set is empty). + * Added in SML/NJ 110.80. + *) + + val maxItem : set -> item + (* return the largest element of the set (raises Empty if the set is empty). + * Added in SML/NJ 110.80. + *) + + val equal : (set * set) -> bool + (* Return true if and only if the two sets are equal *) + + val compare : (set * set) -> order + (* does a lexical comparison of two sets *) + + val isSubset : (set * set) -> bool + (* Return true if and only if the first set is a subset of the second *) + + val disjoint : set * set -> bool + (* are the two sets disjoint? *) + + val numItems : set -> int + (* Return the number of items in the table *) + + val union : set * set -> set + (* Union *) + + val intersection : set * set -> set + (* Intersection *) + + val difference : set * set -> set + (* Difference *) + + val map : (item -> item) -> set -> set + (* Create a new set by applying a map function to the elements + * of the set. + *) + + val mapPartial : (item -> item option) -> set -> set + (* Create a new set by mapping a partial function over the + * items in the set. + *) + + val app : (item -> unit) -> set -> unit + (* Apply a function to the entries of the set + * in increasing order + *) + + val foldl : (item * 'b -> 'b) -> 'b -> set -> 'b + (* Apply a folding function to the entries of the set + * in increasing order + *) + + val foldr : (item * 'b -> 'b) -> 'b -> set -> 'b + (* Apply a folding function to the entries of the set + * in decreasing order + *) + + val partition : (item -> bool) -> set -> (set * set) + (* partition a set into two based using the given predicate. Returns two + * sets, where the first contains those elements for which the predicate is + * true and the second contains those elements for which the predicate is + * false. + *) + + val filter : (item -> bool) -> set -> set + (* filter a set by the given predicate returning only those elements for + * which the predicate is true. + *) + + val exists : (item -> bool) -> set -> bool + (* check the elements of a set with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + * Elements are checked in key order. + *) + + val all : (item -> bool) -> set -> bool + (* check the elements of a set with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. Elements + * are checked in key order. + *) + + val find : (item -> bool) -> set -> item option + (* find an element in the set for which the predicate is true *) + + (* DEPRECATED FUNCTIONS *) + val listItems : set -> item list + + end (* ORD_SET *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/parser-comb-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/parser-comb-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/parser-comb-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/parser-comb-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,59 @@ +(* parser-comb-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * COPYRIGHT (c) 1996 AT&T Research. + * + * Parser combinators over readers. These are modeled after the Haskell + * combinators of Hutton and Meijer. The main difference is that they + * return a single result, instead of a list of results. This means that + * "or" is a committed choice; once one branch succeeds, the others will not + * be enabled. While this is somewhat limiting, for many applications it + * will not be a problem. For more substantial parsing problems, one should + * use ML-Yacc and/or ML-Lex. + *) + +signature PARSER_COMB = + sig + + type ('a, 'strm) parser = + (char, 'strm) StringCvt.reader -> ('a, 'strm) StringCvt.reader + + val result : 'a -> ('a, 'strm) parser + + val failure : ('a, 'strm) parser + + val wrap : (('a, 'strm) parser * ('a -> 'b)) -> ('b, 'strm) parser + + val seq : (('a, 'strm) parser * ('b, 'strm) parser) -> (('a * 'b), 'strm) parser + val seqWith : (('a * 'b) -> 'c) + -> (('a, 'strm) parser * ('b, 'strm) parser) + -> ('c, 'strm) parser + + val bind : (('a, 'strm) parser * ('a -> ('b, 'strm) parser)) + -> ('b, 'strm) parser + + val eatChar : (char -> bool) -> (char, 'strm) parser + + val char : char -> (char, 'strm) parser + val string : string -> (string, 'strm) parser + + val skipBefore : (char -> bool) -> ('a, 'strm) parser -> ('a, 'strm) parser + + val or : (('a, 'strm) parser * ('a, 'strm) parser) -> ('a, 'strm) parser + val or' : ('a, 'strm) parser list -> ('a, 'strm) parser + + val zeroOrMore : ('a, 'strm) parser -> ('a list, 'strm) parser + val oneOrMore : ('a, 'strm) parser -> ('a list, 'strm) parser + + val option : ('a, 'strm) parser -> ('a option, 'strm) parser + val join : ('a option, 'strm) parser -> ('a, 'strm) parser + + val token : (char -> bool) -> (string, 'strm) parser + (* parse a token consisting of characters satisfying the predicate. + * If this succeeds, then the resulting string is guaranteed to be + * non-empty. + *) + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/parser-comb.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/parser-comb.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/parser-comb.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/parser-comb.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,121 @@ +(* parser-comb.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Parser combinators over readers. These are modeled after the Haskell + * combinators of Hutton and Meijer. The main difference is that they + * return a single result, instead of a list of results. This means that + * "or" is a committed choice; once one branch succeeds, the others will not + * be enabled. While this is somewhat limiting, for many applications it + * will not be a problem. For more substantial parsing problems, one should + * use a parser generator like ML-Antlr, ML-Yacc and/or ML-Lex. + *) + +structure ParserComb : PARSER_COMB = + struct + structure SC = StringCvt + + type ('a, 'strm) parser = (char, 'strm) SC.reader -> ('a, 'strm) SC.reader + + fun result v getc strm = SOME(v, strm) + + fun failure getc strm = NONE + + fun wrap (p, f) getc strm = (case (p getc strm) + of NONE => NONE + | (SOME(x, strm)) => SOME(f x, strm) + (* end case *)) + + fun seqWith f (p1, p2) getc strm = (case (p1 getc strm) + of SOME(t1, strm1) => (case (p2 getc strm1) + of SOME(t2, strm2) => SOME(f(t1, t2), strm2) + | NONE => NONE + (* end case *)) + | NONE => NONE + (* end case *)) + fun seq (p1, p2) = seqWith (fn x => x) (p1, p2) + + fun bind (p1, p2') getc strm = (case (p1 getc strm) + of SOME(t1, strm1) => p2' t1 getc strm1 + | NONE => NONE + (* end case *)) + + fun eatChar pred getc strm = (case getc strm + of (res as SOME(c, strm')) => if (pred c) then res else NONE + | _ => NONE + (* end case *)) + + fun char (c: char) = eatChar (fn c' => (c = c')) + + fun string s getc strm = let + fun eat (ss, strm) = (case (Substring.getc ss, getc strm) + of (SOME(c1, ss'), SOME(c2, strm')) => + if (c1 = c2) then eat(ss', strm') else NONE + | (NONE, _) => SOME(s, strm) + | _ => NONE + (* end case *)) + in + eat (Substring.full s, strm) + end + + fun skipBefore pred p getc strm = let + fun skip' strm = (case getc strm + of NONE => NONE + | SOME(c, strm') => + if (pred c) then skip' strm' else p getc strm + (* end case *)) + in + skip' strm + end + + fun or (p1, p2) getc strm = (case (p1 getc strm) + of NONE => (case (p2 getc strm) + of NONE => NONE + | res => res + (* end case *)) + | res => res + (* end case *)) + + fun or' l getc strm = let + fun tryNext [] = NONE + | tryNext (p::r) = (case (p getc strm) + of NONE => tryNext r + | res => res + (* end case *)) + in + tryNext l + end + + fun zeroOrMore p getc strm = let + val p = p getc + fun parse (l, strm) = (case (p strm) + of (SOME(item, strm)) => parse (item::l, strm) + | NONE => SOME(rev l, strm) + (* end case *)) + in + parse ([], strm) + end + + fun oneOrMore p getc strm = (case (zeroOrMore p getc strm) + of (res as (SOME(_::_, _))) => res + | _ => NONE + (* end case *)) + + fun option p getc strm = (case (p getc strm) + of SOME(x, strm) => SOME(SOME x, strm) + | NONE => SOME(NONE, strm) + (* end case *)) + + fun join p = bind (p, fn (SOME x) => result x | NONE => failure) + + (* parse a token consisting of characters satisfying the predicate. + * If this succeeds, then the resulting string is guaranteed to be + * non-empty. + *) + fun token pred getc strm = (case (zeroOrMore (eatChar pred) getc strm) + of (SOME(res as _::_, strm)) => SOME(implode res, strm) + | _ => NONE + (* end case *)) + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/path-util-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/path-util-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/path-util-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/path-util-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,46 @@ +(* path-util-sig.sml + * + * COPYRIGHT (c) 2012 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Various higher-level pathname and searching utilities. + *) + +signature PATH_UTIL = + sig + + (* findFile paths name + * returns SOME(p/name), where p is the first path in paths such that p/name exists. + * If no such file exists, then NONE is returned. If name is an absolute path, then + * SOME name is returned if it exists. + *) + val findFile : string list -> string -> string option + + (* findFiles (paths, mode) name + * returns a list of p/name values, where p is in paths and p/name exists. If name is an + * absolute path, then [name] is returned if it exists. + *) + val findFiles : string list -> string -> string list + + (* existsFile pred paths name + * returns SOME(p/name), where p is the first path in paths such that p/name satisfies + * the given predicate. If no such file exists, then NONE is returned. If name is an + * absolute path, then SOME name is returned if it satisfies the predicate. + *) + val existsFile : (string -> bool) -> string list -> string -> string option + + (* allFiles pred paths name + * returns a list of all p/name values, such that p is in paths and p/name satisfies + * the given predicate. The order of the path list is preserved in the result. If name + * is an absolute path, then [name] is returned if it satisfies the predicate. + *) + val allFiles : (string -> bool) -> string list -> string -> string list + + (* findExe paths name + * returns SOME(p/name), where p is the first path in paths such that p/name exists and + * is executable. If no such file exists, then NONE is returned. If name is an + * absolute path, then SOME name is returned if it is executable. + *) + val findExe : string list -> string -> string option + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/path-util.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/path-util.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/path-util.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/path-util.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,49 @@ +(* path-util.sml + * + * COPYRIGHT (c) 2012 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Various higher-level pathname and searching utilities. + *) + +structure PathUtil : PATH_UTIL = + struct + + structure P = OS.Path + structure F = OS.FileSys + + fun existsFile pred pathList fileName = let + fun chk s = if (pred s) then SOME s else NONE + fun iter [] = NONE + | iter (p::r) = (case chk(P.joinDirFile{dir=p, file=fileName}) + of NONE => iter r + | res => res + (* end case *)) + in + if P.isAbsolute fileName + then chk fileName + else iter pathList + end + fun allFiles pred pathList fileName = let + fun chk s = if (pred s) then SOME s else NONE + fun iter ([], l) = rev l + | iter (p::r, l) = (case chk(P.joinDirFile{dir=p, file=fileName}) + of NONE => iter(r, l) + | (SOME s) => iter(r, s::l) + (* end case *)) + in + if not(P.isAbsolute fileName) + then iter (pathList, []) + else if (pred fileName) + then [fileName] + else [] + end + + fun fileExists s = F.access(s, []) + + val findFile = existsFile fileExists + val findFiles = allFiles fileExists + + val findExe = existsFile (fn p => OS.FileSys.access(p, [OS.FileSys.A_EXEC])) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/plist-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/plist-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/plist-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/plist-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,50 @@ +(* plist-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Property lists using Stephen Weeks's implementation. + *) + +signature PROP_LIST = + sig + + type holder + + val newHolder : unit -> holder + + val hasProps : holder -> bool + (* return true if the holder has any properties. *) + + val clearHolder : holder -> unit + (* remove all properties and flags from the holder *) + + val sameHolder : (holder * holder) -> bool + (* returns true, if two holders are the same *) + + (* newProp (selHolder, init) + * creates a new property for objects of type 'a and returns + * functions to get the property, set it, and clear it. The function + * selHolder is used to select the holder field from an object + * and init is used to create the initial property value. + * Typically, properties are reference cells, so that they can + * be modified. The difference between peekFn and getFn is that + * peekFn returns NONE when the property has not yet been created, + * whereas getFn will allocate and initialize the property. The + * setFn function can either be used to initialize an undefined property + * or to override a property's current value. + *) + val newProp : (('a -> holder) * ('a -> 'b)) -> { + peekFn : 'a -> 'b option, + getFn : 'a -> 'b, + setFn : ('a * 'b) -> unit, + clrFn : 'a -> unit + } + + val newFlag : ('a -> holder) -> { + getFn : 'a -> bool, + setFn : ('a * bool) -> unit + } + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/plist.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/plist.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/plist.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/plist.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,90 @@ +(* plist.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Property lists using Stephen Weeks's implementation. + *) + +structure PropList :> PROP_LIST = + struct + + type holder = exn list ref + + fun newHolder() : holder = ref [] + + fun hasProps (ref []) = false + | hasProps _ = true + + fun clearHolder r = (r := []) + + fun sameHolder (r1 : holder, r2) = (r1 = r2) + + fun mkProp () = let + exception E of 'a + fun cons (a, l) = E a :: l + fun peek [] = NONE + | peek (E a :: _) = SOME a + | peek (_ :: l) = peek l + fun delete [] = [] + | delete (E a :: r) = r + | delete (x :: r) = x :: delete r + in + { cons = cons, peek = peek, delete = delete } + end + + fun mkFlag () = let + exception E + fun peek [] = false + | peek (E :: _) = true + | peek (_ :: l) = peek l + fun set (l, flg) = let + fun set ([], _) = if flg then E::l else l + | set (E::r, xs) = if flg then l else List.revAppend(xs, r) + | set (x::r, xs) = set (r, x::xs) + in + set (l, []) + end + in + { set = set, peek = peek } + end + + fun newProp (selHolder : 'a -> holder, init : 'a -> 'b) = let + val {peek, cons, delete} = mkProp() + fun peekFn a = peek(!(selHolder a)) + fun getF a = let + val h = selHolder a + in + case peek(!h) + of NONE => let val b = init a in h := cons(b, !h); b end + | (SOME b) => b + (* end case *) + end + fun clrF a = let + val h = selHolder a + in + h := delete(!h) + end + fun setFn (a, x) = let + val h = selHolder a + in + h := cons(x, delete(!h)) + end + in + {peekFn = peekFn, getFn = getF, clrFn = clrF, setFn = setFn} + end + + fun newFlag (selHolder : 'a -> holder) = let + val {peek, set} = mkFlag() + fun getF a = peek(!(selHolder a)) + fun setF (a, flg) = let + val h = selHolder a + in + h := set(!h, flg) + end + in + {getFn = getF, setFn = setF} + end + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/priority-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/priority-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/priority-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/priority-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,15 @@ +(* priority-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Argument signature for functors that implement priority queues. + *) + +signature PRIORITY = + sig + type priority + val compare : (priority * priority) -> order + type item + val priority : item -> priority + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/queue-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/queue-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/queue-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/queue-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ +(* queue-sig.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * Imperative fifos + * + *) + +signature QUEUE = + sig + type 'a queue + + exception Dequeue + + val mkQueue : unit -> 'a queue + (* make a new queue *) + val clear : 'a queue -> unit + (* remove all elements *) + val isEmpty : 'a queue -> bool + (* test for empty queue *) + val enqueue : 'a queue * 'a -> unit + (* enqueue an element at the rear *) + val dequeue : 'a queue -> 'a + (* remove the front element (raise Dequeue if empty) *) + val next : 'a queue -> 'a option + (* remove the first element; return NONE if the queue is empty *) + val delete : ('a queue * ('a -> bool)) -> unit + (* delete all elements satisfying the given predicate *) + val head : 'a queue -> 'a + (* return the first queue element without removing it *) + val peek : 'a queue -> 'a option + (* peek at the first queue element without removing it *) + val length : 'a queue -> int + val contents : 'a queue -> 'a list + val app : ('a -> unit) -> 'a queue -> unit + val map : ('a -> 'b) -> 'a queue -> 'b queue + val foldl : ('a * 'b -> 'b) -> 'b -> 'a queue -> 'b + val foldr : ('a * 'b -> 'b) -> 'b -> 'a queue -> 'b + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/queue.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/queue.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/queue.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/queue.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,44 @@ +(* queue.sml + * + * COPYRIGHT (c) 1993 by AT&T Bell Laboratories. See COPYRIGHT file for details. + * + * Imperative fifos + * + *) + +structure Queue :> QUEUE = + struct + type 'a queue = 'a Fifo.fifo ref + + exception Dequeue = Fifo.Dequeue + + fun mkQueue () = ref Fifo.empty + + fun clear q = (q := Fifo.empty) + + fun enqueue (q,x) = q := (Fifo.enqueue (!q, x)) + + fun dequeue q = let + val (newq, x) = Fifo.dequeue (!q) + in + q := newq; + x + end + + fun next q = (case Fifo.next (!q) + of SOME(x, newq) => (q := newq; SOME x) + | NONE => NONE + (* end case *)) + + fun delete (q, pred) = (q := Fifo.delete (!q, pred)) + fun head q = Fifo.head (!q) + fun peek q = Fifo.peek (!q) + fun isEmpty q = Fifo.isEmpty (!q) + fun length q = Fifo.length (!q) + fun contents q = Fifo.contents (!q) + fun app f q = Fifo.app f (!q) + fun map f q = ref(Fifo.map f (!q)) + fun foldl f b q = Fifo.foldl f b (!q) + fun foldr f b q = Fifo.foldr f b (!q) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/random-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/random-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/random-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/random-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,38 @@ +(* random-sig.sml + * + * COPYRIGHT (c) 2019 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +signature RANDOM = + sig + + type rand + (* the internal state of a random number generator *) + + val rand : (int * int) -> rand + (* create rand from initial seed *) + + val toString : rand -> string + val fromString : string -> rand + (* convert state to and from string + * fromString raises Fail if its argument + * does not have the proper form. + *) + + val randInt : rand -> int + (* generate ints uniformly in [minInt,maxInt] *) + + val randNat : rand -> int + (* generate ints uniformly in [0,maxInt] *) + + val randReal : rand -> real + (* generate reals uniformly in [0.0,1.0) *) + + val randRange : (int * int) -> rand -> int + (* randRange (lo,hi) generates integers uniformly [lo,hi]. + * Raises Fail if hi < lo. + *) + + end; (* RANDOM *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/random.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/random.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/random.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/random.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,213 @@ +(* random.sml + * + * COPYRIGHT (c) 2019 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This package implements a random number generator using a subtract-with-borrow + * (SWB) generator as described in Marsaglia and Zaman, "A New Class of Random Number + * Generators," Ann. Applied Prob. 1(3), 1991, pp. 462-480. + * + * The SWB generator is a 31-bit generator with lags 48 and 8. It has period + * (2^1487 - 2^247)/105 or about 10^445. In general, these generators are + * excellent. However, they act locally like a lagged Fibonacci generator + * and thus have troubles with the birthday test. Thus, we combine this SWB + * generator with the linear congruential generator (48271*a)mod(2^31-1). + * + * Although the interface is fairly abstract, the implementation uses + * 31-bit ML words. At some point, it might be good to use 32-bit words. + *) + +structure Random : RANDOM = + struct + structure A = Array + structure LW = LargeWord + structure W8A = Word8Array + structure W8V = Word8Vector + structure P = PackWord32Big + + val << = Word.<< + val >> = Word.>> + val & = Word.andb + val ++ = Word.orb + val xorb = Word.xorb + infix << >> & ++ + + val nbits = 31 (* bits per word *) + val maxWord : Word.word = 0wx7FFFFFFF (* largest word *) + val bit30 : Word.word = 0wx40000000 + val lo30 : Word.word = 0wx3FFFFFFF + + val N = 48 + val lag = 8 + val offset = N-lag + + fun error (f,msg) = LibBase.failure {module="Random",func=f, msg=msg} + + val two2neg30 = 1.0/((real 0x8000)*(real 0x8000)) (* 2^~30 *) + + fun minus(x,y,false) = (x - y, y > x) + | minus(x,y,true) = (x - y - 0w1, y >= x) + + datatype rand = RND of { + vals : Word.word A.array,(* seed array *) + borrow : bool ref, (* last borrow *) + congx : Word.word ref, (* congruential seed *) + index : int ref (* index of next available value in vals *) + } + + (* We represent state as a string, starting with an initial + * word acting as an magic cookie (with bit 0 determining the + * value of borrow), followed by a word containing index and a word + * containing congx, followed by the seed array. + *) + val numWords = 3 + N + val magic : LW.word = 0wx72646e64 + fun toString (RND{vals, borrow, congx, index}) = let + val arr = W8A.array (4*numWords, 0w0) + val word0 = if !borrow then LW.orb (magic, 0w1) else magic + fun fill (src,dst) = + if src = N then () + else ( + P.update (arr, dst, Word.toLargeWord (A.sub (vals, src))); + fill (src+1,dst+1) + ) + in + P.update (arr, 0, word0); + P.update (arr, 1, LW.fromInt (!index)); + P.update (arr, 2, Word.toLargeWord (!congx)); + fill (0,3); + Byte.bytesToString (W8A.vector arr) + end + + fun fromString s = let + val bytes = Byte.stringToBytes s + val _ = if W8V.length bytes = 4 * numWords then () + else error ("fromString","invalid state string") + val word0 = P.subVec (bytes, 0) + val _ = if LW.andb(word0, 0wxFFFFFFFE) = magic then () + else error ("fromString","invalid state string") + fun subVec i = P.subVec (bytes, i) + val borrow = ref (LW.andb(word0,0w1) = 0w1) + val index = ref (LW.toInt (subVec 1)) + val congx = ref (Word.fromLargeWord (subVec 2)) + val arr = A.array (N, 0w0 : Word.word) + fun fill (src,dst) = + if dst = N then () + else ( + A.update (arr, dst, Word.fromLargeWord (subVec src)); + fill (src+1,dst+1) + ) + in + fill (3, 0); + RND{vals = arr, + index = index, + congx = congx, + borrow = borrow} + end + + (* linear congruential generator: + * multiplication by 48271 mod (2^31 - 1) + *) + val a : Word.word = 0w48271 + val m : Word.word = 0w2147483647 + val q = m div a + val r = m mod a + fun lcg seed = let + val left = a * (seed mod q) + val right = r * (seed div q) + in + if left > right then left - right + else (m - right) + left + end + + (* Fill seed array using subtract-with-borrow generator: + * x[n] = x[n-lag] - x[n-N] - borrow + * Sets index to 1 and returns 0th value. + *) + fun fill (RND{vals,index,congx,borrow}) = let + fun update (ix,iy,b) = let + val (z,b') = minus(A.sub(vals,ix), A.sub(vals,iy),b) + in + A.update(vals,iy,z); b' + end + fun fillup (i,b) = + if i = lag then b + else fillup(i+1, update(i+offset,i,b)) + fun fillup' (i,b) = + if i = N then b + else fillup'(i+1, update(i-lag,i,b)) + in + borrow := fillup' (lag, fillup (0,!borrow)); + index := 1; + A.sub(vals,0) + end + + (* Create initial seed array and state of generator. + * Fills the seed array one bit at a time by taking the leading + * bit of the xor of a shift register and a congruential sequence. + * The congruential generator is (c*48271) mod (2^31 - 1). + * The shift register generator is c(I + L18)(I + R13). + * The same congruential generator continues to be used as a + * mixing generator with the SWB generator. + *) + fun rand (congy, shrgx) = let + fun mki (i,c,s) = let + val c' = lcg c + val s' = xorb(s, s << 0w18) + val s'' = xorb(s', s' >> 0w13) + val i' = (lo30 & (i >> 0w1)) ++ (bit30 & xorb(c',s'')) + in (i',c',s'') end + fun iterate (0, v) = v + | iterate (n, v) = iterate(n-1, mki v) + fun mkseed (congx,shrgx) = iterate (nbits, (0w0,congx,shrgx)) + fun genseed (0,seeds,congx,_) = (seeds,congx) + | genseed (n,seeds,congx,shrgx) = let + val (seed,congx',shrgx') = mkseed (congx,shrgx) + in genseed(n-1,seed::seeds,congx',shrgx') end + val congx = ((Word.fromInt congy & maxWord) << 0w1)+0w1 + val (seeds,congx) = genseed(N,[],congx, Word.fromInt shrgx) + in + RND{vals = A.fromList seeds, + index = ref 0, + congx = ref congx, + borrow = ref false} + end + + (* Get next random number. The tweak function combines + * the number from the SWB generator with a number from + * the linear congruential generator. + *) + fun randWord (r as RND{vals, index,congx,...}) = let + val idx = !index + fun tweak i = let + val c = lcg (!congx) + in + congx := c; + xorb(i, c) + end + in + if idx = N then tweak(fill r) + else tweak(A.sub(vals,idx)) before index := idx+1 + end + + fun randInt state = Word.toIntX(randWord state) + fun randNat state = Word.toIntX(randWord state & lo30) + fun randReal state = + (real(randNat state) + real(randNat state) * two2neg30) * two2neg30 + + fun randRange (i,j) = + if j < i + then error ("randRange", "hi < lo") + else let + val R = two2neg30*real(j - i + 1) + in + fn s => i + trunc(R*real(randNat s)) + end handle _ => let + val ri = real i + val R = (real j)-ri+1.0 + in + fn s => trunc(ri + R*(randReal s)) + end + + end; (* Random *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/rand-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/rand-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/rand-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/rand-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ +(* rand-sig.sml + * + * COPYRIGHT (c) 2019 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Signature for a simple random number generator. + * + *) + +signature RAND = + sig + + type rand = Word.word + + val randMin : rand + val randMax : rand + + val random : rand -> rand + (* Given seed, return value randMin <= v <= randMax + * Iteratively using the value returned by random as the + * next seed to random will produce a sequence of pseudo-random + * numbers. + *) + + val mkRandom : rand -> unit -> rand + (* Given seed, return function generating a sequence of + * random numbers randMin <= v <= randMax + *) + + val norm : rand -> real + (* Map values in the range [randMin,randMax] to (0.0,1.0) *) + + val range : (int * int) -> rand -> int + (* Map v, randMin <= v <= randMax, to integer range [i,j] + * Exception - + * Fail if j < i + *) + + end (* RAND *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/rand.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/rand.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/rand.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/rand.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,72 @@ +(* rand.sml + * + * COPYRIGHT (c) 2019 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Random number generator taken from Paulson, pp. 170-171. + * Recommended by Stephen K. Park and Keith W. Miller, + * Random number generators: good ones are hard to find, + * CACM 31 (1988), 1192-1201 + * Updated to include the new preferred multiplier of 48271 + * CACM 36 (1993), 105-110 + * Updated to use on Word31. + * + * Note: The Random structure provides a better generator. + * + * TODO: provide a proper 64-bit implementation. + *) + +structure Rand : RAND = + struct + + type rand = Word.word + type rand' = Int32.int (* internal representation *) + + val a : rand' = 48271 + val m : rand' = 2147483647 (* 2^31 - 1 *) + val m_1 = m - 1 + val q = m div a + val r = m mod a + + val extToInt = Int32.fromLarge o Word.toLargeInt + val intToExt = Word.fromLargeInt o Int32.toLarge + + val randMin : rand = 0w1 + val randMax : rand = intToExt m_1 + + fun chk 0w0 = 1 + | chk 0wx7fffffff = m_1 + | chk seed = extToInt seed + + fun random' seed = let + val hi = seed div q + val lo = seed mod q + val test = a * lo - r * hi + in + if test > 0 then test else test + m + end + + val random = intToExt o random' o chk + + fun mkRandom seed = let + val seed = ref (chk seed) + in + fn () => (seed := random' (!seed); intToExt (!seed)) + end + + val real_m = Real.fromLargeInt (Int32.toLarge m) + fun norm s = (Real.fromLargeInt (Word.toLargeInt s)) / real_m + + fun range (i,j) = + if j < i + then LibBase.failure{module="Rand",func="range",msg="hi < lo"} + else if j = i then fn _ => i + else let + val R = Int32.fromInt j - Int32.fromInt i + val cvt = Word.toIntX o Word.fromLargeInt o Int32.toLarge + in + if R = m then Word.toIntX + else fn s => i + cvt ((extToInt s) mod (R+1)) + end + + end (* Rand *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,15 @@ +This is the utility library of the SML/NJ Library. The services provided +can be grouped as follows: + + - Data structures + - Hash tables + - Finite maps of ordered keys + - Finite sets of ordered elements + - Queues + - Arrays + + - Searching and sorting + + - String conversions + + - Some miscellaneous utility modules. diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/real-format.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/real-format.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/real-format.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/real-format.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,175 @@ +(* real-format.sml + * + * COPYRIGHT (c) 1992 by AT&T Bell Laboratories. + * + * Basic real to string conversions. This module is use internally, but is + * not part of the exported library interface. It duplicates code in the + * SML/NJ boot directory, but it is more portable not to rely on it. + * + * AUTHOR: Emden Gansner & John Reppy + * AT&T Bell Laboratories + * Murray Hill, NJ 07974 + * erg@ulysses.att.com & jhr@research.att.com + *) + +structure RealFormat : sig + + (* Low-level real to string conversion routines. For F and E format, the precision + * specifies the number of fractional digits with 0's appended if necessary. + * For G format, precision specifies the number of significant digits, but + * trailing 0's in the fractional part are dropped. + *) + val realFFormat : (real * int) -> {sign : bool, mantissa : string} + val realEFormat : (real * int) -> {sign : bool, mantissa : string, exp : int} + val realGFormat : (real * int) + -> {sign : bool, whole : string, frac : string, exp : int option} + + end = struct + + exception BadPrecision + (* raised by real to string conversions, if the precision is < 0. *) + + fun zeroLPad (s, w) = StringCvt.padLeft #"0" w s + fun zeroRPad (s, w) = StringCvt.padRight #"0" w s + + (* convert an integer between 0..9 to a single digit *) + fun mkDigit (i : int) = String.sub("0123456789", i) + + (* decompose a non-zero real into a list of at most maxPrec significant digits + * (the first digit non-zero), and integer exponent. The return value + * (a::b::c..., exp) + * is produced from real argument + * a.bc... * (10 ^^ exp) + * If the list would consist of all 9's, the list consisting of 1 followed by + * all 0's is returned instead. + *) + val maxPrec = 15 + fun decompose (f, e, precisionFn) = let + fun scaleUp (x, e) = if (x < 1.0) then scaleUp(10.0*x, e-1) else (x, e) + fun scaleDn (x, e) = if (x >= 10.0) then scaleDn(0.1*x, e+1) else (x, e) + fun mkdigits (f, 0) = ([], if f < 5.0 then 0 else 1) + | mkdigits (f, i) = let + val d = floor f + val (digits, carry) = mkdigits (10.0 * (f - real d), i - 1) + val (digit, c) = (case (d, carry) + of (9, 1) => (0, 1) + | _ => (d + carry, 0) + (* end case *)) + in + (digit::digits, c) + end + val (f, e) = if (f < 1.0) + then scaleUp (f, e) + else if (f >= 10.0) + then scaleDn (f, e) + else (f, e) + val (digits, carry) = + mkdigits(f, Int.max(0, Int.min(precisionFn e, maxPrec))) + in + case carry + of 0 => (digits, e) + | _ => (1::digits, e+1) + end + + fun realFFormat (r, prec) = let + fun pf e = e + prec + 1 + fun rtoa (digits, e) = let + fun doFrac (_, 0, l) = implode(rev l) + | doFrac ([], p, l) = doFrac([], p-1, #"0"::l) + | doFrac (hd::tl, p, l) = doFrac(tl, p-1, (mkDigit hd) :: l) + fun doWhole ([], e, l) = if e >= 0 + then doWhole ([], e-1, #"0" :: l) + else if prec = 0 + then implode(rev l) + else doFrac ([], prec, #"." :: l) + | doWhole (arg as (hd::tl), e, l) = if e >= 0 + then doWhole(tl, e-1, (mkDigit hd) :: l) + else if prec = 0 + then implode(rev l) + else doFrac(arg, prec, #"." :: l) + fun doZeros (n, 0, l) = implode(rev l) + | doZeros (1, p, l) = doFrac(digits, p, l) + | doZeros (n, p, l) = doZeros(n-1, p-1, #"0" :: l) + in + if (e >= 0) + then doWhole(digits, e, []) + else if (prec = 0) + then "0" + else doZeros (~e, prec, [#".", #"0"]) + end + in + if (prec < 0) then raise BadPrecision else (); + if (r < 0.0) + then {sign = true, mantissa = rtoa(decompose(~r, 0, pf))} + else if (r > 0.0) + then {sign=false, mantissa = rtoa(decompose(r, 0, pf))} + else if (prec = 0) + then {sign=false, mantissa = "0"} + else {sign=false, mantissa = zeroRPad("0.", prec+2)} + end (* realFFormat *) + + fun realEFormat (r, prec) = let + fun pf _ = prec + 1 + fun rtoa (sign, (digits, e)) = let + fun mkRes (m, e) = {sign = sign, mantissa = m, exp = e} + fun doFrac (_, 0, l) = implode(rev l) + | doFrac ([], n, l) = zeroRPad(implode(rev l), n) + | doFrac (hd::tl, n, l) = doFrac (tl, n-1, (mkDigit hd) :: l) + in + if (prec = 0) + then mkRes(String.str(mkDigit(hd digits)), e) + else + mkRes(doFrac(tl digits, prec, [#".", mkDigit(hd digits)]), e) + end + in + if (prec < 0) then raise BadPrecision else (); + if (r < 0.0) + then rtoa (true, decompose(~r, 0, pf)) + else if (r > 0.0) + then rtoa (false, decompose(r, 0, pf)) + else if (prec = 0) + then {sign = false, mantissa = "0", exp = 0} + else {sign = false, mantissa = zeroRPad("0.", prec+2), exp=0} + end (* realEFormat *) + + fun realGFormat (r, prec) = let + fun pf _ = prec + fun rtoa (sign, (digits, e)) = let + fun mkRes (w, f, e) = {sign = sign, whole = w, frac = f, exp = e} + fun doFrac [] = [] + | doFrac (0::tl) = (case doFrac tl + of [] => [] + | rest => #"0" :: rest + (* end case *)) + | doFrac (hd::tl) = (mkDigit hd) :: (doFrac tl) + fun doWhole ([], e, wh) = + if e >= 0 + then doWhole([], e-1, #"0"::wh) + else mkRes(implode(rev wh), "", NONE) + | doWhole (arg as (hd::tl), e, wh) = + if e >= 0 + then doWhole(tl, e-1, (mkDigit hd)::wh) + else mkRes(implode(rev wh), implode(doFrac arg), NONE) + in + if (e < ~4) orelse (e >= prec) + then mkRes( + String.str(mkDigit(hd digits)), + implode(doFrac(tl digits)), SOME e) + else if e >= 0 + then doWhole(digits, e, []) + else let + val frac = implode(doFrac digits) + in + mkRes("0", zeroLPad(frac, (size frac) + (~1 - e)), NONE) + end + end + in + if (prec < 1) then raise BadPrecision else (); + if (r < 0.0) + then rtoa(true, decompose(~r, 0, pf)) + else if (r > 0.0) + then rtoa(false, decompose(r, 0, pf)) + else {sign=false, whole="0", frac="", exp=NONE} + end (* realGFormat *) + + end (* RealFormat *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/real-order-stats.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/real-order-stats.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/real-order-stats.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/real-order-stats.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,73 @@ +(* real-order-stats.sml + * + * Randomized linear-time selection from an unordered sample. + * + * Copyright (c) 2004 by The Fellowship of SML/NJ + * + * Author: Matthias Blume (blume@tti-c.org) + *) +structure RealOrderStats : sig + + (* WARNING: Each of the functions exported from this module + * modifies its argument array by (partially) sorting it. *) + + (* select the i-th order statistic *) + val select : real array * int -> real + val select' : real ArraySlice.slice * int -> real + + (* calculate the median: + * if N is odd, then this is the (floor(N/2))th order statistic + * otherwise it is the average of (N/2-1)th and (N/2)th *) + val median : real array -> real + val median' : real ArraySlice.slice -> real + +end = struct + + infix 8 $ val op $ = Unsafe.Array.sub + infix 3 <- fun (a, i) <- x = Unsafe.Array.update (a, i, x) + + (* initialize random number generator *) + val rand = Random.rand (123, 73256) + + (* select i-th order statistic from unsorted array with + * starting point p and ending point r (inclusive): *) + fun select0 (a: real array, p, r, i) = + let fun x + y = Word.toIntX (Word.+ (Word.fromInt x, Word.fromInt y)) + fun x - y = Word.toIntX (Word.- (Word.fromInt x, Word.fromInt y)) + (* random partition: *) + fun rp (p, r) = + let fun sw(i,j) = let val t=a$i in (a,i)<-a$j; (a,j)<-t end + val q = Random.randRange (p, r) rand + val qv = a$q + val _ = if q<>p then ((a,q)<-a$p; (a,p)<-qv) else () + fun up i = if i>r orelse qv < a$i then i else up(i+1) + fun dn i = if i>=p andalso qv < a$i then dn(i-1) else i + fun lp (i, j) = + let val (i, j) = (up i, dn j) + in if i>j then let val q' = i-1 in sw(p,q'); (q',qv) end + else (sw(i,j); lp (i+1, j-1)) + end + in lp (p+1, r) end + (* random select: *) + fun rs (p, r) = + if p=r then a$r + else let val (q, qv) = rp (p, r) + in if i=q then qv else if i=mid then m else l(i+1, Real.max(a$i,m)) + in if len mod 2 = 1 then m0 else (l(p+1,a$p) + m0) / 2.0 + end + + fun median a = median0 (a, 0, Array.length a) + fun median' s = median0 (ArraySlice.base s) +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/redblack-map-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/redblack-map-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/redblack-map-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/redblack-map-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,649 @@ +(* redblack-map-fn.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This code is based on Chris Okasaki's implementation of + * red-black trees. The linear-time tree construction code is + * based on the paper "Constructing red-black trees" by Hinze, + * and the delete function is based on the description in Cormen, + * Leiserson, and Rivest. + * + * A red-black tree should satisfy the following two invariants: + * + * Red Invariant: each red node has black children (empty nodes are + * considered black). + * + * Black Invariant: each path from the root to an empty node has the + * same number of black nodes (the tree's black height). + * + * The Black invariant implies that any node with only one child + * will be black and its child will be a red leaf. + *) + +functor RedBlackMapFn (K : ORD_KEY) :> ORD_MAP where type Key.ord_key = K.ord_key = + struct + + structure Key = K + + datatype color = R | B + + datatype 'a tree + = E + | T of (color * 'a tree * K.ord_key * 'a * 'a tree) + + datatype 'a map = MAP of (int * 'a tree) + + fun isEmpty (MAP(_, E)) = true + | isEmpty _ = false + + val empty = MAP(0, E) + + fun singleton (xk, x) = MAP(1, T(B, E, xk, x, E)) + + fun insert (MAP(nItems, m), xk, x) = let + val nItems' = ref nItems + fun ins E = (nItems' := nItems+1; T(R, E, xk, x, E)) + | ins (s as T(color, a, yk, y, b)) = (case K.compare(xk, yk) + of LESS => (case a + of T(R, c, zk, z, d) => (case K.compare(xk, zk) + of LESS => (case ins c + of T(R, e, wk, w, f) => + T(R, T(B,e,wk, w,f), zk, z, T(B,d,yk,y,b)) + | c => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + | EQUAL => T(color, T(R, c, xk, x, d), yk, y, b) + | GREATER => (case ins d + of T(R, e, wk, w, f) => + T(R, T(B,c,zk,z,e), wk, w, T(B,f,yk,y,b)) + | d => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + (* end case *)) + | _ => T(B, ins a, yk, y, b) + (* end case *)) + | EQUAL => T(color, a, xk, x, b) + | GREATER => (case b + of T(R, c, zk, z, d) => (case K.compare(xk, zk) + of LESS => (case ins c + of T(R, e, wk, w, f) => + T(R, T(B,a,yk,y,e), wk, w, T(B,f,zk,z,d)) + | c => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + | EQUAL => T(color, a, yk, y, T(R, c, xk, x, d)) + | GREATER => (case ins d + of T(R, e, wk, w, f) => + T(R, T(B,a,yk,y,c), zk, z, T(B,e,wk,w,f)) + | d => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + (* end case *)) + | _ => T(B, a, yk, y, ins b) + (* end case *)) + (* end case *)) + val T(_, a, yk, y, b) = ins m + in + MAP(!nItems', T(B, a, yk, y, b)) + end + fun insert' ((xk, x), m) = insert (m, xk, x) + + fun insertWithi comb (MAP(nItems, m), xk, x) = let + val nItems' = ref nItems + fun ins E = (nItems' := nItems+1; T(R, E, xk, x, E)) + | ins (s as T(color, a, yk, y, b)) = (case K.compare(xk, yk) + of LESS => (case a + of T(R, c, zk, z, d) => (case K.compare(xk, zk) + of LESS => (case ins c + of T(R, e, wk, w, f) => + T(R, T(B,e,wk, w,f), zk, z, T(B,d,yk,y,b)) + | c => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + | EQUAL => let + val x' = comb(xk, z, x) + in + T(color, T(R, c, xk, x', d), yk, y, b) + end + | GREATER => (case ins d + of T(R, e, wk, w, f) => + T(R, T(B,c,zk,z,e), wk, w, T(B,f,yk,y,b)) + | d => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + (* end case *)) + | _ => T(B, ins a, yk, y, b) + (* end case *)) + | EQUAL => T(color, a, xk, comb(xk, y, x), b) + | GREATER => (case b + of T(R, c, zk, z, d) => (case K.compare(xk, zk) + of LESS => (case ins c + of T(R, e, wk, w, f) => + T(R, T(B,a,yk,y,e), wk, w, T(B,f,zk,z,d)) + | c => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + | EQUAL => let + val x' = comb(xk, z, x) + in + T(color, a, yk, y, T(R, c, xk, x', d)) + end + | GREATER => (case ins d + of T(R, e, wk, w, f) => + T(R, T(B,a,yk,y,c), zk, z, T(B,e,wk,w,f)) + | d => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + (* end case *)) + | _ => T(B, a, yk, y, ins b) + (* end case *)) + (* end case *)) + val T(_, a, yk, y, b) = ins m + in + MAP(!nItems', T(B, a, yk, y, b)) + end + fun insertWith comb = insertWithi (fn (_, x1, x2) => comb(x1, x2)) + + (* Is a key in the domain of the map? *) + fun inDomain (MAP(_, t), k) = let + fun find' E = false + | find' (T(_, a, yk, y, b)) = (case K.compare(k, yk) + of LESS => find' a + | EQUAL => true + | GREATER => find' b + (* end case *)) + in + find' t + end + + (* Look for an item, return NONE if the item doesn't exist *) + fun find (MAP(_, t), k) = let + fun find' E = NONE + | find' (T(_, a, yk, y, b)) = (case K.compare(k, yk) + of LESS => find' a + | EQUAL => SOME y + | GREATER => find' b + (* end case *)) + in + find' t + end + + (* Look for an item, raise NotFound if the item doesn't exist *) + fun lookup (MAP(_, t), k) = let + fun look E = raise LibBase.NotFound + | look (T(_, a, yk, y, b)) = (case K.compare(k, yk) + of LESS => look a + | EQUAL => y + | GREATER => look b + (* end case *)) + in + look t + end + + (* Remove an item, returning new map and value removed. + * Raises LibBase.NotFound if not found. + *) + local + datatype 'a zipper + = TOP + | LEFT of (color * K.ord_key * 'a * 'a tree * 'a zipper) + | RIGHT of (color * 'a tree * K.ord_key * 'a * 'a zipper) + in + fun remove (MAP(nItems, t), k) = let + (* zip the zipper *) + fun zip (TOP, t) = t + | zip (LEFT(color, xk, x, b, z), a) = zip(z, T(color, a, xk, x, b)) + | zip (RIGHT(color, a, xk, x, z), b) = zip(z, T(color, a, xk, x, b)) + (* zip the zipper while resolving a black deficit *) + fun fixupZip (TOP, t) = (true, t) + (* case 1 from CLR *) + | fixupZip (LEFT(B, xk, x, T(R, a, yk, y, b), p), t) = (case a + of T(_, T(R, a11, wk, w, a12), zk, z, a2) => (* case 1L ==> case 3L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, xk, x, a11), wk, w, T(B, a12, zk, z, a2)), yk, y, b))) + | T(_, a1, zk, z, T(R, a21, wk, w, t22)) => (* case 1L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, xk, x, a1), zk, z, T(B, a21, wk, w, t22)), yk, y, b))) + | T(_, a1, zk, z, a2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, T(B, t, xk, x, T(R, a1, zk, z, a2)), yk, y, b))) + | _ => fixupZip (LEFT(R, xk, x, a, LEFT(B, yk, y, b, p)), t) + (* end case *)) + | fixupZip (RIGHT(B, T(R, a, xk, x, b), yk, y, p), t) = (case b + of T(_, b1, zk, z, T(R, b21, wk, w, b22)) => (* case 1R ==> case 3R ==> case 4R *) + (false, zip (p, T(B, a, xk, x, T(R, T(B, b1, zk, z, b21), wk, w, T(B, b22, yk, y, t))))) + | T(_, T(R, b11, wk, w, b12), zk, z, b2) => (* case 1R ==> case 4R *) + (false, zip (p, T(B, a, xk, x, T(R, T(B, b11, wk, w, b12), zk, z, T(B, b2, yk, y, t))))) + | T(_, b1, zk, z, b2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, a, xk, x, T(B, T(R, b1, zk, z, b2), yk, y, t)))) + | _ => fixupZip (RIGHT(R, b, yk, y, RIGHT(B, a, xk, x, p)), t) + (* end case *)) + (* case 3 from CLR *) + | fixupZip (LEFT(color, xk, x, T(B, T(R, a1, yk, y, a2), zk, z, b), p), t) = + (* case 3L ==> case 4L *) + (false, zip (p, T(color, T(B, t, xk, x, a1), yk, y, T(B, a2, zk, z, b)))) + | fixupZip (RIGHT(color, T(B, a, xk, x, T(R, b1, yk, y, b2)), zk, z, p), t) = + (* case 3R ==> case 4R; rotate, recolor, plus rotate fixes deficit *) + (false, zip (p, T(color, T(B, a, xk, x, b1), yk, y, T(B, b2, zk, z, t)))) + (* case 4 from CLR *) + | fixupZip (LEFT(color, xk, x, T(B, a, yk, y, T(R, b1, zk, z, b2)), p), t) = + (false, zip (p, T(color, T(B, t, xk, x, a), yk, y, T(B, b1, zk, z, b2)))) + | fixupZip (RIGHT(color, T(B, T(R, a1, zk, z, a2), xk, x, b), yk, y, p), t) = + (false, zip (p, T(color, T(B, a1, zk, z, a2), xk, x, T(B, b, yk, y, t)))) + (* case 2 from CLR; note that "a" and "b" are guaranteed to be black, since we did + * not match cases 3 or 4. + *) + | fixupZip (LEFT(R, xk, x, T(B, a, yk, y, b), p), t) = + (false, zip (p, T(B, t, xk, x, T(R, a, yk, y, b)))) + | fixupZip (LEFT(B, xk, x, T(B, a, yk, y, b), p), t) = + fixupZip (p, T(B, t, xk, x, T(R, a, yk, y, b))) + | fixupZip (RIGHT(R, T(B, a, xk, x, b), yk, y, p), t) = + (false, zip (p, T(B, T(R, a, xk, x, b), yk, y, t))) + | fixupZip (RIGHT(B, T(B, a, xk, x, b), yk, y, p), t) = + fixupZip (p, T(B, T(R, a, xk, x, b), yk, y, t)) + (* push deficit up the tree by recoloring a black node as red *) + | fixupZip (LEFT(_, yk, y, E, p), t) = fixupZip (p, T(R, t, yk, y, E)) + | fixupZip (RIGHT(_, E, yk, y, p), t) = fixupZip (p, T(R, E, yk, y, t)) + (* impossible cases that violate the red invariant *) + | fixupZip _ = raise Fail "Red invariant violation" + (* delete the minimum value from a non-empty tree, returning a 4-tuple + * (key, elem, bd, tr), where key is the minimum key, elem is the element + * named by key, tr is the residual tree with elem removed, and bd is true + * if tr has a black-depth that is less than the original tree. + *) + fun delMin (T(R, E, yk, y, b), p) = + (* replace the node by its right subtree (which must be E) *) + (yk, y, false, zip(p, b)) + | delMin (T(B, E, yk, y, T(R, a', yk', y', b')), p) = + (* replace the node with its right child, while recoloring the child black to + * preserve the black invariant. + *) + (yk, y, false, zip (p, T(B, a', yk', y', b'))) + | delMin (T(B, E, yk, y, E), p) = let + (* delete the node, which reduces the black-depth by one, so we attempt to fix + * the deficit on the path back. + *) + val (blkDeficit, t) = fixupZip (p, E) + in + (yk, y, blkDeficit, t) + end + | delMin (T(color, a, yk, y, b), z) = delMin(a, LEFT(color, yk, y, b, z)) + | delMin (E, _) = raise Match + fun del (E, p) = raise LibBase.NotFound + | del (T(color, a, yk, y, b), p) = (case K.compare(k, yk) + of LESS => del (a, LEFT(color, yk, y, b, p)) + | EQUAL => (case (color, a, b) + of (R, E, E) => (y, zip(p, E)) + | (B, E, E) => (y, #2 (fixupZip (p, E))) + | (_, T(_, a', yk', y', b'), E) => + (* node is black and left child is red; we replace the node with its + * left child recolored to black. + *) + (y, zip(p, T(B, a', yk', y', b'))) + | (_, E, T(_, a', yk', y', b')) => + (* node is black and right child is red; we replace the node with its + * right child recolored to black. + *) + (y, zip(p, T(B, a', yk', y', b'))) + | _ => let + val (minKey, minElem, blkDeficit, b) = delMin (b, TOP) + in + if blkDeficit + then (y, #2 (fixupZip (RIGHT(color, a, minKey, minElem, p), b))) + else (y, zip (p, T(color, a, minKey, minElem, b))) + end + (* end case *)) + | GREATER => del (b, RIGHT(color, a, yk, y, p)) + (* end case *)) + val (item, t) = del(t, TOP) + in + case t + of T(R, a, xk, x, b) => (MAP(nItems-1, T(B, a, xk, x, b)), item) + | t => (MAP(nItems-1, t), item) + (* end case *) + end + end (* local *) + + (* return the first item in the map (or NONE if it is empty) *) + fun first (MAP(_, t)) = let + fun f E = NONE + | f (T(_, E, _, x, _)) = SOME x + | f (T(_, a, _, _, _)) = f a + in + f t + end + fun firsti (MAP(_, t)) = let + fun f E = NONE + | f (T(_, E, xk, x, _)) = SOME(xk, x) + | f (T(_, a, _, _, _)) = f a + in + f t + end + + (* Return the number of items in the map *) + fun numItems (MAP(n, _)) = n + + fun foldl f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, _, x, b), accum) = + foldf(b, f(x, foldf(a, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + fun foldli f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, xk, x, b), accum) = + foldf(b, f(xk, x, foldf(a, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + + fun foldr f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, _, x, b), accum) = + foldf(a, f(x, foldf(b, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + fun foldri f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, xk, x, b), accum) = + foldf(a, f(xk, x, foldf(b, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + + fun listItems m = foldr (op ::) [] m + fun listItemsi m = foldri (fn (xk, x, l) => (xk, x)::l) [] m + + (* return an ordered list of the keys in the map. *) + fun listKeys m = foldri (fn (k, _, l) => k::l) [] m + + (* functions for walking the tree while keeping a stack of parents + * to be visited. + *) + fun next ((t as T(_, _, _, _, b))::rest) = (t, left(b, rest)) + | next _ = (E, []) + and left (E, rest) = rest + | left (t as T(_, a, _, _, _), rest) = left(a, t::rest) + fun start m = left(m, []) + + (* given an ordering on the map's range, return an ordering + * on the map. + *) + fun collate cmpRng = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => EQUAL + | ((E, _), _) => LESS + | (_, (E, _)) => GREATER + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => ( + case Key.compare(xk, yk) + of EQUAL => (case cmpRng(x, y) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + | order => order + (* end case *)) + (* end case *)) + in + fn (MAP(_, m1), MAP(_, m2)) => cmp (start m1, start m2) + end + + (* support for constructing red-black trees in linear time from increasing + * ordered sequences (based on a description by R. Hinze). Note that the + * elements in the digits are ordered with the largest on the left, whereas + * the elements of the trees are ordered with the largest on the right. + *) + datatype 'a digit + = ZERO + | ONE of (K.ord_key * 'a * 'a tree * 'a digit) + | TWO of (K.ord_key * 'a * 'a tree * K.ord_key * 'a * 'a tree * 'a digit) + (* add an item that is guaranteed to be larger than any in l *) + fun addItem (ak, a, l) = let + fun incr (ak, a, t, ZERO) = ONE(ak, a, t, ZERO) + | incr (ak1, a1, t1, ONE(ak2, a2, t2, r)) = + TWO(ak1, a1, t1, ak2, a2, t2, r) + | incr (ak1, a1, t1, TWO(ak2, a2, t2, ak3, a3, t3, r)) = + ONE(ak1, a1, t1, incr(ak2, a2, T(B, t3, ak3, a3, t2), r)) + in + incr(ak, a, E, l) + end + (* link the digits into a tree *) + fun linkAll t = let + fun link (t, ZERO) = t + | link (t1, ONE(ak, a, t2, r)) = link(T(B, t2, ak, a, t1), r) + | link (t, TWO(ak1, a1, t1, ak2, a2, t2, r)) = + link(T(B, T(R, t2, ak2, a2, t1), ak1, a1, t), r) + in + link (E, t) + end + + local + fun wrap f (MAP(_, m1), MAP(_, m2)) = let + val (n, result) = f (start m1, start m2, 0, ZERO) + in + MAP(n, linkAll result) + end + fun ins ((E, _), n, result) = (n, result) + | ins ((T(_, _, xk, x, _), r), n, result) = + ins(next r, n+1, addItem(xk, x, result)) + in + + (* return a map whose domain is the union of the domains of the two input + * maps, using the supplied function to define the map on elements that + * are in both domains. + *) + fun unionWith mergeFn = let + fun union (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), t2) => ins(t2, n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => ( + case Key.compare(xk, yk) + of LESS => union (r1, t2, n+1, addItem(xk, x, result)) + | EQUAL => + union (r1, r2, n+1, addItem(xk, mergeFn(x, y), result)) + | GREATER => union (t1, r2, n+1, addItem(yk, y, result)) + (* end case *)) + (* end case *)) + in + wrap union + end + fun unionWithi mergeFn = let + fun union (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), t2) => ins(t2, n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => ( + case Key.compare(xk, yk) + of LESS => union (r1, t2, n+1, addItem(xk, x, result)) + | EQUAL => union ( + r1, r2, n+1, addItem(xk, mergeFn(xk, x, y), result)) + | GREATER => union (t1, r2, n+1, addItem(yk, y, result)) + (* end case *)) + (* end case *)) + in + wrap union + end + + (* return a map whose domain is the intersection of the domains of the + * two input maps, using the supplied function to define the range. + *) + fun intersectWith mergeFn = let + fun intersect (t1, t2, n, result) = (case (next t1, next t2) + of ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => ( + case Key.compare(xk, yk) + of LESS => intersect (r1, t2, n, result) + | EQUAL => + intersect (r1, r2, n+1, + addItem(xk, mergeFn(x, y), result)) + | GREATER => intersect (t1, r2, n, result) + (* end case *)) + | _ => (n, result) + (* end case *)) + in + wrap intersect + end + fun intersectWithi mergeFn = let + fun intersect (t1, t2, n, result) = (case (next t1, next t2) + of ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => ( + case Key.compare(xk, yk) + of LESS => intersect (r1, t2, n, result) + | EQUAL => + intersect (r1, r2, n+1, + addItem(xk, mergeFn(xk, x, y), result)) + | GREATER => intersect (t1, r2, n, result) + (* end case *)) + | _ => (n, result) + (* end case *)) + in + wrap intersect + end + + fun mergeWith mergeFn = let + fun merge (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), (T(_, _, yk, y, _), r2)) => + mergef(yk, NONE, SOME y, t1, r2, n, result) + | ((T(_, _, xk, x, _), r1), (E, _)) => + mergef(xk, SOME x, NONE, r1, t2, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => ( + case Key.compare(xk, yk) + of LESS => mergef(xk, SOME x, NONE, r1, t2, n, result) + | EQUAL => mergef(xk, SOME x, SOME y, r1, r2, n, result) + | GREATER => mergef(yk, NONE, SOME y, t1, r2, n, result) + (* end case *)) + (* end case *)) + and mergef (k, x1, x2, r1, r2, n, result) = (case mergeFn(x1, x2) + of NONE => merge (r1, r2, n, result) + | SOME y => merge (r1, r2, n+1, addItem(k, y, result)) + (* end case *)) + in + wrap merge + end + fun mergeWithi mergeFn = let + fun merge (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), (T(_, _, yk, y, _), r2)) => + mergef(yk, NONE, SOME y, t1, r2, n, result) + | ((T(_, _, xk, x, _), r1), (E, _)) => + mergef(xk, SOME x, NONE, r1, t2, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => ( + case Key.compare(xk, yk) + of LESS => mergef(xk, SOME x, NONE, r1, t2, n, result) + | EQUAL => mergef(xk, SOME x, SOME y, r1, r2, n, result) + | GREATER => mergef(yk, NONE, SOME y, t1, r2, n, result) + (* end case *)) + (* end case *)) + and mergef (k, x1, x2, r1, r2, n, result) = (case mergeFn(k, x1, x2) + of NONE => merge (r1, r2, n, result) + | SOME y => merge (r1, r2, n+1, addItem(k, y, result)) + (* end case *)) + in + wrap merge + end + end (* local *) + + fun app f = let + fun appf E = () + | appf (T(_, a, _, x, b)) = (appf a; f x; appf b) + in + fn (MAP(_, m)) => appf m + end + fun appi f = let + fun appf E = () + | appf (T(_, a, xk, x, b)) = (appf a; f(xk, x); appf b) + in + fn (MAP(_, m)) => appf m + end + + fun map f = let + fun mapf E = E + | mapf (T(color, a, xk, x, b)) = + T(color, mapf a, xk, f x, mapf b) + in + fn (MAP(n, m)) => MAP(n, mapf m) + end + fun mapi f = let + fun mapf E = E + | mapf (T(color, a, xk, x, b)) = + T(color, mapf a, xk, f(xk, x), mapf b) + in + fn (MAP(n, m)) => MAP(n, mapf m) + end + + (* Filter out those elements of the map that do not satisfy the + * predicate. The filtering is done in increasing map order. + *) + fun filter pred (MAP(_, t)) = let + fun walk (E, n, result) = (n, result) + | walk (T(_, a, xk, x, b), n, result) = let + val (n, result) = walk(a, n, result) + in + if (pred x) + then walk(b, n+1, addItem(xk, x, result)) + else walk(b, n, result) + end + val (n, result) = walk (t, 0, ZERO) + in + MAP(n, linkAll result) + end + fun filteri pred (MAP(_, t)) = let + fun walk (E, n, result) = (n, result) + | walk (T(_, a, xk, x, b), n, result) = let + val (n, result) = walk(a, n, result) + in + if (pred(xk, x)) + then walk(b, n+1, addItem(xk, x, result)) + else walk(b, n, result) + end + val (n, result) = walk (t, 0, ZERO) + in + MAP(n, linkAll result) + end + + (* map a partial function over the elements of a map in increasing + * map order. + *) + fun mapPartial f = let + fun f' (xk, x, m) = (case f x + of NONE => m + | (SOME y) => insert(m, xk, y) + (* end case *)) + in + foldli f' empty + end + fun mapPartiali f = let + fun f' (xk, x, m) = (case f(xk, x) + of NONE => m + | (SOME y) => insert(m, xk, y) + (* end case *)) + in + foldli f' empty + end + + (* check the elements of a map with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + * Elements are checked in key order. + *) + fun exists pred = let + fun exists' E = false + | exists' (T(_, a, _, x, b)) = exists' a orelse pred x orelse exists' b + in + fn (MAP(_, m)) => exists' m + end + fun existsi pred = let + fun exists' E = false + | exists' (T(_, a, k, x, b)) = exists' a orelse pred(k, x) orelse exists' b + in + fn (MAP(_, m)) => exists' m + end + + (* check the elements of a map with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. Elements + * are checked in key order. + *) + fun all pred = let + fun all' E = true + | all' (T(_, a, _, x, b)) = all' a andalso pred x andalso all' b + in + fn (MAP(_, m)) => all' m + end + fun alli pred = let + fun all' E = true + | all' (T(_, a, k, x, b)) = all' a andalso pred(k, x) andalso all' b + in + fn (MAP(_, m)) => all' m + end + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/redblack-set-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/redblack-set-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/redblack-set-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/redblack-set-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,517 @@ +(* redblack-set-fn.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This code is based on Chris Okasaki's implementation of + * red-black trees. The linear-time tree construction code is + * based on the paper "Constructing red-black trees" by Hinze, + * and the delete function is based on the description in Cormen, + * Leiserson, and Rivest. + * + * A red-black tree should satisfy the following two invariants: + * + * Red Invariant: each red node has black children (empty nodes are + * considered black). + * + * Black Invariant: each path from the root to an empty node has the + * same number of black nodes (the tree's black height). + * + * The Black invariant implies that any node with only one child + * will be black and its child will be a red leaf. + *) + +functor RedBlackSetFn (K : ORD_KEY) :> ORD_SET where type Key.ord_key = K.ord_key = + struct + + structure Key = K + + type item = K.ord_key + + datatype color = R | B + + datatype tree + = E + | T of (color * tree * item * tree) + + datatype set = SET of (int * tree) + + fun isEmpty (SET(_, E)) = true + | isEmpty _ = false + + val empty = SET(0, E) + + fun minItem (SET(_, tr)) = let + fun min E = raise Empty + | min (T(_, E, item, _)) = item + | min (T(_, tr, _, _)) = min tr + in + min tr + end + + fun maxItem (SET(_, tr)) = let + fun max E = raise Empty + | max (T(_, _, item, E)) = item + | max (T(_, _, _, tr)) = max tr + in + max tr + end + + fun singleton x = SET(1, T(B, E, x, E)) + + fun add (SET(nItems, m), x) = let + val nItems' = ref nItems + fun ins E = (nItems' := nItems+1; T(R, E, x, E)) + | ins (s as T(color, a, y, b)) = (case K.compare(x, y) + of LESS => (case a + of T(R, c, z, d) => (case K.compare(x, z) + of LESS => (case ins c + of T(R, e, w, f) => T(R, T(B,e,w,f), z, T(B,d,y,b)) + | c => T(B, T(R,c,z,d), y, b) + (* end case *)) + | EQUAL => T(color, T(R, c, x, d), y, b) + | GREATER => (case ins d + of T(R, e, w, f) => T(R, T(B,c,z,e), w, T(B,f,y,b)) + | d => T(B, T(R,c,z,d), y, b) + (* end case *)) + (* end case *)) + | _ => T(B, ins a, y, b) + (* end case *)) + | EQUAL => T(color, a, x, b) + | GREATER => (case b + of T(R, c, z, d) => (case K.compare(x, z) + of LESS => (case ins c + of T(R, e, w, f) => T(R, T(B,a,y,e), w, T(B,f,z,d)) + | c => T(B, a, y, T(R,c,z,d)) + (* end case *)) + | EQUAL => T(color, a, y, T(R, c, x, d)) + | GREATER => (case ins d + of T(R, e, w, f) => T(R, T(B,a,y,c), z, T(B,e,w,f)) + | d => T(B, a, y, T(R,c,z,d)) + (* end case *)) + (* end case *)) + | _ => T(B, a, y, ins b) + (* end case *)) + (* end case *)) + val T(_, a, y, b) = ins m + in + SET(!nItems', T(B, a, y, b)) + end + fun add' (x, m) = add (m, x) + + fun addList (s, []) = s + | addList (s, x::r) = addList(add(s, x), r) + + (* Remove an item. Raises LibBase.NotFound if not found. *) + local + datatype zipper + = TOP + | LEFT of (color * item * tree * zipper) + | RIGHT of (color * tree * item * zipper) + in + fun delete (SET(nItems, t), k) = let + (* zip the zipper *) + fun zip (TOP, t) = t + | zip (LEFT(color, x, b, p), a) = zip(p, T(color, a, x, b)) + | zip (RIGHT(color, a, x, p), b) = zip(p, T(color, a, x, b)) + (* zip the zipper while resolving a black deficit *) + fun fixupZip (TOP, t) = (true, t) + (* case 1 from CLR *) + | fixupZip (LEFT(B, x, T(R, a, y, b), p), t) = (case a + of T(_, T(R, a11, w, a12), z, a2) => (* case 1L ==> case 3L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, x, a11), w, T(B, a12, z, a2)), y, b))) + | T(_, a1, z, T(R, a21, w, t22)) => (* case 1L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, x, a1), z, T(B, a21, w, t22)), y, b))) + | T(_, a1, z, a2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, T(B, t, x, T(R, a1, z, a2)), y, b))) + | _ => fixupZip (LEFT(R, x, a, LEFT(B, y, b, p)), t) + (* end case *)) + | fixupZip (RIGHT(B, T(R, a, x, b), y, p), t) = (case b + of T(_, b1, z, T(R, b21, w, b22)) => (* case 1R ==> case 3R ==> case 4R *) + (false, zip (p, T(B, a, x, T(R, T(B, b1, z, b21), w, T(B, b22, y, t))))) + | T(_, T(R, b11, w, b12), z, b2) => (* case 1R ==> case 4R *) + (false, zip (p, T(B, a, x, T(R, T(B, b11, w, b12), z, T(B, b2, y, t))))) + | T(_, b1, z, b2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, a, x, T(B, T(R, b1, z, b2), y, t)))) + | _ => fixupZip (RIGHT(R, b, y, RIGHT(B, a, x, p)), t) + (* end case *)) + (* case 3 from CLR *) + | fixupZip (LEFT(color, x, T(B, T(R, a1, y, a2), z, b), p), t) = + (* case 3L ==> case 4L *) + (false, zip (p, T(color, T(B, t, x, a1), y, T(B, a2, z, b)))) + | fixupZip (RIGHT(color, T(B, a, x, T(R, b1, y, b2)), z, p), t) = + (* case 3R ==> case 4R; rotate, recolor, plus rotate fixes deficit *) + (false, zip (p, T(color, T(B, a, x, b1), y, T(B, b2, z, t)))) + (* case 4 from CLR *) + | fixupZip (LEFT(color, x, T(B, a, y, T(R, b1, z, b2)), p), t) = + (false, zip (p, T(color, T(B, t, x, a), y, T(B, b1, z, b2)))) + | fixupZip (RIGHT(color, T(B, T(R, a1, z, a2), x, b), y, p), t) = + (false, zip (p, T(color, T(B, a1, z, a2), x, T(B, b, y, t)))) + (* case 2 from CLR; note that "a" and "b" are guaranteed to be black, since we did + * not match cases 3 or 4. + *) + | fixupZip (LEFT(R, x, T(B, a, y, b), p), t) = + (false, zip (p, T(B, t, x, T(R, a, y, b)))) + | fixupZip (LEFT(B, x, T(B, a, y, b), p), t) = + fixupZip (p, T(B, t, x, T(R, a, y, b))) + | fixupZip (RIGHT(R, T(B, a, x, b), y, p), t) = + (false, zip (p, T(B, T(R, a, x, b), y, t))) + | fixupZip (RIGHT(B, T(B, a, x, b), y, p), t) = + fixupZip (p, T(B, T(R, a, x, b), y, t)) + (* push deficit up the tree by recoloring a black node as red *) + | fixupZip (LEFT(_, y, E, p), t) = fixupZip (p, T(R, t, y, E)) + | fixupZip (RIGHT(_, E, y, p), t) = fixupZip (p, T(R, E, y, t)) + (* impossible cases that violate the red invariant *) + | fixupZip _ = raise Fail "Red invariant violation" + (* delete the minimum value from a non-empty tree, returning a triple + * (elem, bd, tr), where elem is the minimum element, tr is the residual + * tree with elem removed, and bd is true if tr has a black-depth that is + * less than the original tree. + *) + fun delMin (T(R, E, y, b), p) = + (* replace the node by its right subtree (which must be E) *) + (y, false, zip(p, b)) + | delMin (T(B, E, y, T(R, a', y', b')), p) = + (* replace the node with its right child, while recoloring the child black to + * preserve the black invariant. + *) + (y, false, zip (p, T(B, a', y', b'))) + | delMin (T(B, E, y, E), p) = let + (* delete the node, which reduces the black-depth by one, so we attempt to fix + * the deficit on the path back. + *) + val (blkDeficit, t) = fixupZip (p, E) + in + (y, blkDeficit, t) + end + | delMin (T(color, a, y, b), z) = delMin(a, LEFT(color, y, b, z)) + | delMin (E, _) = raise Match + fun del (E, z) = raise LibBase.NotFound + | del (T(color, a, y, b), p) = (case K.compare(k, y) + of LESS => del (a, LEFT(color, y, b, p)) + | EQUAL => (case (color, a, b) + of (R, E, E) => zip(p, E) + | (B, E, E) => #2 (fixupZip (p, E)) + | (_, T(_, a', y', b'), E) => + (* node is black and left child is red; we replace the node with its + * left child recolored to black. + *) + zip(p, T(B, a', y', b')) + | (_, E, T(_, a', y', b')) => + (* node is black and right child is red; we replace the node with its + * right child recolored to black. + *) + zip(p, T(B, a', y', b')) + | _ => let + val (minSucc, blkDeficit, b) = delMin (b, TOP) + in + if blkDeficit + then #2 (fixupZip (RIGHT(color, a, minSucc, p), b)) + else zip (p, T(color, a, minSucc, b)) + end + (* end case *)) + | GREATER => del (b, RIGHT(color, a, y, p)) + (* end case *)) + in + case del(t, TOP) + of T(R, a, x, b) => SET(nItems-1, T(B, a, x, b)) + | t => SET(nItems-1, t) + (* end case *) + end + end (* local *) + + (* Return true if and only if item is an element in the set *) + fun member (SET(_, t), k) = let + fun find' E = false + | find' (T(_, a, y, b)) = (case K.compare(k, y) + of LESS => find' a + | EQUAL => true + | GREATER => find' b + (* end case *)) + in + find' t + end + + (* Return the number of items in the map *) + fun numItems (SET(n, _)) = n + + fun foldl f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, x, b), accum) = + foldf(b, f(x, foldf(a, accum))) + in + fn init => fn (SET(_, m)) => foldf(m, init) + end + + fun foldr f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, x, b), accum) = + foldf(a, f(x, foldf(b, accum))) + in + fn init => fn (SET(_, m)) => foldf(m, init) + end + + (* return an ordered list of the items in the set. *) + fun toList s = foldr (fn (x, l) => x::l) [] s + + (* functions for walking the tree while keeping a stack of parents + * to be visited. + *) + fun next ((t as T(_, _, _, b))::rest) = (t, left(b, rest)) + | next _ = (E, []) + and left (E, rest) = rest + | left (t as T(_, a, _, _), rest) = left(a, t::rest) + fun start m = left(m, []) + + (* Return true if and only if the two sets are equal *) + fun equal (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => true + | ((E, _), _) => false + | (_, (E, _)) => false + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case Key.compare(x, y) + of EQUAL => cmp (r1, r2) + | _ => false + (* end case *)) + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return the lexical order of two sets *) + fun compare (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => EQUAL + | ((E, _), _) => LESS + | (_, (E, _)) => GREATER + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case Key.compare(x, y) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return true if and only if the first set is a subset of the second *) + fun isSubset (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => true + | ((E, _), _) => true + | (_, (E, _)) => false + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case Key.compare(x, y) + of LESS => false + | EQUAL => cmp (r1, r2) + | GREATER => cmp (t1, r2) + (* end case *)) + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return true if the two sets are disjoint *) + fun disjoint (SET(0, _), _) = true + | disjoint (_, SET(0, _)) = true + | disjoint (SET(_, s1), SET(_, s2)) = let + fun walk ((E, _), _) = true + | walk (_, (E, _)) = true + | walk (t1 as (T(_, _, x, _), r1), t2 as (T(_, _, y, _), r2)) = ( + case Key.compare(x, y) + of LESS => walk (next r1, t2) + | EQUAL => false + | GREATER => walk (t1, next r2) + (* end case *)) + in + walk (next (start s1), next (start s2)) + end + + (* support for constructing red-black trees in linear time from increasing + * ordered sequences (based on a description by R. Hinze). Note that the + * elements in the digits are ordered with the largest on the left, whereas + * the elements of the trees are ordered with the largest on the right. + *) + datatype digit + = ZERO + | ONE of (item * tree * digit) + | TWO of (item * tree * item * tree * digit) + (* add an item that is guaranteed to be larger than any in l *) + fun addItem (a, l) = let + fun incr (a, t, ZERO) = ONE(a, t, ZERO) + | incr (a1, t1, ONE(a2, t2, r)) = TWO(a1, t1, a2, t2, r) + | incr (a1, t1, TWO(a2, t2, a3, t3, r)) = + ONE(a1, t1, incr(a2, T(B, t3, a3, t2), r)) + in + incr(a, E, l) + end + (* link the digits into a tree *) + fun linkAll t = let + fun link (t, ZERO) = t + | link (t1, ONE(a, t2, r)) = link(T(B, t2, a, t1), r) + | link (t, TWO(a1, t1, a2, t2, r)) = + link(T(B, T(R, t2, a2, t1), a1, t), r) + in + link (E, t) + end + + (* create a set from a list of items; this function works in linear time if the list + * is in increasing order. + *) + fun fromList [] = empty + | fromList (first::rest) = let + fun add (prev, x::xs, n, accum) = (case Key.compare(prev, x) + of LESS => add(x, xs, n+1, addItem(x, accum)) + | _ => (* list not in order, so fall back to addList code *) + addList(SET(n, linkAll accum), x::xs) + (* end case *)) + | add (_, [], n, accum) = SET(n, linkAll accum) + in + add (first, rest, 1, addItem(first, ZERO)) + end + + (* return the union of the two sets *) + fun union (SET(_, s1), SET(_, s2)) = let + fun ins ((E, _), n, result) = (n, result) + | ins ((T(_, _, x, _), r), n, result) = + ins(next r, n+1, addItem(x, result)) + fun union' (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), t2) => ins(t2, n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case Key.compare(x, y) + of LESS => union' (r1, t2, n+1, addItem(x, result)) + | EQUAL => union' (r1, r2, n+1, addItem(x, result)) + | GREATER => union' (t1, r2, n+1, addItem(y, result)) + (* end case *)) + (* end case *)) + val (n, result) = union' (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + (* return the intersection of the two sets *) + fun intersection (SET(_, s1), SET(_, s2)) = let + fun intersect (t1, t2, n, result) = (case (next t1, next t2) + of ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case Key.compare(x, y) + of LESS => intersect (r1, t2, n, result) + | EQUAL => intersect (r1, r2, n+1, addItem(x, result)) + | GREATER => intersect (t1, r2, n, result) + (* end case *)) + | _ => (n, result) + (* end case *)) + val (n, result) = intersect (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + (* return the set difference *) + fun difference (SET(_, s1), SET(_, s2)) = let + fun ins ((E, _), n, result) = (n, result) + | ins ((T(_, _, x, _), r), n, result) = + ins(next r, n+1, addItem(x, result)) + fun diff (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), _) => (n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => ( + case Key.compare(x, y) + of LESS => diff (r1, t2, n+1, addItem(x, result)) + | EQUAL => diff (r1, r2, n, result) + | GREATER => diff (t1, r2, n, result) + (* end case *)) + (* end case *)) + val (n, result) = diff (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + fun subtract (s, item) = difference (s, singleton item) + fun subtract' (item, s) = subtract (s, item) + + fun subtractList (l, items) = let + val items' = List.foldl (fn (x, set) => add(set, x)) (SET(0, E)) items + in + difference (l, items') + end + + fun app f = let + fun appf E = () + | appf (T(_, a, x, b)) = (appf a; f x; appf b) + in + fn (SET(_, m)) => appf m + end + + fun map f = let + fun addf (x, m) = add(m, f x) + in + foldl addf empty + end + + fun mapPartial f = let + fun f' (x, acc) = (case f x of SOME x' => add(acc, x') | NONE => acc) + in + foldl f' empty + end + + (* Filter out those elements of the set that do not satisfy the + * predicate. The filtering is done in increasing map order. + *) + fun filter pred (SET(_, t)) = let + fun walk (E, n, result) = (n, result) + | walk (T(_, a, x, b), n, result) = let + val (n, result) = walk(a, n, result) + in + if (pred x) + then walk(b, n+1, addItem(x, result)) + else walk(b, n, result) + end + val (n, result) = walk (t, 0, ZERO) + in + SET(n, linkAll result) + end + + fun partition pred (SET(_, t)) = let + fun walk (E, n1, result1, n2, result2) = (n1, result1, n2, result2) + | walk (T(_, a, x, b), n1, result1, n2, result2) = let + val (n1, result1, n2, result2) = walk(a, n1, result1, n2, result2) + in + if (pred x) + then walk(b, n1+1, addItem(x, result1), n2, result2) + else walk(b, n1, result1, n2+1, addItem(x, result2)) + end + val (n1, result1, n2, result2) = walk (t, 0, ZERO, 0, ZERO) + in + (SET(n1, linkAll result1), SET(n2, linkAll result2)) + end + + fun exists pred = let + fun test E = false + | test (T(_, a, x, b)) = test a orelse pred x orelse test b + in + fn (SET(_, t)) => test t + end + + fun all pred = let + fun test E = true + | test (T(_, a, x, b)) = test a andalso pred x andalso test b + in + fn (SET(_, t)) => test t + end + + fun find pred = let + fun test E = NONE + | test (T(_, a, x, b)) = (case test a + of NONE => if pred x then SOME x else test b + | someItem => someItem + (* end case *)) + in + fn (SET(_, t)) => test t + end + + (* DEPRECATED FUNCTIONS *) + val listItems = toList + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/scan-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/scan-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/scan-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/scan-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,37 @@ +(* scan-sig.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * C-style conversions from string representations. + * + * TODO: replace the fmt_item type with a datatype that reflects the more + * limited set of possible results. Also replace the shared implementation + * of format-string processing with processing that is specific to scanning. + *) + +signature SCAN = + sig + + datatype fmt_item + = ATOM of Atom.atom + | LINT of LargeInt.int + | INT of Int.int + | LWORD of LargeWord.word + | WORD of Word.word + | WORD8 of Word8.word + | BOOL of bool + | CHR of char + | STR of string + | REAL of Real.real + | LREAL of LargeReal.real + | LEFT of (int * fmt_item) (* left justify in field of given width *) + | RIGHT of (int * fmt_item) (* right justify in field of given width *) + + exception BadFormat (* bad format string *) + + val sscanf : string -> string -> fmt_item list option + val scanf : string -> (char, 'a) StringCvt.reader + -> (fmt_item list, 'a) StringCvt.reader + + end (* SCAN *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/scan.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/scan.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/scan.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/scan.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,164 @@ +(* scan.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * C-style conversions from string representations. + * + * TODO: replace the fmt_item type with a datatype that reflects the more + * limited set of possible results. Also replace the shared implementation + * of format-string processing with processing that is specific to scanning. + *) + +structure Scan : SCAN = + struct + + structure SS = Substring + structure SC = StringCvt + + open FmtFields + + (* character sets *) + abstype charset = CS of Word8Array.array + with + fun mkCharSet () = CS(Word8Array.array(Char.maxOrd+1, 0w0)) + fun addChar (CS ba, c) = Word8Array.update(ba, Char.ord c, 0w1) + fun addRange (CS ba, c1, c2) = let + val ord_c2 = Char.ord c2 + fun add i = if (i <= ord_c2) + then (Word8Array.update(ba, i, 0w1); add(i+1)) + else () + in + if (c1 <= c2) then (add(Char.ord c1)) else raise BadFormat + end + fun inSet (CS ba) arg = (Word8Array.sub(ba, Char.ord arg) = 0w1) + fun notInSet (CS ba) arg = (Word8Array.sub(ba, Char.ord arg) = 0w0) + end + + fun scanCharSet fmtStr = let + val cset = mkCharSet() + val (isNot, fmtStr) = (case SS.getc fmtStr + of (SOME(#"^", ss)) => (true, ss) + | _ => (false, fmtStr) + (* end case *)) + fun scan (nextChar, ss) = (case (SS.getc ss) + of (SOME(#"-", ss)) => (case (SS.getc ss) + of (SOME(#"]", ss)) => ( + addChar(cset, nextChar); + addChar(cset, #"-"); + ss) + | (SOME(c, ss)) => ( + addRange(cset, nextChar, c); + scanNext ss) + | NONE => raise BadFormat + (* end case *)) + | (SOME(#"]", ss)) => (addChar(cset, nextChar); ss) + | (SOME(c, ss)) => (addChar(cset, nextChar); scan(c, ss)) + | NONE => raise BadFormat + (* end case *)) + and scanNext ss = (case (SS.getc ss) + of (SOME(#"-", ss)) => raise BadFormat + | (SOME(#"]", ss)) => ss + | (SOME(c, ss)) => scan(c, ss) + | NONE => raise BadFormat + (* end case *)) + and scanChar (SOME arg) = scan arg + | scanChar NONE = raise BadFormat + val fmtStr = scanChar (SS.getc fmtStr) + in + if isNot + then (CharSet(notInSet cset), fmtStr) + else (CharSet(inSet cset), fmtStr) + end + + fun compileScanFormat str = let + val split = SS.splitl (Char.notContains "\n\t %[") + fun scan (ss, l) = + if (SS.isEmpty ss) + then rev l + else let val (ss1, ss2) = split ss + in + case (SS.getc ss2) + of (SOME(#"%", ss')) => let val (field, ss3) = scanField ss' + in + scan(ss3, field :: (Raw ss1) :: l) + end + | (SOME(#"[", ss')) => let val (cs, ss3) = scanCharSet ss' + in + scan (ss3, cs :: (Raw ss1) :: l) + end + | (SOME(_, ss')) => + scan (SS.dropl Char.isSpace ss', (Raw ss1) :: l) + | NONE => rev((Raw ss1)::l) + (* end case *) + end + in + scan (SS.full str, []) + end + +(** NOTE: for the time being, this function ignores flags and field width **) + fun scanf fmt getc strm = let + val fmts = compileScanFormat fmt + val skipWS = SC.dropl Char.isSpace getc + fun scan (strm, [], items) = SOME(rev items, strm) + | scan (strm, (Raw ss)::rf, items) = let + fun match (strm, ss) = (case (getc strm, SS.getc ss) + of (SOME(c', strm'), SOME(c, ss)) => + if (c' = c) then match (strm', ss) else NONE + | (_, NONE) => scan (strm, rf, items) + | _ => NONE + (* end case *)) + in + match (skipWS strm, ss) + end + | scan (strm, (CharSet pred)::rf, items) = let + fun scanSet strm = (case (getc strm) + of (SOME(c, strm')) => + if (pred c) then scanSet strm' else strm + | NONE => strm + (* end case *)) + in + scan (scanSet strm, rf, items) + end + | scan (strm, Field(flags, wid, ty)::rf, items) = let + val strm = skipWS strm + fun next (con, SOME(x, strm')) = scan (strm', rf, con(x)::items) + | next _ = NONE + fun getInt fmt = if (#large flags) + then next(LINT, LargeInt.scan fmt getc strm) + else next(INT, Int.scan fmt getc strm) + in + case ty + of OctalField => getInt SC.OCT + | IntField => getInt SC.DEC + | HexField => getInt SC.HEX + | CapHexField => getInt SC.HEX + | CharField => next(CHR, getc strm) + | BoolField => next(BOOL, Bool.scan getc strm) +(* QUESTION: should we use the precision? *) + | StrField prec => let + val notSpace = not o Char.isSpace + val pred = (case wid + of NoPad => notSpace + | (Wid n) => let val cnt = ref n + in + fn c => (case !cnt + of 0 => false + | n => (cnt := n-1; notSpace c) + (* end case *)) + end + (* end case *)) + val (s, strm) = SC.splitl pred getc strm + in + scan (strm, rf, STR s :: items) + end + | (RealField _) => next(REAL, LargeReal.scan getc strm) + (* end case *) + end + in + scan(strm, fmts, []) + end (* scanf *) + + fun sscanf fmt = SC.scanString (scanf fmt) + + end (* Scan *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/simple-uref.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/simple-uref.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/simple-uref.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/simple-uref.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,58 @@ +(* simple-uref.sml + * + * UNIONFIND DATA STRUCTURE WITH PATH COMPRESSION + * + * Author: + * Fritz Henglein + * DIKU, University of Copenhagen + * henglein@diku.dk + *) + +structure SimpleURef : UREF = + struct + + exception UnionFind of string + + datatype 'a urefC + = ECR of 'a + | PTR of 'a uref + withtype 'a uref = 'a urefC ref + + fun find (p as ref(ECR _)) = p + | find (p as ref(PTR p')) = let + val p'' = find p' + in + p := PTR p''; p'' + end + + fun uRef x = ref (ECR x) + + fun !! p = (case !(find p) + of ECR x => x + | _ => raise Match + (* end case *)) + + fun equal (p, p') = (find p = find p') + + fun update (p, x) = let val p' = find p + in + p' := ECR x + end + + fun link (p, q) = let + val p' = find p + val q' = find q + in + if p' = q' then false else (p' := PTR q'; true) + end + + val union = link + + fun unify f (p, q) = let + val v = f(!!p, !!q) + in + union (p, q) before update (q, v) + end + + end (* SimpleURef *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/smlnj-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/smlnj-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/smlnj-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/smlnj-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,245 @@ +(* smlnj-lib.cm + * + * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * The sources specification for the SML/NJ Utility library; part of the + * SML/NJ Library suite. + *) + +Library + +signature ARRAY_SORT +signature ATOM +signature BASE64 +signature BIT_ARRAY +signature CHAR_MAP +signature DYNAMIC_ARRAY +signature FIFO +signature FORMAT +signature FORMAT_COMB +signature GRAPH_SCC +signature HASH_KEY +signature HASH_TABLE +signature INTERVAL_DOMAIN +signature INTERVAL_SET +signature IO_UTIL +signature GET_OPT +signature LIB_BASE +signature LIST_FORMAT +signature LIST_SORT +signature LIST_XPROD +signature MONO_ARRAY_SORT +signature MONO_DYNAMIC_ARRAY +signature MONO_HASH_SET +signature MONO_HASH_TABLE +signature MONO_HASH2_TABLE +signature MONO_PRIORITYQ +signature ORD_KEY +signature ORD_MAP +signature ORD_SET +signature PARSER_COMB +signature PATH_UTIL +signature PRIORITY +signature PROP_LIST +signature QUEUE +signature RAND +signature RANDOM +signature SCAN +signature SPLAY_TREE +signature UREF +signature UTF8 + +structure ANSITerm +structure ArrayQSort +structure Atom +structure AtomBinaryMap (* to be removed *) +structure AtomBinarySet (* to be removed *) +structure AtomRedBlackMap +structure AtomRedBlackSet +structure AtomMap +structure AtomSet +structure AtomTable +structure Base64 +structure BitArray +structure CharMap +structure DynamicArray +structure Fifo +structure FNVHash +structure Format +structure FormatComb +structure HashString +structure HashTable +structure IntBinaryMap (* to be removed *) +structure IntBinarySet (* to be removed *) +structure IntHashTable +structure IntListMap +structure IntListSet +structure IntRedBlackMap +structure IntRedBlackSet +structure IOUtil +structure GetOpt +structure LibBase +structure ListFormat +structure ListMergeSort +structure ListXProd +structure ParserComb +structure PathUtil +structure PrimeSizes +structure PropList +structure Queue +structure Rand +structure Random +structure Scan +structure SimpleURef +structure TimeLimit +structure URef +structure WordHashTable +structure WordRedBlackMap +structure WordRedBlackSet +structure RealOrderStats +structure UnivariateStats +structure UTF8 + +functor ArrayQSortFn +functor BSearchFn +functor BinaryMapFn +functor BinarySetFn +functor DynamicArrayFn +functor GraphSCCFn +functor HashSetFn +functor HashTableFn +functor Hash2TableFn +functor IntervalSetFn +functor KeywordFn +functor LeftPriorityQFn +functor ListMapFn +functor ListSetFn +functor MonoArrayFn +functor RedBlackMapFn +functor RedBlackSetFn +functor SplayMapFn +functor SplaySetFn + +is + + $/basis.cm + +ansi-term.sml +array-qsort-fn.sml +array-qsort.sml +array-sort-sig.sml +atom-sig.sml +atom-binary-map.sml +atom-binary-set.sml +atom-redblack-map.sml +atom-redblack-set.sml +atom-map.sml +atom-set.sml +atom-table.sml +atom.sml +base64-sig.sml +base64.sml +binary-map-fn.sml +binary-set-fn.sml +bit-array-sig.sml +bit-array.sml +bsearch-fn.sml +char-map-sig.sml +char-map.sml +dynamic-array-sig.sml +dynamic-array.sml +dynamic-array-fn.sml +fifo-sig.sml +fifo.sml +fmt-fields.sml +fnv-hash.sml +format-sig.sml +format.sml +format-comb-sig.sml +format-comb.sml +graph-scc-sig.sml +graph-scc-fn.sml +hash-key-sig.sml +hash-string.sml +hash-set-fn.sml +hash-table-rep.sml +hash-table-sig.sml +hash-table.sml +hash-table-fn.sml +hash2-table-fn.sml +keyword-fn.sml +int-binary-map.sml +int-binary-set.sml +int-hash-table.sml +int-list-map.sml +int-list-set.sml +int-redblack-map.sml +int-redblack-set.sml +interval-domain-sig.sml +interval-set-fn.sml +interval-set-sig.sml +io-util-sig.sml +io-util.sml +getopt-sig.sml +getopt.sml +left-priorityq-fn.sml +lib-base-sig.sml +lib-base.sml +list-format-sig.sml +list-format.sml +list-map-fn.sml +list-mergesort.sml +list-set-fn.sml +list-xprod-sig.sml +list-xprod.sml +listsort-sig.sml +mono-array-fn.sml +mono-array-sort-sig.sml +mono-dynamic-array-sig.sml +mono-hash-set-sig.sml +mono-hash-table-sig.sml +mono-hash2-table-sig.sml +mono-priorityq-sig.sml +ord-key-sig.sml +ord-map-sig.sml +ord-set-sig.sml +parser-comb-sig.sml +parser-comb.sml +path-util-sig.sml +path-util.sml +plist-sig.sml +plist.sml +#if defined(SIZE_32) + target32-prime-sizes.sml +#else + target64-prime-sizes.sml +#endif +priority-sig.sml +queue-sig.sml +queue.sml +rand-sig.sml +rand.sml +random-sig.sml +random.sml +real-format.sml +redblack-map-fn.sml +redblack-set-fn.sml +scan-sig.sml +scan.sml +simple-uref.sml +splay-map-fn.sml +splay-set-fn.sml +splaytree-sig.sml +splaytree.sml +time-limit.sml +uref-sig.sml +uref.sml +word-hash-table.sml +word-redblack-map.sml +word-redblack-set.sml +real-order-stats.sml +univariate-stats.sml +utf8-sig.sml +utf8.sml + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/smlnj-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/smlnj-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/smlnj-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/smlnj-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2258 @@ + +ann + "nonexhaustiveBind ignore" "nonexhaustiveMatch warn" + "redundantBind ignore" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" +in + +local + basis l4 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb $(SML_LIB)/basis/unsafe.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + open l4 + in + structure gs_0 = StringCvt + end + local + structure StringCvt = gs_0 + list-format-sig.sml + in + signature gs_1 = LIST_FORMAT + end + local + open l4 + in + structure gs_2 = Vector + end + local + open l4 + in + structure gs_3 = Array + end + local + open l4 + in + structure gs_4 = Char + structure gs_5 = CharArray + structure gs_6 = CharVector + structure gs_7 = FixedInt + structure gs_8 = General + structure gs_9 = Int + structure gs_10 = Int32 + structure gs_11 = Int64 + structure gs_12 = IntInf + structure gs_13 = LargeInt + structure gs_14 = LargeReal + structure gs_15 = LargeWord + structure gs_16 = OS + structure gs_17 = Position + structure gs_18 = Real + structure gs_19 = Real64 + structure gs_20 = RealArray + structure gs_21 = RealArraySlice + structure gs_22 = RealVector + structure gs_23 = RealVectorSlice + structure gs_24 = SMLofNJ + structure gs_25 = Socket + structure gs_26 = String + structure gs_27 = Substring + structure gs_28 = SysWord + structure gs_29 = Time + structure gs_30 = Word + structure gs_31 = Word32 + structure gs_32 = Word64 + structure gs_33 = Word8 + end + local + open l4 + in + structure gs_34 = List + end + local + open l4 + in + structure gs_35 = ArraySlice + end + local + structure Vector = gs_2 + dynamic-array-sig.sml + in + signature gs_36 = DYNAMIC_ARRAY + end + local + structure Array = gs_3 + structure ArraySlice = gs_35 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + signature DYNAMIC_ARRAY = gs_36 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_34 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Vector = gs_2 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + dynamic-array.sml + in + structure gs_37 = DynamicArray + end + local + mono-priorityq-sig.sml + in + signature gs_38 = MONO_PRIORITYQ + end + local + priority-sig.sml + in + signature gs_39 = PRIORITY + end + local + structure List = gs_34 + signature MONO_PRIORITYQ = gs_38 + signature PRIORITY = gs_39 + left-priorityq-fn.sml + in + functor gs_40 = LeftPriorityQFn + end + local + ord-key-sig.sml + in + signature gs_41 = ORD_KEY + end + local + signature ORD_KEY = gs_41 + ord-map-sig.sml + in + signature gs_42 = ORD_MAP + end + local + lib-base-sig.sml + in + signature gs_43 = LIB_BASE + end + local + signature LIB_BASE = gs_43 + lib-base.sml + in + structure gs_44 = LibBase + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure LibBase = gs_44 + signature ORD_MAP = gs_42 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + int-redblack-map.sml + in + structure gs_45 = IntRedBlackMap + end + local + uref-sig.sml + in + signature gs_46 = UREF + end + local + signature UREF = gs_46 + simple-uref.sml + in + structure gs_47 = SimpleURef + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure LibBase = gs_44 + signature ORD_MAP = gs_42 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + int-binary-map.sml + in + structure gs_48 = IntBinaryMap + end + local + list-xprod-sig.sml + in + signature gs_49 = LIST_XPROD + end + local + signature LIST_XPROD = gs_49 + list-xprod.sml + in + structure gs_50 = ListXProd + end + local + path-util-sig.sml + in + signature gs_51 = PATH_UTIL + end + local + open l4 + in + structure gs_52 = Unsafe + end + local + open l4 + in + structure gs_53 = Word8Vector + end + local + open l4 + in + structure gs_54 = Word8Array + end + local + open l4 + in + structure gs_55 = Byte + end + local + open l4 + in + signature gs_56 = MONO_ARRAY + end + local + signature MONO_ARRAY = gs_56 + bit-array-sig.sml + in + signature gs_57 = BIT_ARRAY + end + local + signature BIT_ARRAY = gs_57 + structure Byte = gs_55 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure LibBase = gs_44 + structure List = gs_34 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Unsafe = gs_52 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + structure Word8Array = gs_54 + structure Word8Vector = gs_53 + bit-array.sml + in + structure gs_58 = BitArray + end + local + signature ORD_KEY = gs_41 + ord-set-sig.sml + in + signature gs_59 = ORD_SET + end + local + structure LibBase = gs_44 + structure List = gs_34 + signature ORD_KEY = gs_41 + signature ORD_SET = gs_59 + redblack-set-fn.sml + in + functor gs_60 = RedBlackSetFn + end + local + mono-dynamic-array-sig.sml + in + signature gs_61 = MONO_DYNAMIC_ARRAY + end + local + signature MONO_ARRAY = gs_56 + bsearch-fn.sml + in + functor gs_62 = BSearchFn + end + local + open l4 + in + structure gs_63 = PackWord32Big + end + local + random-sig.sml + in + signature gs_64 = RANDOM + end + local + structure Array = gs_3 + structure Byte = gs_55 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure LibBase = gs_44 + structure OS = gs_16 + structure PackWord32Big = gs_63 + structure Position = gs_17 + signature RANDOM = gs_64 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + structure Word8Array = gs_54 + structure Word8Vector = gs_53 + random.sml + in + structure gs_65 = Random + end + local + structure Array = gs_3 + structure ArraySlice = gs_35 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Random = gs_65 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Unsafe = gs_52 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + real-order-stats.sml + in + structure gs_66 = RealOrderStats + end + local + atom-sig.sml + in + signature gs_67 = ATOM + end + local + open l4 + in + structure gs_68 = TextIO + end + local + structure TextIO = gs_68 + io-util-sig.sml + in + signature gs_69 = IO_UTIL + end + local + signature IO_UTIL = gs_69 + structure TextIO = gs_68 + io-util.sml + in + structure gs_70 = IOUtil + end + local + fifo-sig.sml + in + signature gs_71 = FIFO + end + local + hash-key-sig.sml + in + signature gs_72 = HASH_KEY + end + local + signature HASH_KEY = gs_72 + mono-hash-table-sig.sml + in + signature gs_73 = MONO_HASH_TABLE + end + local + structure Array = gs_3 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + hash-table-rep.sml + in + structure gs_74 = HashTableRep + end + local + structure Array = gs_3 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure HashTableRep = gs_74 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + signature MONO_HASH_TABLE = gs_73 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + int-hash-table.sml + in + structure gs_75 = IntHashTable + end + local + structure LibBase = gs_44 + structure List = gs_34 + signature ORD_KEY = gs_41 + signature ORD_SET = gs_59 + list-set-fn.sml + in + functor gs_76 = ListSetFn + end + local + open l4 + in + structure gs_77 = Option + end + local + getopt-sig.sml + in + signature gs_78 = GET_OPT + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + signature GET_OPT = gs_78 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_34 + structure OS = gs_16 + structure Option = gs_77 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure StringCvt = gs_0 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + getopt.sml + in + structure gs_79 = GetOpt + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure LibBase = gs_44 + structure List = gs_34 + signature ORD_SET = gs_59 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + int-redblack-set.sml + in + structure gs_80 = IntRedBlackSet + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + signature PATH_UTIL = gs_51 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + path-util.sml + in + structure gs_81 = PathUtil + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure LibBase = gs_44 + structure List = gs_34 + signature ORD_SET = gs_59 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + int-list-set.sml + in + structure gs_82 = IntListSet + end + local + structure LibBase = gs_44 + structure List = gs_34 + signature ORD_KEY = gs_41 + signature ORD_MAP = gs_42 + list-map-fn.sml + in + functor gs_83 = ListMapFn + end + local + splaytree-sig.sml + in + signature gs_84 = SPLAY_TREE + end + local + signature MONO_ARRAY = gs_56 + mono-array-sort-sig.sml + in + signature gs_85 = MONO_ARRAY_SORT + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + signature MONO_ARRAY = gs_56 + signature MONO_ARRAY_SORT = gs_85 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + array-qsort-fn.sml + in + functor gs_86 = ArrayQSortFn + end + local + signature HASH_KEY = gs_72 + mono-hash-set-sig.sml + in + signature gs_87 = MONO_HASH_SET + end + local + structure Array = gs_3 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + signature HASH_KEY = gs_72 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_34 + signature MONO_HASH_SET = gs_87 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + hash-set-fn.sml + in + functor gs_88 = HashSetFn + end + local + signature ORD_KEY = gs_41 + graph-scc-sig.sml + in + signature gs_89 = GRAPH_SCC + end + local + structure LibBase = gs_44 + signature ORD_KEY = gs_41 + signature ORD_MAP = gs_42 + redblack-map-fn.sml + in + functor gs_90 = RedBlackMapFn + end + local + signature GRAPH_SCC = gs_89 + structure List = gs_34 + signature ORD_KEY = gs_41 + functor RedBlackMapFn = gs_90 + graph-scc-fn.sml + in + functor gs_91 = GraphSCCFn + end + local + open l4 + in + structure gs_92 = Word8VectorSlice + end + local + structure Word8Vector = gs_53 + structure Word8VectorSlice = gs_92 + base64-sig.sml + in + signature gs_93 = BASE64 + end + local + interval-domain-sig.sml + in + signature gs_94 = INTERVAL_DOMAIN + end + local + signature INTERVAL_DOMAIN = gs_94 + interval-set-sig.sml + in + signature gs_95 = INTERVAL_SET + end + local + signature HASH_KEY = gs_72 + mono-hash2-table-sig.sml + in + signature gs_96 = MONO_HASH2_TABLE + end + local + open l4 + in + structure gs_97 = Bool + end + local + structure StringCvt = gs_0 + format-comb-sig.sml + in + signature gs_98 = FORMAT_COMB + end + local + structure Bool = gs_97 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + signature FORMAT_COMB = gs_98 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_34 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure StringCvt = gs_0 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + format-comb.sml + in + structure gs_99 = FormatComb + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + fnv-hash.sml + in + structure gs_100 = FNVHash + end + local + signature ATOM = gs_67 + structure Array = gs_3 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FNVHash = gs_100 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + atom.sml + in + structure gs_101 = Atom + end + local + structure LibBase = gs_44 + signature ORD_KEY = gs_41 + signature ORD_MAP = gs_42 + binary-map-fn.sml + in + functor gs_102 = BinaryMapFn + end + local + signature FIFO = gs_71 + structure List = gs_34 + fifo.sml + in + structure gs_103 = Fifo + end + local + structure StringCvt = gs_0 + parser-comb-sig.sml + in + signature gs_104 = PARSER_COMB + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + signature PARSER_COMB = gs_104 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure StringCvt = gs_0 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + parser-comb.sml + in + structure gs_105 = ParserComb + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure LibBase = gs_44 + structure List = gs_34 + signature ORD_SET = gs_59 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + int-binary-set.sml + in + structure gs_106 = IntBinarySet + end + local + structure Array = gs_3 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + signature HASH_KEY = gs_72 + structure HashTableRep = gs_74 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + signature MONO_HASH_TABLE = gs_73 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + hash-table-fn.sml + in + functor gs_107 = HashTableFn + end + local + array-sort-sig.sml + in + signature gs_108 = ARRAY_SORT + end + local + signature ARRAY_SORT = gs_108 + structure Array = gs_3 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Unsafe = gs_52 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + array-qsort.sml + in + structure gs_109 = ArrayQSort + end + local + structure Atom = gs_101 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + format-sig.sml + in + signature gs_110 = FORMAT + end + local + hash-table-sig.sml + in + signature gs_111 = HASH_TABLE + end + local + structure Atom = gs_101 + functor HashTableFn = gs_107 + atom-table.sml + in + structure gs_112 = AtomTable + end + local + char-map-sig.sml + in + signature gs_113 = CHAR_MAP + end + local + structure Atom = gs_101 + functor RedBlackSetFn = gs_60 + atom-redblack-set.sml + in + structure gs_114 = AtomRedBlackSet + end + local + structure AtomRedBlackSet = gs_114 + atom-set.sml + in + structure gs_115 = AtomSet + end + local + queue-sig.sml + in + signature gs_116 = QUEUE + end + local + structure Fifo = gs_103 + signature QUEUE = gs_116 + queue.sml + in + structure gs_117 = Queue + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure LibBase = gs_44 + signature ORD_MAP = gs_42 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + word-redblack-map.sml + in + structure gs_118 = WordRedBlackMap + end + local + structure Array = gs_3 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + signature HASH_TABLE = gs_111 + structure HashTableRep = gs_74 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + hash-table.sml + in + structure gs_119 = HashTable + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure LibBase = gs_44 + structure List = gs_34 + signature ORD_MAP = gs_42 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + int-list-map.sml + in + structure gs_120 = IntListMap + end + local + signature SPLAY_TREE = gs_84 + splaytree.sml + in + structure gs_121 = SplayTree + end + local + structure LibBase = gs_44 + structure List = gs_34 + signature ORD_KEY = gs_41 + signature ORD_SET = gs_59 + structure SplayTree = gs_121 + splay-set-fn.sml + in + functor gs_122 = SplaySetFn + end + local + open l4 + in + structure gs_123 = Word8ArraySlice + end + local + signature BASE64 = gs_93 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Unsafe = gs_52 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + structure Word8Array = gs_54 + structure Word8ArraySlice = gs_123 + structure Word8Vector = gs_53 + structure Word8VectorSlice = gs_92 + base64.sml + in + structure gs_124 = Base64 + end + local + plist-sig.sml + in + signature gs_125 = PROP_LIST + end + local + structure List = gs_34 + signature PROP_LIST = gs_125 + plist.sml + in + structure gs_126 = PropList + end + local + structure Atom = gs_101 + structure AtomTable = gs_112 + structure List = gs_34 + keyword-fn.sml + in + functor gs_127 = KeywordFn + end + local + open l4 + in + structure gs_128 = Math + end + local + structure Array = gs_3 + structure ArraySlice = gs_35 + structure Math = gs_128 + structure RealOrderStats = gs_66 + structure Unsafe = gs_52 + univariate-stats.sml + in + structure gs_129 = UnivariateStats + end + local + structure LibBase = gs_44 + structure List = gs_34 + signature ORD_KEY = gs_41 + signature ORD_SET = gs_59 + binary-set-fn.sml + in + functor gs_130 = BinarySetFn + end + local + structure Atom = gs_101 + functor BinarySetFn = gs_130 + atom-binary-set.sml + in + structure gs_131 = AtomBinarySet + end + local + structure Atom = gs_101 + functor BinaryMapFn = gs_102 + atom-binary-map.sml + in + structure gs_132 = AtomBinaryMap + end + local + target64-prime-sizes.sml + in + structure gs_133 = PrimeSizes + end + local + structure Atom = gs_101 + functor RedBlackMapFn = gs_90 + atom-redblack-map.sml + in + structure gs_134 = AtomRedBlackMap + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + rand-sig.sml + in + signature gs_135 = RAND + end + local + structure Array = gs_3 + signature CHAR_MAP = gs_113 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_34 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Unsafe = gs_52 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + char-map.sml + in + structure gs_136 = CharMap + end + local + structure Array = gs_3 + signature MONO_ARRAY = gs_56 + structure Vector = gs_2 + mono-array-fn.sml + in + functor gs_137 = MonoArrayFn + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure StringCvt = gs_0 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + real-format.sml + in + structure gs_138 = RealFormat + end + local + structure Atom = gs_101 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure StringCvt = gs_0 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + fmt-fields.sml + in + structure gs_139 = FmtFields + end + local + structure Atom = gs_101 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + signature FORMAT = gs_110 + structure FixedInt = gs_7 + structure FmtFields = gs_139 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealFormat = gs_138 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure StringCvt = gs_0 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + format.sml + in + structure gs_140 = Format + end + local + structure Atom = gs_101 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure StringCvt = gs_0 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + scan-sig.sml + in + signature gs_141 = SCAN + end + local + structure Bool = gs_97 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure FmtFields = gs_139 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + signature SCAN = gs_141 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure StringCvt = gs_0 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + structure Word8Array = gs_54 + scan.sml + in + structure gs_142 = Scan + end + local + structure AtomRedBlackMap = gs_134 + atom-map.sml + in + structure gs_143 = AtomMap + end + local + signature INTERVAL_DOMAIN = gs_94 + signature INTERVAL_SET = gs_95 + structure List = gs_34 + interval-set-fn.sml + in + functor gs_144 = IntervalSetFn + end + local + structure Array = gs_3 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + signature HASH_KEY = gs_72 + structure HashTableRep = gs_74 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + signature MONO_HASH2_TABLE = gs_96 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + hash2-table-fn.sml + in + functor gs_145 = Hash2TableFn + end + local + structure LibBase = gs_44 + signature ORD_KEY = gs_41 + signature ORD_MAP = gs_42 + structure SplayTree = gs_121 + splay-map-fn.sml + in + functor gs_146 = SplayMapFn + end + local + structure Array = gs_3 + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure HashTableRep = gs_74 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + signature MONO_HASH_TABLE = gs_73 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + word-hash-table.sml + in + structure gs_147 = WordHashTable + end + local + structure StringCvt = gs_0 + utf8-sig.sml + in + signature gs_148 = UTF8 + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_34 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure StringCvt = gs_0 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + signature UTF8 = gs_148 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + utf8.sml + in + structure gs_149 = UTF8 + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure LibBase = gs_44 + structure OS = gs_16 + structure Position = gs_17 + signature RAND = gs_135 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + rand.sml + in + structure gs_150 = Rand + end + local + structure FNVHash = gs_100 + hash-string.sml + in + structure gs_151 = HashString + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + signature LIST_FORMAT = gs_1 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure StringCvt = gs_0 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + list-format.sml + in + structure gs_152 = ListFormat + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_34 + signature MONO_ARRAY = gs_56 + signature MONO_DYNAMIC_ARRAY = gs_61 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + dynamic-array-fn.sml + in + functor gs_153 = DynamicArrayFn + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure LibBase = gs_44 + structure List = gs_34 + signature ORD_SET = gs_59 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + word-redblack-set.sml + in + structure gs_154 = WordRedBlackSet + end + local + listsort-sig.sml + in + signature gs_155 = LIST_SORT + end + local + signature LIST_SORT = gs_155 + list-mergesort.sml + in + structure gs_156 = ListMergeSort + end + local + signature UREF = gs_46 + uref.sml + in + structure gs_157 = URef + end + local + structure Char = gs_4 + structure CharArray = gs_5 + structure CharVector = gs_6 + structure FixedInt = gs_7 + structure General = gs_8 + structure Int = gs_9 + structure Int32 = gs_10 + structure Int64 = gs_11 + structure IntInf = gs_12 + structure LargeInt = gs_13 + structure LargeReal = gs_14 + structure LargeWord = gs_15 + structure List = gs_34 + structure OS = gs_16 + structure Position = gs_17 + structure Real = gs_18 + structure Real64 = gs_19 + structure RealArray = gs_20 + structure RealArraySlice = gs_21 + structure RealVector = gs_22 + structure RealVectorSlice = gs_23 + structure SMLofNJ = gs_24 + structure Socket = gs_25 + structure String = gs_26 + structure Substring = gs_27 + structure SysWord = gs_28 + structure TextIO = gs_68 + structure Time = gs_29 + structure Word = gs_30 + structure Word32 = gs_31 + structure Word64 = gs_32 + structure Word8 = gs_33 + ansi-term.sml + in + structure gs_158 = ANSITerm + end +in + structure ANSITerm = gs_158 + signature ARRAY_SORT = gs_108 + signature ATOM = gs_67 + structure ArrayQSort = gs_109 + functor ArrayQSortFn = gs_86 + structure Atom = gs_101 + structure AtomBinaryMap = gs_132 + structure AtomBinarySet = gs_131 + structure AtomMap = gs_143 + structure AtomRedBlackMap = gs_134 + structure AtomRedBlackSet = gs_114 + structure AtomSet = gs_115 + structure AtomTable = gs_112 + signature BASE64 = gs_93 + signature BIT_ARRAY = gs_57 + functor BSearchFn = gs_62 + structure Base64 = gs_124 + functor BinaryMapFn = gs_102 + functor BinarySetFn = gs_130 + structure BitArray = gs_58 + signature CHAR_MAP = gs_113 + structure CharMap = gs_136 + signature DYNAMIC_ARRAY = gs_36 + structure DynamicArray = gs_37 + functor DynamicArrayFn = gs_153 + signature FIFO = gs_71 + structure FNVHash = gs_100 + signature FORMAT = gs_110 + signature FORMAT_COMB = gs_98 + structure Fifo = gs_103 + structure Format = gs_140 + structure FormatComb = gs_99 + signature GET_OPT = gs_78 + signature GRAPH_SCC = gs_89 + structure GetOpt = gs_79 + functor GraphSCCFn = gs_91 + signature HASH_KEY = gs_72 + signature HASH_TABLE = gs_111 + functor Hash2TableFn = gs_145 + functor HashSetFn = gs_88 + structure HashString = gs_151 + structure HashTable = gs_119 + functor HashTableFn = gs_107 + signature INTERVAL_DOMAIN = gs_94 + signature INTERVAL_SET = gs_95 + structure IOUtil = gs_70 + signature IO_UTIL = gs_69 + structure IntBinaryMap = gs_48 + structure IntBinarySet = gs_106 + structure IntHashTable = gs_75 + structure IntListMap = gs_120 + structure IntListSet = gs_82 + structure IntRedBlackMap = gs_45 + structure IntRedBlackSet = gs_80 + functor IntervalSetFn = gs_144 + functor KeywordFn = gs_127 + signature LIB_BASE = gs_43 + signature LIST_FORMAT = gs_1 + signature LIST_SORT = gs_155 + signature LIST_XPROD = gs_49 + functor LeftPriorityQFn = gs_40 + structure LibBase = gs_44 + structure ListFormat = gs_152 + functor ListMapFn = gs_83 + structure ListMergeSort = gs_156 + functor ListSetFn = gs_76 + structure ListXProd = gs_50 + signature MONO_ARRAY_SORT = gs_85 + signature MONO_DYNAMIC_ARRAY = gs_61 + signature MONO_HASH2_TABLE = gs_96 + signature MONO_HASH_SET = gs_87 + signature MONO_HASH_TABLE = gs_73 + signature MONO_PRIORITYQ = gs_38 + functor MonoArrayFn = gs_137 + signature ORD_KEY = gs_41 + signature ORD_MAP = gs_42 + signature ORD_SET = gs_59 + signature PARSER_COMB = gs_104 + signature PATH_UTIL = gs_51 + signature PRIORITY = gs_39 + signature PROP_LIST = gs_125 + structure ParserComb = gs_105 + structure PathUtil = gs_81 + structure PrimeSizes = gs_133 + structure PropList = gs_126 + signature QUEUE = gs_116 + structure Queue = gs_117 + signature RAND = gs_135 + signature RANDOM = gs_64 + structure Rand = gs_150 + structure Random = gs_65 + structure RealOrderStats = gs_66 + functor RedBlackMapFn = gs_90 + functor RedBlackSetFn = gs_60 + signature SCAN = gs_141 + signature SPLAY_TREE = gs_84 + structure Scan = gs_142 + structure SimpleURef = gs_47 + functor SplayMapFn = gs_146 + functor SplaySetFn = gs_122 + signature UREF = gs_46 + structure URef = gs_157 + signature UTF8 = gs_148 + structure UTF8 = gs_149 + structure UnivariateStats = gs_129 + structure WordHashTable = gs_147 + structure WordRedBlackMap = gs_118 + structure WordRedBlackSet = gs_154 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/splay-map-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/splay-map-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/splay-map-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/splay-map-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,460 @@ +(* splay-map-fn.sml + * + * COPYRIGHT (c) 2012 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Functor implementing dictionaries using splay trees. + * + *) + +functor SplayMapFn (K : ORD_KEY) :> ORD_MAP where type Key.ord_key = K.ord_key = + struct + structure Key = K + open SplayTree + + datatype 'a map + = EMPTY + | MAP of { + root : (K.ord_key * 'a) splay ref, + nobj : int + } + + fun cmpf k (k', _) = K.compare(k',k) + + val empty = EMPTY + + fun isEmpty EMPTY = true + | isEmpty _ = false + + (* return the first item in the map (or NONE if it is empty) *) + fun first EMPTY = NONE + | first (MAP{root, ...}) = let + fun f (SplayObj{value=(_, value), left=SplayNil, ...}) = SOME value + | f (SplayObj{left, ...}) = f left + | f SplayNil = raise Fail "SplayMapFn.first" + in + f (!root) + end + + (* return the first item in the map and its key (or NONE if it is empty) *) + fun firsti EMPTY = NONE + | firsti (MAP{root, ...}) = let + fun f (SplayObj{value=(key, value), left=SplayNil, ...}) = SOME(key, value) + | f (SplayObj{left, ...}) = f left + | f SplayNil = raise Fail "SplayMapFn.firsti" + in + f (!root) + end + + fun singleton (key, v) = + MAP{nobj=1,root=ref(SplayObj{value=(key,v),left=SplayNil,right=SplayNil})} + + (* Insert an item. *) + fun insert (EMPTY,key,v) = + MAP{nobj=1,root=ref(SplayObj{value=(key,v),left=SplayNil,right=SplayNil})} + | insert (MAP{root,nobj},key,v) = + case splay (cmpf key, !root) of + (EQUAL,SplayObj{value,left,right}) => + MAP{nobj=nobj,root=ref(SplayObj{value=(key,v),left=left,right=right})} + | (LESS,SplayObj{value,left,right}) => + MAP{ + nobj=nobj+1, + root=ref(SplayObj{value=(key,v),left=SplayObj{value=value,left=left,right=SplayNil},right=right}) + } + | (GREATER,SplayObj{value,left,right}) => + MAP{ + nobj=nobj+1, + root=ref(SplayObj{ + value=(key,v), + left=left, + right=SplayObj{value=value,left=SplayNil,right=right} + }) + } + | (_,SplayNil) => raise LibBase.Impossible "SplayMapFn.insert SplayNil" + fun insert' ((k, x), m) = insert(m, k, x) + + fun insertWithi comb (m, key, v) = let + fun insert EMPTY = + MAP{nobj=1,root=ref(SplayObj{value=(key,v),left=SplayNil,right=SplayNil})} + | insert (MAP{root,nobj}) = (case splay (cmpf key, !root) + of (EQUAL, SplayObj{value,left,right}) => let + val v' = (key, comb(key, #2 value, v)) + in + MAP{ + nobj=nobj, + root=ref(SplayObj{value=v', left=left, right=right}) + } + end + | (LESS,SplayObj{value,left,right}) => MAP{ + nobj=nobj+1, + root=ref(SplayObj{value=(key,v),left=SplayObj{value=value,left=left,right=SplayNil},right=right}) + } + | (GREATER,SplayObj{value,left,right}) => MAP{ + nobj=nobj+1, + root=ref(SplayObj{ + value=(key,v), + left=left, + right=SplayObj{value=value,left=SplayNil,right=right} + }) + } + | (_,SplayNil) => raise LibBase.Impossible "SplayMapFn.insert SplayNil" + (* end case *)) + in + insert m + end + fun insertWith comb = insertWithi (fn (_, x1, x2) => comb(x1, x2)) + + fun inDomain (EMPTY, _) = false + | inDomain (MAP{root,nobj}, key) = (case splay (cmpf key, !root) + of (EQUAL, r as SplayObj{value,...}) => (root := r; true) + | (_, r) => (root := r; false) + (* end case *)) + + (* Look for an item, return NONE if the item doesn't exist *) + fun find (EMPTY,_) = NONE + | find (MAP{root,nobj},key) = (case splay (cmpf key, !root) + of (EQUAL, r as SplayObj{value,...}) => (root := r; SOME(#2 value)) + | (_, r) => (root := r; NONE) + (* end case *)) + + (* Look for an item, raise NotFound if the item doesn't exist *) + fun lookup (EMPTY,_) = raise LibBase.NotFound + | lookup (MAP{root,nobj},key) = (case splay (cmpf key, !root) + of (EQUAL, r as SplayObj{value,...}) => (root := r; #2 value) + | (_, r) => (root := r; raise LibBase.NotFound) + (* end case *)) + + (* Remove an item. + * Raise LibBase.NotFound if not found + *) + fun remove (EMPTY, _) = raise LibBase.NotFound + | remove (MAP{root,nobj}, key) = (case (splay (cmpf key, !root)) + of (EQUAL, SplayObj{value, left, right}) => + if nobj = 1 + then (EMPTY, #2 value) + else (MAP{root=ref(join(left,right)),nobj=nobj-1}, #2 value) + | (_,r) => (root := r; raise LibBase.NotFound) + (* end case *)) + + (* Return the number of items in the table *) + fun numItems EMPTY = 0 + | numItems (MAP{nobj,...}) = nobj + + (* Return a list of the items (and their keys) in the dictionary *) + fun listItems EMPTY = [] + | listItems (MAP{root,...}) = let + fun apply (SplayNil, l) = l + | apply (SplayObj{value=(_, v), left, right}, l) = + apply(left, v::(apply (right,l))) + in + apply (!root, []) + end + fun listItemsi EMPTY = [] + | listItemsi (MAP{root,...}) = let + fun apply (SplayNil,l) = l + | apply (SplayObj{value,left,right},l) = + apply(left, value::(apply (right,l))) + in + apply (!root,[]) + end + + fun listKeys EMPTY = [] + | listKeys (MAP{root,...}) = let + fun apply (SplayNil, l) = l + | apply (SplayObj{value=(key, _),left,right},l) = + apply(left, key::(apply (right,l))) + in + apply (!root, []) + end + + local + fun next ((t as SplayObj{right, ...})::rest) = (t, left(right, rest)) + | next _ = (SplayNil, []) + and left (SplayNil, rest) = rest + | left (t as SplayObj{left=l, ...}, rest) = left(l, t::rest) + in + fun collate cmpRng (EMPTY, EMPTY) = EQUAL + | collate cmpRng (EMPTY, _) = LESS + | collate cmpRng (_, EMPTY) = GREATER + | collate cmpRng (MAP{root=s1, ...}, MAP{root=s2, ...}) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((SplayNil, _), (SplayNil, _)) => EQUAL + | ((SplayNil, _), _) => LESS + | (_, (SplayNil, _)) => GREATER + | ((SplayObj{value=(x1, y1), ...}, r1), + (SplayObj{value=(x2, y2), ...}, r2) + ) => ( + case Key.compare(x1, x2) + of EQUAL => (case cmpRng (y1, y2) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + | order => order + (* end case *)) + (* end case *)) + in + cmp (left(!s1, []), left(!s2, [])) + end + end (* local *) + + (* Apply a function to the entries of the dictionary *) + fun appi af EMPTY = () + | appi af (MAP{root,...}) = + let fun apply SplayNil = () + | apply (SplayObj{value,left,right}) = + (apply left; af value; apply right) + in + apply (!root) + end + + fun app af EMPTY = () + | app af (MAP{root,...}) = + let fun apply SplayNil = () + | apply (SplayObj{value=(_,value),left,right}) = + (apply left; af value; apply right) + in + apply (!root) + end +(* + fun revapp af (MAP{root,...}) = + let fun apply SplayNil = () + | apply (SplayObj{value,left,right}) = + (apply right; af value; apply left) + in + apply (!root) + end +*) + + (* Fold function *) + fun foldri (abf : K.ord_key * 'a * 'b -> 'b) b EMPTY = b + | foldri (abf : K.ord_key * 'a * 'b -> 'b) b (MAP{root,...}) = + let fun apply (SplayNil : (K.ord_key * 'a) splay, b) = b + | apply (SplayObj{value,left,right},b) = + apply(left,abf(#1 value,#2 value,apply(right,b))) + in + apply (!root,b) + end + + fun foldr (abf : 'a * 'b -> 'b) b EMPTY = b + | foldr (abf : 'a * 'b -> 'b) b (MAP{root,...}) = + let fun apply (SplayNil : (K.ord_key * 'a) splay, b) = b + | apply (SplayObj{value=(_,value),left,right},b) = + apply(left,abf(value,apply(right,b))) + in + apply (!root,b) + end + + fun foldli (abf : K.ord_key * 'a * 'b -> 'b) b EMPTY = b + | foldli (abf : K.ord_key * 'a * 'b -> 'b) b (MAP{root,...}) = + let fun apply (SplayNil : (K.ord_key * 'a) splay, b) = b + | apply (SplayObj{value,left,right},b) = + apply(right,abf(#1 value,#2 value,apply(left,b))) + in + apply (!root,b) + end + + fun foldl (abf : 'a * 'b -> 'b) b EMPTY = b + | foldl (abf : 'a * 'b -> 'b) b (MAP{root,...}) = + let fun apply (SplayNil : (K.ord_key * 'a) splay, b) = b + | apply (SplayObj{value=(_,value),left,right},b) = + apply(right,abf(value,apply(left,b))) + in + apply (!root,b) + end + + (* Map a table to a new table that has the same keys*) + fun mapi (af : K.ord_key * 'a -> 'b) EMPTY = EMPTY + | mapi (af : K.ord_key * 'a -> 'b) (MAP{root,nobj}) = + let fun ap (SplayNil : (K.ord_key * 'a) splay) = SplayNil + | ap (SplayObj{value,left,right}) = let + val left' = ap left + val value' = (#1 value, af value) + in + SplayObj{value = value', left = left', right = ap right} + end + in + MAP{root = ref(ap (!root)), nobj = nobj} + end + + fun map (af : 'a -> 'b) EMPTY = EMPTY + | map (af : 'a -> 'b) (MAP{root,nobj}) = + let fun ap (SplayNil : (K.ord_key * 'a) splay) = SplayNil + | ap (SplayObj{value,left,right}) = let + val left' = ap left + val value' = (#1 value, af (#2 value)) + in + SplayObj{value = value', left = left', right = ap right} + end + in + MAP{root = ref(ap (!root)), nobj = nobj} + end + +(* the following are generic implementations of the unionWith, intersectWith, + * and mergeWith operetions. These should be specialized for the internal + * representations at some point. + *) + fun unionWith f (m1, m2) = let + fun ins f (key, x, m) = (case find(m, key) + of NONE => insert(m, key, x) + | (SOME x') => insert(m, key, f(x, x')) + (* end case *)) + in + if (numItems m1 > numItems m2) + then foldli (ins (fn (a, b) => f(b, a))) m1 m2 + else foldli (ins f) m2 m1 + end + fun unionWithi f (m1, m2) = let + fun ins f (key, x, m) = (case find(m, key) + of NONE => insert(m, key, x) + | (SOME x') => insert(m, key, f(key, x, x')) + (* end case *)) + in + if (numItems m1 > numItems m2) + then foldli (ins (fn (k, a, b) => f(k, b, a))) m1 m2 + else foldli (ins f) m2 m1 + end + + fun intersectWith f (m1, m2) = let + (* iterate over the elements of m1, checking for membership in m2 *) + fun intersect f (m1, m2) = let + fun ins (key, x, m) = (case find(m2, key) + of NONE => m + | (SOME x') => insert(m, key, f(x, x')) + (* end case *)) + in + foldli ins empty m1 + end + in + if (numItems m1 > numItems m2) + then intersect f (m1, m2) + else intersect (fn (a, b) => f(b, a)) (m2, m1) + end + + fun intersectWithi f (m1, m2) = let + (* iterate over the elements of m1, checking for membership in m2 *) + fun intersect f (m1, m2) = let + fun ins (key, x, m) = (case find(m2, key) + of NONE => m + | (SOME x') => insert(m, key, f(key, x, x')) + (* end case *)) + in + foldli ins empty m1 + end + in + if (numItems m1 > numItems m2) + then intersect f (m1, m2) + else intersect (fn (k, a, b) => f(k, b, a)) (m2, m1) + end + + fun mergeWith f (m1, m2) = let + fun merge ([], [], m) = m + | merge ((k1, x1)::r1, [], m) = mergef (k1, SOME x1, NONE, r1, [], m) + | merge ([], (k2, x2)::r2, m) = mergef (k2, NONE, SOME x2, [], r2, m) + | merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), m) = ( + case Key.compare (k1, k2) + of LESS => mergef (k1, SOME x1, NONE, r1, m2, m) + | EQUAL => mergef (k1, SOME x1, SOME x2, r1, r2, m) + | GREATER => mergef (k2, NONE, SOME x2, m1, r2, m) + (* end case *)) + and mergef (k, x1, x2, r1, r2, m) = (case f (x1, x2) + of NONE => merge (r1, r2, m) + | SOME y => merge (r1, r2, insert(m, k, y)) + (* end case *)) + in + merge (listItemsi m1, listItemsi m2, empty) + end + + fun mergeWithi f (m1, m2) = let + fun merge ([], [], m) = m + | merge ((k1, x1)::r1, [], m) = mergef (k1, SOME x1, NONE, r1, [], m) + | merge ([], (k2, x2)::r2, m) = mergef (k2, NONE, SOME x2, [], r2, m) + | merge (m1 as ((k1, x1)::r1), m2 as ((k2, x2)::r2), m) = ( + case Key.compare (k1, k2) + of LESS => mergef (k1, SOME x1, NONE, r1, m2, m) + | EQUAL => mergef (k1, SOME x1, SOME x2, r1, r2, m) + | GREATER => mergef (k2, NONE, SOME x2, m1, r2, m) + (* end case *)) + and mergef (k, x1, x2, r1, r2, m) = (case f (k, x1, x2) + of NONE => merge (r1, r2, m) + | SOME y => merge (r1, r2, insert(m, k, y)) + (* end case *)) + in + merge (listItemsi m1, listItemsi m2, empty) + end + + (* this is a generic implementation of mapPartial. It should + * be specialized to the data-structure at some point. + *) + fun mapPartial f m = let + fun g (key, item, m) = (case f item + of NONE => m + | (SOME item') => insert(m, key, item') + (* end case *)) + in + foldli g empty m + end + fun mapPartiali f m = let + fun g (key, item, m) = (case f(key, item) + of NONE => m + | (SOME item') => insert(m, key, item') + (* end case *)) + in + foldli g empty m + end + + (* this is a generic implementation of filter. It should + * be specialized to the data-structure at some point. + *) + fun filter predFn m = let + fun f (key, item, m) = if predFn item + then insert(m, key, item) + else m + in + foldli f empty m + end + fun filteri predFn m = let + fun f (key, item, m) = if predFn(key, item) + then insert(m, key, item) + else m + in + foldli f empty m + end + + (* check the elements of a map with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + * Elements are checked in key order. + *) + fun exists pred = let + fun exists' SplayNil = false + | exists' (SplayObj{value=(_, x), left, right}) = + exists' left orelse pred x orelse exists' right + in + fn EMPTY => false | (MAP{root, ...}) => exists' (!root) + end + fun existsi pred = let + fun exists' SplayNil = false + | exists' (SplayObj{value, left, right}) = + exists' left orelse pred value orelse exists' right + in + fn EMPTY => false | (MAP{root, ...}) => exists' (!root) + end + + (* check the elements of a map with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. Elements + * are checked in key order. + *) + fun all pred = let + fun all' SplayNil = true + | all' (SplayObj{value=(_, x), left, right}) = + all' left andalso pred x andalso all' right + in + fn EMPTY => true | (MAP{root, ...}) => all' (!root) + end + fun alli pred = let + fun all' SplayNil = true + | all' (SplayObj{value, left, right}) = all' left andalso pred value andalso all' right + in + fn EMPTY => true | (MAP{root, ...}) => all' (!root) + end + + end (* SplayDictFn *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/splay-set-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/splay-set-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/splay-set-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/splay-set-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,406 @@ +(* splay-set-fn.sml + * + * COPYRIGHT (c) 2015 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Functor implementing ordered sets using splay trees. + * + *) + +functor SplaySetFn (K : ORD_KEY) :> ORD_SET where type Key.ord_key = K.ord_key = + struct + structure Key = K + open SplayTree + + type item = K.ord_key + + datatype set + = EMPTY + | SET of { + root : item splay ref, + nobj : int + } + + fun cmpf k = fn k' => K.compare(k',k) + + val empty = EMPTY + + fun singleton v = SET{root = ref(SplayObj{value=v,left=SplayNil,right=SplayNil}),nobj=1} + + (* Primitive insertion. + *) + fun insert (v,(nobj,root)) = + case splay (cmpf v, root) of + (EQUAL,SplayObj{value,left,right}) => + (nobj,SplayObj{value=v,left=left,right=right}) + | (LESS,SplayObj{value,left,right}) => + (nobj+1, + SplayObj{ + value=v, + left=SplayObj{value=value,left=left,right=SplayNil}, + right=right}) + | (GREATER,SplayObj{value,left,right}) => + (nobj+1, + SplayObj{ + value=v, + left=left, + right=SplayObj{value=value,left=SplayNil,right=right}}) + | (_,SplayNil) => (1,SplayObj{value=v,left=SplayNil,right=SplayNil}) + + (* Add an item. + *) + fun add (EMPTY,v) = singleton v + | add (SET{root,nobj},v) = let + val (cnt,t) = insert(v,(nobj,!root)) + in + SET{nobj=cnt,root=ref t} + end + fun add' (s, x) = add(x, s) + + (* Insert a list of items. + *) + fun addList (set,[]) = set + | addList (set,l) = let + val arg = case set of EMPTY => (0,SplayNil) + | SET{root,nobj} => (nobj,!root) + val (cnt,t) = List.foldl insert arg l + in + SET{nobj=cnt,root=ref t} + end + + fun fromList l = addList (empty, l) + + (* Remove an item. + * Raise LibBase.NotFound if not found + *) + fun delete (EMPTY,_) = raise LibBase.NotFound + | delete (SET{root,nobj},key) = + case splay (cmpf key, !root) of + (EQUAL,SplayObj{value,left,right}) => + if nobj = 1 then EMPTY + else SET{root=ref(join(left,right)),nobj=nobj-1} + | (_,r) => (root := r; raise LibBase.NotFound) + + (* return true if the item is in the set *) + fun member (EMPTY, key) = false + | member (SET{root,nobj}, key) = (case splay (cmpf key, !root) + of (EQUAL, r) => (root := r; true) + | (_, r) => (root := r; false) + (* end case *)) + + fun isEmpty EMPTY = true + | isEmpty _ = false + + fun minItem EMPTY = raise Empty + | minItem (SET{root, ...}) = let + fun min (SplayObj{value, left=SplayNil, ...}) = value + | min (SplayObj{left, ...}) = min left + | min SplayNil = raise Fail "impossible" + in + min (!root) + end + + fun maxItem EMPTY = raise Empty + | maxItem (SET{root, ...}) = let + fun max (SplayObj{value, right=SplayNil, ...}) = value + | max (SplayObj{right, ...}) = max right + | max SplayNil = raise Fail "impossible" + in + max (!root) + end + + local + fun member (x,tree) = let + fun mbr SplayNil = false + | mbr (SplayObj{value,left,right}) = + case K.compare(x,value) of + LESS => mbr left + | GREATER => mbr right + | _ => true + in mbr tree end + + (* true if every item in t is in t' *) + fun treeIn (t,t') = let + fun isIn SplayNil = true + | isIn (SplayObj{value,left=SplayNil,right=SplayNil}) = + member(value, t') + | isIn (SplayObj{value,left,right=SplayNil}) = + member(value, t') andalso isIn left + | isIn (SplayObj{value,left=SplayNil,right}) = + member(value, t') andalso isIn right + | isIn (SplayObj{value,left,right}) = + member(value, t') andalso isIn left andalso isIn right + in + isIn t + end + in + fun equal (SET{root=rt,nobj=n},SET{root=rt',nobj=n'}) = + (n=n') andalso treeIn (!rt,!rt') + | equal (EMPTY, EMPTY) = true + | equal _ = false + + fun isSubset (SET{root=rt,nobj=n},SET{root=rt',nobj=n'}) = + (n<=n') andalso treeIn (!rt,!rt') + | isSubset (EMPTY,_) = true + | isSubset _ = false + end + + local + fun next ((t as SplayObj{right, ...})::rest) = (t, left(right, rest)) + | next _ = (SplayNil, []) + and left (SplayNil, rest) = rest + | left (t as SplayObj{left=l, ...}, rest) = left(l, t::rest) + in + fun compare (EMPTY, EMPTY) = EQUAL + | compare (EMPTY, _) = LESS + | compare (_, EMPTY) = GREATER + | compare (SET{root=s1, ...}, SET{root=s2, ...}) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((SplayNil, _), (SplayNil, _)) => EQUAL + | ((SplayNil, _), _) => LESS + | (_, (SplayNil, _)) => GREATER + | ((SplayObj{value=e1, ...}, r1), (SplayObj{value=e2, ...}, r2)) => ( + case Key.compare(e1, e2) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + (* end case *)) + in + cmp (left(!s1, []), left(!s2, [])) + end + + fun disjoint (EMPTY, _) = true + | disjoint (_, EMPTY) = true + | disjoint (SET{root=rt, ...}, SET{root=rt', ...}) = let + fun walk (t1, t2) = (case (next t1, next t2) + of ((SplayNil, _), _) => true + | (_, (SplayNil, _)) => true + | ((SplayObj{value=e1, ...}, r1), (SplayObj{value=e2, ...}, r2)) => ( + case Key.compare(e1, e2) + of LESS => walk(r1, t2) + | EQUAL => false + | GREATER => walk(t1, r2) + (* end case *)) + (* end case *)) + in + walk (left(!rt, []), left(!rt', [])) + end + end (* local *) + + (* Return the number of items in the table *) + fun numItems EMPTY = 0 + | numItems (SET{nobj,...}) = nobj + + fun toList EMPTY = [] + | toList (SET{root,...}) = + let fun apply (SplayNil,l) = l + | apply (SplayObj{value,left,right},l) = + apply(left, value::(apply (right,l))) + in + apply (!root,[]) + end + + fun split (value,s) = + case splay(cmpf value, s) of + (EQUAL,SplayObj{value,left,right}) => (SOME value, left, right) + | (LESS,SplayObj{value,left,right}) => (NONE, SplayObj{value=value,left=left,right=SplayNil},right) + | (GREATER,SplayObj{value,left,right}) => (NONE, left, SplayObj{value=value,right=right,left=SplayNil}) + | (_,SplayNil) => (NONE, SplayNil, SplayNil) + + fun intersection (EMPTY,_) = EMPTY + | intersection (_,EMPTY) = EMPTY + | intersection (SET{root,...},SET{root=root',...}) = + let fun inter(SplayNil,_) = (SplayNil,0) + | inter(_,SplayNil) = (SplayNil,0) + | inter(s, SplayObj{value,left,right}) = + case split(value,s) of + (SOME v, l, r) => + let val (l',lcnt) = inter(l,left) + val (r',rcnt) = inter(r,right) + in + (SplayObj{value=v,left=l',right=r'},lcnt+rcnt+1) + end + | (_,l,r) => + let val (l',lcnt) = inter(l,left) + val (r',rcnt) = inter(r,right) + in + (join(l',r'),lcnt+rcnt) + end + in + case inter(!root,!root') of + (_,0) => EMPTY + | (root,cnt) => SET{root = ref root, nobj = cnt} + end + + fun count st = + let fun cnt(SplayNil,n) = n + | cnt(SplayObj{left,right,...},n) = cnt(left,cnt(right,n+1)) + in + cnt(st,0) + end + + fun difference (EMPTY,_) = EMPTY + | difference (s,EMPTY) = s + | difference (SET{root,...}, SET{root=root',...}) = + let fun diff(SplayNil,_) = (SplayNil,0) + | diff(s,SplayNil) = (s, count s) + | diff(s,SplayObj{value,right,left}) = + let val (_,l,r) = split(value,s) + val (l',lcnt) = diff(l,left) + val (r',rcnt) = diff(r,right) + in + (join(l',r'),lcnt+rcnt) + end + in + case diff(!root,!root') of + (_,0) => EMPTY + | (root,cnt) => SET{root = ref root, nobj = cnt} + end + + fun union (EMPTY,s) = s + | union (s,EMPTY) = s + | union (SET{root,...}, SET{root=root',...}) = + let fun uni(SplayNil,s) = (s,count s) + | uni(s,SplayNil) = (s, count s) + | uni(s,SplayObj{value,right,left}) = + let val (_,l,r) = split(value,s) + val (l',lcnt) = uni(l,left) + val (r',rcnt) = uni(r,right) + in + (SplayObj{value=value,right=r',left=l'},lcnt+rcnt+1) + end + val (root,cnt) = uni(!root,!root') + in + SET{root = ref root, nobj = cnt} + end + + fun subtract (s, item) = difference (s, singleton item) + fun subtract' (item, s) = subtract (s, item) + + fun subtractList (l, items) = let + val items' = List.foldl (fn (x, set) => add(set, x)) EMPTY items + in + difference (l, items') + end + + fun map f EMPTY = EMPTY + | map f (SET{root, ...}) = let + fun mapf (acc, SplayNil) = acc + | mapf (acc, SplayObj{value,left,right}) = + mapf (add (mapf (acc, left), f value), right) + in + mapf (EMPTY, !root) + end + + fun mapPartial f EMPTY = EMPTY + | mapPartial f (SET{root, ...}) = let + fun mapf (acc, SplayNil) = acc + | mapf (acc, SplayObj{value,left,right}) = let + val acc = mapf (acc, left) + in + case f value + of SOME value' => mapf (add(acc, value'), right) + | NONE => mapf (acc, right) + (* end case *) + end + in + mapf (EMPTY, !root) + end + + fun app af EMPTY = () + | app af (SET{root,...}) = + let fun apply SplayNil = () + | apply (SplayObj{value,left,right}) = + (apply left; af value; apply right) + in apply (!root) end +(* + fun revapp af (SET{root,...}) = + let fun apply SplayNil = () + | apply (SplayObj{value,left,right}) = + (apply right; af value; apply left) + in apply (!root) end +*) + (* Fold function *) + fun foldr abf b EMPTY = b + | foldr abf b (SET{root,...}) = + let fun apply (SplayNil, b) = b + | apply (SplayObj{value,left,right},b) = + apply(left,abf(value,apply(right,b))) + in + apply (!root,b) + end + + fun foldl abf b EMPTY = b + | foldl abf b (SET{root,...}) = + let fun apply (SplayNil, b) = b + | apply (SplayObj{value,left,right},b) = + apply(right,abf(value,apply(left,b))) + in + apply (!root,b) + end + + fun filter p EMPTY = EMPTY + | filter p (SET{root,...}) = let + fun filt (SplayNil,tree) = tree + | filt (SplayObj{value,left,right},tree) = let + val t' = filt(right,filt(left,tree)) + in + if p value then insert(value,t') else t' + end + in + case filt(!root,(0,SplayNil)) of + (0,_) => EMPTY + | (cnt,t) => SET{nobj=cnt,root=ref t} + end + + fun partition p EMPTY = (EMPTY, EMPTY) + | partition p (SET{root,...}) = let + fun filt (SplayNil, tree1, tree2) = (tree1, tree2) + | filt (SplayObj{value,left,right}, tree1, tree2) = let + val (t1, t2) = filt(left, tree1, tree2) + val (t1', t2') = filt(right, t1, t2) + in + if p value + then (insert(value, t1'), t2') + else (t1', insert(value, t2')) + end + fun mk (0, _) = EMPTY + | mk (cnt, t) = SET{nobj=cnt, root=ref t} + val (t1, t2) = filt (!root, (0, SplayNil), (0, SplayNil)) + in + (mk t1, mk t2) + end + + fun exists p EMPTY = false + | exists p (SET{root,...}) = let + fun ex SplayNil = false + | ex (SplayObj{value=v, left=l, right=r}) = p v orelse ex l orelse ex r + in + ex (!root) + end + + fun all p EMPTY = true + | all p (SET{root,...}) = let + fun all' SplayNil = true + | all' (SplayObj{value=v, left=l, right=r}) = p v andalso all' l andalso all' r + in + all' (!root) + end + + fun find p EMPTY = NONE + | find p (SET{root,...}) = let + fun ex SplayNil = NONE + | ex (SplayObj{value=v,left=l,right=r}) = + if p v then SOME v + else (case ex l + of NONE => ex r + | a => a + (* end case *)) + in + ex (!root) + end + + (* deprecated *) + val listItems = toList + + end (* SplaySet *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/splaytree-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/splaytree-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/splaytree-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/splaytree-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ +(* splaytree-sig.sml + * + * COPYRIGHT (c) 2015 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Signature for a splay tree data structure. + * + *) + +signature SPLAY_TREE = + sig + + datatype 'a splay + = SplayObj of { + value : 'a, + right : 'a splay, + left : 'a splay + } + | SplayNil + + val splay : (('a -> order) * 'a splay) -> (order * 'a splay) + (* (r,tree') = splay (cmp,tree) + * where tree' is tree adjusted using the comparison function cmp + * and, if tree' = SplayObj{value,...}, r = cmp value. + * tree' = SplayNil iff tree = SplayNil, in which case r is undefined. + *) + + val join : 'a splay * 'a splay -> 'a splay + (* join(t,t') returns a new splay tree formed of t and t' + *) + + end (* SPLAY_TREE *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/splaytree.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/splaytree.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/splaytree.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/splaytree.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,111 @@ +(* splaytree.sml + * + * COPYRIGHT (c) 2015 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Splay tree structure. + * + *) + +structure SplayTree : SPLAY_TREE = + struct + + datatype 'a splay + = SplayObj of { + value : 'a, + right : 'a splay, + left : 'a splay + } + | SplayNil + + datatype 'a ans_t = No | Eq of 'a | Lt of 'a | Gt of 'a + + fun splay (compf, root) = let + fun adj SplayNil = (No,SplayNil,SplayNil) + | adj (arg as SplayObj{value,left,right}) = + (case compf value of + EQUAL => (Eq value, left, right) + | GREATER => + (case left of + SplayNil => (Gt value,SplayNil,right) + | SplayObj{value=value',left=left',right=right'} => + (case compf value' of + EQUAL => (Eq value',left', + SplayObj{value=value,left=right',right=right}) + | GREATER => + (case left' of + SplayNil => (Gt value',left',SplayObj{value=value,left=right',right=right}) + | _ => + let val (V,L,R) = adj left' + val rchild = SplayObj{value=value,left=right',right=right} + in + (V,L,SplayObj{value=value',left=R,right=rchild}) + end + ) (* end case *) + | _ => + (case right' of + SplayNil => (Lt value',left',SplayObj{value=value,left=right',right=right}) + | _ => + let val (V,L,R) = adj right' + val rchild = SplayObj{value=value,left=R,right=right} + val lchild = SplayObj{value=value',left=left',right=L} + in + (V,lchild,rchild) + end + ) (* end case *) + ) (* end case *) + ) (* end case *) + | _ => + (case right of + SplayNil => (Lt value,left,SplayNil) + | SplayObj{value=value',left=left',right=right'} => + (case compf value' of + EQUAL => + (Eq value',SplayObj{value=value,left=left,right=left'},right') + | LESS => + (case right' of + SplayNil => (Lt value',SplayObj{value=value,left=left,right=left'},right') + | _ => + let val (V,L,R) = adj right' + val lchild = SplayObj{value=value,left=left,right=left'} + in + (V,SplayObj{value=value',left=lchild,right=L},R) + end + ) (* end case *) + | _ => + (case left' of + SplayNil => (Gt value',SplayObj{value=value,left=left,right=left'},right') + | _ => + let val (V,L,R) = adj left' + val rchild = SplayObj{value=value',left=R,right=right'} + val lchild = SplayObj{value=value,left=left,right=L} + in + (V,lchild,rchild) + end + ) (* end case *) + ) (* end case *) + ) (* end case *) + ) (* end case *) + in + case adj root + of (No,_,_) => (GREATER,SplayNil) + | (Eq v,l,r) => (EQUAL,SplayObj{value=v,left=l,right=r}) + | (Lt v,l,r) => (LESS,SplayObj{value=v,left=l,right=r}) + | (Gt v,l,r) => (GREATER,SplayObj{value=v,left=l,right=r}) + end + + fun lrotate SplayNil = SplayNil + | lrotate (arg as SplayObj{value,left,right=SplayNil}) = arg + | lrotate (SplayObj{value,left,right=SplayObj{value=v,left=l,right=r}}) = + lrotate (SplayObj{value=v,left=SplayObj{value=value,left=left,right=l},right=r}) + + fun join (SplayNil,SplayNil) = SplayNil + | join (SplayNil,t) = t + | join (t,SplayNil) = t + | join (l,r) = + case lrotate l of + SplayNil => r (* impossible as l is not SplayNil *) + | SplayObj{value,left,right} => SplayObj{value=value,left=left,right=r} + + end (* SplayTree *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/target32-prime-sizes.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/target32-prime-sizes.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/target32-prime-sizes.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/target32-prime-sizes.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ +(* target32-prim-sizes.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A list of prime numbers for sizing hash tables, etc. on 32-bit targets. + *) + +structure PrimeSizes : sig + + val pick : int -> int + + end = struct + + (* This is a sequence of prime numbers; each number is approx. sqrt(2) + * larger than the previous one in the series. The list is organized + * into sublists to make searches faster. + *) + val primes = [ + (47, [11, 13, 17, 23, 37, 47]), + (367, [67, 97, 131, 191, 257, 367]), + (2897, [521, 727, 1031, 1451, 2053, 2897]), + (23173, [4099, 5801, 8209, 11587, 16411, 23173]), + (185369, [32771, 46349, 65537, 92683, 131101, 185369]), + (1482919, [262147, 370759, 524309, 741457, 1048583, 1482919]), + (2097169, [2097169]) + ] + + fun pick i = let + fun f [] = raise Fail "PrimeSizes.pick: out of sequences" + | f [(p, _)] = p + | f ((hi, l)::r) = if (i < hi) then g l else f r + and g [] = raise Fail "PrimeSizes.pick: out of primes in sequence" + | g [p] = p + | g (p::r) = if (i < p) then p else g r + in + f primes + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/target64-prime-sizes.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/target64-prime-sizes.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/target64-prime-sizes.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/target64-prime-sizes.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ +(* target64-prim-sizes.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A list of prime numbers for sizing hash tables, etc. on 64-bit targets. + *) + +structure PrimeSizes : sig + + val pick : int -> int + + end = struct + + (* This is a sequence of prime numbers; each number is approx. sqrt(2) + * larger than the previous one in the series. The list is organized + * into sublists to make searches faster. + *) + val primes = [ + (47, [11, 13, 17, 23, 37, 47]), + (367, [67, 97, 131, 191, 257, 367]), + (2897, [521, 727, 1031, 1451, 2053, 2897]), + (23173, [4099, 5801, 8209, 11587, 16411, 23173]), + (185369, [32771, 46349, 65537, 92683, 131101, 185369]), + (1482919, [262147, 370759, 524309, 741457, 1048583, 1482919]), + (2097169, [2097169]) + ] + + fun pick i = let + fun f [] = raise Fail "PrimeSizes.pick: out of sequences" + | f [(p, _)] = p + | f ((hi, l)::r) = if (i < hi) then g l else f r + and g [] = raise Fail "PrimeSizes.pick: out of primes in sequence" + | g [p] = p + | g (p::r) = if (i < p) then p else g r + in + f primes + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/time-limit.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/time-limit.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/time-limit.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/time-limit.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,16 @@ +ann + "nonexhaustiveMatch warn" "redundantMatch warn" + "sequenceNonUnit warn" + "warnUnused false" "forceUsed" +in + +local + $(SML_LIB)/basis/basis.mlb + $(SML_LIB)/basis/mlton.mlb + engine.mlton.sml + time-limit.mlton.sml +in + structure TimeLimit = TimeLimit +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/time-limit.mlton.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/time-limit.mlton.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/time-limit.mlton.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/time-limit.mlton.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,24 @@ +(* time-limit.mlton.sml + * + * Copyright (C) 1999-2004 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under the GNU General Public License (GPL). + * Please see the file MLton-LICENSE for license information. + * + *) + +structure TimeLimit: +sig + exception TimeOut + val timeLimit : Time.time -> ('a -> 'b) -> 'a -> 'b +end = +struct + exception TimeOut + + fun timeLimit t f x = + case Engine.run (Engine.new (fn () => f x), t) of + Engine.Done res => res + | Engine.Raise exn => raise exn + | Engine.TimeOut _ => raise TimeOut +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/time-limit.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/time-limit.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/time-limit.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/time-limit.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,35 @@ +(* time-limit.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Limit the execution time of a computation. + *) + +structure TimeLimit : sig + + exception TimeOut + + val timeLimit : Time.time -> ('a -> 'b) -> 'a -> 'b + + end = struct + + exception TimeOut + + fun timeLimit t f x = let + val setitimer = SMLofNJ.IntervalTimer.setIntTimer + fun timerOn () = ignore(setitimer (SOME t)) + fun timerOff () = ignore(setitimer NONE) + val escapeCont = SMLofNJ.Cont.callcc (fn k => ( + SMLofNJ.Cont.callcc (fn k' => (SMLofNJ.Cont.throw k k')); + timerOff(); + raise TimeOut)) + fun handler _ = escapeCont + in + Signals.setHandler (Signals.sigALRM, Signals.HANDLER handler); + timerOn(); + ((f x) handle ex => (timerOff(); raise ex)) + before timerOff() + end + + end; (* TimeLimit *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/TODO mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/TODO --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/TODO 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/TODO 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,5 @@ +Improve implementation of unionWith/intersectWith in BinaryMapFn, IntBinaryMap, +and SplayMapFn. + +New iterator module + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/univariate-stats.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/univariate-stats.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/univariate-stats.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/univariate-stats.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,120 @@ +(* univariate-stats.sml + * + * Some statistical functions on unweighted univariate samples. + * + * Copyright (c) 2004 by The Fellowship of SML/NJ + * + * Author: Matthias Blume (blume@tti-c.org) + *) +structure UnivariateStats :> sig + + (* We distinguish between two kinds of samples. Only the "heavy" + * kind permits calculation of average deviation and median. + * It is also considerably more expensive because it keeps an + * array of all points while the "light" variety is constant-size. *) + type light + type heavy + + type 'a sample (* light or heavy *) + type 'a evaluation (* light or heavy *) + + (* Samples are built incrementally by adding points to an initially + * empty sample: *) + val lempty : light sample + val hempty : unit -> heavy sample + val ladd : real * light sample -> light sample (* constant *) + val hadd : real * heavy sample -> heavy sample (* amortized constant *) + + (* Evaluate the sample; this completes all the expensive work except + * for things that depend on "heavy" samples: *) + val evaluate : 'a sample -> 'a evaluation (* constant *) + + (* extracting of "cheap" information (constant-time): *) + val N : 'a evaluation -> int + val n : 'a evaluation -> real (* N as real *) + val mean : 'a evaluation -> real + val variance : 'a evaluation -> real + val standardDeviation : 'a evaluation -> real + val skew : 'a evaluation -> real + val kurtosis : 'a evaluation -> real + + (* extracting of "expensive" information: *) + val median : heavy evaluation -> real (* randomized linear *) + val averageDeviation : heavy evaluation -> real (* linear *) + +end = struct + + infix 8 $ val op $ = Unsafe.Array.sub + infix 3 <- fun (a, i) <- x = Unsafe.Array.update (a, i, x) + + (* two kinds of "extra info" *) + type light = unit (* nothing *) + type heavy = real array * int (* rubber array of points, size *) + (* a sample : extra info * N * sum x^4 * sum x^3 * sum x^2 * sum x : *) + type 'a sample = 'a * int * real * real * real * real + (* an evaluation: extra info * N * N as real * + * mean * variance * standard deviation * + * skew * kurtosis : *) + datatype 'a evaluation = + E of { ext_info: 'a, (* extra info *) + ni: int, (* number of points *) + nr: real, (* number of points (as real) *) + mean: real, + sd2: real, (* sd*sd = variance *) + sd: real, (* standard deviation *) + skew: real, + kurtosis: real } + + val SZ = 1024 (* minimum allocated size of heavy array *) + val lempty = ((), 0, 0.0, 0.0, 0.0, 0.0) + fun hempty () = ((Array.array (SZ, 0.0), SZ), 0, 0.0, 0.0, 0.0, 0.0) + + fun ladd (x:real, ((), n, sx4, sx3, sx2, sx1)) = + let val x2 = x*x val (x3, x4) = (x2*x, x2*x2) + in ((), n+1, sx4+x4, sx3+x3, sx2+x2, sx1+x) + end + + fun hadd (x:real, ((a, sz), n, sx4, sx3, sx2, sx1)) = + let val x2 = x*x val (x3, x4) = (x2*x, x2*x2) + val (a, sz) = + if n < sz then (a, sz) + else let val sz = sz+sz + val b = Array.tabulate + (sz, fn i => if i=ni then ds/nr else ad (i+1, ds + abs(a$i-m)) + in ad (0, 0.0) end +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/uref-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/uref-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/uref-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/uref-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,91 @@ +(* uref-sig.sml + * + * Interface to UnionFind package. + * + * Author: + * Fritz Henglein + * DIKU, University of Copenhagen + * henglein@diku.dk + * + * DESCRIPTION + * + * Union/Find data type with ref-like interface. A Union/Find structure + * consists of a type constructor 'a uref with operations for + * making an element of 'a uref (make), getting the contents of + * an element (!!), checking for equality of two elements (equal), and + * for joining two elements (union). uref is analogous to ref as + * expressed in the following table: + * + * ------------------------------------------------------------------- + * type 'a ref 'a uref + * ------------------------------------------------------------------- + * introduction ref uref + * elimination ! !! + * equality = equal + * updating := update + * unioning link, union, unify + * ------------------------------------------------------------------- + * + * The main difference between 'a ref and 'a uref is in the union + * operation. Without union 'a ref and 'a uref can be used + * interchangebly. An assignment to a reference changes only the + * contents of the reference, but not the reference itself. In + * particular, any two pointers that were different (in the sense of the + * equality predicate = returning false) before an assignment will still + * be so. Their contents may or may not be equal after the assignment, + * though. In contrast, applying the union operations (link, union, + * unify) to two uref elements makes the two elements themselves + * equal (in the sense of the predicate equal returning true). As a + * consequence their contents will also be identical: in the case of link + * and union it will be the contents of one of the two unioned elements, + * in the case of unify the contents is determined by a binary + * function parameter. The link, union, and unify functions return true + * when the elements were previously NOT equal. + *) + +signature UREF = + sig + + type 'a uref + (* type of uref-elements with contents of type 'a *) + + val uRef: 'a -> 'a uref + (* uref x creates a new element with contents x *) + + val equal: 'a uref * 'a uref -> bool + (* equal (e, e') returns true if and only if e and e' are either made by + * the same call to uref or if they have been unioned (see below). + *) + + val !! : 'a uref -> 'a + (* !!e returns the contents of e. + * Note: if 'a is an equality type then !!(uref x) = x, and + * equal(uref (!!x), x) = false. + *) + + val update : 'a uref * 'a -> unit + (* update(e, x) updates the contents of e to be x *) + + val unify : ('a * 'a -> 'a) -> 'a uref * 'a uref -> bool + (* unify f (e, e') makes e and e' equal; if v and v' are the + * contents of e and e', respectively, before unioning them, + * then the contents of the unioned element is f(v,v'). Returns + * true, when elements were not equal prior to the call. + *) + + val union : 'a uref * 'a uref -> bool + (* union (e, e') makes e and e' equal; the contents of the unioned + * element is the contents of one of e and e' before the union operation. + * After union(e, e') elements e and e' will be congruent in the + * sense that they are interchangeable in any context.. Returns + * true, when elements were not equal prior to the call. + *) + + val link : 'a uref * 'a uref -> bool + (* link (e, e') makes e and e' equal; the contents of the linked + * element is the contents of e' before the link operation. Returns + * true, when elements were not equal prior to the call. + *) + + end; (* UREF *) + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/uref.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/uref.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/uref.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/uref.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,88 @@ +(* uref.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * UNIONFIND DATA STRUCTURE WITH PATH COMPRESSION AND RANKED UNION + * + * Author: + * Fritz Henglein + * DIKU, University of Copenhagen + * henglein@diku.dk + *) + +structure URef : UREF = + struct + + datatype 'a urefC + = ECR of 'a * int + | PTR of 'a uref + withtype 'a uref = 'a urefC ref + + fun find (p as ref (ECR _)) = p + | find (p as ref (PTR p')) = let + val p'' = find p' + in + p := PTR p''; p'' + end + + fun uRef x = ref (ECR(x, 0)) + + fun !! p = (case !(find p) + of ECR (x, _) => x + | _ => raise Match + (* end case *)) + + fun equal (p, p') = (find p = find p') + + fun update (p, x) = (case find p + of (p' as ref(ECR(_, r))) => p' := ECR(x, r) + | _ => raise Match + (* end case *)) + + fun link (p, q) = let + val p' = find p + val q' = find q + in + if (p' = q') then false else (p' := PTR q; true) + end + + fun unify f (p, q) = (case (find p, find q) + of (p' as ref(ECR(pc, pr)), q' as ref(ECR(qc, qr))) => + let + val newC = f (pc, qc) + in + if p' = q' + then (p' := ECR(newC, pr); false) + else ( + if pr = qr + then (q' := ECR(newC, qr+1); p' := PTR q') + else if pr < qr + then (q' := ECR(newC, qr); p' := PTR q') + else ((* pr > qr *) + p' := ECR(newC, pr); + q':= PTR p'); + true) + end + | _ => raise Match + (* end case *)) + + fun union (p, q) = let + val p' = find p + val q' = find q + in + if (p' = q') + then false + else (case (!p', !q') + of (ECR(pc, pr), ECR(qc, qr)) => ( + if pr = qr + then (q' := ECR(qc, qr+1); p' := PTR q') + else if pr < qr + then p' := PTR q' + else q':= PTR p'; + true) + | _ => raise Match + (* end case *)) + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/utf8-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/utf8-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/utf8-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/utf8-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,56 @@ +(* utf8-sig.sml + * + * COPYRIGHT (c) 2020 John Reppy (http://www.cs.uchicago.edu/~jhr) + * All rights reserved. + * + * Routines for working with UTF8 encoded strings. + *) + +signature UTF8 = + sig + + type wchar = word + + val maxCodePoint : wchar (* = 0wx0010FFFF *) + + exception Incomplete + (* raised by some operations when applied to incomplete strings. *) + + (** Character operations **) + + val getu : (char, 'strm) StringCvt.reader -> (wchar, 'strm) StringCvt.reader + (* convert a character reader to a wide-character reader *) + + val encode : wchar -> string + (* return the UTF8 encoding of a wide character *) + + val isAscii : wchar -> bool + val toAscii : wchar -> char (* truncates to 7-bits *) + val fromAscii : char -> wchar (* truncates to 7-bits *) + + val toString : wchar -> string + (* return a printable string representation of a wide character *) + + (** String operations **) + + val size : string -> int + (* return the number of Unicode characters *) + + val explode : string -> wchar list + (* return the list of wide characters that are encoded by a string *) + val implode : wchar list -> string + (* return the UTF-8 encoded string that represents the list of + * Unicode code points. + *) + + val map : (wchar -> wchar) -> string -> string + (* map a function over the Unicode characters in the string *) + val app : (wchar -> unit) -> string -> unit + (* apply a function to the Unicode characters in the string *) + val fold : ((wchar * 'a) -> 'a) -> 'a -> string -> 'a + (* fold a function over the Unicode characters in the string *) + val all : (wchar -> bool) -> string -> bool + val exists : (wchar -> bool) -> string -> bool + + end + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/utf8.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/utf8.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/utf8.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/utf8.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,215 @@ +(* utf8.sml + * + * COPYRIGHT (c) 2020 John Reppy (http://www.cs.uchicago.edu/~jhr) + * All rights reserved. + * + * Routines for working with UTF8 encoded strings. + * + * Unicode value 1st byte 2nd byte 3rd byte 4th byte + * ----------------------- -------- -------- -------- -------- + * 00000 00000000 0xxxxxxx 0xxxxxxx + * 00000 00000yyy yyxxxxxx 110yyyyy 10xxxxxx + * 00000 zzzzyyyy yyxxxxxx 1110zzzz 10yyyyyy 10xxxxxx + * wwwzz zzzzyyyy yyxxxxxx 11110www 10zzzzzz 10yyyyyy 10xxxxxx + * + *) + +structure UTF8 :> UTF8 = + struct + + structure W = Word + structure SS = Substring + + type wchar = W.word + + fun w2c w = Char.chr(W.toInt w) + + val maxCodePoint : wchar = 0wx0010FFFF + + (* maximum values for the first byte for each encoding length *) + val max1Byte : W.word = 0wx7f (* 0xxx xxxx *) + val max2Byte : W.word = 0wxdf (* 110x xxxx *) + val max3Byte : W.word = 0wxef (* 1110 xxxx *) + val max4Byte : W.word = 0wxf7 (* 1111 0xxx *) + + (* bit masks for the first byte for each encoding length *) + val mask2Byte : W.word = 0wx1f + val mask3Byte : W.word = 0wx0f + val mask4Byte : W.word = 0wx07 + + exception Incomplete + (* raised by some operations when applied to incomplete strings. *) + + (* add a continuation byte to the end of wc. Continuation bytes have + * the form 0b10xxxxxx. + *) + fun getContByte getc (wc, ss) = (case (getc ss) + of NONE => raise Incomplete + | SOME(c, ss') => let + val b = W.fromInt(Char.ord c) + in + if (W.andb(0wxc0, b) = 0wx80) + then (W.orb(W.<<(wc, 0w6), W.andb(0wx3f, b)), ss') + else raise Incomplete + end + (* end case *)) + + (* convert a character reader to a wide-character reader *) + fun getu getc = let + val getContByte = getContByte getc + fun get strm = (case getc strm + of NONE => NONE + | SOME(c, ss) => let + val w = W.fromInt(Char.ord c) + val (wc, ss) = if (w <= max1Byte) + then (w, ss) + else if (w <= max2Byte) + then getContByte (W.andb(mask2Byte, w), ss) + else if (w <= max3Byte) + then getContByte(getContByte(W.andb(mask3Byte, w), ss)) + else if (w <= max4Byte) + then getContByte(getContByte(getContByte(W.andb(mask4Byte, w), ss))) + else raise Incomplete + in + SOME(wc, ss) + end + (* end case *)) + in + get + end + + fun isAscii (wc : wchar) = (wc <= max1Byte) + fun toAscii (wc : wchar) = w2c(W.andb(0wx7f, wc)) + fun fromAscii c = W.andb(0wx7f, W.fromInt(Char.ord c)) + + (* return a printable string representation of a wide character *) + fun toString wc = + if isAscii wc + then Char.toCString(toAscii wc) + else if (wc <= max2Byte) + then "\\u" ^ (StringCvt.padLeft #"0" 4 (W.toString wc)) + (* NOTE: the following is not really SML syntax *) + else "\\u" ^ (StringCvt.padLeft #"0" 8 (W.toString wc)) + + (* return a list of characters that is the UTF8 encoding of a wide character *) + fun encode' (wc, chrs) = if (wc <= 0wx7f) + then w2c wc :: chrs + else if (wc <= 0wx7ff) + then w2c(W.orb(0wxc0, W.>>(wc, 0w6))) :: + w2c(W.orb(0wx80, W.andb(wc, 0wx3f))) :: chrs + else if (wc <= 0wxffff) + then w2c(W.orb(0wxe0, W.>>(wc, 0w12))) :: + w2c(W.orb(0wx80, W.andb(W.>>(wc, 0w6), 0wx3f))) :: + w2c(W.orb(0wx80, W.andb(wc, 0wx3f))) :: chrs + else if (wc <= maxCodePoint) + then w2c(W.orb(0wxf0, W.>>(wc, 0w18))) :: + w2c(W.orb(0wx80, W.andb(W.>>(wc, 0w12), 0wx3f))) :: + w2c(W.orb(0wx80, W.andb(W.>>(wc, 0w6), 0wx3f))) :: + w2c(W.orb(0wx80, W.andb(wc, 0wx3f))) :: chrs + else raise Domain + + fun encode wc = String.implode(encode'(wc, [])) + + val getContByte = getContByte SS.getc + + fun getWC (c1, ss) = let + val w = W.fromInt(Char.ord c1) + val (wc, ss) = if (w <= max1Byte) + then (w, ss) + else if (w <= max2Byte) + then getContByte (W.andb(mask2Byte, w), ss) + else if (w <= max3Byte) + then getContByte(getContByte(W.andb(mask3Byte, w), ss)) + else if (w <= max4Byte) + then getContByte(getContByte(getContByte(W.andb(mask4Byte, w), ss))) + else raise Incomplete + in + (wc, ss) + end + + (* return the number of Unicode characters *) + fun size s = let + fun len (ss, n) = (case SS.getc ss + of NONE => n + | SOME arg => let + val (_, ss) = getWC arg + in + len (ss, n+1) + end + (* end case *)) + in + len (SS.full s, 0) + end + + fun map f s = let + fun mapf (ss, chrs) = (case SS.getc ss + of NONE => String.implode (List.rev chrs) + | SOME arg => let + val (wc, ss) = getWC arg + in + mapf (ss, List.revAppend(encode'(wc, []), chrs)) + end + (* end case *)) + in + mapf (SS.full s, []) + end + + fun app f s = let + fun appf ss = (case SS.getc ss + of NONE => () + | SOME arg => let + val (wc, ss) = getWC arg + in + f wc; appf ss + end + (* end case *)) + in + appf (SS.full s) + end + + (* fold a function over the Unicode characters in the string *) + fun fold f = let + fun foldf (ss, acc) = (case SS.getc ss + of NONE => acc + | SOME arg => let + val (wc, ss) = getWC arg + in + foldf (ss, f (wc, acc)) + end + (* end case *)) + in + fn init => fn s => foldf (SS.full s, init) + end + + fun all pred s = let + fun allf ss = (case SS.getc ss + of NONE => true + | SOME arg => let + val (wc, ss) = getWC arg + in + pred wc andalso allf ss + end + (* end case *)) + in + allf (SS.full s) + end + + fun exists pred s = let + fun existsf ss = (case SS.getc ss + of NONE => true + | SOME arg => let + val (wc, ss) = getWC arg + in + pred wc orelse existsf ss + end + (* end case *)) + in + existsf (SS.full s) + end + + (* return the list of wide characters that are encoded by a string *) + fun explode s = List.rev(fold (op ::) [] s) + + fun implode wcs = String.implode(List.foldr encode' [] wcs) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/word-hash-table.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/word-hash-table.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/word-hash-table.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/word-hash-table.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,184 @@ +(* word-hash-table.sml + * + * COPYRIGHT (c) 2018 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A specialization of the hash table functor to word keys. + * + * AUTHOR: John Reppy + * University of Chicago + * https://cs.uchicago.edu/~jhr + *) + +structure WordHashTable :> MONO_HASH_TABLE where type Key.hash_key = word = + struct + + structure Key = + struct + type hash_key = word + fun sameKey (a : word, b) = (a = b) + fun hashVal a = a + end + + open Key + + structure HTRep = HashTableRep + + datatype 'a hash_table = HT of { + not_found : exn, + table : (hash_key, 'a) HTRep.table ref, + n_items : int ref + } + + fun index (i, sz) = Word.toIntX(Word.andb(i, Word.fromInt sz - 0w1)) + + (* Create a new table; the int is a size hint and the exception + * is to be raised by find. + *) + fun mkTable (sizeHint, notFound) = HT{ + not_found = notFound, + table = ref (HTRep.alloc sizeHint), + n_items = ref 0 + } + + (* remove all elements from the table *) + fun clear (HT{table, n_items, ...}) = (HTRep.clear(!table); n_items := 0) + + (* Insert an item. If the key already has an item associated with it, + * then the old item is discarded. + *) + fun insert (tbl as HT{table, n_items, ...}) (key, item) = let + val arr = !table + val sz = Array.length arr + val hash = hashVal key + val indx = index (hash, sz) + fun look HTRep.NIL = ( + Array.update(arr, indx, HTRep.B(hash, key, item, Array.sub(arr, indx))); + n_items := !n_items + 1; + HTRep.growTableIfNeeded (table, !n_items); + HTRep.NIL) + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then HTRep.B(hash, key, item, r) + else (case (look r) + of HTRep.NIL => HTRep.NIL + | rest => HTRep.B(h, k, v, rest) + (* end case *)) + in + case (look (Array.sub (arr, indx))) + of HTRep.NIL => () + | b => Array.update(arr, indx, b) + (* end case *) + end + + (* return true, if the key is in the domain of the table *) + fun inDomain (HT{table, ...}) key = let + val arr = !table + val hash = hashVal key + val indx = index (hash, Array.length arr) + fun look HTRep.NIL = false + | look (HTRep.B(h, k, v, r)) = + ((hash = h) andalso sameKey(key, k)) orelse look r + in + look (Array.sub (arr, indx)) + end + + (* find an item, the table's exception is raised if the item doesn't exist *) + fun lookup (HT{table, not_found, ...}) key = let + val arr = !table + val hash = hashVal key + val indx = index (hash, Array.length arr) + fun look HTRep.NIL = raise not_found + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then v + else look r + in + look (Array.sub (arr, indx)) + end + + (* look for an item, return NONE if the item doesn't exist *) + fun find (HT{table, ...}) key = let + val arr = !table + val sz = Array.length arr + val hash = hashVal key + val indx = index (hash, sz) + fun look HTRep.NIL = NONE + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then SOME v + else look r + in + look (Array.sub (arr, indx)) + end + + (* Remove an item. The table's exception is raised if + * the item doesn't exist. + *) + fun remove (HT{not_found, table, n_items}) key = let + val arr = !table + val sz = Array.length arr + val hash = hashVal key + val indx = index (hash, sz) + fun look HTRep.NIL = raise not_found + | look (HTRep.B(h, k, v, r)) = if ((hash = h) andalso sameKey(key, k)) + then (v, r) + else let val (item, r') = look r in (item, HTRep.B(h, k, v, r')) end + val (item, bucket) = look (Array.sub (arr, indx)) + in + Array.update (arr, indx, bucket); + n_items := !n_items - 1; + item + end (* remove *) + + (* Return the number of items in the table *) + fun numItems (HT{n_items, ...}) = !n_items + + (* return a list of the items in the table *) + fun listItems (HT{table = ref arr, n_items, ...}) = + HTRep.listItems (arr, n_items) + fun listItemsi (HT{table = ref arr, n_items, ...}) = + HTRep.listItemsi (arr, n_items) + + (* Apply a function to the entries of the table *) + fun appi f (HT{table, ...}) = HTRep.appi f (! table) + fun app f (HT{table, ...}) = HTRep.app f (! table) + + (* Map a table to a new table that has the same keys and exception *) + fun mapi f (HT{table, n_items, not_found}) = HT{ + table = ref(HTRep.mapi f (! table)), + n_items = ref(!n_items), + not_found = not_found + } + fun map f (HT{table, n_items, not_found}) = HT{ + table = ref(HTRep.map f (! table)), + n_items = ref(!n_items), + not_found = not_found + } + + (* Fold a function over the entries of the table *) + fun foldi f init (HT{table, ...}) = HTRep.foldi f init (! table) + fun fold f init (HT{table, ...}) = HTRep.fold f init (! table) + + (* modify the hash-table items in place *) + fun modifyi f (HT{table, ...}) = HTRep.modifyi f (!table) + fun modify f (HT{table, ...}) = HTRep.modify f (!table) + + (* remove any hash table items that do not satisfy the given + * predicate. + *) + fun filteri pred (HT{table, n_items, ...}) = + n_items := HTRep.filteri pred (! table) + fun filter pred (HT{table, n_items, ...}) = + n_items := HTRep.filter pred (! table) + + (* Create a copy of a hash table *) + fun copy (HT{table, n_items, not_found}) = HT{ + table = ref(HTRep.copy(! table)), + n_items = ref(!n_items), + not_found = not_found + } + + (* returns a list of the sizes of the various buckets. This is to + * allow users to gauge the quality of their hashing function. + *) + fun bucketSizes (HT{table, ...}) = HTRep.bucketSizes (! table) + + end (* HashTableFn *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/word-redblack-map.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/word-redblack-map.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/word-redblack-map.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/word-redblack-map.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,643 @@ +(* word-redblack-map.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * COPYRIGHT (c) 2000 Bell Labs, Lucent Technologies. + * + * This code is based on Chris Okasaki's implementation of + * red-black trees. The linear-time tree construction code is + * based on the paper "Constructing red-black trees" by Hinze, + * and the delete function is based on the description in Cormen, + * Leiserson, and Rivest. + * + * A red-black tree should satisfy the following two invariants: + * + * Red Invariant: each red node has black children (empty nodes are + * considered black). + * + * Black Invariant: each path from the root to an empty node has the + * same number of black nodes (the tree's black height). + * + * The Black invariant implies that any node with only one child + * will be black and its child will be a red leaf. + *) + +structure WordRedBlackMap :> ORD_MAP where type Key.ord_key = word = + struct + + structure Key = + struct + type ord_key = word + val compare = Word.compare + end + + datatype color = R | B + + datatype 'a tree + = E + | T of (color * 'a tree * Key.ord_key * 'a * 'a tree) + + datatype 'a map = MAP of (int * 'a tree) + + fun isEmpty (MAP(_, E)) = true + | isEmpty _ = false + + val empty = MAP(0, E) + + fun singleton (xk, x) = MAP(1, T(B, E, xk, x, E)) + + fun insert (MAP(nItems, m), xk, x) = let + val nItems' = ref nItems + fun ins E = (nItems' := nItems+1; T(R, E, xk, x, E)) + | ins (s as T(color, a, yk, y, b)) = + if (xk < yk) + then (case a + of T(R, c, zk, z, d) => + if (xk < zk) + then (case ins c + of T(R, e, wk, w, f) => T(R, T(B,e,wk,w,f), zk, z, T(B,d,yk,y,b)) + | c => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + else if (xk = zk) + then T(color, T(R, c, xk, x, d), yk, y, b) + else (case ins d + of T(R, e, wk, w, f) => T(R, T(B,c,zk,z,e), wk, w, T(B,f,yk,y,b)) + | d => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + | _ => T(B, ins a, yk, y, b) + (* end case *)) + else if (xk = yk) + then T(color, a, xk, x, b) + else (case b + of T(R, c, zk, z, d) => + if (xk < zk) + then (case ins c + of T(R, e, wk, w, f) => T(R, T(B,a,yk,y,e), wk, w, T(B,f,zk,z,d)) + | c => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + else if (xk = zk) + then T(color, a, yk, y, T(R, c, xk, x, d)) + else (case ins d + of T(R, e, wk, w, f) => T(R, T(B,a,yk,y,c), zk, z, T(B,e,wk,w,f)) + | d => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + | _ => T(B, a, yk, y, ins b) + (* end case *)) + val T(_, a, yk, y, b) = ins m + in + MAP(!nItems', T(B, a, yk, y, b)) + end + fun insert' ((xk, x), m) = insert (m, xk, x) + + fun insertWithi comb (MAP(nItems, m), xk, x) = let + val nItems' = ref nItems + fun ins E = (nItems' := nItems+1; T(R, E, xk, x, E)) + | ins (s as T(color, a, yk, y, b)) = + if (xk < yk) + then (case a + of T(R, c, zk, z, d) => + if (xk < zk) + then (case ins c + of T(R, e, wk, w, f) => T(R, T(B,e,wk,w,f), zk, z, T(B,d,yk,y,b)) + | c => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + else if (xk = zk) + then T(color, T(R, c, xk, comb(xk, z, x), d), yk, y, b) + else (case ins d + of T(R, e, wk, w, f) => T(R, T(B,c,zk,z,e), wk, w, T(B,f,yk,y,b)) + | d => T(B, T(R,c,zk,z,d), yk, y, b) + (* end case *)) + | _ => T(B, ins a, yk, y, b) + (* end case *)) + else if (xk = yk) + then T(color, a, xk, comb(xk, y, x), b) + else (case b + of T(R, c, zk, z, d) => + if (xk < zk) + then (case ins c + of T(R, e, wk, w, f) => T(R, T(B,a,yk,y,e), wk, w, T(B,f,zk,z,d)) + | c => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + else if (xk = zk) + then T(color, a, yk, y, T(R, c, xk, comb(xk, z, x), d)) + else (case ins d + of T(R, e, wk, w, f) => T(R, T(B,a,yk,y,c), zk, z, T(B,e,wk,w,f)) + | d => T(B, a, yk, y, T(R,c,zk,z,d)) + (* end case *)) + | _ => T(B, a, yk, y, ins b) + (* end case *)) + val T(_, a, yk, y, b) = ins m + in + MAP(!nItems', T(B, a, yk, y, b)) + end + fun insertWith comb = insertWithi (fn (_, x1, x2) => comb(x1, x2)) + + (* Is a key in the domain of the map? *) + fun inDomain (MAP(_, t), k) = let + fun find' E = false + | find' (T(_, a, yk, y, b)) = + (k = yk) orelse ((k < yk) andalso find' a) orelse (find' b) + in + find' t + end + + (* Look for an item, return NONE if the item doesn't exist *) + fun find (MAP(_, t), k) = let + fun find' E = NONE + | find' (T(_, a, yk, y, b)) = + if (k < yk) + then find' a + else if (k = yk) + then SOME y + else find' b + in + find' t + end + + (* Look for an item, raise NotFound if the item doesn't exist *) + fun lookup (MAP(_, t), k) = let + fun look E = raise LibBase.NotFound + | look (T(_, a, yk, y, b)) = + if (k < yk) + then look a + else if (k = yk) + then y + else look b + in + look t + end + + (* Remove an item, returning new map and value removed. + * Raises LibBase.NotFound if not found. + *) + local + datatype 'a zipper + = TOP + | LEFT of (color * Key.ord_key * 'a * 'a tree * 'a zipper) + | RIGHT of (color * 'a tree * Key.ord_key * 'a * 'a zipper) + in + fun remove (MAP(nItems, t), k) = let + (* zip the zipper *) + fun zip (TOP, t) = t + | zip (LEFT(color, xk, x, b, z), a) = zip(z, T(color, a, xk, x, b)) + | zip (RIGHT(color, a, xk, x, z), b) = zip(z, T(color, a, xk, x, b)) + (* zip the zipper while resolving a black deficit *) + fun fixupZip (TOP, t) = (true, t) + (* case 1 from CLR *) + | fixupZip (LEFT(B, xk, x, T(R, a, yk, y, b), p), t) = (case a + of T(_, T(R, a11, wk, w, a12), zk, z, a2) => (* case 1L ==> case 3L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, xk, x, a11), wk, w, T(B, a12, zk, z, a2)), yk, y, b))) + | T(_, a1, zk, z, T(R, a21, wk, w, t22)) => (* case 1L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, xk, x, a1), zk, z, T(B, a21, wk, w, t22)), yk, y, b))) + | T(_, a1, zk, z, a2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, T(B, t, xk, x, T(R, a1, zk, z, a2)), yk, y, b))) + | _ => fixupZip (LEFT(R, xk, x, a, LEFT(B, yk, y, b, p)), t) + (* end case *)) + | fixupZip (RIGHT(B, T(R, a, xk, x, b), yk, y, p), t) = (case b + of T(_, b1, zk, z, T(R, b21, wk, w, b22)) => (* case 1R ==> case 3R ==> case 4R *) + (false, zip (p, T(B, a, xk, x, T(R, T(B, b1, zk, z, b21), wk, w, T(B, b22, yk, y, t))))) + | T(_, T(R, b11, wk, w, b12), zk, z, b2) => (* case 1R ==> case 4R *) + (false, zip (p, T(B, a, xk, x, T(R, T(B, b11, wk, w, b12), zk, z, T(B, b2, yk, y, t))))) + | T(_, b1, zk, z, b2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, a, xk, x, T(B, T(R, b1, zk, z, b2), yk, y, t)))) + | _ => fixupZip (RIGHT(R, b, yk, y, RIGHT(B, a, xk, x, p)), t) + (* end case *)) + (* case 3 from CLR *) + | fixupZip (LEFT(color, xk, x, T(B, T(R, a1, yk, y, a2), zk, z, b), p), t) = + (* case 3L ==> case 4L *) + (false, zip (p, T(color, T(B, t, xk, x, a1), yk, y, T(B, a2, zk, z, b)))) + | fixupZip (RIGHT(color, T(B, a, xk, x, T(R, b1, yk, y, b2)), zk, z, p), t) = + (* case 3R ==> case 4R; rotate, recolor, plus rotate fixes deficit *) + (false, zip (p, T(color, T(B, a, xk, x, b1), yk, y, T(B, b2, zk, z, t)))) + (* case 4 from CLR *) + | fixupZip (LEFT(color, xk, x, T(B, a, yk, y, T(R, b1, zk, z, b2)), p), t) = + (false, zip (p, T(color, T(B, t, xk, x, a), yk, y, T(B, b1, zk, z, b2)))) + | fixupZip (RIGHT(color, T(B, T(R, a1, zk, z, a2), xk, x, b), yk, y, p), t) = + (false, zip (p, T(color, T(B, a1, zk, z, a2), xk, x, T(B, b, yk, y, t)))) + (* case 2 from CLR; note that "a" and "b" are guaranteed to be black, since we did + * not match cases 3 or 4. + *) + | fixupZip (LEFT(R, xk, x, T(B, a, yk, y, b), p), t) = + (false, zip (p, T(B, t, xk, x, T(R, a, yk, y, b)))) + | fixupZip (LEFT(B, xk, x, T(B, a, yk, y, b), p), t) = + fixupZip (p, T(B, t, xk, x, T(R, a, yk, y, b))) + | fixupZip (RIGHT(R, T(B, a, xk, x, b), yk, y, p), t) = + (false, zip (p, T(B, T(R, a, xk, x, b), yk, y, t))) + | fixupZip (RIGHT(B, T(B, a, xk, x, b), yk, y, p), t) = + fixupZip (p, T(B, T(R, a, xk, x, b), yk, y, t)) + (* push deficit up the tree by recoloring a black node as red *) + | fixupZip (LEFT(_, yk, y, E, p), t) = fixupZip (p, T(R, t, yk, y, E)) + | fixupZip (RIGHT(_, E, yk, y, p), t) = fixupZip (p, T(R, E, yk, y, t)) + (* impossible cases that violate the red invariant *) + | fixupZip _ = raise Fail "Red invariant violation" + (* delete the minimum value from a non-empty tree, returning a 4-tuple + * (key, elem, bd, tr), where key is the minimum key, elem is the element + * named by key, tr is the residual tree with elem removed, and bd is true + * if tr has a black-depth that is less than the original tree. + *) + fun delMin (T(R, E, yk, y, b), p) = + (* replace the node by its right subtree (which must be E) *) + (yk, y, false, zip(p, b)) + | delMin (T(B, E, yk, y, T(R, a', yk', y', b')), p) = + (* replace the node with its right child, while recoloring the child black to + * preserve the black invariant. + *) + (yk, y, false, zip (p, T(B, a', yk', y', b'))) + | delMin (T(B, E, yk, y, E), p) = let + (* delete the node, which reduces the black-depth by one, so we attempt to fix + * the deficit on the path back. + *) + val (blkDeficit, t) = fixupZip (p, E) + in + (yk, y, blkDeficit, t) + end + | delMin (T(color, a, yk, y, b), z) = delMin(a, LEFT(color, yk, y, b, z)) + | delMin (E, _) = raise Match + fun del (E, p) = raise LibBase.NotFound + | del (T(color, a, yk, y, b), p) = + if (k < yk) + then del (a, LEFT(color, yk, y, b, p)) + else if (k = yk) + then (case (color, a, b) + of (R, E, E) => (y, zip(p, E)) + | (B, E, E) => (y, #2 (fixupZip (p, E))) + | (_, T(_, a', yk', y', b'), E) => + (* node is black and left child is red; we replace the node with its + * left child recolored to black. + *) + (y, zip(p, T(B, a', yk', y', b'))) + | (_, E, T(_, a', yk', y', b')) => + (* node is black and right child is red; we replace the node with its + * right child recolored to black. + *) + (y, zip(p, T(B, a', yk', y', b'))) + | _ => let + val (minKey, minElem, blkDeficit, b) = delMin (b, TOP) + in + if blkDeficit + then (y, #2 (fixupZip (RIGHT(color, a, minKey, minElem, p), b))) + else (y, zip (p, T(color, a, minKey, minElem, b))) + end + (* end case *)) + else del (b, RIGHT(color, a, yk, y, p)) + val (item, t) = del(t, TOP) + in + case t + of T(R, a, xk, x, b) => (MAP(nItems-1, T(B, a, xk, x, b)), item) + | t => (MAP(nItems-1, t), item) + (* end case *) + end + end (* local *) + + (* return the first item in the map (or NONE if it is empty) *) + fun first (MAP(_, t)) = let + fun f E = NONE + | f (T(_, E, _, x, _)) = SOME x + | f (T(_, a, _, _, _)) = f a + in + f t + end + fun firsti (MAP(_, t)) = let + fun f E = NONE + | f (T(_, E, xk, x, _)) = SOME(xk, x) + | f (T(_, a, _, _, _)) = f a + in + f t + end + + (* Return the number of items in the map *) + fun numItems (MAP(n, _)) = n + + fun foldl f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, _, x, b), accum) = + foldf(b, f(x, foldf(a, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + fun foldli f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, xk, x, b), accum) = + foldf(b, f(xk, x, foldf(a, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + + fun foldr f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, _, x, b), accum) = + foldf(a, f(x, foldf(b, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + fun foldri f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, xk, x, b), accum) = + foldf(a, f(xk, x, foldf(b, accum))) + in + fn init => fn (MAP(_, m)) => foldf(m, init) + end + + fun listItems m = foldr (op ::) [] m + fun listItemsi m = foldri (fn (xk, x, l) => (xk, x)::l) [] m + + (* return an ordered list of the keys in the map. *) + fun listKeys m = foldri (fn (k, _, l) => k::l) [] m + + (* functions for walking the tree while keeping a stack of parents + * to be visited. + *) + fun next ((t as T(_, _, _, _, b))::rest) = (t, left(b, rest)) + | next _ = (E, []) + and left (E, rest) = rest + | left (t as T(_, a, _, _, _), rest) = left(a, t::rest) + fun start m = left(m, []) + + (* given an ordering on the map's range, return an ordering + * on the map. + *) + fun collate cmpRng = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => EQUAL + | ((E, _), _) => LESS + | (_, (E, _)) => GREATER + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk = yk) + then (case cmpRng(x, y) + of EQUAL => cmp (r1, r2) + | order => order + (* end case *)) + else if (xk < yk) + then LESS + else GREATER + (* end case *)) + in + fn (MAP(_, m1), MAP(_, m2)) => cmp (start m1, start m2) + end + + (* support for constructing red-black trees in linear time from increasing + * ordered sequences (based on a description by R. Hinze). Note that the + * elements in the digits are ordered with the largest on the left, whereas + * the elements of the trees are ordered with the largest on the right. + *) + datatype 'a digit + = ZERO + | ONE of (Key.ord_key * 'a * 'a tree * 'a digit) + | TWO of (Key.ord_key * 'a * 'a tree * Key.ord_key * 'a * 'a tree * 'a digit) + (* add an item that is guaranteed to be larger than any in l *) + fun addItem (ak, a, l) = let + fun incr (ak, a, t, ZERO) = ONE(ak, a, t, ZERO) + | incr (ak1, a1, t1, ONE(ak2, a2, t2, r)) = + TWO(ak1, a1, t1, ak2, a2, t2, r) + | incr (ak1, a1, t1, TWO(ak2, a2, t2, ak3, a3, t3, r)) = + ONE(ak1, a1, t1, incr(ak2, a2, T(B, t3, ak3, a3, t2), r)) + in + incr(ak, a, E, l) + end + (* link the digits into a tree *) + fun linkAll t = let + fun link (t, ZERO) = t + | link (t1, ONE(ak, a, t2, r)) = link(T(B, t2, ak, a, t1), r) + | link (t, TWO(ak1, a1, t1, ak2, a2, t2, r)) = + link(T(B, T(R, t2, ak2, a2, t1), ak1, a1, t), r) + in + link (E, t) + end + + local + fun wrap f (MAP(_, m1), MAP(_, m2)) = let + val (n, result) = f (start m1, start m2, 0, ZERO) + in + MAP(n, linkAll result) + end + fun ins ((E, _), n, result) = (n, result) + | ins ((T(_, _, xk, x, _), r), n, result) = + ins(next r, n+1, addItem(xk, x, result)) + in + + (* return a map whose domain is the union of the domains of the two input + * maps, using the supplied function to define the map on elements that + * are in both domains. + *) + fun unionWith mergeFn = let + fun union (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), t2) => ins(t2, n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then union (r1, t2, n+1, addItem(xk, x, result)) + else if (xk = yk) + then union (r1, r2, n+1, addItem(xk, mergeFn(x, y), result)) + else union (t1, r2, n+1, addItem(yk, y, result)) + (* end case *)) + in + wrap union + end + fun unionWithi mergeFn = let + fun union (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), t2) => ins(t2, n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then union (r1, t2, n+1, addItem(xk, x, result)) + else if (xk = yk) + then + union (r1, r2, n+1, addItem(xk, mergeFn(xk, x, y), result)) + else union (t1, r2, n+1, addItem(yk, y, result)) + (* end case *)) + in + wrap union + end + + (* return a map whose domain is the intersection of the domains of the + * two input maps, using the supplied function to define the range. + *) + fun intersectWith mergeFn = let + fun intersect (t1, t2, n, result) = (case (next t1, next t2) + of ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then intersect (r1, t2, n, result) + else if (xk = yk) + then intersect ( + r1, r2, n+1, addItem(xk, mergeFn(x, y), result)) + else intersect (t1, r2, n, result) + | _ => (n, result) + (* end case *)) + in + wrap intersect + end + fun intersectWithi mergeFn = let + fun intersect (t1, t2, n, result) = (case (next t1, next t2) + of ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then intersect (r1, t2, n, result) + else if (xk = yk) + then intersect (r1, r2, n+1, + addItem(xk, mergeFn(xk, x, y), result)) + else intersect (t1, r2, n, result) + | _ => (n, result) + (* end case *)) + in + wrap intersect + end + + fun mergeWith mergeFn = let + fun merge (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), (T(_, _, yk, y, _), r2)) => + mergef(yk, NONE, SOME y, t1, r2, n, result) + | ((T(_, _, xk, x, _), r1), (E, _)) => + mergef(xk, SOME x, NONE, r1, t2, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then mergef(xk, SOME x, NONE, r1, t2, n, result) + else if (xk = yk) + then mergef(xk, SOME x, SOME y, r1, r2, n, result) + else mergef(yk, NONE, SOME y, t1, r2, n, result) + (* end case *)) + and mergef (k, x1, x2, r1, r2, n, result) = (case mergeFn(x1, x2) + of NONE => merge (r1, r2, n, result) + | SOME y => merge (r1, r2, n+1, addItem(k, y, result)) + (* end case *)) + in + wrap merge + end + fun mergeWithi mergeFn = let + fun merge (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), (T(_, _, yk, y, _), r2)) => + mergef(yk, NONE, SOME y, t1, r2, n, result) + | ((T(_, _, xk, x, _), r1), (E, _)) => + mergef(xk, SOME x, NONE, r1, t2, n, result) + | ((T(_, _, xk, x, _), r1), (T(_, _, yk, y, _), r2)) => + if (xk < yk) + then mergef(xk, SOME x, NONE, r1, t2, n, result) + else if (xk = yk) + then mergef(xk, SOME x, SOME y, r1, r2, n, result) + else mergef(yk, NONE, SOME y, t1, r2, n, result) + (* end case *)) + and mergef (k, x1, x2, r1, r2, n, result) = (case mergeFn(k, x1, x2) + of NONE => merge (r1, r2, n, result) + | SOME y => merge (r1, r2, n+1, addItem(k, y, result)) + (* end case *)) + in + wrap merge + end + end (* local *) + + fun app f = let + fun appf E = () + | appf (T(_, a, _, x, b)) = (appf a; f x; appf b) + in + fn (MAP(_, m)) => appf m + end + fun appi f = let + fun appf E = () + | appf (T(_, a, xk, x, b)) = (appf a; f(xk, x); appf b) + in + fn (MAP(_, m)) => appf m + end + + fun map f = let + fun mapf E = E + | mapf (T(color, a, xk, x, b)) = + T(color, mapf a, xk, f x, mapf b) + in + fn (MAP(n, m)) => MAP(n, mapf m) + end + fun mapi f = let + fun mapf E = E + | mapf (T(color, a, xk, x, b)) = + T(color, mapf a, xk, f(xk, x), mapf b) + in + fn (MAP(n, m)) => MAP(n, mapf m) + end + + (* Filter out those elements of the map that do not satisfy the + * predicate. The filtering is done in increasing map order. + *) + fun filter pred (MAP(_, t)) = let + fun walk (E, n, result) = (n, result) + | walk (T(_, a, xk, x, b), n, result) = let + val (n, result) = walk(a, n, result) + in + if (pred x) + then walk(b, n+1, addItem(xk, x, result)) + else walk(b, n, result) + end + val (n, result) = walk (t, 0, ZERO) + in + MAP(n, linkAll result) + end + fun filteri pred (MAP(_, t)) = let + fun walk (E, n, result) = (n, result) + | walk (T(_, a, xk, x, b), n, result) = let + val (n, result) = walk(a, n, result) + in + if (pred(xk, x)) + then walk(b, n+1, addItem(xk, x, result)) + else walk(b, n, result) + end + val (n, result) = walk (t, 0, ZERO) + in + MAP(n, linkAll result) + end + + (* map a partial function over the elements of a map in increasing + * map order. + *) + fun mapPartial f = let + fun f' (xk, x, m) = (case f x + of NONE => m + | (SOME y) => insert(m, xk, y) + (* end case *)) + in + foldli f' empty + end + fun mapPartiali f = let + fun f' (xk, x, m) = (case f(xk, x) + of NONE => m + | (SOME y) => insert(m, xk, y) + (* end case *)) + in + foldli f' empty + end + + (* check the elements of a map with a predicate and return true if + * any element satisfies the predicate. Return false otherwise. + * Elements are checked in key order. + *) + fun exists pred = let + fun exists' E = false + | exists' (T(_, a, _, x, b)) = exists' a orelse pred x orelse exists' b + in + fn (MAP(_, m)) => exists' m + end + fun existsi pred = let + fun exists' E = false + | exists' (T(_, a, k, x, b)) = exists' a orelse pred(k, x) orelse exists' b + in + fn (MAP(_, m)) => exists' m + end + + (* check the elements of a map with a predicate and return true if + * they all satisfy the predicate. Return false otherwise. Elements + * are checked in key order. + *) + fun all pred = let + fun all' E = true + | all' (T(_, a, _, x, b)) = all' a andalso pred x andalso all' b + in + fn (MAP(_, m)) => all' m + end + fun alli pred = let + fun all' E = true + | all' (T(_, a, k, x, b)) = all' a andalso pred(k, x) andalso all' b + in + fn (MAP(_, m)) => all' m + end + + end (* structure WordRedBlackMap *) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/word-redblack-set.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/word-redblack-set.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/Util/word-redblack-set.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/Util/word-redblack-set.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,515 @@ +(* word-redblack-set.sml + * + * COPYRIGHT (c) 2014 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * COPYRIGHT (c) 1999 Bell Labs, Lucent Technologies. + * + * This code is based on Chris Okasaki's implementation of + * red-black trees. The linear-time tree construction code is + * based on the paper "Constructing red-black trees" by Hinze, + * and the delete function is based on the description in Cormen, + * Leiserson, and Rivest. + * + * A red-black tree should satisfy the following two invariants: + * + * Red Invariant: each red node has black children (empty nodes are + * considered black). + * + * Black Invariant: each path from the root to an empty node has the + * same number of black nodes (the tree's black height). + * + * The Black invariant implies that any node with only one child + * will be black and its child will be a red leaf. + *) + +structure WordRedBlackSet :> ORD_SET where type Key.ord_key = word = + struct + + structure Key = + struct + type ord_key = word + val compare = Word.compare + end + + type item = Key.ord_key + + datatype color = R | B + + datatype tree + = E + | T of (color * tree * item * tree) + + datatype set = SET of (int * tree) + + fun isEmpty (SET(_, E)) = true + | isEmpty _ = false + + val empty = SET(0, E) + + fun minItem (SET(_, tr)) = let + fun min E = raise Empty + | min (T(_, E, item, _)) = item + | min (T(_, tr, _, _)) = min tr + in + min tr + end + + fun maxItem (SET(_, tr)) = let + fun max E = raise Empty + | max (T(_, _, item, E)) = item + | max (T(_, _, _, tr)) = max tr + in + max tr + end + + fun singleton x = SET(1, T(B, E, x, E)) + + fun add (SET(nItems, m), x) = let + val nItems' = ref nItems + fun ins E = (nItems' := nItems+1; T(R, E, x, E)) + | ins (s as T(color, a, y, b)) = + if (x < y) + then (case a + of T(R, c, z, d) => + if (x < z) + then (case ins c + of T(R, e, w, f) => T(R, T(B,e,w,f), z, T(B,d,y,b)) + | c => T(B, T(R,c,z,d), y, b) + (* end case *)) + else if (x = z) + then T(color, T(R, c, x, d), y, b) + else (case ins d + of T(R, e, w, f) => T(R, T(B,c,z,e), w, T(B,f,y,b)) + | d => T(B, T(R,c,z,d), y, b) + (* end case *)) + | _ => T(B, ins a, y, b) + (* end case *)) + else if (x = y) + then T(color, a, x, b) + else (case b + of T(R, c, z, d) => + if (x < z) + then (case ins c + of T(R, e, w, f) => T(R, T(B,a,y,e), w, T(B,f,z,d)) + | c => T(B, a, y, T(R,c,z,d)) + (* end case *)) + else if (x = z) + then T(color, a, y, T(R, c, x, d)) + else (case ins d + of T(R, e, w, f) => T(R, T(B,a,y,c), z, T(B,e,w,f)) + | d => T(B, a, y, T(R,c,z,d)) + (* end case *)) + | _ => T(B, a, y, ins b) + (* end case *)) + val T(_, a, y, b) = ins m + in + SET(!nItems', T(B, a, y, b)) + end + fun add' (x, m) = add (m, x) + + fun addList (s, []) = s + | addList (s, x::r) = addList(add(s, x), r) + + (* Remove an item. Raises LibBase.NotFound if not found. *) + local + datatype zipper + = TOP + | LEFT of (color * item * tree * zipper) + | RIGHT of (color * tree * item * zipper) + in + fun delete (SET(nItems, t), k) = let + (* zip the zipper *) + fun zip (TOP, t) = t + | zip (LEFT(color, x, b, p), a) = zip(p, T(color, a, x, b)) + | zip (RIGHT(color, a, x, p), b) = zip(p, T(color, a, x, b)) + (* zip the zipper while resolving a black deficit *) + fun fixupZip (TOP, t) = (true, t) + (* case 1 from CLR *) + | fixupZip (LEFT(B, x, T(R, a, y, b), p), t) = (case a + of T(_, T(R, a11, w, a12), z, a2) => (* case 1L ==> case 3L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, x, a11), w, T(B, a12, z, a2)), y, b))) + | T(_, a1, z, T(R, a21, w, t22)) => (* case 1L ==> case 4L *) + (false, zip (p, T(B, T(R, T(B, t, x, a1), z, T(B, a21, w, t22)), y, b))) + | T(_, a1, z, a2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, T(B, t, x, T(R, a1, z, a2)), y, b))) + | _ => fixupZip (LEFT(R, x, a, LEFT(B, y, b, p)), t) + (* end case *)) + | fixupZip (RIGHT(B, T(R, a, x, b), y, p), t) = (case b + of T(_, b1, z, T(R, b21, w, b22)) => (* case 1R ==> case 3R ==> case 4R *) + (false, zip (p, T(B, a, x, T(R, T(B, b1, z, b21), w, T(B, b22, y, t))))) + | T(_, T(R, b11, w, b12), z, b2) => (* case 1R ==> case 4R *) + (false, zip (p, T(B, a, x, T(R, T(B, b11, w, b12), z, T(B, b2, y, t))))) + | T(_, b1, z, b2) => (* case 1L ==> case 2L; rotate + recolor fixes deficit *) + (false, zip (p, T(B, a, x, T(B, T(R, b1, z, b2), y, t)))) + | _ => fixupZip (RIGHT(R, b, y, RIGHT(B, a, x, p)), t) + (* end case *)) + (* case 3 from CLR *) + | fixupZip (LEFT(color, x, T(B, T(R, a1, y, a2), z, b), p), t) = + (* case 3L ==> case 4L *) + (false, zip (p, T(color, T(B, t, x, a1), y, T(B, a2, z, b)))) + | fixupZip (RIGHT(color, T(B, a, x, T(R, b1, y, b2)), z, p), t) = + (* case 3R ==> case 4R; rotate, recolor, plus rotate fixes deficit *) + (false, zip (p, T(color, T(B, a, x, b1), y, T(B, b2, z, t)))) + (* case 4 from CLR *) + | fixupZip (LEFT(color, x, T(B, a, y, T(R, b1, z, b2)), p), t) = + (false, zip (p, T(color, T(B, t, x, a), y, T(B, b1, z, b2)))) + | fixupZip (RIGHT(color, T(B, T(R, a1, z, a2), x, b), y, p), t) = + (false, zip (p, T(color, T(B, a1, z, a2), x, T(B, b, y, t)))) + (* case 2 from CLR; note that "a" and "b" are guaranteed to be black, since we did + * not match cases 3 or 4. + *) + | fixupZip (LEFT(R, x, T(B, a, y, b), p), t) = + (false, zip (p, T(B, t, x, T(R, a, y, b)))) + | fixupZip (LEFT(B, x, T(B, a, y, b), p), t) = + fixupZip (p, T(B, t, x, T(R, a, y, b))) + | fixupZip (RIGHT(R, T(B, a, x, b), y, p), t) = + (false, zip (p, T(B, T(R, a, x, b), y, t))) + | fixupZip (RIGHT(B, T(B, a, x, b), y, p), t) = + fixupZip (p, T(B, T(R, a, x, b), y, t)) + (* push deficit up the tree by recoloring a black node as red *) + | fixupZip (LEFT(_, y, E, p), t) = fixupZip (p, T(R, t, y, E)) + | fixupZip (RIGHT(_, E, y, p), t) = fixupZip (p, T(R, E, y, t)) + (* impossible cases that violate the red invariant *) + | fixupZip _ = raise Fail "Red invariant violation" + (* delete the minimum value from a non-empty tree, returning a triple + * (elem, bd, tr), where elem is the minimum element, tr is the residual + * tree with elem removed, and bd is true if tr has a black-depth that is + * less than the original tree. + *) + fun delMin (T(R, E, y, b), p) = + (* replace the node by its right subtree (which must be E) *) + (y, false, zip(p, b)) + | delMin (T(B, E, y, T(R, a', y', b')), p) = + (* replace the node with its right child, while recoloring the child black to + * preserve the black invariant. + *) + (y, false, zip (p, T(B, a', y', b'))) + | delMin (T(B, E, y, E), p) = let + (* delete the node, which reduces the black-depth by one, so we attempt to fix + * the deficit on the path back. + *) + val (blkDeficit, t) = fixupZip (p, E) + in + (y, blkDeficit, t) + end + | delMin (T(color, a, y, b), z) = delMin(a, LEFT(color, y, b, z)) + | delMin (E, _) = raise Match + fun del (E, z) = raise LibBase.NotFound + | del (T(color, a, y, b), p) = + if (k < y) + then del (a, LEFT(color, y, b, p)) + else if (k = y) + then (case (color, a, b) + of (R, E, E) => zip(p, E) + | (B, E, E) => #2 (fixupZip (p, E)) + | (_, T(_, a', y', b'), E) => + (* node is black and left child is red; we replace the node with its + * left child recolored to black. + *) + zip(p, T(B, a', y', b')) + | (_, E, T(_, a', y', b')) => + (* node is black and right child is red; we replace the node with its + * right child recolored to black. + *) + zip(p, T(B, a', y', b')) + | _ => let + val (minSucc, blkDeficit, b) = delMin (b, TOP) + in + if blkDeficit + then #2 (fixupZip (RIGHT(color, a, minSucc, p), b)) + else zip (p, T(color, a, minSucc, b)) + end + (* end case *)) + else del (b, RIGHT(color, a, y, p)) + in + case del(t, TOP) + of T(R, a, x, b) => SET(nItems-1, T(B, a, x, b)) + | t => SET(nItems-1, t) + (* end case *) + end + end (* local *) + + (* Return true if and only if item is an element in the set *) + fun member (SET(_, t), k) = let + fun find' E = false + | find' (T(_, a, y, b)) = + (k = y) orelse ((k < y) andalso find' a) orelse find' b + in + find' t + end + + (* Return the number of items in the map *) + fun numItems (SET(n, _)) = n + + fun foldl f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, x, b), accum) = + foldf(b, f(x, foldf(a, accum))) + in + fn init => fn (SET(_, m)) => foldf(m, init) + end + + fun foldr f = let + fun foldf (E, accum) = accum + | foldf (T(_, a, x, b), accum) = + foldf(a, f(x, foldf(b, accum))) + in + fn init => fn (SET(_, m)) => foldf(m, init) + end + + (* return an ordered list of the items in the set. *) + fun toList s = foldr (fn (x, l) => x::l) [] s + + (* functions for walking the tree while keeping a stack of parents + * to be visited. + *) + fun next ((t as T(_, _, _, b))::rest) = (t, left(b, rest)) + | next _ = (E, []) + and left (E, rest) = rest + | left (t as T(_, a, _, _), rest) = left(a, t::rest) + fun start m = left(m, []) + + (* Return true if and only if the two sets are equal *) + fun equal (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => true + | ((E, _), _) => false + | (_, (E, _)) => false + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + (x = y) andalso cmp (r1, r2) + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return the lexical order of two sets *) + fun compare (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => EQUAL + | ((E, _), _) => LESS + | (_, (E, _)) => GREATER + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + if (x = y) + then cmp (r1, r2) + else if (x < y) + then LESS + else GREATER + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return true if and only if the first set is a subset of the second *) + fun isSubset (SET(_, s1), SET(_, s2)) = let + fun cmp (t1, t2) = (case (next t1, next t2) + of ((E, _), (E, _)) => true + | ((E, _), _) => true + | (_, (E, _)) => false + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + ((x = y) andalso cmp (r1, r2)) + orelse ((x > y) andalso cmp (t1, r2)) + (* end case *)) + in + cmp (start s1, start s2) + end + + (* Return true if the two sets are disjoint *) + fun disjoint (SET(0, _), _) = true + | disjoint (_, SET(0, _)) = true + | disjoint (SET(_, s1), SET(_, s2)) = let + fun walk ((E, _), _) = true + | walk (_, (E, _)) = true + | walk (t1 as (T(_, _, x, _), r1), t2 as (T(_, _, y, _), r2)) = + ((x < y) andalso walk (next r1, t2)) + orelse ((x > y) andalso walk (t1, next r2)) + in + walk (next (start s1), next (start s2)) + end + + (* support for constructing red-black trees in linear time from increasing + * ordered sequences (based on a description by R. Hinze). Note that the + * elements in the digits are ordered with the largest on the left, whereas + * the elements of the trees are ordered with the largest on the right. + *) + datatype digit + = ZERO + | ONE of (item * tree * digit) + | TWO of (item * tree * item * tree * digit) + (* add an item that is guaranteed to be larger than any in l *) + fun addItem (a, l) = let + fun incr (a, t, ZERO) = ONE(a, t, ZERO) + | incr (a1, t1, ONE(a2, t2, r)) = TWO(a1, t1, a2, t2, r) + | incr (a1, t1, TWO(a2, t2, a3, t3, r)) = + ONE(a1, t1, incr(a2, T(B, t3, a3, t2), r)) + in + incr(a, E, l) + end + (* link the digits into a tree *) + fun linkAll t = let + fun link (t, ZERO) = t + | link (t1, ONE(a, t2, r)) = link(T(B, t2, a, t1), r) + | link (t, TWO(a1, t1, a2, t2, r)) = + link(T(B, T(R, t2, a2, t1), a1, t), r) + in + link (E, t) + end + + (* create a set from a list of items; this function works in linear time if the list + * is in increasing order. + *) + fun fromList [] = empty + | fromList (first::rest) = let + fun add (prev, x::xs, n, accum) = if (prev < x) + then add(x, xs, n+1, addItem(x, accum)) + else (* list not in order, so fall back to addList code *) + addList(SET(n, linkAll accum), x::xs) + | add (_, [], n, accum) = SET(n, linkAll accum) + in + add (first, rest, 1, addItem(first, ZERO)) + end + + (* return the union of the two sets *) + fun union (SET(_, s1), SET(_, s2)) = let + fun ins ((E, _), n, result) = (n, result) + | ins ((T(_, _, x, _), r), n, result) = + ins(next r, n+1, addItem(x, result)) + fun union' (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), (E, _)) => (n, result) + | ((E, _), t2) => ins(t2, n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + if (x < y) + then union' (r1, t2, n+1, addItem(x, result)) + else if (x = y) + then union' (r1, r2, n+1, addItem(x, result)) + else union' (t1, r2, n+1, addItem(y, result)) + (* end case *)) + val (n, result) = union' (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + (* return the intersection of the two sets *) + fun intersection (SET(_, s1), SET(_, s2)) = let + fun intersect (t1, t2, n, result) = (case (next t1, next t2) + of ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + if (x < y) + then intersect (r1, t2, n, result) + else if (x = y) + then intersect (r1, r2, n+1, addItem(x, result)) + else intersect (t1, r2, n, result) + | _ => (n, result) + (* end case *)) + val (n, result) = intersect (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + (* return the set difference *) + fun difference (SET(_, s1), SET(_, s2)) = let + fun ins ((E, _), n, result) = (n, result) + | ins ((T(_, _, x, _), r), n, result) = + ins(next r, n+1, addItem(x, result)) + fun diff (t1, t2, n, result) = (case (next t1, next t2) + of ((E, _), _) => (n, result) + | (t1, (E, _)) => ins(t1, n, result) + | ((T(_, _, x, _), r1), (T(_, _, y, _), r2)) => + if (x < y) + then diff (r1, t2, n+1, addItem(x, result)) + else if (x = y) + then diff (r1, r2, n, result) + else diff (t1, r2, n, result) + (* end case *)) + val (n, result) = diff (start s1, start s2, 0, ZERO) + in + SET(n, linkAll result) + end + + fun subtract (s, item) = difference (s, singleton item) + fun subtract' (item, s) = subtract (s, item) + + fun subtractList (l, items) = let + val items' = List.foldl (fn (x, set) => add(set, x)) (SET(0, E)) items + in + difference (l, items') + end + + fun app f = let + fun appf E = () + | appf (T(_, a, x, b)) = (appf a; f x; appf b) + in + fn (SET(_, m)) => appf m + end + + fun map f = let + fun addf (x, m) = add(m, f x) + in + foldl addf empty + end + + fun mapPartial f = let + fun f' (x, acc) = (case f x of SOME x' => add(acc, x') | NONE => acc) + in + foldl f' empty + end + + (* Filter out those elements of the set that do not satisfy the + * predicate. The filtering is done in increasing map order. + *) + fun filter pred (SET(_, t)) = let + fun walk (E, n, result) = (n, result) + | walk (T(_, a, x, b), n, result) = let + val (n, result) = walk(a, n, result) + in + if (pred x) + then walk(b, n+1, addItem(x, result)) + else walk(b, n, result) + end + val (n, result) = walk (t, 0, ZERO) + in + SET(n, linkAll result) + end + + fun partition pred (SET(_, t)) = let + fun walk (E, n1, result1, n2, result2) = (n1, result1, n2, result2) + | walk (T(_, a, x, b), n1, result1, n2, result2) = let + val (n1, result1, n2, result2) = walk(a, n1, result1, n2, result2) + in + if (pred x) + then walk(b, n1+1, addItem(x, result1), n2, result2) + else walk(b, n1, result1, n2+1, addItem(x, result2)) + end + val (n1, result1, n2, result2) = walk (t, 0, ZERO, 0, ZERO) + in + (SET(n1, linkAll result1), SET(n2, linkAll result2)) + end + + fun exists pred = let + fun test E = false + | test (T(_, a, x, b)) = test a orelse pred x orelse test b + in + fn (SET(_, t)) => test t + end + + fun all pred = let + fun test E = true + | test (T(_, a, x, b)) = test a andalso pred x andalso test b + in + fn (SET(_, t)) => test t + end + + fun find pred = let + fun test E = NONE + | test (T(_, a, x, b)) = (case test a + of NONE => if pred x then SOME x else test b + | someItem => someItem + (* end case *)) + in + fn (SET(_, t)) => test t + end + + (* deprecated *) + val listItems = toList + + end; diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/UUID/gen-uuid.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/UUID/gen-uuid.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/UUID/gen-uuid.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/UUID/gen-uuid.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,67 @@ +(* gen-uuid.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure GenUUID : sig + + (* generate a new Variant 1, Type 4 UUID. *) + val new : unit -> UUID.t + + end = struct + + structure W8V = Word8Vector + + (* maximum `int` value plus 1 *) + val maxInt = IntInf.fromInt (valOf Int.maxInt) + 1 + + (* get the current time as (seconds, useconds) *) + fun getTime () = IntInf.divMod (Time.toMicroseconds(Time.now()), 1000000) + + fun seedRand () = let + val (secs, usecs) = getTime () + (* initial random seed *) + val r = Random.rand (Int.fromLarge(secs mod maxInt), Int.fromLarge usecs) + (* run the random number generator a few steps *) + val r = let + val n = let val (s, us) = getTime() + in + IntInf.andb(IntInf.xorb(secs, usecs), 0x1F) + end + fun lp 0 = r + | lp i = (ignore (Random.randInt r); lp (i-1)) + in + lp n + end + in + r + end + + fun randByte r () = let + val w = LargeWord.fromInt(Random.randInt r) + in + Word8.fromLargeWord(LargeWord.>>(w, 0w7)) + end + + (* generate a Variant 1, Type 4 UUID. *) + fun new () = let + val randByte = randByte (seedRand()) + fun gen 6 = let + (* byte 6 has the version (0b0100) in the upper 4 bits *) + val b = randByte() + in + Word8.orb(0wx40, Word8.andb(b, 0wxF)) + end + | gen 8 = let + (* byte 8 has the variant (0b10) in the upper 2 bits *) + val b = randByte() + in + Word8.orb(0wx80, Word8.andb(b, 0wx3F)) + end + | gen _ = randByte() + in + UUID.fromBytes (W8V.tabulate(16, gen)) + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/UUID/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/UUID/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/UUID/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/UUID/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,8 @@ +This is a library for generating "Universally Unique IDentifiers" (UUIDs). +It currently only supports generating Variant 1, Type 4 UUIDs, which +are random bit strings (these are the UUIDs generated by the `NewGuid` +function on Microsoft Windows). + +See https://en.wikipedia.org/wiki/Universally_unique_identifier for +more information about GUIDs. + diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/UUID/uuid-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/UUID/uuid-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/UUID/uuid-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/UUID/uuid-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,20 @@ +(* uuid-lib.cm + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Sources file for UUID library. + *) + +Library + + structure UUID + structure GenUUID + +is + + $/basis.cm + $/smlnj-lib.cm + + gen-uuid.sml + uuid.sml diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/UUID/uuid-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/UUID/uuid-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/UUID/uuid-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/UUID/uuid-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,163 @@ + +ann + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" +in + +local + basis l4 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb + end + basis l8 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + open l4 + in + structure gs_0 = Word8Vector + end + local + open l8 + in + structure gs_1 = Random + end + local + open l4 + in + structure gs_2 = Char + structure gs_3 = CharArray + structure gs_4 = CharVector + structure gs_5 = FixedInt + structure gs_6 = General + structure gs_7 = Int + structure gs_8 = Int32 + structure gs_9 = Int64 + structure gs_10 = IntInf + structure gs_11 = LargeInt + structure gs_12 = LargeReal + structure gs_13 = LargeWord + structure gs_14 = OS + structure gs_15 = Position + structure gs_16 = Real + structure gs_17 = Real64 + structure gs_18 = RealArray + structure gs_19 = RealArraySlice + structure gs_20 = RealVector + structure gs_21 = RealVectorSlice + structure gs_22 = SMLofNJ + structure gs_23 = Socket + structure gs_24 = String + structure gs_25 = Substring + structure gs_26 = SysWord + structure gs_27 = Time + structure gs_28 = Word + structure gs_29 = Word32 + structure gs_30 = Word64 + structure gs_31 = Word8 + end + local + open l4 + in + structure gs_32 = Word8VectorSlice + end + local + open l4 + in + structure gs_33 = List + end + local + open l4 + in + structure gs_34 = StringCvt + end + local + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure List = gs_33 + structure OS = gs_14 + structure Position = gs_15 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure StringCvt = gs_34 + structure Substring = gs_25 + structure SysWord = gs_26 + structure Time = gs_27 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + structure Word8Vector = gs_0 + structure Word8VectorSlice = gs_32 + uuid.sml + in + structure gs_35 = UUID + end + local + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure OS = gs_14 + structure Position = gs_15 + structure Random = gs_1 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure Time = gs_27 + structure UUID = gs_35 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + structure Word8Vector = gs_0 + gen-uuid.sml + in + structure gs_36 = GenUUID + end +in + structure GenUUID = gs_36 + structure UUID = gs_35 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/UUID/uuid.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/UUID/uuid.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/UUID/uuid.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/UUID/uuid.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,132 @@ +(* uuid.sml + * + * COPYRIGHT (c) 2020 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * An implementation of Universally Unique IDs (UUIDs). To generate + * UUIDs, use the GenUUID structure. + *) + +structure UUID :> sig + + type t + + (* the all-zeros UUID *) + val null : t + + (* compare two UUIDs *) + val compare : t * t -> order + + (* are two UUIDs the same *) + val same : t * t -> bool + + (* hash a UUID; we use the 64-bit FNV-1a hash function for this purpose *) + val hash : t -> word + + (* format the UUID as "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" where each "x" is + * a lower-case hexadecimal digit. + *) + val toString : t -> string + + (* convert a string of the form produced by `toString` to a UUID value; leading whitespace + * is ignored. + *) + val fromString : string -> t option + + (* return the UUID as a big-endian sequence of bytes *) + val toBytes : t -> Word8Vector.vector + + (* convert a 16-element byte vector to a UUID. The Size exception is raised + * if the length of the vector is not exactly 16 bytes. Otherwise, there is + * no validity chechking of the UUID (i.e., the variant and type are not checked). + *) + val fromBytes : Word8Vector.vector -> t + + end = struct + + structure W8V = Word8Vector + structure W8VS = Word8VectorSlice + structure SS = Substring + + type t = W8V.vector + + val null : t = W8V.tabulate(16, fn _ => 0w0) + + (* compare two UUIDs *) + val compare = W8V.collate Word8.compare + + fun same (uuid1 : t, uuid2 : t) = (uuid1 = uuid2) + +(* NOTE: For 110.98, we can switch to using the new FNVHash module in the Util library *) + (* hash a UUID; we use the 64-bit FNV-1a hash function for this purpose *) + fun hash uuid = let + val offsetBasis : Word64.word = 0wxcbf29ce484222325 + val prime : Word64.word = 0wx00000100000001B3 + fun hashByte (b, h) = + Word64.xorb (Word64.fromLargeWord(Word8.toLargeWord b), h) * prime + in + Word.fromLarge(W8V.foldl hashByte offsetBasis uuid) + end + + fun toString (uuid : t) = let + fun n2c b = String.sub("0123456789abcdef", Word8.toInt b) + fun b2list (b, l) = n2c(Word8.>>(b, 0w4)) :: n2c(Word8.andb(b, 0wxf)) :: l + fun slice2list (start, len, l) = + W8VS.foldr b2list l (W8VS.slice(uuid, start, SOME len)) + val chrs = slice2list (10, 6, []) + val chrs = slice2list (8, 2, #"-" :: chrs) + val chrs = slice2list (6, 2, #"-" :: chrs) + val chrs = slice2list (4, 2, #"-" :: chrs) + val chrs = slice2list (0, 4, #"-" :: chrs) + in + String.implode chrs + end + + local + (* the lengths of the fields *) + val fieldLens = [8, 4, 4, 4, 12] + val scan8 = Word8.scan StringCvt.HEX SS.getc + (* converts a list of fields to a list of bytes. If there is the wrong number of + * fields, or an incorrect length field, or a invalid digit, then `NONE` is + * returned. + *) + fun fields2bytes flds = let + fun toBytes ([], [], bytes) = SOME(List.rev bytes) + | toBytes (fld::flds, len::lens, bytes) = if SS.size fld <> len + then NONE + else let + fun lp (ss, bytes) = if SS.isEmpty ss + then toBytes (flds, lens, bytes) + else let + val (b, rest) = SS.splitAt (ss, 2) + in + case scan8 b + of SOME(b, _) => lp (rest, b::bytes) + | NONE => NONE + end + in + lp (fld, bytes) + end + | toBytes _ = NONE + in + toBytes (flds, fieldLens, []) + end + val splitFields = SS.fields (fn #"-" => true | _ => false) + in + fun fromString s = let + val ss = StringCvt.skipWS SS.getc (SS.full s) + in + (* the length of the UUID should be 36 characters (32 digits plus four "-"s) *) + if (SS.size ss >= 36) + then (case fields2bytes(splitFields (SS.slice(ss, 0, SOME 36))) + of SOME bytes => SOME(W8V.fromList bytes) + | _ => NONE + (* end case *)) + else NONE + end + end (* local *) + + fun toBytes uuid = uuid + fun fromBytes v = if (W8V.length v <> 16) then raise Size else v + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/generic-xml-tree.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/generic-xml-tree.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/generic-xml-tree.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/generic-xml-tree.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,43 @@ +(* generic-xml-tree.sml + * + * COPYRIGHT (c) 2013 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * This is a generic instantiation of the XMLTreeFn with a representation of + * elements and attributes as Atom.atom values. It does not preserve whitespace. + *) + +structure GenericXMLTree : XML_TREE + where type Schema.element = Atom.atom + where type Schema.attribute = Atom.atom * string + = struct + local + structure Schema = + struct + + type element = Atom.atom + type attribute = (Atom.atom * string) + + (* create an element; returns NONE if the element name is unrecognized *) + fun element s = SOME(Atom.atom(CharVector.map Char.toUpper s)) + + (* should leading and trailing whitespace be preserved in the content of this element? *) + fun preserveWS _ = false + + (* should comments be preserved *) + fun preserveComment _ = false + + (* equality test *) + val same = Atom.same + + val toString = Atom.toString + + (* create an attribute from a name/value pair *) + fun attribute (id, value) = (Atom.atom id, value) + + end + structure Tree = XMLTreeFn (Schema) + in + open Tree + end (* local *) + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/README mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/README --- mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,22 @@ +This directory contains a small library for parsing XML files. It does +not support validation (e.g., against a DTD or Schema). The basic idea +is that the user supplies a "schema" module that describes the elements +and attribute representation of an XML document. From this, one builds +an XML tree representation + + structure MyXMLTree = XMLTreeFn (MyXMLSchema); + +and an XML parser + + structure MyXMLParser = XMLParserFn (MyXMLTree); + +A generic XML schema (that allows any element name) is provided. + +For a more complete library for XML processing, use the fxp library. + +TODO: + handle internal subsets in "" definitions + handle processing markup ("") + support a SAX-type parsing interface + support a DOM API a la TinyXML (http://www.grinninglizard.com/tinyxml) + or TinyXML-2 (http://www.grinninglizard.com/tinyxml2/) diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-lexer.lex mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-lexer.lex --- mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-lexer.lex 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-lexer.lex 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,119 @@ +(* xml-lexer.lex + * + * COPYRIGHT (c) 2013 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * An ML-ULex parser for parsing XML files. + * + * TODO: line ending normalization? + *) + +%name XMLLexer; + +%arg (lexErr); + +%defs ( + structure T = XMLTokens + type lex_result = T.token + fun eof () = T.EOF + +(* list of strings to build attribute values *) + val text : string list ref = ref [] + fun addText s = (text := s :: !text) + fun addDecimalEscape s = addText(UTF8.encode(Word.fromInt(Option.valOf(Int.fromString s)))) + fun addHexEscape s = addText(UTF8.encode(Option.valOf(Word.fromString s))) + fun textToString () = let + val s = String.concat(List.rev(!text)) + in + text := []; s + end + +(* trim m characters from the left and n characters from the right *) + fun trim (m, ss, n) = Substring.string(Substring.triml m (Substring.trimr n ss)) +); + +%let ws = [ \t\n\v\f\r]; +%let digit = [0-9]; +%let alpha = [a-zA-Z]; +%let idstartchr = [a-zA-Z_:]; +%let idchr = ({idstartchr}|[-.0-9]); +%let pubidchr1 = [ \n\n\t] | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]; +%let pubidchr2 = [ \n\n\t] | [a-zA-Z0-9] | [-()+,./:=?;!*#@$_%]; (* without ' *) + +(* the lexer states: + * INITIAL + * COM scanning inside "" => (addText yytext; YYBEGIN INITIAL; T.COM(textToString())); +. => (addText yytext; continue()); + +"<" => (YYBEGIN TAG; T.OPEN_START_TAG); +" (YYBEGIN TAG; T.OPEN_END_TAG); +" (YYBEGIN TAG; T.OPEN_XML_TAG); +" (YYBEGIN DOCTYPE; T.OPEN_DOCTYPE); + +[pP][uU][bB][lL][iI][cC] + => (T.PUBLIC); +[sS][yY][sS][tT][eE][mM] + => (T.SYSTEM); +"\""{pubidchr1}*"\"" => (T.LIT(String.substring(yytext, 1, size yytext - 2))); +"'"{pubidchr2}*"'" => (T.LIT(String.substring(yytext, 1, size yytext - 2))); +">" => (YYBEGIN INITIAL; T.CLOSE_TAG); + +{ws}+ => (skip()); +"?>" => (YYBEGIN INITIAL; T.CLOSE_PI_TAG); +">" => (YYBEGIN INITIAL; T.CLOSE_TAG); +"/>" => (YYBEGIN INITIAL; T.CLOSE_EMPTY_TAG); +"=" => (T.SYM_EQ); +{idstartchr}{idchr}* + => (T.ID yytext); +"\"" => (YYBEGIN LIT1; continue()); +"'" => (YYBEGIN LIT2; continue()); + +"\"" => (YYBEGIN TAG; T.LIT(textToString())); +"\'" => (YYBEGIN TAG; T.LIT(textToString())); +""" => (addText ("\""); continue()); +"<" => (addText ("<"); continue()); +">" => (addText (">"); continue()); +"&" => (addText ("&"); continue()); +"'" => (addText ("'"); continue()); +"&#"[0-9]+";" => (addDecimalEscape(trim(2, yysubstr, 1)); continue()); +"&#x"[a-fA-F0-9]+";" => (addHexEscape(trim(3, yysubstr, 1)); continue()); +[^"<>&]+ => (addText yytext; continue()); +[^'<>&]+ => (addText yytext; continue()); + +(* we handle whitespace specially, so that initial/trailing whitespace can be preserved + * when necessary. + *) +{ws}+ => (T.WS yytext); +[^ \n\t\r<&]+ => (T.TEXT yytext); +""" => (T.TEXT "\""); +"<" => (T.TEXT "<"); +">" => (T.TEXT ">"); +"&" => (T.TEXT "&"); +"'" => (T.TEXT "'"); +"" => (T.CDATA(trim (9, yysubstr, 3))); + +. => (lexErr(yypos, [ + "bad character `", String.toString yytext, "'" + ]); + continue()); +. => (lexErr(yypos, [ + "bad character `", String.toString yytext, "' in DOCTYPE" + ]); + continue()); +. => (lexErr(yypos, [ + "bad character `", String.toString yytext, "' in tag" + ]); + continue()); +. => (lexErr(yypos, [ + "bad character `", String.toString yytext, "' in attribute value" + ]); + continue()); diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-lexer.lex.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-lexer.lex.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-lexer.lex.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-lexer.lex.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2263 @@ +structure XMLLexer = struct + + datatype yystart_state = +DOCTYPE | COM | LIT2 | LIT1 | INITIAL | TAG + local + + structure UserDeclarations = + struct + + + structure T = XMLTokens + type lex_result = T.token + fun eof () = T.EOF + +(* list of strings to build attribute values *) + val text : string list ref = ref [] + fun addText s = (text := s :: !text) + fun addDecimalEscape s = addText(UTF8.encode(Word.fromInt(Option.valOf(Int.fromString s)))) + fun addHexEscape s = addText(UTF8.encode(Option.valOf(Word.fromString s))) + fun textToString () = let + val s = String.concat(List.rev(!text)) + in + text := []; s + end + +(* trim m characters from the left and n characters from the right *) + fun trim (m, ss, n) = Substring.string(Substring.triml m (Substring.trimr n ss)) + + end + + datatype yymatch + = yyNO_MATCH + | yyMATCH of ULexBuffer.stream * action * yymatch + withtype action = ULexBuffer.stream * yymatch -> UserDeclarations.lex_result + + val yytable : ((UTF8.wchar * UTF8.wchar * int) list * int list) Vector.vector = +Vector.fromList [] + fun yystreamify' p input = ULexBuffer.mkStream (p, input) + + fun yystreamifyReader' p readFn strm = let + val s = ref strm + fun iter(strm, n, accum) = + if n > 1024 then (String.implode (rev accum), strm) + else (case readFn strm + of NONE => (String.implode (rev accum), strm) + | SOME(c, strm') => iter (strm', n+1, c::accum)) + fun input() = let + val (data, strm) = iter(!s, 0, []) + in + s := strm; + data + end + in + yystreamify' p input + end + + fun yystreamifyInstream' p strm = yystreamify' p (fn ()=>TextIO.input strm) + + fun innerLex +(yyarg as lexErr)(yystrm_, yyss_, yysm) = let + (* current start state *) + val yyss = ref yyss_ + fun YYBEGIN ss = (yyss := ss) + (* current input stream *) + val yystrm = ref yystrm_ + fun yysetStrm strm = yystrm := strm + fun yygetPos() = ULexBuffer.getpos (!yystrm) + fun yystreamify input = yystreamify' (yygetPos()) input + fun yystreamifyReader readFn strm = yystreamifyReader' (yygetPos()) readFn strm + fun yystreamifyInstream strm = yystreamifyInstream' (yygetPos()) strm + (* start position of token -- can be updated via skip() *) + val yystartPos = ref (yygetPos()) + (* get one char of input *) + fun yygetc strm = (case ULexBuffer.getu strm + of (SOME (0w10, s')) => + (AntlrStreamPos.markNewLine yysm (ULexBuffer.getpos strm); + SOME (0w10, s')) + | x => x) + fun yygetList getc strm = let + val get1 = UTF8.getu getc + fun iter (strm, accum) = + (case get1 strm + of NONE => rev accum + | SOME (w, strm') => iter (strm', w::accum) + (* end case *)) + in + iter (strm, []) + end + (* create yytext *) + fun yymksubstr(strm) = ULexBuffer.subtract (strm, !yystrm) + fun yymktext(strm) = Substring.string (yymksubstr strm) + fun yymkunicode(strm) = yygetList Substring.getc (yymksubstr strm) + open UserDeclarations + fun lex () = let + fun yystuck (yyNO_MATCH) = raise Fail "lexer reached a stuck state" + | yystuck (yyMATCH (strm, action, old)) = + action (strm, old) + val yypos = yygetPos() + fun yygetlineNo strm = AntlrStreamPos.lineNo yysm (ULexBuffer.getpos strm) + fun yygetcolNo strm = AntlrStreamPos.colNo yysm (ULexBuffer.getpos strm) + fun yyactsToMatches (strm, [], oldMatches) = oldMatches + | yyactsToMatches (strm, act::acts, oldMatches) = + yyMATCH (strm, act, yyactsToMatches (strm, acts, oldMatches)) + fun yygo actTable = + (fn (~1, _, oldMatches) => yystuck oldMatches + | (curState, strm, oldMatches) => let + val (transitions, finals') = Vector.sub (yytable, curState) + val finals = List.map (fn i => Vector.sub (actTable, i)) finals' + fun tryfinal() = + yystuck (yyactsToMatches (strm, finals, oldMatches)) + fun find (c, []) = NONE + | find (c, (c1, c2, s)::ts) = + if c1 <= c andalso c <= c2 then SOME s + else find (c, ts) + in case yygetc strm + of SOME(c, strm') => + (case find (c, transitions) + of NONE => tryfinal() + | SOME n => + yygo actTable + (n, strm', + yyactsToMatches (strm, finals, oldMatches))) + | NONE => tryfinal() + end) + val yylastwasnref = ref (ULexBuffer.lastWasNL (!yystrm)) + fun continue() = let val yylastwasn = !yylastwasnref in +let +fun yyAction0 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addText yytext; YYBEGIN COM; continue() + end +fun yyAction1 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addText yytext; YYBEGIN INITIAL; T.COM(textToString()) + end +fun yyAction2 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addText yytext; continue() + end +fun yyAction3 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN TAG; T.OPEN_START_TAG) +fun yyAction4 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN TAG; T.OPEN_END_TAG) +fun yyAction5 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN TAG; T.OPEN_XML_TAG) +fun yyAction6 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN DOCTYPE; T.OPEN_DOCTYPE) +fun yyAction7 (strm, lastMatch : yymatch) = (yystrm := strm; T.PUBLIC) +fun yyAction8 (strm, lastMatch : yymatch) = (yystrm := strm; T.SYSTEM) +fun yyAction9 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; T.LIT(String.substring(yytext, 1, size yytext - 2)) + end +fun yyAction10 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; T.LIT(String.substring(yytext, 1, size yytext - 2)) + end +fun yyAction11 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN INITIAL; T.CLOSE_TAG) +fun yyAction12 (strm, lastMatch : yymatch) = (yystrm := strm; skip()) +fun yyAction13 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN INITIAL; T.CLOSE_PI_TAG) +fun yyAction14 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN INITIAL; T.CLOSE_TAG) +fun yyAction15 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN INITIAL; T.CLOSE_EMPTY_TAG) +fun yyAction16 (strm, lastMatch : yymatch) = (yystrm := strm; T.SYM_EQ) +fun yyAction17 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; T.ID yytext + end +fun yyAction18 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN LIT1; continue()) +fun yyAction19 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN LIT2; continue()) +fun yyAction20 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN TAG; T.LIT(textToString())) +fun yyAction21 (strm, lastMatch : yymatch) = (yystrm := strm; + YYBEGIN TAG; T.LIT(textToString())) +fun yyAction22 (strm, lastMatch : yymatch) = (yystrm := strm; + addText ("\""); continue()) +fun yyAction23 (strm, lastMatch : yymatch) = (yystrm := strm; + addText ("<"); continue()) +fun yyAction24 (strm, lastMatch : yymatch) = (yystrm := strm; + addText (">"); continue()) +fun yyAction25 (strm, lastMatch : yymatch) = (yystrm := strm; + addText ("&"); continue()) +fun yyAction26 (strm, lastMatch : yymatch) = (yystrm := strm; + addText ("'"); continue()) +fun yyAction27 (strm, lastMatch : yymatch) = let + val yysubstr = yymksubstr(strm) + in + yystrm := strm; addDecimalEscape(trim(2, yysubstr, 1)); continue() + end +fun yyAction28 (strm, lastMatch : yymatch) = let + val yysubstr = yymksubstr(strm) + in + yystrm := strm; addHexEscape(trim(3, yysubstr, 1)); continue() + end +fun yyAction29 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addText yytext; continue() + end +fun yyAction30 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; addText yytext; continue() + end +fun yyAction31 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; T.WS yytext + end +fun yyAction32 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; T.TEXT yytext + end +fun yyAction33 (strm, lastMatch : yymatch) = (yystrm := strm; T.TEXT "\"") +fun yyAction34 (strm, lastMatch : yymatch) = (yystrm := strm; T.TEXT "<") +fun yyAction35 (strm, lastMatch : yymatch) = (yystrm := strm; T.TEXT ">") +fun yyAction36 (strm, lastMatch : yymatch) = (yystrm := strm; T.TEXT "&") +fun yyAction37 (strm, lastMatch : yymatch) = (yystrm := strm; T.TEXT "'") +fun yyAction38 (strm, lastMatch : yymatch) = let + val yysubstr = yymksubstr(strm) + in + yystrm := strm; T.CDATA(trim (9, yysubstr, 3)) + end +fun yyAction39 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; + lexErr(yypos, [ + "bad character `", String.toString yytext, "'" + ]); + continue() + end +fun yyAction40 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; + lexErr(yypos, [ + "bad character `", String.toString yytext, "' in DOCTYPE" + ]); + continue() + end +fun yyAction41 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; + lexErr(yypos, [ + "bad character `", String.toString yytext, "' in tag" + ]); + continue() + end +fun yyAction42 (strm, lastMatch : yymatch) = let + val yytext = yymktext(strm) + in + yystrm := strm; + lexErr(yypos, [ + "bad character `", String.toString yytext, "' in attribute value" + ]); + continue() + end +fun yyQ128 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction13(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction13(strm, yyNO_MATCH) + (* end case *)) +fun yyQ127 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction41(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3E + then yyQ128(strm', yyMATCH(strm, yyAction41, yyNO_MATCH)) + else yyAction41(strm, yyNO_MATCH) + (* end case *)) +fun yyQ126 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction14(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction14(strm, yyNO_MATCH) + (* end case *)) +fun yyQ125 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction16(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction16(strm, yyNO_MATCH) + (* end case *)) +fun yyQ14 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp <= 0wx2C + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx60 + then yyAction17(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction17(strm, yyNO_MATCH) + else if inp < 0wx5B + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ124 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp <= 0wx2C + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx60 + then yyAction17(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction17(strm, yyNO_MATCH) + else if inp < 0wx5B + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ129 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction15(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction15(strm, yyNO_MATCH) + (* end case *)) +fun yyQ123 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction41(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3E + then yyQ129(strm', yyMATCH(strm, yyAction41, yyNO_MATCH)) + else yyAction41(strm, yyNO_MATCH) + (* end case *)) +fun yyQ122 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction19(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction19(strm, yyNO_MATCH) + (* end case *)) +fun yyQ121 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction18(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction18(strm, yyNO_MATCH) + (* end case *)) +fun yyQ29 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction12(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxE + then yyAction12(strm, yyNO_MATCH) + else if inp < 0wxE + then if inp <= 0wx8 + then yyAction12(strm, yyNO_MATCH) + else yyQ29(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else if inp = 0wx20 + then yyQ29(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else yyAction12(strm, yyNO_MATCH) + (* end case *)) +fun yyQ120 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction12(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxE + then yyAction12(strm, yyNO_MATCH) + else if inp < 0wxE + then if inp <= 0wx8 + then yyAction12(strm, yyNO_MATCH) + else yyQ29(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else if inp = 0wx20 + then yyQ29(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else yyAction12(strm, yyNO_MATCH) + (* end case *)) +fun yyQ119 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction41(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction41(strm, yyNO_MATCH) + (* end case *)) +fun yyQ5 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3A + then yyQ124(strm', lastMatch) + else if inp < 0wx3A + then if inp = 0wx22 + then yyQ121(strm', lastMatch) + else if inp < 0wx22 + then if inp = 0wxE + then yyQ119(strm', lastMatch) + else if inp < 0wxE + then if inp <= 0wx8 + then yyQ119(strm', lastMatch) + else yyQ120(strm', lastMatch) + else if inp = 0wx20 + then yyQ120(strm', lastMatch) + else yyQ119(strm', lastMatch) + else if inp = 0wx28 + then yyQ119(strm', lastMatch) + else if inp < 0wx28 + then if inp = 0wx27 + then yyQ122(strm', lastMatch) + else yyQ119(strm', lastMatch) + else if inp = 0wx2F + then yyQ123(strm', lastMatch) + else yyQ119(strm', lastMatch) + else if inp = 0wx41 + then yyQ124(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx3E + then yyQ126(strm', lastMatch) + else if inp < 0wx3E + then if inp = 0wx3D + then yyQ125(strm', lastMatch) + else yyQ119(strm', lastMatch) + else if inp = 0wx3F + then yyQ127(strm', lastMatch) + else yyQ119(strm', lastMatch) + else if inp = 0wx60 + then yyQ119(strm', lastMatch) + else if inp < 0wx60 + then if inp = 0wx5B + then yyQ119(strm', lastMatch) + else if inp < 0wx5B + then yyQ124(strm', lastMatch) + else if inp = 0wx5F + then yyQ124(strm', lastMatch) + else yyQ119(strm', lastMatch) + else if inp <= 0wx7A + then yyQ124(strm', lastMatch) + else yyQ119(strm', lastMatch) + (* end case *)) +fun yyQ77 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction5(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction5(strm, yyNO_MATCH) + (* end case *)) +fun yyQ76 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx4D + then yystuck(lastMatch) + else if inp < 0wx4D + then if inp = 0wx4C + then yyQ77(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx6C + then yyQ77(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ75 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx4E + then yystuck(lastMatch) + else if inp < 0wx4E + then if inp = 0wx4D + then yyQ76(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx6D + then yyQ76(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ74 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx59 + then yystuck(lastMatch) + else if inp < 0wx59 + then if inp = 0wx58 + then yyQ75(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx78 + then yyQ75(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ73 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction4(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction4(strm, yyNO_MATCH) + (* end case *)) +fun yyQ86 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx5D + then yyQ87(strm', lastMatch) + else yyQ86(strm', lastMatch) + (* end case *)) +and yyQ87 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx5D + then yyQ88(strm', lastMatch) + else yyQ86(strm', lastMatch) + (* end case *)) +and yyQ88 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3F + then yyQ86(strm', lastMatch) + else if inp < 0wx3F + then if inp = 0wx3E + then yyQ89(strm', lastMatch) + else yyQ86(strm', lastMatch) + else if inp = 0wx5D + then yyQ88(strm', lastMatch) + else yyQ86(strm', lastMatch) + (* end case *)) +and yyQ89 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction38(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx5D + then yyQ87(strm', yyMATCH(strm, yyAction38, yyNO_MATCH)) + else yyQ86(strm', yyMATCH(strm, yyAction38, yyNO_MATCH)) + (* end case *)) +fun yyQ85 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx5B + then yyQ86(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ84 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ85(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ83 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx54 + then yyQ84(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ82 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ83(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ81 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx44 + then yyQ82(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ80 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx43 + then yyQ81(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ95 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction6(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction6(strm, yyNO_MATCH) + (* end case *)) +fun yyQ94 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx45 + then yyQ95(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ93 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx50 + then yyQ94(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ92 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx59 + then yyQ93(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ91 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx54 + then yyQ92(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ90 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx43 + then yyQ91(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ79 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx4F + then yyQ90(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ96 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction0(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction0(strm, yyNO_MATCH) + (* end case *)) +fun yyQ78 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2D + then yyQ96(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ72 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx44 + then yyQ79(strm', lastMatch) + else if inp < 0wx44 + then if inp = 0wx2D + then yyQ78(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx5B + then yyQ80(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ71 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction3(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx2F + then yyQ73(strm', yyMATCH(strm, yyAction3, yyNO_MATCH)) + else if inp < 0wx2F + then if inp = 0wx21 + then yyQ72(strm', yyMATCH(strm, yyAction3, yyNO_MATCH)) + else yyAction3(strm, yyNO_MATCH) + else if inp = 0wx3F + then yyQ74(strm', yyMATCH(strm, yyAction3, yyNO_MATCH)) + else yyAction3(strm, yyNO_MATCH) + (* end case *)) +fun yyQ104 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction33(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction33(strm, yyNO_MATCH) + (* end case *)) +fun yyQ103 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3B + then yyQ104(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ102 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx74 + then yyQ103(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ101 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx6F + then yyQ102(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ100 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx75 + then yyQ101(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ106 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction34(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction34(strm, yyNO_MATCH) + (* end case *)) +fun yyQ105 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3B + then yyQ106(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ99 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx74 + then yyQ105(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ108 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction35(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction35(strm, yyNO_MATCH) + (* end case *)) +fun yyQ107 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3B + then yyQ108(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ98 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx74 + then yyQ107(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ113 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction37(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction37(strm, yyNO_MATCH) + (* end case *)) +fun yyQ112 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3B + then yyQ113(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ111 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx73 + then yyQ112(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ110 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx6F + then yyQ111(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ115 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction36(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction36(strm, yyNO_MATCH) + (* end case *)) +fun yyQ114 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3B + then yyQ115(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ109 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx70 + then yyQ114(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ97 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx6E + then yystuck(lastMatch) + else if inp < 0wx6E + then if inp = 0wx6D + then yyQ109(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx70 + then yyQ110(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ70 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction39(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx68 + then yyAction39(strm, yyNO_MATCH) + else if inp < 0wx68 + then if inp = 0wx62 + then yyAction39(strm, yyNO_MATCH) + else if inp < 0wx62 + then if inp = 0wx61 + then yyQ97(strm', yyMATCH(strm, yyAction39, yyNO_MATCH)) + else yyAction39(strm, yyNO_MATCH) + else if inp = 0wx67 + then yyQ98(strm', yyMATCH(strm, yyAction39, yyNO_MATCH)) + else yyAction39(strm, yyNO_MATCH) + else if inp = 0wx6D + then yyAction39(strm, yyNO_MATCH) + else if inp < 0wx6D + then if inp = 0wx6C + then yyQ99(strm', yyMATCH(strm, yyAction39, yyNO_MATCH)) + else yyAction39(strm, yyNO_MATCH) + else if inp = 0wx71 + then yyQ100(strm', yyMATCH(strm, yyAction39, yyNO_MATCH)) + else yyAction39(strm, yyNO_MATCH) + (* end case *)) +fun yyQ117 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction31(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxE + then yyAction31(strm, yyNO_MATCH) + else if inp < 0wxE + then if inp <= 0wx8 + then yyAction31(strm, yyNO_MATCH) + else yyQ117(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp = 0wx20 + then yyQ117(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else yyAction31(strm, yyNO_MATCH) + (* end case *)) +fun yyQ116 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction32(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx20 + then yyAction32(strm, yyNO_MATCH) + else if inp < 0wx20 + then if inp = 0wxB + then yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + else if inp < 0wxB + then if inp <= 0wx8 + then yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + else yyAction32(strm, yyNO_MATCH) + else if inp = 0wxD + then yyAction32(strm, yyNO_MATCH) + else yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + else if inp = 0wx27 + then yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + else if inp < 0wx27 + then if inp = 0wx26 + then yyAction32(strm, yyNO_MATCH) + else yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + else if inp = 0wx3C + then yyAction32(strm, yyNO_MATCH) + else yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + (* end case *)) +fun yyQ118 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction31(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx20 + then yyQ117(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp < 0wx20 + then if inp = 0wxB + then yyQ118(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp < 0wxB + then if inp <= 0wx8 + then yyQ116(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else yyQ117(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp = 0wxD + then yyQ117(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp <= 0wxC + then yyQ118(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else yyQ116(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp = 0wx27 + then yyQ116(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp < 0wx27 + then if inp = 0wx26 + then yyAction31(strm, yyNO_MATCH) + else yyQ116(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp = 0wx3C + then yyAction31(strm, yyNO_MATCH) + else yyQ116(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + (* end case *)) +fun yyQ69 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction31(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx20 + then yyQ117(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp < 0wx20 + then if inp = 0wxB + then yyQ118(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp < 0wxB + then if inp <= 0wx8 + then yyQ116(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else yyQ117(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp = 0wxD + then yyQ117(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp <= 0wxC + then yyQ118(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else yyQ116(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp = 0wx27 + then yyQ116(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp < 0wx27 + then if inp = 0wx26 + then yyAction31(strm, yyNO_MATCH) + else yyQ116(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp = 0wx3C + then yyAction31(strm, yyNO_MATCH) + else yyQ116(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + (* end case *)) +fun yyQ68 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction31(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxE + then yyAction31(strm, yyNO_MATCH) + else if inp < 0wxE + then if inp <= 0wx8 + then yyAction31(strm, yyNO_MATCH) + else yyQ117(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else if inp = 0wx20 + then yyQ117(strm', yyMATCH(strm, yyAction31, yyNO_MATCH)) + else yyAction31(strm, yyNO_MATCH) + (* end case *)) +fun yyQ67 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction32(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx20 + then yyAction32(strm, yyNO_MATCH) + else if inp < 0wx20 + then if inp = 0wxB + then yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + else if inp < 0wxB + then if inp <= 0wx8 + then yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + else yyAction32(strm, yyNO_MATCH) + else if inp = 0wxD + then yyAction32(strm, yyNO_MATCH) + else yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + else if inp = 0wx27 + then yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + else if inp < 0wx27 + then if inp = 0wx26 + then yyAction32(strm, yyNO_MATCH) + else yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + else if inp = 0wx3C + then yyAction32(strm, yyNO_MATCH) + else yyQ116(strm', yyMATCH(strm, yyAction32, yyNO_MATCH)) + (* end case *)) +fun yyQ4 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx20 + then yyQ68(strm', lastMatch) + else if inp < 0wx20 + then if inp = 0wxB + then yyQ69(strm', lastMatch) + else if inp < 0wxB + then if inp <= 0wx8 + then yyQ67(strm', lastMatch) + else yyQ68(strm', lastMatch) + else if inp = 0wxD + then yyQ68(strm', lastMatch) + else if inp <= 0wxC + then yyQ69(strm', lastMatch) + else yyQ67(strm', lastMatch) + else if inp = 0wx27 + then yyQ67(strm', lastMatch) + else if inp < 0wx27 + then if inp = 0wx26 + then yyQ70(strm', lastMatch) + else yyQ67(strm', lastMatch) + else if inp = 0wx3C + then yyQ71(strm', lastMatch) + else yyQ67(strm', lastMatch) + (* end case *)) +fun yyQ37 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction42(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction42(strm, yyNO_MATCH) + (* end case *)) +fun yyQ46 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction22(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction22(strm, yyNO_MATCH) + (* end case *)) +fun yyQ45 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3B + then yyQ46(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ44 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx74 + then yyQ45(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ43 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx6F + then yyQ44(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ42 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx75 + then yyQ43(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ48 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction23(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction23(strm, yyNO_MATCH) + (* end case *)) +fun yyQ47 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3B + then yyQ48(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ41 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx74 + then yyQ47(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ50 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction24(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction24(strm, yyNO_MATCH) + (* end case *)) +fun yyQ49 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3B + then yyQ50(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ40 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx74 + then yyQ49(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ55 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction26(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction26(strm, yyNO_MATCH) + (* end case *)) +fun yyQ54 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3B + then yyQ55(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ53 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx73 + then yyQ54(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ52 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx6F + then yyQ53(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ57 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction25(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction25(strm, yyNO_MATCH) + (* end case *)) +fun yyQ56 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3B + then yyQ57(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ51 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx70 + then yyQ56(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ39 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx6E + then yystuck(lastMatch) + else if inp < 0wx6E + then if inp = 0wx6D + then yyQ51(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx70 + then yyQ52(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ61 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction28(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction28(strm, yyNO_MATCH) + (* end case *)) +fun yyQ60 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3C + then yystuck(lastMatch) + else if inp < 0wx3C + then if inp = 0wx3A + then yystuck(lastMatch) + else if inp < 0wx3A + then if inp <= 0wx2F + then yystuck(lastMatch) + else yyQ60(strm', lastMatch) + else yyQ61(strm', lastMatch) + else if inp = 0wx47 + then yystuck(lastMatch) + else if inp < 0wx47 + then if inp <= 0wx40 + then yystuck(lastMatch) + else yyQ60(strm', lastMatch) + else if inp = 0wx61 + then yyQ60(strm', lastMatch) + else if inp < 0wx61 + then yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ60(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ59 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ60(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx30 + then yyQ60(strm', lastMatch) + else if inp < 0wx30 + then yystuck(lastMatch) + else if inp <= 0wx39 + then yyQ60(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ60(strm', lastMatch) + else if inp < 0wx61 + then if inp <= 0wx46 + then yyQ60(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx66 + then yyQ60(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ62 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction27(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction27(strm, yyNO_MATCH) + (* end case *)) +fun yyQ58 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3A + then yystuck(lastMatch) + else if inp < 0wx3A + then if inp <= 0wx2F + then yystuck(lastMatch) + else yyQ58(strm', lastMatch) + else if inp = 0wx3B + then yyQ62(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ38 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3A + then yystuck(lastMatch) + else if inp < 0wx3A + then if inp <= 0wx2F + then yystuck(lastMatch) + else yyQ58(strm', lastMatch) + else if inp = 0wx78 + then yyQ59(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ35 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction42(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx67 + then yyQ40(strm', yyMATCH(strm, yyAction42, yyNO_MATCH)) + else if inp < 0wx67 + then if inp = 0wx24 + then yyAction42(strm, yyNO_MATCH) + else if inp < 0wx24 + then if inp = 0wx23 + then yyQ38(strm', yyMATCH(strm, yyAction42, yyNO_MATCH)) + else yyAction42(strm, yyNO_MATCH) + else if inp = 0wx61 + then yyQ39(strm', yyMATCH(strm, yyAction42, yyNO_MATCH)) + else yyAction42(strm, yyNO_MATCH) + else if inp = 0wx6D + then yyAction42(strm, yyNO_MATCH) + else if inp < 0wx6D + then if inp = 0wx6C + then yyQ41(strm', yyMATCH(strm, yyAction42, yyNO_MATCH)) + else yyAction42(strm, yyNO_MATCH) + else if inp = 0wx71 + then yyQ42(strm', yyMATCH(strm, yyAction42, yyNO_MATCH)) + else yyAction42(strm, yyNO_MATCH) + (* end case *)) +fun yyQ65 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction20(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction20(strm, yyNO_MATCH) + (* end case *)) +fun yyQ66 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction29(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx27 + then yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp < 0wx27 + then if inp = 0wx23 + then yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp < 0wx23 + then if inp = 0wx22 + then yyAction29(strm, yyNO_MATCH) + else yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp = 0wx26 + then yyAction29(strm, yyNO_MATCH) + else yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp = 0wx3D + then yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp < 0wx3D + then if inp = 0wx3C + then yyAction29(strm, yyNO_MATCH) + else yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp = 0wx3E + then yyAction29(strm, yyNO_MATCH) + else yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + (* end case *)) +fun yyQ64 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction29(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx27 + then yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp < 0wx27 + then if inp = 0wx23 + then yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp < 0wx23 + then if inp = 0wx22 + then yyAction29(strm, yyNO_MATCH) + else yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp = 0wx26 + then yyAction29(strm, yyNO_MATCH) + else yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp = 0wx3D + then yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp < 0wx3D + then if inp = 0wx3C + then yyAction29(strm, yyNO_MATCH) + else yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + else if inp = 0wx3E + then yyAction29(strm, yyNO_MATCH) + else yyQ66(strm', yyMATCH(strm, yyAction29, yyNO_MATCH)) + (* end case *)) +fun yyQ3 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx27 + then yyQ64(strm', lastMatch) + else if inp < 0wx27 + then if inp = 0wx23 + then yyQ64(strm', lastMatch) + else if inp < 0wx23 + then if inp = 0wx22 + then yyQ65(strm', lastMatch) + else yyQ64(strm', lastMatch) + else if inp = 0wx26 + then yyQ35(strm', lastMatch) + else yyQ64(strm', lastMatch) + else if inp = 0wx3D + then yyQ64(strm', lastMatch) + else if inp < 0wx3D + then if inp = 0wx3C + then yyQ37(strm', lastMatch) + else yyQ64(strm', lastMatch) + else if inp = 0wx3E + then yyQ37(strm', lastMatch) + else yyQ64(strm', lastMatch) + (* end case *)) +fun yyQ36 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction21(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction21(strm, yyNO_MATCH) + (* end case *)) +fun yyQ63 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction30(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3C + then yyAction30(strm, yyNO_MATCH) + else if inp < 0wx3C + then if inp = 0wx26 + then yyAction30(strm, yyNO_MATCH) + else if inp < 0wx26 + then yyQ63(strm', yyMATCH(strm, yyAction30, yyNO_MATCH)) + else if inp <= 0wx27 + then yyAction30(strm, yyNO_MATCH) + else yyQ63(strm', yyMATCH(strm, yyAction30, yyNO_MATCH)) + else if inp = 0wx3E + then yyAction30(strm, yyNO_MATCH) + else yyQ63(strm', yyMATCH(strm, yyAction30, yyNO_MATCH)) + (* end case *)) +fun yyQ34 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction30(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3C + then yyAction30(strm, yyNO_MATCH) + else if inp < 0wx3C + then if inp = 0wx26 + then yyAction30(strm, yyNO_MATCH) + else if inp < 0wx26 + then yyQ63(strm', yyMATCH(strm, yyAction30, yyNO_MATCH)) + else if inp <= 0wx27 + then yyAction30(strm, yyNO_MATCH) + else yyQ63(strm', yyMATCH(strm, yyAction30, yyNO_MATCH)) + else if inp = 0wx3E + then yyAction30(strm, yyNO_MATCH) + else yyQ63(strm', yyMATCH(strm, yyAction30, yyNO_MATCH)) + (* end case *)) +fun yyQ2 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3C + then yyQ37(strm', lastMatch) + else if inp < 0wx3C + then if inp = 0wx27 + then yyQ36(strm', lastMatch) + else if inp < 0wx27 + then if inp = 0wx26 + then yyQ35(strm', lastMatch) + else yyQ34(strm', lastMatch) + else yyQ34(strm', lastMatch) + else if inp = 0wx3E + then yyQ37(strm', lastMatch) + else yyQ34(strm', lastMatch) + (* end case *)) +fun yyQ33 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction1(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction1(strm, yyNO_MATCH) + (* end case *)) +fun yyQ32 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3E + then yyQ33(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ31 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx2D + then yyQ32(strm', yyMATCH(strm, yyAction2, yyNO_MATCH)) + else yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ30 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction2(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction2(strm, yyNO_MATCH) + (* end case *)) +fun yyQ1 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx2D + then yyQ31(strm', lastMatch) + else yyQ30(strm', lastMatch) + (* end case *)) +fun yyQ19 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction8(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else if inp < 0wx41 + then if inp = 0wx2F + then yyAction8(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp <= 0wx2C + then yyAction8(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else yyAction8(strm, yyNO_MATCH) + else if inp = 0wx60 + then yyAction8(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction8(strm, yyNO_MATCH) + else if inp < 0wx5B + then yyQ14(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else yyAction8(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction8, yyNO_MATCH)) + else yyAction8(strm, yyNO_MATCH) + (* end case *)) +fun yyQ18 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx4E + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx4E + then if inp = 0wx30 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx2D + then yyAction17(strm, yyNO_MATCH) + else if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx4D + then yyQ19(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx5F + then if inp <= 0wx5A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx6E + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx6E + then if inp = 0wx6D + then yyQ19(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ17 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx46 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx46 + then if inp = 0wx30 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx2D + then yyAction17(strm, yyNO_MATCH) + else if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx45 + then yyQ18(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx5F + then if inp <= 0wx5A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx66 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx66 + then if inp = 0wx65 + then yyQ18(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ16 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx55 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx55 + then if inp = 0wx30 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx2D + then yyAction17(strm, yyNO_MATCH) + else if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx54 + then yyQ17(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx5F + then if inp <= 0wx5A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx75 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx75 + then if inp = 0wx74 + then yyQ17(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ15 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx54 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx54 + then if inp = 0wx30 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx2D + then yyAction17(strm, yyNO_MATCH) + else if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx53 + then yyQ16(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx5F + then if inp <= 0wx5A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx74 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx74 + then if inp = 0wx73 + then yyQ16(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ13 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx5A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx5A + then if inp = 0wx30 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx2D + then yyAction17(strm, yyNO_MATCH) + else if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx59 + then yyQ15(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx7A + then if inp = 0wx79 + then yyQ15(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ24 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction7(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction7, yyNO_MATCH)) + else if inp < 0wx41 + then if inp = 0wx2F + then yyAction7(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp <= 0wx2C + then yyAction7(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction7, yyNO_MATCH)) + else if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction7, yyNO_MATCH)) + else yyAction7(strm, yyNO_MATCH) + else if inp = 0wx60 + then yyAction7(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction7(strm, yyNO_MATCH) + else if inp < 0wx5B + then yyQ14(strm', yyMATCH(strm, yyAction7, yyNO_MATCH)) + else if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction7, yyNO_MATCH)) + else yyAction7(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction7, yyNO_MATCH)) + else yyAction7(strm, yyNO_MATCH) + (* end case *)) +fun yyQ23 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx44 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx44 + then if inp = 0wx30 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx2D + then yyAction17(strm, yyNO_MATCH) + else if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx43 + then yyQ24(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx5F + then if inp <= 0wx5A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx64 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx64 + then if inp = 0wx63 + then yyQ24(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ22 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx4A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx4A + then if inp = 0wx30 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx2D + then yyAction17(strm, yyNO_MATCH) + else if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx49 + then yyQ23(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx5F + then if inp <= 0wx5A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx6A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx6A + then if inp = 0wx69 + then yyQ23(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ21 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx4D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx4D + then if inp = 0wx30 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx2D + then yyAction17(strm, yyNO_MATCH) + else if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx4C + then yyQ22(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx5F + then if inp <= 0wx5A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx6D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx6D + then if inp = 0wx6C + then yyQ22(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ20 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx43 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx43 + then if inp = 0wx30 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx2D + then yyAction17(strm, yyNO_MATCH) + else if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else yyQ21(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx5F + then if inp <= 0wx5A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx63 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx63 + then yyQ21(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ12 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx56 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx56 + then if inp = 0wx30 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx30 + then if inp = 0wx2D + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx2D + then yyAction17(strm, yyNO_MATCH) + else if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx55 + then yyQ20(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx61 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx61 + then if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx5F + then if inp <= 0wx5A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx76 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx76 + then if inp = 0wx75 + then yyQ20(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ11 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction11(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction11(strm, yyNO_MATCH) + (* end case *)) +fun yyQ10 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction17(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp < 0wx41 + then if inp = 0wx2F + then yyAction17(strm, yyNO_MATCH) + else if inp < 0wx2F + then if inp <= 0wx2C + then yyAction17(strm, yyNO_MATCH) + else yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp <= 0wx3A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp = 0wx60 + then yyAction17(strm, yyNO_MATCH) + else if inp < 0wx60 + then if inp = 0wx5B + then yyAction17(strm, yyNO_MATCH) + else if inp < 0wx5B + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else if inp = 0wx5F + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ14(strm', yyMATCH(strm, yyAction17, yyNO_MATCH)) + else yyAction17(strm, yyNO_MATCH) + (* end case *)) +fun yyQ26 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction10(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction10(strm, yyNO_MATCH) + (* end case *)) +fun yyQ25 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3C + then yystuck(lastMatch) + else if inp < 0wx3C + then if inp = 0wx22 + then yystuck(lastMatch) + else if inp < 0wx22 + then if inp = 0wxB + then yystuck(lastMatch) + else if inp < 0wxB + then if inp <= 0wx8 + then yystuck(lastMatch) + else yyQ25(strm', lastMatch) + else if inp <= 0wx1F + then yystuck(lastMatch) + else yyQ25(strm', lastMatch) + else if inp = 0wx27 + then yyQ26(strm', lastMatch) + else if inp < 0wx27 + then if inp = 0wx26 + then yystuck(lastMatch) + else yyQ25(strm', lastMatch) + else yyQ25(strm', lastMatch) + else if inp = 0wx5F + then yyQ25(strm', lastMatch) + else if inp < 0wx5F + then if inp = 0wx3F + then yyQ25(strm', lastMatch) + else if inp < 0wx3F + then if inp = 0wx3D + then yyQ25(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx5A + then yyQ25(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ25(strm', lastMatch) + else if inp < 0wx61 + then yystuck(lastMatch) + else if inp <= 0wx7A + then yyQ25(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ9 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction40(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3C + then yyAction40(strm, yyNO_MATCH) + else if inp < 0wx3C + then if inp = 0wx22 + then yyAction40(strm, yyNO_MATCH) + else if inp < 0wx22 + then if inp = 0wxB + then yyAction40(strm, yyNO_MATCH) + else if inp < 0wxB + then if inp <= 0wx8 + then yyAction40(strm, yyNO_MATCH) + else yyQ25(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp <= 0wx1F + then yyAction40(strm, yyNO_MATCH) + else yyQ25(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp = 0wx27 + then yyQ26(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp < 0wx27 + then if inp = 0wx26 + then yyAction40(strm, yyNO_MATCH) + else yyQ25(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else yyQ25(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp = 0wx5F + then yyQ25(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp < 0wx5F + then if inp = 0wx3F + then yyQ25(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp < 0wx3F + then if inp = 0wx3D + then yyQ25(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else yyAction40(strm, yyNO_MATCH) + else if inp <= 0wx5A + then yyQ25(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else yyAction40(strm, yyNO_MATCH) + else if inp = 0wx61 + then yyQ25(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp < 0wx61 + then yyAction40(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ25(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else yyAction40(strm, yyNO_MATCH) + (* end case *)) +fun yyQ28 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction9(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction9(strm, yyNO_MATCH) + (* end case *)) +fun yyQ27 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx3C + then yystuck(lastMatch) + else if inp < 0wx3C + then if inp = 0wx22 + then yyQ28(strm', lastMatch) + else if inp < 0wx22 + then if inp = 0wxB + then yystuck(lastMatch) + else if inp < 0wxB + then if inp <= 0wx8 + then yystuck(lastMatch) + else yyQ27(strm', lastMatch) + else if inp <= 0wx1F + then yystuck(lastMatch) + else yyQ27(strm', lastMatch) + else if inp = 0wx26 + then yystuck(lastMatch) + else yyQ27(strm', lastMatch) + else if inp = 0wx5F + then yyQ27(strm', lastMatch) + else if inp < 0wx5F + then if inp = 0wx3F + then yyQ27(strm', lastMatch) + else if inp < 0wx3F + then if inp = 0wx3D + then yyQ27(strm', lastMatch) + else yystuck(lastMatch) + else if inp <= 0wx5A + then yyQ27(strm', lastMatch) + else yystuck(lastMatch) + else if inp = 0wx61 + then yyQ27(strm', lastMatch) + else if inp < 0wx61 + then yystuck(lastMatch) + else if inp <= 0wx7A + then yyQ27(strm', lastMatch) + else yystuck(lastMatch) + (* end case *)) +fun yyQ8 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction40(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wx3C + then yyAction40(strm, yyNO_MATCH) + else if inp < 0wx3C + then if inp = 0wx22 + then yyQ28(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp < 0wx22 + then if inp = 0wxB + then yyAction40(strm, yyNO_MATCH) + else if inp < 0wxB + then if inp <= 0wx8 + then yyAction40(strm, yyNO_MATCH) + else yyQ27(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp <= 0wx1F + then yyAction40(strm, yyNO_MATCH) + else yyQ27(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp = 0wx26 + then yyAction40(strm, yyNO_MATCH) + else yyQ27(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp = 0wx5F + then yyQ27(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp < 0wx5F + then if inp = 0wx3F + then yyQ27(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp < 0wx3F + then if inp = 0wx3D + then yyQ27(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else yyAction40(strm, yyNO_MATCH) + else if inp <= 0wx5A + then yyQ27(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else yyAction40(strm, yyNO_MATCH) + else if inp = 0wx61 + then yyQ27(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else if inp < 0wx61 + then yyAction40(strm, yyNO_MATCH) + else if inp <= 0wx7A + then yyQ27(strm', yyMATCH(strm, yyAction40, yyNO_MATCH)) + else yyAction40(strm, yyNO_MATCH) + (* end case *)) +fun yyQ7 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction12(strm, yyNO_MATCH) + | SOME(inp, strm') => + if inp = 0wxE + then yyAction12(strm, yyNO_MATCH) + else if inp < 0wxE + then if inp <= 0wx8 + then yyAction12(strm, yyNO_MATCH) + else yyQ29(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else if inp = 0wx20 + then yyQ29(strm', yyMATCH(strm, yyAction12, yyNO_MATCH)) + else yyAction12(strm, yyNO_MATCH) + (* end case *)) +fun yyQ6 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => yyAction40(strm, yyNO_MATCH) + | SOME(inp, strm') => yyAction40(strm, yyNO_MATCH) + (* end case *)) +fun yyQ0 (strm, lastMatch : yymatch) = (case (yygetc(strm)) + of NONE => + if ULexBuffer.eof(!(yystrm)) + then let + val yycolno = ref(yygetcolNo(!(yystrm))) + val yylineno = ref(yygetlineNo(!(yystrm))) + in + (case (!(yyss)) + of _ => (UserDeclarations.eof()) + (* end case *)) + end + else yystuck(lastMatch) + | SOME(inp, strm') => + if inp = 0wx41 + then yyQ10(strm', lastMatch) + else if inp < 0wx41 + then if inp = 0wx23 + then yyQ6(strm', lastMatch) + else if inp < 0wx23 + then if inp = 0wx20 + then yyQ7(strm', lastMatch) + else if inp < 0wx20 + then if inp = 0wx9 + then yyQ7(strm', lastMatch) + else if inp < 0wx9 + then yyQ6(strm', lastMatch) + else if inp <= 0wxD + then yyQ7(strm', lastMatch) + else yyQ6(strm', lastMatch) + else if inp = 0wx21 + then yyQ6(strm', lastMatch) + else yyQ8(strm', lastMatch) + else if inp = 0wx3A + then yyQ10(strm', lastMatch) + else if inp < 0wx3A + then if inp = 0wx27 + then yyQ9(strm', lastMatch) + else yyQ6(strm', lastMatch) + else if inp = 0wx3E + then yyQ11(strm', lastMatch) + else yyQ6(strm', lastMatch) + else if inp = 0wx60 + then yyQ6(strm', lastMatch) + else if inp < 0wx60 + then if inp = 0wx53 + then yyQ13(strm', lastMatch) + else if inp < 0wx53 + then if inp = 0wx50 + then yyQ12(strm', lastMatch) + else yyQ10(strm', lastMatch) + else if inp = 0wx5B + then yyQ6(strm', lastMatch) + else if inp < 0wx5B + then yyQ10(strm', lastMatch) + else if inp = 0wx5F + then yyQ10(strm', lastMatch) + else yyQ6(strm', lastMatch) + else if inp = 0wx73 + then yyQ13(strm', lastMatch) + else if inp < 0wx73 + then if inp = 0wx70 + then yyQ12(strm', lastMatch) + else yyQ10(strm', lastMatch) + else if inp <= 0wx7A + then yyQ10(strm', lastMatch) + else yyQ6(strm', lastMatch) + (* end case *)) +in + (case (!(yyss)) + of DOCTYPE => yyQ0(!(yystrm), yyNO_MATCH) + | COM => yyQ1(!(yystrm), yyNO_MATCH) + | LIT2 => yyQ2(!(yystrm), yyNO_MATCH) + | LIT1 => yyQ3(!(yystrm), yyNO_MATCH) + | INITIAL => yyQ4(!(yystrm), yyNO_MATCH) + | TAG => yyQ5(!(yystrm), yyNO_MATCH) + (* end case *)) +end +end + and skip() = (yystartPos := yygetPos(); + yylastwasnref := ULexBuffer.lastWasNL (!yystrm); + continue()) + in (continue(), (!yystartPos, yygetPos()), !yystrm, !yyss) end + in + lex() + end + in + type pos = AntlrStreamPos.pos + type span = AntlrStreamPos.span + type tok = UserDeclarations.lex_result + + datatype prestrm = STRM of ULexBuffer.stream * + (yystart_state * tok * span * prestrm * yystart_state) option ref + type strm = (prestrm * yystart_state) + + fun lex sm +(yyarg as lexErr)(STRM (yystrm, memo), ss) = (case !memo + of NONE => let + val (tok, span, yystrm', ss') = innerLex +yyarg(yystrm, ss, sm) + val strm' = STRM (yystrm', ref NONE); + in + memo := SOME (ss, tok, span, strm', ss'); + (tok, span, (strm', ss')) + end + | SOME (ss', tok, span, strm', ss'') => + if ss = ss' then + (tok, span, (strm', ss'')) + else ( + memo := NONE; + lex sm +yyarg(STRM (yystrm, memo), ss)) + (* end case *)) + + fun streamify input = (STRM (yystreamify' 0 input, ref NONE), INITIAL) + fun streamifyReader readFn strm = (STRM (yystreamifyReader' 0 readFn strm, ref NONE), + INITIAL) + fun streamifyInstream strm = (STRM (yystreamifyInstream' 0 strm, ref NONE), + INITIAL) + + fun getPos (STRM (strm, _), _) = ULexBuffer.getpos strm + + end +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-lib.cm mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-lib.cm --- mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-lib.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-lib.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,32 @@ +(* xml-lib.cm + * + * COPYRIGHT (c) 2010 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +Library + + signature XML_SCHEMA + signature XML_TREE + signature XML_PARSER + + functor XMLTreeFn + functor XMLParserFn + + structure GenericXMLTree + +is + + $/basis.cm + $/smlnj-lib.cm + $/ml-lpt-lib.cm + + generic-xml-tree.sml + + xml-parser-fn.sml + xml-schema-sig.sml + xml-tokens.sml + xml-tree-fn.sml + xml-tree-sig.sml + + xml-lexer.lex : ml-ulex diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-lib.mlb mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-lib.mlb --- mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-lib.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-lib.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,255 @@ + +ann + "nonexhaustiveBind warn" "nonexhaustiveMatch warn" + "redundantBind warn" "redundantMatch warn" + "sequenceNonUnit ignore" + "warnUnused false" "forceUsed" +in + +local + basis l8 = + bas + (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/sml-nj.mlb + end + basis l78 = + bas + (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb + end + basis l47 = + bas + (* $/ml-lpt-lib.cm ====> *) $(SML_LIB)/mllpt-lib/mllpt-lib.mlb + end +in +local + $(SML_LIB)/basis/pervasive.mlb + local + xml-schema-sig.sml + in + signature gs_0 = XML_SCHEMA + end + local + open l8 + in + structure gs_1 = TextIO + end + local + open l8 + in + structure gs_2 = Char + structure gs_3 = CharArray + structure gs_4 = CharVector + structure gs_5 = FixedInt + structure gs_6 = General + structure gs_7 = Int + structure gs_8 = Int32 + structure gs_9 = Int64 + structure gs_10 = IntInf + structure gs_11 = LargeInt + structure gs_12 = LargeReal + structure gs_13 = LargeWord + structure gs_14 = OS + structure gs_15 = Position + structure gs_16 = Real + structure gs_17 = Real64 + structure gs_18 = RealArray + structure gs_19 = RealArraySlice + structure gs_20 = RealVector + structure gs_21 = RealVectorSlice + structure gs_22 = SMLofNJ + structure gs_23 = Socket + structure gs_24 = String + structure gs_25 = Substring + structure gs_26 = SysWord + structure gs_27 = Time + structure gs_28 = Word + structure gs_29 = Word32 + structure gs_30 = Word64 + structure gs_31 = Word8 + end + local + open l8 + in + structure gs_32 = List + end + local + open l47 + in + structure gs_33 = AntlrStreamPos + end + local + xml-tokens.sml + in + structure gs_34 = XMLTokens + end + local + open l8 + in + structure gs_35 = Vector + end + local + open l8 + in + structure gs_36 = Option + end + local + open l47 + in + structure gs_37 = UTF8 + end + local + open l47 + in + structure gs_38 = ULexBuffer + end + local + structure AntlrStreamPos = gs_33 + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure List = gs_32 + structure OS = gs_14 + structure Option = gs_36 + structure Position = gs_15 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure TextIO = gs_1 + structure Time = gs_27 + structure ULexBuffer = gs_38 + structure UTF8 = gs_37 + structure Vector = gs_35 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + structure XMLTokens = gs_34 + xml-lexer.lex.sml + in + structure gs_39 = XMLLexer + end + local + signature XML_SCHEMA = gs_0 + xml-tree-sig.sml + in + signature gs_40 = XML_TREE + end + local + structure AntlrStreamPos = gs_33 + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure List = gs_32 + structure OS = gs_14 + structure Position = gs_15 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure TextIO = gs_1 + structure Time = gs_27 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + structure XMLLexer = gs_39 + structure XMLTokens = gs_34 + signature XML_TREE = gs_40 + xml-parser-fn.sml + in + functor gs_41 = XMLParserFn + signature gs_42 = XML_PARSER + end + local + open l78 + in + structure gs_43 = Atom + end + local + signature XML_SCHEMA = gs_0 + signature XML_TREE = gs_40 + xml-tree-fn.sml + in + functor gs_44 = XMLTreeFn + end + local + structure Atom = gs_43 + structure Char = gs_2 + structure CharArray = gs_3 + structure CharVector = gs_4 + structure FixedInt = gs_5 + structure General = gs_6 + structure Int = gs_7 + structure Int32 = gs_8 + structure Int64 = gs_9 + structure IntInf = gs_10 + structure LargeInt = gs_11 + structure LargeReal = gs_12 + structure LargeWord = gs_13 + structure OS = gs_14 + structure Position = gs_15 + structure Real = gs_16 + structure Real64 = gs_17 + structure RealArray = gs_18 + structure RealArraySlice = gs_19 + structure RealVector = gs_20 + structure RealVectorSlice = gs_21 + structure SMLofNJ = gs_22 + structure Socket = gs_23 + structure String = gs_24 + structure Substring = gs_25 + structure SysWord = gs_26 + structure Time = gs_27 + structure Word = gs_28 + structure Word32 = gs_29 + structure Word64 = gs_30 + structure Word8 = gs_31 + functor XMLTreeFn = gs_44 + signature XML_TREE = gs_40 + generic-xml-tree.sml + in + structure gs_45 = GenericXMLTree + end +in + structure GenericXMLTree = gs_45 + functor XMLParserFn = gs_41 + functor XMLTreeFn = gs_44 + signature XML_PARSER = gs_42 + signature XML_SCHEMA = gs_0 + signature XML_TREE = gs_40 +end +end + +end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-parser-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-parser-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-parser-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-parser-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,310 @@ +(* xml-parser-fn.sml + * + * COPYRIGHT (c) 2013 The Fellowship of SML/NJ http://www.smlnj.org) + * All rights reserved. + *) + +signature XML_PARSER = + sig + + structure XMLTree : XML_TREE + + val parseFile : string -> XMLTree.tree + + exception ParseError of string + + end + +functor XMLParserFn (XT : XML_TREE) : XML_PARSER = + struct + + structure XMLTree = XT + structure XS = XT.Schema + structure Tok = XMLTokens + + (***** Error messages *****) + + exception ParseError of string + + datatype error_tag + = S of string + | TK of Tok.token + | E of XT.Schema.element + + fun error msg = let + fun cvt (S s, l) = s :: l + | cvt (TK tok, l) = XMLTokens.toString tok :: l + | cvt (E elem, l) = XS.toString elem :: l + in + raise ParseError(String.concat(List.foldr cvt [] msg)) + end + + (***** Token streams wrap the ML-ULex generated lexer ***** + * + * We cache tokens to avoid rescanning the source. + *) + + type lexer_state = XMLLexer.prestrm * XMLLexer.yystart_state + + datatype token_strm_rep + = TOK of {tok : Tok.token, span : XMLLexer.span, more : token_strm} + | MORE of { + state : lexer_state, + get : lexer_state -> Tok.token * XMLLexer.span * lexer_state + } + + withtype token_strm = token_strm_rep ref + + fun newTokenStrm (initialState, lexFn) = + ref(MORE{state = initialState, get=lexFn}) + + fun nextTok (ref(TOK{tok, span, more})) = (tok, span, more) + | nextTok (strm as ref(MORE{state, get})) = let + val (tok, span, state) = get state + val more = ref(MORE{state=state, get=get}) + val rep = TOK{tok=tok, span=span, more=more} + in + strm := rep; (* cache lexer result *) + (tok, span, more) + end + + (* skip whitespace and comments *) + fun skipWS tokStrm = (case nextTok tokStrm + of (Tok.WS _, _, tokStrm) => skipWS tokStrm + | (Tok.COM _, _, tokStrm) => skipWS tokStrm + | _ => tokStrm + (* end case *)) + + (****** Tracking the content of an element *****) + + type content = XT.content list + + type state = { + content : content, (* parsed content in reverse order *) + preWS : string option (* preceeding WS when we are not preserving whitespace *) + } + +(* FIXME: this function doesn't seem right *) + fun mergeWS (NONE, content) = content + | mergeWS (SOME ws, XT.TEXT txt :: content) = XT.TEXT(txt ^ ws) :: content + | mergeWS (SOME s, content) = XT.TEXT s :: content + + fun addElem ({content, preWS}, elem) = + {content = elem :: mergeWS (preWS, content), preWS = NONE} + + fun addWS ({content, preWS}, ws) = (case preWS + of SOME ws' => {content = content, preWS = SOME(ws' ^ ws)} + | NONE => {content = content, preWS = SOME ws} + (* end case *)) + + fun addCom (state, com) = state (* FIXME*) + + fun addText ({content, preWS}, txt) = let + val content = (case (preWS, content) + of (NONE, XT.TEXT txt' :: content) => XT.TEXT(txt' ^ txt) :: content + | (NONE, content) => XT.TEXT txt :: content + | (SOME ws, XT.TEXT txt' :: content) => XT.TEXT(concat[txt', ws, txt]) :: content + | (SOME ws, content) => XT.TEXT(txt ^ ws) :: content + (* end case *)) + in + {content = content, preWS = NONE} + end + + fun addCData ({content, preWS}, cdata) = + {content = XT.CDATA cdata :: mergeWS (preWS, content), preWS = NONE} + + fun finish ({content, preWS} : state) = List.rev content + + (***** Parsing *****) + + fun parser (name, inStrm) = let + val srcMap = AntlrStreamPos.mkSourcemap' name + fun err (span, msg) = + error(S "Error [" :: S(AntlrStreamPos.spanToString srcMap span) :: S "]: " :: msg) + (* scan an element identifier *) + fun getElementId tokStrm = (case nextTok tokStrm + of (Tok.ID id, span, tokStrm) => (case XS.element id + of SOME elem => (elem, tokStrm) + | NONE => err(span, [S "unrecognized element ", S id]) + (* end case *)) + | (tok, span, _) => err(span, [S "expected identifier, but found ", TK tok]) + (* end case *)) + (* parse the attributes of a start tag. We expect: (ID "=" LIT)* *) + fun parseAttributes tokStrm = let + fun parseAttr (tokStrm, attrs) = (case nextTok tokStrm + of (Tok.ID id, _, tokStrm) => (case nextTok tokStrm + of (Tok.SYM_EQ, _, tokStrm) => (case nextTok tokStrm + of (Tok.LIT v, _, tokStrm) => + parseAttr (tokStrm, XS.attribute(id, v)::attrs) + | (tok, span, _) => err(span, [S "expected attribute value, but found ", TK tok]) + (* end case *)) + | (tok, span, _) => err(span, [S "expected \"=\", but found ", TK tok]) + (* end case *)) + | _ => (List.rev attrs, tokStrm) + (* end case *)) + in + parseAttr (tokStrm, []) + end + (* parse an element. We assume that the initial "<" has been consumed. *) + fun parseElement (tokStrm, preserveWS) = let + val (elem, tokStrm) = getElementId tokStrm + val (attrs, tokStrm) = parseAttributes tokStrm + in + case (nextTok tokStrm) + of (Tok.CLOSE_TAG, _, tokStrm) => let + val preserveWS = preserveWS orelse XS.preserveWS elem + val (content, tokStrm) = parseContent (tokStrm, preserveWS, XS.preserveComment elem) + in + (* here we expect to see the matching close tag for the element *) + case nextTok tokStrm + of (Tok.OPEN_END_TAG, span, tokStrm) => let + val (elem', tokStrm) = getElementId tokStrm + in + if XS.same(elem, elem') + then (case nextTok tokStrm + of (Tok.CLOSE_TAG, _, tokStrm) => + (XT.ELEMENT{name=elem, attrs=attrs, content=content}, tokStrm) + | (tok, span, _) => err (span, [ + S "expected \">\", but found ", TK tok + ]) + (* end case *)) + else err (span, [ + S "mismatched close tag: expected ", E elem, S ", but found ", E elem' + ]) + end + | (tok, span, _) => err(span, [ + S "impossible: unexpected ", TK tok, + S " when expected" + ]) + (* end case *) + end + | (Tok.CLOSE_EMPTY_TAG, _, tokStrm) => + (XT.ELEMENT{name=elem, attrs=attrs, content=[]}, tokStrm) + | (tok, span, _) => err(span, [S "expected \">\" or \"/>\", but found ", TK tok]) + (* end case *) + end + (* parse the content of an element; we return when we *) + and parseContent (tokStrm, preserveWS, preserveCom) : (XT.content list * token_strm) = let + fun parse (tokStrm, state) = (case nextTok tokStrm + of (Tok.EOF, _, _) => (finish state, tokStrm) + | (Tok.OPEN_START_TAG, _, tokStrm) => let + val (elem, tokStrm) = parseElement (tokStrm, preserveWS) + in + parse (tokStrm, addElem(state, elem)) + end + | (Tok.OPEN_END_TAG, _, _) => (finish state, tokStrm) + | (Tok.WS s, _, tokStrm) => + if preserveWS + then parse (tokStrm, addText(state, s)) + else parse (tokStrm, addWS(state, s)) + | (Tok.TEXT s, _, tokStrm) => parse (tokStrm, addText(state, s)) + | (Tok.COM s, _, tokStrm) => + if preserveCom + then parse (tokStrm, addCom(state, s)) + else parse (tokStrm, state) + | (Tok.CDATA s, _, tokStrm) => parse (tokStrm, addCData(state, s)) + | (tok, span, _) => err(span, [S "impossible: unexpected ", TK tok]) + (* end case *)) + in + parse (tokStrm, {preWS=NONE, content=[]}) + end + (* expect: Attributes "?>" *) + and parseXMLDecl tokStrm = let + val (attrs, tokStrm) = parseAttributes tokStrm + in + case nextTok tokStrm + of (Tok.CLOSE_PI_TAG, _, tokStrm) => (SOME attrs, tokStrm) + | (tok, span, _) => err(span, [S "expected \"?>\", but found ", TK tok]) + (* end case *) + end + (* expect: ID (S ExternalID)? S? '>' + * where + * ExternalID ::= 'SYSTEM' LIT + * | 'PUBLIC' LIT LIT + *) + fun parseDOCTYPE tokStrm = let + val (id, tokStrm) = (case nextTok tokStrm + of (Tok.ID id, _, tokStrm) => (id, tokStrm) + | (tok, span, _) => err(span, [S "expected identifier, but found ", TK tok]) + (* end case *)) + fun getLiteral tokStrm = (case nextTok tokStrm + of (Tok.LIT lit, _, tokStrm) => (lit, tokStrm) + | (tok, span, _) => err (span, [S "expected literal, but found ", TK tok]) + (* end case *)) + val (external, tokStrm) = (case nextTok tokStrm + of (Tok.SYSTEM, _, tokStrm) => let + val (lit, tokStrm) = getLiteral tokStrm + in + (SOME(XT.SYSTEM lit), tokStrm) + end + | (Tok.PUBLIC, _, tokStrm) => let + val (lit1, tokStrm) = getLiteral tokStrm + val (lit2, tokStrm) = getLiteral tokStrm + in + (SOME(XT.PUBLIC(lit1, lit2)), tokStrm) + end + | _ => (NONE, tokStrm) + (* end case *)) + in + (* expect ">" *) + case nextTok tokStrm + of (Tok.CLOSE_TAG, _, tokStrm) => (SOME(XT.DOCTYPE(id, external)), tokStrm) + | (tok, span, tokStrm) => err(span, [S "expected \">\", but found ", TK tok]) + (* end case *) + end + (* initialize the token stream *) + val tokStrm = newTokenStrm ( + XMLLexer.streamifyInstream inStrm, + XMLLexer.lex srcMap (fn (pos, msg) => err((pos, pos), List.map S msg))) + (* parse the XML Decl (if any) *) + val (xmlDecl, tokStrm) = (case nextTok (skipWS tokStrm) + of (Tok.OPEN_XML_TAG, _, tokStrm) => parseXMLDecl tokStrm + | _ => (NONE, tokStrm) + (* end case *)) + (* parse the DOCTYPE (if any) *) + val (doctype, tokStrm) = (case nextTok (skipWS tokStrm) + of (Tok.OPEN_DOCTYPE, _, tokStrm) => parseDOCTYPE tokStrm + | _ => (NONE, tokStrm) + (* end case *)) +(* QUESTION: should we preserve comments at top-level by default? *) + val (body, _) = parseContent (skipWS tokStrm, false, false) + in + case body + of [] => error [S "empty document"] + | [elem as XT.ELEMENT _] => { + xmlDecl = xmlDecl, + doctype = doctype, + content = elem + } + | _ => error [S "body of document is not a single element"] + (* end case *) + end (* parser *) + +(* + (* parse XMLDecl? Content *) + and parse tokStrm = let + fun parse tokStrm = (case nextTok tokStrm + of (EOF, _) => {xmlDecl = xmlDecl, content = TEXT ""} + | (Tok.OPEN_START_TAG, tokStrm) => let + val finalState = parseStartTag (tokStrm, content, stk) + in + {xmlDecl = xmlDecl, content = ??} + end + | Tok.WS _ => parse tokStrm + | tok, _) => err(?, [S "impossible: unexpected ", TK tok]) + (* end case *)) + in + parse tokStrm before close tokStrm + end +*) + + fun parseFile file = let + val inStrm = TextIO.openIn file + val tree = parser (file, inStrm) + handle ex => (TextIO.closeIn inStrm; raise ex) + in + TextIO.closeIn inStrm; + tree + end + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-schema-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-schema-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-schema-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-schema-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,38 @@ +(* xml-schema-sig.sml + * + * COPYRIGHT (c) 2013 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * Information about an XML schema (or DTD) that is used in the implementation of + * a parser. + *) + +signature XML_SCHEMA = + sig + + type element + type attribute + + (* create an element; returns NONE if the element name is unrecognized *) + val element : string -> element option + + (* If this function returns true for an element, then all whitespace in the + * element's content is preserved. Otherwise, whitespace between tags is + * not preserved. Note that if true, this property is inherited by any + * nested elements. + *) + val preserveWS : element -> bool + + (* should comments be preserved *) + val preserveComment : element -> bool + + (* equality test *) + val same : element * element -> bool + + (* the string representation of the element (w/o the "<" and ">" brackets) *) + val toString : element -> string + + (* create an attribute from a name/value pair *) + val attribute : (string * string) -> attribute + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-tokens.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-tokens.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-tokens.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-tokens.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,52 @@ +(* xml-tokens.sml + * + * COPYRIGHT (c) 2013 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +structure XMLTokens = + struct + + datatype token + = EOF + | OPEN_START_TAG (* "<" *) + | OPEN_END_TAG (* "" *) + | CLOSE_EMPTY_TAG (* "/>" *) + | CLOSE_PI_TAG (* "?>" also closes XML tags *) + | SYM_EQ (* "=" inside a tag *) + | ID of string (* element or attribute name *) + | LIT of string (* quoted attribute value *) + (* the following tags are content *) + | TEXT of string (* non-whitespace/non-comment text *) + | WS of string (* whitespace *) + | COM of string (* XML comment; string does not include "" *) + | CDATA of string (* CDATA text; string does not include "" *) + | PUBLIC (* "PUBLIC" in *) + | SYSTEM (* "SYSTEM" in *) + + fun toString tok = (case tok + of EOF => "EOF" + | OPEN_START_TAG => "<" + | OPEN_END_TAG => " " " " ">" + | CLOSE_EMPTY_TAG => "/>" + | CLOSE_PI_TAG => "?>" + | SYM_EQ => "=" + | ID s => s + | LIT _ => "LIT" + | TEXT _ => "TEXT" + | WS _ => "WS" + | COM _=> "COM" + | CDATA _ => "CDATA" + | PUBLIC => "PUBLIC" + | SYSTEM => "SYSTEM" + (* end case *)) + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-tree-fn.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-tree-fn.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-tree-fn.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-tree-fn.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,36 @@ +(* xml-tree-fn.sml + * + * COPYRIGHT (c) 2013 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + *) + +functor XMLTreeFn (Schema : XML_SCHEMA) : XML_TREE = + struct + + structure Schema = Schema + + (* limited support for declarations. Internal subsets are not + * current supported. + *) + datatype doctype = DOCTYPE of string * external_id option + + and external_id + = SYSTEM of string + | PUBLIC of string * string + + datatype content + = TEXT of string + | CDATA of string + | ELEMENT of { + name : Schema.element, + attrs : Schema.attribute list, + content : content list + } + + type tree = { + xmlDecl : Schema.attribute list option, (* NONE if there is no decl *) + doctype : doctype option, + content : content (* will be an ELEMENT *) + } + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-tree-sig.sml mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-tree-sig.sml --- mlton-20130715/lib/smlnj-lib/smlnj-lib/XML/xml-tree-sig.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib/XML/xml-tree-sig.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,35 @@ +(* xml-tree-sig.sml + * + * COPYRIGHT (c) 2013 The Fellowship of SML/NJ (http://www.smlnj.org) + * All rights reserved. + * + * A tree representation of an XML file. + *) + +signature XML_TREE = + sig + + structure Schema : XML_SCHEMA + + datatype doctype = DOCTYPE of string * external_id option + + and external_id + = SYSTEM of string + | PUBLIC of string * string + + datatype content + = TEXT of string + | CDATA of string + | ELEMENT of { + name : Schema.element, + attrs : Schema.attribute list, + content : content list + } + + type tree = { + xmlDecl : Schema.attribute list option, (* NONE if there is no decl *) + doctype : doctype option, + content : content (* will be an ELEMENT *) + } + + end diff -Nru mlton-20130715/lib/smlnj-lib/smlnj-lib.patch mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib.patch --- mlton-20130715/lib/smlnj-lib/smlnj-lib.patch 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,13261 +0,0 @@ -diff --git a/Controls/controls-lib.mlb b/Controls/controls-lib.mlb -new file mode 100644 -index 0000000..90f2fa7 ---- /dev/null -+++ b/Controls/controls-lib.mlb -@@ -0,0 +1,170 @@ -+ -+ann -+ "nonexhaustiveMatch warn" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" -+in -+ -+local -+ basis l4 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb -+ end -+ basis l11 = -+ bas -+ (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l4 -+ in -+ structure gs_0 = Option -+ end -+ local -+ open l4 -+ in -+ structure gs_1 = List -+ end -+ local -+ open l11 -+ in -+ structure gs_2 = Atom -+ end -+ local -+ open l4 -+ in -+ structure gs_3 = Int -+ end -+ local -+ controls-sig.sml -+ in -+ signature gs_4 = CONTROLS -+ end -+ local -+ open l11 -+ in -+ structure gs_5 = AtomTable -+ end -+ local -+ structure Atom = gs_2 -+ structure AtomTable = gs_5 -+ structure Int = gs_3 -+ structure List = gs_1 -+ control-reps.sml -+ in -+ structure gs_6 = ControlReps -+ end -+ local -+ structure Atom = gs_2 -+ signature CONTROLS = gs_4 -+ structure ControlReps = gs_6 -+ structure Int = gs_3 -+ structure List = gs_1 -+ structure Option = gs_0 -+ controls.sml -+ in -+ structure gs_7 = Controls -+ end -+ local -+ open l11 -+ in -+ structure gs_8 = ListMergeSort -+ end -+ local -+ structure Atom = gs_2 -+ structure Controls = gs_7 -+ control-set-sig.sml -+ in -+ signature gs_9 = CONTROL_SET -+ end -+ local -+ structure AtomTable = gs_5 -+ signature CONTROL_SET = gs_9 -+ structure ControlReps = gs_6 -+ structure Controls = gs_7 -+ structure ListMergeSort = gs_8 -+ structure Option = gs_0 -+ control-set.sml -+ in -+ structure gs_10 = ControlSet -+ end -+ local -+ structure ControlSet = gs_10 -+ structure Controls = gs_7 -+ registry-sig.sml -+ in -+ signature gs_11 = CONTROL_REGISTRY -+ end -+ local -+ open l4 -+ in -+ structure gs_12 = String -+ end -+ local -+ open l4 -+ in -+ structure gs_13 = Real -+ end -+ local -+ open l4 -+ in -+ structure gs_14 = Char -+ end -+ local -+ open l4 -+ in -+ structure gs_15 = Bool -+ end -+ local -+ structure Controls = gs_7 -+ control-util-sig.sml -+ in -+ signature gs_16 = CONTROL_UTIL -+ end -+ local -+ structure Bool = gs_15 -+ signature CONTROL_UTIL = gs_16 -+ structure Char = gs_14 -+ structure Controls = gs_7 -+ structure Int = gs_3 -+ structure List = gs_1 -+ structure Real = gs_13 -+ structure String = gs_12 -+ control-util.sml -+ in -+ structure gs_17 = ControlUtil -+ end -+ local -+ open l4 -+ in -+ structure gs_18 = OS -+ end -+ local -+ structure Atom = gs_2 -+ structure AtomTable = gs_5 -+ signature CONTROL_REGISTRY = gs_11 -+ structure ControlReps = gs_6 -+ structure ControlSet = gs_10 -+ structure Controls = gs_7 -+ structure List = gs_1 -+ structure ListMergeSort = gs_8 -+ structure OS = gs_18 -+ registry.sml -+ in -+ structure gs_19 = ControlRegistry -+ end -+in -+ signature CONTROLS = gs_4 -+ signature CONTROL_REGISTRY = gs_11 -+ signature CONTROL_SET = gs_9 -+ signature CONTROL_UTIL = gs_16 -+ structure ControlRegistry = gs_19 -+ structure ControlSet = gs_10 -+ structure ControlUtil = gs_17 -+ structure Controls = gs_7 -+end -+end -+ -+end -diff --git a/HTML/html-attrs-fn.sml b/HTML/html-attrs-fn.sml -index fde0845..e5b5dd5 100644 ---- a/HTML/html-attrs-fn.sml -+++ b/HTML/html-attrs-fn.sml -@@ -89,19 +89,24 @@ functor HTMLAttrsFn (Err : HTML_ERROR) : HTML_ATTRS = - fun error () = ( - Err.badAttrVal ctx (attrName, attrValToString attrVal); - NONE) -- fun cvt (AT_IMPLICIT, IMPLICIT) = SOME IMPLICIT -- | cvt (AT_INSTANCE, IMPLICIT) = SOME(NAME attrName) -- | cvt (AT_TEXT, v) = SOME v -- | cvt (AT_NUMBER, v) = SOME v -- | cvt (AT_NAMES names, (NAME s | STRING s)) = ( -+ fun atNames (names, s) = ( - case (List.find (eqName s) names) - of NONE => error() - | (SOME name) => SOME(NAME name) - (* end case *)) -- | cvt (AT_IMPLICIT, (NAME s | STRING s)) = -+ fun atImplicit (s) = - if (s = attrName) - then SOME IMPLICIT - else error() -+ -+ fun cvt (AT_IMPLICIT, IMPLICIT) = SOME IMPLICIT -+ | cvt (AT_INSTANCE, IMPLICIT) = SOME(NAME attrName) -+ | cvt (AT_TEXT, v) = SOME v -+ | cvt (AT_NUMBER, v) = SOME v -+ | cvt (AT_NAMES names, NAME s) = atNames (names, s) -+ | cvt (AT_NAMES names, STRING s) = atNames (names, s) -+ | cvt (AT_IMPLICIT, NAME s) = atImplicit (s) -+ | cvt (AT_IMPLICIT, STRING s) = atImplicit (s) - | cvt _ = error() - in - case (HTbl.find attrTbl attrName) -@@ -138,7 +143,8 @@ functor HTMLAttrsFn (Err : HTML_ERROR) : HTML_ATTRS = - val getFn = bindFindAttr (attrMap, attr) - fun get attrVec = (case (getFn attrVec) - of NONE => NONE -- | (SOME((STRING s) | (NAME s))) => SOME s -+ | SOME (STRING s) => SOME s -+ | SOME (NAME s) => SOME s - | _ => ( - Err.missingAttrVal (getContext attrVec) attr; - NONE) -@@ -162,31 +168,41 @@ functor HTMLAttrsFn (Err : HTML_ERROR) : HTML_ATTRS = - end - fun getNUMBER (attrMap, attr) = let - val getFn = bindFindAttr (attrMap, attr) -- fun get attrVec = (case (getFn attrVec) -+ fun get attrVec = let -+ fun doitStringName s = (case (Int.fromString s) -+ of NONE => ( -+ Err.badAttrVal (getContext attrVec) (attr, s); -+ NONE) -+ | someN => someN -+ (* end case *)) -+ in -+ (case (getFn attrVec) - of NONE => NONE -- | (SOME((STRING s) | (NAME s))) => (case (Int.fromString s) -- of NONE => ( -- Err.badAttrVal (getContext attrVec) (attr, s); -- NONE) -- | someN => someN -- (* end case *)) -+ | SOME (STRING s) => doitStringName s -+ | SOME (NAME s) => doitStringName s - | SOME IMPLICIT => raise Fail "getNUMBER: IMPLICIT unexpected" - (* end case *)) -+ end - in - get - end - fun getChar (attrMap, attr) = let - val getFn = bindFindAttr (attrMap, attr) -- fun get attrVec = (case (getFn attrVec) -- of NONE => NONE -- | (SOME((STRING s) | (NAME s))) => -- if (size s = 1) then SOME(String.sub(s, 0)) -+ fun get attrVec = let -+ fun doitStringName s = -+ if (size s = 1) then SOME(String.sub(s, 0)) - (** NOTE: we should probably accept &#xx; as a character value **) -- else ( -- Err.badAttrVal (getContext attrVec) (attr, s); -- NONE) -+ else ( -+ Err.badAttrVal (getContext attrVec) (attr, s); -+ NONE) -+ in -+ (case (getFn attrVec) -+ of NONE => NONE -+ | SOME (STRING s) => doitStringName s -+ | SOME (NAME s) => doitStringName s - | SOME IMPLICIT => raise Fail "getChar: IMPLICIT unexpected" - (* end case *)) -+ end - in - get - end -diff --git a/HTML/html-elements-fn.sml b/HTML/html-elements-fn.sml -index 9495983..fade6d7 100644 ---- a/HTML/html-elements-fn.sml -+++ b/HTML/html-elements-fn.sml -@@ -144,7 +144,8 @@ functor HTMLElementsFn ( - * 3) a string literal enclosed in '' - *) - fun scanAttrVal (ctx, attrName, ss) = let -- fun isNameChar (#"." | #"-") = true -+ fun isNameChar #"." = true -+ | isNameChar #"-" = true - | isNameChar c = (Char.isAlphaNum c) - in - case SS.getc ss -diff --git a/HTML/html-gram.desc b/HTML/html-gram.desc -new file mode 100644 -index 0000000..8a23ad2 ---- /dev/null -+++ b/HTML/html-gram.desc -@@ -0,0 +1,6055 @@ -+ -+state 0: -+ -+ Document : . StartHTML Head Body EndHTML -+ -+ START_HTML shift 2 -+ -+ Document goto 282 -+ StartHTML goto 1 -+ -+ . reduce by rule 1 -+ -+ -+state 1: -+ -+ Document : StartHTML . Head Body EndHTML -+ -+ START_HEAD shift 5 -+ -+ Head goto 4 -+ StartHEAD goto 3 -+ -+ . reduce by rule 6 -+ -+ -+state 2: -+ -+ StartHTML : START_HTML . (reduce by rule 2) -+ -+ -+ -+ . reduce by rule 2 -+ -+ -+state 3: -+ -+ Head : StartHEAD . HeadContents EndHEAD -+ -+ TAG_BASE shift 14 -+ TAG_ISINDEX shift 13 -+ TAG_LINK shift 12 -+ TAG_META shift 11 -+ START_SCRIPT shift 10 -+ START_STYLE shift 9 -+ -+ HeadContents goto 8 -+ HeadElements goto 7 -+ HeadElement goto 6 -+ -+ . reduce by rule 11 -+ -+ -+state 4: -+ -+ Document : StartHTML Head . Body EndHTML -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ START_BODY shift 73 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ Body goto 27 -+ BodyContent0 goto 26 -+ BodyElement goto 25 -+ BlockWOIndex goto 24 -+ Paragraph goto 23 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 20 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . error -+ -+ -+state 5: -+ -+ StartHEAD : START_HEAD . (reduce by rule 7) -+ -+ -+ -+ . reduce by rule 7 -+ -+ -+state 6: -+ -+ HeadElements : HeadElement . HeadElements -+ -+ TAG_BASE shift 14 -+ TAG_ISINDEX shift 13 -+ TAG_LINK shift 12 -+ TAG_META shift 11 -+ START_SCRIPT shift 10 -+ START_STYLE shift 9 -+ -+ HeadElements goto 80 -+ HeadElement goto 6 -+ -+ . reduce by rule 11 -+ -+ -+state 7: -+ -+ HeadContents : HeadElements . START_TITLE PCData END_TITLE HeadElements -+ -+ START_TITLE shift 81 -+ -+ -+ . error -+ -+ -+state 8: -+ -+ Head : StartHEAD HeadContents . EndHEAD -+ -+ END_HEAD shift 83 -+ -+ EndHEAD goto 82 -+ -+ . reduce by rule 8 -+ -+ -+state 9: -+ -+ HeadElement : START_STYLE . PCData END_STYLE -+ -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ PCData goto 86 -+ PCDataList goto 85 -+ PCDataElem goto 84 -+ -+ . reduce by rule 150 -+ -+ -+state 10: -+ -+ HeadElement : START_SCRIPT . PCData END_SCRIPT -+ -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ PCData goto 87 -+ PCDataList goto 85 -+ PCDataElem goto 84 -+ -+ . reduce by rule 150 -+ -+ -+state 11: -+ -+ HeadElement : TAG_META . (reduce by rule 13) -+ -+ -+ -+ . reduce by rule 13 -+ -+ -+state 12: -+ -+ HeadElement : TAG_LINK . (reduce by rule 14) -+ -+ -+ -+ . reduce by rule 14 -+ -+ -+state 13: -+ -+ HeadElement : TAG_ISINDEX . (reduce by rule 15) -+ -+ -+ -+ . reduce by rule 15 -+ -+ -+state 14: -+ -+ HeadElement : TAG_BASE . (reduce by rule 16) -+ -+ -+ -+ . reduce by rule 16 -+ -+ -+state 15: -+ -+ TextWOScript : PCDataElem . (reduce by rule 108) -+ -+ -+ -+ . reduce by rule 108 -+ -+ -+state 16: -+ -+ TextWOScript : Form . (reduce by rule 112) -+ -+ -+ -+ . reduce by rule 112 -+ -+ -+state 17: -+ -+ TextWOScript : Special . (reduce by rule 111) -+ -+ -+ -+ . reduce by rule 111 -+ -+ -+state 18: -+ -+ TextWOScript : Phrase . (reduce by rule 110) -+ -+ -+ -+ . reduce by rule 110 -+ -+ -+state 19: -+ -+ TextWOScript : Font . (reduce by rule 109) -+ -+ -+ -+ . reduce by rule 109 -+ -+ -+state 20: -+ -+ BodyContent0 : TextWOScript . BodyContent1 -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent1 goto 94 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 21: -+ -+ BlockWOIndex : Preformatted . (reduce by rule 55) -+ -+ -+ -+ . reduce by rule 55 -+ -+ -+state 22: -+ -+ BlockWOIndex : List . (reduce by rule 54) -+ -+ -+ -+ . reduce by rule 54 -+ -+ -+state 23: -+ -+ BodyContent0 : Paragraph . END_P BodyContent1 -+ BodyContent0 : Paragraph . BodyContent2 -+ -+ START_ADDRESS shift 78 -+ START_BLOCKQUOTE shift 74 -+ START_CENTER shift 71 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ TAG_ISINDEX shift 96 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ END_P shift 101 -+ START_PRE shift 44 -+ START_TABLE shift 36 -+ START_UL shift 32 -+ -+ BodyContent2 goto 100 -+ BodyElement goto 99 -+ BlockWOIndex goto 92 -+ Block goto 98 -+ Paragraph goto 97 -+ List goto 22 -+ Preformatted goto 21 -+ -+ . reduce by rule 35 -+ -+ -+state 24: -+ -+ BodyContent0 : BlockWOIndex . BodyContent1 -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent1 goto 102 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 25: -+ -+ BodyContent0 : BodyElement . BodyContent1 -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent1 goto 103 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 26: -+ -+ Body : BodyContent0 . EndBODY -+ -+ END_BODY shift 105 -+ -+ EndBODY goto 104 -+ -+ . reduce by rule 20 -+ -+ -+state 27: -+ -+ Document : StartHTML Head Body . EndHTML -+ -+ END_HTML shift 107 -+ -+ EndHTML goto 106 -+ -+ . reduce by rule 3 -+ -+ -+state 28: -+ -+ PCDataElem : ENTITY_REF . (reduce by rule 154) -+ -+ -+ -+ . reduce by rule 154 -+ -+ -+state 29: -+ -+ PCDataElem : CHAR_REF . (reduce by rule 153) -+ -+ -+ -+ . reduce by rule 153 -+ -+ -+state 30: -+ -+ PCDataElem : PCDATA . (reduce by rule 152) -+ -+ -+ -+ . reduce by rule 152 -+ -+ -+state 31: -+ -+ Phrase : START_VAR . TextList END_VAR -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 110 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 32: -+ -+ List : START_UL . ListItemList END_UL -+ -+ START_LI shift 113 -+ -+ ListItemList goto 112 -+ ListItem goto 111 -+ -+ . reduce by rule 70 -+ -+ -+state 33: -+ -+ Font : START_U . TextList END_U -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 114 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 34: -+ -+ Font : START_TT . TextList END_TT -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 115 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 35: -+ -+ Form : START_TEXTAREA . PCData END_TEXTAREA -+ -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ PCData goto 116 -+ PCDataList goto 85 -+ PCDataElem goto 84 -+ -+ . reduce by rule 150 -+ -+ -+state 36: -+ -+ BlockWOIndex : START_TABLE . optCaption TableRowList END_TABLE -+ -+ START_CAPTION shift 118 -+ -+ optCaption goto 117 -+ -+ . reduce by rule 93 -+ -+ -+state 37: -+ -+ Font : START_SUP . TextList END_SUP -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 119 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 38: -+ -+ Font : START_SUB . TextList END_SUB -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 120 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 39: -+ -+ Phrase : START_STRONG . TextList END_STRONG -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 121 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 40: -+ -+ Font : START_STRIKE . TextList END_STRIKE -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 122 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 41: -+ -+ Font : START_SMALL . TextList END_SMALL -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 123 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 42: -+ -+ Form : START_SELECT . OptionList END_SELECT -+ -+ START_OPTION shift 125 -+ -+ OptionList goto 124 -+ -+ . reduce by rule 145 -+ -+ -+state 43: -+ -+ Phrase : START_SAMP . TextList END_SAMP -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 126 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 44: -+ -+ Preformatted : START_PRE . TextList END_PRE -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 127 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 45: -+ -+ Special : TAG_PARAM . (reduce by rule 139) -+ -+ -+ -+ . reduce by rule 139 -+ -+ -+state 46: -+ -+ Paragraph : START_P . TextList -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 128 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 47: -+ -+ List : START_OL . ListItemList END_OL -+ -+ START_LI shift 113 -+ -+ ListItemList goto 129 -+ ListItem goto 111 -+ -+ . reduce by rule 70 -+ -+ -+state 48: -+ -+ List : START_MENU . ListItemList END_MENU -+ -+ START_LI shift 113 -+ -+ ListItemList goto 130 -+ ListItem goto 111 -+ -+ . reduce by rule 70 -+ -+ -+state 49: -+ -+ Special : START_MAP . AreaList END_MAP -+ -+ TAG_AREA shift 132 -+ -+ AreaList goto 131 -+ -+ . reduce by rule 140 -+ -+ -+state 50: -+ -+ Phrase : START_KBD . TextList END_KBD -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 133 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 51: -+ -+ Form : TAG_INPUT . (reduce by rule 142) -+ -+ -+ -+ . reduce by rule 142 -+ -+ -+state 52: -+ -+ Special : TAG_IMG . (reduce by rule 133) -+ -+ -+ -+ . reduce by rule 133 -+ -+ -+state 53: -+ -+ Font : START_I . TextList END_I -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 134 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 54: -+ -+ BlockWOIndex : TAG_HR . (reduce by rule 60) -+ -+ -+ -+ . reduce by rule 60 -+ -+ -+state 55: -+ -+ BodyElement : START_H6 . TextList END_H6 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 135 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 56: -+ -+ BodyElement : START_H5 . TextList END_H5 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 136 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 57: -+ -+ BodyElement : START_H4 . TextList END_H4 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 137 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 58: -+ -+ BodyElement : START_H3 . TextList END_H3 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 138 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 59: -+ -+ BodyElement : START_H2 . TextList END_H2 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 139 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 60: -+ -+ BodyElement : START_H1 . TextList END_H1 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 140 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 61: -+ -+ BlockWOIndex : START_FORM . BodyContent END_FORM -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent goto 142 -+ BodyContent1 goto 141 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 62: -+ -+ Special : START_BASEFONT . TextList END_BASEFONT -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 143 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 63: -+ -+ Special : START_FONT . TextList END_FONT -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 144 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 64: -+ -+ Phrase : START_EM . TextList END_EM -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 145 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 65: -+ -+ List : START_DL . DLItemList END_DL -+ -+ START_DD shift 149 -+ START_DT shift 148 -+ -+ DLItemList goto 147 -+ DLItem goto 146 -+ -+ . reduce by rule 73 -+ -+ -+state 66: -+ -+ BlockWOIndex : START_DIV . BodyContent END_DIV -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent goto 150 -+ BodyContent1 goto 141 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 67: -+ -+ List : START_DIR . ListItemList END_DIR -+ -+ START_LI shift 113 -+ -+ ListItemList goto 151 -+ ListItem goto 111 -+ -+ . reduce by rule 70 -+ -+ -+state 68: -+ -+ Phrase : START_DFN . TextList END_DFN -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 152 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 69: -+ -+ Phrase : START_CODE . TextList END_CODE -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 153 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 70: -+ -+ Phrase : START_CITE . TextList END_CITE -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 154 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 71: -+ -+ BlockWOIndex : START_CENTER . BodyContent END_CENTER -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent goto 155 -+ BodyContent1 goto 141 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 72: -+ -+ Special : TAG_BR . (reduce by rule 137) -+ -+ -+ -+ . reduce by rule 137 -+ -+ -+state 73: -+ -+ BodyContent0 : START_BODY . BodyContent -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent goto 156 -+ BodyContent1 goto 141 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 74: -+ -+ BlockWOIndex : START_BLOCKQUOTE . BodyContent END_BLOCKQUOTE -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent goto 157 -+ BodyContent1 goto 141 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 75: -+ -+ Font : START_BIG . TextList END_BIG -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 158 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 76: -+ -+ Font : START_B . TextList END_B -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 159 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 77: -+ -+ Special : START_APPLET . TextList END_APPLET -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 160 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 78: -+ -+ BodyElement : START_ADDRESS . AddressContent1 END_ADDRESS -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ AddressContent1 goto 163 -+ Paragraph goto 162 -+ TextWOScript goto 89 -+ Text goto 161 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 47 -+ -+ -+state 79: -+ -+ Special : START_A . TextList END_A -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 164 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 80: -+ -+ HeadElements : HeadElement HeadElements . (reduce by rule 12) -+ -+ -+ -+ . reduce by rule 12 -+ -+ -+state 81: -+ -+ HeadContents : HeadElements START_TITLE . PCData END_TITLE HeadElements -+ -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ PCData goto 165 -+ PCDataList goto 85 -+ PCDataElem goto 84 -+ -+ . reduce by rule 150 -+ -+ -+state 82: -+ -+ Head : StartHEAD HeadContents EndHEAD . (reduce by rule 5) -+ -+ -+ -+ . reduce by rule 5 -+ -+ -+state 83: -+ -+ EndHEAD : END_HEAD . (reduce by rule 9) -+ -+ -+ -+ . reduce by rule 9 -+ -+ -+state 84: -+ -+ PCDataList : PCDataElem . PCDataList -+ -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ PCDataList goto 166 -+ PCDataElem goto 84 -+ -+ . reduce by rule 150 -+ -+ -+state 85: -+ -+ PCData : PCDataList . (reduce by rule 149) -+ -+ -+ -+ . reduce by rule 149 -+ -+ -+state 86: -+ -+ HeadElement : START_STYLE PCData . END_STYLE -+ -+ END_STYLE shift 167 -+ -+ -+ . error -+ -+ -+state 87: -+ -+ HeadElement : START_SCRIPT PCData . END_SCRIPT -+ -+ END_SCRIPT shift 168 -+ -+ -+ . error -+ -+ -+state 88: -+ -+ BodyContent1 : Text . BodyContent1 -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent1 goto 169 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 89: -+ -+ Text : TextWOScript . (reduce by rule 113) -+ -+ -+ -+ . reduce by rule 113 -+ -+ -+state 90: -+ -+ BodyContent1 : Paragraph . END_P BodyContent1 -+ BodyContent1 : Paragraph . BodyContent2 -+ -+ START_ADDRESS shift 78 -+ START_BLOCKQUOTE shift 74 -+ START_CENTER shift 71 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ TAG_ISINDEX shift 96 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ END_P shift 171 -+ START_PRE shift 44 -+ START_TABLE shift 36 -+ START_UL shift 32 -+ -+ BodyContent2 goto 170 -+ BodyElement goto 99 -+ BlockWOIndex goto 92 -+ Block goto 98 -+ Paragraph goto 97 -+ List goto 22 -+ Preformatted goto 21 -+ -+ . reduce by rule 35 -+ -+ -+state 91: -+ -+ BodyContent1 : Block . BodyContent1 -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent1 goto 172 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 92: -+ -+ Block : BlockWOIndex . (reduce by rule 62) -+ -+ -+ -+ . reduce by rule 62 -+ -+ -+state 93: -+ -+ BodyContent1 : BodyElement . BodyContent1 -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent1 goto 173 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 94: -+ -+ BodyContent0 : TextWOScript BodyContent1 . (reduce by rule 24) -+ -+ -+ -+ . reduce by rule 24 -+ -+ -+state 95: -+ -+ Text : START_SCRIPT . PCData END_SCRIPT -+ -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ PCData goto 174 -+ PCDataList goto 85 -+ PCDataElem goto 84 -+ -+ . reduce by rule 150 -+ -+ -+state 96: -+ -+ Block : TAG_ISINDEX . (reduce by rule 63) -+ -+ -+ -+ . reduce by rule 63 -+ -+ -+state 97: -+ -+ BodyContent2 : Paragraph . END_P BodyContent1 -+ BodyContent2 : Paragraph . BodyContent2 -+ -+ START_ADDRESS shift 78 -+ START_BLOCKQUOTE shift 74 -+ START_CENTER shift 71 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ TAG_ISINDEX shift 96 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ END_P shift 176 -+ START_PRE shift 44 -+ START_TABLE shift 36 -+ START_UL shift 32 -+ -+ BodyContent2 goto 175 -+ BodyElement goto 99 -+ BlockWOIndex goto 92 -+ Block goto 98 -+ Paragraph goto 97 -+ List goto 22 -+ Preformatted goto 21 -+ -+ . reduce by rule 35 -+ -+ -+state 98: -+ -+ BodyContent2 : Block . BodyContent1 -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent1 goto 177 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 99: -+ -+ BodyContent2 : BodyElement . BodyContent1 -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent1 goto 178 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 100: -+ -+ BodyContent0 : Paragraph BodyContent2 . (reduce by rule 28) -+ -+ -+ -+ . reduce by rule 28 -+ -+ -+state 101: -+ -+ BodyContent0 : Paragraph END_P . BodyContent1 -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent1 goto 179 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 102: -+ -+ BodyContent0 : BlockWOIndex BodyContent1 . (reduce by rule 26) -+ -+ -+ -+ . reduce by rule 26 -+ -+ -+state 103: -+ -+ BodyContent0 : BodyElement BodyContent1 . (reduce by rule 25) -+ -+ -+ -+ . reduce by rule 25 -+ -+ -+state 104: -+ -+ Body : BodyContent0 EndBODY . (reduce by rule 19) -+ -+ -+ -+ . reduce by rule 19 -+ -+ -+state 105: -+ -+ EndBODY : END_BODY . (reduce by rule 21) -+ -+ -+ -+ . reduce by rule 21 -+ -+ -+state 106: -+ -+ Document : StartHTML Head Body EndHTML . (reduce by rule 0) -+ -+ -+ -+ . reduce by rule 0 -+ -+ -+state 107: -+ -+ EndHTML : END_HTML . (reduce by rule 4) -+ -+ -+ -+ . reduce by rule 4 -+ -+ -+state 108: -+ -+ TextList' : Text . TextList' -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList' goto 180 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 109: -+ -+ TextList : TextList' . (reduce by rule 105) -+ -+ -+ -+ . reduce by rule 105 -+ -+ -+state 110: -+ -+ Phrase : START_VAR TextList . END_VAR -+ -+ END_VAR shift 181 -+ -+ -+ . error -+ -+ -+state 111: -+ -+ ListItemList : ListItem . ListItemList -+ -+ START_LI shift 113 -+ -+ ListItemList goto 182 -+ ListItem goto 111 -+ -+ . reduce by rule 70 -+ -+ -+state 112: -+ -+ List : START_UL ListItemList . END_UL -+ -+ END_UL shift 183 -+ -+ -+ . error -+ -+ -+state 113: -+ -+ ListItem : START_LI . Flow1 EndLI -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BlockWOIndex goto 92 -+ Block goto 187 -+ Paragraph goto 186 -+ List goto 22 -+ Flow1 goto 185 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 184 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 77 -+ -+ -+state 114: -+ -+ Font : START_U TextList . END_U -+ -+ END_U shift 188 -+ -+ -+ . error -+ -+ -+state 115: -+ -+ Font : START_TT TextList . END_TT -+ -+ END_TT shift 189 -+ -+ -+ . error -+ -+ -+state 116: -+ -+ Form : START_TEXTAREA PCData . END_TEXTAREA -+ -+ END_TEXTAREA shift 190 -+ -+ -+ . error -+ -+ -+state 117: -+ -+ BlockWOIndex : START_TABLE optCaption . TableRowList END_TABLE -+ -+ START_TR shift 193 -+ -+ TableRowList goto 192 -+ TableRow goto 191 -+ -+ . error -+ -+ -+state 118: -+ -+ optCaption : START_CAPTION . TextList END_CAPTION -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 194 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 119: -+ -+ Font : START_SUP TextList . END_SUP -+ -+ END_SUP shift 195 -+ -+ -+ . error -+ -+ -+state 120: -+ -+ Font : START_SUB TextList . END_SUB -+ -+ END_SUB shift 196 -+ -+ -+ . error -+ -+ -+state 121: -+ -+ Phrase : START_STRONG TextList . END_STRONG -+ -+ END_STRONG shift 197 -+ -+ -+ . error -+ -+ -+state 122: -+ -+ Font : START_STRIKE TextList . END_STRIKE -+ -+ END_STRIKE shift 198 -+ -+ -+ . error -+ -+ -+state 123: -+ -+ Font : START_SMALL TextList . END_SMALL -+ -+ END_SMALL shift 199 -+ -+ -+ . error -+ -+ -+state 124: -+ -+ Form : START_SELECT OptionList . END_SELECT -+ -+ END_SELECT shift 200 -+ -+ -+ . error -+ -+ -+state 125: -+ -+ OptionList : START_OPTION . PCData EndOPTION OptionList -+ -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ PCData goto 201 -+ PCDataList goto 85 -+ PCDataElem goto 84 -+ -+ . reduce by rule 150 -+ -+ -+state 126: -+ -+ Phrase : START_SAMP TextList . END_SAMP -+ -+ END_SAMP shift 202 -+ -+ -+ . error -+ -+ -+state 127: -+ -+ Preformatted : START_PRE TextList . END_PRE -+ -+ END_PRE shift 203 -+ -+ -+ . error -+ -+ -+state 128: -+ -+ Paragraph : START_P TextList . (reduce by rule 64) -+ -+ -+ -+ . reduce by rule 64 -+ -+ -+state 129: -+ -+ List : START_OL ListItemList . END_OL -+ -+ END_OL shift 204 -+ -+ -+ . error -+ -+ -+state 130: -+ -+ List : START_MENU ListItemList . END_MENU -+ -+ END_MENU shift 205 -+ -+ -+ . error -+ -+ -+state 131: -+ -+ Special : START_MAP AreaList . END_MAP -+ -+ END_MAP shift 206 -+ -+ -+ . error -+ -+ -+state 132: -+ -+ AreaList : TAG_AREA . AreaList -+ -+ TAG_AREA shift 132 -+ -+ AreaList goto 207 -+ -+ . reduce by rule 140 -+ -+ -+state 133: -+ -+ Phrase : START_KBD TextList . END_KBD -+ -+ END_KBD shift 208 -+ -+ -+ . error -+ -+ -+state 134: -+ -+ Font : START_I TextList . END_I -+ -+ END_I shift 209 -+ -+ -+ . error -+ -+ -+state 135: -+ -+ BodyElement : START_H6 TextList . END_H6 -+ -+ END_H6 shift 210 -+ -+ -+ . error -+ -+ -+state 136: -+ -+ BodyElement : START_H5 TextList . END_H5 -+ -+ END_H5 shift 211 -+ -+ -+ . error -+ -+ -+state 137: -+ -+ BodyElement : START_H4 TextList . END_H4 -+ -+ END_H4 shift 212 -+ -+ -+ . error -+ -+ -+state 138: -+ -+ BodyElement : START_H3 TextList . END_H3 -+ -+ END_H3 shift 213 -+ -+ -+ . error -+ -+ -+state 139: -+ -+ BodyElement : START_H2 TextList . END_H2 -+ -+ END_H2 shift 214 -+ -+ -+ . error -+ -+ -+state 140: -+ -+ BodyElement : START_H1 TextList . END_H1 -+ -+ END_H1 shift 215 -+ -+ -+ . error -+ -+ -+state 141: -+ -+ BodyContent : BodyContent1 . (reduce by rule 22) -+ -+ -+ -+ . reduce by rule 22 -+ -+ -+state 142: -+ -+ BlockWOIndex : START_FORM BodyContent . END_FORM -+ -+ END_FORM shift 216 -+ -+ -+ . error -+ -+ -+state 143: -+ -+ Special : START_BASEFONT TextList . END_BASEFONT -+ -+ END_BASEFONT shift 217 -+ -+ -+ . error -+ -+ -+state 144: -+ -+ Special : START_FONT TextList . END_FONT -+ -+ END_FONT shift 218 -+ -+ -+ . error -+ -+ -+state 145: -+ -+ Phrase : START_EM TextList . END_EM -+ -+ END_EM shift 219 -+ -+ -+ . error -+ -+ -+state 146: -+ -+ DLItemList : DLItem . DLItemList -+ -+ START_DD shift 149 -+ START_DT shift 148 -+ -+ DLItemList goto 220 -+ DLItem goto 146 -+ -+ . reduce by rule 73 -+ -+ -+state 147: -+ -+ List : START_DL DLItemList . END_DL -+ -+ END_DL shift 221 -+ -+ -+ . error -+ -+ -+state 148: -+ -+ DLItem : START_DT . TextList EndDT -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ TextList goto 222 -+ TextList' goto 109 -+ TextWOScript goto 89 -+ Text goto 108 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 106 -+ -+ -+state 149: -+ -+ DLItem : START_DD . Flow1 EndDD -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BlockWOIndex goto 92 -+ Block goto 187 -+ Paragraph goto 186 -+ List goto 22 -+ Flow1 goto 223 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 184 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 77 -+ -+ -+state 150: -+ -+ BlockWOIndex : START_DIV BodyContent . END_DIV -+ -+ END_DIV shift 224 -+ -+ -+ . error -+ -+ -+state 151: -+ -+ List : START_DIR ListItemList . END_DIR -+ -+ END_DIR shift 225 -+ -+ -+ . error -+ -+ -+state 152: -+ -+ Phrase : START_DFN TextList . END_DFN -+ -+ END_DFN shift 226 -+ -+ -+ . error -+ -+ -+state 153: -+ -+ Phrase : START_CODE TextList . END_CODE -+ -+ END_CODE shift 227 -+ -+ -+ . error -+ -+ -+state 154: -+ -+ Phrase : START_CITE TextList . END_CITE -+ -+ END_CITE shift 228 -+ -+ -+ . error -+ -+ -+state 155: -+ -+ BlockWOIndex : START_CENTER BodyContent . END_CENTER -+ -+ END_CENTER shift 229 -+ -+ -+ . error -+ -+ -+state 156: -+ -+ BodyContent0 : START_BODY BodyContent . (reduce by rule 23) -+ -+ -+ -+ . reduce by rule 23 -+ -+ -+state 157: -+ -+ BlockWOIndex : START_BLOCKQUOTE BodyContent . END_BLOCKQUOTE -+ -+ END_BLOCKQUOTE shift 230 -+ -+ -+ . error -+ -+ -+state 158: -+ -+ Font : START_BIG TextList . END_BIG -+ -+ END_BIG shift 231 -+ -+ -+ . error -+ -+ -+state 159: -+ -+ Font : START_B TextList . END_B -+ -+ END_B shift 232 -+ -+ -+ . error -+ -+ -+state 160: -+ -+ Special : START_APPLET TextList . END_APPLET -+ -+ END_APPLET shift 233 -+ -+ -+ . error -+ -+ -+state 161: -+ -+ AddressContent1 : Text . AddressContent1 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ AddressContent1 goto 234 -+ Paragraph goto 162 -+ TextWOScript goto 89 -+ Text goto 161 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 47 -+ -+ -+state 162: -+ -+ AddressContent1 : Paragraph . END_P AddressContent1 -+ AddressContent1 : Paragraph . AddressContent2 -+ -+ START_P shift 46 -+ END_P shift 237 -+ -+ AddressContent2 goto 236 -+ Paragraph goto 235 -+ -+ . reduce by rule 51 -+ -+ -+state 163: -+ -+ BodyElement : START_ADDRESS AddressContent1 . END_ADDRESS -+ -+ END_ADDRESS shift 238 -+ -+ -+ . error -+ -+ -+state 164: -+ -+ Special : START_A TextList . END_A -+ -+ END_A shift 239 -+ -+ -+ . error -+ -+ -+state 165: -+ -+ HeadContents : HeadElements START_TITLE PCData . END_TITLE HeadElements -+ -+ END_TITLE shift 240 -+ -+ -+ . error -+ -+ -+state 166: -+ -+ PCDataList : PCDataElem PCDataList . (reduce by rule 151) -+ -+ -+ -+ . reduce by rule 151 -+ -+ -+state 167: -+ -+ HeadElement : START_STYLE PCData END_STYLE . (reduce by rule 17) -+ -+ -+ -+ . reduce by rule 17 -+ -+ -+state 168: -+ -+ HeadElement : START_SCRIPT PCData END_SCRIPT . (reduce by rule 18) -+ -+ -+ -+ . reduce by rule 18 -+ -+ -+state 169: -+ -+ BodyContent1 : Text BodyContent1 . (reduce by rule 30) -+ -+ -+ -+ . reduce by rule 30 -+ -+ -+state 170: -+ -+ BodyContent1 : Paragraph BodyContent2 . (reduce by rule 34) -+ -+ -+ -+ . reduce by rule 34 -+ -+ -+state 171: -+ -+ BodyContent1 : Paragraph END_P . BodyContent1 -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent1 goto 241 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 172: -+ -+ BodyContent1 : Block BodyContent1 . (reduce by rule 32) -+ -+ -+ -+ . reduce by rule 32 -+ -+ -+state 173: -+ -+ BodyContent1 : BodyElement BodyContent1 . (reduce by rule 31) -+ -+ -+ -+ . reduce by rule 31 -+ -+ -+state 174: -+ -+ Text : START_SCRIPT PCData . END_SCRIPT -+ -+ END_SCRIPT shift 242 -+ -+ -+ . error -+ -+ -+state 175: -+ -+ BodyContent2 : Paragraph BodyContent2 . (reduce by rule 39) -+ -+ -+ -+ . reduce by rule 39 -+ -+ -+state 176: -+ -+ BodyContent2 : Paragraph END_P . BodyContent1 -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent1 goto 243 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 177: -+ -+ BodyContent2 : Block BodyContent1 . (reduce by rule 37) -+ -+ -+ -+ . reduce by rule 37 -+ -+ -+state 178: -+ -+ BodyContent2 : BodyElement BodyContent1 . (reduce by rule 36) -+ -+ -+ -+ . reduce by rule 36 -+ -+ -+state 179: -+ -+ BodyContent0 : Paragraph END_P BodyContent1 . (reduce by rule 27) -+ -+ -+ -+ . reduce by rule 27 -+ -+ -+state 180: -+ -+ TextList' : Text TextList' . (reduce by rule 107) -+ -+ -+ -+ . reduce by rule 107 -+ -+ -+state 181: -+ -+ Phrase : START_VAR TextList END_VAR . (reduce by rule 130) -+ -+ -+ -+ . reduce by rule 130 -+ -+ -+state 182: -+ -+ ListItemList : ListItem ListItemList . (reduce by rule 71) -+ -+ -+ -+ . reduce by rule 71 -+ -+ -+state 183: -+ -+ List : START_UL ListItemList END_UL . (reduce by rule 65) -+ -+ -+ -+ . reduce by rule 65 -+ -+ -+state 184: -+ -+ Flow1 : Text . Flow1 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BlockWOIndex goto 92 -+ Block goto 187 -+ Paragraph goto 186 -+ List goto 22 -+ Flow1 goto 244 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 184 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 77 -+ -+ -+state 185: -+ -+ ListItem : START_LI Flow1 . EndLI -+ -+ END_LI shift 246 -+ -+ EndLI goto 245 -+ -+ . reduce by rule 86 -+ -+ -+state 186: -+ -+ Flow1 : Paragraph . END_P Flow1 -+ Flow1 : Paragraph . Flow2 -+ -+ START_BLOCKQUOTE shift 74 -+ START_CENTER shift 71 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_FORM shift 61 -+ TAG_HR shift 54 -+ TAG_ISINDEX shift 96 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ END_P shift 250 -+ START_PRE shift 44 -+ START_TABLE shift 36 -+ START_UL shift 32 -+ -+ BlockWOIndex goto 92 -+ Block goto 249 -+ Paragraph goto 248 -+ List goto 22 -+ Flow2 goto 247 -+ Preformatted goto 21 -+ -+ . reduce by rule 82 -+ -+ -+state 187: -+ -+ Flow1 : Block . Flow1 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BlockWOIndex goto 92 -+ Block goto 187 -+ Paragraph goto 186 -+ List goto 22 -+ Flow1 goto 251 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 184 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 77 -+ -+ -+state 188: -+ -+ Font : START_U TextList END_U . (reduce by rule 118) -+ -+ -+ -+ . reduce by rule 118 -+ -+ -+state 189: -+ -+ Font : START_TT TextList END_TT . (reduce by rule 115) -+ -+ -+ -+ . reduce by rule 115 -+ -+ -+state 190: -+ -+ Form : START_TEXTAREA PCData END_TEXTAREA . (reduce by rule 144) -+ -+ -+ -+ . reduce by rule 144 -+ -+ -+state 191: -+ -+ TableRowList : TableRow . (reduce by rule 95) -+ TableRowList : TableRow . TableRowList -+ -+ START_TR shift 193 -+ -+ TableRowList goto 252 -+ TableRow goto 191 -+ -+ . reduce by rule 95 -+ -+ -+state 192: -+ -+ BlockWOIndex : START_TABLE optCaption TableRowList . END_TABLE -+ -+ END_TABLE shift 253 -+ -+ -+ . error -+ -+ -+state 193: -+ -+ TableRow : START_TR . TableCellList -+ TableRow : START_TR . TableCellList END_TR -+ -+ START_TD shift 257 -+ START_TH shift 256 -+ -+ TableCellList goto 255 -+ TableCell goto 254 -+ -+ . error -+ -+ -+state 194: -+ -+ optCaption : START_CAPTION TextList . END_CAPTION -+ -+ END_CAPTION shift 258 -+ -+ -+ . error -+ -+ -+state 195: -+ -+ Font : START_SUP TextList END_SUP . (reduce by rule 123) -+ -+ -+ -+ . reduce by rule 123 -+ -+ -+state 196: -+ -+ Font : START_SUB TextList END_SUB . (reduce by rule 122) -+ -+ -+ -+ . reduce by rule 122 -+ -+ -+state 197: -+ -+ Phrase : START_STRONG TextList END_STRONG . (reduce by rule 125) -+ -+ -+ -+ . reduce by rule 125 -+ -+ -+state 198: -+ -+ Font : START_STRIKE TextList END_STRIKE . (reduce by rule 119) -+ -+ -+ -+ . reduce by rule 119 -+ -+ -+state 199: -+ -+ Font : START_SMALL TextList END_SMALL . (reduce by rule 121) -+ -+ -+ -+ . reduce by rule 121 -+ -+ -+state 200: -+ -+ Form : START_SELECT OptionList END_SELECT . (reduce by rule 143) -+ -+ -+ -+ . reduce by rule 143 -+ -+ -+state 201: -+ -+ OptionList : START_OPTION PCData . EndOPTION OptionList -+ -+ END_OPTION shift 260 -+ -+ EndOPTION goto 259 -+ -+ . reduce by rule 147 -+ -+ -+state 202: -+ -+ Phrase : START_SAMP TextList END_SAMP . (reduce by rule 128) -+ -+ -+ -+ . reduce by rule 128 -+ -+ -+state 203: -+ -+ Preformatted : START_PRE TextList END_PRE . (reduce by rule 92) -+ -+ -+ -+ . reduce by rule 92 -+ -+ -+state 204: -+ -+ List : START_OL ListItemList END_OL . (reduce by rule 66) -+ -+ -+ -+ . reduce by rule 66 -+ -+ -+state 205: -+ -+ List : START_MENU ListItemList END_MENU . (reduce by rule 68) -+ -+ -+ -+ . reduce by rule 68 -+ -+ -+state 206: -+ -+ Special : START_MAP AreaList END_MAP . (reduce by rule 138) -+ -+ -+ -+ . reduce by rule 138 -+ -+ -+state 207: -+ -+ AreaList : TAG_AREA AreaList . (reduce by rule 141) -+ -+ -+ -+ . reduce by rule 141 -+ -+ -+state 208: -+ -+ Phrase : START_KBD TextList END_KBD . (reduce by rule 129) -+ -+ -+ -+ . reduce by rule 129 -+ -+ -+state 209: -+ -+ Font : START_I TextList END_I . (reduce by rule 116) -+ -+ -+ -+ . reduce by rule 116 -+ -+ -+state 210: -+ -+ BodyElement : START_H6 TextList END_H6 . (reduce by rule 45) -+ -+ -+ -+ . reduce by rule 45 -+ -+ -+state 211: -+ -+ BodyElement : START_H5 TextList END_H5 . (reduce by rule 44) -+ -+ -+ -+ . reduce by rule 44 -+ -+ -+state 212: -+ -+ BodyElement : START_H4 TextList END_H4 . (reduce by rule 43) -+ -+ -+ -+ . reduce by rule 43 -+ -+ -+state 213: -+ -+ BodyElement : START_H3 TextList END_H3 . (reduce by rule 42) -+ -+ -+ -+ . reduce by rule 42 -+ -+ -+state 214: -+ -+ BodyElement : START_H2 TextList END_H2 . (reduce by rule 41) -+ -+ -+ -+ . reduce by rule 41 -+ -+ -+state 215: -+ -+ BodyElement : START_H1 TextList END_H1 . (reduce by rule 40) -+ -+ -+ -+ . reduce by rule 40 -+ -+ -+state 216: -+ -+ BlockWOIndex : START_FORM BodyContent END_FORM . (reduce by rule 59) -+ -+ -+ -+ . reduce by rule 59 -+ -+ -+state 217: -+ -+ Special : START_BASEFONT TextList END_BASEFONT . (reduce by rule 136) -+ -+ -+ -+ . reduce by rule 136 -+ -+ -+state 218: -+ -+ Special : START_FONT TextList END_FONT . (reduce by rule 135) -+ -+ -+ -+ . reduce by rule 135 -+ -+ -+state 219: -+ -+ Phrase : START_EM TextList END_EM . (reduce by rule 124) -+ -+ -+ -+ . reduce by rule 124 -+ -+ -+state 220: -+ -+ DLItemList : DLItem DLItemList . (reduce by rule 74) -+ -+ -+ -+ . reduce by rule 74 -+ -+ -+state 221: -+ -+ List : START_DL DLItemList END_DL . (reduce by rule 69) -+ -+ -+ -+ . reduce by rule 69 -+ -+ -+state 222: -+ -+ DLItem : START_DT TextList . EndDT -+ -+ END_DT shift 262 -+ -+ EndDT goto 261 -+ -+ . reduce by rule 88 -+ -+ -+state 223: -+ -+ DLItem : START_DD Flow1 . EndDD -+ -+ END_DD shift 264 -+ -+ EndDD goto 263 -+ -+ . reduce by rule 90 -+ -+ -+state 224: -+ -+ BlockWOIndex : START_DIV BodyContent END_DIV . (reduce by rule 56) -+ -+ -+ -+ . reduce by rule 56 -+ -+ -+state 225: -+ -+ List : START_DIR ListItemList END_DIR . (reduce by rule 67) -+ -+ -+ -+ . reduce by rule 67 -+ -+ -+state 226: -+ -+ Phrase : START_DFN TextList END_DFN . (reduce by rule 127) -+ -+ -+ -+ . reduce by rule 127 -+ -+ -+state 227: -+ -+ Phrase : START_CODE TextList END_CODE . (reduce by rule 126) -+ -+ -+ -+ . reduce by rule 126 -+ -+ -+state 228: -+ -+ Phrase : START_CITE TextList END_CITE . (reduce by rule 131) -+ -+ -+ -+ . reduce by rule 131 -+ -+ -+state 229: -+ -+ BlockWOIndex : START_CENTER BodyContent END_CENTER . (reduce by rule 57) -+ -+ -+ -+ . reduce by rule 57 -+ -+ -+state 230: -+ -+ BlockWOIndex : START_BLOCKQUOTE BodyContent END_BLOCKQUOTE . (reduce by rule 58) -+ -+ -+ -+ . reduce by rule 58 -+ -+ -+state 231: -+ -+ Font : START_BIG TextList END_BIG . (reduce by rule 120) -+ -+ -+ -+ . reduce by rule 120 -+ -+ -+state 232: -+ -+ Font : START_B TextList END_B . (reduce by rule 117) -+ -+ -+ -+ . reduce by rule 117 -+ -+ -+state 233: -+ -+ Special : START_APPLET TextList END_APPLET . (reduce by rule 134) -+ -+ -+ -+ . reduce by rule 134 -+ -+ -+state 234: -+ -+ AddressContent1 : Text AddressContent1 . (reduce by rule 48) -+ -+ -+ -+ . reduce by rule 48 -+ -+ -+state 235: -+ -+ AddressContent2 : Paragraph . END_P AddressContent1 -+ AddressContent2 : Paragraph . AddressContent2 -+ -+ START_P shift 46 -+ END_P shift 266 -+ -+ AddressContent2 goto 265 -+ Paragraph goto 235 -+ -+ . reduce by rule 51 -+ -+ -+state 236: -+ -+ AddressContent1 : Paragraph AddressContent2 . (reduce by rule 50) -+ -+ -+ -+ . reduce by rule 50 -+ -+ -+state 237: -+ -+ AddressContent1 : Paragraph END_P . AddressContent1 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ AddressContent1 goto 267 -+ Paragraph goto 162 -+ TextWOScript goto 89 -+ Text goto 161 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 47 -+ -+ -+state 238: -+ -+ BodyElement : START_ADDRESS AddressContent1 END_ADDRESS . (reduce by rule 46) -+ -+ -+ -+ . reduce by rule 46 -+ -+ -+state 239: -+ -+ Special : START_A TextList END_A . (reduce by rule 132) -+ -+ -+ -+ . reduce by rule 132 -+ -+ -+state 240: -+ -+ HeadContents : HeadElements START_TITLE PCData END_TITLE . HeadElements -+ -+ TAG_BASE shift 14 -+ TAG_ISINDEX shift 13 -+ TAG_LINK shift 12 -+ TAG_META shift 11 -+ START_SCRIPT shift 10 -+ START_STYLE shift 9 -+ -+ HeadElements goto 268 -+ HeadElement goto 6 -+ -+ . reduce by rule 11 -+ -+ -+state 241: -+ -+ BodyContent1 : Paragraph END_P BodyContent1 . (reduce by rule 33) -+ -+ -+ -+ . reduce by rule 33 -+ -+ -+state 242: -+ -+ Text : START_SCRIPT PCData END_SCRIPT . (reduce by rule 114) -+ -+ -+ -+ . reduce by rule 114 -+ -+ -+state 243: -+ -+ BodyContent2 : Paragraph END_P BodyContent1 . (reduce by rule 38) -+ -+ -+ -+ . reduce by rule 38 -+ -+ -+state 244: -+ -+ Flow1 : Text Flow1 . (reduce by rule 78) -+ -+ -+ -+ . reduce by rule 78 -+ -+ -+state 245: -+ -+ ListItem : START_LI Flow1 EndLI . (reduce by rule 72) -+ -+ -+ -+ . reduce by rule 72 -+ -+ -+state 246: -+ -+ EndLI : END_LI . (reduce by rule 87) -+ -+ -+ -+ . reduce by rule 87 -+ -+ -+state 247: -+ -+ Flow1 : Paragraph Flow2 . (reduce by rule 81) -+ -+ -+ -+ . reduce by rule 81 -+ -+ -+state 248: -+ -+ Flow2 : Paragraph . END_P Flow1 -+ Flow2 : Paragraph . Flow2 -+ -+ START_BLOCKQUOTE shift 74 -+ START_CENTER shift 71 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_FORM shift 61 -+ TAG_HR shift 54 -+ TAG_ISINDEX shift 96 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ END_P shift 270 -+ START_PRE shift 44 -+ START_TABLE shift 36 -+ START_UL shift 32 -+ -+ BlockWOIndex goto 92 -+ Block goto 249 -+ Paragraph goto 248 -+ List goto 22 -+ Flow2 goto 269 -+ Preformatted goto 21 -+ -+ . reduce by rule 82 -+ -+ -+state 249: -+ -+ Flow2 : Block . Flow1 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BlockWOIndex goto 92 -+ Block goto 187 -+ Paragraph goto 186 -+ List goto 22 -+ Flow1 goto 271 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 184 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 77 -+ -+ -+state 250: -+ -+ Flow1 : Paragraph END_P . Flow1 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BlockWOIndex goto 92 -+ Block goto 187 -+ Paragraph goto 186 -+ List goto 22 -+ Flow1 goto 272 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 184 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 77 -+ -+ -+state 251: -+ -+ Flow1 : Block Flow1 . (reduce by rule 79) -+ -+ -+ -+ . reduce by rule 79 -+ -+ -+state 252: -+ -+ TableRowList : TableRow TableRowList . (reduce by rule 96) -+ -+ -+ -+ . reduce by rule 96 -+ -+ -+state 253: -+ -+ BlockWOIndex : START_TABLE optCaption TableRowList END_TABLE . (reduce by rule 61) -+ -+ -+ -+ . reduce by rule 61 -+ -+ -+state 254: -+ -+ TableCellList : TableCell . (reduce by rule 99) -+ TableCellList : TableCell . TableCellList -+ -+ START_TD shift 257 -+ START_TH shift 256 -+ -+ TableCellList goto 273 -+ TableCell goto 254 -+ -+ . reduce by rule 99 -+ -+ -+state 255: -+ -+ TableRow : START_TR TableCellList . (reduce by rule 97) -+ TableRow : START_TR TableCellList . END_TR -+ -+ END_TR shift 274 -+ -+ -+ . reduce by rule 97 -+ -+ -+state 256: -+ -+ TableCell : START_TH . BodyContent END_TH -+ TableCell : START_TH . BodyContent -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent goto 275 -+ BodyContent1 goto 141 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 257: -+ -+ TableCell : START_TD . BodyContent END_TD -+ TableCell : START_TD . BodyContent -+ -+ START_A shift 79 -+ START_ADDRESS shift 78 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ START_H1 shift 60 -+ START_H2 shift 59 -+ START_H3 shift 58 -+ START_H4 shift 57 -+ START_H5 shift 56 -+ START_H6 shift 55 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BodyContent goto 276 -+ BodyContent1 goto 141 -+ BodyElement goto 93 -+ BlockWOIndex goto 92 -+ Block goto 91 -+ Paragraph goto 90 -+ List goto 22 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 88 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 29 -+ -+ -+state 258: -+ -+ optCaption : START_CAPTION TextList END_CAPTION . (reduce by rule 94) -+ -+ -+ -+ . reduce by rule 94 -+ -+ -+state 259: -+ -+ OptionList : START_OPTION PCData EndOPTION . OptionList -+ -+ START_OPTION shift 125 -+ -+ OptionList goto 277 -+ -+ . reduce by rule 145 -+ -+ -+state 260: -+ -+ EndOPTION : END_OPTION . (reduce by rule 148) -+ -+ -+ -+ . reduce by rule 148 -+ -+ -+state 261: -+ -+ DLItem : START_DT TextList EndDT . (reduce by rule 75) -+ -+ -+ -+ . reduce by rule 75 -+ -+ -+state 262: -+ -+ EndDT : END_DT . (reduce by rule 89) -+ -+ -+ -+ . reduce by rule 89 -+ -+ -+state 263: -+ -+ DLItem : START_DD Flow1 EndDD . (reduce by rule 76) -+ -+ -+ -+ . reduce by rule 76 -+ -+ -+state 264: -+ -+ EndDD : END_DD . (reduce by rule 91) -+ -+ -+ -+ . reduce by rule 91 -+ -+ -+state 265: -+ -+ AddressContent2 : Paragraph AddressContent2 . (reduce by rule 53) -+ -+ -+ -+ . reduce by rule 53 -+ -+ -+state 266: -+ -+ AddressContent2 : Paragraph END_P . AddressContent1 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ TAG_BR shift 72 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ AddressContent1 goto 278 -+ Paragraph goto 162 -+ TextWOScript goto 89 -+ Text goto 161 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 47 -+ -+ -+state 267: -+ -+ AddressContent1 : Paragraph END_P AddressContent1 . (reduce by rule 49) -+ -+ -+ -+ . reduce by rule 49 -+ -+ -+state 268: -+ -+ HeadContents : HeadElements START_TITLE PCData END_TITLE HeadElements . (reduce by rule 10) -+ -+ -+ -+ . reduce by rule 10 -+ -+ -+state 269: -+ -+ Flow2 : Paragraph Flow2 . (reduce by rule 85) -+ -+ -+ -+ . reduce by rule 85 -+ -+ -+state 270: -+ -+ Flow2 : Paragraph END_P . Flow1 -+ -+ START_A shift 79 -+ START_APPLET shift 77 -+ START_B shift 76 -+ START_BIG shift 75 -+ START_BLOCKQUOTE shift 74 -+ TAG_BR shift 72 -+ START_CENTER shift 71 -+ START_CITE shift 70 -+ START_CODE shift 69 -+ START_DFN shift 68 -+ START_DIR shift 67 -+ START_DIV shift 66 -+ START_DL shift 65 -+ START_EM shift 64 -+ START_FONT shift 63 -+ START_BASEFONT shift 62 -+ START_FORM shift 61 -+ TAG_HR shift 54 -+ START_I shift 53 -+ TAG_IMG shift 52 -+ TAG_INPUT shift 51 -+ TAG_ISINDEX shift 96 -+ START_KBD shift 50 -+ START_MAP shift 49 -+ START_MENU shift 48 -+ START_OL shift 47 -+ START_P shift 46 -+ TAG_PARAM shift 45 -+ START_PRE shift 44 -+ START_SAMP shift 43 -+ START_SCRIPT shift 95 -+ START_SELECT shift 42 -+ START_SMALL shift 41 -+ START_STRIKE shift 40 -+ START_STRONG shift 39 -+ START_SUB shift 38 -+ START_SUP shift 37 -+ START_TABLE shift 36 -+ START_TEXTAREA shift 35 -+ START_TT shift 34 -+ START_U shift 33 -+ START_UL shift 32 -+ START_VAR shift 31 -+ PCDATA shift 30 -+ CHAR_REF shift 29 -+ ENTITY_REF shift 28 -+ -+ BlockWOIndex goto 92 -+ Block goto 187 -+ Paragraph goto 186 -+ List goto 22 -+ Flow1 goto 279 -+ Preformatted goto 21 -+ TextWOScript goto 89 -+ Text goto 184 -+ Font goto 19 -+ Phrase goto 18 -+ Special goto 17 -+ Form goto 16 -+ PCDataElem goto 15 -+ -+ . reduce by rule 77 -+ -+ -+state 271: -+ -+ Flow2 : Block Flow1 . (reduce by rule 83) -+ -+ -+ -+ . reduce by rule 83 -+ -+ -+state 272: -+ -+ Flow1 : Paragraph END_P Flow1 . (reduce by rule 80) -+ -+ -+ -+ . reduce by rule 80 -+ -+ -+state 273: -+ -+ TableCellList : TableCell TableCellList . (reduce by rule 100) -+ -+ -+ -+ . reduce by rule 100 -+ -+ -+state 274: -+ -+ TableRow : START_TR TableCellList END_TR . (reduce by rule 98) -+ -+ -+ -+ . reduce by rule 98 -+ -+ -+state 275: -+ -+ TableCell : START_TH BodyContent . END_TH -+ TableCell : START_TH BodyContent . (reduce by rule 102) -+ -+ END_TH shift 280 -+ -+ -+ . reduce by rule 102 -+ -+ -+state 276: -+ -+ TableCell : START_TD BodyContent . END_TD -+ TableCell : START_TD BodyContent . (reduce by rule 104) -+ -+ END_TD shift 281 -+ -+ -+ . reduce by rule 104 -+ -+ -+state 277: -+ -+ OptionList : START_OPTION PCData EndOPTION OptionList . (reduce by rule 146) -+ -+ -+ -+ . reduce by rule 146 -+ -+ -+state 278: -+ -+ AddressContent2 : Paragraph END_P AddressContent1 . (reduce by rule 52) -+ -+ -+ -+ . reduce by rule 52 -+ -+ -+state 279: -+ -+ Flow2 : Paragraph END_P Flow1 . (reduce by rule 84) -+ -+ -+ -+ . reduce by rule 84 -+ -+ -+state 280: -+ -+ TableCell : START_TH BodyContent END_TH . (reduce by rule 101) -+ -+ -+ -+ . reduce by rule 101 -+ -+ -+state 281: -+ -+ TableCell : START_TD BodyContent END_TD . (reduce by rule 103) -+ -+ -+ -+ . reduce by rule 103 -+ -+ -+state 282: -+ -+ -+ EOF accept -+ -+ -+ . error -+ -+398 of 2987 action table entries left after compaction -+788 goto table entries -diff --git a/HTML/html-gram.sig b/HTML/html-gram.sig -new file mode 100644 -index 0000000..c61b473 ---- /dev/null -+++ b/HTML/html-gram.sig -@@ -0,0 +1,140 @@ -+signature HTML_TOKENS = -+sig -+type ('a,'b) token -+type svalue -+val ENTITY_REF: (string) * 'a * 'a -> (svalue,'a) token -+val CHAR_REF: (string) * 'a * 'a -> (svalue,'a) token -+val PCDATA: (string) * 'a * 'a -> (svalue,'a) token -+val END_VAR: 'a * 'a -> (svalue,'a) token -+val START_VAR: 'a * 'a -> (svalue,'a) token -+val END_UL: 'a * 'a -> (svalue,'a) token -+val START_UL: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_U: 'a * 'a -> (svalue,'a) token -+val START_U: 'a * 'a -> (svalue,'a) token -+val END_TT: 'a * 'a -> (svalue,'a) token -+val START_TT: 'a * 'a -> (svalue,'a) token -+val END_TR: 'a * 'a -> (svalue,'a) token -+val START_TR: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_TITLE: 'a * 'a -> (svalue,'a) token -+val START_TITLE: 'a * 'a -> (svalue,'a) token -+val END_TH: 'a * 'a -> (svalue,'a) token -+val START_TH: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_TEXTAREA: 'a * 'a -> (svalue,'a) token -+val START_TEXTAREA: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_TD: 'a * 'a -> (svalue,'a) token -+val START_TD: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_TABLE: 'a * 'a -> (svalue,'a) token -+val START_TABLE: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_SUP: 'a * 'a -> (svalue,'a) token -+val START_SUP: 'a * 'a -> (svalue,'a) token -+val END_SUB: 'a * 'a -> (svalue,'a) token -+val START_SUB: 'a * 'a -> (svalue,'a) token -+val END_STYLE: 'a * 'a -> (svalue,'a) token -+val START_STYLE: 'a * 'a -> (svalue,'a) token -+val END_STRONG: 'a * 'a -> (svalue,'a) token -+val START_STRONG: 'a * 'a -> (svalue,'a) token -+val END_STRIKE: 'a * 'a -> (svalue,'a) token -+val START_STRIKE: 'a * 'a -> (svalue,'a) token -+val END_SMALL: 'a * 'a -> (svalue,'a) token -+val START_SMALL: 'a * 'a -> (svalue,'a) token -+val END_SELECT: 'a * 'a -> (svalue,'a) token -+val START_SELECT: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_SCRIPT: 'a * 'a -> (svalue,'a) token -+val START_SCRIPT: 'a * 'a -> (svalue,'a) token -+val END_SAMP: 'a * 'a -> (svalue,'a) token -+val START_SAMP: 'a * 'a -> (svalue,'a) token -+val END_PRE: 'a * 'a -> (svalue,'a) token -+val START_PRE: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val TAG_PARAM: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_P: 'a * 'a -> (svalue,'a) token -+val START_P: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_OPTION: 'a * 'a -> (svalue,'a) token -+val START_OPTION: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_OL: 'a * 'a -> (svalue,'a) token -+val START_OL: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val TAG_META: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_MENU: 'a * 'a -> (svalue,'a) token -+val START_MENU: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_MAP: 'a * 'a -> (svalue,'a) token -+val START_MAP: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val TAG_LINK: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_LI: 'a * 'a -> (svalue,'a) token -+val START_LI: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_KBD: 'a * 'a -> (svalue,'a) token -+val START_KBD: 'a * 'a -> (svalue,'a) token -+val TAG_ISINDEX: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val TAG_INPUT: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val TAG_IMG: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_I: 'a * 'a -> (svalue,'a) token -+val START_I: 'a * 'a -> (svalue,'a) token -+val END_HTML: 'a * 'a -> (svalue,'a) token -+val START_HTML: 'a * 'a -> (svalue,'a) token -+val TAG_HR: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_HEAD: 'a * 'a -> (svalue,'a) token -+val START_HEAD: 'a * 'a -> (svalue,'a) token -+val END_H6: 'a * 'a -> (svalue,'a) token -+val START_H6: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_H5: 'a * 'a -> (svalue,'a) token -+val START_H5: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_H4: 'a * 'a -> (svalue,'a) token -+val START_H4: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_H3: 'a * 'a -> (svalue,'a) token -+val START_H3: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_H2: 'a * 'a -> (svalue,'a) token -+val START_H2: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_H1: 'a * 'a -> (svalue,'a) token -+val START_H1: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_FORM: 'a * 'a -> (svalue,'a) token -+val START_FORM: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_BASEFONT: 'a * 'a -> (svalue,'a) token -+val START_BASEFONT: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_FONT: 'a * 'a -> (svalue,'a) token -+val START_FONT: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_EM: 'a * 'a -> (svalue,'a) token -+val START_EM: 'a * 'a -> (svalue,'a) token -+val END_DT: 'a * 'a -> (svalue,'a) token -+val START_DT: 'a * 'a -> (svalue,'a) token -+val END_DL: 'a * 'a -> (svalue,'a) token -+val START_DL: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_DIV: 'a * 'a -> (svalue,'a) token -+val START_DIV: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_DIR: 'a * 'a -> (svalue,'a) token -+val START_DIR: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_DFN: 'a * 'a -> (svalue,'a) token -+val START_DFN: 'a * 'a -> (svalue,'a) token -+val END_DD: 'a * 'a -> (svalue,'a) token -+val START_DD: 'a * 'a -> (svalue,'a) token -+val END_CODE: 'a * 'a -> (svalue,'a) token -+val START_CODE: 'a * 'a -> (svalue,'a) token -+val END_CITE: 'a * 'a -> (svalue,'a) token -+val START_CITE: 'a * 'a -> (svalue,'a) token -+val END_CENTER: 'a * 'a -> (svalue,'a) token -+val START_CENTER: 'a * 'a -> (svalue,'a) token -+val END_CAPTION: 'a * 'a -> (svalue,'a) token -+val START_CAPTION: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val TAG_BR: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_BODY: 'a * 'a -> (svalue,'a) token -+val START_BODY: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_BLOCKQUOTE: 'a * 'a -> (svalue,'a) token -+val START_BLOCKQUOTE: 'a * 'a -> (svalue,'a) token -+val END_BIG: 'a * 'a -> (svalue,'a) token -+val START_BIG: 'a * 'a -> (svalue,'a) token -+val TAG_BASE: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_B: 'a * 'a -> (svalue,'a) token -+val START_B: 'a * 'a -> (svalue,'a) token -+val TAG_AREA: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_APPLET: 'a * 'a -> (svalue,'a) token -+val START_APPLET: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val END_ADDRESS: 'a * 'a -> (svalue,'a) token -+val START_ADDRESS: 'a * 'a -> (svalue,'a) token -+val END_A: 'a * 'a -> (svalue,'a) token -+val START_A: (HTMLAttrVals.attrs) * 'a * 'a -> (svalue,'a) token -+val EOF: 'a * 'a -> (svalue,'a) token -+end -+signature HTML_LRVALS= -+sig -+structure Tokens : HTML_TOKENS -+structure ParserData:PARSER_DATA -+sharing type ParserData.Token.token = Tokens.token -+sharing type ParserData.svalue = Tokens.svalue -+end -diff --git a/HTML/html-gram.sml b/HTML/html-gram.sml -new file mode 100644 -index 0000000..5d220fb ---- /dev/null -+++ b/HTML/html-gram.sml -@@ -0,0 +1,2477 @@ -+ -+ -+ functor HTMLLrValsFn ( -+ structure Token : TOKEN -+ structure HTMLAttrs : HTML_ATTRS) = -+struct -+structure ParserData= -+struct -+structure Header = -+struct -+(* html-gram -+ * -+ * COPYRIGHT (c) 1996 AT&T Research. -+ * -+ * This grammar parses HTML 3.2. Note that it does not enforce exclusions -+ * (for the content of FORM, PRE, etc). Exclusions should be enforced as -+ * a second pass over the parse tree. -+ *) -+ -+fun textList [text] = text -+ | textList l = HTML.TextList l -+ -+fun blockList [blk] = blk -+ | blockList l = HTML.BlockList l -+ -+fun textBlock l = HTML.TextBlock(textList l) -+ -+(* The elements of a definition list (
    ) are tags (
    ) and items (
    ). -+ * To avoid shift/reduce problems, we parse them and then group them. -+ *) -+datatype deflist_item -+ = DL_tag of HTML.text -+ | DL_item of HTML.block -+ -+fun groupDefListContents [] = [] -+ | groupDefListContents (h :: t) = let -+ fun gdlc (DL_tag tag, []) = ({dt=[tag], dd=HTML.BlockList[]}, []) -+ | gdlc (DL_tag tag, h :: t) = let -+ val ({dt, dd}, r) = gdlc (h, t) -+ in -+ ({dt = tag :: dt, dd = dd}, r) -+ end -+ | gdlc (DL_item blk, r) = ({dt=[],dd=blk}, groupDefListContents r) -+ in -+ op :: (gdlc (h, t)) -+ end -+ -+(* A list of Text, paragraphs and blocks requires grouping the Text items and -+ * making an implicit paragraph. We cannot directly use TextList because of -+ * conflicts. -+ *) -+datatype blklist_item -+ = BL_text of HTML.text list -+ | BL_block of HTML.block list -+ -+fun consText (txt, BL_text tl :: r) = BL_text(txt::tl) :: r -+ | consText (txt, l) = BL_text[txt] :: l -+ -+fun consBlock (blk, BL_block bl :: r) = BL_block(blk::bl) :: r -+ | consBlock (blk, l) = BL_block[blk] :: l -+ -+fun mkBlock blks = let -+ fun f (BL_text tl) = textBlock tl -+ | f (BL_block bl) = blockList bl -+ in -+ blockList(List.map f blks) -+ end -+ -+fun mkBody blks = HTML.BODY{ -+ background = NONE, -+ bgcolor = NONE, -+ text = NONE, -+ link = NONE, -+ vlink = NONE, -+ alink = NONE, -+ content = mkBlock blks -+ } -+ -+ -+end -+structure LrTable = Token.LrTable -+structure Token = Token -+local open LrTable in -+val table=let val actionRows = -+"\ -+\\001\000\001\000\000\000\000\000\ -+\\001\000\002\000\081\000\004\000\080\000\006\000\079\000\009\000\078\000\ -+\\012\000\077\000\014\000\076\000\016\000\075\000\018\000\074\000\ -+\\021\000\073\000\023\000\072\000\025\000\071\000\029\000\070\000\ -+\\031\000\069\000\033\000\068\000\035\000\067\000\039\000\066\000\ -+\\041\000\065\000\043\000\064\000\045\000\063\000\047\000\062\000\ -+\\049\000\061\000\051\000\060\000\053\000\059\000\055\000\058\000\ -+\\057\000\057\000\061\000\056\000\064\000\055\000\066\000\054\000\ -+\\067\000\053\000\069\000\052\000\074\000\051\000\076\000\050\000\ -+\\079\000\049\000\083\000\048\000\085\000\047\000\086\000\046\000\ -+\\088\000\045\000\092\000\044\000\094\000\043\000\096\000\042\000\ -+\\098\000\041\000\102\000\040\000\104\000\039\000\106\000\038\000\ -+\\110\000\037\000\118\000\036\000\120\000\035\000\122\000\034\000\ -+\\124\000\033\000\126\000\032\000\127\000\031\000\128\000\030\000\000\000\ -+\\001\000\003\000\241\000\000\000\ -+\\001\000\005\000\240\000\000\000\ -+\\001\000\007\000\235\000\000\000\ -+\\001\000\010\000\234\000\000\000\ -+\\001\000\013\000\233\000\000\000\ -+\\001\000\015\000\232\000\000\000\ -+\\001\000\020\000\004\001\000\000\ -+\\001\000\022\000\231\000\000\000\ -+\\001\000\024\000\230\000\000\000\ -+\\001\000\026\000\229\000\000\000\ -+\\001\000\030\000\228\000\000\000\ -+\\001\000\032\000\227\000\000\000\ -+\\001\000\034\000\226\000\000\000\ -+\\001\000\036\000\223\000\000\000\ -+\\001\000\040\000\221\000\000\000\ -+\\001\000\042\000\220\000\000\000\ -+\\001\000\044\000\219\000\000\000\ -+\\001\000\046\000\218\000\000\000\ -+\\001\000\048\000\217\000\000\000\ -+\\001\000\050\000\216\000\000\000\ -+\\001\000\052\000\215\000\000\000\ -+\\001\000\054\000\214\000\000\000\ -+\\001\000\056\000\213\000\000\000\ -+\\001\000\058\000\212\000\000\000\ -+\\001\000\065\000\211\000\000\000\ -+\\001\000\070\000\210\000\000\000\ -+\\001\000\075\000\208\000\000\000\ -+\\001\000\077\000\207\000\000\000\ -+\\001\000\080\000\206\000\000\000\ -+\\001\000\087\000\205\000\000\000\ -+\\001\000\089\000\204\000\000\000\ -+\\001\000\091\000\170\000\000\000\ -+\\001\000\091\000\244\000\000\000\ -+\\001\000\093\000\202\000\000\000\ -+\\001\000\095\000\201\000\000\000\ -+\\001\000\097\000\200\000\000\000\ -+\\001\000\099\000\199\000\000\000\ -+\\001\000\101\000\169\000\000\000\ -+\\001\000\103\000\198\000\000\000\ -+\\001\000\105\000\197\000\000\000\ -+\\001\000\107\000\255\000\000\000\ -+\\001\000\108\000\003\001\112\000\002\001\000\000\ -+\\001\000\111\000\192\000\000\000\ -+\\001\000\114\000\083\000\000\000\ -+\\001\000\115\000\242\000\000\000\ -+\\001\000\116\000\195\000\000\000\ -+\\001\000\119\000\191\000\000\000\ -+\\001\000\121\000\190\000\000\000\ -+\\001\000\123\000\185\000\000\000\ -+\\001\000\125\000\183\000\000\000\ -+\\029\001\000\000\ -+\\030\001\062\000\004\000\000\000\ -+\\031\001\000\000\ -+\\032\001\063\000\109\000\000\000\ -+\\033\001\000\000\ -+\\034\001\000\000\ -+\\035\001\059\000\007\000\000\000\ -+\\036\001\000\000\ -+\\037\001\060\000\085\000\000\000\ -+\\038\001\000\000\ -+\\039\001\000\000\ -+\\040\001\011\000\016\000\068\000\015\000\073\000\014\000\078\000\013\000\ -+\\090\000\012\000\100\000\011\000\000\000\ -+\\041\001\000\000\ -+\\042\001\000\000\ -+\\043\001\000\000\ -+\\044\001\000\000\ -+\\045\001\000\000\ -+\\046\001\000\000\ -+\\047\001\000\000\ -+\\048\001\000\000\ -+\\049\001\017\000\107\000\000\000\ -+\\050\001\000\000\ -+\\051\001\000\000\ -+\\052\001\000\000\ -+\\053\001\000\000\ -+\\054\001\000\000\ -+\\055\001\000\000\ -+\\056\001\000\000\ -+\\057\001\000\000\ -+\\058\001\002\000\081\000\004\000\080\000\006\000\079\000\009\000\078\000\ -+\\012\000\077\000\014\000\076\000\018\000\074\000\021\000\073\000\ -+\\023\000\072\000\025\000\071\000\029\000\070\000\031\000\069\000\ -+\\033\000\068\000\035\000\067\000\039\000\066\000\041\000\065\000\ -+\\043\000\064\000\045\000\063\000\047\000\062\000\049\000\061\000\ -+\\051\000\060\000\053\000\059\000\055\000\058\000\057\000\057\000\ -+\\061\000\056\000\064\000\055\000\066\000\054\000\067\000\053\000\ -+\\068\000\098\000\069\000\052\000\074\000\051\000\076\000\050\000\ -+\\079\000\049\000\083\000\048\000\085\000\047\000\086\000\046\000\ -+\\088\000\045\000\090\000\097\000\092\000\044\000\094\000\043\000\ -+\\096\000\042\000\098\000\041\000\102\000\040\000\104\000\039\000\ -+\\106\000\038\000\110\000\037\000\118\000\036\000\120\000\035\000\ -+\\122\000\034\000\124\000\033\000\126\000\032\000\127\000\031\000\ -+\\128\000\030\000\000\000\ -+\\059\001\000\000\ -+\\060\001\000\000\ -+\\061\001\000\000\ -+\\062\001\000\000\ -+\\063\001\000\000\ -+\\064\001\004\000\080\000\014\000\076\000\021\000\073\000\031\000\069\000\ -+\\033\000\068\000\035\000\067\000\045\000\063\000\047\000\062\000\ -+\\049\000\061\000\051\000\060\000\053\000\059\000\055\000\058\000\ -+\\057\000\057\000\061\000\056\000\068\000\098\000\076\000\050\000\ -+\\079\000\049\000\083\000\048\000\084\000\103\000\086\000\046\000\ -+\\106\000\038\000\122\000\034\000\000\000\ -+\\064\001\004\000\080\000\014\000\076\000\021\000\073\000\031\000\069\000\ -+\\033\000\068\000\035\000\067\000\045\000\063\000\047\000\062\000\ -+\\049\000\061\000\051\000\060\000\053\000\059\000\055\000\058\000\ -+\\057\000\057\000\061\000\056\000\068\000\098\000\076\000\050\000\ -+\\079\000\049\000\083\000\048\000\084\000\173\000\086\000\046\000\ -+\\106\000\038\000\122\000\034\000\000\000\ -+\\064\001\004\000\080\000\014\000\076\000\021\000\073\000\031\000\069\000\ -+\\033\000\068\000\035\000\067\000\045\000\063\000\047\000\062\000\ -+\\049\000\061\000\051\000\060\000\053\000\059\000\055\000\058\000\ -+\\057\000\057\000\061\000\056\000\068\000\098\000\076\000\050\000\ -+\\079\000\049\000\083\000\048\000\084\000\178\000\086\000\046\000\ -+\\106\000\038\000\122\000\034\000\000\000\ -+\\065\001\000\000\ -+\\066\001\000\000\ -+\\067\001\000\000\ -+\\068\001\000\000\ -+\\069\001\000\000\ -+\\070\001\000\000\ -+\\071\001\000\000\ -+\\072\001\000\000\ -+\\073\001\000\000\ -+\\074\001\000\000\ -+\\075\001\000\000\ -+\\076\001\002\000\081\000\006\000\079\000\009\000\078\000\012\000\077\000\ -+\\018\000\074\000\023\000\072\000\025\000\071\000\029\000\070\000\ -+\\039\000\066\000\041\000\065\000\043\000\064\000\064\000\055\000\ -+\\066\000\054\000\067\000\053\000\069\000\052\000\074\000\051\000\ -+\\083\000\048\000\085\000\047\000\088\000\045\000\090\000\097\000\ -+\\092\000\044\000\094\000\043\000\096\000\042\000\098\000\041\000\ -+\\102\000\040\000\104\000\039\000\110\000\037\000\118\000\036\000\ -+\\120\000\035\000\124\000\033\000\126\000\032\000\127\000\031\000\ -+\\128\000\030\000\000\000\ -+\\077\001\000\000\ -+\\078\001\000\000\ -+\\079\001\000\000\ -+\\080\001\083\000\048\000\084\000\239\000\000\000\ -+\\080\001\083\000\048\000\084\000\012\001\000\000\ -+\\081\001\000\000\ -+\\082\001\000\000\ -+\\083\001\000\000\ -+\\084\001\000\000\ -+\\085\001\000\000\ -+\\086\001\000\000\ -+\\087\001\000\000\ -+\\088\001\000\000\ -+\\089\001\000\000\ -+\\090\001\000\000\ -+\\091\001\000\000\ -+\\092\001\000\000\ -+\\093\001\000\000\ -+\\094\001\000\000\ -+\\095\001\000\000\ -+\\096\001\000\000\ -+\\097\001\000\000\ -+\\098\001\000\000\ -+\\099\001\071\000\115\000\000\000\ -+\\100\001\000\000\ -+\\101\001\000\000\ -+\\102\001\027\000\151\000\037\000\150\000\000\000\ -+\\103\001\000\000\ -+\\104\001\000\000\ -+\\105\001\000\000\ -+\\106\001\002\000\081\000\006\000\079\000\009\000\078\000\012\000\077\000\ -+\\014\000\076\000\018\000\074\000\021\000\073\000\023\000\072\000\ -+\\025\000\071\000\029\000\070\000\031\000\069\000\033\000\068\000\ -+\\035\000\067\000\039\000\066\000\041\000\065\000\043\000\064\000\ -+\\045\000\063\000\061\000\056\000\064\000\055\000\066\000\054\000\ -+\\067\000\053\000\068\000\098\000\069\000\052\000\074\000\051\000\ -+\\076\000\050\000\079\000\049\000\083\000\048\000\085\000\047\000\ -+\\086\000\046\000\088\000\045\000\090\000\097\000\092\000\044\000\ -+\\094\000\043\000\096\000\042\000\098\000\041\000\102\000\040\000\ -+\\104\000\039\000\106\000\038\000\110\000\037\000\118\000\036\000\ -+\\120\000\035\000\122\000\034\000\124\000\033\000\126\000\032\000\ -+\\127\000\031\000\128\000\030\000\000\000\ -+\\107\001\000\000\ -+\\108\001\000\000\ -+\\109\001\000\000\ -+\\110\001\000\000\ -+\\111\001\014\000\076\000\021\000\073\000\031\000\069\000\033\000\068\000\ -+\\035\000\067\000\045\000\063\000\061\000\056\000\068\000\098\000\ -+\\076\000\050\000\079\000\049\000\083\000\048\000\084\000\252\000\ -+\\086\000\046\000\106\000\038\000\122\000\034\000\000\000\ -+\\111\001\014\000\076\000\021\000\073\000\031\000\069\000\033\000\068\000\ -+\\035\000\067\000\045\000\063\000\061\000\056\000\068\000\098\000\ -+\\076\000\050\000\079\000\049\000\083\000\048\000\084\000\016\001\ -+\\086\000\046\000\106\000\038\000\122\000\034\000\000\000\ -+\\112\001\000\000\ -+\\113\001\000\000\ -+\\114\001\000\000\ -+\\115\001\072\000\248\000\000\000\ -+\\116\001\000\000\ -+\\117\001\038\000\008\001\000\000\ -+\\118\001\000\000\ -+\\119\001\028\000\010\001\000\000\ -+\\120\001\000\000\ -+\\121\001\000\000\ -+\\122\001\019\000\120\000\000\000\ -+\\123\001\000\000\ -+\\124\001\116\000\195\000\000\000\ -+\\125\001\000\000\ -+\\126\001\117\000\020\001\000\000\ -+\\127\001\000\000\ -+\\128\001\108\000\003\001\112\000\002\001\000\000\ -+\\129\001\000\000\ -+\\130\001\000\000\ -+\\131\001\113\000\026\001\000\000\ -+\\132\001\000\000\ -+\\133\001\109\000\027\001\000\000\ -+\\134\001\000\000\ -+\\135\001\002\000\081\000\006\000\079\000\009\000\078\000\012\000\077\000\ -+\\018\000\074\000\023\000\072\000\025\000\071\000\029\000\070\000\ -+\\039\000\066\000\041\000\065\000\043\000\064\000\064\000\055\000\ -+\\066\000\054\000\067\000\053\000\069\000\052\000\074\000\051\000\ -+\\085\000\047\000\088\000\045\000\090\000\097\000\092\000\044\000\ -+\\094\000\043\000\096\000\042\000\098\000\041\000\102\000\040\000\ -+\\104\000\039\000\110\000\037\000\118\000\036\000\120\000\035\000\ -+\\124\000\033\000\126\000\032\000\127\000\031\000\128\000\030\000\000\000\ -+\\136\001\000\000\ -+\\137\001\000\000\ -+\\138\001\000\000\ -+\\139\001\000\000\ -+\\140\001\000\000\ -+\\141\001\000\000\ -+\\142\001\000\000\ -+\\143\001\000\000\ -+\\144\001\000\000\ -+\\145\001\000\000\ -+\\146\001\000\000\ -+\\147\001\000\000\ -+\\148\001\000\000\ -+\\149\001\000\000\ -+\\150\001\000\000\ -+\\151\001\000\000\ -+\\152\001\000\000\ -+\\153\001\000\000\ -+\\154\001\000\000\ -+\\155\001\000\000\ -+\\156\001\000\000\ -+\\157\001\000\000\ -+\\158\001\000\000\ -+\\159\001\000\000\ -+\\160\001\000\000\ -+\\161\001\000\000\ -+\\162\001\000\000\ -+\\163\001\000\000\ -+\\164\001\000\000\ -+\\165\001\000\000\ -+\\166\001\000\000\ -+\\167\001\000\000\ -+\\168\001\000\000\ -+\\169\001\008\000\134\000\000\000\ -+\\170\001\000\000\ -+\\171\001\000\000\ -+\\172\001\000\000\ -+\\173\001\000\000\ -+\\174\001\081\000\127\000\000\000\ -+\\175\001\000\000\ -+\\176\001\082\000\006\001\000\000\ -+\\177\001\000\000\ -+\\178\001\000\000\ -+\\179\001\126\000\032\000\127\000\031\000\128\000\030\000\000\000\ -+\\180\001\000\000\ -+\\181\001\000\000\ -+\\182\001\000\000\ -+\\183\001\000\000\ -+\" -+val actionRowNumbers = -+"\053\000\058\000\054\000\063\000\ -+\\001\000\059\000\063\000\045\000\ -+\\060\000\206\000\206\000\065\000\ -+\\066\000\067\000\068\000\164\000\ -+\\168\000\167\000\166\000\165\000\ -+\\081\000\110\000\109\000\087\000\ -+\\081\000\081\000\072\000\055\000\ -+\\210\000\209\000\208\000\162\000\ -+\\125\000\162\000\162\000\206\000\ -+\\149\000\162\000\162\000\162\000\ -+\\162\000\162\000\201\000\162\000\ -+\\162\000\195\000\162\000\125\000\ -+\\125\000\196\000\162\000\198\000\ -+\\189\000\162\000\115\000\162\000\ -+\\162\000\162\000\162\000\162\000\ -+\\162\000\081\000\162\000\162\000\ -+\\162\000\128\000\081\000\125\000\ -+\\162\000\162\000\162\000\081\000\ -+\\193\000\081\000\081\000\162\000\ -+\\162\000\162\000\101\000\162\000\ -+\\064\000\206\000\057\000\061\000\ -+\\206\000\205\000\039\000\033\000\ -+\\081\000\169\000\088\000\081\000\ -+\\117\000\081\000\076\000\206\000\ -+\\118\000\089\000\081\000\081\000\ -+\\080\000\081\000\078\000\077\000\ -+\\071\000\073\000\052\000\056\000\ -+\\162\000\161\000\051\000\125\000\ -+\\050\000\132\000\049\000\048\000\ -+\\044\000\047\000\162\000\041\000\ -+\\040\000\038\000\037\000\036\000\ -+\\035\000\206\000\032\000\031\000\ -+\\119\000\030\000\029\000\028\000\ -+\\196\000\027\000\026\000\025\000\ -+\\024\000\023\000\022\000\021\000\ -+\\020\000\074\000\019\000\018\000\ -+\\017\000\016\000\128\000\015\000\ -+\\162\000\132\000\014\000\013\000\ -+\\012\000\011\000\010\000\009\000\ -+\\075\000\007\000\006\000\005\000\ -+\\004\000\101\000\105\000\003\000\ -+\\002\000\046\000\207\000\069\000\ -+\\070\000\082\000\086\000\081\000\ -+\\084\000\083\000\034\000\093\000\ -+\\081\000\091\000\090\000\079\000\ -+\\163\000\186\000\126\000\120\000\ -+\\132\000\142\000\137\000\132\000\ -+\\174\000\171\000\200\000\151\000\ -+\\042\000\043\000\008\000\179\000\ -+\\178\000\181\000\175\000\177\000\ -+\\199\000\203\000\184\000\148\000\ -+\\121\000\123\000\194\000\197\000\ -+\\185\000\172\000\099\000\098\000\ -+\\097\000\096\000\095\000\094\000\ -+\\114\000\192\000\191\000\180\000\ -+\\129\000\124\000\144\000\146\000\ -+\\111\000\122\000\183\000\182\000\ -+\\187\000\112\000\113\000\176\000\ -+\\173\000\190\000\102\000\106\000\ -+\\104\000\101\000\100\000\188\000\ -+\\063\000\085\000\170\000\092\000\ -+\\133\000\127\000\143\000\136\000\ -+\\138\000\132\000\132\000\134\000\ -+\\152\000\116\000\155\000\153\000\ -+\\081\000\081\000\150\000\201\000\ -+\\204\000\130\000\145\000\131\000\ -+\\147\000\108\000\101\000\103\000\ -+\\062\000\141\000\132\000\139\000\ -+\\135\000\156\000\154\000\158\000\ -+\\160\000\202\000\107\000\140\000\ -+\\157\000\159\000\000\000" -+val gotoT = -+"\ -+\\001\000\026\001\002\000\001\000\000\000\ -+\\004\000\004\000\005\000\003\000\000\000\ -+\\000\000\ -+\\007\000\008\000\008\000\007\000\009\000\006\000\000\000\ -+\\010\000\027\000\014\000\026\000\017\000\025\000\020\000\024\000\ -+\\022\000\023\000\023\000\022\000\033\000\021\000\041\000\020\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\008\000\080\000\009\000\006\000\000\000\ -+\\000\000\ -+\\006\000\082\000\000\000\ -+\\050\000\086\000\051\000\085\000\052\000\084\000\000\000\ -+\\050\000\087\000\051\000\085\000\052\000\084\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\015\000\094\000\017\000\093\000\020\000\092\000\021\000\091\000\ -+\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ -+\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ -+\\047\000\016\000\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\016\000\100\000\017\000\099\000\020\000\092\000\021\000\098\000\ -+\\022\000\097\000\023\000\022\000\033\000\021\000\000\000\ -+\\015\000\102\000\017\000\093\000\020\000\092\000\021\000\091\000\ -+\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ -+\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ -+\\047\000\016\000\052\000\015\000\000\000\ -+\\015\000\103\000\017\000\093\000\020\000\092\000\021\000\091\000\ -+\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ -+\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ -+\\047\000\016\000\052\000\015\000\000\000\ -+\\012\000\104\000\000\000\ -+\\003\000\106\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\039\000\110\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\024\000\112\000\025\000\111\000\000\000\ -+\\039\000\114\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\115\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\050\000\116\000\051\000\085\000\052\000\084\000\000\000\ -+\\034\000\117\000\000\000\ -+\\039\000\119\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\120\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\121\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\122\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\123\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\048\000\124\000\000\000\ -+\\039\000\126\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\127\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\039\000\128\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\024\000\129\000\025\000\111\000\000\000\ -+\\024\000\130\000\025\000\111\000\000\000\ -+\\046\000\131\000\000\000\ -+\\039\000\133\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\039\000\134\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\039\000\135\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\136\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\137\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\138\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\139\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\140\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\013\000\142\000\015\000\141\000\017\000\093\000\020\000\092\000\ -+\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ -+\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ -+\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ -+\\039\000\143\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\144\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\145\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\026\000\147\000\027\000\146\000\000\000\ -+\\013\000\150\000\015\000\141\000\017\000\093\000\020\000\092\000\ -+\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ -+\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ -+\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ -+\\024\000\151\000\025\000\111\000\000\000\ -+\\039\000\152\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\153\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\154\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\013\000\155\000\015\000\141\000\017\000\093\000\020\000\092\000\ -+\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ -+\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ -+\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ -+\\000\000\ -+\\013\000\156\000\015\000\141\000\017\000\093\000\020\000\092\000\ -+\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ -+\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ -+\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ -+\\013\000\157\000\015\000\141\000\017\000\093\000\020\000\092\000\ -+\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ -+\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ -+\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ -+\\039\000\158\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\159\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\160\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\018\000\163\000\022\000\162\000\041\000\089\000\042\000\161\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\039\000\164\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\050\000\165\000\051\000\085\000\052\000\084\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\051\000\166\000\052\000\084\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\015\000\169\000\017\000\093\000\020\000\092\000\021\000\091\000\ -+\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ -+\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ -+\\047\000\016\000\052\000\015\000\000\000\ -+\\000\000\ -+\\016\000\170\000\017\000\099\000\020\000\092\000\021\000\098\000\ -+\\022\000\097\000\023\000\022\000\033\000\021\000\000\000\ -+\\015\000\172\000\017\000\093\000\020\000\092\000\021\000\091\000\ -+\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ -+\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ -+\\047\000\016\000\052\000\015\000\000\000\ -+\\000\000\ -+\\015\000\173\000\017\000\093\000\020\000\092\000\021\000\091\000\ -+\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ -+\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ -+\\047\000\016\000\052\000\015\000\000\000\ -+\\000\000\ -+\\050\000\174\000\051\000\085\000\052\000\084\000\000\000\ -+\\000\000\ -+\\016\000\175\000\017\000\099\000\020\000\092\000\021\000\098\000\ -+\\022\000\097\000\023\000\022\000\033\000\021\000\000\000\ -+\\015\000\177\000\017\000\093\000\020\000\092\000\021\000\091\000\ -+\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ -+\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ -+\\047\000\016\000\052\000\015\000\000\000\ -+\\015\000\178\000\017\000\093\000\020\000\092\000\021\000\091\000\ -+\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ -+\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ -+\\047\000\016\000\052\000\015\000\000\000\ -+\\000\000\ -+\\015\000\179\000\017\000\093\000\020\000\092\000\021\000\091\000\ -+\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ -+\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ -+\\047\000\016\000\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\040\000\180\000\041\000\089\000\042\000\108\000\043\000\019\000\ -+\\044\000\018\000\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\024\000\182\000\025\000\111\000\000\000\ -+\\000\000\ -+\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ -+\\028\000\185\000\033\000\021\000\041\000\089\000\042\000\184\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\035\000\192\000\036\000\191\000\000\000\ -+\\039\000\194\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\050\000\201\000\051\000\085\000\052\000\084\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\046\000\207\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\026\000\220\000\027\000\146\000\000\000\ -+\\000\000\ -+\\039\000\222\000\040\000\109\000\041\000\089\000\042\000\108\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ -+\\028\000\223\000\033\000\021\000\041\000\089\000\042\000\184\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\018\000\234\000\022\000\162\000\041\000\089\000\042\000\161\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\019\000\236\000\022\000\235\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\015\000\241\000\017\000\093\000\020\000\092\000\021\000\091\000\ -+\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ -+\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ -+\\047\000\016\000\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\015\000\243\000\017\000\093\000\020\000\092\000\021\000\091\000\ -+\\022\000\090\000\023\000\022\000\033\000\021\000\041\000\089\000\ -+\\042\000\088\000\043\000\019\000\044\000\018\000\045\000\017\000\ -+\\047\000\016\000\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ -+\\028\000\244\000\033\000\021\000\041\000\089\000\042\000\184\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\030\000\245\000\000\000\ -+\\020\000\092\000\021\000\249\000\022\000\248\000\023\000\022\000\ -+\\029\000\247\000\033\000\021\000\000\000\ -+\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ -+\\028\000\251\000\033\000\021\000\041\000\089\000\042\000\184\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\035\000\252\000\036\000\191\000\000\000\ -+\\000\000\ -+\\037\000\255\000\038\000\254\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\049\000\003\001\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\031\000\005\001\000\000\ -+\\032\000\007\001\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\019\000\009\001\022\000\235\000\000\000\ -+\\000\000\ -+\\018\000\011\001\022\000\162\000\041\000\089\000\042\000\161\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\008\000\012\001\009\000\006\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\020\000\092\000\021\000\249\000\022\000\248\000\023\000\022\000\ -+\\029\000\013\001\033\000\021\000\000\000\ -+\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ -+\\028\000\015\001\033\000\021\000\041\000\089\000\042\000\184\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ -+\\028\000\016\001\033\000\021\000\041\000\089\000\042\000\184\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\037\000\017\001\038\000\254\000\000\000\ -+\\000\000\ -+\\013\000\019\001\015\000\141\000\017\000\093\000\020\000\092\000\ -+\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ -+\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ -+\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ -+\\013\000\020\001\015\000\141\000\017\000\093\000\020\000\092\000\ -+\\021\000\091\000\022\000\090\000\023\000\022\000\033\000\021\000\ -+\\041\000\089\000\042\000\088\000\043\000\019\000\044\000\018\000\ -+\\045\000\017\000\047\000\016\000\052\000\015\000\000\000\ -+\\000\000\ -+\\048\000\021\001\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\018\000\022\001\022\000\162\000\041\000\089\000\042\000\161\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\020\000\092\000\021\000\187\000\022\000\186\000\023\000\022\000\ -+\\028\000\023\001\033\000\021\000\041\000\089\000\042\000\184\000\ -+\\043\000\019\000\044\000\018\000\045\000\017\000\047\000\016\000\ -+\\052\000\015\000\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\\000\000\ -+\" -+val numstates = 283 -+val numrules = 155 -+val s = ref "" and index = ref 0 -+val string_to_int = fn () => -+let val i = !index -+in index := i+2; Char.ord(String.sub(!s,i)) + Char.ord(String.sub(!s,i+1)) * 256 -+end -+val string_to_list = fn s' => -+ let val len = String.size s' -+ fun f () = -+ if !index < len then string_to_int() :: f() -+ else nil -+ in index := 0; s := s'; f () -+ end -+val string_to_pairlist = fn (conv_key,conv_entry) => -+ let fun f () = -+ case string_to_int() -+ of 0 => EMPTY -+ | n => PAIR(conv_key (n-1),conv_entry (string_to_int()),f()) -+ in f -+ end -+val string_to_pairlist_default = fn (conv_key,conv_entry) => -+ let val conv_row = string_to_pairlist(conv_key,conv_entry) -+ in fn () => -+ let val default = conv_entry(string_to_int()) -+ val row = conv_row() -+ in (row,default) -+ end -+ end -+val string_to_table = fn (convert_row,s') => -+ let val len = String.size s' -+ fun f ()= -+ if !index < len then convert_row() :: f() -+ else nil -+ in (s := s'; index := 0; f ()) -+ end -+local -+ val memo = Array.array(numstates+numrules,ERROR) -+ val _ =let fun g i=(Array.update(memo,i,REDUCE(i-numstates)); g(i+1)) -+ fun f i = -+ if i=numstates then g i -+ else (Array.update(memo,i,SHIFT (STATE i)); f (i+1)) -+ in f 0 handle General.Subscript => () -+ end -+in -+val entry_to_action = fn 0 => ACCEPT | 1 => ERROR | j => Array.sub(memo,(j-2)) -+end -+val gotoT=Array.fromList(string_to_table(string_to_pairlist(NT,STATE),gotoT)) -+val actionRows=string_to_table(string_to_pairlist_default(T,entry_to_action),actionRows) -+val actionRowNumbers = string_to_list actionRowNumbers -+val actionT = let val actionRowLookUp= -+let val a=Array.fromList(actionRows) in fn i=>Array.sub(a,i) end -+in Array.fromList(List.map actionRowLookUp actionRowNumbers) -+end -+in LrTable.mkLrTable {actions=actionT,gotos=gotoT,numRules=numrules, -+numStates=numstates,initialState=STATE 0} -+end -+end -+local open Header in -+type pos = int -+type arg = int -> HTMLAttrs.context -+structure MlyValue = -+struct -+datatype svalue = VOID | ntVOID of unit | ENTITY_REF of (string) -+ | CHAR_REF of (string) | PCDATA of (string) -+ | START_UL of (HTMLAttrVals.attrs) -+ | START_TR of (HTMLAttrVals.attrs) -+ | START_TH of (HTMLAttrVals.attrs) -+ | START_TEXTAREA of (HTMLAttrVals.attrs) -+ | START_TD of (HTMLAttrVals.attrs) -+ | START_TABLE of (HTMLAttrVals.attrs) -+ | START_SELECT of (HTMLAttrVals.attrs) -+ | START_PRE of (HTMLAttrVals.attrs) -+ | TAG_PARAM of (HTMLAttrVals.attrs) -+ | START_P of (HTMLAttrVals.attrs) -+ | START_OPTION of (HTMLAttrVals.attrs) -+ | START_OL of (HTMLAttrVals.attrs) -+ | TAG_META of (HTMLAttrVals.attrs) -+ | START_MENU of (HTMLAttrVals.attrs) -+ | START_MAP of (HTMLAttrVals.attrs) -+ | TAG_LINK of (HTMLAttrVals.attrs) -+ | START_LI of (HTMLAttrVals.attrs) -+ | TAG_ISINDEX of (HTMLAttrVals.attrs) -+ | TAG_INPUT of (HTMLAttrVals.attrs) -+ | TAG_IMG of (HTMLAttrVals.attrs) | TAG_HR of (HTMLAttrVals.attrs) -+ | START_H6 of (HTMLAttrVals.attrs) -+ | START_H5 of (HTMLAttrVals.attrs) -+ | START_H4 of (HTMLAttrVals.attrs) -+ | START_H3 of (HTMLAttrVals.attrs) -+ | START_H2 of (HTMLAttrVals.attrs) -+ | START_H1 of (HTMLAttrVals.attrs) -+ | START_FORM of (HTMLAttrVals.attrs) -+ | START_BASEFONT of (HTMLAttrVals.attrs) -+ | START_FONT of (HTMLAttrVals.attrs) -+ | START_DL of (HTMLAttrVals.attrs) -+ | START_DIV of (HTMLAttrVals.attrs) -+ | START_DIR of (HTMLAttrVals.attrs) -+ | START_CAPTION of (HTMLAttrVals.attrs) -+ | TAG_BR of (HTMLAttrVals.attrs) -+ | START_BODY of (HTMLAttrVals.attrs) -+ | TAG_BASE of (HTMLAttrVals.attrs) -+ | TAG_AREA of (HTMLAttrVals.attrs) -+ | START_APPLET of (HTMLAttrVals.attrs) -+ | START_A of (HTMLAttrVals.attrs) | PCDataElem of (HTML.pcdata) -+ | PCDataList of (HTML.pcdata list) | PCData of (HTML.pcdata) -+ | OptionList of (HTML.select_option list) | Form of (HTML.text) -+ | AreaList of (HTML.area list) | Special of (HTML.text) -+ | Phrase of (HTML.text) | Font of (HTML.text) -+ | Text of (HTML.text) | TextWOScript of (HTML.text) -+ | TextList' of (HTML.text list) | TextList of (HTML.text) -+ | TableCell of (HTML.table_cell) -+ | TableCellList of (HTML.table_cell list) | TableRow of (HTML.tr) -+ | TableRowList of (HTML.tr list) -+ | optCaption of (HTML.caption option) -+ | Preformatted of (HTML.block) | Flow2 of (blklist_item list) -+ | Flow1 of (blklist_item list) | DLItem of (deflist_item) -+ | DLItemList of (deflist_item list) | ListItem of (HTML.list_item) -+ | ListItemList of (HTML.list_item list) | List of (HTML.block) -+ | Paragraph of (HTML.block) | Block of (HTML.block) -+ | BlockWOIndex of (HTML.block) -+ | AddressContent2 of (blklist_item list) -+ | AddressContent1 of (blklist_item list) -+ | BodyElement of (HTML.block) | BodyContent2 of (blklist_item list) -+ | BodyContent1 of (blklist_item list) | BodyContent0 of (HTML.body) -+ | BodyContent of (HTML.block) | Body of (HTML.body) -+ | HeadElement of (HTML.head_content) -+ | HeadElements of (HTML.head_content list) -+ | HeadContents of (HTML.head_content list) -+ | Head of (HTML.head_content list) -+ | StartHTML of (HTML.cdata option) | Document of (HTML.html) -+end -+type svalue = MlyValue.svalue -+type result = HTML.html -+end -+structure EC= -+struct -+open LrTable -+infix 5 $$ -+fun x $$ y = y::x -+val is_keyword = -+fn _ => false -+val preferred_change : (term list * term list) list = -+nil -+val noShift = -+fn (T 0) => true | _ => false -+val showTerminal = -+fn (T 0) => "EOF" -+ | (T 1) => "START_A" -+ | (T 2) => "END_A" -+ | (T 3) => "START_ADDRESS" -+ | (T 4) => "END_ADDRESS" -+ | (T 5) => "START_APPLET" -+ | (T 6) => "END_APPLET" -+ | (T 7) => "TAG_AREA" -+ | (T 8) => "START_B" -+ | (T 9) => "END_B" -+ | (T 10) => "TAG_BASE" -+ | (T 11) => "START_BIG" -+ | (T 12) => "END_BIG" -+ | (T 13) => "START_BLOCKQUOTE" -+ | (T 14) => "END_BLOCKQUOTE" -+ | (T 15) => "START_BODY" -+ | (T 16) => "END_BODY" -+ | (T 17) => "TAG_BR" -+ | (T 18) => "START_CAPTION" -+ | (T 19) => "END_CAPTION" -+ | (T 20) => "START_CENTER" -+ | (T 21) => "END_CENTER" -+ | (T 22) => "START_CITE" -+ | (T 23) => "END_CITE" -+ | (T 24) => "START_CODE" -+ | (T 25) => "END_CODE" -+ | (T 26) => "START_DD" -+ | (T 27) => "END_DD" -+ | (T 28) => "START_DFN" -+ | (T 29) => "END_DFN" -+ | (T 30) => "START_DIR" -+ | (T 31) => "END_DIR" -+ | (T 32) => "START_DIV" -+ | (T 33) => "END_DIV" -+ | (T 34) => "START_DL" -+ | (T 35) => "END_DL" -+ | (T 36) => "START_DT" -+ | (T 37) => "END_DT" -+ | (T 38) => "START_EM" -+ | (T 39) => "END_EM" -+ | (T 40) => "START_FONT" -+ | (T 41) => "END_FONT" -+ | (T 42) => "START_BASEFONT" -+ | (T 43) => "END_BASEFONT" -+ | (T 44) => "START_FORM" -+ | (T 45) => "END_FORM" -+ | (T 46) => "START_H1" -+ | (T 47) => "END_H1" -+ | (T 48) => "START_H2" -+ | (T 49) => "END_H2" -+ | (T 50) => "START_H3" -+ | (T 51) => "END_H3" -+ | (T 52) => "START_H4" -+ | (T 53) => "END_H4" -+ | (T 54) => "START_H5" -+ | (T 55) => "END_H5" -+ | (T 56) => "START_H6" -+ | (T 57) => "END_H6" -+ | (T 58) => "START_HEAD" -+ | (T 59) => "END_HEAD" -+ | (T 60) => "TAG_HR" -+ | (T 61) => "START_HTML" -+ | (T 62) => "END_HTML" -+ | (T 63) => "START_I" -+ | (T 64) => "END_I" -+ | (T 65) => "TAG_IMG" -+ | (T 66) => "TAG_INPUT" -+ | (T 67) => "TAG_ISINDEX" -+ | (T 68) => "START_KBD" -+ | (T 69) => "END_KBD" -+ | (T 70) => "START_LI" -+ | (T 71) => "END_LI" -+ | (T 72) => "TAG_LINK" -+ | (T 73) => "START_MAP" -+ | (T 74) => "END_MAP" -+ | (T 75) => "START_MENU" -+ | (T 76) => "END_MENU" -+ | (T 77) => "TAG_META" -+ | (T 78) => "START_OL" -+ | (T 79) => "END_OL" -+ | (T 80) => "START_OPTION" -+ | (T 81) => "END_OPTION" -+ | (T 82) => "START_P" -+ | (T 83) => "END_P" -+ | (T 84) => "TAG_PARAM" -+ | (T 85) => "START_PRE" -+ | (T 86) => "END_PRE" -+ | (T 87) => "START_SAMP" -+ | (T 88) => "END_SAMP" -+ | (T 89) => "START_SCRIPT" -+ | (T 90) => "END_SCRIPT" -+ | (T 91) => "START_SELECT" -+ | (T 92) => "END_SELECT" -+ | (T 93) => "START_SMALL" -+ | (T 94) => "END_SMALL" -+ | (T 95) => "START_STRIKE" -+ | (T 96) => "END_STRIKE" -+ | (T 97) => "START_STRONG" -+ | (T 98) => "END_STRONG" -+ | (T 99) => "START_STYLE" -+ | (T 100) => "END_STYLE" -+ | (T 101) => "START_SUB" -+ | (T 102) => "END_SUB" -+ | (T 103) => "START_SUP" -+ | (T 104) => "END_SUP" -+ | (T 105) => "START_TABLE" -+ | (T 106) => "END_TABLE" -+ | (T 107) => "START_TD" -+ | (T 108) => "END_TD" -+ | (T 109) => "START_TEXTAREA" -+ | (T 110) => "END_TEXTAREA" -+ | (T 111) => "START_TH" -+ | (T 112) => "END_TH" -+ | (T 113) => "START_TITLE" -+ | (T 114) => "END_TITLE" -+ | (T 115) => "START_TR" -+ | (T 116) => "END_TR" -+ | (T 117) => "START_TT" -+ | (T 118) => "END_TT" -+ | (T 119) => "START_U" -+ | (T 120) => "END_U" -+ | (T 121) => "START_UL" -+ | (T 122) => "END_UL" -+ | (T 123) => "START_VAR" -+ | (T 124) => "END_VAR" -+ | (T 125) => "PCDATA" -+ | (T 126) => "CHAR_REF" -+ | (T 127) => "ENTITY_REF" -+ | _ => "bogus-term" -+local open Header in -+val errtermvalue= -+fn (T 1) => MlyValue.START_A(([])) | -+(T 5) => MlyValue.START_APPLET(( -+[ -+ ("CODE", HTMLAttrs.NAME ""), -+ ("WIDTH", HTMLAttrs.NAME ""), -+ ("HEIGHT", HTMLAttrs.NAME "") -+ ] -+)) | -+(T 7) => MlyValue.TAG_AREA(([("ALT", HTMLAttrs.NAME "")])) | -+(T 10) => MlyValue.TAG_BASE(([("URL", HTMLAttrs.NAME "")])) | -+(T 15) => MlyValue.START_BODY(([])) | -+(T 17) => MlyValue.TAG_BR(([])) | -+(T 18) => MlyValue.START_CAPTION(([])) | -+(T 30) => MlyValue.START_DIR(([])) | -+(T 32) => MlyValue.START_DIV(([])) | -+(T 34) => MlyValue.START_DL(([])) | -+(T 40) => MlyValue.START_FONT(([])) | -+(T 42) => MlyValue.START_BASEFONT(([])) | -+(T 44) => MlyValue.START_FORM(([])) | -+(T 46) => MlyValue.START_H1(([])) | -+(T 48) => MlyValue.START_H2(([])) | -+(T 50) => MlyValue.START_H3(([])) | -+(T 52) => MlyValue.START_H4(([])) | -+(T 54) => MlyValue.START_H5(([])) | -+(T 56) => MlyValue.START_H6(([])) | -+(T 60) => MlyValue.TAG_HR(([])) | -+(T 65) => MlyValue.TAG_IMG(([("SRC", HTMLAttrs.NAME "")])) | -+(T 66) => MlyValue.TAG_INPUT(([])) | -+(T 67) => MlyValue.TAG_ISINDEX(([])) | -+(T 72) => MlyValue.TAG_LINK(([])) | -+(T 73) => MlyValue.START_MAP(([])) | -+(T 75) => MlyValue.START_MENU(([])) | -+(T 77) => MlyValue.TAG_META(([("CONTENT", HTMLAttrs.NAME "")])) | -+(T 78) => MlyValue.START_OL(([])) | -+(T 80) => MlyValue.START_OPTION(([])) | -+(T 82) => MlyValue.START_P(([])) | -+(T 84) => MlyValue.TAG_PARAM(([("NAME", HTMLAttrs.NAME "")])) | -+(T 85) => MlyValue.START_PRE(([])) | -+(T 91) => MlyValue.START_SELECT(([("NAME", HTMLAttrs.NAME "")])) | -+(T 105) => MlyValue.START_TABLE(([])) | -+(T 107) => MlyValue.START_TD(([])) | -+(T 109) => MlyValue.START_TEXTAREA(( -+[ -+ ("NAME", HTMLAttrs.NAME ""), -+ ("ROWS", HTMLAttrs.NAME "0"), -+ ("COLS", HTMLAttrs.NAME "0") -+ ] -+)) | -+(T 111) => MlyValue.START_TH(([])) | -+(T 115) => MlyValue.START_TR(([])) | -+(T 121) => MlyValue.START_UL(([])) | -+_ => MlyValue.VOID -+end -+val terms : term list = nil -+ $$ (T 124) $$ (T 123) $$ (T 122) $$ (T 120) $$ (T 119) $$ (T 118) $$ -+(T 117) $$ (T 116) $$ (T 114) $$ (T 113) $$ (T 112) $$ (T 110) $$ (T -+108) $$ (T 106) $$ (T 104) $$ (T 103) $$ (T 102) $$ (T 101) $$ (T 100) -+ $$ (T 99) $$ (T 98) $$ (T 97) $$ (T 96) $$ (T 95) $$ (T 94) $$ (T 93) -+ $$ (T 92) $$ (T 90) $$ (T 89) $$ (T 88) $$ (T 87) $$ (T 86) $$ (T 83) -+ $$ (T 81) $$ (T 79) $$ (T 76) $$ (T 74) $$ (T 71) $$ (T 69) $$ (T 68) -+ $$ (T 64) $$ (T 63) $$ (T 62) $$ (T 61) $$ (T 59) $$ (T 58) $$ (T 57) -+ $$ (T 55) $$ (T 53) $$ (T 51) $$ (T 49) $$ (T 47) $$ (T 45) $$ (T 43) -+ $$ (T 41) $$ (T 39) $$ (T 38) $$ (T 37) $$ (T 36) $$ (T 35) $$ (T 33) -+ $$ (T 31) $$ (T 29) $$ (T 28) $$ (T 27) $$ (T 26) $$ (T 25) $$ (T 24) -+ $$ (T 23) $$ (T 22) $$ (T 21) $$ (T 20) $$ (T 19) $$ (T 16) $$ (T 14) -+ $$ (T 13) $$ (T 12) $$ (T 11) $$ (T 9) $$ (T 8) $$ (T 6) $$ (T 4) $$ -+(T 3) $$ (T 2) $$ (T 0)end -+structure Actions = -+struct -+exception mlyAction of int -+local open Header in -+val actions = -+fn (i392,defaultPos,stack, -+ (ctx):arg) => -+case (i392,stack) -+of ( 0, ( ( _, ( _, _, EndHTML1right)) :: ( _, ( MlyValue.Body Body, -+ _, _)) :: ( _, ( MlyValue.Head Head, _, _)) :: ( _, ( -+MlyValue.StartHTML StartHTML, StartHTML1left, _)) :: rest671)) => let -+ val result = MlyValue.Document ( -+HTML.HTML{version=StartHTML, head=Head, body=Body}) -+ in ( LrTable.NT 0, ( result, StartHTML1left, EndHTML1right), rest671) -+ -+end -+| ( 1, ( rest671)) => let val result = MlyValue.StartHTML (NONE) -+ in ( LrTable.NT 1, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 2, ( ( _, ( _, START_HTML1left, START_HTML1right)) :: rest671)) -+ => let val result = MlyValue.StartHTML (NONE) -+ in ( LrTable.NT 1, ( result, START_HTML1left, START_HTML1right), -+rest671) -+end -+| ( 3, ( rest671)) => let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 2, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 4, ( ( _, ( _, END_HTML1left, END_HTML1right)) :: rest671)) => -+ let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 2, ( result, END_HTML1left, END_HTML1right), rest671) -+ -+end -+| ( 5, ( ( _, ( _, _, EndHEAD1right)) :: ( _, ( MlyValue.HeadContents -+ HeadContents, _, _)) :: ( _, ( _, StartHEAD1left, _)) :: rest671)) => -+ let val result = MlyValue.Head (HeadContents) -+ in ( LrTable.NT 3, ( result, StartHEAD1left, EndHEAD1right), rest671) -+ -+end -+| ( 6, ( rest671)) => let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 4, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 7, ( ( _, ( _, START_HEAD1left, START_HEAD1right)) :: rest671)) -+ => let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 4, ( result, START_HEAD1left, START_HEAD1right), -+rest671) -+end -+| ( 8, ( rest671)) => let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 5, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 9, ( ( _, ( _, END_HEAD1left, END_HEAD1right)) :: rest671)) => -+ let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 5, ( result, END_HEAD1left, END_HEAD1right), rest671) -+ -+end -+| ( 10, ( ( _, ( MlyValue.HeadElements HeadElements2, _, -+HeadElements2right)) :: _ :: ( _, ( MlyValue.PCData PCData, _, _)) :: -+ _ :: ( _, ( MlyValue.HeadElements HeadElements1, HeadElements1left, _ -+)) :: rest671)) => let val result = MlyValue.HeadContents ( -+HeadElements1 @ (HTML.Head_TITLE PCData :: HeadElements2)) -+ in ( LrTable.NT 6, ( result, HeadElements1left, HeadElements2right), -+rest671) -+end -+| ( 11, ( rest671)) => let val result = MlyValue.HeadElements ([]) -+ in ( LrTable.NT 7, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 12, ( ( _, ( MlyValue.HeadElements HeadElements, _, -+HeadElements1right)) :: ( _, ( MlyValue.HeadElement HeadElement, -+HeadElement1left, _)) :: rest671)) => let val result = -+MlyValue.HeadElements (HeadElement :: HeadElements) -+ in ( LrTable.NT 7, ( result, HeadElement1left, HeadElements1right), -+rest671) -+end -+| ( 13, ( ( _, ( MlyValue.TAG_META TAG_META, (TAG_METAleft as -+TAG_META1left), TAG_META1right)) :: rest671)) => let val result = -+MlyValue.HeadElement (HTMLAttrs.mkMETA(ctx TAG_METAleft, TAG_META)) -+ in ( LrTable.NT 8, ( result, TAG_META1left, TAG_META1right), rest671) -+ -+end -+| ( 14, ( ( _, ( MlyValue.TAG_LINK TAG_LINK, (TAG_LINKleft as -+TAG_LINK1left), TAG_LINK1right)) :: rest671)) => let val result = -+MlyValue.HeadElement (HTMLAttrs.mkLINK(ctx TAG_LINKleft, TAG_LINK)) -+ in ( LrTable.NT 8, ( result, TAG_LINK1left, TAG_LINK1right), rest671) -+ -+end -+| ( 15, ( ( _, ( MlyValue.TAG_ISINDEX TAG_ISINDEX, (TAG_ISINDEXleft -+ as TAG_ISINDEX1left), TAG_ISINDEX1right)) :: rest671)) => let val -+result = MlyValue.HeadElement ( -+let val stuff = -+ HTMLAttrs.mkISINDEX (ctx TAG_ISINDEXleft, TAG_ISINDEX) -+ in HTML.Head_ISINDEX stuff end -+ -+) -+ in ( LrTable.NT 8, ( result, TAG_ISINDEX1left, TAG_ISINDEX1right), -+rest671) -+end -+| ( 16, ( ( _, ( MlyValue.TAG_BASE TAG_BASE, (TAG_BASEleft as -+TAG_BASE1left), TAG_BASE1right)) :: rest671)) => let val result = -+MlyValue.HeadElement (HTMLAttrs.mkBASE(ctx TAG_BASEleft, TAG_BASE)) -+ in ( LrTable.NT 8, ( result, TAG_BASE1left, TAG_BASE1right), rest671) -+ -+end -+| ( 17, ( ( _, ( _, _, END_STYLE1right)) :: ( _, ( MlyValue.PCData -+PCData, _, _)) :: ( _, ( _, START_STYLE1left, _)) :: rest671)) => let -+ val result = MlyValue.HeadElement (HTML.Head_STYLE(PCData)) -+ in ( LrTable.NT 8, ( result, START_STYLE1left, END_STYLE1right), -+rest671) -+end -+| ( 18, ( ( _, ( _, _, END_SCRIPT1right)) :: ( _, ( MlyValue.PCData -+PCData, _, _)) :: ( _, ( _, START_SCRIPT1left, _)) :: rest671)) => let -+ val result = MlyValue.HeadElement (HTML.Head_SCRIPT(PCData)) -+ in ( LrTable.NT 8, ( result, START_SCRIPT1left, END_SCRIPT1right), -+rest671) -+end -+| ( 19, ( ( _, ( _, _, EndBODY1right)) :: ( _, ( -+MlyValue.BodyContent0 BodyContent0, BodyContent01left, _)) :: rest671) -+) => let val result = MlyValue.Body (BodyContent0) -+ in ( LrTable.NT 9, ( result, BodyContent01left, EndBODY1right), -+rest671) -+end -+| ( 20, ( rest671)) => let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 11, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 21, ( ( _, ( _, END_BODY1left, END_BODY1right)) :: rest671)) => -+ let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 11, ( result, END_BODY1left, END_BODY1right), rest671 -+) -+end -+| ( 22, ( ( _, ( MlyValue.BodyContent1 BodyContent1, -+BodyContent11left, BodyContent11right)) :: rest671)) => let val -+result = MlyValue.BodyContent (mkBlock BodyContent1) -+ in ( LrTable.NT 12, ( result, BodyContent11left, BodyContent11right), -+ rest671) -+end -+| ( 23, ( ( _, ( MlyValue.BodyContent BodyContent, _, -+BodyContent1right)) :: ( _, ( MlyValue.START_BODY START_BODY, ( -+START_BODYleft as START_BODY1left), _)) :: rest671)) => let val -+result = MlyValue.BodyContent0 ( -+HTMLAttrs.mkBODY(ctx START_BODYleft, START_BODY, BodyContent)) -+ in ( LrTable.NT 13, ( result, START_BODY1left, BodyContent1right), -+rest671) -+end -+| ( 24, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, -+BodyContent11right)) :: ( _, ( MlyValue.TextWOScript TextWOScript, -+TextWOScript1left, _)) :: rest671)) => let val result = -+MlyValue.BodyContent0 (mkBody(consText(TextWOScript, BodyContent1))) -+ in ( LrTable.NT 13, ( result, TextWOScript1left, BodyContent11right), -+ rest671) -+end -+| ( 25, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, -+BodyContent11right)) :: ( _, ( MlyValue.BodyElement BodyElement, -+BodyElement1left, _)) :: rest671)) => let val result = -+MlyValue.BodyContent0 (mkBody(consBlock(BodyElement, BodyContent1))) -+ in ( LrTable.NT 13, ( result, BodyElement1left, BodyContent11right), -+rest671) -+end -+| ( 26, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, -+BodyContent11right)) :: ( _, ( MlyValue.BlockWOIndex BlockWOIndex, -+BlockWOIndex1left, _)) :: rest671)) => let val result = -+MlyValue.BodyContent0 (mkBody(consBlock(BlockWOIndex, BodyContent1))) -+ in ( LrTable.NT 13, ( result, BlockWOIndex1left, BodyContent11right), -+ rest671) -+end -+| ( 27, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, -+BodyContent11right)) :: _ :: ( _, ( MlyValue.Paragraph Paragraph, -+Paragraph1left, _)) :: rest671)) => let val result = -+MlyValue.BodyContent0 (mkBody(consBlock(Paragraph, BodyContent1))) -+ in ( LrTable.NT 13, ( result, Paragraph1left, BodyContent11right), -+rest671) -+end -+| ( 28, ( ( _, ( MlyValue.BodyContent2 BodyContent2, _, -+BodyContent21right)) :: ( _, ( MlyValue.Paragraph Paragraph, -+Paragraph1left, _)) :: rest671)) => let val result = -+MlyValue.BodyContent0 (mkBody(consBlock(Paragraph, BodyContent2))) -+ in ( LrTable.NT 13, ( result, Paragraph1left, BodyContent21right), -+rest671) -+end -+| ( 29, ( rest671)) => let val result = MlyValue.BodyContent1 ([]) -+ in ( LrTable.NT 14, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 30, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, -+BodyContent11right)) :: ( _, ( MlyValue.Text Text, Text1left, _)) :: -+rest671)) => let val result = MlyValue.BodyContent1 ( -+consText(Text, BodyContent1)) -+ in ( LrTable.NT 14, ( result, Text1left, BodyContent11right), rest671 -+) -+end -+| ( 31, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, -+BodyContent11right)) :: ( _, ( MlyValue.BodyElement BodyElement, -+BodyElement1left, _)) :: rest671)) => let val result = -+MlyValue.BodyContent1 (consBlock(BodyElement, BodyContent1)) -+ in ( LrTable.NT 14, ( result, BodyElement1left, BodyContent11right), -+rest671) -+end -+| ( 32, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, -+BodyContent11right)) :: ( _, ( MlyValue.Block Block, Block1left, _)) -+ :: rest671)) => let val result = MlyValue.BodyContent1 ( -+consBlock(Block, BodyContent1)) -+ in ( LrTable.NT 14, ( result, Block1left, BodyContent11right), -+rest671) -+end -+| ( 33, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, -+BodyContent11right)) :: _ :: ( _, ( MlyValue.Paragraph Paragraph, -+Paragraph1left, _)) :: rest671)) => let val result = -+MlyValue.BodyContent1 (consBlock(Paragraph, BodyContent1)) -+ in ( LrTable.NT 14, ( result, Paragraph1left, BodyContent11right), -+rest671) -+end -+| ( 34, ( ( _, ( MlyValue.BodyContent2 BodyContent2, _, -+BodyContent21right)) :: ( _, ( MlyValue.Paragraph Paragraph, -+Paragraph1left, _)) :: rest671)) => let val result = -+MlyValue.BodyContent1 (consBlock(Paragraph, BodyContent2)) -+ in ( LrTable.NT 14, ( result, Paragraph1left, BodyContent21right), -+rest671) -+end -+| ( 35, ( rest671)) => let val result = MlyValue.BodyContent2 ([]) -+ in ( LrTable.NT 15, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 36, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, -+BodyContent11right)) :: ( _, ( MlyValue.BodyElement BodyElement, -+BodyElement1left, _)) :: rest671)) => let val result = -+MlyValue.BodyContent2 (consBlock(BodyElement, BodyContent1)) -+ in ( LrTable.NT 15, ( result, BodyElement1left, BodyContent11right), -+rest671) -+end -+| ( 37, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, -+BodyContent11right)) :: ( _, ( MlyValue.Block Block, Block1left, _)) -+ :: rest671)) => let val result = MlyValue.BodyContent2 ( -+consBlock(Block, BodyContent1)) -+ in ( LrTable.NT 15, ( result, Block1left, BodyContent11right), -+rest671) -+end -+| ( 38, ( ( _, ( MlyValue.BodyContent1 BodyContent1, _, -+BodyContent11right)) :: _ :: ( _, ( MlyValue.Paragraph Paragraph, -+Paragraph1left, _)) :: rest671)) => let val result = -+MlyValue.BodyContent2 (consBlock(Paragraph, BodyContent1)) -+ in ( LrTable.NT 15, ( result, Paragraph1left, BodyContent11right), -+rest671) -+end -+| ( 39, ( ( _, ( MlyValue.BodyContent2 BodyContent2, _, -+BodyContent21right)) :: ( _, ( MlyValue.Paragraph Paragraph, -+Paragraph1left, _)) :: rest671)) => let val result = -+MlyValue.BodyContent2 (consBlock(Paragraph, BodyContent2)) -+ in ( LrTable.NT 15, ( result, Paragraph1left, BodyContent21right), -+rest671) -+end -+| ( 40, ( ( _, ( _, _, END_H11right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( MlyValue.START_H1 START_H1, (START_H1left -+ as START_H11left), _)) :: rest671)) => let val result = -+MlyValue.BodyElement ( -+HTMLAttrs.mkHn(1, ctx START_H1left, START_H1, TextList)) -+ in ( LrTable.NT 16, ( result, START_H11left, END_H11right), rest671) -+ -+end -+| ( 41, ( ( _, ( _, _, END_H21right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( MlyValue.START_H2 START_H2, (START_H2left -+ as START_H21left), _)) :: rest671)) => let val result = -+MlyValue.BodyElement ( -+HTMLAttrs.mkHn(2, ctx START_H2left, START_H2, TextList)) -+ in ( LrTable.NT 16, ( result, START_H21left, END_H21right), rest671) -+ -+end -+| ( 42, ( ( _, ( _, _, END_H31right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( MlyValue.START_H3 START_H3, (START_H3left -+ as START_H31left), _)) :: rest671)) => let val result = -+MlyValue.BodyElement ( -+HTMLAttrs.mkHn(3, ctx START_H3left, START_H3, TextList)) -+ in ( LrTable.NT 16, ( result, START_H31left, END_H31right), rest671) -+ -+end -+| ( 43, ( ( _, ( _, _, END_H41right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( MlyValue.START_H4 START_H4, (START_H4left -+ as START_H41left), _)) :: rest671)) => let val result = -+MlyValue.BodyElement ( -+HTMLAttrs.mkHn(4, ctx START_H4left, START_H4, TextList)) -+ in ( LrTable.NT 16, ( result, START_H41left, END_H41right), rest671) -+ -+end -+| ( 44, ( ( _, ( _, _, END_H51right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( MlyValue.START_H5 START_H5, (START_H5left -+ as START_H51left), _)) :: rest671)) => let val result = -+MlyValue.BodyElement ( -+HTMLAttrs.mkHn(5, ctx START_H5left, START_H5, TextList)) -+ in ( LrTable.NT 16, ( result, START_H51left, END_H51right), rest671) -+ -+end -+| ( 45, ( ( _, ( _, _, END_H61right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( MlyValue.START_H6 START_H6, (START_H6left -+ as START_H61left), _)) :: rest671)) => let val result = -+MlyValue.BodyElement ( -+HTMLAttrs.mkHn(6, ctx START_H6left, START_H6, TextList)) -+ in ( LrTable.NT 16, ( result, START_H61left, END_H61right), rest671) -+ -+end -+| ( 46, ( ( _, ( _, _, END_ADDRESS1right)) :: ( _, ( -+MlyValue.AddressContent1 AddressContent1, _, _)) :: ( _, ( _, -+START_ADDRESS1left, _)) :: rest671)) => let val result = -+MlyValue.BodyElement (HTML.ADDRESS(mkBlock AddressContent1)) -+ in ( LrTable.NT 16, ( result, START_ADDRESS1left, END_ADDRESS1right), -+ rest671) -+end -+| ( 47, ( rest671)) => let val result = MlyValue.AddressContent1 ([] -+) -+ in ( LrTable.NT 17, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 48, ( ( _, ( MlyValue.AddressContent1 AddressContent1, _, -+AddressContent11right)) :: ( _, ( MlyValue.Text Text, Text1left, _)) -+ :: rest671)) => let val result = MlyValue.AddressContent1 ( -+consText(Text, AddressContent1)) -+ in ( LrTable.NT 17, ( result, Text1left, AddressContent11right), -+rest671) -+end -+| ( 49, ( ( _, ( MlyValue.AddressContent1 AddressContent1, _, -+AddressContent11right)) :: _ :: ( _, ( MlyValue.Paragraph Paragraph, -+Paragraph1left, _)) :: rest671)) => let val result = -+MlyValue.AddressContent1 (consBlock(Paragraph, AddressContent1)) -+ in ( LrTable.NT 17, ( result, Paragraph1left, AddressContent11right), -+ rest671) -+end -+| ( 50, ( ( _, ( MlyValue.AddressContent2 AddressContent2, _, -+AddressContent21right)) :: ( _, ( MlyValue.Paragraph Paragraph, -+Paragraph1left, _)) :: rest671)) => let val result = -+MlyValue.AddressContent1 (consBlock(Paragraph, AddressContent2)) -+ in ( LrTable.NT 17, ( result, Paragraph1left, AddressContent21right), -+ rest671) -+end -+| ( 51, ( rest671)) => let val result = MlyValue.AddressContent2 ([] -+) -+ in ( LrTable.NT 18, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 52, ( ( _, ( MlyValue.AddressContent1 AddressContent1, _, -+AddressContent11right)) :: _ :: ( _, ( MlyValue.Paragraph Paragraph, -+Paragraph1left, _)) :: rest671)) => let val result = -+MlyValue.AddressContent2 (consBlock(Paragraph, AddressContent1)) -+ in ( LrTable.NT 18, ( result, Paragraph1left, AddressContent11right), -+ rest671) -+end -+| ( 53, ( ( _, ( MlyValue.AddressContent2 AddressContent2, _, -+AddressContent21right)) :: ( _, ( MlyValue.Paragraph Paragraph, -+Paragraph1left, _)) :: rest671)) => let val result = -+MlyValue.AddressContent2 (consBlock(Paragraph, AddressContent2)) -+ in ( LrTable.NT 18, ( result, Paragraph1left, AddressContent21right), -+ rest671) -+end -+| ( 54, ( ( _, ( MlyValue.List List, List1left, List1right)) :: -+rest671)) => let val result = MlyValue.BlockWOIndex (List) -+ in ( LrTable.NT 19, ( result, List1left, List1right), rest671) -+end -+| ( 55, ( ( _, ( MlyValue.Preformatted Preformatted, -+Preformatted1left, Preformatted1right)) :: rest671)) => let val -+result = MlyValue.BlockWOIndex (Preformatted) -+ in ( LrTable.NT 19, ( result, Preformatted1left, Preformatted1right), -+ rest671) -+end -+| ( 56, ( ( _, ( _, _, END_DIV1right)) :: ( _, ( MlyValue.BodyContent -+ BodyContent, _, _)) :: ( _, ( MlyValue.START_DIV START_DIV, ( -+START_DIVleft as START_DIV1left), _)) :: rest671)) => let val result -+ = MlyValue.BlockWOIndex ( -+HTMLAttrs.mkDIV(ctx START_DIVleft, START_DIV, BodyContent)) -+ in ( LrTable.NT 19, ( result, START_DIV1left, END_DIV1right), rest671 -+) -+end -+| ( 57, ( ( _, ( _, _, END_CENTER1right)) :: ( _, ( -+MlyValue.BodyContent BodyContent, _, _)) :: ( _, ( _, -+START_CENTER1left, _)) :: rest671)) => let val result = -+MlyValue.BlockWOIndex (HTML.CENTER BodyContent) -+ in ( LrTable.NT 19, ( result, START_CENTER1left, END_CENTER1right), -+rest671) -+end -+| ( 58, ( ( _, ( _, _, END_BLOCKQUOTE1right)) :: ( _, ( -+MlyValue.BodyContent BodyContent, _, _)) :: ( _, ( _, -+START_BLOCKQUOTE1left, _)) :: rest671)) => let val result = -+MlyValue.BlockWOIndex (HTML.BLOCKQUOTE BodyContent) -+ in ( LrTable.NT 19, ( result, START_BLOCKQUOTE1left, -+END_BLOCKQUOTE1right), rest671) -+end -+| ( 59, ( ( _, ( _, _, END_FORM1right)) :: ( _, ( -+MlyValue.BodyContent BodyContent, _, _)) :: ( _, ( MlyValue.START_FORM -+ START_FORM, (START_FORMleft as START_FORM1left), _)) :: rest671)) => -+ let val result = MlyValue.BlockWOIndex ( -+HTMLAttrs.mkFORM(ctx START_FORMleft, START_FORM, BodyContent)) -+ in ( LrTable.NT 19, ( result, START_FORM1left, END_FORM1right), -+rest671) -+end -+| ( 60, ( ( _, ( MlyValue.TAG_HR TAG_HR, (TAG_HRleft as TAG_HR1left), -+ TAG_HR1right)) :: rest671)) => let val result = -+MlyValue.BlockWOIndex (HTMLAttrs.mkHR(ctx TAG_HRleft, TAG_HR)) -+ in ( LrTable.NT 19, ( result, TAG_HR1left, TAG_HR1right), rest671) -+ -+end -+| ( 61, ( ( _, ( _, _, END_TABLE1right)) :: ( _, ( -+MlyValue.TableRowList TableRowList, _, _)) :: ( _, ( -+MlyValue.optCaption optCaption, _, _)) :: ( _, ( MlyValue.START_TABLE -+START_TABLE, (START_TABLEleft as START_TABLE1left), _)) :: rest671)) -+ => let val result = MlyValue.BlockWOIndex ( -+HTMLAttrs.mkTABLE( -+ ctx START_TABLEleft, START_TABLE, -+ {caption = optCaption, body = TableRowList}) -+ -+) -+ in ( LrTable.NT 19, ( result, START_TABLE1left, END_TABLE1right), -+rest671) -+end -+| ( 62, ( ( _, ( MlyValue.BlockWOIndex BlockWOIndex, -+BlockWOIndex1left, BlockWOIndex1right)) :: rest671)) => let val -+result = MlyValue.Block (BlockWOIndex) -+ in ( LrTable.NT 20, ( result, BlockWOIndex1left, BlockWOIndex1right), -+ rest671) -+end -+| ( 63, ( ( _, ( MlyValue.TAG_ISINDEX TAG_ISINDEX, (TAG_ISINDEXleft -+ as TAG_ISINDEX1left), TAG_ISINDEX1right)) :: rest671)) => let val -+result = MlyValue.Block ( -+let val stuff = -+ HTMLAttrs.mkISINDEX (ctx TAG_ISINDEXleft, TAG_ISINDEX) -+ in HTML.ISINDEX stuff end -+ -+) -+ in ( LrTable.NT 20, ( result, TAG_ISINDEX1left, TAG_ISINDEX1right), -+rest671) -+end -+| ( 64, ( ( _, ( MlyValue.TextList TextList, _, TextList1right)) :: ( -+ _, ( MlyValue.START_P START_P, (START_Pleft as START_P1left), _)) :: -+rest671)) => let val result = MlyValue.Paragraph ( -+HTMLAttrs.mkP(ctx START_Pleft, START_P, TextList)) -+ in ( LrTable.NT 21, ( result, START_P1left, TextList1right), rest671) -+ -+end -+| ( 65, ( ( _, ( _, _, END_UL1right)) :: ( _, ( MlyValue.ListItemList -+ ListItemList, _, _)) :: ( _, ( MlyValue.START_UL START_UL, ( -+START_ULleft as START_UL1left), _)) :: rest671)) => let val result = -+MlyValue.List ( -+HTMLAttrs.mkUL(ctx START_ULleft, START_UL, ListItemList)) -+ in ( LrTable.NT 22, ( result, START_UL1left, END_UL1right), rest671) -+ -+end -+| ( 66, ( ( _, ( _, _, END_OL1right)) :: ( _, ( MlyValue.ListItemList -+ ListItemList, _, _)) :: ( _, ( MlyValue.START_OL START_OL, ( -+START_OLleft as START_OL1left), _)) :: rest671)) => let val result = -+MlyValue.List ( -+HTMLAttrs.mkOL(ctx START_OLleft, START_OL, ListItemList)) -+ in ( LrTable.NT 22, ( result, START_OL1left, END_OL1right), rest671) -+ -+end -+| ( 67, ( ( _, ( _, _, END_DIR1right)) :: ( _, ( -+MlyValue.ListItemList ListItemList, _, _)) :: ( _, ( -+MlyValue.START_DIR START_DIR, (START_DIRleft as START_DIR1left), _)) -+ :: rest671)) => let val result = MlyValue.List ( -+HTMLAttrs.mkDIR(ctx START_DIRleft, START_DIR, ListItemList)) -+ in ( LrTable.NT 22, ( result, START_DIR1left, END_DIR1right), rest671 -+) -+end -+| ( 68, ( ( _, ( _, _, END_MENU1right)) :: ( _, ( -+MlyValue.ListItemList ListItemList, _, _)) :: ( _, ( -+MlyValue.START_MENU START_MENU, (START_MENUleft as START_MENU1left), _ -+)) :: rest671)) => let val result = MlyValue.List ( -+HTMLAttrs.mkMENU(ctx START_MENUleft, START_MENU, ListItemList)) -+ in ( LrTable.NT 22, ( result, START_MENU1left, END_MENU1right), -+rest671) -+end -+| ( 69, ( ( _, ( _, _, END_DL1right)) :: ( _, ( MlyValue.DLItemList -+DLItemList, _, _)) :: ( _, ( MlyValue.START_DL START_DL, (START_DLleft -+ as START_DL1left), _)) :: rest671)) => let val result = -+MlyValue.List ( -+HTMLAttrs.mkDL( -+ ctx START_DLleft, START_DL, -+ groupDefListContents DLItemList) -+ -+) -+ in ( LrTable.NT 22, ( result, START_DL1left, END_DL1right), rest671) -+ -+end -+| ( 70, ( rest671)) => let val result = MlyValue.ListItemList ([]) -+ in ( LrTable.NT 23, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 71, ( ( _, ( MlyValue.ListItemList ListItemList, _, -+ListItemList1right)) :: ( _, ( MlyValue.ListItem ListItem, -+ListItem1left, _)) :: rest671)) => let val result = -+MlyValue.ListItemList (ListItem :: ListItemList) -+ in ( LrTable.NT 23, ( result, ListItem1left, ListItemList1right), -+rest671) -+end -+| ( 72, ( ( _, ( _, _, EndLI1right)) :: ( _, ( MlyValue.Flow1 Flow1, -+ _, _)) :: ( _, ( MlyValue.START_LI START_LI, (START_LIleft as -+START_LI1left), _)) :: rest671)) => let val result = -+MlyValue.ListItem ( -+HTMLAttrs.mkLI(ctx START_LIleft, START_LI, mkBlock Flow1)) -+ in ( LrTable.NT 24, ( result, START_LI1left, EndLI1right), rest671) -+ -+end -+| ( 73, ( rest671)) => let val result = MlyValue.DLItemList ([]) -+ in ( LrTable.NT 25, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 74, ( ( _, ( MlyValue.DLItemList DLItemList, _, DLItemList1right) -+) :: ( _, ( MlyValue.DLItem DLItem, DLItem1left, _)) :: rest671)) => -+ let val result = MlyValue.DLItemList (DLItem :: DLItemList) -+ in ( LrTable.NT 25, ( result, DLItem1left, DLItemList1right), rest671 -+) -+end -+| ( 75, ( ( _, ( _, _, EndDT1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_DT1left, _)) :: rest671)) => let -+ val result = MlyValue.DLItem (DL_tag TextList) -+ in ( LrTable.NT 26, ( result, START_DT1left, EndDT1right), rest671) -+ -+end -+| ( 76, ( ( _, ( _, _, EndDD1right)) :: ( _, ( MlyValue.Flow1 Flow1, -+ _, _)) :: ( _, ( _, START_DD1left, _)) :: rest671)) => let val -+result = MlyValue.DLItem (DL_item(mkBlock Flow1)) -+ in ( LrTable.NT 26, ( result, START_DD1left, EndDD1right), rest671) -+ -+end -+| ( 77, ( rest671)) => let val result = MlyValue.Flow1 ([]) -+ in ( LrTable.NT 27, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 78, ( ( _, ( MlyValue.Flow1 Flow1, _, Flow11right)) :: ( _, ( -+MlyValue.Text Text, Text1left, _)) :: rest671)) => let val result = -+MlyValue.Flow1 (consText(Text, Flow1)) -+ in ( LrTable.NT 27, ( result, Text1left, Flow11right), rest671) -+end -+| ( 79, ( ( _, ( MlyValue.Flow1 Flow1, _, Flow11right)) :: ( _, ( -+MlyValue.Block Block, Block1left, _)) :: rest671)) => let val result -+ = MlyValue.Flow1 (consBlock(Block, Flow1)) -+ in ( LrTable.NT 27, ( result, Block1left, Flow11right), rest671) -+end -+| ( 80, ( ( _, ( MlyValue.Flow1 Flow1, _, Flow11right)) :: _ :: ( _, -+( MlyValue.Paragraph Paragraph, Paragraph1left, _)) :: rest671)) => -+ let val result = MlyValue.Flow1 (consBlock(Paragraph, Flow1)) -+ in ( LrTable.NT 27, ( result, Paragraph1left, Flow11right), rest671) -+ -+end -+| ( 81, ( ( _, ( MlyValue.Flow2 Flow2, _, Flow21right)) :: ( _, ( -+MlyValue.Paragraph Paragraph, Paragraph1left, _)) :: rest671)) => let -+ val result = MlyValue.Flow1 (consBlock(Paragraph, Flow2)) -+ in ( LrTable.NT 27, ( result, Paragraph1left, Flow21right), rest671) -+ -+end -+| ( 82, ( rest671)) => let val result = MlyValue.Flow2 ([]) -+ in ( LrTable.NT 28, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 83, ( ( _, ( MlyValue.Flow1 Flow1, _, Flow11right)) :: ( _, ( -+MlyValue.Block Block, Block1left, _)) :: rest671)) => let val result -+ = MlyValue.Flow2 (consBlock(Block, Flow1)) -+ in ( LrTable.NT 28, ( result, Block1left, Flow11right), rest671) -+end -+| ( 84, ( ( _, ( MlyValue.Flow1 Flow1, _, Flow11right)) :: _ :: ( _, -+( MlyValue.Paragraph Paragraph, Paragraph1left, _)) :: rest671)) => -+ let val result = MlyValue.Flow2 (consBlock(Paragraph, Flow1)) -+ in ( LrTable.NT 28, ( result, Paragraph1left, Flow11right), rest671) -+ -+end -+| ( 85, ( ( _, ( MlyValue.Flow2 Flow2, _, Flow21right)) :: ( _, ( -+MlyValue.Paragraph Paragraph, Paragraph1left, _)) :: rest671)) => let -+ val result = MlyValue.Flow2 (consBlock(Paragraph, Flow2)) -+ in ( LrTable.NT 28, ( result, Paragraph1left, Flow21right), rest671) -+ -+end -+| ( 86, ( rest671)) => let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 29, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 87, ( ( _, ( _, END_LI1left, END_LI1right)) :: rest671)) => let -+ val result = MlyValue.ntVOID () -+ in ( LrTable.NT 29, ( result, END_LI1left, END_LI1right), rest671) -+ -+end -+| ( 88, ( rest671)) => let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 30, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 89, ( ( _, ( _, END_DT1left, END_DT1right)) :: rest671)) => let -+ val result = MlyValue.ntVOID () -+ in ( LrTable.NT 30, ( result, END_DT1left, END_DT1right), rest671) -+ -+end -+| ( 90, ( rest671)) => let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 31, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 91, ( ( _, ( _, END_DD1left, END_DD1right)) :: rest671)) => let -+ val result = MlyValue.ntVOID () -+ in ( LrTable.NT 31, ( result, END_DD1left, END_DD1right), rest671) -+ -+end -+| ( 92, ( ( _, ( _, _, END_PRE1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( MlyValue.START_PRE START_PRE, ( -+START_PREleft as START_PRE1left), _)) :: rest671)) => let val result -+ = MlyValue.Preformatted ( -+HTMLAttrs.mkPRE(ctx START_PREleft, START_PRE, TextList)) -+ in ( LrTable.NT 32, ( result, START_PRE1left, END_PRE1right), rest671 -+) -+end -+| ( 93, ( rest671)) => let val result = MlyValue.optCaption (NONE) -+ in ( LrTable.NT 33, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 94, ( ( _, ( _, _, END_CAPTION1right)) :: ( _, ( -+MlyValue.TextList TextList, _, _)) :: ( _, ( MlyValue.START_CAPTION -+START_CAPTION, (START_CAPTIONleft as START_CAPTION1left), _)) :: -+rest671)) => let val result = MlyValue.optCaption ( -+SOME(HTMLAttrs.mkCAPTION( -+ ctx START_CAPTIONleft, START_CAPTION, TextList)) -+) -+ in ( LrTable.NT 33, ( result, START_CAPTION1left, END_CAPTION1right), -+ rest671) -+end -+| ( 95, ( ( _, ( MlyValue.TableRow TableRow, TableRow1left, -+TableRow1right)) :: rest671)) => let val result = -+MlyValue.TableRowList ([TableRow]) -+ in ( LrTable.NT 34, ( result, TableRow1left, TableRow1right), rest671 -+) -+end -+| ( 96, ( ( _, ( MlyValue.TableRowList TableRowList, _, -+TableRowList1right)) :: ( _, ( MlyValue.TableRow TableRow, -+TableRow1left, _)) :: rest671)) => let val result = -+MlyValue.TableRowList (TableRow :: TableRowList) -+ in ( LrTable.NT 34, ( result, TableRow1left, TableRowList1right), -+rest671) -+end -+| ( 97, ( ( _, ( MlyValue.TableCellList TableCellList, _, -+TableCellList1right)) :: ( _, ( MlyValue.START_TR START_TR, ( -+START_TRleft as START_TR1left), _)) :: rest671)) => let val result = -+MlyValue.TableRow ( -+HTMLAttrs.mkTR(ctx START_TRleft, START_TR, TableCellList)) -+ in ( LrTable.NT 35, ( result, START_TR1left, TableCellList1right), -+rest671) -+end -+| ( 98, ( ( _, ( _, _, END_TR1right)) :: ( _, ( -+MlyValue.TableCellList TableCellList, _, _)) :: ( _, ( -+MlyValue.START_TR START_TR, (START_TRleft as START_TR1left), _)) :: -+rest671)) => let val result = MlyValue.TableRow ( -+HTMLAttrs.mkTR(ctx START_TRleft, START_TR, TableCellList)) -+ in ( LrTable.NT 35, ( result, START_TR1left, END_TR1right), rest671) -+ -+end -+| ( 99, ( ( _, ( MlyValue.TableCell TableCell, TableCell1left, -+TableCell1right)) :: rest671)) => let val result = -+MlyValue.TableCellList ([TableCell]) -+ in ( LrTable.NT 36, ( result, TableCell1left, TableCell1right), -+rest671) -+end -+| ( 100, ( ( _, ( MlyValue.TableCellList TableCellList, _, -+TableCellList1right)) :: ( _, ( MlyValue.TableCell TableCell, -+TableCell1left, _)) :: rest671)) => let val result = -+MlyValue.TableCellList (TableCell :: TableCellList) -+ in ( LrTable.NT 36, ( result, TableCell1left, TableCellList1right), -+rest671) -+end -+| ( 101, ( ( _, ( _, _, END_TH1right)) :: ( _, ( MlyValue.BodyContent -+ BodyContent, _, _)) :: ( _, ( MlyValue.START_TH START_TH, ( -+START_THleft as START_TH1left), _)) :: rest671)) => let val result = -+MlyValue.TableCell ( -+HTMLAttrs.mkTH(ctx START_THleft, START_TH, BodyContent)) -+ in ( LrTable.NT 37, ( result, START_TH1left, END_TH1right), rest671) -+ -+end -+| ( 102, ( ( _, ( MlyValue.BodyContent BodyContent, _, -+BodyContent1right)) :: ( _, ( MlyValue.START_TH START_TH, ( -+START_THleft as START_TH1left), _)) :: rest671)) => let val result = -+MlyValue.TableCell ( -+HTMLAttrs.mkTH(ctx START_THleft, START_TH, BodyContent)) -+ in ( LrTable.NT 37, ( result, START_TH1left, BodyContent1right), -+rest671) -+end -+| ( 103, ( ( _, ( _, _, END_TD1right)) :: ( _, ( MlyValue.BodyContent -+ BodyContent, _, _)) :: ( _, ( MlyValue.START_TD START_TD, ( -+START_TDleft as START_TD1left), _)) :: rest671)) => let val result = -+MlyValue.TableCell ( -+HTMLAttrs.mkTD(ctx START_TDleft, START_TD, BodyContent)) -+ in ( LrTable.NT 37, ( result, START_TD1left, END_TD1right), rest671) -+ -+end -+| ( 104, ( ( _, ( MlyValue.BodyContent BodyContent, _, -+BodyContent1right)) :: ( _, ( MlyValue.START_TD START_TD, ( -+START_TDleft as START_TD1left), _)) :: rest671)) => let val result = -+MlyValue.TableCell ( -+HTMLAttrs.mkTD(ctx START_TDleft, START_TD, BodyContent)) -+ in ( LrTable.NT 37, ( result, START_TD1left, BodyContent1right), -+rest671) -+end -+| ( 105, ( ( _, ( MlyValue.TextList' TextList', TextList'1left, -+TextList'1right)) :: rest671)) => let val result = MlyValue.TextList -+ (textList TextList') -+ in ( LrTable.NT 38, ( result, TextList'1left, TextList'1right), -+rest671) -+end -+| ( 106, ( rest671)) => let val result = MlyValue.TextList' ([]) -+ in ( LrTable.NT 39, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 107, ( ( _, ( MlyValue.TextList' TextList', _, TextList'1right)) -+ :: ( _, ( MlyValue.Text Text, Text1left, _)) :: rest671)) => let val -+ result = MlyValue.TextList' (Text :: TextList') -+ in ( LrTable.NT 39, ( result, Text1left, TextList'1right), rest671) -+ -+end -+| ( 108, ( ( _, ( MlyValue.PCDataElem PCDataElem, PCDataElem1left, -+PCDataElem1right)) :: rest671)) => let val result = -+MlyValue.TextWOScript (HTML.PCDATA PCDataElem) -+ in ( LrTable.NT 40, ( result, PCDataElem1left, PCDataElem1right), -+rest671) -+end -+| ( 109, ( ( _, ( MlyValue.Font Font, Font1left, Font1right)) :: -+rest671)) => let val result = MlyValue.TextWOScript (Font) -+ in ( LrTable.NT 40, ( result, Font1left, Font1right), rest671) -+end -+| ( 110, ( ( _, ( MlyValue.Phrase Phrase, Phrase1left, Phrase1right)) -+ :: rest671)) => let val result = MlyValue.TextWOScript (Phrase) -+ in ( LrTable.NT 40, ( result, Phrase1left, Phrase1right), rest671) -+ -+end -+| ( 111, ( ( _, ( MlyValue.Special Special, Special1left, -+Special1right)) :: rest671)) => let val result = -+MlyValue.TextWOScript (Special) -+ in ( LrTable.NT 40, ( result, Special1left, Special1right), rest671) -+ -+end -+| ( 112, ( ( _, ( MlyValue.Form Form, Form1left, Form1right)) :: -+rest671)) => let val result = MlyValue.TextWOScript (Form) -+ in ( LrTable.NT 40, ( result, Form1left, Form1right), rest671) -+end -+| ( 113, ( ( _, ( MlyValue.TextWOScript TextWOScript, -+TextWOScript1left, TextWOScript1right)) :: rest671)) => let val -+result = MlyValue.Text (TextWOScript) -+ in ( LrTable.NT 41, ( result, TextWOScript1left, TextWOScript1right), -+ rest671) -+end -+| ( 114, ( ( _, ( _, _, END_SCRIPT1right)) :: ( _, ( MlyValue.PCData -+PCData, _, _)) :: ( _, ( _, START_SCRIPT1left, _)) :: rest671)) => let -+ val result = MlyValue.Text (HTML.SCRIPT PCData) -+ in ( LrTable.NT 41, ( result, START_SCRIPT1left, END_SCRIPT1right), -+rest671) -+end -+| ( 115, ( ( _, ( _, _, END_TT1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_TT1left, _)) :: rest671)) => let -+ val result = MlyValue.Font (HTML.TT(TextList)) -+ in ( LrTable.NT 42, ( result, START_TT1left, END_TT1right), rest671) -+ -+end -+| ( 116, ( ( _, ( _, _, END_I1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_I1left, _)) :: rest671)) => let -+ val result = MlyValue.Font (HTML.I(TextList)) -+ in ( LrTable.NT 42, ( result, START_I1left, END_I1right), rest671) -+ -+end -+| ( 117, ( ( _, ( _, _, END_B1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_B1left, _)) :: rest671)) => let -+ val result = MlyValue.Font (HTML.B(TextList)) -+ in ( LrTable.NT 42, ( result, START_B1left, END_B1right), rest671) -+ -+end -+| ( 118, ( ( _, ( _, _, END_U1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_U1left, _)) :: rest671)) => let -+ val result = MlyValue.Font (HTML.U(TextList)) -+ in ( LrTable.NT 42, ( result, START_U1left, END_U1right), rest671) -+ -+end -+| ( 119, ( ( _, ( _, _, END_STRIKE1right)) :: ( _, ( -+MlyValue.TextList TextList, _, _)) :: ( _, ( _, START_STRIKE1left, _)) -+ :: rest671)) => let val result = MlyValue.Font ( -+HTML.STRIKE(TextList)) -+ in ( LrTable.NT 42, ( result, START_STRIKE1left, END_STRIKE1right), -+rest671) -+end -+| ( 120, ( ( _, ( _, _, END_BIG1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_BIG1left, _)) :: rest671)) => let -+ val result = MlyValue.Font (HTML.BIG(TextList)) -+ in ( LrTable.NT 42, ( result, START_BIG1left, END_BIG1right), rest671 -+) -+end -+| ( 121, ( ( _, ( _, _, END_SMALL1right)) :: ( _, ( MlyValue.TextList -+ TextList, _, _)) :: ( _, ( _, START_SMALL1left, _)) :: rest671)) => -+ let val result = MlyValue.Font (HTML.SMALL(TextList)) -+ in ( LrTable.NT 42, ( result, START_SMALL1left, END_SMALL1right), -+rest671) -+end -+| ( 122, ( ( _, ( _, _, END_SUB1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_SUB1left, _)) :: rest671)) => let -+ val result = MlyValue.Font (HTML.SUB(TextList)) -+ in ( LrTable.NT 42, ( result, START_SUB1left, END_SUB1right), rest671 -+) -+end -+| ( 123, ( ( _, ( _, _, END_SUP1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_SUP1left, _)) :: rest671)) => let -+ val result = MlyValue.Font (HTML.SUP(TextList)) -+ in ( LrTable.NT 42, ( result, START_SUP1left, END_SUP1right), rest671 -+) -+end -+| ( 124, ( ( _, ( _, _, END_EM1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_EM1left, _)) :: rest671)) => let -+ val result = MlyValue.Phrase (HTML.EM(TextList)) -+ in ( LrTable.NT 43, ( result, START_EM1left, END_EM1right), rest671) -+ -+end -+| ( 125, ( ( _, ( _, _, END_STRONG1right)) :: ( _, ( -+MlyValue.TextList TextList, _, _)) :: ( _, ( _, START_STRONG1left, _)) -+ :: rest671)) => let val result = MlyValue.Phrase ( -+HTML.STRONG(TextList)) -+ in ( LrTable.NT 43, ( result, START_STRONG1left, END_STRONG1right), -+rest671) -+end -+| ( 126, ( ( _, ( _, _, END_CODE1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_CODE1left, _)) :: rest671)) => let -+ val result = MlyValue.Phrase (HTML.CODE(TextList)) -+ in ( LrTable.NT 43, ( result, START_CODE1left, END_CODE1right), -+rest671) -+end -+| ( 127, ( ( _, ( _, _, END_DFN1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_DFN1left, _)) :: rest671)) => let -+ val result = MlyValue.Phrase (HTML.DFN(TextList)) -+ in ( LrTable.NT 43, ( result, START_DFN1left, END_DFN1right), rest671 -+) -+end -+| ( 128, ( ( _, ( _, _, END_SAMP1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_SAMP1left, _)) :: rest671)) => let -+ val result = MlyValue.Phrase (HTML.SAMP(TextList)) -+ in ( LrTable.NT 43, ( result, START_SAMP1left, END_SAMP1right), -+rest671) -+end -+| ( 129, ( ( _, ( _, _, END_KBD1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_KBD1left, _)) :: rest671)) => let -+ val result = MlyValue.Phrase (HTML.KBD(TextList)) -+ in ( LrTable.NT 43, ( result, START_KBD1left, END_KBD1right), rest671 -+) -+end -+| ( 130, ( ( _, ( _, _, END_VAR1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_VAR1left, _)) :: rest671)) => let -+ val result = MlyValue.Phrase (HTML.VAR(TextList)) -+ in ( LrTable.NT 43, ( result, START_VAR1left, END_VAR1right), rest671 -+) -+end -+| ( 131, ( ( _, ( _, _, END_CITE1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( _, START_CITE1left, _)) :: rest671)) => let -+ val result = MlyValue.Phrase (HTML.CITE(TextList)) -+ in ( LrTable.NT 43, ( result, START_CITE1left, END_CITE1right), -+rest671) -+end -+| ( 132, ( ( _, ( _, _, END_A1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( MlyValue.START_A START_A, (START_Aleft as -+START_A1left), _)) :: rest671)) => let val result = MlyValue.Special -+ (HTMLAttrs.mkA(ctx START_Aleft, START_A, TextList)) -+ in ( LrTable.NT 44, ( result, START_A1left, END_A1right), rest671) -+ -+end -+| ( 133, ( ( _, ( MlyValue.TAG_IMG TAG_IMG, (TAG_IMGleft as -+TAG_IMG1left), TAG_IMG1right)) :: rest671)) => let val result = -+MlyValue.Special (HTMLAttrs.mkIMG(ctx TAG_IMGleft, TAG_IMG)) -+ in ( LrTable.NT 44, ( result, TAG_IMG1left, TAG_IMG1right), rest671) -+ -+end -+| ( 134, ( ( _, ( _, _, END_APPLET1right)) :: ( _, ( -+MlyValue.TextList TextList, _, _)) :: ( _, ( MlyValue.START_APPLET -+START_APPLET, (START_APPLETleft as START_APPLET1left), _)) :: rest671) -+) => let val result = MlyValue.Special ( -+HTMLAttrs.mkAPPLET(ctx START_APPLETleft, START_APPLET, TextList)) -+ in ( LrTable.NT 44, ( result, START_APPLET1left, END_APPLET1right), -+rest671) -+end -+| ( 135, ( ( _, ( _, _, END_FONT1right)) :: ( _, ( MlyValue.TextList -+TextList, _, _)) :: ( _, ( MlyValue.START_FONT START_FONT, ( -+START_FONTleft as START_FONT1left), _)) :: rest671)) => let val -+result = MlyValue.Special ( -+HTMLAttrs.mkFONT(ctx START_FONTleft, START_FONT, TextList)) -+ in ( LrTable.NT 44, ( result, START_FONT1left, END_FONT1right), -+rest671) -+end -+| ( 136, ( ( _, ( _, _, END_BASEFONT1right)) :: ( _, ( -+MlyValue.TextList TextList, _, _)) :: ( _, ( MlyValue.START_BASEFONT -+START_BASEFONT, (START_BASEFONTleft as START_BASEFONT1left), _)) :: -+rest671)) => let val result = MlyValue.Special ( -+HTMLAttrs.mkBASEFONT( -+ ctx START_BASEFONTleft, START_BASEFONT, TextList) -+ -+) -+ in ( LrTable.NT 44, ( result, START_BASEFONT1left, END_BASEFONT1right -+), rest671) -+end -+| ( 137, ( ( _, ( MlyValue.TAG_BR TAG_BR, (TAG_BRleft as TAG_BR1left) -+, TAG_BR1right)) :: rest671)) => let val result = MlyValue.Special ( -+HTMLAttrs.mkBR(ctx TAG_BRleft, TAG_BR)) -+ in ( LrTable.NT 44, ( result, TAG_BR1left, TAG_BR1right), rest671) -+ -+end -+| ( 138, ( ( _, ( _, _, END_MAP1right)) :: ( _, ( MlyValue.AreaList -+AreaList, _, _)) :: ( _, ( MlyValue.START_MAP START_MAP, ( -+START_MAPleft as START_MAP1left), _)) :: rest671)) => let val result -+ = MlyValue.Special ( -+HTMLAttrs.mkMAP(ctx START_MAPleft, START_MAP, AreaList)) -+ in ( LrTable.NT 44, ( result, START_MAP1left, END_MAP1right), rest671 -+) -+end -+| ( 139, ( ( _, ( MlyValue.TAG_PARAM TAG_PARAM, (TAG_PARAMleft as -+TAG_PARAM1left), TAG_PARAM1right)) :: rest671)) => let val result = -+MlyValue.Special (HTMLAttrs.mkPARAM(ctx TAG_PARAMleft, TAG_PARAM)) -+ in ( LrTable.NT 44, ( result, TAG_PARAM1left, TAG_PARAM1right), -+rest671) -+end -+| ( 140, ( rest671)) => let val result = MlyValue.AreaList ([]) -+ in ( LrTable.NT 45, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 141, ( ( _, ( MlyValue.AreaList AreaList, _, AreaList1right)) :: -+( _, ( MlyValue.TAG_AREA TAG_AREA, (TAG_AREAleft as TAG_AREA1left), _) -+) :: rest671)) => let val result = MlyValue.AreaList ( -+HTMLAttrs.mkAREA(ctx TAG_AREAleft, TAG_AREA) :: AreaList) -+ in ( LrTable.NT 45, ( result, TAG_AREA1left, AreaList1right), rest671 -+) -+end -+| ( 142, ( ( _, ( MlyValue.TAG_INPUT TAG_INPUT, (TAG_INPUTleft as -+TAG_INPUT1left), TAG_INPUT1right)) :: rest671)) => let val result = -+MlyValue.Form (HTMLAttrs.mkINPUT(ctx TAG_INPUTleft, TAG_INPUT)) -+ in ( LrTable.NT 46, ( result, TAG_INPUT1left, TAG_INPUT1right), -+rest671) -+end -+| ( 143, ( ( _, ( _, _, END_SELECT1right)) :: ( _, ( -+MlyValue.OptionList OptionList, _, _)) :: ( _, ( MlyValue.START_SELECT -+ START_SELECT, (START_SELECTleft as START_SELECT1left), _)) :: rest671 -+)) => let val result = MlyValue.Form ( -+HTMLAttrs.mkSELECT(ctx START_SELECTleft, START_SELECT, OptionList)) -+ in ( LrTable.NT 46, ( result, START_SELECT1left, END_SELECT1right), -+rest671) -+end -+| ( 144, ( ( _, ( _, _, END_TEXTAREA1right)) :: ( _, ( -+MlyValue.PCData PCData, _, _)) :: ( _, ( MlyValue.START_TEXTAREA -+START_TEXTAREA, (START_TEXTAREAleft as START_TEXTAREA1left), _)) :: -+rest671)) => let val result = MlyValue.Form ( -+HTMLAttrs.mkTEXTAREA( -+ ctx START_TEXTAREAleft, START_TEXTAREA, -+ PCData) -+ -+) -+ in ( LrTable.NT 46, ( result, START_TEXTAREA1left, END_TEXTAREA1right -+), rest671) -+end -+| ( 145, ( rest671)) => let val result = MlyValue.OptionList ([]) -+ in ( LrTable.NT 47, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 146, ( ( _, ( MlyValue.OptionList OptionList, _, OptionList1right -+)) :: _ :: ( _, ( MlyValue.PCData PCData, _, _)) :: ( _, ( -+MlyValue.START_OPTION START_OPTION, (START_OPTIONleft as -+START_OPTION1left), _)) :: rest671)) => let val result = -+MlyValue.OptionList ( -+HTMLAttrs.mkOPTION(ctx START_OPTIONleft, START_OPTION, PCData) -+ :: OptionList -+ -+) -+ in ( LrTable.NT 47, ( result, START_OPTION1left, OptionList1right), -+rest671) -+end -+| ( 147, ( rest671)) => let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 48, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 148, ( ( _, ( _, END_OPTION1left, END_OPTION1right)) :: rest671)) -+ => let val result = MlyValue.ntVOID () -+ in ( LrTable.NT 48, ( result, END_OPTION1left, END_OPTION1right), -+rest671) -+end -+| ( 149, ( ( _, ( MlyValue.PCDataList PCDataList, PCDataList1left, -+PCDataList1right)) :: rest671)) => let val result = MlyValue.PCData ( -+concat PCDataList) -+ in ( LrTable.NT 49, ( result, PCDataList1left, PCDataList1right), -+rest671) -+end -+| ( 150, ( rest671)) => let val result = MlyValue.PCDataList ([]) -+ in ( LrTable.NT 50, ( result, defaultPos, defaultPos), rest671) -+end -+| ( 151, ( ( _, ( MlyValue.PCDataList PCDataList, _, PCDataList1right -+)) :: ( _, ( MlyValue.PCDataElem PCDataElem, PCDataElem1left, _)) :: -+rest671)) => let val result = MlyValue.PCDataList ( -+PCDataElem :: PCDataList) -+ in ( LrTable.NT 50, ( result, PCDataElem1left, PCDataList1right), -+rest671) -+end -+| ( 152, ( ( _, ( MlyValue.PCDATA PCDATA, PCDATA1left, PCDATA1right)) -+ :: rest671)) => let val result = MlyValue.PCDataElem (PCDATA) -+ in ( LrTable.NT 51, ( result, PCDATA1left, PCDATA1right), rest671) -+ -+end -+| ( 153, ( ( _, ( MlyValue.CHAR_REF CHAR_REF, CHAR_REF1left, -+CHAR_REF1right)) :: rest671)) => let val result = MlyValue.PCDataElem -+ (CHAR_REF) -+ in ( LrTable.NT 51, ( result, CHAR_REF1left, CHAR_REF1right), rest671 -+) -+end -+| ( 154, ( ( _, ( MlyValue.ENTITY_REF ENTITY_REF, ENTITY_REF1left, -+ENTITY_REF1right)) :: rest671)) => let val result = -+MlyValue.PCDataElem (ENTITY_REF) -+ in ( LrTable.NT 51, ( result, ENTITY_REF1left, ENTITY_REF1right), -+rest671) -+end -+| _ => raise (mlyAction i392) -+end -+val void = MlyValue.VOID -+val extract = fn a => (fn MlyValue.Document x => x -+| _ => let exception ParseInternal -+ in raise ParseInternal end) a -+end -+end -+structure Tokens : HTML_TOKENS = -+struct -+type svalue = ParserData.svalue -+type ('a,'b) token = ('a,'b) Token.token -+fun EOF (p1,p2) = Token.TOKEN (ParserData.LrTable.T 0,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_A (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 1,( -+ParserData.MlyValue.START_A i,p1,p2)) -+fun END_A (p1,p2) = Token.TOKEN (ParserData.LrTable.T 2,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_ADDRESS (p1,p2) = Token.TOKEN (ParserData.LrTable.T 3,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_ADDRESS (p1,p2) = Token.TOKEN (ParserData.LrTable.T 4,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_APPLET (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 5,( -+ParserData.MlyValue.START_APPLET i,p1,p2)) -+fun END_APPLET (p1,p2) = Token.TOKEN (ParserData.LrTable.T 6,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun TAG_AREA (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 7,( -+ParserData.MlyValue.TAG_AREA i,p1,p2)) -+fun START_B (p1,p2) = Token.TOKEN (ParserData.LrTable.T 8,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_B (p1,p2) = Token.TOKEN (ParserData.LrTable.T 9,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun TAG_BASE (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 10,( -+ParserData.MlyValue.TAG_BASE i,p1,p2)) -+fun START_BIG (p1,p2) = Token.TOKEN (ParserData.LrTable.T 11,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_BIG (p1,p2) = Token.TOKEN (ParserData.LrTable.T 12,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_BLOCKQUOTE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 13,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_BLOCKQUOTE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 14,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_BODY (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 15,( -+ParserData.MlyValue.START_BODY i,p1,p2)) -+fun END_BODY (p1,p2) = Token.TOKEN (ParserData.LrTable.T 16,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun TAG_BR (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 17,( -+ParserData.MlyValue.TAG_BR i,p1,p2)) -+fun START_CAPTION (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 18,( -+ParserData.MlyValue.START_CAPTION i,p1,p2)) -+fun END_CAPTION (p1,p2) = Token.TOKEN (ParserData.LrTable.T 19,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_CENTER (p1,p2) = Token.TOKEN (ParserData.LrTable.T 20,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_CENTER (p1,p2) = Token.TOKEN (ParserData.LrTable.T 21,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_CITE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 22,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_CITE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 23,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_CODE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 24,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_CODE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 25,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_DD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 26,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_DD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 27,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_DFN (p1,p2) = Token.TOKEN (ParserData.LrTable.T 28,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_DFN (p1,p2) = Token.TOKEN (ParserData.LrTable.T 29,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_DIR (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 30,( -+ParserData.MlyValue.START_DIR i,p1,p2)) -+fun END_DIR (p1,p2) = Token.TOKEN (ParserData.LrTable.T 31,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_DIV (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 32,( -+ParserData.MlyValue.START_DIV i,p1,p2)) -+fun END_DIV (p1,p2) = Token.TOKEN (ParserData.LrTable.T 33,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_DL (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 34,( -+ParserData.MlyValue.START_DL i,p1,p2)) -+fun END_DL (p1,p2) = Token.TOKEN (ParserData.LrTable.T 35,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_DT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 36,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_DT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 37,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_EM (p1,p2) = Token.TOKEN (ParserData.LrTable.T 38,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_EM (p1,p2) = Token.TOKEN (ParserData.LrTable.T 39,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_FONT (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 40,( -+ParserData.MlyValue.START_FONT i,p1,p2)) -+fun END_FONT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 41,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_BASEFONT (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 42,( -+ParserData.MlyValue.START_BASEFONT i,p1,p2)) -+fun END_BASEFONT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 43,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_FORM (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 44,( -+ParserData.MlyValue.START_FORM i,p1,p2)) -+fun END_FORM (p1,p2) = Token.TOKEN (ParserData.LrTable.T 45,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_H1 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 46,( -+ParserData.MlyValue.START_H1 i,p1,p2)) -+fun END_H1 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 47,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_H2 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 48,( -+ParserData.MlyValue.START_H2 i,p1,p2)) -+fun END_H2 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 49,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_H3 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 50,( -+ParserData.MlyValue.START_H3 i,p1,p2)) -+fun END_H3 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 51,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_H4 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 52,( -+ParserData.MlyValue.START_H4 i,p1,p2)) -+fun END_H4 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 53,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_H5 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 54,( -+ParserData.MlyValue.START_H5 i,p1,p2)) -+fun END_H5 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 55,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_H6 (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 56,( -+ParserData.MlyValue.START_H6 i,p1,p2)) -+fun END_H6 (p1,p2) = Token.TOKEN (ParserData.LrTable.T 57,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_HEAD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 58,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_HEAD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 59,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun TAG_HR (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 60,( -+ParserData.MlyValue.TAG_HR i,p1,p2)) -+fun START_HTML (p1,p2) = Token.TOKEN (ParserData.LrTable.T 61,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_HTML (p1,p2) = Token.TOKEN (ParserData.LrTable.T 62,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_I (p1,p2) = Token.TOKEN (ParserData.LrTable.T 63,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_I (p1,p2) = Token.TOKEN (ParserData.LrTable.T 64,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun TAG_IMG (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 65,( -+ParserData.MlyValue.TAG_IMG i,p1,p2)) -+fun TAG_INPUT (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 66,( -+ParserData.MlyValue.TAG_INPUT i,p1,p2)) -+fun TAG_ISINDEX (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 67,( -+ParserData.MlyValue.TAG_ISINDEX i,p1,p2)) -+fun START_KBD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 68,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_KBD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 69,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_LI (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 70,( -+ParserData.MlyValue.START_LI i,p1,p2)) -+fun END_LI (p1,p2) = Token.TOKEN (ParserData.LrTable.T 71,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun TAG_LINK (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 72,( -+ParserData.MlyValue.TAG_LINK i,p1,p2)) -+fun START_MAP (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 73,( -+ParserData.MlyValue.START_MAP i,p1,p2)) -+fun END_MAP (p1,p2) = Token.TOKEN (ParserData.LrTable.T 74,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_MENU (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 75,( -+ParserData.MlyValue.START_MENU i,p1,p2)) -+fun END_MENU (p1,p2) = Token.TOKEN (ParserData.LrTable.T 76,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun TAG_META (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 77,( -+ParserData.MlyValue.TAG_META i,p1,p2)) -+fun START_OL (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 78,( -+ParserData.MlyValue.START_OL i,p1,p2)) -+fun END_OL (p1,p2) = Token.TOKEN (ParserData.LrTable.T 79,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_OPTION (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 80,( -+ParserData.MlyValue.START_OPTION i,p1,p2)) -+fun END_OPTION (p1,p2) = Token.TOKEN (ParserData.LrTable.T 81,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_P (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 82,( -+ParserData.MlyValue.START_P i,p1,p2)) -+fun END_P (p1,p2) = Token.TOKEN (ParserData.LrTable.T 83,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun TAG_PARAM (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 84,( -+ParserData.MlyValue.TAG_PARAM i,p1,p2)) -+fun START_PRE (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 85,( -+ParserData.MlyValue.START_PRE i,p1,p2)) -+fun END_PRE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 86,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_SAMP (p1,p2) = Token.TOKEN (ParserData.LrTable.T 87,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_SAMP (p1,p2) = Token.TOKEN (ParserData.LrTable.T 88,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_SCRIPT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 89,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_SCRIPT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 90,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_SELECT (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 91,( -+ParserData.MlyValue.START_SELECT i,p1,p2)) -+fun END_SELECT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 92,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_SMALL (p1,p2) = Token.TOKEN (ParserData.LrTable.T 93,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_SMALL (p1,p2) = Token.TOKEN (ParserData.LrTable.T 94,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_STRIKE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 95,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_STRIKE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 96,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_STRONG (p1,p2) = Token.TOKEN (ParserData.LrTable.T 97,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_STRONG (p1,p2) = Token.TOKEN (ParserData.LrTable.T 98,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_STYLE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 99,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_STYLE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 100,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_SUB (p1,p2) = Token.TOKEN (ParserData.LrTable.T 101,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_SUB (p1,p2) = Token.TOKEN (ParserData.LrTable.T 102,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_SUP (p1,p2) = Token.TOKEN (ParserData.LrTable.T 103,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_SUP (p1,p2) = Token.TOKEN (ParserData.LrTable.T 104,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_TABLE (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 105,( -+ParserData.MlyValue.START_TABLE i,p1,p2)) -+fun END_TABLE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 106,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_TD (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 107,( -+ParserData.MlyValue.START_TD i,p1,p2)) -+fun END_TD (p1,p2) = Token.TOKEN (ParserData.LrTable.T 108,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_TEXTAREA (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 109,( -+ParserData.MlyValue.START_TEXTAREA i,p1,p2)) -+fun END_TEXTAREA (p1,p2) = Token.TOKEN (ParserData.LrTable.T 110,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_TH (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 111,( -+ParserData.MlyValue.START_TH i,p1,p2)) -+fun END_TH (p1,p2) = Token.TOKEN (ParserData.LrTable.T 112,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_TITLE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 113,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_TITLE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 114,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_TR (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 115,( -+ParserData.MlyValue.START_TR i,p1,p2)) -+fun END_TR (p1,p2) = Token.TOKEN (ParserData.LrTable.T 116,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_TT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 117,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_TT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 118,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_U (p1,p2) = Token.TOKEN (ParserData.LrTable.T 119,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_U (p1,p2) = Token.TOKEN (ParserData.LrTable.T 120,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_UL (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 121,( -+ParserData.MlyValue.START_UL i,p1,p2)) -+fun END_UL (p1,p2) = Token.TOKEN (ParserData.LrTable.T 122,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun START_VAR (p1,p2) = Token.TOKEN (ParserData.LrTable.T 123,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun END_VAR (p1,p2) = Token.TOKEN (ParserData.LrTable.T 124,( -+ParserData.MlyValue.VOID,p1,p2)) -+fun PCDATA (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 125,( -+ParserData.MlyValue.PCDATA i,p1,p2)) -+fun CHAR_REF (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 126,( -+ParserData.MlyValue.CHAR_REF i,p1,p2)) -+fun ENTITY_REF (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 127,( -+ParserData.MlyValue.ENTITY_REF i,p1,p2)) -+end -+end -diff --git a/HTML/html-lex.sml b/HTML/html-lex.sml -new file mode 100644 -index 0000000..331d859 ---- /dev/null -+++ b/HTML/html-lex.sml -@@ -0,0 +1,670 @@ -+functor HTMLLexFn ( -+ structure Tokens : HTML_TOKENS -+ structure Err : HTML_ERROR -+ structure HTMLAttrs : HTML_ATTRS)= -+ struct -+ structure UserDeclarations = -+ struct -+(* html-lex -+ * -+ * COPYRIGHT (c) 1995 AT&T Bell Laboratories. -+ * COPYRIGHT (c) 1996 AT&T Research. -+ * -+ * A scanner for HTML. -+ * -+ * TODO: -+ * Recognize the DOCTYPE element -+ * -+ * Clean-up the scanning of start tags (do we need Err?). -+ * Whitespace in PRE elements should be preserved, but how? -+ *) -+ -+structure T = Tokens -+structure Elems = HTMLElementsFn ( -+ structure Tokens = Tokens -+ structure Err = Err -+ structure HTMLAttrs = HTMLAttrs) -+ -+type pos = int -+type svalue = T.svalue -+type arg = (((string * int * int) -> unit) * string option) -+type ('a, 'b) token = ('a, 'b) T.token -+type lexresult= (svalue, pos) token -+ -+fun eof _ = Tokens.EOF(0, 0) -+ -+(* a buffer for collecting a string piecewise *) -+val buffer = ref ([] : string list) -+fun addStr s = (buffer := s :: !buffer) -+fun getStr () = (String.concat(List.rev(! buffer)) before (buffer := [])) -+ -+end (* end of user routines *) -+exception LexError (* raised if illegal leaf action tried *) -+structure Internal = -+ struct -+ -+datatype yyfinstate = N of int -+type statedata = {fin : yyfinstate list, trans: string} -+(* transition & final state table *) -+val tab = let -+val s = [ -+ (0, -+"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+ (1, -+"\009\009\009\009\009\009\009\009\009\028\029\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\028\009\009\009\009\009\020\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\011\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\ -+\\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009" -+), -+ (3, -+"\030\030\030\030\030\030\030\030\030\030\033\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\031\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\ -+\\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030\030" -+), -+ (5, -+"\034\034\034\034\034\034\034\034\034\038\039\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\038\034\034\034\034\034\034\034\034\034\034\034\034\036\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\035\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\ -+\\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034\034" -+), -+ (7, -+"\040\040\040\040\040\040\040\040\040\051\053\040\040\040\040\040\ -+\\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\ -+\\051\040\048\040\040\040\040\045\040\040\040\040\040\041\041\040\ -+\\041\041\041\041\041\041\041\041\041\041\040\040\040\044\043\040\ -+\\040\041\041\041\041\041\041\041\041\041\041\041\041\041\041\041\ -+\\041\041\041\041\041\041\041\041\041\041\041\040\040\040\040\040\ -+\\040\041\041\041\041\041\041\041\041\041\041\041\041\041\041\041\ -+\\041\041\041\041\041\041\041\041\041\041\041\040\040\040\040\040\ -+\\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\ -+\\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\ -+\\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\ -+\\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\ -+\\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\ -+\\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\ -+\\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\ -+\\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040" -+), -+ (9, -+"\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\000\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010" -+), -+ (11, -+"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\013\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\012\012\012\012\012\012\012\012\012\012\012\012\012\012\012\ -+\\012\012\012\012\012\012\012\012\012\012\012\000\000\000\000\000\ -+\\000\012\012\012\012\012\012\012\012\012\012\012\012\012\012\012\ -+\\012\012\012\012\012\012\012\012\012\012\012\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+ (12, -+"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\012\012\000\ -+\\012\012\012\012\012\012\012\012\012\012\000\000\000\000\000\000\ -+\\000\012\012\012\012\012\012\012\012\012\012\012\012\012\012\012\ -+\\012\012\012\012\012\012\012\012\012\012\012\000\000\000\000\000\ -+\\000\012\012\012\012\012\012\012\012\012\012\012\012\012\012\012\ -+\\012\012\012\012\012\012\012\012\012\012\012\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+ (13, -+"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\014\014\014\014\014\014\014\014\014\014\014\014\014\014\014\ -+\\014\014\014\014\014\014\014\014\014\014\014\000\000\000\000\000\ -+\\000\014\014\014\014\014\014\014\014\014\014\014\014\014\014\014\ -+\\014\014\014\014\014\014\014\014\014\014\014\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+ (14, -+"\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\016\000\000\000\000\000\000\000\000\000\000\000\000\014\014\000\ -+\\014\014\014\014\014\014\014\014\014\014\000\000\000\000\015\000\ -+\\000\014\014\014\014\014\014\014\014\014\014\014\014\014\014\014\ -+\\014\014\014\014\014\014\014\014\014\014\014\000\000\000\000\000\ -+\\000\014\014\014\014\014\014\014\014\014\014\014\014\014\014\014\ -+\\014\014\014\014\014\014\014\014\014\014\014\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+ (16, -+"\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+ (17, -+"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+ (18, -+"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+ (20, -+"\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\023\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\000\010\010\010\ -+\\010\021\021\021\021\021\021\021\021\021\021\021\021\021\021\021\ -+\\021\021\021\021\021\021\021\021\021\021\021\010\010\010\010\010\ -+\\010\021\021\021\021\021\021\021\021\021\021\021\021\021\021\021\ -+\\021\021\021\021\021\021\021\021\021\021\021\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010" -+), -+ (21, -+"\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\021\021\010\ -+\\021\021\021\021\021\021\021\021\021\021\010\022\000\010\010\010\ -+\\010\021\021\021\021\021\021\021\021\021\021\021\021\021\021\021\ -+\\021\021\021\021\021\021\021\021\021\021\021\010\010\010\010\010\ -+\\010\021\021\021\021\021\021\021\021\021\021\021\021\021\021\021\ -+\\021\021\021\021\021\021\021\021\021\021\021\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010" -+), -+ (23, -+"\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\026\026\026\026\026\026\026\026\026\026\010\010\000\010\010\010\ -+\\010\024\024\024\024\024\024\024\024\024\024\024\024\024\024\024\ -+\\024\024\024\024\024\024\024\024\024\024\024\010\010\010\010\010\ -+\\010\024\024\024\024\024\024\024\024\024\024\024\024\024\024\024\ -+\\024\024\024\024\024\024\024\024\024\024\024\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010" -+), -+ (24, -+"\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\025\000\010\010\010\ -+\\010\024\024\024\024\024\024\024\024\024\024\024\024\024\024\024\ -+\\024\024\024\024\024\024\024\024\024\024\024\010\010\010\010\010\ -+\\010\024\024\024\024\024\024\024\024\024\024\024\024\024\024\024\ -+\\024\024\024\024\024\024\024\024\024\024\024\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010" -+), -+ (26, -+"\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\026\026\026\026\026\026\026\026\026\026\010\027\000\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ -+\\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010" -+), -+ (31, -+"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\032\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+ (36, -+"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\037\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+ (41, -+"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\042\042\000\ -+\\042\042\042\042\042\042\042\042\042\042\000\000\000\000\000\000\ -+\\000\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\ -+\\042\042\042\042\042\042\042\042\042\042\042\000\000\000\000\000\ -+\\000\042\042\042\042\042\042\042\042\042\042\042\042\042\042\042\ -+\\042\042\042\042\042\042\042\042\042\042\042\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+ (45, -+"\046\046\046\046\046\046\046\046\046\046\000\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\047\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\ -+\\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046\046" -+), -+ (48, -+"\049\049\049\049\049\049\049\049\049\049\000\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\050\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\ -+\\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049\049" -+), -+ (51, -+"\000\000\000\000\000\000\000\000\000\052\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\052\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ -+\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" -+), -+(0, "")] -+fun f x = x -+val s = List.map f (List.rev (tl (List.rev s))) -+exception LexHackingError -+fun look ((j,x)::r, i: int) = if i = j then x else look(r, i) -+ | look ([], i) = raise LexHackingError -+fun g {fin=x, trans=i} = {fin=x, trans=look(s,i)} -+in Vector.fromList(List.map g -+[{fin = [], trans = 0}, -+{fin = [], trans = 1}, -+{fin = [], trans = 1}, -+{fin = [], trans = 3}, -+{fin = [], trans = 3}, -+{fin = [], trans = 5}, -+{fin = [], trans = 5}, -+{fin = [], trans = 7}, -+{fin = [], trans = 7}, -+{fin = [(N 79),(N 81)], trans = 9}, -+{fin = [(N 79)], trans = 9}, -+{fin = [(N 81)], trans = 11}, -+{fin = [(N 3)], trans = 12}, -+{fin = [], trans = 13}, -+{fin = [], trans = 14}, -+{fin = [(N 32)], trans = 0}, -+{fin = [], trans = 16}, -+{fin = [], trans = 17}, -+{fin = [], trans = 18}, -+{fin = [(N 37)], trans = 0}, -+{fin = [(N 79),(N 81)], trans = 20}, -+{fin = [(N 79)], trans = 21}, -+{fin = [(N 72),(N 79)], trans = 9}, -+{fin = [(N 79)], trans = 23}, -+{fin = [(N 79)], trans = 24}, -+{fin = [(N 61),(N 79)], trans = 9}, -+{fin = [(N 79)], trans = 26}, -+{fin = [(N 67),(N 79)], trans = 9}, -+{fin = [(N 76),(N 79),(N 81)], trans = 9}, -+{fin = [(N 74),(N 79)], trans = 9}, -+{fin = [(N 44)], trans = 0}, -+{fin = [(N 44)], trans = 31}, -+{fin = [(N 40)], trans = 0}, -+{fin = [(N 42)], trans = 0}, -+{fin = [(N 55)], trans = 0}, -+{fin = [(N 49),(N 55)], trans = 0}, -+{fin = [(N 55)], trans = 36}, -+{fin = [(N 47)], trans = 0}, -+{fin = [(N 53),(N 55)], trans = 0}, -+{fin = [(N 51)], trans = 0}, -+{fin = [(N 25)], trans = 0}, -+{fin = [(N 13),(N 25)], trans = 41}, -+{fin = [(N 13)], trans = 41}, -+{fin = [(N 5),(N 25)], trans = 0}, -+{fin = [(N 15),(N 25)], trans = 0}, -+{fin = [(N 25)], trans = 45}, -+{fin = [], trans = 45}, -+{fin = [(N 23)], trans = 0}, -+{fin = [(N 25)], trans = 48}, -+{fin = [], trans = 48}, -+{fin = [(N 19)], trans = 0}, -+{fin = [(N 10),(N 25)], trans = 51}, -+{fin = [(N 10)], trans = 51}, -+{fin = [(N 7)], trans = 0}]) -+end -+structure StartStates = -+ struct -+ datatype yystartstate = STARTSTATE of int -+ -+(* start state definitions *) -+ -+val COM1 = STARTSTATE 3; -+val COM2 = STARTSTATE 5; -+val INITIAL = STARTSTATE 1; -+val STAG = STARTSTATE 7; -+ -+end -+type result = UserDeclarations.lexresult -+ exception LexerError (* raised if illegal leaf action tried *) -+end -+ -+fun makeLexer yyinput = -+let val yygone0=1 -+ val yylineno = ref 0 -+ -+ val yyb = ref "\n" (* buffer *) -+ val yybl = ref 1 (*buffer length *) -+ val yybufpos = ref 1 (* location of next character to use *) -+ val yygone = ref yygone0 (* position in file of beginning of buffer *) -+ val yydone = ref false (* eof found yet? *) -+ val yybegin = ref 1 (*Current 'start state' for lexer *) -+ -+ val YYBEGIN = fn (Internal.StartStates.STARTSTATE x) => -+ yybegin := x -+ -+fun lex (yyarg as (errorFn, file)) = -+let fun continue() : Internal.result = -+ let fun scan (s,AcceptingLeaves : Internal.yyfinstate list list,l,i0) = -+ let fun action (i,nil) = raise LexError -+ | action (i,nil::l) = action (i-1,l) -+ | action (i,(node::acts)::l) = -+ case node of -+ Internal.N yyk => -+ (let fun yymktext() = String.substring(!yyb,i0,i-i0) -+ val yypos = i0+ !yygone -+ val _ = yylineno := CharVectorSlice.foldli -+ (fn (_,#"\n", n) => n+1 | (_,_, n) => n) (!yylineno) (CharVectorSlice.slice (!yyb,i0,SOME(i-i0))) -+ open UserDeclarations Internal.StartStates -+ in (yybufpos := i; case yyk of -+ -+ (* Application actions *) -+ -+ 10 => let val yytext=yymktext() in addStr yytext; continue() end -+| 13 => let val yytext=yymktext() in addStr yytext; continue() end -+| 15 => let val yytext=yymktext() in addStr yytext; continue() end -+| 19 => let val yytext=yymktext() in addStr yytext; continue() end -+| 23 => let val yytext=yymktext() in addStr yytext; continue() end -+| 25 => let val yytext=yymktext() in addStr yytext; continue() end -+| 3 => let val yytext=yymktext() in addStr yytext; YYBEGIN STAG; continue() end -+| 32 => let val yytext=yymktext() in case Elems.endTag file (yytext, !yylineno, !yylineno) -+ of NONE => continue() -+ | (SOME tag) => tag -+ (* end case *) end -+| 37 => (YYBEGIN COM1; continue()) -+| 40 => (YYBEGIN COM2; continue()) -+| 42 => (continue()) -+| 44 => (continue()) -+| 47 => (YYBEGIN COM1; continue()) -+| 49 => (YYBEGIN INITIAL; continue()) -+| 5 => let val yytext=yymktext() in addStr yytext; -+ YYBEGIN INITIAL; -+ case Elems.startTag file (getStr(), !yylineno, !yylineno) -+ of NONE => continue() -+ | (SOME tag) => tag -+ (* end case *) end -+| 51 => (continue()) -+| 53 => (continue()) -+| 55 => (errorFn("bad comment syntax", !yylineno, !yylineno+1); -+ YYBEGIN INITIAL; -+ continue()) -+| 61 => ( -+(** At some point, we should support &#SPACE; and &#TAB; **) -+ continue()) -+| 67 => let val yytext=yymktext() in T.CHAR_REF(yytext, !yylineno, !yylineno) end -+| 7 => (addStr " "; continue()) -+| 72 => let val yytext=yymktext() in T.ENTITY_REF(yytext, !yylineno, !yylineno) end -+| 74 => (continue()) -+| 76 => (continue()) -+| 79 => let val yytext=yymktext() in T.PCDATA(yytext, !yylineno, !yylineno) end -+| 81 => let val yytext=yymktext() in errorFn(concat[ -+ "bogus character #\"", Char.toString(String.sub(yytext, 0)), -+ "\" in PCDATA\n" -+ ], !yylineno, !yylineno+1); -+ continue() end -+| _ => raise Internal.LexerError -+ -+ ) end ) -+ -+ val {fin,trans} = Unsafe.Vector.sub(Internal.tab, s) -+ val NewAcceptingLeaves = fin::AcceptingLeaves -+ in if l = !yybl then -+ if trans = #trans(Vector.sub(Internal.tab,0)) -+ then action(l,NewAcceptingLeaves -+) else let val newchars= if !yydone then "" else yyinput 1024 -+ in if (String.size newchars)=0 -+ then (yydone := true; -+ if (l=i0) then UserDeclarations.eof yyarg -+ else action(l,NewAcceptingLeaves)) -+ else (if i0=l then yyb := newchars -+ else yyb := String.substring(!yyb,i0,l-i0)^newchars; -+ yygone := !yygone+i0; -+ yybl := String.size (!yyb); -+ scan (s,AcceptingLeaves,l-i0,0)) -+ end -+ else let val NewChar = Char.ord(Unsafe.CharVector.sub(!yyb,l)) -+ val NewState = Char.ord(Unsafe.CharVector.sub(trans,NewChar)) -+ in if NewState=0 then action(l,NewAcceptingLeaves) -+ else scan(NewState,NewAcceptingLeaves,l+1,i0) -+ end -+ end -+(* -+ val start= if String.substring(!yyb,!yybufpos-1,1)="\n" -+then !yybegin+1 else !yybegin -+*) -+ in scan(!yybegin (* start *),nil,!yybufpos,!yybufpos) -+ end -+in continue end -+ in lex -+ end -+end -diff --git a/HTML/html-lib.mlb b/HTML/html-lib.mlb -new file mode 100644 -index 0000000..fc014d3 ---- /dev/null -+++ b/HTML/html-lib.mlb -@@ -0,0 +1,299 @@ -+ -+ann -+ "nonexhaustiveMatch warn" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" -+in -+ -+local -+ basis l5 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb -+ end -+ basis l46 = -+ bas -+ (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb -+ end -+ basis l35 = -+ bas -+ (* $/ml-yacc-lib.cm ====> *) $(SML_LIB)/mlyacc-lib/mlyacc-lib.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l5 -+ in -+ structure gs_0 = General -+ end -+ local -+ open l5 -+ in -+ structure gs_1 = String -+ end -+ local -+ open l5 -+ in -+ structure gs_2 = List -+ end -+ local -+ open l5 -+ in -+ structure gs_3 = Char -+ end -+ local -+ html-sig.sml -+ in -+ signature gs_4 = HTML -+ end -+ local -+ structure Char = gs_3 -+ structure General = gs_0 -+ signature HTML = gs_4 -+ structure List = gs_2 -+ structure String = gs_1 -+ html.sml -+ in -+ structure gs_5 = HTML -+ end -+ local -+ structure HTML = gs_5 -+ make-html.sml -+ in -+ structure gs_6 = MakeHTML -+ end -+ local -+ structure HTML = gs_5 -+ html-defaults.sml -+ in -+ structure gs_7 = HTMLDefaults -+ end -+ local -+ html-error-sig.sml -+ in -+ signature gs_8 = HTML_ERROR -+ end -+ local -+ open l35 -+ in -+ functor gs_9 = Join -+ functor gs_10 = JoinWithArg -+ end -+ local -+ open l35 -+ in -+ structure gs_11 = LrParser -+ end -+ local -+ open l5 -+ in -+ structure gs_12 = TextIO -+ end -+ local -+ open l46 -+ in -+ structure gs_13 = Format -+ end -+ local -+ structure Format = gs_13 -+ structure HTML = gs_5 -+ signature HTML_ERROR = gs_8 -+ structure List = gs_2 -+ check-html-fn.sml -+ in -+ functor gs_14 = CheckHTMLFn -+ end -+ local -+ open l5 -+ in -+ structure gs_15 = Unsafe -+ end -+ local -+ open l5 -+ in -+ structure gs_16 = CharVectorSlice -+ end -+ local -+ open l5 -+ in -+ structure gs_17 = Vector -+ end -+ local -+ open l5 -+ in -+ structure gs_18 = Substring -+ end -+ local -+ open l46 -+ in -+ functor gs_19 = HashTableFn -+ end -+ local -+ open l46 -+ in -+ structure gs_20 = HashString -+ end -+ local -+ html-attr-vals.sml -+ in -+ structure gs_21 = HTMLAttrVals -+ end -+ local -+ structure HTML = gs_5 -+ structure HTMLAttrVals = gs_21 -+ html-attrs-sig.sml -+ in -+ signature gs_22 = HTML_ATTRS -+ end -+ local -+ open l35 -+ in -+ signature gs_23 = ARG_LEXER -+ signature gs_24 = ARG_PARSER -+ signature gs_25 = LEXER -+ signature gs_26 = LR_PARSER -+ signature gs_27 = LR_TABLE -+ signature gs_28 = PARSER -+ signature gs_29 = PARSER_DATA -+ signature gs_30 = STREAM -+ signature gs_31 = TOKEN -+ end -+ local -+ signature ARG_LEXER = gs_23 -+ signature ARG_PARSER = gs_24 -+ structure HTMLAttrVals = gs_21 -+ signature LEXER = gs_25 -+ signature LR_PARSER = gs_26 -+ signature LR_TABLE = gs_27 -+ signature PARSER = gs_28 -+ signature PARSER_DATA = gs_29 -+ signature STREAM = gs_30 -+ signature TOKEN = gs_31 -+ html-gram.sig -+ in -+ signature gs_32 = HTML_LRVALS -+ signature gs_33 = HTML_TOKENS -+ end -+ local -+ structure Char = gs_3 -+ signature HTML_ATTRS = gs_22 -+ signature HTML_ERROR = gs_8 -+ signature HTML_LRVALS = gs_32 -+ signature HTML_TOKENS = gs_33 -+ structure HashString = gs_20 -+ functor HashTableFn = gs_19 -+ structure List = gs_2 -+ structure String = gs_1 -+ structure Substring = gs_18 -+ html-elements-fn.sml -+ in -+ functor gs_34 = HTMLElementsFn -+ end -+ local -+ structure Char = gs_3 -+ structure CharVectorSlice = gs_16 -+ functor HTMLElementsFn = gs_34 -+ signature HTML_ATTRS = gs_22 -+ signature HTML_ERROR = gs_8 -+ signature HTML_LRVALS = gs_32 -+ signature HTML_TOKENS = gs_33 -+ structure List = gs_2 -+ structure String = gs_1 -+ structure Unsafe = gs_15 -+ structure Vector = gs_17 -+ html-lex.sml -+ in -+ functor gs_35 = HTMLLexFn -+ end -+ local -+ open l5 -+ in -+ structure gs_36 = Array -+ end -+ local -+ signature ARG_LEXER = gs_23 -+ signature ARG_PARSER = gs_24 -+ structure Array = gs_36 -+ structure Char = gs_3 -+ structure General = gs_0 -+ structure HTML = gs_5 -+ structure HTMLAttrVals = gs_21 -+ signature HTML_ATTRS = gs_22 -+ signature HTML_LRVALS = gs_32 -+ signature HTML_TOKENS = gs_33 -+ signature LEXER = gs_25 -+ signature LR_PARSER = gs_26 -+ signature LR_TABLE = gs_27 -+ structure List = gs_2 -+ signature PARSER = gs_28 -+ signature PARSER_DATA = gs_29 -+ signature STREAM = gs_30 -+ structure String = gs_1 -+ signature TOKEN = gs_31 -+ html-gram.sml -+ in -+ functor gs_37 = HTMLLrValsFn -+ end -+ local -+ open l5 -+ in -+ structure gs_38 = Int -+ end -+ local -+ structure Array = gs_36 -+ structure Char = gs_3 -+ structure HTML = gs_5 -+ structure HTMLAttrVals = gs_21 -+ signature HTML_ATTRS = gs_22 -+ signature HTML_ERROR = gs_8 -+ structure HashString = gs_20 -+ functor HashTableFn = gs_19 -+ structure Int = gs_38 -+ structure List = gs_2 -+ structure String = gs_1 -+ html-attrs-fn.sml -+ in -+ functor gs_39 = HTMLAttrsFn -+ end -+ local -+ functor CheckHTMLFn = gs_14 -+ structure HTML = gs_5 -+ functor HTMLAttrsFn = gs_39 -+ functor HTMLLexFn = gs_35 -+ functor HTMLLrValsFn = gs_37 -+ signature HTML_ERROR = gs_8 -+ functor Join = gs_9 -+ functor JoinWithArg = gs_10 -+ structure LrParser = gs_11 -+ structure TextIO = gs_12 -+ html-parser-fn.sml -+ in -+ functor gs_40 = HTMLParserFn -+ end -+ local -+ open l46 -+ in -+ structure gs_41 = ListFormat -+ end -+ local -+ structure Format = gs_13 -+ structure HTML = gs_5 -+ structure Int = gs_38 -+ structure List = gs_2 -+ structure ListFormat = gs_41 -+ pr-html.sml -+ in -+ structure gs_42 = PrHTML -+ end -+in -+ signature HTML = gs_4 -+ structure HTML = gs_5 -+ structure HTMLDefaults = gs_7 -+ functor HTMLParserFn = gs_40 -+ signature HTML_ERROR = gs_8 -+ structure MakeHTML = gs_6 -+ structure PrHTML = gs_42 -+end -+end -+ -+end -diff --git a/HTML4/html4-attr.l.sml b/HTML4/html4-attr.l.sml -index a48df45..bf0dd3e 100644 ---- a/HTML4/html4-attr.l.sml -+++ b/HTML4/html4-attr.l.sml -@@ -58,7 +58,7 @@ Vector.fromList [] - (* start position of token -- can be updated via skip() *) - val yystartPos = ref (yygetPos()) - (* get one char of input *) -- fun yygetc strm = (case UTF8.getu ULexBuffer.getc strm -+ fun yygetc strm = (case ULexBuffer.getu strm - of (SOME (0w10, s')) => - (AntlrStreamPos.markNewLine yysm (ULexBuffer.getpos strm); - SOME (0w10, s')) -diff --git a/HTML4/html4-lib.cm b/HTML4/html4-lib.cm -index 68cdc5a..bac8d74 100644 ---- a/HTML4/html4-lib.cm -+++ b/HTML4/html4-lib.cm -@@ -15,11 +15,10 @@ Library - is - $/basis.cm - $/smlnj-lib.cm -+ $/pp-lib.cm - $/ml-lpt-lib.cm - -- (* XXX IMO, the following should not be required to be able to -- "see" the PrettyPrint structure. *) -- $smlnj/compiler/current.cm -+ pp-init.sml - - html4.g : ml-antlr - html4.l : ml-ulex -diff --git a/HTML4/html4-lib.mlb b/HTML4/html4-lib.mlb -new file mode 100644 -index 0000000..8a3e0a6 ---- /dev/null -+++ b/HTML4/html4-lib.mlb -@@ -0,0 +1,282 @@ -+ -+ann -+ "nonexhaustiveMatch ignore" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" -+in -+ -+local -+ basis l4 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb -+ end -+ basis l8 = -+ bas -+ (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb -+ end -+ basis l23 = -+ bas -+ (* $/pp-lib.cm ====> *) $(SML_LIB)/smlnj-lib/PP/pp-lib.mlb -+ end -+ basis l64 = -+ bas -+ (* $/ml-lpt-lib.cm ====> *) $(SML_LIB)/mllpt-lib/mllpt-lib.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l4 -+ in -+ structure gs_0 = String -+ end -+ local -+ open l8 -+ in -+ structure gs_1 = Atom -+ end -+ local -+ structure Atom = gs_1 -+ structure String = gs_0 -+ html4-utils.sml -+ in -+ structure gs_2 = HTML4Utils -+ end -+ local -+ open l4 -+ in -+ structure gs_3 = IntInf -+ end -+ local -+ open l4 -+ in -+ structure gs_4 = List -+ end -+ local -+ open l23 -+ in -+ functor gs_5 = PPStreamFn -+ end -+ local -+ open l23 -+ in -+ structure gs_6 = StringToken -+ end -+ local -+ open l23 -+ in -+ signature gs_7 = PP_STREAM -+ end -+ local -+ open l4 -+ in -+ structure gs_8 = StringCvt -+ end -+ local -+ structure List = gs_4 -+ functor PPStreamFn = gs_5 -+ signature PP_STREAM = gs_7 -+ structure String = gs_0 -+ structure StringCvt = gs_8 -+ structure StringToken = gs_6 -+ pp-init.sml -+ in -+ signature gs_9 = PRETTYPRINT -+ structure gs_10 = PrettyPrint -+ end -+ local -+ structure Atom = gs_1 -+ structure IntInf = gs_3 -+ html4.sig -+ in -+ signature gs_11 = HTML4 -+ end -+ local -+ structure Atom = gs_1 -+ signature HTML4 = gs_11 -+ structure IntInf = gs_3 -+ html4.sml -+ in -+ structure gs_12 = HTML4 -+ end -+ local -+ structure Atom = gs_1 -+ structure HTML4 = gs_12 -+ structure HTML4Utils = gs_2 -+ structure IntInf = gs_3 -+ signature PRETTYPRINT = gs_9 -+ structure PrettyPrint = gs_10 -+ structure String = gs_0 -+ html4-printer.sml -+ in -+ structure gs_13 = HTML4Printer -+ end -+ local -+ open l8 -+ in -+ signature gs_14 = ORD_MAP -+ end -+ local -+ open l8 -+ in -+ functor gs_15 = RedBlackMapFn -+ end -+ local -+ open l4 -+ in -+ structure gs_16 = Substring -+ end -+ local -+ open l4 -+ in -+ structure gs_17 = Char -+ end -+ local -+ open l64 -+ in -+ structure gs_18 = AntlrStreamPos -+ end -+ local -+ open l4 -+ in -+ structure gs_19 = TextIO -+ end -+ local -+ open l64 -+ in -+ functor gs_20 = AntlrEBNF -+ end -+ local -+ open l64 -+ in -+ functor gs_21 = AntlrErrHandler -+ end -+ local -+ open l64 -+ in -+ signature gs_22 = ANTLR_LEXER -+ end -+ local -+ signature ANTLR_LEXER = gs_22 -+ functor AntlrEBNF = gs_20 -+ functor AntlrErrHandler = gs_21 -+ structure Atom = gs_1 -+ structure HTML4Utils = gs_2 -+ structure IntInf = gs_3 -+ structure String = gs_0 -+ html4.g.sml -+ in -+ functor gs_23 = HTML4ParseFn -+ structure gs_24 = HTML4Tokens -+ end -+ local -+ signature ANTLR_LEXER = gs_22 -+ functor AntlrEBNF = gs_20 -+ functor AntlrErrHandler = gs_21 -+ structure Atom = gs_1 -+ structure String = gs_0 -+ html4-attr.g.sml -+ in -+ functor gs_25 = HTML4AttrParseFn -+ structure gs_26 = HTML4AttrTokens -+ end -+ local -+ open l4 -+ in -+ structure gs_27 = Vector -+ end -+ local -+ open l64 -+ in -+ structure gs_28 = ULexBuffer -+ end -+ local -+ open l64 -+ in -+ structure gs_29 = UTF8 -+ end -+ local -+ structure AntlrStreamPos = gs_18 -+ structure Atom = gs_1 -+ functor HTML4AttrParseFn = gs_25 -+ structure HTML4AttrTokens = gs_26 -+ structure String = gs_0 -+ structure Substring = gs_16 -+ structure TextIO = gs_19 -+ structure ULexBuffer = gs_28 -+ structure UTF8 = gs_29 -+ structure Vector = gs_27 -+ html4-attr.l.sml -+ in -+ structure gs_30 = HTML4AttrLexer -+ end -+ local -+ structure AntlrStreamPos = gs_18 -+ structure Atom = gs_1 -+ structure Char = gs_17 -+ structure HTML4AttrLexer = gs_30 -+ functor HTML4AttrParseFn = gs_25 -+ structure HTML4AttrTokens = gs_26 -+ functor HTML4ParseFn = gs_23 -+ structure HTML4Tokens = gs_24 -+ structure HTML4Utils = gs_2 -+ structure IntInf = gs_3 -+ signature ORD_MAP = gs_14 -+ functor RedBlackMapFn = gs_15 -+ structure String = gs_0 -+ structure Substring = gs_16 -+ structure TextIO = gs_19 -+ html4-token-utils.sml -+ in -+ structure gs_31 = HTML4TokenUtils -+ end -+ local -+ open l4 -+ in -+ structure gs_32 = Option -+ end -+ local -+ structure AntlrStreamPos = gs_18 -+ structure Atom = gs_1 -+ structure HTML4TokenUtils = gs_31 -+ structure IntInf = gs_3 -+ structure List = gs_4 -+ structure String = gs_0 -+ structure Substring = gs_16 -+ structure TextIO = gs_19 -+ structure ULexBuffer = gs_28 -+ structure UTF8 = gs_29 -+ structure Vector = gs_27 -+ html4.l.sml -+ in -+ structure gs_33 = HTML4Lexer -+ end -+ local -+ structure AntlrStreamPos = gs_18 -+ structure Atom = gs_1 -+ structure Char = gs_17 -+ structure HTML4 = gs_12 -+ structure HTML4Lexer = gs_33 -+ functor HTML4ParseFn = gs_23 -+ structure HTML4TokenUtils = gs_31 -+ structure HTML4Tokens = gs_24 -+ structure HTML4Utils = gs_2 -+ structure Option = gs_32 -+ structure String = gs_0 -+ structure TextIO = gs_19 -+ html4-parser.sml -+ in -+ structure gs_34 = HTML4Parser -+ end -+in -+ signature HTML4 = gs_11 -+ structure HTML4 = gs_12 -+ structure HTML4Parser = gs_34 -+ structure HTML4Printer = gs_13 -+ structure HTML4TokenUtils = gs_31 -+ structure HTML4Tokens = gs_24 -+ structure HTML4Utils = gs_2 -+end -+end -+ -+end -diff --git a/HTML4/html4.l.sml b/HTML4/html4.l.sml -index 03c06f2..8f795e1 100644 ---- a/HTML4/html4.l.sml -+++ b/HTML4/html4.l.sml -@@ -76,7 +76,7 @@ Vector.fromList [] - (* start position of token -- can be updated via skip() *) - val yystartPos = ref (yygetPos()) - (* get one char of input *) -- fun yygetc strm = (case UTF8.getu ULexBuffer.getc strm -+ fun yygetc strm = (case ULexBuffer.getu strm - of (SOME (0w10, s')) => - (AntlrStreamPos.markNewLine yysm (ULexBuffer.getpos strm); - SOME (0w10, s')) -diff --git a/HTML4/pp-init.sml b/HTML4/pp-init.sml -new file mode 100644 -index 0000000..ca97b62 ---- /dev/null -+++ b/HTML4/pp-init.sml -@@ -0,0 +1,67 @@ -+ (* pp-init.sml -+ * -+ * COPYRIGHT (c) 2003 The SML/NJ Fellowship -+ * -+ * An implementation of SML/NJ's PP interface. -+ * - This is an (almost) literal copy of the original code in -+ * smlnj-lib/PP/examples/old-pp.sml -+ *) -+ -+ -+signature PRETTYPRINT = -+sig -+ include PP_STREAM -+ val with_pp : device -> (stream -> unit) -> unit -+ val pp_to_string : int -> (stream -> 'a -> unit) -> 'a -> string -+end -+ -+structure PrettyPrint : PRETTYPRINT = -+struct -+ -+ type ppconsumer = { -+ consumer : string -> unit, -+ linewidth : int, -+ flush : unit -> unit -+ } -+ -+ structure Dev = -+ struct -+ type device = ppconsumer -+ type style = unit -+ fun sameStyle _ = true -+ fun pushStyle _ = () -+ fun popStyle _ = () -+ fun defaultStyle _ = () -+ fun depth _ = NONE -+ fun lineWidth {consumer, linewidth, flush} = SOME linewidth -+ fun textWidth _ = NONE -+ fun space ({consumer, linewidth, flush}, n) = -+ consumer (StringCvt.padLeft #" " n "") -+ fun newline {consumer, linewidth, flush} = consumer "\n" -+ fun string ({consumer, linewidth, flush}, s) = consumer s -+ fun char ({consumer, linewidth, flush}, c) = consumer(str c) -+ fun flush {consumer, linewidth, flush} = flush() -+ end -+ -+ structure PP = PPStreamFn -+ (structure Token = StringToken -+ structure Device = Dev) -+ -+ open PP -+ -+ fun with_pp device (f: PP.stream -> unit) = -+ let val ppstrm = PP.openStream device -+ in f ppstrm; -+ PP.closeStream ppstrm -+ end -+ -+ fun pp_to_string wid ppFn obj = -+ let val l = ref ([] : string list) -+ fun attach s = l := s :: !l -+ val device = {consumer = attach, linewidth = wid, flush = fn()=>()} -+ in with_pp device -+ (fn ppStrm => ppFn ppStrm obj); -+ String.concat(List.rev(!l)) -+ end -+ -+end (* structure PrettyPrint *) -diff --git a/HashCons/hash-cons-lib.mlb b/HashCons/hash-cons-lib.mlb -new file mode 100644 -index 0000000..2364e93 ---- /dev/null -+++ b/HashCons/hash-cons-lib.mlb -@@ -0,0 +1,144 @@ -+ -+ann -+ "nonexhaustiveMatch warn" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" -+in -+ -+local -+ basis l8 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb -+ end -+ basis l4 = -+ bas -+ (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l4 -+ in -+ structure gs_0 = PrimeSizes -+ end -+ local -+ open l8 -+ in -+ structure gs_1 = Array -+ end -+ local -+ open l8 -+ in -+ structure gs_2 = Word -+ end -+ local -+ open l8 -+ in -+ structure gs_3 = List -+ end -+ local -+ hash-cons-sig.sml -+ in -+ signature gs_4 = HASH_CONS -+ end -+ local -+ structure Array = gs_1 -+ signature HASH_CONS = gs_4 -+ structure List = gs_3 -+ structure PrimeSizes = gs_0 -+ structure Word = gs_2 -+ hash-cons.sml -+ in -+ structure gs_5 = HashCons -+ end -+ local -+ structure HashCons = gs_5 -+ hash-cons-set-sig.sml -+ in -+ signature gs_6 = HASH_CONS_SET -+ end -+ local -+ structure HashCons = gs_5 -+ hash-cons-map-sig.sml -+ in -+ signature gs_7 = HASH_CONS_MAP -+ end -+ local -+ open l4 -+ in -+ structure gs_8 = WordRedBlackMap -+ end -+ local -+ signature HASH_CONS_SET = gs_6 -+ structure HashCons = gs_5 -+ structure List = gs_3 -+ structure WordRedBlackMap = gs_8 -+ hash-cons-set.sml -+ in -+ structure gs_9 = HashConsSet -+ end -+ local -+ open l8 -+ in -+ structure gs_10 = Option -+ end -+ local -+ signature HASH_CONS_MAP = gs_7 -+ structure HashCons = gs_5 -+ structure Option = gs_10 -+ structure WordRedBlackMap = gs_8 -+ hash-cons-map.sml -+ in -+ structure gs_11 = HashConsMap -+ end -+ local -+ open l4 -+ in -+ structure gs_12 = HashString -+ end -+ local -+ open l4 -+ in -+ signature gs_13 = HASH_KEY -+ end -+ local -+ signature HASH_KEY = gs_13 -+ structure HashCons = gs_5 -+ hash-cons-ground-fn.sml -+ in -+ functor gs_14 = HashConsGroundFn -+ end -+ local -+ functor HashConsGroundFn = gs_14 -+ structure HashString = gs_12 -+ hash-cons-string.sml -+ in -+ structure gs_15 = HashConsString -+ end -+ local -+ open l4 -+ in -+ structure gs_16 = Atom -+ end -+ local -+ structure Atom = gs_16 -+ functor HashConsGroundFn = gs_14 -+ hash-cons-atom.sml -+ in -+ structure gs_17 = HashConsAtom -+ end -+in -+ signature HASH_CONS = gs_4 -+ signature HASH_CONS_MAP = gs_7 -+ signature HASH_CONS_SET = gs_6 -+ structure HashCons = gs_5 -+ structure HashConsAtom = gs_17 -+ functor HashConsGroundFn = gs_14 -+ structure HashConsMap = gs_11 -+ structure HashConsSet = gs_9 -+ structure HashConsString = gs_15 -+end -+end -+ -+end -diff --git a/INet/inet-lib.mlb b/INet/inet-lib.mlb -new file mode 100644 -index 0000000..ad7f940 ---- /dev/null -+++ b/INet/inet-lib.mlb -@@ -0,0 +1,144 @@ -+ -+ann -+ "nonexhaustiveMatch warn" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" -+in -+ -+local -+ basis l4 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb -+ end -+ basis l31 = -+ bas -+ (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l4 -+ in -+ structure gs_0 = StringCvt -+ end -+ local -+ open l4 -+ in -+ structure gs_1 = Word8Array -+ end -+ local -+ open l4 -+ in -+ structure gs_2 = Word8Vector -+ end -+ local -+ open l4 -+ in -+ structure gs_3 = NetHostDB -+ end -+ local -+ open l4 -+ in -+ structure gs_4 = Socket -+ end -+ local -+ open l4 -+ in -+ structure gs_5 = INetSock -+ end -+ local -+ structure INetSock = gs_5 -+ structure NetHostDB = gs_3 -+ structure Socket = gs_4 -+ structure StringCvt = gs_0 -+ structure Word8Array = gs_1 -+ structure Word8Vector = gs_2 -+ sock-util-sig.sml -+ in -+ signature gs_6 = SOCK_UTIL -+ end -+ local -+ open l4 -+ in -+ structure gs_7 = UnixSock -+ end -+ local -+ open l31 -+ in -+ structure gs_8 = ParserComb -+ end -+ local -+ open l4 -+ in -+ structure gs_9 = Char -+ end -+ local -+ open l4 -+ in -+ structure gs_10 = Word8VectorSlice -+ end -+ local -+ open l4 -+ in -+ structure gs_11 = Word8ArraySlice -+ end -+ local -+ open l4 -+ in -+ structure gs_12 = NetServDB -+ end -+ local -+ open l4 -+ in -+ structure gs_13 = Byte -+ end -+ local -+ open l4 -+ in -+ structure gs_14 = Int -+ end -+ local -+ open l4 -+ in -+ structure gs_15 = OS -+ end -+ local -+ structure Byte = gs_13 -+ structure Char = gs_9 -+ structure INetSock = gs_5 -+ structure Int = gs_14 -+ structure NetHostDB = gs_3 -+ structure NetServDB = gs_12 -+ structure OS = gs_15 -+ structure ParserComb = gs_8 -+ signature SOCK_UTIL = gs_6 -+ structure Socket = gs_4 -+ structure StringCvt = gs_0 -+ structure Word8Array = gs_1 -+ structure Word8ArraySlice = gs_11 -+ structure Word8Vector = gs_2 -+ structure Word8VectorSlice = gs_10 -+ sock-util.sml -+ in -+ structure gs_16 = SockUtil -+ end -+ local -+ signature SOCK_UTIL = gs_6 -+ structure SockUtil = gs_16 -+ structure Socket = gs_4 -+ structure UnixSock = gs_7 -+ unix-sock-util.sml -+ in -+ signature gs_17 = UNIX_SOCK_UTIL -+ structure gs_18 = UnixSockUtil -+ end -+in -+ signature SOCK_UTIL = gs_6 -+ structure SockUtil = gs_16 -+ signature UNIX_SOCK_UTIL = gs_17 -+ structure UnixSockUtil = gs_18 -+end -+end -+ -+end -diff --git a/JSON/json-lib.mlb b/JSON/json-lib.mlb -index 477d0bf..d2650b6 100644 ---- a/JSON/json-lib.mlb -+++ b/JSON/json-lib.mlb -@@ -1,47 +1,176 @@ --(* json-lib.mlb -- * -- * COPYRIGHT (c) 2008 The Fellowship of SML/NJ (http://www.smlnj.org) -- * All rights reserved. -- * -- * An MLB file for the JSON library, so that it can be used by MLton programs. -- * -- * TODO: -- * This is not complete, since MLton does not have the ml-lpt-lib yet. -- *) -- --local -- -- $(SML_LIB)/basis/basis.mlb -- $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb --(* I don't know what the path to this library will be -- ??/ml-lpt-lib/ml-lpt-lib.mlb --*) -- -- ann -- "nonexhaustiveMatch warn" "redundantMatch warn" -- "sequenceNonUnit ignore" -- "warnUnused false" "forceUsed" -- in -- -- json-tokens.sml -- json.lex.sml -- json.sml -- json-stream-parser.sml -- json-parser.sml -- json-stream-printer.sml -- json-printer.sml -- -- end - -+ann -+ "nonexhaustiveMatch ignore" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" - in - --(* DOM-style API (tree based) *) -- structure JSON -- structure JSONParser -- structure JSONPrinter -- --(* SAX-style API (event based) *) -- structure JSONStreamParser -- structure JSONStreamPrinter -+local -+ basis l4 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb -+ end -+ basis l65 = -+ bas -+ (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb -+ end -+ basis l8 = -+ bas -+ (* $/ml-lpt-lib.cm ====> *) $(SML_LIB)/mllpt-lib/mllpt-lib.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l4 -+ in -+ structure gs_0 = IntInf -+ end -+ local -+ open l8 -+ in -+ structure gs_1 = AntlrStreamPos -+ end -+ local -+ open l4 -+ in -+ structure gs_2 = TextIO -+ end -+ local -+ open l4 -+ in -+ structure gs_3 = String -+ end -+ local -+ open l8 -+ in -+ structure gs_4 = UTF8 -+ end -+ local -+ open l4 -+ in -+ structure gs_5 = Real -+ end -+ local -+ open l4 -+ in -+ structure gs_6 = List -+ end -+ local -+ structure IntInf = gs_0 -+ structure List = gs_6 -+ structure Real = gs_5 -+ structure String = gs_3 -+ structure UTF8 = gs_4 -+ json-tokens.sml -+ in -+ structure gs_7 = JSONTokens -+ end -+ local -+ open l4 -+ in -+ structure gs_8 = StringCvt -+ end -+ local -+ open l4 -+ in -+ structure gs_9 = LargeReal -+ end -+ local -+ open l4 -+ in -+ structure gs_10 = Substring -+ end -+ local -+ open l4 -+ in -+ structure gs_11 = Vector -+ end -+ local -+ open l8 -+ in -+ structure gs_12 = ULexBuffer -+ end -+ local -+ open l4 -+ in -+ structure gs_13 = Word -+ end -+ local -+ structure AntlrStreamPos = gs_1 -+ structure IntInf = gs_0 -+ structure JSONTokens = gs_7 -+ structure LargeReal = gs_9 -+ structure List = gs_6 -+ structure String = gs_3 -+ structure StringCvt = gs_8 -+ structure Substring = gs_10 -+ structure TextIO = gs_2 -+ structure ULexBuffer = gs_12 -+ structure UTF8 = gs_4 -+ structure Vector = gs_11 -+ structure Word = gs_13 -+ json.lex.sml -+ in -+ structure gs_14 = JSONLexer -+ end -+ local -+ structure AntlrStreamPos = gs_1 -+ structure IntInf = gs_0 -+ structure JSONLexer = gs_14 -+ structure JSONTokens = gs_7 -+ structure TextIO = gs_2 -+ json-stream-parser.sml -+ in -+ structure gs_15 = JSONStreamParser -+ end -+ local -+ structure IntInf = gs_0 -+ json.sml -+ in -+ structure gs_16 = JSON -+ end -+ local -+ structure AntlrStreamPos = gs_1 -+ structure JSON = gs_16 -+ structure JSONLexer = gs_14 -+ structure JSONTokens = gs_7 -+ structure List = gs_6 -+ structure TextIO = gs_2 -+ json-parser.sml -+ in -+ structure gs_17 = JSONParser -+ end -+ local -+ open l65 -+ in -+ structure gs_18 = Format -+ end -+ local -+ structure Format = gs_18 -+ structure IntInf = gs_0 -+ structure String = gs_3 -+ structure TextIO = gs_2 -+ json-stream-printer.sml -+ in -+ structure gs_19 = JSONStreamPrinter -+ end -+ local -+ structure JSON = gs_16 -+ structure JSONStreamPrinter = gs_19 -+ structure List = gs_6 -+ structure TextIO = gs_2 -+ json-printer.sml -+ in -+ structure gs_20 = JSONPrinter -+ end -+in -+ structure JSON = gs_16 -+ structure JSONParser = gs_17 -+ structure JSONPrinter = gs_20 -+ structure JSONStreamParser = gs_15 -+ structure JSONStreamPrinter = gs_19 -+end -+end - - end -diff --git a/JSON/json.lex.sml b/JSON/json.lex.sml -index 87e5f17..0e85457 100644 ---- a/JSON/json.lex.sml -+++ b/JSON/json.lex.sml -@@ -70,7 +70,7 @@ Vector.fromList [] - (* start position of token -- can be updated via skip() *) - val yystartPos = ref (yygetPos()) - (* get one char of input *) -- fun yygetc strm = (case UTF8.getu ULexBuffer.getc strm -+ fun yygetc strm = (case ULexBuffer.getu strm - of (SOME (0w10, s')) => - (AntlrStreamPos.markNewLine yysm (ULexBuffer.getpos strm); - SOME (0w10, s')) -diff --git a/PP/pp-lib.mlb b/PP/pp-lib.mlb -new file mode 100644 -index 0000000..5961278 ---- /dev/null -+++ b/PP/pp-lib.mlb -@@ -0,0 +1,212 @@ -+ -+ann -+ "nonexhaustiveMatch warn" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" -+in -+ -+local -+ basis l4 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb -+ end -+ basis l26 = -+ bas -+ (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb -+ end -+ basis l83 = -+ bas -+ (* $/html-lib.cm ====> *) $(SML_LIB)/smlnj-lib/HTML/html-lib.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l4 -+ in -+ structure gs_0 = TextIO -+ end -+ local -+ src/pp-stream-sig.sml -+ in -+ signature gs_1 = PP_STREAM -+ end -+ local -+ signature PP_STREAM = gs_1 -+ structure TextIO = gs_0 -+ src/pp-debug-fn.sml -+ in -+ functor gs_2 = PPDebugFn -+ end -+ local -+ src/pp-device-sig.sml -+ in -+ signature gs_3 = PP_DEVICE -+ end -+ local -+ open l4 -+ in -+ structure gs_4 = StringCvt -+ end -+ local -+ signature PP_DEVICE = gs_3 -+ structure StringCvt = gs_4 -+ structure TextIO = gs_0 -+ devices/simple-textio-dev.sml -+ in -+ structure gs_5 = SimpleTextIODev -+ end -+ local -+ open l26 -+ in -+ structure gs_6 = Format -+ end -+ local -+ open l26 -+ in -+ structure gs_7 = Queue -+ end -+ local -+ open l26 -+ in -+ structure gs_8 = ListFormat -+ end -+ local -+ open l4 -+ in -+ structure gs_9 = String -+ end -+ local -+ open l4 -+ in -+ structure gs_10 = Option -+ end -+ local -+ open l4 -+ in -+ structure gs_11 = Int -+ end -+ local -+ src/pp-token-sig.sml -+ in -+ signature gs_12 = PP_TOKEN -+ end -+ local -+ structure Format = gs_6 -+ structure Int = gs_11 -+ structure ListFormat = gs_8 -+ structure Option = gs_10 -+ signature PP_DEVICE = gs_3 -+ signature PP_STREAM = gs_1 -+ signature PP_TOKEN = gs_12 -+ structure Queue = gs_7 -+ structure String = gs_9 -+ structure TextIO = gs_0 -+ src/pp-stream-fn.sml -+ in -+ functor gs_13 = PPStreamFn -+ end -+ local -+ signature PP_STREAM = gs_1 -+ src/pp-desc-sig.sml -+ in -+ signature gs_14 = PP_DESC -+ end -+ local -+ signature PP_DESC = gs_14 -+ signature PP_STREAM = gs_1 -+ src/pp-desc-fn.sml -+ in -+ functor gs_15 = PPDescFn -+ end -+ local -+ signature PP_TOKEN = gs_12 -+ structure String = gs_9 -+ devices/string-token.sml -+ in -+ structure gs_16 = StringToken -+ end -+ local -+ functor PPStreamFn = gs_13 -+ signature PP_STREAM = gs_1 -+ structure SimpleTextIODev = gs_5 -+ structure StringToken = gs_16 -+ structure TextIO = gs_0 -+ devices/textio-pp.sml -+ in -+ structure gs_17 = TextIOPP -+ end -+ local -+ open l26 -+ in -+ structure gs_18 = ANSITerm -+ end -+ local -+ open l4 -+ in -+ structure gs_19 = TextPrimIO -+ end -+ local -+ open l4 -+ in -+ structure gs_20 = OS -+ end -+ local -+ structure ANSITerm = gs_18 -+ structure OS = gs_20 -+ signature PP_DEVICE = gs_3 -+ structure StringCvt = gs_4 -+ structure TextIO = gs_0 -+ structure TextPrimIO = gs_19 -+ devices/ansi-term-dev.sml -+ in -+ structure gs_21 = ANSITermDev -+ end -+ local -+ open l4 -+ in -+ structure gs_22 = List -+ end -+ local -+ open l83 -+ in -+ structure gs_23 = HTML -+ end -+ local -+ structure HTML = gs_23 -+ structure List = gs_22 -+ signature PP_DEVICE = gs_3 -+ structure String = gs_9 -+ devices/html-dev.sml -+ in -+ structure gs_24 = HTMLDev -+ end -+ local -+ structure ANSITermDev = gs_21 -+ functor PPStreamFn = gs_13 -+ signature PP_STREAM = gs_1 -+ signature PP_TOKEN = gs_12 -+ structure String = gs_9 -+ structure TextIO = gs_0 -+ devices/ansi-term-pp.sml -+ in -+ structure gs_25 = ANSITermPP -+ end -+in -+ structure ANSITermDev = gs_21 -+ structure ANSITermPP = gs_25 -+ structure HTMLDev = gs_24 -+ functor PPDebugFn = gs_2 -+ functor PPDescFn = gs_15 -+ functor PPStreamFn = gs_13 -+ signature PP_DESC = gs_14 -+ signature PP_DEVICE = gs_3 -+ signature PP_STREAM = gs_1 -+ signature PP_TOKEN = gs_12 -+ structure SimpleTextIODev = gs_5 -+ structure StringToken = gs_16 -+ structure TextIOPP = gs_17 -+end -+end -+ -+end -diff --git a/README.mlton b/README.mlton -new file mode 100644 -index 0000000..befffe1 ---- /dev/null -+++ b/README.mlton -@@ -0,0 +1,27 @@ -+The following changes were made to the SML/NJ Library, in addition to -+deriving the `.mlb` files from the `.cm` files: -+ -+* `HTML/html-attrs-fn.sml` (modified): Rewrote use of or-patterns. -+* `HTML/html-elements-fn.sml` (modified): Rewrote use of or-patterns. -+* `HTML4/pp-init.sml` (added): Implements `structure PrettyPrint` using the SML/NJ PP Library. This implementation is taken from the SML/NJ compiler source, since the SML/NJ HTML4 Library used the `structure PrettyPrint` provided by the SML/NJ compiler itself. -+* `Util/base64.sml` (modified): Rewrote use of `Unsafe.CharVector.create` and `Unsafe.CharVector.update`; MLton assumes that vectors are immutable. -+* `Util/bit-array.sml` (modified): The computation of the `maxLen` is given by: -++ -+[source,sml] -+---- -+val maxLen = 8*Word8Array.maxLen -+---- -++ -+This is fine in SML/NJ where `Word8Array.maxLen` is 16777215, but in MLton, `Word8Array.maxLen` is equal to `valOf(Int.maxInt)`, so the computation overflows. To accommodate both SML/NJ and MLton, the computation is replaced by -++ -+[source,sml] -+---- -+val maxLen = (8*Word8Array.maxLen) handle Overflow => Word8Array.maxLen -+---- -+ -+* `Util/engine.mlton.sml` (added, not exported): Implements `structure Engine`, providing time-limited, resumable computations using <:MLtonThread:>, <:MLtonSignal:>, and <:MLtonItimer:>. -+* `Util/graph-scc-fn.sml` (modified): Rewrote use of `where` structure specification. -+* `Util/redblack-map-fn.sml` (modified): Rewrote use of `where` structure specification. -+* `Util/redblack-set-fn.sml` (modified): Rewrote use of `where` structure specification. -+* `Util/time-limit.mlb` (added): Exports `structure TimeLimit`, which is _not_ exported by `smlnj-lib.mlb`. Since MLton is very conservative in the presence of threads and signals, program performance may be adversely affected by unnecessarily including `structure TimeLimit`. -+* `Util/time-limit.mlton.sml` (added): Implements `structure TimeLimit` using `structure Engine`. The SML/NJ implementation of `structure TimeLimit` uses SML/NJ's first-class continuations, signals, and interval timer. -diff --git a/Reactive/reactive-lib.mlb b/Reactive/reactive-lib.mlb -new file mode 100644 -index 0000000..3f13994 ---- /dev/null -+++ b/Reactive/reactive-lib.mlb -@@ -0,0 +1,71 @@ -+ -+ann -+ "nonexhaustiveMatch warn" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" -+in -+ -+local -+ basis l14 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb -+ end -+ basis l4 = -+ bas -+ (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l4 -+ in -+ structure gs_0 = Atom -+ end -+ local -+ structure Atom = gs_0 -+ reactive-sig.sml -+ in -+ signature gs_1 = REACTIVE -+ end -+ local -+ open l4 -+ in -+ structure gs_2 = AtomBinaryMap -+ end -+ local -+ open l14 -+ in -+ structure gs_3 = List -+ end -+ local -+ structure Atom = gs_0 -+ instruction.sml -+ in -+ structure gs_4 = Instruction -+ end -+ local -+ structure Atom = gs_0 -+ structure Instruction = gs_4 -+ structure List = gs_3 -+ machine.sml -+ in -+ structure gs_5 = Machine -+ end -+ local -+ structure AtomBinaryMap = gs_2 -+ structure Instruction = gs_4 -+ structure List = gs_3 -+ structure Machine = gs_5 -+ signature REACTIVE = gs_1 -+ reactive.sml -+ in -+ structure gs_6 = Reactive -+ end -+in -+ signature REACTIVE = gs_1 -+ structure Reactive = gs_6 -+end -+end -+ -+end -diff --git a/RegExp/regexp-lib.mlb b/RegExp/regexp-lib.mlb -new file mode 100644 -index 0000000..0dae724 ---- /dev/null -+++ b/RegExp/regexp-lib.mlb -@@ -0,0 +1,235 @@ -+ -+ann -+ "nonexhaustiveMatch ignore" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" -+in -+ -+local -+ basis l4 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb -+ end -+ basis l16 = -+ bas -+ (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l4 -+ in -+ structure gs_0 = StringCvt -+ end -+ local -+ open l4 -+ in -+ structure gs_1 = List -+ end -+ local -+ structure List = gs_1 -+ Glue/match-tree.sml -+ in -+ signature gs_2 = MATCH_TREE -+ structure gs_3 = MatchTree -+ end -+ local -+ open l16 -+ in -+ functor gs_4 = ListSetFn -+ end -+ local -+ open l4 -+ in -+ structure gs_5 = Char -+ end -+ local -+ open l16 -+ in -+ signature gs_6 = ORD_SET -+ end -+ local -+ signature ORD_SET = gs_6 -+ FrontEnd/syntax-sig.sml -+ in -+ signature gs_7 = REGEXP_SYNTAX -+ end -+ local -+ structure Char = gs_5 -+ structure List = gs_1 -+ functor ListSetFn = gs_4 -+ signature REGEXP_SYNTAX = gs_7 -+ FrontEnd/syntax.sml -+ in -+ structure gs_8 = RegExpSyntax -+ end -+ local -+ signature MATCH_TREE = gs_2 -+ structure MatchTree = gs_3 -+ structure RegExpSyntax = gs_8 -+ structure StringCvt = gs_0 -+ BackEnd/engine-sig.sml -+ in -+ signature gs_9 = REGEXP_ENGINE -+ end -+ local -+ open l4 -+ in -+ structure gs_10 = Array -+ end -+ local -+ open l4 -+ in -+ structure gs_11 = Vector -+ end -+ local -+ open l4 -+ in -+ structure gs_12 = Int -+ end -+ local -+ structure Array = gs_10 -+ structure Char = gs_5 -+ structure Int = gs_12 -+ structure List = gs_1 -+ signature MATCH_TREE = gs_2 -+ structure MatchTree = gs_3 -+ signature REGEXP_ENGINE = gs_9 -+ structure RegExpSyntax = gs_8 -+ structure StringCvt = gs_0 -+ structure Vector = gs_11 -+ BackEnd/thompson-engine.sml -+ in -+ structure gs_13 = ThompsonEngine -+ end -+ local -+ open l16 -+ in -+ functor gs_14 = ListMapFn -+ end -+ local -+ open l4 -+ in -+ structure gs_15 = Array2 -+ end -+ local -+ open l4 -+ in -+ structure gs_16 = TextIO -+ end -+ local -+ open l4 -+ in -+ structure gs_17 = ListPair -+ end -+ local -+ structure Array = gs_10 -+ structure Array2 = gs_15 -+ structure Char = gs_5 -+ structure Int = gs_12 -+ structure List = gs_1 -+ functor ListMapFn = gs_14 -+ structure ListPair = gs_17 -+ functor ListSetFn = gs_4 -+ signature ORD_SET = gs_6 -+ structure RegExpSyntax = gs_8 -+ structure TextIO = gs_16 -+ BackEnd/fsm.sml -+ in -+ signature gs_18 = DFA -+ structure gs_19 = Dfa -+ signature gs_20 = NFA -+ structure gs_21 = Nfa -+ end -+ local -+ signature DFA = gs_18 -+ structure Dfa = gs_19 -+ signature MATCH_TREE = gs_2 -+ structure MatchTree = gs_3 -+ signature NFA = gs_20 -+ structure Nfa = gs_21 -+ signature REGEXP_ENGINE = gs_9 -+ structure RegExpSyntax = gs_8 -+ structure Vector = gs_11 -+ BackEnd/dfa-engine.sml -+ in -+ structure gs_22 = DfaEngine -+ end -+ local -+ signature MATCH_TREE = gs_2 -+ structure MatchTree = gs_3 -+ structure StringCvt = gs_0 -+ Glue/regexp-sig.sml -+ in -+ signature gs_23 = REGEXP -+ end -+ local -+ structure RegExpSyntax = gs_8 -+ structure StringCvt = gs_0 -+ FrontEnd/parser-sig.sml -+ in -+ signature gs_24 = REGEXP_PARSER -+ end -+ local -+ signature MATCH_TREE = gs_2 -+ structure MatchTree = gs_3 -+ signature REGEXP = gs_23 -+ signature REGEXP_ENGINE = gs_9 -+ signature REGEXP_PARSER = gs_24 -+ structure RegExpSyntax = gs_8 -+ structure StringCvt = gs_0 -+ Glue/regexp-fn.sml -+ in -+ functor gs_25 = RegExpFn -+ end -+ local -+ open l4 -+ in -+ structure gs_26 = Word8 -+ end -+ local -+ structure Char = gs_5 -+ structure Int = gs_12 -+ structure List = gs_1 -+ signature REGEXP_PARSER = gs_24 -+ structure RegExpSyntax = gs_8 -+ structure StringCvt = gs_0 -+ structure Word8 = gs_26 -+ FrontEnd/awk-syntax.sml -+ in -+ structure gs_27 = AwkSyntax -+ end -+ local -+ open l4 -+ in -+ structure gs_28 = Option -+ end -+ local -+ structure List = gs_1 -+ signature MATCH_TREE = gs_2 -+ structure MatchTree = gs_3 -+ structure Option = gs_28 -+ signature REGEXP_ENGINE = gs_9 -+ structure RegExpSyntax = gs_8 -+ BackEnd/bt-engine.sml -+ in -+ structure gs_29 = BackTrackEngine -+ end -+in -+ structure AwkSyntax = gs_27 -+ structure BackTrackEngine = gs_29 -+ structure DfaEngine = gs_22 -+ signature MATCH_TREE = gs_2 -+ structure MatchTree = gs_3 -+ signature REGEXP = gs_23 -+ signature REGEXP_ENGINE = gs_9 -+ signature REGEXP_PARSER = gs_24 -+ signature REGEXP_SYNTAX = gs_7 -+ functor RegExpFn = gs_25 -+ structure RegExpSyntax = gs_8 -+ structure ThompsonEngine = gs_13 -+end -+end -+ -+end -diff --git a/SExp/sexp-lib.mlb b/SExp/sexp-lib.mlb -index d7287e5..b56607e 100644 ---- a/SExp/sexp-lib.mlb -+++ b/SExp/sexp-lib.mlb -@@ -1,51 +1,171 @@ --(* sexp-lib.mlb -- * -- * COPYRIGHT (c) 2011 The Fellowship of SML/NJ (http://www.smlnj.org) -- * All rights reserved. -- * -- * Author: Damon Wang (with modifications by John Reppy) -- * -- * An MLB file for the JSON library, so that it can be used by MLton programs. -- * -- * TODO: -- * This is not complete, since MLton does not have the ml-lpt-lib yet. -- *) -- --local -- -- $(SML_LIB)/basis/basis.mlb -- $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb --(* I don't know what the path to this library will be -- ??/ml-lpt-lib/ml-lpt-lib.mlb --*) -- -- ann -- "nonexhaustiveMatch warn" "redundantMatch warn" -- "sequenceNonUnit ignore" -- "warnUnused false" "forceUsed" -- in -- -- sexp-tokens.sml -- sexp.lex.sml -- sexp.sml --(* sexp-stream-parser.sml *) -- sexp-parser.sml --(* sexp-stream-printer.sml *) -- sexp-printer.sml -- -- end - -+ann -+ "nonexhaustiveMatch ignore" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" - in - --(* DOM-style API (tree based) *) -- structure SExp -- structure SExpParser -- structure SExpPrinter -- --(* SAX-style API (event based) *) --(* -- structure SExpStreamParser -- structure SExpStreamPrinter --*) -+local -+ basis l8 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb -+ end -+ basis l4 = -+ bas -+ (* $/smlnj-lib.cm ====> *) $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb -+ end -+ basis l38 = -+ bas -+ (* $/ml-lpt-lib.cm ====> *) $(SML_LIB)/mllpt-lib/mllpt-lib.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l4 -+ in -+ structure gs_0 = Format -+ end -+ local -+ open l8 -+ in -+ structure gs_1 = TextIO -+ end -+ local -+ open l8 -+ in -+ structure gs_2 = String -+ end -+ local -+ open l8 -+ in -+ structure gs_3 = List -+ end -+ local -+ open l4 -+ in -+ structure gs_4 = Atom -+ end -+ local -+ open l8 -+ in -+ structure gs_5 = IntInf -+ end -+ local -+ open l8 -+ in -+ structure gs_6 = ListPair -+ end -+ local -+ open l8 -+ in -+ structure gs_7 = Real -+ end -+ local -+ structure Atom = gs_4 -+ structure IntInf = gs_5 -+ structure ListPair = gs_6 -+ structure Real = gs_7 -+ sexp.sml -+ in -+ structure gs_8 = SExp -+ end -+ local -+ structure Atom = gs_4 -+ structure Format = gs_0 -+ structure List = gs_3 -+ structure SExp = gs_8 -+ structure String = gs_2 -+ structure TextIO = gs_1 -+ sexp-printer.sml -+ in -+ structure gs_9 = SExpPrinter -+ end -+ local -+ open l38 -+ in -+ structure gs_10 = AntlrStreamPos -+ end -+ local -+ open l38 -+ in -+ structure gs_11 = UTF8 -+ end -+ local -+ structure IntInf = gs_5 -+ structure List = gs_3 -+ structure Real = gs_7 -+ structure String = gs_2 -+ structure UTF8 = gs_11 -+ sexp-tokens.sml -+ in -+ structure gs_12 = SExpTokens -+ end -+ local -+ open l8 -+ in -+ structure gs_13 = StringCvt -+ end -+ local -+ open l8 -+ in -+ structure gs_14 = LargeReal -+ end -+ local -+ open l8 -+ in -+ structure gs_15 = Substring -+ end -+ local -+ open l8 -+ in -+ structure gs_16 = Vector -+ end -+ local -+ open l38 -+ in -+ structure gs_17 = ULexBuffer -+ end -+ local -+ open l8 -+ in -+ structure gs_18 = Word -+ end -+ local -+ structure AntlrStreamPos = gs_10 -+ structure IntInf = gs_5 -+ structure LargeReal = gs_14 -+ structure List = gs_3 -+ structure SExpTokens = gs_12 -+ structure String = gs_2 -+ structure StringCvt = gs_13 -+ structure Substring = gs_15 -+ structure TextIO = gs_1 -+ structure ULexBuffer = gs_17 -+ structure UTF8 = gs_11 -+ structure Vector = gs_16 -+ structure Word = gs_18 -+ sexp.lex.sml -+ in -+ structure gs_19 = SExpLexer -+ end -+ local -+ structure AntlrStreamPos = gs_10 -+ structure Atom = gs_4 -+ structure List = gs_3 -+ structure SExp = gs_8 -+ structure SExpLexer = gs_19 -+ structure SExpTokens = gs_12 -+ structure TextIO = gs_1 -+ sexp-parser.sml -+ in -+ structure gs_20 = SExpParser -+ end -+in -+ structure SExp = gs_8 -+ structure SExpParser = gs_20 -+ structure SExpPrinter = gs_9 -+end -+end - - end -diff --git a/SExp/sexp.lex.sml b/SExp/sexp.lex.sml -index 995ae5e..623beb8 100644 ---- a/SExp/sexp.lex.sml -+++ b/SExp/sexp.lex.sml -@@ -70,7 +70,7 @@ Vector.fromList [] - (* start position of token -- can be updated via skip() *) - val yystartPos = ref (yygetPos()) - (* get one char of input *) -- fun yygetc strm = (case UTF8.getu ULexBuffer.getc strm -+ fun yygetc strm = (case ULexBuffer.getu strm - of (SOME (0w10, s')) => - (AntlrStreamPos.markNewLine yysm (ULexBuffer.getpos strm); - SOME (0w10, s')) -diff --git a/Unix/unix-lib.mlb b/Unix/unix-lib.mlb -new file mode 100644 -index 0000000..ebceb6d ---- /dev/null -+++ b/Unix/unix-lib.mlb -@@ -0,0 +1,45 @@ -+ -+ann -+ "nonexhaustiveMatch warn" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" -+in -+ -+local -+ basis l4 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l4 -+ in -+ structure gs_0 = Substring -+ end -+ local -+ open l4 -+ in -+ structure gs_1 = Posix -+ end -+ local -+ unix-env-sig.sml -+ in -+ signature gs_2 = UNIX_ENV -+ end -+ local -+ structure Posix = gs_1 -+ structure Substring = gs_0 -+ signature UNIX_ENV = gs_2 -+ unix-env.sml -+ in -+ structure gs_3 = UnixEnv -+ end -+in -+ signature UNIX_ENV = gs_2 -+ structure UnixEnv = gs_3 -+end -+end -+ -+end -diff --git a/Util/base64.sml b/Util/base64.sml -index 2432737..8e989c8 100644 ---- a/Util/base64.sml -+++ b/Util/base64.sml -@@ -11,9 +11,11 @@ - structure Base64 : BASE64 = - struct - -+ structure CA = CharArray - structure W8 = Word8 - structure W8V = Word8Vector - structure W8A = Word8Array -+ structure UCA = Unsafe.CharArray - structure UCV = Unsafe.CharVector - structure UW8V = Unsafe.Word8Vector - -@@ -59,16 +61,16 @@ structure Base64 : BASE64 = - local - fun encode64 (vec, start, len) = let - val outLen = 4 * Int.quot(len + 2, 3) -- val outBuf = Unsafe.CharVector.create outLen -+ val outBuf = UCA.create outLen - val nTriples = Int.quot(len, 3) - val extra = Int.rem(len, 3) - fun insBuf (i, (c1, c2, c3, c4)) = let - val idx = 4*i - in -- UCV.update(outBuf, idx, c1); -- UCV.update(outBuf, idx+1, c2); -- UCV.update(outBuf, idx+2, c3); -- UCV.update(outBuf, idx+3, c4) -+ UCA.update(outBuf, idx, c1); -+ UCA.update(outBuf, idx+1, c2); -+ UCA.update(outBuf, idx+2, c3); -+ UCA.update(outBuf, idx+3, c4) - end - fun loop (i, idx) = if (i < nTriples) - then ( -@@ -81,7 +83,7 @@ structure Base64 : BASE64 = - (* end case *)) - in - loop (0, start); -- outBuf -+ CA.vector outBuf - end - in - -diff --git a/Util/bit-array.sml b/Util/bit-array.sml -index 8d962d8..01ee183 100644 ---- a/Util/bit-array.sml -+++ b/Util/bit-array.sml -@@ -47,7 +47,9 @@ structure BitArray :> BIT_ARRAY = - * We maintain the invariant that all bits >= nbits are 0. - *) - type elem = bool -- val maxLen = 8*Word8Array.maxLen -+ val maxLen = (8*Word8Array.maxLen) -+ handle Overflow => Word8Array.maxLen -+ - datatype vector = BA of {nbits : int, bits : W8A.array} - - fun array (0,init) = BA{nbits=0,bits=W8A.array(0,0w0)} -diff --git a/Util/engine.mlton.sml b/Util/engine.mlton.sml -new file mode 100644 -index 0000000..deb0c42 ---- /dev/null -+++ b/Util/engine.mlton.sml -@@ -0,0 +1,99 @@ -+(* Copyright (C) 1999-2004 Henry Cejtin, Matthew Fluet, Suresh -+ * Jagannathan, and Stephen Weeks. -+ * -+ * MLton is released under the GNU General Public License (GPL). -+ * Please see the file MLton-LICENSE for license information. -+ *) -+ -+signature ENGINE = -+ sig -+ type 'a t -+ -+ datatype 'a res = -+ Done of 'a -+ | Raise of exn -+ | TimeOut of 'a t -+ -+ val new: (unit -> 'a) -> 'a t -+ val repeat: {thunk: unit -> 'a, -+ limit: Time.time, -+ tries: int} -> 'a option -+ val run: 'a t * Time.time -> 'a res -+ val timeLimit: Time.time * (unit -> 'a) -> 'a option -+ end -+ -+structure Engine: ENGINE = -+struct -+ -+open MLton -+ -+datatype 'a t = T of {return: 'a res Thread.t option ref, -+ thread: Thread.Runnable.t} -+and 'a res = -+ Done of 'a -+ | Raise of exn -+ | TimeOut of 'a t -+ -+val which = Itimer.Real -+val signal = Itimer.signal which -+ -+fun done (return): unit = -+ (return := NONE -+ ; Itimer.set (which, {value = Time.zeroTime, -+ interval = Time.zeroTime}) -+ ; Signal.setHandler (signal, Signal.Handler.default)) -+ -+fun new (f: unit -> 'a): 'a t = -+ let -+ val return = ref NONE -+ val thread = -+ Thread.new -+ (fn () => -+ let -+ val res = Done (f ()) handle e => Raise e -+ val ret = valOf (!return) -+ val _ = done return -+ in -+ Thread.switch (fn _ => Thread.prepare (ret, res)) -+ end) -+ val thread = Thread.prepare (thread, ()) -+ in -+ T {return = return, thread = thread} -+ end -+ -+fun run (T {return, thread}, time: Time.time): 'a res = -+ Thread.switch -+ (fn cur: 'a res Thread.t => -+ let -+ val _ = return := SOME cur -+ fun handler (me: Thread.Runnable.t): Thread.Runnable.t = -+ Thread.prepare -+ (Thread.prepend (cur, fn () => (done return -+ ; TimeOut (T {return = return, -+ thread = me}))), -+ ()) -+ val _ = Signal.setHandler (signal, Signal.Handler.handler handler) -+ val _ = Itimer.set (which, {value = time, -+ interval = Time.zeroTime}) -+ in -+ thread -+ end) -+ -+fun timeLimit (t: Time.time, f: unit -> 'a): 'a option = -+ case run (new f, t) of -+ Done a => SOME a -+ | Raise e => raise e -+ | TimeOut _ => NONE -+ -+fun repeat {thunk, limit, tries} = -+ let -+ fun loop (n: int) = -+ if n <= 0 -+ then NONE -+ else (case timeLimit (limit, thunk) of -+ NONE => loop (n - 1) -+ | SOME a => SOME a) -+ in loop tries -+ end -+ -+end -diff --git a/Util/graph-scc-fn.sml b/Util/graph-scc-fn.sml -index 0dc3b32..4ae2d01 100644 ---- a/Util/graph-scc-fn.sml -+++ b/Util/graph-scc-fn.sml -@@ -8,7 +8,7 @@ - * author: Matthias Blume - *) - --functor GraphSCCFn (Nd: ORD_KEY) :> GRAPH_SCC where Nd = Nd = -+functor GraphSCCFn (Nd: ORD_KEY) :> GRAPH_SCC where type Nd.ord_key = Nd.ord_key = - struct - structure Nd = Nd - -diff --git a/Util/real-order-stats.sml b/Util/real-order-stats.sml -index 9dc231c..98edf74 100644 ---- a/Util/real-order-stats.sml -+++ b/Util/real-order-stats.sml -@@ -23,7 +23,7 @@ structure RealOrderStats : sig - - end = struct - -- infix 8 $ val op $ = Unsafe.Array.sub -+ infix 8 $$ val op $$ = Unsafe.Array.sub - infix 3 <- fun (a, i) <- x = Unsafe.Array.update (a, i, x) - - (* initialize random number generator *) -@@ -36,12 +36,12 @@ end = struct - fun x - y = Word.toIntX (Word.- (Word.fromInt x, Word.fromInt y)) - (* random partition: *) - fun rp (p, r) = -- let fun sw(i,j) = let val t=a$i in (a,i)<-a$j; (a,j)<-t end -+ let fun sw(i,j) = let val t=a$$i in (a,i)<-a$$j; (a,j)<-t end - val q = Random.randRange (p, r) rand -- val qv = a$q -- val _ = if q<>p then ((a,q)<-a$p; (a,p)<-qv) else () -- fun up i = if i>r orelse qv < a$i then i else up(i+1) -- fun dn i = if i>=p andalso qv < a$i then dn(i-1) else i -+ val qv = a$$q -+ val _ = if q<>p then ((a,q)<-a$$p; (a,p)<-qv) else () -+ fun up i = if i>r orelse qv < a$$i then i else up(i+1) -+ fun dn i = if i>=p andalso qv < a$$i then dn(i-1) else i - fun lp (i, j) = - let val (i, j) = (up i, dn j) - in if i>j then let val q' = i-1 in sw(p,q'); (q',qv) end -@@ -50,7 +50,7 @@ end = struct - in lp (p+1, r) end - (* random select: *) - fun rs (p, r) = -- if p=r then a$r -+ if p=r then a$$r - else let val (q, qv) = rp (p, r) - in if i=q then qv else if i=mid then m else l(i+1, Real.max(a$i,m)) -- in if len mod 2 = 1 then m0 else (l(p+1,a$p) + m0) / 2.0 -+ fun l(i,m) = if i>=mid then m else l(i+1, Real.max(a$$i,m)) -+ in if len mod 2 = 1 then m0 else (l(p+1,a$$p) + m0) / 2.0 - end - - fun median a = median0 (a, 0, Array.length a) -diff --git a/Util/redblack-map-fn.sml b/Util/redblack-map-fn.sml -index 5c1af51..92284dc 100644 ---- a/Util/redblack-map-fn.sml -+++ b/Util/redblack-map-fn.sml -@@ -23,7 +23,7 @@ - * its child will be a red leaf. - *) - --functor RedBlackMapFn (K : ORD_KEY) :> ORD_MAP where Key = K = -+functor RedBlackMapFn (K : ORD_KEY) :> ORD_MAP where type Key.ord_key = K.ord_key = - struct - - structure Key = K -diff --git a/Util/redblack-set-fn.sml b/Util/redblack-set-fn.sml -index acf007f..f5a1160 100644 ---- a/Util/redblack-set-fn.sml -+++ b/Util/redblack-set-fn.sml -@@ -20,7 +20,7 @@ - * its child will be a red leaf. - *) - --functor RedBlackSetFn (K : ORD_KEY) :> ORD_SET where Key = K = -+functor RedBlackSetFn (K : ORD_KEY) :> ORD_SET where type Key.ord_key = K.ord_key = - struct - - structure Key = K -diff --git a/Util/smlnj-lib.mlb b/Util/smlnj-lib.mlb -new file mode 100644 -index 0000000..a6e9873 ---- /dev/null -+++ b/Util/smlnj-lib.mlb -@@ -0,0 +1,1166 @@ -+ -+ann -+ "nonexhaustiveMatch warn" "redundantMatch warn" -+ "sequenceNonUnit ignore" -+ "warnUnused false" "forceUsed" -+in -+ -+local -+ basis l4 = -+ bas -+ (* $/basis.cm ====> *) $(SML_LIB)/basis/basis.mlb $(SML_LIB)/basis/unsafe.mlb $(SML_LIB)/basis/sml-nj.mlb -+ end -+in -+local -+ $(SML_LIB)/basis/pervasive.mlb -+ local -+ open l4 -+ in -+ structure gs_0 = List -+ end -+ local -+ ord-key-sig.sml -+ in -+ signature gs_1 = ORD_KEY -+ end -+ local -+ signature ORD_KEY = gs_1 -+ ord-set-sig.sml -+ in -+ signature gs_2 = ORD_SET -+ end -+ local -+ open l4 -+ in -+ structure gs_3 = Int -+ end -+ local -+ lib-base-sig.sml -+ in -+ signature gs_4 = LIB_BASE -+ end -+ local -+ structure Int = gs_3 -+ signature LIB_BASE = gs_4 -+ lib-base.sml -+ in -+ structure gs_5 = LibBase -+ end -+ local -+ structure LibBase = gs_5 -+ structure List = gs_0 -+ signature ORD_KEY = gs_1 -+ signature ORD_SET = gs_2 -+ list-set-fn.sml -+ in -+ functor gs_6 = ListSetFn -+ end -+ local -+ signature ORD_KEY = gs_1 -+ ord-map-sig.sml -+ in -+ signature gs_7 = ORD_MAP -+ end -+ local -+ structure LibBase = gs_5 -+ structure List = gs_0 -+ signature ORD_KEY = gs_1 -+ signature ORD_MAP = gs_7 -+ list-map-fn.sml -+ in -+ functor gs_8 = ListMapFn -+ end -+ local -+ structure Int = gs_3 -+ structure LibBase = gs_5 -+ structure List = gs_0 -+ signature ORD_SET = gs_2 -+ int-binary-set.sml -+ in -+ structure gs_9 = IntBinarySet -+ end -+ local -+ structure Int = gs_3 -+ structure LibBase = gs_5 -+ signature ORD_MAP = gs_7 -+ int-binary-map.sml -+ in -+ structure gs_10 = IntBinaryMap -+ end -+ local -+ prime-sizes.sml -+ in -+ structure gs_11 = PrimeSizes -+ end -+ local -+ open l4 -+ in -+ structure gs_12 = Array -+ end -+ local -+ open l4 -+ in -+ structure gs_13 = ArraySlice -+ end -+ local -+ open l4 -+ in -+ structure gs_14 = General -+ end -+ local -+ dynamic-array-sig.sml -+ in -+ signature gs_15 = DYNAMIC_ARRAY -+ end -+ local -+ structure Array = gs_12 -+ structure ArraySlice = gs_13 -+ signature DYNAMIC_ARRAY = gs_15 -+ structure General = gs_14 -+ structure Int = gs_3 -+ dynamic-array.sml -+ in -+ structure gs_16 = DynamicArray -+ end -+ local -+ io-util-sig.sml -+ in -+ signature gs_17 = IO_UTIL -+ end -+ local -+ splaytree-sig.sml -+ in -+ signature gs_18 = SPLAY_TREE -+ end -+ local -+ signature SPLAY_TREE = gs_18 -+ splaytree.sml -+ in -+ structure gs_19 = SplayTree -+ end -+ local -+ structure LibBase = gs_5 -+ structure List = gs_0 -+ signature ORD_KEY = gs_1 -+ signature ORD_SET = gs_2 -+ structure SplayTree = gs_19 -+ splay-set-fn.sml -+ in -+ functor gs_20 = SplaySetFn -+ end -+ local -+ structure LibBase = gs_5 -+ signature ORD_KEY = gs_1 -+ signature ORD_MAP = gs_7 -+ structure SplayTree = gs_19 -+ splay-map-fn.sml -+ in -+ functor gs_21 = SplayMapFn -+ end -+ local -+ open l4 -+ in -+ structure gs_22 = TextIO -+ end -+ local -+ structure Int = gs_3 -+ structure List = gs_0 -+ structure TextIO = gs_22 -+ ansi-term.sml -+ in -+ structure gs_23 = ANSITerm -+ end -+ local -+ signature IO_UTIL = gs_17 -+ structure TextIO = gs_22 -+ io-util.sml -+ in -+ structure gs_24 = IOUtil -+ end -+ local -+ plist-sig.sml -+ in -+ signature gs_25 = PROP_LIST -+ end -+ local -+ open l4 -+ in -+ structure gs_26 = Substring -+ end -+ local -+ open l4 -+ in -+ structure gs_27 = StringCvt -+ end -+ local -+ open l4 -+ in -+ structure gs_28 = String -+ end -+ local -+ open l4 -+ in -+ structure gs_29 = Char -+ end -+ local -+ getopt-sig.sml -+ in -+ signature gs_30 = GET_OPT -+ end -+ local -+ structure Char = gs_29 -+ signature GET_OPT = gs_30 -+ structure Int = gs_3 -+ structure List = gs_0 -+ structure String = gs_28 -+ structure StringCvt = gs_27 -+ structure Substring = gs_26 -+ getopt.sml -+ in -+ structure gs_31 = GetOpt -+ end -+ local -+ interval-domain-sig.sml -+ in -+ signature gs_32 = INTERVAL_DOMAIN -+ end -+ local -+ signature INTERVAL_DOMAIN = gs_32 -+ interval-set-sig.sml -+ in -+ signature gs_33 = INTERVAL_SET -+ end -+ local -+ structure StringCvt = gs_27 -+ parser-comb-sig.sml -+ in -+ signature gs_34 = PARSER_COMB -+ end -+ local -+ open l4 -+ in -+ structure gs_35 = Word8 -+ end -+ local -+ open l4 -+ in -+ structure gs_36 = CharVector -+ end -+ local -+ open l4 -+ in -+ structure gs_37 = LargeWord -+ end -+ local -+ open l4 -+ in -+ structure gs_38 = LargeInt -+ end -+ local -+ open l4 -+ in -+ structure gs_39 = Word -+ end -+ local -+ open l4 -+ in -+ structure gs_40 = Real -+ end -+ local -+ open l4 -+ in -+ structure gs_41 = LargeReal -+ end -+ local -+ atom-sig.sml -+ in -+ signature gs_42 = ATOM -+ end -+ local -+ open l4 -+ in -+ structure gs_43 = Unsafe -+ end -+ local -+ structure Char = gs_29 -+ structure Substring = gs_26 -+ structure Unsafe = gs_43 -+ structure Word = gs_39 -+ hash-string.sml -+ in -+ structure gs_44 = HashString -+ end -+ local -+ signature ATOM = gs_42 -+ structure Array = gs_12 -+ structure HashString = gs_44 -+ structure String = gs_28 -+ structure Substring = gs_26 -+ structure Word = gs_39 -+ atom.sml -+ in -+ structure gs_45 = Atom -+ end -+ local -+ structure Atom = gs_45 -+ structure Int = gs_3 -+ structure LargeInt = gs_38 -+ structure LargeReal = gs_41 -+ structure LargeWord = gs_37 -+ structure Real = gs_40 -+ structure Word = gs_39 -+ structure Word8 = gs_35 -+ format-sig.sml -+ in -+ signature gs_46 = FORMAT -+ end -+ local -+ structure Int = gs_3 -+ structure String = gs_28 -+ structure StringCvt = gs_27 -+ real-format.sml -+ in -+ structure gs_47 = RealFormat -+ end -+ local -+ structure Atom = gs_45 -+ structure Char = gs_29 -+ structure Int = gs_3 -+ structure LargeInt = gs_38 -+ structure LargeReal = gs_41 -+ structure LargeWord = gs_37 -+ structure Real = gs_40 -+ structure StringCvt = gs_27 -+ structure Substring = gs_26 -+ structure Word = gs_39 -+ structure Word8 = gs_35 -+ fmt-fields.sml -+ in -+ structure gs_48 = FmtFields -+ end -+ local -+ structure Atom = gs_45 -+ structure Char = gs_29 -+ structure CharVector = gs_36 -+ signature FORMAT = gs_46 -+ structure FmtFields = gs_48 -+ structure Int = gs_3 -+ structure LargeInt = gs_38 -+ structure LargeWord = gs_37 -+ structure Real = gs_40 -+ structure RealFormat = gs_47 -+ structure String = gs_28 -+ structure StringCvt = gs_27 -+ structure Substring = gs_26 -+ structure Word = gs_39 -+ structure Word8 = gs_35 -+ format.sml -+ in -+ structure gs_49 = Format -+ end -+ local -+ priority-sig.sml -+ in -+ signature gs_50 = PRIORITY -+ end -+ local -+ hash-key-sig.sml -+ in -+ signature gs_51 = HASH_KEY -+ end -+ local -+ signature HASH_KEY = gs_51 -+ mono-hash-table-sig.sml -+ in -+ signature gs_52 = MONO_HASH_TABLE -+ end -+ local -+ structure Array = gs_12 -+ structure Word = gs_39 -+ hash-table-rep.sml -+ in -+ structure gs_53 = HashTableRep -+ end -+ local -+ structure Array = gs_12 -+ structure HashTableRep = gs_53 -+ signature MONO_HASH_TABLE = gs_52 -+ structure Word = gs_39 -+ int-hash-table.sml -+ in -+ structure gs_54 = IntHashTable -+ end -+ local -+ open l4 -+ in -+ signature gs_55 = MONO_ARRAY -+ end -+ local -+ signature MONO_ARRAY = gs_55 -+ bit-array-sig.sml -+ in -+ signature gs_56 = BIT_ARRAY -+ end -+ local -+ structure LibBase = gs_5 -+ structure List = gs_0 -+ signature ORD_KEY = gs_1 -+ signature ORD_SET = gs_2 -+ redblack-set-fn.sml -+ in -+ functor gs_57 = RedBlackSetFn -+ end -+ local -+ structure Atom = gs_45 -+ functor RedBlackSetFn = gs_57 -+ atom-redblack-set.sml -+ in -+ structure gs_58 = AtomRedBlackSet -+ end -+ local -+ structure AtomRedBlackSet = gs_58 -+ atom-set.sml -+ in -+ structure gs_59 = AtomSet -+ end -+ local -+ structure LibBase = gs_5 -+ signature ORD_KEY = gs_1 -+ signature ORD_MAP = gs_7 -+ redblack-map-fn.sml -+ in -+ functor gs_60 = RedBlackMapFn -+ end -+ local -+ structure Atom = gs_45 -+ functor RedBlackMapFn = gs_60 -+ atom-redblack-map.sml -+ in -+ structure gs_61 = AtomRedBlackMap -+ end -+ local -+ structure AtomRedBlackMap = gs_61 -+ atom-map.sml -+ in -+ structure gs_62 = AtomMap -+ end -+ local -+ open l4 -+ in -+ structure gs_63 = Word8Array -+ end -+ local -+ open l4 -+ in -+ structure gs_64 = Word8Vector -+ end -+ local -+ open l4 -+ in -+ structure gs_65 = CharArray -+ end -+ local -+ open l4 -+ in -+ structure gs_66 = Word8VectorSlice -+ end -+ local -+ open l4 -+ in -+ structure gs_67 = Word8ArraySlice -+ end -+ local -+ structure Word8Vector = gs_64 -+ structure Word8VectorSlice = gs_66 -+ base64-sig.sml -+ in -+ signature gs_68 = BASE64 -+ end -+ local -+ signature BASE64 = gs_68 -+ structure Char = gs_29 -+ structure CharArray = gs_65 -+ structure CharVector = gs_36 -+ structure Int = gs_3 -+ structure String = gs_28 -+ structure Substring = gs_26 -+ structure Unsafe = gs_43 -+ structure Word = gs_39 -+ structure Word8 = gs_35 -+ structure Word8Array = gs_63 -+ structure Word8ArraySlice = gs_67 -+ structure Word8Vector = gs_64 -+ structure Word8VectorSlice = gs_66 -+ base64.sml -+ in -+ structure gs_69 = Base64 -+ end -+ local -+ structure List = gs_0 -+ signature PROP_LIST = gs_25 -+ plist.sml -+ in -+ structure gs_70 = PropList -+ end -+ local -+ open l4 -+ in -+ structure gs_71 = Vector -+ end -+ local -+ char-map-sig.sml -+ in -+ signature gs_72 = CHAR_MAP -+ end -+ local -+ structure Array = gs_12 -+ signature CHAR_MAP = gs_72 -+ structure Char = gs_29 -+ structure String = gs_28 -+ structure Vector = gs_71 -+ char-map.sml -+ in -+ structure gs_73 = CharMap -+ end -+ local -+ list-xprod-sig.sml -+ in -+ signature gs_74 = LIST_XPROD -+ end -+ local -+ signature ORD_KEY = gs_1 -+ graph-scc-sig.sml -+ in -+ signature gs_75 = GRAPH_SCC -+ end -+ local -+ signature GRAPH_SCC = gs_75 -+ structure List = gs_0 -+ signature ORD_KEY = gs_1 -+ functor RedBlackMapFn = gs_60 -+ graph-scc-fn.sml -+ in -+ functor gs_76 = GraphSCCFn -+ end -+ local -+ structure Array = gs_12 -+ signature HASH_KEY = gs_51 -+ structure HashTableRep = gs_53 -+ signature MONO_HASH_TABLE = gs_52 -+ structure Word = gs_39 -+ hash-table-fn.sml -+ in -+ functor gs_77 = HashTableFn -+ end -+ local -+ structure Atom = gs_45 -+ functor HashTableFn = gs_77 -+ atom-table.sml -+ in -+ structure gs_78 = AtomTable -+ end -+ local -+ structure StringCvt = gs_27 -+ list-format-sig.sml -+ in -+ signature gs_79 = LIST_FORMAT -+ end -+ local -+ signature LIST_FORMAT = gs_79 -+ structure String = gs_28 -+ structure StringCvt = gs_27 -+ list-format.sml -+ in -+ structure gs_80 = ListFormat -+ end -+ local -+ open l4 -+ in -+ signature gs_81 = MONO_VECTOR -+ end -+ local -+ signature MONO_VECTOR = gs_81 -+ bit-vector-sig.sml -+ in -+ signature gs_82 = BIT_VECTOR -+ end -+ local -+ signature PARSER_COMB = gs_34 -+ structure StringCvt = gs_27 -+ structure Substring = gs_26 -+ parser-comb.sml -+ in -+ structure gs_83 = ParserComb -+ end -+ local -+ signature HASH_KEY = gs_51 -+ mono-hash2-table-sig.sml -+ in -+ signature gs_84 = MONO_HASH2_TABLE -+ end -+ local -+ signature INTERVAL_DOMAIN = gs_32 -+ signature INTERVAL_SET = gs_33 -+ structure List = gs_0 -+ interval-set-fn.sml -+ in -+ functor gs_85 = IntervalSetFn -+ end -+ local -+ structure LibBase = gs_5 -+ structure List = gs_0 -+ signature ORD_SET = gs_2 -+ structure Word = gs_39 -+ word-redblack-set.sml -+ in -+ structure gs_86 = WordRedBlackSet -+ end -+ local -+ structure LibBase = gs_5 -+ signature ORD_MAP = gs_7 -+ structure Word = gs_39 -+ word-redblack-map.sml -+ in -+ structure gs_87 = WordRedBlackMap -+ end -+ local -+ structure Int = gs_3 -+ structure LibBase = gs_5 -+ structure List = gs_0 -+ signature ORD_SET = gs_2 -+ int-list-set.sml -+ in -+ structure gs_88 = IntListSet -+ end -+ local -+ structure Int = gs_3 -+ structure LibBase = gs_5 -+ structure List = gs_0 -+ signature ORD_MAP = gs_7 -+ int-list-map.sml -+ in -+ structure gs_89 = IntListMap -+ end -+ local -+ open l4 -+ in -+ structure gs_90 = OS -+ end -+ local -+ path-util-sig.sml -+ in -+ signature gs_91 = PATH_UTIL -+ end -+ local -+ structure OS = gs_90 -+ signature PATH_UTIL = gs_91 -+ path-util.sml -+ in -+ structure gs_92 = PathUtil -+ end -+ local -+ structure LibBase = gs_5 -+ structure List = gs_0 -+ signature ORD_KEY = gs_1 -+ signature ORD_SET = gs_2 -+ binary-set-fn.sml -+ in -+ functor gs_93 = BinarySetFn -+ end -+ local -+ structure LibBase = gs_5 -+ signature ORD_KEY = gs_1 -+ signature ORD_MAP = gs_7 -+ binary-map-fn.sml -+ in -+ functor gs_94 = BinaryMapFn -+ end -+ local -+ open l4 -+ in -+ structure gs_95 = Math -+ end -+ local -+ open l4 -+ in -+ structure gs_96 = PackWord32Big -+ end -+ local -+ open l4 -+ in -+ structure gs_97 = Word31 -+ end -+ local -+ open l4 -+ in -+ structure gs_98 = Byte -+ end -+ local -+ random-sig.sml -+ in -+ signature gs_99 = RANDOM -+ end -+ local -+ structure Array = gs_12 -+ structure Byte = gs_98 -+ structure LargeWord = gs_37 -+ structure LibBase = gs_5 -+ structure PackWord32Big = gs_96 -+ signature RANDOM = gs_99 -+ structure Word31 = gs_97 -+ structure Word8Array = gs_63 -+ structure Word8Vector = gs_64 -+ random.sml -+ in -+ structure gs_100 = Random -+ end -+ local -+ structure Array = gs_12 -+ structure ArraySlice = gs_13 -+ structure Random = gs_100 -+ structure Real = gs_40 -+ structure Unsafe = gs_43 -+ structure Word = gs_39 -+ real-order-stats.sml -+ in -+ structure gs_101 = RealOrderStats -+ end -+ local -+ structure Array = gs_12 -+ structure ArraySlice = gs_13 -+ structure Math = gs_95 -+ structure RealOrderStats = gs_101 -+ structure Unsafe = gs_43 -+ univariate-stats.sml -+ in -+ structure gs_102 = UnivariateStats -+ end -+ local -+ signature BIT_ARRAY = gs_56 -+ structure Byte = gs_98 -+ structure Int = gs_3 -+ structure LibBase = gs_5 -+ structure List = gs_0 -+ structure Word = gs_39 -+ structure Word8 = gs_35 -+ structure Word8Array = gs_63 -+ structure Word8Vector = gs_64 -+ bit-array.sml -+ in -+ structure gs_103 = BitArray -+ end -+ local -+ structure Array = gs_12 -+ signature MONO_ARRAY = gs_55 -+ structure Vector = gs_71 -+ mono-array-fn.sml -+ in -+ functor gs_104 = MonoArrayFn -+ end -+ local -+ signature MONO_ARRAY = gs_55 -+ bsearch-fn.sml -+ in -+ functor gs_105 = BSearchFn -+ end -+ local -+ mono-dynamic-array-sig.sml -+ in -+ signature gs_106 = MONO_DYNAMIC_ARRAY -+ end -+ local -+ open l4 -+ in -+ structure gs_107 = Bool -+ end -+ local -+ structure StringCvt = gs_27 -+ format-comb-sig.sml -+ in -+ signature gs_108 = FORMAT_COMB -+ end -+ local -+ structure Bool = gs_107 -+ structure Char = gs_29 -+ signature FORMAT_COMB = gs_108 -+ structure Int = gs_3 -+ structure List = gs_0 -+ structure Real = gs_40 -+ structure String = gs_28 -+ structure StringCvt = gs_27 -+ format-comb.sml -+ in -+ structure gs_109 = FormatComb -+ end -+ local -+ queue-sig.sml -+ in -+ signature gs_110 = QUEUE -+ end -+ local -+ fifo-sig.sml -+ in -+ signature gs_111 = FIFO -+ end -+ local -+ signature FIFO = gs_111 -+ structure List = gs_0 -+ fifo.sml -+ in -+ structure gs_112 = Fifo -+ end -+ local -+ structure Fifo = gs_112 -+ signature QUEUE = gs_110 -+ queue.sml -+ in -+ structure gs_113 = Queue -+ end -+ local -+ structure Array = gs_12 -+ signature HASH_KEY = gs_51 -+ structure HashTableRep = gs_53 -+ signature MONO_HASH2_TABLE = gs_84 -+ structure Word = gs_39 -+ hash2-table-fn.sml -+ in -+ functor gs_114 = Hash2TableFn -+ end -+ local -+ structure Array = gs_12 -+ structure HashTableRep = gs_53 -+ signature MONO_HASH_TABLE = gs_52 -+ structure Word = gs_39 -+ word-hash-table.sml -+ in -+ structure gs_115 = WordHashTable -+ end -+ local -+ structure Atom = gs_45 -+ structure AtomTable = gs_78 -+ structure List = gs_0 -+ keyword-fn.sml -+ in -+ functor gs_116 = KeywordFn -+ end -+ local -+ mono-priorityq-sig.sml -+ in -+ signature gs_117 = MONO_PRIORITYQ -+ end -+ local -+ structure List = gs_0 -+ signature MONO_PRIORITYQ = gs_117 -+ signature PRIORITY = gs_50 -+ left-priorityq-fn.sml -+ in -+ functor gs_118 = LeftPriorityQFn -+ end -+ local -+ hash-table-sig.sml -+ in -+ signature gs_119 = HASH_TABLE -+ end -+ local -+ structure Array = gs_12 -+ signature HASH_TABLE = gs_119 -+ structure HashTableRep = gs_53 -+ structure Word = gs_39 -+ hash-table.sml -+ in -+ structure gs_120 = HashTable -+ end -+ local -+ structure Array = gs_12 -+ signature HASH_KEY = gs_51 -+ structure List = gs_0 -+ structure Word = gs_39 -+ hash-set-fn.sml -+ in -+ signature gs_121 = HASH_SET -+ functor gs_122 = HashSetFn -+ end -+ local -+ structure General = gs_14 -+ structure Int = gs_3 -+ signature MONO_ARRAY = gs_55 -+ signature MONO_DYNAMIC_ARRAY = gs_106 -+ dynamic-array-fn.sml -+ in -+ functor gs_123 = DynamicArrayFn -+ end -+ local -+ signature MONO_ARRAY = gs_55 -+ mono-array-sort-sig.sml -+ in -+ signature gs_124 = MONO_ARRAY_SORT -+ end -+ local -+ structure Int = gs_3 -+ structure LibBase = gs_5 -+ structure List = gs_0 -+ signature ORD_SET = gs_2 -+ int-redblack-set.sml -+ in -+ structure gs_125 = IntRedBlackSet -+ end -+ local -+ structure Int = gs_3 -+ structure LibBase = gs_5 -+ signature ORD_MAP = gs_7 -+ int-redblack-map.sml -+ in -+ structure gs_126 = IntRedBlackMap -+ end -+ local -+ array-sort-sig.sml -+ in -+ signature gs_127 = ARRAY_SORT -+ end -+ local -+ signature ARRAY_SORT = gs_127 -+ structure Array = gs_12 -+ structure Int = gs_3 -+ structure Unsafe = gs_43 -+ array-qsort.sml -+ in -+ structure gs_128 = ArrayQSort -+ end -+ local -+ uref-sig.sml -+ in -+ signature gs_129 = UREF -+ end -+ local -+ signature UREF = gs_129 -+ simple-uref.sml -+ in -+ structure gs_130 = SimpleURef -+ end -+ local -+ listsort-sig.sml -+ in -+ signature gs_131 = LIST_SORT -+ end -+ local -+ signature LIST_SORT = gs_131 -+ structure LibBase = gs_5 -+ list-mergesort.sml -+ in -+ structure gs_132 = ListMergeSort -+ end -+ local -+ structure Int = gs_3 -+ signature MONO_ARRAY = gs_55 -+ signature MONO_ARRAY_SORT = gs_124 -+ array-qsort-fn.sml -+ in -+ functor gs_133 = ArrayQSortFn -+ end -+ local -+ structure Atom = gs_45 -+ functor BinarySetFn = gs_93 -+ atom-binary-set.sml -+ in -+ structure gs_134 = AtomBinarySet -+ end -+ local -+ structure Atom = gs_45 -+ functor BinaryMapFn = gs_94 -+ atom-binary-map.sml -+ in -+ structure gs_135 = AtomBinaryMap -+ end -+ local -+ structure StringCvt = gs_27 -+ utf8-sig.sml -+ in -+ signature gs_136 = UTF8 -+ end -+ local -+ structure Char = gs_29 -+ structure String = gs_28 -+ structure StringCvt = gs_27 -+ structure Substring = gs_26 -+ signature UTF8 = gs_136 -+ structure Word = gs_39 -+ utf8.sml -+ in -+ structure gs_137 = UTF8 -+ end -+ local -+ signature UREF = gs_129 -+ uref.sml -+ in -+ structure gs_138 = URef -+ end -+ local -+ structure Atom = gs_45 -+ structure Int = gs_3 -+ structure LargeInt = gs_38 -+ structure LargeReal = gs_41 -+ structure LargeWord = gs_37 -+ structure Real = gs_40 -+ structure StringCvt = gs_27 -+ structure Word = gs_39 -+ structure Word8 = gs_35 -+ scan-sig.sml -+ in -+ signature gs_139 = SCAN -+ end -+ local -+ structure Bool = gs_107 -+ structure Char = gs_29 -+ structure FmtFields = gs_48 -+ structure Int = gs_3 -+ structure LargeInt = gs_38 -+ structure LargeReal = gs_41 -+ signature SCAN = gs_139 -+ structure StringCvt = gs_27 -+ structure Substring = gs_26 -+ structure Word8Array = gs_63 -+ scan.sml -+ in -+ structure gs_140 = Scan -+ end -+ local -+ open l4 -+ in -+ structure gs_141 = Int32 -+ end -+ local -+ structure Word31 = gs_97 -+ rand-sig.sml -+ in -+ signature gs_142 = RAND -+ end -+ local -+ structure Int32 = gs_141 -+ structure LibBase = gs_5 -+ signature RAND = gs_142 -+ structure Real = gs_40 -+ structure Word31 = gs_97 -+ rand.sml -+ in -+ structure gs_143 = Rand -+ end -+ local -+ signature LIST_XPROD = gs_74 -+ list-xprod.sml -+ in -+ structure gs_144 = ListXProd -+ end -+in -+ structure ANSITerm = gs_23 -+ signature ARRAY_SORT = gs_127 -+ signature ATOM = gs_42 -+ structure ArrayQSort = gs_128 -+ functor ArrayQSortFn = gs_133 -+ structure Atom = gs_45 -+ structure AtomBinaryMap = gs_135 -+ structure AtomBinarySet = gs_134 -+ structure AtomMap = gs_62 -+ structure AtomRedBlackMap = gs_61 -+ structure AtomRedBlackSet = gs_58 -+ structure AtomSet = gs_59 -+ structure AtomTable = gs_78 -+ signature BASE64 = gs_68 -+ signature BIT_ARRAY = gs_56 -+ signature BIT_VECTOR = gs_82 -+ functor BSearchFn = gs_105 -+ structure Base64 = gs_69 -+ functor BinaryMapFn = gs_94 -+ functor BinarySetFn = gs_93 -+ structure BitArray = gs_103 -+ signature CHAR_MAP = gs_72 -+ structure CharMap = gs_73 -+ signature DYNAMIC_ARRAY = gs_15 -+ structure DynamicArray = gs_16 -+ functor DynamicArrayFn = gs_123 -+ signature FIFO = gs_111 -+ signature FORMAT = gs_46 -+ signature FORMAT_COMB = gs_108 -+ structure Fifo = gs_112 -+ structure Format = gs_49 -+ structure FormatComb = gs_109 -+ signature GET_OPT = gs_30 -+ signature GRAPH_SCC = gs_75 -+ structure GetOpt = gs_31 -+ functor GraphSCCFn = gs_76 -+ signature HASH_KEY = gs_51 -+ signature HASH_SET = gs_121 -+ signature HASH_TABLE = gs_119 -+ functor Hash2TableFn = gs_114 -+ functor HashSetFn = gs_122 -+ structure HashString = gs_44 -+ structure HashTable = gs_120 -+ functor HashTableFn = gs_77 -+ signature INTERVAL_DOMAIN = gs_32 -+ signature INTERVAL_SET = gs_33 -+ structure IOUtil = gs_24 -+ signature IO_UTIL = gs_17 -+ structure IntBinaryMap = gs_10 -+ structure IntBinarySet = gs_9 -+ structure IntHashTable = gs_54 -+ structure IntListMap = gs_89 -+ structure IntListSet = gs_88 -+ structure IntRedBlackMap = gs_126 -+ structure IntRedBlackSet = gs_125 -+ functor IntervalSetFn = gs_85 -+ functor KeywordFn = gs_116 -+ signature LIB_BASE = gs_4 -+ signature LIST_FORMAT = gs_79 -+ signature LIST_SORT = gs_131 -+ signature LIST_XPROD = gs_74 -+ functor LeftPriorityQFn = gs_118 -+ structure LibBase = gs_5 -+ structure ListFormat = gs_80 -+ functor ListMapFn = gs_8 -+ structure ListMergeSort = gs_132 -+ functor ListSetFn = gs_6 -+ structure ListXProd = gs_144 -+ signature MONO_ARRAY_SORT = gs_124 -+ signature MONO_DYNAMIC_ARRAY = gs_106 -+ signature MONO_HASH2_TABLE = gs_84 -+ signature MONO_HASH_TABLE = gs_52 -+ signature MONO_PRIORITYQ = gs_117 -+ functor MonoArrayFn = gs_104 -+ signature ORD_KEY = gs_1 -+ signature ORD_MAP = gs_7 -+ signature ORD_SET = gs_2 -+ signature PARSER_COMB = gs_34 -+ signature PATH_UTIL = gs_91 -+ signature PRIORITY = gs_50 -+ signature PROP_LIST = gs_25 -+ structure ParserComb = gs_83 -+ structure PathUtil = gs_92 -+ structure PrimeSizes = gs_11 -+ structure PropList = gs_70 -+ signature QUEUE = gs_110 -+ structure Queue = gs_113 -+ signature RAND = gs_142 -+ signature RANDOM = gs_99 -+ structure Rand = gs_143 -+ structure Random = gs_100 -+ structure RealOrderStats = gs_101 -+ functor RedBlackMapFn = gs_60 -+ functor RedBlackSetFn = gs_57 -+ signature SCAN = gs_139 -+ signature SPLAY_TREE = gs_18 -+ structure Scan = gs_140 -+ structure SimpleURef = gs_130 -+ functor SplayMapFn = gs_21 -+ functor SplaySetFn = gs_20 -+ structure SplayTree = gs_19 -+ signature UREF = gs_129 -+ structure URef = gs_138 -+ signature UTF8 = gs_136 -+ structure UTF8 = gs_137 -+ structure UnivariateStats = gs_102 -+ structure WordHashTable = gs_115 -+ structure WordRedBlackMap = gs_87 -+ structure WordRedBlackSet = gs_86 -+end -+end -+ -+end -diff --git a/Util/time-limit.mlb b/Util/time-limit.mlb -new file mode 100644 -index 0000000..c4ca078 ---- /dev/null -+++ b/Util/time-limit.mlb -@@ -0,0 +1,16 @@ -+ann -+ "nonexhaustiveMatch warn" "redundantMatch warn" -+ "sequenceNonUnit warn" -+ "warnUnused false" "forceUsed" -+in -+ -+local -+ $(SML_LIB)/basis/basis.mlb -+ $(SML_LIB)/basis/mlton.mlb -+ engine.mlton.sml -+ time-limit.mlton.sml -+in -+ structure TimeLimit = TimeLimit -+end -+ -+end -diff --git a/Util/time-limit.mlton.sml b/Util/time-limit.mlton.sml -new file mode 100644 -index 0000000..0f585b7 ---- /dev/null -+++ b/Util/time-limit.mlton.sml -@@ -0,0 +1,24 @@ -+(* time-limit.mlton.sml -+ * -+ * Copyright (C) 1999-2004 Henry Cejtin, Matthew Fluet, Suresh -+ * Jagannathan, and Stephen Weeks. -+ * -+ * MLton is released under the GNU General Public License (GPL). -+ * Please see the file MLton-LICENSE for license information. -+ * -+ *) -+ -+structure TimeLimit: -+sig -+ exception TimeOut -+ val timeLimit : Time.time -> ('a -> 'b) -> 'a -> 'b -+end = -+struct -+ exception TimeOut -+ -+ fun timeLimit t f x = -+ case Engine.run (Engine.new (fn () => f x), t) of -+ Engine.Done res => res -+ | Engine.Raise exn => raise exn -+ | Engine.TimeOut _ => raise TimeOut -+end -diff --git a/smlnj-lib.mlb b/smlnj-lib.mlb -new file mode 100644 -index 0000000..846951a ---- /dev/null -+++ b/smlnj-lib.mlb -@@ -0,0 +1,16 @@ -+local -+ Controls/controls-lib.mlb -+ HTML/html-lib.mlb -+ HTML4/html4-lib.mlb -+ HashCons/hash-cons-lib.mlb -+ INet/inet-lib.mlb -+ JSON/json-lib.mlb -+ PP/pp-lib.mlb -+ Reactive/reactive-lib.mlb -+ RegExp/regexp-lib.mlb -+ SExp/sexp-lib.mlb -+ Unix/unix-lib.mlb -+ Util/smlnj-lib.mlb -+ Util/time-limit.mlb -+in -+end Binary files /tmp/tmpeijleaj1/J0IhGCp1bz/mlton-20130715/lib/smlnj-lib/smlnj-lib.tgz and /tmp/tmpeijleaj1/Onfiehphu5/mlton-20210117+dfsg/lib/smlnj-lib/smlnj-lib.tgz differ diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-polyml/int.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-polyml/int.sml --- mlton-20130715/lib/stubs/basis-stubs-for-polyml/int.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-polyml/int.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2009 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-polyml/real.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-polyml/real.sml --- mlton-20130715/lib/stubs/basis-stubs-for-polyml/real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-polyml/real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-polyml/unsafe.sig mlton-20210117+dfsg/lib/stubs/basis-stubs-for-polyml/unsafe.sig --- mlton-20130715/lib/stubs/basis-stubs-for-polyml/unsafe.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-polyml/unsafe.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2009 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-polyml/unsafe.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-polyml/unsafe.sml --- mlton-20130715/lib/stubs/basis-stubs-for-polyml/unsafe.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-polyml/unsafe.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2009 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-polyml/word.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-polyml/word.sml --- mlton-20130715/lib/stubs/basis-stubs-for-polyml/word.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-polyml/word.sml 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/char.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/char.sml --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/char.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/char.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,6 +12,7 @@ open Pervasive.Char (* SML/NJ doesn't escape #"\000" to three octal digits. *) + (* Fixed in SML/NJ 110.83. *) val toCString = fn #"\000" => "\\000" | c => toCString c diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/ieee-real.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/ieee-real.sml --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/ieee-real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/ieee-real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/int-inf.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/int-inf.sml --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/int-inf.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/int-inf.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,38 +1,23 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) functor FixIntInf(PIntInf: sig include INT_INF end) : INT_INF = struct open PIntInf - local - structure FIntInf = FixInt(struct open PIntInf end) - in - open FIntInf - end - (* SML/NJ doesn't properly shift IntInf.int values. *) local - fun pow2 w = - if w = 0wx0 - then 1 - else - let - val p = pow2 (Pervasive.Word.>> (w, 0wx1)) - val pp = p * p - in - if 0wx1 = Pervasive.Word.andb (0wx1, w) - then 2 * pp - else pp - end + (* SML/NJ uses lower instead of upper case. *) + val toUpper = String.translate (Char.toString o Char.toUpper) in - val ~>> = fn (a, b) => a div (pow2 b) + fun fmt r w = toUpper (PIntInf.fmt r w) end end structure IntInf = FixIntInf(struct open Pervasive.IntInf end) +structure LargeInt: INTEGER = IntInf diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/int.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/int.sml --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/int.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/int.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor FixInt(PInt: sig include INTEGER end) : INTEGER = - struct - open PInt - - local - (* SML/NJ uses lower instead of upper case. *) - val toUpper = String.translate (Char.toString o Char.toUpper) - in - fun fmt r w = toUpper (PInt.fmt r w) - fun toString w = toUpper (PInt.toString w) - end - end - -structure FixedInt = FixInt(struct open Pervasive.FixedInt end) -structure Int = FixInt(struct open Pervasive.Int end) -structure Int31 = FixInt(struct open Pervasive.Int31 end) -structure Int32 = FixInt(struct open Pervasive.Int32 end) -structure Int64 = FixInt(struct open Pervasive.Int64 end) -structure LargeInt = FixInt(struct open Pervasive.LargeInt end) -structure Position = FixInt(struct open Pervasive.Position end) diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/Makefile mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/Makefile --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/pack-real32.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/pack-real32.sml --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/pack-real32.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/pack-real32.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,31 @@ +(* Copyright (C) 2009,2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +(* Dummy implementation that will not be used at run-time. *) +structure PackReal32Big : PACK_REAL where type real = Real32.real = struct + type real = Real32.real + val bytesPerElem = 4 + val isBigEndian = true + fun toBytes _ = raise Fail "PackReal32Big.toBytes" + fun fromBytes _ = raise Fail "PackReal32Big.fromBytes" + fun subVec _ = raise Fail "PackReal32Big.subVec" + fun subArr _ = raise Fail "PackReal32Big.subArr" + fun update _ = raise Fail "PackReal32Big.update" +end +(* Dummy implementation that will not be used at run-time. *) +structure PackReal32Little : PACK_REAL where type real = Real32.real = struct + type real = Real32.real + val bytesPerElem = 4 + val isBigEndian = false + fun toBytes _ = raise Fail "PackReal32Little.toBytes" + fun fromBytes _ = raise Fail "PackReal32Little.fromBytes" + fun subVec _ = raise Fail "PackReal32Little.subVec" + fun subArr _ = raise Fail "PackReal32Little.subArr" + fun update _ = raise Fail "PackReal32Little.update" +end diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/pack-real64.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/pack-real64.sml --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/pack-real64.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/pack-real64.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,31 @@ +(* Copyright (C) 2009,2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +(* Dummy implementation that will not be used at run-time. *) +structure PackReal64Big : PACK_REAL where type real = Real64.real = struct + type real = Real64.real + val bytesPerElem = 8 + val isBigEndian = true + fun toBytes _ = raise Fail "PackReal64Big.toBytes" + fun fromBytes _ = raise Fail "PackReal64Big.fromBytes" + fun subVec _ = raise Fail "PackReal64Big.subVec" + fun subArr _ = raise Fail "PackReal64Big.subArr" + fun update _ = raise Fail "PackReal64Big.update" +end +(* Dummy implementation that will not be used at run-time. *) +structure PackReal64Little : PACK_REAL where type real = Real64.real = struct + type real = Real64.real + val bytesPerElem = 8 + val isBigEndian = false + fun toBytes _ = raise Fail "PackReal64Little.toBytes" + fun fromBytes _ = raise Fail "PackReal64Little.fromBytes" + fun subVec _ = raise Fail "PackReal64Little.subVec" + fun subArr _ = raise Fail "PackReal64Little.subArr" + fun update _ = raise Fail "PackReal64Little.update" +end diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/pack-word64.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/pack-word64.sml --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/pack-word64.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/pack-word64.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,29 @@ +(* Copyright (C) 2009,2019 Matthew Fluet. + * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +(* Dummy implementation that will not be used at run-time. *) +structure PackWord64Big : PACK_WORD = struct + val bytesPerElem = 8 + val isBigEndian = true + fun subVec _ = raise Fail "PackWord64Big.subVec" + fun subVecX _ = raise Fail "PackWord64Big.subVecX" + fun subArr _ = raise Fail "PackWord64Big.subArr" + fun subArrX _ = raise Fail "PackWord64Big.subArrX" + fun update _ = raise Fail "PackWord64Big.update" +end +(* Dummy implementation that will not be used at run-time. *) +structure PackWord64Little : PACK_WORD = struct + val bytesPerElem = 8 + val isBigEndian = false + fun subVec _ = raise Fail "PackWord64Little.subVec" + fun subVecX _ = raise Fail "PackWord64Little.subVecX" + fun subArr _ = raise Fail "PackWord64Little.subArr" + fun subArrX _ = raise Fail "PackWord64Little.subArrX" + fun update _ = raise Fail "PackWord64Little.update" +end diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/pervasive.cm mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/pervasive.cm --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/pervasive.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/pervasive.cm 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2009 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/pervasive.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/pervasive.sml --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/pervasive.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/pervasive.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -14,7 +14,6 @@ structure FixedInt = FixedInt structure IEEEReal = IEEEReal structure Int = Int - structure Int31 = Int31 structure Int32 = Int32 structure Int64 = Int64 structure IntInf = IntInf @@ -26,7 +25,6 @@ structure Real64 = Real64 structure Word = Word structure Word8 = Word8 - structure Word31 = Word31 structure Word32 = Word32 structure Word64 = Word64 structure String = String diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/real.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/real.sml --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -82,6 +82,7 @@ struct open PReal + (* SML/NJ uses an old version of datatype IEEEReal.float_class. *) local datatype z = datatype IEEEReal.float_class structure P = Pervasive.IEEEReal @@ -109,33 +110,50 @@ val toDecimal = toGoodDA o toDecimal end - (* SML/NJ doesn't support EXACT - * and doesn't include a leading "~" for ~0.0. - *) + (* SML/NJ doesn't support EXACT. *) fun fmt f = - let - val fmt = - PReal.fmt - (let - datatype z = datatype StringCvt.realfmt + PReal.fmt + (let + datatype z = datatype StringCvt.realfmt + in + case f of + EXACT => StringCvt.GEN NONE + | FIX io => StringCvt.FIX io + | GEN io => StringCvt.GEN io + | SCI io => StringCvt.SCI io + end) + + val fromString = PReal.fromString + (* SML/NJ raises Overflow on large exponents. *) + (* Fixed in SML/NJ 110.83. *) + val fromString = fn s => + (case SOME (fromString s) handle Overflow => NONE of + NONE => + let + val manexp = + String.tokens + (fn c => c = #"e" orelse c = #"E") + s + fun isNeg s = + String.sub (s, 0) = #"~" + orelse String.sub (s, 0) = #"+" + fun isNonzero s = + CharVector.exists + (fn c => Char.<= (#"1", c) andalso Char.<= (c, #"9")) + s in - case f of - EXACT => StringCvt.GEN NONE - | FIX io => StringCvt.FIX io - | GEN io => StringCvt.GEN io - | SCI io => StringCvt.SCI io - end) - in - fn r => - if == (zero, r) andalso signBit r - then "~" ^ (fmt r) - else fmt r - end - - (* SML/NJ doesn't handle "[+~-]?(inf|infinity|nan)" - * and raises Overflow on large exponents. - *) - fun fromString s = + case manexp of + [man,exp] => + if isNeg exp + then SOME zero + else if isNonzero man + then SOME posInf + else SOME zero + | _ => NONE + end + | SOME ro => ro) + (* SML/NJ doesn't handle "[+~-]?(inf|infinity|nan)". *) + val fromString = fn s => case s of "inf" => SOME posInf | "infinity" => SOME posInf @@ -149,81 +167,10 @@ | "+nan" => SOME (negInf + posInf) | "~nan" => SOME (negInf + posInf) | "-nan" => SOME (negInf + posInf) - | _ => - (case SOME (PReal.fromString s) handle Overflow => NONE of - NONE => - let - val manexp = - String.tokens - (fn c => c = #"e" orelse c = #"E") - s - fun isNeg s = - String.sub (s, 0) = #"~" - orelse String.sub (s, 0) = #"+" - fun isNonzero s = - CharVector.exists - (fn c => Char.<= (#"1", c) andalso Char.<= (c, #"9")) - s - in - case manexp of - [man,exp] => - if isNeg exp - then SOME zero - else if isNonzero man - then SOME posInf - else SOME zero - | _ => NONE - end - | SOME ro => ro) + | _ => fromString s end structure LargeReal = FixReal(struct open Pervasive.LargeReal val zero : real = 0.0 end) structure Real = FixReal(struct open Pervasive.Real val zero : real = 0.0 end) structure Real64 = FixReal(struct open Pervasive.Real64 val zero : real = 0.0 end) structure Real32 = Real64 - -(* Dummy implementation that will not be used at run-time. *) -structure PackReal32Big : PACK_REAL where type real = Real32.real = struct - type real = Real32.real - val bytesPerElem = 0 - val isBigEndian = false - fun toBytes _ = raise Fail "PackReal32Big.toBytes" - fun fromBytes _ = raise Fail "PackReal32Big.fromBytes" - fun subVec _ = raise Fail "PackReal32Big.subVec" - fun subArr _ = raise Fail "PackReal32Big.subArr" - fun update _ = raise Fail "PackReal32Big.update" -end -(* Dummy implementation that will not be used at run-time. *) -structure PackReal32Little : PACK_REAL where type real = Real32.real = struct - type real = Real32.real - val bytesPerElem = 0 - val isBigEndian = false - fun toBytes _ = raise Fail "PackReal32Little.toBytes" - fun fromBytes _ = raise Fail "PackReal32Little.fromBytes" - fun subVec _ = raise Fail "PackReal32Little.subVec" - fun subArr _ = raise Fail "PackReal32Little.subArr" - fun update _ = raise Fail "PackReal32Little.update" -end - -(* Dummy implementation that will not be used at run-time. *) -structure PackReal64Big : PACK_REAL where type real = Real64.real = struct - type real = Real64.real - val bytesPerElem = 0 - val isBigEndian = false - fun toBytes _ = raise Fail "PackReal64Big.toBytes" - fun fromBytes _ = raise Fail "PackReal64Big.fromBytes" - fun subVec _ = raise Fail "PackReal64Big.subVec" - fun subArr _ = raise Fail "PackReal64Big.subArr" - fun update _ = raise Fail "PackReal64Big.update" -end -(* Dummy implementation that will not be used at run-time. *) -structure PackReal64Little : PACK_REAL where type real = Real64.real = struct - type real = Real64.real - val bytesPerElem = 0 - val isBigEndian = false - fun toBytes _ = raise Fail "PackReal64Little.toBytes" - fun fromBytes _ = raise Fail "PackReal64Little.fromBytes" - fun subVec _ = raise Fail "PackReal64Little.subVec" - fun subArr _ = raise Fail "PackReal64Little.subArr" - fun update _ = raise Fail "PackReal64Little.update" -end diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/sources.cm mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/sources.cm --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -13,74 +13,78 @@ signature IEEE_REAL signature REAL +#if SMLNJ_VERSION < 110 orelse (SMLNJ_VERSION = 110 andalso SMLNJ_MINOR_VERSION < 83) structure Char - structure FixedInt +#endif structure IEEEReal - structure Int - structure Int31 - structure Int32 - structure Int64 structure IntInf structure LargeInt structure LargeReal - structure LargeWord structure PackReal32Big - structure PackReal64Big structure PackReal32Little +#if SMLNJ_VERSION < 110 orelse (SMLNJ_VERSION = 110 andalso SMLNJ_MINOR_VERSION < 79) + structure PackReal64Big structure PackReal64Little +#endif +#if SMLNJ_VERSION < 110 orelse (SMLNJ_VERSION = 110 andalso SMLNJ_MINOR_VERSION < 91) structure PackWord64Big structure PackWord64Little - structure Position +#endif structure Real structure Real32 structure Real64 - structure Word - structure Word8 - structure Word31 - structure Word32 - structure Word64 +#if SMLNJ_VERSION < 110 orelse (SMLNJ_VERSION = 110 andalso SMLNJ_MINOR_VERSION < 83) structure String - structure SysWord +#endif ) signature IEEE_REAL signature REAL +#if SMLNJ_VERSION < 110 orelse (SMLNJ_VERSION = 110 andalso SMLNJ_MINOR_VERSION < 83) structure Char -structure FixedInt +structure String +#endif + structure IEEEReal -structure Int -structure Int31 -structure Int32 -structure Int64 structure IntInf structure LargeInt structure LargeReal -structure LargeWord +structure PackReal32Big structure PackReal32Little +#if SMLNJ_VERSION < 110 orelse (SMLNJ_VERSION = 110 andalso SMLNJ_MINOR_VERSION < 79) +structure PackReal64Big structure PackReal64Little +#endif +#if SMLNJ_VERSION < 110 orelse (SMLNJ_VERSION = 110 andalso SMLNJ_MINOR_VERSION < 91) +structure PackWord64Big structure PackWord64Little -structure Position +#endif structure Real structure Real32 structure Real64 -structure String -structure SysWord -structure Word -structure Word8 -structure Word31 -structure Word32 -structure Word64 is $/basis.cm pervasive.cm +#if SMLNJ_VERSION < 110 orelse (SMLNJ_VERSION = 110 andalso SMLNJ_MINOR_VERSION < 79) +pack-real64.sml +#endif + +#if SMLNJ_VERSION < 110 orelse (SMLNJ_VERSION = 110 andalso SMLNJ_MINOR_VERSION < 83) char.sml -ieee-real.sml +string.sml +#endif + +#if SMLNJ_VERSION < 110 orelse (SMLNJ_VERSION = 110 andalso SMLNJ_MINOR_VERSION < 91) +pack-word64.sml +#endif + int-inf.sml -int.sml + +ieee-real.sml real.sml -string.sml -word.sml + +pack-real32.sml diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/string.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/string.sml --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/string.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/string.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,5 +12,6 @@ open Pervasive.String (* SML/NJ doesn't escape #"\000" to three octal digits. *) + (* Fixed in SML/NJ 110.83. *) val toCString = translate Char.toCString end diff -Nru mlton-20130715/lib/stubs/basis-stubs-for-smlnj/word.sml mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/word.sml --- mlton-20130715/lib/stubs/basis-stubs-for-smlnj/word.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/basis-stubs-for-smlnj/word.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor FixWord(PWord: sig include WORD end) : WORD = - struct - open PWord - - local - (* SML/NJ uses lower instead of upper case. *) - val toUpper = String.translate (Char.toString o Char.toUpper) - in - fun fmt r w = toUpper (PWord.fmt r w) - fun toString w = toUpper (PWord.toString w) - end - end - -structure LargeWord = FixWord(struct open Pervasive.LargeWord end) -structure Word = FixWord(struct open Pervasive.Word end) -structure Word8 = FixWord(struct open Pervasive.Word8 end) -structure Word31 = FixWord(struct open Pervasive.Word31 end) -structure Word32 = FixWord(struct open Pervasive.Word32 end) -structure Word64 = FixWord(struct open Pervasive.Word64 end) -structure SysWord = FixWord(struct open Pervasive.SysWord end) - -(* Dummy implementation that will not be used at run-time. *) -structure PackWord64Big : PACK_WORD = struct - val bytesPerElem = 0 - val isBigEndian = true - fun subVec _ = raise Fail "PackWord64Big.subVec" - fun subVecX _ = raise Fail "PackWord64Big.subVecX" - fun subArr _ = raise Fail "PackWord64Big.subArr" - fun subArrX _ = raise Fail "PackWord64Big.subArrX" - fun update _ = raise Fail "PackWord64Big.update" -end -(* Dummy implementation that will not be used at run-time. *) -structure PackWord64Little : PACK_WORD = struct - val bytesPerElem = 0 - val isBigEndian = false - fun subVec _ = raise Fail "PackWord64Little.subVec" - fun subVecX _ = raise Fail "PackWord64Little.subVecX" - fun subArr _ = raise Fail "PackWord64Little.subArr" - fun subArrX _ = raise Fail "PackWord64Little.subArrX" - fun update _ = raise Fail "PackWord64Little.update" -end diff -Nru mlton-20130715/lib/stubs/Makefile mlton-20210117+dfsg/lib/stubs/Makefile --- mlton-20130715/lib/stubs/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ ## Copyright (C) 2009 Matthew Fluet. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/lib/stubs/mlton-stubs/array.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/array.sig --- mlton-20130715/lib/stubs/mlton-stubs/array.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/array.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/bin-io.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/bin-io.sig --- mlton-20130715/lib/stubs/mlton-stubs/bin-io.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/bin-io.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/cont.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/cont.sig --- mlton-20130715/lib/stubs/mlton-stubs/cont.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/cont.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/exn.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/exn.sig --- mlton-20130715/lib/stubs/mlton-stubs/exn.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/exn.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/finalizable.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/finalizable.sig --- mlton-20130715/lib/stubs/mlton-stubs/finalizable.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/finalizable.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/gc.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/gc.sig --- mlton-20130715/lib/stubs/mlton-stubs/gc.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/gc.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/io.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/io.sig --- mlton-20130715/lib/stubs/mlton-stubs/io.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/io.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/itimer.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/itimer.sig --- mlton-20130715/lib/stubs/mlton-stubs/itimer.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/itimer.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/Makefile mlton-20210117+dfsg/lib/stubs/mlton-stubs/Makefile --- mlton-20130715/lib/stubs/mlton-stubs/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/lib/stubs/mlton-stubs/mlton.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/mlton.sig --- mlton-20130715/lib/stubs/mlton-stubs/mlton.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/mlton.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2013 Matthew Fluet. +(* Copyright (C) 2009,2013,2019 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -25,7 +25,8 @@ val safe: bool val share: 'a -> unit val shareAll: unit -> unit - val size: 'a -> int + val size: 'a -> IntInf.int + val sizeAll: 'a -> IntInf.int structure Array: MLTON_ARRAY (* structure BinIO: MLTON_BIN_IO *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/mlton.sml mlton-20210117+dfsg/lib/stubs/mlton-stubs/mlton.sml --- mlton-20130715/lib/stubs/mlton-stubs/mlton.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/mlton.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2013 Matthew Fluet. +(* Copyright (C) 2013,2019 Matthew Fluet. * Copyright (C) 1999-2009 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -71,7 +71,8 @@ val safe = true val share = fn _ => raise Fail "share" val shareAll = fn _ => raise Fail "shareAll" - val size = MLton.size + val size: 'a -> IntInf.int = fn _ => ~1 + val sizeAll: 'a -> IntInf.int = fn _ => ~1 structure Array = struct @@ -158,18 +159,21 @@ structure Arch = struct - datatype t = Alpha | AMD64 | ARM | HPPA | IA64 | m68k | - MIPS | PowerPC | PowerPC64 | S390 | Sparc | X86 + datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | + m68k | MIPS | PowerPC | PowerPC64 | RISCV | + S390 | Sparc | X86 val all = [(Alpha, "Alpha"), (AMD64, "AMD64"), (ARM, "ARM"), + (ARM64, "ARM64"), (HPPA, "HPPA"), (IA64, "IA64"), (m68k, "m68k"), (MIPS, "MIPS"), (PowerPC, "PowerPC"), (PowerPC64, "PowerPC64"), + (RISCV, "RISCV"), (S390, "S390"), (Sparc, "Sparc"), (X86, "X86")] diff -Nru mlton-20130715/lib/stubs/mlton-stubs/platform.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/platform.sig --- mlton-20130715/lib/stubs/mlton-stubs/platform.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/platform.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2009 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -9,8 +9,8 @@ sig structure Arch: sig - datatype t = Alpha | AMD64 | ARM | HPPA | IA64 | m68k | - MIPS | PowerPC | PowerPC64 | S390 | Sparc | X86 + datatype t = Alpha | AMD64 | ARM | ARM64 | HPPA | IA64 | m68k | + MIPS | PowerPC | PowerPC64 | RISCV | S390 | Sparc | X86 val fromString: string -> t option val host: t diff -Nru mlton-20130715/lib/stubs/mlton-stubs/proc-env.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/proc-env.sig --- mlton-20130715/lib/stubs/mlton-stubs/proc-env.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/proc-env.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/process.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/process.sig --- mlton-20130715/lib/stubs/mlton-stubs/process.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/process.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/profile.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/profile.sig --- mlton-20130715/lib/stubs/mlton-stubs/profile.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/profile.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/random.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/random.sig --- mlton-20130715/lib/stubs/mlton-stubs/random.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/random.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/random.sml mlton-20210117+dfsg/lib/stubs/mlton-stubs/random.sml --- mlton-20130715/lib/stubs/mlton-stubs/random.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/random.sml 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/README mlton-20210117+dfsg/lib/stubs/mlton-stubs/README --- mlton-20130715/lib/stubs/mlton-stubs/README 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/README 2021-12-28 17:19:36.000000000 +0000 @@ -1,3 +1,4 @@ -The files in this directory define the MLton structure within the context of a -Standard basis library. Many things are defined to raise exceptions, but enough -is emulated so that we can compile MLton itself. +The files in this directory define the MLton structure within the +context of the Standard ML Basis Library. Many things are defined to +raise exceptions, but enough is emulated so that we can compile MLton +itself. diff -Nru mlton-20130715/lib/stubs/mlton-stubs/rusage.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/rusage.sig --- mlton-20130715/lib/stubs/mlton-stubs/rusage.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/rusage.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/signal.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/signal.sig --- mlton-20130715/lib/stubs/mlton-stubs/signal.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/signal.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/sources.cm mlton-20210117+dfsg/lib/stubs/mlton-stubs/sources.cm --- mlton-20130715/lib/stubs/mlton-stubs/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/sources.mlb mlton-20210117+dfsg/lib/stubs/mlton-stubs/sources.mlb --- mlton-20130715/lib/stubs/mlton-stubs/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2002-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/text-io.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/text-io.sig --- mlton-20130715/lib/stubs/mlton-stubs/text-io.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/text-io.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/thread.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/thread.sig --- mlton-20130715/lib/stubs/mlton-stubs/thread.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/thread.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/thread.sml mlton-20210117+dfsg/lib/stubs/mlton-stubs/thread.sml --- mlton-20130715/lib/stubs/mlton-stubs/thread.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/thread.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2002-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/vector.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/vector.sig --- mlton-20130715/lib/stubs/mlton-stubs/vector.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/vector.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/weak.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/weak.sig --- mlton-20130715/lib/stubs/mlton-stubs/weak.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/weak.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/word.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/word.sig --- mlton-20130715/lib/stubs/mlton-stubs/word.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/word.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs/world.sig mlton-20210117+dfsg/lib/stubs/mlton-stubs/world.sig --- mlton-20130715/lib/stubs/mlton-stubs/world.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs/world.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/lib/stubs/mlton-stubs-for-polyml/mlton.sml mlton-20210117+dfsg/lib/stubs/mlton-stubs-for-polyml/mlton.sml --- mlton-20130715/lib/stubs/mlton-stubs-for-polyml/mlton.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs-for-polyml/mlton.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,15 +1,14 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) structure MLton = struct val isMLton = false - val size : 'a -> int = PolyML.objSize structure Exn = struct val history : exn -> string list = fn _ => [] diff -Nru mlton-20130715/lib/stubs/mlton-stubs-for-smlnj/Makefile mlton-20210117+dfsg/lib/stubs/mlton-stubs-for-smlnj/Makefile --- mlton-20130715/lib/stubs/mlton-stubs-for-smlnj/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs-for-smlnj/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/lib/stubs/mlton-stubs-for-smlnj/mlton.sml mlton-20210117+dfsg/lib/stubs/mlton-stubs-for-smlnj/mlton.sml --- mlton-20130715/lib/stubs/mlton-stubs-for-smlnj/mlton.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs-for-smlnj/mlton.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,15 +1,14 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) structure MLton = struct val isMLton = false - val size : 'a -> int = fn _ => ~1 structure Exn = struct val history = SMLofNJ.exnHistory diff -Nru mlton-20130715/lib/stubs/mlton-stubs-for-smlnj/sources.cm mlton-20210117+dfsg/lib/stubs/mlton-stubs-for-smlnj/sources.cm --- mlton-20130715/lib/stubs/mlton-stubs-for-smlnj/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/lib/stubs/mlton-stubs-for-smlnj/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2009 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/LICENSE mlton-20210117+dfsg/LICENSE --- mlton-20130715/LICENSE 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/LICENSE 2021-12-28 17:19:36.000000000 +0000 @@ -1,10 +1,13 @@ This is the license for MLton, a whole-program optimizing compiler for -the Standard ML programming language. Send comments and questions to -MLton@mlton.org. +the Standard ML programming language. The license is an instance of +the Historical Permission Notice and Disclaimer (HPND) license, which +is an open source (https://opensource.org/licenses/HPND) and +free software (https://www.gnu.org/licenses/license-list.en.html#HPND) +license. Send comments and questions to MLton@mlton.org. MLton COPYRIGHT NOTICE, LICENSE AND DISCLAIMER. -Copyright (C) 1999-2013 Henry Cejtin, Matthew Fluet, Suresh +Copyright (C) 1999-2021 Henry Cejtin, Matthew Fluet, Suresh Jagannathan, and Stephen Weeks. Copyright (C) 1997-2000 by the NEC Research Institute diff -Nru mlton-20130715/Makefile mlton-20210117+dfsg/Makefile --- mlton-20130715/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,434 +1,692 @@ -## Copyright (C) 2009,2011,2013 Matthew Fluet. +## Copyright (C) 2009,2011,2013,2017-2020 Matthew Fluet. # Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## -export TARGET := self -export TARGET_ARCH := $(shell bin/host-arch) -export TARGET_OS := $(shell bin/host-os) -ROOT := $(shell pwd) -BUILD := $(ROOT)/build -SRC := $(ROOT) -BIN := $(BUILD)/bin -LIB := $(BUILD)/lib -INC := $(LIB)/include -COMP := $(SRC)/mlton -RUN := $(SRC)/runtime -MLTON := $(BIN)/mlton -AOUT := mlton-compile -ifeq (mingw, $(TARGET_OS)) -EXE := .exe -else -EXE := -endif -MLBPATHMAP := $(LIB)/mlb-path-map -SPEC := package/rpm/mlton.spec -LEX := mllex -PROF := mlprof -YACC := mlyacc -NLFFIGEN := mlnlffigen -PATH := $(BIN):$(SRC)/bin:$(shell echo $$PATH) -CP := /bin/cp -fpR -GZIP := gzip --force --best -RANLIB := ranlib - -# If we're compiling with another version of MLton, then we want to do -# another round of compilation so that we get a MLton built without -# stubs. -ifeq (other, $(shell if [ ! -x "$(BIN)/mlton" ]; then echo other; fi)) - BOOTSTRAP_OTHER:=true -else - BOOTSTRAP_OTHER:=false -endif +ROOT := . +include $(ROOT)/Makefile.config -ifeq ($(origin VERSION), undefined) - VERSION := $(shell date +%Y%m%d) -endif -ifeq ($(origin RELEASE), undefined) - RELEASE := 1 -endif +###################################################################### .PHONY: all all: - $(MAKE) docs all-no-docs - -.PHONY: all-no-docs -all-no-docs: - $(MAKE) dirs runtime compiler basis-no-check script mlbpathmap constants libraries tools -# Remove $(AOUT) so that the $(MAKE) compiler below will remake MLton. -# We also want to re-run the just-built tools (mllex and mlyacc) -# because they may be better than those that were used for the first -# round of compilation. So, we clean out the front end. -ifeq (true, $(BOOTSTRAP_OTHER)) - rm -f "$(COMP)/$(AOUT)$(EXE)" - $(MAKE) -C "$(COMP)/front-end" clean + $(MAKE) dirs + $(MAKE) runtime + $(MAKE) compiler CHECK_FIXPOINT=false # tools0 + mlton0 -> mlton1 + $(MAKE) script + $(MAKE) basis + $(MAKE) libraries + $(MAKE) tools CHECK_FIXPOINT=false # tools0 + mlton1 -> tools1 +ifeq (2, $(firstword $(sort $(BOOTSTRAP_STYLE) 2))) + $(MAKE) compiler-clean + $(MAKE) compiler SELF_COMPILE=true CHECK_FIXPOINT=false # tools1 + mlton1 -> mlton2 +ifeq (3, $(firstword $(sort $(BOOTSTRAP_STYLE) 3))) + $(MAKE) tools-clean + $(MAKE) tools CHECK_FIXPOINT=true # tools1 + mlton2 -> tools2; tools2 == tools1 + $(MAKE) compiler-clean + $(MAKE) compiler SELF_COMPILE=true CHECK_FIXPOINT=true # tools2 + mlton2 -> mlton3; mlton3 == mlton2 +endif endif - $(MAKE) compiler basis @echo 'Build of MLton succeeded.' +.PHONY: clean +clean: + $(SRC)/bin/clean --exclude package + +.PHONY: clean-git +clean-git: + $(FIND) . -type d -name .git -prune -exec $(RM) '{}' ';' + +.PHONY: check +check: + ./bin/regression $(CHECK_ARGS) + +$(eval $(MK_SHOW_CONFIG)) + +###################################################################### + .PHONY: basis-no-check basis-no-check: - mkdir -p "$(LIB)/sml" - rm -rf "$(LIB)/sml/basis" - $(CP) "$(SRC)/basis-library/." "$(LIB)/sml/basis" - find "$(LIB)/sml/basis" -name .gitignore | xargs rm -rf + $(RM) "$(LIB)/sml/basis" + $(MKDIR) "$(LIB)/sml/basis" + ( \ + cd "$(SRC)/basis-library" && \ + $(FIND) . -type f '(' -name '*.mlb' -o -name '*.sml' -o -name '*.sig' -o -name '*.fun' ')' | \ + $(XARGS) $(TAR) cf - | \ + ( cd "$(LIB)/sml/basis" && $(TAR) xf - ) \ + ) + +.PHONY: basis-check +basis-check: + @echo 'Type checking basis.' + "$(BIN)/$(MLTON)" -disable-ann deadCode -stop tc '$$(SML_LIB)/basis/libs/all.mlb' >/dev/null .PHONY: basis basis: $(MAKE) basis-no-check - @echo 'Type checking basis.' - "$(MLTON)" -disable-ann deadCode \ - -stop tc \ - '$$(SML_LIB)/basis/libs/all.mlb' \ - >/dev/null - -.PHONY: bootstrap-nj -bootstrap-nj: - $(MAKE) nj-mlton - $(MAKE) all - -.PHONY: clean -clean: - bin/clean - -.PHONY: clean-git -clean-git: - find . -type d -name .git | xargs rm -rf + $(MAKE) basis-check .PHONY: compiler compiler: - $(MAKE) -C "$(COMP)" - $(CP) "$(COMP)/$(AOUT)$(EXE)" "$(LIB)/" - -.PHONY: constants -constants: - @echo 'Creating constants file.' - "$(BIN)/mlton" -target "$(TARGET)" -build-constants true >tmp.c - "$(BIN)/mlton" -target "$(TARGET)" -output tmp tmp.c - ./tmp >"$(LIB)/targets/$(TARGET)/constants" - rm -f tmp tmp.exe tmp.c + $(MAKE) -C "$(SRC)/mlton" +ifeq (true, $(CHECK_FIXPOINT)) + $(DIFF) -b "$(SRC)/mlton/$(MLTON_OUTPUT)$(EXE)" "$(LIB)/$(MLTON_OUTPUT)$(EXE)" +endif + $(CP) "$(SRC)/mlton/$(MLTON_OUTPUT)$(EXE)" "$(LIB)/" -.PHONY: debugged -debugged: - $(MAKE) -C "$(COMP)" "AOUT=$(AOUT).debug" COMPILE_ARGS="-debug true -const 'Exn.keepHistory true' -profile-val true -const 'MLton.debug true' -drop-pass 'deepFlatten'" - $(CP) "$(COMP)/$(AOUT).debug" "$(LIB)/" - sed 's/mlton-compile/mlton-compile.debug/' < "$(MLTON)" > "$(MLTON).debug" - chmod a+x "$(MLTON).debug" +.PHONY: compiler-clean +compiler-clean: + $(MAKE) -C "$(SRC)/mlton" clean .PHONY: dirs dirs: - mkdir -p "$(BIN)" "$(INC)" - mkdir -p "$(LIB)/targets/$(TARGET)/include" - mkdir -p "$(LIB)/targets/$(TARGET)/sml" + $(MKDIR) "$(BIN)" "$(LIB)" "$(INC)" + $(MKDIR) "$(LIB)/targets/$(TARGET)/include" + $(MKDIR) "$(LIB)/targets/$(TARGET)/sml" .PHONY: docs -docs: dirs - $(MAKE) -C "$(LEX)" docs - $(MAKE) -C "$(YACC)" docs - $(MAKE) -C doc/guide +docs: + $(MAKE) -C "$(SRC)/doc/guide" -LIBRARIES := ckit-lib cml mllpt-lib mlnlffi-lib mlrisc-lib mlyacc-lib smlnj-lib +define LIBRARIES_NO_CHECK_TEMPLATE + $(RM) "$(LIB)/sml/$(1)" + $(MKDIR) "$(LIB)/sml/$(1)" + ( \ + cd "$(SRC)/lib/$(1)$(2)" && \ + $(FIND) . '!' -path '*/.cm/*' $(3) -type f '(' -name '*.mlb' -o -name '*.sml' -o -name '*.sig' -o -name '*.fun' ')' | \ + $(XARGS) $(TAR) cf - | \ + ( cd "$(LIB)/sml/$(1)" && $(TAR) xf - ) \ + ) + +endef .PHONY: libraries-no-check libraries-no-check: - mkdir -p "$(LIB)/sml" - cd "$(LIB)/sml" && rm -rf $(LIBRARIES) $(MAKE) -C "$(SRC)/lib/ckit-lib" + $(call LIBRARIES_NO_CHECK_TEMPLATE,ckit-lib,/ckit/src,) + $(call LIBRARIES_NO_CHECK_TEMPLATE,cml,,'!' -path '*/tests/*') $(MAKE) -C "$(SRC)/lib/mllpt-lib" + $(call LIBRARIES_NO_CHECK_TEMPLATE,mllpt-lib,/ml-lpt/lib,) $(MAKE) -C "$(SRC)/lib/mlnlffi-lib" + $(call LIBRARIES_NO_CHECK_TEMPLATE,mlnlffi-lib,,) $(MAKE) -C "$(SRC)/lib/mlrisc-lib" + $(call LIBRARIES_NO_CHECK_TEMPLATE,mlrisc-lib,/MLRISC,'!' -path '*/demo/*' '!' -path '*/Tools/*' '!' -path './autoload.sml' '!' -path './make*.sml') + $(call LIBRARIES_NO_CHECK_TEMPLATE,mlyacc-lib,,) $(MAKE) -C "$(SRC)/lib/smlnj-lib" - $(CP) "$(SRC)/lib/cml/." "$(LIB)/sml/cml" - $(CP) "$(SRC)/lib/ckit-lib/ckit/." "$(LIB)/sml/ckit-lib" - $(CP) "$(SRC)/lib/mlnlffi-lib/." "$(LIB)/sml/mlnlffi-lib" - $(CP) "$(SRC)/lib/mlrisc-lib/MLRISC/." "$(LIB)/sml/mlrisc-lib" - $(CP) "$(SRC)/lib/mllpt-lib/ml-lpt/lib/." "$(LIB)/sml/mllpt-lib" - $(CP) "$(SRC)/lib/mlyacc-lib/." "$(LIB)/sml/mlyacc-lib" - $(CP) "$(SRC)/lib/smlnj-lib/smlnj-lib/." "$(LIB)/sml/smlnj-lib" - find "$(LIB)/sml" -type d -name .cm | xargs rm -rf - find "$(LIB)/sml" -name .gitignore | xargs rm -rf + $(call LIBRARIES_NO_CHECK_TEMPLATE,smlnj-lib,/smlnj-lib,'!' -path '*/examples/*' '!' -path '*/tests/*' '!' -path '*/Tests/*') + +define LIBRARIES_CHECK_TEMPLATE + @echo "Type checking $(1) library." + "$(BIN)/$(MLTON)" -disable-ann deadCode -stop tc '$$(SML_LIB)/$(1)/$(1).mlb' >/dev/null +endef + +.PHONY: libraries-check +libraries-check: + $(call LIBRARIES_CHECK_TEMPLATE,ckit-lib) + $(call LIBRARIES_CHECK_TEMPLATE,cml) + $(call LIBRARIES_CHECK_TEMPLATE,mllpt-lib) + $(call LIBRARIES_CHECK_TEMPLATE,mlnlffi-lib) + $(call LIBRARIES_CHECK_TEMPLATE,mlrisc-lib) + $(call LIBRARIES_CHECK_TEMPLATE,mlyacc-lib) + $(call LIBRARIES_CHECK_TEMPLATE,smlnj-lib) .PHONY: libraries libraries: $(MAKE) libraries-no-check - for f in $(LIBRARIES); do \ - echo "Type checking $$f library."; \ - "$(MLTON)" -disable-ann deadCode \ - -stop tc \ - '$$(SML_LIB)/'"$$f/$$f.mlb" \ - >/dev/null; \ - done - -.PHONY: mlbpathmap -mlbpathmap: - touch "$(MLBPATHMAP)" - ( echo 'MLTON_ROOT $$(LIB_MLTON_DIR)/sml'; \ - echo 'SML_LIB $$(LIB_MLTON_DIR)/sml'; ) \ - >>"$(MLBPATHMAP).tmp" - mv "$(MLBPATHMAP).tmp" "$(MLBPATHMAP)" - -.PHONY: polyml-mlton -polyml-mlton: - $(MAKE) dirs runtime - $(MAKE) -C "$(COMP)" polyml-mlton - $(CP) "$(COMP)/mlton-polyml$(EXE)" "$(LIB)/" - $(MAKE) script basis-no-check mlbpathmap constants libraries-no-check - @echo 'Build of MLton succeeded.' - -.PHONY: profiled -profiled: - for t in alloc count time; do \ - $(MAKE) -C "$(COMP)" "AOUT=$(AOUT).$$t" \ - COMPILE_ARGS="-profile $$t"; \ - $(CP) "$(COMP)/$(AOUT).$$t" "$(LIB)/"; \ - sed "s/mlton-compile/mlton-compile.$$t/" \ - <"$(MLTON)" \ - >"$(MLTON).$$t"; \ - chmod a+x "$(MLTON).$$t"; \ - done + $(MAKE) libraries-check .PHONY: runtime runtime: @echo 'Compiling MLton runtime system for $(TARGET).' - $(MAKE) -C runtime - $(CP) include/*.h "$(INC)/" - $(CP) runtime/*.a "$(LIB)/targets/$(TARGET)/" - $(CP) runtime/gen/sizes "$(LIB)/targets/$(TARGET)/" - $(CP) runtime/gen/c-types.sml "$(LIB)/targets/$(TARGET)/sml/" + $(MAKE) -C "$(SRC)/runtime" + $(CP) "$(SRC)/include/"*.h "$(INC)/" + $(CP) "$(SRC)/runtime/"*.a "$(LIB)/targets/$(TARGET)/" + $(CP) "$(SRC)/runtime/gen/constants" "$(LIB)/targets/$(TARGET)/" + $(CP) "$(SRC)/runtime/gen/c-types.sml" "$(LIB)/targets/$(TARGET)/sml/" echo "$(TARGET_OS)" > "$(LIB)/targets/$(TARGET)/os" echo "$(TARGET_ARCH)" > "$(LIB)/targets/$(TARGET)/arch" - $(CP) runtime/gen/basis-ffi.sml \ + $(CP) "$(SRC)/runtime/gen/basis-ffi.sml" \ basis-library/primitive/basis-ffi.sml - $(CP) runtime/*.h "$(INC)/" - mv "$(INC)/c-types.h" "$(LIB)/targets/$(TARGET)/include" + $(CP) "$(SRC)/runtime/"*.h "$(INC)/" + $(MV) "$(INC)/c-types.h" "$(LIB)/targets/$(TARGET)/include" for d in basis basis/Real basis/Word gc platform util; do \ - mkdir -p "$(INC)/$$d"; \ - $(CP) runtime/$$d/*.h "$(INC)/$$d"; \ + $(MKDIR) "$(INC)/$$d"; \ + $(CP) "$(SRC)/runtime/$$d/"*.h "$(INC)/$$d"; \ done - for x in "$(LIB)/targets/$(TARGET)"/*.a; do $(RANLIB) "$$x"; done .PHONY: script script: - $(CP) bin/mlton-script "$(MLTON)" - chmod a+x "$(MLTON)" - $(CP) "$(SRC)/bin/platform" "$(LIB)" + $(SED) \ + -e "s;^LIB_REL_BIN=.*;LIB_REL_BIN=\"$(LIB_REL_BIN)\";" \ + -e "s;^EXE=.*;EXE=\"$(EXE)\";" \ + -e "s;^CC=.*;CC=\"$(CC)\";" \ + -e "s;^GMP_INC_DIR=.*;GMP_INC_DIR=\"$(WITH_GMP_INC_DIR)\";" \ + -e "s;^GMP_LIB_DIR=.*;GMP_LIB_DIR=\"$(WITH_GMP_LIB_DIR)\";" \ + -e 's/mlton-compile/$(MLTON_OUTPUT)/' \ + < "$(SRC)/bin/mlton-script" > "$(BIN)/$(MLTON)" + $(CHMOD) a+x "$(BIN)/$(MLTON)" $(CP) "$(SRC)/bin/static-library" "$(LIB)" ifeq (mingw, $(TARGET_OS)) $(CP) "$(SRC)/bin/static-library.bat" "$(LIB)" endif +ifeq (true, $(CHECK_FIXPOINT)) +define TOOLS_TEMPLATE_CHECK_FIXPOINT + $(DIFF) -b "$(SRC)/$(1)/$(1)$(EXE)" "$(BIN)/$(1)$(EXE)" +endef +else +define TOOLS_TEMPLATE_CHECK_FIXPOINT +endef +endif + +define TOOLS_TEMPLATE + +$(MAKE) -C "$(SRC)/$(1)" + $(call TOOLS_TEMPLATE_CHECK_FIXPOINT,$(1)) + $(CP) "$(SRC)/$(1)/$(1)$(EXE)" "$(BIN)/" +endef + +.PHONY: tools +tools: + $(call TOOLS_TEMPLATE,mllex) + $(call TOOLS_TEMPLATE,mlyacc) + $(call TOOLS_TEMPLATE,mlprof) + $(call TOOLS_TEMPLATE,mlnlffigen) + +.PHONY: tools-clean +tools-clean: + $(MAKE) -C "$(SRC)/mllex" clean + $(MAKE) -C "$(SRC)/mlyacc" clean + $(MAKE) -C "$(SRC)/mlprof" clean + $(MAKE) -C "$(SRC)/mlnlffigen" clean + +###################################################################### + +# debugged, profiled, traced targets + +.PHONY: debugged +debugged: + $(MAKE) -C "$(SRC)/mlton" MLTON_NAME="$(MLTON_NAME) (debug)" MLTON_OUTPUT=$(MLTON_OUTPUT).debug \ + MLTON_COMPILE_ARGS="$(MLTON_COMPILE_ARGS) -debug true -const 'Exn.keepHistory true' -profile-val true -const 'MLton.debug true' -disable-pass 'deepFlatten'" + $(CP) "$(SRC)/mlton/$(MLTON_OUTPUT).debug$(EXE)" "$(LIB)/" + $(SED) -e 's/$(MLTON_OUTPUT)/$(MLTON_OUTPUT).debug/' \ + < "$(BIN)/$(MLTON)" \ + > "$(BIN)/$(MLTON).debug" + $(CHMOD) u+x "$(BIN)/$(MLTON).debug" + +define PROFILED_TEMPLATE + +$(MAKE) -C "$(SRC)/mlton" MLTON_NAME="$(MLTON_NAME) (profile-$(1))" MLTON_OUTPUT=$(MLTON_OUTPUT).$(1) \ + MLTON_COMPILE_ARGS="$(MLTON_COMPILE_ARGS) -profile $(1)" + $(CP) "$(SRC)/mlton/$(MLTON_OUTPUT).$(1)$(EXE)" "$(LIB)/" + $(SED) -e "s/$(MLTON_OUTPUT)/$(MLTON_OUTPUT).$(1)/" \ + < "$(BIN)/$(MLTON)" \ + >"$(BIN)/$(MLTON).$(1)" + $(CHMOD) u+x "$(BIN)/$(MLTON).$(1)" +endef + +.PHONY: profiled-alloc +profiled-alloc: + $(call PROFILED_TEMPLATE,alloc) + +.PHONY: profiled-count +profiled-count: + $(call PROFILED_TEMPLATE,count) + +.PHONY: profiled-time +profiled-time: + $(call PROFILED_TEMPLATE,time) + +.PHONY: profiled +profiled: + $(MAKE) profiled-alloc + $(MAKE) profiled-count + $(MAKE) profiled-time + +.PHONY: traced +traced: + $(MAKE) -C "$(SRC)/mlton" MLTON_NAME="$(MLTON_NAME) (trace)" MLTON_OUTPUT=$(MLTON_OUTPUT).trace \ + MLTON_COMPILE_ARGS="$(MLTON_COMPILE_ARGS) -const 'Exn.keepHistory true' -profile-val true -const 'MLton.debug true' -disable-pass 'deepFlatten'" + $(CP) "$(SRC)/mlton/$(MLTON_OUTPUT).trace$(EXE)" "$(LIB)/" + $(SED) -e 's/$(MLTON_OUTPUT)/$(MLTON_OUTPUT).trace/' \ + < "$(BIN)/$(MLTON)" \ + > "$(BIN)/$(MLTON).trace" + $(CHMOD) u+x "$(BIN)/$(MLTON).trace" + +###################################################################### + +# smlnj targets + +.PHONY: bootstrap-smlnj +bootstrap-smlnj: + $(MAKE) smlnj-mlton + $(RM) "$(BIN)/$(MLTON)" + $(MAKE) BOOTSTRAP_MLTON=$(MLTON).smlnj all + smlnj_heap_suffix=`echo 'TextIO.output (TextIO.stdErr, SMLofNJ.SysInfo.getHeapSuffix ());' | sml 2>&1 1> /dev/null` && $(RM) "$(LIB)/$(MLTON_OUTPUT)-smlnj.$$smlnj_heap_suffix" + $(RM) "$(BIN)/$(MLTON).smlnj" + .PHONY: smlnj-mlton smlnj-mlton: - $(MAKE) dirs runtime - $(MAKE) -C "$(COMP)" smlnj-mlton - smlnj_heap_suffix=`echo 'TextIO.output (TextIO.stdErr, SMLofNJ.SysInfo.getHeapSuffix ());' | sml 2>&1 1> /dev/null` && $(CP) "$(COMP)/mlton-smlnj.$$smlnj_heap_suffix" "$(LIB)/" - $(MAKE) script basis-no-check mlbpathmap constants libraries-no-check - @echo 'Build of MLton succeeded.' + $(MAKE) dirs + $(MAKE) runtime + $(MAKE) -C "$(SRC)/mlton" smlnj-mlton + smlnj_heap_suffix=`echo 'TextIO.output (TextIO.stdErr, SMLofNJ.SysInfo.getHeapSuffix ());' | sml 2>&1 1> /dev/null` && $(CP) "$(SRC)/mlton/$(MLTON_OUTPUT)-smlnj.$$smlnj_heap_suffix" "$(LIB)/" + $(MAKE) script + $(MAKE) basis-no-check + $(MAKE) libraries-no-check + $(SED) \ + -e 's;doitMLton "$$@";# doitMLton "$$@";' \ + -e 's;doitPolyML "$$@";# doitPolyML "$$@";' \ + < "$(BIN)/$(MLTON)" \ + > "$(BIN)/$(MLTON).smlnj" + $(CHMOD) u+x "$(BIN)/$(MLTON).smlnj" + @echo 'Build of MLton (with SML/NJ) succeeded.' -.PHONY: smlnj-mlton-dual -smlnj-mlton-dual: +.PHONY: smlnj-mlton-x2 +smlnj-mlton-x2: $(MAKE) SMLNJ_CM_SERVERS_NUM=2 smlnj-mlton -.PHONY: smlnj-mlton-quad -smlnj-mlton-quad: +.PHONY: smlnj-mlton-x4 +smlnj-mlton-x4: $(MAKE) SMLNJ_CM_SERVERS_NUM=4 smlnj-mlton -.PHONY: traced -traced: - $(MAKE) -C "$(COMP)" "AOUT=$(AOUT).trace" COMPILE_ARGS="-const 'Exn.keepHistory true' -profile-val true -const 'MLton.debug true' -drop-pass 'deepFlatten'" - $(CP) "$(COMP)/$(AOUT).trace" "$(LIB)/" - sed 's/mlton-compile/mlton-compile.trace/' < "$(MLTON)" > "$(MLTON).trace" - chmod a+x "$(MLTON).trace" +.PHONY: smlnj-mlton-x8 +smlnj-mlton-x8: + $(MAKE) SMLNJ_CM_SERVERS_NUM=8 smlnj-mlton + +.PHONY: smlnj-mlton-x16 +smlnj-mlton-x16: + $(MAKE) SMLNJ_CM_SERVERS_NUM=16 smlnj-mlton + +###################################################################### + +# polyml targets + +.PHONY: bootstrap-polyml +bootstrap-polyml: + $(MAKE) polyml-mlton + $(RM) "$(BIN)/$(MLTON)" + $(MAKE) BOOTSTRAP_MLTON=$(MLTON).polyml all + $(RM) "$(LIB)/$(MLTON)-polyml$(EXE)" + $(RM) "$(BIN)/$(MLTON).polyml" -.PHONY: tools -tools: - $(MAKE) -C "$(LEX)" - $(MAKE) -C "$(NLFFIGEN)" - $(MAKE) -C "$(PROF)" - $(MAKE) -C "$(YACC)" - $(CP) "$(LEX)/$(LEX)$(EXE)" \ - "$(NLFFIGEN)/$(NLFFIGEN)$(EXE)" \ - "$(PROF)/$(PROF)$(EXE)" \ - "$(YACC)/$(YACC)$(EXE)" \ - "$(BIN)/" +.PHONY: polyml-mlton +polyml-mlton: + $(MAKE) dirs + $(MAKE) runtime + $(MAKE) -C "$(SRC)/mlton" polyml-mlton + $(CP) "$(SRC)/mlton/mlton-polyml$(EXE)" "$(LIB)/" + $(MAKE) script + $(MAKE) basis-no-check + $(MAKE) libraries-no-check + $(SED) \ + -e 's;doitMLton "$$@";# doitMLton "$$@";' \ + -e 's;doitSMLNJ "$$@";# doitSMLNJ "$$@";' \ + < "$(BIN)/$(MLTON)" \ + > "$(BIN)/$(MLTON).polyml" + $(CHMOD) u+x "$(BIN)/$(MLTON).polyml" + @echo 'Build of MLton (with Poly/ML) succeeded.' + +###################################################################### + +# version target .PHONY: version version: @echo 'Instantiating version numbers.' - for f in \ - "$(SPEC)" \ - package/freebsd/Makefile \ - mlton/control/version_sml.src \ - doc/guide/conf/asciidoc-mlton.flags \ - ; do \ - if grep -q 'MLTONVERSION' "$$f"; then \ - sed "s/\(.*\)MLTONVERSION\(.*\)/\1$(VERSION)\2/" <"$$f" >z && \ - mv z "$$f"; \ - fi; \ - done - if grep -q '^Release:$$' "$(SPEC)"; then \ - sed <"$(SPEC)" >z "/^Release:/s;.*;Release: $(RELEASE);"; \ - mv z "$(SPEC)"; \ - fi + $(SED) \ + -e "s/^MLTON_VERSION := .*/MLTON_VERSION := $(MLTON_VERSION)/" \ + -e "s/^RELEASE := .*/RELEASE := true/" \ + < "$(SRC)/Makefile.config" \ + > z && \ + $(MV) z "$(SRC)/Makefile.config"; -.PHONY: check -check: - ./bin/regression +###################################################################### + +# install and release targets -# The TBIN and TLIB are where the files are going to be after installing. -# The DESTDIR and is added onto them to indicate where the Makefile actually -# puts them. -DESTDIR := $(CURDIR)/install -PREFIX := /usr -ifeq ($(findstring $(TARGET_OS), darwin freebsd solaris), $(TARGET_OS)) -PREFIX := /usr/local -endif -ifeq ($(TARGET_OS), mingw) -PREFIX := /mingw -endif prefix := $(PREFIX) -MAN_PREFIX_EXTRA := -TBIN := $(DESTDIR)$(prefix)/bin -ULIB := lib/mlton -TLIB := $(DESTDIR)$(prefix)/$(ULIB) -TMAN := $(DESTDIR)$(prefix)$(MAN_PREFIX_EXTRA)/man/man1 -TDOC := $(DESTDIR)$(prefix)/share/doc/mlton -ifeq ($(findstring $(TARGET_OS), solaris mingw), $(TARGET_OS)) -TDOC := $(DESTDIR)$(prefix)/doc/mlton -endif +exec_prefix := $(prefix) +bindir := $(exec_prefix)/bin +datarootdir := $(prefix)/share +docdir := $(datarootdir)/doc/mlton +libdir := $(exec_prefix)/lib +mandir := $(datarootdir)/man +man1dir := $(mandir)/man1 + +TBIN := $(DESTDIR)$(bindir) +TLIB := $(DESTDIR)$(libdir)/mlton +TMAN := $(DESTDIR)$(man1dir) +TDOC := $(DESTDIR)$(docdir) TEXM := $(TDOC)/examples +TLIB_REL_TBIN := $(shell $(call TGT_REL_SRC,$(TLIB),$(TBIN))) + GZIP_MAN := true -ifeq ($(TARGET_OS), solaris) +ifeq ($(findstring $(TARGET_OS), openbsd solaris), $(TARGET_OS)) GZIP_MAN := false endif .PHONY: install install: install-no-strip install-strip -.PHONY: install-no-strip -install-no-strip: install-docs install-no-docs move-docs - -MAN_PAGES := \ +MAN_PAGES := mlton.1 +MAN_PAGES := $(MAN_PAGES) \ mllex.1 \ mlnlffigen.1 \ mlprof.1 \ - mlton.1 \ mlyacc.1 -.PHONY: install-no-docs -install-no-docs: - mkdir -p "$(TLIB)" "$(TBIN)" "$(TMAN)" +.PHONY: install-no-strip +install-no-strip: + $(MKDIR) "$(TBIN)" "$(TLIB)" + $(CP) "$(BIN)/." "$(TBIN)/" + $(SED) \ + -e "s;^LIB_REL_BIN=.*;LIB_REL_BIN=\"$(TLIB_REL_TBIN)\";" \ + < "$(BIN)/$(MLTON)" > "$(TBIN)/$(MLTON)" + $(CHMOD) a+x "$(TBIN)/$(MLTON)" $(CP) "$(LIB)/." "$(TLIB)/" - sed "/^lib=/s;.*;lib='$(prefix)/$(ULIB)';" \ - <"$(BIN)/mlton" >"$(TBIN)/mlton" - chmod a+x "$(TBIN)/mlton" - if [ -x "$(BIN)/mlton.trace" ]; then \ - sed "/^lib=/s;.*;lib='$(prefix)/$(ULIB)';" \ - <"$(BIN)/mlton.trace" >"$(TBIN)/mlton.trace"; \ - chmod a+x "$(TBIN)/mlton.trace"; \ - fi - if [ -x "$(BIN)/mlton.debug" ]; then \ - sed "/^lib=/s;.*;lib='$(prefix)/$(ULIB)';" \ - <"$(BIN)/mlton.debug" >"$(TBIN)/mlton.debug"; \ - chmod a+x "$(TBIN)/mlton.debug"; \ - fi - cd "$(BIN)" && $(CP) "$(LEX)$(EXE)" "$(NLFFIGEN)$(EXE)" \ - "$(PROF)$(EXE)" "$(YACC)$(EXE)" "$(TBIN)/" - ( cd "$(SRC)/man" && tar cf - $(MAN_PAGES)) | \ - ( cd "$(TMAN)/" && tar xf - ) - if $(GZIP_MAN); then \ - cd "$(TMAN)" && $(GZIP) $(MAN_PAGES); \ - fi + $(MKDIR) "$(TMAN)" + cd "$(SRC)/man" && $(CP) $(MAN_PAGES) "$(TMAN)/" +ifeq (true, $(GZIP_MAN)) + cd "$(TMAN)" && $(GZIP) --force --best $(MAN_PAGES); +endif + +STRIP_PROGS := "$(TLIB)/$(MLTON_OUTPUT)$(EXE)" +STRIP_PROGS := $(STRIP_PROGS) \ + "$(TBIN)/mllex$(EXE)" \ + "$(TBIN)/mlnlffigen$(EXE)" \ + "$(TBIN)/mlprof$(EXE)" \ + "$(TBIN)/mlyacc$(EXE)" .PHONY: install-strip -install-strip: - case "$(TARGET_OS)" in \ - aix|cygwin|darwin|solaris) \ - ;; \ - *) \ - for f in "$(TLIB)/$(AOUT)$(EXE)" "$(TBIN)/$(LEX)$(EXE)" \ - "$(TBIN)/$(NLFFIGEN)$(EXE)" "$(TBIN)/$(PROF)$(EXE)" \ - "$(TBIN)/$(YACC)$(EXE)"; do \ - strip --remove-section=.comment \ - --remove-section=.note "$$f"; \ - done \ - esac +install-strip: install-no-strip + for f in $(STRIP_PROGS); do $(STRIP) "$$f"; done + +REGRESSION_EXAMPLES := \ + callcc.sml command-line.sml hello-world.sml same-fringe.sml \ + signals.sml size.sml taut.sml thread1.sml thread2.sml \ + thread-switch.sml timeout.sml .PHONY: install-docs install-docs: - mkdir -p "$(TDOC)" + $(MKDIR) "$(TDOC)" "$(TDOC)/license" + ( \ + cd "$(SRC)" && \ + $(CP) CHANGELOG.adoc README.adoc "$(TDOC)/" && \ + $(CP) LICENSE "$(TDOC)/license/MLton-LICENSE" \ + ) + ( \ + cd "$(SRC)/doc" && \ + $(FIND) examples -type f '!' -name .gitignore \ + | $(XARGS) $(TAR) cf - \ + | ( cd "$(TDOC)/" && $(TAR) xf - ) \ + ) ( \ cd "$(SRC)/doc" && \ - $(CP) changelog examples license README "$(TDOC)/" \ + $(FIND) license -type f '!' -name .gitignore \ + | $(XARGS) $(TAR) cf - \ + | ( cd "$(TDOC)/" && $(TAR) xf - ) \ ) if [ -d "$(SRC)/doc/guide/localhost" ]; then \ $(CP) "$(SRC)/doc/guide/localhost" "$(TDOC)/guide"; \ fi - if [ -r "$(SRC)/doc/guide/mlton-guide.pdf" ]; then \ - $(CP) "$(SRC)/doc/guide/mlton-guide.pdf" "$(TDOC)/"; \ - fi ( \ cd "$(SRC)/util" && \ - $(CP) cmcat cm2mlb "$(TDOC)/" \ + $(FIND) cm2mlb -type f '!' -name .gitignore \ + | $(XARGS) $(TAR) cf - \ + | ( cd "$(TDOC)/" && $(TAR) xf - ) \ + ) + ( \ + cd "$(SRC)/regression" && \ + $(CP) $(REGRESSION_EXAMPLES) "$(TEXM)/" \ ) - for f in callcc command-line hello-world same-fringe signals \ - size taut thread1 thread2 thread-switch timeout \ - ; do \ - $(CP) "$(SRC)/regression/$$f.sml" "$(TEXM)/"; \ - done - if [ -r "$(LEX)/$(LEX).pdf" ]; then \ - $(CP) "$(LEX)/$(LEX).pdf" "$(TDOC)/"; \ - fi - if [ -r "$(YACC)/$(YACC).pdf" ]; then \ - $(CP) "$(YACC)/$(YACC).pdf" "$(TDOC)/"; \ - fi - find "$(TDOC)/" -name .gitignore | xargs rm -rf - find "$(TEXM)/" -name .gitignore | xargs rm -rf -.PHONY: move-docs -move-docs: install-docs install-no-docs - cd "$(TLIB)/sml"; for i in *; do test -d "$(TDOC)/$$i" || mkdir -p "$(TDOC)/$$i"; done - cd "$(TLIB)/sml"; for i in */[Dd]oc; do mv "$$i" "$(TDOC)/$$i"; done - cd "$(TLIB)/sml"; for i in */README*; do mv "$$i" "$(TDOC)/$$i"; done - -.PHONY: release -release: version - tar cvzf ../mlton-$(VERSION).src.tgz \ +.PHONY: source-release +source-release: + $(MAKE) clean + $(MAKE) MLTON_VERSION=$(MLTON_VERSION) version + $(MAKE) -C doc/guide + $(TAR) cvzf ../mlton-$(MLTON_VERSION).src.tgz \ --exclude .git --exclude package \ - --transform "s@^@mlton-$(VERSION)/@S" \ + --transform "s@^@mlton-$(MLTON_VERSION)/@S" \ * -BSDSRC := /tmp/mlton-$(VERSION) +MLTON_BINARY_RELEASE := 1 +MLTON_BINARY_RELEASE_SUFFIX := +MLTON_BINARY_RELEASE_NAME := mlton-$(MLTON_VERSION)-$(MLTON_BINARY_RELEASE).$(TARGET_ARCH)-$(TARGET_OS)$(MLTON_BINARY_RELEASE_SUFFIX) +MLTON_BINARY_RELEASE_WITH_DOCS := true +.PHONY: binary-release +binary-release: + $(MAKE) all +ifeq (true,$(MLTON_BINARY_RELEASE_WITH_DOCS)) + $(MAKE) docs +endif + $(RM) "$(SRC)/$(MLTON_BINARY_RELEASE_NAME)" + $(MKDIR) "$(SRC)/$(MLTON_BINARY_RELEASE_NAME)" + $(MAKE) DESTDIR="$(SRC)/$(MLTON_BINARY_RELEASE_NAME)" PREFIX="" install +ifeq (true,$(MLTON_BINARY_RELEASE_WITH_DOCS)) + $(MAKE) DESTDIR="$(SRC)/$(MLTON_BINARY_RELEASE_NAME)" PREFIX="" install-docs +endif + $(CP) "$(SRC)/Makefile.binary" "$(SRC)/$(MLTON_BINARY_RELEASE_NAME)/Makefile" + $(CP) "$(SRC)/CHANGELOG.adoc" "$(SRC)/LICENSE" "$(SRC)/README.adoc" "$(SRC)/$(MLTON_BINARY_RELEASE_NAME)/" + $(TAR) cvzf $(MLTON_BINARY_RELEASE_NAME).tgz $(MLTON_BINARY_RELEASE_NAME) + $(RM) $(MLTON_BINARY_RELEASE_NAME) + +###################################################################### + +# remote-bootstrap and remote-add-cross-target + +# The `remote-bootstrap` goal automates the process of bootstraping MLton on a +# remote machine that doesn't have a suitable pre-compiled `mlton` binary. It +# works as follows: +# * send the current sources to a remote machine (using ssh) +# * build the MLton runtime system on the remote machine +# * receive the built runtime system from the remote machine as a new target on +# the host machine +# * build bootstrap compiler sources on the host machine for the new target +# * send the boostrap sources to the remote machine +# * build the boostrap compiler on the remote machine using the boostrap +# compiler sources +# * complete the MLton build on the remote machine with the boostrap compiler to +# obtain a boot package +# * build MLton on the remote machine from clean sources using the boot package +# * receive the built binary release from the remote machine +# +# The `remote-add-cross-target` goal automates the process of adding a cross +# compiler target. It works as follows: +# * send the current sources to a remote machine (using ssh) +# * build the MLton runtime system on the remote machine +# * receive the built runtime system from the remote machine as a new target on +# the host machine +# +# +# For both `remote-bootstrap` and `remote-add-cross`, the following `Makefile` +# variables are used: +# * REMOTE_MACHINE (required): Specify the remote machine to be used as an +# `ssh` destination, either `[user@]hostname` or +# `ssh://[user@]hostname[:port]`. +# * REMOTE_TMP: Specify (absolute) path on remote machine for building; default +# is `/tmp`. +# * REMOTE_MAKE: Specify `make` on remote machine. +# * REMOTE_MAKEFLAGS: Specify `Makefile` variables to set when invoking `make` +# on the remote machine. +# For `remote-add-cross`, the following additional `Makefile` variable is used: +# * CROSS_TARGET (required): Specify target machine triple for host +# cross-compiler; that is the value of `` in `-gcc` or +# `` in `clang -target=` on the host machine, such as +# `arm-linux-gnu`. +# +# +# For example, on OpenBSD, GNU Make is named `gmake` (and `make` is BSD Make) +# and GMP is provided at `/usr/local` (and not on the default search paths). To +# boostrap on an OpenBSD virtual machine (with localhost port 2222 forwarded to +# guest VM port 22), one could use: +# +# $ make REMOTE_MACHINE=ssh://localhost:2222 REMOTE_MAKE=gmake REMOTE_MAKEFLAGS=WITH_GMP_DIR=/usr/local remote-bootstrap + +ifneq (,$(findstring remote-,$(MAKECMDGOALS))) + +ifneq (,$(findstring dirty,$(MLTON_VERSION))) +$(warning 'MLTON_VERSION' appears dirty; $(MLTON_VERSION)) +endif + +ifeq (,$(REMOTE_MACHINE)) +$(error 'REMOTE_MACHINE' not defined) +endif + +SSH := ssh + +ifeq (false,$(shell $(SSH) $(REMOTE_MACHINE) true > /dev/null 2>&1 || echo false)) +$(error '$(SSH) $(REMOTE_MACHINE) true' failed) +endif + +REMOTE_TMP := /tmp +REMOTE_ROOT := $(REMOTE_TMP)/mlton-$(MLTON_VERSION) + +REMOTE_BASH := bash +REMOTE_TAR := $(TAR) + +REMOTE_CP := $(CP) +REMOTE_MKDIR := $(MKDIR) +REMOTE_RM := $(RM) + +REMOTE_MAKE := make +REMOTE_MAKEFLAGS := +REMOTE_XMAKEFLAGS := CHECK_MLCMD= + +REMOTE_PLATFORM := $(shell cat bin/platform | $(SSH) $(REMOTE_MACHINE) "$(REMOTE_BASH) -s") +REMOTE_ARCH := $(patsubst HOST_ARCH=%,%,$(filter HOST_ARCH=%,$(REMOTE_PLATFORM))) +REMOTE_OS := $(patsubst HOST_OS=%,%,$(filter HOST_OS=%,$(REMOTE_PLATFORM))) +REMOTE_TARGET := $(REMOTE_ARCH)-$(REMOTE_OS) +CROSS_TARGET := $(REMOTE_ARCH)-$(REMOTE_OS) + +.PHONY: remote-bootstrap +remote-bootstrap: + $(MAKE) remote--send-src + $(MAKE) remote--make-version + $(MAKE) remote--make-dirs + $(MAKE) remote--make-runtime + $(MAKE) remote--recv-runtime + $(MAKE) remote--gen-bootstrap-compiler-files + $(MAKE) remote--send-bootstrap-compiler-files + $(MAKE) remote--make-bootstrap-compiler + $(MAKE) remote--make-script + $(MAKE) remote--make-basis + $(MAKE) remote--make-libraries + $(MAKE) remote--send-mlyacc-yacc-files + $(MAKE) remote--make-tools + $(MAKE) remote--recv-boot-files + $(MAKE) remote--make-clean + $(MAKE) remote--send-boot-files + $(MAKE) remote--make-all + $(MAKE) remote--make-binary-release + $(MAKE) remote--recv-binary-release + $(MAKE) remote--rm-root + +.PHONY: remote-add-target +remote-add-target: + $(MAKE) remote--send-src + $(MAKE) remote--make-version + $(MAKE) remote--make-dirs + $(MAKE) remote--make-runtime + $(MAKE) remote--recv-runtime +ifneq ($(REMOTE_TARGET),$(CROSS_TARGET)) + $(MV) "$(LIB)/targets/$(REMOTE_TARGET)" "$(LIB)/targets/$(CROSS_TARGET)" +endif + $(MAKE) remote--rm-root + + +.PHONY: remote--send-src +remote--send-src: + $(SSH) $(REMOTE_MACHINE) "$(REMOTE_RM) $(REMOTE_ROOT) && $(REMOTE_MKDIR) $(REMOTE_ROOT)" + $(GIT) archive --format=tar HEAD | $(SSH) $(REMOTE_MACHINE) "cd $(REMOTE_ROOT) && $(REMOTE_TAR) xf -" + +.PHONY: remote--send-mlyacc-yacc-files +remote--send-mlyacc-yacc-files: + $(MAKE) -C mlyacc src/yacc.lex.sml src/yacc.grm.sig src/yacc.grm.sml + $(TAR) cf - mlyacc/src/yacc.lex.* mlyacc/src/yacc.grm.* | $(SSH) $(REMOTE_MACHINE) "cd $(REMOTE_ROOT) && $(REMOTE_TAR) xf -" + $(SSH) $(REMOTE_MACHINE) "cd $(REMOTE_ROOT) && touch mlyacc/src/yacc.lex.* mlyacc/src/yacc.grm.*" + +.PHONY: remote--recv-runtime +remote--recv-runtime: + $(RM) "$(LIB)/targets/$(REMOTE_TARGET)" && $(MKDIR) "$(LIB)/targets/$(REMOTE_TARGET)" + $(SSH) $(REMOTE_MACHINE) "cd $(REMOTE_ROOT)/build/lib/mlton/targets/self && $(REMOTE_TAR) cf - ." | (cd "$(LIB)/targets/$(REMOTE_TARGET)" && $(TAR) xf -) + +.PHONY: remote-bootstrap-gen-bootstrap-compiler-files +remote--gen-bootstrap-compiler-files: + $(MAKE) REMOTE_TARGET=$(REMOTE_TARGET) -C mlton mlton-bootstrap-$(REMOTE_TARGET).tgz + +.PHONY: remote--send-bootstrap-compiler-files +remote--send-bootstrap-compiler-files: + $(SSH) $(REMOTE_MACHINE) "cd $(REMOTE_ROOT) && $(REMOTE_RM) runtime/bootstrap && $(REMOTE_MKDIR) runtime/bootstrap" + cat mlton/mlton-bootstrap-$(REMOTE_TARGET).tgz | $(SSH) $(REMOTE_MACHINE) "cd $(REMOTE_ROOT)/runtime/bootstrap && $(REMOTE_TAR) xzf -" + +.PHONY: remote--recv-boot-files +remote--recv-boot-files: + $(SSH) $(REMOTE_MACHINE) "cd $(REMOTE_ROOT) && $(REMOTE_RM) boot && $(REMOTE_CP) build boot" + $(SSH) $(REMOTE_MACHINE) "cd $(REMOTE_ROOT) && $(REMOTE_TAR) czf - boot" | cat - > "$(LIB)/targets/$(REMOTE_TARGET)/boot.tgz" + +.PHONY: remote--send-boot-files +remote--send-boot-files: + $(SSH) $(REMOTE_MACHINE) "cd $(REMOTE_ROOT) && $(REMOTE_RM) boot" + cat "$(LIB)/targets/$(REMOTE_TARGET)/boot.tgz" | $(SSH) $(REMOTE_MACHINE) "cd $(REMOTE_ROOT) && $(REMOTE_TAR) xzf -" + +.PHONY: remote--recv-binary-release +remote--recv-binary-release: + $(SSH) $(REMOTE_MACHINE) "cd $(REMOTE_ROOT) && cat mlton-$(MLTON_VERSION)-$(MLTON_BINARY_RELEASE).$(REMOTE_ARCH)-$(REMOTE_OS)$(MLTON_BINARY_RELEASE_SUFFIX).tgz" | cat - > mlton-$(MLTON_VERSION)-$(MLTON_BINARY_RELEASE).$(REMOTE_ARCH)-$(REMOTE_OS)$(MLTON_BINARY_RELEASE_SUFFIX).tgz + +.PHONY: remote--rm-root +remote--rm-root: + $(SSH) $(REMOTE_MACHINE) "$(REMOTE_RM) $(REMOTE_ROOT)" + +define MK_REMOTE_MAKE_TEMPLATE +.PHONY: remote--make-$(1) +remote--make-$(1): + $$(SSH) $$(REMOTE_MACHINE) "cd $$(REMOTE_ROOT) && $$(REMOTE_MAKE) $$(REMOTE_MAKEFLAGS) $$(REMOTE_XMAKEFLAGS) $$($(1)_REMOTE_XMAKEFLAGS) $(1)" +endef + +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,show-config)) +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,clean)) +version_REMOTE_XMAKEFLAGS := MLTON_VERSION=$(MLTON_VERSION) +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,version)) +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,dirs)) +runtime_REMOTE_XMAKEFLAGS := RELEASE=false +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,runtime)) +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,bootstrap-compiler)) +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,script)) +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,basis)) +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,libraries)) +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,check)) +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,tools)) +all_REMOTE_XMAKEFLAGS := OLD_MLTON_DIR=$(REMOTE_ROOT)/boot/bin +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,all)) +binary-release_REMOTE_XMAKEFLAGS := MLTON_BINARY_RELEASE_WITH_DOCS=false +$(eval $(call MK_REMOTE_MAKE_TEMPLATE,binary-release)) + +endif + +.PHONY: bootstrap-compiler +bootstrap-compiler: + $(MAKE) -C "$(SRC)/runtime" "bootstrap/$(MLTON_OUTPUT)" + $(CP) "$(SRC)/runtime/bootstrap/$(MLTON_OUTPUT)$(EXE)" "$(LIB)/" + +###################################################################### + +# ????? + +BSDSRC := /tmp/mlton-$(MLTON_VERSION) +MLTON_FREEBSD_RELEASE := 1 .PHONY: freebsd freebsd: $(MAKE) clean clean-git version - rm -rf "$(BSDSRC)" - mkdir -p "$(BSDSRC)" - ( cd $(SRC) && tar -cpf - . ) | ( cd "$(BSDSRC)" && tar -xpf - ) - cd /tmp && tar -cpf - mlton-$(VERSION) | \ - $(GZIP) >/usr/ports/distfiles/mlton-$(VERSION)-$(RELEASE).freebsd.src.tgz + $(RM) "$(BSDSRC)" + $(MKDIR) "$(BSDSRC)" + ( cd $(SRC) && $(TAR) -cpf - . ) | ( cd "$(BSDSRC)" && $(TAR) -xpf - ) + cd /tmp && $(TAR) -cpf - mlton-$(MLTON_VERSION) | \ + $(GZIP) --force --best >/usr/ports/distfiles/mlton-$(MLTON_VERSION)-$(MLTON_FREEBSD_RELEASE).freebsd.src.tgz # do not change "make" to "$(MAKE)" in the following line cd "$(BSDSRC)/package/freebsd" && MAINTAINER_MODE=yes make build-package - - -TOPDIR := 'TOPDIR-unset' -SOURCEDIR := $(TOPDIR)/SOURCES/mlton-$(VERSION) -.PHONY: rpms -rpms: - $(MAKE) clean clean-git version - mkdir -p "$(TOPDIR)" - cd "$(TOPDIR)" && mkdir -p BUILD RPMS/i386 SOURCES SPECS SRPMS - rm -rf "$(SOURCEDIR)" - mkdir -p "$(SOURCEDIR)" - ( cd "$(SRC)" && tar -cpf - . ) | ( cd "$(SOURCEDIR)" && tar -xpf - ) - $(CP) "$(SOURCEDIR)/$(SPEC)" "$(TOPDIR)/SPECS/mlton.spec" - ( cd "$(TOPDIR)/SOURCES" && tar -cpf - mlton-$(VERSION) ) \ - | $(GZIP) >"$(SOURCEDIR).tgz" - rm -rf "$(SOURCEDIR)" - rpm -ba --quiet --clean "$(TOPDIR)/SPECS/mlton.spec" diff -Nru mlton-20130715/Makefile.binary mlton-20210117+dfsg/Makefile.binary --- mlton-20130715/Makefile.binary 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/Makefile.binary 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,93 @@ +# Specify C compiler and binutils. +# Can be used for alternative tools (e.g., `CC=clang` or `CC=gcc-7`). +CC := cc + +# Specify GMP include and library paths, if not on default search paths. +WITH_GMP_DIR := +ifneq ($(WITH_GMP_DIR),) +WITH_GMP_INC_DIR := $(WITH_GMP_DIR)/include +WITH_GMP_LIB_DIR := $(WITH_GMP_DIR)/lib +endif + +# Specify installation prefix and staged install destination. +PREFIX := /usr/local + +SED := sed + +###################################################################### +###################################################################### + +ROOT := $(shell pwd) + +CP := cp -fpR +MKDIR := mkdir -p +RM := rm -rf + +###################################################################### + +TGT_REL_SRC = ref="$(1)" pos="$(2)" down=; ref="$${ref%%/}" pos="$${pos%%/}"; while :; do test "$$pos" = '/' && break ; case "$$ref" in "$$pos"/*) break;; esac; down="../$$down"; pos="$${pos%/*}"; done; echo "$$down$${ref\#\#$$pos/}" + +SBIN := $(ROOT)/bin +SLIB := $(ROOT)/lib/mlton +SMAN := $(ROOT)/share/man/man1 +SDOC := $(ROOT)/share/doc/mlton + +SLIB_REL_SBIN := $(shell $(call TGT_REL_SRC,$(SLIB),$(SBIN))) + +prefix := $(PREFIX) +exec_prefix := $(prefix) +bindir := $(exec_prefix)/bin +datarootdir := $(prefix)/share +docdir := $(datarootdir)/doc/mlton +libdir := $(exec_prefix)/lib +mandir := $(datarootdir)/man +man1dir := $(mandir)/man1 + +TBIN := $(bindir) +TLIB := $(libdir)/mlton +TMAN := $(man1dir) +TDOC := $(docdir) +TEXM := $(TDOC)/examples + +TLIB_REL_TBIN := $(shell $(call TGT_REL_SRC,$(TLIB),$(TBIN))) + +.PHONY: install +install: + $(MKDIR) "$(TBIN)" "$(TLIB)" "$(TMAN)" "$(TDOC)" + $(CP) "$(SBIN)/." "$(TBIN)/" + $(SED) \ + -e "s;^LIB_REL_BIN=.*;LIB_REL_BIN=\"$(TLIB_REL_TBIN)\";" \ + < "$(SBIN)/mlton" > "$(TBIN)/mlton" + chmod a+x "$(TBIN)/mlton" + $(CP) "$(SLIB)/." "$(TLIB)/" + $(CP) "$(SMAN)/." "$(TMAN)/" + if [ -d "$(SDOC)" ]; then $(CP) "$(SDOC)/." "$(TDOC)/"; fi + +.PHONY: update +update: + $(CP) "$(SBIN)/mlton" "$(SBIN)/mlton.bak" + $(SED) \ + -e "s;^CC=.*;CC=\"$(CC)\";" \ + -e "s;^GMP_INC_DIR=.*;GMP_INC_DIR=$(if $(WITH_GMP_INC_DIR),\"$(WITH_GMP_INC_DIR)\");" \ + -e "s;^GMP_LIB_DIR=.*;GMP_LIB_DIR=$(if $(WITH_GMP_LIB_DIR),\"$(WITH_GMP_LIB_DIR)\");" \ + < "$(SBIN)/mlton.bak" > "$(SBIN)/mlton" + chmod a+x "$(SBIN)/mlton" + $(RM) "$(SBIN)/mlton.bak" + $(CP) "$(SLIB)/targets/self/constants" "$(SLIB)/targets/self/constants.bak" + $(SED) \ + -e "s;^default::pie=.*;default::pie=$(subst __pie__,0,$(shell echo "__pie__" | $(CC) -P -E -));" \ + -e "s;^default::pic=.*;default::pic=$(subst __pic__,0,$(shell echo "__pic__" | $(CC) -P -E -));" \ + < "$(SLIB)/targets/self/constants.bak" > "$(SLIB)/targets/self/constants" + $(RM) "$(SLIB)/targets/self/constants.bak" + if [ $$(echo "__pie__" | $(CC) -P -E -) != "__pie__" ]; then \ + pi="-pie"; \ + elif if [ $$(echo "__pic__" | $(CC) -P -E -) != "__pic__" ]; then \ + pi="-pic"; \ + else \ + pi="-npi"; \ + fi ; \ + for lib in mlton gdtoa; do \ + for md in "" -dbg; do \ + $(CP) "$(SLIB)/targets/self/lib$${lib}$${md}$${pi}.a" "$(SLIB)/targets/self/lib$${lib}$${md}.a"; \ + done; \ + done diff -Nru mlton-20130715/Makefile.config mlton-20210117+dfsg/Makefile.config --- mlton-20130715/Makefile.config 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/Makefile.config 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,227 @@ +## Copyright (C) 2009,2011,2013,2017-2020 Matthew Fluet. + # Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + # Jagannathan, and Stephen Weeks. + # Copyright (C) 1997-2000 NEC Research Institute. + # + # MLton is released under a HPND-style license. + # See the file MLton-LICENSE for details. + ## + +# Specify C compiler and binutils. +# Can be used for alternative tools (e.g., `CC=clang` or `CC=gcc-7`). +CC := cc +AR := ar +RANLIB := ranlib +STRIP := strip + +# Specify GMP include and library paths, if not on default search paths. +WITH_GMP_DIR := +ifneq ($(WITH_GMP_DIR),) +WITH_GMP_INC_DIR := $(WITH_GMP_DIR)/include +WITH_GMP_LIB_DIR := $(WITH_GMP_DIR)/lib +endif + +# Specify installation prefix and staged install destination. +PREFIX := /usr/local +DESTDIR := + +# Specify runtime and compile arguments given to (the to-be-built) `mlton` +# when compiling distributed executables ((self-compiled) `mlton`, `mllex`, +# `mlyacc`, `mlprof`, and `mlnlffigen`). +# Can be used for testing (e.g., `MLTON_COMPILE_ARGS="-codegen c"`) or for +# downstream packaging. +MLTON_RUNTIME_ARGS := +MLTON_COMPILE_ARGS := + +# Specify runtime and compile arguments given to "old" `mlton` when +# compiling "new" `mlton`. +# Can be used to work around bugs in "old" `mlton` when compiling "new" +# `mlton` (e.g., `OLD_MLTON_COMPILE_ARGS="-drop-pass 'deepFlatten'"`). +OLD_MLTON := mlton +OLD_MLTON_RUNTIME_ARGS := +OLD_MLTON_COMPILE_ARGS := +OLD_MLLEX := mllex +OLD_MLYACC := mlyacc + +OLD_MLTON_DIR := +ifneq (,$(OLD_MLTON_DIR)) +OLD_MLTON := $(OLD_MLTON_DIR)/$(OLD_MLTON) +OLD_MLLEX := $(OLD_MLTON_DIR)/$(OLD_MLLEX) +OLD_MLYACC := $(OLD_MLTON_DIR)/$(OLD_MLYACC) +endif + +# Specify standard tools. +# Can be used for alternative tools (e.g., `SED=gsed`). +DIFF := diff +FIND := find +GIT := git +GREP := grep +GZIP := gzip +PATCH := patch +SED := sed +TAR := tar +XARGS := xargs + +SHA1SUM := sha1sum +SHA1 := sha1 +OPENSSL := openssl +SHASUM := shasum + +CHMOD := chmod +CP := cp -fpR +MKDIR := mkdir -p +MV := mv -f +RM := rm -rf + +###################################################################### + +RELEASE := false + +MLTON_FORK := +ifeq (,$(MLTON_FORK)) +MLTON := mlton +MLTON_NAME := MLton +else +MLTON := mlton-$(MLTON_FORK) +MLTON_NAME := MLton [$(MLTON_FORK)] +endif +MLTON_OUTPUT := $(MLTON)-compile +MLTON_VERSION := $(shell TZ=UTC $(GIT) log -n1 --date=format-local:"%Y%m%d.%H%M%S" --pretty=format:"%cd-g%h$$([ "$$($(GIT) status --porcelain 2> /dev/null)" ] && echo '-dirty')" 2> /dev/null || echo '????????') + +###################################################################### +###################################################################### + +define HAVE_CMD +$(shell if [ -x "$$(command -v "$(1)")" ]; then echo true; else echo false; fi) +endef + +SHA1DGST := +ifeq (,$(SHA1DGST)) +ifeq (true, $(call HAVE_CMD,$(SHA1SUM))) +SHA1DGST := $(SHA1SUM) | $(SED) 's/.*\([a-z0-9]\{40\}\).*/\1/' +else ifeq (true, $(call HAVE_CMD,$(SHA1))) +SHA1DGST := $(SHA1) | $(SED) 's/.*\([a-z0-9]\{40\}\).*/\1/' +else ifeq (true, $(call HAVE_CMD,$(OPENSSL))) +SHA1DGST := $(OPENSSL) sha1 | $(SED) 's/.*\([a-z0-9]\{40\}\).*/\1/' +else ifeq (true, $(call HAVE_CMD,$(SHASUM))) +SHA1DGST := $(SHASUM) -a | $(SED) 's/.*\([a-z0-9]\{40\}\).*/\1/' +else +$(error Could not determine suitable SHA-1 digest command) +endif +endif + +###################################################################### +###################################################################### + +TGT_REL_SRC = ref="$(1)" pos="$(2)" down=; ref="$${ref%%/}" pos="$${pos%%/}"; while :; do test "$$pos" = '/' && break ; case "$$ref" in "$$pos"/*) break;; esac; down="../$$down"; pos="$${pos%/*}"; done; echo "$$down$${ref\#\#$$pos/}" + +SRC := $(shell cd $(ROOT) && pwd) +BUILD := $(SRC)/build +BIN := $(BUILD)/bin +LIB := $(BUILD)/lib/mlton +INC := $(LIB)/include +LIB_REL_BIN := $(shell $(call TGT_REL_SRC,$(LIB),$(BIN))) + +HOST_ARCH := $(shell $(SRC)/bin/host-arch) +HOST_OS := $(shell $(SRC)/bin/host-os) + +ifeq (0, $(MAKELEVEL)) +define CHECK_HOST +ifeq ($$($(1)),) +$$(error Could not determine '$(1)') +endif +endef +$(eval $(call CHECK_HOST,HOST_ARCH)) +$(eval $(call CHECK_HOST,HOST_OS)) +endif + +TARGET := self +TARGET_ARCH := $(HOST_ARCH) +TARGET_OS := $(HOST_OS) + +ifeq (mingw, $(TARGET_OS)) +EXE := .exe +else +EXE := +endif + +###################################################################### + +## BOOTSTRAP_STYLE +## 0 -- Use $(OLD_MLTON) for round1 (and stop) +## 1 -- Use $(BIN)/$(MLTON) for round1 (and stop); +## default if $(BIN)/$(MLTON) exists +## 2 -- Use $(OLD_MLTON) for round1; use $(BIN)/$(MLTON) for round2; +## default if $(BIN)/$(MLTON) does not exist +## 3 -- Use $(OLD_MLTON) or use $(BIN)/$(MLTON) for round1; +## use $(BIN)/$(MLTON) for round2; +## use $(BIN)/$(MLTON) for round3 (and check fixpoint) + +ifeq (true, $(shell [ -x "$(BIN)/$(MLTON)" ] && echo true)) +BOOTSTRAP_STYLE := 1 +else +BOOTSTRAP_STYLE := 2 +endif + +ifeq (0, $(BOOTSTRAP_STYLE)) +SELF_COMPILE := false +else ifeq (1, $(BOOTSTRAP_STYLE)) +SELF_COMPILE := true +else ifeq (2, $(BOOTSTRAP_STYLE)) +SELF_COMPILE := false +else ifeq (3, $(BOOTSTRAP_STYLE)) +SELF_COMPILE := false +endif + +ifeq (true, $(SELF_COMPILE)) +RUN_MLTON := $(BIN)/$(MLTON) +RUN_MLTON_RUNTIME_ARGS := $(MLTON_RUNTIME_ARGS) +RUN_MLTON_COMPILE_ARGS := $(MLTON_COMPILE_ARGS) +ifeq (true, $(shell [ -x "$(BIN)/mllex" ] && echo true)) +RUN_MLLEX := $(BIN)/mllex +else +RUN_MLLEX := $(OLD_MLLEX) +endif +ifeq (true, $(shell [ -x "$(BIN)/mlyacc" ] && echo true)) +RUN_MLYACC := $(BIN)/mlyacc +else +RUN_MLYACC := $(OLD_MLYACC) +endif +else +RUN_MLTON := $(OLD_MLTON) +RUN_MLTON_RUNTIME_ARGS := $(OLD_MLTON_RUNTIME_ARGS) +RUN_MLTON_COMPILE_ARGS := $(OLD_MLTON_COMPILE_ARGS) +RUN_MLLEX := $(OLD_MLLEX) +RUN_MLYACC := $(OLD_MLYACC) +endif + +ifeq (0, $(MAKELEVEL)) +define CHECK_MLCMD +ifeq (false, $$(call HAVE_CMD,$$($(2)))) +$$(warning '$(1)' command not found: $$($(2))) +endif +endef +$(eval $(call CHECK_MLCMD,mlton,RUN_MLTON)) +$(eval $(call CHECK_MLCMD,mllex,RUN_MLLEX)) +$(eval $(call CHECK_MLCMD,mlyacc,RUN_MLYACC)) +endif + +ifeq (true,$(call HAVE_CMD,$(RUN_MLTON))) +RUN_MLTON_VERSION := $(shell "$(RUN_MLTON)" | $(SED) -n 's/MLton.*\([0-9]\{8\}\).*/\1/p') +RUN_MLTON_DEPS := $(RUN_MLTON) +else +RUN_MLTON_VERSION := "????????" +RUN_MLTON_DEPS := : +endif + +###################################################################### + +SHOW_VARS := MLTON_NAME MLTON_VERSION SRC BUILD BIN LIB INC LIB_REL_BIN HOST_ARCH HOST_OS TARGET TARGET_ARCH TARGET_OS BOOTSTRAP_STYLE SELF_COMPILE RUN_MLTON RUN_MLTON_VERSION RUN_MLLEX RUN_MLYACC + +SHOW_VAR = echo "$(1) = $(strip $($(1)))"; + +define MK_SHOW_CONFIG +.PHONY: show-config +show-config: + @$$(foreach VAR, $$(SHOW_VARS), $$(call SHOW_VAR,$$(VAR))) +endef diff -Nru mlton-20130715/man/Makefile mlton-20210117+dfsg/man/Makefile --- mlton-20130715/man/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/man/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/man/mllex.1 mlton-20210117+dfsg/man/mllex.1 --- mlton-20130715/man/mllex.1 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/man/mllex.1 2021-12-28 17:19:36.000000000 +0000 @@ -1,4 +1,4 @@ -.TH mllex 1 "February 23, 2008" +.TH mllex 1 "January 17, 2021" .SH NAME \fBmllex\fP \- lexer generator for use with Standard ML and MLton .SH SYNOPSIS @@ -9,7 +9,7 @@ output in \fBfoo.lex.sml\fP a lexer written in SML. For details on the lexer specification, see \fBA Lexical Analyzer Generator for -Standard ML\fP, which is in \fB/usr/share/doc/mllex.pdf\fP. +Standard ML\fP, which is in \fB/usr/share/doc/mlton/mllex.pdf\fP. .SH "SEE ALSO" diff -Nru mlton-20130715/man/mlnlffigen.1 mlton-20210117+dfsg/man/mlnlffigen.1 --- mlton-20130715/man/mlnlffigen.1 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/man/mlnlffigen.1 2021-12-28 17:19:36.000000000 +0000 @@ -1,4 +1,4 @@ -.TH mlnlffigen 1 "August 25, 2005" +.TH mlnlffigen 1 "January 17, 2021" .SH NAME \fBmlnlffigen\fP \- glue-code generator for use with the new "NLFFI" foreign function interface for Standard ML and MLton .SH SYNOPSIS diff -Nru mlton-20130715/man/mlprof.1 mlton-20210117+dfsg/man/mlprof.1 --- mlton-20130715/man/mlprof.1 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/man/mlprof.1 2021-12-28 17:19:36.000000000 +0000 @@ -1,4 +1,4 @@ -.TH mlprof 1 "July 15, 2013" +.TH mlprof 1 "January 17, 2021" .SH NAME \fBmlprof\fP \- display profiling information for a MLton-compiled executable .SH SYNOPSIS diff -Nru mlton-20130715/man/mlton.1 mlton-20210117+dfsg/man/mlton.1 --- mlton-20130715/man/mlton.1 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/man/mlton.1 2021-12-28 17:19:36.000000000 +0000 @@ -1,4 +1,4 @@ -.TH mlton 1 "July 15, 2013" +.TH mlton 1 "January 17, 2021" .SH NAME \fBmlton\fP \- whole-program compiler for the Standard ML (SML) programming language @@ -54,10 +54,11 @@ Pass \fIoption\fP to \fBgcc\fP when compiling C code. .TP -\fB\-codegen \fI{\fBnative\fP|\fBx86\fP|\fBamd64\fP|\fBc\fP}\fP\fR -Generate native code or C code. With \fB\-codegen -native\fP (\fB\-codegen x86\fP or \fB\-codegen amd64\fP), \fBMLton\fP -typically compiles more quickly and generates better code. +\fB\-codegen \fI{\fBnative\fP|\fBx86\fP|\fBamd64\fP|\fBc\fP|\fBllvm\fP}\fP\fR +Generate native object code via amd64 assembly, C code, LLVM code, or +x86 assembly. With \fB\-codegen native\fP (\fB\-codegen amd64\fP or +\fB\-codegen x86\fP), \fBMLton\fP typically compiles more quickly and +generates better code. .TP \fB\-const '\fIname value\fP'\fR @@ -120,7 +121,7 @@ Save intermediate files. If no \fB\-keep\fP argument is given, then only the output file is saved. .in +.5i -\fBg\fP generated \fB.c\fP and \fB.s\fP files passed to \fBgcc\fP +\fBg\fP generated \fB.c\fP and \fB.s\fP files passed to \fBgcc\fP and generated \fB.ll\fP files passed to \fBllvm-as\fP .br \fBo\fP object (\fB.o\fP) files .in -.5i @@ -135,6 +136,18 @@ syntax, e.g., \fB\-link\-opt '\-Wl,\-\-export\-dynamic'\fP. .TP +\fB\-llvm\-as\-opt \fIoption\fP\fR +Pass \fIoption\fP to \fBllvm-as\fP when assembling (\fB.ll\fP to \fB.bc\fP) LLVM code. + +.TP +\fB\-llvm\-llc\-opt \fIoption\fP\fR +Pass \fIoption\fP to \fBllc\fP when compiling (\fB.bc\fP to \fB.o\fP) LLVM code. + +.TP +\fB\-llvm\-opt\-opt \fIoption\fP\fR +Pass \fIoption\fP to \fBopt\fP when optimizing (\fB.bc\fP to \fB.bc\fP) LLVM code. + +.TP \fB\-mlb\-path\-map \fIfile\fP\fR Use \fIfile\fP as an ML Basis path map to define additional MLB path variables. Multiple uses of \fB\-mlb\-path\-map\fP and \fB\-mlb\-path\-var\fP are @@ -332,6 +345,11 @@ termination. .TP +\fBgc\-summary\-file \fIfile\fP\fP +Print a summary of garbage collection statistics upon program +termination to the file specified by \fIfile\fP. + +.TP \fBload\-world \fIworld\fP\fR Restart the computation with the file specified by \fIworld\fP, which must have been created by a call to \fBMLton.World.save\fP by the same diff -Nru mlton-20130715/man/mlyacc.1 mlton-20210117+dfsg/man/mlyacc.1 --- mlton-20130715/man/mlyacc.1 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/man/mlyacc.1 2021-12-28 17:19:36.000000000 +0000 @@ -1,4 +1,4 @@ -.TH mlyacc 1 "February 23, 2008" +.TH mlyacc 1 "January 17, 2021" .SH NAME \fBmlyacc\fP \- parser generator for use with Standard ML and MLton .SH SYNOPSIS @@ -9,7 +9,7 @@ output in \fBfoo.grm.sig\fP and \fBfoo.grm.sml\fP a parser written in SML. For details on the parser specification, see the \fBML-Yacc User's Manual\fP, -which is in \fB/usr/share/doc/mlyacc.pdf\fP. +which is in \fB/usr/share/doc/mlton/mlyacc.pdf\fP. .SH "SEE ALSO" diff -Nru mlton-20130715/mllex/call-main.sml mlton-20210117+dfsg/mllex/call-main.sml --- mlton-20130715/mllex/call-main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mllex/call-main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mllex/doc/.gitignore mlton-20210117+dfsg/mllex/doc/.gitignore --- mlton-20130715/mllex/doc/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mllex/doc/.gitignore 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,12 @@ +/ml-lex.aux +/ml-lex.dvi +/ml-lex.log +/ml-lex.pdf +/ml-lex.ps +/ml-lex.toc +/mllex.aux +/mllex.dvi +/mllex.log +/mllex.pdf +/mllex.ps +/mllex.toc diff -Nru mlton-20130715/mllex/doc/lexgen.doc mlton-20210117+dfsg/mllex/doc/lexgen.doc --- mlton-20130715/mllex/doc/lexgen.doc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mllex/doc/lexgen.doc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,539 @@ + A lexical analyzer generator for Standard ML. + +THIS TEXT FILE IS OBSOLETE and IS NOT MAINTAINED. +The current (maintained) documentation is in lexgen.tex. + + + Andrew W. Appel + James S. Mattson + David R. Tarditi + + Princeton University + + Version 1.6, October 1994 + +Copyright (c) 1989-1992 by Andrew W. Appel, James S. Mattson, David R. Tarditi + +This software comes with ABSOLUTELY NO WARRANTY. +This software is subject only to the PRINCETON STANDARD ML SOFTWARE LIBRARY +COPYRIGHT NOTICE, LICENSE AND DISCLAIMER, (in the file "COPYRIGHT", +distributed with this software). You may copy and distribute this software; +see the COPYRIGHT NOTICE for details and restrictions. + +I. General Description + +Computer programs often need to divide their input into words and +distinguish between different kinds of words. Compilers, for +example, need to distinguish between integers, reserved words, and +identifiers. Applications programs often need to be able to +recognize components of typed commands from users. + +The problem of segmenting input into words and recognizing classes of +words is known as lexical analysis. Small cases of this problem, +such as reading text strings separated by spaces, can be solved by +using hand-written programs. Larger cases of this problem, such as +tokenizing an input stream for a compiler, can also be solved using +hand-written programs. + +A hand-written program for a large lexical analysis problem, however, +suffers from two major problems. First, the program requires a fair +amount of programmer time to create. Second, the description of +classes of words is not explicit in the program. It must be inferred +from the program code. This makes it difficult to verify if the +program recognizes the correct words for each class. It also makes +future maintenance of the program difficult. + +Lex, a programming tool for the Unix system, is a successful solution +to the general problem of lexical analysis. It uses regular +expressions to describe classes of words. A program fragment is +associated with each class of words. This information is given to +Lex as a specification (a Lex program). Lex produces a program for a +function that can be used to perform lexical analysis. + +The function operates as follows. It finds the longest word starting +from the current position in the input stream that is in one of the +word classes. It executes the program fragment associated with the +class, and sets the current position in the input stream to be the +character after the word. The program fragment has the actual text +of the word available to it, and may be any piece of code. For many +applications it returns some kind of value. + +Lex allows the programmer to make the language description explicit, +and to concentrate on what to do with the recognized words, not how +to recognize the words. It saves programmer time and increases +program maintainability. + +Unfortunately, Lex is targeted only C. It also places artificial +limits on the size of strings that can be recognized. + +ML-Lex is a variant of Lex for the ML programming language. ML-Lex +has a syntax similar to Lex, and produces an ML program instead of a +C program. ML-Lex produces a program that runs very efficiently. +Typically the program will be as fast or even faster than a +hand-coded lexer implemented in Standard ML. + +The program typically uses only a small amount of space. +ML-Lex thus allows ML programmers the same benefits that Lex allows C +programmers. It also does not place artificial limits on the size of +recognized strings. + +II. ML-Lex specifications + +An ML-Lex specification has the general format: + + {user declarations} + %% + {ML-Lex definitions} + %% + {rules} + +Each section is separated from the others by a '%%' delimiter. + +The rules are used to define the lexical analysis function. Each +rule has two parts - a regular expression and an action. The regular +expression defines the word class that a rule matches. The action is +a program fragment to be executed when a rule matches the input. The +actions are used to compute values, and must all return values of the +same type. + +The user can define values available to all rule actions in the user +declarations section. The user must define two values in this +section - a type lexresult and a function eof. Lexresult defines the +type of values returned by the rule actions. The function "eof" is +called by the lexer when the end of the input stream is reached. It +will typically return a value signalling eof or raise an exception. +It is called with the same argument as lex (see %arg, below), +and must return a value of type lexresult. + +In the definitions section, the user can define named regular +expressions, a set of start states, and specify which of the various +bells and whistles of ML-Lex are desired. + +The start states allow the user to control when certain rules are +matched. Rules may be defined to match only when the lexer is in +specific start states. The user may change the lexer's start state +in a rule action. This allows the user to specify special handling +of lexical objects. + +This feature is typically used to handle quoted strings with escapes +to denote special characters. The rules to recognize the inside +contents of a string are defined for only one start state. This +start state is entered when the beginning of a string is recognized, +and exited when the end of the string is recognized. + +III. Regular expressions. + +Regular expressions are a simple language for denoting classes of +strings. A regular expression is defined inductively over an +alphabet with a set of basic operations. The alphabet for ML-Lex is +the Ascii character set (character codes 0-127; or if %full is used, 0-255). + +The syntax and semantics of regular expressions will be described in +order of decreasing precedence (from the most tightly-binding operators +to the most weakly-binding): + + An individual character stands for itself, except for the + reserved characters ? * + | ( ) ^ $ / ; . = < > [ { " \ + + A backslash followed by one of the reserved characters stands + for that character. + + A set of characters enclosed in square brackets [ ] stands + for any one of those characters. Inside the brackets, only + the symbols \ - ^ are reserved. An initial up-arrow ^ stands + for the complement of the characters listed, e.g. [^abc] + stands any character except a, b, or c. The hyphen - denotes + a range of characters, e.g. [a-z] stands for any lower-case + alphabetic character, and [0-9a-fA-F] stands for any hexadecimal + digit. To include ^ literally in a bracketed set, put it anywhere + but first; to include - literally in a set, put it first or last. + + The dot . character stands for any character except newline, + i.e. the same as [^\n] + + The following special escape sequences are available, inside + or outside of square-brackets: + \b - backspace + \n - newline + \t - tab + \h - stands for all characters with codes >127, + when 7-bit characters are used. + \ddd - where ddd is a 3 digit decimal escape. + + A sequence of characters will stand for itself (reserved + characters will be taken literally) if it is enclosed in + double quotes " ". + + A named regular expression (defined in the "definitions" + section) may be referred to by enclosing its name in + braces { }. + + Any regular expression may be enclosed in parentheses ( ) + for syntactic (but, as usual, not semantic) effect. + + The postfix operator * stands for Kleene closure: + zero or more repetitions of the preceding expression. + + The postfix operator + stands for one or more repetitions + of the preceding expression. + + The postfix operator ? stands for zero or one occurrence of + the preceding expression. + + A postfix repetition range {n1,n2} where n1 and n2 are small + integers stands for any number of repetitions between n1 and n2 + of the preceding expression. The notation {n1} stands for + exactly n1 repetitions. + + Concatenation of expressions denotes concatenation of strings. + The expression e1 e2 stands for any string that results from + the concatenation of one string that matches e1 with another + string that matches e2. + + The infix operator | stands for alternation. The expression + e1 | e2 stands for anything that either e1 or e2 stands for. + + The infix operator / denotes lookahead. Lookahead is not + implemented and cannot be used, because there is a bug + in the algorithm for generating lexers with lookahead. If + it could be used, the expression e1 / e2 would match any string + that e1 stands for, but only when that string is followed by a + string that matches e2. + + When the up-arrow ^ occurs at the beginning of an expression, + that expression will only match strings that occur at the + beginning of a line (right after a newline character). + + The dollar sign $ is not implemented, since it is an abbreviation + for lookahead involving the newline character (that is, it + is an abbreviation /\n). If it could be used, when the dollar + sign $ occurred at the end of an expression, that expression + would only match strings that occur at the end of a line + (right before a newline character). + +Here are some examples of regular expressions, and descriptions of the +set of strings they denote: + + 0 | 1 | 2 | 3 A single digit between 0 and 3 + [0123] A single digit between 0 and 3 + 0123 The string "0123" + 0* All strings of 0 or more 0's + 00* All strings of 1 or more 0's + 0+ All strings of 1 or more 0's + [0-9]{3} Any three-digit decimal number. + \\[ntb] The strings "\n" "\t" "\b" + (00)* Any string with an even number of 0's. + +IV. ML-Lex syntax summary + +A. User declarations + +Anything up to the first %% is in the user declarations section. The +user should note that no symbolic identifier containing '%%' can be +used in this section. + +B. ML-Lex definitions + +Start states can be defined with + + %s {identifier list} ; + + or %S {identifier list} ; + +An identifier list consists of one or more identifiers. + +An identifier consists of one or more letters, digits, underscores, +or primes. It must begin with a letter. + +Named expressions can be defined with + + {identifier} = {regular expression} ; + +Regular expressions are defined below. + +The following % commands are also available: + + %reject - create REJECT() function + %count - count newlines using yylineno + %full - create lexer for the full 8-bit character set, + with characters in the range 0-255 permitted + as input. + %structure {identifier} - name the structure in the output program + {identifier} instead of Mlex + %header - use code following it to create header for lexer + structure + %arg - extra (curried) formal parameter argument to be + passed to the lex functions, and to be passed + to the eof function in place of () + These functions are discussed below, under values available to + actions. + +C. Rules + +Each rule has the format: + + {regular expression} => ( ... code ... ); + +All parentheses in ... code ... must be balanced, including those +used in strings and comments. + +The start state list is optional. It consists of a list of +identifiers separated by commas, and is delimited by triangle +brackets < >. Each identifier must be a start state defined in the +%s section above. + +The regular expression is only recognized when the lexer is in one of +the start states in the start state list. If no start state list is +given, the expression is recognized in all start states. + +The lexer begins in a pre-defined start state called INITIAL. + +The lexer resolves conflicts among rules by choosing the rule with +the longest match, and in the case two rules match the same string, +choosing the rule listed first in the specification. + +The rules should match all possible input. If some input occurs that +does not match any rule, the lexer created by ML-Lex will raise an +exception LexError. Note that this differs from C Lex, which prints +any unmatched input on the standard output. + +V. Values available inside the code associated with a rule. + +Mlex places the value of the string matched by a regular expression +in yytext, a string variable. + +The user may recursively +call the lexing function with lex(). (If %arg is used, the +lexing function may be re-invoked with the same argument by using +continue().) This is convenient for ignoring white space or comments silently: + + [\ \t\n]+ => ( lex()); + +To switch start states, the user may call YYBEGIN with the name of a +start state. + +The following values will be available only if the corresponding % +command is in the ML-Lex definitions sections: + + value %command description + ----- -------- ----------- + REJECT %reject REJECT() causes the current + rule to be "rejected." + The lexer behaves as if the + current rule had not matched; + another rule that matches this + string, or that matches the longest + possible prefix of this string, + is used instead. + + yypos Current character position from + beginning of file. + + yylineno %count Current line number + + +These values should be used only if necessary. Adding REJECT to a +lexer will slow it down by 20%; adding yylineno will slow it down by +another 20%, or more. (It is much more efficient to recognize \n and +have an action that increments the line-number variable.) The use of +the lookahead operator / will also slow down the entire lexer. +The character-position, yypos, is not costly to maintain, however. + +VI. Running ML-Lex + +From the Unix shell, run sml-lex myfile.lex +The output file will be myfile.lex.sml. The extension ".lex" is not +required but is recommended. + +Within an interactive system [not the preferred method]: +Use "lexgen.sml"; this will create a structure LexGen. The function +LexGen.lexGen creates a program for a lexer from an input +specification. It takes a string argument -- the name of the file +containing the input specification. The output file name is +determined by appending ".sml" to the input file name. + +VII. Using the program produced by ML-Lex. + +When the output file is loaded, it will create a structure Mlex that +contains the function makeLexer. makeLexer takes a function from int +-> string and returns a lexing function. + +For example, + + val lexer = Mlex.makeLexer (inputc (open_in "f")) + +creates a lexer that operates on the file whose name is f. + +The function from int -> string should read a string of characters +from the input stream. It should return a null string to indicate +that the end of the stream has been reached. The integer is the +number of characters that the lexer wishes to read; the function may +return any non-zero number of characters. For example, + + val lexer = + let val input_line = fn f => + let fun loop result = + let val c = input (f,1) + val result = c :: result + in if String.size c = 0 orelse c = "\n" then + String.implode (rev result) + else loop result + end + in loop nil + end + in Mlex.makeLexer (fn n => input_line std_in) + end +is appropriate for interactive streams where prompting, etc. occurs; +the lexer won't care that input_line might return a string of more +than or less than n characters. + +The lexer tries to read a large number of characters from the input +function at once, and it is desirable that the input function return +as many as possible. Reading many characters at once makes the lexer +more efficient. Fewer input calls and buffering operations are +needed, and input is more efficient in large block reads. For +interactive streams this is less of a concern, as the limiting factor +is the speed at which the user can type. + +To obtain a value, invoke the lexer by passing it a unit: + + val nextToken = lexer() + +If one wanted to restart the lexer, one would just discard "lexer" +and create a new lexer on the same stream with another call to +makeLexer. This is the best way to discard any characters buffered +internally by the lexer. + +All code in the user declarations section is placed inside a +structure UserDeclarations. To access this structure, use the path name +Mlex.UserDeclarations. + +If any input cannot be matched, the program will raise the exception +Mlex.LexError. An internal error (i.e. bug) will cause the +exception Internal.LexerError to be raised. + +If %structure is used, remember that the structure name will no +longer be Mlex, but the one specified in the command. + +VIII. Sample + +Here is a sample lexer for a calculator program: + +datatype lexresult= DIV | EOF | EOS | ID of string | LPAREN | + NUM of int | PLUS | PRINT | RPAREN | SUB | TIMES + +val linenum = ref 1 +val error = fn x => output(std_out,x ^ "\n") +val eof = fn () => EOF +%% +%structure CalcLex +alpha=[A-Za-z]; +digit=[0-9]; +ws = [\ \t]; +%% +\n => (inc linenum; lex()); +{ws}+ => (lex()); +"/" => (DIV); +";" => (EOS); +"(" => (LPAREN); +{digit}+ => (NUM (revfold (fn(a,r)=>ord(a)-ord("0")+10*r) (explode yytext) 0)); +")" => (RPAREN); +"+" => (PLUS); +{alpha}+ => (if yytext="print" then PRINT else ID yytext); +"-" => (SUB); +"*" => (TIMES); +. => (error ("calc: ignoring bad character "^yytext); lex()); + + +Here is the parser for the calculator: + +(* Sample interactive calculator to demonstrate use of lexer produced by ML-Lex + + The original grammar was + + stmt_list -> stmt_list stmt + stmt -> print exp ; | exp ; + exp -> exp + t | exp - t | t + t -> t * f | t/f | f + f -> (exp) | id | num + + The function parse takes a stream and parses it for the calculator + program. + + If a syntax error occurs, parse prints an error message and calls itself + on the stream. On this system that has the effect of ignoring all input + to the end of a line. +*) + +structure Calc = + struct + open CalcLex + open UserDeclarations + exception Error + fun parse strm = + let + val say = fn s => output(std_out,s) + val input_line = fn f => + let fun loop result = + let val c = input (f,1) + val result = c :: result + in if String.size c = 0 orelse c = "\n" then + String.implode (rev result) + else loop result + end + in loop nil + end + val lexer = makeLexer (fn n => input_line strm) + val nexttok = ref (lexer()) + val advance = fn () => (nexttok := lexer(); !nexttok) + val error = fn () => (say ("calc: syntax error on line" ^ + (makestring(!linenum)) ^ "\n"); raise Error) + val lookup = fn i => + if i = "ONE" then 1 + else if i = "TWO" then 2 + else (say ("calc: unknown identifier '" ^ i ^ "'\n"); raise Error) + fun STMT_LIST () = + case !nexttok of + EOF => () + | _ => (STMT(); STMT_LIST()) + + and STMT() = + (case !nexttok + of EOS => () + | PRINT => (advance(); say ((makestring (E():int)) ^ "\n"); ()) + | _ => (E(); ()); + case !nexttok + of EOS => (advance()) + | _ => error()) + and E () = E' (T()) + and E' (i : int ) = + case !nexttok of + PLUS => (advance (); E'(i+T())) + | SUB => (advance (); E'(i-T())) + | RPAREN => i + | EOF => i + | EOS => i + | _ => error() + and T () = T'(F()) + and T' i = + case !nexttok of + PLUS => i + | SUB => i + | TIMES => (advance(); T'(i*F())) + | DIV => (advance (); T'(i div F())) + | EOF => i + | EOS => i + | RPAREN => i + | _ => error() + and F () = + case !nexttok of + ID i => (advance(); lookup i) + | LPAREN => + let val v = (advance(); E()) + in if !nexttok = RPAREN then (advance (); v) else error() + end + | NUM i => (advance(); i) + | _ => error() + in STMT_LIST () handle Error => parse strm + end + end diff -Nru mlton-20130715/mllex/doc/Makefile mlton-20210117+dfsg/mllex/doc/Makefile --- mlton-20130715/mllex/doc/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mllex/doc/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,16 @@ +## Copyright (C) 2020 Matthew Fluet + # + # MLton is released under a HPND-style license. + # See the file MLton-LICENSE for details. + ## + +PDFLATEX := pdflatex + +ml-lex.pdf: ml-lex.tex + $(PDFLATEX) ml-lex.tex + $(PDFLATEX) ml-lex.tex + $(PDFLATEX) ml-lex.tex + +.PHONY: clean +clean: + ../../bin/clean diff -Nru mlton-20130715/mllex/doc/ml-lex.tex mlton-20210117+dfsg/mllex/doc/ml-lex.tex --- mlton-20130715/mllex/doc/ml-lex.tex 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mllex/doc/ml-lex.tex 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,623 @@ +% Modified by Matthew Fluet on 2007-11-07. +% Add %posint command. +% +% Modified by Matthew Fluet on 2007-10-31. +% Add \r escape sequence (from Florian Weimer). +% Fix TeX formatting bug (from Florian Weimer). +% +\documentstyle{article} +\title{ A lexical analyzer generator for Standard ML.\\ + Version 1.6.0, October 1994 + } +\author{ Andrew W. Appel$^1$\\ + James S. Mattson\\ + David R. Tarditi$^2$\\ +\\ +\small +$^1$Department of Computer Science, Princeton University \\ +\small +$^2$School of Computer Science, Carnegie Mellon University +} +\date{} +\begin{document} +\maketitle +\begin{center} +(c) 1989-94 Andrew W. Appel, James S. Mattson, David R. Tarditi +\end{center} + +{\bf +This software comes with ABSOLUTELY NO WARRANTY. It is subject only to +the terms of the ML-Yacc NOTICE, LICENSE, and DISCLAIMER (in the +file COPYRIGHT distributed with this software). +} + +\vspace{1in} + +New in this version: +\begin{itemize} +\item REJECT is much less costly than before. +\item Lexical analyzers with more than 255 states can now compile in your +lifetime. +\end{itemize} + +\newpage +\tableofcontents +\newpage + +\section{General Description} + +Computer programs often need to divide their input into words and +distinguish between different kinds of words. Compilers, for +example, need to distinguish between integers, reserved words, and +identifiers. Applications programs often need to be able to +recognize components of typed commands from users. + +The problem of segmenting input into words and recognizing classes of +words is known as lexical analysis. Small cases of this problem, +such as reading text strings separated by spaces, can be solved by +using hand-written programs. Larger cases of this problem, such as +tokenizing an input stream for a compiler, can also be solved using +hand-written programs. + +A hand-written program for a large lexical analysis problem, however, +suffers from two major problems. First, the program requires a fair +amount of programmer time to create. Second, the description of +classes of words is not explicit in the program. It must be inferred +from the program code. This makes it difficult to verify if the +program recognizes the correct words for each class. It also makes +future maintenance of the program difficult. + +Lex, a programming tool for the Unix system, is a successful solution +to the general problem of lexical analysis. It uses regular +expressions to describe classes of words. A program fragment is +associated with each class of words. This information is given to +Lex as a specification (a Lex program). Lex produces a program for a +function that can be used to perform lexical analysis. + +The function operates as follows. It finds the longest word starting +from the current position in the input stream that is in one of the +word classes. It executes the program fragment associated with the +class, and sets the current position in the input stream to be the +character after the word. The program fragment has the actual text +of the word available to it, and may be any piece of code. For many +applications it returns some kind of value. + +Lex allows the programmer to make the language description explicit, +and to concentrate on what to do with the recognized words, not how +to recognize the words. It saves programmer time and increases +program maintainability. + +Unfortunately, Lex is targeted only C. It also places artificial +limits on the size of strings that can be recognized. + +ML-Lex is a variant of Lex for the ML programming language. ML-Lex +has a syntax similar to Lex, and produces an ML program instead of a +C program. ML-Lex produces a program that runs very efficiently. +Typically the program will be as fast or even faster than a +hand-coded lexer implemented in Standard ML. + +The program typically uses only a small amount of space. +ML-Lex thus allows ML programmers the same benefits that Lex allows C +programmers. It also does not place artificial limits on the size of +recognized strings. + +\section{ML-Lex specifications} + +An ML-Lex specification has the general format: + +\begin{quote} + {user declarations} + \verb|%%| + {ML-Lex definitions} + \verb|%%| + {rules} +\end{quote} + +Each section is separated from the others by a \verb|%%| delimiter. + +The rules are used to define the lexical analysis function. Each +rule has two parts---a regular expression and an action. The regular +expression defines the word class that a rule matches. The action is +a program fragment to be executed when a rule matches the input. The +actions are used to compute values, and must all return values of the +same type. + +The user can define values available to all rule actions in the user +declarations section. The user must define two values in this +section---a type lexresult and a function eof. Lexresult defines the +type of values returned by the rule actions. The function "eof" is +called by the lexer when the end of the input stream is reached. It +will typically return a value signalling eof or raise an exception. +It is called with the same argument as lex (see \verb|%arg|, below), +and must return a value of type lexresult. + +In the definitions section, the user can define named regular +expressions, a set of start states, and specify which of the various +bells and whistles of ML-Lex are desired. + +The start states allow the user to control when certain rules are +matched. Rules may be defined to match only when the lexer is in +specific start states. The user may change the lexer's start state +in a rule action. This allows the user to specify special handling +of lexical objects. + +This feature is typically used to handle quoted strings with escapes +to denote special characters. The rules to recognize the inside +contents of a string are defined for only one start state. This +start state is entered when the beginning of a string is recognized, +and exited when the end of the string is recognized. + +\section{Regular expressions} + +Regular expressions are a simple language for denoting classes of +strings. A regular expression is defined inductively over an +alphabet with a set of basic operations. The alphabet for ML-Lex is +the Ascii character set (character codes 0--127; or if +\verb|%full| is used, 0--255). + +The syntax and semantics of regular expressions will be described in +order of decreasing precedence (from the most tightly binding operators +to the most weakly binding): + +\begin{itemize} +\item An individual character stands for itself, except for the + reserved characters \verb@? * + | ( ) ^ $ / ; . = < > [ { " \@ + +\item[\\] A backslash followed by one of the reserved characters stands + for that character. + +\item A set of characters enclosed in square brackets [ ] stands + for any one of those characters. Inside the brackets, only + the symbols \verb|\ - ^| are reserved. An initial up-arrow + \verb|^| stands + for the complement of the characters listed, e.g. \verb|[^abc]| + stands any character except a, b, or c. The hyphen - denotes + a range of characters, e.g. \verb|[a-z]| stands for any lower-case + alphabetic character, and \verb|[0-9a-fA-F]| stands for any hexadecimal + digit. To include \verb|^| literally in a bracketed set, put it anywhere + but first; to include \verb|-| literally in a set, put it first or last. + +\item[\verb|.|] The dot \verb|.| character stands for any character except newline, + i.e. the same as \verb|[^\n]| + +\item The following special escape sequences are available, inside + or outside of square-brackets: + + \begin{tabular}{ll} + \verb|\b|& backspace\\ + \verb|\n|& newline\\ + \verb|\r|& carriage return\\ + \verb|\t|& tab\\ + \verb|\h|& stands for all characters with codes $>127$,\\ + &~~~~ when 7-bit characters are used.\\ + \verb|\ddd|& where \verb|ddd| is a 3 digit decimal escape.\\ + + \end{tabular} + +\item[\verb|"|] A sequence of characters will stand for itself (reserved + characters will be taken literally) if it is enclosed in + double quotes \verb|" "|. + +\item[\{\}] A named regular expression (defined in the ``definitions" + section) may be referred to by enclosing its name in + braces \verb|{ }|. + +\item[()] Any regular expression may be enclosed in parentheses \verb|( )| + for syntactic (but, as usual, not semantic) effect. + +\item[\verb|*|] The postfix operator \verb|*| stands for Kleene closure: + zero or more repetitions of the preceding expression. + +\item[\verb|+|] The postfix operator \verb|+| stands for one or more repetitions + of the preceding expression. + +\item[\verb|?|] The postfix operator \verb|?| stands for zero or one occurrence of + the preceding expression. + +\item A postfix repetition range $\{n_1,n_2\}$ where $n_1$ and $n_2$ are small + integers stands for any number of repetitions between $n_1$ and $n_2$ + of the preceding expression. The notation $\{n_1\}$ stands for + exactly $n_1$ repetitions. + +\item Concatenation of expressions denotes concatenation of strings. + The expression $e_1 e_2$ stands for any string that results from + the concatenation of one string that matches $e_1$ with another + string that matches $e_2$. + +\item\verb-|- The infix operator \verb-|- stands for alternation. The expression + $e_1$~\verb"|"~$e_2$ stands for anything that either $e_1$ or $e_2$ stands for. + +\item[\verb|/|] The infix operator \verb|/| denotes lookahead. Lookahead is not + implemented and cannot be used, because there is a bug + in the algorithm for generating lexers with lookahead. If + it could be used, the expression $e_1 / e_2$ would match any string + that $e_1$ stands for, but only when that string is followed by a + string that matches $e_2$. + +\item When the up-arrow \verb|^| occurs at the beginning of an expression, + that expression will only match strings that occur at the + beginning of a line (right after a newline character). + +\item[\$] The dollar sign of C Lex \$ is not implemented, since it is an abbreviation + for lookahead involving the newline character (that is, it + is an abbreviation for \verb|/\n|). +\end{itemize} + +Here are some examples of regular expressions, and descriptions of the +set of strings they denote: + +\begin{tabular}{ll} +\verb~0 | 1 | 2 | 3~& A single digit between 0 and 3\\ +\verb|[0123]|& A single digit between 0 and 3\\ +\verb|0123|& The string ``0123"\\ +\verb|0*|& All strings of 0 or more 0's\\ +\verb|00*|& All strings of 1 or more 0's\\ +\verb|0+|& All strings of 1 or more 0's\\ +\verb|[0-9]{3}|& Any three-digit decimal number.\\ +\verb|\\[ntb]|& A newline, tab, or backspace.\\ +\verb|(00)*|& Any string with an even number of 0's. +\end{tabular} + +\section{ML-Lex syntax summary} + +\subsection{User declarations} + +Anything up to the first \verb|%%| is in the user declarations section. The +user should note that no symbolic identifier containing +\verb|%%| can be +used in this section. + +\subsection{ML-Lex definitions} + +Start states can be defined with +\begin{quote} +\verb|%s| {identifier list} \verb|;| +\end{quote} + +An identifier list consists of one or more identifiers. + +An identifier consists of one or more letters, digits, underscores, +or primes, and must begin with a letter. + +Named expressions can be defined with + +\begin{quote} + {identifier} = {regular expression} ; +\end{quote} + +Regular expressions are defined below. + +The following \% commands are also available: + +\begin{description} +\item[\tt \%reject] create REJECT() function +\item[\tt \%count] count newlines using yylineno +\item[\tt \%posarg] pass initial-position argument to makeLexer +\item[\tt \%full] create lexer for the full 8-bit character set, + with characters in the range 0--255 permitted + as input. +\item[\tt \%structure \{identifier\}] name the structure in the output program + {identifier} instead of Mlex +\item[\tt \%header] use code following it to create header for lexer + structure +\item[\tt \%arg] extra (curried) formal parameter argument to be + passed to the lex functions, and to be passed + to the eof function in place of () +\item[\tt \%posint \{identifier\}] use the {\tt INTEGER} structure for the + type of {\tt yypos}; use {\tt Int64} or {\tt Position} + to allow lexing of multi-gigabyte input files +\end{description} + These functions are discussed in section~\ref{avail}. + +\subsection{Rules} + +Each rule has the format: + +\begin{quote} + \verb|<|{\it start state list}\verb|>| {\it regular expression} \verb|=> (| {\it code} \verb|);| +\end{quote} + +All parentheses in {\it code} must be balanced, including those +used in strings and comments. + +The {\it start state list} is optional. It consists of a list of +identifiers separated by commas, and is delimited by triangle +brackets \verb|< >|. Each identifier must be a start state defined in the +\verb|%s| section above. + +The regular expression is only recognized when the lexer is in one of +the start states in the start state list. If no start state list is +given, the expression is recognized in all start states. + +The lexer begins in a pre-defined start state called \verb|INITIAL|. + +The lexer resolves conflicts among rules by choosing the rule with +the longest match, and in the case two rules match the same string, +choosing the rule listed first in the specification. + +The rules should match all possible input. If some input occurs that +does not match any rule, the lexer created by ML-Lex will raise an +exception LexError. Note that this differs from C Lex, which prints +any unmatched input on the standard output. + +\section{Values available inside the code associated with a rule.} +\label{avail} + +ML-Lex places the value of the string matched by a regular expression +in \verb|yytext|, a string variable. + +The user may recursively +call the lexing function with \verb|lex()|. (If \verb|%arg| is used, the +lexing function may be re-invoked with the same argument by using +continue().) This is convenient for ignoring white space or comments silently: + +\begin{verbatim} + [\ \t\n]+ => ( lex()); +\end{verbatim} + +To switch start states, the user may call \verb|YYBEGIN| with the name of a +start state. + +The following values will be available only if the corresponding \verb|%| +command is in the ML-Lex definitions sections: + +\begin{tabular}{lll} +\\ +{\bf Value}&{\bf \% command}&{\bf description}\\ +\hline +{\tt REJECT} &{\tt\%reject}&\parbox[t]{2.6in}{{\tt REJECT()} causes the current + rule to be ``rejected.'' + The lexer behaves as if the + current rule had not matched; + another rule that matches this + string, or that matches the longest + possible prefix of this string, + is used instead.} \\ +{\tt yypos} & & \parbox[t]{2.6in}{The position of the first character +of {\tt yytext}, relative to the beginning of the file.}\\ +{\tt yylineno } & {\tt \%count} & Current line number\\ +\\ +\end{tabular} + + +These values should be used only if necessary. Adding {\tt REJECT} to a +lexer will slow it down by 20\%; adding {\tt yylineno} will slow it down by +another 20\%, or more. (It is much more efficient to +recognize \verb|\n| and +have an action that increments the line-number variable.) The use of +the lookahead operator {\tt /} will also slow down the entire lexer. +The character-position, {\tt yypos}, is not costly to maintain, however. + +\paragraph{Bug.} The position of the first character in the file +is reported as 2 (unless the {\tt \%posarg} feature is used). +To preserve compatibility, this bug has not been fixed. + +\section{Running ML-Lex} + +From the Unix shell, run {\tt sml-lex~myfile.lex} +The output file will be myfile.lex.sml. The extension {\tt .lex} is not +required but is recommended. + +Within an interactive system [not the preferred method]: +Use {\tt lexgen.sml}; this will create a structure LexGen. The function +LexGen.lexGen creates a program for a lexer from an input +specification. It takes a string argument -- the name of the file +containing the input specification. The output file name is +determined by appending ``{\tt .sml}'' to the input file name. + +\section{Using the program produced by ML-Lex} + +When the output file is loaded, it will create a structure Mlex that +contains the function {\tt makeLexer} which takes a function from +${\it int} \rightarrow {\it string}$ and returns a lexing function: + +\begin{verbatim} + val makeLexer : (int->string) -> yyarg -> lexresult +\end{verbatim} +where {\tt yyarg} is the type given in the {\tt \%yyarg} directive, +or {\tt unit} if there is no {\tt \%yyarg} directive. + +For example, + +\begin{verbatim} + val lexer = Mlex.makeLexer (inputc (open_in "f")) +\end{verbatim} + +creates a lexer that operates on the file whose name is f. + +When the {\tt \%posarg} directive is used, the type of +{\tt makeLexer} is +\begin{verbatim} + val makeLexer : ((int->string)*int) -> yyarg -> lexresult +\end{verbatim} +where the extra {\tt int} argument is one less than the {\tt yypos} +of the first character in the input. The value $k$ would be used, +for example, when creating +a lexer to start in the middle of a file, when $k$ characters have +already been read. At the beginning of the file, $k=0$ should be used. + +The ${\it int} \rightarrow {\it string}$ function +should read a string of characters +from the input stream. It should return a null string to indicate +that the end of the stream has been reached. The integer is the +number of characters that the lexer wishes to read; the function may +return any non-zero number of characters. For example, + +\begin{verbatim} + val lexer = + let val input_line = fn f => + let fun loop result = + let val c = input (f,1) + val result = c :: result + in if String.size c = 0 orelse c = "\n" then + String.implode (rev result) + else loop result + end + in loop nil + end + in Mlex.makeLexer (fn n => input_line std_in) + end +\end{verbatim} + +is appropriate for interactive streams where prompting, etc. occurs; +the lexer won't care that \verb|input_line| might return a string of more +than or less than $n$ characters. + +The lexer tries to read a large number of characters from the input +function at once, and it is desirable that the input function return +as many as possible. Reading many characters at once makes the lexer +more efficient. Fewer input calls and buffering operations are +needed, and input is more efficient in large block reads. For +interactive streams this is less of a concern, as the limiting factor +is the speed at which the user can type. + +To obtain a value, invoke the lexer by passing it a unit: + +\begin{verbatim} + val nextToken = lexer() +\end{verbatim} + +If one wanted to restart the lexer, one would just discard {\tt lexer} +and create a new lexer on the same stream with another call to +{\tt makeLexer}. This is the best way to discard any characters buffered +internally by the lexer. + +All code in the user declarations section is placed inside a +structure UserDeclarations. To access this structure, use the path name +{\tt Mlex.UserDeclarations}. + +If any input cannot be matched, the program will raise the exception +{\tt Mlex.LexError}. An internal error (i.e. bug) will cause the +exception {\tt Internal.LexerError} to be raised. + +If {\tt \%structure} is used, remember that the structure name will no +longer be Mlex, but the one specified in the command. + +\section{Sample} + +Here is a sample lexer for a calculator program: + +\small +\begin{verbatim} +datatype lexresult= DIV | EOF | EOS | ID of string | LPAREN | + NUM of int | PLUS | PRINT | RPAREN | SUB | TIMES + +val linenum = ref 1 +val error = fn x => output(std_out,x ^ "\n") +val eof = fn () => EOF +%% +%structure CalcLex +alpha=[A-Za-z]; +digit=[0-9]; +ws = [\ \t]; +%% +\n => (inc linenum; lex()); +{ws}+ => (lex()); +"/" => (DIV); +";" => (EOS); +"(" => (LPAREN); +{digit}+ => (NUM (revfold (fn(a,r)=>ord(a)-ord("0")+10*r) (explode yytext) 0)); +")" => (RPAREN); +"+" => (PLUS); +{alpha}+ => (if yytext="print" then PRINT else ID yytext); +"-" => (SUB); +"*" => (TIMES); +. => (error ("calc: ignoring bad character "^yytext); lex()); +\end{verbatim} + + +Here is the parser for the calculator: +\begin{verbatim} + +(* Sample interactive calculator to demonstrate use of lexer + + The original grammar was + + stmt_list -> stmt_list stmt + stmt -> print exp ; | exp ; + exp -> exp + t | exp - t | t + t -> t * f | t/f | f + f -> (exp) | id | num + + The function parse takes a stream and parses it for the calculator + program. + + If a syntax error occurs, parse prints an error message and calls + itself on the stream. On this system that has the effect of ignoring + all input to the end of a line. +*) + +structure Calc = + struct + open CalcLex + open UserDeclarations + exception Error + fun parse strm = + let + val say = fn s => output(std_out,s) + val input_line = fn f => + let fun loop result = + let val c = input (f,1) + val result = c :: result + in if String.size c = 0 orelse c = "\n" then + String.implode (rev result) + else loop result + end + in loop nil + end + val lexer = makeLexer (fn n => input_line strm) + val nexttok = ref (lexer()) + val advance = fn () => (nexttok := lexer(); !nexttok) + val error = fn () => (say ("calc: syntax error on line" ^ + (makestring(!linenum)) ^ "\n"); raise Error) + val lookup = fn i => + if i = "ONE" then 1 + else if i = "TWO" then 2 + else (say ("calc: unknown identifier '" ^ i ^ "'\n"); raise Error) + fun STMT_LIST () = + case !nexttok of + EOF => () + | _ => (STMT(); STMT_LIST()) + + and STMT() = + (case !nexttok + of EOS => () + | PRINT => (advance(); say ((makestring (E():int)) ^ "\n"); ()) + | _ => (E(); ()); + case !nexttok + of EOS => (advance()) + | _ => error()) + and E () = E' (T()) + and E' (i : int ) = + case !nexttok of + PLUS => (advance (); E'(i+T())) + | SUB => (advance (); E'(i-T())) + | RPAREN => i + | EOF => i + | EOS => i + | _ => error() + and T () = T'(F()) + and T' i = + case !nexttok of + PLUS => i + | SUB => i + | TIMES => (advance(); T'(i*F())) + | DIV => (advance (); T'(i div F())) + | EOF => i + | EOS => i + | RPAREN => i + | _ => error() + and F () = + case !nexttok of + ID i => (advance(); lookup i) + | LPAREN => + let val v = (advance(); E()) + in if !nexttok = RPAREN then (advance (); v) else error() + end + | NUM i => (advance(); i) + | _ => error() + in STMT_LIST () handle Error => parse strm + end + end +\end{verbatim} +\end{document} diff -Nru mlton-20130715/mllex/doc/mllex.tex mlton-20210117+dfsg/mllex/doc/mllex.tex --- mlton-20130715/mllex/doc/mllex.tex 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mllex/doc/mllex.tex 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +\input{ml-lex} diff -Nru mlton-20130715/mllex/.gitignore mlton-20210117+dfsg/mllex/.gitignore --- mlton-20130715/mllex/.gitignore 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mllex/.gitignore 2021-12-28 17:19:36.000000000 +0000 @@ -1,10 +1,3 @@ -/html/ -/lexgen.aux -/lexgen.dvi -/lexgen.log -/lexgen.pdf -/lexgen.ps -/lexgen.toc /ml.lex /ml.lex.sml /mllex diff -Nru mlton-20130715/mllex/lexgen.doc mlton-20210117+dfsg/mllex/lexgen.doc --- mlton-20130715/mllex/lexgen.doc 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mllex/lexgen.doc 1970-01-01 00:00:00.000000000 +0000 @@ -1,539 +0,0 @@ - A lexical analyzer generator for Standard ML. - -THIS TEXT FILE IS OBSOLETE and IS NOT MAINTAINED. -The current (maintained) documentation is in lexgen.tex. - - - Andrew W. Appel - James S. Mattson - David R. Tarditi - - Princeton University - - Version 1.6, October 1994 - -Copyright (c) 1989-1992 by Andrew W. Appel, James S. Mattson, David R. Tarditi - -This software comes with ABSOLUTELY NO WARRANTY. -This software is subject only to the PRINCETON STANDARD ML SOFTWARE LIBRARY -COPYRIGHT NOTICE, LICENSE AND DISCLAIMER, (in the file "COPYRIGHT", -distributed with this software). You may copy and distribute this software; -see the COPYRIGHT NOTICE for details and restrictions. - -I. General Description - -Computer programs often need to divide their input into words and -distinguish between different kinds of words. Compilers, for -example, need to distinguish between integers, reserved words, and -identifiers. Applications programs often need to be able to -recognize components of typed commands from users. - -The problem of segmenting input into words and recognizing classes of -words is known as lexical analysis. Small cases of this problem, -such as reading text strings separated by spaces, can be solved by -using hand-written programs. Larger cases of this problem, such as -tokenizing an input stream for a compiler, can also be solved using -hand-written programs. - -A hand-written program for a large lexical analysis problem, however, -suffers from two major problems. First, the program requires a fair -amount of programmer time to create. Second, the description of -classes of words is not explicit in the program. It must be inferred -from the program code. This makes it difficult to verify if the -program recognizes the correct words for each class. It also makes -future maintenance of the program difficult. - -Lex, a programming tool for the Unix system, is a successful solution -to the general problem of lexical analysis. It uses regular -expressions to describe classes of words. A program fragment is -associated with each class of words. This information is given to -Lex as a specification (a Lex program). Lex produces a program for a -function that can be used to perform lexical analysis. - -The function operates as follows. It finds the longest word starting -from the current position in the input stream that is in one of the -word classes. It executes the program fragment associated with the -class, and sets the current position in the input stream to be the -character after the word. The program fragment has the actual text -of the word available to it, and may be any piece of code. For many -applications it returns some kind of value. - -Lex allows the programmer to make the language description explicit, -and to concentrate on what to do with the recognized words, not how -to recognize the words. It saves programmer time and increases -program maintainability. - -Unfortunately, Lex is targeted only C. It also places artificial -limits on the size of strings that can be recognized. - -ML-Lex is a variant of Lex for the ML programming language. ML-Lex -has a syntax similar to Lex, and produces an ML program instead of a -C program. ML-Lex produces a program that runs very efficiently. -Typically the program will be as fast or even faster than a -hand-coded lexer implemented in Standard ML. - -The program typically uses only a small amount of space. -ML-Lex thus allows ML programmers the same benefits that Lex allows C -programmers. It also does not place artificial limits on the size of -recognized strings. - -II. ML-Lex specifications - -An ML-Lex specification has the general format: - - {user declarations} - %% - {ML-Lex definitions} - %% - {rules} - -Each section is separated from the others by a '%%' delimiter. - -The rules are used to define the lexical analysis function. Each -rule has two parts - a regular expression and an action. The regular -expression defines the word class that a rule matches. The action is -a program fragment to be executed when a rule matches the input. The -actions are used to compute values, and must all return values of the -same type. - -The user can define values available to all rule actions in the user -declarations section. The user must define two values in this -section - a type lexresult and a function eof. Lexresult defines the -type of values returned by the rule actions. The function "eof" is -called by the lexer when the end of the input stream is reached. It -will typically return a value signalling eof or raise an exception. -It is called with the same argument as lex (see %arg, below), -and must return a value of type lexresult. - -In the definitions section, the user can define named regular -expressions, a set of start states, and specify which of the various -bells and whistles of ML-Lex are desired. - -The start states allow the user to control when certain rules are -matched. Rules may be defined to match only when the lexer is in -specific start states. The user may change the lexer's start state -in a rule action. This allows the user to specify special handling -of lexical objects. - -This feature is typically used to handle quoted strings with escapes -to denote special characters. The rules to recognize the inside -contents of a string are defined for only one start state. This -start state is entered when the beginning of a string is recognized, -and exited when the end of the string is recognized. - -III. Regular expressions. - -Regular expressions are a simple language for denoting classes of -strings. A regular expression is defined inductively over an -alphabet with a set of basic operations. The alphabet for ML-Lex is -the Ascii character set (character codes 0-127; or if %full is used, 0-255). - -The syntax and semantics of regular expressions will be described in -order of decreasing precedence (from the most tightly-binding operators -to the most weakly-binding): - - An individual character stands for itself, except for the - reserved characters ? * + | ( ) ^ $ / ; . = < > [ { " \ - - A backslash followed by one of the reserved characters stands - for that character. - - A set of characters enclosed in square brackets [ ] stands - for any one of those characters. Inside the brackets, only - the symbols \ - ^ are reserved. An initial up-arrow ^ stands - for the complement of the characters listed, e.g. [^abc] - stands any character except a, b, or c. The hyphen - denotes - a range of characters, e.g. [a-z] stands for any lower-case - alphabetic character, and [0-9a-fA-F] stands for any hexadecimal - digit. To include ^ literally in a bracketed set, put it anywhere - but first; to include - literally in a set, put it first or last. - - The dot . character stands for any character except newline, - i.e. the same as [^\n] - - The following special escape sequences are available, inside - or outside of square-brackets: - \b - backspace - \n - newline - \t - tab - \h - stands for all characters with codes >127, - when 7-bit characters are used. - \ddd - where ddd is a 3 digit decimal escape. - - A sequence of characters will stand for itself (reserved - characters will be taken literally) if it is enclosed in - double quotes " ". - - A named regular expression (defined in the "definitions" - section) may be referred to by enclosing its name in - braces { }. - - Any regular expression may be enclosed in parentheses ( ) - for syntactic (but, as usual, not semantic) effect. - - The postfix operator * stands for Kleene closure: - zero or more repetitions of the preceding expression. - - The postfix operator + stands for one or more repetitions - of the preceding expression. - - The postfix operator ? stands for zero or one occurrence of - the preceding expression. - - A postfix repetition range {n1,n2} where n1 and n2 are small - integers stands for any number of repetitions between n1 and n2 - of the preceding expression. The notation {n1} stands for - exactly n1 repetitions. - - Concatenation of expressions denotes concatenation of strings. - The expression e1 e2 stands for any string that results from - the concatenation of one string that matches e1 with another - string that matches e2. - - The infix operator | stands for alternation. The expression - e1 | e2 stands for anything that either e1 or e2 stands for. - - The infix operator / denotes lookahead. Lookahead is not - implemented and cannot be used, because there is a bug - in the algorithm for generating lexers with lookahead. If - it could be used, the expression e1 / e2 would match any string - that e1 stands for, but only when that string is followed by a - string that matches e2. - - When the up-arrow ^ occurs at the beginning of an expression, - that expression will only match strings that occur at the - beginning of a line (right after a newline character). - - The dollar sign $ is not implemented, since it is an abbreviation - for lookahead involving the newline character (that is, it - is an abbreviation /\n). If it could be used, when the dollar - sign $ occurred at the end of an expression, that expression - would only match strings that occur at the end of a line - (right before a newline character). - -Here are some examples of regular expressions, and descriptions of the -set of strings they denote: - - 0 | 1 | 2 | 3 A single digit between 0 and 3 - [0123] A single digit between 0 and 3 - 0123 The string "0123" - 0* All strings of 0 or more 0's - 00* All strings of 1 or more 0's - 0+ All strings of 1 or more 0's - [0-9]{3} Any three-digit decimal number. - \\[ntb] The strings "\n" "\t" "\b" - (00)* Any string with an even number of 0's. - -IV. ML-Lex syntax summary - -A. User declarations - -Anything up to the first %% is in the user declarations section. The -user should note that no symbolic identifier containing '%%' can be -used in this section. - -B. ML-Lex definitions - -Start states can be defined with - - %s {identifier list} ; - - or %S {identifier list} ; - -An identifier list consists of one or more identifiers. - -An identifier consists of one or more letters, digits, underscores, -or primes. It must begin with a letter. - -Named expressions can be defined with - - {identifier} = {regular expression} ; - -Regular expressions are defined below. - -The following % commands are also available: - - %reject - create REJECT() function - %count - count newlines using yylineno - %full - create lexer for the full 8-bit character set, - with characters in the range 0-255 permitted - as input. - %structure {identifier} - name the structure in the output program - {identifier} instead of Mlex - %header - use code following it to create header for lexer - structure - %arg - extra (curried) formal parameter argument to be - passed to the lex functions, and to be passed - to the eof function in place of () - These functions are discussed below, under values available to - actions. - -C. Rules - -Each rule has the format: - - {regular expression} => ( ... code ... ); - -All parentheses in ... code ... must be balanced, including those -used in strings and comments. - -The start state list is optional. It consists of a list of -identifiers separated by commas, and is delimited by triangle -brackets < >. Each identifier must be a start state defined in the -%s section above. - -The regular expression is only recognized when the lexer is in one of -the start states in the start state list. If no start state list is -given, the expression is recognized in all start states. - -The lexer begins in a pre-defined start state called INITIAL. - -The lexer resolves conflicts among rules by choosing the rule with -the longest match, and in the case two rules match the same string, -choosing the rule listed first in the specification. - -The rules should match all possible input. If some input occurs that -does not match any rule, the lexer created by ML-Lex will raise an -exception LexError. Note that this differs from C Lex, which prints -any unmatched input on the standard output. - -V. Values available inside the code associated with a rule. - -Mlex places the value of the string matched by a regular expression -in yytext, a string variable. - -The user may recursively -call the lexing function with lex(). (If %arg is used, the -lexing function may be re-invoked with the same argument by using -continue().) This is convenient for ignoring white space or comments silently: - - [\ \t\n]+ => ( lex()); - -To switch start states, the user may call YYBEGIN with the name of a -start state. - -The following values will be available only if the corresponding % -command is in the ML-Lex definitions sections: - - value %command description - ----- -------- ----------- - REJECT %reject REJECT() causes the current - rule to be "rejected." - The lexer behaves as if the - current rule had not matched; - another rule that matches this - string, or that matches the longest - possible prefix of this string, - is used instead. - - yypos Current character position from - beginning of file. - - yylineno %count Current line number - - -These values should be used only if necessary. Adding REJECT to a -lexer will slow it down by 20%; adding yylineno will slow it down by -another 20%, or more. (It is much more efficient to recognize \n and -have an action that increments the line-number variable.) The use of -the lookahead operator / will also slow down the entire lexer. -The character-position, yypos, is not costly to maintain, however. - -VI. Running ML-Lex - -From the Unix shell, run sml-lex myfile.lex -The output file will be myfile.lex.sml. The extension ".lex" is not -required but is recommended. - -Within an interactive system [not the preferred method]: -Use "lexgen.sml"; this will create a structure LexGen. The function -LexGen.lexGen creates a program for a lexer from an input -specification. It takes a string argument -- the name of the file -containing the input specification. The output file name is -determined by appending ".sml" to the input file name. - -VII. Using the program produced by ML-Lex. - -When the output file is loaded, it will create a structure Mlex that -contains the function makeLexer. makeLexer takes a function from int --> string and returns a lexing function. - -For example, - - val lexer = Mlex.makeLexer (inputc (open_in "f")) - -creates a lexer that operates on the file whose name is f. - -The function from int -> string should read a string of characters -from the input stream. It should return a null string to indicate -that the end of the stream has been reached. The integer is the -number of characters that the lexer wishes to read; the function may -return any non-zero number of characters. For example, - - val lexer = - let val input_line = fn f => - let fun loop result = - let val c = input (f,1) - val result = c :: result - in if String.size c = 0 orelse c = "\n" then - String.implode (rev result) - else loop result - end - in loop nil - end - in Mlex.makeLexer (fn n => input_line std_in) - end -is appropriate for interactive streams where prompting, etc. occurs; -the lexer won't care that input_line might return a string of more -than or less than n characters. - -The lexer tries to read a large number of characters from the input -function at once, and it is desirable that the input function return -as many as possible. Reading many characters at once makes the lexer -more efficient. Fewer input calls and buffering operations are -needed, and input is more efficient in large block reads. For -interactive streams this is less of a concern, as the limiting factor -is the speed at which the user can type. - -To obtain a value, invoke the lexer by passing it a unit: - - val nextToken = lexer() - -If one wanted to restart the lexer, one would just discard "lexer" -and create a new lexer on the same stream with another call to -makeLexer. This is the best way to discard any characters buffered -internally by the lexer. - -All code in the user declarations section is placed inside a -structure UserDeclarations. To access this structure, use the path name -Mlex.UserDeclarations. - -If any input cannot be matched, the program will raise the exception -Mlex.LexError. An internal error (i.e. bug) will cause the -exception Internal.LexerError to be raised. - -If %structure is used, remember that the structure name will no -longer be Mlex, but the one specified in the command. - -VIII. Sample - -Here is a sample lexer for a calculator program: - -datatype lexresult= DIV | EOF | EOS | ID of string | LPAREN | - NUM of int | PLUS | PRINT | RPAREN | SUB | TIMES - -val linenum = ref 1 -val error = fn x => output(std_out,x ^ "\n") -val eof = fn () => EOF -%% -%structure CalcLex -alpha=[A-Za-z]; -digit=[0-9]; -ws = [\ \t]; -%% -\n => (inc linenum; lex()); -{ws}+ => (lex()); -"/" => (DIV); -";" => (EOS); -"(" => (LPAREN); -{digit}+ => (NUM (revfold (fn(a,r)=>ord(a)-ord("0")+10*r) (explode yytext) 0)); -")" => (RPAREN); -"+" => (PLUS); -{alpha}+ => (if yytext="print" then PRINT else ID yytext); -"-" => (SUB); -"*" => (TIMES); -. => (error ("calc: ignoring bad character "^yytext); lex()); - - -Here is the parser for the calculator: - -(* Sample interactive calculator to demonstrate use of lexer produced by ML-Lex - - The original grammar was - - stmt_list -> stmt_list stmt - stmt -> print exp ; | exp ; - exp -> exp + t | exp - t | t - t -> t * f | t/f | f - f -> (exp) | id | num - - The function parse takes a stream and parses it for the calculator - program. - - If a syntax error occurs, parse prints an error message and calls itself - on the stream. On this system that has the effect of ignoring all input - to the end of a line. -*) - -structure Calc = - struct - open CalcLex - open UserDeclarations - exception Error - fun parse strm = - let - val say = fn s => output(std_out,s) - val input_line = fn f => - let fun loop result = - let val c = input (f,1) - val result = c :: result - in if String.size c = 0 orelse c = "\n" then - String.implode (rev result) - else loop result - end - in loop nil - end - val lexer = makeLexer (fn n => input_line strm) - val nexttok = ref (lexer()) - val advance = fn () => (nexttok := lexer(); !nexttok) - val error = fn () => (say ("calc: syntax error on line" ^ - (makestring(!linenum)) ^ "\n"); raise Error) - val lookup = fn i => - if i = "ONE" then 1 - else if i = "TWO" then 2 - else (say ("calc: unknown identifier '" ^ i ^ "'\n"); raise Error) - fun STMT_LIST () = - case !nexttok of - EOF => () - | _ => (STMT(); STMT_LIST()) - - and STMT() = - (case !nexttok - of EOS => () - | PRINT => (advance(); say ((makestring (E():int)) ^ "\n"); ()) - | _ => (E(); ()); - case !nexttok - of EOS => (advance()) - | _ => error()) - and E () = E' (T()) - and E' (i : int ) = - case !nexttok of - PLUS => (advance (); E'(i+T())) - | SUB => (advance (); E'(i-T())) - | RPAREN => i - | EOF => i - | EOS => i - | _ => error() - and T () = T'(F()) - and T' i = - case !nexttok of - PLUS => i - | SUB => i - | TIMES => (advance(); T'(i*F())) - | DIV => (advance (); T'(i div F())) - | EOF => i - | EOS => i - | RPAREN => i - | _ => error() - and F () = - case !nexttok of - ID i => (advance(); lookup i) - | LPAREN => - let val v = (advance(); E()) - in if !nexttok = RPAREN then (advance (); v) else error() - end - | NUM i => (advance(); i) - | _ => error() - in STMT_LIST () handle Error => parse strm - end - end Binary files /tmp/tmpeijleaj1/J0IhGCp1bz/mlton-20130715/mllex/lexgen.pdf and /tmp/tmpeijleaj1/Onfiehphu5/mlton-20210117+dfsg/mllex/lexgen.pdf differ diff -Nru mlton-20130715/mllex/lexgen.sml mlton-20210117+dfsg/mllex/lexgen.sml --- mlton-20130715/mllex/lexgen.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mllex/lexgen.sml 2021-12-28 17:19:36.000000000 +0000 @@ -60,6 +60,9 @@ and characters. 02/08/95 (jhr) Modified to use new List module interface. 05/18/95 (jhr) changed Vector.vector to Vector.fromList + 04/07/20 (jhr) Switch to using RedBlackMapFn from SML/NJ Library + 04/07/20 (jhr) Replaced uses of polymorphic equality with pattern + matching. * Revision 1.9 1998/01/06 19:23:53 appel * added %posarg feature to permit position-within-file to be passed @@ -148,6 +151,7 @@ *) +(* functor RedBlack(B : sig type key val > : key*key->bool end): @@ -221,6 +225,7 @@ end end +*) signature LEXGEN = sig @@ -229,7 +234,7 @@ structure LexGen: LEXGEN = struct - open Array List + val sub = Array.sub infix 9 sub type pos = {line : int, col : int} @@ -507,9 +512,9 @@ end (* end case *)) - and onechar x = let val c = array(!CharSetSize, false) + and onechar x = let val c = Array.array(!CharSetSize, false) in - update(c, Char.ord(x), true); CHARS(c) + Array.update(c, Char.ord(x), true); CHARS(c) end in case !LexState of 0 => let val makeTok = fn () => @@ -578,8 +583,8 @@ | #"$" => DOLLAR | #"/" => SLASH | #";" => SEMI - | #"." => let val c = array(!CharSetSize,true) in - update(c,10,false); CHARS(c) + | #"." => let val c = Array.array(!CharSetSize,true) in + Array.update(c,10,false); CHARS(c) end (* assign and arrow *) | #"=" => let val c = nextch() in @@ -591,9 +596,9 @@ end; val first = classch(); val flag = (first <> #"^"); - val c = array(!CharSetSize,not flag); + val c = Array.array(!CharSetSize,not flag); fun add NONE = () - | add (SOME x) = update(c, Char.ord(x), flag) + | add (SOME x) = Array.update(c, Char.ord(x), flag) and range (x, y) = if x>y then (prErr "bad char. range") else let @@ -710,8 +715,8 @@ handle LOOKUP => prErr ("bad regular expression name: "^ name) - and newline = fn () => let val c = array(!CharSetSize,false) in - update(c,10,true); c + and newline = fn () => let val c = Array.array(!CharSetSize,false) in + Array.update(c,10,true); c end and endline = fn e => trail(e,CLASS(newline(),0)) @@ -728,12 +733,15 @@ in rep(min,max) end - and exp0 = fn () => case GetTok() of - CHARS(c) => exp1(CLASS(c,0)) - | LP => let val e = exp0() in - if !NextTok = RP then - (AdvanceTok(); exp1(e)) - else (prSynErr "missing ')'") end + and exp0 = fn () => case GetTok() + of CHARS(c) => exp1(CLASS(c,0)) + | LP => let + val e = exp0() + in + case !NextTok + of RP => (AdvanceTok(); exp1(e)) + | _ => (prSynErr "missing ')'") + end | ID(name) => exp1(lookup' name) | _ => raise SyntaxError @@ -826,8 +834,9 @@ exception ParseError; -fun parse() : (string * (int list * exp) list * ((string,pos*string) dictionary)) = - let val Accept = ref (create String.<=) : (string,pos*string) dictionary ref +fun parse() : (string * (int list * exp) list * ((string,pos*string) dictionary)) = let + fun isSEMI SEMI = true | isSEMI _ = false + val Accept = ref (create String.<=) : (string,pos*string) dictionary ref val rec ParseRtns = fn l => case getch(!LexBuf) of #"%" => let val c = getch(!LexBuf) in if c = #"%" then (implode (rev l)) @@ -843,14 +852,17 @@ ++StateNum; AdvanceTok(); f()) | _ => ()) in AdvanceTok(); f (); - if !NextTok=SEMI then ParseDefs() else + if isSEMI (!NextTok) then ParseDefs() else (prSynErr "expected ';'") end - | ID x => (LexState:=1; AdvanceTok(); if GetTok() = ASSIGN - then (SymTab := enter(!SymTab)(x,GetExp()); - if !NextTok = SEMI then ParseDefs() - else (prSynErr "expected ';'")) - else raise SyntaxError) + | ID x => ( + LexState:=1; AdvanceTok(); + case GetTok() + of ASSIGN => ( + SymTab := enter(!SymTab)(x,GetExp()); + if isSEMI (!NextTok) then ParseDefs() + else (prSynErr "expected ';'")) + | _ => raise SyntaxError) | REJECT => (HaveReject := true; ParseDefs()) | COUNT => (CountNewLines := true; ParseDefs()) | FULLCHARSET => (CharSetSize := 256; ParseDefs()) @@ -904,15 +916,15 @@ let val s = GetStates() val e = renum(CAT(GetExp(),END(0))) in - if !NextTok = ARROW then - (LexState:=2; AdvanceTok(); - case GetTok() of ACTION(act) => - if !NextTok=SEMI then - (Accept:=enter(!Accept) (Int.toString (!LeafNum),act); - ParseRules((s,e)::rules)) - else (prSynErr "expected ';'") - | _ => raise SyntaxError) - else (prSynErr "expected '=>'") + case !NextTok + of ARROW => (LexState:=2; AdvanceTok(); + case GetTok() of ACTION(act) => + if isSEMI (!NextTok) then + (Accept:=enter(!Accept) (Int.toString (!LeafNum),act); + ParseRules((s,e)::rules)) + else (prSynErr "expected ';'") + | _ => raise SyntaxError) + | _ => (prSynErr "expected '=>'") end) in let val usercode = ParseRtns nil in (ParseDefs(); (usercode,ParseRules(nil),!Accept)) @@ -927,6 +939,7 @@ in say "\n(* start state definitions *)\n\n"; make(listofdict(!StateTab)) end +(* structure L = struct nonfix > @@ -941,6 +954,34 @@ end structure RB = RedBlack(L) +*) + +(* a finite map implementation that replaces the original version, but + * keeps the same interface. + *) +structure RB : sig + type tree + type key + val empty : tree + val insert : key * tree -> tree + val lookup : key * tree -> key + exception notfound of key + end = struct + structure Map = RedBlackMapFn ( + struct + type ord_key = int list + val compare = List.collate Int.compare + end) + type key = (int list * string) + type tree = string Map.map + val empty = Map.empty + val insert = Map.insert' + exception notfound of key + fun lookup (arg as (key, _), t) = (case Map.find(t, key) + of SOME item => (key, item) + | NONE => raise notfound arg + (* end case *)) + end fun maketable (fins:(int * (int list)) list, tcs :(int * (int list)) list, @@ -1056,7 +1097,7 @@ | false => (say "(0, 0, \"\")]\n"; say "fun f(n, i, x) = (n, Vector.tabulate(i, decode x)) \n") - val _ = say "val s = map f (rev (tl (rev s))) \n" + val _ = say "val s = List.map f (List.rev (tl (List.rev s))) \n" val _ = say "exception LexHackingError \n" val _ = say "fun look ((j,x)::r, i: int) = if i = j then x else look(r, i) \n" val _ = say " | look ([], i) = raise LexHackingError\n" @@ -1118,7 +1159,7 @@ fun msg x = TextIO.output(TextIO.stdOut, x) - in (say "in Vector.fromList(map g \n["; makeTable(rs,newfins); + in (say "in Vector.fromList(List.map g \n["; makeTable(rs,newfins); say "])\nend\n"; msg ("\nNumber of states = " ^ (Int.toString (length trans))); msg ("\nNumber of distinct rows = " ^ (Int.toString (!count))); @@ -1145,13 +1186,13 @@ end fun leafdata(e:(int list * exp) list) = - let val fp = array(!LeafNum + 1,nil) - and leaf = array(!LeafNum + 1,EPS) + let val fp = Array.array(!LeafNum + 1,nil) + and leaf = Array.array(!LeafNum + 1,EPS) and tcpairs = ref nil and trailmark = ref ~1; val rec add = fn (nil,x) => () - | (hd::tl,x) => (update(fp,hd,union(fp sub hd,x)); + | (hd::tl,x) => (Array.update(fp,hd,union(fp sub hd,x)); add(tl,x)) and moredata = fn CLOSURE(e1) => @@ -1159,10 +1200,10 @@ | ALT(e1,e2) => (moredata(e1); moredata(e2)) | CAT(e1,e2) => (moredata(e1); moredata(e2); add(lastpos(e1),firstpos(e2))) - | CLASS(x,i) => update(leaf,i,CLASS(x,i)) - | TRAIL(i) => (update(leaf,i,TRAIL(i)); if !trailmark = ~1 + | CLASS(x,i) => Array.update(leaf,i,CLASS(x,i)) + | TRAIL(i) => (Array.update(leaf,i,TRAIL(i)); if !trailmark = ~1 then trailmark := i else ()) - | END(i) => (update(leaf,i,END(i)); if !trailmark <> ~1 + | END(i) => (Array.update(leaf,i,END(i)); if !trailmark <> ~1 then (tcpairs := (!trailmark,i)::(!tcpairs); trailmark := ~1) else ()) | _ => () @@ -1248,7 +1289,7 @@ end and startstates() = - let val startarray = array(!StateNum + 1, nil); + let val startarray = Array.array(!StateNum + 1, nil); fun listofarray(a,n) = let fun f i l = if i >= 0 then f (i-1) ((a sub i)::l) else l in f (n-1) nil end @@ -1257,7 +1298,7 @@ | (startlist,e)::tl => (fix(startlist,firstpos(e));makess(tl)) and fix = fn (nil,_) => () - | (s::tl,firsts) => (update(startarray,s, + | (s::tl,firsts) => (Array.update(startarray,s, union(firsts,startarray sub s)); fix(tl,firsts)) in makess(rules);listofarray(startarray, !StateNum + 1) @@ -1311,7 +1352,7 @@ else sayln "\t| action (i,(node::acts)::l) ="; sayln "\t\tcase node of"; sayln "\t\t Internal.N yyk => "; - sayln "\t\t\t(let fun yymktext() = substring(!yyb,i0,i-i0)\n\ + sayln "\t\t\t(let fun yymktext() = String.substring(!yyb,i0,i-i0)\n\ \\t\t\t val yypos = YYPosInt.+(YYPosInt.fromInt i0, !yygone)"; if !CountNewLines then (sayln "\t\t\tval _ = yylineno := CharVectorSlice.foldli"; @@ -1338,7 +1379,7 @@ if !UsesTrailingContext then say ",nil" else (); say ") else"; sayln "\t let val newchars= if !yydone then \"\" else yyinput 1024"; - sayln "\t in if (size newchars)=0"; + sayln "\t in if (String.size newchars)=0"; sayln "\t\t then (yydone := true;"; say "\t\t if (l=i0) then UserDeclarations.eof "; sayln (case !ArgCode of NONE => "()" | SOME _ => "yyarg"); @@ -1346,9 +1387,9 @@ if !UsesTrailingContext then sayln ",nil))" else sayln "))"; sayln "\t\t else (if i0=l then yyb := newchars"; - sayln "\t\t else yyb := substring(!yyb,i0,l-i0)^newchars;"; + sayln "\t\t else yyb := String.substring(!yyb,i0,l-i0)^newchars;"; sayln "\t\t yygone := YYPosInt.+(!yygone, YYPosInt.fromInt i0);"; - sayln "\t\t yybl := size (!yyb);"; + sayln "\t\t yybl := String.size (!yyb);"; sayln "\t\t scan (s,AcceptingLeaves,l-i0,0))"; sayln "\t end"; sayln "\t else let val NewChar = Char.ord(CharVector.sub(!yyb,l))"; @@ -1365,7 +1406,7 @@ sayln "\tend"; sayln "\tend"; if !UsesPrevNewLine then () else sayln "(*"; - sayln "\tval start= if substring(!yyb,!yybufpos-1,1)=\"\\n\""; + sayln "\tval start= if String.substring(!yyb,!yybufpos-1,1)=\"\\n\""; sayln "then !yybegin+1 else !yybegin"; if !UsesPrevNewLine then () else sayln "*)"; say "\tin scan("; diff -Nru mlton-20130715/mllex/lexgen.tex mlton-20210117+dfsg/mllex/lexgen.tex --- mlton-20130715/mllex/lexgen.tex 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mllex/lexgen.tex 1970-01-01 00:00:00.000000000 +0000 @@ -1,623 +0,0 @@ -% Modified by Matthew Fluet on 2007-11-07. -% Add %posint command. -% -% Modified by Matthew Fluet on 2007-10-31. -% Add \r escape sequence (from Florian Weimer). -% Fix TeX formatting bug (from Florian Weimer). -% -\documentstyle{article} -\title{ A lexical analyzer generator for Standard ML.\\ - Version 1.6.0, October 1994 - } -\author{ Andrew W. Appel$^1$\\ - James S. Mattson\\ - David R. Tarditi$^2$\\ -\\ -\small -$^1$Department of Computer Science, Princeton University \\ -\small -$^2$School of Computer Science, Carnegie Mellon University -} -\date{} -\begin{document} -\maketitle -\begin{center} -(c) 1989-94 Andrew W. Appel, James S. Mattson, David R. Tarditi -\end{center} - -{\bf -This software comes with ABSOLUTELY NO WARRANTY. It is subject only to -the terms of the ML-Yacc NOTICE, LICENSE, and DISCLAIMER (in the -file COPYRIGHT distributed with this software). -} - -\vspace{1in} - -New in this version: -\begin{itemize} -\item REJECT is much less costly than before. -\item Lexical analyzers with more than 255 states can now compile in your -lifetime. -\end{itemize} - -\newpage -\tableofcontents -\newpage - -\section{General Description} - -Computer programs often need to divide their input into words and -distinguish between different kinds of words. Compilers, for -example, need to distinguish between integers, reserved words, and -identifiers. Applications programs often need to be able to -recognize components of typed commands from users. - -The problem of segmenting input into words and recognizing classes of -words is known as lexical analysis. Small cases of this problem, -such as reading text strings separated by spaces, can be solved by -using hand-written programs. Larger cases of this problem, such as -tokenizing an input stream for a compiler, can also be solved using -hand-written programs. - -A hand-written program for a large lexical analysis problem, however, -suffers from two major problems. First, the program requires a fair -amount of programmer time to create. Second, the description of -classes of words is not explicit in the program. It must be inferred -from the program code. This makes it difficult to verify if the -program recognizes the correct words for each class. It also makes -future maintenance of the program difficult. - -Lex, a programming tool for the Unix system, is a successful solution -to the general problem of lexical analysis. It uses regular -expressions to describe classes of words. A program fragment is -associated with each class of words. This information is given to -Lex as a specification (a Lex program). Lex produces a program for a -function that can be used to perform lexical analysis. - -The function operates as follows. It finds the longest word starting -from the current position in the input stream that is in one of the -word classes. It executes the program fragment associated with the -class, and sets the current position in the input stream to be the -character after the word. The program fragment has the actual text -of the word available to it, and may be any piece of code. For many -applications it returns some kind of value. - -Lex allows the programmer to make the language description explicit, -and to concentrate on what to do with the recognized words, not how -to recognize the words. It saves programmer time and increases -program maintainability. - -Unfortunately, Lex is targeted only C. It also places artificial -limits on the size of strings that can be recognized. - -ML-Lex is a variant of Lex for the ML programming language. ML-Lex -has a syntax similar to Lex, and produces an ML program instead of a -C program. ML-Lex produces a program that runs very efficiently. -Typically the program will be as fast or even faster than a -hand-coded lexer implemented in Standard ML. - -The program typically uses only a small amount of space. -ML-Lex thus allows ML programmers the same benefits that Lex allows C -programmers. It also does not place artificial limits on the size of -recognized strings. - -\section{ML-Lex specifications} - -An ML-Lex specification has the general format: - -\begin{quote} - {user declarations} - \verb|%%| - {ML-Lex definitions} - \verb|%%| - {rules} -\end{quote} - -Each section is separated from the others by a \verb|%%| delimiter. - -The rules are used to define the lexical analysis function. Each -rule has two parts---a regular expression and an action. The regular -expression defines the word class that a rule matches. The action is -a program fragment to be executed when a rule matches the input. The -actions are used to compute values, and must all return values of the -same type. - -The user can define values available to all rule actions in the user -declarations section. The user must define two values in this -section---a type lexresult and a function eof. Lexresult defines the -type of values returned by the rule actions. The function "eof" is -called by the lexer when the end of the input stream is reached. It -will typically return a value signalling eof or raise an exception. -It is called with the same argument as lex (see \verb|%arg|, below), -and must return a value of type lexresult. - -In the definitions section, the user can define named regular -expressions, a set of start states, and specify which of the various -bells and whistles of ML-Lex are desired. - -The start states allow the user to control when certain rules are -matched. Rules may be defined to match only when the lexer is in -specific start states. The user may change the lexer's start state -in a rule action. This allows the user to specify special handling -of lexical objects. - -This feature is typically used to handle quoted strings with escapes -to denote special characters. The rules to recognize the inside -contents of a string are defined for only one start state. This -start state is entered when the beginning of a string is recognized, -and exited when the end of the string is recognized. - -\section{Regular expressions} - -Regular expressions are a simple language for denoting classes of -strings. A regular expression is defined inductively over an -alphabet with a set of basic operations. The alphabet for ML-Lex is -the Ascii character set (character codes 0--127; or if -\verb|%full| is used, 0--255). - -The syntax and semantics of regular expressions will be described in -order of decreasing precedence (from the most tightly binding operators -to the most weakly binding): - -\begin{itemize} -\item An individual character stands for itself, except for the - reserved characters \verb@? * + | ( ) ^ $ / ; . = < > [ { " \@ - -\item[\\] A backslash followed by one of the reserved characters stands - for that character. - -\item A set of characters enclosed in square brackets [ ] stands - for any one of those characters. Inside the brackets, only - the symbols \verb|\ - ^| are reserved. An initial up-arrow - \verb|^| stands - for the complement of the characters listed, e.g. \verb|[^abc]| - stands any character except a, b, or c. The hyphen - denotes - a range of characters, e.g. \verb|[a-z]| stands for any lower-case - alphabetic character, and \verb|[0-9a-fA-F]| stands for any hexadecimal - digit. To include \verb|^| literally in a bracketed set, put it anywhere - but first; to include \verb|-| literally in a set, put it first or last. - -\item[\verb|.|] The dot \verb|.| character stands for any character except newline, - i.e. the same as \verb|[^\n]| - -\item The following special escape sequences are available, inside - or outside of square-brackets: - - \begin{tabular}{ll} - \verb|\b|& backspace\\ - \verb|\n|& newline\\ - \verb|\r|& carriage return\\ - \verb|\t|& tab\\ - \verb|\h|& stands for all characters with codes $>127$,\\ - &~~~~ when 7-bit characters are used.\\ - \verb|\ddd|& where \verb|ddd| is a 3 digit decimal escape.\\ - - \end{tabular} - -\item[\verb|"|] A sequence of characters will stand for itself (reserved - characters will be taken literally) if it is enclosed in - double quotes \verb|" "|. - -\item[\{\}] A named regular expression (defined in the ``definitions" - section) may be referred to by enclosing its name in - braces \verb|{ }|. - -\item[()] Any regular expression may be enclosed in parentheses \verb|( )| - for syntactic (but, as usual, not semantic) effect. - -\item[\verb|*|] The postfix operator \verb|*| stands for Kleene closure: - zero or more repetitions of the preceding expression. - -\item[\verb|+|] The postfix operator \verb|+| stands for one or more repetitions - of the preceding expression. - -\item[\verb|?|] The postfix operator \verb|?| stands for zero or one occurrence of - the preceding expression. - -\item A postfix repetition range $\{n_1,n_2\}$ where $n_1$ and $n_2$ are small - integers stands for any number of repetitions between $n_1$ and $n_2$ - of the preceding expression. The notation $\{n_1\}$ stands for - exactly $n_1$ repetitions. - -\item Concatenation of expressions denotes concatenation of strings. - The expression $e_1 e_2$ stands for any string that results from - the concatenation of one string that matches $e_1$ with another - string that matches $e_2$. - -\item\verb-|- The infix operator \verb-|- stands for alternation. The expression - $e_1$~\verb"|"~$e_2$ stands for anything that either $e_1$ or $e_2$ stands for. - -\item[\verb|/|] The infix operator \verb|/| denotes lookahead. Lookahead is not - implemented and cannot be used, because there is a bug - in the algorithm for generating lexers with lookahead. If - it could be used, the expression $e_1 / e_2$ would match any string - that $e_1$ stands for, but only when that string is followed by a - string that matches $e_2$. - -\item When the up-arrow \verb|^| occurs at the beginning of an expression, - that expression will only match strings that occur at the - beginning of a line (right after a newline character). - -\item[\$] The dollar sign of C Lex \$ is not implemented, since it is an abbreviation - for lookahead involving the newline character (that is, it - is an abbreviation for \verb|/\n|). -\end{itemize} - -Here are some examples of regular expressions, and descriptions of the -set of strings they denote: - -\begin{tabular}{ll} -\verb~0 | 1 | 2 | 3~& A single digit between 0 and 3\\ -\verb|[0123]|& A single digit between 0 and 3\\ -\verb|0123|& The string ``0123"\\ -\verb|0*|& All strings of 0 or more 0's\\ -\verb|00*|& All strings of 1 or more 0's\\ -\verb|0+|& All strings of 1 or more 0's\\ -\verb|[0-9]{3}|& Any three-digit decimal number.\\ -\verb|\\[ntb]|& A newline, tab, or backspace.\\ -\verb|(00)*|& Any string with an even number of 0's. -\end{tabular} - -\section{ML-Lex syntax summary} - -\subsection{User declarations} - -Anything up to the first \verb|%%| is in the user declarations section. The -user should note that no symbolic identifier containing -\verb|%%| can be -used in this section. - -\subsection{ML-Lex definitions} - -Start states can be defined with -\begin{quote} -\verb|%s| {identifier list} \verb|;| -\end{quote} - -An identifier list consists of one or more identifiers. - -An identifier consists of one or more letters, digits, underscores, -or primes, and must begin with a letter. - -Named expressions can be defined with - -\begin{quote} - {identifier} = {regular expression} ; -\end{quote} - -Regular expressions are defined below. - -The following \% commands are also available: - -\begin{description} -\item[\tt \%reject] create REJECT() function -\item[\tt \%count] count newlines using yylineno -\item[\tt \%posarg] pass initial-position argument to makeLexer -\item[\tt \%full] create lexer for the full 8-bit character set, - with characters in the range 0--255 permitted - as input. -\item[\tt \%structure \{identifier\}] name the structure in the output program - {identifier} instead of Mlex -\item[\tt \%header] use code following it to create header for lexer - structure -\item[\tt \%arg] extra (curried) formal parameter argument to be - passed to the lex functions, and to be passed - to the eof function in place of () -\item[\tt \%posint \{identifier\}] use the {\tt INTEGER} structure for the - type of {\tt yypos}; use {\tt Int64} or {\tt Position} - to allow lexing of multi-gigabyte input files -\end{description} - These functions are discussed in section~\ref{avail}. - -\subsection{Rules} - -Each rule has the format: - -\begin{quote} - \verb|<|{\it start state list}\verb|>| {\it regular expression} \verb|=> (| {\it code} \verb|);| -\end{quote} - -All parentheses in {\it code} must be balanced, including those -used in strings and comments. - -The {\it start state list} is optional. It consists of a list of -identifiers separated by commas, and is delimited by triangle -brackets \verb|< >|. Each identifier must be a start state defined in the -\verb|%s| section above. - -The regular expression is only recognized when the lexer is in one of -the start states in the start state list. If no start state list is -given, the expression is recognized in all start states. - -The lexer begins in a pre-defined start state called \verb|INITIAL|. - -The lexer resolves conflicts among rules by choosing the rule with -the longest match, and in the case two rules match the same string, -choosing the rule listed first in the specification. - -The rules should match all possible input. If some input occurs that -does not match any rule, the lexer created by ML-Lex will raise an -exception LexError. Note that this differs from C Lex, which prints -any unmatched input on the standard output. - -\section{Values available inside the code associated with a rule.} -\label{avail} - -ML-Lex places the value of the string matched by a regular expression -in \verb|yytext|, a string variable. - -The user may recursively -call the lexing function with \verb|lex()|. (If \verb|%arg| is used, the -lexing function may be re-invoked with the same argument by using -continue().) This is convenient for ignoring white space or comments silently: - -\begin{verbatim} - [\ \t\n]+ => ( lex()); -\end{verbatim} - -To switch start states, the user may call \verb|YYBEGIN| with the name of a -start state. - -The following values will be available only if the corresponding \verb|%| -command is in the ML-Lex definitions sections: - -\begin{tabular}{lll} -\\ -{\bf Value}&{\bf \% command}&{\bf description}\\ -\hline -{\tt REJECT} &{\tt\%reject}&\parbox[t]{2.6in}{{\tt REJECT()} causes the current - rule to be ``rejected.'' - The lexer behaves as if the - current rule had not matched; - another rule that matches this - string, or that matches the longest - possible prefix of this string, - is used instead.} \\ -{\tt yypos} & & \parbox[t]{2.6in}{The position of the first character -of {\tt yytext}, relative to the beginning of the file.}\\ -{\tt yylineno } & {\tt \%count} & Current line number\\ -\\ -\end{tabular} - - -These values should be used only if necessary. Adding {\tt REJECT} to a -lexer will slow it down by 20\%; adding {\tt yylineno} will slow it down by -another 20\%, or more. (It is much more efficient to -recognize \verb|\n| and -have an action that increments the line-number variable.) The use of -the lookahead operator {\tt /} will also slow down the entire lexer. -The character-position, {\tt yypos}, is not costly to maintain, however. - -\paragraph{Bug.} The position of the first character in the file -is reported as 2 (unless the {\tt \%posarg} feature is used). -To preserve compatibility, this bug has not been fixed. - -\section{Running ML-Lex} - -From the Unix shell, run {\tt sml-lex~myfile.lex} -The output file will be myfile.lex.sml. The extension {\tt .lex} is not -required but is recommended. - -Within an interactive system [not the preferred method]: -Use {\tt lexgen.sml}; this will create a structure LexGen. The function -LexGen.lexGen creates a program for a lexer from an input -specification. It takes a string argument -- the name of the file -containing the input specification. The output file name is -determined by appending ``{\tt .sml}'' to the input file name. - -\section{Using the program produced by ML-Lex} - -When the output file is loaded, it will create a structure Mlex that -contains the function {\tt makeLexer} which takes a function from -${\it int} \rightarrow {\it string}$ and returns a lexing function: - -\begin{verbatim} - val makeLexer : (int->string) -> yyarg -> lexresult -\end{verbatim} -where {\tt yyarg} is the type given in the {\tt \%yyarg} directive, -or {\tt unit} if there is no {\tt \%yyarg} directive. - -For example, - -\begin{verbatim} - val lexer = Mlex.makeLexer (inputc (open_in "f")) -\end{verbatim} - -creates a lexer that operates on the file whose name is f. - -When the {\tt \%posarg} directive is used, the type of -{\tt makeLexer} is -\begin{verbatim} - val makeLexer : ((int->string)*int) -> yyarg -> lexresult -\end{verbatim} -where the extra {\tt int} argument is one less than the {\tt yypos} -of the first character in the input. The value $k$ would be used, -for example, when creating -a lexer to start in the middle of a file, when $k$ characters have -already been read. At the beginning of the file, $k=0$ should be used. - -The ${\it int} \rightarrow {\it string}$ function -should read a string of characters -from the input stream. It should return a null string to indicate -that the end of the stream has been reached. The integer is the -number of characters that the lexer wishes to read; the function may -return any non-zero number of characters. For example, - -\begin{verbatim} - val lexer = - let val input_line = fn f => - let fun loop result = - let val c = input (f,1) - val result = c :: result - in if String.size c = 0 orelse c = "\n" then - String.implode (rev result) - else loop result - end - in loop nil - end - in Mlex.makeLexer (fn n => input_line std_in) - end -\end{verbatim} - -is appropriate for interactive streams where prompting, etc. occurs; -the lexer won't care that \verb|input_line| might return a string of more -than or less than $n$ characters. - -The lexer tries to read a large number of characters from the input -function at once, and it is desirable that the input function return -as many as possible. Reading many characters at once makes the lexer -more efficient. Fewer input calls and buffering operations are -needed, and input is more efficient in large block reads. For -interactive streams this is less of a concern, as the limiting factor -is the speed at which the user can type. - -To obtain a value, invoke the lexer by passing it a unit: - -\begin{verbatim} - val nextToken = lexer() -\end{verbatim} - -If one wanted to restart the lexer, one would just discard {\tt lexer} -and create a new lexer on the same stream with another call to -{\tt makeLexer}. This is the best way to discard any characters buffered -internally by the lexer. - -All code in the user declarations section is placed inside a -structure UserDeclarations. To access this structure, use the path name -{\tt Mlex.UserDeclarations}. - -If any input cannot be matched, the program will raise the exception -{\tt Mlex.LexError}. An internal error (i.e. bug) will cause the -exception {\tt Internal.LexerError} to be raised. - -If {\tt \%structure} is used, remember that the structure name will no -longer be Mlex, but the one specified in the command. - -\section{Sample} - -Here is a sample lexer for a calculator program: - -\small -\begin{verbatim} -datatype lexresult= DIV | EOF | EOS | ID of string | LPAREN | - NUM of int | PLUS | PRINT | RPAREN | SUB | TIMES - -val linenum = ref 1 -val error = fn x => output(std_out,x ^ "\n") -val eof = fn () => EOF -%% -%structure CalcLex -alpha=[A-Za-z]; -digit=[0-9]; -ws = [\ \t]; -%% -\n => (inc linenum; lex()); -{ws}+ => (lex()); -"/" => (DIV); -";" => (EOS); -"(" => (LPAREN); -{digit}+ => (NUM (revfold (fn(a,r)=>ord(a)-ord("0")+10*r) (explode yytext) 0)); -")" => (RPAREN); -"+" => (PLUS); -{alpha}+ => (if yytext="print" then PRINT else ID yytext); -"-" => (SUB); -"*" => (TIMES); -. => (error ("calc: ignoring bad character "^yytext); lex()); -\end{verbatim} - - -Here is the parser for the calculator: -\begin{verbatim} - -(* Sample interactive calculator to demonstrate use of lexer - - The original grammar was - - stmt_list -> stmt_list stmt - stmt -> print exp ; | exp ; - exp -> exp + t | exp - t | t - t -> t * f | t/f | f - f -> (exp) | id | num - - The function parse takes a stream and parses it for the calculator - program. - - If a syntax error occurs, parse prints an error message and calls - itself on the stream. On this system that has the effect of ignoring - all input to the end of a line. -*) - -structure Calc = - struct - open CalcLex - open UserDeclarations - exception Error - fun parse strm = - let - val say = fn s => output(std_out,s) - val input_line = fn f => - let fun loop result = - let val c = input (f,1) - val result = c :: result - in if String.size c = 0 orelse c = "\n" then - String.implode (rev result) - else loop result - end - in loop nil - end - val lexer = makeLexer (fn n => input_line strm) - val nexttok = ref (lexer()) - val advance = fn () => (nexttok := lexer(); !nexttok) - val error = fn () => (say ("calc: syntax error on line" ^ - (makestring(!linenum)) ^ "\n"); raise Error) - val lookup = fn i => - if i = "ONE" then 1 - else if i = "TWO" then 2 - else (say ("calc: unknown identifier '" ^ i ^ "'\n"); raise Error) - fun STMT_LIST () = - case !nexttok of - EOF => () - | _ => (STMT(); STMT_LIST()) - - and STMT() = - (case !nexttok - of EOS => () - | PRINT => (advance(); say ((makestring (E():int)) ^ "\n"); ()) - | _ => (E(); ()); - case !nexttok - of EOS => (advance()) - | _ => error()) - and E () = E' (T()) - and E' (i : int ) = - case !nexttok of - PLUS => (advance (); E'(i+T())) - | SUB => (advance (); E'(i-T())) - | RPAREN => i - | EOF => i - | EOS => i - | _ => error() - and T () = T'(F()) - and T' i = - case !nexttok of - PLUS => i - | SUB => i - | TIMES => (advance(); T'(i*F())) - | DIV => (advance (); T'(i div F())) - | EOF => i - | EOS => i - | RPAREN => i - | _ => error() - and F () = - case !nexttok of - ID i => (advance(); lookup i) - | LPAREN => - let val v = (advance(); E()) - in if !nexttok = RPAREN then (advance (); v) else error() - end - | NUM i => (advance(); i) - | _ => error() - in STMT_LIST () handle Error => parse strm - end - end -\end{verbatim} -\end{document} diff -Nru mlton-20130715/mllex/macros.hva mlton-20210117+dfsg/mllex/macros.hva --- mlton-20130715/mllex/macros.hva 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mllex/macros.hva 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -\newcommand{\parbox}[2]{#2} diff -Nru mlton-20130715/mllex/main.sml mlton-20210117+dfsg/mllex/main.sml --- mlton-20130715/mllex/main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mllex/main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mllex/Makefile mlton-20210117+dfsg/mllex/Makefile --- mlton-20130715/mllex/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mllex/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,41 +1,37 @@ -## Copyright (C) 2009,2013 Matthew Fluet. +## Copyright (C) 2009,2013,2018-2020 Matthew Fluet. # Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## -SRC := $(shell cd .. && pwd) -BUILD := $(SRC)/build -BIN := $(BUILD)/bin -LIB := $(BUILD)/lib -MLTON := mlton -TARGET := self -FLAGS := -target $(TARGET) +ROOT := .. +include $(ROOT)/Makefile.config + +###################################################################### + NAME := mllex -PATH := $(BIN):$(shell echo $$PATH) all: $(NAME) -$(NAME): $(NAME).mlb $(shell PATH="$(BIN):$$PATH" && "$(MLTON)" -stop f $(NAME).mlb) +$(NAME): $(NAME).mlb $(shell "$(RUN_MLTON_DEPS)" -stop f $(NAME).mlb) @echo 'Compiling $(NAME)' - "$(MLTON)" $(FLAGS) $(NAME).mlb + "$(RUN_MLTON)" @MLton $(RUN_MLTON_RUNTIME_ARGS) -- $(RUN_MLTON_COMPILE_ARGS) -target $(TARGET) $(NAME).mlb + +.PHONY: clean +clean: + $(SRC)/bin/clean -html/index.html: $(TEX_FILES) - mkdir -p html - hevea -fix -o html/mllex.html -exec xxdate.exe macros.hva lexgen.tex - cd html && hacha mllex.html && rm -f mllex.html PDFLATEX := pdflatex -lexgen.pdf: lexgen.tex - $(PDFLATEX) lexgen.tex - $(PDFLATEX) lexgen.tex +doc/mllex.pdf: + $(MAKE) -C doc mllex.pdf -mllex.pdf: lexgen.pdf - cp lexgen.pdf mllex.pdf +mllex.pdf: doc/mllex.pdf + $(CP) doc/mllex.pdf mllex.pdf DOCS := ifneq ($(shell which $(PDFLATEX) 2> /dev/null),) @@ -45,12 +41,10 @@ .PHONY: docs docs: $(DOCS) -.PHONY: clean -clean: - ../bin/clean .PHONY: test test: $(NAME) - cp -p ../mlton/front-end/ml.lex . && \ + $(CP) ../mlton/front-end/ml.lex . \ $(NAME) ml.lex && \ - diff ml.lex.sml ../mlton/front-end/ml.lex.sml + $(DIFF) ml.lex.sml ../mlton/front-end/ml.lex.sml \ + $(RM) ml.lex ml.lex.sml diff -Nru mlton-20130715/mllex/mllex.mlb mlton-20210117+dfsg/mllex/mllex.mlb --- mlton-20130715/mllex/mllex.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mllex/mllex.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2020 Matthew Fluet. * Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -10,6 +10,7 @@ local local $(SML_LIB)/basis/basis.mlb + $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb lexgen.sml in structure LexGen Binary files /tmp/tmpeijleaj1/J0IhGCp1bz/mlton-20130715/mllex/mllex.pdf and /tmp/tmpeijleaj1/Onfiehphu5/mlton-20210117+dfsg/mllex/mllex.pdf differ diff -Nru mlton-20130715/mlnlffigen/ast-to-spec.sml mlton-20210117+dfsg/mlnlffigen/ast-to-spec.sml --- mlton-20130715/mlnlffigen/ast-to-spec.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlnlffigen/ast-to-spec.sml 2021-12-28 17:19:36.000000000 +0000 @@ -23,6 +23,7 @@ exception VoidType exception Ellipsis exception Duplicate of string + exception SkipFunction of string fun bug m = raise Fail ("AstToSpec: bug: " ^ m) fun err m = raise Fail ("AstToSpec: error: " ^ m) @@ -196,6 +197,14 @@ and valty_nonvoid C t = valty C t handle VoidType => err "void variable type" + and fun_valty_nonvoid C t = + case valty_nonvoid C t of + Spec.STRUCT tag => + raise SkipFunction "struct argument not supported" + | Spec.UNION tag => + raise SkipFunction "union argument not supported" + | ty => ty + and typeref (tid, otherwise, C) = case Tidtab.find (tidtab, tid) of NONE => bug "tid not bound in tidtab" @@ -377,17 +386,17 @@ args = case args of [(arg, _)] => (case getCoreType arg of A.Void => [] - | _ => [valty_nonvoid C arg]) + | _ => [fun_valty_nonvoid C arg]) | _ => let fun build [] = [] | build [(x, _)] = - ([valty_nonvoid C x] + ([fun_valty_nonvoid C x] handle Ellipsis => (warnLoc ("varargs not supported; \ \ignoring the ellipsis\n"); [])) | build ((x, _) :: xs) = - valty_nonvoid C x :: build xs + fun_valty_nonvoid C x :: build xs in build args end } @@ -415,6 +424,8 @@ spec = cft tl_context fs, argnames = anlo }) | NONE => bug "function without function type") + handle SkipFunction reason => + warnLoc (reason ^ "; skipping function\n") in case #stClass f of A.EXTERN => doit () diff -Nru mlton-20130715/mlnlffigen/call-main.sml mlton-20210117+dfsg/mlnlffigen/call-main.sml --- mlton-20130715/mlnlffigen/call-main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlnlffigen/call-main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlnlffigen/control.sig mlton-20210117+dfsg/mlnlffigen/control.sig --- mlton-20130715/mlnlffigen/control.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlnlffigen/control.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2005-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlnlffigen/control.sml mlton-20210117+dfsg/mlnlffigen/control.sml --- mlton-20130715/mlnlffigen/control.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlnlffigen/control.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2009 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlnlffigen/cpif-dev.sml mlton-20210117+dfsg/mlnlffigen/cpif-dev.sml --- mlton-20130715/mlnlffigen/cpif-dev.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlnlffigen/cpif-dev.sml 2021-12-28 17:19:36.000000000 +0000 @@ -24,7 +24,7 @@ datatype device = DEV of { filename: string, buffer : string list ref, - wid : int } + wid : int option ref } (* no style support *) type style = unit @@ -34,7 +34,7 @@ fun defaultStyle _ = () (* Allocate an empty buffer and remember the file name. *) - fun openOut (f, w) = DEV { filename = f, buffer = ref [], wid = w } + fun openOut (f, w) = DEV { filename = f, buffer = ref [], wid = ref (SOME w) } (* Calculate the final output and compare it with the current * contents of the file. If they do not coincide, write the file. *) @@ -55,20 +55,30 @@ end handle _ => write () end - (* maximum printing depth (in terms of boxes) *) - fun depth _ = NONE + (* placeholders for the unsupported property functions *) + fun maxDepth _ = NONE + fun depth _ = NONE (* DEPRECATED *) + fun setMaxDepth _ = () + fun ellipses _ = ("", 0) + fun setEllipses _ = () + fun setEllipsesWithSz _ = () + fun maxIndent _ = NONE + fun setMaxIndent _ = () + fun textWidth _ = NONE + fun setTextWidth _ = () (* the width of the device *) - fun lineWidth (DEV{wid, ...}) = SOME wid - (* the suggested maximum width of text on a line *) - fun textWidth _ = NONE + fun lineWidth (DEV{wid, ...}) = !wid + fun setLineWidth (DEV{wid, ...}, w) = wid := w (* output a string/character in the current style to the device *) fun string (DEV { buffer, ... }, s) = buffer := s :: !buffer - - fun char (d, c) = string (d, String.str c) + (* output some number of spaces to the device *) fun space (d, n) = string (d, StringCvt.padLeft #" " n "") + val indent = space + (* output a new-line to the device *) fun newline d = string (d, "\n") - + fun char (d, c) = string (d, String.str c) + (* nothing to flush *) fun flush d = () end diff -Nru mlton-20130715/mlnlffigen/gen-cppcmd mlton-20210117+dfsg/mlnlffigen/gen-cppcmd --- mlton-20130715/mlnlffigen/gen-cppcmd 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlnlffigen/gen-cppcmd 2021-12-28 17:19:36.000000000 +0000 @@ -4,8 +4,7 @@ dir=`dirname "$0"` src=`cd "$dir/.." && pwd` -lib="$src/build/lib" -eval `"$lib/platform"` +eval `"$src/bin/platform"` output () { echo "val defaultCppCmd = \"gcc $1 -E -U__GNUC__ %o %s > %t\"" diff -Nru mlton-20130715/mlnlffigen/gen.sml mlton-20210117+dfsg/mlnlffigen/gen.sml --- mlton-20130715/mlnlffigen/gen.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlnlffigen/gen.sml 2021-12-28 17:19:36.000000000 +0000 @@ -4,7 +4,7 @@ (* Copyright (C) 2005-2009 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) *) diff -Nru mlton-20130715/mlnlffigen/main.sml mlton-20210117+dfsg/mlnlffigen/main.sml --- mlton-20130715/mlnlffigen/main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlnlffigen/main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2005-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2020 Matthew Fluet. + * Copyright (C) 2005-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -65,8 +66,7 @@ let val regexp = SOME (RE.compileString re) - handle RegExpSyntax.CannotParse => NONE - | RegExpSyntax.CannotCompile => NONE + handle RegExpSyntax.CannotCompile => NONE in case regexp of SOME regexp => diff -Nru mlton-20130715/mlnlffigen/Makefile mlton-20210117+dfsg/mlnlffigen/Makefile --- mlton-20130715/mlnlffigen/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlnlffigen/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,29 +1,28 @@ -## Copyright (C) 2005-2009 Henry Cejtin, Matthew Fluet, Suresh +## Copyright (C) 2018-2020 Matthew Fluet + # Copyright (C) 2005-2009 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## -SRC := $(shell cd .. && pwd) -BUILD := $(SRC)/build -BIN := $(BUILD)/bin -LIB := $(BUILD)/lib -MLTON := mlton -TARGET := self -FLAGS := -target $(TARGET) -default-ann 'sequenceNonUnit warn' +ROOT := .. +include $(ROOT)/Makefile.config + +###################################################################### + NAME := mlnlffigen -PATH := $(BIN):$(shell echo $$PATH) all: $(NAME) -cppcmd.sml : gen-cppcmd - ./gen-cppcmd > $@ - -$(NAME): $(NAME).mlb $(shell PATH="$(BIN):$$PATH" && "$(MLTON)" -stop f $(NAME).mlb) +$(NAME): $(NAME).mlb $(shell "$(RUN_MLTON_DEPS)" -stop f $(NAME).mlb) @echo 'Compiling $(NAME)' - $(MLTON) $(FLAGS) $(NAME).mlb + "$(RUN_MLTON)" @MLton $(RUN_MLTON_RUNTIME_ARGS) -- $(RUN_MLTON_COMPILE_ARGS) -target $(TARGET) $(NAME).mlb .PHONY: clean clean: - ../bin/clean + $(SRC)/bin/clean + + +cppcmd.sml : gen-cppcmd + ./gen-cppcmd > $@ diff -Nru mlton-20130715/mlnlffigen/mlnlffigen.mlb mlton-20210117+dfsg/mlnlffigen/mlnlffigen.mlb --- mlton-20130715/mlnlffigen/mlnlffigen.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlnlffigen/mlnlffigen.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2005-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlnlffigen/sources.mlb mlton-20210117+dfsg/mlnlffigen/sources.mlb --- mlton-20130715/mlnlffigen/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlnlffigen/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,17 +1,34 @@ (* Copyright (C) 2005-2009 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) local basis basis_lib = bas $(SML_LIB)/basis/basis.mlb end - basis mlton_lib = bas ../lib/mlton/sources.mlb end + basis mlton_lib = bas local + ../lib/mlton/sources.mlb + in + structure File + structure List + structure HashSet + structure MLton + structure Out + structure Option + structure Process + structure Popt + structure Promise + structure Result + structure String + structure Vector + + functor Control + end end basis smlnj_lib = bas $(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb end basis pp_lib = bas $(SML_LIB)/smlnj-lib/PP/pp-lib.mlb end basis regexp_lib = bas $(SML_LIB)/smlnj-lib/RegExp/regexp-lib.mlb end - basis ckit_lib = bas $(SML_LIB)/ckit-lib/src/ckit-lib.mlb end + basis ckit_lib = bas $(SML_LIB)/ckit-lib/ckit-lib.mlb end local open basis_lib in endian.sml @@ -32,7 +49,7 @@ cpif-dev.sml pp.sml end - local open mlton_lib ckit_lib in + local open basis_lib mlton_lib ckit_lib in control.sig control.sml end @@ -53,11 +70,11 @@ ast-to-spec.sml hash.sml end - local open mlton_lib ckit_lib in + local open basis_lib mlton_lib ckit_lib in gen.sml end - local open mlton_lib regexp_lib in + local open basis_lib mlton_lib regexp_lib in main.sml end in diff -Nru mlton-20130715/mlprof/call-main.sml mlton-20210117+dfsg/mlprof/call-main.sml --- mlton-20130715/mlprof/call-main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlprof/call-main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlprof/main.sml mlton-20210117+dfsg/mlprof/main.sml --- mlton-20130715/mlprof/main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlprof/main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlprof/Makefile mlton-20210117+dfsg/mlprof/Makefile --- mlton-20130715/mlprof/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlprof/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,32 +1,25 @@ -## Copyright (C) 2009 Matthew Fluet. +## Copyright (C) 2009,2018-2020 Matthew Fluet. # Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## -SRC := $(shell cd .. && pwd) -BUILD := $(SRC)/build -BIN := $(BUILD)/bin -LIB := $(BUILD)/lib -MLTON := mlton -TARGET := self -FLAGS := -target $(TARGET) -default-ann 'sequenceNonUnit warn' -default-ann 'warnUnused true' +ROOT := .. +include $(ROOT)/Makefile.config + +###################################################################### + NAME := mlprof -PATH := $(BIN):$(shell echo $$PATH) all: $(NAME) -$(NAME): $(NAME).mlb $(shell PATH="$(BIN):$$PATH" && "$(MLTON)" -stop f $(NAME).mlb) +$(NAME): $(NAME).mlb $(shell "$(RUN_MLTON_DEPS)" -stop f $(NAME).mlb) @echo 'Compiling $(NAME)' - $(MLTON) $(FLAGS) $(NAME).mlb + "$(RUN_MLTON)" @MLton $(RUN_MLTON_RUNTIME_ARGS) -- $(RUN_MLTON_COMPILE_ARGS) -target $(TARGET) $(NAME).mlb .PHONY: clean clean: - ../bin/clean - -.PHONY: test -test: $(NAME) - ./mlprof z mlmon.out + $(SRC)/bin/clean diff -Nru mlton-20130715/mlprof/mlprof.mlb mlton-20210117+dfsg/mlprof/mlprof.mlb --- mlton-20130715/mlprof/mlprof.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlprof/mlprof.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlprof/sources.mlb mlton-20210117+dfsg/mlprof/sources.mlb --- mlton-20130715/mlprof/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlprof/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ast/admits-equality.fun mlton-20210117+dfsg/mlton/ast/admits-equality.fun --- mlton-20130715/mlton/ast/admits-equality.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/admits-equality.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -(* Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor AdmitsEquality (S: ADMITS_EQUALITY_STRUCTS): ADMITS_EQUALITY = -struct - -open S - -datatype t = Always | Never | Sometimes - -val toString = - fn Always => "Always" - | Never => "Never" - | Sometimes => "Sometimes" - -val layout = Layout.str o toString - -val op <= = - fn (Never, _) => true - | (Sometimes, Never) => false - | (Sometimes, _) => true - | (Always, Always) => true - | (Always, _) => false - -val op <= = - Trace.trace2 ("AdmitsEquality.<=", layout, layout, Bool.layout) (op <=) - -val or = - fn (Always, _) => Always - | (_, Always) => Always - | (Sometimes, _) => Sometimes - | (_, Sometimes) => Sometimes - | _ => Never - -end diff -Nru mlton-20130715/mlton/ast/admits-equality.sig mlton-20210117+dfsg/mlton/ast/admits-equality.sig --- mlton-20130715/mlton/ast/admits-equality.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/admits-equality.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -(* Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature ADMITS_EQUALITY_STRUCTS = - sig - end - -signature ADMITS_EQUALITY = - sig - include ADMITS_EQUALITY_STRUCTS - - datatype t = Always | Never | Sometimes - - val <= : t * t -> bool - val layout: t -> Layout.t - val or: t * t -> t - val toString: t -> string - end diff -Nru mlton-20130715/mlton/ast/ast-atoms.fun mlton-20210117+dfsg/mlton/ast/ast-atoms.fun --- mlton-20130715/mlton/ast/ast-atoms.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-atoms.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,15 +13,21 @@ open S structure Wrap = Region.Wrap -structure AdmitsEquality = AdmitsEquality () -structure CharSize = CharSize () +structure Field = Record.Field + structure Const = AstConst () -structure IntSize = IntSize () -structure Kind = TyconKind () -structure RealSize = RealSize () -structure WordSize = WordSize () -structure Field = Record.Field +structure Tyvar = + struct + structure Id = AstId (structure Symbol = Symbol) + open Id + fun isEquality t = + let + val s = toString t + in + String.length s > 1 andalso String.sub (s, 1) = #"'" + end + end structure Tycon = struct @@ -31,7 +38,7 @@ PrimTycons (structure AdmitsEquality = AdmitsEquality structure CharSize = CharSize structure IntSize = IntSize - structure Kind = Kind + structure Kind = TyconKind structure RealSize = RealSize structure WordSize = WordSize open Id @@ -54,30 +61,25 @@ open P - val it = fromSymbol (Symbol.itt, Region.bogus) - - fun ensure oper c = - if List.exists ([cons, falsee, it, nill, reff, truee], - fn c' => equals (c, c')) - then - let - open Layout - in - Control.error (region c, - seq [str (concat ["can not ", oper, " "]), - layout c], - empty) - end - else () - - val ensureRedefine = ensure "redefine" - - val ensureSpecify = ensure "specify" + val special = + [cons, falsee, nill, reff, truee] end structure Basid = AstId (structure Symbol = Symbol) structure Sigid = AstId (structure Symbol = Symbol) structure Strid = AstId (structure Symbol = Symbol) +structure Strid = + struct + open Strid + local + fun make s = fromSymbol (Symbol.fromString s, Region.bogus) + in + val uArg = fn s => make ("_arg_" ^ s) + val uRes = fn s => make ("_res_" ^ s) + val uStr = make "_str" + val uSig = make "_sig" + end + end structure Fctid = AstId (structure Symbol = Symbol) structure Vid = @@ -93,6 +95,39 @@ val toCon = make Con.fromSymbol val toVar = make Var.fromSymbol end + + val it = fromSymbol (Symbol.itt, Region.bogus) + val equal = fromSymbol (Symbol.equal, Region.bogus) + val specialCons = List.map (Con.special, fromCon) + + fun checkSpecial (oper, ctrl) (vid, {allowIt, ctxt, keyword}) = + if not (Control.Elaborate.current ctrl) + andalso + ((not allowIt andalso equals (vid, it)) + orelse + equals (vid, equal) + orelse + List.exists (specialCons, fn vid' => equals (vid, vid'))) + then + let + open Layout + in + Control.error (region vid, + seq [str "special identifier cannot be ", + str oper, + str " by ", + str keyword, + str ": ", + layout vid], + ctxt ()) + end + else () + + val checkRedefineSpecial = + checkSpecial ("redefined", Control.Elaborate.allowRedefineSpecialIds) + + val checkSpecifySpecial = + checkSpecial ("specified", Control.Elaborate.allowSpecifySpecialIds) end structure Longtycon = @@ -143,12 +178,15 @@ open Layout +fun mkCtxt (x, lay) () = + seq [str "in: ", lay x] + fun reportDuplicates (v: 'a vector, - {equals: 'a * 'a -> bool, + {ctxt: unit -> Layout.t, + equals: 'a * 'a -> bool, layout: 'a -> Layout.t, name: string, - region: 'a -> Region.t, - term: unit -> Layout.t}) = + region: 'a -> Region.t}) = Vector.foreachi (v, fn (i, a) => let @@ -165,29 +203,37 @@ Control.error (region a, seq [str (concat ["duplicate ", name, ": "]), layout a], - seq [str "in: ", term ()]) + ctxt ()) end in loop 0 end) -fun reportDuplicateFields (v: (Field.t * 'a) vector, - {region: Region.t, - term: unit -> Layout.t}): unit = +fun reportDuplicateFields (v: (Field.t * (Region.t * 'a)) vector, + {ctxt: unit -> Layout.t}): unit = reportDuplicates (v, - {equals = fn ((f, _), (f', _)) => Field.equals (f, f'), + {ctxt = ctxt, + equals = fn ((f, _), (f', _)) => Field.equals (f, f'), layout = Field.layout o #1, name = "label", - region = fn _ => region, - term = term}) + region = #1 o #2}) + +fun reportDuplicateTyvars (v: Tyvar.t vector, + {ctxt: unit -> Layout.t}): unit = + reportDuplicates (v, + {ctxt = ctxt, + equals = Tyvar.equals, + layout = Tyvar.layout, + name = "type variable", + region = Tyvar.region}) structure Type = struct - structure Record = SortedRecord open Wrap datatype node = Con of Longtycon.t * t vector - | Record of t Record.t + | Paren of t + | Record of (Region.t * t) Record.t | Var of Tyvar.t withtype t = node Wrap.t type node' = node @@ -196,7 +242,7 @@ fun make n = makeRegion (n, Region.bogus) val var = make o Var val record = make o Record - val tuple = record o Record.tuple + val tuple = record o Record.tuple o (fn tys => Vector.map (tys, fn ty => (Region.bogus, ty))) val unit = tuple (Vector.new0 ()) fun con (c: Tycon.t, ts: t vector): t = @@ -209,7 +255,7 @@ fun layoutApp (tycon, args: 'a vector, layoutArg) = case Vector.length args of 0 => tycon - | 1 => seq [layoutArg (Vector.sub (args, 0)), str " ", tycon] + | 1 => seq [layoutArg (Vector.first args), str " ", tycon] | _ => seq [Vector.layout layoutArg args, str " ", tycon] fun layout ty = @@ -220,19 +266,20 @@ then if 2 = Vector.length tys then paren (mayAlign - [layout (Vector.sub (tys, 0)), + [layout (Vector.first tys), seq [str "-> ", layout (Vector.sub (tys, 1))]]) else Error.bug "AstAtoms.Type.layout: non-binary -> tyc" else layoutApp (Longtycon.layout c, tys, layout) + | Paren t => layout t | Record r => Record.layout {record = r, - separator = ":", extra = "", - layoutElt = layout, - layoutTuple = layoutTupleTy} + separator = ": ", extra = "", + layoutElt = layout o #2, + layoutTuple = fn rtys => layoutTupleTy (Vector.map (rtys, #2))} and layoutTupleTy tys = case Vector.length tys of 0 => str "unit" - | 1 => layout (Vector.sub (tys, 0)) + | 1 => layout (Vector.first tys) | _ => paren (mayAlign (separateLeft (Vector.toListMap (tys, layout), "* "))) @@ -244,29 +291,33 @@ fun checkSyntax (t: t): unit = case node t of Con (_, ts) => Vector.foreach (ts, checkSyntax) + | Paren t => checkSyntax t | Record r => (reportDuplicateFields (Record.toVector r, - {region = region t, - term = fn () => layout t}) - ; Record.foreach (r, checkSyntax)) + {ctxt = mkCtxt (t, layout)}) + ; Record.foreach (r, checkSyntax o #2)) | Var _ => () end fun bind (x, y) = mayAlign [seq [x, str " ="], y] +fun 'a layoutAndsSusp (prefix: string, + xs: 'a vector, + layoutX: bool * Layout.t * 'a -> Layout.t): (unit -> Layout.t) vector = + Vector.mapi + (xs, fn (i, x) => fn () => + layoutX (i = 0, if i = 0 then str (concat [prefix, " "]) else str "and ", x)) + fun 'a layoutAnds (prefix: string, xs: 'a vector, layoutX: Layout.t * 'a -> Layout.t): Layout.t = - case Vector.toList xs of - [] => empty - | x :: xs => align (layoutX (str (concat [prefix, " "]), x) - :: List.map (xs, fn x => layoutX (str "and ", x))) + align (Vector.toListMap (layoutAndsSusp (prefix, xs, fn (_, prefix, x) => layoutX (prefix, x)), fn th => th ())) datatype bindStyle = OneLine | Split of int fun 'a layoutBind (bind: string, layout: 'a -> bindStyle * Layout.t * Layout.t) - (prefix: Layout.t, x: 'a): Layout.t = + (prefix: Layout.t, x: 'a): Layout.t = let val (style, lhs, rhs) = layout x val lhs = seq [prefix, lhs, str " " , str bind] @@ -309,19 +360,37 @@ val empty = makeRegion (T (Vector.new0 ()), Region.bogus) - fun checkSyntax (b: t): unit = + fun isEmpty (b: t) = + let + val T ds = node b + in + Vector.isEmpty ds + end + + fun checkSyntax (b: t, kind: string): unit = let val T v = node b - val () = Vector.foreach (v, fn {def, ...} => Type.checkSyntax def) + val () = + Vector.foreach + (v, fn {tyvars, tycon, def} => + (reportDuplicateTyvars + (tyvars, {ctxt = fn () => + seq [str "in: ", + Type.layoutApp + (Tycon.layout tycon, + tyvars, Tyvar.layout)]}) + ; Type.checkSyntax def)) in reportDuplicates - (v, {equals = (fn ({tycon = t, ...}, {tycon = t', ...}) => + (v, {ctxt = mkCtxt (b, layout), + equals = (fn ({tycon = t, ...}, {tycon = t', ...}) => Tycon.equals (t, t')), layout = Tycon.layout o #tycon, - name = "type definition", - region = Tycon.region o #tycon, - term = fn () => layout b}) + name = "type " ^ kind, + region = Tycon.region o #tycon}) end + fun checkSyntaxDef b = checkSyntax (b, "definition") + fun checkSyntaxSpec b = checkSyntax (b, "specification") end (*---------------------------------------------------*) @@ -356,45 +425,70 @@ "| "))), case TypBind.node withtypes of TypBind.T v => - if 0 = Vector.length v + if Vector.isEmpty v then empty else seq [str "with", TypBind.layout withtypes]] end - fun checkSyntax (b: t): unit = + fun checkSyntax (b: t, kind: string, + vidCheckSpecial: Vid.t * {allowIt: bool, + ctxt: unit -> Layout.t, + keyword: string} -> unit): unit = let val T {datatypes, withtypes} = node b + val TypBind.T withtypes = TypBind.node withtypes + val ctxt = mkCtxt ((), fn () => layout ("datatype", b)) val () = Vector.foreach - (datatypes, fn {cons, ...} => - Vector.foreach (cons, fn (c, to) => - (Con.ensureRedefine c - ; Option.app (to, Type.checkSyntax)))) - fun term () = layout ("datatype", b) + (datatypes, fn {tyvars, tycon, cons} => + (reportDuplicateTyvars + (tyvars, {ctxt = fn () => + seq [str "in: ", + Type.layoutApp + (Tycon.layout tycon, + tyvars, Tyvar.layout)]}) + ; Vector.foreach + (cons, fn (c, to) => + (vidCheckSpecial + (Vid.fromCon c, + {allowIt = false, + ctxt = ctxt, + keyword = "datatype"}) + ; Option.app (to, Type.checkSyntax))))) val () = reportDuplicates (Vector.concatV (Vector.map (datatypes, #cons)), - {equals = fn ((c, _), (c', _)) => Con.equals (c, c'), + {ctxt = ctxt, + equals = fn ((c, _), (c', _)) => Con.equals (c, c'), layout = Con.layout o #1, - name = "constructor", - region = Con.region o #1, - term = term}) + name = "constructor " ^ kind, + region = Con.region o #1}) + val () = + Vector.foreach + (withtypes, fn {tyvars, tycon, def} => + (reportDuplicateTyvars + (tyvars, {ctxt = fn () => + seq [str "in: ", + Type.layoutApp + (Tycon.layout tycon, + tyvars, Tyvar.layout)]}) + ; Type.checkSyntax def)) val () = reportDuplicates (Vector.concat [Vector.map (datatypes, #tycon), - let - val TypBind.T v = TypBind.node withtypes - in - Vector.map (v, #tycon) - end], - {equals = Tycon.equals, + Vector.map (withtypes, #tycon)], + {ctxt = ctxt, + equals = Tycon.equals, layout = Tycon.layout, - name = "type definition", - region = Tycon.region, - term = term}) + name = "type " ^ kind, + region = Tycon.region}) in () end + fun checkSyntaxDef b = + checkSyntax (b, "definition", Vid.checkRedefineSpecial) + fun checkSyntaxSpec b = + checkSyntax (b, "specification", Vid.checkSpecifySpecial) end structure DatatypeRhs = @@ -413,12 +507,14 @@ DatBind d => DatBind.layout ("datatype", d) | Repl {lhs, rhs} => seq [str "datatype ", Tycon.layout lhs, - str " = datatype ", Longtycon.layout rhs] + str " = datatype ", Longtycon.layout rhs] - fun checkSyntax (rhs: t): unit = + fun checkSyntax (rhs: t, datBindCheckSyntax) = case node rhs of - DatBind b => DatBind.checkSyntax b + DatBind b => datBindCheckSyntax b | Repl _ => () + fun checkSyntaxDef rhs = checkSyntax (rhs, DatBind.checkSyntaxDef) + fun checkSyntaxSpec rhs = checkSyntax (rhs, DatBind.checkSyntaxSpec) end (*---------------------------------------------------*) @@ -454,12 +550,12 @@ fun doit (bds : {lhs: 'a, rhs: 'a} Vector.t, {equalsId, layoutId, regionId, name}) = reportDuplicates - (bds, {equals = (fn ({lhs = id, ...}, {lhs = id', ...}) => + (bds, {ctxt = mkCtxt (d, layout), + equals = (fn ({lhs = id, ...}, {lhs = id', ...}) => equalsId (id, id')), layout = layoutId o #lhs, name = concat [name, " definition"], - region = regionId o #lhs, - term = fn () => layout d}) + region = regionId o #lhs}) in case node d of Fct bds => doit (bds, {equalsId = Fctid.equals, diff -Nru mlton-20130715/mlton/ast/ast-atoms.sig mlton-20210117+dfsg/mlton/ast/ast-atoms.sig --- mlton-20130715/mlton/ast/ast-atoms.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-atoms.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,18 +1,23 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature AST_ATOMS_STRUCTS = sig + structure AdmitsEquality: ADMITS_EQUALITY + structure CharSize: CHAR_SIZE + structure IntSize: INT_SIZE + structure RealSize: REAL_SIZE structure Record: RECORD structure SortedRecord: RECORD structure Symbol: SYMBOL - structure Tyvar: TYVAR + structure TyconKind: TYCON_KIND + structure WordSize: WORD_SIZE sharing Record.Field = SortedRecord.Field sharing Symbol = Record.Field.Symbol end @@ -23,28 +28,26 @@ structure Const: AST_CONST + structure Tyvar: + sig + include AST_ID + val isEquality: t -> bool + end + structure Tycon: sig include AST_ID include PRIM_TYCONS sharing type tycon = t end - structure Var: AST_ID - structure Con: sig include AST_ID include PRIM_CONS sharing type con = t - - val ensureRedefine: t -> unit - val ensureSpecify: t -> unit end - structure Basid: AST_ID - structure Sigid: AST_ID - structure Strid: AST_ID - structure Fctid: AST_ID + structure Var: AST_ID structure Vid: sig @@ -55,37 +58,63 @@ val fromCon: Con.t -> t val toVar: t -> Var.t val toCon: t -> Con.t + + (* check special ids *) + val checkRedefineSpecial: + t * {allowIt: bool, + ctxt: unit -> Layout.t, + keyword: string} -> unit + val checkSpecifySpecial: + t * {allowIt: bool, + ctxt: unit -> Layout.t, + keyword: string} -> unit end + structure Strid: + sig + include AST_ID + val uArg: string -> t + val uRes: string -> t + val uSig: t + val uStr: t + end + structure Sigid: AST_ID + structure Fctid: AST_ID + + structure Basid: AST_ID + structure Longtycon: sig include LONGID val arrow: t end sharing Longtycon.Id = Tycon - structure Longvar: LONGID sharing Longvar.Id = Var structure Longcon: LONGID sharing Longcon.Id = Con - structure Longstrid: LONGID sharing Longstrid.Id = Strid + structure Longvar: LONGID sharing Longvar.Id = Var structure Longvid: sig include LONGID val toLongcon: t -> Longcon.t end sharing Longvid.Id = Vid + structure Longstrid: LONGID sharing Longstrid.Id = Strid sharing Strid = Longtycon.Strid = Longvar.Strid = Longcon.Strid = Longvid.Strid = Longstrid.Strid - sharing Symbol = Basid.Symbol = Con.Symbol = Fctid.Symbol = Longcon.Symbol - = Longstrid.Symbol = Longtycon.Symbol = Longvar.Symbol = Longvid.Symbol - = Sigid.Symbol = Strid.Symbol = Tycon.Symbol = Vid.Symbol = Var.Symbol + sharing Symbol = Basid.Symbol = Con.Symbol = Fctid.Symbol + = Longcon.Symbol = Longstrid.Symbol = Longtycon.Symbol + = Longvar.Symbol = Longvid.Symbol = Sigid.Symbol + = Strid.Symbol = Tycon.Symbol = Tyvar.Symbol = Vid.Symbol + = Var.Symbol structure Type: sig type t datatype node = Con of Longtycon.t * t vector - | Record of t SortedRecord.t + | Paren of t + | Record of (Region.t * t) Record.t | Var of Tyvar.t include WRAPPED sharing type node' = node @@ -97,7 +126,7 @@ val layout: t -> Layout.t val layoutApp: Layout.t * 'a vector * ('a -> Layout.t) -> Layout.t val layoutOption: t option -> Layout.t - val record: t SortedRecord.t -> t + val record: (Region.t * t) Record.t -> t val tuple: t vector -> t val unit: t val var: Tyvar.t -> t @@ -111,8 +140,10 @@ include WRAPPED sharing type node' = node sharing type obj = t - val checkSyntax: t -> unit + val checkSyntaxDef: t -> unit + val checkSyntaxSpec: t -> unit val empty: t + val isEmpty: t -> bool val layout: t -> Layout.t end structure DatBind: @@ -126,7 +157,8 @@ include WRAPPED sharing type node' = node sharing type obj = t - val checkSyntax: t -> unit + val checkSyntaxDef: t -> unit + val checkSyntaxSpec: t -> unit val layout: string * t -> Layout.t end structure DatatypeRhs: @@ -138,7 +170,8 @@ include WRAPPED sharing type node' = node sharing type obj = t - val checkSyntax: t -> unit + val checkSyntaxDef: t -> unit + val checkSyntaxSpec: t -> unit val layout: t -> Layout.t end structure ModIdBind: @@ -156,21 +189,24 @@ end val bind: Layout.t * Layout.t -> Layout.t - val layoutAnds: (string * 'a vector * (Layout.t * 'a -> Layout.t) - -> Layout.t) + val layoutAnds: string * 'a vector * (Layout.t * 'a -> Layout.t) + -> Layout.t datatype bindStyle = OneLine | Split of int val layoutAndsBind: string * string * 'a vector * ('a -> bindStyle * Layout.t * Layout.t) -> Layout.t + val layoutAndsSusp: string * 'a vector * (bool * Layout.t * 'a -> Layout.t) + -> (unit -> Layout.t) vector val reportDuplicates: - 'a vector * {equals: 'a * 'a -> bool, + 'a vector * {ctxt: unit -> Layout.t, + equals: 'a * 'a -> bool, layout: 'a -> Layout.t, name: string, - region: 'a -> Region.t, - term: unit -> Layout.t} -> unit + region: 'a -> Region.t} -> unit val reportDuplicateFields: - (Record.Field.t * 'a) vector * {region: Region.t, - term: unit -> Layout.t} -> unit + (Record.Field.t * (Region.t * 'a)) vector * {ctxt: unit -> Layout.t} -> unit + val reportDuplicateTyvars: + Tyvar.t vector * {ctxt: unit -> Layout.t} -> unit end diff -Nru mlton-20130715/mlton/ast/ast-const.fun mlton-20210117+dfsg/mlton/ast/ast-const.fun --- mlton-20130715/mlton/ast/ast-const.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-const.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ast/ast-const.sig mlton-20210117+dfsg/mlton/ast/ast-const.sig --- mlton-20130715/mlton/ast/ast-const.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-const.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ast/ast-core.fun mlton-20210117+dfsg/mlton/ast/ast-core.fun --- mlton-20130715/mlton/ast/ast-core.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-core.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2012 Matthew Fluet. +(* Copyright (C) 2009,2012,2015,2017,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -41,6 +41,9 @@ | None => empty end +fun mkCtxt (x, lay) () = + seq [str "in: ", lay x] + fun layoutConstraint (t, ty) = mayAlign [seq [t, str ":"], Type.layout ty] @@ -74,14 +77,17 @@ constraint: Type.t option, pat: t} | List of t vector + | Or of t vector + | Paren of t | Record of {flexible: bool, - items: (Record.Field.t * item) vector} + items: (Record.Field.t * Region.t * item) vector} | Tuple of t vector | Var of {fixop: Fixop.t, name: Longvid.t} + | Vector of t vector | Wild and item = Field of t - | Vid of Vid.t * Type.t option * t option + | Vid of Vid.t * Type.t option * t option withtype t = node Wrap.t type node' = node type obj = t @@ -103,8 +109,11 @@ fun tuple ps = if 1 = Vector.length ps - then Vector.sub (ps, 0) - else make (Tuple ps) + then Vector.first ps + else makeRegion (Tuple ps, + Region.append + (region (Vector.first ps), + region (Vector.last ps))) fun layout (p, isDelimited) = let @@ -117,7 +126,7 @@ | Constraint (p, t) => delimit (layoutConstraint (layoutF p, t)) | FlatApp ps => if Vector.length ps = 1 - then layout (Vector.sub (ps, 0), isDelimited) + then layout (Vector.first ps, isDelimited) else delimit (layoutFlatApp ps) | Layered {fixop, var, constraint, pat} => delimit @@ -126,6 +135,10 @@ constraint), seq [str "as ", layoutT pat]]) | List ps => list (Vector.toListMap (ps, layoutT)) + | Or ps => + delimit + (mayAlign (separateLeft (Vector.toListMap (ps, layoutT), "| "))) + | Paren p => layout (p, isDelimited) | Record {items, flexible} => seq [str "{", mayAlign (separateRight @@ -136,14 +149,15 @@ else ", ...") else empty, str "}"] - | Tuple ps => Vector.layout layoutT ps + | Tuple ps => Layout.tuple (Vector.toListMap (ps, layoutT)) | Var {name, fixop} => seq [Fixop.layout fixop, layoutLongvid name] + | Vector ps => vector (Vector.map (ps, layoutT)) | Wild => str "_" end and layoutF p = layout (p, false) and layoutT p = layout (p, true) and layoutFlatApp ps = seq (separate (Vector.toListMap (ps, layoutF), " ")) - and layoutItem (f, i) = + and layoutItem (f, _, i) = seq [Field.layout f, case i of Field p => seq [str " = ", layoutT p] @@ -169,18 +183,20 @@ | Layered {constraint, pat, ...} => (c pat; Option.app (constraint, Type.checkSyntax)) | List ps => Vector.foreach (ps, c) + | Paren p => c p + | Or ps => Vector.foreach (ps, c) | Record {items, ...} => - (Vector.foreach (items, fn (_, i) => - case i of - Item.Field p => c p - | Item.Vid (_, to, po) => - (Option.app (to, Type.checkSyntax) - ; Option.app (po, c))) - ; reportDuplicateFields (items, - {region = region p, - term = fn () => layout p})) + (reportDuplicateFields (Vector.map (items, fn (f, r, i) => (f, (r, i))), + {ctxt = mkCtxt (p, layout)}) + ; Vector.foreach (items, fn (_, _, i) => + case i of + Item.Field p => c p + | Item.Vid (_, to, po) => + (Option.app (to, Type.checkSyntax) + ; Option.app (po, c)))) | Tuple ps => Vector.foreach (ps, c) | Var _ => () + | Vector ps => Vector.foreach (ps, c) | Wild => () end end @@ -220,13 +236,18 @@ struct structure ImportExportAttribute = struct - datatype t = Cdecl | External | Private | Public | Stdcall + datatype t = Cdecl | External | Impure | Inline | Private | Public | Pure | Reentrant | Runtime | Stdcall val toString: t -> string = fn Cdecl => "cdecl" | External => "external" + | Impure => "impure" + | Inline => "inline" | Private => "private" | Public => "public" + | Pure => "pure" + | Reentrant => "reentrant" + | Runtime => "runtime" | Stdcall => "stdcall" val layout = Layout.str o toString @@ -302,35 +323,39 @@ end datatype expNode = - Var of {name: Longvid.t, fixop: Fixop.t} - | Fn of match - | FlatApp of exp vector + Andalso of exp * exp | App of exp * exp | Case of exp * match - | Let of dec * exp - | Seq of exp vector | Const of Const.t - | Record of expNode Wrap.t Record.t (* the Kit barfs on exp Record.t *) - | List of exp vector - | Selector of Field.t | Constraint of exp * Type.t + | FlatApp of exp vector + | Fn of match | Handle of exp * match - | Raise of exp | If of exp * exp * exp - | Andalso of exp * exp + | Let of dec * exp + | List of exp vector | Orelse of exp * exp - | While of {test: exp, expr: exp} + | Paren of exp | Prim of PrimKind.t + | Raise of exp + | Record of (Region.t * exp) Record.t + | Selector of Field.t + | Seq of exp vector + | Var of {name: Longvid.t, fixop: Fixop.t} + | Vector of exp vector + | While of {test: exp, expr: exp} and decNode = - Abstype of {body: dec, - datBind: DatBind.t} + Abstype of {body: dec, + datBind: DatBind.t} | Datatype of DatatypeRhs.t + | DoDec of exp | Exception of Eb.t vector | Fix of {fixity: Fixity.t, ops: Vid.t vector} - | Fun of Tyvar.t vector * {body: exp, - pats: Pat.t vector, - resultType: Type.t option} vector vector + | Fun of {tyvars: Tyvar.t vector, + fbs: {body: exp, + pats: Pat.t vector, + resultType: Type.t option} vector vector} | Local of dec * dec | Open of Longstrid.t vector | Overload of Priority.t * Var.t * @@ -360,16 +385,17 @@ type obj = t end -fun layoutAndsTyvars (prefix, (tyvars, xs), layoutX) = - layoutAnds (prefix, - Vector.fromList - (case Vector.toListMap (xs, layoutX) of - [] => [] - | x :: xs => - (if Vector.isEmpty tyvars - then x - else seq [Tyvar.layouts tyvars, str " ", x]) :: xs), - fn (prefix, x) => seq [prefix, x]) +fun layoutTyvarsAndsSusp (prefix, (tyvars, xs), layoutX) = + layoutAndsSusp + (prefix, xs, fn (first, prefix, x) => + if first andalso not (Vector.isEmpty tyvars) + then seq [prefix, + case Vector.length tyvars of + 1 => Tyvar.layout (Vector.sub (tyvars, 0)) + | _ => Layout.tuple (Vector.toListMap (tyvars, Tyvar.layout)), + str " ", + layoutX x] + else seq [prefix, layoutX x]) fun expNodeName e = case node e of @@ -385,12 +411,14 @@ | Let _ => "Let" | List _ => "List" | Orelse _ => "Orelse" + | Paren _ => "Paren" | Prim _ => "Prim" | Raise _ => "Raise" | Record _ => "Record" | Selector _ => "Selector" | Seq _ => "Seq" | Var _ => "Var" + | Vector _ => "Vector" | While _ => "While" val traceLayoutExp = @@ -419,7 +447,7 @@ delimit (layoutConstraint (layoutExpF expr, constraint)) | FlatApp es => if Vector.length es = 1 - then layoutExp (Vector.sub (es, 0), isDelimited) + then layoutExp (Vector.first es, isDelimited) else delimit (seq (separate (Vector.toListMap (es, layoutExpF), " "))) | Fn m => delimit (seq [str "fn ", layoutMatch m]) | Handle (try, match) => @@ -434,24 +462,26 @@ | Orelse (e, e') => delimit (mayAlign [layoutExpF e, seq [str "orelse ", layoutExpF e']]) + | Paren e => layoutExp (e, isDelimited) | Prim kind => str (PrimKind.name kind) | Raise exn => delimit (seq [str "raise ", layoutExpF exn]) | Record r => let fun layoutTuple es = if 1 = Vector.length es - then layoutExp (Vector.sub (es, 0), isDelimited) + then layoutExp (Vector.first es, isDelimited) else tuple (layoutExpsT es) in Record.layout {record = r, separator = " = ", extra = "", - layoutTuple = layoutTuple, - layoutElt = layoutExpT} + layoutTuple = fn res => layoutTuple (Vector.map (res, #2)), + layoutElt = layoutExpT o #2} end | Selector f => seq [str "#", Field.layout f] | Seq es => paren (align (separateRight (layoutExpsT es, " ;"))) | Var {name, fixop} => seq [Fixop.layout fixop, layoutLongvid name] + | Vector es => vector (Vector.map (es, layoutExpT)) | While {test, expr} => delimit (align [seq [str "while ", layoutExpT test], seq [str "do ", layoutExpT expr]]) @@ -468,7 +498,7 @@ end and layoutRule (pat, exp) = - mayAlign [seq [Pat.layoutF pat, str " =>"], + mayAlign [seq [Pat.layoutT pat, str " =>"], layoutExpF exp] and layoutDec d = @@ -478,13 +508,19 @@ seq [str "with ", layoutDec body], str "end"] | Datatype rhs => DatatypeRhs.layout rhs + | DoDec exp => seq [str "do ", layoutExpT exp] | Exception ebs => layoutAnds ("exception", ebs, fn (prefix, eb) => seq [prefix, Eb.layout eb]) | Fix {fixity, ops} => seq [Fixity.layout fixity, str " ", seq (separate (Vector.toListMap (ops, Vid.layout), " "))] - | Fun fbs => layoutAndsTyvars ("fun", fbs, layoutFb) + | Fun {tyvars, fbs} => + let + val fbs = layoutFun {tyvars = tyvars, fbs = fbs} + in + align (Vector.toListMap (fbs, fn th => th ())) + end | Local (d, d') => Pretty.locall (layoutDec d, layoutDec d') | Open ss => seq [str "open ", seq (separate (Vector.toListMap (ss, Longstrid.layout), @@ -497,14 +533,16 @@ | SeqDec ds => align (Vector.toListMap (ds, layoutDec)) | Type typBind => TypBind.layout typBind | Val {tyvars, vbs, rvbs} => - align [layoutAndsTyvars ("val", (tyvars, vbs), layoutVb), - layoutAndsTyvars ("val rec", (tyvars, rvbs), layoutRvb)] - -and layoutVb {pat, exp} = - bind (Pat.layoutT pat, layoutExpT exp) + let + val {vbs, rvbs} = + layoutVal {tyvars = tyvars, vbs = vbs, rvbs = rvbs} + in + align [align (Vector.toListMap (vbs, fn th => th ())), + align (Vector.toListMap (rvbs, fn th => th ()))] + end -and layoutRvb {pat, match, ...} = - bind (Pat.layout pat, seq [str "fn ", layoutMatch match]) +and layoutFun {tyvars, fbs} = + layoutTyvarsAndsSusp ("fun", (tyvars, fbs), layoutFb) and layoutFb clauses = alignPrefix (Vector.toListMap (clauses, layoutClause), "| ") @@ -516,6 +554,22 @@ layoutExpF body] (* this has to be layoutExpF in case body is a case expression *) +and layoutVal {tyvars, vbs, rvbs} = + if Vector.isEmpty rvbs + then {vbs = layoutTyvarsAndsSusp ("val", (tyvars, vbs), layoutVb), + rvbs = Vector.new0 ()} + else if Vector.isEmpty vbs + then {vbs = Vector.new0 (), + rvbs = layoutTyvarsAndsSusp ("val rec", (tyvars, rvbs), layoutRvb)} + else {vbs = layoutTyvarsAndsSusp ("val", (tyvars, vbs), layoutVb), + rvbs = layoutTyvarsAndsSusp ("and rec", (Vector.new0 (), rvbs), layoutRvb)} + +and layoutVb {pat, exp} = + bind (Pat.layoutT pat, layoutExpT exp) + +and layoutRvb {pat, match, ...} = + bind (Pat.layout pat, seq [str "fn ", layoutMatch match]) + fun checkSyntaxExp (e: exp): unit = let val c = checkSyntaxExp @@ -533,16 +587,17 @@ | Let (d, e) => (checkSyntaxDec d; c e) | List es => Vector.foreach (es, c) | Orelse (e1, e2) => (c e1; c e2) + | Paren e => c e | Prim _ => () | Raise e => c e | Record r => - (Record.foreach (r, c) - ; reportDuplicateFields (Record.toVector r, - {region = region e, - term = fn () => layoutExp (e, true)})) + (reportDuplicateFields (Record.toVector r, + {ctxt = mkCtxt (e, layoutExpT)}) + ; Record.foreach (r, c o #2)) | Selector _ => () | Seq es => Vector.foreach (es, c) | Var _ => () + | Vector es => Vector.foreach (es, c) | While {expr, test} => (c expr; c test) end @@ -556,34 +611,46 @@ and checkSyntaxDec (d: dec): unit = case node d of Abstype {datBind, body} => - (DatBind.checkSyntax datBind + (DatBind.checkSyntaxDef datBind ; checkSyntaxDec body) - | Datatype rhs => DatatypeRhs.checkSyntax rhs + | Datatype rhs => DatatypeRhs.checkSyntaxDef rhs + | DoDec exp => checkSyntaxExp exp | Exception v => - (Vector.foreach (v, fn (_, ebrhs) => EbRhs.checkSyntax ebrhs) + (Vector.foreach + (v, fn (con, ebrhs) => + (Vid.checkRedefineSpecial + (Vid.fromCon con, + {allowIt = false, + ctxt = mkCtxt (d, layoutDec), + keyword = "exception"}) + ; EbRhs.checkSyntax ebrhs)) ; (reportDuplicates - (v, {equals = fn ((c, _), (c', _)) => Con.equals (c, c'), + (v, {ctxt = mkCtxt (d, layoutDec), + equals = fn ((c, _), (c', _)) => Con.equals (c, c'), layout = Con.layout o #1, - name = "exception declaration", - region = Con.region o #1, - term = fn () => layoutDec d}))) + name = "exception definition", + region = Con.region o #1}))) | Fix _ => () (* The Definition allows, e.g., "infix + +". *) - | Fun (_, fs) => - Vector.foreach (fs, fn clauses => - Vector.foreach - (clauses, fn {body, pats, resultType} => - (checkSyntaxExp body - ; Vector.foreach (pats, Pat.checkSyntax) - ; Option.app (resultType, Type.checkSyntax)))) + | Fun {tyvars, fbs, ...} => + (reportDuplicateTyvars (tyvars, + {ctxt = mkCtxt (d, layoutDec)}) + ; Vector.foreach (fbs, fn clauses => + Vector.foreach + (clauses, fn {body, pats, resultType} => + (checkSyntaxExp body + ; Vector.foreach (pats, Pat.checkSyntax) + ; Option.app (resultType, Type.checkSyntax))))) | Local (d, d') => (checkSyntaxDec d; checkSyntaxDec d') | Open _ => () | Overload (_, _, _, ty, _) => Type.checkSyntax ty | SeqDec v => Vector.foreach (v, checkSyntaxDec) - | Type b => TypBind.checkSyntax b - | Val {rvbs, vbs, ...} => - (Vector.foreach (rvbs, fn {match, pat} => - (checkSyntaxMatch match - ; Pat.checkSyntax pat)) + | Type b => TypBind.checkSyntaxDef b + | Val {tyvars, rvbs, vbs, ...} => + (reportDuplicateTyvars (tyvars, + {ctxt = mkCtxt (d, layoutDec)}) + ; Vector.foreach (rvbs, fn {match, pat} => + (checkSyntaxMatch match + ; Pat.checkSyntax pat)) ; Vector.foreach (vbs, fn {exp, pat} => (checkSyntaxExp exp ; Pat.checkSyntax pat))) @@ -605,9 +672,9 @@ fun fnn rs = let val r = - if 0 = Vector.length rs + if Vector.isEmpty rs then Region.bogus - else Region.append (Pat.region (#1 (Vector.sub (rs, 0))), + else Region.append (Pat.region (#1 (Vector.first rs)), region (#2 (Vector.last rs))) in makeRegion (Fn (Match.makeRegion (Match.T rs, r)), r) @@ -628,16 +695,18 @@ fun tuple (es: t vector): t = if 1 = Vector.length es - then Vector.sub (es, 0) + then Vector.first es else let val r = - if 0 = Vector.length es + if Vector.isEmpty es then Region.bogus - else Region.append (region (Vector.sub (es, 0)), + else Region.append (region (Vector.first es), region (Vector.last es)) + val res = + Vector.map (es, fn e => (Region.bogus, e)) in - makeRegion (Record (Record.tuple es), r) + makeRegion (Record (Record.tuple res), r) end val unit: t = tuple (Vector.new0 ()) @@ -645,6 +714,13 @@ val layout = layoutExpT end +structure Match = + struct + open Match + val layout = layoutMatch + val layoutRule = layoutRule + end + structure Dec = struct open Wrap @@ -672,6 +748,8 @@ end val layout = layoutDec + val layoutFun = layoutFun + val layoutVal = layoutVal end end diff -Nru mlton-20130715/mlton/ast/ast-core.sig mlton-20210117+dfsg/mlton/ast/ast-core.sig --- mlton-20130715/mlton/ast/ast-core.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-core.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2012 Matthew Fluet. +(* Copyright (C) 2009,2012,2015,2017,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -54,11 +54,14 @@ pat: t, var: Var.t} | List of t vector + | Paren of t + | Or of t vector | Record of {flexible: bool, - items: (Record.Field.t * Item.t) vector} + items: (Record.Field.t * Region.t * Item.t) vector} | Tuple of t vector | Var of {fixop: Fixop.t, name: Longvid.t} + | Vector of t vector | Wild include WRAPPED sharing type node' = node @@ -81,7 +84,7 @@ sig structure ImportExportAttribute: sig - datatype t = Cdecl | External | Private | Public | Stdcall + datatype t = Cdecl | External | Impure | Inline | Private | Public | Pure | Reentrant | Runtime | Stdcall val layout: t -> Layout.t end @@ -146,13 +149,15 @@ | Let of dec * t | List of t vector | Orelse of t * t + | Paren of t | Prim of PrimKind.t | Raise of t - | Record of t Record.t + | Record of (Region.t * t) Record.t | Selector of Record.Field.t | Seq of t vector | Var of {fixop: Fixop.t, name: Longvid.t} + | Vector of t vector | While of {expr: t, test: t} @@ -177,7 +182,9 @@ datatype node = T of (Pat.t * Exp.t) vector include WRAPPED sharing type node' = node sharing type obj = t - end + val layout : t -> Layout.t + val layoutRule : Pat.t * Exp.t -> Layout.t + end sharing type Exp.match = Match.t structure EbRhs: @@ -197,12 +204,14 @@ Abstype of {datBind: DatBind.t, body: t} | Datatype of DatatypeRhs.t + | DoDec of Exp.t | Exception of (Con.t * EbRhs.t) vector | Fix of {fixity: Fixity.t, ops: Vid.t vector} - | Fun of Tyvar.t vector * {body: Exp.t, - pats: Pat.t vector, - resultType: Type.t option} vector vector + | Fun of {tyvars: Tyvar.t vector, + fbs: {body: Exp.t, + pats: Pat.t vector, + resultType: Type.t option} vector vector} | Local of t * t | Open of Longstrid.t vector | Overload of Priority.t * @@ -222,6 +231,20 @@ val checkSyntax: t -> unit val fromExp: Exp.t -> t val layout: t -> Layout.t + val layoutFun: + {tyvars: Tyvar.t vector, + fbs: {body: Exp.t, + pats: Pat.t vector, + resultType: Type.t option} vector vector} + -> (unit -> Layout.t) vector + val layoutVal: + {rvbs: {match: Match.t, + pat: Pat.t} vector, + tyvars: Tyvar.t vector, + vbs: {exp: Exp.t, + pat: Pat.t} vector} + -> {rvbs: (unit -> Layout.t) vector, + vbs: (unit -> Layout.t) vector} val openn: Longstrid.t vector -> t val vall: Tyvar.t vector * Var.t * Exp.t -> t end diff -Nru mlton-20130715/mlton/ast/ast.fun mlton-20210117+dfsg/mlton/ast/ast.fun --- mlton-20130715/mlton/ast/ast.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ast/ast-id.fun mlton-20210117+dfsg/mlton/ast/ast-id.fun --- mlton-20130715/mlton/ast/ast-id.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-id.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ast/ast-id.sig mlton-20210117+dfsg/mlton/ast/ast-id.sig --- mlton-20130715/mlton/ast/ast-id.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-id.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ast/ast-mlbs.fun mlton-20210117+dfsg/mlton/ast/ast-mlbs.fun --- mlton-20130715/mlton/ast/ast-mlbs.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-mlbs.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017-2018 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,6 +16,9 @@ open AstPrograms Layout +fun mkCtxt (x, lay) () = + seq [str "in: ", lay x] + val layouts = List.map structure Wrap = Region.Wrap val node = Wrap.node @@ -80,12 +84,12 @@ Ann (_, _, dec) => checkSyntaxBasdec dec | Basis basbnds => reportDuplicates - (basbnds, {equals = (fn ({name = id, ...}, {name = id', ...}) => + (basbnds, {ctxt = mkCtxt (d, layoutBasdec), + equals = (fn ({name = id, ...}, {name = id', ...}) => Basid.equals (id, id')), layout = Basid.layout o #name, name = "basis definition", - region = Basid.region o #name, - term = fn () => layoutBasdec d}) + region = Basid.region o #name}) | Defs def => ModIdBind.checkSyntax def | Local (dec1, dec2) => (checkSyntaxBasdec dec1 @@ -119,7 +123,7 @@ | Defs _ => () | Local (dec1, dec2) => (sourceFilesBasdec dec1 ; sourceFilesBasdec dec2) - | MLB ({fileAbs, ...}, dec) => + | MLB ({fileAbs, fileUse, ...}, dec) => let val b = psi fileAbs in @@ -128,7 +132,7 @@ else let val () = b := true in - Buffer.add (sourceFiles, fileAbs) + Buffer.add (sourceFiles, fileUse) ; sourceFilesBasdec (Promise.force dec) end end diff -Nru mlton-20130715/mlton/ast/ast-mlbs.sig mlton-20210117+dfsg/mlton/ast/ast-mlbs.sig --- mlton-20130715/mlton/ast/ast-mlbs.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-mlbs.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ast/ast-modules.fun mlton-20210117+dfsg/mlton/ast/ast-modules.fun --- mlton-20130715/mlton/ast/ast-modules.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-modules.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,11 +16,46 @@ open AstCore Layout +fun mkCtxt (x, lay) () = + seq [str "in: ", lay x] + val layouts = List.map structure Wrap = Region.Wrap val node = Wrap.node -structure Equation = +structure WhereEquation = + struct + open Wrap + datatype node = + Type of {tyvars: Tyvar.t vector, + longtycon: Longtycon.t, + ty: Type.t} + type t = node Wrap.t + type node' = node + type obj = t + + fun layout eq = + case node eq of + Type {tyvars, longtycon, ty} => + seq [str "where type ", + Type.layoutApp (Longtycon.layout longtycon, tyvars, Tyvar.layout), + str " = ", + Type.layout ty] + + fun checkSyntax eq = + case node eq of + Type {tyvars, longtycon, ty} => + (reportDuplicateTyvars + (tyvars, {ctxt = fn () => + seq [str "in: ", + Type.layoutApp + (Longtycon.layout longtycon, + tyvars, Tyvar.layout)]}) + ; Type.checkSyntax ty) + + end + +structure SharingEquation = struct open Wrap datatype node = @@ -43,24 +79,23 @@ tycon: Tycon.t} vector datatype sigexpNode = - Var of Sigid.t - | Where of sigexp * {tyvars: Tyvar.t vector, - longtycon: Longtycon.t, - ty: Type.t} vector - | Spec of spec + Var of Sigid.t + | Where of {equations: WhereEquation.t vector, + sigexp: sigexp} + | Spec of spec and sigConst = - None + None | Transparent of sigexp | Opaque of sigexp and specNode = - Datatype of DatatypeRhs.t + Datatype of DatatypeRhs.t | Empty | Eqtype of typedescs | Exception of (Con.t * Type.t option) vector | IncludeSigexp of sigexp | IncludeSigids of Sigid.t vector | Seq of spec * spec - | Sharing of {equations: Equation.t vector, + | Sharing of {equation: SharingEquation.t, spec: spec} | Structure of (Strid.t * sigexp) vector | Type of typedescs @@ -87,22 +122,15 @@ fun layoutSigexp (e: sigexp): Layout.t = case node e of Var s => Sigid.layout s - | Where (e, ws) => + | Where {sigexp, equations} => let - val e = layoutSigexp e + val sigexp = layoutSigexp sigexp in - if 0 = Vector.length ws - then e - else - seq [e, - layoutAndsBind - (" where", "=", ws, fn {tyvars, longtycon, ty} => - (OneLine, - seq [str "type ", - Type.layoutApp - (Longtycon.layout longtycon, tyvars, - Tyvar.layout)], - Type.layout ty))] + if Vector.isEmpty equations + then sigexp + else mayAlign + [sigexp, + align (Vector.toListMap (equations, WhereEquation.layout))] end | Spec s => align [str "sig", indent (layoutSpec s, 3), @@ -129,9 +157,9 @@ seq (str "include " :: separate (Vector.toListMap (sigids, Sigid.layout), " ")) | Seq (s, s') => align [layoutSpec s, layoutSpec s'] - | Sharing {spec, equations} => + | Sharing {spec, equation} => align [layoutSpec spec, - align (Vector.toListMap (equations, Equation.layout))] + SharingEquation.layout equation] | Structure l => layoutAndsBind ("structure", ":", l, fn (strid, sigexp) => (case node sigexp of @@ -149,9 +177,10 @@ case node e of Spec s => checkSyntaxSpec s | Var _ => () - | Where (e, v) => - (checkSyntaxSigexp e - ; Vector.foreach (v, fn {ty, ...} => Type.checkSyntax ty)) + | Where {sigexp, equations} => + (checkSyntaxSigexp sigexp + ; Vector.foreach + (equations, WhereEquation.checkSyntax)) and checkSyntaxSigConst (s: sigConst): unit = case s of @@ -159,30 +188,46 @@ | Opaque e => checkSyntaxSigexp e | Transparent e => checkSyntaxSigexp e +and checkSyntaxTypedescs (typedescs, {ctxt}) = + (Vector.foreach + (typedescs, fn {tyvars, tycon, ...} => + reportDuplicateTyvars + (tyvars, {ctxt = fn () => + seq [str "in: ", + Type.layoutApp + (Tycon.layout tycon, + tyvars, Tyvar.layout)]})) + ; reportDuplicates + (typedescs, {ctxt = ctxt, + equals = (fn ({tycon = c, ...}, {tycon = c', ...}) => + Tycon.equals (c, c')), + layout = Tycon.layout o #tycon, + name = "type specification", + region = Tycon.region o #tycon})) + and checkSyntaxSpec (s: spec): unit = let - fun term () = layoutSpec s + val ctxt = mkCtxt (s, layoutSpec) in case node s of - Datatype d => DatatypeRhs.checkSyntax d - | Eqtype v => - reportDuplicates - (v, {equals = (fn ({tycon = c, ...}, {tycon = c', ...}) => - Tycon.equals (c, c')), - layout = Tycon.layout o #tycon, - name = "type", - region = Tycon.region o #tycon, - term = term}) + Datatype d => DatatypeRhs.checkSyntaxSpec d + | Eqtype typedescs => checkSyntaxTypedescs (typedescs, {ctxt = ctxt}) | Empty => () | Exception v => - (Vector.foreach (v, fn (_, to) => - Option.app (to, Type.checkSyntax)) + (Vector.foreach + (v, fn (con, to) => + (Vid.checkSpecifySpecial + (Vid.fromCon con, + {allowIt = false, + ctxt = ctxt, + keyword = "exception"}) + ; Option.app (to, Type.checkSyntax))) ; (reportDuplicates - (v, {equals = fn ((c, _), (c', _)) => Con.equals (c, c'), + (v, {ctxt = ctxt, + equals = fn ((c, _), (c', _)) => Con.equals (c, c'), layout = Con.layout o #1, - name = "exception", - region = Con.region o #1, - term = term}))) + name = "exception specification", + region = Con.region o #1}))) | IncludeSigexp e => checkSyntaxSigexp e | IncludeSigids _ => () | Seq (s, s') => (checkSyntaxSpec s; checkSyntaxSpec s') @@ -190,28 +235,28 @@ | Structure v => (Vector.foreach (v, checkSyntaxSigexp o #2) ; (reportDuplicates - (v, {equals = fn ((s, _), (s', _)) => Strid.equals (s, s'), + (v, {ctxt = ctxt, + equals = fn ((s, _), (s', _)) => Strid.equals (s, s'), layout = Strid.layout o #1, name = "structure specification", - region = Strid.region o #1, - term = term}))) - | Type v => - reportDuplicates - (v, {equals = (fn ({tycon = c, ...}, {tycon = c', ...}) => - Tycon.equals (c, c')), - layout = Tycon.layout o #tycon, - name = "type specification", - region = Tycon.region o #tycon, - term = term}) - | TypeDefs b => TypBind.checkSyntax b + region = Strid.region o #1}))) + | Type typedescs => checkSyntaxTypedescs (typedescs, {ctxt = ctxt}) + | TypeDefs b => TypBind.checkSyntaxSpec b | Val v => - (Vector.foreach (v, fn (_, t) => Type.checkSyntax t) + (Vector.foreach + (v, fn (v, t) => + (Vid.checkSpecifySpecial + (Vid.fromVar v, + {allowIt = true, + ctxt = ctxt, + keyword = "val"}) + ; Type.checkSyntax t)) ; (reportDuplicates - (v, {equals = fn ((x, _), (x', _)) => Var.equals (x, x'), + (v, {ctxt = ctxt, + equals = fn ((x, _), (x', _)) => Var.equals (x, x'), layout = Var.layout o #1, name = "value specification", - region = Var.region o #1, - term = term}))) + region = Var.region o #1}))) end structure Sigexp = @@ -225,10 +270,15 @@ val checkSyntax = checkSyntaxSigexp - fun wheree (sigexp: t, wherespecs, region): t = - if 0 = Vector.length wherespecs + fun wheree (sigexp: t, equations): t = + if Vector.isEmpty equations then sigexp - else makeRegion (Where (sigexp, wherespecs), region) + else makeRegion (Where {sigexp = sigexp, + equations = equations}, + Region.append + (region sigexp, + WhereEquation.region + (Vector.last equations))) fun make n = makeRegion (n, Region.bogus) @@ -263,18 +313,19 @@ datatype strdecNode = Core of Dec.t - | Local of strdec * strdec - | Seq of strdec list - | Structure of {constraint: SigConst.t, - def: strexp, - name: Strid.t} vector + | Local of strdec * strdec + | Seq of strdec list + | ShowBasis of File.t + | Structure of {constraint: SigConst.t, + def: strexp, + name: Strid.t} vector and strexpNode = App of Fctid.t * strexp - | Constrained of strexp * SigConst.t - | Let of strdec * strexp - | Struct of strdec - | Var of Longstrid.t + | Constrained of strexp * SigConst.t + | Let of strdec * strexp + | Struct of strdec + | Var of Longstrid.t withtype strexp = strexpNode Wrap.t and strdec = strdecNode Wrap.t @@ -283,14 +334,17 @@ Core d => Dec.layout d | Local (d, d') => Pretty.locall (layoutStrdec d, layoutStrdec d') | Seq ds => align (layoutStrdecs ds) + | ShowBasis file => seq [str "(*#showBasis \"", + File.layout file, + str "\"*)"] | Structure strbs => layoutAndsBind ("structure", "=", strbs, fn {name, def, constraint} => (case node def of Var _ => OneLine | _ => Split 3, - seq [Strid.layout name, SigConst.layout constraint], - layoutStrexp def)) + seq [Strid.layout name, SigConst.layout constraint], + layoutStrexp def)) and layoutStrdecs ds = layouts (ds, layoutStrdec) @@ -309,17 +363,18 @@ Core d => Dec.checkSyntax d | Local (d, d') => (checkSyntaxStrdec d; checkSyntaxStrdec d') | Seq ds => List.foreach (ds, checkSyntaxStrdec) + | ShowBasis _ => () | Structure v => (Vector.foreach (v, fn {constraint, def, ...} => (SigConst.checkSyntax constraint ; checkSyntaxStrexp def)) ; (reportDuplicates - (v, {equals = (fn ({name = n, ...}, {name = n', ...}) => + (v, {ctxt = mkCtxt (d, layoutStrdec), + equals = (fn ({name = n, ...}, {name = n', ...}) => Strid.equals (n, n')), layout = Strid.layout o #name, name = "structure definition", - region = Strid.region o #name, - term = fn () => layoutStrdec d}))) + region = Strid.region o #name}))) and checkSyntaxStrexp (e: strexp): unit = case node e of App (_, e) => checkSyntaxStrexp e @@ -343,6 +398,7 @@ fun make n = makeRegion (n, Region.bogus) val constrained = make o Constrained val lett = make o Let + val var = make o Var val layout = layoutStrexp end @@ -361,6 +417,8 @@ val openn = core o Dec.openn + val structuree = make o Structure o Vector.new1 + val layout = layoutStrdec val fromExp = core o Dec.fromExp @@ -421,6 +479,7 @@ | [d] => d | ds => makeRegion (Seq (rev ds), r) end + | ShowBasis _ => d | Structure _ => d) d end @@ -465,7 +524,7 @@ Functor fctbs => layoutAndsBind ("functor", "=", fctbs, fn {name, arg, result, body} => - (Split 0, + (Split 3, seq [Fctid.layout name, str " ", paren (FctArg.layout arg), layoutSigConst result], @@ -493,21 +552,21 @@ ; Strexp.checkSyntax body ; SigConst.checkSyntax result)) ; (reportDuplicates - (v, {equals = (fn ({name = n, ...}, {name = n', ...}) => + (v, {ctxt = mkCtxt (d, layout), + equals = (fn ({name = n, ...}, {name = n', ...}) => Fctid.equals (n, n')), layout = Fctid.layout o #name, name = "functor definition", - region = Fctid.region o #name, - term = fn () => layout d}))) + region = Fctid.region o #name}))) | Signature bs => (Vector.foreach (bs, Sigexp.checkSyntax o #2) ; (reportDuplicates (bs, - {equals = fn ((s, _), (s', _)) => Sigid.equals (s, s'), + {ctxt = mkCtxt (d, layout), + equals = fn ((s, _), (s', _)) => Sigid.equals (s, s'), layout = Sigid.layout o #1, name = "signature definition", - region = Sigid.region o #1, - term = fn () => layout d}))) + region = Sigid.region o #1}))) | Strdec d => Strdec.checkSyntax d end diff -Nru mlton-20130715/mlton/ast/ast-modules.sig mlton-20210117+dfsg/mlton/ast/ast-modules.sig --- mlton-20130715/mlton/ast/ast-modules.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-modules.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,6 +16,17 @@ sig include AST_CORE + structure WhereEquation: + sig + type t + datatype node = + Type of {longtycon: Longtycon.t, + tyvars: Tyvar.t vector, + ty: Type.t} + include WRAPPED sharing type node' = node + sharing type obj = t + end + structure Sigexp: sig type spec @@ -23,16 +35,13 @@ datatype node = Spec of spec | Var of Sigid.t - | Where of t * {longtycon: Longtycon.t, - ty: Type.t, - tyvars: Tyvar.t vector} vector + | Where of {equations: WhereEquation.t vector, + sigexp: t} include WRAPPED sharing type node' = node sharing type obj = t - val wheree: t * {tyvars: Tyvar.t vector, - longtycon: Longtycon.t, - ty: Type.t} vector * Region.t -> t + val wheree: t * WhereEquation.t vector -> t val spec: spec -> t val layout: t -> Layout.t @@ -46,7 +55,7 @@ | Transparent of Sigexp.t end - structure Equation: + structure SharingEquation: sig type t datatype node = @@ -68,7 +77,7 @@ | IncludeSigexp of Sigexp.t | IncludeSigids of Sigid.t vector | Seq of t * t - | Sharing of {equations: Equation.t vector, + | Sharing of {equation: SharingEquation.t, spec: t} | Structure of (Strid.t * Sigexp.t) vector | Type of {tycon: Tycon.t, @@ -100,6 +109,7 @@ val constrained: t * SigConst.t -> t val lett: strdec * t -> t + val var: Longstrid.t -> t val layout: t -> Layout.t end @@ -111,6 +121,7 @@ Core of Dec.t | Local of t * t | Seq of t list + | ShowBasis of File.t | Structure of {constraint: SigConst.t, def: Strexp.t, name: Strid.t} vector @@ -122,6 +133,9 @@ val core: Dec.t -> t val layout: t -> Layout.t val openn: Longstrid.t vector -> t + val structuree: {constraint: SigConst.t, + def: Strexp.t, + name: Strid.t} -> t end sharing type Strdec.t = Strexp.strdec diff -Nru mlton-20130715/mlton/ast/ast-programs.fun mlton-20210117+dfsg/mlton/ast/ast-programs.fun --- mlton-20130715/mlton/ast/ast-programs.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-programs.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -69,8 +70,8 @@ case Dec.node d of Abstype {body, ...} => dec body | Exception cs => Vector.foreach (cs, fn _ => inc ()) - | Fun (_, ds) => - Vector.foreach (ds, fn clauses => + | Fun {fbs, ...} => + Vector.foreach (fbs, fn clauses => Vector.foreach (clauses, exp o #body)) | Local (d, d') => (dec d; dec d') | SeqDec ds => Vector.foreach (ds, dec) @@ -97,7 +98,7 @@ | List es => Vector.foreach (es, exp) | Orelse (e1, e2) => (exp e1; exp e2) | Raise exn => exp exn - | Record r => Record.foreach (r, exp) + | Record r => Record.foreach (r, exp o #2) | Seq es => exps es | While {test, expr} => (exp test; exp expr) | _ => () @@ -117,6 +118,7 @@ Core d => dec d | Local (d, d') => (strdec d; strdec d') | Seq ds => List.foreach (ds, strdec) + | ShowBasis _ => () | Structure ds => Vector.foreach (ds, fn {def, ...} => strexp def) end diff -Nru mlton-20130715/mlton/ast/ast-programs.sig mlton-20210117+dfsg/mlton/ast/ast-programs.sig --- mlton-20130715/mlton/ast/ast-programs.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast-programs.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ast/ast.sig mlton-20210117+dfsg/mlton/ast/ast.sig --- mlton-20130715/mlton/ast/ast.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/ast.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ast/char-size.fun mlton-20210117+dfsg/mlton/ast/char-size.fun --- mlton-20130715/mlton/ast/char-size.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/char-size.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -(* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor CharSize (S: CHAR_SIZE_STRUCTS): CHAR_SIZE = -struct - -open S - -datatype t = C8 | C16 | C32 - -val all = [C8, C16, C32] - -fun bits s = - Bits.fromInt - (case s of - C8 => 8 - | C16 => 16 - | C32 => 32) - -val equals = op = - -fun fromBits b = - case Bits.toInt b of - 8 => C8 - | 16 => C16 - | 32 => C32 - | _ => Error.bug "CharSize.frombits" - -val memoize = - fn f => - let - val c8 = f C8 - val c16 = f C16 - val c32 = f C32 - in - fn C8 => c8 - | C16 => c16 - | C32 => c32 - end - -val cardinality = memoize (fn s => IntInf.pow (2, Bits.toInt (bits s))) - -fun isInRange (s, i) = 0 <= i andalso i < cardinality s - -end diff -Nru mlton-20130715/mlton/ast/char-size.sig mlton-20210117+dfsg/mlton/ast/char-size.sig --- mlton-20130715/mlton/ast/char-size.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/char-size.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -(* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature CHAR_SIZE_STRUCTS = - sig - end - -signature CHAR_SIZE = - sig - include CHAR_SIZE_STRUCTS - - datatype t = C8 | C16 | C32 - - val all: t list - val bits: t -> Bits.t - val equals: t * t -> bool - val fromBits: Bits.t -> t - val isInRange: t * IntInf.t -> bool - val memoize: (t -> 'a) -> t -> 'a - end diff -Nru mlton-20130715/mlton/ast/field.fun mlton-20210117+dfsg/mlton/ast/field.fun --- mlton-20130715/mlton/ast/field.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/field.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor Field (S: FIELD_STRUCTS): FIELD = -struct - -open S - -datatype t = - Int of int - | Symbol of Symbol.t - -val equals = - fn (Int n, Int n') => Int.equals (n, n') - | (Symbol s, Symbol s') => Symbol.equals (s, s') - | _ => false - -val toString = - fn Int n => Int.toString (n + 1) - | Symbol s => Symbol.toString s - -val layout = Layout.str o toString - -val op <= = - fn (Int n, Int n') => Int.<= (n, n') - | (Symbol s, Symbol s') => Symbol.<= (s, s') - | (Symbol _, Int _) => false - | (Int _, Symbol _) => true - -end diff -Nru mlton-20130715/mlton/ast/field.sig mlton-20210117+dfsg/mlton/ast/field.sig --- mlton-20130715/mlton/ast/field.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/field.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature FIELD_STRUCTS = - sig - structure Symbol: SYMBOL - end - -signature FIELD = - sig - include FIELD_STRUCTS - - datatype t = - Int of int - | Symbol of Symbol.t - - val <= : t * t -> bool (* ordering used for sorting *) - val equals: t * t -> bool - val layout: t -> Layout.t - val toString: t -> string - end diff -Nru mlton-20130715/mlton/ast/int-size.fun mlton-20210117+dfsg/mlton/ast/int-size.fun --- mlton-20130715/mlton/ast/int-size.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/int-size.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor IntSize (S: INT_SIZE_STRUCTS): INT_SIZE = -struct - -open S - -datatype t = T of {bits: Bits.t} - -fun bits (T {bits, ...}) = bits - -fun compare (s, s') = Bits.compare (bits s, bits s') - -val {equals, ...} = Relation.compare compare - -fun isValidSize (i: int) = - (1 <= i andalso i <= 32) orelse i = 64 - -val sizes: Bits.t list = - Vector.toList - (Vector.keepAllMap - (Vector.tabulate (65, fn i => if isValidSize i - then SOME (Bits.fromInt i) - else NONE), - fn i => i)) - -fun make i = T {bits = i} - -val allVector = Vector.tabulate (65, fn i => - if isValidSize i - then SOME (make (Bits.fromInt i)) - else NONE) - -fun fromBits (b: Bits.t): t = - case Vector.sub (allVector, Bits.toInt b) handle Subscript => NONE of - NONE => Error.bug (concat ["IntSize.fromBits: strange int size: ", Bits.toString b]) - | SOME s => s - -val all = List.map (sizes, fromBits) - -val memoize: (t -> 'a) -> t -> 'a = - fn f => - let - val v = Vector.map (allVector, fn opt => Option.map (opt, f)) - in - fn T {bits = b, ...} => valOf (Vector.sub (v, Bits.toInt b)) - end - -end diff -Nru mlton-20130715/mlton/ast/int-size.sig mlton-20210117+dfsg/mlton/ast/int-size.sig --- mlton-20130715/mlton/ast/int-size.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/int-size.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature INT_SIZE_STRUCTS = - sig - end - -signature INT_SIZE = - sig - include INT_SIZE_STRUCTS - - type t - - val all: t list - val bits: t -> Bits.t - val equals: t * t -> bool - val fromBits : Bits.t -> t - val memoize: (t -> 'a) -> t -> 'a - end diff -Nru mlton-20130715/mlton/ast/longid.fun mlton-20210117+dfsg/mlton/ast/longid.fun --- mlton-20130715/mlton/ast/longid.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/longid.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -72,7 +73,7 @@ ((ss, SourcePos.column p), fn (s::ss, cl) => let - val cr = cl + String.length (Symbol.toString s) + val cr = cl + String.length (Symbol.toString s) - 1 in SOME ((s, Region.make @@ -82,7 +83,7 @@ right = SourcePos.make {column = cr, file = file, line = line}}), - (ss, cr + 1)) + (ss, cr + 2)) end | ([], _) => NONE) end diff -Nru mlton-20130715/mlton/ast/longid.sig mlton-20210117+dfsg/mlton/ast/longid.sig --- mlton-20130715/mlton/ast/longid.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/longid.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ast/prim-cons.fun mlton-20210117+dfsg/mlton/ast/prim-cons.fun --- mlton-20130715/mlton/ast/prim-cons.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/prim-cons.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor PrimCons (S: PRIM_CONS_STRUCTS): PRIM_CONS = -struct - -open S - -type con = t - -val cons = fromString "::" -val falsee = fromString "false" -val nill = fromString "nil" -val reff = fromString "ref" -val truee = fromString "true" - -(* exception constructors *) -val bind = fromString "Bind" -val match = fromString "Match" -val overflow = fromString "Overflow" - -end diff -Nru mlton-20130715/mlton/ast/prim-cons.sig mlton-20210117+dfsg/mlton/ast/prim-cons.sig --- mlton-20130715/mlton/ast/prim-cons.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/prim-cons.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature PRIM_CONS_STRUCTS = - sig - type t - val equals: t * t -> bool - val fromString: string -> t - end - -signature PRIM_CONS = - sig - type con - - val bind: con - val cons: con - val falsee: con - val match: con - val nill: con - val overflow: con - val reff: con - val truee: con - end diff -Nru mlton-20130715/mlton/ast/prim-tycons.fun mlton-20210117+dfsg/mlton/ast/prim-tycons.fun --- mlton-20130715/mlton/ast/prim-tycons.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/prim-tycons.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,237 +0,0 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor PrimTycons (S: PRIM_TYCONS_STRUCTS): PRIM_TYCONS = -struct - -open S - -structure BindingStrength = - struct - datatype t = - Arrow - | Tuple - | Unit - - val unit = Unit - end - -datatype z = datatype RealSize.t - -type tycon = t - -local - fun make s = (s, fromString s) -in - val array = make "array" - val arrow = make "->" - val bool = make "bool" - val cpointer = make "cpointer" - val exn = make "exn" - val intInf = make "intInf" - val list = make "list" - val reff = make "ref" - val thread = make "thread" - val tuple = make "*" - val vector = make "vector" - val weak = make "weak" -end - -datatype z = datatype Kind.t -datatype z = datatype AdmitsEquality.t - -local - fun 'a make (prefix: string, - all: 'a list, - bits: 'a -> Bits.t, - equalsA: 'a * 'a -> bool, - memo: ('a -> t) -> ('a -> t), - admitsEquality: AdmitsEquality.t) = - let - val all = - Vector.fromListMap - (all, fn s => let - val name = concat [prefix, Bits.toString (bits s)] - in - {name = name, - size = s, - tycon = fromString name} - end) - val fromSize = - memo - (fn s => - case Vector.peek (all, fn {size = s', ...} => equalsA (s, s')) of - NONE => Error.bug "PrimTycons.make.fromSize" - | SOME {tycon, ...} => tycon) - fun is t = Vector.exists (all, fn {tycon = t', ...} => equals (t, t')) - fun de t = - case Vector.peek (all, fn {tycon = t', ...} => equals (t, t')) of - NONE => Error.bug "PrimTycons.make.de" - | SOME {size, ...} => size - val prims = - Vector.toListMap (all, fn {name, tycon, ...} => - {admitsEquality = admitsEquality, - kind = Arity 0, - name = name, - tycon = tycon}) - val all = Vector.map (all, fn {tycon, size, ...} => (tycon, size)) - in - (fromSize, all, is, de, prims) - end -in - val (char, _, isCharX, deCharX, primChars) = - let - open CharSize - in - make ("char", all, bits, equals, memoize, Sometimes) - end - val (int, ints, isIntX, deIntX, primInts) = - let - open IntSize - in - make ("int", all, bits, equals, memoize, Sometimes) - end - val (real, reals, isRealX, deRealX, primReals) = - let - open RealSize - in - make ("real", all, bits, equals, memoize, Never) - end - val (word, words, isWordX, deWordX, primWords) = - let - open WordSize - in - make ("word", all, bits, equals, memoize, Sometimes) - end -end - -val prims = - List.map ([(array, Arity 1, Always), - (arrow, Arity 2, Never), - (bool, Arity 0, Sometimes), - (cpointer, Arity 0, Always), - (exn, Arity 0, Never), - (intInf, Arity 0, Sometimes), - (list, Arity 1, Sometimes), - (reff, Arity 1, Always), - (thread, Arity 0, Never), - (tuple, Nary, Sometimes), - (vector, Arity 1, Sometimes), - (weak, Arity 1, Never)], - fn ((name, tycon), kind, admitsEquality) => - {admitsEquality = admitsEquality, - kind = kind, - name = name, - tycon = tycon}) - @ primChars @ primInts @ primReals @ primWords - -val array = #2 array -val arrow = #2 arrow -val bool = #2 bool -val cpointer = #2 cpointer -val exn = #2 exn -val intInf = #2 intInf -val list = #2 list -val reff = #2 reff -val thread = #2 thread -val tuple = #2 tuple -val vector = #2 vector -val weak = #2 weak - -val defaultChar = fn () => - case !Control.defaultChar of - "char8" => char CharSize.C8 - | _ => Error.bug "PrimTycons.defaultChar" -val defaultInt = fn () => - case !Control.defaultInt of - "int8" => int (IntSize.fromBits (Bits.fromInt 8)) - | "int16" => int (IntSize.fromBits (Bits.fromInt 16)) - | "int32" => int (IntSize.fromBits (Bits.fromInt 32)) - | "int64" => int (IntSize.fromBits (Bits.fromInt 64)) - | "intinf" => intInf - | _ => Error.bug "PrimTycons.defaultInt" -val defaultReal = fn () => - case !Control.defaultReal of - "real32" => real RealSize.R32 - | "real64" => real RealSize.R64 - | _ => Error.bug "PrimTycons.defaultReal" -val defaultWord = fn () => - case !Control.defaultWord of - "word8" => word (WordSize.fromBits (Bits.fromInt 8)) - | "word16" => word (WordSize.fromBits (Bits.fromInt 16)) - | "word32" => word (WordSize.fromBits (Bits.fromInt 32)) - | "word64" => word (WordSize.fromBits (Bits.fromInt 64)) - | _ => Error.bug "PrimTycons.defaultWord" - -val isBool = fn c => equals (c, bool) -val isCPointer = fn c => equals (c, cpointer) -val isIntX = fn c => equals (c, intInf) orelse isIntX c -val deIntX = fn c => if equals (c, intInf) then NONE else SOME (deIntX c) - -fun layoutApp (c: t, - args: (Layout.t * ({isChar: bool} - * BindingStrength.t)) vector) = - let - local - open Layout - in - val mayAlign = mayAlign - val seq = seq - val str = str - end - datatype z = datatype BindingStrength.t - datatype binding_context = - ArrowLhs - | ArrowRhs - | TupleElem - | Tyseq1 - | TyseqN - fun maybe bindingContext (l, ({isChar = _}, bindingStrength)) = - case (bindingStrength, bindingContext) of - (Unit, _) => l - | (Tuple, ArrowLhs) => l - | (Tuple, ArrowRhs) => l - | (Tuple, TyseqN) => l - | (Arrow, ArrowRhs) => l - | (Arrow, TyseqN) => l - | _ => Layout.paren l - fun normal () = - let - val ({isChar}, lay) = - case Vector.length args of - 0 => ({isChar = equals (c, defaultChar ())}, layout c) - | 1 => ({isChar = false}, - seq [maybe Tyseq1 (Vector.sub (args, 0)), - str " ", layout c]) - | _ => ({isChar = false}, - seq [Layout.tuple - (Vector.toListMap (args, maybe TyseqN)), - str " ", layout c]) - in - (lay, ({isChar = isChar}, Unit)) - end - in - if equals (c, arrow) - then (mayAlign [maybe ArrowLhs (Vector.sub (args, 0)), - seq [str "-> ", - maybe ArrowRhs (Vector.sub (args, 1))]], - ({isChar = false}, Arrow)) - else if equals (c, tuple) - then if 0 = Vector.length args - then (str "unit", ({isChar = false}, Unit)) - else (mayAlign (Layout.separateLeft - (Vector.toListMap (args, maybe TupleElem), "* ")), - ({isChar = false}, Tuple)) - else if equals (c, vector) - then if #isChar (#1 (#2 (Vector.sub (args, 0)))) - then (str "string", ({isChar = false}, Unit)) - else normal () - else normal () - end - -end diff -Nru mlton-20130715/mlton/ast/prim-tycons.sig mlton-20210117+dfsg/mlton/ast/prim-tycons.sig --- mlton-20130715/mlton/ast/prim-tycons.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/prim-tycons.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature PRIM_TYCONS_SUBSTRUCTS = - sig - structure AdmitsEquality: ADMITS_EQUALITY - structure CharSize: CHAR_SIZE - structure IntSize: INT_SIZE - structure Kind: TYCON_KIND - structure RealSize: REAL_SIZE - structure WordSize: WORD_SIZE - end - -signature PRIM_TYCONS_STRUCTS = - sig - include PRIM_TYCONS_SUBSTRUCTS - - type t - - val fromString: string -> t - val equals: t * t -> bool - val layout: t -> Layout.t - end - -signature BINDING_STRENGTH = - sig - type t - - val unit: t - end - -signature PRIM_TYCONS = - sig - include PRIM_TYCONS_SUBSTRUCTS - - structure BindingStrength: BINDING_STRENGTH - - type tycon - - val array: tycon - val arrow: tycon - val bool: tycon - val char: CharSize.t -> tycon - val cpointer: tycon - val deCharX: tycon -> CharSize.t - val defaultChar: unit -> tycon - val defaultInt: unit -> tycon - val defaultReal: unit -> tycon - val defaultWord: unit -> tycon - val deIntX: tycon -> IntSize.t option - val deRealX: tycon -> RealSize.t - val deWordX: tycon -> WordSize.t - val exn: tycon - val int: IntSize.t -> tycon - val ints: (tycon * IntSize.t) vector - val intInf: tycon - val isBool: tycon -> bool - val isCharX: tycon -> bool - val isCPointer: tycon -> bool - val isIntX: tycon -> bool - val isRealX: tycon -> bool - val isWordX: tycon -> bool - val layoutApp: - tycon * (Layout.t * ({isChar: bool} * BindingStrength.t)) vector - -> Layout.t * ({isChar: bool} * BindingStrength.t) - val list: tycon - val prims: {admitsEquality: AdmitsEquality.t, - kind: Kind.t, - name: string, - tycon: tycon} list - val real: RealSize.t -> tycon - val reals: (tycon * RealSize.t) vector - val reff: tycon - val thread: tycon - val tuple: tycon - val vector: tycon - val weak: tycon - val word: WordSize.t -> tycon - val words: (tycon * WordSize.t) vector - end diff -Nru mlton-20130715/mlton/ast/real-size.fun mlton-20210117+dfsg/mlton/ast/real-size.fun --- mlton-20130715/mlton/ast/real-size.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/real-size.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor RealSize (S: REAL_SIZE_STRUCTS): REAL_SIZE = -struct - -open S - -datatype t = R32 | R64 - -val all = [R32, R64] - -val equals: t * t -> bool = op = - -val memoize: (t -> 'a) -> t -> 'a = - fn f => - let - val r32 = f R32 - val r64 = f R64 - in - fn R32 => r32 - | R64 => r64 - end - -val toString = - fn R32 => "32" - | R64 => "64" - -val bytes: t -> Bytes.t = - fn R32 => Bytes.fromInt 4 - | R64 => Bytes.fromInt 8 - -val bits: t -> Bits.t = Bytes.toBits o bytes - -end diff -Nru mlton-20130715/mlton/ast/real-size.sig mlton-20210117+dfsg/mlton/ast/real-size.sig --- mlton-20130715/mlton/ast/real-size.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/real-size.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature REAL_SIZE_STRUCTS = - sig - end - -signature REAL_SIZE = - sig - include REAL_SIZE_STRUCTS - - datatype t = R32 | R64 - - val all: t list - val bits: t -> Bits.t - val bytes: t -> Bytes.t - val equals: t * t -> bool - val memoize: (t -> 'a) -> t -> 'a - val toString: t -> string - end diff -Nru mlton-20130715/mlton/ast/record.fun mlton-20210117+dfsg/mlton/ast/record.fun --- mlton-20130715/mlton/ast/record.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/record.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -(* empty tuple is also a record *) - -functor Record (S: RECORD_STRUCTS): RECORD = -struct - -open S - -datatype 'a t = - Tuple of 'a vector - | Record of (Field.t * 'a) vector - -val tuple = Tuple - -fun toVector r = - case r of - Tuple v => Vector.mapi (v, fn (i, x) => (Field.Int i, x)) - | Record r => r - -fun detupleOpt (r: 'a t): 'a vector option = - case r of - Tuple t => SOME t - | Record _ => NONE - -fun sort v = - QuickSort.sortVector (v, fn ((s, _), (s', _)) => Field.<= (s, s')) - -fun fromVector v = - let - fun isTuple v : bool = - Vector.foralli - (v, fn (i, (f, _)) => - case f of - Field.Int i' => Int.equals (i, i') - | _ => false) - val v = if isSorted then sort v else v - in - if isTuple v - then Tuple (Vector.map (v, #2)) - else Record v - end - -val peek: 'a t * Field.t -> 'a option = - fn (r, f) => - case r of - Record r => - (case Vector.peek (r, fn (f', _) => Field.equals (f, f')) of - NONE => NONE - | SOME (_, x) => SOME x) - | Tuple t => - if Vector.isEmpty t - then NONE - else (case f of - Field.Int i => - if 0 <= i andalso i < Vector.length t - then SOME (Vector.sub (t, i)) - else NONE - | Field.Symbol _ => NONE) - -fun range r = - case r of - Tuple t => t - | Record r => Vector.map (r, #2) - -fun exists (r, p) = - case r of - Tuple xs => Vector.exists (xs, p) - | Record r => Vector.exists (r, fn (_, x) => p x) - -fun forall (r, p) = not (exists (r, not o p)) - -fun map (r: 'a t, f: 'a -> 'b): 'b t = - case r of - Tuple xs => Tuple (Vector.map (xs, f)) - | Record r => Record (Vector.map (r, fn (field, a) => (field, f a))) - -fun foreach (r: 'a t, f: 'a -> unit): unit = - case r of - Tuple xs => Vector.foreach (xs, f) - | Record r => Vector.foreach (r, f o #2) - -fun change (r: 'a t, f: 'a vector -> 'b vector * 'c): 'b t * 'c = - case r of - Tuple xs => let val (ys, c) = f xs - in (Tuple ys, c) - end - | Record r => let val (fs, xs) = Vector.unzip r - val (ys, c) = f xs - in (Record (Vector.zip (fs, ys)), c) - end - -fun zip z = fromVector (Vector.zip z) - -fun layout {record, layoutTuple, separator, extra, layoutElt} = - case (record, extra) of - (Tuple xs, "") => layoutTuple xs - | _ => - let - val r = toVector record - open Layout - in seq [str "{", - mayAlign (separateRight (Vector.toListMap - (r, fn (f, x) => - seq [Field.layout f, - str separator, - layoutElt x]), - ",")), - str extra, - str "}"] - end - -end diff -Nru mlton-20130715/mlton/ast/record.sig mlton-20210117+dfsg/mlton/ast/record.sig --- mlton-20130715/mlton/ast/record.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/record.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature RECORD_STRUCTS = - sig - val isSorted: bool - structure Field: FIELD - end - -signature RECORD = - sig - include RECORD_STRUCTS - - type 'a t - - (* Create a record with the same fields but a new range. - * Also return some additional info. - *) - val change: 'a t * ('a vector -> 'b vector * 'c) -> 'b t * 'c - (* detuple r returns the components, if r is a tuple *) - val detupleOpt: 'a t -> 'a vector option - val exists: 'a t * ('a -> bool) -> bool - val forall: 'a t * ('a -> bool) -> bool - val foreach: 'a t * ('a -> unit) -> unit - val fromVector: (Field.t * 'a) vector -> 'a t - val layout: {record: 'a t, - separator: string, - extra: string, - layoutTuple: 'a vector -> Layout.t, - layoutElt: 'a -> Layout.t} -> Layout.t - val map: 'a t * ('a -> 'b) -> 'b t - val peek: 'a t * Field.t -> 'a option - (* range {1 = a, 2 = b, 3 = c} returns [a, b, c] *) - val range: 'a t -> 'a vector - val toVector: 'a t -> (Field.t * 'a) vector - (* tuple [a, b, c] creates {1 = a, 2 = b, 3 = c} *) - val tuple: 'a vector -> 'a t - val zip: Field.t vector * 'a vector -> 'a t - end diff -Nru mlton-20130715/mlton/ast/sources.cm mlton-20210117+dfsg/mlton/ast/sources.cm --- mlton-20130715/mlton/ast/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -2,75 +2,28 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library -signature ADMITS_EQUALITY signature AST -signature BINDING_STRENGTH -signature CHAR_SIZE -signature FIELD -signature INT_SIZE -signature LONGID -signature PRIM_CONS -signature PRIM_TYCONS -signature REAL_SIZE -signature RECORD -signature SYMBOL -signature TYCON_KIND -signature TYVAR -signature WORD_SIZE -signature WRAPPED -functor AdmitsEquality functor Ast -functor Field -functor PrimCons -functor PrimTycons -functor Record -functor Symbol -functor TyconKind -functor Tyvar is ../../lib/mlton/sources.cm +../atoms/sources.cm ../control/sources.cm -admits-equality.sig -admits-equality.fun -wrapped.sig ast-const.sig ast-const.fun -symbol.sig -symbol.fun ast-id.sig ast-id.fun -field.sig -field.fun -char-size.sig -char-size.fun -int-size.sig -int-size.fun longid.sig longid.fun -prim-cons.sig -prim-cons.fun -real-size.sig -real-size.fun -word-size.sig -word-size.fun -tycon-kind.sig -tycon-kind.fun -prim-tycons.sig -prim-tycons.fun -record.sig -record.fun -tyvar.sig -tyvar.fun ast-atoms.sig ast-atoms.fun ast-core.sig diff -Nru mlton-20130715/mlton/ast/sources.mlb mlton-20210117+dfsg/mlton/ast/sources.mlb --- mlton-20130715/mlton/ast/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,45 +2,21 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) local ../../lib/mlton/sources.mlb + ../atoms/sources.mlb ../control/sources.mlb - admits-equality.sig - admits-equality.fun - wrapped.sig ast-const.sig ast-const.fun - symbol.sig - symbol.fun ast-id.sig ast-id.fun - field.sig - field.fun - char-size.sig - char-size.fun - int-size.sig - int-size.fun longid.sig longid.fun - prim-cons.sig - prim-cons.fun - real-size.sig - real-size.fun - word-size.sig - word-size.fun - tycon-kind.sig - tycon-kind.fun - prim-tycons.sig - prim-tycons.fun - record.sig - record.fun - tyvar.sig - tyvar.fun ast-atoms.sig ast-atoms.fun ast-core.sig @@ -54,27 +30,7 @@ ast.sig ast.fun in - signature ADMITS_EQUALITY signature AST - signature BINDING_STRENGTH - signature CHAR_SIZE - signature FIELD - signature INT_SIZE - signature PRIM_CONS - signature PRIM_TYCONS - signature REAL_SIZE - signature RECORD - signature TYCON_KIND - signature TYVAR - signature WORD_SIZE - functor AdmitsEquality functor Ast - functor Field - functor PrimCons - functor PrimTycons - functor Record - functor Symbol - functor TyconKind - functor Tyvar end diff -Nru mlton-20130715/mlton/ast/symbol.fun mlton-20210117+dfsg/mlton/ast/symbol.fun --- mlton-20130715/mlton/ast/symbol.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/symbol.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -(* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor Symbol (S: SYMBOL_STRUCTS): SYMBOL = -struct - -open S - -datatype t = T of {hash: word, - name: string, - plist: PropertyList.t} - -local - fun make f (T r) = f r -in - val hash = make #hash - val plist = make #plist - val name = make #name -end - -val table: t HashSet.t = HashSet.new {hash = hash} - -fun fromString s = - let - val hash = String.hash s - in - HashSet.lookupOrInsert - (table, hash, fn T {name, ...} => s = name, - fn () => T {hash = hash, - name = s, - plist = PropertyList.new ()}) - end - -fun foreach f = HashSet.foreach (table, f) - -val toString = name - -val layout = Layout.str o toString - -fun equals (s, s') = PropertyList.equals (plist s, plist s') - -local - fun make f (s, s') = f (name s, name s') -in - val op <= = make String.<= - val compare = make String.compare -end - -val asterisk = fromString "*" -val bogus = fromString "" -val equal = fromString "=" -val itt = fromString "it" -val unit = fromString "unit" - -end diff -Nru mlton-20130715/mlton/ast/symbol.sig mlton-20210117+dfsg/mlton/ast/symbol.sig --- mlton-20130715/mlton/ast/symbol.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/symbol.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature SYMBOL_STRUCTS = - sig - end - -signature SYMBOL = - sig - include SYMBOL_STRUCTS - - type t - - (* <= is alphabetical order *) - val <= : t * t -> bool - val asterisk: t - val bogus: t - val compare: t * t -> Relation.t - val equal: t - val equals: t * t -> bool - val foreach: (t -> unit) -> unit - val fromString: string -> t - val hash: t -> word - val itt: t - val layout: t -> Layout.t - val plist: t -> PropertyList.t - val toString: t -> string - val unit: t - end diff -Nru mlton-20130715/mlton/ast/tycon-kind.fun mlton-20210117+dfsg/mlton/ast/tycon-kind.fun --- mlton-20130715/mlton/ast/tycon-kind.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/tycon-kind.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -(* Copyright (C) 2003-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor TyconKind (S: TYCON_KIND_STRUCTS): TYCON_KIND = -struct - -open S - -datatype t = - Arity of int - | Nary - -val layout = - fn Arity n => Int.layout n - | Nary => Layout.str "n-ary" - -val equals = - fn (Arity n, Arity n') => n = n' - | (Nary, Nary) => true - | _ => false - -val equals = Trace.trace2 ("TyconKind.equals", layout, layout, Bool.layout) equals - -end diff -Nru mlton-20130715/mlton/ast/tycon-kind.sig mlton-20210117+dfsg/mlton/ast/tycon-kind.sig --- mlton-20130715/mlton/ast/tycon-kind.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/tycon-kind.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature TYCON_KIND_STRUCTS = - sig - end - -signature TYCON_KIND = - sig - include TYCON_KIND_STRUCTS - - datatype t = - Arity of int - | Nary - - val equals: t * t -> bool - val layout: t -> Layout.t - end diff -Nru mlton-20130715/mlton/ast/tyvar.fun mlton-20210117+dfsg/mlton/ast/tyvar.fun --- mlton-20130715/mlton/ast/tyvar.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/tyvar.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -(* Copyright (C) 2012 Matthew Fluet. - * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor Tyvar (S: TYVAR_STRUCTS): TYVAR = -struct - -open S - -structure Wrap = Region.Wrap -open Wrap -type node' = {name: string, - equality: bool, - hash: Word.t, - plist: PropertyList.t} -type t = node' Wrap.t -type obj = t - -local - fun make sel (tyvar:t) = sel (node tyvar) -in - val name = make #name - val hash = make #hash - val plist = make #plist - val isEquality = make #equality -end - -val toString = name -val layout = Layout.str o toString - -val clear = PropertyList.clear o plist -fun equals (a, a') = PropertyList.equals (plist a, plist a') -fun sameName (a, a') = String.equals (name a, name a') - -fun newRegion ({name, equality}, region) = - makeRegion ({name = name, - equality = equality, - hash = Random.word (), - plist = PropertyList.new ()}, - region) - -fun new f = newRegion (f, Region.bogus) - -fun newLike a = newRegion ({equality = isEquality a, - name = name a}, - region a) - -fun newString (s, {left, right}) = - newRegion ({name = s, - equality = String.size s > 1 - andalso Char.equals (#"'", String.sub (s, 1))}, - Region.make {left = left, right = right}) - -(*val make = Trace.trace2 ("Tyvar.make", String.layout, Bool.layout, - * layout) make - *) - -local val c = Counter.new 0 -in - fun reset () = Counter.reset (c, 0) - (* quell unused warning *) - val _ = reset - fun newNoname {equality} = - let - val name = (if equality then "''" else "'") ^ - "a_" ^ Int.toString (Counter.next c) - in - new {name = name, equality = equality} - end -end - -local open Layout -in - fun layouts ts = - case Vector.length ts of - 0 => empty - | 1 => layout (Vector.sub (ts, 0)) - | _ => Vector.layout layout ts -end - -end diff -Nru mlton-20130715/mlton/ast/tyvar.sig mlton-20210117+dfsg/mlton/ast/tyvar.sig --- mlton-20130715/mlton/ast/tyvar.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/tyvar.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -(* Copyright (C) 1999-2005, 2008 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature TYVAR_STRUCTS = - sig - end - -signature TYVAR = - sig - include TYVAR_STRUCTS - include T - include WRAPPED sharing type obj = t - - val clear: t -> unit - val hash: t -> Word.t - val isEquality: t -> bool - val layouts: t vector -> Layout.t - val name: t -> string - val newLike: t -> t - (* newNoname creates a new type variable named a_n, where n is a - * counter. - *) - val newNoname: {equality: bool} -> t - (* newString "'a" creates a type variable named a - * newString "''a" creates an equality type variable named a - *) - val newString: string * {left: SourcePos.t, - right: SourcePos.t} -> t - val plist: t -> PropertyList.t - (* reset the counter for new type variables *) - val reset: unit -> unit - val sameName: t * t -> bool - val toString: t -> string - end diff -Nru mlton-20130715/mlton/ast/word-size.fun mlton-20210117+dfsg/mlton/ast/word-size.fun --- mlton-20130715/mlton/ast/word-size.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/word-size.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor WordSize (S: WORD_SIZE_STRUCTS): WORD_SIZE = -struct - -open S - -datatype t = T of Bits.t - -fun bits (T b) = b - -val toString = Bits.toString o bits - -fun compare (s, s') = Bits.compare (bits s, bits s') - -val {equals, ...} = Relation.compare compare - -fun fromBits (b: Bits.t): t = - if Bits.>= (b, Bits.zero) - then T b - else Error.bug (concat ["WordSize.fromBits: strange word size: ", Bits.toString b]) - -fun isValidSize (i: int) = - (1 <= i andalso i <= 32) orelse i = 64 - -val byte = fromBits (Bits.inByte) - -fun bigIntInfWord () = fromBits (Control.Target.Size.mplimb ()) -fun cint () = fromBits (Control.Target.Size.cint ()) -fun cpointer () = fromBits (Control.Target.Size.cpointer ()) -fun cptrdiff () = fromBits (Control.Target.Size.cptrdiff ()) -fun csize () = fromBits (Control.Target.Size.csize ()) -fun objptr () = fromBits (Control.Target.Size.objptr ()) -fun objptrHeader () = fromBits (Control.Target.Size.header ()) -fun seqIndex () = fromBits (Control.Target.Size.seqIndex ()) -fun smallIntInfWord () = objptr () -val bool = fromBits (Bits.fromInt 32) -val compareRes = fromBits (Bits.fromInt 32) -val shiftArg = fromBits (Bits.fromInt 32) -val word8 = fromBits (Bits.fromInt 8) -val word16 = fromBits (Bits.fromInt 16) -val word32 = fromBits (Bits.fromInt 32) -val word64 = fromBits (Bits.fromInt 64) - -val allVector = Vector.tabulate (65, fn i => - if isValidSize i - then SOME (fromBits (Bits.fromInt i)) - else NONE) - -val all: t list = Vector.toList (Vector.keepAllMap (allVector, fn so => so)) - -val prims = List.map ([8, 16, 32, 64], fromBits o Bits.fromInt) - -val memoize: (t -> 'a) -> t -> 'a = - fn f => - let - val v = Vector.map (allVector, fn opt => Option.map (opt, f)) - in - fn s => valOf (Vector.sub (v, Bits.toInt (bits s))) - end - -fun roundUpToPrim s = - let - val bits = Bits.toInt (bits s) - val bits = - if bits <= 8 - then 8 - else if bits <= 16 - then 16 - else if bits <= 32 - then 32 - else if bits = 64 - then 64 - else Error.bug "WordSize.roundUpToPrim" - in - fromBits (Bits.fromInt bits) - end - -val bytes: t -> Bytes.t = Bits.toBytes o bits - -fun cardinality s = IntInf.<< (1, Bits.toWord (bits s)) - -fun range (s, {signed}) = - if signed - then - let - val pow = IntInf.<< (1, Bits.toWord (bits s) - 0w1) - in - (~ pow, pow - 1) - end - else (0, cardinality s - 1) - -val min = #1 o range -val max = #2 o range - -fun isInRange (s, i, sg) = - let - val (min, max) = range (s, sg) - in - min <= i andalso i <= max - end - -datatype prim = W8 | W16 | W32 | W64 - -fun primOpt (s: t): prim option = - case Bits.toInt (bits s) of - 8 => SOME W8 - | 16 => SOME W16 - | 32 => SOME W32 - | 64 => SOME W64 - | _ => NONE - -fun prim s = - case primOpt s of - NONE => Error.bug "WordSize.prim" - | SOME p => p - -end diff -Nru mlton-20130715/mlton/ast/word-size.sig mlton-20210117+dfsg/mlton/ast/word-size.sig --- mlton-20130715/mlton/ast/word-size.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/word-size.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature WORD_SIZE_STRUCTS = - sig - end - -signature WORD_SIZE = - sig - include WORD_SIZE_STRUCTS - - type t - - val all: t list - val bits: t -> Bits.t - val bigIntInfWord: unit -> t - val bool: t - val bytes: t -> Bytes.t - val byte: t - val cardinality: t -> IntInf.t - val cint: unit -> t - val compare: t * t -> Relation.t - val compareRes: t - val cpointer: unit -> t - val cptrdiff: unit -> t - val csize: unit -> t - val equals: t * t -> bool - val fromBits: Bits.t -> t - val isInRange: t * IntInf.t * {signed: bool} -> bool - val max: t * {signed: bool} -> IntInf.t - val min: t * {signed: bool} -> IntInf.t - val memoize: (t -> 'a) -> t -> 'a - val objptr: unit -> t - val objptrHeader: unit -> t - datatype prim = W8 | W16 | W32 | W64 - val prim: t -> prim - val prims: t list - val roundUpToPrim: t -> t - val seqIndex: unit -> t - val shiftArg: t - val smallIntInfWord: unit -> t - val toString: t -> string - val word8: t - val word16: t - val word32: t - val word64: t - end diff -Nru mlton-20130715/mlton/ast/wrapped.sig mlton-20210117+dfsg/mlton/ast/wrapped.sig --- mlton-20130715/mlton/ast/wrapped.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ast/wrapped.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature WRAPPED = - sig - type node' - type obj - - val dest: obj -> node' * Region.t - val makeRegion': node' * SourcePos.t * SourcePos.t -> obj - val makeRegion: node' * Region.t -> obj - val node: obj -> node' - val region: obj -> Region.t - end diff -Nru mlton-20130715/mlton/atoms/admits-equality.fun mlton-20210117+dfsg/mlton/atoms/admits-equality.fun --- mlton-20130715/mlton/atoms/admits-equality.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/admits-equality.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,39 @@ +(* Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor AdmitsEquality (S: ADMITS_EQUALITY_STRUCTS): ADMITS_EQUALITY = +struct + +open S + +datatype t = Always | Never | Sometimes + +val toString = + fn Always => "Always" + | Never => "Never" + | Sometimes => "Sometimes" + +val layout = Layout.str o toString + +val op <= = + fn (Never, _) => true + | (Sometimes, Never) => false + | (Sometimes, _) => true + | (Always, Always) => true + | (Always, _) => false + +val op <= = + Trace.trace2 ("AdmitsEquality.<=", layout, layout, Bool.layout) (op <=) + +val or = + fn (Always, _) => Always + | (_, Always) => Always + | (Sometimes, _) => Sometimes + | (_, Sometimes) => Sometimes + | _ => Never + +end diff -Nru mlton-20130715/mlton/atoms/admits-equality.sig mlton-20210117+dfsg/mlton/atoms/admits-equality.sig --- mlton-20130715/mlton/atoms/admits-equality.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/admits-equality.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,22 @@ +(* Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature ADMITS_EQUALITY_STRUCTS = + sig + end + +signature ADMITS_EQUALITY = + sig + include ADMITS_EQUALITY_STRUCTS + + datatype t = Always | Never | Sometimes + + val <= : t * t -> bool + val layout: t -> Layout.t + val or: t * t -> t + val toString: t -> string + end diff -Nru mlton-20130715/mlton/atoms/atoms.fun mlton-20210117+dfsg/mlton/atoms/atoms.fun --- mlton-20130715/mlton/atoms/atoms.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/atoms.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -13,22 +14,48 @@ struct open S - structure ProfileLabel = ProfileLabel () - structure SourceInfo = SourceInfo () - structure ProfileExp = ProfileExp (structure SourceInfo = SourceInfo) - structure Var = Var () - structure Tycon = Tycon (structure CharSize = CharSize + structure CharSize = CharSize () + structure IntSize = IntSize () + structure RealSize = RealSize () + structure WordSize = WordSize () + + structure WordX = WordX (structure WordSize = WordSize) + structure WordXVector = WordXVector (structure WordSize = WordSize + structure WordX = WordX) + structure RealX = RealX (structure RealSize = RealSize + structure WordX = WordX) + + structure CSymbolScope = CSymbolScope () + structure CType = CType (structure RealSize = RealSize + structure WordSize = WordSize) + structure CFunction = CFunction (structure SymbolScope = CSymbolScope + structure CType = CType) + structure CSymbol = CSymbol (structure CSymbolScope = CSymbolScope + structure CType = CType) + + structure Const = Const (structure CSymbol = CSymbol + structure RealX = RealX + structure WordX = WordX + structure WordXVector = WordXVector) + + structure Symbol = Symbol () + structure Field = Field (structure Symbol = Symbol) + structure Record = Record (val isSorted = false + structure Field = Field) + structure SortedRecord = Record (val isSorted = true + structure Field = Field) + + structure Tyvar = Tyvar () + structure AdmitsEquality = AdmitsEquality () + structure TyconKind = TyconKind () + structure Tycon = Tycon (structure AdmitsEquality = AdmitsEquality + structure CharSize = CharSize structure IntSize = IntSize + structure Kind = TyconKind structure RealSize = RealSize structure WordSize = WordSize) structure Con = Con () - structure CType = CType (structure RealSize = RealSize - structure WordSize = WordSize) - structure WordX = WordX (structure WordSize = WordSize) - structure RealX = RealX (structure RealSize = RealSize - structure WordX = WordX) - structure WordXVector = WordXVector (structure WordSize = WordSize - structure WordX = WordX) + structure Var = Var () structure Func = struct open Var @@ -39,19 +66,29 @@ open Func fun newNoname () = newString "L" end - structure Const = Const (structure RealX = RealX - structure WordX = WordX - structure WordXVector = WordXVector) - structure CFunction = CFunction (structure CType = CType) + + structure Ffi = Ffi (structure CFunction = CFunction + structure CType = CType) + + structure Cases = Cases (structure WordSize = WordSize + structure WordX = WordX) + structure Prim = Prim (structure CFunction = CFunction structure CType = CType structure Con = Con structure Const = Const structure RealSize = RealSize structure WordSize = WordSize) - structure Ffi = Ffi (structure CFunction = CFunction - structure CType = CType) - structure Vars = UnorderedSet (Var) + + structure Prod = Prod () + structure Handler = Handler (structure Label = Label) + structure Return = Return (structure Label = Label + structure Handler = Handler) + + structure SourceInfo = SourceInfo () + structure ProfileExp = ProfileExp (structure SourceInfo = SourceInfo) + structure ProfileLabel = ProfileLabel () + structure SourceMaps = SourceMaps (structure ProfileLabel = ProfileLabel) end open Atoms diff -Nru mlton-20130715/mlton/atoms/atoms.sig mlton-20210117+dfsg/mlton/atoms/atoms.sig --- mlton-20130715/mlton/atoms/atoms.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/atoms.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,59 +1,76 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature ATOMS_STRUCTS = sig - structure Field: FIELD - structure CharSize: CHAR_SIZE - structure IntSize: INT_SIZE - structure RealSize: REAL_SIZE - structure Record: RECORD - structure SortedRecord: RECORD - structure Tyvar: TYVAR - structure WordSize: WORD_SIZE - sharing Field = Record.Field = SortedRecord.Field end signature ATOMS' = sig include ATOMS_STRUCTS + structure AdmitsEquality: ADMITS_EQUALITY + structure Cases: CASES structure CFunction: C_FUNCTION + structure CSymbol: C_SYMBOL + structure CSymbolScope: C_SYMBOL_SCOPE structure CType: C_TYPE + structure CharSize: CHAR_SIZE structure Con: CON structure Const: CONST structure Ffi: FFI + structure Field: FIELD structure Func: FUNC + structure Handler: HANDLER + structure IntSize: INT_SIZE structure Label: LABEL structure Prim: PRIM - structure ProfileLabel: PROFILE_LABEL + structure Prod: PROD structure ProfileExp: PROFILE_EXP + structure ProfileLabel: PROFILE_LABEL + structure RealSize: REAL_SIZE structure RealX: REAL_X + structure Record: RECORD + structure Return: RETURN + structure SortedRecord: RECORD structure SourceInfo: SOURCE_INFO + structure SourceMaps: SOURCE_MAPS + structure Symbol: SYMBOL structure Tycon: TYCON + structure TyconKind: TYCON_KIND + structure Tyvar: TYVAR structure Var: VAR - structure Vars: SET + structure WordSize: WORD_SIZE structure WordX: WORD_X structure WordXVector: WORD_X_VECTOR + sharing AdmitsEquality = Tycon.AdmitsEquality sharing CFunction = Ffi.CFunction = Prim.CFunction - sharing CType = CFunction.CType = Ffi.CType = Prim.CType + sharing CSymbol = Const.CSymbol + sharing CSymbolScope = CFunction.SymbolScope = CSymbol.CSymbolScope + sharing CType = CFunction.CType = CSymbol.CType = Ffi.CType = Prim.CType sharing CharSize = Tycon.CharSize sharing Con = Prim.Con sharing Const = Prim.Const + sharing Field = Record.Field = SortedRecord.Field + sharing Handler = Return.Handler sharing IntSize = Tycon.IntSize + sharing Label = Handler.Label = Return.Label + sharing ProfileLabel = SourceMaps.ProfileLabel sharing RealSize = CType.RealSize = Prim.RealSize = RealX.RealSize = Tycon.RealSize sharing RealX = Const.RealX sharing SourceInfo = ProfileExp.SourceInfo - sharing WordSize = CType.WordSize = Prim.WordSize = Tycon.WordSize - = WordX.WordSize - sharing WordX = Const.WordX = WordXVector.WordX + sharing TyconKind = Tycon.Kind + sharing WordSize = Cases.WordSize = CType.WordSize = Prim.WordSize + = Tycon.WordSize = WordX.WordSize + sharing WordX = Cases.WordX = Const.WordX = WordXVector.WordX sharing WordXVector = Const.WordXVector end @@ -71,29 +88,38 @@ * with a descendent substructure". So, I am forced to write out lots * of individual sharing constraints. Blech. *) + sharing AdmitsEquality = Atoms.AdmitsEquality sharing CFunction = Atoms.CFunction + sharing CSymbol = Atoms.CSymbol + sharing CSymbolScope = Atoms.CSymbolScope sharing CType = Atoms.CType + sharing CharSize = Atoms.CharSize + sharing Cases = Atoms.Cases sharing Con = Atoms.Con - (* sharing Cons = Atoms.Cons *) sharing Const = Atoms.Const sharing Ffi = Atoms.Ffi sharing Field = Atoms.Field sharing Func = Atoms.Func + sharing Handler = Atoms.Handler + sharing IntSize = Atoms.IntSize sharing Label = Atoms.Label sharing Prim = Atoms.Prim - sharing ProfileLabel = Atoms.ProfileLabel + sharing Prod = Atoms.Prod sharing ProfileExp = Atoms.ProfileExp + sharing ProfileLabel = Atoms.ProfileLabel sharing RealSize = Atoms.RealSize sharing RealX = Atoms.RealX sharing Record = Atoms.Record + sharing Return = Atoms.Return sharing SortedRecord = Atoms.SortedRecord sharing SourceInfo = Atoms.SourceInfo + sharing SourceMaps = Atoms.SourceMaps + sharing Symbol = Atoms.Symbol sharing Tycon = Atoms.Tycon - (* sharing Tycons = Atoms.Tycons *) + sharing TyconKind = Atoms.TyconKind sharing Tyvar = Atoms.Tyvar - (* sharing Tyvars = Atoms.Tyvars *) sharing Var = Atoms.Var - sharing Vars = Atoms.Vars sharing WordSize = Atoms.WordSize sharing WordX = Atoms.WordX + sharing WordXVector = Atoms.WordXVector end diff -Nru mlton-20130715/mlton/atoms/cases.fun mlton-20210117+dfsg/mlton/atoms/cases.fun --- mlton-20130715/mlton/atoms/cases.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/cases.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,22 +1,105 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2009,2017,2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) functor Cases (S: CASES_STRUCTS): CASES = -struct + struct + open S -open S - -datatype 'a t = - Char of (char * 'a) vector - | Con of (con * 'a) vector - | Int of (IntInf.t * 'a) vector - | Word of (word * 'a) vector - - - -end + datatype ('con, 'a) t = + Con of ('con * 'a) vector + | Word of WordSize.t * (WordX.t * 'a) vector + + fun equals (c1: ('con, 'a) t, c2: ('con, 'a) t, + eqCon: 'con * 'con -> bool, + eqA: 'a * 'a -> bool): bool = + let + fun doit (l1, l2, eq') = + Vector.equals + (l1, l2, fn ((x1, a1), (x2, a2)) => + eq' (x1, x2) andalso eqA (a1, a2)) + in + case (c1, c2) of + (Con l1, Con l2) => doit (l1, l2, eqCon) + | (Word (_, l1), Word (_, l2)) => doit (l1, l2, WordX.equals) + | _ => false + end + + fun hd (c: ('con, 'a) t): 'a = + let + fun doit v = + if Vector.length v >= 1 + then let val (_, a) = Vector.first v + in a + end + else Error.bug "Cases.hd" + in + case c of + Con cs => doit cs + | Word (_, cs) => doit cs + end + + fun isEmpty (c: ('con, 'a) t): bool = + let + fun doit v = Vector.isEmpty v + in + case c of + Con cs => doit cs + | Word (_, cs) => doit cs + end + + fun fold' (c: ('con, 'a) t, b, fc, fw) = + let + fun doit (l, f) = Vector.fold (l, b, fn ((x, a), b) => f (x, a, b)) + in + case c of + Con l => doit (l, fc) + | Word (_, l) => doit (l, fw) + end + + fun fold (c: ('con, 'a) t, b, f) = + let + val f = fn (_, a, b) => f (a, b) + in + fold' (c, b, f, f) + end + + fun map (c: ('con, 'a) t, f): ('con, 'b) t = + let + fun doit l = Vector.map (l, fn (i, x) => (i, f x)) + in + case c of + Con l => Con (doit l) + | Word (s, l) => Word (s, doit l) + end + + fun forall (c: ('con, 'a) t, f: 'a -> bool): bool = + let + fun doit l = Vector.forall (l, fn (_, x) => f x) + in + case c of + Con l => doit l + | Word (_, l) => doit l + end + + fun exists (c: ('con, 'a) t, f: 'a -> bool): bool = + let + fun doit l = Vector.exists (l, fn (_, x) => f x) + in + case c of + Con l => doit l + | Word (_, l) => doit l + end + + fun length (c: ('con, 'a) t): int = fold (c, 0, fn (_, i) => i + 1) + + fun foreach (c, f) = fold (c, (), fn (x, ()) => f x) + + fun foreach' (c, f, fc: 'con -> unit) = + fold' (c, (), fn (c, a, ()) => (fc c; f a), fn (_, a, ()) => f a) + end diff -Nru mlton-20130715/mlton/atoms/cases.sig mlton-20210117+dfsg/mlton/atoms/cases.sig --- mlton-20130715/mlton/atoms/cases.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/cases.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,38 +1,35 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2009,2017,2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -signature CASES_STRUCTS = +signature CASES_STRUCTS = sig - type con - type word - - val conEquals: con * con -> bool - val wordEquals: word * word -> bool + structure WordSize: WORD_SIZE + structure WordX: WORD_X + sharing WordSize = WordX.WordSize end -signature CASES = +signature CASES = sig include CASES_STRUCTS - datatype 'a t = - Char of (char * 'a) vector - | Con of (con * 'a) vector - | Int of (IntInf.t * 'a) vector - | Word of (word * 'a) vector + datatype ('con, 'a) t = + Con of ('con * 'a) vector + | Word of WordSize.t * (WordX.t * 'a) vector - val equals: 'a t * 'a t * ('a * 'a -> bool) -> bool - val fold: 'a t * 'b * ('a * 'b -> 'b) -> 'b - val forall: 'a t * ('a -> bool) -> bool - val foreach: 'a t * ('a -> unit) -> unit - val foreach': 'a t * ('a -> unit) * (con -> unit) -> unit - val hd: 'a t -> 'a - val isEmpty: 'a t -> bool - val length: 'a t -> int - val map: 'a t * ('a -> 'b) -> 'b t + val equals: ('con, 'a) t * ('con, 'a) t * ('con * 'con -> bool) * ('a * 'a -> bool) -> bool + val exists: ('con, 'a) t * ('a -> bool) -> bool + val fold: ('con, 'a) t * 'b * ('a * 'b -> 'b) -> 'b + val forall: ('con, 'a) t * ('a -> bool) -> bool + val foreach': ('con, 'a) t * ('a -> unit) * ('con -> unit) -> unit + val foreach: ('con, 'a) t * ('a -> unit) -> unit + val hd: ('con, 'a) t -> 'a + val isEmpty: ('con, 'a) t -> bool + val length: ('con, 'a) t -> int + val map: ('con, 'a) t * ('a -> 'b) -> ('con, 'b) t end diff -Nru mlton-20130715/mlton/atoms/c-function.fun mlton-20210117+dfsg/mlton/atoms/c-function.fun --- mlton-20130715/mlton/atoms/c-function.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/c-function.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2003-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015,2019 Matthew Fluet. + * Copyright (C) 2003-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -10,32 +11,124 @@ open S +(* infix declarations for Parse.Ops *) +infix 1 <|> >>= +infix 3 <*> <* *> +infixr 4 <$> <$$> <$$$> <$$$$> <$ <$?> + structure Convention = struct datatype t = Cdecl | Stdcall + val all = [Cdecl, Stdcall] + val toString = fn Cdecl => "cdecl" | Stdcall => "stdcall" val layout = Layout.str o toString + + val parse = + let + open Parse + in + any (List.map (all, fn t => kw (toString t) *> pure t)) + end end -structure SymbolScope = +structure Kind = struct datatype t = - External - | Private - | Public - - val toString = - fn External => "external" - | Private => "private" - | Public => "public" - - val layout = Layout.str o toString + Impure + | Pure + | Runtime of {bytesNeeded: int option, + ensuresBytesFree:int option, + mayGC: bool, + maySwitchThreadsFrom: bool, + maySwitchThreadsTo: bool, + modifiesFrontier: bool, + readsStackTop: bool, + writesStackTop: bool} + + val runtimeDefault = Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = true, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = true, + readsStackTop = true, + writesStackTop = true} + val pure = Pure + val impure = Impure + val reentrant = runtimeDefault + + fun layout k = + case k of + Impure => Layout.str "Impure" + | Pure => Layout.str "Pure" + | Runtime {bytesNeeded, ensuresBytesFree, mayGC, + maySwitchThreadsFrom, maySwitchThreadsTo, + modifiesFrontier, readsStackTop, writesStackTop} => + Layout.namedRecord + ("Runtime", + [("bytesNeeded", Option.layout Int.layout bytesNeeded), + ("ensuresBytesFree", Option.layout Int.layout ensuresBytesFree), + ("mayGC", Bool.layout mayGC), + ("maySwitchThreadsFrom", Bool.layout maySwitchThreadsFrom), + ("maySwitchThreadsTo", Bool.layout maySwitchThreadsTo), + ("modifiesFrontier", Bool.layout modifiesFrontier), + ("readsStackTop", Bool.layout readsStackTop), + ("writesStackTop", Bool.layout writesStackTop)]) + + val toString = Layout.toString o layout + + val parse = + let + open Parse + in + any + [kw "Impure" *> pure Impure, + kw "Pure" *> pure Pure, + kw "Runtime" *> + cbrack (ffield ("bytesNeeded", option int) >>= (fn bytesNeeded => + nfield ("ensuresBytesFree", option int) >>= (fn ensuresBytesFree => + nfield ("mayGC", bool) >>= (fn mayGC => + nfield ("maySwitchThreadsFrom", bool) >>= (fn maySwitchThreadsFrom => + nfield ("maySwitchThreadsTo", bool) >>= (fn maySwitchThreadsTo => + nfield ("modifiesFrontier", bool) >>= (fn modifiesFrontier => + nfield ("readsStackTop", bool) >>= (fn readsStackTop => + nfield ("writesStackTop", bool) >>= (fn writesStackTop => + pure {bytesNeeded = bytesNeeded, + ensuresBytesFree = ensuresBytesFree, + mayGC = mayGC, + maySwitchThreadsFrom = maySwitchThreadsFrom, + maySwitchThreadsTo = maySwitchThreadsTo, + modifiesFrontier = modifiesFrontier, + readsStackTop = readsStackTop, + writesStackTop = writesStackTop}))))))))) >>= (fn args => + pure (Runtime args))] + end + + local + fun make (sel, default) k = + case k of + Impure => default + | Pure => default + | Runtime r => sel r + fun makeBool sel = make (sel, false) + fun makeOpt sel = make (sel, NONE) + in + val bytesNeeded = makeOpt #bytesNeeded + val ensuresBytesFree = makeOpt #ensuresBytesFree + val mayGC = makeBool #mayGC + val maySwitchThreadsFrom = makeBool #maySwitchThreadsFrom + val maySwitchThreadsTo = makeBool #maySwitchThreadsTo + val modifiesFrontier = makeBool #modifiesFrontier + val readsStackTop = makeBool #readsStackTop + val writesStackTop = makeBool #writesStackTop + end end structure Target = @@ -50,6 +143,18 @@ val layout = Layout.str o toString + val parse = + let + open Parse + in + (Direct <$> (spaces *> + ((String.implode o op ::) <$$> + (nextSat (fn c => Char.isAlpha c orelse c = #"_"), + many (nextSat (fn c => Char.isAlphaNum c orelse c = #"_")))))) + <|> + (sym "<*>" *> pure Indirect) + end + val equals = fn (Direct name, Direct name') => name = name' | (Indirect, Indirect) => true @@ -58,113 +163,116 @@ datatype z = datatype Target.t datatype 'a t = T of {args: 'a vector, - bytesNeeded: int option, convention: Convention.t, - ensuresBytesFree: bool, - mayGC: bool, - maySwitchThreads: bool, - modifiesFrontier: bool, + kind: Kind.t, + inline: bool, prototype: CType.t vector * CType.t option, - readsStackTop: bool, return: 'a, symbolScope: SymbolScope.t, - target: Target.t, - writesStackTop: bool} + target: Target.t} -fun layout (T {args, bytesNeeded, convention, ensuresBytesFree, mayGC, - maySwitchThreads, modifiesFrontier, prototype, readsStackTop, - return, symbolScope, target, writesStackTop, ...}, +fun layout (T {args, convention, inline, kind, prototype, return, symbolScope, target, ...}, layoutType) = Layout.record [("args", Vector.layout layoutType args), - ("bytesNeeded", Option.layout Int.layout bytesNeeded), ("convention", Convention.layout convention), - ("ensuresBytesFree", Bool.layout ensuresBytesFree), - ("mayGC", Bool.layout mayGC), - ("maySwitchThreads", Bool.layout maySwitchThreads), - ("modifiesFrontier", Bool.layout modifiesFrontier), + ("inline", Bool.layout inline), + ("kind", Kind.layout kind), ("prototype", (fn (args,ret) => Layout.record [("args", Vector.layout CType.layout args), ("res", Option.layout CType.layout ret)]) prototype), - ("readsStackTop", Bool.layout readsStackTop), ("return", layoutType return), ("symbolScope", SymbolScope.layout symbolScope), - ("target", Target.layout target), - ("writesStackTop", Bool.layout writesStackTop)] + ("target", Target.layout target)] + +fun parse parseType = + let + open Parse + in + T <$> + cbrack (ffield ("args", vector parseType) >>= (fn args => + nfield ("convention", Convention.parse) >>= (fn convention => + nfield ("inline", bool) >>= (fn inline => + nfield ("kind", Kind.parse) >>= (fn kind => + nfield ("prototype", cbrack (ffield ("args", vector CType.parse) >>= (fn args => + nfield ("res", option CType.parse) >>= (fn res => + pure (args, res))))) >>= (fn prototype => + nfield ("return", parseType) >>= (fn return => + nfield ("symbolScope", SymbolScope.parse) >>= (fn symbolScope => + nfield ("target", Target.parse) >>= (fn target => + pure {args = args, convention = convention, inline = inline, + kind = kind, prototype = prototype, return = return, + symbolScope = symbolScope, target = target}))))))))) + end local fun make f (T r) = f r + fun makeKind f (T r) = f (#kind r) in fun args z = make #args z - fun bytesNeeded z = make #bytesNeeded z + fun bytesNeeded z = makeKind Kind.bytesNeeded z fun convention z = make #convention z - fun ensuresBytesFree z = make #ensuresBytesFree z - fun mayGC z = make #mayGC z - fun maySwitchThreads z = make #maySwitchThreads z - fun modifiesFrontier z = make #modifiesFrontier z + fun ensuresBytesFree z = makeKind Kind.ensuresBytesFree z + fun mayGC z = makeKind Kind.mayGC z + fun maySwitchThreadsFrom z = makeKind Kind.maySwitchThreadsFrom z + fun maySwitchThreadsTo z = makeKind Kind.maySwitchThreadsTo z + fun modifiesFrontier z = makeKind Kind.modifiesFrontier z fun prototype z = make #prototype z - fun readsStackTop z = make #readsStackTop z + fun readsStackTop z = makeKind Kind.readsStackTop z fun return z = make #return z fun symbolScope z = make #symbolScope z fun target z = make #target z - fun writesStackTop z = make #writesStackTop z + fun writesStackTop z = makeKind Kind.writesStackTop z end (* quell unused warnings *) val _ = (modifiesFrontier, readsStackTop, writesStackTop) fun equals (f, f') = Target.equals (target f, target f') -fun map (T {args, bytesNeeded, convention, ensuresBytesFree, mayGC, - maySwitchThreads, modifiesFrontier, prototype, readsStackTop, - return, symbolScope, target, writesStackTop}, +fun map (T {args, convention, inline, kind, prototype, return, symbolScope, target}, f) = T {args = Vector.map (args, f), - bytesNeeded = bytesNeeded, convention = convention, - ensuresBytesFree = ensuresBytesFree, - mayGC = mayGC, - maySwitchThreads = maySwitchThreads, - modifiesFrontier = modifiesFrontier, + inline = inline, + kind = kind, prototype = prototype, - readsStackTop = readsStackTop, return = f return, symbolScope = symbolScope, - target = target, - writesStackTop = writesStackTop} + target = target} -fun isOk (T {ensuresBytesFree, mayGC, maySwitchThreads, modifiesFrontier, - readsStackTop, return, writesStackTop, ...}, +fun isOk (T {kind, return, ...}, {isUnit}): bool = - (if maySwitchThreads - then mayGC andalso isUnit return + (if Kind.maySwitchThreadsFrom kind + then Kind.maySwitchThreadsTo kind else true) - andalso (if ensuresBytesFree orelse maySwitchThreads - then mayGC + andalso (if Kind.maySwitchThreadsTo kind + then (Kind.mayGC kind + andalso isUnit return) + else true) + andalso (if Option.isSome (Kind.ensuresBytesFree kind) + then Kind.mayGC kind + else true) + andalso (if Kind.mayGC kind + then (Kind.modifiesFrontier kind + andalso Kind.readsStackTop kind + andalso Kind.writesStackTop kind) else true) - andalso (if mayGC - then (modifiesFrontier - andalso readsStackTop andalso writesStackTop) + andalso (if Kind.writesStackTop kind + then Kind.readsStackTop kind else true) - andalso (not writesStackTop orelse readsStackTop ) fun vanilla {args, name, prototype, return} = T {args = args, - bytesNeeded = NONE, convention = Convention.Cdecl, - ensuresBytesFree = false, - mayGC = false, - maySwitchThreads = false, - modifiesFrontier = false, + inline = false, + kind = Kind.Impure, prototype = prototype, - readsStackTop = false, return = return, symbolScope = SymbolScope.Private, - target = Direct name, - writesStackTop = false} + target = Direct name} -fun cPrototype (T {convention, prototype = (args, return), symbolScope, target, - ...}) = +fun cPrototype (T {convention, inline, prototype = (args, return), symbolScope, target, ...}) = let val convention = if convention <> Convention.Cdecl @@ -177,19 +285,20 @@ SymbolScope.External => "EXTERNAL " | SymbolScope.Private => "PRIVATE " | SymbolScope.Public => "PUBLIC " + val inline = if inline then "inline " else "" val name = case target of Direct name => name | Indirect => Error.bug "CFunction.cPrototype: Indirect" - val c = Counter.new 0 + val c = Counter.generator 0 fun arg t = - concat [CType.toString t, " x", Int.toString (Counter.next c)] + concat [CType.toString t, " x", Int.toString (c ())] val return = case return of NONE => "void" | SOME t => CType.toString t in - concat [symbolScope, return, convention, name, + concat [symbolScope, inline, return, convention, name, " (", concat (List.separate (Vector.toListMap (args, arg), ", ")), ")"] diff -Nru mlton-20130715/mlton/atoms/c-function.sig mlton-20210117+dfsg/mlton/atoms/c-function.sig --- mlton-20130715/mlton/atoms/c-function.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/c-function.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,15 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2015,2019 Matthew Fluet. * Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature C_FUNCTION_STRUCTS = sig structure CType: C_TYPE + structure SymbolScope: C_SYMBOL_SCOPE end signature C_FUNCTION = @@ -23,12 +24,53 @@ val toString: t -> string end - structure SymbolScope: + structure Kind: sig - datatype t = External | Private | Public + datatype t = + Impure + | Pure + | Runtime of {(* bytesNeeded = SOME i means that the i'th + * argument to the function is a word that + * specifies the number of bytes that must be + * free in order for the C function to succeed. + * Limit check insertion is responsible for + * making sure that the bytesNeeded is available. + *) + bytesNeeded: int option, + (* ensuresBytesFree = SOME i means that the + * i'th argument to the function is a word + * that specifies a number of bytes that + * must be free when the C function (which + * must have mayGC = true) returns. + * Limit check insertion is responsible for + * setting the ensuresBytesFree argument to + * cover the allocation(s) in the return + * block(s). + *) + ensuresBytesFree: int option, + mayGC: bool, + maySwitchThreadsFrom: bool, + maySwitchThreadsTo: bool, + modifiesFrontier: bool, + readsStackTop: bool, + writesStackTop: bool} + + val impure: t + val pure: t + val reentrant: t + val runtimeDefault: t val layout: t -> Layout.t val toString: t -> string + + val bytesNeeded: t -> int option + val ensuresBytesFree: t -> int option + val mayGC: t -> bool + val maySwitchThreadsFrom: t -> bool + val maySwitchThreadsTo: t -> bool + val modifiesFrontier: t -> bool + val readsStackTop: t -> bool + val writesStackTop: t -> bool end structure Target: @@ -40,34 +82,22 @@ end datatype 'a t = T of {args: 'a vector, - (* bytesNeeded = SOME i means that the i'th - * argument to the function is a word that - * specifies the number of bytes that must be - * free in order for the C function to succeed. - * Limit check insertion is responsible for - * making sure that the bytesNeeded is available. - *) - bytesNeeded: int option, convention: Convention.t, - ensuresBytesFree: bool, - mayGC: bool, - maySwitchThreads: bool, - modifiesFrontier: bool, + inline: bool, + kind: Kind.t, prototype: CType.t vector * CType.t option, - readsStackTop: bool, return: 'a, symbolScope: SymbolScope.t, (* target = Indirect means that the 0'th * argument to the function is a word - * that specifies the target. + * that specifies the target. *) - target: Target.t, - writesStackTop: bool} + target: Target.t} val args: 'a t -> 'a vector val bytesNeeded: 'a t -> int option val convention: 'a t -> Convention.t - val ensuresBytesFree: 'a t -> bool + val ensuresBytesFree: 'a t -> int option val equals: 'a t * 'a t -> bool val cPointerType: 'a t -> string val cPrototype: 'a t -> string @@ -75,8 +105,10 @@ val layout: 'a t * ('a -> Layout.t) -> Layout.t val map: 'a t * ('a -> 'b) -> 'b t val mayGC: 'a t -> bool - val maySwitchThreads: 'a t -> bool + val maySwitchThreadsFrom: 'a t -> bool + val maySwitchThreadsTo: 'a t -> bool val modifiesFrontier: 'a t -> bool + val parse: 'a Parse.t -> 'a t Parse.t val prototype: 'a t -> CType.t vector * CType.t option val readsStackTop: 'a t -> bool val return: 'a t -> 'a diff -Nru mlton-20130715/mlton/atoms/char-size.fun mlton-20210117+dfsg/mlton/atoms/char-size.fun --- mlton-20130715/mlton/atoms/char-size.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/char-size.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,49 @@ +(* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor CharSize (S: CHAR_SIZE_STRUCTS): CHAR_SIZE = +struct + +open S + +datatype t = C8 | C16 | C32 + +val all = [C8, C16, C32] + +fun bits s = + Bits.fromInt + (case s of + C8 => 8 + | C16 => 16 + | C32 => 32) + +val equals = op = + +fun fromBits b = + case Bits.toInt b of + 8 => C8 + | 16 => C16 + | 32 => C32 + | _ => Error.bug "CharSize.frombits" + +val memoize = + fn f => + let + val c8 = f C8 + val c16 = f C16 + val c32 = f C32 + in + fn C8 => c8 + | C16 => c16 + | C32 => c32 + end + +val cardinality = memoize (fn s => IntInf.pow (2, Bits.toInt (bits s))) + +fun isInRange (s, i) = 0 <= i andalso i < cardinality s + +end diff -Nru mlton-20130715/mlton/atoms/char-size.sig mlton-20210117+dfsg/mlton/atoms/char-size.sig --- mlton-20130715/mlton/atoms/char-size.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/char-size.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,24 @@ +(* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature CHAR_SIZE_STRUCTS = + sig + end + +signature CHAR_SIZE = + sig + include CHAR_SIZE_STRUCTS + + datatype t = C8 | C16 | C32 + + val all: t list + val bits: t -> Bits.t + val equals: t * t -> bool + val fromBits: Bits.t -> t + val isInRange: t * IntInf.t -> bool + val memoize: (t -> 'a) -> t -> 'a + end diff -Nru mlton-20130715/mlton/atoms/con-.fun mlton-20210117+dfsg/mlton/atoms/con-.fun --- mlton-20130715/mlton/atoms/con-.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/con-.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -26,7 +27,7 @@ align (List.map (all, fn c => seq [layout c, str " size is ", - Int.layout (MLton.size c), + IntInf.layout (MLton.size c), str " plist length is ", Int.layout (PropertyList.length (plist c))])) end diff -Nru mlton-20130715/mlton/atoms/con-.sig mlton-20210117+dfsg/mlton/atoms/con-.sig --- mlton-20130715/mlton/atoms/con-.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/con-.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/atoms/const.fun mlton-20210117+dfsg/mlton/atoms/const.fun --- mlton-20130715/mlton/atoms/const.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/const.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2014,2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -11,65 +12,133 @@ open S -structure ConstType = ConstType (struct - structure RealSize = RealX.RealSize - structure WordSize = WordX.WordSize - end) - -structure SmallIntInf = +structure IntInfRep = struct structure WordSize = WordX.WordSize - - fun toWord (i: IntInf.t): WordX.t option = + datatype t = Big of WordXVector.t | Small of WordX.t + fun fromIntInf (i: IntInf.t) : t = let - val ws = WordSize.smallIntInfWord () - val ws' = WordSize.fromBits (Bits.- (WordSize.bits ws, Bits.one)) + val sws = WordSize.smallIntInfWord () + val sws' = WordSize.fromBits (Bits.- (WordSize.bits sws, Bits.one)) in - if WordSize.isInRange (ws', i, {signed = true}) - then SOME (WordX.orb (WordX.one ws, - WordX.lshift (WordX.fromIntInf (i, ws), - WordX.one ws))) - else NONE + if WordSize.isInRange (sws', i, {signed = true}) + then Small (WordX.orb (WordX.one sws, + WordX.lshift (WordX.fromIntInf (i, sws), WordX.one sws))) + else let + val bws = WordSize.bigIntInfWord () + val bbws = Bits.toWord (WordSize.bits bws) + val mask = IntInf.- (WordSize.cardinality bws, IntInf.one) + fun loop (i, acc) = + if IntInf.isZero i + then Big (WordXVector.fromListRev ({elementSize = bws}, acc)) + else let + val quot = IntInf.~>> (i, bbws) + val rem = IntInf.andb (i, mask) + in + loop (quot, (WordX.fromIntInf (rem, bws)) :: acc) + end + in + loop (if IntInf.>= (i, IntInf.zero) + then (i, [WordX.zero bws]) + else (IntInf.~ i, [WordX.one bws])) + end + end + fun smallToIntInf (w: WordX.t): IntInf.t option = + let + val sws = WordSize.smallIntInfWord () + val one = WordX.one sws + in + if WordSize.equals (WordX.size w, sws) + andalso WordX.isOne (WordX.andb (w, one)) + then SOME (WordX.toIntInfX (WordX.rshift (w, one, {signed = true}))) + else NONE + end + fun bigToIntInf (v: WordXVector.t): IntInf.t option = + let + val bws = WordSize.bigIntInfWord () + val bbws = Bits.toWord (WordSize.bits bws) + in + if WordSize.equals (WordXVector.elementSize v, bws) + andalso WordXVector.length v >= 2 + then let + val v0 = WordXVector.sub (v, 0) + fun mag () = + WordXVector.foldFrom + (v, 1, IntInf.zero, fn (w, i) => + IntInf.andb (IntInf.<< (i, bbws), WordX.toIntInf w)) + in + if WordX.isZero v0 + then SOME (mag ()) + else if WordX.isOne v0 + then SOME (IntInf.~ (mag ())) + else NONE + end + else NONE end - - val isSmall = isSome o toWord - - fun fromWord (w: WordX.t): IntInf.t = - WordX.toIntInfX (WordX.rshift (w, WordX.one (WordX.size w), {signed = true})) end datatype t = - IntInf of IntInf.t + CSymbol of CSymbol.t + | IntInf of IntInf.t | Null | Real of RealX.t | Word of WordX.t | WordVector of WordXVector.t +val csymbol = CSymbol val intInf = IntInf val null = Null val real = Real val word = Word val wordVector = WordVector -val string = wordVector o WordXVector.fromString - local - open Layout - fun wrap (pre, post, s) = seq [str pre, String.layout s, str post] + fun make (s, deOpt : t -> 'a option) = + let + fun de (t: t): 'a = + case deOpt t of + SOME z => z + | NONE => Error.bug ("Const.de" ^ s) + val is: t -> bool = isSome o deOpt + in + (deOpt, de, is) + end in - val layout = - fn IntInf i => IntInf.layout i - | Null => str "NULL" - | Real r => RealX.layout r - | Word w => WordX.layout w - | WordVector v => wrap ("\"", "\"", WordXVector.toString v) + val (deWordOpt,deWord,_) = make ("Word", fn Word ws => SOME ws | _ => NONE) end +val string = wordVector o WordXVector.fromString + +fun layout c = + case c of + CSymbol s => Layout.seq [Layout.str "CSymbol ", CSymbol.layout s] + | IntInf i => Layout.seq [IntInf.layout i, Layout.str ":ii"] + | Null => Layout.str "NULL" + | Real r => RealX.layout (r, {suffix = true}) + | Word w => WordX.layout (w, {suffix = true}) + | WordVector v => WordXVector.layout v + val toString = Layout.toString o layout +val parse = + let + open Parse + infix 3 <* *> + infixr 4 <$> <$ + in + any + [CSymbol <$> (kw "CSymbol" *> CSymbol.parse), + IntInf <$> (fromScan (Function.curry IntInf.scan StringCvt.DEC) <* str ":ii"), + Null <$ kw "NULL", + Real <$> RealX.parse, + Word <$> WordX.parse, + WordVector <$> WordXVector.parse] + end + fun hash (c: t): word = case c of - IntInf i => IntInf.hash i + CSymbol s => CSymbol.hash s + | IntInf i => IntInf.hash i | Null => 0wx0 | Real r => RealX.hash r | Word w => WordX.hash w @@ -77,7 +146,8 @@ fun equals (c, c') = case (c, c') of - (IntInf i, IntInf i') => IntInf.equals (i, i') + (CSymbol s, CSymbol s') => CSymbol.equals (s, s') + | (IntInf i, IntInf i') => IntInf.equals (i, i') | (Null, Null) => true | (Real r, Real r') => RealX.equals (r, r') | (Word w, Word w') => WordX.equals (w, w') @@ -86,7 +156,4 @@ val equals = Trace.trace2 ("Const.equals", layout, layout, Bool.layout) equals -val lookup: ({default: string option, name: string} * ConstType.t -> t) ref = - ref (fn _ => Error.bug "Const.lookup: not set") - end diff -Nru mlton-20130715/mlton/atoms/const.sig mlton-20210117+dfsg/mlton/atoms/const.sig --- mlton-20130715/mlton/atoms/const.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/const.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,15 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2014,2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature CONST_STRUCTS = sig + structure CSymbol: C_SYMBOL structure RealX: REAL_X structure WordX: WORD_X structure WordXVector: WORD_X_VECTOR @@ -19,34 +20,31 @@ sig include CONST_STRUCTS - structure ConstType: CONST_TYPE - sharing ConstType.RealSize = RealX.RealSize - sharing ConstType.WordSize = WordX.WordSize - - structure SmallIntInf: + structure IntInfRep: sig - val fromWord: WordX.t -> IntInf.t - val isSmall: IntInf.t -> bool - val toWord: IntInf.t -> WordX.t option + datatype t = Big of WordXVector.t | Small of WordX.t + val bigToIntInf: WordXVector.t -> IntInf.t option + val fromIntInf: IntInf.t -> t + val smallToIntInf: WordX.t -> IntInf.t option end datatype t = - IntInf of IntInf.t + CSymbol of CSymbol.t + | IntInf of IntInf.t | Null | Real of RealX.t | Word of WordX.t | WordVector of WordXVector.t + val csymbol: CSymbol.t -> t + val deWord: t -> WordX.t + val deWordOpt: t -> WordX.t option val equals: t * t -> bool val intInf: IntInf.t -> t val hash: t -> word val layout: t -> Layout.t - (* lookup is for constants defined by _const, _build_const, and - * _command_line_const. It is set in main/compile.fun. - *) - val lookup: ({default: string option, - name: string} * ConstType.t -> t) ref val null: t + val parse: t Parse.t val real: RealX.t -> t val string: string -> t val toString: t -> string diff -Nru mlton-20130715/mlton/atoms/const-type.fun mlton-20210117+dfsg/mlton/atoms/const-type.fun --- mlton-20130715/mlton/atoms/const-type.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/const-type.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor ConstType (S: CONST_TYPE_STRUCTS): CONST_TYPE = -struct - -open S - -datatype t = Bool | Real of RealSize.t | String | Word of WordSize.t - -end diff -Nru mlton-20130715/mlton/atoms/const-type.sig mlton-20210117+dfsg/mlton/atoms/const-type.sig --- mlton-20130715/mlton/atoms/const-type.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/const-type.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature CONST_TYPE_STRUCTS = - sig - structure RealSize: REAL_SIZE - structure WordSize: WORD_SIZE - end - -signature CONST_TYPE = - sig - include CONST_TYPE_STRUCTS - - datatype t = Bool | Real of RealSize.t | String | Word of WordSize.t - end diff -Nru mlton-20130715/mlton/atoms/c-symbol.fun mlton-20210117+dfsg/mlton/atoms/c-symbol.fun --- mlton-20130715/mlton/atoms/c-symbol.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/c-symbol.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,49 @@ +(* Copyright (C) 2019 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor CSymbol (S: C_SYMBOL_STRUCTS): C_SYMBOL = +struct + +open S + +datatype t = T of {cty: CType.t option, + name: string, + symbolScope: CSymbolScope.t} + +fun equals (T {cty = cty1, name = name1, symbolScope = symbolScope1}, + T {cty = cty2, name = name2, symbolScope = symbolScope2}) = + Option.equals (cty1, cty2, CType.equals) + andalso String.equals (name1, name2) + andalso CSymbolScope.equals (symbolScope1, symbolScope2) + +fun hash (T {name, ...}) = String.hash name + +fun layout (T {cty, name, symbolScope}) = + Layout.record [("name", Layout.str name), + ("cty", Option.layout CType.layout cty), + ("symbolScope", CSymbolScope.layout symbolScope)] + +val toString = Layout.toString o layout + +val parse = + let + open Parse + infix 1 >>= + infix 3 *> + infixr 4 <$$> + val name = + spaces *> + (fn (c, cs) => String.implode (c::cs)) <$$> + (nextSat (fn c => Char.isAlpha c orelse c = #"_"), + many (nextSat (fn c => Char.isAlphaNum c orelse c = #"_"))) + in + cbrack (ffield ("cty", option CType.parse) >>= (fn cty => + nfield ("name", name) >>= (fn name => + nfield ("symbolScope", CSymbolScope.parse) >>= (fn symbolScope => + pure (T {cty = cty, name = name, symbolScope = symbolScope}))))) + end + +end diff -Nru mlton-20130715/mlton/atoms/c-symbol-scope.fun mlton-20210117+dfsg/mlton/atoms/c-symbol-scope.fun --- mlton-20130715/mlton/atoms/c-symbol-scope.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/c-symbol-scope.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ +(* Copyright (C) 2019 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor CSymbolScope (S: C_SYMBOL_SCOPE_STRUCTS): C_SYMBOL_SCOPE = +struct + +open S + +datatype t = + External + | Private + | Public + +val equals = + fn (External, External) => true + | (Private, Private) => true + | (Public, Public) => true + | _ => false + +val all = [External, Private, Public] + +val toString = + fn External => "external" + | Private => "private" + | Public => "public" + +val layout = Layout.str o toString + +val parse = + let + open Parse + infix 3 *> + in + any (List.map (all, fn ss => kw (toString ss) *> pure ss)) + end + +end diff -Nru mlton-20130715/mlton/atoms/c-symbol-scope.sig mlton-20210117+dfsg/mlton/atoms/c-symbol-scope.sig --- mlton-20130715/mlton/atoms/c-symbol-scope.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/c-symbol-scope.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,21 @@ +(* Copyright (C) 2019 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature C_SYMBOL_SCOPE_STRUCTS = + sig + end + +signature C_SYMBOL_SCOPE = + sig + include C_SYMBOL_SCOPE_STRUCTS + + datatype t = External | Private | Public + + val equals: t * t -> bool + val layout: t -> Layout.t + val toString: t -> string + val parse: t Parse.t + end diff -Nru mlton-20130715/mlton/atoms/c-symbol.sig mlton-20210117+dfsg/mlton/atoms/c-symbol.sig --- mlton-20130715/mlton/atoms/c-symbol.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/c-symbol.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,26 @@ +(* Copyright (C) 2019 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature C_SYMBOL_STRUCTS = + sig + structure CSymbolScope: C_SYMBOL_SCOPE + structure CType: C_TYPE + end + +signature C_SYMBOL = + sig + include C_SYMBOL_STRUCTS + + datatype t = T of {cty: CType.t option, + name: string, + symbolScope: CSymbolScope.t} + + val equals: t * t -> bool + val hash: t -> word + val layout: t -> Layout.t + val toString: t -> string + val parse: t Parse.t + end diff -Nru mlton-20130715/mlton/atoms/c-type.fun mlton-20210117+dfsg/mlton/atoms/c-type.fun --- mlton-20130715/mlton/atoms/c-type.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/c-type.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2014,2019-2020 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -81,6 +82,17 @@ val layout = Layout.str o toString +val parse = + let + open Parse + infix 3 *> + fun kw s = + spaces *> str s *> + failing (nextSat (fn c => Char.isAlphaNum c orelse c = #"_")) + in + any (List.map (all, fn t => kw (toString t) *> pure t)) + end + fun size (t: t): Bytes.t = case t of CPointer => Bits.toBytes (Control.Target.Size.cpointer ()) @@ -147,7 +159,7 @@ val seqIndex = Promise.lazy (fn () => word' (Control.Target.Size.seqIndex (), - {signed = true})) + {signed = false})) val objptrHeader = Promise.lazy @@ -155,6 +167,7 @@ {signed = false})) val bool = word (WordSize.bool, {signed = true}) +val compareRes = word (WordSize.compareRes, {signed = true}) val shiftArg = word (WordSize.shiftArg, {signed = false}) end diff -Nru mlton-20130715/mlton/atoms/c-type.sig mlton-20210117+dfsg/mlton/atoms/c-type.sig --- mlton-20130715/mlton/atoms/c-type.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/c-type.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2014,2019 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -35,6 +36,7 @@ val cpointer: t val cint: unit -> t val csize: unit -> t + val compareRes: t val equals: t * t -> bool val objptrHeader: unit -> t val memo: (t -> 'a) -> t -> 'a @@ -42,6 +44,7 @@ val name: t -> string val layout: t -> Layout.t val objptr: t + val parse: t Parse.t val real: RealSize.t -> t val seqIndex: unit -> t val shiftArg: t diff -Nru mlton-20130715/mlton/atoms/ffi.fun mlton-20210117+dfsg/mlton/atoms/ffi.fun --- mlton-20130715/mlton/atoms/ffi.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/ffi.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 2004-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -14,20 +15,13 @@ structure SymbolScope = CFunction.SymbolScope local - val scopes: (Word.t * String.t * SymbolScope.t) HashSet.t = - HashSet.new {hash = #1} + val scopes: (String.t, SymbolScope.t) HashTable.t = + HashTable.new {hash = String.hash, equals = String.equals} in fun checkScope {name, symbolScope} = - let - val hash = String.hash name - in - (#3 o HashSet.lookupOrInsert) - (scopes, hash, - fn (hash', name', _) => - hash = hash' andalso name = name', - fn () => - (hash, name, symbolScope)) - end + HashTable.lookupOrInsert + (scopes, name, + fn () => symbolScope) end val exports: {args: CType.t vector, @@ -40,14 +34,13 @@ ty: CType.t, symbolScope: SymbolScope.t} list ref = ref [] -fun numExports () = List.length (!exports) - local - val exportCounter = Counter.new 0 + val nextId = Counter.generator 0 in fun addExport {args, convention, name, res, symbolScope} = let - val id = Counter.next exportCounter + val id = nextId () + val _ = Int.inc Control.numExports val _ = List.push (exports, {args = args, convention = convention, id = id, @@ -66,90 +59,158 @@ val headers: string list ref = ref [] fun declareExports {print} = - let - val _ = print "PRIVATE Pointer MLton_FFI_opArgsResPtr;\n" - in - List.foreach - (!symbols, fn {name, ty, symbolScope} => - let - val (headerSymbolScope, symbolScope) = - case symbolScope of - SymbolScope.External => - Error.bug "Ffi.declareExports.symbols: External" - | SymbolScope.Private => ("MLLIB_PRIVATE", "PRIVATE") - | SymbolScope.Public => ("MLLIB_PUBLIC", "PUBLIC") - val headerDecl = - concat [headerSymbolScope, - "(extern ", - CType.toString ty, " ", - name, ";)"] - val decl = - concat [symbolScope, " ", - CType.toString ty, " ", - name] - in - List.push (headers, headerDecl); - print (decl ^ ";\n") - end); - List.foreach - (!exports, fn {args, convention, id, name, res, symbolScope} => - let - val args = - Vector.mapi - (args, fn (i,t) => - let - val x = concat ["x", Int.toString i] - val t = CType.toString t - in - (concat [t, " ", x], - concat ["\tlocalOpArgsRes[", Int.toString (i + 1), "] = ", - "(Pointer)(&", x, ");\n"]) - end) - val (headerSymbolScope, symbolScope) = - case symbolScope of - SymbolScope.External => - Error.bug "Ffi.declareExports.exports: External" - | SymbolScope.Private => ("MLLIB_PRIVATE","PRIVATE") - | SymbolScope.Public => ("MLLIB_PUBLIC","PUBLIC") - val prototype = - concat [case res of - NONE => "void" - | SOME t => CType.toString t, - if convention <> Convention.Cdecl - then concat [" __attribute__ ((", - Convention.toString convention, - ")) "] - else " ", - name, " (", - concat (List.separate (Vector.toListMap (args, #1), ", ")), - ")"] - val n = - 1 + (Vector.length args) - + (case res of NONE => 0 | SOME _ => 1) - in - List.push (headers, concat [headerSymbolScope, "(", prototype, ";)"]) - ; print (concat [symbolScope, " ", prototype, " {\n"]) - ; print (concat ["\tPointer localOpArgsRes[", Int.toString n,"];\n"]) - ; print (concat ["\tMLton_FFI_opArgsResPtr = (Pointer)(localOpArgsRes);\n"]) - ; print (concat ["\tInt32 localOp = ", Int.toString id, ";\n", - "\tlocalOpArgsRes[0] = (Pointer)(&localOp);\n"]) - ; Vector.foreach (args, fn (_, set) => print set) - ; (case res of - NONE => () - | SOME t => - print (concat ["\t", CType.toString t, " localRes;\n", - "\tlocalOpArgsRes[", Int.toString (Vector.length args + 1), "] = ", - "(Pointer)(&localRes);\n"])) - ; print ("\tMLton_callFromC ();\n") - ; (case res of - NONE => () - | SOME _ => print "\treturn localRes;\n") - ; print "}\n" - end) - end - -fun declareHeaders {print} = - (declareExports {print = fn _ => ()} - ; List.foreach (!headers, fn s => (print s; print "\n"))) + (List.foreach + (!symbols, fn {name, ty, symbolScope} => + let + val (headerSymbolScope, symbolScope) = + case symbolScope of + SymbolScope.External => + Error.bug "Ffi.declareExports.symbols: External" + | SymbolScope.Private => ("MLLIB_PRIVATE", "PRIVATE") + | SymbolScope.Public => ("MLLIB_PUBLIC", "PUBLIC") + val headerDecl = + concat [headerSymbolScope, + "(extern ", + CType.toString ty, " ", + name, ";)"] + val decl = + concat [symbolScope, " ", + CType.toString ty, " ", + name] + in + List.push (headers, headerDecl); + print (decl ^ ";\n") + end); + if List.isEmpty (!exports) + then () + else print "MLtonCallFromC ()\n"; + List.foreach + (!exports, fn {args, convention, id, name, res, symbolScope} => + let + val args = + Vector.mapi + (args, fn (i,t) => + let + val x = concat ["x", Int.toString i] + val t = CType.toString t + in + (concat [t, " ", x], + concat ["\tlocalOpArgsRes[", Int.toString (i + 1), "] = ", + "(CPointer)(&", x, ");\n"]) + end) + val (headerSymbolScope, symbolScope) = + case symbolScope of + SymbolScope.External => + Error.bug "Ffi.declareExports.exports: External" + | SymbolScope.Private => ("MLLIB_PRIVATE","PRIVATE") + | SymbolScope.Public => ("MLLIB_PUBLIC","PUBLIC") + val prototype = + concat [case res of + NONE => "void" + | SOME t => CType.toString t, + if convention <> Convention.Cdecl + then concat [" __attribute__ ((", + Convention.toString convention, + ")) "] + else " ", + name, " (", + concat (List.separate (Vector.toListMap (args, #1), ", ")), + ")"] + val n = + 1 + (Vector.length args) + + (case res of NONE => 0 | SOME _ => 1) + in + List.push (headers, concat [headerSymbolScope, "(", prototype, ";)"]) + ; print (concat [symbolScope, " ", prototype, " {\n"]) + ; print (concat ["\tCPointer localOpArgsRes[", Int.toString n,"];\n"]) + ; print (concat ["\tInt32 localOp = ", Int.toString id, ";\n", + "\tlocalOpArgsRes[0] = (CPointer)(&localOp);\n"]) + ; Vector.foreach (args, fn (_, set) => print set) + ; (case res of + NONE => () + | SOME t => + print (concat ["\t", CType.toString t, " localRes;\n", + "\tlocalOpArgsRes[", Int.toString (Vector.length args + 1), "] = ", + "(CPointer)(&localRes);\n"])) + ; print ("\tMLton_callFromC (localOpArgsRes);\n") + ; (case res of + NONE => () + | SOME _ => print "\treturn localRes;\n") + ; print "}\n" + end)) + +fun exportHeader f = + File.withOut + (f, fn out => + let + fun print s = Out.output (out, s) + val libname = !Control.libname + val libcap = CharVector.map Char.toUpper libname + val _ = print ("#ifndef __" ^ libcap ^ "_ML_H__\n") + val _ = print ("#define __" ^ libcap ^ "_ML_H__\n") + val _ = print "\n" + val _ = + File.outputContents + (concat [!Control.libDir, "/include/ml-types.h"], out) + val _ = print "\n" + val _ = + File.outputContents + (concat [!Control.libDir, "/include/export.h"], out) + val _ = print "\n" + (* How do programs link against this library by default *) + val defaultLinkage = + case !Control.format of + Control.Archive => "STATIC_LINK" + | Control.Executable => "PART_OF" + | Control.LibArchive => "NO_DEFAULT_LINK" + | Control.Library => "DYNAMIC_LINK" + val _ = + print ("#if !defined(PART_OF_" ^ libcap ^ ") && \\\n\ + \ !defined(STATIC_LINK_" ^ libcap ^ ") && \\\n\ + \ !defined(DYNAMIC_LINK_" ^ libcap ^ ")\n") + val _ = + print ("#define " ^ defaultLinkage ^ "_" ^ libcap ^ "\n") + val _ = print "#endif\n" + val _ = print "\n" + val _ = print ("#if defined(PART_OF_" ^ libcap ^ ")\n") + val _ = print "#define MLLIB_PRIVATE(x) PRIVATE x\n" + val _ = print "#define MLLIB_PUBLIC(x) PUBLIC x\n" + val _ = print ("#elif defined(STATIC_LINK_" ^ libcap ^ ")\n") + val _ = print "#define MLLIB_PRIVATE(x)\n" + val _ = print "#define MLLIB_PUBLIC(x) PUBLIC x\n" + val _ = print ("#elif defined(DYNAMIC_LINK_" ^ libcap ^ ")\n") + val _ = print "#define MLLIB_PRIVATE(x)\n" + val _ = print "#define MLLIB_PUBLIC(x) EXTERNAL x\n" + val _ = print "#else\n" + val _ = print ("#error Must specify linkage for " ^ libname ^ "\n") + val _ = print "#define MLLIB_PRIVATE(x)\n" + val _ = print "#define MLLIB_PUBLIC(x)\n" + val _ = print "#endif\n" + val _ = print "\n" + val _ = print "#ifdef __cplusplus\n" + val _ = print "extern \"C\" {\n" + val _ = print "#endif\n" + val _ = print "\n" + val _ = + if !Control.format = Control.Executable then () else + (print ("MLLIB_PUBLIC(void " ^ libname ^ "_open(int argc, const char** argv);)\n") + ;print ("MLLIB_PUBLIC(void " ^ libname ^ "_close();)\n")) + val _ = declareExports {print = fn _ => ()} + val _ = List.foreach (!headers, fn s => (print s; print "\n")) + val _ = print "\n" + val _ = print "#undef MLLIB_PRIVATE\n" + val _ = print "#undef MLLIB_PUBLIC\n" + val _ = print "\n" + val _ = print "#ifdef __cplusplus\n" + val _ = print "}\n" + val _ = print "#endif\n" + val _ = print "\n" + val _ = print ("#endif /* __" ^ libcap ^ "_ML_H__ */\n") + in + () + end) + +val exportHeader = + Control.trace (Control.Detail, "exportHeader") exportHeader end diff -Nru mlton-20130715/mlton/atoms/ffi.sig mlton-20210117+dfsg/mlton/atoms/ffi.sig --- mlton-20130715/mlton/atoms/ffi.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/ffi.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -28,6 +28,5 @@ symbolScope: CFunction.SymbolScope.t} -> CFunction.SymbolScope.t val declareExports: {print: string -> unit} -> unit - val declareHeaders: {print: string -> unit} -> unit - val numExports: unit -> int + val exportHeader: File.t -> unit end diff -Nru mlton-20130715/mlton/atoms/field.fun mlton-20210117+dfsg/mlton/atoms/field.fun --- mlton-20130715/mlton/atoms/field.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/field.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,35 @@ +(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor Field (S: FIELD_STRUCTS): FIELD = +struct + +open S + +datatype t = + Int of int + | Symbol of Symbol.t + +val equals = + fn (Int n, Int n') => Int.equals (n, n') + | (Symbol s, Symbol s') => Symbol.equals (s, s') + | _ => false + +val toString = + fn Int n => Int.toString (n + 1) + | Symbol s => Symbol.toString s + +val layout = Layout.str o toString + +val op <= = + fn (Int n, Int n') => Int.<= (n, n') + | (Symbol s, Symbol s') => Symbol.<= (s, s') + | (Symbol _, Int _) => false + | (Int _, Symbol _) => true + +end diff -Nru mlton-20130715/mlton/atoms/field.sig mlton-20210117+dfsg/mlton/atoms/field.sig --- mlton-20130715/mlton/atoms/field.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/field.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,27 @@ +(* Copyright (C) 2009 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature FIELD_STRUCTS = + sig + structure Symbol: SYMBOL + end + +signature FIELD = + sig + include FIELD_STRUCTS + + datatype t = + Int of int + | Symbol of Symbol.t + + val <= : t * t -> bool (* ordering used for sorting *) + val equals: t * t -> bool + val layout: t -> Layout.t + val toString: t -> string + end diff -Nru mlton-20130715/mlton/atoms/func.sig mlton-20210117+dfsg/mlton/atoms/func.sig --- mlton-20130715/mlton/atoms/func.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/func.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/atoms/generic-scheme.fun mlton-20210117+dfsg/mlton/atoms/generic-scheme.fun --- mlton-20130715/mlton/atoms/generic-scheme.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/generic-scheme.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -27,7 +28,7 @@ let open Layout val ty = Type.layout ty in - if 0 = Vector.length tyvars + if Vector.isEmpty tyvars then ty else align [seq [str "Forall ", @@ -43,4 +44,8 @@ *) else Type.substitute (ty, Vector.zip (tyvars, args)) +val apply = + Trace.trace ("GenericScheme.apply", Layout.tuple2 (layout, Vector.layout Type.layout), Type.layout) + apply + end diff -Nru mlton-20130715/mlton/atoms/generic-scheme.sig mlton-20210117+dfsg/mlton/atoms/generic-scheme.sig --- mlton-20130715/mlton/atoms/generic-scheme.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/generic-scheme.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/atoms/handler.fun mlton-20210117+dfsg/mlton/atoms/handler.fun --- mlton-20130715/mlton/atoms/handler.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/handler.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,61 @@ +(* Copyright (C) 2009,2017,2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor Handler (S: HANDLER_STRUCTS): HANDLER = + struct + open S + + datatype t = + Caller + | Dead + | Handle of Label.t + + fun layout (h: t): Layout.t = + let + open Layout + in + case h of + Caller => str "Caller" + | Dead => str "Dead" + | Handle l => seq [str "Handle ", Label.layout l] + end + + val equals = + fn (Caller, Caller) => true + | (Dead, Dead) => true + | (Handle l, Handle l') => Label.equals (l, l') + | _ => false + + fun foldLabel (h: t, a: 'a, f: Label.t * 'a -> 'a): 'a = + case h of + Caller => a + | Dead => a + | Handle l => f (l, a) + + fun foreachLabel (h, f) = foldLabel (h, (), f o #1) + + fun map (h, f) = + case h of + Caller => Caller + | Dead => Dead + | Handle l => Handle (f l) + + local + val newHash = Random.word + val caller = newHash () + val dead = newHash () + val handlee = newHash () + in + fun hash (h: t): word = + case h of + Caller => caller + | Dead => dead + | Handle l => Hash.combine (handlee, Label.hash l) + end + end diff -Nru mlton-20130715/mlton/atoms/handler.sig mlton-20210117+dfsg/mlton/atoms/handler.sig --- mlton-20130715/mlton/atoms/handler.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/handler.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,30 @@ +(* Copyright (C) 2009,2017,2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature HANDLER_STRUCTS = + sig + structure Label: LABEL + end + +signature HANDLER = + sig + include HANDLER_STRUCTS + + datatype t = + Caller + | Dead + | Handle of Label.t + + val equals: t * t -> bool + val foldLabel: t * 'a * (Label.t * 'a -> 'a) -> 'a + val foreachLabel: t * (Label.t -> unit) -> unit + val hash: t -> word + val layout: t -> Layout.t + val map: t * (Label.t -> Label.t) -> t + end diff -Nru mlton-20130715/mlton/atoms/hash-type.fun mlton-20210117+dfsg/mlton/atoms/hash-type.fun --- mlton-20130715/mlton/atoms/hash-type.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/hash-type.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -81,12 +82,16 @@ fun equals (t, t'): bool = PropertyList.equals (plist t, plist t') - fun layout (ty: t): Layout.t = - #1 (hom {con = Tycon.layoutApp, + fun layoutPretty (ty: t): Layout.t = + #1 (hom {con = fn (c, ts) => (Tycon.layoutAppPretty + (c, ts, {layoutPretty = Tycon.layout})), ty = ty, - var = fn a => (Tyvar.layout a, - ({isChar = false}, - Tycon.BindingStrength.unit))}) + var = fn a => LayoutPretty.simple (Tyvar.layout a)}) + + fun layout (ty: t): Layout.t = + hom {con = Tycon.layoutApp, + ty = ty, + var = Tyvar.layout} local val same: tree * tree -> bool = @@ -111,24 +116,18 @@ let open Layout in align [seq [str "num types in hash table = ", Int.layout (HashSet.size table)], - Control.sizeMessage ("types hash table", table)] + Control.sizeMessage ("types hash table", lookup)] end end fun var a = lookup (Tyvar.hash a, Var a) - local - val generator: Word.t = 0wx5555 - in - fun con (c, ts) = - lookup (Vector.fold (ts, Tycon.hash c, fn (t, w) => - Word.xorb (w * generator, hash t)), - Con (c, ts)) - val con = Trace.trace2 ("HashType.Type.con", - Tycon.layout, - Vector.layout layout, - layout) con - end + fun con (c, ts) = + lookup (Hash.combine (Tycon.hash c, Hash.vectorMap (ts, hash)), Con (c, ts)) + val con = Trace.trace2 ("HashType.Type.con", + Tycon.layout, + Vector.layout layout, + layout) con end structure Ops = TypeOps (structure Tycon = Tycon open Type) @@ -141,7 +140,8 @@ datatype z = datatype Const.t in case c of - IntInf _ => intInf + CSymbol _ => cpointer + | IntInf _ => intInf | Null => cpointer | Real r => real (RealX.size r) | Word w => word (WordX.size w) @@ -150,7 +150,7 @@ fun isUnit t = case dest t of - Con (c, ts) => 0 = Vector.length ts andalso Tycon.equals (c, Tycon.tuple) + Con (c, ts) => Vector.isEmpty ts andalso Tycon.equals (c, Tycon.tuple) | _ => false fun substitute (ty, v) = diff -Nru mlton-20130715/mlton/atoms/hash-type.sig mlton-20210117+dfsg/mlton/atoms/hash-type.sig --- mlton-20130715/mlton/atoms/hash-type.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/hash-type.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -42,6 +42,7 @@ con: Tycon.t * 'a vector -> 'a} -> 'a val isUnit: t -> bool val layout: t -> Layout.t + val layoutPretty: t -> Layout.t val makeHom: {var: t * Tyvar.t -> 'a, con: t * Tycon.t * 'a vector -> 'a} diff -Nru mlton-20130715/mlton/atoms/id.fun mlton-20210117+dfsg/mlton/atoms/id.fun --- mlton-20130715/mlton/atoms/id.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/id.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -11,22 +12,17 @@ val unique: string -> string end = struct - val set: {counter: Counter.t, - hash: word, - original: string} HashSet.t = - HashSet.new {hash = #hash} + val counters: (string, Counter.t) HashTable.t = + HashTable.new {hash = String.hash, equals = String.equals} - fun unique (s: string): string = + fun unique (original: string): string = let - val hash = String.hash s - val {counter, ...} = - HashSet.lookupOrInsert - (set, hash, fn {original, ...} => s = original, - fn () => {counter = Counter.new 0, - hash = hash, - original = s}) + val c = + HashTable.lookupOrInsert + (counters, original, + fn () => Counter.new 0) in - concat [s, "_", Int.toString (Counter.next counter)] + concat [original, "_", Int.toString (Counter.next c)] end end @@ -41,6 +37,7 @@ originalName: string, printName: string option ref, plist: Plist.t} +type id = t local fun make f (T r) = f r @@ -48,7 +45,6 @@ val hash = make #hash val originalName = make #originalName val plist = make #plist - val printName = make #printName end fun isAlphaNum (s: string): bool = @@ -59,8 +55,6 @@ then () else printName := NONE -fun setPrintName (x, s) = printName x := SOME s - val printNameAlphaNumeric: bool ref = ref false fun toString (T {originalName, printName, ...}) = @@ -79,11 +73,11 @@ | #"$" => "Dollar" | #"%" => "Percent" | #"&" => "Ampersand" - | #"'" => "P" + | #"'" => "Prime" | #"*" => "Star" | #"+" => "Plus" | #"-" => "Minus" - | #"." => "D" + | #"." => "Dot" | #"/" => "Divide" | #":" => "Colon" | #"<" => "Lt" @@ -119,6 +113,66 @@ fun newString s = make (s, NONE) end +local + open Parse + infix 1 <|> >>= + infix 3 *> + infixr 4 <$> <$$> <$$$> + + val cache = + HashTable.new {hash = String.hash, + equals = String.equals} + fun insert id = + (ignore o HashTable.lookupOrInsert) + (cache, toString id, fn () => id) + + val alphanum = + named ("alphanum", nextSat (fn c => Char.isAlphaNum c orelse c = #"_" orelse c = #"'")) + val sym = + named ("sym", nextSat (fn c => String.contains ("!%&$#+-/:<=>?@\\~`^|*", c))) + + val alphanumId = + (op ::) <$$> (named ("alpha", nextSat Char.isAlpha), many alphanum) + val symId = + (fn (c,cs,suf) => (c::(cs@suf))) <$$$> + (sym, many sym, + (op ::) <$$> (char #"_", many (nextSat Char.isDigit)) + <|> pure []) + val tyvarId = + (op ::) <$$> (nextSat (fn c => c = #"'"), many alphanum) + + fun parseGen (alts: (string * 'a Parse.t) vector, fromId: id -> 'a Parse.t) : 'a Parse.t = + mlSpaces *> + (String.implode <$> + (if String.sub (noname, 0) = #"'" + then tyvarId + else alphanumId <|> symId)) >>= (fn printName => + let + fun make () = + let + fun loop (i, b) = + if Char.isDigit (String.sub (printName, i)) + then loop (i - 1, true) + else if b andalso String.sub (printName, i) = #"_" + then newString (String.substring (printName, 0, i)) + else fromString printName + in + loop (String.size printName - 1, false) + end + in + case Vector.peek (alts, fn (s, _) => String.equals (printName, s)) of + SOME (_, res) => res + | NONE => fromId (HashTable.lookupOrInsert (cache, printName, make)) + end) +in + fun parseAs (alts, fromId) = parseGen (Vector.map (alts, fn (s, r) => (s, pure r)), pure o fromId) + fun parseExcept ss = parseGen (Vector.map (ss, fn s => (s, fail "fail")), pure) + val parse = parseExcept (Vector.new0 ()) + fun parseReset {prims} = + (HashTable.removeAll (cache, fn _ => true); + Vector.foreach (prims, insert)) +end + val new = newString o originalName fun newNoname () = newString noname diff -Nru mlton-20130715/mlton/atoms/id.sig mlton-20210117+dfsg/mlton/atoms/id.sig --- mlton-20130715/mlton/atoms/id.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/id.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017,2019 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -29,8 +29,11 @@ val newNoname: unit -> t (* prefix is noname *) val newString: string -> t (* new id with printName not set *) val originalName: t -> string (* raw destructor *) + val parse: t Parse.t + val parseAs: (string * 'a) vector * (t -> 'a) -> 'a Parse.t + val parseExcept: string vector -> t Parse.t + val parseReset: {prims: t vector} -> unit val plist: t -> PropertyList.t val printNameAlphaNumeric: bool ref - val setPrintName: t * string -> unit val toString: t -> string end diff -Nru mlton-20130715/mlton/atoms/int-size.fun mlton-20210117+dfsg/mlton/atoms/int-size.fun --- mlton-20130715/mlton/atoms/int-size.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/int-size.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,55 @@ +(* Copyright (C) 2009 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor IntSize (S: INT_SIZE_STRUCTS): INT_SIZE = +struct + +open S + +datatype t = T of {bits: Bits.t} + +fun bits (T {bits, ...}) = bits + +fun compare (s, s') = Bits.compare (bits s, bits s') + +val {equals, ...} = Relation.compare compare + +fun isValidSize (i: int) = + (1 <= i andalso i <= 32) orelse i = 64 + +val sizes: Bits.t list = + Vector.toListKeepAllMap + (Vector.tabulate (65, fn i => + if isValidSize i + then SOME (Bits.fromInt i) + else NONE), + fn i => i) + +fun make i = T {bits = i} + +val allVector = Vector.tabulate (65, fn i => + if isValidSize i + then SOME (make (Bits.fromInt i)) + else NONE) + +fun fromBits (b: Bits.t): t = + case Vector.sub (allVector, Bits.toInt b) handle Subscript => NONE of + NONE => Error.bug (concat ["IntSize.fromBits: strange int size: ", Bits.toString b]) + | SOME s => s + +val all = List.map (sizes, fromBits) + +val memoize: (t -> 'a) -> t -> 'a = + fn f => + let + val v = Vector.map (allVector, fn opt => Option.map (opt, f)) + in + fn T {bits = b, ...} => valOf (Vector.sub (v, Bits.toInt b)) + end + +end diff -Nru mlton-20130715/mlton/atoms/int-size.sig mlton-20210117+dfsg/mlton/atoms/int-size.sig --- mlton-20130715/mlton/atoms/int-size.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/int-size.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,23 @@ +(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature INT_SIZE_STRUCTS = + sig + end + +signature INT_SIZE = + sig + include INT_SIZE_STRUCTS + + type t + + val all: t list + val bits: t -> Bits.t + val equals: t * t -> bool + val fromBits : Bits.t -> t + val memoize: (t -> 'a) -> t -> 'a + end diff -Nru mlton-20130715/mlton/atoms/label.sig mlton-20210117+dfsg/mlton/atoms/label.sig --- mlton-20130715/mlton/atoms/label.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/label.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/atoms/layout-pretty.sml mlton-20210117+dfsg/mlton/atoms/layout-pretty.sml --- mlton-20130715/mlton/atoms/layout-pretty.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/layout-pretty.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,29 @@ +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +structure BindingStrength = + struct + datatype t = + Arrow + | Tuple + | Unit + end + +structure LayoutPretty = + struct + type t = Layout.t * ({isChar: bool} * BindingStrength.t) + + fun simple (l: Layout.t): t = + (l, ({isChar = false}, BindingStrength.Unit)) + + val dontCare: t = simple (Layout.str "_") + fun bracket ((l, ({isChar}, _)): t): t = + (Layout.seq [Layout.str "[", l, Layout.str "]"], + ({isChar = isChar}, BindingStrength.Unit)) + end diff -Nru mlton-20130715/mlton/atoms/prim-cons.fun mlton-20210117+dfsg/mlton/atoms/prim-cons.fun --- mlton-20130715/mlton/atoms/prim-cons.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/prim-cons.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,26 @@ +(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor PrimCons (S: PRIM_CONS_STRUCTS): PRIM_CONS = +struct + +open S + +type con = t + +val cons = fromString "::" +val falsee = fromString "false" +val nill = fromString "nil" +val reff = fromString "ref" +val truee = fromString "true" + +(* exception constructors *) +val bind = fromString "Bind" +val match = fromString "Match" + +end diff -Nru mlton-20130715/mlton/atoms/prim-cons.sig mlton-20210117+dfsg/mlton/atoms/prim-cons.sig --- mlton-20130715/mlton/atoms/prim-cons.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/prim-cons.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,27 @@ +(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature PRIM_CONS_STRUCTS = + sig + type t + val equals: t * t -> bool + val fromString: string -> t + end + +signature PRIM_CONS = + sig + type con + + val bind: con + val cons: con + val falsee: con + val match: con + val nill: con + val reff: con + val truee: con + end diff -Nru mlton-20130715/mlton/atoms/prim.fun mlton-20210117+dfsg/mlton/atoms/prim.fun --- mlton-20130715/mlton/atoms/prim.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/prim.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009-2010 Matthew Fluet. +(* Copyright (C) 2009-2010,2014,2016-2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -34,81 +34,83 @@ end datatype 'a t = - Array_array (* backend *) - | Array_array0Const (* constant propagation *) - | Array_length (* ssa to rssa *) - | Array_sub (* backend *) - | Array_toVector (* backend *) - | Array_update (* backend *) + Array_alloc of {raw: bool} (* to rssa (as runtime C fn) *) + | Array_array (* to ssa2 *) + | Array_copyArray (* to rssa (as runtime C fn) *) + | Array_copyVector (* to rssa (as runtime C fn) *) + | Array_length (* to rssa *) + | Array_sub (* to ssa2 *) + | Array_toArray (* to rssa *) + | Array_toVector (* to rssa *) + | Array_uninit (* to rssa *) + | Array_uninitIsNop (* to rssa *) + | Array_update (* to ssa2 *) + | CFunction of 'a CFunction.t (* to rssa *) | CPointer_add (* codegen *) | CPointer_diff (* codegen *) | CPointer_equal (* codegen *) | CPointer_fromWord (* codegen *) - | CPointer_getCPointer (* ssa to rssa *) - | CPointer_getObjptr (* ssa to rssa *) - | CPointer_getReal of RealSize.t (* ssa to rssa *) - | CPointer_getWord of WordSize.t (* ssa to rssa *) + | CPointer_getCPointer (* to rssa *) + | CPointer_getObjptr (* to rssa *) + | CPointer_getReal of RealSize.t (* to rssa *) + | CPointer_getWord of WordSize.t (* to rssa *) | CPointer_lt (* codegen *) - | CPointer_setCPointer (* ssa to rssa *) - | CPointer_setObjptr (* ssa to rssa *) - | CPointer_setReal of RealSize.t (* ssa to rssa *) - | CPointer_setWord of WordSize.t (* ssa to rssa *) + | CPointer_setCPointer (* to rssa *) + | CPointer_setObjptr (* to rssa *) + | CPointer_setReal of RealSize.t (* to rssa *) + | CPointer_setWord of WordSize.t (* to rssa *) | CPointer_sub (* codegen *) | CPointer_toWord (* codegen *) | Exn_extra (* implement exceptions *) | Exn_name (* implement exceptions *) | Exn_setExtendExtra (* implement exceptions *) - | FFI of 'a CFunction.t (* ssa to rssa *) - | FFI_Symbol of {name: string, - cty: CType.t option, - symbolScope: CFunction.SymbolScope.t } (* codegen *) - | GC_collect (* ssa to rssa *) - | IntInf_add (* ssa to rssa *) - | IntInf_andb (* ssa to rssa *) - | IntInf_arshift (* ssa to rssa *) - | IntInf_compare (* ssa to rssa *) - | IntInf_equal (* ssa to rssa *) - | IntInf_gcd (* ssa to rssa *) - | IntInf_lshift (* ssa to rssa *) - | IntInf_mul (* ssa to rssa *) - | IntInf_neg (* ssa to rssa *) - | IntInf_notb (* ssa to rssa *) - | IntInf_orb (* ssa to rssa *) - | IntInf_quot (* ssa to rssa *) - | IntInf_rem (* ssa to rssa *) - | IntInf_sub (* ssa to rssa *) - | IntInf_toString (* ssa to rssa *) - | IntInf_toVector (* ssa to rssa *) - | IntInf_toWord (* ssa to rssa *) - | IntInf_xorb (* ssa to rssa *) - | MLton_bogus (* ssa to rssa *) + | GC_collect (* to rssa (as runtime C fn) *) + | GC_state (* to rssa (as operand) *) + | IntInf_add (* to rssa (as runtime C fn) *) + | IntInf_andb (* to rssa (as runtime C fn) *) + | IntInf_arshift (* to rssa (as runtime C fn) *) + | IntInf_compare (* to rssa (as runtime C fn) *) + | IntInf_gcd (* to rssa (as runtime C fn) *) + | IntInf_lshift (* to rssa (as runtime C fn) *) + | IntInf_mul (* to rssa (as runtime C fn) *) + | IntInf_neg (* to rssa (as runtime C fn) *) + | IntInf_notb (* to rssa (as runtime C fn) *) + | IntInf_orb (* to rssa (as runtime C fn) *) + | IntInf_quot (* to rssa (as runtime C fn) *) + | IntInf_rem (* to rssa (as runtime C fn) *) + | IntInf_sub (* to rssa (as runtime C fn) *) + | IntInf_toString (* to rssa (as runtime C fn) *) + | IntInf_toVector (* to rssa *) + | IntInf_toWord (* to rssa *) + | IntInf_xorb (* to rssa (as runtime C fn) *) (* of type unit -> 'a. * Makes a bogus value of any type. *) - | MLton_bug (* ssa to rssa *) + | MLton_bogus (* to rssa *) + | MLton_bug (* to rssa (as impure C fn) *) | MLton_deserialize (* unused *) - | MLton_eq (* codegen *) + | MLton_eq (* to rssa (as Word_equal) *) | MLton_equal (* polymorphic equality *) - | MLton_halt (* ssa to rssa *) + | MLton_halt (* to rssa (as runtime C fn) *) | MLton_hash (* polymorphic hash *) (* MLton_handlesSignals and MLton_installSignalHandler work together * to inform the optimizer and basis library whether or not the * program uses signal handlers. * * MLton_installSignalHandler is called by MLton.Signal.setHandler, - * and is effectively a noop, but is left in the program until the - * end of the backend, so that the optimizer can test whether or - * not the program installs signal handlers. + * and is effectively a noop, but is left in the program until, so + * that the optimizer can test whether or not the program installs + * signal handlers. * * MLton_handlesSignals is translated by closure conversion into * a boolean, and is true iff MLton_installsSignalHandler is called. *) | MLton_handlesSignals (* closure conversion *) - | MLton_installSignalHandler (* backend *) + | MLton_installSignalHandler (* to rssa (as nop) *) | MLton_serialize (* unused *) - | MLton_share - | MLton_size (* ssa to rssa *) - | MLton_touch (* backend *) + | MLton_share (* to rssa (as nop or runtime C fn) *) + | MLton_size (* to rssa (as runtime C fn) *) + | MLton_touch (* to rssa (as nop) or backend (as nop) *) | Real_Math_acos of RealSize.t (* codegen *) | Real_Math_asin of RealSize.t (* codegen *) | Real_Math_atan of RealSize.t (* codegen *) @@ -131,38 +133,39 @@ | Real_mul of RealSize.t (* codegen *) | Real_muladd of RealSize.t (* codegen *) | Real_mulsub of RealSize.t (* codegen *) - | Real_neg of RealSize.t (* codegen *) + | Real_neg of RealSize.t (* codegen *) | Real_qequal of RealSize.t (* codegen *) | Real_rndToReal of RealSize.t * RealSize.t (* codegen *) | Real_rndToWord of RealSize.t * WordSize.t * {signed: bool} (* codegen *) | Real_round of RealSize.t (* codegen *) | Real_sub of RealSize.t (* codegen *) - | Ref_assign (* backend *) - | Ref_deref (* backend *) - | Ref_ref (* backend *) + | Ref_assign (* to ssa2 *) + | Ref_deref (* to ssa2 *) + | Ref_ref (* to ssa2 *) | String_toWord8Vector (* defunctorize *) - | Thread_atomicBegin (* backend *) - | Thread_atomicEnd (* backend *) - | Thread_atomicState (* backend *) - | Thread_copy (* ssa to rssa *) - | Thread_copyCurrent (* ssa to rssa *) + | Thread_atomicBegin (* to rssa *) + | Thread_atomicEnd (* to rssa *) + | Thread_atomicState (* to rssa *) + | Thread_copy (* to rssa (as runtime C fn) *) + | Thread_copyCurrent (* to rssa (as runtime C fn) *) | Thread_returnToC (* codegen *) (* switchTo has to be a _prim because we have to know that it * enters the runtime -- because everything must be saved * on the stack. *) - | Thread_switchTo (* ssa to rssa *) + | Thread_switchTo (* to rssa (as runtime C fn) *) | TopLevel_getHandler (* implement exceptions *) | TopLevel_getSuffix (* implement suffix *) | TopLevel_setHandler (* implement exceptions *) | TopLevel_setSuffix (* implement suffix *) - | Vector_length (* ssa to rssa *) - | Vector_sub (* ssa to rssa *) - | Weak_canGet (* ssa to rssa *) - | Weak_get (* ssa to rssa *) - | Weak_new (* ssa to rssa *) + | Vector_length (* to ssa2 *) + | Vector_sub (* to ssa2 *) + | Vector_vector (* to ssa2 *) + | Weak_canGet (* to rssa (as runtime C fn) *) + | Weak_get (* to rssa (as runtime C fn) *) + | Weak_new (* to rssa (as runtime C fn) *) | Word_add of WordSize.t (* codegen *) - | Word_addCheck of WordSize.t * {signed: bool} (* codegen *) + | Word_addCheckP of WordSize.t * {signed: bool} (* codegen *) | Word_andb of WordSize.t (* codegen *) | Word_castToReal of WordSize.t * RealSize.t (* codegen *) | Word_equal of WordSize.t (* codegen *) @@ -170,9 +173,9 @@ | Word_lshift of WordSize.t (* codegen *) | Word_lt of WordSize.t * {signed: bool} (* codegen *) | Word_mul of WordSize.t * {signed: bool} (* codegen *) - | Word_mulCheck of WordSize.t * {signed: bool} (* codegen *) + | Word_mulCheckP of WordSize.t * {signed: bool} (* codegen *) | Word_neg of WordSize.t (* codegen *) - | Word_negCheck of WordSize.t (* codegen *) + | Word_negCheckP of WordSize.t * {signed: bool} (* codegen *) | Word_notb of WordSize.t (* codegen *) | Word_orb of WordSize.t (* codegen *) | Word_quot of WordSize.t * {signed: bool} (* codegen *) @@ -182,17 +185,15 @@ | Word_ror of WordSize.t (* codegen *) | Word_rshift of WordSize.t * {signed: bool} (* codegen *) | Word_sub of WordSize.t (* codegen *) - | Word_subCheck of WordSize.t * {signed: bool} (* codegen *) - | Word_toIntInf (* ssa to rssa *) + | Word_subCheckP of WordSize.t * {signed: bool} (* codegen *) + | Word_toIntInf (* to rssa *) | Word_xorb of WordSize.t (* codegen *) - | WordVector_toIntInf (* ssa to rssa *) - | Word8Array_subWord of WordSize.t (* ssa to rssa *) - | Word8Array_updateWord of WordSize.t (* ssa to rssa *) - | Word8Vector_subWord of WordSize.t (* ssa to rssa *) + | WordVector_toIntInf (* to rssa *) + | WordArray_subWord of {seqSize:WordSize.t, eleSize:WordSize.t} (* to rssa *) + | WordArray_updateWord of {seqSize: WordSize.t, eleSize: WordSize.t} (* to rssa *) + | WordVector_subWord of {seqSize: WordSize.t, eleSize: WordSize.t} (* to rssa *) | Word8Vector_toString (* defunctorize *) - | World_save (* ssa to rssa *) - -fun name p = p + | World_save (* to rssa (as runtime C fn) *) (* The values of these strings are important since they are referred to * in the basis library code. See basis-library/misc/primitive.sml. @@ -204,8 +205,8 @@ fun sign {signed} = if signed then "WordS" else "WordU" fun word (s: WordSize.t, str: string): string = concat ["Word", WordSize.toString s, "_", str] - fun word8Seq (seq: string, oper: string, s: WordSize.t): string = - concat ["Word8", seq, "_", oper, "Word", WordSize.toString s] + fun wordSeq (seqSize: WordSize.t, seqKind: string, oper: string, eleSize: WordSize.t): string = + concat ["Word", WordSize.toString seqSize, seqKind, "_", oper, "Word", WordSize.toString eleSize] fun wordS (s: WordSize.t, sg, str: string): string = concat [sign sg, WordSize.toString s, "_", str] val realC = ("Real", RealSize.toString) @@ -220,12 +221,18 @@ fun cpointerSet (ty, s) = concat ["CPointer_set", ty, s] in case n of - Array_array => "Array_array" - | Array_array0Const => "Array_array0Const" + Array_alloc {raw} => if raw then "Array_allocRaw" else "Array_alloc" + | Array_array => "Array_array" + | Array_copyArray => "Array_copyArray" + | Array_copyVector => "Array_copyVector" | Array_length => "Array_length" | Array_sub => "Array_sub" + | Array_toArray => "Array_toArray" | Array_toVector => "Array_toVector" + | Array_uninit => "Array_uninit" + | Array_uninitIsNop => "Array_uninitIsNop" | Array_update => "Array_update" + | CFunction f => (CFunction.Target.toString o CFunction.target) f | CPointer_add => "CPointer_add" | CPointer_diff => "CPointer_diff" | CPointer_equal => "CPointer_equal" @@ -244,14 +251,12 @@ | Exn_extra => "Exn_extra" | Exn_name => "Exn_name" | Exn_setExtendExtra => "Exn_setExtendExtra" - | FFI f => (CFunction.Target.toString o CFunction.target) f - | FFI_Symbol {name, ...} => name | GC_collect => "GC_collect" + | GC_state => "GC_state" | IntInf_add => "IntInf_add" | IntInf_andb => "IntInf_andb" | IntInf_arshift => "IntInf_arshift" | IntInf_compare => "IntInf_compare" - | IntInf_equal => "IntInf_equal" | IntInf_gcd => "IntInf_gcd" | IntInf_lshift => "IntInf_lshift" | IntInf_mul => "IntInf_mul" @@ -323,16 +328,20 @@ | TopLevel_setSuffix => "TopLevel_setSuffix" | Vector_length => "Vector_length" | Vector_sub => "Vector_sub" + | Vector_vector => "Vector_vector" | Weak_canGet => "Weak_canGet" | Weak_get => "Weak_get" | Weak_new => "Weak_new" - | Word8Array_subWord w => word8Seq ("Array", "sub", w) - | Word8Array_updateWord w => word8Seq ("Array", "update", w) - | Word8Vector_subWord w => word8Seq ("Vector", "sub", w) + | WordArray_subWord {seqSize, eleSize} => + wordSeq (seqSize, "Array", "sub", eleSize) + | WordArray_updateWord {seqSize, eleSize} => + wordSeq (seqSize, "Array", "update", eleSize) + | WordVector_subWord {seqSize, eleSize} => + wordSeq (seqSize, "Vector", "sub", eleSize) | Word8Vector_toString => "Word8Vector_toString" | WordVector_toIntInf => "WordVector_toIntInf" | Word_add s => word (s, "add") - | Word_addCheck (s, sg) => wordS (s, sg, "addCheck") + | Word_addCheckP (s, sg) => wordS (s, sg, "addCheckP") | Word_andb s => word (s, "andb") | Word_castToReal (s1, s2) => cast (wordC, realC, s1, s2) | Word_equal s => word (s, "equal") @@ -340,9 +349,9 @@ | Word_lshift s => word (s, "lshift") | Word_lt (s, sg) => wordS (s, sg, "lt") | Word_mul (s, sg) => wordS (s, sg, "mul") - | Word_mulCheck (s, sg) => wordS (s, sg, "mulCheck") + | Word_mulCheckP (s, sg) => wordS (s, sg, "mulCheckP") | Word_neg s => word (s, "neg") - | Word_negCheck s => word (s, "negCheck") + | Word_negCheckP (s, sg) => wordS (s, sg, "negCheckP") | Word_notb s => word (s, "notb") | Word_orb s => word (s, "orb") | Word_quot (s, sg) => wordS (s, sg, "quot") @@ -352,7 +361,7 @@ | Word_ror s => word (s, "ror") | Word_rshift (s, sg) => wordS (s, sg, "rshift") | Word_sub s => word (s, "sub") - | Word_subCheck (s, sg) => wordS (s, sg, "subCheck") + | Word_subCheckP (s, sg) => wordS (s, sg, "subCheckP") | Word_toIntInf => "Word_toIntInf" | Word_xorb s => word (s, "xorb") | World_save => "World_save" @@ -360,13 +369,24 @@ fun layout p = Layout.str (toString p) +fun layoutFull (p, layoutX) = + case p of + CFunction f => Layout.seq [Layout.str "CFunction ", CFunction.layout (f, layoutX)] + | p => layout p + val equals: 'a t * 'a t -> bool = - fn (Array_array, Array_array) => true - | (Array_array0Const, Array_array0Const) => true + fn (Array_alloc {raw = r}, Array_alloc {raw = r'}) => Bool.equals (r, r') + | (Array_array, Array_array) => true + | (Array_copyArray, Array_copyArray) => true + | (Array_copyVector, Array_copyVector) => true | (Array_length, Array_length) => true | (Array_sub, Array_sub) => true + | (Array_toArray, Array_toArray) => true | (Array_toVector, Array_toVector) => true + | (Array_uninit, Array_uninit) => true + | (Array_uninitIsNop, Array_uninitIsNop) => true | (Array_update, Array_update) => true + | (CFunction f, CFunction f') => CFunction.equals (f, f') | (CPointer_add, CPointer_add) => true | (CPointer_diff, CPointer_diff) => true | (CPointer_equal, CPointer_equal) => true @@ -385,14 +405,12 @@ | (Exn_extra, Exn_extra) => true | (Exn_name, Exn_name) => true | (Exn_setExtendExtra, Exn_setExtendExtra) => true - | (FFI f, FFI f') => CFunction.equals (f, f') - | (FFI_Symbol {name = n, ...}, FFI_Symbol {name = n', ...}) => n = n' | (GC_collect, GC_collect) => true + | (GC_state, GC_state) => true | (IntInf_add, IntInf_add) => true | (IntInf_andb, IntInf_andb) => true | (IntInf_arshift, IntInf_arshift) => true | (IntInf_compare, IntInf_compare) => true - | (IntInf_equal, IntInf_equal) => true | (IntInf_gcd, IntInf_gcd) => true | (IntInf_lshift, IntInf_lshift) => true | (IntInf_mul, IntInf_mul) => true @@ -470,12 +488,13 @@ | (TopLevel_setSuffix, TopLevel_setSuffix) => true | (Vector_length, Vector_length) => true | (Vector_sub, Vector_sub) => true + | (Vector_vector, Vector_vector) => true | (Weak_canGet, Weak_canGet) => true | (Weak_get, Weak_get) => true | (Weak_new, Weak_new) => true | (Word_add s, Word_add s') => WordSize.equals (s, s') - | (Word_addCheck (s, sg), Word_addCheck (s', sg')) => - WordSize.equals (s, s') andalso sg = sg' + | (Word_addCheckP (s, sg), Word_addCheckP (s', sg')) => + WordSize.equals (s, s') andalso sg = sg' | (Word_andb s, Word_andb s') => WordSize.equals (s, s') | (Word_castToReal (s1, s2), Word_castToReal (s1', s2')) => WordSize.equals (s1, s1') @@ -490,10 +509,11 @@ WordSize.equals (s, s') andalso sg = sg' | (Word_mul (s, sg), Word_mul (s', sg')) => WordSize.equals (s, s') andalso sg = sg' - | (Word_mulCheck (s, sg), Word_mulCheck (s', sg')) => + | (Word_mulCheckP (s, sg), Word_mulCheckP (s', sg')) => WordSize.equals (s, s') andalso sg = sg' | (Word_neg s, Word_neg s') => WordSize.equals (s, s') - | (Word_negCheck s, Word_negCheck s') => WordSize.equals (s, s') + | (Word_negCheckP (s, sg), Word_negCheckP (s', sg')) => + WordSize.equals (s, s') andalso sg = sg' | (Word_notb s, Word_notb s') => WordSize.equals (s, s') | (Word_orb s, Word_orb s') => WordSize.equals (s, s') | (Word_quot (s, sg), Word_quot (s', sg')) => @@ -509,14 +529,23 @@ | (Word_rshift (s, sg), Word_rshift (s', sg')) => WordSize.equals (s, s') andalso sg = sg' | (Word_sub s, Word_sub s') => WordSize.equals (s, s') - | (Word_subCheck (s, sg), Word_subCheck (s', sg')) => - WordSize.equals (s, s') andalso sg = sg' + | (Word_subCheckP (s, sg), Word_subCheckP (s', sg')) => + WordSize.equals (s, s') andalso sg = sg' | (Word_toIntInf, Word_toIntInf) => true | (Word_xorb s, Word_xorb s') => WordSize.equals (s, s') | (WordVector_toIntInf, WordVector_toIntInf) => true - | (Word8Array_subWord s, Word8Array_subWord s') => WordSize.equals (s, s') - | (Word8Array_updateWord s, Word8Array_updateWord s') => WordSize.equals (s, s') - | (Word8Vector_subWord s, Word8Vector_subWord s') => WordSize.equals (s, s') + | (WordArray_subWord {seqSize = seqSize, eleSize = eleSize}, + WordArray_subWord {seqSize = seqSize', eleSize = eleSize'}) => + WordSize.equals (seqSize, seqSize') + andalso WordSize.equals (eleSize, eleSize') + | (WordArray_updateWord {seqSize = seqSize, eleSize = eleSize}, + WordArray_updateWord {seqSize = seqSize', eleSize = eleSize'}) => + WordSize.equals (seqSize, seqSize') + andalso WordSize.equals (eleSize, eleSize') + | (WordVector_subWord {seqSize = seqSize, eleSize = eleSize}, + WordVector_subWord {seqSize = seqSize', eleSize = eleSize'}) => + WordSize.equals (seqSize, seqSize') + andalso WordSize.equals (eleSize, eleSize') | (Word8Vector_toString, Word8Vector_toString) => true | (World_save, World_save) => true | _ => false @@ -524,12 +553,18 @@ val map: 'a t * ('a -> 'b) -> 'b t = fn (p, f) => case p of - Array_array => Array_array - | Array_array0Const => Array_array0Const + Array_alloc {raw} => Array_alloc {raw = raw} + | Array_array => Array_array + | Array_copyArray => Array_copyArray + | Array_copyVector => Array_copyVector | Array_length => Array_length | Array_sub => Array_sub + | Array_toArray => Array_toArray | Array_toVector => Array_toVector + | Array_uninit => Array_uninit + | Array_uninitIsNop => Array_uninitIsNop | Array_update => Array_update + | CFunction func => CFunction (CFunction.map (func, f)) | CPointer_add => CPointer_add | CPointer_diff => CPointer_diff | CPointer_equal => CPointer_equal @@ -548,15 +583,12 @@ | Exn_extra => Exn_extra | Exn_name => Exn_name | Exn_setExtendExtra => Exn_setExtendExtra - | FFI func => FFI (CFunction.map (func, f)) - | FFI_Symbol {name, cty, symbolScope} => - FFI_Symbol {name = name, cty = cty, symbolScope = symbolScope} | GC_collect => GC_collect + | GC_state => GC_state | IntInf_add => IntInf_add | IntInf_andb => IntInf_andb | IntInf_arshift => IntInf_arshift | IntInf_compare => IntInf_compare - | IntInf_equal => IntInf_equal | IntInf_gcd => IntInf_gcd | IntInf_lshift => IntInf_lshift | IntInf_mul => IntInf_mul @@ -628,11 +660,12 @@ | TopLevel_setSuffix => TopLevel_setSuffix | Vector_length => Vector_length | Vector_sub => Vector_sub + | Vector_vector => Vector_vector | Weak_canGet => Weak_canGet | Weak_get => Weak_get | Weak_new => Weak_new | Word_add z => Word_add z - | Word_addCheck z => Word_addCheck z + | Word_addCheckP z => Word_addCheckP z | Word_andb z => Word_andb z | Word_castToReal z => Word_castToReal z | Word_equal z => Word_equal z @@ -640,9 +673,9 @@ | Word_lshift z => Word_lshift z | Word_lt z => Word_lt z | Word_mul z => Word_mul z - | Word_mulCheck z => Word_mulCheck z + | Word_mulCheckP z => Word_mulCheckP z | Word_neg z => Word_neg z - | Word_negCheck z => Word_negCheck z + | Word_negCheckP z => Word_negCheckP z | Word_notb z => Word_notb z | Word_orb z => Word_orb z | Word_quot z => Word_quot z @@ -652,26 +685,18 @@ | Word_ror z => Word_ror z | Word_rshift z => Word_rshift z | Word_sub z => Word_sub z - | Word_subCheck z => Word_subCheck z + | Word_subCheckP z => Word_subCheckP z | Word_toIntInf => Word_toIntInf | Word_xorb z => Word_xorb z | WordVector_toIntInf => WordVector_toIntInf - | Word8Array_subWord z => Word8Array_subWord z - | Word8Array_updateWord z => Word8Array_updateWord z - | Word8Vector_subWord z => Word8Vector_subWord z + | WordArray_subWord z => WordArray_subWord z + | WordArray_updateWord z => WordArray_updateWord z + | WordVector_subWord z => WordVector_subWord z | Word8Vector_toString => Word8Vector_toString | World_save => World_save val cast: 'a t -> 'b t = fn p => map (p, fn _ => Error.bug "Prim.cast") -val array = Array_array -val arrayLength = Array_length -val assign = Ref_assign -val bogus = MLton_bogus -val bug = MLton_bug -val cpointerAdd = CPointer_add -val cpointerDiff = CPointer_diff -val cpointerEqual = CPointer_equal fun cpointerGet ctype = let datatype z = datatype CType.t in @@ -689,7 +714,6 @@ | Word32 => CPointer_getWord (WordSize.fromBits (Bits.fromInt 32)) | Word64 => CPointer_getWord (WordSize.fromBits (Bits.fromInt 64)) end -val cpointerLt = CPointer_lt fun cpointerSet ctype = let datatype z = datatype CType.t in @@ -707,79 +731,45 @@ | Word32 => CPointer_setWord (WordSize.fromBits (Bits.fromInt 32)) | Word64 => CPointer_setWord (WordSize.fromBits (Bits.fromInt 64)) end -val cpointerSub = CPointer_sub -val cpointerToWord = CPointer_toWord -val deref = Ref_deref -val eq = MLton_eq -val equal = MLton_equal -val ffi = FFI -val ffiSymbol = FFI_Symbol -val hash = MLton_hash -val intInfEqual = IntInf_equal -val intInfToVector = IntInf_toVector -val intInfToWord = IntInf_toWord -val intInfNeg = IntInf_neg -val intInfNotb = IntInf_notb -val realCastToWord = Real_castToWord -val reff = Ref_ref -val touch = MLton_touch -val vectorLength = Vector_length -val vectorSub = Vector_sub -val wordAdd = Word_add -val wordAddCheck = Word_addCheck -val wordAndb = Word_andb -val wordCastToReal = Word_castToReal -val wordEqual = Word_equal -val wordExtdToWord = Word_extdToWord -val wordLshift = Word_lshift -val wordLt = Word_lt -val wordMul = Word_mul -val wordNeg = Word_neg -val wordNegCheck = Word_negCheck -val wordNotb = Word_notb -val wordOrb = Word_orb -val wordQuot = Word_quot -val wordRshift = Word_rshift -val wordSub = Word_sub -val wordXorb = Word_xorb val isCommutative = - fn IntInf_equal => true - | MLton_eq => true + fn MLton_eq => true | MLton_equal => true | Real_add _ => true | Real_mul _ => true | Real_equal _ => true | Real_qequal _ => true | Word_add _ => true - | Word_addCheck _ => true + | Word_addCheckP _ => true | Word_andb _ => true | Word_equal _ => true | Word_mul _ => true - | Word_mulCheck _ => true + | Word_mulCheckP _ => true | Word_orb _ => true | Word_xorb _ => true | _ => false -val mayOverflow = - fn Word_addCheck _ => true - | Word_mulCheck _ => true - | Word_negCheck _ => true - | Word_subCheck _ => true - | _ => false - val kind: 'a t -> Kind.t = fn p => let datatype z = datatype Kind.t in case p of - Array_array => Moveable - | Array_array0Const => Moveable + Array_alloc _ => Moveable + | Array_array => Moveable + | Array_copyArray => SideEffect + | Array_copyVector => SideEffect | Array_length => Functional | Array_sub => DependsOnState + | Array_toArray => DependsOnState | Array_toVector => DependsOnState + | Array_uninit => SideEffect + | Array_uninitIsNop => Functional | Array_update => SideEffect + | CFunction (CFunction.T {kind, ...}) => (case kind of + CFunction.Kind.Impure => SideEffect + | CFunction.Kind.Pure => Functional + | CFunction.Kind.Runtime _ => SideEffect) | CPointer_add => Functional | CPointer_diff => Functional | CPointer_equal => Functional @@ -798,14 +788,12 @@ | Exn_extra => Functional | Exn_name => Functional | Exn_setExtendExtra => SideEffect - | FFI _ => Kind.SideEffect - | FFI_Symbol _ => Functional | GC_collect => SideEffect + | GC_state => DependsOnState | IntInf_add => Functional | IntInf_andb => Functional | IntInf_arshift => Functional | IntInf_compare => Functional - | IntInf_equal => Functional | IntInf_gcd => Functional | IntInf_lshift => Functional | IntInf_mul => Functional @@ -877,16 +865,17 @@ | TopLevel_setSuffix => SideEffect | Vector_length => Functional | Vector_sub => Functional + | Vector_vector => Functional | Weak_canGet => DependsOnState | Weak_get => DependsOnState | Weak_new => Moveable - | Word8Array_subWord _ => DependsOnState - | Word8Array_updateWord _ => SideEffect - | Word8Vector_subWord _ => Functional + | WordArray_subWord _ => DependsOnState + | WordArray_updateWord _ => SideEffect + | WordVector_subWord _ => Functional | Word8Vector_toString => Functional | WordVector_toIntInf => Functional | Word_add _ => Functional - | Word_addCheck _ => SideEffect + | Word_addCheckP _ => Functional | Word_andb _ => Functional | Word_castToReal _ => Functional | Word_equal _ => Functional @@ -894,9 +883,9 @@ | Word_lshift _ => Functional | Word_lt _ => Functional | Word_mul _ => Functional - | Word_mulCheck _ => SideEffect + | Word_mulCheckP _ => Functional | Word_neg _ => Functional - | Word_negCheck _ => SideEffect + | Word_negCheckP _ => Functional | Word_notb _ => Functional | Word_orb _ => Functional | Word_quot _ => Functional @@ -906,7 +895,7 @@ | Word_ror _ => Functional | Word_rshift _ => Functional | Word_sub _ => Functional - | Word_subCheck _ => SideEffect + | Word_subCheckP _ => Functional | Word_toIntInf => Functional | Word_xorb _ => Functional | World_save => SideEffect @@ -948,14 +937,15 @@ let val sg = {signed = signed} in - List.map ([Word_addCheck, + List.map ([Word_addCheckP, Word_lt, Word_mul, - Word_mulCheck, + Word_mulCheckP, + Word_negCheckP, Word_quot, Word_rem, Word_rshift, - Word_subCheck], + Word_subCheckP], fn p => p (s, sg)) end @@ -965,7 +955,6 @@ (Word_equal s), (Word_lshift s), (Word_neg s), - (Word_negCheck s), (Word_notb s), (Word_orb s), (Word_rol s), @@ -974,17 +963,19 @@ (Word_xorb s)] @ wordSigns (s, true) @ wordSigns (s, false) - fun word8Seqs (s: WordSize.t) = - [(Word8Array_subWord s), - (Word8Array_updateWord s), - (Word8Vector_subWord s)] in val all: unit t list = - [Array_array, - Array_array0Const, + [Array_alloc {raw = false}, + Array_alloc {raw = true}, + Array_array, + Array_copyArray, + Array_copyVector, Array_length, Array_sub, + Array_toArray, Array_toVector, + Array_uninit, + Array_uninitIsNop, Array_update, CPointer_add, CPointer_diff, @@ -1001,11 +992,11 @@ Exn_name, Exn_setExtendExtra, GC_collect, + GC_state, IntInf_add, IntInf_andb, IntInf_arshift, IntInf_compare, - IntInf_equal, IntInf_gcd, IntInf_lshift, IntInf_mul, @@ -1049,6 +1040,7 @@ TopLevel_setSuffix, Vector_length, Vector_sub, + Vector_vector, Weak_canGet, Weak_get, Weak_new, @@ -1060,7 +1052,10 @@ List.concatMap (WordSize.prims, words)] @ let val real = RealSize.all - val word = WordSize.all + val word = WordSize.prims + val wordNonPrim = + List.keepAll + (WordSize.all, fn s => not (List.contains (word, s, WordSize.equals))) fun coerces (name, sizes, sizes', ac) = List.fold (sizes, ac, fn (s, ac) => @@ -1074,15 +1069,28 @@ sizes, sizes', ac)) fun casts (name, sizes, ac) = List.fold (sizes, ac, fn (s, ac) => name s :: ac) + fun castsS (name, sizes, ac) = + List.fold + ([false, true], ac, fn (signed, ac) => + casts (fn s => name (s, {signed = signed}), + sizes, ac)) in casts (fn rs => Real_castToWord (rs, WordSize.fromBits (RealSize.bits rs)), real, coerces (Real_rndToReal, real, real, coercesS (Real_rndToWord, real, word, casts (fn rs => Word_castToReal (WordSize.fromBits (RealSize.bits rs), rs), real, coercesS (Word_extdToWord, word, word, - coercesS (Word_rndToReal, word, real, [])))))) + castsS (fn (s, signed) => Word_extdToWord (s, WordSize.roundUpToPrim s, signed), wordNonPrim, + castsS (fn (s, signed) => Word_extdToWord (WordSize.roundUpToPrim s, s, signed), wordNonPrim, + coercesS (Word_rndToReal, word, real, [])))))))) end - @ List.concatMap (WordSize.prims, word8Seqs) + @ List.concatMap + (WordSize.prims, fn seqSize => + List.concatMap + (WordSize.prims, fn eleSize => + List.map + ([WordArray_subWord, WordArray_updateWord, WordVector_subWord], fn p => + p {seqSize = seqSize, eleSize = eleSize}))) @ let fun doit (all, get, set) = List.concatMap (all, fn s => [get s, set s]) @@ -1093,31 +1101,43 @@ end local - val table: {hash: word, - prim: unit t, - string: string} HashSet.t = - HashSet.new {hash = #hash} + val table : (string, unit t) HashTable.t = + HashTable.new {hash = String.hash, equals = String.equals} val () = List.foreach (all, fn prim => let val string = toString prim - val hash = String.hash string - val _ = - HashSet.lookupOrInsert (table, hash, - fn _ => false, - fn () => {hash = hash, - prim = prim, - string = string}) in - () + (ignore o HashTable.lookupOrInsert) + (table, string, fn () => prim) end) in val fromString: string -> 'a t option = fn name => Option.map - (HashSet.peek - (table, String.hash name, fn {string, ...} => name = string), - fn {prim, ...} => cast prim) + (HashTable.peek (table, name), + cast) +end + +local + open Parse + infix 1 <|> >>= + infix 3 <*> <* *> + infixr 4 <$> <$$> <$$$> <$$$$> <$ <$?> + val name = + spaces *> + (fn (c, cs) => String.implode (c::cs)) <$$> + (nextSat (fn c => Char.isAlpha c orelse c = #"_"), + many (nextSat (fn c => Char.isAlphaNum c orelse c = #"_"))) +in +fun parse () = fromString <$?> (spaces *> name) +fun parseFull parseX = + name >>= (fn pname => + case pname of + "CFunction" => CFunction <$> CFunction.parse parseX + | _ => (case fromString pname of + NONE => fail "prim" + | SOME p => pure p)) end fun 'a checkApp (prim: 'a t, @@ -1154,6 +1174,13 @@ andalso equals (arg0', arg 0) andalso equals (arg1', arg 1) andalso equals (arg2', arg 2) + fun fiveArgs (arg0', arg1', arg2', arg3', arg4') () = + 5 = Vector.length args + andalso equals (arg0', arg 0) + andalso equals (arg1', arg 1) + andalso equals (arg2', arg 2) + andalso equals (arg3', arg 3) + andalso equals (arg4', arg 4) fun nArgs args' () = Vector.equals (args', args, equals) fun done (args, result') = @@ -1175,6 +1202,13 @@ end local fun make f s = let val t = f s + in noTargs (fn () => (oneArg t, bool)) + end + in + val wordUnaryP = make word + end + local + fun make f s = let val t = f s in noTargs (fn () => (twoArgs (t, t), t)) end in @@ -1188,6 +1222,7 @@ in val realCompare = make real val wordCompare = make word + val wordBinaryP = make word end val cint = word (WordSize.cint ()) val compareRes = word WordSize.compareRes @@ -1208,20 +1243,30 @@ noTargs (fn () => (twoArgs (intInf, csize), intInf)) fun realTernary s = noTargs (fn () => (threeArgs (real s, real s, real s), real s)) - val word8Array = array word8 + fun wordArray seqSize = array (word seqSize) fun wordShift s = noTargs (fn () => (twoArgs (word s, shiftArg), word s)) val word8Vector = vector word8 + fun wordVector seqSize = vector (word seqSize) val string = word8Vector in case prim of - Array_array => oneTarg (fn targ => (oneArg seqIndex, array targ)) - | Array_array0Const => oneTarg (fn targ => (noArgs, array targ)) + Array_alloc _ => oneTarg (fn targ => (oneArg seqIndex, array targ)) + | Array_array => oneTarg (fn targ => (nArgs (Vector.map (args, fn _ => targ)), array targ)) + | Array_copyArray => oneTarg (fn t => (fiveArgs (array t, seqIndex, array t, seqIndex, seqIndex), unit)) + | Array_copyVector => oneTarg (fn t => (fiveArgs (array t, seqIndex, vector t, seqIndex, seqIndex), unit)) | Array_length => oneTarg (fn t => (oneArg (array t), seqIndex)) | Array_sub => oneTarg (fn t => (twoArgs (array t, seqIndex), t)) + | Array_toArray => oneTarg (fn t => (oneArg (array t), array t)) | Array_toVector => oneTarg (fn t => (oneArg (array t), vector t)) + | Array_uninit => + oneTarg (fn t => (twoArgs (array t, seqIndex), unit)) + | Array_uninitIsNop => + oneTarg (fn t => (oneArg (array t), bool)) | Array_update => oneTarg (fn t => (threeArgs (array t, seqIndex, t), unit)) + | CFunction f => + noTargs (fn () => (nArgs (CFunction.args f), CFunction.return f)) | CPointer_add => noTargs (fn () => (twoArgs (cpointer, cptrdiff), cpointer)) | CPointer_diff => @@ -1254,16 +1299,13 @@ | Exn_extra => oneTarg (fn t => (oneArg exn, t)) | Exn_name => noTargs (fn () => (oneArg exn, string)) | Exn_setExtendExtra => oneTarg (fn t => (oneArg (arrow (t, t)), unit)) - | FFI f => - noTargs (fn () => (nArgs (CFunction.args f), CFunction.return f)) - | FFI_Symbol _ => noTargs (fn () => (noArgs, cpointer)) | GC_collect => noTargs (fn () => (noArgs, unit)) + | GC_state => noTargs (fn () => (noArgs, cpointer)) | IntInf_add => intInfBinary () | IntInf_andb => intInfBinary () | IntInf_arshift => intInfShift () | IntInf_compare => noTargs (fn () => (twoArgs (intInf, intInf), compareRes)) - | IntInf_equal => noTargs (fn () => (twoArgs (intInf, intInf), bool)) | IntInf_gcd => intInfBinary () | IntInf_lshift => intInfShift () | IntInf_mul => intInfBinary () @@ -1343,21 +1385,22 @@ noTargs (fn () => (oneArg string, word8Vector)) | Vector_length => oneTarg (fn t => (oneArg (vector t), seqIndex)) | Vector_sub => oneTarg (fn t => (twoArgs (vector t, seqIndex), t)) + | Vector_vector => oneTarg (fn targ => (nArgs (Vector.map (args, fn _ => targ)), vector targ)) | Weak_canGet => oneTarg (fn t => (oneArg (weak t), bool)) | Weak_get => oneTarg (fn t => (oneArg (weak t), t)) | Weak_new => oneTarg (fn t => (oneArg t, weak t)) - | Word8Array_subWord s => - noTargs (fn () => (twoArgs (word8Array, seqIndex), word s)) - | Word8Array_updateWord s => - noTargs (fn () => (threeArgs (word8Array, seqIndex, word s), unit)) - | Word8Vector_subWord s => - noTargs (fn () => (twoArgs (word8Vector, seqIndex), word s)) + | WordArray_subWord {seqSize, eleSize} => + noTargs (fn () => (twoArgs (wordArray seqSize, seqIndex), word eleSize)) + | WordArray_updateWord {seqSize, eleSize} => + noTargs (fn () => (threeArgs (wordArray seqSize, seqIndex, word eleSize), unit)) + | WordVector_subWord {seqSize, eleSize} => + noTargs (fn () => (twoArgs (wordVector seqSize, seqIndex), word eleSize)) | Word8Vector_toString => noTargs (fn () => (oneArg (word8Vector), string)) | WordVector_toIntInf => noTargs (fn () => (oneArg (vector bigIntInfWord), intInf)) | Word_add s => wordBinary s - | Word_addCheck (s, _) => wordBinary s + | Word_addCheckP (s, _) => wordBinaryP s | Word_andb s => wordBinary s | Word_castToReal (s, s') => noTargs (fn () => (oneArg (word s), real s')) @@ -1367,9 +1410,9 @@ | Word_lshift s => wordShift s | Word_lt (s, _) => wordCompare s | Word_mul (s, _) => wordBinary s - | Word_mulCheck (s, _) => wordBinary s + | Word_mulCheckP (s, _) => wordBinaryP s | Word_neg s => wordUnary s - | Word_negCheck s => wordUnary s + | Word_negCheckP (s, _) => wordUnaryP s | Word_notb s => wordUnary s | Word_orb s => wordBinary s | Word_quot (s, _) => wordBinary s @@ -1380,7 +1423,7 @@ | Word_ror s => wordShift s | Word_rshift (s, _) => wordShift s | Word_sub s => wordBinary s - | Word_subCheck (s, _) => wordBinary s + | Word_subCheckP (s, _) => wordBinaryP s | Word_toIntInf => noTargs (fn () => (oneArg smallIntInfWord, intInf)) | Word_xorb s => wordBinary s | World_save => noTargs (fn () => (oneArg string, unit)) @@ -1404,11 +1447,16 @@ datatype z = datatype t in case prim of - Array_array => one (deArray result) - | Array_array0Const => one (deArray result) + Array_alloc _ => one (deArray result) + | Array_array => one (deArray result) + | Array_copyArray => one (deArray (arg 0)) + | Array_copyVector => one (deArray (arg 0)) | Array_length => one (deArray (arg 0)) | Array_sub => one (deArray (arg 0)) + | Array_toArray => one (deArray (arg 0)) | Array_toVector => one (deArray (arg 0)) + | Array_uninit => one (deArray (arg 0)) + | Array_uninitIsNop => one (deArray (arg 0)) | Array_update => one (deArray (arg 0)) | CPointer_getObjptr => one result | CPointer_setObjptr => one (arg 2) @@ -1428,6 +1476,7 @@ | Ref_ref => one (deRef result) | Vector_length => one (deVector (arg 0)) | Vector_sub => one (deVector (arg 0)) + | Vector_vector => one (deVector result) | Weak_canGet => one (deWeak (arg 0)) | Weak_get => one result | Weak_new => one (arg 0) @@ -1438,7 +1487,7 @@ fn z => Trace.trace ("Prim.extractTargs", layout o #1, Layout.ignore) extractTargs z -structure SmallIntInf = Const.SmallIntInf +structure IntInfRep = Const.IntInfRep structure ApplyArg = struct @@ -1464,7 +1513,6 @@ Apply of 'a prim * 'b list | Bool of bool | Const of Const.t - | Overflow | Unknown | Var of 'b @@ -1476,7 +1524,6 @@ Apply (p, args) => seq [layoutPrim p, List.layout layoutX args] | Bool b => Bool.layout b | Const c => Const.layout c - | Overflow => str "Overflow" | Unknown => str "Unknown" | Var x => layoutX x end @@ -1550,30 +1597,9 @@ fun word (w: WordX.t): ('a, 'b) ApplyResult.t = ApplyResult.Const (Const.word w) val wordOpt = fn NONE => ApplyResult.Unknown | SOME w => word w - fun iio (f, c1, c2) = intInf (f (c1, c2)) - fun wordS (f: WordX.t * WordX.t * {signed: bool} -> WordX.t, - (_: WordSize.t, sg), - w: WordX.t, - w': WordX.t) = - word (f (w, w', sg)) - fun wordCmp (f: WordX.t * WordX.t * {signed: bool} -> bool, - (_: WordSize.t, sg), - w: WordX.t, - w': WordX.t) = - bool (f (w, w', sg)) - fun wordOrOverflow (s, sg, w) = - if WordSize.isInRange (s, w, sg) - then word (WordX.fromIntInf (w, s)) - else ApplyResult.Overflow - fun wcheck (f: IntInf.t * IntInf.t -> IntInf.t, - (s: WordSize.t, sg as {signed}), - w: WordX.t, - w': WordX.t) = - let - val conv = if signed then WordX.toIntInfX else WordX.toIntInf - in - wordOrOverflow (s, sg, f (conv w, conv w')) - end + fun wordVector (v: WordXVector.t): ('a, 'b) ApplyResult.t = + ApplyResult.Const (Const.wordVector v) + fun wordChk (s, w, sg) = bool (not (WordSize.isInRange (s, w, sg))) val eq = fn (Word w1, Word w2) => bool (WordX.equals (w1, w2)) | _ => ApplyResult.Unknown @@ -1587,15 +1613,15 @@ then ApplyResult.Unknown else case p of - IntInf_add => iio (IntInf.+, i1, i2) - | IntInf_andb => iio (IntInf.andb, i1, i2) - | IntInf_gcd => iio (IntInf.gcd, i1, i2) - | IntInf_mul => iio (IntInf.*, i1, i2) - | IntInf_orb => iio (IntInf.orb, i1, i2) - | IntInf_quot => iio (IntInf.quot, i1, i2) - | IntInf_rem => iio (IntInf.rem, i1, i2) - | IntInf_sub => iio (IntInf.-, i1, i2) - | IntInf_xorb => iio (IntInf.xorb, i1, i2) + IntInf_add => intInf (IntInf.+ (i1, i2)) + | IntInf_andb => intInf (IntInf.andb (i1, i2)) + | IntInf_gcd => intInf (IntInf.gcd (i1, i2)) + | IntInf_mul => intInf (IntInf.* (i1, i2)) + | IntInf_orb => intInf (IntInf.orb (i1, i2)) + | IntInf_quot => intInf (IntInf.quot (i1, i2)) + | IntInf_rem => intInf (IntInf.rem (i1, i2)) + | IntInf_sub => intInf (IntInf.- (i1, i2)) + | IntInf_xorb => intInf (IntInf.xorb (i1, i2)) | _ => ApplyResult.Unknown fun intInfUnary (i1) = if intInfTooBig i1 @@ -1638,6 +1664,7 @@ (case (p, cs) of (MLton_eq, [c1, c2]) => eq (c1, c2) | (MLton_equal, [c1, c2]) => equal (c1, c2) + | (CPointer_equal, [Null, Null]) => bool true | (CPointer_fromWord, [Word w]) => if WordX.isZero w then null @@ -1653,11 +1680,14 @@ in word (WordX.fromIntInf (i, WordSize.compareRes)) end - | (IntInf_equal, [IntInf i1, IntInf i2]) => bool (i1 = i2) | (IntInf_toWord, [IntInf i]) => - (case SmallIntInf.toWord i of - NONE => ApplyResult.Unknown - | SOME w => word w) + (case IntInfRep.fromIntInf i of + IntInfRep.Big _ => ApplyResult.Unknown + | IntInfRep.Small w => word w) + | (IntInf_toVector, [IntInf i]) => + (case IntInfRep.fromIntInf i of + IntInfRep.Big v => wordVector v + | IntInfRep.Small _ => ApplyResult.Unknown) | (_, [IntInf i1, IntInf i2, _]) => intInfBinary (i1, i2) | (_, [IntInf i1, Word w2, _]) => intInfShiftOrToString (i1, w2) | (_, [IntInf i1, _]) => intInfUnary (i1) @@ -1692,55 +1722,79 @@ | (Real_lt _, [Real r1, Real r2]) => boolOpt (RealX.lt (r1, r2)) | (Real_qequal _, [Real r1, Real r2]) => boolOpt (RealX.qequal (r1, r2)) | (Real_castToWord _, [Real r]) => wordOpt (RealX.castToWord r) + | (Vector_vector, (Word w)::_) => + (wordVector o WordXVector.fromList) + ({elementSize = WordX.size w}, + List.map (cs, Const.deWord)) | (Word_castToReal _, [Word w]) => realOpt (RealX.castFromWord w) | (Word_rndToReal (_, s, {signed}), [Word w]) => realOpt (RealX.fromIntInf (if signed then WordX.toIntInfX w else WordX.toIntInf w, s)) | (Word_add _, [Word w1, Word w2]) => word (WordX.add (w1, w2)) - | (Word_addCheck s, [Word w1, Word w2]) => wcheck (op +, s, w1, w2) + | (Word_addCheckP (s, sg), [Word w1, Word w2]) => + wordChk (s, + IntInf.+ (WordX.toIntInfSg (w1, sg), + WordX.toIntInfSg (w2, sg)), + sg) | (Word_andb _, [Word w1, Word w2]) => word (WordX.andb (w1, w2)) | (Word_equal _, [Word w1, Word w2]) => bool (WordX.equals (w1, w2)) | (Word_lshift _, [Word w1, Word w2]) => word (WordX.lshift (w1, w2)) - | (Word_lt s, [Word w1, Word w2]) => wordCmp (WordX.lt, s, w1, w2) - | (Word_mul s, [Word w1, Word w2]) => wordS (WordX.mul, s, w1, w2) - | (Word_mulCheck s, [Word w1, Word w2]) => wcheck (op *, s, w1, w2) + | (Word_lt (_, sg), [Word w1, Word w2]) => bool (WordX.lt (w1, w2, sg)) + | (Word_mul (_, sg), [Word w1, Word w2]) => word (WordX.mul (w1, w2, sg)) + | (Word_mulCheckP (s, sg), [Word w1, Word w2]) => + wordChk (s, + IntInf.* (WordX.toIntInfSg (w1, sg), + WordX.toIntInfSg (w2, sg)), + sg) | (Word_neg _, [Word w]) => word (WordX.neg w) - | (Word_negCheck s, [Word w]) => - wordOrOverflow (s, {signed = true}, ~ (WordX.toIntInfX w)) + | (Word_negCheckP (s, sg), [Word w]) => + wordChk (s, + IntInf.~ (WordX.toIntInfSg (w, sg)), + sg) | (Word_notb _, [Word w]) => word (WordX.notb w) | (Word_orb _, [Word w1, Word w2]) => word (WordX.orb (w1, w2)) - | (Word_quot s, [Word w1, Word w2]) => + | (Word_quot (_, sg), [Word w1, Word w2]) => if WordX.isZero w2 then ApplyResult.Unknown - else wordS (WordX.quot, s, w1, w2) - | (Word_rem s, [Word w1, Word w2]) => + else word (WordX.quot (w1, w2, sg)) + | (Word_rem (_, sg), [Word w1, Word w2]) => if WordX.isZero w2 then ApplyResult.Unknown - else wordS (WordX.rem, s, w1, w2) + else word (WordX.rem (w1, w2, sg)) | (Word_rol _, [Word w1, Word w2]) => word (WordX.rol (w1, w2)) | (Word_ror _, [Word w1, Word w2]) => word (WordX.ror (w1, w2)) - | (Word_rshift s, [Word w1, Word w2]) => - wordS (WordX.rshift, s, w1, w2) + | (Word_rshift (_, sg), [Word w1, Word w2]) => + word (WordX.rshift (w1, w2, sg)) | (Word_sub _, [Word w1, Word w2]) => word (WordX.sub (w1, w2)) - | (Word_subCheck s, [Word w1, Word w2]) => wcheck (op -, s, w1, w2) - | (Word_toIntInf, [Word w]) => intInf (SmallIntInf.fromWord w) - | (Word_extdToWord (_, s, {signed}), [Word w]) => - word (if signed then WordX.resizeX (w, s) - else WordX.resize (w, s)) + | (Word_subCheckP (s, sg), [Word w1, Word w2]) => + wordChk (s, + IntInf.- (WordX.toIntInfSg (w1, sg), + WordX.toIntInfSg (w2, sg)), + sg) + | (Word_toIntInf, [Word w]) => + (case IntInfRep.smallToIntInf w of + NONE => ApplyResult.Unknown + | SOME i => intInf i) + | (Word_extdToWord (_, s, sg), [Word w]) => + word (WordX.resizeSg (w, s, sg)) | (Word_xorb _, [Word w1, Word w2]) => word (WordX.xorb (w1, w2)) + | (WordVector_toIntInf, [WordVector v]) => + (case IntInfRep.bigToIntInf v of + NONE => ApplyResult.Unknown + | SOME i => intInf i) | _ => ApplyResult.Unknown) handle Chr => ApplyResult.Unknown | Div => ApplyResult.Unknown - | Exn.Overflow => ApplyResult.Overflow + | Overflow => ApplyResult.Unknown | Subscript => ApplyResult.Unknown fun someVars () = let datatype z = datatype ApplyResult.t fun varIntInf (x, i: IntInf.t, space, inOrder) = let - fun neg () = Apply (intInfNeg, [x, space]) - fun notb () = Apply (intInfNotb, [x, space]) + fun neg () = Apply (IntInf_neg, [x, space]) + fun notb () = Apply (IntInf_notb, [x, space]) val i = IntInf.toInt i in case p of @@ -1846,31 +1900,13 @@ fun varWord (x, w, inOrder) = let val zero = word o WordX.zero - fun add () = if WordX.isZero w then Var x else Unknown - fun mul ((s, {signed}), neg) = - if WordX.isZero w - then word w - else if WordX.isOne w - then Var x - else if signed andalso WordX.isNegOne w - then Apply (neg s, [x]) - else Unknown - fun sub (s, neg) = - if WordX.isZero w - then if inOrder - then Var x - else Apply (neg s, [x]) - else Unknown fun ro s = if inOrder then if WordX.isZero (WordX.rem (w, - WordX.fromIntInf - (IntInf.fromInt - (Bits.toInt (WordSize.bits s)), - WordX.size w), + WordX.fromBits (WordSize.bits s, WordX.size w), {signed = false})) then Var x else Unknown @@ -1884,9 +1920,7 @@ then Var x else if (WordX.ge (w, - WordX.fromIntInf (Bits.toIntInf - (WordSize.bits s), - WordSize.shiftArg), + WordX.fromBits (WordSize.bits s, WordSize.shiftArg), {signed = false})) then zero s else Unknown @@ -1895,7 +1929,7 @@ else Unknown in case p of - CPointer_add => + CPointer_add => if WordX.isZero w then Var x else Unknown @@ -1904,8 +1938,14 @@ andalso inOrder then Var x else Unknown - | Word_add _ => add () - | Word_addCheck _ => add () + | Word_add _ => + if WordX.isZero w + then Var x + else Unknown + | Word_addCheckP _ => + if WordX.isZero w + then f + else Unknown | Word_andb s => if WordX.isZero w then zero s @@ -1917,8 +1957,18 @@ if inOrder then if WordX.isMin (w, sg) then f else Unknown else if WordX.isMax (w, sg) then f else Unknown - | Word_mul s => mul (s, wordNeg) - | Word_mulCheck s => mul (s, wordNegCheck) + | Word_mul (s, {signed}) => + if WordX.isZero w + then zero s + else if WordX.isOne w + then Var x + else if signed andalso WordX.isNegOne w + then Apply (Word_neg s, [x]) + else Unknown + | Word_mulCheckP _ => + if WordX.isZero w orelse WordX.isOne w + then f + else Unknown | Word_orb _ => if WordX.isZero w then Var x @@ -1931,7 +1981,7 @@ if WordX.isOne w then Var x else if signed andalso WordX.isNegOne w - then Apply (wordNeg s, [x]) + then Apply (Word_neg s, [x]) else Unknown else Unknown | Word_rem (s, {signed}) => @@ -1952,13 +2002,21 @@ else Unknown else shift s - | Word_sub s => sub (s, wordNeg) - | Word_subCheck s => sub (s, wordNegCheck o #1) + | Word_sub s => + if WordX.isZero w + then if inOrder + then Var x + else Apply (Word_neg s, [x]) + else Unknown + | Word_subCheckP _ => + if WordX.isZero w andalso inOrder + then f + else Unknown | Word_xorb s => if WordX.isZero w then Var x else if WordX.isAllOnes w - then Apply (wordNotb s, [x]) + then Apply (Word_notb s, [x]) else Unknown | _ => Unknown end @@ -2026,7 +2084,6 @@ | CPointer_lt => f | IntInf_compare => word (WordX.zero WordSize.compareRes) - | IntInf_equal => t | MLton_eq => t | MLton_equal => t | Real_lt _ => f @@ -2038,7 +2095,7 @@ | Word_quot (s, _) => word (WordX.one s) | Word_rem (s, _) => word (WordX.zero s) | Word_sub s => word (WordX.zero s) - | Word_subCheck (s, _) => word (WordX.zero s) + | Word_subCheckP _ => f | Word_xorb s => word (WordX.zero s) | _ => Unknown end @@ -2054,64 +2111,4 @@ else someVars () end -fun ('a, 'b) layoutApp (p: 'a t, - args: 'b vector, - layoutArg: 'b -> Layout.t): Layout.t = - let - fun arg i = layoutArg (Vector.sub (args, i)) - open Layout - fun one name = seq [str name, str " ", arg 0] - fun two name = seq [arg 0, str " ", str name, str " ", arg 1] - in - case p of - Array_length => one "length" - | Real_Math_acos _ => one "acos" - | Real_Math_asin _ => one "asin" - | Real_Math_atan _ => one "atan" - | Real_Math_cos _ => one "cos" - | Real_Math_exp _ => one "exp" - | Real_Math_ln _ => one "ln" - | Real_Math_log10 _ => one "log10" - | Real_Math_sin _ => one "sin" - | Real_Math_sqrt _ => one "sqrt" - | Real_Math_tan _ => one "tan" - | Real_add _ => two "+" - | Real_div _ => two "/" - | Real_equal _ => two "==" - | Real_le _ => two "<=" - | Real_lt _ => two "<" - | Real_mul _ => two "*" - | Real_neg _ => one "-" - | Real_qequal _ => two "?=" - | Real_sub _ => two "-" - | Ref_assign => two ":=" - | Ref_deref => one "!" - | Ref_ref => one "ref" - | Vector_length => one "length" - | Word_add _ => two "+" - | Word_addCheck _ => two "+" - | Word_andb _ => two "&" - | Word_equal _ => two "=" - | Word_lshift _ => two "<<" - | Word_lt _ => two "<" - | Word_mul _ => two "*" - | Word_mulCheck _ => two "*" - | Word_neg _ => one "-" - | Word_negCheck _ => one "-" - | Word_orb _ => two "|" - | Word_rol _ => two "rol" - | Word_ror _ => two "ror" - | Word_rshift (_, {signed}) => two (if signed then "~>>" else ">>") - | Word_sub _ => two "-" - | Word_subCheck _ => two "-" - | Word_xorb _ => two "^" - | _ => seq [layout p, str " ", Vector.layout layoutArg args] - end - -structure Name = - struct - datatype t = datatype t - val toString = toString - end - end diff -Nru mlton-20130715/mlton/atoms/prim.sig mlton-20210117+dfsg/mlton/atoms/prim.sig --- mlton-20130715/mlton/atoms/prim.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/prim.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2014,2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -22,169 +23,167 @@ sig include PRIM_STRUCTS - structure Name: - sig - datatype 'a t = - Array_array (* backend *) - | Array_array0Const (* constant propagation *) - | Array_length (* ssa to rssa *) - | Array_sub (* ssa to ssa2 *) - | Array_toVector (* backend *) - | Array_update (* ssa to ssa2 *) - | CPointer_add (* codegen *) - | CPointer_diff (* codegen *) - | CPointer_equal (* codegen *) - | CPointer_fromWord (* codegen *) - | CPointer_getCPointer (* ssa to rssa *) - | CPointer_getObjptr (* ssa to rssa *) - | CPointer_getReal of RealSize.t (* ssa to rssa *) - | CPointer_getWord of WordSize.t (* ssa to rssa *) - | CPointer_lt (* codegen *) - | CPointer_setCPointer (* ssa to rssa *) - | CPointer_setObjptr (* ssa to rssa *) - | CPointer_setReal of RealSize.t (* ssa to rssa *) - | CPointer_setWord of WordSize.t (* ssa to rssa *) - | CPointer_sub (* codegen *) - | CPointer_toWord (* codegen *) - | Exn_extra (* implement exceptions *) - | Exn_name (* implement exceptions *) - | Exn_setExtendExtra (* implement exceptions *) - | FFI of 'a CFunction.t (* ssa to rssa *) - | FFI_Symbol of {name: string, (* codegen *) - cty: CType.t option, - symbolScope: CFunction.SymbolScope.t} - | GC_collect (* ssa to rssa *) - | IntInf_add (* ssa to rssa *) - | IntInf_andb (* ssa to rssa *) - | IntInf_arshift (* ssa to rssa *) - | IntInf_compare (* ssa to rssa *) - | IntInf_equal (* ssa to rssa *) - | IntInf_gcd (* ssa to rssa *) - | IntInf_lshift (* ssa to rssa *) - | IntInf_mul (* ssa to rssa *) - | IntInf_neg (* ssa to rssa *) - | IntInf_notb (* ssa to rssa *) - | IntInf_orb (* ssa to rssa *) - | IntInf_quot (* ssa to rssa *) - | IntInf_rem (* ssa to rssa *) - | IntInf_sub (* ssa to rssa *) - | IntInf_toString (* ssa to rssa *) - | IntInf_toVector (* ssa to rssa *) - | IntInf_toWord (* ssa to rssa *) - | IntInf_xorb (* ssa to rssa *) - | MLton_bogus (* ssa to rssa *) - (* of type unit -> 'a. - * Makes a bogus value of any type. - *) - | MLton_bug (* ssa to rssa *) - | MLton_deserialize (* unused *) - | MLton_eq (* ssa to rssa *) - | MLton_equal (* polymorphic equality *) - | MLton_halt (* ssa to rssa *) - | MLton_hash (* polymorphic hash *) - (* MLton_handlesSignals and MLton_installSignalHandler work together - * to inform the optimizer and basis library whether or not the - * program uses signal handlers. - * - * MLton_installSignalHandler is called by MLton.Signal.setHandler, - * and is effectively a noop, but is left in the program until the - * end of the backend, so that the optimizer can test whether or - * not the program installs signal handlers. - * - * MLton_handlesSignals is translated by closure conversion into - * a boolean, and is true iff MLton_installsSignalHandler is called. - *) - | MLton_handlesSignals (* closure conversion *) - | MLton_installSignalHandler (* backend *) - | MLton_serialize (* unused *) - | MLton_share - | MLton_size (* ssa to rssa *) - | MLton_touch (* backend *) - | Real_Math_acos of RealSize.t (* codegen *) - | Real_Math_asin of RealSize.t (* codegen *) - | Real_Math_atan of RealSize.t (* codegen *) - | Real_Math_atan2 of RealSize.t (* codegen *) - | Real_Math_cos of RealSize.t (* codegen *) - | Real_Math_exp of RealSize.t (* codegen *) - | Real_Math_ln of RealSize.t (* codegen *) - | Real_Math_log10 of RealSize.t (* codegen *) - | Real_Math_sin of RealSize.t (* codegen *) - | Real_Math_sqrt of RealSize.t (* codegen *) - | Real_Math_tan of RealSize.t (* codegen *) - | Real_abs of RealSize.t (* codegen *) - | Real_add of RealSize.t (* codegen *) - | Real_castToWord of RealSize.t * WordSize.t (* codegen *) - | Real_div of RealSize.t (* codegen *) - | Real_equal of RealSize.t (* codegen *) - | Real_ldexp of RealSize.t (* codegen *) - | Real_le of RealSize.t (* codegen *) - | Real_lt of RealSize.t (* codegen *) - | Real_mul of RealSize.t (* codegen *) - | Real_muladd of RealSize.t (* codegen *) - | Real_mulsub of RealSize.t (* codegen *) - | Real_neg of RealSize.t (* codegen *) - | Real_qequal of RealSize.t (* codegen *) - | Real_rndToReal of RealSize.t * RealSize.t (* codegen *) - | Real_rndToWord of RealSize.t * WordSize.t * {signed: bool} (* codegen *) - | Real_round of RealSize.t (* codegen *) - | Real_sub of RealSize.t (* codegen *) - | Ref_assign (* ssa to ssa2 *) - | Ref_deref (* ssa to ssa2 *) - | Ref_ref (* ssa to ssa2 *) - | String_toWord8Vector (* defunctorize *) - | Thread_atomicBegin (* backend *) - | Thread_atomicEnd (* backend *) - | Thread_atomicState (* backend *) - | Thread_copy (* ssa to rssa *) - | Thread_copyCurrent (* ssa to rssa *) - | Thread_returnToC (* codegen *) - (* switchTo has to be a _prim because we have to know that it - * enters the runtime -- because everything must be saved - * on the stack. - *) - | Thread_switchTo (* ssa to rssa *) - | TopLevel_getHandler (* implement exceptions *) - | TopLevel_getSuffix (* implement suffix *) - | TopLevel_setHandler (* implement exceptions *) - | TopLevel_setSuffix (* implement suffix *) - | Vector_length (* ssa to ssa2 *) - | Vector_sub (* ssa to ssa2 *) - | Weak_canGet (* ssa to rssa *) - | Weak_get (* ssa to rssa *) - | Weak_new (* ssa to rssa *) - | Word_add of WordSize.t (* codegen *) - | Word_addCheck of WordSize.t * {signed: bool} (* codegen *) - | Word_andb of WordSize.t (* codegen *) - | Word_castToReal of WordSize.t * RealSize.t (* codegen *) - | Word_equal of WordSize.t (* codegen *) - | Word_extdToWord of WordSize.t * WordSize.t * {signed: bool} (* codegen *) - | Word_lshift of WordSize.t (* codegen *) - | Word_lt of WordSize.t * {signed: bool} (* codegen *) - | Word_mul of WordSize.t * {signed: bool} (* codegen *) - | Word_mulCheck of WordSize.t * {signed: bool} (* codegen *) - | Word_neg of WordSize.t (* codegen *) - | Word_negCheck of WordSize.t (* codegen *) - | Word_notb of WordSize.t (* codegen *) - | Word_orb of WordSize.t (* codegen *) - | Word_quot of WordSize.t * {signed: bool} (* codegen *) - | Word_rem of WordSize.t * {signed: bool} (* codegen *) - | Word_rndToReal of WordSize.t * RealSize.t * {signed: bool} (* codegen *) - | Word_rol of WordSize.t (* codegen *) - | Word_ror of WordSize.t (* codegen *) - | Word_rshift of WordSize.t * {signed: bool} (* codegen *) - | Word_sub of WordSize.t (* codegen *) - | Word_subCheck of WordSize.t* {signed: bool} (* codegen *) - | Word_toIntInf (* ssa to rssa *) - | Word_xorb of WordSize.t (* codegen *) - | WordVector_toIntInf (* ssa to rssa *) - | Word8Array_subWord of WordSize.t (* ssa to rssa *) - | Word8Array_updateWord of WordSize.t (* ssa to rssa *) - | Word8Vector_subWord of WordSize.t (* ssa to rssa *) - | Word8Vector_toString (* defunctorize *) - | World_save (* ssa to rssa *) - - val toString: 'a t -> string - end + datatype 'a t = + Array_alloc of {raw: bool} (* to rssa (as runtime C fn) *) + | Array_array (* to ssa2 *) + | Array_copyArray (* to rssa (as runtime C fn) *) + | Array_copyVector (* to rssa (as runtime C fn) *) + | Array_length (* to rssa *) + | Array_sub (* to ssa2 *) + | Array_toArray (* to rssa *) + | Array_toVector (* to rssa *) + | Array_uninit (* to rssa *) + | Array_uninitIsNop (* to rssa *) + | Array_update (* to ssa2 *) + | CFunction of 'a CFunction.t (* to rssa *) + | CPointer_add (* codegen *) + | CPointer_diff (* codegen *) + | CPointer_equal (* codegen *) + | CPointer_fromWord (* codegen *) + | CPointer_getCPointer (* to rssa *) + | CPointer_getObjptr (* to rssa *) + | CPointer_getReal of RealSize.t (* to rssa *) + | CPointer_getWord of WordSize.t (* to rssa *) + | CPointer_lt (* codegen *) + | CPointer_setCPointer (* to rssa *) + | CPointer_setObjptr (* to rssa *) + | CPointer_setReal of RealSize.t (* to rssa *) + | CPointer_setWord of WordSize.t (* to rssa *) + | CPointer_sub (* codegen *) + | CPointer_toWord (* codegen *) + | Exn_extra (* implement exceptions *) + | Exn_name (* implement exceptions *) + | Exn_setExtendExtra (* implement exceptions *) + | GC_collect (* to rssa (as runtime C fn) *) + | GC_state (* to rssa (as operand) *) + | IntInf_add (* to rssa (as runtime C fn) *) + | IntInf_andb (* to rssa (as runtime C fn) *) + | IntInf_arshift (* to rssa (as runtime C fn) *) + | IntInf_compare (* to rssa (as runtime C fn) *) + | IntInf_gcd (* to rssa (as runtime C fn) *) + | IntInf_lshift (* to rssa (as runtime C fn) *) + | IntInf_mul (* to rssa (as runtime C fn) *) + | IntInf_neg (* to rssa (as runtime C fn) *) + | IntInf_notb (* to rssa (as runtime C fn) *) + | IntInf_orb (* to rssa (as runtime C fn) *) + | IntInf_quot (* to rssa (as runtime C fn) *) + | IntInf_rem (* to rssa (as runtime C fn) *) + | IntInf_sub (* to rssa (as runtime C fn) *) + | IntInf_toString (* to rssa (as runtime C fn) *) + | IntInf_toVector (* to rssa *) + | IntInf_toWord (* to rssa *) + | IntInf_xorb (* to rssa (as runtime C fn) *) + (* of type unit -> 'a. + * Makes a bogus value of any type. + *) + | MLton_bogus (* to rssa *) + | MLton_bug (* to rssa (as impure C fn) *) + | MLton_deserialize (* unused *) + | MLton_eq (* to rssa (as Word_equal) *) + | MLton_equal (* polymorphic equality *) + | MLton_halt (* to rssa (as runtime C fn) *) + | MLton_hash (* polymorphic hash *) + (* MLton_handlesSignals and MLton_installSignalHandler work together + * to inform the optimizer and basis library whether or not the + * program uses signal handlers. + * + * MLton_installSignalHandler is called by MLton.Signal.setHandler, + * and is effectively a noop, but is left in the program until, so + * that the optimizer can test whether or not the program installs + * signal handlers. + * + * MLton_handlesSignals is translated by closure conversion into + * a boolean, and is true iff MLton_installsSignalHandler is called. + *) + | MLton_handlesSignals (* closure conversion *) + | MLton_installSignalHandler (* to rssa (as nop) *) + | MLton_serialize (* unused *) + | MLton_share (* to rssa (as nop or runtime C fn) *) + | MLton_size (* to rssa (as runtime C fn) *) + | MLton_touch (* to rssa (as nop) or backend (as nop) *) + | Real_Math_acos of RealSize.t (* codegen *) + | Real_Math_asin of RealSize.t (* codegen *) + | Real_Math_atan of RealSize.t (* codegen *) + | Real_Math_atan2 of RealSize.t (* codegen *) + | Real_Math_cos of RealSize.t (* codegen *) + | Real_Math_exp of RealSize.t (* codegen *) + | Real_Math_ln of RealSize.t (* codegen *) + | Real_Math_log10 of RealSize.t (* codegen *) + | Real_Math_sin of RealSize.t (* codegen *) + | Real_Math_sqrt of RealSize.t (* codegen *) + | Real_Math_tan of RealSize.t (* codegen *) + | Real_abs of RealSize.t (* codegen *) + | Real_add of RealSize.t (* codegen *) + | Real_castToWord of RealSize.t * WordSize.t (* codegen *) + | Real_div of RealSize.t (* codegen *) + | Real_equal of RealSize.t (* codegen *) + | Real_ldexp of RealSize.t (* codegen *) + | Real_le of RealSize.t (* codegen *) + | Real_lt of RealSize.t (* codegen *) + | Real_mul of RealSize.t (* codegen *) + | Real_muladd of RealSize.t (* codegen *) + | Real_mulsub of RealSize.t (* codegen *) + | Real_neg of RealSize.t (* codegen *) + | Real_qequal of RealSize.t (* codegen *) + | Real_rndToReal of RealSize.t * RealSize.t (* codegen *) + | Real_rndToWord of RealSize.t * WordSize.t * {signed: bool} (* codegen *) + | Real_round of RealSize.t (* codegen *) + | Real_sub of RealSize.t (* codegen *) + | Ref_assign (* to ssa2 *) + | Ref_deref (* to ssa2 *) + | Ref_ref (* to ssa2 *) + | String_toWord8Vector (* defunctorize *) + | Thread_atomicBegin (* to rssa *) + | Thread_atomicEnd (* to rssa *) + | Thread_atomicState (* to rssa *) + | Thread_copy (* to rssa (as runtime C fn) *) + | Thread_copyCurrent (* to rssa (as runtime C fn) *) + | Thread_returnToC (* codegen *) + (* switchTo has to be a _prim because we have to know that it + * enters the runtime -- because everything must be saved + * on the stack. + *) + | Thread_switchTo (* to rssa (as runtime C fn) *) + | TopLevel_getHandler (* implement exceptions *) + | TopLevel_getSuffix (* implement suffix *) + | TopLevel_setHandler (* implement exceptions *) + | TopLevel_setSuffix (* implement suffix *) + | Vector_length (* to ssa2 *) + | Vector_sub (* to ssa2 *) + | Vector_vector (* to ssa2 *) + | Weak_canGet (* to rssa (as runtime C fn) *) + | Weak_get (* to rssa (as runtime C fn) *) + | Weak_new (* to rssa (as runtime C fn) *) + | Word_add of WordSize.t (* codegen *) + | Word_addCheckP of WordSize.t * {signed: bool} (* codegen *) + | Word_andb of WordSize.t (* codegen *) + | Word_castToReal of WordSize.t * RealSize.t (* codegen *) + | Word_equal of WordSize.t (* codegen *) + | Word_extdToWord of WordSize.t * WordSize.t * {signed: bool} (* codegen *) + | Word_lshift of WordSize.t (* codegen *) + | Word_lt of WordSize.t * {signed: bool} (* codegen *) + | Word_mul of WordSize.t * {signed: bool} (* codegen *) + | Word_mulCheckP of WordSize.t * {signed: bool} (* codegen *) + | Word_neg of WordSize.t (* codegen *) + | Word_negCheckP of WordSize.t * {signed: bool} (* codegen *) + | Word_notb of WordSize.t (* codegen *) + | Word_orb of WordSize.t (* codegen *) + | Word_quot of WordSize.t * {signed: bool} (* codegen *) + | Word_rem of WordSize.t * {signed: bool} (* codegen *) + | Word_rndToReal of WordSize.t * RealSize.t * {signed: bool} (* codegen *) + | Word_rol of WordSize.t (* codegen *) + | Word_ror of WordSize.t (* codegen *) + | Word_rshift of WordSize.t * {signed: bool} (* codegen *) + | Word_sub of WordSize.t (* codegen *) + | Word_subCheckP of WordSize.t * {signed: bool} (* codegen *) + | Word_toIntInf (* to rssa *) + | Word_xorb of WordSize.t (* codegen *) + | WordVector_toIntInf (* to rssa *) + | WordArray_subWord of {seqSize:WordSize.t, eleSize:WordSize.t} (* to rssa *) + | WordArray_updateWord of {seqSize: WordSize.t, eleSize: WordSize.t} (* to rssa *) + | WordVector_subWord of {seqSize: WordSize.t, eleSize: WordSize.t} (* to rssa *) + | Word8Vector_toString (* defunctorize *) + | World_save (* to rssa (as runtime C fn) *) structure ApplyArg: sig @@ -197,27 +196,19 @@ end structure ApplyResult: sig - type 'a prim + type 'a prim = 'a t datatype ('a, 'b) t = Apply of 'a prim * 'b list | Bool of bool | Const of Const.t - | Overflow | Unknown | Var of 'b val layout: ('b -> Layout.t) -> ('a, 'b) t -> Layout.t end - type 'a t - sharing type t = ApplyResult.prim val apply: 'a t * 'b ApplyArg.t list * ('b * 'b -> bool) -> ('a, 'b) ApplyResult.t - val array: 'a t - val arrayLength: 'a t - val assign: 'a t - val bogus: 'a t - val bug: 'a t val checkApp: 'a t * {args: 'a vector, result: 'a, targs: 'a vector, @@ -235,17 +226,8 @@ vector: 'a -> 'a, weak: 'a -> 'a, word: WordSize.t -> 'a}} -> bool - val cpointerAdd: 'a t - val cpointerDiff: 'a t - val cpointerEqual: 'a t val cpointerGet: CType.t -> 'a t - val cpointerLt: 'a t val cpointerSet: CType.t -> 'a t - val cpointerSub: 'a t - val cpointerToWord: 'a t - val deref: 'a t - val eq: 'a t (* pointer equality *) - val equal: 'a t (* polymorphic equality *) val equals: 'a t * 'a t -> bool val extractTargs: 'a t * {args: 'b vector, result: 'b, @@ -254,53 +236,24 @@ deRef: 'b -> 'b, deVector: 'b -> 'b, deWeak: 'b -> 'b}} -> 'b vector - val ffi: 'a CFunction.t -> 'a t - val ffiSymbol: {name: string, - cty: CType.t option, - symbolScope: CFunction.SymbolScope.t } -> 'a t val fromString: string -> 'a t option - val hash: 'a t (* polymorphic hash *) - val intInfEqual: 'a t - val intInfToWord: 'a t - val intInfToVector: 'a t val isCommutative: 'a t -> bool (* * isFunctional p = true iff p always returns same result when given * same args and has no side effects. * isFuntional implies not maySideEffect. - * examples: Array_length, MLton_equal, Word_add - * not examples: Array_array, Array_sub, Ref_deref, Ref_ref + * examples: Array_length, MLton_equal, Vector_vector, Word_add + * not examples: Array_alloc, Array_sub, Ref_deref, Ref_ref *) val isFunctional: 'a t -> bool val layout: 'a t -> Layout.t - val layoutApp: 'a t * 'b vector * ('b -> Layout.t) -> Layout.t + val layoutFull: 'a t * ('a -> Layout.t) -> Layout.t val map: 'a t * ('a -> 'b) -> 'b t - (* examples: Word_addCheck, Word_mulCheck, Word_subCheck *) - val mayOverflow: 'a t -> bool (* examples: Array_update, Ref_assign - * not examples: Array_array, Array_sub, Ref_deref, Ref_ref + * not examples: Array_sub, Array_uninit, Ref_deref, Ref_ref *) val maySideEffect: 'a t -> bool - val name: 'a t -> 'a Name.t - val realCastToWord: RealSize.t * WordSize.t -> 'a t - val reff: 'a t + val parse: unit -> 'a t Parse.t + val parseFull: 'a Parse.t -> 'a t Parse.t val toString: 'a t -> string - val touch: 'a t - val vectorLength: 'a t - val vectorSub: 'a t - val wordAdd: WordSize.t -> 'a t - val wordAddCheck: WordSize.t * {signed: bool} -> 'a t - val wordAndb: WordSize.t -> 'a t - val wordCastToReal : WordSize.t * RealSize.t -> 'a t - val wordEqual: WordSize.t -> 'a t - val wordExtdToWord: WordSize.t * WordSize.t * {signed: bool} -> 'a t - val wordLshift: WordSize.t -> 'a t - val wordLt: WordSize.t * {signed: bool} -> 'a t - val wordMul: WordSize.t * {signed: bool} -> 'a t - val wordNeg: WordSize.t -> 'a t - val wordOrb: WordSize.t -> 'a t - val wordQuot: WordSize.t * {signed: bool} -> 'a t - val wordRshift: WordSize.t * {signed: bool} -> 'a t - val wordSub: WordSize.t -> 'a t - val wordXorb: WordSize.t -> 'a t end diff -Nru mlton-20130715/mlton/atoms/prim-tycons.fun mlton-20210117+dfsg/mlton/atoms/prim-tycons.fun --- mlton-20130715/mlton/atoms/prim-tycons.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/prim-tycons.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,250 @@ +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor PrimTycons (S: PRIM_TYCONS_STRUCTS): PRIM_TYCONS = +struct + +open S + +datatype z = datatype RealSize.t + +type tycon = t + +local + fun make s = (s, fromString s) +in + val array = make "array" + val arrow = make "arrow" + val bool = make "bool" + val cpointer = make "cpointer" + val exn = make "exn" + val intInf = make "intInf" + val list = make "list" + val reff = make "ref" + val thread = make "thread" + val tuple = make "tuple" + val vector = make "vector" + val weak = make "weak" +end + +datatype z = datatype Kind.t +datatype z = datatype AdmitsEquality.t + +local + fun 'a make (prefix: string, + all: 'a list, + bits: 'a -> Bits.t, + equalsA: 'a * 'a -> bool, + memo: ('a -> t) -> ('a -> t), + admitsEquality: AdmitsEquality.t) = + let + val all = + Vector.fromListMap + (all, fn s => let + val name = concat [prefix, Bits.toString (bits s)] + in + {name = name, + size = s, + tycon = fromString name} + end) + val fromSize = + memo + (fn s => + case Vector.peek (all, fn {size = s', ...} => equalsA (s, s')) of + NONE => Error.bug "PrimTycons.make.fromSize" + | SOME {tycon, ...} => tycon) + fun is t = Vector.exists (all, fn {tycon = t', ...} => equals (t, t')) + fun de t = + case Vector.peek (all, fn {tycon = t', ...} => equals (t, t')) of + NONE => Error.bug "PrimTycons.make.de" + | SOME {size, ...} => size + val prims = + Vector.toListMap (all, fn {name, tycon, ...} => + {admitsEquality = admitsEquality, + kind = Arity 0, + name = name, + tycon = tycon}) + val all = Vector.map (all, fn {tycon, size, ...} => (tycon, size)) + in + (fromSize, all, is, de, prims) + end +in + val (char, _, isCharX, deCharX, primChars) = + let + open CharSize + in + make ("char", all, bits, equals, memoize, Sometimes) + end + val (int, ints, isIntX, deIntX, primInts) = + let + open IntSize + in + make ("int", all, bits, equals, memoize, Sometimes) + end + val (real, reals, isRealX, deRealX, primReals) = + let + open RealSize + in + make ("real", all, bits, equals, memoize, Never) + end + val (word, words, isWordX, deWordX, primWords) = + let + open WordSize + in + make ("word", all, bits, equals, memoize, Sometimes) + end +end + +val prims = + List.map ([(array, Arity 1, Always), + (arrow, Arity 2, Never), + (bool, Arity 0, Sometimes), + (cpointer, Arity 0, Always), + (exn, Arity 0, Never), + (intInf, Arity 0, Sometimes), + (list, Arity 1, Sometimes), + (reff, Arity 1, Always), + (thread, Arity 0, Never), + (tuple, Nary, Sometimes), + (vector, Arity 1, Sometimes), + (weak, Arity 1, Never)], + fn ((name, tycon), kind, admitsEquality) => + {admitsEquality = admitsEquality, + kind = kind, + name = name, + tycon = tycon}) + @ primChars @ primInts @ primReals @ primWords + +val array = #2 array +val arrow = #2 arrow +val bool = #2 bool +val cpointer = #2 cpointer +val exn = #2 exn +val intInf = #2 intInf +val list = #2 list +val reff = #2 reff +val thread = #2 thread +val tuple = #2 tuple +val vector = #2 vector +val weak = #2 weak + +val defaultChar = fn () => + case !Control.defaultChar of + "char8" => char CharSize.C8 + | _ => Error.bug "PrimTycons.defaultChar" +val defaultInt = fn () => + case !Control.defaultInt of + "int8" => int (IntSize.fromBits (Bits.fromInt 8)) + | "int16" => int (IntSize.fromBits (Bits.fromInt 16)) + | "int32" => int (IntSize.fromBits (Bits.fromInt 32)) + | "int64" => int (IntSize.fromBits (Bits.fromInt 64)) + | "intinf" => intInf + | _ => Error.bug "PrimTycons.defaultInt" +val defaultReal = fn () => + case !Control.defaultReal of + "real32" => real RealSize.R32 + | "real64" => real RealSize.R64 + | _ => Error.bug "PrimTycons.defaultReal" +val defaultWord = fn () => + case !Control.defaultWord of + "word8" => word (WordSize.fromBits (Bits.fromInt 8)) + | "word16" => word (WordSize.fromBits (Bits.fromInt 16)) + | "word32" => word (WordSize.fromBits (Bits.fromInt 32)) + | "word64" => word (WordSize.fromBits (Bits.fromInt 64)) + | _ => Error.bug "PrimTycons.defaultWord" + +val isBool = fn c => equals (c, bool) +val isCPointer = fn c => equals (c, cpointer) +val isIntX = fn c => equals (c, intInf) orelse isIntX c +val deIntX = fn c => if equals (c, intInf) then NONE else SOME (deIntX c) + +local + local + open Layout + in + val mayAlign = mayAlign + val seq = seq + val str = str + end + datatype z = datatype BindingStrength.t + datatype binding_context = + ArrowLhs + | ArrowRhs + | TupleElem + | Tyseq1 + | TyseqN + fun maybe bindingContext (l, ({isChar = _}, bindingStrength)) = + case (bindingStrength, bindingContext) of + (Unit, _) => l + | (Tuple, ArrowLhs) => l + | (Tuple, ArrowRhs) => l + | (Tuple, TyseqN) => l + | (Arrow, ArrowRhs) => l + | (Arrow, TyseqN) => l + | _ => Layout.paren l + fun normal (c: Layout.t, args: LayoutPretty.t vector, {isChar}) = + let + val lay = + case Vector.length args of + 0 => c + | 1 => seq [maybe Tyseq1 (Vector.first args), + str " ", c] + | _ => seq [Layout.tuple (Vector.toListMap (args, maybe TyseqN)), + str " ", c] + in + (lay, ({isChar = isChar}, Unit)) + end + +in + fun layoutAppPrettyNormal (c: Layout.t, args: LayoutPretty.t vector) = + normal (c, args, {isChar = false}) + fun layoutAppPretty (c: t, args: LayoutPretty.t vector, {layoutPretty}) = + if equals (c, arrow) + then (mayAlign [maybe ArrowLhs (Vector.first args), + seq [str "-> ", + maybe ArrowRhs (Vector.sub (args, 1))]], + ({isChar = false}, Arrow)) + else if equals (c, tuple) + then if Vector.isEmpty args + then LayoutPretty.simple (str "unit") + else (mayAlign (Layout.separateLeft + (Vector.toListMap (args, maybe TupleElem), "* ")), + ({isChar = false}, Tuple)) + else if equals (c, vector) + then if #isChar (#1 (#2 (Vector.first args))) + then LayoutPretty.simple (str "string") + else normal (layoutPretty c, args, {isChar = false}) + else normal (layoutPretty c, args, {isChar = equals (c, defaultChar ())}) +end + +fun layoutApp (c: t, args: Layout.t vector) = + let + local + open Layout + in + val empty = empty + val seq = seq + val str = str + end + val con = + if equals (c, tuple) andalso Vector.isEmpty args + then str "unit" + else (case List.peekMap (prims, fn {name, tycon, ...} => + if equals (c, tycon) then SOME name else NONE) of + SOME name => str name + | _ => layout c) + val args = + if Vector.isEmpty args + then empty + else seq [Layout.tuple (Vector.toList args), str " "] + in + seq [args, con] + end + +end diff -Nru mlton-20130715/mlton/atoms/prim-tycons.sig mlton-20210117+dfsg/mlton/atoms/prim-tycons.sig --- mlton-20130715/mlton/atoms/prim-tycons.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/prim-tycons.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,84 @@ +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature PRIM_TYCONS_SUBSTRUCTS = + sig + structure AdmitsEquality: ADMITS_EQUALITY + structure CharSize: CHAR_SIZE + structure IntSize: INT_SIZE + structure Kind: TYCON_KIND + structure RealSize: REAL_SIZE + structure WordSize: WORD_SIZE + end + +signature PRIM_TYCONS_STRUCTS = + sig + include PRIM_TYCONS_SUBSTRUCTS + + type t + + val fromString: string -> t + val equals: t * t -> bool + val layout: t -> Layout.t + end + +signature PRIM_TYCONS = + sig + include PRIM_TYCONS_SUBSTRUCTS + + type tycon + + val array: tycon + val arrow: tycon + val bool: tycon + val char: CharSize.t -> tycon + val cpointer: tycon + val deCharX: tycon -> CharSize.t + val defaultChar: unit -> tycon + val defaultInt: unit -> tycon + val defaultReal: unit -> tycon + val defaultWord: unit -> tycon + val deIntX: tycon -> IntSize.t option + val deRealX: tycon -> RealSize.t + val deWordX: tycon -> WordSize.t + val exn: tycon + val int: IntSize.t -> tycon + val ints: (tycon * IntSize.t) vector + val intInf: tycon + val isBool: tycon -> bool + val isCharX: tycon -> bool + val isCPointer: tycon -> bool + val isIntX: tycon -> bool + val isRealX: tycon -> bool + val isWordX: tycon -> bool + val layoutApp: tycon * Layout.t vector -> Layout.t + val list: tycon + val layoutAppPretty: + tycon + * LayoutPretty.t vector + * {layoutPretty: tycon -> Layout.t} + -> LayoutPretty.t + val layoutAppPrettyNormal: + Layout.t + * LayoutPretty.t vector + -> LayoutPretty.t + val prims: {admitsEquality: AdmitsEquality.t, + kind: Kind.t, + name: string, + tycon: tycon} list + val real: RealSize.t -> tycon + val reals: (tycon * RealSize.t) vector + val reff: tycon + val thread: tycon + val tuple: tycon + val vector: tycon + val weak: tycon + val word: WordSize.t -> tycon + val words: (tycon * WordSize.t) vector + end diff -Nru mlton-20130715/mlton/atoms/prod.fun mlton-20210117+dfsg/mlton/atoms/prod.fun --- mlton-20130715/mlton/atoms/prod.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/prod.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,101 @@ +(* Copyright (C) 2009,2014,2017-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor Prod (S: PROD_STRUCTS): PROD = +struct + +open S + +datatype 'a t = T of {elt: 'a, isMutable: bool} vector + +fun dest (T p) = p + +val make = T + +fun empty () = T (Vector.new0 ()) + +local + fun new1 {elt, isMutable} = T (Vector.new1 {elt = elt, isMutable = isMutable}) +in + fun new1Immutable elt = new1 {elt = elt, isMutable = false} + fun new1Mutable elt = new1 {elt = elt, isMutable = true} +end + +fun fold (p, b, f) = + Vector.fold (dest p, b, fn ({elt, ...}, b) => f (elt, b)) + +fun foreach (p, f) = Vector.foreach (dest p, f o #elt) + +fun isEmpty p = Vector.isEmpty (dest p) + +fun allAreImmutable (T v) = Vector.forall (v, not o #isMutable) +fun allAreMutable (T v) = Vector.forall (v, #isMutable) +fun someIsImmutable (T v) = Vector.exists (v, not o #isMutable) +fun someIsMutable (T v) = Vector.exists (v, #isMutable) + +fun first (T p) = Vector.first p +fun sub (T p, i) = Vector.sub (p, i) + +fun elt (p, i) = #elt (sub (p, i)) + +fun length p = Vector.length (dest p) + +val equals: 'a t * 'a t * ('a * 'a -> bool) -> bool = + fn (p1, p2, equals) => + Vector.equals (dest p1, dest p2, + fn ({elt = e1, isMutable = m1}, + {elt = e2, isMutable = m2}) => + m1 = m2 andalso equals (e1, e2)) + +val hash: 'a t * ('a -> word) -> word = + fn (p, hash) => + Hash.vectorMap (dest p, fn {elt = e, isMutable = m} => + Hash.combine (Bool.hash m, hash e)) + +fun layout (p, layoutElt) = + let + open Layout + in + seq [str "(", + (mayAlign o separateRight) + (Vector.toListMap (dest p, fn {elt, isMutable} => + if isMutable + then seq [layoutElt elt, str " mut"] + else layoutElt elt), + ","), + str ")"] + end + +fun parse (parseElt: 'a Parse.t): 'a t Parse.t = + let + open Parse + (* infix declarations for Parse.Ops *) + infix 1 <|> >>= + infix 3 <*> <* *> + infixr 4 <$> <$$> <$$$> <$$$$> <$ <$?> + in + make <$> + vector (parseElt >>= (fn elt => + optional (kw "mut") >>= (fn isMutable => + pure {elt = elt, isMutable = Option.isSome isMutable}))) + end + +val map: 'a t * ('a -> 'b) -> 'b t = + fn (p, f) => + make (Vector.map (dest p, fn {elt, isMutable} => + {elt = f elt, + isMutable = isMutable})) + +val keepAllMap: 'a t * ('a -> 'b option) -> 'b t = + fn (p, f) => + make (Vector.keepAllMap (dest p, fn {elt, isMutable} => + Option.map (f elt, fn elt => + {elt = elt, + isMutable = isMutable}))) +end diff -Nru mlton-20130715/mlton/atoms/prod.sig mlton-20210117+dfsg/mlton/atoms/prod.sig --- mlton-20130715/mlton/atoms/prod.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/prod.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ +(* Copyright (C) 2009,2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature PROD_STRUCTS = + sig + end + +signature PROD = + sig + type 'a t + + val allAreImmutable: 'a t -> bool + val allAreMutable: 'a t -> bool + val dest: 'a t -> {elt: 'a, isMutable: bool} vector + val elt: 'a t * int -> 'a + val equals: 'a t * 'a t * ('a * 'a -> bool) -> bool + val empty: unit -> 'a t + val first: 'a t -> {elt: 'a, isMutable: bool} + val fold: 'a t * 'b * ('a * 'b -> 'b) -> 'b + val foreach: 'a t * ('a -> unit) -> unit + val hash: 'a t * ('a -> word) -> word + val isEmpty: 'a t -> bool + val keepAllMap: 'a t * ('a -> 'b option) -> 'b t + val layout: 'a t * ('a -> Layout.t) -> Layout.t + val length: 'a t -> int + val make: {elt: 'a, isMutable: bool} vector -> 'a t + val map: 'a t * ('a -> 'b) -> 'b t + val new1Immutable: 'a -> 'a t + val new1Mutable: 'a -> 'a t + val parse: 'a Parse.t -> 'a t Parse.t + val someIsImmutable: 'a t -> bool + val someIsMutable: 'a t -> bool + val sub: 'a t * int -> {elt: 'a, isMutable: bool} + end diff -Nru mlton-20130715/mlton/atoms/profile-exp.fun mlton-20210117+dfsg/mlton/atoms/profile-exp.fun --- mlton-20130715/mlton/atoms/profile-exp.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/profile-exp.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -31,8 +31,8 @@ val leave = newHash () in val hash = - fn Enter si => Word.xorb (enter, SourceInfo.hash si) - | Leave si => Word.xorb (leave, SourceInfo.hash si) + fn Enter si => Hash.combine (enter, SourceInfo.hash si) + | Leave si => Hash.combine (leave, SourceInfo.hash si) end end diff -Nru mlton-20130715/mlton/atoms/profile-exp.sig mlton-20210117+dfsg/mlton/atoms/profile-exp.sig --- mlton-20130715/mlton/atoms/profile-exp.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/profile-exp.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/atoms/profile-label.fun mlton-20210117+dfsg/mlton/atoms/profile-label.fun --- mlton-20130715/mlton/atoms/profile-label.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/profile-label.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -17,17 +17,20 @@ fun make f (T r) = f r in val plist = make #plist + val uniq = make #uniq end + fun equals (pl1, pl2) = + PropertyList.equals (plist pl1, plist pl2) + local - val c = Counter.new 0 + val c = Counter.generator 0 in fun new () = T {plist = PropertyList.new (), - uniq = Counter.next c} + uniq = c ()} end - fun toString (T {uniq, ...}) = - concat ["MLtonProfile", Int.toString uniq] + fun toString pl = concat ["MLtonProfile", Int.toString (uniq pl)] val layout = Layout.str o toString diff -Nru mlton-20130715/mlton/atoms/profile-label.sig mlton-20210117+dfsg/mlton/atoms/profile-label.sig --- mlton-20130715/mlton/atoms/profile-label.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/profile-label.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -14,6 +15,7 @@ type t val clear: t -> unit + val equals: t * t -> bool val layout: t -> Layout.t val new: unit -> t val plist: t -> PropertyList.t diff -Nru mlton-20130715/mlton/atoms/real-size.fun mlton-20210117+dfsg/mlton/atoms/real-size.fun --- mlton-20130715/mlton/atoms/real-size.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/real-size.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,55 @@ +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor RealSize (S: REAL_SIZE_STRUCTS): REAL_SIZE = +struct + +open S + +datatype t = R32 | R64 + +val all = [R32, R64] + +val equals: t * t -> bool = op = + +local + val r32 = Random.word () + val r64 = Random.word () +in +val hash: t -> word = + fn R32 => r32 + | R64 => r64 +end + +val memoize: (t -> 'a) -> t -> 'a = + fn f => + let + val r32 = f R32 + val r64 = f R64 + in + fn R32 => r32 + | R64 => r64 + end + +val toString = + fn R32 => "32" + | R64 => "64" + +val bytes: t -> Bytes.t = + fn R32 => Bytes.fromInt 4 + | R64 => Bytes.fromInt 8 + +val bits: t -> Bits.t = Bytes.toBits o bytes + +val compare = + fn (R32, R32) => EQUAL + | (R32, R64) => LESS + | (R64, R32) => GREATER + | (R64, R64) => EQUAL + +end diff -Nru mlton-20130715/mlton/atoms/real-size.sig mlton-20210117+dfsg/mlton/atoms/real-size.sig --- mlton-20130715/mlton/atoms/real-size.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/real-size.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,27 @@ +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature REAL_SIZE_STRUCTS = + sig + end + +signature REAL_SIZE = + sig + include REAL_SIZE_STRUCTS + + datatype t = R32 | R64 + + val all: t list + val bits: t -> Bits.t + val bytes: t -> Bytes.t + val compare: t * t -> Relation.t + val equals: t * t -> bool + val hash: t -> word + val memoize: (t -> 'a) -> t -> 'a + val toString: t -> string + end diff -Nru mlton-20130715/mlton/atoms/real-x.fun mlton-20210117+dfsg/mlton/atoms/real-x.fun --- mlton-20130715/mlton/atoms/real-x.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/real-x.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009,2011-2012 Matthew Fluet. +(* Copyright (C) 2009,2011-2012,2018-2020 Matthew Fluet. * Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -27,6 +27,16 @@ R32 => Real32 0.0 | R64 => Real64 0.0 +fun negInf s = + case s of + R32 => Real32 PR32.negInf + | R64 => Real64 PR64.negInf + +fun posInf s = + case s of + R32 => Real32 PR32.posInf + | R64 => Real64 PR64.posInf + fun size r = case r of Real32 _ => R32 @@ -75,14 +85,33 @@ end | _ => false -fun toString r = - case r of - Real32 r => Real32.format (r, Real32.Format.exact) - | Real64 r => Real64.format (r, Real64.Format.exact) +fun toString (r, {suffix}) = + let + val doit = + if suffix + then fn (r, s) => r ^ s + else fn (r, _) => r + in + case r of + Real32 r => doit (Real32.format (r, Real32.Format.exact), ":r32") + | Real64 r => doit (Real64.format (r, Real64.Format.exact), ":r64") + end val layout = Layout.str o toString -val hash = String.hash o toString +val parse = + let + open Parse + infix 1 <|> + infix 3 <* + infixr 4 <$> + in + (Real64 <$> (fromScan Real64.scan <* str ":r64")) + <|> + (Real32 <$> (fromScan Real32.scan <* str ":r32")) + end + +fun hash r = String.hash (toString (r, {suffix = true})) (* Disable constant folding when it might change the results. *) fun disableCF () = @@ -262,12 +291,11 @@ end local - fun doit (R {bits, toBytes, subVec, ...}) x = let - in - (SOME o WordX.fromIntInf) - (P.LargeWord.toLargeInt (subVec (toBytes x, 0)), - WordX.WordSize.fromBits bits) - end handle _ => NONE + fun doit (R {bits, toBytes, subVec, ...}) x = + ((SOME o WordX.fromIntInf) + (P.LargeWord.toLargeInt (subVec (toBytes x, 0)), + WordX.WordSize.fromBits bits)) + handle _ => NONE in fun castToWord x = if disableCF () diff -Nru mlton-20130715/mlton/atoms/real-x.sig mlton-20210117+dfsg/mlton/atoms/real-x.sig --- mlton-20130715/mlton/atoms/real-x.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/real-x.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2018-2019 Matthew Fluet. * Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -43,7 +43,7 @@ val exp: t -> t option val fromIntInf: IntInf.t * RealSize.t -> t option val hash: t -> word - val layout: t -> Layout.t + val layout: t * {suffix: bool} -> Layout.t val le: t * t -> bool option val ln: t -> t option val log10: t -> t option @@ -53,12 +53,15 @@ val muladd: t * t * t -> t option val mulsub: t * t * t -> t option val neg: t -> t option + val negInf: RealSize.t -> t + val parse: t Parse.t + val posInf: RealSize.t -> t val qequal: t * t -> bool option val sin: t -> t option val size: t -> RealSize.t val sqrt: t -> t option val sub: t * t -> t option val tan: t -> t option - val toString: t -> string + val toString: t * {suffix: bool} -> string val zero: RealSize.t -> t end diff -Nru mlton-20130715/mlton/atoms/record.fun mlton-20210117+dfsg/mlton/atoms/record.fun --- mlton-20130715/mlton/atoms/record.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/record.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,131 @@ +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +(* empty tuple is also a record *) + +functor Record (S: RECORD_STRUCTS): RECORD = +struct + +open S + +datatype 'a t = + Tuple of 'a vector + | Record of (Field.t * 'a) vector + +val tuple = Tuple + +fun toVector r = + case r of + Tuple v => Vector.mapi (v, fn (i, x) => (Field.Int i, x)) + | Record r => r + +fun detupleOpt (r: 'a t): 'a vector option = + case r of + Tuple t => SOME t + | Record _ => NONE + +fun sort v = + QuickSort.sortVector (v, fn ((s, _), (s', _)) => Field.<= (s, s')) + +fun fromVector v = + let + fun isTuple v : bool = + Vector.foralli + (v, fn (i, (f, _)) => + case f of + Field.Int i' => Int.equals (i, i') + | _ => false) + val v = if isSorted then sort v else v + in + if isTuple v andalso Vector.length v <> 1 + then Tuple (Vector.map (v, #2)) + else Record v + end + +fun unzip r = Vector.unzip (toVector r) +fun zip z = fromVector (Vector.zip z) + +val peek: 'a t * Field.t -> 'a option = + fn (r, f) => + case r of + Record r => + (case Vector.peek (r, fn (f', _) => Field.equals (f, f')) of + NONE => NONE + | SOME (_, x) => SOME x) + | Tuple t => + if Vector.isEmpty t + then NONE + else (case f of + Field.Int i => + if 0 <= i andalso i < Vector.length t + then SOME (Vector.sub (t, i)) + else NONE + | Field.Symbol _ => NONE) + +fun domain r = + case r of + Tuple v => Vector.mapi (v, fn (i, _) => Field.Int i) + | Record r => Vector.map (r, #1) + +fun range r = + case r of + Tuple t => t + | Record r => Vector.map (r, #2) + +fun exists (r, p) = + case r of + Tuple xs => Vector.exists (xs, p) + | Record r => Vector.exists (r, fn (_, x) => p x) + +fun forall (r, p) = not (exists (r, not o p)) + +fun fold (r: 'a t, b: 'b, f: 'a * 'b -> 'b): 'b = + case r of + Tuple xs => Vector.fold (xs, b, f) + | Record r => Vector.fold (r, b, fn ((_, x), b) => f (x, b)) + +fun map (r: 'a t, f: 'a -> 'b): 'b t = + case r of + Tuple xs => Tuple (Vector.map (xs, f)) + | Record r => Record (Vector.map (r, fn (field, a) => (field, f a))) + +fun foreach (r: 'a t, f: 'a -> unit): unit = + case r of + Tuple xs => Vector.foreach (xs, f) + | Record r => Vector.foreach (r, f o #2) + +fun change (r: 'a t, f: 'a vector -> 'b vector * 'c): 'b t * 'c = + case r of + Tuple xs => let val (ys, c) = f xs + in (Tuple ys, c) + end + | Record r => let val (fs, xs) = Vector.unzip r + val (ys, c) = f xs + in (Record (Vector.zip (fs, ys)), c) + end + +fun layout {record, layoutTuple, separator, extra, layoutElt} = + case (record, extra) of + (Tuple xs, "") => layoutTuple xs + | _ => + let + val r = toVector record + open Layout + in seq [str "{", + mayAlign (separateRight (Vector.toListMap + (r, fn (f, x) => + seq [Field.layout f, + str separator, + layoutElt x]), + ",")), + str extra, + str "}"] + end + +end diff -Nru mlton-20130715/mlton/atoms/record.sig mlton-20210117+dfsg/mlton/atoms/record.sig --- mlton-20130715/mlton/atoms/record.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/record.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,48 @@ +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature RECORD_STRUCTS = + sig + val isSorted: bool + structure Field: FIELD + end + +signature RECORD = + sig + include RECORD_STRUCTS + + type 'a t + + (* Create a record with the same fields but a new range. + * Also return some additional info. + *) + val change: 'a t * ('a vector -> 'b vector * 'c) -> 'b t * 'c + (* detuple r returns the components, if r is a tuple *) + val detupleOpt: 'a t -> 'a vector option + val domain: 'a t -> Field.t vector + val exists: 'a t * ('a -> bool) -> bool + val fold: 'a t * 'b * ('a * 'b -> 'b) -> 'b + val forall: 'a t * ('a -> bool) -> bool + val foreach: 'a t * ('a -> unit) -> unit + val fromVector: (Field.t * 'a) vector -> 'a t + val layout: {record: 'a t, + separator: string, + extra: string, + layoutTuple: 'a vector -> Layout.t, + layoutElt: 'a -> Layout.t} -> Layout.t + val map: 'a t * ('a -> 'b) -> 'b t + val peek: 'a t * Field.t -> 'a option + (* range {1 = a, 2 = b, 3 = c} returns [a, b, c] *) + val range: 'a t -> 'a vector + val toVector: 'a t -> (Field.t * 'a) vector + (* tuple [a, b, c] creates {1 = a, 2 = b, 3 = c} *) + val tuple: 'a vector -> 'a t + val unzip: 'a t -> Field.t vector * 'a vector + val zip: Field.t vector * 'a vector -> 'a t + end diff -Nru mlton-20130715/mlton/atoms/return.fun mlton-20210117+dfsg/mlton/atoms/return.fun --- mlton-20130715/mlton/atoms/return.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/return.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,95 @@ +(* Copyright (C) 2009,2017,2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor Return (S: RETURN_STRUCTS): RETURN = + struct + open S + + datatype t = + Dead + | NonTail of {cont: Label.t, + handler: Handler.t} + | Tail + + fun layout r = + let + open Layout + in + case r of + Dead => str "Dead" + | NonTail {cont, handler} => + seq [str "NonTail ", + Layout.record + [("cont", Label.layout cont), + ("handler", Handler.layout handler)]] + | Tail => str "Tail" + end + + fun equals (r, r'): bool = + case (r, r') of + (Dead, Dead) => true + | (NonTail {cont = c, handler = h}, + NonTail {cont = c', handler = h'}) => + Label.equals (c, c') andalso Handler.equals (h, h') + | (Tail, Tail) => true + | _ => false + + fun foldLabel (r: t, a, f) = + case r of + Dead => a + | NonTail {cont, handler} => + Handler.foldLabel (handler, f (cont, a), f) + | Tail => a + + fun foreachLabel (r, f) = foldLabel (r, (), f o #1) + + fun foreachHandler (r, f) = + case r of + Dead => () + | NonTail {handler, ...} => Handler.foreachLabel (handler, f) + | Tail => () + + fun map (r, f) = + case r of + Dead => Dead + | NonTail {cont, handler} => + NonTail {cont = f cont, + handler = Handler.map (handler, f)} + | Tail => Tail + + fun compose (r, r') = + case r' of + Dead => Dead + | NonTail {cont, handler} => + NonTail + {cont = cont, + handler = (case handler of + Handler.Caller => + (case r of + Dead => Handler.Caller + | NonTail {handler, ...} => handler + | Tail => Handler.Caller) + | Handler.Dead => handler + | Handler.Handle _ => handler)} + | Tail => r + + local + val newHash = Random.word + val dead = newHash () + val nonTail = newHash () + val tail = newHash () + in + fun hash r = + case r of + Dead => dead + | NonTail {cont, handler} => + Hash.combine3 (nonTail, Label.hash cont, Handler.hash handler) + | Tail => tail + end + end diff -Nru mlton-20130715/mlton/atoms/return.sig mlton-20210117+dfsg/mlton/atoms/return.sig --- mlton-20130715/mlton/atoms/return.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/return.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,35 @@ +(* Copyright (C) 2009,2017,2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature RETURN_STRUCTS = + sig + structure Label: LABEL + structure Handler: HANDLER + sharing Label = Handler.Label + end + +signature RETURN = + sig + include RETURN_STRUCTS + + datatype t = + Dead + | NonTail of {cont: Label.t, + handler: Handler.t} + | Tail + + val compose: t * t -> t + val equals: t * t -> bool + val foldLabel: t * 'a * (Label.t * 'a -> 'a) -> 'a + val foreachHandler: t * (Label.t -> unit) -> unit + val foreachLabel: t * (Label.t -> unit) -> unit + val hash: t -> word + val layout: t -> Layout.t + val map: t * (Label.t -> Label.t) -> t + end diff -Nru mlton-20130715/mlton/atoms/source-info.fun mlton-20210117+dfsg/mlton/atoms/source-info.fun --- mlton-20130715/mlton/atoms/source-info.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/source-info.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -73,22 +73,13 @@ end local - val set: {hash: word, - name: string, - sourceInfo: t} HashSet.t = - HashSet.new {hash = #hash} + val table: (string, t) HashTable.t = + HashTable.new {equals = String.equals, + hash = String.hash} in fun fromC (name: string) = - let - val hash = String.hash name - in - #sourceInfo - (HashSet.lookupOrInsert - (set, hash, fn {hash = h, ...} => hash = h, - fn () => {hash = hash, - name = name, - sourceInfo = new (C name)})) - end + HashTable.lookupOrInsert + (table, name, fn () => new (C name)) end fun function {name, region} = @@ -125,7 +116,7 @@ | _ => false val gc = fromC "gc" -val gcArrayAllocate = fromC "GC_arrayAllocate" +val gcSequenceAllocate = fromC "GC_sequenceAllocate" val main = fromC "main" val polyEqual = fromC "poly-equal" val polyHash = fromC "poly-hash" diff -Nru mlton-20130715/mlton/atoms/source-info.sig mlton-20210117+dfsg/mlton/atoms/source-info.sig --- mlton-20130715/mlton/atoms/source-info.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/source-info.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2003-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -20,7 +20,7 @@ val equals: t * t -> bool val file: t -> File.t option val gc: t - val gcArrayAllocate: t + val gcSequenceAllocate: t val hash: t -> word val fromC: string -> t val function: {name: string list, diff -Nru mlton-20130715/mlton/atoms/source-maps.fun mlton-20210117+dfsg/mlton/atoms/source-maps.fun --- mlton-20130715/mlton/atoms/source-maps.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/source-maps.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,157 @@ +(* Copyright (C) 2009,2014,2016-2017,2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor SourceMaps (S: SOURCE_MAPS_STRUCTS): SOURCE_MAPS = +struct + +open S + +datatype t = + T of {profileLabelInfos: {profileLabel: ProfileLabel.t, + sourceSeqIndex: int} vector, + sourceNames: string vector, + sourceSeqs: {sourceIndex: int} vector vector, + sources: {sourceNameIndex: int, + successorSourceSeqIndex: int} vector} + +val empty = T {profileLabelInfos = Vector.new0 (), + sourceNames = Vector.new0 (), + sourceSeqs = Vector.new0 (), + sources = Vector.new0 ()} + +fun clear (T {profileLabelInfos, ...}) = + Vector.foreach (profileLabelInfos, ProfileLabel.clear o #profileLabel) + +fun layout (T {profileLabelInfos, sourceNames, sourceSeqs, sources}) = + Layout.record + [("profileLabelInfos", + Vector.layout (fn {profileLabel, sourceSeqIndex} => + Layout.record + [("profileLabel", ProfileLabel.layout profileLabel), + ("sourceSeqIndex", Int.layout sourceSeqIndex)]) + profileLabelInfos), + ("sourceNames", Vector.layout String.layout sourceNames), + ("sourceSeqs", + Vector.layout (Vector.layout (fn {sourceIndex} => + Layout.record + [("sourceIndex", Int.layout sourceIndex)])) + sourceSeqs), + ("sources", + Vector.layout (fn {sourceNameIndex, successorSourceSeqIndex} => + Layout.record [("sourceNameIndex", Int.layout sourceNameIndex), + ("successorSourceSeqIndex", Int.layout successorSourceSeqIndex)]) + sources)] + +fun layouts (pi, output) = output (layout pi) + +fun check (T {profileLabelInfos, sourceNames, sourceSeqs, sources}): bool = + if !Control.profile = Control.ProfileNone + then Vector.isEmpty profileLabelInfos + andalso Vector.isEmpty sourceNames + andalso Vector.isEmpty sourceSeqs + andalso Vector.isEmpty sources + else let + val sourceNamesLength = Vector.length sourceNames + val sourceSeqsLength = Vector.length sourceSeqs + val sourcesLength = Vector.length sources + val {get = getSeen, destroy = destSeen, ...} = + Property.destGet + (ProfileLabel.plist, Property.initFun (fn _ => ref false)) + in + (Vector.forall + (profileLabelInfos, fn {profileLabel, sourceSeqIndex, ...} => + let + val seen = getSeen profileLabel + in + not (!seen) before (seen := true) + andalso 0 <= sourceSeqIndex andalso sourceSeqIndex < sourceSeqsLength + end) + before destSeen ()) + andalso (Vector.forall + (sourceSeqs, fn v => + Vector.forall + (v, fn {sourceIndex} => + 0 <= sourceIndex andalso sourceIndex < sourcesLength))) + andalso (Vector.forall + (sources, fn {sourceNameIndex, successorSourceSeqIndex} => + 0 <= sourceNameIndex andalso sourceNameIndex < sourceNamesLength + andalso + 0 <= successorSourceSeqIndex + andalso successorSourceSeqIndex < sourceSeqsLength)) + end + +fun checkSourceSeqIndex (T {sourceSeqs, ...}, sourceSeqIndex) = + 0 <= sourceSeqIndex andalso sourceSeqIndex < Vector.length sourceSeqs +fun checkProfileLabel (T {profileLabelInfos, ...}) = + let + val {get = getSeen, destroy = destSeen, ...} = + Property.destGet + (ProfileLabel.plist, Property.initFun (fn _ => ref false)) + in + (fn profileLabel => + let + val seen = getSeen profileLabel + in + not (!seen) before (seen := true) + andalso Vector.exists (profileLabelInfos, fn {profileLabel = profileLabel', ...} => + ProfileLabel.equals (profileLabel, profileLabel')) + end, + fn () => + let + in + Vector.forall (profileLabelInfos, ! o getSeen o #profileLabel) + before destSeen () + end) + end + +fun modify (T {profileLabelInfos, sourceNames, sourceSeqs, sources}) + : {newProfileLabel: ProfileLabel.t -> ProfileLabel.t, + delProfileLabel: ProfileLabel.t -> unit, + getSourceMaps: unit -> t} = + let + val {get: ProfileLabel.t -> int, set, ...} = + Property.getSet + (ProfileLabel.plist, + Property.initRaise ("SourceMaps.extend", ProfileLabel.layout)) + val _ = + Vector.foreach + (profileLabelInfos, fn {profileLabel, sourceSeqIndex} => + set (profileLabel, sourceSeqIndex)) + val new = ref [] + fun newProfileLabel pl = + let + val sourceSeqIndex = get pl + val pl' = ProfileLabel.new () + val _ = set (pl', sourceSeqIndex) + val _ = List.push (new, {profileLabel = pl', + sourceSeqIndex = sourceSeqIndex}) + in + pl' + end + fun delProfileLabel pl = set (pl, ~1) + fun getSourceMaps () = + let + val profileLabelInfos = + Vector.concat [profileLabelInfos, Vector.fromList (!new)] + val profileLabelInfos = + Vector.keepAll (profileLabelInfos, fn {profileLabel, ...} => + get profileLabel <> ~1) + val pi = T {profileLabelInfos = profileLabelInfos, + sourceNames = sourceNames, + sourceSeqs = sourceSeqs, + sources = sources} + in + Assert.assert ("SourceMaps.getSourceMaps", fn () => check pi); + pi + end + in + {newProfileLabel = newProfileLabel, + delProfileLabel = delProfileLabel, + getSourceMaps = getSourceMaps} + end +end diff -Nru mlton-20130715/mlton/atoms/source-maps.sig mlton-20210117+dfsg/mlton/atoms/source-maps.sig --- mlton-20130715/mlton/atoms/source-maps.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/source-maps.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,50 @@ +(* Copyright (C) 2009,2014,2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature SOURCE_MAPS_STRUCTS = + sig + structure ProfileLabel: PROFILE_LABEL + end + +signature SOURCE_MAPS = + sig + include SOURCE_MAPS_STRUCTS + + datatype t = + T of {(* the collection of profile labels embedded in output program + * paired with an index into sourceSeqs of the sequence of source + * names corresponding to the code pointer; only used with + * ProfileTimeLabel. + *) + profileLabelInfos: {profileLabel: ProfileLabel.t, + sourceSeqIndex: int} vector, + (* the collection of source names from the program. + *) + sourceNames: string vector, + (* each entry describes a sequence of source names as a sequence + * of indices into sources. + *) + sourceSeqs: {sourceIndex: int} vector vector, + (* each entry describes a source name and successor sources as + * the pair of an index into sourceNames and an index into + * sourceSeqs. + *) + sources: {sourceNameIndex: int, + successorSourceSeqIndex: int} vector} + + val empty: t + val check: t -> bool + val checkSourceSeqIndex: t * int -> bool + val checkProfileLabel: t -> (ProfileLabel.t -> bool) * (unit -> bool) + val clear: t -> unit + val layouts: t * (Layout.t -> unit) -> unit + val layout: t -> Layout.t + val modify: t -> {newProfileLabel: ProfileLabel.t -> ProfileLabel.t, + delProfileLabel: ProfileLabel.t -> unit, + getSourceMaps: unit -> t} + end diff -Nru mlton-20130715/mlton/atoms/sources.cm mlton-20210117+dfsg/mlton/atoms/sources.cm --- mlton-20130715/mlton/atoms/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -1,93 +1,133 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library -signature AST +signature ADMITS_EQUALITY signature ATOMS -signature ID +signature CHAR_SIZE +signature CONST signature C_FUNCTION signature C_TYPE -signature CON -signature CONST -signature CONST_TYPE -signature FFI -signature GENERIC_SCHEME -signature ID signature HASH_TYPE +signature ID +signature INT_SIZE signature LABEL signature PRIM -signature PROFILE_EXP +signature PRIM_CONS +signature PRIM_TYCONS +signature PROD signature PROFILE_LABEL +signature REAL_SIZE signature REAL_X signature RECORD -signature SOURCE_INFO +signature SYMBOL signature TYCON +signature TYCON_KIND signature TYPE_OPS signature TYVAR -signature VAR +signature WORD_SIZE signature WORD_X signature WORD_X_VECTOR +structure LayoutPretty + +functor PrimCons +functor PrimTycons functor Atoms functor Id functor GenericScheme functor HashType functor TypeOps -functor UseName is ../../lib/mlton/sources.cm -../ast/sources.cm ../control/sources.cm -id.sig -id.fun -(* Windows doesn't like files named con, so use con- instead. *) -con-.sig -con-.fun +layout-pretty.sml +char-size.sig +char-size.fun +int-size.sig +int-size.fun +real-size.sig +real-size.fun +word-size.sig +word-size.fun word-x.sig word-x.fun -real-x.sig -real-x.fun word-x-vector.sig word-x-vector.fun +real-x.sig +real-x.fun +c-symbol-scope.sig +c-symbol-scope.fun c-type.sig c-type.fun -label.sig +c-symbol.sig +c-symbol.fun c-function.sig c-function.fun -const-type.sig -const-type.fun const.sig const.fun -prim.sig -prim.fun +symbol.sig +symbol.fun +field.sig +field.fun +record.sig +record.fun +id.sig +id.fun +tyvar.sig +tyvar.fun +admits-equality.sig +admits-equality.fun +tycon-kind.sig +tycon-kind.fun +prim-tycons.sig +prim-tycons.fun +tycon.sig +tycon.fun +prim-cons.sig +prim-cons.fun +(* Windows doesn't like files named con, so use con- instead. *) +con-.sig +con-.fun +var.sig +var.fun +func.sig +label.sig ffi.sig ffi.fun -func.sig -generic-scheme.sig -generic-scheme.fun -profile-label.sig -profile-label.fun +cases.sig +cases.fun +prim.sig +prim.fun +prod.sig +prod.fun +handler.sig +handler.fun +return.sig +return.fun source-info.sig source-info.fun +profile-label.sig +profile-label.fun profile-exp.sig profile-exp.fun -tycon.sig -tycon.fun -type-ops.sig -type-ops.fun -use-name.fun -var.sig -var.fun +source-maps.sig +source-maps.fun atoms.sig atoms.fun +generic-scheme.sig +generic-scheme.fun +type-ops.sig +type-ops.fun hash-type.sig hash-type.fun diff -Nru mlton-20130715/mlton/atoms/sources.mlb mlton-20210117+dfsg/mlton/atoms/sources.mlb --- mlton-20130715/mlton/atoms/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,84 +1,132 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) local ../../lib/mlton/sources.mlb - ../ast/sources.mlb ../control/sources.mlb - id.sig - id.fun - (* Windows doesn't like files named con, so use con- instead. *) - con-.sig - con-.fun + layout-pretty.sml + + char-size.sig + char-size.fun + int-size.sig + int-size.fun + real-size.sig + real-size.fun + word-size.sig + word-size.fun word-x.sig word-x.fun - real-x.sig - real-x.fun word-x-vector.sig word-x-vector.fun + real-x.sig + real-x.fun + c-symbol-scope.sig + c-symbol-scope.fun c-type.sig c-type.fun - label.sig + c-symbol.sig + c-symbol.fun c-function.sig c-function.fun - const-type.sig - const-type.fun const.sig const.fun - prim.sig - prim.fun + symbol.sig + symbol.fun + field.sig + field.fun + record.sig + record.fun + id.sig + id.fun + tyvar.sig + tyvar.fun + admits-equality.sig + admits-equality.fun + tycon-kind.sig + tycon-kind.fun + prim-tycons.sig + prim-tycons.fun + tycon.sig + tycon.fun + prim-cons.sig + prim-cons.fun + (* Windows doesn't like files named con, so use con- instead. *) + con-.sig + con-.fun + var.sig + var.fun + func.sig + label.sig ffi.sig ffi.fun - func.sig - generic-scheme.sig - generic-scheme.fun - profile-label.sig - profile-label.fun + cases.sig + cases.fun + prim.sig + prim.fun + prod.sig + prod.fun + handler.sig + handler.fun + return.sig + return.fun source-info.sig source-info.fun + profile-label.sig + profile-label.fun profile-exp.sig profile-exp.fun - tycon.sig - tycon.fun - type-ops.sig - type-ops.fun - use-name.fun - var.sig - var.fun + source-maps.sig + source-maps.fun atoms.sig atoms.fun + generic-scheme.sig + generic-scheme.fun + type-ops.sig + type-ops.fun hash-type.sig hash-type.fun in - signature AST + signature ADMITS_EQUALITY signature ATOMS - signature ID + signature CHAR_SIZE + signature CONST signature C_FUNCTION signature C_TYPE - signature CONST - signature CONST_TYPE - signature FFI - signature ID signature HASH_TYPE + signature ID + signature INT_SIZE signature LABEL signature PRIM + signature PRIM_CONS + signature PRIM_TYCONS + signature PROD signature PROFILE_LABEL + signature REAL_SIZE + signature REAL_X signature RECORD + signature SYMBOL signature TYCON + signature TYCON_KIND signature TYPE_OPS + signature TYVAR + signature WORD_SIZE signature WORD_X signature WORD_X_VECTOR + + structure LayoutPretty + functor PrimCons + functor PrimTycons functor Atoms functor Id functor GenericScheme functor HashType functor TypeOps - functor UseName end diff -Nru mlton-20130715/mlton/atoms/symbol.fun mlton-20210117+dfsg/mlton/atoms/symbol.fun --- mlton-20130715/mlton/atoms/symbol.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/symbol.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,53 @@ +(* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor Symbol (S: SYMBOL_STRUCTS): SYMBOL = +struct + +open S + +datatype t = T of {name: string, + plist: PropertyList.t} + +local + fun make f (T r) = f r +in + val plist = make #plist + val name = make #name +end + +val table: (string, t) HashTable.t = + HashTable.new {equals = String.equals, hash = String.hash} + +fun fromString s = + HashTable.lookupOrInsert + (table, s, fn () => + T {name = s, + plist = PropertyList.new ()}) + +fun foreach f = HashTable.foreach (table, f) + +val toString = name + +val layout = Layout.str o toString + +fun equals (s, s') = PropertyList.equals (plist s, plist s') + +local + fun make f (s, s') = f (name s, name s') +in + val op <= = make String.<= + val compare = make String.compare +end + +val asterisk = fromString "*" +val bogus = fromString "" +val equal = fromString "=" +val itt = fromString "it" +val unit = fromString "unit" + +end diff -Nru mlton-20130715/mlton/atoms/symbol.sig mlton-20210117+dfsg/mlton/atoms/symbol.sig --- mlton-20130715/mlton/atoms/symbol.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/symbol.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ +(* Copyright (C) 2009 Matthew Fluet. + * Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature SYMBOL_STRUCTS = + sig + end + +signature SYMBOL = + sig + include SYMBOL_STRUCTS + + type t + + (* <= is alphabetical order *) + val <= : t * t -> bool + val asterisk: t + val bogus: t + val compare: t * t -> Relation.t + val equal: t + val equals: t * t -> bool + val foreach: (t -> unit) -> unit + val fromString: string -> t + val itt: t + val layout: t -> Layout.t + val plist: t -> PropertyList.t + val toString: t -> string + val unit: t + end diff -Nru mlton-20130715/mlton/atoms/tycon.fun mlton-20210117+dfsg/mlton/atoms/tycon.fun --- mlton-20130715/mlton/atoms/tycon.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/tycon.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -14,9 +15,6 @@ structure Id = Id (val noname = "t") open Id -structure AdmitsEquality = AdmitsEquality () -structure Kind = TyconKind () - structure P = PrimTycons (structure AdmitsEquality = AdmitsEquality structure CharSize = CharSize structure IntSize = IntSize @@ -26,10 +24,6 @@ open Id) open P -val setPrintName = - Trace.trace2 ("Tycon.setPrintName", layout, String.layout, Unit.layout) - setPrintName - fun stats () = let open Layout @@ -37,7 +31,7 @@ align (List.map (prims, fn {tycon = c, ...} => seq [layout c, str " size is ", - Int.layout (MLton.size c), + IntInf.layout (MLton.size c), str " plist length is ", Int.layout (PropertyList.length (plist c))])) end diff -Nru mlton-20130715/mlton/atoms/tycon-kind.fun mlton-20210117+dfsg/mlton/atoms/tycon-kind.fun --- mlton-20130715/mlton/atoms/tycon-kind.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/tycon-kind.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,28 @@ +(* Copyright (C) 2003-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor TyconKind (S: TYCON_KIND_STRUCTS): TYCON_KIND = +struct + +open S + +datatype t = + Arity of int + | Nary + +val layout = + fn Arity n => Int.layout n + | Nary => Layout.str "n-ary" + +val equals = + fn (Arity n, Arity n') => n = n' + | (Nary, Nary) => true + | _ => false + +val equals = Trace.trace2 ("TyconKind.equals", layout, layout, Bool.layout) equals + +end diff -Nru mlton-20130715/mlton/atoms/tycon-kind.sig mlton-20210117+dfsg/mlton/atoms/tycon-kind.sig --- mlton-20130715/mlton/atoms/tycon-kind.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/tycon-kind.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,23 @@ +(* Copyright (C) 2009 Matthew Fluet. + * Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature TYCON_KIND_STRUCTS = + sig + end + +signature TYCON_KIND = + sig + include TYCON_KIND_STRUCTS + + datatype t = + Arity of int + | Nary + + val equals: t * t -> bool + val layout: t -> Layout.t + end diff -Nru mlton-20130715/mlton/atoms/tycon.sig mlton-20210117+dfsg/mlton/atoms/tycon.sig --- mlton-20130715/mlton/atoms/tycon.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/tycon.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,15 +1,18 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature TYCON_STRUCTS = sig + structure AdmitsEquality: ADMITS_EQUALITY structure CharSize: CHAR_SIZE structure IntSize: INT_SIZE + structure Kind: TYCON_KIND structure RealSize: REAL_SIZE structure WordSize: WORD_SIZE end diff -Nru mlton-20130715/mlton/atoms/type-ops.fun mlton-20210117+dfsg/mlton/atoms/type-ops.fun --- mlton-20130715/mlton/atoms/type-ops.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/type-ops.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -59,7 +59,7 @@ fun deUnaryOpt tycon t = case deConOpt t of SOME (c, ts) => if Tycon.equals (c, tycon) - then SOME (Vector.sub (ts, 0)) + then SOME (Vector.first ts) else NONE | _ => NONE @@ -75,7 +75,7 @@ fun tuple ts = if 1 = Vector.length ts - then Vector.sub (ts, 0) + then Vector.first ts else con (Tycon.tuple, ts) val unit = tuple (Vector.new0 ()) diff -Nru mlton-20130715/mlton/atoms/type-ops.sig mlton-20210117+dfsg/mlton/atoms/type-ops.sig --- mlton-20130715/mlton/atoms/type-ops.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/type-ops.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/atoms/tyvar.fun mlton-20210117+dfsg/mlton/atoms/tyvar.fun --- mlton-20130715/mlton/atoms/tyvar.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/tyvar.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,18 @@ +(* Copyright (C) 2012,2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor Tyvar (S: TYVAR_STRUCTS): TYVAR = +struct + +open S + +structure V = Id (val noname = "'a") +open V + +end diff -Nru mlton-20130715/mlton/atoms/tyvar.sig mlton-20210117+dfsg/mlton/atoms/tyvar.sig --- mlton-20130715/mlton/atoms/tyvar.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/tyvar.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,14 @@ +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2005, 2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature TYVAR_STRUCTS = + sig + end + +signature TYVAR = ID diff -Nru mlton-20130715/mlton/atoms/unary-tycon.fun mlton-20210117+dfsg/mlton/atoms/unary-tycon.fun --- mlton-20130715/mlton/atoms/unary-tycon.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/unary-tycon.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/atoms/unary-tycon.sig mlton-20210117+dfsg/mlton/atoms/unary-tycon.sig --- mlton-20130715/mlton/atoms/unary-tycon.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/unary-tycon.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/atoms/use-name.fun mlton-20210117+dfsg/mlton/atoms/use-name.fun --- mlton-20130715/mlton/atoms/use-name.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/use-name.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor UseName(S: sig - include T - val sameName: t * t -> bool - end): T = - struct - open S - val equals = sameName - end diff -Nru mlton-20130715/mlton/atoms/var.fun mlton-20210117+dfsg/mlton/atoms/var.fun --- mlton-20130715/mlton/atoms/var.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/var.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/atoms/var.sig mlton-20210117+dfsg/mlton/atoms/var.sig --- mlton-20130715/mlton/atoms/var.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/var.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/atoms/word-size.fun mlton-20210117+dfsg/mlton/atoms/word-size.fun --- mlton-20130715/mlton/atoms/word-size.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/word-size.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,144 @@ +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor WordSize (S: WORD_SIZE_STRUCTS): WORD_SIZE = +struct + +open S + +datatype t = T of Bits.t + +fun bits (T b) = b + +val toString = Bits.toString o bits + +val parse = + let + open Parse + infix 1 >>= + infix 3 *> + in + (peek (nextSat Char.isDigit) *> + fromScan (Function.curry IntInf.scan StringCvt.DEC)) >>= (fn ii => + pure (T (Bits.fromIntInf ii))) + end + +fun compare (s, s') = Bits.compare (bits s, bits s') + +val {equals, ...} = Relation.compare compare + +fun fromBits (b: Bits.t): t = + if Bits.>= (b, Bits.zero) + then T b + else Error.bug (concat ["WordSize.fromBits: strange word size: ", Bits.toString b]) + +fun isValidSize (i: int) = + (1 <= i andalso i <= 32) orelse i = 64 + +val byte = fromBits (Bits.inByte) + +fun bigIntInfWord () = fromBits (Control.Target.Size.mplimb ()) +fun cint () = fromBits (Control.Target.Size.cint ()) +fun cpointer () = fromBits (Control.Target.Size.cpointer ()) +fun cptrdiff () = fromBits (Control.Target.Size.cptrdiff ()) +fun csize () = fromBits (Control.Target.Size.csize ()) +fun objptr () = fromBits (Control.Target.Size.objptr ()) +fun objptrHeader () = fromBits (Control.Target.Size.header ()) +fun seqIndex () = fromBits (Control.Target.Size.seqIndex ()) +fun smallIntInfWord () = objptr () +val bool = fromBits (Bits.fromInt 32) +val compareRes = fromBits (Bits.fromInt 32) +val shiftArg = fromBits (Bits.fromInt 32) +val word8 = fromBits (Bits.fromInt 8) +val word16 = fromBits (Bits.fromInt 16) +val word32 = fromBits (Bits.fromInt 32) +val word64 = fromBits (Bits.fromInt 64) + +val allVector = Vector.tabulate (65, fn i => + if isValidSize i + then SOME (fromBits (Bits.fromInt i)) + else NONE) + +val all: t list = Vector.toListKeepAllMap (allVector, fn so => so) + +val prims = List.map ([8, 16, 32, 64], fromBits o Bits.fromInt) + +fun hash (T b) = Hash.permute (Bits.hash b) + +val memoize: (t -> 'a) -> t -> 'a = + fn f => + let + val v = Vector.map (allVector, fn opt => Option.map (opt, f)) + in + fn s => valOf (Vector.sub (v, Bits.toInt (bits s))) + end + +fun roundUpToPrim s = + let + val bits = Bits.toInt (bits s) + val bits = + if bits <= 8 + then 8 + else if bits <= 16 + then 16 + else if bits <= 32 + then 32 + else if bits = 64 + then 64 + else Error.bug "WordSize.roundUpToPrim" + in + fromBits (Bits.fromInt bits) + end + +val bytes: t -> Bytes.t = Bits.toBytes o bits + +fun cardinality s = IntInf.<< (1, Bits.toWord (bits s)) + +fun range (s, {signed}) = + if signed + then + let + val pow = IntInf.<< (1, Bits.toWord (bits s) - 0w1) + in + (~ pow, pow - 1) + end + else (0, cardinality s - 1) + +val min = #1 o range +val max = #2 o range + +fun isInRange (s, i, sg) = + let + val (min, max) = range (s, sg) + in + min <= i andalso i <= max + end + +datatype prim = W8 | W16 | W32 | W64 + +fun fromPrim p = + case p of + W8 => word8 + | W16 => word16 + | W32 => word32 + | W64 => word64 + +fun primOpt (s: t): prim option = + case Bits.toInt (bits s) of + 8 => SOME W8 + | 16 => SOME W16 + | 32 => SOME W32 + | 64 => SOME W64 + | _ => NONE + +fun prim s = + case primOpt s of + NONE => Error.bug "WordSize.prim" + | SOME p => p + +end diff -Nru mlton-20130715/mlton/atoms/word-size.sig mlton-20210117+dfsg/mlton/atoms/word-size.sig --- mlton-20130715/mlton/atoms/word-size.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/word-size.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,56 @@ +(* Copyright (C) 2009,2019 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature WORD_SIZE_STRUCTS = + sig + end + +signature WORD_SIZE = + sig + include WORD_SIZE_STRUCTS + + type t + datatype prim = W8 | W16 | W32 | W64 + + val all: t list + val bits: t -> Bits.t + val bigIntInfWord: unit -> t + val bool: t + val bytes: t -> Bytes.t + val byte: t + val cardinality: t -> IntInf.t + val cint: unit -> t + val compare: t * t -> Relation.t + val compareRes: t + val cpointer: unit -> t + val cptrdiff: unit -> t + val csize: unit -> t + val equals: t * t -> bool + val fromBits: Bits.t -> t + val fromPrim: prim -> t + val hash: t -> word + val isInRange: t * IntInf.t * {signed: bool} -> bool + val max: t * {signed: bool} -> IntInf.t + val min: t * {signed: bool} -> IntInf.t + val memoize: (t -> 'a) -> t -> 'a + val objptr: unit -> t + val objptrHeader: unit -> t + val parse: t Parse.t + val primOpt: t -> prim option + val prim: t -> prim + val prims: t list + val roundUpToPrim: t -> t + val seqIndex: unit -> t + val shiftArg: t + val smallIntInfWord: unit -> t + val toString: t -> string + val word8: t + val word16: t + val word32: t + val word64: t + end diff -Nru mlton-20130715/mlton/atoms/word-x.fun mlton-20210117+dfsg/mlton/atoms/word-x.fun --- mlton-20130715/mlton/atoms/word-x.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/word-x.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2014,2019-2020 Matthew Fluet. * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -44,11 +44,39 @@ else v end +fun toIntInfSg (w, {signed}) = + if signed then toIntInfX w else toIntInf w + val toInt = IntInf.toInt o toIntInf -fun toString w = IntInf.format (toIntInf w, StringCvt.HEX) +fun toString (w, {suffix}) = + let + val doit = + if suffix + then fn (w, s) => w ^ s () + else fn (w, _) => w + in + doit ("0x" ^ IntInf.format (toIntInf w, StringCvt.HEX), + fn () => ":w" ^ WordSize.toString (size w)) + end -fun layout w = Layout.str (concat ["0x", toString w]) +val layout = Layout.str o toString + +val parse = + let + open Parse + infix 1 <|> >>= + infix 3 <*> <* *> + infixr 4 <$> <$$> <$$$> <$$$$> <$ <$?> + in + spaces *> + str "0x" *> + (peek (nextSat Char.isHexDigit) *> + fromScan (Function.curry IntInf.scan StringCvt.HEX)) >>= (fn i => + str ":w" *> + WordSize.parse >>= (fn s => + pure (make (i, s)))) + end fun zero s = make (0, s) @@ -72,10 +100,18 @@ fun equals (w, w') = WordSize.equals (size w, size w') andalso value w = value w' -fun fromChar (c: Char.t) = make (Int.toIntInf (Char.toInt c), WordSize.byte) - val fromIntInf = make +fun fromBits (b, ws) = make (Bits.toIntInf b, ws) + +fun fromBytes (b, ws) = make (Bytes.toIntInf b, ws) + +fun fromInt (i, ws) = make (Int.toIntInf i, ws) + +fun fromChar (c: Char.t) = fromInt (Char.toInt c, WordSize.byte) + +fun fromWord (w, ws) = make (Word.toIntInf w, ws) + fun isAllOnes w = value w = modulus (size w) - 1 fun isOne w = 1 = value w @@ -104,13 +140,13 @@ fun one s = make (1, s) -fun toIntInfSg (w, {signed}) = - if signed then toIntInfX w else toIntInf w - fun resize (w, s) = make (toIntInf w, s) fun resizeX (w, s) = make (toIntInfX w, s) +fun resizeSg (w, s, {signed}) = + if signed then resizeX (w, s) else resize (w, s) + fun toChar (w: t): char = Char.fromInt (Int.fromIntInf (value w)) fun ~>> (w, w') = @@ -197,8 +233,4 @@ val ge = make (IntInf.>=, "ge") end -fun layoutSg {signed} = Layout.record [("signed", Bool.layout signed)] - -val lt = Trace.trace3 ("WordX.lt", layout, layout, layoutSg, Bool.layout) lt - end diff -Nru mlton-20130715/mlton/atoms/word-x.sig mlton-20210117+dfsg/mlton/atoms/word-x.sig --- mlton-20130715/mlton/atoms/word-x.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/word-x.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -24,8 +24,12 @@ val compare: t * t * {signed: bool} -> order val div: t * t * {signed: bool} -> t val equals: t * t -> bool + val fromBits: Bits.t * WordSize.t -> t + val fromBytes: Bytes.t * WordSize.t -> t val fromChar: char -> t (* returns a word of size 8 *) + val fromInt: int * WordSize.t -> t val fromIntInf: IntInf.t * WordSize.t -> t + val fromWord: word * WordSize.t -> t val ge: t * t * {signed: bool} -> bool val gt: t * t * {signed: bool} -> bool val hash: t -> word @@ -35,7 +39,7 @@ val isMin: t * {signed: bool} -> bool val isNegOne: t -> bool val isZero: t -> bool - val layout: t -> Layout.t + val layout: t * {suffix: bool} -> Layout.t val le: t * t * {signed: bool} -> bool val lshift: t * t -> t val lt: t * t * {signed: bool} -> bool @@ -47,8 +51,10 @@ val notb: t -> t val one: WordSize.t -> t val orb: t * t -> t + val parse: t Parse.t val quot: t * t * {signed: bool} -> t val rem: t * t * {signed: bool} -> t + val resizeSg: t * WordSize.t * {signed: bool} -> t val resize: t * WordSize.t -> t val resizeX: t * WordSize.t -> t val rol: t * t -> t @@ -58,9 +64,10 @@ val sub: t * t -> t val toChar: t -> char val toInt: t -> int + val toIntInfSg: t * {signed: bool} -> IntInf.t val toIntInf: t -> IntInf.t val toIntInfX: t -> IntInf.t - val toString: t -> string + val toString: t * {suffix: bool} -> string val xorb: t * t -> t val zero: WordSize.t -> t end diff -Nru mlton-20130715/mlton/atoms/word-x-vector.fun mlton-20210117+dfsg/mlton/atoms/word-x-vector.fun --- mlton-20130715/mlton/atoms/word-x-vector.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/word-x-vector.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2014,2017,2019-2020 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -20,43 +21,101 @@ val elements = make #elements end -fun toString (T {elements, elementSize}): string = +fun layout (T {elements, elementSize}) = let - val n = Bits.toInt (WordSize.bits elementSize) + fun vector () = + Layout.seq + [Layout.str "#[", + Layout.fill (Layout.separateRight + (Vector.toListMap + (elements, fn w => + WordX.layout (w, {suffix = true})), + ",")), + Layout.str "]", + Layout.str (":w" ^ WordSize.toString elementSize ^ "v")] + fun string cs = + Layout.seq + [Layout.str "\"", + Layout.str (String.escapeSML (String.implodeV cs)), + Layout.str "\""] in - implode - (rev - (Vector.fold (elements, [], fn (w, ac) => - let - fun loop (i, w, ac) = - if i = 0 - then ac - else - let - val (q, r) = IntInf.quotRem (w, 0x100) - in - loop (i - 8, q, - Char.fromInt (IntInf.toInt r) :: ac) - end - in - (* Control.Target.bigEndian is not always set, so - * only use it if we really need to know the value. *) - if n > 8 andalso Control.Target.bigEndian () - then rev (loop (n, WordX.toIntInf w, [])) @ ac - else loop (n, WordX.toIntInf w, []) @ ac - end))) + if WordSize.equals (elementSize, WordSize.word8) + then let + val cs = Vector.map (elements, WordX.toChar) + val l = Vector.length cs + val n = Vector.fold (cs, 0, fn (c, n) => + if Char.isGraph c + orelse Char.isSpace c + then n + 1 + else n) + in + if l = 0 orelse (10 * n) div l > 9 + then string cs + else vector () + end + else vector () end -val hash = String.hash o toString +val toString = Layout.toString o layout + +val parse = + let + open Parse + infix 1 <|> >>= + infix 3 *> + in + (spaces *> char Char.dquote *> + many (fromScan Char.scan) >>= (fn cs => + char Char.dquote *> + pure (T {elements = Vector.fromListMap (cs, WordX.fromChar), + elementSize = WordSize.byte}))) + <|> + (spaces *> str "#[" *> + sepBy (WordX.parse, spaces *> str ",") >>= (fn ws => + spaces *> str "]" *> + str ":w" *> WordSize.parse >>= (fn s => + str "v" *> + pure (T {elements = Vector.fromList ws, + elementSize = s})))) + end -val layout = Layout.str o toString +val hash = String.hash o toString fun equals (v, v') = - WordSize.equals (elementSize v, elementSize v') - andalso Vector.equals (elements v, elements v', WordX.equals) + WordSize.equals (elementSize v, elementSize v') + andalso Vector.equals (elements v, elements v', WordX.equals) + +fun compare (v, v') = + if WordSize.equals (elementSize v, elementSize v') + then case Int.compare (Vector.length (elements v), Vector.length (elements v')) of + LESS => LESS + | EQUAL => Vector.compare (elements v, elements v', fn (w, w') => + WordX.compare (w, w', {signed = false})) + | GREATER => GREATER + else Error.bug "WordXVector.compare" + +fun le (v, v') = + case compare (v, v') of + LESS => true + | EQUAL => true + | GREATER => false + +fun foldFrom (v, start, b, f) = Vector.foldFrom (elements v, start, b, f) fun forall (v, f) = Vector.forall (elements v, f) +fun fromVector ({elementSize}, v) = + T {elementSize = elementSize, + elements = v} + +fun fromList ({elementSize}, l) = + T {elementSize = elementSize, + elements = Vector.fromList l} + +fun fromListRev ({elementSize}, l) = + T {elementSize = elementSize, + elements = Vector.fromListRev l} + fun fromString s = T {elementSize = WordSize.byte, elements = Vector.tabulate (String.size s, fn i => @@ -70,4 +129,8 @@ T {elementSize = elementSize, elements = Vector.tabulate (n, f)} +fun toListMap (v, f) = Vector.toListMap (elements v, f) + +fun toVectorMap (v, f) = Vector.map (elements v, f) + end diff -Nru mlton-20130715/mlton/atoms/word-x-vector.sig mlton-20210117+dfsg/mlton/atoms/word-x-vector.sig --- mlton-20130715/mlton/atoms/word-x-vector.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/atoms/word-x-vector.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2014,2017,2019-2020 Matthew Fluet. + * Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -18,14 +19,23 @@ type t + val compare: t * t -> order val elementSize: t -> WordSize.t val equals: t * t -> bool + val foldFrom: t * int * 'b * (WordX.t * 'b -> 'b) -> 'b val forall: t * (WordX.t -> bool) -> bool + val fromList: {elementSize: WordSize.t} * WordX.t list -> t + val fromListRev: {elementSize: WordSize.t} * WordX.t list -> t val fromString: string -> t + val fromVector: {elementSize: WordSize.t} * WordX.t vector -> t val hash : t -> word val layout: t -> Layout.t + val le : t * t -> bool val length: t -> int + val parse: t Parse.t val sub: t * int -> WordX.t val tabulate: {elementSize: WordSize.t} * int * (int -> WordX.t) -> t + val toListMap: t * (WordX.t -> 'a) -> 'a list + val toVectorMap: t * (WordX.t -> 'a) -> 'a vector val toString: t -> string end diff -Nru mlton-20130715/mlton/backend/allocate-registers.fun mlton-20210117+dfsg/mlton/backend/allocate-registers.fun --- mlton-20130715/mlton/backend/allocate-registers.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/allocate-registers.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,567 +0,0 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor AllocateRegisters (S: ALLOCATE_REGISTERS_STRUCTS): ALLOCATE_REGISTERS = -struct - -open S - -structure R = Rssa - -local - open Rssa -in - structure Func = Func - structure Function = Function - structure Kind = Kind - structure Label = Label - structure Type = Type - structure Var = Var -end - -local - open Machine -in - structure CType = CType - structure Operand = Operand - structure Register = Register - structure Runtime = Runtime - structure StackOffset = StackOffset -end - -structure Live = Live (Rssa) - -structure Allocation: - sig - structure Stack: - sig - type t - - val get: t * Type.t -> t * {offset: Bytes.t} - val layout: t -> Layout.t - val new: StackOffset.t list -> t - val size: t -> Bytes.t - end - - type t - - val getRegister: t * Type.t -> Register.t - val getStack: t * Type.t -> {offset: Bytes.t} - val layout: t -> Layout.t - val new: StackOffset.t list * Register.t list -> t - val stack: t -> Stack.t - val stackSize: t -> Bytes.t - end = - struct - structure Stack = - struct - (* Keep a list of allocated slots sorted in increasing order of offset. - *) - datatype t = T of {offset: Bytes.t, size: Bytes.t} list - - fun layout (T alloc) = - List.layout (fn {offset, size} => - Layout.record [("offset", Bytes.layout offset), - ("size", Bytes.layout size)]) - alloc - - fun size (T alloc) = - case alloc of - [] => Bytes.zero - | _ => let - val {offset, size} = List.last alloc - in - Bytes.+ (offset, size) - end - - fun new (alloc): t = - let - val a = - Array.fromListMap (alloc, fn StackOffset.T {offset, ty} => - {offset = offset, - size = Type.bytes ty}) - val () = - QuickSort.sortArray - (a, fn (r, r') => Bytes.<= (#offset r, #offset r')) - - in - T (Array.toList a) - end - - fun get (T alloc, ty) = - let - val slotSize = Type.bytes ty - in - case alloc of - [] => (T [{offset = Bytes.zero, size = slotSize}], - {offset = Bytes.zero}) - | a :: alloc => - let - fun loop (alloc, a as {offset, size}, ac) = - let - val prevEnd = Bytes.+ (offset, size) - val begin = Type.align (ty, prevEnd) - fun coalesce () = - if Bytes.equals (prevEnd, begin) - then ({offset = offset, - size = Bytes.+ (size, slotSize)}, - ac) - else ({offset = begin, size = slotSize}, - {offset = offset, size = size} :: ac) - in - case alloc of - [] => - let - val (a, ac) = coalesce () - in - (T (rev (a :: ac)), {offset = begin}) - end - | (a' as {offset, size}) :: alloc => - if Bytes.> (Bytes.+ (begin, slotSize), - offset) - then loop (alloc, a', a :: ac) - else - let - val (a'' as {offset = o', size = s'}, ac) = - coalesce () - val alloc = - List.appendRev - (ac, - if Bytes.equals (Bytes.+ (o', s'), - offset) - then {offset = o', - size = Bytes.+ (size, s')} - :: alloc - else a'' :: a' :: alloc) - in - (T alloc, {offset = begin}) - end - end - in - loop (alloc, a, []) - end - end - - end - structure Registers = - struct - (* A register allocation keeps track of the registers that have - * already been allocated, for each runtime type. The reason that - * we associate them with runtime types rather than Rssa types is - * that the register indices that the codegens use are based on - * runtime types. - *) - datatype t = T of CType.t -> {alloc: Register.t list, - next: int} ref - - fun layout (T f) = - List.layout - (fn t => - let - val {alloc, next} = ! (f t) - in - Layout.record [("ty", CType.layout t), - ("next", Int.layout next), - ("alloc", List.layout Register.layout alloc)] - end) - CType.all - - fun compress {next, alloc} = - let - fun loop (next, alloc) = - let - fun done () = {alloc = alloc, - next = next} - in - case alloc of - [] => done () - | r :: alloc => - if next = Register.index r - then loop (next + 1, alloc) - else done () - end - in - loop (next, alloc) - end - - fun new (rs: Register.t list): t = - let - fun sameType (r, r') = - CType.equals - (Type.toCType (Register.ty r), - Type.toCType (Register.ty r')) - val rss = List.equivalence (rs, sameType) - in - T (CType.memo - (fn t => - case List.peek (rss, fn rs => - case rs of - [] => false - | r :: _ => - CType.equals - (t, Type.toCType (Register.ty r))) of - NONE => ref {alloc = [], next = 0} - | SOME rs => - ref - (compress - {next = 0, - alloc = - QuickSort.sortList - (rs, fn (r, r') => - Register.index r <= Register.index r')}))) - end - - fun get (T f, ty: Type.t) = - let - val t = Type.toCType ty - val r = f t - val {alloc, next} = !r - val reg = Register.new (ty, SOME next) - val _ = - r := compress {alloc = alloc, - next = next + 1} - in - reg - end - end - - datatype t = T of {registers: Registers.t, - stack: Stack.t ref} - - local - fun make s (T x) = s x - in - val stack = ! o (make #stack) - val stackSize = Stack.size o stack - end - - fun layout (T {registers, stack}) = - Layout.record - [("stack", Stack.layout (!stack)), - ("registers", Registers.layout registers)] - - fun getStack (T {stack, ...}, ty) = - let - val (s, offset) = Stack.get (!stack, ty) - val _ = stack := s - in - offset - end - - fun getRegister (T {registers, ...}, ty) = - Registers.get (registers, ty) - - fun new (stack, registers) = - T {registers = Registers.new registers, - stack = ref (Stack.new stack)} - end - -structure Info = - struct - type t = {live: Operand.t vector, - liveNoFormals: Operand.t vector, - size: Bytes.t} - - fun layout ({live, liveNoFormals, size, ...}: t) = - Layout.record - [("live", Vector.layout Operand.layout live), - ("liveNoFormals", Vector.layout Operand.layout liveNoFormals), - ("size", Bytes.layout size)] - end - -(* ------------------------------------------------- *) -(* allocate *) -(* ------------------------------------------------- *) - -fun allocate {argOperands, - function = f: Rssa.Function.t, - varInfo: Var.t -> {operand: Machine.Operand.t option ref option, - ty: Type.t}} = - let - fun diagnostics f = - Control.diagnostics - (fn display => - let - open Layout - fun diagVar (x: Var.t): unit = - display (seq - [Var.layout x, str " ", - Option.layout - (fn r => Option.layout Operand.layout (!r)) - (#operand (varInfo x))]) - fun diagStatement (s: R.Statement.t): unit = - R.Statement.foreachDef (s, diagVar o #1) - in - f (display, diagVar, diagStatement) - end) - val _ = - Control.diagnostic (fn () => - let open Layout - in seq [str "Function allocs for ", - Func.layout (Function.name f)] - end) - val {labelLive, remLabelLive} = - Live.live (f, {shouldConsider = isSome o #operand o varInfo}) - val {args, blocks, name, ...} = Function.dest f - (* - * Decide which variables will live in stack slots and which - * will live in registers. - * Initially, - * - all formals are put in stack slots - * - everything else is put everything in a register. - * Variables get moved to the stack if they are - * - live at the beginning of a basic block (i.e. Fun dec) - * - live at a primitive that enters the runtime system - *) - datatype place = Stack | Register - val {get = place: Var.t -> place ref, rem = removePlace, ...} = - Property.get (Var.plist, Property.initFun (fn _ => ref Register)) - (* !hasHandler = true iff handlers are installed in this function. *) - val hasHandler: bool ref = ref false - fun forceStack (x: Var.t): unit = place x := Stack - val _ = Vector.foreach (args, forceStack o #1) - val _ = - Vector.foreach - (blocks, - fn R.Block.T {args, kind, label, statements, ...} => - let - val {beginNoFormals, ...} = labelLive label - val _ = - case Kind.frameStyle kind of - Kind.None => () - | Kind.OffsetsAndSize => - Vector.foreach (beginNoFormals, forceStack) - | Kind.SizeOnly => () - val _ = - case kind of - Kind.Cont _ => Vector.foreach (args, forceStack o #1) - | _ => () - val _ = - if not (!hasHandler) - andalso (Vector.exists - (statements, fn s => - let - datatype z = datatype R.Statement.t - in - case s of - SetHandler _ => true - | SetExnStackLocal => true - | SetExnStackSlot => true - | SetSlotExnStack => true - | _ => false - end)) - then hasHandler := true - else () - in - () - end) - fun allocateVar (x: Var.t, a: Allocation.t): unit = - let - val {operand, ty} = varInfo x - in - if isSome operand - then let - val oper = - case ! (place x) of - Stack => - let - val {offset} = Allocation.getStack (a, ty) - in - Operand.StackOffset - (StackOffset.T {offset = offset, ty = ty}) - end - | Register => - Operand.Register - (Allocation.getRegister (a, ty)) - val () = removePlace x - val _ = - case operand of - NONE => () - | SOME r => r := SOME oper - in - () - end - else () - end - val allocateVar = - Trace.trace2 - ("AllocateRegisters.allocateVar", Var.layout, Allocation.layout, Unit.layout) - allocateVar - (* Create the initial stack and set the stack slots for the formals. *) - val stack = - Allocation.Stack.new - (Vector.foldr2 - (args, argOperands, [], - fn ((x, t), z, ac) => - case z of - Operand.StackOffset (StackOffset.T {offset, ...}) => - (valOf (#operand (varInfo x)) := SOME z - ; StackOffset.T {offset = offset, ty = t} :: ac) - | _ => Error.bug "AllocateRegisters.allocate: strange argOperand")) - (* Allocate slots for the link and handler, if necessary. *) - val handlerLinkOffset = - if !hasHandler - then - let - val (stack, {offset = handler, ...}) = - Allocation.Stack.get (stack, Type.label (Label.newNoname ())) - val (_, {offset = link, ...}) = - Allocation.Stack.get (stack, Type.exnStack ()) - in - SOME {handler = handler, link = link} - end - else NONE - fun getOperands (xs: Var.t vector): Operand.t vector = - Vector.map (xs, fn x => valOf (! (valOf (#operand (varInfo x))))) - val getOperands = - Trace.trace - ("AllocateRegisters.getOperands", - Vector.layout Var.layout, Vector.layout Operand.layout) - getOperands - val {get = labelInfo: R.Label.t -> Info.t, set = setLabelInfo, ...} = - Property.getSetOnce (R.Label.plist, - Property.initRaise ("labelInfo", R.Label.layout)) - val setLabelInfo = - Trace.trace2 - ("AllocateRegisters.setLabelInfo", - R.Label.layout, Info.layout, Unit.layout) - setLabelInfo - (* Do a DFS of the control-flow graph. *) - val () = - Function.dfs - (f, fn R.Block.T {args, label, kind, statements, transfer, ...} => - let - val {begin, beginNoFormals, handler = handlerLive, - link = linkLive} = labelLive label - val () = remLabelLive label - fun addHS (ops: Operand.t vector): Operand.t vector = - case handlerLinkOffset of - NONE => ops - | SOME {handler, link} => - let - val extra = [] - val extra = - case handlerLive of - NONE => extra - | SOME h => - Operand.stackOffset {offset = handler, - ty = Type.label h} - :: extra - val extra = - if linkLive - then - Operand.stackOffset {offset = link, - ty = Type.exnStack ()} - :: extra - else extra - in - Vector.concat [Vector.fromList extra, ops] - end - val liveNoFormals = getOperands beginNoFormals - val (stackInit, registersInit) = - Vector.fold - (liveNoFormals, ([],[]), fn (oper, (stack, registers)) => - case oper of - Operand.StackOffset s => (s::stack, registers) - | Operand.Register r => (stack, r::registers) - | _ => (stack, registers)) - val stackInit = - case handlerLinkOffset of - NONE => stackInit - | SOME {handler, link} => - StackOffset.T {offset = handler, - ty = Type.label (Label.newNoname ())} - :: StackOffset.T {offset = link, - ty = Type.exnStack ()} - :: stackInit - val a = Allocation.new (stackInit, registersInit) - val size = - case kind of - Kind.Handler => - (case handlerLinkOffset of - NONE => Error.bug "AllocateRegisters.allocate: Handler with no handler offset" - | SOME {handler, ...} => - Bytes.+ (Runtime.labelSize (), handler)) - | _ => - let - val size = - Bytes.+ - (Runtime.labelSize (), - Bytes.alignWord32 (Allocation.stackSize a)) - in - case !Control.align of - Control.Align4 => size - | Control.Align8 => Bytes.alignWord64 size - end - val _ = - if Bytes.isWord32Aligned size - then () - else Error.bug (concat ["AllocateRegisters.allocate: ", - "bad size ", - Bytes.toString size, - " in ", Label.toString label]) - val _ = Vector.foreach (args, fn (x, _) => allocateVar (x, a)) - (* Must compute live after allocateVar'ing the args, since that - * sets the operands for the args. - *) - val live = getOperands begin - fun one (var, _) = allocateVar (var, a) - val _ = - Vector.foreach (statements, fn statement => - R.Statement.foreachDef (statement, one)) - val _ = R.Transfer.foreachDef (transfer, one) - val _ = - setLabelInfo (label, {live = addHS live, - liveNoFormals = addHS liveNoFormals, - size = size}) - in - fn () => () - end) - val () = - diagnostics - (fn (display, diagVar, diagStatement) => - let - open Layout - val _ = - display (seq [str "function ", Func.layout name, - str " handlerLinkOffset ", - Option.layout - (fn {handler, link} => - record [("handler", Bytes.layout handler), - ("link", Bytes.layout link)]) - handlerLinkOffset]) - val _ = Vector.foreach (args, diagVar o #1) - val _ = - Vector.foreach - (blocks, fn R.Block.T {label, args, statements, ...} => - let - val {live, ...} = labelInfo label - val () = display (R.Label.layout label) - val () = - display - (seq [str "live: ", Vector.layout Operand.layout live]) - val () = Vector.foreach (args, diagVar o #1) - val () = Vector.foreach (statements, diagStatement) - in - () - end) - in () - end) - in - {handlerLinkOffset = handlerLinkOffset, - labelInfo = labelInfo} - end - -val allocate = - Trace.trace - ("AllocateRegisters.allocate", - fn {function, ...} => Func.layout (Function.name function), - Layout.ignore) - allocate - -end diff -Nru mlton-20130715/mlton/backend/allocate-registers.sig mlton-20210117+dfsg/mlton/backend/allocate-registers.sig --- mlton-20130715/mlton/backend/allocate-registers.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/allocate-registers.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature ALLOCATE_REGISTERS_STRUCTS = - sig - structure Rssa: RSSA - structure Machine: MACHINE - sharing Rssa.Runtime = Machine.Runtime - sharing Rssa.Type = Machine.Type - end - -signature ALLOCATE_REGISTERS = - sig - include ALLOCATE_REGISTERS_STRUCTS - - val allocate: - {argOperands: Machine.Operand.t vector, - function: Rssa.Function.t, - varInfo: Rssa.Var.t -> { - (* If (isSome operand) then a stack slot or - * register needs to be allocated for the - * variable. - *) - operand: Machine.Operand.t option ref option, - ty: Machine.Type.t - } - } - -> {(* If handlers are used, handlerLinkOffset gives the stack offsets - * where the handler and link (old exnStack) should be stored. - *) - handlerLinkOffset: {handler: Bytes.t, - link: Bytes.t} option, - labelInfo: - Rssa.Label.t -> {(* Live operands at the beginning of the block. *) - live: Machine.Operand.t vector, - (* Live operands at the beginning of the block, - * excepting its formals. - *) - liveNoFormals: Machine.Operand.t vector, - (* Size of frame including return address. *) - size: Bytes.t}} - end diff -Nru mlton-20130715/mlton/backend/allocate-variables.fun mlton-20210117+dfsg/mlton/backend/allocate-variables.fun --- mlton-20130715/mlton/backend/allocate-variables.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/allocate-variables.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,629 @@ +(* Copyright (C) 2017,2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor AllocateVariables (S: ALLOCATE_VARIABLES_STRUCTS): ALLOCATE_VARIABLES = +struct + +open S + +structure R = Rssa + +local + open Rssa +in + structure Func = Func + structure Function = Function + structure Kind = Kind + structure Label = Label + structure Live = Live + structure Type = Type + structure Var = Var +end + +local + open Machine +in + structure CType = CType + structure Operand = Operand + structure Runtime = Runtime + structure StackOffset = StackOffset + structure Temporary = Temporary +end + +structure Allocation: + sig + structure Temporaries: + sig + type t + + val get: t * Type.t -> Temporary.t + val empty: unit -> t + end + structure Stack: + sig + type t + + val get: t * Type.t -> t * {offset: Bytes.t} + val layout: t -> Layout.t + val new: StackOffset.t list -> t + val size: t -> Bytes.t + end + + type t + + val getTemporary: t * Type.t -> Temporary.t + val getStack: t * Type.t -> {offset: Bytes.t} + val layout: t -> Layout.t + val new: StackOffset.t list * Temporary.t list -> t + val stack: t -> Stack.t + val stackSize: t -> Bytes.t + end = + struct + structure Stack = + struct + (* Keep a list of allocated slots sorted in increasing order of offset. + *) + datatype t = T of {offset: Bytes.t, size: Bytes.t} list + + fun layout (T alloc) = + List.layout (fn {offset, size} => + Layout.record [("offset", Bytes.layout offset), + ("size", Bytes.layout size)]) + alloc + + fun size (T alloc) = + case alloc of + [] => Bytes.zero + | _ => let + val {offset, size} = List.last alloc + in + Bytes.+ (offset, size) + end + + fun new (alloc): t = + let + val a = + Array.fromListMap (alloc, fn StackOffset.T {offset, ty} => + {offset = offset, + size = Type.bytes ty}) + val () = + QuickSort.sortArray + (a, fn (t, t') => Bytes.<= (#offset t, #offset t')) + fun loop (alloc, ac) = + case alloc of + [] => List.rev ac + | [a] => List.rev (a::ac) + | (a1 as {offset = offset1, size = size1})::(a2 as {offset = offset2, size = size2})::alloc => + if Bytes.equals (Bytes.+ (offset1, size1), offset2) + then loop ({offset = offset1, size = Bytes.+ (size1, size2)}::alloc, ac) + else loop (a2::alloc, a1::ac) + in + T (loop (Array.toList a, [])) + end + + fun get (T alloc, ty) = + let + val slotSize = Type.bytes ty + fun loop (alloc, a as {offset, size}, ac) = + let + val prevEnd = Bytes.+ (offset, size) + val begin = Type.align (ty, prevEnd) + fun coalesce () = + if Bytes.equals (prevEnd, begin) + then ({offset = offset, size = Bytes.+ (size, slotSize)}, ac) + else ({offset = begin, size = slotSize}, a :: ac) + in + case alloc of + [] => + let + val (a, ac) = coalesce () + in + (T (rev (a :: ac)), {offset = begin}) + end + | (a' as {offset, size}) :: alloc => + if Bytes.> (Bytes.+ (begin, slotSize), offset) + then loop (alloc, a', + if Bytes.isZero offset andalso Bytes.isZero size + then ac + else a :: ac) + else let + val (a'' as {offset = o', size = s'}, ac) = + coalesce () + val alloc = + List.appendRev + (ac, + if Bytes.equals (Bytes.+ (o', s'), offset) + then {offset = o', size = Bytes.+ (size, s')} :: alloc + else a'' :: a' :: alloc) + in + (T alloc, {offset = begin}) + end + end + in + loop (alloc, {offset = Bytes.zero, size = Bytes.zero}, []) + end + val get = + Trace.trace2 + ("AllocateVariables.Allocation.Stack.get", + layout, Type.layout, + Layout.tuple2 (layout, fn {offset} => + Layout.record [("offset", Bytes.layout offset)])) + get + end + structure Temporaries = + struct + (* A temporary allocation keeps track of the temporaries that have + * already been allocated, for each runtime type. The reason that + * we associate them with runtime types rather than Rssa types is + * that the temporary indices that the codegens use are based on + * runtime types. + *) + datatype t = T of CType.t -> {alloc: Temporary.t list, + next: int} ref + + fun layout (T f) = + List.layout + (fn t => + let + val {alloc, next} = ! (f t) + in + Layout.record [("ty", CType.layout t), + ("next", Int.layout next), + ("alloc", List.layout Temporary.layout alloc)] + end) + CType.all + + fun compress {next, alloc} = + let + fun loop (next, alloc) = + let + fun done () = {alloc = alloc, + next = next} + in + case alloc of + [] => done () + | t :: alloc => + if next = Temporary.index t + then loop (next + 1, alloc) + else done () + end + in + loop (next, alloc) + end + + fun new (ts: Temporary.t list): t = + let + fun sameType (t, t') = + CType.equals + (Type.toCType (Temporary.ty t), + Type.toCType (Temporary.ty t')) + val tss = List.equivalence (ts, sameType) + in + T (CType.memo + (fn ty => + case List.peek (tss, fn ts => + case ts of + [] => false + | t :: _ => + CType.equals + (ty, Type.toCType (Temporary.ty t))) of + NONE => ref {alloc = [], next = 0} + | SOME ts => + ref + (compress + {next = 0, + alloc = + QuickSort.sortList + (ts, fn (t, t') => + Temporary.index t <= Temporary.index t')}))) + end + + fun empty () = new [] + + fun get (T f, ty: Type.t) = + let + val t = Type.toCType ty + val r = f t + val {alloc, next} = !r + val temp = Temporary.new (ty, SOME next) + val _ = + r := compress {alloc = alloc, + next = next + 1} + in + temp + end + end + + datatype t = T of {temporaries: Temporaries.t, + stack: Stack.t ref} + + local + fun make s (T x) = s x + in + val stack = ! o (make #stack) + val stackSize = Stack.size o stack + end + + fun layout (T {temporaries, stack}) = + Layout.record + [("stack", Stack.layout (!stack)), + ("temporaries", Temporaries.layout temporaries)] + + fun getStack (T {stack, ...}, ty) = + let + val (s, offset) = Stack.get (!stack, ty) + val _ = stack := s + in + offset + end + + fun getTemporary (T {temporaries, ...}, ty) = + Temporaries.get (temporaries, ty) + + fun new (stack, temporaries) = + T {temporaries = Temporaries.new temporaries, + stack = ref (Stack.new stack)} + end + +structure Info = + struct + type t = {live: Operand.t vector, + liveNoFormals: Operand.t vector, + size: Bytes.t} + + fun layout ({live, liveNoFormals, size, ...}: t) = + Layout.record + [("live", Vector.layout Operand.layout live), + ("liveNoFormals", Vector.layout Operand.layout liveNoFormals), + ("size", Bytes.layout size)] + end + +(* ------------------------------------------------- *) +(* allocate *) +(* ------------------------------------------------- *) + +fun allocate {function = f: Rssa.Function.t, + paramOffsets, + varInfo: Var.t -> {operand: Machine.Operand.t option ref option, + ty: Type.t}} = + let + fun diagnostics f = + Control.diagnostics + (fn display => + let + open Layout + fun diagVar (x: Var.t): unit = + display (seq + [Var.layout x, str " ", + Option.layout + (fn r => Option.layout Operand.layout (!r)) + (#operand (varInfo x))]) + fun diagStatement (s: R.Statement.t): unit = + R.Statement.foreachDef (s, diagVar o #1) + in + f (display, diagVar, diagStatement) + end) + val _ = + Control.diagnostic (fn () => + let open Layout + in seq [str "Function allocs for ", + Func.layout (Function.name f)] + end) + val {labelLive, remLabelLive} = + Live.live (f, {shouldConsider = isSome o #operand o varInfo}) + val {args, blocks, name, ...} = Function.dest f + + (* + * Decide which variables will live in stack slots and which + * will live in temporaries. + * Initially, + * - all variables are put in a temporary. + * Variables get moved to the stack if they are + * - live at the beginning of a Cont block; such variables are + * live while the frame is suspended during a non-tail call + * and must be stack allocated to be traced during a GC + * - live at the beginning of a CReturn block that mayGC; such + * variables are live while the frame is suspended during a + * C call and must be stack allocated to be traced during + * the potential GC + * Both of the above are indiced by + * Kind.frameStyle kind = Kind.OffsetsAndSize + *) + datatype place = Stack | Temporary + val {get = place: Var.t -> place ref, rem = removePlace, ...} = + Property.get (Var.plist, Property.initFun (fn _ => ref Temporary)) + (* The arguments for each Handler block in the function. *) + val handlersArgs: (Var.t * Type.t) vector list ref = ref [] + fun forceStack (x: Var.t): unit = place x := Stack + val _ = + Vector.foreach + (blocks, + fn R.Block.T {args, kind, label, ...} => + let + val {beginNoFormals, ...} = labelLive label + val _ = + case Kind.frameStyle kind of + Kind.None => () + | Kind.OffsetsAndSize => + Vector.foreach (beginNoFormals, forceStack) + | Kind.SizeOnly => () + val _ = + case kind of + Kind.Handler => List.push (handlersArgs, args) + | _ => () + in + () + end) + + fun allocateVar (x: Var.t, a: Allocation.t): unit = + let + val {operand, ty} = varInfo x + in + if isSome operand + then let + val oper = + case ! (place x) of + Stack => + let + val {offset} = Allocation.getStack (a, ty) + in + Operand.StackOffset + (StackOffset.T {offset = offset, ty = ty}) + end + | Temporary => + Operand.Temporary + (Allocation.getTemporary (a, ty)) + val () = removePlace x + val _ = + case operand of + NONE => () + | SOME r => r := SOME oper + in + () + end + else () + end + val allocateVar = + Trace.trace2 + ("AllocateVariables.allocateVar", Var.layout, Allocation.layout, Unit.layout) + allocateVar + fun getOperand (x: Var.t): Operand.t = + case #operand (varInfo x) of + NONE => Error.bug (concat ["AllocateVariables.getOperand: ", + "#operand (varInfo ", + Var.toString x, ") = NONE"]) + | SOME r => + (case !r of + NONE => Error.bug (concat ["AllocateVariables.getOperand: ", + "! (valOf (#operand (varInfo ", + Var.toString x, "))) = NONE"]) + | SOME oper => oper) + val getOperand = + Trace.trace + ("AllocateVariables.getOperand", Var.layout, Operand.layout) + getOperand + fun getOperands (xs: Var.t vector): Operand.t vector = + Vector.map (xs, getOperand) + val getOperands = + Trace.trace + ("AllocateVariables.getOperands", + Vector.layout Var.layout, Vector.layout Operand.layout) + getOperands + val {get = labelInfo: R.Label.t -> Info.t, set = setLabelInfo, ...} = + Property.getSetOnce (R.Label.plist, + Property.initRaise ("labelInfo", R.Label.layout)) + val setLabelInfo = + Trace.trace2 + ("AllocateVariables.setLabelInfo", + R.Label.layout, Info.layout, Unit.layout) + setLabelInfo + + (* Allocate stacks slots and/or temporaries for the formals. + * Don't use `allocateVar`, because a stack formal + * should use the stack slot of the incoming actual. + *) + val () = + let + val temps = Allocation.Temporaries.empty () + in + Vector.foreach2 + (args, paramOffsets args, fn ((x, ty), so) => + let + val oper = + case ! (place x) of + Stack => Operand.StackOffset (StackOffset.T so) + | Temporary => Operand.Temporary (Allocation.Temporaries.get (temps, ty)) + val () = removePlace x + val () = valOf (#operand (varInfo x)) := SOME oper + in + () + end) + end + (* Also, create a stack allocation that includes all incoming actuals; + * if link, handler label, and handler args stack slots are required, + * then they will be allocated against this stack. + *) + val stack = + Allocation.Stack.new (Vector.toListMap (paramOffsets args, StackOffset.T)) + val handlersInfo = + case !handlersArgs of + [] => NONE + | handlersArgs => + let + (* Choose fixed and permanently allocated stack slots + * that do not conflict with incoming actuals. + *) + val (stack, {offset = linkOffset, ...}) = + Allocation.Stack.get (stack, Type.exnStack ()) + val (_, {offset = handlerOffset, ...}) = + Allocation.Stack.get (stack, Type.label (Label.newNoname ())) + val handlerArgsOffset = + Bytes.align + (Bytes.+ (handlerOffset, Runtime.labelSize ()), + {alignment = (case !Control.align of + Control.Align4 => Bytes.inWord32 + | Control.Align8 => Bytes.inWord64)}) + val handlerArgsSize = + List.fold + (handlersArgs, Bytes.zero, fn (args, maxSize) => + Vector.fold + (paramOffsets args, maxSize, fn ({offset, ty}, maxSize) => + Bytes.max (maxSize, Bytes.+ (offset, Type.bytes ty)))) + val handlerOffset = Bytes.- (handlerArgsOffset, Runtime.labelSize ()) + in + SOME {handlerArgsOffset = handlerArgsOffset, + handlerArgsSize = handlerArgsSize, + handlerOffset = handlerOffset, + linkOffset = linkOffset} + end + + (* Do a DFS of the control-flow graph. *) + val () = + Function.dfs + (f, fn R.Block.T {args, label, kind, statements, ...} => + let + val {begin, beginNoFormals, + handler = handlerLive, + link = linkLive} = labelLive label + val () = remLabelLive label + fun addHS (ops: Operand.t vector): Operand.t vector = + case handlersInfo of + NONE => ops + | SOME {handlerOffset, linkOffset, ...} => + let + val extra = [] + val extra = + case handlerLive of + NONE => extra + | SOME h => + Operand.stackOffset {offset = handlerOffset, + ty = Type.label h} + :: extra + val extra = + if linkLive + then + Operand.stackOffset {offset = linkOffset, + ty = Type.exnStack ()} + :: extra + else extra + in + Vector.concat [Vector.fromList extra, ops] + end + val liveNoFormals = getOperands beginNoFormals + val (stackInit, temporariesInit) = + Vector.fold + (liveNoFormals, ([],[]), fn (oper, (stack, temporaries)) => + case oper of + Operand.StackOffset s => (s::stack, temporaries) + | Operand.Temporary t => (stack, t::temporaries) + | _ => (stack, temporaries)) + val stackInit = + case handlersInfo of + NONE => stackInit + | SOME {handlerArgsOffset, handlerArgsSize, handlerOffset, linkOffset, ...} => + StackOffset.T {offset = linkOffset, + ty = Type.exnStack ()} + :: StackOffset.T {offset = handlerOffset, + ty = Type.label (Label.newNoname ())} + :: (if (Bytes.> (handlerArgsSize, Bytes.zero)) + then StackOffset.T {offset = handlerArgsOffset, + ty = Type.bits (Bytes.toBits handlerArgsSize)} + :: stackInit + else stackInit) + val a = Allocation.new (stackInit, temporariesInit) + val size = + case kind of + Kind.Handler => + (case handlersInfo of + NONE => Error.bug "AllocateVariables.allocate: Handler with no handler offset" + | SOME {handlerOffset, ...} => + Bytes.+ (handlerOffset, Runtime.labelSize ())) + | _ => + Bytes.align + (Bytes.+ (Allocation.stackSize a, Runtime.labelSize ()), + {alignment = (case !Control.align of + Control.Align4 => Bytes.inWord32 + | Control.Align8 => Bytes.inWord64)}) + val _ = + if Bytes.isAligned (size, {alignment = (case !Control.align of + Control.Align4 => Bytes.inWord32 + | Control.Align8 => Bytes.inWord64)}) + then () + else Error.bug (concat ["AllocateVariables.allocate: ", + "bad size ", + Bytes.toString size, + " in ", Label.toString label]) + val _ = Vector.foreach (args, fn (x, _) => + if Vector.exists (begin, fn y => + Var.equals (x, y)) + then allocateVar (x, a) + else ()) + (* Must compute live after allocateVar'ing the args, since that + * sets the operands for the args. + *) + val live = getOperands begin + fun one (var, _) = allocateVar (var, a) + val _ = + Vector.foreach (statements, fn statement => + R.Statement.foreachDef (statement, one)) + val _ = + setLabelInfo (label, {live = addHS live, + liveNoFormals = addHS liveNoFormals, + size = size}) + in + fn () => () + end) + val () = + diagnostics + (fn (display, diagVar, diagStatement) => + let + open Layout + val _ = + display (seq [str "function ", Func.layout name, + str " handlersInfo ", + Option.layout + (fn {handlerArgsOffset, handlerArgsSize, + handlerOffset, linkOffset, ...} => + record [("handlerArgsOffset", Bytes.layout handlerArgsOffset), + ("handlerArgsSize", Bytes.layout handlerArgsSize), + ("handlerOffset", Bytes.layout handlerOffset), + ("linkOffset", Bytes.layout linkOffset)]) + handlersInfo]) + val _ = Vector.foreach (args, diagVar o #1) + val _ = + Vector.foreach + (blocks, fn R.Block.T {label, args, statements, ...} => + let + val {live, ...} = labelInfo label + val () = display (R.Label.layout label) + val () = + display + (seq [str "live: ", Vector.layout Operand.layout live]) + val () = Vector.foreach (args, diagVar o #1) + val () = Vector.foreach (statements, diagStatement) + in + () + end) + in () + end) + in + {handlersInfo = Option.map (handlersInfo, fn {handlerOffset, linkOffset, ...} => + {handlerOffset = handlerOffset, + linkOffset = linkOffset}), + labelInfo = labelInfo} + end + +val allocate = + Trace.trace + ("AllocateVariables.allocate", + fn {function, ...} => Func.layout (Function.name function), + Layout.ignore) + allocate + +end diff -Nru mlton-20130715/mlton/backend/allocate-variables.sig mlton-20210117+dfsg/mlton/backend/allocate-variables.sig --- mlton-20130715/mlton/backend/allocate-variables.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/allocate-variables.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,47 @@ +(* Copyright (C) 2009,2017,2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature ALLOCATE_VARIABLES_STRUCTS = + sig + structure Rssa: RSSA + structure Machine: MACHINE + sharing Rssa.BackendAtoms = Machine.BackendAtoms + end + +signature ALLOCATE_VARIABLES = + sig + include ALLOCATE_VARIABLES_STRUCTS + + val allocate: + {function: Rssa.Function.t, + paramOffsets: (Rssa.Var.t * Rssa.Type.t) vector -> {offset: Bytes.t, ty: Rssa.Type.t} vector, + varInfo: Rssa.Var.t -> { + (* If (isSome operand) then a stack slot or + * temporary needs to be allocated for the + * variable. + *) + operand: Machine.Operand.t option ref option, + ty: Machine.Type.t + } + } + -> {(* If handlers are used, handlersInfo gives the stack offsets + * where the handler and link (old exnStack) should be stored. + *) + handlersInfo: {handlerOffset: Bytes.t, + linkOffset: Bytes.t} option, + labelInfo: + Rssa.Label.t -> {(* Live operands at the beginning of the block. *) + live: Machine.Operand.t vector, + (* Live operands at the beginning of the block, + * excepting its formals. + *) + liveNoFormals: Machine.Operand.t vector, + (* Size of frame including return address. *) + size: Bytes.t}} + end diff -Nru mlton-20130715/mlton/backend/backend-atoms.fun mlton-20210117+dfsg/mlton/backend/backend-atoms.fun --- mlton-20130715/mlton/backend/backend-atoms.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/backend-atoms.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,39 @@ +(* Copyright (C) 2019-2020 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor BackendAtoms (S: BACKEND_ATOMS_STRUCTS): BACKEND_ATOMS = +struct + +structure BackendAtoms = + struct + open S + + structure Runtime = Runtime () + structure ObjptrTycon = ObjptrTycon (structure RealSize = RealSize + structure Runtime = Runtime + structure WordSize = WordSize + structure WordX = WordX) + structure RepType = RepType (structure CFunction = CFunction + structure CType = CType + structure Const = Const + structure Label = Label + structure ObjptrTycon = ObjptrTycon + structure Prim = Prim + structure Prod = Prod + structure RealSize = RealSize + structure RealX = RealX + structure Runtime = Runtime + structure WordSize = WordSize + structure WordX = WordX + structure WordXVector = WordXVector) + structure ObjectType = RepType.ObjectType + + structure Type = RepType + end + +open BackendAtoms + +end diff -Nru mlton-20130715/mlton/backend/backend-atoms.sig mlton-20210117+dfsg/mlton/backend/backend-atoms.sig --- mlton-20130715/mlton/backend/backend-atoms.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/backend-atoms.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,59 @@ +(* Copyright (C) 2019-2020 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature BACKEND_ATOMS_STRUCTS = + sig + include ATOMS + end + +signature BACKEND_ATOMS' = + sig + include BACKEND_ATOMS_STRUCTS + + structure ObjectType: OBJECT_TYPE + structure ObjptrTycon: OBJPTR_TYCON + structure Runtime: RUNTIME + structure Type: REP_TYPE + + sharing ObjectType = Type.ObjectType + sharing ObjptrTycon = ObjectType.ObjptrTycon = Type.ObjptrTycon + sharing Runtime = ObjectType.Runtime = Type.Runtime + + (* SML/NJ bug: + * + * `sharing Atoms = Type` + * + * should suffice, instead of the following enumeration, + * but leads to `implied type sharing violation` errors; + * the sharing of `Atoms` and `Type` seems to "forget" + * the components of `Atoms` not present in `Type`. + *) + (* sharing Atoms = Type *) + sharing CFunction = Type.CFunction + sharing CType = Type.CType + sharing Const = Type.Const + sharing Label = Type.Label + sharing Prim = Type.Prim + sharing Prod = Type.Prod + sharing RealSize = ObjptrTycon.RealSize = RealX.RealSize = Type.RealSize + sharing RealX = Type.RealX + sharing WordSize = ObjptrTycon.WordSize = Type.WordSize = WordX.WordSize + sharing WordX = ObjptrTycon.WordX = Type.WordX + sharing WordXVector = Type.WordXVector + end + +signature BACKEND_ATOMS = + sig + structure BackendAtoms: BACKEND_ATOMS' + + include BACKEND_ATOMS' + + sharing Atoms = BackendAtoms.Atoms + sharing ObjectType = BackendAtoms.ObjectType + sharing ObjptrTycon = BackendAtoms.ObjptrTycon + sharing Runtime = BackendAtoms.Runtime + sharing Type = BackendAtoms.Type + end diff -Nru mlton-20130715/mlton/backend/backend.fun mlton-20210117+dfsg/mlton/backend/backend.fun --- mlton-20130715/mlton/backend/backend.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/backend.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2013 Matthew Fluet. +(* Copyright (C) 2009,2013-2014,2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -16,14 +16,15 @@ local open Machine in - structure Global = Global + structure CFunction = CFunction structure Label = Label structure Live = Live structure ObjptrTycon = ObjptrTycon structure RealX = RealX - structure Register = Register structure Runtime = Runtime structure StackOffset = StackOffset + structure StaticHeap = StaticHeap + structure Temporary = Temporary structure WordSize = WordSize structure WordX = WordX structure WordXVector = WordXVector @@ -34,7 +35,6 @@ structure GCField = GCField end -structure Rssa = Rssa (open Ssa Machine) structure R = Rssa local open Rssa @@ -43,25 +43,18 @@ structure Const = Const structure Func = Func structure Function = Function + structure Object = Object + structure ObjectType = ObjectType structure Prim = Prim + structure Prod = Prod structure Type = Type structure Var = Var end -structure AllocateRegisters = AllocateRegisters (structure Machine = Machine +structure AllocateVariables = AllocateVariables (structure Machine = Machine structure Rssa = Rssa) structure Chunkify = Chunkify (Rssa) -structure ImplementHandlers = ImplementHandlers (structure Rssa = Rssa) -structure ImplementProfiling = ImplementProfiling (structure Machine = Machine - structure Rssa = Rssa) -structure LimitCheck = LimitCheck (structure Rssa = Rssa) structure ParallelMove = ParallelMove () -structure SignalCheck = SignalCheck(structure Rssa = Rssa) -structure SsaToRssa = SsaToRssa (structure Rssa = Rssa - structure Ssa = Ssa) - -nonfix ^ -fun ^ r = valOf (!r) structure VarOperand = struct @@ -81,18 +74,17 @@ | Const oper => seq [str "Const ", M.Operand.layout oper] end - val operand: t -> M.Operand.t = - fn Allocate {operand, ...} => ^operand - | Const oper => oper + val operand: t -> M.Operand.t option = + fn Allocate {operand, ...} => !operand + | Const oper => SOME oper end -structure IntSet = UniqueSet (val cacheSize: int = 1 - val bits: int = 14 - structure Element = - struct - open Int - fun hash n = Word.fromInt n - end) +structure ByteSet = UniqueSet (val cacheSize: int = 1 + val bits: int = 14 + structure Element = + struct + open Bytes + end) structure Chunk = struct @@ -143,102 +135,15 @@ start = start} end -fun toMachine (program: Ssa.Program.t, codegen) = +fun toMachine (rssa: Rssa.Program.t) = let - fun pass (name, doit, program) = - Control.passTypeCheck {display = Control.Layouts Rssa.Program.layouts, - name = name, - stats = R.Program.layoutStats, - style = Control.No, - suffix = "rssa", - thunk = fn () => doit program, - typeCheck = R.Program.typeCheck} - val program = pass ("toRssa", SsaToRssa.convert, (program, codegen)) - fun rssaSimplify p = - let - open Rssa - fun pass' ({name, doit}, sel, p) = - let - val _ = - let open Control - in maybeSaveToFile - ({name = name, - suffix = "pre.rssa"}, - Control.No, p, Control.Layouts Program.layouts) - end - val p = - Control.passTypeCheck - {display = Control.Layouts - (fn (r,output) => - Program.layouts (sel r, output)), - name = name, - stats = Program.layoutStats o sel, - style = Control.No, - suffix = "post.rssa", - thunk = fn () => doit p, - typeCheck = Program.typeCheck o sel} - in - p - end - fun pass ({name, doit}, p) = - pass' ({name = name, doit = doit}, fn p => p, p) - fun maybePass ({name, doit}, p) = - if List.exists (!Control.dropPasses, fn re => - Regexp.Compiled.matchesAll (re, name)) - then p - else pass ({name = name, doit = doit}, p) - val p = maybePass ({name = "rssaShrink1", - doit = Program.shrink}, p) - val p = pass ({name = "insertLimitChecks", - doit = LimitCheck.transform}, p) - val p = pass ({name = "insertSignalChecks", - doit = SignalCheck.transform}, p) - val p = pass ({name = "implementHandlers", - doit = ImplementHandlers.transform}, p) - val p = maybePass ({name = "rssaShrink2", - doit = Program.shrink}, p) - val () = Program.checkHandlers p - val (p, makeProfileInfo) = - pass' ({name = "implementProfiling", - doit = ImplementProfiling.doit}, - fn (p,_) => p, p) - val p = maybePass ({name = "rssaOrderFunctions", - doit = Program.orderFunctions}, p) - in - (p, makeProfileInfo) - end - val (program, makeProfileInfo) = - Control.passTypeCheck - {display = Control.Layouts (fn ((program, _), output) => - Rssa.Program.layouts (program, output)), - name = "rssaSimplify", - stats = fn (program,_) => Rssa.Program.layoutStats program, - style = Control.No, - suffix = "rssa", - thunk = fn () => rssaSimplify program, - typeCheck = R.Program.typeCheck o #1} - val _ = - let - open Control - in - if !keepRSSA - then saveToFile ({suffix = "rssa"}, - No, - program, - Layouts Rssa.Program.layouts) - else () - end - val program = - Control.pass - {display = Control.Layouts Machine.Program.layouts, - name = "toMachine", - stats = fn _ => Layout.empty, - style = Control.No, - suffix = "machine", - thunk = fn () => -let - val R.Program.T {functions, handlesSignals, main, objectTypes} = program - (* Chunk information *) + val R.Program.T {functions, handlesSignals, main, objectTypes, profileInfo, statics} = rssa + (* tyconTy *) + fun tyconTy tycon = + Vector.sub (objectTypes, ObjptrTycon.index tycon) + (* returnsTo and raisesTo info *) + val rflow = R.Program.rflow rssa + (* Chunk info *) val {get = labelChunk, set = setLabelChunk, ...} = Property.getSetOnce (Label.plist, Property.initRaise ("labelChunk", Label.layout)) @@ -253,11 +158,10 @@ in c end - val handlers = ref [] (* Set funcChunk and labelChunk. *) val _ = Vector.foreach - (Chunkify.chunkify program, fn {funcs, labels} => + (Chunkify.chunkify rssa, fn {funcs, labels} => let val c = newChunk () val _ = Vector.foreach (funcs, fn f => setFuncChunk (f, c)) @@ -265,83 +169,138 @@ in () end) - (* FrameInfo. *) + (* Profile info *) + val (sourceMaps, getFrameSourceSeqIndex) = + case profileInfo of + NONE => (NONE, fn _ => NONE) + | SOME {sourceMaps, getFrameSourceSeqIndex} => (SOME sourceMaps, getFrameSourceSeqIndex) + (* Frame info *) local - val frameLabels = ref [] - val frameLayouts = ref [] - val frameLayoutsCounter = Counter.new 0 - val _ = IntSet.reset () - val table = HashSet.new {hash = Word.fromInt o #frameOffsetsIndex} - val frameOffsets: Bytes.t vector list ref = ref [] - val frameOffsetsCounter = Counter.new 0 - val {get = frameOffsetsIndex: IntSet.t -> int, ...} = + val frameInfos: M.FrameInfo.t list ref = ref [] + val nextFrameInfo = Counter.generator 0 + val _ = ByteSet.reset () + val table = + let + fun equals ({kind = k1, frameOffsets = fo1, size = s1, sourceSeqIndex = ssi1}, + {kind = k2, frameOffsets = fo2, size = s2, sourceSeqIndex = ssi2}) = + M.FrameInfo.Kind.equals (k1, k2) + andalso M.FrameOffsets.equals (fo1, fo2) + andalso Bytes.equals (s1, s2) + andalso Option.equals (ssi1, ssi2, Int.equals) + fun hash {kind, frameOffsets, size, sourceSeqIndex} = + Hash.list [M.FrameInfo.Kind.hash kind, + M.FrameOffsets.hash frameOffsets, + Bytes.hash size, + Hash.optionMap (sourceSeqIndex, Word.fromInt)] + in + HashTable.new {equals = equals, + hash = hash} + end + val frameOffsets: M.FrameOffsets.t list ref = ref [] + val nextFrameOffset = Counter.generator 0 + val {get = getFrameOffsets: ByteSet.t -> M.FrameOffsets.t, ...} = Property.get - (IntSet.plist, + (ByteSet.plist, Property.initFun (fn offsets => let - val _ = List.push (frameOffsets, - QuickSort.sortVector - (Vector.fromListMap - (IntSet.toList offsets, Bytes.fromInt), - Bytes.<=)) + val index = nextFrameOffset () + val offsets = + QuickSort.sortVector + (Vector.fromList (ByteSet.toList offsets), + Bytes.<=) + val fo = + M.FrameOffsets.new {index = index, offsets = offsets} + val _ = List.push (frameOffsets, fo) in - Counter.next frameOffsetsCounter + fo end)) in - fun allFrameInfo () = + fun allFrameInfo chunks = let (* Reverse lists because the index is from back of list. *) - val frameLabels = Vector.fromListRev (!frameLabels) - val frameLayouts = Vector.fromListRev (!frameLayouts) + val frameInfos = Vector.fromListRev (!frameInfos) val frameOffsets = Vector.fromListRev (!frameOffsets) + (* If we are using the C or LLVM codegens, then we reindex the + * frameInfos so that the indices of the entry frames of a chunk + * are consecutive integers so that gcc will use a jump table. + *) + val frameInfos = + if !Control.codegen = Control.CCodegen orelse !Control.codegen = Control.LLVMCodegen + then let + val done = + Array.array (Vector.length frameInfos, false) + val newFrameInfos = ref [] + fun newFrameInfo fi = + if Array.sub (done, M.FrameInfo.index fi) + then () + else (Array.update (done, M.FrameInfo.index fi, true) + ; List.push (newFrameInfos, fi)) + val () = + List.foreach + (chunks, fn M.Chunk.T {blocks, ...} => + Vector.foreach + (blocks, fn M.Block.T {kind, ...} => + case M.Kind.frameInfoOpt kind of + NONE => () + | SOME fi => if M.Kind.isEntry kind + then newFrameInfo fi + else ())) + val () = Vector.foreach (frameInfos, newFrameInfo) + val frameInfos = + Vector.fromListRev (!newFrameInfos) + val () = + Vector.foreachi + (frameInfos, fn (i, fi) => + M.FrameInfo.setIndex (fi, i)) + in + frameInfos + end + else frameInfos in - (frameLabels, frameLayouts, frameOffsets) + (frameInfos, frameOffsets) end - fun getFrameLayoutsIndex {isC: bool, - label: Label.t, - offsets: Bytes.t list, - size: Bytes.t}: int = + fun getFrameInfo {entry: bool, + kind: M.FrameInfo.Kind.t, + offsets: Bytes.t list, + size: Bytes.t, + sourceSeqIndex: int option}: M.FrameInfo.t = let - val foi = - frameOffsetsIndex (IntSet.fromList - (List.map (offsets, Bytes.toInt))) + val frameOffsets = getFrameOffsets (ByteSet.fromList offsets) fun new () = let - val _ = - List.push (frameLayouts, - {frameOffsetsIndex = foi, - isC = isC, - size = size}) - val _ = List.push (frameLabels, label) + val index = nextFrameInfo () + val frameInfo = + M.FrameInfo.new + {frameOffsets = frameOffsets, + index = index, + kind = kind, + size = size, + sourceSeqIndex = sourceSeqIndex} + val _ = List.push (frameInfos, frameInfo) in - Counter.next frameLayoutsCounter + frameInfo end in - (* We need to give each frame its own layout index in two cases. - * 1. If we are using the C codegen, in which case we want the - * indices in a chunk to be consecutive integers so that gcc - * will use a jump table. - * 2. If we are profiling, we want every frame to have a - * different index so that it can have its own profiling info. - * This will be created by the call to makeProfileInfo at the - * end of the backend. + (* If we are using the C or LLVM codegens, then we want + * each entry frame to have a different index, because + * the index will be used for the trampoline + * (nextChunks mapping and ChunkSwitch); moreover, we + * want the indices of entry frames of a chunk to be + * consecutive integers so that gcc will use a jump + * table. *) - if !Control.codegen = Control.CCodegen - orelse !Control.profile <> Control.ProfileNone + if entry + andalso (!Control.codegen = Control.CCodegen + orelse !Control.codegen = Control.LLVMCodegen) then new () - else - #frameLayoutsIndex - (HashSet.lookupOrInsert - (table, Word.fromInt foi, - fn {frameOffsetsIndex = foi', isC = isC', size = s', ...} => - foi = foi' - andalso isC = isC' - andalso Bytes.equals (size, s'), - fn () => {frameLayoutsIndex = new (), - frameOffsetsIndex = foi, - isC = isC, - size = size})) + else HashTable.lookupOrInsert + (table, + {frameOffsets = frameOffsets, + kind = kind, + size = size, + sourceSeqIndex = sourceSeqIndex}, + fn () => new ()) end end val {get = frameInfo: Label.t -> M.FrameInfo.t option, @@ -353,26 +312,6 @@ Label.layout, Option.layout M.FrameInfo.layout, Unit.layout) setFrameInfo - (* The global raise operands. *) - local - val table: (Type.t vector * M.Live.t vector) list ref = ref [] - in - fun raiseOperands (ts: Type.t vector): M.Live.t vector = - case List.peek (!table, fn (ts', _) => - Vector.equals (ts, ts', Type.equals)) of - NONE => - let - val gs = - Vector.map (ts, fn ty => - M.Live.Global - (Global.new {isRoot = false, - ty = ty})) - val _ = List.push (table, (ts, gs)) - in - gs - end - | SOME (_, gs) => gs - end val {get = varInfo: Var.t -> {operand: VarOperand.t, ty: Type.t}, set = setVarInfo, ...} = @@ -388,93 +327,217 @@ fn {operand, ...} => Layout.record [("operand", VarOperand.layout operand)]) varInfo - val varOperand: Var.t -> M.Operand.t = + val varOperandOpt: Var.t -> M.Operand.t option = VarOperand.operand o #operand o varInfo + val varOperand: Var.t -> M.Operand.t = valOf o varOperandOpt + val varOperand = + Trace.trace ("Backend.varOperand", + Var.layout, + M.Operand.layout) + varOperand + + val (addToStaticHeaps, finishStaticHeaps, allGlobalObjptrs) = + let + open StaticHeap + val allGlobalObjptrs = ref [] + fun varElem (x: Var.t): Elem.t * bool = + case varOperand x of + M.Operand.Const c => (Elem.Const c, false) + | M.Operand.Global g => + (case List.peek (!allGlobalObjptrs, fn (_, g') => + M.Global.equals (g, g')) of + SOME (r, _) => (Elem.Ref r, true) + | NONE => Error.bug "Backend.staticHeaps.varElem: invalid operand,Global") + | M.Operand.StaticHeapRef r => (Elem.Ref r, + Kind.isDynamic (Ref.kind r)) + | _ => Error.bug "Backend.staticHeaps.varElem: invalid operand" + fun translateOperand (oper: R.Operand.t): Elem.t * bool = + case oper of + R.Operand.Cast (z, ty) => + let + val (z, hasDynamic) = translateOperand z + in + (Elem.Cast (z, ty), hasDynamic) + end + | R.Operand.Const c => (Elem.Const c, false) + | R.Operand.Var {var, ...} => varElem var + | _ => Error.bug "Backend.staticHeaps.translateOperand: invalid operand" + fun translateInit init = + Vector.mapAndFold + (init, false, fn ({offset, src}, hasDynamic') => + let + val (src, hasDynamic) = translateOperand src + in + ({offset = offset, src = src}, + hasDynamic' orelse hasDynamic) + end) + fun translateObject obj = + case obj of + R.Object.Normal {init, tycon} => + let + val {components, ...} = ObjectType.deNormal (tyconTy tycon) + val (init, hasDynamic) = translateInit init + val kind = + if hasDynamic + then Kind.Dynamic + else if Prod.someIsMutable components + then if Vector.exists (Prod.dest components, + fn {elt, isMutable} => + isMutable andalso Type.isObjptr elt) + then (* Reference to root static heap + * won't map to valid card slot. + *) + if !Control.markCards + then Kind.Dynamic + else Kind.Root + else Kind.Mutable + else Kind.Immutable + in + {kind = kind, + obj = Object.Normal {init = init, + tycon = tycon}, + offset = Runtime.normalMetaDataSize (), + size = R.Object.size (obj, {tyconTy = tyconTy}), + tycon = tycon} + end + | R.Object.Sequence {init, tycon} => + let + val {components, hasIdentity} = ObjectType.deSequence (tyconTy tycon) + val (init, hasDynamic) = + Vector.mapAndFold + (init, false, fn (init, hasDynamic') => + let + val (init, hasDynamic) = translateInit init + in + (init, hasDynamic' orelse hasDynamic) + end) + val kind = + if hasDynamic + then Kind.Dynamic + else if hasIdentity + then if Vector.isEmpty init + then (* An empty sequence; + * elements will never be updated, + * but header may be updated. + *) + Kind.Mutable + else if Vector.exists (Prod.dest components, + fn {elt, isMutable} => + isMutable andalso Type.isObjptr elt) + then (* Reference to root static heap + * won't map to valid card slot. + *) + if !Control.markCards + then Kind.Dynamic + else Kind.Root + else Kind.Mutable + else Kind.Immutable + in + {kind = kind, + obj = Object.Sequence {init = init, + tycon = tycon}, + offset = Runtime.sequenceMetaDataSize (), + size = R.Object.size (obj, {tyconTy = tyconTy}), + tycon = tycon} + end + + val kindAcc = Kind.memoize (fn _ => + {objs = ref [], + nextIndex = Counter.generator 0, + nextOffset = ref Bytes.zero}) + + fun add obj = + let + val {kind, obj, offset, size, tycon} = + translateObject obj + val {objs, nextIndex, nextOffset} = kindAcc kind + val r = Ref.T {index = nextIndex (), + kind = kind, + offset = Bytes.+ (!nextOffset, offset), + ty = Type.objptr tycon} + val oper = + case kind of + Kind.Dynamic => + let + val g = M.Global.new (Type.objptr tycon) + in + List.push (allGlobalObjptrs, (r, g)) + ; M.Operand.Global g + end + | _ => M.Operand.StaticHeapRef r + in + List.push (objs, obj) + ; nextOffset := Bytes.+ (!nextOffset, size) + ; oper + end + + fun finish () = + Kind.memoize (Vector.fromListRev o ! o #objs o kindAcc) + in + (add, finish, fn () => !allGlobalObjptrs) + end + + val () = Vector.foreach (statics, fn {dst = (dstVar, dstTy), obj} => + let + val oper = addToStaticHeaps obj + in + setVarInfo (dstVar, {operand = VarOperand.Const oper, ty = dstTy}) + end) + (* Hash tables for uniquifying globals. *) local - fun ('a, 'b) make (equals: 'a * 'a -> bool, - info: 'a -> string * Type.t * 'b) = + fun 'a make {equals: 'a * 'a -> bool, + hash: 'a -> word, + oper: 'a -> M.Operand.t} = let - val set: {a: 'a, - global: M.Global.t, - hash: word, - value: 'b} HashSet.t = HashSet.new {hash = #hash} - fun get (a: 'a): M.Operand.t = - let - val (string, ty, value) = info a - val hash = String.hash string - in - M.Operand.Global - (#global - (HashSet.lookupOrInsert - (set, hash, - fn {a = a', ...} => equals (a, a'), - fn () => {a = a, - hash = hash, - global = M.Global.new {isRoot = true, - ty = ty}, - value = value}))) - end - fun all () = - HashSet.fold - (set, [], fn ({global, value, ...}, ac) => - (global, value) :: ac) + val table: ('a, M.Operand.t) HashTable.t = + HashTable.new {equals = equals, hash = hash} + fun get (value: 'a): M.Operand.t = + HashTable.lookupOrInsert + (table, value, fn () => oper value) in - (all, get) + get end in - val (allIntInfs, globalIntInf) = - make (IntInf.equals, - fn i => (IntInf.toString i, - Type.intInf (), - i)) - val (allReals, globalReal) = - make (RealX.equals, - fn r => (RealX.toString r, - Type.real (RealX.size r), - r)) - val (allVectors, globalVector) = - make (WordXVector.equals, - fn v => (WordXVector.toString v, - Type.ofWordXVector v, - v)) + local + val allGlobalReals = ref [] + in + val globalReal = + make {equals = RealX.equals, + hash = RealX.hash, + oper = fn r => let + val g = M.Global.new (Type.real (RealX.size r)) + in + List.push (allGlobalReals, (r, g)) + ; M.Operand.Global g + end} + val allGlobalReals = fn () => !allGlobalReals + end + + val globalWordVector = + make {equals = WordXVector.equals, + hash = WordXVector.hash, + oper = addToStaticHeaps o R.Object.fromWordXVector} end - fun bogusOp (t: Type.t): M.Operand.t = - case Type.deReal t of - NONE => let - val bogusWord = - M.Operand.Word - (WordX.zero - (WordSize.fromBits (Type.width t))) - in - case Type.deWord t of - NONE => M.Operand.Cast (bogusWord, t) - | SOME _ => bogusWord - end - | SOME s => globalReal (RealX.zero s) fun constOperand (c: Const.t): M.Operand.t = let datatype z = datatype Const.t in case c of - IntInf i => - (case Const.SmallIntInf.toWord i of - NONE => globalIntInf i - | SOME w => M.Operand.Cast (M.Operand.Word w, Type.intInf ())) - | Null => M.Operand.Null + IntInf _ => + Error.bug "Backend.constOperand: IntInf" | Real r => globalReal r - | Word w => M.Operand.Word w - | WordVector v => globalVector v + | WordVector v => globalWordVector v + | _ => M.Operand.Const c end - fun parallelMove {chunk = _, - dsts: M.Operand.t vector, + fun parallelMove {dsts: M.Operand.t vector, srcs: M.Operand.t vector}: M.Statement.t vector = let val moves = Vector.fold2 (srcs, dsts, [], fn (src, dst, ac) => {src = src, dst = dst} :: ac) - fun temp r = - M.Operand.Register (Register.new (M.Operand.ty r, NONE)) + fun temp t = + M.Operand.Temporary (Temporary.new (M.Operand.ty t, NONE)) in Vector.fromList (ParallelMove.move { @@ -489,140 +552,204 @@ case field of GCField.Frontier => M.Operand.Frontier | GCField.StackTop => M.Operand.StackTop - | _ => - M.Operand.Offset {base = M.Operand.GCState, - offset = GCField.offset field, - ty = Type.ofGCField field} + | _ => M.Operand.gcField field val exnStackOp = runtimeOp GCField.ExnStack val stackBottomOp = runtimeOp GCField.StackBottom val stackTopOp = runtimeOp GCField.StackTop + + val rec isWord = + fn M.Operand.Const (Const.Word _) => true + | M.Operand.Cast (z, _) => isWord z + | _ => false + fun bogusOp (t: Type.t): M.Operand.t = + case Type.deReal t of + NONE => let + val bogusWord = + M.Operand.word + (WordX.zero + (WordSize.fromBits (Type.width t))) + in + case Type.deWord t of + NONE => M.Operand.Cast (bogusWord, t) + | SOME _ => bogusWord + end + | SOME s => globalReal (RealX.zero s) fun translateOperand (oper: R.Operand.t): M.Operand.t = let datatype z = datatype R.Operand.t in case oper of - ArrayOffset {base, index, offset, scale, ty} => - M.Operand.ArrayOffset {base = translateOperand base, - index = translateOperand index, - offset = offset, - scale = scale, - ty = ty} - | Cast (z, t) => M.Operand.Cast (translateOperand z, t) + Cast (z, t) => M.Operand.Cast (translateOperand z, t) | Const c => constOperand c - | EnsuresBytesFree => - Error.bug "Backend.translateOperand: EnsuresBytesFree" | GCState => M.Operand.GCState | Offset {base, offset, ty} => let val base = translateOperand base in - if M.Operand.isLocation base - then M.Operand.Offset {base = base, - offset = offset, - ty = ty} - else bogusOp ty + (* Native codegens can't handle this; + * Dead code may treat small constant + * intInfs as large and take offsets *) + if isWord base + then bogusOp ty + else M.Operand.Offset {base = base, + offset = offset, + ty = ty} end | ObjptrTycon opt => - M.Operand.Word - (WordX.fromIntInf - (Word.toIntInf (Runtime.typeIndexToHeader - (ObjptrTycon.index opt)), - WordSize.objptrHeader ())) + M.Operand.word (ObjptrTycon.toHeader opt) | Runtime f => runtimeOp f + | SequenceOffset {base, index, offset, scale, ty} => + let + val base = translateOperand base + in + if isWord base + then bogusOp ty + else M.Operand.SequenceOffset + {base = base, + index = translateOperand index, + offset = offset, + scale = scale, + ty = ty} + end | Var {var, ...} => varOperand var end fun translateOperands ops = Vector.map (ops, translateOperand) fun genStatement (s: R.Statement.t, - handlerLinkOffset: {handler: Bytes.t, - link: Bytes.t} option) + handlersInfo: {handlerOffset: Bytes.t, + linkOffset: Bytes.t} option) : M.Statement.t vector = let - fun handlerOffset () = #handler (valOf handlerLinkOffset) - fun linkOffset () = #link (valOf handlerLinkOffset) + fun handlerOffset () = #handlerOffset (valOf handlersInfo) + fun linkOffset () = #linkOffset (valOf handlersInfo) datatype z = datatype R.Statement.t + fun move arg = + case M.Statement.move arg of + NONE => Vector.new0 () + | SOME move => Vector.new1 move + fun mkInit (init, mkDst) = + Vector.toListMap + (init, fn {src, offset} => + move {dst = mkDst {offset = offset, + ty = R.Operand.ty src}, + src = translateOperand src}) in case s of - Bind {dst = (var, _), isMutable, src} => - if isMutable - orelse (case #operand (varInfo var) of - VarOperand.Const _ => false - | _ => true) - then (Vector.new1 - (M.Statement.move {dst = varOperand var, - src = translateOperand src})) - else Vector.new0 () + Bind {dst = (var, _), src, ...} => + (* CHECK *) + let + val oper = varOperand var + in + if M.Operand.isDestination oper + then move {dst = oper, + src = translateOperand src} + else Vector.new0 () (* Destination already propagated *) + end | Move {dst, src} => - Vector.new1 - (M.Statement.move {dst = translateOperand dst, - src = translateOperand src}) - | Object {dst, header, size} => - M.Statement.object {dst = varOperand (#1 dst), - header = header, - size = size} - | PrimApp {dst, prim, args} => + move {dst = translateOperand dst, + src = translateOperand src} + | Object {dst = (dst, _), obj as Object.Normal {init, tycon}} => let - datatype z = datatype Prim.Name.t + val dst = varOperand dst + val header = ObjptrTycon.toHeader tycon + fun mkDst {offset, ty} = + M.Operand.Offset {base = dst, + offset = offset, + ty = ty} in - case Prim.name prim of - MLton_touch => Vector.new0 () - | _ => - Vector.new1 - (M.Statement.PrimApp - {args = translateOperands args, - dst = Option.map (dst, varOperand o #1), - prim = prim}) + Vector.concat + (M.Statement.object {dst = dst, + header = header, + size = Object.size (obj, {tyconTy = tyconTy})} + :: mkInit (init, mkDst)) end + | Object {dst = (dst, _), obj as Object.Sequence {init, tycon}} => + let + val dst = varOperand dst + val header = ObjptrTycon.toHeader tycon + val elt = ObjectType.componentsSize (tyconTy tycon) + val (scale, mkIndex) = + case Scale.fromBytes elt of + NONE => + (Scale.One, fn index => + M.Operand.word + (WordX.mul + (WordX.fromInt (index, WordSize.seqIndex ()), + WordX.fromBytes (elt, WordSize.seqIndex ()), + {signed = false}))) + | SOME s => + (s, fn index => + M.Operand.word + (WordX.fromInt (index, WordSize.seqIndex ()))) + in + Vector.concat + (M.Statement.sequence {dst = dst, + header = header, + length = Vector.length init, + size = Object.size (obj, {tyconTy = tyconTy})} + :: (List.concat o Vector.toListMapi) + (init, fn (index, init) => + let + fun mkDst {offset, ty} = + M.Operand.SequenceOffset + {base = dst, + index = mkIndex index, + offset = offset, + scale = scale, + ty = ty} + in + mkInit (init, mkDst) + end)) + end + | PrimApp {dst, prim, args} => + (case prim of + Prim.MLton_touch => Vector.new0 () + | _ => + Vector.new1 + (M.Statement.PrimApp + {args = translateOperands args, + dst = Option.map (dst, varOperand o #1), + prim = prim})) | ProfileLabel s => Vector.new1 (M.Statement.ProfileLabel s) | SetExnStackLocal => - (* ExnStack = stackTop + (offset + LABEL_SIZE) - StackBottom; *) + (* ExnStack = stackTop + (handlerOffset + LABEL_SIZE) - StackBottom; *) let - val tmp1 = - M.Operand.Register - (Register.new (Type.cpointer (), NONE)) - val tmp2 = - M.Operand.Register - (Register.new (Type.csize (), NONE)) + val tmp = + M.Operand.Temporary + (Temporary.new (Type.cpointer (), NONE)) in - Vector.new3 + Vector.new2 (M.Statement.PrimApp {args = (Vector.new2 (stackTopOp, - M.Operand.Word - (WordX.fromIntInf - (Int.toIntInf - (Bytes.toInt - (Bytes.+ (handlerOffset (), Runtime.labelSize ()))), - WordSize.cpointer ())))), - dst = SOME tmp1, - prim = Prim.cpointerAdd}, + M.Operand.word + (WordX.fromBytes + (Bytes.+ (handlerOffset (), Runtime.labelSize ()), + WordSize.cptrdiff ())))), + dst = SOME tmp, + prim = Prim.CPointer_add}, M.Statement.PrimApp - {args = Vector.new2 (tmp1, stackBottomOp), - dst = SOME tmp2, - prim = Prim.cpointerDiff}, - M.Statement.move - {dst = exnStackOp, - src = M.Operand.Cast (tmp2, Type.exnStack ())}) + {args = Vector.new2 (tmp, stackBottomOp), + dst = SOME exnStackOp, + prim = Prim.CPointer_diff}) end | SetExnStackSlot => - (* ExnStack = *(uint* )(stackTop + offset); *) - Vector.new1 - (M.Statement.move - {dst = exnStackOp, - src = M.Operand.stackOffset {offset = linkOffset (), - ty = Type.exnStack ()}}) + (* ExnStack = *(ptrdiff_t* )(stackTop + linkOffset); *) + move + {dst = exnStackOp, + src = M.Operand.stackOffset {offset = linkOffset (), + ty = Type.exnStack ()}} | SetHandler h => - Vector.new1 - (M.Statement.move - {dst = M.Operand.stackOffset {offset = handlerOffset (), - ty = Type.label h}, - src = M.Operand.Label h}) + (* *(uintptr_t)(stackTop + handlerOffset) = h; *) + move + {dst = M.Operand.stackOffset {offset = handlerOffset (), + ty = Type.label h}, + src = M.Operand.Label h} | SetSlotExnStack => - (* *(uint* )(stackTop + offset) = ExnStack; *) - Vector.new1 - (M.Statement.move - {dst = M.Operand.stackOffset {offset = linkOffset (), - ty = Type.exnStack ()}, - src = exnStackOp}) + (* *(ptrdiff_t* )(stackTop + linkOffset) = ExnStack; *) + move + {dst = M.Operand.stackOffset {offset = linkOffset (), + ty = Type.exnStack ()}, + src = exnStackOp} | _ => Error.bug (concat ["Backend.genStatement: strange statement: ", R.Statement.toString s]) @@ -634,10 +761,9 @@ val bugTransfer = fn () => M.Transfer.CCall {args = (Vector.new1 - (globalVector + (globalWordVector (WordXVector.fromString "backend thought control shouldn't reach here"))), - frameInfo = NONE, func = Type.BuiltInCFunction.bug (), return = NONE} val {get = labelInfo: Label.t -> {args: (Var.t * Type.t) vector}, @@ -648,9 +774,8 @@ Trace.trace2 ("Backend.setLabelInfo", Label.layout, Layout.ignore, Unit.layout) setLabelInfo - fun callReturnOperands (xs: 'a vector, - ty: 'a -> Type.t, - shift: Bytes.t): StackOffset.t vector = + fun paramOffsets (xs: 'a vector, ty: 'a -> Type.t, + mk: {offset: Bytes.t, ty: Type.t} -> 'b): 'b vector = #1 (Vector.mapAndFold (xs, Bytes.zero, fn (x, offset) => @@ -658,32 +783,75 @@ val ty = ty x val offset = Type.align (ty, offset) in - (StackOffset.T {offset = Bytes.+ (shift, offset), ty = ty}, + (mk {offset = offset, ty = ty}, Bytes.+ (offset, Type.bytes ty)) end)) + fun paramStackOffsets (xs: 'a vector, ty: 'a -> Type.t, + shift: Bytes.t): StackOffset.t vector = + paramOffsets (xs, ty, fn {offset, ty} => + StackOffset.T {offset = Bytes.+ (offset, shift), + ty = ty}) val operandLive: M.Operand.t -> M.Live.t = valOf o M.Live.fromOperand val operandsLive: M.Operand.t vector -> M.Live.t vector = fn ops => Vector.map (ops, operandLive) + val isGlobal = + let + val {get: Var.t -> bool, set, rem, ...} = + Property.getSet + (Var.plist, + Property.initRaise ("Backend.toMachine.isGlobal", Var.layout)) + val _ = + Function.foreachDef (main, fn (x, _) => set (x, false)) + val _ = + List.foreach + (functions, fn f => + (Function.foreachUse (f, fn x => set (x, true)) + ; Function.foreachDef (f, fn (x, _) => rem x))) + in + get + end fun genFunc (f: Function.t, isMain: bool): unit = let val f = eliminateDeadCode f val {args, blocks, name, raises, returns, start, ...} = Function.dest f - val raises = Option.map (raises, fn ts => raiseOperands ts) - val returns = - Option.map (returns, fn ts => - callReturnOperands (ts, fn t => t, Bytes.zero)) - val chunk = funcChunk name - fun labelArgOperands (l: R.Label.t): M.Operand.t vector = - Vector.map (#args (labelInfo l), varOperand o #1) + val {raisesTo, returnsTo} = rflow name + val (returnLives, returnOperands) = + case returns of + NONE => (NONE, NONE) + | SOME returns => + let + val returnStackOffsets = + paramStackOffsets (returns, fn t => t, Bytes.zero) + in + (SOME (Vector.map (returnStackOffsets, M.Live.StackOffset)), + SOME (Vector.map (returnStackOffsets, M.Operand.StackOffset))) + end + val raiseLives = + case raises of + NONE => NONE + | SOME _ => SOME (Vector.new0 ()) fun newVarInfo (x, ty: Type.t) = let val operand = - if isMain - then VarOperand.Const (M.Operand.Global - (M.Global.new {isRoot = true, - ty = ty})) + if isMain andalso isGlobal x + then let + val _ = + Control.diagnostics + (fn display => + let + open Layout + in + display (seq + [str "Global: ", + R.Var.layout x, + str ": ", + R.Type.layout ty]) + end) + in + VarOperand.Const (M.Operand.Global (M.Global.new ty)) + end else VarOperand.Allocate {operand = ref NONE} in setVarInfo (x, {operand = operand, @@ -694,7 +862,7 @@ val _ = newVarInfos args val _ = Rssa.Function.dfs - (f, fn R.Block.T {args, label, statements, transfer, ...} => + (f, fn R.Block.T {args, label, statements, ...} => let val _ = setLabelInfo (label, {args = args}) val _ = newVarInfos args @@ -705,42 +873,38 @@ fun normal () = R.Statement.foreachDef (s, newVarInfo) in case s of - R.Statement.Bind {dst = (var, _), isMutable, src} => - if isMutable - then normal () - else - let - fun set (z: M.Operand.t, - casts: Type.t list) = - let - val z = - List.fold - (casts, z, fn (t, z) => - M.Operand.Cast (z, t)) - in - setVarInfo - (var, {operand = VarOperand.Const z, - ty = M.Operand.ty z}) - end - fun loop (z: R.Operand.t, casts) = - case z of - R.Operand.Cast (z, t) => - loop (z, t :: casts) - | R.Operand.Const c => - set (constOperand c, casts) - | R.Operand.Var {var = var', ...} => - (case #operand (varInfo var') of - VarOperand.Const z => - set (z, casts) - | VarOperand.Allocate _ => - normal ()) - | _ => normal () - in - loop (src, []) - end + R.Statement.Bind {dst = (var, _), src, ...} => + let + fun set (z: M.Operand.t, + casts: Type.t list) = + let + val z = + List.fold + (casts, z, fn (t, z) => + M.Operand.Cast (z, t)) + in + setVarInfo + (var, {operand = VarOperand.Const z, + ty = M.Operand.ty z}) + end + fun loop (z: R.Operand.t, casts) = + case z of + R.Operand.Cast (z, t) => + loop (z, t :: casts) + | R.Operand.Const c => + set (constOperand c, casts) + | R.Operand.Var {var = var', ...} => + (case #operand (varInfo var') of + VarOperand.Const z => + set (z, casts) + | VarOperand.Allocate _ => + normal ()) + | _ => normal () + in + loop (src, []) + end | _ => normal () end) - val _ = R.Transfer.foreachDef (transfer, newVarInfo) in fn () => () end) @@ -758,15 +922,13 @@ ty = ty} end in - val {handlerLinkOffset, labelInfo = labelRegInfo, ...} = + val {handlersInfo, labelInfo = labelRegInfo, ...} = let - val argOperands = - Vector.map - (callReturnOperands (args, #2, Bytes.zero), - M.Operand.StackOffset) + val paramOffsets = fn args => + paramOffsets (args, fn (_, ty) => ty, fn so => so) in - AllocateRegisters.allocate {argOperands = argOperands, - function = f, + AllocateVariables.allocate {function = f, + paramOffsets = paramOffsets, varInfo = varInfo} end end @@ -791,20 +953,21 @@ | _ => ac) else [] - val isC = + val (entry, kind) = case kind of - R.Kind.CReturn _ => true - | _ => false - val frameLayoutsIndex = - getFrameLayoutsIndex {isC = isC, - label = label, - offsets = offsets, - size = size} + R.Kind.Cont _=> (true, M.FrameInfo.Kind.ML_FRAME) + | R.Kind.CReturn {func} => (CFunction.maySwitchThreadsTo func, + M.FrameInfo.Kind.C_FRAME) + | R.Kind.Handler => (true, M.FrameInfo.Kind.ML_FRAME) + | R.Kind.Jump => (false, M.FrameInfo.Kind.ML_FRAME) + val frameInfo = + getFrameInfo {entry = entry, + kind = kind, + offsets = offsets, + size = size, + sourceSeqIndex = getFrameSourceSeqIndex label} in - setFrameInfo - (label, - SOME (M.FrameInfo.T - {frameLayoutsIndex = frameLayoutsIndex})) + setFrameInfo (label, SOME frameInfo) end in case R.Kind.frameStyle kind of @@ -815,28 +978,31 @@ (* ------------------------------------------------- *) (* genTransfer *) (* ------------------------------------------------- *) - fun genTransfer (t: R.Transfer.t, chunk: Chunk.t) + fun genTransfer (t: R.Transfer.t) : M.Statement.t vector * M.Transfer.t = let fun simple t = (Vector.new0 (), t) in case t of - R.Transfer.Arith {args, dst, overflow, prim, success, - ...} => - simple - (M.Transfer.Arith {args = translateOperands args, - dst = varOperand dst, - overflow = overflow, - prim = prim, - success = success}) - | R.Transfer.CCall {args, func, return} => - simple (M.Transfer.CCall - {args = translateOperands args, - frameInfo = (case return of - NONE => NONE - | SOME l => frameInfo l), - func = func, - return = return}) + R.Transfer.CCall {args, func, return} => + let + val return = + case return of + NONE => NONE + | SOME return => + let + val fio = frameInfo return + val {size, ...} = labelRegInfo return + in + SOME {return = return, + size = Option.map (fio, fn _ => size)} + end + in + simple (M.Transfer.CCall + {args = translateOperands args, + func = func, + return = return}) + end | R.Transfer.Call {func, args, return} => let datatype z = datatype R.Return.t @@ -862,12 +1028,11 @@ size = size}) end val dsts = - callReturnOperands + paramStackOffsets (args, R.Operand.ty, frameSize) val setupArgs = parallelMove - {chunk = chunk, - dsts = Vector.map (dsts, M.Operand.StackOffset), + {dsts = Vector.map (dsts, M.Operand.StackOffset), srcs = translateOperands args} val live = Vector.concat [operandsLive contLive, @@ -880,24 +1045,49 @@ (setupArgs, transfer) end | R.Transfer.Goto {dst, args} => - (parallelMove {srcs = translateOperands args, - dsts = labelArgOperands dst, - chunk = labelChunk dst}, - M.Transfer.Goto dst) + let + val (dsts', srcs') = + Vector.unzip + (Vector.keepAllMap2 + (#args (labelInfo dst), args, fn ((dst, _), src) => + case varOperandOpt dst of + NONE => NONE + | SOME dst => SOME (dst, translateOperand src))) + in + (parallelMove {dsts = dsts', srcs = srcs'}, + M.Transfer.Goto dst) + end | R.Transfer.Raise srcs => - (M.Statement.moves {dsts = Vector.map (valOf raises, - Live.toOperand), - srcs = translateOperands srcs}, - M.Transfer.Raise) + let + val handlerStackTop = + M.Operand.Temporary + (Temporary.new (Type.cpointer (), NONE)) + val dsts = + paramOffsets + (srcs, R.Operand.ty, fn {offset, ty} => + M.Operand.Offset {base = handlerStackTop, + offset = offset, + ty = ty}) + in + if Vector.isEmpty srcs + then (Vector.new0 (), M.Transfer.Raise {raisesTo = raisesTo}) + else (Vector.concat + [Vector.new1 + (M.Statement.PrimApp + {args = Vector.new2 (stackBottomOp, exnStackOp), + dst = SOME handlerStackTop, + prim = Prim.CPointer_add}), + parallelMove {dsts = dsts, + srcs = translateOperands srcs}], + M.Transfer.Raise {raisesTo = raisesTo}) + end | R.Transfer.Return xs => - (parallelMove {chunk = chunk, - dsts = Vector.map (valOf returns, - M.Operand.StackOffset), + (parallelMove {dsts = valOf returnOperands, srcs = translateOperands xs}, - M.Transfer.Return) + M.Transfer.Return {returnsTo = returnsTo}) | R.Transfer.Switch switch => let - val R.Switch.T {cases, default, size, test} = + val R.Switch.T {cases, default, expect, size, test} = switch in simple @@ -911,69 +1101,53 @@ (M.Switch.T {cases = cases, default = default, + expect = expect, size = size, test = translateOperand test})) end end val genTransfer = Trace.trace ("Backend.genTransfer", - R.Transfer.layout o #1, + R.Transfer.layout, Layout.tuple2 (Vector.layout M.Statement.layout, M.Transfer.layout)) genTransfer fun genBlock (R.Block.T {args, kind, label, statements, transfer, ...}) : unit = let - val _ = - if Label.equals (label, start) - then let - val live = #live (labelRegInfo start) - val returns = - Option.map - (returns, fn returns => - Vector.map (returns, Live.StackOffset)) - in - Chunk.newBlock - (chunk, - {label = funcToLabel name, - kind = M.Kind.Func, - live = operandsLive live, - raises = raises, - returns = returns, - statements = Vector.new0 (), - transfer = M.Transfer.Goto start}) - end - else () val {live, liveNoFormals, size, ...} = labelRegInfo label - val chunk = labelChunk label val statements = Vector.concatV (Vector.map (statements, fn s => - genStatement (s, handlerLinkOffset))) - val (preTransfer, transfer) = genTransfer (transfer, chunk) + genStatement (s, handlersInfo))) + val (preTransfer, transfer) = genTransfer transfer + fun doContHandler mkMachineKind = + let + val srcs = paramStackOffsets (args, #2, size) + val (dsts', srcs') = + Vector.unzip + (Vector.keepAllMap2 + (args, srcs, fn ((dst, _), src) => + case varOperandOpt dst of + NONE => NONE + | SOME dst => SOME (dst, M.Operand.StackOffset src))) + in + (mkMachineKind {args = Vector.map (srcs, Live.StackOffset), + frameInfo = valOf (frameInfo label)}, + liveNoFormals, + parallelMove {dsts = dsts', srcs = srcs'}) + end val (kind, live, pre) = case kind of - R.Kind.Cont _ => - let - val srcs = callReturnOperands (args, #2, size) - in - (M.Kind.Cont {args = Vector.map (srcs, - Live.StackOffset), - frameInfo = valOf (frameInfo label)}, - liveNoFormals, - parallelMove - {chunk = chunk, - dsts = Vector.map (args, varOperand o #1), - srcs = Vector.map (srcs, M.Operand.StackOffset)}) - end + R.Kind.Cont _ => doContHandler M.Kind.Cont | R.Kind.CReturn {func, ...} => let val dst = case Vector.length args of 0 => NONE - | 1 => SOME (operandLive - (varOperand - (#1 (Vector.sub (args, 0))))) + | 1 => Option.map + (varOperandOpt (#1 (Vector.first args)), + operandLive) | _ => Error.bug "Backend.genBlock: CReturn" in (M.Kind.CReturn {dst = dst, @@ -982,31 +1156,14 @@ liveNoFormals, Vector.new0 ()) end - | R.Kind.Handler => - let - val _ = - List.push - (handlers, {chunkLabel = Chunk.label chunk, - label = label}) - val dsts = Vector.map (args, varOperand o #1) - val handles = - raiseOperands (Vector.map (dsts, M.Operand.ty)) - in - (M.Kind.Handler - {frameInfo = valOf (frameInfo label), - handles = handles}, - liveNoFormals, - M.Statement.moves - {dsts = dsts, - srcs = Vector.map (handles, Live.toOperand)}) - end + | R.Kind.Handler => doContHandler M.Kind.Handler | R.Kind.Jump => (M.Kind.Jump, live, Vector.new0 ()) val (first, statements) = if !Control.profile = Control.ProfileTimeLabel then - case (if 0 = Vector.length statements + case (if Vector.isEmpty statements then NONE - else (case Vector.sub (statements, 0) of + else (case Vector.first statements of s as M.Statement.ProfileLabel _ => SOME s | _ => NONE)) of @@ -1021,22 +1178,46 @@ else (Vector.new0 (), statements) val statements = Vector.concat [first, pre, statements, preTransfer] - val returns = - Option.map (returns, fn returns => - Vector.map (returns, Live.StackOffset)) in - Chunk.newBlock (chunk, + Chunk.newBlock (labelChunk label, {kind = kind, label = label, live = operandsLive live, - raises = raises, - returns = returns, + raises = raiseLives, + returns = returnLives, statements = statements, transfer = transfer}) end val genBlock = traceGenBlock genBlock val _ = Vector.foreach (blocks, genBlock) val _ = + let + val frameInfo = + getFrameInfo {entry = true, + kind = M.FrameInfo.Kind.ML_FRAME, + offsets = [], + size = Bytes.zero, + sourceSeqIndex = NONE} + val srcs = + paramStackOffsets (args, #2, Bytes.zero) + val srcs = + Vector.map (srcs, M.Operand.StackOffset) + val statements = + parallelMove + {dsts = Vector.map (args, varOperand o #1), + srcs = srcs} + in + Chunk.newBlock + (funcChunk name, + {label = funcToLabel name, + kind = M.Kind.Func {frameInfo = frameInfo}, + live = operandsLive srcs, + raises = raiseLives, + returns = returnLives, + statements = statements, + transfer = M.Transfer.Goto start}) + end + val _ = if isMain then () else Vector.foreach (blocks, R.Block.clear) @@ -1056,19 +1237,19 @@ fun chunkToMachine (Chunk.T {chunkLabel, blocks}) = let val blocks = Vector.fromList (!blocks) - val regMax = CType.memo (fn _ => ref ~1) - val regsNeedingIndex = + val tempsMax = CType.memo (fn _ => ref ~1) + val tempsNeedingIndex = Vector.fold (blocks, [], fn (b, ac) => M.Block.foldDefs (b, ac, fn (z, ac) => case z of - M.Operand.Register r => - (case Register.indexOpt r of - NONE => r :: ac + M.Operand.Temporary t => + (case Temporary.indexOpt t of + NONE => t :: ac | SOME i => let - val z = regMax (Type.toCType (Register.ty r)) + val z = tempsMax (Type.toCType (Temporary.ty t)) val _ = if i > !z then z := i @@ -1079,19 +1260,19 @@ | _ => ac)) val _ = List.foreach - (regsNeedingIndex, fn r => + (tempsNeedingIndex, fn t => let - val z = regMax (Type.toCType (Register.ty r)) + val z = tempsMax (Type.toCType (Temporary.ty t)) val i = 1 + !z val _ = z := i - val _ = Register.setIndex (r, i) + val _ = Temporary.setIndex (t, i) in () end) in - Machine.Chunk.T {chunkLabel = chunkLabel, - blocks = blocks, - regMax = ! o regMax} + M.Chunk.T {chunkLabel = chunkLabel, + blocks = blocks, + tempsMax = ! o tempsMax} end val mainName = R.Function.name main val main = {chunkLabel = Chunk.label (funcChunk mainName), @@ -1102,7 +1283,7 @@ *) val _ = List.foreach (chunks, fn M.Chunk.T {blocks, ...} => Vector.foreach (blocks, Label.clear o M.Block.label)) - val (frameLabels, frameLayouts, frameOffsets) = allFrameInfo () + val (frameInfos, frameOffsets) = allFrameInfo chunks val maxFrameSize: Bytes.t = List.fold (chunks, Bytes.zero, fn (M.Chunk.T {blocks, ...}, max) => @@ -1114,10 +1295,9 @@ datatype z = datatype M.Operand.t in case z of - ArrayOffset {base, index, ...} => + SequenceOffset {base, index, ...} => doOperand (base, doOperand (index, max)) | Cast (z, _) => doOperand (z, max) - | Contents {oper, ...} => doOperand (oper, max) | Offset {base, ...} => doOperand (base, max) | StackOffset (StackOffset.T {offset, ty}) => Bytes.max (Bytes.+ (offset, Type.bytes ty), max) @@ -1126,10 +1306,7 @@ val max = case M.Kind.frameInfoOpt kind of NONE => max - | SOME (M.FrameInfo.T {frameLayoutsIndex, ...}) => - Bytes.max - (max, - #size (Vector.sub (frameLayouts, frameLayoutsIndex))) + | SOME fi => Bytes.max (max, M.FrameInfo.size fi) val max = Vector.fold (statements, max, fn (s, max) => @@ -1140,22 +1317,21 @@ max end)) val maxFrameSize = Bytes.alignWord32 maxFrameSize - val profileInfo = makeProfileInfo {frames = frameLabels} -in - Machine.Program.T - {chunks = chunks, - frameLayouts = frameLayouts, - frameOffsets = frameOffsets, - handlesSignals = handlesSignals, - intInfs = allIntInfs (), - main = main, - maxFrameSize = maxFrameSize, - objectTypes = objectTypes, - profileInfo = profileInfo, - reals = allReals (), - vectors = allVectors ()} -end} + + val machine = + M.Program.T + {chunks = chunks, + frameInfos = frameInfos, + frameOffsets = frameOffsets, + globals = {objptrs = allGlobalObjptrs (), + reals = allGlobalReals ()}, + handlesSignals = handlesSignals, + main = main, + maxFrameSize = maxFrameSize, + objectTypes = objectTypes, + sourceMaps = sourceMaps, + staticHeaps = finishStaticHeaps ()} in - program + machine end end diff -Nru mlton-20130715/mlton/backend/backend.sig mlton-20210117+dfsg/mlton/backend/backend.sig --- mlton-20130715/mlton/backend/backend.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/backend.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,27 +1,24 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature BACKEND_STRUCTS = sig structure Machine: MACHINE - structure Ssa: SSA2 - sharing Machine.Atoms = Ssa.Atoms + structure Rssa: RSSA + sharing Machine.BackendAtoms = Rssa.BackendAtoms - val funcToLabel: Ssa.Func.t -> Machine.Label.t + val funcToLabel: Rssa.Func.t -> Machine.Label.t end signature BACKEND = sig include BACKEND_STRUCTS - val toMachine: - Ssa.Program.t - * {codegenImplementsPrim: Machine.Type.t Machine.Prim.t -> bool} - -> Machine.Program.t + val toMachine: Rssa.Program.t -> Machine.Program.t end diff -Nru mlton-20130715/mlton/backend/bounce-vars.fun mlton-20210117+dfsg/mlton/backend/bounce-vars.fun --- mlton-20130715/mlton/backend/bounce-vars.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/bounce-vars.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,427 @@ +(* Copyright (C) 2019 Jason Carr + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + * + * This pass copies some variables into new locations + * so that the relatively naïve AllocateVars can give one location + * to each variable. + * + * Although this is pretty tightly coupled to the AllocateVars, it saves + * us a lot of complexity in both, since the latter does not need to do any + * contortions to try to return multiple variables + * + * Mechanically, what we do is find the loops in the program, and try our best + * to split up variables so that no variable that would have to be on the + * stack appears in any loop. So while we might end up with some extra copies, + * by construction we don't really do so in any loop where we wouldn't have to + * already do something similar in practice. + * + * This must be run before implement-handlers, as it uses restore + *) + +functor BounceVars(S: RSSA_TRANSFORM_STRUCTS): RSSA_TRANSFORM = +struct + +open S + +fun shouldAvoid (Block.T {kind, ...}) = + (* this definition is important; + * we assume that no edge has even + * one side inside a loop; + * this is true because calls etc + * must be unconditional; + * i.e. not be able to get back + * into the loop without necessarily + * going over a bad edge *) + case kind of + Kind.Jump => true + | _ => false + +fun shouldBounceAt (Block.T {kind, ...}) = + (* This is based on the choice + * made by AllocateVariables of + * which variables go to the stack, + * and similarly to above, + * cannot be frivolously changed *) + case Kind.frameStyle kind of + Kind.OffsetsAndSize => true + | _ => false + +structure Weight = struct + + (* t is a positive rational weight: count/loopSize *) + datatype t = T of {count: IntInf.t, size: IntInf.t} + + val op + = fn (T {count=count1, size=size1}, + T {count=count2, size=size2}) => + let + open IntInf + val l = lcm (size1, size2) + in + T {count= count1 * (l div size2) + count2 * (l div size1), + size=l} + end + fun count (T {count, ...}) = count + + fun inc size t = t + T {count=IntInf.fromInt 1, size=IntInf.fromInt size} + val new = T {count=IntInf.fromInt 0, size=IntInf.fromInt 1} + val op < = fn (T {count=count1, size=size1}, + T {count=count2, size=size2}) => + let open IntInf in + count1 * size2 < count2 * size1 + end + +end + +datatype varinfo + = Ignore (* No consideration *) + | UsedInLoop (* Used in loop, haven't checked bouncing *) + | Consider of Weight.t (* Should be considered for bouncing *) + | Rewrite of Weight.t (* Will be bounced *) + +fun loopForeach ({headers, child}, f) = + let + val _ = Vector.foreach (headers, f) + val {loops, notInLoop} = DirectedGraph.LoopForest.dest child + val _ = Vector.foreach (notInLoop, f) + in + Vector.foreach (loops, fn loop => loopForeach (loop, f)) + end + +fun transform p = + let + val {get=varTy, set=setVarTy, ...} = + Property.getSetOnce + (Var.plist, Property.initRaise ("BounceVars.varTy", Var.layout)) + + val {get=varInfo, set=setVarInfo, rem = remVarInfo, ...} = + Property.getSet + (Var.plist, Property.initConst Ignore) + + fun transformFunc func = + let + val {args, blocks, name, raises, returns, start} = Function.dest func + val liveInfo = Live.live (func, {shouldConsider = fn _ => true}) + fun beginNoFormals label = #beginNoFormals ((#labelLive liveInfo) label) + + val {loops, ...} = DirectedGraph.LoopForest.dest + (Function.loopForest (func, fn (b, _) => + shouldAvoid b)) + + val _ = Function.foreachDef (func, setVarTy) + + datatype InLoop + = InLoop of {header: bool} + | NotInLoop + + val {get=labelInfo, ...} = Property.get + (Label.plist, Property.initFun + (fn _ => {inLoop=ref NotInLoop, block=ref NONE})) + + val numRewritten = ref 0 + fun setRewrite (v, weight) = + (case varInfo v of + Consider _ => + (if Control.optFuelAvailAndUse () + then ( Int.inc numRewritten ; setVarInfo (v, Rewrite weight)) + else ()) + | _ => ()) + + fun checkLoopSize sizeref = + case !Control.bounceRssaLoopCutoff of + SOME n => !sizeref < n + | NONE => true + + (* For each loop, we'll set used variables in that loop + * to be considered for bouncing, so that we can eliminate some bounce + * points based on number of variables considered. + * + * We can also set some label info at this point *) + val _ = let + fun setConsiderVars (block as Block.T {label, ...}) = + (let + val _ = Block.foreachUse (block, + fn v => setVarInfo (v, UsedInLoop)) + val _ = (#inLoop o labelInfo) label := + InLoop {header=false} + in + () + end) + fun setHeader (Block.T {label, ...}) = + let + val inLoop = (#inLoop o labelInfo) label + in + case !inLoop of + InLoop {...} => inLoop := InLoop {header=true} + | _ => () + end + fun processLoop (loop as {headers,...}) = + let + fun count reff _ = Int.inc reff + val size = ref 0 + val _ = loopForeach (loop, count size) + val _ = + if checkLoopSize size + then loopForeach (loop, setConsiderVars) + else () + val _ = Vector.foreach (headers, setHeader) + in + () + end + in + Vector.foreach (loops, processLoop) + end + + (* Now check each bounce point, + * if it doesn't make the cutoff, set the vars + * to actually be considered for rewriting *) + val cutoff = + case !Control.bounceRssaLiveCutoff of + SOME n => n + | NONE => ~1 + val _ = Vector.foreach (blocks, + fn b as Block.T {label, ...} => + let + val live = beginNoFormals label + in + if shouldBounceAt b andalso + (cutoff < 0 orelse + (Vector.length + (Vector.keepAll + (live, fn v => UsedInLoop = varInfo v))) + < cutoff) + then + Vector.foreach (live, + fn v => setVarInfo (v, Consider Weight.new)) + else () + end) + (* foreach arg, set Consider, since they may need *) + val _ = Vector.foreach (args, + fn (x, _) => + case varInfo x of + UsedInLoop => setVarInfo (x, Consider Weight.new) + | _ => ()) + + (* Finally, vars with Consider are actually worth checking, + * so set their weights accurately *) + val _ = let + fun setVarWeights size (block as Block.T {label, ...}) = + let + fun modVarInfo (v, f) = + let + val newInfo = + case varInfo v of + Ignore => Ignore + | UsedInLoop => UsedInLoop + | Consider w => Consider (f w) + | Rewrite w => Rewrite (f w) + val _ = setVarInfo (v, newInfo) + in + () + end + val _ = Block.foreachDef (block, + fn (v, _) => modVarInfo (v, Weight.inc size)) + + val _ = Block.foreachUse (block, + fn v => + case !Control.bounceRssaLimit of + NONE => setRewrite (v, Weight.new) + | SOME _ => modVarInfo (v, + Weight.inc size)) + val _ = (#inLoop o labelInfo) label := + InLoop {header=false} + in + () + end + fun processLoop loop = + let + val size = ref 0 + val _ = loopForeach (loop, fn Block.T {...} => Int.inc size) + val _ = + (* this bound is a conservative bound + * backed up by data showing no improvements at + * all over this size, so we'll save the overhead *) + if checkLoopSize size + then loopForeach (loop, setVarWeights (!size)) + else () + in + () + end + in + Vector.foreach (loops, processLoop) + end + + (* Process the choices for each loop in a separate pass, + * each loop chooses independently which variables to bounce, + * then those variables are bounced over all loops they're + * a part of, so they're not inadvertently stack allocated. *) + fun chooseBouncedVariables n loop = + let + (* assume n is small *) + val heap = Array.new (n, (NONE, Weight.new)) + fun insert (i, x, xw) = + if i >= n orelse + (case !Control.bounceRssaUsageCutoff of + SOME n => IntInf.>= (Weight.count xw, IntInf.fromInt n) + | NONE => false) + (* Variables with lots of uses are usually worse + * candidates than shorter lived variables used once or + * twice since they have much longer lifespans, + * 15 is a conservative bound backed by some data *) + then () + else + let + val (y, yw) = Array.sub (heap, i) + val (x, xw) = + (* maximize weight *) + if (Weight.< (yw, xw)) + then (Array.update (heap, i, (x, xw)) ; (y, yw)) + else (x, xw) + in + insert (i + 1, x, xw) + end + fun insertVar x = + case + varInfo x of + Consider w => insert (0, SOME x, w) + (* May overlap *) + | Rewrite w => insert (0, SOME x, w) + | _ => () + fun insertVars block = + Block.foreachUse (block, insertVar) + val _ = loopForeach (loop, insertVars) + val _ = Array.foreach (heap, + fn (x, xw) => + case x of + SOME x => setRewrite (x, xw) + | NONE => ()) + in + () + end + val _ = case !Control.bounceRssaLimit of + SOME n => Vector.foreach (loops, chooseBouncedVariables n) + | NONE => () (* Already chosen when seen *) + + val _ = Control.diagnostics (fn show => + let + open Layout + in + show (seq [str "Function ", Func.layout name]) ; + show (seq [str "Number of loops: ", (str o Int.toString o Vector.length) loops ]) ; + show (seq [str "Number of variables rewritten:: ", (str o Int.toString o !) numRewritten ]) + end) + + datatype direction + = EnterLoop + | LeaveLoop + val newBlocks = ref [] + + val _ = Vector.foreach (blocks, + fn (b as Block.T {label, ...}) => + (#block o labelInfo) label := SOME b) + + fun insertRewriteBlock (destLabel, direction) = + let + val {block, ...} = labelInfo destLabel + val Block.T {label=destLabel, args=destArgs, ...} = (valOf o !) block + + val args = Vector.map (destArgs, fn (v, ty) => (Var.new v, ty)) + val live = beginNoFormals destLabel + + val rewrites = Vector.keepAll (live, fn v => + case varInfo v of + Rewrite _ => true + | _ => false) + val _ = Control.diagnostics (fn show => + let + open Layout + val _ = + show (seq [str "Dest Label ", Label.layout destLabel, str " (", + str (case direction of EnterLoop => "entrance" | LeaveLoop => "exit"), + str ")"]) + in + Vector.foreach (rewrites, fn v => show (seq [str "Rewriting ", Var.layout v])) + end) + val statements = Vector.map (rewrites, + fn v => + let + val ty = varTy v + val (src, dst) = + case direction of + EnterLoop => (v, v) + | LeaveLoop => (v, v) + val src = Operand.Var {var=src, ty=ty} + val dst = (dst, ty) + in + Statement.Bind + {dst=dst, + pinned=true, + src=src} + end) + (* Due to the loop forest construction, (i.e. shouldAvoid) + * The kind of a block on the edge is always Kind.Jump + * since every non-Jump must be followed by a case + * transfer to exit the loop conditionally. *) + val kind = Kind.Jump + val label = Label.new destLabel + val jumpArgs = Vector.map (args, fn (v, ty) => Operand.Var {var=v, ty=ty}) + val transfer = Transfer.Goto {dst=destLabel, args=jumpArgs} + val block = Block.T {args=args, kind=kind, label=label, statements=statements, transfer=transfer} + val _ = List.push (newBlocks, block) + in + label + end + + fun handleBlock (b as Block.T {args, kind, label, statements, transfer}) = + let + val {inLoop, ...} = labelInfo label + val inLoop = !inLoop + fun test l = + let + val {inLoop=inLoop', ...} = labelInfo l + val inLoop' = !inLoop' + in + case (inLoop, inLoop') of + (NotInLoop, InLoop _) => SOME EnterLoop + | (InLoop _, NotInLoop) => SOME LeaveLoop + | _ => NONE + end + val needsRewrite = ref false + fun rewrite destLabel = + case test destLabel of + NONE => destLabel + | SOME dir => + ( needsRewrite := true ; + insertRewriteBlock (destLabel, dir)) + val newTransfer = Transfer.replaceLabels(transfer, rewrite) + in + if !needsRewrite + then Block.T {args=args, kind=kind, label=label, statements=statements, transfer=newTransfer} + else b + end + val _ = Vector.foreach (blocks, fn b => List.push (newBlocks, handleBlock b)) + val newBlocks = Vector.fromListRev (!newBlocks) + in + Function.new + {args=args, blocks=newBlocks, + name=name, raises=raises, + returns=returns, start=start} + end + + val Program.T {functions, handlesSignals, main, objectTypes, profileInfo, statics} = p + val main = transformFunc main + val {main, restore} = restoreFunction {main = main, statics = statics} + val () = Function.foreachDef (main, remVarInfo o #1) + val {main, shrink} = shrinkFunction {main = main, statics = statics} + val functions = List.revMap (functions, shrink o restore o transformFunc) + val main = main () + in + Program.T {functions = functions, + handlesSignals = handlesSignals, + main = main, + objectTypes = objectTypes, + profileInfo = profileInfo, + statics = statics} + end +end diff -Nru mlton-20130715/mlton/backend/chunkify.fun mlton-20210117+dfsg/mlton/backend/chunkify.fun --- mlton-20130715/mlton/backend/chunkify.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/chunkify.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,8 +13,20 @@ open S datatype z = datatype Transfer.t +(* A simple chunkifier that puts all code in the same chunk. *) +fun one (Program.T {functions, main, ...}) = + let + val functions = main :: functions + in + Vector.new1 + {funcs = Vector.fromListMap (functions, Function.name), + labels = Vector.concatV (Vector.fromListMap + (functions, fn f => + Vector.map (Function.blocks f, Block.label)))} + end + (* A chunkifier that puts each function in its own chunk. *) -fun chunkPerFunc (Program.T {functions, main, ...}) = +fun func (Program.T {functions, main, ...}) = Vector.fromListMap (main :: functions, fn f => let @@ -23,18 +36,6 @@ labels = Vector.map (blocks, Block.label)} end) -(* A simple chunkifier that puts all code in the same chunk. - *) -fun oneChunk (Program.T {functions, main, ...}) = - let - val functions = main :: functions - in - Vector.new1 - {funcs = Vector.fromListMap (functions, Function.name), - labels = Vector.concatV (Vector.fromListMap - (functions, fn f => - Vector.map (Function.blocks f, Block.label)))} - end fun blockSize (Block.T {statements, transfer, ...}): int = let @@ -53,56 +54,6 @@ statementsSize + transferSize end -(* Compute the list of functions that each function returns to *) -fun returnsTo (Program.T {functions, main, ...}) = - let - val functions = main :: functions - val {get: Func.t -> {returnsTo: Label.t list ref, - tailCalls: Func.t list ref}, - rem, ...} = - Property.get (Func.plist, - Property.initFun (fn _ => - {returnsTo = ref [], - tailCalls = ref []})) - fun returnTo (f: Func.t, j: Label.t): unit = - let - val {returnsTo, tailCalls} = get f - in - if List.exists (!returnsTo, fn j' => Label.equals (j, j')) - then () - else (List.push (returnsTo, j) - ; List.foreach (!tailCalls, fn f => returnTo (f, j))) - end - fun tailCall (from: Func.t, to: Func.t): unit = - let - val {returnsTo, tailCalls} = get from - in - if List.exists (!tailCalls, fn f => Func.equals (to, f)) - then () - else (List.push (tailCalls, to) - ; List.foreach (!returnsTo, fn j => returnTo (to, j))) - end - val _ = - List.foreach - (functions, fn f => - let - val {name, blocks, ...} = Function.dest f - in - Vector.foreach - (blocks, fn Block.T {transfer, ...} => - case transfer of - Call {func, return, ...} => (case return of - Return.NonTail {cont, ...} => - returnTo (func, cont) - | _ => tailCall (name, func)) - - | _ => ()) - end) - in - {rem = rem, - returnsTo = ! o #returnsTo o get} - end - structure Graph = EquivalenceGraph structure Class = Graph.Class fun coalesce (program as Program.T {functions, main, ...}, limit) = @@ -141,9 +92,7 @@ Graph.== (graph, c, labelClass j) in case transfer of - Arith {overflow, success, ...} => - (same overflow; same success) - | CCall {return, ...} => Option.app (return, same) + CCall {return, ...} => Option.app (return, same) | Goto {dst, ...} => same dst | Switch s => Switch.foreachLabel (s, same) | _ => () @@ -151,7 +100,8 @@ in () end) - val {returnsTo, rem = remReturnsTo} = returnsTo program + val rflow = Program.rflow program + val returnsTo = #returnsTo o rflow (* Add edges, and then coalesce the graph. *) val _ = List.foreach @@ -222,7 +172,6 @@ let val {blocks, name, ...} = Function.dest f val _ = remFuncClass name - val _ = remReturnsTo name val _ = Vector.foreach (blocks, remLabelClass o Block.label) in () @@ -233,11 +182,265 @@ labels = Vector.fromList (!labels)}) end +structure Class = + struct + type t = PropertyList.t DisjointSet.t + val new = DisjointSet.singleton o PropertyList.new + val plist = DisjointSet.! + val == = DisjointSet.union + val equals = DisjointSet.equals + end +structure Graph = DirectedGraph +structure Node = Graph.Node +fun simple (program as Program.T {functions, main, ...}, + {mainFns, sccC, sccR, singC, singR}) = + let + val functions = main :: functions + val mainFns = + if mainFns + then let + val {name, blocks, ...} = Function.dest main + in + Vector.fold + (blocks, [name], fn (Block.T {transfer, ...}, mainFns) => + case transfer of + Call {func, ...} => func::mainFns + | _ => mainFns) + end + else [] + fun isMain f = + List.exists (mainFns, fn f' => Func.equals (f, f')) + val {get = funcInfo: Func.t -> {callSites: Label.t list ref, + class: Class.t, + function: Function.t, + node: unit Node.t}, + set = setFuncInfo, + rem = remFuncInfo, ...} = + Property.getSetOnce (Func.plist, + Property.initRaise ("Chunkify.simple.funcInfo", Func.layout)) + val funcCallSites = #callSites o funcInfo + val funcClass = #class o funcInfo + val funcFunction = #function o funcInfo + val funcNode = #node o funcInfo + val {get = labelInfo: Label.t -> {class: Class.t, + func: Func.t}, + set = setLabelInfo, + rem = remLabelInfo, ...} = + Property.getSetOnce (Label.plist, + Property.initRaise ("Chunkify.simple.labelInfo", Label.layout)) + val labelClass = #class o labelInfo + val labelFunc = #func o labelInfo + val {get = nodeInfo: unit Node.t -> {func: Func.t}, + set = setNodeInfo, ...} = + Property.getSetOnce (Node.plist, + Property.initRaise ("Chunkify.simple.nodeInfo", Node.layout)) + val nodeFunc = #func o nodeInfo + val cgraph = Graph.new () + val _ = + List.foreach + (functions, fn f => + let + val {name, blocks, start, ...} = Function.dest f + val _ = + Vector.foreach + (blocks, fn Block.T {label, ...} => + setLabelInfo (label, {class = Class.new (), + func = name})) + val node = Graph.newNode cgraph + val _ = setNodeInfo (node, {func = name}) + val _ = setFuncInfo (name, {callSites = ref [], + class = labelClass start, + function = f, + node = node}) + in + () + end) + (* Place src and dst blocks of intraprocedural transfers in same chunks. *) + val _ = + List.foreach + (functions, fn f => + Vector.foreach + (Function.blocks f, fn Block.T {label, transfer, ...} => + let + val c = labelClass label + fun same (j: Label.t): unit = + Class.== (c, labelClass j) + in + case transfer of + CCall {return, ...} => Option.app (return, same) + | Goto {dst, ...} => same dst + | Switch s => Switch.foreachLabel (s, same) + | _ => () + end)) + (* Build interprocedural call graph. *) + val _ = + List.foreach + (functions, fn f => + let + val {name, blocks, ...} = Function.dest f + val node = funcNode name + in + Vector.foreach + (blocks, fn Block.T {label, transfer, ...} => + case transfer of + Call {func, ...} => + (List.push (funcCallSites func, label) + ; ignore (Graph.addEdge + (cgraph, {from = node, to = funcNode func}))) + | _ => ()) + end) + (* Compute rflow. *) + val rflow = Program.rflow program + val returnsTo = #returnsTo o rflow + val raisesTo = #raisesTo o rflow + (* Place src and dst blocks of SCC calls/raises/returns in same chunks. *) + val _ = + List.foreach + (Graph.stronglyConnectedComponents cgraph, fn nodes => + let + val funcs = List.map (nodes, nodeFunc) + fun funcInSCC f = + List.exists (funcs, fn f' => Func.equals (f, f')) + fun labelInSCC l = + funcInSCC (labelFunc l) + in + List.foreach + (funcs, fn f => + let + val {name, blocks, ...} = Function.dest (funcFunction f) + fun mkRTo rTo = List.revKeepAllMap (rTo name, fn l => + if labelInSCC l + then SOME (labelClass l) + else NONE) + val returnsTo = mkRTo returnsTo + val raisesTo = mkRTo raisesTo + fun eqRTo (l, rTo) = + if sccR + then let val lc = labelClass l + in List.foreach (rTo, fn rlc => Class.== (lc, rlc)) + end + else () + in + Vector.foreach + (blocks, fn Block.T {label, transfer, ...} => + case transfer of + Call {func, ...} => + if sccC andalso funcInSCC func + then Class.== (labelClass label, funcClass func) + else () + | Raise _ => eqRTo (label, raisesTo) + | Return _ => eqRTo (label, returnsTo) + | _ => ()) + end) + end) + (* If all of a function's call sites are in the same (non-main) chunk, + * then place the function's entry block in the chunk. + * If all of a function's raise/return points are in the same (non-main) chunk, + * then place the function's raise/return blocks in the chunk. + *) + val _ = + let + val changed = ref false + fun loop () = + (List.foreach + (functions, fn f => + let + val {name, blocks, ...} = Function.dest f + val {callSites, class = funcClass, ...} = funcInfo name + fun oneClass ls = + case ls of + [] => NONE + | l::ls => + let + val c = labelClass l + in + if not (isMain (labelFunc l)) + andalso List.forall (ls, fn l => + not (isMain (labelFunc l)) + andalso Class.equals (c, labelClass l)) + then SOME (fn c' => + if not (Class.equals (c, c')) + then (Class.== (c, c') + ; changed := true) + else ()) + else NONE + end + fun doSingC () = + Option.app + (oneClass (!callSites), fn f => f funcClass) + val () = if singC then doSingC () else () + fun doSingR () = + Option.app + (oneClass (returnsTo name @ raisesTo name), fn f => + Vector.foreach + (blocks, fn Block.T {label, transfer, ...} => + let + val f = fn () => f (labelClass label) + in + case transfer of + Raise _ => f () + | Return _ => f() + | _ => () + end)) + val () = if singR then doSingR () else () + in + () + end) + ; if !changed + then (changed := false; loop ()) + else ()) + in + loop () + end + + type chunk = {funcs: Func.t list ref, + labels: Label.t list ref} + val chunks: chunk list ref = ref [] + val {get = classChunk: Class.t -> chunk, ...} = + Property.get + (Class.plist, + Property.initFun (fn _ => + let + val c = {funcs = ref [], + labels = ref []} + val _ = List.push (chunks, c) + in + c + end)) + val _ = + let + fun 'a add (l: 'a, + get: 'a -> Class.t, + sel: chunk -> 'a list ref): unit = + List.push (sel (classChunk (get l)), l) + val _ = + List.foreach + (functions, fn f => + let + val {name, blocks, ...} = Function.dest f + val _ = add (name, funcClass, #funcs) + val _ = remFuncInfo name + val _ = + Vector.foreach + (blocks, fn Block.T {label, ...} => + (add (label, labelClass, #labels) + ; remLabelInfo label)) + in () + end) + in () + end + in + Vector.fromListMap (!chunks, fn {funcs, labels} => + {funcs = Vector.fromList (!funcs), + labels = Vector.fromList (!labels)}) + end + fun chunkify p = - case !Control.chunk of - Control.ChunkPerFunc => chunkPerFunc p - | Control.OneChunk => oneChunk p - | Control.Coalesce {limit} => coalesce (p, limit) + case !Control.chunkify of + Control.Chunkify.Coalesce {limit} => coalesce (p, limit) + | Control.Chunkify.One => one p + | Control.Chunkify.Func => func p + | Control.Chunkify.Simple opts => simple (p, opts) val chunkify = fn p => @@ -254,7 +457,7 @@ (chunks, fn {funcs, labels} => display (record ([("funcs", Vector.layout Func.layout funcs), - ("jumps", Vector.layout Label.layout labels)]))) + ("labels", Vector.layout Label.layout labels)]))) in () end) diff -Nru mlton-20130715/mlton/backend/chunkify.sig mlton-20210117+dfsg/mlton/backend/chunkify.sig --- mlton-20130715/mlton/backend/chunkify.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/chunkify.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -17,12 +17,10 @@ include CHUNKIFY_STRUCTS (* Partitions all the labels declared into disjoint sets, referred - * to as chunks. Returns the list of chunks. + * to as chunks. Returns the collection of chunks. * All funcs, conts, and handlers are assumed to be entry points. * All conts and handlers are assumed to be return points. *) - val chunkify: Program.t -> { - funcs: Func.t vector, - labels: Label.t vector - } vector + val chunkify: Program.t -> {funcs: Func.t vector, + labels: Label.t vector} vector end diff -Nru mlton-20130715/mlton/backend/collect-statics.fun mlton-20210117+dfsg/mlton/backend/collect-statics.fun --- mlton-20130715/mlton/backend/collect-statics.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/collect-statics.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,276 @@ +(* Copyright (C) 2020 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor CollectStatics (S: RSSA_TRANSFORM_STRUCTS): + sig + structure Globals: RSSA_TRANSFORM + structure RealConsts: RSSA_TRANSFORM + structure WordXVectorConsts: RSSA_TRANSFORM + end = +struct + +open S + +structure Block = + struct + open Block + fun replace (T {args, kind, label, statements, transfer}, + {const: Const.t -> Operand.t}): t = + T {args = args, + kind = kind, + label = label, + statements = Vector.map (statements, fn s => + Statement.replace (s, {const = const, + var = Operand.Var})), + transfer = Transfer.replace (transfer, {const = const, + label = fn l => l, + var = Operand.Var})} + end + +structure Function = + struct + open Function + fun replace (f, {const: Const.t -> Operand.t}) = + let + val {args, blocks, name, raises, returns, start} = Function.dest f + in + Function.new {args = args, + blocks = Vector.map (blocks, fn b => + Block.replace (b, {const = const})), + name = name, + raises = raises, + returns = returns, + start = start} + end + end + +fun collectConsts (p, {const, newStatics}) = + let + val Program.T {functions, + handlesSignals, + main, + objectTypes, + profileInfo, + statics} = p + val main = Function.replace (main, {const = const}) + val functions = List.map (functions, fn f => + Function.replace (f, {const = const})) + val statics = Vector.concat [statics, newStatics ()] + in + Program.T {functions = functions, + handlesSignals = handlesSignals, + main = main, + objectTypes = objectTypes, + profileInfo = profileInfo, + statics = statics} + end + +structure WordXVectorConsts = + struct + open S + fun transform p = + let + val newStatics = ref [] + + val table = + HashTable.new + {equals = WordXVector.equals, + hash = WordXVector.hash} + fun const c = + case c of + Const.WordVector wv => + HashTable.lookupOrInsert + (table, wv, fn () => + let + val var = Var.newNoname () + val ty = Type.wordVector (WordXVector.elementSize wv) + val obj = Object.fromWordXVector wv + in + List.push (newStatics, {dst = (var, ty), obj = obj}) + ; Operand.Var {var = var, ty = ty} + end) + | _ => Operand.Const c + in + collectConsts (p, {const = const, + newStatics = fn () => Vector.fromListRev (!newStatics)}) + end + end + +structure RealConsts = + struct + open S + fun transform p = + let + local + fun make rsz = + let + val vecVar = + Var.newString (concat ["real", RealSize.toString rsz, "Consts"]) + val vecTycon = ObjptrTycon.realVector rsz + val vecTy = Type.objptr vecTycon + val vecBase = Operand.Var {ty = vecTy, var = vecVar} + val elt = Type.real rsz + val scale = (case rsz of + RealSize.R32 => Scale.Four + | RealSize.R64 => Scale.Eight) + + val next = Counter.generator 0 + val rs = ref [] + + fun add r = + (List.push (rs, r) + ; Operand.SequenceOffset + {base = vecBase, + index = Operand.word + (WordX.fromInt (next (), WordSize.seqIndex ())), + offset = Bytes.zero, + scale = scale, + ty = elt}) + fun newStatic () = + if List.isEmpty (!rs) + then NONE + else let + val init = + Vector.fromListMap + (List.rev (!rs), fn r => + Vector.new1 + {offset = Bytes.zero, + src = Operand.Const (Const.Real r)}) + val obj = + Object.Sequence + {init = init, + tycon = vecTycon} + in + SOME {dst = (vecVar, vecTy), obj = obj} + end + in + (add, newStatic) + end + val (add32, newStatic32) = make RealSize.R32 + val (add64, newStatic64) = make RealSize.R64 + in + fun add r = + case RealX.size r of + RealSize.R32 => add32 r + | RealSize.R64 => add64 r + fun newStatics () = + Vector.fromListRev + (List.fold ([newStatic32, newStatic64], [], + fn (newStatic, newStatics) => + Option.fold (newStatic (), newStatics, op ::))) + end + + val table = + HashTable.new + {equals = RealX.equals, + hash = RealX.hash} + fun const c = + case c of + Const.Real r => + HashTable.lookupOrInsert + (table, r, fn () => add r) + | _ => Operand.Const c + in + collectConsts (p, {const = const, + newStatics = newStatics}) + end + + end + +structure Globals = + struct + open S + fun transform p = + let + val Program.T {functions, + handlesSignals, + main, + objectTypes, + profileInfo, + statics} = p + + val {get = varIsStatic, + set = setVarIsStatic, + destroy = destroyVarIsStatic} = + Property.destGetSet + (Var.plist, Property.initConst false) + + fun operandIsStatic oper = + case oper of + Operand.Cast (oper, _) => operandIsStatic oper + | Operand.Const _ => true + | Operand.Var {var, ...} => varIsStatic var + | _ => false + + val newStatics = ref [] + + fun objectIsStatic obj = + let + fun initIsStatic init = + Vector.forall (init, fn {offset = _, src} => + operandIsStatic src) + in + case obj of + Object.Normal {init, ...} => initIsStatic init + | Object.Sequence {init, ...} => Vector.forall (init, initIsStatic) + end + fun statementIsStatic stmt = + case stmt of + Statement.Object {dst as (dstVar, _), obj} => + if objectIsStatic obj + then (List.push (newStatics, {dst = dst, obj = obj}) + ; setVarIsStatic (dstVar, true) + ; true) + else false + | _ => false + + val () = + Vector.foreach + (statics, fn {dst = (dstVar, _), ...} => setVarIsStatic (dstVar, true)) + + val main = + let + val {args, name, raises, returns, start, ...} = Function.dest main + val blocks = ref [] + val () = + Function.dfs + (main, fn Block.T {args, kind, label, statements, transfer} => + let + val statements = + Vector.keepAll (statements, not o statementIsStatic) + val block = + Block.T {args = args, + kind = kind, + label = label, + statements = statements, + transfer = transfer} + in + List.push (blocks, block) + ; fn () => () + end) + in + Function.new {args = args, + blocks = Vector.fromList (!blocks), + name = name, + raises = raises, + returns = returns, + start = start} + end + + val statics = Vector.concat [statics, Vector.fromListRev (!newStatics)] + + val () = destroyVarIsStatic () + in + Program.T {functions = functions, + handlesSignals = handlesSignals, + main = main, + objectTypes = objectTypes, + profileInfo = profileInfo, + statics = statics} + end + end + +end diff -Nru mlton-20130715/mlton/backend/equivalence-graph.fun mlton-20210117+dfsg/mlton/backend/equivalence-graph.fun --- mlton-20130715/mlton/backend/equivalence-graph.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/equivalence-graph.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -64,7 +65,7 @@ fun == (_, c, c') = Class.== (c, c') -fun coarsen (T {classes, edges, ...}, {maxClassSize}) = +fun coarsen (T {edges, ...}, {maxClassSize}) = let (* Combine classes with an edge between them where possible. *) val _ = @@ -72,38 +73,6 @@ if Class.size c + Class.size c' <= maxClassSize then Class.== (c, c') else ()) - (* Get a list of all classes without duplicates. *) - val {get, ...} = - Property.get (Class.plist, Property.initFun (fn _ => ref false)) - val classes = - List.fold - (!classes, [], fn (class, ac) => - let - val r = get class - in - if !r - then ac - else (r := true - ; class :: ac) - end) - (* Sort classes in decreasing order of size. *) - val classes = - QuickSort.sortList (classes, fn (c, c') => - Class.size c >= Class.size c') - (* Combine classes where possible. *) - fun loop (cs: Class.t list): unit = - case cs of - [] => () - | c :: cs => - loop - (rev - (List.fold - (cs, [], fn (c', ac) => - if Class.size c + Class.size c' <= maxClassSize - then (Class.== (c, c') - ; ac) - else c' :: ac))) - val _ = loop classes in () end diff -Nru mlton-20130715/mlton/backend/equivalence-graph.sig mlton-20210117+dfsg/mlton/backend/equivalence-graph.sig --- mlton-20130715/mlton/backend/equivalence-graph.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/equivalence-graph.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/backend/err.sml mlton-20210117+dfsg/mlton/backend/err.sml --- mlton-20130715/mlton/backend/err.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/err.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/backend/implement-handlers.fun mlton-20210117+dfsg/mlton/backend/implement-handlers.fun --- mlton-20130715/mlton/backend/implement-handlers.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/implement-handlers.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -10,7 +11,6 @@ struct open S -open Rssa datatype z = datatype Statement.t datatype z = datatype Transfer.t @@ -209,10 +209,12 @@ start = newStart} end -fun transform (Program.T {functions, handlesSignals, main, objectTypes}) = +fun transform (Program.T {functions, handlesSignals, main, objectTypes, profileInfo, statics}) = Program.T {functions = List.revMap (functions, flow), handlesSignals = handlesSignals, main = flow main, - objectTypes = objectTypes} + objectTypes = objectTypes, + profileInfo = profileInfo, + statics = statics} end diff -Nru mlton-20130715/mlton/backend/implement-profiling.fun mlton-20210117+dfsg/mlton/backend/implement-profiling.fun --- mlton-20130715/mlton/backend/implement-profiling.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/implement-profiling.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,15 +1,15 @@ -(* Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -functor ImplementProfiling (S: IMPLEMENT_PROFILING_STRUCTS): IMPLEMENT_PROFILING = +functor ImplementProfiling (S: RSSA_TRANSFORM_STRUCTS): RSSA_TRANSFORM = struct open S -open Rssa structure CFunction = struct @@ -24,18 +24,20 @@ local fun make {args, name, prototype} = T {args = args, - bytesNeeded = NONE, convention = Convention.Cdecl, - ensuresBytesFree = false, - mayGC = false, - maySwitchThreads = false, - modifiesFrontier = false, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = false, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = false, + readsStackTop = true, + writesStackTop = false}, prototype = (prototype, NONE), - readsStackTop = true, return = Type.unit, symbolScope = SymbolScope.Private, - target = Target.Direct name, - writesStackTop = false} + target = Target.Direct name} in val profileEnter = fn () => make {args = Vector.new1 (Type.gcState ()), @@ -52,20 +54,20 @@ end end -type sourceSeq = int list +type sourceSeq = {sourceIndex: int} list structure InfoNode = struct datatype t = T of {info: SourceInfo.t, - nameIndex: int, - sourcesIndex: int, + sourceNameIndex: int, + sourceIndex: int, successors: t list ref} local fun make f (T r) = f r in val info = make #info - val sourcesIndex = make #sourcesIndex + val sourceIndex = make #sourceIndex end fun layout (T {info, ...}) = @@ -122,11 +124,11 @@ | Skip i => seq [str "Skip ", SourceInfo.layout i] end - fun toSources (ps: t list): int list = + fun toSourceSeq (ps: t list): sourceSeq = List.fold (rev ps, [], fn (p, ac) => case p of - Enter (InfoNode.T {sourcesIndex, ...}) => - sourcesIndex :: ac + Enter (InfoNode.T {sourceIndex, ...}) => + {sourceIndex = sourceIndex} :: ac | Skip _ => ac) end @@ -136,12 +138,14 @@ SourceInfo.layout, Layout.tuple2 (List.layout Push.layout, Bool.layout)) -fun doit program = +fun transform program = if !Control.profile = Control.ProfileNone - then (program, fn _ => NONE) + then program else let - val Program.T {functions, handlesSignals, main, objectTypes} = program + val Program.T {functions, handlesSignals, main, objectTypes, statics, ...} = program + fun tyconTy tycon = + Vector.sub (objectTypes, ObjptrTycon.index tycon) val debug = false datatype z = datatype Control.profile val profile = !Control.profile @@ -150,29 +154,28 @@ profile = ProfileTimeLabel orelse profile = ProfileLabel val needCodeCoverage: bool = needProfileLabels orelse (profile = ProfileTimeField) - val frameProfileIndices: (Label.t * int) list ref = ref [] val infoNodes: InfoNode.t list ref = ref [] - val nameCounter = Counter.new 0 - val names: string list ref = ref [] + val sourceNames: string list ref = ref [] local - val sourceCounter = Counter.new 0 + val nextSourceName = Counter.generator 0 val sep = if profile = ProfileCallStack then " " else "\t" - val {get = nameIndex, ...} = + val {get = sourceNameIndex, ...} = Property.get (SourceInfo.plist, Property.initFun (fn si => - (List.push (names, SourceInfo.toString' (si, sep)) - ; Counter.next nameCounter))) - in + (List.push (sourceNames, SourceInfo.toString' (si, sep)) + ; nextSourceName ()))) + val nextSource = Counter.generator 0 + in fun sourceInfoNode (si: SourceInfo.t) = let val infoNode = InfoNode.T {info = si, - nameIndex = nameIndex si, - sourcesIndex = Counter.next sourceCounter, + sourceNameIndex = sourceNameIndex si, + sourceIndex = nextSource (), successors = ref []} val _ = List.push (infoNodes, infoNode) in @@ -184,9 +187,9 @@ case p of Push.Enter n => SOME n | _ => NONE) - (* unknown must be 0, which == SOURCES_INDEX_UNKNOWN from gc.h *) + (* unknown must be 0, which == SOURCES_INDEX_UNKNOWN from sources.h *) val unknownInfoNode = sourceInfoNode SourceInfo.unknown - (* gc must be 1 which == SOURCES_INDEX_GC from gc.h *) + (* gc must be 1 which == SOURCES_INDEX_GC from sources.h *) val gcInfoNode = sourceInfoNode SourceInfo.gc val mainInfoNode = sourceInfoNode SourceInfo.main fun wantedSource (si: SourceInfo.t): bool = @@ -254,80 +257,87 @@ val sourceInfoNode = Trace.trace ("Profile.sourceInfoNode", SourceInfo.layout, InfoNode.layout) sourceInfoNode + val sourceSeqs: {sourceIndex: int} vector list ref = ref [] local - val table: {hash: word, - index: int, - sourceSeq: int vector} HashSet.t = - HashSet.new {hash = #hash} - val c = Counter.new 0 - val sourceSeqs: int vector list ref = ref [] + val table: ({sourceIndex: int} vector, int) HashTable.t = + let + fun equals (sourceSeq1, sourceSeq2) = + Vector.equals (sourceSeq1, sourceSeq2, + fn ({sourceIndex = si1}, {sourceIndex = si2}) => + si1 = si2) + fun hash sourceSeq = + Hash.vectorMap (sourceSeq, fn {sourceIndex} => + Word.fromInt sourceIndex) + in + HashTable.new + {equals = equals, + hash = hash} + end + val nextSourceSeqIndex = Counter.generator 0 in fun sourceSeqIndex (s: sourceSeq): int = let val s = Vector.fromListRev s - val hash = - Vector.fold (s, 0w0, fn (i, w) => - w * 0w31 + Word.fromInt i) in - #index - (HashSet.lookupOrInsert - (table, hash, - fn {sourceSeq = s', ...} => s = s', - fn () => let - val _ = List.push (sourceSeqs, s) - in - {hash = hash, - index = Counter.next c, - sourceSeq = s} - end)) + HashTable.lookupOrInsert + (table, s, fn () => + (List.push (sourceSeqs, s) + ; nextSourceSeqIndex ())) end - fun makeSourceSeqs () = Vector.fromListRev (!sourceSeqs) end (* Ensure that [SourceInfo.unknown] is index 0. *) - val _ = sourceSeqIndex [InfoNode.sourcesIndex unknownInfoNode] + val _ = sourceSeqIndex [{sourceIndex = InfoNode.sourceIndex unknownInfoNode}] (* Ensure that [SourceInfo.gc] is index 1. *) - val _ = sourceSeqIndex [InfoNode.sourcesIndex gcInfoNode] - fun addFrameProfileIndex (label: Label.t, - index: int): unit = - List.push (frameProfileIndices, (label, index)) - fun addFrameProfilePushes (label: Label.t, - pushes: Push.t list): unit = - addFrameProfileIndex (label, - sourceSeqIndex (Push.toSources pushes)) + val _ = sourceSeqIndex [{sourceIndex = InfoNode.sourceIndex gcInfoNode}] + local + (* Cannot use Label.plist, because RSSA Labels are cleared + * between ImplementProfiling and conversion to Machine. + *) + val frameSourceSeqIndex: (Label.t, int) HashTable.t = + HashTable.new {equals = Label.equals, hash = Label.hash} + in + fun addFrameSourceSeqIndex (label: Label.t, sourceSeqIndex: int): unit = + (ignore o HashTable.insertIfNew) + (frameSourceSeqIndex, label, fn () => sourceSeqIndex, fn _ => + Error.bug ("ImplementProfiling.addFrameSourceSeqIndex: " ^ Label.toString label)) + fun getFrameSourceSeqIndex (label: Label.t) : int option = + HashTable.peek (frameSourceSeqIndex, label) + end + fun addFramePushes (label: Label.t, pushes: Push.t list): unit = + addFrameSourceSeqIndex (label, sourceSeqIndex (Push.toSourceSeq pushes)) val {get = labelInfo: Label.t -> {block: Block.t, visited1: bool ref, visited2: bool ref}, set = setLabelInfo, ...} = Property.getSetOnce (Label.plist, Property.initRaise ("info", Label.layout)) - val labels = ref [] - fun profileLabelFromIndex (sourceSeqsIndex: int): Statement.t = + val profileLabelInfos = ref [] + fun profileLabelFromIndex (sourceSeqIndex: int): Statement.t = let - val l = ProfileLabel.new () - val _ = List.push (labels, {label = l, - sourceSeqsIndex = sourceSeqsIndex}) + val pl = ProfileLabel.new () + val _ = List.push (profileLabelInfos, + {profileLabel = pl, + sourceSeqIndex = sourceSeqIndex}) in - Statement.ProfileLabel l + Statement.ProfileLabel pl end - fun setCurSourceSeqsIndexFromIndex (sourceSeqsIndex: int): Statement.t = + fun setCurSourceSeqIndexFromIndex (sourceSeqIndex: int): Statement.t = let - val curSourceSeqsIndex = - Operand.Runtime Runtime.GCField.CurSourceSeqsIndex + val curSourceSeqIndex = + Operand.Runtime Runtime.GCField.CurSourceSeqIndex in Statement.Move - {dst = curSourceSeqsIndex, - src = Operand.word (WordX.fromIntInf - (IntInf.fromInt sourceSeqsIndex, - WordSize.word32))} + {dst = curSourceSeqIndex, + src = Operand.word (WordX.fromInt (sourceSeqIndex, WordSize.word32))} end - fun codeCoverageStatementFromIndex (sourceSeqsIndex: int): Statement.t = + fun codeCoverageStatementFromSourceSeqIndex (sourceSeqIndex: int): Statement.t = if needProfileLabels - then profileLabelFromIndex sourceSeqsIndex + then profileLabelFromIndex sourceSeqIndex else if profile = ProfileTimeField - then setCurSourceSeqsIndexFromIndex sourceSeqsIndex + then setCurSourceSeqIndexFromIndex sourceSeqIndex else Error.bug "Profile.codeCoverageStatement" - fun codeCoverageStatement (sourceSeq: int list): Statement.t = - codeCoverageStatementFromIndex (sourceSeqIndex sourceSeq) + fun codeCoverageStatement (sourceSeq: sourceSeq): Statement.t = + codeCoverageStatementFromSourceSeqIndex (sourceSeqIndex sourceSeq) local val {get: Func.t -> FuncInfo.t, ...} = Property.get (Func.plist, Property.initFun (fn _ => FuncInfo.new ())) @@ -403,7 +413,7 @@ orelse (wantedSource si andalso - not (equals (si, gcArrayAllocate)) + not (equals (si, gcSequenceAllocate)) andalso (not (isC si) orelse @@ -458,7 +468,7 @@ kind, label, leaves, - sourceSeq: int list, + sourceSeq: sourceSeq, statements: Statement.t list, transfer: Transfer.t}: unit = let @@ -468,8 +478,7 @@ (leaves, true, sourceSeq, []), fn (s, (leaves, ncc, sourceSeq, ss)) => case s of - Object _ => (leaves, true, sourceSeq, s :: ss) - | Profile ps => + Profile ps => let val (ncc, ss) = if needCodeCoverage @@ -493,7 +502,7 @@ "Profile.backward: missing Leave" | infoNode :: leaves => (leaves, - InfoNode.sourcesIndex infoNode + {sourceIndex = InfoNode.sourceIndex infoNode} :: sourceSeq)) in (leaves, ncc, sourceSeq, ss) @@ -514,7 +523,7 @@ val func = CFunction.profileLeave () val newLabel = Label.newNoname () val _ = - addFrameProfileIndex + addFrameSourceSeqIndex (newLabel, sourceSeqIndex sourceSeq) val statements = if needCodeCoverage @@ -559,7 +568,10 @@ open Layout in record [("leaves", List.layout InfoNode.layout leaves), - ("sourceSeq", List.layout Int.layout sourceSeq), + ("sourceSeq", + List.layout (fn {sourceIndex} => + record [("sourceIndex", Int.layout sourceIndex)]) + sourceSeq), ("statements", List.layout Statement.layout statements)] end, @@ -570,11 +582,11 @@ let val func = CFunction.profileEnter () val newLabel = Label.newNoname () - val index = sourceSeqIndex (Push.toSources pushes) - val _ = addFrameProfileIndex (newLabel, index) + val sourceSeqIndex = sourceSeqIndex (Push.toSourceSeq pushes) + val _ = addFrameSourceSeqIndex (newLabel, sourceSeqIndex) val statements = if needCodeCoverage - then Vector.new1 (codeCoverageStatementFromIndex index) + then Vector.new1 (codeCoverageStatementFromSourceSeqIndex sourceSeqIndex) else Vector.new0 () val _ = List.push @@ -633,8 +645,7 @@ else statements val _ = let - fun add pushes = - addFrameProfilePushes (label, pushes) + fun add pushes = addFramePushes (label, pushes) datatype z = datatype Kind.t in case kind of @@ -648,8 +659,8 @@ in case target of Direct "GC_collect" => doit SourceInfo.gc - | Direct "GC_arrayAllocate" => - doit SourceInfo.gcArrayAllocate + | Direct "GC_sequenceAllocate" => + doit SourceInfo.gcSequenceAllocate | Direct "MLton_bug" => add pushes | Direct name => doit (SourceInfo.fromC name) | Indirect => doit (SourceInfo.fromC "") @@ -675,8 +686,7 @@ else let val newLabel = Label.newNoname () - val _ = - addFrameProfilePushes (newLabel, pushes) + val _ = addFramePushes (newLabel, pushes) val func = CFunction.profileInc () val amount = case profile of @@ -688,12 +698,10 @@ {args = (Vector.new2 (Operand.GCState, Operand.word - (WordX.fromIntInf - (IntInf.fromInt amount, - WordSize.csize ())))), + (WordX.fromInt (amount, WordSize.csize ())))), func = func, return = SOME newLabel} - val sourceSeq = Push.toSources pushes + val sourceSeq = Push.toSourceSeq pushes val _ = backward {args = args, kind = kind, @@ -739,9 +747,12 @@ end ; case s of - Object {size, ...} => + Object {obj, ...} => {args = args, - bytesAllocated = Bytes.+ (bytesAllocated, size), + bytesAllocated = Bytes.+ (bytesAllocated, + Object.size + (obj, + {tyconTy = tyconTy})), kind = kind, label = label, leaves = leaves, @@ -884,7 +895,7 @@ kind = kind, label = label, leaves = leaves, - sourceSeq = Push.toSources pushes, + sourceSeq = Push.toSourceSeq pushes, statements = statements, transfer = transfer} end @@ -899,44 +910,35 @@ returns = returns, start = start} end - val program = Program.T {functions = List.revMap (functions, doFunction), - handlesSignals = handlesSignals, - main = doFunction main, - objectTypes = objectTypes} + val (main, functions) = (doFunction main, List.map (functions, doFunction)) val _ = addFuncEdges () - val names = Vector.fromListRev (!names) + val profileLabelInfos = Vector.fromList (!profileLabelInfos) + val sourceNames = Vector.fromListRev (!sourceNames) val sources = Vector.map (Vector.fromListRev (!infoNodes), - fn InfoNode.T {nameIndex, successors, ...} => - {nameIndex = nameIndex, - successorsIndex = (sourceSeqIndex - (List.revMap (!successors, - InfoNode.sourcesIndex)))}) - (* makeSourceSeqs () must happen after making sources, since that creates - * new sourceSeqs. + fn InfoNode.T {sourceNameIndex, successors, ...} => + {sourceNameIndex = sourceNameIndex, + successorSourceSeqIndex = (sourceSeqIndex + (List.revMap (!successors, fn infoNode => + {sourceIndex = InfoNode.sourceIndex infoNode})))}) + (* Making sourceSeqs must happen after making sources, + * since making sources creates new sourceSeqs. *) - val sourceSeqs = makeSourceSeqs () - fun makeProfileInfo {frames} = - let - val {get, set, ...} = - Property.getSetOnce - (Label.plist, - Property.initRaise ("frameProfileIndex", Label.layout)) - val _ = - List.foreach (!frameProfileIndices, fn (l, i) => - set (l, i)) - val frameSources = Vector.map (frames, get) - in - SOME (Machine.ProfileInfo.T - {frameSources = frameSources, - labels = Vector.fromList (!labels), - names = names, - sourceSeqs = sourceSeqs, - sources = sources}) - end - in - (program, makeProfileInfo) + val sourceSeqs = Vector.fromListRev (!sourceSeqs) + val sourceMaps = + SourceMaps.T {profileLabelInfos = profileLabelInfos, + sourceNames = sourceNames, + sourceSeqs = sourceSeqs, + sources = sources} + in + Program.T {functions = functions, + handlesSignals = handlesSignals, + main = main, + objectTypes = objectTypes, + profileInfo = SOME {sourceMaps = sourceMaps, + getFrameSourceSeqIndex = getFrameSourceSeqIndex}, + statics = statics} end end diff -Nru mlton-20130715/mlton/backend/implement-profiling.sig mlton-20210117+dfsg/mlton/backend/implement-profiling.sig --- mlton-20130715/mlton/backend/implement-profiling.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/implement-profiling.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature IMPLEMENT_PROFILING_STRUCTS = - sig - structure Machine: MACHINE - structure Rssa: RSSA - sharing Machine.ProfileLabel = Rssa.ProfileLabel - end - -signature IMPLEMENT_PROFILING = - sig - include IMPLEMENT_PROFILING_STRUCTS - - val doit: - Rssa.Program.t - -> Rssa.Program.t * ({frames: Rssa.Label.t vector} - -> Machine.ProfileInfo.t option) - end diff -Nru mlton-20130715/mlton/backend/limit-check.fun mlton-20210117+dfsg/mlton/backend/limit-check.fun --- mlton-20130715/mlton/backend/limit-check.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/limit-check.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -66,7 +66,6 @@ struct open S -open Rssa structure LimitCheck = struct @@ -99,9 +98,9 @@ struct open Statement - fun bytesAllocated (s: t): Bytes.t = + fun bytesAllocated (s: t, {tyconTy}): Bytes.t = case s of - Object {size, ...} => size + Object {obj, ...} => Object.size (obj, {tyconTy = tyconTy}) | _ => Bytes.zero end @@ -144,24 +143,27 @@ struct open Block - fun objectBytesAllocated (T {statements, transfer, ...}): Bytes.t = + fun objectBytesAllocated (T {statements, transfer, ...}, {tyconTy}): Bytes.t = Bytes.+ (Vector.fold (statements, Bytes.zero, fn (s, ac) => - Bytes.+ (ac, Statement.bytesAllocated s)), + let + val b = Statement.bytesAllocated (s, {tyconTy = tyconTy}) + in + Bytes.+ (ac, b) + end), case Transfer.bytesAllocated transfer of Transfer.Big _ => Bytes.zero | Transfer.Small b => b) end -val extraGlobals: Var.t list ref = ref [] - fun insertFunction (f: Function.t, handlesSignals: bool, + newFlag: unit -> Operand.t, blockCheckAmount: {blockIndex: int} -> Bytes.t, ensureFree: Label.t -> Bytes.t) = let val {args, blocks, name, raises, returns, start} = Function.dest f - val lessThan = Prim.wordLt (WordSize.csize (), {signed = false}) + val lessThan = Prim.Word_lt (WordSize.csize (), {signed = false}) val newBlocks = ref [] local val r: Label.t option ref = ref NONE @@ -175,18 +177,20 @@ val _ = r := SOME l val cfunc = CFunction.T {args = Vector.new0 (), - bytesNeeded = NONE, convention = CFunction.Convention.Cdecl, - ensuresBytesFree = false, - mayGC = false, - maySwitchThreads = false, - modifiesFrontier = false, + inline = false, + kind = CFunction.Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = false, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = false, + readsStackTop = false, + writesStackTop = false}, prototype = (Vector.new0 (), NONE), - readsStackTop = false, return = Type.unit, symbolScope = CFunction.SymbolScope.Private, - target = CFunction.Target.Direct "MLton_heapCheckTooLarge", - writesStackTop = false} + target = CFunction.Target.Direct "MLton_heapCheckTooLarge"} val _ = newBlocks := Block.T {args = Vector.new0 (), @@ -209,22 +213,20 @@ val transfer = case transfer of Transfer.CCall {args, func, return} => - (if CFunction.ensuresBytesFree func - then + (case CFunction.ensuresBytesFree func of + NONE => transfer + | SOME i => Transfer.CCall - {args = (Vector.map - (args, fn z => - case z of - Operand.EnsuresBytesFree => - Operand.word - (WordX.fromIntInf - (Bytes.toIntInf - (ensureFree (valOf return)), - WordSize.csize ())) - | _ => z)), + {args = Vector.mapi + (args, fn (j, arg) => + if i = j + then Operand.word + (WordX.fromBytes + (ensureFree (valOf return), + WordSize.csize ())) + else arg), func = func, - return = return} - else transfer) + return = return}) | _ => transfer val stack = Label.equals (start, label) fun insert (amount: Operand.t (* of type word *)) = @@ -236,11 +238,7 @@ case !Control.gcCheck of Control.First => let - val global = Var.newNoname () - val _ = List.push (extraGlobals, global) - val global = - Operand.Var {var = global, - ty = Type.bool} + val flag = newFlag () val dontCollect' = Label.newNoname () val _ = List.push @@ -251,15 +249,17 @@ label = dontCollect', statements = Vector.new0 (), transfer = - Transfer.ifBool - (global, {falsee = dontCollect, - truee = collect})}) + Transfer.ifBoolE + (flag, + !Control.gcExpect, + {falsee = dontCollect, + truee = collect})}) in (dontCollect', Vector.new1 - (Statement.Move {dst = global, + (Statement.Move {dst = flag, src = Operand.bool false}), - global) + flag) end | Control.Limit => (dontCollect, Vector.new0 (), Operand.bool false) @@ -326,8 +326,9 @@ dst = SOME (res, Type.bool), prim = prim} val transfer = - Transfer.ifBool + Transfer.ifBoolE (Operand.Var {var = res, ty = Type.bool}, + !Control.gcExpect, {falsee = dontCollect, truee = collect}) in @@ -337,7 +338,7 @@ fun stackCheck (maybeFirst, z): Label.t = let val (statements, transfer) = - primApp (Prim.cpointerLt, + primApp (Prim.CPointer_lt, Operand.Runtime StackLimit, Operand.Runtime StackTop, z) @@ -348,8 +349,7 @@ if stack then ignore (stackCheck (true, - insert (Operand.word - (WordX.zero (WordSize.csize ()))))) + insert (Operand.zero (WordSize.csize ())))) else (* No limit check, just keep the block around. *) List.push (newBlocks, @@ -384,7 +384,7 @@ {args = Vector.new2 (Operand.Runtime LimitPlusSlop, Operand.Runtime Frontier), dst = SOME (res, Type.csize ()), - prim = Prim.cpointerDiff} + prim = Prim.CPointer_diff} val (statements, transfer) = primApp (lessThan, Operand.Var {var = res, ty = Type.csize ()}, @@ -395,7 +395,7 @@ if handlesSignals then frontierCheck (isFirst, - Prim.cpointerEqual, + Prim.CPointer_equal, Operand.Runtime Limit, Operand.null, {collect = collect, @@ -415,22 +415,15 @@ ignore (if Bytes.<= (bytes, Runtime.limitSlop) then frontierCheck (true, - Prim.cpointerLt, + Prim.CPointer_lt, Operand.Runtime Limit, Operand.Runtime Frontier, - insert (Operand.word - (WordX.zero (WordSize.csize ())))) + insert (Operand.zero (WordSize.csize ()))) else let val bytes = - let - val bytes = - WordX.fromIntInf - (Bytes.toIntInf bytes, - WordSize.csize ()) - in - SOME bytes - end handle Overflow => NONE + SOME (WordX.fromBytes (bytes, WordSize.csize ())) + handle Overflow => NONE in case bytes of NONE => gotoHeapCheckTooLarge () @@ -460,12 +453,11 @@ | _ => let val bytes = Var.newNoname () + val test = Var.newNoname () val extraBytes = let val extraBytes = - WordX.fromIntInf - (Bytes.toIntInf extraBytes, - WordSize.csize ()) + WordX.fromBytes (extraBytes, WordSize.csize ()) in SOME extraBytes end handle Overflow => NONE @@ -475,20 +467,29 @@ | SOME extraBytes => (ignore o newBlock) (true, - Vector.new0 (), - Transfer.Arith - {args = Vector.new2 (Operand.word extraBytes, - bytesNeeded), - dst = bytes, - overflow = heapCheckTooLarge (), - prim = Prim.wordAddCheck (WordSize.csize (), - {signed = false}), - success = (heapCheck - (false, - Operand.Var - {var = bytes, - ty = Type.csize ()})), - ty = Type.csize ()}) + Vector.new2 + (Statement.PrimApp + {args = Vector.new2 + (Operand.word extraBytes, + bytesNeeded), + dst = SOME (bytes, Type.csize ()), + prim = Prim.Word_add (WordSize.csize ())}, + Statement.PrimApp + {args = Vector.new2 + (Operand.word extraBytes, + bytesNeeded), + dst = SOME (test, Type.bool), + prim = Prim.Word_addCheckP + (WordSize.csize (), + {signed = false})}), + Transfer.ifBoolE + (Operand.Var {var = test, ty = Type.bool}, + !Control.gcExpect, + {falsee = heapCheck (false, + Operand.Var + {var = bytes, + ty = Type.csize ()}), + truee = heapCheckTooLarge ()})) end end in @@ -505,13 +506,15 @@ start = start} end -fun insertPerBlock (f: Function.t, handlesSignals) = +fun insertPerBlock (f: Function.t, handlesSignals, newFlag, tyconTy) = let val {blocks, ...} = Function.dest f fun blockCheckAmount {blockIndex} = - Block.objectBytesAllocated (Vector.sub (blocks, blockIndex)) + Block.objectBytesAllocated + (Vector.sub (blocks, blockIndex), + {tyconTy = tyconTy}) in - insertFunction (f, handlesSignals, blockCheckAmount, fn _ => Bytes.zero) + insertFunction (f, handlesSignals, newFlag, blockCheckAmount, fn _ => Bytes.zero) end structure Graph = DirectedGraph @@ -559,7 +562,7 @@ start = start} end -fun insertCoalesce (f: Function.t, handlesSignals) = +fun insertCoalesce (f: Function.t, handlesSignals, newFlag, tyconTy) = let val f = isolateBigTransfers f val {blocks, start, ...} = Function.dest f @@ -611,7 +614,7 @@ Cont _ => true | CReturn {func, ...} => CFunction.mayGC func - andalso not (CFunction.ensuresBytesFree func) + andalso not (Option.isSome (CFunction.ensuresBytesFree func)) | Handler => true | Jump => (case transfer of @@ -657,7 +660,9 @@ else addEdge from end) end) - val objectBytesAllocated = Vector.map (blocks, Block.objectBytesAllocated) + val objectBytesAllocated = + Vector.map (blocks, fn b => + Block.objectBytesAllocated (b, {tyconTy = tyconTy})) fun insertCoalesceExtBasicBlocks () = let val preds = Array.new (n, 0) @@ -685,7 +690,7 @@ val classes = Array.array (n, ~1) fun indexClass i = Array.sub (classes, i) val c = Counter.new 0 - fun setClass (f: unit Forest.t) = + fun setClass (f: unit Node.t Forest.t) = let val {loops, notInLoop} = Forest.dest f val class = Counter.next c @@ -705,7 +710,8 @@ in () end - val _ = setClass (Graph.loopForestSteensgaard (g, {root = root})) + val _ = setClass (Graph.loopForestSteensgaard + (g, {root = root, nodeValue = fn x => x})) val numClasses = Counter.value c datatype z = datatype Control.limitCheck val _ = @@ -809,7 +815,7 @@ if Array.sub (mayHaveCheck, blockIndex) then maxPath blockIndex else Bytes.zero - val f = insertFunction (f, handlesSignals, blockCheckAmount, + val f = insertFunction (f, handlesSignals, newFlag, blockCheckAmount, maxPath o labelIndex) val _ = Control.diagnostics @@ -825,43 +831,71 @@ f end -fun transform (Program.T {functions, handlesSignals, main, objectTypes}) = +fun transform (Program.T {functions, handlesSignals, main, objectTypes, profileInfo, statics}) = let + fun tyconTy tycon = + Vector.sub (objectTypes, ObjptrTycon.index tycon) + val _ = Control.diagnostic (fn () => Layout.str "Limit Check maxPaths") + + val (newFlag, finishFlags) = + let + val flagsTycon = ObjptrTycon.new () + val flagsVar = Var.newString "flags" + val flagsTy = Type.objptr flagsTycon + val flags = Operand.Var {ty = flagsTy, var = flagsVar} + + val flagWS = WordSize.bool + val flagScale = valOf (Scale.fromBytes (WordSize.bytes flagWS)) + val flagTy = Type.word flagWS + + val c = Counter.new 0 + in + (fn () => Operand.SequenceOffset + {base = flags, + index = Operand.word (WordX.fromInt (Counter.next c, + WordSize.seqIndex ())), + offset = Bytes.zero, + scale = flagScale, + ty = flagTy}, + fn () => + if Counter.value c > 0 + then (ObjptrTycon.setIndex (flagsTycon, Vector.length objectTypes) + ; (Vector.concat + [objectTypes, + Vector.new1 (ObjectType.Sequence + {components = Prod.new1Mutable flagTy, + hasIdentity = true})], + Vector.concat + [statics, + Vector.new1 {dst = (flagsVar, flagsTy), + obj = Object.Sequence + {init = Vector.tabulate + (Counter.value c, fn _ => + Vector.new1 + {offset = Bytes.zero, + src = Operand.one flagWS}), + tycon = flagsTycon}}])) + else (objectTypes, statics)) + end + datatype z = datatype Control.limitCheck fun insert f = case !Control.limitCheck of - PerBlock => insertPerBlock (f, handlesSignals) - | _ => insertCoalesce (f, handlesSignals) + PerBlock => insertPerBlock (f, handlesSignals, newFlag, tyconTy) + | _ => insertCoalesce (f, handlesSignals, newFlag, tyconTy) + + val main = insert main val functions = List.revMap (functions, insert) - val {args, blocks, name, raises, returns, start} = - Function.dest (insert main) - val newStart = Label.newNoname () - val block = - Block.T {args = Vector.new0 (), - kind = Kind.Jump, - label = newStart, - statements = (Vector.fromListMap - (!extraGlobals, fn x => - Statement.Bind - {dst = (x, Type.bool), - isMutable = true, - src = Operand.cast (Operand.bool true, - Type.bool)})), - transfer = Transfer.Goto {args = Vector.new0 (), - dst = start}} - val blocks = Vector.concat [Vector.new1 block, blocks] - val main = Function.new {args = args, - blocks = blocks, - name = name, - raises = raises, - returns = returns, - start = newStart} + + val (objectTypes, statics) = finishFlags () in Program.T {functions = functions, handlesSignals = handlesSignals, main = main, - objectTypes = objectTypes} + objectTypes = objectTypes, + profileInfo = profileInfo, + statics = statics} end end diff -Nru mlton-20130715/mlton/backend/live.fun mlton-20210117+dfsg/mlton/backend/live.fun --- mlton-20130715/mlton/backend/live.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/live.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,364 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - * - - * This pass is based on the liveness algorithm described in section 4.13, - * page 132, of Morgan's "Building an Optimizing Compiler". BTW, the Dragon - * book and Muchnick's book provided no help at all on speeding up liveness. - * They suggest using bit-vectors, which is infeasible for MLton due to the - * large size of and number of variables in SSA functions. - * - * Here is a description of the algorithm. - * - * Walk over the whole program and - * 1. Build the predecessor graph of basic blocks. Each basic block records the - * set of its predecessors and the set of variables live at the beginning of - * the block. - * 2. For each variable record the block in which is defined and the list of - * blocks where it is used. - * - * Now, for each variable, propagate the liveness information backwards from uses - * along basic blocks until the definition block is reached. - * - * That's it. The reason why it's so fast is that it processes one variable at a - * time, and hence the operation to determine if that variable is in the live - * list for a particular block is constant time -- the variable is either at the - * head of the list or it's not there. - *) -functor Live (S: LIVE_STRUCTS): LIVE = -struct - -open S -datatype z = datatype Statement.t -datatype z = datatype Transfer.t - -structure LiveInfo = - struct - datatype t = T of {live: Var.t Buffer.t, - liveHS: {handler: Label.t option ref, - link: unit option ref}, - name: string, - preds: t list ref} - - fun layout (T {name, ...}) = Layout.str name - - fun new (name: string) = - T {live = Buffer.new {dummy = Var.bogus}, - liveHS = {handler = ref NONE, - link = ref NONE}, - name = name, - preds = ref []} - - fun live (T {live, ...}) = Buffer.toVector live - - fun liveHS (T {liveHS = {handler, link}, ...}) = - {handler = !handler, - link = isSome (!link)} - - fun equals (T {preds = r, ...}, T {preds = r', ...}) = r = r' - - fun addEdge (b, T {preds, ...}) = - if List.exists (!preds, fn b' => equals (b, b')) - then () - else List.push (preds, b) - - val addEdge = - Trace.trace2 - ("Live.LiveInfo.addEdge", layout, layout, Unit.layout) - addEdge - end - -val traceConsider = - Trace.trace ("Live.consider", LiveInfo.layout, Bool.layout) - -fun live (function, {shouldConsider: Var.t -> bool}) = - let - val shouldConsider = - Trace.trace ("Live.shouldConsider", Var.layout, Bool.layout) - shouldConsider - val {args, blocks, ...} = Function.dest function - val _ = - Control.diagnostic - (fn () => - let - val numVars = ref 0 - fun loopVar (x, _) = - if shouldConsider x - then Int.inc numVars - else () - fun loopFormals v = Vector.foreach (v, loopVar) - val () = - Vector.foreach - (blocks, fn Block.T {args, statements, transfer, ...} => - (loopFormals args - ; Vector.foreach (statements, fn s => - Statement.foreachDef (s, loopVar)) - ; Transfer.foreachDef (transfer, loopVar))) - open Layout - in - align [seq [str "Live info for ", - Func.layout (Function.name function)], - seq [str " num blocks ", Int.layout (Vector.length blocks)], - seq [str " num vars ", Int.layout (!numVars)]] - end) - val {get = labelInfo: Label.t -> {argInfo: LiveInfo.t, - block: Block.t, - bodyInfo: LiveInfo.t}, - rem = removeLabelInfo, - set = setLabelInfo, ...} = - Property.getSetOnce (Label.plist, - Property.initRaise ("live info", Label.layout)) - val {get = varInfo: Var.t -> {defined: LiveInfo.t option ref, - used: LiveInfo.t list ref}, - rem = removeVarInfo, ...} = - Property.get (Var.plist, - Property.initFun (fn _ => {defined = ref NONE, - used = ref []})) - datatype 'a defuse = Def of LiveInfo.t | Use of 'a * LiveInfo.t - val handlerCodeDefUses: Label.t defuse list ref = ref [] - val handlerLinkDefUses: unit defuse list ref = ref [] - val allVars: Var.t list ref = ref [] - fun setDefined (x: Var.t, defined): unit = - if shouldConsider x - then (List.push (allVars, x) - ; #defined (varInfo x) := SOME defined) - else () - val setDefined = - Trace.trace2 ("Live.setDefined", - Var.layout, LiveInfo.layout, Unit.layout) - setDefined - (* Set the labelInfo for each block. *) - val _ = - Vector.foreach - (blocks, fn block as Block.T {args, label, ...} => - let - val name = Label.toString label - val (argInfo, bodyInfo) = - case Vector.length args of - 0 => let val b = LiveInfo.new (name ^ "a") - in (b, b) - end - | _ => let val b = LiveInfo.new (name ^ "b") - val b' = LiveInfo.new (name ^ "c") - val _ = LiveInfo.addEdge (b, b') - in (b, b') - end - in - setLabelInfo (label, {argInfo = argInfo, - block = block, - bodyInfo = bodyInfo}) - end) - (* Add the control-flow edges and set the defines and uses for each - * variable. - *) - val head = LiveInfo.new "main" - val _ = Vector.foreach (args, fn (x, _) => setDefined (x, head)) - val _ = - Vector.foreach - (blocks, - fn Block.T {args, kind, label, statements, transfer, ...} => - let - val {argInfo, bodyInfo = b, ...} = labelInfo label - val _ = Vector.foreach (args, fn (x, _) => setDefined (x, argInfo)) - fun goto l = LiveInfo.addEdge (b, #argInfo (labelInfo l)) - (* Make sure that a cont's live vars includes variables live in its - * handler. - *) - val _ = - case kind of - Kind.Cont {handler, ...} => - Handler.foreachLabel (handler, goto) - | _ => () - fun define (x: Var.t): unit = setDefined (x, b) - fun use (x: Var.t): unit = - if shouldConsider x - then - let val {used, ...} = varInfo x - in - if (case !used of - [] => false - | b' :: _ => LiveInfo.equals (b, b')) - then () - else List.push (used, b) - end - else () - val use = Trace.trace ("Live.use", Var.layout, Unit.layout) use - val _ = - Vector.foreach - (statements, fn s => - let - val _ = Statement.foreachDefUse (s, {def = define o #1, - use = use}) - val _ = - case s of - SetExnStackSlot => - List.push (handlerLinkDefUses, Use ((), b)) - | SetHandler _ => - List.push (handlerCodeDefUses, Def b) - | SetSlotExnStack => - List.push (handlerLinkDefUses, Def b) - | _ => () - in - () - end) - fun label l = - let - val {block = Block.T {kind, ...}, ...} = labelInfo l - in - case kind of - Kind.Handler => - List.push (handlerCodeDefUses, Use (l, b)) - | _ => goto l - end - val _ = - Transfer.foreachDefLabelUse (transfer, {def = define o #1, - label = label, - use = use}) - in () - end) - (* Back-propagate every variable from uses to define point. *) - fun processVar (x: Var.t): unit = - if not (shouldConsider x) - then () - else - let - val {defined, used, ...} = varInfo x - val defined = valOf (!defined) - val todo: LiveInfo.t list ref = ref [] - fun consider (b as LiveInfo.T {live, ...}) = - if LiveInfo.equals (b, defined) - orelse (case Buffer.last live of - NONE => false - | SOME x' => Var.equals (x, x')) - then false - else (Buffer.add (live, x) - ; List.push (todo, b) - ; true) - val consider = traceConsider consider - val consider = ignore o consider - val _ = List.foreach (!used, consider) - fun loop () = - case !todo of - [] => () - | LiveInfo.T {preds, ...} :: bs => - (todo := bs - ; List.foreach (!preds, consider) - ; loop ()) - val _ = loop () - in () - end - val processVar = - Trace.trace ("Live.processVar", Var.layout, Unit.layout) processVar - val _ = List.foreach (!allVars, processVar) - val _ = Function.foreachVar (function, fn (x, _) => removeVarInfo x) - (* handler code and link slots are harder; in particular, they don't - * satisfy the SSA invariant -- there are multiple definitions; - * furthermore, a def and use in a block does not mean that the def - * occurs before the use. But, a back propagated use will always - * come after a def in the same block - *) - fun handlerLink (defuse: 'a defuse list ref, - sel: {handler: Label.t option ref, - link: unit option ref} -> 'a option ref) = - let - val todo: ('a * LiveInfo.t) list ref = ref [] - (* The foldr is important because the statements in each block were - * visited in order, meaning that the earlier statements appear - * later in !defuse. Hence, with the foldr, the defs and uses are - * visited in order for each block. - *) - val defs = - List.foldr - (!defuse, [], fn (du, defs) => - case du of - Def b => b::defs - | Use (a, b as LiveInfo.T {liveHS, ...}) => - let - val _ = - if - (* Since we are visiting all of the statements - * in the block together, in order, we are - * guaranteed that if there is a prior definition - * then it will be first on defs. - *) - (case defs of - [] => false - | b' :: _ => LiveInfo.equals (b, b')) - then () - else (sel liveHS := SOME a - ; List.push (todo, (a, b))) - in - defs - end) - fun consider (b as LiveInfo.T {liveHS, ...}, a: 'a) = - if List.exists (defs, fn b' => LiveInfo.equals (b, b')) - orelse isSome (!(sel liveHS)) - then () - else (sel liveHS := SOME a - ; List.push (todo, (a, b))) - fun loop () = - case !todo of - [] => () - | (a, LiveInfo.T {preds, ...}) :: bs => - (todo := bs - ; List.foreach (!preds, fn b => consider (b, a)) - ; loop ()) - val _ = loop () - in - () - end - val _ = handlerLink (handlerCodeDefUses, #handler) - val _ = handlerLink (handlerLinkDefUses, #link) - val {get = labelLive, rem = remLabelLive, ...} = - Property.get - (Label.plist, - Property.initFun - (fn l => - let - val {bodyInfo, argInfo, ...} = labelInfo l - val () = removeLabelInfo l - val {handler, link} = LiveInfo.liveHS bodyInfo - in - {begin = LiveInfo.live bodyInfo, - beginNoFormals = LiveInfo.live argInfo, - handler = handler, - link = link} - end)) - val () = Vector.foreach (blocks, fn b => - ignore (labelLive (Block.label b))) - val _ = - Control.diagnostics - (fn display => - let open Layout - in - Vector.foreach - (blocks, fn b => - let - val l = Block.label b - val {begin, beginNoFormals, handler, link} = labelLive l - in - display - (seq [Label.layout l, - str " ", - record [("begin", Vector.layout Var.layout begin), - ("beginNoFormals", - Vector.layout Var.layout beginNoFormals), - ("handler", Option.layout Label.layout handler), - ("link", Bool.layout link)]]) - end) - end) - in - {labelLive = labelLive, - remLabelLive = remLabelLive} - end - -val live = - Trace.trace2 ("Live.live", Func.layout o Function.name, Layout.ignore, - Layout.ignore) - live - -end diff -Nru mlton-20130715/mlton/backend/live.sig mlton-20210117+dfsg/mlton/backend/live.sig --- mlton-20130715/mlton/backend/live.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/live.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature LIVE_STRUCTS = - sig - include RSSA - end - -signature LIVE = - sig - include LIVE_STRUCTS - - val live: - Function.t * {shouldConsider: Var.t -> bool} - -> {labelLive: - Label.t -> {(* live at beginning of block. *) - begin: Var.t vector, - (* live at the beginning of a block, except formals. *) - beginNoFormals: Var.t vector, - (* live handler slots at beginning of block. *) - handler: Label.t option, - link: bool}, - remLabelLive: Label.t -> unit} - end diff -Nru mlton-20130715/mlton/backend/machine.fun mlton-20210117+dfsg/mlton/backend/machine.fun --- mlton-20130715/mlton/backend/machine.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/machine.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2014,2016-2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,142 +12,46 @@ open S -structure ObjptrTycon = ObjptrTycon () -structure Runtime = Runtime () -structure Scale = Scale () -structure RepType = RepType (structure CFunction = CFunction - structure CType = CType - structure Label = Label - structure ObjptrTycon = ObjptrTycon - structure Prim = Prim - structure RealSize = RealSize - structure Runtime = Runtime - structure Scale = Scale - structure WordSize = WordSize - structure WordX = WordX - structure WordXVector = WordXVector) -structure ObjectType = RepType.ObjectType +structure ChunkLabel = Id (val noname = "Chunk") -structure Type = RepType - -structure ChunkLabel = Id (val noname = "ChunkLabel") - -structure Register = +structure Global = struct - datatype t = T of {index: int option ref, + datatype t = T of {index: int, ty: Type.t} - local - fun make f (T r) = f r - in - val indexOpt = ! o (make #index) - val ty = make #ty - end - fun layout (T {index, ty, ...}) = let open Layout in - seq [str (concat ["R", Type.name ty]), - paren (case !index of - NONE => str "NONE" - | SOME i => Int.layout i), + seq [str (concat ["G", Type.name ty]), + paren (Int.layout index), str ": ", Type.layout ty] end - val toString = Layout.toString o layout - - fun index (r as T {index, ...}) = - case !index of - NONE => - Error.bug (concat ["Machine.Register: register ", - toString r, " missing index"]) - | SOME i => i - - fun setIndex (r as T {index, ...}, i) = - case !index of - NONE => index := SOME i - | SOME _ => - Error.bug (concat ["Machine.Register: register ", - toString r, " index already set"]) - - fun new (ty, i) = T {index = ref i, - ty = ty} - - fun equals (r, r') = - (case (indexOpt r, indexOpt r') of - (SOME i, SOME i') => i = i' - | _ => false) - andalso CType.equals (Type.toCType (ty r), Type.toCType (ty r')) - - val equals = - Trace.trace2 ("Machine.Register.equals", layout, layout, Bool.layout) equals - - val isSubtype: t * t -> bool = - fn (T {index = i, ty = t}, T {index = i', ty = t'}) => - (case (!i, !i') of - (SOME i, SOME i') => i = i' - | _ => false) - andalso Type.isSubtype (t, t') - andalso CType.equals (Type.toCType t, Type.toCType t') - end - -structure Global = - struct - datatype t = T of {index: int, - isRoot: bool, - ty: Type.t} - - fun layout (T {index, isRoot, ty, ...}) = - let - open Layout - in - seq [str "glob ", - record [("index", Int.layout index), - ("isRoot", Bool.layout isRoot), - ("ty", Type.layout ty)]] - end - local fun make f (T r) = f r in val index = make #index - val isRoot = make #isRoot val ty = make #ty end - val nonRootCounter = Counter.new 0 - fun numberOfNonRoot () = Counter.value nonRootCounter - val memo = CType.memo (fn _ => Counter.new 0) fun numberOfType t = Counter.value (memo t) - fun new {isRoot, ty} = - let - val isRoot = isRoot orelse not (Type.isObjptr ty) - val counter = - if isRoot - then memo (Type.toCType ty) - else nonRootCounter - val g = T {index = Counter.next counter, - isRoot = isRoot, - ty = ty} - in - g - end + fun new ty = + T {index = Counter.next (memo (Type.toCType ty)), + ty = ty} - fun equals (T {index = i, isRoot = r, ty}, - T {index = i', isRoot = r', ty = ty'}) = + fun equals (T {index = i, ty}, + T {index = i', ty = ty'}) = i = i' - andalso r = r' andalso Type.equals (ty, ty') val isSubtype: t * t -> bool = - fn (T {index = i, isRoot = r, ty}, - T {index = i', isRoot = r', ty = ty'}) => + fn (T {index = i, ty}, + T {index = i', ty = ty'}) => i = i' - andalso r = r' andalso Type.isSubtype (ty, ty') andalso CType.equals (Type.toCType ty, Type.toCType ty') end @@ -182,7 +86,7 @@ val interfere: t * t -> bool = fn (T {offset = b, ty = ty}, T {offset = b', ty = ty'}) => - let + let val max = Bytes.+ (b, Type.bytes ty) val max' = Bytes.+ (b', Type.bytes ty') in @@ -194,46 +98,222 @@ ty = ty} end +structure StaticHeap = + struct + structure Kind = + struct + datatype t = Dynamic | Immutable | Mutable | Root + + val all = [Immutable, Mutable, Root, Dynamic] + + val isDynamic = fn Dynamic => true | _ => false + + fun equals (k1, k2) = + case (k1, k2) of + (Dynamic, Dynamic) => true + | (Immutable, Immutable) => true + | (Mutable, Mutable) => true + | (Root, Root) => true + | _ => false + + fun toString k = + case k of + Dynamic => "dynamic" + | Immutable => "immutable" + | Mutable => "mutable" + | Root => "root" + val layout = Layout.str o toString + + fun name k = + case k of + Dynamic => "D" + | Immutable => "I" + | Mutable => "M" + | Root => "R" + + fun memoize f = + let + val dyn = f Dynamic + val imm = f Immutable + val mut = f Mutable + val root = f Root + in + fn Dynamic => dyn + | Immutable => imm + | Mutable => mut + | Root => root + end + + val label = memoize (fn k => Label.fromString (concat ["staticHeap", name k])) + end + + structure Ref = + struct + datatype t = T of {index: int, + kind: Kind.t, + offset: Bytes.t, + ty: Type.t} + + local + fun mk sel (T r) = sel r + in + val index = mk #index + val kind = mk #kind + val offset = mk #offset + val ty = mk #ty + end + + fun equals (T {index = index1, kind = kind1, offset = offset1, ...}, + T {index = index2, kind = kind2, offset = offset2, ...}) = + Int.equals (index1, index2) + andalso Kind.equals (kind1, kind2) + andalso Bytes.equals (offset1, offset2) + + fun layout (T {index, kind, offset, ty}) = + let + open Layout + in + seq [str (concat ["H", Kind.name kind]), + tuple [Int.layout index, Bytes.layout offset], + str ": ", + Type.layout ty] + end + end + + structure Elem = + struct + datatype t = + Cast of t * Type.t + | Const of Const.t + | Ref of Ref.t + + fun ty e = + case e of + Cast (_, ty) => ty + | Const c => Type.ofConst c + | Ref r => Ref.ty r + + fun layout e = + let + open Layout + in + case e of + Cast (z, ty) => + seq [str "Cast ", tuple [layout z, Type.layout ty]] + | Const c => Const.layout c + | Ref r => Ref.layout r + end + + val word = Const o Const.word + val deWord = + fn Const (Const.Word w) => SOME w + | _ => NONE + end + + structure Object = Object (open S + structure Use = Elem) + end + +structure Temporary = + struct + datatype t = T of {index: int option ref, + ty: Type.t} + + local + fun make f (T r) = f r + in + val indexOpt = ! o (make #index) + val ty = make #ty + end + + fun layout (T {index, ty, ...}) = + let + open Layout + in + seq [str (concat ["T", Type.name ty]), + paren (case !index of + NONE => str "NONE" + | SOME i => Int.layout i), + str ": ", + Type.layout ty] + end + + val toString = Layout.toString o layout + + fun index (r as T {index, ...}) = + case !index of + NONE => + Error.bug (concat ["Machine.Temporary: temporary ", + toString r, " missing index"]) + | SOME i => i + + fun setIndex (r as T {index, ...}, i) = + case !index of + NONE => index := SOME i + | SOME _ => + Error.bug (concat ["Machine.Temporary: temporary ", + toString r, " index already set"]) + + fun new (ty, i) = T {index = ref i, + ty = ty} + + fun equals (r, r') = + (case (indexOpt r, indexOpt r') of + (SOME i, SOME i') => i = i' + | _ => false) + andalso CType.equals (Type.toCType (ty r), Type.toCType (ty r')) + + val equals = + Trace.trace2 ("Machine.Temporary.equals", layout, layout, Bool.layout) equals + + val isSubtype: t * t -> bool = + fn (T {index = i, ty = t}, T {index = i', ty = t'}) => + (case (!i, !i') of + (SOME i, SOME i') => i = i' + | _ => false) + andalso Type.isSubtype (t, t') + andalso CType.equals (Type.toCType t, Type.toCType t') + end + structure Operand = struct datatype t = - ArrayOffset of {base: t, - index: t, - offset: Bytes.t, - scale: Scale.t, - ty: Type.t} - | Cast of t * Type.t - | Contents of {oper: t, - ty: Type.t} + Cast of t * Type.t + | Const of Const.t | Frontier | GCState | Global of Global.t | Label of Label.t - | Null | Offset of {base: t, offset: Bytes.t, ty: Type.t} - | Register of Register.t - | Real of RealX.t + | SequenceOffset of {base: t, + index: t, + offset: Bytes.t, + scale: Scale.t, + ty: Type.t} | StackOffset of StackOffset.t | StackTop - | Word of WordX.t + | StaticHeapRef of StaticHeap.Ref.t + | Temporary of Temporary.t + + val word = Const o Const.Word + + val zero = word o WordX.zero val ty = - fn ArrayOffset {ty, ...} => ty - | Cast (_, ty) => ty - | Contents {ty, ...} => ty + fn Cast (_, ty) => ty + | Const c => Type.ofConst c | Frontier => Type.cpointer () | GCState => Type.gcState () | Global g => Global.ty g | Label l => Type.label l - | Null => Type.cpointer () | Offset {ty, ...} => ty - | Real r => Type.real (RealX.size r) - | Register r => Register.ty r + | SequenceOffset {ty, ...} => ty | StackOffset s => StackOffset.ty s | StackTop => Type.cpointer () - | Word w => Type.ofWordX w + | StaticHeapRef h => StaticHeap.Ref.ty h + | Temporary t => Temporary.ty t fun layout (z: t): Layout.t = let @@ -244,54 +324,54 @@ else empty in case z of - ArrayOffset {base, index, offset, scale, ty} => - seq [str (concat ["X", Type.name ty, " "]), - tuple [layout base, layout index, Scale.layout scale, - Bytes.layout offset], - constrain ty] - | Cast (z, ty) => + Cast (z, ty) => seq [str "Cast ", tuple [layout z, Type.layout ty]] - | Contents {oper, ty} => - seq [str (concat ["C", Type.name ty, " "]), - paren (layout oper)] + | Const c => Const.layout c | Frontier => str "" | GCState => str "" | Global g => Global.layout g | Label l => Label.layout l - | Null => str "NULL" | Offset {base, offset, ty} => seq [str (concat ["O", Type.name ty, " "]), tuple [layout base, Bytes.layout offset], constrain ty] - | Real r => RealX.layout r - | Register r => Register.layout r + | SequenceOffset {base, index, offset, scale, ty} => + seq [str (concat ["X", Type.name ty, " "]), + tuple [layout base, layout index, Scale.layout scale, + Bytes.layout offset], + constrain ty] | StackOffset so => StackOffset.layout so | StackTop => str "" - | Word w => WordX.layout w + | StaticHeapRef h => StaticHeap.Ref.layout h + | Temporary t => Temporary.layout t end val toString = Layout.toString o layout val rec equals = - fn (ArrayOffset {base = b, index = i, ...}, - ArrayOffset {base = b', index = i', ...}) => - equals (b, b') andalso equals (i, i') - | (Cast (z, t), Cast (z', t')) => + fn (Cast (z, t), Cast (z', t')) => Type.equals (t, t') andalso equals (z, z') - | (Contents {oper = z, ...}, Contents {oper = z', ...}) => - equals (z, z') + | (Const c, Const c') => Const.equals (c, c') | (GCState, GCState) => true | (Global g, Global g') => Global.equals (g, g') | (Label l, Label l') => Label.equals (l, l') | (Offset {base = b, offset = i, ...}, Offset {base = b', offset = i', ...}) => equals (b, b') andalso Bytes.equals (i, i') - | (Real r, Real r') => RealX.equals (r, r') - | (Register r, Register r') => Register.equals (r, r') + | (SequenceOffset {base = b, index = i, ...}, + SequenceOffset {base = b', index = i', ...}) => + equals (b, b') andalso equals (i, i') | (StackOffset so, StackOffset so') => StackOffset.equals (so, so') - | (Word w, Word w') => WordX.equals (w, w') + | (StaticHeapRef h1, StaticHeapRef h2) => + StaticHeap.Ref.equals (h1, h2) + | (Temporary t, Temporary t') => Temporary.equals (t, t') | _ => false + fun gcField field = + Offset {base = GCState, + offset = Runtime.GCField.offset field, + ty = Type.ofGCField field} + val stackOffset = StackOffset o StackOffset.T fun interfere (write: t, read: t): bool = @@ -301,31 +381,29 @@ case (read, write) of (Cast (z, _), _) => interfere (write, z) | (_, Cast (z, _)) => interfere (z, read) - | (ArrayOffset {base, index, ...}, _) => - inter base orelse inter index - | (Contents {oper, ...}, _) => inter oper | (Global g, Global g') => Global.equals (g, g') | (Offset {base, ...}, _) => inter base - | (Register r, Register r') => Register.equals (r, r') + | (SequenceOffset {base, index, ...}, _) => + inter base orelse inter index | (StackOffset so, StackOffset so') => StackOffset.interfere (so, so') + | (Temporary t, Temporary t') => Temporary.equals (t, t') + | (StaticHeapRef h1, StaticHeapRef h2) => + StaticHeap.Ref.equals (h1, h2) | _ => false end - val rec isLocation = - fn ArrayOffset _ => true - | Cast (z, _) => isLocation z - | Contents _ => true - | GCState => true + val rec isDestination = + fn Cast (z, _) => isDestination z | Global _ => true | Offset _ => true - | Register _ => true + | SequenceOffset _ => true | StackOffset _ => true + | Temporary _ => true | _ => false end -structure Switch = Switch (open Atoms - structure Type = Type +structure Switch = Switch (open S structure Use = Operand) structure Statement = @@ -333,7 +411,6 @@ datatype t = Move of {dst: Operand.t, src: Operand.t} - | Noop | PrimApp of {args: Operand.t vector, dst: Operand.t option, prim: Type.t Prim.t} @@ -344,9 +421,9 @@ open Layout in fn Move {dst, src} => - mayAlign [Operand.layout dst, - seq [str " = ", Operand.layout src]] - | Noop => str "Noop" + mayAlign + [seq [Operand.layout dst, str " ="], + indent (Operand.layout src, 2)] | PrimApp {args, dst, prim, ...} => let val rest = @@ -356,8 +433,9 @@ case dst of NONE => rest | SOME z => - mayAlign [Operand.layout z, - seq [str " = ", rest]] + mayAlign + [seq [Operand.layout z, str " ="], + indent (rest, 2)] end | ProfileLabel l => seq [str "ProfileLabel ", ProfileLabel.layout l] @@ -365,43 +443,88 @@ fun move (arg as {dst, src}) = if Operand.equals (dst, src) - then Noop - else Move arg + then NONE + else SOME (Move arg) val move = Trace.trace ("Machine.Statement.move", fn {dst, src} => Layout.record [("dst", Operand.layout dst), ("src", Operand.layout src)], - layout) + Option.layout layout) move - fun moves {srcs, dsts} = - Vector.fromListRev - (Vector.fold2 (srcs, dsts, [], fn (src, dst, ac) => - move {src = src, dst = dst} :: ac)) - fun object {dst, header, size} = let datatype z = datatype Operand.t fun bytes (b: Bytes.t): Operand.t = - Word (WordX.fromIntInf (Bytes.toIntInf b, WordSize.csize ())) - val temp = Register (Register.new (Type.cpointer (), NONE)) + Operand.word (WordX.fromBytes (b, WordSize.csize ())) + val metaDataSize = Runtime.normalMetaDataSize () + val headerOffset = Runtime.headerOffset () + val header = Operand.word header + val temp = Temporary (Temporary.new (Type.cpointer (), NONE)) in Vector.new4 - (Move {dst = Contents {oper = Frontier, - ty = Type.objptrHeader ()}, - src = Word (WordX.fromIntInf (Word.toIntInf header, - WordSize.objptrHeader ()))}, - PrimApp {args = Vector.new2 (Frontier, - bytes (Runtime.headerSize ())), + ((* tmp = Frontier + GC_NORMAL_METADATA_SIZE; *) + PrimApp {args = Vector.new2 (Frontier, bytes metaDataSize), dst = SOME temp, - prim = Prim.cpointerAdd}, + prim = Prim.CPointer_add}, (* CHECK; if objptr <> cpointer, need non-trivial coercion here. *) + (* dst = pointerToObjptr(tmp); *) Move {dst = dst, src = Cast (temp, Operand.ty dst)}, + (* OW(dst, -GC_HEADER_SIZE) = header; *) + Move {dst = Offset {base = dst, + offset = headerOffset, + ty = Type.objptrHeader ()}, + src = header}, + (* Frontier += size; *) PrimApp {args = Vector.new2 (Frontier, bytes size), dst = SOME Frontier, - prim = Prim.cpointerAdd}) + prim = Prim.CPointer_add}) + end + + fun sequence {dst, header, length, size} = + let + datatype z = datatype Operand.t + fun bytes (b: Bytes.t): Operand.t = + Operand.word (WordX.fromBytes (b, WordSize.csize ())) + val metaDataSize = Runtime.sequenceMetaDataSize () + val headerOffset = Runtime.headerOffset () + val lengthOffset = Runtime.sequenceLengthOffset () + val counterOffset = Runtime.sequenceCounterOffset () + val header = Operand.word header + val length = + Operand.word (WordX.fromInt (length, WordSize.seqIndex ())) + val counter = Operand.zero (WordSize.seqIndex ()) + val temp = Temporary (Temporary.new (Type.cpointer (), NONE)) + in + Vector.new6 + ((* tmp = Frontier + GC_SEQUENCE_METADATA_SIZE; *) + PrimApp {args = Vector.new2 (Frontier, bytes metaDataSize), + dst = SOME temp, + prim = Prim.CPointer_add}, + (* CHECK; if objptr <> cpointer, need non-trivial coercion here. *) + (* dst = pointerToObjptr(tmp); *) + Move {dst = dst, src = Cast (temp, Operand.ty dst)}, + (* OW(dst, -(GC_HEADER_SIZE + GC_SEQUENCE_LENGTH_SIZE + GC_SEQUENCE_COUNTER_SIZE)) = 0x0; *) + Move {dst = Offset {base = dst, + offset = counterOffset, + ty = Type.seqIndex ()}, + src = counter}, + (* OW(dst, -(GC_HEADER_SIZE + GC_SEQUENCE_LENGTH_SIZE)) = length; *) + Move {dst = Offset {base = dst, + offset = lengthOffset, + ty = Type.seqIndex ()}, + src = length}, + (* OW(dst, -GC_HEADER_SIZE) = header; *) + Move {dst = Offset {base = dst, + offset = headerOffset, + ty = Type.objptrHeader ()}, + src = header}, + (* Frontier += size; *) + PrimApp {args = Vector.new2 (Frontier, bytes size), + dst = SOME Frontier, + prim = Prim.CPointer_add}) end fun foldOperands (s, ac, f) = @@ -420,44 +543,33 @@ | _ => a end -structure FrameInfo = - struct - datatype t = T of {frameLayoutsIndex: int} - - fun layout (T {frameLayoutsIndex, ...}) = - Layout.record [("frameLayoutsIndex", Int.layout frameLayoutsIndex)] - - fun equals (T {frameLayoutsIndex = i}, T {frameLayoutsIndex = i'}) = - i = i' - end - structure Live = struct datatype t = Global of Global.t - | Register of Register.t | StackOffset of StackOffset.t + | Temporary of Temporary.t val layout: t -> Layout.t = fn Global g => Global.layout g - | Register r => Register.layout r | StackOffset s => StackOffset.layout s + | Temporary t => Temporary.layout t val equals: t * t -> bool = fn (Global g, Global g') => Global.equals (g, g') - | (Register r, Register r') => Register.equals (r, r') | (StackOffset s, StackOffset s') => StackOffset.equals (s, s') + | (Temporary t, Temporary t') => Temporary.equals (t, t') | _ => false val ty = fn Global g => Global.ty g - | Register r => Register.ty r | StackOffset s => StackOffset.ty s + | Temporary t => Temporary.ty t val isSubtype: t * t -> bool = fn (Global g, Global g') => Global.isSubtype (g, g') - | (Register r, Register r') => Register.isSubtype (r, r') | (StackOffset s, StackOffset s') => StackOffset.isSubtype (s, s') + | (Temporary t, Temporary t') => Temporary.isSubtype (t, t') | _ => false val interfere: t * t -> bool = @@ -470,36 +582,31 @@ val fromOperand: Operand.t -> t option = fn Operand.Global g => SOME (Global g) - | Operand.Register r => SOME (Register r) | Operand.StackOffset s => SOME (StackOffset s) + | Operand.Temporary t => SOME (Temporary t) | _ => NONE val toOperand: t -> Operand.t = fn Global g => Operand.Global g - | Register r => Operand.Register r | StackOffset s => Operand.StackOffset s + | Temporary t => Operand.Temporary t end structure Transfer = struct datatype t = - Arith of {args: Operand.t vector, - dst: Operand.t, - overflow: Label.t, - prim: Type.t Prim.t, - success: Label.t} - | CCall of {args: Operand.t vector, - frameInfo: FrameInfo.t option, + CCall of {args: Operand.t vector, func: Type.t CFunction.t, - return: Label.t option} + return: {return: Label.t, + size: Bytes.t option} option} | Call of {label: Label.t, live: Live.t vector, return: {return: Label.t, handler: Label.t option, size: Bytes.t} option} | Goto of Label.t - | Raise - | Return + | Raise of {raisesTo: Label.t list} + | Return of {returnsTo: Label.t list} | Switch of Switch.t fun layout t = @@ -507,20 +614,16 @@ open Layout in case t of - Arith {prim, args, dst, overflow, success, ...} => - seq [str "Arith ", - record [("prim", Prim.layout prim), - ("args", Vector.layout Operand.layout args), - ("dst", Operand.layout dst), - ("overflow", Label.layout overflow), - ("success", Label.layout success)]] - | CCall {args, frameInfo, func, return} => + CCall {args, func, return} => seq [str "CCall ", record [("args", Vector.layout Operand.layout args), - ("frameInfo", Option.layout FrameInfo.layout frameInfo), ("func", CFunction.layout (func, Type.layout)), - ("return", Option.layout Label.layout return)]] + ("return", Option.layout + (fn {return, size} => + record [("return", Label.layout return), + ("size", Option.layout Bytes.layout size)]) + return)]] | Call {label, live, return} => seq [str "Call ", record [("label", Label.layout label), @@ -533,25 +636,126 @@ ("size", Bytes.layout size)]) return)]] | Goto l => seq [str "Goto ", Label.layout l] - | Raise => str "Raise" - | Return => str "Return " + | Raise {raisesTo} => + seq [str "Raise ", + record [("raisesTo", List.layout Label.layout raisesTo)]] + | Return {returnsTo} => + seq [str "Return ", + record [("returnsTo", List.layout Label.layout returnsTo)]] | Switch s => Switch.layout s end fun foldOperands (t, ac, f) = case t of - Arith {args, dst, ...} => Vector.fold (args, f (dst, ac), f) - | CCall {args, ...} => Vector.fold (args, ac, f) + CCall {args, ...} => Vector.fold (args, ac, f) | Switch s => Switch.foldLabelUse (s, ac, {label = fn (_, a) => a, use = f}) | _ => ac + end - fun foldDefs (t, a, f) = - case t of - Arith {dst, ...} => f (dst, a) - | _ => a +structure FrameOffsets = + struct + datatype t = T of {index: int, + offsets: Bytes.t vector} + + local + fun make f (T r) = f r + in + val index = make #index + val offsets = make #offsets + end + + fun new {index, offsets} = + T {index = index, offsets = offsets} + + fun equals (fo1, fo2) = + Int.equals (index fo1, index fo2) + andalso Vector.equals (offsets fo1, offsets fo2, Bytes.equals) + + fun layout (T {index, offsets}) = + let + open Layout + in + record [("index", Int.layout index), + ("offsets", Vector.layout Bytes.layout offsets)] + end + + fun hash (T {index, offsets}) = + Hash.combine (Word.fromInt index, Hash.vectorMap (offsets, Bytes.hash)) + end + +structure FrameInfo = + struct + structure Kind = + struct + datatype t = C_FRAME | ML_FRAME + fun equals (k1, k2) = + case (k1, k2) of + (C_FRAME, C_FRAME) => true + | (ML_FRAME, ML_FRAME) => true + | _ => false + local + val newHash = Random.word + val c = newHash () + val ml = newHash () + in + fun hash k = + case k of + C_FRAME => c + | ML_FRAME => ml + end + fun toString k = + case k of + C_FRAME => "C_FRAME" + | ML_FRAME => "ML_FRAME" + val layout = Layout.str o toString + end + + datatype t = T of {frameOffsets: FrameOffsets.t, + index: int ref, + kind: Kind.t, + size: Bytes.t, + sourceSeqIndex: int option} + + local + fun make f (T r) = f r + in + val frameOffsets = make #frameOffsets + val indexRef = make #index + val kind = make #kind + val size = make #size + val sourceSeqIndex = make #sourceSeqIndex + end + val index = ! o indexRef + fun setIndex (fi, i) = indexRef fi := i + val offsets = FrameOffsets.offsets o frameOffsets + + fun new {frameOffsets, index, kind, size, sourceSeqIndex} = + T {frameOffsets = frameOffsets, + index = ref index, + kind = kind, + size = size, + sourceSeqIndex = sourceSeqIndex} + + fun equals (fi1, fi2) = + FrameOffsets.equals (frameOffsets fi1, frameOffsets fi2) + andalso Ref.equals (indexRef fi1, indexRef fi2) + andalso Kind.equals (kind fi1, kind fi2) + andalso Bytes.equals (size fi1, size fi2) + andalso Option.equals (sourceSeqIndex fi1, sourceSeqIndex fi2, Int.equals) + + fun layout (T {frameOffsets, index, kind, size, sourceSeqIndex}) = + let + open Layout + in + record [("frameOffsets", FrameOffsets.layout frameOffsets), + ("index", Ref.layout Int.layout index), + ("kind", Kind.layout kind), + ("size", Bytes.layout size), + ("sourceSeqIndex", Option.layout Int.layout sourceSeqIndex)] + end end structure Kind = @@ -562,9 +766,9 @@ | CReturn of {dst: Live.t option, frameInfo: FrameInfo.t option, func: Type.t CFunction.t} - | Func - | Handler of {frameInfo: FrameInfo.t, - handles: Live.t vector} + | Func of {frameInfo: FrameInfo.t} + | Handler of {args: Live.t vector, + frameInfo: FrameInfo.t} | Jump fun layout k = @@ -582,20 +786,31 @@ [("dst", Option.layout Live.layout dst), ("frameInfo", Option.layout FrameInfo.layout frameInfo), ("func", CFunction.layout (func, Type.layout))]] - | Func => str "Func" - | Handler {frameInfo, handles} => + | Func {frameInfo} => + seq [str "Func ", + record + [("frameInfo", FrameInfo.layout frameInfo)]] + | Handler {args, frameInfo} => seq [str "Handler ", - record [("frameInfo", FrameInfo.layout frameInfo), - ("handles", - Vector.layout Live.layout handles)]] + record [("args", Vector.layout Live.layout args), + ("frameInfo", FrameInfo.layout frameInfo)]] | Jump => str "Jump" end + fun isEntry (k: t): bool = + case k of + Cont _ => true + | CReturn {func, ...} => CFunction.maySwitchThreadsTo func + | Func _ => true + | Handler _ => true + | _ => false + val frameInfoOpt = fn Cont {frameInfo, ...} => SOME frameInfo | CReturn {frameInfo, ...} => frameInfo + | Func {frameInfo, ...} => SOME frameInfo | Handler {frameInfo, ...} => SOME frameInfo - | _ => NONE + | Jump => NONE end structure Block = @@ -617,30 +832,37 @@ val label = make #label end - fun layout (T {kind, label, live, raises, returns, statements, transfer}) = + fun layoutHeader (T {kind, label, live, raises, returns, ...}) = let open Layout in - align [seq [Label.layout label, - str ": ", - record [("kind", Kind.layout kind), - ("live", Vector.layout Live.layout live), - ("raises", - Option.layout (Vector.layout Live.layout) - raises), - ("returns", - Option.layout (Vector.layout Live.layout) - returns)]], + seq [Label.layout label, + str ": ", + record [("kind", Kind.layout kind), + ("live", Vector.layout Live.layout live), + ("raises", + Option.layout (Vector.layout Live.layout) + raises), + ("returns", + Option.layout (Vector.layout Live.layout) + returns)]] + end + + fun layout (b as T {statements, transfer, ...}) = + let + open Layout + in + align [layoutHeader b, indent (align - [align (Vector.toListMap - (statements, Statement.layout)), + [align + (Vector.toListMap (statements, Statement.layout)), Transfer.layout transfer], - 4)] + 2)] end fun layouts (block, output' : Layout.t -> unit) = output' (layout block) - fun foldDefs (T {kind, statements, transfer, ...}, a, f) = + fun foldDefs (T {kind, statements, ...}, a, f) = let val a = case kind of @@ -652,7 +874,6 @@ val a = Vector.fold (statements, a, fn (s, a) => Statement.foldDefs (s, a, f)) - val a = Transfer.foldDefs (transfer, a, f) in a end @@ -662,157 +883,48 @@ struct datatype t = T of {blocks: Block.t vector, chunkLabel: ChunkLabel.t, - regMax: CType.t -> int} + tempsMax: CType.t -> int} + + local + fun make sel (T r) = sel r + in + val chunkLabel = make #chunkLabel + end - fun layouts (T {blocks, ...}, output : Layout.t -> unit) = - Vector.foreach (blocks, fn block => Block.layouts (block, output)) + fun layouts (T {blocks, chunkLabel, ...}, output' : Layout.t -> unit) = + let + open Layout + in + ((output' o seq) [str "Chunk ", ChunkLabel.layout chunkLabel]) ; + Vector.foreach (blocks, fn block => Block.layouts (block, output')) + end fun clear (T {blocks, ...}) = Vector.foreach (blocks, Block.clear) end -structure ProfileInfo = - struct - datatype t = - T of {frameSources: int vector, - labels: {label: ProfileLabel.t, - sourceSeqsIndex: int} vector, - names: string vector, - sourceSeqs: int vector vector, - sources: {nameIndex: int, - successorsIndex: int} vector} - - val empty = T {frameSources = Vector.new0 (), - labels = Vector.new0 (), - names = Vector.new0 (), - sourceSeqs = Vector.new0 (), - sources = Vector.new0 ()} - - fun clear (T {labels, ...}) = - Vector.foreach (labels, ProfileLabel.clear o #label) - - fun layout (T {frameSources, labels, names, sourceSeqs, sources}) = - Layout.record - [("frameSources", Vector.layout Int.layout frameSources), - ("labels", - Vector.layout (fn {label, sourceSeqsIndex} => - Layout.record - [("label", ProfileLabel.layout label), - ("sourceSeqsIndex", - Int.layout sourceSeqsIndex)]) - labels), - ("names", Vector.layout String.layout names), - ("sourceSeqs", Vector.layout (Vector.layout Int.layout) sourceSeqs), - ("sources", - Vector.layout (fn {nameIndex, successorsIndex} => - Layout.record [("nameIndex", Int.layout nameIndex), - ("successorsIndex", - Int.layout successorsIndex)]) - sources)] - - fun layouts (pi, output) = output (layout pi) - - fun isOK (T {frameSources, labels, names, sourceSeqs, sources}): bool = - let - val namesLength = Vector.length names - val sourceSeqsLength = Vector.length sourceSeqs - val sourcesLength = Vector.length sources - in - !Control.profile = Control.ProfileNone - orelse - (Vector.forall (frameSources, fn i => - 0 <= i andalso i < sourceSeqsLength) - andalso (Vector.forall - (labels, fn {sourceSeqsIndex = i, ...} => - 0 <= i andalso i < sourceSeqsLength)) - andalso (Vector.forall - (sourceSeqs, fn v => - Vector.forall - (v, fn i => 0 <= i andalso i < sourcesLength))) - andalso (Vector.forall - (sources, fn {nameIndex, successorsIndex} => - 0 <= nameIndex - andalso nameIndex < namesLength - andalso 0 <= successorsIndex - andalso successorsIndex < sourceSeqsLength))) - end - - fun modify (T {frameSources, labels, names, sourceSeqs, sources}) - : {newProfileLabel: ProfileLabel.t -> ProfileLabel.t, - delProfileLabel: ProfileLabel.t -> unit, - getProfileInfo: unit -> t} = - let - val {get: ProfileLabel.t -> int, set, ...} = - Property.getSet - (ProfileLabel.plist, - Property.initRaise ("ProfileInfo.extend", ProfileLabel.layout)) - val _ = - Vector.foreach - (labels, fn {label, sourceSeqsIndex} => - set (label, sourceSeqsIndex)) - val new = ref [] - fun newProfileLabel l = - let - val i = get l - val l' = ProfileLabel.new () - val _ = set (l', i) - val _ = List.push (new, {label = l', sourceSeqsIndex = i}) - in - l' - end - fun delProfileLabel l = set (l, ~1) - fun getProfileInfo () = - let - val labels = Vector.concat - [labels, Vector.fromList (!new)] - val labels = Vector.keepAll - (labels, fn {label, ...} => - get label <> ~1) - val pi = T {frameSources = frameSources, - labels = Vector.concat - [labels, Vector.fromList (!new)], - names = names, - sourceSeqs = sourceSeqs, - sources = sources} - in - Assert.assert ("Machine.getProfileInfo", fn () => isOK pi); - pi - end - in - {newProfileLabel = newProfileLabel, - delProfileLabel = delProfileLabel, - getProfileInfo = getProfileInfo} - end - end - structure Program = struct datatype t = T of {chunks: Chunk.t list, - frameLayouts: {frameOffsetsIndex: int, - isC: bool, - size: Bytes.t} vector, - frameOffsets: Bytes.t vector vector, + frameInfos: FrameInfo.t vector, + frameOffsets: FrameOffsets.t vector, + globals: {objptrs: (StaticHeap.Ref.t * Global.t) list, + reals: (RealX.t * Global.t) list}, handlesSignals: bool, - intInfs: (Global.t * IntInf.t) list, main: {chunkLabel: ChunkLabel.t, label: Label.t}, maxFrameSize: Bytes.t, objectTypes: ObjectType.t vector, - profileInfo: ProfileInfo.t option, - reals: (Global.t * RealX.t) list, - vectors: (Global.t * WordXVector.t) list} + sourceMaps: SourceMaps.t option, + staticHeaps: StaticHeap.Kind.t -> StaticHeap.Object.t vector} - fun clear (T {chunks, profileInfo, ...}) = + fun clear (T {chunks, sourceMaps, ...}) = (List.foreach (chunks, Chunk.clear) - ; Option.app (profileInfo, ProfileInfo.clear)) + ; Option.app (sourceMaps, SourceMaps.clear)) - fun frameSize (T {frameLayouts, ...}, - FrameInfo.T {frameLayoutsIndex, ...}) = - #size (Vector.sub (frameLayouts, frameLayoutsIndex)) - - fun layouts (T {chunks, frameLayouts, frameOffsets, handlesSignals, + fun layouts (T {chunks, frameInfos, frameOffsets, handlesSignals, main = {label, ...}, - maxFrameSize, objectTypes, profileInfo, ...}, + maxFrameSize, objectTypes, sourceMaps, staticHeaps, ...}, output': Layout.t -> unit) = let open Layout @@ -822,26 +934,83 @@ [("handlesSignals", Bool.layout handlesSignals), ("main", Label.layout label), ("maxFrameSize", Bytes.layout maxFrameSize), - ("frameOffsets", - Vector.layout (Vector.layout Bytes.layout) frameOffsets), - ("frameLayouts", - Vector.layout (fn {frameOffsetsIndex, isC, size} => - record [("frameOffsetsIndex", - Int.layout frameOffsetsIndex), - ("isC", Bool.layout isC), - ("size", Bytes.layout size)]) - frameLayouts)]) - ; Option.app (profileInfo, fn pi => - (output (str "\nProfileInfo:") - ; ProfileInfo.layouts (pi, output))) + ("frameOffsets", Vector.layout FrameOffsets.layout frameOffsets), + ("frameInfos", Vector.layout FrameInfo.layout frameInfos)]) + ; Option.app (sourceMaps, fn pi => + (output (str "\nSourceMaps:") + ; SourceMaps.layouts (pi, output))) ; output (str "\nObjectTypes:") ; Vector.foreachi (objectTypes, fn (i, ty) => output (seq [str "opt_", Int.layout i, str " = ", ObjectType.layout ty])) ; output (str "\n") + ; List.foreach (StaticHeap.Kind.all, fn k => + (output (seq [Label.layout (StaticHeap.Kind.label k), str ":"]) + ; output (Vector.layout StaticHeap.Object.layout (staticHeaps k)))) + ; output (str "\n") ; List.foreach (chunks, fn chunk => Chunk.layouts (chunk, output)) end + val toFile = {display = Control.Layouts layouts, style = Control.ML, suffix = "machine"} + + fun layoutStats (program as T {chunks, objectTypes, ...}) = + let + val numChunks = ref 0 + val numBlocks = ref 0 + val numStatements = ref 0 + val _ = + List.foreach + (chunks, fn Chunk.T {blocks, ...} => + (Int.inc numChunks + ; Vector.foreach + (blocks, fn Block.T {statements, ...} => + (Int.inc numBlocks + ; numStatements := !numStatements + Vector.length statements)))) + val numObjectTypes = Vector.length objectTypes + open Layout + in + align + [seq [Control.sizeMessage ("machine program", program)], + seq [str "num chunks in program = ", Int.layout (!numChunks)], + seq [str "num blocks in program = ", Int.layout (!numBlocks)], + seq [str "num statements in program = ", Int.layout (!numStatements)], + seq [str "num object types in program = ", Int.layout (numObjectTypes)]] + end + + fun shuffle (T {chunks, frameInfos, frameOffsets, globals, + handlesSignals, main, maxFrameSize, + objectTypes, sourceMaps, staticHeaps}) = + let + fun shuffle v = + let + val a = Array.fromVector v + val () = Array.shuffle a + in + Array.toVector a + end + val chunks = Vector.fromList chunks + val chunks = shuffle chunks + val chunks = + Vector.map + (chunks, fn Chunk.T {blocks, chunkLabel, tempsMax} => + Chunk.T + {blocks = shuffle blocks, + chunkLabel = chunkLabel, + tempsMax = tempsMax}) + val chunks = Vector.toList chunks + in + T {chunks = chunks, + frameInfos = frameInfos, + frameOffsets = frameOffsets, + globals = globals, + handlesSignals = handlesSignals, + main = main, + maxFrameSize = maxFrameSize, + objectTypes = objectTypes, + sourceMaps = sourceMaps, + staticHeaps = staticHeaps} + end + structure Alloc = struct datatype t = T of Live.t list @@ -877,10 +1046,31 @@ end fun typeCheck (program as - T {chunks, frameLayouts, frameOffsets, intInfs, - maxFrameSize, objectTypes, profileInfo, reals, - vectors, ...}) = + T {chunks, frameInfos, frameOffsets, globals = {objptrs, reals, ...}, + maxFrameSize, objectTypes, sourceMaps, staticHeaps, ...}) = let + val (checkProfileLabel, finishCheckProfileLabel) = + Err.check' + ("sourceMaps", + fn () => + (case (!Control.profile, sourceMaps) of + (Control.ProfileNone, NONE) => SOME (fn _ => false, fn () => ()) + | (_, NONE) => NONE + | (Control.ProfileNone, SOME _) => NONE + | (_, SOME sourceMaps) => + let + val (checkProfileLabel, finishCheckProfileLabel) = + SourceMaps.checkProfileLabel sourceMaps + in + if SourceMaps.check sourceMaps + then SOME (checkProfileLabel, + fn () => Err.check + ("sourceMaps (finishCheckProfileLabel)", + finishCheckProfileLabel, + fn () => SourceMaps.layout sourceMaps)) + else NONE + end), + fn () => Option.layout SourceMaps.layout sourceMaps) val _ = if !Control.profile = Control.ProfileTimeLabel then @@ -889,72 +1079,65 @@ Vector.foreach (blocks, fn Block.T {kind, label, statements, ...} => if (case kind of - Kind.Func => true + Kind.Func _ => true | _ => false) orelse (0 < Vector.length statements - andalso (case Vector.sub (statements, 0) of + andalso (case Vector.first statements of Statement.ProfileLabel _ => true | _ => false)) then () else print (concat ["missing profile info: ", Label.toString label, "\n"]))) else () - val profileLabelIsOk = - case profileInfo of - NONE => - if !Control.profile = Control.ProfileNone - then fn _ => false - else Error.bug - "Machine.Program.typeCheck.profileLabelIsOk: profileInfo = NONE" - | SOME (ProfileInfo.T {frameSources, - labels = profileLabels, ...}) => - if !Control.profile = Control.ProfileNone - orelse (Vector.length frameSources - <> Vector.length frameLayouts) - then Error.bug - "Machine.Program.typeCheck.profileLabelIsOk: profileInfo = SOME" - else - let - val {get = profileLabelCount, ...} = - Property.get - (ProfileLabel.plist, - Property.initFun (fn _ => ref 0)) - val _ = - Vector.foreach - (profileLabels, fn {label, ...} => - let - val r = profileLabelCount label - in - if 0 = !r - then r := 1 - else Error.bug - "Machine.Program.typeCheck.profileLabelIsOk: duplicate profile label" - end) - in - fn l => - let - val r = profileLabelCount l - in - if 1 = !r - then (r := 2; true) - else false - end - end - fun getFrameInfo (FrameInfo.T {frameLayoutsIndex, ...}) = - Vector.sub (frameLayouts, frameLayoutsIndex) val _ = - Vector.foreach - (frameLayouts, fn {frameOffsetsIndex, size, ...} => - Err.check - ("frameLayouts", - fn () => (0 <= frameOffsetsIndex - andalso frameOffsetsIndex < Vector.length frameOffsets - andalso Bytes.<= (size, maxFrameSize) - andalso Bytes.<= (size, Runtime.maxFrameSize) - andalso Bytes.isWord32Aligned size), - fn () => Layout.record [("frameOffsetsIndex", - Int.layout frameOffsetsIndex), - ("size", Bytes.layout size)])) + Vector.foreachi + (frameOffsets, fn (i, fo) => + let + val index = FrameOffsets.index fo + val offsets = FrameOffsets.offsets fo + in + Err.check ("frameOffsets", + fn () => (Int.equals (i, index) + andalso Vector.forall + (offsets, fn offset => + Bytes.< (offset, maxFrameSize))), + fn () => FrameOffsets.layout fo) + end) + fun checkFrameOffsets fo = + let + val index = FrameOffsets.index fo + in + FrameOffsets.equals (Vector.sub (frameOffsets, index), fo) + handle Subscript => false + end + val _ = + Vector.foreachi + (frameInfos, fn (i, fi) => + let + val index = FrameInfo.index fi + val frameOffsets = FrameInfo.frameOffsets fi + val size = FrameInfo.size fi + in + Err.check + ("frameInfos", + fn () => (Int.equals (i, index) + andalso checkFrameOffsets frameOffsets + andalso Bytes.<= (size, maxFrameSize) + andalso Bytes.<= (size, Runtime.maxFrameSize) + andalso (Bytes.isAligned + (size, + {alignment = (case !Control.align of + Control.Align4 => Bytes.inWord32 + | Control.Align8 => Bytes.inWord64)}))), + fn () => FrameInfo.layout fi) + end) + fun checkFrameInfo fi = + let + val index = FrameInfo.index fi + in + FrameInfo.equals (Vector.sub (frameInfos, index), fi) + handle Subscript => false + end val _ = Vector.foreach (objectTypes, fn ty => @@ -964,30 +1147,43 @@ fun tyconTy (opt: ObjptrTycon.t): ObjectType.t = Vector.sub (objectTypes, ObjptrTycon.index opt) open Layout - fun globals (name, gs, isOk, layout) = - List.foreach - (gs, fn (g, s) => - let - val ty = Global.ty g - in - Err.check - (concat ["global ", name], - fn () => isOk (ty, s), - fn () => seq [layout s, str ": ", Type.layout ty]) - end) - val _ = - globals ("real", reals, - fn (t, r) => Type.equals (t, Type.real (RealX.size r)), - RealX.layout) + + val staticHeaps = + let + open StaticHeap + in + Kind.memoize + (fn k => + (#1 o Vector.mapAndFold) + (staticHeaps k, Bytes.zero, fn (obj, next) => + ((Bytes.+ (next, Object.metaDataSize obj), obj), + Bytes.+ (next, Object.size (obj, {tyconTy = tyconTy}))))) + end + + fun checkGlobal (name, global, isOk, layoutVal) = + let + val ty = Global.ty global + open Layout + in + Err.check + (name, + fn () => isOk ty, + fn () => seq [layoutVal (), str ": ", Type.layout ty]) + end val _ = - globals ("intInf", intInfs, - fn (t, _) => Type.isSubtype (t, Type.intInf ()), - IntInf.layout) + List.foreach + (objptrs, fn (r, g) => + checkGlobal + ("global objptr", g, + fn t => Type.equals (t, StaticHeap.Ref.ty r), + fn () => StaticHeap.Ref.layout r)) val _ = - globals ("vector", vectors, - fn (t, v) => - Type.equals (t, Type.ofWordXVector v), - WordXVector.layout) + List.foreach + (reals, fn (r, g) => + checkGlobal + ("global real", g, + fn t => Type.equals (t, Type.real (RealX.size r)), + fn () => RealX.layout (r, {suffix=true}))) (* Check for no duplicate labels. *) local val {get, ...} = @@ -1017,31 +1213,25 @@ Vector.foreach (blocks, fn b as Block.T {label, ...} => setLabelBlock (label, b))) + fun checkStaticHeapRef (StaticHeap.Ref.T {index, kind, offset, ty}) = + let + val (dataOffset, obj) = Vector.sub (staticHeaps kind, index) + in + Bytes.equals (dataOffset, offset) + andalso Type.equals (StaticHeap.Object.ty obj, ty) + end fun checkOperand (x: Operand.t, alloc: Alloc.t): unit = let datatype z = datatype Operand.t fun ok () = case x of - ArrayOffset {base, index, offset, scale, ty} => - (checkOperand (base, alloc) - ; checkOperand (index, alloc) - ; (Operand.isLocation base - andalso - (Type.arrayOffsetIsOk {base = Operand.ty base, - index = Operand.ty index, - offset = offset, - tyconTy = tyconTy, - result = ty, - scale = scale}))) - | Cast (z, t) => + Cast (z, t) => (checkOperand (z, alloc) ; (Type.castIsOk {from = Operand.ty z, to = t, tyconTy = tyconTy})) - | Contents {oper, ...} => - (checkOperand (oper, alloc) - ; Type.isCPointer (Operand.ty oper)) + | Const _ => true | Frontier => true | GCState => true | Global _ => @@ -1054,23 +1244,22 @@ (let val _ = labelBlock l in true end handle _ => false) - | Null => true | Offset {base, offset, ty} => (checkOperand (base, alloc) - ; (Operand.isLocation base - andalso - (case base of - Operand.GCState => true - | _ => - Type.offsetIsOk {base = Operand.ty base, - offset = offset, - tyconTy = tyconTy, - result = ty}))) - | Real _ => true - | Register r => Alloc.doesDefine (alloc, Live.Register r) + ; (Type.offsetIsOk + {base = Operand.ty base, + (* MachineIR doesn't distinguish + * initialization of object field + * from update of object field; + * only the latter requires + * the field to be mutable. + *) + mustBeMutable = false, + offset = offset, + tyconTy = tyconTy, + result = ty})) | StackOffset (so as StackOffset.T {offset, ty, ...}) => - Bytes.<= (Bytes.+ (offset, Type.bytes ty), - maxFrameSize) + Bytes.<= (Bytes.+ (offset, Type.bytes ty), maxFrameSize) andalso Alloc.doesDefine (alloc, Live.StackOffset so) andalso (case Type.deLabel ty of NONE => true @@ -1080,8 +1269,7 @@ labelBlock l fun doit fi = let - val {size, ...} = - getFrameInfo fi + val size = FrameInfo.size fi in Bytes.equals (size, @@ -1096,13 +1284,32 @@ (case frameInfo of NONE => true | SOME fi => doit fi) - | Kind.Func => true + | Kind.Func {frameInfo, ...} => + doit frameInfo | Kind.Handler {frameInfo, ...} => doit frameInfo | Kind.Jump => true end) + | SequenceOffset {base, index, offset, scale, ty} => + (checkOperand (base, alloc) + ; checkOperand (index, alloc) + ; (Type.sequenceOffsetIsOk + {base = Operand.ty base, + index = Operand.ty index, + (* MachineIR doesn't distinguish + * initialization of object field + * from update of object field; + * only the latter requires + * the field to be mutable. + *) + mustBeMutable = false, + offset = offset, + tyconTy = tyconTy, + result = ty, + scale = scale})) + | StaticHeapRef r => checkStaticHeapRef r | StackTop => true - | Word _ => true + | Temporary t => Alloc.doesDefine (alloc, Live.Temporary t) in Err.check ("operand", ok, fn () => Operand.layout x) end @@ -1115,43 +1322,37 @@ let datatype z = datatype Kind.t exception No - fun frame (FrameInfo.T {frameLayoutsIndex}, + fun frame (frameInfo, useSlots: bool, - isC: bool): bool = - let - val {frameOffsetsIndex, isC = isC', ...} = - Vector.sub (frameLayouts, frameLayoutsIndex) - handle Subscript => raise No - in - isC = isC' - andalso - (not useSlots - orelse - let - val Alloc.T zs = alloc - val liveOffsets = - List.fold - (zs, [], fn (z, liveOffsets) => - case z of - Live.StackOffset (StackOffset.T {offset, ty}) => - if Type.isObjptr ty - then offset :: liveOffsets + kind: FrameInfo.Kind.t): bool = + checkFrameInfo frameInfo + andalso + FrameInfo.Kind.equals (kind, FrameInfo.kind frameInfo) + andalso + (not useSlots + orelse + let + val Alloc.T zs = alloc + val liveOffsets = + List.fold + (zs, [], fn (z, liveOffsets) => + case z of + Live.StackOffset (StackOffset.T {offset, ty}) => + if Type.isObjptr ty + then offset :: liveOffsets else liveOffsets - | _ => raise No) - val liveOffsets = Array.fromList liveOffsets - val () = QuickSort.sortArray (liveOffsets, Bytes.<=) - val liveOffsets = Vector.fromArray liveOffsets - val liveOffsets' = - Vector.sub (frameOffsets, frameOffsetsIndex) - handle Subscript => raise No - in - Vector.equals (liveOffsets, liveOffsets', - Bytes.equals) - end) - end handle No => false + | _ => raise No) + val liveOffsets = Array.fromList liveOffsets + val () = QuickSort.sortArray (liveOffsets, Bytes.<=) + val liveOffsets = Vector.fromArray liveOffsets + in + Vector.equals + (liveOffsets, FrameInfo.offsets frameInfo, + Bytes.equals) + end) handle No => false fun slotsAreInFrame (fi: FrameInfo.t): bool = let - val {size, ...} = getFrameInfo fi + val size = FrameInfo.size fi in Alloc.forall (alloc, fn z => @@ -1163,7 +1364,7 @@ in case k of Cont {args, frameInfo} => - if frame (frameInfo, true, false) + if frame (frameInfo, true, FrameInfo.Kind.ML_FRAME) andalso slotsAreInFrame frameInfo then SOME (Vector.fold (args, alloc, fn (z, alloc) => @@ -1182,13 +1383,13 @@ then (case frameInfo of NONE => false | SOME fi => - (frame (fi, true, true) + (frame (fi, true, FrameInfo.Kind.C_FRAME) andalso slotsAreInFrame fi)) else if !Control.profile = Control.ProfileNone then true else (case frameInfo of NONE => false - | SOME fi => frame (fi, false, true))) + | SOME fi => frame (fi, false, FrameInfo.Kind.C_FRAME))) in if ok then SOME (case dst of @@ -1196,11 +1397,16 @@ | SOME z => Alloc.defineLive (alloc, z)) else NONE end - | Func => SOME alloc - | Handler {frameInfo, ...} => - if frame (frameInfo, false, false) + | Func {frameInfo, ...} => + if frame (frameInfo, false, FrameInfo.Kind.ML_FRAME) then SOME alloc else NONE + | Handler {args, frameInfo} => + if frame (frameInfo, false, FrameInfo.Kind.ML_FRAME) + then SOME (Vector.fold + (args, alloc, fn (z, alloc) => + Alloc.defineLive (alloc, z))) + else NONE | Jump => SOME alloc end fun checkStatement (s: Statement.t, alloc: Alloc.t) @@ -1216,11 +1422,10 @@ val _ = checkOperand (dst, alloc) in if Type.isSubtype (Operand.ty src, Operand.ty dst) - andalso Operand.isLocation dst + andalso Operand.isDestination dst then SOME alloc else NONE end - | Noop => SOME alloc | PrimApp {args, dst, prim, ...} => let val _ = checkOperands (args, alloc) @@ -1244,14 +1449,22 @@ then alloc else NONE end - | ProfileLabel l => - if profileLabelIsOk l + | ProfileLabel pl => + if checkProfileLabel pl then SOME alloc else NONE end fun liveIsOk (live: Live.t vector, a: Alloc.t): bool = Vector.forall (live, fn z => Alloc.doesDefine (a, z)) + val liveIsOk = + Trace.trace + ("Machine.Program.typeCheck.liveIsOk", + fn (live, a) => + Layout.tuple [Vector.layout Live.layout live, + Alloc.layout a], + Bool.layout) + liveIsOk fun liveSubset (live: Live.t vector, live': Live.t vector): bool = Vector.forall @@ -1270,22 +1483,31 @@ | (SOME gs, SOME gs') => Vector.equals (gs', gs, Live.isSubtype) | _ => false) - andalso - (case (returns, returns') of - (_, NONE) => true - | (SOME os, SOME os') => - Vector.equals (os', os, Live.isSubtype) - | _ => false) + andalso + (case (returns, returns') of + (_, NONE) => true + | (SOME os, SOME os') => + Vector.equals (os', os, Live.isSubtype) + | _ => false) + val goto = + Trace.trace + ("Machine.Program.typeCheck.goto", + fn (b, raises, returns, a) => + Layout.tuple [Block.layoutHeader b, + Option.layout (Vector.layout Live.layout) raises, + Option.layout (Vector.layout Live.layout) returns, + Alloc.layout a], + Bool.layout) + goto fun checkCont (cont: Label.t, size: Bytes.t, alloc: Alloc.t) = let val Block.T {kind, live, ...} = labelBlock cont in - if Vector.forall (live, fn z => Alloc.doesDefine (alloc, z)) + if liveIsOk (live, alloc) then (case kind of Kind.Cont {args, frameInfo, ...} => - (if Bytes.equals (size, - #size (getFrameInfo frameInfo)) + (if Bytes.equals (FrameInfo.size frameInfo, size) then SOME (live, @@ -1297,9 +1519,9 @@ Live.StackOffset (StackOffset.shift (s, size)) | _ => z))) - else NONE) + else NONE) | _ => NONE) - else NONE + else NONE end fun callIsOk {alloc: Alloc.t, dst: Label.t, @@ -1326,16 +1548,18 @@ NONE => SOME raises | SOME h => let - val Block.T {kind, live, ...} = + val Block.T {kind, live = handlerLive, ...} = labelBlock h in - if liveSubset (live, contLive) + if liveSubset (handlerLive, contLive) then (case kind of - Kind.Handler {handles, ...} => - SOME (SOME handles) - | _ => NONE) - else NONE + Kind.Handler {frameInfo, ...} => + if Bytes.< (FrameInfo.size frameInfo, size) + then SOME (SOME (Vector.new0 ())) + else NONE + | _ => NONE) + else NONE end val raises = Err.check' @@ -1369,34 +1593,19 @@ returns: Live.t vector option, alloc: Alloc.t): bool = let - fun jump (l: Label.t, a: Alloc.t) = + fun jump (l: Label.t) = let val b as Block.T {kind, ...} = labelBlock l in (case kind of Kind.Jump => true | _ => false) - andalso goto (b, raises, returns, a) + andalso goto (b, raises, returns, alloc) end datatype z = datatype Transfer.t in case t of - Arith {args, dst, overflow, prim, success, ...} => - let - val _ = checkOperands (args, alloc) - val alloc = Alloc.define (alloc, dst) - val _ = checkOperand (dst, alloc) - in - Prim.mayOverflow prim - andalso jump (overflow, alloc) - andalso jump (success, alloc) - andalso - Type.checkPrimApp - {args = Vector.map (args, Operand.ty), - prim = prim, - result = SOME (Operand.ty dst)} - end - | CCall {args, frameInfo = fi, func, return} => + CCall {args, func, return} => let val _ = checkOperands (args, alloc) in @@ -1408,24 +1617,24 @@ andalso case return of NONE => true - | SOME l => + | SOME {return, size} => let - val Block.T {live, ...} = labelBlock l + val Block.T {live, ...} = labelBlock return in liveIsOk (live, alloc) andalso - case labelKind l of + case labelKind return of Kind.CReturn - {frameInfo = fi', func = f, ...} => + {frameInfo = fi, func = f, ...} => CFunction.equals (func, f) andalso (Option.equals - (fi, fi', FrameInfo.equals)) + (size, Option.map (fi, FrameInfo.size), + Bytes.equals)) | _ => false end end | Call {label, live, return} => - Vector.forall - (live, fn z => Alloc.doesDefine (alloc, z)) + liveIsOk (live, alloc) andalso callIsOk {alloc = alloc, dst = label, @@ -1433,29 +1642,28 @@ raises = raises, return = return, returns = returns} - | Goto l => jump (l, alloc) - | Raise => - (case raises of - NONE => false - | SOME zs => - Vector.forall - (zs, fn z => Alloc.doesDefine (alloc, z))) - | Return => - (case returns of - NONE => false - | SOME zs => - Vector.forall - (zs, fn z => Alloc.doesDefine (alloc, z))) - | Switch s => - Switch.isOk - (s, {checkUse = fn z => checkOperand (z, alloc), - labelIsOk = fn l => jump (l, alloc)}) + | Goto l => jump l + | Raise _ => + (case raises of + NONE => false + | SOME live => liveIsOk (live, alloc)) + | Return _ => + (case returns of + NONE => false + | SOME live => liveIsOk (live, alloc)) + | Switch s => + Switch.isOk + (s, {checkUse = fn z => checkOperand (z, alloc), + labelIsOk = jump}) end val transferOk = Trace.trace ("Machine.Program.typeCheck.transferOk", - fn (t, _, _, a) => - Layout.tuple [Transfer.layout t, Alloc.layout a], + fn (t, raises, returns, a) => + Layout.tuple [Transfer.layout t, + Option.layout (Vector.layout Live.layout) raises, + Option.layout (Vector.layout Live.layout) returns, + Alloc.layout a], Bool.layout) transferOk fun blockOk (Block.T {kind, live, raises, returns, statements, @@ -1499,6 +1707,37 @@ in true end + fun checkStaticHeapElem (e: StaticHeap.Elem.t): unit = + let + datatype z = datatype StaticHeap.Elem.t + fun ok () = + case e of + Cast (z, t) => + (checkStaticHeapElem z + ; Type.castIsOk + {from = StaticHeap.Elem.ty e, + to = t, + tyconTy = tyconTy}) + | Const _ => true + | Ref r => checkStaticHeapRef r + in + Err.check ("elem", ok, fn () => StaticHeap.Elem.layout e) + end + val _ = + List.foreach + (StaticHeap.Kind.all, fn kind => + Err.check + ("staticHeap", + fn () => + (Vector.foreach + (staticHeaps kind, fn (_, obj) => + Err.check + ("object", + fn () => StaticHeap.Object.isOk (obj, {checkUse = checkStaticHeapElem, + tyconTy = tyconTy}), + fn () => StaticHeap.Object.layout obj)) + ; true), + fn () => Label.layout (StaticHeap.Kind.label kind))) val _ = List.foreach (chunks, @@ -1509,6 +1748,7 @@ (blocks, fn b => check' (b, "block", blockOk, Block.layout)) end) + val _ = finishCheckProfileLabel () val _ = clear program in () @@ -1523,4 +1763,23 @@ Label.clearPrintName label)) end +fun simplify p = + let + val machinePasses = + {name = "machineShuffle", doit = Program.shuffle, execute = false} :: + nil + (* Machine type check is too slow to run by default. *) + (* val () = Control.trace (Control.Pass, "machineTypeCheck") Program.typeCheck p *) + val p = + Control.simplifyPasses + {arg = p, + passes = machinePasses, + stats = Program.layoutStats, + toFile = Program.toFile, + typeCheck = Program.typeCheck} + (* val () = Control.trace (Control.Pass, "machineTypeCheck") Program.typeCheck p *) + in + p + end + end diff -Nru mlton-20130715/mlton/backend/machine.sig mlton-20210117+dfsg/mlton/backend/machine.sig --- mlton-20130715/mlton/backend/machine.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/machine.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,59 +1,31 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2014,2019-2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature MACHINE_STRUCTS = sig - include ATOMS + include BACKEND_ATOMS end signature MACHINE = sig include MACHINE_STRUCTS - structure ObjectType: OBJECT_TYPE - structure ObjptrTycon: OBJPTR_TYCON - structure Runtime: RUNTIME - structure Switch: SWITCH - structure Type: REP_TYPE - - sharing Atoms = Type - sharing Atoms = Switch - sharing ObjectType = Type.ObjectType - sharing ObjptrTycon = ObjectType.ObjptrTycon = Type.ObjptrTycon - sharing Runtime = ObjectType.Runtime = Type.Runtime - structure ChunkLabel: ID - structure Register: - sig - type t - - val equals: t * t -> bool - val index: t -> int - val indexOpt: t -> int option - val layout: t -> Layout.t - val new: Type.t * int option -> t - val setIndex: t * int -> unit - val toString: t -> string - val ty: t -> Type.t - end - structure Global: sig type t val equals: t * t -> bool val index: t -> int - val isRoot: t -> bool val layout: t -> Layout.t - val new: {isRoot: bool, ty: Type.t} -> t - val numberOfNonRoot: unit -> int + val new: Type.t -> t val numberOfType: CType.t -> int val ty: t -> Type.t end @@ -66,50 +38,104 @@ val ty: t -> Type.t end - structure Scale: SCALE - sharing Scale = Type.Scale + structure StaticHeap: + sig + structure Kind: + sig + datatype t = Dynamic | Immutable | Mutable | Root + + val all: t list + val isDynamic: t -> bool + val label: t -> Label.t + val layout: t -> Layout.t + val memoize: (t -> 'a) -> t -> 'a + val name: t -> string + end + + structure Ref: + sig + datatype t = T of {index: int, + kind: Kind.t, + offset: Bytes.t, + ty: Type.t} + + val index: t -> int + val kind: t -> Kind.t + val layout: t -> Layout.t + val offset: t -> Bytes.t + val ty: t -> Type.t + end + + structure Elem: + sig + datatype t = + Cast of t * Type.t + | Const of Const.t + | Ref of Ref.t + + val layout: t -> Layout.t + val ty: t -> Type.t + end + + structure Object: OBJECT + (* sharing Object = BackendAtoms *) + sharing Object.Use = Elem + end + sharing StaticHeap.Object = BackendAtoms + + structure Temporary: + sig + type t + + val equals: t * t -> bool + val index: t -> int + val indexOpt: t -> int option + val layout: t -> Layout.t + val new: Type.t * int option -> t + val setIndex: t * int -> unit + val toString: t -> string + val ty: t -> Type.t + end structure Operand: sig datatype t = - ArrayOffset of {base: t, - index: t, - offset: Bytes.t, - scale: Scale.t, - ty: Type.t} - | Cast of t * Type.t - | Contents of {oper: t, - ty: Type.t} + Cast of t * Type.t + | Const of Const.t | Frontier | GCState | Global of Global.t | Label of Label.t - | Null | Offset of {base: t, offset: Bytes.t, ty: Type.t} - | Real of RealX.t - | Register of Register.t + | SequenceOffset of {base: t, + index: t, + offset: Bytes.t, + scale: Scale.t, + ty: Type.t} | StackOffset of StackOffset.t | StackTop - | Word of WordX.t + | StaticHeapRef of StaticHeap.Ref.t + | Temporary of Temporary.t val equals: t * t -> bool val interfere: t * t -> bool - val isLocation: t -> bool + val isDestination: t -> bool val layout: t -> Layout.t val stackOffset: {offset: Bytes.t, ty: Type.t} -> t + val gcField: Runtime.GCField.t -> t val toString: t -> string val ty: t -> Type.t + val word: WordX.t -> t end - sharing Operand = Switch.Use structure Live: sig datatype t = Global of Global.t - | Register of Register.t | StackOffset of StackOffset.t + | Temporary of Temporary.t val equals: t * t -> bool val fromOperand: Operand.t -> t option @@ -121,13 +147,12 @@ structure Statement: sig datatype t = - (* When registers or offsets appear in operands, there is an + (* When temporaries or offsets appear in operands, there is an * implicit contents of. * When they appear as locations, there is not. *) Move of {dst: Operand.t, src: Operand.t} - | Noop | PrimApp of {args: Operand.t vector, dst: Operand.t option, prim: Type.t Prim.t} @@ -135,54 +160,77 @@ val foldOperands: t * 'a * (Operand.t * 'a -> 'a) -> 'a val layout: t -> Layout.t - val move: {dst: Operand.t, src: Operand.t} -> t - (* Error if dsts and srcs aren't of same length. *) - val moves: {dsts: Operand.t vector, - srcs: Operand.t vector} -> t vector - val object: {dst: Operand.t, header: word, size: Bytes.t} -> t vector + val move: {dst: Operand.t, src: Operand.t} -> t option + val object: {dst: Operand.t, header: WordX.t, size: Bytes.t} -> t vector + val sequence: {dst: Operand.t, header: WordX.t, length: int, size: Bytes.t} -> t vector end - structure FrameInfo: - sig - datatype t = T of {frameLayoutsIndex: int} - - val equals: t * t -> bool - val layout: t -> Layout.t - end + structure Switch: SWITCH + sharing Switch = Atoms + sharing Switch.Use = Operand structure Transfer: sig datatype t = - (* In an arith transfer, dst is modified whether or not the - * prim succeeds. - *) - Arith of {args: Operand.t vector, - dst: Operand.t, - overflow: Label.t, - prim: Type.t Prim.t, - success: Label.t} - | CCall of {args: Operand.t vector, - frameInfo: FrameInfo.t option, + CCall of {args: Operand.t vector, func: Type.t CFunction.t, - (* return is NONE iff the func doesn't return. - * Else, return must be SOME l, where l is of CReturn - * kind with a matching func. - *) - return: Label.t option} - | Call of {label: Label.t, (* label must be a Func *) + return: {return: Label.t (* must be CReturn *), + size: Bytes.t option} option} + | Call of {label: Label.t, (* must be kind Func *) live: Live.t vector, - return: {return: Label.t, - handler: Label.t option, + return: {return: Label.t (* must be kind Cont *), + handler: Label.t option (* must be kind Handler*), size: Bytes.t} option} - | Goto of Label.t (* label must be a Jump *) - | Raise - | Return + | Goto of Label.t (* must be kind Jump *) + | Raise of {raisesTo: Label.t list} + | Return of {returnsTo: Label.t list} | Switch of Switch.t val foldOperands: t * 'a * (Operand.t * 'a -> 'a) -> 'a val layout: t -> Layout.t end + structure FrameOffsets: + sig + type t + + val equals: t * t -> bool + val hash: t -> word + val index: t -> int + val layout: t -> Layout.t + val new: {index: int, offsets: Bytes.t vector} -> t + val offsets: t -> Bytes.t vector + end + + structure FrameInfo: + sig + structure Kind: + sig + datatype t = C_FRAME | ML_FRAME + val equals: t * t -> bool + val hash: t -> word + val layout: t -> Layout.t + val toString: t -> string + end + + type t + + val equals: t * t -> bool + val frameOffsets: t -> FrameOffsets.t + val index: t -> int + val kind: t -> Kind.t + val layout: t -> Layout.t + val new: {frameOffsets: FrameOffsets.t, + index: int, + kind: Kind.t, + size: Bytes.t, + sourceSeqIndex: int option} -> t + val offsets: t -> Bytes.t vector + val setIndex: t * int -> unit + val size: t -> Bytes.t + val sourceSeqIndex: t -> int option + end + structure Kind: sig datatype t = @@ -191,11 +239,12 @@ | CReturn of {dst: Live.t option, frameInfo: FrameInfo.t option, func: Type.t CFunction.t} - | Func - | Handler of {frameInfo: FrameInfo.t, - handles: Live.t vector} + | Func of {frameInfo: FrameInfo.t} + | Handler of {args: Live.t vector, + frameInfo: FrameInfo.t} | Jump + val isEntry: t -> bool val frameInfoOpt: t -> FrameInfo.t option end @@ -204,7 +253,7 @@ datatype t = T of {kind: Kind.t, label: Label.t, - (* Live registers and stack offsets at start of block. *) + (* Live temporaries and stack offsets at start of block. *) live: Live.t vector, raises: Live.t vector option, returns: Live.t vector option, @@ -220,61 +269,37 @@ datatype t = T of {blocks: Block.t vector, chunkLabel: ChunkLabel.t, - (* Register.index r - * <= regMax (Type.toCType (Register.ty r)) - * for all registers in the chunk. + (* Temporary.index r + * <= tempsMax (Type.toCType (Temporary.ty r)) + * for all temporaries in the chunk. *) - regMax: CType.t -> int} + tempsMax: CType.t -> int} + val chunkLabel: t -> ChunkLabel.t end - structure ProfileInfo: - sig - datatype t = - T of {(* For each frame, gives the index into sourceSeqs of the - * source functions corresponding to the frame. - *) - frameSources: int vector, - labels: {label: ProfileLabel.t, - sourceSeqsIndex: int} vector, - names: string vector, - (* Each sourceSeq describes a sequence of source functions, - * each given as an index into the source vector. - *) - sourceSeqs: int vector vector, - sources: {nameIndex: int, - successorsIndex: int} vector} - - val empty: t - val modify: t -> {newProfileLabel: ProfileLabel.t -> ProfileLabel.t, - delProfileLabel: ProfileLabel.t -> unit, - getProfileInfo: unit -> t} - end structure Program: sig datatype t = T of {chunks: Chunk.t list, - frameLayouts: {frameOffsetsIndex: int, - isC: bool, - size: Bytes.t} vector, - (* Each vector in frame Offsets specifies the offsets - * of live pointers in a stack frame. A vector is referred - * to by index as the offsetsIndex in frameLayouts. - *) - frameOffsets: Bytes.t vector vector, + frameInfos: FrameInfo.t vector, + frameOffsets: FrameOffsets.t vector, + globals: {objptrs: (StaticHeap.Ref.t * Global.t) list, + reals: (RealX.t * Global.t) list}, handlesSignals: bool, - intInfs: (Global.t * IntInf.t) list, main: {chunkLabel: ChunkLabel.t, label: Label.t}, maxFrameSize: Bytes.t, objectTypes: Type.ObjectType.t vector, - profileInfo: ProfileInfo.t option, - reals: (Global.t * RealX.t) list, - vectors: (Global.t * WordXVector.t) list} + sourceMaps: SourceMaps.t option, + staticHeaps: StaticHeap.Kind.t -> StaticHeap.Object.t vector} - val frameSize: t * FrameInfo.t -> Bytes.t val clearLabelNames: t -> unit val layouts: t * (Layout.t -> unit) -> unit + val layoutStats: t -> Layout.t + val toFile: {display: t Control.display, style: Control.style, suffix: string} val typeCheck: t -> unit end + + val simplify: Program.t -> Program.t end diff -Nru mlton-20130715/mlton/backend/object.fun mlton-20210117+dfsg/mlton/backend/object.fun --- mlton-20130715/mlton/backend/object.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/object.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,202 @@ +(* Copyright (C) 2020 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor Object (S: OBJECT_STRUCTS): OBJECT = +struct + +open S + +datatype t = + Normal of {init: {offset: Bytes.t, + src: Use.t} vector, + tycon: ObjptrTycon.t} + | Sequence of {init: {offset: Bytes.t, + src: Use.t} vector vector, + tycon: ObjptrTycon.t} + +fun tycon obj = + case obj of + Normal {tycon, ...} => tycon + | Sequence {tycon, ...} => tycon + +val ty = Type.objptr o tycon + +fun metaDataSize obj = + case obj of + Normal _ => Runtime.normalMetaDataSize () + | Sequence _ => Runtime.sequenceMetaDataSize () + +fun size (obj, {tyconTy: ObjptrTycon.t -> ObjectType.t}) = + case obj of + Normal {tycon, ...} => + Bytes.+ (Runtime.normalMetaDataSize (), + ObjectType.componentsSize (tyconTy tycon)) + | Sequence {init, tycon} => + let + val size = + Bytes.+ (Runtime.sequenceMetaDataSize (), + Bytes.* (ObjectType.componentsSize (tyconTy tycon), + IntInf.fromInt (Vector.length init))) + in + case !Control.align of + Control.Align4 => Bytes.alignWord32 size + | Control.Align8 => Bytes.alignWord64 size + end + +fun fromWordXVector wv = + let + val ws = WordXVector.elementSize wv + val init = + WordXVector.toVectorMap + (wv, fn w => + Vector.new1 {offset = Bytes.zero, + src = Use.word w}) + in + Sequence + {init = init, + tycon = ObjptrTycon.wordVector ws} + end + +fun 'a foldUse (s, a: 'a, use: Use.t * 'a -> 'a): 'a = + let + fun useInit (init, a) = + Vector.fold (init, a, fn ({offset = _, src}, a) => + use (src, a)) + in + case s of + Normal {init, ...} => useInit (init, a) + | Sequence {init, ...} => Vector.fold (init, a, useInit) + end + +fun foreachUse (s, f) = foldUse (s, (), f o #1) + +fun replace (s:t, {use: Use.t -> Use.t}): t = + let + fun replaceInit init = + Vector.map (init, fn {offset, src} => + {offset = offset, + src = use src}) + in + case s of + Normal {init, tycon} => + Normal {init = replaceInit init, + tycon = tycon} + | Sequence {init, tycon} => + Sequence {init = Vector.map (init, replaceInit), + tycon = tycon} + end + +fun deString {init: {offset: Bytes.t, + src: Use.t} vector vector, + tycon: ObjptrTycon.t} = + if ObjptrTycon.equals (tycon, ObjptrTycon.wordVector WordSize.word8) + then Exn.withEscape + (fn escape => + SOME + (String.implodeV + (Vector.map + (init, fn init => + case Use.deWord (#src (Vector.first init)) of + SOME w => WordX.toChar w + | _ => escape NONE)))) + else NONE + +fun layout obj = + let + open Layout + val initLayout = + Vector.layout + (fn {offset, src} => + record [("offset", Bytes.layout offset), + ("src", Use.layout src)]) + in + case obj of + Normal {init, tycon} => + seq [str "NormalObject ", + record [("init", initLayout init), + ("tycon", ObjptrTycon.layout tycon)]] + | Sequence (arg as {init, tycon}) => + seq [str "SequenceObject ", + record [("init", (case deString arg of + NONE => Vector.layout initLayout init + | SOME s => seq [str String.dquote, + str (String.escapeSML s), + str String.dquote])), + ("tycon", ObjptrTycon.layout tycon)]] + end + +val toString = Layout.toString o layout + +fun isOk (obj: t, + {checkUse: Use.t -> unit, + tyconTy: ObjptrTycon.t -> ObjectType.t}): bool = + let + fun initOk (init, offsetIsOk) = + Exn.withEscape + (fn esc => + let + val _ = + Vector.fold + (init, Bytes.zero, fn ({offset, src}, next) => + if Bytes.>= (offset, next) + andalso + (checkUse src + ; offsetIsOk {offset = offset, + result = Use.ty src}) + then Bytes.+ (offset, Type.bytes (Use.ty src)) + else esc false) + in + true + end) + in + case obj of + Normal {init, tycon} => + let + val base = Type.objptr tycon + fun offsetIsOk {offset, result} = + Type.offsetIsOk + {base = base, + (* initialization of object field + * does not require the field to be mutable. + *) + mustBeMutable = false, + offset = offset, + tyconTy = tyconTy, + result = result} + in + initOk (init, offsetIsOk) + end + | Sequence {init, tycon} => + let + val base = Type.objptr tycon + val index = Type.seqIndex () + val scale = + case Scale.fromBytes (ObjectType.componentsSize (tyconTy tycon)) of + NONE => Scale.One + | SOME s => s + in + Vector.forall + (init, fn init => + let + fun offsetIsOk {offset, result} = + Type.sequenceOffsetIsOk + {base = base, + index = index, + (* initialization of object field + * does not require the field to be mutable. + *) + mustBeMutable = false, + offset = offset, + result = result, + scale = scale, + tyconTy = tyconTy} + in + initOk (init, offsetIsOk) + end) + end + end + +end diff -Nru mlton-20130715/mlton/backend/object.sig mlton-20210117+dfsg/mlton/backend/object.sig --- mlton-20130715/mlton/backend/object.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/object.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,59 @@ +(* Copyright (C) 2020 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature OBJECT_STRUCTS = + sig + structure ObjptrTycon: OBJPTR_TYCON + structure ObjectType: OBJECT_TYPE + structure Runtime: RUNTIME + structure Type: REP_TYPE + structure WordSize: WORD_SIZE + structure WordX: WORD_X + structure WordXVector: WORD_X_VECTOR + sharing ObjptrTycon = ObjectType.ObjptrTycon = Type.ObjptrTycon + sharing ObjectType = Type.ObjectType + sharing Runtime = ObjectType.Runtime = ObjptrTycon.Runtime = Type.Runtime + sharing WordSize = ObjptrTycon.WordSize = Type.WordSize = WordX.WordSize = WordXVector.WordSize + sharing WordX = ObjptrTycon.WordX = Type.WordX = WordXVector.WordX + sharing WordXVector = Type.WordXVector + + structure Use: sig + type t + + val deWord: t -> WordX.t option + val layout: t -> Layout.t + val ty: t -> Type.t + val word: WordX.t -> t + end + end + +signature OBJECT = + sig + include OBJECT_STRUCTS + + datatype t = + Normal of {init: {offset: Bytes.t, + src: Use.t} vector, + tycon: ObjptrTycon.t} + | Sequence of {init: {offset: Bytes.t, + src: Use.t} vector vector, + tycon: ObjptrTycon.t} + + val deString: {init: {offset: Bytes.t, + src: Use.t} vector vector, + tycon: ObjptrTycon.t} -> string option + val foldUse: t * 'a * (Use.t * 'a -> 'a) -> 'a + val foreachUse: t * (Use.t -> unit) -> unit + val fromWordXVector: WordXVector.t -> t + val isOk: t * {checkUse: Use.t -> unit, + tyconTy: ObjptrTycon.t -> ObjectType.t} -> bool + val layout: t -> Layout.t + val metaDataSize: t -> Bytes.t + val replace: t * {use: Use.t -> Use.t} -> t + val size: t * {tyconTy: ObjptrTycon.t -> ObjectType.t} -> Bytes.t + val toString: t -> string + val ty: t -> Type.t + end diff -Nru mlton-20130715/mlton/backend/object-type.sig mlton-20210117+dfsg/mlton/backend/object-type.sig --- mlton-20130715/mlton/backend/object-type.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/object-type.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,25 +1,31 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2020 Matthew Fluet + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature OBJECT_TYPE = sig + structure Prod: PROD structure ObjptrTycon: OBJPTR_TYCON structure Runtime: RUNTIME type ty datatype t = - Array of {elt: ty, - hasIdentity: bool} - | Normal of {hasIdentity: bool, - ty: ty} + Normal of {components: ty Prod.t, + hasIdentity: bool} + | Sequence of {components: ty Prod.t, + hasIdentity: bool} | Stack - | Weak of ty option (* in Weak (SOME t), must have Type.isPointer t *) + | Weak of ty option (* in Weak (SOME t), must have Type.isObjptr t *) val basic: unit -> (ObjptrTycon.t * t) vector + val components: t -> ty Prod.t + val componentsSize: t -> Bytes.t + val deNormal: t -> {components: ty Prod.t, hasIdentity: bool} + val deSequence: t -> {components: ty Prod.t, hasIdentity: bool} val isOk: t -> bool val layout: t -> Layout.t val toRuntime: t -> Runtime.RObjectType.t diff -Nru mlton-20130715/mlton/backend/objptr-tycon.fun mlton-20210117+dfsg/mlton/backend/objptr-tycon.fun --- mlton-20130715/mlton/backend/objptr-tycon.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/objptr-tycon.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -20,9 +20,9 @@ end local - val c = Counter.new 0 + val c = Counter.generator 0 in - fun new () = T {index = ref (Counter.next c)} + fun new () = T {index = ref (c ())} end fun setIndex (T {index = r}, i) = r := i @@ -40,23 +40,38 @@ val layout = Layout.str o toString +fun toHeader (opt: t): WordX.t = + WordX.fromWord (Runtime.typeIndexToHeader (index opt), WordSize.objptrHeader ()) + val stack = new () val thread = new () val weakGone = new () local + val real32Vector = new () + val real64Vector = new () +in + fun realVector (rs: RealSize.t): t = + case rs of + RealSize.R32 => real32Vector + | RealSize.R64 => real64Vector +end + +local val word8Vector = new () val word16Vector = new () val word32Vector = new () val word64Vector = new () in - fun wordVector (b: Bits.t): t = - case Bits.toInt b of - 8 => word8Vector - | 16 => word16Vector - | 32 => word32Vector - | 64 => word64Vector + fun wordVector (ws: WordSize.t): t = + case WordSize.primOpt ws of + SOME WordSize.W8 => word8Vector + | SOME WordSize.W16 => word16Vector + | SOME WordSize.W32 => word32Vector + | SOME WordSize.W64 => word64Vector | _ => Error.bug "ObjptrTycon.wordVector" end +fun hash (T {index}) = (Hash.permute o Word.fromInt o !) index + end diff -Nru mlton-20130715/mlton/backend/objptr-tycon.sig mlton-20210117+dfsg/mlton/backend/objptr-tycon.sig --- mlton-20130715/mlton/backend/objptr-tycon.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/objptr-tycon.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,13 +1,19 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature OBJPTR_TYCON_STRUCTS = sig + structure RealSize: REAL_SIZE + structure Runtime: RUNTIME + structure WordSize: WORD_SIZE + structure WordX: WORD_X + + sharing WordSize = WordX.WordSize end signature OBJPTR_TYCON = @@ -19,16 +25,20 @@ val <= : t * t -> bool val compare: t * t -> Relation.t val equals: t * t -> bool + (* This hash may change if setIndex is called *) + val hash: t -> word val fromIndex: int -> t val index: t -> int (* index into objectTypes array *) val layout: t -> Layout.t val new: unit -> t val setIndex: t * int -> unit + val toHeader: t -> WordX.t val toString: t -> string (* See gc/object.h. *) val stack: t val thread: t val weakGone: t - val wordVector: Bits.t -> t + val realVector: RealSize.t -> t + val wordVector: WordSize.t -> t end diff -Nru mlton-20130715/mlton/backend/packed-representation.fun mlton-20210117+dfsg/mlton/backend/packed-representation.fun --- mlton-20130715/mlton/backend/packed-representation.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/packed-representation.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2016-2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -21,6 +22,7 @@ structure Block = Block structure Kind = Kind structure Label = Label + structure Object = Object structure ObjectType = ObjectType structure Operand = Operand structure ObjptrTycon = ObjptrTycon @@ -36,9 +38,9 @@ structure WordSize = WordSize structure WordX = WordX end -structure S = Ssa +structure S = Ssa2 local - open Ssa + open Ssa2 in structure Base = Base structure Con = Con @@ -91,31 +93,19 @@ Error.bug "PackedRepresentation.Type.mkPadToWidth") end fun mk (t, pad) = seq (Vector.new2 (t, pad)) - fun mkLow (t, pad) = seq (Vector.new2 (pad, t)) in fun padToPrim (t: t): t = mkPadToPrim (t, mk) - fun padToPrimLow (t: t): t = mkPadToPrim (t, mkLow) fun padToWidth (t: t, b: Bits.t): t = mkPadToWidth (t, b, mk) - fun padToWidthLow (t: t, b: Bits.t): t = mkPadToWidth (t, b, mkLow) end val padToPrim = Trace.trace ("PackedRepresentation.Type.padToPrim", layout, layout) padToPrim - val padToPrimLow = - Trace.trace - ("PackedRepresentation.Type.padToPrimLow", layout, layout) - padToPrimLow val padToWidth = Trace.trace2 ("PackedRepresentation.Type.padToWidth", layout, Bits.layout, layout) padToWidth - val padToWidthLow = - Trace.trace2 - ("PackedRepresentation.Type.padToWidthLow", layout, Bits.layout, layout) - padToWidthLow - end structure Rep = @@ -183,16 +173,6 @@ T {rep = NonObjptr, ty = Type.padToWidth (ty, width)} | Objptr _ => Error.bug "PackedRepresentation.Rep.padToWidth" - - fun padToWidthLow (r as T {rep, ty}, width: Bits.t) = - if Bits.equals (Type.width ty, width) - then r - else - case rep of - NonObjptr => - T {rep = NonObjptr, - ty = Type.padToWidthLow (ty, width)} - | Objptr _ => Error.bug "PackedRepresentation.Rep.padToWidth" end structure Statement = @@ -211,94 +191,104 @@ Var {ty = ty, var = tmp}) end in - val andb = make Prim.wordAndb - val lshift = make Prim.wordLshift - val orb = make Prim.wordOrb - val rshift = make (fn s => Prim.wordRshift (s, {signed = false})) + val andb = make Prim.Word_andb + val lshift = make Prim.Word_lshift + val orb = make Prim.Word_orb + val rshift = make (fn s => Prim.Word_rshift (s, {signed = false})) end end -structure WordRep = +structure WordComponent = struct - (* WordRep describes the representation of (some of) the components in a - * tuple as a word. + (* WordComponent describes the representation of (some of) the + * components in a tuple as a word. * Components are stored from lowest to highest, just like in Type.seq. * The width of the rep must be less than the width of an objptr. * The sum of the widths of the component reps must be equal to the * width of the rep. *) - datatype t = T of {components: {index: int, + datatype t = T of {components: {isMutable: bool, + index: int, rep: Rep.t} vector, + isMutable: bool, rep: Rep.t} - fun layout (T {components, rep}) = + fun layout (T {components, isMutable, rep}) = let open Layout in record [("components", - Vector.layout (fn {index, rep} => + Vector.layout (fn {index, isMutable, rep} => record [("index", Int.layout index), + ("isMutable", Bool.layout isMutable), ("rep", Rep.layout rep)]) components), + ("isMutable", Bool.layout isMutable), ("rep", Rep.layout rep)] end local fun make f (T r) = f r in + val isMutable = make #isMutable val rep = make #rep end val unit = T {components = Vector.new0 (), + isMutable = false, rep = Rep.unit} fun equals (wr, wr') = Rep.equals (rep wr, rep wr') - fun make {components, rep} = - if Bits.<= (Rep.width rep, Control.Target.Size.objptr ()) - andalso Bits.equals (Vector.fold (components, Bits.zero, - fn ({rep, ...}, ac) => - Bits.+ (ac, Rep.width rep)), - Rep.width rep) - then T {components = components, - rep = rep} - else Error.bug "PackedRepresentation.WordRep.make" + fun make components = + let + val repTy = Type.seq (Vector.map (components, Rep.ty o #rep)) + val rep = Rep.T {rep = Rep.NonObjptr, + ty = repTy} + in + if Bits.<= (Rep.width rep, Control.Target.Size.objptr ()) + then T {components = components, + isMutable = Vector.exists (components, #isMutable), + rep = rep} + else Error.bug "PackedRepresentation.WordComponent.make" + end val make = Trace.trace - ("PackedRepresentation.WordRep.make", - layout o T, + ("PackedRepresentation.WordComponent.make", + fn components => + let + open Layout + in + Vector.layout (fn {index, isMutable, rep} => + record [("index", Int.layout index), + ("isMutable", Bool.layout isMutable), + ("rep", Rep.layout rep)]) + components + end, layout) make - fun padToWidth (T {components, rep}, b: Bits.t): t = - let - val newRep = Rep.padToWidth (rep, b) - val padBits = Bits.- (Rep.width newRep, Rep.width rep) - val newComponent = - {index = ~1, - rep = Rep.nonObjptr (Type.bits padBits)} - val newComponents = - Vector.concat - [components, Vector.new1 newComponent] - in - make {components = newComponents, - rep = newRep} - end - fun padToWidthLow (T {components, rep}, b: Bits.t): t = - let - val newRep = Rep.padToWidthLow (rep, b) - val padBits = Bits.- (Rep.width newRep, Rep.width rep) - val newComponent = - {index = ~1, - rep = Rep.nonObjptr (Type.bits padBits)} - val newComponents = - Vector.concat - [Vector.new1 newComponent, components] - in - make {components = newComponents, - rep = newRep} - end + local + fun mkPadToWidth (wc as T {components, rep, ...}, b: Bits.t, mk): t = + let + val padBits = Bits.- (b, Rep.width rep) + in + if Bits.isZero padBits + then wc + else let + val pad = + {index = ~1, + isMutable = false, + rep = Rep.nonObjptr (Type.bits padBits)} + in + make (mk (components, Vector.new1 pad)) + end + end + fun mk (cs, pad) = Vector.concat [cs, pad] + in + fun padToWidth (c, b) = mkPadToWidth (c, b, mk) + end fun tuple (T {components, ...}, {dst = (dstVar, dstTy): Var.t * Type.t, @@ -323,9 +313,7 @@ val (s, src) = Statement.lshift (src, - Operand.word - (WordX.fromIntInf (Bits.toIntInf shift, - WordSize.shiftArg))) + Operand.word (WordX.fromBits (shift, WordSize.shiftArg))) in (src, s :: ss) end @@ -341,73 +329,80 @@ in (SOME acc, Bits.+ (shift, Rep.width rep), ss :: statements) end) - val (src, statements) = - case accOpt of - NONE => (Operand.word (WordX.zero (WordSize.fromBits bits)), []) - | SOME acc => (acc, statements) val statements = - [Bind {dst = (dstVar, dstTy), - isMutable = false, - src = src}] - :: statements + case accOpt of + NONE => [] + | SOME src => + [Bind {dst = (dstVar, dstTy), + pinned = false, + src = src}] + :: statements in List.fold (statements, [], fn (ss, ac) => List.fold (ss, ac, op ::)) end val tuple = Trace.trace - ("PackedRepresentation.WordRep.tuple", + ("PackedRepresentation.WordComponent.tuple", layout o #1, List.layout Statement.layout) tuple + end structure Component = struct datatype t = Direct of {index: int, + isMutable: bool, rep: Rep.t} - | Word of WordRep.t + | Word of WordComponent.t fun layout c = let open Layout in case c of - Direct {index, rep} => + Direct {index, isMutable, rep} => seq [str "Direct ", record [("index", Int.layout index), + ("isMutable", Bool.layout isMutable), ("rep", Rep.layout rep)]] - | Word wr => - seq [str "Word ", WordRep.layout wr] + | Word wc => + seq [str "Word ", WordComponent.layout wc] end val rep: t -> Rep.t = fn Direct {rep, ...} => rep - | Word wr => WordRep.rep wr + | Word wc => WordComponent.rep wc val ty = Rep.ty o rep - val unit = Word WordRep.unit + val size = Type.bytes o ty + + val isMutable: t -> bool = + fn Direct {isMutable, ...} => isMutable + | Word wc => WordComponent.isMutable wc + + val unit = Word WordComponent.unit val equals: t * t -> bool = fn z => case z of (Direct {rep = r, ...}, Direct {rep = r', ...}) => Rep.equals (r, r') - | (Word wr, Word wr') => WordRep.equals (wr, wr') + | (Word wc, Word wc') => WordComponent.equals (wc, wc') | _ => false local fun mkPadToWidth (c: t, b: Bits.t, repPadToWidth, wordRepPadToWidth): t = case c of - Direct {index, rep} => + Direct {index, isMutable, rep} => Direct {index = index, + isMutable = isMutable, rep = repPadToWidth (rep, b)} - | Word r => Word (wordRepPadToWidth (r, b)) + | Word wc => Word (wordRepPadToWidth (wc, b)) in fun padToWidth (c, b) = - mkPadToWidth (c, b, Rep.padToWidth, WordRep.padToWidth) - fun padToWidthLow (c, b) = - mkPadToWidth (c, b, Rep.padToWidthLow, WordRep.padToWidthLow) + mkPadToWidth (c, b, Rep.padToWidth, WordComponent.padToWidth) end local @@ -422,7 +417,6 @@ end in fun padToPrim c = mkPadToPrim (c, Type.padToPrim, padToWidth) - fun padToPrimLow c = mkPadToPrim (c, Type.padToPrimLow, padToWidthLow) end fun tuple (c: t, {dst: Var.t * Type.t, @@ -435,10 +429,10 @@ Statement.resize (src {index = index}, #2 dst) in ss @ [Bind {dst = dst, - isMutable = false, + pinned = false, src = src}] end - | Word wr => WordRep.tuple (wr, {dst = dst, src = src}) + | Word wc => WordComponent.tuple (wc, {dst = dst, src = src}) val tuple = Trace.trace2 @@ -476,8 +470,7 @@ then (src, []) else let - val shift = - WordX.fromIntInf (Bits.toIntInf shift, WordSize.shiftArg) + val shift = WordX.fromBits (shift, WordSize.shiftArg) val (s, tmp) = Statement.rshift (src, Operand.word shift) in (tmp, [s]) @@ -502,7 +495,7 @@ end in ss1 @ ss2 @ ss3 @ [Bind {dst = (dst, dstTy), - isMutable = false, + pinned = false, src = src}] end @@ -520,8 +513,7 @@ {chunk: Operand.t, component: Operand.t}): Operand.t * Statement.t list = let - val shift = - WordX.fromIntInf (Bits.toIntInf shift, WordSize.shiftArg) + val shift = WordX.fromBits (shift, WordSize.shiftArg) val chunkTy = Operand.ty chunk val chunkWidth = Type.width chunkTy val mask = @@ -565,7 +557,7 @@ offset = offset, ty = ty}, []) - | VectorSub {index, vector} => + | SequenceSub {index, sequence} => let val eltWidth = case eltWidth of @@ -582,27 +574,27 @@ PrimApp {args = (Vector.new2 (index, Operand.word - (WordX.fromIntInf - (Bytes.toIntInf eltWidth, + (WordX.fromBytes + (eltWidth, seqIndexSize)))), dst = SOME (prod, seqIndexTy), - prim = (Prim.wordMul + prim = (Prim.Word_mul (seqIndexSize, {signed = false}))} in - (ArrayOffset {base = vector, - index = Var {var = prod, ty = seqIndexTy}, - offset = offset, - scale = Scale.One, - ty = ty}, + (SequenceOffset {base = sequence, + index = Var {var = prod, ty = seqIndexTy}, + offset = offset, + scale = Scale.One, + ty = ty}, [s]) end | SOME s => - (ArrayOffset {base = vector, - index = index, - offset = offset, - scale = s, - ty = ty}, + (SequenceOffset {base = sequence, + index = index, + offset = offset, + scale = s, + ty = ty}, []) end end @@ -657,7 +649,7 @@ val (src, ss') = Statement.resize (src, dstTy) in ss @ ss' @ [Bind {dst = (dst, dstTy), - isMutable = false, + pinned = false, src = src}] end in @@ -680,7 +672,7 @@ ty = ty} in ss @ (Bind {dst = (tmpVar, ty), - isMutable = false, + pinned = false, src = src} :: Unpack.select (rest, {dst = dst, src = tmpOp})) end @@ -765,12 +757,11 @@ struct datatype t = T of {components: {component: Component.t, offset: Bytes.t} vector, - componentsTy: Type.t, selects: Selects.t, ty: Type.t, tycon: ObjptrTycon.t} - fun layout (T {components, componentsTy, selects, ty, tycon}) = + fun layout (T {components, selects, ty, tycon}) = let open Layout in @@ -780,7 +771,6 @@ record [("component", Component.layout component), ("offset", Bytes.layout offset)]) components), - ("componentsTy", Type.layout componentsTy), ("selects", Selects.layout selects), ("ty", Type.layout ty), ("tycon", ObjptrTycon.layout tycon)] @@ -789,10 +779,19 @@ local fun make f (T r) = f r in - val componentsTy = make #componentsTy val ty = make #ty end + fun mkObjectTypeComponents (T {components, ...}) = + (Prod.make o Vector.map) + (components, fn {component, ...} => + {elt = Component.ty component, + isMutable = Component.isMutable component}) + + fun componentsSize (T {components, ...}) = + Vector.fold (components, Bytes.zero, fn ({component, ...}, b) => + Bytes.+ (Component.size component, b)) + fun equals (T {tycon = c, ...}, T {tycon = c', ...}) = ObjptrTycon.equals (c, c') @@ -800,14 +799,14 @@ Rep.T {rep = Rep.Objptr {endsIn00 = true}, ty = ty} - fun make {components, isVector, selects, tycon} = + fun make {components, isSequence, selects, tycon} = let val width = Vector.fold (components, Bytes.zero, fn ({component = c, ...}, ac) => - Bytes.+ (ac, Type.bytes (Component.ty c))) + Bytes.+ (ac, Component.size c)) val padBytes: Bytes.t = - if isVector + if isSequence then let val alignWidth = case !Control.align of @@ -834,20 +833,18 @@ Bytes.- (alignWidth, width) end else let - (* An object needs space for a forwarding objptr. *) - val width' = Bytes.max (width, Runtime.objptrSize ()) (* Note that with Align8 and objptrSize == 64bits, * the following ensures that objptrs will be * mod 8 aligned. *) - val width'' = Bytes.+ (width', Runtime.headerSize ()) - val alignWidth'' = + val width' = Bytes.+ (width, Runtime.normalMetaDataSize ()) + val alignWidth' = case !Control.align of - Control.Align4 => Bytes.alignWord32 width'' - | Control.Align8 => Bytes.alignWord64 width'' - val alignWidth' = Bytes.- (alignWidth'', Runtime.headerSize ()) + Control.Align4 => Bytes.alignWord32 width' + | Control.Align8 => Bytes.alignWord64 width' + val alignWidth = Bytes.- (alignWidth', Runtime.normalMetaDataSize ()) in - Bytes.- (alignWidth', width) + Bytes.- (alignWidth, width) end val (components, selects) = if Bytes.isZero padBytes @@ -860,18 +857,27 @@ (components, fn {component = c, ...} => Rep.isObjptr (Component.rep c)) val padOffset = - if 0 = Vector.length objptrs + if Vector.isEmpty objptrs then width - else #offset (Vector.sub (objptrs, 0)) - val pad = - (#1 o Vector.unfoldi) - ((Bytes.toInt padBytes) div (Bytes.toInt Bytes.inWord32), - padOffset, - fn (_, padOffset) => - ({component = (Component.padToWidth - (Component.unit, Bits.inWord32)), - offset = padOffset}, - Bytes.+ (padOffset, Bytes.inWord32))) + else #offset (Vector.first objptrs) + fun mkPad (padBytes, padOffset, pads) = + if Bytes.isZero padBytes + then Vector.fromList pads + else let + fun try (b, k) () = + if Bytes.<= (b, padBytes) + then mkPad (Bytes.- (padBytes, b), + Bytes.+ (padOffset, b), + {component = (Component.padToWidth + (Component.unit, Bytes.toBits b)), + offset = padOffset}::pads) + else k () + fun bug () = + Error.bug "PackedRepresentation.ObjptrRep.make: mkPad" + in + List.fold (Bytes.prims, bug, try) () + end + val pad = mkPad (padBytes, padOffset, []) val objptrs = Vector.map (objptrs, fn {component = c, offset} => {component = c, @@ -893,18 +899,8 @@ in (components, selects) end - val componentsTy = - Type.seq (Vector.map (components, Component.ty o #component)) - (* If there are no components, then add a pad. *) - val componentsTy = - if Bits.isZero (Type.width componentsTy) - then Type.zero (case !Control.align of - Control.Align4 => Bits.inWord32 - | Control.Align8 => Bits.inWord64) - else componentsTy in T {components = components, - componentsTy = componentsTy, selects = selects, ty = Type.objptr tycon, tycon = tycon} @@ -916,14 +912,14 @@ in Trace.trace ("PackedRepresentation.ObjptrRep.make", - fn {components, isVector, selects, tycon} => + fn {components, isSequence, selects, tycon} => record [("components", Vector.layout (fn {component, offset} => record [("component", Component.layout component), ("offset", Bytes.layout offset)]) components), - ("isVector", Bool.layout isVector), + ("isSequence", Bool.layout isSequence), ("selects", Selects.layout selects), ("tycon", ObjptrTycon.layout tycon)], layout) @@ -949,36 +945,38 @@ in make {components = Vector.new1 {component = component, offset = Bytes.zero}, - isVector = false, + isSequence = false, selects = selects, tycon = opt} end - fun tuple (T {components, componentsTy, ty, tycon, ...}, + fun tuple (T {components, ty, tycon, ...}, {dst = dst: Var.t, src: {index: int} -> Operand.t}) = let - val object = Var {ty = ty, var = dst} - val stores = - Vector.foldr - (components, [], fn ({component, offset}, ac) => + val (pre, init) = + Vector.fold + (components, ([], []), fn ({component, offset}, (pre, init)) => let val tmpVar = Var.newNoname () val tmpTy = Component.ty component + val statements = + Component.tuple (component, + {dst = (tmpVar, tmpTy), src = src}) in - Component.tuple (component, - {dst = (tmpVar, tmpTy), src = src}) - @ (Move {dst = Offset {base = object, - offset = offset, - ty = tmpTy}, - src = Var {ty = tmpTy, var = tmpVar}} - :: ac) + if List.isEmpty statements + then (pre, init) + else (statements :: pre, + {offset = offset, + src = Var {ty = tmpTy, var = tmpVar}} :: init) end) in - Object {dst = (dst, ty), - header = Runtime.typeIndexToHeader (ObjptrTycon.index tycon), - size = Bytes.+ (Type.bytes componentsTy, Runtime.headerSize ())} - :: stores + List.concatRev + ([Object {dst = (dst, ty), + obj = Object.Normal + {init = Vector.fromListRev init, + tycon = tycon}}] + :: pre) end val tuple = @@ -986,6 +984,48 @@ ("PackedRepresentation.ObjptrRep.tuple", layout, Var.layout o #dst, List.layout Statement.layout) tuple + + fun sequence (T {components, ty, tycon, ...}, + {dst = dst: Var.t, + src: ({index: int} -> Operand.t) vector}) = + let + val (pre, init) = + Vector.fold + (src, ([], []), fn (src, (pre, init')) => + let + val (pre, init) = + Vector.fold + (components, (pre, []), fn ({component, offset}, (pre, init)) => + let + val tmpVar = Var.newNoname () + val tmpTy = Component.ty component + val statements = + Component.tuple (component, + {dst = (tmpVar, tmpTy), src = src}) + in + if List.isEmpty statements + then (pre, init) + else (statements :: pre, + {offset = offset, + src = Var {ty = tmpTy, var = tmpVar}} :: init) + end) + in + (pre, Vector.fromListRev init :: init') + end) + in + List.concatRev + ([Object {dst = (dst, ty), + obj = Object.Sequence + {init = Vector.fromListRev init, + tycon = tycon}}] + :: pre) + end + + val sequence = + Trace.trace2 + ("PackedRepresentation.ObjptrRep.sequence", + layout, Var.layout o #dst, List.layout Statement.layout) + sequence end structure TupleRep = @@ -1046,13 +1086,13 @@ layout, Var.layout o #1 o #dst, List.layout Statement.layout) tuple - (* TupleRep.make decides how to layout a sequence of types in an object, - * or in the case of a vector, in a vector element. - * Vectors are treated slightly specially because we don't require element + (* TupleRep.make decides how to layout a series of types in an object, + * or in the case of a sequence, in a sequence element. + * Sequences are treated slightly specially because we don't require element * widths to be a multiple of the word32 size. * At the front of the object, we place all the word64s, followed by * all the word32s. Then, we pack in all the types that are smaller than a - * word32. This is done by packing in a sequence of words, greedily, + * word32. This is done by packing in a series of words, greedily, * starting with the largest type and moving to the smallest. We pad to * ensure that a value never crosses a word32 boundary. Finally, if there * are any objptrs, they go at the end of the object. @@ -1070,7 +1110,7 @@ rep: Rep.t, ty: S.Type.t} vector, {forceBox: bool, - isVector: bool}): t = + isSequence: bool}): t = let val objptrs = ref [] val numObjptrs = ref 0 @@ -1078,23 +1118,24 @@ val numWord64s = ref 0 val word32s = ref [] val numWord32s = ref 0 - val subword32s = Array.array (Bits.toInt Bits.inWord32, []) - val widthSubword32s = ref 0 + val subWord32s = Array.array (Bits.toInt Bits.inWord32, []) + val widthSubWord32s = ref 0 val hasNonPrim = ref false val () = Vector.foreachi - (rs, fn (i, {rep, ...}) => + (rs, fn (i, {isMutable, rep, ...}) => let fun addDirect (l, n) = (List.push (l, {component = Component.Direct {index = i, + isMutable = isMutable, rep = rep}, index = i}) ; Int.inc n) - fun addSubword32 b = + fun addSubWord32 b = (Array.update - (subword32s, b, - {index = i, rep = rep} :: Array.sub (subword32s, b)) - ; widthSubword32s := !widthSubword32s + b) + (subWord32s, b, + {index = i, isMutable = isMutable, rep = rep} :: Array.sub (subWord32s, b)) + ; widthSubWord32s := !widthSubWord32s + b) in case Rep.rep rep of Rep.NonObjptr => @@ -1103,11 +1144,11 @@ in case b of 0 => () - | 8 => addSubword32 b - | 16 => addSubword32 b + | 8 => addSubWord32 b + | 16 => addSubWord32 b | 32 => addDirect (word32s, numWord32s) | 64 => addDirect (word64s, numWord64s) - | _ => (addSubword32 b + | _ => (addSubWord32 b ; hasNonPrim := true) end | Rep.Objptr _ => addDirect (objptrs, numObjptrs) @@ -1117,16 +1158,16 @@ val numComponents = !numObjptrs + !numWord64s + !numWord32s + (let - val widthSubword32s = !widthSubword32s + val widthSubWord32s = !widthSubWord32s in - Int.quot (widthSubword32s, 32) - + Int.min (1, Int.rem (widthSubword32s, 32)) + Int.quot (widthSubWord32s, 32) + + Int.min (1, Int.rem (widthSubWord32s, 32)) end) val needsBox = forceBox orelse Vector.exists (rs, #isMutable) orelse numComponents > 1 - val padToPrim = isVector andalso 1 = numComponents + val padToPrim = isSequence andalso 1 = numComponents val isBigEndian = Control.Target.bigEndian () fun byteShiftToByteOffset (compSz: Bytes.t, tySz: Bytes.t, shift: Bytes.t) = if not isBigEndian @@ -1156,62 +1197,57 @@ val (offset, components) = simple (!word32s, Bytes.inWord32, offset, components) (* j is the maximum index <= remainingWidth at which an - * element of subword32s may be nonempty. + * element of subWord32s may be nonempty. *) - fun getSubword32Components (j: int, + fun getSubWord32Components (j: int, remainingWidth: Bits.t, components) = if 0 = j then Vector.fromListRev components else let - val elts = Array.sub (subword32s, j) + val elts = Array.sub (subWord32s, j) in case elts of - [] => getSubword32Components (j - 1, remainingWidth, components) - | {index, rep} :: elts => + [] => getSubWord32Components (j - 1, remainingWidth, components) + | {index, isMutable, rep} :: elts => let - val () = Array.update (subword32s, j, elts) + val () = Array.update (subWord32s, j, elts) val remainingWidth = Bits.- (remainingWidth, Rep.width rep) in - getSubword32Components + getSubWord32Components (Bits.toInt remainingWidth, remainingWidth, - {index = index, rep = rep} :: components) + {index = index, isMutable = isMutable, rep = rep} + :: components) end end (* max is the maximum index at which an element of - * subword32s may be nonempty. + * subWord32s may be nonempty. *) - fun makeSubword32s (max: int, offset: Bytes.t, ac) = + fun makeSubWord32s (max: int, offset: Bytes.t, ac) = if 0 = max then (offset, ac) else - if List.isEmpty (Array.sub (subword32s, max)) - then makeSubword32s (max - 1, offset, ac) + if List.isEmpty (Array.sub (subWord32s, max)) + then makeSubWord32s (max - 1, offset, ac) else let val components = - getSubword32Components (max, Bits.inWord32, []) - val componentTy = - Type.seq (Vector.map (components, Rep.ty o #rep)) + getSubWord32Components (max, Bits.inWord32, []) + val component = + Component.Word (WordComponent.make components) val component = - (Component.Word o WordRep.T) - {components = components, - rep = Rep.T {rep = Rep.NonObjptr, - ty = componentTy}} - val (component, componentTy) = if needsBox then if padToPrim - then (Component.padToPrim component, - Type.padToPrim componentTy) - else (Component.padToWidth (component, Bits.inWord32), - Type.padToWidth (componentTy, Bits.inWord32)) - else (component, componentTy) + then Component.padToPrim component + else Component.padToWidth (component, Bits.inWord32) + else component + val componentTy = Component.ty component val _ = Vector.fold (components, Bits.zero, - fn ({index, rep}, shift) => + fn ({index, rep, ...}, shift) => let val repTy = Rep.ty rep val repTyWidth = Type.width repTy @@ -1253,63 +1289,7 @@ val ac = {component = component, offset = offset} :: ac in - makeSubword32s - (max, - (* Either the width of the word rep component - * is 32 bits, or this is the only - * component, so offset doesn't matter. - *) - Bytes.+ (offset, Bytes.inWord32), - ac) - end - fun makeSubword32sAllPrims (max: int, offset: Bytes.t, ac) = - (* hasNonPrim = false, needsBox = true *) - if 0 = max - then (offset, ac) - else - if List.isEmpty (Array.sub (subword32s, max)) - then makeSubword32sAllPrims (max - 1, offset, ac) - else - let - val origComponents = - getSubword32Components (max, Bits.inWord32, []) - val components = - if isBigEndian - then Vector.rev origComponents - else origComponents - val componentTy = - Type.seq (Vector.map (components, Rep.ty o #rep)) - val component = - (Component.Word o WordRep.T) - {components = components, - rep = Rep.T {rep = Rep.NonObjptr, - ty = componentTy}} - val component = - if padToPrim - then if isBigEndian - then Component.padToPrimLow component - else Component.padToPrim component - else if isBigEndian - then Component.padToWidthLow (component, Bits.inWord32) - else Component.padToWidth (component, Bits.inWord32) - val _ = - Vector.fold - (origComponents, offset, - fn ({index, rep}, offset) => - let - val () = - Array.update - (selects, index, - Select.Indirect - {offset = offset, - ty = Rep.ty rep}) - in - Bytes.+ (offset, Bits.toBytes (Rep.width rep)) - end) - val ac = {component = component, - offset = offset} :: ac - in - makeSubword32sAllPrims + makeSubWord32s (max, (* Either the width of the word rep component * is 32 bits, or this is the only @@ -1318,10 +1298,24 @@ Bytes.+ (offset, Bytes.inWord32), ac) end + fun makeSubWord32sAllPrims (_, offset: Bytes.t, components) = + let + fun doit (b, offset, components) = + simple (List.map (Array.sub (subWord32s, b), fn {index, isMutable, rep} => + {component = Component.Direct {index = index, + isMutable = isMutable, + rep = rep}, + index = index}), + Bits.toBytes (Bits.fromInt b), offset, components) + val (offset, components) = doit (16, offset, components) + val (offset, components) = doit (8, offset, components) + in + (offset, components) + end val (offset, components) = if (not hasNonPrim) andalso needsBox - then makeSubword32sAllPrims (Array.length subword32s - 1, offset, components) - else makeSubword32s (Array.length subword32s - 1, offset, components) + then makeSubWord32sAllPrims (Array.length subWord32s - 1, offset, components) + else makeSubWord32s (Array.length subWord32s - 1, offset, components) val (_, components) = simple (!objptrs, Runtime.objptrSize (), offset, components) val components = Vector.fromListRev components @@ -1339,12 +1333,12 @@ in if needsBox then Indirect (ObjptrRep.make {components = components, - isVector = isVector, + isSequence = isSequence, selects = getSelects, tycon = objptrTycon}) else if numComponents = 0 then unit - else Direct {component = #component (Vector.sub (components, 0)), + else Direct {component = #component (Vector.first components), selects = getSelects} end val make = @@ -1355,9 +1349,9 @@ Layout.record [("isMutable", Bool.layout isMutable), ("rep", Rep.layout rep), ("ty", S.Type.layout ty)]), - fn {forceBox, isVector} => + fn {forceBox, isSequence} => Layout.record [("forceBox", Bool.layout forceBox), - ("isVector", Bool.layout isVector)], + ("isSequence", Bool.layout isSequence)], layout) make @@ -1382,9 +1376,9 @@ seq [str "ShiftAndTag ", record [("component", Component.layout component), ("selects", Selects.layout selects), - ("tag", WordX.layout tag), + ("tag", WordX.layout (tag, {suffix = true})), ("ty", Type.layout ty)]] - | Tag {tag, ...} => seq [str "Tag ", WordX.layout tag] + | Tag {tag, ...} => seq [str "Tag ", WordX.layout (tag, {suffix = true})] | Tuple tr => TupleRep.layout tr end @@ -1424,10 +1418,8 @@ ShiftAndTag {component, tag, ...} => let val (dstVar, dstTy) = dst - val shift = Operand.word (WordX.fromIntInf - (Bits.toIntInf - (WordSize.bits - (WordX.size tag)), + val shift = Operand.word (WordX.fromBits + (WordSize.bits (WordX.size tag), WordSize.shiftArg)) val tmpVar = Var.newNoname () val tmpTy = @@ -1444,7 +1436,7 @@ (Operand.ty tmp)))) val (s2, tmp) = Statement.orb (tmp, mask) val s3 = Bind {dst = (dstVar, dstTy), - isMutable = false, + pinned = false, src = tmp} in component @ [s1, s2, s3] @@ -1458,7 +1450,7 @@ (Type.width dstTy))) in [Bind {dst = (dstVar, dstTy), - isMutable = false, + pinned = false, src = src}] end | Tuple tr => TupleRep.tuple (tr, {dst = dst, src = src}) @@ -1550,8 +1542,8 @@ (cases, fn {con, dst, dstHasArg} => case conRep con of ConRep.Tuple (TupleRep.Indirect (ObjptrRep.T {ty, tycon, ...})) => - SOME (WordX.fromIntInf (Int.toIntInf (ObjptrTycon.index tycon), - WordSize.objptrHeader ()), + SOME (WordX.fromInt (ObjptrTycon.index tycon, + WordSize.objptrHeader ()), Block.new {statements = Vector.new0 (), transfer = Goto {args = if dstHasArg @@ -1560,24 +1552,33 @@ else Vector.new0 (), dst = dst}}) | _ => NONE) - val default = - if Vector.length variants = Vector.length cases - then NONE - else default - val cases = - QuickSort.sortVector (cases, fn ((w, _), (w', _)) => - WordX.le (w, w', {signed = false})) - val shift = Operand.word (WordX.one WordSize.shiftArg) - val (s, tag) = - Statement.rshift (Offset {base = test, - offset = Runtime.headerOffset (), - ty = Type.objptrHeader ()}, - shift) - in - ([s], Switch (Switch.T {cases = cases, - default = default, - size = WordSize.objptrHeader (), - test = tag})) + in + if Vector.isEmpty cases + then case default of + NONE => ([], Transfer.bug ()) + | SOME default => + ([], Goto {args = Vector.new0 (), dst = default}) + else let + val default = + if Vector.length variants = Vector.length cases + then NONE + else default + val cases = + QuickSort.sortVector (cases, fn ((w, _), (w', _)) => + WordX.le (w, w', {signed = false})) + val shift = Operand.word (WordX.one WordSize.shiftArg) + val (s, tag) = + Statement.rshift (Offset {base = test, + offset = Runtime.headerOffset (), + ty = Type.objptrHeader ()}, + shift) + in + ([s], Switch (Switch.T {cases = cases, + default = default, + expect = NONE, + size = WordSize.objptrHeader (), + test = tag})) + end end end @@ -1655,23 +1656,6 @@ | _ => NONE) val cases = QuickSort.sortVector (cases, fn ((w, _), (w', _)) => WordX.le (w, w', {signed = false})) - val tagOp = - if isObjptr - then Operand.cast (test, Type.bits testBits) - else test - val (tagOp, ss) = - if isEnum - then (tagOp, []) - else - let - val mask = - Operand.word (WordX.resize - (WordX.max (tagSize, {signed = false}), - testSize)) - val (s, tagOp) = Statement.andb (tagOp, mask) - in - (tagOp, [s]) - end val default = if Vector.length variants = Vector.length cases then notSmall @@ -1691,19 +1675,44 @@ {cases = Vector.new1 (WordX.zero testSize, notSmall), default = SOME smallDefault, + expect = NONE, size = testSize, test = test}) in SOME (Block.new {statements = Vector.new1 s, transfer = t}) end - val transfer = - Switch (Switch.T {cases = cases, - default = default, - size = testSize, - test = tagOp}) in - (ss, transfer) + if Vector.isEmpty cases + then (case default of + NONE => ([], Transfer.bug ()) + | SOME default => ([], Goto {args = Vector.new0 (), dst = default})) + else let + val tagOp = + if isObjptr + then Operand.cast (test, Type.bits testBits) + else test + val (tagOp, ss) = + if isEnum + then (tagOp, []) + else let + val mask = + Operand.word (WordX.resize + (WordX.max (tagSize, {signed = false}), + testSize)) + val (s, tagOp) = Statement.andb (tagOp, mask) + in + (tagOp, [s]) + end + val transfer = + Switch (Switch.T {cases = cases, + default = default, + expect = NONE, + size = testSize, + test = tagOp}) + in + (ss, transfer) + end end val genCase = @@ -1856,7 +1865,7 @@ val tupleRep = TupleRep.make (objptrTycon, args, {forceBox = false, - isVector = false}) + isSequence = false}) val conRep = ConRep.Tuple tupleRep in (One {con = con, tupleRep = tupleRep}, @@ -1864,7 +1873,7 @@ end else if (2 = Vector.length variants andalso let - val c = #con (Vector.sub (variants, 0)) + val c = #con (Vector.first variants) in Con.equals (c, Con.falsee) orelse Con.equals (c, Con.truee) @@ -1883,7 +1892,7 @@ val tr = TupleRep.make (objptrTycon, args, {forceBox = false, - isVector = false}) + isSequence = false}) fun makeBig () = List.push (big, {con = con, @@ -2101,7 +2110,7 @@ if 1 = Vector.length objptrs then let - val objptr = Vector.sub (objptrs, 0) + val objptr = Vector.first objptrs val small = valOf small val rep = sumWithSmall (ObjptrRep.rep (#objptr objptr)) @@ -2200,7 +2209,7 @@ *) let val {con = c, dst, dstHasArg} = - Vector.sub (cases, 0) + Vector.first cases in if not (Con.equals (c, con)) then Error.bug "PackedRepresentation.genCase: One" @@ -2417,7 +2426,7 @@ val fixedPoint = Dep.fixedPoint end -fun compute (program as Ssa.Program.T {datatypes, ...}) = +fun compute (program as Ssa2.Program.T {datatypes, ...}) = let type tyconRepAndCons = (TyconRep.t * {con: Con.t, rep: ConRep.t} vector) Value.t @@ -2434,16 +2443,16 @@ ("PackedRepresentation.setTupleRep", S.Type.layout o #1, Layout.ignore) setTupleRep - fun vectorRep (t: S.Type.t): TupleRep.t = Value.get (tupleRep t) - fun setVectorRep (t: S.Type.t, tr: TupleRep.t): unit = + fun sequenceRep (t: S.Type.t): TupleRep.t = Value.get (tupleRep t) + fun setSequenceRep (t: S.Type.t, tr: TupleRep.t): unit = setTupleRep (t, Value.new {compute = fn () => tr, equals = TupleRep.equals, init = tr}) - val setVectorRep = + val setSequenceRep = Trace.trace2 - ("PackedRepresentation.setVectorRep", + ("PackedRepresentation.setSequenceRep", S.Type.layout, TupleRep.layout, Unit.layout) - setVectorRep + setSequenceRep val {get = tyconRep: Tycon.t -> tyconRepAndCons, set = setTyconRep, ...} = Property.getSetOnce (Tycon.plist, Property.initRaise ("tyconRep", Tycon.layout)) @@ -2540,49 +2549,9 @@ in r end - | ObjectCon.Tuple => + | ObjectCon.Sequence => let - val opt = ObjptrTycon.new () - val rs = - Vector.map (Prod.dest args, typeRep o #elt) - fun compute () = - TupleRep.make - (opt, - Vector.map2 (rs, Prod.dest args, - fn (r, {elt, isMutable}) => - {isMutable = isMutable, - rep = Value.get r, - ty = elt}), - {forceBox = false, isVector = false}) - val tr = - Value.new {compute = compute, - equals = TupleRep.equals, - init = TupleRep.unit} - val () = Vector.foreach (rs, fn r => - Value.affect (r, tr)) - val hasIdentity = Prod.isMutable args - val () = - List.push - (delayedObjectTypes, fn () => - case Value.get tr of - TupleRep.Indirect opr => - SOME - (opt, (ObjectType.Normal - {hasIdentity = hasIdentity, - ty = ObjptrRep.componentsTy opr})) - | _ => NONE) - val () = setTupleRep (t, tr) - fun compute () = TupleRep.rep (Value.get tr) - val r = Value.new {compute = compute, - equals = Rep.equals, - init = Rep.unit} - val () = Value.affect (tr, r) - in - r - end - | ObjectCon.Vector => - let - val hasIdentity = Prod.isMutable args + val hasIdentity = Prod.someIsMutable args val args = Prod.dest args fun tupleRep opt = let @@ -2595,8 +2564,8 @@ rep = Value.get (typeRep elt), ty = elt}), {forceBox = true, - isVector = true}) - val () = setVectorRep (t, tr) + isSequence = true}) + val () = setSequenceRep (t, tr) in tr end @@ -2610,24 +2579,20 @@ let (* Delay computing tupleRep until the * delayedObjectTypes are computed - * because the vector component types + * because the sequence component types * may not be known yet. *) val tr = tupleRep opt - val ty = + val components = case tr of TupleRep.Direct _ => - TupleRep.ty tr + Prod.new1Mutable (TupleRep.ty tr) | TupleRep.Indirect opr => - ObjptrRep.componentsTy opr - val elt = - if Type.isUnit ty - then Type.zero Bits.inByte - else ty + ObjptrRep.mkObjectTypeComponents opr in SOME (opt, - ObjectType.Array - {elt = elt, + ObjectType.Sequence + {components = components, hasIdentity = hasIdentity}) end) in @@ -2646,25 +2611,57 @@ else (case S.Type.dest elt of S.Type.Word s => - let - val nBits = WordSize.bits s - val nInt = Bits.toInt nBits - in - if nInt = 8 - orelse nInt = 16 - orelse nInt = 32 - orelse nInt = 64 - then - now - (ObjptrTycon.wordVector nBits) + if isSome (WordSize.primOpt s) + then now (ObjptrTycon.wordVector s) else delay () - end + | S.Type.Real s => + now (ObjptrTycon.realVector s) | _ => delay ()) end in constant (Rep.T {rep = Rep.Objptr {endsIn00 = true}, ty = Type.objptr opt}) + end + | ObjectCon.Tuple => + let + val opt = ObjptrTycon.new () + val rs = + Vector.map (Prod.dest args, typeRep o #elt) + fun compute () = + TupleRep.make + (opt, + Vector.map2 (rs, Prod.dest args, + fn (r, {elt, isMutable}) => + {isMutable = isMutable, + rep = Value.get r, + ty = elt}), + {forceBox = false, isSequence = false}) + val tr = + Value.new {compute = compute, + equals = TupleRep.equals, + init = TupleRep.unit} + val () = Vector.foreach (rs, fn r => + Value.affect (r, tr)) + val hasIdentity = Prod.someIsMutable args + val () = + List.push + (delayedObjectTypes, fn () => + case Value.get tr of + TupleRep.Indirect opr => + SOME + (opt, (ObjectType.Normal + {components = ObjptrRep.mkObjectTypeComponents opr, + hasIdentity = hasIdentity})) + | _ => NONE) + val () = setTupleRep (t, tr) + fun compute () = TupleRep.rep (Value.get tr) + val r = Value.new {compute = compute, + equals = Rep.equals, + init = Rep.unit} + val () = Value.affect (tr, r) + in + r end) | Real s => nonObjptr (Type.real s) | Thread => @@ -2729,8 +2726,8 @@ case conRep con of ConRep.Tuple (TupleRep.Indirect opr) => (objptrTycon, - ObjectType.Normal {hasIdentity = Prod.isMutable args, - ty = ObjptrRep.componentsTy opr}) :: ac + ObjectType.Normal {components = ObjptrRep.mkObjectTypeComponents opr, + hasIdentity = Prod.someIsMutable args}) :: ac | _ => ac)) val objectTypes = ref objectTypes val () = @@ -2777,6 +2774,7 @@ ("PackedRepresentation.tupleRep", S.Type.layout, TupleRep.layout) tupleRep + fun object {args, con, dst, objectTy, oper} = let val src = makeSrc (args, oper) @@ -2785,6 +2783,15 @@ NONE => TupleRep.tuple (tupleRep objectTy, {dst = dst, src = src}) | SOME con => ConRep.conApp (conRep con, {dst = dst, src = src}) end + fun sequence {args, dst = (dst, _), sequenceTy, oper} = + let + val src = Vector.map (args, fn args => makeSrc (args, oper)) + in + case sequenceRep sequenceTy of + TupleRep.Indirect pr => + ObjptrRep.sequence (pr, {dst = dst, src = src}) + | _ => Error.bug "PackedRepresentation.sequence: non-Indirect" + end fun getSelects (con, objectTy) = let datatype z = datatype ObjectCon.t @@ -2795,13 +2802,13 @@ ConRep.ShiftAndTag {selects, ...} => (selects, NONE) | ConRep.Tuple tr => (TupleRep.selects tr, NONE) | _ => Error.bug "PackedRepresentation.getSelects: Con,non-select") - | Tuple => (TupleRep.selects (tupleRep objectTy), NONE) - | Vector => - case vectorRep objectTy of + | Sequence => + (case sequenceRep objectTy of tr as TupleRep.Indirect pr => (TupleRep.selects tr, - SOME (Type.bytes (ObjptrRep.componentsTy pr))) - | _ => Error.bug "PackedRepresentation.getSelects: Vector,non-Indirect" + SOME (ObjptrRep.componentsSize pr)) + | _ => Error.bug "PackedRepresentation.getSelects: Sequence,non-Indirect") + | Tuple => (TupleRep.selects (tupleRep objectTy), NONE) end fun select {base, baseTy, dst, offset} = case S.Type.dest baseTy of @@ -2834,6 +2841,7 @@ object = object, objectTypes = objectTypes, select = select, + sequence = sequence, toRtype = toRtype, update = update} end diff -Nru mlton-20130715/mlton/backend/parallel-move.fun mlton-20210117+dfsg/mlton/backend/parallel-move.fun --- mlton-20130715/mlton/backend/parallel-move.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/parallel-move.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -11,7 +12,7 @@ open S -fun ('register, 'statement) move {moves, equals, move, interfere, temp} +fun ('temporary, 'statement) move {moves, equals, move, interfere, temp} : 'statement list = let val mvs = @@ -37,11 +38,15 @@ if interfere (dst, s) then let val temp = temp s in ({src = temp, dst = d} :: hard, - move {dst = temp, src = s} - :: moves) + case move {dst = temp, src = s} of + NONE => moves + | SOME move => move :: moves) end else (mv :: hard, moves)) - val moves = move {src = src, dst = dst} :: moves + val moves = + case move {src = src, dst = dst} of + NONE => moves + | SOME move => move :: moves in loopTop (hard, moves) end) | (mv as {src, dst}) :: mvs => @@ -52,7 +57,9 @@ in if isHard mvs orelse isHard hard then loop (mvs, mv :: hard, moves, changed) else loop (mvs, hard, - move {src = src, dst = dst} :: moves, + case move {src = src, dst = dst} of + NONE => moves + | SOME move => move :: moves, true) end in loopTop (mvs, []) diff -Nru mlton-20130715/mlton/backend/parallel-move.sig mlton-20210117+dfsg/mlton/backend/parallel-move.sig --- mlton-20130715/mlton/backend/parallel-move.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/parallel-move.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,19 +16,20 @@ include PARALLEL_MOVE_STRUCTS (* Allows overlapping froms and tos. - * Hence, has to be careful to use temps. + * Hence, has to be careful to use + * additional working temporaries . *) val move: { - (* Are two registers the same. *) - equals: 'register * 'register -> bool, + (* Are two temporaries the same. *) + equals: 'temporary * 'temporary -> bool, (* How to create a move statement. *) - move: {src: 'register, dst: 'register} -> 'statement, + move: {src: 'temporary, dst: 'temporary} -> 'statement option, (* The moves to occur. *) - moves: {src: 'register, dst: 'register} list, + moves: {src: 'temporary, dst: 'temporary} list, (* Would writing the write invalidate the read? *) - interfere: 'register * 'register -> bool, - (* Return a new temporary register like input register. *) - temp: 'register -> 'register + interfere: 'temporary * 'temporary -> bool, + (* Return a new temporary like input temporary. *) + temp: 'temporary -> 'temporary } -> 'statement list end diff -Nru mlton-20130715/mlton/backend/representation.sig mlton-20210117+dfsg/mlton/backend/representation.sig --- mlton-20130715/mlton/backend/representation.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/representation.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,18 +1,19 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature REPRESENTATION_STRUCTS = sig structure Rssa: RSSA - structure Ssa: SSA2 - sharing Rssa.RealSize = Ssa.RealSize - sharing Rssa.WordSize = Ssa.WordSize + structure Ssa2: SSA2 + sharing Rssa.Prod = Ssa2.Prod + sharing Rssa.RealSize = Ssa2.RealSize + sharing Rssa.WordSize = Ssa2.WordSize end signature REPRESENTATION = @@ -20,29 +21,33 @@ include REPRESENTATION_STRUCTS val compute: - Ssa.Program.t + Ssa2.Program.t -> {diagnostic: unit -> unit, - genCase: {cases: {con: Ssa.Con.t, + genCase: {cases: {con: Ssa2.Con.t, dst: Rssa.Label.t, dstHasArg: bool} vector, default: Rssa.Label.t option, test: unit -> Rssa.Operand.t, - tycon: Ssa.Tycon.t} -> (Rssa.Statement.t list - * Rssa.Transfer.t - * Rssa.Block.t list), - object: {args: 'a vector, - con: Ssa.Con.t option, + tycon: Ssa2.Tycon.t} -> (Rssa.Statement.t list + * Rssa.Transfer.t + * Rssa.Block.t list), + object: {args: Ssa2.Var.t vector, + con: Ssa2.Con.t option, dst: Rssa.Var.t * Rssa.Type.t, - objectTy: Ssa.Type.t, - oper: 'a -> Rssa.Operand.t} -> Rssa.Statement.t list, + objectTy: Ssa2.Type.t, + oper: Ssa2.Var.t -> Rssa.Operand.t} -> Rssa.Statement.t list, objectTypes: (Rssa.ObjptrTycon.t * Rssa.ObjectType.t) vector, - select: {base: Rssa.Operand.t Ssa.Base.t, - baseTy: Ssa.Type.t, + select: {base: Rssa.Operand.t Ssa2.Base.t, + baseTy: Ssa2.Type.t, dst: Rssa.Var.t * Rssa.Type.t, offset: int} -> Rssa.Statement.t list, - toRtype: Ssa.Type.t -> Rssa.Type.t option, - update: {base: Rssa.Operand.t Ssa.Base.t, - baseTy: Ssa.Type.t, + sequence: {args: Ssa2.Var.t vector vector, + dst: Rssa.Var.t * Rssa.Type.t, + sequenceTy: Ssa2.Type.t, + oper: Ssa2.Var.t -> Rssa.Operand.t} -> Rssa.Statement.t list, + toRtype: Ssa2.Type.t -> Rssa.Type.t option, + update: {base: Rssa.Operand.t Ssa2.Base.t, + baseTy: Ssa2.Type.t, offset: int, value: Rssa.Operand.t} -> Rssa.Statement.t list} end diff -Nru mlton-20130715/mlton/backend/rep-type.fun mlton-20210117+dfsg/mlton/backend/rep-type.fun --- mlton-20130715/mlton/backend/rep-type.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rep-type.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009-2010 Matthew Fluet. +(* Copyright (C) 2009-2010,2014,2016-2017,2019-2020 Matthew Fluet. * Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -20,8 +20,6 @@ and node = Bits | CPointer - | ExnStack - | GCState | Label of Label.t | Objptr of ObjptrTycon.t vector | Real of RealSize.t @@ -44,8 +42,6 @@ case node t of Bits => str (concat ["Bits", Bits.toString (width t)]) | CPointer => str "CPointer" - | ExnStack => str "ExnStack" - | GCState => str "GCState" | Label l => seq [str "Label ", Label.layout l] | Objptr opts => seq [str "Objptr ", @@ -62,8 +58,6 @@ (case (node t, node t') of (Bits, Bits) => true | (CPointer, CPointer) => true - | (ExnStack, ExnStack) => true - | (GCState, GCState) => true | (Label l, Label l') => Label.equals (l, l') | (Objptr opts, Objptr opts') => Vector.equals (opts, opts', ObjptrTycon.equals) @@ -76,17 +70,12 @@ fn (t, t') => Bits.equals (width t, width t') - val bits: Bits.t -> t = fn width => T {node = Bits, width = width} + val bits: Bits.t -> t = + fn width => T {node = Bits, width = width} val cpointer: unit -> t = fn () => T {node = CPointer, width = WordSize.bits (WordSize.cpointer ())} - val exnStack: unit -> t = fn () => - T {node = ExnStack, width = WordSize.bits (WordSize.csize ())} - - val gcState: unit -> t = fn () => - T {node = GCState, width = WordSize.bits (WordSize.cpointer ())} - val label: Label.t -> t = fn l => T {node = Label l, width = WordSize.bits (WordSize.cpointer ())} @@ -103,9 +92,35 @@ val bool: t = word WordSize.bool + val cint: unit -> t = word o WordSize.cint + + val compareRes = word WordSize.compareRes + + val cptrdiff: unit -> t = word o WordSize.cptrdiff + val csize: unit -> t = word o WordSize.csize - val cint: unit -> t = word o WordSize.cint + val exnStack: unit -> t = cptrdiff + + val gcState: unit -> t = cpointer + + local + val b = Random.word () + val cpointer = Random.word () + val label = Random.word () + val objptr = Random.word () + in + fun hash (T {node, width}) = + case node of + Bits => Hash.combine (b, Bits.toWord width) + | CPointer => cpointer + | Label l => Hash.combine (label, Label.hash l) + | Objptr os => Hash.combine (objptr, + Hash.vectorMap (os, ObjptrTycon.hash)) + | Real rs => RealSize.hash rs + | Seq ts => Hash.vectorMap (ts, hash) + | Word ws => WordSize.hash ws + end val objptrHeader: unit -> t = word o WordSize.objptrHeader @@ -124,7 +139,7 @@ val word32: t = word WordSize.word32 val wordVector: WordSize.t -> t = - objptr o ObjptrTycon.wordVector o WordSize.bits + objptr o ObjptrTycon.wordVector val word8Vector: unit -> t = fn () => wordVector WordSize.word8 @@ -135,6 +150,8 @@ val zero: Bits.t -> t = bits + val ofRealX: RealX.t -> t = + fn r => real (RealX.size r) val ofWordX: WordX.t -> t = fn w => word (WordX.size w) @@ -145,7 +162,7 @@ val seq: t vector -> t = fn ts => - if 0 = Vector.length ts + if Vector.isEmpty ts then unit else let @@ -181,7 +198,7 @@ val sum: t vector -> t = fn ts => - if 0 = Vector.length ts + if Vector.isEmpty ts then Error.bug "RepType.Type.sum: empty" else let @@ -193,8 +210,8 @@ Objptr opts => SOME opts | _ => NONE)) in - if 0 = Vector.length opts - then Vector.sub (ts, 0) + if Vector.isEmpty opts + then Vector.first ts else T {node = (Objptr (QuickSort.sortVector (opts, ObjptrTycon.<=))), width = WordSize.bits (WordSize.objptr ())} @@ -211,6 +228,21 @@ (Bits.- (WordSize.bits (WordSize.smallIntInfWord ()), Bits.one))))))) + + fun ofConst (c: Const.t): t = + let + datatype z = datatype Const.t + in + case c of + CSymbol _ => cpointer () + | IntInf _ => intInf () + | Null => cpointer () + | Real r => ofRealX r + | Word w => ofWordX w + | WordVector v => ofWordXVector v + end + + val deLabel: t -> Label.t option = fn t => case node t of @@ -222,10 +254,16 @@ case node t of Objptr opts => if 1 = Vector.length opts - then SOME (Vector.sub (opts, 0)) + then SOME (Vector.first opts) else NONE | _ => NONE + val deObjptrs: t -> ObjptrTycon.t vector option = + fn t => + case node t of + Objptr opts => SOME opts + | _ => NONE + val deReal: t -> RealSize.t option = fn t => case node t of @@ -326,8 +364,12 @@ else case node t of CPointer => C.CPointer - | GCState => C.CPointer - | Label _ => C.CPointer + | Label _ => + (case !Control.codegen of + Control.Codegen.AMD64Codegen => C.CPointer + | Control.Codegen.CCodegen => C.fromBits (width t) + | Control.Codegen.LLVMCodegen => C.fromBits (width t) + | Control.Codegen.X86Codegen => C.CPointer) | Real s => (case s of RealSize.R32 => C.Real32 @@ -339,76 +381,94 @@ val align: t * Bytes.t -> Bytes.t = fn (t, n) => C.align (toCType t, n) end - - fun bytesAndObjptrs (t: t): Bytes.t * int = - case node t of - Objptr _ => (Bytes.zero, 1) - | Seq ts => - (case Vector.peeki (ts, isObjptr o #2) of - NONE => (bytes t, 0) - | SOME (i, _) => - let - val b = bytes (seq (Vector.prefix (ts, i))) - val j = (Vector.length ts) - i - in - (b, j) - end) - | _ => (bytes t, 0) end structure ObjectType = struct + structure Prod = Prod structure ObjptrTycon = ObjptrTycon structure Runtime = Runtime type ty = Type.t datatype t = - Array of {elt: ty, - hasIdentity: bool} - | Normal of {hasIdentity: bool, - ty: ty} + Normal of {components: ty Prod.t, + hasIdentity: bool} + | Sequence of {components: ty Prod.t, + hasIdentity: bool} | Stack | Weak of Type.t option + fun deNormal t = + case t of + Normal {components, hasIdentity} => + {components = components, hasIdentity = hasIdentity} + | _ => Error.bug "ObjectType.deNormal" + + fun deSequence t = + case t of + Sequence {components, hasIdentity} => + {components = components, hasIdentity = hasIdentity} + | _ => Error.bug "ObjectType.deSequence" + + fun components t = + case t of + Normal {components, ...} => components + | Sequence {components, ...} => components + | _ => Error.bug "ObjectType.components" + + fun componentsSize t = + Prod.fold (components t, Bytes.zero, fn (ty, b) => + Bytes.+ (b, Type.bytes ty)) + fun layout (t: t) = let open Layout in case t of - Array {elt, hasIdentity} => - seq [str "Array ", - record [("elt", Type.layout elt), - ("hasIdentity", Bool.layout hasIdentity)]] - | Normal {hasIdentity, ty} => + Normal {components, hasIdentity} => seq [str "Normal ", - record [("hasIdentity", Bool.layout hasIdentity), - ("ty", Type.layout ty)]] + record [("components", Prod.layout (components, Type.layout)), + ("hasIdentity", Bool.layout hasIdentity)]] + | Sequence {components, hasIdentity} => + seq [str "Sequence ", + record [("components", Prod.layout (components, Type.layout)), + ("hasIdentity", Bool.layout hasIdentity)]] | Stack => str "Stack" | Weak t => seq [str "Weak ", Option.layout Type.layout t] end fun isOk (t: t): bool = - case t of - Array {elt, ...} => - let - val b = Type.width elt - in - Bits.> (b, Bits.zero) - andalso Bits.isByteAligned b - end - | Normal {ty, ...} => - let - val b = Bits.+ (Type.width ty, - Type.width (Type.objptrHeader ())) - in - not (Type.isUnit ty) - andalso (case !Control.align of - Control.Align4 => Bits.isWord32Aligned b - | Control.Align8 => Bits.isWord64Aligned b) - end - | Stack => true - | Weak to => Option.fold (to, true, fn (t,_) => Type.isObjptr t) - + let + fun componentsOk components = + Exn.withEscape + (fn escape => + ((ignore o Prod.fold) + (components, false, fn (ty, hasObjptr) => + if Bits.isPrim (Type.width ty) + then if Type.isObjptr ty + then true + else if hasObjptr + then escape false + else false + else escape false) + ; true)) + in + case t of + Normal {components, ...} => + componentsOk components + andalso + let + val b = Prod.fold (components, Type.width (Type.objptrHeader ()), + fn (ty, b) => Bits.+ (b, Type.width ty)) + in + case !Control.align of + Control.Align4 => Bits.isWord32Aligned b + | Control.Align8 => Bits.isWord64Aligned b + end + | Sequence {components, ...} => componentsOk components + | Stack => true + | Weak to => Option.fold (to, true, fn (t,_) => Type.isObjptr t) + end val stack = Stack val thread = fn () => @@ -419,8 +479,8 @@ case !Control.align of Control.Align4 => Bytes.fromInt 4 | Control.Align8 => Bytes.fromInt 8 - val bytesHeader = - Bits.toBytes (Control.Target.Size.header ()) + val bytesMetaData = + Bits.toBytes (Control.Target.Size.normalMetaData ()) val bytesCSize = Bits.toBytes (Control.Target.Size.csize ()) val bytesExnStack = @@ -429,7 +489,7 @@ Bits.toBytes (Type.width (Type.stack ())) val bytesObject = - Bytes.+ (bytesHeader, + Bytes.+ (bytesMetaData, Bytes.+ (bytesCSize, Bytes.+ (bytesExnStack, bytesStack))) @@ -439,12 +499,18 @@ in Type.bits (Bytes.toBits bytesPad) end + val components = + Vector.new3 (Type.csize (), Type.exnStack (), Type.stack ()) + val components = + Vector.map (components, fn ty => {elt = ty, isMutable = true}) + val components = + if Type.isUnit padding + then components + else Vector.concat [Vector.new1 {elt = padding, isMutable = false}, + components] in - Normal {hasIdentity = true, - ty = Type.seq (Vector.new4 (padding, - Type.csize (), - Type.exnStack (), - Type.stack ()))} + Normal {components = Prod.make components, + hasIdentity = true} end (* Order in the following vector matters. The basic pointer tycons must @@ -452,6 +518,8 @@ * STACK_TYPE_INDEX, * THREAD_TYPE_INDEX, * WEAK_GONE_TYPE_INDEX, + * REAL32_VECTOR_TYPE_INDEX, + * REAL64_VECTOR_TYPE_INDEX, * WORD8_VECTOR_TYPE_INDEX, * WORD16_VECTOR_TYPE_INDEX, * WORD32_VECTOR_TYPE_INDEX. @@ -459,45 +527,65 @@ *) val basic = fn () => let - fun wordVec i = - let - val b = Bits.fromInt i - in - (ObjptrTycon.wordVector b, - Array {hasIdentity = false, - elt = Type.word (WordSize.fromBits b)}) - end + fun realVec rs = + (ObjptrTycon.realVector rs, + Sequence {components = Prod.new1Immutable (Type.real rs), + hasIdentity = false}) + fun wordVec ws = + (ObjptrTycon.wordVector ws, + Sequence {components = Prod.new1Immutable (Type.word ws), + hasIdentity = false}) in Vector.fromList [(ObjptrTycon.stack, stack), (ObjptrTycon.thread, thread ()), (ObjptrTycon.weakGone, Weak NONE), - wordVec 8, - wordVec 32, - wordVec 16, - wordVec 64] + realVec RealSize.R32, + realVec RealSize.R64, + wordVec WordSize.word8, + wordVec WordSize.word32, + wordVec WordSize.word16, + wordVec WordSize.word64] end local structure R = Runtime.RObjectType + fun componentsToBytes components = + Vector.fold + (components, Bytes.zero, fn ({elt = ty, isMutable = _}, b) => + Bytes.+ (Type.bytes ty, b)) + fun componentsToRuntime components = + let + val components = Prod.dest components + in + case Vector.peeki (components, Type.isObjptr o #elt o #2) of + NONE => + {bytesNonObjptrs = componentsToBytes components, + numObjptrs = 0} + | SOME (i, _) => + {bytesNonObjptrs = componentsToBytes (Vector.prefix (components, i)), + numObjptrs = Vector.length components - i} + end in fun toRuntime (t: t): R.t = case t of - Array {elt, hasIdentity} => + Normal {components, hasIdentity} => let - val (b, nops) = Type.bytesAndObjptrs elt + val {bytesNonObjptrs, numObjptrs} = + componentsToRuntime components in - R.Array {hasIdentity = hasIdentity, - bytesNonObjptrs = b, - numObjptrs = nops} + R.Normal {hasIdentity = hasIdentity, + bytesNonObjptrs = bytesNonObjptrs, + numObjptrs = numObjptrs} end - | Normal {hasIdentity, ty} => + | Sequence {components, hasIdentity} => let - val (b, nops) = Type.bytesAndObjptrs ty + val {bytesNonObjptrs, numObjptrs} = + componentsToRuntime components in - R.Normal {hasIdentity = hasIdentity, - bytesNonObjptrs = b, - numObjptrs = nops} + R.Sequence {hasIdentity = hasIdentity, + bytesNonObjptrs = bytesNonObjptrs, + numObjptrs = numObjptrs} end | Stack => R.Stack | Weak to => R.Weak {gone = Option.isNone to} @@ -515,13 +603,11 @@ case f of AtomicState => word32 | CardMapAbsolute => cpointer () - | CurrentThread => thread () - | CurSourceSeqsIndex => word32 + | CurSourceSeqIndex => word32 | ExnStack => exnStack () | Frontier => cpointer () | Limit => cpointer () | LimitPlusSlop => cpointer () - | MaxFrameSize => word32 | SignalIsPending => word32 | StackBottom => cpointer () | StackLimit => cpointer () @@ -533,7 +619,6 @@ fun checkPrimApp {args, prim, result} = let - datatype z = datatype Prim.Name.t fun done (argsP, resultP) = let val argsP = Vector.fromList argsP @@ -572,6 +657,11 @@ val wordUnary = make wordOrBitsOrSeq end local + fun make f s = let val t = f s in done ([t], SOME bool) end + in + val wordUnaryP = make wordOrBitsOrSeq + end + local fun make f s = let val t = f s in done ([t, t], SOME t) end in val realBinary = make real @@ -581,214 +671,304 @@ fun make f s = let val t = f s in done ([t, t], SOME bool) end in val realCompare = make real + val wordBinaryP = make wordOrBitsOrSeq val wordCompare = make wordOrBitsOrSeq val objptrCompare = make (fn _ => objptr) () end fun realTernary s = done ([real s, real s, real s], SOME (real s)) fun wordShift s = done ([wordOrBitsOrSeq s, shiftArg], SOME (wordOrBitsOrSeq s)) in - case Prim.name prim of - CPointer_add => done ([cpointer, cptrdiff], SOME cpointer) - | CPointer_diff => done ([cpointer, cpointer], SOME cptrdiff) - | CPointer_equal => done ([cpointer, cpointer], SOME bool) - | CPointer_fromWord => done ([csize], SOME cpointer) - | CPointer_lt => done ([cpointer, cpointer], SOME bool) - | CPointer_sub => done ([cpointer, cptrdiff], SOME cpointer) - | CPointer_toWord => done ([cpointer], SOME csize) - | FFI f => done (Vector.toListMap (CFunction.args f, - fn t' => fn t => equals (t', t)), - SOME (fn t => equals (t, CFunction.return f))) - | FFI_Symbol _ => done ([], SOME cpointer) - | MLton_touch => done ([objptr], NONE) - | Real_Math_acos s => realUnary s - | Real_Math_asin s => realUnary s - | Real_Math_atan s => realUnary s - | Real_Math_atan2 s => realBinary s - | Real_Math_cos s => realUnary s - | Real_Math_exp s => realUnary s - | Real_Math_ln s => realUnary s - | Real_Math_log10 s => realUnary s - | Real_Math_sin s => realUnary s - | Real_Math_sqrt s => realUnary s - | Real_Math_tan s => realUnary s - | Real_abs s => realUnary s - | Real_add s => realBinary s - | Real_castToWord (s, s') => done ([real s], SOME (word s')) - | Real_div s => realBinary s - | Real_equal s => realCompare s - | Real_ldexp s => done ([real s, cint], SOME (real s)) - | Real_le s => realCompare s - | Real_lt s => realCompare s - | Real_mul s => realBinary s - | Real_muladd s => realTernary s - | Real_mulsub s => realTernary s - | Real_neg s => realUnary s - | Real_qequal s => realCompare s - | Real_rndToReal (s, s') => done ([real s], SOME (real s')) - | Real_rndToWord (s, s', _) => done ([real s], SOME (word s')) - | Real_round s => realUnary s - | Real_sub s => realBinary s - | Thread_returnToC => done ([], NONE) - | Word_add s => wordBinary s - | Word_addCheck (s, _) => wordBinary s - | Word_andb s => wordBinary s - | Word_castToReal (s, s') => done ([word s], SOME (real s')) - | Word_equal s => (wordCompare s) orelse objptrCompare - | Word_extdToWord (s, s', _) => done ([wordOrBitsOrSeq s], - SOME (wordOrBitsOrSeq s')) - | Word_lshift s => wordShift s - | Word_lt (s, _) => wordCompare s - | Word_mul (s, _) => wordBinary s - | Word_mulCheck (s, _) => wordBinary s - | Word_neg s => wordUnary s - | Word_negCheck s => wordUnary s - | Word_notb s => wordUnary s - | Word_orb s => wordBinary s - | Word_quot (s, _) => wordBinary s - | Word_rem (s, _) => wordBinary s - | Word_rndToReal (s, s', _) => done ([word s], SOME (real s')) - | Word_rol s => wordShift s - | Word_ror s => wordShift s - | Word_rshift (s, _) => wordShift s - | Word_sub s => wordBinary s - | Word_subCheck (s, _) => wordBinary s - | Word_xorb s => wordBinary s + case prim of + Prim.CFunction f => done (Vector.toListMap (CFunction.args f, + fn t' => fn t => equals (t', t)), + SOME (fn t => equals (t, CFunction.return f))) + | Prim.CPointer_add => done ([cpointer, cptrdiff], SOME cpointer) + | Prim.CPointer_diff => done ([cpointer, cpointer], SOME cptrdiff) + | Prim.CPointer_equal => done ([cpointer, cpointer], SOME bool) + | Prim.CPointer_fromWord => done ([csize], SOME cpointer) + | Prim.CPointer_lt => done ([cpointer, cpointer], SOME bool) + | Prim.CPointer_sub => done ([cpointer, cptrdiff], SOME cpointer) + | Prim.CPointer_toWord => done ([cpointer], SOME csize) + | Prim.MLton_touch => done ([objptr], NONE) + | Prim.Real_Math_acos s => realUnary s + | Prim.Real_Math_asin s => realUnary s + | Prim.Real_Math_atan s => realUnary s + | Prim.Real_Math_atan2 s => realBinary s + | Prim.Real_Math_cos s => realUnary s + | Prim.Real_Math_exp s => realUnary s + | Prim.Real_Math_ln s => realUnary s + | Prim.Real_Math_log10 s => realUnary s + | Prim.Real_Math_sin s => realUnary s + | Prim.Real_Math_sqrt s => realUnary s + | Prim.Real_Math_tan s => realUnary s + | Prim.Real_abs s => realUnary s + | Prim.Real_add s => realBinary s + | Prim.Real_castToWord (s, s') => done ([real s], SOME (word s')) + | Prim.Real_div s => realBinary s + | Prim.Real_equal s => realCompare s + | Prim.Real_ldexp s => done ([real s, cint], SOME (real s)) + | Prim.Real_le s => realCompare s + | Prim.Real_lt s => realCompare s + | Prim.Real_mul s => realBinary s + | Prim.Real_muladd s => realTernary s + | Prim.Real_mulsub s => realTernary s + | Prim.Real_neg s => realUnary s + | Prim.Real_qequal s => realCompare s + | Prim.Real_rndToReal (s, s') => done ([real s], SOME (real s')) + | Prim.Real_rndToWord (s, s', _) => done ([real s], SOME (word s')) + | Prim.Real_round s => realUnary s + | Prim.Real_sub s => realBinary s + | Prim.Thread_returnToC => done ([], NONE) + | Prim.Word_add s => wordBinary s + | Prim.Word_addCheckP (s, _) => wordBinaryP s + | Prim.Word_andb s => wordBinary s + | Prim.Word_castToReal (s, s') => done ([word s], SOME (real s')) + | Prim.Word_equal s => (wordCompare s) orelse objptrCompare + | Prim.Word_extdToWord (s, s', _) => done ([wordOrBitsOrSeq s], + SOME (wordOrBitsOrSeq s')) + | Prim.Word_lshift s => wordShift s + | Prim.Word_lt (s, _) => wordCompare s + | Prim.Word_mul (s, _) => wordBinary s + | Prim.Word_mulCheckP (s, _) => wordBinaryP s + | Prim.Word_neg s => wordUnary s + | Prim.Word_negCheckP (s, _) => wordUnaryP s + | Prim.Word_notb s => wordUnary s + | Prim.Word_orb s => wordBinary s + | Prim.Word_quot (s, _) => wordBinary s + | Prim.Word_rem (s, _) => wordBinary s + | Prim.Word_rndToReal (s, s', _) => done ([word s], SOME (real s')) + | Prim.Word_rol s => wordShift s + | Prim.Word_ror s => wordShift s + | Prim.Word_rshift (s, _) => wordShift s + | Prim.Word_sub s => wordBinary s + | Prim.Word_subCheckP (s, _) => wordBinaryP s + | Prim.Word_xorb s => wordBinary s | _ => Error.bug (concat ["RepType.checkPrimApp got strange prim: ", Prim.toString prim]) end -fun checkOffset {base, isVector, offset, result} = - Exn.withEscape (fn escape => - let - fun getTys ty = - case node ty of - Seq tys => Vector.toList tys - | _ => [ty] - - fun dropTys (tys, bits) = - let - fun loop (tys, bits) = - if Bits.equals (bits, Bits.zero) - then tys - else (case tys of - [] => escape false - | ty::tys => - let - val b = width ty - in - if Bits.>= (bits, b) - then loop (tys, Bits.- (bits, b)) - else (case node ty of - Bits => (Type.bits (Bits.- (b, bits))) :: tys - | _ => escape false) - end) - in - if Bits.< (bits, Bits.zero) - then escape false - else loop (tys, bits) - end - val dropTys = - Trace.trace2 - ("RepType.checkOffset.dropTys", - List.layout Type.layout, Bits.layout, - List.layout Type.layout) - dropTys - fun takeTys (tys, bits) = - let - fun loop (tys, bits, acc) = - if Bits.equals (bits, Bits.zero) - then acc - else (case tys of - [] => escape false - | ty::tys => - let - val b = width ty - in - if Bits.>= (bits, b) - then loop (tys, Bits.- (bits, b), ty :: acc) - else (case node ty of - Bits => (Type.bits bits) :: acc - | _ => escape false) - end) - in - if Bits.< (bits, Bits.zero) - then escape false - else List.rev (loop (tys, bits, [])) - end - fun extractTys (tys, dropBits, takeBits) = - takeTys (dropTys (tys, dropBits), takeBits) - - fun equalsTys (tys1, tys2) = - case (tys1, tys2) of - ([], []) => true - | (ty1::tys1, ty2::tys2) => - equals (ty1, ty2) - andalso equalsTys (tys1, tys2) - | _ => false +local - val alignBits = - case !Control.align of - Control.Align4 => Bits.inWord32 - | Control.Align8 => Bits.inWord64 - - val baseBits = width base - val baseTys = getTys base - - val offsetBytes = offset - val offsetBits = Bytes.toBits offsetBytes - - val resultBits = width result - val resultTys = getTys result - - val adjOffsetBits = - if Control.Target.bigEndian () - andalso Bits.< (resultBits, Bits.inWord32) - andalso Bits.> (baseBits, resultBits) - then let - val paddedComponentBits = - if isVector - then Bits.min (baseBits, Bits.inWord32) - else Bits.inWord32 - val paddedComponentOffsetBits = - Bits.alignDown (offsetBits, {alignment = paddedComponentBits}) - in - Bits.+ (paddedComponentOffsetBits, - Bits.- (paddedComponentBits, - Bits.- (Bits.+ (resultBits, offsetBits), - paddedComponentOffsetBits))) - end - else offsetBits - in - List.exists - ([Bits.inWord8, Bits.inWord16, Bits.inWord32, Bits.inWord64], fn primBits => - Bits.equals (resultBits, primBits) - andalso Bits.isAligned (offsetBits, {alignment = Bits.min (primBits, alignBits)})) - andalso - equalsTys (resultTys, extractTys (baseTys, adjOffsetBits, resultBits)) - end) +fun extractTys (tys, dropBits, takeBits) = + Exn.withEscape + (fn escape => + let + fun dropTys (tys, bits) = + let + fun loop (tys, bits) = + if Bits.equals (bits, Bits.zero) + then tys + else (case tys of + [] => escape NONE + | ty::tys => + let + val b = width ty + in + if Bits.>= (bits, b) + then loop (tys, Bits.- (bits, b)) + else (case node ty of + Bits => (Type.bits (Bits.- (b, bits))) :: tys + | _ => escape NONE) + end) + in + if Bits.< (bits, Bits.zero) + then escape NONE + else loop (tys, bits) + end + val dropTys = + Trace.trace2 + ("RepType.checkOffset.dropTys", + List.layout Type.layout, Bits.layout, + List.layout Type.layout) + dropTys + fun takeTys (tys, bits) = + let + fun loop (tys, bits, acc) = + if Bits.equals (bits, Bits.zero) + then acc + else (case tys of + [] => escape NONE + | ty::tys => + let + val b = width ty + in + if Bits.>= (bits, b) + then loop (tys, Bits.- (bits, b), ty :: acc) + else (case node ty of + Bits => (Type.bits bits) :: acc + | _ => escape NONE) + end) + in + if Bits.< (bits, Bits.zero) + then escape NONE + else List.rev (loop (tys, bits, [])) + end + val takeTys = + Trace.trace2 + ("RepType.checkOffset.takeTys", + List.layout Type.layout, Bits.layout, + List.layout Type.layout) + takeTys + in + SOME (takeTys (dropTys (tys, dropBits), takeBits)) + end) +val extractTys = + Trace.trace3 + ("RepType.checkOffset.extractTys", + List.layout Type.layout, Bits.layout, Bits.layout, + Option.layout (List.layout Type.layout)) + extractTys + +fun getTys ty = + case node ty of + Seq tys => Vector.toList tys + | _ => [ty] + +in + +fun checkOffset {components, isSequence, mustBeMutable, offset, result} = + Exn.withEscape + (fn escape0 => + let + val ({elt = componentTy, isMutable = componentIsMutable, ...}, componentOffset) = + Exn.withEscape + (fn escape1 => + let + val _ = + Vector.fold + (Prod.dest components, Bytes.zero, + fn (comp as {elt = compTy, ...}, compOffset) => + let + val compOffset' = Bytes.+ (compOffset, Type.bytes compTy) + in + if Bytes.< (offset, compOffset') + then escape1 (comp, compOffset) + else compOffset' + end) + in + escape0 false + end) + + val componentBits = Type.width componentTy + val componentTys = getTys componentTy + + val offsetBytes = Bytes.- (offset, componentOffset) + val offsetBits = Bytes.toBits offsetBytes + + val resultBits = Type.width result + val resultTys = getTys result + + val alignBits = + case !Control.align of + Control.Align4 => Bits.inWord32 + | Control.Align8 => Bits.inWord64 + + val adjOffsetBits = + if Control.Target.bigEndian () + andalso Bits.< (resultBits, Bits.inWord32) + andalso Bits.> (componentBits, resultBits) + then let + val paddedComponentBits = + if isSequence + then Bits.min (componentBits, Bits.inWord32) + else Bits.inWord32 + val paddedComponentOffsetBits = + Bits.alignDown (offsetBits, {alignment = paddedComponentBits}) + in + Bits.+ (paddedComponentOffsetBits, + Bits.- (paddedComponentBits, + Bits.- (Bits.+ (resultBits, offsetBits), + paddedComponentOffsetBits))) + end + else offsetBits + in + List.exists + (Bits.prims, fn primBits => + Bits.equals (resultBits, primBits) + andalso Bits.isAligned (offsetBits, {alignment = Bits.min (primBits, alignBits)})) + andalso + (case extractTys (componentTys, adjOffsetBits, resultBits) of + NONE => false + | SOME tys => List.equals (resultTys, tys, Type.equals)) + andalso + (not mustBeMutable orelse componentIsMutable) + end) + +(* Check that offset/result exactly corresponds to a component; + * Doesn't work with something like: + * components = ([Word10, Word14, Word8]) + * offset = 3 + * result = Word8 + * because while the Word10 and Word14 sub-components are accessed with + * `Select.IndirectUnpack` (by reading/writing the whole `Word32` with + * shifting/masking), the `Word8` sub-component is accessed with + * `Select.Indirect` (because the packing results in the `Word8` sub-component + * ending up with an 8-bit aligned offset); see `makeSubword32s` in + * `PackedRepresentation`. + *) +fun checkOffsetAlt {components, isSequence = _, mustBeMutable, offset, result} = + Exn.withEscape + (fn escape => + (ignore + (Vector.fold + (Prod.dest components, Bytes.zero, + fn ({elt = compTy, isMutable = compIsMutable}, compOffset) => + if Bytes.equals (compOffset, offset) + then escape (equals (compTy, result) + andalso + (not mustBeMutable orelse compIsMutable)) + else Bytes.+ (compOffset, Type.bytes compTy))) + ; false)) +val _ = checkOffsetAlt + +end + +val checkOffset = + Trace.trace + ("RepType.checkOffset", + fn {components, isSequence, mustBeMutable, offset, result} => + let + open Layout + in + record [("components", Prod.layout (components, Type.layout)), + ("isSequence", Bool.layout isSequence), + ("mustBeMutable", Bool.layout mustBeMutable), + ("offset", Bytes.layout offset), + ("result", Type.layout result)] + end, + Bool.layout) + checkOffset -fun offsetIsOk {base, offset, tyconTy, result} = +fun offsetIsOk {base, mustBeMutable, offset, tyconTy, result} = case node base of - Objptr opts => + CPointer => true + | Objptr opts => if Bytes.equals (offset, Runtime.headerOffset ()) then equals (result, objptrHeader ()) - else if Bytes.equals (offset, Runtime.arrayLengthOffset ()) + else if Bytes.equals (offset, Runtime.sequenceLengthOffset ()) + then (1 = Vector.length opts) + andalso (case tyconTy (Vector.sub (opts, 0)) of + ObjectType.Sequence _ => true + | _ => false) + andalso (equals (result, seqIndex ())) + else if Bytes.equals (offset, Runtime.sequenceCounterOffset ()) then (1 = Vector.length opts) andalso (case tyconTy (Vector.sub (opts, 0)) of - ObjectType.Array _ => true + ObjectType.Sequence _ => true | _ => false) andalso (equals (result, seqIndex ())) else (1 = Vector.length opts) andalso (case tyconTy (Vector.sub (opts, 0)) of - ObjectType.Normal {ty, ...} => - checkOffset {base = ty, - isVector = false, + ObjectType.Normal {components, ...} => + checkOffset {components = components, + isSequence = false, + mustBeMutable = mustBeMutable, offset = offset, result = result} | _ => false) | _ => false -fun arrayOffsetIsOk {base, index, offset, tyconTy, result, scale} = +fun sequenceOffsetIsOk {base, mustBeMutable, index, offset, tyconTy, result, scale} = case node base of CPointer => (equals (index, csize ())) @@ -805,8 +985,9 @@ | Objptr opts => (equals (index, seqIndex ())) andalso (1 = Vector.length opts) - andalso (case tyconTy (Vector.sub (opts, 0)) of - ObjectType.Array {elt, ...} => + andalso (case tyconTy (Vector.first opts) of + ObjectType.Sequence {components, ...} => + let val elt = Type.seq (Vector.map (Prod.dest components, #elt)) in if equals (elt, word8) then (* special case for PackWord operations *) (case node result of @@ -819,10 +1000,12 @@ else (case Scale.fromBytes (bytes elt) of NONE => scale = Scale.One | SOME s => scale = s) - andalso (checkOffset {base = elt, - isVector = true, + andalso (checkOffset {components = components, + isSequence = true, + mustBeMutable = mustBeMutable, offset = offset, result = result}) + end | _ => false) | _ => false @@ -844,19 +1027,20 @@ local fun make b = fn () => T {args = Vector.new3 (Type.gcState (), Type.csize (), Type.bool), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = true, - mayGC = true, - maySwitchThreads = b, - modifiesFrontier = true, - prototype = (Vector.new3 (CType.cpointer, CType.csize (), CType.bool), - NONE), - readsStackTop = true, - return = Type.unit, - symbolScope = SymbolScope.Private, - target = Direct "GC_collect", - writesStackTop = true} + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = SOME 1, + mayGC = true, + maySwitchThreadsFrom = b, + maySwitchThreadsTo = b, + modifiesFrontier = true, + readsStackTop = true, + writesStackTop = true}, + prototype = (Vector.new3 (CType.cpointer, CType.csize (), CType.bool), NONE), + return = Type.unit, + symbolScope = SymbolScope.Private, + target = Direct "GC_collect"} val t = make true val f = make false in diff -Nru mlton-20130715/mlton/backend/rep-type.sig mlton-20210117+dfsg/mlton/backend/rep-type.sig --- mlton-20130715/mlton/backend/rep-type.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rep-type.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2014,2017,2019-2020 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -9,47 +10,40 @@ sig structure CFunction: C_FUNCTION structure CType: C_TYPE + structure Const: CONST structure Label: LABEL structure ObjptrTycon: OBJPTR_TYCON structure Prim: PRIM + structure Prod: PROD structure RealSize: REAL_SIZE + structure RealX: REAL_X structure Runtime: RUNTIME - structure Scale: SCALE structure WordSize: WORD_SIZE structure WordX: WORD_X structure WordXVector: WORD_X_VECTOR sharing CFunction = Prim.CFunction - sharing RealSize = Prim.RealSize - sharing WordSize = Prim.WordSize = WordX.WordSize - sharing WordX = WordXVector.WordX + sharing RealSize = ObjptrTycon.RealSize = Prim.RealSize = RealX.RealSize + sharing RealX = Const.RealX + sharing Runtime = ObjptrTycon.Runtime + sharing WordSize = ObjptrTycon.WordSize = Prim.WordSize = WordX.WordSize + sharing WordX = Const.WordX = RealX.WordX = WordXVector.WordX + sharing WordXVector = Const.WordXVector end signature REP_TYPE = sig include REP_TYPE_STRUCTS - structure ObjectType: OBJECT_TYPE - (* - * - Junk is used for padding. You can stick any value in, but you - * can't get any value out. - * - In Seq, the components are listed in increasing order of - * address. - * - In Seq ts, length ts <> 1 - * - In Sum ts, length ts >= 2 - * - In Sum ts, all t in ts must have same width. - * - In Sum ts, there are no duplicates, and the types are in order. - *) type t - sharing type t = ObjectType.ty + + structure ObjectType: OBJECT_TYPE + sharing type ObjectType.ty = t + sharing ObjectType.Prod = Prod + (* sharing ObjectType.ObjptrTycon = ObjptrTycon *) + (* sharing ObjectType.Runtime = Runtime *) val bogusWord: t -> WordX.t val align: t * Bytes.t -> Bytes.t - val arrayOffsetIsOk: {base: t, - index: t, - offset: Bytes.t, - tyconTy: ObjptrTycon.t -> ObjectType.t, - result: t, - scale: Scale.t} -> bool val bits: Bits.t -> t val bool: t val bytes: t -> Bytes.t @@ -62,14 +56,17 @@ val cpointer: unit -> t val csize: unit -> t val cint: unit -> t + val compareRes: t val deLabel: t -> Label.t option val deObjptr: t -> ObjptrTycon.t option + val deObjptrs: t -> ObjptrTycon.t vector option val deReal: t -> RealSize.t option val deSeq: t -> t vector option val deWord: t -> WordSize.t option val equals: t * t -> bool val exnStack: unit -> t val gcState: unit -> t + val hash: t -> word val exists: t * (t -> bool) -> bool val intInf: unit -> t val isCPointer: t -> bool @@ -79,10 +76,13 @@ val label: Label.t -> t val layout: t -> Layout.t val name: t -> string (* simple one letter abbreviation *) + val ofConst: Const.t -> t val ofGCField: Runtime.GCField.t -> t + val ofRealX: RealX.t -> t val ofWordXVector: WordXVector.t -> t val ofWordX: WordX.t -> t val offsetIsOk: {base: t, + mustBeMutable: bool, offset: Bytes.t, tyconTy: ObjptrTycon.t -> ObjectType.t, result: t} -> bool @@ -92,6 +92,13 @@ val resize: t * Bits.t -> t val seq: t vector -> t val seqIndex: unit -> t + val sequenceOffsetIsOk: {base: t, + index: t, + mustBeMutable: bool, + offset: Bytes.t, + tyconTy: ObjptrTycon.t -> ObjectType.t, + result: t, + scale: Scale.t} -> bool val shiftArg: t val string: unit -> t val sum: t vector -> t diff -Nru mlton-20130715/mlton/backend/rssa.fun mlton-20210117+dfsg/mlton/backend/rssa.fun --- mlton-20130715/mlton/backend/rssa.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,1849 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. +(* Copyright (C) 2019 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) functor Rssa (S: RSSA_STRUCTS): RSSA = -struct - -open S - -local - open Prim -in - structure ApplyArg = ApplyArg - structure ApplyResult = ApplyResult -end -local - open Runtime -in - structure CFunction = CFunction - structure GCField = GCField -end - -fun constrain (ty: Type.t): Layout.t = - let - open Layout - in - if !Control.showTypes - then seq [str ": ", Type.layout ty] - else empty - end - -structure Operand = - struct - datatype t = - ArrayOffset of {base: t, - index: t, - offset: Bytes.t, - scale: Scale.t, - ty: Type.t} - | Cast of t * Type.t - | Const of Const.t - | EnsuresBytesFree - | GCState - | Offset of {base: t, - offset: Bytes.t, - ty: Type.t} - | ObjptrTycon of ObjptrTycon.t - | Runtime of GCField.t - | Var of {var: Var.t, - ty: Type.t} - - val null = Const Const.null - - val word = Const o Const.word - - fun zero s = word (WordX.fromIntInf (0, s)) - - fun bool b = - word (WordX.fromIntInf (if b then 1 else 0, WordSize.bool)) - - val ty = - fn ArrayOffset {ty, ...} => ty - | Cast (_, ty) => ty - | Const c => - let - datatype z = datatype Const.t - in - case c of - IntInf _ => Type.intInf () - | Null => Type.cpointer () - | Real r => Type.real (RealX.size r) - | Word w => Type.ofWordX w - | WordVector v => Type.ofWordXVector v - end - | EnsuresBytesFree => Type.csize () - | GCState => Type.gcState () - | Offset {ty, ...} => ty - | ObjptrTycon _ => Type.objptrHeader () - | Runtime z => Type.ofGCField z - | Var {ty, ...} => ty - - fun layout (z: t): Layout.t = - let - open Layout - in - case z of - ArrayOffset {base, index, offset, scale, ty} => - seq [str (concat ["X", Type.name ty, " "]), - tuple [layout base, layout index, Scale.layout scale, - Bytes.layout offset]] - | Cast (z, ty) => - seq [str "Cast ", tuple [layout z, Type.layout ty]] - | Const c => seq [Const.layout c, constrain (ty z)] - | EnsuresBytesFree => str "" - | GCState => str "" - | Offset {base, offset, ty} => - seq [str (concat ["O", Type.name ty, " "]), - tuple [layout base, Bytes.layout offset], - constrain ty] - | ObjptrTycon opt => ObjptrTycon.layout opt - | Runtime r => GCField.layout r - | Var {var, ...} => Var.layout var - end - - fun cast (z: t, t: Type.t): t = - if Type.equals (t, ty z) - then z - else Cast (z, t) - - val cast = Trace.trace2 ("Rssa.Operand.cast", layout, Type.layout, layout) cast - - val rec isLocation = - fn ArrayOffset _ => true - | Cast (z, _) => isLocation z - | Offset _ => true - | Runtime _ => true - | Var _ => true - | _ => false - - fun 'a foldVars (z: t, a: 'a, f: Var.t * 'a -> 'a): 'a = - case z of - ArrayOffset {base, index, ...} => - foldVars (index, foldVars (base, a, f), f) - | Cast (z, _) => foldVars (z, a, f) - | Offset {base, ...} => foldVars (base, a, f) - | Var {var, ...} => f (var, a) - | _ => a - - fun replaceVar (z: t, f: Var.t -> t): t = - let - fun loop (z: t): t = - case z of - ArrayOffset {base, index, offset, scale, ty} => - ArrayOffset {base = loop base, - index = loop index, - offset = offset, - scale = scale, - ty = ty} - | Cast (t, ty) => Cast (loop t, ty) - | Offset {base, offset, ty} => - Offset {base = loop base, - offset = offset, - ty = ty} - | Var {var, ...} => f var - | _ => z - in - loop z - end - - end - -structure Switch = - struct - local - structure S = Switch (open S - structure Type = Type - structure Use = Operand) - in - open S - end - - fun replaceVar (T {cases, default, size, test}, f) = - T {cases = cases, - default = default, - size = size, - test = Operand.replaceVar (test, f)} - end - -structure Statement = - struct - datatype t = - Bind of {dst: Var.t * Type.t, - isMutable: bool, - src: Operand.t} - | Move of {dst: Operand.t, - src: Operand.t} - | Object of {dst: Var.t * Type.t, - header: word, - size: Bytes.t} - | PrimApp of {args: Operand.t vector, - dst: (Var.t * Type.t) option, - prim: Type.t Prim.t} - | Profile of ProfileExp.t - | ProfileLabel of ProfileLabel.t - | SetExnStackLocal - | SetExnStackSlot - | SetHandler of Label.t - | SetSlotExnStack - - fun 'a foldDefUse (s, a: 'a, {def: Var.t * Type.t * 'a -> 'a, - use: Var.t * 'a -> 'a}): 'a = - let - fun useOperand (z: Operand.t, a) = Operand.foldVars (z, a, use) - in - case s of - Bind {dst = (x, t), src, ...} => def (x, t, useOperand (src, a)) - | Move {dst, src} => useOperand (src, useOperand (dst, a)) - | Object {dst = (dst, ty), ...} => def (dst, ty, a) - | PrimApp {dst, args, ...} => - Vector.fold (args, - Option.fold (dst, a, fn ((x, t), a) => - def (x, t, a)), - useOperand) - | Profile _ => a - | ProfileLabel _ => a - | SetExnStackLocal => a - | SetExnStackSlot => a - | SetHandler _ => a - | SetSlotExnStack => a - end - - fun foreachDefUse (s: t, {def, use}) = - foldDefUse (s, (), {def = fn (x, t, ()) => def (x, t), - use = use o #1}) - - fun 'a foldDef (s: t, a: 'a, f: Var.t * Type.t * 'a -> 'a): 'a = - foldDefUse (s, a, {def = f, use = #2}) - - fun foreachDef (s:t , f: Var.t * Type.t -> unit) = - foldDef (s, (), fn (x, t, ()) => f (x, t)) - - fun 'a foldUse (s: t, a: 'a, f: Var.t * 'a -> 'a) = - foldDefUse (s, a, {def = #3, use = f}) - - fun foreachUse (s, f) = foldUse (s, (), f o #1) - - fun replaceUses (s: t, f: Var.t -> Operand.t): t = - let - fun oper (z: Operand.t): Operand.t = - Operand.replaceVar (z, f) - in - case s of - Bind {dst, isMutable, src} => - Bind {dst = dst, - isMutable = isMutable, - src = oper src} - | Move {dst, src} => Move {dst = oper dst, src = oper src} - | Object _ => s - | PrimApp {args, dst, prim} => - PrimApp {args = Vector.map (args, oper), - dst = dst, - prim = prim} - | Profile _ => s - | ProfileLabel _ => s - | SetExnStackLocal => s - | SetExnStackSlot => s - | SetHandler _ => s - | SetSlotExnStack => s - end - - val layout = - let - open Layout - in - fn Bind {dst = (x, t), src, ...} => - seq [Var.layout x, constrain t, str " = ", Operand.layout src] - | Move {dst, src} => - mayAlign [Operand.layout dst, - seq [str "= ", Operand.layout src]] - | Object {dst = (dst, ty), header, size} => - mayAlign - [seq [Var.layout dst, constrain ty], - seq [str "= Object ", - record [("header", seq [str "0x", Word.layout header]), - ("size", Bytes.layout size)]]] - | PrimApp {dst, prim, args, ...} => - let - val rest = - seq [Prim.layout prim, str " ", - Vector.layout Operand.layout args] - in - case dst of - NONE => rest - | SOME (x, t) => - mayAlign [seq [Var.layout x, constrain t], - seq [str "= ", rest]] - end - | Profile e => ProfileExp.layout e - | ProfileLabel p => - seq [str "ProfileLabel ", ProfileLabel.layout p] - | SetExnStackLocal => str "SetExnStackLocal" - | SetExnStackSlot => str "SetExnStackSlot " - | SetHandler l => seq [str "SetHandler ", Label.layout l] - | SetSlotExnStack => str "SetSlotExnStack " - end - - val toString = Layout.toString o layout - - fun clear (s: t) = - foreachDef (s, Var.clear o #1) - - fun resize (src: Operand.t, dstTy: Type.t): Operand.t * t list = - let - val srcTy = Operand.ty src - - val (src, srcTy, ssSrc, dstTy, finishDst) = - case (Type.deReal srcTy, Type.deReal dstTy) of - (NONE, NONE) => - (src, srcTy, [], dstTy, fn dst => (dst, [])) - | (SOME rs, NONE) => - let - val ws = WordSize.fromBits (RealSize.bits rs) - val tmp = Var.newNoname () - val tmpTy = Type.word ws - in - (Operand.Var {ty = tmpTy, var = tmp}, - tmpTy, - [PrimApp {args = Vector.new1 src, - dst = SOME (tmp, tmpTy), - prim = Prim.realCastToWord (rs, ws)}], - dstTy, fn dst => (dst, [])) - end - | (NONE, SOME rs) => - let - val ws = WordSize.fromBits (RealSize.bits rs) - val tmp = Var.newNoname () - val tmpTy = Type.real rs - in - (src, srcTy, [], - Type.word ws, - fn dst => - (Operand.Var {ty = tmpTy, var = tmp}, - [PrimApp {args = Vector.new1 dst, - dst = SOME (tmp, tmpTy), - prim = Prim.wordCastToReal (ws, rs)}])) - end - | (SOME _, SOME _) => - (src, srcTy, [], dstTy, fn dst => (dst, [])) - - val srcW = Type.width srcTy - val dstW = Type.width dstTy - - val (dst, ssConv) = - if Bits.equals (srcW, dstW) - then (Operand.cast (src, dstTy), []) - else let - val tmp = Var.newNoname () - val tmpTy = dstTy - in - (Operand.Var {ty = tmpTy, var = tmp}, - [PrimApp {args = Vector.new1 src, - dst = SOME (tmp, tmpTy), - prim = (Prim.wordExtdToWord - (WordSize.fromBits srcW, - WordSize.fromBits dstW, - {signed = false}))}]) - end - - val (dst, ssDst) = finishDst dst - in - (dst, ssSrc @ ssConv @ ssDst) - end - end - -datatype z = datatype Statement.t - -structure Transfer = - struct - datatype t = - Arith of {args: Operand.t vector, - dst: Var.t, - overflow: Label.t, - prim: Type.t Prim.t, - success: Label.t, - ty: Type.t} - | CCall of {args: Operand.t vector, - func: Type.t CFunction.t, - return: Label.t option} - | Call of {args: Operand.t vector, - func: Func.t, - return: Return.t} - | Goto of {args: Operand.t vector, - dst: Label.t} - | Raise of Operand.t vector - | Return of Operand.t vector - | Switch of Switch.t - - fun layout t = - let - open Layout - in - case t of - Arith {args, dst, overflow, prim, success, ty} => - seq [str "Arith ", - record [("args", Vector.layout Operand.layout args), - ("dst", Var.layout dst), - ("overflow", Label.layout overflow), - ("prim", Prim.layout prim), - ("success", Label.layout success), - ("ty", Type.layout ty)]] - | CCall {args, func, return} => - seq [str "CCall ", - record [("args", Vector.layout Operand.layout args), - ("func", CFunction.layout (func, Type.layout)), - ("return", Option.layout Label.layout return)]] - | Call {args, func, return} => - seq [Func.layout func, str " ", - Vector.layout Operand.layout args, - str " ", Return.layout return] - | Goto {dst, args} => - seq [Label.layout dst, str " ", - Vector.layout Operand.layout args] - | Raise xs => seq [str "raise ", Vector.layout Operand.layout xs] - | Return xs => seq [str "return ", Vector.layout Operand.layout xs] - | Switch s => Switch.layout s - end - - fun bug () = - CCall {args = (Vector.new1 - (Operand.Const - (Const.string "control shouldn't reach here"))), - func = Type.BuiltInCFunction.bug (), - return = NONE} - - fun foreachFunc (t, f : Func.t -> unit) : unit = - case t of - Call {func, ...} => f func - | _ => () - - fun 'a foldDefLabelUse (t, a: 'a, - {def: Var.t * Type.t * 'a -> 'a, - label: Label.t * 'a -> 'a, - use: Var.t * 'a -> 'a}): 'a = - let - fun useOperand (z, a) = Operand.foldVars (z, a, use) - fun useOperands (zs: Operand.t vector, a) = - Vector.fold (zs, a, useOperand) - in - case t of - Arith {args, dst, overflow, success, ty, ...} => - let - val a = label (overflow, a) - val a = label (success, a) - val a = def (dst, ty, a) - val a = useOperands (args, a) - in - a - end - | CCall {args, return, ...} => - useOperands (args, - case return of - NONE => a - | SOME l => label (l, a)) - | Call {args, return, ...} => - useOperands (args, Return.foldLabel (return, a, label)) - | Goto {args, dst, ...} => label (dst, useOperands (args, a)) - | Raise zs => useOperands (zs, a) - | Return zs => useOperands (zs, a) - | Switch s => Switch.foldLabelUse (s, a, {label = label, - use = useOperand}) - end - - fun foreachDefLabelUse (t, {def, label, use}) = - foldDefLabelUse (t, (), {def = fn (x, t, ()) => def (x, t), - label = label o #1, - use = use o #1}) - - fun foldLabel (t, a, f) = foldDefLabelUse (t, a, {def = #3, - label = f, - use = #2}) - - fun foreachLabel (t, f) = foldLabel (t, (), f o #1) - - fun foldDef (t, a, f) = foldDefLabelUse (t, a, {def = f, - label = #2, - use = #2}) - - fun foreachDef (t, f) = - foldDef (t, (), fn (x, t, ()) => f (x, t)) - - fun foldUse (t, a, f) = foldDefLabelUse (t, a, {def = #3, - label = #2, - use = f}) - - fun foreachUse (t, f) = foldUse (t, (), f o #1) - - fun clear (t: t): unit = - foreachDef (t, Var.clear o #1) - - local - fun make i = WordX.fromIntInf (i, WordSize.bool) - in - fun ifBool (test, {falsee, truee}) = - Switch (Switch.T - {cases = Vector.new2 ((make 0, falsee), (make 1, truee)), - default = NONE, - size = WordSize.bool, - test = test}) - fun ifZero (test, {falsee, truee}) = - Switch (Switch.T - {cases = Vector.new1 (make 0, truee), - default = SOME falsee, - size = WordSize.bool, - test = test}) - end - - fun replaceUses (t: t, f: Var.t -> Operand.t): t = - let - fun oper z = Operand.replaceVar (z, f) - fun opers zs = Vector.map (zs, oper) - in - case t of - Arith {args, dst, overflow, prim, success, ty} => - Arith {args = opers args, - dst = dst, - overflow = overflow, - prim = prim, - success = success, - ty = ty} - | CCall {args, func, return} => - CCall {args = opers args, - func = func, - return = return} - | Call {args, func, return} => - Call {args = opers args, - func = func, - return = return} - | Goto {args, dst} => - Goto {args = opers args, - dst = dst} - | Raise zs => Raise (opers zs) - | Return zs => Return (opers zs) - | Switch s => Switch (Switch.replaceVar (s, f)) - end - end - -structure Kind = - struct - datatype t = - Cont of {handler: Handler.t} - | CReturn of {func: Type.t CFunction.t} - | Handler - | Jump - - fun layout k = - let - open Layout - in - case k of - Cont {handler} => - seq [str "Cont ", - record [("handler", Handler.layout handler)]] - | CReturn {func} => - seq [str "CReturn ", - record [("func", CFunction.layout (func, Type.layout))]] - | Handler => str "Handler" - | Jump => str "Jump" - end - - datatype frameStyle = None | OffsetsAndSize | SizeOnly - fun frameStyle (k: t): frameStyle = - case k of - Cont _ => OffsetsAndSize - | CReturn {func, ...} => - if CFunction.mayGC func - then OffsetsAndSize - else if !Control.profile = Control.ProfileNone - then None - else SizeOnly - | Handler => SizeOnly - | Jump => None - end - -local - open Layout -in - fun layoutFormals (xts: (Var.t * Type.t) vector) = - Vector.layout (fn (x, t) => - seq [Var.layout x, - if !Control.showTypes - then seq [str ": ", Type.layout t] - else empty]) - xts -end - -structure Block = - struct - datatype t = - T of {args: (Var.t * Type.t) vector, - kind: Kind.t, - label: Label.t, - statements: Statement.t vector, - transfer: Transfer.t} - - local - fun make f (T r) = f r - in - val kind = make #kind - val label = make #label - end - - fun clear (T {args, label, statements, transfer, ...}) = - (Vector.foreach (args, Var.clear o #1) - ; Label.clear label - ; Vector.foreach (statements, Statement.clear) - ; Transfer.clear transfer) - - fun layout (T {args, kind, label, statements, transfer, ...}) = - let - open Layout - in - align [seq [Label.layout label, str " ", - Vector.layout (fn (x, t) => - if !Control.showTypes - then seq [Var.layout x, str ": ", - Type.layout t] - else Var.layout x) args, - str " ", Kind.layout kind, str " = "], - indent (align - [align - (Vector.toListMap (statements, Statement.layout)), - Transfer.layout transfer], - 2)] - end - end - -structure Function = - struct - datatype t = T of {args: (Var.t * Type.t) vector, - blocks: Block.t vector, - name: Func.t, - raises: Type.t vector option, - returns: Type.t vector option, - start: Label.t} - - local - fun make f (T r) = f r - in - val blocks = make #blocks - val name = make #name - end - - fun dest (T r) = r - val new = T - - fun clear (T {name, args, blocks, ...}) = - (Func.clear name - ; Vector.foreach (args, Var.clear o #1) - ; Vector.foreach (blocks, Block.clear)) - - fun layoutHeader (T {args, name, raises, returns, start, ...}): Layout.t = - let - open Layout - in - seq [str "fun ", Func.layout name, - str " ", layoutFormals args, - if !Control.showTypes - then seq [str ": ", - record [("raises", - Option.layout - (Vector.layout Type.layout) raises), - ("returns", - Option.layout - (Vector.layout Type.layout) returns)]] - else empty, - str " = ", Label.layout start, str " ()"] - end - - fun layouts (f as T {blocks, ...}, output) = - (output (layoutHeader f) - ; Vector.foreach (blocks, fn b => - output (Layout.indent (Block.layout b, 2)))) - - fun layout (f as T {blocks, ...}) = - let - open Layout - in - align [layoutHeader f, - indent (align (Vector.toListMap (blocks, Block.layout)), 2)] - end - - fun foreachVar (T {args, blocks, ...}, f) = - (Vector.foreach (args, f) - ; (Vector.foreach - (blocks, fn Block.T {args, statements, transfer, ...} => - (Vector.foreach (args, f) - ; Vector.foreach (statements, fn s => Statement.foreachDef (s, f)) - ; Transfer.foreachDef (transfer, f))))) - - fun dfs (T {blocks, start, ...}, v) = - let - val numBlocks = Vector.length blocks - val {get = labelIndex, set = setLabelIndex, rem, ...} = - Property.getSetOnce (Label.plist, - Property.initRaise ("index", Label.layout)) - val _ = Vector.foreachi (blocks, fn (i, Block.T {label, ...}) => - setLabelIndex (label, i)) - val visited = Array.array (numBlocks, false) - fun visit (l: Label.t): unit = - let - val i = labelIndex l - in - if Array.sub (visited, i) - then () - else - let - val _ = Array.update (visited, i, true) - val b as Block.T {transfer, ...} = - Vector.sub (blocks, i) - val v' = v b - val _ = Transfer.foreachLabel (transfer, visit) - val _ = v' () - in - () - end - end - val _ = visit start - val _ = Vector.foreach (blocks, rem o Block.label) - in - () - end - - structure Graph = DirectedGraph - structure Node = Graph.Node - - fun dominatorTree (T {blocks, start, ...}): Block.t Tree.t = - let - open Dot - val g = Graph.new () - fun newNode () = Graph.newNode g - val {get = labelNode, ...} = - Property.get - (Label.plist, Property.initFun (fn _ => newNode ())) - val {get = nodeInfo: unit Node.t -> {block: Block.t}, - set = setNodeInfo, ...} = - Property.getSetOnce - (Node.plist, Property.initRaise ("info", Node.layout)) - val () = - Vector.foreach - (blocks, fn b as Block.T {label, ...}=> - setNodeInfo (labelNode label, {block = b})) - val () = - Vector.foreach - (blocks, fn Block.T {label, transfer, ...} => - let - val from = labelNode label - val _ = - Transfer.foreachLabel - (transfer, fn to => - (ignore o Graph.addEdge) - (g, {from = from, to = labelNode to})) - in - () - end) - in - Graph.dominatorTree (g, {root = labelNode start, - nodeValue = #block o nodeInfo}) - end - - fun dropProfile (f: t): t = - let - val {args, blocks, name, raises, returns, start} = dest f - val blocks = - Vector.map - (blocks, fn Block.T {args, kind, label, statements, transfer} => - Block.T {args = args, - kind = kind, - label = label, - statements = Vector.keepAll - (statements, - fn Statement.Profile _ => false - | Statement.ProfileLabel _ => false - | _ => true), - transfer = transfer}) - in - new {args = args, - blocks = blocks, - name = name, - raises = raises, - returns = returns, - start = start} - end - - fun shrink (f: t): t = - let - val {args, blocks, name, raises, returns, start} = dest f - val {get = labelInfo, rem, set = setLabelInfo, ...} = - Property.getSetOnce - (Label.plist, Property.initRaise ("info", Label.layout)) - val () = - Vector.foreach - (blocks, fn block as Block.T {label, ...} => - setLabelInfo (label, {block = block, - inline = ref false, - occurrences = ref 0})) - fun visitLabel l = Int.inc (#occurrences (labelInfo l)) - val () = visitLabel start - val () = - Vector.foreach (blocks, fn Block.T {transfer, ...} => - Transfer.foreachLabel (transfer, visitLabel)) - datatype z = datatype Statement.t - datatype z = datatype Transfer.t - val () = - Vector.foreach - (blocks, fn Block.T {transfer, ...} => - case transfer of - Goto {dst, ...} => - let - val {inline, occurrences, ...} = labelInfo dst - in - if 1 = !occurrences - then inline := true - else () - end - | _ => ()) - fun expand (ss: Statement.t vector list, t: Transfer.t) - : Statement.t vector * Transfer.t = - let - fun done () = (Vector.concat (rev ss), t) - in - case t of - Goto {args, dst} => - let - val {block, inline, ...} = labelInfo dst - in - if not (!inline) - then done () - else - let - val Block.T {args = formals, statements, - transfer, ...} = - block - val binds = - Vector.map2 - (formals, args, fn (dst, src) => - Bind {dst = dst, - isMutable = false, - src = src}) - in - expand (statements :: binds :: ss, transfer) - end - end - | _ => done () - end - val blocks = - Vector.fromList - (Vector.fold - (blocks, [], - fn (Block.T {args, kind, label, statements, transfer}, ac) => - let - val {inline, ...} = labelInfo label - in - if !inline - then ac - else - let - val (statements, transfer) = - expand ([statements], transfer) - in - Block.T {args = args, - kind = kind, - label = label, - statements = statements, - transfer = transfer} :: ac - end - end)) - val () = Vector.foreach (blocks, rem o Block.label) - in - new {args = args, - blocks = blocks, - name = name, - raises = raises, - returns = returns, - start = start} - end - end - -structure Program = - struct - datatype t = - T of {functions: Function.t list, - handlesSignals: bool, - main: Function.t, - objectTypes: ObjectType.t vector} - - fun clear (T {functions, main, ...}) = - (List.foreach (functions, Function.clear) - ; Function.clear main) - - fun layouts (T {functions, main, objectTypes, ...}, - output': Layout.t -> unit): unit = - let - open Layout - val output = output' - in - output (str "\nObjectTypes:") - ; Vector.foreachi (objectTypes, fn (i, ty) => - output (seq [str "opt_", Int.layout i, - str " = ", ObjectType.layout ty])) - ; output (str "\nMain:") - ; Function.layouts (main, output) - ; output (str "\nFunctions:") - ; List.foreach (functions, fn f => Function.layouts (f, output)) - end - - fun layoutStats (T {functions, main, objectTypes, ...}) = - let - val numStatements = ref 0 - val numBlocks = ref 0 - val _ = - List.foreach - (main::functions, fn f => - let - val {blocks, ...} = Function.dest f - in - Vector.foreach - (blocks, fn Block.T {statements, ...} => - (Int.inc numBlocks - ; numStatements := !numStatements + Vector.length statements)) - end) - val numFunctions = 1 + List.length functions - val numObjectTypes = Vector.length objectTypes - open Layout - in - align - [seq [str "num functions in program = ", Int.layout numFunctions], - seq [str "num blocks in program = ", Int.layout (!numBlocks)], - seq [str "num statements in program = ", Int.layout (!numStatements)], - seq [str "num object types in program = ", Int.layout (numObjectTypes)]] - end - - fun dropProfile (T {functions, handlesSignals, main, objectTypes}) = - (Control.profile := Control.ProfileNone - ; T {functions = List.map (functions, Function.dropProfile), - handlesSignals = handlesSignals, - main = Function.dropProfile main, - objectTypes = objectTypes}) - (* quell unused warning *) - val _ = dropProfile - - fun dfs (p, v) = - let - val T {functions, main, ...} = p - val functions = Vector.fromList (main::functions) - val numFunctions = Vector.length functions - val {get = funcIndex, set = setFuncIndex, rem, ...} = - Property.getSetOnce (Func.plist, - Property.initRaise ("index", Func.layout)) - val _ = Vector.foreachi (functions, fn (i, f) => - setFuncIndex (#name (Function.dest f), i)) - val visited = Array.array (numFunctions, false) - fun visit (f: Func.t): unit = - let - val i = funcIndex f - in - if Array.sub (visited, i) - then () - else - let - val _ = Array.update (visited, i, true) - val f = Vector.sub (functions, i) - val v' = v f - val _ = Function.dfs - (f, fn Block.T {transfer, ...} => - (Transfer.foreachFunc (transfer, visit) - ; fn () => ())) - val _ = v' () - in - () - end - end - val _ = visit (Function.name main) - val _ = Vector.foreach (functions, rem o Function.name) - in - () - end - - fun orderFunctions (p as T {handlesSignals, objectTypes, ...}) = - let - val functions = ref [] - val () = - dfs - (p, fn f => - let - val {args, name, raises, returns, start, ...} = - Function.dest f - val blocks = ref [] - val () = - Function.dfs - (f, fn b => - (List.push (blocks, b) - ; fn () => ())) - val f = Function.new {args = args, - blocks = Vector.fromListRev (!blocks), - name = name, - raises = raises, - returns = returns, - start = start} - in - List.push (functions, f) - ; fn () => () - end) - val (main, functions) = - case List.rev (!functions) of - main::functions => (main, functions) - | _ => Error.bug "Rssa.orderFunctions: main/functions" - in - T {functions = functions, - handlesSignals = handlesSignals, - main = main, - objectTypes = objectTypes} - end - - fun copyProp (T {functions, handlesSignals, main, objectTypes, ...}): t = - let - val tracePrimApply = - Trace.trace3 - ("Rssa.copyProp.primApply", - Prim.layout, - List.layout (ApplyArg.layout (Var.layout o #var)), - Layout.ignore, - ApplyResult.layout (Var.layout o #var)) - val {get = replaceVar: Var.t -> Operand.t, - set = setReplaceVar, ...} = - Property.getSetOnce - (Var.plist, Property.initRaise ("replacement", Var.layout)) - fun dontReplace (x: Var.t, t: Type.t): unit = - setReplaceVar (x, Operand.Var {var = x, ty = t}) - fun loopStatement (s: Statement.t): Statement.t option = - let - val s = Statement.replaceUses (s, replaceVar) - fun keep () = - (Statement.foreachDef (s, dontReplace) - ; SOME s) - in - case s of - Bind {dst = (dst, dstTy), isMutable, src} => - if isMutable - then keep () - else - let - datatype z = datatype Operand.t - fun getSrc src = - case src of - Cast (src, _) => getSrc src - | Const _ => SOME src - | Var _ => SOME src - | _ => NONE - in - case getSrc src of - NONE => keep () - | SOME src => - let - val src = - if Type.equals (Operand.ty src, dstTy) - then src - else Cast (src, dstTy) - in - setReplaceVar (dst, src) - ; NONE - end - end - | PrimApp {args, dst, prim} => - let - fun replace (z: Operand.t): Statement.t option = - (Option.app (dst, fn (x, _) => - setReplaceVar (x, z)) - ; NONE) - val applyArgs = - Vector.keepAllMap - (args, fn z => - case z of - Operand.Const c => SOME (ApplyArg.Const c) - | Operand.Var x => SOME (ApplyArg.Var x) - | _ => NONE) - datatype z = datatype ApplyResult.t - in - if Vector.length args <> Vector.length applyArgs - then keep () - else - case (tracePrimApply - Prim.apply - (prim, Vector.toList applyArgs, - fn ({var = x, ...}, {var = y, ...}) => - Var.equals (x, y))) of - Apply (prim, args) => - let - val args = - Vector.fromListMap (args, Operand.Var) - val () = Option.app (dst, dontReplace) - in - SOME (PrimApp {args = args, - dst = dst, - prim = prim}) - end - | Bool b => replace (Operand.bool b) - | Const c => replace (Operand.Const c) - | Overflow => keep () - | Unknown => keep () - | Var x => replace (Operand.Var x) - end - | _ => keep () - end - fun loopTransfer t = - (Transfer.foreachDef (t, dontReplace) - ; Transfer.replaceUses (t, replaceVar)) - fun loopFormals args = Vector.foreach (args, dontReplace) - fun loopFunction (f: Function.t): Function.t = - let - val {args, name, raises, returns, start, ...} = - Function.dest f - val () = loopFormals args - val blocks = ref [] - val () = - Function.dfs - (f, fn Block.T {args, kind, label, statements, transfer} => - let - val () = loopFormals args - val statements = - Vector.keepAllMap (statements, loopStatement) - val transfer = loopTransfer transfer - val () = - List.push - (blocks, Block.T {args = args, - kind = kind, - label = label, - statements = statements, - transfer = transfer}) - in - fn () => () - end) - val blocks = Vector.fromList (!blocks) - in - Function.new {args = args, - blocks = blocks, - name = name, - raises = raises, - returns = returns, - start = start} - end - (* Must process main first, because it defines globals that are - * used in other functions. - *) - val main = loopFunction main - val functions = List.revMap (functions, loopFunction) - in - T {functions = functions, - handlesSignals = handlesSignals, - main = main, - objectTypes = objectTypes} - end - - fun shrink (T {functions, handlesSignals, main, objectTypes}) = - let - val p = - T {functions = List.revMap (functions, Function.shrink), - handlesSignals = handlesSignals, - main = Function.shrink main, - objectTypes = objectTypes} - val p = copyProp p - val () = clear p - in - p - end - - structure ExnStack = - struct - structure ZPoint = - struct - datatype t = Caller | Me - - val equals: t * t -> bool = op = - - val toString = - fn Caller => "Caller" - | Me => "Me" - - val layout = Layout.str o toString - end - - structure L = FlatLattice (structure Point = ZPoint) - open L - structure Point = ZPoint - - val me = point Point.Me - end - - structure HandlerLat = FlatLattice (structure Point = Label) - - structure HandlerInfo = - struct - datatype t = T of {block: Block.t, - global: ExnStack.t, - handler: HandlerLat.t, - slot: ExnStack.t, - visited: bool ref} - - fun new (b: Block.t): t = - T {block = b, - global = ExnStack.new (), - handler = HandlerLat.new (), - slot = ExnStack.new (), - visited = ref false} - - fun layout (T {global, handler, slot, ...}) = - Layout.record [("global", ExnStack.layout global), - ("slot", ExnStack.layout slot), - ("handler", HandlerLat.layout handler)] - end - - val traceGoto = - Trace.trace ("Rssa.checkHandlers.goto", Label.layout, Unit.layout) - - fun checkHandlers (T {functions, ...}) = - let - val debug = false - fun checkFunction (f: Function.t): unit = - let - val {name, start, blocks, ...} = Function.dest f - val {get = labelInfo: Label.t -> HandlerInfo.t, - rem = remLabelInfo, - set = setLabelInfo} = - Property.getSetOnce - (Label.plist, Property.initRaise ("info", Label.layout)) - val _ = - Vector.foreach - (blocks, fn b => - setLabelInfo (Block.label b, HandlerInfo.new b)) - (* Do a DFS of the control-flow graph. *) - fun visitLabel l = visitInfo (labelInfo l) - and visitInfo - (hi as HandlerInfo.T {block, global, handler, slot, - visited, ...}): unit = - if !visited - then () - else - let - val _ = visited := true - val Block.T {label, statements, transfer, ...} = block - val _ = - if debug - then - let - open Layout - in - outputl - (seq [str "visiting ", - Label.layout label], - Out.error) - end - else () - datatype z = datatype Statement.t - val {global, handler, slot} = - Vector.fold - (statements, - {global = global, handler = handler, slot = slot}, - fn (s, {global, handler, slot}) => - case s of - SetExnStackLocal => {global = ExnStack.me, - handler = handler, - slot = slot} - | SetExnStackSlot => {global = slot, - handler = handler, - slot = slot} - | SetSlotExnStack => {global = global, - handler = handler, - slot = global} - | SetHandler l => {global = global, - handler = HandlerLat.point l, - slot = slot} - | _ => {global = global, - handler = handler, - slot = slot}) - fun fail msg = - (Control.message - (Control.Silent, fn () => - let open Layout - in align - [str "before: ", HandlerInfo.layout hi, - str "block: ", Block.layout block, - seq [str "after: ", - Layout.record - [("global", ExnStack.layout global), - ("slot", ExnStack.layout slot), - ("handler", - HandlerLat.layout handler)]], - Vector.layout - (fn Block.T {label, ...} => - seq [Label.layout label, - str " ", - HandlerInfo.layout (labelInfo label)]) - blocks] - end) - ; Error.bug (concat ["Rssa.checkHandlers: handler mismatch at ", msg])) - fun assert (msg, f) = - if f - then () - else fail msg - fun goto (l: Label.t): unit = - let - val HandlerInfo.T {global = g, handler = h, - slot = s, ...} = - labelInfo l - val _ = - assert ("goto", - ExnStack.<= (global, g) - andalso ExnStack.<= (slot, s) - andalso HandlerLat.<= (handler, h)) - in - visitLabel l - end - val goto = traceGoto goto - fun tail name = - assert (name, - ExnStack.forcePoint - (global, ExnStack.Point.Caller)) - datatype z = datatype Transfer.t - in - case transfer of - Arith {overflow, success, ...} => - (goto overflow; goto success) - | CCall {return, ...} => Option.app (return, goto) - | Call {return, ...} => - assert - ("return", - let - datatype z = datatype Return.t - in - case return of - Dead => true - | NonTail {handler = h, ...} => - (case h of - Handler.Caller => - ExnStack.forcePoint - (global, ExnStack.Point.Caller) - | Handler.Dead => true - | Handler.Handle l => - let - val res = - ExnStack.forcePoint - (global, - ExnStack.Point.Me) - andalso - HandlerLat.forcePoint - (handler, l) - val _ = goto l - in - res - end) - | Tail => true - end) - | Goto {dst, ...} => goto dst - | Raise _ => tail "raise" - | Return _ => tail "return" - | Switch s => Switch.foreachLabel (s, goto) - end - val info as HandlerInfo.T {global, ...} = labelInfo start - val _ = ExnStack.forcePoint (global, ExnStack.Point.Caller) - val _ = visitInfo info - val _ = - Control.diagnostics - (fn display => - let - open Layout - val _ = - display (seq [str "checkHandlers ", - Func.layout name]) - val _ = - Vector.foreach - (blocks, fn Block.T {label, ...} => - display (seq - [Label.layout label, - str " ", - HandlerInfo.layout (labelInfo label)])) - in - () - end) - val _ = Vector.foreach (blocks, fn b => - remLabelInfo (Block.label b)) - in - () - end - val _ = List.foreach (functions, checkFunction) - in - () - end - - fun checkScopes (program as T {functions, main, ...}): unit = - let - datatype status = - Defined - | Global - | InScope - | Undefined - fun make (layout, plist) = - let - val {get, set, ...} = - Property.getSet (plist, Property.initConst Undefined) - fun bind (x, isGlobal) = - case get x of - Global => () - | Undefined => - set (x, if isGlobal then Global else InScope) - | _ => Error.bug ("Rssa.checkScopes: duplicate definition of " - ^ (Layout.toString (layout x))) - fun reference x = - case get x of - Global => () - | InScope => () - | _ => Error.bug (concat - ["Rssa.checkScopes: reference to ", - Layout.toString (layout x), - " not in scope"]) - fun unbind x = - case get x of - Global => () - | _ => set (x, Defined) - in (bind, reference, unbind) - end - val (bindVar, getVar, unbindVar) = make (Var.layout, Var.plist) - val bindVar = - Trace.trace2 - ("Rssa.bindVar", Var.layout, Bool.layout, Unit.layout) - bindVar - val getVar = - Trace.trace ("Rssa.getVar", Var.layout, Unit.layout) getVar - val unbindVar = - Trace.trace ("Rssa.unbindVar", Var.layout, Unit.layout) unbindVar - val (bindFunc, _, _) = make (Func.layout, Func.plist) - val bindFunc = fn f => bindFunc (f, false) - val (bindLabel, getLabel, unbindLabel) = - make (Label.layout, Label.plist) - val bindLabel = fn l => bindLabel (l, false) - fun loopFunc (f: Function.t, isMain: bool): unit = - let - val bindVar = fn x => bindVar (x, isMain) - val {args, blocks, ...} = Function.dest f - val _ = Vector.foreach (args, bindVar o #1) - val _ = Vector.foreach (blocks, bindLabel o Block.label) - val _ = - Vector.foreach - (blocks, fn Block.T {transfer, ...} => - Transfer.foreachLabel (transfer, getLabel)) - (* Descend the dominator tree, verifying that variable - * definitions dominate variable uses. - *) - val _ = - Tree.traverse - (Function.dominatorTree f, - fn Block.T {args, statements, transfer, ...} => - let - val _ = Vector.foreach (args, bindVar o #1) - val _ = - Vector.foreach - (statements, fn s => - (Statement.foreachUse (s, getVar) - ; Statement.foreachDef (s, bindVar o #1))) - val _ = Transfer.foreachUse (transfer, getVar) - val _ = Transfer.foreachDef (transfer, bindVar o #1) - in - fn () => - if isMain - then () - else - let - val _ = - Vector.foreach - (statements, fn s => - Statement.foreachDef (s, unbindVar o #1)) - val _ = - Transfer.foreachDef (transfer, unbindVar o #1) - val _ = Vector.foreach (args, unbindVar o #1) - in - () - end - end) - val _ = Vector.foreach (blocks, unbindLabel o Block.label) - val _ = Vector.foreach (args, unbindVar o #1) - in - () - end - val _ = List.foreach (functions, bindFunc o Function.name) - val _ = loopFunc (main, true) - val _ = List.foreach (functions, fn f => loopFunc (f, false)) - val _ = clear program - in () - end - - fun typeCheck (p as T {functions, main, objectTypes, ...}) = - let - val _ = - Vector.foreach - (objectTypes, fn ty => - Err.check ("objectType", - fn () => ObjectType.isOk ty, - fn () => ObjectType.layout ty)) - fun tyconTy (opt: ObjptrTycon.t): ObjectType.t = - Vector.sub (objectTypes, ObjptrTycon.index opt) - val () = checkScopes p - val {get = labelBlock: Label.t -> Block.t, - set = setLabelBlock, ...} = - Property.getSetOnce (Label.plist, - Property.initRaise ("block", Label.layout)) - val {get = funcInfo, set = setFuncInfo, ...} = - Property.getSetOnce (Func.plist, - Property.initRaise ("info", Func.layout)) - val {get = varType: Var.t -> Type.t, set = setVarType, ...} = - Property.getSetOnce (Var.plist, - Property.initRaise ("type", Var.layout)) - val setVarType = - Trace.trace2 ("Rssa.setVarType", Var.layout, Type.layout, - Unit.layout) - setVarType - fun checkOperand (x: Operand.t): unit = - let - datatype z = datatype Operand.t - fun ok () = - case x of - ArrayOffset {base, index, offset, scale, ty} => - (checkOperand base - ; checkOperand index - ; Type.arrayOffsetIsOk {base = Operand.ty base, - index = Operand.ty index, - offset = offset, - tyconTy = tyconTy, - result = ty, - scale = scale}) - | Cast (z, ty) => - (checkOperand z - ; Type.castIsOk {from = Operand.ty z, - to = ty, - tyconTy = tyconTy}) - | Const _ => true - | EnsuresBytesFree => true - | GCState => true - | Offset {base, offset, ty} => - Type.offsetIsOk {base = Operand.ty base, - offset = offset, - tyconTy = tyconTy, - result = ty} - | ObjptrTycon _ => true - | Runtime _ => true - | Var {ty, var} => Type.isSubtype (varType var, ty) - in - Err.check ("operand", ok, fn () => Operand.layout x) - end - val checkOperand = - Trace.trace ("Rssa.checkOperand", Operand.layout, Unit.layout) - checkOperand - fun checkOperands v = Vector.foreach (v, checkOperand) - fun check' (x, name, isOk, layout) = - Err.check (name, fn () => isOk x, fn () => layout x) - val labelKind = Block.kind o labelBlock - fun statementOk (s: Statement.t): bool = - let - datatype z = datatype Statement.t - in - case s of - Bind {src, dst = (_, dstTy), ...} => - (checkOperand src - ; Type.isSubtype (Operand.ty src, dstTy)) - | Move {dst, src} => - (checkOperand dst - ; checkOperand src - ; (Type.isSubtype (Operand.ty src, Operand.ty dst) - andalso Operand.isLocation dst)) - | Object {dst = (_, ty), header, size} => - let - val tycon = - ObjptrTycon.fromIndex - (Runtime.headerToTypeIndex header) - in - Type.isSubtype (Type.objptr tycon, ty) - andalso - Bytes.equals - (size, - Bytes.align - (size, - {alignment = (case !Control.align of - Control.Align4 => Bytes.inWord32 - | Control.Align8 => Bytes.inWord64)})) - andalso - (case tyconTy tycon of - ObjectType.Normal {ty, ...} => - Bytes.equals - (size, Bytes.+ (Runtime.headerSize (), - Type.bytes ty)) - | _ => false) - end - | PrimApp {args, dst, prim} => - (Vector.foreach (args, checkOperand) - ; (Type.checkPrimApp - {args = Vector.map (args, Operand.ty), - prim = prim, - result = Option.map (dst, #2)})) - | Profile _ => true - | ProfileLabel _ => true - | SetExnStackLocal => true - | SetExnStackSlot => true - | SetHandler l => - (case labelKind l of - Kind.Handler => true - | _ => false) - | SetSlotExnStack => true - end - val statementOk = - Trace.trace ("Rssa.statementOk", - Statement.layout, - Bool.layout) - statementOk - fun gotoOk {args: Type.t vector, - dst: Label.t}: bool = - let - val Block.T {args = formals, kind, ...} = labelBlock dst - in - Vector.equals (args, formals, fn (t, (_, t')) => - Type.isSubtype (t, t')) - andalso (case kind of - Kind.Jump => true - | _ => false) - end - fun labelIsNullaryJump l = gotoOk {dst = l, args = Vector.new0 ()} - fun tailIsOk (caller: Type.t vector option, - callee: Type.t vector option): bool = - case (caller, callee) of - (_, NONE) => true - | (SOME caller, SOME callee) => - Vector.equals (callee, caller, Type.isSubtype) - | _ => false - fun nonTailIsOk (formals: (Var.t * Type.t) vector, - returns: Type.t vector option): bool = - case returns of - NONE => true - | SOME ts => - Vector.equals (formals, ts, fn ((_, t), t') => - Type.isSubtype (t', t)) - fun callIsOk {args, func, raises, return, returns} = - let - val Function.T {args = formals, - raises = raises', - returns = returns', ...} = - funcInfo func - - in - Vector.equals (args, formals, fn (z, (_, t)) => - Type.isSubtype (Operand.ty z, t)) - andalso - (case return of - Return.Dead => - Option.isNone raises' - andalso Option.isNone returns' - | Return.NonTail {cont, handler} => - let - val Block.T {args = cArgs, kind = cKind, ...} = - labelBlock cont - in - nonTailIsOk (cArgs, returns') - andalso - (case cKind of - Kind.Cont {handler = h} => - Handler.equals (handler, h) - andalso - (case h of - Handler.Caller => - tailIsOk (raises, raises') - | Handler.Dead => true - | Handler.Handle l => - let - val Block.T {args = hArgs, - kind = hKind, ...} = - labelBlock l - in - nonTailIsOk (hArgs, raises') - andalso - (case hKind of - Kind.Handler => true - | _ => false) - end) - | _ => false) - end - | Return.Tail => - tailIsOk (raises, raises') - andalso tailIsOk (returns, returns')) - end - - fun checkFunction (Function.T {args, blocks, raises, returns, start, - ...}) = - let - val _ = Vector.foreach (args, setVarType) - val _ = - Vector.foreach - (blocks, fn b as Block.T {args, label, statements, - transfer, ...} => - (setLabelBlock (label, b) - ; Vector.foreach (args, setVarType) - ; Vector.foreach (statements, fn s => - Statement.foreachDef - (s, setVarType)) - ; Transfer.foreachDef (transfer, setVarType))) - val _ = labelIsNullaryJump start - fun transferOk (t: Transfer.t): bool = - let - datatype z = datatype Transfer.t - in - case t of - Arith {args, overflow, prim, success, ty, ...} => - let - val _ = checkOperands args - in - Prim.mayOverflow prim - andalso labelIsNullaryJump overflow - andalso labelIsNullaryJump success - andalso - Type.checkPrimApp - {args = Vector.map (args, Operand.ty), - prim = prim, - result = SOME ty} - end - | CCall {args, func, return} => - let - val _ = checkOperands args - in - CFunction.isOk (func, {isUnit = Type.isUnit}) - andalso - Vector.equals (args, CFunction.args func, - fn (z, t) => - Type.isSubtype - (Operand.ty z, t)) - andalso - case return of - NONE => true - | SOME l => - case labelKind l of - Kind.CReturn {func = f} => - CFunction.equals (func, f) - | _ => false - end - | Call {args, func, return} => - let - val _ = checkOperands args - in - callIsOk {args = args, - func = func, - raises = raises, - return = return, - returns = returns} - end - | Goto {args, dst} => - (checkOperands args - ; gotoOk {args = Vector.map (args, Operand.ty), - dst = dst}) - | Raise zs => - (checkOperands zs - ; (case raises of - NONE => false - | SOME ts => - Vector.equals - (zs, ts, fn (z, t) => - Type.isSubtype (Operand.ty z, t)))) - | Return zs => - (checkOperands zs - ; (case returns of - NONE => false - | SOME ts => - Vector.equals - (zs, ts, fn (z, t) => - Type.isSubtype (Operand.ty z, t)))) - | Switch s => - Switch.isOk (s, {checkUse = checkOperand, - labelIsOk = labelIsNullaryJump}) - end - val transferOk = - Trace.trace ("Rssa.transferOk", - Transfer.layout, - Bool.layout) - transferOk - fun blockOk (Block.T {args, kind, statements, transfer, ...}) - : bool = - let - fun kindOk (k: Kind.t): bool = - let - datatype z = datatype Kind.t - in - case k of - Cont _ => true - | CReturn {func} => - let - val return = CFunction.return func - in - 0 = Vector.length args - orelse - (1 = Vector.length args - andalso - let - val expects = - #2 (Vector.sub (args, 0)) - in - Type.isSubtype (return, expects) - andalso - CType.equals (Type.toCType return, - Type.toCType expects) - end) - end - | Handler => true - | Jump => true - end - val _ = check' (kind, "kind", kindOk, Kind.layout) - val _ = - Vector.foreach - (statements, fn s => - check' (s, "statement", statementOk, - Statement.layout)) - val _ = check' (transfer, "transfer", transferOk, - Transfer.layout) - in - true - end - val blockOk = - Trace.trace ("Rssa.blockOk", - Block.layout, - Bool.layout) - blockOk - - val _ = - Vector.foreach - (blocks, fn b => - check' (b, "block", blockOk, Block.layout)) - in - () - end - val _ = - List.foreach - (functions, fn f as Function.T {name, ...} => - setFuncInfo (name, f)) - val _ = checkFunction main - val _ = List.foreach (functions, checkFunction) - val _ = - check' - (main, "main function", - fn f => - let - val {args, ...} = Function.dest f - in - 0 = Vector.length args - end, - Function.layout) - val _ = clear p - in - () - end handle Err.E e => (Layout.outputl (Err.layout e, Out.error) - ; Error.bug "Rssa.typeCheck") - end - -end + RssaSimplify (RssaRestore (RssaLive (RssaShrink (RssaTypeCheck (RssaTree (S)))))) diff -Nru mlton-20130715/mlton/backend/rssa-live.fun mlton-20210117+dfsg/mlton/backend/rssa-live.fun --- mlton-20130715/mlton/backend/rssa-live.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-live.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,368 @@ +(* Copyright (C) 2017,2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + * + + * This pass is based on the liveness algorithm described in section 4.13, + * page 132, of Morgan's "Building an Optimizing Compiler". BTW, the Dragon + * book and Muchnick's book provided no help at all on speeding up liveness. + * They suggest using bit-vectors, which is infeasible for MLton due to the + * large size of and number of variables in SSA functions. + * + * Here is a description of the algorithm. + * + * Walk over the whole program and + * 1. Build the predecessor graph of basic blocks. Each basic block records the + * set of its predecessors and the set of variables live at the beginning of + * the block. + * 2. For each variable record the block in which is defined and the list of + * blocks where it is used. + * + * Now, for each variable, propagate the liveness information backwards from uses + * along basic blocks until the definition block is reached. + * + * That's it. The reason why it's so fast is that it processes one variable at a + * time, and hence the operation to determine if that variable is in the live + * list for a particular block is constant time -- the variable is either at the + * head of the list or it's not there. + *) +functor RssaLive (S: RSSA_LIVE_STRUCTS): RSSA_LIVE = +struct + +open S +datatype z = datatype Statement.t +datatype z = datatype Transfer.t + +structure LiveInfo = + struct + datatype t = T of {live: Var.t Buffer.t, + liveHS: {handler: Label.t option ref, + link: unit option ref}, + name: string, + preds: t list ref} + + fun layout (T {name, ...}) = Layout.str name + + fun new (name: string) = + T {live = Buffer.new {dummy = Var.bogus}, + liveHS = {handler = ref NONE, + link = ref NONE}, + name = name, + preds = ref []} + + fun live (T {live, ...}) = Buffer.toVector live + + fun liveHS (T {liveHS = {handler, link}, ...}) = + {handler = !handler, + link = isSome (!link)} + + fun equals (T {preds = r, ...}, T {preds = r', ...}) = r = r' + + fun addEdge (b, T {preds, ...}) = + if List.exists (!preds, fn b' => equals (b, b')) + then () + else List.push (preds, b) + + val addEdge = + Trace.trace2 + ("Live.LiveInfo.addEdge", layout, layout, Unit.layout) + addEdge + end + +val traceConsider = + Trace.trace ("Live.consider", LiveInfo.layout, Bool.layout) + +fun live (function, {shouldConsider: Var.t -> bool}) = + let + val shouldConsider = + Trace.trace ("Live.shouldConsider", Var.layout, Bool.layout) + shouldConsider + val {args, blocks, ...} = Function.dest function + val _ = + Control.diagnostic + (fn () => + let + val numVars = ref 0 + fun loopVar (x, _) = + if shouldConsider x + then Int.inc numVars + else () + fun loopFormals v = Vector.foreach (v, loopVar) + val () = + Vector.foreach + (blocks, fn Block.T {args, statements, ...} => + (loopFormals args + ; Vector.foreach (statements, fn s => + Statement.foreachDef (s, loopVar)))) + open Layout + in + align [seq [str "Live info for ", + Func.layout (Function.name function)], + seq [str " num blocks ", Int.layout (Vector.length blocks)], + seq [str " num vars ", Int.layout (!numVars)]] + end) + val {get = labelInfo: Label.t -> {argInfo: LiveInfo.t, + block: Block.t, + bodyInfo: LiveInfo.t}, + rem = removeLabelInfo, + set = setLabelInfo, ...} = + Property.getSetOnce (Label.plist, + Property.initRaise ("live info", Label.layout)) + val {get = varInfo: Var.t -> {defined: LiveInfo.t option ref, + used: LiveInfo.t list ref}, + destroy = destroyVarInfo, ...} = + Property.destGet (Var.plist, + Property.initFun (fn _ => {defined = ref NONE, + used = ref []})) + datatype 'a defuse = Def of LiveInfo.t | Use of 'a * LiveInfo.t + val handlerCodeDefUses: Label.t defuse list ref = ref [] + val handlerLinkDefUses: unit defuse list ref = ref [] + val allVars: Var.t list ref = ref [] + fun setDefined (x: Var.t, defined): unit = + if shouldConsider x + then (List.push (allVars, x) + ; #defined (varInfo x) := SOME defined) + else () + val setDefined = + Trace.trace2 ("Live.setDefined", + Var.layout, LiveInfo.layout, Unit.layout) + setDefined + (* Set the labelInfo for each block. *) + val _ = + Vector.foreach + (blocks, fn block as Block.T {args, label, ...} => + let + val name = Label.toString label + val (argInfo, bodyInfo) = + case Vector.length args of + 0 => let val b = LiveInfo.new (name ^ "a") + in (b, b) + end + | _ => let val b = LiveInfo.new (name ^ "b") + val b' = LiveInfo.new (name ^ "c") + val _ = LiveInfo.addEdge (b, b') + in (b, b') + end + in + setLabelInfo (label, {argInfo = argInfo, + block = block, + bodyInfo = bodyInfo}) + end) + (* Add the control-flow edges and set the defines and uses for each + * variable. + *) + val head = LiveInfo.new "main" + val _ = Vector.foreach (args, fn (x, _) => setDefined (x, head)) + val _ = + Vector.foreach + (blocks, + fn Block.T {args, kind, label, statements, transfer, ...} => + let + val {argInfo, bodyInfo = b, ...} = labelInfo label + val _ = Vector.foreach (args, fn (x, _) => setDefined (x, argInfo)) + fun goto l = LiveInfo.addEdge (b, #argInfo (labelInfo l)) + (* Make sure that a cont's live vars includes variables live in its + * handler. + *) + val _ = + case kind of + Kind.Cont {handler, ...} => + Handler.foreachLabel (handler, goto) + | _ => () + fun define (x: Var.t): unit = setDefined (x, b) + fun use (x: Var.t): unit = + if shouldConsider x + then + let val {used, ...} = varInfo x + in + if (case !used of + [] => false + | b' :: _ => LiveInfo.equals (b, b')) + then () + else List.push (used, b) + end + else () + val use = Trace.trace ("Live.use", Var.layout, Unit.layout) use + val _ = + Vector.foreach + (statements, fn s => + let + val _ = Statement.foreachDefUse (s, {def = define o #1, + use = use}) + val _ = + case s of + SetExnStackSlot => + List.push (handlerLinkDefUses, Use ((), b)) + | SetHandler _ => + List.push (handlerCodeDefUses, Def b) + | SetSlotExnStack => + List.push (handlerLinkDefUses, Def b) + | _ => () + in + () + end) + fun label l = + let + val {block = Block.T {kind, ...}, ...} = labelInfo l + in + case kind of + Kind.Handler => + List.push (handlerCodeDefUses, Use (l, b)) + | _ => goto l + end + val _ = + Transfer.foreachLabelUse (transfer, {label = label, + use = use}) + in () + end) + (* Back-propagate every variable from uses to define point. *) + fun processVar (x: Var.t): unit = + if not (shouldConsider x) + then () + else + let + val {defined, used, ...} = varInfo x + val defined = valOf (!defined) + val todo: LiveInfo.t list ref = ref [] + fun consider (b as LiveInfo.T {live, ...}) = + if LiveInfo.equals (b, defined) + orelse (case Buffer.last live of + NONE => false + | SOME x' => Var.equals (x, x')) + then false + else (Buffer.add (live, x) + ; List.push (todo, b) + ; true) + val consider = traceConsider consider + val consider = ignore o consider + val _ = List.foreach (!used, consider) + fun loop () = + case !todo of + [] => () + | LiveInfo.T {preds, ...} :: bs => + (todo := bs + ; List.foreach (!preds, consider) + ; loop ()) + val _ = loop () + in () + end + val processVar = + Trace.trace ("Live.processVar", Var.layout, Unit.layout) processVar + val _ = List.foreach (!allVars, processVar) + val () = destroyVarInfo () + (* handler code and link slots are harder; in particular, they don't + * satisfy the SSA invariant -- there are multiple definitions; + * furthermore, a def and use in a block does not mean that the def + * occurs before the use. But, a back propagated use will always + * come after a def in the same block + *) + fun handlerLink (defuse: 'a defuse list ref, + sel: {handler: Label.t option ref, + link: unit option ref} -> 'a option ref) = + let + val todo: ('a * LiveInfo.t) list ref = ref [] + (* The foldr is important because the statements in each block were + * visited in order, meaning that the earlier statements appear + * later in !defuse. Hence, with the foldr, the defs and uses are + * visited in order for each block. + *) + val defs = + List.foldr + (!defuse, [], fn (du, defs) => + case du of + Def b => b::defs + | Use (a, b as LiveInfo.T {liveHS, ...}) => + let + val _ = + if + (* Since we are visiting all of the statements + * in the block together, in order, we are + * guaranteed that if there is a prior definition + * then it will be first on defs. + *) + (case defs of + [] => false + | b' :: _ => LiveInfo.equals (b, b')) + then () + else (sel liveHS := SOME a + ; List.push (todo, (a, b))) + in + defs + end) + fun consider (b as LiveInfo.T {liveHS, ...}, a: 'a) = + if List.exists (defs, fn b' => LiveInfo.equals (b, b')) + orelse isSome (!(sel liveHS)) + then () + else (sel liveHS := SOME a + ; List.push (todo, (a, b))) + fun loop () = + case !todo of + [] => () + | (a, LiveInfo.T {preds, ...}) :: bs => + (todo := bs + ; List.foreach (!preds, fn b => consider (b, a)) + ; loop ()) + val _ = loop () + in + () + end + val _ = handlerLink (handlerCodeDefUses, #handler) + val _ = handlerLink (handlerLinkDefUses, #link) + val {get = labelLive, rem = remLabelLive, ...} = + Property.get + (Label.plist, + Property.initFun + (fn l => + let + val {bodyInfo, argInfo, ...} = labelInfo l + val () = removeLabelInfo l + val {handler, link} = LiveInfo.liveHS bodyInfo + in + {begin = LiveInfo.live bodyInfo, + beginNoFormals = LiveInfo.live argInfo, + handler = handler, + link = link} + end)) + val () = Vector.foreach (blocks, fn b => + ignore (labelLive (Block.label b))) + val _ = + Control.diagnostics + (fn display => + let open Layout + in + Vector.foreach + (blocks, fn b => + let + val l = Block.label b + val {begin, beginNoFormals, handler, link} = labelLive l + in + display + (seq [Label.layout l, + str " ", + record [("begin", Vector.layout Var.layout begin), + ("beginNoFormals", + Vector.layout Var.layout beginNoFormals), + ("handler", Option.layout Label.layout handler), + ("link", Bool.layout link)]]) + end) + end) + in + {labelLive = labelLive, + remLabelLive = remLabelLive} + end + +val live = + Trace.trace2 ("Live.live", Func.layout o Function.name, Layout.ignore, + Layout.ignore) + live + +structure Live = + struct + val live = live + end + +end diff -Nru mlton-20130715/mlton/backend/rssa-live.sig mlton-20210117+dfsg/mlton/backend/rssa-live.sig --- mlton-20130715/mlton/backend/rssa-live.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-live.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature RSSA_LIVE_STRUCTS = + sig + include RSSA_SHRINK + end + +signature RSSA_LIVE = + sig + include RSSA_LIVE_STRUCTS + + structure Live: + sig + val live: + Function.t * {shouldConsider: Var.t -> bool} + -> {labelLive: + Label.t -> {(* live at beginning of block. *) + begin: Var.t vector, + (* live at the beginning of a block, except formals. *) + beginNoFormals: Var.t vector, + (* live handler slots at beginning of block. *) + handler: Label.t option, + link: bool}, + remLabelLive: Label.t -> unit} + end + end diff -Nru mlton-20130715/mlton/backend/rssa-restore.fun mlton-20210117+dfsg/mlton/backend/rssa-restore.fun --- mlton-20130715/mlton/backend/rssa-restore.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-restore.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,743 @@ +(* Copyright (C) 2019-2020 Jason Carr, Matthew Fluet. + * Copyright (C) 2009,2017 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +(* Restore RSSA (based on ssa/restore2.fun) + * + * Based primarily on Section 19.1 of Appel's "Modern Compiler Implementation in ML", + * (but see the caveats in the comments below). + * The main deviation is the calculation of liveness of the violating variables, + * which is used to predicate the insertion of phi arguments. This is due to + * the algorithm's bias towards imperative languages, for which it makes the + * assumption that all variables are defined in the start block and all variables + * are "used" at exit. + * This is "optimized" for restoration of functions with small numbers of violating + * variables -- use bool vectors to represent sets of violating variables. + * Also, we use a Promise.t to suspend part of the dominance frontier computation. + * + * For RSSA, this pass must be run before implement-handlers, as we don't currently deal with + * handler labels correctly. + * The issue may be that the handler needs to be mapped to two different labels in + * different places, but SetHandler statements may be missing if they were deemed unnecessary. + *) + +functor RssaRestore (S: RSSA_RESTORE_STRUCTS): RSSA_RESTORE = +struct + +open S +open Transfer + +structure LabelInfo = + struct + datatype t = T of {args: (Var.t * Type.t) vector ref, + preds: Label.t list ref, + defs: bool vector ref, + uses: bool vector ref, + live: bool array ref, + dtindex: int ref, + df: Label.t vector Promise.t ref, + phi: Var.t list ref, + phiArgs: Var.t vector ref, + kind: Kind.t ref, + queued: bool ref} + + fun layout (T {preds, defs, uses, live, dtindex, df, phiArgs, ...}) + = let open Layout + in record [("preds", List.layout Label.layout (!preds)), + ("defs", Vector.layout Bool.layout (!defs)), + ("uses", Vector.layout Bool.layout (!uses)), + ("live", Array.layout Bool.layout (!live)), + ("dtindex", Int.layout (!dtindex)), + ("df", Promise.layout (Vector.layout Label.layout) (!df)), + ("phiArgs", Vector.layout Var.layout (!phiArgs))] + end + + local + fun make f (T r) = f r + fun make' f = (make f, ! o (make f)) + in + val (args, args') = make' #args + val (preds, preds') = make' #preds + val (defs, defs') = make' #defs + val (uses, uses') = make' #uses + val (live, live') = make' #live + val (dtindex, dtindex') = make' #dtindex + val (df, df') = make' #df + val (phi, _) = make' #phi + val (phiArgs, phiArgs') = make' #phiArgs + val (queued, _) = make' #queued + val (kind, kind') = make' #kind + end + + fun new (): t = T {args = ref (Vector.new0 ()), + preds = ref [], + defs = ref (Vector.new0 ()), + uses = ref (Vector.new0 ()), + live = ref (Array.new0 ()), + dtindex = ref ~1, + df = ref (Promise.delay (fn () => Vector.new0 ())), + phi = ref [], + phiArgs = ref (Vector.new0 ()), + kind = ref Kind.Jump, + queued = ref false} + end + +structure Cardinality = + struct + structure L = ThreePointLattice(val bottom = "zero" + val mid = "one" + val top = "many") + open L + + val isZero = isBottom + val isOne = isMid + val makeOne = makeMid + val isMany = isTop + val makeMany = makeTop + val whenMany = whenTop + + val inc: t -> unit + = fn c => if isZero c + then makeOne c + else if isOne c + then makeMany c + else () + end + +structure VarInfo = + struct + datatype t = T of {defs: Cardinality.t, + ty: Type.t ref, + index: int ref, + defSites: Label.t list ref, + useSites: Label.t list ref, + vars: Var.t list ref} + + fun layout (T {defs, index, defSites, useSites, vars, ...}) + = let open Layout + in record [("defs", Cardinality.layout defs), + ("index", Int.layout (!index)), + ("defSites", List.layout Label.layout (!defSites)), + ("useSites", List.layout Label.layout (!useSites)), + ("vars", List.layout Var.layout (!vars))] + end + + local + fun make f (T r) = f r + fun make' f = (make f, ! o (make f)) + in + val defs = make #defs + val (index,index') = make' #index + val (_,defSites') = make' #defSites + val (_,useSites') = make' #useSites + val (ty,ty') = make' #ty + end + fun addDef (T {defs, ...}) = Cardinality.inc defs + fun addDefSite (T {defSites, ...}, l) = List.push(defSites, l) + fun addUseSite (T {useSites, ...}, l) = List.push(useSites, l) + val violates = Cardinality.isMany o defs + fun whenViolates (T {defs, ...}, th) = Cardinality.whenMany (defs, th) + + fun new (): t = T {defs = Cardinality.new (), + index = ref ~1, + defSites = ref [], + useSites = ref [], + ty = ref Type.unit, + vars = ref []} + + fun pushVar (T {vars, ...}, var) = List.push (vars, var) + fun popVar (T {vars, ...}) = ignore (List.pop vars) + fun peekVar (T {vars, ...}) = case !vars + of [] => NONE + | h::_ => SOME h + end + +fun restoreFunction {main: Function.t, statics: {dst: Var.t * Type.t, obj: Object.t} vector} + = let + exception NoViolations + + val {get = varInfo: Var.t -> VarInfo.t, rem = remVarInfo, ...} + = Property.get + (Var.plist, Property.initFun (fn _ => VarInfo.new ())) + + val {get = labelInfo: Label.t -> LabelInfo.t, ...} + = Property.get + (Label.plist, Property.initFun (fn _ => LabelInfo.new ())) + + fun mkQueue () + = let + val todo = ref [] + in + {enque = fn (l, li) => let + val queued = LabelInfo.queued li + in + if !queued + then () + else (queued := true ; + List.push (todo, (l,li))) + end, + deque = fn () => case !todo + of [] => NONE + | (l,li)::todo' + => (todo := todo'; + LabelInfo.queued li := false; + SOME (l,li))} + end + + fun mkPost () + = let + val post = ref [] + in + {addPost = fn th => List.push (post, th), + post = fn () => List.foreach(!post, fn th => th ())} + end + + val restore = + fn (f: Function.t) => + let + val {args, blocks, name, returns, raises, start} = Function.dest f + (* check for violations *) + val violations = ref [] + fun addDef (x, ty) + = let + val vi = varInfo x + in + if VarInfo.violates vi + then () + else (VarInfo.ty vi := ty ; + VarInfo.addDef vi ; + if VarInfo.violates vi + then List.push (violations, x) + else ()) + end + val _ = Function.foreachDef (f, addDef) + + (* escape early *) + val _ = if List.isEmpty (!violations) + then (Control.diagnostics + (fn display => + let + open Layout + in + display (seq [Func.layout name, + str " NoViolations"]) + end); + raise NoViolations) + else () + + (* init violations *) + val index = Counter.new 0 + val violations + = Vector.fromListMap + (!violations, fn x => + let + val vi = varInfo x + val i = Counter.next index + val _ = VarInfo.index vi := i + in + x + end) + val numViolations = Counter.value index + + (* Diagnostics *) + val _ = Control.diagnostics + (fn display => + let + open Layout + in + display (seq [Func.layout name, + str " Violations: ", + Vector.layout Var.layout violations]) + end) + + (* init entryBlock *) + val entry = Label.newNoname () + val entryBlock = Block.T {label = entry, + args = args, + statements = Vector.new0 (), + transfer = Goto {dst = start, + args = Vector.new0 ()}, + kind = Kind.Jump} + + (* compute dominator tree *) + val dt = Function.dominatorTree f + val dt' = Tree.T (entryBlock, Vector.new1 dt) + + (* compute df (dominance frontier) *) + (* based on section 19.1 of Appel's "Modern Compiler Implementation in ML" *) + (* also computes defSites and useSites of violating variables *) + (* also computes preds, defs, and uses *) + val dtindex = ref 0 + fun doitTree (Tree.T (Block.T {label, args, statements, transfer, kind}, + children)) + = let + val li = labelInfo label + + val _ = LabelInfo.args li := args + val _ = LabelInfo.kind li := kind + + val _ = Transfer.foreachLabel + (transfer, fn l => + List.push (LabelInfo.preds (labelInfo l), label)) + + val defs = Array.new (numViolations, false) + val uses = Array.new (numViolations, false) + fun addDef x + = let + val vi = varInfo x + in + if VarInfo.violates vi + then let + val index = VarInfo.index' vi + in + VarInfo.addDefSite (varInfo x, label); + Array.update (defs, index, true); + Array.update (uses, index, false) + end + else () + end + fun addUse x + = let + val vi = varInfo x + in + if VarInfo.violates vi + then let + val index = VarInfo.index' vi + in + VarInfo.addUseSite (varInfo x, label); + Array.update (uses, index, true) + end + else () + end + val _ = Transfer.foreachLabelUse (transfer, + {label=fn _ => (), use=addUse}) + val _ = Vector.foreachr + (statements, fn s => Statement.foreachDefUse + (s, {def=addDef o #1, use=addUse})) + val _ = Vector.foreach (args, addDef o #1) + val _ = LabelInfo.defs li := Array.toVector defs + val _ = LabelInfo.uses li := Array.toVector uses + val _ = LabelInfo.live li := Array.new (numViolations, false) + + val _ = Int.inc dtindex + val dtindexMin = !dtindex + val _ = LabelInfo.dtindex li := dtindexMin + val _ = Vector.foreach(children, doitTree) + val dtindexMax = !dtindex + fun dominates l + = let val dtindex = LabelInfo.dtindex' (labelInfo l) + in dtindexMin < dtindex andalso dtindex <= dtindexMax + end + + fun promise () + = let + val df = ref [] + fun addDF l + = if List.contains(!df, l, Label.equals) + then () + else List.push(df,l) + val _ = Transfer.foreachLabel + (transfer, fn l => + if Vector.exists + (children, fn Tree.T (b, _) => + Label.equals (Block.label b, l)) + then () + else addDF l) + val _ = Vector.foreach + (children, fn Tree.T (Block.T {label, ...}, _) => + let + val li = labelInfo label + in + Vector.foreach + (Promise.force (LabelInfo.df' li), fn l => + if dominates l + then () + else addDF l) + end) + in + Vector.fromList (!df) + end + val _ = LabelInfo.df li := Promise.delay promise + in + () + end + val _ = doitTree dt' + + (* compute liveness *) + val _ + = Vector.foreach + (violations, fn x => + let + val {enque, deque} = mkQueue () + val enque = fn l => enque (l, labelInfo l) + + val vi = varInfo x + val index = VarInfo.index' vi + val useSites = VarInfo.useSites' vi + val _ = List.foreach (useSites, enque) + + fun doit (_,li) + = let + val uses = LabelInfo.uses' li + val defs = LabelInfo.defs' li + val live = LabelInfo.live' li + in + if Array.sub (live, index) + orelse + (Vector.sub(defs, index) + andalso + not (Vector.sub (uses, index))) + then () + else (Array.update(live, index, true) ; + List.foreach (LabelInfo.preds' li, enque)) + end + fun loop () + = case deque () + of NONE => () + | SOME (l,li) => (doit (l, li); loop ()) + in + loop () + end) + + (* insert phi-functions *) + (* based on section 19.1 of Appel's "Modern Compiler Implementation in ML" + * (beware: Alg. 19.6 (both in the book and as corrected by the + * errata) has numerous typos; and this implementation computes sets of + * variables that must have phi-functions at a node, which is close to + * the algorithm in the book, but the reverse of the algorithm as + * corrected by the errata, which computes sets of nodes that must have + * a phi-functions for a variable.) + *) + val _ + = Vector.foreach + (violations, fn x => + let + val {enque, deque} = mkQueue () + + val vi = varInfo x + val index = VarInfo.index' vi + val defSites = VarInfo.defSites' vi + val _ = List.foreach + (defSites, fn l => + enque (l, labelInfo l)) + + fun doit (_,li) + = Vector.foreach + (Promise.force (LabelInfo.df' li), fn l => + let + val li = labelInfo l + val live = LabelInfo.live' li + val phi = LabelInfo.phi li + in + if Array.sub(live, index) + andalso + not (List.contains(!phi, x, Var.equals)) + then (List.push(phi, x); + enque (l, li)) + else () + end) + fun loop () + = case deque () + of NONE => () + | SOME (l,li) => (doit (l, li); loop ()) + in + loop () + end) + + (* finalize phi args *) + fun visitBlock (Block.T {label, ...}) + = let + val li = labelInfo label + val phi = LabelInfo.phi li + val phiArgs = LabelInfo.phiArgs li + in + phiArgs := Vector.fromList (!phi) ; + phi := [] + end + val _ = visitBlock entryBlock + val _ = Vector.foreach (blocks, visitBlock) + + (* Diagnostics *) + val _ = Control.diagnostics + (fn display => + let + open Layout + in + Vector.foreach + (violations, fn x => + display (seq [Var.layout x, + str " ", + VarInfo.layout (varInfo x)])); + Vector.foreach + (blocks, fn Block.T {label, ...} => + display (seq [Label.layout label, + str " ", + LabelInfo.layout (labelInfo label)])) + end) + + (* rewrite *) + val blocks = ref [] + fun rewriteVar (var: Var.t) = + let + val vi as VarInfo.T {ty, ...} = varInfo var + val var = case VarInfo.peekVar vi + of NONE => var + | SOME var' => var' + in + Operand.Var {ty=(!ty), var=var} + end + fun rewriteVarDef addPost var = + let + val vi = varInfo var + val ty = VarInfo.ty' vi + in + if VarInfo.violates vi + then + let + val var' = Var.new var + val _ = addPost (fn _ => VarInfo.popVar vi) ; + val _ = VarInfo.pushVar (vi, var'); + in + {ty=ty, var=var', isNew=true} + end + else {ty=ty, var=var, isNew=false} + end + + fun replaceDstOperand (st, dst as {ty=dstTy, var=dstVar})= + let + val tupleDst = (dstVar, dstTy) + in + case st of + Statement.Bind {src, pinned, ...} => + Statement.Bind {dst=tupleDst, pinned=pinned, src=src} + | Statement.Move {src, ...} => + Statement.Move {dst=Operand.Var dst, src=src} + | Statement.Object {obj, ...} => + Statement.Object {dst=tupleDst, obj = obj} + | Statement.PrimApp {args, prim, ...} => + Statement.PrimApp {args=args, dst=SOME tupleDst, prim=prim} + | _ => st + end + local + val routeTable : (Label.t * Var.t vector, Label.t) HashTable.t = + HashTable.new { + equals=fn ((l1, vs1), (l2, vs2)) => + Label.equals (l1, l2) andalso + Vector.equals (vs1, vs2, Var.equals), + hash=fn (l, vs) => Hash.combine + (Label.hash l, Hash.vectorMap (vs, Var.hash))} + in + fun route force dst + = let + val li = labelInfo dst + val phiArgs = LabelInfo.phiArgs' li + val kind = LabelInfo.kind' li + in + if Vector.isEmpty phiArgs andalso not force + then dst + else let + val phiArgs = Vector.map (phiArgs, + fn v => + let + val vi = varInfo v + val newOpt = VarInfo.peekVar vi + val newVar = + case newOpt of + SOME v' => v' + | NONE => Var.fromString + (let open Layout in toString (seq [ + str "errnopeek_", Var.layout v]) end) + in + (newVar, VarInfo.ty' vi) + end) + fun mkRoute () = + let + val label = Label.new dst + val args = Vector.map (LabelInfo.args' li, + fn (x,ty) => (Var.new x, ty)) + val args' = Vector.map + (Vector.concat [args, phiArgs], + fn (x, ty) => Operand.Var {ty=ty, var=x}) + val kind = + case kind of + Kind.Cont {handler} => + Kind.Cont {handler=Handler.map (handler, route false)} + | _ => kind + val block = Block.T + {label = label, + args = args, + statements = Vector.new0 (), + transfer = Goto {dst = dst, + args = args'}, + kind = kind} + val _ = List.push (blocks, block) + in + label + end + val route = + if force + then mkRoute () + else HashTable.lookupOrInsert + (routeTable, (dst, Vector.map (phiArgs, #1)), mkRoute) + in + route + end + end + end + fun rewriteStatement addPost st + = let + val st = Statement.replace (st, {const = Operand.Const, + var = rewriteVar o #var}) + val st = + case st of + Statement.SetHandler l => Statement.SetHandler (route false l) + | _ => st + in + Statement.foldDef (st, st, fn (var, _, st) => + let + val {isNew, ty, var} = rewriteVarDef addPost var + in + if isNew + then replaceDstOperand (st, {ty=ty, var=var}) + else st + end) + end + fun rewriteTransfer (t: Transfer.t) = + let + val t = + case t of + Call {args, func, + return=Return.NonTail + {cont, handler=Handler.Handle h}} => + let + val args = + Vector.map + (args, fn arg => + Operand.replace (arg, {const = Operand.Const, + var = rewriteVar o #var})) + val h' = route false h + val cont = route true cont + in + Call {args=args, + func=func, + return=Return.NonTail + {cont=cont, handler=Handler.Handle h'}} + end + | _ => Transfer.replace (t, {const = Operand.Const, + label = route false, + var = rewriteVar o #var}) + in + t + end + fun visitBlock' (Block.T {label, args, statements, transfer, kind}) + = let + val {addPost, post} = mkPost () + val li = labelInfo label + fun doit var = case rewriteVarDef addPost var of + {var, ty, ...} => (var, ty) + val args = Vector.map + (args, fn (x, _) => doit x) + val phiArgs = Vector.map + (LabelInfo.phiArgs' li, fn x => doit x) + val args = Vector.concat [args, phiArgs] + val statements = Vector.map (statements, rewriteStatement addPost) + val transfer = rewriteTransfer transfer + val kind = + case kind of + Kind.Cont {handler=Handler.Handle _} => Kind.Jump + | _ => kind + val kind = if Vector.isEmpty phiArgs then kind else Kind.Jump + val block = Block.T {label = label, + args = args, + statements = statements, + transfer = transfer, + kind = kind} + in + (block, post) + end + fun visitBlock block + = let val (block, post) = visitBlock' block + in List.push (blocks, block) ; post + end + fun rewrite () + = let + local + val (Block.T {label, args, statements, transfer, kind}, post) + = visitBlock' entryBlock + val entryBlock = Block.T {label = label, + args = Vector.new0 (), + statements = statements, + transfer = transfer, + kind = kind} + val _ = List.push (blocks, entryBlock) + in + val args = args + val post = post + end + val _ = Tree.traverse (dt, visitBlock) + val _ = post () + in + Function.new {args = args, + blocks = Vector.fromList (!blocks), + name = name, + raises = raises, + returns = returns, + start = entry} + end + val f = rewrite () + in + f + end + handle NoViolations => f + + val main = restore main + + (* check for violations in statics/main *) + fun addDef msg (x, ty) + = let + val () = remVarInfo x + val vi = varInfo x + in + VarInfo.ty vi := ty ; + VarInfo.addDef vi ; + VarInfo.whenViolates + (vi, fn () => Error.bug ("RssaRestore.restore: violation in " ^ msg)) + end + val _ = Vector.foreach (statics, addDef "statics" o #dst) + val _ = Function.foreachDef (main, addDef "main") + in + {main = main, + restore = restore} + end + +val traceRestoreFunction + = Trace.trace ("RssaRestore.restoreFunction", + Func.layout o Function.name, + Func.layout o Function.name) + +val restoreFunction + = fn {main, statics} => + let + val {main, restore} = restoreFunction {main = main, statics = statics} + in + {main = main, restore = fn f => traceRestoreFunction restore f} + end + +fun restore (Program.T {functions, handlesSignals, main, objectTypes, profileInfo, statics}) + = let + val {main, restore} = restoreFunction {main = main, statics = statics} + in + Program.T {handlesSignals = handlesSignals, + functions = List.revMap (functions, restore), + main = main, + objectTypes = objectTypes, + profileInfo = profileInfo, + statics = statics} + end +end diff -Nru mlton-20130715/mlton/backend/rssa-restore.sig mlton-20210117+dfsg/mlton/backend/rssa-restore.sig --- mlton-20130715/mlton/backend/rssa-restore.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-restore.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,23 @@ +(* Copyright (C) 2019-2020 Jason Carr, Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature RSSA_RESTORE_STRUCTS = + sig + include RSSA_LIVE + end + +signature RSSA_RESTORE = + sig + include RSSA_RESTORE_STRUCTS + + val restoreFunction: + {main: Function.t, statics: {dst: Var.t * Type.t, obj: Object.t} vector} + -> {main: Function.t, restore: Function.t -> Function.t} + val restore: Program.t -> Program.t + end diff -Nru mlton-20130715/mlton/backend/rssa-shrink.fun mlton-20210117+dfsg/mlton/backend/rssa-shrink.fun --- mlton-20130715/mlton/backend/rssa-shrink.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-shrink.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,296 @@ +(* Copyright (C) 2009,2016-2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor RssaShrink (S: RSSA_SHRINK_STRUCTS): RSSA_SHRINK = +struct + +open S + +local + open Prim +in + structure ApplyArg = ApplyArg + structure ApplyResult = ApplyResult +end + +fun shrinkFunction {main: Function.t, statics: {dst: Var.t * Type.t, obj: Object.t} vector}: + {main: unit -> Function.t, shrink: Function.t -> Function.t} = + let + val {get = varInfo: Var.t -> {occurrences: int ref, + replace: Operand.t option ref}, ...} = + Property.get + (Var.plist, Property.initFun (fn _ => {occurrences = ref 0, + replace = ref NONE})) + fun visitVar x = Int.inc (#occurrences (varInfo x)) + fun replaceVar x = + case !(#replace (varInfo x)) of + NONE => Error.bug (concat ["RssaShrink.replaceVar ", Var.toString x]) + | SOME oper => oper + fun setReplaceVar (x, oper) = + #replace (varInfo x) := SOME oper + fun dontReplaceVar (x: Var.t, t: Type.t): unit = + setReplaceVar (x, Operand.Var {var = x, ty = t}) + val setReplaceVar = fn (x: Var.t, t: Type.t, z: Operand.t) => + let + val z = + if Type.equals (Operand.ty z, t) + then z + else Operand.Cast (z, t) + in + setReplaceVar (x, z) + end + val {get = labelInfo, set = setLabelInfo, ...} = + Property.getSetOnce + (Label.plist, Property.initRaise ("RssaShrink.labelInfo", Label.layout)) + fun visitLabel l = Int.inc (#occurrences (labelInfo l)) + fun replaceLabel l = + case (! o #replace o labelInfo) l of + SOME l' => l' + | NONE => l + fun elimBlock l = + let + val {inline, occurrences, replace, ...} = labelInfo l + in + !inline orelse 0 = !occurrences orelse isSome (!replace) + end + + fun shrink (f: Function.t, clear): Function.t = + let + val {args, blocks, name, raises, returns, start} = Function.dest f + + val () = + Vector.foreach + (blocks, fn block as Block.T {label, ...} => + setLabelInfo (label, {block = block, + inline = ref false, + replace = ref NONE, + occurrences = ref 0})) + val () = visitLabel start + val () = + Vector.foreach + (blocks, fn Block.T {statements, transfer, ...} => + (Vector.foreach + (statements, fn stmt => + Statement.foreachUse (stmt, visitVar)) + ; Transfer.foreachLabelUse (transfer, + {label = visitLabel, + use = visitVar}))) + val () = + Vector.foreach + (blocks, fn Block.T {args, kind, label, statements, transfer} => + case transfer of + Transfer.Goto {args = gotoArgs, dst, ...} => + let + val {replace, ...} = labelInfo label + val {inline = dstInline, + occurrences = dstOccurrences, ...} = labelInfo dst + in + if Vector.isEmpty statements + andalso Kind.isJump kind + andalso Vector.equals + (args, gotoArgs, fn ((x, _), oper) => + !(#occurrences (varInfo x)) = 1 + andalso + (case oper of + Operand.Var {var = x', ...} => + Var.equals (x, x') + | _ => false)) + then replace := SOME dst + else if 1 = !dstOccurrences + then dstInline := true + else () + end + | _ => ()) + val () = + Vector.foreach + (blocks, fn Block.T {label, ...} => + let + val {replace, ...} = labelInfo label + fun loop (l, seen) = + case (! o #replace o labelInfo) l of + SOME l' => + if List.exists (seen, fn l'' => + Label.equals (l'', l')) + then (replace := SOME l' + ; #replace (labelInfo l') := NONE) + else loop (l', l'::seen) + | NONE => replace := (case seen of + nil => NONE + | _::nil => NONE + | l'::_ => SOME l') + in + loop (label, [label]) + end) + + fun loopFormals args = Vector.foreach (args, dontReplaceVar) + fun loopStatement (s: Statement.t): Statement.t option = + let + datatype z = datatype Statement.t + val s = Statement.replace (s, {const = Operand.Const, + var = replaceVar o #var}) + fun keep () = + (Statement.foreachDef (s, dontReplaceVar) + ; SOME s) + in + case s of + Bind {dst = (dst, dstTy), pinned, src} => + if pinned + then keep () + else + let + datatype z = datatype Operand.t + fun getSrc src = + case src of + Cast (src, _) => getSrc src + | Const _ => SOME src + | Var _ => SOME src + | _ => NONE + in + case getSrc src of + NONE => keep () + | SOME src => + (setReplaceVar (dst, dstTy, src) + ; NONE) + end + | PrimApp {args, dst, prim} => + let + fun replace (z: Operand.t): Statement.t option = + (Option.app (dst, fn (x, t) => + setReplaceVar (x, t, z)) + ; NONE) + datatype z = datatype Operand.t + fun getArg arg = + case arg of + Cast (arg, _) => getArg arg + | Const c => SOME (ApplyArg.Const c) + | Var x => SOME (ApplyArg.Var x) + | _ => NONE + val applyArgs = Vector.toListKeepAllMap (args, getArg) + datatype z = datatype ApplyResult.t + in + if Vector.length args <> List.length applyArgs + then keep () + else + case (Prim.apply + (prim, applyArgs, + fn ({var = x, ...}, {var = y, ...}) => + Var.equals (x, y))) of + Apply (prim, args) => + let + val args = + Vector.fromListMap (args, Operand.Var) + val () = Option.app (dst, dontReplaceVar) + in + SOME (PrimApp {args = args, + dst = dst, + prim = prim}) + end + | Bool b => replace (Operand.bool b) + | Const c => replace (Operand.Const c) + | Unknown => keep () + | Var x => replace (Operand.Var x) + end + | _ => keep () + end + fun loopStatementsTransfer (statements: Statement.t vector, transfer: Transfer.t) = + let + val stmts = ref [] + fun loop (ss, t) = + let + val () = List.push (stmts, Vector.keepAllMap (ss, loopStatement)) + val t = Transfer.replace (t, {const = Operand.Const, + label = replaceLabel, + var = replaceVar o #var}) + fun done () = (Vector.concat (List.rev (!stmts)), t) + in + case t of + Transfer.Goto {args, dst} => + let + val {block, inline, ...} = labelInfo dst + in + if !inline + then let + val Block.T {args = formals, statements, transfer, ...} = + block + val binds = + Vector.map2 + (formals, args, fn (dst, src) => + Statement.Bind {dst = dst, + pinned = false, + src = src}) + val () = List.push (stmts, Vector.keepAllMap (binds, loopStatement)) + in + loop (statements, transfer) + end + else done () + end + | _ => done () + end + in + loop (statements, transfer) + end + + val start = replaceLabel start + val () = loopFormals args + val blocks = ref [] + val () = + Function.dfs + (f, fn Block.T {args, kind, label, statements, transfer} => + let + val () = + if elimBlock label + then () + else let + val () = loopFormals args + val (statements, transfer) = + loopStatementsTransfer (statements, transfer) + in + List.push (blocks, + Block.T {args = args, + kind = kind, + label = label, + statements = statements, + transfer = transfer}) + end + in + fn () => () + end) + val blocks = Vector.fromList (!blocks) + val f = Function.new {args = args, + blocks = blocks, + name = name, + raises = raises, + returns = returns, + start = start} + val _ = if clear then Function.clear f else () + in + f + end + val () = Vector.foreach (statics, dontReplaceVar o #dst) + val main = shrink (main, false) + in + {main = fn () => (Function.clear main; main), + shrink = fn f => shrink (f, true)} + end + +fun shrink (Program.T {functions, handlesSignals, main, objectTypes, profileInfo, statics}): Program.t = + let + val {main, shrink} = shrinkFunction {main = main, statics = statics} + val functions = List.revMap (functions, shrink) + val main = main () + in + Program.T {functions = functions, + handlesSignals = handlesSignals, + main = main, + objectTypes = objectTypes, + profileInfo = profileInfo, + statics = statics} + end + +end diff -Nru mlton-20130715/mlton/backend/rssa-shrink.sig mlton-20210117+dfsg/mlton/backend/rssa-shrink.sig --- mlton-20130715/mlton/backend/rssa-shrink.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-shrink.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,23 @@ +(* Copyright (C) 2009,2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature RSSA_SHRINK_STRUCTS = + sig + include RSSA_TYPE_CHECK + end + +signature RSSA_SHRINK = + sig + include RSSA_SHRINK_STRUCTS + + val shrinkFunction: + {main: Function.t, statics: {dst: Var.t * Type.t, obj: Object.t} vector} + -> {main: unit -> Function.t, shrink: Function.t -> Function.t} + val shrink: Program.t -> Program.t + end diff -Nru mlton-20130715/mlton/backend/rssa.sig mlton-20210117+dfsg/mlton/backend/rssa.sig --- mlton-20130715/mlton/backend/rssa.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,238 +1,12 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. +(* Copyright (C) 2019 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -signature RSSA_STRUCTS = - sig - include ATOMS - - structure Handler: HANDLER - structure ObjectType: OBJECT_TYPE - structure ObjptrTycon: OBJPTR_TYCON - structure Return: RETURN - structure Runtime: RUNTIME - structure Scale: SCALE - structure Type: REP_TYPE +signature RSSA_STRUCTS = RSSA_TREE_STRUCTS - sharing Atoms = Type - sharing Handler = Return.Handler - sharing Label = Handler.Label = Return.Label - sharing ObjectType = Type.ObjectType - sharing ObjptrTycon = ObjectType.ObjptrTycon = Type.ObjptrTycon - sharing Runtime = Type.Runtime - sharing Scale = Type.Scale - end - -signature RSSA = +signature RSSA = sig - include RSSA_STRUCTS - - structure Switch: SWITCH - sharing Atoms = Switch - - structure Operand: - sig - datatype t = - ArrayOffset of {base: t, - index: t, - offset: Bytes.t, - scale: Scale.t, - ty: Type.t} - | Cast of t * Type.t - | Const of Const.t - (* EnsuresBytesFree is a pseudo-op used by C functions (like - * GC_allocateArray) that take a number of bytes as an argument - * and ensure that that number of bytes is free upon return. - * EnsuresBytesFree is replaced by the limit check pass with - * a real operand. - *) - | EnsuresBytesFree - | GCState - | Offset of {base: t, - offset: Bytes.t, - ty: Type.t} - | ObjptrTycon of ObjptrTycon.t - | Runtime of Runtime.GCField.t - | Var of {ty: Type.t, - var: Var.t} - - val bool: bool -> t - val cast: t * Type.t -> t - val layout: t -> Layout.t - val null: t - val replaceVar: t * (Var.t -> t) -> t - val ty: t -> Type.t - val word: WordX.t -> t - val zero: WordSize.t -> t - end - sharing Operand = Switch.Use - - structure Statement: - sig - datatype t = - Bind of {dst: Var.t * Type.t, - isMutable: bool, - src: Operand.t} - | Move of {dst: Operand.t, - src: Operand.t} - | Object of {dst: Var.t * Type.t, - header: word, - size: Bytes.t (* including header *)} - | PrimApp of {args: Operand.t vector, - dst: (Var.t * Type.t) option, - prim: Type.t Prim.t} - | Profile of ProfileExp.t - | ProfileLabel of ProfileLabel.t - | SetExnStackLocal - | SetExnStackSlot - | SetHandler of Label.t (* label must be of Handler kind. *) - | SetSlotExnStack - - (* foldDef (s, a, f) - * If s defines a variable x, then return f (x, a), else return a. - *) - val foldDef: t * 'a * (Var.t * Type.t * 'a -> 'a) -> 'a - (* foreachDef (s, f) = foldDef (s, (), fn (x, ()) => f x) *) - val foreachDef: t * (Var.t * Type.t -> unit) -> unit - val foreachDefUse: t * {def: (Var.t * Type.t) -> unit, - use: Var.t -> unit} -> unit - val foldUse: t * 'a * (Var.t * 'a -> 'a) -> 'a - val foreachUse: t * (Var.t -> unit) -> unit - val layout: t -> Layout.t - val replaceUses: t * (Var.t -> Operand.t) -> t - val resize: Operand.t * Type.t -> Operand.t * t list - val toString: t -> string - end - - structure Transfer: - sig - datatype t = - Arith of {args: Operand.t vector, - dst: Var.t, - overflow: Label.t, (* Must be nullary. *) - prim: Type.t Prim.t, - success: Label.t, (* Must be nullary. *) - ty: Type.t} - | CCall of {args: Operand.t vector, - func: Type.t CFunction.t, - (* return is NONE iff the CFunction doesn't return. - * Else, return must be SOME l, where l is of kind - * CReturn. The return should be nullary if the C - * function returns void. Else, it should be unary with - * a var of the appropriate type to accept the result. - *) - return: Label.t option} - | Call of {args: Operand.t vector, - func: Func.t, - return: Return.t} - | Goto of {args: Operand.t vector, - dst: Label.t} - (* Raise implicitly raises to the caller. - * I.E. the local handler stack must be empty. - *) - | Raise of Operand.t vector - | Return of Operand.t vector - | Switch of Switch.t - - val bug: unit -> t - (* foldDef (t, a, f) - * If t defines a variable x, then return f (x, a), else return a. - *) - val foldDef: t * 'a * (Var.t * Type.t * 'a -> 'a) -> 'a - (* foreachDef (t, f) = foldDef (t, (), fn (x, ()) => f x) *) - val foreachDef: t * (Var.t * Type.t -> unit) -> unit - val foreachDefLabelUse: t * {def: Var.t * Type.t -> unit, - label: Label.t -> unit, - use: Var.t -> unit} -> unit - val foreachFunc: t * (Func.t -> unit) -> unit - val foreachLabel: t * (Label.t -> unit) -> unit - val foreachUse: t * (Var.t -> unit) -> unit - val ifBool: Operand.t * {falsee: Label.t, truee: Label.t} -> t - (* in ifZero, the operand should be of type defaultWord *) - val ifZero: Operand.t * {falsee: Label.t, truee: Label.t} -> t - val layout: t -> Layout.t - val replaceUses: t * (Var.t -> Operand.t) -> t - end - - structure Kind: - sig - datatype t = - Cont of {handler: Handler.t} - | CReturn of {func: Type.t CFunction.t} - | Handler - | Jump - - datatype frameStyle = None | OffsetsAndSize | SizeOnly - val frameStyle: t -> frameStyle - end - - structure Block: - sig - datatype t = - T of {args: (Var.t * Type.t) vector, - kind: Kind.t, - label: Label.t, - statements: Statement.t vector, - transfer: Transfer.t} - - val clear: t -> unit - val kind: t -> Kind.t - val label: t -> Label.t - val layout: t -> Layout.t - end - - structure Function: - sig - type t - - val blocks: t -> Block.t vector - val clear: t -> unit - val dest: t -> {args: (Var.t * Type.t) vector, - blocks: Block.t vector, - name: Func.t, - raises: Type.t vector option, - returns: Type.t vector option, - start: Label.t} - (* dfs (f, v) visits the blocks in depth-first order, applying v b - * for block b to yield v', then visiting b's descendents, - * then applying v' (). - *) - val dfs: t * (Block.t -> unit -> unit) -> unit - val foreachVar: t * (Var.t * Type.t -> unit) -> unit - val name: t -> Func.t - val new: {args: (Var.t * Type.t) vector, - blocks: Block.t vector, - name: Func.t, - raises: Type.t vector option, - returns: Type.t vector option, - start: Label.t} -> t - end - - structure Program: - sig - datatype t = - T of {functions: Function.t list, - handlesSignals: bool, - main: Function.t, - objectTypes: ObjectType.t vector} - - val clear: t -> unit - val checkHandlers: t -> unit - (* dfs (p, v) visits the functions in depth-first order, applying v f - * for function f to yield v', then visiting b's descendents, - * then applying v' (). - *) - val dfs: t * (Function.t -> unit -> unit) -> unit - val dropProfile: t -> t - val layouts: t * (Layout.t -> unit) -> unit - val layoutStats: t -> Layout.t - val orderFunctions: t -> t - val shrink: t -> t - val typeCheck: t -> unit - end + include RSSA_SIMPLIFY end diff -Nru mlton-20130715/mlton/backend/rssa-simplify.fun mlton-20210117+dfsg/mlton/backend/rssa-simplify.fun --- mlton-20130715/mlton/backend/rssa-simplify.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-simplify.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,57 @@ +(* Copyright (C) 2019-2020 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor RssaSimplify (S: RSSA_SIMPLIFY_STRUCTS): RSSA_SIMPLIFY = +struct + +open S + +structure BounceVars = BounceVars (S) +structure CollectStatics = CollectStatics (S) +structure ImplementHandlers = ImplementHandlers (S) +structure ImplementProfiling = ImplementProfiling (S) +structure LimitCheck = LimitCheck (S) +structure SignalCheck = SignalCheck(S) + +val rssaPasses = + {name = "rssaShrink1", doit = S.shrink, execute = true} :: + {name = "collectStatics.WordXVectorConsts", + doit = CollectStatics.WordXVectorConsts.transform, + execute = true} :: + {name = "collectStatics.Globals", + doit = CollectStatics.Globals.transform, + execute = true} :: + {name = "collectStatics.RealConsts", + doit = CollectStatics.RealConsts.transform, + execute = true} :: + {name = "insertLimitChecks", doit = LimitCheck.transform, execute = true} :: + {name = "insertSignalChecks", doit = SignalCheck.transform, execute = true} :: + (* must be before implementHandlers *) + {name = "bounceVars", doit = BounceVars.transform, execute = true} :: + {name = "implementHandlers", doit = ImplementHandlers.transform, execute = true} :: + {name = "rssaShrink2", doit = S.shrink, execute = true} :: + {name = "implementProfiling", doit = ImplementProfiling.transform, execute = true} :: + {name = "rssaOrderFunctions", doit = Program.orderFunctions, execute = true} :: + {name = "rssaShuffle", doit = Program.shuffle, execute = false} :: + nil + +fun simplify p = + let + val rssaPasses = rssaPasses + (* RSSA type check is too slow to run by default. *) + (* val () = Control.trace (Control.Pass, "rssaTypeCheck") typeCheck p *) + val p = + Control.simplifyPasses + {arg = p, + passes = rssaPasses, + stats = Program.layoutStats, + toFile = Program.toFile, + typeCheck = typeCheck} + (* val () = Control.trace (Control.Pass, "rssaTypeCheck") typeCheck p *) + in + p + end +end diff -Nru mlton-20130715/mlton/backend/rssa-simplify.sig mlton-20210117+dfsg/mlton/backend/rssa-simplify.sig --- mlton-20130715/mlton/backend/rssa-simplify.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-simplify.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,17 @@ +(* Copyright (C) 2019 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature RSSA_SIMPLIFY_STRUCTS = + sig + include RSSA_RESTORE + end + +signature RSSA_SIMPLIFY = + sig + include RSSA_SIMPLIFY_STRUCTS + + val simplify: Program.t -> Program.t + end diff -Nru mlton-20130715/mlton/backend/rssa-transform.sig mlton-20210117+dfsg/mlton/backend/rssa-transform.sig --- mlton-20130715/mlton/backend/rssa-transform.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-transform.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,19 +1,20 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature RSSA_TRANSFORM_STRUCTS = sig - structure Rssa: RSSA + include RSSA_RESTORE end signature RSSA_TRANSFORM = sig include RSSA_TRANSFORM_STRUCTS - val transform: Rssa.Program.t -> Rssa.Program.t + val transform: Program.t -> Program.t end diff -Nru mlton-20130715/mlton/backend/rssa-tree.fun mlton-20210117+dfsg/mlton/backend/rssa-tree.fun --- mlton-20130715/mlton/backend/rssa-tree.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-tree.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,988 @@ +(* Copyright (C) 2009,2016-2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor RssaTree (S: RSSA_TREE_STRUCTS): RSSA_TREE = +struct + +open S + +local + open Runtime +in + structure CFunction = CFunction + structure GCField = GCField +end + +fun constrain (ty: Type.t): Layout.t = + let + open Layout + in + if !Control.showTypes + then seq [str ": ", Type.layout ty] + else empty + end + +structure Operand = + struct + datatype t = + Cast of t * Type.t + | Const of Const.t + | GCState + | Offset of {base: t, + offset: Bytes.t, + ty: Type.t} + | ObjptrTycon of ObjptrTycon.t + | Runtime of GCField.t + | SequenceOffset of {base: t, + index: t, + offset: Bytes.t, + scale: Scale.t, + ty: Type.t} + | Var of {var: Var.t, + ty: Type.t} + + val null = Const Const.null + + val word = Const o Const.word + val deWord = + fn Const (Const.Word w) => SOME w + | _ => NONE + + val one = word o WordX.one + val zero = word o WordX.zero + + fun bool b = (if b then one else zero) WordSize.bool + + val ty = + fn Cast (_, ty) => ty + | Const c => Type.ofConst c + | GCState => Type.gcState () + | Offset {ty, ...} => ty + | ObjptrTycon _ => Type.objptrHeader () + | Runtime z => Type.ofGCField z + | SequenceOffset {ty, ...} => ty + | Var {ty, ...} => ty + + fun layout (z: t): Layout.t = + let + open Layout + in + case z of + Cast (z, ty) => + seq [str "Cast ", tuple [layout z, Type.layout ty]] + | Const c => seq [Const.layout c, constrain (ty z)] + | GCState => str "" + | Offset {base, offset, ty} => + seq [str (concat ["O", Type.name ty, " "]), + tuple [layout base, Bytes.layout offset], + constrain ty] + | ObjptrTycon opt => ObjptrTycon.layout opt + | Runtime r => GCField.layout r + | SequenceOffset {base, index, offset, scale, ty} => + seq [str (concat ["X", Type.name ty, " "]), + tuple [layout base, layout index, Scale.layout scale, + Bytes.layout offset]] + | Var {var, ...} => Var.layout var + end + + fun cast (z: t, t: Type.t): t = + if Type.equals (t, ty z) + then z + else Cast (z, t) + + val cast = Trace.trace2 ("Rssa.Operand.cast", layout, Type.layout, layout) cast + + fun 'a foldVars (z: t, a: 'a, f: Var.t * 'a -> 'a): 'a = + case z of + Cast (z, _) => foldVars (z, a, f) + | Offset {base, ...} => foldVars (base, a, f) + | SequenceOffset {base, index, ...} => + foldVars (index, foldVars (base, a, f), f) + | Var {var, ...} => f (var, a) + | _ => a + + fun replace (z: t, {const: Const.t -> t, + var: {ty: Type.t, var: Var.t} -> t}): t = + let + fun loop (z: t): t = + case z of + Cast (t, ty) => Cast (loop t, ty) + | Const c => const c + | Offset {base, offset, ty} => + Offset {base = loop base, + offset = offset, + ty = ty} + | SequenceOffset {base, index, offset, scale, ty} => + SequenceOffset {base = loop base, + index = loop index, + offset = offset, + scale = scale, + ty = ty} + | Var x_ty => var x_ty + | _ => z + in + loop z + end + end + +structure Object = + struct + local + structure S = Object (open S + structure Use = Operand) + in + open S + end + + fun replace' (s, {const, var}) = + replace (s, {use = fn oper => Operand.replace (oper, {const = const, + var = var})}) + end + +structure Statement = + struct + datatype t = + Bind of {dst: Var.t * Type.t, + pinned: bool, + src: Operand.t} + | Move of {dst: Operand.t, + src: Operand.t} + | Object of {dst: Var.t * Type.t, + obj: Object.t} + | PrimApp of {args: Operand.t vector, + dst: (Var.t * Type.t) option, + prim: Type.t Prim.t} + | Profile of ProfileExp.t + | ProfileLabel of ProfileLabel.t + | SetExnStackLocal + | SetExnStackSlot + | SetHandler of Label.t + | SetSlotExnStack + + fun 'a foldDefUse (s, a: 'a, {def: Var.t * Type.t * 'a -> 'a, + use: Var.t * 'a -> 'a}): 'a = + let + fun useOperand (z: Operand.t, a) = Operand.foldVars (z, a, use) + in + case s of + Bind {dst = (x, t), src, ...} => def (x, t, useOperand (src, a)) + | Move {dst, src} => useOperand (src, useOperand (dst, a)) + | Object {dst = (x, t), obj} => def (x, t, Object.foldUse (obj, a, useOperand)) + | PrimApp {dst, args, ...} => + Vector.fold (args, + Option.fold (dst, a, fn ((x, t), a) => + def (x, t, a)), + useOperand) + | Profile _ => a + | ProfileLabel _ => a + | SetExnStackLocal => a + | SetExnStackSlot => a + | SetHandler _ => a + | SetSlotExnStack => a + end + + fun foreachDefUse (s: t, {def, use}) = + foldDefUse (s, (), {def = fn (x, t, ()) => def (x, t), + use = use o #1}) + + fun 'a foldDef (s: t, a: 'a, f: Var.t * Type.t * 'a -> 'a): 'a = + foldDefUse (s, a, {def = f, use = #2}) + + fun foreachDef (s:t , f: Var.t * Type.t -> unit) = + foldDef (s, (), fn (x, t, ()) => f (x, t)) + + fun 'a foldUse (s: t, a: 'a, f: Var.t * 'a -> 'a) = + foldDefUse (s, a, {def = #3, use = f}) + + fun foreachUse (s, f) = foldUse (s, (), f o #1) + + fun replace (s: t, fs as {const: Const.t -> Operand.t, + var: {ty: Type.t, var: Var.t} -> Operand.t}): t = + let + fun oper (z: Operand.t): Operand.t = + Operand.replace (z, {const = const, var = var}) + in + case s of + Bind {dst, pinned, src} => + Bind {dst = dst, + pinned = pinned, + src = oper src} + | Move {dst, src} => Move {dst = oper dst, src = oper src} + | Object {dst, obj} => Object {dst = dst, obj = Object.replace' (obj, fs)} + | PrimApp {args, dst, prim} => + PrimApp {args = Vector.map (args, oper), + dst = dst, + prim = prim} + | Profile _ => s + | ProfileLabel _ => s + | SetExnStackLocal => s + | SetExnStackSlot => s + | SetHandler _ => s + | SetSlotExnStack => s + end + + val layout = + let + open Layout + in + fn Bind {dst = (x, t), src, ...} => + mayAlign + [seq [Var.layout x, constrain t], + indent (seq [str "= ", Operand.layout src], 2)] + | Move {dst, src} => + mayAlign + [Operand.layout dst, + indent (seq [str ":= ", Operand.layout src], 2)] + | Object {dst = (x, t), obj} => + mayAlign + [seq [Var.layout x, constrain t], + indent (seq [str "= ", Object.layout obj], 2)] + | PrimApp {dst, prim, args, ...} => + mayAlign + [case dst of + NONE => seq [str "_", constrain (Type.unit)] + | SOME (x, t) => seq [Var.layout x, constrain t], + indent (seq [str "= ", Prim.layout prim, str " ", + Vector.layout Operand.layout args], + 2)] + | Profile e => ProfileExp.layout e + | ProfileLabel p => + seq [str "ProfileLabel ", ProfileLabel.layout p] + | SetExnStackLocal => str "SetExnStackLocal" + | SetExnStackSlot => str "SetExnStackSlot " + | SetHandler l => seq [str "SetHandler ", Label.layout l] + | SetSlotExnStack => str "SetSlotExnStack " + end + + val toString = Layout.toString o layout + + fun clear (s: t) = + foreachDef (s, Var.clear o #1) + + fun resize (src: Operand.t, dstTy: Type.t): Operand.t * t list = + let + val srcTy = Operand.ty src + + val (src, srcTy, ssSrc, dstTy, finishDst) = + case (Type.deReal srcTy, Type.deReal dstTy) of + (NONE, NONE) => + (src, srcTy, [], dstTy, fn dst => (dst, [])) + | (SOME rs, NONE) => + let + val ws = WordSize.fromBits (RealSize.bits rs) + val tmp = Var.newNoname () + val tmpTy = Type.word ws + in + (Operand.Var {ty = tmpTy, var = tmp}, + tmpTy, + [PrimApp {args = Vector.new1 src, + dst = SOME (tmp, tmpTy), + prim = Prim.Real_castToWord (rs, ws)}], + dstTy, fn dst => (dst, [])) + end + | (NONE, SOME rs) => + let + val ws = WordSize.fromBits (RealSize.bits rs) + val tmp = Var.newNoname () + val tmpTy = Type.real rs + in + (src, srcTy, [], + Type.word ws, + fn dst => + (Operand.Var {ty = tmpTy, var = tmp}, + [PrimApp {args = Vector.new1 dst, + dst = SOME (tmp, tmpTy), + prim = Prim.Word_castToReal (ws, rs)}])) + end + | (SOME _, SOME _) => + (src, srcTy, [], dstTy, fn dst => (dst, [])) + + val srcW = Type.width srcTy + val dstW = Type.width dstTy + + val (dst, ssConv) = + if Bits.equals (srcW, dstW) + then (Operand.cast (src, dstTy), []) + else let + val tmp = Var.newNoname () + val tmpTy = dstTy + in + (Operand.Var {ty = tmpTy, var = tmp}, + [PrimApp {args = Vector.new1 src, + dst = SOME (tmp, tmpTy), + prim = (Prim.Word_extdToWord + (WordSize.fromBits srcW, + WordSize.fromBits dstW, + {signed = false}))}]) + end + + val (dst, ssDst) = finishDst dst + in + (dst, ssSrc @ ssConv @ ssDst) + end + end + +structure Switch = + struct + local + structure S = Switch (open S + structure Use = Operand) + in + open S + end + + fun replace' (s, {const, label, var}) = + replace (s, {label = label, + use = fn oper => Operand.replace (oper, {const = const, + var = var})}) + end + +structure Transfer = + struct + datatype t = + CCall of {args: Operand.t vector, + func: Type.t CFunction.t, + return: Label.t option} + | Call of {args: Operand.t vector, + func: Func.t, + return: Return.t} + | Goto of {args: Operand.t vector, + dst: Label.t} + | Raise of Operand.t vector + | Return of Operand.t vector + | Switch of Switch.t + + fun layout t = + let + open Layout + in + case t of + CCall {args, func, return} => + seq [str "CCall ", + record [("args", Vector.layout Operand.layout args), + ("func", CFunction.layout (func, Type.layout)), + ("return", Option.layout Label.layout return)]] + | Call {args, func, return} => + seq [Func.layout func, str " ", + Vector.layout Operand.layout args, + str " ", Return.layout return] + | Goto {dst, args} => + seq [Label.layout dst, str " ", + Vector.layout Operand.layout args] + | Raise xs => seq [str "raise ", Vector.layout Operand.layout xs] + | Return xs => seq [str "return ", Vector.layout Operand.layout xs] + | Switch s => Switch.layout s + end + + fun bug () = + CCall {args = (Vector.new1 + (Operand.Const + (Const.string "control shouldn't reach here"))), + func = Type.BuiltInCFunction.bug (), + return = NONE} + + fun foreachFunc (t, f : Func.t -> unit) : unit = + case t of + Call {func, ...} => f func + | _ => () + + fun 'a foldLabelUse (t, a: 'a, + {label: Label.t * 'a -> 'a, + use: Var.t * 'a -> 'a}): 'a = + let + fun useOperand (z, a) = Operand.foldVars (z, a, use) + fun useOperands (zs: Operand.t vector, a) = + Vector.fold (zs, a, useOperand) + in + case t of + CCall {args, return, ...} => + useOperands (args, + case return of + NONE => a + | SOME l => label (l, a)) + | Call {args, return, ...} => + useOperands (args, Return.foldLabel (return, a, label)) + | Goto {args, dst, ...} => label (dst, useOperands (args, a)) + | Raise zs => useOperands (zs, a) + | Return zs => useOperands (zs, a) + | Switch s => Switch.foldLabelUse (s, a, {label = label, + use = useOperand}) + end + + fun foreachLabelUse (t, {label, use}) = + foldLabelUse (t, (), {label = label o #1, + use = use o #1}) + + fun foldLabel (t, a, f) = foldLabelUse (t, a, {label = f, + use = #2}) + + fun foreachLabel (t, f) = foldLabel (t, (), f o #1) + + fun foldUse (t, a, f) = foldLabelUse (t, a, {label = #2, + use = f}) + + fun foreachUse (t, f) = foldUse (t, (), f o #1) + + local + fun make i = WordX.fromIntInf (i, WordSize.bool) + in + fun ifBoolE (test, expect, {falsee, truee}) = + Switch (Switch.T + {cases = Vector.new2 ((make 0, falsee), (make 1, truee)), + default = NONE, + expect = Option.map (expect, fn expect => if expect then make 1 else make 0), + size = WordSize.bool, + test = test}) + fun ifBool (test, branches) = ifBoolE (test, NONE, branches) + fun ifZero (test, {falsee, truee}) = + Switch (Switch.T + {cases = Vector.new1 (make 0, truee), + default = SOME falsee, + expect = NONE, + size = WordSize.bool, + test = test}) + end + + fun replace (t: t, fs as {const: Const.t -> Operand.t, + label: Label.t -> Label.t, + var: {ty: Type.t, var: Var.t} -> Operand.t}): t = + let + fun oper z = Operand.replace (z, {const = const, var = var}) + fun opers zs = Vector.map (zs, oper) + in + case t of + CCall {args, func, return} => + CCall {args = opers args, + func = func, + return = Option.map (return, label)} + | Call {args, func, return} => + Call {args = opers args, + func = func, + return = Return.map (return, label)} + | Goto {args, dst} => + Goto {args = opers args, + dst = label dst} + | Raise zs => Raise (opers zs) + | Return zs => Return (opers zs) + | Switch s => Switch (Switch.replace' (s, fs)) + end + fun replaceLabels (s, label) = + replace (s, {const = Operand.Const, + label = label, + var = Operand.Var}) + end + +structure Kind = + struct + datatype t = + Cont of {handler: Handler.t} + | CReturn of {func: Type.t CFunction.t} + | Handler + | Jump + + fun isJump k = + case k of + Jump => true + | _ => false + + fun layout k = + let + open Layout + in + case k of + Cont {handler} => + seq [str "Cont ", + record [("handler", Handler.layout handler)]] + | CReturn {func} => + seq [str "CReturn ", + record [("func", CFunction.layout (func, Type.layout))]] + | Handler => str "Handler" + | Jump => str "Jump" + end + + datatype frameStyle = None | OffsetsAndSize | SizeOnly + fun frameStyle (k: t): frameStyle = + case k of + Cont _ => OffsetsAndSize + | CReturn {func, ...} => + if CFunction.mayGC func + then OffsetsAndSize + else if !Control.profile = Control.ProfileNone + then None + else SizeOnly + | Handler => SizeOnly + | Jump => None + end + +local + open Layout +in + fun layoutFormals (xts: (Var.t * Type.t) vector) = + Vector.layout (fn (x, t) => + seq [Var.layout x, + if !Control.showTypes + then seq [str ": ", Type.layout t] + else empty]) + xts +end + +structure Block = + struct + datatype t = + T of {args: (Var.t * Type.t) vector, + kind: Kind.t, + label: Label.t, + statements: Statement.t vector, + transfer: Transfer.t} + + local + fun make f (T r) = f r + in + val kind = make #kind + val label = make #label + end + + fun clear (T {args, label, statements, ...}) = + (Vector.foreach (args, Var.clear o #1) + ; Label.clear label + ; Vector.foreach (statements, Statement.clear)) + + fun layout (T {args, kind, label, statements, transfer, ...}) = + let + open Layout + in + align [seq [Label.layout label, str " ", + Vector.layout (fn (x, t) => + if !Control.showTypes + then seq [Var.layout x, str ": ", + Type.layout t] + else Var.layout x) args, + str " ", Kind.layout kind, str " = "], + indent (align + [align + (Vector.toListMap (statements, Statement.layout)), + Transfer.layout transfer], + 2)] + end + + fun foreachDef (T {args, statements, ...}, f) = + (Vector.foreach (args, f) + ; Vector.foreach (statements, fn s => Statement.foreachDef (s, f))) + + fun foreachUse (T {statements, transfer, ...}, f) = + (Vector.foreach (statements, fn s => Statement.foreachUse (s, f)) + ; Transfer.foreachUse (transfer, f)) + end + +structure Function = + struct + datatype t = T of {args: (Var.t * Type.t) vector, + blocks: Block.t vector, + name: Func.t, + raises: Type.t vector option, + returns: Type.t vector option, + start: Label.t} + + local + fun make f (T r) = f r + in + val blocks = make #blocks + val name = make #name + end + + fun dest (T r) = r + val new = T + + fun clear (T {name, args, blocks, ...}) = + (Func.clear name + ; Vector.foreach (args, Var.clear o #1) + ; Vector.foreach (blocks, Block.clear)) + + fun layoutHeader (T {args, name, raises, returns, start, ...}): Layout.t = + let + open Layout + in + seq [str "fun ", Func.layout name, + str " ", layoutFormals args, + if !Control.showTypes + then seq [str ": ", + record [("raises", + Option.layout + (Vector.layout Type.layout) raises), + ("returns", + Option.layout + (Vector.layout Type.layout) returns)]] + else empty, + str " = ", Label.layout start, str " ()"] + end + + fun layouts (f as T {blocks, ...}, output) = + (output (layoutHeader f) + ; Vector.foreach (blocks, fn b => + output (Layout.indent (Block.layout b, 2)))) + + fun layout (f as T {blocks, ...}) = + let + open Layout + in + align [layoutHeader f, + indent (align (Vector.toListMap (blocks, Block.layout)), 2)] + end + + fun foreachDef (T {args, blocks, ...}, f) = + (Vector.foreach (args, f) + ; (Vector.foreach (blocks, fn b => Block.foreachDef (b, f)))) + + fun foreachUse (T {blocks, ...}, f) = + Vector.foreach (blocks, fn b => Block.foreachUse (b, f)) + + fun dfs (T {blocks, start, ...}, v) = + let + val numBlocks = Vector.length blocks + val {get = labelIndex, set = setLabelIndex, rem, ...} = + Property.getSetOnce (Label.plist, + Property.initRaise ("index", Label.layout)) + val _ = Vector.foreachi (blocks, fn (i, Block.T {label, ...}) => + setLabelIndex (label, i)) + val visited = Array.array (numBlocks, false) + fun visit (l: Label.t): unit = + let + val i = labelIndex l + in + if Array.sub (visited, i) + then () + else + let + val _ = Array.update (visited, i, true) + val b as Block.T {transfer, ...} = + Vector.sub (blocks, i) + val v' = v b + val _ = Transfer.foreachLabel (transfer, visit) + val _ = v' () + in + () + end + end + val _ = visit start + val _ = Vector.foreach (blocks, rem o Block.label) + in + () + end + + structure Graph = DirectedGraph + structure Node = Graph.Node + + fun overlayGraph (T {blocks, ...}) = + let + open Dot + val g = Graph.new () + fun newNode () = Graph.newNode g + val {get = labelNode, rem = remLabelNode, ...} = + Property.get + (Label.plist, Property.initFun (fn _ => newNode ())) + val {get = nodeInfo: unit Node.t -> Block.t, + set = setNodeInfo, ...} = + Property.getSetOnce + (Node.plist, Property.initRaise ("info", Node.layout)) + val () = + Vector.foreach + (blocks, fn b as Block.T {label, ...}=> + setNodeInfo (labelNode label, b)) + fun destroyLabelNode () = + Vector.foreach (blocks, remLabelNode o Block.label) + in + (g, {labelNode = labelNode, + destroyLabelNode = destroyLabelNode, + nodeInfo = nodeInfo}) + end + + fun dominatorTree (t as T {blocks, start, ...}): Block.t Tree.t = + let + val (g, {labelNode, destroyLabelNode, nodeInfo}) = overlayGraph t + val _ = + Vector.foreach + (blocks, fn Block.T {transfer, label = from, ...} => + Transfer.foreachLabel + (transfer, fn to => + ignore (Graph.addEdge (g, {from = labelNode from, to = labelNode to})))) + in + Graph.dominatorTree (g, {root = labelNode start, nodeValue = nodeInfo}) + before destroyLabelNode () + end + + fun loopForest (t as T {blocks, start, ...}, predicate) = + let + val (g, {labelNode, destroyLabelNode, nodeInfo}) = overlayGraph t + val _ = + Vector.foreach + (blocks, fn from as Block.T {transfer, label, ...} => + Transfer.foreachLabel + (transfer, fn to => + if predicate (from, (nodeInfo o labelNode) to) + then ignore (Graph.addEdge (g, {from = labelNode label, to = labelNode to})) + else ignore (Graph.addEdge (g, {from = labelNode start, to = labelNode to})))) + in + Graph.loopForestSteensgaard (g, {root = labelNode start, nodeValue = nodeInfo}) + before destroyLabelNode () + end + + fun dropProfile (f: t): t = + let + val {args, blocks, name, raises, returns, start} = dest f + val blocks = + Vector.map + (blocks, fn Block.T {args, kind, label, statements, transfer} => + Block.T {args = args, + kind = kind, + label = label, + statements = Vector.keepAll + (statements, + fn Statement.Profile _ => false + | Statement.ProfileLabel _ => false + | _ => true), + transfer = transfer}) + in + new {args = args, + blocks = blocks, + name = name, + raises = raises, + returns = returns, + start = start} + end + + fun shuffle (f: t): t = + let + val {args, blocks, name, raises, returns, start} = dest f + val blocks = Array.fromVector blocks + val () = Array.shuffle blocks + in + new {args = args, + blocks = Array.toVector blocks, + name = name, + raises = raises, + returns = returns, + start = start} + end + end + +structure Program = + struct + datatype t = + T of {functions: Function.t list, + handlesSignals: bool, + main: Function.t, + objectTypes: ObjectType.t vector, + profileInfo: {sourceMaps: SourceMaps.t, + getFrameSourceSeqIndex: Label.t -> int option} option, + statics: {dst: Var.t * Type.t, obj: Object.t} vector} + + fun clear (T {functions, main, statics, ...}) = + (List.foreach (functions, Function.clear) + ; Function.clear main + ; Vector.foreach (statics, Statement.clear o Statement.Object)) + + fun layouts (T {functions, main, objectTypes, statics, ...}, + output': Layout.t -> unit): unit = + let + open Layout + val output = output' + in + output (str "\nObjectTypes:") + ; Vector.foreachi (objectTypes, fn (i, ty) => + output (seq [str "opt_", Int.layout i, + str " = ", ObjectType.layout ty])) + ; output (str "\nStatics:") + ; Vector.foreach (statics, output o Statement.layout o Statement.Object) + ; output (str "\nMain:") + ; Function.layouts (main, output) + ; output (str "\nFunctions:") + ; List.foreach (functions, fn f => Function.layouts (f, output)) + end + + val toFile = {display = Control.Layouts layouts, style = Control.ML, suffix = "rssa"} + + fun layoutStats (program as T {functions, main, objectTypes, statics, ...}) = + let + val numStatements = ref 0 + val numBlocks = ref 0 + val _ = + List.foreach + (main::functions, fn f => + let + val {blocks, ...} = Function.dest f + in + Vector.foreach + (blocks, fn Block.T {statements, ...} => + (Int.inc numBlocks + ; numStatements := !numStatements + Vector.length statements)) + end) + val numFunctions = 1 + List.length functions + val numObjectTypes = Vector.length objectTypes + val numStatics = Vector.length statics + open Layout + in + align + [seq [Control.sizeMessage ("rssa program", program)], + seq [str "num functions in program = ", Int.layout numFunctions], + seq [str "num blocks in program = ", Int.layout (!numBlocks)], + seq [str "num statements in program = ", Int.layout (!numStatements)], + seq [str "num object types in program = ", Int.layout (numObjectTypes)], + seq [str "num statics in program = ", Int.layout numStatics]] + end + + fun dropProfile (T {functions, handlesSignals, main, objectTypes, statics, ...}) = + (Control.profile := Control.ProfileNone + ; T {functions = List.map (functions, Function.dropProfile), + handlesSignals = handlesSignals, + main = Function.dropProfile main, + objectTypes = objectTypes, + profileInfo = NONE, + statics = statics}) + (* quell unused warning *) + val _ = dropProfile + + fun dfs (p, v) = + let + val T {functions, main, ...} = p + val functions = Vector.fromList (main::functions) + val numFunctions = Vector.length functions + val {get = funcIndex, set = setFuncIndex, rem, ...} = + Property.getSetOnce (Func.plist, + Property.initRaise ("index", Func.layout)) + val _ = Vector.foreachi (functions, fn (i, f) => + setFuncIndex (#name (Function.dest f), i)) + val visited = Array.array (numFunctions, false) + fun visit (f: Func.t): unit = + let + val i = funcIndex f + in + if Array.sub (visited, i) + then () + else + let + val _ = Array.update (visited, i, true) + val f = Vector.sub (functions, i) + val v' = v f + val _ = Function.dfs + (f, fn Block.T {transfer, ...} => + (Transfer.foreachFunc (transfer, visit) + ; fn () => ())) + val _ = v' () + in + () + end + end + val _ = visit (Function.name main) + val _ = Vector.foreach (functions, rem o Function.name) + in + () + end + + structure Labels = PowerSetLattice_ListSet(structure Element = Label) + fun rflow (T {functions, main, ...}) = + let + val functions = main :: functions + val table = HashTable.new {equals = Func.equals, hash = Func.hash} + fun get f = + HashTable.lookupOrInsert (table, f, fn () => + {raisesTo = Labels.empty (), + returnsTo = Labels.empty ()}) + val raisesTo = #raisesTo o get + val returnsTo = #returnsTo o get + val empty = Labels.empty () + val _ = + List.foreach + (functions, fn f => + let + val {name, blocks, ...} = Function.dest f + in + Vector.foreach + (blocks, fn Block.T {transfer, ...} => + case transfer of + Transfer.Call {func, return, ...} => + let + val (returns, raises) = + case return of + Return.Dead => (empty, empty) + | Return.NonTail {cont, handler, ...} => + (Labels.singleton cont, + case handler of + Handler.Caller => raisesTo name + | Handler.Dead => empty + | Handler.Handle hand => Labels.singleton hand) + | Return.Tail => (returnsTo name, raisesTo name) + in + Labels.<= (returns, returnsTo func) + ; Labels.<= (raises, raisesTo func) + end + | _ => ()) + end) + in + fn f => + let + val {raisesTo, returnsTo} = get f + in + {raisesTo = Labels.getElements raisesTo, + returnsTo = Labels.getElements returnsTo} + end + end + + fun orderFunctions (p as T {handlesSignals, objectTypes, profileInfo, statics, ...}) = + let + val functions = ref [] + val () = + dfs + (p, fn f => + let + val {args, name, raises, returns, start, ...} = + Function.dest f + val blocks = ref [] + val () = + Function.dfs + (f, fn b => + (List.push (blocks, b) + ; fn () => ())) + val f = Function.new {args = args, + blocks = Vector.fromListRev (!blocks), + name = name, + raises = raises, + returns = returns, + start = start} + in + List.push (functions, f) + ; fn () => () + end) + val (main, functions) = + case List.rev (!functions) of + main::functions => (main, functions) + | _ => Error.bug "Rssa.orderFunctions: main/functions" + in + T {functions = functions, + handlesSignals = handlesSignals, + main = main, + objectTypes = objectTypes, + profileInfo = profileInfo, + statics = statics} + end + + fun shuffle (T {functions, handlesSignals, main, objectTypes, profileInfo, statics}) = + let + val functions = Array.fromListMap (functions, Function.shuffle) + val () = Array.shuffle functions + val p = T {functions = Array.toList functions, + handlesSignals = handlesSignals, + main = Function.shuffle main, + objectTypes = objectTypes, + profileInfo = profileInfo, + statics = statics} + in + p + end + end +end diff -Nru mlton-20130715/mlton/backend/rssa-tree.sig mlton-20210117+dfsg/mlton/backend/rssa-tree.sig --- mlton-20130715/mlton/backend/rssa-tree.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-tree.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,228 @@ +(* Copyright (C) 2009,2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature RSSA_TREE_STRUCTS = + sig + include BACKEND_ATOMS + end + +signature RSSA_TREE = + sig + include RSSA_TREE_STRUCTS + + structure Operand: + sig + datatype t = + Cast of t * Type.t + | Const of Const.t + | GCState + | Offset of {base: t, + offset: Bytes.t, + ty: Type.t} + | ObjptrTycon of ObjptrTycon.t + | Runtime of Runtime.GCField.t + | SequenceOffset of {base: t, + index: t, + offset: Bytes.t, + scale: Scale.t, + ty: Type.t} + | Var of {ty: Type.t, + var: Var.t} + + val bool: bool -> t + val cast: t * Type.t -> t + val layout: t -> Layout.t + val one: WordSize.t -> t + val null: t + val replace: t * {const: Const.t -> t, + var: {ty: Type.t, var: Var.t} -> t} -> t + val ty: t -> Type.t + val word: WordX.t -> t + val zero: WordSize.t -> t + end + + structure Object: OBJECT + sharing Object = BackendAtoms + sharing Object.Use = Operand + + structure Statement: + sig + datatype t = + Bind of {dst: Var.t * Type.t, + pinned: bool, + src: Operand.t} + | Move of {dst: Operand.t, + src: Operand.t} + | Object of {dst: Var.t * Type.t, + obj: Object.t} + | PrimApp of {args: Operand.t vector, + dst: (Var.t * Type.t) option, + prim: Type.t Prim.t} + | Profile of ProfileExp.t + | ProfileLabel of ProfileLabel.t + | SetExnStackLocal + | SetExnStackSlot + | SetHandler of Label.t (* label must be of Handler kind. *) + | SetSlotExnStack + + (* foldDef (s, a, f) + * If s defines a variable x, then return f (x, a), else return a. + *) + val foldDef: t * 'a * (Var.t * Type.t * 'a -> 'a) -> 'a + (* foreachDef (s, f) = foldDef (s, (), fn (x, ()) => f x) *) + val foreachDef: t * (Var.t * Type.t -> unit) -> unit + val foreachDefUse: t * {def: (Var.t * Type.t) -> unit, + use: Var.t -> unit} -> unit + val foldUse: t * 'a * (Var.t * 'a -> 'a) -> 'a + val foreachUse: t * (Var.t -> unit) -> unit + val layout: t -> Layout.t + val replace: t * {const: Const.t -> Operand.t, + var: {var: Var.t, ty: Type.t} -> Operand.t} -> t + val resize: Operand.t * Type.t -> Operand.t * t list + val toString: t -> string + end + + structure Switch: SWITCH + sharing Switch = Atoms + sharing Switch.Use = Operand + + structure Transfer: + sig + datatype t = + CCall of {args: Operand.t vector, + func: Type.t CFunction.t, + (* return is NONE iff the CFunction doesn't return. + * Else, return must be SOME l, where l is of kind + * CReturn. The return should be nullary if the C + * function returns void. Else, it should be unary with + * a var of the appropriate type to accept the result. + *) + return: Label.t option} + | Call of {args: Operand.t vector, + func: Func.t, + return: Return.t} + | Goto of {args: Operand.t vector, + dst: Label.t} + (* Raise implicitly raises to the caller. + * I.E. the local handler stack must be empty. + *) + | Raise of Operand.t vector + | Return of Operand.t vector + | Switch of Switch.t + + val bug: unit -> t + val foreachLabelUse: t * {label: Label.t -> unit, + use: Var.t -> unit} -> unit + val foreachFunc: t * (Func.t -> unit) -> unit + val foreachLabel: t * (Label.t -> unit) -> unit + val foreachUse: t * (Var.t -> unit) -> unit + val ifBool: Operand.t * {falsee: Label.t, truee: Label.t} -> t + val ifBoolE: Operand.t * bool option * {falsee: Label.t, truee: Label.t} -> t + (* in ifZero, the operand should be of type defaultWord *) + val ifZero: Operand.t * {falsee: Label.t, truee: Label.t} -> t + val layout: t -> Layout.t + val replace: t * {const: Const.t -> Operand.t, + label: Label.t -> Label.t, + var: {var: Var.t, ty: Type.t} -> Operand.t} -> t + val replaceLabels: t * (Label.t -> Label.t) -> t + end + + structure Kind: + sig + datatype t = + Cont of {handler: Handler.t} + | CReturn of {func: Type.t CFunction.t} + | Handler + | Jump + + datatype frameStyle = None | OffsetsAndSize | SizeOnly + val frameStyle: t -> frameStyle + val isJump: t -> bool + val layout: t -> Layout.t + end + + structure Block: + sig + datatype t = + T of {args: (Var.t * Type.t) vector, + kind: Kind.t, + label: Label.t, + statements: Statement.t vector, + transfer: Transfer.t} + + val clear: t -> unit + val foreachDef: t * (Var.t * Type.t -> unit) -> unit + val foreachUse: t * (Var.t -> unit) -> unit + val kind: t -> Kind.t + val label: t -> Label.t + val layout: t -> Layout.t + end + + structure Function: + sig + type t + + val blocks: t -> Block.t vector + val clear: t -> unit + val dest: t -> {args: (Var.t * Type.t) vector, + blocks: Block.t vector, + name: Func.t, + raises: Type.t vector option, + returns: Type.t vector option, + start: Label.t} + (* dfs (f, v) visits the blocks in depth-first order, applying v b + * for block b to yield v', then visiting b's descendents, + * then applying v' (). + *) + val dfs: t * (Block.t -> unit -> unit) -> unit + val dominatorTree: t -> Block.t Tree.t + val foreachDef: t * (Var.t * Type.t -> unit) -> unit + val foreachUse: t * (Var.t -> unit) -> unit + val layout: t -> Layout.t + val layoutHeader: t -> Layout.t + (* Produce a loop forest, with an optional predicate; + * the start node will be connected when + * the predicate fails, to maintain connectedness *) + val loopForest: t * (Block.t * Block.t -> bool) -> Block.t DirectedGraph.LoopForest.t + val name: t -> Func.t + val new: {args: (Var.t * Type.t) vector, + blocks: Block.t vector, + name: Func.t, + raises: Type.t vector option, + returns: Type.t vector option, + start: Label.t} -> t + end + + structure Program: + sig + datatype t = + T of {functions: Function.t list, + handlesSignals: bool, + main: Function.t, + objectTypes: ObjectType.t vector, + profileInfo: {sourceMaps: SourceMaps.t, + getFrameSourceSeqIndex: Label.t -> int option} option, + statics: {dst: Var.t * Type.t, obj: Object.t} vector} + + val clear: t -> unit + (* dfs (p, v) visits the functions in depth-first order, applying v f + * for function f to yield v', then visiting b's descendents, + * then applying v' (). + *) + val dfs: t * (Function.t -> unit -> unit) -> unit + val dropProfile: t -> t + val layouts: t * (Layout.t -> unit) -> unit + val layoutStats: t -> Layout.t + val orderFunctions: t -> t + val rflow: t -> (Func.t -> {raisesTo: Label.t list, + returnsTo: Label.t list}) + val shuffle: t -> t + val toFile: {display: t Control.display, style: Control.style, suffix: string} + end + end diff -Nru mlton-20130715/mlton/backend/rssa-type-check.fun mlton-20210117+dfsg/mlton/backend/rssa-type-check.fun --- mlton-20130715/mlton/backend/rssa-type-check.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-type-check.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,733 @@ +(* Copyright (C) 2009,2016-2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor RssaTypeCheck (S: RSSA_TYPE_CHECK_STRUCTS): RSSA_TYPE_CHECK = +struct + +open S + +structure Operand = + struct + open Operand + + val rec isLocation = + fn Cast (z, _) => isLocation z + | Offset _ => true + | Runtime _ => true + | SequenceOffset _ => true + | _ => false + end + +structure ExnStack = + struct + structure ZPoint = + struct + datatype t = Caller | Me + + val equals: t * t -> bool = op = + + val toString = + fn Caller => "Caller" + | Me => "Me" + + val layout = Layout.str o toString + end + + structure L = FlatLattice (structure Point = ZPoint) + open L + structure Point = ZPoint + + val me = point Point.Me + end + +structure HandlerLat = FlatLattice (structure Point = Label) + +structure HandlerInfo = + struct + datatype t = T of {block: Block.t, + global: ExnStack.t, + handler: HandlerLat.t, + slot: ExnStack.t, + visited: bool ref} + + fun new (b: Block.t): t = + T {block = b, + global = ExnStack.new (), + handler = HandlerLat.new (), + slot = ExnStack.new (), + visited = ref false} + + fun layout (T {global, handler, slot, ...}) = + Layout.record [("global", ExnStack.layout global), + ("slot", ExnStack.layout slot), + ("handler", HandlerLat.layout handler)] + end + +val traceGoto = + Trace.trace ("Rssa.checkHandlers.goto", Label.layout, Unit.layout) + +fun checkHandlers (Program.T {functions, ...}) = + let + val debug = false + fun checkFunction (f: Function.t): unit = + let + val {name, start, blocks, ...} = Function.dest f + val {get = labelInfo: Label.t -> HandlerInfo.t, + rem = remLabelInfo, + set = setLabelInfo} = + Property.getSetOnce + (Label.plist, Property.initRaise ("info", Label.layout)) + val _ = + Vector.foreach + (blocks, fn b => + setLabelInfo (Block.label b, HandlerInfo.new b)) + (* Do a DFS of the control-flow graph. *) + fun visitLabel l = visitInfo (labelInfo l) + and visitInfo + (hi as HandlerInfo.T {block, global, handler, slot, + visited, ...}): unit = + if !visited + then () + else + let + val _ = visited := true + val Block.T {label, statements, transfer, ...} = block + val _ = + if debug + then + let + open Layout + in + outputl + (seq [str "visiting ", + Label.layout label], + Out.error) + end + else () + datatype z = datatype Statement.t + val {global, handler, slot} = + Vector.fold + (statements, + {global = global, handler = handler, slot = slot}, + fn (s, {global, handler, slot}) => + case s of + SetExnStackLocal => {global = ExnStack.me, + handler = handler, + slot = slot} + | SetExnStackSlot => {global = slot, + handler = handler, + slot = slot} + | SetSlotExnStack => {global = global, + handler = handler, + slot = global} + | SetHandler l => {global = global, + handler = HandlerLat.point l, + slot = slot} + | _ => {global = global, + handler = handler, + slot = slot}) + fun fail msg = + (Control.message + (Control.Silent, fn () => + let open Layout + in align + [str "before: ", HandlerInfo.layout hi, + str "block: ", Block.layout block, + seq [str "after: ", + Layout.record + [("global", ExnStack.layout global), + ("slot", ExnStack.layout slot), + ("handler", + HandlerLat.layout handler)]], + Vector.layout + (fn Block.T {label, ...} => + seq [Label.layout label, + str " ", + HandlerInfo.layout (labelInfo label)]) + blocks] + end) + ; Error.bug (concat ["Rssa.checkHandlers: handler mismatch at ", msg])) + fun assert (msg, f) = + if f + then () + else fail msg + fun goto (l: Label.t): unit = + let + val HandlerInfo.T {global = g, handler = h, + slot = s, ...} = + labelInfo l + val _ = + assert ("goto", + ExnStack.<= (global, g) + andalso ExnStack.<= (slot, s) + andalso HandlerLat.<= (handler, h)) + in + visitLabel l + end + val goto = traceGoto goto + fun tail name = + assert (name, + ExnStack.forcePoint + (global, ExnStack.Point.Caller)) + datatype z = datatype Transfer.t + in + case transfer of + CCall {return, ...} => Option.app (return, goto) + | Call {return, ...} => + assert + ("return", + let + datatype z = datatype Return.t + in + case return of + Dead => true + | NonTail {handler = h, ...} => + (case h of + Handler.Caller => + ExnStack.forcePoint + (global, ExnStack.Point.Caller) + | Handler.Dead => true + | Handler.Handle l => + let + val res = + ExnStack.forcePoint + (global, + ExnStack.Point.Me) + andalso + HandlerLat.forcePoint + (handler, l) + val _ = goto l + in + res + end) + | Tail => true + end) + | Goto {dst, ...} => goto dst + | Raise _ => tail "raise" + | Return _ => tail "return" + | Switch s => Switch.foreachLabel (s, goto) + end + val info as HandlerInfo.T {global, ...} = labelInfo start + val _ = ExnStack.forcePoint (global, ExnStack.Point.Caller) + val _ = visitInfo info + val _ = + Control.diagnostics + (fn display => + let + open Layout + val _ = + display (seq [str "checkHandlers ", + Func.layout name]) + val _ = + Vector.foreach + (blocks, fn Block.T {label, ...} => + display (seq + [Label.layout label, + str " ", + HandlerInfo.layout (labelInfo label)])) + in + () + end) + val _ = Vector.foreach (blocks, fn b => + remLabelInfo (Block.label b)) + in + () + end + val _ = List.foreach (functions, checkFunction) + in + () + end + +fun checkScopes (program as Program.T {functions, main, statics, ...}): unit = + let + datatype status = + Defined + | Global + | InScope + | Undefined + fun make (layout, plist) = + let + val {get, set, ...} = + Property.getSet (plist, Property.initConst Undefined) + fun bind (x, isGlobal) = + case get x of + Global => () + | Undefined => + set (x, if isGlobal then Global else InScope) + | _ => Error.bug ("Rssa.checkScopes: duplicate definition of " + ^ (Layout.toString (layout x))) + fun reference x = + case get x of + Global => () + | InScope => () + | _ => Error.bug (concat + ["Rssa.checkScopes: reference to ", + Layout.toString (layout x), + " not in scope"]) + fun unbind x = + case get x of + Global => () + | _ => set (x, Defined) + in (bind, reference, unbind) + end + val (bindVar, getVar, unbindVar) = make (Var.layout, Var.plist) + val bindVar = + Trace.trace2 + ("Rssa.bindVar", Var.layout, Bool.layout, Unit.layout) + bindVar + val getVar = + Trace.trace ("Rssa.getVar", Var.layout, Unit.layout) getVar + val unbindVar = + Trace.trace ("Rssa.unbindVar", Var.layout, Unit.layout) unbindVar + val (bindFunc, _, _) = make (Func.layout, Func.plist) + val bindFunc = fn f => bindFunc (f, false) + val (bindLabel, getLabel, unbindLabel) = + make (Label.layout, Label.plist) + val bindLabel = fn l => bindLabel (l, false) + fun loopStmt (s: Statement.t, isMain: bool): unit = + (Statement.foreachUse (s, getVar) + ; Statement.foreachDef (s, fn (x, _) => + bindVar (x, isMain))) + fun loopFunc (f: Function.t, isMain: bool): unit = + let + val bindVar = fn x => bindVar (x, isMain) + val {args, blocks, ...} = Function.dest f + val _ = Vector.foreach (args, bindVar o #1) + val _ = Vector.foreach (blocks, bindLabel o Block.label) + val _ = + Vector.foreach + (blocks, fn Block.T {transfer, ...} => + Transfer.foreachLabel (transfer, getLabel)) + (* Descend the dominator tree, verifying that variable + * definitions dominate variable uses. + *) + val _ = + Tree.traverse + (Function.dominatorTree f, + fn Block.T {args, statements, transfer, ...} => + let + val _ = Vector.foreach (args, bindVar o #1) + val _ = + Vector.foreach + (statements, fn s => loopStmt (s, isMain)) + val _ = Transfer.foreachUse (transfer, getVar) + in + fn () => + if isMain + then () + else + let + val _ = + Vector.foreach + (statements, fn s => + Statement.foreachDef (s, unbindVar o #1)) + val _ = Vector.foreach (args, unbindVar o #1) + in + () + end + end) + val _ = Vector.foreach (blocks, unbindLabel o Block.label) + val _ = Vector.foreach (args, unbindVar o #1) + in + () + end + val _ = Vector.foreach (statics, fn {dst, obj} => + loopStmt (Statement.Object {dst = dst, obj = obj}, true)) + val _ = List.foreach (functions, bindFunc o Function.name) + val _ = loopFunc (main, true) + val _ = List.foreach (functions, fn f => loopFunc (f, false)) + val _ = Program.clear program + in () + end + +val checkScopes = Control.trace (Control.Detail, "checkScopes") checkScopes + +fun typeCheck (p as Program.T {functions, main, objectTypes, profileInfo, statics, ...}) = + let + val _ = + Vector.foreach + (objectTypes, fn ty => + Err.check ("objectType", + fn () => ObjectType.isOk ty, + fn () => ObjectType.layout ty)) + fun tyconTy (opt: ObjptrTycon.t): ObjectType.t = + Vector.sub (objectTypes, ObjptrTycon.index opt) + val () = checkScopes p + val (checkProfileLabel, finishCheckProfileLabel, checkFrameSourceSeqIndex) = + case profileInfo of + NONE => (fn _ => false, fn () => (), fn _ => ()) + | SOME {sourceMaps, getFrameSourceSeqIndex} => + let + val _ = + Err.check + ("sourceMaps", + fn () => SourceMaps.check sourceMaps, + fn () => SourceMaps.layout sourceMaps) + val (checkProfileLabel, finishCheckProfileLabel) = + SourceMaps.checkProfileLabel sourceMaps + in + (checkProfileLabel, + fn () => Err.check + ("finishCheckProfileLabel", + finishCheckProfileLabel, + fn () => SourceMaps.layout sourceMaps), + fn (l, k) => let + fun chk b = + Err.check + ("getFrameSourceSeqIndex", + fn () => (case (b, getFrameSourceSeqIndex l) of + (true, SOME ssi) => + SourceMaps.checkSourceSeqIndex + (sourceMaps, ssi) + | (false, NONE) => true + | _ => false), + fn () => Label.layout l) + in + case k of + Kind.Cont _ => chk true + | Kind.CReturn _ => chk true + | Kind.Handler => chk true + | Kind.Jump => chk false + end) + end + val {get = labelBlock: Label.t -> Block.t, + set = setLabelBlock, ...} = + Property.getSetOnce (Label.plist, + Property.initRaise ("block", Label.layout)) + val {get = funcInfo, set = setFuncInfo, ...} = + Property.getSetOnce (Func.plist, + Property.initRaise ("info", Func.layout)) + val {get = varType: Var.t -> Type.t, set = setVarType, ...} = + Property.getSetOnce (Var.plist, + Property.initRaise ("type", Var.layout)) + val setVarType = + Trace.trace2 ("Rssa.setVarType", Var.layout, Type.layout, + Unit.layout) + setVarType + fun checkOperandAux (x: Operand.t, isLHS): unit = + let + datatype z = datatype Operand.t + fun ok () = + case x of + Cast (z, ty) => + (checkOperandAux (z, isLHS) + ; Type.castIsOk {from = Operand.ty z, + to = ty, + tyconTy = tyconTy}) + | Const _ => true + | GCState => true + | Offset {base, offset, ty} => + (checkOperandAux (base, false) + ; Type.offsetIsOk {base = Operand.ty base, + mustBeMutable = isLHS, + offset = offset, + tyconTy = tyconTy, + result = ty}) + | ObjptrTycon _ => true + | Runtime _ => true + | SequenceOffset {base, index, offset, scale, ty} => + (checkOperandAux (base, false) + ; checkOperandAux (index, false) + ; Type.sequenceOffsetIsOk {base = Operand.ty base, + index = Operand.ty index, + mustBeMutable = isLHS, + offset = offset, + tyconTy = tyconTy, + result = ty, + scale = scale}) + | Var {ty, var} => Type.isSubtype (varType var, ty) + in + Err.check ("operand", ok, fn () => Operand.layout x) + end + val checkOperandAux = + Trace.trace2 ("Rssa.checkOperandAux", + Operand.layout, Bool.layout, Unit.layout) + checkOperandAux + fun checkLhsOperand z = checkOperandAux (z, true) + fun checkOperand z = checkOperandAux (z, false) + fun checkOperands v = Vector.foreach (v, checkOperand) + fun check' (x, name, isOk, layout) = + Err.check (name, fn () => isOk x, fn () => layout x) + val handlersImplemented = ref false + val labelKind = Block.kind o labelBlock + fun statementOk (s: Statement.t): bool = + let + datatype z = datatype Statement.t + in + case s of + Bind {src, dst = (_, dstTy), ...} => + (checkOperand src + ; Type.isSubtype (Operand.ty src, dstTy)) + | Move {dst, src} => + (checkLhsOperand dst + ; checkOperand src + ; (Type.isSubtype (Operand.ty src, Operand.ty dst) + andalso Operand.isLocation dst)) + | Object {dst = (_, dstTy), obj} => + (Object.isOk (obj, {checkUse = checkOperand, + tyconTy = tyconTy}) + andalso Type.isSubtype (Object.ty obj, dstTy)) + | PrimApp {args, dst, prim} => + (Vector.foreach (args, checkOperand) + ; (Type.checkPrimApp + {args = Vector.map (args, Operand.ty), + prim = prim, + result = Option.map (dst, #2)})) + | Profile _ => true + | ProfileLabel pl => checkProfileLabel pl + | SetExnStackLocal => (handlersImplemented := true; true) + | SetExnStackSlot => (handlersImplemented := true; true) + | SetHandler l => + (handlersImplemented := true; + case labelKind l of + Kind.Handler => true + | _ => false) + | SetSlotExnStack => (handlersImplemented := true; true) + end + val statementOk = + Trace.trace ("Rssa.statementOk", + Statement.layout, + Bool.layout) + statementOk + fun gotoOk {args: Type.t vector, + dst: Label.t}: bool = + let + val Block.T {args = formals, kind, ...} = labelBlock dst + in + Vector.equals (args, formals, fn (t, (_, t')) => + Type.isSubtype (t, t')) + andalso (case kind of + Kind.Jump => true + | _ => false) + end + fun labelIsNullaryJump l = gotoOk {dst = l, args = Vector.new0 ()} + fun tailIsOk (caller: Type.t vector option, + callee: Type.t vector option): bool = + case (caller, callee) of + (_, NONE) => true + | (SOME caller, SOME callee) => + Vector.equals (callee, caller, Type.isSubtype) + | _ => false + fun nonTailIsOk (formals: (Var.t * Type.t) vector, + returns: Type.t vector option): bool = + case returns of + NONE => true + | SOME ts => + Vector.equals (formals, ts, fn ((_, t), t') => + Type.isSubtype (t', t)) + fun callIsOk {args, func, raises, return, returns} = + let + val {args = formals, + raises = raises', + returns = returns', ...} = + Function.dest (funcInfo func) + + in + Vector.equals (args, formals, fn (z, (_, t)) => + Type.isSubtype (Operand.ty z, t)) + andalso + (case return of + Return.Dead => + Option.isNone raises' + andalso Option.isNone returns' + | Return.NonTail {cont, handler} => + let + val Block.T {args = cArgs, kind = cKind, ...} = + labelBlock cont + in + nonTailIsOk (cArgs, returns') + andalso + (case cKind of + Kind.Cont {handler = h} => + Handler.equals (handler, h) + andalso + (case h of + Handler.Caller => + tailIsOk (raises, raises') + | Handler.Dead => true + | Handler.Handle l => + let + val Block.T {args = hArgs, + kind = hKind, ...} = + labelBlock l + in + nonTailIsOk (hArgs, raises') + andalso + (case hKind of + Kind.Handler => true + | _ => false) + end) + | _ => false) + end + | Return.Tail => + tailIsOk (raises, raises') + andalso tailIsOk (returns, returns')) + end + + fun checkFunction f = + let + val {args, blocks, raises, returns, start, ...} = Function.dest f + val _ = Vector.foreach (args, setVarType) + val _ = + Vector.foreach + (blocks, fn b as Block.T {args, kind, label, statements, ...} => + (setLabelBlock (label, b) + ; checkFrameSourceSeqIndex (label, kind) + ; Vector.foreach (args, setVarType) + ; Vector.foreach (statements, fn s => + Statement.foreachDef + (s, setVarType)))) + val _ = labelIsNullaryJump start + fun transferOk (t: Transfer.t): bool = + let + datatype z = datatype Transfer.t + in + case t of + CCall {args, func, return} => + let + val _ = checkOperands args + in + CFunction.isOk (func, {isUnit = Type.isUnit}) + andalso + Vector.equals (args, CFunction.args func, + fn (z, t) => + Type.isSubtype + (Operand.ty z, t)) + andalso + case return of + NONE => true + | SOME l => + case labelKind l of + Kind.CReturn {func = f} => + CFunction.equals (func, f) + | _ => false + end + | Call {args, func, return} => + let + val _ = checkOperands args + in + callIsOk {args = args, + func = func, + raises = raises, + return = return, + returns = returns} + end + | Goto {args, dst} => + (checkOperands args + ; gotoOk {args = Vector.map (args, Operand.ty), + dst = dst}) + | Raise zs => + (checkOperands zs + ; (case raises of + NONE => false + | SOME ts => + Vector.equals + (zs, ts, fn (z, t) => + Type.isSubtype (Operand.ty z, t)))) + | Return zs => + (checkOperands zs + ; (case returns of + NONE => false + | SOME ts => + Vector.equals + (zs, ts, fn (z, t) => + Type.isSubtype (Operand.ty z, t)))) + | Switch s => + Switch.isOk (s, {checkUse = checkOperand, + labelIsOk = labelIsNullaryJump}) + end + val transferOk = + Trace.trace ("Rssa.transferOk", + Transfer.layout, + Bool.layout) + transferOk + fun blockOk (Block.T {args, kind, statements, transfer, ...}) + : bool = + let + fun kindOk (k: Kind.t): bool = + let + datatype z = datatype Kind.t + in + case k of + Cont _ => true + | CReturn {func} => + let + val return = CFunction.return func + in + 0 = Vector.length args + orelse + (1 = Vector.length args + andalso + let + val expects = + #2 (Vector.first args) + in + Type.isSubtype (return, expects) + andalso + CType.equals (Type.toCType return, + Type.toCType expects) + end) + end + | Handler => true + | Jump => true + end + val _ = check' (kind, "kind", kindOk, Kind.layout) + val _ = + Vector.foreach + (statements, fn s => + check' (s, "statement", statementOk, + Statement.layout)) + val _ = check' (transfer, "transfer", transferOk, + Transfer.layout) + in + true + end + val blockOk = + Trace.trace ("Rssa.blockOk", + Block.layout, + Bool.layout) + blockOk + + val _ = + Vector.foreach + (blocks, fn b => + check' (b, "block", blockOk, Block.layout)) + in + () + end + val _ = + Vector.foreach + (statics, fn stmt as {dst, ...} => + (setVarType dst + ; check' (Statement.Object stmt, "static", statementOk, Statement.layout))) + val _ = + List.foreach + (functions, fn f => setFuncInfo (Function.name f, f)) + val _ = checkFunction main + val _ = List.foreach (functions, checkFunction) + val _ = + check' + (main, "main function", + fn f => + let + val {args, ...} = Function.dest f + in + Vector.isEmpty args + end, + Function.layout) + val _ = Program.clear p + val _ = finishCheckProfileLabel () + val _ = if !handlersImplemented + then checkHandlers p + else () + in + () + end handle Err.E e => (Layout.outputl (Err.layout e, Out.error) + ; Error.bug "Rssa.typeCheck") +end diff -Nru mlton-20130715/mlton/backend/rssa-type-check.sig mlton-20210117+dfsg/mlton/backend/rssa-type-check.sig --- mlton-20130715/mlton/backend/rssa-type-check.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/rssa-type-check.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,20 @@ +(* Copyright (C) 2009,2017,2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature RSSA_TYPE_CHECK_STRUCTS = + sig + include RSSA_TREE + end + +signature RSSA_TYPE_CHECK = + sig + include RSSA_TYPE_CHECK_STRUCTS + + val typeCheck: Program.t -> unit + end diff -Nru mlton-20130715/mlton/backend/runtime.fun mlton-20210117+dfsg/mlton/backend/runtime.fun --- mlton-20130715/mlton/backend/runtime.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/runtime.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2016-2017,2019-2020 Matthew Fluet. * Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -16,120 +16,45 @@ datatype t = AtomicState | CardMapAbsolute - | CurrentThread - | CurSourceSeqsIndex + | CurSourceSeqIndex | ExnStack | Frontier | Limit | LimitPlusSlop - | MaxFrameSize | SignalIsPending | StackBottom | StackLimit | StackTop - val atomicStateOffset: Bytes.t ref = ref Bytes.zero - val cardMapAbsoluteOffset: Bytes.t ref = ref Bytes.zero - val currentThreadOffset: Bytes.t ref = ref Bytes.zero - val curSourceSeqsIndexOffset: Bytes.t ref = ref Bytes.zero - val exnStackOffset: Bytes.t ref = ref Bytes.zero - val frontierOffset: Bytes.t ref = ref Bytes.zero - val limitOffset: Bytes.t ref = ref Bytes.zero - val limitPlusSlopOffset: Bytes.t ref = ref Bytes.zero - val maxFrameSizeOffset: Bytes.t ref = ref Bytes.zero - val signalIsPendingOffset: Bytes.t ref = ref Bytes.zero - val stackBottomOffset: Bytes.t ref = ref Bytes.zero - val stackLimitOffset: Bytes.t ref = ref Bytes.zero - val stackTopOffset: Bytes.t ref = ref Bytes.zero - - fun setOffsets {atomicState, cardMapAbsolute, currentThread, curSourceSeqsIndex, - exnStack, frontier, limit, limitPlusSlop, maxFrameSize, - signalIsPending, stackBottom, stackLimit, stackTop} = - (atomicStateOffset := atomicState - ; cardMapAbsoluteOffset := cardMapAbsolute - ; currentThreadOffset := currentThread - ; curSourceSeqsIndexOffset := curSourceSeqsIndex - ; exnStackOffset := exnStack - ; frontierOffset := frontier - ; limitOffset := limit - ; limitPlusSlopOffset := limitPlusSlop - ; maxFrameSizeOffset := maxFrameSize - ; signalIsPendingOffset := signalIsPending - ; stackBottomOffset := stackBottom - ; stackLimitOffset := stackLimit - ; stackTopOffset := stackTop) - - val offset = - fn AtomicState => !atomicStateOffset - | CardMapAbsolute => !cardMapAbsoluteOffset - | CurrentThread => !currentThreadOffset - | CurSourceSeqsIndex => !curSourceSeqsIndexOffset - | ExnStack => !exnStackOffset - | Frontier => !frontierOffset - | Limit => !limitOffset - | LimitPlusSlop => !limitPlusSlopOffset - | MaxFrameSize => !maxFrameSizeOffset - | SignalIsPending => !signalIsPendingOffset - | StackBottom => !stackBottomOffset - | StackLimit => !stackLimitOffset - | StackTop => !stackTopOffset - - val atomicStateSize: Bytes.t ref = ref Bytes.zero - val cardMapAbsoluteSize: Bytes.t ref = ref Bytes.zero - val currentThreadSize: Bytes.t ref = ref Bytes.zero - val curSourceSeqsIndexSize: Bytes.t ref = ref Bytes.zero - val exnStackSize: Bytes.t ref = ref Bytes.zero - val frontierSize: Bytes.t ref = ref Bytes.zero - val limitSize: Bytes.t ref = ref Bytes.zero - val limitPlusSlopSize: Bytes.t ref = ref Bytes.zero - val maxFrameSizeSize: Bytes.t ref = ref Bytes.zero - val signalIsPendingSize: Bytes.t ref = ref Bytes.zero - val stackBottomSize: Bytes.t ref = ref Bytes.zero - val stackLimitSize: Bytes.t ref = ref Bytes.zero - val stackTopSize: Bytes.t ref = ref Bytes.zero - - fun setSizes {atomicState, cardMapAbsolute, currentThread, curSourceSeqsIndex, - exnStack, frontier, limit, limitPlusSlop, maxFrameSize, - signalIsPending, stackBottom, stackLimit, stackTop} = - (atomicStateSize := atomicState - ; cardMapAbsoluteSize := cardMapAbsolute - ; currentThreadSize := currentThread - ; curSourceSeqsIndexSize := curSourceSeqsIndex - ; exnStackSize := exnStack - ; frontierSize := frontier - ; limitSize := limit - ; limitPlusSlopSize := limitPlusSlop - ; maxFrameSizeSize := maxFrameSize - ; signalIsPendingSize := signalIsPending - ; stackBottomSize := stackBottom - ; stackLimitSize := stackLimit - ; stackTopSize := stackTop) - - val size = - fn AtomicState => !atomicStateSize - | CardMapAbsolute => !cardMapAbsoluteSize - | CurrentThread => !currentThreadSize - | CurSourceSeqsIndex => !curSourceSeqsIndexSize - | ExnStack => !exnStackSize - | Frontier => !frontierSize - | Limit => !limitSize - | LimitPlusSlop => !limitPlusSlopSize - | MaxFrameSize => !maxFrameSizeSize - | SignalIsPending => !signalIsPendingSize - | StackBottom => !stackBottomSize - | StackLimit => !stackLimitSize - | StackTop => !stackTopSize + local + fun make name = + Bytes.fromIntInf + (Control.StrMap.lookupIntInf + (Promise.force Control.Target.consts, + "offset::gcState." ^ name)) + in + val offset = + fn AtomicState => make "atomicState" + | CardMapAbsolute => make "generationalMaps.cardMapAbsolute" + | CurSourceSeqIndex => make "sourceMaps.curSourceSeqIndex" + | ExnStack => make "exnStack" + | Frontier => make "frontier" + | Limit => make "limit" + | LimitPlusSlop => make "limitPlusSlop" + | SignalIsPending => make "signalsInfo.signalIsPending" + | StackBottom => make "stackBottom" + | StackLimit => make "stackLimit" + | StackTop => make "stackTop" + end val toString = fn AtomicState => "AtomicState" | CardMapAbsolute => "CardMapAbsolute" - | CurrentThread => "CurrentThread" - | CurSourceSeqsIndex => "CurSourceSeqsIndex" + | CurSourceSeqIndex => "CurSourceSeqIndex" | ExnStack => "ExnStack" | Frontier => "Frontier" | Limit => "Limit" | LimitPlusSlop => "LimitPlusSlop" - | MaxFrameSize => "MaxFrameSize" | SignalIsPending => "SignalIsPending" | StackBottom => "StackBottom" | StackLimit => "StackLimit" @@ -141,12 +66,12 @@ structure RObjectType = struct datatype t = - Array of {hasIdentity: bool, - bytesNonObjptrs: Bytes.t, - numObjptrs: int} - | Normal of {hasIdentity: bool, + Normal of {hasIdentity: bool, bytesNonObjptrs: Bytes.t, numObjptrs: int} + | Sequence of {hasIdentity: bool, + bytesNonObjptrs: Bytes.t, + numObjptrs: int} | Stack | Weak of {gone: bool} @@ -155,13 +80,13 @@ open Layout in case t of - Array {hasIdentity, bytesNonObjptrs, numObjptrs} => - seq [str "Array ", + Normal {hasIdentity, bytesNonObjptrs, numObjptrs} => + seq [str "Normal ", record [("hasIdentity", Bool.layout hasIdentity), ("bytesNonObjptrs", Bytes.layout bytesNonObjptrs), ("numObjptrs", Int.layout numObjptrs)]] - | Normal {hasIdentity, bytesNonObjptrs, numObjptrs} => - seq [str "Normal ", + | Sequence {hasIdentity, bytesNonObjptrs, numObjptrs} => + seq [str "Sequence ", record [("hasIdentity", Bool.layout hasIdentity), ("bytesNonObjptrs", Bytes.layout bytesNonObjptrs), ("numObjptrs", Int.layout numObjptrs)]] @@ -183,8 +108,6 @@ 0 <= typeIndex andalso typeIndex < maxTypeIndex) ; Word.orb (0w1, Word.<< (Word.fromInt typeIndex, 0w1))) - - fun headerToTypeIndex w = Word.toInt (Word.>> (w, 0w1)) end (* see gc/object.h *) @@ -197,12 +120,26 @@ val headerOffset : unit -> Bytes.t = Promise.lazy (Bytes.~ o headerSize) -(* see gc/array.h *) -val arrayLengthSize : unit -> Bytes.t = +(* see gc/sequence.h *) +val sequenceLengthSize : unit -> Bytes.t = Promise.lazy (Bits.toBytes o Control.Target.Size.seqIndex) -val arrayLengthOffset : unit -> Bytes.t = +val sequenceLengthOffset : unit -> Bytes.t = Promise.lazy (fn () => Bytes.~ (Bytes.+ (headerSize (), - arrayLengthSize ()))) + sequenceLengthSize ()))) + +(* see gc/sequence.h *) +val sequenceCounterSize : unit -> Bytes.t = + Promise.lazy (Bits.toBytes o Control.Target.Size.seqIndex) +val sequenceCounterOffset : unit -> Bytes.t = + Promise.lazy (fn () => Bytes.~ (Bytes.+ (Bytes.+ (headerSize (), + sequenceLengthSize ()), + sequenceCounterSize ()))) + +(* see gc/object.h and gc/sequence.h *) +val sequenceMetaDataSize : unit -> Bytes.t = + Promise.lazy (Bits.toBytes o Control.Target.Size.sequenceMetaData) +val normalMetaDataSize : unit -> Bytes.t = + Promise.lazy (Bits.toBytes o Control.Target.Size.normalMetaData) val cpointerSize : unit -> Bytes.t = Promise.lazy (Bits.toBytes o Control.Target.Size.cpointer) diff -Nru mlton-20130715/mlton/backend/runtime.sig mlton-20210117+dfsg/mlton/backend/runtime.sig --- mlton-20130715/mlton/backend/runtime.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/runtime.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2016-2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -20,13 +20,11 @@ datatype t = AtomicState | CardMapAbsolute - | CurrentThread - | CurSourceSeqsIndex + | CurSourceSeqIndex | ExnStack | Frontier (* The place where the next object is allocated. *) | Limit (* frontier + heapSize - LIMIT_SLOP *) | LimitPlusSlop (* frontier + heapSize *) - | MaxFrameSize | SignalIsPending | StackBottom | StackLimit (* Must have StackTop <= StackLimit *) @@ -34,57 +32,33 @@ val layout: t -> Layout.t val offset: t -> Bytes.t (* Field offset in struct GC_state. *) - val setOffsets: {atomicState: Bytes.t, - cardMapAbsolute: Bytes.t, - currentThread: Bytes.t, - curSourceSeqsIndex: Bytes.t, - exnStack: Bytes.t, - frontier: Bytes.t, - limit: Bytes.t, - limitPlusSlop: Bytes.t, - maxFrameSize: Bytes.t, - signalIsPending: Bytes.t, - stackBottom: Bytes.t, - stackLimit: Bytes.t, - stackTop: Bytes.t} -> unit - val setSizes: {atomicState: Bytes.t, - cardMapAbsolute: Bytes.t, - currentThread: Bytes.t, - curSourceSeqsIndex: Bytes.t, - exnStack: Bytes.t, - frontier: Bytes.t, - limit: Bytes.t, - limitPlusSlop: Bytes.t, - maxFrameSize: Bytes.t, - signalIsPending: Bytes.t, - stackBottom: Bytes.t, - stackLimit: Bytes.t, - stackTop: Bytes.t} -> unit - val size: t -> Bytes.t (* Field size in struct GC_state. *) val toString: t -> string end structure RObjectType: sig datatype t = - Array of {hasIdentity: bool, - bytesNonObjptrs: Bytes.t, - numObjptrs: int} - | Normal of {hasIdentity: bool, + Normal of {hasIdentity: bool, bytesNonObjptrs: Bytes.t, numObjptrs: int} + | Sequence of {hasIdentity: bool, + bytesNonObjptrs: Bytes.t, + numObjptrs: int} | Stack | Weak of {gone: bool} end - val arrayLengthOffset: unit -> Bytes.t - val arrayLengthSize: unit -> Bytes.t + val cpointerSize: unit -> Bytes.t val headerOffset: unit -> Bytes.t val headerSize: unit -> Bytes.t - val headerToTypeIndex: word -> int val labelSize: unit -> Bytes.t val limitSlop: Bytes.t val maxFrameSize: Bytes.t - val cpointerSize: unit -> Bytes.t + val normalMetaDataSize: unit -> Bytes.t val objptrSize: unit -> Bytes.t + val sequenceCounterOffset: unit -> Bytes.t + val sequenceCounterSize: unit -> Bytes.t + val sequenceLengthOffset: unit -> Bytes.t + val sequenceLengthSize: unit -> Bytes.t + val sequenceMetaDataSize: unit -> Bytes.t val typeIndexToHeader: int -> word end diff -Nru mlton-20130715/mlton/backend/scale.fun mlton-20210117+dfsg/mlton/backend/scale.fun --- mlton-20130715/mlton/backend/scale.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/scale.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor Scale (S: SCALE_STRUCTS): SCALE = -struct - -open S - -datatype t = One | Two | Four | Eight - -val toString = - fn One => "1" - | Two => "2" - | Four => "4" - | Eight => "8" - -val layout = Layout.str o toString - -val fromInt: int -> t option = - fn 1 => SOME One - | 2 => SOME Two - | 4 => SOME Four - | 8 => SOME Eight - | _ => NONE - -val fromBytes: Bytes.t -> t option = - fromInt o Bytes.toInt - -val toInt: t -> int = - fn One => 1 - | Two => 2 - | Four => 4 - | Eight => 8 - -end diff -Nru mlton-20130715/mlton/backend/scale.sig mlton-20210117+dfsg/mlton/backend/scale.sig --- mlton-20130715/mlton/backend/scale.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/scale.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature SCALE_STRUCTS = - sig - end - -signature SCALE = - sig - include SCALE_STRUCTS - - datatype t = One | Two | Four | Eight - - val fromBytes: Bytes.t -> t option - val layout: t -> Layout.t - val toInt: t -> int - val toString: t -> string - end diff -Nru mlton-20130715/mlton/backend/signal-check.fun mlton-20210117+dfsg/mlton/backend/signal-check.fun --- mlton-20130715/mlton/backend/signal-check.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/signal-check.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -11,7 +11,6 @@ struct open S -open Rssa structure CFunction = struct @@ -60,7 +59,7 @@ in if (case transfer of Transfer.CCall {func, ...} => - CFunction.maySwitchThreads func + CFunction.maySwitchThreadsFrom func | _ => false) then () else @@ -84,7 +83,7 @@ (Operand.Runtime Runtime.GCField.Limit, Operand.null)), dst = SOME (res, Type.bool), - prim = Prim.cpointerEqual}) + prim = Prim.CPointer_equal}) val compareTransfer = Transfer.ifBool (Operand.Var {var = res, ty = Type.bool}, @@ -106,7 +105,7 @@ transfer = Transfer.CCall {args = Vector.new3 (Operand.GCState, - Operand.word (WordX.zero (WordSize.csize ())), + Operand.zero (WordSize.csize ()), Operand.bool false), func = func, return = SOME collectReturn}}) @@ -130,7 +129,7 @@ (* Create extra blocks with signal checks for all blocks that are * loop headers. *) - fun loop (f: unit Forest.t) = + fun loop (f: int Forest.t) = let val {loops, ...} = Forest.dest f in @@ -139,9 +138,8 @@ let val _ = Vector.foreach - (headers, fn n => + (headers, fn i => let - val i = nodeIndex n val _ = Array.update (isHeader, i, true) in addSignalCheck (Vector.sub (blocks, i)) @@ -161,7 +159,8 @@ statements = Vector.new0 (), transfer = Transfer.Goto {args = Vector.new0 (), dst = start}}) - val () = loop (Graph.loopForestSteensgaard (g, {root = labelNode start})) + val () = loop (Graph.loopForestSteensgaard + (g, {root = labelNode start, nodeValue = nodeIndex})) val blocks = Vector.keepAllMap (blocks, fn b as Block.T {label, ...} => @@ -182,7 +181,7 @@ fun transform p = let - val Program.T {functions, handlesSignals, main, objectTypes} = p + val Program.T {functions, handlesSignals, main, objectTypes, profileInfo, statics} = p in if not handlesSignals then p @@ -190,7 +189,9 @@ Program.T {functions = List.revMap (functions, insertInFunction), handlesSignals = handlesSignals, main = main, - objectTypes = objectTypes} + objectTypes = objectTypes, + profileInfo = profileInfo, + statics = statics} end end diff -Nru mlton-20130715/mlton/backend/sources.cm mlton-20210117+dfsg/mlton/backend/sources.cm --- mlton-20130715/mlton/backend/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -1,24 +1,27 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library signature MACHINE signature REP_TYPE signature RUNTIME functor Backend +functor BackendAtoms functor Machine +functor Rssa +functor Ssa2ToRssa is ../../lib/mlton/sources.cm -../ast/sources.cm ../atoms/sources.cm ../control/sources.cm ../ssa/sources.cm @@ -28,31 +31,52 @@ objptr-tycon.sig objptr-tycon.fun object-type.sig -scale.sig -scale.fun rep-type.sig rep-type.fun + +backend-atoms.sig +backend-atoms.fun + +err.sml + +object.sig +object.fun switch.sig switch.fun -err.sml -rssa.sig -rssa.fun -machine.sig -machine.fun -representation.sig -packed-representation.fun -ssa-to-rssa.sig -ssa-to-rssa.fun + +rssa-tree.sig +rssa-tree.fun +rssa-type-check.sig +rssa-type-check.fun +rssa-shrink.sig +rssa-shrink.fun +rssa-live.sig +rssa-live.fun +rssa-restore.sig +rssa-restore.fun + rssa-transform.sig +bounce-vars.fun +collect-statics.fun implement-handlers.fun -implement-profiling.sig implement-profiling.fun limit-check.fun signal-check.fun -live.sig -live.fun -allocate-registers.sig -allocate-registers.fun +rssa-simplify.sig +rssa-simplify.fun +rssa.sig +rssa.fun + +representation.sig +packed-representation.fun +ssa2-to-rssa.sig +ssa2-to-rssa.fun + +machine.sig +machine.fun + +allocate-variables.sig +allocate-variables.fun equivalence-graph.sig equivalence-graph.fun chunkify.sig diff -Nru mlton-20130715/mlton/backend/sources.mlb mlton-20210117+dfsg/mlton/backend/sources.mlb --- mlton-20130715/mlton/backend/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,14 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) local ../../lib/mlton/sources.mlb - ../ast/sources.mlb ../atoms/sources.mlb ../control/sources.mlb ../ssa/sources.mlb @@ -18,31 +18,52 @@ objptr-tycon.sig objptr-tycon.fun object-type.sig - scale.sig - scale.fun rep-type.sig rep-type.fun + + backend-atoms.sig + backend-atoms.fun + + err.sml + + object.sig + object.fun switch.sig switch.fun - err.sml - rssa.sig - rssa.fun - machine.sig - machine.fun - representation.sig - packed-representation.fun - ssa-to-rssa.sig - ssa-to-rssa.fun + + rssa-tree.sig + rssa-tree.fun + rssa-type-check.sig + rssa-type-check.fun + rssa-shrink.sig + rssa-shrink.fun + rssa-live.sig + rssa-live.fun + rssa-restore.sig + rssa-restore.fun + rssa-transform.sig + bounce-vars.fun + collect-statics.fun implement-handlers.fun - implement-profiling.sig implement-profiling.fun limit-check.fun signal-check.fun - live.sig - live.fun - allocate-registers.sig - allocate-registers.fun + rssa-simplify.sig + rssa-simplify.fun + rssa.sig + rssa.fun + + representation.sig + packed-representation.fun + ssa2-to-rssa.sig + ssa2-to-rssa.fun + + machine.sig + machine.fun + + allocate-variables.sig + allocate-variables.fun equivalence-graph.sig equivalence-graph.fun chunkify.sig @@ -57,5 +78,8 @@ signature RUNTIME functor Backend + functor BackendAtoms functor Machine + functor Rssa + functor Ssa2ToRssa end diff -Nru mlton-20130715/mlton/backend/ssa2-to-rssa.fun mlton-20210117+dfsg/mlton/backend/ssa2-to-rssa.fun --- mlton-20130715/mlton/backend/ssa2-to-rssa.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/ssa2-to-rssa.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1688 @@ +(* Copyright (C) 2009,2011,2014,2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor Ssa2ToRssa (S: SSA2_TO_RSSA_STRUCTS): SSA2_TO_RSSA = +struct + +open S +open Rssa + +datatype z = datatype WordSize.prim + +structure S = Ssa2 + +local + open Ssa2 +in + structure Base = Base +end + +local + open Runtime +in + structure GCField = GCField +end + +structure CFunction = + struct + open CFunction + open Type.BuiltInCFunction + + type t = Type.t CFunction.t + + structure CType = + struct + open CType + val gcState = CPointer + val intInf = Objptr + val string = Objptr + val thread = CPointer (* CHECK; thread (= objptr) would be better? *) + end + + datatype z = datatype Convention.t + datatype z = datatype SymbolScope.t + datatype z = datatype Target.t + + val copyCurrentThread = fn () => + T {args = Vector.new1 (Type.gcState ()), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = true, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = true, + modifiesFrontier = true, + readsStackTop = true, + writesStackTop = true}, + prototype = (Vector.new1 CType.gcState, NONE), + return = Type.unit, + symbolScope = Private, + target = Direct "GC_copyCurrentThread"} + + (* CHECK; thread as objptr *) + val copyThread = fn () => + T {args = Vector.new2 (Type.gcState (), Type.thread ()), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = true, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = true, + readsStackTop = true, + writesStackTop = true}, + prototype = let + open CType + in + (Vector.new2 (CPointer, CPointer), SOME CPointer) + end, + return = Type.thread (), + symbolScope = Private, + target = Direct "GC_copyThread"} + + val halt = fn () => + T {args = Vector.new2 (Type.gcState (), Type.cint ()), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = true, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = true, + readsStackTop = true, + writesStackTop = true}, + prototype = (Vector.new2 (CType.gcState, CType.cint ()), NONE), + return = Type.unit, + symbolScope = Private, + target = Direct "MLton_halt"} + + fun gcSequenceAllocate {return} = + T {args = Vector.new4 (Type.gcState (), + Type.csize (), + Type.seqIndex (), + Type.objptrHeader ()), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = SOME 1, + mayGC = true, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = true, + readsStackTop = true, + writesStackTop = true}, + prototype = (Vector.new4 (CType.gcState, + CType.csize (), + CType.seqIndex (), + CType.objptrHeader ()), + SOME CType.objptr), + return = return, + symbolScope = Private, + target = Direct "GC_sequenceAllocate"} + + fun gcSequenceCopy (dt, st) = + T {args = Vector.new6 (Type.gcState (), + dt, + Type.seqIndex (), + st, + Type.seqIndex (), + Type.seqIndex ()), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = false, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = false, + readsStackTop = false, + writesStackTop = false}, + prototype = (Vector.new6 (CType.gcState, + CType.Objptr, + CType.seqIndex (), + CType.Objptr, + CType.seqIndex (), + CType.seqIndex ()), + NONE), + return = Type.unit, + symbolScope = Private, + target = Direct "GC_sequenceCopy"} + + val returnToC = fn () => + T {args = Vector.new0 (), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = true, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = true, + modifiesFrontier = true, + readsStackTop = true, + writesStackTop = true}, + prototype = (Vector.new0 (), NONE), + return = Type.unit, + symbolScope = Private, + target = Direct "Thread_returnToC"} + + (* CHECK; thread as objptr *) + val threadSwitchTo = fn () => + T {args = Vector.new3 (Type.gcState (), Type.thread (), Type.csize ()), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = SOME 2, + mayGC = true, + maySwitchThreadsFrom = true, + maySwitchThreadsTo = true, + modifiesFrontier = true, + readsStackTop = true, + writesStackTop = true}, + prototype = (Vector.new3 (CType.gcState, + CType.thread, + CType.csize ()), + NONE), + return = Type.unit, + symbolScope = Private, + target = Direct "GC_switchToThread"} + + (* CHECK; weak as objptr *) + fun weakCanGet {arg} = + T {args = Vector.new2 (Type.gcState (), arg), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = false, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = false, + readsStackTop = false, + writesStackTop = false}, + prototype = (Vector.new2 (CType.gcState, CType.cpointer), + SOME CType.bool), + return = Type.bool, + symbolScope = Private, + target = Direct "GC_weakCanGet"} + + (* CHECK; weak as objptr *) + fun weakGet {arg, return} = + T {args = Vector.new2 (Type.gcState (), arg), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = false, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = false, + readsStackTop = false, + writesStackTop = false}, + prototype = (Vector.new2 (CType.gcState, CType.cpointer), + SOME CType.cpointer), + return = return, + symbolScope = Private, + target = Direct "GC_weakGet"} + + (* CHECK; weak as objptr *) + fun weakNew {arg, return} = + T {args = Vector.new3 (Type.gcState (), Type.objptrHeader (), arg), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = true, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = true, + readsStackTop = true, + writesStackTop = true}, + prototype = (Vector.new3 (CType.gcState, + CType.objptrHeader (), + CType.cpointer), + SOME (CType.cpointer)), + return = return, + symbolScope = Private, + target = Direct "GC_weakNew"} + + val worldSave = fn () => + T {args = Vector.new2 (Type.gcState (), Type.string ()), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = true, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = true, + modifiesFrontier = true, + readsStackTop = true, + writesStackTop = true}, + prototype = (Vector.new2 (CType.gcState, CType.cpointer), NONE), + return = Type.unit, + symbolScope = Private, + target = Direct "GC_saveWorld"} + + (* CHECK; share with objptr *) + fun share t = + T {args = Vector.new2 (Type.gcState (), t), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = true, (* MLton.share works by tracing an object. + * Make sure all the GC invariants are true, + * because tracing might encounter the current + * stack in the heap. + *) + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = true, (* actually, just readsFrontier *) + readsStackTop = true, + writesStackTop = true}, + prototype = (Vector.new2 (CType.gcState, CType.cpointer), NONE), + return = Type.unit, + symbolScope = Private, + target = Direct "GC_share"} + + (* CHECK; size with objptr *) + fun size t = + T {args = Vector.new2 (Type.gcState (), t), + convention = Cdecl, + inline = false, + kind = Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = true, (* MLton.size works by tracing an object. + * Make sure all the GC invariants are true, + * because tracing might encounter the current + * stack in the heap. + *) + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = true, + readsStackTop = true, + writesStackTop = true}, + prototype = (Vector.new2 (CType.gcState, CType.cpointer), + SOME (CType.csize ())), + return = Type.csize (), + symbolScope = Private, + target = Direct "GC_size"} + + fun amAllocationProfiling () = + Control.ProfileAlloc = !Control.profile + val intInfBinary = fn name => + CFunction.T {args = Vector.new4 (Type.gcState (), + Type.intInf (), + Type.intInf (), + Type.csize ()), + convention = Cdecl, + inline = false, + kind = CFunction.Kind.Runtime {bytesNeeded = SOME 3, + ensuresBytesFree = NONE, + mayGC = false, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = true, + readsStackTop = amAllocationProfiling (), + writesStackTop = false}, + prototype = (Vector.new4 (CType.gcState, + CType.intInf, + CType.intInf, + CType.csize ()), + SOME CType.intInf), + return = Type.intInf (), + symbolScope = Private, + target = Direct (Prim.toString name)} + val intInfCompare = fn name => + (* CHECK; cint would be better? *) + CFunction.T {args = Vector.new3 (Type.gcState (), + Type.intInf (), + Type.intInf ()), + convention = Cdecl, + inline = false, + kind = CFunction.Kind.Runtime {bytesNeeded = NONE, + ensuresBytesFree = NONE, + mayGC = false, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = false, + readsStackTop = false, + writesStackTop = false}, + prototype = (Vector.new3 (CType.gcState, + CType.intInf, + CType.intInf), + SOME CType.compareRes), + return = Type.compareRes, + symbolScope = Private, + target = Direct (Prim.toString name)} + val intInfShift = fn name => + CFunction.T {args = Vector.new4 (Type.gcState (), + Type.intInf (), + Type.shiftArg, + Type.csize ()), + convention = Cdecl, + inline = false, + kind = CFunction.Kind.Runtime {bytesNeeded = SOME 3, + ensuresBytesFree = NONE, + mayGC = false, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = true, + readsStackTop = amAllocationProfiling (), + writesStackTop = false}, + prototype = (Vector.new4 (CType.gcState, + CType.intInf, + CType.shiftArg, + CType.csize ()), + SOME CType.intInf), + return = Type.intInf (), + symbolScope = Private, + target = Direct (Prim.toString name)} + val intInfToString = fn name => + (* CHECK; cint would be better? *) + CFunction.T {args = Vector.new4 (Type.gcState (), + Type.intInf (), + Type.word WordSize.word32, + Type.csize ()), + convention = Cdecl, + inline = false, + kind = CFunction.Kind.Runtime {bytesNeeded = SOME 3, + ensuresBytesFree = NONE, + mayGC = false, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = true, + readsStackTop = amAllocationProfiling (), + writesStackTop = false}, + prototype = (Vector.new4 (CType.gcState, + CType.intInf, + CType.Int32, + CType.csize ()), + SOME CType.string), + return = Type.string (), + symbolScope = Private, + target = Direct (Prim.toString name)} + val intInfUnary = fn name => + CFunction.T {args = Vector.new3 (Type.gcState (), + Type.intInf (), + Type.csize ()), + convention = Cdecl, + inline = false, + kind = CFunction.Kind.Runtime {bytesNeeded = SOME 2, + ensuresBytesFree = NONE, + mayGC = false, + maySwitchThreadsFrom = false, + maySwitchThreadsTo = false, + modifiesFrontier = true, + readsStackTop = amAllocationProfiling (), + writesStackTop = false}, + prototype = (Vector.new3 (CType.gcState, + CType.intInf, + CType.csize ()), + SOME CType.intInf), + return = Type.intInf (), + symbolScope = Private, + target = Direct (Prim.toString name)} + end + +structure Prim = + struct + local + structure CFunction' = CFunction + in + open Prim + structure CFunction = CFunction' + end + + datatype u = datatype t + type t = Type.t t + + fun cFunctionRaise (p: t): CFunction.t = + let + datatype z = datatype CFunction.Convention.t + datatype z = datatype CFunction.SymbolScope.t + datatype z = datatype CFunction.Target.t + val name = toString p + val real = Type.real + val word = Type.word + val vanilla = CFunction.vanilla + fun wordCType (s, sg) = CType.word (s, sg) + fun realCType s = CType.real s + fun coerce (t1, ct1, t2, ct2) = + vanilla {args = Vector.new1 t1, + name = name, + prototype = (Vector.new1 ct1, SOME ct2), + return = t2} + local + fun make n s = + let + val t = real s + val ct = CType.real s + in + vanilla {args = Vector.new (n, t), + name = name, + prototype = (Vector.new (n, ct), SOME ct), + return = t} + end + in + val realBinary = make 2 + val realTernary = make 3 + val realUnary = make 1 + end + fun realCompare s = + let + val t = real s + in + vanilla {args = Vector.new2 (t, t), + name = name, + prototype = let + val t = CType.real s + in + (Vector.new2 (t, t), SOME CType.bool) + end, + return = Type.bool} + end + local + fun make n (s, sg) = + let + val t = word s + val ct = CType.word (s, sg) + in + vanilla {args = Vector.new (n, t), + name = name, + prototype = (Vector.new (n, ct), SOME ct), + return = t} + end + fun makeCheckP n (s, sg) = + let + val t = word s + val ct = CType.word (s, sg) + in + vanilla {args = Vector.new (n, t), + name = name, + prototype = (Vector.new (n, ct), SOME CType.bool), + return = Type.bool} + end + in + val wordBinary = make 2 + val wordBinaryCheckP = makeCheckP 2 + val wordUnary = make 1 + val wordUnaryCheckP = makeCheckP 1 + end + fun wordCompare (s, sg) = + let + val t = word s + val ct = CType.word (s, sg) + in + vanilla {args = Vector.new2 (t, t), + name = name, + prototype = (Vector.new2 (ct, ct), SOME CType.bool), + return = Type.bool} + end + fun wordShift (s, sg) = + let + val t = word s + val ct = CType.word (s, sg) + in + vanilla {args = Vector.new2 (t, Type.shiftArg), + name = name, + prototype = (Vector.new2 (ct, CType.shiftArg), SOME ct), + return = t} + end + in + case p of + Real_Math_acos s => realUnary s + | Real_Math_asin s => realUnary s + | Real_Math_atan s => realUnary s + | Real_Math_atan2 s => realBinary s + | Real_Math_cos s => realUnary s + | Real_Math_exp s => realUnary s + | Real_Math_ln s => realUnary s + | Real_Math_log10 s => realUnary s + | Real_Math_sin s => realUnary s + | Real_Math_sqrt s => realUnary s + | Real_Math_tan s => realUnary s + | Real_abs s => realUnary s + | Real_add s => realBinary s + | Real_castToWord (s1, s2) => + coerce (real s1, realCType s1, + word s2, wordCType (s2, {signed = false})) + | Real_div s => realBinary s + | Real_equal s => realCompare s + | Real_ldexp s => + let + val t = real s + val ct = CType.real s + in + vanilla {args = Vector.new2 (t, Type.cint ()), + name = name, + prototype = (Vector.new2 (ct, CType.cint ()), + SOME ct), + return = t} + end + | Real_le s => realCompare s + | Real_lt s => realCompare s + | Real_mul s => realBinary s + | Real_muladd s => realTernary s + | Real_mulsub s => realTernary s + | Real_neg s => realUnary s + | Real_qequal s => realCompare s + | Real_rndToReal (s1, s2) => + coerce (real s1, realCType s1, real s2, realCType s2) + | Real_rndToWord (s1, s2, sg) => + coerce (real s1, realCType s1, + word s2, wordCType (s2, sg)) + | Real_round s => realUnary s + | Real_sub s => realBinary s + | Thread_returnToC => CFunction.returnToC () + | Word_add s => wordBinary (s, {signed = false}) + | Word_addCheckP (s, sg) => wordBinaryCheckP (s, sg) + | Word_andb s => wordBinary (s, {signed = false}) + | Word_castToReal (s1, s2) => + coerce (word s1, wordCType (s1, {signed = false}), + real s2, realCType s2) + | Word_equal s => wordCompare (s, {signed = false}) + | Word_extdToWord (s1, s2, sg) => + coerce (word s1, wordCType (s1, sg), + word s2, wordCType (s2, {signed = false})) + | Word_lshift s => wordShift (s, {signed = false}) + | Word_lt z => wordCompare z + | Word_mul z => wordBinary z + | Word_mulCheckP (s, sg) => wordBinaryCheckP (s, sg) + | Word_neg s => wordUnary (s, {signed = false}) + | Word_negCheckP (s, sg) => wordUnaryCheckP (s, sg) + | Word_notb s => wordUnary (s, {signed = false}) + | Word_orb s => wordBinary (s, {signed = false}) + | Word_quot z => wordBinary z + | Word_rem z => wordBinary z + | Word_rndToReal (s1, s2, sg) => + coerce (word s1, wordCType (s1, sg), + real s2, realCType s2) + | Word_xorb s => wordBinary (s, {signed = false}) + | Word_rol s => wordShift (s, {signed = false}) + | Word_ror s => wordShift (s, {signed = false}) + | Word_rshift z => wordShift z + | Word_sub s => wordBinary (s, {signed = false}) + | Word_subCheckP (s, sg) => wordBinaryCheckP (s, sg) + | _ => Error.bug "SsaToRssa.Name.cFunctionRaise" + end + + fun cFunction p = SOME (cFunctionRaise p) handle _ => NONE + end + +datatype z = datatype Operand.t +datatype z = datatype Statement.t +datatype z = datatype Transfer.t + +structure PackedRepresentation = PackedRepresentation (structure Rssa = Rssa + structure Ssa2 = Ssa2) + +structure Type = + struct + open Type + + fun scale (ty: t): Scale.t = + case Scale.fromBytes (bytes ty) of + NONE => Error.bug "SsaToRssa.Type.scale" + | SOME s => s + end + +val cardSizeLog2 : IntInf.t = 8 (* must agree with CARD_SIZE_LOG2 in gc.c *) + +fun updateCard (addr: Operand.t): Statement.t list = + let + val index = Var.newNoname () + (* CHECK; WordSize.objptr or WordSize.cpointer? *) + val sz = WordSize.objptr () + val indexTy = Type.word sz + val cardElemSize = WordSize.fromBits Bits.inByte + in + [PrimApp {args = (Vector.new2 + (Operand.cast (addr, Type.bits (WordSize.bits sz)), + Operand.word + (WordX.fromIntInf (cardSizeLog2, WordSize.shiftArg)))), + dst = SOME (index, indexTy), + prim = Prim.Word_rshift (sz, {signed = false})}, + Move {dst = (SequenceOffset + {base = Runtime GCField.CardMapAbsolute, + index = Var {ty = indexTy, var = index}, + offset = Bytes.zero, + scale = Scale.One, + ty = Type.word cardElemSize}), + src = Operand.word (WordX.one cardElemSize)}] + end + +fun convertWordSize (ws: WordSize.t): WordSize.t = + WordSize.roundUpToPrim ws + +fun convertWordX (w: WordX.t): WordX.t = + WordX.resize (w, convertWordSize (WordX.size w)) + +fun convert (program as S.Program.T {functions, globals, main, ...}, + {codegenImplementsPrim: Rssa.Type.t Rssa.Prim.t -> bool}): Rssa.Program.t = + let + val {diagnostic, genCase, object, objectTypes, select, sequence, toRtype, update} = + PackedRepresentation.compute program + val objectTypes = Vector.concat [ObjectType.basic (), objectTypes] + val () = + Vector.foreachi + (objectTypes, fn (i, (opt, _)) => ObjptrTycon.setIndex (opt, i)) + val objectTypes = Vector.map (objectTypes, #2) + val () = diagnostic () + + val newObjectTypes = ref [] + local + fun componentsHash cs = + Prod.hash (cs, Type.hash) + fun componentsEquals (cs1, cs2) = + Prod.equals (cs1, cs2, Type.equals) + val h = HashTable.new {hash = componentsHash, equals = componentsEquals} + in + fun allocRawOpt components = + HashTable.lookupOrInsert + (h, components, + fn () => + let + val rawComponents = + Prod.map (components, fn ty => + if Type.isObjptr ty + then Type.bits (Type.width ty) + else ty) + val rawTy = ObjectType.Sequence {components = rawComponents, hasIdentity = true} + val rawOpt = ObjptrTycon.new () + val () = + ObjptrTycon.setIndex + (rawOpt, Vector.length objectTypes + HashTable.size h) + val () = + List.push (newObjectTypes, rawTy) + in + rawOpt + end) + end + + val {get = varInfo: Var.t -> {ty: S.Type.t}, + set = setVarInfo, ...} = + Property.getSetOnce (Var.plist, + Property.initRaise ("varInfo", Var.layout)) + val setVarInfo = + Trace.trace2 ("SsaToRssa.setVarInfo", + Var.layout, S.Type.layout o #ty, Unit.layout) + setVarInfo + val varType = #ty o varInfo + fun varOp (x: Var.t): Operand.t = + Var {var = x, ty = valOf (toRtype (varType x))} + val varOp = + Trace.trace ("SsaToRssa.varOp", Var.layout, Operand.layout) varOp + fun varOps xs = Vector.map (xs, varOp) + val extraBlocks = ref [] + fun newBlock {args, kind, + statements: Statement.t vector, + transfer: Transfer.t}: Label.t = + let + val l = Label.newNoname () + val _ = List.push (extraBlocks, + Block.T {args = args, + kind = kind, + label = l, + statements = statements, + transfer = transfer}) + in + l + end + val {get = labelInfo: (Label.t -> + {args: (Var.t * S.Type.t) vector, + cont: (Handler.t * Label.t) list ref, + handler: Label.t option ref}), + set = setLabelInfo, ...} = + Property.getSetOnce (Label.plist, + Property.initRaise ("label info", Label.layout)) + fun translateCase ({test: Var.t, + cases: (Con.t, Label.t) S.Cases.t, + default: Label.t option}) + : Statement.t list * Transfer.t = + case cases of + S.Cases.Con cases => + (case (Vector.length cases, default) of + (0, NONE) => ([], Transfer.bug ()) + | _ => + (case S.Type.dest (varType test) of + S.Type.Datatype tycon => + let + val test = fn () => varOp test + val cases = + Vector.map + (cases, fn (con, dst) => + {con = con, + dst = dst, + dstHasArg = + Vector.fold + (#args (labelInfo dst), false, fn ((_,ty),b) => + b orelse isSome (toRtype ty))}) + val (ss, t, blocks) = + genCase {cases = cases, + default = default, + test = test, + tycon = tycon} + val () = + extraBlocks := blocks @ !extraBlocks + in + (ss, t) + end + | _ => Error.bug "SsaToRssa.translateCase: strange type")) + | S.Cases.Word (s, cases) => + let + val cases = + QuickSort.sortVector + (Vector.map (cases, fn (w, l) => (convertWordX w, l)), + fn ((w, _), (w', _)) => WordX.le (w, w', {signed = false})) + in + ([], + Switch + (Switch.T + {cases = cases, + default = default, + expect = NONE, + size = convertWordSize s, + test = varOp test})) + end + fun eta (l: Label.t, kind: Kind.t): Label.t = + let + val {args, ...} = labelInfo l + val args = Vector.keepAllMap (args, fn (x, t) => + Option.map (toRtype t, fn t => + (Var.new x, t))) + val l' = Label.new l + val _ = + List.push + (extraBlocks, + Block.T {args = args, + kind = kind, + label = l', + statements = Vector.new0 (), + transfer = (Transfer.Goto + {dst = l, + args = Vector.map (args, fn (var, ty) => + Var {var = var, + ty = ty})})}) + in + l' + end + fun labelHandler (l: Label.t): Label.t = + let + val {handler, ...} = labelInfo l + in + case !handler of + NONE => + let + val l' = eta (l, Kind.Handler) + val _ = handler := SOME l' + in + l' + end + | SOME l => l + end + fun labelCont (l: Label.t, h: Handler.t): Label.t = + let + val {cont, ...} = labelInfo l + datatype z = datatype Handler.t + in + case List.peek (!cont, fn (h', _) => Handler.equals (h, h')) of + SOME (_, l) => l + | NONE => + let + val l' = eta (l, Kind.Cont {handler = h}) + val _ = List.push (cont, (h, l')) + in + l' + end + end + val labelCont = + Trace.trace2 ("SsaToRssa.labelCont", + Label.layout, Handler.layout, Label.layout) + labelCont + fun vos (xs: Var.t vector) = + Vector.keepAllMap (xs, fn x => + Option.map (toRtype (varType x), fn _ => + varOp x)) + fun bogus (t: Type.t): Operand.t = + case Type.deReal t of + NONE => Operand.cast (Operand.word (Type.bogusWord t), t) + | SOME s => Operand.Const (Const.real (RealX.zero s)) + val handlesSignals = + S.Program.hasPrim + (program, fn p => + case p of + Prim.MLton_installSignalHandler => true + | _ => false) + fun translateFormals v = + Vector.keepAllMap (v, fn (x, t) => + Option.map (toRtype t, fn t => (x, t))) + fun translatePrim p = + Prim.map (p, fn t => + case toRtype t of + NONE => Type.unit + | SOME t => t) + fun translateTransfer (t: S.Transfer.t): (Statement.t list * + Transfer.t) = + case t of + S.Transfer.Bug => ([], Transfer.bug ()) + | S.Transfer.Call {func, args, return} => + let + datatype z = datatype S.Return.t + val return = + case return of + Dead => Return.Dead + | NonTail {cont, handler} => + let + datatype z = datatype S.Handler.t + val handler = + case handler of + Caller => Handler.Caller + | Dead => Handler.Dead + | Handle l => Handler.Handle (labelHandler l) + in + Return.NonTail {cont = labelCont (cont, handler), + handler = handler} + end + | Tail => Return.Tail + in + ([], Transfer.Call {func = func, + args = vos args, + return = return}) + end + | S.Transfer.Case r => translateCase r + | S.Transfer.Goto {dst, args} => + ([], Transfer.Goto {dst = dst, args = vos args}) + | S.Transfer.Raise xs => ([], Transfer.Raise (vos xs)) + | S.Transfer.Return xs => ([], Transfer.Return (vos xs)) + | S.Transfer.Runtime {args, prim, return} => + (case prim of + Prim.Thread_copyCurrent => + let + val func = CFunction.copyCurrentThread () + val l = + newBlock {args = Vector.new0 (), + kind = Kind.CReturn {func = func}, + statements = Vector.new0 (), + transfer = (Goto {args = Vector.new0 (), + dst = return})} + in + ([], + Transfer.CCall + {args = Vector.concat [Vector.new1 GCState, + vos args], + func = func, + return = SOME l}) + end + | _ => Error.bug (concat + ["SsaToRssa.translateTransfer: ", + "strange Runtime prim: ", + Prim.toString prim])) + fun translateStatementsTransfer (statements, ss, transfer) = + let + fun loop (i, ss, t): Statement.t vector * Transfer.t = + if i < 0 + then (Vector.fromList ss, t) + else + let + fun none () = loop (i - 1, ss, t) + fun add s = loop (i - 1, s :: ss, t) + fun add2 (s1, s2) = loop (i - 1, s1 :: s2 :: ss, t) + fun adds ss' = loop (i - 1, ss' @ ss, t) + val s = Vector.sub (statements, i) + in + case s of + S.Statement.Profile e => add (Statement.Profile e) + | S.Statement.Update {base, offset, value} => + (case toRtype (varType value) of + NONE => none () + | SOME t => + let + val baseOp = Base.map (base, varOp) + val ss = + update + {base = baseOp, + baseTy = varType (Base.object base), + offset = offset, + value = varOp value} + val ss = + if !Control.markCards + andalso Type.isObjptr t + then + updateCard (Base.object baseOp) + @ ss + else ss + in + adds ss + end) + | S.Statement.Bind {exp, ty, var} => + let + fun split (args, kind, + ss: Statement.t list, + make: Label.t -> Statement.t list * Transfer.t) = + let + val l = newBlock {args = args, + kind = kind, + statements = Vector.fromList ss, + transfer = t} + val (ss, t) = make l + in + loop (i - 1, ss, t) + end + fun maybeMove (f: Type.t -> Operand.t) = + case toRtype ty of + NONE => none () + | SOME ty => + add (Bind {dst = (valOf var, ty), + pinned = false, + src = f ty}) + fun move (src: Operand.t) = maybeMove (fn _ => src) + in + case exp of + S.Exp.Const c => + (case c of + Const.IntInf i => + let + fun doit c = + maybeMove (fn ty => Operand.cast (Const c, ty)) + in + case Const.IntInfRep.fromIntInf i of + Const.IntInfRep.Big v => + doit (Const.WordVector v) + | Const.IntInfRep.Small w => + doit (Const.Word w) + end + | Const.Word w => move (Const (Const.Word (convertWordX w))) + | _ => move (Const c)) + | S.Exp.Inject {variant, ...} => + if isSome (toRtype ty) + then move (varOp variant) + else none () + | S.Exp.Object {args, con} => + (case toRtype ty of + NONE => none () + | SOME dstTy => + adds (object {args = args, + con = con, + dst = (valOf var, dstTy), + objectTy = ty, + oper = varOp})) + | S.Exp.PrimApp {args, prim} => + let + val prim = translatePrim prim + fun arg i = Vector.sub (args, i) + fun a i = varOp (arg i) + fun cast () = + move (Operand.cast (a 0, valOf (toRtype ty))) + fun ifIsWeakPointer (ty: S.Type.t, yes, no) = + case S.Type.dest ty of + S.Type.Weak ty => + (case toRtype ty of + NONE => no () + | SOME t => + if Type.isObjptr t + then yes t + else no ()) + | _ => Error.bug "SsaToRssa.ifIsWeakPointer" + fun arrayOrVectorLength () = + move (Offset + {base = a 0, + offset = Runtime.sequenceLengthOffset (), + ty = Type.seqIndex ()}) + fun subWord s = + let + val ty = Type.word s + in + move (SequenceOffset {base = a 0, + index = a 1, + offset = Bytes.zero, + scale = Type.scale ty, + ty = ty}) + end + fun dst () = + case var of + SOME x => + Option.map (toRtype (varType x), fn t => + (x, t)) + | NONE => NONE + fun primApp (prim, args) = + add (PrimApp {dst = dst (), + prim = prim, + args = args}) + fun bumpAtomicState n = + let + val atomicState = Runtime GCField.AtomicState + val res = Var.newNoname () + val resTy = Operand.ty atomicState + in + [Statement.PrimApp + {args = (Vector.new2 + (atomicState, + (Operand.word + (WordX.fromInt (n, WordSize.word32))))), + dst = SOME (res, resTy), + prim = Prim.Word_add WordSize.word32}, + Statement.Move + {dst = atomicState, + src = Var {ty = resTy, var = res}}] + end + fun ccall {args: Operand.t vector, + func: CFunction.t} = + let + val formals = + case dst () of + NONE => Vector.new0 () + | SOME (x, t) => Vector.new1 (x, t) + in + split + (formals, Kind.CReturn {func = func}, ss, + fn l => + ([], + Transfer.CCall {args = args, + func = func, + return = SOME l})) + end + fun simpleCCall (f: CFunction.t) = + ccall {args = vos args, + func = f} + fun simpleCCallWithGCState (f: CFunction.t) = + ccall {args = Vector.concat + [Vector.new1 GCState, + vos args], + func = f} + fun sequenceAlloc (numElts: Operand.t, opt) = + let + val result = valOf (toRtype ty) + val args = + Vector.new4 (GCState, + Operand.zero (WordSize.csize ()), + numElts, + ObjptrTycon opt) + val func = + CFunction.gcSequenceAllocate + {return = result} + in + ccall {args = args, func = func} + end + fun cpointerGet () = + maybeMove (fn ty => + SequenceOffset {base = a 0, + index = a 1, + offset = Bytes.zero, + scale = Type.scale ty, + ty = ty}) + fun cpointerSet () = + let + val src = a 2 + val ty = Operand.ty src + in + add (Move {dst = SequenceOffset {base = a 0, + index = a 1, + offset = Bytes.zero, + scale = Type.scale ty, + ty = ty}, + src = a 2}) + end + fun codegenOrC (p: Prim.t, args) = + if codegenImplementsPrim p + then primApp (p, args) + else (case Prim.cFunction p of + NONE => + Error.bug (concat ["SsaToRssa.codegenOrC: ", + "unimplemented prim:", + Prim.toString p]) + | SOME func => ccall {args = args, func = func}) + fun simpleCodegenOrC (p: Prim.t) = + codegenOrC (p, varOps args) + in + case prim of + Prim.Array_alloc {raw} => + let + val allocOpt = fn () => + let + val result = valOf (toRtype ty) + val opt = + case Type.deObjptr result of + NONE => Error.bug "SsaToRssa.translateStatementsTransfer: PrimApp,Array_alloc" + | SOME opt => opt + in + opt + end + val allocRawOpt = fn () => + let + val result = valOf (toRtype ty) + val arrOpt = + case Type.deObjptr result of + NONE => Error.bug "SsaToRssa.translateStatementsTransfer: PrimApp,Array_allocRaw" + | SOME arrOpt => arrOpt + val arrTy = + Vector.sub (objectTypes, ObjptrTycon.index arrOpt) + val arrComponents = + case arrTy of + ObjectType.Sequence {components, ...} => components + | _ => Error.bug "SsaToRssa.translateStatementsTransfer: PrimApp,Array_allocRaw" + val rawOpt = allocRawOpt arrComponents + in + rawOpt + end + in + sequenceAlloc (a 0, if raw then allocRawOpt () else allocOpt ()) + end + | Prim.Array_copyArray => simpleCCallWithGCState (CFunction.gcSequenceCopy (Operand.ty (a 0), Operand.ty (a 2))) + | Prim.Array_copyVector => simpleCCallWithGCState (CFunction.gcSequenceCopy (Operand.ty (a 0), Operand.ty (a 2))) + | Prim.Array_length => arrayOrVectorLength () + | Prim.Array_toArray => + let + val rawarr = a 0 + val arrTy = valOf (toRtype ty) + val arrOpt = + case Type.deObjptr arrTy of + NONE => Error.bug "SsaToRssa.translateStatementsTransfer: PrimApp,Array_toArray" + | SOME arrOpt => arrOpt + in + add2 + (Move + {dst = (Offset + {base = rawarr, + offset = Runtime.headerOffset (), + ty = Type.objptrHeader ()}), + src = ObjptrTycon arrOpt}, + Bind {dst = (valOf var, arrTy), + pinned = false, + src = Operand.cast (rawarr, arrTy)}) + end + | Prim.Array_toVector => + let + val sequence = a 0 + val vecTy = valOf (toRtype ty) + val vecOpt = + case Type.deObjptr vecTy of + NONE => Error.bug "SsaToRssa.translateStatementsTransfer: PrimApp,Array_toVector" + | SOME vecOpt => vecOpt + in + add2 + (Move + {dst = (Offset + {base = sequence, + offset = Runtime.headerOffset (), + ty = Type.objptrHeader ()}), + src = ObjptrTycon vecOpt}, + Bind {dst = (valOf var, vecTy), + pinned = false, + src = Operand.cast (sequence, vecTy)}) + end + | Prim.Array_uninit => + let + val sequence = a 0 + val sequenceTy = varType (arg 0) + val index = a 1 + val eltTys = + case S.Type.deSequenceOpt sequenceTy of + NONE => Error.bug "SsaToRssa.translateStatementsTransfer: PrimApp,Array_uninit" + | SOME eltTys => eltTys + val sss = + Vector.toListKeepAllMapi + (S.Prod.dest eltTys, fn (offset, {elt, ...}) => + case toRtype elt of + NONE => NONE + | SOME elt => + if not (Type.isObjptr elt) + then NONE + else (SOME o update) + {base = Base.SequenceSub + {index = index, + sequence = sequence}, + baseTy = sequenceTy, + offset = offset, + value = bogus elt}) + in + adds (List.concat sss) + end + | Prim.Array_uninitIsNop => + let + val sequenceTy = varType (arg 0) + val eltTys = + case S.Type.deSequenceOpt sequenceTy of + NONE => Error.bug "SsaToRssa.translateStatementsTransfer: PrimApp,Array_uninitIsNop" + | SOME eltTys => eltTys + val isNop = + Vector.forall + (S.Prod.dest eltTys, fn {elt, ...} => + case toRtype elt of + NONE => true + | SOME elt => not (Type.isObjptr elt)) + in + move (Operand.bool isNop) + end + | Prim.CFunction f => simpleCCall f + | Prim.CPointer_getCPointer => cpointerGet () + | Prim.CPointer_getObjptr => cpointerGet () + | Prim.CPointer_getReal _ => cpointerGet () + | Prim.CPointer_getWord _ => cpointerGet () + | Prim.CPointer_setCPointer => cpointerSet () + | Prim.CPointer_setObjptr => cpointerSet () + | Prim.CPointer_setReal _ => cpointerSet () + | Prim.CPointer_setWord _ => cpointerSet () + | Prim.GC_collect => + ccall + {args = (Vector.new3 + (GCState, + Operand.zero (WordSize.csize ()), + Operand.bool true)), + func = (CFunction.gc + {maySwitchThreads = handlesSignals})} + | Prim.GC_state => move GCState + | Prim.IntInf_add => + simpleCCallWithGCState (CFunction.intInfBinary prim) + | Prim.IntInf_andb => + simpleCCallWithGCState (CFunction.intInfBinary prim) + | Prim.IntInf_arshift => + simpleCCallWithGCState (CFunction.intInfShift prim) + | Prim.IntInf_compare => + simpleCCallWithGCState (CFunction.intInfCompare prim) + | Prim.IntInf_gcd => + simpleCCallWithGCState (CFunction.intInfBinary prim) + | Prim.IntInf_lshift => + simpleCCallWithGCState (CFunction.intInfShift prim) + | Prim.IntInf_mul => + simpleCCallWithGCState (CFunction.intInfBinary prim) + | Prim.IntInf_neg => + simpleCCallWithGCState (CFunction.intInfUnary prim) + | Prim.IntInf_notb => + simpleCCallWithGCState (CFunction.intInfUnary prim) + | Prim.IntInf_orb => + simpleCCallWithGCState (CFunction.intInfBinary prim) + | Prim.IntInf_quot => + simpleCCallWithGCState (CFunction.intInfBinary prim) + | Prim.IntInf_rem => + simpleCCallWithGCState (CFunction.intInfBinary prim) + | Prim.IntInf_sub => + simpleCCallWithGCState (CFunction.intInfBinary prim) + | Prim.IntInf_toString => + simpleCCallWithGCState (CFunction.intInfToString prim) + | Prim.IntInf_toVector => cast () + | Prim.IntInf_toWord => cast () + | Prim.IntInf_xorb => + simpleCCallWithGCState (CFunction.intInfBinary prim) + | Prim.MLton_bug => + loop + (i - 1, [], + Transfer.CCall {args = vos args, + func = CFunction.bug (), + return = NONE}) + | Prim.MLton_bogus => + (case toRtype ty of + NONE => none () + | SOME t => move (bogus t)) + | Prim.MLton_eq => + (case toRtype (varType (arg 0)) of + NONE => move (Operand.bool true) + | SOME t => + let + val ws = WordSize.fromBits (Type.width t) + val wordEqual = Prim.Word_equal ws + val args = varOps args + val (prim, args) = + case Type.toCType t of + CType.CPointer => + (Prim.CPointer_equal, args) + | CType.Objptr => + (wordEqual, + Vector.map + (args, fn arg => + Operand.cast (arg, Type.word ws))) + | CType.Word8 => (wordEqual, args) + | CType.Word16 => (wordEqual, args) + | CType.Word32 => (wordEqual, args) + | CType.Word64 => (wordEqual, args) + | _ => Error.bug (concat ["SsaToRssa.translateStatementsTransfer: PrimApp,MLton_eq,", Layout.toString (Type.layout t)]) + in + codegenOrC (prim, args) + end) + | Prim.MLton_halt => + simpleCCallWithGCState + (CFunction.halt ()) + | Prim.MLton_installSignalHandler => none () + | Prim.MLton_share => + (case toRtype (varType (arg 0)) of + NONE => none () + | SOME t => + if not (Type.isObjptr t) + then none () + else + simpleCCallWithGCState + (CFunction.share (Operand.ty (a 0)))) + | Prim.MLton_size => + (case toRtype (varType (arg 0)) of + NONE => move (Operand.word (WordX.zero (WordSize.csize ()))) + | SOME t => + if not (Type.isObjptr t) + then move (Operand.word (WordX.zero (WordSize.csize ()))) + else + simpleCCallWithGCState + (CFunction.size (Operand.ty (a 0)))) + | Prim.MLton_touch => + let + val a = arg 0 + in + if isSome (toRtype (varType a)) + then primApp (prim, Vector.new1 (varOp a)) + else none () + end + | Prim.Thread_atomicBegin => + (* gcState.atomicState++; + * if (gcState.signalsInfo.signalIsPending) + * gcState.limit = gcState.limitPlusSlop - LIMIT_SLOP; + *) + split + (Vector.new0 (), Kind.Jump, ss, + fn continue => + let + datatype z = datatype GCField.t + val tmp = Var.newNoname () + val size = WordSize.cpointer () + val ty = Type.cpointer () + val statements = + Vector.new2 + (Statement.PrimApp + {args = (Vector.new2 + (Runtime LimitPlusSlop, + Operand.word + (WordX.fromBytes + (Runtime.limitSlop, + size)))), + dst = SOME (tmp, ty), + prim = Prim.CPointer_sub}, + Statement.Move + {dst = Runtime Limit, + src = Var {ty = ty, var = tmp}}) + val signalIsPending = + newBlock + {args = Vector.new0 (), + kind = Kind.Jump, + statements = statements, + transfer = (Transfer.Goto + {args = Vector.new0 (), + dst = continue})} + in + (bumpAtomicState 1, + if handlesSignals + then + Transfer.ifBool + (Runtime SignalIsPending, + {falsee = continue, + truee = signalIsPending}) + else + Transfer.Goto {args = Vector.new0 (), + dst = continue}) + end) + | Prim.Thread_atomicEnd => + (* gcState.atomicState--; + * if (gcState.signalsInfo.signalIsPending + * and 0 == gcState.atomicState) + * gc; + *) + split + (Vector.new0 (), Kind.Jump, ss, + fn continue => + let + datatype z = datatype GCField.t + val func = + CFunction.gc {maySwitchThreads = true} + val returnFromHandler = + newBlock + {args = Vector.new0 (), + kind = Kind.CReturn {func = func}, + statements = Vector.new0 (), + transfer = + Goto {args = Vector.new0 (), + dst = continue}} + val args = + Vector.new3 + (GCState, + Operand.zero (WordSize.csize ()), + Operand.bool false) + val switchToHandler = + newBlock + {args = Vector.new0 (), + kind = Kind.Jump, + statements = Vector.new0 (), + transfer = + Transfer.CCall + {args = args, + func = func, + return = SOME returnFromHandler}} + val testAtomicState = + newBlock + {args = Vector.new0 (), + kind = Kind.Jump, + statements = Vector.new0 (), + transfer = + Transfer.ifZero + (Runtime AtomicState, + {falsee = continue, + truee = switchToHandler})} + in + (bumpAtomicState ~1, + if handlesSignals + then + Transfer.ifBool + (Runtime SignalIsPending, + {falsee = continue, + truee = testAtomicState}) + else + Transfer.Goto {args = Vector.new0 (), + dst = continue}) + end) + | Prim.Thread_atomicState => + move (Runtime GCField.AtomicState) + | Prim.Thread_copy => + simpleCCallWithGCState + (CFunction.copyThread ()) + | Prim.Thread_switchTo => + ccall {args = (Vector.new3 + (GCState, + a 0, + Operand.zero (WordSize.csize ()))), + func = CFunction.threadSwitchTo ()} + | Prim.Vector_length => arrayOrVectorLength () + | Prim.Weak_canGet => + ifIsWeakPointer + (varType (arg 0), + fn _ => + simpleCCallWithGCState + (CFunction.weakCanGet + {arg = Operand.ty (a 0)}), + fn () => move (Operand.bool false)) + | Prim.Weak_get => + ifIsWeakPointer + (varType (arg 0), + fn t => + simpleCCallWithGCState + (CFunction.weakGet + {arg = Operand.ty (a 0), + return = t}), + fn () => (case toRtype ty of + NONE => none () + | SOME t => move (bogus t))) + | Prim.Weak_new => + ifIsWeakPointer + (ty, + fn t => + let + val result = valOf (toRtype ty) + val header = + ObjptrTycon + (case Type.deObjptr result of + NONE => Error.bug "SsaToRssa.translateStatementsTransfer: PrimApp,Weak_new" + | SOME opt => opt) + val func = + CFunction.weakNew {arg = t, + return = result} + in + ccall {args = (Vector.concat + [Vector.new2 + (GCState, header), + vos args]), + func = func} + end, + none) + | Prim.Word_equal s => + simpleCodegenOrC + (Prim.Word_equal + (WordSize.roundUpToPrim s)) + | Prim.Word_toIntInf => cast () + | Prim.Word_extdToWord (s1, s2, {signed}) => + if WordSize.equals (s1, s2) + then move (a 0) + else + let + val signed = + signed + andalso Bits.< (WordSize.bits s1, + WordSize.bits s2) + val s1 = WordSize.roundUpToPrim s1 + val s2 = WordSize.roundUpToPrim s2 + in + if WordSize.equals (s1, s2) + then cast () + else + simpleCodegenOrC + (Prim.Word_extdToWord + (s1, s2, {signed = signed})) + end + | Prim.WordVector_toIntInf => cast () + | Prim.WordArray_subWord {eleSize, ...} => + subWord eleSize + | Prim.WordArray_updateWord {eleSize, ...} => + let + val ty = Type.word eleSize + in + add (Move {dst = (SequenceOffset + {base = a 0, + index = a 1, + offset = Bytes.zero, + scale = Type.scale ty, + ty = ty}), + src = a 2}) + end + | Prim.WordVector_subWord {eleSize, ...} => + subWord eleSize + | Prim.World_save => + simpleCCallWithGCState + (CFunction.worldSave ()) + | _ => simpleCodegenOrC prim + end + | S.Exp.Select {base, offset} => + (case var of + NONE => none () + | SOME var => + (case toRtype ty of + NONE => none () + | SOME ty => + adds + (select + {base = Base.map (base, varOp), + baseTy = varType (Base.object base), + dst = (var, ty), + offset = offset}))) + | S.Exp.Sequence {args} => + (case toRtype ty of + NONE => none () + | SOME dstTy => + adds (sequence {args = args, + dst = (valOf var, dstTy), + sequenceTy = ty, + oper = varOp})) + | S.Exp.Var y => + (case toRtype ty of + NONE => none () + | SOME _ => move (varOp y)) + end + end + in + loop (Vector.length statements - 1, ss, transfer) + end + fun translateBlock (S.Block.T {label, args, statements, transfer}) = + let + val (ss, t) = translateTransfer transfer + val (ss, t) = translateStatementsTransfer (statements, ss, t) + in + Block.T {args = translateFormals args, + kind = Kind.Jump, + label = label, + statements = ss, + transfer = t} + end + fun translateFunction (f: S.Function.t): Function.t = + let + val _ = + S.Function.foreachVar (f, fn (x, t) => setVarInfo (x, {ty = t})) + val {args, blocks, name, raises, returns, start, ...} = + S.Function.dest f + val _ = + Vector.foreach + (blocks, fn S.Block.T {label, args, ...} => + setLabelInfo (label, {args = args, + cont = ref [], + handler = ref NONE})) + val blocks = Vector.map (blocks, translateBlock) + val blocks = Vector.concat [Vector.fromList (!extraBlocks), blocks] + val _ = extraBlocks := [] + fun transTypes (ts : S.Type.t vector option) + : Type.t vector option = + Option.map (ts, fn ts => Vector.keepAllMap (ts, toRtype)) + in + Function.new {args = translateFormals args, + blocks = blocks, + name = name, + raises = transTypes raises, + returns = transTypes returns, + start = start} + end + + val main = + let + val start = Label.newNoname () + in + translateFunction + (S.Function.profile + (S.Function.new + {args = Vector.new0 (), + blocks = (Vector.new1 + (S.Block.T + {label = start, + args = Vector.new0 (), + statements = globals, + transfer = (S.Transfer.Call + {args = Vector.new0 (), + func = main, + return = S.Return.Tail})})), + mayInline = false, (* doesn't matter *) + name = Func.newString "initGlobals", + raises = NONE, + returns = NONE, + start = start}, + S.SourceInfo.main)) + end + val functions = List.revMap (functions, translateFunction) + val p = Program.T {functions = functions, + handlesSignals = handlesSignals, + main = main, + objectTypes = Vector.concat [objectTypes, Vector.fromListRev (!newObjectTypes)], + profileInfo = NONE, + statics = Vector.new0 ()} + val _ = Program.clear p + in + p + end + +end diff -Nru mlton-20130715/mlton/backend/ssa2-to-rssa.sig mlton-20210117+dfsg/mlton/backend/ssa2-to-rssa.sig --- mlton-20130715/mlton/backend/ssa2-to-rssa.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/ssa2-to-rssa.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,26 @@ +(* Copyright (C) 2017,2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + + +signature SSA2_TO_RSSA_STRUCTS = + sig + structure Rssa: RSSA + structure Ssa2: SSA2 + sharing Rssa.Atoms = Ssa2.Atoms + end + +signature SSA2_TO_RSSA = + sig + include SSA2_TO_RSSA_STRUCTS + + val convert: + Ssa2.Program.t + * {codegenImplementsPrim: Rssa.Type.t Rssa.Prim.t -> bool} + -> Rssa.Program.t + end diff -Nru mlton-20130715/mlton/backend/ssa-to-rssa.fun mlton-20210117+dfsg/mlton/backend/ssa-to-rssa.fun --- mlton-20130715/mlton/backend/ssa-to-rssa.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/ssa-to-rssa.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,1559 +0,0 @@ -(* Copyright (C) 2009,2011 Matthew Fluet. - * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor SsaToRssa (S: SSA_TO_RSSA_STRUCTS): SSA_TO_RSSA = -struct - -open S -open Rssa - -datatype z = datatype WordSize.prim - -structure S = Ssa - -local - open Ssa -in - structure Base = Base -end - -local - open Runtime -in - structure GCField = GCField -end - -structure Prim = - struct - open Prim - - type t = Type.t Prim.t - end - -structure CFunction = - struct - open CFunction - open Type.BuiltInCFunction - - type t = Type.t CFunction.t - - structure CType = - struct - open CType - val gcState = CPointer - val thread = CPointer (* CHECK; thread (= objptr) would be better? *) - end - - datatype z = datatype Convention.t - datatype z = datatype SymbolScope.t - datatype z = datatype Target.t - - val copyCurrentThread = fn () => - T {args = Vector.new1 (Type.gcState ()), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = true, - maySwitchThreads = false, - modifiesFrontier = true, - prototype = (Vector.new1 CType.gcState, NONE), - readsStackTop = true, - return = Type.unit, - symbolScope = Private, - target = Direct "GC_copyCurrentThread", - writesStackTop = true} - - (* CHECK; thread as objptr *) - val copyThread = fn () => - T {args = Vector.new2 (Type.gcState (), Type.thread ()), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = true, - maySwitchThreads = false, - modifiesFrontier = true, - prototype = let - open CType - in - (Vector.new2 (CPointer, CPointer), SOME CPointer) - end, - readsStackTop = true, - return = Type.thread (), - symbolScope = Private, - target = Direct "GC_copyThread", - writesStackTop = true} - - val halt = fn () => - T {args = Vector.new2 (Type.gcState (), Type.cint ()), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = false, - maySwitchThreads = false, - modifiesFrontier = true, - prototype = (Vector.new2 (CType.gcState, CType.cint ()), NONE), - readsStackTop = true, - return = Type.unit, - symbolScope = Private, - target = Direct "MLton_halt", - writesStackTop = true} - - fun gcArrayAllocate {return} = - T {args = Vector.new4 (Type.gcState (), - Type.csize (), - Type.seqIndex (), - Type.objptrHeader ()), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = true, - mayGC = true, - maySwitchThreads = false, - modifiesFrontier = true, - prototype = (Vector.new4 (CType.gcState, - CType.csize (), - CType.seqIndex (), - CType.objptrHeader ()), - SOME CType.objptr), - readsStackTop = true, - return = return, - symbolScope = Private, - target = Direct "GC_arrayAllocate", - writesStackTop = true} - - val returnToC = fn () => - T {args = Vector.new0 (), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = true, - maySwitchThreads = true, - modifiesFrontier = true, - prototype = (Vector.new0 (), NONE), - readsStackTop = true, - return = Type.unit, - symbolScope = Private, - target = Direct "Thread_returnToC", - writesStackTop = true} - - (* CHECK; thread as objptr *) - val threadSwitchTo = fn () => - T {args = Vector.new3 (Type.gcState (), Type.thread (), Type.csize ()), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = true, - mayGC = true, - maySwitchThreads = true, - modifiesFrontier = true, - prototype = (Vector.new3 (CType.gcState, - CType.thread, - CType.csize ()), - NONE), - readsStackTop = true, - return = Type.unit, - symbolScope = Private, - target = Direct "GC_switchToThread", - writesStackTop = true} - - (* CHECK; weak as objptr *) - fun weakCanGet {arg} = - T {args = Vector.new2 (Type.gcState (), arg), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = false, - maySwitchThreads = false, - modifiesFrontier = false, - prototype = (Vector.new2 (CType.gcState, CType.cpointer), - SOME CType.bool), - readsStackTop = false, - return = Type.bool, - symbolScope = Private, - target = Direct "GC_weakCanGet", - writesStackTop = false} - - (* CHECK; weak as objptr *) - fun weakGet {arg, return} = - T {args = Vector.new2 (Type.gcState (), arg), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = false, - maySwitchThreads = false, - modifiesFrontier = false, - prototype = (Vector.new2 (CType.gcState, CType.cpointer), - SOME CType.cpointer), - readsStackTop = false, - return = return, - symbolScope = Private, - target = Direct "GC_weakGet", - writesStackTop = false} - - (* CHECK; weak as objptr *) - fun weakNew {arg, return} = - T {args = Vector.new3 (Type.gcState (), Type.objptrHeader (), arg), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = true, - maySwitchThreads = false, - modifiesFrontier = true, - prototype = (Vector.new3 (CType.gcState, - CType.objptrHeader (), - CType.cpointer), - SOME (CType.cpointer)), - readsStackTop = true, - return = return, - symbolScope = Private, - target = Direct "GC_weakNew", - writesStackTop = true} - - val worldSave = fn () => - T {args = Vector.new2 (Type.gcState (), Type.string ()), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = true, - maySwitchThreads = false, - modifiesFrontier = true, - prototype = (Vector.new2 (CType.gcState, CType.cpointer), NONE), - readsStackTop = true, - return = Type.unit, - symbolScope = Private, - target = Direct "GC_saveWorld", - writesStackTop = true} - - (* CHECK; share with objptr *) - fun share t = - T {args = Vector.new2 (Type.gcState (), t), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = true, (* MLton.share works by tracing an object. - * Make sure all the GC invariants are true, - * because tracing might encounter the current - * stack in the heap. - *) - maySwitchThreads = false, - modifiesFrontier = true, (* actually, just readsFrontier *) - prototype = (Vector.new2 (CType.gcState, CType.cpointer), NONE), - readsStackTop = true, - return = Type.unit, - symbolScope = Private, - target = Direct "GC_share", - writesStackTop = true} - - (* CHECK; size with objptr *) - fun size t = - T {args = Vector.new2 (Type.gcState (), t), - bytesNeeded = NONE, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = true, (* MLton.size works by tracing an object. - * Make sure all the GC invariants are true, - * because tracing might encounter the current - * stack in the heap. - *) - maySwitchThreads = false, - modifiesFrontier = true, - prototype = (Vector.new2 (CType.gcState, CType.cpointer), - SOME (CType.csize ())), - readsStackTop = true, - return = Type.csize (), - symbolScope = Private, - target = Direct "GC_size", - writesStackTop = true} - end - -structure Name = - struct - open Prim.Name - - type t = Type.t t - - structure CType = - struct - open CType - val intInf = Objptr - val string = Objptr - end - - fun cFunctionRaise (n: t): CFunction.t = - let - datatype z = datatype CFunction.Convention.t - datatype z = datatype CFunction.SymbolScope.t - datatype z = datatype CFunction.Target.t - val name = toString n - val real = Type.real - val word = Type.word - val vanilla = CFunction.vanilla - fun wordCType (s, sg) = CType.word (s, sg) - fun realCType s = CType.real s - fun coerce (t1, ct1, t2, ct2) = - vanilla {args = Vector.new1 t1, - name = name, - prototype = (Vector.new1 ct1, SOME ct2), - return = t2} - fun amAllocationProfiling () = - Control.ProfileAlloc = !Control.profile - val intInfBinary = fn () => - CFunction.T {args = Vector.new3 (Type.intInf (), Type.intInf (), - Type.csize ()), - bytesNeeded = SOME 2, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = false, - maySwitchThreads = false, - modifiesFrontier = true, - prototype = (Vector.new3 (CType.intInf, CType.intInf, - CType.csize ()), - SOME CType.intInf), - readsStackTop = amAllocationProfiling (), - return = Type.intInf (), - symbolScope = Private, - target = Direct name, - writesStackTop = false} - val intInfShift = fn () => - CFunction.T {args = Vector.new3 (Type.intInf (), - Type.shiftArg, - Type.csize ()), - bytesNeeded = SOME 2, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = false, - maySwitchThreads = false, - modifiesFrontier = true, - prototype = (Vector.new3 (CType.intInf, - CType.shiftArg, - CType.csize ()), - SOME CType.intInf), - readsStackTop = amAllocationProfiling (), - return = Type.intInf (), - symbolScope = Private, - target = Direct name, - writesStackTop = false} - val intInfToString = fn () => - (* CHECK; cint would be better? *) - CFunction.T {args = Vector.new3 (Type.intInf (), - Type.word WordSize.word32, - Type.csize ()), - bytesNeeded = SOME 2, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = false, - maySwitchThreads = false, - modifiesFrontier = true, - prototype = (Vector.new3 (CType.intInf, - CType.Int32, - CType.csize ()), - SOME CType.string), - readsStackTop = amAllocationProfiling (), - return = Type.string (), - symbolScope = Private, - target = Direct name, - writesStackTop = false} - val intInfUnary = fn () => - CFunction.T {args = Vector.new2 (Type.intInf (), Type.csize ()), - bytesNeeded = SOME 1, - convention = Cdecl, - ensuresBytesFree = false, - mayGC = false, - maySwitchThreads = false, - modifiesFrontier = true, - prototype = (Vector.new2 (CType.intInf, CType.csize ()), - SOME CType.intInf), - readsStackTop = amAllocationProfiling (), - return = Type.intInf (), - symbolScope = Private, - target = Direct name, - writesStackTop = false} - local - fun make n s = - let - val t = real s - val ct = CType.real s - in - vanilla {args = Vector.new (n, t), - name = name, - prototype = (Vector.new (n, ct), SOME ct), - return = t} - end - in - val realBinary = make 2 - val realTernary = make 3 - val realUnary = make 1 - end - fun realCompare s = - let - val t = real s - in - vanilla {args = Vector.new2 (t, t), - name = name, - prototype = let - val t = CType.real s - in - (Vector.new2 (t, t), SOME CType.bool) - end, - return = Type.bool} - end - local - fun make n (s, sg) = - let - val t = word s - val ct = CType.word (s, sg) - in - vanilla {args = Vector.new (n, t), - name = name, - prototype = (Vector.new (n, ct), SOME ct), - return = t} - end - fun makeOverflows n (s, sg) = - let - val t = word s - val ct = CType.word (s, sg) - in - vanilla {args = Vector.new (n, t), - name = name ^ "Overflows", - prototype = (Vector.new (n, ct), SOME CType.bool), - return = Type.bool} - end - in - val wordBinary = make 2 - val wordBinaryOverflows = makeOverflows 2 - val wordUnary = make 1 - val wordUnaryOverflows = makeOverflows 1 - end - fun wordCompare (s, sg) = - let - val t = word s - val ct = CType.word (s, sg) - in - vanilla {args = Vector.new2 (t, t), - name = name, - prototype = (Vector.new2 (ct, ct), SOME CType.bool), - return = Type.bool} - end - fun wordShift (s, sg) = - let - val t = word s - val ct = CType.word (s, sg) - in - vanilla {args = Vector.new2 (t, Type.shiftArg), - name = name, - prototype = (Vector.new2 (ct, CType.shiftArg), SOME ct), - return = t} - end - in - case n of - IntInf_add => intInfBinary () - | IntInf_andb => intInfBinary () - | IntInf_arshift => intInfShift () - | IntInf_compare => - (* CHECK; cint would be better? *) - vanilla {args = Vector.new2 (Type.intInf (), Type.intInf ()), - name = name, - prototype = (Vector.new2 (CType.intInf, CType.intInf), - SOME CType.Int32), - return = Type.word WordSize.word32} - | IntInf_equal => - vanilla {args = Vector.new2 (Type.intInf (), Type.intInf ()), - name = name, - prototype = (Vector.new2 (CType.intInf, CType.intInf), - SOME CType.bool), - return = Type.bool} - | IntInf_gcd => intInfBinary () - | IntInf_lshift => intInfShift () - | IntInf_mul => intInfBinary () - | IntInf_neg => intInfUnary () - | IntInf_notb => intInfUnary () - | IntInf_orb => intInfBinary () - | IntInf_quot => intInfBinary () - | IntInf_rem => intInfBinary () - | IntInf_sub => intInfBinary () - | IntInf_toString => intInfToString () - | IntInf_xorb => intInfBinary () - | MLton_bug => CFunction.bug () - | Real_Math_acos s => realUnary s - | Real_Math_asin s => realUnary s - | Real_Math_atan s => realUnary s - | Real_Math_atan2 s => realBinary s - | Real_Math_cos s => realUnary s - | Real_Math_exp s => realUnary s - | Real_Math_ln s => realUnary s - | Real_Math_log10 s => realUnary s - | Real_Math_sin s => realUnary s - | Real_Math_sqrt s => realUnary s - | Real_Math_tan s => realUnary s - | Real_abs s => realUnary s - | Real_add s => realBinary s - | Real_castToWord (s1, s2) => - coerce (real s1, realCType s1, - word s2, wordCType (s2, {signed = false})) - | Real_div s => realBinary s - | Real_equal s => realCompare s - | Real_ldexp s => - let - val t = real s - val ct = CType.real s - in - vanilla {args = Vector.new2 (t, Type.cint ()), - name = name, - prototype = (Vector.new2 (ct, CType.cint ()), - SOME ct), - return = t} - end - | Real_le s => realCompare s - | Real_lt s => realCompare s - | Real_mul s => realBinary s - | Real_muladd s => realTernary s - | Real_mulsub s => realTernary s - | Real_neg s => realUnary s - | Real_qequal s => realCompare s - | Real_rndToReal (s1, s2) => - coerce (real s1, realCType s1, real s2, realCType s2) - | Real_rndToWord (s1, s2, sg) => - coerce (real s1, realCType s1, - word s2, wordCType (s2, sg)) - | Real_round s => realUnary s - | Real_sub s => realBinary s - | Thread_returnToC => CFunction.returnToC () - | Word_add s => wordBinary (s, {signed = false}) - | Word_addCheck (s, sg) => wordBinaryOverflows (s, sg) - | Word_andb s => wordBinary (s, {signed = false}) - | Word_castToReal (s1, s2) => - coerce (word s1, wordCType (s1, {signed = false}), - real s2, realCType s2) - | Word_equal s => wordCompare (s, {signed = false}) - | Word_extdToWord (s1, s2, sg) => - coerce (word s1, wordCType (s1, sg), - word s2, wordCType (s2, {signed = false})) - | Word_lshift s => wordShift (s, {signed = false}) - | Word_lt z => wordCompare z - | Word_mul z => wordBinary z - | Word_mulCheck (s, sg) => wordBinaryOverflows (s, sg) - | Word_neg s => wordUnary (s, {signed = true}) - | Word_negCheck s => wordUnaryOverflows (s, {signed = true}) - | Word_notb s => wordUnary (s, {signed = false}) - | Word_orb s => wordBinary (s, {signed = false}) - | Word_quot z => wordBinary z - | Word_rem z => wordBinary z - | Word_rndToReal (s1, s2, sg) => - coerce (word s1, wordCType (s1, sg), - real s2, realCType s2) - | Word_xorb s => wordBinary (s, {signed = false}) - | Word_rol s => wordShift (s, {signed = false}) - | Word_ror s => wordShift (s, {signed = false}) - | Word_rshift z => wordShift z - | Word_sub s => wordBinary (s, {signed = false}) - | Word_subCheck (s, sg) => wordBinaryOverflows (s, sg) - | _ => Error.bug "SsaToRssa.Name.cFunctionRaise" - end - - fun cFunction n = SOME (cFunctionRaise n) handle _ => NONE - end - -datatype z = datatype Operand.t -datatype z = datatype Statement.t -datatype z = datatype Transfer.t - -structure PackedRepresentation = PackedRepresentation (structure Rssa = Rssa - structure Ssa = Ssa) - -structure Type = - struct - open Type - - fun scale (ty: t): Scale.t = - case Scale.fromBytes (bytes ty) of - NONE => Error.bug "SsaToRssa.Type.scale" - | SOME s => s - end - -val cardSizeLog2 : IntInf.t = 8 (* must agree with CARD_SIZE_LOG2 in gc.c *) - -fun updateCard (addr: Operand.t): Statement.t list = - let - val index = Var.newNoname () - (* CHECK; WordSize.objptr or WordSize.cpointer? *) - val sz = WordSize.objptr () - val indexTy = Type.word sz - val cardElemSize = WordSize.fromBits Bits.inByte - in - [PrimApp {args = (Vector.new2 - (Operand.cast (addr, Type.bits (WordSize.bits sz)), - Operand.word - (WordX.fromIntInf (cardSizeLog2, WordSize.shiftArg)))), - dst = SOME (index, indexTy), - prim = Prim.wordRshift (sz, {signed = false})}, - Move {dst = (ArrayOffset - {base = Runtime GCField.CardMapAbsolute, - index = Var {ty = indexTy, var = index}, - offset = Bytes.zero, - scale = Scale.One, - ty = Type.word cardElemSize}), - src = Operand.word (WordX.one cardElemSize)}] - end - -fun convertWordSize (ws: WordSize.t): WordSize.t = - WordSize.roundUpToPrim ws - -fun convertWordX (w: WordX.t): WordX.t = - WordX.resize (w, convertWordSize (WordX.size w)) - -fun convertConst (c: Const.t): Const.t = - let - datatype z = datatype Const.t - in - case c of - Word w => Word (convertWordX w) - | _ => c - end - -fun convert (program as S.Program.T {functions, globals, main, ...}, - {codegenImplementsPrim: Rssa.Type.t Rssa.Prim.t -> bool}): Rssa.Program.t = - let - val {diagnostic, genCase, object, objectTypes, select, toRtype, update} = - PackedRepresentation.compute program - val objectTypes = Vector.concat [ObjectType.basic (), objectTypes] - val () = - Vector.foreachi - (objectTypes, fn (i, (opt, _)) => ObjptrTycon.setIndex (opt, i)) - val objectTypes = Vector.map (objectTypes, #2) - val () = diagnostic () - val {get = varInfo: Var.t -> {ty: S.Type.t}, - set = setVarInfo, ...} = - Property.getSetOnce (Var.plist, - Property.initRaise ("varInfo", Var.layout)) - val setVarInfo = - Trace.trace2 ("SsaToRssa.setVarInfo", - Var.layout, S.Type.layout o #ty, Unit.layout) - setVarInfo - val varType = #ty o varInfo - fun varOp (x: Var.t): Operand.t = - Var {var = x, ty = valOf (toRtype (varType x))} - val varOp = - Trace.trace ("SsaToRssa.varOp", Var.layout, Operand.layout) varOp - fun varOps xs = Vector.map (xs, varOp) - val extraBlocks = ref [] - fun newBlock {args, kind, - statements: Statement.t vector, - transfer: Transfer.t}: Label.t = - let - val l = Label.newNoname () - val _ = List.push (extraBlocks, - Block.T {args = args, - kind = kind, - label = l, - statements = statements, - transfer = transfer}) - in - l - end - val {get = labelInfo: (Label.t -> - {args: (Var.t * S.Type.t) vector, - cont: (Handler.t * Label.t) list ref, - handler: Label.t option ref}), - set = setLabelInfo, ...} = - Property.getSetOnce (Label.plist, - Property.initRaise ("label info", Label.layout)) - fun translateCase ({test: Var.t, - cases: S.Cases.t, - default: Label.t option}) - : Statement.t list * Transfer.t = - case cases of - S.Cases.Con cases => - (case (Vector.length cases, default) of - (0, NONE) => ([], Transfer.bug ()) - | _ => - (case S.Type.dest (varType test) of - S.Type.Datatype tycon => - let - val test = fn () => varOp test - val cases = - Vector.map - (cases, fn (con, dst) => - {con = con, - dst = dst, - dstHasArg = - Vector.fold - (#args (labelInfo dst), false, fn ((_,ty),b) => - b orelse isSome (toRtype ty))}) - val (ss, t, blocks) = - genCase {cases = cases, - default = default, - test = test, - tycon = tycon} - val () = - extraBlocks := blocks @ !extraBlocks - in - (ss, t) - end - | _ => Error.bug "SsaToRssa.translateCase: strange type")) - | S.Cases.Word (s, cases) => - let - val cases = - QuickSort.sortVector - (Vector.map (cases, fn (w, l) => (convertWordX w, l)), - fn ((w, _), (w', _)) => WordX.le (w, w', {signed = false})) - in - ([], - Switch - (Switch.T - {cases = cases, - default = default, - size = convertWordSize s, - test = varOp test})) - end - fun eta (l: Label.t, kind: Kind.t): Label.t = - let - val {args, ...} = labelInfo l - val args = Vector.keepAllMap (args, fn (x, t) => - Option.map (toRtype t, fn t => - (Var.new x, t))) - val l' = Label.new l - val _ = - List.push - (extraBlocks, - Block.T {args = args, - kind = kind, - label = l', - statements = Vector.new0 (), - transfer = (Transfer.Goto - {dst = l, - args = Vector.map (args, fn (var, ty) => - Var {var = var, - ty = ty})})}) - in - l' - end - fun labelHandler (l: Label.t): Label.t = - let - val {handler, ...} = labelInfo l - in - case !handler of - NONE => - let - val l' = eta (l, Kind.Handler) - val _ = handler := SOME l' - in - l' - end - | SOME l => l - end - fun labelCont (l: Label.t, h: Handler.t): Label.t = - let - val {cont, ...} = labelInfo l - datatype z = datatype Handler.t - in - case List.peek (!cont, fn (h', _) => Handler.equals (h, h')) of - SOME (_, l) => l - | NONE => - let - val l' = eta (l, Kind.Cont {handler = h}) - val _ = List.push (cont, (h, l')) - in - l' - end - end - val labelCont = - Trace.trace2 ("SsaToRssa.labelCont", - Label.layout, Handler.layout, Label.layout) - labelCont - fun vos (xs: Var.t vector) = - Vector.keepAllMap (xs, fn x => - Option.map (toRtype (varType x), fn _ => - varOp x)) - fun bogus (t: Type.t): Operand.t = - case Type.deReal t of - NONE => Operand.cast (Operand.word (Type.bogusWord t), t) - | SOME s => Operand.Const (Const.real (RealX.zero s)) - val handlesSignals = - S.Program.hasPrim - (program, fn p => - case Prim.name p of - Prim.Name.MLton_installSignalHandler => true - | _ => false) - fun translateFormals v = - Vector.keepAllMap (v, fn (x, t) => - Option.map (toRtype t, fn t => (x, t))) - fun translatePrim p = - Prim.map (p, fn t => - case toRtype t of - NONE => Type.unit - | SOME t => t) - fun translateTransfer (t: S.Transfer.t): (Statement.t list * - Transfer.t) = - case t of - S.Transfer.Arith {args, overflow, prim, success, ty} => - let - val prim = translatePrim prim - val ty = valOf (toRtype ty) - val res = Var.newNoname () - val noOverflow = - newBlock - {args = Vector.new0 (), - kind = Kind.Jump, - statements = Vector.new0 (), - transfer = (Transfer.Goto - {dst = success, - args = (Vector.new1 - (Var {var = res, ty = ty}))})} - in - if codegenImplementsPrim prim - then ([], - Transfer.Arith {dst = res, - args = vos args, - overflow = overflow, - prim = prim, - success = noOverflow, - ty = ty}) - else - let - datatype z = datatype Prim.Name.t - fun doOperCheckCF (operCheck) = - let - val operCheckCF = - case Name.cFunction operCheck of - NONE => - Error.bug - (concat ["SsaToRssa.translateTransfer: ", - "unimplemented arith:", - Name.toString operCheck]) - | SOME operCheckCF => operCheckCF - val afterOperCheck = - let - val checkRes = Var.newNoname () - in - newBlock - {args = Vector.new1 (checkRes, Type.bool), - kind = Kind.CReturn {func = operCheckCF}, - statements = Vector.new0 (), - transfer = (Transfer.ifBool - (Var {var = checkRes, - ty = Type.bool}, - {falsee = noOverflow, - truee = overflow}))} - end - in - Transfer.CCall - {args = vos args, - func = operCheckCF, - return = SOME afterOperCheck} - end - fun doOperCF (oper, operCheck) = - let - val operCF = - case Name.cFunction oper of - NONE => - Error.bug - (concat ["SsaToRssa.translateTransfer: ", - "unimplemented arith:", - Name.toString oper]) - | SOME operCF => operCF - val afterOper = - newBlock - {args = Vector.new1 (res, ty), - kind = Kind.CReturn {func = operCF}, - statements = Vector.new0 (), - transfer = doOperCheckCF operCheck} - in - Transfer.CCall - {args = vos args, - func = operCF, - return = SOME afterOper} - end - fun doPrim prim = - [Statement.PrimApp - {dst = SOME (res, ty), - prim = prim, - args = vos args}] - fun doit (prim, operCheck) = - if codegenImplementsPrim prim - then (doPrim prim, doOperCheckCF operCheck) - else ([], doOperCF (Prim.name prim, operCheck)) - in - case Prim.name prim of - Word_addCheck (s, sg) => - doit (Prim.wordAdd s, - Word_addCheck (s, sg)) - | Word_mulCheck (s, sg) => - doit (Prim.wordMul (s, sg), - Word_mulCheck (s, sg)) - | Word_negCheck s => - doit (Prim.wordNeg s, - Word_negCheck s) - | Word_subCheck (s, sg) => - doit (Prim.wordSub s, - Word_subCheck (s, sg)) - | _ => Error.bug (concat ["SsaToRssa.translateTransfer: ", - "strange arith:", - Name.toString (Prim.name prim)]) - end - end - | S.Transfer.Bug => ([], Transfer.bug ()) - | S.Transfer.Call {func, args, return} => - let - datatype z = datatype S.Return.t - val return = - case return of - Dead => Return.Dead - | NonTail {cont, handler} => - let - datatype z = datatype S.Handler.t - val handler = - case handler of - Caller => Handler.Caller - | Dead => Handler.Dead - | Handle l => Handler.Handle (labelHandler l) - in - Return.NonTail {cont = labelCont (cont, handler), - handler = handler} - end - | Tail => Return.Tail - in - ([], Transfer.Call {func = func, - args = vos args, - return = return}) - end - | S.Transfer.Case r => translateCase r - | S.Transfer.Goto {dst, args} => - ([], Transfer.Goto {dst = dst, args = vos args}) - | S.Transfer.Raise xs => ([], Transfer.Raise (vos xs)) - | S.Transfer.Return xs => ([], Transfer.Return (vos xs)) - | S.Transfer.Runtime {args, prim, return} => - let - datatype z = datatype Prim.Name.t - in - case Prim.name prim of - MLton_halt => - ([], - Transfer.CCall - {args = Vector.concat [Vector.new1 GCState, - vos args], - func = CFunction.halt (), - return = NONE}) - | Thread_copyCurrent => - let - val func = CFunction.copyCurrentThread () - val l = - newBlock {args = Vector.new0 (), - kind = Kind.CReturn {func = func}, - statements = Vector.new0 (), - transfer = (Goto {args = Vector.new0 (), - dst = return})} - in - ([], - Transfer.CCall - {args = Vector.concat [Vector.new1 GCState, - vos args], - func = func, - return = SOME l}) - end - | _ => Error.bug (concat - ["SsaToRssa.translateTransfer: ", - "strange Runtime prim: ", - Prim.toString prim]) - end - fun translateStatementsTransfer (statements, ss, transfer) = - let - fun loop (i, ss, t): Statement.t vector * Transfer.t = - if i < 0 - then (Vector.fromList ss, t) - else - let - fun none () = loop (i - 1, ss, t) - fun add s = loop (i - 1, s :: ss, t) - fun adds ss' = loop (i - 1, ss' @ ss, t) - val s = Vector.sub (statements, i) - in - case s of - S.Statement.Profile e => add (Statement.Profile e) - | S.Statement.Update {base, offset, value} => - (case toRtype (varType value) of - NONE => none () - | SOME t => - let - val baseOp = Base.map (base, varOp) - val ss = - update - {base = baseOp, - baseTy = varType (Base.object base), - offset = offset, - value = varOp value} - val ss = - if !Control.markCards - andalso Type.isObjptr t - then - updateCard (Base.object baseOp) - @ ss - else ss - in - adds ss - end) - | S.Statement.Bind {exp, ty, var} => - let - fun split (args, kind, - ss: Statement.t list, - make: Label.t -> Statement.t list * Transfer.t) = - let - val l = newBlock {args = args, - kind = kind, - statements = Vector.fromList ss, - transfer = t} - val (ss, t) = make l - in - loop (i - 1, ss, t) - end - fun maybeMove (f: Type.t -> Operand.t) = - case toRtype ty of - NONE => none () - | SOME ty => - add (Bind {dst = (valOf var, ty), - isMutable = false, - src = f ty}) - fun move (src: Operand.t) = maybeMove (fn _ => src) - in - case exp of - S.Exp.Const c => move (Const (convertConst c)) - | S.Exp.Inject {variant, ...} => - if isSome (toRtype ty) - then move (varOp variant) - else none () - | S.Exp.Object {args, con} => - (case toRtype ty of - NONE => none () - | SOME dstTy => - adds (object {args = args, - con = con, - dst = (valOf var, dstTy), - objectTy = ty, - oper = varOp})) - | S.Exp.PrimApp {args, prim} => - let - val prim = translatePrim prim - fun arg i = Vector.sub (args, i) - fun a i = varOp (arg i) - fun cast () = - move (Operand.cast (a 0, valOf (toRtype ty))) - fun ifIsWeakPointer (ty: S.Type.t, yes, no) = - case S.Type.dest ty of - S.Type.Weak ty => - (case toRtype ty of - NONE => no () - | SOME t => - if Type.isObjptr t - then yes t - else no ()) - | _ => Error.bug "SsaToRssa.ifIsWeakPointer" - fun arrayOrVectorLength () = - move (Offset - {base = a 0, - offset = Runtime.arrayLengthOffset (), - ty = Type.seqIndex ()}) - fun subWord s = - let - val ty = Type.word s - in - move (ArrayOffset {base = a 0, - index = a 1, - offset = Bytes.zero, - scale = Type.scale ty, - ty = ty}) - end - fun dst () = - case var of - SOME x => - Option.map (toRtype (varType x), fn t => - (x, t)) - | NONE => NONE - fun primApp prim = - add (PrimApp {dst = dst (), - prim = prim, - args = varOps args}) - datatype z = datatype Prim.Name.t - fun bumpAtomicState n = - let - val atomicState = Runtime GCField.AtomicState - val res = Var.newNoname () - val resTy = Operand.ty atomicState - in - [Statement.PrimApp - {args = (Vector.new2 - (atomicState, - (Operand.word - (WordX.fromIntInf - (IntInf.fromInt n, - WordSize.word32))))), - dst = SOME (res, resTy), - prim = Prim.wordAdd WordSize.word32}, - Statement.Move - {dst = atomicState, - src = Var {ty = resTy, var = res}}] - end - fun ccall {args: Operand.t vector, - func: CFunction.t} = - let - val formals = - case dst () of - NONE => Vector.new0 () - | SOME (x, t) => Vector.new1 (x, t) - in - split - (formals, Kind.CReturn {func = func}, ss, - fn l => - ([], - Transfer.CCall {args = args, - func = func, - return = SOME l})) - end - fun simpleCCall (f: CFunction.t) = - ccall {args = vos args, - func = f} - fun simpleCCallWithGCState (f: CFunction.t) = - ccall {args = Vector.concat - [Vector.new1 GCState, - vos args], - func = f} - fun array (numElts: Operand.t) = - let - val result = valOf (toRtype ty) - val opt = - case Type.deObjptr result of - NONE => Error.bug "SsaToRssa.array" - | SOME opt => ObjptrTycon opt - val args = - Vector.new4 (GCState, - EnsuresBytesFree, - numElts, - opt) - val func = - CFunction.gcArrayAllocate - {return = result} - in - ccall {args = args, func = func} - end - fun cpointerGet () = - maybeMove (fn ty => - ArrayOffset {base = a 0, - index = a 1, - offset = Bytes.zero, - scale = Type.scale ty, - ty = ty}) - fun cpointerSet () = - let - val src = a 2 - val ty = Operand.ty src - in - add (Move {dst = ArrayOffset {base = a 0, - index = a 1, - offset = Bytes.zero, - scale = Type.scale ty, - ty = ty}, - src = a 2}) - end - fun codegenOrC (p: Prim.t) = - let - val n = Prim.name p - in - if codegenImplementsPrim p - then primApp p - else (case Name.cFunction n of - NONE => - Error.bug (concat ["SsaToRssa.codegenOrC: ", - "unimplemented prim:", - Name.toString n]) - | SOME f => simpleCCall f) - end - datatype z = datatype Prim.Name.t - in - case Prim.name prim of - Array_array => array (a 0) - | Array_length => arrayOrVectorLength () - | Array_toVector => - let - val array = a 0 - val vecTy = valOf (toRtype ty) - val opt = - case Type.deObjptr vecTy of - NONE => Error.bug "SsaToRssa.translateStatementsTransfer: PrimApp,Array_toVector" - | SOME opt => opt - in - loop - (i - 1, - Move - {dst = (Offset - {base = array, - offset = Runtime.headerOffset (), - ty = Type.objptrHeader ()}), - src = ObjptrTycon opt} - :: Bind {dst = (valOf var, vecTy), - isMutable = false, - src = Operand.cast (array, vecTy)} - :: ss, - t) - end - | CPointer_getCPointer => cpointerGet () - | CPointer_getObjptr => cpointerGet () - | CPointer_getReal _ => cpointerGet () - | CPointer_getWord _ => cpointerGet () - | CPointer_setCPointer => cpointerSet () - | CPointer_setObjptr => cpointerSet () - | CPointer_setReal _ => cpointerSet () - | CPointer_setWord _ => cpointerSet () - | FFI f => simpleCCall f - | GC_collect => - ccall - {args = (Vector.new3 - (GCState, - Operand.zero (WordSize.csize ()), - Operand.bool true)), - func = (CFunction.gc - {maySwitchThreads = handlesSignals})} - | IntInf_toVector => cast () - | IntInf_toWord => cast () - | MLton_bogus => - (case toRtype ty of - NONE => none () - | SOME t => move (bogus t)) - | MLton_eq => - (case toRtype (varType (arg 0)) of - NONE => move (Operand.bool true) - | SOME t => - codegenOrC - (Prim.wordEqual - (WordSize.fromBits (Type.width t)))) - | MLton_installSignalHandler => none () - | MLton_share => - (case toRtype (varType (arg 0)) of - NONE => none () - | SOME t => - if not (Type.isObjptr t) - then none () - else - simpleCCallWithGCState - (CFunction.share (Operand.ty (a 0)))) - | MLton_size => - simpleCCallWithGCState - (CFunction.size (Operand.ty (a 0))) - | MLton_touch => - let - val a = arg 0 - val args = - if isSome (toRtype (varType a)) - then Vector.new1 (varOp a) - else Vector.new0 () - in - add (PrimApp {args = args, - dst = NONE, - prim = prim}) - end - | Thread_atomicBegin => - (* gcState.atomicState++; - * if (gcState.signalsInfo.signalIsPending) - * gcState.limit = gcState.limitPlusSlop - LIMIT_SLOP; - *) - split - (Vector.new0 (), Kind.Jump, ss, - fn continue => - let - datatype z = datatype GCField.t - val tmp = Var.newNoname () - val size = WordSize.cpointer () - val ty = Type.cpointer () - val statements = - Vector.new2 - (Statement.PrimApp - {args = (Vector.new2 - (Runtime LimitPlusSlop, - Operand.word - (WordX.fromIntInf - (IntInf.fromInt - (Bytes.toInt Runtime.limitSlop), - size)))), - dst = SOME (tmp, ty), - prim = Prim.cpointerSub}, - Statement.Move - {dst = Runtime Limit, - src = Var {ty = ty, var = tmp}}) - val signalIsPending = - newBlock - {args = Vector.new0 (), - kind = Kind.Jump, - statements = statements, - transfer = (Transfer.Goto - {args = Vector.new0 (), - dst = continue})} - in - (bumpAtomicState 1, - if handlesSignals - then - Transfer.ifBool - (Runtime SignalIsPending, - {falsee = continue, - truee = signalIsPending}) - else - Transfer.Goto {args = Vector.new0 (), - dst = continue}) - end) - | Thread_atomicEnd => - (* gcState.atomicState--; - * if (gcState.signalsInfo.signalIsPending - * and 0 == gcState.atomicState) - * gc; - *) - split - (Vector.new0 (), Kind.Jump, ss, - fn continue => - let - datatype z = datatype GCField.t - val func = - CFunction.gc {maySwitchThreads = true} - val returnFromHandler = - newBlock - {args = Vector.new0 (), - kind = Kind.CReturn {func = func}, - statements = Vector.new0 (), - transfer = - Goto {args = Vector.new0 (), - dst = continue}} - val args = - Vector.new3 - (GCState, - Operand.zero (WordSize.csize ()), - Operand.bool false) - val switchToHandler = - newBlock - {args = Vector.new0 (), - kind = Kind.Jump, - statements = Vector.new0 (), - transfer = - Transfer.CCall - {args = args, - func = func, - return = SOME returnFromHandler}} - val testAtomicState = - newBlock - {args = Vector.new0 (), - kind = Kind.Jump, - statements = Vector.new0 (), - transfer = - Transfer.ifZero - (Runtime AtomicState, - {falsee = continue, - truee = switchToHandler})} - in - (bumpAtomicState ~1, - if handlesSignals - then - Transfer.ifBool - (Runtime SignalIsPending, - {falsee = continue, - truee = testAtomicState}) - else - Transfer.Goto {args = Vector.new0 (), - dst = continue}) - end) - | Thread_atomicState => - move (Runtime GCField.AtomicState) - | Thread_copy => - simpleCCallWithGCState - (CFunction.copyThread ()) - | Thread_switchTo => - ccall {args = (Vector.new3 - (GCState, - a 0, - EnsuresBytesFree)), - func = CFunction.threadSwitchTo ()} - | Vector_length => arrayOrVectorLength () - | Weak_canGet => - ifIsWeakPointer - (varType (arg 0), - fn _ => - simpleCCallWithGCState - (CFunction.weakCanGet - {arg = Operand.ty (a 0)}), - fn () => move (Operand.bool false)) - | Weak_get => - ifIsWeakPointer - (varType (arg 0), - fn t => - simpleCCallWithGCState - (CFunction.weakGet - {arg = Operand.ty (a 0), - return = t}), - fn () => (case toRtype ty of - NONE => none () - | SOME t => move (bogus t))) - | Weak_new => - ifIsWeakPointer - (ty, - fn t => - let - val result = valOf (toRtype ty) - val header = - ObjptrTycon - (case Type.deObjptr result of - NONE => Error.bug "SsaToRssa.translateStatementsTransfer: PrimApp,Weak_new" - | SOME opt => opt) - val func = - CFunction.weakNew {arg = t, - return = result} - in - ccall {args = (Vector.concat - [Vector.new2 - (GCState, header), - vos args]), - func = func} - end, - none) - | Word_equal s => - codegenOrC (Prim.wordEqual - (WordSize.roundUpToPrim s)) - | Word_toIntInf => cast () - | Word_extdToWord (s1, s2, {signed}) => - if WordSize.equals (s1, s2) - then move (a 0) - else - let - val signed = - signed - andalso Bits.< (WordSize.bits s1, - WordSize.bits s2) - val s1 = WordSize.roundUpToPrim s1 - val s2 = WordSize.roundUpToPrim s2 - in - if WordSize.equals (s1, s2) - then cast () - else - codegenOrC - (Prim.wordExtdToWord - (s1, s2, {signed = signed})) - end - | WordVector_toIntInf => move (a 0) - | Word8Array_subWord s => subWord s - | Word8Array_updateWord s => - let - val ty = Type.word s - in - add (Move {dst = (ArrayOffset - {base = a 0, - index = a 1, - offset = Bytes.zero, - scale = Type.scale ty, - ty = ty}), - src = a 2}) - end - | Word8Vector_subWord s => subWord s - | World_save => - simpleCCallWithGCState - (CFunction.worldSave ()) - | _ => codegenOrC prim - end - | S.Exp.Select {base, offset} => - (case var of - NONE => none () - | SOME var => - (case toRtype ty of - NONE => none () - | SOME ty => - adds - (select - {base = Base.map (base, varOp), - baseTy = varType (Base.object base), - dst = (var, ty), - offset = offset}))) - | S.Exp.Var y => - (case toRtype ty of - NONE => none () - | SOME _ => move (varOp y)) - end - end - in - loop (Vector.length statements - 1, ss, transfer) - end - fun translateBlock (S.Block.T {label, args, statements, transfer}) = - let - val (ss, t) = translateTransfer transfer - val (ss, t) = translateStatementsTransfer (statements, ss, t) - in - Block.T {args = translateFormals args, - kind = Kind.Jump, - label = label, - statements = ss, - transfer = t} - end - fun translateFunction (f: S.Function.t): Function.t = - let - val _ = - S.Function.foreachVar (f, fn (x, t) => setVarInfo (x, {ty = t})) - val {args, blocks, name, raises, returns, start, ...} = - S.Function.dest f - val _ = - Vector.foreach - (blocks, fn S.Block.T {label, args, ...} => - setLabelInfo (label, {args = args, - cont = ref [], - handler = ref NONE})) - val blocks = Vector.map (blocks, translateBlock) - val blocks = Vector.concat [Vector.fromList (!extraBlocks), blocks] - val _ = extraBlocks := [] - fun transTypes (ts : S.Type.t vector option) - : Type.t vector option = - Option.map (ts, fn ts => Vector.keepAllMap (ts, toRtype)) - in - Function.new {args = translateFormals args, - blocks = blocks, - name = name, - raises = transTypes raises, - returns = transTypes returns, - start = start} - end - val main = - let - val start = Label.newNoname () - val bug = Label.newNoname () - in - translateFunction - (S.Function.profile - (S.Function.new - {args = Vector.new0 (), - blocks = (Vector.new2 - (S.Block.T - {label = start, - args = Vector.new0 (), - statements = globals, - transfer = (S.Transfer.Call - {args = Vector.new0 (), - func = main, - return = - S.Return.NonTail - {cont = bug, - handler = S.Handler.Dead}})}, - S.Block.T - {label = bug, - args = Vector.new0 (), - statements = Vector.new0 (), - transfer = S.Transfer.Bug})), - mayInline = false, (* doesn't matter *) - name = Func.newNoname (), - raises = NONE, - returns = NONE, - start = start}, - S.SourceInfo.main)) - end - val functions = List.revMap (functions, translateFunction) - val p = Program.T {functions = functions, - handlesSignals = handlesSignals, - main = main, - objectTypes = objectTypes} - val _ = Program.clear p - in - p - end - -end diff -Nru mlton-20130715/mlton/backend/ssa-to-rssa.sig mlton-20210117+dfsg/mlton/backend/ssa-to-rssa.sig --- mlton-20130715/mlton/backend/ssa-to-rssa.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/ssa-to-rssa.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - - -signature SSA_TO_RSSA_STRUCTS = - sig - structure Rssa: RSSA - structure Ssa: SSA2 - sharing Rssa.CFunction = Ssa.CFunction - sharing Rssa.Const = Ssa.Const - sharing Rssa.Func = Ssa.Func - sharing Rssa.Label = Ssa.Label - sharing Rssa.Prim = Ssa.Prim - sharing Rssa.ProfileExp = Ssa.ProfileExp - sharing Rssa.SourceInfo = Ssa.SourceInfo - sharing Rssa.Var = Ssa.Var - end - -signature SSA_TO_RSSA = - sig - include SSA_TO_RSSA_STRUCTS - - val convert: - Ssa.Program.t - * {codegenImplementsPrim: Rssa.Type.t Rssa.Prim.t -> bool} - -> Rssa.Program.t - end diff -Nru mlton-20130715/mlton/backend/switch.fun mlton-20210117+dfsg/mlton/backend/switch.fun --- mlton-20130715/mlton/backend/switch.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/switch.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 2002-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -26,29 +27,31 @@ orelse loop (i + 1, cur) end in - loop (1, Vector.sub (cases, 0)) + loop (1, Vector.first cases) end end datatype t = T of {cases: (WordX.t * Label.t) vector, default: Label.t option, + expect: WordX.t option, size: WordSize.t, test: Use.t} -fun layout (T {cases, default, test, ...})= +fun layout (T {cases, default, expect, test, ...})= let open Layout in seq [str "switch ", record [("test", Use.layout test), ("default", Option.layout Label.layout default), + ("expect", Option.layout (fn w => WordX.layout (w, {suffix = true})) expect), ("cases", - Vector.layout (Layout.tuple2 (WordX.layout, Label.layout)) + Vector.layout (Layout.tuple2 (fn w => WordX.layout (w, {suffix = true}), Label.layout)) cases)]] end -fun isOk (T {cases, default, size = _, test}, {checkUse, labelIsOk}): bool = +fun isOk (T {cases, default, test, ...}, {checkUse, labelIsOk}): bool = let val () = checkUse test val ty = Use.ty test @@ -63,7 +66,7 @@ {cases = cases, equals = fn ((w, _), (w', _)) => WordX.equals (w, w')}) andalso - if 0 = Vector.length cases + if Vector.isEmpty cases then isSome default else let @@ -90,4 +93,10 @@ foldLabelUse (s, (), {label = f o #1, use = fn _ => ()}) +fun replace (T {cases, default, expect, size, test}, {label, use}): t = + T {cases = Vector.map (cases, (fn (w, l) => (w, label l))), + default = Option.map (default, label), + expect = expect, + size = size, + test = use test} end diff -Nru mlton-20130715/mlton/backend/switch.sig mlton-20210117+dfsg/mlton/backend/switch.sig --- mlton-20130715/mlton/backend/switch.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/backend/switch.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 2002-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -30,6 +30,7 @@ T of {(* Cases are in increasing order of word. *) cases: (WordX.t * Label.t) vector, default: Label.t option, + expect: WordX.t option, size: WordSize.t, test: Use.t} @@ -39,4 +40,5 @@ val isOk: t * {checkUse: Use.t -> unit, labelIsOk: Label.t -> bool} -> bool val layout: t -> Layout.t + val replace: t * {label: Label.t -> Label.t, use: Use.t -> Use.t} -> t end diff -Nru mlton-20130715/mlton/call-main.sml mlton-20210117+dfsg/mlton/call-main.sml --- mlton-20130715/mlton/call-main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/call-main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/closure-convert/abstract-value.fun mlton-20210117+dfsg/mlton/closure-convert/abstract-value.fun --- mlton-20130715/mlton/closure-convert/abstract-value.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/closure-convert/abstract-value.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -247,7 +248,7 @@ {isFirstOrder = false, make = let fun mutable mt = - let val make = #make (Vector.sub (vs, 0)) + let val make = #make (Vector.first vs) in fn () => new (Unify (mt, make ())) end in if Tycon.equals (tycon, Tycon.reff) @@ -303,6 +304,12 @@ | Unify (_, v) => v | _ => Error.bug "AbstractValue.deArray" +fun deVector v = + case tree v of + Type t => fromType (Type.deVector t) + | Unify (_, v) => v + | _ => Error.bug "AbstractValue.deVector" + fun lambda (l: Sxml.Lambda.t, t: Type.t): t = new (Lambdas (LambdaNode.lambda l), t) @@ -406,15 +413,69 @@ if n = 3 then (arg 0, arg 1, arg 2) else Error.bug "AbstractValue.primApply.threeArgs" - datatype z = datatype Prim.Name.t + fun fiveArgs () = + if n = 5 + then (arg 0, arg 1, arg 2, arg 3, arg 4) + else Error.bug "AbstractValue.primApply.fiveArgs" in - case Prim.name prim of - Array_sub => + case prim of + Prim.Array_array => + let + val r = result () + val _ = + case dest r of + Array x => Vector.foreach (args, fn arg => coerce {from = arg, to = x}) + | Type _ => () + | _ => typeError () + in + r + end + | Prim.Array_copyArray => + let val (da, _, sa, _, _) = fiveArgs () + in (case (dest da, dest sa) of + (Array dx, Array sx) => unify (dx, sx) + | (Type _, Type _) => () + | _ => typeError () + ; result ()) + end + | Prim.Array_copyVector => + let val (da, _, sa, _, _) = fiveArgs () + in (case (dest da, dest sa) of + (Array dx, Vector sx) => unify (dx, sx) + | (Type _, Type _) => () + | _ => typeError () + ; result ()) + end + | Prim.Array_toArray => + let val r = result () + in (case (dest (oneArg ()), dest r) of + (Type _, Type _) => () + | (Array x, Array y) => + (* Can't do a coercion here because that would imply + * walking over each element of the array and coercing it. + *) + unify (x, y) + | _ => typeError ()) + ; r + end + | Prim.Array_toVector => + let val r = result () + in (case (dest (oneArg ()), dest r) of + (Type _, Type _) => () + | (Array x, Vector y) => + (* Can't do a coercion here because that would imply + * walking over each element of the array and coercing it. + *) + unify (x, y) + | _ => typeError ()) + ; r + end + | Prim.Array_sub => (case dest (#1 (twoArgs ())) of Array x => x | Type _ => result () | _ => typeError ()) - | Array_update => + | Prim.Array_update => let val (a, _, x) = threeArgs () in (case dest a of Array x' => coerce {from = x, to = x'} (* unify (x, x') *) @@ -422,13 +483,13 @@ | _ => typeError ()) ; result () end - | MLton_deserialize => serialValue resultTy - | MLton_serialize => + | Prim.MLton_deserialize => serialValue resultTy + | Prim.MLton_serialize => let val arg = oneArg () in coerce {from = arg, to = serialValue (ty arg)} ; result () end - | Ref_assign => + | Prim.Ref_assign => let val (r, x) = twoArgs () in (case dest r of Ref x' => coerce {from = x, to = x'} (* unify (x, x') *) @@ -436,11 +497,11 @@ | _ => typeError ()) ; result () end - | Ref_deref => (case dest (oneArg ()) of - Ref v => v - | Type _ => result () - | _ => typeError ()) - | Ref_ref => + | Prim.Ref_deref => (case dest (oneArg ()) of + Ref v => v + | Type _ => result () + | _ => typeError ()) + | Prim.Ref_ref => let val r = result () val _ = @@ -451,29 +512,28 @@ in r end - | Array_toVector => - let val r = result () - in (case (dest (oneArg ()), dest r) of - (Type _, Type _) => () - | (Array x, Vector y) => - (* Can't do a coercion here because that would imply - * walking over each element of the array and coercing it. - *) - unify (x, y) - | _ => typeError ()) - ; r - end - | Vector_sub => + | Prim.Vector_sub => (case dest (#1 (twoArgs ())) of Vector x => x | Type _ => result () | _ => typeError ()) - | Weak_get => + | Prim.Vector_vector => + let + val r = result () + val _ = + case dest r of + Vector x => Vector.foreach (args, fn arg => coerce {from = arg, to = x}) + | Type _ => () + | _ => typeError () + in + r + end + | Prim.Weak_get => (case dest (oneArg ()) of Weak v => v | Type _ => result () | _ => typeError ()) - | Weak_new => + | Prim.Weak_new => let val r = result () val _ = diff -Nru mlton-20130715/mlton/closure-convert/abstract-value.sig mlton-20210117+dfsg/mlton/closure-convert/abstract-value.sig --- mlton-20130715/mlton/closure-convert/abstract-value.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/closure-convert/abstract-value.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -50,6 +50,7 @@ val ssaType: t -> Ssa.Type.t option ref val deArray: t -> t val deRef: t -> t + val deVector: t -> t val deWeak: t -> t val dest: t -> dest (* Destroy info associated with Sxml.Type used to keep track of arrows. *) diff -Nru mlton-20130715/mlton/closure-convert/closure-convert.fun mlton-20210117+dfsg/mlton/closure-convert/closure-convert.fun --- mlton-20130715/mlton/closure-convert/closure-convert.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/closure-convert/closure-convert.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2005, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -119,7 +120,7 @@ "shrinker didn't completely simplify"]) else let - val ss = Block.statements (Vector.sub (blocks, 0)) + val ss = Block.statements (Vector.first blocks) val vs = case Ssa.Statement.exp (Vector.last ss) of Ssa.Exp.Tuple vs => @@ -178,7 +179,12 @@ ty: Type.t option ref } - fun frees (T {frees, ...}) = !frees + local + fun mk sel (T r) = sel r + in + val frees = ! o mk #frees + val name = mk #name + end end structure VarInfo = @@ -207,7 +213,7 @@ Unit.layout) fun closureConvert - (program as Sxml.Program.T {datatypes, body, overflow}): Ssa.Program.t = + (program as Sxml.Program.T {datatypes, body}): Ssa.Program.t = let val {get = conArg: Con.t -> Value.t option, set = setConArg, ...} = Property.getSetOnce (Con.plist, @@ -328,7 +334,7 @@ | (SOME (x, _), SOME v) => newVar (x, v) | _ => Error.bug "ClosureConvert.loopBind: Case" val _ = Cases.foreach' (cases, branch, handlePat) - val _ = Option.app (default, branch o #1) + val _ = Option.app (default, branch) in () end | ConApp {con, arg, ...} => @@ -392,12 +398,10 @@ str " ", Value.layout (value x)] end))) - val overflow = valOf overflow val _ = Control.trace (Control.Pass, "free variables") LambdaFree.lambdaFree {program = program, - overflow = overflow, varInfo = fn x => let val {frees, status, ...} = varInfo x in {frees = frees, status = status} end, @@ -437,7 +441,7 @@ fun unary make v = if 1 = Vector.length v - then make (Vector.sub (v, 0)) + then make (Vector.first v) else Error.bug "ClosureConvert.convertType.unary: bogus application of unary tycon" val tycons = [(Tycon.arrow, fn _ => Error.bug "ClosureConvert.convertType.array"), @@ -506,8 +510,13 @@ val cons = Vector.fromListMap (Lambdas.toList ls, fn l => - {lambda = Value.Lambda.dest l, - con = Con.newString "Env"}) + let + val lambda = Value.Lambda.dest l + val name = LambdaInfo.name (lambdaInfo lambda) + val con = Con.newString (Func.originalName name ^ "Env") + in + {lambda = lambda, con = con} + end) val ty = Type.datatypee tycon val info = {ty = ty, cons = cons} val _ = r := SOME info @@ -657,8 +666,8 @@ val convertVarExp = convertVar o SvarExp.var val handlesSignals = Sexp.hasPrim (body, fn p => - case Prim.name p of - Prim.Name.MLton_installSignalHandler => true + case p of + Prim.MLton_installSignalHandler => true | _ => false) (*------------------------------------*) (* apply *) @@ -797,7 +806,7 @@ then (binds, ac) else let - val {lambda, var, ...} = Vector.sub (decs, 0) + val {lambda, var, ...} = Vector.first decs val info = lambdaInfo lambda val tupleVar = Var.newString "tuple" val tupleTy = lambdaInfoType info @@ -848,11 +857,11 @@ val (default, ac) = case default of NONE => (NONE, ac) - | SOME (e, _) => let - val (e, ac) = convertJoin (e, ac) - in - (SOME e, ac) - end + | SOME e => let + val (e, ac) = convertJoin (e, ac) + in + (SOME e, ac) + end fun doCases (cases, finish, make) = let val (cases, ac) = @@ -936,7 +945,6 @@ | SprimExp.PrimApp {prim, targs, args} => let val prim = Prim.map (prim, convertType) - open Prim.Name fun arg i = Vector.sub (args, i) val v1 = Vector.new1 val v2 = Vector.new2 @@ -947,124 +955,133 @@ targs = targs, ty = ty} in - if Prim.mayOverflow prim - then simple (Dexp.arith - {args = Vector.map (args, convertVarExp), - overflow = Dexp.raisee (convertVar overflow), - prim = prim, - ty = ty}) - else - let - datatype z = datatype Prim.Name.t - in - simple - (case Prim.name prim of - Array_update => - let - val a = varExpInfo (arg 0) - val y = varExpInfo (arg 2) - val v = Value.deArray (VarInfo.value a) - in - primApp (v1 (valueType v), - v3 (convertVarInfo a, - convertVarExp (arg 1), - coerce (convertVarInfo y, - VarInfo.value y, v))) - end - | MLton_eq => - let - val a0 = varExpInfo (arg 0) - val a1 = varExpInfo (arg 1) - fun doit () = - primApp (v1 (valueType (VarInfo.value a0)), - v2 (convertVarInfo a0, - convertVarInfo a1)) - in - case (Value.dest (VarInfo.value a0), - Value.dest (VarInfo.value a1)) of - (Value.Lambdas l, Value.Lambdas l') => - if Lambdas.equals (l, l') - then doit () - else Dexp.falsee - | _ => doit () - end - | MLton_equal => - let - val a0 = varExpInfo (arg 0) - val a1 = varExpInfo (arg 1) - fun doit () = - primApp (v1 (valueType (VarInfo.value a0)), - v2 (convertVarInfo a0, - convertVarInfo a1)) - in - case (Value.dest (VarInfo.value a0), - Value.dest (VarInfo.value a1)) of - (Value.Lambdas l, Value.Lambdas l') => - if Lambdas.equals (l, l') - then doit () - else Dexp.falsee - | _ => doit () - end - | MLton_handlesSignals => - if handlesSignals - then Dexp.truee - else Dexp.falsee - | Ref_assign => - let - val r = varExpInfo (arg 0) - val y = varExpInfo (arg 1) - val v = Value.deRef (VarInfo.value r) - in - primApp (v1 (valueType v), - v2 (convertVarInfo r, - coerce (convertVarInfo y, - VarInfo.value y, v))) - end - | Ref_ref => - let - val y = varExpInfo (arg 0) - val v = Value.deRef v - in - primApp (v1 (valueType v), - v1 (coerce (convertVarInfo y, - VarInfo.value y, v))) - end - | MLton_serialize => - let - val y = varExpInfo (arg 0) - val v = - Value.serialValue (Vector.sub (targs, 0)) - in - primApp (v1 (valueType v), - v1 (coerce (convertVarInfo y, - VarInfo.value y, v))) - end - | Weak_new => - let - val y = varExpInfo (arg 0) - val v = Value.deWeak v - in - primApp (v1 (valueType v), - v1 (coerce (convertVarInfo y, - VarInfo.value y, v))) - end - | _ => - let - val args = Vector.map (args, varExpInfo) - in - primApp - (Prim.extractTargs - (prim, - {args = Vector.map (args, varInfoType), - result = ty, - typeOps = {deArray = Type.deArray, - deArrow = fn _ => Error.bug "ClosureConvert.convertPrimExp: deArrow", - deRef = Type.deRef, - deVector = Type.deVector, - deWeak = Type.deWeak}}), - Vector.map (args, convertVarInfo)) - end) - end + simple + (case prim of + Prim.Array_array => + let + val ys = Vector.map (args, varExpInfo) + val v = Value.deArray v + in + primApp (v1 (valueType v), + Vector.map (ys, fn y => + coerce (convertVarInfo y, + VarInfo.value y, v))) + end + | Prim.Array_update => + let + val a = varExpInfo (arg 0) + val y = varExpInfo (arg 2) + val v = Value.deArray (VarInfo.value a) + in + primApp (v1 (valueType v), + v3 (convertVarInfo a, + convertVarExp (arg 1), + coerce (convertVarInfo y, + VarInfo.value y, v))) + end + | Prim.MLton_eq => + let + val a0 = varExpInfo (arg 0) + val a1 = varExpInfo (arg 1) + fun doit () = + primApp (v1 (valueType (VarInfo.value a0)), + v2 (convertVarInfo a0, + convertVarInfo a1)) + in + case (Value.dest (VarInfo.value a0), + Value.dest (VarInfo.value a1)) of + (Value.Lambdas l, Value.Lambdas l') => + if Lambdas.equals (l, l') + then doit () + else Dexp.falsee + | _ => doit () + end + | Prim.MLton_equal => + let + val a0 = varExpInfo (arg 0) + val a1 = varExpInfo (arg 1) + fun doit () = + primApp (v1 (valueType (VarInfo.value a0)), + v2 (convertVarInfo a0, + convertVarInfo a1)) + in + case (Value.dest (VarInfo.value a0), + Value.dest (VarInfo.value a1)) of + (Value.Lambdas l, Value.Lambdas l') => + if Lambdas.equals (l, l') + then doit () + else Dexp.falsee + | _ => doit () + end + | Prim.MLton_handlesSignals => + if handlesSignals + then Dexp.truee + else Dexp.falsee + | Prim.Ref_assign => + let + val r = varExpInfo (arg 0) + val y = varExpInfo (arg 1) + val v = Value.deRef (VarInfo.value r) + in + primApp (v1 (valueType v), + v2 (convertVarInfo r, + coerce (convertVarInfo y, + VarInfo.value y, v))) + end + | Prim.Ref_ref => + let + val y = varExpInfo (arg 0) + val v = Value.deRef v + in + primApp (v1 (valueType v), + v1 (coerce (convertVarInfo y, + VarInfo.value y, v))) + end + | Prim.MLton_serialize => + let + val y = varExpInfo (arg 0) + val v = + Value.serialValue (Vector.first targs) + in + primApp (v1 (valueType v), + v1 (coerce (convertVarInfo y, + VarInfo.value y, v))) + end + | Prim.Vector_vector => + let + val ys = Vector.map (args, varExpInfo) + val v = Value.deVector v + in + primApp (v1 (valueType v), + Vector.map (ys, fn y => + coerce (convertVarInfo y, + VarInfo.value y, v))) + end + | Prim.Weak_new => + let + val y = varExpInfo (arg 0) + val v = Value.deWeak v + in + primApp (v1 (valueType v), + v1 (coerce (convertVarInfo y, + VarInfo.value y, v))) + end + | _ => + let + val args = Vector.map (args, varExpInfo) + in + primApp + (Prim.extractTargs + (prim, + {args = Vector.map (args, varInfoType), + result = ty, + typeOps = {deArray = Type.deArray, + deArrow = fn _ => Error.bug "ClosureConvert.convertPrimExp: deArrow", + deRef = Type.deRef, + deVector = Type.deVector, + deWeak = Type.deWeak}}), + Vector.map (args, convertVarInfo)) + end) end | SprimExp.Profile e => simple (Dexp.profile e) | SprimExp.Raise {exn, ...} => diff -Nru mlton-20130715/mlton/closure-convert/closure-convert.sig mlton-20210117+dfsg/mlton/closure-convert/closure-convert.sig --- mlton-20130715/mlton/closure-convert/closure-convert.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/closure-convert/closure-convert.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/closure-convert/globalize.fun mlton-20210117+dfsg/mlton/closure-convert/globalize.fun --- mlton-20130715/mlton/closure-convert/globalize.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/closure-convert/globalize.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -18,8 +19,8 @@ let val noConts = not (Exp.hasPrim (body, fn p => - case Prim.name p of - Prim.Name.Thread_switchTo => true + case p of + Prim.Thread_switchTo => true | _ => false)) local val {get: Tycon.t -> bool, set, destroy} = @@ -82,7 +83,7 @@ loopExp (e, once) andalso b) val once' = Option.fold (default, once', - fn ((e, _), b) => + fn (e, b) => loopExp (e, once) andalso b) in (false, once') end @@ -110,19 +111,19 @@ * there. *) andalso - (case Prim.name prim of - Prim.Name.MLton_equal => false - | Prim.Name.MLton_hash => false + (case prim of + Prim.MLton_equal => false + | Prim.MLton_hash => false | _ => true)) orelse (once andalso - (case Prim.name prim of - Prim.Name.Ref_ref => typeIsSmall ty + (case prim of + Prim.Ref_ref => typeIsSmall ty | _ => false))) val once = once andalso - (case Prim.name prim of - Prim.Name.Thread_copyCurrent => false + (case prim of + Prim.Thread_copyCurrent => false | _ => true) in (global, once) @@ -140,7 +141,7 @@ then () else let - val {lambda, ...} = Vector.sub (decs, 0) + val {lambda, ...} = Vector.first decs in if Vector.forall (lambdaFree lambda, varIsGlobal) then Vector.foreach (decs, makeGlobal o #var) diff -Nru mlton-20130715/mlton/closure-convert/globalize.sig mlton-20210117+dfsg/mlton/closure-convert/globalize.sig --- mlton-20130715/mlton/closure-convert/globalize.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/closure-convert/globalize.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/closure-convert/lambda-free.fun mlton-20210117+dfsg/mlton/closure-convert/lambda-free.fun --- mlton-20130715/mlton/closure-convert/lambda-free.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/closure-convert/lambda-free.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -21,7 +22,6 @@ datatype status = datatype Status.t fun lambdaFree {program = Program.T {body, ...}, - overflow: Var.t, varInfo: Var.t -> {frees: Var.t list ref ref, status: Status.t ref}, lambdaInfo: Lambda.t -> {frees: Var.t vector ref, @@ -147,7 +147,7 @@ App {func, arg} => (varExp (func, s); varExp (arg, s)) | Case {test, cases, default} => (varExp (test, s) - ; Option.app (default, fn (e, _) => exp (e, s)) + ; Option.app (default, fn e => exp (e, s)) ; Cases.foreach' (cases, fn e => exp (e, s), fn Pat.T {arg, ...} => Option.app (arg, fn (x, _) => bind (x, s)))) @@ -159,11 +159,7 @@ let val xs = lambda l in setFree (l, xs); vars (xs, s) end - | PrimApp {prim, args, ...} => - (if Prim.mayOverflow prim - then var (overflow, s) - else (); - varExps (args, s)) + | PrimApp {args, ...} => varExps (args, s) | Profile _ => () | Raise {exn, ...} => varExp (exn, s) | Select {tuple, ...} => varExp (tuple, s) diff -Nru mlton-20130715/mlton/closure-convert/lambda-free.sig mlton-20210117+dfsg/mlton/closure-convert/lambda-free.sig --- mlton-20130715/mlton/closure-convert/lambda-free.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/closure-convert/lambda-free.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -42,7 +42,6 @@ *) val lambdaFree: {program: Program.t, - overflow: Var.t, varInfo: Var.t -> {frees: Var.t list ref ref, status: Status.t ref}, lambdaInfo: Lambda.t -> {frees: Var.t vector ref, diff -Nru mlton-20130715/mlton/closure-convert/sources.cm mlton-20210117+dfsg/mlton/closure-convert/sources.cm --- mlton-20130715/mlton/closure-convert/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/closure-convert/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -2,11 +2,11 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library functor ClosureConvert diff -Nru mlton-20130715/mlton/closure-convert/sources.mlb mlton-20210117+dfsg/mlton/closure-convert/sources.mlb --- mlton-20130715/mlton/closure-convert/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/closure-convert/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-allocate-registers.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-allocate-registers.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-allocate-registers.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-allocate-registers.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 1999-2010 Matthew Fluet. +(* Copyright (C) 2010,2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -3824,7 +3824,7 @@ assembly = AppendList.empty, registerAllocation = registerAllocation} | (_, NONE, SOME memIndex) (* label + index => use lea if PIC *) - => if !Control.positionIndependent = false + => if not (!Control.Native.pic) then {disp = SOME disp, register = NONE, assembly = AppendList.empty, @@ -4315,14 +4315,14 @@ registerAllocation = registerAllocation} in {assembly = AppendList.appends - [if !Control.Native.commented > 3 + [if !Control.codegenComments > 3 then AppendList.cons ((Assembly.comment "pre begin:"), (toComments ra)) else AppendList.empty, assembly_commit_xmmregisters, assembly_commit_registers, - if !Control.Native.commented > 3 + if !Control.codegenComments > 3 then AppendList.cons ((Assembly.comment "pre end:"), (toComments registerAllocation)) @@ -4610,7 +4610,7 @@ registerAllocation = registerAllocation} in {assembly = AppendList.appends - [if !Control.Native.commented > 3 + [if !Control.codegenComments > 3 then AppendList.cons ((Assembly.comment "post begin:"), (toComments ra)) @@ -4618,7 +4618,7 @@ assembly_commit_xmmregisters, assembly_commit_registers, assembly_dead_registers, - if !Control.Native.commented > 3 + if !Control.codegenComments > 3 then AppendList.cons ((Assembly.comment "post end:"), (toComments registerAllocation)) @@ -6380,7 +6380,7 @@ = let val _ = setRA(id, {registerAllocation = registerAllocation}) in - {assembly = if !Control.Native.commented > 2 + {assembly = if !Control.codegenComments > 2 then (toComments registerAllocation) else AppendList.empty, registerAllocation = registerAllocation} @@ -10313,19 +10313,19 @@ val assembly'' = AppendList.appends - [if !Control.Native.commented > 1 + [if !Control.codegenComments > 1 then AppendList.fromList [Assembly.comment (String.make (60, #"*")), (Assembly.comment (Directive.toString d))] else AppendList.empty, - if !Control.Native.commented > 4 + if !Control.codegenComments > 4 then AppendList.fromList (Liveness.toComments info) else AppendList.empty, assembly', - if !Control.Native.commented > 5 + if !Control.codegenComments > 5 then (RegisterAllocation.toComments registerAllocation) else AppendList.empty] @@ -10356,19 +10356,19 @@ val assembly'' = AppendList.appends - [if !Control.Native.commented > 1 + [if !Control.codegenComments > 1 then AppendList.fromList [Assembly.comment (String.make (60, #"*")), (Assembly.comment (Instruction.toString i))] else AppendList.empty, - if !Control.Native.commented > 4 + if !Control.codegenComments > 4 then AppendList.fromList (Liveness.toComments info) else AppendList.empty, assembly', - if !Control.Native.commented > 5 + if !Control.codegenComments > 5 then (RegisterAllocation.toComments registerAllocation) else AppendList.empty] @@ -10380,7 +10380,7 @@ end) val assembly = AppendList.toList assembly - val assembly = if !Control.Native.commented > 1 + val assembly = if !Control.codegenComments > 1 then (Assembly.comment (String.make (60, #"&")):: Assembly.comment diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-allocate-registers.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-allocate-registers.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-allocate-registers.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-allocate-registers.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-codegen.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-codegen.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-codegen.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-codegen.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009-2010 Matthew Fluet. +(* Copyright (C) 2009-2010,2014,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -62,8 +62,7 @@ structure amd64MLton = amd64MLton) open amd64 - fun output {program as Machine.Program.T {chunks, frameLayouts, handlesSignals, - main, ...}, + fun output {program as Machine.Program.T {chunks, handlesSignals, main, ...}, outputC: unit -> {file: File.t, print: string -> unit, done: unit -> unit}, @@ -76,18 +75,27 @@ * hold the C stack pointer. We only need to do this in programs * that handle signals. *) - handlesSignals andalso let open Control.Target in !os = Cygwin end + let open Control.Target in !os = OpenBSD orelse (handlesSignals andalso !os = Cygwin) end val makeC = outputC val makeS = outputS - val Machine.Program.T {profileInfo, ...} = program - val profileInfo = - case profileInfo of - NONE => Machine.ProfileInfo.empty - | SOME pi => pi - val {newProfileLabel, delProfileLabel, getProfileInfo} = - Machine.ProfileInfo.modify profileInfo + val (newProfileLabel, delProfileLabel, getSourceMaps) = + let + val Machine.Program.T {sourceMaps, ...} = program + in + case sourceMaps of + NONE => (fn _ => Error.bug "amd64Codegen.newProfileLabel", + fn _ => Error.bug "amd64Codegen.delProfileLabel", + fn () => NONE) + | SOME sm => + let + val {newProfileLabel, delProfileLabel, getSourceMaps} = + Machine.SourceMaps.modify sm + in + (newProfileLabel, delProfileLabel, SOME o getSourceMaps) + end + end (* C specific *) fun outputC () @@ -95,30 +103,28 @@ local val Machine.Program.T {chunks, - frameLayouts, + frameInfos, frameOffsets, + globals, handlesSignals, - intInfs, main, maxFrameSize, objectTypes, - reals, - vectors, ...} = + staticHeaps, ...} = program in val program = Machine.Program.T {chunks = chunks, - frameLayouts = frameLayouts, + frameInfos = frameInfos, frameOffsets = frameOffsets, + globals = globals, handlesSignals = handlesSignals, - intInfs = intInfs, main = main, maxFrameSize = maxFrameSize, objectTypes = objectTypes, - profileInfo = SOME (getProfileInfo ()), - reals = reals, - vectors = vectors} + sourceMaps = getSourceMaps (), + staticHeaps = staticHeaps} end val {print, done, ...} = makeC () val additionalMainArgs = @@ -139,8 +145,8 @@ let val m = List.fold - (chunks, ~1, fn (Machine.Chunk.T {regMax, ...}, max) => - Int.max (max, regMax t)) + (chunks, ~1, fn (Machine.Chunk.T {tempsMax, ...}, max) => + Int.max (max, tempsMax t)) val m = m + 1 in print (concat ["PRIVATE ", CType.toString t, @@ -358,12 +364,6 @@ val liveInfo = amd64Liveness.LiveInfo.newLiveInfo () val jumpInfo = amd64JumpInfo.newJumpInfo () - fun frameInfoToAMD64 (Machine.FrameInfo.T {frameLayoutsIndex, ...}) = - amd64.FrameInfo.T - {frameLayoutsIndex = frameLayoutsIndex, - size = Bytes.toInt (#size (Vector.sub (frameLayouts, - frameLayoutsIndex)))} - fun outputChunk (chunk as Machine.Chunk.T {blocks, chunkLabel, ...}, print) = let @@ -378,7 +378,6 @@ val {chunk} = amd64Translate.translateChunk {chunk = chunk, - frameInfoToAMD64 = frameInfoToAMD64, liveInfo = liveInfo} val chunk : amd64.Chunk.t diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-codegen.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-codegen.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-codegen.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-codegen.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-entry-transfer.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-entry-transfer.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-entry-transfer.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-entry-transfer.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -67,7 +68,7 @@ | Transfer.CCall {return, func, ...} => (case return of NONE => true - | SOME l => isCReturn l func))) + | SOME {return, ...} => isCReturn return func))) val _ = destroy () val _ = if b then () else List.foreach(blocks, Block.printBlock) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-entry-transfer.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-entry-transfer.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-entry-transfer.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-entry-transfer.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2012 Matthew Fluet. +(* Copyright (C) 2012,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -503,10 +503,10 @@ open Layout in val rec layoutU - = fn Word w => WordX.layout w + = fn Word w => WordX.layout (w, {suffix = false}) | Label l => Label.layout l | LabelPlusWord (l, w) - => paren (seq [Label.layout l, str "+", WordX.layout w]) + => paren (seq [Label.layout l, str "+", WordX.layout (w, {suffix = false})]) and layout = fn T {immediate, ...} => layoutU immediate end @@ -587,12 +587,12 @@ then construct (LabelPlusWord (l, w)) else Error.bug "amd64.Immediate.labelPlusWord" - val int' = fn (i, ws) => word (WordX.fromIntInf (IntInf.fromInt i, ws)) + val int' = fn (i, ws) => word (WordX.fromInt (i, ws)) val int = fn i => int' (i, WordSize.word64) val zero = int 0 val labelPlusInt = fn (l, i) => - labelPlusWord (l, WordX.fromIntInf (IntInf.fromInt i, WordSize.word64)) + labelPlusWord (l, WordX.fromInt (i, WordSize.word64)) val deLabel = fn T {immediate = Label l, ...} => SOME l @@ -695,7 +695,7 @@ struct structure Class = struct - val counter = Counter.new 0 + val nextCounter = Counter.generator 0 datatype t = T of {counter: int, name: string} @@ -709,7 +709,7 @@ fun new {name} = let - val class = T {counter = Counter.next counter, + val class = T {counter = nextCounter (), name = name} in class @@ -848,7 +848,7 @@ => utilized local - val counter = Counter.new 0 + val nextCounter = Counter.generator 0 val table: t HashSet.t ref = ref (HashSet.new {hash = hash}) in val construct @@ -863,7 +863,7 @@ fn () => T {memloc = memloc, hash = hash, plist = PropertyList.new (), - counter = Counter.next counter, + counter = nextCounter (), utilized = utilizedU memloc}) end @@ -1160,14 +1160,13 @@ end local - val num : int ref = ref 0 + val nextNum = Counter.generator 0 in - val temp = fn {size} => (Int.inc num; - imm {base = Immediate.zero, - index = Immediate.int (!num), - scale = Scale.One, - size = size, - class = Class.Temp}) + val temp = fn {size} => imm {base = Immediate.zero, + index = Immediate.int (nextNum ()), + scale = Scale.One, + size = size, + class = Class.Temp} end (* @@ -2653,16 +2652,11 @@ struct structure Id = struct - val num : int ref = ref 0 + val nextNum = Counter.generator 0 datatype t = T of {num : int, plist: PropertyList.t} - fun new () = let - val id = T {num = !num, - plist = PropertyList.new ()} - val _ = Int.inc num - in - id - end + fun new () = T {num = nextNum (), + plist = PropertyList.new ()} val plist = fn T {plist, ...} => plist val layout = let @@ -3371,13 +3365,13 @@ structure FrameInfo = struct datatype t = T of {size: int, - frameLayoutsIndex: int} + frameInfosIndex: int} - fun toString (T {size, frameLayoutsIndex}) + fun toString (T {size, frameInfosIndex}) = concat ["{", "size = ", Int.toString size, ", ", - "frameLayoutsIndex = ", - Int.toString frameLayoutsIndex, "}"] + "frameInfosIndex = ", + Int.toString frameInfosIndex, "}"] end structure Entry = @@ -3448,6 +3442,8 @@ NONE => "" | SOME f => FrameInfo.toString f] + val layout = Layout.str o toString + val uses_defs_kills = fn CReturn {dsts, func, ...} => let @@ -3583,9 +3579,9 @@ | Return of {live: MemLocSet.t} | Raise of {live: MemLocSet.t} | CCall of {args: (Operand.t * Size.t) list, - frameInfo: FrameInfo.t option, func: RepType.t CFunction.t, - return: Label.t option} + return: {return: Label.t, + size: int option} option} val toString = fn Goto {target} @@ -3604,7 +3600,7 @@ (concat o Cases.mapToList) (cases, fn (w, target) => concat[" (", - WordX.toString w, + WordX.toString (w, {suffix = true}), " -> GOTO ", Label.toString target, ")"]) ^ @@ -3670,9 +3666,17 @@ (List.map(args, fn (oper,_) => Operand.toString oper), ", "), ") <", - Option.toString Label.toString return, + Option.toString (fn {return, size} => + concat ["(", + Label.toString return, + ", ", + Option.toString Int.toString size, + ")"]) + return, ">"] + val layout = Layout.str o toString + val uses_defs_kills = fn Switch {test, ...} => {uses = [test], defs = [], kills = []} @@ -3700,7 +3704,7 @@ | CCall {return, ...} => (case return of NONE => [] - | SOME l => [l]) + | SOME {return, ...} => [return]) | _ => [] val live @@ -3715,13 +3719,12 @@ => Switch {test = replacer {use = true, def = false} test, cases = cases, default = default} - | CCall {args, frameInfo, func, return} + | CCall {args, func, return} => CCall {args = List.map(args, fn (oper,size) => (replacer {use = true, def = false} oper, size)), - frameInfo = frameInfo, func = func, return = return} | transfer => transfer @@ -3808,6 +3811,26 @@ else "NONE"); print "\n") + fun layout (T {entry, profileLabel, statements, transfer, ...}) + = let + open Layout + in + align [seq [Entry.layout entry, + str ": ", + record [("profileLabel", + Option.layout ProfileLabel.layout + profileLabel)], + str "\n"], + indent (align + [align (List.map (statements, + fn s => seq [Assembly.layout s, + str "\n"])), + Transfer.layout transfer], + 4)] + end + + fun layouts (block, output' : Layout.t -> unit) = output' (layout block) + val compress': t' list -> t' list = fn l => List.fold @@ -3865,5 +3888,8 @@ struct datatype t = T of {data: Assembly.t list, blocks: Block.t list} + + fun layouts (T {blocks, ...}, output: Layout.t -> unit) + = List.foreach (blocks, fn block => Block.layouts (block, output)) end end diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-generate-transfers.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-generate-transfers.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-generate-transfers.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-generate-transfers.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -27,7 +27,7 @@ val ones : int * WordSize.t -> WordX.t = fn (i, ws) => (WordX.notb o WordX.lshift) (WordX.allOnes ws, - WordX.fromIntInf (IntInf.fromInt i, ws)) + WordX.fromInt (i, ws)) val tracerTop = amd64.tracerTop @@ -579,7 +579,7 @@ | CReturn {dsts, frameInfo, func, label} => let fun getReturn () = - if Vector.length dsts = 0 + if Vector.isEmpty dsts then AppendList.empty else let val srcs = @@ -607,7 +607,7 @@ case frameInfo of SOME fi => let - val FrameInfo.T {size, frameLayoutsIndex} + val FrameInfo.T {size, frameInfosIndex} = fi val finish = AppendList.appends @@ -634,11 +634,11 @@ [Assembly.pseudoop_p2align (Immediate.int 4, NONE, NONE), Assembly.pseudoop_long - [Immediate.int frameLayoutsIndex], + [Immediate.int frameInfosIndex], Assembly.label label], AppendList.fromList (ProfileLabel.toAssemblyOpt profileLabel), - if CFunction.maySwitchThreads func + if CFunction.maySwitchThreadsTo func then (* entry from far assumptions *) farEntry finish else (* near entry & live transfer assumptions *) @@ -684,7 +684,7 @@ (farEntry AppendList.empty)] | Cont {label, frameInfo = FrameInfo.T {size, - frameLayoutsIndex}, + frameInfosIndex}, ...} => AppendList.appends @@ -692,7 +692,7 @@ [Assembly.pseudoop_p2align (Immediate.int 4, NONE, NONE), Assembly.pseudoop_long - [Immediate.int frameLayoutsIndex], + [Immediate.int frameInfosIndex], Assembly.label label], AppendList.fromList (ProfileLabel.toAssemblyOpt profileLabel), @@ -714,7 +714,7 @@ profileStackTopCommit) end))] | Handler {frameInfo = (FrameInfo.T - {frameLayoutsIndex, size}), + {frameInfosIndex, size}), label, ...} => AppendList.appends @@ -722,7 +722,7 @@ [Assembly.pseudoop_p2align (Immediate.int 4, NONE, NONE), Assembly.pseudoop_long - [Immediate.int frameLayoutsIndex], + [Immediate.int frameInfosIndex], Assembly.label label], AppendList.fromList (ProfileLabel.toAssemblyOpt profileLabel), @@ -745,11 +745,11 @@ end))] val pre = AppendList.appends - [if !Control.Native.commented > 1 + [if !Control.codegenComments > 1 then AppendList.single (Assembly.comment (Entry.toString entry)) else AppendList.empty, - if !Control.Native.commented > 2 + if !Control.codegenComments > 2 then AppendList.single (Assembly.comment (LiveSet.fold @@ -803,7 +803,7 @@ and effectDefault (gef as GEF {fall,...}) {label, transfer} : Assembly.t AppendList.t = AppendList.append - (if !Control.Native.commented > 1 + (if !Control.codegenComments > 1 then AppendList.single (Assembly.comment (Transfer.toString transfer)) @@ -1145,19 +1145,15 @@ {target = amd64MLton.gcState_stackTopMinusWordDerefOperand (), absolute = true}))) end - | CCall {args, frameInfo, func, return} + | CCall {args, func, return} => let datatype z = datatype CFunction.Convention.t datatype z = datatype CFunction.SymbolScope.t datatype z = datatype CFunction.Target.t val CFunction.T {convention=_, - maySwitchThreads, - modifiesFrontier, - readsStackTop, return = returnTy, symbolScope, - target, - writesStackTop, ...} = func + target, ...} = func val stackTopMinusWordDeref = amd64MLton.gcState_stackTopMinusWordDerefOperand () val Liveness.T {dead, ...} @@ -1397,11 +1393,10 @@ reserve = true})}] *) val flush = - case frameInfo of - SOME (FrameInfo.T {size, ...}) => + case return of + SOME {return, size = SOME size} => (* Entering runtime *) let - val return = valOf return val _ = enque return val stackTopTemp @@ -1489,16 +1484,16 @@ dead_memlocs = MemLocSet.empty, dead_classes = ClassSet.empty}))) end - | NONE => + | _ => AppendList.single (Assembly.directive_force {commit_memlocs = let val s = MemLocSet.empty - val s = if modifiesFrontier + val s = if CFunction.modifiesFrontier func then MemLocSet.add (s, frontier ()) else s - val s = if readsStackTop + val s = if CFunction.readsStackTop func then MemLocSet.add (s, stackTop ()) else s @@ -1521,15 +1516,16 @@ (* how to access imported functions: *) (* Windows rewrites the symbol __imp__name *) - val coff = fn () => Label.fromString ("_imp__" ^ name) + val coff_cygwin = fn () => Label.fromString ("_imp__" ^ name) + val coff_mingw = fn () => Label.fromString ("__imp_" ^ name) val macho = fn () => label () (* @PLT is implicit *) val elf = fn () => Label.fromString (name ^ "@PLT") val importLabel = fn () => case !Control.Target.os of - Cygwin => coff () + Cygwin => coff_cygwin () | Darwin => macho () - | MinGW => coff () + | MinGW => coff_mingw () | _ => elf () val direct = fn () => @@ -1555,7 +1551,7 @@ in case (symbolScope, !Control.Target.os, - !Control.positionIndependent) of + !Control.Native.pic) of (* Private functions can be easily reached * with a direct (rip-relative) call. *) @@ -1599,7 +1595,9 @@ amd64.Assembly.directive_unreserve {registers = List.map (reg_args, #2)}] val kill - = if isSome frameInfo + = if (case return of + SOME {size = SOME _, ...} => true + | _ => false) then AppendList.single (Assembly.directive_force {commit_memlocs = MemLocSet.empty, @@ -1616,11 +1614,11 @@ remove_classes = ClassSet.empty, dead_memlocs = let val s = MemLocSet.empty - val s = if modifiesFrontier + val s = if CFunction.modifiesFrontier func then MemLocSet.add (s, frontier ()) else s - val s = if writesStackTop + val s = if CFunction.writesStackTop func then MemLocSet.add (s, stackTop ()) else s @@ -1642,7 +1640,7 @@ size = pointerSize})) else AppendList.empty val continue - = if maySwitchThreads + = if CFunction.maySwitchThreadsFrom func then (* Returning from runtime *) (farTransfer MemLocSet.empty AppendList.empty @@ -1653,20 +1651,21 @@ absolute = true}))) else case return of NONE => AppendList.empty - | SOME l => (if isSome frameInfo - then (* Don't need to trampoline, - * since didn't switch threads, - * but can't fall because - * frame layout data is prefixed - * to l's code; use fallNone - * to force a jmp with near - * jump assumptions. - *) - fallNone - else fall) - gef - {label = l, - live = getLive (liveInfo, l)} + | SOME {return, size} => + (if isSome size + then (* Don't need to trampoline, + * since didn't switch threads, + * but can't fall because + * frame layout data is prefixed + * to l's code; use fallNone + * to force a jmp with near + * jump assumptions. + *) + fallNone + else fall) + gef + {label = return, + live = getLive (liveInfo, return)} in AppendList.appends [cacheRsp (), @@ -2010,7 +2009,7 @@ if length >= 8 andalso WordX.lt (WordX.div(rangeK,two,{signed=false}), - WordX.fromIntInf (IntInf.fromInt length, ws), + WordX.fromInt (length, ws), {signed = false}) then let val cases diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-generate-transfers.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-generate-transfers.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-generate-transfers.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-generate-transfers.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-jump-info.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-jump-info.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-jump-info.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-jump-info.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -61,7 +62,7 @@ | Entry.Cont {label, ...} => forceNear (jumpInfo, label) | Entry.Handler {label, ...} => forceNear (jumpInfo, label) | Entry.CReturn {label, func, ...} - => if CFunction.maySwitchThreads func + => if CFunction.maySwitchThreadsTo func then forceNear (jumpInfo, label) else (); List.foreach diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-jump-info.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-jump-info.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-jump-info.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-jump-info.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-liveness.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-liveness.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-liveness.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-liveness.fun 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -314,20 +314,20 @@ end local - val num = Counter.new 1 + val nextNum = Counter.generator 1 in fun topo_sort label = let val {topo, pred, ...} = getBlockInfo label in if !topo = 0 - then (topo := Counter.next num; + then (topo := nextNum (); push_todo label; List.foreach(!pred, topo_sort)) else () end fun topo_root label - = (get_topo label := Counter.next num; + = (get_topo label := nextNum (); push_todo label) end diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-liveness.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-liveness.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-liveness.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-liveness.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-live-transfers.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-live-transfers.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-live-transfers.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-live-transfers.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -282,7 +283,7 @@ | Raise {...} => () | CCall {return, ...} - => Option.app (return, doit) + => Option.app (return, doit o #return) end) val _ @@ -439,7 +440,7 @@ | Return _ => (I.PosInfinity, NONE) | Raise _ => (I.PosInfinity, NONE) | CCall {func, ...} - => if CFunction.maySwitchThreads func + => if CFunction.maySwitchThreadsFrom func orelse Size.class (MemLoc.size temp) <> Size.INT then (I.PosInfinity, NONE) else default () @@ -514,7 +515,7 @@ | Cont {...} => (I.PosInfinity, NONE) | Handler {...} => (I.PosInfinity, NONE) | CReturn {func, ...} - => if (CFunction.maySwitchThreads func + => if (CFunction.maySwitchThreadsTo func orelse Size.class (MemLoc.size temp) <> Size.INT) then (I.PosInfinity, NONE) else default () @@ -959,9 +960,9 @@ | Raise {...} => () | CCall {func, return, ...} - => if CFunction.maySwitchThreads func - then Option.app (return, doit'') - else Option.app (return, doit''' func) + => if CFunction.maySwitchThreadsFrom func + then Option.app (return, doit'' o #return) + else Option.app (return, doit''' func o #return) end end @@ -1076,9 +1077,9 @@ | Raise {...} => () | CCall {func, return, ...} - => if CFunction.maySwitchThreads func - then Option.app (return, doit'') - else Option.app (return, doit') + => if CFunction.maySwitchThreadsFrom func + then Option.app (return, doit'' o #return) + else Option.app (return, doit' o #return) end in case !defed diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-live-transfers.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-live-transfers.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-live-transfers.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-live-transfers.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-loop-info.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-loop-info.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-loop-info.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-loop-info.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -109,19 +110,19 @@ => () | CCall {return, func, ...} => Option.app (return, if CFunction.mayGC func - then doit'' - else doit') + then doit'' o #return + else doit' o #return) end) val _ = destInfo () - val lf = Graph.loopForestSteensgaard (G, {root = root}) + val lf = Graph.loopForestSteensgaard (G, {root = root, nodeValue = getNodeInfo}) - fun doit (f: unit LoopForest.t, + fun doit (f: Label.t LoopForest.t, headers, path) = let val {loops, notInLoop} = LoopForest.dest f - val notInLoop = Vector.toListMap (notInLoop, getNodeInfo) + val notInLoop = Vector.toList notInLoop val path' = List.rev path in List.foreach @@ -132,9 +133,7 @@ loopPath = path'})) ; Vector.foreachi (loops, fn (i,{headers, child}) => - doit (child, - Vector.map (headers, getNodeInfo), - i::path)) + doit (child, headers, i::path)) end val _ = doit (lf, Vector.new0 (), []) in diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-loop-info.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-loop-info.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-loop-info.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-loop-info.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-mlton-basic.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-mlton-basic.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-mlton-basic.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-mlton-basic.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -232,6 +232,14 @@ fun fpeqTempContentsOperand size = Operand.memloc (fpeqTempContents size) + val overflowCheckTemp = Label.fromString "overflowCheckTemp" + fun overflowCheckTempContents size + = makeContents {base = Immediate.label overflowCheckTemp, + size = size, + class = Classes.StaticTemp} + fun overflowCheckTempContentsOperand size + = Operand.memloc (overflowCheckTempContents size) + local fun make prefix = let @@ -261,10 +269,17 @@ val global_base = make "global" end - val globalObjptrNonRoot_base = Label.fromString "globalObjptrNonRoot" - val gcState_label = Label.fromString "gcState" + local + val static_labels = HashTable.new + {hash=Hash.permute o Word.fromInt, equals=Int.equals} + fun make i = Label.fromString ("static_" ^ Int.toString i) + in + fun static_label i = HashTable.lookupOrInsert + (static_labels, i, fn () => make i) + end + structure Field = Runtime.GCField fun make' (offset: int, size, class) = let diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-mlton-basic.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-mlton-basic.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-mlton-basic.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-mlton-basic.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -90,11 +90,14 @@ val applyFFTempXmmRegArgContents : amd64.Size.t * int -> amd64.MemLoc.t val fpcvtTempContentsOperand : amd64.Operand.t val fpeqTempContentsOperand : amd64.Size.t -> amd64.Operand.t + val overflowCheckTempContentsOperand : amd64.Size.t -> amd64.Operand.t (* Static arrays defined in main.h and amd64-main.h *) val local_base : amd64.CType.t -> amd64.Label.t val global_base : amd64.CType.t -> amd64.Label.t - val globalObjptrNonRoot_base : amd64.Label.t + + (* Machine statics *) + val static_label: int -> amd64.Label.t (* gcState relative locations defined in gc.h *) val gcState_label: amd64.Label.t diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-mlton.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-mlton.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-mlton.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-mlton.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -25,14 +25,11 @@ end type transInfo = {addData : amd64.Assembly.t list -> unit, - frameInfoToAMD64: (amd64MLtonBasic.Machine.FrameInfo.t - -> amd64.FrameInfo.t), live: amd64.Label.t -> amd64.Operand.t list, liveInfo: amd64Liveness.LiveInfo.t} fun implementsPrim (p: 'a Prim.t) = let - datatype z = datatype RealSize.t datatype z = datatype WordSize.prim fun w32168 s = case WordSize.prim s of @@ -40,9 +37,9 @@ | W16 => true | W32 => true | W64 => false - datatype z = datatype Prim.Name.t + datatype z = datatype Prim.t in - case Prim.name p of + case p of CPointer_add => true | CPointer_diff => true | CPointer_equal => true @@ -50,7 +47,6 @@ | CPointer_lt => true | CPointer_sub => true | CPointer_toWord => true - | FFI_Symbol _ => true | Real_Math_acos _ => false | Real_Math_asin _ => false | Real_Math_atan _ => false @@ -71,8 +67,6 @@ | Real_le _ => true | Real_lt _ => true | Real_mul _ => true - | Real_muladd _ => true - | Real_mulsub _ => true | Real_neg _ => true | Real_qequal _ => true | Real_rndToReal _ => true @@ -81,7 +75,7 @@ | Real_sub _ => true | Thread_returnToC => false | Word_add _ => true - | Word_addCheck _ => true + | Word_addCheckP _ => true | Word_andb _ => true | Word_castToReal _ => true | Word_equal _ => true @@ -89,9 +83,9 @@ | Word_lshift _ => true | Word_lt _ => true | Word_mul _ => true - | Word_mulCheck _ => true + | Word_mulCheckP _ => true | Word_neg _ => true - | Word_negCheck _ => true + | Word_negCheckP _ => true | Word_notb _ => true | Word_orb _ => true | Word_quot _ => true @@ -101,7 +95,7 @@ | Word_ror _ => true | Word_rshift _ => true | Word_sub _ => true - | Word_subCheck _ => true + | Word_subCheckP _ => true | Word_xorb _ => true | _ => false end @@ -117,7 +111,6 @@ transInfo = {...} : transInfo} = let val primName = Prim.toString prim - datatype z = datatype Prim.Name.t fun getDst1 () = Vector.sub (dsts, 0) @@ -128,9 +121,6 @@ fun getSrc2 () = (Vector.sub (args, 0), Vector.sub (args, 1)) handle _ => Error.bug "amd64MLton.prim: getSrc2" - fun getSrc3 () - = (Vector.sub (args, 0), Vector.sub (args, 1), Vector.sub (args, 2)) - handle _ => Error.bug "amd64MLton.prim: getSrc3" fun mov () = let @@ -245,6 +235,60 @@ transfer = NONE}] end + fun binalcc (oper, condition) + = let + val ((src1,src1size), + (src2,src2size)) = getSrc2 () + val (dst,dstsize) = getDst1 () + val tmp = overflowCheckTempContentsOperand src1size + val _ + = Assert.assert + ("amd64MLton.prim: binalcc, src1size/src2size", + fn () => src1size = src2size) + + (* Reverse src1/src2 when src1 and src2 are temporaries + * and the oper is commutative. + *) + val (src1,src2) + = if (oper = Instruction.ADD) + orelse + (oper = Instruction.ADC) + orelse + (oper = Instruction.AND) + orelse + (oper = Instruction.OR) + orelse + (oper = Instruction.XOR) + then case (Operand.deMemloc src1, Operand.deMemloc src2) + of (SOME memloc_src1, SOME memloc_src2) + => if amd64Liveness.track memloc_src1 + andalso + amd64Liveness.track memloc_src2 + then (src2,src1) + else (src1,src2) + | _ => (src1,src2) + else (src1,src2) + in + AppendList.fromList + [Block.mkBlock' + {entry = NONE, + statements + = [Assembly.instruction_mov + {dst = tmp, + src = src1, + size = src1size}, + Assembly.instruction_binal + {oper = oper, + dst = tmp, + src = src2, + size = src1size}, + Assembly.instruction_setcc + {condition = condition, + dst = dst, + size = dstsize}], + transfer = NONE}] + end + fun pmd oper = let val ((src1,src1size), @@ -289,6 +333,54 @@ transfer = NONE}] end + fun pmdcc (oper, condition) + = let + val ((src1,src1size), + (src2,src2size)) = getSrc2 () + val (dst,dstsize) = getDst1 () + val tmp = overflowCheckTempContentsOperand src1size + val _ + = Assert.assert + ("amd64MLton.prim: pmdcc, src1size/src2size", + fn () => src1size = src2size) + + (* Reverse src1/src2 when src1 and src2 are temporaries + * and the oper is commutative. + *) + val (src1,src2) + = if (oper = Instruction.IMUL) + orelse + (oper = Instruction.MUL) + then case (Operand.deMemloc src1, Operand.deMemloc src2) + of (SOME memloc_src1, SOME memloc_src2) + => if amd64Liveness.track memloc_src1 + andalso + amd64Liveness.track memloc_src2 + then (src2,src1) + else (src1,src2) + | _ => (src1,src2) + else (src1,src2) + in + AppendList.fromList + [Block.mkBlock' + {entry = NONE, + statements + = [Assembly.instruction_mov + {dst = tmp, + src = src1, + size = src1size}, + Assembly.instruction_pmd + {oper = oper, + dst = tmp, + src = src2, + size = src1size}, + Assembly.instruction_setcc + {condition = condition, + dst = dst, + size = dstsize}], + transfer = NONE}] + end + fun imul2 () = let val ((src1,src1size), @@ -328,6 +420,49 @@ transfer = NONE}] end + fun imul2cc condition + = let + val ((src1,src1size), + (src2,src2size)) = getSrc2 () + val (dst,dstsize) = getDst1 () + val tmp = overflowCheckTempContentsOperand src1size + val _ + = Assert.assert + ("amd64MLton.prim: imul2cc, src1size/src2size", + fn () => src1size = src2size) + + (* Reverse src1/src2 when src1 and src2 are temporaries + * and the oper is commutative. + *) + val (src1,src2) + = case (Operand.deMemloc src1, Operand.deMemloc src2) + of (SOME memloc_src1, SOME memloc_src2) + => if amd64Liveness.track memloc_src1 + andalso + amd64Liveness.track memloc_src2 + then (src2,src1) + else (src1,src2) + | _ => (src1,src2) + in + AppendList.fromList + [Block.mkBlock' + {entry = NONE, + statements + = [Assembly.instruction_mov + {dst = tmp, + src = src1, + size = src1size}, + Assembly.instruction_imul2 + {dst = tmp, + src = src2, + size = src1size}, + Assembly.instruction_setcc + {dst = dst, + condition = condition, + size = dstsize}], + transfer = NONE}] + end + fun unal oper = let val (src,srcsize) = getSrc1 () @@ -352,6 +487,31 @@ transfer = NONE}] end + fun unalcc (oper, condition) + = let + val (src,srcsize) = getSrc1 () + val (dst,dstsize) = getDst1 () + val tmp = overflowCheckTempContentsOperand srcsize + in + AppendList.fromList + [Block.mkBlock' + {entry = NONE, + statements + = [Assembly.instruction_mov + {dst = tmp, + src = src, + size = srcsize}, + Assembly.instruction_unal + {oper = oper, + dst = tmp, + size = srcsize}, + Assembly.instruction_setcc + {condition = condition, + dst = dst, + size = dstsize}], + transfer = NONE}] + end + fun sral oper = let val (dst,dstsize) = getDst1 () @@ -573,40 +733,6 @@ transfer = NONE}] end - fun sse_binas_mul oper - = let - val ((src1,src1size), - (src2,src2size), - (src3,src3size)) = getSrc3 () - val (dst,dstsize) = getDst1 () - val _ - = Assert.assert - ("amd64MLton.prim: binal, dstsize/src1size/src2size", - fn () => src1size = dstsize andalso - src2size = dstsize andalso - src3size = dstsize) - in - AppendList.fromList - [Block.mkBlock' - {entry = NONE, - statements - = [Assembly.instruction_sse_movs - {dst = dst, - src = src1, - size = src1size}, - Assembly.instruction_sse_binas - {oper = Instruction.SSE_MULS, - dst = dst, - src = src2, - size = dstsize}, - Assembly.instruction_sse_binas - {oper = oper, - dst = dst, - src = src3, - size = dstsize}], - transfer = NONE}] - end - fun sse_unas oper = let val (src,srcsize) = getSrc1 () @@ -630,7 +756,7 @@ val (comment_begin, comment_end) - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then let val comment = primName in @@ -650,10 +776,15 @@ transfer = NONE})) end else (AppendList.empty,AppendList.empty) + + fun flag {signed} = + if signed then amd64.Instruction.O else amd64.Instruction.C + + datatype z = datatype Prim.t in AppendList.appends [comment_begin, - (case Prim.name prim of + (case prim of CPointer_add => binal Instruction.ADD | CPointer_diff => binal Instruction.SUB | CPointer_equal => cmp Instruction.E @@ -661,93 +792,6 @@ | CPointer_lt => cmp Instruction.B | CPointer_sub => binal Instruction.SUB | CPointer_toWord => mov () - | FFI_Symbol {name, symbolScope, ...} - => let - datatype z = datatype CFunction.SymbolScope.t - datatype z = datatype Control.Format.t - datatype z = datatype MLton.Platform.OS.t - - val (dst, dstsize) = getDst1 () - val label = fn () => Label.fromString name - - (* how to access an imported label's address *) - (* windows coff will add another leading _ to label *) - val coff = fn () => Label.fromString ("_imp__" ^ name) - val macho = fn () => Label.fromString (name ^ "@GOTPCREL") - val elf = fn () => Label.fromString (name ^ "@GOTPCREL") - - val importLabel = fn () => - case !Control.Target.os of - Cygwin => coff () - | Darwin => macho () - | MinGW => coff () - | _ => elf () - - val direct = fn () => - AppendList.fromList - [Block.mkBlock' - {entry = NONE, - statements = - [Assembly.instruction_lea - {dst = dst, - src = Operand.memloc_label (label ()), - size = dstsize}], - transfer = NONE}] - - val indirect = fn () => - AppendList.fromList - [Block.mkBlock' - {entry = NONE, - statements = - [Assembly.instruction_mov - {dst = dst, - src = Operand.memloc_label (importLabel ()), - size = dstsize}], - transfer = NONE}] - in - case (symbolScope, - !Control.Target.os, - !Control.positionIndependent) of - (* As long as the symbol is private (this means it is not - * exported to code outside this text segment), then - * RIP-relative addressing works on every OS/format. - *) - (Private, _, _) => direct () - (* When linking an executable, ELF and darwin-x86_64 use - * a special trick to "simplify" the code. All exported - * functions and symbols have pointers that correspond to - * to the executable. Function pointers point to the - * automatically created PLT entry in the executable. - * Variables are copied/relocated into the executable bss. - * This means that direct access is fine for executable - * and archive formats. (It also means direct access is - * NOT fine for a library, even if it defines the symbol) - * - * On ELF&darwin, a public symbol must be accessed via - * the GOT. This is because the final value may not be - * in this text segment. If the executable uses it, then - * the unique C address resides in the executable's - * text segment. The loader does this by creating a PLT - * proxy or copying values to the executable text segment. - *) - | (Public, _, true) => indirect () - | (Public, _, false) => direct () - (* On windows, the address is the point of definition. So - * we must use an indirect lookup even in executables. - *) - | (External, MinGW, _) => indirect () - | (External, Cygwin, _) => indirect () - (* When compiling to a library, we need to access external - * symbols via some address that is updated by the loader. - * That address resides within our data segment, and can - * be easily referenced using RIP-relative addressing. - * This trick is used on every platform MLton supports. - * Windows rewrites __imp__name symbols in our segment. - * ELF and darwin-x86_64 rewrite name@GOTPCREL. - *) - | (External, _, true) => indirect () - | (External, _, false) => direct () - end | Real_Math_sqrt _ => sse_unas Instruction.SSE_SQRTS | Real_abs s => let @@ -897,8 +941,6 @@ transfer = NONE}] end | Real_mul _ => sse_binas Instruction.SSE_MULS - | Real_muladd _ => sse_binas_mul Instruction.SSE_ADDS - | Real_mulsub _ => sse_binas_mul Instruction.SSE_SUBS | Real_neg s => let val (dst,dstsize) = getDst1 () @@ -1032,6 +1074,7 @@ end | Real_sub _ => sse_binas Instruction.SSE_SUBS | Word_add _ => binal Instruction.ADD + | Word_addCheckP (_, sg) => binalcc (Instruction.ADD, flag sg) | Word_andb _ => binal Instruction.AND | Word_castToReal _ => sse_movd () | Word_equal _ => cmp Instruction.E @@ -1045,7 +1088,17 @@ | W16 => imul2 () | W32 => imul2 () | W64 => imul2 ()) + | Word_mulCheckP (s, {signed}) => + if signed then + (case WordSize.prim s of + W8 => pmdcc (Instruction.IMUL, amd64.Instruction.O) + | W16 => imul2cc amd64.Instruction.O + | W32 => imul2cc amd64.Instruction.O + | W64 => imul2cc amd64.Instruction.O) + else + pmdcc (Instruction.MUL, amd64.Instruction.C) | Word_neg _ => unal Instruction.NEG + | Word_negCheckP (_, sg) => unalcc (Instruction.NEG, flag sg) | Word_notb _ => unal Instruction.NOT | Word_orb _ => binal Instruction.OR | Word_quot (_, {signed}) => @@ -1110,6 +1163,7 @@ | Word_rshift (_, {signed}) => sral (if signed then Instruction.SAR else Instruction.SHR) | Word_sub _ => binal Instruction.SUB + | Word_subCheckP (_, sg) => binalcc (Instruction.SUB, flag sg) | Word_extdToWord (s, s', {signed}) => let val b = WordSize.bits s @@ -1129,14 +1183,13 @@ end fun ccall {args: (amd64.Operand.t * amd64.Size.t) vector, - frameInfo, func, - return: amd64.Label.t option, + return: {return: amd64.Label.t, size: int option} option, transInfo = {...}: transInfo} = let val CFunction.T {convention, target, ...} = func val comment_begin - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then AppendList.single (amd64.Block.mkBlock' {entry = NONE, @@ -1158,7 +1211,6 @@ statements = [], transfer = SOME (Transfer.ccall {args = Vector.toList args, - frameInfo = frameInfo, func = func, return = return})})] end @@ -1185,7 +1237,7 @@ transfer = NONE}) end val comment_end - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then AppendList.single (amd64.Block.mkBlock' {entry = NONE, @@ -1202,201 +1254,4 @@ AppendList.appends [default (), comment_end] end - fun arith {prim : RepType.t Prim.t, - args : (Operand.t * Size.t) vector, - dsts : (Operand.t * Size.t) vector, - overflow : Label.t, - success : Label.t, - transInfo = {...} : transInfo} - = let - val primName = Prim.toString prim - datatype z = datatype Prim.Name.t - - fun getDst1 () - = Vector.sub (dsts, 0) - handle _ => Error.bug "amd64MLton.arith: getDst1" - fun getSrc1 () - = Vector.sub (args, 0) - handle _ => Error.bug "amd64MLton.arith: getSrc1" - fun getSrc2 () - = (Vector.sub (args, 0), Vector.sub (args, 1)) - handle _ => Error.bug "amd64MLton.arith: getSrc2" - - fun check (statements, condition) - = AppendList.single - (amd64.Block.mkBlock' - {entry = NONE, - statements = statements, - transfer = SOME (amd64.Transfer.iff - {condition = condition, - truee = overflow, - falsee = success})}) - fun binal (oper: amd64.Instruction.binal, condition) - = let - val (dst, dstsize) = getDst1 () - val ((src1, src1size), (src2, src2size)) = getSrc2 () - val _ = Assert.assert - ("amd64MLton.arith: binal, dstsize/src1size/src2size", - fn () => src1size = dstsize andalso src2size = dstsize) - (* Reverse src1/src2 when src1 and src2 are - * temporaries and the oper is commutative. - *) - val (src1,src2) - = if (oper = amd64.Instruction.ADD) - then case (amd64.Operand.deMemloc src1, - amd64.Operand.deMemloc src2) - of (SOME memloc_src1, SOME memloc_src2) - => if amd64Liveness.track memloc_src1 - andalso - amd64Liveness.track memloc_src2 - then (src2,src1) - else (src1,src2) - | _ => (src1,src2) - else (src1,src2) - in - check ([Assembly.instruction_mov - {dst = dst, - src = src1, - size = dstsize}, - Assembly.instruction_binal - {oper = oper, - dst = dst, - src = src2, - size = dstsize}], - condition) - end - fun pmd (oper: amd64.Instruction.md, condition) - = let - val (dst, dstsize) = getDst1 () - val ((src1, src1size), (src2, src2size)) = getSrc2 () - val _ = Assert.assert - ("amd64MLton.arith: pmd, dstsize/src1size/src2size", - fn () => src1size = dstsize andalso src2size = dstsize) - (* Reverse src1/src2 when src1 and src2 are - * temporaries and the oper is commutative. - *) - val (src1, src2) - = if oper = amd64.Instruction.MUL - then case (amd64.Operand.deMemloc src1, - amd64.Operand.deMemloc src2) - of (SOME memloc_src1, SOME memloc_src2) - => if amd64Liveness.track memloc_src1 - andalso - amd64Liveness.track memloc_src2 - then (src2,src1) - else (src1,src2) - | _ => (src1,src2) - else (src1,src2) - in - check ([Assembly.instruction_mov - {dst = dst, - src = src1, - size = dstsize}, - Assembly.instruction_pmd - {oper = oper, - dst = dst, - src = src2, - size = dstsize}], - condition) - end - fun unal (oper: amd64.Instruction.unal, condition) - = let - val (dst, dstsize) = getDst1 () - val (src1, src1size) = getSrc1 () - val _ = Assert.assert - ("amd64MLton.arith: unal, dstsize/src1size", - fn () => src1size = dstsize) - in - check ([Assembly.instruction_mov - {dst = dst, - src = src1, - size = dstsize}, - Assembly.instruction_unal - {oper = oper, - dst = dst, - size = dstsize}], - condition) - end - - fun imul2 condition - = let - val (dst, dstsize) = getDst1 () - val ((src1, src1size), (src2, src2size)) = getSrc2 () - val _ = Assert.assert - ("amd64MLton.arith: imul2, dstsize/src1size/src2size", - fn () => src1size = dstsize andalso src2size = dstsize) - (* Reverse src1/src2 when src1 and src2 are - * temporaries and the oper is commutative. - *) - val (src1, src2) - = case (amd64.Operand.deMemloc src1, - amd64.Operand.deMemloc src2) - of (SOME memloc_src1, SOME memloc_src2) - => if amd64Liveness.track memloc_src1 - andalso - amd64Liveness.track memloc_src2 - then (src2,src1) - else (src1,src2) - | _ => (src1,src2) - in - check ([Assembly.instruction_mov - {dst = dst, - src = src1, - size = dstsize}, - Assembly.instruction_imul2 - {dst = dst, - src = src2, - size = dstsize}], - condition) - end - - val (comment_begin,_) - = if !Control.Native.commented > 0 - then let - val comment = primName - in - (AppendList.single - (amd64.Block.mkBlock' - {entry = NONE, - statements - = [amd64.Assembly.comment - ("begin arith: " ^ comment)], - transfer = NONE}), - AppendList.single - (amd64.Block.mkBlock' - {entry = NONE, - statements - = [amd64.Assembly.comment - ("end arith: " ^ comment)], - transfer = NONE})) - end - else (AppendList.empty,AppendList.empty) - fun flag {signed} = - if signed then amd64.Instruction.O else amd64.Instruction.C - in - AppendList.appends - [comment_begin, - (case Prim.name prim of - Word_addCheck (_, sg) => - binal (amd64.Instruction.ADD, flag sg) - | Word_mulCheck (s, {signed}) => - let - in - if signed - then - (case WordSize.prim s of - W8 => pmd (amd64.Instruction.IMUL, amd64.Instruction.O) - | W16 => imul2 amd64.Instruction.O - | W32 => imul2 amd64.Instruction.O - | W64 => imul2 amd64.Instruction.O) - else - pmd (amd64.Instruction.MUL, amd64.Instruction.C) - end - | Word_negCheck _ => - unal (amd64.Instruction.NEG, amd64.Instruction.O) - | Word_subCheck (_, sg) => - binal (amd64.Instruction.SUB, flag sg) - | _ => Error.bug ("amd64MLton.arith: strange Prim.Name.t: " ^ primName))] - end - end diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-mlton.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-mlton.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-mlton.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-mlton.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -23,30 +24,21 @@ sharing Machine = amd64MLtonBasic.Machine type transInfo = {addData : amd64.Assembly.t list -> unit, - frameInfoToAMD64: (amd64MLtonBasic.Machine.FrameInfo.t - -> amd64.FrameInfo.t), live: amd64.Label.t -> amd64.Operand.t list, liveInfo: amd64Liveness.LiveInfo.t} - (* arith, c call, and primitive assembly sequences. *) - val arith: {prim: RepType.t Machine.Prim.t, - args: (amd64.Operand.t * amd64.Size.t) vector, - dsts: (amd64.Operand.t * amd64.Size.t) vector, - overflow: amd64.Label.t, - success: amd64.Label.t, - transInfo : transInfo} -> amd64.Block.t' AppendList.t + (* c call, and primitive assembly sequences. *) val ccall: {args: (amd64.Operand.t * amd64.Size.t) vector, - frameInfo: amd64.FrameInfo.t option, func: RepType.t Machine.CFunction.t, - return: amd64.Label.t option, + return: {return: amd64.Label.t, size: int option} option, transInfo: transInfo} -> amd64.Block.t' AppendList.t val creturn: {dsts: (amd64.Operand.t * amd64.Size.t) vector, frameInfo: amd64.FrameInfo.t option, func: RepType.t Machine.CFunction.t, label: amd64.Label.t, transInfo: transInfo} -> amd64.Block.t' AppendList.t - val implementsPrim: RepType.t Machine.Prim.t -> bool - val prim: {prim: RepType.t Machine.Prim.t, + val implementsPrim: RepType.t Machine.Prim.t -> bool + val prim: {prim: RepType.t Machine.Prim.t, args: (amd64.Operand.t * amd64.Size.t) vector, dsts: (amd64.Operand.t * amd64.Size.t) vector, transInfo: transInfo} -> amd64.Block.t' AppendList.t diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-pseudo.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-pseudo.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-pseudo.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-pseudo.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -366,7 +366,7 @@ structure FrameInfo: sig datatype t = T of {size: int, - frameLayoutsIndex: int} + frameInfosIndex: int} end structure Entry: @@ -417,9 +417,9 @@ val return : {live: MemLocSet.t} -> t val raisee : {live: MemLocSet.t} -> t val ccall : {args: (Operand.t * Size.t) list, - frameInfo: FrameInfo.t option, func: RepType.t CFunction.t, - return: Label.t option} -> t + return: {return: Label.t, + size: int option} option} -> t end structure ProfileLabel : diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -988,7 +988,7 @@ structure FrameInfo: sig datatype t = T of {size: int, - frameLayoutsIndex: int} + frameInfosIndex: int} end structure Entry: @@ -1067,9 +1067,9 @@ | Return of {live: MemLocSet.t} | Raise of {live: MemLocSet.t} | CCall of {args: (Operand.t * Size.t) list, - frameInfo: FrameInfo.t option, func: RepType.t CFunction.t, - return: Label.t option} + return: {return: Label.t, + size: int option} option} val toString : t -> string @@ -1098,9 +1098,9 @@ val return : {live: MemLocSet.t} -> t val raisee : {live: MemLocSet.t} -> t val ccall: {args: (Operand.t * Size.t) list, - frameInfo: FrameInfo.t option, func: RepType.t CFunction.t, - return: Label.t option} -> t + return: {return: Label.t, + size: int option} option} -> t end structure ProfileLabel : @@ -1128,6 +1128,8 @@ transfer: Transfer.t} val printBlock : t -> unit + val layouts: t * (Layout.t -> unit) -> unit + val compress : t' list -> t list end @@ -1135,5 +1137,7 @@ sig datatype t = T of {data: Assembly.t list, blocks: Block.t list} + + val layouts: t * (Layout.t -> unit) -> unit end end diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-simplify.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-simplify.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-simplify.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-simplify.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -562,6 +562,9 @@ {oper = Instruction.SBB, ...}) => (true, if b then b' else true) | Assembly.Instruction + (Instruction.MOV _) + => (b, b') + | Assembly.Instruction (Instruction.SETcc {condition = Instruction.C, ...}) => (true, if b then b' else true) @@ -1514,7 +1517,7 @@ (* elimBinAL0L:: *) (* elimBinAL0R:: *) elimAddSub1:: - elimMDPow2:: +(* elimMDPow2:: *) elimCMPTEST:: nil val optimizations_pre_msg @@ -1522,18 +1525,20 @@ (* elimBinAL0L_msg:: *) (* elimBinAL0R_msg:: *) elimAddSub1_msg:: - elimMDPow2_msg:: +(* elimMDPow2_msg:: *) nil val optimizations_post - = elimBinALMDDouble:: + = elimMDPow2:: + elimBinALMDDouble:: elimSSEBinASDouble:: elimCMPTEST:: elimCMP0:: elimALTEST:: nil val optimizations_post_msg - = elimBinALMDDouble_msg:: + = elimMDPow2_msg:: + elimBinALMDDouble_msg:: elimSSEBinASDouble_msg:: elimCMPTEST_msg:: elimCMP0_msg:: @@ -2846,6 +2851,15 @@ case asm of Assembly.Comment _ => (b, b') | Assembly.Instruction + (Instruction.BinAL {oper = Instruction.ADC, ...}) + => (true, if b then b' else true) + | Assembly.Instruction + (Instruction.BinAL {oper = Instruction.SBB, ...}) + => (true, if b then b' else true) + | Assembly.Instruction + (Instruction.MOV _) + => (b, b') + | Assembly.Instruction (Instruction.SETcc _) => (true, if b then b' else true) | _ => (true, b')) @@ -3088,6 +3102,162 @@ end local + fun isInstructionMOV_aux (check) : statement_type -> bool + = fn (Assembly.Instruction (Instruction.MOV + {dst = Operand.MemLoc memloc,...}), + _) + => check memloc + | _ => false + + val isInstructionMOV : statement_type -> bool + = isInstructionMOV_aux (fn _ => true) + val isInstructionMOV_dstTemp : statement_type -> bool + = isInstructionMOV_aux amd64Liveness.track + + fun isInstructionAL_aux (check) : statement_type -> bool + = fn (Assembly.Instruction (Instruction.BinAL + {dst = Operand.MemLoc memloc,...}), _) + => check memloc + | (Assembly.Instruction (Instruction.pMD + {dst = Operand.MemLoc memloc,...}), _) + => check memloc + | (Assembly.Instruction (Instruction.IMUL2 + {dst = Operand.MemLoc memloc,...}), _) + => check memloc + | (Assembly.Instruction (Instruction.UnAL + {dst = Operand.MemLoc memloc,...}), _) + => check memloc + | (Assembly.Instruction (Instruction.SRAL + {dst = Operand.MemLoc memloc,...}), _) + => check memloc + | _ => false + + val isInstructionAL : statement_type -> bool + = isInstructionAL_aux (fn _ => true) + + fun isDeadTemp dead memloc + = amd64Liveness.track memloc andalso LiveSet.contains (dead, memloc) + val isInstructionAL_dstDeadTemp : statement_type -> bool + = fn (instr, liveness as Liveness.T {dead, ...}) + => isInstructionAL_aux (isDeadTemp dead) (instr, liveness) + + val template : template + = {start = EmptyOrNonEmpty, + statements = [One isInstructionMOV, + All isComment, + One isInstructionAL, + All isComment, + One isInstructionMOV_dstTemp, + All isComment, + One isInstructionAL_dstDeadTemp], + finish = EmptyOrNonEmpty, + transfer = fn _ => true} + + val rewriter : rewriter + = fn {entry, + profileLabel, + start, + statements = + [[(stmtMov as Assembly.Instruction (Instruction.MOV + {src = src1x, + dst = dst1z, ...}), + _)], + comments1, + [(stmtAL as Assembly.Instruction instrAL1, _)], + comments2, + [(Assembly.Instruction (Instruction.MOV + {src = src2x, + dst = dst2z, ...}), + _)], + comments3, + [(Assembly.Instruction instrAL2, + Liveness.T {liveOut = liveOut2, ...})]], + finish, + transfer} + => if !Control.Native.elimALRedundant andalso + Operand.eq (src1x, src2x) andalso + (let + fun checkUn (oper1, dst1, oper2, dst2) + = oper1 = oper2 andalso + Operand.eq(dst1z, dst1) andalso + Operand.eq(dst2z, dst2) + + fun checkBin (oper1, src1, dst1, oper2, src2, dst2) + = oper1 = oper2 andalso + Operand.eq(src1, src2) andalso + Operand.eq(dst1z, dst1) andalso + Operand.eq(dst2z, dst2) + in + case (instrAL1, instrAL2) of + (Instruction.BinAL + {oper = oper1, src = src1, dst = dst1, ...}, + Instruction.BinAL + {oper = oper2, src = src2, dst = dst2, ...}) + => checkBin (oper1, src1, dst1, oper2, src2, dst2) + | (Instruction.pMD + {oper = oper1, src = src1, dst = dst1, ...}, + Instruction.pMD + {oper = oper2, src = src2, dst = dst2, ...}) + => checkBin (oper1, src1, dst1, oper2, src2, dst2) + | (Instruction.IMUL2 + {src = src1, dst = dst1, ...}, + Instruction.IMUL2 + {src = src2, dst = dst2, ...}) + => checkBin (Instruction.IMUL, src1, dst1, + Instruction.IMUL, src2, dst2) + | (Instruction.UnAL + {oper = oper1, dst = dst1, ...}, + Instruction.UnAL + {oper = oper2, dst = dst2, ...}) + => checkUn (oper1, dst1, oper2, dst2) + | (Instruction.SRAL + {oper = oper1, count = src1, dst = dst1, ...}, + Instruction.SRAL + {oper = oper2, count = src2, dst = dst2, ...}) + => checkBin (oper1, src1, dst1, oper2, src2, dst2) + | _ => false + end) + then + let + val excomm = fn comm => List.map (comm, fn (c, _) => c) + val comments1 = excomm comments1 + val comments2 = excomm comments2 + val comments3 = excomm comments3 + + val statements = + stmtMov::(comments1 @ (stmtAL::(comments2 @ comments3))) + val {statements, ...} + = LivenessBlock.toLivenessStatements + {statements = statements, live = liveOut2} + val statements + = List.fold (start, + List.concat [statements, finish], + op ::) + in + SOME (LivenessBlock.T + {entry = entry, + profileLabel = profileLabel, + statements = statements, + transfer = transfer}) + end + else NONE + | _ => Error.bug "amd64Simplify.PeepholeBlock: elimALRedundant" + + val (callback,elimALRedundant_msg) + = make_callback_msg "elimALRedundant" + in + (* Fusing of adjacent `Word_` and `Word{S,U}_CheckP` + * primitives depends on the relative order of `!a` and `?a` + * in /basis-library/primitive/prim1.sml:mkOverflow + *) + val elimALRedundant : optimization + = {template = template, + rewriter = rewriter, + callback = callback} + val elimALRedundant_msg = elimALRedundant_msg + end + + local val isInstructionSSEMOVS_dstTemp : statement_type -> bool = fn (Assembly.Instruction (Instruction.SSE_MOVS {dst = Operand.MemLoc memloc,...}), @@ -3936,6 +4106,13 @@ end local + val optimizations_pre + = elimALRedundant:: + nil + val optimizations_pre_msg + = elimALRedundant_msg:: + nil + val optimizations = elimALCopy:: elimSSEASCopy:: @@ -3968,6 +4145,21 @@ elimSSESSelfMove_minor_msg:: nil in + val peepholeLivenessBlock_pre + = fn block => (peepholeBlock {optimizations = optimizations_pre, + block = block}) + + val (peepholeLivenessBlock_pre, peepholeLivenessBlock_pre_msg) + = tracer + "peepholeLivenessBlock_pre" + peepholeLivenessBlock_pre + + val peepholeLivenessBlock_pre_msg + = fn () => (peepholeLivenessBlock_pre_msg (); + Control.indent (); + List.foreach(optimizations_pre_msg, fn msg => msg ()); + Control.unindent ()) + val peepholeLivenessBlock = fn block => (peepholeBlock {optimizations = optimizations, block = block}) @@ -4191,6 +4383,7 @@ {block = block, changed = false, msg = "peepholeBlock/moveHoist/peepholeLivenessBlock/copyPropagate"} + (***************************************************) (* peepholeBlock_pre *) (***************************************************) @@ -4220,8 +4413,29 @@ msg = "amd64Liveness.LivenessBlock.toLivenessBlock"} (***************************************************) + (* peepholeLivenessBlock_pre *) + (***************************************************) + val {block = block', + changed = changed'} + = PeepholeLivenessBlock.peepholeLivenessBlock_pre + block + + val _ = checkLivenessBlock + {block = block, + block' = block', + msg = "PeepholeLivenessBlock.peepholeLivenessBlock_pre"} + + val _ = changedLivenessBlock_msg + {block = block', + changed = changed', + msg = "PeepholeLivenessBlock.peepholeLivenessBlock_pre"} + val block = block' + val changed = changed orelse changed' + + (***************************************************) (* moveHoist *) (***************************************************) + val {block = block', changed = changed'} = if !Control.Native.moveHoist @@ -4412,6 +4626,7 @@ amd64EntryTransfer.verifyEntryTransfer_msg (); PeepholeBlock.peepholeBlock_pre_msg (); amd64Liveness.LivenessBlock.toLivenessBlock_msg (); + PeepholeLivenessBlock.peepholeLivenessBlock_pre_msg (); MoveHoistLivenessBlock.moveHoist_msg (); PeepholeLivenessBlock.peepholeLivenessBlock_msg (); CopyPropagateLivenessBlock.copyPropagate_msg (); diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-simplify.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-simplify.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-simplify.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-simplify.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-translate.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-translate.fun --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-translate.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-translate.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -22,11 +22,14 @@ local open Machine in + structure CSymbol = CSymbol + structure CSymbolScope = CSymbolScope + structure Const = Const structure Label = Label structure Live = Live - structure Register = Register structure Scale = Scale structure StackOffset = StackOffset + structure Temporary = Temporary structure Type = Type structure WordSize = WordSize structure WordX = WordX @@ -43,10 +46,7 @@ val ty = Machine.Type.toCType (ty g) val index = index g val base = - amd64.Immediate.label - (if isRoot g - then amd64MLton.global_base ty - else amd64MLton.globalObjptrNonRoot_base) + amd64.Immediate.label (amd64MLton.global_base ty) val origin = amd64.MemLoc.imm {base = base, @@ -75,15 +75,25 @@ fun getOp0 v = get #1 0 v + local + fun fromSizes (sizes, origin) = + (#1 o Vector.mapAndFold) + (sizes, 0, fn (size,offset) => + (((amd64.Operand.memloc o amd64.MemLoc.shift) + {origin = origin, + disp = amd64.Immediate.int offset, + scale = amd64.Scale.One, + size = size}, size), offset + amd64.Size.toBytes size)) + in val rec toAMD64Operand : t -> (amd64.Operand.t * amd64.Size.t) vector = - fn ArrayOffset {base, index, offset, scale, ty} + fn SequenceOffset {base, index, offset, scale, ty} => let val base = toAMD64Operand base - val _ = Assert.assert("amd64Translate.Operand.toAMD64Operand: Array/base", + val _ = Assert.assert("amd64Translate.Operand.toAMD64Operand: SequenceOffset/base", fn () => Vector.length base = 1) val base = getOp0 base val index = toAMD64Operand index - val _ = Assert.assert("amd64Translate.Operand.toAMD64Operand: Array/index", + val _ = Assert.assert("amd64Translate.Operand.toAMD64Operand: SequenceOffset/index", fn () => Vector.length index = 1) val index = getOp0 index val scale = @@ -94,25 +104,40 @@ | Scale.Eight => amd64.Scale.Eight val ty = Type.toCType ty val origin = - case (amd64.Operand.deMemloc base, + case (amd64.Operand.deImmediate base, + amd64.Operand.deMemloc base, amd64.Operand.deImmediate index, amd64.Operand.deMemloc index) of - (SOME base, SOME index, _) => - amd64.MemLoc.simple + (SOME base, _, SOME index, _) => + amd64.MemLoc.imm {base = base, index = index, scale = scale, size = amd64.Size.BYTE, class = amd64MLton.Classes.Heap} - | (SOME base, _, SOME index) => - amd64.MemLoc.complex + | (SOME base, _, _, SOME index) => + amd64.MemLoc.basic + {base = base, + index = index, + scale = scale, + size = amd64.Size.BYTE, + class = amd64MLton.Classes.Heap} + | (_, SOME base, SOME index, _) => + amd64.MemLoc.simple + {base = base, + index = index, + scale = scale, + size = amd64.Size.BYTE, + class = amd64MLton.Classes.Heap} + | (_, SOME base, _, SOME index) => + amd64.MemLoc.complex {base = base, index = index, scale = scale, size = amd64.Size.BYTE, class = amd64MLton.Classes.Heap} | _ => Error.bug (concat ["amd64Translate.Operand.toAMD64Operand: ", - "strange Offset: base: ", + "strange SequenceOffset: base: ", amd64.Operand.toString base, " index: ", amd64.Operand.toString index]) @@ -126,45 +151,96 @@ size = amd64.Size.BYTE} val sizes = amd64.Size.fromCType ty in - (#1 o Vector.mapAndFold) - (sizes, 0, fn (size,offset) => - (((amd64.Operand.memloc o amd64.MemLoc.shift) - {origin = origin, - disp = amd64.Immediate.int offset, - scale = amd64.Scale.One, - size = size}, size), offset + amd64.Size.toBytes size)) + fromSizes (sizes, origin) end | Cast (z, _) => toAMD64Operand z - | Contents {oper, ty} => + | Const (Const.CSymbol (CSymbol.T {name, symbolScope, ...})) => let - val ty = Type.toCType ty - val base = toAMD64Operand oper - val _ = Assert.assert("amd64Translate.Operand.toAMD64Operand: Contents/base", - fn () => Vector.length base = 1) - val base = getOp0 base - val origin = - case amd64.Operand.deMemloc base of - SOME base => - amd64.MemLoc.simple - {base = base, - index = amd64.Immediate.zero, - scale = amd64.Scale.One, - size = amd64.Size.BYTE, - class = amd64MLton.Classes.Heap} - | _ => Error.bug (concat - ["amd64Translate.Operand.toAMD64Operand: ", - "strange Contents: base: ", - amd64.Operand.toString base]) - val sizes = amd64.Size.fromCType ty + datatype z = datatype CSymbolScope.t + datatype z = datatype Control.Format.t + datatype z = datatype MLton.Platform.OS.t + + val label = fn () => Label.fromString name + + (* how to access an imported label's address *) + (* windows coff will add another leading _ to label *) + val coff = fn () => Label.fromString ("_imp__" ^ name) + val macho = fn () => Label.fromString (name ^ "@GOTPCREL") + val elf = fn () => Label.fromString (name ^ "@GOTPCREL") + + val importLabel = fn () => + case !Control.Target.os of + Cygwin => coff () + | Darwin => macho () + | MinGW => coff () + | _ => elf () + + val direct = fn () => + Vector.new1 + (amd64.Operand.immediate_label (label ()), + amd64.Size.QUAD) + val indirect = fn () => + Vector.new1 + (amd64.Operand.memloc_label (importLabel ()), + amd64.Size.QUAD) in - (#1 o Vector.mapAndFold) - (sizes, 0, fn (size,offset) => - (((amd64.Operand.memloc o amd64.MemLoc.shift) - {origin = origin, - disp = amd64.Immediate.int offset, - scale = amd64.Scale.One, - size = size}, size), offset + amd64.Size.toBytes size)) + case (symbolScope, + !Control.Target.os, + !Control.Native.pic) of + (* As long as the symbol is private (this means it is not + * exported to code outside this text segment), then + * RIP-relative addressing works on every OS/format. + *) + (Private, _, _) => direct () + (* When linking an executable, ELF and darwin-x86_64 use + * a special trick to "simplify" the code. All exported + * functions and symbols have pointers that correspond to + * to the executable. Function pointers point to the + * automatically created PLT entry in the executable. + * Variables are copied/relocated into the executable bss. + * This means that direct access is fine for executable + * and archive formats. (It also means direct access is + * NOT fine for a library, even if it defines the symbol) + * + * On ELF&darwin, a public symbol must be accessed via + * the GOT. This is because the final value may not be + * in this text segment. If the executable uses it, then + * the unique C address resides in the executable's + * text segment. The loader does this by creating a PLT + * proxy or copying values to the executable text segment. + *) + | (Public, _, true) => indirect () + | (Public, _, false) => direct () + (* On windows, the address is the point of definition. So + * we must use an indirect lookup even in executables. + *) + | (External, MinGW, _) => indirect () + | (External, Cygwin, _) => indirect () + (* When compiling to a library, we need to access external + * symbols via some address that is updated by the loader. + * That address resides within our data segment, and can + * be easily referenced using RIP-relative addressing. + * This trick is used on every platform MLton supports. + * Windows rewrites __imp__name symbols in our segment. + * ELF and darwin-x86_64 rewrite name@GOTPCREL. + *) + | (External, _, true) => indirect () + | (External, _, false) => direct () end + | Const Const.Null => + Vector.new1 (amd64.Operand.immediate_zero, amd64MLton.wordSize) + | Const (Const.Word w) => + let + fun single size = + Vector.new1 (amd64.Operand.immediate_word w, size) + in + case WordSize.prim (WordX.size w) of + W8 => single amd64.Size.BYTE + | W16 => single amd64.Size.WORD + | W32 => single amd64.Size.LONG + | W64 => single amd64.Size.QUAD + end + | Const _ => Error.bug "amd64Translate.Operand.toAMD64Operand: Const" | Frontier => let val frontier = amd64MLton.gcState_frontierContentsOperand () @@ -177,8 +253,6 @@ | Global g => Global.toAMD64Operand g | Label l => Vector.new1 (amd64.Operand.immediate_label l, amd64MLton.pointerSize) - | Null => - Vector.new1 (amd64.Operand.immediate_zero, amd64MLton.wordSize) | Offset {base = GCState, offset, ty} => let val offset = Bytes.toInt offset @@ -189,56 +263,35 @@ end | Offset {base, offset, ty} => let - val offset = Bytes.toInt offset + val offset = Bytes.toInt offset val ty = Type.toCType ty val base = toAMD64Operand base val _ = Assert.assert("amd64Translate.Operand.toAMD64Operand: Offset/base", fn () => Vector.length base = 1) val base = getOp0 base val origin = - case amd64.Operand.deMemloc base of - SOME base => - amd64.MemLoc.simple - {base = base, - index = amd64.Immediate.int offset, - scale = amd64.Scale.One, - size = amd64.Size.BYTE, - class = amd64MLton.Classes.Heap} - | _ => Error.bug (concat ["amd64Translate.Operand.toAMD64Operand: ", - "strange Offset: base: ", - amd64.Operand.toString base]) - val sizes = amd64.Size.fromCType ty + case (amd64.Operand.deImmediate base, + amd64.Operand.deMemloc base) of + (SOME base, _) => + amd64.MemLoc.imm + {base = base, + index = amd64.Immediate.int offset, + scale = amd64.Scale.One, + size = amd64.Size.BYTE, + class = amd64MLton.Classes.Heap} + | (_, SOME base) => + amd64.MemLoc.simple + {base = base, + index = amd64.Immediate.int offset, + scale = amd64.Scale.One, + size = amd64.Size.BYTE, + class = amd64MLton.Classes.Heap} + | _ => Error.bug (concat ["amd64Translate.Operand.toAMD64Operand: ", + "strange Offset: base: ", + amd64.Operand.toString base]) + val sizes = amd64.Size.fromCType ty in - (#1 o Vector.mapAndFold) - (sizes, 0, fn (size,offset) => - (((amd64.Operand.memloc o amd64.MemLoc.shift) - {origin = origin, - disp = amd64.Immediate.int offset, - scale = amd64.Scale.One, - size = size}, size), offset + amd64.Size.toBytes size)) - end - | Real _ => Error.bug "amd64Translate.Operand.toAMD64Operand: Real unimplemented" - | Register r => - let - val ty = Machine.Type.toCType (Register.ty r) - val index = Machine.Register.index r - val base = amd64.Immediate.label (amd64MLton.local_base ty) - val origin = - amd64.MemLoc.imm - {base = base, - index = amd64.Immediate.int index, - scale = amd64.Scale.fromCType ty, - size = amd64.Size.BYTE, - class = amd64MLton.Classes.Locals} - val sizes = amd64.Size.fromCType ty - in - (#1 o Vector.mapAndFold) - (sizes, 0, fn (size,offset) => - (((amd64.Operand.memloc o amd64.MemLoc.shift) - {origin = origin, - disp = amd64.Immediate.int offset, - scale = amd64.Scale.One, - size = size}, size), offset + amd64.Size.toBytes size)) + fromSizes (sizes, origin) end | StackOffset (StackOffset.T {offset, ty}) => let @@ -253,13 +306,16 @@ class = amd64MLton.Classes.Stack} val sizes = amd64.Size.fromCType ty in - (#1 o Vector.mapAndFold) - (sizes, 0, fn (size,offset) => - (((amd64.Operand.memloc o amd64.MemLoc.shift) - {origin = origin, - disp = amd64.Immediate.int offset, - scale = amd64.Scale.One, - size = size}, size), offset + amd64.Size.toBytes size)) + fromSizes (sizes, origin) + end + | StaticHeapRef (Machine.StaticHeap.Ref.T {kind, offset, ...}) => + let + val offset = Bytes.toInt offset + val base = + amd64.Immediate.labelPlusInt + (Machine.StaticHeap.Kind.label kind, offset) + in + Vector.new1 (amd64.Operand.immediate base, amd64MLton.pointerSize) end | StackTop => let @@ -267,17 +323,23 @@ in Vector.new1 (stackTop, valOf (amd64.Operand.size stackTop)) end - | Word w => + | Temporary t => let - fun single size = - Vector.new1 (amd64.Operand.immediate_word w, size) + val ty = Machine.Type.toCType (Temporary.ty t) + val index = Machine.Temporary.index t + val base = amd64.Immediate.label (amd64MLton.local_base ty) + val origin = + amd64.MemLoc.imm + {base = base, + index = amd64.Immediate.int index, + scale = amd64.Scale.fromCType ty, + size = amd64.Size.BYTE, + class = amd64MLton.Classes.Locals} + val sizes = amd64.Size.fromCType ty in - case WordSize.prim (WordX.size w) of - W8 => single amd64.Size.BYTE - | W16 => single amd64.Size.WORD - | W32 => single amd64.Size.LONG - | W64 => single amd64.Size.QUAD + fromSizes (sizes, origin) end + end end type transInfo = amd64MLton.transInfo @@ -286,9 +348,13 @@ struct structure Kind = Machine.Kind + fun frameInfoToAMD64 fi = + amd64.FrameInfo.T + {frameInfosIndex = Machine.FrameInfo.index fi, + size = Bytes.toInt (Machine.FrameInfo.size fi)} + fun toAMD64Blocks {label, kind, - transInfo as {frameInfoToAMD64, live, liveInfo, - ...}: transInfo} + transInfo as {live, liveInfo, ...}: transInfo} = ( amd64Liveness.LiveInfo.setLiveOperands (liveInfo, label, live label); @@ -302,7 +368,7 @@ statements = [], transfer = NONE}) end - | Kind.Func + | Kind.Func _ => let val args = List.fold @@ -336,21 +402,31 @@ in AppendList.single (amd64.Block.mkBlock' - {entry = SOME (amd64.Entry.cont {label = label, - live = args, - frameInfo = frameInfo}), + {entry = SOME (amd64.Entry.cont {frameInfo = frameInfo, + label = label, + live = args}), statements = [], transfer = NONE}) end - | Kind.Handler {frameInfo, ...} + | Kind.Handler {args, frameInfo, ...} => let + val frameInfo = frameInfoToAMD64 frameInfo + val args = + Vector.fold + (args, amd64.MemLocSet.empty, + fn (operand,args) => + Vector.fold + (Operand.toAMD64Operand (Live.toOperand operand), args, + fn ((operand,_),args) => + case amd64.Operand.deMemloc operand of + SOME memloc => amd64.MemLocSet.add(args, memloc) + | NONE => args)) in AppendList.single (amd64.Block.mkBlock' - {entry = SOME (amd64.Entry.handler - {frameInfo = frameInfoToAMD64 frameInfo, - label = label, - live = amd64.MemLocSet.empty}), + {entry = SOME (amd64.Entry.handler {frameInfo = frameInfo, + label = label, + live = args}), statements = [], transfer = NONE}) end @@ -375,7 +451,7 @@ open Machine.Statement fun comments statement - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then let val comment = (Layout.toString o layout) statement in @@ -399,9 +475,7 @@ fun toAMD64Blocks {statement, transInfo as {...} : transInfo} = (case statement - of Noop - => AppendList.empty - | Move {src, dst} + of Move {src, dst} => let val (comment_begin, comment_end) = comments statement @@ -571,7 +645,7 @@ => switch(test, amd64.Transfer.Cases.word cases, l)) fun comments transfer - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then let val comment = (Layout.toString o layout) transfer in @@ -584,25 +658,9 @@ else AppendList.empty - fun toAMD64Blocks {returns, transfer, - transInfo as {frameInfoToAMD64, ...}: transInfo} + fun toAMD64Blocks {returns, transfer, transInfo: transInfo} = (case transfer - of Arith {prim, args, dst, overflow, success, ...} - => let - val args = (Vector.concatV o Vector.map) - (args, Operand.toAMD64Operand) - val dsts = Operand.toAMD64Operand dst - in - AppendList.append - (comments transfer, - amd64MLton.arith {prim = prim, - args = args, - dsts = dsts, - overflow = overflow, - success = success, - transInfo = transInfo}) - end - | CCall {args, frameInfo, func, return} + of CCall {args, func, return} => let val args = (Vector.concatV o Vector.map) (args, Operand.toAMD64Operand) @@ -610,13 +668,13 @@ AppendList.append (comments transfer, amd64MLton.ccall {args = args, - frameInfo = (Option.map - (frameInfo, frameInfoToAMD64)), func = func, - return = return, + return = Option.map (return, fn {return, size} => + {return = return, + size = Option.map (size, Bytes.toInt)}), transInfo = transInfo}) end - | Return + | Return _ => AppendList.append (comments transfer, AppendList.single @@ -638,7 +696,7 @@ case amd64.Operand.deMemloc operand of SOME memloc => amd64.MemLocSet.add(live, memloc) | NONE => live))})})) - | Raise + | Raise _ => AppendList.append (comments transfer, AppendList.single @@ -720,7 +778,7 @@ amd64.Block.mkBlock' {entry = NONE, statements - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then let val comment = concat ["Live: ", @@ -759,8 +817,7 @@ open Machine.Chunk fun toAMD64Chunk {chunk = T {blocks, ...}, - frameInfoToAMD64, - liveInfo} + liveInfo} = let val data = ref [] val addData = fn l => List.push (data, l) @@ -776,7 +833,6 @@ Vector.concatV o Vector.map) (live, Operand.toAMD64Operand o Live.toOperand))) val transInfo = {addData = addData, - frameInfoToAMD64 = frameInfoToAMD64, live = live, liveInfo = liveInfo} val amd64Blocks @@ -799,12 +855,10 @@ end fun translateChunk {chunk: amd64MLton.Machine.Chunk.t, - frameInfoToAMD64, liveInfo: amd64Liveness.LiveInfo.t}: {chunk: amd64.Chunk.t} = {chunk = Chunk.toAMD64Chunk {chunk = chunk, - frameInfoToAMD64 = frameInfoToAMD64, - liveInfo = liveInfo}} + liveInfo = liveInfo}} val (translateChunk, translateChunk_msg) = tracerTop diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/amd64-translate.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-translate.sig --- mlton-20130715/mlton/codegen/amd64-codegen/amd64-translate.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/amd64-translate.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -22,8 +22,6 @@ include AMD64_TRANSLATE_STRUCTS val translateChunk : {chunk: amd64MLton.Machine.Chunk.t, - frameInfoToAMD64: (amd64MLton.Machine.FrameInfo.t - -> amd64.FrameInfo.t), liveInfo: amd64Liveness.LiveInfo.t} -> {chunk: amd64.Chunk.t} diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/peephole.fun mlton-20210117+dfsg/mlton/codegen/amd64-codegen/peephole.fun --- mlton-20130715/mlton/codegen/amd64-codegen/peephole.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/peephole.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/peephole.sig mlton-20210117+dfsg/mlton/codegen/amd64-codegen/peephole.sig --- mlton-20130715/mlton/codegen/amd64-codegen/peephole.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/peephole.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/sources.cm mlton-20210117+dfsg/mlton/codegen/amd64-codegen/sources.cm --- mlton-20130715/mlton/codegen/amd64-codegen/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -3,21 +3,20 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library functor amd64Codegen is ../../../lib/mlton/sources.cm -../../ast/sources.cm ../../atoms/sources.cm -../../control/sources.cm ../../backend/sources.cm +../../control/sources.cm ../c-codegen/sources.cm peephole.sig diff -Nru mlton-20130715/mlton/codegen/amd64-codegen/sources.mlb mlton-20210117+dfsg/mlton/codegen/amd64-codegen/sources.mlb --- mlton-20130715/mlton/codegen/amd64-codegen/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/amd64-codegen/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -3,16 +3,15 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) local ../../../lib/mlton/sources.mlb - ../../ast/sources.mlb ../../atoms/sources.mlb - ../../control/sources.mlb ../../backend/sources.mlb + ../../control/sources.mlb ../c-codegen/sources.mlb peephole.sig diff -Nru mlton-20130715/mlton/codegen/c-codegen/c-codegen.fun mlton-20210117+dfsg/mlton/codegen/c-codegen/c-codegen.fun --- mlton-20130715/mlton/codegen/c-codegen/c-codegen.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/c-codegen/c-codegen.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2014-2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -23,104 +23,112 @@ structure GCField = GCField end -structure Kind = +structure C = struct - open Kind + val truee = "TRUE" + val falsee = "FALSE" - fun isEntry (k: t): bool = - case k of - Cont _ => true - | CReturn {func, ...} => CFunction.mayGC func - | Func => true - | Handler _ => true - | _ => false - end + fun bool b = if b then truee else falsee + + fun args (ss: string list): string = + concat ("(" :: List.separate (ss, ", ") @ [")"]) + + fun callNoSemi (f: string, xs: string list): string = + concat [f, " ", args xs] -val traceGotoLabel = Trace.trace ("CCodegen.gotoLabel", Label.layout, Unit.layout) + fun call (f, xs) = + concat [f, " ", args xs, ";\n"] + + fun int (i: int) = + if i >= 0 + then Int.toString i + else concat ["-", Int.toString (~ i)] + + val bytes = int o Bytes.toInt + + fun string s = + let val quote = "\"" (* " *) + in concat [quote, String.escapeC s, quote] + end + end structure RealX = struct open RealX + fun toCType r = CType.real (size r) fun toC (r: t): string = - let - (* The main difference between SML reals and C floats/doubles is that - * SML uses "~" while C uses "-". - *) - val s = - String.translate (toString r, - fn #"~" => "-" | c => String.fromChar c) - (* Also, inf is spelled INFINITY and nan is NAN in C. *) - val s = - case s of - "-inf" => "-INFINITY" - | "inf" => "INFINITY" - | "nan" => "NAN" - | other => other - in - case size r of - R32 => concat ["(Real32)", s] - | R64 => s - end + (* SML uses "inf" and "nan", C uses "INFINITY" and "NAN" *) + case toString (r, {suffix = false}) of + "~inf" => "-INFINITY" + | "inf" => "INFINITY" + | "nan" => "NAN" + | s => concat ["(", CType.toString (toCType r), ")(", + (* SML uses "~", C uses "-" *) + String.translate (s, fn #"~" => "-" | c => String.fromChar c), ")"] end structure WordX = struct open WordX + fun toCType w = CType.word (size w, {signed = false}) fun toC (w: t): string = - let - fun simple s = - concat ["(Word", s, ")0x", toString w] - in - case WordSize.prim (size w) of - W8 => simple "8" - | W16 => simple "16" - | W32 => concat ["0x", toString w] - | W64 => concat ["0x", toString w, "llu"] - end + concat ["(", CType.toString (toCType w), ")(", + toString (w, {suffix = false}), "ull)"] end -structure C = +structure Const = struct - val truee = "TRUE" - val falsee = "FALSE" - - fun bool b = if b then truee else falsee - - fun args (ss: string list): string - = concat ("(" :: List.separate (ss, ", ") @ [")"]) - - fun callNoSemi (f: string, xs: string list, print: string -> unit): unit - = (print f - ; print " (" - ; (case xs - of [] => () - | x :: xs => (print x - ; List.foreach (xs, - fn x => (print ", "; print x)))) - ; print ")") + local + structure RealX' = RealX + structure WordX' = WordX + in + open Const + structure RealX = RealX' + structure WordX = WordX' + end - fun call (f, xs, print) = - (callNoSemi (f, xs, print) - ; print ";\n") + fun toC (c: t): string = + case c of + CSymbol (CSymbol.T {name, ...}) => + concat ["((", CType.toString CType.cpointer, ")(&", name, "))"] + | Null => "NULL" + | Real r => RealX.toC r + | Word w => WordX.toC w + | _ => Error.bug "CCodegen.Const.toC" + end - fun int (i: int) = - if i >= 0 - then Int.toString i - else concat ["-", Int.toString (~ i)] +structure Type = + struct + open Type - val bytes = int o Bytes.toInt + fun toC (t: t): string = + CType.toString (Type.toCType t) + end - fun string s = - let val quote = "\"" - in concat [quote, String.escapeC s, quote] +structure StaticHeap = + struct + open StaticHeap + structure Ref = + struct + open Ref + fun toC (T {kind, index, ty, ...}) = + concat ["(", CType.toString (Type.toCType ty), ")(&", + Label.toString (Kind.label kind), + ".obj", C.int index, + ".data)"] + end + structure Elem = + struct + open Elem + fun toC e = + case e of + Cast (z, ty) => + concat ["(", Type.toC ty, ")", toC z] + | Const c => Const.toC c + | Ref r => Ref.toC r end - - fun word (w: Word.t) = "0x" ^ Word.toString w - - fun push (size: Bytes.t, print) = - call ("\tPush", [bytes size], print) end structure Operand = @@ -129,19 +137,18 @@ fun isMem (z: t): bool = case z of - ArrayOffset _ => true - | Cast (z, _) => isMem z - | Contents _ => true + Cast (z, _) => isMem z | Offset _ => true + | SequenceOffset _ => true | StackOffset _ => true | _ => false end fun implementsPrim (p: 'a Prim.t): bool = let - datatype z = datatype Prim.Name.t + datatype z = datatype Prim.t in - case Prim.name p of + case p of CPointer_add => true | CPointer_diff => true | CPointer_equal => true @@ -149,7 +156,6 @@ | CPointer_lt => true | CPointer_sub => true | CPointer_toWord => true - | FFI_Symbol _ => true | Real_Math_acos _ => true | Real_Math_asin _ => true | Real_Math_atan _ => true @@ -173,13 +179,14 @@ | Real_muladd _ => true | Real_mulsub _ => true | Real_neg _ => true - | Real_qequal _ => false + | Real_qequal _ => true | Real_rndToReal _ => true | Real_rndToWord _ => true | Real_round _ => true | Real_sub _ => true + | Thread_returnToC => false | Word_add _ => true - | Word_addCheck _ => true + | Word_addCheckP _ => true | Word_andb _ => true | Word_castToReal _ => true | Word_equal _ => true @@ -187,56 +194,49 @@ | Word_lshift _ => true | Word_lt _ => true | Word_mul _ => true - | Word_mulCheck _ => true + | Word_mulCheckP _ => true | Word_neg _ => true - | Word_negCheck _ => true + | Word_negCheckP _ => true | Word_notb _ => true | Word_orb _ => true - | Word_quot (_, {signed}) => not signed - | Word_rem (_, {signed}) => not signed - | Word_rndToReal _ => true + | Word_quot _ => true + | Word_rem _ => true + | Word_rndToReal _ => + (* Real coercions depend on rounding mode and can't be + * inlined where gcc might constant-fold them. + *) + false | Word_rol _ => true | Word_ror _ => true | Word_rshift _ => true | Word_sub _ => true - | Word_subCheck _ => true + | Word_subCheckP _ => true | Word_xorb _ => true - | _ => false + | _ => Error.bug ("CCodegen.implementsPrim: " ^ Prim.toString p) end -fun creturn (t: Type.t): string = - concat ["CReturn", CType.name (Type.toCType t)] - fun outputIncludes (includes, print) = - (print "#define _ISOC99_SOURCE\n" - ; List.foreach (includes, fn i => (print "#include <"; - print i; - print ">\n")) - ; print "\n") - -fun declareProfileLabel (l, print) = - C.call ("DeclareProfileLabel", [ProfileLabel.toString l], print) + List.foreach (includes, fn i => (print "#include <"; + print i; + print ">\n")) fun declareGlobals (prefix: string, print) = let - (* gcState can't be static because stuff in mlton-lib.c refers to - * it. - *) - val _ = print (concat [prefix, "struct GC_state gcState;\n"]) + fun prints ss = List.foreach (ss, print) val _ = List.foreach (CType.all, fn t => let - val s = CType.toString t + val n = Global.numberOfType t in - print (concat [prefix, s, " global", s, - " [", C.int (Global.numberOfType t), "];\n"]) - ; print (concat [prefix, s, " CReturn", CType.name t, ";\n"]) + if n > 0 + then let + val s = CType.toString t + in + prints [prefix, s, " global", s, " [", C.int n, "];\n"] + end + else () end) - val _ = - print (concat [prefix, "Pointer globalObjptrNonRoot [", - C.int (Global.numberOfNonRoot ()), - "];\n"]) in () end @@ -246,103 +246,445 @@ includes: string list, print: string -> unit, program = (Program.T - {frameLayouts, frameOffsets, intInfs, maxFrameSize, - objectTypes, profileInfo, reals, vectors, ...}), + {frameInfos, frameOffsets, globals, maxFrameSize, + objectTypes, sourceMaps, staticHeaps, ...}), rest: unit -> unit }: unit = let + fun prints ss = List.foreach (ss, print) fun declareExports () = Ffi.declareExports {print = print} + + fun tyconTy tycon = + Vector.sub (objectTypes, ObjptrTycon.index tycon) + + fun declareGlobals () = + List.foreach + (CType.all, fn t => + let + val n = Global.numberOfType t + fun doit init = + let + val s = CType.toString t + in + prints ["PRIVATE ", s, " global", s, "[", C.int n, "]"] + ; Option.app (init, fn vs => (print " = {" + ; List.foreachi (vs, fn (i,v) => (if i > 0 + then print ", " + else () + ; print v)) + ; print "}")) + ; print ";\n" + end + fun doit' (sel, check, default, toC) = + (doit o SOME o List.tabulate) + (n, fn i => + case List.peek (sel globals, fn (v, g) => + Int.equals (i, Global.index g) + andalso check v) of + NONE => default + | SOME (v, _) => toC v) + fun doitReal rs = + doit' (#reals, fn r => RealSize.equals (rs, RealX.size r), + RealX.toC (RealX.zero rs), RealX.toC) + fun doitObjptr () = + doit' (#objptrs, fn _ => true, + concat ["(", CType.toString CType.Objptr, ")", + WordX.toC (WordX.one (WordSize.objptr ()))], + StaticHeap.Ref.toC) + in + case (n > 0, t) of + (_, CType.Objptr) => doitObjptr () + | (true, CType.Real32) => doitReal RealSize.R32 + | (true, CType.Real64) => doitReal RealSize.R64 + | (true, _) => doit NONE + | _ => () + end) + fun declareLoadSaveGlobals () = let + val unused = + List.forall (CType.all, fn t => Global.numberOfType t = 0) val _ = - (print "static int saveGlobals (FILE *f) {\n" + (print "static int saveGlobals (" + ; if unused then print "__attribute__ ((unused))" else () + ; print " FILE *f) {\n" ; (List.foreach (CType.all, fn t => - print (concat ["\tSaveArray (global", - CType.toString t, ", f);\n"]))) + if Global.numberOfType t > 0 + then prints ["\tSaveArray (global", + CType.toString t, ", f);\n"] + else ())) ; print "\treturn 0;\n}\n") val _ = - (print "static int loadGlobals (FILE *f) {\n" + (print "static int loadGlobals (" + ; if unused then print "__attribute__ ((unused))" else () + ; print " FILE *f) {\n" ; (List.foreach (CType.all, fn t => - print (concat ["\tLoadArray (global", - CType.toString t, ", f);\n"]))) + if Global.numberOfType t > 0 + then prints ["\tLoadArray (global", + CType.toString t, ", f);\n"] + else ())) ; print "\treturn 0;\n}\n") in () end - fun declareIntInfs () = - (print "BeginIntInfInits\n" - ; (List.foreach - (intInfs, fn (g, i) => - (C.callNoSemi ("IntInfInitElem", - [C.int (Global.index g), - C.string (IntInf.toString i)], - print) - ; print "\n"))) - ; print "EndIntInfInits\n") - fun declareStrings () = - (print "BeginVectorInits\n" - ; (List.foreach - (vectors, fn (g, v) => - (C.callNoSemi ("VectorInitElem", - [C.string (WordXVector.toString v), - C.int (Bytes.toInt - (WordSize.bytes - (WordXVector.elementSize v))), - C.int (Global.index g), - C.int (WordXVector.length v)], - print) - ; print "\n"))) - ; print "EndVectorInits\n") - fun declareReals () = - (print "static void real_Init() {\n" - ; List.foreach (reals, fn (g, r) => - print (concat ["\tglobalReal", - RealSize.toString (RealX.size r), - "[", C.int (Global.index g), "] = ", - RealX.toC r, ";\n"])) - ; print "}\n") - fun declareFrameOffsets () = - Vector.foreachi - (frameOffsets, fn (i, v) => - (print (concat ["static uint16_t frameOffsets", C.int i, "[] = {"]) - ; print (C.int (Vector.length v)) - ; Vector.foreach (v, fn i => (print ","; print (C.bytes i))) - ; print "};\n")) + + fun declareStaticHeaps () = + let + open StaticHeap + val declareCSymbol = + let + val seen = String.memoize (fn _ => ref false) + in + fn CSymbol.T {name, cty, symbolScope} => + let + fun doit () = + (print o concat) + [case symbolScope of + CSymbolScope.External => "EXTERNAL " + | CSymbolScope.Private => "PRIVATE " + | CSymbolScope.Public => "PUBLIC ", + "extern ", + CType.toString (Option.fold (cty, CType.Word8, #1)), + " ", + name, + ";\n"] + val seen = seen name + in + if !seen + then () + else (seen := true; doit ()) + end + end + + fun sym k = Label.toString (Kind.label k) + fun ty k = concat [sym k, "Ty"] + + fun mkPadTy (next, offset) = + if Bytes.equals (next, offset) + then NONE + else let + val psize = Bytes.- (offset, next) + val pad = + concat [CType.toString CType.Word8, + " pad", Bytes.toString next, + "[", Bytes.toString psize, "]"] + in + SOME pad + end + + fun mkFieldTys (init, size) = + let + fun maybePad (next, offset, fieldTys) = + Option.fold (mkPadTy (next, offset), fieldTys, op ::) + val (fieldTys, next) = + Vector.fold + (init, ([], Bytes.zero), fn ({offset, src}, (fieldTys, next)) => + let + val fieldTys = maybePad (next, offset, fieldTys) + val fldCType = Type.toCType (Elem.ty src) + val fld = concat [CType.toString fldCType, + " fld", Bytes.toString offset] + in + (fld::fieldTys, Bytes.+ (offset, CType.size fldCType)) + end) + val fieldTys = maybePad (next, size, fieldTys) + in + List.rev fieldTys + end + + val headerTy = CType.objptrHeader () + val counterTy = CType.seqIndex () + val lengthTy = CType.seqIndex () + + fun mkPad (next, offset) = + if Bytes.equals (next, offset) + then NONE + else let + val psize = Bytes.- (offset, next) + val pad = + (C.string o String.tabulate) + (Bytes.toInt psize, fn _ => #"\000") + in + SOME pad + end + + fun mkFields (init, size) = + let + fun maybePad (next, offset, fields) = + Option.fold (mkPad (next, offset), fields, op ::) + val (fields, next) = + Vector.fold + (init, ([], Bytes.zero), fn ({offset, src}, (fields, next)) => + let + val fields = maybePad (next, offset, fields) + val fldCType = Type.toCType (Elem.ty src) + val fld = Elem.toC src + in + (fld::fields, Bytes.+ (offset, CType.size fldCType)) + end) + val fields = maybePad (next, size, fields) + in + List.rev fields + end + + fun mkHeader tycon = + WordX.toC (ObjptrTycon.toHeader tycon) + val counter = + WordX.toC (WordX.zero (WordSize.seqIndex ())) + fun mkLength length = + WordX.toC (WordX.fromInt (length, WordSize.seqIndex ())) + + val _ = + List.foreach + (Kind.all, fn k => + (print "typedef " + ; (case k of + Kind.Dynamic => print "const " + | Kind.Immutable => print "const " + | _ => ()) + ; print "struct __attribute__ ((aligned(16), packed)) {\n" + ; (Vector.foreachi + (staticHeaps k, fn (i, obj) => + (print "struct __attribute__ ((packed)) {" + ; (case obj of + Object.Normal {init, tycon} => + let + val size = ObjectType.componentsSize (tyconTy tycon) + in + print "struct __attribute__ ((packed)) {" + ; print (CType.toString headerTy) + ; print " header;" + ; print "} metadata;" + ; print " " + ; print "struct __attribute__ ((packed)) {" + ; List.foreachi + (mkFieldTys (init, size), fn (i, fldTy) => + (if i > 0 then print " " else () + ; print fldTy + ; print ";")) + ; print "} data;" + end + | Object.Sequence {init, tycon} => + let + val {components, ...} = ObjectType.deSequence (tyconTy tycon) + val size = ObjectType.componentsSize (tyconTy tycon) + val length = Vector.length init + in + print "struct __attribute__ ((packed)) {" + ; print (CType.toString counterTy) + ; print " counter;" + ; print " " + ; print (CType.toString lengthTy) + ; print " length;" + ; print " " + ; print (CType.toString headerTy) + ; print " header;" + ; print "} metadata;" + ; print " " + ; if Prod.length components = 1 + andalso Type.equals (#elt (Prod.first components), + Type.word WordSize.word8) + then print (CType.toString CType.Word8) + else (print "struct __attribute__ ((packed)) {" + ; if length > 0 + then List.foreachi + (mkFieldTys (Vector.first init, size), + fn (i, fldTy) => + (if i > 0 then print " " else () + ; print fldTy + ; print ";")) + else () + ; print "}") + ; print " data[" + ; print (C.int length) + ; print "];" + ; let + val next = Bytes.+ (Runtime.sequenceMetaDataSize (), + Bytes.* (size, + IntInf.fromInt length)) + val size = + case !Control.align of + Control.Align4 => Bytes.alignWord32 next + | Control.Align8 => Bytes.alignWord64 next + in + Option.app (mkPadTy (next, size), fn pad => + (print " " + ; print pad + ; print ";")) + end + end) + ; print "} obj" + ; print (C.int i) + ; print ";\n"))) + ; print "struct __attribute__ ((packed)) {} end;\n" + ; print "} " + ; print (ty k) + ; print ";\n")) + val _ = + List.foreach + (Kind.all, fn k => + (print "PRIVATE " + ; print (ty k) + ; print " " + ; print (sym k) + ; print ";\n")) + val _ = + List.foreach + (Kind.all, fn k => + Vector.foreach + (staticHeaps k, fn obj => + let + datatype z = datatype Elem.t + fun loopElem e = + case e of + Cast (e, _) => loopElem e + | Const (Const.CSymbol s) => declareCSymbol s + | Const _ => () + | Ref _ => () + fun loopInit init = + Vector.foreach + (init, fn {offset = _, src} => + loopElem src) + in + case obj of + Object.Normal {init, ...} => + loopInit init + | Object.Sequence {init, ...} => + Vector.foreach (init, loopInit) + end)) + val _ = + List.foreach + (Kind.all, fn k => + (print "PRIVATE " + ; print (ty k) + ; print " " + ; print (sym k) + ; print " = {\n" + ; (Vector.foreach + (staticHeaps k, fn obj => + (print "{" + ; (case obj of + Object.Normal {init, tycon} => + let + val size = ObjectType.componentsSize (tyconTy tycon) + in + print "{" + ; print (mkHeader tycon) + ; print "," + ; print "}," + ; print "{" + ; List.foreach + (mkFields (init, size), fn fld => + (print fld; print ",")) + ; print "}," + end + | Object.Sequence (arg as {init, tycon}) => + let + val size = ObjectType.componentsSize (tyconTy tycon) + val length = Vector.length init + in + print "{" + ; print counter + ; print "," + ; print (mkLength length) + ; print "," + ; print (mkHeader tycon) + ; print "," + ; print "}," + ; (case (Object.deString arg, length > 0) of + (SOME s, true) => print (C.string s) + | _ => (print "{" + ; Vector.foreach + (init, fn init => + (print "{" + ; List.foreach + (mkFields (init, size), fn fld => + (print fld; print ",")) + ; print "},")) + ; print "}")) + ; print "," + ; let + val next = Bytes.+ (Runtime.sequenceMetaDataSize (), + Bytes.* (size, IntInf.fromInt length)) + val size = + case !Control.align of + Control.Align4 => Bytes.alignWord32 next + | Control.Align8 => Bytes.alignWord64 next + in + Option.app (mkPad (next, size), fn pad => + (print pad ; print ",")) + end + end) + ; print "},\n"))) + ; print "{},\n" + ; print "};\n")) + in + () + end + fun declareArray (ty: string, name: string, - v: 'a vector, - toString: int * 'a -> string) = - (print (concat ["static ", ty, " ", name, "[] = {\n"]) - ; Vector.foreachi (v, fn (i, x) => - print (concat ["\t", toString (i, x), ",\n"])) + {firstElemLen: bool, oneline: bool}, + data: 'a vector, + elemToString: int * 'a -> string) = + (print "static "; print ty; print " "; print name; print "[" + ; print (C.int (if firstElemLen + then 1 + Vector.length data + else Vector.length data)) + ; print "] = {" + ; if oneline then () else print "\n" + ; if firstElemLen + then (print (C.int (Vector.length data)) + ; print ",") + else () + ; Vector.foreachi + (data, fn (i, x) => + (if oneline + then () + else (print "\t /* "; print (C.int i); print ": */ ") + ; print (elemToString (i, x)); print "," + ; if oneline then () else print "\n")) ; print "};\n") - fun declareFrameLayouts () = - declareArray ("struct GC_frameLayout", "frameLayouts", frameLayouts, - fn (_, {frameOffsetsIndex, isC, size}) => - concat ["{", - if isC then "C_FRAME" else "ML_FRAME", - ", frameOffsets", C.int frameOffsetsIndex, - ", ", C.bytes size, - "}"]) + fun declareFrameInfos () = + (Vector.foreachi + (frameOffsets, fn (i, fo) => + declareArray ("const uint16_t", concat ["frameOffsets", C.int i], + {firstElemLen = true, oneline = true}, + FrameOffsets.offsets fo, + fn (_, offset) => C.bytes offset)) + ; declareArray ("const struct GC_frameInfo", "frameInfos", + {firstElemLen = false, oneline = false}, + frameInfos, fn (_, fi) => + concat ["{", + FrameInfo.Kind.toString (FrameInfo.kind fi), + ", frameOffsets", C.int (FrameOffsets.index (FrameInfo.frameOffsets fi)), + ", ", C.bytes (FrameInfo.size fi), + ", ", (case FrameInfo.sourceSeqIndex fi of + NONE => C.int 0 + | SOME ssi => C.int ssi), + "}"])) fun declareAtMLtons () = - declareArray ("char*", "atMLtons", !Control.atMLtons, C.string o #2) + declareArray ("char *", "atMLtons", + {firstElemLen = false, oneline = true}, + !Control.atMLtons, fn (_, s) => C.string s) fun declareObjectTypes () = declareArray - ("struct GC_objectType", "objectTypes", objectTypes, - fn (_, ty) => + ("const struct GC_objectType", "objectTypes", + {firstElemLen = false, oneline = false}, + objectTypes, fn (_, ty) => let datatype z = datatype Runtime.RObjectType.t val (tag, hasIdentity, bytesNonObjptrs, numObjptrs) = case ObjectType.toRuntime ty of - Array {hasIdentity, bytesNonObjptrs, numObjptrs} => - ("ARRAY_TAG", hasIdentity, - Bytes.toInt bytesNonObjptrs, numObjptrs) - | Normal {hasIdentity, bytesNonObjptrs, numObjptrs} => + Normal {hasIdentity, bytesNonObjptrs, numObjptrs} => ("NORMAL_TAG", hasIdentity, Bytes.toInt bytesNonObjptrs, numObjptrs) + | Sequence {hasIdentity, bytesNonObjptrs, numObjptrs} => + ("SEQUENCE_TAG", hasIdentity, + Bytes.toInt bytesNonObjptrs, numObjptrs) | Stack => ("STACK_TAG", false, 0, 0) | Weak {gone} => @@ -355,13 +697,13 @@ case !Control.align of Control.Align4 => Bytes.fromInt 4 | Control.Align8 => Bytes.fromInt 8 + val bytesMetaData = + Bits.toBytes (Control.Target.Size.normalMetaData ()) val bytesCPointer = Bits.toBytes (Control.Target.Size.cpointer ()) - val bytesHeader = - Bits.toBytes (Control.Target.Size.header ()) val bytesObject = - Bytes.+ (bytesHeader, + Bytes.+ (bytesMetaData, Bytes.+ (bytesCPointer, bytesObjptr)) val bytesTotal = @@ -381,10 +723,10 @@ ("WEAK_TAG", false, bytesNonObjptrs, numObjptrs) end in - concat ["{ ", tag, ", ", + concat ["{", tag, ", ", C.bool hasIdentity, ", ", C.int bytesNonObjptrs, ", ", - C.int numObjptrs, " }"] + C.int numObjptrs, "}"] end) fun declareMLtonMain () = let @@ -392,9 +734,17 @@ case !Control.align of Control.Align4 => 4 | Control.Align8 => 8 - val magic = C.word (case Random.useed () of - NONE => String.hash (!Control.inputFile) - | SOME w => w) + val magic = + let + val version = String.hash Version.version + val random = Random.word () + val magic = + Word.orb + (Word.<< (version, Word.fromInt (Word.wordSize - 8)), + Word.>> (random, Word.fromInt 8)) + in + WordX.fromWord (magic, WordSize.word32) + end val profile = case !Control.profile of Control.ProfileNone => "PROFILE_NONE" @@ -406,85 +756,68 @@ | Control.ProfileTimeField => "PROFILE_TIME_FIELD" | Control.ProfileTimeLabel => "PROFILE_TIME_LABEL" in - C.callNoSemi (case !Control.format of - Control.Archive => "MLtonLibrary" - | Control.Executable => "MLtonMain" - | Control.LibArchive => "MLtonLibrary" - | Control.Library => "MLtonLibrary", - [C.int align, - magic, - C.bytes maxFrameSize, - C.bool (!Control.markCards), - profile, - C.bool (!Control.profileStack)] - @ additionalMainArgs, - print) + print (C.callNoSemi (case !Control.format of + Control.Archive => "MLtonLibrary" + | Control.Executable => "MLtonMain" + | Control.LibArchive => "MLtonLibrary" + | Control.Library => "MLtonLibrary", + [C.int align, + WordX.toC magic, + C.bytes maxFrameSize, + C.bool (!Control.markCards), + profile, + C.bool (!Control.profileStack)] + @ additionalMainArgs)) ; print "\n" end fun declareMain () = if !Control.emitMain andalso !Control.format = Control.Executable - then List.foreach - (["int main (int argc, char* argv[]) {", - "return (MLton_main (argc, argv));", - "}"], fn s => (print s; print "\n")) + then print "int main (int argc, char* argv[]) { return (MLton_main (argc, argv)); }\n" else () - fun declareProfileInfo () = + fun declareSourceMaps () = let - fun doit (ProfileInfo.T {frameSources, labels, names, sourceSeqs, - sources}) = - (Vector.foreach (labels, fn {label, ...} => - declareProfileLabel (label, print)) - ; (Vector.foreachi - (sourceSeqs, fn (i, v) => - (print (concat ["static uint32_t sourceSeq", - Int.toString i, - "[] = {"]) - ; print (C.int (Vector.length v)) - ; Vector.foreach (v, fn i => - (print (concat [",", C.int i]))) - ; print "};\n"))) - ; declareArray ("uint32_t*", "sourceSeqs", sourceSeqs, fn (i, _) => - concat ["sourceSeq", Int.toString i]) - ; declareArray ("GC_sourceSeqIndex", "frameSources", frameSources, C.int o #2) - ; (declareArray - ("struct GC_sourceLabel", "sourceLabels", labels, - fn (_, {label, sourceSeqsIndex}) => - concat ["{(pointer)&", ProfileLabel.toString label, ", ", - C.int sourceSeqsIndex, "}"])) - ; declareArray ("char*", "sourceNames", names, C.string o #2) - ; declareArray ("struct GC_source", "sources", sources, - fn (_, {nameIndex, successorsIndex}) => - concat ["{ ", Int.toString nameIndex, ", ", - Int.toString successorsIndex, " }"])) + fun declareProfileLabel (l, print) = + print (C.call ("DeclareProfileLabel", [ProfileLabel.toString l])) + fun doit (SourceMaps.T {profileLabelInfos, sourceNames, sourceSeqs, sources}) = + (Vector.foreach (profileLabelInfos, fn {profileLabel, ...} => + declareProfileLabel (profileLabel, print)) + ; declareArray ("struct GC_profileLabelInfo", "profileLabelInfos", + {firstElemLen = false, oneline = false}, + profileLabelInfos, fn (_, {profileLabel, sourceSeqIndex}) => + concat ["{(pointer)&", ProfileLabel.toString profileLabel, ", ", + C.int sourceSeqIndex, "}"]) + ; declareArray ("const char * const", "sourceNames", + {firstElemLen = false, oneline = false}, + sourceNames, fn (_, s) => C.string s) + ; Vector.foreachi (sourceSeqs, fn (i, ss) => + declareArray ("const GC_sourceIndex", concat ["sourceSeq", C.int i], + {firstElemLen = true, oneline = true}, + ss, fn (_, {sourceIndex}) => C.int sourceIndex)) + ; declareArray ("const uint32_t * const", "sourceSeqs", + {firstElemLen = false, oneline = false}, + sourceSeqs, fn (i, _) => concat ["sourceSeq", Int.toString i]) + ; declareArray ("const struct GC_source", "sources", + {firstElemLen = false, oneline = false}, + sources, fn (_, {sourceNameIndex, successorSourceSeqIndex}) => + concat ["{ ", Int.toString sourceNameIndex, ", ", + Int.toString successorSourceSeqIndex, " }"])) in - case profileInfo of - NONE => doit ProfileInfo.empty + case sourceMaps of + NONE => doit SourceMaps.empty | SOME z => doit z end in - outputIncludes (includes, print) - ; declareGlobals ("PRIVATE ", print) + outputIncludes (includes, print); print "\n" + ; declareStaticHeaps (); print "\n" + ; declareGlobals (); print "\n" + ; declareLoadSaveGlobals (); print "\n" + ; declareFrameInfos (); print "\n" + ; declareObjectTypes (); print "\n" + ; declareSourceMaps (); print "\n" + ; declareAtMLtons (); print "\n" + ; rest (); print "\n" + ; declareMLtonMain (); declareMain (); print "\n" ; declareExports () - ; declareLoadSaveGlobals () - ; declareIntInfs () - ; declareStrings () - ; declareReals () - ; declareFrameOffsets () - ; declareFrameLayouts () - ; declareObjectTypes () - ; declareProfileInfo () - ; declareAtMLtons () - ; rest () - ; declareMLtonMain () - ; declareMain () - end - -structure Type = - struct - open Type - - fun toC (t: t): string = - CType.toString (Type.toCType t) end structure StackOffset = @@ -495,10 +828,9 @@ concat ["S", C.args [Type.toC ty, C.bytes offset]] end -fun contents (ty, z) = concat ["C", C.args [Type.toC ty, z]] - -fun declareFFI (Chunk.T {blocks, ...}, {print: string -> unit}) = +fun declareFFI (chunks, print) = let + val empty = ref true val seen = String.memoize (fn _ => ref false) fun doit (name: string, declare: unit -> string): unit = let @@ -506,126 +838,157 @@ in if !r then () - else (r := true; print (declare ())) + else (r := true; empty := false; print (declare ())) end + fun doitCSymbol (CSymbol.T {cty, name, symbolScope}) = + let + datatype z = datatype CSymbolScope.t + val cty = Option.fold (cty, CType.Word8, #1) + in + doit + (name, fn () => + concat [case symbolScope of + External => "EXTERNAL " + | Private => "PRIVATE " + | Public => "PUBLIC ", + "extern ", + CType.toString cty, + " ", + name, + ";\n"]) + end + fun doitOperand z = + case z of + Operand.Cast (z, _) => doitOperand z + | Operand.Const (Const.CSymbol sym) => doitCSymbol sym + | Operand.Offset {base, ...} => doitOperand base + | Operand.SequenceOffset {base, index, ...} => + (doitOperand base; doitOperand index) + | _ => () in - Vector.foreach - (blocks, fn Block.T {statements, transfer, ...} => - let - datatype z = datatype CFunction.SymbolScope.t - val _ = - Vector.foreach - (statements, fn s => - case s of - Statement.PrimApp {prim, ...} => - (case Prim.name prim of - Prim.Name.FFI_Symbol {name, cty, symbolScope} => - doit - (name, fn () => - concat [case symbolScope of - External => "EXTERNAL " - | Private => "PRIVATE " - | Public => "PUBLIC ", - "extern ", - case cty of - SOME x => CType.toString x - | NONE => "void", - " ", - name, - ";\n"]) - | _ => ()) - | _ => ()) - val _ = - case transfer of - Transfer.CCall {func, ...} => - let - datatype z = datatype CFunction.Target.t - val CFunction.T {target, ...} = func - in - case target of - Direct "Thread_returnToC" => () - | Direct name => - doit (name, fn () => - concat [CFunction.cPrototype func, ";\n"]) - | Indirect => () - end - | _ => () - in - () - end) + List.foreach + (chunks, fn Chunk.T {blocks, ...} => + Vector.foreach + (blocks, fn Block.T {statements, transfer, ...} => + let + val _ = + Vector.foreach + (statements, fn s => + Statement.foldOperands + (s, (), doitOperand o #1)) + val _ = + case transfer of + Transfer.CCall {func, ...} => + let + datatype z = datatype CFunction.Target.t + val CFunction.T {target, ...} = func + in + case target of + Direct "Thread_returnToC" => () + | Direct name => + doit (name, fn () => + concat [CFunction.cPrototype func, ";\n"]) + | Indirect => () + end + | _ => () + val () = + Transfer.foldOperands + (transfer, (), doitOperand o #1) + in + () + end)) + ; if !empty then () else print "\n" end -fun output {program as Machine.Program.T {chunks, - frameLayouts, - main = {chunkLabel, label}, ...}, +fun output {program as Machine.Program.T {chunks, frameInfos, main, ...}, outputC: unit -> {file: File.t, print: string -> unit, done: unit -> unit}} = let - datatype status = None | One | Many val {get = labelInfo: Label.t -> {block: Block.t, chunkLabel: ChunkLabel.t, - frameIndex: int option, - status: status ref, - layedOut: bool ref}, + index: int option, + marked: bool ref}, set = setLabelInfo, ...} = Property.getSetOnce - (Label.plist, Property.initRaise ("CCodeGen.info", Label.layout)) - val entryLabels: (Label.t * int) list ref = ref [] - val indexCounter = Counter.new (Vector.length frameLayouts) + (Label.plist, Property.initRaise ("CCodeGen.labelInfo", Label.layout)) + val nextChunks = Array.new (Vector.length frameInfos, NONE) val _ = List.foreach (chunks, fn Chunk.T {blocks, chunkLabel, ...} => Vector.foreach - (blocks, fn b as Block.T {kind, label, ...} => + (blocks, fn block as Block.T {kind, label, ...} => let - fun entry (index: int) = - List.push (entryLabels, (label, index)) - val frameIndex = + val index = case Kind.frameInfoOpt kind of - NONE => (if Kind.isEntry kind - then entry (Counter.next indexCounter) + NONE => NONE + | SOME fi => + let + val index = FrameInfo.index fi + in + if Kind.isEntry kind + then Array.update (nextChunks, index, SOME label) else () - ; NONE) - | SOME (FrameInfo.T {frameLayoutsIndex, ...}) => - (entry frameLayoutsIndex - ; SOME frameLayoutsIndex) + ; SOME index + end in - setLabelInfo (label, {block = b, + setLabelInfo (label, {block = block, chunkLabel = chunkLabel, - frameIndex = frameIndex, - layedOut = ref false, - status = ref None}) + index = index, + marked = ref false}) end)) - val a = Array.fromList (!entryLabels) - val () = QuickSort.sortArray (a, fn ((_, i), (_, i')) => i <= i') - val entryLabels = Vector.map (Vector.fromArray a, #1) + val nextChunks = Vector.keepAllMap (Vector.fromArray nextChunks, fn lo => lo) val labelChunk = #chunkLabel o labelInfo - val {get = chunkLabelIndex: ChunkLabel.t -> int, ...} = - Property.getSet (ChunkLabel.plist, - Property.initFun (let - val c = Counter.new 0 - in - fn _ => Counter.next c - end)) - val chunkLabelToString = C.int o chunkLabelIndex - fun declareChunk (Chunk.T {chunkLabel, ...}, print) = - C.call ("DeclareChunk", - [chunkLabelToString chunkLabel], - print) - val {get = labelIndex, set = setLabelIndex, ...} = - Property.getSetOnce (Label.plist, - Property.initRaise ("index", Label.layout)) - val _ = - Vector.foreachi (entryLabels, fn (i, l) => setLabelIndex (l, i)) - fun labelToStringIndex (l: Label.t): string = + val labelIndex = valOf o #index o labelInfo + fun labelIndexAsString (l, {pretty}) = let val s = C.int (labelIndex l) in - if 0 = !Control.Native.commented - then s - else concat [s, " /* ", Label.toString l, " */"] + if pretty + then concat ["/* ", Label.toString l, " */ ", s] + else s + end + + val amTimeProfiling = + !Control.profile = Control.ProfileTimeField + orelse !Control.profile = Control.ProfileTimeLabel + + fun declareChunk (chunkLabel, print: string -> unit) = + (print "PRIVATE extern ChunkFn_t " + ; print (ChunkLabel.toString chunkLabel) + ; print ";\n") + fun declareNextChunks (chunks, print) = + let + val {destroy, get} = + Property.destGet + (ChunkLabel.plist, Property.initFun (fn _ => ref false)) + val declareChunk = fn chunkLabel => + let + val seen = get chunkLabel + in + if !seen + then () + else (seen := true + ; declareChunk (chunkLabel, print)) + end + in + List.foreach + (chunks, fn Chunk.T {chunkLabel, blocks, ...} => + (declareChunk chunkLabel + ; Vector.foreach + (blocks, fn Block.T {transfer, ...} => + case transfer of + Transfer.Call {label, ...} => + declareChunk (labelChunk label) + | Transfer.Raise {raisesTo, ...} => + List.foreach (raisesTo, declareChunk o labelChunk) + | Transfer.Return {returnsTo, ...} => + List.foreach (returnsTo, declareChunk o labelChunk) + | _ => ()))) + ; destroy () + ; print "PRIVATE extern const ChunkFnPtr_t nextChunks[];\n" end + val handleMisaligned = let open Control @@ -654,198 +1017,151 @@ fun move {dst: string, dstIsMem: bool, src: string, srcIsMem: bool, ty: Type.t}: string = - if handleMisaligned ty then - case (dstIsMem, srcIsMem) of - (false, false) => concat [dst, " = ", src, ";\n"] - | (false, true) => concat [dst, " = ", fetch (src, ty), ";\n"] - | (true, false) => store ({dst = dst, src = src}, ty) - | (true, true) => move' ({dst = dst, src = src}, ty) - else - concat [dst, " = ", src, ";\n"] + if handleMisaligned ty + then (case (dstIsMem, srcIsMem) of + (false, false) => concat [dst, " = ", src, ";\n"] + | (false, true) => concat [dst, " = ", fetch (src, ty), ";\n"] + | (true, false) => store ({dst = dst, src = src}, ty) + | (true, true) => move' ({dst = dst, src = src}, ty)) + else concat [dst, " = ", src, ";\n"] + + fun creturnName (ct: CType.t): string = concat ["CReturn", CType.name ct] + fun temporaryName (ct, i) = + concat ["T", C.args [CType.name ct, Int.toString i]] local datatype z = datatype Operand.t fun toString (z: Operand.t): string = case z of - ArrayOffset {base, index, offset, scale, ty} => - concat ["X", C.args [Type.toC ty, - toString base, - toString index, - Scale.toString scale, - C.bytes offset]] - | Cast (z, ty) => concat ["(", Type.toC ty, ")", toString z] - | Contents {oper, ty} => contents (ty, toString oper) + Cast (z, ty) => concat ["(", Type.toC ty, ")", toString z] + | Const c => Const.toC c | Frontier => "Frontier" | GCState => "GCState" | Global g => - if Global.isRoot g - then concat ["G", - C.args [Type.toC (Global.ty g), - Int.toString (Global.index g)]] - else concat ["GPNR", C.args [Int.toString (Global.index g)]] - | Label l => labelToStringIndex l - | Null => "NULL" + concat ["G", C.args [Type.toC (Global.ty g), + Int.toString (Global.index g)]] + | Label l => labelIndexAsString (l, {pretty = true}) | Offset {base, offset, ty} => concat ["O", C.args [Type.toC ty, toString base, C.bytes offset]] - | Real r => RealX.toC r - | Register r => - concat [Type.name (Register.ty r), "_", - Int.toString (Register.index r)] + | SequenceOffset {base, index, offset, scale, ty} => + concat ["X", C.args [Type.toC ty, + toString base, + toString index, + Scale.toString scale, + C.bytes offset]] | StackOffset s => StackOffset.toString s | StackTop => "StackTop" - | Word w => WordX.toC w + | StaticHeapRef h => + concat ["H", + C.args [Type.toC (StaticHeap.Ref.ty h), + StaticHeap.Kind.name (StaticHeap.Ref.kind h), + C.bytes (StaticHeap.Ref.offset h)]] + | Temporary t => + temporaryName (Type.toCType (Temporary.ty t), Temporary.index t) in val operandToString = toString end + val chunkArgs = [Operand.GCState, Operand.StackTop, Operand.Frontier] fun fetchOperand (z: Operand.t): string = - if handleMisaligned (Operand.ty z) andalso Operand.isMem z then - fetch (operandToString z, Operand.ty z) - else - operandToString z - fun outputStatement (s, print) = - let - datatype z = datatype Statement.t - in - case s of - Noop => () - | _ => - (print "\t" - ; (case s of - Move {dst, src} => - print - (move {dst = operandToString dst, - dstIsMem = Operand.isMem dst, - src = operandToString src, - srcIsMem = Operand.isMem src, - ty = Operand.ty dst}) - | Noop => () - | PrimApp {args, dst, prim} => - let - fun call (): string = - concat - [Prim.toString prim, - " (", - concat - (List.separate - (Vector.toListMap (args, fetchOperand), - ", ")), - ")"] - fun app (): string = - case Prim.name prim of - Prim.Name.FFI_Symbol {name, ...} => - concat - ["((",CType.toString CType.CPointer, - ")(&", name, "))"] - | _ => call () - in - case dst of - NONE => (print (app ()) - ; print ";\n") - | SOME dst => - print (move {dst = operandToString dst, - dstIsMem = Operand.isMem dst, - src = app (), - srcIsMem = false, - ty = Operand.ty dst}) - end - | ProfileLabel l => - C.call ("ProfileLabel", [ProfileLabel.toString l], - print) - )) - end - val amTimeProfiling = - !Control.profile = Control.ProfileTimeField - orelse !Control.profile = Control.ProfileTimeLabel - fun outputChunk (chunk as Chunk.T {chunkLabel, blocks, regMax, ...}) = + if handleMisaligned (Operand.ty z) andalso Operand.isMem z + then fetch (operandToString z, Operand.ty z) + else operandToString z + + fun outputChunkFn (Chunk.T {chunkLabel, blocks, tempsMax, ...}, print) = let - val {done, print, ...} = outputC () - fun declareChunks () = - let - val {get, ...} = - Property.get (ChunkLabel.plist, - Property.initFun (fn _ => ref false)) - val _ = - Vector.foreach - (blocks, fn Block.T {transfer, ...} => - case transfer of - Transfer.Call {label, ...} => - get (labelChunk label) := true - | _ => ()) - val _ = - List.foreach - (chunks, fn c as Chunk.T {chunkLabel, ...} => - if ! (get chunkLabel) - then declareChunk (c, print) - else ()) - in - () - end - fun declareProfileLabels () = - Vector.foreach - (blocks, fn Block.T {statements, ...} => - Vector.foreach - (statements, fn s => - case s of - Statement.ProfileLabel l => declareProfileLabel (l, print) - | _ => ())) - (* Count how many times each label is jumped to. *) - fun jump l = + val selfChunk = chunkLabel + + fun prints ss = List.foreach (ss, print) + fun declareVar' (name, ty, unused, init) = + (print "\t" + ; if unused then print "UNUSED " else () + ; print ty + ; print " " + ; print name + ; case init of NONE => () | SOME v => (print " = "; print v) + ; print ";\n") + fun declareVar (name, ct, unused, init) = + declareVar' (name, CType.toString ct, unused, init) + + fun outputStatement s = let - val {status, ...} = labelInfo l + datatype z = datatype Statement.t in - case !status of - None => status := One - | One => status := Many - | Many => () + case s of + Move {dst, src} => + (print "\t" + ; print (move {dst = operandToString dst, + dstIsMem = Operand.isMem dst, + src = operandToString src, + srcIsMem = Operand.isMem src, + ty = Operand.ty dst})) + | PrimApp {args, dst, prim} => + let + fun call (): string = + C.callNoSemi + (Prim.toString prim, + Vector.toListMap (args, fetchOperand)) + val _ = print "\t" + in + case dst of + NONE => (print (call ()) + ; print ";\n") + | SOME dst => + print (move {dst = operandToString dst, + dstIsMem = Operand.isMem dst, + src = call (), + srcIsMem = false, + ty = Operand.ty dst}) + end + | ProfileLabel _ => Error.bug "CCodegen.outputStatement: ProfileLabel" end - fun force l = #status (labelInfo l) := Many - val _ = - Vector.foreach - (blocks, fn Block.T {kind, label, transfer, ...} => - let - val _ = if Kind.isEntry kind then jump label else () - datatype z = datatype Transfer.t - in - case transfer of - Arith {overflow, success, ...} => - (jump overflow; jump success) - | CCall {func, return, ...} => - if CFunction.maySwitchThreads func - then () - else Option.app (return, jump) - | Call {label, ...} => jump label - | Goto dst => jump dst - | Raise => () - | Return => () - | Switch s => Switch.foreachLabel (s, jump) - end) - fun push (return: Label.t, size: Bytes.t) = - (print "\t" - ; print (move {dst = (StackOffset.toString - (StackOffset.T - {offset = Bytes.- (size, Runtime.labelSize ()), - ty = Type.label return})), - dstIsMem = true, - src = operandToString (Operand.Label return), - srcIsMem = false, - ty = Type.label return}) - ; C.push (size, print) + local + fun mk (dst, src) () = + outputStatement (Statement.Move {dst = dst, src = src}) + val stackTop = Operand.StackTop + val gcStateStackTop = Operand.gcField GCField.StackTop + val frontier = Operand.Frontier + val gcStateFrontier = Operand.gcField GCField.Frontier + in + val cacheStackTop = mk (stackTop, gcStateStackTop) + val flushStackTop = mk (gcStateStackTop, stackTop) + val cacheFrontier = mk (frontier, gcStateFrontier) + val flushFrontier = mk (gcStateFrontier, frontier) + end + (* StackTop += size *) + fun adjStackTop (size: Bytes.t) = + (outputStatement (Statement.PrimApp + {args = Vector.new2 + (Operand.StackTop, + Operand.word + (WordX.fromBytes + (size, + WordSize.cptrdiff ()))), + dst = SOME Operand.StackTop, + prim = Prim.CPointer_add}) ; if amTimeProfiling - then print "\tFlushStackTop();\n" - else ()) + then flushStackTop () + else ()) + fun pop (fi: FrameInfo.t) = + adjStackTop (Bytes.~ (FrameInfo.size fi)) + fun push (return: Label.t, size: Bytes.t) = + (outputStatement (Statement.Move + {dst = Operand.stackOffset + {offset = Bytes.- (size, Runtime.labelSize ()), + ty = Type.label return}, + src = Operand.Label return}) + ; adjStackTop size) fun copyArgs (args: Operand.t vector): string list * (unit -> unit) = let fun usesStack z = case z of - Operand.ArrayOffset {base, index, ...} => - (usesStack base) orelse (usesStack index) - | Operand.Cast (z, _) => + Operand.Cast (z, _) => (usesStack z) - | Operand.Contents {oper, ...} => - (usesStack oper) | Operand.Offset {base, ...} => (usesStack base) + | Operand.SequenceOffset {base, index, ...} => + (usesStack base) orelse (usesStack index) | Operand.StackOffset _ => true | _ => false in @@ -853,205 +1169,194 @@ then let val _ = print "\t{\n" - val c = Counter.new 0 + val nextTmp = Counter.generator 0 val args = Vector.toListMap - (args, fn z => - if usesStack z + (args, fn arg => + if usesStack arg then let - val ty = Operand.ty z - val tmp = - concat ["tmp", - Int.toString (Counter.next c)] - val _ = - print - (concat - ["\t", Type.toC ty, " ", tmp, " = ", - fetchOperand z, ";\n"]) + val ty = Operand.ty arg + val tmp = concat ["tmp", Int.toString (nextTmp ())] + val _ = declareVar (tmp, Type.toCType ty, false, SOME (fetchOperand arg)) in tmp end - else fetchOperand z) + else fetchOperand arg) in (args, fn () => print "\t}\n") end else (Vector.toListMap (args, fetchOperand), fn () => ()) end - val tracePrintLabelCode = - Trace.trace - ("CCodegen.printLabelCode", - fn {block, layedOut, ...} => - Layout.record [("block", Label.layout (Block.label block)), - ("layedOut", Bool.layout (!layedOut))], - Unit.layout) - fun maybePrintLabel l = - if ! (#layedOut (labelInfo l)) - then () - else gotoLabel l - and gotoLabel arg = - traceGotoLabel - (fn l => - let - val info as {layedOut, ...} = labelInfo l - in - if !layedOut - then print (concat ["\tgoto ", Label.toString l, ";\n"]) - else printLabelCode info - end) arg - and printLabelCode arg = - tracePrintLabelCode - (fn {block = Block.T {kind, label = l, live, statements, - transfer, ...}, - layedOut, status, ...} => - let - val _ = layedOut := true - val _ = - case !status of - Many => - let - val s = Label.toString l - in - print s - ; print ":\n" - end - | _ => () - fun pop (fi: FrameInfo.t) = - (C.push (Bytes.~ (Program.frameSize (program, fi)), print) - ; if amTimeProfiling - then print "\tFlushStackTop();\n" - else ()) - val _ = - case kind of - Kind.Cont {frameInfo, ...} => pop frameInfo - | Kind.CReturn {dst, frameInfo, ...} => - (case frameInfo of - NONE => () - | SOME fi => pop fi - ; (Option.app - (dst, fn x => - let - val x = Live.toOperand x - val ty = Operand.ty x - in - print - (concat - ["\t", - move {dst = operandToString x, - dstIsMem = Operand.isMem x, - src = creturn ty, - srcIsMem = false, - ty = ty}]) - end))) - | Kind.Func => () - | Kind.Handler {frameInfo, ...} => pop frameInfo - | Kind.Jump => () - val _ = - if 0 = !Control.Native.commented - then () - else print (let open Layout - in toString - (seq [str "\t/* live: ", - Vector.layout Live.layout live, - str " */\n"]) - end) - val _ = Vector.foreach (statements, fn s => - outputStatement (s, print)) - val _ = outputTransfer (transfer, l) - in () - end) arg - and outputTransfer (t, source: Label.t) = + fun gotoLabel (l, {tab}) = + prints [if tab then "\tgoto " else "goto ", Label.toString l, ";\n"] + (* LeaveChunk(nextChunk, nextBlock) + if (TailCall) { + return nextChunk(gcState, stackTop, frontier, nextBlock); + } else { + flushFrontier(); + flushStackTop(); + return nextBlock; + } + *) + fun leaveChunk (nextChunk, nextBlock) = + if !Control.chunkTailCall + then (print "\treturn " + ; print (C.call (nextChunk, + List.map (chunkArgs, operandToString) + @ [nextBlock]))) + else (flushFrontier () + ; flushStackTop () + ; print "\treturn " + ; print nextBlock + ; print ";\n") + (* IndJump(mustReturnToSelf, mayReturnToSelf, mustReturnToOther) + nextBlock = *(uintptr_t* )(StackTop - sizeof(uintptr_t)); + if (mustReturnToSelf) { + goto doSwitchNextBlock; + } else { + ChunkFnPtr_t nextChunk = nextChunks[nextBlock]; + if (mayReturnToSelf && (nextChunk == selfChunk)) { + goto doSwitchNextBlock; + } + if (mustReturnToOther != NULL) { + LeaveChunk( *mustReturnToOther, nextBlock); + } else { + LeaveChunk( *nextChunk, nextBlock); + } + } + *) + fun indJump (mustReturnToSelf, mayReturnToSelf, mustReturnToOther) = + let + val _ = print "\tnextBlock = " + val _ = print (operandToString + (Operand.stackOffset + {offset = Bytes.~ (Runtime.labelSize ()), + ty = Type.label (Label.newNoname ())})) + val _ = print ";\n" + in + if mustReturnToSelf + then print "\tgoto doSwitchNextBlock;\n" + else let + val doNextChunk = + Promise.delay + (fn () => + print "\tnextChunk = nextChunks[nextBlock];\n") + val _ = + if mayReturnToSelf + then (Promise.force doNextChunk + ; print "\tif (nextChunk == &" + ; print (ChunkLabel.toString selfChunk) + ; print ") { goto doSwitchNextBlock; }\n") + else () + val _ = + case mustReturnToOther of + NONE => (Promise.force doNextChunk; leaveChunk ("(*nextChunk)", "nextBlock")) + | SOME dstChunk => leaveChunk (ChunkLabel.toString dstChunk, "nextBlock") + in + () + end + end + fun outputTransfer t = let - fun iff (test, a, b) = - (force a - ; C.call ("\tBNZ", [test, Label.toString a], print) - ; gotoLabel b - ; maybePrintLabel a) datatype z = datatype Transfer.t + fun jump label = + let + val dstChunk = labelChunk label + in + if ChunkLabel.equals (dstChunk, selfChunk) + then gotoLabel (label, {tab = true}) + else leaveChunk (ChunkLabel.toString dstChunk, + labelIndexAsString (label, {pretty = true})) + end + fun rtrans rsTo = + let + val mustRToOne = + case rsTo of + [] => NONE + | l::rsTo => + if List.forall (rsTo, fn l' => Label.equals (l, l')) + then SOME l + else NONE + fun isSelf c = ChunkLabel.equals (selfChunk, c) + val rsTo = + List.fold + (rsTo, [], fn (l, cs) => + let + val c = labelChunk l + in + if List.contains (cs, c, ChunkLabel.equals) + then cs + else c::cs + end) + val mayRToSelf = List.exists (rsTo, isSelf) + val (mustRToSelf, mustRToOther) = + case List.revKeepAll (rsTo, not o isSelf) of + [] => (true, NONE) + | c::rsTo => + (false, + if List.forall (rsTo, fn c' => ChunkLabel.equals (c, c')) + then SOME c + else NONE) + in + case (!Control.chunkMustRToSingOpt, mustRToOne) of + (true, SOME dst) => jump dst + | _ => + indJump (!Control.chunkMustRToSelfOpt andalso mustRToSelf, + !Control.chunkMayRToSelfOpt andalso mayRToSelf, + if (!Control.chunkMustRToOtherOpt andalso + (!Control.chunkMayRToSelfOpt orelse not mayRToSelf)) + then mustRToOther + else NONE) + end + val _ = + if !Control.codegenComments > 0 + then (print "\t/* " + ; print (Layout.toString (Transfer.layout t)) + ; print " */\n") + else () in case t of - Arith {prim, args, dst, overflow, success, ...} => + CCall {func = + CFunction.T + {target = + CFunction.Target.Direct "Thread_returnToC", ...}, + return = SOME {return, size = SOME size}, ...} => + (push (return, size); + flushFrontier (); + flushStackTop (); + print "\treturn "; + print (C.call ("Thread_returnToC", []))) + | CCall {args, func, return} => let - val prim = - let - datatype z = datatype Prim.Name.t - fun const i = - case Vector.sub (args, i) of - Operand.Word _ => true - | _ => false - fun const0 () = const 0 - fun const1 () = const 1 - in - case Prim.name prim of - Word_addCheck _ => - concat [Prim.toString prim, - if const0 () - then "CX" - else if const1 () - then "XC" - else ""] - | Word_mulCheck _ => Prim.toString prim - | Word_negCheck _ => Prim.toString prim - | Word_subCheck _ => - concat [Prim.toString prim, - if const0 () - then "CX" - else if const1 () - then "XC" - else ""] - | _ => Error.bug "CCodegen.outputTransfer: Arith" - end - val _ = force overflow - in - print "\t" - ; C.call (prim, - operandToString dst - :: (Vector.toListMap (args, operandToString) - @ [Label.toString overflow]), - print) - ; gotoLabel success - ; maybePrintLabel overflow - end - | CCall {args, frameInfo, func, return} => - let - val CFunction.T {maySwitchThreads, - modifiesFrontier, - readsStackTop, - return = returnTy, - target, - writesStackTop,...} = func + val CFunction.T {return = returnTy, target, ...} = func val (args, afterCall) = - case frameInfo of + case return of NONE => (Vector.toListMap (args, fetchOperand), fn () => ()) - | SOME frameInfo => + | SOME {size = NONE, ...} => + (Vector.toListMap (args, fetchOperand), + fn () => ()) + | SOME {return, size = SOME size} => let - val size = - Program.frameSize (program, frameInfo) val res = copyArgs args - val _ = push (valOf return, size) + val _ = push (return, size) in res end - val _ = - if modifiesFrontier - then print "\tFlushFrontier();\n" - else () - val _ = - if readsStackTop - then print "\tFlushStackTop();\n" - else () + val _ = if CFunction.modifiesFrontier func then flushFrontier () else () + val _ = if CFunction.readsStackTop func then flushStackTop () else () val _ = print "\t" val _ = if Type.isUnit returnTy then () - else print (concat [creturn returnTy, " = "]) + else prints [creturnName (Type.toCType returnTy), " = "] datatype z = datatype CFunction.Target.t val _ = case target of - Direct name => C.call (name, args, print) + Direct name => print (C.call (name, args)) | Indirect => let val (fptr,args) = @@ -1063,171 +1368,436 @@ CFunction.cPointerType func, " ", fptr, "))"] in - C.call (name, args, print) + print (C.call (name, args)) end val _ = afterCall () val _ = - if modifiesFrontier - then print "\tCacheFrontier();\n" + if CFunction.modifiesFrontier func + then cacheFrontier () else () val _ = - if writesStackTop - then print "\tCacheStackTop();\n" + if CFunction.writesStackTop func + then cacheStackTop () else () val _ = - if maySwitchThreads - then print "\tReturn();\n" - else Option.app (return, gotoLabel) + if CFunction.maySwitchThreadsFrom func + then indJump (false, true, NONE) + else (case return of + NONE => (print "\treturn " + ; print (C.call ("MLton_unreachable", []))) + | SOME {return, ...} => gotoLabel (return, {tab = true})) in () end | Call {label, return, ...} => + (Option.app (return, fn {return, size, ...} => push (return, size)) + ; jump label) + | Goto dst => gotoLabel (dst, {tab = true}) + | Raise {raisesTo} => + (outputStatement (Statement.PrimApp + {args = Vector.new2 + (Operand.gcField GCField.StackBottom, + Operand.gcField GCField.ExnStack), + dst = SOME Operand.StackTop, + prim = Prim.CPointer_add}) + ; rtrans raisesTo) + | Return {returnsTo} => rtrans returnsTo + | Switch (Switch.T {cases, default, expect, test, ...}) => let - val dstChunk = labelChunk label - val _ = - case return of - NONE => () - | SOME {return, size, ...} => - push (return, size) + val test = operandToString test + val test = + case expect of + NONE => test + | SOME w => concat ["Expect (", test, ", ", WordX.toC w, ")"] + fun bnz (lnz, lz) = + (print "\tif (" + ; print test + ; print ") goto " + ; print (Label.toString lnz) + ; print "; else goto " + ; print (Label.toString lz) + ; print ";\n") + fun switch () = + (print "\tswitch (" + ; print test + ; print ") {\n" + ; Vector.foreach + (cases, fn (w, l) => (print "\tcase " + ; print (WordX.toC w) + ; print ": " + ; gotoLabel (l, {tab = false}))) + ; print "\tdefault: " + ; (case default of + NONE => print (C.call ("Unreachable", [])) + | SOME default => gotoLabel (default, {tab = false})) + ; print "\t}\n") in - if ChunkLabel.equals (labelChunk source, dstChunk) - then gotoLabel label - else - C.call ("\tFarJump", - [chunkLabelToString dstChunk, - labelToStringIndex label], - print) - end - | Goto dst => gotoLabel dst - | Raise => C.call ("\tRaise", [], print) - | Return => C.call ("\tReturn", [], print) - | Switch switch => - let - fun bool (test: Operand.t, t, f) = - iff (operandToString test, t, f) - fun doit {cases: (string * Label.t) vector, - default: Label.t option, - test: Operand.t}: unit = - let - val test = operandToString test - fun switch (cases: (string * Label.t) vector, - default: Label.t): unit = - (print "switch (" - ; print test - ; print ") {\n" - ; (Vector.foreach - (cases, fn (n, l) => (print "case " - ; print n - ; print ":\n" - ; gotoLabel l))) - ; print "default:\n" - ; gotoLabel default - ; print "}\n") - in - case (Vector.length cases, default) of - (0, NONE) => - Error.bug "CCodegen.outputTransfers: Switch" - | (0, SOME l) => gotoLabel l - | (1, NONE) => - gotoLabel (#2 (Vector.sub (cases, 0))) - | (_, NONE) => - switch (Vector.dropPrefix (cases, 1), - #2 (Vector.sub (cases, 0))) - | (_, SOME l) => switch (cases, l) - end - val Switch.T {cases, default, test, ...} = switch - fun normal () = - doit {cases = Vector.map (cases, fn (c, l) => - (WordX.toC c, l)), - default = default, - test = test} - in - if 2 = Vector.length cases - andalso Option.isNone default - then + case (Vector.length cases, default) of + (0, NONE) => Error.bug "CCodegen.outputTransfer: Switch" + | (0, SOME ld) => gotoLabel (ld, {tab = true}) + | (1, NONE) => gotoLabel (#2 (Vector.sub (cases, 0)), {tab = true}) + | (1, SOME ld) => + let + val (w, l) = Vector.sub (cases, 0) + in + if WordX.isZero w + then bnz (ld, l) + else switch () + end + | (2, NONE) => let - val (c0, l0) = Vector.sub (cases, 0) - val (c1, l1) = Vector.sub (cases, 1) - val i0 = WordX.toIntInf c0 - val i1 = WordX.toIntInf c1 + val (wa, la) = Vector.sub (cases, 0) + val (wb, lb) = Vector.sub (cases, 1) in - if i0 = 0 andalso i1 = 1 - then bool (test, l1, l0) - else if i0 = 1 andalso i1 = 0 - then bool (test, l0, l1) - else normal () + if WordX.isZero wa + then bnz (lb, la) + else if WordX.isZero wb + then bnz (la, lb) + else switch () end - else normal () + | _ => switch () end end - fun declareRegisters () = - List.foreach - (CType.all, fn t => + val outputStatement = fn s => + let + val _ = + if !Control.codegenComments > 1 + then (print "\t/* " + ; print (Layout.toString (Statement.layout s)) + ; print " */\n") + else () + in + outputStatement s + end + (* Fusing of adjacent `Word_` and `Word{S,U}_CheckP` + * primitives *does not* depend on the relative order of `!a` and `?a` + * in /basis-library/primitive/prim1.sml:mkOverflow + *) + fun outputStatementsFuseOpAndChk statements = + (ignore o Vector.foldi) + (statements, false, fn (i, s1, skip) => let - val pre = concat ["\t", CType.toString t, " ", - CType.name t, "_"] + fun default () = (outputStatement s1; false) in - Int.for (0, 1 + regMax t, fn i => - print (concat [pre, C.int i, ";\n"])) + if skip then false else + case s1 of + Statement.PrimApp {args = args1, dst = SOME dst1, prim = prim1} => + let + fun fuse chk = + (case Vector.sub (statements, i + 1) of + s2 as Statement.PrimApp {args = args2, dst = SOME dst2, prim = prim2} => + if Vector.equals (args1, args2, Operand.equals) + then (case chk prim2 of + NONE => default () + | SOME (prim, (ws, {signed})) => + let + val name = + String.substituteFirst + (Prim.toString prim, + {substring = "CheckP", + replacement = "AndCheck"}) + val _ = + if !Control.codegenComments > 1 + then (print "\t/* " + ; print (Layout.toString (Statement.layout s1)) + ; print " */\n" + ; print "\t/* " + ; print (Layout.toString (Statement.layout s2)) + ; print " */\n") + else () + val _ = print "\t{\n" + val _ = print "\tWord" + val _ = print (if signed then "S" else "U") + val _ = print (WordSize.toString ws) + val _ = print " w;\n" + val _ = print "\tBool b;\n" + val _ = print "\t" + val _ = + print (C.call (name, + Vector.toListMap (args1, fetchOperand) @ + ["&w", "&b"])) + val _ = print "\t" + val _ = + print (move {dst = operandToString dst1, + dstIsMem = Operand.isMem dst1, + src = "w", + srcIsMem = false, + ty = Operand.ty dst1}) + val _ = print "\t" + val _ = + print (move {dst = operandToString dst2, + dstIsMem = Operand.isMem dst2, + src = "b", + srcIsMem = false, + ty = Operand.ty dst2}) + val _ = print "\t}\n" + in + true + end) + else default () + | _ => default ()) + handle Subscript => default () + in + case prim1 of + Prim.Word_add ws1 => + fuse (fn prim2 => + case prim2 of + Prim.Word_addCheckP (z as (ws2, _)) => + if WordSize.equals (ws1, ws2) + then SOME (prim2, z) + else NONE + | _ => NONE) + | Prim.Word_addCheckP (z as (ws1, _)) => + fuse (fn prim2 => + case prim2 of + Prim.Word_add ws2 => + if WordSize.equals (ws1, ws2) + then SOME (prim1, z) + else NONE + | _ => NONE) + | Prim.Word_mul (ws1, {signed = signed1}) => + fuse (fn prim2 => + case prim2 of + Prim.Word_mulCheckP (z as (ws2, {signed = signed2})) => + if WordSize.equals (ws1, ws2) + andalso Bool.equals (signed1, signed2) + then SOME (prim2, z) + else NONE + | _ => NONE) + | Prim.Word_mulCheckP (z as (ws1, {signed = signed1})) => + fuse (fn prim2 => + case prim2 of + Prim.Word_mul (ws2, {signed = signed2}) => + if WordSize.equals (ws1, ws2) + andalso Bool.equals (signed1, signed2) + then SOME (prim1, z) + else NONE + | _ => NONE) + | Prim.Word_neg ws1 => + fuse (fn prim2 => + case prim2 of + Prim.Word_negCheckP (z as (ws2, _)) => + if WordSize.equals (ws1, ws2) + then SOME (prim2, z) + else NONE + | _ => NONE) + | Prim.Word_negCheckP (z as (ws1, _)) => + fuse (fn prim2 => + case prim2 of + Prim.Word_neg ws2 => + if WordSize.equals (ws1, ws2) + then SOME (prim1, z) + else NONE + | _ => NONE) + | Prim.Word_sub ws1 => + fuse (fn prim2 => + case prim2 of + Prim.Word_subCheckP (z as (ws2, _)) => + if WordSize.equals (ws1, ws2) + then SOME (prim2, z) + else NONE + | _ => NONE) + | Prim.Word_subCheckP (z as (ws1, _)) => + fuse (fn prim2 => + case prim2 of + Prim.Word_sub ws2 => + if WordSize.equals (ws1, ws2) + then SOME (prim1, z) + else NONE + | _ => NONE) + | _ => default () + end + | _ => default () end) - fun outputOffsets () = - List.foreach - ([("ExnStackOffset", GCField.ExnStack), - ("FrontierOffset", GCField.Frontier), - ("StackBottomOffset", GCField.StackBottom), - ("StackTopOffset", GCField.StackTop)], - fn (name, f) => - print (concat ["#define ", name, " ", - Bytes.toString (GCField.offset f), "\n"])) + fun outputBlock (Block.T {kind, label, statements, transfer, ...}) = + let + val _ = prints [Label.toString label, ":\n"] + val _ = + case kind of + Kind.Cont {frameInfo, ...} => pop frameInfo + | Kind.CReturn {dst, frameInfo, ...} => + (Option.app (frameInfo, pop) + ; (Option.app + (dst, fn x => + let + val x = Live.toOperand x + val ty = Operand.ty x + in + print "\t" + ; (print o move) + {dst = operandToString x, + dstIsMem = Operand.isMem x, + src = creturnName (Type.toCType ty), + srcIsMem = false, + ty = ty} + end))) + | Kind.Func _ => () + | Kind.Handler {frameInfo, ...} => pop frameInfo + | Kind.Jump => () + val _ = + if !Control.codegenFuseOpAndChk + then outputStatementsFuseOpAndChk statements + else Vector.foreach (statements, outputStatement) + val _ = outputTransfer transfer + val _ = print "\n" + in + () + end + + val dfsBlocks = ref [] + fun visit label = + let + val {block as Block.T {transfer, ...}, marked, ...} = labelInfo label + datatype z = datatype Transfer.t + in + if !marked + then () + else (marked := true; + List.push (dfsBlocks, block); + case transfer of + CCall {return, ...} => + Option.app (return, visit o #return) + | Call _ => () + | Goto dst => visit dst + | Raise _ => () + | Return _ => () + | Switch (Switch.T {cases, default, ...}) => + (Vector.foreach (cases, visit o #2); + Option.app (default, visit))) + end + val entries = + let + val entries = ref [] + val _ = + Vector.foreach + (blocks, fn Block.T {kind, label, ...} => + if Kind.isEntry kind + then (List.push (entries, (label, labelIndex label)) + ; visit label) + else ()) + in + List.insertionSort (!entries, fn ((_, i1), (_, i2)) => i1 <= i2) + end + + val _ = print "PRIVATE uintptr_t " + val _ = print (C.callNoSemi (ChunkLabel.toString chunkLabel, + List.map + (chunkArgs, fn oper => + concat ["UNUSED ", + CType.toString (Type.toCType (Operand.ty oper)), + " ", + operandToString oper]) + @ ["uintptr_t nextBlock"])) + val _ = print " {\n\n" + + val _ = declareVar' ("nextChunk", "ChunkFnPtr_t", true, NONE) + val _ = List.foreach (CType.all, fn t => declareVar (creturnName t, t, true, NONE)) + val _ = List.foreach (CType.all, fn t => + Int.for (0, 1 + tempsMax t, fn i => + declareVar (temporaryName (t, i), t, false, NONE))) + val _ = print "\n" + val _ = print "doSwitchNextBlock: UNUSED;\n" + val _ = + if !Control.chunkJumpTable + then (print "\tstatic void* const nextLabels[" + ; print (C.int (List.length entries)) + ; print "] = {\n" + ; List.foreach + (entries, fn (label, index) => + (print "\t/* " + ; print (C.int index) + ; print " */ &&" + ; print (Label.toString label) + ; print ",\n")) + ; print "\t};\n" + ; print "\tgoto *nextLabels[nextBlock - " + ; print (C.int (#2 (List.first entries))) + ; print "];\n\n") + else (print "\tswitch (nextBlock) {\n" + ; List.foreach + (entries, fn (label, index) => + (print "\tcase " + ; print (C.int index) + ; print ": goto " + ; print (Label.toString label) + ; print ";\n")) + ; print "\tdefault: Unreachable();\n" + ; print "\t}\n\n") + val _ = List.foreach (List.rev (!dfsBlocks), outputBlock) + val _ = print "} /* " + val _ = print (ChunkLabel.toString chunkLabel) + val _ = print " */\n\n" in - outputIncludes (["c-chunk.h"], print) - ; outputOffsets () - ; declareGlobals ("PRIVATE extern ", print) - ; declareFFI (chunk, {print = print}) - ; declareChunks () - ; declareProfileLabels () - ; C.callNoSemi ("Chunk", [chunkLabelToString chunkLabel], print) - ; print "\n" - ; declareRegisters () - ; C.callNoSemi ("ChunkSwitch", [chunkLabelToString chunkLabel], - print) - ; print "\n" - ; Vector.foreach (blocks, fn Block.T {kind, label, ...} => - if Kind.isEntry kind - then (print "case " - ; print (labelToStringIndex label) - ; print ":\n" - ; gotoLabel label) - else ()) - ; print "EndChunk\n" + () + end + + fun declareStaticHeaps (prefix: string, print) = + List.foreach + (StaticHeap.Kind.all, fn k => + print (concat [prefix, "PointerAux ", + Label.toString (StaticHeap.Kind.label k), + ";\n"])) + + fun outputChunks chunks = + let + val {done, print, ...} = outputC () + in + outputIncludes (["c-chunk.h"], print); print "\n" + ; declareGlobals ("PRIVATE extern ", print); print "\n" + ; declareStaticHeaps ("PRIVATE extern ", print); print "\n" + ; declareNextChunks (chunks, print); print "\n" + ; declareFFI (chunks, print) + ; List.foreach (chunks, fn chunk => outputChunkFn (chunk, print)) ; done () end - val additionalMainArgs = - [chunkLabelToString chunkLabel, - labelToStringIndex label] + val chunksWithSizes = + List.revMap + (chunks, fn chunk as Chunk.T {blocks, ...} => + (chunk, + Vector.fold + (blocks, 0, fn (Block.T {statements, ...}, n) => + n + Vector.length statements + 1))) + fun batch (chunksWithSizes, acc, n) = + case chunksWithSizes of + [] => outputChunks acc + | (chunk, s)::chunksWithSizes' => + let + val m = n + s + in + if List.isEmpty acc orelse m <= !Control.chunkBatch + then batch (chunksWithSizes', chunk::acc, m) + else (outputChunks acc; + batch (chunksWithSizes, [], 0)) + end + val () = batch (chunksWithSizes, [], 0) + val {print, done, ...} = outputC () - fun rest () = - (List.foreach (chunks, fn c => declareChunk (c, print)) - ; print "PRIVATE struct cont ( *nextChunks []) () = {" - ; Vector.foreach (entryLabels, fn l => - let - val {chunkLabel, ...} = labelInfo l - in - print "\t" - ; C.callNoSemi ("Chunkp", - [chunkLabelToString chunkLabel], - print) - ; print ",\n" - end) + fun defineNextChunks () = + (List.foreach (chunks, fn Chunk.T {chunkLabel, ...} => + declareChunk (chunkLabel, print)) + ; print "PRIVATE const ChunkFnPtr_t nextChunks[" + ; print (C.int (Vector.length nextChunks)) + ; print "] = {\n" + ; Vector.foreachi + (nextChunks, fn (i, label) => + (print "\t" + ; print "/* " + ; print (C.int i) + ; print ": */ " + ; print "/* " + ; print (Label.toString label) + ; print " */ &(" + ; print (ChunkLabel.toString (labelChunk label)) + ; print "),\n")) ; print "};\n") val _ = - outputDeclarations {additionalMainArgs = additionalMainArgs, - includes = ["c-main.h"], - program = program, - print = print, - rest = rest} + outputDeclarations + {additionalMainArgs = [labelIndexAsString (#label main, {pretty = true})], + includes = ["c-main.h"], + program = program, + print = print, + rest = defineNextChunks} val _ = done () - val _ = List.foreach (chunks, outputChunk) in () end diff -Nru mlton-20130715/mlton/codegen/c-codegen/c-codegen.sig mlton-20210117+dfsg/mlton/codegen/c-codegen/c-codegen.sig --- mlton-20130715/mlton/codegen/c-codegen/c-codegen.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/c-codegen/c-codegen.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,23 +1,26 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature C_CODEGEN_STRUCTS = sig - structure Ffi: FFI structure Machine: MACHINE - sharing Ffi.CFunction = Machine.CFunction end signature C_CODEGEN = sig include C_CODEGEN_STRUCTS - val declareFFI: Machine.Chunk.t * {print: string -> unit} -> unit + structure C: + sig + val int: int -> string + end + val implementsPrim: 'a Machine.Prim.t -> bool val output: {program: Machine.Program.t, outputC: unit -> {file: File.t, diff -Nru mlton-20130715/mlton/codegen/c-codegen/sources.cm mlton-20210117+dfsg/mlton/codegen/c-codegen/sources.cm --- mlton-20130715/mlton/codegen/c-codegen/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/c-codegen/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -2,21 +2,21 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library signature C_CODEGEN functor CCodegen is -../../atoms/sources.cm -../../control/sources.cm ../../../lib/mlton/sources.cm +../../atoms/sources.cm ../../backend/sources.cm +../../control/sources.cm c-codegen.sig c-codegen.fun diff -Nru mlton-20130715/mlton/codegen/c-codegen/sources.mlb mlton-20210117+dfsg/mlton/codegen/c-codegen/sources.mlb --- mlton-20130715/mlton/codegen/c-codegen/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/c-codegen/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,14 +2,14 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) local + ../../../lib/mlton/sources.mlb ../../atoms/sources.mlb ../../control/sources.mlb - ../../../lib/mlton/sources.mlb ../../backend/sources.mlb c-codegen.sig diff -Nru mlton-20130715/mlton/codegen/llvm-codegen/llvm-codegen.fun mlton-20210117+dfsg/mlton/codegen/llvm-codegen/llvm-codegen.fun --- mlton-20130715/mlton/codegen/llvm-codegen/llvm-codegen.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/llvm-codegen/llvm-codegen.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1949 @@ +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 2013-2014 Matthew Fluet, Brian Leibig. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor LLVMCodegen(S: LLVM_CODEGEN_STRUCTS): LLVM_CODEGEN = +struct + +structure AList = AppendList + +open S + +open Machine + +structure LLVM = + struct + fun escape s = + let + fun needsEscape c = Char.isCntrl c orelse Char.equals (c, #"\\") orelse Char.equals (c, Char.dquote) + in + if String.exists (s, needsEscape) + then String.translate + (s, fn c => + if needsEscape c + then let + val hex = Int.format (Char.ord c, StringCvt.HEX) + in + if String.length hex < 2 + then "\\0" ^ hex + else "\\" ^ hex + end + else Char.toString c) + else s + end + structure Type = + struct + datatype t = + Array of int * t + | Function of t list * t + | Label + | Pointer of t + | Real of RealSize.t + | Struct of bool * t list + | Void + | Word of WordSize.t + + fun equals (ty1, ty2) = + case (ty1, ty2) of + (Array (n1, ty1), Array (n2, ty2)) => + Int.equals (n1, n2) andalso equals (ty1, ty2) + | (Function (atys1, rty1), Function (atys2, rty2)) => + equalss (atys1, atys2) andalso equals (rty1, rty2) + | (Label, Label) => true + | (Pointer ty1, Pointer ty2) => equals (ty1, ty2) + | (Real rs1, Real rs2) => RealSize.equals (rs1, rs2) + | (Struct (b1, tys1), Struct (b2, tys2)) => + Bool.equals (b1, b2) andalso equalss (tys1, tys2) + | (Void, Void) => true + | (Word ws1, Word ws2) => WordSize.equals (ws1, ws2) + | _ => false + and equalss (tys1, tys2) = List.equals (tys1, tys2, equals) + + local + val array = Random.word () + val function = Random.word () + val label = Random.word () + val pointer = Random.word () + val real = Random.word () + val str = Random.word () + val void = Random.word () + val word = Random.word () + in + fun hash ty = + case ty of + Array (n, ty) => Hash.combine3 (array, Word.fromInt n, hash ty) + | Function (atys, rty) => Hash.combine3 (function, Hash.listMap (atys, hash), hash rty) + | Label => label + | Pointer ty => Hash.combine (pointer, hash ty) + | Real rs => Hash.combine (real, RealSize.hash rs) + | Struct (b, tys) => Hash.combine3 (str, Bool.hash b, Hash.listMap (tys, hash)) + | Void => void + | Word ws => Hash.combine (word, WordSize.hash ws) + end + + val bool = Word (WordSize.fromBits Bits.one) + val word8 = Word WordSize.word8 + val word16 = Word WordSize.word16 + val word32 = Word WordSize.word32 + val word64 = Word WordSize.word64 + + fun toString ty = + case ty of + Array (n, ty) => + concat ["[", Int.toString n, " x ", toString ty, "]"] + | Function (args, res) => + concat [toString res, "(", + String.concatWith (List.map (args, toString), ","), + ")"] + | Label => "label" + | Pointer ty => concat [toString ty, "*"] + | Struct (packed, tys) => + let + val (l,r) = if packed then ("<{", "}>") else ("{","}") + in + concat [l, + String.concatWith (List.map (tys, toString), ","), + r] + end + | Real rs => (case rs of + RealSize.R32 => "float" + | RealSize.R64 => "double") + | Word ws => concat ["i", WordSize.toString ws] + | Void => "void" + + fun dePointer ty = + case ty of + Pointer ty => ty + | _ => Error.bug ("LLVMCodegen.LLVM.Type.dePointer: " ^ toString ty) + + fun fromCType ct = + case ct of + CType.CPointer => Pointer word8 + | CType.Int8 => word8 + | CType.Int16 => word16 + | CType.Int32 => word32 + | CType.Int64 => word64 + | CType.Objptr => Pointer (Word WordSize.word8) + | CType.Real32 => Real RealSize.R32 + | CType.Real64 => Real RealSize.R64 + | CType.Word8 => word8 + | CType.Word16 => word16 + | CType.Word32 => word32 + | CType.Word64 => word64 + + val cpointer = fromCType CType.CPointer + + val blockaddress = Pointer word8 + + val uintptr = Promise.lazy (Word o WordSize.cpointer) + end + structure Value = + struct + type t = string * Type.t + + fun equals ((s1, ty1), (s2, ty2)) = String.equals (s1, s2) andalso Type.equals (ty1, ty2) + fun hash (s, ty) = Hash.combine (String.hash s, Type.hash ty) + fun toString (s, ty) = concat [Type.toString ty, " ", s] + + fun fnptr (s, args, res) = (s, Type.Pointer (Type.Function (args, res))) + fun globptr (s, ty) = (s, Type.Pointer ty) + fun label' s = ("%" ^ s, Type.Label) + fun label l = label' (Label.toString l) + val null = ("null", Type.Pointer Type.word8) + fun real r = + let + val s = RealX.toString (r, {suffix = false}) + val s = + case s of + "~inf" => "0xFFF0000000000000" + | "inf" => "0x7FF0000000000000" + | "nan" => "0xFFF8000000000000" + | _ => String.translate (s, fn #"~" => "-" | c => String.fromChar c) + in + (s, Type.Real (RealX.size r)) + end + fun fnegZero rs = ("-0.0", Type.Real rs) + (* fun undef ty = ("undef", ty) *) + fun word w = + (IntInf.toString (WordX.toIntInf w), + Type.Word (WordX.size w)) + fun zero ws = word (WordX.zero ws) + fun negOne ws = word (WordX.fromIntInf (~1, ws)) + end + structure Instr = + struct + type t = string AList.t + + (* terminator *) + fun br {test = (test, testTy), truee = (truee, trueeTy), falsee = (falsee, falseeTy)} = + AList.fromList ["br ", Type.toString testTy, " ", test, + ", ", Type.toString trueeTy, " ", truee, + ", ", Type.toString falseeTy, " ", falsee] + fun indirectbr {addr = (addr, addrTy), labels} = + AList.append + (AList.fromList ["indirectbr ", Type.toString addrTy, " ", addr, ", ["], + if List.length labels > 3 + then AList.append + ((AList.appends o List.mapi) + (labels, fn (i, (label, labelTy)) => + AList.fromList [if i > 0 then ",\n\t\t" else "\n\t\t", + Type.toString labelTy, " ", label]), + AList.single "\n\t]") + else AList.append + ((AList.appends o List.mapi) + (labels, fn (i, (label, labelTy)) => + AList.fromList [if i > 0 then ", " else "", + Type.toString labelTy, " ", label]), + AList.single "]")) + fun jmp (label, labelTy) = AList.fromList ["br ", Type.toString labelTy, " ", label] + fun ret (res, resTy) = AList.fromList ["ret ", Type.toString resTy, " ", res] + fun unreachable () = AList.single "unreachable" + fun switch {value = (value, valueTy), default = (default, defaultTy), table} = + AList.append + (AList.fromList ["switch ", + Type.toString valueTy, " ", value, ", ", + Type.toString defaultTy, " ", default, " ["], + if List.length table > 2 + then AList.appends + [AList.single "\n", + (AList.appends o List.map) + (table, fn ((index, indexTy), (label, labelTy)) => + AList.fromList ["\t\t", + Type.toString indexTy, " ", index, ", ", + Type.toString labelTy, " ", label, "\n"]), + AList.single "\t]"] + else AList.append + ((AList.appends o List.map) + (table, fn ((index, indexTy), (label, labelTy)) => + AList.fromList [" ", + Type.toString indexTy, " ", index, ", ", + Type.toString labelTy, " ", label, " "]), + AList.single "]")) + + (* nary *) + fun naryop {dst = (dst, _), oper = (oper, operTy), args} = + AList.append + (AList.fromList [dst, " = ", oper, " ", Type.toString operTy, " "], + (AList.appends o List.mapi) + (args, fn (i, (arg, _)) => + AList.fromList [if i > 0 then ", " else "", arg])) + + (* aggregate *) + fun xval {dst = (dst, _), src = (src, srcTy), args} = + AList.append + (AList.fromList [dst, " = extractvalue ", Type.toString srcTy, " ", src], + (AList.appends o List.map) + (args, fn arg => AList.fromList [", ", arg])) + + (* memory *) + fun alloca {dst = (dst, dstTy)} = + AList.fromList [dst, " = alloca ", Type.toString (Type.dePointer dstTy)] + fun gep {dst = (dst, _), src = (src, srcTy), args} = + AList.append + (AList.fromList [dst, " = getelementptr inbounds ", + Type.toString (Type.dePointer srcTy), + ", ", Type.toString srcTy, " ", src], + (AList.appends o List.map) + (args, fn (arg, argTy) => AList.fromList [", ", Type.toString argTy, " ", arg])) + fun load {dst = (dst, dstTy), src = (src, srcTy)} = + AList.fromList [dst, " = load ", Type.toString dstTy, ", ", Type.toString srcTy, " ", src] + fun store {dst = (dst, dstTy), src = (src, srcTy)} = + AList.fromList ["store ", Type.toString srcTy, " ", src, ", ", Type.toString dstTy, " ", dst] + + (* conversion *) + fun convop {dst = (dst, dstTy), oper, src = (src, srcTy)} = + AList.fromList [dst, " = ", oper, " ", Type.toString srcTy, " ", src, " to ", Type.toString dstTy] + local + fun mk oper {dst, src} = + convop {dst = dst, oper = oper, src = src} + in + val trunc = mk "trunc" + val zext = mk "zext" + val sext = mk "sext" + val fptrunc = mk "fptrunc" + val fpext = mk "fpext" + val fptoui = mk "fptoui" + val fptosi = mk "fptosi" + val uitofp = mk "uitofp" + val sitofp = mk "sitofp" + val ptrtoint = mk "ptrtoint" + val inttoptr = mk "inttoptr" + val bitcast = mk "bitcast" + end + fun resize {dst as (_, dstTy), src as (_, srcTy), signed} = + case (srcTy, dstTy) of + (Type.Word ws, Type.Word wd) => + (case WordSize.compare (ws, wd) of + LESS => if signed then sext else zext + | EQUAL => bitcast + | GREATER => trunc) {dst = dst, src = src} + | _ => Error.bug "LLVMCodegen.LLVM.Instr.resize" + fun fpresize {dst as (_, dstTy), src as (_, srcTy)} = + case (srcTy, dstTy) of + (Type.Real rs, Type.Real rd) => + (case RealSize.compare (rs, rd) of + LESS => fpext + | EQUAL => bitcast + | GREATER => fptrunc) {dst = dst, src = src} + | _ => Error.bug "LLVMCodegen.LLVM.Instr.fpresize" + fun cast (arg as {dst = (_, dstTy), src = (_, srcTy)}) = + (case (srcTy, dstTy) of + (Type.Pointer _, Type.Word _) => ptrtoint + | (Type.Word _, Type.Pointer _) => inttoptr + | _ => bitcast) arg + + (* other *) + fun call {dst = (dst, dstTy), tail, cconv, fnptr = (fnptr, _), args} = + AList.appends + [case dstTy of Type.Void => AList.empty | _ => AList.fromList [dst, " = "], + case tail of NONE => AList.empty | SOME tail => AList.fromList [tail, " "], + AList.single "call ", + case cconv of NONE => AList.empty | SOME cconv => AList.fromList [cconv, " "], + AList.fromList [Type.toString dstTy, " ", fnptr, "("], + (AList.appends o List.mapi) + (args, fn (i, (arg, argTy)) => + AList.fromList [if i > 0 then ", " else "", Type.toString argTy, " ", arg]), + AList.single ")"] + + fun addMetaData (i, md) = + case md of + NONE => i + | SOME md => AList.append (i, AList.fromList [", ", md]) + end + structure MetaData = + struct + structure Id = + struct + type t = string + val equals = String.equals + val hash = String.hash + fun toString id = id + end + structure Value = + struct + datatype t = Id of Id.t | Node of t list | String of String.t | Value of Value.t + fun equals (v1, v2) = + case (v1, v2) of + (Id i1, Id i2) => Id.equals (i1, i2) + | (Node vs1, Node vs2) => List.equals (vs1, vs2, equals) + | (String s1, String s2) => String.equals (s1, s2) + | (Value v1, Value v2) => Value.equals (v1, v2) + | _ => false + local + val id = Random.word () + val node = Random.word () + val string = Random.word () + val value = Random.word () + in + fun hash v = + case v of + Id i => Hash.combine (id, Id.hash i) + | Node vs => Hash.combine (node, Hash.listMap (vs, hash)) + | String s => Hash.combine (string, String.hash s) + | Value v => Hash.combine (value, Value.hash v) + end + fun toString v = + case v of + Id i => Id.toString i + | Node vs => concat ["!{", String.concatWith (List.map (vs, toString), ", "), "}"] + | String s => concat ["!\"", escape s, "\""] + | Value v => Value.toString v + end + val id = Value.Id + val string = Value.String + val value = Value.Value + datatype t = T of unit ref option * Value.t + fun node vs = T (NONE, Value.Node vs) + fun equals (T (xo1, v1), T (xo2, v2)) = + Option.equals (xo1, xo2, Ref.equals) andalso Value.equals (v1, v2) + local + val none = Random.word () + val some = Random.word () + in + fun hash (T (xo, v)) = + Hash.combine (case xo of NONE => none | SOME _ => some, Value.hash v) + end + fun toString (T (xo, v)) = + case xo of + NONE => Value.toString v + | SOME _ => concat ["distinct ", Value.toString v] + end + structure ModuleContext = + struct + datatype t = T of {fnDecls: (string, {argTys: Type.t list, + resTy: Type.t, + vis: string option}) HashTable.t, + fnDefns: (string, unit) HashTable.t, + globDecls: (string, {const: bool, + ty: Type.t, + vis: string option}) HashTable.t, + metaData: (MetaData.t, MetaData.Id.t) HashTable.t} + fun new () = T {fnDecls = HashTable.new {equals = String.equals, hash = String.hash}, + fnDefns = HashTable.new {equals = String.equals, hash = String.hash}, + globDecls = HashTable.new {equals = String.equals, hash = String.hash}, + metaData = HashTable.new {equals = MetaData.equals, hash = MetaData.hash}} + fun emit (T {fnDecls, fnDefns, globDecls, metaData}, print) = + let + val empty = ref true + val _ = + HashTable.foreachi + (globDecls, fn (name, {const, ty, vis}) => + (empty := false + ; print name + ; print " = external " + ; Option.app (vis, fn vis => (print vis; print " ")) + ; print (if const then "constant " else "global ") + ; print (Type.toString ty) + ; print "\n")) + val _ = if !empty then () else print "\n" + val empty = ref true + val _ = + HashTable.foreachi + (fnDecls, fn (name, {argTys, resTy, vis}) => + case HashTable.peek (fnDefns, name) of + NONE => + (empty := false + ; print "declare " + ; Option.app (vis, fn vis => (print vis; print " ")) + ; print (Type.toString resTy) + ; print " " + ; print name + ; print "(" + ; List.foreachi (argTys, fn (i, argTy) => + (if i > 0 then print ", " else () + ; print (Type.toString argTy))) + ; print ")\n") + | SOME _ => ()) + val _ = if !empty then () else print "\n" + val empty = ref true + val _ = + HashTable.foreachi + (metaData, fn (md, id) => + (empty := false + ; print (MetaData.Id.toString id) + ; print " = " + ; print (MetaData.toString md) + ; print "\n")) + val _ = if !empty then () else print "\n" + in + () + end + fun addFnDecl (T {fnDecls, ...}, name, argTys_resTy_vis as {argTys, resTy, ...}) = + ((ignore o HashTable.insertIfNew) + (fnDecls, name, fn () => argTys_resTy_vis, ignore) + ; Value.fnptr (name, argTys, resTy)) + fun addFnDefn (T {fnDefns, ...}, name) = + (ignore o HashTable.insertIfNew) + (fnDefns, name, fn () => (), ignore) + fun addGlobDecl (T {globDecls, ...}, name, const_ty_vis as {ty, ...}) = + ((ignore o HashTable.insertIfNew) + (globDecls, name, fn () => const_ty_vis, ignore) + ; Value.globptr (name, ty)) + fun addMetaData (T {metaData, ...}, md) = + HashTable.lookupOrInsert + (metaData, md, fn () => "!" ^ Int.toString (HashTable.size metaData)) + fun intrinsic (mc, name, {argTys, resTy}) = + addFnDecl (mc, "@llvm." ^ name, {argTys = argTys, resTy = resTy, vis = NONE}) + end + end + +structure ChunkLabel = + struct + open ChunkLabel + val toStringForC = toString + fun toStringXForC cl = "X" ^ toStringForC cl + fun toString cl = "@" ^ toStringForC cl + fun toStringX cl = "@" ^ toStringXForC cl + fun toString' cl = + if !Control.llvmCC10 + then toStringX cl + else toString cl + end + +local + open Runtime +in + structure GCField = GCField +end + +structure Type = + struct + open Type + val toLLVMType = LLVM.Type.fromCType o toCType + end + +fun primApp (prim: 'a Prim.t): ({args: LLVM.Value.t list, + mc: LLVM.ModuleContext.t, + newTemp: LLVM.Type.t -> LLVM.Value.t, + $ : LLVM.Instr.t -> unit} -> + LLVM.Value.t) option = + let + open LLVM.Instr + val nth = List.nth + fun compare oper {args, mc = _, newTemp, $} = + let + val tmp = newTemp LLVM.Type.bool + val res = newTemp (LLVM.Type.Word WordSize.bool) + val _ = $(naryop {dst = tmp, oper = oper, args = args}) + val _ = $(zext {dst = res, src = tmp}) + in + res + end + fun conv (instr, ty) {args, mc = _, newTemp, $} = + let + val res = newTemp ty + val _ = $(instr {dst = res, src = nth (args, 0)}) + in + res + end + fun cpointerAdd {args, mc = _, newTemp, $} = + let + val res = newTemp LLVM.Type.cpointer + val _ = $(gep {dst = res, src = nth (args, 0), + args = [nth (args, 1)]}) + in + res + end + fun cpointerCompare cond = + compare ("icmp " ^ cond, LLVM.Type.cpointer) + fun realCompare (cond, rs) = compare ("fcmp " ^ cond, LLVM.Type.Real rs) + fun realMath' (oper, rs, fargs) {args, mc, newTemp, $} = + let + val args = fargs args + val atys = List.map (args, #2) + val rty = LLVM.Type.Real rs + val name = concat [oper, ".f", RealSize.toString rs] + val fnptr = LLVM.ModuleContext.intrinsic (mc, name, {argTys = atys, resTy = rty}) + val res = newTemp rty + val _ = $(call {dst = res, tail = NONE, cconv = NONE, fnptr = fnptr, args = args}) + in + res + end + fun realMath (oper, rs) = realMath' (oper, rs, fn args => args) + fun realNary' (oper, rs, fargs) {args, mc = _, newTemp, $} = + let + val args = fargs args + val ty = LLVM.Type.Real rs + val res = newTemp ty + val _ = $(naryop {dst = res, oper = (oper, ty), args = args}) + in + res + end + fun realNary (oper, rs) = realNary' (oper, rs, fn args => args) + fun wordCompare (cond, ws) = compare ("icmp " ^ cond, LLVM.Type.Word ws) + fun wordCheckP' (oper, ws, fargs) {args, mc, newTemp, $} = + let + val args = fargs args + val atys = List.map (args, #2) + val wty = LLVM.Type.Word ws + val sty = LLVM.Type.Struct (false, [wty, LLVM.Type.bool]) + val name = concat [oper, ".with.overflow.i", WordSize.toString ws] + val fnptr = LLVM.ModuleContext.intrinsic (mc, name, {argTys = atys, resTy = sty}) + val tmps = newTemp sty + val tmpb = newTemp LLVM.Type.bool + val res = newTemp (LLVM.Type.Word WordSize.bool) + val _ = $(call {dst = tmps, tail = NONE, cconv = NONE, fnptr = fnptr, args = args}) + val _ = $(xval {dst = tmpb, src = tmps, args = ["1"]}) + val _ = $(zext {dst = res, src = tmpb}) + in + res + end + fun wordCheckP (oper, ws) = wordCheckP' (oper, ws, fn args => args) + fun wordNary' (oper, ws, fargs) {args, mc = _, newTemp, $} = + let + val args = fargs args + val ty = LLVM.Type.Word ws + val res = newTemp ty + val _ = $(naryop {dst = res, oper = (oper, ty), args = args}) + in + res + end + fun wordNary (oper, ws) = wordNary' (oper, ws, fn args => args) + fun wordRotate (oper, ws) {args, mc, newTemp, $} = + let + val wty = LLVM.Type.Word ws + val atys = [wty, wty, wty] + val rty = wty + val name = concat [oper, ".i", WordSize.toString ws] + val fnptr = LLVM.ModuleContext.intrinsic (mc, name, {argTys = atys, resTy = rty}) + val arg1 = newTemp wty + val res = newTemp wty + val _ = $(resize {dst = arg1, src = nth (args, 1), signed = false}) + val _ = $(call {dst = res, tail = NONE, cconv = NONE, fnptr = fnptr, args = [nth (args, 0), nth (args, 0), arg1]}) + in + res + end + fun wordShift (oper, ws) {args, mc = _, newTemp, $} = + let + val ty = LLVM.Type.Word ws + val arg1 = newTemp ty + val res = newTemp ty + val _ = $(resize {dst = arg1, src = nth (args, 1), signed = false}) + val _ = $(naryop {dst = res, oper = (oper, ty), args = [nth (args, 0), arg1]}) + in + res + end + datatype z = datatype Prim.t + in + case prim of + CPointer_add => SOME cpointerAdd + | CPointer_diff => SOME (fn {args, mc = _, newTemp, $} => + let + val wptr = LLVM.Type.uintptr () + val arg0 = newTemp wptr + val arg1 = newTemp wptr + val res = newTemp wptr + val _ = $(ptrtoint {dst = arg0, src = nth (args, 0)}) + val _ = $(ptrtoint {dst = arg1, src = nth (args, 1)}) + val _ = $(naryop {dst = res, oper = ("sub", wptr), args = [arg0, arg1]}) + in + res + end) + | CPointer_equal => SOME (cpointerCompare "eq") + | CPointer_fromWord => SOME (conv (inttoptr, LLVM.Type.cpointer)) + | CPointer_lt => SOME (cpointerCompare "ult") + | CPointer_sub => SOME (fn {args, mc, newTemp, $} => + let + fun mk args = {args = args, mc = mc, newTemp = newTemp, $ = $} + val ws = WordSize.cpointer () + val tmp = wordNary ("sub", ws) (mk [LLVM.Value.zero ws, nth (args, 1)]) + val res = cpointerAdd (mk [nth (args, 0), tmp]) + in + res + end) + | CPointer_toWord => SOME (conv (ptrtoint, LLVM.Type.uintptr ())) + | Real_Math_acos _ => NONE + | Real_Math_asin _ => NONE + | Real_Math_atan _ => NONE + | Real_Math_atan2 _ => NONE + | Real_Math_cos rs => SOME (realMath ("cos", rs)) + | Real_Math_exp rs => SOME (realMath ("exp", rs)) + | Real_Math_ln rs => SOME (realMath ("log", rs)) + | Real_Math_log10 rs => SOME (realMath ("log10", rs)) + | Real_Math_sin rs => SOME (realMath ("sin", rs)) + | Real_Math_sqrt rs => SOME (realMath ("sqrt", rs)) + | Real_Math_tan _ => NONE + | Real_abs rs => SOME (realMath ("fabs", rs)) + | Real_add rs => SOME (realNary ("fadd", rs)) + | Real_castToWord (_, ws) => SOME (conv (bitcast, LLVM.Type.Word ws)) + | Real_div rs => SOME (realNary ("fdiv", rs)) + | Real_equal rs => SOME (realCompare ("oeq", rs)) + | Real_ldexp _ => NONE + | Real_le rs => SOME (realCompare ("ole", rs)) + | Real_lt rs => SOME (realCompare ("olt", rs)) + | Real_mul rs => SOME (realNary ("fmul", rs)) + | Real_muladd rs => SOME (realMath ("fma", rs)) + | Real_mulsub rs => SOME (fn {args, mc, newTemp, $} => + let + fun mk args = {args = args, mc = mc, newTemp = newTemp, $ = $} + val tmp = + if false + then realNary ("fneg", rs) (mk [nth (args, 2)]) + else realNary ("fsub", rs) (mk [LLVM.Value.fnegZero rs, nth (args, 2)]) + val res = realMath ("fma", rs) (mk [nth (args, 0), nth (args, 1), tmp]) + in + res + end) + | Real_neg rs => SOME (fn {args, mc, newTemp, $} => + let + fun mk args = {args = args, mc = mc, newTemp = newTemp, $ = $} + val res = + if false + then realNary ("fneg", rs) (mk [nth (args, 0)]) + else realNary ("fsub", rs) (mk [LLVM.Value.fnegZero rs, nth (args, 0)]) + in + res + end) + | Real_qequal rs => SOME (realCompare ("ueq", rs)) + | Real_rndToReal (_, rs) => SOME (conv (fpresize, LLVM.Type.Real rs)) + | Real_rndToWord (_, ws, {signed}) => SOME (conv (if signed then fptosi else fptoui, LLVM.Type.Word ws)) + | Real_round rs => SOME (realMath ("rint", rs)) + | Real_sub rs => SOME (realNary ("fsub", rs)) + | Thread_returnToC => NONE + | Word_add ws => SOME (wordNary ("add", ws)) + | Word_addCheckP (ws, {signed}) => SOME (wordCheckP (if signed then "sadd" else "uadd", ws)) + | Word_andb ws => SOME (wordNary ("and", ws)) + | Word_castToReal (_, rs) => SOME (conv (bitcast, LLVM.Type.Real rs)) + | Word_equal ws => SOME (wordCompare ("eq", ws)) + | Word_extdToWord (_, ws, {signed}) => SOME (conv (fn {dst, src} => resize {dst = dst, src = src, signed = signed}, LLVM.Type.Word ws)) + | Word_lshift ws => SOME (wordShift ("shl", ws)) + | Word_lt (ws, {signed}) => SOME (wordCompare (if signed then "slt" else "ult", ws)) + | Word_mul (ws, _) => SOME (wordNary ("mul", ws)) + | Word_mulCheckP (ws, {signed}) => SOME (wordCheckP (if signed then "smul" else "umul", ws)) + | Word_neg ws => SOME (wordNary' ("sub", ws, fn args => (LLVM.Value.zero ws)::args)) + | Word_negCheckP (ws, {signed}) => SOME (wordCheckP' (if signed then "ssub" else "usub", ws, fn args => (LLVM.Value.zero ws)::args)) + | Word_notb ws => SOME (wordNary' ("xor", ws, fn args =>(LLVM.Value.negOne ws)::args)) + | Word_orb ws => SOME (wordNary ("or", ws)) + | Word_quot (ws, {signed}) => SOME (wordNary (if signed then "sdiv" else "udiv", ws)) + | Word_rem (ws, {signed}) => SOME (wordNary (if signed then "srem" else "urem", ws)) + | Word_rndToReal (_, rs, {signed}) => SOME (conv (if signed then sitofp else uitofp, LLVM.Type.Real rs)) + | Word_rol ws => SOME (wordRotate ("fshl", ws)) + | Word_ror ws => SOME (wordRotate ("fshr", ws)) + | Word_rshift (ws, {signed}) => SOME (wordShift (if signed then "ashr" else "lshr", ws)) + | Word_sub ws => SOME (wordNary ("sub", ws)) + | Word_subCheckP (ws, {signed}) => SOME (wordCheckP (if signed then "ssub" else "usub", ws)) + | Word_xorb ws => SOME (wordNary ("xor", ws)) + | _ => NONE + end +fun implementsPrim (p: 'a Prim.t): bool = Option.isSome (primApp p) + +fun primAppOpAndCheck {args: LLVM.Value.t list, + prim: 'a Prim.t, + mc: LLVM.ModuleContext.t, + newTemp: LLVM.Type.t -> LLVM.Value.t, + $ : LLVM.Instr.t -> unit}: LLVM.Value.t * LLVM.Value.t = + let + open LLVM.Instr + fun doit' (oper, ws, fargs) = + let + val args = fargs args + val atys = List.map (args, #2) + val wty = LLVM.Type.Word ws + val sty = LLVM.Type.Struct (false, [wty, LLVM.Type.bool]) + val name = concat [oper, ".with.overflow.i", WordSize.toString ws] + val fnptr = LLVM.ModuleContext.intrinsic (mc, name, {argTys = atys, resTy = sty}) + val tmps = newTemp sty + val res1 = newTemp wty + val tmpb = newTemp LLVM.Type.bool + val res2 = newTemp (LLVM.Type.Word WordSize.bool) + val _ = $(call {dst = tmps, tail = NONE, cconv = NONE, fnptr = fnptr, args = args}) + val _ = $(xval {dst = res1, src = tmps, args = ["0"]}) + val _ = $(xval {dst = tmpb, src = tmps, args = ["1"]}) + val _ = $(zext {dst = res2, src = tmpb}) + in + (res1, res2) + end + fun doit (oper, ws) = doit' (oper, ws, fn args => args) + datatype z = datatype Prim.t + in + case prim of + Word_addCheckP (ws, {signed}) => doit (if signed then "sadd" else "uadd", ws) + | Word_mulCheckP (ws, {signed}) => doit (if signed then "smul" else "umul", ws) + | Word_negCheckP (ws, {signed}) => doit' (if signed then "ssub" else "usub", ws, fn args => (LLVM.Value.zero ws)::args) + | Word_subCheckP (ws, {signed}) => doit (if signed then "ssub" else "usub", ws) + | _ => Error.bug "LLVMCodegen.primAppOpAndChk" + end + +fun aamd (oper, mc) = + case !Control.llvmAAMD of + Control.LLVMAliasAnalysisMetaData.None => NONE + | Control.LLVMAliasAnalysisMetaData.Scope => + let + val domain = + LLVM.ModuleContext.addMetaData + (mc, LLVM.MetaData.node [LLVM.MetaData.string "MLton Scope Domain"]) + fun scope s = + LLVM.ModuleContext.addMetaData + (mc, LLVM.MetaData.node [LLVM.MetaData.string s, + LLVM.MetaData.id domain]) + val (gcstate,global,heap,other,stack) = + (scope "GCState", scope "Global", scope "Heap", scope "Other", scope "Stack") + val scopes = [global,gcstate,heap,other,stack] + fun scope s = + let + fun scopeSet ss = + LLVM.ModuleContext.addMetaData + (mc, LLVM.MetaData.node (List.map (ss, LLVM.MetaData.id))) + val noalias = scopeSet (List.remove (scopes, fn s' => LLVM.MetaData.Id.equals (s, s'))) + val alias = scopeSet [s] + in + SOME (concat ["!noalias ", LLVM.MetaData.Id.toString noalias, + ", !alias.scope ", LLVM.MetaData.Id.toString alias]) + end + in + case oper of + Operand.Frontier => NONE (* alloca *) + | Operand.Global _ => scope global + | Operand.Offset {base = Operand.GCState, ...} => scope gcstate + | Operand.Offset {base, ...} => if Type.isObjptr (Operand.ty base) + then scope heap + else scope other + | Operand.SequenceOffset {base, ...} => if Type.isObjptr (Operand.ty base) + then scope heap + else scope other + | Operand.StackOffset _ => + (* Unsound: At raise, exception results are written to the stack via an + * `Offset` with `base` corresponding to `StackBottom + exnStack` and + * then read from the stack via a `StackOffset` by the handler. + *) + scope stack + | Operand.StackTop => NONE (* alloca *) + | Operand.Temporary _ => NONE (* alloca *) + | _ => NONE (* not lvalue *) + end + | Control.LLVMAliasAnalysisMetaData.TBAA {gcstate, global, heap, other, stack} => + let + fun tbaa path = + let + val root = + LLVM.ModuleContext.addMetaData + (mc, LLVM.MetaData.node [LLVM.MetaData.string "MLton TBAA Root"]) + val (desc, _) = + List.foldr + (path, (root, ""), fn (node,(desc,name)) => + let + val name = + if String.isEmpty name + then node + else concat [name, " ", node] + in + (LLVM.ModuleContext.addMetaData + (mc, LLVM.MetaData.node [LLVM.MetaData.string name, + LLVM.MetaData.id desc]), + name) + end) + val acc = + LLVM.ModuleContext.addMetaData + (mc, LLVM.MetaData.node [LLVM.MetaData.id desc, + LLVM.MetaData.id desc, + LLVM.MetaData.value (LLVM.Value.zero WordSize.word32)]) + in + SOME (concat ["!tbaa ", LLVM.MetaData.Id.toString acc]) + end + val other = fn () => + if other then tbaa ["Other"] else NONE + in + case oper of + Operand.Frontier => NONE (* alloca *) + | Operand.Global g => + (case global of + NONE => NONE + | SOME {cty = doCTy, index = doIndex} => + let + val path = ["Global"] + val path = + if doCTy + then (CType.name (Type.toCType (Global.ty g)))::path + else path + val path = + if doIndex + then (Int.toString (Global.index g))::path + else path + in + tbaa path + end) + | Operand.Offset {base = Operand.GCState, offset, ...} => + (case gcstate of + NONE => NONE + | SOME {offset = doOffset} => + let + val path = ["GCState"] + val path = + if doOffset + then (Bytes.toString offset)::path + else path + in + tbaa path + end) + | Operand.Offset {base, offset, ty, ...} => + (if Type.isObjptr (Operand.ty base) + then (case heap of + NONE => NONE + | SOME {cty = doCTy, kind = doKind, offset = doOffset, tycon = doTycon} => + let + val path = ["Heap"] + val path = + if doKind + then "Normal"::path + else path + val path = + if doTycon + then (case Type.deObjptr (Operand.ty base) of + NONE => path + | SOME tyc => (ObjptrTycon.toString tyc)::path) + else path + val path = + if doCTy + then (CType.name (Type.toCType ty))::path + else path + val path = + if doOffset + then (Bytes.toString offset)::path + else path + in + tbaa path + end) + else other ()) + | Operand.SequenceOffset {base, offset, ty, ...} => + (if Type.isObjptr (Operand.ty base) + then (case heap of + NONE => NONE + | SOME {cty = doCTy, kind = doKind, offset = doOffset, tycon = doTycon} => + let + val path = ["Heap"] + val path = + if doKind + then "Sequence"::path + else path + (* Unsound: Around a `Array_toVector` primitive, a sequence may + * be written to at one `ObjptrTycon.t` (corresponding to an + * `array`) and then read from at a distinct `ObjptrTycon.t` + * (corresponding to a `vector`). + *) + val path = + if doTycon + then (case Type.deObjptr (Operand.ty base) of + NONE => path + | SOME tyc => (ObjptrTycon.toString tyc)::path) + else path + (* Unsound: `WordArray_{sub,update}Word {seqSize, elemSize}` + * and `WordVector_subWord {seqSize, elemSize}` primitives (for + * `signature PACK_WORD`) are translated to `SequenceOffset` + * with `base` corresponding to a sequence of `seqSize`, + * `offset = Bytes.zero`, `scale` corresponding to `elemSize`, + * and `ty` corresponding to the `elemSize`; thus, the same + * address can be accessed for `Word8` and `Word64` elements. + *) + val path = + if doCTy + then (CType.name (Type.toCType ty))::path + else path + val path = + if doOffset + then (Bytes.toString offset)::path + else path + in + tbaa path + end) + else other ()) + | Operand.StackOffset (StackOffset.T {offset, ...}) => + (case stack of + NONE => NONE + | SOME {offset = doOffset} => + let + (* Unsound: At raise, exception results are written to the stack via an + * `Offset` with `base` corresponding to `StackBottom + exnStack` and + * then read from the stack via a `StackOffset` by the handler. + *) + val path = ["StackOffset"] + (* Unsound: At non-tail call/return, arguments/results are written to + * the stack relative to the callee/caller stack frame and then read + * from the stack relative to the caller/callee stack frame. In + * general, around a stack push/pop, distinct offsets correspond to the + * same location. + *) + val path = + if doOffset + then (Bytes.toString offset)::path + else path + in + tbaa path + end) + | Operand.StackTop => NONE (* alloca *) + | Operand.Temporary _ => NONE (* alloca *) + | _ => NONE (* not lvalue *) + end + +fun output {program as Machine.Program.T {chunks, frameInfos, main, ...}, + outputC: unit -> {file: File.t, + print: string -> unit, + done: unit -> unit}, + outputLL: unit -> {file: File.t, + print: string -> unit, + done: unit -> unit}} = + let + val {get = labelInfo: Label.t -> {block: Block.t, + chunkLabel: ChunkLabel.t, + index: int option}, + set = setLabelInfo, ...} = + Property.getSetOnce + (Label.plist, Property.initRaise ("LLVMCodeGen.labelInfo", Label.layout)) + val nextChunks = Array.new (Vector.length frameInfos, NONE) + val _ = + List.foreach + (chunks, fn Chunk.T {blocks, chunkLabel, ...} => + Vector.foreach + (blocks, fn block as Block.T {kind, label, ...} => + let + val index = + case Kind.frameInfoOpt kind of + NONE => NONE + | SOME fi => + let + val index = FrameInfo.index fi + in + if Kind.isEntry kind + then Array.update (nextChunks, index, SOME label) + else () + ; SOME index + end + in + setLabelInfo (label, {block = block, + chunkLabel = chunkLabel, + index = index}) + end)) + val nextChunks = Vector.keepAllMap (Vector.fromArray nextChunks, fn lo => lo) + val labelChunk = #chunkLabel o labelInfo + val labelIndex = valOf o #index o labelInfo + fun labelIndexValue l = + (LLVM.Value.word o WordX.fromInt) + (labelIndex l, WordSize.cpointer ()) + + val amTimeProfiling = + !Control.profile = Control.ProfileTimeField + orelse !Control.profile = Control.ProfileTimeLabel + + fun creturnName (ct: CType.t): string = + concat ["%CReturn", CType.name ct] + fun creturnVarC (ct: CType.t): LLVM.Value.t = + (creturnName ct, LLVM.Type.Pointer (LLVM.Type.fromCType ct)) + fun creturnVar t = creturnVarC (Type.toCType t) + fun globalName (ct: CType.t): string = + concat ["@global", CType.toString ct] + fun globalValC (ct: CType.t, mc): LLVM.Value.t = + let + val name = globalName ct + val ty = LLVM.Type.Array (Global.numberOfType ct, LLVM.Type.fromCType ct) + in + LLVM.ModuleContext.addGlobDecl (mc, name, {const = false, ty = ty, vis = SOME "hidden"}) + end + fun globalVal (c, mc) = globalValC (Type.toCType c, mc) + fun temporaryName (ct: CType.t, index: int): string = + concat ["%T", CType.name ct, "_", Int.toString index] + fun temporaryVarC (ct: CType.t, index: int): LLVM.Value.t = + (temporaryName (ct, index), LLVM.Type.Pointer (LLVM.Type.fromCType ct)) + fun temporaryVar (t, index) = temporaryVarC (Type.toCType t, index) + fun staticHeapVal (kind, mc): LLVM.Value.t = + let + val name = concat ["@", Label.toString (StaticHeap.Kind.label kind)] + val ty = LLVM.Type.word8 + val const = + case kind of + StaticHeap.Kind.Immutable => true + | _ => false + in + LLVM.ModuleContext.addGlobDecl (mc, name, {const = const, ty = ty, vis = SOME "hidden"}) + end + + val gcState = ("%gcState", LLVM.Type.cpointer) + local + fun mk (name, lty) = + ((name ^ "Arg", lty), + (name, LLVM.Type.Pointer lty)) + in + val (stackTopArg, stackTopVar) = mk ("%stackTop", LLVM.Type.cpointer) + val (frontierArg, frontierVar) = mk ("%frontier", LLVM.Type.cpointer) + val (nextBlockArg, nextBlockVar) = mk ("%nextBlock", LLVM.Type.uintptr ()) + end + val chunkFnArgs = [gcState, stackTopArg, frontierArg, nextBlockArg] + val chunkFnArgTys = List.map (chunkFnArgs, #2) + val chunkFnResTy = LLVM.Type.uintptr () + val chunkFnTy = LLVM.Type.Function (chunkFnArgTys, chunkFnResTy) + val chunkFnPtrTy = LLVM.Type.Pointer chunkFnTy + local + fun mk tos (cl: ChunkLabel.t, mc): LLVM.Value.t = + LLVM.ModuleContext.addFnDecl (mc, tos cl, {argTys = chunkFnArgTys, resTy = chunkFnResTy, vis = SOME "hidden"}) + in + val chunkFnValX = mk ChunkLabel.toStringX + val chunkFnVal' = mk ChunkLabel.toString' + end + fun nextChunksVar mc = + let + val name = if !Control.llvmCC10 then "@nextXChunks" else "@nextChunks" + val ty = LLVM.Type.Array (Vector.length nextChunks, chunkFnPtrTy) + in + LLVM.ModuleContext.addGlobDecl (mc, name, {const = true, ty = ty, vis = SOME "hidden"}) + end + + val doSwitchNextBlock = LLVM.Value.label' "doSwitchNextBlock" + + fun outputChunkFn (Chunk.T {chunkLabel, blocks, tempsMax, ...}, mc, print) = + let + val selfChunk = chunkLabel + + local + fun tb () = print "\t" + fun ln () = print "\n" + in + fun prints ss = List.foreach (ss, print) + fun println s = (print s; ln ()) + fun printsln ss = (prints ss; ln ()) + fun tbprintsln ss = (tb (); prints ss; ln ()) + end + + local + val next = Counter.generator 0 + in + fun newTemp ty = + (concat ["%t", Int.toString (next ())], ty) + end + + open LLVM.Instr + fun $ i = (print "\t"; AList.foreach (i, print); print "\n") + + fun operandToLValue oper = + let + val addr = + case oper of + Operand.Frontier => frontierVar + | Operand.Global g => + let + val ty = Global.ty g + val index = + LLVM.Value.word + (WordX.fromInt (Global.index g, WordSize.word32)) + val res = newTemp (LLVM.Type.Pointer (Type.toLLVMType ty)) + val _ = $(gep {dst = res, src = globalVal (ty, mc), + args = [LLVM.Value.zero WordSize.word32, index]}) + in + res + end + | Operand.Offset {base, offset, ty} => + let + val base = operandToRValue base + val offset = LLVM.Value.word (WordX.fromBytes (offset, WordSize.word32)) + val tmp = newTemp LLVM.Type.cpointer + val res = newTemp (LLVM.Type.Pointer (Type.toLLVMType ty)) + val _ = $(gep {dst = tmp, src = base, args = [offset]}) + val _ = $(cast {dst = res, src = tmp}) + in + res + end + | Operand.SequenceOffset {base, index, offset, scale, ty} => + let + val base = operandToRValue base + val index as (_, indexTy) = operandToRValue index + val scale = LLVM.Value.word (WordX.fromBytes (Scale.toBytes scale, WordSize.cptrdiff ())) + val offset = LLVM.Value.word (WordX.fromBytes (offset, WordSize.word32)) + val tmp1 = newTemp indexTy + val tmp2 = newTemp LLVM.Type.cpointer + val tmp3 = newTemp LLVM.Type.cpointer + val res = newTemp (LLVM.Type.Pointer (Type.toLLVMType ty)) + val _ = $(naryop {dst = tmp1, oper = ("mul nsw", indexTy), + args = [index, scale]}) + val _ = $(gep {dst = tmp2, src = base, args = [tmp1]}) + val _ = $(gep {dst = tmp3, src = tmp2, args = [offset]}) + val _ = $(cast {dst = res, src = tmp3}) + in + res + end + | Operand.StackOffset (StackOffset.T {offset, ty}) => + let + val stackTop = newTemp LLVM.Type.cpointer + val addr = newTemp LLVM.Type.cpointer + val res = newTemp (LLVM.Type.Pointer (Type.toLLVMType ty)) + val _ = $(load {dst = stackTop, src = stackTopVar}) + val _ = $(gep {dst = addr, src = stackTop, + args = [LLVM.Value.word + (WordX.fromBytes + (offset, WordSize.word32))]}) + val _ = $(cast {dst = res, src = addr}) + in + res + end + | Operand.StackTop => stackTopVar + | Operand.Temporary t => temporaryVar (Temporary.ty t, Temporary.index t) + | _ => Error.bug ("LLVMCodegen.operandToLValue: " ^ Operand.toString oper) + val aamd = aamd (oper, mc) + in + (fn {dst} => addMetaData (load {dst = dst, src = addr}, aamd), + fn {src} => addMetaData (store {dst = addr, src = src}, aamd)) + end + and operandToRValue oper = + let + val load = fn () => + let + val (loadOper, _) = operandToLValue oper + val res = newTemp (Type.toLLVMType (Operand.ty oper)) + val _ = $(loadOper {dst = res}) + in + res + end + in + case oper of + Operand.Cast (oper, ty) => + let + val oper = operandToRValue oper + val res = newTemp (Type.toLLVMType ty) + val _ = $(cast {dst = res, src = oper}) + in + res + end + | Operand.Const (Const.CSymbol (CSymbol.T {name, cty, symbolScope})) => + let + val name = "@" ^ name + val ty = + case cty of + NONE => LLVM.Type.Word WordSize.word8 + | SOME ty => LLVM.Type.fromCType ty + val vis = + case symbolScope of + CSymbolScope.External => "default" + | CSymbolScope.Private => "hidden" + | CSymbolScope.Public => "default" + val globptr = + LLVM.ModuleContext.addGlobDecl + (mc, name, {const = false, ty = ty, vis = SOME vis}) + val res = newTemp LLVM.Type.cpointer + val _ = $(bitcast {dst = res, src = globptr}) + in + res + end + | Operand.Const Const.Null => LLVM.Value.null + | Operand.Const (Const.Real r) => LLVM.Value.real r + | Operand.Const (Const.Word w) => LLVM.Value.word w + | Operand.Const _ => Error.bug "LLVMCodegen.operandToRValue: Const" + | Operand.Frontier => load () + | Operand.GCState => gcState + | Operand.Global _ => load () + | Operand.Label label => labelIndexValue label + | Operand.Offset _ => load () + | Operand.SequenceOffset _ => load () + | Operand.StackOffset _ => load () + | Operand.StackTop => load () + | Operand.StaticHeapRef (StaticHeap.Ref.T {kind, offset, ty, ...}) => + let + val tmp = newTemp LLVM.Type.cpointer + val res = newTemp (Type.toLLVMType ty) + val _ = $(gep {dst = tmp, src = staticHeapVal (kind, mc), + args = [LLVM.Value.word + (WordX.fromBytes + (offset, WordSize.word32))]}) + val _ = $(cast {dst = res, src = tmp}) + in + res + end + | Operand.Temporary _ => load () + end + fun operandsToRValues opers = + (List.rev o Vector.fold) + (opers, [], fn (oper, opers) => (operandToRValue oper)::opers) + + fun outputStatement (s: Statement.t): unit = + let in + case s of + Statement.Move {dst, src} => + let + val (_, storeDst) = operandToLValue dst + val src = operandToRValue src + val _ = $(storeDst {src = src}) + in + () + end + | Statement.PrimApp {args, dst, prim} => + let + val args = operandsToRValues args + val res = + (valOf (primApp prim)) + {args = args, mc = mc, newTemp = newTemp, $ = $} + val _ = + case dst of + NONE => () + | SOME dst => + let + val (_, storeDst) = operandToLValue dst + val _ = $(storeDst {src = res}) + in + () + end + in + () + end + | Statement.ProfileLabel _ => Error.bug "LLVMCodegen.outputStatement: ProfileLabel" + end + local + fun mk (dst, src) () = + outputStatement (Statement.Move {dst = dst, src = src}) + val stackTop = Operand.StackTop + val gcStateStackTop = Operand.gcField GCField.StackTop + val frontier = Operand.Frontier + val gcStateFrontier = Operand.gcField GCField.Frontier + in + val cacheStackTop = mk (stackTop, gcStateStackTop) + val flushStackTop = mk (gcStateStackTop, stackTop) + val cacheFrontier = mk (frontier, gcStateFrontier) + val flushFrontier = mk (gcStateFrontier, frontier) + end + (* StackTop += size *) + fun adjStackTop (size: Bytes.t) = + (outputStatement (Statement.PrimApp + {args = Vector.new2 + (Operand.StackTop, + Operand.word + (WordX.fromBytes + (size, + WordSize.cptrdiff ()))), + dst = SOME Operand.StackTop, + prim = Prim.CPointer_add}) + ; if amTimeProfiling + then flushStackTop () + else ()) + fun pop (fi: FrameInfo.t) = + adjStackTop (Bytes.~ (FrameInfo.size fi)) + fun push (return: Label.t, size: Bytes.t) = + (outputStatement (Statement.Move + {dst = Operand.stackOffset + {offset = Bytes.- (size, Runtime.labelSize ()), + ty = Type.label return}, + src = Operand.Label return}) + ; adjStackTop size) + (* LeaveChunk(nextChunk, nextBlock) + if (TailCall) { + return nextChunk(gcState, stackTop, frontier, nextBlock); + } else { + flushFrontier(); + flushStackTop(); + return nextBlock; + } + *) + fun leaveChunk (nextChunk, nextBlock) = + if !Control.chunkTailCall + then let + val stackTop = newTemp LLVM.Type.cpointer + val frontier = newTemp LLVM.Type.cpointer + val res = newTemp chunkFnResTy + in + $(load {dst = stackTop, src = stackTopVar}) + ; $(load {dst = frontier, src = frontierVar}) + ; $(call {dst = res, + tail = SOME "musttail", + cconv = if !Control.llvmCC10 + then SOME "cc10" + else NONE, + fnptr = nextChunk, + args = [gcState, stackTop, frontier, nextBlock]}) + ; $(ret res) + end + else (flushFrontier () + ; flushStackTop () + ; $(ret nextBlock)) + (* IndJump(mustReturnToSelf, mayReturnToSelf, mustReturnToOther) + nextBlock = *(uintptr_t* )(StackTop - sizeof(uintptr_t)); + if (mustReturnToSelf) { + goto doSwitchNextBlock; + } else { + ChunkFnPtr_t nextChunk = nextChunks[nextBlock]; + if (mayReturnToSelf && (nextChunk == selfChunk)) { + goto doSwitchNextBlock; + } + if (mustReturnToOther != NULL) { + LeaveChunk( *mustReturnToOther, nextBlock); + } else { + LeaveChunk( *nextChunk, nextBlock); + } + } + *) + fun indJump (mustReturnToSelf, mayReturnToSelf, mustReturnToOther) = + let + val nextBlock = + operandToRValue + (Operand.stackOffset + {offset = Bytes.~ (Runtime.labelSize ()), + ty = Type.label (Label.newNoname ())}) + val _ = $(store {dst = nextBlockVar, src = nextBlock}) + in + if mustReturnToSelf + then $(jmp doSwitchNextBlock) + else let + val nextChunkAddr = newTemp (LLVM.Type.Pointer chunkFnPtrTy) + val nextChunk = newTemp chunkFnPtrTy + val doNextChunk = + Promise.delay + (fn () => + ($(gep {dst = nextChunkAddr, src = nextChunksVar mc, + args = [LLVM.Value.zero WordSize.word32, nextBlock]}) + ; $(load {dst = nextChunk, src = nextChunkAddr}))) + val _ = + if mayReturnToSelf + then let + val _ = Promise.force doNextChunk + val rToSelf = Label.newNoname () + val rToOther = Label.newNoname () + val test = newTemp LLVM.Type.bool + val _ = $(naryop {dst = test, + oper = ("icmp eq", chunkFnPtrTy), + args = [nextChunk, chunkFnVal' (selfChunk, mc)]}) + val _ = $(br {test = test, + truee = LLVM.Value.label rToSelf, + falsee = LLVM.Value.label rToOther}) + val _ = printsln [Label.toString rToSelf, ":"] + val _ = $(jmp doSwitchNextBlock) + val _ = printsln [Label.toString rToOther, ":"] + in + () + end + else () + val _ = + case mustReturnToOther of + NONE => (Promise.force doNextChunk; leaveChunk (nextChunk, nextBlock)) + | SOME dstChunk => leaveChunk (chunkFnVal' (dstChunk, mc), nextBlock) + in + () + end + end + fun outputTransfer (t: Transfer.t): unit = + let + fun jump label = + let + val dstChunk = labelChunk label + in + if ChunkLabel.equals (dstChunk, selfChunk) + then $(jmp (LLVM.Value.label label)) + else leaveChunk (chunkFnVal' (dstChunk, mc), + labelIndexValue label) + end + fun rtrans rsTo = + let + val mustRToOne = + case rsTo of + [] => NONE + | l::rsTo => + if List.forall (rsTo, fn l' => Label.equals (l, l')) + then SOME l + else NONE + fun isSelf c = ChunkLabel.equals (selfChunk, c) + val rsTo = + List.fold + (rsTo, [], fn (l, cs) => + let + val c = labelChunk l + in + if List.contains (cs, c, ChunkLabel.equals) + then cs + else c::cs + end) + val mayRToSelf = List.exists (rsTo, isSelf) + val (mustRToSelf, mustRToOther) = + case List.revKeepAll (rsTo, not o isSelf) of + [] => (true, NONE) + | c::rsTo => + (false, + if List.forall (rsTo, fn c' => ChunkLabel.equals (c, c')) + then SOME c + else NONE) + in + case (!Control.chunkMustRToSingOpt, mustRToOne) of + (true, SOME dst) => jump dst + | _ => + indJump (!Control.chunkMustRToSelfOpt andalso mustRToSelf, + !Control.chunkMayRToSelfOpt andalso mayRToSelf, + if (!Control.chunkMustRToOtherOpt andalso + (!Control.chunkMayRToSelfOpt orelse not mayRToSelf)) + then mustRToOther + else NONE) + end + val _ = + if !Control.codegenComments > 0 + then tbprintsln ["; ", Layout.toString (Transfer.layout t)] + else () + in + case t of + Transfer.CCall {func = + CFunction.T + {target = + CFunction.Target.Direct "Thread_returnToC", ...}, + return = SOME {return, size = SOME size}, ...} => + let + val _ = push (return, size) + val _ = flushFrontier (); + val _ = flushStackTop (); + val tmp = newTemp (LLVM.Type.uintptr ()) + val fnptr = + LLVM.ModuleContext.addFnDecl + (mc, "@Thread_returnToC", + {argTys = [], + resTy = LLVM.Type.uintptr (), + vis = SOME "hidden"}) + val _ = $(call {dst = tmp, + tail = NONE, cconv = NONE, + fnptr = fnptr, args = []}) + val _ = $(ret tmp) + in + () + end + | Transfer.CCall {args, func, return} => + let + val CFunction.T {return = returnTy, target, symbolScope, ...} = func + val args = operandsToRValues args + val _ = Option.app (return, fn {return, size} => + Option.app (size, fn size => + push (return, size))) + val _ = if CFunction.modifiesFrontier func then flushFrontier () else () + val _ = if CFunction.readsStackTop func then flushStackTop () else () + val resTy = if Type.isUnit returnTy + then LLVM.Type.Void + else Type.toLLVMType returnTy + val res = newTemp resTy + val (fnptr, args) = + case target of + CFunction.Target.Direct name => + let + val name = "@" ^ name + val argTys = List.map (args, #2) + val vis = + case symbolScope of + CFunction.SymbolScope.External => "default" + | CFunction.SymbolScope.Private => "hidden" + | CFunction.SymbolScope.Public => "default" + val _ = + LLVM.ModuleContext.addFnDecl + (mc, name, {argTys = argTys, resTy = resTy, vis = SOME vis}) + in + (LLVM.Value.fnptr (name, argTys, resTy), args) + end + | CFunction.Target.Indirect => + let + val (cptr, args) = + case args of + cptr::args => (cptr, args) + | _ => Error.bug "LLVMCodegen.outputTransfer: CCall,Indirect" + val argTys = List.map (args, #2) + val fnty = LLVM.Type.Function (argTys, resTy) + val fnptr = newTemp (LLVM.Type.Pointer fnty) + val _ = $(cast {dst = fnptr, src = cptr}) + in + (fnptr, args) + end + val _ = $(call {dst = res, + tail = NONE, cconv = NONE, + fnptr = fnptr, args = args}) + val _ = + case return of + NONE => + let + val tmp = newTemp (LLVM.Type.uintptr ()) + val fnptr = + LLVM.ModuleContext.addFnDecl + (mc, "@MLton_unreachable", + {argTys = [], + resTy = LLVM.Type.uintptr (), + vis = SOME "hidden"}) + val _ = $(call {dst = tmp, + tail = NONE, cconv = NONE, + fnptr = fnptr, args = []}) + val _ = $(ret tmp) + in + () + end + | SOME {return, ...} => + let + val _ = if CFunction.modifiesFrontier func then cacheFrontier () else () + val _ = if CFunction.writesStackTop func then cacheStackTop () else () + val _ = if Type.isUnit returnTy + then () + else $(store {dst = creturnVar returnTy, src = res}) + val _ = + if CFunction.maySwitchThreadsFrom func + then indJump (false, true, NONE) + else $(jmp (LLVM.Value.label return)) + in + () + end + in + () + end + | Transfer.Call {label, return, ...} => + (Option.app (return, fn {return, size, ...} => push (return, size)) + ; jump label) + | Transfer.Goto dst => $(jmp (LLVM.Value.label dst)) + | Transfer.Raise {raisesTo} => + (outputStatement (Statement.PrimApp + {args = Vector.new2 + (Operand.gcField GCField.StackBottom, + Operand.gcField GCField.ExnStack), + dst = SOME Operand.StackTop, + prim = Prim.CPointer_add}) + ; rtrans raisesTo) + | Transfer.Return {returnsTo} => rtrans returnsTo + | Transfer.Switch (Switch.T {cases, default, expect, test, ...}) => + let + val test = operandToRValue test + val test = + case expect of + NONE => test + | SOME w => + let + val ws = WordX.size w + val wty = LLVM.Type.Word ws + val name = concat ["expect.i", WordSize.toString ws] + val fnptr = + LLVM.ModuleContext.intrinsic + (mc, name, {argTys = [wty, wty], resTy = wty}) + val tmp = newTemp wty + val args = [test, LLVM.Value.word w] + val _ = $(call {dst = tmp, tail = NONE, cconv = NONE, fnptr = fnptr, args = args}) + in + tmp + end + val (default, extra) = + case default of + SOME d => (d, fn () => ()) + | NONE => let + val d = Label.newNoname () + in + (d, fn () => + (printsln [Label.toString d, ":"] + ; $(unreachable ()))) + end + val _ = $(switch {value = test, default = LLVM.Value.label default, + table = Vector.toListMap (cases, fn (w, l) => + (LLVM.Value.word w, + LLVM.Value.label l))}) + val _ = extra () + in + () + end + + end + val outputStatement = fn s => + let + val _ = + if !Control.codegenComments > 1 + then tbprintsln ["; ", Layout.toString (Statement.layout s)] + else () + in + outputStatement s + end + (* Fusing of adjacent `Word_` and `Word{S,U}_CheckP` + * primitives *does not* depends on the relative order of `!a` and `?a` + * in /basis-library/primitive/prim1.sml:mkOverflow + *) + fun outputStatementsFuseOpAndChk statements = + (ignore o Vector.foldi) + (statements, false, fn (i, s1, skip) => + let + fun default () = (outputStatement s1; false) + in + if skip then false else + case s1 of + Statement.PrimApp {args = args1, dst = SOME dst1, prim = prim1} => + let + fun fuse chk = + (case Vector.sub (statements, i + 1) of + s2 as Statement.PrimApp {args = args2, dst = SOME dst2, prim = prim2} => + if Vector.equals (args1, args2, Operand.equals) + then (case chk prim2 of + NONE=> default () + | SOME prim => + let + val _ = + if !Control.codegenComments > 1 + then (tbprintsln ["; ", Layout.toString (Statement.layout s1)] + ; tbprintsln ["; ", Layout.toString (Statement.layout s2)]) + else () + val args = operandsToRValues args1 + val (res1, res2) = + primAppOpAndCheck + {args = args, prim = prim, mc = mc, newTemp = newTemp, $ = $} + val (_, storeDst1) = operandToLValue dst1 + val _ = $(storeDst1 {src = res1}) + val (_, storeDst2) = operandToLValue dst2 + val _ = $(storeDst2 {src = res2}) + in + true + end) + else default () + | _ => default ()) + handle Subscript => default () + in + case prim1 of + Prim.Word_add ws1 => + fuse (fn prim2 => + case prim2 of + Prim.Word_addCheckP (ws2, _) => + if WordSize.equals (ws1, ws2) + then SOME prim2 + else NONE + | _ => NONE) + | Prim.Word_addCheckP (ws1, _) => + fuse (fn prim2 => + case prim2 of + Prim.Word_add ws2 => + if WordSize.equals (ws1, ws2) + then SOME prim1 + else NONE + | _ => NONE) + | Prim.Word_mul (ws1, {signed = signed1}) => + fuse (fn prim2 => + case prim2 of + Prim.Word_mulCheckP (ws2, {signed = signed2}) => + if WordSize.equals (ws1, ws2) + andalso Bool.equals (signed1, signed2) + then SOME prim2 + else NONE + | _ => NONE) + | Prim.Word_mulCheckP (ws1, {signed = signed1}) => + fuse (fn prim2 => + case prim2 of + Prim.Word_mul (ws2, {signed = signed2}) => + if WordSize.equals (ws1, ws2) + andalso Bool.equals (signed1, signed2) + then SOME prim1 + else NONE + | _ => NONE) + | Prim.Word_neg ws1 => + fuse (fn prim2 => + case prim2 of + Prim.Word_negCheckP (ws2, _) => + if WordSize.equals (ws1, ws2) + then SOME prim2 + else NONE + | _ => NONE) + | Prim.Word_negCheckP (ws1, _) => + fuse (fn prim2 => + case prim2 of + Prim.Word_neg ws2 => + if WordSize.equals (ws1, ws2) + then SOME prim1 + else NONE + | _ => NONE) + | Prim.Word_sub ws1 => + fuse (fn prim2 => + case prim2 of + Prim.Word_subCheckP (ws2, _) => + if WordSize.equals (ws1, ws2) + then SOME prim2 + else NONE + | _ => NONE) + | Prim.Word_subCheckP (ws1, _) => + fuse (fn prim2 => + case prim2 of + Prim.Word_sub ws2 => + if WordSize.equals (ws1, ws2) + then SOME prim1 + else NONE + | _ => NONE) + | _ => default () + end + | _ => default () + end) + fun outputBlock (Block.T {kind, label, statements, transfer, ...}) = + let + val _ = printsln [Label.toString label, ":"] + val _ = + case kind of + Kind.Cont {frameInfo, ...} => pop frameInfo + | Kind.CReturn {dst, frameInfo, ...} => + (Option.app (frameInfo, pop) + ; (Option.app + (dst, fn dst => + let + val dst = Live.toOperand dst + val ty = Operand.ty dst + val creturn = newTemp (Type.toLLVMType ty) + val _ = $(load {dst = creturn, src = creturnVar ty}) + val (_, storeDst) = operandToLValue dst + val _ = $(storeDst {src = creturn}) + in + () + end)) + ; ()) + | Kind.Func _ => () + | Kind.Handler {frameInfo, ...} => pop frameInfo + | Kind.Jump => () + val _ = + if !Control.codegenFuseOpAndChk + then outputStatementsFuseOpAndChk statements + else Vector.foreach (statements, outputStatement) + val _ = outputTransfer transfer + val _ = print "\n" + in + () + end + + val entries = + let + val entries = ref [] + val _ = + Vector.foreach + (blocks, fn Block.T {kind, label, ...} => + if Kind.isEntry kind + then List.push (entries, (label, labelIndex label)) + else ()) + in + List.insertionSort (!entries, fn ((_, i1), (_, i2)) => i1 <= i2) + end + val numEntries = List.length entries + val nextLabels = (concat [ChunkLabel.toString' chunkLabel, ".nextLabels"], + LLVM.Type.Pointer (LLVM.Type.Array (numEntries, LLVM.Type.blockaddress))) + val _ = if !Control.chunkJumpTable + then let + val _ = + prints [#1 nextLabels, + " = internal constant ", + LLVM.Type.toString (LLVM.Type.dePointer (#2 nextLabels)), + " ["] + val _ = + List.foreachi (entries, fn (i, (label, _)) => + (if i > 0 then print "," else () + ; prints ["\n\ti8* blockaddress(", + ChunkLabel.toString' chunkLabel, + ", ", "%", Label.toString label, ")"])) + val _ = print " ]\n" + in + () + end + else () + + val chunkArgs = + concat ["(", + String.concatWith + (List.map + (chunkFnArgs, fn (arg, argTy) => + concat [LLVM.Type.toString argTy, " ", arg]), + ", "), + ")"] + val _ = LLVM.ModuleContext.addFnDefn (mc, ChunkLabel.toString chunkLabel) + val _ = printsln ["define hidden ", + LLVM.Type.toString chunkFnResTy, " ", ChunkLabel.toString chunkLabel, + chunkArgs, " {"] + val _ = + if !Control.llvmCC10 + then let + val res = ("%res", chunkFnResTy) + val _ = $(call {dst = res, tail = NONE, cconv = SOME "cc10", + fnptr = chunkFnValX (chunkLabel, mc), + args = chunkFnArgs}) + val _ = $(ret res) + val _ = println "}" + val _ = LLVM.ModuleContext.addFnDefn (mc, ChunkLabel.toStringX chunkLabel) + val _ = printsln ["define hidden cc10 ", + LLVM.Type.toString chunkFnResTy, " ", ChunkLabel.toStringX chunkLabel, + chunkArgs, " {"] + in + () + end + else () + + val _ = print "start:\n" + val _ = List.foreach (CType.all, fn ct => + $(alloca {dst = creturnVarC ct})) + val _ = List.foreach (CType.all, fn ct => + Int.for (0, 1 + tempsMax ct, fn i => + $(alloca {dst = temporaryVarC (ct, i)}))) + val _ = $(alloca {dst = stackTopVar}) + val _ = $(store {dst = stackTopVar, src = stackTopArg}) + val _ = $(alloca {dst = frontierVar}) + val _ = $(store {dst = frontierVar, src = frontierArg}) + val _ = $(alloca {dst = nextBlockVar}) + val _ = $(store {dst = nextBlockVar, src = nextBlockArg}) + val _ = $(jmp doSwitchNextBlock) + val _ = print "\n" + + val _ = print "doSwitchNextBlock:\n" + val nextBlock = newTemp (LLVM.Type.uintptr ()) + val _ = $(load {dst = nextBlock, src = nextBlockVar}) + val _ = + if !Control.chunkJumpTable + then let + val index = newTemp (LLVM.Type.uintptr ()) + val nextLabelAddr = newTemp (LLVM.Type.Pointer LLVM.Type.blockaddress) + val nextLabel = newTemp LLVM.Type.blockaddress + val bias = LLVM.Value.word (WordX.fromInt (#2 (List.first entries), + WordSize.cpointer ())) + + val _ = $(naryop {dst = index, oper = ("sub nuw nsw", LLVM.Type.uintptr ()), + args = [nextBlock, bias]}) + val _ = $(gep {dst = nextLabelAddr, src = nextLabels, + args = [LLVM.Value.zero WordSize.word32, index]}) + val _ = $(load {dst = nextLabel, src = nextLabelAddr}) + val _ = $(indirectbr {addr = nextLabel, labels = List.map (entries, LLVM.Value.label o #1)}) + in + () + end + else let + val _ = $(switch {value = nextBlock, + default = LLVM.Value.label' "switchNextBlockDefault", + table = List.map (entries, fn (label, index) => + (LLVM.Value.word + (WordX.fromInt + (index, + WordSize.cpointer ())), + LLVM.Value.label label))}) + val _ = print "switchNextBlockDefault:\n" + val _ = $(unreachable ()) + in + () + end + val _ = print "\n" + + val _ = Vector.foreach (blocks, outputBlock) + + val _ = print "}\n\n" + in + () + end + + fun outputChunks chunks = + let + val {done, print, ...} = outputLL () + val mc = LLVM.ModuleContext.new () + in + print "\n" + ; List.foreach (chunks, fn chunk => outputChunkFn (chunk, mc, print)) + ; LLVM.ModuleContext.emit (mc, print) + ; done () + end + val chunksWithSizes = + List.revMap + (chunks, fn chunk as Chunk.T {blocks, ...} => + (chunk, + Vector.fold + (blocks, 0, fn (Block.T {statements, ...}, n) => + n + Vector.length statements + 1))) + fun batch (chunksWithSizes, acc, n) = + case chunksWithSizes of + [] => outputChunks acc + | (chunk, s)::chunksWithSizes' => + let + val m = n + s + in + if List.isEmpty acc orelse m <= !Control.chunkBatch + then batch (chunksWithSizes', chunk::acc, m) + else (outputChunks acc; + batch (chunksWithSizes, [], 0)) + end + val _ = batch (chunksWithSizes, [], 0) + + val {print, done, ...} = outputC () + fun defineNextChunks (nextChunksName, chunkName) = + (List.foreach + (chunks, fn Chunk.T {chunkLabel, ...} => + (print "PRIVATE extern ChunkFn_t " + ; print (chunkName chunkLabel) + ; print ";\n")) + ; print "PRIVATE ChunkFnPtr_t const " + ; print nextChunksName + ; print "[" + ; print (Int.toString (Vector.length nextChunks)) + ; print "] = {\n" + ; Vector.foreachi + (nextChunks, fn (i, label) => + (print "\t" + ; print "/* " + ; print (Int.toString i) + ; print ": */ " + ; print "/* " + ; print (Label.toString label) + ; print " */ &(" + ; print (chunkName (labelChunk label)) + ; print "),\n")) + ; print "};\n") + val defineNextChunks = fn () => + (defineNextChunks ("nextChunks", ChunkLabel.toStringForC) + ; if !Control.llvmCC10 + then defineNextChunks ("nextXChunks", ChunkLabel.toStringXForC) + else ()) + val additionalMainArgs = + let + val mainLabel = #label main + in + [concat [Int.toString (labelIndex mainLabel), + " /* ", Label.toString mainLabel, " */"]] + end + val _ = + CCodegen.outputDeclarations + {additionalMainArgs = additionalMainArgs, + includes = ["c-main.h"], + program = program, + print = print, + rest = defineNextChunks} + val _ = done () + in + () + end + +end diff -Nru mlton-20130715/mlton/codegen/llvm-codegen/llvm-codegen.sig mlton-20210117+dfsg/mlton/codegen/llvm-codegen/llvm-codegen.sig --- mlton-20130715/mlton/codegen/llvm-codegen/llvm-codegen.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/llvm-codegen/llvm-codegen.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,27 @@ +(* Copyright (C) 2013-2014 Matthew Fluet, Brian Leibig. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature LLVM_CODEGEN_STRUCTS = + sig + structure CCodegen: C_CODEGEN + structure Machine: MACHINE + sharing Machine = CCodegen.Machine + end + +signature LLVM_CODEGEN = + sig + include LLVM_CODEGEN_STRUCTS + + val implementsPrim: 'a Machine.Prim.t -> bool + val output: {program: Machine.Program.t, + outputC: unit -> {file: File.t, + print: string -> unit, + done: unit -> unit}, + outputLL: unit -> {file: File.t, + print: string -> unit, + done: unit -> unit} + } -> unit + end diff -Nru mlton-20130715/mlton/codegen/llvm-codegen/sources.cm mlton-20210117+dfsg/mlton/codegen/llvm-codegen/sources.cm --- mlton-20130715/mlton/codegen/llvm-codegen/sources.cm 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/llvm-codegen/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,20 @@ +(* Copyright (C) 2013-2014 Matthew Fluet, Brian Leibig + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +Library + +functor LLVMCodegen + +is + +../../../lib/mlton/sources.cm +../../atoms/sources.cm +../../backend/sources.cm +../../control/sources.cm +../c-codegen/sources.cm + +llvm-codegen.sig +llvm-codegen.fun diff -Nru mlton-20130715/mlton/codegen/llvm-codegen/sources.mlb mlton-20210117+dfsg/mlton/codegen/llvm-codegen/sources.mlb --- mlton-20130715/mlton/codegen/llvm-codegen/sources.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/llvm-codegen/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,18 @@ +(* Copyright (C) 2013-2014 Matthew Fluet, Brian Leibig + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +local + ../../../lib/mlton/sources.mlb + ../../atoms/sources.mlb + ../../backend/sources.mlb + ../../control/sources.mlb + ../c-codegen/sources.mlb + + llvm-codegen.sig + llvm-codegen.fun +in + functor LLVMCodegen +end diff -Nru mlton-20130715/mlton/codegen/sources.cm mlton-20210117+dfsg/mlton/codegen/sources.cm --- mlton-20130715/mlton/codegen/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -3,18 +3,20 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library functor amd64Codegen functor CCodegen +functor LLVMCodegen functor x86Codegen is amd64-codegen/sources.cm c-codegen/sources.cm +llvm-codegen/sources.cm x86-codegen/sources.cm diff -Nru mlton-20130715/mlton/codegen/sources.mlb mlton-20210117+dfsg/mlton/codegen/sources.mlb --- mlton-20130715/mlton/codegen/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -3,16 +3,18 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) local amd64-codegen/sources.mlb c-codegen/sources.mlb + llvm-codegen/sources.mlb x86-codegen/sources.mlb in functor amd64Codegen functor CCodegen + functor LLVMCodegen functor x86Codegen end diff -Nru mlton-20130715/mlton/codegen/x86-codegen/peephole.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/peephole.fun --- mlton-20130715/mlton/codegen/x86-codegen/peephole.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/peephole.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/peephole.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/peephole.sig --- mlton-20130715/mlton/codegen/x86-codegen/peephole.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/peephole.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/sources.cm mlton-20210117+dfsg/mlton/codegen/x86-codegen/sources.cm --- mlton-20130715/mlton/codegen/x86-codegen/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -3,21 +3,20 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library functor x86Codegen is ../../../lib/mlton/sources.cm -../../ast/sources.cm ../../atoms/sources.cm -../../control/sources.cm ../../backend/sources.cm +../../control/sources.cm ../c-codegen/sources.cm peephole.sig diff -Nru mlton-20130715/mlton/codegen/x86-codegen/sources.mlb mlton-20210117+dfsg/mlton/codegen/x86-codegen/sources.mlb --- mlton-20130715/mlton/codegen/x86-codegen/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -3,16 +3,15 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) local ../../../lib/mlton/sources.mlb - ../../ast/sources.mlb ../../atoms/sources.mlb - ../../control/sources.mlb ../../backend/sources.mlb + ../../control/sources.mlb ../c-codegen/sources.mlb peephole.sig diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-allocate-registers.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-allocate-registers.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-allocate-registers.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-allocate-registers.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2010 Matthew Fluet. +(* Copyright (C) 2010,2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -38,7 +38,7 @@ fun mungeLabelDarwin l = Label.fromString (Label.toString l ^ "-MLtonLocalBaseSymbol") in - case (!Control.Target.os, !Control.positionIndependent) of + case (!Control.Target.os, !Control.Native.pic) of (* Only darwin and ELF might be using PIC *) (Darwin, true) => (mungeLabelDarwin, SOME Register.esp) | (_, true) => (mungeLabelELF, SOME Register.ebx) @@ -4007,14 +4007,14 @@ registerAllocation = registerAllocation} in {assembly = AppendList.appends - [if !Control.Native.commented > 3 + [if !Control.codegenComments > 3 then AppendList.cons ((Assembly.comment "pre begin:"), (toComments ra)) else AppendList.empty, assembly_commit_fltregisters, assembly_commit_registers, - if !Control.Native.commented > 3 + if !Control.codegenComments > 3 then AppendList.cons ((Assembly.comment "pre end:"), (toComments registerAllocation)) @@ -4306,7 +4306,7 @@ registerAllocation = registerAllocation} in {assembly = AppendList.appends - [if !Control.Native.commented > 3 + [if !Control.codegenComments > 3 then AppendList.cons ((Assembly.comment "post begin:"), (toComments ra)) @@ -4314,7 +4314,7 @@ assembly_commit_fltregisters, assembly_commit_registers, assembly_dead_registers, - if !Control.Native.commented > 3 + if !Control.codegenComments > 3 then AppendList.cons ((Assembly.comment "post end:"), (toComments registerAllocation)) @@ -6173,7 +6173,7 @@ = let val _ = setRA(id, {registerAllocation = registerAllocation}) in - {assembly = if !Control.Native.commented > 2 + {assembly = if !Control.codegenComments > 2 then (toComments registerAllocation) else AppendList.empty, registerAllocation = registerAllocation} @@ -10828,19 +10828,19 @@ val assembly'' = AppendList.appends - [if !Control.Native.commented > 1 + [if !Control.codegenComments > 1 then AppendList.fromList [Assembly.comment (String.make (60, #"*")), (Assembly.comment (Directive.toString d))] else AppendList.empty, - if !Control.Native.commented > 4 + if !Control.codegenComments > 4 then AppendList.fromList (Liveness.toComments info) else AppendList.empty, assembly', - if !Control.Native.commented > 5 + if !Control.codegenComments > 5 then (RegisterAllocation.toComments registerAllocation) else AppendList.empty] @@ -10871,19 +10871,19 @@ val assembly'' = AppendList.appends - [if !Control.Native.commented > 1 + [if !Control.codegenComments > 1 then AppendList.fromList [Assembly.comment (String.make (60, #"*")), (Assembly.comment (Instruction.toString i))] else AppendList.empty, - if !Control.Native.commented > 4 + if !Control.codegenComments > 4 then AppendList.fromList (Liveness.toComments info) else AppendList.empty, assembly', - if !Control.Native.commented > 5 + if !Control.codegenComments > 5 then (RegisterAllocation.toComments registerAllocation) else AppendList.empty] @@ -10895,7 +10895,7 @@ end) val assembly = AppendList.toList assembly - val assembly = if !Control.Native.commented > 1 + val assembly = if !Control.codegenComments > 1 then (Assembly.comment (String.make (60, #"&")):: Assembly.comment diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-allocate-registers.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-allocate-registers.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-allocate-registers.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-allocate-registers.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-codegen.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-codegen.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-codegen.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-codegen.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009-2010 Matthew Fluet. +(* Copyright (C) 2009-2010,2014,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -62,8 +62,7 @@ structure x86MLton = x86MLton) open x86 - fun output {program as Machine.Program.T {chunks, frameLayouts, handlesSignals, - main, ...}, + fun output {program as Machine.Program.T {chunks, handlesSignals, main, ...}, outputC: unit -> {file: File.t, print: string -> unit, done: unit -> unit}, @@ -76,20 +75,29 @@ * hold the C stack pointer. We only need to do this in programs * that handle signals. *) - handlesSignals andalso let open Control.Target in !os = Cygwin end + let open Control.Target in !os = OpenBSD orelse (handlesSignals andalso !os = Cygwin) end val (picMungeLabel, picBase) = x86AllocateRegisters.picRelative () val makeC = outputC val makeS = outputS - val Machine.Program.T {profileInfo, ...} = program - val profileInfo = - case profileInfo of - NONE => Machine.ProfileInfo.empty - | SOME pi => pi - val {newProfileLabel, delProfileLabel, getProfileInfo} = - Machine.ProfileInfo.modify profileInfo + val (newProfileLabel, delProfileLabel, getSourceMaps) = + let + val Machine.Program.T {sourceMaps, ...} = program + in + case sourceMaps of + NONE => (fn _ => Error.bug "x86Codegen.newProfileLabel", + fn _ => Error.bug "x86Codegen.delProfileLabel", + fn () => NONE) + | SOME sm => + let + val {newProfileLabel, delProfileLabel, getSourceMaps} = + Machine.SourceMaps.modify sm + in + (newProfileLabel, delProfileLabel, SOME o getSourceMaps) + end + end (* C specific *) fun outputC () @@ -97,30 +105,28 @@ local val Machine.Program.T {chunks, - frameLayouts, + frameInfos, frameOffsets, + globals, handlesSignals, - intInfs, main, maxFrameSize, objectTypes, - reals, - vectors, ...} = + staticHeaps, ...} = program in val program = Machine.Program.T {chunks = chunks, - frameLayouts = frameLayouts, + frameInfos = frameInfos, frameOffsets = frameOffsets, + globals = globals, handlesSignals = handlesSignals, - intInfs = intInfs, main = main, maxFrameSize = maxFrameSize, objectTypes = objectTypes, - profileInfo = SOME (getProfileInfo ()), - reals = reals, - vectors = vectors} + sourceMaps = getSourceMaps (), + staticHeaps = staticHeaps} end val {print, done, ...} = makeC () val additionalMainArgs = @@ -141,8 +147,8 @@ let val m = List.fold - (chunks, ~1, fn (Machine.Chunk.T {regMax, ...}, max) => - Int.max (max, regMax t)) + (chunks, ~1, fn (Machine.Chunk.T {tempsMax, ...}, max) => + Int.max (max, tempsMax t)) val m = m + 1 in print (concat ["PRIVATE ", CType.toString t, @@ -376,12 +382,6 @@ val liveInfo = x86Liveness.LiveInfo.newLiveInfo () val jumpInfo = x86JumpInfo.newJumpInfo () - fun frameInfoToX86 (Machine.FrameInfo.T {frameLayoutsIndex, ...}) = - x86.FrameInfo.T - {frameLayoutsIndex = frameLayoutsIndex, - size = Bytes.toInt (#size (Vector.sub (frameLayouts, - frameLayoutsIndex)))} - fun outputChunk (chunk as Machine.Chunk.T {blocks, chunkLabel, ...}, print) = let @@ -396,7 +396,6 @@ val {chunk} = x86Translate.translateChunk {chunk = chunk, - frameInfoToX86 = frameInfoToX86, liveInfo = liveInfo} val chunk : x86.Chunk.t diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-codegen.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-codegen.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-codegen.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-codegen.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-entry-transfer.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-entry-transfer.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-entry-transfer.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-entry-transfer.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -67,7 +68,7 @@ | Transfer.CCall {return, func, ...} => (case return of NONE => true - | SOME l => isCReturn l func))) + | SOME {return, ...} => isCReturn return func))) val _ = destroy () val _ = if b then () else List.foreach(blocks, Block.printBlock) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-entry-transfer.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-entry-transfer.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-entry-transfer.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-entry-transfer.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -356,10 +357,10 @@ open Layout in val rec layoutU - = fn Word w => WordX.layout w + = fn Word w => WordX.layout (w, {suffix = false}) | Label l => Label.layout l | LabelPlusWord (l, w) - => paren (seq [Label.layout l, str "+", WordX.layout w]) + => paren (seq [Label.layout l, str "+", WordX.layout (w, {suffix = false})]) and layout = fn T {immediate, ...} => layoutU immediate end @@ -440,12 +441,12 @@ then construct (LabelPlusWord (l, w)) else Error.bug "x86.Immediate.labelPlusWord" - val int' = fn (i, ws) => word (WordX.fromIntInf (IntInf.fromInt i, ws)) + val int' = fn (i, ws) => word (WordX.fromInt (i, ws)) val int = fn i => int' (i, WordSize.word32) val zero = int 0 val labelPlusInt = fn (l, i) => - labelPlusWord (l, WordX.fromIntInf (IntInf.fromInt i, WordSize.word32)) + labelPlusWord (l, WordX.fromInt (i, WordSize.word32)) val deLabel = fn T {immediate = Label l, ...} => SOME l @@ -548,7 +549,7 @@ struct structure Class = struct - val counter = Counter.new 0 + val nextCounter = Counter.generator 0 datatype t = T of {counter: int, name: string} @@ -562,7 +563,7 @@ fun new {name} = let - val class = T {counter = Counter.next counter, + val class = T {counter = nextCounter (), name = name} in class @@ -700,7 +701,7 @@ => utilized local - val counter = Counter.new 0 + val nextCounter = Counter.generator 0 val table: t HashSet.t ref = ref (HashSet.new {hash = hash}) in val construct @@ -715,7 +716,7 @@ fn () => T {memloc = memloc, hash = hash, plist = PropertyList.new (), - counter = Counter.next counter, + counter = nextCounter (), utilized = utilizedU memloc}) end @@ -1012,14 +1013,13 @@ end local - val num : int ref = ref 0 + val nextNum = Counter.generator 0 in - val temp = fn {size} => (Int.inc num; - imm {base = Immediate.zero, - index = Immediate.int (!num), - scale = Scale.One, - size = size, - class = Class.Temp}) + val temp = fn {size} => imm {base = Immediate.zero, + index = Immediate.int (nextNum ()), + scale = Scale.One, + size = size, + class = Class.Temp} end (* @@ -2880,16 +2880,11 @@ struct structure Id = struct - val num : int ref = ref 0 + val nextNum = Counter.generator 0 datatype t = T of {num : int, plist: PropertyList.t} - fun new () = let - val id = T {num = !num, - plist = PropertyList.new ()} - val _ = Int.inc num - in - id - end + fun new () = T {num = nextNum (), + plist = PropertyList.new ()} val plist = fn T {plist, ...} => plist val layout = let @@ -3589,13 +3584,13 @@ structure FrameInfo = struct datatype t = T of {size: int, - frameLayoutsIndex: int} + frameInfosIndex: int} - fun toString (T {size, frameLayoutsIndex}) + fun toString (T {size, frameInfosIndex}) = concat ["{", "size = ", Int.toString size, ", ", - "frameLayoutsIndex = ", - Int.toString frameLayoutsIndex, "}"] + "frameInfosIndex = ", + Int.toString frameInfosIndex, "}"] end structure Entry = @@ -3801,9 +3796,9 @@ | Return of {live: MemLocSet.t} | Raise of {live: MemLocSet.t} | CCall of {args: (Operand.t * Size.t) list, - frameInfo: FrameInfo.t option, func: RepType.t CFunction.t, - return: Label.t option} + return: {return: Label.t, + size: int option} option} val toString = fn Goto {target} @@ -3822,7 +3817,7 @@ (concat o Cases.mapToList) (cases, fn (w, target) => concat[" (", - WordX.toString w, + WordX.toString (w, {suffix = true}), " -> GOTO ", Label.toString target, ")"]) ^ @@ -3888,7 +3883,13 @@ (List.map(args, fn (oper,_) => Operand.toString oper), ", "), ") <", - Option.toString Label.toString return, + Option.toString (fn {return, size} => + concat ["(", + Label.toString return, + ", ", + Option.toString Int.toString size, + ")"]) + return, ">"] val uses_defs_kills @@ -3918,7 +3919,7 @@ | CCall {return, ...} => (case return of NONE => [] - | SOME l => [l]) + | SOME {return, ...} => [return]) | _ => [] val live @@ -3933,13 +3934,12 @@ => Switch {test = replacer {use = true, def = false} test, cases = cases, default = default} - | CCall {args, frameInfo, func, return} + | CCall {args, func, return} => CCall {args = List.map(args, fn (oper,size) => (replacer {use = true, def = false} oper, size)), - frameInfo = frameInfo, func = func, return = return} | transfer => transfer diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-generate-transfers.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-generate-transfers.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-generate-transfers.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-generate-transfers.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -27,7 +27,7 @@ val ones : int * WordSize.t -> WordX.t = fn (i, ws) => (WordX.notb o WordX.lshift) (WordX.allOnes ws, - WordX.fromIntInf (IntInf.fromInt i, ws)) + WordX.fromInt (i, ws)) val tracerTop = x86.tracerTop @@ -465,25 +465,17 @@ {registers = [Register.esp]}) local - val set: (word * String.t * Label.t) HashSet.t = - HashSet.new {hash = #1} + val set: (String.t, Label.t) HashTable.t = + HashTable.new {hash = String.hash, equals = String.equals} in fun makeDarwinSymbolStubLabel name = - let - val hash = String.hash name - in - (#3 o HashSet.lookupOrInsert) - (set, hash, - fn (hash', name', _) => - hash = hash' andalso name = name', - fn () => - (hash, name, - Label.newString (concat ["L_", name, "_stub"]))) - end + (HashTable.lookupOrInsert) + (set, name, fn () => + Label.newString (concat ["L_", name, "_stub"])) fun makeDarwinSymbolStubs () = - HashSet.fold - (set, [], fn ((_, name, label), assembly) => + HashTable.foldi + (set, [], fn (name, label, assembly) => (Assembly.pseudoop_symbol_stub ()) :: (Assembly.label label) :: (Assembly.pseudoop_indirect_symbol (Label.fromString name)) :: @@ -567,7 +559,7 @@ | CReturn {dsts, frameInfo, func, label} => let fun getReturn () = - if Vector.length dsts = 0 + if Vector.isEmpty dsts then AppendList.empty else let val srcs = @@ -596,7 +588,7 @@ case frameInfo of SOME fi => let - val FrameInfo.T {size, frameLayoutsIndex} + val FrameInfo.T {size, frameInfosIndex} = fi val finish = AppendList.appends @@ -623,11 +615,11 @@ [Assembly.pseudoop_p2align (Immediate.int 4, NONE, NONE), Assembly.pseudoop_long - [Immediate.int frameLayoutsIndex], + [Immediate.int frameInfosIndex], Assembly.label label], AppendList.fromList (ProfileLabel.toAssemblyOpt profileLabel), - if CFunction.maySwitchThreads func + if CFunction.maySwitchThreadsTo func then (* entry from far assumptions *) farEntry finish else (* near entry & live transfer assumptions *) @@ -671,7 +663,7 @@ (farEntry AppendList.empty)] | Cont {label, frameInfo = FrameInfo.T {size, - frameLayoutsIndex}, + frameInfosIndex}, ...} => AppendList.appends @@ -679,7 +671,7 @@ [Assembly.pseudoop_p2align (Immediate.int 4, NONE, NONE), Assembly.pseudoop_long - [Immediate.int frameLayoutsIndex], + [Immediate.int frameInfosIndex], Assembly.label label], AppendList.fromList (ProfileLabel.toAssemblyOpt profileLabel), @@ -701,7 +693,7 @@ profileStackTopCommit) end))] | Handler {frameInfo = (FrameInfo.T - {frameLayoutsIndex, size}), + {frameInfosIndex, size}), label, ...} => AppendList.appends @@ -709,7 +701,7 @@ [Assembly.pseudoop_p2align (Immediate.int 4, NONE, NONE), Assembly.pseudoop_long - [Immediate.int frameLayoutsIndex], + [Immediate.int frameInfosIndex], Assembly.label label], AppendList.fromList (ProfileLabel.toAssemblyOpt profileLabel), @@ -732,11 +724,11 @@ end))] val pre = AppendList.appends - [if !Control.Native.commented > 1 + [if !Control.codegenComments > 1 then AppendList.single (Assembly.comment (Entry.toString entry)) else AppendList.empty, - if !Control.Native.commented > 2 + if !Control.codegenComments > 2 then AppendList.single (Assembly.comment (LiveSet.fold @@ -790,7 +782,7 @@ and effectDefault (gef as GEF {fall,...}) {label, transfer} : Assembly.t AppendList.t = AppendList.append - (if !Control.Native.commented > 1 + (if !Control.codegenComments > 1 then AppendList.single (Assembly.comment (Transfer.toString transfer)) @@ -1132,19 +1124,15 @@ {target = x86MLton.gcState_stackTopMinusWordDerefOperand (), absolute = true}))) end - | CCall {args, frameInfo, func, return} + | CCall {args, func, return} => let datatype z = datatype CFunction.Convention.t datatype z = datatype CFunction.SymbolScope.t datatype z = datatype CFunction.Target.t val CFunction.T {convention, - maySwitchThreads, - modifiesFrontier, - readsStackTop, return = returnTy, symbolScope, - target, - writesStackTop, ...} = func + target, ...} = func val stackTopMinusWordDeref = x86MLton.gcState_stackTopMinusWordDerefOperand () val Liveness.T {dead, ...} @@ -1243,11 +1231,10 @@ size_args + space) end val flush = - case frameInfo of - SOME (FrameInfo.T {size, ...}) => + case return of + SOME {return, size = SOME size} => (* Entering runtime *) let - val return = valOf return val _ = enque return val stackTopTemp @@ -1335,16 +1322,16 @@ dead_memlocs = MemLocSet.empty, dead_classes = ClassSet.empty}))) end - | NONE => + | _ => AppendList.single (Assembly.directive_force {commit_memlocs = let val s = MemLocSet.empty - val s = if modifiesFrontier + val s = if CFunction.modifiesFrontier func then MemLocSet.add (s, frontier ()) else s - val s = if readsStackTop + val s = if CFunction.readsStackTop func then MemLocSet.add (s, stackTop ()) else s @@ -1406,7 +1393,7 @@ in case (symbolScope, !Control.Target.os, - !Control.positionIndependent) of + !Control.Native.pic) of (* Private functions can be easily reached * with a direct (eip-relative) call. *) @@ -1444,7 +1431,9 @@ {target = applyFFTempFun, absolute = true}] val kill - = if isSome frameInfo + = if (case return of + SOME {size = SOME _, ...} => true + | _ => false) then AppendList.single (Assembly.directive_force {commit_memlocs = MemLocSet.empty, @@ -1461,11 +1450,11 @@ remove_classes = ClassSet.empty, dead_memlocs = let val s = MemLocSet.empty - val s = if modifiesFrontier + val s = if CFunction.modifiesFrontier func then MemLocSet.add (s, frontier ()) else s - val s = if writesStackTop + val s = if CFunction.writesStackTop func then MemLocSet.add (s, stackTop ()) else s @@ -1488,7 +1477,7 @@ size = pointerSize})) else AppendList.empty val continue - = if maySwitchThreads + = if CFunction.maySwitchThreadsFrom func then (* Returning from runtime *) (farTransfer MemLocSet.empty AppendList.empty @@ -1499,20 +1488,21 @@ absolute = true}))) else case return of NONE => AppendList.empty - | SOME l => (if isSome frameInfo - then (* Don't need to trampoline, - * since didn't switch threads, - * but can't fall because - * frame layout data is prefixed - * to l's code; use fallNone - * to force a jmp with near - * jump assumptions. - *) - fallNone - else fall) - gef - {label = l, - live = getLive (liveInfo, l)} + | SOME {return, size} => + (if isSome size + then (* Don't need to trampoline, + * since didn't switch threads, + * but can't fall because + * frame layout data is prefixed + * to l's code; use fallNone + * to force a jmp with near + * jump assumptions. + *) + fallNone + else fall) + gef + {label = return, + live = getLive (liveInfo, return)} in AppendList.appends [cacheEsp (), @@ -1853,7 +1843,7 @@ if length >= 8 andalso WordX.lt (WordX.div(rangeK,two,{signed=false}), - WordX.fromIntInf (IntInf.fromInt length, ws), + WordX.fromInt (length, ws), {signed = false}) then let val cases diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-generate-transfers.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-generate-transfers.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-generate-transfers.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-generate-transfers.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-jump-info.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-jump-info.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-jump-info.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-jump-info.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -61,7 +62,7 @@ | Entry.Cont {label, ...} => forceNear (jumpInfo, label) | Entry.Handler {label, ...} => forceNear (jumpInfo, label) | Entry.CReturn {label, func, ...} - => if CFunction.maySwitchThreads func + => if CFunction.maySwitchThreadsTo func then forceNear (jumpInfo, label) else (); List.foreach diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-jump-info.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-jump-info.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-jump-info.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-jump-info.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-liveness.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-liveness.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-liveness.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-liveness.fun 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -314,20 +314,20 @@ end local - val num = Counter.new 1 + val nextNum = Counter.generator 1 in fun topo_sort label = let val {topo, pred, ...} = getBlockInfo label in if !topo = 0 - then (topo := Counter.next num; + then (topo := nextNum (); push_todo label; List.foreach(!pred, topo_sort)) else () end fun topo_root label - = (get_topo label := Counter.next num; + = (get_topo label := nextNum (); push_todo label) end diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-liveness.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-liveness.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-liveness.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-liveness.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-live-transfers.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-live-transfers.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-live-transfers.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-live-transfers.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -292,7 +293,7 @@ | Raise {...} => () | CCall {return, ...} - => Option.app (return, doit) + => Option.app (return, doit o #return) end) val _ @@ -449,7 +450,7 @@ | Return _ => (I.PosInfinity, NONE) | Raise _ => (I.PosInfinity, NONE) | CCall {func, ...} - => if CFunction.maySwitchThreads func + => if CFunction.maySwitchThreadsFrom func orelse Size.class (MemLoc.size temp) <> Size.INT then (I.PosInfinity, NONE) else default () @@ -524,7 +525,7 @@ | Cont {...} => (I.PosInfinity, NONE) | Handler {...} => (I.PosInfinity, NONE) | CReturn {func, ...} - => if (CFunction.maySwitchThreads func + => if (CFunction.maySwitchThreadsTo func orelse Size.class (MemLoc.size temp) <> Size.INT) then (I.PosInfinity, NONE) else default () @@ -887,9 +888,9 @@ | Raise {...} => () | CCall {func, return, ...} - => if CFunction.maySwitchThreads func - then Option.app (return, doit'') - else Option.app (return, doit''' func) + => if CFunction.maySwitchThreadsFrom func + then Option.app (return, doit'' o #return) + else Option.app (return, doit''' func o #return) end end @@ -1004,9 +1005,9 @@ | Raise {...} => () | CCall {func, return, ...} - => if CFunction.maySwitchThreads func - then Option.app (return, doit'') - else Option.app (return, doit') + => if CFunction.maySwitchThreadsFrom func + then Option.app (return, doit'' o #return) + else Option.app (return, doit' o #return) end in case !defed diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-live-transfers.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-live-transfers.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-live-transfers.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-live-transfers.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-loop-info.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-loop-info.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-loop-info.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-loop-info.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -109,19 +110,19 @@ => () | CCall {return, func, ...} => Option.app (return, if CFunction.mayGC func - then doit'' - else doit') + then doit'' o #return + else doit' o #return) end) val _ = destInfo () - val lf = Graph.loopForestSteensgaard (G, {root = root}) + val lf = Graph.loopForestSteensgaard (G, {root = root, nodeValue = getNodeInfo}) - fun doit (f: unit LoopForest.t, + fun doit (f: Label.t LoopForest.t, headers, path) = let val {loops, notInLoop} = LoopForest.dest f - val notInLoop = Vector.toListMap (notInLoop, getNodeInfo) + val notInLoop = Vector.toList notInLoop val path' = List.rev path in List.foreach @@ -132,9 +133,7 @@ loopPath = path'})) ; Vector.foreachi (loops, fn (i,{headers, child}) => - doit (child, - Vector.map (headers, getNodeInfo), - i::path)) + doit (child, headers, i::path)) end val _ = doit (lf, Vector.new0 (), []) in diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-loop-info.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-loop-info.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-loop-info.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-loop-info.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-mlton-basic.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-mlton-basic.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-mlton-basic.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-mlton-basic.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -190,6 +190,14 @@ val applyFFTempArgContentsOperand = Operand.memloc applyFFTempArgContents + val overflowCheckTemp = Label.fromString "overflowCheckTemp" + fun overflowCheckTempContents size + = makeContents {base = Immediate.label overflowCheckTemp, + size = size, + class = Classes.StaticTemp} + fun overflowCheckTempContentsOperand size + = Operand.memloc (overflowCheckTempContents size) + val realTemp1D = Label.fromString "realTemp1D" val realTemp1ContentsD = makeContents {base = Immediate.label realTemp1D, @@ -322,10 +330,17 @@ val global_base = make "global" end - val globalObjptrNonRoot_base = Label.fromString "globalObjptrNonRoot" - val gcState_label = Label.fromString "gcState" + local + val static_labels = HashTable.new + {hash=Hash.permute o Word.fromInt, equals=Int.equals} + fun make i = Label.fromString ("static_" ^ Int.toString i) + in + fun static_label i = HashTable.lookupOrInsert + (static_labels, i, fn () => make i) + end + structure Field = Runtime.GCField fun make' (offset: int, size, class) = let diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-mlton-basic.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-mlton-basic.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-mlton-basic.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-mlton-basic.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -88,6 +88,7 @@ (* Static temps defined in x86-main.h *) val applyFFTempFunContentsOperand : x86.Operand.t val applyFFTempArgContentsOperand : x86.Operand.t + val overflowCheckTempContentsOperand : x86.Size.t -> x86.Operand.t val realTemp1ContentsOperand : x86.Size.t -> x86.Operand.t val realTemp2ContentsOperand : x86.Size.t -> x86.Operand.t val realTemp3ContentsOperand : x86.Size.t -> x86.Operand.t @@ -98,7 +99,9 @@ (* Static arrays defined in main.h and x86-main.h *) val local_base : x86.CType.t -> x86.Label.t val global_base : x86.CType.t -> x86.Label.t - val globalObjptrNonRoot_base : x86.Label.t + + (* Machine statics *) + val static_label: int -> x86.Label.t (* gcState relative locations defined in gc.h *) val gcState_label: x86.Label.t diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-mlton.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-mlton.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-mlton.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-mlton.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -24,14 +25,11 @@ end type transInfo = {addData : x86.Assembly.t list -> unit, - frameInfoToX86: (x86MLtonBasic.Machine.FrameInfo.t - -> x86.FrameInfo.t), live: x86.Label.t -> x86.Operand.t list, liveInfo: x86Liveness.LiveInfo.t} fun implementsPrim (p: 'a Prim.t) = let - datatype z = datatype RealSize.t datatype z = datatype WordSize.prim fun w32168 s = case WordSize.prim s of @@ -39,9 +37,9 @@ | W16 => true | W32 => true | W64 => false - datatype z = datatype Prim.Name.t + datatype z = datatype Prim.t in - case Prim.name p of + case p of CPointer_add => true | CPointer_diff => true | CPointer_equal => true @@ -49,7 +47,6 @@ | CPointer_lt => true | CPointer_sub => true | CPointer_toWord => true - | FFI_Symbol _ => true | Real_Math_acos _ => true | Real_Math_asin _ => true | Real_Math_atan _ => true @@ -70,8 +67,6 @@ | Real_le _ => true | Real_lt _ => true | Real_mul _ => true - | Real_muladd _ => true - | Real_mulsub _ => true | Real_neg _ => true | Real_qequal _ => true | Real_rndToReal _ => true @@ -80,7 +75,7 @@ | Real_sub _ => true | Thread_returnToC => false | Word_add _ => true - | Word_addCheck _ => true + | Word_addCheckP _ => true | Word_andb _ => true | Word_castToReal _ => false (* !! *) | Word_equal s => w32168 s @@ -88,9 +83,9 @@ | Word_lshift s => w32168 s | Word_lt (s, _) => w32168 s | Word_mul (s, _) => w32168 s - | Word_mulCheck (s, _) => w32168 s + | Word_mulCheckP (s, _) => w32168 s | Word_neg _ => true - | Word_negCheck _ => true + | Word_negCheckP _ => true | Word_notb _ => true | Word_orb _ => true | Word_quot (s, _) => w32168 s @@ -100,7 +95,7 @@ | Word_ror s => w32168 s | Word_rshift (s, _) => w32168 s | Word_sub _ => true - | Word_subCheck _ => true + | Word_subCheckP _ => true | Word_xorb _ => true | _ => false end @@ -113,10 +108,9 @@ fun prim {prim : RepType.t Prim.t, args : (Operand.t * Size.t) vector, dsts : (Operand.t * Size.t) vector, - transInfo = {addData, ...} : transInfo} + transInfo = {...} : transInfo} = let val primName = Prim.toString prim - datatype z = datatype Prim.Name.t fun getDst1 () = Vector.sub (dsts, 0) @@ -130,9 +124,6 @@ fun getSrc2 () = (Vector.sub (args, 0), Vector.sub (args, 1)) handle _ => Error.bug "x86MLton.prim: getSrc2" - fun getSrc3 () - = (Vector.sub (args, 0), Vector.sub (args, 1), Vector.sub (args, 2)) - handle _ => Error.bug "x86MLton.prim: getSrc3" fun getSrc4 () = (Vector.sub (args, 0), Vector.sub (args, 1), Vector.sub (args, 2), Vector.sub (args, 3)) @@ -251,6 +242,60 @@ transfer = NONE}] end + fun binalcc (oper, condition) + = let + val ((src1,src1size), + (src2,src2size)) = getSrc2 () + val (dst,dstsize) = getDst1 () + val tmp = overflowCheckTempContentsOperand src1size + val _ + = Assert.assert + ("x86MLton.prim: binal, src1size/src2size", + fn () => src1size = src2size) + + (* Reverse src1/src2 when src1 and src2 are temporaries + * and the oper is commutative. + *) + val (src1,src2) + = if (oper = Instruction.ADD) + orelse + (oper = Instruction.ADC) + orelse + (oper = Instruction.AND) + orelse + (oper = Instruction.OR) + orelse + (oper = Instruction.XOR) + then case (Operand.deMemloc src1, Operand.deMemloc src2) + of (SOME memloc_src1, SOME memloc_src2) + => if x86Liveness.track memloc_src1 + andalso + x86Liveness.track memloc_src2 + then (src2,src1) + else (src1,src2) + | _ => (src1,src2) + else (src1,src2) + in + AppendList.fromList + [Block.mkBlock' + {entry = NONE, + statements + = [Assembly.instruction_mov + {dst = tmp, + src = src1, + size = src1size}, + Assembly.instruction_binal + {oper = oper, + dst = tmp, + src = src2, + size = src1size}, + Assembly.instruction_setcc + {condition = condition, + dst = dst, + size = dstsize}], + transfer = NONE}] + end + fun binal64 (oper1, oper2) = let val ((src1,src1size), @@ -311,6 +356,50 @@ transfer = NONE}] end + fun binal64cc (oper1, oper2, condition) + = let + val ((src1,src1size), + (src2,src2size), + (src3,src3size), + (src4,src4size)) = getSrc4 () + val (dst,dstsize) = getDst1 () + val tmp1 = overflowCheckTempContentsOperand src1size + val tmp2 = wordTemp1ContentsOperand src2size + val _ + = Assert.assert + ("x86MLton.prim: binal64cc, src1size/src2size/src3size/src4size", + fn () => src1size = src3size andalso + src2size = src4size) + in + AppendList.fromList + [Block.mkBlock' + {entry = NONE, + statements + = [Assembly.instruction_mov + {dst = tmp1, + src = src1, + size = src1size}, + Assembly.instruction_mov + {dst = tmp2, + src = src2, + size = src2size}, + Assembly.instruction_binal + {oper = oper1, + dst = tmp1, + src = src3, + size = src1size}, + Assembly.instruction_binal + {oper = oper2, + dst = tmp2, + src = src4, + size = src2size}, + Assembly.instruction_setcc + {condition = condition, + dst = dst, + size = dstsize}], + transfer = NONE}] + end + fun pmd oper = let val ((src1,src1size), @@ -355,6 +444,55 @@ transfer = NONE}] end + fun pmdcc (oper, condition) + = let + val ((src1,src1size), + (src2,src2size)) = getSrc2 () + val (dst,dstsize) = getDst1 () + val tmp = overflowCheckTempContentsOperand src1size + val _ + = Assert.assert + ("x86MLton.prim: pmdcc, src1size/src2size", + fn () => src1size = src2size) + + (* Reverse src1/src2 when src1 and src2 are temporaries + * and the oper is commutative. + *) + val (src1,src2) + = if (oper = Instruction.IMUL) + orelse + (oper = Instruction.MUL) + then case (Operand.deMemloc src1, Operand.deMemloc src2) + of (SOME memloc_src1, SOME memloc_src2) + => if x86Liveness.track memloc_src1 + andalso + x86Liveness.track memloc_src2 + then (src2,src1) + else (src1,src2) + | _ => (src1,src2) + else (src1,src2) + in + AppendList.fromList + [Block.mkBlock' + {entry = NONE, + statements + = [Assembly.instruction_mov + {dst = tmp, + src = src1, + size = src1size}, + Assembly.instruction_pmd + {oper = oper, + dst = tmp, + src = src2, + size = src1size}, + Assembly.instruction_setcc + {condition = condition, + dst = dst, + size = dstsize}], + transfer = NONE}] + end + + fun imul2 () = let val ((src1,src1size), @@ -394,6 +532,90 @@ transfer = NONE}] end + fun imul2cc condition + = let + val ((src1,src1size), + (src2,src2size)) = getSrc2 () + val (dst,dstsize) = getDst1 () + val tmp = overflowCheckTempContentsOperand src1size + val _ + = Assert.assert + ("x86MLton.prim: imul2, src1size/src2size", + fn () => src1size = src2size) + + (* Reverse src1/src2 when src1 and src2 are temporaries + * and the oper is commutative. + *) + val (src1,src2) + = case (Operand.deMemloc src1, Operand.deMemloc src2) + of (SOME memloc_src1, SOME memloc_src2) + => if x86Liveness.track memloc_src1 + andalso + x86Liveness.track memloc_src2 + then (src2,src1) + else (src1,src2) + | _ => (src1,src2) + in + AppendList.fromList + [Block.mkBlock' + {entry = NONE, + statements + = [Assembly.instruction_mov + {dst = tmp, + src = src1, + size = src1size}, + Assembly.instruction_imul2 + {dst = tmp, + src = src2, + size = src1size}, + Assembly.instruction_setcc + {condition = condition, + dst = dst, + size = dstsize}], + transfer = NONE}] + end + + fun neg64cc cond + = let + val ((src1,src1size), + (src2,src2size)) = getSrc2 () + val (dst,dstsize) = getDst1 () + val _ + = Assert.assert + ("x86MLton.prim: neg64cc, src1size/src2size", + fn () => src1size = src2size) + val tmp1 = overflowCheckTempContentsOperand src1size + val tmp2 = wordTemp1ContentsOperand src2size + in + AppendList.fromList + [Block.mkBlock' + {entry = NONE, + statements + = [Assembly.instruction_mov + {dst = tmp1, + src = Operand.immediate_zero, + size = src1size}, + Assembly.instruction_mov + {dst = tmp2, + src = Operand.immediate_zero, + size = src2size}, + Assembly.instruction_binal + {oper = Instruction.SUB, + dst = tmp1, + src = src1, + size = src1size}, + Assembly.instruction_binal + {oper = Instruction.SBB, + dst = tmp2, + src = src2, + size = src2size}, + Assembly.instruction_setcc + {condition = cond, + dst = dst, + size = dstsize}], + transfer = NONE}] + end + fun unal oper = let val (src,srcsize) = getSrc1 () @@ -418,6 +640,31 @@ transfer = NONE}] end + fun unalcc (oper, condition) + = let + val (src,srcsize) = getSrc1 () + val (dst,dstsize) = getDst1 () + val tmp = overflowCheckTempContentsOperand srcsize + in + AppendList.fromList + [Block.mkBlock' + {entry = NONE, + statements + = [Assembly.instruction_mov + {dst = tmp, + src = src, + size = srcsize}, + Assembly.instruction_unal + {oper = oper, + dst = tmp, + size = srcsize}, + Assembly.instruction_setcc + {condition = condition, + dst = dst, + size = dstsize}], + transfer = NONE}] + end + fun unal64 (oper, mk) = let val ((src1,src1size),(src2,src2size)) = getSrc2 () @@ -577,40 +824,6 @@ transfer = NONE}] end - fun fbina_fmul oper - = let - val (dst,dstsize) = getDst1 () - val ((src1,src1size), - (src2,src2size), - (src3,src3size)) = getSrc3 () - val _ - = Assert.assert - ("x86MLton.prim: fbina_fmul, dstsize/src1size/src2size/src3size", - fn () => src1size = dstsize andalso - src2size = dstsize andalso - src3size = dstsize) - in - AppendList.fromList - [Block.mkBlock' - {entry = NONE, - statements - = [Assembly.instruction_pfmov - {dst = dst, - src = src1, - size = src1size}, - Assembly.instruction_pfbina - {oper = Instruction.FMUL, - dst = dst, - src = src2, - size = dstsize}, - Assembly.instruction_pfbina - {oper = oper, - dst = dst, - src = src3, - size = dstsize}], - transfer = NONE}] - end - fun funa oper = let val (dst,dstsize) = getDst1 () @@ -662,7 +875,7 @@ val (comment_begin, comment_end) - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then let val comment = primName in @@ -704,10 +917,15 @@ | W16 => sral i | W32 => sral i | W64 => Error.bug "x86MLton.prim: shift, W64" + + fun flag {signed} = + if signed then x86.Instruction.O else x86.Instruction.C + + datatype z = datatype Prim.t in AppendList.appends [comment_begin, - (case Prim.name prim of + (case prim of CPointer_add => binal Instruction.ADD | CPointer_diff => binal Instruction.SUB | CPointer_equal => cmp Instruction.E @@ -715,119 +933,6 @@ | CPointer_lt => cmp Instruction.B | CPointer_sub => binal Instruction.SUB | CPointer_toWord => mov () - | FFI_Symbol {name, symbolScope, ...} - => let - datatype z = datatype CFunction.SymbolScope.t - datatype z = datatype Control.Format.t - datatype z = datatype MLton.Platform.OS.t - - val (dst, dstsize) = getDst1 () - - val label = fn () => Label.fromString name - - (* how to access an imported label's address *) - (* windows coff will add another leading _ to label *) - val coff = fn () => Label.fromString ("_imp__" ^ name) - val macho = fn () => - let - val label = - Label.newString (concat ["L_", name, "_non_lazy_ptr"]) - val () = - addData - [Assembly.pseudoop_non_lazy_symbol_pointer (), - Assembly.label label, - Assembly.pseudoop_indirect_symbol (Label.fromString name), - Assembly.pseudoop_long [Immediate.zero]] - in - label - end - val elf = fn () => Label.fromString (name ^ "@GOT") - - val importLabel = fn () => - case !Control.Target.os of - Cygwin => coff () - | Darwin => macho () - | MinGW => coff () - | _ => elf () - - val direct = fn () => - AppendList.fromList - [Block.mkBlock' - {entry = NONE, - statements = - [Assembly.instruction_lea - {dst = dst, - src = Operand.memloc_label (label ()), - size = dstsize}], - transfer = NONE}] - - val indirect = fn () => - AppendList.fromList - [Block.mkBlock' - {entry = NONE, - statements = - [Assembly.instruction_mov - {dst = dst, - src = Operand.memloc_label (importLabel ()), - size = dstsize}], - transfer = NONE}] - in - case (symbolScope, - !Control.Target.os, - !Control.positionIndependent) of - (* Even private PIC symbols on darwin need indirection. *) - (Private, Darwin, true) => indirect () - (* As long as the symbol is private (thus it is not - * exported to code outside this text segment), then - * use normal addressing. If PIC is needed, then the - * memloc_label is updated to relative access in the - * allocate-registers pass. - *) - | (Private, _, _) => direct () - (* On darwin, even executables use the defintion address. - * Therefore we don't need to do indirection. - *) - | (Public, Darwin, _) => direct () - (* On ELF, a public symbol must be accessed via - * the GOT. This is because the final value may not be - * in this text segment. If the executable uses it, then - * the unique C address resides in the executable's - * text segment. The loader does this by creating a PLT - * proxy or copying values to the executable text segment. - * When linking an executable, ELF uses a special trick - * to "simplify" the code. All exported functions and - * symbols have pointers that correspond to the - * executable. Function pointers point to the - * automatically created PLT entry in the executable. - * Variables are copied/relocated into the executable bss. - * - * This means that direct access is fine for executable - * and archive formats. (It also means direct access is - * NOT fine for a library, even if it defines the symbol) - * - *) - | (Public, _, true) => indirect () - | (Public, _, false) => direct () - (* On darwin, the address is the point of definition. So - * indirection is needed. We also need to make a stub! - *) - | (External, Darwin, _) => indirect () - (* On windows, the address is the point of definition. So - * we must always use an indirect lookup to the symbols - * windows rewrites (__imp__name) in our segment. - *) - | (External, MinGW, _) => indirect () - | (External, Cygwin, _) => indirect () - (* When compiling ELF to a library, we access external - * symbols via some address that is updated by the loader. - * That address resides within our data segment, and can - * be easily referenced using RBX-relative addressing. - * This trick is used on every platform MLton supports. - * ELF rewrites symbols of form name@GOT. - *) - | (External, _, true) => indirect () - | (External, _, false) => direct () - end | Real_Math_acos _ => let val (dst,dstsize) = getDst1 () @@ -1069,8 +1174,6 @@ transfer = NONE}] end | Real_mul _ => fbina Instruction.FMUL - | Real_muladd _ => fbina_fmul Instruction.FADD - | Real_mulsub _ => fbina_fmul Instruction.FSUB | Real_add _ => fbina Instruction.FADD | Real_sub _ => fbina Instruction.FSUB | Real_div _ => fbina Instruction.FDIV @@ -1342,6 +1445,16 @@ | W16 => binal Instruction.ADD | W32 => binal Instruction.ADD | W64 => binal64 (Instruction.ADD, Instruction.ADC)) + | Word_addCheckP (s, sg) => + let + val cond = flag sg + in + case WordSize.prim s of + W8 => binalcc (Instruction.ADD, cond) + | W16 => binalcc (Instruction.ADD, cond) + | W32 => binalcc (Instruction.ADD, cond) + | W64 => binal64cc (Instruction.ADD, Instruction.ADC, cond) + end | Word_andb s => bitop (s, Instruction.AND) | Word_equal _ => cmp Instruction.E | Word_lshift s => shift (s, Instruction.SHL) @@ -1354,6 +1467,20 @@ | W16 => imul2 () | W32 => imul2 () | W64 => Error.bug "x86MLton.prim: Word_mul, W64") + | Word_mulCheckP (s, {signed}) => + if signed + then + (case WordSize.prim s of + W8 => pmdcc (x86.Instruction.IMUL, x86.Instruction.O) + | W16 => imul2cc x86.Instruction.O + | W32 => imul2cc x86.Instruction.O + | W64 => Error.bug "x86MLton.arith: Word_mulCheckP, W64") + else + (case WordSize.prim s of + W8 => pmdcc (x86.Instruction.MUL, x86.Instruction.C) + | W16 => pmdcc (x86.Instruction.MUL, x86.Instruction.C) + | W32 => pmdcc (x86.Instruction.MUL, x86.Instruction.C) + | W64 => Error.bug "x86MLton.arith: Word_mulCheckP, W64") | Word_neg s => (case WordSize.prim s of W8 => unal Instruction.NEG @@ -1365,6 +1492,16 @@ oper = Instruction.ADC, src = Operand.immediate_zero, size = dstsize}])) + | Word_negCheckP (s, sg) => + let + val cond = flag sg + in + case WordSize.prim s of + W8 => unalcc (Instruction.NEG, cond) + | W16 => unalcc (Instruction.NEG, cond) + | W32 => unalcc (Instruction.NEG, cond) + | W64 => neg64cc cond + end | Word_notb s => (case WordSize.prim s of W8 => unal Instruction.NOT @@ -1386,6 +1523,16 @@ | W16 => binal Instruction.SUB | W32 => binal Instruction.SUB | W64 => binal64 (Instruction.SUB, Instruction.SBB)) + | Word_subCheckP (s, sg) => + let + val cond = flag sg + in + case WordSize.prim s of + W8 => binalcc (Instruction.SUB, cond) + | W16 => binalcc (Instruction.SUB, cond) + | W32 => binalcc (Instruction.SUB, cond) + | W64 => binal64cc (Instruction.SUB, Instruction.SBB, cond) + end | Word_rndToReal (s, s', _) => let fun default () = @@ -1457,14 +1604,13 @@ end fun ccall {args: (x86.Operand.t * x86.Size.t) vector, - frameInfo, func, - return: x86.Label.t option, + return: {return: x86.Label.t, size: int option} option, transInfo = {...}: transInfo} = let val CFunction.T {convention, target, ...} = func val comment_begin - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then AppendList.single (x86.Block.mkBlock' {entry = NONE, @@ -1486,7 +1632,6 @@ statements = [], transfer = SOME (Transfer.ccall {args = Vector.toList args, - frameInfo = frameInfo, func = func, return = return})})] end @@ -1513,7 +1658,7 @@ transfer = NONE}) end val comment_end - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then AppendList.single (x86.Block.mkBlock' {entry = NONE, @@ -1530,350 +1675,4 @@ AppendList.appends [default (), comment_end] end - fun arith {prim : RepType.t Prim.t, - args : (Operand.t * Size.t) vector, - dsts : (Operand.t * Size.t) vector, - overflow : Label.t, - success : Label.t, - transInfo = {live, liveInfo, ...} : transInfo} - = let - val primName = Prim.toString prim - datatype z = datatype Prim.Name.t - - fun getDst1 () - = Vector.sub (dsts, 0) - handle _ => Error.bug "x86MLton.arith: getDst1" - fun getDst2 () - = (Vector.sub (dsts, 0), Vector.sub (dsts, 1)) - handle _ => Error.bug "x86MLton.arith: getDst2" - fun getSrc1 () - = Vector.sub (args, 0) - handle _ => Error.bug "x86MLton.arith: getSrc1" - fun getSrc2 () - = (Vector.sub (args, 0), Vector.sub (args, 1)) - handle _ => Error.bug "x86MLton.arith: getSrc2" - fun getSrc4 () - = (Vector.sub (args, 0), Vector.sub (args, 1), - Vector.sub (args, 2), Vector.sub (args, 3)) - handle _ => Error.bug "x86MLton.arith: getSrc4" - - fun check (statements, condition) - = AppendList.single - (x86.Block.mkBlock' - {entry = NONE, - statements = statements, - transfer = SOME (x86.Transfer.iff - {condition = condition, - truee = overflow, - falsee = success})}) - fun binal (oper: x86.Instruction.binal, condition) - = let - val (dst, dstsize) = getDst1 () - val ((src1, src1size), (src2, src2size)) = getSrc2 () - val _ = Assert.assert - ("x86MLton.arith: binal, dstsize/src1size/src2size", - fn () => src1size = dstsize andalso src2size = dstsize) - (* Reverse src1/src2 when src1 and src2 are - * temporaries and the oper is commutative. - *) - val (src1,src2) - = if (oper = x86.Instruction.ADD) - then case (x86.Operand.deMemloc src1, - x86.Operand.deMemloc src2) - of (SOME memloc_src1, SOME memloc_src2) - => if x86Liveness.track memloc_src1 - andalso - x86Liveness.track memloc_src2 - then (src2,src1) - else (src1,src2) - | _ => (src1,src2) - else (src1,src2) - in - check ([Assembly.instruction_mov - {dst = dst, - src = src1, - size = dstsize}, - Assembly.instruction_binal - {oper = oper, - dst = dst, - src = src2, - size = dstsize}], - condition) - end - fun binal64 (oper1: x86.Instruction.binal, - oper2: x86.Instruction.binal, - condition) - = let - val ((dst1, dst1size), (dst2, dst2size)) = getDst2 () - val ((src1, src1size), (src2, src2size), - (src3, src3size), (src4, src4size)) = getSrc4 () - val _ = Assert.assert - ("x86MLton.arith: binal64, dst1size/dst2size/src1size/src2size/src3size/src4size", - fn () => src1size = dst1size andalso src3size = dst1size andalso - src2size = dst2size andalso src4size = dst2size andalso - dst1size = dst2size) - val tdst1 = - if List.exists ([src2,src3,src4], fn src => - Operand.mayAlias (dst1, src)) - then wordTemp1ContentsOperand dst1size - else dst1 - val tdst2 = - if List.exists ([src3,src4], fn src => - Operand.mayAlias (dst2, src)) - then wordTemp1ContentsOperand dst2size - else dst2 - in - check ([Assembly.instruction_mov - {dst = tdst1, - src = src1, - size = dst1size}, - Assembly.instruction_mov - {dst = tdst2, - src = src2, - size = dst2size}, - Assembly.instruction_binal - {oper = oper1, - dst = tdst1, - src = src3, - size = dst1size}, - Assembly.instruction_binal - {oper = oper2, - dst = tdst2, - src = src4, - size = dst2size}, - Assembly.instruction_mov - {dst = dst1, - src = tdst1, - size = dst1size}, - Assembly.instruction_mov - {dst = dst2, - src = tdst2, - size = dst2size}], - condition) - end - fun pmd (oper: x86.Instruction.md, condition) - = let - val (dst, dstsize) = getDst1 () - val ((src1, src1size), (src2, src2size)) = getSrc2 () - val _ = Assert.assert - ("x86MLton.arith: pmd, dstsize/src1size/src2size", - fn () => src1size = dstsize andalso src2size = dstsize) - (* Reverse src1/src2 when src1 and src2 are - * temporaries and the oper is commutative. - *) - val (src1, src2) - = if oper = x86.Instruction.MUL - then case (x86.Operand.deMemloc src1, - x86.Operand.deMemloc src2) - of (SOME memloc_src1, SOME memloc_src2) - => if x86Liveness.track memloc_src1 - andalso - x86Liveness.track memloc_src2 - then (src2,src1) - else (src1,src2) - | _ => (src1,src2) - else (src1,src2) - in - check ([Assembly.instruction_mov - {dst = dst, - src = src1, - size = dstsize}, - Assembly.instruction_pmd - {oper = oper, - dst = dst, - src = src2, - size = dstsize}], - condition) - end - fun unal (oper: x86.Instruction.unal, condition) - = let - val (dst, dstsize) = getDst1 () - val (src1, src1size) = getSrc1 () - val _ = Assert.assert - ("x86MLton.arith: unal, dstsize/src1size", - fn () => src1size = dstsize) - in - check ([Assembly.instruction_mov - {dst = dst, - src = src1, - size = dstsize}, - Assembly.instruction_unal - {oper = oper, - dst = dst, - size = dstsize}], - condition) - end - - fun neg64 () - = let - val ((dst1, dst1size), (dst2, dst2size)) = getDst2 () - val ((src1, src1size), (src2, src2size)) = getSrc2 () - val _ = Assert.assert - ("x86MLton.arith: neg64, dst1size/dst2size/src1size/src2size", - fn () => src1size = dst1size andalso - src2size = dst2size andalso - dst1size = dst2size) - val tdst1 = - if List.exists ([src2], fn src => - Operand.mayAlias (dst1, src)) - then wordTemp1ContentsOperand dst1size - else dst1 - val loZ = Label.newString "loZ" - val _ = x86Liveness.LiveInfo.setLiveOperands - (liveInfo, loZ, dst2::((live success) @ (live overflow))) - val loNZ = Label.newString "loNZ" - val _ = x86Liveness.LiveInfo.setLiveOperands - (liveInfo, loNZ, dst2::(live success)) - in - AppendList.fromList - [x86.Block.mkBlock' - {entry = NONE, - statements = [Assembly.instruction_mov - {dst = tdst1, - src = src1, - size = dst1size}, - Assembly.instruction_mov - {dst = dst2, - src = src2, - size = dst2size}, - Assembly.instruction_mov - {dst = dst1, - src = tdst1, - size = dst1size}, - Assembly.instruction_unal - {oper = x86.Instruction.NEG, - dst = dst1, - size = dst1size}], - transfer = SOME (x86.Transfer.iff - {condition = x86.Instruction.Z, - truee = loZ, - falsee = loNZ})}, - x86.Block.mkBlock' - {entry = SOME (x86.Entry.jump {label = loNZ}), - statements = [Assembly.instruction_unal - {dst = dst2, - oper = Instruction.INC, - size = dst2size}, - Assembly.instruction_unal - {oper = x86.Instruction.NEG, - dst = dst2, - size = dst2size}], - transfer = SOME (x86.Transfer.goto {target = success})}, - x86.Block.mkBlock' - {entry = SOME (x86.Entry.jump {label = loZ}), - statements = [Assembly.instruction_unal - {oper = x86.Instruction.NEG, - dst = dst2, - size = dst2size}], - transfer = SOME (x86.Transfer.iff - {condition = x86.Instruction.O, - truee = overflow, - falsee = success})}] - end - - fun imul2 condition - = let - val (dst, dstsize) = getDst1 () - val ((src1, src1size), (src2, src2size)) = getSrc2 () - val _ = Assert.assert - ("x86MLton.arith: imul2, dstsize/src1size/src2size", - fn () => src1size = dstsize andalso src2size = dstsize) - (* Reverse src1/src2 when src1 and src2 are - * temporaries and the oper is commutative. - *) - val (src1, src2) - = case (x86.Operand.deMemloc src1, - x86.Operand.deMemloc src2) - of (SOME memloc_src1, SOME memloc_src2) - => if x86Liveness.track memloc_src1 - andalso - x86Liveness.track memloc_src2 - then (src2,src1) - else (src1,src2) - | _ => (src1,src2) - in - check ([Assembly.instruction_mov - {dst = dst, - src = src1, - size = dstsize}, - Assembly.instruction_imul2 - {dst = dst, - src = src2, - size = dstsize}], - condition) - end - - val (comment_begin,_) - = if !Control.Native.commented > 0 - then let - val comment = primName - in - (AppendList.single - (x86.Block.mkBlock' - {entry = NONE, - statements - = [x86.Assembly.comment - ("begin arith: " ^ comment)], - transfer = NONE}), - AppendList.single - (x86.Block.mkBlock' - {entry = NONE, - statements - = [x86.Assembly.comment - ("end arith: " ^ comment)], - transfer = NONE})) - end - else (AppendList.empty,AppendList.empty) - fun flag {signed} = - if signed then x86.Instruction.O else x86.Instruction.C - in - AppendList.appends - [comment_begin, - (case Prim.name prim of - Word_addCheck (s, sg) => - let - val flag = flag sg - in - case WordSize.prim s of - W8 => binal (x86.Instruction.ADD, flag) - | W16 => binal (x86.Instruction.ADD, flag) - | W32 => binal (x86.Instruction.ADD, flag) - | W64 => binal64 (x86.Instruction.ADD, x86.Instruction.ADC, flag) - end - | Word_mulCheck (s, {signed}) => - let - in - if signed - then - (case WordSize.prim s of - W8 => pmd (x86.Instruction.IMUL, x86.Instruction.O) - | W16 => imul2 x86.Instruction.O - | W32 => imul2 x86.Instruction.O - | W64 => Error.bug "x86MLton.arith: Word_mulCheck, W64") - else - (case WordSize.prim s of - W8 => pmd (x86.Instruction.MUL, x86.Instruction.C) - | W16 => pmd (x86.Instruction.MUL, x86.Instruction.C) - | W32 => pmd (x86.Instruction.MUL, x86.Instruction.C) - | W64 => Error.bug "x86MLton.arith: Word_mulCheck, W64") - end - | Word_negCheck s => - (case WordSize.prim s of - W8 => unal (x86.Instruction.NEG, x86.Instruction.O) - | W16 => unal (x86.Instruction.NEG, x86.Instruction.O) - | W32 => unal (x86.Instruction.NEG, x86.Instruction.O) - | W64 => neg64 ()) - | Word_subCheck (s, sg) => - let - val flag = flag sg - in - case WordSize.prim s of - W8 => binal (x86.Instruction.SUB, flag) - | W16 => binal (x86.Instruction.SUB, flag) - | W32 => binal (x86.Instruction.SUB, flag) - | W64 => binal64 (x86.Instruction.SUB, x86.Instruction.SBB, flag) - end - | _ => Error.bug ("x86MLton.arith: strange Prim.Name.t: " ^ primName))] - end - end diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-mlton.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-mlton.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-mlton.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-mlton.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -23,30 +24,22 @@ sharing Machine = x86MLtonBasic.Machine type transInfo = {addData : x86.Assembly.t list -> unit, - frameInfoToX86: (x86MLtonBasic.Machine.FrameInfo.t - -> x86.FrameInfo.t), live: x86.Label.t -> x86.Operand.t list, liveInfo: x86Liveness.LiveInfo.t} - (* arith, c call, and primitive assembly sequences. *) - val arith: {prim: RepType.t Machine.Prim.t, - args: (x86.Operand.t * x86.Size.t) vector, - dsts: (x86.Operand.t * x86.Size.t) vector, - overflow: x86.Label.t, - success: x86.Label.t, - transInfo : transInfo} -> x86.Block.t' AppendList.t + (* c call, and primitive assembly sequences. *) val ccall: {args: (x86.Operand.t * x86.Size.t) vector, - frameInfo: x86.FrameInfo.t option, func: RepType.t Machine.CFunction.t, - return: x86.Label.t option, + return: {return: x86.Label.t, + size: int option} option, transInfo: transInfo} -> x86.Block.t' AppendList.t val creturn: {dsts: (x86.Operand.t * x86.Size.t) vector, frameInfo: x86.FrameInfo.t option, func: RepType.t Machine.CFunction.t, label: x86.Label.t, transInfo: transInfo} -> x86.Block.t' AppendList.t - val implementsPrim: RepType.t Machine.Prim.t -> bool - val prim: {prim: RepType.t Machine.Prim.t, + val implementsPrim: RepType.t Machine.Prim.t -> bool + val prim: {prim: RepType.t Machine.Prim.t, args: (x86.Operand.t * x86.Size.t) vector, dsts: (x86.Operand.t * x86.Size.t) vector, transInfo: transInfo} -> x86.Block.t' AppendList.t diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-pseudo.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-pseudo.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-pseudo.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-pseudo.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -398,7 +398,7 @@ structure FrameInfo: sig datatype t = T of {size: int, - frameLayoutsIndex: int} + frameInfosIndex: int} end structure Entry: @@ -449,9 +449,9 @@ val return : {live: MemLocSet.t} -> t val raisee : {live: MemLocSet.t} -> t val ccall : {args: (Operand.t * Size.t) list, - frameInfo: FrameInfo.t option, func: RepType.t CFunction.t, - return: Label.t option} -> t + return: {return: Label.t, + size: int option} option} -> t end structure ProfileLabel : diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -1050,7 +1050,7 @@ structure FrameInfo: sig datatype t = T of {size: int, - frameLayoutsIndex: int} + frameInfosIndex: int} end structure Entry: @@ -1129,9 +1129,9 @@ | Return of {live: MemLocSet.t} | Raise of {live: MemLocSet.t} | CCall of {args: (Operand.t * Size.t) list, - frameInfo: FrameInfo.t option, func: RepType.t CFunction.t, - return: Label.t option} + return: {return: Label.t, + size: int option} option} val toString : t -> string @@ -1160,9 +1160,9 @@ val return : {live: MemLocSet.t} -> t val raisee : {live: MemLocSet.t} -> t val ccall: {args: (Operand.t * Size.t) list, - frameInfo: FrameInfo.t option, func: RepType.t CFunction.t, - return: Label.t option} -> t + return: {return: Label.t, + size: int option} option} -> t end structure ProfileLabel : diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-simplify.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-simplify.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-simplify.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-simplify.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -656,6 +656,9 @@ {oper = Instruction.SBB, ...}) => (true, if b then b' else true) | Assembly.Instruction + (Instruction.MOV _) + => (b, b') + | Assembly.Instruction (Instruction.SETcc {condition = Instruction.C, ...}) => (true, if b then b' else true) @@ -1608,7 +1611,7 @@ (* elimBinAL0L:: *) (* elimBinAL0R:: *) elimAddSub1:: - elimMDPow2:: +(* elimMDPow2:: *) elimCMPTEST:: nil val optimizations_pre_msg @@ -1616,18 +1619,20 @@ (* elimBinAL0L_msg:: *) (* elimBinAL0R_msg:: *) elimAddSub1_msg:: - elimMDPow2_msg:: +(* elimMDPow2_msg:: *) nil val optimizations_post - = elimBinALMDDouble:: + = elimMDPow2:: + elimBinALMDDouble:: elimFltBinADouble:: elimCMPTEST:: elimCMP0:: elimALTEST:: nil val optimizations_post_msg - = elimBinALMDDouble_msg:: + = elimMDPow2_msg:: + elimBinALMDDouble_msg:: elimFltBinADouble_msg:: elimCMPTEST_msg:: elimCMP0_msg:: @@ -2940,6 +2945,15 @@ case asm of Assembly.Comment _ => (b, b') | Assembly.Instruction + (Instruction.BinAL {oper = Instruction.ADC, ...}) + => (true, if b then b' else true) + | Assembly.Instruction + (Instruction.BinAL {oper = Instruction.SBB, ...}) + => (true, if b then b' else true) + | Assembly.Instruction + (Instruction.MOV _) + => (b, b') + | Assembly.Instruction (Instruction.SETcc _) => (true, if b then b' else true) | _ => (true, b')) @@ -3182,6 +3196,158 @@ end local + fun isInstructionMOV_aux (check) : statement_type -> bool + = fn (Assembly.Instruction (Instruction.MOV + {dst = Operand.MemLoc memloc,...}), + _) + => check memloc + | _ => false + + val isInstructionMOV = isInstructionMOV_aux (fn _ => true) + val isInstructionMOV_dstTemp = isInstructionMOV_aux x86Liveness.track + + fun isInstructionAL_aux (check) : statement_type -> bool + = fn (Assembly.Instruction (Instruction.BinAL + {dst = Operand.MemLoc memloc,...}), _) + => check memloc + | (Assembly.Instruction (Instruction.pMD + {dst = Operand.MemLoc memloc,...}), _) + => check memloc + | (Assembly.Instruction (Instruction.IMUL2 + {dst = Operand.MemLoc memloc,...}), _) + => check memloc + | (Assembly.Instruction (Instruction.UnAL + {dst = Operand.MemLoc memloc,...}), _) + => check memloc + | (Assembly.Instruction (Instruction.SRAL + {dst = Operand.MemLoc memloc,...}), _) + => check memloc + | _ => false + val isInstructionAL = isInstructionAL_aux (fn _ => true) + fun isDeadTemp dead memloc + = x86Liveness.track memloc andalso LiveSet.contains (dead, memloc) + val isInstructionAL_dstDeadTemp : statement_type -> bool + = fn (instr, liveness as Liveness.T {dead, ...}) + => isInstructionAL_aux (isDeadTemp dead) (instr, liveness) + + val template : template + = {start = EmptyOrNonEmpty, + statements = [One isInstructionMOV, + All isComment, + One isInstructionAL, + All isComment, + One isInstructionMOV_dstTemp, + All isComment, + One isInstructionAL_dstDeadTemp], + finish = EmptyOrNonEmpty, + transfer = fn _ => true} + + val rewriter : rewriter + = fn {entry, + profileLabel, + start, + statements = + [[(stmtMov as Assembly.Instruction (Instruction.MOV + {src = src1x, + dst = dst1z, ...}), + _)], + comments1, + [(stmtAL as Assembly.Instruction instrAL1, _)], + comments2, + [(Assembly.Instruction (Instruction.MOV + {src = src2x, + dst = dst2z, ...}), + _)], + comments3, + [(Assembly.Instruction instrAL2, + Liveness.T {liveOut = liveOut2, ...})]], + finish, + transfer} + => if !Control.Native.elimALRedundant andalso + Operand.eq (src1x, src2x) andalso + (let + fun checkUn (oper1, dst1, oper2, dst2) + = oper1 = oper2 andalso + Operand.eq(dst1z, dst1) andalso + Operand.eq(dst2z, dst2) + + fun checkBin (oper1, src1, dst1, oper2, src2, dst2) + = oper1 = oper2 andalso + Operand.eq(src1, src2) andalso + Operand.eq(dst1z, dst1) andalso + Operand.eq(dst2z, dst2) + + in + case (instrAL1, instrAL2) of + (Instruction.BinAL + {oper = oper1, src = src1, dst = dst1, ...}, + Instruction.BinAL + {oper = oper2, src = src2, dst = dst2, ...}) + => checkBin (oper1, src1, dst1, oper2, src2, dst2) + | (Instruction.pMD + {oper = oper1, src = src1, dst = dst1, ...}, + Instruction.pMD + {oper = oper2, src = src2, dst = dst2, ...}) + => checkBin (oper1, src1, dst1, oper2, src2, dst2) + | (Instruction.IMUL2 + {src = src1, dst = dst1, ...}, + Instruction.IMUL2 + {src = src2, dst = dst2, ...}) + => checkBin (Instruction.IMUL, src1, dst1, + Instruction.IMUL, src2, dst2) + | (Instruction.UnAL + {oper = oper1, dst = dst1, ...}, + Instruction.UnAL + {oper = oper2, dst = dst2, ...}) + => checkUn (oper1, dst1, oper2, dst2) + | (Instruction.SRAL + {oper = oper1, count = src1, dst = dst1, ...}, + Instruction.SRAL + {oper = oper2, count = src2, dst = dst2, ...}) + => checkBin (oper1, src1, dst1, oper2, src2, dst2) + | _ => false + end) + then + let + val excomm = fn comm => List.map (comm, fn (c, _) => c) + val comments1 = excomm comments1 + val comments2 = excomm comments2 + val comments3 = excomm comments3 + + val statements = + stmtMov::(comments1 @ (stmtAL::(comments2 @ comments3))) + val {statements, ...} + = LivenessBlock.toLivenessStatements + {statements = statements, live = liveOut2} + val statements + = List.fold (start, + List.concat [statements, finish], + op ::) + in + SOME (LivenessBlock.T + {entry = entry, + profileLabel = profileLabel, + statements = statements, + transfer = transfer}) + end + else NONE + | _ => Error.bug "x86Simplify.PeepholeBlock: elimALRedundant" + + val (callback,elimALRedundant_msg) + = make_callback_msg "elimALRedundant" + in + (* Fusing of adjacent `Word_` and `Word{S,U}_CheckP` + * primitives depends on the relative order of `!a` and `?a` + * in /basis-library/primitive/prim1.sml:mkOverflow + *) + val elimALRedundant : optimization + = {template = template, + rewriter = rewriter, + callback = callback} + val elimALRedundant_msg = elimALRedundant_msg + end + + local val isInstructionMOV_eqSrcDst : statement_type -> bool = fn (Assembly.Instruction (Instruction.MOV {dst = Operand.MemLoc memloc1, @@ -4065,6 +4231,13 @@ end local + val optimizations_pre + = elimALRedundant:: + nil + val optimizations_pre_msg + = elimALRedundant_msg:: + nil + val optimizations = elimALCopy:: elimFltACopy:: @@ -4097,6 +4270,21 @@ elimFltSelfMove_minor_msg:: nil in + val peepholeLivenessBlock_pre + = fn block => (peepholeBlock {optimizations = optimizations_pre, + block = block}) + + val (peepholeLivenessBlock_pre, peepholeLivenessBlock_pre_msg) + = tracer + "peepholeLivenessBlock_pre" + peepholeLivenessBlock_pre + + val peepholeLivenessBlock_pre_msg + = fn () => (peepholeLivenessBlock_pre_msg (); + Control.indent (); + List.foreach(optimizations_pre_msg, fn msg => msg ()); + Control.unindent ()) + val peepholeLivenessBlock = fn block => (peepholeBlock {optimizations = optimizations, block = block}) @@ -4349,6 +4537,26 @@ msg = "x86Liveness.LivenessBlock.toLivenessBlock"} (***************************************************) + (* peepholeLivenessBlock_pre *) + (***************************************************) + val {block = block', + changed = changed'} + = PeepholeLivenessBlock.peepholeLivenessBlock_pre + block + + val _ = checkLivenessBlock + {block = block, + block' = block', + msg = "PeepholeLivenessBlock.peepholeLivenessBlock_pre"} + + val _ = changedLivenessBlock_msg + {block = block', + changed = changed', + msg = "PeepholeLivenessBlock.peepholeLivenessBlock_pre"} + val block = block' + val changed = changed orelse changed' + + (***************************************************) (* moveHoist *) (***************************************************) val {block = block', @@ -4541,6 +4749,7 @@ x86EntryTransfer.verifyEntryTransfer_msg (); PeepholeBlock.peepholeBlock_pre_msg (); x86Liveness.LivenessBlock.toLivenessBlock_msg (); + PeepholeLivenessBlock.peepholeLivenessBlock_pre_msg (); MoveHoistLivenessBlock.moveHoist_msg (); PeepholeLivenessBlock.peepholeLivenessBlock_msg (); CopyPropagateLivenessBlock.copyPropagate_msg (); diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-simplify.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-simplify.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-simplify.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-simplify.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-translate.fun mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-translate.fun --- mlton-20130715/mlton/codegen/x86-codegen/x86-translate.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-translate.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -22,11 +22,14 @@ local open Machine in + structure CSymbol = CSymbol + structure CSymbolScope = CSymbolScope + structure Const = Const structure Label = Label structure Live = Live - structure Register = Register structure Scale = Scale structure StackOffset = StackOffset + structure Temporary = Temporary structure Type = Type structure WordSize = WordSize structure WordX = WordX @@ -43,10 +46,7 @@ val ty = Machine.Type.toCType (ty g) val index = index g val base = - x86.Immediate.label - (if isRoot g - then x86MLton.global_base ty - else x86MLton.globalObjptrNonRoot_base) + x86.Immediate.label (x86MLton.global_base ty) val origin = x86.MemLoc.imm {base = base, @@ -66,6 +66,8 @@ end end + type transInfo = x86MLton.transInfo + structure Operand = struct open Machine.Operand @@ -75,15 +77,27 @@ fun getOp0 v = get #1 0 v + fun toX86Operand {operand, transInfo = {addData, ...}: transInfo} = + let + local + fun fromSizes (sizes, origin) = + (#1 o Vector.mapAndFold) + (sizes, 0, fn (size,offset) => + (((x86.Operand.memloc o x86.MemLoc.shift) + {origin = origin, + disp = x86.Immediate.int offset, + scale = x86.Scale.One, + size = size}, size), offset + x86.Size.toBytes size)) + in val rec toX86Operand : t -> (x86.Operand.t * x86.Size.t) vector = - fn ArrayOffset {base, index, offset, scale, ty} + fn SequenceOffset {base, index, offset, scale, ty} => let val base = toX86Operand base - val _ = Assert.assert("x86Translate.Operand.toX86Operand: Array/base", + val _ = Assert.assert("x86Translate.Operand.toX86Operand: SequenceOffset/base", fn () => Vector.length base = 1) val base = getOp0 base val index = toX86Operand index - val _ = Assert.assert("x86Translate.Operand.toX86Operand: Array/index", + val _ = Assert.assert("x86Translate.Operand.toX86Operand: SequenceOffset/index", fn () => Vector.length index = 1) val index = getOp0 index val scale = @@ -94,25 +108,40 @@ | Scale.Eight => x86.Scale.Eight val ty = Type.toCType ty val origin = - case (x86.Operand.deMemloc base, + case (x86.Operand.deImmediate base, + x86.Operand.deMemloc base, x86.Operand.deImmediate index, x86.Operand.deMemloc index) of - (SOME base, SOME index, _) => - x86.MemLoc.simple + (SOME base, _, SOME index, _) => + x86.MemLoc.imm + {base = base, + index = index, + scale = scale, + size = x86.Size.BYTE, + class = x86MLton.Classes.Heap} + | (SOME base, _, _, SOME index) => + x86.MemLoc.basic + {base = base, + index = index, + scale = scale, + size = x86.Size.BYTE, + class = x86MLton.Classes.Heap} + | (_, SOME base, SOME index, _) => + x86.MemLoc.simple {base = base, index = index, scale = scale, size = x86.Size.BYTE, class = x86MLton.Classes.Heap} - | (SOME base, _, SOME index) => - x86.MemLoc.complex + | (_, SOME base, _, SOME index) => + x86.MemLoc.complex {base = base, index = index, scale = scale, size = x86.Size.BYTE, class = x86MLton.Classes.Heap} | _ => Error.bug (concat ["x86Translate.Operand.toX86Operand: ", - "strange Offset: base: ", + "strange SequenceOffset: base: ", x86.Operand.toString base, " index: ", x86.Operand.toString index]) @@ -126,45 +155,132 @@ size = x86.Size.BYTE} val sizes = x86.Size.fromCType ty in - (#1 o Vector.mapAndFold) - (sizes, 0, fn (size,offset) => - (((x86.Operand.memloc o x86.MemLoc.shift) - {origin = origin, - disp = x86.Immediate.int offset, - scale = x86.Scale.One, - size = size}, size), offset + x86.Size.toBytes size)) + fromSizes (sizes, origin) end | Cast (z, _) => toX86Operand z - | Contents {oper, ty} => + | Const (Const.CSymbol (CSymbol.T {name, symbolScope, ...})) => let - val ty = Type.toCType ty - val base = toX86Operand oper - val _ = Assert.assert("x86Translate.Operand.toX86Operand: Contents/base", - fn () => Vector.length base = 1) - val base = getOp0 base - val origin = - case x86.Operand.deMemloc base of - SOME base => - x86.MemLoc.simple - {base = base, - index = x86.Immediate.zero, - scale = x86.Scale.One, - size = x86.Size.BYTE, - class = x86MLton.Classes.Heap} - | _ => Error.bug (concat - ["x86Translate.Operand.toX86Operand: ", - "strange Contents: base: ", - x86.Operand.toString base]) - val sizes = x86.Size.fromCType ty + datatype z = datatype CSymbolScope.t + datatype z = datatype Control.Format.t + datatype z = datatype MLton.Platform.OS.t + + val label = fn () => Label.fromString name + + (* how to access an imported label's address *) + (* windows coff will add another leading _ to label *) + val coff = fn () => Label.fromString ("_imp__" ^ name) + val macho = fn () => + let + val label = + Label.newString (concat ["L_", name, "_non_lazy_ptr"]) + val () = + addData + [x86.Assembly.pseudoop_non_lazy_symbol_pointer (), + x86.Assembly.label label, + x86.Assembly.pseudoop_indirect_symbol (Label.fromString name), + x86.Assembly.pseudoop_long [x86.Immediate.zero]] + in + label + end + val elf = fn () => Label.fromString (name ^ "@GOT") + + val importLabel = fn () => + case !Control.Target.os of + Cygwin => coff () + | Darwin => macho () + | MinGW => coff () + | _ => elf () + + val direct = fn () => + Vector.new1 + (x86.Operand.immediate_label (label ()), + x86.Size.LONG) + val indirect = fn () => + Vector.new1 + (x86.Operand.memloc_label (importLabel ()), + x86.Size.LONG) in - (#1 o Vector.mapAndFold) - (sizes, 0, fn (size,offset) => - (((x86.Operand.memloc o x86.MemLoc.shift) - {origin = origin, - disp = x86.Immediate.int offset, - scale = x86.Scale.One, - size = size}, size), offset + x86.Size.toBytes size)) + case (symbolScope, + !Control.Target.os, + !Control.Native.pic) of + (* Even private PIC symbols on darwin need indirection. *) + (Private, Darwin, true) => indirect () + (* As long as the symbol is private (thus it is not + * exported to code outside this text segment), then + * use normal addressing. If PIC is needed, then the + * memloc_label is updated to relative access in the + * allocate-registers pass. + *) + | (Private, _, _) => direct () + (* On darwin, even executables use the defintion address. + * Therefore we don't need to do indirection. + *) + | (Public, Darwin, _) => direct () + (* On ELF, a public symbol must be accessed via + * the GOT. This is because the final value may not be + * in this text segment. If the executable uses it, then + * the unique C address resides in the executable's + * text segment. The loader does this by creating a PLT + * proxy or copying values to the executable text segment. + * When linking an executable, ELF uses a special trick + * to "simplify" the code. All exported functions and + * symbols have pointers that correspond to the + * executable. Function pointers point to the + * automatically created PLT entry in the executable. + * Variables are copied/relocated into the executable bss. + * + * This means that direct access is fine for executable + * and archive formats. (It also means direct access is + * NOT fine for a library, even if it defines the symbol.) + * + *) + | (Public, _, true) => indirect () + | (Public, _, false) => direct () + (* On darwin, the address is the point of definition. So + * indirection is needed. We also need to make a stub! + *) + | (External, Darwin, _) => indirect () + (* On windows, the address is the point of definition. So + * we must always use an indirect lookup to the symbols + * windows rewrites (__imp__name) in our segment. + *) + | (External, MinGW, _) => indirect () + | (External, Cygwin, _) => indirect () + (* When compiling ELF to a library, we access external + * symbols via some address that is updated by the loader. + * That address resides within our data segment, and can + * be easily referenced using RBX-relative addressing. + * This trick is used on every platform MLton supports. + * ELF rewrites symbols of form name@GOT. + *) + | (External, _, true) => indirect () + | (External, _, false) => direct () end + | Const Const.Null => + Vector.new1 (x86.Operand.immediate_zero, x86MLton.wordSize) + | Const (Const.Word w) => + let + fun single size = + Vector.new1 (x86.Operand.immediate_word w, size) + in + case WordSize.prim (WordX.size w) of + W8 => single x86.Size.BYTE + | W16 => single x86.Size.WORD + | W32 => single x86.Size.LONG + | W64 => + let + val lo = WordX.resize (w, WordSize.word32) + val w = WordX.rshift (w, + WordX.fromIntInf (32, WordSize.word64), + {signed = true}) + val hi = WordX.resize (w, WordSize.word32) + in + Vector.new2 + ((x86.Operand.immediate_word lo, x86.Size.LONG), + (x86.Operand.immediate_word hi, x86.Size.LONG)) + end + end + | Const _ => Error.bug "x86Translate.Operand.toX86Operand: Const" | Frontier => let val frontier = x86MLton.gcState_frontierContentsOperand () @@ -177,8 +293,6 @@ | Global g => Global.toX86Operand g | Label l => Vector.new1 (x86.Operand.immediate_label l, x86MLton.pointerSize) - | Null => - Vector.new1 (x86.Operand.immediate_zero, x86MLton.wordSize) | Offset {base = GCState, offset, ty} => let val offset = Bytes.toInt offset @@ -189,56 +303,35 @@ end | Offset {base, offset, ty} => let - val offset = Bytes.toInt offset + val offset = Bytes.toInt offset val ty = Type.toCType ty val base = toX86Operand base val _ = Assert.assert("x86Translate.Operand.toX86Operand: Offset/base", fn () => Vector.length base = 1) val base = getOp0 base val origin = - case x86.Operand.deMemloc base of - SOME base => - x86.MemLoc.simple - {base = base, - index = x86.Immediate.int offset, - scale = x86.Scale.One, - size = x86.Size.BYTE, - class = x86MLton.Classes.Heap} - | _ => Error.bug (concat ["x86Translate.Operand.toX86Operand: ", - "strange Offset: base: ", - x86.Operand.toString base]) - val sizes = x86.Size.fromCType ty + case (x86.Operand.deImmediate base, + x86.Operand.deMemloc base) of + (SOME base, _) => + x86.MemLoc.imm + {base = base, + index = x86.Immediate.int offset, + scale = x86.Scale.One, + size = x86.Size.BYTE, + class = x86MLton.Classes.Heap} + | (_, SOME base) => + x86.MemLoc.simple + {base = base, + index = x86.Immediate.int offset, + scale = x86.Scale.One, + size = x86.Size.BYTE, + class = x86MLton.Classes.Heap} + | _ => Error.bug (concat ["x86Translate.Operand.toX86Operand: ", + "strange Offset: base: ", + x86.Operand.toString base]) + val sizes = x86.Size.fromCType ty in - (#1 o Vector.mapAndFold) - (sizes, 0, fn (size,offset) => - (((x86.Operand.memloc o x86.MemLoc.shift) - {origin = origin, - disp = x86.Immediate.int offset, - scale = x86.Scale.One, - size = size}, size), offset + x86.Size.toBytes size)) - end - | Real _ => Error.bug "x86Translate.Operand.toX86Operand: Real unimplemented" - | Register r => - let - val ty = Machine.Type.toCType (Register.ty r) - val index = Machine.Register.index r - val base = x86.Immediate.label (x86MLton.local_base ty) - val origin = - x86.MemLoc.imm - {base = base, - index = x86.Immediate.int index, - scale = x86.Scale.fromCType ty, - size = x86.Size.BYTE, - class = x86MLton.Classes.Locals} - val sizes = x86.Size.fromCType ty - in - (#1 o Vector.mapAndFold) - (sizes, 0, fn (size,offset) => - (((x86.Operand.memloc o x86.MemLoc.shift) - {origin = origin, - disp = x86.Immediate.int offset, - scale = x86.Scale.One, - size = size}, size), offset + x86.Size.toBytes size)) + fromSizes (sizes, origin) end | StackOffset (StackOffset.T {offset, ty}) => let @@ -253,13 +346,16 @@ class = x86MLton.Classes.Stack} val sizes = x86.Size.fromCType ty in - (#1 o Vector.mapAndFold) - (sizes, 0, fn (size,offset) => - (((x86.Operand.memloc o x86.MemLoc.shift) - {origin = origin, - disp = x86.Immediate.int offset, - scale = x86.Scale.One, - size = size}, size), offset + x86.Size.toBytes size)) + fromSizes (sizes, origin) + end + | StaticHeapRef (Machine.StaticHeap.Ref.T {kind, offset, ...}) => + let + val offset = Bytes.toInt offset + val base = + x86.Immediate.labelPlusInt + (Machine.StaticHeap.Kind.label kind, offset) + in + Vector.new1 (x86.Operand.immediate base, x86MLton.pointerSize) end | StackTop => let @@ -267,39 +363,39 @@ in Vector.new1 (stackTop, valOf (x86.Operand.size stackTop)) end - | Word w => + | Temporary t => let - fun single size = - Vector.new1 (x86.Operand.immediate_word w, size) + val ty = Machine.Type.toCType (Temporary.ty t) + val index = Machine.Temporary.index t + val base = x86.Immediate.label (x86MLton.local_base ty) + val origin = + x86.MemLoc.imm + {base = base, + index = x86.Immediate.int index, + scale = x86.Scale.fromCType ty, + size = x86.Size.BYTE, + class = x86MLton.Classes.Locals} + val sizes = x86.Size.fromCType ty in - case WordSize.prim (WordX.size w) of - W8 => single x86.Size.BYTE - | W16 => single x86.Size.WORD - | W32 => single x86.Size.LONG - | W64 => - let - val lo = WordX.resize (w, WordSize.word32) - val w = WordX.rshift (w, - WordX.fromIntInf (32, WordSize.word64), - {signed = true}) - val hi = WordX.resize (w, WordSize.word32) - in - Vector.new2 - ((x86.Operand.immediate_word lo, x86.Size.LONG), - (x86.Operand.immediate_word hi, x86.Size.LONG)) - end + fromSizes (sizes, origin) end + end + in + toX86Operand operand + end end - type transInfo = x86MLton.transInfo - structure Entry = struct structure Kind = Machine.Kind + fun frameInfoToX86 fi = + x86.FrameInfo.T + {frameInfosIndex = Machine.FrameInfo.index fi, + size = Bytes.toInt (Machine.FrameInfo.size fi)} + fun toX86Blocks {label, kind, - transInfo as {frameInfoToX86, live, liveInfo, - ...}: transInfo} + transInfo as {live, liveInfo, ...}: transInfo} = ( x86Liveness.LiveInfo.setLiveOperands (liveInfo, label, live label); @@ -313,7 +409,7 @@ statements = [], transfer = NONE}) end - | Kind.Func + | Kind.Func _ => let val args = List.fold @@ -339,7 +435,9 @@ (args, x86.MemLocSet.empty, fn (operand,args) => Vector.fold - (Operand.toX86Operand (Live.toOperand operand), args, + (Operand.toX86Operand {operand = Live.toOperand operand, + transInfo = transInfo}, + args, fn ((operand,_),args) => case x86.Operand.deMemloc operand of SOME memloc => x86.MemLocSet.add(args, memloc) @@ -347,21 +445,33 @@ in AppendList.single (x86.Block.mkBlock' - {entry = SOME (x86.Entry.cont {label = label, - live = args, - frameInfo = frameInfo}), + {entry = SOME (x86.Entry.cont {frameInfo = frameInfo, + label = label, + live = args}), statements = [], transfer = NONE}) end - | Kind.Handler {frameInfo, ...} + | Kind.Handler {args, frameInfo, ...} => let + val frameInfo = frameInfoToX86 frameInfo + val args = + Vector.fold + (args, x86.MemLocSet.empty, + fn (operand,args) => + Vector.fold + (Operand.toX86Operand {operand = Live.toOperand operand, + transInfo = transInfo}, + args, + fn ((operand,_),args) => + case x86.Operand.deMemloc operand of + SOME memloc => x86.MemLocSet.add(args, memloc) + | NONE => args)) in AppendList.single (x86.Block.mkBlock' - {entry = SOME (x86.Entry.handler - {frameInfo = frameInfoToX86 frameInfo, - label = label, - live = x86.MemLocSet.empty}), + {entry = SOME (x86.Entry.handler {frameInfo = frameInfo, + label = label, + live = args}), statements = [], transfer = NONE}) end @@ -370,7 +480,8 @@ val dsts = case dst of NONE => Vector.new0 () - | SOME dst => Operand.toX86Operand (Live.toOperand dst) + | SOME dst => Operand.toX86Operand {operand = Live.toOperand dst, + transInfo = transInfo} in x86MLton.creturn {dsts = dsts, @@ -386,7 +497,7 @@ open Machine.Statement fun comments statement - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then let val comment = (Layout.toString o layout) statement in @@ -410,15 +521,13 @@ fun toX86Blocks {statement, transInfo as {...} : transInfo} = (case statement - of Noop - => AppendList.empty - | Move {src, dst} + of Move {src, dst} => let val (comment_begin, comment_end) = comments statement - val dsts = Operand.toX86Operand dst - val srcs = Operand.toX86Operand src + val dsts = Operand.toX86Operand {operand = dst, transInfo = transInfo} + val srcs = Operand.toX86Operand {operand = src, transInfo = transInfo} (* Operand.toX86Operand returns multi-word * operands in and they will be moved in order, * so it suffices to check for aliasing between @@ -458,11 +567,13 @@ => let val (comment_begin, comment_end) = comments statement val args = (Vector.concatV o Vector.map) - (args, Operand.toX86Operand) + (args, fn operand => + Operand.toX86Operand {operand = operand, + transInfo = transInfo}) val dsts = case dst of NONE => Vector.new0 () - | SOME dst => Operand.toX86Operand dst + | SOME dst => Operand.toX86Operand {operand = dst, transInfo = transInfo} in AppendList.appends [comment_begin, @@ -490,10 +601,10 @@ transfer = SOME (x86.Transfer.goto {target = l})}) - fun iff (test, a, b) + fun iff (test, a, b, transInfo) = let val (test,testsize) = - Vector.sub (Operand.toX86Operand test, 0) + Vector.sub (Operand.toX86Operand {operand = test, transInfo = transInfo}, 0) in if Label.equals(a, b) then AppendList.single @@ -519,10 +630,10 @@ falsee = b})}) end - fun cmp (test, k, a, b) + fun cmp (test, k, a, b, transInfo) = let val (test,testsize) = - Vector.sub (Operand.toX86Operand test, 0) + Vector.sub (Operand.toX86Operand {operand = test, transInfo = transInfo}, 0) in if Label.equals(a, b) then AppendList.single @@ -548,9 +659,10 @@ falsee = b})}) end - fun switch(test, cases, default) + fun switch(test, cases, default, transInfo) = let - val test = Operand.toX86Operand test + val test = Operand.toX86Operand {operand = test, + transInfo = transInfo} val (test,_) = Vector.sub(test, 0) in AppendList.single @@ -563,7 +675,7 @@ default = default})}) end - fun doSwitchWord (test, cases, default) + fun doSwitchWord (test, cases, default, transInfo) = (case (cases, default) of ([], NONE) => Error.bug "x86Translate.Transfer.doSwitchWord" @@ -571,19 +683,19 @@ | ([], SOME l) => goto l | ([(w1,l1),(w2,l2)], NONE) => if WordX.isZero w1 andalso WordX.isOne w2 - then iff(test,l2,l1) + then iff(test,l2,l1,transInfo) else if WordX.isZero w2 andalso WordX.isOne w1 - then iff(test,l1,l2) - else cmp(test,x86.Immediate.word w1,l1,l2) + then iff(test,l1,l2,transInfo) + else cmp(test,x86.Immediate.word w1,l1,l2,transInfo) | ([(k',l')], SOME l) - => cmp(test,x86.Immediate.word k',l',l) + => cmp(test,x86.Immediate.word k',l',l,transInfo) | ((_,l)::cases, NONE) - => switch(test, x86.Transfer.Cases.word cases, l) + => switch(test, x86.Transfer.Cases.word cases, l, transInfo) | (cases, SOME l) - => switch(test, x86.Transfer.Cases.word cases, l)) + => switch(test, x86.Transfer.Cases.word cases, l, transInfo)) fun comments transfer - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then let val comment = (Layout.toString o layout) transfer in @@ -596,39 +708,25 @@ else AppendList.empty - fun toX86Blocks {returns, transfer, - transInfo as {frameInfoToX86, ...}: transInfo} + fun toX86Blocks {returns, transfer, transInfo: transInfo} = (case transfer - of Arith {prim, args, dst, overflow, success, ...} + of CCall {args, func, return} => let val args = (Vector.concatV o Vector.map) - (args, Operand.toX86Operand) - val dsts = Operand.toX86Operand dst - in - AppendList.append - (comments transfer, - x86MLton.arith {prim = prim, - args = args, - dsts = dsts, - overflow = overflow, - success = success, - transInfo = transInfo}) - end - | CCall {args, frameInfo, func, return} - => let - val args = (Vector.concatV o Vector.map) - (args, Operand.toX86Operand) + (args, fn operand => + Operand.toX86Operand {operand = operand, + transInfo = transInfo}) in AppendList.append (comments transfer, x86MLton.ccall {args = args, - frameInfo = (Option.map - (frameInfo, frameInfoToX86)), func = func, - return = return, + return = Option.map (return, fn {return, size} => + {return = return, + size = Option.map (size, Bytes.toInt)}), transInfo = transInfo}) end - | Return + | Return _ => AppendList.append (comments transfer, AppendList.single @@ -645,12 +743,14 @@ x86.MemLocSet.empty, fn (operand, live) => Vector.fold - (Operand.toX86Operand operand, live, + (Operand.toX86Operand {operand = operand, + transInfo = transInfo}, + live, fn ((operand,_),live) => case x86.Operand.deMemloc operand of SOME memloc => x86.MemLocSet.add(live, memloc) | NONE => live))})})) - | Raise + | Raise _ => AppendList.append (comments transfer, AppendList.single @@ -668,7 +768,7 @@ | Switch (Machine.Switch.T {cases, default, test, ...}) => AppendList.append (comments transfer, - doSwitchWord (test, Vector.toList cases, default)) + doSwitchWord (test, Vector.toList cases, default, transInfo)) | Goto label => (AppendList.append (comments transfer, @@ -684,7 +784,9 @@ Vector.fold (live, x86.MemLocSet.empty, fn (operand, live) => Vector.fold - (Operand.toX86Operand (Live.toOperand operand), live, + (Operand.toX86Operand {operand = Live.toOperand operand, + transInfo = transInfo}, + live, fn ((operand, _), live) => case x86.Operand.deMemloc operand of NONE => live @@ -732,7 +834,7 @@ x86.Block.mkBlock' {entry = NONE, statements - = if !Control.Native.commented > 0 + = if !Control.codegenComments > 0 then let val comment = concat ["Live: ", @@ -771,7 +873,6 @@ open Machine.Chunk fun toX86Chunk {chunk = T {blocks, ...}, - frameInfoToX86, liveInfo} = let val data = ref [] @@ -781,16 +882,17 @@ rem = remLive, ...} = Property.getSetOnce (Label.plist, Property.initRaise ("live", Label.layout)) + val transInfo = {addData = addData, + live = live, + liveInfo = liveInfo} val _ = Vector.foreach (blocks, fn Block.T {label, live, ...} => setLive (label, (Vector.toList o #1 o Vector.unzip o Vector.concatV o Vector.map) - (live, Operand.toX86Operand o Live.toOperand))) - val transInfo = {addData = addData, - frameInfoToX86 = frameInfoToX86, - live = live, - liveInfo = liveInfo} + (live, fn operand => + Operand.toX86Operand {operand = Live.toOperand operand, + transInfo = transInfo}))) val x86Blocks = List.concat (Vector.toListMap (blocks, @@ -811,11 +913,9 @@ end fun translateChunk {chunk: x86MLton.Machine.Chunk.t, - frameInfoToX86, liveInfo: x86Liveness.LiveInfo.t}: {chunk: x86.Chunk.t} = {chunk = Chunk.toX86Chunk {chunk = chunk, - frameInfoToX86 = frameInfoToX86, liveInfo = liveInfo}} val (translateChunk, translateChunk_msg) diff -Nru mlton-20130715/mlton/codegen/x86-codegen/x86-translate.sig mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-translate.sig --- mlton-20130715/mlton/codegen/x86-codegen/x86-translate.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/codegen/x86-codegen/x86-translate.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -22,8 +22,6 @@ include X86_TRANSLATE_STRUCTS val translateChunk : {chunk: x86MLton.Machine.Chunk.t, - frameInfoToX86: (x86MLton.Machine.FrameInfo.t - -> x86.FrameInfo.t), liveInfo: x86Liveness.LiveInfo.t} -> {chunk: x86.Chunk.t} diff -Nru mlton-20130715/mlton/control/bits.sml mlton-20210117+dfsg/mlton/control/bits.sml --- mlton-20130715/mlton/control/bits.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/bits.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -31,6 +31,7 @@ val equals: t * t -> bool val fromInt: int -> t val fromIntInf: IntInf.t -> t + val hash: t -> word val inByte: t val inWord8: t val inWord16: t @@ -38,6 +39,7 @@ val inWord64: t val isAligned: t * {alignment: t} -> bool val isByteAligned: t -> bool + val isPrim: t -> bool val isWord8Aligned: t -> bool val isWord16Aligned: t -> bool val isWord32Aligned: t -> bool @@ -47,6 +49,7 @@ val max: t * t -> t val min: t * t -> t val one: t + val prims: t list val toBytes: t -> bytes val toInt: t -> int val toIntInf: t -> IntInf.t @@ -59,6 +62,7 @@ sig type t + val * : t * IntInf.int -> t val + : t * t -> t val - : t * t -> t val ~ : t -> t @@ -76,18 +80,20 @@ val equals: t * t -> bool val fromInt: int -> t val fromIntInf: IntInf.t -> t - (* val inWord8: t *) - (* val inWord16: t *) + val hash: t -> word + val inWord8: t + val inWord16: t val inWord32: t val inWord64: t - (* val isAligned: t * {alignment: t} -> bool *) - val isWord32Aligned: t -> bool + val isAligned: t * {alignment: t} -> bool + (* val isWord32Aligned: t -> bool *) (* val isWord64Aligned: t -> bool *) val isZero: t -> bool val layout: t -> Layout.t val max: t * t -> t val min: t * t -> t val one: t + val prims: t list val toBits: t -> Bits.t val toInt: t -> int val toIntInf: t -> IntInf.t @@ -126,6 +132,9 @@ val inWord32: bits = 32 val inWord64: bits = 64 + val prims = [inWord8, inWord16, inWord32, inWord64] + fun isPrim b = List.contains (prims, b, equals) + fun isAligned (b, {alignment = a}) = 0 = rem (b, a) fun isByteAligned b = isAligned (b, {alignment = inByte}) fun isWord8Aligned b = isAligned (b, {alignment = inWord8}) @@ -150,15 +159,17 @@ struct open IntInf - (* val inWord8: bytes = 1 *) - (* val inWord16: bytes = 2 *) + val inWord8: bytes = 1 + val inWord16: bytes = 2 val inWord32: bytes = 4 val inWord64: bytes = 8 + val prims = [inWord8, inWord16, inWord32, inWord64] + fun isAligned (b, {alignment = a}) = 0 = rem (b, a) (* fun isWord8Aligned b = isAligned (b, {alignment = inWord8}) *) (* fun isWord16Aligned b = isAligned (b, {alignment = inWord16}) *) - fun isWord32Aligned b = isAligned (b, {alignment = inWord32}) + (* fun isWord32Aligned b = isAligned (b, {alignment = inWord32}) *) (* fun isWord64Aligned b = isAligned (b, {alignment = inWord64}) *) fun toBits b = b * Bits.inByte diff -Nru mlton-20130715/mlton/control/control-flags.sig mlton-20210117+dfsg/mlton/control/control-flags.sig --- mlton-20130715/mlton/control/control-flags.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/control-flags.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009-2012 Matthew Fluet. +(* Copyright (C) 2009-2012,2014-2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,6 +15,18 @@ val all : unit -> {name: string, value: string} list + val layout': {pre: string, suf: string} -> Layout.t + val layout: unit -> Layout.t + + structure StrMap: + sig + type t + val load: File.t -> t + val lookup: t * string -> string + val lookupIntInf: t * string -> IntInf.t + val peek: t * string -> string option + end + (*------------------------------------*) (* Begin Flags *) (*------------------------------------*) @@ -24,12 +36,36 @@ val atMLtons: string vector ref - datatype chunk = - OneChunk - | ChunkPerFunc - | Coalesce of {limit: int} + val bounceRssaLimit: int option ref + val bounceRssaLiveCutoff: int option ref + val bounceRssaLoopCutoff: int option ref + val bounceRssaUsageCutoff: int option ref - val chunk: chunk ref + val buildConsts: StrMap.t Promise.t + + val chunkBatch: int ref + + structure Chunkify: + sig + datatype t = Coalesce of {limit: int} + | Func + | One + | Simple of {mainFns: bool, + sccC: bool, + sccR: bool, + singC: bool, + singR: bool} + val toString: t -> string + val fromString: string -> t option + end + val chunkify: Chunkify.t ref + + val chunkJumpTable: bool ref + val chunkMayRToSelfOpt: bool ref + val chunkMustRToOtherOpt: bool ref + val chunkMustRToSelfOpt: bool ref + val chunkMustRToSingOpt: bool ref + val chunkTailCall: bool ref val closureConvertGlobalize: bool ref val closureConvertShrink: bool ref @@ -37,9 +73,10 @@ structure Codegen: sig datatype t = - CCodegen - | x86Codegen - | amd64Codegen + AMD64Codegen + | CCodegen + | LLVMCodegen + | X86Codegen val all: t list val toString: t -> string end @@ -48,6 +85,15 @@ val codegen: Codegen.t ref + (* whether or not to use comments in codegen *) + val codegenComments: int ref + + (* whether or not to fuse `op` and `opCheckP` primitives in codegen *) + val codegenFuseOpAndChk: bool ref + + val commandLineConsts: StrMap.t + val setCommandLineConst: {name: string, value: string} -> unit + val contifyIntoMain: bool ref (* Generate an executable with debugging info. *) @@ -62,8 +108,8 @@ (* List of pass names to keep diagnostic info on. *) val diagPasses: Regexp.Compiled.t list ref - (* List of optimization passes to skip. *) - val dropPasses: Regexp.Compiled.t list ref + (* List of optimization passes to disable/enable. *) + val executePasses: (Regexp.Compiled.t * bool) list ref structure Elaborate: sig @@ -97,25 +143,46 @@ val allowFFI: (bool,bool) t val allowOverload: (bool,bool) t val allowPrim: (bool,bool) t - val allowRebindEquals: (bool,bool) t + val allowRedefineSpecialIds: (bool,bool) t + val allowSpecifySpecialIds: (bool,bool) t val deadCode: (bool,bool) t val forceUsed: (unit,bool) t val ffiStr: (string,string option) t - val nonexhaustiveExnMatch: (DiagDI.t,DiagDI.t) t + val nonexhaustiveBind: (DiagEIW.t,DiagEIW.t) t + val nonexhaustiveExnBind: (DiagDI.t,DiagDI.t) t + val redundantBind: (DiagEIW.t,DiagEIW.t) t val nonexhaustiveMatch: (DiagEIW.t,DiagEIW.t) t + val nonexhaustiveExnMatch: (DiagDI.t,DiagDI.t) t val redundantMatch: (DiagEIW.t,DiagEIW.t) t + val nonexhaustiveRaise: (DiagEIW.t,DiagEIW.t) t + val nonexhaustiveExnRaise: (DiagDI.t,DiagDI.t) t + val redundantRaise: (DiagEIW.t,DiagEIW.t) t val resolveScope: (ResolveScope.t,ResolveScope.t) t val sequenceNonUnit: (DiagEIW.t,DiagEIW.t) t + val valrecConstr: (DiagEIW.t,DiagEIW.t) t val warnUnused: (bool,bool) t + (* Successor ML *) + val allowDoDecls: (bool,bool) t + val allowExtendedNumConsts: (bool,bool) t + val allowExtendedTextConsts: (bool,bool) t + val allowLineComments: (bool,bool) t + val allowOptBar: (bool,bool) t + val allowOptSemicolon: (bool,bool) t + val allowOrPats: (bool,bool) t + val allowRecordPunExps: (bool,bool) t + val allowSigWithtype: (bool,bool) t + val allowVectorExps: (bool,bool) t + val allowVectorPats: (bool,bool) t + val current: ('args, 'st) t -> 'st val default: ('args, 'st) t -> 'st val enabled: ('args, 'st) t -> bool val expert: ('args, 'st) t -> bool val name: ('args, 'st) t -> string - datatype ('a, 'b) parseResult = - Bad | Deprecated of 'a | Good of 'b | Other + datatype 'a parseResult = + Bad | Good of 'a | Other | Proxy of 'a list * {deprecated: bool} structure Id : sig @@ -123,27 +190,22 @@ val name: t -> string end val equalsId: ('args, 'st) t * Id.t -> bool - val parseId: string -> (Id.t list , Id.t) parseResult + val parseId: string -> Id.t parseResult structure Args : sig type t val processAnn: t -> (unit -> unit) end - val parseIdAndArgs: string -> ((Id.t * Args.t) list, Id.t * Args.t) parseResult + val parseIdAndArgs: string -> (Id.t * Args.t) parseResult - val processDefault: string -> (Id.t list, unit) parseResult - val processEnabled: string * bool -> (Id.t list, unit) parseResult + val processDefault: string -> Id.t parseResult + val processEnabled: string * bool -> Id.t parseResult val withDef: (unit -> 'a) -> 'a val snapshot: unit -> (unit -> 'a) -> 'a end - (* stop after elaboration. So, no need for the elaborator to generate - * valid CoreML. - *) - val elaborateOnly: bool ref - val emitMain: bool ref val exportHeader: File.t option ref @@ -172,6 +234,16 @@ | Every val gcCheck: gcCheck ref + val gcExpect: bool option ref + + val globalizeArrays: bool ref + + val globalizeRefs: bool ref + + val globalizeSmallIntInf: bool ref + + val globalizeSmallType: int ref + (* Indentation used in laying out ILs. *) val indentation: int ref @@ -194,6 +266,8 @@ (* List of pass names to save the input/output. *) val keepPasses: Regexp.Compiled.t list ref + (* Save the AST to a file. *) + val keepAST: bool ref (* Save the final CoreML to a file. *) val keepCoreML: bool ref (* Save the final Machine to a file. *) @@ -223,8 +297,26 @@ (* name of the output library *) val libname : string ref - (* Number of times to loop through optimization passes. *) - val loopPasses: int ref + structure LLVMAliasAnalysisMetaData: + sig + datatype t = + None + | Scope + | TBAA of {gcstate: {offset: bool} option, + global: {cty: bool, index: bool} option, + heap: {cty: bool, kind: bool, offset: bool, tycon: bool} option, + other: bool, + stack: {offset: bool} option} + val toString: t -> string + val fromString: string -> t option + end + val llvmAAMD: LLVMAliasAnalysisMetaData.t ref + + val llvmCC10: bool ref + + (* Limit the code growth loop unrolling/unswitching will allow. *) + val loopUnrollLimit: int ref + val loopUnswitchLimit: int ref (* Should the mutator mark cards? *) val markCards: bool ref @@ -238,8 +330,8 @@ structure Native: sig - (* whether or not to use comments in native codegen *) - val commented: int ref + (* whether to eliminate redundant AL ops in native codegen *) + val elimALRedundant: bool ref (* whether or not to track liveness of stack slots *) val liveStack: bool ref @@ -270,12 +362,25 @@ (* whether or not to split assembly file in native codegen *) val split: int option ref + + (* whether or not to use position-independent code in native codegen *) + val pic: bool ref end - val optimizationPasses: - {il: string, set: string -> unit Result.t, get: unit -> string} list ref - - val positionIndependent : bool ref + val numExports: int ref + + val optFuel: int option ref + + val optFuelAvailAndUse: unit -> bool + + (* Control IL-specific optimization passes *) + structure OptimizationPasses: + sig + val register: {il: string, + set: string -> unit Result.t} -> unit + val set: {il: string, passes: string} -> unit Result.t + val setAll: string -> unit Result.t + end (* Only duplicate big functions when * (size - small) * (number of occurrences - 1) <= product @@ -288,6 +393,23 @@ product: int } option ref + structure PositionIndependentStyle: + sig + datatype t = + NPI + | PIC + | PIE + + val ccOpts: t option -> string list + val fromString: string -> t option + val linkOpts: t option -> string list + val llvm_llcOpts: t option * {targetDefault: t} -> string list + val toString: t -> string + val toSuffix: t option -> string + end + + val positionIndependentStyle: PositionIndependentStyle.t option ref + val preferAbsPaths: bool ref (* List of pass names to keep profiling info on. *) @@ -305,6 +427,8 @@ | ProfileTimeLabel val profile: profile ref + val profileBlock: bool ref + val profileBranch: bool ref val profileC: Regexp.Compiled.t list ref @@ -323,12 +447,25 @@ (* Show the basis library. *) val showBasis: File.t option ref + val showBasisCompact: bool ref + val showBasisDef: bool ref + val showBasisFlat: bool ref + (* Show def-use information. *) val showDefUse: File.t option ref (* Should types be printed in ILs. *) val showTypes: bool ref + datatype splitTypesBool = + Never + | Smart (* split only when smaller than two, default *) + | Always + val splitTypesBool: splitTypesBool ref + + (* List of pass names to stop at. *) + val stopPasses: Regexp.Compiled.t list ref + datatype target = Cross of string | Self @@ -340,11 +477,12 @@ val arch: arch ref val bigEndian: unit -> bool - val setBigEndian: bool -> unit datatype os = datatype MLton.Platform.OS.t val os: os ref + val consts: StrMap.t Promise.t + structure Size: sig val cint: unit -> Bits.t @@ -353,27 +491,27 @@ val csize: unit -> Bits.t val header: unit -> Bits.t val mplimb: unit -> Bits.t + val normalMetaData: unit -> Bits.t val objptr: unit -> Bits.t val seqIndex: unit -> Bits.t + val sequenceMetaData: unit -> Bits.t end - val setSizes: {cint: Bits.t, - cpointer: Bits.t, - cptrdiff: Bits.t, - csize: Bits.t, - header: Bits.t, - mplimb: Bits.t, - objptr: Bits.t, - seqIndex: Bits.t} -> unit end (* Type check ILs. *) val typeCheck: bool ref - datatype verbosity = - Silent - | Top - | Pass - | Detail + structure Verbosity: + sig + datatype t = + Silent + | Top + | Pass + | Detail + val < : t * t -> bool + val <= : t * t -> bool + end + datatype verbosity = datatype Verbosity.t val verbosity: verbosity ref val warnAnn: bool ref diff -Nru mlton-20130715/mlton/control/control-flags.sml mlton-20210117+dfsg/mlton/control/control-flags.sml --- mlton-20130715/mlton/control/control-flags.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/control-flags.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,17 +1,95 @@ -(* Copyright (C) 2009-2012 Matthew Fluet. +(* Copyright (C) 2009-2012,2014-2017,2019-2021 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) structure ControlFlags: CONTROL_FLAGS = struct +structure StrMap = +struct + type t = (string, string) HashTable.t + + fun new (): t = + HashTable.new {hash = String.hash, equals = String.equals} + + fun add (table, name, value) = + (ignore o HashTable.lookupOrInsert) + (table, name, fn () => value) + + fun load (f: File.t): t = + let + val table = new () + val () = + File.withIn + (f, fn ins => + In.foreachLine + (ins, fn l => + let + fun err () = + Error.bug (concat ["Control.StrMap.load: strange line: ", l]) + in + case String.peeki (l, fn (_, c) => c = #"=") of + NONE => err () + | SOME (i, _) => + let + val name = String.prefix (l, i) + val name = String.deleteSurroundingWhitespace name + val value = String.dropPrefix (l, i + 1) + val value = String.deleteSurroundingWhitespace value + in + add (table, name, value) + end + end)) + in + table + end + + fun peek (table, name) = + HashTable.peek (table, name) + + fun lookup (table, name) = + case peek (table, name) of + NONE => Error.bug (concat ["Control.StrMap.lookup: ", name]) + | SOME value => value + + fun lookupIntInf (table, name) = + let + val value = lookup (table, name) + in + case IntInf.fromString value of + NONE => Error.bug (concat ["Control.StrMap.lookupIntInf: ", name, ", ", value]) + | SOME ii => ii + end + + fun lookupBool (table, name) = + let + val value = lookup (table, name) + in + case Bool.fromString value of + NONE => Error.bug (concat ["Control.StrMap.lookupBool: ", name, ", ", value]) + | SOME b => b + end +end + structure C = Control () open C +fun layout' {pre, suf} = + let + open Layout + val (pre, suf) = (str pre, str suf) + in + align + ((seq [pre, str "control flags:", suf]) :: + (List.map + (all (), fn {name, value} => + seq [pre, str " ", str name, str ": ", str value, suf]))) + end +fun layout () = layout' {pre = "", suf = ""} structure Align = struct @@ -32,25 +110,117 @@ default = Vector.new0 (), toString = fn v => Layout.toString (Vector.layout String.layout v)} +val bounceRssaLimit = control {name = "bounceRssaLimit", + default = SOME 8, + toString = Option.toString Int.toString} +val bounceRssaLiveCutoff = control {name = "bounceRssaLiveCutoff", + default = SOME 12, + toString = Option.toString Int.toString} +val bounceRssaLoopCutoff = control {name = "bounceRssaLoopCutoff", + default = SOME 40, + toString = Option.toString Int.toString} +val bounceRssaUsageCutoff = control {name = "bounceRssaUsageCutoff", + default = SOME 15, + toString = Option.toString Int.toString} + +val chunkBatch = control {name = "chunkBatch", + default = Int.pow(2,15), + toString = Int.toString} -structure Chunk = +structure Chunkify = struct datatype t = - OneChunk - | ChunkPerFunc - | Coalesce of {limit: int} - - val toString = - fn OneChunk => "one chunk" - | ChunkPerFunc => "chunk per function" - | Coalesce {limit} => concat ["coalesce ", Int.toString limit] + Coalesce of {limit: int} + | Func + | One + | Simple of {mainFns: bool, + sccC: bool, + sccR: bool, + singC: bool, + singR: bool} + + val simpleDefault = + Simple {mainFns = true, + sccC = true, + sccR = true, + singC = true, + singR = true} + + fun toString c = + case c of + Coalesce {limit} => concat ["coalesce", Int.toString limit] + | Func => "func" + | One => "one" + | Simple {mainFns, sccC, sccR, singC, singR} => + let + open Layout + in + toString + (namedRecord + ("simple", + [("mainFns", Bool.layout mainFns), + ("sccC", Bool.layout sccC), + ("sccR", Bool.layout sccR), + ("singC", Bool.layout singC), + ("singR", Bool.layout singR)])) + end + fun fromString s = + let + open Parse + infix 1 <|> >>= + infix 3 <*> <* *> + infixr 4 <$> <$$> <$$$> <$$$$> <$ <$?> + val p = + any + [str "coalesce" *> + (peek (nextSat Char.isDigit) *> + fromScan (Function.curry Int.scan StringCvt.DEC)) >>= (fn limit => + pure (Coalesce {limit = limit})), + str "func" *> pure Func, + str "one" *> pure One, + str "simple" *> + (cbrack (ffield ("mainFns", bool) >>= (fn mainFns => + nfield ("sccC", bool) >>= (fn sccC => + nfield ("sccR", bool) >>= (fn sccR => + nfield ("singC", bool) >>= (fn singC => + nfield ("singR", bool) >>= (fn singR => + pure (Simple {mainFns = mainFns, + sccC = sccC, + sccR = sccR, + singC = singC, + singR = singR}))))))) + <|> + pure simpleDefault)] + <* failing next + in + case parseString (p, s) of + No _ => NONE + | Yes c => SOME c + end end -datatype chunk = datatype Chunk.t +val chunkify = control {name = "chunkify", + default = Chunkify.Coalesce {limit = 4096}, + toString = Chunkify.toString} -val chunk = control {name = "chunk", - default = Coalesce {limit = 4096}, - toString = Chunk.toString} +val chunkJumpTable = control {name = "chunkJumpTable", + default = false, + toString = Bool.toString} +val chunkMayRToSelfOpt = control {name = "chunkMayRToSelfOpt", + default = true, + toString = Bool.toString} +val chunkMustRToOtherOpt = control {name = "chunkMustRToOtherOpt", + default = true, + toString = Bool.toString} +val chunkMustRToSelfOpt = control {name = "chunkMustRToSelfOpt", + default = true, + toString = Bool.toString} +val chunkMustRToSingOpt = control {name = "chunkMustRToSingOpt", + default = true, + toString = Bool.toString} +val chunkTailCall = control {name = "chunkTailCall", + default = false, + toString = Bool.toString} val closureConvertGlobalize = control {name = "closureConvertGlobalize", default = true, @@ -63,24 +233,34 @@ structure Codegen = struct datatype t = - CCodegen - | x86Codegen - | amd64Codegen + AMD64Codegen + | CCodegen + | LLVMCodegen + | X86Codegen - val all = [x86Codegen,amd64Codegen,CCodegen] + val all = [X86Codegen,AMD64Codegen,CCodegen,LLVMCodegen] val toString: t -> string = - fn CCodegen => "c" - | x86Codegen => "x86" - | amd64Codegen => "amd64" + fn AMD64Codegen => "amd64" + | CCodegen => "c" + | LLVMCodegen => "llvm" + | X86Codegen => "x86" end datatype codegen = datatype Codegen.t val codegen = control {name = "codegen", - default = Codegen.x86Codegen, + default = Codegen.X86Codegen, toString = Codegen.toString} +val codegenComments = control {name = "codegen comments", + default = 0, + toString = Int.toString} + +val codegenFuseOpAndChk = control {name = "fuse `op` and `opCheckP` primitives in codegen", + default = false, + toString = Bool.toString} + val contifyIntoMain = control {name = "contifyIntoMain", default = false, toString = Bool.toString} @@ -112,12 +292,13 @@ (Layout.toString o Regexp.Compiled.layout)} -val dropPasses = - control {name = "drop passes", +val executePasses = + control {name = "execute passes", default = [], toString = List.toString (Layout.toString o - Regexp.Compiled.layout)} + (Layout.tuple2 + (Regexp.Compiled.layout, Bool.layout)))} structure Elaborate = struct @@ -216,8 +397,8 @@ fun name ctrl = Id.name (id ctrl) fun equalsId (ctrl, id') = Id.equals (id ctrl, id') - datatype ('a, 'b) parseResult = - Bad | Deprecated of 'a | Good of 'b | Other + datatype 'a parseResult = + Bad | Good of 'a | Other | Proxy of 'a list * {deprecated: bool} val deGood = fn Good z => z | _ => Error.bug "Control.Elaborate.deGood" @@ -258,8 +439,8 @@ newCur: 'st * 'args -> 'st, newDef: 'st * 'args -> 'st, parseArgs: string list -> 'args option}, - {parseId: string -> (Id.t list, Id.t) parseResult, - parseIdAndArgs: string -> ((Id.t * Args.t) list, (Id.t * Args.t)) parseResult, + {parseId: string -> Id.t parseResult, + parseIdAndArgs: string list -> (Id.t * Args.t) parseResult, withDef: unit -> (unit -> unit), snapshot: unit -> unit -> (unit -> unit)}) = let @@ -288,8 +469,8 @@ if String.equals (name', name) then Good id else parseId name' - val parseIdAndArgs = fn s => - case String.tokens (s, Char.isSpace) of + val parseIdAndArgs = fn ss => + case ss of name'::args' => if String.equals (name', name) then @@ -325,7 +506,7 @@ Good (id, args) end | NONE => Bad - else parseIdAndArgs s + else parseIdAndArgs ss | _ => Bad val withDef : unit -> (unit -> unit) = fn () => @@ -435,6 +616,8 @@ parseIdAndArgs = fn _ => Bad, withDef = fn () => (fn () => ()), snapshot = fn () => fn () => (fn () => ())} + + val (allowConstant, ac) = makeBool ({name = "allowConstant", default = false, expert = true}, ac) @@ -447,8 +630,11 @@ val (allowOverload, ac) = makeBool ({name = "allowOverload", default = false, expert = true}, ac) - val (allowRebindEquals, ac) = - makeBool ({name = "allowRebindEquals", + val (allowRedefineSpecialIds, ac) = + makeBool ({name = "allowRedefineSpecialIds", + default = false, expert = true}, ac) + val (allowSpecifySpecialIds, ac) = + makeBool ({name = "allowSpecifySpecialIds", default = false, expert = true}, ac) val (deadCode, ac) = makeBool ({name = "deadCode", @@ -479,14 +665,32 @@ [s] => SOME s | _ => NONE}, ac) - val (nonexhaustiveExnMatch, ac) = - makeDiagDI ({name = "nonexhaustiveExnMatch", + val (nonexhaustiveBind, ac) = + makeDiagEIW ({name = "nonexhaustiveBind", + default = DiagEIW.Warn, expert = false}, ac) + val (nonexhaustiveExnBind, ac) = + makeDiagDI ({name = "nonexhaustiveExnBind", default = DiagDI.Default, expert = false}, ac) + val (redundantBind, ac) = + makeDiagEIW ({name = "redundantBind", + default = DiagEIW.Warn, expert = false}, ac) val (nonexhaustiveMatch, ac) = - makeDiagEIW ({name = "nonexhaustiveMatch", + makeDiagEIW ({name = "nonexhaustiveMatch", default = DiagEIW.Warn, expert = false}, ac) + val (nonexhaustiveExnMatch, ac) = + makeDiagDI ({name = "nonexhaustiveExnMatch", + default = DiagDI.Default, expert = false}, ac) val (redundantMatch, ac) = - makeDiagEIW ({name = "redundantMatch", + makeDiagEIW ({name = "redundantMatch", + default = DiagEIW.Warn, expert = false}, ac) + val (nonexhaustiveRaise, ac) = + makeDiagEIW ({name = "nonexhaustiveRaise", + default = DiagEIW.Ignore, expert = false}, ac) + val (nonexhaustiveExnRaise, ac) = + makeDiagDI ({name = "nonexhaustiveExnRaise", + default = DiagDI.Ignore, expert = false}, ac) + val (redundantRaise, ac) = + makeDiagEIW ({name = "redundantRaise", default = DiagEIW.Warn, expert = false}, ac) val (resolveScope, ac) = make ({choices = SOME [ResolveScope.Dec, ResolveScope.Strdec, ResolveScope.Topdec, ResolveScope.Program], @@ -504,69 +708,148 @@ val (sequenceNonUnit, ac) = makeDiagEIW ({name = "sequenceNonUnit", default = DiagEIW.Ignore, expert = false}, ac) + val (valrecConstr, ac) = + makeDiagEIW ({name = "valrecConstr", + default = DiagEIW.Warn, expert = false}, ac) val (warnUnused, ac) = makeBool ({name = "warnUnused", default = false, expert = false}, ac) + (* Successor ML *) + val (allowDoDecls, ac) = + makeBool ({name = "allowDoDecls", + default = false, expert = false}, ac) + val (allowExtendedNumConsts, ac) = + makeBool ({name = "allowExtendedNumConsts", + default = false, expert = false}, ac) + val (allowExtendedTextConsts, ac) = + makeBool ({name = "allowExtendedTextConsts", + default = false, expert = false}, ac) + val (allowLineComments, ac) = + makeBool ({name = "allowLineComments", + default = false, expert = false}, ac) + val (allowOptBar, ac) = + makeBool ({name = "allowOptBar", + default = false, expert = false}, ac) + val (allowOptSemicolon, ac) = + makeBool ({name = "allowOptSemicolon", + default = false, expert = false}, ac) + val (allowOrPats, ac) = + makeBool ({name = "allowOrPats", + default = false, expert = false}, ac) + val (allowRecordPunExps, ac) = + makeBool ({name = "allowRecordPunExps", + default = false, expert = false}, ac) + val (allowSigWithtype, ac) = + makeBool ({name = "allowSigWithtype", + default = false, expert = false}, ac) + val (allowVectorExps, ac) = + makeBool ({name = "allowVectorExps", + default = false, expert = false}, ac) + val (allowVectorPats, ac) = + makeBool ({name = "allowVectorPats", + default = false, expert = false}, ac) + val extendedConstsCtrls = + [allowExtendedNumConsts, allowExtendedTextConsts] + val vectorCtrls = + [allowVectorExps, allowVectorPats] + val successorMLCtrls = + [allowDoDecls, allowExtendedNumConsts, + allowExtendedTextConsts, allowLineComments, allowOptBar, + allowOptSemicolon, allowOrPats, allowRecordPunExps, + allowSigWithtype, allowVectorExps, allowVectorPats] + + val {parseId, parseIdAndArgs, withDef, snapshot} = ac end local - fun makeDeprecated ({alts: string list, - name: string, - parseArgs: string list -> string list option}, - {parseId: string -> (Id.t list, Id.t) parseResult, - parseIdAndArgs: string -> ((Id.t * Args.t) list, (Id.t * Args.t)) parseResult}) = + fun makeProxy ({alts: (Id.t * ('args -> string list option)) list, + choices: 'args list option, + deprecated: bool, + expert: bool, + toString: 'args -> string, + name: string, + parseArgs: string list -> 'args option}, + {parseId: string -> Id.t parseResult, + parseIdAndArgs: string list -> (Id.t * Args.t) parseResult}) = let + val () = + if deprecated then () else + List.push + (documentation, + {choices = Option.map (choices, fn cs => + List.map (cs, toString)), + expert = expert, + name = name}) val parseId = fn name' => if String.equals (name', name) - then Deprecated (List.map (alts, deGood o parseId)) + then Proxy (List.map (alts, fn (id, _) => id), {deprecated = deprecated}) else parseId name' - val parseIdAndArgs = fn s => - case String.tokens (s, Char.isSpace) of + val parseIdAndArgs = fn ss => + case ss of name'::args' => if String.equals (name', name) - then + then case parseArgs args' of - SOME alts => - Deprecated (List.map (alts, deGood o parseIdAndArgs)) + SOME v => let + val alts = + List.keepAllMap + (alts, fn (id, mkArgs) => + Option.map + (mkArgs v, fn ss => + deGood (parseIdAndArgs ((Id.name id)::ss)))) + in + Proxy (alts, {deprecated = deprecated}) + end | NONE => Bad - else parseIdAndArgs s + else parseIdAndArgs ss | _ => Bad in {parseId = parseId, parseIdAndArgs = parseIdAndArgs} end - fun makeDeprecatedBool ({altIds: string list, - altArgs: bool -> string list list, - name: string}, - ac) = - let - local - fun make b = - List.map2 - (altIds, altArgs b, fn (altId, altArgs) => - String.concatWith (altId::altArgs, " ")) - in - val trueAltIdAndArgs = make true - val falseAltIdAndArgs = make false - end - in - makeDeprecated ({alts = altIds, - name = name, - parseArgs = fn args' => - case args' of - [arg'] => - (case Bool.fromString arg' of - SOME true => SOME trueAltIdAndArgs - | SOME false => SOME falseAltIdAndArgs - | NONE => NONE) - | _ => NONE}, - ac) - end - val _ = makeDeprecatedBool + + fun makeProxyBoolSimple ({alts: Id.t list, + default: bool, + deprecated: bool, + expert: bool, + name: string}, ac) = + makeProxy ({alts = List.map (alts, fn id => (id, fn b => SOME [Bool.toString b])), + choices = SOME (if default then [true, false] + else [false, true]), + deprecated = deprecated, + expert = expert, + toString = Bool.toString, + name = name, + parseArgs = fn args' => + case args' of + [arg'] => Bool.fromString arg' + | _ => NONE}, + ac) in val ac = {parseId = parseId, parseIdAndArgs = parseIdAndArgs} + + (* Successor ML *) + val ac = + makeProxyBoolSimple ({alts = List.map (extendedConstsCtrls, id), + default = false, + deprecated = false, + expert = false, + name = "allowExtendedConsts"}, ac) + val ac = + makeProxyBoolSimple ({alts = List.map (vectorCtrls, id), + default = false, + deprecated = false, + expert = false, + name = "allowVectorExpsAndPats"}, ac) + val ac = + makeProxyBoolSimple ({alts = List.map (successorMLCtrls, id), + default = false, + deprecated = false, + expert = false, + name = "allowSuccessorML"}, ac) + val {parseId, parseIdAndArgs} = ac end @@ -586,27 +869,29 @@ end in val parseId = fn s => checkPrefix (s, parseId) - val parseIdAndArgs = fn s => checkPrefix (s, parseIdAndArgs) + val parseIdAndArgs = fn s => checkPrefix (s, fn s => parseIdAndArgs (String.tokens (s, Char.isSpace))) end val processDefault = fn s => case parseIdAndArgs s of Bad => Bad - | Deprecated alts => + | Good (id, args) => if Args.processDef args then Good id else Bad + | Proxy (alts, {deprecated}) => List.fold - (alts, Deprecated (List.map (alts, #1)), fn ((_,args),res) => + (alts, Proxy (List.map (alts, #1), {deprecated = deprecated}), + fn ((_,args),res) => if Args.processDef args then res else Bad) - | Good (_, args) => if Args.processDef args then Good () else Bad | Other => Bad val processEnabled = fn (s, b) => case parseId s of Bad => Bad - | Deprecated alts => + | Proxy (alts, {deprecated}) => List.fold - (alts, Deprecated alts, fn (id,res) => + (alts, Proxy (alts, {deprecated = deprecated}), + fn (id, res) => if Id.setEnabled (id, b) then res else Bad) - | Good id => if Id.setEnabled (id, b) then Good () else Bad + | Good id => if Id.setEnabled (id, b) then Good id else Bad | Other => Bad val withDef : (unit -> 'a) -> 'a = fn f => @@ -630,11 +915,6 @@ end -val elaborateOnly = - control {name = "elaborate only", - default = false, - toString = Bool.toString} - val emitMain = control {name = "emit main", default = true, @@ -696,6 +976,26 @@ default = Limit, toString = GcCheck.toString} +val gcExpect = control {name = "gc check expect", + default = NONE, + toString = Option.toString Bool.toString} + +val globalizeArrays = control {name = "globalize arrays", + default = false, + toString = Bool.toString} + +val globalizeRefs = control {name = "globalize refs", + default = true, + toString = Bool.toString} + +val globalizeSmallIntInf = control {name = "globalize int-inf as small type)", + default = true, + toString = Bool.toString} + +val globalizeSmallType = control {name = "globalize small type", + default = 1, + toString = Int.toString} + val indentation = control {name = "indentation", default = 3, toString = Int.toString} @@ -741,6 +1041,10 @@ default = "", toString = File.toString} +val keepAST = control {name = "keep AST", + default = false, + toString = Bool.toString} + val keepCoreML = control {name = "keep CoreML", default = false, toString = Bool.toString} @@ -798,9 +1102,111 @@ val libname = ref "" -val loopPasses = control {name = "loop passes", - default = 1, - toString = Int.toString} +structure LLVMAliasAnalysisMetaData = + struct + datatype t = + None + | Scope + | TBAA of {gcstate: {offset: bool} option, + global: {cty: bool, index: bool} option, + heap: {cty: bool, kind: bool, offset: bool, tycon: bool} option, + other: bool, + stack: {offset: bool} option} + + val tbaaDefault = + TBAA {gcstate = SOME {offset = false}, + global = SOME {cty = false, index = false}, + heap = SOME {cty = false, kind = false, offset = false, tycon = false}, + other = true, + stack = SOME {offset = false}} + + fun toString aamd = + case aamd of + None => "none" + | Scope => "scope" + | TBAA {gcstate, global, heap, other, stack} => + let + open Layout + in + toString + (namedRecord + ("tbaa", + [("gcstate", + Option.layout (fn {offset} => + record [("offset", Bool.layout offset)]) + gcstate), + ("global", + Option.layout (fn {cty, index} => + record [("cty", Bool.layout cty), + ("index", Bool.layout index)]) + global), + ("heap", + Option.layout (fn {cty, kind, offset, tycon} => + record [("cty", Bool.layout cty), + ("kind", Bool.layout kind), + ("offset", Bool.layout offset), + ("tycon", Bool.layout tycon)]) + heap), + ("other", Bool.layout other), + ("stack", + Option.layout (fn {offset} => + record [("offset", Bool.layout offset)]) + stack)])) + end + fun fromString s = + let + open Parse + infix 1 <|> >>= + infix 3 <*> <* *> + infixr 4 <$> <$$> <$$$> <$$$$> <$ <$?> + val p = + any + [kw "none" *> pure None, + kw "scope" *> pure Scope, + kw "tbaa" *> + (cbrack (ffield ("gcstate", option (cbrack (ffield ("offset", bool) >>= (fn offset => + pure {offset = offset})))) >>= (fn gcstate => + nfield ("global", option (cbrack (ffield ("cty", bool) >>= (fn cty => + nfield ("index", bool) >>= (fn index => + pure {cty = cty, + index = index}))))) >>= (fn global => + nfield ("heap", option (cbrack (ffield ("cty", bool) >>= (fn cty => + nfield ("kind", bool) >>= (fn kind => + nfield ("offset", bool) >>= (fn offset => + nfield ("tycon", bool) >>= (fn tycon => + pure {cty = cty, + kind = kind, + offset = offset, + tycon = tycon}))))))) >>= (fn heap => + nfield ("other", bool) >>= (fn other => + nfield ("stack", option (cbrack (ffield ("offset", bool) >>= (fn offset => + pure {offset = offset})))) >>= (fn stack => + pure (TBAA {gcstate = gcstate, global = global, heap = heap, other = other, stack = stack}))))))) + <|> + pure tbaaDefault)] + <* failing next + in + case parseString (p, s) of + No _ => NONE + | Yes c => SOME c + end + end + +val llvmAAMD = + control {name = "llvmAAMD", + default = LLVMAliasAnalysisMetaData.None, + toString = LLVMAliasAnalysisMetaData.toString} + +val llvmCC10 = control {name = "llvm 'cc10'", + default = false, + toString = Bool.toString} + +val loopUnrollLimit = control {name = "loop unrolling limit", + default = 150, + toString = Int.toString} +val loopUnswitchLimit = control {name = "loop unswitching limit", + default = 300, + toString = Int.toString} val markCards = control {name = "mark cards", default = true, @@ -820,9 +1226,9 @@ structure Native = struct - val commented = control {name = "native commented", - default = 0, - toString = Int.toString} + val elimALRedundant = control {name = "elim AL redundant", + default = true, + toString = Bool.toString} val liveStack = control {name = "native live stack", default = false, @@ -863,14 +1269,67 @@ val split = control {name = "native split", default = SOME 20000, toString = Option.toString Int.toString} + + val pic = control {name = "native pic", + default = false, + toString = Bool.toString} end -val optimizationPasses: - {il: string, set: string -> unit Result.t, get: unit -> string} list ref = - control {name = "optimizationPasses", - default = [], - toString = List.toString - (fn {il,get,...} => concat ["<",il,"::",get (),">"])} +val numExports: int ref = ref 0 + +val optFuel = + control {name = "optFuel", + default = NONE, + toString = Option.toString Int.toString} + +fun optFuelAvailAndUse () = + case !optFuel of + NONE => true + | SOME i => if i > 0 + then (optFuel := SOME (i - 1); true) + else false +(* Suppress unused variable warning + * This variable is purposefully unused in production, + * but is retained to make it easy to use in development of new + * optimization passes. + *) +val _ = optFuelAvailAndUse + +(* Control IL-specific optimization passes *) +structure OptimizationPasses = + struct + val optPasses: {il: string, passes: string} list ref = + control {name = "optimizationPasses", + default = [], + toString = List.toString (fn {il, passes} => + concat ["<",il,"::",passes,">"])} + val optPassesSets: {il: string, set: string -> unit Result.t} list ref = + ref [] + + fun register {il, set} = + let + val set = fn passes => + (optPasses := List.map (!optPasses, fn z => + if String.equals (il, #il z) + then {il = il, passes = passes} + else z) + ; set passes) + in + List.push (optPassesSets, {il = il, set = set}) + end + + fun set {il, passes} = + case List.peek (!optPassesSets, fn z => String.equals (il, #il z)) of + NONE => Error.bug (concat ["Control.OptimizationPasses.set: ", il, " not found"]) + | SOME {set, ...} => set passes + fun setAll passes = + List.foldr (!optPassesSets, Result.Yes (), fn ({il, set}, res) => + case res of + Result.No s => Result.No s + | Result.Yes () => (case set passes of + Result.No s => Result.No (concat [s, " (for ", il, ")"]) + | Result.Yes () => Result.Yes ())) + end val polyvariance = control {name = "polyvariance", @@ -889,7 +1348,61 @@ ("product", Int.layout product)]) p)} -val positionIndependent = ref false +structure PositionIndependentStyle = + struct + datatype t = + NPI + | PIC + | PIE + + fun fromString s = + case s of + "npi" => SOME NPI + | "pic" => SOME PIC + | "pie" => SOME PIE + | _ => NONE + fun toString pis = + case pis of + NPI => "npi" + | PIC => "pic" + | PIE => "pie" + fun toSuffix pis = + case pis of + NONE => "" + | SOME NPI => "-npi" + | SOME PIC => "-pic" + | SOME PIE => "-pie" + + fun ccOpts pis = + case pis of + NONE => [] + | SOME NPI => ["-fno-pic", "-fno-pie"] + | SOME PIC => ["-fPIC"] + | SOME PIE => ["-fPIE"] + fun llvm_llcOpts (pis, {targetDefault}) = + let + fun llcOpts pis = + case pis of + NPI => [] (* ["--relocation-model=static"] *) + | PIC => ["--relocation-model=pic"] + | PIE => ["--relocation-model=pic"] + in + case pis of + NONE => llcOpts targetDefault + | SOME pis => llcOpts pis + end + fun linkOpts pis = + case pis of + NONE => [] + | SOME NPI => ["-fno-pic", "-fno-pie", "-no-pie"] + | SOME PIC => ["-fno-pie", "-no-pie"] + | SOME PIE => ["-fPIE -pie"] + end + +val positionIndependentStyle = control {name = "position independent style", + default = NONE, + toString = Option.toString PositionIndependentStyle.toString} + val preferAbsPaths = control {name = "prefer abs paths", default = false, @@ -931,6 +1444,10 @@ default = ProfileNone, toString = Profile.toString} +val profileBlock = control {name = "profile block", + default = false, + toString = Bool.toString} + val profileBranch = control {name = "profile branch", default = false, toString = Bool.toString} @@ -981,6 +1498,16 @@ default = NONE, toString = Option.toString File.toString} +val showBasisCompact = control {name = "show basis compact", + default = false, + toString = Bool.toString} +val showBasisDef = control {name = "show basis def", + default = true, + toString = Bool.toString} +val showBasisFlat = control {name = "show basis flat", + default = true, + toString = Bool.toString} + val showDefUse = control {name = "show def-use", default = NONE, toString = Option.toString File.toString} @@ -989,6 +1516,29 @@ default = true, toString = Bool.toString} +structure SplitTypesBool = + struct + datatype t = + Always + | Never + | Smart (* split only when smaller than two, default *) + val toString = + fn Always => "always" + | Never => "never" + | Smart => "smart" + end + +datatype splitTypesBool = datatype SplitTypesBool.t + +val splitTypesBool = control {name = "bool type splitting method", + default = Smart, + toString = SplitTypesBool.toString} + +val stopPasses = control {name = "stop passes", + default = [], + toString = List.toString + (Layout.toString o + Regexp.Compiled.layout)} structure Target = struct datatype t = @@ -1009,7 +1559,14 @@ structure Target = struct open Target - + + val consts = + Promise.delay + (fn () => + StrMap.load + (OS.Path.joinDirFile {dir = !libTargetDir, + file = "constants"})) + datatype arch = datatype MLton.Platform.Arch.t val arch = control {name = "target arch", @@ -1022,40 +1579,30 @@ default = Linux, toString = MLton.Platform.OS.toString} - fun make s = - let - val r = ref NONE - fun get () = - case !r of - NONE => Error.bug ("ControlFlags.Target." ^ s ^ ": not set") - | SOME x => x - fun set x = r := SOME x - in - (get, set) - end - val (bigEndian: unit -> bool, setBigEndian) = make "bigEndian" + val bigEndian = + Promise.lazy + (fn () => + StrMap.lookupBool (Promise.force consts, "const::MLton_Platform_Arch_bigendian")) structure Size = struct - val (cint: unit -> Bits.t, set_cint) = make "Size.cint" - val (cpointer: unit -> Bits.t, set_cpointer) = make "Size.cpointer" - val (cptrdiff: unit -> Bits.t, set_cptrdiff) = make "Size.cptrdiff" - val (csize: unit -> Bits.t, set_csize) = make "Size.csize" - val (header: unit -> Bits.t, set_header) = make "Size.header" - val (mplimb: unit -> Bits.t, set_mplimb) = make "Size.mplimb" - val (objptr: unit -> Bits.t, set_objptr) = make "Size.objptr" - val (seqIndex: unit -> Bits.t, set_seqIndex) = make "Size.seqIndex" + fun make name = + Promise.lazy + (fn () => + (Bytes.toBits o Bytes.fromIntInf) + (StrMap.lookupIntInf (Promise.force consts, "size::" ^ name))) + + val cint = make "cint" + val cpointer = make "cpointer" + val cptrdiff = make "cptrdiff" + val csize = make "csize" + val header = make "header" + val mplimb = make "mplimb" + val normalMetaData = make "normalMetaData" + val objptr = make "objptr" + val seqIndex = make "seqIndex" + val sequenceMetaData = make "sequenceMetaData" end - fun setSizes {cint, cpointer, cptrdiff, csize, - header, mplimb, objptr, seqIndex} = - (Size.set_cint cint - ; Size.set_cpointer cpointer - ; Size.set_cptrdiff cptrdiff - ; Size.set_csize csize - ; Size.set_header header - ; Size.set_mplimb mplimb - ; Size.set_objptr objptr - ; Size.set_seqIndex seqIndex) end fun mlbPathMap () = @@ -1072,20 +1619,13 @@ path = String.toLower (MLton.Platform.OS.toString (!Target.os))}, {var = "OBJPTR_REP", - path = (case Bits.toInt (Target.Size.objptr ()) of - 32 => "rep32" - | 64 => "rep64" - | _ => Error.bug "Control.mlbPathMap")}, - {var = "HEADER_WORD", - path = (case Bits.toInt (Target.Size.header ()) of - 32 => "word32" - | 64 => "word64" - | _ => Error.bug "Control.mlbPathMap")}, + path = "rep" ^ Bits.toString (Target.Size.objptr ())}, + {var = "SEQUENCE_METADATA_SIZE", + path = "size" ^ Bits.toString (Target.Size.sequenceMetaData ())}, + {var = "NORMAL_METADATA_SIZE", + path = "size" ^ Bits.toString (Target.Size.normalMetaData ())}, {var = "SEQINDEX_INT", - path = (case Bits.toInt (Target.Size.seqIndex ()) of - 32 => "int32" - | 64 => "int64" - | _ => Error.bug "Control.mlbPathMap")}, + path = "int" ^ Bits.toString (Target.Size.seqIndex ())}, {var = "DEFAULT_CHAR", path = !defaultChar}, {var = "DEFAULT_WIDECHAR", @@ -1115,6 +1655,22 @@ | Top => "Top" | Pass => "Pass" | Detail => "Detail" + + fun compare (v1, v2) = + case (v1, v2) of + (Silent, Silent) => EQUAL + | (Silent, _) => LESS + | (_, Silent) => GREATER + | (Top, Top) => EQUAL + | (Top, _) => LESS + | (_, Top) => GREATER + | (Pass, Pass) => EQUAL + | (Pass, _) => LESS + | (_, Pass) => GREATER + | (Detail, Detail) => EQUAL + + val {<, <=, ...} = + Relation.compare compare end datatype verbosity = datatype Verbosity.t @@ -1140,4 +1696,61 @@ val _ = defaults () + +val commandLineConsts = StrMap.new () +fun setCommandLineConst {name, value} = + let + fun make (fromString, control) = + let + fun set () = + case fromString value of + NONE => Error.bug (concat ["bad value for ", name]) + | SOME v => control := v + in + set + end + val () = + case List.peek ([("Exn.keepHistory", + make (Bool.fromString, exnHistory))], + fn (s, _) => s = name) of + NONE => () + | SOME (_,set) => set () + in + StrMap.add (commandLineConsts, "cmdLineConst::" ^ name, value) + end + +val buildConsts = + Promise.delay + (fn () => + let + val bool = Bool.toString + val int = Int.toString + val buildConsts = + [("MLton_Align_align", int (case !align of + Align4 => 4 + | Align8 => 8)), + ("MLton_Codegen_codegen", int (case !codegen of + CCodegen => 0 + | X86Codegen => 1 + | AMD64Codegen => 2 + | LLVMCodegen => 3)), + ("MLton_FFI_numExports", int (!numExports)), + ("MLton_Platform_Format", (case !format of + Archive => "archive" + | Executable => "executable" + | LibArchive => "libarchive" + | Library => "library")), + ("MLton_Profile_isOn", bool (case !profile of + ProfileNone => false + | ProfileCallStack => false + | ProfileDrop => false + | ProfileLabel => false + | _ => true))] + val table = StrMap.new () + val () = List.foreach (buildConsts, fn (name, value) => + StrMap.add (table, "buildConst::" ^ name, value)) + in + table + end) + end diff -Nru mlton-20130715/mlton/control/control.sig mlton-20210117+dfsg/mlton/control/control.sig --- mlton-20130715/mlton/control/control.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/control.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -24,6 +24,7 @@ val traceAdd: traceAccum * string -> ('a -> 'b) -> 'a -> 'b val traceBatch: verbosity * string -> ('a -> 'b) -> (('a -> 'b) * (unit -> unit)) + val traceTop: string -> ('a -> unit) -> 'a -> unit val indent: unit -> unit val unindent: unit -> unit val getDepth: unit -> int @@ -34,7 +35,7 @@ val checkFile: File.t * {fail: string -> 'a, name: string, ok: unit -> 'a} -> 'a - val checkForErrors: string -> unit + val checkForErrors: unit -> unit val error: Region.t * Layout.t * Layout.t -> unit val errorStr: Region.t * string -> unit (* abort compilation once this many errors reached *) @@ -45,34 +46,41 @@ (*------------------------------------*) (* Compiler Passes *) (*------------------------------------*) - datatype style = No | Assembly | C | Dot | ML + datatype style = No | Assembly | C | Dot | LLVM | ML datatype 'a display = - NoDisplay - | Layout of 'a -> Layout.t + Layout of 'a -> Layout.t | Layouts of 'a * (Layout.t -> unit) -> unit val diagnostic: (unit -> Layout.t) -> unit val diagnostics: ((Layout.t -> unit) -> unit) -> unit - val maybeSaveToFile: - {name: string, suffix: string} * style * 'a * 'a display -> unit val saveToFile: - {suffix: string} * style * 'a * 'a display -> unit + {arg: 'a, + name: string option, + toFile: {display: 'a display, style: style, suffix: string}, + verb: Verbosity.t} -> unit val outputHeader: style * (Layout.t -> unit) -> unit val outputHeader': style * Out.t -> unit - val pass: {display: 'a display, - name: string, - stats: 'a -> Layout.t, - style: style, - suffix: string, - thunk: unit -> 'a} -> 'a - - val passTypeCheck: {display: 'a display, + val simplifyPass: {arg: 'a, + doit: 'a -> 'a, + execute: bool, + keepIL: bool, + name: string, + stats: 'a -> Layout.t, + toFile: {display: 'a display, style: style, suffix: string}, + typeCheck: 'a -> unit} -> 'a + val simplifyPasses: {arg: 'a, + passes: {doit: 'a -> 'a, execute: bool, name: string} list, + stats: 'a -> Layout.t, + toFile: {display: 'a display, style: style, suffix: string}, + typeCheck: 'a -> unit} -> 'a + val translatePass: {arg: 'a, + doit: 'a -> 'b, + keepIL: bool, name: string, - stats: 'a -> Layout.t, - style: style, - suffix: string, - thunk: unit -> 'a, - typeCheck: 'a -> unit} -> 'a + srcToFile: {display: 'a display, style: style, suffix: string} option, + tgtStats: ('b -> Layout.t) option, + tgtToFile: {display: 'b display, style: style, suffix: string} option, + tgtTypeCheck: ('b -> unit) option} -> 'b end diff -Nru mlton-20130715/mlton/control/control.sml mlton-20210117+dfsg/mlton/control/control.sml --- mlton-20130715/mlton/control/control.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/control.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,45 +12,33 @@ open ControlFlags -structure Verbosity = - struct - datatype t = datatype verbosity - - val op <= = - fn (Silent, _) => true - | (Top, Silent) => false - | (Top, _) => true - | (Pass, Pass) => true - | (_, Detail) => true - | _ => false - end +structure CommentStyle = +struct + datatype t = No | Assembly | C | Dot | LLVM | ML -datatype style = No | Assembly | C | Dot | ML + val preSuf = + fn No => ("", "") + | Assembly => ("/* ", " */") + | C => ("/* ", " */") + | Dot => ("// ", "") + | LLVM => ("; ", "") + | ML => ("(* ", " *)") -val preSuf = - fn No => ("", "") - | Assembly => ("/* ", " */") - | C => ("/* ", " */") - | Dot => ("// ", "") - | ML => ("(* ", " *)") +end +datatype style = datatype CommentStyle.t fun outputHeader (style: style, output: Layout.t -> unit) = let - val (pre, suf) = preSuf style - val lines = - Version.banner - :: concat [" created this file on ", Date.toString (Date.now ()), "."] - :: "Do not edit this file." - :: "Flag settings: " - :: (List.map (all (), fn {name, value} => - concat [" ", name, ": ", value])) - in List.foreach (lines, fn l => output (Layout.str (concat [pre, l, suf]))) + val (pre, suf) = CommentStyle.preSuf style + in + output (Layout.str (concat [pre, Version.banner, suf])); + if Verbosity.< (!verbosity, Verbosity.Detail) + then () + else output (ControlFlags.layout' {pre = pre, suf = suf}) end fun outputHeader' (style, out: Out.t) = - outputHeader (style, fn l => - (Layout.output (l, out); - Out.newline out)) + outputHeader (style, fn l => Layout.outputl (l, out)) val depth: int ref = ref 0 fun getDepth () = !depth @@ -95,37 +83,65 @@ in concat [t2s (Time.- (total, gc)), " + ", t2s gc, " (", per, "% GC)"] end +exception CompileError +exception Stopped +exception Raised + fun trace (verb, name: string) (f: 'a -> 'b) (a: 'a): 'b = if Verbosity.<= (verb, !verbosity) - then - let - val _ = messageStr (verb, concat [name, " starting"]) - val (t, gc) = time () - val _ = indent () - fun done () = - let - val _ = unindent () - val (t', gc') = time () - in - timeToString {total = Time.- (t', t), - gc = Time.- (gc', gc)} - end - in (f a - before messageStr (verb, concat [name, " finished in ", done ()])) - handle e => - (messageStr (verb, concat [name, " raised in ", done ()]) - ; messageStr (verb, concat [name, " raised: ", Exn.name e]) - ; (case Exn.history e of - [] => () - | history => - (messageStr (verb, concat [name, " raised with history: "]) - ; (List.foreach - (history, fn s => - messageStr (verb, concat ["\t", s]))))) - ; raise e) - end - else - f a + then let + val _ = messageStr (verb, concat [name, " starting"]) + val (t, gc) = time () + val _ = indent () + fun done () = + let + val _ = unindent () + val (t', gc') = time () + in + timeToString {total = Time.- (t', t), + gc = Time.- (gc', gc)} + end + in (f a + before messageStr (verb, concat [name, " finished in ", done ()])) + handle exn => + (case exn of + CompileError => + (messageStr (verb, concat [name, " reported errors in ", done ()]) + ; raise exn) + | Stopped => + (messageStr (verb, concat [name, " finished in ", done ()]) + ; raise exn) + | Raised => + (messageStr (verb, concat [name, " raised in ", done ()]) + ; raise exn) + | _ => + (messageStr (verb, concat [name, " raised: ", Exn.toString exn]) + ; (case Exn.history exn of + [] => () + | history => + (indent () + ; List.foreach (history, fn s => messageStr (verb, s)) + ; unindent ())) + ; messageStr (verb, concat [name, " raised in ", done ()]) + ; raise Raised)) + end + else f a + +fun traceTop (name: string) (f: 'a -> unit) (a: 'a) = + trace (Top, name) f a + handle CompileError => OS.Process.exit OS.Process.failure + | Stopped => () + | Raised => OS.Process.exit OS.Process.failure + | exn => + (verbosity := Top + ; messageStr (Top, concat [name, " raised: ", Exn.toString exn]) + ; (case Exn.history exn of + [] => () + | history => + (indent () + ; List.foreach (history, fn s => messageStr (Top, s)) + ; unindent ())) + ; OS.Process.exit OS.Process.failure) type traceAccum = {verb: verbosity, total: Time.t ref, @@ -148,33 +164,35 @@ val ('a, 'b) traceAdd: (traceAccum * string) -> ('a -> 'b) -> 'a -> 'b = fn ({verb, total, totalGC}, name) => - fn f => - fn a => + fn f => fn a => if Verbosity.<= (verb, !verbosity) - then let - val (t, gc) = time () - fun done () - = let - val (t', gc') = time () - in - total := Time.+ (!total, Time.- (t', t)) - ; totalGC := Time.+ (!totalGC, Time.- (gc', gc)) - end - in - (f a - before done ()) - handle e => - (messageStr (verb, concat [name, " raised"]) - ; (case Exn.history e of - [] => () - | history => - (messageStr (verb, concat [name, " raised with history: "]) - ; (List.foreach - (history, fn s => - messageStr (verb, concat ["\t", s]))))) - ; raise e) - end - else f a + then let + val (t, gc) = time () + fun done () = + let + val (t', gc') = time () + in + total := Time.+ (!total, Time.- (t', t)) + ; totalGC := Time.+ (!totalGC, Time.- (gc', gc)) + end + in (f a + before done ()) + handle exn => + (case exn of + CompileError => raise exn + | Stopped => raise exn + | Raised => raise exn + | _ => + (messageStr (verb, concat [name, " raised: ", Exn.toString exn]) + ; (case Exn.history exn of + [] => () + | history => + (indent () + ; List.foreach (history, fn s => messageStr (verb, s)) + ; unindent ())) + ; raise Raised)) + end + else f a val ('a, 'b) traceBatch: (verbosity * string) -> ('a -> 'b) -> (('a -> 'b) * (unit -> unit)) = @@ -194,16 +212,11 @@ val errorThreshhold: int ref = ref 20 -val die = Process.fail - local fun msg (kind: string, r: Region.t, msg: Layout.t, extra: Layout.t): unit = let open Layout - val p = - case Region.left r of - NONE => "" - | SOME p => SourcePos.toString p + val r = Region.toString r val msg = Layout.toString msg val msg = Layout.str @@ -211,7 +224,7 @@ String.dropPrefix (msg, 1), "."]) in - outputl (align [seq [str (concat [kind, ": "]), str p, str "."], + outputl (align [seq [str (concat [kind, ": "]), str r, str "."], indent (align [msg, indent (extra, 2)], 2)], @@ -225,16 +238,16 @@ val _ = msg ("Error", r, m, e) in if !numErrors = !errorThreshhold - then die "compilation aborted: too many errors" + then raise CompileError else () end end fun errorStr (r, msg) = error (r, Layout.str msg, Layout.empty) -fun checkForErrors (name: string) = +fun checkForErrors () = if !numErrors > 0 - then die (concat ["compilation aborted: ", name, " reported errors"]) + then raise CompileError else () fun checkFile (f: File.t, {fail: string -> 'a, name, ok: unit -> 'a}): 'a = let @@ -253,14 +266,13 @@ (*---------------------------------------------------*) datatype 'a display = - NoDisplay - | Layout of 'a -> Layout.t + Layout of 'a -> Layout.t | Layouts of 'a * (Layout.t -> unit) -> unit fun 'a sizeMessage (name: string, a: 'a): Layout.t = let open Layout in str (concat [name, " size = ", - Int.toCommaString (MLton.size a), " bytes"]) + IntInf.toCommaString (MLton.size a), " bytes"]) end val diagnosticWriter: (Layout.t -> unit) option ref = ref NONE @@ -272,38 +284,48 @@ fun diagnostic f = diagnostics (fn disp => disp (f ())) -fun saveToFile ({suffix: string}, - style, - a: 'a, - d: 'a display): unit = +fun saveToFile {arg: 'a, + name: string option, + toFile = {display: 'a display, style: style, suffix: string}, + verb: Verbosity.t}: unit = let + val name = + case name of + NONE => concat [!inputFile, ".", suffix] + | SOME name => concat [!inputFile, ".", name, ".", suffix] fun doit f = - trace (Pass, "display") + trace (verb, concat ["save ", name]) Ref.fluidLet - (inputFile, concat [!inputFile, ".", suffix], fn () => + (inputFile, name, fn () => File.withOut (!inputFile, fn out => f (fn l => (Layout.outputl (l, out))))) in - case d of - NoDisplay => () - | Layout layout => + case display of + Layout layout => doit (fn output => (outputHeader (style, output) - ; output (layout a))) + ; output (layout arg))) | Layouts layout => doit (fn output => (outputHeader (style, output) - ; layout (a, output))) + ; layout (arg, output))) end -fun maybeSaveToFile ({name: string, suffix: string}, - style: style, - a: 'a, - d: 'a display): unit = - if not (List.exists (!keepPasses, fn re => - Regexp.Compiled.matchesAll (re, name))) - then () - else saveToFile ({suffix = concat [name, ".", suffix]}, style, a, d) +fun maybeSaveToFile {arg: 'a, name: string, suffix: string, toFile}: unit = + let + val fullName = concat [name, ".", suffix] + val keep = + List.exists + ([name, fullName], fn name => + (List.exists + (!keepPasses, fn re => + Regexp.Compiled.matchesAll (re, name)))) + in + if keep + then saveToFile {arg = arg, name = SOME fullName, + toFile = toFile, verb = Pass} + else () + end (* Code for diagnosing a pass. *) val wrapDiagnosing = @@ -315,13 +337,17 @@ else fn () => let val result = ref NONE + val display = + Layouts (fn ((), output) => + (diagnosticWriter := SOME output + ; result := SOME (thunk ()) + ; diagnosticWriter := NONE)) val _ = saveToFile - ({suffix = concat [name, ".diagnostic"]}, No, (), - Layouts (fn ((), disp) => - (diagnosticWriter := SOME disp - ; result := SOME (thunk ()) - ; diagnosticWriter := NONE))) + {arg = (), + name = SOME name, + toFile = {display = display, style = No, suffix = "diagnostic"}, + verb = Pass} in valOf (!result) end @@ -346,51 +372,121 @@ end else thunk -fun pass {display: 'a display, - name: string, - suffix: string, - stats: 'a -> Layout.t, - style: style, - thunk: unit -> 'a}: 'a = +fun translatePass {arg: 'a, + doit: 'a -> 'b, + keepIL: bool, + name: string, + srcToFile: {display: 'a display, style: style, suffix: string} option, + tgtStats: ('b -> Layout.t) option, + tgtToFile: {display: 'b display, style: style, suffix: string} option, + tgtTypeCheck: ('b -> unit) option}: 'b = let + val thunk = fn () => doit arg val thunk = wrapDiagnosing {name = name, thunk = thunk} val thunk = wrapProfiling {name = name, thunk = thunk} - val result = trace (Pass, name) thunk () - val verb = Detail - val _ = message (verb, fn () => Layout.str (concat [name, " stats"])) - val _ = indent () - val _ = message (verb, fn () => sizeMessage (suffix, result)) - val _ = message (verb, fn () => stats result) - val _ = message (verb, PropertyList.stats) - val _ = message (verb, HashSet.stats) - val _ = unindent () - val _ = checkForErrors name - val _ = maybeSaveToFile ({name = name, suffix = suffix}, - style, result, display) + val thunk = fn () => + let + val () = + Option.app + (srcToFile, fn srcToFile => + maybeSaveToFile + {arg = arg, + name = name, + suffix = "pre", + toFile = srcToFile}) + val res = thunk () + val () = + Option.app + (tgtToFile, fn tgtToFile => + maybeSaveToFile + {arg = res, + name = name, + suffix = "post", + toFile = tgtToFile}) + val () = + if !ControlFlags.typeCheck + then Option.app (tgtTypeCheck, fn tgtTypeCheck => + trace (Pass, concat ["typeCheck ", name, ".post"]) + tgtTypeCheck res) + else () + local + val verb = Detail + in + val _ = message (verb, fn () => + Layout.str (concat [name, ".post stats"])) + val _ = indent () + val _ = Option.app (tgtStats, fn tgtStats => + message (verb, fn () => tgtStats res)) + val _ = message (verb, PropertyList.stats) + val _ = message (verb, HashSet.stats) + val _ = message (verb, fn () => + Layout.str (concat ["live data = ", + IntInf.toCommaString (MLton.sizeAll ()), + " bytes"])) + val _ = unindent () + end + in + res + end + val res = trace (Pass, name) thunk () + val () = + if keepIL + then Option.app (tgtToFile, fn tgtToFile => + saveToFile {arg = res, name = NONE, + toFile = tgtToFile, verb = Pass}) + else () + val () = + if List.exists (!stopPasses, fn re => + Regexp.Compiled.matchesAll (re, name)) + then raise Stopped + else () in - result + res end -fun passTypeCheck {display: 'a display, - name: string, - stats: 'a -> Layout.t, - style: style, - suffix: string, - thunk: unit -> 'a, - typeCheck = tc: 'a -> unit}: 'a = - let - val result = pass {display = display, - name = name, - stats = stats, - style = style, - suffix = suffix, - thunk = thunk} - val _ = - if !typeCheck - then trace (Pass, "typeCheck") tc result - else () - in - result - end +fun simplifyPass {arg: 'a, + doit: 'a -> 'a, + execute: bool, + keepIL: bool, + name: string, + stats: 'a -> Layout.t, + toFile: {display: 'a display, style: style, suffix: string}, + typeCheck: 'a -> unit}: 'a = + if List.foldr (!executePasses, execute, fn ((re, new), old) => + if Regexp.Compiled.matchesAll (re, name) then new else old) + then translatePass {arg = arg, + doit = doit, + keepIL = keepIL, + name = name, + srcToFile = SOME toFile, + tgtStats = SOME stats, + tgtToFile = SOME toFile, + tgtTypeCheck = SOME typeCheck} + else let + val _ = messageStr (Pass, name ^ " skipped") + val () = + if keepIL + then saveToFile {arg = arg, name = NONE, + toFile = toFile, verb = Pass} + else () + val () = + if List.exists (!stopPasses, fn re => + Regexp.Compiled.matchesAll (re, name)) + then raise Stopped + else () + in + arg + end +fun simplifyPasses {arg, passes, stats, toFile, typeCheck} = + List.fold + (passes, arg, fn ({doit, execute, name}, arg) => + simplifyPass {arg = arg, + doit = doit, + execute = execute, + keepIL = false, + name = name, + stats = stats, + toFile = toFile, + typeCheck = typeCheck}) end diff -Nru mlton-20130715/mlton/control/.gitignore mlton-20210117+dfsg/mlton/control/.gitignore --- mlton-20130715/mlton/control/.gitignore 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/.gitignore 2021-12-28 17:19:36.000000000 +0000 @@ -1 +1,2 @@ /version.sml +/version_sml.chk diff -Nru mlton-20130715/mlton/control/pretty.sig mlton-20210117+dfsg/mlton/control/pretty.sig --- mlton-20130715/mlton/control/pretty.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/pretty.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2003-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2003-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -20,7 +21,6 @@ try: t} -> t val lett: t * t -> t val locall: t * t -> t - val longid: t list * t -> t val primApp: {args: t vector, prim: t, targs: t vector} -> t diff -Nru mlton-20130715/mlton/control/pretty.sml mlton-20210117+dfsg/mlton/control/pretty.sml --- mlton-20130715/mlton/control/pretty.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/pretty.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -38,8 +39,6 @@ align [try, seq [str "handle ", catch, str " => ", handler]] -fun longid (ls, l) = seq (separate (ls @ [l], ".")) - fun nest (prefix, x, y) = align [seq [str prefix, x], str "in", diff -Nru mlton-20130715/mlton/control/region.sig mlton-20210117+dfsg/mlton/control/region.sig --- mlton-20130715/mlton/control/region.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/region.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/control/region.sml mlton-20210117+dfsg/mlton/control/region.sml --- mlton-20130715/mlton/control/region.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/region.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -31,10 +32,14 @@ | (T {left, ...}, right) => T {left = left, right = right} val toString = - fn Bogus => "Bogus" + fn Bogus => SourcePos.toString (SourcePos.bogus) | T {left, right} => - concat [SourcePos.file left, ":", - SourcePos.posToString left, "-", SourcePos.posToString right] + if SourcePos.isBogus left + orelse SourcePos.isBogus right + orelse not (SourcePos.fileEquals (left, right)) + then SourcePos.toString left + else concat [SourcePos.toString left, "-", + SourcePos.posToString right] val layout = Layout.str o toString diff -Nru mlton-20130715/mlton/control/scale.sml mlton-20210117+dfsg/mlton/control/scale.sml --- mlton-20130715/mlton/control/scale.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/scale.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,48 @@ +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature SCALE = + sig + datatype t = One | Two | Four | Eight + + val fromBytes: Bytes.t -> t option + val layout: t -> Layout.t + val toBytes: t -> Bytes.t + val toString: t -> string + end + +structure Scale: SCALE = +struct + +datatype t = One | Two | Four | Eight + +val toString = + fn One => "1" + | Two => "2" + | Four => "4" + | Eight => "8" + +val layout = Layout.str o toString + +val fromInt: int -> t option = + fn 1 => SOME One + | 2 => SOME Two + | 4 => SOME Four + | 8 => SOME Eight + | _ => NONE + +val fromBytes: Bytes.t -> t option = + fromInt o Bytes.toInt + +val toBytes: t -> Bytes.t = + fn One => Bytes.fromInt 1 + | Two => Bytes.fromInt 2 + | Four => Bytes.fromInt 4 + | Eight => Bytes.fromInt 8 + +end diff -Nru mlton-20130715/mlton/control/source-pos.sig mlton-20210117+dfsg/mlton/control/source-pos.sig --- mlton-20130715/mlton/control/source-pos.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/source-pos.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -22,6 +22,8 @@ val compare: t * t -> Relation.t val equals: t * t -> bool val file: t -> File.t + val fileEquals: t * t -> bool + val isBogus: t -> bool val line: t -> int val make: {column: int, file: File.t, diff -Nru mlton-20130715/mlton/control/source-pos.sml mlton-20210117+dfsg/mlton/control/source-pos.sml --- mlton-20130715/mlton/control/source-pos.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/source-pos.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -30,7 +31,9 @@ | r => r fun equals (T r, T r') = r = r' -val _ = equals + +fun fileEquals (T {file = f, ...}, T {file = f', ...}) = + String.equals (f, f') fun make {column, file, line} = T {column = column, @@ -59,10 +62,12 @@ file = "", line = ~1} -fun toString (p as T {column, line, ...}) = - concat [file p, " ", Int.toString line, ".", Int.toString column] +fun isBogus p = equals (p, bogus) fun posToString (T {line, column, ...}) = concat [Int.toString line, ".", Int.toString column] +fun toString p = + concat [file p, " ", posToString p] + end diff -Nru mlton-20130715/mlton/control/sources.cm mlton-20210117+dfsg/mlton/control/sources.cm --- mlton-20130715/mlton/control/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -1,37 +1,39 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group - -signature REGION +Library structure Bits structure Bytes structure Control structure Pretty structure Region +structure Scale structure Source structure SourcePos structure System structure Version +signature WRAPPED is ../../lib/mlton/sources.cm bits.sml +scale.sml control-flags.sig control-flags.sml source-pos.sig source-pos.sml region.sig region.sml +wrapped.sig source.sig source.sml version.sml diff -Nru mlton-20130715/mlton/control/source.sig mlton-20210117+dfsg/mlton/control/source.sig --- mlton-20130715/mlton/control/source.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/source.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -19,4 +19,5 @@ val lineStart: t -> SourcePos.t val new: File.t -> t val newline: t * int -> unit + val name: t -> string end diff -Nru mlton-20130715/mlton/control/source.sml mlton-20210117+dfsg/mlton/control/source.sml --- mlton-20130715/mlton/control/source.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/source.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2011 Matthew Fluet. +(* Copyright (C) 2011,2015 Matthew Fluet. * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -51,4 +51,6 @@ (Int.inc lineNum ; lineStart := n) +fun name (T {file, ...}) = !file + end diff -Nru mlton-20130715/mlton/control/sources.mlb mlton-20210117+dfsg/mlton/control/sources.mlb --- mlton-20130715/mlton/control/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -11,12 +11,14 @@ ../../lib/mlton/sources.mlb bits.sml + scale.sml control-flags.sig control-flags.sml source-pos.sig source-pos.sml region.sig region.sml + wrapped.sig source.sig source.sml version.sml @@ -32,8 +34,10 @@ structure Control structure Pretty structure Region + structure Scale structure Source structure SourcePos structure System structure Version + signature WRAPPED end diff -Nru mlton-20130715/mlton/control/system.sig mlton-20210117+dfsg/mlton/control/system.sig --- mlton-20130715/mlton/control/system.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/system.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/control/system.sml mlton-20210117+dfsg/mlton/control/system.sml --- mlton-20130715/mlton/control/system.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/system.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/control/version_sml.src mlton-20210117+dfsg/mlton/control/version_sml.src --- mlton-20130715/mlton/control/version_sml.src 2013-07-16 15:00:43.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/version_sml.src 2021-12-28 17:19:36.000000000 +0000 @@ -1,16 +1,13 @@ -(* Copyright (C) 2009,2013 Matthew Fluet. +(* Copyright (C) 2009,2013,2016,2018-2019 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) structure Version = struct - val version = "20130715" - val buildDate = "MLTONBUILDDATE" - val buildNode = "MLTONBUILDNODE" + val name = "MLTON_NAME" + val version = "MLTON_VERSION" - val banner = concat ["MLton ", version, - " (built ", buildDate, - " on ", buildNode, ")"] + val banner = concat [name, " ", version] end diff -Nru mlton-20130715/mlton/control/wrapped.sig mlton-20210117+dfsg/mlton/control/wrapped.sig --- mlton-20130715/mlton/control/wrapped.sig 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/control/wrapped.sig 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,19 @@ +(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +signature WRAPPED = + sig + type node' + type obj + + val dest: obj -> node' * Region.t + val makeRegion': node' * SourcePos.t * SourcePos.t -> obj + val makeRegion: node' * Region.t -> obj + val node: obj -> node' + val region: obj -> Region.t + end diff -Nru mlton-20130715/mlton/core-ml/core-ml.fun mlton-20210117+dfsg/mlton/core-ml/core-ml.fun --- mlton-20130715/mlton/core-ml/core-ml.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/core-ml/core-ml.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015,2017,2019 Matthew Fluet + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -43,9 +44,10 @@ | Const of unit -> Const.t | Layered of Var.t * t | List of t vector + | Or of t vector | Record of t Record.t - | Tuple of t vector | Var of Var.t + | Vector of t vector | Wild local @@ -74,12 +76,23 @@ | Layered (x, p) => seq [maybeConstrain (Var.layout x, t), str " as ", layout p] | List ps => list (Vector.toListMap (ps, layout)) + | Or ps => list (Vector.toListMap (ps, layout)) | Record r => - record (Vector.toListMap - (Record.toVector r, fn (f, p) => - (Field.toString f, layout p))) - | Tuple ps => tuple (Vector.toListMap (ps, layout)) + let + val extra = + Vector.exists + (Type.deRecord t, fn (f, _) => + Option.isNone (Record.peek (r, f))) + in + Record.layout + {extra = if extra then ", ..." else "", + layoutElt = layout, + layoutTuple = fn ps => tuple (Vector.toListMap (ps, layout)), + record = r, + separator = " = "} + end | Var x => maybeConstrain (Var.layout x, t) + | Vector ps => vector (Vector.map (ps, layout)) | Wild => str "_" end @@ -87,7 +100,10 @@ fun var (x, t) = make (Var x, t) - fun tuple ps = make (Tuple ps, Type.tuple (Vector.map (ps, ty))) + fun tuple ps = + if 1 = Vector.length ps + then Vector.first ps + else make (Record (Record.tuple ps), Type.tuple (Vector.map (ps, ty))) local fun bool c = make (Con {arg = NONE, con = c, targs = Vector.new0 ()}, @@ -99,7 +115,7 @@ fun isUnit (p: t): bool = case node p of - Tuple v => 0 = Vector.length v + Record r => Record.forall (r, fn _ => false) | _ => false fun isWild (p: t): bool = @@ -113,9 +129,10 @@ | Const _ => true | Layered (_, p) => isRefutable p | List _ => true + | Or ps => Vector.exists (ps, isRefutable) | Record r => Record.exists (r, isRefutable) - | Tuple ps => Vector.exists (ps, isRefutable) | Var _ => false + | Vector _ => true | Wild => false fun foreachVar (p: t, f: Var.t -> unit): unit = @@ -126,9 +143,10 @@ | Const _ => () | Layered (x, p) => (f x; loop p) | List ps => Vector.foreach (ps, loop) + | Or ps => Vector.foreach (ps, loop) | Record r => Record.foreach (r, loop) - | Tuple ps => Vector.foreach (ps, loop) | Var x => f x + | Vector ps => Vector.foreach (ps, loop) | Wild => () in loop p @@ -152,31 +170,34 @@ | Fun of {decs: {lambda: lambda, var: Var.t} vector, tyvars: unit -> Tyvar.t vector} - | Val of {nonexhaustiveExnMatch: Control.Elaborate.DiagDI.t, - nonexhaustiveMatch: Control.Elaborate.DiagEIW.t, + | Val of {matchDiags: {nonexhaustiveExn: Control.Elaborate.DiagDI.t, + nonexhaustive: Control.Elaborate.DiagEIW.t, + redundant: Control.Elaborate.DiagEIW.t}, rvbs: {lambda: lambda, var: Var.t} vector, tyvars: unit -> Tyvar.t vector, - vbs: {exp: exp, - lay: unit -> Layout.t, + vbs: {ctxt: unit -> Layout.t, + exp: exp, + layPat: unit -> Layout.t, nest: string list, pat: Pat.t, - patRegion: Region.t} vector} + regionPat: Region.t} vector} and exp = Exp of {node: expNode, ty: Type.t} and expNode = App of exp * exp - | Case of {kind: string, - lay: unit -> Layout.t, + | Case of {ctxt: unit -> Layout.t, + kind: string * string, nest: string list, + matchDiags: {nonexhaustiveExn: Control.Elaborate.DiagDI.t, + nonexhaustive: Control.Elaborate.DiagEIW.t, + redundant: Control.Elaborate.DiagEIW.t}, noMatch: noMatch, - nonexhaustiveExnMatch: Control.Elaborate.DiagDI.t, - nonexhaustiveMatch: Control.Elaborate.DiagEIW.t, - redundantMatch: Control.Elaborate.DiagEIW.t, region: Region.t, rules: {exp: exp, - lay: (unit -> Layout.t) option, - pat: Pat.t} vector, + layPat: (unit -> Layout.t) option, + pat: Pat.t, + regionPat: Region.t} vector, test: exp} | Con of Con.t * Type.t vector | Const of unit -> Const.t @@ -194,6 +215,7 @@ | Record of exp Record.t | Seq of exp vector | Var of (unit -> Var.t) * (unit -> Type.t vector) + | Vector of exp vector and lambda = Lam of {arg: Var.t, argType: Type.t, body: exp, @@ -285,8 +307,9 @@ Vector.layout Type.layout targs] end else Var.layout (var ()) + | Vector es => vector (Vector.map (es, layoutExp)) and layoutFuns (tyvars, decs) = - if 0 = Vector.length decs + if Vector.isEmpty decs then empty else align [seq [str "val rec", layoutTyvars (tyvars ())], @@ -371,10 +394,11 @@ | Record r => Record.exists (r, isExpansive) | Seq _ => true | Var _ => false + | Vector es => Vector.exists (es, isExpansive) fun tuple es = if 1 = Vector.length es - then Vector.sub (es, 0) + then Vector.first es else make (Record (Record.tuple es), Type.tuple (Vector.map (es, ty))) @@ -391,25 +415,27 @@ make (Lambda l, Type.arrow (argType, ty body)) fun casee (z as {rules, ...}) = - if 0 = Vector.length rules + if Vector.isEmpty rules then Error.bug "CoreML.Exp.casee" - else make (Case z, ty (#exp (Vector.sub (rules, 0)))) + else make (Case z, ty (#exp (Vector.first rules))) fun iff (test, thenCase, elseCase): t = - casee {kind = "if", - lay = fn () => Layout.empty, + casee {ctxt = fn () => Layout.empty, + kind = ("if", "branch"), nest = [], + matchDiags = {nonexhaustiveExn = Control.Elaborate.DiagDI.Default, + nonexhaustive = Control.Elaborate.DiagEIW.Ignore, + redundant = Control.Elaborate.DiagEIW.Ignore}, noMatch = Impossible, - nonexhaustiveExnMatch = Control.Elaborate.DiagDI.Default, - nonexhaustiveMatch = Control.Elaborate.DiagEIW.Ignore, - redundantMatch = Control.Elaborate.DiagEIW.Ignore, region = Region.bogus, rules = Vector.new2 ({exp = thenCase, - lay = NONE, - pat = Pat.truee}, + layPat = NONE, + pat = Pat.truee, + regionPat = Region.bogus}, {exp = elseCase, - lay = NONE, - pat = Pat.falsee}), + layPat = NONE, + pat = Pat.falsee, + regionPat = Region.bogus}), test = test} fun andAlso (e1, e2) = iff (e1, e2, falsee) @@ -461,6 +487,7 @@ | Record r => Record.foreach (r, loop) | Seq es => Vector.foreach (es, loop) | Var (x, _) => f (x ()) + | Vector es => Vector.foreach (es, loop) and loopDec d = case d of Datatype _ => () @@ -479,6 +506,74 @@ struct datatype t = datatype dec + fun dropProfile d = + let + fun loopExp e = + let + fun mk node = Exp.make (node, Exp.ty e) + in + case Exp.node e of + App (e1, e2) => mk (App (loopExp e1, loopExp e2)) + | Case {ctxt, kind, nest, matchDiags, noMatch, region, rules, test} => + mk (Case {ctxt = ctxt, + kind = kind, + nest = nest, + matchDiags = matchDiags, + noMatch = noMatch, + region = region, + rules = Vector.map (rules, fn {exp, layPat, pat, regionPat} => + {exp = loopExp exp, + layPat = layPat, + pat = pat, + regionPat = regionPat}), + test = loopExp test}) + | Con _ => e + | Const _ => e + | EnterLeave (exp, _) => loopExp exp + | Handle {catch, handler, try} => + mk (Handle {catch = catch, + handler = loopExp handler, + try = loopExp try}) + | Lambda lambda => mk (Lambda (loopLambda lambda)) + | Let (decs, exp) => mk (Let (Vector.map (decs, loopDec), loopExp exp)) + | List exps => mk (List (Vector.map (exps, loopExp))) + | PrimApp {args, prim, targs} => + mk (PrimApp {args = Vector.map (args, loopExp), + prim = prim, + targs = targs}) + | Raise exp => mk (Raise (loopExp exp)) + | Record r => mk (Record (Record.map (r, loopExp))) + | Seq exps => mk (Seq (Vector.map (exps, loopExp))) + | Var _ => e + | Vector exps => mk (Vector (Vector.map (exps, loopExp))) + end + and loopDec d = + case d of + Datatype _ => d + | Exception _ => d + | Fun {decs, tyvars} => + Fun {decs = Vector.map (decs, fn {lambda, var} => + {lambda = loopLambda lambda, + var = var}), + tyvars = tyvars} + | Val {matchDiags, rvbs, tyvars, vbs} => + Val {matchDiags = matchDiags, + rvbs = Vector.map (rvbs, fn {lambda, var} => + {lambda = loopLambda lambda, + var = var}), + tyvars = tyvars, + vbs = Vector.map (vbs, fn {ctxt, exp, layPat, nest, pat, regionPat} => + {ctxt = ctxt, + exp = loopExp exp, + layPat = layPat, + nest = nest, + pat = pat, + regionPat = regionPat})} + and loopLambda (Lam {arg, argType, body, mayInline}) = + Lam {arg = arg, argType = argType, body = loopExp body, mayInline = mayInline} + in + loopDec d + end val layout = layoutDec end @@ -486,6 +581,11 @@ struct datatype t = T of {decs: Dec.t vector} + + fun dropProfile (T {decs}) = + (Control.profile := Control.ProfileNone + ; T {decs = Vector.map (decs, Dec.dropProfile)}) + fun layouts (T {decs, ...}, output') = let open Layout @@ -494,10 +594,20 @@ *) val output = output' in - output (Layout.str "\n\nDecs:") + output (Layout.str "\n") ; Vector.foreach (decs, output o Dec.layout) end + val toFile = {display = Control.Layouts layouts, style = Control.ML, suffix = "core-ml"} + + fun layoutStats (program as T {...}) = + let + open Layout + in + align + [Control.sizeMessage ("coreML program", program)] + end + (* fun typeCheck (T {decs, ...}) = * let * fun checkExp (e: Exp.t): Ty.t = @@ -521,7 +631,7 @@ * end * | Case {rules, test} => * let - * val {pat, exp} = Vector.sub (rules, 0) + * val {pat, exp} = Vector.first rules * in * Vector.foreach (rules, fn {pat, exp} => * Type.equals diff -Nru mlton-20130715/mlton/core-ml/core-ml.sig mlton-20210117+dfsg/mlton/core-ml/core-ml.sig --- mlton-20130715/mlton/core-ml/core-ml.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/core-ml/core-ml.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015,2017,2019 Matthew Fluet + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -42,9 +43,10 @@ | Const of unit -> Const.t | Layered of Var.t * t | List of t vector + | Or of t vector | Record of t Record.t - | Tuple of t vector | Var of Var.t + | Vector of t vector | Wild val dest: t -> node * Type.t @@ -72,17 +74,18 @@ datatype noMatch = Impossible | RaiseAgain | RaiseBind | RaiseMatch datatype node = App of t * t - | Case of {kind: string, - lay: unit -> Layout.t, + | Case of {ctxt: unit -> Layout.t, + kind: string * string, nest: string list, + matchDiags: {nonexhaustiveExn: Control.Elaborate.DiagDI.t, + nonexhaustive: Control.Elaborate.DiagEIW.t, + redundant: Control.Elaborate.DiagEIW.t}, noMatch: noMatch, - nonexhaustiveExnMatch: Control.Elaborate.DiagDI.t, - nonexhaustiveMatch: Control.Elaborate.DiagEIW.t, - redundantMatch: Control.Elaborate.DiagEIW.t, region: Region.t, rules: {exp: t, - lay: (unit -> Layout.t) option, - pat: Pat.t} vector, + layPat: (unit -> Layout.t) option, + pat: Pat.t, + regionPat: Region.t} vector, test: t} | Con of Con.t * Type.t vector | Const of unit -> Const.t @@ -100,19 +103,21 @@ | Record of t Record.t | Seq of t vector | Var of (unit -> Var.t) * (unit -> Type.t vector) + | Vector of t vector val andAlso: t * t -> t - val casee: {kind: string, - lay: unit -> Layout.t, + val casee: {ctxt: unit -> Layout.t, + kind: string * string, nest: string list, + matchDiags: {nonexhaustiveExn: Control.Elaborate.DiagDI.t, + nonexhaustive: Control.Elaborate.DiagEIW.t, + redundant: Control.Elaborate.DiagEIW.t}, noMatch: noMatch, - nonexhaustiveExnMatch: Control.Elaborate.DiagDI.t, - nonexhaustiveMatch: Control.Elaborate.DiagEIW.t, - redundantMatch: Control.Elaborate.DiagEIW.t, region: Region.t, rules: {exp: t, - lay: (unit -> Layout.t) option, - pat: Pat.t} vector, + layPat: (unit -> Layout.t) option, + pat: Pat.t, + regionPat: Region.t} vector, test: t} -> t val dest: t -> node * Type.t val iff: t * t * t -> t @@ -162,16 +167,18 @@ | Fun of {decs: {lambda: Lambda.t, var: Var.t} vector, tyvars: unit -> Tyvar.t vector} - | Val of {nonexhaustiveExnMatch: Control.Elaborate.DiagDI.t, - nonexhaustiveMatch: Control.Elaborate.DiagEIW.t, + | Val of {matchDiags: {nonexhaustiveExn: Control.Elaborate.DiagDI.t, + nonexhaustive: Control.Elaborate.DiagEIW.t, + redundant: Control.Elaborate.DiagEIW.t}, rvbs: {lambda: Lambda.t, var: Var.t} vector, tyvars: unit -> Tyvar.t vector, - vbs: {exp: Exp.t, - lay: unit -> Layout.t, + vbs: {ctxt: unit -> Layout.t, + exp: Exp.t, + layPat: unit -> Layout.t, nest: string list, pat: Pat.t, - patRegion: Region.t} vector} + regionPat: Region.t} vector} val layout: t -> Layout.t end @@ -181,6 +188,9 @@ sig datatype t = T of {decs: Dec.t vector} + val dropProfile: t -> t val layouts: t * (Layout.t -> unit) -> unit + val layoutStats: t -> Layout.t + val toFile: {display: t Control.display, style: Control.style, suffix: string} end end diff -Nru mlton-20130715/mlton/core-ml/dead-code.fun mlton-20210117+dfsg/mlton/core-ml/dead-code.fun --- mlton-20130715/mlton/core-ml/dead-code.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/core-ml/dead-code.fun 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -31,7 +31,7 @@ 0 = Vector.length rvbs andalso 1 = Vector.length vbs andalso let - val pat = #pat (Vector.sub (vbs, 0)) + val pat = #pat (Vector.first vbs) in Pat.isWild pat orelse Pat.isUnit pat end diff -Nru mlton-20130715/mlton/core-ml/dead-code.sig mlton-20210117+dfsg/mlton/core-ml/dead-code.sig --- mlton-20130715/mlton/core-ml/dead-code.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/core-ml/dead-code.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/core-ml/sources.cm mlton-20210117+dfsg/mlton/core-ml/sources.cm --- mlton-20130715/mlton/core-ml/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/core-ml/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -2,11 +2,11 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library signature CORE_ML functor CoreML @@ -14,10 +14,10 @@ is +../../lib/mlton/sources.cm ../ast/sources.cm ../atoms/sources.cm ../control/sources.cm -../../lib/mlton/sources.cm core-ml.sig core-ml.fun diff -Nru mlton-20130715/mlton/core-ml/sources.mlb mlton-20210117+dfsg/mlton/core-ml/sources.mlb --- mlton-20130715/mlton/core-ml/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/core-ml/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,15 +2,14 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) local - ../ast/sources.mlb + ../../lib/mlton/sources.mlb ../atoms/sources.mlb ../control/sources.mlb - ../../lib/mlton/sources.mlb core-ml.sig core-ml.fun diff -Nru mlton-20130715/mlton/defunctorize/defunctorize.fun mlton-20210117+dfsg/mlton/defunctorize/defunctorize.fun --- mlton-20130715/mlton/defunctorize/defunctorize.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/defunctorize/defunctorize.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015,2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -22,6 +23,7 @@ structure Prim = Prim structure RealSize = RealSize structure Record = Record + structure SortedRecord = SortedRecord structure SourceInfo = SourceInfo structure Ctype = Type structure WordSize = WordSize @@ -50,37 +52,30 @@ structure NestedPat = NestedPat (open Xml) structure MatchCompile = - MatchCompile (open CoreML + MatchCompile (open Xml structure Type = Xtype structure NestedPat = NestedPat - structure Cases = + structure Exp = struct - type exp = Xexp.t - - open Xcases - type t = exp t - val word = Word - fun con v = - Con (Vector.map - (v, fn {con, targs, arg, rhs} => - (Xpat.T {con = con, - targs = targs, - arg = arg}, - rhs))) - end - structure Exp = - struct - open Xexp - val lett = let1 - val var = monoVar - - fun detuple {tuple, body} = - Xexp.detuple - {tuple = tuple, - body = fn xts => body (Vector.map - (xts, fn (x, t) => - (XvarExp.var x, t)))} - end) + open Xexp + val lett = let1 + val var = monoVar + + fun detuple {tuple, body} = + Xexp.detuple + {tuple = tuple, + body = fn xts => body (Vector.map + (xts, fn (x, t) => + (XvarExp.var x, t)))} + + fun devector {vector, length, body} = + Xexp.devector + {vector = vector, + length = length, + body = fn xts => body (Vector.map + (xts, fn (x, t) => + (XvarExp.var x, t)))} + end) structure Xexp = struct @@ -101,30 +96,47 @@ fun enterLeave (e: Xexp.t, t, si): Xexp.t = Xexp.fromExp (Xml.Exp.enterLeave (Xexp.toExp e, t, si), t) -val diagnostics: (unit -> unit) list ref = ref [] +local +val matchDiagnostics: (unit -> unit) list ref = ref [] +in +fun addMatchDiagnostic (diag, mkArg) = + case diag of + Control.Elaborate.DiagEIW.Error => + List.push (matchDiagnostics, Control.error o mkArg) + | Control.Elaborate.DiagEIW.Ignore => () + | Control.Elaborate.DiagEIW.Warn => + List.push (matchDiagnostics, Control.warning o mkArg) +fun showMatchDiagnostics () = List.foreach (!matchDiagnostics, fn th => th ()) +end -fun casee {caseType: Xtype.t, +fun casee {ctxt: unit -> Layout.t, + caseType: Xtype.t, cases: {exp: Xexp.t, - lay: (unit -> Layout.t) option, - pat: NestedPat.t} vector, + layPat: (unit -> Layout.t) option, + pat: NestedPat.t, + regionPat: Region.t} vector, conTycon, - kind: string, - lay: unit -> Layout.t, + kind: (string * string), nest: string list, + matchDiags: {nonexhaustiveExn: Control.Elaborate.DiagDI.t, + nonexhaustive: Control.Elaborate.DiagEIW.t, + redundant: Control.Elaborate.DiagEIW.t}, noMatch, - nonexhaustiveExnMatch: Control.Elaborate.DiagDI.t, - nonexhaustiveMatch: Control.Elaborate.DiagEIW.t, - redundantMatch: Control.Elaborate.DiagEIW.t, region: Region.t, test = (test: Xexp.t, testType: Xtype.t), tyconCons}: Xexp.t = let - val cases = Vector.map (cases, fn {exp, lay, pat} => + val nonexhaustiveExnDiag = #nonexhaustiveExn matchDiags + val nonexhaustiveDiag = #nonexhaustive matchDiags + val redundantDiag = #redundant matchDiags + val cases = Vector.map (cases, fn {exp, layPat, pat, regionPat} => {exp = fn () => exp, isDefault = false, - lay = lay, + layPat = layPat, + numPats = ref 0, numUses = ref 0, - pat = pat}) + pat = pat, + regionPat = regionPat}) fun raiseExn (f, mayWrap) = let val e = Var.newNoname () @@ -152,9 +164,11 @@ [cases, Vector.new1 {exp = exp, isDefault = true, - lay = NONE, + layPat = NONE, + numPats = ref 0, numUses = ref 0, - pat = NestedPat.make (NestedPat.Var e, testType)}] + pat = NestedPat.make (NestedPat.Var e, testType), + regionPat = Region.bogus}] end val cases = let @@ -167,14 +181,13 @@ | RaiseBind => raiseExn (fn _ => Xexp.bind, SOME "Bind") | RaiseMatch => raiseExn (fn _ => Xexp.match, SOME "Match") end - val examples = ref (fn () => Vector.new0 ()) fun matchCompile () = let val testVar = Var.newNoname () val decs = ref [] val cases = Vector.map - (cases, fn {exp = e, numUses, pat = p, ...} => + (cases, fn {exp = e, numPats, numUses, pat = p, ...} => let val args = Vector.fromList (NestedPat.varsAndTypes p) val (vars, tys) = Vector.unzip args @@ -197,157 +210,161 @@ components = vars, body = e ()})), mayInline = true})} - fun finish rename = - (if 0 = !numUses then List.push (decs, dec ()) else () - ; Int.inc numUses - ; (Xexp.app - {func = Xexp.monoVar (func, funcType), - arg = - Xexp.tuple {exps = (Vector.map - (args, fn (x, t) => - Xexp.monoVar (rename x, t))), - ty = argType}, - ty = caseType})) + fun finish np = + (numPats := np + ; fn rename => + (if 0 = !numUses then List.push (decs, dec ()) else () + ; Int.inc numUses + ; (Xexp.app + {func = Xexp.monoVar (func, funcType), + arg = + Xexp.tuple {exps = (Vector.map + (args, fn (x, t) => + Xexp.monoVar (rename x, t))), + ty = argType}, + ty = caseType}))) in (p, finish) end) - val (body, es) = + val (body, nonexhaustiveExamples) = MatchCompile.matchCompile {caseType = caseType, cases = cases, conTycon = conTycon, - region = region, test = testVar, testType = testType, tyconCons = tyconCons} (* Must convert to a normal expression to force everything. *) val body = Xexp.toExp body - val () = examples := es + val nonexhaustiveExamples = + if noMatch = Cexp.Impossible + then NONE + else let + val dropOnlyExns = + case nonexhaustiveExnDiag of + Control.Elaborate.DiagDI.Default => + {dropOnlyExns = false} + | Control.Elaborate.DiagDI.Ignore => + {dropOnlyExns = true} + in + nonexhaustiveExamples dropOnlyExns + end in - Xexp.let1 {var = testVar, - exp = test, - body = Xexp.lett {decs = !decs, - body = Xexp.fromExp (body, caseType)}} + (Xexp.let1 {var = testVar, + exp = test, + body = Xexp.lett {decs = !decs, + body = Xexp.fromExp (body, caseType)}}, + nonexhaustiveExamples) end datatype z = datatype NestedPat.node fun lett (x, e) = Xexp.let1 {var = x, exp = test, body = e} fun wild e = lett (Var.newNoname (), e) - val exp = + val (exp, nonexhaustiveExamples) = if Vector.isEmpty cases then Error.bug "Defunctorize.casee: case with no patterns" else let - val {exp = e, pat = p, numUses, ...} = Vector.sub (cases, 0) - fun use () = Int.inc numUses + val {exp = e, pat = p, numPats, numUses, ...} = Vector.first cases + fun use () = (numPats := 1; numUses := 1) + fun exhaustive exp = (exp, NONE) + fun loop p = + case NestedPat.node p of + Wild => (use (); exhaustive (wild (e ()))) + | Var x => (use (); exhaustive (lett (x, e ()))) + | Record rps => + let + val ps = SortedRecord.range rps + fun doitRecord () = + (* It's a flat record pattern. + * Generate the selects. + *) + let + val _ = use () + val t = Var.newNoname () + val tuple = XvarExp.mono t + val tys = Xtype.deTuple testType + val (_, decs) = + Vector.fold2 + (ps, tys, (0, []), + fn (p, ty, (i, decs)) => + case NestedPat.node p of + Var x => + (i + 1, + Xdec.MonoVal + {var = x, + ty = ty, + exp = (XprimExp.Select + {tuple = tuple, + offset = i})} + :: decs) + | Wild => (i + 1, decs) + | _ => Error.bug "Defunctorize.casee: flat record") + in + exhaustive (Xexp.let1 + {var = t, exp = test, + body = Xexp.lett + {decs = decs, + body = e ()}}) + end + in + if Vector.forall (ps, NestedPat.isVarOrWild) + then if Vector.length ps = 1 + then loop (Vector.first ps) + else doitRecord () + else matchCompile () + end + | _ => matchCompile () in - case NestedPat.node p of - Wild => (use (); wild (e ())) - | Var x => (use (); lett (x, e ())) - | Tuple ps => - if Vector.forall (ps, NestedPat.isVar) - then - (* It's a flat tuple pattern. - * Generate the selects. - *) - let - val _ = use () - val t = Var.newNoname () - val tuple = XvarExp.mono t - val tys = Xtype.deTuple testType - val (_, decs) = - Vector.fold2 - (ps, tys, (0, []), - fn (p, ty, (i, decs)) => - case NestedPat.node p of - Var x => - (i + 1, - Xdec.MonoVal - {var = x, - ty = ty, - exp = (XprimExp.Select - {tuple = tuple, - offset = i})} - :: decs) - | _ => Error.bug "Defunctorize.casee: infer flat tuple") - in - Xexp.let1 {var = t, exp = test, - body = Xexp.lett {decs = decs, - body = e ()}} - end - else matchCompile () - | _ => matchCompile () + loop p end - fun diagnoseNonexhaustiveMatch () = - if noMatch = Cexp.RaiseAgain - then () - else - case Vector.peeki (cases, - fn (_, {isDefault, numUses, ...}) => - isDefault andalso !numUses > 0) of - NONE => () - | SOME (i, _) => - let - val es = Vector.sub (!examples (), i) - val es = - case nonexhaustiveExnMatch of - Control.Elaborate.DiagDI.Default => - Vector.map (es, #1) - | Control.Elaborate.DiagDI.Ignore => - Vector.keepAllMap - (es, fn (e, {isOnlyExns}) => - if isOnlyExns - then NONE - else SOME e) - - open Layout - in - if 0 = Vector.length es - then () - else - (if nonexhaustiveMatch = Control.Elaborate.DiagEIW.Error - then Control.error - else Control.warning) - (region, - str (concat [kind, " is not exhaustive"]), - align [seq [str "missing pattern: ", - Layout.alignPrefix - (Vector.toList es, "| ")], - lay ()]) - end - fun diagnoseRedundantMatch () = - let - val redundant = - Vector.keepAll (cases, fn {isDefault, numUses, ...} => - not isDefault andalso !numUses = 0) - in - if 0 = Vector.length redundant - then () - else - let - open Layout - in - (if redundantMatch = Control.Elaborate.DiagEIW.Error - then Control.error - else Control.warning) - (region, - str (concat [kind, " has redundant rules"]), - align - [seq [str "rules: ", - align (Vector.toListMap - (redundant, fn {lay, ...} => - case lay of - NONE => Error.bug "Defunctorize.casee: redundant match with no lay" - | SOME l => l ()))], - lay ()]) - end - end + (* diagnoseRedundant *) + val _ = + Vector.foreachr + (cases, fn {isDefault, layPat = layPat, + numPats, numUses, regionPat = regionPat, ...} => + let + fun doit (msg1, msg2) = + let + open Layout + in + addMatchDiagnostic + (redundantDiag, + fn () => + (regionPat, + str (concat [#1 kind, msg1]), + align [seq [str (concat [msg2, ": "]), + case layPat of + NONE => Error.bug "Defunctorize.casee: redundant match with no lay" + | SOME layPat => layPat ()], + ctxt ()])) + end + in + if not isDefault andalso !numUses = 0 + then ((* Rule with no uses; fully redundant. *) + doit (" has redundant " ^ #2 kind, + "redundant pattern")) + else if not isDefault andalso !numUses > 0 andalso !numUses < !numPats + then ((* Rule with some uses but fewer uses than pats; partially redundant. *) + doit (" has " ^ #2 kind ^ " with redundancy", + "pattern with redundancy")) + else () + end) + (* diagnoseNonexhaustive *) + val _ = + Option.app + (nonexhaustiveExamples, fn es => + let + open Layout + in + addMatchDiagnostic + (nonexhaustiveDiag, + fn () => + (region, + str (concat [#1 kind, " is not exhaustive"]), + align [seq [str "missing pattern: ", es], + ctxt ()])) + end) in - if redundantMatch <> Control.Elaborate.DiagEIW.Ignore - then List.push (diagnostics, diagnoseRedundantMatch) - else () - ; if nonexhaustiveMatch <> Control.Elaborate.DiagEIW.Ignore - then List.push (diagnostics, diagnoseNonexhaustiveMatch) - else () - ; exp + exp end val casee = @@ -380,7 +397,7 @@ : Xexp.t = let val targs = #2 (valOf (Xtype.deConOpt ty)) - val eltTy = Vector.sub (targs, 0) + val eltTy = Vector.first targs val nill: Xexp.t = Xexp.conApp {arg = NONE, con = Con.nill, @@ -543,9 +560,7 @@ (* Process all the datatypes. *) fun loopDec (d: Cdec.t) = let -(* Use open Cdec instead of the following due to an SML/NJ bug *) -(* datatype z = datatype Cdec.t *) - open Cdec + datatype z = datatype Cdec.t in case d of Datatype dbs => @@ -651,6 +666,7 @@ | Record r => Record.foreach (r, loopExp) | Seq es => Vector.foreach (es, loopExp) | Var _ => () + | Vector es => Vector.foreach (es, loopExp) end and loopLambda (l: Clambda.t): unit = loopExp (#body (Clambda.dest l)) @@ -689,14 +705,17 @@ targs = targs}) end | Record r => - NestedPat.Tuple - (Vector.map - (Ctype.deRecord t, fn (f, t: Ctype.t) => - case Record.peek (r, f) of - NONE => NestedPat.make (NestedPat.Wild, loopTy t) - | SOME p => loopPat p)) - | Tuple ps => NestedPat.Tuple (Vector.map (ps, loopPat)) + NestedPat.Record + (SortedRecord.fromVector + (Vector.map + (Ctype.deRecord t, fn (f, t: Ctype.t) => + (f, + case Record.peek (r, f) of + NONE => NestedPat.make (NestedPat.Wild, loopTy t) + | SOME p => loopPat p)))) + | Or ps => NestedPat.Or (Vector.map (ps, loopPat)) | Var x => NestedPat.Var x + | Vector ps => NestedPat.Vector (Vector.map (ps, loopPat)) | Wild => NestedPat.Wild in NestedPat.make (p, t') @@ -709,7 +728,7 @@ Xexp.lett {decs = [d], body = e} fun processLambdas v = Vector.map - (v, fn {lambda, var} => + (Vector.rev v, fn {lambda, var} => let val {arg, argType, body, bodyType, mayInline} = loopLambda lambda @@ -721,9 +740,7 @@ ty = Xtype.arrow (argType, bodyType), var = var} end) -(* Use open Cdec instead of the following due to an SML/NJ bug *) -(* datatype z = datatype Cdec.t *) - open Cdec + datatype z = datatype Cdec.t in case d of Datatype _ => e @@ -733,34 +750,35 @@ | Fun {decs, tyvars} => prefix (Xdec.Fun {decs = processLambdas decs, tyvars = tyvars ()}) - | Val {nonexhaustiveExnMatch, nonexhaustiveMatch, rvbs, tyvars, vbs} => + | Val {matchDiags, rvbs, tyvars, vbs} => let val tyvars = tyvars () val bodyType = et val e = Vector.foldr - (vbs, e, fn ({exp, lay, nest, pat, patRegion}, e) => + (vbs, e, fn ({ctxt, exp, layPat, nest, pat, regionPat}, e) => let fun patDec (p: NestedPat.t, e: Xexp.t, body: Xexp.t, bodyType: Xtype.t, mayWarn: bool) = - casee {caseType = bodyType, + casee {ctxt = ctxt, + caseType = bodyType, cases = Vector.new1 {exp = body, - lay = SOME lay, - pat = p}, + layPat = SOME layPat, + pat = p, + regionPat = regionPat}, conTycon = conTycon, - kind = "declaration", - lay = lay, + kind = ("declaration", "pattern"), nest = nest, + matchDiags = if mayWarn + then matchDiags + else {nonexhaustiveExn = Control.Elaborate.DiagDI.Default, + nonexhaustive = Control.Elaborate.DiagEIW.Ignore, + redundant = Control.Elaborate.DiagEIW.Ignore}, noMatch = Cexp.RaiseBind, - nonexhaustiveExnMatch = nonexhaustiveExnMatch, - nonexhaustiveMatch = if mayWarn - then nonexhaustiveMatch - else Control.Elaborate.DiagEIW.Ignore, - redundantMatch = Control.Elaborate.DiagEIW.Ignore, - region = patRegion, + region = regionPat, test = (e, NestedPat.ty p), tyconCons = tyconCons} val isExpansive = Cexp.isExpansive exp @@ -768,55 +786,50 @@ val pat = loopPat pat fun vd (x: Var.t) = valDec (tyvars, x, exp, expType, e) in - if Vector.isEmpty tyvars orelse isExpansive + if Vector.isEmpty tyvars + then patDec (pat, exp, e, bodyType, true) + else if isExpansive then let - val (pat, exp) = - if Vector.isEmpty tyvars - then (pat, exp) - else - let - val x = Var.newNoname () - val thunk = - let - open Xexp - in - toExp - (lambda - {arg = Var.newNoname (), - argType = Xtype.unit, - body = exp, - bodyType = expType, - mayInline = true}) - end - val thunkTy = - Xtype.arrow (Xtype.unit, expType) - fun subst t = - Xtype.substitute - (t, Vector.map (tyvars, fn a => - (a, Xtype.unit))) - val body = - Xexp.app - {arg = Xexp.unit (), - func = - Xexp.var - {targs = (Vector.map - (tyvars, fn _ => - Xtype.unit)), - ty = subst thunkTy, - var = x}, - ty = subst expType} - val decs = - [Xdec.PolyVal {exp = thunk, - ty = thunkTy, - tyvars = tyvars, - var = x}] - in - (NestedPat.replaceTypes (pat, subst), - Xexp.lett {body = body, decs = decs}) - end + val x = Var.newNoname () + val thunk = + let + open Xexp + in + toExp + (lambda + {arg = Var.newNoname (), + argType = Xtype.unit, + body = exp, + bodyType = expType, + mayInline = true}) + end + val thunkTy = + Xtype.arrow (Xtype.unit, expType) + fun subst t = + Xtype.substitute + (t, Vector.map (tyvars, fn a => + (a, Xtype.unit))) + val body = + Xexp.app + {arg = Xexp.unit (), + func = + Xexp.var + {targs = (Vector.map + (tyvars, fn _ => + Xtype.unit)), + ty = subst thunkTy, + var = x}, + ty = subst expType} + val decs = + [Xdec.PolyVal {exp = thunk, + ty = thunkTy, + tyvars = tyvars, + var = x}] in - patDec (pat, exp, e, bodyType, true) + patDec (NestedPat.replaceTypes (pat, subst), + Xexp.lett {body = body, decs = decs}, + e, bodyType, true) end else case NestedPat.node pat of @@ -827,7 +840,7 @@ * val 'a Foo (y1, y2) = e * Expands to * val 'a x = e - * val Foo _ = x + * val Foo (_, _) = x (* for match warnings *) * val 'a y1 = case x of Foo (y1', _) => y1' * val 'a y2 = case x of Foo (_, y2') => y2' *) @@ -903,7 +916,7 @@ end end) in - if 0 = Vector.length rvbs + if Vector.isEmpty rvbs then e else Xexp.lett {decs = [Xdec.Fun {decs = processLambdas rvbs, @@ -923,7 +936,7 @@ fun conApp {arg, con, targs, ty} = if Con.equals (con, Con.reff) then Xexp.primApp {args = Vector.new1 arg, - prim = Prim.reff, + prim = Prim.Ref_ref, targs = targs, ty = ty} else Xexp.conApp {arg = SOME arg, @@ -948,22 +961,19 @@ func = #1 (loopExp e1), ty = ty} end - | Case {kind, lay, nest, noMatch, - nonexhaustiveExnMatch, nonexhaustiveMatch, redundantMatch, - region, rules, test, ...} => - casee {caseType = ty, - cases = Vector.map (rules, fn {exp, lay, pat} => + | Case {ctxt, kind, nest, matchDiags, noMatch, region, rules, test, ...} => + casee {ctxt = ctxt, + caseType = ty, + cases = Vector.map (rules, fn {exp, layPat, pat, regionPat} => {exp = #1 (loopExp exp), - lay = lay, - pat = loopPat pat}), + layPat = layPat, + pat = loopPat pat, + regionPat = regionPat}), conTycon = conTycon, kind = kind, - lay = lay, nest = nest, + matchDiags = matchDiags, noMatch = noMatch, - nonexhaustiveExnMatch = nonexhaustiveExnMatch, - nonexhaustiveMatch = nonexhaustiveMatch, - redundantMatch = redundantMatch, region = region, test = loopExp test, tyconCons = tyconCons} @@ -1035,17 +1045,16 @@ | PrimApp {args, prim, targs} => let val args = Vector.map (args, #1 o loopExp) - datatype z = datatype Prim.Name.t in - if (case Prim.name prim of - Real_rndToReal (s1, s2) => + if (case prim of + Prim.Real_rndToReal (s1, s2) => RealSize.equals (s1, s2) - | String_toWord8Vector => true - | Word_extdToWord (s1, s2, _) => + | Prim.String_toWord8Vector => true + | Prim.Word_extdToWord (s1, s2, _) => WordSize.equals (s1, s2) - | Word8Vector_toString => true + | Prim.Word8Vector_toString => true | _ => false) - then Vector.sub (args, 0) + then Vector.first args else Xexp.primApp {args = args, prim = Prim.map (prim, loopTy), @@ -1074,6 +1083,11 @@ Xexp.var {targs = Vector.map (targs (), loopTy), ty = ty, var = var ()} + | Vector es => + Xexp.primApp {args = Vector.map (es, #1 o loopExp), + prim = Prim.Vector_vector, + targs = Vector.new1 (Xtype.deVector ty), + ty = ty} in (exp, ty) end @@ -1089,12 +1103,11 @@ mayInline = mayInline} end val body = Xexp.toExp (loopDecs (decs, (Xexp.unit (), Xtype.unit))) - val _ = List.foreach (!diagnostics, fn f => f ()) + val _ = showMatchDiagnostics () val _ = (destroy1 (); destroy2 (); destroy3 ()) in Xml.Program.T {body = body, - datatypes = Vector.fromList (!datatypes), - overflow = NONE} + datatypes = Vector.fromList (!datatypes)} end end diff -Nru mlton-20130715/mlton/defunctorize/defunctorize.sig mlton-20210117+dfsg/mlton/defunctorize/defunctorize.sig --- mlton-20130715/mlton/defunctorize/defunctorize.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/defunctorize/defunctorize.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2003-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/defunctorize/sources.cm mlton-20210117+dfsg/mlton/defunctorize/sources.cm --- mlton-20130715/mlton/defunctorize/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/defunctorize/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -2,11 +2,11 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library functor Defunctorize diff -Nru mlton-20130715/mlton/defunctorize/sources.mlb mlton-20210117+dfsg/mlton/defunctorize/sources.mlb --- mlton-20130715/mlton/defunctorize/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/defunctorize/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/elaborate/decs.fun mlton-20210117+dfsg/mlton/elaborate/decs.fun --- mlton-20130715/mlton/elaborate/decs.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/decs.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/elaborate/decs.sig mlton-20210117+dfsg/mlton/elaborate/decs.sig --- mlton-20130715/mlton/elaborate/decs.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/decs.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/elaborate/elaborate-core.fun mlton-20210117+dfsg/mlton/elaborate/elaborate-core.fun --- mlton-20130715/mlton/elaborate/elaborate-core.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-core.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009-2012 Matthew Fluet. +(* Copyright (C) 2009-2012,2015,2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,18 +15,72 @@ local open Control.Elaborate in - val allowRebindEquals = fn () => current allowRebindEquals + val nonexhaustiveBind = fn () => current nonexhaustiveBind + val nonexhaustiveExnBind = fn () => current nonexhaustiveExnBind val nonexhaustiveExnMatch = fn () => current nonexhaustiveExnMatch + val nonexhaustiveExnRaise = fn () => current nonexhaustiveExnRaise val nonexhaustiveMatch = fn () => current nonexhaustiveMatch + val nonexhaustiveRaise = fn () => current nonexhaustiveRaise + val redundantBind = fn () => current redundantBind val redundantMatch = fn () => current redundantMatch + val redundantRaise = fn () => current redundantRaise val resolveScope = fn () => current resolveScope val sequenceNonUnit = fn () => current sequenceNonUnit + val valrecConstr = fn () => current valrecConstr + fun check (c: (bool,bool) t, keyword: string, region) = + if current c + then () + else + let + open Layout + in + Control.error + (region, + str (concat (if expert c + then [keyword, " disallowed"] + else [keyword, " disallowed, compile with -default-ann '", + name c, " true'"])), + empty) + end +end +structure ElabControl = Control.Elaborate + + +local + open Layout +in + val align = align + val empty = empty + val seq = seq + val str = str end +fun approximateN (l: Layout.t, prefixMax, suffixMax): Layout.t = + let + val s = Layout.toString l + val n = String.size s + in + str + (case suffixMax of + NONE => + if n <= prefixMax + then s + else concat [String.prefix (s, prefixMax - 5), " ..."] + | SOME suffixMax => + if n <= prefixMax + suffixMax + then s + else concat [String.prefix (s, prefixMax - 2), + " ... ", + String.suffix (s, suffixMax - 5)]) + end +fun approximate (l: Layout.t): Layout.t = + approximateN (l, 35, SOME 25) +fun approximatePrefix (l: Layout.t): Layout.t = + approximateN (l, 15, NONE) + local open Ast in - structure Acon = Con structure Aconst = Const structure Adec = Dec structure Aexp = Exp @@ -39,8 +93,8 @@ structure DatBind = DatBind structure EbRhs = EbRhs structure Fixop = Fixop - structure Longvid = Longvid structure Longtycon = Longtycon + structure Longvid = Longvid structure PrimKind = PrimKind structure ImportExportAttribute = PrimKind.ImportExportAttribute structure SymbolAttribute = PrimKind.SymbolAttribute @@ -54,18 +108,14 @@ local open Env in + structure Kind = Kind structure TypeEnv = TypeEnv structure TypeStr = TypeStr + structure TyvarEnv = TyvarEnv structure Vid = Vid end local - open TypeStr -in - structure Kind = Kind -end - -local open TypeEnv in structure Scheme = Scheme @@ -77,13 +127,14 @@ open CoreML in structure CFunction = CFunction + structure CKind = CFunction.Kind + structure CSymbol = CSymbol + structure SymbolScope = CSymbolScope structure CType = CType structure CharSize = CharSize - structure Convention = CFunction.Convention - structure SymbolScope = CFunction.SymbolScope structure Con = Con structure Const = Const - structure ConstType = Const.ConstType + structure Convention = CFunction.Convention structure Cdec = Dec structure Cexp = Exp structure Ffi = Ffi @@ -101,6 +152,35 @@ structure WordX = WordX structure WordXVector = WordXVector end +structure Tycon = + struct + open Tycon + open TypeEnv.TyconExt + end +structure Tyvar = + struct + open Tyvar + open TypeEnv.TyvarExt + end + +fun matchDiagsFromNoMatch noMatch = + case noMatch of + Cexp.Impossible => + {nonexhaustiveExn = Control.Elaborate.DiagDI.Default, + nonexhaustive = Control.Elaborate.DiagEIW.Ignore, + redundant = Control.Elaborate.DiagEIW.Ignore} + | Cexp.RaiseAgain => + {nonexhaustiveExn = nonexhaustiveExnRaise (), + nonexhaustive = nonexhaustiveRaise (), + redundant = redundantRaise ()} + | Cexp.RaiseBind => + {nonexhaustiveExn = nonexhaustiveExnBind (), + nonexhaustive = nonexhaustiveBind (), + redundant = redundantBind ()} + | Cexp.RaiseMatch => + {nonexhaustiveExn = nonexhaustiveExnMatch (), + nonexhaustive = nonexhaustiveMatch (), + redundant = redundantMatch ()} structure AdmitsEquality = Tycon.AdmitsEquality @@ -125,7 +205,7 @@ | Constraint (p, _) => getName p | FlatApp v => if 1 = Vector.length v - then getName (Vector.sub (v, 0)) + then getName (Vector.first v) else NONE | Layered {var, ...} => SOME (Avar.toString var) | _ => NONE @@ -135,53 +215,88 @@ getName end -structure Lookup = - struct - type t = Longtycon.t -> TypeStr.t option - - fun fromEnv (E: Env.t) longtycon = Env.lookupLongtycon (E, longtycon) - end - -fun elaborateType (ty: Atype.t, lookup: Lookup.t): Type.t = +fun elaborateType (ty: Atype.t, E: Env.t, + {bogusAsUnknown: bool}): Type.t = let + fun makeBogus (mc, ts) = + if bogusAsUnknown + then Type.new () + else let + val arity = Vector.length ts + val (name, region) = + Option.fold + (mc, ("t", NONE), fn (c, _) => + (Longtycon.toString c, + SOME (Longtycon.region c))) + val c = + Tycon.makeBogus + {name = name, + kind = Kind.Arity arity, + region = region} + in + Type.con (c, ts) + end fun loop (ty: Atype.t): Type.t = case Atype.node ty of Atype.Var a => (* rule 44 *) - Type.var a + (case TyvarEnv.lookupTyvar a of + NONE => makeBogus (NONE, Vector.new0 ()) + | SOME a => Type.var a) | Atype.Con (c, ts) => (* rules 46, 47 *) let val ts = Vector.map (ts, loop) fun normal () = - case lookup c of - NONE => Type.new () + case Env.lookupLongtycon (E, c) of + NONE => makeBogus (SOME c, ts) | SOME s => let val kind = TypeStr.kind s val numArgs = Vector.length ts + val ts = + case kind of + Kind.Arity n => + let + fun error () = + let + open Layout + fun doit n = + seq [str "[", + case n of + 0 => empty + | 1 => str "_" + | _ => seq [str "(", + (seq o separate) + (List.tabulate (n, fn _ => str "_"), + ", "), + str ")"], + str "] ", + Ast.Longtycon.layout c] + in + Control.error + (Atype.region ty, + seq [str "type constructor applied to incorrect number of type arguments: ", + Ast.Longtycon.layout c], + align [seq [str "expects: ", doit n], + seq [str "but got: ", doit numArgs], + seq [str "in: ", Atype.layout ty]]) + end + in + case Int.compare (n, numArgs) of + LESS => + (error (); Vector.prefix (ts, n)) + | EQUAL => ts + | GREATER => + (error () + ; Vector.concat + [ts, + Vector.tabulate + (n - numArgs, fn _ => + makeBogus + (NONE, Vector.new0 ()))]) + end + | Kind.Nary => ts in - if (case kind of - Kind.Arity n => n = numArgs - | Kind.Nary => true) - then TypeStr.apply (s, ts) - else - let - open Layout - val _ = - Control.error - (Atype.region ty, - seq [str "type ", - Ast.Longtycon.layout c, - str " given ", - Int.layout numArgs, - str (if numArgs = 1 - then " argument" - else " arguments"), - str " but wants ", - Kind.layout kind], - empty) - in - Type.new () - end + TypeStr.apply (s, ts) end in case (Ast.Longtycon.split c, Vector.length ts) of @@ -192,8 +307,13 @@ else normal () | _ => normal () end + | Atype.Paren t => loop t | Atype.Record r => (* rules 45, 49 *) - Type.record (SortedRecord.map (r, loop)) + Type.record + (SortedRecord.fromVector + (Vector.map + (Record.toVector r, + fn (f, (_, t)) => (f, loop t)))) in loop ty end @@ -237,31 +357,15 @@ typeTycon fun 'a elabConst (c: Aconst.t, + {layoutPrettyType: Type.t -> Layout.t}, make: (unit -> Const.t) * Type.t -> 'a, {false = f: 'a, true = t: 'a}): 'a = let - fun error (ty: Type.t): unit = - let - open Layout - in - Control.error - (Aconst.region c, - seq [Type.layoutPretty ty, str " too big: ", Aconst.layout c], - empty) - end - fun ensureChar (cs: CharSize.t, ch: IntInf.t): unit = - if CharSize.isInRange (cs, ch) - then () - else - let - open Layout - in - Control.error (Aconst.region c, - str (concat - ["character too big: ", - "#\"", Aconst.ordToString ch, "\""]), - empty) - end + fun error (kind: string, ty: Type.t): unit = + Control.error + (Aconst.region c, + seq [str kind, str " too large for type: ", Aconst.layout c], + seq [str "type: ", layoutPrettyType ty]) fun choose (tycon, all, sizeTycon, make) = case List.peek (all, fn s => Tycon.equals (tycon, sizeTycon s)) of NONE => Const.string "" @@ -282,15 +386,21 @@ in case Aconst.node c of Aconst.Bool b => if b then t else f - | Aconst.Char c => + | Aconst.Char ch => delay (Type.unresolvedChar, fn ty => choose (typeTycon ty, - List.map ([8, 16, 32], WordSize.fromBits o Bits.fromInt), - Tycon.word, - fn s => - (ensureChar (CharSize.fromBits (WordSize.bits s), c) - ; Const.Word (WordX.fromIntInf (c, s))))) + CharSize.all, + Tycon.word o WordSize.fromBits o CharSize.bits, + fn cs => + let + val ws = WordSize.fromBits (CharSize.bits cs) + in + Const.Word + (if CharSize.isInRange (cs, ch) + then WordX.fromIntInf (ch, ws) + else (error ("char constant", ty); WordX.zero ws)) + end)) | Aconst.Int i => delay (Type.unresolvedInt, fn ty => @@ -304,34 +414,55 @@ Const.Word (if WordSize.isInRange (s, i, {signed = true}) then WordX.fromIntInf (i, s) - else (error ty; WordX.zero s))) + else (error ("int constant", ty); WordX.zero s))) end) | Aconst.Real r => delay (Type.unresolvedReal, fn ty => choose (typeTycon ty, RealSize.all, Tycon.real, fn s => Const.Real (case RealX.make (r, s) of - NONE => (error ty; RealX.zero s) + NONE => (error ("real constant", ty); RealX.zero s) | SOME r => r))) | Aconst.String v => delay (Type.unresolvedString, fn ty => choose (typeTycon (Type.deVector ty), - List.map ([8, 16, 32], WordSize.fromBits o Bits.fromInt), - Tycon.word, - fn s => + CharSize.all, + Tycon.word o WordSize.fromBits o CharSize.bits, + fn cs => let - val cs = CharSize.fromBits (WordSize.bits s) + val ws = WordSize.fromBits (CharSize.bits cs) + val bigs = ref [] + val wv = + Const.WordVector + (WordXVector.tabulate + ({elementSize = ws}, Vector.length v, fn i => + let + val ch = Vector.sub (v, i) + in + if CharSize.isInRange (cs, ch) + then WordX.fromIntInf (ch, ws) + else (List.push (bigs, ch) + ; WordX.zero ws) + end)) + val () = + if List.isEmpty (!bigs) + then () + else Control.error + (Aconst.region c, + seq [str "string constant with ", + str (case !bigs of + [_] => "character " + | _ => "characters "), + str "too large for type: ", + seq (Layout.separate + (List.revMap + (!bigs, fn ch => + Aconst.layout (Aconst.makeRegion (Aconst.Char ch, Region.bogus))), + ", "))], + seq [str "type: ", layoutPrettyType ty]) in - Const.WordVector - (WordXVector.tabulate - ({elementSize = s}, Vector.length v, fn i => - let - val ch = Vector.sub (v, i) - val () = ensureChar (cs, ch) - in - WordX.fromIntInf (ch, s) - end)) + wv end)) | Aconst.Word w => delay @@ -340,43 +471,117 @@ Const.Word (if WordSize.isInRange (s, w, {signed = false}) then WordX.fromIntInf (w, s) - else (error ty; WordX.zero s)))) + else (error ("word constant", ty); WordX.zero s)))) end -local - open Layout -in - val align = align - val empty = empty - val seq = seq - val str = str -end +fun lookConst {default: string option, expandedTy, name, region}: unit -> Const.t = + let + fun badType () = + let + val _ = + Control.error + (region, + seq [str "strange constant type: ", + Type.layout expandedTy], + empty) + in + Error.bug "ElaborateCore.lookConst" + end + fun notFound () = + Error.bug + (concat ["ElaborateCore.lookConst: constant ", name, + " not found"]) + fun badConversion (value, ty) = + Error.bug + (concat ["ElaborateCore.lookConst: constant ", name, + " expects a ", ty, " but got ", value]) + fun boolConstFromString v = + case Bool.fromString v of + NONE => badConversion (v, "bool") + | SOME b => Const.Word (WordX.fromIntInf (if b then 1 else 0, WordSize.bool)) + fun realConstFromString rs v = + case RealX.make (v, rs) of + NONE => badConversion (v, "real") + | SOME r => Const.Real r + fun strConstFromString v = Const.string v + fun wordConstFromString ws v = + case IntInf.fromString v of + NONE => badConversion (v, "word") + | SOME ii => Const.Word (WordX.fromIntInf (ii, ws)) + fun intInfConstFromString v = + case IntInf.fromString v of + NONE => badConversion (v, "intInf") + | SOME ii => Const.IntInf ii + in + case Type.deConOpt expandedTy of + NONE => badType () + | SOME (c, ts) => + let + val constFromString = + if Tycon.equals (c, Tycon.bool) + then boolConstFromString + else if Tycon.isIntX c + then (case Tycon.deIntX c of + NONE => intInfConstFromString + | SOME is => wordConstFromString (WordSize.fromBits (IntSize.bits is))) + else if Tycon.isRealX c + then realConstFromString (Tycon.deRealX c) + else if Tycon.isWordX c + then wordConstFromString (Tycon.deWordX c) + else if Tycon.equals (c, Tycon.vector) + andalso 1 = Vector.length ts + andalso (case Type.deConOpt (Vector.first ts) of + NONE => false + | SOME (c, _) => + Tycon.isCharX c + andalso (Tycon.deCharX c = CharSize.C8)) + then strConstFromString + else badType () + in + fn () => + let + val value = + case List.peekMap ([Control.commandLineConsts, + Promise.force Control.buildConsts, + Promise.force Control.Target.consts], fn consts => + Control.StrMap.peek (consts, name)) of + NONE => (case default of + NONE => notFound () + | SOME value => value) + | SOME value => value + val const = constFromString value + in + const + end + end + end -val unify = - fn (t, t', preError, error) => - Type.unify (t, t', {error = Control.error o error, - preError = preError}) - -fun unifyList (trs: (Type.t * Region.t) vector, - z, - lay: unit -> Layout.t): Type.t = - if 0 = Vector.length trs - then Type.list (Type.new ()) +local +fun unifySeq (seqTy, seqStr, + trs: (Type.t * Region.t) vector, + unify): Type.t = + if Vector.isEmpty trs + then seqTy (Type.new ()) else let - val (t, _) = Vector.sub (trs, 0) + val (t, _) = Vector.first trs val _ = Vector.foreach (trs, fn (t', r) => - unify (t, t', z, fn (l, l') => + unify (t, t', fn (l, l') => (r, - str "list element types disagree", + str (seqStr ^ " with element of different type"), align [seq [str "element: ", l'], - seq [str "previous: ", l], - lay ()]))) + seq [str "previous: ", l]]))) in - Type.list t + seqTy t end +in +fun unifyList (trs: (Type.t * Region.t) vector, unify): Type.t = + unifySeq (Type.list, "list", trs, unify) +fun unifyVector (trs: (Type.t * Region.t) vector, unify): Type.t = + unifySeq (Type.vector, "vector", trs, unify) +end val elabPatInfo = Trace.info "ElaborateCore.elabPat" @@ -384,104 +589,93 @@ struct open Var - val fromAst = fromString o Avar.toString + val fromAst = newString o Avar.toString end -local - val eq = Avar.fromSymbol (Symbol.equal, Region.bogus) -in - fun ensureNotEquals x = - if not (allowRebindEquals ()) andalso Avar.equals (x, eq) - then - let - open Layout - in - Control.error (Avar.region x, str "= can't be redefined", empty) - end - else () -end - -fun approximateN (l: Layout.t, prefixMax, suffixMax): Layout.t = - let - val s = Layout.toString l - val n = String.size s - in - Layout.str - (case suffixMax of - NONE => - if n <= prefixMax - then s - else concat [String.prefix (s, prefixMax - 5), " ..."] - | SOME suffixMax => - if n <= prefixMax + suffixMax - then s - else concat [String.prefix (s, prefixMax - 2), - " ... ", - String.suffix (s, suffixMax - 5)]) +structure DiagUtils = + struct + type t = {layoutPrettyType: Type.t -> LayoutPretty.t, + layoutPrettyTycon: Tycon.t -> Layout.t, + layoutPrettyTyvar: Tyvar.t -> Layout.t, + unify: Type.t * Type.t * (Layout.t * Layout.t -> Region.t * Layout.t * Layout.t) -> unit} + fun make E : t = + let + val {layoutPrettyTycon, ...} = + Env.makeLayoutPrettyTycon (E, {prefixUnset = true}) + val {layoutPretty = layoutPrettyTyvar, ...} = + TyvarEnv.makeLayoutPretty () + val layoutPrettyType = fn t => + Type.layoutPretty + (t, {expandOpaque = false, + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) + fun unify (t, t', error) = + let + val error = fn (l, l', {notes}) => + let + val (r, m, d) = error (l, l') + in + Control.error + (r, m, align [d, notes ()]) + end + in + Type.unify + (t, t', {error = error, + layoutPretty = layoutPrettyType, + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) + end + in + {layoutPrettyType = layoutPrettyType, + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar, + unify = unify} + end end -fun approximate (l: Layout.t): Layout.t = - approximateN (l, 35, SOME 25) -fun approximatePrefix (l: Layout.t): Layout.t = - approximateN (l, 15, NONE) val elaboratePat: unit - -> Apat.t * Env.t * {bind: bool, isRvb: bool} * (unit -> unit) + -> Apat.t * Env.t * {bind: bool, isRvb: bool} -> Cpat.t * (Avar.t * Var.t * Type.t) vector = fn () => let val others: (Apat.t * (Avar.t * Var.t * Type.t) vector) list ref = ref [] in - fn (p: Apat.t, E: Env.t, {bind, isRvb}, preError: unit -> unit) => + fn (p: Apat.t, E: Env.t, {bind = bindInEnv, isRvb}) => let + val {layoutPrettyType, unify, ...} = DiagUtils.make E + fun ctxtTop () = + seq [str "in: ", approximate (Apat.layout p)] + val rename = + let + val renames: (Avar.t * Var.t) list ref = ref [] + in + fn x => + case List.peek (!renames, fn (y, _) => Avar.equals (x, y)) of + NONE => let val x' = Var.fromAst x + in (List.push (renames, (x, x')); x') + end + | SOME (_, x') => x' + end val xts: (Avar.t * Var.t * Type.t) list ref = ref [] fun bindToType (x: Avar.t, t: Type.t): Var.t = let - val _ = ensureNotEquals x - val x' = Var.fromAst x val _ = - if List.exists (!xts, fn (x', _, _) => Avar.equals (x, x')) - then - let - open Layout - in - Control.error (Avar.region x, - seq [str "variable ", - Avar.layout x, - str " occurs more than once in pattern"], - seq [str "in: ", - approximate (Apat.layout p)]) - end - else () - val _ = - case (List.peekMap - (!others, fn (p, v) => - if Vector.exists (v, fn (x', _, _) => - Avar.equals (x, x')) - then SOME p - else NONE)) of + Avid.checkRedefineSpecial + (Avid.fromVar x, + {allowIt = true, + ctxt = ctxtTop, + keyword = if isRvb then "val rec" else "pattern"}) + val x' = rename x + val () = + case List.peek (!xts, fn (y, _, _) => Avar.equals (x, y)) of NONE => () - | SOME p' => - let - open Layout - in - Control.error - (Apat.region p, - seq [str "variable ", - Avar.layout x, - str " occurs in multiple patterns"], - align [seq [str "in: ", - approximate (Apat.layout p)], - seq [str "and in: ", - approximate (Apat.layout p')]]) - - end + | SOME _ => + Control.error + (Avar.region x, + seq [str "duplicate variable in pattern: ", Avar.layout x], + ctxtTop ()) val _ = List.push (xts, (x, x', t)) - val _ = - if bind - then Env.extendVar (E, x, x', Scheme.fromType t, - {isRebind = false}) - else () in x' end @@ -491,71 +685,75 @@ in (bindToType (x, t), t) end - fun loop arg: Cpat.t = + fun elabType (t: Atype.t): Type.t = + elaborateType (t, E, {bogusAsUnknown = true}) + fun loop (arg: Apat.t) = Trace.traceInfo' (elabPatInfo, Apat.layout, Cpat.layout) - (fn p: Apat.t => + (fn (p: Apat.t) => let val region = Apat.region p - val unify = fn (t, t', f) => unify (t, t', preError, f) - fun unifyPatternConstraint (p, lay, c) = + fun ctxt () = + seq [str "in: ", approximate (Apat.layout p)] + val unify = fn (a, b, f) => + unify (a, b, fn z => + let + val (r, m, d) = f z + in + (r, m, align [d, ctxt ()]) + end) + fun unifyPatternConstraint (p, c) = unify (p, c, fn (l1, l2) => (region, str "pattern and constraint disagree", - align [seq [str "expects: ", l2], - seq [str "but got: ", l1], - seq [str "in: ", lay ()]])) - fun lay () = approximate (Apat.layout p) + align [seq [str "pattern: ", l1], + seq [str "constraint: ", l2]])) fun dontCare () = Cpat.wild (Type.new ()) in case Apat.node p of Apat.App (c, p) => - let - val (con, s) = Env.lookupLongcon (E, c) - in - case s of - NONE => dontCare () - | SOME s => - let - val {args, instance} = Scheme.instantiate s - val args = args () - val p = loop p - val (argType, resultType) = - case Type.deArrowOpt instance of - SOME types => types - | NONE => - let - val types = - (Type.new (), Type.new ()) - val _ = - unify - (instance, Type.arrow types, - fn _ => - (region, - str "constant constructor applied to argument", - seq [str "in: ", lay ()])) - in - types - end - val _ = - unify - (Cpat.ty p, argType, fn (l, l') => - (region, - str "constructor applied to incorrect argument", - align [seq [str "expects: ", l'], - seq [str "but got: ", l], - seq [str "in: ", lay ()]])) - in - Cpat.make (Cpat.Con {arg = SOME p, - con = con, - targs = args}, - resultType) - end - end + (case Env.lookupLongcon (E, c) of + NONE => dontCare () + | SOME (con, s) => + let + val {args, instance} = Scheme.instantiate s + val args = args () + val p = loop p + val (argType, resultType) = + case Type.deArrowOpt instance of + SOME types => types + | NONE => + let + val types = + (Type.new (), Type.new ()) + val _ = + unify + (instance, Type.arrow types, + fn _ => + (region, + str "constant constructor applied to argument in pattern", + Layout.empty)) + in + types + end + val _ = + unify + (Cpat.ty p, argType, fn (l, l') => + (region, + str "constructor applied to incorrect argument in pattern", + align [seq [str "expects: ", l'], + seq [str "but got: ", l]])) + in + Cpat.make (Cpat.Con {arg = SOME p, + con = con, + targs = args}, + resultType) + end) | Apat.Const c => elabConst (c, + {layoutPrettyType = #1 o layoutPrettyType}, fn (resolve, ty) => Cpat.make (Cpat.Const resolve, ty), {false = Cpat.falsee, true = Cpat.truee}) @@ -564,20 +762,19 @@ val p' = loop p val _ = unifyPatternConstraint - (Cpat.ty p', fn () => Apat.layout p, - elaborateType (t, Lookup.fromEnv E)) + (Cpat.ty p', elabType t) in p' end | Apat.FlatApp items => loop (Parse.parsePat - (items, E, fn () => seq [str "in: ", lay ()])) + (items, E, fn () => ctxt ())) | Apat.Layered {var = x, constraint, pat, ...} => let val t = case constraint of NONE => Type.new () - | SOME t => elaborateType (t, Lookup.fromEnv E) + | SOME t => elabType t val xc = Avid.toCon (Avid.fromVar x) val x = case Env.peekLongcon (E, Ast.Longcon.short xc) of @@ -587,17 +784,15 @@ val _ = Control.error (region, - seq [str "constructor can not be redefined by as: ", + seq [str "constructor cannot be redefined by as: ", Avar.layout x], - seq [str "in: ", lay ()]) + ctxt ()) in Var.fromAst x end val pat' = loop pat val _ = - unifyPatternConstraint (Cpat.ty pat', - fn () => Apat.layout pat, - t) + unifyPatternConstraint (Cpat.ty pat', t) in Cpat.make (Cpat.Layered (x, pat'), t) end @@ -609,9 +804,94 @@ unifyList (Vector.map2 (ps, ps', fn (p, p') => (Cpat.ty p', Apat.region p)), - preError, - fn () => seq [str "in: ", lay ()])) + unify)) + end + | Apat.Or ps => + let + val _ = check (Control.Elaborate.allowOrPats, "Or patterns", region) + val xtsOrig = !xts + val n = Vector.length ps + val ps = + Vector.map + (ps, fn p => + let + val _ = xts := [] + val p' = loop p + in + (p, p', !xts) + end) + val ps' = Vector.map (ps, fn (_, p', _) => p') + + val xtsPats = + Vector.fold + (ps, [], fn ((p, _, xtsPat), xtsPats) => + List.fold + (xtsPat, xtsPats, fn ((x, x', t), xtsPats) => + case List.peek (xtsPats, fn (y, _, _, _) => Avar.equals (x, y)) of + NONE => (x, x', t, ref [x])::xtsPats + | SOME (_, _, t', l) => + let + val _ = List.push (l, x) + val _ = + unify + (t', t, fn (l', l) => + (Avar.region x, + seq [str "or-pattern with variable of different type: ", + Avar.layout x], + align [seq [str "variable: ", l], + seq [str "previous: ", l'], + seq [str "in: ", approximate (Apat.layout p)]])) + in + xtsPats + end)) + val _ = + List.foreach + (xtsPats, fn (x, _, _, l) => + if List.length (!l) <> n + then let + val _ = + Control.error + (Apat.region p, + seq [str "variable does not occur in all patterns of or-pattern: ", + Avar.layout x], + ctxt ()) + in + () + end + else ()) + val t = Type.new () + val _ = + Vector.foreach + (ps, fn (p, p', _) => + unify + (t, Cpat.ty p', fn (l, l') => + (Apat.region p, + str "or-pattern with pattern of different type", + align [seq [str "pattern: ", l'], + seq [str "previous: ", l], + seq [str "in: ", approximate (Apat.layout p)]]))) + val xtsMerge = + List.fold + (xtsPats, xtsOrig, fn ((x, x', t, l), xtsMerge) => + case List.peek (xtsMerge, fn (y, _, _) => Avar.equals (x, y)) of + NONE => (x, x', t)::xtsMerge + | SOME _ => + let + val _ = + List.foreach + (List.rev (!l), fn x => + Control.error + (Avar.region x, + seq [str "duplicate variable in pattern: ", Avar.layout x], + ctxtTop ())) + in + (x, x', t)::xtsMerge + end) + val _ = xts := xtsMerge + in + Cpat.make (Cpat.Or ps', t) end + | Apat.Paren p => loop p | Apat.Record {flexible, items} => (* rules 36, 38, 39 and Appendix A, p.57 *) let @@ -619,7 +899,7 @@ Vector.unzip (Vector.map (items, - fn (f, i) => + fn (f, _, i) => (f, case i of Apat.Item.Field p => p @@ -654,7 +934,7 @@ Control.error (region, str "unresolved ... in record pattern", - seq [str "in: ", lay ()]) + ctxt ()) val _ = List.push (unresolvedFlexRecordChecks, resolve) in t @@ -667,12 +947,7 @@ ty) end | Apat.Tuple ps => - let - val ps = Vector.map (ps, loop) - in - Cpat.make (Cpat.Tuple ps, - Type.tuple (Vector.map (ps, Cpat.ty))) - end + Cpat.tuple (Vector.map (ps, loop)) | Apat.Var {name, ...} => let val (strids, x) = Ast.Longvid.split name @@ -699,47 +974,71 @@ Cpat.make (Cpat.Wild, Type.new ()) end | SOME (c, s) => - let - val _ = - if not isRvb - then () - else - Control.error - (region, - seq [str "constructor can not be redefined by val rec: ", - Ast.Longvid.layout name], - empty) - in - case s of - NONE => dontCare () - | SOME s => - let - val {args, instance} = - Scheme.instantiate s - in - if Type.isArrow instance - then - (Control.error - (region, - seq [str "constructor must be used with argument in pattern: ", - Ast.Longvid.layout name], - empty) - ; dontCare ()) - else - Cpat.make - (Cpat.Con {arg = NONE, - con = c, - targs = args ()}, - instance) - end - end + if List.isEmpty strids andalso isRvb + then var () + else let + val {args, instance} = + Scheme.instantiate s + in + if Type.isArrow instance + then + (Control.error + (region, + seq [str "constructor used without argument in pattern: ", + Ast.Longvid.layout name], + empty) + ; dontCare ()) + else + Cpat.make + (Cpat.Con {arg = NONE, + con = c, + targs = args ()}, + instance) + end + end + | Apat.Vector ps => + let + val _ = check (ElabControl.allowVectorPats, "Vector patterns", Apat.region p) + val ps' = Vector.map (ps, loop) + in + Cpat.make (Cpat.Vector ps', + unifyVector + (Vector.map2 (ps, ps', fn (p, p') => + (Cpat.ty p', Apat.region p)), + unify)) end | Apat.Wild => Cpat.make (Cpat.Wild, Type.new ()) end) arg val p' = loop p val xts = Vector.fromList (!xts) + val _ = + Vector.foreach + (xts, fn (x, _, _) => + case (List.peekMap + (!others, fn (p, v) => + if Vector.exists (v, fn (y, _, _) => + Avar.equals (x, y)) + then SOME p + else NONE)) of + NONE => () + | SOME p' => + Control.error + (Avar.region x, + seq [str "variable bound in multiple patterns: ", + Avar.layout x], + align [seq [str "pattern: ", + approximate (Apat.layout p)], + seq [str "previous: ", + approximate (Apat.layout p')]])) val _ = List.push (others, (p, xts)) + val _ = + if bindInEnv + then Vector.foreach + (xts, fn (x, x', t) => + Env.extendVar (E, x, x', Scheme.fromType t, + {isRebind = false})) + else () in (p', xts) end @@ -763,13 +1062,6 @@ struct open Type - fun layoutPrettyBracket ty = - let - open Layout - in - seq [str "[", layoutPretty ty, str "]"] - end - val nullary: (string * CType.t * Tycon.t) list = let fun sized (tycon: Bits.t -> Tycon.t, ctypes) = @@ -837,7 +1129,7 @@ | SOME (c, ts) => if List.exists (unary, fn c' => Tycon.equals (c, c')) andalso 1 = Vector.length ts - andalso isSome (toCType (Vector.sub (ts, 0))) + andalso isSome (toCType (Vector.first ts)) then SOME {ctype = CType.objptr, name = "Objptr"} else NONE @@ -927,6 +1219,39 @@ | _ => NONE) | _ => NONE +val isIEAttributeInline = + fn ImportExportAttribute.Inline => true + | _ => false + +fun parseIEAttributesInline (attributes: ImportExportAttribute.t list) + : bool option = + case attributes of + [] => SOME false + | [a] => (case a of + ImportExportAttribute.Inline => SOME true + | _ => NONE) + | _ => NONE + +val isIEAttributeKind = + fn ImportExportAttribute.Impure => true + | ImportExportAttribute.Pure => true + | ImportExportAttribute.Runtime => true + | ImportExportAttribute.Reentrant => true + | _ => false + +fun parseIEAttributesKind (attributes: ImportExportAttribute.t list) + : CKind.t option = + case attributes of + [] => SOME CKind.Impure + | [a] => + (case a of + ImportExportAttribute.Impure => SOME CKind.impure + | ImportExportAttribute.Pure => SOME CKind.pure + | ImportExportAttribute.Runtime => SOME CKind.runtimeDefault + | ImportExportAttribute.Reentrant => SOME CKind.reentrant + | _ => NONE) + | _ => NONE + val isIEAttributeSymbolScope = fn ImportExportAttribute.External => true | ImportExportAttribute.Private => true @@ -948,7 +1273,7 @@ fun scopeCheck {name, symbolScope, region} = let fun warn l = - Control.warning (region, seq (List.map (l, str)), Layout.empty) + Control.warning (region, seq (List.map (l, str)), empty) val oldScope = Ffi.checkScope {name = name, symbolScope = symbolScope} in @@ -964,9 +1289,10 @@ elabedTy: Type.t, expandedTy: Type.t, name: string option, - region: Region.t}: Type.t Prim.t = + region: Region.t, + layoutPrettyType: Type.t -> Layout.t}: Type.t Prim.t = let - fun error l = Control.error (region, l, Layout.empty) + fun error l = Control.error (region, l, empty) fun invalidAttributes () = error (seq [str "invalid attributes for _import: ", List.layout ImportExportAttribute.layout attributes]) @@ -974,14 +1300,14 @@ Control.error (region, str "invalid type for _import", - Type.layoutPretty elabedTy) + layoutPrettyType elabedTy) in case Type.toCFunType expandedTy of NONE => let val () = invalidType () in - Prim.bogus + Prim.MLton_bogus end | SOME (args, result) => let @@ -993,6 +1319,27 @@ NONE => (invalidAttributes () ; Convention.Cdecl) | SOME c => c + val inline = + List.keepAll (attributes, isIEAttributeInline) + val inline = + case name of + NONE => + (if List.isEmpty inline + then () + else invalidAttributes () + ; false) + | SOME _ => + (case parseIEAttributesInline inline of + NONE => (invalidAttributes () + ; false) + | SOME i => i) + val kind = + List.keepAll (attributes, isIEAttributeKind) + val kind = + case parseIEAttributesKind kind of + NONE => (invalidAttributes () + ; CKind.Impure) + | SOME k => k val symbolScope = List.keepAll (attributes, isIEAttributeSymbolScope) val symbolScope = @@ -1026,25 +1373,20 @@ else Vector.concat [Vector.new1 addrTy, args] end, - bytesNeeded = NONE, convention = convention, - ensuresBytesFree = false, - modifiesFrontier = true, - mayGC = true, - maySwitchThreads = false, + inline = inline, + kind = kind, prototype = (Vector.map (args, #ctype), Option.map (result, #ctype)), - readsStackTop = true, return = (case result of NONE => Type.unit | SOME {ty, ...} => ty), symbolScope = symbolScope, target = (case name of NONE => Indirect - | SOME name => Direct name), - writesStackTop = true} + | SOME name => Direct name)} in - Prim.ffi func + Prim.CFunction func end end @@ -1083,11 +1425,11 @@ name: string, cty: CType.t option, symbolScope: SymbolScope.t }: Cexp.t = - primApp {args = Vector.new0 (), - prim = Prim.ffiSymbol {name = name, - cty = cty, - symbolScope = symbolScope}, - result = expandedPtrTy} + Cexp.make (Cexp.Const + (fn () => Const.csymbol (CSymbol.T {name = name, + cty = cty, + symbolScope = symbolScope})), + expandedPtrTy) fun mkFetch {ctypeCbTy, isBool, expandedCbTy, @@ -1101,21 +1443,12 @@ else expandedCbTy} in if not isBool then fetchExp else - Cexp.casee {kind = "", - lay = fn () => Layout.empty, - nest = [], - noMatch = Cexp.Impossible, - nonexhaustiveExnMatch = Control.Elaborate.DiagDI.Default, - nonexhaustiveMatch = Control.Elaborate.DiagEIW.Ignore, - redundantMatch = Control.Elaborate.DiagEIW.Ignore, - region = Region.bogus, - rules = Vector.new2 - ({exp = Cexp.truee, lay = NONE, pat = Cpat.falsee}, - {exp = Cexp.falsee, lay = NONE, pat = Cpat.truee}), - test = primApp - {args = Vector.new2 (fetchExp, zeroExpBool), - prim = Prim.wordEqual WordSize.bool, - result = expandedCbTy}} + Cexp.iff (primApp + {args = Vector.new2 (fetchExp, zeroExpBool), + prim = Prim.Word_equal WordSize.bool, + result = expandedCbTy}, + Cexp.falsee, + Cexp.truee) end fun mkStore {ctypeCbTy, isBool, @@ -1123,18 +1456,7 @@ let val valueExp = if not isBool then valueExp else - Cexp.casee {kind = "", - lay = fn () => Layout.empty, - nest = [], - noMatch = Cexp.Impossible, - nonexhaustiveExnMatch = Control.Elaborate.DiagDI.Default, - nonexhaustiveMatch = Control.Elaborate.DiagEIW.Ignore, - redundantMatch = Control.Elaborate.DiagEIW.Ignore, - region = Region.bogus, - rules = Vector.new2 - ({exp = oneExpBool, lay = NONE, pat = Cpat.truee}, - {exp = zeroExpBool, lay = NONE, pat = Cpat.falsee}), - test = valueExp} + Cexp.iff (valueExp, oneExpBool, zeroExpBool) in primApp {args = Vector.new3 (ptrExp, zeroExpPtrdiff (), valueExp), prim = Prim.cpointerSet ctypeCbTy, @@ -1203,16 +1525,17 @@ elabedTy: Type.t, expandedTy: Type.t, name: string, - region: Region.t}: Cexp.t = + region: Region.t, + layoutPrettyType: Type.t -> Layout.t}: Cexp.t = let - fun error l = Control.error (region, l, Layout.empty) + fun error l = Control.error (region, l, empty) fun invalidAttributes () = error (seq [str "invalid attributes for _address: ", List.layout SymbolAttribute.layout attributes]) fun invalidType () = Control.error (region, str "invalid type for _address", - Type.layoutPretty elabedTy) + layoutPrettyType elabedTy) val () = case Type.toCPtrType expandedTy of NONE => (invalidType (); ()) @@ -1247,16 +1570,17 @@ elabedTy: Type.t, expandedTy: Type.t, name: string, - region: Region.t}: Cexp.t = + region: Region.t, + layoutPrettyType: Type.t -> Layout.t}: Cexp.t = let - fun error l = Control.error (region, l, Layout.empty) + fun error l = Control.error (region, l, empty) fun invalidAttributes () = error (seq [str "invalid attributes for _symbol: ", List.layout SymbolAttribute.layout attributes]) fun invalidType () = Control.error (region, str "invalid type for _symbol", - Type.layoutPretty elabedTy) + layoutPrettyType elabedTy) val expandedCbTy = Exn.withEscape (fn escape => @@ -1277,7 +1601,7 @@ NONE => invalidType () | SOME tys => tys val (getArgTy, getResTy) = - doit (Vector.sub (tys, 0)) + doit (Vector.first tys) val (setArgTy, setResTy) = doit (Vector.sub (tys, 1)) val () = @@ -1345,12 +1669,13 @@ fun symbolIndirect {elabedTy: Type.t, expandedTy: Type.t, - region: Region.t}: Cexp.t = + region: Region.t, + layoutPrettyType: Type.t -> Layout.t}: Cexp.t = let fun invalidType () = Control.error (region, str "invalid type for _symbol", - Type.layoutPretty elabedTy) + layoutPrettyType elabedTy) val (expandedPtrTy, expandedCbTy) = Exn.withEscape (fn escape => @@ -1422,9 +1747,10 @@ elabedTy: Type.t, expandedTy: Type.t, name: string, - region: Region.t}: Aexp.t = + region: Region.t, + layoutPrettyType: Type.t -> Layout.t}: Aexp.t = let - fun error l = Control.error (region, l, Layout.empty) + fun error l = Control.error (region, l, empty) fun invalidAttributes () = error (seq [str "invalid attributes for _export: ", List.layout ImportExportAttribute.layout attributes]) @@ -1432,7 +1758,7 @@ Control.error (region, str "invalid type for _export", - Type.layoutPretty elabedTy) + layoutPrettyType elabedTy) val convention = List.keepAll (attributes, isIEAttributeConvention) val convention = @@ -1557,7 +1883,7 @@ fnn (Vector.new1 (Apat.makeRegion (Apat.Record {flexible = true, - items = Vector.new1 (f, xField)}, + items = Vector.new1 (f, Region.bogus, xField)}, r), xVar)) end @@ -1567,7 +1893,7 @@ struct open Con - val fromAst = fromString o Ast.Con.toString + val fromAst = newString o Ast.Con.toString end structure Cexp = @@ -1596,24 +1922,6 @@ ...} = Property.get (Var.plist, Property.initFun (fn _ => ref NONE)) -structure ElabControl = Control.Elaborate - -fun check (c: (bool,bool) ElabControl.t, keyword: string, region) = - if ElabControl.current c - then () - else - let - open Layout - in - Control.error - (region, - str (concat (if ElabControl.expert c - then [keyword, " disallowed"] - else [keyword, " disallowed, compile with -default-ann '", - ElabControl.name c, " true'"])), - empty) - end - fun elaborateDec (d, {env = E, nest}) = let val profileBody = @@ -1639,27 +1947,50 @@ setBound = setBound, unmarkFunc = unmarkFunc} end - fun elabType (t: Atype.t): Type.t = - elaborateType (t, Lookup.fromEnv E) + fun elabType (t: Atype.t, {bogusAsUnknown}): Type.t = + elaborateType (t, E, {bogusAsUnknown = bogusAsUnknown}) fun elabTypBind (typBind: TypBind.t) = let val TypBind.T types = TypBind.node typBind - val strs = + val types = Vector.map - (types, fn {def, tyvars, ...} => - TypeStr.def (Scheme.make {canGeneralize = true, - ty = elabType def, - tyvars = tyvars}, - Kind.Arity (Vector.length tyvars))) + (types, fn {def, tycon, tyvars} => + TyvarEnv.scope + (tyvars, fn tyvars => + {scheme = Scheme.make {canGeneralize = true, + ty = elabType (def, {bogusAsUnknown = false}), + tyvars = tyvars}, + tycon = tycon})) + val () = + Vector.foreach + (types, fn {scheme, tycon} => + Env.extendTycon + (E, tycon, TypeStr.def scheme, + {forceUsed = false, + isRebind = false})) + (* Rebuild type to propagate tycon equality + * when 'withtype' components of 'datatype' decl. *) + fun rebind () = + Vector.foreach + (types, fn {scheme, tycon} => + let + val (tyvars, ty) = Scheme.dest scheme + val ty = Type.copy ty + val scheme = + Scheme.make {canGeneralize = true, + tyvars = tyvars, + ty = ty} + in + Env.extendTycon + (E, tycon, TypeStr.def scheme, + {forceUsed = false, + isRebind = true}) + end) in - Vector.foreach2 - (types, strs, fn ({tycon, ...}, str) => - Env.extendTycon (E, tycon, str, {forceUsed = false, - isRebind = false})) + rebind end fun elabDatBind (datBind: DatBind.t, nest: string list) - : Decs.t * {tycon: Ast.Tycon.t, - typeStr: TypeStr.t} vector = + : Decs.t * {tycon: Ast.Tycon.t, typeStr: TypeStr.t} vector = (* rules 28, 29, 81, 82 *) let val DatBind.T {datatypes, withtypes} = DatBind.node datBind @@ -1670,113 +2001,162 @@ Vector.map (datatypes, fn {cons, tycon = name, tyvars} => let - val kind = Kind.Arity (Vector.length tyvars) + val arity = Vector.length tyvars + val k = Kind.Arity arity + val n = Ast.Tycon.toString name + val pd = concat (List.separate (rev (n :: nest), ".")) + val r = Ast.Tycon.region name val tycon = - Env.newTycon - (concat (List.separate - (rev (Ast.Tycon.toString name :: nest), - ".")), - kind, - AdmitsEquality.Sometimes, - Ast.Tycon.region name) - val _ = Env.extendTycon (E, name, TypeStr.tycon (tycon, kind), + Tycon.make {admitsEquality = AdmitsEquality.Sometimes, + kind = k, + name = n, + prettyDefault = pd, + region = r} + val _ = Env.extendTycon (E, name, TypeStr.tycon tycon, {forceUsed = true, isRebind = false}) - val cons = - Vector.map - (cons, fn (name, arg) => - {con = Con.fromAst name, - name = name, - arg = arg}) - val makeCons = - Env.newCons (E, Vector.map (cons, fn {con, name, ...} => - {con = con, name = name})) in - {cons = cons, - kind = kind, - makeCons = makeCons, + {arity = arity, + cons = cons, name = name, tycon = tycon, tyvars = tyvars} end) - val _ = elabTypBind withtypes - val (dbs, strs) = - (Vector.unzip o Vector.map) - (datatypes, - fn {cons, kind, makeCons, name, tycon, tyvars} => + val rebindWithtypes = elabTypBind withtypes + val datatypes = + Vector.map + (datatypes, fn {arity, cons, name, tycon, tyvars} => let - val resultType: Type.t = - Type.con (tycon, Vector.map (tyvars, Type.var)) - val (schemes, datatypeCons) = - Vector.unzip - (Vector.map - (cons, fn {arg, con, ...} => - let - val (arg, ty) = - case arg of - NONE => (NONE, resultType) - | SOME t => - let - val t = elabType t - in - (SOME t, Type.arrow (t, resultType)) - end - val scheme = - Scheme.make {canGeneralize = true, - ty = ty, - tyvars = tyvars} - in - (scheme, {arg = arg, con = con}) - end)) - val typeStr = - TypeStr.data (tycon, kind, makeCons schemes) + val cons = + Vector.map + (cons, fn (name, arg) => + TyvarEnv.scope + (tyvars, fn tyvars => + {arg = Option.map (arg, fn t => elabType (t, {bogusAsUnknown = false})), + con = Con.fromAst name, + name = name, + tyvars = tyvars})) in - ({cons = datatypeCons, - tycon = tycon, - tyvars = tyvars}, - {tycon = name, - typeStr = typeStr}) + {arity = arity, + cons = cons, + name = name, + tycon = tycon} end) - val _ = - Vector.map - (strs, fn {tycon, typeStr} => - Env.extendTycon (E, tycon, typeStr, - {forceUsed = false, isRebind = true})) - (* Maximize equality. *) + (* Maximize equality *) val change = ref false - fun loop () = + fun loop datatypes = let - val _ = - Vector.foreach - (dbs, fn {cons, tycon, tyvars} => + val datatypes = + Vector.map + (datatypes, fn {arity, cons, name, tycon} => let - val r = TypeEnv.tyconAdmitsEquality tycon + val isEquality = ref true + val cons = + Vector.map + (cons, fn {arg, con, name, tyvars} => + let + val arg = + Option.map + (arg, fn arg => + let + (* Rebuild type to propagate tycon equality. *) + val arg = Type.copy arg + val argScheme = + Scheme.make {canGeneralize = true, + ty = arg, + tyvars = tyvars} + val () = + if Scheme.admitsEquality argScheme + then () + else isEquality := false + in + arg + end) + in + {arg = arg, + con = con, + name = name, + tyvars = tyvars} + end) datatype z = datatype AdmitsEquality.t + val () = + case Tycon.admitsEquality tycon of + Always => + Error.bug "ElaborateCore.elaborateDec.elabDatBind: Always" + | Never => () + | Sometimes => + if !isEquality + then () + else (Tycon.setAdmitsEquality (tycon, Never) + ; change := true) in - case !r of - Always => Error.bug "ElaborateCore.elaborateDec.elabDatBind: Always" - | Never => () - | Sometimes => - if Vector.forall - (cons, fn {arg, ...} => - case arg of - NONE => true - | SOME ty => - Scheme.admitsEquality - (Scheme.make {canGeneralize = true, - ty = ty, - tyvars = tyvars})) - then () - else (r := Never; change := true) + {arity = arity, + cons = cons, + name = name, + tycon = tycon} end) in if !change - then (change := false; loop ()) - else () + then (change := false; loop datatypes) + else datatypes end - val _ = loop () + val datatypes = loop datatypes + val (datatypes, strs) = + (Vector.unzip o Vector.map) + (datatypes, fn {arity, cons, name, tycon} => + let + val tyvars' = + Vector.tabulate (arity, fn _ => Tyvar.makeNoname {equality = false}) + val tyargs' = + Vector.map (tyvars', Type.var) + val (cons, cons') = + (Vector.unzip o Vector.map) + (cons, fn {arg, con, name, tyvars} => + let + val res = + Type.con (tycon, Vector.map (tyvars, Type.var)) + val (arg', ty) = + case arg of + NONE => (NONE, res) + | SOME arg => + let + val argScheme = + Scheme.make {canGeneralize = true, + ty = arg, + tyvars = tyvars} + val arg' = Scheme.apply (argScheme, tyargs') + in + (SOME arg', + Type.arrow (arg, res)) + end + val scheme = + Scheme.make {canGeneralize = true, + ty = ty, + tyvars = tyvars} + in + ({con = con, + name = name, + scheme = scheme}, + {con = con, + arg = arg'}) + end) + val cons = Env.newCons (E, cons) + val typeStr = TypeStr.data (tycon, cons) + val () = + Env.extendTycon + (E, name, typeStr, + {forceUsed = false, + isRebind = true}) + in + ({cons = cons', + tycon = tycon, + tyvars = tyvars'}, + {tycon = name, + typeStr = typeStr}) + end) + val () = rebindWithtypes () in - (Decs.single (Cdec.Datatype dbs), strs) + (Decs.single (Cdec.Datatype datatypes), strs) end fun elabDec arg : Decs.t = Trace.traceInfo @@ -1785,70 +2165,66 @@ Decs.layout, Trace.assertTrue) (fn (d, nest, isTop) => let + fun ctxt () = seq [str "in: ", approximate (Adec.layout d)] val region = Adec.region d - fun lay () = seq [str "in: ", approximate (Adec.layout d)] - val preError = Promise.lazy (fn () => Env.setTyconNames E) - fun reportUnable (unable: Tyvar.t vector) = - if 0 = Vector.length unable - then () - else - let - open Layout - in - Control.error - (region, - seq [str (concat - ["can't bind type variable", - if Vector.length unable > 1 then "s" else "", - ": "]), - seq (List.separate - (Vector.toListMap (unable, Tyvar.layout), - str ", "))], - lay ()) - end - fun useBeforeDef (c: Tycon.t) = - let - val _ = preError () - open Layout - in - Control.error - (region, - seq [str "type escapes the scope of its definition at ", - str (case ! (TypeEnv.tyconRegion c) of - NONE => "" - | SOME r => - case Region.left r of - NONE => "" - | SOME p => SourcePos.toString p)], - align [seq [str "type: ", Tycon.layout c], - lay ()]) - end - val () = TypeEnv.tick {useBeforeDef = useBeforeDef} - val unify = fn (t, t', f) => unify (t, t', preError, f) - fun checkSchemes (v: (Var.t * Scheme.t) vector): unit = + fun generalizeError (var, lay, _) = + Control.error + (Avar.region var, + seq [str "type of variable cannot be generalized in expansive declaration: ", + Avar.layout var], + align [seq [str "type: ", lay], + ctxt ()]) + val () = Time.tick {region = region} + fun checkSchemes (v: (Avar.t * Scheme.t) vector): unit = if isTop - then - List.push - (undeterminedTypeChecks, - fn () => - Vector.foreach2 - (v, Scheme.haveFrees (Vector.map (v, #2)), - fn ((x, s), b) => - if b - then - let - val _ = preError () - open Layout - in - Control.warning - (region, - seq [str "unable to locally determine type of variable: ", - Var.layout x], - align [seq [str "type: ", Scheme.layoutPretty s], - lay ()]) - end - else ())) + then Vector.foreach + (v, fn (x, s) => + if not (Scheme.haveUnknowns s) + then () + else List.push + (undeterminedTypeChecks, fn () => + if not (Scheme.haveUnknowns s) + then () + else let + (* Technically, wrong scope for region; + * but saving environment would probably + * be expensive. + *) + val (bs, t) = Scheme.dest s + val {layoutPrettyTycon, ...} = + Env.makeLayoutPrettyTycon (E, {prefixUnset = true}) + val {layoutPretty = layoutPrettyTyvar, + localInit = localInitLayoutPrettyTyvar, ...} = + Tyvar.makeLayoutPretty () + val () = localInitLayoutPrettyTyvar bs + val (lay, _) = + Type.layoutPretty + (t, {expandOpaque = false, + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) + in + Control.warning + (Avar.region x, + seq [str "type of variable was not inferred and could not be generalized: ", + Avar.layout x], + align [seq [str "type: ", lay], + ctxt ()]) + end)) else () + fun checkConRedefine (vid, keyword, ctxt) = + case Env.peekLongcon (E, Ast.Longcon.short (Avid.toCon vid)) of + NONE => () + | SOME _ => + (case valrecConstr () of + Control.Elaborate.DiagEIW.Error => Control.error + | Control.Elaborate.DiagEIW.Ignore => (fn _ => ()) + | Control.Elaborate.DiagEIW.Warn => Control.warning) + (Avid.region vid, + seq [str "constructor redefined by ", + str keyword, + str ": ", + Avid.layout vid], + ctxt ()) val elabDec = fn (d, isTop) => elabDec (d, nest, isTop) val decs = case Adec.node d of @@ -1859,7 +2235,7 @@ (E, fn () => elabDatBind (datBind, nest), fn z => (z, elabDec (body, isTop))) - val _ = + val () = Vector.foreach (strs, fn {tycon, typeStr} => Env.extendTycon (E, tycon, TypeStr.abs typeStr, @@ -1882,28 +2258,58 @@ case TypeStr.node s of TypeStr.Datatype _ => true | _ => false + val () = + Env.extendTycon (E, lhs, s, + {forceUsed = forceUsed, + isRebind = false}) in - Env.extendTycon (E, lhs, s, - {forceUsed = forceUsed, - isRebind = false}) + () end) in Decs.empty end) + | Adec.DoDec exp => + let + val _ = check (ElabControl.allowDoDecls, "do declarations", Adec.region d) + val {unify, ...} = DiagUtils.make E + val exp' = elabExp (exp, nest, NONE) + val _ = + unify + (Cexp.ty exp', Type.unit, fn (l1, _) => + (Aexp.region exp, + str "do declaration expression not of type unit", + align [seq [str "expression: ", l1], + ctxt ()])) + val vb = {ctxt = fn _ => empty, + exp = exp', + layPat = fn _ => empty, + nest = nest, + pat = Cpat.wild Type.unit, + regionPat = Region.bogus} + in + Decs.single + (Cdec.Val {matchDiags = matchDiagsFromNoMatch Cexp.Impossible, + rvbs = Vector.new0 (), + tyvars = Vector.new0, + vbs = Vector.new1 vb}) + end | Adec.Exception ebs => let val decs = Vector.fold (ebs, Decs.empty, fn ((exn, rhs), decs) => let - val (decs, exn', scheme) = + val decs = case EbRhs.node rhs of EbRhs.Def c => - let - val (c, s) = Env.lookupLongcon (E, c) - in - (decs, c, s) - end + (case Env.lookupLongexn (E, c) of + NONE => decs + | SOME (exn', scheme) => + let + val _ = Env.extendExn (E, exn, exn', scheme) + in + decs + end) | EbRhs.Gen arg => let val exn' = Con.fromAst exn @@ -1912,20 +2318,18 @@ NONE => (NONE, Type.exn) | SOME t => let - val t = elabType t + val t = elabType (t, {bogusAsUnknown = false}) in (SOME t, Type.arrow (t, Type.exn)) end val scheme = Scheme.fromType ty + val _ = Env.extendExn (E, exn, exn', scheme) in - (Decs.add (decs, - Cdec.Exception {arg = arg, - con = exn'}), - exn', - SOME scheme) + Decs.add (decs, + Cdec.Exception {arg = arg, + con = exn'}) end - val _ = Env.extendExn (E, exn, exn', scheme) in decs end) @@ -1936,342 +2340,384 @@ (Vector.foreach (ops, fn op' => Env.extendFix (E, op', fixity)) ; Decs.empty) - | Adec.Fun (tyvars, fbs) => + | Adec.Fun {tyvars = tyvars, fbs} => let - val fbs = - Vector.map - (fbs, fn clauses => - Vector.map - (clauses, fn {body, pats, resultType} => - let - fun lay () = - approximate - (let - open Layout - in - seq [Apat.layoutFlatApp pats, - case resultType of - NONE => empty - | SOME rt => seq [str ": ", Atype.layout rt], - str " = ", - Aexp.layout body] - end) - val {args, func} = - Parse.parseClause (pats, E, region, lay) - in - {args = args, - body = body, - func = func, - lay = lay, - resultType = resultType} - end)) - val close = - TypeEnv.close (tyvars, {useBeforeDef = useBeforeDef}) - val {markFunc, setBound, unmarkFunc} = recursiveFun () - val fbs = - Vector.map - (fbs, fn clauses => - if Vector.isEmpty clauses - then Error.bug "ElaborateCore.elabDec: Fun:no clauses" - else - let - fun lay () = - let - open Layout - in - seq [str "in: ", + val close = TypeEnv.close {region = region} + in + TyvarEnv.scope + (tyvars, fn tyvars' => + let + val {layoutPrettyTycon, layoutPrettyTyvar, unify, ...} = + DiagUtils.make E + val {markFunc, setBound, unmarkFunc} = recursiveFun () + val fbs = + Vector.map2 + (fbs, Adec.layoutFun {tyvars = tyvars, fbs = fbs}, fn (clauses, layFb) => + let + val ctxtFb = fn () => + seq [str "in: ", approximate (layFb ())] + val clauses = + Vector.map + (clauses, fn {body, pats, resultType} => + let + fun layPats () = + approximate (Apat.layoutFlatApp pats) + fun layPatsPrefix () = + approximatePrefix (Apat.layoutFlatApp pats) + val regionPats = + Region.append + (Apat.region (Vector.first pats), + Apat.region (Vector.last pats)) + val regionBody = + Aexp.region body + fun layClause () = approximate - (seq - (separate - (Vector.toListMap - (clauses, fn {lay, ...} => lay ()), - " | ")))] - end - val {args, func, lay = lay0, ...} = - Vector.sub (clauses, 0) - val numArgs = Vector.length args - val _ = - Vector.foreach - (clauses, fn {args, lay = layN, ...} => - if numArgs = Vector.length args - then () - else - let - fun one lay = - seq [str "clause: ", - approximate (lay ())] - in - Control.error - (region, - seq [str "function defined with different numbers of arguments"], - align [one lay0, one layN, lay ()]) - end) - val diff = - Vector.fold - (clauses, [], fn ({func = func', ...}, ac) => - if Avar.equals (func, func') - then ac - else func' :: ac) - val _ = - case diff of - [] => () - | _ => - let - val diff = - List.removeDuplicates - (func :: diff, Avar.equals) - in - Control.error - (region, - seq [str "function defined with multiple names: ", - seq (Layout.separateRight - (List.map (diff, Avar.layout), - ", "))], - lay ()) - end - val var = Var.fromAst func - val ty = Type.new () - val _ = Env.extendVar (E, func, var, - Scheme.fromType ty, - {isRebind = false}) - val _ = markFunc var - val _ = - Acon.ensureRedefine - (Avid.toCon (Avid.fromVar func)) - in - {clauses = clauses, - func = func, - lay = lay, - ty = ty, - var = var} - end) - val _ = - Vector.fold - (fbs, [], fn ({func = f, ...}, ac) => - if List.exists (ac, fn f' => Avar.equals (f, f')) - then - (Control.error - (Avar.region f, - seq [str "function ", - Avar.layout f, - str " defined multiple times: "], - lay ()) - ; ac) - else f :: ac) - val decs = - Vector.map - (fbs, fn {clauses, - func: Avar.t, - lay, - ty: Type.t, - var: Var.t} => - let - val nest = Avar.toString func :: nest - fun sourceInfo () = - SourceInfo.function {name = nest, - region = Avar.region func} - val rs = - Vector.map - (clauses, fn {args: Apat.t vector, - body: Aexp.t, - lay: unit -> Layout.t, - resultType: Atype.t option, ...} => - Env.scope - (E, fn () => - let - val elaboratePat = elaboratePat () - val pats = - Vector.map - (args, fn p => - {pat = #1 (elaboratePat - (p, E, - {bind = true, - isRvb = false}, - preError)), - region = Apat.region p}) - val bodyRegion = Aexp.region body - val body = elabExp (body, nest, NONE) - val body = - Cexp.enterLeave - (body, - profileBody - andalso !Control.profileBranch, - fn () => - let - open Layout - val name = - concat [""] - in - SourceInfo.function - {name = name :: nest, - region = bodyRegion} - end) - val _ = - Option.app - (resultType, fn t => - unify - (elabType t, Cexp.ty body, - fn (l1, l2) => - (Atype.region t, - str "function result type disagrees with expression", - align - [seq [str "result type: ", l1], - seq [str "expression: ", l2], - seq [str "in: ", lay ()]]))) - in - {body = body, - bodyRegion = bodyRegion, - lay = lay, - pats = pats} - end)) - val numArgs = - Vector.fold - (rs, Vector.length (#pats (Vector.sub (rs, 0))), - fn (r,numArgs) => - Int.max (Vector.length (#pats r), numArgs)) - val argTypes = - Vector.tabulate - (numArgs, fn i => - let - val t = Type.new () - val _ = - Vector.foreach - (rs, fn {pats, ...} => - if Vector.length pats > i - then let - val {pat, region} = - Vector.sub (pats, i) - in - unify - (t, Cpat.ty pat, fn (l1, l2) => - (region, - str "function with argument of different types", - align [seq [str "argument: ", l2], - seq [str "previous: ", l1], - lay ()])) - end - else ()) - in - t - end) - val t = Cexp.ty (#body (Vector.sub (rs, 0))) - val _ = - Vector.foreach - (rs, fn {body, bodyRegion, ...} => - unify - (t, Cexp.ty body, fn (l1, l2) => - (bodyRegion, - str "function with result of different types", - align [seq [str "result: ", l2], - seq [str "previous: ", l1], - lay ()]))) - val xs = - Vector.tabulate (numArgs, fn _ => - Var.newNoname ()) - fun make (i: int): Cexp.t = - if i = Vector.length xs - then - let - val e = - Cexp.casee - {kind = "function", - lay = lay, - nest = nest, - noMatch = Cexp.RaiseMatch, - nonexhaustiveExnMatch = nonexhaustiveExnMatch (), - nonexhaustiveMatch = nonexhaustiveMatch (), - redundantMatch = redundantMatch (), - region = region, - rules = - Vector.map - (rs, fn {body, lay, pats, ...} => - let - val pats = - Vector.map (pats, #pat) - in - {exp = body, - lay = SOME lay, - pat = - (Cpat.make - (Cpat.Tuple pats, - Type.tuple - (Vector.map (pats, Cpat.ty))))} - end), - test = - Cexp.tuple - (Vector.map2 - (xs, argTypes, Cexp.var))} - in - Cexp.enterLeave - (e, profileBody, sourceInfo) - end - else - let - val body = make (i + 1) - val argType = Vector.sub (argTypes, i) - in - Cexp.make - (Cexp.Lambda - (Lambda.make - {arg = Vector.sub (xs, i), - argType = argType, + (seq [Apat.layoutFlatApp pats, + case resultType of + NONE => empty + | SOME rt => seq [str ": ", + Atype.layout rt], + str " = ", + Aexp.layout body]) + val regionClause = + Region.append (regionPats, regionBody) + val {args = pats, func} = + Parse.parseClause (pats, E, ctxt) + in + {body = body, + func = func, + layClause = layClause, + layPats = layPats, + layPatsPrefix = layPatsPrefix, + pats = pats, + regionClause = regionClause, + regionPats = regionPats, + resultType = resultType} + end) + val regionFb = + Region.append + (#regionClause (Vector.first clauses), + #regionClause (Vector.last clauses)) + val {pats = pats0, func as func0, layClause = layClause0, ...} = + Vector.first clauses + val layFunc0 = fn () => str (Avar.toString func0) + fun err (reg, msg, desc, layN, lay0) = + Control.error + (reg, + seq [str msg], + align [seq [str desc, approximate (layN ())], + seq [str "previous: ", approximate (lay0 ())], + ctxtFb ()]) + val _ = + Vector.foreach + (clauses, fn {func = funcN, pats = patsN, layClause = layClauseN, regionPats = regionPatsN, ...} => + let + val layFuncN = fn () => str (Avar.toString funcN) + val _ = + if Avar.equals (func, funcN) + then () + else err (Avar.region funcN, + "function clause with different name", + "name: ", layFuncN, layFunc0) + val _ = + if Vector.length pats0 = Vector.length patsN + then () + else err (regionPatsN, + "function clause with different number of arguments", + "clause: ", layClauseN, layClause0) + in + () + end) + val numArgs = + Vector.fold + (clauses, ~1, fn (r, numArgs) => + Int.max (Vector.length (#pats r), numArgs)) + in + {clauses = clauses, + ctxtFb = ctxtFb, + func = func, + numArgs = numArgs, + regionFb = regionFb} + end) + val _ = + Vector.fold + (fbs, [], fn ({func = f, ...}, ac) => + if List.exists (ac, fn f' => Avar.equals (f, f')) + then + (Control.error + (Avar.region f, + seq [str "duplicate function definition: ", + Avar.layout f], + ctxt ()) + ; ac) + else f :: ac) + val fbs = + Vector.map + (fbs, fn {clauses, ctxtFb, func, numArgs, regionFb} => + let + val argTys = Vector.tabulate (numArgs, fn _ => Type.new ()) + val resTy = Type.new () + val clauses = + Vector.map + (clauses, fn {body, layPats, layPatsPrefix, pats, regionPats, resultType, ...} => + let + val elaboratePat = elaboratePat () + val (pats, bindss) = + (Vector.unzip o Vector.mapi) + (pats, fn (i, pat) => + let + val regionPat = Apat.region pat + val (pat, binds) = + elaboratePat + (pat, E, + {bind = false, + isRvb = false}) + val _ = + unify + (Vector.sub (argTys, i), Cpat.ty pat, fn (l1, l2) => + (regionPat, + str "function clause with argument of different type", + align [seq [str "argument: ", l2], + seq [str "previous: ", l1], + ctxtFb ()])) + in + (pat, binds) + end) + val binds = Vector.concatV (Vector.rev bindss) + val resultType = + Option.map + (resultType, fn resultType => + let + val regionResultType = Atype.region resultType + val resultType = elabType (resultType, {bogusAsUnknown = true}) + val _ = + unify + (resTy, resultType, + fn (l1, l2) => + (regionResultType, + str "function clause with result constraint of different type", + align [seq [str "constraint: ", l2], + seq [str "previous: ", l1], + ctxtFb ()])) + in + (resultType, regionResultType) + end) + in + {binds = binds, body = body, - mayInline = true}), - Type.arrow (argType, Cexp.ty body)) - end - val lambda = make 0 - val _ = - unify - (Cexp.ty lambda, ty, fn (l1, l2) => - (Avar.region func, - str "Recursive use of function disagrees with its type", - align [seq [str "expects: ", l1], - seq [str "but got: ", l2], - lay ()])) - val lambda = - case Cexp.node lambda of - Cexp.Lambda l => l - | _ => Lambda.bogus - in - {lambda = lambda, - ty = ty, - var = var} - end) - val {bound, schemes, unable} = - close (Vector.map (decs, fn {ty, ...} => - {isExpansive = false, - ty = ty})) - val () = reportUnable unable - val _ = checkSchemes (Vector.zip - (Vector.map (decs, #var), - schemes)) - val _ = setBound bound - val _ = - Vector.foreach3 - (fbs, decs, schemes, - fn ({func, ...}, {var, ...}, scheme) => - (Env.extendVar (E, func, var, scheme, - {isRebind = true}) - ; unmarkFunc var)) - val decs = - Vector.map (decs, fn {lambda, var, ...} => - {lambda = lambda, var = var}) - in - Decs.single (Cdec.Fun {decs = decs, - tyvars = bound}) + layPats = layPats, + layPatsPrefix = layPatsPrefix, + pats = pats, + regionPats = regionPats, + resultType = resultType} + end) + val funTy = + let + fun chk ty = + if Type.isUnknown ty + then Type.new () + else ty + in + if Vector.forall (argTys, Type.isUnknown) + andalso Type.isUnknown resTy + then Type.new () + else Vector.foldr (Vector.map (argTys, chk), chk resTy, Type.arrow) + end + val funcVid = Avid.fromVar func + val _ = + Avid.checkRedefineSpecial + (funcVid, + {allowIt = true, + ctxt = ctxtFb, + keyword = "fun"}) + val _ = + checkConRedefine + (funcVid, "fun", ctxtFb) + val var = Var.fromAst func + val _ = + Env.extendVar + (E, func, var, + Scheme.fromType funTy, + {isRebind = false}) + val _ = + markFunc var + in + {argTys = argTys, + clauses = clauses, + ctxtFb = ctxtFb, + func = func, + funTy = funTy, + regionFb = regionFb, + resTy = resTy, + var = var} + end) + val fbs = + Vector.map + (fbs, fn {argTys, clauses, ctxtFb, func, funTy, regionFb, resTy, var, ...} => + let + val nest = Avar.toString func :: nest + val resultTypeConstraint = Vector.exists (clauses, Option.isSome o #resultType) + val rules = + Vector.map + (clauses, fn {binds, body, layPats, layPatsPrefix, pats, regionPats, resultType} => + let + val regionBody = Aexp.region body + val body = + Env.scope + (E, fn () => + (Vector.foreach + (binds, fn (x, x', ty) => + Env.extendVar + (E, x, x', Scheme.fromType ty, + {isRebind = false})) + ; elabExp (body, nest, NONE))) + val body = + Cexp.enterLeave + (body, + profileBody andalso !Control.profileBranch, + fn () => + SourceInfo.function + {name = ("") :: nest, + region = regionBody}) + val _ = + case resultType of + SOME (resultType, regionResultType) => + unify + (resultType, Cexp.ty body, + fn (l1, l2) => + (Region.append (regionResultType, regionBody), + seq [if Vector.length clauses = 1 + then str "function " + else str "function clause ", + str "expression and result constraint disagree"], + align [seq [str "expression: ", l2], + seq [str "constraint: ", l1], + ctxtFb ()])) + | NONE => + if resultTypeConstraint + then unify + (resTy, Cexp.ty body, fn (l1, l2) => + (regionBody, + str "function clause expression and result constraint disagree", + align [seq [str "expression: ", l2], + seq [str "constraint: ", l1], + ctxtFb ()])) + else unify + (resTy, Cexp.ty body, fn (l1, l2) => + (regionBody, + str "function clause with expression of different type", + align [seq [str "expression: ", l2], + seq [str "previous: ", l1], + ctxtFb ()])) + in + {exp = body, + layPat = SOME layPats, + pat = Cpat.tuple pats, + regionPat = regionPats} + end) + val args = + Vector.map + (argTys, fn argTy => + (Var.newNoname (), argTy)) + fun check () = + unify + (Vector.foldr (argTys, resTy, Type.arrow), funTy, fn (l1, l2) => + (Avar.region func, + seq [str "recursive use of function disagrees with function declaration type: ", + Avar.layout func], + align [seq [str "recursive use: ", l2], + seq [str "function type: ", l1], + ctxt ()])) + val body = + Cexp.casee + {ctxt = ctxtFb, + kind = ("function", "clause"), + nest = nest, + matchDiags = matchDiagsFromNoMatch Cexp.RaiseMatch, + noMatch = Cexp.RaiseMatch, + region = regionFb, + rules = rules, + test = Cexp.tuple (Vector.map (args, Cexp.var))} + val body = + Cexp.enterLeave + (body, + profileBody, + fn () => + SourceInfo.function + {name = nest, + region = regionFb}) + val lambda = + Vector.foldr + (args, body, fn ((arg, argTy), body) => + Cexp.make + (Cexp.Lambda + (Lambda.make + {arg = arg, + argType = argTy, + body = body, + mayInline = true}), + Type.arrow (argTy, Cexp.ty body))) + val lambda = + case Cexp.node lambda of + Cexp.Lambda lambda => lambda + | _ => Lambda.bogus + in + {check = check, + func = func, + funTy = funTy, + lambda = lambda, + var = var} + end) + val _ = + Vector.foreach + (fbs, fn {check, ...} => + check ()) + val {bound, schemes} = + close + (tyvars', + Vector.map + (fbs, fn {func, funTy, ...} => + {isExpansive = false, + ty = funTy, + var = func}), + {error = generalizeError, + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) + val _ = + checkSchemes + (Vector.zip + (Vector.map (fbs, #func), + schemes)) + val _ = setBound bound + val _ = + Vector.foreach2 + (fbs, schemes, + fn ({func, var, ...}, scheme) => + (Env.extendVar + (E, func, var, scheme, + {isRebind = true}) + ; unmarkFunc var)) + val decs = + Vector.map + (fbs, fn {lambda, var, ...} => + {lambda = lambda, + var = var}) + in + Decs.single + (Cdec.Fun {decs = decs, + tyvars = bound}) + end) end | Adec.Local (d, d') => - Env.localCore - (E, - fn () => elabDec (d, false), - fn decs => Decs.append (decs, elabDec (d', isTop))) + let + val res = + Env.localCore + (E, + fn () => elabDec (d, false), + fn decs => Decs.append (decs, elabDec (d', isTop))) + in + res + end | Adec.Open paths => let (* The following code is careful to first lookup all of the @@ -2288,268 +2734,305 @@ Decs.empty end | Adec.Overload (p, x, tyvars, ty, xs) => - (check (ElabControl.allowOverload, "_overload", region) - ; let - (* Lookup the overloads before extending the var in case - * x appears in the xs. - *) - val ovlds = - Vector.concatV - (Vector.map - (xs, fn x => - case Env.lookupLongvid (E, x) - of (Vid.Var v, t) => Vector.new1 (Longvid.region x, (v, t)) - | (Vid.Overload (_, vs), _) => + TyvarEnv.scope + (tyvars, fn tyvars' => + let + val {unify, ...} = DiagUtils.make E + val () = check (ElabControl.allowOverload, "_overload", region) + (* Lookup the overloads before extending the var in case + * x appears in the xs. + *) + val ovlds = + Vector.concatV + (Vector.map + (xs, fn x => + case Env.lookupLongvid (E, x) of + NONE => Vector.new0 () + | SOME (Vid.Var v, t) => + Vector.new1 (Longvid.region x, (v, t)) + | SOME (Vid.Overload (_, vs), _) => Vector.map (vs, fn vt => (Longvid.region x, vt)) - | _ => + | _ => (Control.error (Longvid.region x, str "cannot overload", seq [str "constructor: ", Longvid.layout x]) ; Vector.new0 ()))) - val s = - Scheme.make {canGeneralize = false, - tyvars = tyvars, - ty = elabType ty} - val _ = - Vector.foreach - (ovlds, - fn (_, (_, NONE)) => () - | (r, (_, SOME s')) => let - val is = Scheme.instantiate s - val is' = Scheme.instantiate s' - in - unify - (#instance is, - #instance is', - fn (l1, l2) => - (r, - str "variant does not unify with overload", - align [seq [str "overload: ", l1], - seq [str "variant: ", l2], - lay ()])) - end) - val _ = - Env.extendOverload - (E, p, x, Vector.map (ovlds, fn (_, vt) => vt), s) - in - Decs.empty - end) + val s = + Scheme.make {canGeneralize = false, + tyvars = tyvars', + ty = elabType (ty, {bogusAsUnknown = false})} + val _ = + Vector.foreach + (ovlds, + fn (r, (_, s')) => + let + val is = Scheme.instantiate s + val is' = Scheme.instantiate s' + in + unify + (#instance is, + #instance is', + fn (l1, l2) => + (r, + str "variant does not unify with overload", + align [seq [str "overload: ", l1], + seq [str "variant: ", l2], + ctxt ()])) + end) + val _ = + Env.extendOverload + (E, p, x, Vector.map (ovlds, fn (_, vt) => vt), s) + in + Decs.empty + end) | Adec.SeqDec ds => Vector.fold (ds, Decs.empty, fn (d, decs) => Decs.append (decs, elabDec (d, isTop))) | Adec.Type typBind => - (elabTypBind typBind + (ignore (elabTypBind typBind) ; Decs.empty) | Adec.Val {tyvars, rvbs, vbs} => let - val close = - TypeEnv.close (tyvars, {useBeforeDef = useBeforeDef}) - (* Must do all the es and rvbs before the ps because of - * scoping rules. - *) - val vbs = - Vector.map - (vbs, fn {exp, pat, ...} => - let - fun lay () = - let - open Layout - in - seq [str "in: ", - approximate - (seq [Apat.layout pat, - str " = ", Aexp.layout exp])] - end - val patRegion = Apat.region pat - val expRegion = Aexp.region exp - val exp = elabExp (exp, nest, Apat.getName pat) - val exp = - Cexp.enterLeave - (exp, - profileBody - andalso !Control.profileVal - andalso Cexp.isExpansive exp, fn () => - let - val name = - concat [""] - in - SourceInfo.function {name = name :: nest, - region = expRegion} - end) - in - {exp = exp, - expRegion = expRegion, - lay = lay, - pat = pat, - patRegion = patRegion} - end) - val {markFunc, setBound, unmarkFunc} = recursiveFun () - val elaboratePat = elaboratePat () - val rvbs = - Vector.map - (rvbs, fn {pat, match} => - let - val region = Apat.region pat - val (pat, bound) = - elaboratePat (pat, E, {bind = false, - isRvb = true}, - preError) - val (nest, var, ty) = - if 0 = Vector.length bound - then ("rec" :: nest, - Var.newNoname (), - Type.new ()) - else - let - val (x, x', t) = Vector.sub (bound, 0) - in - (Avar.toString x :: nest, x', t) - end - val _ = markFunc var - val scheme = Scheme.fromType ty - val bound = - Vector.map - (bound, fn (x, _, _) => - (Acon.ensureRedefine (Avid.toCon - (Avid.fromVar x)) - ; Env.extendVar (E, x, var, scheme, - {isRebind = false}) - ; (x, var, ty))) - in - {bound = bound, - match = match, - nest = nest, - pat = pat, - region = region, - var = var} - end) - val rvbs = - Vector.map - (rvbs, fn {bound, match, nest, pat, var, ...} => - let - val {argType, region, resultType, rules} = - elabMatch (match, preError, nest) - val _ = - unify - (Cpat.ty pat, - Type.arrow (argType, resultType), - fn (l1, l2) => - (region, - str "function type disagrees with recursive uses", - align [seq [str "function type: ", l1], - seq [str "recursive uses: ", l2], - lay ()])) - val arg = Var.newNoname () - val body = - Cexp.enterLeave - (Cexp.casee {kind = "function", - lay = lay, - nest = nest, - noMatch = Cexp.RaiseMatch, - nonexhaustiveExnMatch = nonexhaustiveExnMatch (), - nonexhaustiveMatch = nonexhaustiveMatch (), - redundantMatch = redundantMatch (), - region = region, - rules = rules, - test = Cexp.var (arg, argType)}, - profileBody, - fn () => SourceInfo.function {name = nest, - region = region}) - val lambda = - Lambda.make {arg = arg, - argType = argType, - body = body, - mayInline = true} - in - {bound = bound, - lambda = lambda, - var = var} - end) - val boundVars = - Vector.map - (Vector.concatV (Vector.map (rvbs, #bound)), - fn x => (x, {isExpansive = false, - isRebind = true})) - val rvbs = - Vector.map - (rvbs, fn {bound, lambda, var} => - (Vector.foreach (bound, unmarkFunc o #2) - ; {lambda = lambda, - var = var})) - val vbs = - Vector.map - (vbs, - fn {exp, expRegion, lay, pat, patRegion, ...} => - let - val (pat, bound) = - elaboratePat (pat, E, {bind = false, - isRvb = false}, preError) - val _ = - unify - (Cpat.ty pat, Cexp.ty exp, fn (p, e) => - (patRegion, - str "pattern and expression disagree", - align [seq [str "pattern: ", p], - seq [str "expression: ", e], - lay ()])) - in - {bound = bound, - exp = exp, - expRegion = expRegion, - lay = lay, - pat = pat, - patRegion = patRegion} - end) - val boundVars = - Vector.concat - [boundVars, - Vector.concatV - (Vector.map - (vbs, fn {bound, exp, ...} => - (Vector.map - (bound, fn z => - (z, {isExpansive = Cexp.isExpansive exp, - isRebind = false})))))] - val {bound, schemes, unable} = - close - (Vector.map - (boundVars, fn ((_, _, ty), {isExpansive, ...}) => - {isExpansive = isExpansive, ty = ty})) - val () = reportUnable unable - val () = checkSchemes (Vector.zip - (Vector.map (boundVars, #2 o #1), - schemes)) - val () = setBound bound - val () = - Vector.foreach2 - (boundVars, schemes, - fn (((x, x', _), {isRebind, ...}), scheme) => - Env.extendVar (E, x, x', scheme, - {isRebind = isRebind})) - val vbs = - Vector.map (vbs, fn {exp, lay, pat, patRegion, ...} => - {exp = exp, - lay = lay, - nest = nest, - pat = pat, - patRegion = patRegion}) - (* According to page 28 of the Definition, we should - * issue warnings for nonexhaustive valdecs only when it's - * not a top level dec. It seems harmless enough to go - * ahead and always issue them. - *) + val close = TypeEnv.close {region = region} in - Decs.single - (Cdec.Val {nonexhaustiveExnMatch = nonexhaustiveExnMatch (), - nonexhaustiveMatch = nonexhaustiveMatch (), - rvbs = rvbs, - tyvars = bound, - vbs = vbs}) + TyvarEnv.scope + (tyvars, fn tyvars' => + let + val {layoutPrettyTycon, layoutPrettyTyvar, unify, ...} = + DiagUtils.make E + val {vbs = layVbs, rvbs = layRvbs} = + Adec.layoutVal {tyvars = tyvars, vbs = vbs, rvbs = rvbs} + (* Must do all the es and rvbs before the ps because of + * scoping rules. + *) + val vbs = + Vector.map2 + (vbs, layVbs, fn ({exp, pat, ...}, layVb) => + let + fun ctxtVb () = + seq [str "in: ", approximate (layVb ())] + fun layPat () = Apat.layout pat + val regionPat = Apat.region pat + val regionExp = Aexp.region exp + val exp = elabExp (exp, nest, Apat.getName pat) + val exp = + Cexp.enterLeave + (exp, + profileBody + andalso !Control.profileVal + andalso Cexp.isExpansive exp, fn () => + let + val name = + concat [""] + in + SourceInfo.function {name = name :: nest, + region = regionExp} + end) + in + {ctxtVb = ctxtVb, + exp = exp, + layPat = layPat, + pat = pat, + regionExp = regionExp, + regionPat = regionPat} + end) + val {markFunc, setBound, unmarkFunc} = recursiveFun () + val elaboratePat = elaboratePat () + val rvbs = + Vector.map2 + (rvbs, layRvbs, fn ({pat, match}, layRvb) => + let + fun ctxtRvb () = + seq [str "in: ", approximate (layRvb ())] + val regionPat = Apat.region pat + val (pat, bound) = + elaboratePat (pat, E, {bind = false, isRvb = true}) + val (nest, var) = + if Vector.length bound = 1 + andalso (Type.isUnknown (Cpat.ty pat) + orelse Type.isArrow (Cpat.ty pat)) + then let + val (x, x', _) = Vector.first bound + in + (Avar.toString x :: nest, x') + end + else ("_" :: nest, Var.newNoname ()) + val _ = markFunc var + val bound = + Vector.map + (bound, fn (x, _, ty) => + let + val xVid = Avid.fromVar x + val _ = + checkConRedefine + (xVid, "val rec", ctxtRvb) + val _ = + Env.extendVar + (E, x, var, Scheme.fromType ty, + {isRebind = false}) + in + (x, var, ty) + end) + in + {bound = bound, + ctxtRvb = ctxtRvb, + match = match, + nest = nest, + pat = pat, + regionPat = regionPat, + patIsConstrained = not (Type.isUnknown (Cpat.ty pat)), + var = var} + end) + val vbs = + Vector.map + (vbs, + fn {ctxtVb, exp, layPat, pat, regionExp, regionPat, ...} => + let + val (pat, bound) = + elaboratePat (pat, E, {bind = false, isRvb = false}) + val _ = + unify + (Cpat.ty pat, Cexp.ty exp, fn (p, e) => + (Region.append (regionPat, regionExp), + str "pattern and expression disagree", + align [seq [str "pattern: ", p], + seq [str "expression: ", e], + ctxtVb ()])) + in + {bound = bound, + ctxtVb = ctxtVb, + exp = exp, + layPat = layPat, + pat = pat, + regionPat = regionPat} + end) + val rvbs = + Vector.map + (rvbs, fn {bound, ctxtRvb, match, nest, pat, patIsConstrained, regionPat, var, ...} => + let + val {argType, region, resultType, rules} = + elabMatch (match, nest) + fun check () = + unify + (Cpat.ty pat, + Type.arrow (argType, resultType), + fn (l1, l2) => + if patIsConstrained + then (Region.append (regionPat, Amatch.region match), + str "recursive function pattern and expression disagree", + align [seq [str "pattern: ", l1], + seq [str "expression: ", l2], + ctxt ()]) + else (Avar.region (#1 (Vector.first bound)), + seq [str "recursive use of function disagrees with function expression type: ", + Avar.layout (#1 (Vector.first bound))], + align [seq [str "recursive use: ", l1], + seq [str "function type: ", l2], + ctxt ()])) + val arg = Var.newNoname () + val body = + Cexp.enterLeave + (Cexp.casee {ctxt = ctxtRvb, + kind = ("recursive function", "rule"), + nest = nest, + matchDiags = matchDiagsFromNoMatch Cexp.RaiseMatch, + noMatch = Cexp.RaiseMatch, + region = region, + rules = rules, + test = Cexp.var (arg, argType)}, + profileBody, + fn () => SourceInfo.function {name = nest, + region = region}) + val lambda = + Lambda.make {arg = arg, + argType = argType, + body = body, + mayInline = true} + in + {check = check, + bound = bound, + lambda = lambda, + var = var} + end) + val _ = + Vector.foreach + (rvbs, fn {check, ...} => + check ()) + val boundVars = + Vector.concat + [Vector.concatV + (Vector.map + (rvbs, fn {bound, ...} => + ((Vector.rev o Vector.map) + (bound, fn z => + (z, {isExpansive = false, + isRebind = true}))))), + Vector.concatV + (Vector.map + (vbs, fn {bound, exp, ...} => + ((Vector.rev o Vector.map) + (bound, fn z => + (z, {isExpansive = Cexp.isExpansive exp, + isRebind = false})))))] + val {bound, schemes} = + close + (tyvars', + Vector.map + (boundVars, fn ((var, _, ty), {isExpansive, ...}) => + {isExpansive = isExpansive, + ty = ty, + var = var}), + {error = generalizeError, + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) + val _ = + checkSchemes + (Vector.zip + (Vector.map (boundVars, #1 o #1), + schemes)) + val _ = setBound bound + val _ = + Vector.foreach2 + (boundVars, schemes, + fn (((x, x', _), {isRebind, ...}), scheme) => + Env.extendVar + (E, x, x', scheme, + {isRebind = isRebind})) + val _ = + Vector.foreach + (rvbs, fn {var, ...} => + unmarkFunc var) + val vbs = + Vector.map + (vbs, fn {ctxtVb, exp, layPat, pat, regionPat, ...} => + {ctxt = ctxtVb, + exp = exp, + layPat = layPat, + nest = nest, + pat = pat, + regionPat = regionPat}) + val rvbs = + Vector.map + (rvbs, fn {lambda, var, ...} => + {lambda = lambda, + var = var}) + (* According to page 28 of the Definition, we should + * issue warnings for nonexhaustive valdecs only when it's + * not a top level dec. It seems harmless enough to go + * ahead and always issue them. + *) + in + Decs.single + (Cdec.Val {matchDiags = matchDiagsFromNoMatch Cexp.RaiseBind, + rvbs = rvbs, + tyvars = bound, + vbs = vbs}) + end) end val () = case resolveScope () of @@ -2560,126 +3043,146 @@ in decs end) arg - and elabExp (arg: Aexp.t * Nest.t * string option): Cexp.t = + and elabExp (arg: Aexp.t * Nest.t * string option) : Cexp.t = Trace.traceInfo (elabExpInfo, - Layout.tuple3 (Aexp.layout, Nest.layout, Layout.ignore), + Layout.tuple3 + (Aexp.layout, + Nest.layout, + Option.layout String.layout), Cexp.layoutWithType, Trace.assertTrue) (fn (e: Aexp.t, nest, maybeName) => let - val preError = Promise.lazy (fn () => Env.setTyconNames E) - val unify = fn (t, t', f) => unify (t, t', preError, f) - fun lay () = seq [str "in: ", approximate (Aexp.layout e)] - val unify = - fn (a, b, f) => unify (a, b, fn z => - let - val (r, l, l') = f z - in - (r, l, align [l', lay ()]) - end) - val region = Aexp.region e fun elab e = elabExp (e, nest, NONE) + val {layoutPrettyType, layoutPrettyTycon, layoutPrettyTyvar, unify} = + DiagUtils.make E + val layoutPrettyTypeBracket = fn ty => + seq [str "[", #1 (layoutPrettyType ty), str "]"] + fun ctxt () = seq [str "in: ", approximate (Aexp.layout e)] + val unify = fn (a, b, f) => + unify (a, b, fn z => + let + val (r, m, d) = f z + in + (r, m, align [d, ctxt ()]) + end) + val region = Aexp.region e in case Aexp.node e of - Aexp.Andalso (e, e') => + Aexp.Andalso (el, er) => let - val ce = elab e - val ce' = elab e' - fun doit (ce, br) = - unify - (Cexp.ty ce, Type.bool, - fn (l, _) => - (Aexp.region e, - str (concat - [br, " branch of andalso not of type bool"]), - seq [str " branch: ", l])) - val _ = doit (ce, "left") - val _ = doit (ce', "right") + fun doit (e, br) = + let + val ce = elab e + val _ = + unify + (Cexp.ty ce, Type.bool, + fn (l, _) => + (Aexp.region e, + str (concat + [br, " branch of andalso not of type bool"]), + seq [str "branch: ", l])) + in + ce + end + val cel = doit (el, "left") + val cer = doit (er, "right") + val e = Cexp.andAlso (cel, cer) in - Cexp.andAlso (ce, ce') + Cexp.make (Cexp.node e, Type.bool) end - | Aexp.App (e1, e2) => + | Aexp.App (ef, ea) => let - val e1 = elab e1 - val e2 = elab e2 + val cef = elab ef + val cea = elab ea + val isCon = + case Cexp.node cef of + Cexp.Con _ => true + | _ => false val (argType, resultType) = - case Type.deArrowOpt (Cexp.ty e1) of + case Type.deArrowOpt (Cexp.ty cef) of SOME types => types | NONE => let val types = (Type.new (), Type.new ()) val _ = - unify (Cexp.ty e1, Type.arrow types, + unify (Cexp.ty cef, Type.arrow types, fn (l, _) => - (region, - str "function not of arrow type", - seq [str "function: ", l])) + if isCon + then (Aexp.region ef, + str "constant constructor applied to argument", + seq [str "constructor: ", l]) + else (Aexp.region ef, + str "function not of arrow type", + seq [str "function: ", l])) in types end val _ = unify - (argType, Cexp.ty e2, fn (l1, l2) => + (argType, Cexp.ty cea, fn (l1, l2) => (region, - str "function applied to incorrect argument", + seq [str (if isCon then "constructor" else "function"), + str " applied to incorrect argument"], align [seq [str "expects: ", l1], seq [str "but got: ", l2]])) in - Cexp.make (Cexp.App (e1, e2), resultType) + Cexp.make (Cexp.App (cef, cea), resultType) end | Aexp.Case (e, m) => let val e = elab e - val {argType, rules, ...} = elabMatch (m, preError, nest) + val {argType, rules, ...} = elabMatch (m, nest) val _ = unify (Cexp.ty e, argType, fn (l1, l2) => (region, - str "case object and rules disagree", - align [seq [str "object type: ", l1], - seq [str "rules expect: ", l2]])) + str "case object and match argument disagree", + align [seq [str "case object: ", l1], + seq [str "match argument: ", l2]])) in - Cexp.casee {kind = "case", - lay = lay, + Cexp.casee {ctxt = ctxt, + kind = ("case", "rule"), nest = nest, + matchDiags = matchDiagsFromNoMatch Cexp.RaiseMatch, noMatch = Cexp.RaiseMatch, - nonexhaustiveExnMatch = nonexhaustiveExnMatch (), - nonexhaustiveMatch = nonexhaustiveMatch (), - redundantMatch = redundantMatch (), - region = region, + region = Amatch.region m, rules = rules, test = e} end | Aexp.Const c => elabConst (c, + {layoutPrettyType = #1 o layoutPrettyType}, fn (resolve, ty) => Cexp.make (Cexp.Const resolve, ty), {false = Cexp.falsee, true = Cexp.truee}) | Aexp.Constraint (e, t') => let val e = elab e + val t' = elabType (t', {bogusAsUnknown = true}) val _ = unify - (Cexp.ty e, elabType t', fn (l1, l2) => + (Cexp.ty e, t', fn (l1, l2) => (region, str "expression and constraint disagree", - align [seq [str "expects: ", l2], - seq [str "but got: ", l1]])) + align [seq [str "expression: ", l1], + seq [str "constraint: ", l2]])) in - e + Cexp.make (Cexp.node e, t') end - | Aexp.FlatApp items => elab (Parse.parseExp (items, E, lay)) - | Aexp.Fn m => + | Aexp.FlatApp items => elab (Parse.parseExp (items, E, ctxt)) + | Aexp.Fn match => let val nest = case maybeName of NONE => "fn" :: nest | SOME s => s :: nest val {arg, argType, body} = - elabMatchFn (m, preError, nest, "function", lay, - Cexp.RaiseMatch) + elabMatchFn + (match, nest, ctxt, + ("function", "rule"), Cexp.RaiseMatch) val body = Cexp.enterLeave (body, @@ -2697,8 +3200,9 @@ let val try = elab try val {arg, argType, body} = - elabMatchFn (match, preError, nest, "handler", lay, - Cexp.RaiseAgain) + elabMatchFn + (match, nest, ctxt, + ("handler", "rule"), Cexp.RaiseAgain) val _ = unify (Cexp.ty try, Cexp.ty body, fn (l1, l2) => @@ -2710,8 +3214,8 @@ unify (argType, Type.exn, fn (l1, _) => (Amatch.region match, - seq [str "handler handles wrong type: ", l1], - empty)) + str "handler match argument not of type exn", + seq [str "argument: ", l1])) in Cexp.make (Cexp.Handle {catch = (arg, Type.exn), handler = body, @@ -2728,7 +3232,7 @@ (Cexp.ty a', Type.bool, fn (l1, _) => (Aexp.region a, str "if test not of type bool", - seq [str "test type: ", l1])) + seq [str "test: ", l1])) val _ = unify (Cexp.ty b', Cexp.ty c', fn (l1, l2) => @@ -2754,17 +3258,54 @@ Cexp.iff (a', b', c') end | Aexp.Let (d, e) => - Env.scope - (E, fn () => - let - val time = Time.now () - val d = Decs.toVector (elabDec (d, nest, false)) - val e = elab e - val ty = Cexp.ty e - val () = Type.minTime (ty, time) - in - Cexp.make (Cexp.Let (d, e), ty) - end) + let + val res = + Env.scope + (E, fn () => + let + val time = Time.now () + val d' = Decs.toVector (elabDec (d, nest, false)) + val e' = elab e + val ty = Cexp.ty e' + val ty = + case Type.checkTime (ty, time, + {layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) of + NONE => ty + | SOME (lay, ty, {tycons, ...}) => + let + val tycons = + List.map + (tycons, fn c => + (c, layoutPrettyTycon c)) + val tycons = + List.insertionSort + (tycons, fn ((_, l1), (_, l2)) => + String.<= (Layout.toString l1, + Layout.toString l2)) + val _ = + Control.error + (region, + seq [str "type of let has ", + if List.length tycons > 1 + then str "local types that would escape their scope: " + else str "local type that would escape its scope: ", + seq (Layout.separate (List.map (tycons, #2), ", "))], + align [seq [str "type: ", lay], + (align o List.map) + (tycons, fn (c, _) => + seq [str "escape from: ", + Region.layout (Tycon.region c)]), + ctxt ()]) + in + ty + end + in + Cexp.make (Cexp.Let (d', e'), ty) + end) + in + res + end | Aexp.List es => let val es' = Vector.map (es, elab) @@ -2773,30 +3314,36 @@ unifyList (Vector.map2 (es, es', fn (e, e') => (Cexp.ty e', Aexp.region e)), - preError, lay)) + unify)) end - | Aexp.Orelse (e, e') => + | Aexp.Orelse (el, er) => let - val ce = elab e - val ce' = elab e' - fun doit (ce, br) = - unify - (Cexp.ty ce, Type.bool, - fn (l, _) => - (Aexp.region e, - str (concat - [br, " branch of orelse not of type bool"]), - seq [str " branch: ", l])) - val _ = doit (ce, "left") - val _ = doit (ce', "right") + fun doit (e, br) = + let + val ce = elab e + val _ = + unify + (Cexp.ty ce, Type.bool, + fn (l, _) => + (Aexp.region e, + str (concat + [br, " branch of orelse not of type bool"]), + seq [str "branch: ", l])) + in + ce + end + val cel = doit (el, "left") + val cer = doit (er, "right") + val e = Cexp.orElse (cel, cer) in - Cexp.orElse (ce, ce') + Cexp.make (Cexp.node e, Type.bool) end + | Aexp.Paren e => elab e | Aexp.Prim kind => let fun elabAndExpandTy ty = let - val elabedTy = elabType ty + val elabedTy = elabType (ty, {bogusAsUnknown = false}) val expandedTy = Type.hom (elabedTy, {con = Type.con, @@ -2840,21 +3387,20 @@ (Var.newNoname (), t)) in Cexp.casee - {kind = "", - lay = fn _ => Layout.empty, + {ctxt = fn _ => empty, + kind = ("", ""), nest = [], + matchDiags = matchDiagsFromNoMatch Cexp.Impossible, noMatch = Cexp.Impossible, - nonexhaustiveExnMatch = Control.Elaborate.DiagDI.Default, - nonexhaustiveMatch = Control.Elaborate.DiagEIW.Ignore, - redundantMatch = Control.Elaborate.DiagEIW.Ignore, region = Region.bogus, rules = Vector.new1 {exp = app (Vector.map (vars, Cexp.var)), - lay = NONE, + layPat = NONE, pat = Cpat.tuple (Vector.map - (vars, Cpat.var))}, + (vars, Cpat.var)), + regionPat = Region.bogus}, test = Cexp.var (arg, argType)} end in @@ -2874,57 +3420,15 @@ wrap (etaNoWrap {expandedTy = expandedTy, prim = prim}, elabedTy) - fun lookConst {default: string option, - elabedTy, expandedTy, - name: string} = + val lookConst = fn {default, elabedTy, expandedTy, name} => let - fun bug () = - let - open Layout - val _ = - Control.error - (region, - seq [str "strange constant type: ", - Type.layout expandedTy], - empty) - in - Error.bug "ElaborateCore.elabExp.lookConst" - end + val finish = + lookConst {default = default, + expandedTy = expandedTy, + name = name, + region = region} in - case Type.deConOpt expandedTy of - NONE => bug () - | SOME (c, ts) => - let - val ct = - if Tycon.equals (c, Tycon.bool) - then ConstType.Bool - else if Tycon.isIntX c - then case Tycon.deIntX c of - NONE => bug () - | SOME is => - ConstType.Word - (WordSize.fromBits (IntSize.bits is)) - else if Tycon.isRealX c - then ConstType.Real (Tycon.deRealX c) - else if Tycon.isWordX c - then ConstType.Word (Tycon.deWordX c) - else if Tycon.equals (c, Tycon.vector) - andalso 1 = Vector.length ts - andalso - (case (Type.deConOpt - (Vector.sub (ts, 0))) of - NONE => false - | SOME (c, _) => - Tycon.isCharX c - andalso (Tycon.deCharX c = CharSize.C8)) - then ConstType.String - else bug () - val finish = - fn () => ! Const.lookup ({default = default, - name = name}, ct) - in - Cexp.make (Cexp.Const finish, elabedTy) - end + Cexp.make (Cexp.Const finish, elabedTy) end val check = fn (c, n) => check (c, n, region) datatype z = datatype Ast.PrimKind.t @@ -2941,7 +3445,8 @@ elabedTy = elabedTy, expandedTy = expandedTy, name = name, - region = region} + region = region, + layoutPrettyType = #1 o layoutPrettyType} end | BuildConst {name, ty} => let @@ -2954,7 +3459,7 @@ lookConst {default = NONE, elabedTy = elabedTy, expandedTy = expandedTy, - name = name} + name = "buildConst::" ^ name} end | CommandLineConst {name, ty, value} => let @@ -2966,6 +3471,7 @@ val value = elabConst (value, + {layoutPrettyType = #1 o layoutPrettyType}, fn (resolve, _) => case resolve () of Const.Word w => @@ -2976,7 +3482,7 @@ lookConst {default = SOME value, elabedTy = elabedTy, expandedTy = expandedTy, - name = name} + name = "cmdLineConst::" ^ name} end | Const {name, ty} => let @@ -2989,7 +3495,7 @@ lookConst {default = NONE, elabedTy = elabedTy, expandedTy = expandedTy, - name = name} + name = "const::" ^ name} end | Export {attributes, name, ty} => let @@ -3001,7 +3507,7 @@ Control.error (region, str "invalid type for _export", - Type.layoutPretty elabedTy) + #1 (layoutPrettyType elabedTy)) val (expandedCfTy, elabedExportTy) = Exn.withEscape (fn escape => @@ -3036,20 +3542,17 @@ elabedTy = elabedTy, expandedTy = expandedCfTy, name = name, - region = region}))) + region = region, + layoutPrettyType = #1 o layoutPrettyType}))) val _ = unify (Cexp.ty exp, Type.arrow (expandedCfTy, Type.unit), fn (l1, l2) => - let - open Layout - in - (region, - str "_export unify bug", - align [seq [str "inferred: ", l1], - seq [str "expanded: ", l2]]) - end) + (region, + str "_export unify bug", + align [seq [str "inferred: ", l1], + seq [str "expanded: ", l2]])) in wrap (exp, elabedExportTy) end @@ -3063,7 +3566,7 @@ Control.error (region, str "invalid type for _import", - Type.layoutPretty elabedTy) + #1 (layoutPrettyType elabedTy)) val (expandedFPtrTy, expandedCfTy) = Exn.withEscape (fn escape => @@ -3096,7 +3599,8 @@ name = NONE, region = region, elabedTy = elabedTy, - expandedTy = expandedCfTy}}, + expandedTy = expandedCfTy, + layoutPrettyType = #1 o layoutPrettyType}}, mayInline = true}, elabedTy) end @@ -3113,7 +3617,8 @@ name = SOME name, region = region, elabedTy = elabedTy, - expandedTy = expandedTy}}) + expandedTy = expandedTy, + layoutPrettyType = #1 o layoutPrettyType}}) end | ISymbol {ty} => let @@ -3124,7 +3629,8 @@ in symbolIndirect {elabedTy = elabedTy, expandedTy = expandedTy, - region = region} + region = region, + layoutPrettyType = #1 o layoutPrettyType} end | Prim {name, ty} => let @@ -3141,7 +3647,7 @@ str (concat ["unknown primitive: ", name]), empty) - ; Prim.bogus) + ; Prim.MLton_bogus) | SOME p => p in eta {elabedTy = elabedTy, @@ -3159,7 +3665,8 @@ elabedTy = elabedTy, expandedTy = expandedTy, name = name, - region = region} + region = region, + layoutPrettyType = #1 o layoutPrettyType} end end | Aexp.Raise exn => @@ -3170,8 +3677,8 @@ unify (Cexp.ty exn, Type.exn, fn (l1, _) => (region, - str "raise of non exception", - seq [str "exp type: ", l1])) + str "raise object not of type exn", + seq [str "object: ", l1])) val resultType = Type.new () in Cexp.enterLeave @@ -3182,7 +3689,7 @@ end | Aexp.Record r => let - val r = Record.map (r, elab) + val r = Record.map (r, elab o #2) val ty = Type.record (SortedRecord.fromVector @@ -3198,28 +3705,23 @@ (* Diagnose expressions before a ; that don't return unit. *) val _ = let + (* Technically, wrong scope for region; + * but saving environment would probably + * be expensive. + *) fun doit f = - List.push - (sequenceNonUnitChecks, fn () => - Vector.foreachi - (es', fn (i, e') => - if i = last - then () - else let - val ty = Cexp.ty e' - in - if Type.isUnit ty - then () - else let - val e = Vector.sub (es, i) - open Layout - in - f (Aexp.region e, - str "sequence expression not of type unit", - align [seq [str "type: ", Type.layoutPrettyBracket ty], - seq [str "in: ", approximate (Aexp.layout e)]]) - end - end)) + Vector.foreachi2 + (es, es', fn (i, e, e') => + if i = last orelse Type.isUnit (Cexp.ty e') + then () + else List.push + (sequenceNonUnitChecks, fn () => + if Type.isUnit (Cexp.ty e') + then () + else f (Aexp.region e, + str "sequence expression not of type unit", + align [seq [str "type: ", layoutPrettyTypeBracket (Cexp.ty e')], + ctxt ()]))) in case sequenceNonUnit () of Control.Elaborate.DiagEIW.Error => doit Control.error @@ -3231,13 +3733,12 @@ end | Aexp.Var {name = id, ...} => let - val (vid, scheme) = Env.lookupLongvid (E, id) fun dontCare () = Cexp.var (Var.newNoname (), Type.new ()) in - case scheme of + case Env.lookupLongvid (E, id) of NONE => dontCare () - | SOME scheme => + | SOME (vid, scheme) => let val {args, instance} = Scheme.instantiate scheme fun con c = Cexp.Con (c, args ()) @@ -3253,24 +3754,26 @@ case Vector.peekMap (yts, fn (x, s) => - case s of - NONE => NONE - | SOME s => let - val is = Scheme.instantiate s - in - if Type.canUnify - (instance, #instance is) - then SOME (x, SOME is) + let + val is = Scheme.instantiate s + in + if Type.canUnify + (instance, #instance is) + then SOME (x, SOME is) else NONE - end) of + end) of NONE => let + (* Technically, wrong scope for region; + * but saving environment would probably + * be expensive. + *) val _ = Control.error (region, - seq [str "impossible use of overloaded var: ", + seq [str "variable not overloaded at type: ", str (Longvid.toString id)], - Type.layoutPretty instance) + seq [str "type: ", #1 (layoutPrettyType instance)]) in {id = Var.newNoname (), args = Vector.new0 ()} @@ -3294,6 +3797,17 @@ Cexp.make (e, instance) end end + | Aexp.Vector es => + let + val _ = check (ElabControl.allowVectorExps, "Vector expressions", Aexp.region e) + val es' = Vector.map (es, elab) + in + Cexp.make (Cexp.Vector es', + unifyVector + (Vector.map2 (es, es', fn (e, e') => + (Cexp.ty e', Aexp.region e)), + unify)) + end | Aexp.While {expr, test} => let val test' = elab test @@ -3302,23 +3816,26 @@ (Cexp.ty test', Type.bool, fn (l1, _) => (Aexp.region test, str "while test not of type bool", - seq [str "test type: ", l1])) + seq [str "test: ", l1])) val expr' = elab expr (* Diagnose if expr is not of type unit. *) val _ = let + (* Technically, wrong scope for region; + * but saving environment would probably + * be expensive. + *) fun doit f = - List.push - (sequenceNonUnitChecks, fn () => - let - val ty = Cexp.ty expr' - in - if Type.isUnit ty - then () - else f (Aexp.region expr, - str "while body not of type unit", - seq [str "body type: ", Type.layoutPrettyBracket ty]) - end) + if Type.isUnit (Cexp.ty expr') + then () + else List.push + (sequenceNonUnitChecks, fn () => + if Type.isUnit (Cexp.ty expr') + then () + else f (Aexp.region expr, + str "while body not of type unit", + align [seq [str "body: ", layoutPrettyTypeBracket (Cexp.ty expr')], + ctxt ()])) in case sequenceNonUnit () of Control.Elaborate.DiagEIW.Error => doit Control.error @@ -3329,18 +3846,16 @@ Cexp.whilee {expr = expr', test = test'} end end) arg - and elabMatchFn (m: Amatch.t, preError, nest, kind, lay, noMatch) = + and elabMatchFn (m: Amatch.t, nest, ctxt, kind, noMatch) = let val arg = Var.newNoname () - val {argType, region, rules, ...} = elabMatch (m, preError, nest) + val {argType, region, rules, ...} = elabMatch (m, nest) val body = - Cexp.casee {kind = kind, - lay = lay, + Cexp.casee {ctxt = ctxt, + kind = kind, nest = nest, + matchDiags = matchDiagsFromNoMatch noMatch, noMatch = noMatch, - nonexhaustiveExnMatch = nonexhaustiveExnMatch (), - nonexhaustiveMatch = nonexhaustiveMatch (), - redundantMatch = redundantMatch (), region = region, rules = rules, test = Cexp.var (arg, argType)} @@ -3349,8 +3864,18 @@ argType = argType, body = body} end - and elabMatch (m: Amatch.t, preError, nest: Nest.t) = + and elabMatch (m: Amatch.t, nest: Nest.t) = let + val {unify, ...} = DiagUtils.make E + fun ctxt () = + seq [str "in: ", approximate (Amatch.layout m)] + val unify = fn (a, b, f) => + unify (a, b, fn z => + let + val (r, m, d) = f z + in + (r, m, align [d, ctxt ()]) + end) val region = Amatch.region m val Amatch.T rules = Amatch.node m val argType = Type.new () @@ -3361,35 +3886,26 @@ Env.scope (E, fn () => let - fun lay () = - let - open Layout - in - approximate - (seq [Apat.layout pat, str " => ", Aexp.layout exp]) - end + fun layPat () = approximate (Apat.layout pat) val patOrig = pat val (pat, _) = - elaboratePat () (pat, E, {bind = true, isRvb = false}, - preError) + elaboratePat () (pat, E, {bind = true, isRvb = false}) val _ = unify - (Cpat.ty pat, argType, preError, fn (l1, l2) => + (Cpat.ty pat, argType, fn (l1, l2) => (Apat.region patOrig, - str "rule patterns disagree", + str "rule with pattern of different type", align [seq [str "pattern: ", l1], - seq [str "previous: ", l2], - seq [str "in: ", lay ()]])) + seq [str "previous: ", l2]])) val expOrig = exp val exp = elabExp (exp, nest, NONE) val _ = unify - (Cexp.ty exp, resultType, preError, fn (l1, l2) => + (Cexp.ty exp, resultType, fn (l1, l2) => (Aexp.region expOrig, - str "rule results disagree", + str "rule with result of different type", align [seq [str "result: ", l1], - seq [str "previous: ", l2], - seq [str "in: ", lay ()]])) + seq [str "previous: ", l2]])) val exp = Cexp.enterLeave (exp, @@ -3408,8 +3924,9 @@ end) in {exp = exp, - lay = SOME lay, - pat = pat} + layPat = SOME layPat, + pat = pat, + regionPat = Apat.region patOrig} end)) in {argType = argType, diff -Nru mlton-20130715/mlton/elaborate/elaborate-core.sig mlton-20210117+dfsg/mlton/elaborate/elaborate-core.sig --- mlton-20130715/mlton/elaborate/elaborate-core.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-core.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2012 Matthew Fluet. +(* Copyright (C) 2009,2012,2017 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -14,7 +14,6 @@ structure Decs: DECS structure Env: ELABORATE_ENV sharing Ast = Env.Ast - sharing Ast.Tyvar = CoreML.Tyvar sharing CoreML = Decs.CoreML = Env.CoreML sharing Decs = Env.Decs end diff -Nru mlton-20130715/mlton/elaborate/elaborate-env.fun mlton-20210117+dfsg/mlton/elaborate/elaborate-env.fun --- mlton-20130715/mlton/elaborate/elaborate-env.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-env.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009-2010 Matthew Fluet. +(* Copyright (C) 2009-2010,2015,2017,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,28 +15,52 @@ local open Control.Elaborate in - val nonexhaustiveExnMatch = fn () => current nonexhaustiveExnMatch - val nonexhaustiveMatch = fn () => current nonexhaustiveMatch val warnUnused = fn () => current warnUnused end local + open Layout +in + val align = align + val alignPrefix = alignPrefix + (* val empty = empty *) + val mayAlign = mayAlign + val seq = seq + val str = str + val bracket = fn l => + seq [str "[", l, str "]"] +end + +local open Ast in structure Basid = Basid structure Fctid = Fctid - structure Field = SortedRecord.Field structure Strid = Strid - structure Longvid = Longvid - structure Longstrid = Longstrid structure Longtycon = Longtycon structure Priority = Priority structure Sigid = Sigid - structure SortedRecord = SortedRecord structure Strid = Strid structure Symbol = Symbol end +fun layoutLong (ids: Layout.t list) = + let + open Layout + in + seq (separate (ids, ".")) + end + +fun layoutStrids (ss: Strid.t list): Layout.t = + layoutLong (List.map (ss, Strid.layout)) + +fun layoutLongRev (ss: Strid.t list, id: Layout.t) = + (seq o List.fold) + (ss, [id], fn (s, ls) => + Strid.layout s :: str "." :: ls) +fun toStringLongRev (ss: Strid.t list, id: Layout.t) = + Layout.toString (layoutLongRev (ss, id)) + local open CoreML in @@ -69,95 +93,110 @@ structure Tycon = struct open Tycon - - val admitsEquality = TypeEnv.tyconAdmitsEquality + open TypeEnv.TyconExt end -structure Type = +structure Tyvar = struct - open Type - - fun bracket l = let open Layout in seq [str "[", l, str "]"] end + open Tyvar + open TypeEnv.TyvarExt + fun fromAst a = + makeString (Ast.Tyvar.toString a, + {equality = Ast.Tyvar.isEquality a}) + end - fun explainDoesNotAdmitEquality (t: t): Layout.t = +structure TyvarEnv = + struct + datatype t = T of {cur: (Ast.Tyvar.t * Tyvar.t) list ref, + get: Ast.Tyvar.t -> Tyvar.t list ref} + fun new () = let - open Layout - val wild = (str "_", ({isChar = false}, Tycon.BindingStrength.unit)) - fun con (c, ts) = + val {get: Ast.Tyvar.t -> Tyvar.t list ref, ...} = + Property.get + (Symbol.plist o Ast.Tyvar.toSymbol, + Property.initFun (fn _ => ref [])) + val cur = ref [] + in + T {get = get, cur = cur} + end + fun peekTyvar (T {get, ...}, a) = + case !(get a) of + [] => NONE + | a'::_ => SOME a' + fun lookupTyvar (env, a) = + case peekTyvar (env, a) of + NONE => let - fun keep {showInside: bool} = - Tycon.layoutApp - (c, Vector.map (ts, fn t => - if showInside - then - case t of - NONE => wild - | SOME t => t - else wild)) - datatype z = datatype AdmitsEquality.t - in - case ! (Tycon.admitsEquality c) of - Always => NONE - | Never => SOME (bracket (#1 (keep {showInside = false})), - ({isChar = false}, - Tycon.BindingStrength.unit)) - | Sometimes => - if Vector.exists (ts, Option.isSome) - then SOME (keep {showInside = true}) - else NONE - end - fun record r = - if SortedRecord.forall (r, Option.isNone) - then NONE - else - SOME - (case SortedRecord.detupleOpt r of - NONE => - let - val v = SortedRecord.toVector r - val ending = - if SortedRecord.exists (r, Option.isNone) then - ", ...}" - else - "}" - in - (seq - [str "{", - mayAlign - (separateRight - (Vector.foldr - (v, [], fn ((f, z), ac) => - case z of - NONE => ac - | SOME (z, _) => - seq [Field.layout f, str ": ", z] :: ac), - ",")), - str ending], - ({isChar = false}, Tycon.BindingStrength.unit)) - end - | SOME v => - Tycon.layoutApp - (Tycon.tuple, - Vector.map (v, fn NONE => wild | SOME t => t))) - val exp = - hom (t, {con = con, - expandOpaque = false, - record = record, - replaceSynonyms = false, - var = fn _ => NONE}) - in - case exp of - NONE => str "???" - | SOME (exp, _) => exp + val _ = + Control.error + (Ast.Tyvar.region a, + seq [str "undefined type variable: ", + Ast.Tyvar.layout a], + Layout.empty) + in + NONE + end + | SOME tv => SOME tv + fun scope (T {cur, get, ...}, bs, th) = + let + val bs' = Vector.map (bs, Tyvar.fromAst) + val () = + Vector.foreach2 + (bs, bs', fn (b, b') => + (List.push (cur, (b, b')) + ; List.push (get b, b'))) + val res = th bs' + val () = + Vector.foreach + (bs, fn b => + (ignore (List.pop cur) + ; ignore (List.pop (get b)))) + in + res end - end -structure Scheme = - struct - open Scheme - - fun explainDoesNotAdmitEquality (s: t): Layout.t = - Type.explainDoesNotAdmitEquality (ty s) + val E = new () + val lookupTyvar = fn a => + lookupTyvar (E, a) + val scope = fn (bs, th) => + scope (E, bs, th) + (* + val makeLayoutPretty = fn () => + let + val {destroy, get = layoutPretty, set = setLayoutPretty, ...} = + Property.destGetSet + (Tyvar.plist, Property.initFun Tyvar.layout) + val T {cur, ...} = E + val pre = fn () => + List.foreach + (!cur, fn (a, a') => + setLayoutPretty (a', Ast.Tyvar.layout a)) + val pre = ClearablePromise.delay pre + val destroy = fn () => + (ClearablePromise.clear pre + ; destroy ()) + val layoutPretty = fn a' => + (ClearablePromise.force pre + ; layoutPretty a') + in + {destroy = destroy, + layoutPretty = layoutPretty} + end + *) + val makeLayoutPretty = fn () => + let + fun layoutPretty a' = + let + val T {cur, ...} = E + in + case List.peek (!cur, fn (_, b') => Tyvar.equals (a', b')) of + NONE => Tyvar.layout a' + | SOME (a, _) => Ast.Tyvar.layout a + end + in + {destroy = fn () => (), + layoutPretty = layoutPretty} + end end val insideFunctor = ref false @@ -167,19 +206,16 @@ structure Scope = struct structure Unique = UniqueId () - datatype t = T of {isTop: bool, - unique: Unique.t} + datatype t = T of {unique: Unique.t} local fun make f (T r) = f r in - val isTop = make #isTop val unique = make #unique end - fun new {isTop: bool}: t = - T {isTop = isTop, - unique = Unique.new ()} + fun new (): t = + T {unique = Unique.new ()} fun equals (s, s') = Unique.equals (unique s, unique s') end @@ -188,6 +224,13 @@ sig type 'a t + structure Extend: + sig + val new: {rebind: {domain: 'a, uses: 'a t} option} -> 'a t option + val old: 'a t -> {rebind: {domain: 'a, uses: 'a t} option} -> 'a t option + val fromIsRebind: {isRebind: bool} -> {rebind: {domain: 'a, uses: 'a t} option} -> 'a t option + end + val add: 'a t * 'a -> unit val all: 'a t -> 'a list val clear: 'a t -> unit @@ -216,6 +259,21 @@ fun isUsed (u as T {forceUsed, ...}): bool = !forceUsed orelse hasUse u + + structure Extend = + struct + fun new _ = NONE + fun old uses _ = SOME uses + fun fromIsRebind {isRebind} = + if isRebind + then (fn {rebind} => + case rebind of + NONE => + Error.bug "ElaborateEnv.Uses.Extend.fromIsRebind" + | SOME {domain = _, uses} => + SOME uses) + else new + end end structure Class = @@ -239,7 +297,7 @@ datatype t = Con of Con.t | Exn of Con.t - | Overload of Priority.t * (Var.t * Scheme.t option) vector + | Overload of Priority.t * (Var.t * Scheme.t) vector | Var of Var.t val statusPretty = @@ -248,8 +306,6 @@ | Overload _ => "overload" | Var _ => "variable" - val bogus = Var Var.bogus - fun layout vid = let open Layout @@ -261,8 +317,7 @@ (concat ["Overload (", Layout.toString (Priority.layout p), ")"], - Vector.layout (Layout.tuple2 (Var.layout, - Option.layout Scheme.layout)) + Vector.layout (tuple2 (Var.layout, Scheme.layout)) xts) | Var v => ("Var", Var.layout v) in @@ -278,6 +333,10 @@ | Exn c => SOME c | _ => NONE + val deExn = + fn Exn c => SOME c + | _ => NONE + val class = fn Con _ => Class.Con | Exn _ => Class.Exn @@ -287,25 +346,65 @@ structure TypeStr = struct - structure AdmitsEquality = AdmitsEquality - structure Kind = Kind - structure Tycon = Tycon - - structure Cons = + structure Cons : + sig + type t + val dest: t -> {con: Con.t, + name: Ast.Con.t, + scheme: Scheme.t, + uses: Ast.Vid.t Uses.t} vector + val fromSortedVector: {con: Con.t, + name: Ast.Con.t, + scheme: Scheme.t, + uses: Ast.Vid.t Uses.t} vector -> t + val fromVector: {con: Con.t, + name: Ast.Con.t, + scheme: Scheme.t, + uses: Ast.Vid.t Uses.t} vector -> t + val layout: t -> Layout.t + val map: t * ({con: Con.t, + name: Ast.Con.t, + scheme: Scheme.t, + uses: Ast.Vid.t Uses.t} + -> {con: Con.t, + scheme: Scheme.t, + uses: Ast.Vid.t Uses.t}) -> t + end = struct datatype t = T of {con: Con.t, name: Ast.Con.t, scheme: Scheme.t, uses: Ast.Vid.t Uses.t} vector + fun dest (T v) = v + + val fromSortedVector = T + + fun fromVector v = + (fromSortedVector o QuickSort.sortVector) + (v, fn ({name = name1, ...}, {name = name2, ...}) => + case Ast.Con.compare (name1, name2) of + LESS => true + | EQUAL => true + | GREATER => false) + + fun map (T v, f) = + (T o Vector.map) + (v, fn elt as {name, ...} => + let + val {con, scheme, uses} = + f elt + in + {con = con, + name = name, + scheme = scheme, + uses = uses} + end) + fun layout (T v) = Vector.layout (fn {name, scheme, ...} => - let - open Layout - in - seq [Ast.Con.layout name, - str ": ", Scheme.layout scheme] - end) + seq [Ast.Con.layout name, + str ": ", Scheme.layout scheme]) v end @@ -314,16 +413,15 @@ tycon: Tycon.t} | Scheme of Scheme.t | Tycon of Tycon.t + type t = node - datatype t = T of {kind: Kind.t, - node: node} + val node = fn s => s - local - fun make f (T r) = f r - in - val kind = make #kind - val node = make #node - end + fun kind s = + case node s of + Datatype {tycon, ...} => Tycon.kind tycon + | Scheme s => Scheme.kind s + | Tycon c => Tycon.kind c fun layout t = let @@ -334,75 +432,96 @@ seq [str "Datatype ", record [("tycon", Tycon.layout tycon), ("cons", Cons.layout cons)]] - | Scheme s => Scheme.layout s - | Tycon t => seq [str "Tycon ", Tycon.layout t] + | Scheme s => seq [str "Scheme ", Scheme.layout s] + | Tycon c => seq [str "Tycon ", Tycon.layout c] end fun admitsEquality (s: t): AdmitsEquality.t = case node s of - Datatype {tycon = c, ...} => ! (Tycon.admitsEquality c) + Datatype {tycon = c, ...} => Tycon.admitsEquality c | Scheme s => if Scheme.admitsEquality s then AdmitsEquality.Sometimes else AdmitsEquality.Never - | Tycon c => ! (Tycon.admitsEquality c) + | Tycon c => Tycon.admitsEquality c - fun explainDoesNotAdmitEquality (s: t): Layout.t = + fun explainDoesNotAdmitEquality (s: t, {layoutPrettyTycon}): Layout.t = let - open Layout + fun doitScheme s = + case Scheme.checkEquality (s, {layoutPrettyTycon = layoutPrettyTycon}) of + SOME l => l + | NONE => Error.bug "ElaborateEnv.TypeStr.explainDoesNotAdmitEquality.doitScheme: NONE" in case node s of - Datatype {cons = Cons.T v, ...} => - align - (Vector.toList - (Vector.keepAllMap - (v, fn {name, scheme, ...} => - case (Type.deArrowOpt - (#instance (Scheme.instantiate scheme))) of - NONE => NONE - | SOME (arg, _) => - if Type.admitsEquality arg - then NONE - else - SOME (seq [Ast.Con.layout name, str " of ", - Type.explainDoesNotAdmitEquality arg])))) - | Scheme s => Scheme.explainDoesNotAdmitEquality s - | Tycon c => Tycon.layout c - end + Datatype {cons, ...} => + let + val extra = ref false + val cons = + Vector.toListKeepAllMap + (Cons.dest cons, fn {name, scheme, ...} => + let + val (tyvars, ty) = Scheme.dest scheme + in + case Type.deArrowOpt ty of + NONE => (extra := true; NONE) + | SOME (arg, _) => + let + val argScheme = + Scheme.make {canGeneralize = true, + ty = arg, + tyvars = tyvars} + in + case Scheme.checkEquality (argScheme, {layoutPrettyTycon = layoutPrettyTycon}) of + NONE => (extra := true; NONE) + | SOME l => SOME (seq [Ast.Con.layout name, str " of ", l]) + end + end) - fun abs t = - case node t of - Datatype {tycon, ...} => T {kind = kind t, - node = Tycon tycon} - | _ => t + val cons = + if !extra + then List.snoc (cons, str "...") + else cons + val cons = alignPrefix (cons, "| ") + in + cons + end + | Scheme s => doitScheme s + | Tycon c => doitScheme (Scheme.fromTycon c) + end fun apply (t: t, tys: Type.t vector): Type.t = case node t of Datatype {tycon, ...} => Type.con (tycon, tys) | Scheme s => Scheme.apply (s, tys) - | Tycon t => Type.con (t, tys) - - fun data (tycon, kind, cons) = - T {kind = kind, - node = Datatype {tycon = tycon, cons = cons}} - - fun def (s: Scheme.t, k: Kind.t) = - let - val (tyvars, ty) = Scheme.dest s - in - T {kind = k, - node = (case Type.deEta (ty, tyvars) of - NONE => Scheme s - | SOME c => Tycon c)} - end + | Tycon c => Type.con (c, tys) fun toTyconOpt s = case node s of Datatype {tycon, ...} => SOME tycon - | Scheme _ => NONE + | Scheme s => + let + val (tyvars, ty) = Scheme.dest s + in + case Type.deEta (ty, tyvars) of + NONE => NONE + | SOME c => + if Tycon.equals (c, Tycon.arrow) + orelse Tycon.equals (c, Tycon.tuple) + then NONE + else SOME c + end | Tycon c => SOME c - fun tycon (c, kind) = T {kind = kind, - node = Tycon c} + fun data (tycon, cons) = + Datatype {tycon = tycon, cons = cons} + + val def = Scheme + + val tycon = Tycon + + fun abs t = + case node t of + Datatype {tycon = c, ...} => tycon c + | _ => t end local @@ -412,105 +531,132 @@ end structure Interface = Interface (structure Ast = Ast - structure EnvTypeStr = TypeStr) - -local - open Interface -in - structure FlexibleTycon = FlexibleTycon - structure Status = Status - structure TyconMap = TyconMap -end + structure AdmitsEquality = AdmitsEquality + structure Kind = Kind + structure EnvTycon = Tycon + structure EnvTypeStr = TypeStr + structure Tyvar = Tyvar) structure Interface = struct structure Econs = Cons structure Escheme = Scheme + structure Etycon = Tycon structure Etype = Type structure EtypeStr = TypeStr + structure Etyvar = Tyvar open Interface - fun flexibleTyconToEnv (c: FlexibleTycon.t): EtypeStr.t option = + fun flexibleTyconToEnv (fc: FlexibleTycon.t): EtypeStr.t = let datatype z = datatype FlexibleTycon.realization in - case FlexibleTycon.realization c of - ETypeStr s => s - | TypeStr s => typeStrToEnv s + case FlexibleTycon.realization fc of + SOME (ETypeStr s) => s + | SOME (TypeStr s) => typeStrToEnv s + | NONE => + let + (* A shadowed flexible tycon was not reported as + * a flexible tycon and was not realized. *) + val () = + Assert.assert + ("ElaborateEnv.Interface.flexibleTyconToEnv", + fn () => !Control.numErrors > 0) + val {admitsEquality = ae, kind = k, + prettyDefault = pd, ...} = + FlexibleTycon.dest fc + val pd = "??." ^ pd + val c = + Etycon.make {admitsEquality = ae, + kind = k, + name = "", + prettyDefault = pd, + region = Region.bogus} + val tyStr = EtypeStr.tycon c + val () = FlexibleTycon.realize (fc, tyStr) + in + tyStr + end end - and tyconToEnv (t: Tycon.t): EtypeStr.t option = + and tyconToEnv (t: Tycon.t): EtypeStr.t = let open Tycon in case t of Flexible c => flexibleTyconToEnv c - | Rigid (c, k) => SOME (EtypeStr.tycon (c, k)) + | Rigid c => EtypeStr.tycon c end - and typeToEnv (t: Type.t): Etype.t option = - Exn.withEscape - (fn escape => - SOME - (Type.hom (t, {con = fn (c, ts) => (case tyconToEnv c of - NONE => escape NONE - | SOME s => - EtypeStr.apply (s, ts)), - record = Etype.record, - var = Etype.var}))) - and schemeToEnv (Scheme.T {ty, tyvars}): Escheme.t option = - Exn.withEscape - (fn escape => - SOME (Escheme.make {canGeneralize = true, - ty = (case typeToEnv ty of - NONE => escape NONE - | SOME ty => ty), - tyvars = tyvars})) - and consToEnv (Cons.T v): Econs.t option = - Exn.withEscape - (fn escape => - SOME (Econs.T (Vector.map (v, fn {name, scheme} => - {con = Con.newNoname (), - name = name, - scheme = (case schemeToEnv scheme of - NONE => escape NONE - | SOME s => s), - uses = Uses.new ()})))) - and typeStrToEnv (s: TypeStr.t): EtypeStr.t option = + and typeToEnv (t: Type.t): Etype.t = + Type.hom (t, {con = fn (c, ts) => EtypeStr.apply (tyconToEnv c, ts), + record = Etype.record, + var = Etype.var}) + and schemeToEnv (Scheme.T {ty, tyvars}): Escheme.t = + Escheme.make {canGeneralize = true, + ty = typeToEnv ty, + tyvars = tyvars} + and consToEnv cons: Econs.t = + (Econs.fromSortedVector o Vector.map) + (Cons.dest cons, fn {name, scheme} => + {con = Con.newNoname (), + name = name, + scheme = schemeToEnv scheme, + uses = Uses.new ()}) + and typeStrToEnv (s: TypeStr.t): EtypeStr.t = let - val k = TypeStr.kind s datatype z = datatype TypeStr.node in case TypeStr.node s of - Datatype {cons, tycon} => + Datatype {cons, tycon, ...} => let fun data c = - Option.map (consToEnv cons, fn cs => - EtypeStr.data (c, k, cs)) + EtypeStr.data (c, consToEnv cons) in case tycon of Tycon.Flexible c => - (case flexibleTyconToEnv c of - NONE => NONE - | SOME typeStr => - case EtypeStr.node typeStr of - EtypeStr.Datatype {tycon, ...} => data tycon - | EtypeStr.Tycon c => data c - | _ => - let - open Layout - in - Error.bug - (toString - (seq [str "ElaborateEnv.Interface.typeStrToEnv", - str "datatype ", - TypeStr.layout s, - str " realized with scheme ", - EtypeStr.layout typeStr])) - end) - | Tycon.Rigid (c, _) => data c + let + val typeStr = flexibleTyconToEnv c + in + case EtypeStr.toTyconOpt typeStr of + SOME c => data c + | _ => Error.bug + (Layout.toString + (seq [str "ElaborateEnv.Interface.typeStrToEnv ", + str "datatype ", + TypeStr.layout s, + str " realized with type structure ", + EtypeStr.layout typeStr])) + end + | Tycon.Rigid c => data c end | Scheme s => - Option.map (schemeToEnv s, fn s => EtypeStr.def (s, k)) - | Tycon c => Option.map (tyconToEnv c, EtypeStr.abs) + EtypeStr.def (schemeToEnv s) + | Tycon {tycon, ...} => + EtypeStr.abs (tyconToEnv tycon) + end + + structure FlexibleTycon = + struct + open FlexibleTycon + + val toEnv = flexibleTyconToEnv + + fun dummyTycon (fc, name, strids, {prefix}) = + let + val {admitsEquality = ae, kind = k, ...} = + FlexibleTycon.dest fc + val r = Ast.Tycon.region name + val n = Ast.Tycon.toString name + val pd = + prefix ^ toStringLongRev (strids, Ast.Tycon.layout name) + val c = + Etycon.make {admitsEquality = ae, + kind = k, + name = n, + prettyDefault = pd, + region = r} + in + c + end end structure Tycon = @@ -527,8 +673,7 @@ fun fromEnv (t: Etype.t): t = let fun con (c, ts) = - Type.con (Tycon.fromEnv (c, Kind.Arity (Vector.length ts)), - ts) + Type.con (Tycon.fromEnv c, ts) in Etype.hom (t, {con = con, expandOpaque = false, @@ -557,10 +702,11 @@ struct open Cons - fun fromEnv (Econs.T v): t = - T (Vector.map (v, fn {name, scheme, ...} => - {name = name, - scheme = Scheme.fromEnv scheme})) + fun fromEnv (cons): t = + (fromSortedVector o Vector.map) + (Econs.dest cons, fn {name, scheme, ...} => + {name = name, + scheme = Scheme.fromEnv scheme}) end structure TypeStr = @@ -569,31 +715,537 @@ val toEnv = typeStrToEnv - fun toEnvNoNone s = - case toEnv s of - NONE => EtypeStr.tycon (EtypeStr.Tycon.tuple, TypeStr.kind s) - | SOME s => s - fun fromEnv (s: EtypeStr.t) = + case EtypeStr.node s of + EtypeStr.Datatype {cons, tycon} => + data (Tycon.fromEnv tycon, + Cons.fromEnv cons, + true) + | EtypeStr.Scheme s => def (Scheme.fromEnv s) + | EtypeStr.Tycon c => def (Scheme.fromTycon (Tycon.fromEnv c)) + + structure Sort = + struct + datatype t = + Datatype of {tycon: Etycon.t, cons: Econs.t, repl: bool} + | Scheme of Escheme.t + | Type of {admitsEquality: bool} + end + + fun sort (sigStr, rlzStr, representative) = + case (representative, node sigStr, EtypeStr.node rlzStr) of + (false, Datatype _, EtypeStr.Datatype {tycon = rlzTycon, cons = rlzCons}) => + Sort.Datatype {tycon = rlzTycon, cons = rlzCons, repl = true} + | (false, Datatype _, EtypeStr.Scheme _) => + Error.bug "ElaborateEnv.Interface.TypeStr.sort: {repr = false, sigStr = Datatype _, rlzStr = Scheme _}" + | (false, Datatype _, EtypeStr.Tycon _) => + Error.bug "ElaborateEnv.Interface.TypeStr.sort: {repr = false, sigStr = Datatype _, rlzStr = Tycon _}" + | (false, _, rlzStr) => + Sort.Scheme (case rlzStr of + EtypeStr.Datatype {tycon, ...} => + Escheme.fromTycon tycon + | EtypeStr.Scheme s => s + | EtypeStr.Tycon c => + Escheme.fromTycon c) + | (true, Datatype {repl = false, ...}, EtypeStr.Datatype {tycon = rlzTycon, cons = rlzCons}) => + Sort.Datatype {tycon = rlzTycon, cons = rlzCons, repl = false} + | (true, Datatype {repl = false, ...}, EtypeStr.Scheme _) => + Error.bug "ElaborateEnv.Interface.TypeStr.sort: {repr = true, sigStr = Datatype {repl = false, ...}, rlzStr = Scheme _}" + | (true, Datatype {repl = false, ...}, EtypeStr.Tycon _) => + Error.bug "ElaborateEnv.Interface.TypeStr.sort: {repr = true, sigStr = Datatype {repl = false, ...}, rlzStr = Tycon _}" + | (true, Datatype {repl = true, ...}, _) => + Error.bug "ElaborateEnv.Interface.TypeStr.sort: {repr = true, sigStr = Datatype {repl = true, ...}}" + | (true, Scheme _, _) => + Error.bug "ElaborateEnv.Interface.TypeStr.sort: {repr = true, sigStr = Scheme _}" + | (true, Tycon _, _) => + (case admitsEquality sigStr of + AdmitsEquality.Always => Sort.Type {admitsEquality = true} + | AdmitsEquality.Never => Sort.Type {admitsEquality = false} + | AdmitsEquality.Sometimes => Sort.Type {admitsEquality = true}) + + val sort = fn (name, sigStr, rlzStr, + flexTyconMap: FlexibleTycon.t TyconMap.t) => + sort (sigStr, rlzStr, + Option.isSome (TyconMap.peekTycon (flexTyconMap, name))) + end + + fun layouts {interfaceSigid, layoutPrettyTycon, setLayoutPrettyTycon} = + let + val empty = Layout.empty + val indent = fn l => Layout.indent (l, 3) + val isEmpty = Layout.isEmpty + val tuple = Layout.tuple + + val {destroy = destroyLayoutPrettyTyvar, + layoutPretty = layoutPrettyTyvar, + localInit = localInitLayoutPrettyTyvar} = + Etyvar.makeLayoutPretty () + val {destroy = destroyLayoutPrettyType, + layoutPretty = layoutPrettyType} = + Etype.makeLayoutPretty + {expandOpaque = false, + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar} + fun layoutPrettyScheme s = let - val kind = EtypeStr.kind s + val (bs, t) = Escheme.dest s + val () = localInitLayoutPrettyTyvar bs in - case EtypeStr.node s of - EtypeStr.Datatype {cons, tycon} => - data (Tycon.fromEnv (tycon, kind), - kind, - Cons.fromEnv cons) - | EtypeStr.Scheme s => def (Scheme.fromEnv s, kind) - | EtypeStr.Tycon c => - tycon (Tycon.fromEnv (c, kind), kind) + #1 (layoutPrettyType t) end + + fun layoutValSpec (strids, name, (sigStatus, sigScheme), {compact, con, def}) = + let + val rlzScheme = Scheme.toEnv sigScheme + fun doit kw = + let + val lay = + mayAlign + [seq [str kw, str " ", + layoutLongRev (strids, Ast.Vid.layout name), + str (if Ast.Vid.isSymbolic name then " : " else ": "), + layoutPrettyScheme rlzScheme], + indent (if def + then seq [str "(* @ ", + Region.layout (Ast.Vid.region name), + str " *)"] + else empty)] + val lay = + if compact + then Layout.compact lay + else lay + in + SOME lay + end + in + case sigStatus of + Status.Con => + if con + then doit "con" + else NONE + | Status.Exn => + if con + then doit "exn" + else let + val lay = + mayAlign + [seq [str "exception ", + layoutLongRev (strids, Ast.Vid.layout name), + case Etype.deArrowOpt (Escheme.ty rlzScheme) of + NONE => empty + | SOME (ty, _) => seq [str " of ", + #1 (layoutPrettyType ty)]], + indent (if def + then seq [str "(* @ ", + Region.layout (Ast.Vid.region name), + str " *)"] + else empty)] + val lay = + if compact + then Layout.compact lay + else lay + in + SOME lay + end + | Status.Var => + doit "val" + end + fun layoutTypeSpec (strids, name, sigStr, + {compact, def, flexTyconMap}) = + let + val lay = #1 o layoutPrettyType + val rlzStr = TypeStr.toEnv sigStr + val sort = TypeStr.sort (name, sigStr, rlzStr, flexTyconMap) + val arity = + case Interface.TypeStr.kind sigStr of + Kind.Arity sigArity => sigArity + | _ => Error.bug "ElaborateEnv.transparentCut.layouts.layoutTypeSpec: sigArity" + val tyvars = + Vector.tabulate + (arity, fn _ => + Etyvar.makeNoname {equality = false}) + val () = localInitLayoutPrettyTyvar tyvars + val tyargs = Vector.map (tyvars, Etype.var) + val tyvars = Vector.map (tyvars, layoutPrettyTyvar) + val tyvars = + case Vector.length tyvars of + 0 => empty + | 1 => Vector.first tyvars + | _ => tuple (Vector.toList tyvars) + datatype sort = datatype TypeStr.Sort.t + val (kw, rest) = + case sort of + Datatype {repl, cons, ...} => + let + val cons = + Vector.toListMap + (Econs.dest cons, fn {name, scheme, ...} => + let + val ty = Escheme.apply (scheme, tyargs) + in + seq [Ast.Con.layout name, + case Etype.deArrowOpt ty of + NONE => empty + | SOME (ty, _) => seq [str " of ", lay ty]] + end) + val cons = + List.mapi + (cons, fn (i, l) => + if i = 0 + then l + else Layout.indent (seq [str "| ", l], ~2)) + val rest = + if repl + then let + val repl = + seq [str "(* = datatype ", + lay (EtypeStr.apply (rlzStr, tyargs)), + str " *)"] + in + List.snoc (cons, Layout.indent (repl, ~2)) + end + else cons + in + ("datatype", + SOME (mayAlign rest)) + end + | Scheme scheme => + ("type", + SOME (lay (Escheme.apply (scheme, tyargs)))) + | Type {admitsEquality} => + (if admitsEquality then "eqtype" else "type", + NONE) + val lay = + mayAlign + [seq [str kw, str " ", + tyvars, + if isEmpty tyvars then empty else str " ", + layoutLongRev (strids, Ast.Tycon.layout name), + case rest of + NONE => empty + | SOME rest => seq [str " = ", rest]], + indent (if def + then seq [str "(* @ ", + Region.layout (Ast.Tycon.region name), + str " *)"] + else empty)] + val lay = + if compact + then Layout.compact lay + else lay + in + lay + end + fun layoutStrSpec (strids, name, I, + {compact, def, elide, flexTyconMap}) = + let + val bind = seq [str "structure ", + layoutLongRev (strids, Ast.Strid.layout name), + str ":"] + val flexTyconMap = + Option.fold + (TyconMap.peekStrid (flexTyconMap, name), + TyconMap.empty (), + fn (flexTyconMap, _) => flexTyconMap) + val {abbrev, full} = + layoutSigRlz (I, + {compact = compact, + elide = elide, + flexTyconMap = flexTyconMap}) + val def = + if def + then seq [str "(* @ ", + Region.layout (Ast.Strid.region name), + str " *)"] + else empty + val full = fn () => + align [bind, indent (full ()), indent def] + in + case abbrev () of + NONE => full () + | SOME sigg => + let + val lay = + mayAlign + [seq [bind, str " ", sigg], + indent def] + val lay = + if compact + then Layout.compact lay + else lay + in + lay + end + end + and layoutSigFlex (I, + {compact, elide}) = + let + fun realize (TyconMap.T {strs, types}, strids) = + let + val () = + Array.foreach + (strs, fn (name, tm) => + realize (tm, name :: strids)) + val () = + Array.foreach + (types, fn (name, fc) => + let + val c = + FlexibleTycon.dummyTycon + (fc, name, strids, {prefix = "_sig."}) + val () = + setLayoutPrettyTycon + (c, Etycon.layoutPrettyDefault c) + val () = + FlexibleTycon.realize + (fc, EtypeStr.tycon c) + in + () + end) + in + () + end + val rlzI = copy I + val flexTyconMap = flexibleTycons rlzI + val () = realize (flexTyconMap, []) + in + layoutSigRlz (rlzI, + {compact = compact, + elide = elide, + flexTyconMap = flexTyconMap}) + end + and layoutSigRlz (I, + {compact, elide, flexTyconMap}) = + let + fun abbrev () = + case interfaceSigid (Interface.original I) of + NONE => NONE + | SOME (s, I') => + SOME (layoutSigRlzAbbrev (s, I', I, + {compact = compact, + flexTyconMap = flexTyconMap})) + fun full () = + layoutSigRlzFull (I, + {compact = compact, + elide = elide, + flexTyconMap = flexTyconMap}) + in + {abbrev = abbrev, + full = full} + end + and layoutSigRlzFull (I, + {compact, + elide: {strs: (int * int) option, + types: (int * int) option, + vals: (int * int) option}, + flexTyconMap}) = + let + val {strs, types, vals} = Interface.dest I + fun doit (a, layout, elide) = + let + val specs = + Array.foldr + (a, [], fn ((name, range), ls) => + case layout (name, range) of + NONE => ls + | SOME l => l :: ls) + in + case elide of + NONE => align specs + | SOME (n, m) => + let + val l = List.length specs + in + if n + m + 1 < l + then align [align (List.dropSuffix (specs, l - n)), + str "...", + align (List.dropPrefix (specs, l - m))] + else align specs + end + end + val layoutTypeSpec = + fn (name, sigStr) => + layoutTypeSpec + ([], name, sigStr, + {compact = compact, + def = false, + flexTyconMap = flexTyconMap}) + val layoutValSpec = + fn (name, (sigStatus, sigScheme)) => + layoutValSpec + ([], name, (sigStatus, sigScheme), + {compact = compact, + con = false, + def = false}) + val layoutStrSpec = + fn (name, I) => + layoutStrSpec + ([], name, I, + {compact = compact, + def = false, + elide = elide, + flexTyconMap = flexTyconMap}) + in + align [str "sig", + indent (align [doit (types, SOME o layoutTypeSpec, #types elide), + doit (vals, layoutValSpec, #vals elide), + doit (strs, SOME o layoutStrSpec, #strs elide)]), + str "end"] + end + and layoutSigRlzAbbrev (s, I', I, {compact, flexTyconMap}) = + let + val flexTyconMap' = + Interface.flexibleTycons I' + val wheres = ref [] + fun loop (strids, flexTyconMap', I, flexTyconMap) = + let + val TyconMap.T {strs = strs', types = types'} = + flexTyconMap' + val _ = + Array.foreach + (strs', fn (name, flexTyconMap') => + let + val I = + valOf (Interface.peekStrid (I, name)) + val flexTyconMap = + Option.fold + (TyconMap.peekStrid (flexTyconMap, name), + TyconMap.empty (), + fn (flexTyconMap, _) => flexTyconMap) + in + loop (name::strids, flexTyconMap', I, flexTyconMap) + end) + val _ = + Array.foreach + (types', fn (name, _) => + let + val (_, sigStr) = valOf (Interface.peekTycon (I, name)) + val flexTycon = TyconMap.peekTycon (flexTyconMap, name) + in + case flexTycon of + NONE => + List.push + (wheres, + seq [str "where ", + layoutTypeSpec (strids, + name, + Interface.TypeStr.abs sigStr, + {compact = compact, + def = false, + flexTyconMap = flexTyconMap})]) + | SOME _ => () + end) + in + () + end + val () = loop ([], flexTyconMap', I, flexTyconMap) + val wheres = rev (!wheres) + val lay = + align (Ast.Sigid.layout s :: wheres) + in + lay + end + fun layoutSigDefn (name, I, {compact, def}) = + let + val bind = seq [str "signature ", Ast.Sigid.layout name, str " ="] + val {abbrev, full} = layoutSigFlex (I, + {compact = compact, + elide = {strs = NONE, + types = NONE, + vals = NONE}}) + val origI = Interface.original I + val def = + if def + then seq [str "(* @ ", + Region.layout (Ast.Sigid.region name), + str " *)"] + else empty + val full = fn () => + align [bind, indent (full ()), indent def] + in + if Interface.equals (I, origI) + then full () + else (case abbrev () of + NONE => full () + | SOME sigg => + let + val lay = + mayAlign + [seq [bind, str " ", sigg], + indent def] + val lay = + if compact + then Layout.compact lay + else lay + in + lay + end) + end + in + {destroy = fn () => (destroyLayoutPrettyType () + ; destroyLayoutPrettyTyvar ()), + destroyLayoutPrettyType = destroyLayoutPrettyType, + destroyLayoutPrettyTyvar = destroyLayoutPrettyTyvar, + localInitLayoutPrettyTyvar = localInitLayoutPrettyTyvar, + layoutPrettyScheme = layoutPrettyScheme, + layoutPrettyType = layoutPrettyType, + layoutPrettyTyvar = layoutPrettyTyvar, + layoutSigDefn = layoutSigDefn, + layoutSigFlex = layoutSigFlex, + layoutSigRlz = layoutSigRlz, + layoutStrSpec = layoutStrSpec, + layoutTypeSpec = layoutTypeSpec, + layoutValSpec = layoutValSpec} + end + + fun layoutPretty I = + let + val {destroy, layoutSigFlex, ...} = + layouts {interfaceSigid = fn _ => NONE, + layoutPrettyTycon = Etycon.layoutPrettyDefault, + setLayoutPrettyTycon = fn _ => ()} + val {full, ...} = + layoutSigFlex + (I, + {compact = false, + elide = {strs = NONE, + types = NONE, + vals = NONE}}) + val res = full () + val () = destroy () + in + res end end +local + open Interface +in + structure FlexibleTycon = FlexibleTycon + structure Status = Status + structure TyconMap = TyconMap +end structure Status = struct open Status + val class = + fn Con => Class.Con + | Exn => Class.Exn + | Var => Class.Var + + fun fromVid vid = + case vid of + Vid.Con _ => Con + | Vid.Exn _ => Exn + | Vid.Overload _ => Var + | Vid.Var _ => Var + + val kw: t -> string = + fn Con => "con" + | Exn => "exn" + | Var => "val" + val pretty: t -> string = fn Con => "constructor" | Exn => "exception" @@ -614,9 +1266,7 @@ val op >= : t * t -> bool = op >= - val c = Counter.new 0 - - fun next () = Counter.next c + val next = Counter.generator 0 val next = Trace.trace @@ -637,20 +1287,29 @@ Layout.tuple [layoutDomain domain, layoutRange range]) a + fun isEmpty (T a) = Array.isEmpty a + fun foreach (T a, f) = Array.foreach (a, fn {domain, range, ...} => f (domain, range)) + fun foreachByTime (T a, f) = + let + val a = Array.copy a + val _ = + QuickSort.sortArray + (a, fn ({time = t, ...}, {time = t', ...}) => + Time.>= (t, t')) + in + foreach (T a, f) + end + fun peek (T a, domain: 'a, toSymbol: 'a -> Symbol.t) = Option.map (BinarySearch.search (a, fn {domain = d, ...} => Symbol.compare (toSymbol domain, toSymbol d)), - fn i => - let - val v as {uses, ...} = Array.sub (a, i) - val _ = Uses.add (uses, domain) - in - v - end) + fn i => Array.sub (a, i)) + + fun keepAll (T a, f) = T (Array.keepAll (a, f)) val map: ('a, 'b) t * ('b -> 'b) -> ('a, 'b) t = fn (T a, f) => @@ -670,21 +1329,6 @@ uses = uses})) end -val allTycons: Tycon.t list ref = ref (List.map (Tycon.prims, #tycon)) -val newTycons: (Tycon.t * Kind.t * Region.t) list ref = ref [] - -val newTycon: string * Kind.t * AdmitsEquality.t * Region.t -> Tycon.t = - fn (s, k, a, r) => - let - val c = Tycon.fromString s - val _ = TypeEnv.initAdmitsEquality (c, a) - val _ = TypeEnv.tyconRegion c := SOME r - val _ = List.push (allTycons, c) - val _ = List.push (newTycons, (c, k, r)) - in - c - end - fun foreach2Sorted (abs: ('a * 'b) array, info: ('a, 'c) Info.t, equals: ('a * 'a -> bool), @@ -725,7 +1369,9 @@ plist: PropertyList.t, strs: (Ast.Strid.t, t) Info.t, types: (Ast.Tycon.t, TypeStr.t) Info.t, - vals: (Ast.Vid.t, Vid.t * Scheme.t option) Info.t} + vals: (Ast.Vid.t, Vid.t * Scheme.t) Info.t} + + val ffi: t option ref = ref NONE local fun make f (T r) = f r @@ -734,11 +1380,27 @@ val plist = make #plist end + fun layout (T {interface, strs, vals, types, ...}) = + Layout.record + [("interface", Option.layout Interface.layout interface), + ("types", Info.layout (Ast.Tycon.layout, TypeStr.layout) types), + ("vals", (Info.layout (Ast.Vid.layout, + Layout.tuple2 (Vid.layout, Scheme.layout)) + vals)), + ("strs", Info.layout (Strid.layout, layout) strs)] + fun eq (s: t, s': t): bool = PropertyList.equals (plist s, plist s') + (* ------------------------------------------------- *) + (* peek *) + (* ------------------------------------------------- *) + local fun make (field, toSymbol) (T fields, domain) = - Info.peek (field fields, domain, toSymbol) + Option.map + (Info.peek (field fields, domain, toSymbol), + fn v as {uses, ...} => + (Uses.add (uses, domain); v)) in val peekStrid' = make (#strs, Ast.Strid.toSymbol) val peekVid' = make (#vals, Ast.Vid.toSymbol) @@ -756,31 +1418,151 @@ | SOME (vid, s) => Option.map (de vid, fn z => (z, s)) in val peekCon = make (Ast.Vid.fromCon, Vid.deCon) + val peekExn = make (Ast.Vid.fromCon, Vid.deExn) val peekVar = make (Ast.Vid.fromVar, Vid.deVar) end - fun layout (T {strs, vals, types, ...}) = - Layout.record - [("types", Info.layout (Ast.Tycon.layout, TypeStr.layout) types), - ("vals", (Info.layout (Ast.Vid.layout, - Layout.tuple2 (Vid.layout, - Option.layout Scheme.layout)) - vals)), - ("strs", Info.layout (Strid.layout, layout) strs)] + structure PeekResult = + struct + datatype 'a t = + Found of 'a + | UndefinedStructure of Strid.t list + end - local - datatype handleUses = Clear | Force - fun make handleUses = - let - fun loop (T f) = - let - fun doit (sel, forceRange) = - let - val Info.T a = sel f - in - Array.foreach - (a, fn {range, uses, ...} => - let + fun peekStrids (S, strids) = + let + fun loop (S, strids, ac) = + case strids of + [] => PeekResult.Found S + | strid :: strids => + case peekStrid (S, strid) of + NONE => PeekResult.UndefinedStructure (rev (strid :: ac)) + | SOME S => loop (S, strids, strid :: ac) + in + loop (S, strids, []) + end + + (* ------------------------------------------------- *) + (* layoutPretty *) + (* ------------------------------------------------- *) + + fun layouts {interfaceSigid, layoutPrettyTycon, setLayoutPrettyTycon} = + let + val elide = {strs = NONE, types = NONE, vals = NONE} + val flexTyconMap = TyconMap.empty () + + val {destroy, destroyLayoutPrettyType, destroyLayoutPrettyTyvar, + layoutPrettyScheme, + layoutPrettyType, layoutPrettyTyvar, + layoutSigDefn, layoutSigFlex, layoutSigRlz, + layoutStrSpec, layoutTypeSpec, layoutValSpec, ...} = + Interface.layouts {interfaceSigid = interfaceSigid, + layoutPrettyTycon = layoutPrettyTycon, + setLayoutPrettyTycon = setLayoutPrettyTycon} + + fun layoutTypeDefn (strids, name, strStr, {compact, def}) = + layoutTypeSpec + (strids, name, + Interface.TypeStr.fromEnv strStr, + {compact = compact, + def = def, + flexTyconMap = flexTyconMap}) + fun layoutValDefn (strids, name, (strVid, strScheme), {compact, con, def}) = + layoutValSpec + (strids, name, + (Status.fromVid strVid, Interface.Scheme.fromEnv strScheme), + {compact = compact, con = con, def = def}) + local + fun toInterface (T {interface, strs, types, vals, ...}) = + case interface of + NONE => + let + fun doit (Info.T a, f) = + Array.map (a, f) + val types = + doit + (types, fn {domain = name, range = strStr, ...} => + (name, Interface.TypeStr.fromEnv strStr)) + val vals = + doit + (vals, fn {domain = name, range = (strVid, strScheme), ...} => + (name, (Status.fromVid strVid, Interface.Scheme.fromEnv strScheme))) + val strs = + doit + (strs, fn {domain = name, range = S, ...} => + (name, toInterface S)) + in + Interface.new + {isClosed = true, + original = NONE, + strs = strs, + types = types, + vals = vals} + end + | SOME I => I + in + fun layoutStrDefn (strids, name, S, {compact, def}) = + layoutStrSpec + (strids, name, toInterface S, + {compact = compact, + def = def, + elide = elide, + flexTyconMap = flexTyconMap}) + fun layoutStr (S, {compact}) = + layoutSigRlz + (toInterface S, + {compact = compact, + elide = elide, + flexTyconMap = flexTyconMap}) + end + in + {destroy = destroy, + destroyLayoutPrettyType = destroyLayoutPrettyType, + destroyLayoutPrettyTyvar = destroyLayoutPrettyTyvar, + layoutPrettyScheme = layoutPrettyScheme, + layoutPrettyType = layoutPrettyType, + layoutPrettyTyvar = layoutPrettyTyvar, + layoutSigDefn = layoutSigDefn, + layoutSigFlex = layoutSigFlex, + layoutSigRlz = layoutSigRlz, + layoutStr = layoutStr, + layoutStrDefn = layoutStrDefn, + layoutStrSpec = layoutStrSpec, + layoutTypeDefn = layoutTypeDefn, + layoutTypeSpec = layoutTypeSpec, + layoutValDefn = layoutValDefn, + layoutValSpec = layoutValSpec} + end + + fun layoutPretty S = + let + val {destroy, layoutStr, ...} = + layouts {interfaceSigid = fn _ => NONE, + layoutPrettyTycon = Tycon.layoutPrettyDefault, + setLayoutPrettyTycon = fn _ => ()} + val res = #full (layoutStr (S, {compact = false})) () + val () = destroy () + in + res + end + + (* ------------------------------------------------- *) + (* forceUsed *) + (* ------------------------------------------------- *) + + local + datatype handleUses = Clear | Force + fun make handleUses = + let + fun loop (T f) = + let + fun doit (sel, forceRange) = + let + val Info.T a = sel f + in + Array.foreach + (a, fn {range, uses, ...} => + let val _ = case handleUses of Clear => Uses.clear uses @@ -803,6 +1585,10 @@ val forceUsed = make Force end + (* ------------------------------------------------- *) + (* realize *) + (* ------------------------------------------------- *) + fun realize (S: t, tm: 'a TyconMap.t, f: (Ast.Tycon.t * 'a @@ -822,7 +1608,7 @@ (strs, strs', Ast.Strid.equals, fn (name, tm, S) => case S of - NONE => allNone (tm, nest) + NONE => allNone (tm, name :: nest) | SOME (_, S) => loop (tm, S, name :: nest)) val () = foreach2Sorted @@ -836,219 +1622,116 @@ loop (tm, S, []) end - local - open Layout - in - fun layouts ({showUsed: bool}, - interfaceSigid: Interface.t -> Sigid.t option) = - let - fun layoutTypeSpec (n, s) = - layoutTypeSpec' (Ast.Tycon.layout n, s, {isWhere = false}) - and layoutTypeSpec' (name: Layout.t, s, {isWhere: bool}) = - let - val {destroy, lay} = - Type.makeLayoutPretty {expandOpaque = false, localTyvarNames = true} - val lay = #1 o lay - val tyvars = - case TypeStr.kind s of - Kind.Arity n => - Vector.tabulate - (n, fn _ => - Type.var (Tyvar.newNoname {equality = false})) - | Kind.Nary => Vector.new0 () - val args = - case Vector.length tyvars of - 0 => empty - | 1 => seq [lay (Vector.sub (tyvars, 0)), str " "] - | _ => - seq - [paren (seq (separateRight - (Vector.toList (Vector.map (tyvars, lay)), - ", "))), - str " "] - val t = - if isWhere then - "type" - else - (case TypeStr.node s of - TypeStr.Datatype _ => "datatype" - | _ => - let - datatype z = datatype AdmitsEquality.t - in - case TypeStr.admitsEquality s of - Always => "eqtype" - | Never => "type" - | Sometimes => "eqtype" - end) - val def = seq [str t, str " ", args, name, str " = "] - val res = - case TypeStr.node s of - TypeStr.Datatype {cons = Cons.T cs, tycon} => - if isWhere - then seq [def, lay (Type.con (tycon, tyvars))] - else - let - val cs = - Vector.toListMap - (cs, fn {name, scheme, ...} => - seq [Ast.Con.layout name, - case (Type.deArrowOpt - (Scheme.apply (scheme, tyvars))) of - NONE => empty - | SOME (t, _) => seq [str " of ", lay t]]) - in - seq [def, alignPrefix (cs, "| ")] - end - | TypeStr.Scheme s => - seq [def, lay (Scheme.apply (s, tyvars))] - | TypeStr.Tycon c => - seq [def, lay (Type.con (c, tyvars))] - val _ = destroy () - in - res - end - fun layoutValSpec (d: Ast.Vid.t, (vid, scheme))= - let - fun simple s = - seq [str s, str " ", Ast.Vid.layout d, - if Ast.Vid.isSymbolic d then str " " else empty, - str ": ", - case scheme of - NONE => str "" - | SOME s => Scheme.layoutPretty s] - datatype z = datatype Vid.t - in - case vid of - Con _ => NONE - | Exn c => - SOME - (seq [str "exception ", Con.layout c, - case scheme of - NONE => str " of " - | SOME s => - case Type.deArrowOpt (Scheme.ty s) of - NONE => empty - | SOME (t, _) => - seq [str " of ", Type.layoutPretty t]]) - | Overload _ => SOME (simple "val") - | Var _ => SOME (simple "val") - end - fun layoutStrSpec (d: Strid.t, r) = - let - val (l, {messy}) = layoutAbbrev r - val bind = seq [str "structure ", Strid.layout d, str ":"] - in - if messy - then align [bind, indent (l, 3)] - else seq [bind, str " ", l] - end - and layoutStr (T {strs, vals, types, ...}) = - let - fun doit (Info.T a, layout) = - align (Array.foldr - (a, [], fn ({domain, range, uses, ...}, ac) => - if showUsed andalso not (Uses.hasUse uses) - then ac - else - case layout (domain, range) of - NONE => ac - | SOME l => l :: ac)) - in - align - [str "sig", - indent (align [doit (types, SOME o layoutTypeSpec), - doit (vals, layoutValSpec), - doit (strs, SOME o layoutStrSpec)], - 3), - str "end"] - end - and layoutAbbrev (S as T {interface, ...}) = - case if showUsed - then NONE - else (case interface of - NONE => NONE - | SOME I => - let - val I = Interface.original I - in - Option.map (interfaceSigid I, fn s => - (s, I)) - end) of - NONE => (layoutStr S, {messy = true}) - | SOME (s, I) => - let - val wheres = ref [] - val () = - realize - (S, Interface.flexibleTycons I, - fn (name, _, typeStr, {nest}) => - case typeStr of - NONE => Error.bug "ElaborateEnv.Structure.layoutAbbrev: missing typeStr" - | SOME typeStr => - List.push - (wheres, - seq [str "where ", - layoutTypeSpec' - (Ast.Longtycon.layout - (Ast.Longtycon.long (rev nest, - name)), - typeStr, - {isWhere = true})])) - in - (align (Sigid.layout s :: (rev (!wheres))), - {messy = false}) - end - in - {layoutAbbrev = layoutAbbrev, - layoutStr = layoutStr, - strSpec = layoutStrSpec, - typeSpec = layoutTypeSpec, - valSpec = layoutValSpec} - end - end - - fun layoutPretty S = - #layoutStr (layouts ({showUsed = false}, fn _ => NONE)) S - - datatype 'a peekResult = - Found of 'a - | UndefinedStructure of Strid.t list + (* ------------------------------------------------- *) + (* dummy *) + (* ------------------------------------------------- *) - fun peekStrids (S, strids) = + fun dummy (I: Interface.t, {prefix: string}) + : t * (t * (Tycon.t * TypeStr.t -> unit) -> unit) = let - fun loop (S, strids, ac) = - case strids of - [] => Found S - | strid :: strids => - case peekStrid (S, strid) of - NONE => UndefinedStructure (rev (strid :: ac)) - | SOME S => loop (S, strids, strid :: ac) + val time = Time.next () + val I = Interface.copy I + fun realizeLoop (TyconMap.T {strs, types}, strids) = + let + val strs = + Array.map + (strs, fn (name, tm) => + (name, realizeLoop (tm, name :: strids))) + val types = + Array.map + (types, fn (name, flex) => + let + val c = + FlexibleTycon.dummyTycon + (flex, name, strids, + {prefix = prefix}) + val () = + FlexibleTycon.realize + (flex, TypeStr.tycon c) + in + (name, c) + end) + in + TyconMap.T {strs = strs, types = types} + end + val flexible = realizeLoop (Interface.flexibleTycons I, []) + val {get, ...} = + Property.get + (Interface.plist, + Property.initRec + (fn (I, get) => + let + val {strs, types, vals} = Interface.dest I + val strs = + Array.map (strs, fn (name, I) => + {domain = name, + range = get I, + time = time, + uses = Uses.new ()}) + val types = + Array.map (types, fn (name, s) => + {domain = name, + range = Interface.TypeStr.toEnv s, + time = time, + uses = Uses.new ()}) + val vals = + Array.map + (vals, fn (name, (status, scheme)) => + let + val con = CoreML.Con.newString o Ast.Vid.toString + val var = CoreML.Var.newString o Ast.Vid.toString + val vid = + case status of + Status.Con => Vid.Con (con name) + | Status.Exn => Vid.Exn (con name) + | Status.Var => Vid.Var (var name) + in + {domain = name, + range = (vid, Interface.Scheme.toEnv scheme), + time = time, + uses = Uses.new ()} + end) + in + T {interface = SOME I, + plist = PropertyList.new (), + strs = Info.T strs, + types = Info.T types, + vals = Info.T vals} + end)) + val S = get I + fun instantiate (S, f) = + realize (S, flexible, fn (_, c, so, _) => + case so of + NONE => Error.bug "ElaborateEnv.Structure.dummy.instantiate" + | SOME s => f (c, s)) in - loop (S, strids, []) + (S, instantiate) end - val ffi: t option ref = ref NONE + val dummy = + Trace.trace ("ElaborateEnv.Structure.dummy", + Interface.layoutPretty o #1, + layoutPretty o #1) + dummy + end (* ------------------------------------------------- *) -(* FunctorClosure *) +(* FunctorClosure *) (* ------------------------------------------------- *) structure FunctorClosure = struct datatype t = T of {apply: Structure.t * string list -> Decs.t * Structure.t option, - arg: Strid.t, - argInt: Interface.t, - formal: Structure.t, - result: Structure.t option} + argInterface: Interface.t, + resultStructure: Structure.t option, + summary: Structure.t -> Structure.t option} local fun make f (T r) = f r in - val argInterface = make #argInt - val result = make #result + val argInterface = make #argInterface end fun layout _ = Layout.str "" @@ -1062,10 +1745,13 @@ List.layout String.layout, (Option.layout Structure.layout) o #2) apply + + fun forceUsed (T {resultStructure, ...}) = + Option.app (resultStructure, Structure.forceUsed) end (* ------------------------------------------------- *) -(* Basis *) +(* Basis *) (* ------------------------------------------------- *) structure Basis = @@ -1077,7 +1763,7 @@ sigs: (Ast.Sigid.t, Interface.t) Info.t, strs: (Ast.Strid.t, Structure.t) Info.t, types: (Ast.Tycon.t, TypeStr.t) Info.t, - vals: (Ast.Vid.t, Vid.t * Scheme.t option) Info.t} + vals: (Ast.Vid.t, Vid.t * Scheme.t) Info.t} fun layout (T {bass, fcts, sigs, strs, types, vals, ...}) = Layout.record @@ -1086,10 +1772,7 @@ ("sigs", Info.layout (Ast.Sigid.layout, Interface.layout) sigs), ("strs", Info.layout (Ast.Strid.layout, Structure.layout) strs), ("types", Info.layout (Ast.Tycon.layout, TypeStr.layout) types), - ("vals", (Info.layout (Ast.Vid.layout, - Layout.tuple2 (Vid.layout, - Option.layout Scheme.layout)) - vals))] + ("vals", (Info.layout (Ast.Vid.layout, Layout.tuple2 (Vid.layout, Scheme.layout)) vals))] end (* ------------------------------------------------- *) @@ -1120,37 +1803,67 @@ current: ('a, 'b) Values.t list ref, defUses: {class: Class.t, def: 'a, - range: 'b list, - uses: 'a Uses.t} list ref, + range: 'b option, + uses: 'a Uses.t} list ref option, lookup: 'a -> ('a, 'b) Values.t, region: 'a -> Region.t, toSymbol: 'a -> Symbol.t} fun values (T {lookup, ...}, a) = lookup a - fun new {class, lookup, region, toSymbol} = + (* ------------------------------------------------- *) + (* empty *) + (* ------------------------------------------------- *) + + fun empty {class, defUses, lookup, region, toSymbol} = T {class = class, current = ref [], - defUses = ref [], + defUses = if defUses then SOME (ref []) else NONE, lookup = lookup, region = region, toSymbol = toSymbol} - fun newUses (T {defUses, ...}, class, def, range) = + (* ------------------------------------------------- *) + (* newUses *) + (* ------------------------------------------------- *) + + fun newUses (T {class, defUses, ...}, {def, forceUsed, range}) = let val u = Uses.new () val _ = - if !Control.keepDefUse then - List.push (defUses, {class = class, - def = def, - range = range, - uses = u}) - else - () + if not (warnUnused ()) orelse forceUsed + then Uses.forceUsed u + else () + val _ = + case defUses of + NONE => () + | SOME defUses => + let + val class = class range + val range = + if isSome (!Control.showDefUse) + andalso + (class = Class.Var + orelse + class = Class.Exn + orelse + class = Class.Con) + then SOME range + else NONE + in + List.push (defUses, {class = class, + def = def, + range = range, + uses = u}) + end in u end + (* ------------------------------------------------- *) + (* peek *) + (* ------------------------------------------------- *) + fun ('a, 'b) peek (ns, a: 'a, {markUse: 'b -> bool}) : 'b option = case Values.! (values (ns, a)) of @@ -1159,6 +1872,112 @@ (if markUse range then Uses.add (uses, a) else () ; SOME range) + (* ------------------------------------------------- *) + (* extend *) + (* ------------------------------------------------- *) + + fun extend (ns as T {current, lookup, ...}, + {domain, forceUsed, range, scope, time, uses}) = + let + val newUses = fn () => + newUses + (ns, + {def = domain, + range = range, + forceUsed = forceUsed}) + val values as Values.T r = lookup domain + fun make uses = + {domain = domain, + range = range, + scope = scope, + time = time, + uses = uses} + fun new () = + let + val _ = List.push (current, values) + val uses = + case uses {rebind = NONE} of + NONE => newUses () + | SOME u => u + in + make uses + end + in + case !r of + [] => r := [new ()] + | all as ({domain = domain', scope = scope', uses = uses', ...} :: rest) => + if Scope.equals (scope, scope') + then let + val rebind = SOME {domain = domain', uses = uses'} + val uses = + case uses {rebind = rebind} of + NONE => newUses () + | SOME u => u + in + r := (make uses) :: rest + end + else r := new () :: all + end + + (* ------------------------------------------------- *) + (* scope *) + (* ------------------------------------------------- *) + + fun scope (T {current, ...}: ('a, 'b) t) + : unit -> unit = + let + val old = !current + val _ = current := [] + in + fn () => + let + val c = !current + val _ = List.foreach (c, ignore o Values.pop) + val _ = current := old + in + () + end + end + + (* ------------------------------------------------- *) + (* local *) + (* ------------------------------------------------- *) + + fun locall (T {current, ...}: ('a, 'b) t) = + let + val old = !current + val _ = current := [] + in + fn () => + let + val c1 = !current + val _ = current := [] + in + fn () => + let + val c2 = !current + val elts = List.revMap (c2, fn values => + let + val {domain, range, time, uses, ...} = + Values.pop values + in + {domain = domain, + range = range, + time = time, + uses = uses} + end) + val _ = List.foreach (c1, ignore o Values.pop) + val _ = current := old + in + elts + end + end + end + + (* ------------------------------------------------- *) + (* collect *) + (* ------------------------------------------------- *) + fun collect (T {current, toSymbol, ...}: ('a, 'b) t) : unit -> ('a, 'b) Info.t = let @@ -1190,9 +2009,9 @@ end end -(*---------------------------------------------------*) +(* ------------------------------------------------- *) (* Main Env Datatype *) -(*---------------------------------------------------*) +(* ------------------------------------------------- *) structure All = struct @@ -1200,14 +2019,20 @@ Bas of (Basid.t, Basis.t) Values.t | Fct of (Fctid.t, FunctorClosure.t) Values.t | Fix of (Ast.Vid.t, Ast.Fixity.t) Values.t + | IfcStr of (Strid.t, Interface.t) Values.t + | IfcTyc of (Ast.Tycon.t, Interface.TypeStr.t) Values.t + | IfcVal of (Ast.Vid.t, Interface.Status.t * Interface.Scheme.t) Values.t | Sig of (Sigid.t, Interface.t) Values.t | Str of (Strid.t, Structure.t) Values.t | Tyc of (Ast.Tycon.t, TypeStr.t) Values.t - | Val of (Ast.Vid.t, Vid.t * Scheme.t option) Values.t + | Val of (Ast.Vid.t, Vid.t * Scheme.t) Values.t val basOpt = fn Bas z => SOME z | _ => NONE val fctOpt = fn Fct z => SOME z | _ => NONE val fixOpt = fn Fix z => SOME z | _ => NONE + val ifcStrOpt = fn IfcStr z => SOME z | _ => NONE + val ifcTycOpt = fn IfcTyc z => SOME z | _ => NONE + val ifcValOpt = fn IfcVal z => SOME z | _ => NONE val sigOpt = fn Sig z => SOME z | _ => NONE val strOpt = fn Str z => SOME z | _ => NONE val tycOpt = fn Tyc z => SOME z | _ => NONE @@ -1223,37 +2048,32 @@ types: (Ast.Tycon.t, Interface.TypeStr.t) NameSpace.t, vals: (Ast.Vid.t, Interface.Status.t * Interface.Scheme.t) NameSpace.t}, lookup: Symbol.t -> All.t list ref, - maybeAddTop: Symbol.t -> unit, sigs: (Ast.Sigid.t, Interface.t) NameSpace.t, strs: (Ast.Strid.t, Structure.t) NameSpace.t, - (* topSymbols is a list of all symbols that are defined at - * the top level (in any namespace). - *) - topSymbols: Symbol.t list ref, types: (Ast.Tycon.t, TypeStr.t) NameSpace.t, - vals: (Ast.Vid.t, Vid.t * Scheme.t option) NameSpace.t} + vals: (Ast.Vid.t, Vid.t * Scheme.t) NameSpace.t} fun sizeMessage (E: t): Layout.t = let - val size = MLton.size open Layout in - record [("total", Int.layout (size E))] + record [("total", IntInf.layout (MLton.size E))] end (* quell unused warning *) val _ = sizeMessage +(* ------------------------------------------------- *) +(* empty *) +(* ------------------------------------------------- *) + fun empty () = let val {get = lookupAll: Symbol.t -> All.t list ref, ...} = Property.get (Symbol.plist, Property.initFun (fn _ => ref [])) - val topSymbols = ref [] - val {get = maybeAddTop: Symbol.t -> unit, ...} = - Property.get (Symbol.plist, - Property.initFun (fn s => List.push (topSymbols, s))) fun ('a, 'b) make (class: 'b -> Class.t, region: 'a -> Region.t, toSymbol: 'a -> Symbol.t, + defUses: bool, extract: All.t -> ('a, 'b) Values.t option, make: ('a, 'b) Values.t -> All.t) : ('a, 'b) NameSpace.t = @@ -1273,67 +2093,59 @@ | SOME v => v end in - NameSpace.new {class = class, - lookup = lookup, - region = region, - toSymbol = toSymbol} + NameSpace.empty {class = class, + defUses = defUses, + lookup = lookup, + region = region, + toSymbol = toSymbol} end val bass = make (fn _ => Class.Bas, Basid.region, Basid.toSymbol, - All.basOpt, All.Bas) + false, All.basOpt, All.Bas) val fcts = make (fn _ => Class.Fct, Fctid.region, Fctid.toSymbol, - All.fctOpt, All.Fct) + !Control.keepDefUse, All.fctOpt, All.Fct) val fixs = make (fn _ => Class.Fix, Ast.Vid.region, Ast.Vid.toSymbol, - All.fixOpt, All.Fix) + false, All.fixOpt, All.Fix) val sigs = make (fn _ => Class.Sig, Sigid.region, Sigid.toSymbol, - All.sigOpt, All.Sig) + !Control.keepDefUse, All.sigOpt, All.Sig) val strs = make (fn _ => Class.Str, Strid.region, Strid.toSymbol, - All.strOpt, All.Str) + !Control.keepDefUse, All.strOpt, All.Str) val types = make (fn _ => Class.Typ, Ast.Tycon.region, Ast.Tycon.toSymbol, - All.tycOpt, All.Tyc) + !Control.keepDefUse, All.tycOpt, All.Tyc) val vals = make (Vid.class o #1, Ast.Vid.region, Ast.Vid.toSymbol, - All.valOpt, All.Val) + !Control.keepDefUse, All.valOpt, All.Val) + local - val {get = - lookupAll: (Symbol.t - -> {strs: (Strid.t, Interface.t) Values.t, - types: (Ast.Tycon.t, Interface.TypeStr.t) Values.t, - vals: (Ast.Vid.t, Status.t * Interface.Scheme.t) Values.t}), - ...} = - Property.get (Symbol.plist, - Property.initFun - (fn _ => {strs = Values.new (), - types = Values.new (), - vals = Values.new ()})) - fun make (sel, class, region, toSymbol: 'a -> Symbol.t) - : ('a, 'b) NameSpace.t = - NameSpace.new {class = fn _ => class, - lookup = sel o lookupAll o toSymbol, - region = region, - toSymbol = toSymbol} + val strs = make (fn _ => Class.Str, Strid.region, Strid.toSymbol, + false, All.ifcStrOpt, All.IfcStr) + val types = make (fn _ => Class.Typ, Ast.Tycon.region, Ast.Tycon.toSymbol, + false, All.ifcTycOpt, All.IfcTyc) + val vals = make (Status.class o #1, Ast.Vid.region, Ast.Vid.toSymbol, + false, All.ifcValOpt, All.IfcVal) in - val interface = - {strs = make (#strs, Class.Str, Strid.region, Strid.toSymbol), - types = make (#types, Class.Typ, Ast.Tycon.region, - Ast.Tycon.toSymbol), - vals = make (#vals, Class.Var, Ast.Vid.region, Ast.Vid.toSymbol)} + val interface = {strs = strs, types = types, vals = vals} end in - T {currentScope = ref (Scope.new {isTop = true}), + T {currentScope = ref (Scope.new ()), bass = bass, fcts = fcts, fixs = fixs, interface = interface, lookup = lookupAll, - maybeAddTop = maybeAddTop, sigs = sigs, strs = strs, - topSymbols = topSymbols, types = types, vals = vals} end +(* ------------------------------------------------- *) +(* foreach *) +(* ------------------------------------------------- *) + local - fun foreach (T {lookup, ...}, s, {bass, fcts, fixs, sigs, strs, types, vals}) = + fun foreach (T {lookup, ...}, s, + {bass, fcts, fixs, + interface = {strs = ifcStrs, types = ifcTypes, vals = ifcVals}, + sigs, strs, types, vals}) = List.foreach (! (lookup s), fn a => let @@ -1343,6 +2155,9 @@ Bas vs => bass vs | Fct vs => fcts vs | Fix vs => fixs vs + | IfcStr vs => ifcStrs vs + | IfcTyc vs => ifcTypes vs + | IfcVal vs => ifcVals vs | Sig vs => sigs vs | Str vs => strs vs | Tyc vs => types vs @@ -1351,18 +2166,19 @@ in fun foreachDefinedSymbol (E, z) = Symbol.foreach (fn s => foreach (E, s, z)) - - fun foreachTopLevelSymbol (E as T {topSymbols, ...}, z) = - List.foreach (!topSymbols, fn s => foreach (E, s, z)) end -fun collect (E, - keep: {hasUse: bool, scope: Scope.t} -> bool, - le: {domain: Symbol.t, time: Time.t} - * {domain: Symbol.t, time: Time.t} -> bool) = +(* ------------------------------------------------- *) +(* current *) +(* ------------------------------------------------- *) + +fun current (E, keep: {hasUse: bool, scope: Scope.t} -> bool) = let val bass = ref [] val fcts = ref [] + val ifcStrs = ref [] + val ifcTypes = ref [] + val ifcVals = ref [] val sigs = ref [] val strs = ref [] val types = ref [] @@ -1378,437 +2194,126 @@ foreachDefinedSymbol (E, {bass = doit bass, fcts = doit fcts, fixs = fn _ => (), + interface = {strs = doit ifcStrs, + types = doit ifcTypes, + vals = doit ifcVals}, sigs = doit sigs, strs = doit strs, types = doit types, vals = doit vals}) - fun ('a, 'b) finish (r, toSymbol: 'a -> Symbol.t) = + fun ('a, 'b) finish (r: ('a, 'b) Values.value list ref, toSymbol: 'a -> Symbol.t) () = let - val a = Array.fromList (!r) + val a = + Array.fromListMap + (!r, fn {domain, range, time, uses, ...} => + {domain = domain, range = range, + time = time, uses = uses}) val () = QuickSort.sortArray - (a, fn ({domain = d, time = t, ...}: ('a, 'b) Values.value, - {domain = d', time = t',...}: ('a, 'b) Values.value) => - le ({domain = toSymbol d, time = t}, - {domain = toSymbol d', time = t'})) + (a, fn ({domain = d, ...}, {domain = d', ...}) => + Symbol.<= (toSymbol d, toSymbol d')) in - a + Info.T a end in {bass = finish (bass, Basid.toSymbol), fcts = finish (fcts, Fctid.toSymbol), + interface = {strs = finish (ifcStrs, Strid.toSymbol), + types = finish (ifcTypes, Ast.Tycon.toSymbol), + vals = finish (ifcVals, Ast.Vid.toSymbol)}, sigs = finish (sigs, Sigid.toSymbol), strs = finish (strs, Strid.toSymbol), types = finish (types, Ast.Tycon.toSymbol), vals = finish (vals, Ast.Vid.toSymbol)} end -fun setTyconNames (E as T {currentScope, ...}): unit = - let - val {get = shortest: Tycon.t -> int option ref, ...} = - Property.get (Tycon.plist, Property.initFun (fn _ => ref NONE)) - fun doType (typeStr: TypeStr.t, - name: Ast.Tycon.t, - length: int, - strids: Strid.t list): unit = - case TypeStr.toTyconOpt typeStr of - NONE => () - | SOME c => - let - val r = shortest c - in - if isSome (!r) andalso length >= valOf (!r) - then () - else - let - val _ = r := SOME length - val name = - Pretty.longid (List.map (strids, Strid.layout), - Ast.Tycon.layout name) - in - Tycon.setPrintName (c, Layout.toString name) - end - end - val {get = strShortest: Structure.t -> int option ref, ...} = - Property.get (Structure.plist, - Property.initFun (fn _ => ref NONE)) - fun loopStr (s as Structure.T {strs, types, ...}, - length: int, - strids: Strid.t list) - : unit = - let - val r = strShortest s - in - if isSome (!r) andalso length >= valOf (!r) - then () - else - (r := SOME length - ; Info.foreach (types, fn (name, typeStr) => - doType (typeStr, name, length, strids)) - ; Info.foreach (strs, fn (strid, str) => - loopStr (str, 1 + length, strids @ [strid]))) - end - (* Sort the declarations in decreasing order of definition time so that - * later declarations will be processed first, and hence will take - * precedence. - *) - val {strs, types, ...} = - collect (E, fn _ => true, - fn ({time = t, ...}, {time = t', ...}) => Time.>= (t, t')) - val _ = Array.foreach (types, fn {domain = name, range = typeStr, ...} => - doType (typeStr, name, 0, [])) - val _ = Array.foreach (strs, fn {domain = strid, range = str, ...} => - loopStr (str, 1, [strid])) - val _ = - if Scope.isTop (!currentScope) - then () - else - List.foreach - (!allTycons, fn c => - if isSome (! (shortest c)) - then () - else - Tycon.setPrintName (c, concat ["?.", Tycon.originalName c])) - in - () - end - -fun dummyStructure (I: Interface.t, {prefix: string}) - : Structure.t * (Structure.t * (Tycon.t * TypeStr.t -> unit) -> unit) = - let - val time = Time.next () - val I = Interface.copy I - fun realize (TyconMap.T {strs, types}, nest) = - let - val strs = - Array.map (strs, fn (name, tm) => - (name, realize (tm, name :: nest))) - val types = - Array.map - (types, fn (tycon, flex) => - let - val {admitsEquality = a, kind = k, ...} = - FlexibleTycon.dest flex - val name = - concat (prefix - :: (List.fold (nest, [Ast.Tycon.toString tycon], - fn (s, ss) => - Strid.toString s :: "." :: ss))) - val c = newTycon (name, k, a, Ast.Tycon.region tycon) - val () = - FlexibleTycon.realize (flex, SOME (TypeStr.tycon (c, k))) - in - (tycon, c) - end) - in - TyconMap.T {strs = strs, types = types} - end - val flexible = realize (Interface.flexibleTycons I, []) - val {get, ...} = - Property.get - (Interface.plist, - Property.initRec - (fn (I, get) => - let - val {strs, types, vals} = Interface.dest I - val strs = - Array.map (strs, fn (name, I) => - {domain = name, - range = get I, - time = time, - uses = Uses.new ()}) - val types = - Array.map (types, fn (name, s) => - {domain = name, - range = Interface.TypeStr.toEnvNoNone s, - time = time, - uses = Uses.new ()}) - val vals = - Array.map - (vals, fn (name, (status, scheme)) => - let - val con = CoreML.Con.newString o Ast.Vid.toString - val var = CoreML.Var.newString o Ast.Vid.toString - val vid = - case status of - Status.Con => Vid.Con (con name) - | Status.Exn => Vid.Exn (con name) - | Status.Var => Vid.Var (var name) - in - {domain = name, - range = (vid, Interface.Scheme.toEnv scheme), - time = time, - uses = Uses.new ()} - end) - in - Structure.T {interface = SOME I, - plist = PropertyList.new (), - strs = Info.T strs, - types = Info.T types, - vals = Info.T vals} - end)) - val S = get I - fun instantiate (S, f) = - Structure.realize (S, flexible, fn (_, c, so, _) => - case so of - NONE => Error.bug "ElaborateEnv.dummyStructure.instantiate" - | SOME s => f (c, s)) - in - (S, instantiate) - end - -val dummyStructure = - Trace.trace ("ElaborateEnv.dummyStructure", - Interface.layout o #1, - Structure.layoutPretty o #1) - dummyStructure - -fun layout' (E: t, keep, showUsed): Layout.t = - let - val _ = setTyconNames E - val {bass, fcts, sigs, strs, types, vals} = - collect (E, keep, - fn ({domain = d, ...}, {domain = d', ...}) => - Symbol.<= (d, d')) - open Layout - fun doit (a, layout) = align (Array.toListMap (a, layout)) - val {get = interfaceSigid: Interface.t -> Sigid.t option, - set = setInterfaceSigid, ...} = - Property.getSet (Interface.plist, Property.initConst NONE) - val _ = Array.foreach (sigs, fn {domain = s, range = I, ...} => - setInterfaceSigid (I, SOME s)) - val {strSpec, typeSpec, valSpec, ...} = - Structure.layouts (showUsed, interfaceSigid) - val {layoutAbbrev, layoutStr, ...} = - Structure.layouts ({showUsed = false}, interfaceSigid) - val bass = - doit (bass, fn {domain = basid, ...} => - seq [str "basis ", Basid.layout basid, str " = "]) - val sigs = - doit (sigs, fn {domain = sigid, range = I, ...} => - let - val (S, _) = dummyStructure (I, {prefix = "?."}) - in - align [seq [str "signature ", Sigid.layout sigid, str " = "], - indent (layoutStr S, 3)] - end) - val fcts = - doit (fcts, - fn {domain, - range = FunctorClosure.T {arg, formal, result, ...}, ...} => - align [seq [str "functor ", Fctid.layout domain, str " ", - paren (seq [Strid.layout arg, str ": ", - #1 (layoutAbbrev formal)])], - case result of - NONE => empty - | SOME S => - indent (seq [str ": ", #1 (layoutAbbrev S)], 3)]) - val vals = align (Array.foldr (vals, [], fn ({domain, range, ...}, ac) => - case valSpec (domain, range) of - NONE => ac - | SOME l => l :: ac)) - val types = doit (types, fn {domain, range, ...} => - typeSpec (domain, range)) - val strs = doit (strs, fn {domain, range, ...} => strSpec (domain, range)) - in - align [types, vals, strs, fcts, sigs, bass] - end - -fun layout E = layout' (E, fn _ => true, {showUsed = false}) - -fun layoutCurrentScope (E as T {currentScope, ...}) = - let - val s = !currentScope - in - layout' (E, fn {scope, ...} => Scope.equals (s, scope), - {showUsed = false}) - end - -fun layoutUsed (E: t): Layout.t = layout' (E, #hasUse, {showUsed = true}) +(* ------------------------------------------------- *) +(* snapshot *) +(* ------------------------------------------------- *) -(* Force everything that is currently in scope to be marked as used. *) -fun forceUsed E = +fun snapshot (E as T {currentScope, bass, fcts, fixs, sigs, strs, types, vals, ...}) + : (unit -> 'a) -> 'a = let - fun doit forceRange (Values.T r) = - case !r of + val add: (Scope.t -> unit) list ref = ref [] + (* Push onto add everything currently in scope. *) + fun doit (NameSpace.T {current, ...}) (v as Values.T vs) = + case ! vs of [] => () - | {uses, range, ...} :: _ => - (Uses.forceUsed uses - ; forceRange range) + | {domain, range, uses, ...} :: _ => + List.push + (add, fn s0 => + (List.push (vs, {domain = domain, + range = range, + scope = s0, + time = Time.next (), + uses = uses}) + ; List.push (current, v))) val _ = - foreachDefinedSymbol - (E, {bass = doit ignore, - fcts = doit (fn f => Option.app (FunctorClosure.result f, - Structure.forceUsed)), - fixs = doit ignore, - sigs = doit ignore, - strs = doit Structure.forceUsed, - types = doit ignore, - vals = doit ignore}) + foreachDefinedSymbol (E, {bass = doit bass, + fcts = doit fcts, + fixs = doit fixs, + interface = {strs = ignore, + types = ignore, + vals = ignore}, + sigs = doit sigs, + strs = doit strs, + types = doit types, + vals = doit vals}) in - () - end - -fun processDefUse (E as T f) = - let - val _ = setTyconNames E - val _ = forceUsed E - val all: {class: Class.t, - def: Layout.t, - extra: Layout.t list, - isUsed: bool, - region: Region.t, - uses: Region.t list} list ref = ref [] - fun doit (sel, mkExtra) = - let - val NameSpace.T {defUses, region, toSymbol, ...} = sel f - in - List.foreach - (!defUses, fn {class, def, uses, range, ...} => - List.push - (all, {class = class, - def = Symbol.layout (toSymbol def), - extra = mkExtra range, - isUsed = Uses.isUsed uses, - region = region def, - uses = List.fold (Uses.all uses, [], fn (u, ac) => - region u :: ac)})) - end - val _ = doit (#fcts, fn _ => []) - val _ = doit (#sigs, fn _ => []) - val _ = doit (#strs, fn _ => []) - val _ = doit (#types, fn _ => []) - local - fun mkExtraFromSchemes l = - List.keepAllMap - (l, fn (_, s) => - Option.map (s, Type.layoutPretty o Scheme.ty)) + fn th => + let + val s0 = Scope.new () + val restore: (unit -> unit) list ref = ref [] + fun doit (NameSpace.T {current, ...}) = + let + val current0 = !current + val _ = current := [] + in + List.push (restore, fn () => + (List.foreach (!current, fn v => ignore (Values.pop v)) + ; current := current0)) + end + val _ = (doit bass; doit fcts; doit fixs; doit sigs + ; doit strs; doit types; doit vals) + val _ = List.foreach (!add, fn f => f s0) + (* Clear out any symbols that weren't available in the old scope. *) + fun doit (Values.T vs) = + let + val cur = !vs + in + case cur of + [] => () + | {scope, ...} :: _ => + if Scope.equals (s0, scope) + then () + else (vs := [] + ; List.push (restore, fn () => vs := cur)) + end + val _ = + (* Can't use foreachToplevelSymbol here, because a constructor C may + * have been defined in a local scope but may not have been defined + * at the snapshot point. This will make the identifier C, which + * originally would have elaborated as a variable instead elaborate + * as a constructor. + *) + foreachDefinedSymbol (E, {bass = doit, + fcts = doit, + fixs = doit, + interface = {strs = ignore, + types = ignore, + vals = ignore}, + sigs = doit, + strs = doit, + types = doit, + vals = doit}) + val s1 = !currentScope + val _ = currentScope := s0 + val res = th () + val _ = currentScope := s1 + val _ = List.foreach (!restore, fn f => f ()) in - val _ = doit (#vals, mkExtraFromSchemes) + res end - val a = Array.fromList (!all) - val _ = - QuickSort.sortArray (a, fn ({region = r, ...}, {region = r', ...}) => - Region.<= (r, r')) - val l = - Array.foldr - (a, [], fn (z as {class, def, extra, isUsed, region, uses}, ac) => - case ac of - [] => [z] - | {extra = e', isUsed = i', region = r', uses = u', ...} :: ac' => - if Region.equals (region, r') - then {class = class, - def = def, - extra = extra @ e', - isUsed = isUsed orelse i', - region = region, - uses = uses @ u'} :: ac' - else z :: ac) - val _ = - List.foreach - (l, fn {class, def, isUsed, region, ...} => - if isUsed orelse Option.isNone (Region.left region) - then () - else - let - open Layout - in - Control.warning - (region, - seq [str (concat ["unused ", Class.toString class, ": "]), def], - empty) - end) - val _ = - case !Control.showDefUse of - NONE => () - | SOME f => - File.withOut - (f, fn out => - List.foreach - (l, fn {class, def, extra, region, uses, ...} => - case Region.left region of - NONE => () - | SOME p => - let - val uses = Array.fromList uses - val _ = QuickSort.sortArray (uses, Region.<=) - val uses = - Array.foldr - (uses, [], fn (r, ac) => - case ac of - [] => [r] - | r' :: _ => - if Region.equals (r, r') - then ac - else r :: ac) - open Layout - in - outputl - (align [seq [str (Class.toString class), - str " ", - def, - str " ", - str (SourcePos.toString p), - case extra of - [] => empty - | ss => let - val ts = - List.map (ss, - toString) - val uts = - List.map (List.equivalence - (ts, String.equals), - hd) - val sts = - List.insertionSort - (uts, - fn (l, r) => - size l < size r - orelse size l = size r - andalso l < r) - in - str (concat - (" \"" :: - List.separate - (sts, " andalso ") @ ["\""])) - end], - indent - (align - (List.map - (uses, fn r => - str (case Region.left r of - NONE => "NONE" - | SOME p => - SourcePos.toString p))), - 4)], - out) - end)) - in - () - end - -fun newCons (T {vals, ...}, v) = fn v' => - let - val forceUsed = 1 = Vector.length v - in - Cons.T (Vector.map2 - (v, v', fn ({con, name}, scheme) => - let - val uses = NameSpace.newUses (vals, Class.Con, - Ast.Vid.fromCon name, - if isSome (!Control.showDefUse) - then [(Vid.Con con, SOME scheme)] - else []) - val () = - if not (warnUnused ()) orelse forceUsed - then Uses.forceUsed uses - else () - in - {con = con, - name = name, - scheme = scheme, - uses = uses} - end)) end (* ------------------------------------------------- *) @@ -1821,6 +2326,8 @@ val peekBasid = make #bass val peekFctid = make #fcts val peekFix = make #fixs + val peekIfcStrid = make (#strs o #interface) + val peekIfcTycon= make (#types o #interface) val peekSigid = make #sigs val peekStrid = make #strs val peekTycon = make #types @@ -1831,21 +2338,17 @@ | SOME (vid, s) => Option.map (Vid.deVar vid, fn x => (x, s)) end -fun peekCon (T {vals, ...}, c: Ast.Con.t): (Con.t * Scheme.t option) option = +fun peekCon (T {vals, ...}, c: Ast.Con.t): (Con.t * Scheme.t) option = case NameSpace.peek (vals, Ast.Vid.fromCon c, {markUse = fn (vid, _) => isSome (Vid.deCon vid)}) of NONE => NONE | SOME (vid, s) => Option.map (Vid.deCon vid, fn c => (c, s)) -fun layoutLong (ids: Layout.t list) = - let - open Layout - in - seq (separate (ids, ".")) - end - -fun layoutStrids (ss: Strid.t list): Layout.t = - layoutLong (List.map (ss, Strid.layout)) +fun peekExn (T {vals, ...}, c: Ast.Con.t): (Con.t * Scheme.t) option = + case NameSpace.peek (vals, Ast.Vid.fromCon c, + {markUse = fn (vid, _) => isSome (Vid.deExn vid)}) of + NONE => NONE + | SOME (vid, s) => Option.map (Vid.deExn vid, fn c => (c, s)) structure PeekResult = struct @@ -1854,19 +2357,12 @@ | UndefinedStructure of Strid.t list | Undefined - fun map (r: 'a t, f: 'a -> 'b): 'b t = - case r of - Found a => Found (f a) - | UndefinedStructure ss => UndefinedStructure ss - | Undefined => Undefined - val toOption: 'a t -> 'a option = fn Found z => SOME z | _ => NONE end local - datatype z = datatype PeekResult.t fun make (split: 'a -> Strid.t list * 'b, peek: t * 'b -> 'c option, strPeek: Structure.t * 'b -> 'c option) (E, x) = @@ -1875,19 +2371,19 @@ in case strids of [] => (case peek (E, x) of - NONE => Undefined - | SOME z => Found z) + NONE => PeekResult.Undefined + | SOME z => PeekResult.Found z) | strid :: strids => case peekStrid (E, strid) of - NONE => UndefinedStructure [strid] + NONE => PeekResult.UndefinedStructure [strid] | SOME S => case Structure.peekStrids (S, strids) of - Structure.Found S => + Structure.PeekResult.Found S => (case strPeek (S, x) of - NONE => Undefined - | SOME z => Found z) - | Structure.UndefinedStructure ss => - UndefinedStructure (strid :: ss) + NONE => PeekResult.Undefined + | SOME z => PeekResult.Found z) + | Structure.PeekResult.UndefinedStructure ss => + PeekResult.UndefinedStructure (strid :: ss) end in val peekLongstrid = @@ -1897,6 +2393,7 @@ val peekLongvar = make (Ast.Longvar.split, peekVar, Structure.peekVar) val peekLongvid = make (Ast.Longvid.split, peekVid, Structure.peekVid) val peekLongcon = make (Ast.Longcon.split, peekCon, Structure.peekCon) + val peekLongexn = make (Ast.Longcon.split, peekExn, Structure.peekExn) end (* ------------------------------------------------- *) @@ -1906,9 +2403,7 @@ fun unbound (r: Region.t, className, x: Layout.t): unit = Control.error (r, - let open Layout - in seq [str "undefined ", str className, str " ", x] - end, + seq [str "undefined ", str className, str ": ", x], Layout.empty) fun lookupBasid (E, x) = @@ -1937,49 +2432,48 @@ local fun make (peek: t * 'a -> 'b PeekResult.t, - bogus: unit -> 'b, className: string, region: 'a -> Region.t, layout: 'a -> Layout.t) - (E: t, x: 'a): 'b = + (E: t, x: 'a): 'b option = let datatype z = datatype PeekResult.t in case peek (E, x) of - Found z => z + Found z => SOME z | UndefinedStructure ss => - (unbound (region x, "structure", layoutStrids ss); bogus ()) + (unbound (region x, "structure", layoutStrids ss); NONE) | Undefined => - (unbound (region x, className, layout x); bogus ()) + (unbound (region x, className, layout x); NONE) end in val lookupLongcon = make (peekLongcon, - fn () => (Con.bogus, NONE), "constructor", Ast.Longcon.region, Ast.Longcon.layout) + val lookupLongexn = + make (peekLongexn, + "exception", + Ast.Longcon.region, + Ast.Longcon.layout) val lookupLongstrid = - make (fn (E, x) => PeekResult.map (peekLongstrid (E, x), SOME), - fn () => NONE, + make (peekLongstrid, "structure", Ast.Longstrid.region, Ast.Longstrid.layout) val lookupLongtycon = - make (fn z => PeekResult.map (peekLongtycon z, SOME), - fn () => NONE, + make (peekLongtycon, "type", Ast.Longtycon.region, Ast.Longtycon.layout) val lookupLongvid = make (peekLongvid, - fn () => (Vid.bogus, NONE), "variable", Ast.Longvid.region, Ast.Longvid.layout) val lookupLongvar = make (peekLongvar, - fn () => (Var.bogus, NONE), "variable", Ast.Longvar.region, Ast.Longvar.layout) @@ -1991,115 +2485,23 @@ (* extend *) (* ------------------------------------------------- *) -structure ExtendUses = - struct - datatype 'a t = - New - | Old of 'a Uses.t - | Rebind - - fun fromIsRebind {isRebind} = if isRebind then Rebind else New - end - -val extend: - t * ('a, 'b) NameSpace.t * {domain: 'a, - forceUsed: bool, - range: 'b, - scope: Scope.t, - time: Time.t, - uses: 'a ExtendUses.t} -> unit = - fn (T {maybeAddTop, ...}, - ns as NameSpace.T {class, current, lookup, toSymbol, ...}, - {domain, forceUsed, range, scope, time, uses}) => - let - fun newUses () = - let - val u = NameSpace.newUses (ns, class range, domain, - if isSome (!Control.showDefUse) - andalso (class range = Class.Var - orelse - class range = Class.Exn - orelse - class range = Class.Con) - then [range] - else []) - val () = - if not (warnUnused ()) orelse forceUsed - then Uses.forceUsed u - else () - in - u - end - val values as Values.T r = lookup domain - datatype z = datatype ExtendUses.t - fun new () = - let - val _ = List.push (current, values) - val uses = - case uses of - New => newUses () - | Old u => u - | Rebind => Error.bug "ElaborateEnv.extend.rebind.new: Rebind" - in - {domain = domain, - range = range, - scope = scope, - time = time, - uses = uses} - end - in - case !r of - [] => - let - val _ = - if Scope.isTop scope - then maybeAddTop (toSymbol domain) - else () - in - r := [new ()] - end - | all as ({scope = scope', uses = uses', ...} :: rest) => - if Scope.equals (scope, scope') - then - let - val uses = - case uses of - New => newUses () - | Old u => u - | Rebind => uses' - in - r := {domain = domain, - range = range, - scope = scope, - time = time, - uses = uses} :: rest - end - else r := new () :: all - end - local - val extend = - fn (E as T (fields as {currentScope, ...}), get, - domain: 'a, - range: 'b, - forceUsed: bool, - uses: 'a ExtendUses.t) => - let - val ns = get fields - in - extend (E, ns, {domain = domain, - forceUsed = forceUsed, - range = range, - scope = !currentScope, - time = Time.next (), - uses = uses}) - end + fun extend (T (r as {currentScope, ...}), sel, + domain: 'a, range: 'b, forceUsed: bool, uses) = + NameSpace.extend + (sel r, + {domain = domain, + forceUsed = forceUsed, + range = range, + scope = !currentScope, + time = Time.next (), + uses = uses}) in - fun extendBasid (E, d, r) = extend (E, #bass, d, r, false, ExtendUses.New) - fun extendFctid (E, d, r) = extend (E, #fcts, d, r, false, ExtendUses.New) - fun extendFix (E, d, r) = extend (E, #fixs, d, r, false, ExtendUses.New) - fun extendSigid (E, d, r) = extend (E, #sigs, d, r, false, ExtendUses.New) - fun extendStrid (E, d, r) = extend (E, #strs, d, r, false, ExtendUses.New) + fun extendBasid (E, d, r) = extend (E, #bass, d, r, false, Uses.Extend.new) + fun extendFctid (E, d, r) = extend (E, #fcts, d, r, false, Uses.Extend.new) + fun extendFix (E, d, r) = extend (E, #fixs, d, r, false, Uses.Extend.new) + fun extendSigid (E, d, r) = extend (E, #sigs, d, r, false, Uses.Extend.new) + fun extendStrid (E, d, r) = extend (E, #strs, d, r, false, Uses.Extend.new) fun extendVals (E, d, r, eu) = extend (E, #vals, d, r, false, eu) fun extendTycon (E, d, s, {forceUsed, isRebind}) = let @@ -2108,87 +2510,121 @@ datatype z = datatype TypeStr.node in case TypeStr.node s of - Datatype {cons = Cons.T v , ...} => + Datatype {cons, ...} => Vector.foreach - (v, fn {con, name, scheme, uses} => + (Cons.dest cons, fn {con, name, scheme, uses} => extendVals (E, Ast.Vid.fromCon name, - (Vid.Con con, SOME scheme), - ExtendUses.Old uses)) + (Vid.Con con, scheme), + Uses.Extend.old uses)) | _ => () end val _ = extend (E, #types, d, s, forceUsed, - ExtendUses.fromIsRebind {isRebind = isRebind}) + Uses.Extend.fromIsRebind {isRebind = isRebind}) in () end end fun extendExn (E, c, c', s) = - extendVals (E, Ast.Vid.fromCon c, (Vid.Exn c', s), ExtendUses.New) + extendVals (E, Ast.Vid.fromCon c, (Vid.Exn c', s), Uses.Extend.new) fun extendVar (E, x, x', s, ir) = - extendVals (E, Ast.Vid.fromVar x, (Vid.Var x', SOME s), - ExtendUses.fromIsRebind ir) + extendVals (E, Ast.Vid.fromVar x, (Vid.Var x', s), + Uses.Extend.fromIsRebind ir) val extendVar = Trace.trace ("ElaborateEnv.extendVar", fn (_, x, x', s, _) => - Layout.tuple [Ast.Var.layout x, Var.layout x', Scheme.layoutPretty s], + Layout.tuple [Ast.Var.layout x, Var.layout x', Scheme.layout s], Unit.layout) extendVar fun extendOverload (E, p, x, yts, s) = - extendVals (E, Ast.Vid.fromVar x, (Vid.Overload (p, yts), SOME s), - ExtendUses.New) + extendVals (E, Ast.Vid.fromVar x, (Vid.Overload (p, yts), s), + Uses.Extend.new) + +(* ------------------------------------------------- *) +(* scope *) +(* ------------------------------------------------- *) + +fun scopeAll (T {currentScope, bass, fcts, fixs, sigs, strs, types, vals, ...}, th) = + let + val b = NameSpace.scope bass + val fc = NameSpace.scope fcts + val f = NameSpace.scope fixs + val si = NameSpace.scope sigs + val s = NameSpace.scope strs + val t = NameSpace.scope types + val v = NameSpace.scope vals + val s0 = !currentScope + val _ = currentScope := Scope.new () + val res = th () + val _ = (b (); fc (); f (); si (); s (); t (); v ()) + val _ = currentScope := s0 + in + res + end + +fun scope (T {currentScope, fixs, strs, types, vals, ...}, th) = + let + val f = NameSpace.scope fixs + val s = NameSpace.scope strs + val t = NameSpace.scope types + val v = NameSpace.scope vals + val s0 = !currentScope + val _ = currentScope := Scope.new () + val res = th () + val _ = (f (); s (); t (); v ()) + val _ = currentScope := s0 + in + res + end -(* ------------------------------------------------- *) +(* ------------------------------------------------- *) (* local *) (* ------------------------------------------------- *) + local - fun doit (E: t, ns as NameSpace.T {current, ...}, s0) = + fun locall (ns, s0) = let - val old = !current - val _ = current := [] + val f = NameSpace.locall ns in fn () => let - val c1 = !current - val _ = current := [] + val f = f () in fn () => let - val c2 = !current - val lift = List.revMap (c2, Values.pop) - val _ = List.foreach (c1, fn v => ignore (Values.pop v)) - val _ = current := old + val elts = f () val _ = - List.foreach (lift, fn {domain, range, time, uses, ...} => - extend (E, ns, {domain = domain, - forceUsed = false, - range = range, - scope = s0, - time = time, - uses = ExtendUses.Old uses})) + List.foreach (elts, fn {domain, range, time, uses} => + NameSpace.extend + (ns, {domain = domain, + forceUsed = false, + range = range, + scope = s0, + time = time, + uses = Uses.Extend.old uses})) in () end end end in - fun localAll (E as T {currentScope, bass, fcts, fixs, sigs, strs, types, vals, ...}, + fun localAll (T {currentScope, bass, fcts, fixs, sigs, strs, types, vals, ...}, f1, f2) = let val s0 = !currentScope - val bass = doit (E, bass, s0) - val fcts = doit (E, fcts, s0) - val fixs = doit (E, fixs, s0) - val sigs = doit (E, sigs, s0) - val strs = doit (E, strs, s0) - val types = doit (E, types, s0) - val vals = doit (E, vals, s0) - val _ = currentScope := Scope.new {isTop = true} + val bass = locall (bass, s0) + val fcts = locall (fcts, s0) + val fixs = locall (fixs, s0) + val sigs = locall (sigs, s0) + val strs = locall (strs, s0) + val types = locall (types, s0) + val vals = locall (vals, s0) + val _ = currentScope := Scope.new () val a1 = f1 () val bass = bass () val fcts = fcts () @@ -2197,29 +2633,29 @@ val strs = strs () val types = types () val vals = vals () - val _ = currentScope := Scope.new {isTop = true} + val _ = currentScope := Scope.new () val a2 = f2 a1 - val _ = (bass(); fcts (); fixs (); sigs (); strs (); types (); vals ()) + val _ = (bass (); fcts (); fixs (); sigs (); strs (); types (); vals ()) val _ = currentScope := s0 in a2 end - fun localModule (E as T {currentScope, fixs, strs, types, vals, ...}, + fun localModule (T {currentScope, fixs, strs, types, vals, ...}, f1, f2) = let val s0 = !currentScope - val fixs = doit (E, fixs, s0) - val strs = doit (E, strs, s0) - val types = doit (E, types, s0) - val vals = doit (E, vals, s0) - val _ = currentScope := Scope.new {isTop = false} + val fixs = locall (fixs, s0) + val strs = locall (strs, s0) + val types = locall (types, s0) + val vals = locall (vals, s0) + val _ = currentScope := Scope.new () val a1 = f1 () val fixs = fixs () val strs = strs () val types = types () val vals = vals () - val _ = currentScope := Scope.new {isTop = false} + val _ = currentScope := Scope.new () val a2 = f2 a1 val _ = (fixs (); strs (); types (); vals ()) val _ = currentScope := s0 @@ -2233,49 +2669,33 @@ val localCore = localModule end -fun forceUsedLocal (E as T {currentScope, bass, fcts, fixs, sigs, strs, types, vals, ...}, - th) = +(* ------------------------------------------------- *) +(* makeBasis / makeStructure *) +(* ------------------------------------------------- *) + +fun makeBasis (T {currentScope, bass, fcts, fixs, sigs, strs, types, vals, ...}, make) = let - fun doit (forceRange: 'b -> unit, ns as NameSpace.T {current, ...}, s0) = - let - val old = !current - val _ = current := [] - in - fn () => - let - val c = !current - val lift = List.revMap (c, Values.pop) - val _ = current := old - val _ = - List.foreach - (lift, fn {domain, range, time, uses, ...} => - (Uses.forceUsed uses - ; forceRange range - ; extend (E, ns, {domain = domain, - forceUsed = false, - range = range, - scope = s0, - time = time, - uses = ExtendUses.Old uses}))) - in - () - end - end + val bass = NameSpace.collect bass + val fcts = NameSpace.collect fcts + val fixs = NameSpace.collect fixs + val sigs = NameSpace.collect sigs + val strs = NameSpace.collect strs + val types = NameSpace.collect types + val vals = NameSpace.collect vals val s0 = !currentScope - val bass = doit (ignore, bass, s0) - val fcts = doit (fn f => Option.app (FunctorClosure.result f, - Structure.forceUsed), fcts, s0) - val fixs = doit (ignore, fixs, s0) - val sigs = doit (ignore, sigs, s0) - val strs = doit (Structure.forceUsed, strs, s0) - val types = doit (ignore, types, s0) - val vals = doit (ignore, vals, s0) - val _ = currentScope := Scope.new {isTop = true} - val res = th () - val _ = (bass(); fcts (); fixs (); sigs (); strs (); types (); vals ()) + val _ = currentScope := Scope.new () + val res = make () + val B = Basis.T {plist = PropertyList.new (), + bass = bass (), + fcts = fcts (), + fixs = fixs (), + sigs = sigs (), + strs = strs (), + types = types (), + vals = vals ()} val _ = currentScope := s0 in - res + (res, B) end fun makeStructure (T {currentScope, fixs, strs, types, vals, ...}, make) = @@ -2285,7 +2705,7 @@ val t = NameSpace.collect types val v = NameSpace.collect vals val s0 = !currentScope - val _ = currentScope := Scope.new {isTop = false} + val _ = currentScope := Scope.new () val res = make () val _ = f () val S = Structure.T {interface = NONE, @@ -2298,146 +2718,991 @@ (res, S) end -fun makeBasis (T {currentScope, bass, fcts, fixs, sigs, strs, types, vals, ...}, make) = +(* ------------------------------------------------- *) +(* open *) +(* ------------------------------------------------- *) + +local + fun openn (ns, Info.T a, s) = + Array.foreach (a, fn {domain, range, time, uses} => + NameSpace.extend (ns, {domain = domain, + forceUsed = false, + range = range, + scope = s, + time = time, + uses = Uses.Extend.old uses})) +in + fun openBasis (T {currentScope, bass, fcts, fixs, sigs, strs, vals, types, ...}, + Basis.T {bass = bass', + fcts = fcts', + fixs = fixs', + sigs = sigs', + strs = strs', + vals = vals', + types = types', ...}): unit = + let + val s0 = !currentScope + val _ = openn (bass, bass', s0) + val _ = openn (fcts, fcts', s0) + val _ = openn (fixs, fixs', s0) + val _ = openn (sigs, sigs', s0) + val _ = openn (strs, strs', s0) + val _ = openn (vals, vals', s0) + val _ = openn (types, types', s0) + in + () + end + + fun openStructure (T {currentScope, strs, vals, types, ...}, + Structure.T {strs = strs', + vals = vals', + types = types', ...}): unit = + let + val s0 = !currentScope + val _ = openn (strs, strs', s0) + val _ = openn (vals, vals', s0) + val _ = openn (types, types', s0) + in + () + end +end + +(* ------------------------------------------------- *) +(* forceUsed *) +(* ------------------------------------------------- *) + +(* Force everything that is currently in scope to be marked as used. *) +fun forceUsed E = let - val bass = NameSpace.collect bass - val fcts = NameSpace.collect fcts - val fixs = NameSpace.collect fixs - val sigs = NameSpace.collect sigs - val strs = NameSpace.collect strs - val types = NameSpace.collect types - val vals = NameSpace.collect vals - val s0 = !currentScope - val _ = currentScope := Scope.new {isTop = true} - val res = make () - val B = Basis.T {plist = PropertyList.new (), - bass = bass (), - fcts = fcts (), - fixs = fixs (), - sigs = sigs (), - strs = strs (), - types = types (), - vals = vals ()} - val _ = currentScope := s0 + fun doit forceRange (Values.T r) = + case !r of + [] => () + | {uses, range, ...} :: _ => + (Uses.forceUsed uses + ; forceRange range) + val _ = + foreachDefinedSymbol + (E, {bass = doit ignore, + fcts = doit FunctorClosure.forceUsed, + fixs = doit ignore, + interface = {strs = doit ignore, + types = doit ignore, + vals = doit ignore}, + sigs = doit ignore, + strs = doit Structure.forceUsed, + types = doit ignore, + vals = doit ignore}) in - (res, B) + () end -fun scope (T {currentScope, fixs, strs, types, vals, ...}, th) = +fun forceUsedLocal (T {currentScope, bass, fcts, fixs, sigs, strs, types, vals, ...}, + th) = let - fun doit (NameSpace.T {current, ...}) = + fun doit (forceRange: 'b -> unit, ns as NameSpace.T {current, ...}, s0) = let val old = !current val _ = current := [] - in fn () => (List.foreach (!current, fn v => ignore (Values.pop v)) - ; current := old) + in + fn () => + let + val c = !current + val lift = List.revMap (c, Values.pop) + val _ = current := old + val _ = + List.foreach + (lift, fn {domain, range, time, uses, ...} => + (Uses.forceUsed uses + ; forceRange range + ; NameSpace.extend (ns, {domain = domain, + forceUsed = false, + range = range, + scope = s0, + time = time, + uses = Uses.Extend.old uses}))) + in + () + end end val s0 = !currentScope - val _ = currentScope := Scope.new {isTop = false} - val f = doit fixs - val s = doit strs - val t = doit types - val v = doit vals + val bass = doit (ignore, bass, s0) + val fcts = doit (FunctorClosure.forceUsed, fcts, s0) + val fixs = doit (ignore, fixs, s0) + val sigs = doit (ignore, sigs, s0) + val strs = doit (Structure.forceUsed, strs, s0) + val types = doit (ignore, types, s0) + val vals = doit (ignore, vals, s0) + val _ = currentScope := Scope.new () val res = th () - val _ = (f (); s (); t (); v ()) + val _ = (bass(); fcts (); fixs (); sigs (); strs (); types (); vals ()) val _ = currentScope := s0 in res end -fun scopeAll (T {currentScope, bass, fcts, fixs, sigs, strs, types, vals, ...}, th) = +(* ------------------------------------------------- *) +(* InterfaceEnv *) +(* ------------------------------------------------- *) + +structure InterfaceEnv = + struct + structure Env = + struct + val lookupLongtycon = lookupLongtycon + val peekIfcStrid = peekIfcStrid + val peekIfcTycon = peekIfcTycon + val lookupSigid = lookupSigid + end + + local + open Interface + in + structure FlexibleTycon = FlexibleTycon + structure Scheme = Scheme + structure Status = Status + structure TypeStr = TypeStr + end + + type t = t + + (* ------------------------------------------------- *) + (* peek *) + (* ------------------------------------------------- *) + + val peekStrid = Env.peekIfcStrid + val peekTycon = Env.peekIfcTycon + + (* ------------------------------------------------- *) + (* lookup *) + (* ------------------------------------------------- *) + + val lookupSigid = Env.lookupSigid + + fun lookupLongtycon (E: t, long: Longtycon.t): TypeStr.t option = + let + fun lookupEnv () = + Option.map (Env.lookupLongtycon (E, long), TypeStr.fromEnv) + val (strids, c) = Longtycon.split long + in + case strids of + [] => + (case peekTycon (E, c) of + NONE => lookupEnv () + | SOME s => SOME s) + | s :: ss => + case peekStrid (E, s) of + NONE => lookupEnv () + | SOME I => + ((fn opt => Option.map (opt, #2)) o Interface.lookupLongtycon) + (I, Longtycon.long (ss, c), Longtycon.region long, + {prefix = [s]}) + end + + (* ------------------------------------------------- *) + (* extend *) + (* ------------------------------------------------- *) + + datatype z = MustExtend of Region.t | MustRebind + + fun extend (T {currentScope, interface, ...}, sel, + domain, range, kind, must) = + NameSpace.extend + (sel interface, + {domain = domain, + forceUsed = true, + range = range, + scope = !currentScope, + time = Time.next (), + uses = (case must of + MustExtend extendRegion => + (fn {rebind} => + let + val NameSpace.T {region, toSymbol, ...} = sel interface + val () = + case rebind of + SOME {domain = domain', ...} => + let + open Layout + in + Control.error + (extendRegion, + seq [str "duplicate ", + str kind, + str " specification: ", + Symbol.layout (toSymbol domain)], + (align o List.map) + (if Region.equals (extendRegion, + region domain) + then [domain'] + else [domain', domain], + fn d => seq [str "spec at: ", + Region.layout (region d)])) + end + | _ => () + in + NONE + end) + | MustRebind => + (fn {rebind} => + case rebind of + NONE => + Error.bug "ElaborateEnv.InterfaceEnv.extend: MustRebind" + | SOME {uses, ...} => + SOME uses))}) + + fun extendStrid (E, s, I, r) = + extend (E, #strs, s, I, "structure", MustExtend r) + + fun extendTycon (E, c, s, r) = + extend (E, #types, c, s, "type", MustExtend r) + + fun extendVid (E, v, st, s, r) = + extend (E, #vals, v, (st, s), "value", MustExtend r) + + fun rebindTycon (E, c, s) = + extend (E, #types, c, s, "type", MustRebind) + + (* ------------------------------------------------- *) + (* makeInterface *) + (* ------------------------------------------------- *) + + fun makeInterface (T {currentScope, interface = {strs, types, vals}, ...}, + {isTop}, make) = + let + val s = NameSpace.collect strs + val t = NameSpace.collect types + val v = NameSpace.collect vals + val s0 = !currentScope + val _ = currentScope := Scope.new () + val res = make () + val Info.T s = s () + val s = Array.map (s, fn {domain, range, ...} => (domain, range)) + val Info.T t = t () + val t = Array.map (t, fn {domain, range, ...} => (domain, range)) + val Info.T v = v () + val v = Array.map (v, fn {domain, range = (status, scheme), ...} => + (domain, (status, scheme))) + val I = Interface.new {isClosed = isTop, + original = NONE, + strs = s, types = t, vals = v} + val _ = currentScope := s0 + in + (I, res) + end + + (* ------------------------------------------------- *) + (* openInterface *) + (* ------------------------------------------------- *) + + fun openInterface (E, I, r: Region.t) = + let + val {strs, vals, types} = Interface.dest I + val _ = Array.foreach (strs, fn (s, I) => extendStrid (E, s, I, r)) + val _ = Array.foreach (types, fn (c, s) => extendTycon (E, c, s, r)) + val _ = Array.foreach (vals, fn (x, (s, sc)) => + extendVid (E, x, s, sc, r)) + in + () + end + + (* ------------------------------------------------- *) + (* extend *) + (* ------------------------------------------------- *) + + val extendStrid = fn (E, s, I) => extendStrid (E, s, I, Strid.region s) + + val extendTycon = fn (E, c, s) => extendTycon (E, c, s, Ast.Tycon.region c) + + val extendVid = fn (E, v, st, s) => extendVid (E, v, st, s, Ast.Vid.region v) + + fun extendCon (E, c, s) = + extendVid (E, Ast.Vid.fromCon c, Status.Con, s) + + fun extendExn (E, c, s) = + extendVid (E, Ast.Vid.fromCon c, Status.Exn, s) + + (* ------------------------------------------------- *) + (* makeLayoutPrettyFlexTycon *) + (* ------------------------------------------------- *) + + fun genLayoutPrettyFlexTycon {prefixUnset} = + let + val {destroy = destroyLayoutPrettyFlexTycon: unit -> unit, + get = layoutPrettyFlexTycon: FlexibleTycon.t -> Layout.t, + set = setLayoutPrettyFlexTycon: FlexibleTycon.t * Layout.t -> unit} = + Property.destGetSet + (FlexibleTycon.plist, + Property.initFun + (fn f => + let val l = FlexibleTycon.layoutPrettyDefault f + in if prefixUnset then seq [str "??.", l] else l + end)) + fun doFlexTycon (flex, name, strids: Strid.t list) = + let + val name = layoutLongRev (strids, Ast.Tycon.layout name) + in + setLayoutPrettyFlexTycon (flex, name) + end + fun loopFlexTyconMap (TyconMap.T {strs, types}, strids) = + let + val () = + Array.foreach + (types, fn (name, flex) => + doFlexTycon (flex, name, strids)) + val () = + Array.foreach + (strs, fn (name, flexTyconMap) => + loopFlexTyconMap (flexTyconMap, name::strids)) + in + () + end + in + {destroy = destroyLayoutPrettyFlexTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + loopFlexTyconMap = loopFlexTyconMap} + end + +end + +val makeInterfaceEnv = fn E => E + +(* ------------------------------------------------- *) +(* makeLayoutPrettyTycon *) +(* ------------------------------------------------- *) + +fun genLayoutPrettyTycon {prefixUnset} = let - fun doit (NameSpace.T {current, ...}) = + val {destroy = destroyLayoutPrettyTycon: unit -> unit, + get = layoutPrettyTycon: Tycon.t -> Layout.t, + set = setLayoutPrettyTycon: Tycon.t * Layout.t -> unit} = + Property.destGetSet + (Tycon.plist, + Property.initFun + (fn c => + let val l = Tycon.layoutPrettyDefault c + in if prefixUnset then seq [str "?.", l] else l + end)) + val {destroy = destroyTyconShortest, + get = tyconShortest: Tycon.t -> (int * int) option ref, ...} = + Property.destGet (Tycon.plist, Property.initFun (fn _ => ref NONE)) + fun doType (typeStr: TypeStr.t, + name: Ast.Tycon.t, + priority: int, + length: int, + strids: Strid.t list): unit = + case TypeStr.toTyconOpt typeStr of + NONE => () + | SOME c => + let + val r = tyconShortest c + fun doit () = + let + val _ = r := SOME (priority, length) + val name = layoutLongRev (strids, Ast.Tycon.layout name) + in + setLayoutPrettyTycon (c, name) + end + in + case !r of + NONE => doit () + | SOME (priority', length') => + (case Int.compare (priority, priority') of + LESS => doit () + | EQUAL => if length >= length' + then () + else doit () + | GREATER => ()) + end + val {destroy = destroyStrShortest, + get = strShortest: Structure.t -> (int * int) option ref, ...} = + Property.destGet (Structure.plist, Property.initFun (fn _ => ref NONE)) + fun loopStr (s as Structure.T {strs, types, ...}, + priority: int, + length: int, + strids: Strid.t list): unit = let - val old = !current - val _ = current := [] - in fn () => (List.foreach (!current, fn v => ignore (Values.pop v)) - ; current := old) + val r = strShortest s + fun doit () = + let + val _ = r := SOME (priority, length) + (* Process the declarations in decreasing order of + * definition time so that later declarations will be + * processed first, and hence will take precedence. + *) + val _ = + Info.foreachByTime + (types, fn (name, typeStr) => + doType (typeStr, name, priority, length, strids)) + val _ = + Info.foreachByTime + (strs, fn (strid, str) => + loopStr (str, priority, 1 + length, strid::strids)) + in + () + end + in + case !r of + NONE => doit () + | SOME (priority', length') => + (case Int.compare (priority, priority') of + LESS => doit () + | EQUAL => if length >= length' + then () + else doit () + | GREATER => ()) + end + fun loopFlexTyconMap (tm: FlexibleTycon.t TyconMap.t, priority, length: int, strids: Strid.t list): unit = + let + val TyconMap.T {strs, types} = tm + val _ = + Array.foreach + (types, fn (name, flex) => + doType (FlexibleTycon.toEnv flex, name, priority, length, strids)) + val _ = + Array.foreach + (strs, fn (strid, tm) => + loopFlexTyconMap (tm, priority, 1 + length, strid::strids)) + in + () + end + fun mk loop (z, priority, strids) = + loop (z, priority, length strids, strids) + in + {destroy = fn () => (destroyStrShortest () + ; destroyTyconShortest () + ; destroyLayoutPrettyTycon ()), + layoutPrettyTycon = layoutPrettyTycon, + setLayoutPrettyTycon = setLayoutPrettyTycon, + loopStr = mk loopStr, + loopFlexTyconMap = mk loopFlexTyconMap} + end + +fun makeLayoutPrettyTycon (E, {prefixUnset}) = + let + val {destroy = destroyLayoutPrettyTycon, + layoutPrettyTycon, setLayoutPrettyTycon, + loopStr, ...} = + genLayoutPrettyTycon {prefixUnset = prefixUnset} + fun pre () = + let + val {strs, types, ...} = current (E, fn _ => true) + in + loopStr (Structure.T {interface = NONE, + plist = PropertyList.new (), + strs = strs (), + types = types (), + vals = Info.T (Array.new0 ())}, + 0, []) + end + val pre = ClearablePromise.delay pre + in + {destroy = fn () => (ClearablePromise.clear pre + ; destroyLayoutPrettyTycon ()), + layoutPrettyTycon = fn c => (ClearablePromise.force pre + ; layoutPrettyTycon c), + setLayoutPrettyTycon = setLayoutPrettyTycon, + loopStr = loopStr} + end + +fun makeLayoutPrettyTyconAndFlexTycon (E, _, Io, {prefixUnset}) = + let + val {destroy = destroyLayoutPrettyFlexTycon, + layoutPrettyFlexTycon, loopFlexTyconMap, ...} = + InterfaceEnv.genLayoutPrettyFlexTycon {prefixUnset = prefixUnset} + val {destroy = destroyLayoutPrettyTycon, + layoutPrettyTycon, setLayoutPrettyTycon, + loopStr, ...} = + genLayoutPrettyTycon {prefixUnset = prefixUnset} + fun pre () = + let + val {strs, types, interface = {strs = ifcStrs, types = ifcTypes, ...}, ...} = + current (E, fn _ => true) + val strs = strs () + val types = types () + val ifcStrs = ifcStrs () + val ifcTypes = ifcTypes () + local + fun doit (env, ifc, toSymbol) = + if Info.isEmpty ifc + then env + else Info.keepAll + (env, fn {domain, ...} => + case Info.peek (ifc, domain, toSymbol) of + NONE => true + | SOME _ => false) + in + val () = loopStr (Structure.T {interface = NONE, + plist = PropertyList.new (), + strs = doit (strs, ifcStrs, Ast.Strid.toSymbol), + types = doit (types, ifcTypes, Ast.Tycon.toSymbol), + vals = Info.T (Array.new0 ())}, + 0, []) + end + local + fun doit ifc = + let val Info.T a = ifc + in Array.map (a, fn {domain, range, ...} => (domain, range)) + end + val I = Interface.new {isClosed = true, + original = NONE, + strs = doit ifcStrs, + types = doit ifcTypes, + vals = Array.new0 ()} + in + val () = loopFlexTyconMap (Interface.flexibleTycons I, []) + end + val () = Option.foreach + (Io, fn I => + loopFlexTyconMap (Interface.flexibleTycons I, + [Ast.Strid.uSig])) + in + () + end + val pre = ClearablePromise.delay pre + in + {destroy = fn () => (ClearablePromise.clear pre + ; destroyLayoutPrettyFlexTycon () + ; destroyLayoutPrettyTycon ()), + layoutPrettyTycon = fn c => (ClearablePromise.force pre + ; layoutPrettyTycon c), + layoutPrettyFlexTycon = fn f => (ClearablePromise.force pre + ; layoutPrettyFlexTycon f), + setLayoutPrettyTycon = setLayoutPrettyTycon} + end + +fun output (E: t, out, {compact, def, flat, onlyCurrent, prefixUnset}): unit = + let + val keep = + if onlyCurrent + then let + val T {currentScope, ...} = E + val currentScope = !currentScope + in + fn {scope, ...} => + Scope.equals (scope, currentScope) + end + else fn _ => true + val {bass, fcts, sigs, strs, types, vals, ...} = current (E, keep) + val bass = bass () + val fcts = fcts () + val sigs = sigs () + val strs = strs () + val types = types () + val vals = vals () + + val {get = interfaceSigid: Interface.t -> (Sigid.t * Interface.t) option, + set = setInterfaceSigid, ...} = + Property.getSet (Interface.plist, Property.initConst NONE) + val _ = Array.foreach (let val Info.T sigs = sigs in sigs end, + fn {domain = s, range = I, ...} => + setInterfaceSigid (I, SOME (s, I))) + val {destroy = destroyLayoutPrettyTycon, + layoutPrettyTycon, setLayoutPrettyTycon, + loopStr, ...} = + makeLayoutPrettyTycon (E, {prefixUnset = prefixUnset}) + + val empty = Layout.empty + val indent = fn l => Layout.indent (l, 3) + val paren = Layout.paren + + val {destroy, layoutSigDefn, layoutSigFlex, + layoutStr, layoutStrDefn, + layoutTypeDefn, layoutValDefn, ...} = + Structure.layouts {interfaceSigid = interfaceSigid, + layoutPrettyTycon = layoutPrettyTycon, + setLayoutPrettyTycon = setLayoutPrettyTycon} + val destroy = fn () => + (destroy (); destroyLayoutPrettyTycon ()) + + fun layoutFctDefn (name, FunctorClosure.T {argInterface, summary, ...}, + {compact, def}) = + let + val bind = + seq [str "functor ", Fctid.layout name] + val argId = Strid.uArg (Fctid.toString name) + val {abbrev = argAbbrev, full = argFull} = + let + val bind = + seq [Strid.layout argId, str ":"] + val {abbrev, full} = + layoutSigFlex (argInterface, + {compact = compact, + elide = {strs = NONE, types = NONE, vals = NONE}}) + val abbrev = + case abbrev () of + NONE => NONE + | SOME sigg => SOME (seq [bind, str " ", sigg]) + val full = fn () => + align [bind, indent (full ())] + in + {abbrev = abbrev, full = full} + end + val arg = #1 (Structure.dummy (argInterface, {prefix = Strid.toString argId ^ "."})) + val () = loopStr (arg, 1, [argId]) + val {abbrev = resAbbrev, full = resFull} = + case summary arg of + NONE => {abbrev = SOME (str "???"), full = fn () => str "???"} + | SOME res => let + val resId = Strid.uRes (Fctid.toString name) + val () = loopStr (res, 2, [resId]) + val {abbrev, full} = layoutStr (res, {compact = compact}) + val abbrev = + case abbrev () of + NONE => NONE + | SOME sigg => + SOME (if compact + then Layout.compact sigg + else sigg) + in + {abbrev = abbrev, full = full} + end + val def = + if def + then seq [str "(* @ ", + Region.layout (Fctid.region name), + str " *)"] + else empty + val full = fn (arg, res) => + align + [bind, + indent (seq [paren arg, str ":"]), + indent res, + indent def] + in + case (argAbbrev, resAbbrev) of + (NONE, NONE) => full (argFull (), resFull ()) + | (NONE, SOME resAbbrev) => full (argFull (), resAbbrev) + | (SOME argAbbrev, NONE) => full (argAbbrev, resFull ()) + | (SOME argAbbrev, SOME resAbbrev) => + let + val lay = + mayAlign + [seq [bind, str " ", + paren argAbbrev, str ": ", + resAbbrev], + indent def] + val lay = + if compact + then Layout.compact lay + else lay + in + lay + end + end + fun layoutBasDefn (name, _, {compact, def}) = + let + val lay = + mayAlign + [seq [str "basis ", Basid.layout name], + indent (if def + then seq [str "(* @ ", + Region.layout (Basid.region name), + str " *)"] + else empty)] + val lay = + if compact + then Layout.compact lay + else lay + in + lay + end + + val outputl = fn l => Layout.outputl (l, out) + val maybeOutputl = fn lo => + case lo of + NONE => () + | SOME l => outputl l + val outputTypeDefn = + fn (strids, name, tyStr) => + (outputl o layoutTypeDefn) + (strids, name, tyStr, + {compact = compact, def = def}) + val outputValDefn = + fn (strids, name, (vid, scheme)) => + (maybeOutputl o layoutValDefn) + (strids, name, (vid, scheme), + {compact = compact, con = flat, def = def}) + val outputSigDefn = + fn (name, I) => + (outputl o layoutSigDefn) + (name, I, + {compact = compact, def = def}) + val outputStrDefn = + fn (strids, name, S) => + (outputl o layoutStrDefn) + (strids, name, S, + {compact = compact, def = def}) + fun outputStrDefnFlat (strids, name, S) = + let + val () = outputStrDefn (strids, name, S) + val strids = name::strids + val Structure.T {strs, types, vals, ...} = S + fun doit (Info.T a, output) = + Array.foreach + (a, fn {domain, range, ...} => + output (strids, domain, range)) + val () = doit (types, outputTypeDefn) + val () = doit (vals, outputValDefn) + val () = doit (strs, outputStrDefnFlat) + in + () end - val s0 = !currentScope - val _ = currentScope := Scope.new {isTop = true} - val b = doit bass - val fc = doit fcts - val f = doit fixs - val si = doit sigs - val s = doit strs - val t = doit types - val v = doit vals - val res = th () - val _ = (b (); fc (); f (); si (); s (); t (); v ()) - val _ = currentScope := s0 + val outputFctDefn = + fn (name, fctCls) => + (outputl o layoutFctDefn) + (name, fctCls, + {compact = compact, def = def}) + val outputBasDefn = + fn (name, B) => + (outputl o layoutBasDefn) + (name, B, + {compact = compact, def = def}) + + fun doit (Info.T a, output) = + Array.foreach + (a, fn {domain, range, ...} => + output (domain, range)) + val () = doit (types, fn (name, tyStr) => + outputTypeDefn ([], name, tyStr)) + val () = doit (vals, fn (name, (vid, scheme)) => + outputValDefn ([], name, (vid, scheme))) + val () = doit (sigs, outputSigDefn) + val () = doit (strs, fn (name, S) => + if flat + then outputStrDefnFlat ([], name, S) + else outputStrDefn ([], name, S)) + val () = doit (fcts, outputFctDefn) + val () = doit (bass, outputBasDefn) + val () = destroy () in - res + () end -fun openStructure (E as T {currentScope, strs, vals, types, ...}, - Structure.T {strs = strs', - vals = vals', - types = types', ...}): unit = - let - val scope = !currentScope - fun doit (ns, Info.T a) = - Array.foreach (a, fn {domain, range, time, uses} => - extend (E, ns, {domain = domain, - forceUsed = false, - range = range, - scope = scope, - time = time, - uses = ExtendUses.Old uses})) - val _ = doit (strs, strs') - val _ = doit (vals, vals') - val _ = doit (types, types') +fun showBasis (E, f) = + File.withOut + (f, fn out => + output + (E, out, + {compact = !Control.showBasisCompact, + def = !Control.showBasisDef, + flat = !Control.showBasisFlat, + onlyCurrent = false, + prefixUnset = true})) + +val showBasis = + Control.trace (Control.Detail, "showBasis") showBasis + +(* ------------------------------------------------- *) +(* processDefUse *) +(* ------------------------------------------------- *) + +fun processDefUse (E as T f) = + let + val {destroy = destroyLayoutPrettyTycon, + layoutPrettyTycon, ...} = + makeLayoutPrettyTycon (E, {prefixUnset = false}) + val {destroy = destroyLayoutPrettyTyvar, + layoutPretty = layoutPrettyTyvar, + reset = resetLayoutPrettyTyvar} = + Tyvar.makeLayoutPrettyLocal () + fun layoutPrettyScheme s = + let + val () = resetLayoutPrettyTyvar () + in + (#1 o Type.layoutPretty) + (Scheme.ty s, + {expandOpaque = false, + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) + end + val destroy = fn () => + (destroyLayoutPrettyTyvar () + ; destroyLayoutPrettyTycon ()) + + val _ = forceUsed E + val all: {class: Class.t, + def: Layout.t, + extra: Layout.t list, + isUsed: bool, + region: Region.t, + uses: Region.t list} list ref = ref [] + fun doit (sel, mkExtra) = + let + val NameSpace.T {defUses, region, toSymbol, ...} = sel f + in + List.foreach + (Option.fold (defUses, [], ! o #1), + fn {class, def, uses, range, ...} => + List.push + (all, {class = class, + def = Symbol.layout (toSymbol def), + extra = mkExtra range, + isUsed = Uses.isUsed uses, + region = region def, + uses = List.fold (Uses.all uses, [], fn (u, ac) => + region u :: ac)})) + end + val _ = doit (#fcts, fn _ => []) + val _ = doit (#sigs, fn _ => []) + val _ = doit (#strs, fn _ => []) + val _ = doit (#types, fn _ => []) + local + fun mkExtraFromScheme so = + case so of + NONE => [] + | SOME (_, s) => [layoutPrettyScheme s] + in + val _ = doit (#vals, mkExtraFromScheme) + end + val a = Array.fromList (!all) + val _ = + QuickSort.sortArray (a, fn ({region = r, ...}, {region = r', ...}) => + Region.<= (r, r')) + val l = + Array.foldr + (a, [], fn (z as {class, def, extra, isUsed, region, uses}, ac) => + case ac of + [] => [z] + | {extra = e', isUsed = i', region = r', uses = u', ...} :: ac' => + if Region.equals (region, r') + then {class = class, + def = def, + extra = extra @ e', + isUsed = isUsed orelse i', + region = region, + uses = uses @ u'} :: ac' + else z :: ac) + val _ = + List.foreach + (l, fn {class, def, isUsed, region, ...} => + if isUsed orelse Option.isNone (Region.left region) + then () + else + Control.warning + (region, + seq [str (concat ["unused ", Class.toString class, ": "]), def], + Layout.empty)) + val _ = + case !Control.showDefUse of + NONE => () + | SOME f => + File.withOut + (f, fn out => + List.foreach + (l, fn {class, def, extra, region, uses, ...} => + case Region.left region of + NONE => () + | SOME p => + let + val uses = Array.fromList uses + val _ = QuickSort.sortArray (uses, Region.<=) + val uses = + Array.foldr + (uses, [], fn (r, ac) => + case ac of + [] => [r] + | r' :: _ => + if Region.equals (r, r') + then ac + else r :: ac) + open Layout + in + outputl + (align [seq [str (Class.toString class), + str " ", + def, + str " ", + str (SourcePos.toString p), + case extra of + [] => empty + | ss => let + val ts = + List.map (ss, + toString) + val uts = + List.map (List.equivalence + (ts, String.equals), + hd) + val sts = + List.insertionSort + (uts, + fn (l, r) => + size l < size r + orelse size l = size r + andalso l < r) + in + str (concat + (" \"" :: + List.separate + (sts, " andalso ") @ ["\""])) + end], + indent + (align + (List.map + (uses, fn r => + str (case Region.left r of + NONE => "NONE" + | SOME p => + SourcePos.toString p))), + 4)], + out) + end)) + val () = destroy () in () end -fun openBasis (E as T {currentScope, bass, fcts, fixs, sigs, strs, vals, types, ...}, - Basis.T {bass = bass', - fcts = fcts', - fixs = fixs', - sigs = sigs', - strs = strs', - vals = vals', - types = types', ...}): unit = - let - val scope = !currentScope - fun doit (ns, Info.T a) = - Array.foreach (a, fn {domain, range, time, uses} => - extend (E, ns, {domain = domain, - forceUsed = false, - range = range, - scope = scope, - time = time, - uses = ExtendUses.Old uses})) - val _ = doit (bass, bass') - val _ = doit (fcts, fcts') - val _ = doit (fixs, fixs') - val _ = doit (sigs, sigs') - val _ = doit (strs, strs') - val _ = doit (vals, vals') - val _ = doit (types, types') +val processDefUse = + Control.trace (Control.Detail, "processDefUse") processDefUse + +(* ------------------------------------------------- *) +(* newCons *) +(* ------------------------------------------------- *) + +fun newCons (T {vals, ...}, v) = + let + val forceUsed = 1 = Vector.length v in - () + (Cons.fromVector o Vector.map) + (v, fn {con, name, scheme} => + let + val uses = + NameSpace.newUses + (vals, + {def = Ast.Vid.fromCon name, + range = (Vid.Con con, scheme), + forceUsed = forceUsed}) + in + {con = con, + name = name, + scheme = scheme, + uses = uses} + end) end +(* ------------------------------------------------- *) +(* cut *) +(* ------------------------------------------------- *) + +local + fun makeOpaque (S: Structure.t, I: Interface.t, {prefix: string}) = let - fun fixCons (Cons.T cs, Cons.T cs') = - Cons.T - (Vector.map - (cs', fn {name, scheme, ...} => - let - val (con, uses) = - case Vector.peek (cs, fn {name = n, ...} => - Ast.Con.equals (n, name)) of - NONE => (Con.bogus, Uses.new ()) - | SOME {con, uses, ...} => (con, uses) - in - {con = con, name = name, scheme = scheme, uses = uses} - end)) - val (S', instantiate) = dummyStructure (I, {prefix = prefix}) + fun fixCons (cs, cs') = + Cons.map + (cs', fn {name, scheme, ...} => + let + val (con, uses) = + case Vector.peek (Cons.dest cs, fn {name = n, ...} => + Ast.Con.equals (n, name)) of + NONE => (Con.bogus, Uses.new ()) + | SOME {con, uses, ...} => (con, uses) + in + {con = con, scheme = scheme, uses = uses} + end) + val (S', instantiate) = Structure.dummy (I, {prefix = prefix}) val _ = instantiate (S, fn (c, s) => - TypeEnv.setOpaqueTyconExpansion + Tycon.setOpaqueExpansion (c, fn ts => TypeStr.apply (s, ts))) val {destroy, get : Structure.t -> {formal: Structure.t, new: Structure.t} list ref, @@ -2481,8 +3746,7 @@ (case TypeStr.node s of Datatype {cons = cs, ...} => TypeStr.data - (tycon, TypeStr.kind s', - fixCons (cs, cs')) + (tycon, fixCons (cs, cs')) | _ => s') | Scheme _ => s' | Tycon _ => s' @@ -2504,290 +3768,146 @@ S'' end -fun transparentCut (E: t, S: Structure.t, I: Interface.t, {isFunctor: bool}, +fun transparentCut (E: t, S: Structure.t, I: Interface.t, + {isFunctor: bool, prefix: string}, region: Region.t): Structure.t * Decs.t = let + val I = Interface.copy I + val flexTyconMap = Interface.flexibleTycons I + val () = + Structure.realize + (S, flexTyconMap, + fn (name, flex, typeStr, {nest = strids}) => + let + val {admitsEquality = a, hasCons, kind = k, ...} = + FlexibleTycon.dest flex + fun dummy () = + TypeStr.tycon + (FlexibleTycon.dummyTycon + (flex, name, strids, {prefix = prefix})) + val typeStr = + case typeStr of + NONE => dummy () + | SOME typeStr => + (* Only realize a plausible candidate for typeStr. *) + if Kind.equals (k, TypeStr.kind typeStr) + andalso AdmitsEquality.<= (a, TypeStr.admitsEquality typeStr) + andalso (not hasCons orelse Option.isSome (TypeStr.toTyconOpt typeStr)) + then typeStr + else dummy () + val () = FlexibleTycon.realize (flex, typeStr) + in + () + end) (* This tick is so that the type schemes for any values that need to be * instantiated and then re-generalized will be at a new time, so we can * check if something should not be generalized. *) - val () = - TypeEnv.tick {useBeforeDef = fn _ => - Error.bug "ElaborateEnv.transparentCut: cut tick"} + val () = TypeEnv.Time.tick {region = region} val sign = if isFunctor then "argument signature" else "signature" - val preError = - Promise.lazy + + val {destroy = destroyInterfaceSigid, + get = interfaceSigid: Interface.t -> (Sigid.t * Interface.t) option, + set = setInterfaceSigid, ...} = + Property.destGetSet (Interface.plist, Property.initConst NONE) + val {destroy = destroyLayoutPrettyTycon, + layoutPrettyTycon, setLayoutPrettyTycon, + loopStr, loopFlexTyconMap, ...} = + genLayoutPrettyTycon {prefixUnset = true} + val pre = + Promise.delay (fn () => - scope (E, fn () => - (openStructure (E, S) - ; setTyconNames E))) + let + val {sigs, strs, types, ...} = current (E, fn _ => true) + val _ = + Info.foreachByTime + (sigs (), fn (s, I) => + setInterfaceSigid (I, SOME (s, I))) + val _ = loopFlexTyconMap (flexTyconMap, 2, [Strid.uSig]) + val _ = loopStr (S, 1, [Strid.uStr]) + val _ = + loopStr (Structure.T {interface = NONE, + plist = PropertyList.new (), + strs = strs (), + types = types (), + vals = Info.T (Array.new0 ())}, + 0, []) + in + () + end) + val interfaceSigid = fn I => + (Promise.force pre; interfaceSigid I) + val layoutPrettyTycon = fn c => + (Promise.force pre; layoutPrettyTycon c) + val {destroy = destroyLayouts, + layoutPrettyType, layoutPrettyTyvar, + layoutStrSpec, layoutTypeSpec, layoutValSpec, + localInitLayoutPrettyTyvar, ...} = + Interface.layouts {interfaceSigid = interfaceSigid, + layoutPrettyTycon = layoutPrettyTycon, + setLayoutPrettyTycon = setLayoutPrettyTycon} + + datatype sort = datatype Interface.TypeStr.Sort.t + val sort = Interface.TypeStr.sort + val decs = ref [] - (* pre: arities are equal. *) - fun equalSchemes (structScheme: Scheme.t, - sigScheme: Scheme.t, - name: string, - thing: string, - lay: unit -> Layout.t, - r: Region.t): unit = - let - fun error (l1, l2) = - let - open Layout - in - Control.error - (r, - seq [str (concat [thing, " in structure disagrees with ", - sign])], - align [seq [str (concat [name, ": "]), lay ()], - seq [str "structure: ", l1], - seq [str "signature: ", l2]]) - end - val (tyvars', ty') = Scheme.dest sigScheme - val tyvars = - Vector.tabulate - (Vector.length tyvars', fn _ => - Type.var (Tyvar.newNoname {equality = false})) - in - Type.unify - (Scheme.apply (structScheme, tyvars), - Scheme.apply (Scheme.make {canGeneralize = true, - ty = ty', - tyvars = tyvars'}, - tyvars), - {error = error, - preError = preError}) - end - val equalSchemes = - Trace.trace - ("ElaborateEnv.transparentCut.equalSchemes", - fn (s, s', _, _, _, _) => Layout.tuple [Scheme.layout s, - Scheme.layout s'], - Unit.layout) - equalSchemes - fun layout (strids, x) = - layoutLong (List.fold (strids, [x], fn (s, ac) => Strid.layout s :: ac)) - fun checkCons (Cons.T v, Cons.T v', - strids: Strid.t list, - tycon: Ast.Tycon.t): unit = - let - fun lay (c: Ast.Con.t) = layout (strids, Ast.Con.layout c) - val extraStr = - Vector.keepAllMap - (v, fn {name = n, scheme = s, ...} => - case Vector.peek (v', fn {name = n', ...} => - Ast.Con.equals (n, n')) of - NONE => SOME n - | SOME {scheme = s', ...} => - let - val _ = - equalSchemes - (s, s', "constructor", "constructor type", - fn () => lay n, region) - in - NONE - end) - fun extras (v, name) = - if 0 = Vector.length v - then () - else - let - open Layout - in - Control.error - (region, - seq [str "type ", - layout (strids, Ast.Tycon.layout tycon), - str (concat [" has constructors in ", name, - " only: "]), - seq (List.separate (Vector.toListMap (v, lay), - str ", "))], - empty) - end - val _ = extras (extraStr, "structure") - val extraSig = - Vector.keepAllMap - (v', fn {name = n', ...} => - if Vector.exists (v, fn {name = n, ...} => - Ast.Con.equals (n, n')) - then NONE - else SOME n') - val _ = extras (extraSig, "signature") - in - () - end - (* isPlausible checks if a type structure in a structure can plausibly be - * substituted for a type structure in a signature having the specified - * equality, arity, and constructors. - *) - fun isPlausible (structStr: TypeStr.t, strids, name, - sigAdmits: AdmitsEquality.t, - sigKind: Kind.t, - consMismatch: bool): bool = - if not (AdmitsEquality.<= (sigAdmits, TypeStr.admitsEquality structStr)) - then - let - val () = preError () - open Layout - val () = - Control.error - (region, - seq [str "type ", layout (strids, Ast.Tycon.layout name), - str " admits equality in ", str sign, - str " but not in structure"], - seq [str "not equality: ", - TypeStr.explainDoesNotAdmitEquality structStr]) - in - false - end - else - let - val structKind = TypeStr.kind structStr - in - if not (Kind.equals (structKind, sigKind)) - then - let - open Layout - val () = - Control.error - (region, - seq [str "type ", - layout (strids, Ast.Tycon.layout name), - str " has arity ", Kind.layout structKind, - str " in structure but arity ", - Kind.layout sigKind, str " in ", str sign], - empty) - in - false - end - else - if consMismatch - then - let - open Layout - val () = - Control.error - (region, - seq [str "type ", - layout (strids, Ast.Tycon.layout name), - str " is a datatype in ", str sign, - str " but not in structure"], - Layout.empty) - in - false - end - else true - end - fun handleType (structStr: TypeStr.t, - sigStr: Interface.TypeStr.t, - strids: Strid.t list, - name: Ast.Tycon.t): TypeStr.t = - case Interface.TypeStr.toEnv sigStr of - NONE => structStr - | SOME sigStr => - let - fun tyconScheme (c: Tycon.t): Scheme.t = - let - val tyvars = - case TypeStr.kind structStr of - Kind.Arity n => - Vector.tabulate - (n, fn _ => - Tyvar.newNoname {equality = false}) - | _ => Error.bug "ElaborateEnv.transparentCut.handleType: Nary tycon" - in - Scheme.make - {canGeneralize = true, - ty = Type.con (c, Vector.map (tyvars, Type.var)), - tyvars = tyvars} - end - datatype z = datatype TypeStr.node - fun checkScheme (sigScheme: Scheme.t) = - let - val structScheme = - case TypeStr.node structStr of - Datatype {tycon = c, ...} => tyconScheme c - | Scheme s => s - | Tycon c => tyconScheme c - in - equalSchemes - (structScheme, sigScheme, - "type", "type definition", fn () => - layout (strids, Ast.Tycon.layout name), region) - end - val (return, consMismatch) = - case TypeStr.node sigStr of - Datatype {cons = sigCons, ...} => - (case TypeStr.node structStr of - Datatype {cons = structCons, ...} => - (fn () => - (checkCons (structCons, sigCons, strids, - name) - ; structStr), - false) - | _ => (fn () => sigStr, true)) - | Scheme s => - (fn () => (checkScheme s; sigStr), - false) - | Tycon c => - (fn () => (checkScheme (tyconScheme c); sigStr), - false) - in - if isPlausible (structStr, strids, name, - TypeStr.admitsEquality sigStr, - TypeStr.kind sigStr, - consMismatch) then - return () - else - sigStr - end - fun map (structInfo: ('a, 'b) Info.t, - sigArray: ('a * 'c) array, + fun map {strInfo: ('name, 'strRange) Info.t, + ifcArray: ('name * 'ifcRange) array, strids: Strid.t list, - nameSpace: string, - namesEqual: 'a * 'a -> bool, - layoutName: 'a -> Layout.t, - bogus: 'c -> 'd, - doit: 'a * 'b * 'c -> 'd): ('a, 'd) Info.t = + nameEquals: 'name * 'name -> bool, + nameLayout: 'name -> Layout.t, + specs: 'name * 'ifcRange -> Region.t list, + notFound: 'name * 'ifcRange -> {diag: {spec: Layout.t option, + thing: string} option, + range: 'range}, + doit: 'name * 'strRange * 'name * 'ifcRange -> 'range}: ('name, 'range) Info.t = let - val Info.T structArray = structInfo - val n = Array.length structArray + val Info.T strArray = strInfo + val n = Array.length strArray val r = ref 0 val array = Array.map - (sigArray, fn (name, c) => + (ifcArray, fn (ifcName, ifcRange) => let fun find i = if i = n then let - open Layout + val {diag, range} = notFound (ifcName, ifcRange) val _ = - Control.error - (region, - seq [str (concat [nameSpace, " "]), - layout (strids, layoutName name), - str (concat - [" in ", sign, - " but not in structure"])], - empty) + Option.app + (diag, fn {thing, spec} => + Control.error + (region, + seq [str thing, + str " in ", + str sign, + str " but not in structure: ", + layoutLongRev (strids, nameLayout ifcName)], + align ((case spec of + NONE => Layout.empty + | SOME spec => seq [str "signature: ", spec]):: + (List.map + (specs (ifcName, ifcRange), fn r => + seq [str "spec at: ", Region.layout r]))))) in - {domain = name, - range = bogus c, + {domain = ifcName, + range = range, time = Time.next (), uses = Uses.new ()} end else let - val {domain, range, time, uses} = - Array.sub (structArray, i) + val {domain = strName, range = strRange, time, uses} = + Array.sub (strArray, i) in - if namesEqual (domain, name) + if nameEquals (strName, ifcName) then (r := i + 1 - ; {domain = domain, - range = doit (name, range, c), + ; {domain = strName, + range = doit (strName, strRange, ifcName, ifcRange), time = time, uses = uses}) else find (i + 1) @@ -2798,44 +3918,6 @@ in Info.T array end - fun checkMatch (TyconMap.T {strs, types}, - Structure.T {strs = strsS, types = typesS, ...}, - I: Interface.t, - strids): unit = - let - val {strs = strsI, types = typesI, ...} = Interface.dest I - val _ = - foreach2Sorted - (strs, strsS, Strid.equals, - fn (strid, tm, opt) => - case opt of - NONE => Error.bug "ElaborateEnv.transparentCut.checkMatch: str" - | SOME (i, S) => - checkMatch (tm, S, #2 (Array.sub (strsI, i)), - strid :: strids)) - val _ = - foreach2Sorted - (types, typesS, Ast.Tycon.equals, - fn (name, _, opt) => - case opt of - NONE => Error.bug "ElaborateEnv.transparentCut.checkMatch: type" - | SOME (i, typeStr) => - ignore (handleType - (typeStr, #2 (Array.sub (typesI, i)), - strids, name))) - in - () - end - val checkMatch = - Trace.trace4 ("ElaborateEnv.transparentCut.checkMatch", - TyconMap.layout FlexibleTycon.layout, - Structure.layout, - Interface.layout, - List.layout Strid.layout, - Unit.layout) - checkMatch - (* quell unused warning *) - val _ = checkMatch val {destroy, get: Structure.t -> (Interface.t * Structure.t) list ref, ...} = Property.destGet (Structure.plist, Property.initFun (fn _ => ref [])) @@ -2843,14 +3925,14 @@ fun cut (S, I, strids): Structure.t = reallyCut (S, I, strids) *) - fun cut (S, I, strids): Structure.t = + fun cut (S, I, flexTyconMap, strids): Structure.t = let val seen = get S in case List.peek (!seen, fn (I', _) => Interface.equals (I, I')) of NONE => let - fun really () = reallyCut (S, I, strids) + fun really () = reallyCut (S, I, flexTyconMap, strids) val S = case Structure.interface S of NONE => really () @@ -2858,174 +3940,564 @@ if Interface.equals (I, I') then S else really () -(* - let - val origI = Interface.original I - val origI' = Interface.original I' - in - if Interface.equals (origI, origI') - then (checkMatch - (Interface.flexibleTycons origI, - S, I, strids) - ; S) - else really () - end -*) val _ = List.push (seen, (I, S)) in S end | SOME (_, S) => S end - and reallyCut (Structure.T {strs = structStrs, - types = structTypes, - vals = structVals, ...}, - I, strids) = + and reallyCut (S, I, flexTyconMap, strids) = let - val {strs = sigStrs, types = sigTypes, vals = sigVals} = - Interface.dest I - val strs = - map (structStrs, sigStrs, strids, - "structure", Strid.equals, Strid.layout, - fn I => #1 (dummyStructure (I, {prefix = ""})), - fn (name, S, I) => cut (S, I, name :: strids)) + val Structure.T {strs = strStrs, types = strTypes, vals = strVals, ...} = S + val {strs = sigStrs, types = sigTypes, vals = sigVals} = Interface.dest I val types = - map (structTypes, sigTypes, strids, - "type", Ast.Tycon.equals, Ast.Tycon.layout, - Interface.TypeStr.toEnvNoNone, - fn (name, s, s') => handleType (s, s', strids, name)) + map {strInfo = strTypes, + ifcArray = sigTypes, + strids = strids, + nameEquals = Ast.Tycon.equals, + nameLayout = Ast.Tycon.layout, + specs = fn (name, sigStr) => + Interface.TypeStr.specs (sigStr, Ast.Tycon.region name), + notFound = fn (name, sigStr) => + let + val spec = + layoutTypeSpec + (strids, name, sigStr, + {compact = false, + def = false, + flexTyconMap = flexTyconMap}) + val thing = "type" + + val rlzStr = Interface.TypeStr.toEnv sigStr + in + {diag = SOME {spec = SOME spec, + thing = thing}, + range = rlzStr} + end, + doit = fn (strName, strStr, sigName, sigStr) => + let + val rlzStr = Interface.TypeStr.toEnv sigStr + val error: (Layout.t list * Layout.t * Layout.t) option ref = ref NONE + fun reportError () = + case !error of + NONE => () + | SOME (msgs, strError, sigError) => + Control.error + (region, + seq [str "type in structure disagrees with signature (", + (seq o List.separate) (List.rev msgs, str ", "), + str "): ", + layoutLongRev (strids, Ast.Tycon.layout sigName)], + align ((seq [str "structure: ", strError]) :: + (seq [str "defn at: ", + Region.layout (Ast.Tycon.region strName)]) :: + (seq [str "signature: ", sigError]) :: + (List.map + (Interface.TypeStr.specs + (sigStr, Ast.Tycon.region sigName), + fn r => seq [str "spec at: ", Region.layout r])))) + val error = fn (msg, strError, sigError) => + let + val msgs = + case !error of + NONE => [str msg] + | SOME (msgs, _, _) => (str msg)::msgs + in + error := SOME (msgs, strError, sigError) + end + + val strKind = TypeStr.kind strStr + val strArity = + case strKind of + Kind.Arity strArity => strArity + | _ => Error.bug "ElaborateEnv.transparentCut.reallyCut.: strArity" + val sigKind = Interface.TypeStr.kind sigStr + val sigArity = + case sigKind of + Kind.Arity sigArity => sigArity + | _ => Error.bug "ElaborateEnv.transparentCut.reallyCut.: sigArity" + local + val tyvars = + Vector.tabulate + (Int.max (strArity, sigArity), fn _ => + Tyvar.makeNoname {equality = false}) + val () = localInitLayoutPrettyTyvar tyvars + in + val strTyvars = Vector.prefix (tyvars, strArity) + val strTyargs = Vector.map (strTyvars, Type.var) + val sigTyvars = Vector.prefix (tyvars, sigArity) + val sigTyargs = Vector.map (sigTyvars, Type.var) + end + fun layoutTyvars tyvars = + let + open Layout + val tyvars = + case Vector.length tyvars of + 0 => empty + | 1 => layoutPrettyTyvar (Vector.first tyvars) + | _ => tuple (Vector.toListMap (tyvars, layoutPrettyTyvar)) + val tyvars = + if strArity = sigArity + then tyvars + else bracket tyvars + in + if isEmpty tyvars + then str " " + else seq [str " ", tyvars, str " "] + end + + val sort = sort (sigName, sigStr, rlzStr, flexTyconMap) + + fun sigMsg (b, rest) = + let + val empty = Layout.empty + val indent = fn l => Layout.indent (l, 3) + val rest = + case rest of + NONE => SOME (str "...") + | SOME _ => rest + val (kw, rest) = + case sort of + Datatype _ => ("datatype", rest) + | Scheme _ => ("type", rest) + | Type {admitsEquality} => + (if admitsEquality then "eqtype" else "type", + NONE) + in + mayAlign [seq [if b then bracket (str kw) else str kw, + layoutTyvars sigTyvars, + layoutLongRev (strids, Ast.Tycon.layout sigName), + if Option.isSome rest then str " =" else empty], + indent (case rest of + NONE => empty + | SOME rest => rest)] + end + fun strMsg (b, rest) = + let + val empty = Layout.empty + val indent = fn l => Layout.indent (l, 3) + val rest = + case rest of + NONE => SOME (str "...") + | SOME _ => rest + val kw = + case TypeStr.node strStr of + TypeStr.Datatype _ => "datatype" + | TypeStr.Scheme _ => "type" + | TypeStr.Tycon _ => "type" + in + mayAlign [seq [if b then bracket (str kw) else str kw, + layoutTyvars strTyvars, + layoutLongRev (strids, Ast.Tycon.layout strName), + if Option.isSome rest then str " =" else empty], + indent (case rest of + NONE => empty + | SOME rest => rest)] + end + + val lay = #1 o layoutPrettyType + + fun unify (t, t', error) = + let + val error = fn (l, l', _) => + error (l, l') + in + Type.unify + (t, t', {error = error, + layoutPretty = layoutPrettyType, + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) + end + + val () = + if Kind.equals (strKind, sigKind) + then () + else error ("arity", + strMsg (false, NONE), + sigMsg (false, NONE)) + val resStr = + case sort of + Type _ => + let + val sigEq = Interface.TypeStr.admitsEquality sigStr + val strEq = TypeStr.admitsEquality strStr + val _ = + if AdmitsEquality.<= (sigEq, strEq) + then () + else error ("admits equality", + strMsg (false, SOME (TypeStr.explainDoesNotAdmitEquality + (strStr, + {layoutPrettyTycon = layoutPrettyTycon}))), + sigMsg (true, NONE)) + in + rlzStr + end + | Scheme sigScheme => + let + fun chkScheme strScheme = + unify + (Scheme.apply (strScheme, strTyargs), + Scheme.apply (sigScheme, sigTyargs), + fn (l, l') => error ("type definition", + strMsg (false, SOME l), + sigMsg (false, SOME l'))) + val _ = + case TypeStr.node strStr of + TypeStr.Datatype {tycon = strTycon, ...} => + let + val strScheme = Scheme.fromTycon strTycon + in + unify + (Scheme.apply (strScheme, strTyargs), + Scheme.apply (sigScheme, sigTyargs), + fn _ => + error ("type structure", + strMsg (true, NONE), + sigMsg (false, SOME (bracket (lay (Scheme.apply (sigScheme, sigTyargs))))))) + end + | TypeStr.Scheme s => + chkScheme s + | TypeStr.Tycon c => + chkScheme (Scheme.fromTycon c) + in + rlzStr + end + | Datatype {repl = true, tycon = sigTycon, ...} => + let + val sigScheme = Scheme.fromTycon sigTycon + fun nonDatatype strScheme = + (error ("type structure", + strMsg (false, SOME (bracket (lay (Scheme.apply (strScheme, strTyargs))))), + sigMsg (false, SOME (bracket (seq [str "datatype ", + lay (Scheme.apply (sigScheme, sigTyargs))])))) + ; rlzStr) + in + case TypeStr.node strStr of + TypeStr.Datatype {tycon = strTycon, ...} => + let + val strScheme = Scheme.fromTycon strTycon + in + Exn.withEscape + (fn escape => + (unify + (Scheme.apply (strScheme, strTyargs), + Scheme.apply (sigScheme, sigTyargs), + fn _ => + (error ("type structure", + strMsg (true, NONE), + sigMsg (false, SOME (bracket (seq [str "datatype ", + lay (Scheme.apply (sigScheme, sigTyargs))])))) + ; escape rlzStr)) + ; strStr)) + end + | TypeStr.Scheme strScheme => + nonDatatype strScheme + | TypeStr.Tycon strTycon => + nonDatatype (Scheme.fromTycon strTycon) + end + | Datatype {repl = false, cons = sigCons, ...} => + let + fun nonDatatype strScheme = + (error ("type structure", + strMsg (false, SOME (bracket (lay (Scheme.apply (strScheme, strTyargs))))), + sigMsg (true, NONE)) + ; rlzStr) + in + case TypeStr.node strStr of + TypeStr.Datatype {cons = strCons, ...} => + let + val extra: bool ref = ref false + fun conScheme (scheme, tyvars) = + case Type.deArrowOpt (Scheme.apply (scheme, tyvars)) of + NONE => NONE + | SOME (ty, _) => SOME ty + fun layCon (name, scheme, tyvars) = + (bracket o seq) + [Ast.Con.layout name, + case conScheme (scheme, tyvars) of + NONE => Layout.empty + | SOME _ => str " of _"] + fun loop (sigCons, strCons, sigConsAcc, strConsAcc) = + case (sigCons, strCons) of + ([], []) => (List.rev sigConsAcc, List.rev strConsAcc) + | ({name, scheme = sigScheme}::sigCons, []) => + loop (sigCons, + [], + (layCon (name, sigScheme, sigTyargs))::sigConsAcc, + strConsAcc) + | ([], {name, scheme = strScheme}::strCons) => + loop ([], + strCons, + sigConsAcc, + (layCon (name, strScheme, strTyargs))::strConsAcc) + | (sigCons as {name = sigName, scheme = sigScheme}::sigCons', + strCons as {name = strName, scheme = strScheme}::strCons') => + (case Ast.Con.compare (sigName, strName) of + LESS => + loop (sigCons', + strCons, + (layCon (sigName, sigScheme, sigTyargs))::sigConsAcc, + strConsAcc) + | EQUAL => + (case (conScheme (sigScheme, sigTyargs), conScheme (strScheme, strTyargs)) of + (NONE, NONE) => (extra := true + ; loop (sigCons', strCons', + sigConsAcc, strConsAcc)) + | (NONE, SOME _) => + loop (sigCons', strCons', + (Ast.Con.layout sigName)::sigConsAcc, + (seq [Ast.Con.layout strName, str " [of _]"])::strConsAcc) + | (SOME _, NONE) => + loop (sigCons', strCons', + (seq [Ast.Con.layout sigName, str " [of _]"])::sigConsAcc, + (Ast.Con.layout strName)::strConsAcc) + | (SOME sigTy, SOME strTy) => + Exn.withEscape + (fn escape => + (unify + (sigTy, strTy, + fn (sigLay, strLay) => + (escape o loop) + (sigCons', strCons', + (seq [Ast.Con.layout sigName, str " of ", sigLay])::sigConsAcc, + (seq [Ast.Con.layout strName, str " of ", strLay])::strConsAcc)) + ; extra := true + ; loop (sigCons', strCons', + sigConsAcc, strConsAcc)))) + | GREATER => + loop (sigCons, + strCons', + sigConsAcc, + (layCon (strName, strScheme, strTyargs))::strConsAcc)) + val (sigCons, strCons) = + loop (Vector.toListMap + (Cons.dest sigCons, fn {name, scheme, ...} => + {name = name, scheme = scheme}), + Vector.toListMap + (Cons.dest strCons, fn {name, scheme, ...} => + {name = name, scheme = scheme}), + [], + []) + val resStr = + if List.isEmpty sigCons + andalso List.isEmpty strCons + then strStr + else let + fun layCons cons = + let + val cons = + if !extra + then List.snoc (cons, str "...") + else cons + val cons = alignPrefix (cons, "| ") + in + SOME cons + end + in + error ("constructors", + strMsg (false, layCons strCons), + sigMsg (false, layCons sigCons)) + ; rlzStr + end + in + resStr + end + | TypeStr.Scheme strScheme => + nonDatatype strScheme + | TypeStr.Tycon strTycon => + nonDatatype (Scheme.fromTycon strTycon) + end + val () = reportError () + in + resStr + end} val vals = map - (structVals, sigVals, strids, - "variable", Ast.Vid.equals, Ast.Vid.layout, - fn (status, sigScheme) => + {strInfo = strVals, + ifcArray = sigVals, + strids = strids, + nameEquals = Ast.Vid.equals, + nameLayout = Ast.Vid.layout, + specs = fn (name, _) => [Ast.Vid.region name], + notFound = fn (name, (sigStatus, sigScheme)) => let - val vid = - case status of - Status.Con => Vid.Con (Con.newNoname ()) - | Status.Exn => Vid.Exn (Con.newNoname ()) - | Status.Var => Vid.Var (Var.newNoname ()) - in - (vid, Interface.Scheme.toEnv sigScheme) - end, - fn (name, (vid, strScheme), (status, sigScheme)) => - case (strScheme, Interface.Scheme.toEnv sigScheme) of - (SOME strScheme, SOME sigScheme) => - let - val (sigArgs, sigType) = Scheme.dest sigScheme - val generalize = TypeEnv.generalize sigArgs - val {args = strArgs, instance = strType} = - Scheme.instantiate strScheme - fun error rest = - let - open Layout - in - Control.error - (region, - seq [str "variable type in structure disagrees with ", - str sign], - align [seq [str "variable: ", - Longvid.layout - (Longvid.long (rev strids, name))], - rest]) - end - val _ = - Type.unify - (strType, sigType, - {error = (fn (l, l') => - let - open Layout - in - error (align - [seq [str "structure: ", l], - seq [str "signature: ", l']]) - end), - preError = preError}) - (* Now that we've unified, find any type variables that - * can't be generalized because they occur at an earlier - * point. - *) - val {unable} = generalize () - val () = - if 0 = Vector.length unable - then () - else - let - val () = preError () - open Layout - in - error - (align - [seq [str "unable to generalize: ", - seq (List.separate (Vector.toListMap - (unable, Tyvar.layout), - str ", "))], - seq [str "signature: ", - Scheme.layoutPretty sigScheme]]) - - end - val strArgs = strArgs () - fun addDec (name: string, n: Exp.node): Vid.t = - let - val x = Var.newString name - val e = Exp.make (n, strType) - val _ = - List.push - (decs, - Dec.Val {nonexhaustiveExnMatch = nonexhaustiveExnMatch (), - nonexhaustiveMatch = nonexhaustiveMatch (), - rvbs = Vector.new0 (), - tyvars = fn () => sigArgs, - vbs = (Vector.new1 - {exp = e, - lay = fn _ => Layout.empty, - nest = [], - pat = Pat.var (x, strType), - patRegion = region})}) - in - Vid.Var x - end - fun con (c: Con.t): Vid.t = - addDec (Con.originalName c, Exp.Con (c, strArgs)) - val vid = - case (vid, status) of - (Vid.Con c, Status.Var) => con c - | (Vid.Exn c, Status.Var) => con c - | (Vid.Var x, Status.Var) => - if 0 < Vector.length sigArgs - orelse 0 < Vector.length strArgs - then addDec (Var.originalName x, - Exp.Var (fn () => x, fn () => strArgs)) - else vid - | (Vid.Con _, Status.Con) => vid - | (Vid.Exn _, Status.Exn) => vid - | _ => - let - open Layout - val _ = - Control.error - (region, - seq [str (concat - [Vid.statusPretty vid, - " in structure but ", - Status.pretty status, " in ", - sign, ": "]), - layout (strids, Ast.Vid.layout name)], - Layout.empty) - in - vid - end + val spec = + layoutValSpec + (strids, name, (sigStatus, sigScheme), + {compact = false, con = false, def = false}) + val thing = Status.pretty sigStatus + + val con = Con.newString o Ast.Vid.toString + val var = Var.newString o Ast.Vid.toString + val vid = + case sigStatus of + Status.Con => Vid.Con (con name) + | Status.Exn => Vid.Exn (con name) + | Status.Var => Vid.Var (var name) + val rlzScheme = Interface.Scheme.toEnv sigScheme + in + {diag = Option.map (spec, fn spec => + {spec = SOME spec, + thing = thing}), + range = (vid, rlzScheme)} + end, + doit = fn (strName, (strVid, strScheme), sigName, (sigStatus, sigScheme)) => + let + val rlzScheme = Interface.Scheme.toEnv sigScheme + val unifyError = ref NONE + val statusError = ref false + val (rlzTyvars, rlzType) = Scheme.fresh rlzScheme + val () = localInitLayoutPrettyTyvar rlzTyvars + val {args = strTyargs, instance = strType} = + Scheme.instantiate strScheme + val _ = + Type.unify + (strType, rlzType, + {error = fn (l, l', {notes, ...}) => + unifyError := SOME (l, l', notes), + layoutPretty = layoutPrettyType, + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) + val strTyargs = strTyargs () + fun addDec (name: string, n: Exp.node): Vid.t = + let + val x = Var.newString name + val e = Exp.make (n, strType) + val _ = + List.push + (decs, + Dec.Val {matchDiags = {nonexhaustiveExn = Control.Elaborate.DiagDI.Default, + nonexhaustive = Control.Elaborate.DiagEIW.Ignore, + redundant = Control.Elaborate.DiagEIW.Ignore}, + rvbs = Vector.new0 (), + tyvars = fn () => rlzTyvars, + vbs = (Vector.new1 + {ctxt = fn _ => Layout.empty, + exp = e, + layPat = fn _ => Layout.empty, + nest = [], + pat = Pat.var (x, strType), + regionPat = Region.bogus})}) in - (vid, SOME sigScheme) + Vid.Var x end - | _ => - (* We don't want to cause spurious errors by guessing. - * Putting strScheme here would be - * wrong, because it isn't what the signature says -- - * it might expose stuff hidden by the signature. - *) - (vid, NONE)) - + fun con (c: Con.t): Vid.t = + addDec (Con.originalName c, Exp.Con (c, strTyargs)) + val strStatus = Status.fromVid strVid + val vid = + case (strVid, sigStatus) of + (Vid.Con c, Status.Var) => con c + | (Vid.Exn c, Status.Var) => con c + | (Vid.Var x, Status.Var) => + if 0 < Vector.length rlzTyvars + orelse 0 < Vector.length strTyargs + then addDec (Var.originalName x, + Exp.Var (fn () => x, fn () => strTyargs)) + else strVid + | (Vid.Con _, Status.Con) => strVid + | (Vid.Exn _, Status.Exn) => strVid + | _ => (statusError := true; strVid) + val () = + if Option.isNone (!unifyError) andalso not (!statusError) + then () + else let + val errors = [] + val errors = + if Option.isSome (!unifyError) + then str "type" :: errors + else errors + val errors = + if !statusError + then str "status" :: errors + else errors + val name = + layoutLongRev (strids, Ast.Vid.layout sigName) + val (strTy, sigTy, notes) = + case !unifyError of + NONE => + let + val lay = #1 (layoutPrettyType rlzType) + in + (lay, lay, Layout.empty) + end + | SOME (strLay, sigLay, notes) => + (strLay, sigLay, notes ()) + fun doit (space, status, ty, kind, vid) = + let + val indent = fn l => Layout.indent (l, 3) + val kw = str (Status.kw status) + val kw = + if !statusError then bracket kw else kw + in + align [seq [str space, str ": ", + mayAlign + [seq [kw, str " ", + name, + str (if Ast.Vid.isSymbolic sigName + then " :" + else ":")], + indent ty]], + seq [str kind, str " at: ", + Region.layout (Ast.Vid.region vid)]] + end + in + Control.error + (region, + seq [if !statusError + then str "value identifier" + else str (Vid.statusPretty strVid), + str " in structure disagrees with ", + str sign, + str " (", + (seq o List.separate) + (errors, str ", "), + str "): ", + name], + align [doit ("structure", strStatus, strTy, + "defn", strName), + doit ("signature", sigStatus, sigTy, + "spec", sigName), + notes]) + end + in + (vid, rlzScheme) + end} + val strs = + map {strInfo = strStrs, + ifcArray = sigStrs, + strids = strids, + nameEquals = Strid.equals, + nameLayout = Strid.layout, + specs = fn (name, _) => [Strid.region name], + notFound = fn (name, I) => + let + val spec = + layoutStrSpec + (strids, name, I, + {compact = false, + def = false, + elide = {strs = SOME (2, 0), + types = NONE, + vals = SOME (3, 2)}, + flexTyconMap = flexTyconMap}) + val thing = "structure" + + val (S, _) = Structure.dummy (I, {prefix = ""}) + in + {diag = SOME {spec = SOME spec, + thing = thing}, + range = S} + end, + doit = fn (_, S, name, I) => + let + val flexTyconMap = + Option.fold + (TyconMap.peekStrid (flexTyconMap, name), + TyconMap.empty (), + fn (flexTyconMap, _) => flexTyconMap) + in + cut (S, I, flexTyconMap, name :: strids) + end} in Structure.T {interface = SOME I, plist = PropertyList.new (), @@ -3033,48 +4505,25 @@ types = types, vals = vals} end - val I = Interface.copy I - val () = - Structure.realize - (S, Interface.flexibleTycons I, - fn (name, flex, typeStr, {nest}) => - let - val {admitsEquality = a, hasCons, kind = k, ...} = - FlexibleTycon.dest flex - val typeStr = - case typeStr of - NONE => NONE - | SOME typeStr => - (* Makes sure we only realize a plausible candidate for - * typeStr. - *) - if isPlausible - (typeStr, nest, name, a, k, - hasCons - andalso Option.isNone (TypeStr.toTyconOpt typeStr)) - then SOME typeStr - else NONE - val () = FlexibleTycon.realize (flex, typeStr) - in - () - end) - val S = cut (S, I, []) + val S = cut (S, I, flexTyconMap, []) val () = destroy () + val () = destroyLayouts () + val () = destroyLayoutPrettyTycon () + val () = destroyInterfaceSigid () in (S, Decs.fromList (!decs)) end +in + (* section 5.3, 5.5, 5.6 and rules 52, 53 *) fun cut (E: t, S: Structure.t, I: Interface.t, {isFunctor: bool, opaque: bool, prefix: string}, region) : Structure.t * Decs.t = let - val (S, decs) = transparentCut (E, S, I, {isFunctor = isFunctor}, region) - (* Avoid doing the opaque match if numErrors > 0 because it can lead - * to internal errors that might be confusing to the user. - *) - val S = - if opaque andalso 0 = !Control.numErrors + val (S, decs) = transparentCut (E, S, I, {isFunctor = isFunctor, prefix = prefix}, region) + val S = + if opaque then makeOpaque (S, I, {prefix = prefix}) else S in @@ -3084,423 +4533,190 @@ val cut = Trace.trace ("ElaborateEnv.cut", fn (_, S, I, _, _) => - Layout.tuple [Structure.layoutPretty S, Interface.layout I], - Structure.layoutPretty o #1) + Layout.tuple [Structure.layout S, + Interface.layout I], + Structure.layout o #1) cut +end + (* ------------------------------------------------- *) (* functorClosure *) (* ------------------------------------------------- *) -fun snapshot (E as T {currentScope, bass, fcts, fixs, sigs, strs, types, vals, ...}) - : (unit -> 'a) -> 'a = - let - val add: (Scope.t -> unit) list ref = ref [] - (* Push onto add everything currently in scope. *) - fun doit (NameSpace.T {current, ...}) (v as Values.T vs) = - case ! vs of - [] => () - | {domain, range, uses, ...} :: _ => - List.push - (add, fn s0 => - (List.push (vs, {domain = domain, - range = range, - scope = s0, - time = Time.next (), - uses = uses}) - ; List.push (current, v))) - val _ = - foreachTopLevelSymbol (E, {bass = doit bass, - fcts = doit fcts, - fixs = doit fixs, - sigs = doit sigs, - strs = doit strs, - types = doit types, - vals = doit vals}) - in - fn th => - let - val s0 = Scope.new {isTop = false} - val restore: (unit -> unit) list ref = ref [] - fun doit (NameSpace.T {current, ...}) = - let - val current0 = !current - val _ = current := [] - in - List.push (restore, fn () => - (List.foreach (!current, fn v => ignore (Values.pop v)) - ; current := current0)) - end - val _ = (doit bass; doit fcts; doit fixs; doit sigs - ; doit strs; doit types; doit vals) - val _ = List.foreach (!add, fn f => f s0) - (* Clear out any symbols that weren't available in the old scope. *) - fun doit (Values.T vs) = - let - val cur = !vs - in - case cur of - [] => () - | {scope, ...} :: _ => - if Scope.equals (s0, scope) - then () - else (vs := [] - ; List.push (restore, fn () => vs := cur)) - end - val _ = - (* Can't use foreachToplevelSymbol here, because a constructor C may - * have been defined in a local scope but may not have been defined - * at the snapshot point. This will make the identifier C, which - * originally would have elaborated as a variable instead elaborate - * as a constructor. - *) - foreachDefinedSymbol (E, {bass = doit, - fcts = doit, - fixs = doit, - sigs = doit, - strs = doit, - types = doit, - vals = doit}) - val s1 = !currentScope - val _ = currentScope := s0 - val res = th () - val _ = currentScope := s1 - val _ = List.foreach (!restore, fn f => f ()) - in - res - end - end - fun functorClosure (E: t, - arg: Strid.t, - nest: string list, - prefix: string, - argInt: Interface.t, + name: Fctid.t, + argInterface: Interface.t, makeBody: Structure.t * string list -> Decs.t * Structure.t option) = let - (* Keep track of the first tycon currently at the front of allTycons. - * Once we are done elaborating the body, we can remove all the dummy - * tycons created while elaborating the body by removing everything from - * allTycons up to firstTycon. - *) - val firstTycon = - case !allTycons of - [] => Error.bug "ElaborateEnv.functorClosure: firstTycons" - | c :: _ => c + val argId = Strid.uArg (Fctid.toString name) + val resId = Strid.uRes (Fctid.toString name) + val _ = insideFunctor := true (* Need to tick here so that any tycons created in the dummy structure * for the functor formal have a new time, and will therefore report an * error if they occur before the functor declaration. *) - val _ = - TypeEnv.tick {useBeforeDef = fn _ => - Error.bug "ElaborateEnv.functorClosure: tick"} - val (formal, instantiate) = dummyStructure (argInt, {prefix = prefix}) - val _ = insideFunctor := true + val _ = TypeEnv.Time.tick {region = Fctid.region name} + val (formal, instantiate) = + Structure.dummy (argInterface, {prefix = Strid.toString argId ^ "."}) (* Keep track of all tycons created during the instantiation of the * functor. These will later become the generative tycons that will need * to be recreated for each functor application. - * This has two beneficial effects. - * 1. It keeps allTycons smaller. - * 2. It keeps the names of these tycons from being set by setTyconNames, - * which they always would be because they are now out of scope. *) - val _ = newTycons := [] - val (_, result) = makeBody (formal, nest) - val _ = Option.app (result, Structure.forceUsed) - val generative = !newTycons - val _ = allTycons := let - fun loop cs = - case cs of - [] => Error.bug "ElaborateEnv.functorClosure: missing firstTycon" - | c :: cs' => - if Tycon.equals (c, firstTycon) then - cs - else - loop cs' - in - loop (!allTycons) - end - val _ = newTycons := [] + val (resultStructure, generativeTycons) = + Tycon.scopeNew + (fn () => + let + val nest = [Strid.toString resId] + val (_, resultStructure) = makeBody (formal, nest) + val _ = Option.app (resultStructure, Structure.forceUsed) + in + resultStructure + end) val _ = insideFunctor := false val restore = - if !Control.elaborateOnly - then fn f => f () - else let - val withSaved = Control.Elaborate.snapshot () - val snapshot = snapshot E - in - fn f => snapshot (fn () => withSaved f) - end - fun apply (actual, nest) = - if not (!insideFunctor) andalso not (!Control.elaborateOnly) - then restore (fn () => makeBody (actual, nest)) - else - let - val _ = Structure.forceUsed actual - val {destroy = destroy1, - get = tyconTypeStr: Tycon.t -> TypeStr.t option, - set = setTyconTypeStr, ...} = - Property.destGetSet (Tycon.plist, Property.initConst NONE) - (* Match the actual against the formal, to set the tycons. - * Then duplicate the result, replacing tycons. Want to generate - * new tycons just like the functor body did. - *) - val _ = - instantiate (actual, fn (c, s) => setTyconTypeStr (c, SOME s)) - val _ = - List.foreach - (generative, fn (c, k, r) => - setTyconTypeStr - (c, SOME (TypeStr.tycon - (newTycon (Tycon.originalName c, k, - ! (TypeEnv.tyconAdmitsEquality c), - r), - k)))) - fun replaceType (t: Type.t): Type.t = - let - fun con (c, ts) = - case tyconTypeStr c of - NONE => Type.con (c, ts) - | SOME s => TypeStr.apply (s, ts) - in - Type.hom (t, {con = con, - expandOpaque = false, - record = Type.record, - replaceSynonyms = false, - var = Type.var}) - end - fun replaceScheme (s: Scheme.t): Scheme.t = - let - val (tyvars, ty) = Scheme.dest s - in - Scheme.make {canGeneralize = true, - ty = replaceType ty, - tyvars = tyvars} - end - fun replaceCons (Cons.T v): Cons.t = - Cons.T - (Vector.map - (v, fn {con, name, scheme, uses} => - {con = con, - name = name, - scheme = replaceScheme scheme, - uses = uses})) - fun replaceTypeStr (s: TypeStr.t): TypeStr.t = - let - val k = TypeStr.kind s - datatype z = datatype TypeStr.node - in - case TypeStr.node s of - Datatype {cons, tycon} => - let - val tycon = - case tyconTypeStr tycon of - NONE => tycon - | SOME s => - (case TypeStr.node s of - Datatype {tycon, ...} => tycon - | Scheme _ => - Error.bug "ElaborateEnv.functorClosure.apply: bad datatype" - | Tycon c => c) - in - TypeStr.data (tycon, k, replaceCons cons) - end - | Scheme s => TypeStr.def (replaceScheme s, k) - | Tycon c => - (case tyconTypeStr c of - NONE => s - | SOME s' => s') - end - val {destroy = destroy2, - get = replacement: Structure.t -> Structure.t, ...} = - Property.destGet - (Structure.plist, - Property.initRec - (fn (Structure.T {interface, strs, types, vals, ... }, - replacement) => - Structure.T - {interface = interface, - plist = PropertyList.new (), - strs = Info.map (strs, replacement), - types = Info.map (types, replaceTypeStr), - vals = Info.map (vals, fn (v, s) => - (v, Option.map (s, replaceScheme)))})) - val result = Option.map (result, replacement) - val _ = destroy1 () - val _ = destroy2 () - in - (Decs.empty, result) - end - in - FunctorClosure.T {apply = apply, - arg = arg, - argInt = argInt, - formal = formal, - result = result} - end - -structure Env = - struct - val lookupLongtycon = lookupLongtycon - end - -structure InterfaceEnv = - struct - local - open Interface - in - structure Scheme = Scheme - structure Status = Status - structure TypeStr = TypeStr - end - - val allowDuplicates = ref false - - type t = t - - fun extend (T {currentScope, interface, ...}, - domain, range, kind: string, ns, region): unit = let - val scope = !currentScope - val NameSpace.T {current, lookup, toSymbol, ...} = ns interface - fun value () = {domain = domain, - range = range, - scope = scope, - time = Time.next (), - uses = Uses.new ()} - val values as Values.T r = lookup domain - fun new () = (List.push (current, values) - ; List.push (r, value ())) + val withSaved = Control.Elaborate.snapshot () + val snapshot = snapshot E in - case !r of - [] => new () - | {scope = scope', ...} :: l => - if Scope.equals (scope, scope') - then if !allowDuplicates - then r := value () :: l - else - Control.error - (region, - Layout.str - (concat ["duplicate ", - kind, - " specification: ", - Symbol.toString (toSymbol domain)]), - Layout.empty) - else new () + fn f => snapshot (fn () => withSaved f) end - - fun extendStrid (E, s, I, r) = extend (E, s, I, "structure", #strs, r) - - fun extendTycon (E, c, s, r) = extend (E, c, s, "type", #types, r) - - fun extendVid (E, v, st, s, r) = extend (E, v, (st, s), "value", #vals, r) - - val lookupSigid = lookupSigid - - local - fun make sel (T {interface, ...}, a) = - NameSpace.peek (sel interface, a, {markUse = fn _ => true}) - in - val peekStrid = make #strs - val peekTycon = make #types - end - - fun lookupLongstrid (E: t, s: Longstrid.t): Interface.t option = + fun summary actual = let - fun error l = - (unbound (Longstrid.region s, "structure", l) - ; NONE) - val (strids, strid) = Longstrid.split s - in - case strids of - [] => - (case peekStrid (E, strid) of - NONE => error (Strid.layout strid) - | SOME I => SOME I) - | s :: ss => - case peekStrid (E, s) of - NONE => error (Strid.layout s) - | SOME I => + val _ = Structure.forceUsed actual + val {destroy = destroy1, + get = tyconTypeStr: Tycon.t -> TypeStr.t option, + set = setTyconTypeStr, ...} = + Property.destGetSet (Tycon.plist, Property.initConst NONE) + (* Match the actual against the formal, to set the tycons. + * Then duplicate the result, replacing tycons. Want to generate + * new tycons just like the functor body did. + *) + val _ = + instantiate (actual, fn (c, s) => setTyconTypeStr (c, SOME s)) + val _ = + List.foreach + (generativeTycons, fn c => + setTyconTypeStr + (c, SOME (TypeStr.tycon (Tycon.makeLike c)))) + fun replaceType (t: Type.t): Type.t = + let + fun con (c, ts) = + case tyconTypeStr c of + NONE => Type.con (c, ts) + | SOME s => TypeStr.apply (s, ts) + in + Type.hom (t, {con = con, + expandOpaque = false, + record = Type.record, + replaceSynonyms = false, + var = Type.var}) + end + fun replaceScheme (s: Scheme.t): Scheme.t = + let + val (tyvars, ty) = Scheme.dest s + in + Scheme.make {canGeneralize = true, + ty = replaceType ty, + tyvars = tyvars} + end + fun replaceCons cons: Cons.t = + Cons.map + (cons, fn {con, scheme, uses, ...} => + {con = con, + scheme = replaceScheme scheme, + uses = uses}) + fun replaceTypeStr (s: TypeStr.t): TypeStr.t = + let + datatype z = datatype TypeStr.node + in + case TypeStr.node s of + Datatype {cons, tycon} => let - datatype z = datatype Interface.peekResult + val tycon = + case tyconTypeStr tycon of + NONE => tycon + | SOME s => + (case TypeStr.toTyconOpt s of + NONE => Error.bug "ElaborateEnv.functorClosure.apply: bad datatype" + | SOME c => c) in - case Interface.peekStrids (I, ss @ [strid]) of - Found I => SOME I - | UndefinedStructure ss => - error (layoutStrids (s :: ss)) + TypeStr.data (tycon, replaceCons cons) end - end - - fun lookupLongtycon (E: t, long: Longtycon.t): TypeStr.t option = - let - fun doit () = - Option.map (Env.lookupLongtycon (E, long), TypeStr.fromEnv) - val (strids, c) = Longtycon.split long - in - case strids of - [] => - (case peekTycon (E, c) of - NONE => doit () - | SOME s => SOME s) - | s :: ss => - case peekStrid (E, s) of - NONE => doit () - | SOME I => - Interface.lookupLongtycon - (I, Longtycon.long (ss, c), Longtycon.region long, - {prefix = [s]}) - end - - fun makeInterface (T {currentScope, interface = {strs, types, vals}, ...}, - {isTop}, make) = - let - val s = NameSpace.collect strs - val t = NameSpace.collect types - val v = NameSpace.collect vals - val s0 = !currentScope - val _ = currentScope := Scope.new {isTop = false} - val res = make () - val Info.T s = s () - val s = Array.map (s, fn {domain, range, ...} => (domain, range)) - val Info.T t = t () - val t = Array.map (t, fn {domain, range, ...} => (domain, range)) - val Info.T v = v () - val v = Array.map (v, fn {domain, range = (status, scheme), ...} => - (domain, (status, scheme))) - val I = Interface.new {isClosed = isTop, - strs = s, types = t, vals = v} - val _ = currentScope := s0 - in - (I, res) - end - - fun openInterface (E, I, r: Region.t) = - let - val {strs, vals, types} = Interface.dest I - val _ = Array.foreach (strs, fn (s, I) => extendStrid (E, s, I, r)) - val _ = Array.foreach (types, fn (c, s) => extendTycon (E, c, s, r)) - val _ = Array.foreach (vals, fn (x, (s, sc)) => - extendVid (E, x, s, sc, r)) + | Scheme s => TypeStr.def (replaceScheme s) + | Tycon c => (case tyconTypeStr c of + NONE => s + | SOME s => s) + end + val {destroy = destroy2, + get = replaceInterface: Interface.t -> Interface.t, ...} = + Property.destGet + (Interface.plist, + Property.initRec + (fn (I, replaceInterface) => + let + val {strs, types, vals} = Interface.dest I + val replaceIScheme = + Interface.Scheme.fromEnv + o replaceScheme + o Interface.Scheme.toEnv + val replaceITypeStr = + Interface.TypeStr.fromEnv + o replaceTypeStr + o Interface.TypeStr.toEnv + in + Interface.new + {isClosed = true, + original = SOME (Interface.original I), + strs = Array.map (strs, fn (strid, I) => + (strid, replaceInterface I)), + types = Array.map (types, fn (tycon, s) => + (tycon, replaceITypeStr s)), + vals = Array.map (vals, fn (vid, (status, scheme)) => + (vid, (status, replaceIScheme scheme)))} + end)) + val {destroy = destroy3, + get = replaceStructure: Structure.t -> Structure.t, ...} = + Property.destGet + (Structure.plist, + Property.initRec + (fn (Structure.T {interface, strs, types, vals, ... }, + replaceStructure) => + Structure.T + {interface = Option.map (interface, replaceInterface), + plist = PropertyList.new (), + strs = Info.map (strs, replaceStructure), + types = Info.map (types, replaceTypeStr), + vals = Info.map (vals, fn (status, s) => + (status, replaceScheme s))})) + val resultStructure = Option.map (resultStructure, replaceStructure) + val _ = destroy1 () + val _ = destroy2 () + val _ = destroy3 () in - () + resultStructure end - - val extendStrid = fn (E, s, I) => extendStrid (E, s, I, Strid.region s) - - val extendTycon = fn (E, c, s) => extendTycon (E, c, s, Ast.Tycon.region c) - - val extendVid = - fn (E, v, st, s) => extendVid (E, v, st, s, Ast.Vid.region v) - - fun extendCon (E, c, s) = - extendVid (E, Ast.Vid.fromCon c, Status.Con, s) - - fun extendExn (E, c, s) = - extendVid (E, Ast.Vid.fromCon c, Status.Exn, s) -end - -val makeInterfaceEnv = fn E => E + val summary = + Trace.trace + ("ElaborateEnv.functorClosure.summary", + fn actual => + Layout.record [("argInterface", Interface.layout argInterface), + ("formal", Structure.layout formal), + ("resultStructure", Option.layout Structure.layout resultStructure), + ("actual", Structure.layout actual)], + Option.layout Structure.layout) + summary + fun apply (actual, nest) = + if not (!insideFunctor) + andalso !Control.numErrors = 0 + then restore (fn () => makeBody (actual, nest)) + else (Decs.empty, summary actual) + in + FunctorClosure.T {apply = apply, + argInterface = argInterface, + resultStructure = resultStructure, + summary = summary} + end end diff -Nru mlton-20130715/mlton/elaborate/elaborate-env.sig mlton-20210117+dfsg/mlton/elaborate/elaborate-env.sig --- mlton-20130715/mlton/elaborate/elaborate-env.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-env.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -13,7 +14,6 @@ structure TypeEnv: TYPE_ENV sharing Ast.Record = CoreML.Record sharing Ast.SortedRecord = CoreML.SortedRecord - sharing Ast.Tyvar = CoreML.Tyvar sharing CoreML.Atoms = TypeEnv.Atoms sharing CoreML.Type = TypeEnv.Type end @@ -22,14 +22,25 @@ sig include ELABORATE_ENV_STRUCTS - structure AdmitsEquality: ADMITS_EQUALITY - sharing AdmitsEquality = TypeEnv.Tycon.AdmitsEquality - structure Decs: DECS sharing CoreML = Decs.CoreML + structure Tyvar: TYVAR + sharing Tyvar = TypeEnv.Tyvar + structure TyvarEnv: + sig + val lookupTyvar: Ast.Tyvar.t -> Tyvar.t option + val scope: Ast.Tyvar.t vector * (Tyvar.t vector -> 'a) -> 'a + val makeLayoutPretty: unit -> {destroy: unit -> unit, layoutPretty: Tyvar.t -> Layout.t} + end + + structure AdmitsEquality: ADMITS_EQUALITY + sharing AdmitsEquality = TypeEnv.Tycon.AdmitsEquality + structure Kind: TYCON_KIND + sharing Kind = TypeEnv.Tycon.Kind structure Tycon: TYCON sharing Tycon = TypeEnv.Tycon + structure Type: sig type t @@ -40,6 +51,7 @@ type t end sharing Scheme = TypeEnv.Scheme + (* The value of a vid. This is used to distinguish between vids whose * status cannot be determined at parse time. *) @@ -48,11 +60,12 @@ datatype t = Con of CoreML.Con.t | Exn of CoreML.Con.t - | Overload of Ast.Priority.t * (CoreML.Var.t * Scheme.t option) vector + | Overload of Ast.Priority.t * (CoreML.Var.t * Scheme.t) vector | Var of CoreML.Var.t val layout: t -> Layout.t end + structure TypeStr: sig structure Cons: @@ -61,11 +74,6 @@ val layout: t -> Layout.t end - structure Kind: TYCON_KIND - structure Tycon: - sig - type t - end type t @@ -78,19 +86,23 @@ val abs: t -> t val admitsEquality: t -> AdmitsEquality.t val apply: t * Type.t vector -> Type.t - val data: Tycon.t * Kind.t * Cons.t -> t - val def: Scheme.t * Kind.t -> t + val data: Tycon.t * Cons.t -> t + val def: Scheme.t -> t val kind: t -> Kind.t val layout: t -> Layout.t val node: t -> node val toTyconOpt: t -> Tycon.t option (* NONE on Scheme *) - val tycon: Tycon.t * Kind.t -> t + val tycon: Tycon.t -> t end - sharing TypeStr.Kind = Tycon.Kind - sharing TypeStr.Tycon = CoreML.Tycon + structure Interface: INTERFACE sharing Interface.Ast = Ast + sharing Interface.AdmitsEquality = AdmitsEquality + sharing Interface.Kind = Kind + sharing Interface.EnvTycon = Tycon sharing Interface.EnvTypeStr = TypeStr + sharing Interface.Tyvar = Tyvar + structure Structure: sig type t @@ -110,8 +122,13 @@ -> Decs.t * Structure.t option) val argInterface: t -> Interface.t end + structure InterfaceEnv: sig + structure FlexibleTycon: + sig + type t + end structure Scheme: sig type t @@ -127,19 +144,19 @@ type t - val allowDuplicates: bool ref val extendCon: t * Ast.Con.t * Scheme.t -> unit val extendExn: t * Ast.Con.t * Scheme.t -> unit val extendStrid: t * Ast.Strid.t * Interface.t -> unit val extendTycon: t * Ast.Tycon.t * TypeStr.t -> unit val extendVid: t * Ast.Vid.t * Status.t * Scheme.t -> unit - val lookupLongstrid: t * Ast.Longstrid.t -> Interface.t option val lookupLongtycon: t * Ast.Longtycon.t -> TypeStr.t option val lookupSigid: t * Ast.Sigid.t -> Interface.t option val makeInterface: t * {isTop: bool} * (unit -> 'a) -> Interface.t * 'a val openInterface: t * Interface.t * Region.t -> unit + val rebindTycon: t * Ast.Tycon.t * TypeStr.t -> unit end + sharing Interface.FlexibleTycon = InterfaceEnv.FlexibleTycon sharing Interface.Scheme = InterfaceEnv.Scheme sharing Interface.Status = InterfaceEnv.Status sharing Interface.TypeStr = InterfaceEnv.TypeStr @@ -162,7 +179,7 @@ -> Structure.t * Decs.t val empty: unit -> t val extendBasid: t * Ast.Basid.t * Basis.t -> unit - val extendExn: t * Ast.Con.t * CoreML.Con.t * Scheme.t option -> unit + val extendExn: t * Ast.Con.t * CoreML.Con.t * Scheme.t -> unit val extendFctid: t * Ast.Fctid.t * FunctorClosure.t -> unit val extendFix: t * Ast.Vid.t * Ast.Fixity.t -> unit val extendSigid: t * Ast.Sigid.t * Interface.t -> unit @@ -172,46 +189,54 @@ val extendVar: t * Ast.Var.t * CoreML.Var.t * Scheme.t * {isRebind: bool} -> unit val extendOverload: - t * Ast.Priority.t * Ast.Var.t * (CoreML.Var.t * Scheme.t option) vector + t * Ast.Priority.t * Ast.Var.t * (CoreML.Var.t * Scheme.t) vector * Scheme.t -> unit val forceUsed: t -> unit val forceUsedLocal: t * (unit -> 'a) -> 'a val functorClosure: - t * Ast.Strid.t * string list * string * Interface.t + t * Ast.Fctid.t * Interface.t * (Structure.t * string list -> Decs.t * Structure.t option) -> FunctorClosure.t - val layout: t -> Layout.t - val layoutCurrentScope: t -> Layout.t - val layoutUsed: t -> Layout.t val localAll: t * (unit -> 'a) * ('a -> 'b) -> 'b val localCore: t * (unit -> 'a) * ('a -> 'b) -> 'b val localModule: t * (unit -> 'a) * ('a -> 'b) -> 'b val lookupBasid: t * Ast.Basid.t -> Basis.t option val lookupFctid: t * Ast.Fctid.t -> FunctorClosure.t option - val lookupLongcon: t * Ast.Longcon.t -> CoreML.Con.t * Scheme.t option + val lookupLongcon: t * Ast.Longcon.t -> (CoreML.Con.t * Scheme.t) option + val lookupLongexn: t * Ast.Longcon.t -> (CoreML.Con.t * Scheme.t) option val lookupLongstrid: t * Ast.Longstrid.t -> Structure.t option val lookupLongtycon: t * Ast.Longtycon.t -> TypeStr.t option - val lookupLongvar: t * Ast.Longvar.t -> CoreML.Var.t * Scheme.t option - val lookupLongvid: t * Ast.Longvid.t -> Vid.t * Scheme.t option + val lookupLongvar: t * Ast.Longvar.t -> (CoreML.Var.t * Scheme.t) option + val lookupLongvid: t * Ast.Longvid.t -> (Vid.t * Scheme.t) option val lookupSigid: t * Ast.Sigid.t -> Interface.t option val lookupStrid: t * Ast.Strid.t -> Structure.t option val makeBasis: t * (unit -> 'a) -> 'a * Basis.t val makeInterfaceEnv: t -> InterfaceEnv.t + val makeLayoutPrettyTycon: + t * {prefixUnset: bool} + -> {destroy: unit -> unit, + layoutPrettyTycon: Tycon.t -> Layout.t, + setLayoutPrettyTycon: Tycon.t * Layout.t -> unit, + loopStr: Structure.t * int * Ast.Strid.t list -> unit} + val makeLayoutPrettyTyconAndFlexTycon: + t * InterfaceEnv.t * Interface.t option * {prefixUnset: bool} + -> {destroy: unit -> unit, + layoutPrettyTycon: Tycon.t -> Layout.t, + layoutPrettyFlexTycon: Interface.FlexibleTycon.t -> Layout.t, + setLayoutPrettyTycon: Tycon.t * Layout.t -> unit} val makeStructure: t * (unit -> 'a) -> 'a * Structure.t - val newCons: ((t * {con: CoreML.Con.t, - name: Ast.Con.t} vector) - -> Scheme.t vector - -> TypeStr.Cons.t) - val newTycon: - string * Tycon.Kind.t * AdmitsEquality.t * Region.t -> Tycon.t + val newCons: + t * {con: CoreML.Con.t, + name: Ast.Con.t, + scheme: Scheme.t} vector + -> TypeStr.Cons.t (* openStructure (E, S) opens S in the environment E. *) val openStructure: t * Structure.t -> unit (* openBasis (E, B) opens B in the environment E. *) val openBasis: t * Basis.t -> unit val peekFix: t * Ast.Vid.t -> Ast.Fixity.t option - val peekLongcon: - t * Ast.Longcon.t -> (CoreML.Con.t * Scheme.t option) option + val peekLongcon: t * Ast.Longcon.t -> (CoreML.Con.t * Scheme.t) option val processDefUse: t -> unit (* scope f evaluates f () in a new scope so that extensions that occur * during f () are forgotten afterwards. @@ -220,7 +245,7 @@ val scope: t * (unit -> 'a) -> 'a (* like scope, but works for bases, signatures and functors as well *) val scopeAll: t * (unit -> 'a) -> 'a - val setTyconNames: t -> unit + val showBasis: t * File.t -> unit val sizeMessage: t -> Layout.t val snapshot: t -> (unit -> 'a) -> 'a end diff -Nru mlton-20130715/mlton/elaborate/elaborate.fun mlton-20210117+dfsg/mlton/elaborate/elaborate.fun --- mlton-20130715/mlton/elaborate/elaborate.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/elaborate/elaborate-mlbs.fun mlton-20210117+dfsg/mlton/elaborate/elaborate-mlbs.fun --- mlton-20130715/mlton/elaborate/elaborate-mlbs.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-mlbs.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2010 Matthew Fluet. +(* Copyright (C) 2010,2016 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -91,8 +91,8 @@ fun elabProg p = ElaboratePrograms.elaborateProgram (p, {env = E}) - val psi : (File.t * Env.Basis.t Promise.t) HashSet.t = - HashSet.new {hash = String.hash o #1} + val psi : (File.t, Env.Basis.t Promise.t) HashTable.t = + HashTable.new {hash = String.hash, equals = String.equals} val elabBasexpInfo = Trace.info "ElaborateMLBs.elabBasexp" val elabBasdecInfo = Trace.info "ElaborateMLBs.elabBasdec" @@ -103,7 +103,7 @@ Layout.ignore) (fn (basexp: Basexp.t) => case Basexp.node basexp of - Basexp.Bas basdec => + Basexp.Bas basdec => let val ((), B) = Env.makeBasis (E, fn () => elabBasdec basdec) @@ -171,21 +171,19 @@ end | Basdec.MLB ({fileAbs, ...}, basdec) => let - val (_, B) = - HashSet.lookupOrInsert - (psi, String.hash fileAbs, fn (fileAbs', _) => - String.equals (fileAbs, fileAbs'), fn () => + val B = + HashTable.lookupOrInsert + (psi, fileAbs, + fn () => let val basdec = Promise.force basdec - val B = - Promise.delay - (fn () => - emptySnapshot - (fn () => - (#2 o Env.makeBasis) - (E, fn () => elabBasdec basdec))) in - (fileAbs, B) + Promise.delay + (fn () => + emptySnapshot + (fn () => + (#2 o Env.makeBasis) + (E, fn () => elabBasdec basdec))) end) val B = Promise.force B handle Promise.Force => @@ -214,31 +212,10 @@ else () in case parseIdAndArgs ann of - Control.Elaborate.Bad => + ElabControl.Bad => (warn () ; elabBasdec basdec) - | Control.Elaborate.Deprecated alts => - let - val (ids, args) = List.unzip alts - val () = - if !Control.warnDeprecated - then - let open Layout - in - Control.warning - (reg, seq [str "deprecated annotation: ", str ann, str ", use ", - List.layout (str o Control.Elaborate.Id.name) ids], - empty) - end - else () - val restores = - List.map (args, Args.processAnn) - in - Exn.finally - (fn () => elabBasdec basdec, - fn () => List.foreach (List.rev restores, fn restore => restore ())) - end - | Control.Elaborate.Good (id, args) => + | ElabControl.Good (id, args) => let val restore = Args.processAnn args in @@ -265,7 +242,29 @@ else elabBasdec basdec, restore) end - | Other => elabBasdec basdec + | ElabControl.Other => elabBasdec basdec + | ElabControl.Proxy (alts, {deprecated}) => + let + val (ids, args) = List.unzip alts + val () = + if !Control.warnDeprecated andalso deprecated + then + let open Layout + in + Control.warning + (reg, seq [str "deprecated annotation: ", str ann, str ", use ", + List.layout (str o ElabControl.Id.name) ids], + empty) + end + else () + val restores = + List.map (args, Args.processAnn) + in + Exn.finally + (fn () => elabBasdec basdec, + fn () => List.foreach (List.rev restores, fn restore => restore ())) + end + end) basdec val _ = withDef (fn () => elabBasdec mlb) in diff -Nru mlton-20130715/mlton/elaborate/elaborate-mlbs.sig mlton-20210117+dfsg/mlton/elaborate/elaborate-mlbs.sig --- mlton-20130715/mlton/elaborate/elaborate-mlbs.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-mlbs.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -13,7 +14,6 @@ structure Decs: DECS structure Env: ELABORATE_ENV sharing Ast = Env.Ast - sharing Ast.Tyvar = CoreML.Tyvar sharing CoreML = Decs.CoreML = Env.CoreML sharing Decs = Env.Decs end diff -Nru mlton-20130715/mlton/elaborate/elaborate-modules.fun mlton-20210117+dfsg/mlton/elaborate/elaborate-modules.fun --- mlton-20130715/mlton/elaborate/elaborate-modules.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-modules.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2012 Matthew Fluet. +(* Copyright (C) 2012,2017,2019 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -25,11 +25,11 @@ structure Fctid = Fctid structure Longstrid = Longstrid structure SigConst = SigConst + structure Sigid = Sigid structure Sigexp = Sigexp structure Strdec = Strdec structure Strexp = Strexp structure Strid = Strid - structure Symbol = Symbol structure Topdec = Topdec end @@ -55,7 +55,9 @@ fun elaborateTopdec (topdec, {env = E: Env.t}) = let - fun elabSigexp s = ElaborateSigexp.elaborateSigexp (s, {env = E}) + fun elabSigexp (s, no) = + ElaborateSigexp.elaborateSigexp + (s, {env = E, nest = case no of NONE => [] | SOME n => [n]}) fun elabSigexpConstraint (cons: SigConst.t, S: Structure.t option, nest: string list) @@ -74,7 +76,7 @@ | SOME S => let val (S, decs) = - case elabSigexp sigexp of + case elabSigexp (sigexp, SOME (Strid.toString Strid.uSig)) of NONE => (S, Decs.empty) | SOME I => Env.cut (E, S, I, @@ -114,6 +116,20 @@ List.fold (ds, Decs.empty, fn (d, decs) => Decs.append (decs, elabStrdec d)) + | Strdec.ShowBasis file => + let + open Layout + val () = + Env.showBasis (E, file) + handle exn => + Control.warning + (Strdec.region d, + str "Exception raised processing #showBasis", + align [seq [str "file: ", File.layout file], + seq [str "exn: ", Exn.layout exn]]) + in + Decs.empty + end | Strdec.Structure strbinds => (* rules 57, 61 *) let val strbinds = @@ -174,10 +190,13 @@ {isFunctor = true, opaque = false, prefix = ""}, - Strexp.region strexp) + Region.append + (Fctid.region fctid, + Strexp.region strexp)) + val resId = Strid.uRes (Fctid.toString fctid) val (decs'', S) = FunctorClosure.apply - (fct, S, [Fctid.toString fctid]) + (fct, S, [Strid.toString resId]) in (Decs.appends [decs, decs', decs''], S) end @@ -211,31 +230,28 @@ fun elabFunctor {arg, body, name, result}: FunctorClosure.t option = let val body = Strexp.constrained (body, result) - val (arg, argSig, body, prefix) = + val argId = Strid.uArg (Fctid.toString name) + val (argSig, argDec) = case FctArg.node arg of FctArg.Structure (arg, argSig) => - (arg, argSig, body, concat [Strid.toString arg, "."]) + (argSig, + Strdec.structuree + {name = arg, + def = Strexp.var (Longstrid.short argId), + constraint = SigConst.None}) | FctArg.Spec spec => - let - val strid = - Strid.fromSymbol (Symbol.fromString "ZZZNewStridZZZ", - Region.bogus) - in - (strid, - Sigexp.spec spec, - Strexp.lett (Strdec.openn (Vector.new1 - (Longstrid.short strid)), - body), - "") - end + (Sigexp.spec spec, + Strdec.openn (Vector.new1 (Longstrid.short argId))) + val body = Strexp.lett (argDec, body) in - Option.map (elabSigexp argSig, fn argInt => + Option.map (elabSigexp (argSig, SOME (Strid.toString argId)), fn argInt => Env.functorClosure - (E, arg, [Fctid.toString name], prefix, argInt, + (E, name, argInt, fn (formal, nest) => - Env.scope (E, fn () => - (Env.extendStrid (E, arg, formal) - ; elabStrexp (body, nest))))) + Env.scope + (E, fn () => + (Env.extendStrid (E, argId, formal) + ; elabStrexp (body, nest))))) end fun elabTopdec arg: Decs.t = Trace.traceInfo' (elabTopdecInfo, @@ -250,7 +266,7 @@ val sigbinds = Vector.map (sigbinds, fn (sigid, sigexp) => - (sigid, elabSigexp sigexp)) + (sigid, elabSigexp (sigexp, SOME (Sigid.toString sigid)))) val () = Vector.foreach (sigbinds, fn (sigid, I) => @@ -275,10 +291,6 @@ Option.app (closure, fn closure => Env.extendFctid (E, name, closure))) - (* Check for errors here so that we don't report duplicate - * errors when re-elaborating the functor body. - *) - val () = Control.checkForErrors "elaborate" in Decs.empty end diff -Nru mlton-20130715/mlton/elaborate/elaborate-modules.sig mlton-20210117+dfsg/mlton/elaborate/elaborate-modules.sig --- mlton-20130715/mlton/elaborate/elaborate-modules.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-modules.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2012 Matthew Fluet. +(* Copyright (C) 2012,2017 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -14,7 +14,6 @@ structure Decs: DECS structure Env: ELABORATE_ENV sharing Ast = Env.Ast - sharing Ast.Tyvar = CoreML.Tyvar sharing CoreML = Decs.CoreML = Env.CoreML sharing Decs = Env.Decs end diff -Nru mlton-20130715/mlton/elaborate/elaborate-programs.fun mlton-20210117+dfsg/mlton/elaborate/elaborate-programs.fun --- mlton-20130715/mlton/elaborate/elaborate-programs.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-programs.fun 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/elaborate/elaborate-programs.sig mlton-20210117+dfsg/mlton/elaborate/elaborate-programs.sig --- mlton-20130715/mlton/elaborate/elaborate-programs.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-programs.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -13,7 +14,6 @@ structure Decs: DECS structure Env: ELABORATE_ENV sharing Ast = Env.Ast - sharing Ast.Tyvar = CoreML.Tyvar sharing CoreML = Decs.CoreML = Env.CoreML sharing Decs = Env.Decs end diff -Nru mlton-20130715/mlton/elaborate/elaborate.sig mlton-20210117+dfsg/mlton/elaborate/elaborate.sig --- mlton-20130715/mlton/elaborate/elaborate.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -13,7 +14,6 @@ structure TypeEnv: TYPE_ENV sharing Ast.Record = CoreML.Record sharing Ast.SortedRecord = CoreML.SortedRecord - sharing Ast.Tyvar = CoreML.Tyvar sharing CoreML.Atoms = TypeEnv.Atoms sharing CoreML.Type = TypeEnv.Type end diff -Nru mlton-20130715/mlton/elaborate/elaborate-sigexp.fun mlton-20210117+dfsg/mlton/elaborate/elaborate-sigexp.fun --- mlton-20130715/mlton/elaborate/elaborate-sigexp.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-sigexp.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2010,2012 Matthew Fluet. +(* Copyright (C) 2010,2012,2015,2017 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -18,24 +18,32 @@ structure Atype = Type structure DatBind = DatBind structure DatatypeRhs = DatatypeRhs - structure Equation = Equation + structure SharingEquation = SharingEquation + structure Longstrid = Longstrid structure Longtycon = Longtycon + structure Record = Record structure Sigexp = Sigexp structure Sigid = Sigid structure SortedRecord = SortedRecord structure Spec = Spec structure TypBind = TypBind - structure Tyvar = Tyvar + structure Atyvar = Tyvar + structure WhereEquation = WhereEquation end local open Env in structure Interface = Interface + structure StructureTycon = + struct + open Tycon + open TypeEnv.TyconExt + end + structure TyvarEnv = TyvarEnv end - structure StructureEnv = Env -structure Env = Env.InterfaceEnv +structure Env = StructureEnv.InterfaceEnv local open Interface @@ -43,57 +51,115 @@ structure AdmitsEquality = AdmitsEquality structure Cons = Cons structure Kind = Kind + structure FlexibleTycon = FlexibleTycon structure Scheme = Scheme structure Status = Status structure Tycon = Tycon structure Type = Type structure TypeStr = TypeStr + structure Tyvar = Tyvar end -fun elaborateType (ty: Atype.t, E: Env.t): Tyvar.t vector * Type.t = +local + open Control.Elaborate +in + fun check (c: (bool,bool) t, keyword: string, region) = + if current c + then () + else + let + open Layout + in + Control.error + (region, + str (concat (if expert c + then [keyword, " disallowed"] + else [keyword, " disallowed, compile with -default-ann '", + name c, " true'"])), + empty) + end +end + +fun elaborateType (ty: Atype.t, E: Env.t): Type.t = let - val tyvars = ref [] + fun makeBogus (mc, ts) = + let + val arity = Vector.length ts + val (name, region) = + Option.fold + (mc, ("t", NONE), fn (c, _) => + (Longtycon.toString c, + SOME (Longtycon.region c))) + val c = + StructureTycon.makeBogus + {name = name, + kind = Kind.Arity arity, + region = region} + in + Type.con (Tycon.Rigid c, ts) + end fun loop (ty: Atype.t): Type.t = case Atype.node ty of Atype.Var a => (* rule 44 *) - Type.var - (case List.peek (!tyvars, fn a' => Tyvar.sameName (a, a')) of - NONE => (List.push (tyvars, a); a) - | SOME a => a) + (case TyvarEnv.lookupTyvar a of + NONE => makeBogus (NONE, Vector.new0 ()) + | SOME a => Type.var a) | Atype.Con (c, ts) => (* rules 46, 47 *) let val ts = Vector.map (ts, loop) fun normal () = case Env.lookupLongtycon (E, c) of - NONE => Type.bogus - | SOME s => + NONE => makeBogus (SOME c, ts) + | SOME s => let val kind = TypeStr.kind s val numArgs = Vector.length ts + val ts = + case kind of + Kind.Arity n => + let + fun error () = + let + open Layout + fun doit n = + seq [str "[", + case n of + 0 => empty + | 1 => str "_" + | _ => seq [str "(", + (seq o separate) + (List.tabulate (n, fn _ => str "_"), + ", "), + str ")"], + str "] ", + Ast.Longtycon.layout c] + in + Control.error + (Atype.region ty, + seq [str "type constructor applied to incorrect number of type arguments: ", + Ast.Longtycon.layout c], + align [seq [str "expects: ", doit n], + seq [str "but got: ", doit numArgs], + seq [str "in: ", Atype.layout ty]]) + end + in + case Int.compare (n, numArgs) of + LESS => + (error (); Vector.prefix (ts, n)) + | EQUAL => ts + | GREATER => + (error () + ; Vector.concat + [ts, + Vector.tabulate + (n - numArgs, fn _ => + makeBogus + (NONE, + Vector.new0 ()))]) + end + | Kind.Nary => ts in - if (case kind of - Kind.Arity n => n = numArgs - | Kind.Nary => true) - then TypeStr.apply (s, ts) - else - let - open Layout - val () = - Control.error - (Atype.region ty, - seq [str "type constructor ", - Ast.Longtycon.layout c, - str " given ", - Int.layout numArgs, - str (if numArgs = 1 - then " argument" - else " arguments"), - str " but wants ", - Kind.layout kind], - empty) - in - Type.bogus - end + TypeStr.apply (s, ts) end in case (Ast.Longtycon.split c, Vector.length ts) of @@ -104,86 +170,81 @@ else normal () | _ => normal () end + | Atype.Paren t => loop t | Atype.Record r => (* rules 45, 49 *) - Type.record (SortedRecord.map (r, loop)) + Type.record + (SortedRecord.fromVector + (Vector.map + (Record.toVector r, + fn (f, (_, t)) => (f, loop t)))) val ty = loop ty in - (Vector.fromList (!tyvars), ty) + ty end val elaborateType = - Trace.trace ("ElaborateSigexp.elaborateType", Atype.layout o #1, Type.layout o #2) + Trace.trace ("ElaborateSigexp.elaborateType", Atype.layout o #1, Type.layout) elaborateType fun elaborateScheme (tyvars: Tyvar.t vector, ty: Atype.t, E): Scheme.t = let - val (tyvars', ty) = elaborateType (ty, E) - val unbound = - Vector.keepAll - (tyvars', fn a => - not (Vector.exists (tyvars, fn a' => Tyvar.sameName (a, a')))) - val ty = - if 0 = Vector.length unbound then - ty - else - let - open Layout - val () = - Control.error (Tyvar.region (Vector.sub (tyvars', 0)), - seq [str (concat ["undefined type variable", - if Vector.length unbound > 1 - then "s" - else "", - ": "]), - seq (separate - (Vector.toListMap (unbound, - Tyvar.layout), - ", "))], - empty) - fun var a = - if Vector.exists (unbound, fn a' => Tyvar.equals (a, a')) then - Type.bogus - else - Type.var a - in - Type.hom (ty, {con = Type.con, - record = Type.record, - var = var}) - end - (* Need to get the representatives that were chosen when elaborating the - * type. - *) - val tyvars = - Vector.map - (tyvars, fn a => - case Vector.peek (tyvars', fn a' => Tyvar.sameName (a, a')) of - NONE => a - | SOME a' => a') + val ty = elaborateType (ty, E) in Scheme.make (tyvars, ty) end fun elaborateTypedescs (typedescs: {tycon: Ast.Tycon.t, - tyvars: Tyvar.t vector} vector, + tyvars: Ast.Tyvar.t vector} vector, {equality: bool}, - E): unit = + E, + nest): unit = Vector.foreach (typedescs, fn {tycon = name, tyvars} => let + val admitsEquality = + if equality + then AdmitsEquality.Sometimes + else AdmitsEquality.Never val kind = Kind.Arity (Vector.length tyvars) - val tycon = Tycon.make {hasCons = false, kind = kind} - val _ = - Tycon.admitsEquality tycon - := (if equality - then AdmitsEquality.Sometimes - else AdmitsEquality.Never) + val prettyDefault = + concat (List.separate (rev (Ast.Tycon.toString name :: nest), ".")) + val flex = FlexibleTycon.new {admitsEquality = admitsEquality, + hasCons = false, + kind = kind, + prettyDefault = prettyDefault, + region = Ast.Tycon.region name} + val tycon = Tycon.Flexible flex in - Env.extendTycon (E, name, TypeStr.tycon (tycon, kind)) + Env.extendTycon (E, name, TypeStr.tycon (tycon, equality)) end) -fun elaborateDatBind (datBind: DatBind.t, E): unit = +fun elabTypBind (typBind: TypBind.t, E, {sequential}) = let - val DatBind.T {datatypes, ...} = DatBind.node datBind + fun mkDef {def, tycon = _, tyvars} = + TyvarEnv.scope + (tyvars, fn tyvars => + let + val realization = + TypeStr.def (elaborateScheme (tyvars, def, E)) + val _ = + TypeStr.pushSpec (realization, Ast.Type.region def) + in + realization + end) + val TypBind.T bs = TypBind.node typBind + in + if sequential + then Vector.foreach + (bs, fn b as {tycon, ...} => + Env.extendTycon (E, tycon, mkDef b)) + else Vector.foreach2 + (bs, Vector.map (bs, mkDef), fn ({tycon, ...}, str) => + Env.extendTycon (E, tycon, str)) + end + +fun elaborateDatBind (datBind: DatBind.t, E, nest): unit = + let + val DatBind.T {datatypes, withtypes} = DatBind.node datBind (* Build enough of an interface so that that the constructor argument * types can be elaborated. *) @@ -191,96 +252,118 @@ Vector.map (datatypes, fn {cons, tycon = name, tyvars} => let - val kind = Kind.Arity (Vector.length tyvars) - val tycon = Tycon.make {hasCons = true, kind = kind} - val _ = - Env.extendTycon (E, name, TypeStr.tycon (tycon, kind)) + val arity = Vector.length tyvars + val kind = Kind.Arity arity + val prettyDefault = + concat (List.separate (rev (Ast.Tycon.toString name :: nest), ".")) + val flex = FlexibleTycon.new {admitsEquality = AdmitsEquality.Sometimes, + hasCons = true, + kind = kind, + prettyDefault = prettyDefault, + region = Ast.Tycon.region name} + val tycon = Tycon.Flexible flex + val _ = Env.extendTycon (E, name, TypeStr.tycon (tycon, false)) in {cons = cons, - kind = kind, + flex = flex, name = name, tycon = tycon, tyvars = tyvars} end) + val _ = if TypBind.isEmpty withtypes + then () + else check (Control.Elaborate.allowSigWithtype, + "withtype in signatures", + TypBind.region withtypes) + (* To match semantics of withtype in Core, + * type binds are elaborated simultaneously. + *) + val _ = elabTypBind (withtypes, E, {sequential = false}) val datatypes = Vector.map - (datatypes, fn {cons, kind, name, tycon, tyvars, ...} => + (datatypes, fn {cons, flex, name, tycon, tyvars} => let - val resultType: Atype.t = - Atype.con (name, Vector.map (tyvars, Atype.var)) - val (consSchemes, consArgs) = - Vector.unzip - (Vector.map - (cons, fn (name, arg) => - let - val (makeArg, ty) = - case arg of - NONE => (fn _ => NONE, resultType) - | SOME t => - (fn s => SOME (#1 (Type.deArrow (Scheme.ty s))), - Atype.arrow (t, resultType)) - val scheme = elaborateScheme (tyvars, ty, E) - in - ({name = name, - scheme = scheme}, - {con = name, - arg = makeArg scheme}) - end)) + val cons = + Vector.map + (cons, fn (name, arg) => + TyvarEnv.scope + (tyvars, fn tyvars => + {arg = Option.map (arg, fn t => elaborateType (t, E)), + name = name, + tyvars = tyvars})) in - {consArgs = consArgs, - consSchemes = consSchemes, - kind = kind, + {cons = cons, + flex = flex, name = name, - tycon = tycon, - tyvars = tyvars} + tycon = tycon} end) - val _ = Env.allowDuplicates := true - val _ = - Vector.foreach - (datatypes, fn {consSchemes, kind, name, tycon, ...} => + (* Maximize equality *) + val change = ref false + fun loop () = let val _ = Vector.foreach - (consSchemes, fn {name, scheme} => - Env.extendCon (E, name, scheme)) - val _ = - Env.extendTycon - (E, name, TypeStr.data (tycon, kind, Cons.T consSchemes)) + (datatypes, fn {cons, flex, ...} => + let + val isEquality = ref true + val () = + Vector.foreach + (cons, fn {arg, tyvars, ...} => + Option.foreach + (arg, fn arg => + let + val argScheme = + Scheme.make (tyvars, arg) + in + if Scheme.admitsEquality argScheme + then () + else isEquality := false + end)) + datatype z = datatype AdmitsEquality.t + in + case FlexibleTycon.admitsEquality flex of + Always => Error.bug "ElaborateSigexp.elaborateDatBind: Always" + | Never => () + | Sometimes => + if !isEquality + then () + else (FlexibleTycon.setAdmitsEquality (flex, Never) + ; change := true) + end) + in + if !change + then (change := false; loop ()) + else () + end + val () = loop () + val () = + Vector.foreach + (datatypes, fn {cons, name, tycon, ...} => + let + val cons = + Vector.map + (cons, fn {arg, name, tyvars} => + let + val res = + Type.con (tycon, Vector.map (tyvars, Type.var)) + val ty = + case arg of + NONE => res + | SOME arg => Type.arrow (arg, res) + val scheme = + Scheme.make (tyvars, ty) + val () = + Env.extendCon (E, name, scheme) + in + {name = name, + scheme = scheme} + end) + val () = + Env.rebindTycon + (E, name, TypeStr.data (tycon, Cons.fromVector cons, false)) in () end) - val _ = Env.allowDuplicates := false - (* Maximize equality *) - val change = ref false - fun loop () = - let - val _ = - Vector.foreach - (datatypes, fn {consArgs, tycon, tyvars, ...} => - let - val r = Tycon.admitsEquality tycon - datatype z = datatype AdmitsEquality.t - in - case !r of - Always => Error.bug "ElaborateSigexp.elaborateDatBind: Always" - | Never => () - | Sometimes => - if Vector.forall - (consArgs, fn {arg, ...} => - case arg of - NONE => true - | SOME ty => - Scheme.admitsEquality - (Scheme.make (tyvars, ty))) - then () - else (r := Never; change := true) - end) - in - if !change - then (change := false; loop ()) - else () - end - val _ = loop () in () end @@ -288,70 +371,91 @@ val traceElaborateSigexp = Trace.trace2 ("ElaborateSigexp.elaborateSigexp", Sigexp.layout, - fn {isTop} => Layout.record [("isTop", Bool.layout isTop)], + fn {isTop, nest} => Layout.record [("isTop", Bool.layout isTop), + ("nest", List.layout Layout.str nest)], Option.layout Interface.layout) - -val info' = Trace.info "ElaborateSigexp.elaborateSpec" +val traceElaborateSpec = + Trace.trace2 ("ElaborateSigexp.elaborateSpec", + Spec.layout, + fn {nest} => Layout.record [("nest", List.layout Layout.str nest)], + Unit.layout) (* rule 65 *) -fun elaborateSigexp (sigexp: Sigexp.t, {env = E: StructureEnv.t}): Interface.t option = +fun elaborateSigexp (sigexp: Sigexp.t, {env = E: StructureEnv.t, nest: string list}): Interface.t option = let - val _ = Interface.renameTycons := (fn () => StructureEnv.setTyconNames E) + val strE = E val E = StructureEnv.makeInterfaceEnv E fun elaborateSigexp arg : Interface.t option = traceElaborateSigexp - (fn (sigexp: Sigexp.t, {isTop}) => + (fn (sigexp: Sigexp.t, {isTop, nest}) => case Sigexp.node sigexp of Sigexp.Spec spec => (* rule 62 *) SOME (#1 (Env.makeInterface (E, {isTop = isTop}, - fn () => elaborateSpec spec))) + fn () => elaborateSpec (spec, {nest = nest})))) | Sigexp.Var x => (* rule 63 *) Option.map (Env.lookupSigid (E, x), Interface.copy) - | Sigexp.Where (sigexp, wheres) => + | Sigexp.Where {sigexp, equations} => (* rule 64 *) let val time = Interface.Time.tick () in Option.map - (elaborateSigexp (sigexp, {isTop = false}), fn I => + (elaborateSigexp (sigexp, {isTop = false, nest = nest}), fn I => let + val {layoutPrettyTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon, ...} = + StructureEnv.makeLayoutPrettyTyconAndFlexTycon + (strE, E, SOME I, {prefixUnset = true}) val _ = Vector.foreach - (wheres, fn {longtycon, ty, tyvars} => - Option.app - (Interface.lookupLongtycon - (I, longtycon, Longtycon.region longtycon, - {prefix = []}), - fn s => - TypeStr.wheree - (s, Longtycon.region longtycon, - fn () => Longtycon.layout longtycon, - time, - TypeStr.def (elaborateScheme (tyvars, ty, E), - Kind.Arity (Vector.length tyvars))))) + (equations, fn eqn => + case WhereEquation.node eqn of + WhereEquation.Type {longtycon, ty, tyvars} => + Option.app + (Interface.lookupLongtycon + (I, longtycon, Longtycon.region longtycon, + {prefix = []}), + fn (name, s) => + let + val realization = + TyvarEnv.scope + (tyvars, fn tyvars => + TypeStr.def (elaborateScheme (tyvars, ty, E))) + in + TypeStr.wheree + {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + realization = realization, + region = WhereEquation.region eqn, + time = time, + ty = {name = fn () => Longtycon.layout longtycon, + region = Longtycon.region longtycon, + spec = Ast.Tycon.region name, + tyStr = s}} + end)) in I end) end) arg and elaborateSpec arg : unit = - Trace.traceInfo' (info', Spec.layout, Layout.ignore) - (fn spec: Spec.t => + traceElaborateSpec + (fn (spec: Spec.t, {nest}) => case Spec.node spec of Spec.Datatype rhs => (* rules 71, 72 *) (case DatatypeRhs.node rhs of - DatatypeRhs.DatBind b => elaborateDatBind (b, E) + DatatypeRhs.DatBind b => elaborateDatBind (b, E, nest) | DatatypeRhs.Repl {lhs, rhs} => Option.app (Env.lookupLongtycon (E, rhs), fn s => let - val _ = Env.extendTycon (E, lhs, s) - val Cons.T v = TypeStr.cons s + val _ = TypeStr.pushSpec (s, Longtycon.region rhs) + val _ = Env.extendTycon (E, lhs, TypeStr.repl s) val _ = Vector.foreach - (v, fn {name, scheme} => + (Cons.dest (TypeStr.cons s), fn {name, scheme} => Env.extendCon (E, name, scheme)) in () @@ -361,7 +465,7 @@ () | Spec.Eqtype typedescs => (* rule 70 *) - elaborateTypedescs (typedescs, {equality = true}, E) + elaborateTypedescs (typedescs, {equality = true}, E, nest) | Spec.Exception cons => (* rule 73 *) Vector.foreach @@ -372,8 +476,7 @@ NONE => Type.exn | SOME t => let - val t = Scheme.ty (elaborateScheme - (Vector.new0 (), t, E)) + val t = elaborateType (t, E) in Type.arrow (t, Type.exn) end @@ -384,7 +487,7 @@ end) | Spec.IncludeSigexp sigexp => (* rule 75 *) - Option.app (elaborateSigexp (sigexp, {isTop = false}), fn I => + Option.app (elaborateSigexp (sigexp, {isTop = false, nest = nest}), fn I => Env.openInterface (E, I, Sigexp.region sigexp)) | Spec.IncludeSigids sigids => (* Appendix A, p.59 *) @@ -395,54 +498,95 @@ (E, Interface.copy I, Sigid.region x))) | Spec.Seq (s, s') => (* rule 77 *) - (elaborateSpec s; elaborateSpec s') - | Spec.Sharing {equations, spec} => + (elaborateSpec (s, {nest = nest}) + ; elaborateSpec (s', {nest = nest})) + | Spec.Sharing {equation, spec} => (* rule 78 and section G.3.3 *) let val time = Interface.Time.tick () - val () = elaborateSpec spec + (* Reifying the interface of spec is expensive, + * so collect all `sharing` equations that + * constrain the same spec. + *) + val (spec, equations) = + let + fun loop (spec, equations) = + case Spec.node spec of + Spec.Sharing {equation, spec} => + loop (spec, equation::equations) + | _ => (spec, equations) + in + loop (spec, [equation]) + end + val (I, _) = + Env.makeInterface + (E, {isTop = false}, + fn () => elaborateSpec (spec, {nest = nest})) + val () = Env.openInterface (E, I, Spec.region spec) + val {layoutPrettyTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon, ...} = + StructureEnv.makeLayoutPrettyTyconAndFlexTycon + (strE, E, NONE, {prefixUnset = true}) val () = - Vector.foreach + List.foreach (equations, fn eqn => - case Equation.node eqn of - Equation.Structure ss => + case SharingEquation.node eqn of + SharingEquation.Structure ss => let - (* The following implements the "all pairs" - * sharing as specified in G.3.3. + (* The following implements the "all + * pairs" sharing as specified in + * Appendix A (and described in + * Appendix G.3.3). *) fun loop Is = case Is of [] => () - | (s, I) :: Is => - List.foreach - (Is, fn (s', I') => - Interface.share (I, s, I', s', time)) + | (long1, I1) :: Is => + (List.foreach + (Is, fn (long2, I2) => + Interface.share + {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + I1 = I1, long1 = long1, + I2 = I2, long2 = long2, + region = SharingEquation.region eqn, + time = time}) + ; loop Is) + val Is = + List.keepAllMap + (ss, fn s => + Option.map + (Interface.lookupLongstrid + (I, s, Longstrid.region s, {prefix = []}), + fn I => (s, I))) in - loop (List.fold - (ss, [], fn (s, ac) => - case Env.lookupLongstrid (E, s) of - NONE => ac - | SOME I => (s, I) :: ac)) + loop Is end - | Equation.Type cs => + | SharingEquation.Type cs => ignore (List.fold (cs, NONE, fn (c', so) => - case (so, Env.lookupLongtycon (E, c')) of + case (so, Interface.lookupLongtycon (I, c', Longtycon.region c', {prefix = []})) of (NONE, NONE) => NONE | (SOME _, NONE) => so - | (NONE, SOME s') => SOME (c', s') - | (SOME (c, s), SOME s') => + | (NONE, SOME (n', s')) => SOME (c', n', s') + | (SOME (c, n, s), SOME (n', s')) => let - fun doit (c, s) = - (s, Longtycon.region c, - fn () => Longtycon.layout c) + fun mkTy (c, n, s) = + {name = fn () => Longtycon.layout c, + region = Longtycon.region c, + spec = Ast.Tycon.region n, + tyStr = s} val _ = - TypeStr.share (doit (c, s), - doit (c', s'), - time) + TypeStr.share + {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + region = SharingEquation.region eqn, + time = time, + ty1 = mkTy (c, n, s), + ty2 = mkTy (c', n', s')} in - SOME (c', s') + SOME (c', n', s') end))) in () @@ -454,7 +598,10 @@ Vector.map (ss, fn (strid, sigexp) => (strid, - case elaborateSigexp (sigexp, {isTop = false}) of + case elaborateSigexp + (sigexp, + {isTop = false, + nest = (Ast.Strid.toString strid)::nest}) of NONE => Interface.empty | SOME I => I)) in @@ -465,36 +612,48 @@ end | Spec.Type typedescs => (* rule 69 *) - elaborateTypedescs (typedescs, {equality = false}, E) + elaborateTypedescs (typedescs, {equality = false}, E, nest) | Spec.TypeDefs typBind => (* Abbreviation on page 59 combined with rules 77 and 80. *) - let - val TypBind.T ds = TypBind.node typBind - in - Vector.foreach - (ds, fn {def, tycon, tyvars} => - Env.extendTycon - (E, tycon, - TypeStr.def (elaborateScheme (tyvars, def, E), - Kind.Arity (Vector.length tyvars)))) - end + elabTypBind (typBind, E, {sequential = true}) | Spec.Val xts => (* rules 68, 79 *) Vector.foreach (xts, fn (x, t) => Env.extendVid (E, Ast.Vid.fromVar x, Status.Var, - Scheme.make (elaborateType (t, E)))) - ) arg + let + val tyvars = + let + val tyvars = ref [] + fun loop t = + case Ast.Type.node t of + Atype.Var a => + if List.contains (!tyvars, a, Atyvar.equals) + then () + else List.push (tyvars, a) + | Atype.Con (_, ts) => + Vector.foreach (ts, loop) + | Atype.Paren t => loop t + | Atype.Record r => Record.foreach (r, loop o #2) + val () = loop t + in + Vector.fromListRev (!tyvars) + end + in + TyvarEnv.scope + (tyvars, fn tyvars => + elaborateScheme (tyvars, t, E)) + end))) arg in - elaborateSigexp (sigexp, {isTop = true}) + elaborateSigexp (sigexp, {isTop = true, nest = nest}) end val elaborateSigexp = - fn (sigexp, {env = E}) => + fn (sigexp, {env = E, nest}) => case Sigexp.node sigexp of Sigexp.Var x => StructureEnv.lookupSigid (E, x) - | _ => elaborateSigexp (sigexp, {env = E}) + | _ => elaborateSigexp (sigexp, {env = E, nest = nest}) val elaborateSigexp = Trace.trace2 ("ElaborateSigexp.elaborateSigexp", diff -Nru mlton-20130715/mlton/elaborate/elaborate-sigexp.sig mlton-20210117+dfsg/mlton/elaborate/elaborate-sigexp.sig --- mlton-20130715/mlton/elaborate/elaborate-sigexp.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/elaborate-sigexp.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -17,7 +18,7 @@ sig include ELABORATE_SIGEXP_STRUCTS - val elaborateSigexp: - Ast.Sigexp.t * {env: Env.t} + val elaborateSigexp: + Ast.Sigexp.t * {env: Env.t, nest: string list} -> Env.Interface.t option end diff -Nru mlton-20130715/mlton/elaborate/interface.fun mlton-20210117+dfsg/mlton/elaborate/interface.fun --- mlton-20130715/mlton/elaborate/interface.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/interface.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2015,2017 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -13,26 +13,28 @@ open S local + open Layout +in + val align = align + val empty = empty + val seq = seq + val str = str + val bracket = fn l => + seq [str "[", l, str "]"] +end + +local open Ast in structure Longstrid = Longstrid structure Longtycon = Longtycon structure Record = SortedRecord structure Strid = Strid - structure Tyvar = Tyvar structure Vid = Vid end -structure Field = Record.Field - +structure Etycon = EnvTycon structure EtypeStr = EnvTypeStr -local - open EtypeStr -in - structure AdmitsEquality = AdmitsEquality - structure Kind = Kind - structure Etycon = Tycon -end structure Set = DisjointSet @@ -60,6 +62,9 @@ structure Defn = struct type t = exn + + val layoutRef: (t -> Layout.t) ref = ref (fn _ => Layout.empty) + fun layout d = (!layoutRef) d end structure Time:> @@ -108,7 +113,9 @@ hasCons: bool, id: TyconId.t, kind: Kind.t, - plist: PropertyList.t} Set.t + plist: PropertyList.t, + prettyDefault: string, + specs: Region.t AppendList.t ref} Set.t withtype copy = t option ref fun fields (T s) = Set.! s @@ -116,81 +123,111 @@ local fun make f = f o fields in - val admitsEquality = make #admitsEquality - val defn = ! o make #defn + val admitsEquality = ! o make #admitsEquality + val defnRef = make #defn + val defn = ! o defnRef + val hasCons = make #hasCons + val kind = make #kind val plist = make #plist + val prettyDefault = make #prettyDefault + fun setAdmitsEquality (f, ae) = + (make #admitsEquality f) := ae + val specsRef = make #specs + val specs = ! o specsRef end + val layoutPrettyDefault = Layout.str o prettyDefault - fun dest (T s) = + fun dest fc = let - val {admitsEquality, hasCons, kind, ...} = Set.! s + val {admitsEquality, hasCons, kind, prettyDefault, ...} = + fields fc in {admitsEquality = !admitsEquality, hasCons = hasCons, - kind = kind} + kind = kind, + prettyDefault = prettyDefault} end val equals = fn (T s, T s') => Set.equals (s, s') - fun layout (T s) = + fun layout fc = let open Layout - val {admitsEquality, creationTime, hasCons, id, ...} = Set.! s + val {admitsEquality, creationTime, defn, hasCons, id, kind, prettyDefault, ...} = fields fc in record [("admitsEquality", AdmitsEquality.layout (!admitsEquality)), ("creationTime", Time.layout creationTime), + ("defn", Defn.layout (!defn)), ("hasCons", Bool.layout hasCons), - ("id", TyconId.layout id)] + ("id", TyconId.layout id), + ("kind", Kind.layout kind), + ("prettyDefault", String.layout prettyDefault)] end - fun layoutApp (t, _) = - (layout t, ({isChar = false}, Etycon.BindingStrength.unit)) - val copies: copy list ref = ref [] - fun new {defn: Defn.t, hasCons: bool, kind: Kind.t}: t = - T (Set.singleton {admitsEquality = ref AdmitsEquality.Sometimes, + fun make {admitsEquality: AdmitsEquality.t, defn: Defn.t, + hasCons: bool, kind: Kind.t, prettyDefault: string, + specs: Region.t AppendList.t}: t = + T (Set.singleton {admitsEquality = ref admitsEquality, copy = ref NONE, creationTime = Time.current (), defn = ref defn, hasCons = hasCons, id = TyconId.new (), kind = kind, - plist = PropertyList.new ()}) + plist = PropertyList.new (), + prettyDefault = prettyDefault, + specs = ref specs}) + + fun pushSpec (fc, region) = + let + val specsRef = specsRef fc + in + specsRef := AppendList.snoc (!specsRef, region) + end end structure Tycon = struct datatype t = Flexible of FlexibleTycon.t - | Rigid of Etycon.t * Kind.t + | Rigid of Etycon.t - val fromEnv: Etycon.t * Kind.t -> t = Rigid + val fromEnv: Etycon.t -> t = Rigid fun admitsEquality c = case c of Flexible f => FlexibleTycon.admitsEquality f - | Rigid (e, _) => Etycon.admitsEquality e + | Rigid c => Etycon.admitsEquality c - val arrow = fromEnv (Etycon.arrow, Kind.Arity 2) + val arrow = fromEnv Etycon.arrow val equals = fn (Flexible f, Flexible f') => FlexibleTycon.equals (f, f') - | (Rigid (c, _), Rigid (c', _)) => Etycon.equals (c, c') + | (Rigid c, Rigid c') => Etycon.equals (c, c') | _ => false - val exn = Rigid (Etycon.exn, Kind.Arity 0) + val exn = Rigid Etycon.exn + + val kind = + fn Flexible f => FlexibleTycon.kind f + | Rigid c => Etycon.kind c val layout = - fn Flexible c => FlexibleTycon.layout c - | Rigid (c, _) => Etycon.layout c + fn Flexible f => FlexibleTycon.layout f + | Rigid c => Etycon.layout c - fun layoutApp (t: t, v) = - case t of - Flexible f => FlexibleTycon.layoutApp (f, v) - | Rigid (c, _) => Etycon.layoutApp (c, v) + val tuple = Rigid Etycon.tuple - val tuple = Rigid (Etycon.tuple, Kind.Nary) + fun layoutAppPretty (c, ts, {layoutPrettyEnvTycon, layoutPrettyFlexTycon}) = + case c of + Flexible f => + EnvTycon.layoutAppPrettyNormal + (layoutPrettyFlexTycon f, ts) + | Rigid c => + EnvTycon.layoutAppPretty + (c, ts, {layoutPretty = layoutPrettyEnvTycon}) end structure Type = @@ -202,8 +239,6 @@ fun arrow (t1, t2) = Con (Tycon.arrow, Vector.new2 (t1, t2)) - val bogus = Con (Tycon.exn, Vector.new0 ()) - val con = Con fun deArrowOpt (t: t): (t * t) option = @@ -247,31 +282,19 @@ local open Layout - fun simple l = (l, ({isChar = false}, Etycon.BindingStrength.unit)) - fun loop t = + in + fun layout t = case t of - Con (c, ts) => Tycon.layoutApp (c, Vector.map (ts, loop)) + Con (c, ts) => + paren (align [seq [str "Con ", Tycon.layout c], + Vector.layout layout ts]) | Record r => - (case Record.detupleOpt r of - NONE => - simple - (seq - [str "{", - mayAlign - (separateRight - (Vector.toListMap - (QuickSort.sortVector - (Record.toVector r, fn ((f, _), (f', _)) => - Field.<= (f, f')), - fn (f, t) => - seq [Field.layout f, str ": ", #1 (loop t)]), - ",")), - str "}"]) - | SOME ts => Tycon.layoutApp (Tycon.tuple, - Vector.map (ts, loop))) - | Var a => simple (Tyvar.layout a) - in - val layout = #1 o loop + Record.layout {record = r, + separator = ": ", + extra = "", + layoutTuple = Vector.layout layout, + layoutElt = layout} + | Var a => paren (seq [str "Var ", Tyvar.layout a]) end val record = Record @@ -298,18 +321,71 @@ struct open Scheme - fun dest (T {ty, tyvars}) = (tyvars, ty) + fun kind (T {tyvars, ...}) = + Kind.Arity (Vector.length tyvars) fun make (tyvars, ty) = T {ty = ty, tyvars = tyvars} + + fun fromTycon tycon = + let + val kind = Tycon.kind tycon + val arity = + case kind of + Kind.Arity arity => arity + | Kind.Nary => Error.bug "Interface.Scheme.fromTycon: Kind.Nary" + val tyvars = + Vector.tabulate + (arity, fn _ => + Tyvar.makeNoname {equality = false}) + in + make (tyvars, Type.con (tycon, Vector.map (tyvars, Type.var))) + end end -structure Cons = +structure Cons : + sig + type t + val dest: t -> {name: Ast.Con.t, + scheme: Scheme.t} vector + val empty: t + val fromSortedVector: {name: Ast.Con.t, + scheme: Scheme.t} vector -> t + val fromVector: {name: Ast.Con.t, + scheme: Scheme.t} vector -> t + val layout: t -> Layout.t + val map: t * ({name: Ast.Con.t, + scheme: Scheme.t} + -> {scheme: Scheme.t}) -> t + end = struct datatype t = T of {name: Ast.Con.t, scheme: Scheme.t} vector + fun dest (T v) = v + + val fromSortedVector = T + + fun fromVector v = + (fromSortedVector o QuickSort.sortVector) + (v, fn ({name = name1, ...}, {name = name2, ...}) => + case Ast.Con.compare (name1, name2) of + LESS => true + | EQUAL => true + | GREATER => false) + val empty = T (Vector.new0 ()) + fun map (T v, f) = + (T o Vector.map) + (v, fn elt as {name, ...} => + let + val {scheme} = + f elt + in + {name = name, + scheme = scheme} + end) + fun layout (T v) = Vector.layout (fn {name, scheme} => let @@ -325,67 +401,78 @@ structure TypeStr = struct datatype node = - Datatype of {cons: Cons.t, - tycon: Tycon.t} + Datatype of {tycon: Tycon.t, + cons: Cons.t, + repl: bool} | Scheme of Scheme.t - | Tycon of Tycon.t + | Tycon of {eq: bool, + tycon: Tycon.t} + type t = node - datatype t = T of {kind: Kind.t, - node: node} + val node = fn s => s - local - fun make f (T r) = f r - in - val kind = make #kind - val node = make #node - end + fun kind s = + case node s of + Datatype {tycon, ...} => Tycon.kind tycon + | Scheme s => Scheme.kind s + | Tycon {tycon, ...} => Tycon.kind tycon fun layout t = let open Layout in case node t of - Datatype {tycon, cons} => + Datatype {tycon, cons, repl} => seq [str "Datatype ", record [("tycon", Tycon.layout tycon), - ("cons", Cons.layout cons)]] + ("cons", Cons.layout cons), + ("repl", Bool.layout repl)]] | Scheme s => Scheme.layout s - | Tycon t => seq [str "Tycon ", Tycon.layout t] + | Tycon {eq, tycon} => + seq [str "Tycon ", + record [("eq", Bool.layout eq), + ("tycon", Tycon.layout tycon)]] end fun apply (t: t, tys: Type.t vector): Type.t = case node t of Datatype {tycon, ...} => Type.con (tycon, tys) | Scheme s => Scheme.apply (s, tys) - | Tycon t => Type.con (t, tys) + | Tycon {tycon, ...} => Type.con (tycon, tys) + + val apply = + Trace.trace ("Interface.TypeStr.apply", Layout.tuple2 (layout, Vector.layout Type.layout), Type.layout) + apply fun cons t = case node t of Datatype {cons, ...} => cons | _ => Cons.empty - fun data (tycon, kind, cons) = - T {kind = kind, - node = Datatype {tycon = tycon, cons = cons}} - - fun def (s: Scheme.t, k: Kind.t) = - let - val (tyvars, ty) = Scheme.dest s - in - T {kind = k, - node = (case Type.deEta (ty, tyvars) of - NONE => Scheme s - | SOME c => Tycon c)} - end + fun data (tycon, cons, repl) = + Datatype {tycon = tycon, cons = cons, repl = repl} - fun toTyconOpt s = - case node s of - Datatype {tycon, ...} => SOME tycon - | Scheme _ => NONE - | Tycon c => SOME c + val def = Scheme + + fun tycon (tycon, eq) = + Tycon {eq = eq, tycon = tycon} + + local + fun tyconAsScheme c = + def (Scheme.fromTycon c) + in + fun repl (t: t) = + case node t of + Datatype {tycon, cons, ...} => data (tycon, cons, true) + | Scheme _ => t + | Tycon {tycon, ...} => tyconAsScheme tycon - fun tycon (c, kind) = T {kind = kind, - node = Tycon c} + fun abs (t: t) = + case node t of + Datatype {tycon, ...} => tyconAsScheme tycon + | Scheme _ => t + | Tycon {tycon, ...} => tyconAsScheme tycon + end end structure Defn = @@ -393,7 +480,7 @@ open Defn datatype dest = - Realized of EtypeStr.t option + Realized of EtypeStr.t | TypeStr of TypeStr.t | Undefined @@ -407,6 +494,18 @@ case d of U u => u | _ => Error.bug "Interface.Defn.dest" + + val () = + layoutRef := + (fn d => + let + open Layout + in + case dest d of + Realized s => seq [str "Realized ", EtypeStr.layout s] + | TypeStr s => seq [str "TypeStr ", TypeStr.layout s] + | Undefined => str "Undefined" + end) end (* expandTy expands all type definitions in ty *) @@ -427,10 +526,126 @@ val expandTy = expandTy end -fun copyCons (Cons.T v): Cons.t = - Cons.T (Vector.map (v, fn {name, scheme} => - {name = name, - scheme = copyScheme scheme})) +structure Type = + struct + open Type + + fun layoutPretty (ty, {expand, layoutPrettyEnvTycon, layoutPrettyFlexTycon, layoutPrettyTyvar}) = + let + fun con (c, ts) = + Tycon.layoutAppPretty + (c, ts, {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon}) + fun record r = + case Record.detupleOpt r of + NONE => + (LayoutPretty.simple o seq) + [str "{", + Layout.mayAlign + (Layout.separateRight + (Vector.toListMap + (Record.toVector r, fn (f, (t, _)) => + seq [Record.Field.layout f, str ": ", t]), + ",")), + str "}"] + | SOME ts => con (Tycon.tuple, ts) + fun var a = LayoutPretty.simple (layoutPrettyTyvar a) + val ty = if expand then expandTy ty else ty + in + Type.hom (ty, {con = con, + record = record, + var = var}) + end + + fun explainDoesNotAdmitEquality (ty, {layoutPrettyEnvTycon, layoutPrettyFlexTycon}) = + let + val layoutAppPretty = fn (c, ls) => + Tycon.layoutAppPretty + (c, ls, + {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon}) + val bracket = LayoutPretty.bracket + val dontCare = LayoutPretty.dontCare + fun getLay lo = Option.fold (lo, dontCare, #1) + fun con (c, los) = + case Tycon.admitsEquality c of + AdmitsEquality.Always => NONE + | AdmitsEquality.Sometimes => + if Vector.forall (los, Option.isNone) + then NONE + else (SOME o layoutAppPretty) + (c, Vector.map (los, getLay)) + | AdmitsEquality.Never => + (SOME o bracket o layoutAppPretty) + (c, Vector.map (los, fn _ => dontCare)) + fun record r = + case Record.detupleOpt r of + NONE => + let + val v = Record.toVector r + val (fls, extra) = + Vector.fold + (v, ([], false), fn ((f, lo), (fls, extra)) => + case lo of + NONE => (fls, true) + | SOME l => ((f,l)::fls, extra)) + in + if List.isEmpty fls + then NONE + else (SOME o LayoutPretty.simple o seq) + [str "{", + Layout.mayAlign + (Layout.separateRight + (List.revMap + (fls, fn (f, (l, _)) => + seq [Record.Field.layout f, + str ": ", l]), + ",")), + if extra + then str ", ...}" + else str "}"] + end + | SOME los => con (Tycon.tuple, los) + fun var _ = NONE + val ty = expandTy ty + val res = Type.hom (ty, {con = con, + record = record, + var = var}) + in + Option.map (res, #1) + end + end + +structure TypeStr = + struct + open TypeStr + + fun toTyconOpt (s, {expand}) = + let + val s = if expand then abs s else s + in + case node s of + Datatype {tycon, ...} => SOME tycon + | Scheme s => + let + val Scheme.T {tyvars, ty} = s + val ty = if expand then expandTy ty else ty + in + case Type.deEta (ty, tyvars) of + NONE => NONE + | SOME c => + if Tycon.equals (c, Tycon.arrow) + orelse Tycon.equals (c, Tycon.tuple) + then NONE + else SOME c + end + | Tycon {tycon, ...} => SOME tycon + end + end + +fun copyCons cons: Cons.t = + Cons.map (cons, fn {scheme, ...} => + {scheme = copyScheme scheme}) and copyDefn (d: Defn.t): Defn.t = let open Defn @@ -445,24 +660,28 @@ | TypeStr s => Defn.typeStr (copyTypeStr s) | Undefined => Defn.undefined end -and copyFlexibleTycon (FlexibleTycon.T s): FlexibleTycon.t = +and copyFlexibleTycon (fc: FlexibleTycon.t): FlexibleTycon.t = let open FlexibleTycon - val {admitsEquality = a, copy, defn, hasCons, kind, ...} = Set.! s + val {admitsEquality, copy, defn, hasCons, + kind, prettyDefault, specs, ...} = + fields fc in case !copy of NONE => let - val c = new {defn = copyDefn (!defn), - hasCons = hasCons, - kind = kind} - val _ = admitsEquality c := !a + val fc' = make {admitsEquality = !admitsEquality, + defn = copyDefn (!defn), + hasCons = hasCons, + kind = kind, + prettyDefault = prettyDefault, + specs = !specs} val _ = List.push (copies, copy) - val _ = copy := SOME c + val _ = copy := SOME fc' in - c + fc' end - | SOME c => c + | SOME fc' => fc' end and copyTycon (t: Tycon.t): Tycon.t = let @@ -485,12 +704,11 @@ and copyTypeStr (s: TypeStr.t): TypeStr.t = let open TypeStr - val kind = kind s in case node s of - Datatype {cons, tycon} => data (copyTycon tycon, kind, copyCons cons) - | Scheme s => def (copyScheme s, kind) - | Tycon c => tycon (copyTycon c, kind) + Datatype {cons, tycon, repl} => data (copyTycon tycon, copyCons cons, repl) + | Scheme s => def (copyScheme s) + | Tycon {eq, tycon = c} => tycon (copyTycon c, eq) end structure AdmitsEquality = @@ -500,13 +718,13 @@ fun fromBool b = if b then Sometimes else Never end -fun flexibleTyconAdmitsEquality (FlexibleTycon.T s): AdmitsEquality.t = +fun flexibleTyconAdmitsEquality (fc: FlexibleTycon.t): AdmitsEquality.t = let - val {admitsEquality, defn, ...} = Set.! s + val {admitsEquality, defn, ...} = FlexibleTycon.fields fc datatype z = datatype Defn.dest in case Defn.dest (!defn) of - Realized _ => Error.bug "Interface.flexibleTyconAdmitsEquality: Realized" + Realized _ => !admitsEquality | TypeStr s => typeStrAdmitsEquality s | Undefined => !admitsEquality end @@ -516,7 +734,7 @@ let datatype z = datatype AdmitsEquality.t in - case ! (Tycon.admitsEquality c) of + case Tycon.admitsEquality c of Always => true | Never => false | Sometimes => Vector.forall (bs, fn b => b) @@ -533,7 +751,7 @@ in case t of Flexible c => flexibleTyconAdmitsEquality c - | Rigid (e, _) => ! (Etycon.admitsEquality e) + | Rigid e => Etycon.admitsEquality e end and typeStrAdmitsEquality (s: TypeStr.t): AdmitsEquality.t = let @@ -542,40 +760,61 @@ case TypeStr.node s of Datatype {tycon = c, ...} => tyconAdmitsEquality c | Scheme s => AdmitsEquality.fromBool (schemeAdmitsEquality s) - | Tycon c => tyconAdmitsEquality c + | Tycon {tycon = c, ...} => tyconAdmitsEquality c end structure FlexibleTycon = struct open FlexibleTycon - fun realize (T s, typeStr) = + fun new {admitsEquality: AdmitsEquality.t, + hasCons: bool, kind: Kind.t, + prettyDefault: string, + region: Region.t}: t = + make {admitsEquality = admitsEquality, + defn = Defn.undefined, + hasCons = hasCons, + kind = kind, + prettyDefault = prettyDefault, + specs = AppendList.single region} + + fun realize (fc, typeStr) = let - val {defn, ...} = Set.! s + val defn = defnRef fc in case Defn.dest (!defn) of Defn.Undefined => defn := Defn.realized typeStr | _ => Error.bug "Interface.FlexibleTycon.realize" end - fun share (T s, T s') = + fun share (fc1 as T s1, fc2 as T s2, sharingSpec) = let - val {admitsEquality = a, creationTime = t, hasCons = h, id, kind, - plist, ...} = - Set.! s - val {admitsEquality = a', creationTime = t', hasCons = h', ...} = - Set.! s' - val _ = Set.union (s, s') + val {admitsEquality = ae1, creationTime = t1, + hasCons = hc1, specs = ss1, + id, kind, plist, prettyDefault, ...} = + fields fc1 + val {admitsEquality = ae2, creationTime = t2, + hasCons = hc2, specs = ss2, ...} = + fields fc2 + val _ = Set.union (s1, s2) + val specs = + AppendList.snoc + (if Ref.equals (ss1, ss2) + then !ss1 + else AppendList.append (!ss1, !ss2), + sharingSpec) val _ = Set.:= - (s, {admitsEquality = ref (AdmitsEquality.or (!a, !a')), - copy = ref NONE, - creationTime = Time.min (t, t'), - defn = ref Defn.undefined, - hasCons = h orelse h', - id = id, - kind = kind, - plist = plist}) + (s1, {admitsEquality = ref (AdmitsEquality.or (!ae1, !ae2)), + copy = ref NONE, + creationTime = Time.min (t1, t2), + defn = ref Defn.undefined, + specs = ref specs, + hasCons = hc1 orelse hc2, + id = id, + kind = kind, + plist = plist, + prettyDefault = prettyDefault}) in () end @@ -583,24 +822,14 @@ type typeStr = TypeStr.t datatype realization = - ETypeStr of EnvTypeStr.t option + ETypeStr of EnvTypeStr.t | TypeStr of typeStr - fun realization (f: t): realization = + fun realization (f: t): realization option = case Defn.dest (defn f) of - Defn.Realized s => ETypeStr s - | Defn.TypeStr s => TypeStr s - | _ => Error.bug "Interface.FlexibleTycon.realization" - end - -structure Tycon = - struct - open Tycon - - fun make {hasCons, kind} = - Flexible (FlexibleTycon.new {defn = Defn.undefined, - hasCons = hasCons, - kind = kind}) + Defn.Realized s => SOME (ETypeStr s) + | Defn.TypeStr s => SOME (TypeStr s) + | Defn.Undefined => NONE end structure Scheme = @@ -612,8 +841,6 @@ val copy = copyScheme end -val renameTycons = ref (fn () => ()) - structure TypeStr = struct open TypeStr @@ -622,150 +849,392 @@ val copy = copyTypeStr - fun getFlex (s: t, time, oper, reg, lay): FlexibleTycon.t option = + fun specs (s, first) = + let + fun loop s = + case toTyconOpt (s, {expand = false}) of + NONE => AppendList.empty + | SOME c => loopTycon c + and loopTycon c = + case c of + Tycon.Flexible fc => + AppendList.append + (FlexibleTycon.specs fc, + case Defn.dest (FlexibleTycon.defn fc) of + Defn.Realized _ => AppendList.empty + | Defn.TypeStr s => loop s + | Defn.Undefined => AppendList.empty) + | Tycon.Rigid _ => AppendList.empty + in + first :: + (List.rev o AppendList.fold) + (loop s, [], fn (r, rs) => + if List.contains (first::rs, r, Region.equals) + then rs + else r :: rs) + end + + fun pushSpec (s, region) = + case TypeStr.toTyconOpt (s, {expand = false}) of + NONE => () + | SOME (Tycon.Flexible flex) => + FlexibleTycon.pushSpec (flex, region) + | SOME (Tycon.Rigid _) => () + + fun getFlex {layoutPrettyEnvTycon, + layoutPrettyFlexTycon, + oper: string, + time: Time.t, + ty = {name: unit -> Layout.t, + region: Region.t, + spec: Region.t, + tyStr: t}}: FlexibleTycon.t option = let fun error what = let - open Layout - val _ = + val isEmpty = Layout.isEmpty + val tuple = Layout.tuple + val {layoutPretty = layoutPrettyTyvar, + localInit = localInitLayoutPrettyTyvar, ...} = + Tyvar.makeLayoutPretty () + val arity = + case kind tyStr of + Kind.Arity arity => arity + | _ => Error.bug "Interface.TypeStr.getFlex: Kind.Nary" + val tyvars = + Vector.tabulate + (arity, fn _ => + Tyvar.makeNoname {equality = false}) + val () = localInitLayoutPrettyTyvar tyvars + val tyargs = Vector.map (tyvars, Type.var) + val tyvars = Vector.map (tyvars, layoutPrettyTyvar) + val tyvars = + case Vector.length tyvars of + 0 => empty + | 1 => Vector.first tyvars + | _ => tuple (Vector.toList tyvars) + val (kw, mkRest) = + case TypeStr.node tyStr of + TypeStr.Datatype _ => + ("datatype", fn l => + seq [str "... (* = datatype ", l, str " *)"]) + | TypeStr.Scheme _ => + ("type", fn l => l) + | TypeStr.Tycon _ => + ("type", fn l => l) + val defn = TypeStr.apply (tyStr, tyargs) + val () = Control.error - (reg, - seq [str "type ", lay (), - str (concat [" is ", what, " and cannot be ", oper])], - empty) + (region, + seq [str "type cannot be ", str oper, + str " (", str what, str "): ", + name ()], + align + ((seq [str "type spec: ", + str kw, str " ", + tyvars, + if isEmpty tyvars then empty else str " ", + name (), str " = ", + mkRest ((#1 o Type.layoutPretty) + (defn, {expand = true, + layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + layoutPrettyTyvar = layoutPrettyTyvar}))]):: + (List.map + (specs (tyStr, spec), fn r => + seq [str "spec at: ", Region.layout r])))) in NONE end - fun loop (s: t): FlexibleTycon.t option = - case node s of - Datatype {tycon, ...} => loopTycon tycon - | Scheme (Scheme.T {ty, tyvars}) => - (case Type.deEta (expandTy ty, tyvars) of - NONE => error "a definition" - | SOME c => loopTycon c) - | Tycon c => loopTycon c - and loopTycon (c: Tycon.t): FlexibleTycon.t option = - case c of - Tycon.Flexible c => - let - val {creationTime, defn, ...} = FlexibleTycon.fields c - in - case Defn.dest (!defn) of - Defn.Realized _ => - Error.bug "Interface.TypeStr.loopTycon: Realized" - | Defn.TypeStr s => loop s - | Defn.Undefined => - if Time.< (creationTime, time) - then error "not local" - else SOME c - end - | Tycon.Rigid (c, _) => - (! renameTycons () - ; error (concat ["already defined as ", - Layout.toString (Etycon.layout c)])) in - loop s + case toTyconOpt (tyStr, {expand = true}) of + NONE => error "defined" + | SOME c => + (case c of + Tycon.Flexible c => + let + val {creationTime, defn, ...} = FlexibleTycon.fields c + in + case Defn.dest (!defn) of + Defn.Realized _ => + Error.bug "Interface.TypeStr.getFlex: Realized" + | Defn.TypeStr _ => + Error.bug "Interface.TypeStr.getFlex: TypeStr" + | Defn.Undefined => + if Time.< (creationTime, time) + then error "not local" + else SOME c + end + | Tycon.Rigid _ => error "defined") end - fun share ((s: t, reg, lay), (s': t, reg', lay'), time: Time.t): unit = - let - val oper = "shared" - val k = kind s - val k' = kind s' - in - if not (Kind.equals (k, k')) - then - let - open Layout - in - Control.error - (reg, - seq [str "type ", lay (), - str " has arity ", Kind.layout k, - str " and type ", lay' (), - str " has arity ", Kind.layout k', - str " and cannot be shared"], - empty) - end - else - case (getFlex (s, time, oper, reg, lay), - getFlex (s', time, oper, reg', lay')) of - (SOME f, SOME f') => FlexibleTycon.share (f, f') - | _ => () - end + fun share {layoutPrettyEnvTycon, layoutPrettyFlexTycon, + region: Region.t, time: Time.t, + ty1 as {name = name1, ...}, + ty2 as {name = name2, ...}} = + case (getFlex {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + oper = "shared", time = time, ty = ty1}, + getFlex {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + oper = "shared", time = time, ty = ty2}) of + (NONE, _) => () + | (_, NONE) => () + | (SOME flex1, SOME flex2) => + if Kind.equals (FlexibleTycon.kind flex1, FlexibleTycon.kind flex2) + then FlexibleTycon.share (flex1, flex2, region) + else let + fun msg {name, region = _, spec, tyStr} = + let + val (keyword, rest) = + case node tyStr of + Datatype _ => ("datatype", str " = ...") + | Scheme _ => ("type", str " = ...") + | Tycon {eq, ...} => + if eq + then ("eqtype", empty) + else ("type", empty) + val arity = + case kind tyStr of + Kind.Arity arity => arity + | _ => Error.bug "Interface.TypeStr.share.msg: arity" + val tyvars = + Vector.tabulate + (arity, fn _ => + Tyvar.makeNoname {equality = false}) + val {layoutPretty = layoutPrettyTyvar, + localInit = localInitLayoutPrettyTyvar, ...} = + Tyvar.makeLayoutPretty () + val () = localInitLayoutPrettyTyvar tyvars + val tyvars = + case Vector.length tyvars of + 0 => empty + | 1 => layoutPrettyTyvar (Vector.first tyvars) + | _ => Layout.tuple (Vector.toListMap (tyvars, layoutPrettyTyvar)) + in + (seq [str "type spec: ", + str keyword, + str " [", tyvars, str "] ", + name (), + rest]):: + (List.map + (specs (tyStr, spec), fn r => + seq [str "spec at: ", Region.layout r])) + end + in + Control.error + (region, + seq [str "types cannot be shared (arity): ", + name1 (), str ", ", name2 ()], + align ((msg ty1) @ (msg ty2))) + end val share = Trace.trace ("Interface.TypeStr.share", - fn ((s, _, _), (s', _, _), t) => - Layout.tuple [layout s, layout s', Time.layout t], + fn {time, ty1, ty2, ...} => + Layout.record [("time", Time.layout time), + ("ty1", Layout.record [("tyStr", layout (#tyStr ty1))]), + ("ty2", Layout.record [("tyStr", layout (#tyStr ty2))])], Unit.layout) share - fun wheree (s': t, r: Region.t, lay, time: Time.t, s: t): unit = - case getFlex (s', time, "redefined", r, lay) of + fun wheree {layoutPrettyEnvTycon, layoutPrettyFlexTycon, + region: Region.t, realization: t, time: Time.t, + ty as {name: unit -> Layout.t, + region = _: Region.t, + spec: Region.t, + tyStr: t}}: unit = + case getFlex {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + oper = "realized", time = time, ty = ty} of NONE => () | SOME flex => let - val k = kind s - val k' = kind s' - in - if not (Kind.equals (k, k')) - then - let - open Layout - in - Control.error - (r, - seq [str "type ", lay (), - str " has arity ", Kind.layout k', - str " and cannot be defined to have arity ", - Kind.layout k], - empty) - end - else if (admitsEquality s' = AdmitsEquality.Sometimes - andalso admitsEquality s = AdmitsEquality.Never) - then - let - open Layout + val error: (Layout.t list * Layout.t * Layout.t) option ref = ref NONE + val addError = fn (msg, tyError, rlError) => + let + val msgs = + case !error of + NONE => [str msg] + | SOME (msgs, _, _) => (str msg)::msgs + in + error := SOME (msgs, tyError, rlError) + end + + val {layoutPretty = layoutPrettyTyvar, + localInit = localInitLayoutPrettyTyvar, ...} = + Tyvar.makeLayoutPretty () + fun layoutPrettyType t = + Type.layoutPretty + (t, {expand = true, + layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) + + val tyKind = TypeStr.kind tyStr + val tyArity = + case tyKind of + Kind.Arity tyArity => tyArity + | _ => Error.bug "Interface.TypeStr.wheree: tyArity" + val rlKind = TypeStr.kind realization + val rlArity = + case rlKind of + Kind.Arity rlArity => rlArity + | _ => Error.bug "Interface.TypeStr.wheree: rlArity" + local + val tyvars = + Vector.tabulate + (Int.max (tyArity, rlArity), fn _ => + Tyvar.makeNoname {equality = false}) + val () = localInitLayoutPrettyTyvar tyvars + in + val tyTyvars = Vector.prefix (tyvars, tyArity) + val tyTyargs = Vector.map (tyTyvars, Type.var) + val rlTyvars = Vector.prefix (tyvars, rlArity) + val rlTyargs = Vector.map (rlTyvars, Type.var) + end + fun layoutTyvars tyvars = + let + open Layout + val tyvars = + case Vector.length tyvars of + 0 => empty + | 1 => layoutPrettyTyvar (Vector.first tyvars) + | _ => tuple (Vector.toListMap (tyvars, layoutPrettyTyvar)) + val tyvars = + if tyArity = rlArity + then tyvars + else bracket tyvars + in + if isEmpty tyvars + then str " " + else seq [str " ", tyvars, str " "] + end + + fun tyMsg (b, rest) = + let + val empty = Layout.empty + val defn = + seq [str " = ", + case rest of + NONE => str "..." + | SOME rest => rest] + val (kw, defn) = + case TypeStr.node tyStr of + Datatype _ => ("datatype", defn) + | Scheme _ => ("type", defn) + | Tycon {eq, ...} => + (case rest of + NONE => + (if eq then "eqtype" else "type", + empty) + | SOME _ => + ("type", defn)) + in + seq [if b then bracket (str kw) else str kw, + layoutTyvars tyTyvars, + name (), + defn] + end + fun rlMsg (b, rest) = + let + val defn = + seq [str " = ", + case rest of + NONE => str "..." + | SOME rest => rest] + val kw = "type" + in + seq [if b then bracket (str kw) else str kw, + layoutTyvars rlTyvars, + name (), + defn] + end + + val () = + if Kind.equals (tyKind, rlKind) + then () + else addError ("arity", + tyMsg (false, NONE), + rlMsg (false, NONE)) + val () = + if FlexibleTycon.hasCons flex + andalso + Option.isNone (TypeStr.toTyconOpt + (realization, {expand = true})) + then let + fun tyDefn () = + (SOME o bracket o #1 o layoutPrettyType) + (TypeStr.apply (tyStr, tyTyargs)) + val (tyKwErr, tyDefn) = + case TypeStr.node tyStr of + Datatype _ => (true, NONE) + | Scheme _ => (false, tyDefn ()) + | Tycon _ => (false, tyDefn ()) + val rlDefn = + (SOME o bracket o #1 o layoutPrettyType) + (TypeStr.apply (realization, rlTyargs)) in - Control.error - (r, - seq [str "eqtype ", lay (), - str " cannot be defined as a non-equality type"], - empty) + addError ("type structure", + tyMsg (tyKwErr, tyDefn), + rlMsg (false, rlDefn)) end - else - let - val {defn, hasCons, ...} = FlexibleTycon.fields flex - in - if hasCons - andalso - (case node s of - Scheme (Scheme.T {ty, tyvars}) => - Option.isNone - (Type.deEta (expandTy ty, tyvars)) - | _ => false) - then - let - open Layout - in - Control.error - (r, - seq [str "type ", lay (), - str " is a datatype and cannot be redefined as a complex type"], - empty) - end - else - defn := Defn.typeStr s - end + else let + val tyAdmitsEquality = admitsEquality (#tyStr ty) + val rlAdmitsEquality = admitsEquality realization + in + if AdmitsEquality.<= (tyAdmitsEquality, rlAdmitsEquality) + then () + else let + fun tyDefn () = + (SOME o bracket o #1 o layoutPrettyType) + (TypeStr.apply (tyStr, tyTyargs)) + val (tyKwErr, tyDefn) = + case TypeStr.node tyStr of + Datatype _ => (false, NONE) + | Scheme _ => (false, tyDefn ()) + | Tycon {eq, ...} => + if eq + then (true, NONE) + else (false, tyDefn ()) + val rlDefn = + Type.explainDoesNotAdmitEquality + (TypeStr.apply (realization, rlTyargs), + {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon}) + in + addError ("admits equality", + tyMsg (tyKwErr, tyDefn), + rlMsg (false, rlDefn)) + end + end + in + case !error of + NONE => + (FlexibleTycon.defnRef flex := Defn.typeStr realization + ; FlexibleTycon.pushSpec (flex, region) + ; pushSpec (realization, region)) + | SOME (msgs, tyError, rlError) => + Control.error + (region, + seq [str "type cannot be realized (", + (seq o List.separate) (List.rev msgs, str ", "), + str "): ", + name ()], + align ((seq [str "type spec: ", tyError]) :: + (List.map + (specs (tyStr, spec), fn r => + seq [str "spec at: ", Region.layout r])) @ + [seq [str "type defn: ", rlError]])) end val wheree = Trace.trace ("Interface.TypeStr.wheree", - fn (s, _, _, t, s') => Layout.tuple [layout s, - Time.layout t, - layout s'], + fn {realization, time, ty, ...} => + Layout.record [("realization", layout realization), + ("time", Time.layout time), + ("ty", Layout.record [("tyStr", layout (#tyStr ty))])], Unit.layout) wheree end @@ -795,6 +1264,19 @@ fun isEmpty (T {strs, types}) = 0 = Array.length strs andalso 0 = Array.length types + + fun peekStrid (T {strs, ...}, strid) = + Array.peekMap (strs, fn (strid', z) => + if Strid.equals (strid, strid') + then SOME z + else NONE) + + fun peekTycon (T {types, ...}, tycon) = + Array.peekMap (types, fn (tycon', z) => + if Ast.Tycon.equals (tycon, tycon') + then SOME z + else NONE) + end (*---------------------------------------------------*) @@ -825,11 +1307,11 @@ NONE => I | SOME I => I -fun new {isClosed, strs, types, vals} = +fun new {isClosed, original, strs, types, vals} = T (Set.singleton {copy = ref NONE, flexible = ref NONE, isClosed = isClosed, - original = NONE, + original = original, plist = PropertyList.new (), strs = strs, types = types, @@ -837,6 +1319,7 @@ vals = vals}) val empty = new {isClosed = true, + original = NONE, strs = Array.new0 (), types = Array.new0 (), vals = Array.new0 ()} @@ -899,13 +1382,13 @@ loop (I, strids, []) end -fun peekTycon (T s, tycon: Ast.Tycon.t): TypeStr.t option = +fun peekTycon (T s, tycon: Ast.Tycon.t): (Ast.Tycon.t * TypeStr.t) option = let val {types, ...} = Set.! s in Array.peekMap (types, fn (name, typeStr) => if Ast.Tycon.equals (tycon, name) - then SOME typeStr + then SOME (name, typeStr) else NONE) end @@ -918,7 +1401,7 @@ Layout.empty) fun layoutStrids (ss: Strid.t list): Layout.t = - Layout.str (concat (List.separate (List.map (ss, Strid.toString), "."))) + Layout.str (concat (List.separate (List.map (ss, Strid.toString), "."))) fun lookupLongtycon (I: t, long: Longtycon.t, r: Region.t, {prefix: Strid.t list}) = @@ -932,24 +1415,52 @@ (unbound (r, "type", Longtycon.layout (Longtycon.long (prefix @ ss, c))) ; NONE) - | SOME s => SOME s) + | SOME (name, s) => SOME (name, s)) | UndefinedStructure ss => (unbound (r, "structure", layoutStrids (prefix @ ss)) ; NONE) end -fun share (I: t, ls: Longstrid.t, I': t, ls': Longstrid.t, time): unit = +fun lookupLongstrid (I: t, long: Longstrid.t, r: Region.t, + {prefix: Strid.t list}) = let - fun lay (s, ls, strids, name) = - (s, Longstrid.region ls, - fn () => - let - val (ss, s) = Longstrid.split ls - in - Ast.Longtycon.layout - (Ast.Longtycon.long (List.concat [ss, [s], rev strids], - name)) - end) + val (ss, s) = Longstrid.split long + in + case peekStrids (I, ss) of + Found I => + (case peekStrid (I, s) of + NONE => + (unbound (r, "structure", + Longstrid.layout (Longstrid.long (prefix @ ss, s))) + ; NONE) + | SOME I => SOME I) + | UndefinedStructure ss => + (unbound (r, "structure", layoutStrids (prefix @ ss)) + ; NONE) + end + +fun share {layoutPrettyEnvTycon, layoutPrettyFlexTycon, + I1: t, long1: Longstrid.t, I2: t, long2: Longstrid.t, + time, region}: unit = + let + fun mkTy (s, long, strids, name) = + let + val spec = Ast.Tycon.region name + val region = Longstrid.region long + val name = fn () => + let + val (ss, s) = Longstrid.split long + in + Ast.Longtycon.layout + (Ast.Longtycon.long (List.concat [ss, [s], rev strids], + name)) + end + in + {name = name, + region = region, + spec = spec, + tyStr = s} + end fun ensureFlexible (I: t, strids): unit = let val {get: t -> bool ref, destroy, ...} = @@ -972,13 +1483,12 @@ val _ = Array.foreach (types, fn (name, s) => - let - val (_, r, lay) = lay (s, ls, strids, name) - val _ = - TypeStr.getFlex (s, time, "shared", r, lay) - in - () - end) + (ignore o TypeStr.getFlex) + {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + oper = "shared", + time = time, + ty = mkTy (s, long1, strids, name)}) in () end @@ -988,18 +1498,32 @@ in () end - fun share (I, I', strids): unit = - if equals (I, I') - then ensureFlexible (I, strids) - else if sameShape (I, I') + fun share (I1, I2, strids): unit = + if equals (I1, I2) + then ensureFlexible (I1, strids) + else if sameShape (I1, I2) then let - fun loop (T s, T s', strids): unit = + fun loop (T s1, T s2, strids): unit = let - val {isClosed, strs, types, ...} = Set.! s - val {strs = strs', types = types', ...} = Set.! s' + val {isClosed, strs = strs1, types = types1, ...} = Set.! s1 + val {strs = strs2, types = types2, ...} = Set.! s2 + val _ = + Array.foreach2 + (types1, types2, fn ((name, s1), (_, s2)) => + TypeStr.share + {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + region = region, + time = time, + ty1 = mkTy (s1, long1, strids, name), + ty2 = mkTy (s2, long2, strids, name)}) val _ = - (* Can't always union here. I and I' may have + Array.foreach2 + (strs1, strs2, fn ((name, I1), (_, I2)) => + loop (I1, I2, name :: strids)) + val _ = + (* Can't always union here. I1 and I2 may have * exactly the same shape, but may have free * flxible tycons defined in other signatures that * are different. @@ -1013,85 +1537,79 @@ * guarantee that all rigid tycons are identical. *) if isClosed - then Set.union (s, s') - else () - val _ = - Array.foreach2 - (types, types', fn ((name, s), (_, s')) => - TypeStr.share (lay (s, ls, strids, name), - lay (s', ls', strids, name), - time)) - val _ = - Array.foreach2 - (strs, strs', fn ((name, I), (_, I')) => - loop (I, I', name :: strids)) + then Set.union (s1, s2) + else () in () end in - loop (I, I', strids) + loop (I1, I2, strids) end else (* different shapes -- need to share pointwise *) let - val T s = I - val T s' = I' - val {strs, types, ...} = Set.! s - val {strs = strs', types = types', ...} = Set.! s' - fun walk2 (a, a', compareNames, f: 'a * 'a * 'b -> unit) = + val T s1 = I1 + val T s2 = I2 + val {strs = strs1, types = types1, ...} = Set.! s1 + val {strs = strs2, types = types2, ...} = Set.! s2 + fun walk2 (a1, a2, compareNames, f: 'a * 'a * 'b -> unit) = let - val n = Array.length a - val n' = Array.length a' - fun both (i, i') = - if i < n andalso i' < n' - then compare (i, Array.sub (a, i), - i', Array.sub (a', i')) + val n1 = Array.length a1 + val n2 = Array.length a2 + fun both (i1, i2) = + if i1 < n1 andalso i2 < n2 + then compare (i1, Array.sub (a1, i1), + i2, Array.sub (a2, i2)) else () - and compare (i, (name, z), i', (name', z')) = - case compareNames (name, name') of + and compare (i1, (name1, z1), i2, (name2, z2)) = + case compareNames (name1, name2) of GREATER => let - val i' = i' + 1 + val i2 = i2 + 1 in - if i' < n' - then compare (i, (name, z), - i', Array.sub (a', i')) + if i2 < n2 + then compare (i1, (name1, z1), + i2, Array.sub (a2, i2)) else () end - | EQUAL => (f (z, z', name) - ; both (i + 1, i' + 1)) + | EQUAL => (f (z1, z2, name1) + ; both (i1 + 1, i2 + 1)) | LESS => let - val i = i + 1 + val i1 = i1 + 1 in - if i < n - then compare (i, Array.sub (a, i), - i', (name', z')) + if i1 < n1 + then compare (i1, Array.sub (a1, i1), + i2, (name2, z2)) else () end in both (0, 0) end val _ = - walk2 (strs, strs', Strid.compare, - fn (I, I', name) => share (I, I', name :: strids)) + walk2 (strs1, strs2, Strid.compare, + fn (I1, I2, name) => share (I1, I2, name :: strids)) val _ = - walk2 (types, types', Ast.Tycon.compare, - fn (s, s', name) => - TypeStr.share (lay (s, ls, strids, name), - lay (s', ls', strids, name), - time)) + walk2 (types1, types2, Ast.Tycon.compare, + fn (s1, s2, name) => + TypeStr.share + {layoutPrettyEnvTycon = layoutPrettyEnvTycon, + layoutPrettyFlexTycon = layoutPrettyFlexTycon, + region = region, + time = time, + ty1 = mkTy (s1, long1, strids, name), + ty2 = mkTy (s2, long2, strids, name)}) in () end in - share (I, I', []) + share (I1, I2, []) end val share = Trace.trace ("Interface.share", - fn (I, _, I', _, t) => - Layout.tuple [layout I, layout I', Time.layout t], + fn {I1, I2, time, ...} => + Layout.tuple [layout I1, layout I2, Time.layout time], Unit.layout) share @@ -1170,38 +1688,57 @@ let val _ = r := SOME length val {strs, types, ...} = dest I + fun setTycon (tycon, isDatatype, isEqtype) = + case tycon of + Tycon.Flexible fc => + let + val {admitsEquality, defn, hasCons, ...} = FlexibleTycon.fields fc + val admitsEquality = + case !admitsEquality of + AdmitsEquality.Always => true + | AdmitsEquality.Never => false + | AdmitsEquality.Sometimes => true + in + case Defn.dest (!defn) of + Defn.Undefined => + let + val r = tyconShortest fc + in + if (hasCons + andalso not isDatatype) + orelse + (admitsEquality + andalso not isEqtype) + orelse + (isSome (#length (!r)) + andalso length >= valOf (#length (!r))) + then ref NONE + else let + val _ = #flex (!r) := NONE + val flex = ref (SOME fc) + val _ = r := {flex = flex, + length = SOME length} + in + flex + end + end + | _ => ref NONE + end + | _ => ref NONE val types = Array.map (types, fn (tycon, typeStr) => (tycon, - case TypeStr.toTyconOpt typeStr of - SOME (Tycon.Flexible (c as FlexibleTycon.T s)) => - let - val {defn, ...} = Set.! s - in - case Defn.dest (!defn) of - Defn.Undefined => - let - val r = tyconShortest c - in - if isSome (#length (!r)) - andalso length >= valOf (#length (!r)) - then ref NONE - else - let - val _ = #flex (!r) := NONE - val flex = ref (SOME c) - val _ = r := {flex = flex, - length = SOME length} - in - flex - end - end - | _ => ref NONE - end + case TypeStr.node typeStr of + TypeStr.Datatype {tycon, repl, ...} => + setTycon (tycon, not repl, true) + | TypeStr.Tycon {eq, tycon, ...} => + setTycon (tycon, false, eq) | _ => ref NONE)) val strs = - Array.map (strs, fn (s, I) => (s, loop (I, 1 + length))) + Array.map + (strs, fn (s, I) => + (s, loop (I, 1 + length))) in TyconMap.T {strs = strs, types = types} end diff -Nru mlton-20130715/mlton/elaborate/interface.sig mlton-20210117+dfsg/mlton/elaborate/interface.sig --- mlton-20130715/mlton/elaborate/interface.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/interface.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,37 +1,52 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) signature INTERFACE_STRUCTS = sig structure Ast: AST - structure EnvTypeStr: + structure AdmitsEquality: ADMITS_EQUALITY + structure Kind: TYCON_KIND + structure EnvTycon: sig - structure AdmitsEquality: ADMITS_EQUALITY - structure Kind: TYCON_KIND - structure Tycon: - sig - structure BindingStrength: BINDING_STRENGTH - - type t - - val admitsEquality: t -> AdmitsEquality.t ref - val arrow: t - val equals: t * t -> bool - val exn: t - val layout: t -> Layout.t - val layoutApp: - t * (Layout.t - * ({isChar: bool} * BindingStrength.t)) vector - -> Layout.t * ({isChar: bool} * BindingStrength.t) - val tuple: t - end + type t + val admitsEquality: t -> AdmitsEquality.t + val arrow: t + val equals: t * t -> bool + val exn: t + val kind: t -> Kind.t + val layout: t -> Layout.t + val layoutAppPretty: + t + * LayoutPretty.t vector + * {layoutPretty: t -> Layout.t} + -> LayoutPretty.t + val layoutAppPrettyNormal: + Layout.t + * LayoutPretty.t vector + -> LayoutPretty.t + val tuple: t + end + structure EnvTypeStr: + sig type t + val layout: t -> Layout.t + end + structure Tyvar: + sig + include ID + val makeNoname: {equality: bool} -> t + val makeLayoutPretty: + unit + -> {destroy: unit -> unit, + layoutPretty: t -> Layout.t, + localInit: t vector -> unit} end end @@ -39,40 +54,38 @@ sig include INTERFACE_STRUCTS - structure AdmitsEquality: ADMITS_EQUALITY - sharing AdmitsEquality = EnvTypeStr.AdmitsEquality - structure Kind: TYCON_KIND - sharing Kind = EnvTypeStr.Kind - structure FlexibleTycon: sig type typeStr type t + val admitsEquality: t -> AdmitsEquality.t val dest: t -> {admitsEquality: AdmitsEquality.t, hasCons: bool, - kind: Kind.t} + kind: Kind.t, + prettyDefault: string} val layout: t -> Layout.t - val realize: t * EnvTypeStr.t option -> unit + val layoutPrettyDefault: t -> Layout.t + val plist: t -> PropertyList.t + val new: {admitsEquality: AdmitsEquality.t, + hasCons: bool, + kind: Kind.t, + prettyDefault: string, + region: Region.t} -> t + val realize: t * EnvTypeStr.t -> unit datatype realization = - ETypeStr of EnvTypeStr.t option + ETypeStr of EnvTypeStr.t | TypeStr of typeStr - val realization: t -> realization + val realization: t -> realization option + val setAdmitsEquality: t * AdmitsEquality.t -> unit end structure Tycon: sig datatype t = Flexible of FlexibleTycon.t - | Rigid of EnvTypeStr.Tycon.t * Kind.t - - val admitsEquality: t -> AdmitsEquality.t ref - val make: {hasCons: bool, kind: Kind.t} -> t - end - structure Tyvar: - sig - type t + | Rigid of EnvTycon.t + val admitsEquality: t -> AdmitsEquality.t end - sharing Tyvar = Ast.Tyvar structure Record: RECORD sharing Record = Ast.SortedRecord structure Type: @@ -80,7 +93,6 @@ type t val arrow: t * t -> t - val bogus: t val con: Tycon.t * t vector -> t val deArrow: t -> t * t val deEta: t * Tyvar.t vector -> Tycon.t option @@ -89,6 +101,12 @@ record: 'a Record.t -> 'a, var: Tyvar.t -> 'a} -> 'a val layout: t -> Layout.t + val layoutPretty: + t * {expand: bool, + layoutPrettyEnvTycon: EnvTycon.t -> Layout.t, + layoutPrettyFlexTycon: FlexibleTycon.t -> Layout.t, + layoutPrettyTyvar: Tyvar.t -> Layout.t} + -> LayoutPretty.t val record: t Record.t -> t val var: Tyvar.t -> t end @@ -111,43 +129,77 @@ tyvars: Tyvar.t vector} val admitsEquality: t -> bool + val fromTycon: Tycon.t -> t val make: Tyvar.t vector * Type.t -> t val ty: t -> Type.t end structure Cons: sig - datatype t = T of {name: Ast.Con.t, - scheme: Scheme.t} vector - + type t + val dest: t -> {name: Ast.Con.t, + scheme: Scheme.t} vector val empty: t + val fromSortedVector: {name: Ast.Con.t, + scheme: Scheme.t} vector -> t + val fromVector: {name: Ast.Con.t, + scheme: Scheme.t} vector -> t val layout: t -> Layout.t + val map: t * ({name: Ast.Con.t, + scheme: Scheme.t} + -> {scheme: Scheme.t}) -> t end structure TypeStr: sig type t datatype node = - Datatype of {cons: Cons.t, - tycon: Tycon.t} + Datatype of {tycon: Tycon.t, + cons: Cons.t, + repl: bool} | Scheme of Scheme.t - | Tycon of Tycon.t + | Tycon of {eq: bool, + tycon: Tycon.t} + val abs: t -> t val admitsEquality: t -> AdmitsEquality.t val apply: t * Type.t vector -> Type.t val cons: t -> Cons.t - val data: Tycon.t * Kind.t * Cons.t -> t - val def: Scheme.t * Kind.t -> t + val data: Tycon.t * Cons.t * bool -> t + val def: Scheme.t -> t val kind: t -> Kind.t val layout: t -> Layout.t val node: t -> node - val toTyconOpt: t -> Tycon.t option (* NONE on Scheme *) - val tycon: Tycon.t * Kind.t -> t + val pushSpec: t * Region.t -> unit + val repl: t -> t + val toTyconOpt: t * {expand: bool} -> Tycon.t option (* NONE on Scheme *) + val tycon: Tycon.t * bool -> t + val specs: t * Region.t -> Region.t list + val share: - (t * Region.t * (unit -> Layout.t)) - * (t * Region.t * (unit -> Layout.t)) - * Time.t + {layoutPrettyEnvTycon: EnvTycon.t -> Layout.t, + layoutPrettyFlexTycon: FlexibleTycon.t -> Layout.t, + region: Region.t, + time: Time.t, + ty1: {name: unit -> Layout.t, + region: Region.t, + spec: Region.t, + tyStr: t}, + ty2: {name: unit -> Layout.t, + region: Region.t, + spec: Region.t, + tyStr: t}} + -> unit + val wheree: + {layoutPrettyEnvTycon: EnvTycon.t -> Layout.t, + layoutPrettyFlexTycon: FlexibleTycon.t -> Layout.t, + realization: t, + region: Region.t, + time: Time.t, + ty: {name: unit -> Layout.t, + region: Region.t, + spec: Region.t, + tyStr: t}} -> unit - val wheree: t * Region.t * (unit -> Layout.t) * Time.t * t -> unit end sharing type FlexibleTycon.typeStr = TypeStr.t structure TyconMap: @@ -155,7 +207,10 @@ datatype 'a t = T of {strs: (Ast.Strid.t * 'a t) array, types: (Ast.Tycon.t * 'a) array} + val empty: unit -> 'a t val layout: ('a -> Layout.t) -> 'a t -> Layout.t + val peekStrid: 'a t * Ast.Strid.t -> 'a t option + val peekTycon: 'a t * Ast.Tycon.t ->'a option end type t @@ -168,10 +223,14 @@ val empty: t val flexibleTycons: t -> FlexibleTycon.t TyconMap.t val layout: t -> Layout.t + val lookupLongstrid: + t * Ast.Longstrid.t * Region.t * {prefix: Ast.Strid.t list} + -> t option val lookupLongtycon: t * Ast.Longtycon.t * Region.t * {prefix: Ast.Strid.t list} - -> TypeStr.t option + -> (Ast.Tycon.t * TypeStr.t) option val new: {isClosed: bool, + original: t option, strs: (Ast.Strid.t * t) array, types: (Ast.Tycon.t * TypeStr.t) array, vals: (Ast.Vid.t * (Status.t * Scheme.t)) array} -> t @@ -181,8 +240,14 @@ Found of 'a | UndefinedStructure of Ast.Strid.t list val peekStrids: t * Ast.Strid.t list -> t peekResult - val peekTycon: t * Ast.Tycon.t -> TypeStr.t option + val peekTycon: t * Ast.Tycon.t -> (Ast.Tycon.t * TypeStr.t) option val plist: t -> PropertyList.t - val renameTycons: (unit -> unit) ref - val share: t * Ast.Longstrid.t * t * Ast.Longstrid.t * Time.t -> unit + val share: + {layoutPrettyEnvTycon: EnvTycon.t -> Layout.t, + layoutPrettyFlexTycon: FlexibleTycon.t -> Layout.t, + I1: t, long1: Ast.Longstrid.t, + I2: t, long2: Ast.Longstrid.t, + time: Time.t, + region: Region.t} + -> unit end diff -Nru mlton-20130715/mlton/elaborate/precedence-parse.fun mlton-20210117+dfsg/mlton/elaborate/precedence-parse.fun --- mlton-20130715/mlton/elaborate/precedence-parse.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/precedence-parse.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,4 +1,4 @@ -(* Heavily modified from the SML/NJ sources by sweeks@research.nj.nec.com. *) +(* Heavily modified from the SML/NJ sources. *) (* Copyright 1996 by AT&T Bell Laboratories *) (* precedence.sml *) @@ -17,6 +17,54 @@ structure Vid = Vid end +structure Exp = +struct + open Exp + fun apply {func, arg} = Exp.app (func, arg) + fun applyInfix {func, argl, argr} = + let + val arg = Exp.tuple (Vector.new2 (argl, argr)) + in + Exp.makeRegion (Exp.App (func, arg), + Exp.region arg) + end +end + +structure Pat = +struct + open Pat + local + fun finishApply {func, arg, region, ctxt} = + case Pat.node func of + Pat.Var {name, ...} => + Pat.makeRegion (Pat.App (Longvid.toLongcon name, arg), + region) + | _ => + let + val () = + Control.error + (region, + Layout.str "non-constructor applied to argument in pattern", + ctxt ()) + in + Pat.wild + end + in + fun apply ctxt {func, arg} = + finishApply {func = func, arg = arg, + region = Region.append (Pat.region func, Pat.region arg), + ctxt = ctxt} + fun applyInfix ctxt {func, argl, argr} = + let + val arg = Pat.tuple (Vector.new2 (argl, argr)) + in + finishApply {func = func, arg = arg, + region = Pat.region arg, + ctxt = ctxt} + end + end +end + structure Fixval = struct datatype t = Nonfix | Infix of int * int @@ -57,45 +105,46 @@ | NONf of 'a * 'a precStack | NILf -fun 'a parse {apply: 'a * 'a -> 'a, +fun 'a parse {apply: {func: 'a, arg: 'a} -> 'a, + applyInfix: {func: 'a, argl: 'a, argr: 'a} -> 'a, + ctxt: unit -> Layout.t, fixval: 'a -> Fixval.t, items: 'a vector, - lay: unit -> Layout.t, name: string, region: 'a -> Region.t, - toString: 'a -> string, - tuple: 'a vector -> 'a}: 'a = + toString: 'a -> string}: 'a = let fun error (r: Region.t, msg: string) = - Control.error (r, Layout.str msg, lay ()) - fun ensureNONf ((e, f), p) = + Control.error (r, Layout.str msg, ctxt ()) + fun ensureNONf ((e, f), p, start) = let val _ = case f of Fixval.Nonfix => () | _ => - Control.error + error (region e, - Layout.str (concat ["identifier must be used infix: ", - toString e]), - lay ()) + concat [if start + then name ^ " starts with infix identifier: " + else "identifier must be used infix: ", + toString e]) in NONf (e, p) end - fun start token = ensureNONf (token, NILf) + fun start token = ensureNONf (token, NILf, true) (* parse an expression *) fun parse (stack: 'a precStack, (item: 'a, fixval: Fixval.t)) = case (stack, (item, fixval)) of - (NONf (e, r), (e', Fixval.Nonfix)) => NONf (apply (e, e'), r) - | (p as INf _, token) => ensureNONf (token, p) + (NONf (e, r), (e', Fixval.Nonfix)) => NONf (apply {func = e, arg = e'}, r) + | (p as INf _, token) => ensureNONf (token, p, false) | (p as NONf (e1, INf (bp, e2, NONf (e3, r))), (e4, f as Fixval.Infix (lbp, rbp))) => if lbp > bp then INf (rbp, e4, p) else (if lbp = bp - then error (region e1, - "operators of same precedence with mixed associativity") + then error (Region.append (region e2, region e4), + concat ["infix identifiers with equal precedence but mixed associativity: ", toString e2, ", ", toString e4]) else (); - parse (NONf (apply (e2, tuple (Vector.new2 (e3, e1))), + parse (NONf (applyInfix {func = e2, argl = e3, argr = e1}, r), (e4, f))) | (p as NONf _, (e', Fixval.Infix (_, rbp))) => INf (rbp, e', p) @@ -104,12 +153,12 @@ fun finish stack = case stack of NONf (e1, INf (_, e2, NONf (e3, r))) => - finish (NONf (apply (e2, tuple (Vector.new2 (e3, e1))), + finish (NONf (applyInfix {func = e2, argl = e3, argr = e1}, r)) | NONf (e1, NILf) => e1 | INf (_, e1, NONf (e2, p)) => - (error (region e1, concat [name, " ends with infix identifier"]) - ; finish (NONf (apply (e2, e1), p))) + (error (region e1, concat [name, " ends with infix identifier: ", toString e1]) + ; finish (NONf (apply {func = e2, arg = e1}, p))) | NILf => Error.bug "PrecedenceParse.parse.finish: NILf" | _ => Error.bug "PrecedenceParse.parse.finish" fun getfix x = (x, fixval x) @@ -119,7 +168,7 @@ Error.bug "PrecedenceParse.parse" else let - val item = Vector.sub (items, 0) + val item = Vector.first items in finish (Vector.foldFrom (items, 1, start (getfix item), fn (item, state) => @@ -127,35 +176,15 @@ end end -fun parsePat (ps, E, lay) = - let - fun apply (p1, p2) = - case Pat.node p1 of - Pat.Var {name, ...} => - Pat.makeRegion (Pat.App (Longvid.toLongcon name, p2), - Region.append (Pat.region p1, - Pat.region p2)) - | _ => - let - open Layout - val () = - Control.error - (Pat.region p1, - str "non-constructor applied to argument in pattern", - seq [str "in: ", Pat.layout p1, str " ", Pat.layout p2]) - in - Pat.wild - end - in - parse {apply = apply, - fixval = fn p => Fixval.makePat (p, E), - items = ps, - lay = lay, - name = "pattern", - region = Pat.region, - toString = Layout.toString o Pat.layout, - tuple = Pat.tuple} - end +fun parsePat (ps, E, ctxt) = + parse {apply = Pat.apply ctxt, + applyInfix = Pat.applyInfix ctxt, + ctxt = ctxt, + fixval = fn p => Fixval.makePat (p, E), + items = ps, + name = "pattern", + region = Pat.region, + toString = Layout.toString o Pat.layout} val parsePat = Trace.trace ("PrecedenceParse.parsePat", @@ -163,15 +192,15 @@ Ast.Pat.layout) parsePat -fun parseExp (es, E, lay) = - parse {apply = Exp.app, +fun parseExp (es, E, ctxt) = + parse {apply = Exp.apply, + applyInfix = Exp.applyInfix, + ctxt = ctxt, fixval = fn e => Fixval.makeExp (e, E), items = es, - lay = lay, name = "expression", region = Exp.region, - toString = Layout.toString o Exp.layout, - tuple = Exp.tuple} + toString = Layout.toString o Exp.layout} val parseExp = Trace.trace ("PrecedenceParse.parseExp", @@ -183,55 +212,152 @@ (* parseClause *) (*---------------------------------------------------*) -fun parseClause (pats: Pat.t vector, E: Env.t, region, lay) = +structure ClausePat = + struct + datatype t = + Apply of {func: t, arg: t} + | ApplyInfix of {func: t, argl: t, argr: t} + | Pat of Pat.t + + fun region p = + case p of + Apply {func, arg} => + Region.append (region func, region arg) + | ApplyInfix {argl, argr, ...} => + Region.append (region argl, region argr) + | Pat p => Pat.region p + + local + fun toPat p = + case p of + Apply {func, arg} => + let + val func = toPat func + val arg = toPat arg + in + Pat.makeRegion + (Pat.FlatApp (Vector.new2 (func, arg)), + Region.append (Pat.region func, Pat.region arg)) + end + | ApplyInfix {func, argl, argr} => + let + val func = toPat func + val argl = toPat argl + val argr = toPat argr + in + Pat.makeRegion + (Pat.FlatApp (Vector.new3 (argl, func, argr)), + Region.append (Pat.region argl, Pat.region argr)) + end + | Pat p => p + in + val layout = Pat.layout o toPat + end + end + +fun parseClausePats (ps, E, ctxt) = + parse {apply = ClausePat.Apply, + applyInfix = ClausePat.ApplyInfix, + ctxt = ctxt, + fixval = fn ClausePat.Pat p => Fixval.makePat (p, E) + | _ => Fixval.Nonfix, + items = Vector.map (ps, ClausePat.Pat), + name = "function clause", + region = ClausePat.region, + toString = Layout.toString o ClausePat.layout} + +fun parseClause (pats: Pat.t vector, E: Env.t, ctxt) = let - val pats = Vector.toList pats - fun error msg = - (Control.error (region, msg, lay ()) - ; {func = Ast.Var.bogus, - args = Vector.new0 ()}) + fun error (region, msg) = + Control.error (region, msg, ctxt ()) + fun improper region = + error + (region, Layout.str "function clause with improper infix pattern") + + fun toPat p= + case p of + ClausePat.Pat p => p + | ClausePat.Apply {func, arg} => + Pat.apply ctxt + {func = toPat func, + arg = toPat arg} + | ClausePat.ApplyInfix {func, argl, argr} => + Pat.applyInfix ctxt + {func = toPat func, + argl = toPat argl, + argr = toPat argr} + fun toPatTop p = + case p of + ClausePat.Pat p => p + | _ => (improper (ClausePat.region p) + ; toPat p) + fun toPatList p = + let + fun loop (p, args) = + case p of + ClausePat.Apply {func, arg} => + loop (func, (toPatTop arg)::args) + | _ => (toPatTop p)::args + in + loop (p, []) + end + fun done (func: Pat.t, args: Pat.t list) = let - fun illegal () = - error (Layout.seq [Layout.str "illegal function symbol: ", - Pat.layout func]) - in - case Pat.node func of - Pat.Var {name, ...} => - (case Longvid.split name of - ([], x) => {func = Vid.toVar x, - args = Vector.fromList args} - | _ => illegal ()) - | _ => illegal () - end - val tuple = Pat.tuple o Vector.new2 - fun parse (ps : Pat.t list) = - case ps of - p :: rest => - let - fun continue () = - case rest of - [] => error (Layout.str "function with no arguments") - | _ => done (p, rest) - in - case Pat.node p of - Pat.FlatApp ps => - if 3 = Vector.length ps - then - let - fun p i = Vector.sub (ps, i) - in done (p 1, tuple (p 0, p 2) :: rest) - end - else continue () - | _ => continue () - end - | _ => Error.bug "PrecedenceParse.parseClause: empty" + fun illegalName () = + (error (Pat.region func, + Layout.seq [Layout.str "function clause with illegal name: ", + Pat.layout func]) + ; Ast.Var.bogus) + val func = + case Pat.node func of + Pat.Var {name, ...} => + (case Longvid.split name of + ([], x) => Vid.toVar x + | _ => illegalName ()) + | _ => illegalName () + val args = Vector.fromList args + val _ = + if Vector.isEmpty args + then error (Region.append (Pat.region (Vector.sub (pats, 0)), + Pat.region (Vector.last pats)), + Layout.str "function clause with no arguments") + else () + in + {func = func, args = args} + end + fun doneApplyInfix ({func, argl, argr}, rest) = + let + val func = toPatTop func + val argl = toPatTop argl + val argr = toPatTop argr + in + done (func, (Pat.tuple (Vector.new2 (argl, argr)))::rest) + end in - case pats of - [a, b, c] => (case Fixval.makePat (b, E) of - Fixval.Nonfix => parse pats - | _ => done (b, [tuple (a, c)])) - | _ => parse pats + case parseClausePats (pats, E, ctxt) of + ClausePat.ApplyInfix func_argl_argr => + doneApplyInfix (func_argl_argr, []) + | p => + (case toPatList p of + [] => Error.bug "PrecedenceParse.parseClause: empty" + | p::rest => + let + val improper = fn () => + (improper (Pat.region p) + ; done (Pat.var Ast.Var.bogus, rest)) + in + case Pat.node p of + Pat.Paren p' => + (case Pat.node p' of + Pat.FlatApp pats => + (case parseClausePats (pats, E, ctxt) of + ClausePat.ApplyInfix func_argl_argr => + doneApplyInfix (func_argl_argr, rest) + | _ => improper ()) + | _ => improper ()) + | _ => done (p, rest) + end) end end diff -Nru mlton-20130715/mlton/elaborate/precedence-parse.sig mlton-20210117+dfsg/mlton/elaborate/precedence-parse.sig --- mlton-20130715/mlton/elaborate/precedence-parse.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/precedence-parse.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -19,7 +19,7 @@ include PRECEDENCE_PARSE_STRUCTS val parseClause: - Ast.Pat.t vector * Env.t * Region.t * (unit -> Layout.t) + Ast.Pat.t vector * Env.t * (unit -> Layout.t) -> {args: Ast.Pat.t vector, func: Ast.Var.t} val parseExp: Ast.Exp.t vector * Env.t * (unit -> Layout.t) -> Ast.Exp.t diff -Nru mlton-20130715/mlton/elaborate/scope.fun mlton-20210117+dfsg/mlton/elaborate/scope.fun --- mlton-20130715/mlton/elaborate/scope.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/scope.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,46 +13,30 @@ open S open Ast -structure Tyvars = UnorderedSet (UseName (Tyvar)) -structure Env = +structure Tyvars = UnorderedSet (Tyvar) +structure Tyvars = struct - structure Env = MonoEnv (structure Domain = UseName (Tyvar) - structure Range = Tyvar) - open Env - - (* rename (env, tyvars) extends env by mapping each tyvar to - * a new tyvar (with the same equality property). It returns - * the extended environment and the list of new tyvars. - *) - fun rename (env: t, tyvars: Tyvar.t vector): t * Tyvar.t vector = - let - val (tyvars, env) = - Vector.mapAndFold - (tyvars, env, fn (a, env) => - let - val a' = Tyvar.newLike a - in - (a', extend (env, a, a')) - end) - in - (env, tyvars) - end + open Tyvars + val fromVector = fn v => + Vector.fold (v, empty, fn (x, s) => add (s, x)) end fun ('down, 'up) processDec (d: Dec.t, {(* bindType is used at datatype and type declarations. *) bindType: ('down * Tyvar.t vector - -> 'down * Tyvar.t vector * ('up -> 'up)), + -> 'down * ('up -> 'up)), (* bindFunVal is used at fun, overload, and val declarations. *) - bindFunVal: ('down * Tyvar.t vector + bindFunVal: ('down * Tyvar.t vector * Region.t -> ('down * ('up -> Tyvar.t vector * 'up))), combineUp: 'up * 'up -> 'up, initDown: 'down, initUp: 'up, - tyvar: Tyvar.t * 'down -> Tyvar.t * 'up + tyvar: Tyvar.t * 'down -> 'up }): Dec.t * 'up = let + fun visits (xs: 'a vector, visitX: 'a -> 'up): 'up = + Vector.fold (xs, initUp, fn (x, u) => combineUp (u, visitX x)) fun loops (xs: 'a vector, loopX: 'a -> 'a * 'up): 'a vector * 'up = Vector.mapAndFold (xs, initUp, fn (x, u) => let @@ -59,199 +44,124 @@ in (x, combineUp (u, u')) end) - fun loopTy (t: Type.t, d: 'down): Type.t * 'up = + fun visitTy (t: Type.t, d: 'down): 'up = let - fun loop (t: Type.t): Type.t * 'up = - let - datatype z = datatype Type.node - val (n, u) = - case Type.node t of - Con (c, ts) => - let - val (ts, u) = loops (ts, loop) - in - (Con (c, ts), u) - end - | Record r => - let - val (r, u) = SortedRecord.change (r, fn ts => - loops (ts, loop)) - in - (Record r, u) - end - | Var a => - let - val (a, u) = tyvar (a, d) - in - (Var a, u) - end - in - (Type.makeRegion (n, Type.region t), u) - end + datatype z = datatype Type.node + fun visit (t: Type.t): 'up = + case Type.node t of + Con (_, ts) => visits (ts, visit) + | Paren t => visit t + | Record r => + Record.fold + (r, initUp, fn ((_, t), u) => + combineUp (u, visit t)) + | Var a => tyvar (a, d) in - loop t + visit t end - fun loopTyOpt (to: Type.t option, d: 'down): Type.t option * 'up = + fun visitTyOpt (to: Type.t option, d: 'down): 'up = case to of - NONE => (NONE, initUp) - | SOME t => - let - val (t, u) = loopTy (t, d) - in - (SOME t, u) - end - fun loopTypBind (tb: TypBind.t, d: 'down): TypBind.t * 'up = + NONE => initUp + | SOME t => visitTy (t, d) + fun visitTypBind (tb: TypBind.t, d: 'down): 'up = let val TypBind.T tbs = TypBind.node tb - val (tbs, u) = - loops (tbs, fn {def, tycon, tyvars} => - let - val (d, tyvars, finish) = bindType (d, tyvars) - val (def, u) = loopTy (def, d) - in - ({def = def, - tycon = tycon, - tyvars = tyvars}, - finish u) - end) + val u = + visits + (tbs, fn {def, tyvars, ...} => + let + val (d, finish) = bindType (d, tyvars) + in + finish (visitTy (def, d)) + end) in - (TypBind.makeRegion (TypBind.T tbs, TypBind.region tb), - u) + u end - fun loopDatBind (db: DatBind.t, d: 'down): DatBind.t * 'up = + fun visitDatBind (db: DatBind.t, d: 'down): 'up = let val DatBind.T {datatypes, withtypes} = DatBind.node db - val (datatypes, u) = - loops - (datatypes, fn {cons, tycon, tyvars} => + val u = + visits + (datatypes, fn {cons, tyvars, ...} => let - val (d, tyvars, up) = bindType (d, tyvars) - val (cons, u) = - loops (cons, fn (con, arg) => - let - val (arg, u) = loopTyOpt (arg, d) - in - ((con, arg), u) - end) + val (d, finish) = bindType (d, tyvars) in - ({cons = cons, tycon = tycon, tyvars = tyvars}, up u) + finish (visits (cons, fn (_, arg) => + visitTyOpt (arg, d))) end) - val (withtypes, u') = loopTypBind (withtypes, d) + val u' = visitTypBind (withtypes, d) in - (DatBind.makeRegion (DatBind.T {datatypes = datatypes, - withtypes = withtypes}, - DatBind.region db), - combineUp (u, u')) + combineUp (u, u') end - fun loopPat (p: Pat.t, d: 'down): Pat.t * 'up = + fun visitPat (p: Pat.t, d: 'down): 'up = let - fun loop (p: Pat.t): Pat.t * 'up = - let - fun doit n = Pat.makeRegion (n, Pat.region p) - fun do1 ((a, u), f) = (doit (f a), u) - fun do2 ((a1, u1), (a2, u2), f) = - (doit (f (a1, a2)), combineUp (u1, u2)) - datatype z = datatype Pat.node - in - case Pat.node p of - App (c, p) => do1 (loop p, fn p => App (c, p)) - | Const _ => (p, initUp) - | Constraint (p, t) => - do2 (loop p, loopTy (t, d), Constraint) - | FlatApp ps => do1 (loops (ps, loop), FlatApp) - | Layered {constraint, fixop, pat, var} => - do2 (loopTyOpt (constraint, d), loop pat, - fn (constraint, pat) => - Layered {constraint = constraint, - fixop = fixop, - pat = pat, - var = var}) - | List ps => do1 (loops (ps, loop), List) - | Record {flexible, items} => - let - val (items, u) = - Vector.mapAndFold - (items, initUp, fn ((f, i), u) => - let - datatype z = datatype Pat.Item.t - val (i, u') = - case i of - Field p => - let - val (p, u) = loop p - in - (Field p, u) - end - | Vid (v, to, po) => - let - val (to, u) = loopTyOpt (to, d) - val (po, u') = loopOpt po - in - (Vid (v, to, po), - combineUp (u, u')) - end - in - ((f, i), combineUp (u, u')) - end) - in - (doit (Record {flexible = flexible, - items = items}), - u) - end - | Tuple ps => do1 (loops (ps, loop), Tuple) - | Var _ => (p, initUp) - | Wild => (p, initUp) - - end - and loopOpt opt = - case opt of - NONE => - (NONE, initUp) - | SOME p => - let - val (p, u) = loop p - in - (SOME p, u) - end + datatype z = datatype Pat.node + fun visit (p: Pat.t): 'up = + (case Pat.node p of + App (_, p) => visit p + | Const _ => initUp + | Constraint (p, t) => + combineUp (visit p, visitTy (t, d)) + | FlatApp ps => visits (ps, visit) + | Layered {constraint, pat, ...} => + combineUp (visitTyOpt (constraint, d), visit pat) + | List ps => visits (ps, visit) + | Or ps => visits (ps, visit) + | Paren p => visit p + | Record {items, ...} => + Vector.fold + (items, initUp, fn ((_, _, i), u) => + let + datatype z = datatype Pat.Item.t + val u' = + case i of + Field p => visit p + | Vid (_, to, po) => + let + val u = visitTyOpt (to, d) + val u' = visitOpt po + in + combineUp (u, u') + end + in + combineUp (u, u') + end) + | Tuple ps => visits (ps, visit) + | Var _ => initUp + | Vector ps => visits (ps, visit) + | Wild => initUp) + and visitOpt opt = + (case opt of + NONE => initUp + | SOME p => visit p) in - loop p + visit p end - fun loopPrimKind (kind: PrimKind.t, d: 'down): PrimKind.t * 'up = + fun visitPrimKind (kind: PrimKind.t, d: 'down): 'up = let datatype z = datatype PrimKind.t - fun do1 ((a, u), f) = (f a, u) in case kind of - Address {attributes, name, ty} => - do1 (loopTy (ty, d), fn ty => - Address {attributes = attributes, name = name, ty = ty}) - | BuildConst {name, ty} => - do1 (loopTy (ty, d), fn ty => - BuildConst {name = name, ty = ty}) - | CommandLineConst {name, ty, value} => - do1 (loopTy (ty, d), fn ty => - CommandLineConst {name = name, ty = ty, value = value}) - | Const {name, ty} => - do1 (loopTy (ty, d), fn ty => - Const {name = name, ty = ty}) - | Export {attributes, name, ty} => - do1 (loopTy (ty, d), fn ty => - Export {attributes = attributes, name = name, ty = ty}) - | IImport {attributes, ty} => - do1 (loopTy (ty, d), fn ty => - IImport {attributes = attributes, ty = ty}) - | Import {attributes, name, ty} => - do1 (loopTy (ty, d), fn ty => - Import {attributes = attributes, name = name, ty = ty}) + Address {ty, ...} => + visitTy (ty, d) + | BuildConst {ty, ...} => + visitTy (ty, d) + | CommandLineConst {ty, ...} => + visitTy (ty, d) + | Const {ty, ...} => + visitTy (ty, d) + | Export {ty, ...} => + visitTy (ty, d) + | IImport {ty, ...} => + visitTy (ty, d) + | Import {ty, ...} => + visitTy (ty, d) | ISymbol {ty} => - do1 (loopTy (ty, d), fn ty => - ISymbol {ty = ty}) - | Prim {name, ty} => - do1 (loopTy (ty, d), fn ty => - Prim {name = name, ty = ty}) - | Symbol {attributes, name, ty} => - do1 (loopTy (ty, d), fn ty => - Symbol {attributes = attributes, name = name, ty = ty}) + visitTy (ty, d) + | Prim {ty, ...} => + visitTy (ty, d) + | Symbol {ty, ...} => + visitTy (ty, d) end fun loopDec (d: Dec.t, down: 'down): Dec.t * 'up = let @@ -273,68 +183,61 @@ Abstype {body, datBind} => let val (body, u) = loopDec (body, down) - val (db, u') = loopDatBind (datBind, down) + val u' = visitDatBind (datBind, down) in - (doit (Abstype {body = body, datBind = db}), + (doit (Abstype {body = body, datBind = datBind}), combineUp (u, u')) end | Datatype rhs => let datatype z = datatype DatatypeRhs.node - val (rhs, u) = + val u = case DatatypeRhs.node rhs of - DatBind db => - let - val (db, u) = loopDatBind (db, down) - in - (DatatypeRhs.makeRegion - (DatBind db, DatatypeRhs.region rhs), - u) - end - | Repl _ => (rhs, initUp) + DatBind db => visitDatBind (db, down) + | Repl _ => initUp in - (doit (Datatype rhs), u) + (d, u) end + | DoDec e => + do1 (loopExp (e, down), DoDec) | Exception ebs => let - val (ebs, u) = - loops (ebs, fn (c, rhs) => - let - datatype z = datatype EbRhs.node - val (rhs, u) = - case EbRhs.node rhs of - Def _ => (rhs, initUp) - | Gen to => - let - val (to, u) = loopTyOpt (to, down) - in - (EbRhs.makeRegion - (Gen to, EbRhs.region rhs), - u) - end - in - ((c, rhs), u) - end) + val u = + visits (ebs, fn (_, rhs) => + let + datatype z = datatype EbRhs.node + val u = + case EbRhs.node rhs of + Def _ => initUp + | Gen to => + let + val u = visitTyOpt (to, down) + in + u + end + in + u + end) in - (doit (Exception ebs), u) + (d, u) end - | Fix _ => (d, initUp) - | Fun (tyvars, decs) => + | Fix _ => empty () + | Fun {tyvars, fbs} => let - val (down, finish) = bindFunVal (down, tyvars) - val (decs, u) = - loops (decs, fn clauses => + val (down, finish) = bindFunVal (down, tyvars, Dec.region d) + val (fbs, u) = + loops (fbs, fn clauses => let val (clauses, u) = loops (clauses, fn {body, pats, resultType} => let val (body, u) = loopExp (body, down) - val (pats, u') = - loops (pats, fn p => - loopPat (p, down)) - val (resultType, u'') = - loopTyOpt (resultType, down) + val u' = + visits (pats, fn p => + visitPat (p, down)) + val u'' = + visitTyOpt (resultType, down) in ({body = body, pats = pats, @@ -346,29 +249,34 @@ end) val (tyvars, u) = finish u in - (doit (Fun (tyvars, decs)), u) + (doit (Fun {tyvars = tyvars, fbs = fbs}), u) end | Local (d, d') => do2 (loopDec (d, down), loopDec (d', down), Local) | Open _ => empty () | Overload (i, x, tyvars, ty, ys) => let - val (down, finish) = bindFunVal (down, tyvars) - val (ty, up) = loopTy (ty, down) + val (down, finish) = bindFunVal (down, tyvars, Dec.region d) + val up = visitTy (ty, down) val (tyvars, up) = finish up in (doit (Overload (i, x, tyvars, ty, ys)), up) end | SeqDec ds => doVec (ds, SeqDec) - | Type tb => do1 (loopTypBind (tb, down), Type) + | Type tb => + let + val u = visitTypBind (tb, down) + in + (d, u) + end | Val {rvbs, tyvars, vbs} => let - val (down, finish) = bindFunVal (down, tyvars) + val (down, finish) = bindFunVal (down, tyvars, Dec.region d) val (rvbs, u) = loops (rvbs, fn {match, pat} => let val (match, u) = loopMatch (match, down) - val (pat, u') = loopPat (pat, down) + val u' = visitPat (pat, down) in ({match = match, pat = pat}, @@ -378,7 +286,7 @@ loops (vbs, fn {exp, pat} => let val (exp, u) = loopExp (exp, down) - val (pat, u') = loopPat (pat, down) + val u' = visitPat (pat, down) in ({exp = exp, pat = pat}, @@ -419,7 +327,14 @@ | App (e1, e2) => do2 (loop e1, loop e2, App) | Case (e, m) => do2 (loop e, loopMatch m, Case) | Const _ => empty () - | Constraint (e, t) => do2 (loop e, loopTy (t, d), Constraint) + | Constraint (e, t) => + let + val (e, u) = loop e + val u' = visitTy (t, d) + in + (doit (Constraint (e, t)), + combineUp (u, u')) + end | FlatApp es => doVec (es, FlatApp) | Fn m => do1 (loopMatch m, Fn) | Handle (e, m) => do2 (loop e, loopMatch m, Handle) @@ -427,18 +342,25 @@ | Let (dec, e) => do2 (loopDec (dec, d), loop e, Let) | List ts => doVec (ts, List) | Orelse (e1, e2) => do2 (loop e1, loop e2, Orelse) - | Prim kind => do1 (loopPrimKind (kind, d), Prim) + | Paren e => do1 (loop e, Paren) + | Prim kind => (e, visitPrimKind (kind, d)) | Raise exn => do1 (loop exn, Raise) | Record r => let - val (r, u) = Record.change (r, fn es => - loops (es, loop)) + val (r, u) = + Record.change + (r, fn res => + loops (res, fn (r, e) => + let val (e', u) = loop e + in ((r, e'), u) + end)) in (doit (Record r), u) end | Selector _ => empty () | Seq es => doVec (es, Seq) | Var _ => empty () + | Vector vs => doVec (vs, Vector) | While {expr, test} => do2 (loop expr, loop test, fn (expr, test) => While {expr = expr, test = test}) @@ -452,7 +374,7 @@ val (rules, u) = loops (rules, fn (p, e) => let - val (p, u) = loopPat (p, d) + val u = visitPat (p, d) val (e, u') = loopExp (e, d) in ((p, e), combineUp (u, u')) @@ -467,125 +389,88 @@ fun scope (dec: Dec.t): Dec.t = let - fun bindFunVal (env, tyvars) = + fun bindFunVal ((), tyvars, regionDec) = let - val (env, tyvars) = Env.rename (env, tyvars) fun finish {free, mayNotBind} = let - val bound = - Vector.fromList - (Tyvars.toList - (Tyvars.+ (free, Tyvars.fromList (Vector.toList tyvars)))) + val bound = Tyvars.+ (free, Tyvars.fromVector tyvars) val mayNotBind = List.keepAll (mayNotBind, fn a => - not (Vector.exists (bound, fn a' => - Tyvar.sameName (a, a'))) + not (Tyvars.contains (bound, a)) orelse let open Layout val _ = Control.error (Tyvar.region a, - seq [str "type variable ", - Tyvar.layout a, - str " scoped at an outer declaration"], - empty) + seq [str "type variable scoped at an outer declaration: ", + Tyvar.layout a], + seq [str "scoped at: ", Region.layout regionDec]) in false end) + val bound = Vector.fromList (Tyvars.toList bound) in (bound, {free = Tyvars.empty, mayNotBind = List.append (Vector.toList tyvars, mayNotBind)}) end in - (env, finish) + ((), finish) end - fun bindType (env, tyvars) = + fun bindType ((), tyvars) = let - val (env, tyvars) = Env.rename (env, tyvars) fun finish {free, mayNotBind = _} = - {free = Tyvars.- (free, Tyvars.fromList (Vector.toList tyvars)), + {free = Tyvars.- (free, Tyvars.fromVector tyvars), mayNotBind = []} in - (env, tyvars, finish) - end - fun tyvar (a, env) = - let - val a = - case Env.peek (env, a) of - NONE => a - | SOME a => a - in - (a, {free = Tyvars.singleton a, - mayNotBind = []}) + ((), finish) end + fun tyvar (a, ()) = + {free = Tyvars.singleton a, + mayNotBind = []} fun combineUp ({free = f, mayNotBind = m}, {free = f', mayNotBind = m'}) = {free = Tyvars.+ (f, f'), mayNotBind = List.append (m, m')} - val (dec, {free = unguarded, ...}) = + val (dec, _) = processDec (dec, {bindFunVal = bindFunVal, bindType = bindType, combineUp = combineUp, - initDown = Env.empty, + initDown = (), initUp = {free = Tyvars.empty, mayNotBind = []}, tyvar = tyvar}) - in - if Tyvars.isEmpty unguarded - then - let - (* Walk down and bind a tyvar as soon as you sees it, removing - * all lower binding occurrences of the tyvar. Also, rename all - * lower free occurrences of the tyvar to be the same as the - * binding occurrence (so that they can share info). - *) - fun bindFunVal (env, tyvars: Tyvar.t vector) = - let - val domain = Env.domain env - val (env, tyvars) = - Env.rename - (env, - Vector.keepAll - (tyvars, fn a => - not (List.exists - (domain, fn a' => Tyvar.sameName (a, a'))))) - in - (env, fn () => (tyvars, ())) - end - fun bindType (env, tyvars) = - let - val (env, tyvars) = Env.rename (env, tyvars) - in - (env, tyvars, fn () => ()) - end - fun tyvar (a, env) = (Env.lookup (env, a), ()) - val (dec, ()) = - processDec (dec, {bindFunVal = bindFunVal, - bindType = bindType, - combineUp = fn ((), ()) => (), - initDown = Env.empty, - initUp = (), - tyvar = tyvar}) - in - dec - end - else - let - val _ = - List.foreach - (Tyvars.toList unguarded, fn a => - let - open Layout - in - Control.error (Tyvar.region a, - seq [str "undefined type variable: ", - Tyvar.layout a], - empty) - end) + + (* Walk down and bind a tyvar as soon as you see it, removing + * all lower binding occurrences of the tyvar. + *) + fun bindFunVal (bound, tyvars: Tyvar.t vector, _) = + let + val tyvars = + Vector.keepAll + (tyvars, fn a => + not (Tyvars.contains (bound, a))) + val bound = + Tyvars.+ (bound, Tyvars.fromVector tyvars) + in + (bound, fn () => (tyvars, ())) + end + fun bindType (bound, tyvars) = + let + val bound = Tyvars.+ (bound, Tyvars.fromVector tyvars) in - dec + (bound, fn () => ()) end + fun tyvar (_, _) = () + val (dec, ()) = + processDec (dec, {bindFunVal = bindFunVal, + bindType = bindType, + combineUp = fn ((), ()) => (), + initDown = Tyvars.empty, + initUp = (), + tyvar = tyvar}) + in + dec end val scope = Trace.trace ("Scope.scope", Dec.layout, Dec.layout) scope diff -Nru mlton-20130715/mlton/elaborate/scope.sig mlton-20210117+dfsg/mlton/elaborate/scope.sig --- mlton-20130715/mlton/elaborate/scope.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/scope.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/elaborate/sources.cm mlton-20210117+dfsg/mlton/elaborate/sources.cm --- mlton-20130715/mlton/elaborate/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -1,24 +1,24 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2020 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library -signature ELABORATE functor Elaborate functor TypeEnv is +../../lib/mlton/sources.cm ../ast/sources.cm ../atoms/sources.cm ../control/sources.cm ../core-ml/sources.cm -../../lib/mlton/sources.cm decs.sig decs.fun diff -Nru mlton-20130715/mlton/elaborate/sources.mlb mlton-20210117+dfsg/mlton/elaborate/sources.mlb --- mlton-20130715/mlton/elaborate/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2020 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -38,7 +39,6 @@ elaborate.sig elaborate.fun in - signature CONST_TYPE functor Elaborate functor TypeEnv end diff -Nru mlton-20130715/mlton/elaborate/type-env.fun mlton-20210117+dfsg/mlton/elaborate/type-env.fun --- mlton-20130715/mlton/elaborate/type-env.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/type-env.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009-2010,2012 Matthew Fluet. +(* Copyright (C) 2009-2010,2012,2017 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,7 +12,33 @@ open S -structure AdmitsEquality = Tycon.AdmitsEquality +structure Layout = + struct + open Layout + val bracket = fn l => + seq [str "[", l, str "]"] + end +local + open Layout +in + val seq = seq + val str = str +end + +local + open LayoutPretty +in + val bracket = bracket + val dontCare = dontCare + val simple = simple +end + +local + open Tycon +in + structure AdmitsEquality = AdmitsEquality + structure Kind = Kind +end structure Field = Record.Field structure Srecord = SortedRecord structure Set = DisjointSet @@ -44,237 +70,283 @@ type t val <= : t * t -> bool - val useBeforeDef: t * Tycon.t -> unit + val equals: t * t -> bool val layout: t -> Layout.t + val max: t * t -> t + val min: t * t -> t val now: unit -> t - val tick: {useBeforeDef: Tycon.t -> unit} -> unit + val region: t -> Region.t + val tick: {region: Region.t} -> unit + val zero: t end = struct datatype t = T of {clock: int, - useBeforeDef: Tycon.t -> unit} + region: Region.t} local fun make f (T r) = f r in val clock = make #clock + val region = make #region end - fun useBeforeDef (T {useBeforeDef = f, ...}, c) = f c + fun layout t = + Layout.tuple [Int.layout (clock t), + Region.layout (region t)] - val layout = Int.layout o clock + local + fun make f (t, t') = f (clock t, clock t') + in + val equals = make Int.equals + val op <= = make Int.<= + end + fun max (t, t') = if t <= t' then t' else t + fun min (t, t') = if t <= t' then t else t' - fun t <= t' = Int.<= (clock t, clock t') + val zero = T {clock = 0, region = Region.bogus} local - val current: t ref = - ref (T {clock = 0, - useBeforeDef = fn _ => Error.bug "TypeEnv.Time: useBeforeDef clock 0"}) + val current: t ref = ref zero in fun now () = !current - fun tick {useBeforeDef} = + fun tick {region} = current := T {clock = 1 + clock (!current), - useBeforeDef = useBeforeDef} + region = region} end val tick = Trace.trace ("TypeEnv.Time.tick", Layout.ignore, Unit.layout) tick end -val tick = Time.tick - -structure Lay = +structure Tyvar = struct - type t = Layout.t * ({isChar: bool} * Tycon.BindingStrength.t) - - fun simple (l: Layout.t): t = - (l, ({isChar = false}, Tycon.BindingStrength.unit)) - end + open Tyvar -structure UnifyResult = - struct - datatype t = - NotUnifiable of Lay.t * Lay.t - | Unified - - val layout = - let - open Layout + local + val {get = info: Tyvar.t -> {isEquality: bool, + time: Time.t}, + set = setInfo, ...} = + Property.getSet + (Tyvar.plist, + Property.initRaise ("TypeEnv.Tyvar.info", Tyvar.layout)) + fun init (a, ie) = + setInfo (a, {isEquality = ie, + time = Time.now ()}) + in + local + fun make f = f o info in - fn NotUnifiable _ => str "NotUnifiable" - | Unified => str "Unified" + val time = make #time + val isEquality = make #isEquality end - end + fun makeString (s, {equality}) = + let + val a = newString s + val _ = init (a, equality) + in + a + end + fun makeNoname {equality} = + let + val a = newNoname () + val _ = init (a, equality) + in + a + end + fun makeLike a = + let + val a' = new a + val _ = init (a', isEquality a) + in + a' + end + end -val {get = tyconInfo: Tycon.t -> {admitsEquality: AdmitsEquality.t ref, - region: Region.t option ref, - time: Time.t ref}, - set = setTyconInfo, ...} = - Property.getSet (Tycon.plist, Property.initRaise ("info", Tycon.layout)) + local + fun makeLocalNames () = + let + val a = Char.toInt #"a" + val z = Char.toInt #"z" + val cnt = Counter.new a + fun reset () = Counter.reset (cnt, a) + fun next b = + let + val n = Counter.next cnt + in + Layout.str + (concat [if isEquality b then "''" else "'", + if n > z + then concat ["a", Int.toString (n - z)] + else Char.toString (Char.fromInt n)]) + end + in + {next = next, + reset = reset} + end + in + fun makeLayoutPretty () = + let + val {destroy, get = layoutPretty, set = setLayoutPretty, ...} = + Property.destGetSet (plist, Property.initFun Tyvar.layout) + fun localInit bs = + let + val {next, ...} = makeLocalNames () + in + Vector.foreach + (bs, fn b => setLayoutPretty (b, next b)) + end + in + {destroy = destroy, + layoutPretty = layoutPretty, + localInit = localInit} + end -local - fun make f = f o tyconInfo -in - val tyconAdmitsEquality = make #admitsEquality - val tyconRegion = make #region - val tyconTime = make #time -end + fun makeLayoutPrettyLocal () = + let + val {next, reset} = makeLocalNames () + val {destroy, get = layoutPretty, ...} = + Property.destGet (plist, Property.initFun next) + in + {destroy = destroy, + layoutPretty = layoutPretty, + reset = fn () => (reset (); destroy ())} + end + end + end +structure TyvarExt = Tyvar -fun initAdmitsEquality (c, a) = - setTyconInfo (c, {admitsEquality = ref a, - region = ref NONE, - time = ref (Time.now ())}) +structure Tycon = + struct + open Tycon -val _ = List.foreach (Tycon.prims, fn {tycon = c, admitsEquality = a, ...} => - initAdmitsEquality (c, a)) + local + val {get = info: t -> {admitsEquality: AdmitsEquality.t ref, + kind: Kind.t, + prettyDefault: string, + region: Region.t, + time: Time.t}, + set = setInfo, ...} = + Property.getSet + (Tycon.plist, + Property.initRaise ("TypeEnv.Tycon.info", Tycon.layout)) + fun init (c, a, k, pd, r) = + setInfo (c, {admitsEquality = ref a, + kind = k, + prettyDefault = pd, + region = r, + time = Time.now ()}) + val _ = + List.foreach + (Tycon.prims, fn {tycon = c, admitsEquality = a, kind = k, name = lpd, ...} => + init (c, a, k, lpd, Region.bogus)) + val made: Tycon.t list ref = ref [] + in + local + fun make f = f o info + in + val admitsEquality = ! o make #admitsEquality + val kind = make #kind + val prettyDefault = make #prettyDefault + val region = make #region + val time = make #time + fun setAdmitsEquality (t, ae) = + (make #admitsEquality t) := ae + end + val layoutPrettyDefault = Layout.str o prettyDefault + fun make {admitsEquality, kind, name, + prettyDefault, region} = + let + val tycon = Tycon.newString name + val _ = init (tycon, admitsEquality, kind, + prettyDefault, region) + val _ = List.push (made, tycon) + in + tycon + end + fun makeLike c = + make {admitsEquality = admitsEquality c, + kind = kind c, + name = originalName c, + prettyDefault = prettyDefault c, + region = region c} + fun scopeNew th = + let + val oldMade = !made + val () = made := [] + val res = th () + val newMade = !made + val () = made := oldMade + in + (res, newMade) + end + end + fun makeBogus {name, kind, region} = + make {admitsEquality = AdmitsEquality.Sometimes, + kind = kind, + name = name, + prettyDefault = concat ["<", name, ">"], + region = Option.fold (region, Region.bogus, #1)} + end structure Equality:> sig - type t + datatype t = False | True | Unknown val and2: t * t -> t - val andd: t vector -> t + val andL: 'a list * ('a -> t) -> t + val andV: 'a vector * ('a -> t) -> t val applyTycon: Tycon.t * t vector -> t - val falsee: t val fromBool: bool -> t - val toBoolOpt: t -> bool option - val truee: t - val unify: t * t -> UnifyResult.t - val unknown: unit -> t + val join: t * t -> t + val layout: t -> Layout.t + val or2: t * t -> t end = struct - datatype maybe = - Known of bool - | Unknown of {whenKnown: (bool -> bool) list ref} - datatype t = - False - | Lazy of unit -> t - | Maybe of maybe ref - | True + datatype t = False | True | Unknown - fun unknown () = Maybe (ref (Unknown {whenKnown = ref []})) - - fun set (e: t, b: bool): bool = - case e of - False => b = false - | Lazy th => set (th (), b) - | Maybe r => - (case !r of - Known b' => b = b' - | Unknown {whenKnown} => - (r := Known b; List.forall (!whenKnown, fn f => f b))) - | True => b = true - - fun when (e: t, f: bool -> bool): bool = + fun layout e = case e of - False => f false - | Lazy th => when (th (), f) - | Maybe r => - (case !r of - Known b => f b - | Unknown {whenKnown} => (List.push (whenKnown, f); true)) - | True => f true - - fun unify (e: t, e': t): bool = - when (e, fn b => set (e', b)) - andalso when (e', fn b => set (e, b)) + False => Layout.str "False" + | True => Layout.str "True" + | Unknown => Layout.str "Unknown" - fun and2 (e, e') = - case (e, e') of + fun and2 (e1, e2) = + case (e1, e2) of (False, _) => False | (_, False) => False - | (True, _) => e' - | (_, True) => e - | (Lazy th, e') => Lazy (fn () => and2 (th (), e')) - | (e, Lazy th') => Lazy (fn () => and2 (e, th' ())) - | (Maybe r, Maybe r') => - (case (!r, !r') of - (Known false, _) => False - | (_, Known false) => False - | (Known true, _) => e' - | (_, Known true) => e - | (Unknown _, Unknown _) => - let - val e'' = unknown () - val _ = - when - (e'', fn b => - if b - then set (e, true) andalso set (e', true) - else - let - fun dep (e, e') = - when (e, fn b => - not b orelse set (e', false)) - in - dep (e, e') andalso dep (e', e) - end) - fun dep (e, e') = - when (e, fn b => - if b then unify (e', e'') - else set (e'', false)) - val _ = dep (e, e') - val _ = dep (e', e) - in - e'' - end) - - val falsee = False - val truee = True - - val fromBool = fn false => False | true => True + | (True, _) => e2 + | (_, True) => e1 + | (Unknown, Unknown) => Unknown + + fun andL (xs, f) = List.fold (xs, True, fn (x, e) => and2 (f x, e)) + fun andV (xs, f) = Vector.fold (xs, True, fn (x, e) => and2 (f x, e)) + + fun or2 (e1, e2) = + case (e1, e2) of + (False, _) => e2 + | (_, False) => e1 + | (True, _) => True + | (_, True) => True + | (Unknown, Unknown) => Unknown + + fun join (e1, e2) = + case (e1, e2) of + (Unknown, _) => e2 + | (_, Unknown) => e1 + | (False, False) => False + | (True, True) => True + | _ => Error.bug "TypeEnv.Equality.join" - fun toBoolOpt (e: t): bool option = - case e of - False => SOME false - | Lazy th => toBoolOpt (th ()) - | Maybe r => - (case !r of - Known b => SOME b - | Unknown _ => NONE) - | True => SOME true - - fun andd (es: t vector): t = Vector.fold (es, truee, and2) - - val applyTycon: Tycon.t * t vector -> t = - fn (c, es) => + fun applyTycon (c, es) = let datatype z = datatype AdmitsEquality.t in - case !(tyconAdmitsEquality c) of - Always => truee - | Sometimes => - let - val e = andd es - in - case e of - False => falsee - | _ => - Lazy - (fn () => - case !(tyconAdmitsEquality c) of - Always => Error.bug "TypeEnv.Equality.applyTycon: Always" - | Sometimes => e - | Never => falsee) - end - | Never => falsee + case Tycon.admitsEquality c of + Always => True + | Sometimes => andV (es, fn e => e) + | Never => False end - val unify: t * t -> UnifyResult.t = - fn (e, e') => - if unify (e, e') - then UnifyResult.Unified - else - let - fun lay e = - Lay.simple - (Layout.str (case toBoolOpt e of - NONE => Error.bug "TypeEnv.Equality.unify" - | SOME b => - if b - then "[]" - else "[]")) - in - UnifyResult.NotUnifiable (lay e, lay e') - end + fun fromBool b = if b then True else False end structure Unknown = @@ -289,21 +361,15 @@ end fun layout (T {canGeneralize, id, ...}) = - let - open Layout - in - seq [str "Unknown ", - record [("canGeneralize", Bool.layout canGeneralize), - ("id", Int.layout id)]] - end + seq [str "Unknown ", + Layout.record [("canGeneralize", Bool.layout canGeneralize), + ("id", Int.layout id)]] + + fun layoutPretty _ = str "???" fun equals (u, u') = id u = id u' - local - val r: int ref = ref 0 - in - fun newId () = (Int.inc r; !r) - end + val newId = Counter.generator 0 fun new {canGeneralize} = T {canGeneralize = canGeneralize, @@ -338,11 +404,7 @@ body: {fields: Field.t list ref, more: bool ref} Set.t} - local - val r: int ref = ref 0 - in - fun newId () = (Int.inc r; !r) - end + val newId = Counter.generator 0 fun new fields = T {id = newId (), body = Set.singleton {fields = ref fields, @@ -389,45 +451,6 @@ else g (f, ac)) end -val {get = tyvarTime: Tyvar.t -> Time.t ref, ...} = - Property.get (Tyvar.plist, Property.initFun (fn _ => ref (Time.now ()))) - -val tyvarTime = - Trace.trace ("TypeEnv.tyvarTime", Tyvar.layout, Ref.layout Time.layout) tyvarTime - -local - type z = Layout.t * ({isChar: bool} * Tycon.BindingStrength.t) - open Layout -in - fun simple (l: Layout.t): z = - (l, ({isChar = false}, Tycon.BindingStrength.unit)) - val dontCare: z = simple (str "_") - fun bracket l = seq [str "[", l, str "]"] - fun layoutRecord (ds: (Field.t * bool * z) list, flexible: bool) = - simple (case ds of - [] => if flexible then str "{...}" else str "{}" - | _ => - seq [str "{", - mayAlign - (separateRight - (List.map - (QuickSort.sortList (ds, fn ((f, _, _), (f', _, _)) => - Field.<= (f, f')), - fn (f, b, (l, _)) => - let - val f = Field.layout f - val f = if b then bracket f else f - in - seq [f, str ": ", l] - end), - ",")), - str (if flexible - then ", ...}" - else "}")]) - fun layoutTuple (zs: z vector): z = - Tycon.layoutApp (Tycon.tuple, zs) -end - structure Type = struct structure Overload = @@ -457,17 +480,23 @@ | Int => Tycon.defaultInt () | Real => Tycon.defaultReal () | Word => Tycon.defaultWord () + + val admitsEquality: t -> Equality.t = + fn Char => Equality.True + | Int => Equality.True + | Real => Equality.False + | Word => Equality.True end (* Tuples of length <> 1 are always represented as records. * There will never be tuples of length one. *) - datatype t = T of {equality: Equality.t, + datatype t = T of {equality: Equality.t ref, plist: PropertyList.t, time: Time.t ref, ty: ty} Set.t and ty = - Con of Tycon.t * t vector + Con of Tycon.t * t vector | FlexRecord of {fields: fields, spine: Spine.t} (* GenFlexRecord only appears in type schemes. @@ -487,14 +516,13 @@ fields: (Field.t * t) list, spine: Spine.t} - val newCloses: t list ref = ref [] - local fun make f (T s) = f (Set.! s) in val equality = make #equality val plist: t -> PropertyList.t = make #plist - val toType: t -> ty = make #ty + val time: t -> Time.t ref = make #time + val getTy: t -> ty = make #ty end local @@ -504,10 +532,11 @@ List.layout (Layout.tuple2 (Field.layout, layout)) fs and layout (T s) = let - val {time, ty, ...} = Set.! s + val {equality, time, ty, ...} = Set.! s in record [("time", Time.layout (!time)), + ("equality", Equality.layout (!equality)), ("ty", case ty of Con (c, ts) => @@ -537,34 +566,64 @@ | Var a => paren (seq [str "Var ", Tyvar.layout a]))] end end + end - fun admitsEquality t = - case Equality.toBoolOpt (equality t) of - NONE => - (* Could report an error here, but sometimes in a type-incorrect - * program, there will be unknown equalities. So it is better - * to conservatively return equality true, which will cause fewer - * spurious errors. - *) - true - | SOME b => b - - val admitsEquality = - Trace.trace - ("TypeEnv.Type.admitsEquality", layout, Bool.layout) - admitsEquality +structure Tycon = + struct + open Tycon - val {get = opaqueTyconExpansion: Tycon.t -> (t vector -> t) option, - set = setOpaqueTyconExpansion, ...} = + val {get = opaqueExpansion: t -> (Type.t vector -> Type.t) option, + set = setOpaqueExpansion, ...} = Property.getSet (Tycon.plist, Property.initConst NONE) - val opaqueTyconExpansion = - Trace.trace - ("TypeEnv.Type.opaqueTyconExpansion", Tycon.layout, Layout.ignore) - opaqueTyconExpansion + val opaqueExpansion = + Trace.trace + ("TypeEnv.Tycon.opaqueExpansion", Tycon.layout, Layout.ignore) + opaqueExpansion + + val setOpaqueExpansion = fn (c, f) => + setOpaqueExpansion (c, SOME f) + end +structure TyconExt = Tycon + +structure LayoutPretty = + struct + open LayoutPretty + fun record (ds: (Field.t * bool * t) list, flexible: bool) = + simple (case ds of + [] => if flexible then str "{...}" else str "{}" + | _ => + seq [str "{", + Layout.mayAlign + (Layout.separateRight + (List.map + (QuickSort.sortList (ds, fn ((f, _, _), (f', _, _)) => + Field.<= (f, f')), + fn (f, b, (l, _)) => + let + val f = Field.layout f + val row = seq [f, str ": ", l] + val row = if b then Layout.bracket row else row + in + row + end), + ",")), + str (if flexible + then ", ...}" + else "}")]) + fun tuple (ls: t vector): t = + Tycon.layoutAppPretty + (Tycon.tuple, ls, + {layoutPretty = fn _ => + Error.bug "TypeEnv.LayoutPretty.tuple: layoutPretty"}) + end - fun makeHom {con, expandOpaque, flexRecord, genFlexRecord, overload, - record, recursive, unknown, var} = +structure Type = + struct + open Type + + fun makeHom {con, expandOpaque, flexRecord, genFlexRecord, + guard, overload, record, recursive, unknown, var} = let datatype status = Processing | Seen | Unseen val {destroy = destroyStatus, get = status, ...} = @@ -581,39 +640,43 @@ Seen => Error.bug "TypeEnv.Type.makeHom: impossible" | Processing => recursive t | Unseen => - let - val _ = r := Processing - fun loopFields fields = - List.revMap (fields, fn (f, t) => (f, get t)) - val res = - case toType t of - Con (c, ts) => - let - fun no () = - con (t, c, Vector.map (ts, get)) - fun yes () = - (case opaqueTyconExpansion c of - NONE => no () - | SOME f => get (f ts)) - in - if expandOpaque then yes () else no () - end - | FlexRecord {fields, spine} => - flexRecord (t, {fields = loopFields fields, - spine = spine}) - | GenFlexRecord {extra, fields, spine} => - genFlexRecord - (t, {extra = extra, - fields = loopFields fields, - spine = spine}) - | Overload ov => overload (t, ov) - | Record r => record (t, Srecord.map (r, get)) - | Unknown u => unknown (t, u) - | Var a => var (t, a) - val _ = r := Seen - in - res - end + (case guard t of + NONE => + let + val _ = r := Processing + fun loopFields fields = + List.revMap (fields, fn (f, t) => (f, get t)) + val res = + case getTy t of + Con (c, ts) => + let + fun no () = + con (t, c, Vector.map (ts, get)) + fun yes () = + (case Tycon.opaqueExpansion c of + NONE => no () + | SOME f => get (f ts)) + in + if expandOpaque then yes () else no () + end + | FlexRecord {fields, spine} => + flexRecord + (t, {fields = loopFields fields, + spine = spine}) + | GenFlexRecord {extra, fields, spine} => + genFlexRecord + (t, {extra = extra, + fields = loopFields fields, + spine = spine}) + | Overload ov => overload (t, ov) + | Record r => record (t, Srecord.map (r, get)) + | Unknown u => unknown (t, u) + | Var a => var (t, a) + val _ = r := Seen + in + res + end + | SOME res => (r := Seen; res)) end)) fun destroy () = (destroyStatus () @@ -629,15 +692,19 @@ Exn.finally (fn () => hom ty, destroy) end - fun makeLayoutPretty {expandOpaque, localTyvarNames} : + fun makeLayoutPretty {expandOpaque, + layoutPrettyTycon, + layoutPrettyTyvar} : {destroy: unit -> unit, - lay: t -> Layout.t * ({isChar: bool} * Tycon.BindingStrength.t)} = + layoutPretty: t -> LayoutPretty.t} = let - val str = Layout.str - fun con (_, c, ts) = Tycon.layoutApp (c, ts) - fun con0 c = Tycon.layoutApp (c, Vector.new0 ()) + val layoutAppPretty = fn (c, ts) => + Tycon.layoutAppPretty + (c, ts, {layoutPretty = layoutPrettyTycon}) + fun con (_, c, ts) = layoutAppPretty (c, ts) + fun con0 c = layoutAppPretty (c, Vector.new0 ()) fun flexRecord (_, {fields, spine}) = - layoutRecord + LayoutPretty.record (List.fold (fields, Spine.foldOverNew (spine, fields, [], fn (f, ac) => @@ -646,84 +713,110 @@ fn ((f, t), ac) => (f, false, t) :: ac), Spine.canAddFields spine) fun genFlexRecord (_, {extra, fields, spine}) = - layoutRecord + LayoutPretty.record (List.fold (fields, List.revMap (extra (), fn {field, tyvar} => - (field, false, simple (Tyvar.layout tyvar))), + (field, false, simple (layoutPrettyTyvar tyvar))), fn ((f, t), ac) => (f, false, t) :: ac), Spine.canAddFields spine) fun overload (_, ov) = con0 (Overload.defaultTycon ov) fun record (_, r) = case Srecord.detupleOpt r of NONE => - layoutRecord (Vector.toListMap (Srecord.toVector r, - fn (f, t) => (f, false, t)), - false) - | SOME ts => Tycon.layoutApp (Tycon.tuple, ts) + LayoutPretty.record + (Vector.toListMap + (Srecord.toVector r, + fn (f, t) => (f, false, t)), + false) + | SOME ts => LayoutPretty.tuple ts fun recursive _ = simple (str "") - fun unknown _ = simple (str "???") - val (destroy, prettyTyvar) = - if localTyvarNames - then let - val {destroy, get = prettyTyvar, ...} = - Property.destGet - (Tyvar.plist, - Property.initFun - (let - val r = ref (Char.toInt #"a") - in - fn v => - let - val n = !r - val l = - simple - (str (concat - [if Tyvar.isEquality v then "''" else "'", - if n > Char.toInt #"z" - then concat ["a", Int.toString (n - Char.toInt #"z")] - else Char.toString (Char.fromInt n )])) - val _ = r := 1 + n - in - l - end - end)) - in - (destroy, prettyTyvar) - end - else (fn () => (), simple o Tyvar.layout) - fun var (_, a) = prettyTyvar a - fun lay t = - hom (t, {con = con, + fun unknown (_, u) = simple (Unknown.layoutPretty u) + fun var (_, a) = simple (layoutPrettyTyvar a) + val {destroy, hom = layoutPretty} = + makeHom {con = con, expandOpaque = expandOpaque, flexRecord = flexRecord, genFlexRecord = genFlexRecord, + guard = fn _ => NONE, overload = overload, record = record, recursive = recursive, unknown = unknown, - var = var}) + var = var} in {destroy = destroy, - lay = lay} + layoutPretty = layoutPretty} end - fun layoutPrettyAux (t, {expandOpaque, localTyvarNames}) = + fun layoutPretty (t, {expandOpaque, layoutPrettyTycon, layoutPrettyTyvar}) = let - val {destroy, lay} = + val {destroy, layoutPretty} = makeLayoutPretty {expandOpaque = expandOpaque, - localTyvarNames = localTyvarNames} - val res = #1 (lay t) - val _ = destroy () + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar} + val res = layoutPretty t + val () = destroy () in res end - fun layoutPretty t = - layoutPrettyAux (t, {expandOpaque = false, - localTyvarNames = true}) + + fun getEquality t = + let + (* guarded; only invoked if '!(Tycon.admitsEquality c) = Sometimes' *) + fun con (_, c, es) = Equality.applyTycon (c, es) + fun flexRecord (_, {fields: (Field.t * Equality.t) list, spine}) = + if Spine.canAddFields spine + then Equality.Unknown + else Equality.andL (fields, #2) + (* impossible; *) + fun genFlexRecord _ = Error.bug "TypeEnv.Type.getEquality.genFlexRecord" + (* guarded; an overload has known equality *) + fun overload _ = Error.bug "TypeEnv.Type.getEquality.overload" + fun record (_, r: Equality.t Srecord.t) = + Equality.andV (Srecord.toVector r, #2) + (* impossible *) + fun recursive _ = Error.bug "TypeEnv.Type.getEquality.recursive" + (* guarded; only invoked if '!(Type.equality t) = Unknown' *) + fun unknown (_, _) = Equality.Unknown + (* guarded; a tyvar has known equality *) + fun var _ = Error.bug "TypeEnv.Type.getEquality.var" + fun wrap (f, sel) arg = + let + val res = f arg + val _ = equality (sel arg) := res + in + res + end + fun guard t = + let + val e = !(equality t) + in + case e of + Equality.Unknown => NONE + | _ => SOME e + end + in + hom (t, {con = wrap (con, #1), + expandOpaque = false, + flexRecord = wrap (flexRecord, #1), + genFlexRecord = genFlexRecord, + guard = guard, + overload = overload, + record = wrap (record, #1), + recursive = recursive, + unknown = unknown, + var = var}) + end + + val getEquality = + Trace.trace + ("TypeEnv.Type.getEquality", layout, Equality.layout) + getEquality + val _ = getEquality fun deConOpt t = - case toType t of + case getTy t of Con x => SOME x | _ => NONE @@ -732,7 +825,7 @@ SOME (c, ts) => if Vector.length ts = Vector.length tyvars andalso Vector.foralli (ts, fn (i, t) => - case toType t of + case getTy t of Var a => Tyvar.equals (a, Vector.sub (tyvars, i)) @@ -741,33 +834,79 @@ else NONE | _ => NONE - - fun newTy (ty: ty, eq: Equality.t): t = - T (Set.singleton {equality = eq, + fun make {equality, time, ty}: t = + T (Set.singleton {equality = ref equality, plist = PropertyList.new (), - time = ref (Time.now ()), + time = ref time, ty = ty}) - fun unknown {canGeneralize, equality} = + fun newTy (ty: ty): t = + let + val (equality, time) = + case ty of + Con (c, ts) => + (Equality.applyTycon + (c, Vector.map (ts, ! o equality)), + Vector.fold + (ts, Tycon.time c, fn (t, t') => + Time.max (!(time t), t'))) + | GenFlexRecord _ => + Error.bug "TypeEnv.Type.newTy: GenFlexRecord" + | FlexRecord _ => + (Equality.Unknown, + Time.now ()) + | Overload ov => + (Overload.admitsEquality ov, + Time.zero) + | Record r => + (Srecord.fold + (r, Equality.True, fn (t, e') => + Equality.and2 (!(equality t), e')), + Srecord.fold + (r, Time.zero, fn (t, t') => + Time.max (!(time t), t'))) + | Unknown _ => + Error.bug "TypeEnv.Type.newTy: Unknown" + | Var a => + (Equality.fromBool (Tyvar.isEquality a), + Tyvar.time a) + in + make {equality = equality, + time = time, + ty = ty} + end + + fun setTy (T s, ty) = + let + val {equality, plist, time, ...} = Set.! s + in + Set.:= (s, {equality = equality, + plist = plist, + time = time, + ty = ty}) + end + + fun unknownAux {canGeneralize, equality, time} = let - val t = newTy (Unknown (Unknown.new {canGeneralize = canGeneralize}), - equality) - val _ = List.push (newCloses, t) + val u = Unknown.new {canGeneralize = canGeneralize} + val t = make {equality = equality, + time = time, + ty = Unknown u} in - t + (u, t) end + val unknown = #2 o unknownAux - fun new () = unknown {canGeneralize = true, - equality = Equality.unknown ()} + fun new () = + unknown + {canGeneralize = true, + equality = Equality.Unknown, + time = Time.now ()} val new = Trace.trace ("TypeEnv.Type.new", Unit.layout, layout) new fun newFlex {fields, spine} = - newTy (FlexRecord {fields = fields, - spine = spine}, - Equality.and2 - (Equality.andd (Vector.fromListMap (fields, equality o #2)), - Equality.unknown ())) + newTy (FlexRecord {fields = fields, spine = spine}) fun flexRecord record = let @@ -776,36 +915,39 @@ fun isResolved (): bool = not (Spine.canAddFields spine) val t = newFlex {fields = Vector.toList v, spine = spine} - val _ = List.push (newCloses, t) in (t, isResolved) end - fun record r = - newTy (Record r, - Equality.andd (Vector.map (Srecord.range r, equality))) + fun record r = newTy (Record r) fun tuple ts = if 1 = Vector.length ts - then Vector.sub (ts, 0) - else newTy (Record (Srecord.tuple ts), - Equality.andd (Vector.map (ts, equality))) + then Vector.first ts + else newTy (Record (Srecord.tuple ts)) fun con (tycon, ts) = if Tycon.equals (tycon, Tycon.tuple) then tuple ts - else newTy (Con (tycon, ts), - Equality.applyTycon (tycon, Vector.map (ts, equality))) + else newTy (Con (tycon, ts)) - fun var a = newTy (Var a, Equality.fromBool (Tyvar.isEquality a)) + fun var a = newTy (Var a) end -fun setOpaqueTyconExpansion (c, f) = - Type.setOpaqueTyconExpansion (c, SOME f) - structure Ops = TypeOps (structure Tycon = Tycon open Type) +structure UnifyResult = + struct + datatype ('a, 'b) t = + NotUnifiable of 'a + | Unified of 'b + + val layout = + fn NotUnifiable _ => str "NotUnifiable" + | Unified _ => str "Unified" + end + structure Type = struct (* Order is important, since want specialized definitions in Type to @@ -816,48 +958,53 @@ val unit = tuple (Vector.new0 ()) fun isArrow t = - case toType t of + case getTy t of Con (c, _) => Tycon.equals (c, Tycon.arrow) | _ => false fun isBool t = - case toType t of + case getTy t of Con (c, _) => Tycon.isBool c | _ => false fun isCharX t = - case toType t of + case getTy t of Con (c, _) => Tycon.isCharX c | Overload Overload.Char => true | _ => false fun isCPointer t = - case toType t of + case getTy t of Con (c, _) => Tycon.isCPointer c | _ => false fun isInt t = - case toType t of + case getTy t of Con (c, _) => Tycon.isIntX c | Overload Overload.Int => true | _ => false fun isUnit t = - case toType t of + case getTy t of Record r => (case Srecord.detupleOpt r of NONE => false - | SOME v => 0 = Vector.length v) + | SOME v => Vector.isEmpty v) + | _ => false + + fun isUnknown t = + case getTy t of + Unknown _ => true | _ => false local - fun make (ov, eq) () = newTy (Overload ov, eq) + fun make ov () = newTy (Overload ov) datatype z = datatype Overload.t in - val unresolvedChar = make (Char, Equality.truee) - val unresolvedInt = make (Int, Equality.truee) - val unresolvedReal = make (Real, Equality.falsee) - val unresolvedWord = make (Word, Equality.truee) + val unresolvedChar = make Char + val unresolvedInt = make Int + val unresolvedReal = make Real + val unresolvedWord = make Word end fun unresolvedString () = vector (unresolvedChar ()) @@ -869,7 +1016,7 @@ fun canUnify arg = traceCanUnify (fn (t, t') => - case (toType t, toType t') of + case (getTy t, getTy t') of (Unknown _, _) => true | (_, Unknown _) => true | (Con (c, ts), t') => conAnd (c, ts, t') @@ -892,152 +1039,494 @@ Tycon.equals (c, c') andalso Vector.forall2 (ts, ts', canUnify) | Overload ov => - 0 = Vector.length ts andalso Overload.matchesTycon (ov, c) + Vector.isEmpty ts andalso Overload.matchesTycon (ov, c) | _ => false - (* minTime (t, bound) ensures that all components of t have times no larger - * than bound. It calls the appropriate error function when it encounters - * a tycon that is used before it defined. + (* checkEquality t checks that t is an equality type. If t is + * not an equality type, then checkEquality t returns: + * - a layout object highlighting violations in t + * - an alternate type, replacing violations in t with fresh + * equality unification variables and a layout object + * highlighting the fresh unification variables. *) - fun minTime (t, bound: Time.t): unit = + fun checkEquality (t, {layoutPrettyTycon: Tycon.t -> Layout.t, + layoutPrettyTyvar: Tyvar.t -> Layout.t}) = let - fun loop (T s): unit = - let - val {time, ty, ...} = Set.! s - in - if Time.<= (!time, bound) - then () - else + val layoutAppPretty = fn (c, ts) => + Tycon.layoutAppPretty + (c, ts, {layoutPretty = layoutPrettyTycon}) + type ll = LayoutPretty.t * LayoutPretty.t + local + fun getLay sel (llo: ll option, _) = + Option.fold (llo, dontCare, sel o #1) + in + val getLay1 = getLay #1 + val getLay2 = getLay #2 + end + fun getTy (_, ty) = ty + (* guarded; only invoked if 'Tycon.admitsEquality c = Sometimes' *) + fun con (_, c, rs) = + if Vector.forall (rs, Option.isNone o #1) + then NONE + else SOME (layoutAppPretty + (c, Vector.map (rs, getLay1)), + layoutAppPretty + (c, Vector.map (rs, getLay2)), + Type.con + (c, Vector.map (rs, getTy))) + fun doRecord (fls: (Field.t * ll) list, + extra: bool, mk: unit -> t) = + if List.isEmpty fls + then NONE + else let + fun doit sel = + LayoutPretty.record + (List.map + (fls, fn (f, lll) => + (f, false, sel lll)), + extra) + in + SOME (doit #1, doit #2, mk ()) + end + fun flexRecord (_, {fields, spine}) = + doRecord (List.keepAllMap + (fields, fn (f, r) => + Option.map (#1 r, fn ll => (f, ll))), + Spine.canAddFields spine, + fn () => + let + val fields = + List.map (fields, fn (f, r) => + (f, getTy r)) + in + Type.newFlex {fields = fields, + spine = spine} + end) + (* impossible *) + fun genFlexRecord _ = Error.bug "TypeEnv.Type.checkEquality.genFlexRecord" + (* guarded; an overload has known equality + * only invoked if '!(Type.equality t) = False' *) + fun overload (_, ov) = + case ov of + Overload.Real => let - val _ = time := bound + val ty = + Type.unknown {canGeneralize = true, + equality = Equality.True, + time = Time.now ()} in - case ty of - Con (c, ts) => - let - val r = tyconTime c - val _ = - if Time.<= (!r, bound) - then () - else - let - val _ = r := bound - val _ = Time.useBeforeDef (bound, c) - in - () - end - val _ = Vector.foreach (ts, loop) - in - () - end - | FlexRecord {fields, ...} => loopFields fields - | GenFlexRecord {fields, ...} => loopFields fields - | Overload _ => () - | Record r => Srecord.foreach (r, loop) - | Unknown _ => () - | Var a => - let - val r = tyvarTime a - in - if Time.<= (!r, bound) - then () - else r := bound - end + SOME (bracket (simple (str "real")), + bracket (simple (str "")), + ty) end - end - and loopFields (fs: (Field.t * t) list) = - List.foreach (fs, loop o #2) - val _ = loop t + | _ => Error.bug "TypeEnv.Type.checkEquality.overload" + fun record (_, r) = + case Srecord.detupleOpt r of + NONE => + let + val fields = Srecord.toVector r + val fields' = + Vector.keepAllMap + (fields, fn (f, r) => + Option.map (#1 r, fn ll => (f, ll))) + in + doRecord (Vector.toList fields', + not (Vector.length fields = Vector.length fields'), + fn () => + let + val fields = + Vector.map (fields, fn (f, r) => + (f, getTy r)) + val fields = Srecord.fromVector fields + in + Type.record fields + end) + end + | SOME rs => + if Vector.forall (rs, Option.isNone o #1) + then NONE + else SOME (LayoutPretty.tuple (Vector.map (rs, getLay1)), + LayoutPretty.tuple (Vector.map (rs, getLay2)), + Type.tuple (Vector.map (rs, getTy))) + (* impossible *) + fun recursive _ = Error.bug "TypeEnv.Type.checkEquality.recursive" + fun unknown (t, _) = + case !(equality t) of + Equality.False => + let + val ty = + Type.unknown {canGeneralize = true, + equality = Equality.True, + time = Time.now ()} + in + SOME (bracket (simple (str "")), + bracket (simple (str "")), + ty) + end + | Equality.True => NONE + | Equality.Unknown => NONE + (* guarded; a tyvar has known equality + * only invoked if '!(Type.equality t) = False' *) + fun var (_, a) = + if Tyvar.isEquality a + then Error.bug "TypeEnv.Type.checkEquality.var" + else let + val ty = + Type.unknown {canGeneralize = true, + equality = Equality.True, + time = Time.now ()} + in + SOME (bracket (simple (layoutPrettyTyvar a)), + bracket (simple (str "")), + ty) + end + fun wrap (f, sel) arg = + case f arg of + NONE => + let + val t = sel arg + in + equality t := Equality.True + ; (NONE, t) + end + | SOME (l1, l2, t) => + (SOME (l1, l2), t) + (* Need extra guarding of Con, because proceeding with + * hom/con would recursively force all Unknowns in type + * args to Equality.True, even if tycon is + * AdmitsEquality.Never. *) + fun guard t = + case !(equality t) of + Equality.True => SOME (NONE, t) + | _ => (case Type.getTy t of + Con (c, ts) => + (case Tycon.admitsEquality c of + AdmitsEquality.Always => SOME (NONE, t) + | AdmitsEquality.Sometimes => NONE + | AdmitsEquality.Never => + let + val ty = + Type.unknown {canGeneralize = true, + equality = Equality.True, + time = Time.now ()} + in + SOME (SOME ((bracket o layoutAppPretty) + (c, Vector.map (ts, fn _ => dontCare)), + bracket (simple (str ""))), + ty) + end) + | _ => NONE) + val res : ll option * t = + hom (t, {con = wrap (con, #1), + expandOpaque = false, + flexRecord = wrap (flexRecord, #1), + genFlexRecord = genFlexRecord, + guard = guard, + overload = wrap (overload, #1), + record = wrap (record, #1), + recursive = recursive, + unknown = wrap (unknown, #1), + var = wrap (var, #1)}) in - () + case res of + (NONE, _) => NONE + | (SOME (l1, l2), t) => + SOME (l1, (t, l2)) end - val minTime = - Trace.trace2 - ("TypeEnv.Type.minTime", layout, Time.layout, Unit.layout) - minTime + (* checkTime (t, bound) checks that all components of t have + * times no larger than bound. If t has components with time + * larger than bound, then checkTime (t, bound) returns: + * - a layout object highlighting violations in t + * - an alternate type, replacing violations in t with fresh + * unification variables at time bound and a layout object + * highlighting the fresh unification variables. + * - a list of violating tycons + * - a list of violating tyvars + *) + fun makeCheckTime {layoutPrettyTycon: Tycon.t -> Layout.t, + layoutPrettyTyvar: Tyvar.t -> Layout.t} = + let + val layoutAppPretty = fn (c, ts) => + Tycon.layoutAppPretty + (c, ts, {layoutPretty = layoutPrettyTycon}) + val times: Time.t list ref = ref [] + val tycons: Tycon.t list ref = ref [] + val tyvars: Tyvar.t list ref = ref [] + type lll = LayoutPretty.t * LayoutPretty.t * LayoutPretty.t + local + fun getLay sel (lllo: lll option, _) = + Option.fold (lllo, dontCare, sel o #1) + in + val getLay1 = getLay #1 + val getLay2 = getLay #2 + val getLay3 = getLay #3 + end + fun getTy (_, ty) = ty + fun con bound (_, c, rs) = + if Time.<= (Tycon.time c, bound) + then if Vector.forall (rs, Option.isNone o #1) + then NONE + else SOME (layoutAppPretty + (c, Vector.map (rs, getLay1)), + layoutAppPretty + (c, Vector.map (rs, getLay2)), + layoutAppPretty + (c, Vector.map (rs, getLay3)), + Type.con + (c, Vector.map (rs, getTy))) + else let + val (u, ty) = + Type.unknownAux {canGeneralize = true, + equality = Equality.Unknown, + time = bound} + in + List.push (times, bound) + ; List.push (tycons, c) + ; SOME ((bracket o layoutAppPretty) + (c, Vector.map (rs, getLay2)), + layoutAppPretty + (c, Vector.map (rs, getLay2)), + bracket (simple (Unknown.layoutPretty u)), + ty) + end + fun doRecord (fls: (Field.t * lll) list, + extra: bool, mk: unit -> t) = + if List.isEmpty fls + then NONE + else let + fun doit sel = + LayoutPretty.record + (List.map + (fls, fn (f, lll) => + (f, false, sel lll)), + extra) + in + SOME (doit #1, doit #2, doit #3, mk ()) + end + fun flexRecord (_, {fields, spine}) = + doRecord (List.keepAllMap + (fields, fn (f, r) => + Option.map (#1 r, fn lll => (f, lll))), + Spine.canAddFields spine, + fn () => + let + val fields = + List.map (fields, fn (f, r) => + (f, getTy r)) + in + Type.newFlex {fields = fields, + spine = spine} + end) + fun record (_, r) = + case Srecord.detupleOpt r of + NONE => + let + val fields = Srecord.toVector r + val fields' = + Vector.keepAllMap + (fields, fn (f, r) => + Option.map (#1 r, fn lll => (f, lll))) + in + doRecord (Vector.toList fields', + not (Vector.length fields = Vector.length fields'), + fn () => + let + val fields = + Vector.map (fields, fn (f, r) => + (f, getTy r)) + val fields = Srecord.fromVector fields + in + Type.record fields + end) + end + | SOME rs => + if Vector.forall (rs, Option.isNone o #1) + then NONE + else SOME (LayoutPretty.tuple (Vector.map (rs, getLay1)), + LayoutPretty.tuple (Vector.map (rs, getLay2)), + LayoutPretty.tuple (Vector.map (rs, getLay3)), + Type.tuple (Vector.map (rs, getTy))) + fun var bound (_, a) = + if Time.<= (Tyvar.time a, bound) + then NONE + else let + val (u, ty) = + Type.unknownAux {canGeneralize = true, + equality = Equality.Unknown, + time = bound} + in + List.push (times, bound) + ; List.push (tyvars, a) + ; SOME (bracket (simple (layoutPrettyTyvar a)), + simple (layoutPrettyTyvar a), + bracket (simple (Unknown.layoutPretty u)), + ty) + end + fun genFlexRecord _ = Error.bug "TypeEnv.Type.checkTime.genFlexRecord" + fun recursive _ = Error.bug "TypeEnv.Type.checkTime.recursive" + fun checkTime (t, bound) = + if Time.<= (!(time t), bound) + then NONE + else let + fun wrap (f, sel) arg = + case f arg of + NONE => + let + val t = sel arg + in + time t := bound + ; (NONE, t) + end + | SOME (l1, l2, l3, t) => + (time t := bound + ; (SOME (l1, l2, l3), t)) + fun guard t = + if Time.<= (!(time t), bound) + then SOME (NONE, t) + else NONE + val res : lll option * t = + hom (t, {con = wrap (con bound, #1), + expandOpaque = false, + flexRecord = wrap (flexRecord, #1), + genFlexRecord = genFlexRecord, + guard = guard, + overload = wrap (fn _ => NONE, #1), + record = wrap (record, #1), + recursive = recursive, + unknown = wrap (fn _ => NONE, #1), + var = wrap (var bound, #1)}) + in + case res of + (NONE, _) => NONE + | (SOME (l1, _, l3), t) => + SOME (l1, (t, l3)) + end + fun finishCheckTime () = + {times = List.removeDuplicates (!times, Time.equals), + tycons = List.removeDuplicates (!tycons, Tycon.equals), + tyvars = List.removeDuplicates (!tyvars, Tyvar.equals)} + in + {checkTime = checkTime, + finishCheckTime = finishCheckTime} + end datatype z = datatype UnifyResult.t - val traceUnify = + val traceUnify = Trace.trace2 - ("TypeEnv.Type.unify", layout, layout, UnifyResult.layout) - - fun unify (t, t', {preError: unit -> unit}): UnifyResult.t = + ("TypeEnv.Type.unify", layout, layout, + UnifyResult.layout: + (LayoutPretty.t * LayoutPretty.t, unit) UnifyResult.t -> Layout.t) + + fun unify (t, t', + {layoutPretty: t -> LayoutPretty.t, + layoutPrettyTycon: Tycon.t -> Layout.t, + layoutPrettyTyvar: Tyvar.t -> Layout.t}) = let - val {destroy, lay = layoutPretty} = - makeLayoutPretty {expandOpaque = false, localTyvarNames = true} - val dontCare' = fn _ => dontCare - val layoutRecord = fn z => layoutRecord (z, true) + val layoutAppPretty = fn (c, ts) => + Tycon.layoutAppPretty + (c, ts, {layoutPretty = layoutPrettyTycon}) + val checkEquality = fn t => + checkEquality (t, {layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) + val {checkTime, finishCheckTime} = + makeCheckTime {layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar} fun unify arg = traceUnify (fn (outer as T s, outer' as T s') => if Set.equals (s, s') - then Unified + then Unified () else let - fun notUnifiable (l: Lay.t, l': Lay.t) = - (NotUnifiable (l, l'), - Unknown (Unknown.new {canGeneralize = true})) - val bracket = - fn (l, ({isChar}, _)) => - (bracket l, - ({isChar = isChar}, Tycon.BindingStrength.unit)) + fun notUnifiable (l: LayoutPretty.t, l': LayoutPretty.t) = + NotUnifiable (l, l') fun notUnifiableBracket (l, l') = notUnifiable (bracket l, bracket l') fun flexToRecord (fields, spine) = (Vector.fromList fields, - Vector.fromList - (List.fold - (Spine.fields spine, [], fn (f, ac) => - if List.exists (fields, fn (f', _) => - Field.equals (f, f')) - then ac - else f :: ac)), - fn f => Spine.ensureField (spine, f)) + Spine.canAddFields spine) fun rigidToRecord r = (Srecord.toVector r, - Vector.new0 (), - fn f => isSome (Srecord.peek (r, f))) - fun oneFlex ({fields, spine}, time, r, outer, swap) = + false) + fun flexToFlexToRecord (fields, spine, equality, time, outer, spine') = + let + val () = + List.foreach + (Spine.fields spine', fn f' => + ignore (Spine.ensureField (spine, f'))) + val fields = + Spine.foldOverNew + (spine, fields, fields, fn (f, fields) => + let + val u = + Type.unknown + {canGeneralize = true, + equality = Equality.or2 (equality, Equality.Unknown), + time = time} + in + (f, u) :: fields + end) + val _ = setTy (outer, FlexRecord {fields = fields, spine = spine}) + in + flexToRecord (fields, spine) + end + fun flexToRigidToRecord (fields, spine, equality, time, outer, r') = + let + val () = + Vector.foreach + (Srecord.toVector r', fn (f', _) => + ignore (Spine.ensureField (spine, f'))) + val () = Spine.noMoreFields spine + val fields = + Spine.foldOverNew + (spine, fields, fields, fn (f, fields) => + let + val u = + Type.unknown + {canGeneralize = true, + equality = Equality.or2 (equality, Equality.Unknown), + time = time} + in + (f, u) :: fields + end) + val r = Srecord.fromVector (Vector.fromList fields) + val _ = setTy (outer, Record r) + in + rigidToRecord r + end + fun oneFlex ({fields, spine}, equality, time, outer, r', swap) = unifyRecords - (flexToRecord (fields, spine), - rigidToRecord r, - fn () => (minTime (outer, time) - ; Spine.noMoreFields spine - ; (Unified, Record r)), - fn (l, l') => notUnifiable (if swap - then (l', l) - else (l, l'))) + (flexToRigidToRecord (fields, spine, equality, time, outer, r'), + rigidToRecord r', + fn () => Unified (Record r'), + notUnifiable o (fn (l, l') => + if swap + then (l', l) + else (l, l'))) fun genFlexError () = Error.bug "TypeEnv.Type.unify: GenFlexRecord" - val {equality = e, time, ty = t, plist} = Set.! s - val {equality = e', time = time', ty = t', ...} = - Set.! s' + val {equality, time, ty = t, plist} = Set.! s + val {equality = equality', time = time', ty = t', ...} = Set.! s' fun not () = - (preError () - ; notUnifiableBracket (layoutPretty outer, - layoutPretty outer')) + notUnifiableBracket (layoutPretty outer, + layoutPretty outer') fun unifys (ts, ts', yes, no) = let val us = Vector.map2 (ts, ts', unify) in if Vector.forall - (us, fn Unified => true | _ => false) + (us, fn Unified _ => true | _ => false) then yes () else let val (ls, ls') = Vector.unzip - (Vector.mapi - (us, fn (i, u) => + (Vector.map + (us, fn u => case u of - Unified => - let - val z = - dontCare' (Vector.sub (ts, i)) - in - (z, z) - end + Unified _ => (dontCare, dontCare) | NotUnifiable (l, l') => (l, l'))) in no (ls, ls') @@ -1064,7 +1553,6 @@ (Vector.length ts), " args> "]), Tycon.layout c]) - val _ = preError () in notUnifiableBracket (maybe (lay ts, lay ts')) @@ -1072,11 +1560,10 @@ else unifys (ts, ts', - fn () => (Unified, t), + fn () => Unified t, fn (ls, ls') => - let - fun lay ls = - Tycon.layoutApp (c, ls) + let + fun lay ls = layoutAppPretty (c, ls) in notUnifiable (maybe (lay ls, lay ls')) @@ -1085,35 +1572,36 @@ | Overload ov => if Vector.isEmpty ts andalso Overload.matchesTycon (ov, c) - then (Unified, t') + then Unified t' else not () | _ => not () end - fun oneUnknown (u: Unknown.t, time, - t: Type.ty, - outer: Type.t, - _: bool) = + fun oneUnknown (u: Unknown.t, + equality: Equality.t, + time: Time.t, + outer: t, + t': Type.ty, + outer': Type.t, + swap: bool) = let - (* This should fail if the unknown occurs in t. - *) + (* This should fail if the unknown occurs in t. *) fun con (_, _, ts) = Vector.exists (ts, fn b => b) fun doFields fields = List.exists (fields, fn (_, b) => b) fun flexRecord (_, {fields, spine = _}) = doFields fields - fun genFlexRecord (_, {extra = _, fields, - spine = _}) = - doFields fields fun record (_, r) = Srecord.exists (r, fn b => b) fun unknown (_, u') = Unknown.equals (u, u') fun no _ = false val isCircular = - hom (outer, + hom (outer', {con = con, expandOpaque = false, flexRecord = flexRecord, - genFlexRecord = genFlexRecord, + genFlexRecord = fn _ => + Error.bug "TypeEnv.Type.unify.oneUnknown: genFlexRecord", + guard = fn _ => NONE, overload = no, record = record, recursive = fn _ => @@ -1123,58 +1611,78 @@ in if isCircular then not () - else - let - val () = minTime (outer, time) - in - (Unified, t) - end + else let + fun err (l, (t'', l'')) = + (setTy (outer, getTy t'') + ; notUnifiable + (if swap + then (l, l'') + else (l'', l))) + in + case equality of + Equality.True => + (case checkEquality outer' of + NONE => Unified t' + | SOME (l, (t'', l'')) => + err (l, (t'', l''))) + | _ => + (case checkTime (outer', time) of + NONE => Unified t' + | SOME (l, (t'', l'')) => + err (l, (t'', l''))) + end end - val (res, t) = + val res = case (t, t') of (Unknown r, Unknown r') => - (Unified, Unknown (Unknown.join (r, r'))) + (case (!equality, !equality') of + (Equality.True, Equality.False) => + notUnifiableBracket + (simple (str ""), + simple (str "")) + | (Equality.False, Equality.True) => + notUnifiableBracket + (simple (str ""), + simple (str "")) + | _ => Unified (Unknown (Unknown.join (r, r')))) | (Unknown u, _) => - oneUnknown (u, !time, t', outer', false) + oneUnknown (u, !equality, !time, outer, t', outer', false) | (_, Unknown u') => - oneUnknown (u', !time', t, outer, true) + oneUnknown (u', !equality', !time', outer', t, outer, true) | (Con (c, ts), _) => conAnd (c, ts, t', t, false) | (_, Con (c, ts)) => conAnd (c, ts, t, t', true) | (FlexRecord f, Record r') => - oneFlex (f, !time, r', outer', false) + oneFlex (f, !equality, !time, outer, r', false) | (Record r, FlexRecord f') => - oneFlex (f', !time', r, outer, true) - | (FlexRecord {fields = fields, spine = s}, - FlexRecord {fields = fields', spine = s'}) => - let - fun yes () = - let - val () = Spine.unify (s, s') - val () = minTime (outer, !time') - val () = minTime (outer', !time) - val fields = - List.fold - (fields, fields', fn ((f, t), ac) => - if List.exists (fields', fn (f', _) => - Field.equals (f, f')) - then ac - else (f, t) :: ac) - in - (Unified, - FlexRecord {fields = fields, - spine = s}) - end - in - unifyRecords - (flexToRecord (fields, s), - flexToRecord (fields', s'), - yes, notUnifiable) - end + oneFlex (f', !equality', !time', outer', r, true) + | (FlexRecord {fields = fields, spine = spine}, + FlexRecord {fields = fields', spine = spine'}) => + let + fun yes () = + let + val () = Spine.unify (spine, spine') + val fields = + List.fold + (fields, fields', fn ((f, t), ac) => + if List.exists (fields', fn (f', _) => + Field.equals (f, f')) + then ac + else (f, t) :: ac) + in + Unified (FlexRecord {fields = fields, + spine = spine}) + end + in + unifyRecords + (flexToFlexToRecord (fields, spine, !equality, !time, outer, spine'), + flexToFlexToRecord (fields', spine', !equality', !time', outer', spine), + yes, notUnifiable) + end | (GenFlexRecord _, _) => genFlexError () | (_, GenFlexRecord _) => genFlexError () - | (Overload o1, Overload o2) => - if Overload.equals (o1, o2) - then (Unified, t) + | (Overload ov1, Overload ov2) => + if Overload.equals (ov1, ov2) + then Unified t else not () | (Record r, Record r') => (case (Srecord.detupleOpt r, @@ -1182,129 +1690,124 @@ (NONE, NONE) => unifyRecords (rigidToRecord r, rigidToRecord r', - fn () => (Unified, Record r), + fn () => Unified (Record r), notUnifiable) | (SOME ts, SOME ts') => if Vector.length ts = Vector.length ts' - then - unifys - (ts, ts', - fn () => (Unified, Record r), - fn (ls, ls') => - notUnifiable (layoutTuple ls, - layoutTuple ls')) - else not () + then unifys + (ts, ts', + fn () => Unified (Record r), + fn (ls, ls') => + notUnifiable + (LayoutPretty.tuple ls, + LayoutPretty.tuple ls')) + else not () | _ => not ()) | (Var a, Var a') => if Tyvar.equals (a, a') - then (Unified, t) - else not () + then Unified t + else not () | _ => not () val res = case res of - NotUnifiable _ => res - | Unified => + NotUnifiable (l, l') => + NotUnifiable (l, l') + | Unified ty => let - val res = Equality.unify (e, e') + val () = Set.union (s, s') + val () = time := Time.min (!time, !time') + val () = equality := Equality.join (!equality, !equality') val () = - case res of - NotUnifiable _ => () - | Unified => - let - val () = Set.union (s, s') - val () = - if Time.<= (!time, !time') - then () - else time := !time' - val () = - Set.:= (s, {equality = e, - plist = plist, - time = time, - ty = t}) - in - () - end + Set.:= (s, {equality = equality, + plist = plist, + time = time, + ty = ty}) in - res + Unified () end in res end) arg and unifyRecords ((fields: (Field.t * t) vector, - extra: Field.t vector, - ensureField: Field.t -> bool), + dots: bool), (fields': (Field.t * t) vector, - extra': Field.t vector, - ensureField': Field.t -> bool), + dots': bool), yes, no) = let - fun extras (extra, ensureField') = - Vector.fold - (extra, [], fn (f, ac) => - if ensureField' f - then ac - else (preError (); (f, true, dontCare) :: ac)) - val ac = extras (extra, ensureField') - val ac' = extras (extra', ensureField) - fun subset (fields, fields', ensureField', ac, ac', - both, skipBoth) = + fun subset (fields, fields', + ac, dots, ac', dots', + skipBoth) = Vector.fold - (fields, (ac, ac', both), fn ((f, t), (ac, ac', both)) => + (fields, (ac, dots, ac', dots'), + fn ((f, t), (ac, dots, ac', dots')) => case Vector.peek (fields', fn (f', _) => Field.equals (f, f')) of NONE => - if ensureField' f - then (ac, ac', both) - else (preError () - ; ((f, true, dontCare' t) :: ac, ac', both)) + ((f, true, dontCare) :: ac, dots, ac', dots') | SOME (_, t') => if skipBoth - then (ac, ac', both) + then (ac, dots, ac', dots') else case unify (t, t') of NotUnifiable (l, l') => - ((f, false, l) :: ac, - (f, false, l') :: ac', - both) - | Unified => (ac, ac', [])) - val (ac, ac', both) = - subset (fields, fields', ensureField', ac, ac', [], false) - val (ac', ac, both) = - subset (fields', fields, ensureField, ac', ac, both, true) + ((f, false, l) :: ac, dots, + (f, false, l') :: ac', dots') + | Unified _ => (ac, true, ac', true)) + val (ac, dots, ac', dots') = + subset (fields, fields', [], dots, [], dots', false) + val (ac', dots', ac, dots) = + subset (fields', fields, ac', dots', ac, dots, true) in case (ac, ac') of ([], []) => yes () - | _ => - let - val _ = preError () - fun doit ac = - layoutRecord (List.fold - (both, ac, fn ((f, t), ac) => - (f, false, layoutPretty t) :: ac)) - in - no (doit ac, doit ac') - end + | _ => no (LayoutPretty.record (ac, dots), + LayoutPretty.record (ac', dots')) end - val _ = destroy () + val res = unify (t, t') in - unify (t, t') - end - - structure UnifyResult' = - struct - datatype t = - NotUnifiable of Layout.t * Layout.t - | Unified + case res of + NotUnifiable ((l, _), (l', _)) => + let + val {times, tycons, tyvars} = + finishCheckTime () + fun notes () = + if List.isEmpty tycons andalso List.isEmpty tyvars + then Layout.empty + else let + fun doit (xs, lay) = + List.insertionSort + (List.map (xs, fn x => (x, lay x)), + fn ((_, l1), (_, l2)) => + String.<= (Layout.toString l1, + Layout.toString l2)) + val tycons = doit (tycons, layoutPrettyTycon) + val tyvars = doit (tyvars, layoutPrettyTyvar) + val tys = + List.map (tycons, #2) + @ List.map (tyvars, #2) + in + Layout.align + [seq [str "note: ", + if List.length tys > 1 + then str "types would escape their scope: " + else str "type would escape its scope: ", + seq (Layout.separate (tys, ", "))], + (Layout.align o List.map) + (tycons, fn (c, _) => + seq [str "escape from: ", + Region.layout (Tycon.region c)]), + (Layout.align o List.map) + (times, fn t => + seq [str "escape to: ", + Region.layout (Time.region t)])] + end + in + NotUnifiable (l, l', + {notes = notes}) + end + | Unified () => Unified () end - datatype unifyResult = datatype UnifyResult'.t - - val unify = - fn (t, t', z) => - case unify (t, t', z) of - UnifyResult.NotUnifiable ((l, _), (l', _)) => NotUnifiable (l, l') - | UnifyResult.Unified => Unified - local val {get: Tycon.t -> (t * Tycon.t) option, set, ...} = Property.getSetOnce (Tycon.plist, Property.initConst NONE) @@ -1353,7 +1856,7 @@ in Array.toVector a end - fun unsorted (t, fields: (Field.t * 'a) list) = + fun unsorted (t, fields: (Field.t * 'a) list) = let val v = sortFields fields in @@ -1389,8 +1892,12 @@ let val t = Overload.defaultType ov val _ = unify (t, t', - {preError = fn _ => - Error.bug "TypeEnv.Type.simpleHom.overload"}) + {layoutPretty = fn _ => + Error.bug "TypeEnv.Type.simpleHom.overload: layoutPretty", + layoutPrettyTycon = fn _ => + Error.bug "TypeEnv.Type.simpleHom.overload: layoutPrettyTycon", + layoutPrettyTyvar = fn _ => + Error.bug "TypeEnv.Type.simpleHom.overload: layoutPrettyTyvar"}) in con (t, Overload.defaultTycon ov, Vector.new0 ()) end @@ -1399,6 +1906,7 @@ expandOpaque = expandOpaque, flexRecord = flexRecord, genFlexRecord = genFlexRecord, + guard = fn _ => NONE, overload = overload, record = fn (t, r) => record (t, Srecord.toVector r), recursive = recursive, @@ -1415,59 +1923,76 @@ flexes: Type.genFlexRecord list, tyvars: Tyvar.t vector, ty: Type.t} - | Type of Type.t + | Mono of Type.t + + val ty = + fn General {ty, ...} => ty + | Mono ty => ty + + val dest = + fn General {bound, ty, ...} => (bound (), ty) + | Mono ty => (Vector.new0 (), ty) + + val kind = + fn General {bound, ...} => Kind.Arity (Vector.length (bound ())) + | Mono _ => Kind.Arity 0 fun layout s = case s of - Type t => Type.layout t + Mono t => Type.layout t | General {canGeneralize, tyvars, ty, ...} => Layout.record [("canGeneralize", Bool.layout canGeneralize), ("tyvars", Vector.layout Tyvar.layout tyvars), ("ty", Type.layout ty)] - fun layoutPrettyAux (s, {expandOpaque, localTyvarNames}) = - case s of - Type ty => - Type.layoutPrettyAux - (ty, {expandOpaque = expandOpaque, - localTyvarNames = localTyvarNames}) - | General {ty, ...} => - Type.layoutPrettyAux - (ty, {expandOpaque = expandOpaque, - localTyvarNames = localTyvarNames}) - fun layoutPretty s = - layoutPrettyAux (s, {expandOpaque = false, localTyvarNames = true}) - - val bound = - fn General {bound, ...} => bound () - | Type _ => Vector.new0 () - - val bound = - Trace.trace ("TypeEnv.Scheme.bound", layout, Vector.layout Tyvar.layout) - bound - - val ty = - fn General {ty, ...} => ty - | Type ty => ty - - fun dest s = (bound s, ty s) - fun make {canGeneralize, tyvars, ty} = - if 0 = Vector.length tyvars - then Type ty + if Vector.isEmpty tyvars + then Mono ty else General {bound = fn () => tyvars, canGeneralize = canGeneralize, flexes = [], tyvars = tyvars, ty = ty} - val fromType = Type + val fromType = Mono + + fun fromTycon (tycon: Tycon.t): t = + let + val kind = Tycon.kind tycon + val arity = + case kind of + Kind.Arity arity => arity + | Kind.Nary => Error.bug "TypeEnv.Scheme.fromTycon: Kind.Nary" + val tyvars = + Vector.tabulate + (arity, fn _ => + Tyvar.makeNoname {equality = false}) + in + make + {canGeneralize = true, + ty = Type.con (tycon, Vector.map (tyvars, Type.var)), + tyvars = tyvars} + end - fun instantiate' (t: t, subst) = + fun instantiateAux (t: t, subst) = case t of - Type ty => {args = fn () => Vector.new0 (), + Mono ty => {args = fn () => Vector.new0 (), instance = ty} | General {canGeneralize, flexes, tyvars, ty, ...} => + (case Type.deEta (ty, tyvars) of + SOME tycon => + let + val types = + Vector.mapi + (tyvars, fn (i, a) => + subst {canGeneralize = canGeneralize, + equality = Tyvar.isEquality a, + index = i}) + in + {args = fn () => types, + instance = Type.con (tycon, types)} + end + | NONE => let open Type val {destroy = destroyTyvarInst, @@ -1528,6 +2053,7 @@ expandOpaque = false, flexRecord = keep o #1, genFlexRecord = genFlexRecord, + guard = fn _ => NONE, overload = keep o #1, record = record, recursive = recursive, @@ -1561,7 +2087,7 @@ #2) in done - (case Type.toType flex of + (case Type.getTy flex of FlexRecord {fields, ...} => (fn f => peekFields (fields, f)) | GenFlexRecord {extra, fields, ...} => @@ -1583,36 +2109,68 @@ in {args = args, instance = ty} - end + end) fun apply (s, ts) = - #instance (instantiate' (s, fn {index, ...} => Vector.sub (ts, index))) + #instance (instantiateAux (s, fn {index, ...} => Vector.sub (ts, index))) fun instantiate s = - instantiate' + instantiateAux (s, fn {canGeneralize, equality, ...} => Type.unknown {canGeneralize = canGeneralize, equality = if equality - then Equality.truee - else Equality.unknown ()}) + then Equality.True + else Equality.Unknown, + time = Time.now ()}) val instantiate = Trace.trace ("TypeEnv.Scheme.instantiate", layout, Type.layout o #instance) instantiate + fun fresh s = + let + val (tyvars, _) = dest s + val tyvars = Vector.map (tyvars, Tyvar.makeLike) + in + (tyvars, apply (s, (Vector.map (tyvars, Type.var)))) + end + + fun freshEq s = + let + val (tyvars, _) = dest s + val tyvars = Vector.map (tyvars, fn _ => Tyvar.makeNoname {equality = true}) + in + (tyvars, apply (s, (Vector.map (tyvars, Type.var)))) + end + fun admitsEquality s = - Type.admitsEquality - (#instance - (instantiate' - (s, fn {canGeneralize, ...} => - Type.unknown {canGeneralize = canGeneralize, - equality = Equality.truee}))) + let + val (_, ty) = freshEq s + in + case !(Type.equality ty) of + Equality.False => false + | Equality.True => true + | Equality.Unknown => Error.bug "TypeEnv.Scheme.admitsEquality: Unknown" + end val admitsEquality = Trace.trace ("TypeEnv.Scheme.admitsEquality", layout, Bool.layout) admitsEquality - fun haveFrees (v: t vector): bool vector = + fun checkEquality (s, {layoutPrettyTycon}) = + let + fun layoutPrettyTyvar _ = + Error.bug "TypeEnv.Scheme.checkEquality.layoutPrettyTyvar" + val (_, ty) = freshEq s + in + Option.map + (Type.checkEquality + (ty, {layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}), + fn ((l, _), _) => l) + end + + fun haveUnknowns s: bool = let fun con (_, _, bs) = Vector.exists (bs, fn b => b) fun no _ = false @@ -1623,162 +2181,148 @@ flexRecord = fn (_, {fields, ...}) => List.exists (fields, #2), genFlexRecord = (fn (_, {fields, ...}) => List.exists (fields, #2)), + guard = fn _ => NONE, overload = no, record = fn (_, r) => Srecord.exists (r, fn b => b), recursive = no, unknown = fn _ => true, var = no} - val res = - Vector.map (v, fn s => - case s of - General {ty, ...} => hom ty - | Type ty => hom ty) + val res = hom (ty s) val _ = destroy () in res end end -fun generalize (tyvars: Tyvar.t vector) = - let - val genTime = Time.now () - val () = Vector.foreach (tyvars, fn a => tyvarTime a := genTime) - in - fn () => {unable = (Vector.keepAll - (tyvars, fn a => - not (Time.<= (genTime, !(tyvarTime a)))))} - end - -fun close (ensure: Tyvar.t vector, ubd) = +fun 'a close region = let val beforeGen = Time.now () - val () = Time.tick ubd - val genTime = Time.now () - val () = Vector.foreach (ensure, fn a => ignore (tyvarTime a)) - val savedCloses = !Type.newCloses - val () = Type.newCloses := [] + val () = Time.tick region in - Trace.trace - ("TypeEnv.close", - let - open Layout - in - Vector.layout - (fn {isExpansive, ty} => - Layout.record [("isExpansive", Bool.layout isExpansive), - ("ty", Type.layout ty)]) - end, - Layout.ignore) - (fn varTypes => + fn (ensure, + varTypes, + {error: 'a * Layout.t * Tyvar.t list -> unit, + layoutPrettyTycon, + layoutPrettyTyvar}) => let - val () = - Vector.foreach - (varTypes, fn {isExpansive, ty} => - if isExpansive - then Type.minTime (ty, beforeGen) - else ()) - val unable = Vector.keepAll (ensure, fn a => - not (Time.<= (genTime, !(tyvarTime a)))) - val flexes = ref [] - val tyvars = ref (Vector.toList ensure) + local + fun checkTime (t, bound) = + let + val {checkTime, finishCheckTime} = + Type.makeCheckTime {layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar} + in + Option.map (checkTime (t, bound), fn z => + (z, finishCheckTime ())) + end + in + val varTypes = + Vector.map + (varTypes, fn ({isExpansive, ty, var}) => + if not isExpansive + then {isExpansive = false, + ty = ty} + else (case checkTime (ty, beforeGen) of + NONE => {isExpansive = true, + ty = ty} + | SOME (((l, _), _), {tyvars, ...}) => + (error (var, l, tyvars) + ; {isExpansive = false, + ty = ty}))) + end + val tyvars = Vector.toList ensure (* Convert all the unknown types bound at this level into tyvars. * Convert all the FlexRecords bound at this level into * GenFlexRecords. *) - val newCloses = - List.fold - (!Type.newCloses, savedCloses, fn (t as Type.T s, ac) => - let - val {equality, plist, time, ty, ...} = Set.! s - val _ = - if true then () else - let - open Layout - in - outputl (seq [str "considering ", - Type.layout t, - str " with time ", - Time.layout (!time), - str " where getTime is ", - Time.layout genTime], - Out.error) - end - in - if not (Time.<= (genTime, !time)) - then t :: ac - else - case ty of - Type.FlexRecord {fields, spine, ...} => - let - fun newField f = - {field = f, - tyvar = Tyvar.newNoname {equality = false}} - val extra = - let - val all = ref [] - val fields = - List.map (fields, fn (f, _) => (f, ())) - in - fn () => - let - val old = !all - val fields = - List.fold - (old, fields, fn ({field, ...}, ac) => - (field, ()) :: ac) - val new = - Spine.foldOverNew - (spine, fields, old, fn (f, ac) => - (newField f) :: ac) - val () = all := new + val (flexes, tyvars) = + if Vector.forall + (varTypes, fn {ty, ...} => + Time.<= (!(Type.time ty), beforeGen)) + then ([], tyvars) + else let + val flexes = ref [] + val tyvars = ref tyvars + fun flexRecord (t, _) = + let + val (fields, spine) = + case Type.getTy t of + Type.FlexRecord {fields, spine} => + (fields, spine) + | _ => Error.bug "TypeEnv.close.flexRecord: not FlexRecord" + fun newField f = + {field = f, + tyvar = Tyvar.makeNoname {equality = false}} + val extra = + let + val all = ref [] + val fields = + List.map (fields, fn (f, _) => (f, ())) + in + fn () => + let + val old = !all + val fields = + List.fold + (old, fields, fn ({field, ...}, ac) => + (field, ()) :: ac) + val new = + Spine.foldOverNew + (spine, fields, old, fn (f, ac) => + (newField f) :: ac) + val () = all := new + in + new + end + end + val gfr = {extra = extra, + fields = fields, + spine = spine} + val _ = List.push (flexes, gfr) + in + Type.setTy + (t, Type.GenFlexRecord gfr) + end + fun unknown (t, Unknown.T {canGeneralize, ...}) = + if not canGeneralize + then () + else let + val equality = Type.equality t + val a = + Tyvar.makeNoname + {equality = + case !equality of + Equality.False => false + | Equality.True => true + | Equality.Unknown => + (equality := Equality.False + ; false)} + val _ = List.push (tyvars, a) in - new + Type.setTy + (t, Type.Var a) end - end - val gfr = {extra = extra, - fields = fields, - spine = spine} - val _ = List.push (flexes, gfr) - val _ = - Set.:= - (s, {equality = equality, - plist = plist, - time = time, - ty = Type.GenFlexRecord gfr}) - in - ac - end - | Type.Unknown (Unknown.T {canGeneralize, ...}) => - if not canGeneralize - then t :: ac - else - let - val b = - case Equality.toBoolOpt equality of - NONE => - let - val _ = - Equality.unify - (equality, Equality.falsee) - in - false - end - | SOME b => b - val a = Tyvar.newNoname {equality = b} - val _ = List.push (tyvars, a) - val _ = - Set.:= (s, {equality = equality, - plist = PropertyList.new (), - time = time, - ty = Type.Var a}) - in - ac - end - | _ => ac - end) - val _ = Type.newCloses := newCloses - val flexes = !flexes - val tyvars = !tyvars + fun guard t = + if Time.<= (!(Type.time t), beforeGen) + then SOME () + else NONE + val {destroy, hom} = + Type.makeHom + {con = fn _ => (), + expandOpaque = false, + flexRecord = flexRecord, + genFlexRecord = fn _ => (), + guard = guard, + overload = fn _ => (), + record = fn _ => (), + recursive = fn _ => (), + unknown = unknown, + var = fn _ => ()} + val _ = Vector.foreach (varTypes, hom o #ty) + val _ = destroy () + in + (!flexes, !tyvars) + end (* For all fields that were added to the generalized flex records, * add a type variable. *) @@ -1800,7 +2344,7 @@ Vector.map (varTypes, fn {isExpansive, ty} => if isExpansive - then Scheme.Type ty + then Scheme.Mono ty else Scheme.General {bound = bound, canGeneralize = true, flexes = flexes, @@ -1808,10 +2352,8 @@ ty = ty}) in {bound = bound, - schemes = schemes, - unable = unable} + schemes = schemes} end - ) end structure Type = @@ -1822,7 +2364,7 @@ let fun tuple (t, ts) = if 1 = Vector.length ts - then Vector.sub (ts, 0) + then Vector.first ts else con (t, Tycon.tuple, ts) in simpleHom {con = con, @@ -1893,12 +2435,34 @@ res end + fun copy t = + hom (t, {con = Type.con, + expandOpaque = false, + record = Type.record, + replaceSynonyms = false, + var = Type.var}) + val unify = - fn (t1: t, t2: t, {error: Layout.t * Layout.t -> unit, - preError: unit -> unit}) => - case unify (t1, t2, {preError = preError}) of - NotUnifiable z => error z - | Unified => () + fn (t1, t2, {error, layoutPretty, layoutPrettyTycon, layoutPrettyTyvar}) => + case unify (t1, t2, {layoutPretty = layoutPretty, + layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar}) of + NotUnifiable (l1, l2, extra) => error (l1, l2, extra) + | Unified () => () + + val checkTime = + fn (t, bound, {layoutPrettyTycon, layoutPrettyTyvar}) => + let + val {checkTime, finishCheckTime} = + makeCheckTime {layoutPrettyTycon = layoutPrettyTycon, + layoutPrettyTyvar = layoutPrettyTyvar} + in + Option.map + (checkTime (t, bound), fn ((l, _), (ty, _)) => + (l, ty, let val {tycons, tyvars, ...} = finishCheckTime () + in {tycons = tycons, tyvars = tyvars} + end)) + end end end diff -Nru mlton-20130715/mlton/elaborate/type-env.sig mlton-20210117+dfsg/mlton/elaborate/type-env.sig --- mlton-20130715/mlton/elaborate/type-env.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/elaborate/type-env.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -20,15 +21,20 @@ type t val now: unit -> t + val tick: {region: Region.t} -> unit end structure Type: sig include TYPE_OPS - val admitsEquality: t -> bool (* can two types be unified? not side-effecting. *) val canUnify: t * t -> bool + val checkTime: + t * Time.t * {layoutPrettyTycon: Tycon.t -> Layout.t, + layoutPrettyTyvar: Tyvar.t -> Layout.t} + -> (Layout.t * t * {tycons: Tycon.t list, tyvars: Tyvar.t list}) option + val copy: t -> t val deEta: t * Tyvar.t vector -> Tycon.t option val deRecord: t -> (Record.Field.t * t) vector val flexRecord: t SortedRecord.t -> t * (unit -> bool) @@ -43,29 +49,32 @@ val isCPointer: t -> bool val isInt: t -> bool val isUnit: t -> bool + val isUnknown: t -> bool val layout: t -> Layout.t - val layoutPrettyAux: t * {expandOpaque: bool, localTyvarNames: bool} -> Layout.t - val layoutPretty: t -> Layout.t + val layoutPretty: + t * {expandOpaque: bool, + layoutPrettyTycon: Tycon.t -> Layout.t, + layoutPrettyTyvar: Tyvar.t -> Layout.t} + -> LayoutPretty.t val makeHom: {con: Tycon.t * 'a vector -> 'a, expandOpaque: bool, var: Tyvar.t -> 'a} -> {destroy: unit -> unit, hom: t -> 'a} val makeLayoutPretty: - {expandOpaque:bool, - localTyvarNames: bool} -> {destroy: unit -> unit, - lay: t -> Layout.t * ({isChar: bool} - * Tycon.BindingStrength.t)} - (* minTime (t, time) makes every component of t occur no later than - * time. This will display a type error message if time is before - * the definition time of some component of t. - *) - val minTime: t * Time.t -> unit + {expandOpaque: bool, + layoutPrettyTycon: Tycon.t -> Layout.t, + layoutPrettyTyvar: Tyvar.t -> Layout.t} + -> {destroy: unit -> unit, + layoutPretty: t -> LayoutPretty.t} val new: unit -> t val record: t SortedRecord.t -> t (* make two types identical (recursively). side-effecting. *) val unify: - t * t * {error: Layout.t * Layout.t -> unit, - preError: unit -> unit} -> unit + t * t * {error: Layout.t * Layout.t * {notes: unit -> Layout.t} -> unit, + layoutPretty: t -> LayoutPretty.t, + layoutPrettyTycon: Tycon.t -> Layout.t, + layoutPrettyTyvar: Tyvar.t -> Layout.t} + -> unit val unresolvedChar: unit -> t val unresolvedInt: unit -> t val unresolvedReal: unit -> t @@ -77,39 +86,77 @@ sharing type Type.realSize = RealSize.t sharing type Type.wordSize = WordSize.t sharing type Type.tycon = Tycon.t + structure Scheme: sig type t val admitsEquality: t -> bool val apply: t * Type.t vector -> Type.t - val bound: t -> Tyvar.t vector + val checkEquality: t * {layoutPrettyTycon: Tycon.t -> Layout.t} -> Layout.t option val dest: t -> Tyvar.t vector * Type.t + val fresh: t -> Tyvar.t vector * Type.t + val fromTycon: Tycon.t -> t val fromType: Type.t -> t - val haveFrees: t vector -> bool vector + val haveUnknowns: t -> bool val instantiate: t -> {args: unit -> Type.t vector, instance: Type.t} + val kind: t -> TyconKind.t val layout: t -> Layout.t - val layoutPrettyAux: - t * {expandOpaque: bool, - localTyvarNames: bool} -> Layout.t - val layoutPretty: t -> Layout.t val make: {canGeneralize: bool, ty: Type.t, tyvars: Tyvar.t vector} -> t val ty: t -> Type.t end + structure TyvarExt: + sig + type t + val makeString: string * {equality: bool} -> t + val makeNoname: {equality: bool} -> t + val makeLayoutPretty: + unit -> + {destroy: unit -> unit, + layoutPretty: t -> Layout.t, + localInit: t vector -> unit} + val makeLayoutPrettyLocal: + unit -> + {destroy: unit -> unit, + layoutPretty: t -> Layout.t, + reset: unit -> unit} + val makeLike: t -> t + end + sharing type TyvarExt.t = Tyvar.t + + structure TyconExt: + sig + type t + val admitsEquality: t -> AdmitsEquality.t + val kind: t -> TyconKind.t + val layoutPrettyDefault: t -> Layout.t + val make: {admitsEquality: AdmitsEquality.t, + kind: TyconKind.t, + name: string, + prettyDefault: string, + region: Region.t} -> t + val makeBogus: {name: string, + kind: TyconKind.t, + region: Region.t option} -> t + val makeLike: t -> t + val region: t -> Region.t + val scopeNew: (unit -> 'a) -> ('a * t list) + val setAdmitsEquality: t * AdmitsEquality.t -> unit + val setOpaqueExpansion: t * (Type.t vector -> Type.t) -> unit + end + sharing type TyconExt.t = Tycon.t + val close: - Tyvar.t vector * {useBeforeDef: Tycon.t -> unit} - -> {isExpansive: bool, ty: Type.t} vector + {region: Region.t} + -> (Tyvar.t vector + * {isExpansive: bool, ty: Type.t, var: 'a} vector + * {error: 'a * Layout.t * Tyvar.t list -> unit, + layoutPrettyTycon: Tycon.t -> Layout.t, + layoutPrettyTyvar: Tyvar.t -> Layout.t}) -> {bound: unit -> Tyvar.t vector, - schemes: Scheme.t vector, - unable: Tyvar.t vector} - val generalize: Tyvar.t vector -> unit -> {unable: Tyvar.t vector} - val initAdmitsEquality: Tycon.t * Tycon.AdmitsEquality.t -> unit - val setOpaqueTyconExpansion: Tycon.t * (Type.t vector -> Type.t) -> unit - val tick: {useBeforeDef: Tycon.t -> unit} -> unit - val tyconAdmitsEquality: Tycon.t -> Tycon.AdmitsEquality.t ref - val tyconRegion: Tycon.t -> Region.t option ref + schemes: Scheme.t vector} end diff -Nru mlton-20130715/mlton/front-end/front-end.fun mlton-20210117+dfsg/mlton/front-end/front-end.fun --- mlton-20130715/mlton/front-end/front-end.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/front-end.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -40,6 +41,17 @@ Ast.Program.T [] end val () = Ast.Program.checkSyntax result + + (* Outputs AST to a file if Control.keepAST is true *) + val () = + if !Control.keepAST + then File.withAppend + (concat [!Control.inputFile, ".ast"], fn outputStream => + (Out.outputl (outputStream, concat ["File: ", Source.name source]); + Layout.output (Ast.Program.layout result, outputStream); + Out.newline outputStream; + Out.newline outputStream)) + else () in result end diff -Nru mlton-20130715/mlton/front-end/front-end.sig mlton-20210117+dfsg/mlton/front-end/front-end.sig --- mlton-20130715/mlton/front-end/front-end.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/front-end.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/front-end/Makefile mlton-20210117+dfsg/mlton/front-end/Makefile --- mlton-20130715/mlton/front-end/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/Makefile 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -## Copyright (C) 2009 Matthew Fluet. - # Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - # Jagannathan, and Stephen Weeks. - # Copyright (C) 1997-2000 NEC Research Institute. - # - # MLton is released under a BSD-style license. - # See the file MLton-LICENSE for details. - ## - -SRC := $(shell cd ../.. && pwd) -BUILD := $(SRC)/build -BIN := $(BUILD)/bin -PATH := $(BIN):$(shell echo $$PATH) - -ifeq (mllex, $(shell if mllex >/dev/null 2>&1 || [ $$? != 127 ] ; then echo mllex; fi)) -MLLEX := mllex -else -ifeq (ml-lex, $(shell if ml-lex >/dev/null 2>&1 || [ $$? != 127 ] ; then echo ml-lex; fi)) -MLLEX := ml-lex -else -MLLEX := no-mllex -endif -endif - -ifeq (mlyacc, $(shell if mlyacc >/dev/null 2>&1 || [ $$? != 127 ] ; then echo mlyacc; fi)) -MLYACC := mlyacc -else -ifeq (ml-yacc, $(shell if ml-lex >/dev/null 2>&1 || [ $$? != 127 ] ; then echo ml-yacc; fi)) -MLYACC := ml-yacc -else -MLYACC := no-mlyacc -endif -endif - -.PHONY: all -all: ml.lex.sml ml.grm.sig ml.grm.sml mlb.lex.sml mlb.grm.sig mlb.grm.sml - -.PHONY: clean -clean: - ../../bin/clean - -%.lex.sml: %.lex - rm -f $@ - $(MLLEX) $< - chmod -w $@ - -%.grm.sig %.grm.sml: %.grm - rm -f $<.* - $(MLYACC) $< - chmod -w $<.* diff -Nru mlton-20130715/mlton/front-end/mlb-front-end.fun mlton-20210117+dfsg/mlton/front-end/mlb-front-end.fun --- mlton-20130715/mlton/front-end/mlb-front-end.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/mlb-front-end.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2015 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -52,6 +52,17 @@ Ast.Basdec.empty end val () = Ast.Basdec.checkSyntax result + + (* Outputs AST to a file if Control.keepAST is true *) + val () = + if !Control.keepAST + then File.withAppend + (concat [!Control.inputFile, ".ast"], fn outputStream => + (Out.outputl (outputStream, concat ["File: ", Source.name source]); + Layout.output (Ast.Basdec.layout result, outputStream); + Out.newline outputStream; + Out.newline outputStream)) + else () in result end @@ -82,8 +93,8 @@ val cwd = Dir.current () val relativize = SOME cwd val state = {cwd = cwd, relativize = relativize, seen = []} - val psi : (File.t * Ast.Basdec.t Promise.t) HashSet.t = - HashSet.new {hash = String.hash o #1} + val psi : (File.t, Ast.Basdec.t Promise.t) HashTable.t = + HashTable.new {hash = String.hash, equals = String.equals} local val pathMap = Control.mlbPathMap () @@ -217,28 +228,21 @@ File.layout f]))) ; Ast.Basdec.empty end) - else - let - val (_, basdec) = - HashSet.lookupOrInsert - (psi, String.hash fileAbs, fn (fileAbs', _) => - String.equals (fileAbs, fileAbs'), fn () => - let - val cwd = OS.Path.dir fileAbs - val basdec = - Promise.delay - (fn () => - wrapLexAndParse - ({cwd = cwd, - relativize = relativize, - seen = seen'}, - lexAndParseFile, fileUse)) - in - (fileAbs, basdec) - end) - in - Promise.force basdec - end + else + (Promise.force o HashTable.lookupOrInsert) + (psi, fileAbs, + fn () => + let + val cwd = OS.Path.dir fileAbs + in + Promise.delay + (fn () => + wrapLexAndParse + ({cwd = cwd, + relativize = relativize, + seen = seen'}, + lexAndParseFile, fileUse)) + end) end}))) and lexAndParseProgOrMLB {cwd, relativize, seen} (fileOrig: File.t, reg: Region.t) = diff -Nru mlton-20130715/mlton/front-end/mlb-front-end.sig mlton-20210117+dfsg/mlton/front-end/mlb-front-end.sig --- mlton-20130715/mlton/front-end/mlb-front-end.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/mlb-front-end.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/front-end/mlb.grm mlton-20210117+dfsg/mlton/front-end/mlb.grm --- mlton-20130715/mlton/front-end/mlb.grm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/mlb.grm 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/front-end/mlb.lex mlton-20210117+dfsg/mlton/front-end/mlb.lex --- mlton-20130715/mlton/front-end/mlb.lex 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/mlb.lex 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2016,2017 Matthew Fluet. * Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -13,76 +13,178 @@ type arg = lexarg type ('a,'b) token = ('a,'b) Tokens.token -val charlist: string list ref = ref [] -val colNum: int ref = ref 0 -val commentLevel: int ref = ref 0 -val commentStart = ref SourcePos.bogus -val lineFile: File.t ref = ref "" -val lineNum: int ref = ref 0 -val stringStart = ref SourcePos.bogus - -fun lineDirective (source, file, yypos) = - Source.lineDirective (source, file, - {lineNum = !lineNum, - lineStart = yypos - !colNum}) -fun addString (s: string) = charlist := s :: (!charlist) -fun addChar (c: char) = addString (String.fromChar c) - -fun inc (ri as ref (i: int)) = (ri := i + 1) -fun dec (ri as ref (i: int)) = (ri := i-1) - -fun error (source, left, right, msg) = - Control.errorStr (Region.make {left = Source.getPos (source, left), - right = Source.getPos (source, right)}, - msg) - -fun stringError (source, right, msg) = - Control.errorStr (Region.make {left = !stringStart, - right = Source.getPos (source, right)}, - msg) +fun lastPos (yypos, yytext) = yypos + size yytext - 1 -val eof: lexarg -> lexresult = - fn {source, ...} => +fun tok (t, x, s, l) = let - val pos = Source.lineStart source - val _ = - if !commentLevel > 0 - then Control.errorStr (Region.make {left = !commentStart, - right = pos}, - "unclosed comment") - else () + val left = Source.getPos (s, l) + val right = Source.getPos (s, lastPos (l, x)) in - Tokens.EOF (pos, pos) + t (left, right) end -val size = String.size +fun tok' (t, x, s, l) = tok (fn (l, r) => t (x, l, r), x, s, l) -fun tok (t, s, l, r) = +fun error' (left, right, msg) = + Control.errorStr (Region.make {left = left, right = right}, msg) +fun error (source, left, right, msg) = + error' (Source.getPos (source, left), Source.getPos (source, right), msg) + + +(* Comments *) +local + val commentErrors: string list ref = ref [] + val commentLeft = ref SourcePos.bogus + val commentStack: (int -> unit) list ref = ref [] +in + fun addCommentError msg = + List.push (commentErrors, msg) + val inComment = fn () => not (List.isEmpty (!commentStack)) + fun startComment (source, yypos, th) = + if inComment () + then List.push (commentStack, fn _ => th ()) + else (commentErrors := [] + ; commentLeft := Source.getPos (source, yypos) + ; List.push (commentStack, fn yypos => + (List.foreach (!commentErrors, fn msg => + error' (!commentLeft, + Source.getPos (source, yypos), + msg)) + ; th ()))) + fun finishComment yypos = + (List.pop commentStack) yypos +end + + +(* Line Directives *) +local + val lineDirCol: int ref = ref ~1 + val lineDirFile: File.t option ref = ref NONE + val lineDirLine: int ref = ref ~1 +in + fun startLineDir (source, yypos, th) = + let + val _ = lineDirCol := ~1 + val _ = lineDirFile := NONE + val _ = lineDirLine := ~1 + in + startComment (source, yypos, th) + end + fun addLineDirLineCol (line, col) = + let + val _ = lineDirLine := line + val _ = lineDirCol := col + in + () + end + fun addLineDirFile file = + let + val _ = lineDirFile := SOME file + in + () + end + fun finishLineDir (source, yypos) = + let + val col = !lineDirCol + val file = !lineDirFile + val line = !lineDirLine + val _ = lineDirCol := ~1 + val _ = lineDirFile := NONE + val _ = lineDirLine := ~1 + in + finishComment yypos + ; Source.lineDirective (source, file, + {lineNum = line, + lineStart = yypos + 1 - col}) + end +end + + +(* Text Constants *) +local + val chars: char list ref = ref [] + val inText = ref false + val textLeft = ref SourcePos.bogus + val textFinishFn: (string * SourcePos.t * SourcePos.t -> lexresult) ref = ref (fn _ => raise Fail "textFinish") +in + fun startText (tl, tf) = + let + val _ = chars := [] + val _ = inText := true + val _ = textLeft := tl + val _ = textFinishFn := tf + in + () + end + fun finishText textRight = + let + val cs = String.fromListRev (!chars) + val tl = !textLeft + val tr = textRight + val tf = !textFinishFn + val _ = chars := [] + val _ = inText := false + val _ = textLeft := SourcePos.bogus + val _ = textFinishFn := (fn _ => raise Fail "textFinish") + in + tf (cs, tl, tr) + end + fun addTextString (s: string) = + chars := String.fold (s, !chars, fn (c, ac) => c :: ac) + val inText = fn () => !inText +end +fun addTextChar (c: char) = addTextString (String.fromChar c) +fun addTextNumEsc (source, yypos, yytext, drop, radix): unit = let - val l = Source.getPos (s, l) - val r = Source.getPos (s, r) + val left = yypos + val right = lastPos (left, yytext) + fun err () = + error (source, left, right, "Illegal numeric escape in text constant") + in + case StringCvt.scanString (fn r => IntInf.scan (radix, r)) (String.dropPrefix (yytext, drop)) of + NONE => err () + | SOME i => if i > 255 + then err () + else addTextChar (Char.chr (IntInf.toInt i)) + end +fun addTextUTF8 (source, yypos, yytext): unit = + addTextString yytext + + +(* EOF *) +val eof: lexarg -> lexresult = + fn {source, ...} => + let + val _ = Source.newline (source, ~1) + val pos = Source.getPos (source, ~1) val _ = - if true - then () - else - print (concat ["tok (", - SourcePos.toString l, - ", " , - SourcePos.toString r, - ")\n"]) + if inComment () + then error' (pos, SourcePos.bogus, "Unclosed comment at end of file") + else () + val _ = + if inText () + then error' (pos, SourcePos.bogus, "Unclosed text constant at end of file") + else () in - t (l, r) + Tokens.EOF (pos, SourcePos.bogus) end -fun tok' (t, x, s, l) = tok (fn (l, r) => t (x, l, r), s, l, l + size x) %% -%reject -%s A S F L LL LLC LLCQ; +%full + +%s TEXT TEXT_FMT BLOCK_COMMENT LINE_COMMENT LINE_DIR1 LINE_DIR2 LINE_DIR3 LINE_DIR4; + %header (functor MLBLexFun (structure Tokens : MLB_TOKENS)); %arg ({source}); -alphanum=[A-Za-z'_0-9]*; -alphanumId=[A-Za-z]{alphanum}; + +ws=\t|"\011"|"\012"|" "; +cr="\013"; +nl="\010"; +eol=({cr}{nl}|{nl}|{cr}); + +alphanum=[A-Za-z0-9'_]; +alphanumId=[A-Za-z]{alphanum}*; id={alphanumId}; pathvar="$("([A-Z_][A-Z0-9_]*)")"; @@ -93,156 +195,166 @@ path={relpath}|{abspath}; file={path}{filename}; -ws=("\012"|[\t\ ])*; -nrws=("\012"|[\t\ ])+; -cr="\013"; -nl="\010"; -eol=({cr}{nl}|{nl}|{cr}); - +decDigit=[0-9]; hexDigit=[0-9a-fA-F]; %% -{ws} => (continue ()); -{eol} => (Source.newline (source, yypos); continue ()); -"_prim" - => (tok (Tokens.PRIM, source, yypos, yypos + 4)); -"," => (tok (Tokens.COMMA, source, yypos, yypos + 1)); -";" => (tok (Tokens.SEMICOLON, source, yypos, yypos + 1)); -"=" => (tok (Tokens.EQUALOP, source, yypos, yypos + 1)); -"ann" => (tok (Tokens.ANN, source, yypos, yypos + 3)); -"and" => (tok (Tokens.AND, source, yypos, yypos + 3)); -"bas" => (tok (Tokens.BAS, source, yypos, yypos + 3)); -"basis" - => (tok (Tokens.BASIS, source, yypos, yypos + 5)); -"end" => (tok (Tokens.END, source, yypos, yypos + 3)); -"functor" - => (tok (Tokens.FUNCTOR, source, yypos, yypos + 7)); -"in" => (tok (Tokens.IN, source, yypos, yypos + 2)); -"let" => (tok (Tokens.LET, source, yypos, yypos + 3)); -"local" - => (tok (Tokens.LOCAL, source, yypos, yypos + 5)); -"open" => (tok (Tokens.OPEN, source, yypos, yypos + 4)); -"signature" - => (tok (Tokens.SIGNATURE, source, yypos, yypos + 9)); -"structure" - => (tok (Tokens.STRUCTURE, source, yypos, yypos + 9)); -{id} => (tok' (Tokens.ID, yytext, source, yypos)); +{ws}+ => (continue ()); +{eol} => (Source.newline (source, lastPos (yypos, yytext)); continue ()); + +"_prim" => (tok (Tokens.PRIM, yytext, source, yypos)); + +"," => (tok (Tokens.COMMA, yytext, source, yypos)); +";" => (tok (Tokens.SEMICOLON, yytext, source, yypos)); +"=" => (tok (Tokens.EQUALOP, yytext, source, yypos)); + +"and" => (tok (Tokens.AND, yytext, source, yypos)); +"ann" => (tok (Tokens.ANN, yytext, source, yypos)); +"bas" => (tok (Tokens.BAS, yytext, source, yypos)); +"basis" => (tok (Tokens.BASIS, yytext, source, yypos)); +"end" => (tok (Tokens.END, yytext, source, yypos)); +"functor" => (tok (Tokens.FUNCTOR, yytext, source, yypos)); +"in" => (tok (Tokens.IN, yytext, source, yypos)); +"let" => (tok (Tokens.LET, yytext, source, yypos)); +"local" => (tok (Tokens.LOCAL, yytext, source, yypos)); +"open" => (tok (Tokens.OPEN, yytext, source, yypos)); +"signature" => (tok (Tokens.SIGNATURE, yytext, source, yypos)); +"structure" => (tok (Tokens.STRUCTURE, yytext, source, yypos)); + +{id} => (tok' (Tokens.ID, yytext, source, yypos)); {file} => (tok' (Tokens.FILE, yytext, source, yypos)); -\" => (charlist := [""] - ; stringStart := Source.getPos (source, yypos) - ; YYBEGIN S - ; continue ()); -"(*#line"{nrws} - => (YYBEGIN L - ; commentStart := Source.getPos (source, yypos) - ; commentLevel := 1 - ; continue ()); -"(*" => (YYBEGIN A - ; commentLevel := 1 - ; commentStart := Source.getPos (source, yypos) - ; continue ()); -. => (error (source, yypos, yypos + 1, "illegal token") ; - continue ()); - -[0-9]+ => (YYBEGIN LL - ; (lineNum := valOf (Int.fromString yytext) - ; colNum := 1) - handle Overflow => YYBEGIN A - ; continue ()); -\. => ((* cheat: take n > 0 dots *) continue ()); -[0-9]+ => (YYBEGIN LLC - ; (colNum := valOf (Int.fromString yytext)) - handle Overflow => YYBEGIN A - ; continue ()); -. => (YYBEGIN LLC; continue () - (* note hack, since ml-lex chokes on the empty string for 0* *)); -"*)" => (YYBEGIN INITIAL - ; lineDirective (source, NONE, yypos + 2) - ; commentLevel := 0; charlist := []; continue ()); -{ws}\" => (YYBEGIN LLCQ; continue ()); -[^\"]* => (lineFile := yytext; continue ()); -\""*)" => (YYBEGIN INITIAL - ; lineDirective (source, SOME (!lineFile), yypos + 3) - ; commentLevel := 0; charlist := []; continue ()); -"*)" - => (YYBEGIN INITIAL; commentLevel := 0; charlist := []; continue ()); -. => (YYBEGIN A; continue ()); - -"(*" => (inc commentLevel; continue ()); -\n => (Source.newline (source, yypos) ; continue ()); -"*)" => (dec commentLevel - ; if 0 = !commentLevel then YYBEGIN INITIAL else () - ; continue ()); -. => (continue ()); - -\" => (let - val s = concat (rev (!charlist)) - val _ = charlist := nil - fun make (t, v) = - t (v, !stringStart, Source.getPos (source, yypos + 1)) - in YYBEGIN INITIAL - ; make (Tokens.STRING, s) - end); -\\a => (addChar #"\a"; continue ()); -\\b => (addChar #"\b"; continue ()); -\\f => (addChar #"\f"; continue ()); -\\n => (addChar #"\n"; continue ()); -\\r => (addChar #"\r"; continue ()); -\\t => (addChar #"\t"; continue ()); -\\v => (addChar #"\v"; continue ()); -\\\^[@-_] => (addChar (Char.chr(Char.ord(String.sub(yytext, 2)) - -Char.ord #"@")) - ; continue ()); -\\\^. => (error (source, yypos, yypos + 2, - "illegal control escape; must be one of @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_") - ; continue ()); -\\[0-9]{3} => (let - val x = - Char.ord(String.sub(yytext, 1)) * 100 - + Char.ord(String.sub(yytext, 2)) * 10 - + Char.ord(String.sub(yytext, 3)) - - (Char.ord #"0") * 111 - in (if x > 255 - then stringError (source, yypos, - "illegal ascii escape") - else addChar(Char.chr x); - continue ()) - end); -\\u{hexDigit}{4} - => (let - val x = - StringCvt.scanString - (Pervasive.Int.scan StringCvt.HEX) - (String.substring (yytext, 2, 4)) - fun err () = - stringError (source, yypos, - "illegal unicode escape") - in (case x of - SOME x => if x > 255 - then err() - else addChar(Char.chr x) - | _ => err()) - ; continue () - end); -\\\" => (addString "\""; continue ()); -\\\\ => (addString "\\"; continue ()); -\\{nrws} => (YYBEGIN F; continue ()); -\\{eol} => (Source.newline (source, yypos) ; YYBEGIN F ; continue ()); -\\ => (stringError (source, yypos, "illegal string escape") - ; continue ()); -{eol} => (Source.newline (source, yypos) - ; stringError (source, yypos, "unclosed string") - ; continue ()); -" "|[\033-\126] - => (addString yytext; continue ()); -. => (stringError (source, yypos + 1, "illegal character in string") - ; continue ()); - -{eol} => (Source.newline (source, yypos) ; continue ()); -{ws} => (continue ()); -\\ => (YYBEGIN S - ; stringStart := Source.getPos (source, yypos) - ; continue ()); -. => (stringError (source, yypos, "unclosed string") - ; continue ()); +"\"" => + (startText (Source.getPos (source, yypos), fn (s, l, r) => + (YYBEGIN INITIAL; + Tokens.STRING (s, l, r))) + ; YYBEGIN TEXT + ; continue ()); + +"\"" => (finishText (Source.getPos (source, lastPos (yypos, yytext)))); +" "|!|[\035-\091]|[\093-\126] => + (addTextString yytext; continue ()); +[\192-\223][\128-\191] => + (addTextUTF8 (source, yypos, yytext); continue()); +[\224-\239][\128-\191][\128-\191] => + (addTextUTF8 (source, yypos, yytext); continue()); +[\240-\247][\128-\191][\128-\191][\128-\191] => + (addTextUTF8 (source, yypos, yytext); continue()); +\\a => (addTextChar #"\a"; continue ()); +\\b => (addTextChar #"\b"; continue ()); +\\t => (addTextChar #"\t"; continue ()); +\\n => (addTextChar #"\n"; continue ()); +\\v => (addTextChar #"\v"; continue ()); +\\f => (addTextChar #"\f"; continue ()); +\\r => (addTextChar #"\r"; continue ()); +\\\^[@-_] => (addTextChar (Char.chr(Char.ord(String.sub(yytext, 2)) - Char.ord #"@")); + continue ()); +\\\^. => (error (source, yypos, yypos + 2, "Illegal control escape in text constant; must be one of @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"); + continue ()); +\\[0-9]{3} => (addTextNumEsc (source, yypos, yytext, 1, + StringCvt.DEC) + ; continue ()); +\\u{hexDigit}{4} => + (addTextNumEsc (source, yypos, yytext, 2, + StringCvt.HEX) + ; continue ()); +\\U{hexDigit}{8} => + (addTextNumEsc (source, yypos, yytext, 2, + StringCvt.HEX) + ; continue ()); +"\\\"" => (addTextString "\""; continue ()); +\\\\ => (addTextString "\\"; continue ()); +\\{ws}+ => (YYBEGIN TEXT_FMT; continue ()); +\\{eol} => (Source.newline (source, lastPos (yypos, yytext)); YYBEGIN TEXT_FMT; continue ()); +\\ => (error (source, yypos, yypos + 1, "Illegal escape in text constant") + ; continue ()); +{eol} => (error (source, yypos, lastPos (yypos, yytext), "Unclosed text constant at end of line") + ; Source.newline (source, lastPos (yypos, yytext)) + ; continue ()); +. => (error (source, yypos, yypos, "Illegal character in text constant") + ; continue ()); + +{ws}+ => (continue ()); +{eol} => (Source.newline (source, lastPos (yypos, yytext)); continue ()); +\\ => (YYBEGIN TEXT; continue ()); +. => (error (source, yypos, yypos, "Illegal formatting character in text continuation") + ; continue ()); + + +"(*)" => + (startComment (source, yypos, fn () => + YYBEGIN INITIAL) + ; YYBEGIN LINE_COMMENT + ; continue ()); +"(*" => + (startComment (source, yypos, fn () => + YYBEGIN INITIAL) + ; YYBEGIN BLOCK_COMMENT + ; continue ()); + +{eol} => + (finishComment (lastPos (yypos, yytext)) + ; Source.newline (source, lastPos (yypos, yytext)) + ; continue ()); +. => + (continue ()); + +"(*)" => + (startComment (source, yypos, fn () => + YYBEGIN BLOCK_COMMENT) + ; YYBEGIN LINE_COMMENT + ; continue ()); +"(*" => + (startComment (source, yypos, fn () => + YYBEGIN BLOCK_COMMENT) + ; YYBEGIN BLOCK_COMMENT + ; continue ()); +"*)" => + (finishComment (lastPos (yypos, yytext)) + ; continue ()); +{eol} => + (Source.newline (source, lastPos (yypos, yytext)) + ; continue ()); +. => + (continue ()); + + +"(*#line"{ws}+ => + (startLineDir (source, yypos, fn () => + YYBEGIN INITIAL) + ; YYBEGIN LINE_DIR1 + ; continue ()); + +{decDigit}+"."{decDigit}+ => + (let + fun err () = + (addCommentError "Illegal line directive" + ; YYBEGIN BLOCK_COMMENT) + in + case String.split (yytext, #".") of + [line, col] => + (YYBEGIN LINE_DIR2 + ; addLineDirLineCol (valOf (Int.fromString line), valOf (Int.fromString col)) + handle Overflow => err () | Option => err () + ; continue ()) + | _ => (err (); continue ()) + end); +{ws}+"\"" => + (YYBEGIN LINE_DIR3 + ; continue ()); +[^"]*"\"" => + (addLineDirFile (String.dropLast yytext) + ; YYBEGIN LINE_DIR4 + ; continue ()); +{ws}*"*)" => + (finishLineDir (source, lastPos (yypos, yytext)) + ; continue ()); +. => + (addCommentError "Illegal line directive" + ; YYBEGIN BLOCK_COMMENT + ; continue ()); + + +. => + (error (source, yypos, yypos, "Illegal character") + ; continue ()); diff -Nru mlton-20130715/mlton/front-end/ml.grm mlton-20210117+dfsg/mlton/front-end/ml.grm --- mlton-20130715/mlton/front-end/ml.grm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/ml.grm 2021-12-28 17:19:36.000000000 +0000 @@ -1,13 +1,33 @@ -(* Heavily modified from SML/NJ sources by sweeks@sweeks.com *) +(* Heavily modified from SML/NJ sources. *) (* ml.grm * * Copyright 1989,1992 by AT&T Bell Laboratories + * + * SML/NJ is released under a HPND-style license. + * See the file NJ-LICENSE for details. + *) + +(* Copyright (C) 2008,2009,2014-2017,2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. *) fun reg (left, right) = Region.make {left = left, right = right} fun error (reg, msg) = Control.error (reg, Layout.str msg, Layout.empty) +local + open Control.Elaborate +in + val allowOptBar = fn () => current allowOptBar + val allowOptSemicolon = fn () => current allowOptSemicolon + val allowRecordPunExps = fn () => current allowRecordPunExps +end + open Ast structure Field = Record.Field structure Srecord = SortedRecord @@ -16,7 +36,8 @@ struct open Type - val tuple = Record o Srecord.tuple + fun tuple ts = + Record (Record.tuple (Vector.map (ts, fn t => (Region.bogus, t)))) val unit = tuple (Vector.new0 ()) @@ -38,7 +59,7 @@ fun tuple ps = if 1 = Vector.length ps - then node (Vector.sub (ps, 0)) + then Paren (Vector.sub (ps, 0)) else Tuple ps val unit = tuple (Vector.new0 ()) @@ -92,8 +113,8 @@ fun tuple es = if 1 = Vector.length es - then node (Vector.sub (es, 0)) - else Record (Record.tuple es) + then Paren (Vector.sub (es, 0)) + else Record (Record.tuple (Vector.map (es, fn e => (Region.bogus, e)))) val unit = tuple (Vector.new0 ()) end @@ -128,12 +149,10 @@ (Empty, _) => s' | (_, Empty) => s | (_, Seq (s1, s2)) => reg (Seq (seq (s, s1), s2)) - | (_, Sharing {spec, equations}) => - reg (Sharing {spec = seq (s, spec), equations = equations}) + | (_, Sharing {spec, equation}) => + reg (Sharing {spec = seq (s, spec), equation = equation}) | _ => reg (Seq (s, s')) end - -(* val seq = Trace.trace2 ("Spec.seq", layout, layout, layout) seq *) end fun consTopdec (d, dss) = @@ -150,13 +169,12 @@ type db = {tyvars: Tyvar.t vector, tycon: Tycon.t, cons: (Con.t * Type.t option) vector} +type tb = {def: Type.t, + tycon: Tycon.t, + tyvars: Tyvar.t vector} type strdesc = Strid.t * Sigexp.t -type wherespec = {tyvars: Tyvar.t vector, - longtycon: Longtycon.t, - ty: Type.t} - type typdesc = {tyvars: Tyvar.t vector, tycon: Tycon.t} @@ -181,42 +199,51 @@ type rvb = {pat: Pat.t, match: Match.t} -fun ensureNonqualified (ss: Symbol.t list, r: Region.t): Symbol.t * Region.t = - case ss of - [s] => (s, r) - | _ => (error (r, "expected nonqualified id") - ; (Symbol.bogus, r)) - -fun cons1 (x, (l, r, y)) = (x :: l, r, y) - -fun augment (id, sigexp, (wherespecs, right, binds)) = - (id, Sigexp.wheree (sigexp, Vector.fromList wherespecs, - Region.extendRight (Sigexp.region sigexp, right))) +fun longIdFromTok (s, left, right) = + let + val syms = List.map (String.split (s, #"."), Symbol.fromString) + in + (syms, reg (left, right)) + end + +fun shortIdFromTok (s, left, right) = + (Symbol.fromString s, reg (left, right)) + +fun longIdFromShortId (sym, reg) = ([sym], reg) + +fun cons1 (x, (l, y)) = (x :: l, y) + +fun augment (id, sigexp, (whereeqns, binds)) = + (id, Sigexp.wheree (sigexp, Vector.fromList whereeqns)) :: binds fun 'a augment1 ((strexp: Strexp.t, - makesigconst: Sigexp.t -> SigConst.t, + sigconst: Sigexp.t -> SigConst.t, sigexp: Sigexp.t), - (wherespecs: wherespec list, - right: SourcePos.t, + (whereeqns: WhereEquation.t list, z: 'a)): Strexp.t * 'a = - (Strexp.makeRegion - (Strexp.Constrained - (strexp, makesigconst (Sigexp.wheree - (sigexp, Vector.fromList wherespecs, - Region.extendRight (Sigexp.region sigexp, right)))), - Region.extendRight (Strexp.region strexp, right)), - z) + let + val sigexp = Sigexp.wheree (sigexp, Vector.fromList whereeqns) + in + (Strexp.makeRegion + (Strexp.Constrained (strexp, sigconst sigexp), + Region.append (Strexp.region strexp, Sigexp.region sigexp)), + z) + end -type 'a whereAnd = wherespec list * SourcePos.t * 'a list +type 'a whereAndEqns = WhereEquation.t list * 'a list %% %term CHAR of IntInf.t | INT of {digits: string, + extended: bool, negate: bool, radix: StringCvt.radix} - | LONGID of string + | SHORTALPHANUMID of string + | SHORTSYMID of string + | LONGALPHANUMID of string + | LONGSYMID of string | REAL of string | STRING of IntInf.t vector | TYVAR of string @@ -225,26 +252,26 @@ | ABSTYPE | AND | ANDALSO | ARROW | AS | ASTERISK | BAR | CASE | COLON | COLONGT | COMMA | DATATYPE | DOTDOTDOT | ELSE | END | EOF | EQUALOP | EQTYPE | EXCEPTION | DO | DARROW | FN | FUN | FUNCTOR | HANDLE | HASH - | IF | IN | INCLUDE | INFIX | INFIXR | LBRACE | LBRACKET | LET | LOCAL - | LPAREN | NONFIX | ORELSE | OF | OP | OPEN | OVERLOAD | RAISE | RBRACE - | RBRACKET | REC | RPAREN | SEMICOLON | SHARING | SIG | SIGNATURE | STRUCT - | STRUCTURE | THEN | TYPE | VAL | WHERE | WHILE | WILD | WITH | WITHTYPE + | HASHLBRACKET | IF | IN | INCLUDE | INFIX | INFIXR | LBRACE | LBRACKET | LET + | LOCAL | LPAREN | NONFIX | ORELSE | OF | OP | OPEN | OVERLOAD | RAISE + | RBRACE | RBRACKET | REC | RPAREN | SEMICOLON | SHARING | SIG | SIGNATURE + | STRUCT | STRUCTURE | THEN | TYPE | VAL | WHERE | WHILE | WILD | WITH + | WITHTYPE (* Extensions *) | BUILD_CONST | COMMAND_LINE_CONST | CONST | ADDRESS | EXPORT | IMPORT | SYMBOL | PRIM + | SHOW_BASIS of File.t %nonterm aexp of Exp.node - | andspecs of wherespec list | apat of Pat.t - | apat' of Pat.t | apatnode of Pat.node | apats of Pat.t list | app_exp of Exp.t list - | app_exp1 of Exp.t list | arg_fct of Strexp.t | ieattributes of PrimKind.ImportExportAttribute.t list + | barcpats of Pat.t list | clause of clause | clauses of clause list | clausesTop of clauses @@ -256,12 +283,11 @@ | constraint of Type.t option | constrs of (Con.t * Type.t option) list | constOrBool of Const.t + | cpat of Pat.t + | cpatnode of Pat.node | datBind of DatBind.t - | datBindNoWithtype of DatBind.t | datatypeRhs of DatatypeRhs.t - | datatypeRhsNoWithtype of DatatypeRhs.t | datatypeRhsnode of DatatypeRhs.node - | datatypeRhsnodeNoWithtype of DatatypeRhs.node | db of db | dbs of db vector | dbs' of db list @@ -275,8 +301,8 @@ | ebrhs of EbRhs.t | ebrhsnode of EbRhs.node | ebs of eb list - | elabel of (Field.t * Exp.t) - | elabels of (Field.t * Exp.t) list + | elabel of (Field.t * (Region.t * Exp.t)) + | elabels of (Field.t * (Region.t * Exp.t)) list | exndesc of exndesc | exndescs of exndesc list | exp of Exp.t @@ -291,35 +317,34 @@ | fixity of Fixity.t | funbinds of funbind list | funbinds' of Strexp.t * funbind list - | funbinds'1 of funbind whereAnd - | funbinds'1' of funbind whereAnd + | funbinds'1 of funbind whereAndEqns + | funbinds'1' of funbind whereAndEqns | funbinds'2 of funbind list | funs of clauses list - | id of Symbol.t * Region.t - | idEqual of Symbol.t * Region.t - | idNoAsterisk of Symbol.t * Region.t + | idField of Symbol.t * Region.t | int of IntInf.t | longcon of Longcon.t - | longid of Symbol.t list * Region.t - | longidEqual of Symbol.t list * Region.t - | longidNoAsterisk of Symbol.t list * Region.t + | longAlphanumId of Symbol.t list * Region.t + | longSymId of Symbol.t list * Region.t | longstrid of Longstrid.t | longstrideqns of Longstrid.t list | longstrids of Longstrid.t list | longtycon of Longtycon.t | longtyconeqns of Longtycon.t list - | longvidands of Longvid.t list | longvid of Longvid.t + | longvidEqual of Longvid.t | longvidNoEqual of Longvid.t + | longvidands of Longvid.t list | match of Match.t + | numericField of int | opaspat of Pat.t option | opcon of Con.t - | ot_list of Exp.t list + | optbar of unit + | optbar' of unit + | optsemicolon of unit | pat of Pat.t - | pat_2c of Pat.t list - | patitem of (Field.t * Pat.Item.t) - | patitems of ((Field.t * Pat.Item.t) list * bool) - | patnode of Pat.node + | patitem of (Field.t * Region.t * Pat.Item.t) + | patitems of ((Field.t * Region.t * Pat.Item.t) list * bool) | pats of Pat.t list | priority of Priority.t | program of Program.t @@ -327,14 +352,15 @@ | rule of rule | rules of rule list | rvalbind of rvb list - | rvalbindRest of rvb list | sdec of Dec.t | sdecs of Dec.t | sdecsPlus of Dec.t - | sharespec of Equation.node + | sharespec of SharingEquation.node + | shortAlphanumId of Symbol.t * Region.t + | shortSymId of Symbol.t * Region.t | sigbinds of sigbind list - | sigbinds' of sigbind whereAnd - | sigbinds'' of sigbind whereAnd + | sigbinds' of sigbind whereAndEqns + | sigbinds'' of sigbind whereAndEqns | sigconst of SigConst.t | sigexp of Sigexp.t | sigexp' of Sigexp.t @@ -347,16 +373,16 @@ | specs of Spec.t | strbinds of strbind list | strbinds' of Strexp.t * strbind list - | strbinds'1 of strbind whereAnd - | strbinds'1' of strbind whereAnd + | strbinds'1 of strbind whereAndEqns + | strbinds'1' of strbind whereAndEqns | strbinds'2 of strbind list | strdec of Strdec.t | strdecnode of Strdec.node | strdecs of Strdec.t | strdecsnode of Strdec.node | strdescs of strdesc list - | strdescs' of strdesc whereAnd - | strdescs'' of strdesc whereAnd + | strdescs' of strdesc whereAndEqns + | strdescs'' of strdesc whereAndEqns | strexp of Strexp.t | strexp1 of Strexp.t * (Sigexp.t -> SigConst.t) * Sigexp.t | strexp2 of Strexp.t @@ -365,8 +391,11 @@ | strid of Strid.t | string of string | symattributes of PrimKind.SymbolAttribute.t list - | tlabel of (Field.t * Type.t) - | tlabels of (Field.t * Type.t) list + | tb of tb + | tbs of tb vector + | tbs' of tb list + | tlabel of (Field.t * (Region.t * Type.t)) + | tlabels of (Field.t * (Region.t * Type.t)) list | topdec of Topdec.t | topdecnode of Topdec.node | topdecs of Topdec.t list list @@ -375,17 +404,10 @@ | ty' of Type.t | ty'node of Type.node | ty0_pc of Type.t list - | ty1 of Type.t | tyOpt of Type.t option | tycon of Tycon.t | tynode of Type.node | typBind of TypBind.t - | typBind' of {def: Type.t, - tycon: Tycon.t, - tyvars: Tyvar.t vector} list - | typBind'' of {def: Type.t, - tycon: Tycon.t, - tyvars: Tyvar.t vector} list | typdesc of typdesc | typdescs of typdesc list | tyvar of Tyvar.t @@ -393,17 +415,17 @@ | tyvars of Tyvar.t vector | tyvarseq of Tyvar.t vector | valbind of vb list * rvb list - | valbindRest of vb list * rvb list | valbindTop of vb vector * rvb vector | valdesc of valdesc | valdescs of valdesc list - | var of Var.t | vid of Vid.t + | vidEqual of Vid.t | vidNoEqual of Vid.t | vids of Vid.t list - | wherespec of wherespec - | wherespecs of wherespec vector - | wherespecs' of wherespec list + | whereandeqns of WhereEquation.t list + | whereeqn of (SourcePos.t -> WhereEquation.t) + | whereeqns of WhereEquation.t vector + | whereeqns' of WhereEquation.t list | withtypes of TypBind.t | word of IntInf.t @@ -440,11 +462,11 @@ %change -> VAL | -> THEN | -> ELSE | -> LPAREN | -> SEMICOLON | DARROW -> EQUALOP | EQUALOP -> DARROW | AND -> ANDALSO | COLON -> OF | SEMICOLON -> COMMA | COMMA -> SEMICOLON | - -> IN LONGID END | -> ELSE LONGID + -> IN SHORTALPHANUMID END | -> ELSE SHORTALPHANUMID %value CHAR (IntInf.fromInt (Char.ord #"a")) -%value INT ({digits = "0", negate = false, radix = StringCvt.DEC}) -%value LONGID ("bogus") +%value INT ({digits = "0", extended = false, negate = false, radix = StringCvt.DEC}) +%value SHORTALPHANUMID ("bogus") %value REAL ("13.0") %value STRING (Vector.fromList []) %value TYVAR ("'a") @@ -499,9 +521,6 @@ (let val strbinds = Vector.fromList strbinds val d = Strdec.Structure strbinds - - - in d end) @@ -509,6 +528,8 @@ | decnolocal (Strdec.Core (Dec.makeRegion' (decnolocal, decnolocalleft, decnolocalright))) + | SHOW_BASIS (Strdec.ShowBasis SHOW_BASIS) + strbinds : strid sigconst EQUALOP strbinds' (let val (def,strbinds) = strbinds' @@ -519,17 +540,17 @@ strbinds' : strexp1 strbinds'1 (augment1 (strexp1, strbinds'1)) | strexp2 strbinds'2 ((strexp2,strbinds'2)) -strbinds'1 : strbinds'2 (([], strbinds'2left, strbinds'2)) - | WHERE wherespec strbinds'1' (cons1 (wherespec,strbinds'1')) +strbinds'1 : strbinds'2 (([], strbinds'2)) + | WHERE whereeqn strbinds'1' (cons1 (whereeqn WHEREleft, strbinds'1')) -strbinds'1' : strbinds'1 (strbinds'1) - | AND wherespec strbinds'1' (cons1 (wherespec,strbinds'1')) +strbinds'1' : strbinds'1 (strbinds'1) + | AND whereeqn strbinds'1' (cons1 (whereeqn ANDleft, strbinds'1')) strbinds'2 : ([]) | AND strbinds (strbinds) strexp : strexpnode (Strexp.makeRegion' (strexpnode, - strexpnodeleft, strexpnoderight)) + strexpnodeleft, strexpnoderight)) strexpnode : strexp1 @@ -538,16 +559,13 @@ in Strexp.Constrained (strexp, sigconst sigexp) end) - | strexp1 wherespecs + | strexp1 whereeqns (let val (strexp,sigconst,sigexp) = strexp1 + val sigexp = Sigexp.wheree (sigexp, whereeqns) in Strexp.Constrained - (strexp, - sigconst (Sigexp.wheree - (sigexp, wherespecs, - Region.extendRight (Sigexp.region sigexp, - wherespecsright)))) + (strexp, sigconst sigexp) end) | strexp2node (strexp2node) @@ -559,58 +577,61 @@ (strexp2node, strexp2nodeleft, strexp2noderight)) strexp2node - : longid (Strexp.Var (Longstrid.fromSymbols longid)) + : longstrid (Strexp.Var longstrid) | STRUCT strdecs END (Strexp.Struct strdecs) - | longid arg_fct - (Strexp.App (Fctid.fromSymbol (ensureNonqualified longid), arg_fct)) - | LET strdecs IN strexp END (Strexp.Let (strdecs,strexp)) + | fctid arg_fct (Strexp.App (fctid, arg_fct)) + | LET strdecs IN strexp END (Strexp.Let (strdecs, strexp)) -arg_fct : LPAREN strexp RPAREN (strexp) +arg_fct : LPAREN strexp RPAREN (Strexp.makeRegion' + (Strexp.node strexp, + LPARENleft, RPARENright)) | LPAREN strdecs RPAREN (Strexp.makeRegion' (Strexp.Struct strdecs, - strdecsleft, strdecsright)) + LPARENleft, RPARENright)) (*---------------------------------------------------*) (* Signatures *) (*---------------------------------------------------*) sigexp - : sigexp' - (sigexp') - | sigexp' wherespecs - (Sigexp.wheree (sigexp', wherespecs, reg (sigexp'left, wherespecsright))) - -wherespecs : wherespecs' (Vector.fromList wherespecs') - -wherespecs' - : WHERE wherespec ([wherespec]) - | WHERE wherespec wherespecs' (wherespec :: wherespecs') - | WHERE wherespec andspecs (wherespec :: andspecs) - -andspecs - : AND wherespec ([wherespec]) - | AND wherespec andspecs (wherespec :: andspecs) - | AND wherespec wherespecs' (wherespec :: wherespecs') + : sigexp' (sigexp') + | sigexp' whereeqns (Sigexp.wheree (sigexp', whereeqns)) + +whereeqns : whereeqns' (Vector.fromList whereeqns') + +whereeqns' + : WHERE whereeqn ([whereeqn WHEREleft]) + | WHERE whereeqn whereeqns' (whereeqn WHEREleft :: whereeqns') + | WHERE whereeqn whereandeqns (whereeqn WHEREleft :: whereandeqns) + +whereandeqns + : AND whereeqn ([whereeqn ANDleft]) + | AND whereeqn whereandeqns (whereeqn ANDleft :: whereandeqns) + | AND whereeqn whereeqns' (whereeqn ANDleft :: whereeqns') sigbinds: sigid EQUALOP sigexp' sigbinds' (augment (sigid, sigexp', sigbinds')) sigexp' : sigexp'node (Sigexp.makeRegion' (sigexp'node, - sigexp'nodeleft, - sigexp'noderight)) + sigexp'nodeleft, + sigexp'noderight)) sigexp'node : sigid (Sigexp.Var sigid) | SIG specs END (Sigexp.Spec specs) -sigbinds': (([], defaultPos, [])) - | AND sigbinds (([], defaultPos, sigbinds)) - | WHERE wherespec sigbinds'' (cons1 (wherespec,sigbinds'')) - -sigbinds'' : sigbinds' (sigbinds') - | AND wherespec sigbinds'' (cons1 (wherespec,sigbinds'')) - -wherespec : TYPE tyvars longtycon EQUALOP ty ({tyvars = tyvars, - longtycon = longtycon, - ty = ty}) +sigbinds': (([], [])) + | AND sigbinds (([], sigbinds)) + | WHERE whereeqn sigbinds'' (cons1 (whereeqn WHEREleft, sigbinds'')) + +sigbinds'' : sigbinds' (sigbinds') + | AND whereeqn sigbinds'' (cons1 (whereeqn ANDleft, sigbinds'')) + +whereeqn : TYPE tyvars longtycon EQUALOP ty (fn eqnleft => + WhereEquation.makeRegion' + (WhereEquation.Type {tyvars = tyvars, + longtycon = longtycon, + ty = ty}, + eqnleft, + tyright)) sigconst : (SigConst.None) | COLON sigexp (SigConst.Transparent sigexp) @@ -626,7 +647,7 @@ | TYPE typdescs (Spec.Type (Vector.fromList typdescs)) | TYPE typBind (Spec.TypeDefs typBind) | EQTYPE typdescs (Spec.Eqtype (Vector.fromList typdescs)) - | DATATYPE datatypeRhsNoWithtype (Spec.Datatype datatypeRhsNoWithtype) + | DATATYPE datatypeRhs (Spec.Datatype datatypeRhs) | EXCEPTION exndescs (Spec.Exception (Vector.fromList exndescs)) | STRUCTURE strdescs (Spec.Structure (Vector.fromList strdescs)) | INCLUDE sigexp (Spec.IncludeSigexp sigexp) @@ -636,13 +657,13 @@ (Spec.Sharing {spec = Spec.makeRegion' (Spec.Empty, sharespecleft, sharespecright), - equations = (Vector.new1 - (Equation.makeRegion' (sharespec, - sharespecleft, - sharespecright)))}) + equation = (SharingEquation.makeRegion' + (sharespec, + sharespecleft, + sharespecright))}) -sharespec : SHARING TYPE longtyconeqns (Equation.Type longtyconeqns) - | SHARING longstrideqns (Equation.Structure longstrideqns) +sharespec : SHARING TYPE longtyconeqns (SharingEquation.Type longtyconeqns) + | SHARING longstrideqns (SharingEquation.Structure longstrideqns) longstrideqns : longstrid EQUALOP longstrid ([longstrid1,longstrid2]) | longstrid EQUALOP longstrideqns (longstrid :: longstrideqns) @@ -652,12 +673,12 @@ strdescs : strid COLON sigexp' strdescs' (augment (strid, sigexp', strdescs')) -strdescs' : (([], defaultPos, [])) - | AND strdescs (([], defaultPos, strdescs)) - | WHERE wherespec strdescs'' (cons1 (wherespec, strdescs'')) +strdescs' : (([], [])) + | AND strdescs (([], strdescs)) + | WHERE whereeqn strdescs'' (cons1 (whereeqn WHEREleft, strdescs'')) -strdescs'' : strdescs' (strdescs') - | AND wherespec strdescs'' (cons1 (wherespec, strdescs'')) +strdescs'' : strdescs' (strdescs') + | AND whereeqn strdescs'' (cons1 (whereeqn ANDleft, strdescs'')) typdescs : typdesc ([typdesc]) | typdesc AND typdescs (typdesc :: typdescs) @@ -668,13 +689,12 @@ valdescs : valdesc ([valdesc]) | valdesc AND valdescs (valdesc :: valdescs) -valdesc : var COLON ty (Con.ensureSpecify (Vid.toCon (Vid.fromVar var)) - ; (var, ty)) +valdesc : vid COLON ty (Vid.toVar vid, ty) exndescs : exndesc ([exndesc]) | exndesc AND exndescs (exndesc :: exndescs) -exndesc : con tyOpt (Con.ensureSpecify con; (con, tyOpt)) +exndesc : con tyOpt (con, tyOpt) tyOpt : (NONE) | OF ty (SOME ty) @@ -695,14 +715,14 @@ funbinds' : strexp1 funbinds'1 (augment1 (strexp1, funbinds'1)) | strexp2 funbinds'2 ((strexp2, funbinds'2)) -funbinds'1 : funbinds'2 ([], funbinds'2left, funbinds'2) - | WHERE wherespec funbinds'1' (cons1 (wherespec,funbinds'1')) +funbinds'1 : funbinds'2 ([], funbinds'2) + | WHERE whereeqn funbinds'1' (cons1 (whereeqn WHEREleft, funbinds'1')) funbinds'2 : ([]) | AND funbinds (funbinds) -funbinds'1' : funbinds'1 (funbinds'1) - | AND wherespec funbinds'1' (cons1 (wherespec,funbinds'1')) +funbinds'1' : funbinds'1 (funbinds'1) + | AND whereeqn funbinds'1' (cons1 (whereeqn ANDleft, funbinds'1')) fctarg : strid COLON sigexp (FctArg.Structure (strid, sigexp)) | specs (FctArg.Spec specs) @@ -728,20 +748,20 @@ | VAL tyvarseq valbindTop (Dec.Val {tyvars = tyvarseq, vbs = #1 valbindTop, rvbs = #2 valbindTop}) - | FUN funs (Dec.Fun (Vector.new0 (), Vector.fromList funs)) - | FUN tyvarseq funs (Dec.Fun (tyvarseq, Vector.fromList funs)) + | DO exp (Dec.DoDec exp) + | FUN funs (Dec.Fun {tyvars = Vector.new0 (), fbs = Vector.fromList funs}) + | FUN tyvarseq funs (Dec.Fun {tyvars = tyvarseq, fbs = Vector.fromList funs}) | TYPE typBind (Dec.Type typBind) | DATATYPE datatypeRhs (Dec.Datatype datatypeRhs) | ABSTYPE datBind WITH decs END (Dec.Abstype {datBind = datBind, body = decs}) - | EXCEPTION ebs - (Dec.Exception (Vector.fromList ebs)) + | EXCEPTION ebs (Dec.Exception (Vector.fromList ebs)) | OPEN longstrids (Dec.Open (Vector.fromList longstrids)) | fixity vids (Dec.Fix {fixity = fixity, ops = Vector.fromList vids}) - | OVERLOAD priority var COLON ty AS longvidands + | OVERLOAD priority vid COLON ty AS longvidands (Dec.Overload (priority, - var, + Vid.toVar vid, Vector.new0 (), ty, Vector.fromList longvidands)) @@ -753,25 +773,22 @@ Vector.fromList rvbs) end) -valbind : pat EQUALOP exp valbindRest - (let - val (vbs, rvbs) = valbindRest - in - ({pat = pat, exp = exp} :: vbs, - rvbs) - end) +valbind : pat EQUALOP exp + (([{pat = pat, exp = exp}], [])) + | pat EQUALOP exp AND valbind + (let + val (vbs, rvbs) = valbind + in + ({pat = pat, exp = exp} :: vbs, + rvbs) + end) | REC rvalbind (([], rvalbind)) - -valbindRest : (([], [])) - | AND valbind (valbind) - rvalbind : REC rvalbind (rvalbind) - | pat EQUALOP FN match rvalbindRest - ({pat = pat, match = match} :: rvalbindRest) - -rvalbindRest : ([]) - | AND rvalbind (rvalbind) + | pat EQUALOP FN match + ([{pat = pat, match = match}]) + | pat EQUALOP FN match AND rvalbind + ({pat = pat, match = match} :: rvalbind) constraint : (NONE) | COLON ty (SOME ty) @@ -780,6 +797,7 @@ | clausesTop AND funs (clausesTop :: funs) clausesTop: clauses (Vector.fromList clauses) + | optbar' clauses (Vector.fromList clauses) clauses : clause ([clause]) | clause BAR clauses (clause :: clauses) @@ -788,41 +806,24 @@ resultType = constraint, body = exp}) -typBind : typBind' - (let - val typBind = Vector.fromList typBind' - val b = - TypBind.makeRegion' - (TypBind.T typBind, typBind'left, typBind'right) - in - b - end) +typBind : tbs + (TypBind.makeRegion' (TypBind.T tbs, tbsleft, tbsright)) -typBind' : tyvars tycon EQUALOP ty typBind'' - ({def = ty, tycon = tycon, tyvars = tyvars} :: typBind'') +tbs : tbs' (Vector.fromList tbs') -typBind'' : ([]) - | AND typBind' (typBind') +tbs' : tb ([tb]) + | tb AND tbs' (tb :: tbs') +tb : tyvars tycon EQUALOP ty + ({def = ty, + tycon = tycon, + tyvars = tyvars}) tyvars : tyvarseq (tyvarseq) | (Vector.new0 ()) tyvarseq: tyvar (Vector.new1 tyvar) - | LPAREN tyvar_pc RPAREN - (let - val v = Vector.fromList tyvar_pc - val () = - reportDuplicates - (v, {equals = Tyvar.sameName, - layout = Tyvar.layout, - name = "type variable", - region = Tyvar.region, - term = fn () => Layout.tuple (Vector.toListMap - (v, Tyvar.layout))}) - in - v - end) + | LPAREN tyvar_pc RPAREN (Vector.fromList tyvar_pc) tyvar_pc: tyvar ([tyvar]) | tyvar COMMA tyvar_pc (tyvar :: tyvar_pc) @@ -839,7 +840,7 @@ ebs : eb ([eb]) | eb AND ebs (eb::ebs) -eb : opcon ebrhs (Con.ensureRedefine opcon; (opcon, ebrhs)) +eb : opcon ebrhs (opcon, ebrhs) ebrhs : ebrhsnode (EbRhs.makeRegion' (ebrhsnode, ebrhsnodeleft, ebrhsnoderight)) @@ -860,7 +861,7 @@ int : INT (let - val {digits, negate, radix} = INT + val {digits, negate, radix, ...} = INT in case StringCvt.scanString (fn r => IntInf.scan (radix, r)) digits of NONE => Error.bug "parser saw invalid int" @@ -878,9 +879,9 @@ digit : INT (let - val {digits, negate, radix} = INT + val {digits, extended, negate, radix} = INT in - if 1 = String.size digits andalso not negate andalso radix = StringCvt.DEC + if 1 = String.size digits andalso not extended andalso not negate andalso radix = StringCvt.DEC then valOf (Int.fromString digits) else let open Layout @@ -893,25 +894,37 @@ end end) +numericField : INT + (let + val {digits, extended, negate, radix} = INT + fun err () = + let + open Layout + val _ = + Control.error (reg (INTleft, INTright), + str "invalid numeric label", + empty) + in + 1 + end + in + if String.sub (digits, 0) <> #"0" andalso not extended andalso not negate andalso radix = StringCvt.DEC + then case StringCvt.scanString (fn r => IntInf.scan (radix, r)) digits of + NONE => Error.bug "parser saw invalid int" + | SOME i => (IntInf.toInt (if negate then ~ i else i) + handle Exn.Overflow => err ()) + else err () + end) + datatypeRhs : datatypeRhsnode (DatatypeRhs.makeRegion' (datatypeRhsnode, datatypeRhsnodeleft, datatypeRhsnoderight)) -datatypeRhsNoWithtype - : datatypeRhsnodeNoWithtype - (DatatypeRhs.makeRegion' (datatypeRhsnodeNoWithtype, - datatypeRhsnodeNoWithtypeleft, - datatypeRhsnodeNoWithtyperight)) - datatypeRhsnode : repl (repl) | datBind (DatatypeRhs.DatBind datBind) -datatypeRhsnodeNoWithtype - : repl (repl) - | datBindNoWithtype (DatatypeRhs.DatBind datBindNoWithtype) - repl : tyvars tycon EQUALOP DATATYPE longtycon (if Vector.isEmpty tyvars then () @@ -920,36 +933,27 @@ ; DatatypeRhs.Repl {lhs = tycon, rhs = longtycon}) datBind - : dbs withtypes - (DatBind.make (dbs, withtypes, dbsleft, withtypesright)) - -datBindNoWithtype : dbs (DatBind.make (dbs, TypBind.empty, dbsleft, dbsright)) + | dbs withtypes + (DatBind.make (dbs, withtypes, dbsleft, withtypesright)) dbs : dbs' (Vector.fromList dbs') -dbs' - : db - ([db]) - | db AND dbs' - (db :: dbs') +dbs' : db ([db]) + | db AND dbs' (db :: dbs') -db : tyvars tycon EQUALOP constrs +db : tyvars tycon EQUALOP optbar constrs ({cons = Vector.fromList constrs, tycon = tycon, tyvars = tyvars}) -withtypes - : - (TypBind.empty) - | WITHTYPE typBind - (typBind) +withtypes : WITHTYPE typBind (typBind) longvidands : longvid ([longvid]) | longvid AND longvidands (longvid :: longvidands) -match : rules (Match.makeRegion' (Match.T (Vector.fromList rules), +match : optbar rules (Match.makeRegion' (Match.T (Vector.fromList rules), rulesleft, rulesright)) rules : rule ([rule]) @@ -957,12 +961,37 @@ rule : pat DARROW exp ((pat,exp)) -elabel : field EQUALOP exp (field,exp) +elabel : field EQUALOP exp (field, (reg (fieldleft, fieldright), exp)) + | idField constraint (if allowRecordPunExps () + then () + else error (reg (idFieldleft, idFieldright), "Record punning expressions disallowed, compile with -default-ann 'allowRecordPunExps true'") + ; (Field.Symbol (#1 idField), + (reg (idFieldleft, idFieldright), + let + val exp = + Exp.makeRegion' + (Exp.FlatApp + (Vector.new1 + (Exp.makeRegion' + (Exp.Var {name = Longvid.short (Vid.fromSymbol idField), + fixop = Fixop.None}, + idFieldleft, idFieldright))), + idFieldleft, idFieldright) + val exp = + case constraint of + NONE => exp + | SOME ty => + Exp.makeRegion' + (Exp.Constraint (exp, ty), + idFieldleft, constraintright) + in + exp + end))) elabels : elabel COMMA elabels (elabel :: elabels) | elabel ([elabel]) -exp_ps : exp SEMICOLON exp ([exp1, exp2]) +exp_ps : exp optsemicolon ([exp]) | exp SEMICOLON exp_ps (exp :: exp_ps) exp : expnode (Exp.makeRegion' (expnode, expnodeleft, expnoderight)) @@ -978,34 +1007,40 @@ | IF exp THEN exp ELSE exp (Exp.If (exp1, exp2, exp3)) | RAISE exp (Exp.Raise exp) -app_exp : aexp app_exp1 (Exp.makeRegion' (aexp, aexpleft, aexpright) - :: app_exp1) - | longvid app_exp1 (Exp.makeRegion' (Exp.Var {name = longvid, +app_exp : aexp ([Exp.makeRegion' (aexp, aexpleft, aexpright)]) + | aexp app_exp (Exp.makeRegion' (aexp, aexpleft, aexpright) + :: app_exp) + | longvid ([Exp.makeRegion' (Exp.Var {name = longvid, fixop = Fixop.None}, + longvidleft, longvidright)]) + | longvid app_exp (Exp.makeRegion' (Exp.Var {name = longvid, + fixop = Fixop.None}, longvidleft, longvidright) - :: app_exp1) - -app_exp1 : ([]) - | app_exp (app_exp) + :: app_exp) aexp : OP longvid (Exp.Var {name = longvid, fixop = Fixop.Op}) | const (Exp.Const const) | HASH field (Exp.Selector field) + | HASHLBRACKET exp_list RBRACKET (Exp.Vector (Vector.fromList exp_list)) + | HASHLBRACKET RBRACKET (Exp.Vector (Vector.new0 ())) | LBRACE elabels RBRACE (Exp.Record (Record.fromVector (Vector.fromList elabels))) | LBRACE RBRACE (Exp.unit) | LPAREN RPAREN (Exp.unit) - | LPAREN expnode RPAREN (expnode) - | LPAREN exp_ps RPAREN (Exp.Seq (Vector.fromList exp_ps)) + | LPAREN exp_ps RPAREN + (case exp_ps of + [exp] => Exp.Paren exp + | _ => Exp.Seq (Vector.fromList exp_ps)) | LPAREN exp_2c RPAREN (Exp.tuple (Vector.fromList exp_2c)) | LBRACKET exp_list RBRACKET (Exp.List (Vector.fromList exp_list)) | LBRACKET RBRACKET (Exp.List (Vector.new0 ())) - | LET decs IN exp END (Exp.Let (decs, exp)) | LET decs IN exp_ps END - (Exp.Let (decs, Exp.makeRegion' (Exp.Seq (Vector.fromList exp_ps), - exp_psleft, - exp_psright))) + (Exp.Let (decs, + case exp_ps of + [exp] => exp + | _ => Exp.makeRegion' (Exp.Seq (Vector.fromList exp_ps), + exp_psleft, exp_psright))) | ADDRESS string symattributes COLON ty SEMICOLON (Exp.Prim (PrimKind.Address {attributes = symattributes, name = string, @@ -1042,34 +1077,39 @@ ieattributes : ([]) - | id ieattributes + | shortAlphanumId ieattributes (let - val id = Symbol.toString (#1 id) + val (id, reg) = shortAlphanumId in - case id of + case Symbol.toString id of "cdecl" => PrimKind.ImportExportAttribute.Cdecl :: ieattributes | "external" => PrimKind.ImportExportAttribute.External :: ieattributes + | "impure" => PrimKind.ImportExportAttribute.Impure :: ieattributes + | "inline" => PrimKind.ImportExportAttribute.Inline :: ieattributes | "private" => PrimKind.ImportExportAttribute.Private :: ieattributes | "public" => PrimKind.ImportExportAttribute.Public :: ieattributes + | "pure" => PrimKind.ImportExportAttribute.Pure :: ieattributes + | "reentrant" => PrimKind.ImportExportAttribute.Reentrant :: ieattributes + | "runtime" => PrimKind.ImportExportAttribute.Runtime :: ieattributes | "stdcall" => PrimKind.ImportExportAttribute.Stdcall :: ieattributes - | _ => (error (reg (idleft, idright), concat ["invalid attribute: ", id]) - ; ieattributes) + | id => (error (reg, concat ["invalid attribute: ", id]) + ; ieattributes) end) symattributes : ([]) - | id symattributes + | shortAlphanumId symattributes (let - val id = Symbol.toString (#1 id) + val (id, reg) = shortAlphanumId in - case id of + case Symbol.toString id of "alloc" => PrimKind.SymbolAttribute.Alloc :: symattributes | "external" => PrimKind.SymbolAttribute.External :: symattributes | "private" => PrimKind.SymbolAttribute.Private :: symattributes | "public" => PrimKind.SymbolAttribute.Public :: symattributes - | _ => (error (reg (idleft, idright), concat ["invalid attribute: ", id]) - ; symattributes) + | id => (error (reg, concat ["invalid attribute: ", id]) + ; symattributes) end) exp_2c : exp COMMA exp_2c (exp :: exp_2c) @@ -1082,53 +1122,65 @@ (* Patterns *) (*---------------------------------------------------*) -pat : patnode (Pat.makeRegion' (patnode, patnodeleft, patnoderight)) +pat : cpat BAR barcpats (Pat.makeRegion' (Pat.Or (Vector.fromList (cpat::barcpats)), + cpatleft, barcpatsright)) + | cpat (cpat) + +cpat : cpatnode (Pat.makeRegion' (cpatnode, cpatnodeleft, cpatnoderight)) + +cpatnode : cpat AS cpat (Pat.makeAs (cpat1, cpat2)) + | cpat COLON ty (Pat.Constraint (cpat, ty)) + | apats (Pat.FlatApp (Vector.fromList apats)) + +apats : apat ([apat]) + | apat apats (apat :: apats) + +apat + : apatnode (Pat.makeRegion' (apatnode, + apatnodeleft, + apatnoderight)) + +apatnode + : longvidNoEqual (Pat.Var {name = longvidNoEqual, + fixop = Fixop.None}) + | OP longvid (Pat.Var {name = longvid, + fixop = Fixop.Op}) + | const + (let + val _ = + case Const.node const of + Const.Real r => + let + open Layout + in + Control.error + (Const.region const, + seq [str "real constants not allowed in patterns: ", + Const.layout const], + empty) + end + | _ => () + in + Pat.Const const + end) + | WILD (Pat.Wild) + | LPAREN pats RPAREN (Pat.tuple (Vector.fromList pats)) + | LBRACKET pats RBRACKET (Pat.List (Vector.fromList pats)) + | HASHLBRACKET pats RBRACKET (Pat.Vector (Vector.fromList pats)) + | LBRACE RBRACE (Pat.unit) + | LBRACE patitems RBRACE + (let + val (items, flexible) = patitems + in + Pat.Record {flexible = flexible, + items = Vector.fromList items} + end) -patnode : pat AS pat (Pat.makeAs (pat1, pat2)) - | pat COLON ty (Pat.Constraint (pat, ty)) - | apats (Pat.FlatApp (Vector.fromList apats)) - -apats : apat ([apat]) - | apat apats (apat :: apats) - -apat : apatnode (Pat.makeRegion' (apatnode, apatnodeleft, apatnoderight)) - -apatnode : longvidNoEqual (Pat.Var {name = longvidNoEqual, - fixop = Fixop.None}) - | OP longvid (Pat.Var {name = longvid, - fixop = Fixop.Op}) - | const - (let - val _ = - case Const.node const of - Const.Real r => - let - open Layout - in - Control.error - (Const.region const, - seq [str "real constants are not allowed in patterns: ", - Const.layout const], - empty) - end - | _ => () - in - Pat.Const const - end) - | WILD (Pat.Wild) - | LPAREN pats RPAREN (Pat.tuple (Vector.fromList pats)) - | LBRACKET pats RBRACKET (Pat.List (Vector.fromList pats)) - | LBRACE RBRACE (Pat.unit) - | LBRACE patitems RBRACE - (let - val (items, flexible) = patitems - in - Pat.Record {flexible = flexible, - items = Vector.fromList items} - end) +pats : ([]) + | pat commapats (pat :: commapats) -pats: ([]) - | pat commapats (pat :: commapats) +barcpats : cpat ([cpat]) + | cpat BAR barcpats (cpat :: barcpats) commapats : ([]) | COMMA pat commapats (pat :: commapats) @@ -1141,10 +1193,11 @@ patitem : field EQUALOP pat - ((field, Pat.Item.Field pat)) - | vidNoEqual constraint opaspat - (Field.Symbol (Vid.toSymbol vidNoEqual), - Pat.Item.Vid (vidNoEqual, constraint, opaspat)) + ((field, reg (fieldleft, fieldright), Pat.Item.Field pat)) + | vid constraint opaspat + (Field.Symbol (Vid.toSymbol vid), + reg (vidleft, vidright), + Pat.Item.Vid (vid, constraint, opaspat)) opaspat : (NONE) | AS pat (SOME pat) @@ -1163,17 +1216,17 @@ ty'node : tyvar (Type.Var tyvar) | LBRACE tlabels RBRACE - (Type.Record (Srecord.fromVector (Vector.fromList tlabels))) + (Type.Record (Record.fromVector (Vector.fromList tlabels))) | LBRACE RBRACE (Type.unit) | LPAREN ty0_pc RPAREN longtycon (Type.Con (longtycon, Vector.fromList ty0_pc)) - | LPAREN ty RPAREN (Type.node ty) + | LPAREN ty RPAREN (Type.Paren ty) | ty' longtycon (Type.Con (longtycon, Vector.new1 ty')) | longtycon (Type.Con (longtycon, Vector.new0 ())) -tlabel : field COLON ty (field, ty) +tlabel : field COLON ty (field, (reg (fieldleft, fieldright), ty)) tlabels : tlabel COMMA tlabels (tlabel :: tlabels) | tlabel ([tlabel]) @@ -1188,15 +1241,31 @@ (* Atoms *) (*---------------------------------------------------*) +optbar + : (* empty *) () + | optbar' () + +optbar' + : BAR (if allowOptBar () + then () + else error (reg (BARleft, BARright), "Optional bar disallowed, compile with -default-ann 'allowOptBar true'")) + +optsemicolon + : (* empty *) () + | SEMICOLON (if allowOptSemicolon () + then () + else error (reg (SEMICOLONleft, SEMICOLONright), "Optional semicolon disallowed, compile with -default-ann 'allowOptSemicolon true'")) + constOrBool : const (const) - | id (let - fun ok b = Const.makeRegion (Const.Bool b, reg (idleft, idright)) + | shortAlphanumId + (let + fun ok b = Const.makeRegion (Const.Bool b, #2 shortAlphanumId) in - case Symbol.toString (#1 id) of + case Symbol.toString (#1 shortAlphanumId) of "false" => ok false | "true" => ok true - | s => (error (#2 id, concat ["unknown boolean constant: ", s]) + | s => (error (#2 shortAlphanumId, concat ["unknown boolean constant: ", s]) ; ok false) end) @@ -1213,67 +1282,64 @@ (Vector.length STRING, fn i => Char.fromInt (Int.fromIntInf (Vector.sub (STRING, i))))) -idNoAsterisk : longidNoAsterisk (ensureNonqualified longidNoAsterisk) - -id : idNoAsterisk (idNoAsterisk) - | ASTERISK ((Symbol.asterisk, reg (ASTERISKleft, ASTERISKright))) -idEqual : id (id) - | EQUALOP ((Symbol.equal, reg (EQUALOPleft, EQUALOPright))) +shortAlphanumId + : SHORTALPHANUMID + (shortIdFromTok (SHORTALPHANUMID, SHORTALPHANUMIDleft, SHORTALPHANUMIDright)) +shortSymId + : SHORTSYMID + (shortIdFromTok (SHORTSYMID, SHORTSYMIDleft, SHORTSYMIDright)) +longAlphanumId + : LONGALPHANUMID + (longIdFromTok (LONGALPHANUMID, LONGALPHANUMIDleft, LONGALPHANUMIDright)) +longSymId + : LONGSYMID + (longIdFromTok (LONGSYMID, LONGSYMIDleft, LONGSYMIDright)) + +vidNoEqual : shortAlphanumId (Vid.fromSymbol shortAlphanumId) + | shortSymId (Vid.fromSymbol shortSymId) + | ASTERISK (Vid.fromSymbol (Symbol.asterisk, + reg (ASTERISKleft, ASTERISKright))) +vidEqual : EQUALOP (Vid.fromSymbol (Symbol.equal, + reg (EQUALOPleft, EQUALOPright))) +vid : vidNoEqual (vidNoEqual) + | vidEqual (vidEqual) +longvidNoEqual : vidNoEqual (Longvid.short vidNoEqual) + | longAlphanumId (Longvid.fromSymbols longAlphanumId) + | longSymId (Longvid.fromSymbols longSymId) +longvidEqual : vidEqual (Longvid.short vidEqual) +longvid : longvidNoEqual (longvidNoEqual) + | longvidEqual (longvidEqual) + +con : vid (Vid.toCon vid) +longcon : longvid (Longvid.toLongcon longvid) + +tyvar : TYVAR (Tyvar.fromSymbol (Symbol.fromString TYVAR, reg (TYVARleft, TYVARright))) + +tycon : shortAlphanumId (Tycon.fromSymbol shortAlphanumId) + | shortSymId (Tycon.fromSymbol shortSymId) +longtycon : tycon (Longtycon.short tycon) + | longAlphanumId (Longtycon.fromSymbols longAlphanumId) + +idField : shortAlphanumId (shortAlphanumId) + | shortSymId (shortSymId) + | ASTERISK ((Symbol.asterisk, + reg (ASTERISKleft, ASTERISKright))) +field : idField (Field.Symbol (#1 idField)) + | numericField (Field.Int (numericField - 1)) + +strid : shortAlphanumId (Strid.fromSymbol shortAlphanumId) +longstrid : strid (Longstrid.short strid) + | longAlphanumId (Longstrid.fromSymbols longAlphanumId) -longid - : longidNoAsterisk (longidNoAsterisk) - | ASTERISK (([Symbol.asterisk], reg (ASTERISKleft, ASTERISKright))) +sigid : shortAlphanumId (Sigid.fromSymbol shortAlphanumId) +fctid : shortAlphanumId (Fctid.fromSymbol shortAlphanumId) -longidNoAsterisk - : LONGID - (let - val syms = List.map (String.split (LONGID, #"."), Symbol.fromString) - in - (syms, reg (LONGIDleft, LONGIDright)) - end) - -longidEqual : longid (longid) - | EQUALOP (([Symbol.equal], reg (EQUALOPleft, EQUALOPright))) - -vid : idEqual (Vid.fromSymbol idEqual) -vidNoEqual : id (Vid.fromSymbol id) vids : vid ([vid]) | vid vids (vid::vids) -var : idEqual (Var.fromSymbol idEqual) -con : id (Con.fromSymbol id) -tycon : idNoAsterisk (Tycon.fromSymbol idNoAsterisk) -tyvar : TYVAR (Tyvar.newString (TYVAR, {left = TYVARleft, - right = TYVARright})) -field : id (Field.Symbol (#1 id)) - | int (let - val int = - IntInf.toInt int - handle Exn.Overflow => - (error (reg (intleft, intright), - "field too huge") - ; 0) - in - Field.Int - (if int <= 0 - then (error (reg (intleft, intright), - "nonpositive field") - ; ~1) - else - int - 1) - end) (* int - 1 because fields are 0-based *) -strid : id (Strid.fromSymbol id) -sigid : id (Sigid.fromSymbol id) sigids : sigid ([sigid]) | sigid sigids (sigid :: sigids) -fctid : id (Fctid.fromSymbol id) - -longtycon : longidNoAsterisk (Longtycon.fromSymbols longidNoAsterisk) -longvid : longidEqual (Longvid.fromSymbols longidEqual) -longvidNoEqual : longid (Longvid.fromSymbols longid) -longcon : longid (Longcon.fromSymbols longid) -longstrid : longid (Longstrid.fromSymbols longid) longstrids : longstrid ([longstrid]) | longstrid longstrids (longstrid :: longstrids) diff -Nru mlton-20130715/mlton/front-end/ml.lex mlton-20210117+dfsg/mlton/front-end/ml.lex --- mlton-20130715/mlton/front-end/ml.lex 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/ml.lex 2021-12-28 17:19:36.000000000 +0000 @@ -1,17 +1,20 @@ -(* Heavily modified from the SML/NJ sources by sweeks@sweeks.com. *) +(* Heavily modified from SML/NJ sources. *) (* ml.lex * * Copyright 1989 by AT&T Bell Laboratories * - * $Log: ml.lex,v $ - * Revision 1.3 1997/05/22 20:17:22 jhr - * Changed lexer to accept "1e1" style floating-point literals. - * - * Revision 1.2 1997/01/28 23:20:40 jhr - * Integer and word literals are now represented by IntInf.int (instead of - * as strings). + * SML/NJ is released under a HPND-style license. + * See the file NJ-LICENSE for details. + *) + +(* Copyright (C) 2009,2016-2017 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. *) type svalue = Tokens.svalue @@ -21,333 +24,538 @@ type arg = lexarg type ('a,'b) token = ('a,'b) Tokens.token -val charlist: IntInf.t list ref = ref [] -val colNum: int ref = ref 0 -val commentLevel: int ref = ref 0 -val commentStart = ref SourcePos.bogus -val lineFile: File.t ref = ref "" -val lineNum: int ref = ref 0 -val stringStart = ref SourcePos.bogus -val stringtype = ref false - -fun lineDirective (source, file, yypos) = - Source.lineDirective (source, file, - {lineNum = !lineNum, - lineStart = yypos - !colNum}) - -fun addString (s: string) = - charlist := - String.fold (s, !charlist, fn (c, ac) => Int.toIntInf (Char.ord c) :: ac) - -fun addChar (c: char) = addString (String.fromChar c) - -fun inc (ri as ref (i: int)) = ri := i + 1 - -fun dec (ri as ref (i: int)) = ri := i - 1 - -fun error (source, left, right, msg) = - Control.errorStr (Region.make {left = Source.getPos (source, left), - right = Source.getPos (source, right)}, - msg) - -fun stringError (source, right, msg) = - Control.errorStr (Region.make {left = !stringStart, - right = Source.getPos (source, right)}, - msg) - -fun addOrd (i: IntInf.t): unit = List.push (charlist, i) - -fun addHexEscape (s: string, source, yypos): unit = - case StringCvt.scanString (Pervasive.IntInf.scan StringCvt.HEX) s of - NONE => stringError (source, yypos, "illegal unicode escape") - | SOME i => addOrd i +local + open Control.Elaborate +in + val allowLineComments = fn () => current allowLineComments + val allowExtendedNumConsts = fn () => current allowExtendedNumConsts + val allowExtendedTextConsts = fn () => current allowExtendedTextConsts +end -val eof: lexarg -> lexresult = - fn {source, ...} => +fun lastPos (yypos, yytext) = yypos + size yytext - 1 + +fun tok (t, x, s, l) = let - val pos = Source.lineStart source - val _ = - if !commentLevel > 0 - then Control.errorStr (Region.make {left = !commentStart, - right = pos}, - "unclosed comment") - else () + val left = Source.getPos (s, l) + val right = Source.getPos (s, lastPos (l, x)) in - Tokens.EOF (pos, pos) + t (left, right) end -val size = String.size +fun tok' (t, x, s, l) = tok (fn (l, r) => t (x, l, r), x, s, l) -fun tok (t, s, l, r) = +fun error' (left, right, msg) = + Control.errorStr (Region.make {left = left, right = right}, msg) +fun error (source, left, right, msg) = + error' (Source.getPos (source, left), Source.getPos (source, right), msg) + + +(* Comments *) +local + val commentErrors: string list ref = ref [] + val commentLeft = ref SourcePos.bogus + val commentStack: (int -> unit) list ref = ref [] +in + fun addCommentError msg = + List.push (commentErrors, msg) + val inComment = fn () => not (List.isEmpty (!commentStack)) + fun startComment (source, yypos, th) = + if inComment () + then List.push (commentStack, fn _ => th ()) + else (commentErrors := [] + ; commentLeft := Source.getPos (source, yypos) + ; List.push (commentStack, fn yypos => + (List.foreach (!commentErrors, fn msg => + error' (!commentLeft, + Source.getPos (source, yypos), + msg)) + ; th ()))) + fun finishComment yypos = + (List.pop commentStack) yypos +end + + +(* Line Directives *) +local + val lineDirCol: int ref = ref ~1 + val lineDirFile: File.t option ref = ref NONE + val lineDirLine: int ref = ref ~1 +in + fun startLineDir (source, yypos, th) = + let + val _ = lineDirCol := ~1 + val _ = lineDirFile := NONE + val _ = lineDirLine := ~1 + in + startComment (source, yypos, th) + end + fun addLineDirLineCol (line, col) = + let + val _ = lineDirLine := line + val _ = lineDirCol := col + in + () + end + fun addLineDirFile file = + let + val _ = lineDirFile := SOME file + in + () + end + fun finishLineDir (source, yypos) = + let + val col = !lineDirCol + val file = !lineDirFile + val line = !lineDirLine + val _ = lineDirCol := ~1 + val _ = lineDirFile := NONE + val _ = lineDirLine := ~1 + in + finishComment yypos + ; Source.lineDirective (source, file, + {lineNum = line, + lineStart = yypos + 1 - col}) + end +end + + +(* Numeric Constants *) +local +fun doit (source, yypos, yytext, drop, {extended: string option}, mkTok) = let - val l = Source.getPos (s, l) - val r = Source.getPos (s, r) + val left = yypos + val right = lastPos (yypos, yytext) + val extended = + if String.contains (yytext, #"_") + then SOME (Option.fold + (extended, "'_' separators", fn (msg1, msg2) => + msg1 ^ " and " ^ msg2)) + else extended val _ = - if true - then () - else - print (concat ["tok (", - SourcePos.toString l, - ", " , - SourcePos.toString r, - ")\n"]) + case extended of + NONE => () + | SOME msg => + if allowExtendedNumConsts () + then () + else error (source, left, right, + concat ["Extended numeric constants (using ", msg, + ") disallowed, compile with -default-ann 'allowExtendedNumConsts true'"]) in - t (l, r) + mkTok (String.keepAll (String.dropPrefix (yytext, drop), fn c => not (c = #"_")), + {extended = Option.isSome extended}, + Source.getPos (source, left), Source.getPos (source, right)) + end +in +fun real (source, yypos, yytext) = + doit (source, yypos, yytext, 0, {extended = NONE}, fn (digits, {extended: bool}, l, r) => + Tokens.REAL (digits, l, r)) +fun int (source, yypos, yytext, drop, {extended: string option}, {negate: bool}, radix) = + doit (source, yypos, yytext, drop, {extended = extended}, fn (digits, {extended: bool}, l, r) => + Tokens.INT ({digits = digits, + extended = extended, + negate = negate, + radix = radix}, + l, r)) +fun word (source, yypos, yytext, drop, {extended: string option}, radix) = + doit (source, yypos, yytext, drop, {extended = extended}, fn (digits, {extended: bool}, l, r) => + Tokens.WORD ({digits = digits, + radix = radix}, + l, r)) +end + + +(* Text Constants *) +local + val chars: IntInf.t list ref = ref [] + val inText = ref false + val textLeft = ref SourcePos.bogus + val textFinishFn: (IntInf.t vector * SourcePos.t * SourcePos.t -> lexresult) ref = ref (fn _ => raise Fail "textFinish") +in + fun startText (tl, tf) = + let + val _ = chars := [] + val _ = inText := true + val _ = textLeft := tl + val _ = textFinishFn := tf + in + () + end + fun finishText textRight = + let + val cs = Vector.fromListRev (!chars) + val tl = !textLeft + val tr = textRight + val tf = !textFinishFn + val _ = chars := [] + val _ = inText := false + val _ = textLeft := SourcePos.bogus + val _ = textFinishFn := (fn _ => raise Fail "textFinish") + in + tf (cs, tl, tr) + end + val inText = fn () => !inText + fun addTextString (s: string) = + chars := String.fold (s, !chars, fn (c, ac) => Int.toIntInf (Char.ord c) :: ac) + fun addTextCharCode (i: IntInf.int) = List.push (chars, i) +end +fun addTextChar (c: char) = addTextString (String.fromChar c) +fun addTextNumEsc (source, yypos, yytext, drop, {extended: string option}, radix): unit = + let + val left = yypos + val right = lastPos (yypos, yytext) + val _ = + case extended of + NONE => () + | SOME msg => + if allowExtendedTextConsts () + then () + else error (source, left, right, + concat ["Extended text constants (using ", msg, + ") disallowed, compile with -default-ann 'allowExtendedTextConsts true'"]) + in + case StringCvt.scanString (fn r => IntInf.scan (radix, r)) (String.dropPrefix (yytext, drop)) of + NONE => error (source, left, right, "Illegal numeric escape in text constant") + | SOME i => addTextCharCode i + end +fun addTextUTF8 (source, yypos, yytext): unit = + let + val left = yypos + val right = lastPos (yypos, yytext) + in + if not (allowExtendedTextConsts ()) + then error (source, left, right, + "Extended text constants (using UTF-8 byte sequences) disallowed, compile with -default-ann 'allowExtendedTextConsts true'") + else addTextString yytext end -fun tok' (t, x, s, l) = tok (fn (l, r) => t (x, l, r), s, l, l + size x) -fun int (yytext, drop, source, yypos, {negate: bool}, radix) = - Tokens.INT ({digits = String.dropPrefix (yytext, drop), - negate = negate, - radix = radix}, - Source.getPos (source, yypos), - Source.getPos (source, yypos + size yytext)) - -fun word (yytext, drop, source, yypos, radix) = - Tokens.WORD ({digits = String.dropPrefix (yytext, drop), - radix = radix}, - Source.getPos (source, yypos), - Source.getPos (source, yypos + size yytext)) +(* EOF *) +val eof: lexarg -> lexresult = + fn {source, ...} => + let + val _ = Source.newline (source, ~1) + val pos = Source.getPos (source, ~1) + val _ = + if inComment () + then error' (pos, SourcePos.bogus, "Unclosed comment at end of file") + else () + val _ = + if inText () + then error' (pos, SourcePos.bogus, "Unclosed text constant at end of file") + else () + in + Tokens.EOF (pos, SourcePos.bogus) + end %% -%reject -%s A S F L LL LLC LLCQ; +%full + +%s TEXT TEXT_FMT BLOCK_COMMENT LINE_COMMENT LINE_DIR1 LINE_DIR2 LINE_DIR3 LINE_DIR4; + %header (functor MLLexFun (structure Tokens : ML_TOKENS)); %arg ({source}); -alphanum=[A-Za-z'_0-9]*; -alphanumId=[A-Za-z]{alphanum}; -sym=[-!%&$+/:<=>?@~`^|#*]|"\\"; -symId={sym}+; -id={alphanumId}|{symId}; -longid={id}("."{id})*; -ws=("\012"|[\t\ ])*; -nrws=("\012"|[\t\ ])+; + +ws=\t|"\011"|"\012"|" "; cr="\013"; nl="\010"; eol=({cr}{nl}|{nl}|{cr}); -num=[0-9]+; -frac="."{num}; -exp=[eE](~?){num}; -real=(~?)(({num}{frac}?{exp})|({num}{frac}{exp}?)); + +alphanum=[A-Za-z0-9'_]; +alphanumId=[A-Za-z]{alphanum}*; +sym="!"|"%"|"&"|"$"|"#"|"+"|"-"|"/"|":"|"<"|"="|">"|"?"|"@"|"\\"|"~"|"`"|"^"|"|"|"*"; +symId={sym}+; + +tyvarId="'"{alphanum}*; +longSymId=({alphanumId}".")+{symId}; +longAlphanumId=({alphanumId}".")+{alphanumId}; + +decDigit=[0-9]; +decnum={decDigit}("_"*{decDigit})*; hexDigit=[0-9a-fA-F]; -hexnum={hexDigit}+; +hexnum={hexDigit}("_"*{hexDigit})*; +binDigit=[0-1]; +binnum={binDigit}("_"*{binDigit})*; +frac="."{decnum}; +exp=[eE](~?){decnum}; +real=(~?)(({decnum}{frac}?{exp})|({decnum}{frac}{exp}?)); %% -{ws} => (continue ()); -{eol} => (Source.newline (source, yypos); continue ()); -"_address" => - (tok (Tokens.ADDRESS, source, yypos, yypos + size yytext)); -"_build_const" => - (tok (Tokens.BUILD_CONST, source, yypos, yypos + size yytext)); -"_command_line_const" => - (tok (Tokens.COMMAND_LINE_CONST, source, yypos, yypos + size yytext)); -"_const" => - (tok (Tokens.CONST, source, yypos, yypos + size yytext)); -"_export" => - (tok (Tokens.EXPORT, source, yypos, yypos + size yytext)); -"_import" => - (tok (Tokens.IMPORT, source, yypos, yypos + size yytext)); -"_overload" => - (tok (Tokens.OVERLOAD, source, yypos, yypos + size yytext)); -"_symbol" => - (tok (Tokens.SYMBOL, source, yypos, yypos + size yytext)); -"_prim" => - (tok (Tokens.PRIM, source, yypos, yypos + size yytext)); -"_" => (tok (Tokens.WILD, source, yypos, yypos + 1)); -"," => (tok (Tokens.COMMA, source, yypos, yypos + 1)); -"{" => (tok (Tokens.LBRACE, source, yypos, yypos + 1)); -"}" => (tok (Tokens.RBRACE, source, yypos, yypos + 1)); -"[" => (tok (Tokens.LBRACKET, source, yypos, yypos + 1)); -"]" => (tok (Tokens.RBRACKET, source, yypos, yypos + 1)); -";" => (tok (Tokens.SEMICOLON, source, yypos, yypos + 1)); -"(" => (tok (Tokens.LPAREN, source, yypos, yypos + 1)); -")" => (tok (Tokens.RPAREN, source, yypos, yypos + 1)); -"..." => (tok (Tokens.DOTDOTDOT, source, yypos, yypos + 3)); -"|" => (tok (Tokens.BAR, source, yypos, yypos + 1)); -":" => (tok (Tokens.COLON, source, yypos, yypos + 1)); -":>" => (tok (Tokens.COLONGT, source, yypos, yypos + 1)); -"=" => (tok (Tokens.EQUALOP, source, yypos, yypos + 1)); -"#" => (tok (Tokens.HASH, source, yypos, yypos + 1)); -"->" => (tok (Tokens.ARROW, source, yypos, yypos + 2)); -"=>" => (tok (Tokens.DARROW, source, yypos, yypos + 2)); -"and" => (tok (Tokens.AND, source, yypos, yypos + 3)); -"abstype" => (tok (Tokens.ABSTYPE, source, yypos, yypos + 7)); -"as" => (tok (Tokens.AS, source, yypos, yypos + 2)); -"case" => (tok (Tokens.CASE, source, yypos, yypos + 4)); -"datatype" => (tok (Tokens.DATATYPE, source, yypos, yypos + 8)); -"else" => (tok (Tokens.ELSE, source, yypos, yypos + 4)); -"end" => (tok (Tokens.END, source, yypos, yypos + 3)); -"eqtype" => (tok (Tokens.EQTYPE, source, yypos, yypos + 6)); -"exception" => (tok (Tokens.EXCEPTION, source, yypos, yypos + 9)); -"do" => (tok (Tokens.DO, source, yypos, yypos + 2)); -"fn" => (tok (Tokens.FN, source, yypos, yypos + 2)); -"fun" => (tok (Tokens.FUN, source, yypos, yypos + 3)); -"functor" => (tok (Tokens.FUNCTOR, source, yypos, yypos + 7)); -"handle" => (tok (Tokens.HANDLE, source, yypos, yypos + 6)); -"if" => (tok (Tokens.IF, source, yypos, yypos + 2)); -"in" => (tok (Tokens.IN, source, yypos, yypos + 2)); -"include" => (tok (Tokens.INCLUDE, source, yypos, yypos + 7)); -"infix" => (tok (Tokens.INFIX, source, yypos, yypos + 5)); -"infixr" => (tok (Tokens.INFIXR, source, yypos, yypos + 6)); -"let" => (tok (Tokens.LET, source, yypos, yypos + 3)); -"local" => (tok (Tokens.LOCAL, source, yypos, yypos + 5)); -"nonfix" => (tok (Tokens.NONFIX, source, yypos, yypos + 6)); -"of" => (tok (Tokens.OF, source, yypos, yypos + 2)); -"op" => (tok (Tokens.OP, source, yypos, yypos + 2)); -"open" => (tok (Tokens.OPEN, source, yypos, yypos + 4)); -"raise" => (tok (Tokens.RAISE, source, yypos, yypos + 5)); -"rec" => (tok (Tokens.REC, source, yypos, yypos + 3)); -"sharing" => (tok (Tokens.SHARING, source, yypos, yypos + 7)); -"sig" => (tok (Tokens.SIG, source, yypos, yypos + 3)); -"signature" => (tok (Tokens.SIGNATURE, source, yypos, yypos + 9)); -"struct" => (tok (Tokens.STRUCT, source, yypos, yypos + 6)); -"structure" => (tok (Tokens.STRUCTURE, source, yypos, yypos + 9)); -"then" => (tok (Tokens.THEN, source, yypos, yypos + 4)); -"type" => (tok (Tokens.TYPE, source, yypos, yypos + 4)); -"val" => (tok (Tokens.VAL, source, yypos, yypos + 3)); -"where" => (tok (Tokens.WHERE, source, yypos, yypos + 5)); -"while" => (tok (Tokens.WHILE, source, yypos, yypos + 5)); -"with" => (tok (Tokens.WITH, source, yypos, yypos + 4)); -"withtype" => (tok (Tokens.WITHTYPE, source, yypos, yypos + 8)); -"orelse" => (tok (Tokens.ORELSE, source, yypos, yypos + 6)); -"andalso" => (tok (Tokens.ANDALSO, source, yypos, yypos + 7)); -"'"{alphanum}? => (tok' (Tokens.TYVAR, yytext, source, yypos)); -{longid} => +{ws}+ => (continue ()); +{eol} => (Source.newline (source, lastPos (yypos, yytext)); continue ()); + + +"_address" => (tok (Tokens.ADDRESS, yytext, source, yypos)); +"_build_const" => (tok (Tokens.BUILD_CONST, yytext, source, yypos)); +"_command_line_const" => (tok (Tokens.COMMAND_LINE_CONST, yytext, source, yypos)); +"_const" => (tok (Tokens.CONST, yytext, source, yypos)); +"_export" => (tok (Tokens.EXPORT, yytext, source, yypos)); +"_import" => (tok (Tokens.IMPORT, yytext, source, yypos)); +"_overload" => (tok (Tokens.OVERLOAD, yytext, source, yypos)); +"_prim" => (tok (Tokens.PRIM, yytext, source, yypos)); +"_symbol" => (tok (Tokens.SYMBOL, yytext, source, yypos)); + +"#" => (tok (Tokens.HASH, yytext, source, yypos)); +"#[" => (tok (Tokens.HASHLBRACKET, yytext, source, yypos)); +"(" => (tok (Tokens.LPAREN, yytext, source, yypos)); +")" => (tok (Tokens.RPAREN, yytext, source, yypos)); +"," => (tok (Tokens.COMMA, yytext, source, yypos)); +"->" => (tok (Tokens.ARROW, yytext, source, yypos)); +"..." => (tok (Tokens.DOTDOTDOT, yytext, source, yypos)); +":" => (tok (Tokens.COLON, yytext, source, yypos)); +":>" => (tok (Tokens.COLONGT, yytext, source, yypos)); +";" => (tok (Tokens.SEMICOLON, yytext, source, yypos)); +"=" => (tok (Tokens.EQUALOP, yytext, source, yypos)); +"=>" => (tok (Tokens.DARROW, yytext, source, yypos)); +"[" => (tok (Tokens.LBRACKET, yytext, source, yypos)); +"]" => (tok (Tokens.RBRACKET, yytext, source, yypos)); +"_" => (tok (Tokens.WILD, yytext, source, yypos)); +"{" => (tok (Tokens.LBRACE, yytext, source, yypos)); +"|" => (tok (Tokens.BAR, yytext, source, yypos)); +"}" => (tok (Tokens.RBRACE, yytext, source, yypos)); + +"abstype" => (tok (Tokens.ABSTYPE, yytext, source, yypos)); +"and" => (tok (Tokens.AND, yytext, source, yypos)); +"andalso" => (tok (Tokens.ANDALSO, yytext, source, yypos)); +"as" => (tok (Tokens.AS, yytext, source, yypos)); +"case" => (tok (Tokens.CASE, yytext, source, yypos)); +"datatype" => (tok (Tokens.DATATYPE, yytext, source, yypos)); +"do" => (tok (Tokens.DO, yytext, source, yypos)); +"else" => (tok (Tokens.ELSE, yytext, source, yypos)); +"end" => (tok (Tokens.END, yytext, source, yypos)); +"eqtype" => (tok (Tokens.EQTYPE, yytext, source, yypos)); +"exception" => (tok (Tokens.EXCEPTION, yytext, source, yypos)); +"fn" => (tok (Tokens.FN, yytext, source, yypos)); +"fun" => (tok (Tokens.FUN, yytext, source, yypos)); +"functor" => (tok (Tokens.FUNCTOR, yytext, source, yypos)); +"handle" => (tok (Tokens.HANDLE, yytext, source, yypos)); +"if" => (tok (Tokens.IF, yytext, source, yypos)); +"in" => (tok (Tokens.IN, yytext, source, yypos)); +"include" => (tok (Tokens.INCLUDE, yytext, source, yypos)); +"infix" => (tok (Tokens.INFIX, yytext, source, yypos)); +"infixr" => (tok (Tokens.INFIXR, yytext, source, yypos)); +"let" => (tok (Tokens.LET, yytext, source, yypos)); +"local" => (tok (Tokens.LOCAL, yytext, source, yypos)); +"nonfix" => (tok (Tokens.NONFIX, yytext, source, yypos)); +"of" => (tok (Tokens.OF, yytext, source, yypos)); +"op" => (tok (Tokens.OP, yytext, source, yypos)); +"open" => (tok (Tokens.OPEN, yytext, source, yypos)); +"orelse" => (tok (Tokens.ORELSE, yytext, source, yypos)); +"raise" => (tok (Tokens.RAISE, yytext, source, yypos)); +"rec" => (tok (Tokens.REC, yytext, source, yypos)); +"sharing" => (tok (Tokens.SHARING, yytext, source, yypos)); +"sig" => (tok (Tokens.SIG, yytext, source, yypos)); +"signature" => (tok (Tokens.SIGNATURE, yytext, source, yypos)); +"struct" => (tok (Tokens.STRUCT, yytext, source, yypos)); +"structure" => (tok (Tokens.STRUCTURE, yytext, source, yypos)); +"then" => (tok (Tokens.THEN, yytext, source, yypos)); +"type" => (tok (Tokens.TYPE, yytext, source, yypos)); +"val" => (tok (Tokens.VAL, yytext, source, yypos)); +"where" => (tok (Tokens.WHERE, yytext, source, yypos)); +"while" => (tok (Tokens.WHILE, yytext, source, yypos)); +"with" => (tok (Tokens.WITH, yytext, source, yypos)); +"withtype" => (tok (Tokens.WITHTYPE, yytext, source, yypos)); + + +{alphanumId} => (tok' (Tokens.SHORTALPHANUMID, yytext, source, yypos)); +{symId} => (case yytext of - "*" => tok (Tokens.ASTERISK, source, yypos, yypos + 1) - | _ => tok' (Tokens.LONGID, yytext, source, yypos)); -{real} => (tok' (Tokens.REAL, yytext, source, yypos)); -{num} => - (int (yytext, 0, source, yypos, {negate = false}, StringCvt.DEC)); -"~"{num} => - (int (yytext, 1, source, yypos, {negate = true}, StringCvt.DEC)); + "*" => tok (Tokens.ASTERISK, yytext, source, yypos) + | _ => tok' (Tokens.SHORTSYMID, yytext, source, yypos)); +{tyvarId} => (tok' (Tokens.TYVAR, yytext, source, yypos)); +{longAlphanumId} => (tok' (Tokens.LONGALPHANUMID, yytext, source, yypos)); +{longSymId} => (tok' (Tokens.LONGSYMID, yytext, source, yypos)); + + +{real} => + (real (source, yypos, yytext)); +{decnum} => + (int (source, yypos, yytext, 0, {extended = NONE}, {negate = false}, StringCvt.DEC)); +"~"{decnum} => + (int (source, yypos, yytext, 1, {extended = NONE}, {negate = true}, StringCvt.DEC)); "0x"{hexnum} => - (int (yytext, 2, source, yypos, {negate = false}, StringCvt.HEX)); + (int (source, yypos, yytext, 2, {extended = NONE}, {negate = false}, StringCvt.HEX)); "~0x"{hexnum} => - (int (yytext, 3, source, yypos, {negate = true}, StringCvt.HEX)); -"0w"{num} => - (word (yytext, 2, source, yypos, StringCvt.DEC)); + (int (source, yypos, yytext, 3, {extended = NONE}, {negate = true}, StringCvt.HEX)); +"0b"{binnum} => + (int (source, yypos, yytext, 2, {extended = SOME "binary notation"}, {negate = false}, StringCvt.BIN)); +"~0b"{binnum} => + (int (source, yypos, yytext, 3, {extended = SOME "binary notation"}, {negate = true}, StringCvt.BIN)); +"0w"{decnum} => + (word (source, yypos, yytext, 2, {extended = NONE}, StringCvt.DEC)); "0wx"{hexnum} => - (word (yytext, 3, source, yypos, StringCvt.HEX)); -\" => (charlist := [] - ; stringStart := Source.getPos (source, yypos) - ; stringtype := true - ; YYBEGIN S - ; continue ()); -\#\" => (charlist := [] - ; stringStart := Source.getPos (source, yypos) - ; stringtype := false - ; YYBEGIN S - ; continue ()); -"(*#line"{nrws} - => (YYBEGIN L - ; commentStart := Source.getPos (source, yypos) - ; commentLevel := 1 - ; continue ()); -"(*" => (YYBEGIN A - ; commentLevel := 1 - ; commentStart := Source.getPos (source, yypos) - ; continue ()); -. => (error (source, yypos, yypos + 1, "illegal token") ; - continue ()); - -[0-9]+ => (YYBEGIN LL - ; (lineNum := valOf (Int.fromString yytext) - ; colNum := 1) - handle Overflow => YYBEGIN A - ; continue ()); -\. => ((* cheat: take n > 0 dots *) continue ()); -[0-9]+ => (YYBEGIN LLC - ; (colNum := valOf (Int.fromString yytext)) - handle Overflow => YYBEGIN A - ; continue ()); -. => (YYBEGIN LLC; continue () - (* note hack, since ml-lex chokes on the empty string for 0* *)); -"*)" => (YYBEGIN INITIAL - ; lineDirective (source, NONE, yypos + 2) - ; commentLevel := 0; charlist := []; continue ()); -{ws}\" => (YYBEGIN LLCQ; continue ()); -[^\"]* => (lineFile := yytext; continue ()); -\""*)" => (YYBEGIN INITIAL - ; lineDirective (source, SOME (!lineFile), yypos + 3) - ; commentLevel := 0; charlist := []; continue ()); -"*)" => (YYBEGIN INITIAL; commentLevel := 0; charlist := []; continue ()); -. => (YYBEGIN A; continue ()); - -"(*" => (inc commentLevel; continue ()); -\n => (Source.newline (source, yypos) ; continue ()); -"*)" => (dec commentLevel - ; if 0 = !commentLevel then YYBEGIN INITIAL else () - ; continue ()); -. => (continue ()); - -\" => (let - val s = Vector.fromListRev (!charlist) - val _ = charlist := nil - fun make (t, v) = - t (v, !stringStart, Source.getPos (source, yypos + 1)) - val () = YYBEGIN INITIAL - in - if !stringtype - then make (Tokens.STRING, s) - else - make (Tokens.CHAR, - if 1 <> Vector.length s - then (error - (source, yypos, yypos + 1, - "character constant not length 1") - ; 0) - else Vector.sub (s, 0)) - end); -\\a => (addChar #"\a"; continue ()); -\\b => (addChar #"\b"; continue ()); -\\f => (addChar #"\f"; continue ()); -\\n => (addChar #"\n"; continue ()); -\\r => (addChar #"\r"; continue ()); -\\t => (addChar #"\t"; continue ()); -\\v => (addChar #"\v"; continue ()); -\\\^[@-_] => (addChar (Char.chr(Char.ord(String.sub(yytext, 2)) - -Char.ord #"@")); - continue ()); -\\\^. => - (error (source, yypos, yypos + 2, - "illegal control escape; must be one of @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"); - continue ()); -\\[0-9]{3} => (let - fun c (i, scale) = - scale * (Char.ord (String.sub (yytext, i)) - - Char.ord #"0") - val () = addOrd (IntInf.fromInt - (c (1, 100) + c (2, 10) + c (3, 1))) - in - continue () - end); -\\u{hexDigit}{4} => (addHexEscape (String.substring (yytext, 2, 4), - source, yypos) - ; continue ()); -\\U{hexDigit}{8} => (addHexEscape (String.substring (yytext, 2, 8), - source, yypos) - ; continue ()); -\\\" => (addString "\""; continue ()); -\\\\ => (addString "\\"; continue ()); -\\{nrws} => (YYBEGIN F; continue ()); -\\{eol} => (Source.newline (source, yypos + 1) ; YYBEGIN F ; continue ()); -\\ => (stringError (source, yypos, "illegal string escape") - ; continue ()); -{eol} => (Source.newline (source, yypos) - ; stringError (source, yypos, "unclosed string") - ; continue ()); -" "|[\033-\126] => (addString yytext; continue ()); -. => (stringError (source, yypos + 1, "illegal character in string") - ; continue ()); - -{eol} => (Source.newline (source, yypos) ; continue ()); -{ws} => (continue ()); -\\ => (YYBEGIN S - ; stringStart := Source.getPos (source, yypos) - ; continue ()); -. => (stringError (source, yypos, "unclosed string") - ; continue ()); + (word (source, yypos, yytext, 3, {extended = NONE}, StringCvt.HEX)); +"0wb"{binnum} => + (word (source, yypos, yytext, 3, {extended = SOME "binary notation"}, StringCvt.BIN)); + +"\"" => + (startText (Source.getPos (source, yypos), fn (cs, l, r) => + (YYBEGIN INITIAL; + Tokens.STRING (cs, l, r))) + ; YYBEGIN TEXT + ; continue ()); +"#\"" => + (startText (Source.getPos (source, yypos), fn (cs, l, r) => + let + fun err () = + error' (l, r, "character constant not of size 1") + val c = + case Int.compare (Vector.length cs, 1) of + LESS => (err (); 0) + | EQUAL => Vector.sub (cs, 0) + | GREATER => (err (); Vector.sub (cs, 0)) + in + YYBEGIN INITIAL; + Tokens.CHAR (c, l, r) + end) + ; YYBEGIN TEXT + ; continue ()); + +"\"" => (finishText (Source.getPos (source, lastPos (yypos, yytext)))); +" "|!|[\035-\091]|[\093-\126] => + (addTextString yytext; continue ()); +[\192-\223][\128-\191] => + (addTextUTF8 (source, yypos, yytext); continue()); +[\224-\239][\128-\191][\128-\191] => + (addTextUTF8 (source, yypos, yytext); continue()); +[\240-\247][\128-\191][\128-\191][\128-\191] => + (addTextUTF8 (source, yypos, yytext); continue()); +\\a => (addTextChar #"\a"; continue ()); +\\b => (addTextChar #"\b"; continue ()); +\\t => (addTextChar #"\t"; continue ()); +\\n => (addTextChar #"\n"; continue ()); +\\v => (addTextChar #"\v"; continue ()); +\\f => (addTextChar #"\f"; continue ()); +\\r => (addTextChar #"\r"; continue ()); +\\\^[@-_] => (addTextChar (Char.chr(Char.ord(String.sub(yytext, 2)) - Char.ord #"@")); + continue ()); +\\\^. => (error (source, yypos, yypos + 2, "Illegal control escape in text constant; must be one of @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"); + continue ()); +\\[0-9]{3} => (addTextNumEsc (source, yypos, yytext, 1, + {extended = NONE}, StringCvt.DEC) + ; continue ()); +\\u{hexDigit}{4} => + (addTextNumEsc (source, yypos, yytext, 2, + {extended = NONE}, StringCvt.HEX) + ; continue ()); +\\U{hexDigit}{8} => + (addTextNumEsc (source, yypos, yytext, 2, + {extended = SOME "\\Uxxxxxxxx numeric escapes"}, + StringCvt.HEX) + ; continue ()); +"\\\"" => (addTextString "\""; continue ()); +\\\\ => (addTextString "\\"; continue ()); +\\{ws}+ => (YYBEGIN TEXT_FMT; continue ()); +\\{eol} => (Source.newline (source, lastPos (yypos, yytext)); YYBEGIN TEXT_FMT; continue ()); +\\ => (error (source, yypos, yypos + 1, "Illegal escape in text constant") + ; continue ()); +{eol} => (error (source, yypos, lastPos (yypos, yytext), "Unclosed text constant at end of line") + ; Source.newline (source, lastPos (yypos, yytext)) + ; continue ()); +. => (error (source, yypos, yypos, "Illegal character in text constant") + ; continue ()); + +{ws}+ => (continue ()); +{eol} => (Source.newline (source, lastPos (yypos, yytext)); continue ()); +\\ => (YYBEGIN TEXT; continue ()); +. => (error (source, yypos, yypos, "Illegal formatting character in text continuation") + ; continue ()); + + +"(*)" => + (if allowLineComments () + then () + else error (source, yypos, lastPos (yypos, yytext), + "Line comments disallowed, compile with -default-ann 'allowLineComments true'") + ; startComment (source, yypos, fn () => + YYBEGIN INITIAL) + ; YYBEGIN LINE_COMMENT + ; continue ()); +"(*" => + (startComment (source, yypos, fn () => + YYBEGIN INITIAL) + ; YYBEGIN BLOCK_COMMENT + ; continue ()); + +{eol} => + (finishComment (lastPos (yypos, yytext)) + ; Source.newline (source, lastPos (yypos, yytext)) + ; continue ()); +. => + (continue ()); + +"(*)" => + (if allowLineComments () + then () + else error (source, yypos, lastPos (yypos, yytext), + "Line comments disallowed, compile with -default-ann 'allowLineComments true'") + ; startComment (source, yypos, fn () => + YYBEGIN BLOCK_COMMENT) + ; YYBEGIN LINE_COMMENT + ; continue ()); +"(*" => + (startComment (source, yypos, fn () => + YYBEGIN BLOCK_COMMENT) + ; YYBEGIN BLOCK_COMMENT + ; continue ()); +"*)" => + (finishComment (lastPos (yypos,yytext)) + ; continue ()); +{eol} => + (Source.newline (source, lastPos (yypos, yytext)) + ; continue ()); +. => + (continue ()); + + +"(*#line"{ws}+ => + (startLineDir (source, yypos, fn () => + YYBEGIN INITIAL) + ; YYBEGIN LINE_DIR1 + ; continue ()); + +{decDigit}+"."{decDigit}+ => + (let + fun err () = + (addCommentError "Illegal line directive" + ; YYBEGIN BLOCK_COMMENT) + in + case String.split (yytext, #".") of + [line, col] => + (YYBEGIN LINE_DIR2 + ; addLineDirLineCol (valOf (Int.fromString line), valOf (Int.fromString col)) + handle Overflow => err () | Option => err () + ; continue ()) + | _ => (err (); continue ()) + end); +{ws}+"\"" => + (YYBEGIN LINE_DIR3 + ; continue ()); +[^"]*"\"" => + (addLineDirFile (String.dropLast yytext) + ; YYBEGIN LINE_DIR4 + ; continue ()); +{ws}*"*)" => + (finishLineDir (source, lastPos (yypos, yytext)) + ; continue ()); +. => + (addCommentError "Illegal line directive" + ; YYBEGIN BLOCK_COMMENT + ; continue ()); + + +"(*#showBasis"{ws}+"\""[^"]*"\""{ws}*"*)" => + (let + val file = List.nth (String.split (yytext, #"\""), 1) + val file = + if OS.Path.isAbsolute file + then file + else OS.Path.mkCanonical (OS.Path.concat (OS.Path.dir (Source.name source), file)) + in + tok' (fn (_, l, r) => Tokens.SHOW_BASIS (file, l, r), yytext, source, yypos) + end); + +. => + (error (source, yypos, yypos, "Illegal token") + ; continue ()); diff -Nru mlton-20130715/mlton/front-end/ml-yacc-lib-proxy.cm mlton-20210117+dfsg/mlton/front-end/ml-yacc-lib-proxy.cm --- mlton-20130715/mlton/front-end/ml-yacc-lib-proxy.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/ml-yacc-lib-proxy.cm 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2009 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/front-end/sources.cm mlton-20210117+dfsg/mlton/front-end/sources.cm --- mlton-20130715/mlton/front-end/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -3,11 +3,11 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library functor FrontEnd functor MLBFrontEnd diff -Nru mlton-20130715/mlton/front-end/sources.mlb mlton-20210117+dfsg/mlton/front-end/sources.mlb --- mlton-20130715/mlton/front-end/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/front-end/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/.gitignore mlton-20210117+dfsg/mlton/.gitignore --- mlton-20130715/mlton/.gitignore 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/.gitignore 2021-12-28 17:19:36.000000000 +0000 @@ -1,12 +1,26 @@ ## Ignore all .cm directories .cm/ -/mlton-compile -/mlton-compile.exe -/mlton-polyml -/mlton-polyml.exe +## Ignore all .basis files +*.basis + +/mlton*-compile +/mlton*-compile.exe +/mlton*-compile.debug +/mlton*-compile.debug.exe +/mlton*-compile.alloc +/mlton*-compile.alloc.exe +/mlton*-compile.count +/mlton*-compile.count.exe +/mlton*-compile.time +/mlton*-compile.time.exe +/mlton*-compile.trace +/mlton*-compile.trace.exe +/mlton*-compile-polyml +/mlton*-compile-polyml.exe /mlton-polyml.use -/mlton-smlnj.*-* +/mlton*-compile-smlnj.*-* /mlton-stubs.mlb /mlton.def-use -/upgrade-basis.sml + +/mlton-bootstrap-*.tgz diff -Nru mlton-20130715/mlton/main/compile.fun mlton-20210117+dfsg/mlton/main/compile.fun --- mlton-20130715/mlton/main/compile.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/main/compile.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2011 Matthew Fluet. +(* Copyright (C) 2011,2014-2015,2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -16,42 +16,15 @@ (* Intermediate Languages *) (*---------------------------------------------------*) -structure Symbol = Symbol () -structure Field = Field (structure Symbol = Symbol) -structure Record = Record (val isSorted = false - structure Field = Field) -structure SortedRecord = Record (val isSorted = true - structure Field = Field) -structure Tyvar = Tyvar () -structure Ast = Ast (structure Record = Record - structure SortedRecord = SortedRecord - structure Symbol = Symbol - structure Tyvar = Tyvar) -local - open Ast.Tycon -in - structure CharSize = CharSize - structure IntSize = IntSize - structure RealSize = RealSize - structure WordSize = WordSize -end -structure Atoms = Atoms (structure CharSize = CharSize - structure Field = Field - structure IntSize = IntSize - structure RealSize = RealSize - structure Record = Record - structure SortedRecord = SortedRecord - structure Tyvar = Tyvar - structure WordSize = WordSize) +structure Atoms = Atoms () local open Atoms in - structure Const = Const - structure ConstType = Const.ConstType structure Ffi = Ffi - structure WordX = WordX + structure Symbol = Symbol end -structure TypeEnv = TypeEnv (Atoms) +structure Ast = Ast (open Atoms) +structure TypeEnv = TypeEnv (open Atoms) structure CoreML = CoreML (open Atoms structure Type = struct @@ -64,21 +37,18 @@ var = var} fun layout t = - layoutPrettyAux - (t, {expandOpaque = true, - localTyvarNames = false}) + #1 (layoutPretty + (t, {expandOpaque = true, + layoutPrettyTycon = Tycon.layout, + layoutPrettyTyvar = Tyvar.layout})) end) structure Xml = Xml (open Atoms) structure Sxml = Sxml (open Xml) structure Ssa = Ssa (open Atoms) structure Ssa2 = Ssa2 (open Atoms) -structure Machine = Machine (open Atoms - structure Label = Ssa.Label) -local - open Machine -in - structure Runtime = Runtime -end +structure BackendAtoms = BackendAtoms (open Atoms) +structure Rssa = Rssa (open BackendAtoms) +structure Machine = Machine (open BackendAtoms) (*---------------------------------------------------*) (* Compiler Passes *) @@ -98,83 +68,25 @@ in structure Env = Env end -structure LookupConstant = LookupConstant (structure Const = Const - structure ConstType = ConstType - structure Ffi = Ffi) structure Monomorphise = Monomorphise (structure Xml = Xml structure Sxml = Sxml) structure ClosureConvert = ClosureConvert (structure Ssa = Ssa structure Sxml = Sxml) structure SsaToSsa2 = SsaToSsa2 (structure Ssa = Ssa structure Ssa2 = Ssa2) -structure Backend = Backend (structure Ssa = Ssa2 - structure Machine = Machine +structure Ssa2ToRssa = Ssa2ToRssa (structure Rssa = Rssa + structure Ssa2 = Ssa2) +structure Backend = Backend (structure Machine = Machine + structure Rssa = Rssa fun funcToLabel f = f) -structure CCodegen = CCodegen (structure Ffi = Ffi - structure Machine = Machine) +structure CCodegen = CCodegen (structure Machine = Machine) +structure LLVMCodegen = LLVMCodegen (structure CCodegen = CCodegen + structure Machine = Machine) structure x86Codegen = x86Codegen (structure CCodegen = CCodegen structure Machine = Machine) structure amd64Codegen = amd64Codegen (structure CCodegen = CCodegen structure Machine = Machine) - -(* ------------------------------------------------- *) -(* Lookup Constant *) -(* ------------------------------------------------- *) - -val commandLineConstants: {name: string, value: string} list ref = ref [] -fun setCommandLineConstant (c as {name, value}) = - let - fun make (fromString, control) = - let - fun set () = - case fromString value of - NONE => Error.bug (concat ["bad value for ", name]) - | SOME v => control := v - in - set - end - val () = - case List.peek ([("Exn.keepHistory", - make (Bool.fromString, Control.exnHistory))], - fn (s, _) => s = name) of - NONE => () - | SOME (_,set) => set () - in - List.push (commandLineConstants, c) - end - -val allConstants: (string * ConstType.t) list ref = ref [] -val amBuildingConstants: bool ref = ref false - -val lookupConstant = - let - val zero = Const.word (WordX.fromIntInf (0, WordSize.word32)) - val f = - Promise.lazy - (fn () => - if !amBuildingConstants - then (fn ({name, default, ...}, t) => - let - (* Don't keep constants that already have a default value. - * These are defined by _command_line_const and set by - * -const, and shouldn't be looked up. - *) - val () = - if isSome default - then () - else List.push (allConstants, (name, t)) - in - zero - end) - else - File.withIn - (concat [!Control.libTargetDir, "/constants"], fn ins => - LookupConstant.load (ins, !commandLineConstants))) - in - fn z => f () z - end - (* ------------------------------------------------- *) (* Primitive Env *) (* ------------------------------------------------- *) @@ -183,7 +95,11 @@ structure Con = TypeEnv.Con structure Tycon = TypeEnv.Tycon structure Type = TypeEnv.Type - structure Tyvar = TypeEnv.Tyvar + structure Tyvar = + struct + open TypeEnv.Tyvar + open TypeEnv.TyvarExt + end val primitiveDatatypes = Vector.new3 @@ -192,7 +108,7 @@ cons = Vector.new2 ({con = Con.falsee, arg = NONE}, {con = Con.truee, arg = NONE})}, let - val a = Tyvar.newNoname {equality = false} + val a = Tyvar.makeNoname {equality = false} in {tycon = Tycon.list, tyvars = Vector.new1 a, @@ -204,7 +120,7 @@ Type.list (Type.var a))))})} end, let - val a = Tyvar.newNoname {equality = false} + val a = Tyvar.makeNoname {equality = false} in {tycon = Tycon.reff, tyvars = Vector.new1 a, @@ -215,7 +131,7 @@ let open CoreML.Con in - [bind, match, overflow] + [bind, match] end structure Con = @@ -246,50 +162,53 @@ let val _ = List.foreach - (Tycon.prims, fn {kind, name, tycon, ...} => - extendTycon - (E, Ast.Tycon.fromSymbol (Symbol.fromString name, - Region.bogus), - TypeStr.tycon (tycon, kind), - {forceUsed = false, isRebind = false})) + (Tycon.prims, fn {name, tycon, ...} => + if List.contains ([Tycon.arrow, Tycon.tuple], tycon, Tycon.equals) + then () + else extendTycon + (E, Ast.Tycon.fromSymbol (Symbol.fromString name, + Region.bogus), + TypeStr.tycon tycon, + {forceUsed = false, isRebind = false})) val _ = Vector.foreach (primitiveDatatypes, fn {tyvars, tycon, cons} => let val cons = - Env.newCons - (E, Vector.map (cons, fn {con, ...} => - {con = con, name = Con.toAst con})) - (Vector.map - (cons, fn {arg, ...} => - let - val resultType = - Type.con (tycon, Vector.map (tyvars, Type.var)) - in - Scheme.make - {canGeneralize = true, - ty = (case arg of - NONE => resultType - | SOME t => Type.arrow (t, resultType)), - tyvars = tyvars} - end)) + Vector.map + (cons, fn {con, arg} => + let + val res = + Type.con (tycon, Vector.map (tyvars, Type.var)) + val ty = + case arg of + NONE => res + | SOME arg => Type.arrow (arg, res) + val scheme = + Scheme.make + {canGeneralize = true, + ty = ty, + tyvars = tyvars} + in + {con = con, + name = Con.toAst con, + scheme = scheme} + end) + val cons = Env.newCons (E, cons) in extendTycon (E, Tycon.toAst tycon, - TypeStr.data (tycon, - TypeStr.Kind.Arity (Vector.length tyvars), - cons), + TypeStr.data (tycon, cons), {forceUsed = false, isRebind = false}) end) val _ = extendTycon (E, Ast.Tycon.fromSymbol (Symbol.unit, Region.bogus), - TypeStr.def (Scheme.fromType Type.unit, - TypeStr.Kind.Arity 0), + TypeStr.def (Scheme.fromType Type.unit), {forceUsed = false, isRebind = false}) val scheme = Scheme.fromType Type.exn val _ = List.foreach (primitiveExcons, fn c => - extendExn (E, Con.toAst c, c, SOME scheme)) + extendExn (E, Con.toAst c, c, scheme)) in () end @@ -317,474 +236,420 @@ (* parseAndElaborateMLB *) (* ------------------------------------------------- *) -fun quoteFile s = concat ["\"", String.escapeSML s, "\""] - structure MLBString:> sig type t - val fromFile: File.t -> t - val fromString: string -> t + val fromMLBFile: File.t -> t + val fromSMLFile: File.t -> t val lexAndParseMLB: t -> Ast.Basdec.t end = struct type t = string - val fromFile = quoteFile + fun quoteFile s = concat ["\"", String.escapeSML s, "\""] - val fromString = fn s => s + val fromMLBFile = quoteFile + + fun fromSMLFile input = + let + val basis = "$(SML_LIB)/basis/default.mlb" + in + String.concat + ["local\n", + basis, "\n", + "in\n", + quoteFile input, "\n", + "end\n"] + end val lexAndParseMLB = MLBFrontEnd.lexAndParseString end -val lexAndParseMLB = MLBString.lexAndParseMLB - val lexAndParseMLB: MLBString.t -> Ast.Basdec.t = fn input => let - val ast = lexAndParseMLB input - val _ = Control.checkForErrors "parse" + val ast = MLBString.lexAndParseMLB input + val _ = Control.checkForErrors () in ast end -fun sourceFilesMLB {input} = - Ast.Basdec.sourceFiles (lexAndParseMLB (MLBString.fromFile input)) - -val elaborateMLB = Elaborate.elaborateMLB - -val displayEnvDecs = - Control.Layouts - (fn ((_, decs),output) => - (output (Layout.str "\n\n") - ; Vector.foreach - (decs, fn (dec, dc) => - (output o Layout.record) - [("deadCode", Bool.layout dc), - ("decs", List.layout CoreML.Dec.layout dec)]))) - -fun parseAndElaborateMLB (input: MLBString.t) - : Env.t * (CoreML.Dec.t list * bool) vector = - Control.pass - {display = displayEnvDecs, - name = "parseAndElaborate", - stats = fn _ => Layout.empty, - style = Control.ML, - suffix = "core-ml", - thunk = (fn () => - (Const.lookup := lookupConstant - ; elaborateMLB (lexAndParseMLB input, {addPrim = addPrim})))} - -(* ------------------------------------------------- *) -(* Basis Library *) -(* ------------------------------------------------- *) - -fun outputBasisConstants (out: Out.t): unit = +fun parseAndElaborateMLB (input: MLBString.t): (CoreML.Dec.t list * bool) vector = let - val _ = amBuildingConstants := true - val (_, decs) = - parseAndElaborateMLB (MLBString.fromFile "$(SML_LIB)/basis/primitive/primitive.mlb") - val decs = Vector.concatV (Vector.map (decs, Vector.fromList o #1)) - (* Need to defunctorize so the constants are forced. *) - val _ = Defunctorize.defunctorize (CoreML.Program.T {decs = decs}) - val _ = LookupConstant.build (!allConstants, out) + fun parseAndElaborateMLB input = + let + val _ = if !Control.keepAST + then File.remove (concat [!Control.inputFile, ".ast"]) + else () + val (E, decs) = Elaborate.elaborateMLB (lexAndParseMLB input, {addPrim = addPrim}) + val _ = Control.checkForErrors () + val _ = Option.map (!Control.showBasis, fn f => Env.showBasis (E, f)) + val _ = Env.processDefUse E + val _ = Option.app (!Control.exportHeader, Ffi.exportHeader) + in + decs + end in - () + Control.translatePass + {arg = input, + doit = parseAndElaborateMLB, + keepIL = false, + name = "parseAndElaborate", + srcToFile = NONE, + tgtStats = SOME (fn coreML => Control.sizeMessage ("coreML program", coreML)), + tgtToFile = SOME {display = (Control.Layouts + (fn (decss, output) => + (output (Layout.str "\n"); + Vector.foreach + (decss, fn (decs, dc) => + (output (Layout.seq [Layout.str "(* deadCode: ", + Bool.layout dc, + Layout.str " *)"]); + List.foreach + (decs, output o CoreML.Dec.layout)))))), + style = #style CoreML.Program.toFile, + suffix = #suffix CoreML.Program.toFile}, + tgtTypeCheck = NONE} end (* ------------------------------------------------- *) (* compile *) (* ------------------------------------------------- *) -exception Done - -fun elaborate {input: MLBString.t}: Xml.Program.t = +fun mkCompile {outputC, outputLL, outputS} = let - val (E, decs) = parseAndElaborateMLB input - val _ = - case !Control.showBasis of - NONE => () - | SOME f => - File.withOut - (f, fn out => - Layout.outputl (Env.layoutCurrentScope E, out)) - val _ = Env.processDefUse E - val _ = - case !Control.exportHeader of - NONE => () - | SOME f => - File.withOut - (f, fn out => - let - fun print s = Out.output (out, s) - val libname = !Control.libname - val libcap = CharVector.map Char.toUpper libname - val _ = print ("#ifndef __" ^ libcap ^ "_ML_H__\n") - val _ = print ("#define __" ^ libcap ^ "_ML_H__\n") - val _ = print "\n" - val _ = - File.outputContents - (concat [!Control.libDir, "/include/ml-types.h"], out) - val _ = print "\n" - val _ = - File.outputContents - (concat [!Control.libDir, "/include/export.h"], out) - val _ = print "\n" - (* How do programs link against this library by default *) - val defaultLinkage = - case !Control.format of - Control.Archive => "STATIC_LINK" - | Control.Executable => "PART_OF" - | Control.LibArchive => "NO_DEFAULT_LINK" - | Control.Library => "DYNAMIC_LINK" - val _ = - print ("#if !defined(PART_OF_" ^ libcap ^ ") && \\\n\ - \ !defined(STATIC_LINK_" ^ libcap ^ ") && \\\n\ - \ !defined(DYNAMIC_LINK_" ^ libcap ^ ")\n") - val _ = - print ("#define " ^ defaultLinkage ^ "_" ^ libcap ^ "\n") - val _ = print "#endif\n" - val _ = print "\n" - val _ = print ("#if defined(PART_OF_" ^ libcap ^ ")\n") - val _ = print "#define MLLIB_PRIVATE(x) PRIVATE x\n" - val _ = print "#define MLLIB_PUBLIC(x) PUBLIC x\n" - val _ = print ("#elif defined(STATIC_LINK_" ^ libcap ^ ")\n") - val _ = print "#define MLLIB_PRIVATE(x)\n" - val _ = print "#define MLLIB_PUBLIC(x) PUBLIC x\n" - val _ = print ("#elif defined(DYNAMIC_LINK_" ^ libcap ^ ")\n") - val _ = print "#define MLLIB_PRIVATE(x)\n" - val _ = print "#define MLLIB_PUBLIC(x) EXTERNAL x\n" - val _ = print "#else\n" - val _ = print ("#error Must specify linkage for " ^ libname ^ "\n") - val _ = print "#define MLLIB_PRIVATE(x)\n" - val _ = print "#define MLLIB_PUBLIC(x)\n" - val _ = print "#endif\n" - val _ = print "\n" - val _ = print "#ifdef __cplusplus\n" - val _ = print "extern \"C\" {\n" - val _ = print "#endif\n" - val _ = print "\n" - val _ = - if !Control.format = Control.Executable then () else - (print ("MLLIB_PUBLIC(void " ^ libname ^ "_open(int argc, const char** argv);)\n") - ;print ("MLLIB_PUBLIC(void " ^ libname ^ "_close();)\n")) - val _ = Ffi.declareHeaders {print = print} - val _ = print "\n" - val _ = print "#undef MLLIB_PRIVATE\n" - val _ = print "#undef MLLIB_PUBLIC\n" - val _ = print "\n" - val _ = print "#ifdef __cplusplus\n" - val _ = print "}\n" - val _ = print "#endif\n" - val _ = print "\n" - val _ = print ("#endif /* __" ^ libcap ^ "_ML_H__ */\n") - in - () - end) - val _ = if !Control.elaborateOnly then raise Done else () - val decs = - Control.pass - {display = Control.Layouts (fn (decss,output) => - (output (Layout.str "\n\n") - ; Vector.foreach (decss, fn decs => - List.foreach (decs, fn dec => - output (CoreML.Dec.layout dec))))), - name = "deadCode", - suffix = "core-ml", - style = Control.ML, - stats = fn _ => Layout.empty, - thunk = fn () => let - val {prog = decs} = - DeadCode.deadCode {prog = decs} - in - decs - end} - val decs = Vector.concatV (Vector.map (decs, Vector.fromList)) - val coreML = CoreML.Program.T {decs = decs} - val _ = - let - open Control - in - if !keepCoreML - then saveToFile ({suffix = "core-ml"}, No, coreML, - Layouts CoreML.Program.layouts) - else () - end - - (* Set GC_state offsets and sizes. *) - val _ = - let - fun get (name: string): Bytes.t = - case lookupConstant ({default = NONE, name = name}, - ConstType.Word WordSize.word32) of - Const.Word w => Bytes.fromInt (WordX.toInt w) - | _ => Error.bug "Compile.elaborate: GC_state offset must be an int" - in - Runtime.GCField.setOffsets - { - atomicState = get "atomicState_Offset", - cardMapAbsolute = get "generationalMaps.cardMapAbsolute_Offset", - currentThread = get "currentThread_Offset", - curSourceSeqsIndex = get "sourceMaps.curSourceSeqsIndex_Offset", - exnStack = get "exnStack_Offset", - frontier = get "frontier_Offset", - limit = get "limit_Offset", - limitPlusSlop = get "limitPlusSlop_Offset", - maxFrameSize = get "maxFrameSize_Offset", - signalIsPending = get "signalsInfo.signalIsPending_Offset", - stackBottom = get "stackBottom_Offset", - stackLimit = get "stackLimit_Offset", - stackTop = get "stackTop_Offset" - }; - Runtime.GCField.setSizes - { - atomicState = get "atomicState_Size", - cardMapAbsolute = get "generationalMaps.cardMapAbsolute_Size", - currentThread = get "currentThread_Size", - curSourceSeqsIndex = get "sourceMaps.curSourceSeqsIndex_Size", - exnStack = get "exnStack_Size", - frontier = get "frontier_Size", - limit = get "limit_Size", - limitPlusSlop = get "limitPlusSlop_Size", - maxFrameSize = get "maxFrameSize_Size", - signalIsPending = get "signalsInfo.signalIsPending_Size", - stackBottom = get "stackBottom_Size", - stackLimit = get "stackLimit_Size", - stackTop = get "stackTop_Size" - } - end - (* Setup endianness *) - val _ = - let - fun get (name:string): bool = - case lookupConstant ({default = NONE, name = name}, - ConstType.Bool) of - Const.Word w => 1 = WordX.toInt w - | _ => Error.bug "Compile.elaborate: endian unknown" - in - Control.Target.setBigEndian (get "MLton_Platform_Arch_bigendian") - end - val xml = - Control.passTypeCheck - {display = Control.Layouts Xml.Program.layouts, + local + val sourceFiles = Ast.Basdec.sourceFiles o lexAndParseMLB + in + val mlbSourceFiles = sourceFiles o MLBString.fromMLBFile + val smlSourceFiles = sourceFiles o MLBString.fromSMLFile + end + + fun deadCode decs = + let + fun deadCode decs = + let + val {prog = decs} = + DeadCode.deadCode {prog = decs} + val decs = Vector.concatV (Vector.map (decs, Vector.fromList)) + val coreML = CoreML.Program.T {decs = decs} + in + coreML + end + val coreML = + Control.translatePass + {arg = decs, + doit = deadCode, + keepIL = !Control.keepCoreML, + name = "deadCode", + srcToFile = SOME {display = (Control.Layouts + (fn (decss, output) => + (output (Layout.str "\n"); + Vector.foreach + (decss, fn (decs, dc) => + (output (Layout.seq [Layout.str "(* deadCode: ", + Bool.layout dc, + Layout.str " *)"]); + List.foreach + (decs, output o CoreML.Dec.layout)))))), + style = #style CoreML.Program.toFile, + suffix = #suffix CoreML.Program.toFile}, + tgtStats = SOME CoreML.Program.layoutStats, + tgtToFile = SOME CoreML.Program.toFile, + tgtTypeCheck = NONE} + in + coreML + end + fun defunctorize coreML = + Control.translatePass + {arg = coreML, + doit = (fn coreML => + Defunctorize.defunctorize coreML + before Control.checkForErrors ()), + keepIL = false, name = "defunctorize", + srcToFile = SOME CoreML.Program.toFile, + tgtStats = SOME Xml.Program.layoutStats, + tgtToFile = SOME Xml.Program.toFile, + tgtTypeCheck = SOME Xml.typeCheck} + fun frontend input = + Control.translatePass + {arg = input, + doit = defunctorize o deadCode o parseAndElaborateMLB, + keepIL = false, + name = "frontend", + srcToFile = NONE, + tgtStats = SOME Xml.Program.layoutStats, + tgtToFile = SOME Xml.Program.toFile, + tgtTypeCheck = SOME Xml.typeCheck} + val mlbFrontend = frontend o MLBString.fromMLBFile + val smlFrontend = frontend o MLBString.fromSMLFile + + fun regionFromLocation (file, {column, line}) = + let + val sourcePos = SourcePos.make + {column=column, file=file, line=line} + in + Region.make {left=sourcePos, right=sourcePos} + end + + fun mkFrontend {parse, stats, toFile, typeCheck} = + let + val name = #suffix toFile + in + fn input => + Ref.fluidLet + (Control.typeCheck, true, fn () => + Control.translatePass + {arg = input, + doit = (fn input => + case Parse.parseFile (parse (), input) of + Parse.Yes program => program + | Parse.No (msg, location) => + (Control.error + (regionFromLocation (input, location), + Layout.str (concat [name, "Parse failed"]), + msg) + ; Control.checkForErrors () + ; Error.bug "unreachable")), + keepIL = false, + name = concat [name, "Parse"], + srcToFile = NONE, + tgtStats = SOME stats, + tgtToFile = SOME toFile, + tgtTypeCheck = SOME typeCheck}) + end + val xmlFrontend = + mkFrontend + {parse = Xml.Program.parse, stats = Xml.Program.layoutStats, - style = Control.ML, - suffix = "xml", - thunk = fn () => Defunctorize.defunctorize coreML, + toFile = Xml.Program.toFile, typeCheck = Xml.typeCheck} - in - xml - end - -fun preCodegen {input: MLBString.t}: Machine.Program.t = - let - val xml = elaborate {input = input} - val xml = - Control.passTypeCheck - {display = Control.Layouts Xml.Program.layouts, - name = "xmlSimplify", - stats = Xml.Program.layoutStats, - style = Control.ML, - suffix = "xml", - thunk = fn () => Xml.simplify xml, - typeCheck = Xml.typeCheck} - val _ = - let - open Control - in - if !keepXML - then saveToFile ({suffix = "xml"}, No, xml, - Layouts Xml.Program.layouts) - else () - end - val sxml = - Control.passTypeCheck - {display = Control.Layouts Sxml.Program.layouts, - name = "monomorphise", - stats = Sxml.Program.layoutStats, - style = Control.ML, - suffix = "sxml", - thunk = fn () => Monomorphise.monomorphise xml, - typeCheck = Sxml.typeCheck} - val sxml = - Control.passTypeCheck - {display = Control.Layouts Sxml.Program.layouts, - name = "sxmlSimplify", + val sxmlFrontend = + mkFrontend + {parse = Sxml.Program.parse, stats = Sxml.Program.layoutStats, - style = Control.ML, - suffix = "sxml", - thunk = fn () => Sxml.simplify sxml, + toFile = Sxml.Program.toFile, typeCheck = Sxml.typeCheck} - val _ = + val ssaFrontend = + mkFrontend + {parse = Ssa.Program.parse, + stats = Ssa.Program.layoutStats, + toFile = Ssa.Program.toFile, + typeCheck = Ssa.typeCheck} + val ssa2Frontend = + mkFrontend + {parse = Ssa2.Program.parse, + stats = Ssa2.Program.layoutStats, + toFile = Ssa2.Program.toFile, + typeCheck = Ssa2.typeCheck} + + fun xmlSimplify xml = let - open Control + val xml = + Control.simplifyPass + {arg = xml, + doit = Xml.simplify, + execute = true, + keepIL = !Control.keepXML, + name = "xmlSimplify", + stats = Xml.Program.layoutStats, + toFile = Xml.Program.toFile, + typeCheck = Xml.typeCheck} in - if !keepSXML - then saveToFile ({suffix = "sxml"}, No, sxml, - Layouts Sxml.Program.layouts) - else () - end - val ssa = - Control.passTypeCheck - {display = Control.Layouts Ssa.Program.layouts, + xml + end + fun toSxml xml = + Control.translatePass + {arg = xml, + doit = Monomorphise.monomorphise, + keepIL = false, + name = "monomorphise", + srcToFile = SOME Xml.Program.toFile, + tgtStats = SOME Sxml.Program.layoutStats, + tgtToFile = SOME Sxml.Program.toFile, + tgtTypeCheck = SOME Sxml.typeCheck} + fun sxmlSimplify sxml = + let + val sxml = + Control.simplifyPass + {arg = sxml, + doit = Sxml.simplify, + execute = true, + keepIL = !Control.keepSXML, + name = "sxmlSimplify", + stats = Sxml.Program.layoutStats, + toFile = Sxml.Program.toFile, + typeCheck = Sxml.typeCheck} + in + sxml + end + fun toSsa sxml = + Control.translatePass + {arg = sxml, + doit = ClosureConvert.closureConvert, + keepIL = false, name = "closureConvert", - stats = Ssa.Program.layoutStats, - style = Control.No, - suffix = "ssa", - thunk = fn () => ClosureConvert.closureConvert sxml, - typeCheck = Ssa.typeCheck} - val ssa = - Control.passTypeCheck - {display = Control.Layouts Ssa.Program.layouts, - name = "ssaSimplify", - stats = Ssa.Program.layoutStats, - style = Control.No, - suffix = "ssa", - thunk = fn () => Ssa.simplify ssa, - typeCheck = Ssa.typeCheck} - val _ = + srcToFile = SOME Sxml.Program.toFile, + tgtStats = SOME Ssa.Program.layoutStats, + tgtToFile = SOME Ssa.Program.toFile, + tgtTypeCheck = SOME Ssa.typeCheck} + fun ssaSimplify ssa = let - open Control + val ssa = + Control.simplifyPass + {arg = ssa, + doit = Ssa.simplify, + execute = true, + keepIL = !Control.keepSSA, + name = "ssaSimplify", + stats = Ssa.Program.layoutStats, + toFile = Ssa.Program.toFile, + typeCheck = Ssa.typeCheck} in - if !keepSSA - then saveToFile ({suffix = "ssa"}, No, ssa, - Layouts Ssa.Program.layouts) - else () - end - val ssa2 = - Control.passTypeCheck - {display = Control.Layouts Ssa2.Program.layouts, + ssa + end + fun toSsa2 ssa = + Control.translatePass + {arg = ssa, + doit = SsaToSsa2.convert, + keepIL = false, name = "toSsa2", - stats = Ssa2.Program.layoutStats, - style = Control.No, - suffix = "ssa2", - thunk = fn () => SsaToSsa2.convert ssa, - typeCheck = Ssa2.typeCheck} - val ssa2 = - Control.passTypeCheck - {display = Control.Layouts Ssa2.Program.layouts, - name = "ssa2Simplify", - stats = Ssa2.Program.layoutStats, - style = Control.No, - suffix = "ssa2", - thunk = fn () => Ssa2.simplify ssa2, - typeCheck = Ssa2.typeCheck} - val _ = + srcToFile = SOME Ssa.Program.toFile, + tgtStats = SOME Ssa2.Program.layoutStats, + tgtToFile = SOME Ssa2.Program.toFile, + tgtTypeCheck = SOME Ssa2.typeCheck} + fun ssa2Simplify ssa2 = let - open Control + val ssa2 = + Control.simplifyPass + {arg = ssa2, + doit = Ssa2.simplify, + execute = true, + keepIL = !Control.keepSSA2, + name = "ssa2Simplify", + stats = Ssa2.Program.layoutStats, + toFile = Ssa2.Program.toFile, + typeCheck = Ssa2.typeCheck} in - if !keepSSA2 - then saveToFile ({suffix = "ssa2"}, No, ssa2, - Layouts Ssa2.Program.layouts) - else () - end - val codegenImplementsPrim = - case !Control.codegen of - Control.CCodegen => CCodegen.implementsPrim - | Control.x86Codegen => x86Codegen.implementsPrim - | Control.amd64Codegen => amd64Codegen.implementsPrim - val machine = - Control.passTypeCheck - {display = Control.Layouts Machine.Program.layouts, - name = "backend", - stats = fn _ => Layout.empty, - style = Control.No, - suffix = "machine", - thunk = fn () => - (Backend.toMachine - (ssa2, - {codegenImplementsPrim = codegenImplementsPrim})), - typeCheck = fn machine => - (* For now, machine type check is too slow to run. *) - (if !Control.typeCheck - then Machine.Program.typeCheck machine - else ())} - val _ = - let - open Control - in - if !keepMachine - then saveToFile ({suffix = "machine"}, No, machine, - Layouts Machine.Program.layouts) - else () + ssa2 end - in - machine - end - -fun compile {input: MLBString.t, outputC, outputS}: unit = - let - val machine = - Control.trace (Control.Top, "pre codegen") - preCodegen {input = input} - fun clearNames () = - (Machine.Program.clearLabelNames machine - ; Machine.Label.printNameAlphaNumeric := true) - val () = - case !Control.codegen of - Control.CCodegen => - (clearNames () - ; (Control.trace (Control.Top, "C code gen") - CCodegen.output {program = machine, - outputC = outputC})) - | Control.x86Codegen => - (clearNames () - ; (Control.trace (Control.Top, "x86 code gen") - x86Codegen.output {program = machine, - outputC = outputC, - outputS = outputS})) - | Control.amd64Codegen => - (clearNames () - ; (Control.trace (Control.Top, "amd64 code gen") - amd64Codegen.output {program = machine, + fun toRssa ssa2 = + let + val codegenImplementsPrim = + case !Control.codegen of + Control.AMD64Codegen => amd64Codegen.implementsPrim + | Control.CCodegen => CCodegen.implementsPrim + | Control.LLVMCodegen => LLVMCodegen.implementsPrim + | Control.X86Codegen => x86Codegen.implementsPrim + fun toRssa ssa2 = + Ssa2ToRssa.convert + (ssa2, {codegenImplementsPrim = codegenImplementsPrim}) + val rssa = + Control.translatePass + {arg = ssa2, + doit = toRssa, + keepIL = false, + name = "toRssa", + srcToFile = SOME Ssa2.Program.toFile, + tgtStats = SOME Rssa.Program.layoutStats, + tgtToFile = SOME Rssa.Program.toFile, + tgtTypeCheck = SOME Rssa.typeCheck} + in + rssa + end + fun rssaSimplify rssa = + Control.simplifyPass + {arg = rssa, + doit = Rssa.simplify, + execute = true, + keepIL = !Control.keepRSSA, + name = "rssaSimplify", + stats = Rssa.Program.layoutStats, + toFile = Rssa.Program.toFile, + typeCheck = Rssa.typeCheck} + fun toMachine rssa = + let + val machine = + Control.translatePass + {arg = rssa, + doit = Backend.toMachine, + keepIL = false, + name = "backend", + srcToFile = SOME Rssa.Program.toFile, + tgtStats = SOME Machine.Program.layoutStats, + tgtToFile = SOME Machine.Program.toFile, + tgtTypeCheck = SOME Machine.Program.typeCheck} + in + machine + end + fun machineSimplify machine = + Control.simplifyPass + {arg = machine, + doit = Machine.simplify, + execute = true, + keepIL = !Control.keepMachine, + name = "machineSimplify", + stats = Machine.Program.layoutStats, + toFile = Machine.Program.toFile, + typeCheck = Machine.Program.typeCheck} + fun codegen machine = + let + val _ = Machine.Program.clearLabelNames machine + val _ = Machine.Label.printNameAlphaNumeric := true + fun codegen machine = + case !Control.codegen of + Control.AMD64Codegen => + amd64Codegen.output {program = machine, + outputC = outputC, + outputS = outputS} + | Control.CCodegen => + CCodegen.output {program = machine, + outputC = outputC} + | Control.LLVMCodegen => + LLVMCodegen.output {program = machine, + outputC = outputC, + outputLL = outputLL} + | Control.X86Codegen => + x86Codegen.output {program = machine, outputC = outputC, - outputS = outputS})) - val _ = Control.message (Control.Detail, PropertyList.stats) - val _ = Control.message (Control.Detail, HashSet.stats) - in - () - end handle Done => () - -fun compileMLB {input: File.t, outputC, outputS}: unit = - compile {input = MLBString.fromFile input, - outputC = outputC, - outputS = outputS} - -val elaborateMLB = - fn {input: File.t} => - (ignore (elaborate {input = MLBString.fromFile input})) - handle Done => () - -local - fun genMLB {input: File.t list}: MLBString.t = - let - val basis = "$(SML_LIB)/basis/default.mlb" - in - MLBString.fromString - (case input of - [] => basis - | _ => - let - val input = List.map (input, quoteFile) - in - String.concat - ["local\n", - basis, "\n", - "in\n", - String.concat (List.separate (input, "\n")), "\n", - "end\n"] - end) - end -in - fun compileSML {input: File.t list, outputC, outputS}: unit = - compile {input = genMLB {input = input}, - outputC = outputC, - outputS = outputS} - val elaborateSML = - fn {input: File.t list} => - (ignore (elaborate {input = genMLB {input = input}})) - handle Done => () -end + outputS = outputS} + in + Control.translatePass + {arg = machine, + doit = codegen, + keepIL = false, + name = concat [Control.Codegen.toString (!Control.codegen), "Codegen"], + srcToFile = SOME Machine.Program.toFile, + tgtStats = NONE, + tgtToFile = NONE, + tgtTypeCheck = NONE} + end + val goCodegen = codegen + val goMachineSimplify = goCodegen o machineSimplify + val goToMachine = goMachineSimplify o toMachine + val goRssaSimplify = goToMachine o rssaSimplify + val goToRssa = goRssaSimplify o toRssa + val goSsa2Simplify = goToRssa o ssa2Simplify + val goToSsa2 = goSsa2Simplify o toSsa2 + val goSsaSimplify = goToSsa2 o ssaSimplify + val goToSsa = goSsaSimplify o toSsa + val goSxmlSimplify = goToSsa o sxmlSimplify + val goToSxml = goSxmlSimplify o toSxml + val goXmlSimplify = goToSxml o xmlSimplify + + fun mk (il, sourceFiles, frontend, compile) = + {sourceFiles = sourceFiles, + frontend = Control.trace (Control.Top, "Type Check " ^ il) (ignore o frontend), + compile = Control.trace (Control.Top, "Compile " ^ il) (compile o frontend)} + in + {mlb = mk ("SML", mlbSourceFiles, mlbFrontend, goXmlSimplify), + sml = mk ("SML", smlSourceFiles, smlFrontend, goXmlSimplify), + xml = mk ("XML", Vector.new1, xmlFrontend, goXmlSimplify), + sxml = mk ("SXML", Vector.new1, sxmlFrontend, goSxmlSimplify), + ssa = mk ("SSA", Vector.new1, ssaFrontend, goSsaSimplify), + ssa2 = mk ("SSA2", Vector.new1, ssa2Frontend, goSsa2Simplify)} + end end diff -Nru mlton-20130715/mlton/main/compile.sig mlton-20210117+dfsg/mlton/main/compile.sig --- mlton-20130715/mlton/main/compile.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/main/compile.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -14,24 +15,32 @@ sig include COMPILE_STRUCTS - val compileMLB: {input: File.t, - outputC: unit -> {file: File.t, - print: string -> unit, - done: unit -> unit}, - outputS: unit -> {file: File.t, - print: string -> unit, - done: unit -> unit}} -> unit - val compileSML: {input: File.t list, - outputC: unit -> {file: File.t, - print: string -> unit, - done: unit -> unit}, - outputS: unit -> {file: File.t, - print: string -> unit, - done: unit -> unit}} -> unit - val elaborateMLB: {input: File.t} -> unit - val elaborateSML: {input: File.t list} -> unit - val setCommandLineConstant: {name: string, value: string} -> unit - val sourceFilesMLB: {input: File.t} -> File.t vector - (* output a C file to print out the basis constants. *) - val outputBasisConstants: Out.t -> unit + val mkCompile: + {outputC: unit -> {file: File.t, + print: string -> unit, + done: unit -> unit}, + outputLL: unit -> {file: File.t, + print: string -> unit, + done: unit -> unit}, + outputS: unit -> {file: File.t, + print: string -> unit, + done: unit -> unit}} -> + {mlb: {compile: File.t -> unit, + frontend: File.t -> unit, + sourceFiles: File.t -> File.t vector}, + sml: {compile: File.t -> unit, + frontend: File.t -> unit, + sourceFiles: File.t -> File.t vector}, + xml: {compile: File.t -> unit, + frontend: File.t -> unit, + sourceFiles: File.t -> File.t vector}, + sxml: {compile: File.t -> unit, + frontend: File.t -> unit, + sourceFiles: File.t -> File.t vector}, + ssa: {compile: File.t -> unit, + frontend: File.t -> unit, + sourceFiles: File.t -> File.t vector}, + ssa2: {compile: File.t -> unit, + frontend: File.t -> unit, + sourceFiles: File.t -> File.t vector}} end diff -Nru mlton-20130715/mlton/main/lookup-constant.fun mlton-20210117+dfsg/mlton/main/lookup-constant.fun --- mlton-20130715/mlton/main/lookup-constant.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/main/lookup-constant.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,197 +0,0 @@ -(* Copyright (C) 2010-2011 Matthew Fluet. - * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor LookupConstant (S: LOOKUP_CONSTANT_STRUCTS): LOOKUP_CONSTANT = -struct - -open S -local - open Const -in - structure RealX = RealX - structure WordX = WordX -end -structure WordSize = WordX.WordSize - -val buildConstants: (string * (unit -> string)) list = - let - val bool = Bool.toString - val int = Int.toString - open Control - in - [("MLton_Align_align", fn () => int (case !align of - Align4 => 4 - | Align8 => 8)), - ("MLton_Codegen_codegen", fn () => int (case !codegen of - CCodegen => 0 - | x86Codegen => 1 - | amd64Codegen => 2)), - ("MLton_FFI_numExports", fn () => int (Ffi.numExports ())), - ("MLton_Platform_Format", fn () => case !format of - Archive => "archive" - | Executable => "executable" - | LibArchive => "libarchive" - | Library => "library"), - ("MLton_Profile_isOn", fn () => bool (case !profile of - ProfileNone => false - | ProfileCallStack => false - | ProfileDrop => false - | ProfileLabel => false - | _ => true))] - end - -datatype z = datatype ConstType.t - -val gcFields = - [ - "atomicState", - "currentThread", - "sourceMaps.curSourceSeqsIndex", - "exnStack", - "frontier", - "generationalMaps.cardMapAbsolute", - "limit", - "limitPlusSlop", - "maxFrameSize", - "signalsInfo.signalIsPending", - "stackBottom", - "stackLimit", - "stackTop" - ] - -val gcFieldsOffsets = - List.map (gcFields, fn s => - {name = s ^ "_Offset", - value = concat ["(", Ffi.CType.toString Ffi.CType.Word32 ,")", - "(offsetof (struct GC_state, ", s, "))"], - ty = ConstType.Word WordSize.word32}) -val gcFieldsSizes = - List.map (gcFields, fn s => - {name = s ^ "_Size", - value = concat ["(", Ffi.CType.toString Ffi.CType.Word32 ,")", - "(sizeof (gcState.", s, "))"], - ty = ConstType.Word WordSize.word32}) - -fun build (constants, out) = - let - val constants = - List.fold - (constants, gcFieldsSizes @ gcFieldsOffsets, fn ((name, ty), ac) => - if List.exists (buildConstants, fn (name', _) => name = name') - then ac - else {name = name, value = name, ty = ty} :: ac) - in - List.foreach - (List.concat - [["#define MLTON_GC_INTERNAL_TYPES", - "#include \"platform.h\"", - "struct GC_state gcState;", - "", - "int main (int argc, char **argv) {"], - List.revMap - (constants, fn {name, value, ty} => - let - val (format, value) = - case ty of - Bool => ("%s", concat [value, "? \"true\" : \"false\""]) - | Real _ => ("%.20f", value) - | String => ("%s", value) - | Word ws => - (case WordSize.prim (WordSize.roundUpToPrim ws) of - WordSize.W8 => "%\"PRIu8\"" - | WordSize.W16 => "%\"PRIu16\"" - | WordSize.W32 => "%\"PRIu32\"" - | WordSize.W64 => "%\"PRIu64\"", - value) - in - concat ["fprintf (stdout, \"", name, " = ", format, "\\n\", ", - value, ");"] - end), - ["return 0;}"]], - fn l => (Out.output (out, l); Out.newline out)) - end - -fun load (ins: In.t, commandLineConstants) - : {default: string option, name: string} * ConstType.t -> Const.t = - let - val table: {hash: word, name: string, value: string} HashSet.t = - HashSet.new {hash = #hash} - fun add {name, value} = - let - val hash = String.hash name - val _ = - HashSet.lookupOrInsert - (table, hash, - fn {name = name', ...} => name = name', - fn () => {hash = hash, name = name, value = value}) - in - () - end - val () = - List.foreach (buildConstants, fn (name, f) => - add {name = name, value = f ()}) - val () = - List.foreach - (commandLineConstants, fn {name, value} => - let - in - add {name = name, value = value} - end) - val _ = - In.foreachLine - (ins, fn l => - case String.tokens (l, Char.isSpace) of - [name, "=", value] => add {name = name, value = value} - | _ => Error.bug - (concat ["LookupConstants.load: strange constants line: ", l])) - fun lookupConstant ({default, name}, ty: ConstType.t): Const.t = - let - val {value, ...} = - let - val hash = String.hash name - in - HashSet.lookupOrInsert - (table, hash, - fn {name = name', ...} => name = name', - fn () => - case default of - NONE => Error.bug - (concat ["LookupConstants.load.lookupConstant: ", - "constant not found: ", - name]) - | SOME value => - {hash = hash, - name = name, - value = value}) - end - fun error (t: string) = - Error.bug (concat ["LookupConstants.load.lookupConstant: ", - "constant ", name, " expects a ", t, - " but got ", value, "."]) - in - case ty of - Bool => - (case Bool.fromString value of - NONE => error "bool" - | SOME b => Const.Word (WordX.fromIntInf (if b then 1 else 0, WordSize.bool))) - | Real rs => - (case RealX.make (value, rs) of - NONE => error "real" - | SOME r => Const.Real r) - | String => Const.string value - | Word ws => - (case IntInf.fromString value of - NONE => error "word" - | SOME i => Const.Word (WordX.fromIntInf (i, ws))) - end - in - lookupConstant - end - -end diff -Nru mlton-20130715/mlton/main/lookup-constant.sig mlton-20210117+dfsg/mlton/main/lookup-constant.sig --- mlton-20130715/mlton/main/lookup-constant.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/main/lookup-constant.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature LOOKUP_CONSTANT_STRUCTS = - sig - structure Const: CONST - structure ConstType: CONST_TYPE - structure Ffi: FFI - sharing ConstType = Const.ConstType - end - -signature LOOKUP_CONSTANT = - sig - include LOOKUP_CONSTANT_STRUCTS - - val build: (string * ConstType.t) list * Out.t -> unit - val load: - In.t * {name: string, value: string} list - -> {default: string option, name: string} * ConstType.t -> Const.t - end diff -Nru mlton-20130715/mlton/main/main.fun mlton-20210117+dfsg/mlton/main/main.fun --- mlton-20130715/mlton/main/main.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/main/main.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2010-2011,2013 Matthew Fluet. +(* Copyright (C) 2010-2011,2013-2020 Matthew Fluet. * Copyright (C) 1999-2009 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -16,25 +16,32 @@ structure Place = struct - datatype t = Files | Generated | MLB | O | OUT | SML | TypeCheck - + datatype t = Files | Generated | MLB | O | OUT | SML | SSA | SSA2 | SXML | TypeCheck | XML val toInt: t -> int = fn MLB => 1 | SML => 1 | Files => 2 | TypeCheck => 4 - | Generated => 5 - | O => 6 - | OUT => 7 + | XML => 6 + | SXML => 7 + | SSA => 10 + | SSA2 => 11 + | Generated => 13 + | O => 14 + | OUT => 15 val toString = fn Files => "files" - | SML => "sml" - | MLB => "mlb" | Generated => "g" + | MLB => "mlb" | O => "o" | OUT => "out" + | SML => "sml" + | SSA => "ssa" + | SSA2 => "ssa2" + | SXML => "sxml" | TypeCheck => "tc" + | XML => "xml" fun compare (p, p') = Int.compare (toInt p, toInt p') end @@ -51,21 +58,27 @@ datatype t = Anns | PathMap end -val gcc: string ref = ref "" +val cc: string list ref = ref ["cc"] val arScript: string ref = ref "" val asOpts: {opt: string, pred: OptPred.t} list ref = ref [] val ccOpts: {opt: string, pred: OptPred.t} list ref = ref [] +val mathLinkOpt: string ref = ref "-lm" +val gmpLinkOpt: string ref = ref "-lgmp" val linkOpts: {opt: string, pred: OptPred.t} list ref = ref [] +val llvm_as: string ref = ref "llvm-as" +val llvm_asOpts: {opt: string, pred: OptPred.t} list ref = ref [] +val llvm_llc: string ref = ref "llc" +val llvm_llcOpts: {opt: string, pred: OptPred.t} list ref = ref [] +val llvm_opt: string ref = ref "opt" +val llvm_optOpts: {opt: string, pred: OptPred.t} list ref = ref [] -val buildConstants: bool ref = ref false val debugRuntime: bool ref = ref false -datatype debugFormat = Dwarf | DwarfPlus | Dwarf2 | Stabs | StabsPlus -val debugFormat: debugFormat option ref = ref NONE val expert: bool ref = ref false val explicitAlign: Control.align option ref = ref NONE -val explicitChunk: Control.chunk option ref = ref NONE -datatype explicitCodegen = Native | Explicit of Control.codegen +val explicitChunkify: Control.Chunkify.t option ref = ref NONE +datatype explicitCodegen = Native | Explicit of Control.Codegen.t val explicitCodegen: explicitCodegen option ref = ref NONE +val explicitNativePIC: bool option ref = ref NONE val keepGenerated = ref false val keepO = ref false val output: string option ref = ref NONE @@ -101,20 +114,16 @@ (fn () => let val targetsDir = - OS.Path.mkAbsolute { path = "targets", - relativeTo = !Control.libDir } + OS.Path.mkAbsolute {path = "targets", relativeTo = !Control.libDir} val potentialTargets = Dir.lsDirs targetsDir fun targetMap target = let val targetDir = - OS.Path.mkAbsolute { path = target, - relativeTo = targetsDir } + OS.Path.mkAbsolute {path = target, relativeTo = targetsDir} val osFile = - OS.Path.joinDirFile { dir = targetDir, - file = "os" } + OS.Path.joinDirFile {dir = targetDir, file = "os"} val archFile = - OS.Path.joinDirFile { dir = targetDir, - file = "arch" } + OS.Path.joinDirFile {dir = targetDir, file = "arch"} val os = File.contents osFile val arch = File.contents archFile val os = List.first (String.tokens (os, Char.isSpace)) @@ -128,7 +137,7 @@ NONE => Error.bug (concat ["strange arch: ", arch]) | SOME a => a in - SOME { arch = arch, os = os, target = target } + SOME {arch = arch, os = os, target = target} end handle _ => NONE in @@ -146,7 +155,7 @@ ; Target.os := os end -fun hasCodegen (cg) = +fun hasCodegen (cg, {default}) = let datatype z = datatype Control.Target.arch datatype z = datatype Control.Target.os @@ -155,27 +164,27 @@ in case !Control.Target.arch of AMD64 => (case cg of - x86Codegen => false + X86Codegen => false | _ => true) | X86 => (case cg of - amd64Codegen => false - | x86Codegen => + AMD64Codegen => false + | X86Codegen => + not default + orelse (* Darwin PIC doesn't work *) - !Control.Target.os <> Darwin orelse - !Control.format = Executable orelse - !Control.format = Archive + !Control.Target.os <> Darwin | _ => true) | _ => (case cg of - amd64Codegen => false - | x86Codegen => false + AMD64Codegen => false + | X86Codegen => false | _ => true) end fun hasNativeCodegen () = let datatype z = datatype Control.codegen in - hasCodegen amd64Codegen - orelse hasCodegen x86Codegen + hasCodegen (AMD64Codegen, {default = true}) + orelse hasCodegen (X86Codegen, {default = true}) end @@ -187,6 +196,7 @@ Alpha => true | AMD64 => true | ARM => true + | ARM64 => true | HPPA => true | IA64 => true | MIPS => true @@ -202,17 +212,17 @@ case e of Control.Elaborate.Bad => usage (concat ["invalid -", flag, " flag: ", s]) - | Control.Elaborate.Deprecated ids => - if !Control.warnDeprecated + | Control.Elaborate.Good _ => () + | Control.Elaborate.Other => + usage (concat ["invalid -", flag, " flag: ", s]) + | Control.Elaborate.Proxy (ids, {deprecated}) => + if deprecated andalso !Control.warnDeprecated then Out.output (Out.error, concat ["Warning: ", "deprecated annotation: ", s, ", use ", List.toString Control.Elaborate.Id.name ids, ".\n"]) else () - | Control.Elaborate.Good () => () - | Control.Elaborate.Other => - usage (concat ["invalid -", flag, " flag: ", s]) open Control Popt datatype z = datatype MLton.Platform.Arch.t datatype z = datatype MLton.Platform.OS.t @@ -243,40 +253,53 @@ (Expert, "as-opt-quote", " ", "pass (quoted) option to assembler", SpaceString (fn s => List.push (asOpts, {opt = s, pred = OptPred.Yes}))), - (Expert, "build-constants", " {false|true}", - "output C file that prints basis constants", - boolRef buildConstants), - (Expert, "cc", " ", "path to gcc executable", - SpaceString (fn s => gcc := s)), + (Expert, "bounce-rssa-limit", "", + "Maximum number of rssa variables to bounce around gc", + Int (fn i => bounceRssaLimit := (if i < 0 then NONE else SOME i))), + (Expert, "bounce-rssa-live-cutoff", "", + "Limit of bounceable variables at bounce points", + Int (fn i => bounceRssaLiveCutoff := (if i < 0 then NONE else SOME i))), + (Expert, "bounce-rssa-loop-size-cutoff", "", + "Largest loop size to consider", + Int (fn i => bounceRssaLoopCutoff := (if i < 0 then NONE else SOME i))), + (Expert, "bounce-rssa-usage-cutoff", "", + "Maximum variable use count to consider", + Int (fn i => bounceRssaUsageCutoff := (if i < 0 then NONE else SOME i))), + (Expert, "cc", " ", "set C compiler", + SpaceString + (fn s => cc := String.tokens (s, Char.isSpace))), (Normal, "cc-opt", " ", "pass option to C compiler", (SpaceString o tokenizeOpt) (fn s => List.push (ccOpts, {opt = s, pred = OptPred.Yes}))), (Expert, "cc-opt-quote", " ", "pass (quoted) option to C compiler", SpaceString (fn s => List.push (ccOpts, {opt = s, pred = OptPred.Yes}))), - (Expert, "chunkify", " {coalesce|func|one}", "set chunkify method", - SpaceString (fn s => - explicitChunk - := SOME (case s of - "func" => ChunkPerFunc - | "one" => OneChunk - | _ => let - val usage = fn () => - usage (concat ["invalid -chunkify flag: ", s]) - in - if String.hasPrefix (s, {prefix = "coalesce"}) - then let - val s = String.dropPrefix (s, 8) - in - if String.forall (s, Char.isDigit) - then (case Int.fromString s of - NONE => usage () - | SOME n => Coalesce - {limit = n}) - else usage () - end - else usage () - end))), + (Expert, "chunkify", " {coalesce|func|one|simple}", "set chunkify stategy", + SpaceString + (fn s => + explicitChunkify := (case Chunkify.fromString s of + SOME chunkify => SOME chunkify + | NONE => usage (concat ["invalid -chunkify flag: ", s])))), + (Expert, "chunk-batch", " ", "batch c files at size ~n", + Int (fn n => chunkBatch := n)), + (Expert, "chunk-jump-table", " {false|true}", + "whether to use explicit jump table for chunk entry switch", + Bool (fn b => chunkJumpTable := b)), + (Expert, "chunk-may-rto-self-opt", " {true|false}", + "whether to optimize return/raise that may transfer to self chunk", + Bool (fn b => chunkMayRToSelfOpt := b)), + (Expert, "chunk-must-rto-other-opt", " {true|false}", + "whether to optimize return/raise that must transfer to one other chunk", + Bool (fn b => chunkMustRToOtherOpt := b)), + (Expert, "chunk-must-rto-self-opt", " {true|false}", + "whether to optimize return/raise that must transfer to self chunk", + Bool (fn b => chunkMustRToSelfOpt := b)), + (Expert, "chunk-must-rto-sing-opt", " {true|false}", + "whether to optimize return/raise that must transfer to a single label", + Bool (fn b => chunkMustRToSingOpt := b)), + (Expert, "chunk-tail-call", " {false|true}", + "whether to use tail calls for interchunk transfers", + Bool (fn b => chunkTailCall := b)), (Expert, "closure-convert-globalize", " {true|false}", "whether to globalize during closure conversion", Bool (fn b => (closureConvertGlobalize := b))), @@ -291,7 +314,7 @@ fn cg => case cg of Native => if hasNativeCodegen () then SOME "native" else NONE - | Explicit cg => if hasCodegen cg + | Explicit cg => if hasCodegen (cg, {default = true}) then SOME (Control.Codegen.toString cg) else NONE), "|"), @@ -306,12 +329,16 @@ s = Control.Codegen.toString cg) of SOME cg => Explicit cg | NONE => usage (concat ["invalid -codegen flag: ", s]))))), + (Expert, "codegen-comments", " ", "level of comments (0)", + intRef codegenComments), + (Expert, "codegen-fuse-op-and-chk", " {false|true}", "fuse `op` and `opCheckP` primitives in codegen", + boolRef codegenFuseOpAndChk), (Normal, "const", " ' '", "set compile-time constant", SpaceString (fn s => case String.tokens (s, Char.isSpace) of [name, value] => - Compile.setCommandLineConstant {name = name, - value = value} + Control.setCommandLineConst {name = name, + value = value} | _ => usage (concat ["invalid -const flag: ", s]))), (Expert, "contify-into-main", " {false|true}", "contify functions into main", @@ -319,20 +346,8 @@ (Expert, "debug", " {false|true}", "produce executable with debug info", Bool (fn b => (debug := b ; debugRuntime := b))), - (Expert, "debug-runtime", " {false|true}", "produce executable with debug info", + (Expert, "debug-runtime", " {false|true}", "link with debug runtime", boolRef debugRuntime), - (Expert, "debug-format", " {default|dwarf|dwarf+|drwaf2|stabs|stabs+}", - "choose debug symbol format", - SpaceString (fn s => - debugFormat := - (case s of - "default" => NONE - | "dwarf" => SOME Dwarf - | "dwarf+" => SOME DwarfPlus - | "dwarf2" => SOME Dwarf2 - | "stabs" => SOME Stabs - | "stabs+" => SOME StabsPlus - | _ => usage (concat ["invalid -debug-format flag: ", s])))), let val flag = "default-ann" in @@ -376,13 +391,25 @@ reportAnnotation (s, flag, Control.Elaborate.processEnabled (s, false)))) end, - (Expert, "drop-pass", " ", "omit optimization pass", + (Expert, "disable-pass", " ", "disable optimization pass", SpaceString (fn s => (case Regexp.fromString s of SOME (re,_) => let val re = Regexp.compileDFA re - in List.push (dropPasses, re) + in List.push (executePasses, (re, false)) + end + | NONE => usage (concat ["invalid -disable-pass flag: ", s])))), + (Expert, "drop-pass", " ", "disable optimization pass", + SpaceString + (fn s => (if !Control.warnDeprecated + then Out.output + (Out.error, + "Warning: -drop-pass is deprecated. Use -disable-pass.\n") + else (); + case Regexp.fromString s of + SOME (re,_) => let val re = Regexp.compileDFA re + in List.push (executePasses, (re, false)) end - | NONE => usage (concat ["invalid -drop-pass flag: ", s])))), + | NONE => usage (concat ["invalid -disable-pass flag: ", s])))), let val flag = "enable-ann" in @@ -392,6 +419,13 @@ reportAnnotation (s, flag, Control.Elaborate.processEnabled (s, true)))) end, + (Expert, "enable-pass", " ", "enable optimization pass", + SpaceString + (fn s => (case Regexp.fromString s of + SOME (re,_) => let val re = Regexp.compileDFA re + in List.push (executePasses, (re, true)) + end + | NONE => usage (concat ["invalid -enable-pass flag: ", s])))), (Expert, "error-threshhold", " ", "error threshhold (20)", intRef errorThreshhold), (Expert, "emit-main", " {true|false}", "emit main() startup function", @@ -423,6 +457,25 @@ | "first" => First | "every" => Every | _ => usage (concat ["invalid -gc-check flag: ", s])))), + (Expert, "gc-expect", " {none|false|true}", "GC expect", + SpaceString (fn s => + gcExpect := + (case s of + "false" => SOME false + | "none" => NONE + | "true" => SOME true + | _ => usage (concat ["invalid -gc-expect flag: ", s])))), + (Expert, "globalize-arrays", " {false|true}", "globalize arrays", + boolRef globalizeArrays), + (Expert, "globalize-refs", " {true|false}", "globalize refs", + boolRef globalizeRefs), + (Expert, "globalize-small-int-inf", " {true|false}", "globalize int-inf as small type", + boolRef globalizeSmallIntInf), + (Expert, "globalize-small-type", " {0|1|2|3|4|9}", "globalize small type", + intRef globalizeSmallType), + (Expert, "gmp-link-opt", " ", "link option for GMP library", + (SpaceString o tokenizeOpt) + (fn s => gmpLinkOpt := s)), (Normal, "ieee-fp", " {false|true}", "use strict IEEE floating-point", boolRef Native.IEEEFP), (Expert, "indentation", " ", "indentation level in ILs", @@ -494,7 +547,8 @@ (Normal, "keep", " {g|o}", "save intermediate files", SpaceString (fn s => case s of - "core-ml" => keepCoreML := true + "ast" => keepAST := true + | "core-ml" => keepCoreML := true | "dot" => keepDot := true | "g" => keepGenerated := true | "machine" => keepMachine := true @@ -512,6 +566,11 @@ in List.push (keepPasses, re) end | NONE => usage (concat ["invalid -keep-pass flag: ", s])))), + (Expert, "layout-width", " ", "target width for pretty printer", + Int (fn n => + if n > 0 + then Layout.setDefaultWidth n + else usage (concat ["invalid -layout-width arg: ", Int.toString n]))), (Expert, "libname", " ", "the name of the generated library", SpaceString (fn s => libname := s)), (Normal, "link-opt", " ", "pass option to linker", @@ -520,14 +579,56 @@ (Expert, "link-opt-quote", " ", "pass (quoted) option to linker", SpaceString (fn s => List.push (linkOpts, {opt = s, pred = OptPred.Yes}))), - (Expert, "loop-passes", " ", "loop optimization passes (1)", + (Expert, "llvm-as", " ", "path to llvm .ll -> .bc assembler", + SpaceString (fn s => llvm_as := s)), + (Normal, "llvm-as-opt", " ", "pass option to llvm assembler", + (SpaceString o tokenizeOpt) + (fn s => List.push (llvm_asOpts, {opt = s, pred = OptPred.Yes}))), + (Expert, "llvm-as-opt-quote", " ", "pass (quoted) option to llvm assembler", + SpaceString + (fn s => List.push (llvm_asOpts, {opt = s, pred = OptPred.Yes}))), + (Expert, "llvm-aamd", " {none|tbaa}", + "Include alias-analysis metadata when compiling with LLVM", + SpaceString + (fn s => + llvmAAMD := (case LLVMAliasAnalysisMetaData.fromString s of + SOME aamd => aamd + | NONE => usage (concat ["invalid -llvm-aamd flag: ", s])))), + (Expert, "llvm-cc10", " {false|true}", "use llvm 'cc10' for interchunk transfers", + boolRef llvmCC10), + (Expert, "llvm-llc", " ", "path to llvm .bc -> .o compiler", + SpaceString (fn s => llvm_llc := s)), + (Normal, "llvm-llc-opt", " ", "pass option to llvm compiler", + (SpaceString o tokenizeOpt) + (fn s => List.push (llvm_llcOpts, {opt = s, pred = OptPred.Yes}))), + (Expert, "llvm-llc-opt-quote", " ", "pass (quoted) option to llvm compiler", + SpaceString + (fn s => List.push (llvm_llcOpts, {opt = s, pred = OptPred.Yes}))), + (Expert, "llvm-opt", " ", "path to llvm .bc -> .bc optimizer", + SpaceString (fn s => llvm_opt := s)), + (Normal, "llvm-opt-opt", " ", "pass option to llvm optimizer", + (SpaceString o tokenizeOpt) + (fn s => List.push (llvm_optOpts, {opt = s, pred = OptPred.Yes}))), + (Expert, "llvm-opt-opt-quote", " ", "pass (quoted) option to llvm optimizer", + SpaceString + (fn s => List.push (llvm_optOpts, {opt = s, pred = OptPred.Yes}))), + (Expert, "loop-unroll-limit", " ", "limit code growth by loop unrolling", + Int + (fn i => + if i >= 0 + then loopUnrollLimit := i + else usage (concat ["invalid -loop-unroll-limit: ", Int.toString i]))), + (Expert, "loop-unswitch-limit", " ", "limit code growth by loop unswitching", Int (fn i => - if i >= 1 - then loopPasses := i - else usage (concat ["invalid -loop-passes arg: ", Int.toString i]))), + if i >= 0 + then loopUnswitchLimit := i + else usage (concat ["invalid -loop-unswitch-limit: ", Int.toString i]))), (Expert, "mark-cards", " {true|false}", "mutator marks cards", boolRef markCards), + (Expert, "math-link-opt", " ", "link option for math library", + (SpaceString o tokenizeOpt) + (fn s => mathLinkOpt := s)), (Expert, "max-function-size", " ", "max function size (blocks)", intRef maxFunctionSize), (Normal, "mlb-path-map", " ", "additional MLB path map", @@ -538,8 +639,9 @@ [case parseMlbPathVar s of NONE => Error.bug ("strange mlb path var: " ^ s) | SOME v => v])), - (Expert, "native-commented", " ", "level of comments (0)", - intRef Native.commented), + (Expert, "native-al-redundant", "{true|false}", + "eliminate redundant AL ops", + boolRef Native.elimALRedundant), (Expert, "native-copy-prop", " {true|false}", "use copy propagation", boolRef Native.copyProp), @@ -557,23 +659,20 @@ boolRef Native.moveHoist), (Expert, "native-optimize", " ", "level of optimizations", intRef Native.optimize), + (Expert, "native-pic", " {false|true}", "generate position-independent code", + Bool (fn b => explicitNativePIC := SOME b)), (Expert, "native-split", " ", "split assembly files at ~n lines", Int (fn i => Native.split := SOME i)), (Expert, "native-shuffle", " {true|false}", "shuffle registers at C-calls", Bool (fn b => Native.shuffle := b)), + (Expert, "opt-fuel", " ", "optimization 'fuel'", + Int (fn n => optFuel := SOME n)), (Expert, "opt-passes", " {default|minimal}", "level of optimizations", SpaceString (fn s => - let - fun err s = - usage (concat ["invalid -opt-passes flag: ", s]) - in - List.foreach - (!optimizationPasses, fn {il,set,...} => - case set s of - Result.Yes () => () - | Result.No s' => err (concat [s', "(for ", il, ")"])) - end)), + case Control.OptimizationPasses.setAll s of + Result.No s => usage (concat ["invalid -opt-passes flag: ", s]) + | Result.Yes () => ())), (Normal, "output", " ", "name of output file", SpaceString (fn s => output := SOME s)), (Expert, "polyvariance", " {true|false}", "use polyvariance", @@ -614,6 +713,12 @@ rounds = rounds, small = small} | _ => ())), + (Expert, "pi-style", " {default|npi|pic|pie}", "position-independent style", + SpaceString (fn s => + (case (s, PositionIndependentStyle.fromString s) of + ("default", NONE) => positionIndependentStyle := NONE + | (_, SOME pis) => positionIndependentStyle := SOME pis + | _ => usage (concat ["invalid -pi-style flag: ", s])))), (Expert, "prefer-abs-paths", " {false|true}", "prefer absolute paths when referring to files", boolRef preferAbsPaths), @@ -646,6 +751,9 @@ | "time-label" => ProfileTimeLabel | _ => usage (concat ["invalid -profile arg: ", s]))))), + (Expert, "profile-block", " {false|true}", + "profile IL blocks in addition to IL functions", + boolRef profileBlock), (Normal, "profile-branch", " {false|true}", "profile branches in addition to functions", boolRef profileBranch), @@ -703,6 +811,8 @@ boolRef profileVal), (Normal, "runtime", " ", "pass arg to runtime via @MLton", SpaceString (fn s => List.push (runtimeArgs, s))), + (Expert, "seed-rand", " ", "seed the pseudo-random number generator", + Word Random.srand), (Expert, "show", " {anns|path-map}", "print specified data and stop", SpaceString (fn s => @@ -710,32 +820,39 @@ "anns" => Show.Anns | "path-map" => Show.PathMap | _ => usage (concat ["invalid -show arg: ", s])))), - (Normal, "show-basis", " ", "write out the final basis environment", + (Normal, "show-basis", " ", "write final basis environment", SpaceString (fn s => showBasis := SOME s)), + (Expert, "show-basis-compact", " {false|true}", "show basis environment in compact form", + boolRef showBasisCompact), + (Expert, "show-basis-def", " {true|false}", "show basis environment with definition source position", + boolRef showBasisDef), + (Expert, "show-basis-flat", " {true|false}", "show basis environment with long identifier names", + boolRef showBasisFlat), (Normal, "show-def-use", " ", "write def-use information", SpaceString (fn s => showDefUse := SOME s)), (Expert, "show-types", " {true|false}", "show types in ILs", boolRef showTypes), + (Expert, "split-types-bool", " {smart|always|never}", + "bool type splitting method", + SpaceString (fn s => + splitTypesBool := + (case s of + "always" => Always + | "never" => Never + | "smart" => Smart + | _ => usage (concat ["invalid -split-types-bool flag: ", s])))), (Expert, "ssa-passes", " ", "ssa optimization passes", SpaceString (fn s => - case List.peek (!Control.optimizationPasses, - fn {il, ...} => String.equals ("ssa", il)) of - SOME {set, ...} => - (case set s of - Result.Yes () => () - | Result.No s' => usage (concat ["invalid -ssa-passes arg: ", s'])) - | NONE => Error.bug "ssa optimization passes missing")), + case Control.OptimizationPasses.set {il = "ssa", passes = s} of + Result.Yes () => () + | Result.No s => usage (concat ["invalid -ssa-passes arg: ", s]))), (Expert, "ssa2-passes", " ", "ssa2 optimization passes", SpaceString (fn s => - case List.peek (!Control.optimizationPasses, - fn {il, ...} => String.equals ("ssa2", il)) of - SOME {set, ...} => - (case set s of - Result.Yes () => () - | Result.No s' => usage (concat ["invalid -ssa2-passes arg: ", s'])) - | NONE => Error.bug "ssa2 optimization passes missing")), + case Control.OptimizationPasses.set {il = "ssa2", passes = s} of + Result.Yes () => () + | Result.No s => usage (concat ["invalid -ssa2-passes arg: ", s]))), (Normal, "stop", " {f|g|o|tc}", "when to stop", SpaceString (fn s => @@ -745,16 +862,19 @@ | "o" => Place.O | "tc" => Place.TypeCheck | _ => usage (concat ["invalid -stop arg: ", s])))), + (Expert, "stop-pass", " ", "stop compilation after pass", + SpaceString + (fn s => (case Regexp.fromString s of + SOME (re,_) => let val re = Regexp.compileDFA re + in List.push (stopPasses, re) + end + | NONE => usage (concat ["invalid -stop-pass flag: ", s])))), (Expert, "sxml-passes", " ", "sxml optimization passes", SpaceString (fn s => - case List.peek (!Control.optimizationPasses, - fn {il, ...} => String.equals ("sxml", il)) of - SOME {set, ...} => - (case set s of - Result.Yes () => () - | Result.No s' => usage (concat ["invalid -sxml-passes arg: ", s'])) - | NONE => Error.bug "sxml optimization passes missing")), + case Control.OptimizationPasses.set {il = "sxml", passes = s} of + Result.Yes () => () + | Result.No s => usage (concat ["invalid -sxml-passes arg: ", s]))), (Normal, "target", concat [" {", (case targetMap () of @@ -791,6 +911,24 @@ (SpaceString2 (fn (target, opt) => List.push (linkOpts, {opt = opt, pred = OptPred.Target target})))), + (Expert, "target-llvm-as-opt", " ", "target-dependent llvm assembler option", + (SpaceString2 o tokenizeTargetOpt) + (fn (target, opt) => List.push (llvm_asOpts, {opt = opt, pred = OptPred.Target target}))), + (Expert, "target-llvm-as-opt-quote", " ", "target-dependent llvm assembler option (quoted)", + SpaceString2 + (fn (target, opt) => List.push (llvm_asOpts, {opt = opt, pred = OptPred.Target target}))), + (Expert, "target-llvm-llc-opt", " ", "target-dependent llvm compiler option", + (SpaceString2 o tokenizeTargetOpt) + (fn (target, opt) => List.push (llvm_llcOpts, {opt = opt, pred = OptPred.Target target}))), + (Expert, "target-llvm-llc-opt-quote", " ", "target-dependent llvm compiler option (quoted)", + SpaceString2 + (fn (target, opt) => List.push (llvm_llcOpts, {opt = opt, pred = OptPred.Target target}))), + (Expert, "target-llvm-opt-opt", " ", "target-dependent llvm optimizer option", + (SpaceString2 o tokenizeTargetOpt) + (fn (target, opt) => List.push (llvm_optOpts, {opt = opt, pred = OptPred.Target target}))), + (Expert, "target-llvm-opt-opt-quote", " ", "target-dependent llvm optimizer option (quoted)", + SpaceString2 + (fn (target, opt) => List.push (llvm_optOpts, {opt = opt, pred = OptPred.Target target}))), (Expert, #1 trace, " name1,...", "trace compiler internals", #2 trace), (Expert, "type-check", " {false|true}", "type check ILs", boolRef typeCheck), @@ -812,13 +950,9 @@ (Expert, "xml-passes", " ", "xml optimization passes", SpaceString (fn s => - case List.peek (!Control.optimizationPasses, - fn {il, ...} => String.equals ("xml", il)) of - SOME {set, ...} => - (case set s of - Result.Yes () => () - | Result.No s' => usage (concat ["invalid -xml-passes arg: ", s'])) - | NONE => Error.bug "xml optimization passes missing")), + case Control.OptimizationPasses.set {il = "xml", passes = s} of + Result.Yes () => () + | Result.No s => usage (concat ["invalid -xml-passes arg: ", s]))), (Expert, "zone-cut-depth", " ", "zone cut depth", intRef zoneCutDepth) ], @@ -856,38 +990,61 @@ Cross s => s | Self => "self" val targetsDir = - OS.Path.mkAbsolute { path = "targets", - relativeTo = !libDir } + OS.Path.mkAbsolute {path = "targets", relativeTo = !libDir} val targetDir = - OS.Path.mkAbsolute { path = targetStr, - relativeTo = targetsDir } - val () = libTargetDir := targetDir + OS.Path.mkAbsolute {path = targetStr, relativeTo = targetsDir} + val () = Control.libTargetDir := targetDir + val targetIncDir = + OS.Path.mkAbsolute {path = "include", relativeTo = targetDir} + val targetLibDir = targetDir val targetArch = !Target.arch - val archStr = String.toLower (MLton.Platform.Arch.toString targetArch) + val targetArchStr = String.toLower (MLton.Platform.Arch.toString targetArch) val targetOS = !Target.os - val OSStr = String.toLower (MLton.Platform.OS.toString targetOS) + val targetOSStr = String.toLower (MLton.Platform.OS.toString targetOS) + val targetArchOSStr = concat [targetArchStr, "-", targetOSStr] - (* Determine whether code should be PIC (position independent) or not. - * This decision depends on the platform and output format. - *) - val positionIndependent = + val pisTargetDefault = + let + fun get s = + Control.StrMap.lookupIntInf (Promise.force Control.Target.consts, "default::" ^ s) + in + if get "pie" > 0 + then Control.PositionIndependentStyle.PIE + else if get "pic" > 0 + then Control.PositionIndependentStyle.PIC + else Control.PositionIndependentStyle.NPI + end + val pisFormat = case (targetOS, targetArch, !format) of - (* Windows is never position independent *) - (MinGW, _, _) => false - | (Cygwin, _, _) => false - (* Technically, Darwin should always be PIC. - * However, PIC on i386/darwin is unimplemented so we avoid it. - * PowerPC PIC is bad too, but the C codegen will use PIC behind - * our back unless forced, so let's just admit that it's PIC. - *) - | (Darwin, X86, Executable) => false - | (Darwin, X86, Archive) => false - | (Darwin, _, _) => true - (* On ELF systems, we only need PIC for LibArchive/Library *) - | (_, _, Library) => true - | (_, _, LibArchive) => true - | _ => false - val () = Control.positionIndependent := positionIndependent + (MinGW, _, _) => NONE + | (Cygwin, _, _) => NONE + | (_, _, Executable) => NONE + | (_, _, Archive) => NONE + | (_, _, Library) => SOME Control.PositionIndependentStyle.PIC + | (_, _, LibArchive) => SOME Control.PositionIndependentStyle.PIC + val () = + positionIndependentStyle + := (case (!positionIndependentStyle, pisFormat) of + (SOME pis, _) => SOME pis + | (NONE, NONE) => NONE + | (NONE, SOME pisFormat) => SOME pisFormat) + val positionIndependentStyle = !positionIndependentStyle + + val () = + Native.pic := (case !explicitNativePIC of + NONE => + let + val pis = + case positionIndependentStyle of + NONE => pisTargetDefault + | SOME pis => pis + in + case pis of + Control.PositionIndependentStyle.NPI => false + | Control.PositionIndependentStyle.PIC => true + | Control.PositionIndependentStyle.PIE => true + end + | SOME b => b) val stop = !stop @@ -898,16 +1055,16 @@ val () = codegen := (case !explicitCodegen of NONE => - if hasCodegen (x86Codegen) - then x86Codegen - else if hasCodegen (amd64Codegen) - then amd64Codegen + if hasCodegen (AMD64Codegen, {default = true}) + then AMD64Codegen + else if hasCodegen (X86Codegen, {default = true}) + then X86Codegen else CCodegen | SOME Native => - if hasCodegen (x86Codegen) - then x86Codegen - else if hasCodegen (amd64Codegen) - then amd64Codegen + if hasCodegen (AMD64Codegen, {default = false}) + then AMD64Codegen + else if hasCodegen (X86Codegen, {default = false}) + then X86Codegen else usage (concat ["can't use native codegen on ", MLton.Platform.Arch.toString targetArch, " target"]) @@ -915,8 +1072,8 @@ val () = MLton.Rusage.measureGC (!verbosity <> Silent) val () = if !profileTimeSet then (case !codegen of - x86Codegen => profile := ProfileTimeLabel - | amd64Codegen => profile := ProfileTimeLabel + X86Codegen => profile := ProfileTimeLabel + | AMD64Codegen => profile := ProfileTimeLabel | _ => profile := ProfileTimeField) else () val () = if !exnHistory @@ -926,42 +1083,20 @@ | _ => usage "can't use -profile with Exn.keepHistory" ; profileRaise := true) else () + val () = if !profileStack + then (case !profile of + ProfileAlloc => () + | ProfileCount => () + | ProfileTimeField => () + | ProfileTimeLabel => () + | _ => usage "can't use '-profile-stack true' without '-profile {alloc,count,time}'") + else () val () = - Compile.setCommandLineConstant + Control.setCommandLineConst {name = "CallStack.keep", value = Bool.toString (!Control.profile = Control.ProfileCallStack)} - val () = - let - val sizeMap = - List.map - (File.lines (OS.Path.joinDirFile {dir = !Control.libTargetDir, - file = "sizes"}), - fn line => - case String.tokens (line, Char.isSpace) of - [ty, "=", size] => - (case Int.fromString size of - NONE => Error.bug (concat ["strange size: ", size]) - | SOME size => - (ty, Bytes.toBits (Bytes.fromInt size))) - | _ => Error.bug (concat ["strange size mapping: ", line])) - fun lookup ty' = - case List.peek (sizeMap, fn (ty, _) => String.equals (ty, ty')) of - NONE => Error.bug (concat ["missing size mapping: ", ty']) - | SOME (_, size) => size - in - Control.Target.setSizes - {cint = lookup "cint", - cpointer = lookup "cpointer", - cptrdiff = lookup "cptrdiff", - csize = lookup "csize", - header = lookup "header", - mplimb = lookup "mplimb", - objptr = lookup "objptr", - seqIndex = lookup "seqIndex"} - end - fun tokenize l = String.tokens (concat (List.separate (l, " ")), Char.isSpace) @@ -969,20 +1104,30 @@ * Older gcc versions used -b for multiple targets. * If this is still needed, a shell script wrapper can hide this. *) - val gcc = + val cc = case target of Cross s => let - val {dir = gccDir, file = gccFile} = - OS.Path.splitDirFile (!gcc) + val {dir = ccDir, file = ccFile} = + OS.Path.splitDirFile (hd (!cc)) in OS.Path.joinDirFile - {dir = gccDir, - file = s ^ "-" ^ gccFile} + {dir = ccDir, + file = s ^ "-" ^ ccFile} + :: + tl (!cc) end - | Self => !gcc + | Self => !cc val arScript = !arScript + local + fun addMD s = + if !debugRuntime then s ^ "-dbg" else s + fun addPI s = + s ^ (Control.PositionIndependentStyle.toSuffix positionIndependentStyle) + in + val mkLibName = addPI o addMD + end fun addTargetOpts opts = List.fold (!opts, [], fn ({opt, pred}, ac) => @@ -991,38 +1136,36 @@ let val s = String.toLower s in - s = archStr orelse s = OSStr + s = targetArchOSStr + orelse s = targetArchStr + orelse s = targetOSStr end | OptPred.Yes => true) then opt :: ac else ac) val asOpts = addTargetOpts asOpts val ccOpts = addTargetOpts ccOpts - val ccOpts = concat ["-I", - OS.Path.mkAbsolute { path = "include", - relativeTo = !libTargetDir }] - :: ccOpts + val linkOpts = addTargetOpts linkOpts val linkOpts = - List.concat [[concat ["-L", !libTargetDir]], - if !debugRuntime then - ["-lmlton-gdb", "-lgdtoa-gdb"] - else if positionIndependent then - ["-lmlton-pic", "-lgdtoa-pic"] - else - ["-lmlton", "-lgdtoa"], - addTargetOpts linkOpts] + List.map (["mlton", "gdtoa"], fn lib => "-l" ^ mkLibName lib) + @ [!mathLinkOpt, !gmpLinkOpt] + @ linkOpts + val linkOpts = ("-L" ^ targetLibDir) :: linkOpts + val linkArchives = - if !debugRuntime then - [OS.Path.joinDirFile { dir = !libTargetDir, file = "libmlton-gdb.a" }, - OS.Path.joinDirFile { dir = !libTargetDir, file = "libgdtoa-gdb.a" }] - else if positionIndependent then - [OS.Path.joinDirFile { dir = !libTargetDir, file = "libmlton-pic.a" }, - OS.Path.joinDirFile { dir = !libTargetDir, file = "libgdtoa-pic.a" }] - else - [OS.Path.joinDirFile { dir = !libTargetDir, file = "libmlton.a" }, - OS.Path.joinDirFile { dir = !libTargetDir, file = "libgdtoa.a" }] + List.map (["mlton", "gdtoa"], fn lib => + OS.Path.joinDirFile {dir = targetLibDir, + file = "lib" ^ mkLibName lib ^ ".a"}) + + val llvm_as = !llvm_as + val llvm_llc = !llvm_llc + val llvm_opt = !llvm_opt + val llvm_asOpts = addTargetOpts llvm_asOpts + val llvm_llcOpts = addTargetOpts llvm_llcOpts + val llvm_optOpts = addTargetOpts llvm_optOpts + val _ = - if not (hasCodegen (!codegen)) + if not (hasCodegen (!codegen, {default = false})) then usage (concat ["can't use ", Control.Codegen.toString (!codegen), " codegen on ", @@ -1030,21 +1173,22 @@ " target"]) else () val () = - Control.labelsHaveExtra_ := (case targetOS of - Cygwin => true - | Darwin => true - | MinGW => true + Control.labelsHaveExtra_ := (case (targetOS, targetArch) of + (Cygwin, X86) => true + | (Darwin, _) => true + | (MinGW, X86) => true | _ => false) val _ = - chunk := - (case !explicitChunk of + chunkify := + (case !explicitChunkify of NONE => (case !codegen of - amd64Codegen => ChunkPerFunc - | CCodegen => Coalesce {limit = 4096} - | x86Codegen => ChunkPerFunc + AMD64Codegen => Chunkify.Func + | CCodegen => Chunkify.Coalesce {limit = 4096} + | LLVMCodegen => Chunkify.Coalesce {limit = 4096} + | X86Codegen => Chunkify.Func ) | SOME c => c) - val _ = if not (!Control.codegen = x86Codegen) andalso !Native.IEEEFP + val _ = if not (!Control.codegen = X86Codegen) andalso !Native.IEEEFP then usage "must use x86 codegen with -ieee-fp true" else () val _ = @@ -1056,16 +1200,6 @@ := (isSome (!showDefUse) orelse (Control.Elaborate.enabled Control.Elaborate.warnUnused) orelse (Control.Elaborate.default Control.Elaborate.warnUnused)) - val warnMatch = - (Control.Elaborate.enabled Control.Elaborate.nonexhaustiveMatch) - orelse (Control.Elaborate.enabled Control.Elaborate.redundantMatch) - orelse (Control.Elaborate.default Control.Elaborate.nonexhaustiveMatch <> - Control.Elaborate.DiagEIW.Ignore) - orelse (Control.Elaborate.default Control.Elaborate.redundantMatch <> - Control.Elaborate.DiagEIW.Ignore) - val _ = elaborateOnly := (stop = Place.TypeCheck - andalso not (warnMatch) - andalso not (!keepDefUse)) val _ = case targetOS of Darwin => () @@ -1082,8 +1216,6 @@ then usage (concat ["can't use -profile time on ", MLton.Platform.OS.toString targetOS]) else () - fun printVersion (out: Out.t): unit = - Out.output (out, concat [Version.banner, "\n"]) val () = case !show of NONE => () @@ -1097,9 +1229,9 @@ open Layout in outputl (align - (List.map (Control.mlbPathMap (), - fn {var, path, ...} => - str (concat [var, " ", path]))), + (List.revMap (Control.mlbPathMap (), + fn {var, path, ...} => + str (concat [var, " ", path]))), Out.standard) end ; let open OS.Process in exit success end) @@ -1108,14 +1240,10 @@ Result.No msg => usage msg | Result.Yes [] => (inputFile := "" - ; if isSome (!showBasis) - then (trace (Top, "Type Check SML") - Compile.elaborateSML {input = []}) - else if !buildConstants - then Compile.outputBasisConstants Out.standard - else if !verbosity = Silent orelse !verbosity = Top - then printVersion Out.standard - else outputHeader' (No, Out.standard)) + ; Out.outputl (Out.standard, Version.banner) + ; if Verbosity.< (!verbosity, Detail) + then () + else Layout.outputl (Control.layout (), Out.standard)) | Result.Yes (input :: rest) => let val _ = inputFile := File.base (File.fileOf input) @@ -1138,6 +1266,10 @@ in loop [(".mlb", MLB, false), (".sml", SML, false), + (".xml", XML, false), + (".sxml", SXML, false), + (".ssa", SSA, false), + (".ssa2", SSA2, false), (".c", Generated, true), (".o", O, true)] end @@ -1156,10 +1288,6 @@ | EQUAL => usage "nothing to do" | LESS => let - val _ = - if !verbosity = Top - then printVersion Out.error - else () val tempFiles: File.t list ref = ref [] val tmpDir = let @@ -1193,9 +1321,9 @@ | SOME f => if File.extension f = SOME "exe" then concat [File.base f, suf] else concat [f, suf] - val { base = outputBase, ext=_ } = + val {base = outputBase, ...} = OS.Path.splitBaseExt (maybeOut ".ext") - val { file = defLibname, dir=_ } = + val {file = defLibname, ...} = OS.Path.splitDirFile outputBase val defLibname = if String.hasPrefix (defLibname, {prefix = "lib"}) @@ -1214,19 +1342,7 @@ val _ = atMLtons := Vector.fromList - (maybeOut "" :: tokenize (rev ("--" :: (!runtimeArgs)))) - (* The -Wa,--gstabs says to pass the --gstabs option to the - * assembler. This tells the assembler to generate stabs - * debugging information for each assembler line. - *) - val (gccDebug, asDebug) = - case !debugFormat of - NONE => (["-g"], "-Wa,-g") - | SOME Dwarf => (["-gdwarf", "-g2"], "-Wa,--gdwarf2") - | SOME DwarfPlus => (["-gdwarf+", "-g2"], "-Wa,--gdwarf2") - | SOME Dwarf2 => (["-gdwarf-2", "-g2"], "-Wa,--gdwarf2") - | SOME Stabs => (["-gstabs", "-g2"], "-Wa,--gstabs") - | SOME StabsPlus => (["-gstabs+", "-g2"], "-Wa,--gstabs") + (tokenize (rev ("--" :: (!runtimeArgs)))) fun compileO (inputs: File.t list): unit = let val output = @@ -1251,24 +1367,28 @@ maybeOut ".a", "-Wl,--output-def," ^ !libname ^ ".def"] - | _ => [ "-shared" ] + | _ => [ "-fPIC", "-shared" ] val _ = trace (Top, "Link") (fn () => - if !format = Archive orelse - !format = LibArchive + if !format = Archive orelse !format = LibArchive then System.system (arScript, List.concat - [[targetStr, OSStr, output], + [[targetStr, targetOSStr, output], inputs, linkArchives]) else System.system - (gcc, + (hd cc, List.concat - [["-o", output], - if !format = Library then libOpts else [], - if !debug then gccDebug else [], + [tl cc, + case !format of + Executable => + Control.PositionIndependentStyle.linkOpts + positionIndependentStyle + | Library => libOpts + | _ => [], + ["-o", output], inputs, linkOpts])) () @@ -1304,21 +1424,35 @@ Int.toString (Counter.next c), ".o"]) else temp ".o" + fun mkOutputBC (c: Counter.t, input: File.t, xsuf): File.t = + if stop = Place.O orelse !keepO + then + if File.dirOf input = File.dirOf (maybeOutBase (xsuf ^ ".bc")) + then + concat [File.base input, xsuf, ".bc"] + else + maybeOutBase + (concat [".", + Int.toString (Counter.next c), + xsuf, + ".bc"]) + else temp (xsuf ^ ".bc") fun compileC (c: Counter.t, input: File.t): File.t = let - val debugSwitches = gccDebug @ ["-DASSERT=1"] val output = mkOutputO (c, input) - val _ = System.system - (gcc, + (hd cc, List.concat - [[ "-std=gnu99", "-c" ], + [tl cc, + [ "-c" ], + if !debug + then [ "-g", "-DASSERT=1" ] else [], if !format = Executable then [] else [ "-DLIBNAME=" ^ !libname ], - if positionIndependent - then [ "-fPIC", "-DPIC" ] else [], - if !debug then debugSwitches else [], + Control.PositionIndependentStyle.ccOpts + positionIndependentStyle, + [ "-I" ^ targetIncDir ], ccOpts, ["-o", output], [input]]) @@ -1330,16 +1464,50 @@ val output = mkOutputO (c, input) val _ = System.system - (gcc, + (hd cc, List.concat - [["-c"], - if !debug then [asDebug] else [], + [tl cc, + ["-c"], + if !debug then [ "-Wa,-g" ] else [], asOpts, ["-o", output], [input]]) in output end + fun compileLL (c: Counter.t, input: File.t): File.t = + let + val asBC = mkOutputBC (c, input, ".as") + val _ = + System.system + (llvm_as, + List.concat + [llvm_asOpts, + ["-o", asBC], + [input]]) + val optBC = mkOutputBC (c, input, ".opt") + val _ = + System.system + (llvm_opt, + List.concat + [llvm_optOpts, + ["-o", optBC], + [asBC]]) + val output = mkOutputO (c, input) + val _ = + System.system + (llvm_llc, + List.concat + [["-filetype=obj"], + Control.PositionIndependentStyle.llvm_llcOpts + (positionIndependentStyle, + {targetDefault = pisTargetDefault}), + llvm_llcOpts, + ["-o", output], + [optBC]]) + in + output + end fun compileCSO (inputs: File.t list): unit = if List.forall (inputs, fn f => SOME "o" = File.extension f) @@ -1359,6 +1527,8 @@ then input :: ac else if SOME "c" = extension then (compileC (c, input)) :: ac + else if SOME "ll" = extension + then (compileLL(c, input)) :: ac else if SOME "s" = extension orelse SOME "S" = extension then (compileS (c, input)) :: ac @@ -1373,14 +1543,13 @@ Place.O => () | _ => compileO (rev oFiles) end - fun mkCompileSrc {listFiles, elaborate, compile} input = + fun compileSrc sel = let val outputs: File.t list ref = ref [] - val r = ref 0 + val r = Counter.generator 0 fun make (style: style, suf: string) () = let - val suf = concat [".", Int.toString (!r), suf] - val _ = Int.inc r + val suf = concat [".", Int.toString (r ()), suf] val file = (if !keepGenerated orelse stop = Place.Generated then maybeOutBase @@ -1395,66 +1564,49 @@ print = print, done = done} end - val _ = - case !verbosity of - Silent => () - | Top => () - | _ => - outputHeader - (Control.No, fn l => - let val out = Out.error - in Layout.output (l, out) - ; Out.newline out - end) + val _ = Control.message (Verbosity.Detail, Control.layout) + val {sourceFiles, frontend, compile} = + (sel o Compile.mkCompile) + {outputC = make (Control.C, ".c"), + outputLL = make (Control.LLVM, ".ll"), + outputS = make (Control.Assembly, ".s")} val _ = case stop of Place.Files => Vector.foreach - (listFiles {input = input}, fn f => + (sourceFiles input, fn f => (print (String.translate (f, fn #"\\" => "/" | c => str c)) ; print "\n")) - | Place.TypeCheck => - trace (Top, "Type Check SML") - elaborate - {input = input} - | _ => - trace (Top, "Compile SML") - compile - {input = input, - outputC = make (Control.C, ".c"), - outputS = make (Control.Assembly, ".s")} + | Place.TypeCheck => frontend input + | _ => compile input in case stop of Place.Files => () | Place.TypeCheck => () | Place.Generated => () | _ => - (* Shrink the heap before calling gcc. *) + (* Shrink the heap before calling C compiler. *) (MLton.GC.pack () ; compileCSO (List.concat [!outputs, csoFiles])) end - val compileSML = - mkCompileSrc {listFiles = fn {input} => Vector.fromList input, - elaborate = Compile.elaborateSML, - compile = Compile.compileSML} - val compileMLB = - mkCompileSrc {listFiles = Compile.sourceFilesMLB, - elaborate = Compile.elaborateMLB, - compile = Compile.compileMLB} fun compile () = case start of - Place.SML => compileSML [input] - | Place.MLB => compileMLB input + Place.SML => compileSrc #sml + | Place.MLB => compileSrc #mlb | Place.Generated => compileCSO (input :: csoFiles) | Place.O => compileCSO (input :: csoFiles) + | Place.XML => compileSrc #xml + | Place.SXML => compileSrc #xml + | Place.SSA => compileSrc #ssa + | Place.SSA2 => compileSrc #ssa2 | _ => Error.bug "invalid start" - val doit - = trace (Top, "MLton") - (fn () => - Exn.finally - (compile, fn () => - List.foreach (!tempFiles, File.remove))) + val doit = + traceTop Version.banner + (fn () => + Exn.finally + (compile, fn () => + List.foreach (!tempFiles, File.remove))) in doit () end diff -Nru mlton-20130715/mlton/main/main.sig mlton-20210117+dfsg/mlton/main/main.sig --- mlton-20130715/mlton/main/main.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/main/main.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/main/main.sml mlton-20210117+dfsg/mlton/main/main.sml --- mlton-20130715/mlton/main/main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/main/main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/main/sources.cm mlton-20210117+dfsg/mlton/main/sources.cm --- mlton-20130715/mlton/main/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/main/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -1,13 +1,13 @@ -(* Copyright (C) 2009,2011 Matthew Fluet. +(* Copyright (C) 2009,2011,2020 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library structure Main @@ -27,8 +27,6 @@ ../ssa/sources.cm ../xml/sources.cm -lookup-constant.sig -lookup-constant.fun compile.sig compile.fun main.sig diff -Nru mlton-20130715/mlton/main/sources.mlb mlton-20210117+dfsg/mlton/main/sources.mlb --- mlton-20130715/mlton/main/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/main/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2011 Matthew Fluet. +(* Copyright (C) 2009,2011,2020 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -22,8 +22,6 @@ ../ssa/sources.mlb ../xml/sources.mlb - lookup-constant.sig - lookup-constant.fun compile.sig compile.fun main.sig diff -Nru mlton-20130715/mlton/Makefile mlton-20210117+dfsg/mlton/Makefile --- mlton-20130715/mlton/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,52 +1,45 @@ -## Copyright (C) 2010,2013 Matthew Fluet. +## Copyright (C) 2010,2013,2016,2018-2020 Matthew Fluet. # Copyright (C) 1999-2009 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## -SRC := $(shell cd .. && pwd) -BUILD := $(SRC)/build -BIN := $(BUILD)/bin -HOST_ARCH := $(shell "$(SRC)/bin/host-arch") -HOST_OS := $(shell "$(SRC)/bin/host-os") -LIB := $(BUILD)/lib -TARGET := self -AOUT := mlton-compile -PATH := $(BIN):$(shell echo $$PATH) - -FLAGS := @MLton ram-slop 0.7 gc-summary $(RUNTIME_ARGS) -- - -ifeq (self, $(shell if [ -x "$(BIN)/mlton" ]; then echo self; fi)) - # We're compiling MLton with itself, so don't use any stubs. - FILE := mlton.mlb - FLAGS += -default-ann 'sequenceNonUnit warn' - FLAGS += -default-ann 'warnUnused true' - # FLAGS += -type-check true +ROOT := .. +include $(ROOT)/Makefile.config + +###################################################################### + +RUN_MLTON_RUNTIME_XARGS := ram-slop 0.7 +RUN_MLTON_COMPILE_XARGS := + +ifeq (true, $(SELF_COMPILE)) +# Older versions of `mlton` may not support `sequenceNonUnit` or `warnUnused`. +RUN_MLTON_COMPILE_XARGS += -default-ann 'sequenceNonUnit warn' +RUN_MLTON_COMPILE_XARGS += -default-ann 'warnUnused true' +# RUN_MLTON_COMPILE_XARGS += -type-check true +# We're self-compiling, so don't use any stubs. +MLTON_MLB := mlton.mlb else -# We're compiling MLton with an older version of itself. -# Use "-align 8" for amd64 to avoid GMP/mul_2exp segfault with a -# mis-aligned limb when compiling with <= 20070826. -ifeq (amd64,$(findstring $(HOST_ARCH), amd64)) - FLAGS += -align 8 -endif -ifneq (,$(findstring $(HOST_OS), cygwin mingw)) - # The stubs don't work on Cygwin or MinGW, since they define spawn - # in terms of fork, and fork doesn't work on Cygwin or MinGW. So, - # make without the stubs. - FILE := mlton.mlb +ifneq (, $(findstring $(HOST_OS),cygwin mingw)) +# We're bootstrapping on Cygwin or MinGW; stubs define `spawn` in terms of +# `fork` and `fork` doesn't work on Cygwin or MinGW, so don't use any stubs. +MLTON_MLB := mlton.mlb else - # We're compiling MLton with an older version of itself, so use the stubs for - # the MLton structure. - FILE := mlton-stubs.mlb +# We're bootstrapping, so use stubs. +MLTON_MLB := mlton-stubs.mlb endif endif -FLAGS += -target $(TARGET) -FLAGS += -verbose 2 -output "$(AOUT)" -FLAGS += $(COMPILE_ARGS) +## When self-compiling the current MLton sources with `Zone` enabled, +## the resulting compiler exhibits a space leak; see MLton/mlton#334 +ifeq ($(RUN_MLTON_VERSION), $(firstword $(sort $(RUN_MLTON_VERSION) 20170629))) +RUN_MLTON_COMPILE_XARGS += -drop-pass zone +else ifeq ($(RUN_MLTON_VERSION), $(firstword $(sort $(RUN_MLTON_VERSION) 20191003))) +RUN_MLTON_COMPILE_XARGS += -disable-pass zone +endif FRONT_END_SOURCES := \ front-end/ml.lex.sml \ @@ -57,82 +50,124 @@ front-end/mlb.grm.sml SOURCES := \ - $(FILE) \ - upgrade-basis.sml \ + $(MLTON_MLB) \ $(FRONT_END_SOURCES) \ - $(filter-out control/version.sml,$(shell if [ -r $(FILE) ]; then mlton -stop f $(FILE) | grep -v " "; fi)) + control/version.sml \ + $(shell if [ -e $(MLTON_MLB) ]; then "$(RUN_MLTON_DEPS)" -stop f $(MLTON_MLB); fi) .PHONY: all -all: $(AOUT) +all: $(MLTON_OUTPUT) + +.PHONY: clean +clean: + $(SRC)/bin/clean + +SHOW_VARS += MLTON_MLB +$(eval $(MK_SHOW_CONFIG)) + +###################################################################### +$(MLTON_OUTPUT): $(SOURCES) + @echo 'Compiling mlton' + "$(RUN_MLTON)" \ + @MLton $(RUN_MLTON_RUNTIME_XARGS) $(RUN_MLTON_RUNTIME_ARGS) gc-summary -- \ + $(RUN_MLTON_COMPILE_XARGS) -verbose 2 $(RUN_MLTON_COMPILE_ARGS) \ + -target $(TARGET) -output $(MLTON_OUTPUT) \ + $(MLTON_MLB) + +ifeq ($(shell (cat control/version_sml.src; echo '$(MLTON_NAME)' '$(MLTON_VERSION)'; if [ -e control/version.sml ]; then cat control/version.sml; fi) | $(SHA1DGST)),$(shell if [ -e control/version_sml.chk ]; then cat control/version_sml.chk; fi)) +control/version.sml: control/version_sml.src + touch control/version.sml +else +$(shell $(RM) control/version.sml) control/version.sml: control/version_sml.src - cat control/version_sml.src | \ - sed "s/MLTONVERSION/$$(git log -n1 --pretty="g%h$$(if [ $$(git status --porcelain 2> /dev/null | wc -l) -ne 0 ]; then echo '-dirty'; fi)" 2> /dev/null || echo "???????")/" | \ - sed "s/MLTONBUILDDATE/$$(LANG=C date)/" | \ - sed "s/MLTONBUILDNODE/$$(uname -n)/" > \ - control/version.sml + $(SED) \ + -e "s/MLTON_NAME/$(MLTON_NAME)/" \ + -e "s/MLTON_VERSION/$(MLTON_VERSION)/" \ + < control/version_sml.src \ + > control/version.sml + (cat control/version_sml.src; echo '$(MLTON_NAME)' '$(MLTON_VERSION)'; cat control/version.sml) | $(SHA1DGST) > control/version_sml.chk +endif front-end/%.lex.sml: front-end/%.lex - $(MAKE) -C front-end $(@F) -front-end/%.grm.sig front-end/%.grm.sml: front-end/%.grm - $(MAKE) -C front-end $( $<.sml + $(MV) $<.sml $<.sml.in + $(SED) -e 's/in Vector.fromList(List.map g/in Vector.fromList(Pervasive.List.map g/' $<.sml.in > $<.sml + $(RM) $<.sml.in + $(CHMOD) -w $<.* -# Pass $(PATH) to upgrade-basis because it is run via -# #!/usr/bin/env bash, which resets the path. -upgrade-basis.sml: - "$(SRC)/bin/upgrade-basis" '$(PATH)' "$(HOST_ARCH)" "$(HOST_OS)" >upgrade-basis.sml +front-end/%.grm.sig front-end/%.grm.sml: front-end/%.grm + $(RM) $<.* + $(RUN_MLYACC) $< + $(MV) $<.sml $<.sml.in + $(SED) -e 's/in f 0 handle General.Subscript => ()/in f 0 handle Pervasive.General.Subscript => ()/' $<.sml.in > $<.sml + $(MV) $<.sml $<.sml.in + $(SED) -e 's/in Array.fromList(List.map actionRowLookUp actionRowNumbers)/in Array.fromList(Pervasive.List.map actionRowLookUp actionRowNumbers)/' $<.sml.in > $<.sml + $(RM) $<.sml.in + $(CHMOD) -w $<.* -mlton-stubs.mlb: $(shell mlton -stop f ../lib/stubs/mlton-stubs/sources.mlb) $(shell mlton -stop f mlton.mlb) +mlton-stubs.mlb: $(shell "$(RUN_MLTON_DEPS)" -stop f ../lib/stubs/mlton-stubs/sources.mlb | $(GREP) 'mlb$$') $(shell "$(RUN_MLTON_DEPS)" -stop f mlton.mlb | $(GREP) 'mlb$$') ( \ echo '$$(SML_LIB)/basis/unsafe.mlb'; \ echo '$$(SML_LIB)/basis/sml-nj.mlb'; \ echo '$$(SML_LIB)/basis/mlton.mlb'; \ echo '$$(SML_LIB)/basis/basis.mlb'; \ - echo 'upgrade-basis.sml'; \ - mlton -stop f mlton.mlb | grep -v 'mlb$$' | grep 'mlyacc'; \ - mlton -stop f ../lib/stubs/mlton-stubs/sources.mlb | \ - grep -v 'mlb$$' | \ - grep 'mlton-stubs'; \ - mlton -stop f mlton.mlb | \ - grep -v 'mlb$$' | \ - grep -v 'sml/basis' | \ - grep -v 'targets' | \ - grep -v 'mlyacc'; \ + $(RUN_MLTON) -stop f mlton.mlb | \ + $(GREP) -v 'mlb$$' | \ + $(GREP) 'mlyacc'; \ + $(RUN_MLTON) -stop f ../lib/stubs/mlton-stubs/sources.mlb | \ + $(GREP) -v 'mlb$$' | \ + $(GREP) 'mlton-stubs'; \ + $(RUN_MLTON) -stop f mlton.mlb | \ + $(GREP) -v 'mlb$$' | \ + $(GREP) -v 'sml/basis' | \ + $(GREP) -v 'targets' | \ + $(GREP) -v 'mlyacc'; \ ) > mlton-stubs.mlb -$(AOUT): $(SOURCES) - rm -f upgrade-basis.sml - $(MAKE) upgrade-basis.sml - rm -f control/version.sml - $(MAKE) control/version.sml - @echo 'Compiling mlton (takes a while)' - mlton $(FLAGS) $(FILE) +###################################################################### .PHONY: def-use def-use: mlton.def-use mlton.def-use: $(SOURCES) - mlton $(FLAGS) -stop tc -prefer-abs-paths true -show-def-use mlton.def-use $(FILE) + "$(RUN_MLTON)" \ + @MLton $(RUN_MLTON_RUNTIME_XARGS) $(RUN_MLTON_RUNTIME_ARGS) -- \ + $(RUN_MLTON_COMPILE_XARGS) -verbose 0 $(RUN_MLTON_COMPILE_ARGS) \ + -stop tc -prefer-abs-paths true -show-def-use mlton.def-use \ + $(MLTON_MLB) + +###################################################################### + +ifneq (,$(REMOTE_TARGET)) +mlton-bootstrap-$(REMOTE_TARGET).tgz: $(SOURCES) + "$(RUN_MLTON)" \ + @MLton $(RUN_MLTON_RUNTIME_XARGS) $(RUN_MLTON_RUNTIME_ARGS) gc-summary -- \ + $(RUN_MLTON_COMPILE_XARGS) -verbose 2 $(RUN_MLTON_COMPILE_ARGS) \ + -target $(REMOTE_TARGET) -output $(MLTON_OUTPUT) \ + -codegen c -stop g \ + $(MLTON_MLB) + $(TAR) czf $@ $(MLTON_OUTPUT).*.c + $(RM) $(MLTON_OUTPUT).*.c +endif -.PHONY: clean -clean: - ../bin/clean +###################################################################### # -# The following rebuilds the heap file for the SML/NJ compiled version -# of MLton. +# The following rebuilds the heap file for the SML/NJ compiled version of MLton. # SMLNJ := sml SMLNJ_CM_SERVERS_NUM := 0 .PHONY: smlnj-mlton -smlnj-mlton: $(FRONT_END_SOURCES) - rm -f control/version.sml - $(MAKE) control/version.sml +smlnj-mlton: mlton-smlnj.cm control/version.sml $(FRONT_END_SOURCES) ( \ echo 'SMLofNJ.Internals.GC.messages false;'; \ echo '#set CM.Control.verbose false;'; \ - echo '#set CM.Control.warn_obsolete false;'; \ + echo '#set CM.Control.warn_obsolete true;'; \ echo 'Control.polyEqWarn := false;'; \ echo 'local'; \ echo 'fun loop 0 = () | loop n = (CM.Server.start {cmd = (CommandLine.name (), ["@CMslave"]), name = "server" ^ (Int.toString n), pathtrans = NONE, pref = 0}; loop (n - 1));'; \ @@ -142,41 +177,41 @@ echo 'if (CM.make "mlton-smlnj.cm") handle _ => false'; \ echo ' then ()'; \ echo ' else OS.Process.exit OS.Process.failure;'; \ - echo 'SMLofNJ.exportFn("mlton-smlnj",Main.main);' \ + echo 'SMLofNJ.exportFn("$(MLTON_OUTPUT)-smlnj",Main.main);' \ ) | "$(SMLNJ)" +###################################################################### + # -# The following rebuilds the executable file for the Poly/ML compiled -# version of MLton. +# The following rebuilds the executable file for the Poly/ML compiled version of +# MLton. # -POLYML := poly +POLYML := poly .PHONY: polyml-mlton -polyml-mlton: mlton-polyml.use $(FRONT_END_SOURCES) - rm -f control/version.sml - $(MAKE) control/version.sml +polyml-mlton: mlton-polyml.use $(shell [ -e mlton-polyml.use ] && cat mlton-polyml.use | $(SED) 's/use "\(.*\)";/\1/') control/version.sml $(FRONT_END_SOURCES) ( \ echo 'use "mlton-polyml.use";'; \ - echo 'PolyML.export("mlton-polyml", Main.mainWrapped);'; \ + echo 'PolyML.export("$(MLTON_OUTPUT)-polyml", Main.mainWrapped);'; \ ) | "$(POLYML)" - $(CC) -o mlton-polyml mlton-polyml.o -lpolymain -lpolyml - rm -f mlton-polyml.o + $(CC) -o $(MLTON_OUTPUT)-polyml $(MLTON_OUTPUT)-polyml.o -lpolymain -lpolyml + $(RM) $(MLTON_OUTPUT)-polyml.o -mlton-polyml.use: ../lib/stubs/basis-stubs-for-polyml/sources.use ../lib/stubs/mlton-stubs-for-polyml/sources.use $(shell mlton -stop f ../lib/stubs/mlton-stubs/sources.mlb) $(filter-out control/version.sml,$(shell mlton -stop f mlton.mlb)) +mlton-polyml.use: ../lib/stubs/basis-stubs-for-polyml/sources.use ../lib/stubs/mlton-stubs-for-polyml/sources.use $(shell "$(RUN_MLTON_DEPS)" -stop f ../lib/stubs/mlton-stubs/sources.mlb | $(GREP) 'mlb$$') $(shell "$(RUN_MLTON_DEPS)" -stop f mlton.mlb | $(GREP) 'mlb$$') ( \ cat ../lib/stubs/basis-stubs-for-polyml/sources.use | \ - sed 's|use "\(.*\)";|../lib/stubs/basis-stubs-for-polyml/\1|'; \ - mlton -stop f mlton.mlb | grep -v 'mlb$$' | grep 'mlyacc'; \ + $(SED) 's|use "\(.*\)";|../lib/stubs/basis-stubs-for-polyml/\1|'; \ + "$(RUN_MLTON)" -stop f mlton.mlb | $(GREP) -v 'mlb$$' | $(GREP) 'mlyacc'; \ cat ../lib/stubs/mlton-stubs-for-polyml/sources.use | \ - sed 's|use "\(.*\)";|../lib/stubs/mlton-stubs-for-polyml/\1|'; \ - mlton -stop f ../lib/stubs/mlton-stubs/sources.mlb | \ - grep -v 'mlb$$' | \ - grep 'mlton-stubs'; \ - mlton -stop f mlton.mlb | \ - grep -v 'mlb$$' | \ - grep -v 'sml/basis' | \ - grep -v 'targets' | \ - grep -v 'mlton-stubs' | \ - grep -v 'mlyacc' | \ - grep -v 'call-main.sml'; \ - ) | sed 's|\(.*\)|use "\1";|' > mlton-polyml.use + $(SED) 's|use "\(.*\)";|../lib/stubs/mlton-stubs-for-polyml/\1|'; \ + "$(RUN_MLTON)" -stop f ../lib/stubs/mlton-stubs/sources.mlb | \ + $(GREP) -v 'mlb$$' | \ + $(GREP) 'mlton-stubs'; \ + "$(RUN_MLTON)" -stop f mlton.mlb | \ + $(GREP) -v 'mlb$$' | \ + $(GREP) -v 'sml/basis' | \ + $(GREP) -v 'targets' | \ + $(GREP) -v 'mlton-stubs' | \ + $(GREP) -v 'mlyacc' | \ + $(GREP) -v 'call-main.sml'; \ + ) | $(SED) 's|\(.*\)|use "\1";|' > mlton-polyml.use diff -Nru mlton-20130715/mlton/match-compile/match-compile.fun mlton-20210117+dfsg/mlton/match-compile/match-compile.fun --- mlton-20130715/mlton/match-compile/match-compile.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/match-compile/match-compile.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015,2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -10,21 +11,240 @@ struct open S +structure ExpPat = Pat -local - open Layout -in - val wild = str "_" - - fun conApp (c, p) = - let - val c = Con.layout c - in - case p of - NONE => c - | SOME p => paren (seq [c, str " ", p]) - end -end +structure Example = + struct + datatype t = + ConApp of {arg: t option, con: Con.t} + | ConstRange of {lo: Const.t option, hi: Const.t option, isChar: bool, isInt: bool} + | Exn + | Or of t vector + | Record of t SortedRecord.t + | Vector of t vector * {dots: bool} + | Wild + + fun layout (ex, isDelimited) = + let + open Layout + fun delimit t = if isDelimited then t else paren t + fun layoutChar c = + let + fun loop (n: int, c: IntInf.t, ac: char list) = + if n = 0 + then implode ac + else + let + val (q, r) = IntInf.quotRem (c, 0x10) + in + loop (n - 1, q, Char.fromHexDigit (Int.fromIntInf r) :: ac) + end + fun doit (n, esc) = str (concat ["\\", esc, loop (n, c, [])]) + in + if c <= 0xFF + then str (Char.escapeSML (Char.fromInt (Int.fromIntInf c))) + else if c <= 0xFFFF + then doit (4, "u") + else doit (8, "U") + end + fun layoutConst (c, isChar, isInt) = + if isChar + then + case c of + Const.Word w => + seq [str "#\"", + layoutChar (WordX.toIntInf w), + str "\""] + | _ => Error.bug (concat + ["MatchCompile.Example.layout.layoutConst: ", + "strange char: ", + Layout.toString (Const.layout c)]) + else if isInt + then + case c of + Const.IntInf i => IntInf.layout i + | Const.Word w => IntInf.layout (WordX.toIntInfX w) + | _ => Error.bug (concat + ["MatchCompile.Example.layout.layoutConst: ", + "strange int: ", + Layout.toString (Const.layout c)]) + else + case c of + Const.Word w => + seq [str "0wx", str (IntInf.format (WordX.toIntInf w, StringCvt.HEX))] + | Const.WordVector ws => + seq [str "\"", + seq (WordXVector.toListMap (ws, layoutChar o WordX.toIntInf)), + str "\""] + | _ => Error.bug (concat + ["MatchCompile.Example.layout.layoutConst: ", + "strange const: ", + Layout.toString (Const.layout c)]) + in + case ex of + ConApp {arg, con} => + (case arg of + NONE => str (Con.originalName con) + | SOME arg => + (delimit o seq) + [str (Con.originalName con), + str " ", + layoutF arg]) + | ConstRange {lo, hi, isChar, isInt} => + (case (lo, hi) of + (NONE, NONE) => str "..." + | (NONE, SOME hi) => + delimit (seq [str "... ", layoutConst (hi, isChar, isInt)]) + | (SOME lo, NONE) => + delimit (seq [layoutConst (lo, isChar, isInt), str " ..."]) + | (SOME lo, SOME hi) => + if Const.equals (lo, hi) + then layoutConst (lo, isChar, isInt) + else delimit (seq [layoutConst (lo, isChar, isInt), + str " .. ", + layoutConst (hi, isChar, isInt)])) + | Exn => delimit (str "_ : exn") + | Or exs => + (delimit o mayAlign o separateLeft) + (Vector.toListMap (exs, layoutT), "| ") + | Record rexs => + SortedRecord.layout + {extra = "", + layoutElt = layoutT, + layoutTuple = fn exs => tuple (Vector.toListMap (exs, layoutT)), + record = rexs, + separator = " = "} + | Vector (exs, {dots}) => + let + val exs = Vector.map (exs, layoutT) + in + vector (if dots + then Vector.concat [exs, Vector.new1 (str "...")] + else exs) + end + | Wild => str "_" + end + and layoutF ex = layout (ex, false) + and layoutT ex = layout (ex, true) + + val layout = layoutT + + fun isWild ex = + case ex of + Wild => true + | _ => false + + fun const {const, isChar, isInt} = + ConstRange {lo = SOME const, hi = SOME const, + isChar = isChar, isInt = isInt} + fun constRange {lo, hi, isChar, isInt} = + ConstRange {lo = lo, hi = hi, + isChar = isChar, isInt = isInt} + + fun record rexs = + if SortedRecord.forall (rexs, isWild) + then Wild + else Record rexs + + fun vector exs = Vector (exs, {dots = false}) + fun vectorDots exs = Vector (exs, {dots = true}) + + fun compare (ex1, ex2) = + case (ex1, ex2) of + (* Wild sorts last *) + (Wild, Wild) => EQUAL + | (_, Wild) => LESS + | (Wild, _) => GREATER + (* Exn sorts last *) + | (Exn, Exn) => EQUAL + | (_, Exn) => LESS + | (Exn, _) => GREATER + | (ConstRange {lo = lo1, hi = hi1, isInt, ...}, + ConstRange {lo = lo2, hi = hi2, ...}) => + let + fun cmp (x, y, b, k) = + case (x, y) of + (NONE, NONE) => k EQUAL + | (NONE, SOME _) => if b then LESS else GREATER + | (SOME _, NONE) => if b then GREATER else LESS + | (SOME (Const.Word w1), SOME (Const.Word w2)) => + k (WordX.compare (w1, w2, {signed = isInt})) + | (SOME (Const.IntInf ii1), SOME (Const.IntInf ii2)) => + k (IntInf.compare (ii1, ii2)) + | (SOME (Const.WordVector ws1), SOME (Const.WordVector ws2)) => + k (WordXVector.compare (ws1, ws2)) + | _ => Error.bug "MatchCompile.Example.compare: ConstRange/ConstRange" + in + cmp (lo1, lo2, true, fn order => + case order of + LESS => LESS + | EQUAL => cmp (hi1, hi2, false, fn order => order) + | GREATER => GREATER) + end + | (ConApp {con = con1, arg = arg1}, ConApp {con = con2, arg = arg2}) => + (case String.compare (Con.toString con1, Con.toString con2) of + LESS => LESS + | EQUAL => (case (arg1, arg2) of + (SOME arg1, SOME arg2) => compare' (arg1, arg2) + | (NONE, NONE) => EQUAL + | _ => Error.bug "MatchCompile.Example.compare: ConApp/ConApp") + | GREATER => GREATER) + | (Vector (exs1, {dots = dots1}), Vector (exs2, {dots = dots2})) => + (case (dots1, dots2) of + (false, true) => LESS + | (true, false) => GREATER + | _ => Vector.compare (exs1, exs2, compare')) + | (Record rexs1, Record rexs2) => + Vector.compare (SortedRecord.range rexs1, SortedRecord.range rexs2, compare') + | _ => Error.bug "MatchCompile.Example.compare" + and compare' (ex1, ex2) = + case (ex1, ex2) of + (Or ex1s, Or ex2s) => compares (Vector.toList ex1s, Vector.toList ex2s) + | (Or ex1s, _) => compares (Vector.toList ex1s, [ex2]) + | (_, Or ex2s) => compares ([ex1], Vector.toList ex2s) + | _ => compare (ex1, ex2) + and compares (exs1, exs2) = + List.compare (exs1, exs2, compare) + + fun or exs = + let + fun join (exs1, exs2) = + case (exs1, exs2) of + ([], _) => exs2 + | (_, []) => exs1 + | ((ex1 as ConApp {con = con1, arg = arg1})::exs1', + (ex2 as ConApp {con = con2, arg = arg2})::exs2') => + (case String.compare (Con.toString con1, Con.toString con2) of + LESS => ex1::(join (exs1', exs2)) + | EQUAL => + let + val arg = + case (arg1, arg2) of + (SOME arg1, SOME arg2) => or [arg1, arg2] + | (NONE, NONE) => NONE + | _ => Error.bug "MatchCompile.Example.or.join" + in + (ConApp {con = con1, arg = arg}):: + (join (exs1', exs2')) + end + | GREATER => ex2::(join (exs1, exs2'))) + | (ex1::exs1', ex2::exs2') => + (case compare (ex1, ex2) of + LESS => ex1::(join (exs1', exs2)) + | EQUAL => ex1::(join (exs1', exs2')) + | GREATER => ex2::(join (exs1, exs2'))) + val exss = + List.map (exs, fn Or exs => Vector.toList exs | ex => [ex]) + val exs = + List.fold (exss, [], join) + in + case exs of + [] => NONE + | [ex] => SOME ex + | _ => SOME (Or (Vector.fromList exs)) + end + + end structure Env = MonoEnv (structure Domain = Var structure Range = Var) @@ -34,7 +254,8 @@ datatype t = Con of {arg: Var.t option, con: Con.t} - | Tuple of Var.t vector + | Record of Var.t SortedRecord.t + | Vector of Var.t vector fun layout (f: t): Layout.t = let @@ -46,22 +267,29 @@ case arg of NONE => empty | SOME x => seq [str " ", Var.layout x]] - | Tuple xs => tuple (Vector.toListMap (xs, Var.layout)) + | Record r => + SortedRecord.layout + {extra = "", + layoutElt = Var.layout, + layoutTuple = fn xs => tuple (Vector.toListMap (xs, Var.layout)), + record = r, + separator = " = "} + | Vector xs => vector (Vector.map (xs, Var.layout)) end end structure Examples = struct - datatype t = T of {es: (Var.t * Layout.t) list, + datatype t = T of {exs: (Var.t * Example.t) list, isOnlyExns: bool} - fun layout (T {es, ...}) = - List.layout (Layout.tuple2 (Var.layout, fn l => l)) es + fun layout (T {exs, ...}) = + List.layout (Layout.tuple2 (Var.layout, Example.layout)) exs - val empty = T {es = [], isOnlyExns = true} + val empty = T {exs = [], isOnlyExns = true} - fun add (T {es, isOnlyExns = is}, x, l, {isOnlyExns: bool}) = - T {es = (x, l) :: es, + fun add (T {exs, isOnlyExns = is}, x, ex, {isOnlyExns: bool}) = + T {exs = (x, ex) :: exs, isOnlyExns = is andalso isOnlyExns} end @@ -104,14 +332,18 @@ | _ => Error.bug "MatchCompile.Facts.bind: Con:wrong fact")) | Const _ => env | Layered (y, p) => loop (p, x, Env.extend (env, y, x)) - | Tuple ps => - if 0 = Vector.length ps - then env - else (case fact x of - Fact.Tuple xs => - Vector.fold2 (ps, xs, env, loop) - | _ => Error.bug "MatchCompile.Facts.bind: Tuple:wrong fact") + | Or _ => Error.bug "MatchCompile.factbind: or pattern shouldn't be here" + | Record rp => + (case fact x of + Fact.Record rx => + Vector.fold2 (SortedRecord.range rp, SortedRecord.range rx, env, loop) + | _ => Error.bug "MatchCompile.Facts.bind: Record:wrong fact") | Var y => Env.extend (env, y, x) + | Vector ps => + (case fact x of + Fact.Vector xs => + Vector.fold2 (ps, xs, env, loop) + | _ => Error.bug "MatchCompile.Facts.bind: Vector:wrong fact") | Wild => env end val env = loop (p, x, Env.empty) @@ -125,7 +357,7 @@ layout, Var.layout, NestedPat.layout, Env.layout) bind - fun example (T facts, Examples.T {es, ...}, x: Var.t): Layout.t = + fun example (T facts, Examples.T {exs, ...}, x: Var.t): Example.t = let val {destroy, get = fact: Var.t -> Fact.t option, @@ -133,18 +365,20 @@ Property.destGetSetOnce (Var.plist, Property.initConst NONE) val () = List.foreach (facts, fn {fact, var} => setFact (var, SOME fact)) - fun loop (x: Var.t): Layout.t = + fun loop (x: Var.t): Example.t = case fact x of NONE => - (case List.peek (es, fn (x', _) => Var.equals (x, x')) of - NONE => wild - | SOME (_, l) => l) + (case List.peek (exs, fn (x', _) => Var.equals (x, x')) of + NONE => Example.Wild + | SOME (_, ex) => ex) | SOME f => - case f of - Fact.Con {arg, con} => - conApp (con, Option.map (arg, loop)) - | Fact.Tuple xs => - Layout.tuple (Vector.toListMap (xs, loop)) + (case f of + Fact.Con {arg, con} => + Example.ConApp {con = con, arg = Option.map (arg, loop)} + | Fact.Record rxs => + Example.record (SortedRecord.map (rxs, loop)) + | Fact.Vector xs => + Example.vector (Vector.map (xs, loop))) val res = loop x val () = destroy () in @@ -154,7 +388,7 @@ val example = Trace.trace3 ("MatchCompile.Facts.example", - layout, Examples.layout, Var.layout, fn l => l) + layout, Examples.layout, Var.layout, Example.layout) example end @@ -167,7 +401,8 @@ | Con of {arg: (t * Type.t) option, con: Con.t, targs: Type.t vector} - | Tuple of t vector + | Record of t SortedRecord.t + | Vector of t vector | Wild fun layout (p: t): Layout.t = @@ -181,7 +416,14 @@ case arg of NONE => empty | SOME (p, _) => seq [str " ", layout p]] - | Tuple ps => tuple (Vector.toListMap (ps, layout)) + | Record rps => + SortedRecord.layout + {extra = "", + layoutElt = layout, + layoutTuple = fn ps => tuple (Vector.toListMap (ps, layout)), + record = rps, + separator = " = "} + | Vector ps => vector (Vector.map (ps, layout)) | Wild => str "_" end @@ -202,8 +444,10 @@ end | NestedPat.Const r => Const r | NestedPat.Layered (_, p) => loop p - | NestedPat.Tuple ps => Tuple (Vector.map (ps, loop)) + | NestedPat.Or _ => Error.bug "MatchCompile.fromNestedPat: or pattern shouldn't be here" + | NestedPat.Record rps => Record (SortedRecord.map (rps, loop)) | NestedPat.Var _ => Wild + | NestedPat.Vector ps => Vector (Vector.map (ps, loop)) | NestedPat.Wild => Wild in loop @@ -222,7 +466,7 @@ struct datatype t = T of {pats: Pat.t vector, - rest: {examples: (Layout.t * {isOnlyExns: bool}) list ref, + rest: {examples: (Example.t * {isOnlyExns: bool}) list ref option, finish: (Var.t -> Var.t) -> Exp.t, nestedPat: NestedPat.t}} @@ -260,85 +504,162 @@ then NONE else SOME {size = s, ty = Type.word s}) -(* unhandledConst cs returns a constant (of the appropriate type) not in cs. *) -fun unhandledConst (cs: Const.t vector): Const.t = +fun unhandledConsts {consts = cs: Const.t vector, isChar, isInt}: Example.t option = let fun search {<= : 'a * 'a -> bool, equals: 'a * 'a -> bool, extract: Const.t -> 'a, - isMin: 'a -> bool, make: 'a -> Const.t, + max: 'a option, + min: 'a option, next: 'a -> 'a, prev: 'a -> 'a} = let + fun exampleConstRange (lo, hi) = + Example.constRange + {lo = Option.map (lo, make), + hi = Option.map (hi, make), + isChar = isChar, isInt = isInt} + fun mkExampleConstRange (lo, hi) = + if lo <= hi + then if equals (lo, hi) + then [exampleConstRange (SOME lo, SOME hi)] + else let + val lo' = next lo + val hi' = prev hi + in + if equals (lo', hi) + then [exampleConstRange (SOME lo, SOME lo), + exampleConstRange (SOME hi, SOME hi)] + else if equals (lo', hi') + then [exampleConstRange (SOME lo, SOME lo), + exampleConstRange (SOME lo', SOME hi'), + exampleConstRange (SOME hi, SOME hi)] + else [exampleConstRange (SOME lo, SOME hi)] + end + else [] val cs = QuickSort.sortVector (Vector.map (cs, extract), op <=) - val c = Vector.sub (cs, 0) + val cs = Vector.toList cs + fun loop cs = + case cs of + [] => [] + | [cMax] => + (case max of + NONE => [exampleConstRange (SOME (next cMax), NONE)] + | SOME max' => + if equals (cMax, max') + then [] + else mkExampleConstRange (next cMax, max')) + | c1::c2::cs => + (mkExampleConstRange (next c1, prev c2)) @ (loop (c2::cs)) + val cMin = hd cs + val examples = + case min of + NONE => [exampleConstRange (NONE, SOME (prev cMin))] @ (loop cs) + | SOME min' => + if equals (cMin, min') + then loop cs + else (mkExampleConstRange (min', prev cMin)) @ (loop cs) in - if not (isMin c) - then make (prev c) - else - let - val n = Vector.length cs - fun loop (i, c) = - if i = n orelse not (equals (c, Vector.sub (cs, i))) - then make c - else loop (i + 1, next c) - in - loop (0, c) - end + Example.or examples end - val c = Vector.sub (cs, 0) datatype z = datatype Const.t in - case c of - IntInf _ => + case Vector.first cs of + CSymbol _ => Error.bug "MatchCompile.unhandledConsts: CSymbol" + | IntInf _ => let fun extract c = case c of IntInf i => i - | _ => Error.bug "MatchCompile.unhandledConst: expected IntInf" + | _ => Error.bug "MatchCompile.unhandledConsts: expected IntInf" in search {<= = op <=, equals = op =, extract = extract, - isMin = fn _ => false, make = Const.IntInf, + max = NONE, + min = NONE, next = fn i => i + 1, prev = fn i => i - 1} end - | Null => Error.bug "MatchCompile.unhandledConst: match on null is not allowed" - | Real _ => Error.bug "MatchCompile.unhandledConst: match on real is not allowed" + | Null => Error.bug "MatchCompile.unhandledConsts: Null" + | Real _ => Error.bug "MatchCompile.unhandledConsts: Real" | Word w => let val s = WordX.size w + val signed = {signed = isInt} fun extract c = case c of - Word w => WordX.toIntInf w - | _ => Error.bug "MatchCompile.unhandledConst: expected Word" + Word w => w + | _ => Error.bug "MatchCompile.unhandledConsts: expected Word" in - search {<= = op <=, - equals = op =, + search {<= = fn (w1, w2) => WordX.le (w1, w2, signed), + equals = WordX.equals, extract = extract, - isMin = fn w => w = 0, - make = fn w => Const.word (WordX.fromIntInf (w, s)), - next = fn w => w + 1, - prev = fn w => w - 1} + make = Const.word, + max = SOME (WordX.max (s, signed)), + min = SOME (WordX.min (s, signed)), + next = fn w => WordX.add (w, WordX.one s), + prev = fn w => WordX.sub (w, WordX.one s)} end - | WordVector v => + | WordVector ws => let - val max = - Vector.fold - (cs, ~1, fn (c, max) => - case c of - WordVector v => Int.max (max, WordXVector.length v) - | _ => Error.bug "MatchCompile.unhandledConst: expected Word8Vector") - val elementSize = WordXVector.elementSize v - val w = WordX.fromIntInf (IntInf.fromInt (Char.ord #"a"), - elementSize) + val s = WordXVector.elementSize ws + val signed = {signed = false} + fun extract c = + case c of + WordVector ws => ws + | _ => Error.bug "MatchCompile.unhandledConsts: expected Word" + fun next ws = + let + val wsOrig = List.rev (WordXVector.toListMap (ws, fn w => w)) + val wsNext = + let + fun loop ws = + case ws of + [] => [WordX.min (s, signed)] + | w::ws => + if WordX.isMax (w, signed) + then (WordX.min (s, signed))::(loop ws) + else (WordX.add (w, WordX.one s))::ws + in + loop wsOrig + end + in + WordXVector.fromListRev ({elementSize = s}, wsNext) + end + fun prev ws = + let + val wsOrig = List.rev (WordXVector.toListMap (ws, fn w => w)) + val wsPrev = + let + fun loop ws = + case ws of + [] => Error.bug "MatchCompile.unhandledConst: WordXVector.prev" + | [w] => + if WordX.isMin (w, signed) + then [] + else [WordX.sub (w, WordX.one s)] + | w::ws => + if WordX.isMin (w, signed) + then (WordX.max (s, signed))::(loop ws) + else (WordX.sub (w, WordX.one s))::ws + in + loop wsOrig + end + in + WordXVector.fromListRev ({elementSize = s}, wsPrev) + end in - Const.WordVector (WordXVector.tabulate - ({elementSize = elementSize}, max + 1, - fn _ => w)) + search {<= = WordXVector.le, + equals = WordXVector.equals, + extract = extract, + make = Const.wordVector, + max = NONE, + min = SOME (WordXVector.fromVector ({elementSize = s}, Vector.new0 ())), + next = next, + prev = prev} end end @@ -350,32 +671,52 @@ end val traceMatch = - Trace.trace4 ("MatchCompile.match", - Vars.layout, Rules.layout, Facts.layout, Examples.layout, + Trace.trace ("MatchCompile.match", + fn (vars, rules, facts, es) => + Layout.record [("vars", Vars.layout vars), + ("rules", Rules.layout rules), + ("facts", Facts.layout facts), + ("examples", Examples.layout es)], Exp.layout) val traceConst = Trace.trace ("MatchCompile.const", - fn (vars, rules, facts, es, _: Int.t, _: Exp.t) => - Layout.tuple [Vars.layout vars, - Rules.layout rules, - Facts.layout facts, - Examples.layout es], + fn (vars, rules, facts, es, i: Int.t, test: Exp.t) => + Layout.record [("vars", Vars.layout vars), + ("rules", Rules.layout rules), + ("facts", Facts.layout facts), + ("examples", Examples.layout es), + ("index", Int.layout i), + ("test", Exp.layout test)], Exp.layout) val traceSum = Trace.trace ("MatchCompile.sum", - fn (vars, rules, facts, es, _: Int.t, _: Exp.t, _: Tycon.t) => - Layout.tuple [Vars.layout vars, - Rules.layout rules, - Facts.layout facts, - Examples.layout es], + fn (vars, rules, facts, es, i: Int.t, test: Exp.t, _: Tycon.t) => + Layout.record [("vars", Vars.layout vars), + ("rules", Rules.layout rules), + ("facts", Facts.layout facts), + ("examples", Examples.layout es), + ("index", Int.layout i), + ("test", Exp.layout test)], + Exp.layout) +val traceRecord = + Trace.trace ("MatchCompile.record", + fn (vars, rules, facts, es, i: Int.t, test: Exp.t, _: Field.t vector) => + Layout.record [("vars", Vars.layout vars), + ("rules", Rules.layout rules), + ("facts", Facts.layout facts), + ("examples", Examples.layout es), + ("index", Int.layout i), + ("test", Exp.layout test)], Exp.layout) -val traceTuple = - Trace.trace ("MatchCompile.tuple", - fn (vars, rules, facts, es, _: Int.t, _: Exp.t) => - Layout.tuple [Vars.layout vars, - Rules.layout rules, - Facts.layout facts, - Examples.layout es], +val traceVector = + Trace.trace ("MatchCompile.vector", + fn (vars, rules, facts, es, i: Int.t, test: Exp.t) => + Layout.record [("vars", Vars.layout vars), + ("rules", Rules.layout rules), + ("facts", Facts.layout facts), + ("examples", Examples.layout es), + ("index", Int.layout i), + ("test", Exp.layout test)], Exp.layout) (*---------------------------------------------------*) @@ -385,7 +726,6 @@ fun matchCompile {caseType: Type.t, cases: (NestedPat.t * ((Var.t -> Var.t) -> Exp.t)) vector, conTycon: Con.t -> Tycon.t, - region: Region.t, test: Var.t, testType: Type.t, tyconCons: Tycon.t -> {con: Con.t, @@ -395,19 +735,21 @@ fun match arg : Exp.t = traceMatch (fn (vars: Vars.t, rules: Rules.t, facts: Facts.t, es) => - if 0 = Vector.length rules + if Vector.isEmpty rules then Error.bug "MatchCompile.match: no rules" - else if Rule.allWild (Vector.sub (rules, 0)) + else if Rule.allWild (Vector.first rules) then (* The first rule matches. *) let val Rule.T {rest = {examples, finish, nestedPat, ...}, ...} = - Vector.sub (rules, 0) + Vector.first rules val env = Facts.bind (facts, test, nestedPat) val Examples.T {isOnlyExns, ...} = es val () = - List.push (examples, - (Facts.example (facts, es, test), - {isOnlyExns = isOnlyExns})) + Option.app + (examples, fn examples => + List.push (examples, + (Facts.example (facts, es, test), + {isOnlyExns = isOnlyExns}))) in finish (fn x => Env.lookup (env, x)) end @@ -428,9 +770,10 @@ case Vector.sub (pats, i) of Const _ => const (vars, rules, facts, es, i, test) | Con {con, ...} => - sum (vars, rules, facts, es, i, test, - conTycon con) - | Tuple _ => tuple (vars, rules, facts, es, i, test) + sum (vars, rules, facts, es, i, test, conTycon con) + | Record rps => + record (vars, rules, facts, es, i, test, SortedRecord.domain rps) + | Vector _ => vector (vars, rules, facts, es, i, test) | Wild => Error.bug "MatchCompile.match: Wild" end end) arg @@ -446,34 +789,9 @@ SOME {isChar = isChar, isInt = isInt} | _ => NONE) of NONE => {isChar = false, isInt = false} - | SOME z => z - fun layoutConst c = - if isChar - then - case c of - Const.Word w => - let - open Layout - in - seq [str "#\"", - Char.layout (WordX.toChar w), - str String.dquote] - end - | _ => Error.bug (concat - ["MatchCompile.const.layoutConst: ", - "strange char: ", - Layout.toString (Const.layout c)]) - else if isInt - then - case c of - Const.IntInf i => IntInf.layout i - | Const.Word w => - IntInf.layout (WordX.toIntInfX w) - | _ => Error.bug (concat - ["MatchCompile.const.layoutConst: ", - "strange int: ", - Layout.toString (Const.layout c)]) - else Const.layout c + | SOME {isChar, isInt} => {isChar = isChar, isInt = isInt} + fun exampleConst c = + Example.const {const = c, isChar = isChar, isInt = isInt} val (cases, defaults) = Vector.foldr (rules, ([], []), @@ -508,37 +826,37 @@ rules = Vector.fromList rules}) val defaults = Vector.fromList defaults val vars = Vector.dropNth (vars, i) - fun finish (rules: Rule.t vector, e, isOnlyExns): Exp.t = + fun finish (rules: Rule.t vector, e): Exp.t = match (vars, rules, facts, - Examples.add (es, var, e, {isOnlyExns = isOnlyExns})) - fun default (): Exp.t = - let - val (e, ioe) = - if 0 = Vector.length cases - then (wild, true) - else (layoutConst (unhandledConst - (Vector.map (cases, #const))), - false) - in - finish (defaults, e, ioe) - end + Examples.add (es, var, e, {isOnlyExns = false})) + val default: Exp.t option = + Option.map + (unhandledConsts {consts = Vector.map (cases, #const), + isChar = isChar, isInt = isInt}, + fn e => finish (defaults, e)) in case List.peek (directCases, fn {ty = ty', ...} => Type.equals (ty, ty')) of - NONE => - Vector.fold - (cases, default (), fn ({const, rules}, rest) => - Exp.iff {test = Exp.equal (test, Exp.const const), - thenn = finish (rules, Const.layout const, true), - elsee = rest, - ty = caseType}) + NONE => + let + val (cases, default) = + case default of + SOME default => (cases, default) + | NONE => + (Vector.dropSuffix (cases, 1), + let val {const, rules} = Vector.last cases + in finish (rules, exampleConst const) + end) + in + Vector.fold + (cases, default, fn ({const, rules}, rest) => + Exp.iff {test = Exp.equal (test, Exp.const const), + thenn = finish (rules, exampleConst const), + elsee = rest, + ty = caseType}) + end | SOME {size, ...} => let - val default = - if WordSize.cardinality size - = IntInf.fromInt (Vector.length cases) - then NONE - else SOME (default (), region) val cases = Vector.map (cases, fn {const, rules} => @@ -548,10 +866,10 @@ Const.Word w => w | _ => Error.bug "MatchCompile.const: caseWord type error" in - (w, finish (rules, layoutConst const, true)) + (w, finish (rules, exampleConst const)) end) in - Exp.casee {cases = Cases.word (size, cases), + Exp.casee {cases = Cases.Word (size, cases), default = default, test = test, ty = caseType} @@ -639,10 +957,10 @@ (facts, var, Fact.Con {arg = Option.map (arg, #1), con = con}) in - {arg = arg, - con = con, - rhs = match (vars, rules, facts, es), - targs = targs} + (ExpPat.T {arg = arg, + con = con, + targs = targs}, + match (vars, rules, facts, es)) end) fun done (e, isOnlyExns) = SOME (match (Vector.dropNth (vars, i), @@ -652,36 +970,30 @@ {isOnlyExns = isOnlyExns}))) val default = if Vector.isEmpty cases - then done (wild, true) + then done (Example.Wild, true) else if Tycon.equals (tycon, Tycon.exn) - then done (Layout.str "e", true) + then done (Example.Exn, true) else let val cons = tyconCons tycon + val unhandled = + List.keepAllMap + (Vector.toList cons, fn {con, hasArg, ...} => + if Vector.exists (cases, fn (ExpPat.T {con = con', ...}, _) => + Con.equals (con, con')) + then NONE + else SOME (Example.ConApp + {con = con, + arg = if hasArg + then SOME Example.Wild + else NONE})) in - if Vector.length cases = Vector.length cons - then NONE - else - let - val unhandled = - Vector.keepAllMap - (cons, fn {con, hasArg, ...} => - if Vector.exists (cases, fn {con = con', ...} => - Con.equals (con, con')) - then NONE - else SOME (conApp - (con, - if hasArg then SOME wild else NONE))) - open Layout - in - done - (seq (separate (Vector.toList unhandled, " | ")), - false) - end + Option.fold + (Example.or unhandled, NONE, fn (e, _) => done (e, false)) end fun normal () = - Exp.casee {cases = Cases.con cases, - default = Option.map (default, fn e => (e, region)), + Exp.casee {cases = Cases.Con cases, + default = default, test = test, ty = caseType} in @@ -689,7 +1001,7 @@ then normal () else let - val {arg, con, rhs, ...} = Vector.sub (cases, 0) + val (ExpPat.T {arg, con, ...}, rhs) = Vector.first cases in if not (Con.equals (con, Con.reff)) then normal () @@ -702,11 +1014,11 @@ var = var} end end) arg - and tuple arg = - traceTuple - (fn (vars: Vars.t, rules: Rules.t, facts: Facts.t, es, i, test) => + and record arg = + traceRecord + (fn (vars: Vars.t, rules: Rules.t, facts: Facts.t, es, i, test, fs) => let - val (var, _) = Vector.sub (vars, i) + val (var, varTy) = Vector.sub (vars, i) fun body vars' = let val n = Vector.length vars' @@ -728,34 +1040,190 @@ if i <> i' then Vector.new1 p else (case p of - Pat.Tuple ps => ps + Pat.Record rps => SortedRecord.range rps | Pat.Wild => Vector.tabulate (n, fn _ => Pat.Wild) - | _ => Error.bug "MatchCompile.tuple: detuple"))) + | _ => Error.bug "MatchCompile.record: derecord"))) in Rule.T {pats = pats, rest = rest} end) + val facts = + Facts.add + (facts, var, + Fact.Record (SortedRecord.zip (fs, Vector.map (vars', #1)))) + in + match (vars, rules, facts, es) + end + in + if Vector.length fs = 1 + then let val var' = Var.newNoname () + in + (* Although 'test' is likely a variable, + * must bind to a fresh variable to maintain + * a unique Fact.t per variable in Facts.t. + *) + Exp.lett {var = var', exp = test, + body = body (Vector.new1 (var', varTy))} + end + else Exp.detuple {body = body, tuple = test} + end) arg + and vector arg = + traceVector + (fn (vars: Vars.t, rules: Rules.t, facts: Facts.t, es, i, test) => + let + val (var, _) = Vector.sub (vars, i) + val (cases, defaults) = + Vector.foldr + (rules, ([], []), + fn (rule as Rule.T {pats, ...}, (cases, defaults)) => + case Vector.sub (pats, i) of + Pat.Vector args => + let + fun oneCase () = + {len = Vector.length args, + rules = rule :: defaults} + fun insert (cases, ac) = + case cases of + [] => oneCase () :: ac + | ((casee as {len, rules})::cases) => + if Vector.length args = len + then + {len = len, rules = rule :: rules} + :: List.appendRev (ac, cases) + else insert (cases, casee :: ac) + in + (insert (cases, []), defaults) + end + | Pat.Wild => + (List.map (cases, fn {len, rules} => + {len = len, rules = rule :: rules}), + rule :: defaults) + | _ => Error.bug "MatchCompile.vector: expected Vector pat") + val default = + let + val maxLen = + List.fold + (cases, ~1, fn ({len, ...}, max) => + Int.max (max, len)) + val unhandled = + Example.vectorDots (Vector.new (maxLen + 1, Example.Wild)) + val unhandled = + Int.foldDown + (0, maxLen, [unhandled], fn (i, unhandled) => + if List.exists (cases, fn {len, ...} => i = len) + then unhandled + else (Example.vector (Vector.new (i, Example.Wild))) :: unhandled) + val unhandled = + Example.or unhandled in - match (vars, rules, - Facts.add (facts, var, - Fact.Tuple (Vector.map (vars', #1))), - es) + match (Vector.dropNth (vars, i), + Rules.dropNth (Vector.fromList defaults, i), + facts, + Option.fold + (unhandled, es, fn (unhandled, es) => + Examples.add (es, var, unhandled, {isOnlyExns = false}))) end + val cases = + Vector.fromListMap + (cases, fn {len, rules} => + let + fun body vars' = + let + val vars = + Vector.concatV + (Vector.mapi + (vars, fn (i', x) => + if i = i' + then vars' + else Vector.new1 x)) + val rules = + Vector.fromListMap + (rules, fn Rule.T {pats, rest} => + let + val pats = + Vector.concatV + (Vector.mapi + (pats, fn (i', p) => + if i <> i' + then Vector.new1 p + else (case p of + Pat.Vector ps => ps + | Pat.Wild => Vector.new (len, Pat.Wild) + | _ => Error.bug "MatchCompile.vector: devector"))) + in + Rule.T {pats = pats, rest = rest} + end) + in + match (vars, rules, + Facts.add (facts, var, + Fact.Vector (Vector.map (vars', #1))), + es) + end + in + (WordX.fromInt (len, WordSize.seqIndex ()), + Exp.devector {vector = test, length = len, body = body}) + end) in - Exp.detuple {body = body, tuple = test} + Exp.casee + {cases = Cases.Word (WordSize.seqIndex (), cases), + default = SOME default, + test = Exp.vectorLength test, + ty = caseType} end) arg - val examples = Vector.tabulate (Vector.length cases, fn _ => ref []) + val examples = ref [] val res = match (Vector.new1 (test, testType), - Vector.map2 (cases, examples, fn ((p, f), r) => + Vector.mapi (cases, fn (i, (p, f)) => Rule.T {pats = Vector.new1 (Pat.fromNestedPat p), - rest = {examples = r, + rest = {examples = if i = Vector.length cases - 1 + then SOME examples + else NONE, finish = f, nestedPat = p}}), Facts.empty, Examples.empty) + val examples = + fn {dropOnlyExns} => + let + val example = + (Example.or o List.keepAllMap) + (!examples, fn (ex, {isOnlyExns}) => + if dropOnlyExns andalso isOnlyExns + then NONE + else SOME ex) + in + Option.map (example, Example.layout) + end + in + (res, examples) + end + +val matchCompile = + fn {caseType: Type.t, + cases: (NestedPat.t * (int -> (Var.t -> Var.t) -> Exp.t)) vector, + conTycon: Con.t -> Tycon.t, + test: Var.t, + testType: Type.t, + tyconCons: Tycon.t -> {con: Con.t, + hasArg: bool} vector} => + let + val cases = + Vector.map + (cases, fn (pat, mk) => + let + val pats = NestedPat.flatten pat + val mk = mk (Vector.length pats) + in + Vector.map (pats, fn pat => (pat, mk)) + end) + val cases = Vector.concatV cases in - (res, fn () => Vector.map (examples, fn r => Vector.fromList (!r))) + matchCompile {caseType = caseType, + cases = cases, + conTycon = conTycon, + test = test, + testType = testType, + tyconCons = tyconCons} end val matchCompile = @@ -769,6 +1237,6 @@ Exp.layout o #1) matchCompile -structure Vars = S.Vars +structure Pat = ExpPat end diff -Nru mlton-20130715/mlton/match-compile/match-compile.sig mlton-20210117+dfsg/mlton/match-compile/match-compile.sig --- mlton-20130715/mlton/match-compile/match-compile.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/match-compile/match-compile.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2015,2017,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -20,24 +20,19 @@ val unit: t val word: WordSize.t -> t end - structure Cases: + structure Pat: sig - type exp - type t - - val con: {arg: (Var.t * Type.t) option, - con: Con.t, - rhs: exp, - targs: Type.t vector} vector -> t - val word: WordSize.t * (WordX.t * exp) vector -> t + datatype t = T of {arg: (Var.t * Type.t) option, + con: Con.t, + targs: Type.t vector} end structure Exp: sig type t val casee: - {cases: Cases.t, - default: (t * Region.t) option, + {cases: (Pat.t, t) Cases.t, + default: t option, test: t, ty: Type.t} (* type of entire case expression *) -> t @@ -45,12 +40,14 @@ val deref: t -> t val detuple: {tuple: t, body: (Var.t * Type.t) vector -> t} -> t + val devector: {vector: t, length: int, + body: (Var.t * Type.t) vector -> t} -> t val equal: t * t -> t val iff: {test: t, thenn: t, elsee: t, ty: Type.t} -> t val lett: {var: Var.t, exp: t, body: t} -> t val var: Var.t * Type.t -> t + val vectorLength: t -> t end - sharing type Cases.exp = Exp.t structure NestedPat: NESTED_PAT sharing Atoms = NestedPat.Atoms sharing Type = NestedPat.Type @@ -62,11 +59,10 @@ val matchCompile: {caseType: Type.t, (* type of entire expression *) - cases: (NestedPat.t * ((Var.t -> Var.t) -> Exp.t)) vector, + cases: (NestedPat.t * (int -> (Var.t -> Var.t) -> Exp.t)) vector, conTycon: Con.t -> Tycon.t, - region: Region.t, test: Var.t, testType: Type.t, tyconCons: Tycon.t -> {con: Con.t, hasArg: bool} vector} - -> Exp.t * (unit -> ((Layout.t * {isOnlyExns: bool}) vector) vector) + -> Exp.t * ({dropOnlyExns: bool} -> Layout.t option) end diff -Nru mlton-20130715/mlton/match-compile/nested-pat.fun mlton-20210117+dfsg/mlton/match-compile/nested-pat.fun --- mlton-20130715/mlton/match-compile/nested-pat.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/match-compile/nested-pat.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2015,2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -13,15 +14,17 @@ datatype t = T of {pat: node, ty: Type.t} and node = - Con of {arg: t option, - con: Con.t, - targs: Type.t vector} + Con of {arg: t option, + con: Con.t, + targs: Type.t vector} | Const of {const: Const.t, isChar: bool, isInt: bool} | Layered of Var.t * t - | Tuple of t vector + | Or of t vector + | Record of t SortedRecord.t | Var of Var.t + | Vector of t vector | Wild local @@ -32,52 +35,97 @@ end fun tuple ps = - if 1 = Vector.length ps - then Vector.sub (ps, 0) - else T {pat = Tuple ps, - ty = Type.tuple (Vector.map (ps, ty))} + T {pat = Record (SortedRecord.tuple ps), + ty = Type.tuple (Vector.map (ps, ty))} -fun layout p = +fun layout (p, isDelimited) = let open Layout + fun delimit t = if isDelimited then t else paren t in case node p of Con {arg, con, targs} => - let - val z = - Pretty.conApp {arg = Option.map (arg, layout), - con = Con.layout con, - targs = Vector.map (targs, Type.layout)} - in - if isSome arg then paren z else z - end + delimit (Pretty.conApp {arg = Option.map (arg, layoutF), + con = Con.layout con, + targs = Vector.map (targs, Type.layout)}) | Const {const = c, ...} => Const.layout c - | Layered (x, p) => paren (seq [Var.layout x, str " as ", layout p]) - | Tuple ps => tuple (Vector.toListMap (ps, layout)) + | Layered (x, p) => delimit (seq [Var.layout x, str " as ", layoutT p]) + | Or ps => paren (mayAlign (separateLeft (Vector.toListMap (ps, layoutT), "| "))) + | Record rps => + SortedRecord.layout + {extra = "", + layoutElt = layoutT, + layoutTuple = fn ps => tuple (Vector.toListMap (ps, layoutT)), + record = rps, + separator = " = "} | Var x => Var.layout x + | Vector ps => vector (Vector.map (ps, layoutT)) | Wild => str "_" -end + end +and layoutF p = layout (p, false) +and layoutT p = layout (p, true) + +val layout = layoutT fun make (p, t) = - case p of - Tuple ps => - if 1 = Vector.length ps - then Vector.sub (ps, 0) - else T {pat = p, ty = t} - | _ => T {pat = p, ty = t} + T {pat = p, ty = t} + +fun flatten p = + let + val ty = ty p + val make = fn p => make (p, ty) + in + case node p of + Con {arg, con, targs} => + (case arg of + NONE => Vector.new1 p + | SOME arg => Vector.map (flatten arg, fn arg => + make (Con {arg = SOME arg, con = con, targs = targs}))) + | Const _ => Vector.new1 p + | Layered (x, p) => Vector.map (flatten p, fn p => make (Layered (x, p))) + | Or ps => Vector.concatV (Vector.map (ps, flatten)) + | Record rps => + let + val (fs, ps) = SortedRecord.unzip rps + val record = fn ps => + Record (SortedRecord.zip (fs, ps)) + in + flattens (ps, make o record) + end + | Var _ => Vector.new1 p + | Vector ps => flattens (ps, make o Vector) + | Wild => Vector.new1 p + end +and flattens (ps, make) = + let + val fpss = + Vector.foldr + (Vector.map (ps, flatten), [[]], fn (fps, fpss) => + List.concat (Vector.toListMap (fps, fn fp => + List.map (fpss, fn fps => fp :: fps)))) + in + Vector.fromListMap (fpss, fn fps => make (Vector.fromList fps)) + end + +val flatten = + Trace.trace ("NestedPat.flatten", layout, Vector.layout layout) + flatten fun isRefutable p = case node p of - Wild => false - | Var _ => false + Con _ => true | Const _ => true - | Con _ => true - | Tuple ps => Vector.exists (ps, isRefutable) | Layered (_, p) => isRefutable p + | Or ps => Vector.exists (ps, isRefutable) + | Record rps => SortedRecord.exists (rps, isRefutable) + | Var _ => false + | Vector _ => true + | Wild => false -fun isVar p = +fun isVarOrWild p = case node p of Var _ => true + | Wild => true | _ => false fun removeOthersReplace (p, {new, old}) = @@ -99,11 +147,13 @@ then Layered (new, p) else node p end - | Tuple ps => Tuple (Vector.map (ps, loop)) + | Or ps => Or (Vector.map (ps, loop)) + | Record rps => Record (SortedRecord.map (rps, loop)) | Var x => if Var.equals (x, old) then Var new else Wild + | Vector ps => Vector (Vector.map (ps, loop)) | Wild => Wild in T {pat = pat, ty = ty} @@ -135,8 +185,10 @@ targs = Vector.map (targs, f)} | Const _ => pat | Layered (x, p) => Layered (x, loop p) - | Tuple ps => Tuple (Vector.map (ps, loop)) + | Or ps => Or (Vector.map (ps, loop)) + | Record rps => Record (SortedRecord.map (rps, loop)) | Var _ => pat + | Vector ps => Vector (Vector.map (ps, loop)) | Wild => pat in T {pat = pat, ty = f ty} @@ -149,14 +201,16 @@ let fun loop (p: t, accum: (Var.t * Type.t) list) = case node p of - Wild => accum + Con {arg, ...} => (case arg of + NONE => accum + | SOME p => loop (p, accum)) | Const _ => accum - | Var x => (x, ty p) :: accum - | Tuple ps => Vector.fold (ps, accum, loop) - | Con {arg, ...} => (case arg of - NONE => accum - | SOME p => loop (p, accum)) | Layered (x, p) => loop (p, (x, ty p) :: accum) + | Or ps => loop (Vector.first ps, accum) + | Record rps => SortedRecord.fold (rps, accum, loop) + | Var x => (x, ty p) :: accum + | Vector ps => Vector.fold (ps, accum, loop) + | Wild => accum in loop (p, []) end diff -Nru mlton-20130715/mlton/match-compile/nested-pat.sig mlton-20210117+dfsg/mlton/match-compile/nested-pat.sig --- mlton-20130715/mlton/match-compile/nested-pat.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/match-compile/nested-pat.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -31,13 +32,16 @@ isChar: bool, isInt: bool} | Layered of Var.t * t - | Tuple of t vector + | Or of t vector + | Record of t SortedRecord.t | Var of Var.t + | Vector of t vector | Wild + val flatten: t -> t vector (* isRefutable p iff p contains a constant, constructor or variable. *) val isRefutable: t -> bool - val isVar: t -> bool + val isVarOrWild: t -> bool val layout: t -> Layout.t val make: node * Type.t -> t val node: t -> node diff -Nru mlton-20130715/mlton/match-compile/sources.cm mlton-20210117+dfsg/mlton/match-compile/sources.cm --- mlton-20130715/mlton/match-compile/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/match-compile/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -2,20 +2,20 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library functor MatchCompile functor NestedPat is +../../lib/mlton/sources.cm ../atoms/sources.cm ../control/sources.cm -../../lib/mlton/sources.cm nested-pat.sig nested-pat.fun diff -Nru mlton-20130715/mlton/match-compile/sources.mlb mlton-20210117+dfsg/mlton/match-compile/sources.mlb --- mlton-20130715/mlton/match-compile/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/match-compile/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/mlton.mlb mlton-20210117+dfsg/mlton/mlton.mlb --- mlton-20130715/mlton/mlton.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/mlton.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/mlton-smlnj.cm mlton-20210117+dfsg/mlton/mlton-smlnj.cm --- mlton-20130715/mlton/mlton-smlnj.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/mlton-smlnj.cm 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,13 @@ (* Copyright (C) 2009 Matthew Fluet. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group is +Library + +structure Main + +is sources.cm diff -Nru mlton-20130715/mlton/sources.cm mlton-20210117+dfsg/mlton/sources.cm --- mlton-20130715/mlton/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -2,11 +2,15 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group is +Library + +structure Main + +is main/sources.cm diff -Nru mlton-20130715/mlton/sources.mlb mlton-20210117+dfsg/mlton/sources.mlb --- mlton-20130715/mlton/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/analyze2.fun mlton-20210117+dfsg/mlton/ssa/analyze2.fun --- mlton-20130715/mlton/ssa/analyze2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/analyze2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2011 Matthew Fluet. +(* Copyright (C) 2011,2017,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -18,25 +18,25 @@ fun 'a analyze {base, coerce, const, filter, filterWord, fromType, inject, layout, object, primApp, program = Program.T {functions, globals, main, ...}, - select, update, useFromTypeOnBinds} = + select, sequence, update, useFromTypeOnBinds} = let fun coerces (msg, from, to) = if Vector.length from = Vector.length to then Vector.foreach2 (from, to, fn (from, to) => coerce {from = from, to = to}) - else Error.bug (concat ["Analyze2.coerces: length mismatch: ", msg]) + else Error.bug (concat ["Analyze2.coerces (length mismatch: ", msg, ")"]) val {get = value: Var.t -> 'a, set = setValue, ...} = Property.getSetOnce (Var.plist, - Property.initRaise ("analyze var value", Var.layout)) + Property.initRaise ("Analyze2.value", Var.layout)) val value = Trace.trace ("Analyze2.value", Var.layout, layout) value fun values xs = Vector.map (xs, value) - val {get = func, set = setFunc, ...} = + val {get = funcInfo, set = setFuncInfo, ...} = Property.getSetOnce - (Func.plist, Property.initRaise ("analyze func name", Func.layout)) + (Func.plist, Property.initRaise ("Analyze2.funcInfo", Func.layout)) val {get = labelInfo, set = setLabelInfo, ...} = Property.getSetOnce - (Label.plist, Property.initRaise ("analyze label", Label.layout)) + (Label.plist, Property.initRaise ("Analyze2.labelInfo", Label.layout)) val labelArgs = #args o labelInfo val labelValues = #values o labelInfo fun loopArgs args = @@ -51,50 +51,43 @@ let val {args, name, raises, returns, ...} = Function.dest f in - setFunc (name, {args = loopArgs args, - raises = Option.map (raises, fn ts => - Vector.map (ts, fromType)), - returns = Option.map (returns, fn ts => - Vector.map (ts, fromType))}) + setFuncInfo (name, {args = loopArgs args, + raises = Option.map (raises, fn ts => + Vector.map (ts, fromType)), + returns = Option.map (returns, fn ts => + Vector.map (ts, fromType))}) end) fun loopTransfer (t: Transfer.t, shouldReturns: 'a vector option, shouldRaises: 'a vector option): unit = (case t of - Arith {prim, args, overflow, success, ty} => - (coerces ("arith", Vector.new0 (), labelValues overflow) - ; coerce {from = primApp {prim = prim, - args = values args, - resultType = ty, - resultVar = NONE}, - to = Vector.sub (labelValues success, 0)}) - | Bug => () - | Call {func = f, args, return, ...} => + Bug => () + | Call {func, args, return, ...} => let - val {args = formals, raises, returns} = func f - val _ = coerces ("formals", values args, formals) + val {args = formals, raises, returns} = funcInfo func + val _ = coerces ("call args/formals", values args, formals) fun noHandler () = case (raises, shouldRaises) of (NONE, NONE) => () | (NONE, SOME _) => () | (SOME _, NONE) => - Error.bug "Analyze2.loopTransfer: raise mismatch" - | (SOME vs, SOME vs') => coerces ("noHandler", vs, vs') + Error.bug "Analyze2.loopTransfer (raise mismatch)" + | (SOME vs, SOME vs') => coerces ("call caller/raises", vs, vs') datatype z = datatype Return.t in case return of Dead => if isSome returns orelse isSome raises - then Error.bug "Analyze2.loopTransfer: return mismatch at Dead" + then Error.bug "Analyze2.loopTransfer (return mismatch at Dead)" else () | NonTail {cont, handler} => (Option.app (returns, fn vs => - coerces ("returns", vs, labelValues cont)) + coerces ("call non-tail/returns", vs, labelValues cont)) ; (case handler of Handler.Caller => noHandler () | Handler.Dead => if isSome raises - then Error.bug "Analyze2.loopTransfer: raise mismatch at NonTail" + then Error.bug "Analyze2.loopTransfer (raise mismatch at NonTail/Dead)" else () | Handler.Handle h => let @@ -102,8 +95,7 @@ case raises of NONE => () | SOME vs => - coerces ("handle", vs, - labelValues h) + coerces ("call handle/raises", vs, labelValues h) in () end)) @@ -115,9 +107,9 @@ (NONE, NONE) => () | (NONE, SOME _) => () | (SOME _, NONE) => - Error.bug "Analyze2.loopTransfer: return mismatch at Tail" + Error.bug "Analyze2.loopTransfer (return mismatch at Tail)" | (SOME vs, SOME vs') => - coerces ("tail", vs, vs') + coerces ("call tail/return", vs, vs') in () end @@ -129,16 +121,17 @@ fun ensureSize (w, s) = if WordSize.equals (s, WordX.size w) then () - else Error.bug (concat ["Analyze.loopTransfer: Case:", - WordX.toString w, + else Error.bug (concat ["Analyze.loopTransfer (case ", + WordX.toString (w, {suffix = true}), " must be size ", - WordSize.toString s]) + WordSize.toString s, + ")"]) fun ensureNullary j = - if 0 = Vector.length (labelValues j) + if Vector.isEmpty (labelValues j) then () - else Error.bug (concat ["Analyze2.loopTransfer: Case:", + else Error.bug (concat ["Analyze2.loopTransfer (case:", Label.toString j, - " must be nullary"]) + " must be nullary)"]) fun doitWord (s, cs) = (ignore (filterWord (test, s)) ; Vector.foreach (cs, fn (w, j) => @@ -152,8 +145,8 @@ val variant = case Vector.length v of 0 => NONE - | 1 => SOME (Vector.sub (v, 0)) - | _ => Error.bug "Analyze2.loopTransfer: Case:conApp with >1 arg" + | 1 => SOME (Vector.first v) + | _ => Error.bug "Analyze2.loopTransfer (case conApp with >1 arg)" in filter {con = c, test = test, @@ -170,21 +163,21 @@ | Goto {dst, args} => coerces ("goto", values args, labelValues dst) | Raise xs => (case shouldRaises of - NONE => Error.bug "Analyze2.loopTransfer: raise mismatch at Raise" + NONE => Error.bug "Analyze2.loopTransfer (raise mismatch at Raise)" | SOME vs => coerces ("raise", values xs, vs)) | Return xs => (case shouldReturns of - NONE => Error.bug "Analyze2.loopTransfer: return mismatch at Return" + NONE => Error.bug "Analyze2.loopTransfer (return mismatch at Return)" | SOME vs => coerces ("return", values xs, vs)) | Runtime {prim, args, return} => let val xts = labelArgs return val (resultVar, resultType) = - if 0 = Vector.length xts + if Vector.isEmpty xts then (NONE, Type.unit) else let - val (x, t) = Vector.sub (xts, 0) + val (x, t) = Vector.first xts in (SOME x, t) end @@ -196,6 +189,7 @@ in () end) + handle exn => Error.reraiseSuffix (exn, concat [" in ", Layout.toString (Transfer.layout t)]) val loopTransfer = Trace.trace3 ("Analyze2.loopTransfer", @@ -222,7 +216,7 @@ fn (x, {isMutable, ...}) => {elt = value x, isMutable = isMutable})) - | _ => Error.bug "Analyze2.loopBind: strange object" + | _ => Error.bug "Analyze2.loopBind (strange object)" in object {args = args, con = con, @@ -237,6 +231,24 @@ select {base = baseValue base, offset = offset, resultType = ty} + | Sequence {args} => + let + val args = + case Type.dest ty of + Type.Object {args = ts, con = ObjectCon.Sequence} => + Vector.map + (args, fn args => + Prod.make + (Vector.map2 + (args, Prod.dest ts, + fn (x, {isMutable, ...}) => + {elt = value x, + isMutable = isMutable}))) + | _ => Error.bug "Analyze2.loopBind (strange sequence)" + in + sequence {args = args, + resultType = ty} + end | Var x => value x fun loopStatement (s: Statement.t): unit = (case s of @@ -261,13 +273,15 @@ update {base = baseValue base, offset = offset, value = value v}) + handle exn => Error.reraiseSuffix (exn, concat [" in ", Layout.toString (Statement.layout s)]) val loopStatement = Trace.trace ("Analyze2.loopStatement", Statement.layout, Unit.layout) loopStatement - val _ = coerces ("main", Vector.new0 (), #args (func main)) + val _ = coerces ("main", Vector.new0 (), #args (funcInfo main)) val _ = Vector.foreach (globals, loopStatement) + handle exn => Error.reraiseSuffix (exn, concat [" in Globals"]) val _ = List.foreach (functions, fn f => @@ -280,7 +294,7 @@ block = b, values = loopArgs args, visited = ref false})) - val {returns, raises, ...} = func name + val {returns, raises, ...} = funcInfo name fun visit (l: Label.t) = let val {block, visited, ...} = labelInfo l @@ -291,18 +305,20 @@ let val _ = visited := true val Block.T {statements, transfer, ...} = block + val _ = (Vector.foreach (statements, loopStatement) + ; loopTransfer (transfer, returns, raises)) + handle exn => Error.reraiseSuffix (exn, concat [" in ", Label.toString l]) in - Vector.foreach (statements, loopStatement) - ; loopTransfer (transfer, returns, raises) - ; Transfer.foreachLabel (transfer, visit) + Transfer.foreachLabel (transfer, visit) end end val _ = visit start in () - end) + end + handle exn => Error.reraiseSuffix (exn, concat [" in ", Func.toString (Function.name f)])) in - {func = func, + {func = funcInfo, label = labelValues, value = value} end diff -Nru mlton-20130715/mlton/ssa/analyze2.sig mlton-20210117+dfsg/mlton/ssa/analyze2.sig --- mlton-20130715/mlton/ssa/analyze2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/analyze2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -42,6 +42,8 @@ select: {base: 'a, offset: int, resultType: Type.t} -> 'a, + sequence: {args: 'a Prod.t vector, + resultType: Type.t} -> 'a, update: {base: 'a, offset: int, value: 'a} -> unit, diff -Nru mlton-20130715/mlton/ssa/analyze.fun mlton-20210117+dfsg/mlton/ssa/analyze.fun --- mlton-20130715/mlton/ssa/analyze.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/analyze.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2011 Matthew Fluet. +(* Copyright (C) 2011,2017,2019 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,9 +15,7 @@ datatype z = datatype Transfer.t fun 'a analyze - {coerce, conApp, const, - filter, filterWord, - fromType, layout, primApp, + {coerce, conApp, const, filter, filterWord, fromType, layout, primApp, program = Program.T {main, globals, functions, ...}, select, tuple, useFromTypeOnBinds} = let @@ -26,19 +24,19 @@ if Vector.length from = Vector.length to then Vector.foreach2 (from, to, fn (from, to) => coerce {from = from, to = to}) - else Error.bug (concat ["Analyze.coerces length mismatch: ", msg]) + else Error.bug (concat ["Analyze.coerces (length mismatch: ", msg, ")"]) val {get = value: Var.t -> 'a, set = setValue, ...} = Property.getSetOnce (Var.plist, - Property.initRaise ("analyze var value", Var.layout)) + Property.initRaise ("Analyze.value", Var.layout)) val value = Trace.trace ("Analyze.value", Var.layout, layout) value fun values xs = Vector.map (xs, value) - val {get = func, set = setFunc, ...} = + val {get = funcInfo, set = setFuncInfo, ...} = Property.getSetOnce - (Func.plist, Property.initRaise ("analyze func name", Func.layout)) + (Func.plist, Property.initRaise ("Analyze.funcInfo", Func.layout)) val {get = labelInfo, set = setLabelInfo, ...} = Property.getSetOnce - (Label.plist, Property.initRaise ("analyze label", Label.layout)) + (Label.plist, Property.initRaise ("Analyze.labelInfo", Label.layout)) val labelArgs = #args o labelInfo val labelValues = #values o labelInfo fun loopArgs args = @@ -53,51 +51,43 @@ let val {args, name, raises, returns, ...} = Function.dest f in - setFunc (name, {args = loopArgs args, - raises = Option.map (raises, fn ts => - Vector.map (ts, fromType)), - returns = Option.map (returns, fn ts => - Vector.map (ts, fromType))}) + setFuncInfo (name, {args = loopArgs args, + raises = Option.map (raises, fn ts => + Vector.map (ts, fromType)), + returns = Option.map (returns, fn ts => + Vector.map (ts, fromType))}) end) fun loopTransfer (t: Transfer.t, shouldReturns: 'a vector option, shouldRaises: 'a vector option): unit = (case t of - Arith {prim, args, overflow, success, ty} => - (coerces ("arith", Vector.new0 (), labelValues overflow) - ; coerce {from = primApp {prim = prim, - targs = Vector.new0 (), - args = values args, - resultType = ty, - resultVar = NONE}, - to = Vector.sub (labelValues success, 0)}) - | Bug => () - | Call {func = f, args, return, ...} => + Bug => () + | Call {func, args, return, ...} => let - val {args = formals, raises, returns} = func f - val _ = coerces ("formals", values args, formals) + val {args = formals, raises, returns} = funcInfo func + val _ = coerces ("call args/formals", values args, formals) fun noHandler () = case (raises, shouldRaises) of (NONE, NONE) => () | (NONE, SOME _) => () | (SOME _, NONE) => - Error.bug "Analyze.loopTransfer: raise mismatch" - | (SOME vs, SOME vs') => coerces ("noHandler", vs, vs') + Error.bug "Analyze.loopTransfer (raise mismatch)" + | (SOME vs, SOME vs') => coerces ("call caller/raises", vs, vs') datatype z = datatype Return.t in case return of Dead => if isSome returns orelse isSome raises - then Error.bug "Analyze.loopTransfer: return mismatch at Dead" + then Error.bug "Analyze.loopTransfer (return mismatch at Dead)" else () | NonTail {cont, handler} => (Option.app (returns, fn vs => - coerces ("returns", vs, labelValues cont)) + coerces ("call non-tail/returns", vs, labelValues cont)) ; (case handler of Handler.Caller => noHandler () | Handler.Dead => if isSome raises - then Error.bug "Analyze.loopTransfer: raise mismatch at NonTail" + then Error.bug "Analyze.loopTransfer (raise mismatch at NonTail/Dead)" else () | Handler.Handle h => let @@ -105,8 +95,7 @@ case raises of NONE => () | SOME vs => - coerces ("handle", vs, - labelValues h) + coerces ("call handle/raises", vs, labelValues h) in () end)) @@ -118,9 +107,9 @@ (NONE, NONE) => () | (NONE, SOME _) => () | (SOME _, NONE) => - Error.bug "Analyze.loopTransfer: return mismatch at Tail" + Error.bug "Analyze.loopTransfer (return mismatch at Tail)" | (SOME vs, SOME vs') => - coerces ("tail", vs, vs') + coerces ("call tail/returns", vs, vs') in () end @@ -130,18 +119,19 @@ let val test = value test fun ensureNullary j = - if 0 = Vector.length (labelValues j) + if Vector.isEmpty (labelValues j) then () - else Error.bug (concat ["Analyze.loopTransfer: Case:", + else Error.bug (concat ["Analyze.loopTransfer (case ", Label.toString j, - " must be nullary"]) + " must be nullary)"]) fun ensureSize (w, s) = if WordSize.equals (s, WordX.size w) then () - else Error.bug (concat ["Analyze.loopTransfer: Case:", - WordX.toString w, + else Error.bug (concat ["Analyze.loopTransfer (case ", + WordX.toString (w, {suffix = true}), " must be size ", - WordSize.toString s]) + WordSize.toString s, + ")"]) fun doitWord (s, cs) = (ignore (filterWord (test, s)) ; Vector.foreach (cs, fn (w, j) => @@ -161,21 +151,21 @@ | Goto {dst, args} => coerces ("goto", values args, labelValues dst) | Raise xs => (case shouldRaises of - NONE => Error.bug "Analyze.loopTransfer: raise mismatch at Raise" + NONE => Error.bug "Analyze.loopTransfer (raise mismatch at Raise)" | SOME vs => coerces ("raise", values xs, vs)) | Return xs => (case shouldReturns of - NONE => Error.bug "Analyze.loopTransfer: return mismatch at Return" + NONE => Error.bug "Analyze.loopTransfer (return mismatch at Return)" | SOME vs => coerces ("return", values xs, vs)) | Runtime {prim, args, return} => let val xts = labelArgs return val (resultVar, resultType) = - if 0 = Vector.length xts + if Vector.isEmpty xts then (NONE, Type.unit) else let - val (x, t) = Vector.sub (xts, 0) + val (x, t) = Vector.first xts in (SOME x, t) end @@ -188,6 +178,7 @@ in () end) + handle exn => Error.reraiseSuffix (exn, concat [" in ", Layout.toString (Transfer.layout t)]) val loopTransfer = Trace.trace3 ("Analyze.loopTransfer", @@ -196,7 +187,7 @@ Option.layout (Vector.layout layout), Layout.ignore) loopTransfer - fun loopStatement (Statement.T {var, exp, ty}): unit = + fun loopStatement (s as Statement.T {var, exp, ty}): unit = let val v = case exp of @@ -215,7 +206,7 @@ resultType = ty} | Tuple xs => if 1 = Vector.length xs - then Error.bug "Analyze.loopStatement: unary tuple" + then Error.bug "Analyze.loopStatement (unary tuple)" else tuple (values xs) | Var x => value x in @@ -231,11 +222,13 @@ end else setValue (var, v)) end + handle exn => Error.reraiseSuffix (exn, concat [" in ", Layout.toString (Statement.layout s)]) val loopStatement = Trace.trace ("Analyze.loopStatement", Statement.layout, Unit.layout) loopStatement - val _ = coerces ("main", Vector.new0 (), #args (func main)) + val _ = coerces ("main", Vector.new0 (), #args (funcInfo main)) val _ = Vector.foreach (globals, loopStatement) + handle exn => Error.reraiseSuffix (exn, concat [" in Globals"]) val _ = List.foreach (functions, fn f => @@ -248,7 +241,7 @@ block = b, values = loopArgs args, visited = ref false})) - val {returns, raises, ...} = func name + val {returns, raises, ...} = funcInfo name fun visit (l: Label.t) = let val {block, visited, ...} = labelInfo l @@ -259,18 +252,21 @@ let val _ = visited := true val Block.T {statements, transfer, ...} = block + val _ = (Vector.foreach (statements, loopStatement) + ; loopTransfer (transfer, returns, raises)) + handle exn => Error.reraiseSuffix (exn, concat [" in ", Label.toString l]) in - Vector.foreach (statements, loopStatement) - ; loopTransfer (transfer, returns, raises) - ; Transfer.foreachLabel (transfer, visit) + Transfer.foreachLabel (transfer, visit) end end + val _ = visit start in () - end) + end + handle exn => Error.reraiseSuffix (exn, concat [" in ", Func.toString (Function.name f)])) in - {func = func, + {func = funcInfo, label = labelValues, value = value} end diff -Nru mlton-20130715/mlton/ssa/analyze.sig mlton-20210117+dfsg/mlton/ssa/analyze.sig --- mlton-20130715/mlton/ssa/analyze.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/analyze.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/combine-conversions.fun mlton-20210117+dfsg/mlton/ssa/combine-conversions.fun --- mlton-20130715/mlton/ssa/combine-conversions.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/combine-conversions.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2009 Wesley W. Tersptra. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -85,8 +85,8 @@ Statement.T { exp = Exp.PrimApp { args, prim, targs=_ }, ty = _, var = SOME v } => - (case Prim.name prim of - Prim.Name.Word_extdToWord a => rules v (a, Vector.sub (args, 0)) + (case prim of + Prim.Word_extdToWord a => rules v (a, Vector.first args) | _ => ()) | _ => () @@ -99,7 +99,7 @@ if WordSize.equals (W2, W3) then Exp.Var x2 else Exp.PrimApp { args = Vector.new1 x2, - prim = Prim.wordExtdToWord prim, + prim = Prim.Word_extdToWord prim, targs = Vector.new0 () } | _ => exp in diff -Nru mlton-20130715/mlton/ssa/common-arg.fun mlton-20210117+dfsg/mlton/ssa/common-arg.fun --- mlton-20130715/mlton/ssa/common-arg.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/common-arg.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -118,9 +118,7 @@ Vector.foreach (blocks, fn Block.T {transfer, ...} => case transfer of - Arith {overflow, success, ...} => - (visitLabelArgs overflow; visitLabelArgs success) - | Bug => () + Bug => () | Call {return, ...} => (case return of Return.NonTail {cont, handler} => diff -Nru mlton-20130715/mlton/ssa/common-block.fun mlton-20210117+dfsg/mlton/ssa/common-block.fun --- mlton-20130715/mlton/ssa/common-block.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/common-block.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -121,22 +121,22 @@ val doit = fn SOME l => makeNullaryGoto l | NONE => transfer val transfer = - if Vector.length statements = 0 + if Vector.isEmpty statements then case transfer of Goto {dst, args = xs} => if Vector.length xs = 1 then doit (commonGotoers - (dst, Vector.sub(xs, 0))) + (dst, Vector.first xs)) else transfer | Return xs => if Vector.length xs = 1 then doit (commonReturner - (Vector.sub(xs, 0))) + (Vector.first xs)) else transfer | Raise xs => if Vector.length xs = 1 then doit (commonRaiser - (Vector.sub (xs, 0))) + (Vector.first xs)) else transfer | _ => transfer else transfer diff -Nru mlton-20130715/mlton/ssa/common-subexp.fun mlton-20210117+dfsg/mlton/ssa/common-subexp.fun --- mlton-20130715/mlton/ssa/common-subexp.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/common-subexp.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2011 Matthew Fluet. +(* Copyright (C) 2009,2011,2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -25,9 +25,16 @@ set = setLabelInfo, ...} = Property.getSetOnce (Label.plist, Property.initRaise ("info", Label.layout)) - (* Keep track of variables used as overflow variables. *) - val {get = overflowVar: Var.t -> bool, set = setOverflowVar, ...} = - Property.getSetOnce (Var.plist, Property.initConst false) + (* Keep track of a total ordering on variables. *) + val {get = varIndex : Var.t -> int, set = setVarIndex, ...} = + Property.getSetOnce (Var.plist, + Property.initRaise ("varIndex", Var.layout)) + val setVarIndex = + let + val c = Counter.generator 0 + in + fn x => setVarIndex (x, c ()) + end (* Keep track of the replacements of variables. *) val {get = replace: Var.t -> Var.t option, set = setReplace, ...} = Property.getSetOnce (Var.plist, Property.initConst NONE) @@ -63,27 +70,21 @@ val a0 = arg 0 val a1 = arg 1 in - (* What we really want is a total orderning on - * variables. Since we don't have one, we just use - * the total ordering on hashes, which means that - * we may miss a few cse's but we won't be wrong. - *) - if Var.hash a0 <= Var.hash a1 + if varIndex a0 >= varIndex a1 then (a0, a1) else (a1, a0) end - datatype z = datatype Prim.Name.t in if Prim.isCommutative prim then doit (Vector.new2 (canon2 ())) else - if (case Prim.name prim of - IntInf_add => true - | IntInf_andb => true - | IntInf_gcd => true - | IntInf_mul => true - | IntInf_orb => true - | IntInf_xorb => true + if (case prim of + Prim.IntInf_add => true + | Prim.IntInf_andb => true + | Prim.IntInf_gcd => true + | Prim.IntInf_mul => true + | Prim.IntInf_orb => true + | Prim.IntInf_xorb => true | _ => false) then let @@ -99,30 +100,75 @@ | _ => e (* Keep a hash table of canonicalized Exps that are in scope. *) - val table: {hash: word, exp: Exp.t, var: Var.t} HashSet.t = - HashSet.new {hash = #hash} - fun lookup (var, exp, hash) = - HashSet.lookupOrInsert - (table, hash, - fn {exp = exp', ...} => Exp.equals (exp, exp'), - fn () => {exp = exp, - hash = hash, - var = var}) + val table: (Exp.t, Var.t) HashTable.t = + HashTable.new {hash = Exp.hash, equals = Exp.equals} + fun lookup (var, exp) = + HashTable.lookupOrInsert + (table, exp, fn () => var) - (* All of the globals are in scope, and never go out of scope. *) - (* The hash-cons'ing of globals in ConstantPropagation ensures - * that each global is unique. - *) - val _ = - Vector.foreach - (globals, fn Statement.T {var, exp, ...} => + fun doitStatements (statements, remove) = + Vector.keepAllMap + (statements, + fn Statement.T {var, ty, exp} => let val exp = canon exp - val _ = lookup (valOf var, exp, Exp.hash exp) + fun keep () = SOME (Statement.T {var = var, + ty = ty, + exp = exp}) in - () + case var of + NONE => keep () + | SOME var => + let + val _ = setVarIndex var + fun replace var' = + (setReplace (var, SOME var'); NONE) + fun doit () = + let + val var' = lookup (var, exp) + in + if Var.equals(var, var') + then (List.push (remove, (exp, var')) + ; keep ()) + else replace var' + end + in + case exp of + PrimApp ({args, prim, ...}) => + let + fun arg () = Vector.first args + fun knownLength var' = + let + val _ = setLength (var, SOME var') + in + keep () + end + fun conv () = + case getLength (arg ()) of + NONE => keep () + | SOME var' => knownLength var' + fun length () = + case getLength (arg ()) of + NONE => doit () + | SOME var' => replace var' + in + case prim of + Prim.Array_alloc _ => knownLength (arg ()) + | Prim.Array_length => length () + | Prim.Array_toArray => conv () + | Prim.Array_toVector => conv () + | Prim.Vector_length => length () + | _ => if Prim.isFunctional prim + then doit () + else keep () + end + | _ => doit () + end end) + (* All of the globals are in scope, and never go out of scope. *) + val globals = doitStatements (globals, ref []) + fun doitTree tree = let val blocks = ref [] @@ -153,132 +199,24 @@ val _ = List.foreach (!add, fn (var, exp) => let - val hash = Exp.hash exp - val elem as {var = var', ...} = lookup (var, exp, hash) + val var' = lookup (var, exp) val _ = if Var.equals(var, var') - then List.push (remove, elem) + then List.push (remove, (exp, var')) else () in () end) val _ = diag "added" - + val _ = + Vector.foreach + (args, fn (var, _) => setVarIndex var) val statements = - Vector.keepAllMap - (statements, - fn Statement.T {var, ty, exp} => - let - val exp = canon exp - fun keep () = SOME (Statement.T {var = var, - ty = ty, - exp = exp}) - in - case var of - NONE => keep () - | SOME var => - let - fun replace var' = - (setReplace (var, SOME var'); NONE) - fun doit () = - let - val hash = Exp.hash exp - val elem as {var = var', ...} = - lookup (var, exp, hash) - in - if Var.equals(var, var') - then (List.push (remove, elem) - ; keep ()) - else replace var' - end - in - case exp of - PrimApp ({args, prim, ...}) => - let - fun arg () = Vector.sub (args, 0) - fun knownLength var' = - let - val _ = setLength (var, SOME var') - in - keep () - end - fun conv () = - case getLength (arg ()) of - NONE => keep () - | SOME var' => knownLength var' - fun length () = - case getLength (arg ()) of - NONE => doit () - | SOME var' => replace var' - datatype z = datatype Prim.Name.t - in - case Prim.name prim of - Array_array => knownLength (arg ()) - | Array_length => length () - | Array_toVector => conv () - | Vector_length => length () - | _ => if Prim.isFunctional prim - then doit () - else keep () - end - | _ => doit () - end - end) + doitStatements (statements, remove) val _ = diag "statements" val transfer = Transfer.replaceVar (transfer, canonVar) val transfer = case transfer of - Arith {prim, args, overflow, success, ...} => - let - val {args = succArgs, - inDeg = succInDeg, - add = succAdd, ...} = - labelInfo success - val {inDeg = overInDeg, - add = overAdd, ...} = - labelInfo overflow - val exp = canon (PrimApp {prim = prim, - targs = Vector.new0 (), - args = args}) - val hash = Exp.hash exp - in - case HashSet.peek - (table, hash, - fn {exp = exp', ...} => Exp.equals (exp, exp')) of - SOME {var, ...} => - if overflowVar var - then Goto {dst = overflow, - args = Vector.new0 ()} - else (if !succInDeg = 1 - then let - val (var', _) = - Vector.sub (succArgs, 0) - in - setReplace (var', SOME var) - end - else () - ; Goto {dst = success, - args = Vector.new1 var}) - | NONE => (if !succInDeg = 1 - then let - val (var, _) = - Vector.sub (succArgs, 0) - in - List.push - (succAdd, (var, exp)) - end - else () ; - if !overInDeg = 1 - then let - val var = Var.newNoname () - val _ = setOverflowVar (var, true) - in - List.push - (overAdd, (var, exp)) - end - else () ; - transfer) - end - | Goto {dst, args} => + Goto {dst, args} => let val {args = args', inDeg, ...} = labelInfo dst in @@ -303,15 +241,15 @@ let open Layout in display (seq [str "remove: ", - List.layout (fn {var,exp,...} => + List.layout (fn (exp, var) => seq [Var.layout var, str ": ", Exp.layout exp]) (!remove)]) end) val _ = List.foreach - (!remove, fn {var, hash, ...} => - HashSet.remove - (table, hash, fn {var = var', ...} => + (!remove, fn (exp, var) => + HashTable.removeWhen + (table, exp, fn var' => Var.equals (var, var'))) val _ = diag "removed" in @@ -344,6 +282,9 @@ Function.dest f val _ = Vector.foreach + (args, fn (var, _) => setVarIndex var) + val _ = + Vector.foreach (blocks, fn Block.T {label, args, ...} => (setLabelInfo (label, {add = ref [], args = args, diff -Nru mlton-20130715/mlton/ssa/constant-propagation.fun mlton-20210117+dfsg/mlton/ssa/constant-propagation.fun --- mlton-20130715/mlton/ssa/constant-propagation.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/constant-propagation.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -27,19 +28,10 @@ structure Multi = Multi (S) structure Global = Global (S) -structure Type = - struct - open Type - - fun isSmall t = - case dest t of - Array _ => false - | Datatype _ => false - | Ref t => isSmall t - | Tuple ts => Vector.forall (ts, isSmall) - | Vector _ => false - | _ => true - end +structure Graph = DirectedGraph +structure Node = Graph.Node +structure Size = TwoPointLattice (val bottom = "small" + val top = "large") structure Sconst = Const open Exp Transfer @@ -57,8 +49,8 @@ coercedTo: t list ref} and const = Const of Const.t - | Undefined (* no possible value *) - | Unknown (* many possible values *) + | Undefined (* no possible value *) + | Unknown (* many possible values *) fun layout (T {const, ...}) = layoutConst (!const) and layoutConst c = @@ -277,6 +269,109 @@ ; coerce {from = c', to = c})) arg end + structure Raw = + struct + datatype t = T of {coercedTo: t list ref, + raw: raw ref} + and raw = + Raw of bool + | Undefined (* no possible value *) + | Unknown (* many possible values *) + + fun layout (T {raw, ...}) = layoutRaw (!raw) + and layoutRaw r = + let + open Layout + in + case r of + Raw b => Bool.layout b + | Undefined => str "undefined raw" + | Unknown => str "unknown raw" + end + + fun new r = T {coercedTo = ref [], + raw = ref r} + + fun equals (T {raw = r1, ...}, T {raw = r2, ...}) = r1 = r2 + + val equals = + Trace.trace2 + ("ConstantPropagation.Value.Raw.equals", + layout, layout, Bool.layout) + equals + + val raw = new o Raw + + fun undefined () = new Undefined + fun unknown () = new Unknown + + fun makeUnknown (T {coercedTo, raw}): unit = + case !raw of + Unknown => () + | _ => (raw := Unknown + ; List.foreach (!coercedTo, makeUnknown) + ; coercedTo := []) + + val makeUnknown = + Trace.trace + ("ConstantPropagation.Value.Raw.makeUnknown", + layout, Unit.layout) + makeUnknown + + fun send (r: t, r': raw): unit = + let + fun loop (r as T {coercedTo, raw}) = + case (r', !raw) of + (_, Unknown) => () + | (_, Undefined) => (raw := r' + ; List.foreach (!coercedTo, loop)) + | (Raw b', Raw b'') => + if b' = b'' + then () + else makeUnknown r + | _ => makeUnknown r + in + loop r + end + + val send = + Trace.trace2 + ("ConstantPropagation.Value.Raw.send", + layout, layoutRaw, Unit.layout) + send + + fun coerce {from = from as T {coercedTo, raw}, to: t}: unit = + if equals (from, to) + then () + else + let + fun push () = List.push (coercedTo, to) + in + case !raw of + r as Raw _ => (push (); send (to, r)) + | Undefined => push () + | Unknown => makeUnknown to + end + + val coerce = + Trace.trace + ("ConstantPropagation.Value.Raw.coerce", + fn {from, to} => Layout.record [("from", layout from), + ("to", layout to)], + Unit.layout) + coerce + + fun unify (r, r') = + (coerce {from = r, to = r'} + ; coerce {from = r', to = r}) + + val unify = + Trace.trace2 + ("ConstantPropagation.Value.Raw.unify", + layout, layout, Unit.layout) + unify + end + structure Set = DisjointSet structure Unique = UniqueId () @@ -287,15 +382,16 @@ and value = Array of {birth: unit Birth.t, elt: t, - length: t} - | Const of Const.t - | Datatype of data - | Ref of {arg: t, - birth: {init: t} Birth.t} - | Tuple of t vector - | Vector of {elt: t, - length: t} - | Weak of t + length: t, + raw: Raw.t} + | Const of Const.t + | Datatype of data + | Ref of {arg: t, + birth: {init: t} Birth.t} + | Tuple of t vector + | Vector of {elt: t, + length: t} + | Weak of t and data = Data of {coercedTo: data list ref, filters: {args: t vector, @@ -305,8 +401,8 @@ ConApp of {args: t vector, con: Con.t, uniq: Unique.t} - | Undefined - | Unknown + | Undefined + | Unknown local fun make sel (T s) = sel (Set.! s) @@ -314,24 +410,32 @@ val value = make #value val ty = make #ty end + fun deConst v = + case value v of + Const (Const.T {const, ...}) => + (case !const of + Const.Const c => SOME c + | _ => NONE) + | _ => NONE local open Layout in fun layout v = case value v of - Array {birth, elt, length, ...} => - seq [str "array", tuple [Birth.layout birth, - layout length, - layout elt]] + Array {birth, elt, length, raw, ...} => + seq [str "array ", tuple [Birth.layout birth, + layout length, + layout elt, + Raw.layout raw]] | Const c => Const.layout c | Datatype d => layoutData d | Ref {arg, birth, ...} => seq [str "ref ", tuple [layout arg, Birth.layout birth]] | Tuple vs => Vector.layout layout vs - | Vector {elt, length, ...} => seq [str "vector ", - tuple [layout elt, - layout length]] + | Vector {elt, length, ...} => + seq [str "vector ", tuple [layout elt, + layout length]] | Weak v => seq [str "weak ", layout v] and layoutData (Data {value, ...}) = case !value of @@ -351,36 +455,35 @@ layout, layout, Bool.layout) equals - val globalsInfo = Trace.info "ConstantPropagation.Value.globals" - val globalInfo = Trace.info "ConstantPropagation.Value.global" - fun globals arg: (Var.t * Type.t) vector option = - Trace.traceInfo - (globalsInfo, + Trace.trace + ("ConstantPropagation.Value.globals", (Vector.layout layout) o #1, - Option.layout (Vector.layout - (Layout.tuple2 (Var.layout, Type.layout))), - Trace.assertTrue) - (fn (vs: t vector, newGlobal) => + Option.layout (Vector.layout (Var.layout o #1))) + (fn (vs: t vector, isSmallType, newGlobal) => Exn.withEscape (fn escape => SOME (Vector.map (vs, fn v => - case global (v, newGlobal) of + case global (v, isSmallType, newGlobal) of NONE => escape NONE | SOME g => g)))) arg and global arg: (Var.t * Type.t) option = - Trace.traceInfo (globalInfo, - layout o #1, - Option.layout (Var.layout o #1), - Trace.assertTrue) - (fn (v as T s, newGlobal) => + Trace.trace + ("ConstantPropagation.Value.global", + layout o #1, + Option.layout (Var.layout o #1)) + (fn (v as T s, isSmallType, newGlobal) => let val {global = r, ty, value} = Set.! s in case !r of No => NONE | Yes g => SOME (g, ty) | NotComputed => let + val global = fn v => + global (v, isSmallType, newGlobal) + val globals = fn vs => + globals (vs, isSmallType, newGlobal) (* avoid globalizing circular abstract values *) val _ = r := No fun yes e = Yes (newGlobal (ty, e)) @@ -389,12 +492,12 @@ primApp: {targs: Type.t vector, args: Var.t vector} -> Exp.t, targ: Type.t) = - case !place of - Place.One (One.T {global = glob, extra, ...}) => + case (!place, isSmallType targ) of + (Place.One (One.T {global = glob, extra, ...}), true) => let val init = makeInit extra in - case global (init, newGlobal) of + case global init of SOME (x, _) => Yes (case !glob of @@ -408,19 +511,24 @@ in glob := SOME g; g end - | SOME g => g) + | SOME g => g) | _ => No end | _ => No val g = case value of - Array {birth, length, ...} => + Array {birth, length, raw = Raw.T {raw, ...}, ...} => + if !Control.globalizeArrays then unary (birth, fn _ => length, fn {args, targs} => - Exp.PrimApp {args = args, - prim = Prim.array, - targs = targs}, + case !raw of + Raw.Raw raw => + Exp.PrimApp {args = args, + prim = Prim.Array_alloc {raw = raw}, + targs = targs} + | _ => Error.bug "ConstantPropagation.Value.global: Array, raw", Type.deArray ty) + else No | Const (Const.T {const, ...}) => (case !const of Const.Const c => yes (Exp.Const c) @@ -428,7 +536,7 @@ | Datatype (Data {value, ...}) => (case !value of ConApp {args, con, ...} => - (case globals (args, newGlobal) of + (case globals args of NONE => No | SOME args => yes (Exp.ConApp @@ -436,22 +544,55 @@ args = Vector.map (args, #1)})) | _ => No) | Ref {birth, ...} => + if !Control.globalizeRefs then unary (birth, fn {init} => init, fn {args, targs} => Exp.PrimApp {args = args, - prim = Prim.reff, + prim = Prim.Ref_ref, targs = targs}, Type.deRef ty) + else No | Tuple vs => - (case globals (vs, newGlobal) of + (case globals vs of NONE => No | SOME xts => yes (Exp.Tuple (Vector.map (xts, #1)))) - | Vector _ => No + | Vector {elt, length} => + (case Option.map (deConst length, S.Const.deWord) of + NONE => No + | SOME length => + let + val length = WordX.toInt length + val eltTy = Type.deVector ty + fun mkVec args = + yes (Exp.PrimApp + {args = args, + prim = Prim.Vector_vector, + targs = Vector.new1 eltTy}) + fun mkConst (ws, elts) = + yes (Exp.Const + (S.Const.wordVector + (WordXVector.fromList + ({elementSize = ws}, elts)))) + in + case (Option.map (deConst elt, S.Const.deWordOpt), + global elt) of + (SOME (SOME w), _) => + mkConst (Type.deWord eltTy, + List.new (length, w)) + | (_, SOME (x, _)) => + mkVec (Vector.new (length, x)) + | _ => + if length = 0 + then case Type.deWordOpt eltTy of + SOME ws => mkConst (ws, []) + | NONE => mkVec (Vector.new0 ()) + else No + end) | Weak _ => No val _ = r := g in - global (v, newGlobal) + global v end end) arg @@ -469,8 +610,6 @@ in new (Const c', Type.ofConst c) end - val zero = WordSize.memoize (fn s => const (S.Const.word (WordX.zero s))) - fun constToEltLength (c, err) = let val v = @@ -491,8 +630,7 @@ else const' (Const.unknown (), eltTy) end val length = - const (Sconst.Word (WordX.fromIntInf (IntInf.fromInt length, - WordSize.seqIndex ()))) + const (Sconst.Word (WordX.fromInt (length, WordSize.seqIndex ()))) in {elt = elt, length = length} end @@ -517,14 +655,24 @@ in val dearray = make ("ConstantPropagation.Value.dearray", #elt) val arrayLength = make ("ConstantPropagation.Value.arrayLength", #length) val arrayBirth = make ("ConstantPropagation.Value.arrayBirth", #birth) + val arrayRaw = make ("ConstantPropagation.Value.arrayRaw", #raw) end + fun arrayFromArray (T s: t): t = + let + val {value, ty, ...} = Set.! s + in case value of + Array {elt, length, ...} => + new (Array {birth = Birth.unknown (), elt = elt, length = length, raw = Raw.raw false}, ty) + | _ => Error.bug "ConstantPropagation.Value.arrayFromArray" + end + fun vectorFromArray (T s: t): t = let val {value, ty, ...} = Set.! s in case value of Array {elt, length, ...} => - new (Vector {elt = elt, length = length}, ty) + new (Vector {elt = elt, length = length}, Type.vector (Type.deArray ty)) | _ => Error.bug "ConstantPropagation.Value.vectorFromArray" end @@ -563,7 +711,7 @@ (* The extra birth is because of let-style polymorphism. * arrayBirth is really the same as refBirth. *) - fun make (const, data, refBirth, arrayBirth) = + fun make (const, data, refBirth, arrayBirth, raw) = let fun loop (t: Type.t): t = new @@ -571,14 +719,15 @@ Type.Array t => Array {birth = arrayBirth (), elt = loop t, - length = loop (Type.word (WordSize.seqIndex ()))} + length = loop (Type.word (WordSize.seqIndex ())), + raw = raw ()} | Type.Datatype _ => Datatype (data ()) | Type.Ref t => Ref {arg = loop t, birth = refBirth ()} | Type.Tuple ts => Tuple (Vector.map (ts, loop)) - | Type.Vector t => Vector - {elt = loop t, - length = loop (Type.word (WordSize.seqIndex ()))} + | Type.Vector t => + Vector {elt = loop t, + length = loop (Type.word (WordSize.seqIndex ()))} | Type.Weak t => Weak (loop t) | _ => Const (const ()), t) @@ -589,12 +738,14 @@ make (Const.undefined, Data.undefined, Birth.undefined, - Birth.undefined) + Birth.undefined, + Raw.undefined) val unknown = make (Const.unknown, Data.unknown, Birth.unknown, - Birth.unknown) + Birth.unknown, + Raw.unknown) end fun select {tuple, offset, resultType = _} = @@ -701,14 +852,14 @@ | ConApp {con = con', uniq = uniq', ...} => if Unique.equals (uniq, uniq') orelse (Con.equals (con, con') - andalso 0 = Vector.length args) + andalso Vector.isEmpty args) then () else makeDataUnknown d) arg in loop d end) arg and coerces {froms: Value.t vector, tos: Value.t vector} = Vector.foreach2 (froms, tos, fn (from, to) => - coerce {from = from, to = to}) + coerce {from = from, to = to}) and coerce arg = traceCoerce (fn {from, to} => @@ -730,11 +881,12 @@ | (Ref {birth, arg}, Ref {birth = b', arg = a'}) => (Birth.coerce {from = birth, to = b'} ; unify (arg, a')) - | (Array {birth = b, length = n, elt = x}, - Array {birth = b', length = n', elt = x'}) => + | (Array {birth = b, length = n, elt = x, raw = r}, + Array {birth = b', length = n', elt = x', raw = r'}) => (Birth.coerce {from = b, to = b'} ; coerce {from = n, to = n'} - ; unify (x, x')) + ; unify (x, x') + ; Raw.coerce {from = r, to = r'}) | (Vector {length = n, elt = x}, Vector {length = n', elt = x'}) => (coerce {from = n, to = n'} @@ -759,6 +911,11 @@ let val {value, ...} = Set.! s val {value = value', ...} = Set.! s' + fun error () = + Error.bug + (concat ["ConstantPropagation.Value.unify: strange: value: ", + Layout.toString (Value.layout (T s)), + " value': ", Layout.toString (Value.layout (T s'))]) in Set.union (s, s') ; case (value, value') of (Const c, Const c') => Const.unify (c, c') @@ -766,18 +923,19 @@ | (Ref {birth, arg}, Ref {birth = b', arg = a'}) => (Birth.unify (birth, b') ; unify (arg, a')) - | (Array {birth = b, length = n, elt = x}, - Array {birth = b', length = n', elt = x'}) => + | (Array {birth = b, length = n, elt = x, raw = r}, + Array {birth = b', length = n', elt = x', raw = r'}) => (Birth.unify (b, b') ; unify (n, n') - ; unify (x, x')) + ; unify (x, x') + ; Raw.unify (r, r')) | (Vector {length = n, elt = x}, Vector {length = n', elt = x'}) => (unify (n, n') ; unify (x, x')) | (Tuple vs, Tuple vs') => Vector.foreach2 (vs, vs', unify) | (Weak v, Weak v') => unify (v, v') - | _ => Error.bug "ConstantPropagation.Value.unify: strange" + | _ => error () end and unifyData (d, d') = (coerceData {from = d, to = d'} @@ -829,8 +987,6 @@ fun bear z = case resultVar of SOME resultVar => if once resultVar - andalso - Type.isSmall resultType then Birth.here z else Birth.unknown () | _ => Error.bug "ConstantPropagation.Value.primApp.bear" @@ -838,28 +994,58 @@ (coerce {from = v, to = dearray a} ; unit ()) fun arg i = Vector.sub (args, i) - datatype z = datatype Prim.Name.t - fun array (length, birth) = + fun array (raw, length, birth) = let val a = fromType resultType val _ = coerce {from = length, to = arrayLength a} val _ = Birth.coerce {from = birth, to = arrayBirth a} + val _ = Raw.coerce {from = Raw.raw raw, to = arrayRaw a} in a end + fun vector () = + let + val v = fromType resultType + val l = + (const o S.Const.word o WordX.fromInt) + (Vector.length args, WordSize.seqIndex ()) + val _ = coerce {from = l, to = vectorLength v} + val _ = + Vector.foreach + (args, fn arg => + coerce {from = arg, to = devector v}) + in + v + end in - case Prim.name prim of - Array_array => array (arg 0, bear ()) - | Array_array0Const => - array (zero (WordSize.seqIndex ()), Birth.here ()) - | Array_length => arrayLength (arg 0) - | Array_sub => dearray (arg 0) - | Array_toVector => vectorFromArray (arg 0) - | Array_update => update (arg 0, arg 2) - | Ref_assign => + case prim of + Prim.Array_alloc {raw} => array (raw, arg 0, bear ()) + | Prim.Array_array => + let + val l = + (const o S.Const.word o WordX.fromInt) + (Vector.length args, WordSize.seqIndex ()) + val a = array (false, l, bear ()) + val _ = + Vector.foreach + (args, fn arg => + coerce {from = arg, to = dearray a}) + in + a + end + | Prim.Array_copyArray => + update (arg 0, dearray (arg 2)) + | Prim.Array_copyVector => + update (arg 0, devector (arg 2)) + | Prim.Array_length => arrayLength (arg 0) + | Prim.Array_sub => dearray (arg 0) + | Prim.Array_toArray => arrayFromArray (arg 0) + | Prim.Array_toVector => vectorFromArray (arg 0) + | Prim.Array_update => update (arg 0, arg 2) + | Prim.Ref_assign => (coerce {from = arg 1, to = deref (arg 0)}; unit ()) - | Ref_deref => deref (arg 0) - | Ref_ref => + | Prim.Ref_deref => deref (arg 0) + | Prim.Ref_ref => let val v = arg 0 val r = fromType resultType @@ -869,10 +1055,11 @@ in r end - | Vector_length => vectorLength (arg 0) - | Vector_sub => devector (arg 0) - | Weak_get => deweak (arg 0) - | Weak_new => + | Prim.Vector_length => vectorLength (arg 0) + | Prim.Vector_sub => devector (arg 0) + | Prim.Vector_vector => vector () + | Prim.Weak_get => deweak (arg 0) + | Prim.Weak_new => let val w = fromType resultType val _ = coerce {from = arg 0, to = deweak w} @@ -882,7 +1069,7 @@ | _ => (if Prim.maySideEffect prim then Vector.foreach (args, sideEffect) else () - ; unknown resultType) + ; unknown resultType) end fun filter (variant, con, args) = case value variant of @@ -941,14 +1128,251 @@ str " ", Value.layout (value x)]))) end) + + fun mkIsSmallType n = + let + datatype t = datatype Type.dest + in + case n of + 0 => {isSmallType = fn _ => false, + destroyIsSmallType = fn () => ()} + | 1 => let + val {get: Type.t -> bool, + destroy} = + Property.destGet + (Type.plist, + Property.initRec + (fn (t, get) => + case Type.dest t of + Array _ => false + | CPointer => true + | Datatype _ => false + | IntInf => !Control.globalizeSmallIntInf + | Real _ => true + | Ref t => get t + | Thread => false + | Tuple ts => Vector.forall (ts, get) + | Vector _ => false + | Weak _ => true + | Word _ => true)) + in + {isSmallType = get, + destroyIsSmallType = destroy} + end + | 2 => let + val {get = getTycon: Tycon.t -> bool, + set = setTycon, ...} = + Property.getSetOnce + (Tycon.plist, + Property.initRaise + ("ConstantPropagation.mkIsSmallType(2).getTycon", + Tycon.layout)) + val () = + Vector.foreach + (datatypes, fn Datatype.T {tycon, cons} => + setTycon + (tycon, + Vector.forall + (cons, fn {args, ...} => + Vector.isEmpty args))) + val {get: Type.t -> bool, + destroy} = + Property.destGet + (Type.plist, + Property.initRec + (fn (t, get) => + case Type.dest t of + Array _ => false + | CPointer => true + | Datatype tc => getTycon tc + | IntInf => !Control.globalizeSmallIntInf + | Real _ => true + | Ref t => get t + | Thread => false + | Tuple ts => Vector.forall (ts, get) + | Vector _ => false + | Weak _ => true + | Word _ => true)) + in + {isSmallType = get, + destroyIsSmallType = destroy} + end + | 3 => let + val {isSmallType, destroyIsSmallType} = + mkIsSmallType 1 + val {get = getTycon: Tycon.t -> bool, + set = setTycon, ...} = + Property.getSetOnce + (Tycon.plist, + Property.initRaise + ("ConstantPropagation.mkIsSmallType(3).getTycon", + Tycon.layout)) + val () = + Vector.foreach + (datatypes, fn Datatype.T {tycon, cons} => + setTycon + (tycon, + Vector.forall + (cons, fn {args, ...} => + Vector.forall + (args, isSmallType)))) + val () = destroyIsSmallType () + val {get: Type.t -> bool, + destroy} = + Property.destGet + (Type.plist, + Property.initRec + (fn (t, get) => + case Type.dest t of + Array _ => false + | CPointer => true + | Datatype tc => getTycon tc + | IntInf => !Control.globalizeSmallIntInf + | Real _ => true + | Ref t => get t + | Thread => false + | Tuple ts => Vector.forall (ts, get) + | Vector _ => false + | Weak _ => true + | Word _ => true)) + in + {isSmallType = get, + destroyIsSmallType = destroy} + end + | 4 => let + val {get = tyconSize: Tycon.t -> Size.t, ...} = + Property.get (Tycon.plist, Property.initFun (fn _ => Size.new ())) + (* Force (mutually) recursive datatypes to top. *) + val {get = nodeTycon: unit Node.t -> Tycon.t, + set = setNodeTycon, ...} = + Property.getSetOnce + (Node.plist, Property.initRaise ("nodeTycon", Node.layout)) + val {get = tyconNode: Tycon.t -> unit Node.t, + set = setTyconNode, ...} = + Property.getSetOnce + (Tycon.plist, Property.initRaise ("tyconNode", Tycon.layout)) + val graph = Graph.new () + val () = + Vector.foreach + (datatypes, fn Datatype.T {tycon, ...} => + let + val node = Graph.newNode graph + val () = setTyconNode (tycon, node) + val () = setNodeTycon (node, tycon) + in + () + end) + val () = + Vector.foreach + (datatypes, fn Datatype.T {cons, tycon} => + let + val n = tyconNode tycon + val {get = dependsOn, destroy = destroyDependsOn} = + Property.destGet + (Type.plist, + Property.initRec + (fn (t, dependsOn) => + case Type.dest t of + Array t => dependsOn t + | Datatype tc => + (ignore o Graph.addEdge) + (graph, {from = n, to = tyconNode tc}) + | Ref t => dependsOn t + | Tuple ts => Vector.foreach (ts, dependsOn) + | Vector t => dependsOn t + | _ => ())) + val () = + Vector.foreach + (cons, fn {args, ...} => + Vector.foreach (args, dependsOn)) + val () = destroyDependsOn () + in + () + end) + val () = + List.foreach + (Graph.stronglyConnectedComponents graph, fn ns => + let + fun doit () = + List.foreach + (ns, fn n => + Size.makeTop (tyconSize (nodeTycon n))) + in + case ns of + [n] => if Node.hasEdge {from = n, to = n} + then doit () + else () + | _ => doit () + end) + val {get = typeSize: Type.t -> Size.t, + destroy = destroyTypeSize, ...} = + Property.destGet + (Type.plist, + Property.initRec + (fn (t, typeSize) => + let + val s = Size.new () + fun dependsOn (t: Type.t): unit = + Size.<= (typeSize t, s) + val () = + case Type.dest t of + Array _ => Size.makeTop s + | CPointer => () + | Datatype tc => Size.<= (tyconSize tc, s) + | IntInf => if !Control.globalizeSmallIntInf + then () + else Size.makeTop s + | Real _ => () + | Ref t => dependsOn t + | Thread => Size.makeTop s + | Tuple ts => Vector.foreach (ts, dependsOn) + | Vector _ => Size.makeTop s + | Weak _ => () + | Word _ => () + in + s + end)) + val () = + Vector.foreach + (datatypes, fn Datatype.T {cons, tycon} => + let + val s = tyconSize tycon + fun dependsOn (t: Type.t): unit = Size.<= (typeSize t, s) + val () = + Vector.foreach + (cons, fn {args, ...} => + Vector.foreach (args, dependsOn)) + in + () + end) + in + {isSmallType = not o Size.isTop o typeSize, + destroyIsSmallType = destroyTypeSize} + end + | 9 => {isSmallType = fn _ => true, + destroyIsSmallType = fn () => ()} + | _ => Error.bug "ConstantPropagation.mkIsSmallType" + end + + val {isSmallType: Type.t -> bool, + destroyIsSmallType: unit -> unit} = + mkIsSmallType (!Control.globalizeSmallType) + (* Walk through the program * - removing declarations whose rhs is constant * - replacing variables whose value is constant with globals * - building up the global decs *) val {new = newGlobal, all = allGlobals} = Global.make () + fun maybeGlobal x = Value.global (value x, isSmallType, newGlobal) + val maybeGlobal = + Trace.trace + ("ConstantPropagation.maybeGlobal", + Var.layout, + Option.layout (Var.layout o #1)) + maybeGlobal fun replaceVar x = - case Value.global (value x, newGlobal) of + case maybeGlobal x of NONE => x | SOME (g, _) => g fun doitStatement (Statement.T {var, ty, exp}) = @@ -961,7 +1385,7 @@ case var of NONE => keep () | SOME var => - (case (Value.global (value var, newGlobal), exp) of + (case (maybeGlobal var, exp) of (NONE, _) => keep () | (SOME _, PrimApp {prim, ...}) => if Prim.maySideEffect prim @@ -991,12 +1415,26 @@ end val functions = List.revMap (functions, doitFunction) val globals = Vector.keepAllMap (globals, doitStatement) - val globals = Vector.concat [allGlobals (), globals] + val newGlobals = allGlobals () + val _ = + Control.diagnostics + (fn display => + let open Layout + in + display (seq [str "\n\nNew Globals (", + Int.layout (Vector.length newGlobals), + str "):"]) + ; (Vector.foreach + (newGlobals, display o Statement.layout)) + end) + + val globals = Vector.concat [newGlobals, globals] val shrink = shrinkFunction {globals = globals} val program = Program.T {datatypes = datatypes, globals = globals, functions = List.revMap (functions, shrink), main = main} + val _ = destroyIsSmallType () val _ = Program.clearTop program in program diff -Nru mlton-20130715/mlton/ssa/contify.fun mlton-20210117+dfsg/mlton/ssa/contify.fun --- mlton-20130715/mlton/ssa/contify.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/contify.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/deep-flatten.fun mlton-20210117+dfsg/mlton/ssa/deep-flatten.fun --- mlton-20130715/mlton/ssa/deep-flatten.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/deep-flatten.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017,2019-2020 Matthew Fluet. * Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -132,7 +132,7 @@ end val (t, _, ac) = loop (t, offset, []) in - (t, ac) + (t, List.rev ac) end val fillInRoots = @@ -380,7 +380,7 @@ let val {args = a, con, ...} = Equatable.value e in - if Prod.isMutable a orelse ObjectCon.isVector con + if Prod.someIsMutable a orelse ObjectCon.isSequence con then unify (from, to) else case !f' of @@ -399,17 +399,17 @@ fun mayFlatten {args, con}: bool = (* Don't flatten constructors, since they are part of a sum type. * Don't flatten unit. - * Don't flatten vectors (of course their components can be + * Don't flatten sequences (of course their components can be * flattened). * Don't flatten objects with mutable fields, since sharing must be * preserved. *) not (Prod.isEmpty args) - andalso not (Prod.isMutable args) + andalso Prod.allAreImmutable args andalso (case con of ObjectCon.Con _ => false - | ObjectCon.Tuple => true - | ObjectCon.Vector => false) + | ObjectCon.Sequence => false + | ObjectCon.Tuple => true) fun objectFields {args, con} = let @@ -420,7 +420,7 @@ if (case con of ObjectCon.Con _ => true | ObjectCon.Tuple => true - | ObjectCon.Vector => false) + | ObjectCon.Sequence => false) then Vector.foreach (Prod.dest args, fn {elt, isMutable} => if isMutable then () @@ -607,7 +607,7 @@ (conValue c, fn () => makeValue (doit ()))) | Tuple => doit () - | Vector => doit () + | Sequence => doit () end | Weak t => (case makeTypeValue t of @@ -670,7 +670,6 @@ | Make _ => Value.weak v fun arg i = Vector.sub (args, i) fun result () = typeValue resultType - datatype z = datatype Prim.Name.t fun dontFlatten () = (Vector.foreach (args, Value.dontFlatten) ; result ()) @@ -679,8 +678,23 @@ ; Value.dontFlatten (arg 0) ; result ()) in - case Prim.name prim of - Array_toVector => + case prim of + Prim.Array_toArray => + let + val res = result () + val () = + case (Value.deObject (arg 0), Value.deObject res) of + (NONE, NONE) => () + | (SOME {args = a, ...}, SOME {args = a', ...}) => + Vector.foreach2 + (Prod.dest a, Prod.dest a', + fn ({elt = v, ...}, {elt = v', ...}) => + Value.unify (v, v')) + | _ => Error.bug "DeepFlatten.primApp: Array_toArray" + in + res + end + | Prim.Array_toVector => let val res = result () val () = @@ -695,17 +709,17 @@ in res end - | FFI _ => + | Prim.CFunction _ => (* Some imports, like Real64.modf, take ref cells that can not * be flattened. *) dontFlatten () - | MLton_eq => equal () - | MLton_equal => equal () - | MLton_size => dontFlatten () - | MLton_share => dontFlatten () - | Weak_get => deWeak (arg 0) - | Weak_new => + | Prim.MLton_eq => equal () + | Prim.MLton_equal => equal () + | Prim.MLton_size => dontFlatten () + | Prim.MLton_share => dontFlatten () + | Prim.Weak_get => deWeak (arg 0) + | Prim.Weak_new => let val a = arg 0 in (Value.dontFlatten a; weak a) end @@ -714,7 +728,7 @@ fun base b = case b of Base.Object obj => obj - | Base.VectorSub {vector, ...} => vector + | Base.SequenceSub {sequence, ...} => sequence fun select {base, offset} = let datatype z = datatype Value.t @@ -732,6 +746,20 @@ coerce {from = value, to = select {base = base, offset = offset}} fun const c = typeValue (Type.ofConst c) + fun sequence {args, resultType} = + let + val v = typeValue resultType + val _ = + Vector.foreach + (args, fn args => + Vector.foreachi + (Prod.dest args, fn (offset, {elt, ...}) => + update {base = v, + offset = offset, + value = elt})) + in + v + end val {func, value = varValue, ...} = analyze {base = base, coerce = coerce, @@ -746,6 +774,7 @@ program = program, select = fn {base, offset, ...} => select {base = base, offset = offset}, + sequence = sequence, update = update, useFromTypeOnBinds = false} (* Don't flatten outermost part of formal parameters. *) @@ -957,6 +986,59 @@ ss end end) + | Sequence {args} => + (case var of + NONE => none () + | SOME var => + let + val v = varValue var + in + case Value.deObject v of + NONE => simple () + | SOME {args = expects, flat, ...} => + let + val z = + Vector.map + (args, fn args => + Vector.map2 + (args, Prod.dest expects, + fn (arg, {elt, ...}) => + let + val (vt, ss) = + coerceTree + {from = varTree arg, + to = Value.finalTree elt} + in + (vt, ss) + end)) + val () = simpleVarTree var + in + case !flat of + Flat => Error.bug "DeepFlatten.transformBind: Sequence, Flat" + | NotFlat => + let + val ty = Value.finalType v + val args = + Vector.map + (z, fn z => + Vector.fromList + (Vector.foldr + (z, [], fn ((vt, _), ac) => + VarTree.rootsOnto (vt, ac)))) + val obj = + Bind + {exp = Sequence {args = args}, + ty = ty, + var = SOME var} + in + Vector.foldr + (z, [obj], fn (z, ac) => + Vector.foldr + (z, ac, fn ((_, ss), ac) => + ss @ ac)) + end + end + end) | Var x => (Option.app (var, fn y => setVarTree (y, varTree x)) ; none ()) @@ -973,7 +1055,7 @@ val baseVar = case base of Base.Object x => x - | Base.VectorSub {vector = x, ...} => x + | Base.SequenceSub {sequence = x, ...} => x in case Value.deObject (varValue baseVar) of NONE => simple () diff -Nru mlton-20130715/mlton/ssa/direct-exp2.fun mlton-20210117+dfsg/mlton/ssa/direct-exp2.fun --- mlton-20130715/mlton/ssa/direct-exp2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/direct-exp2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,11 +15,7 @@ struct datatype t = - Arith of {prim: Type.t Prim.t, - args: t vector, - overflow: t, - ty: Type.t} - | Call of {func: Func.t, + Call of {func: Func.t, args: t vector, ty: Type.t} | Case of {cases: cases, @@ -66,7 +62,6 @@ body: t} vector | Word of WordSize.t * (WordX.t * t) vector -val arith = Arith val call = Call val casee = Case val conApp = ConApp @@ -84,7 +79,7 @@ fun tuple (r as {exps, ...}) = if 1 = Vector.length exps - then Vector.sub (exps, 0) + then Vector.first exps else Tuple r val var = Var @@ -127,10 +122,7 @@ in fun layout e : Layout.t = case e of - Arith {prim, args, overflow, ...} => - align [Prim.layoutApp (prim, args, layout), - seq [str "Overflow => ", layout overflow]] - | Call {func, args, ty} => + Call {func, args, ty} => seq [Func.layout func, str " ", layouts args, str ": ", Type.layout ty] | Case {cases, default, test, ...} => @@ -383,22 +375,7 @@ traceLinearizeLoop (fn (e: t, h: Handler.t, k: Cont.t) => case e of - Arith {prim, args, overflow, ty} => - loops - (args, h, fn xs => - let - val l = reify (k, ty) - val k = Cont.goto l - in - {statements = [], - transfer = - Transfer.Arith {prim = prim, - args = xs, - overflow = newLabel0 (overflow, h, k), - success = l, - ty = ty}} - end) - | Call {func, args, ty} => + Call {func, args, ty} => loops (args, h, fn xs => {statements = [], @@ -482,7 +459,7 @@ case Vector.length components of 0 => [] | 1 => [Statement.T - {var = SOME (Vector.sub (components, 0)), + {var = SOME (Vector.first components), ty = tupleTy, exp = Exp.Var tuple}] | _ => selects (tuple, tupleTy, components) @@ -548,7 +525,7 @@ Vector.new1 (Var (res, ty))) end | SOME ts => - if 0 = Vector.length ts + if Vector.isEmpty ts then (Vector.new0 (), Vector.new0 ()) else Error.bug diff -Nru mlton-20130715/mlton/ssa/direct-exp2.sig mlton-20210117+dfsg/mlton/ssa/direct-exp2.sig --- mlton-20130715/mlton/ssa/direct-exp2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/direct-exp2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -26,10 +26,6 @@ body: t} vector | Word of WordSize.t * (WordX.t * t) vector - val arith: {prim: Type.t Prim.t, - args: t vector, - overflow: t, - ty: Type.t} -> t (* For now, call always uses Handler.None. This means it should only * be used for functions that cannot raise. *) diff -Nru mlton-20130715/mlton/ssa/direct-exp.fun mlton-20210117+dfsg/mlton/ssa/direct-exp.fun --- mlton-20130715/mlton/ssa/direct-exp.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/direct-exp.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,10 +16,7 @@ struct datatype t = - Arith of {prim: Type.t Prim.t, - args: t vector, - overflow: t, - ty: Type.t} + Bug | Call of {func: Func.t, args: t vector, ty: Type.t} @@ -66,7 +64,6 @@ body: t} vector | Word of WordSize.t * (WordX.t * t) vector -val arith = Arith val call = Call val casee = Case val conApp = ConApp @@ -83,7 +80,7 @@ fun tuple (r as {exps, ...}) = if 1 = Vector.length exps - then Vector.sub (exps, 0) + then Vector.first exps else Tuple r val var = Var @@ -94,14 +91,16 @@ Runtime {args = args, prim = prim, ty = ty} + fun primApp () = + PrimApp {args = args, + prim = prim, + targs = targs, + ty = ty} in - case Prim.name prim of - Prim.Name.MLton_halt => runtime () - | Prim.Name.Thread_copyCurrent => runtime () - | _ => PrimApp {args = args, - prim = prim, - targs = targs, - ty = ty} + case prim of + Prim.MLton_bug => Seq (primApp (), Bug) + | Prim.Thread_copyCurrent => runtime () + | _ => primApp () end local @@ -112,7 +111,7 @@ end fun eq (e1, e2, ty) = - primApp {prim = Prim.eq, + primApp {prim = Prim.MLton_eq, targs = Vector.new1 ty, args = Vector.new2 (e1, e2), ty = Type.bool} @@ -126,9 +125,7 @@ in fun layout e : Layout.t = case e of - Arith {prim, args, overflow, ...} => - align [Prim.layoutApp (prim, args, layout), - seq [str "Overflow => ", layout overflow]] + Bug => str "bug" | Call {func, args, ty} => seq [Func.layout func, str " ", layouts args, str ": ", Type.layout ty] @@ -155,7 +152,7 @@ (seq [Con.layout con, Vector.layout (Var.layout o #1) args], body)) - | Word (_, v) => simple (v, WordX.layout) + | Word (_, v) => simple (v, fn w => WordX.layout (w, {suffix = true})) end, case default of NONE => empty @@ -179,12 +176,19 @@ seq [Var.layout var, str " = ", layout exp])), layout body) | Name _ => str "Name" - | PrimApp {args, prim, ...} => - Prim.layoutApp (prim, args, layout) + | PrimApp {args, prim, targs, ty} => + seq [Prim.layoutFull (prim, Type.layout), + Layout.list (Vector.toListMap (targs, Type.layout)), + str " ", + layouts args, + str ": ", Type.layout ty] | Profile e => ProfileExp.layout e | Raise e => seq [str "raise ", layout e] - | Runtime {args, prim, ...} => - Prim.layoutApp (prim, args, layout) + | Runtime {args, prim, ty} => + seq [Prim.layoutFull (prim, Type.layout), + str " ", + layouts args, + str ": ", Type.layout ty] | Select {tuple, offset, ...} => seq [str "#", str (Int.toString (1 + offset)), str " ", layout tuple] @@ -382,21 +386,8 @@ traceLinearizeLoop (fn (e: t, h: Handler.t, k: Cont.t) => case e of - Arith {prim, args, overflow, ty} => - loops - (args, h, fn xs => - let - val l = reify (k, ty) - val k = Cont.goto l - in - {statements = [], - transfer = - Transfer.Arith {prim = prim, - args = xs, - overflow = newLabel0 (overflow, h, k), - success = l, - ty = ty}} - end) + Bug => {statements = [], + transfer = Transfer.Bug} | Call {func, args, ty} => loops (args, h, fn xs => @@ -481,7 +472,7 @@ case Vector.length components of 0 => [] | 1 => [Statement.T - {var = SOME (Vector.sub (components, 0)), + {var = SOME (Vector.first components), ty = tupleTy, exp = Exp.Var tuple}] | _ => selects (tuple, tupleTy, components) @@ -547,7 +538,7 @@ Vector.new1 (Var (res, ty))) end | SOME ts => - if 0 = Vector.length ts + if Vector.isEmpty ts then (Vector.new0 (), Vector.new0 ()) else Error.bug diff -Nru mlton-20130715/mlton/ssa/direct-exp.sig mlton-20210117+dfsg/mlton/ssa/direct-exp.sig --- mlton-20130715/mlton/ssa/direct-exp.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/direct-exp.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -26,10 +26,6 @@ body: t} vector | Word of WordSize.t * (WordX.t * t) vector - val arith: {prim: Type.t Prim.t, - args: t vector, - overflow: t, - ty: Type.t} -> t (* For now, call always uses Handler.None. This means it should only * be used for functions that cannot raise. *) diff -Nru mlton-20130715/mlton/ssa/duplicate-globals.fun mlton-20210117+dfsg/mlton/ssa/duplicate-globals.fun --- mlton-20130715/mlton/ssa/duplicate-globals.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/duplicate-globals.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,148 @@ +(* Copyright (C) 2018 Jason Carr + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +(* + * Duplicate each global that appears in the program, once per usage in the program. + * Globals which refer to other globals are not duplicated recursively. + * + * The primary purpose of this pass is to support passes which could possibly use + * different types for different globals, currently SplitTypes, and so that these + * passes may be separately enabled. + *) + +functor DuplicateGlobals(S: SSA_TRANSFORM_STRUCTS): SSA_TRANSFORM = +struct + + open S + + fun transform (Program.T {datatypes, globals, functions, main}): Program.t = + let + val globalVars: (Var.t, Var.t list ref) HashTable.t = + HashTable.new {hash=Var.hash, equals=Var.equals} + val _ = Vector.foreach (globals, fn st => + let + val exp = Statement.exp st + val var = Statement.var st + fun duplicatable var = + ignore (HashTable.lookupOrInsert (globalVars, var, fn () => ref [])) + val _ = + case (var, exp) of + (SOME var, Exp.ConApp _) => duplicatable var + | (SOME var, Exp.PrimApp {prim, ...}) => + (case prim of + (* we might want to duplicate this due to the targ *) + Prim.MLton_bogus => duplicatable var + | Prim.Vector_vector => duplicatable var + | _ => ()) + | _ => () + in + () + end) + fun freshenIfGlobal (var: Var.t) = + case HashTable.peek (globalVars, var) of + NONE => var + | SOME vs => + let + val newVar = Var.new var + val _ = List.push (vs, newVar) + in + newVar + end + fun freshenVec (vars: Var.t vector) = Vector.map (vars, freshenIfGlobal) + + (* Rewrite all globals to a new version if they're in the table of valid globals *) + fun loopExp exp = + case exp of + Exp.ConApp {args, con} => Exp.ConApp {con=con, args=freshenVec args} + | Exp.PrimApp {args, prim, targs} => + Exp.PrimApp {args=freshenVec args, prim=prim, targs=targs} + | Exp.Select {offset, tuple} => + Exp.Select {offset=offset, tuple=freshenIfGlobal tuple} + | Exp.Tuple vs => Exp.Tuple (freshenVec vs) + | Exp.Var v => Exp.Var (freshenIfGlobal v) + | _ => exp + fun loopStatement (Statement.T {exp, ty, var}) = + (* This variable won't be global, since we're only looping over the program *) + Statement.T {exp=loopExp exp, ty=ty, var=var} + + fun loopTransfer transfer = + case transfer of + Transfer.Bug => Transfer.Bug + | Transfer.Call {args, func, return} => + Transfer.Call {args=freshenVec args, func=func, return=return} + | Transfer.Case {cases, default, test} => + Transfer.Case {cases=cases, default=default, test=freshenIfGlobal test} + | Transfer.Goto {args, dst} => + Transfer.Goto {args=freshenVec args, dst=dst} + | Transfer.Raise vs => + Transfer.Raise (freshenVec vs) + | Transfer.Return vs => + Transfer.Return (freshenVec vs) + | Transfer.Runtime {args, prim, return} => + Transfer.Runtime {args=freshenVec args, prim=prim, return=return} + fun loopBlock (Block.T {args, label, statements, transfer}) = + Block.T {args=args, label=label, + statements=Vector.map (statements, loopStatement), + transfer=loopTransfer transfer} + fun loopFunction func = + let + val {args, blocks, mayInline, name, raises, returns, start} = Function.dest func + val newBlocks = Vector.map(blocks, loopBlock) + in + Function.new {args=args, blocks=newBlocks, mayInline=mayInline, name=name, + raises=raises, returns=returns, start=start} + end + + val newFunctions = List.map (functions, loopFunction) + + (* We do not recurse on global definintions, so if g1 = C1 (g0) and g2 = C2 (g0), we + * will not duplicate g0. We expect this shouldn't improve much over proper + * duplication of single-depth and nullary usages *) + val newGlobals = + let + fun globalToClones (Statement.T {exp, ty, var}) = + let + val newVars = + case var of + SOME var => + (case HashTable.peek (globalVars, var) of + SOME vs => !vs + | NONE => []) + | NONE => [] + in + (Vector.fromList o List.map) (newVars, fn var => + Statement.T { + exp = exp, + var = SOME var, + ty = ty }) + end + (* globals that are used in other globals, + * we want to avoid duplicating to help reduce churn/improve diagonstic data *) + val usedGlobals: (Var.t, unit) HashTable.t = + HashTable.new {equals=Var.equals, hash=Var.hash} + val _ = Vector.map (globals, fn Statement.T {exp, ...} => + Exp.foreachVar (exp, fn var => + ignore (HashTable.lookupOrInsert (usedGlobals, var, ignore)))) + fun isUsedInGlobals global = + case HashTable.peek (usedGlobals, global) of + NONE => false + | SOME _ => true + fun shouldKeepOriginal (Statement.T {var=varOpt, ...}) = + case varOpt of + SOME var => + (case HashTable.peek (globalVars, var) of + SOME _ => isUsedInGlobals var + | NONE => true (* variable wasn't duplicated *)) + | NONE => true (* doesn't have a var *) + in + Vector.concat [ + Vector.keepAll (globals, shouldKeepOriginal), + Vector.concatV (Vector.map (globals, globalToClones))] + end + in + Program.T {datatypes=datatypes, globals=newGlobals, functions=newFunctions, main=main} + end +end diff -Nru mlton-20130715/mlton/ssa/equatable.sig mlton-20210117+dfsg/mlton/ssa/equatable.sig --- mlton-20130715/mlton/ssa/equatable.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/equatable.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/equatable.sml mlton-20210117+dfsg/mlton/ssa/equatable.sml --- mlton-20130715/mlton/ssa/equatable.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/equatable.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/flat-lattice.fun mlton-20210117+dfsg/mlton/ssa/flat-lattice.fun --- mlton-20130715/mlton/ssa/flat-lattice.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/flat-lattice.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,129 +0,0 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor FlatLattice (S: FLAT_LATTICE_STRUCTS): FLAT_LATTICE = -struct - -open S - -structure Elt = - struct - datatype t = - Bottom - | Point of Point.t - | Top - - local - open Layout - in - val layout = - fn Bottom => str "Bottom" - | Point p => Point.layout p - | Top => str "Top" - end - end -datatype z = datatype Elt.t - -datatype t = T of {lessThan: t list ref, - upperBound: Point.t option ref, - value: Elt.t ref} - -fun layout (T {value, ...}) = Elt.layout (!value) - -fun new () = T {lessThan = ref [], - upperBound = ref NONE, - value = ref Bottom} - -val isBottom = - fn (T {value = ref Bottom, ...}) => true - | _ => false -val isPoint = - fn (T {value = ref (Point _), ...}) => true - | _ => false -val isPointEq = - fn (T {value = ref (Point p), ...}, p') => Point.equals (p, p') - | _ => false -val getPoint = - fn (T {value = ref (Point p), ...}) => SOME p - | _ => NONE -val isTop = - fn (T {value = ref Top, ...}) => true - | _ => false - -fun forceTop (T {upperBound, value, ...}): bool = - if isSome (!upperBound) - then false - else (value := Top; true) - -fun up (T {lessThan, upperBound, value, ...}, e: Elt.t): bool = - let - fun continue e = List.forall (!lessThan, fn z => up (z, e)) - fun setTop () = - not (isSome (!upperBound)) - andalso (value := Top - ; continue Top) - in - case (!value, e) of - (_, Bottom) => true - | (Top, _) => true - | (_, Top) => setTop () - | (Bottom, Point p) => - (value := Point p - ; (case !upperBound of - NONE => continue (Point p) - | SOME p' => - Point.equals (p, p') andalso continue (Point p))) - | (Point p, Point p') => Point.equals (p, p') orelse setTop () - end - -val op <= : t * t -> bool = - fn (T {lessThan, value, ...}, e) => - (List.push (lessThan, e) - ; up (e, !value)) - -val op <= = - Trace.trace2 ("FlatLattice.<=", layout, layout, Bool.layout) - (op <=) - -fun lowerBound (e, p): bool = up (e, Point p) - -val lowerBound = - Trace.trace2 ("FlatLattice.lowerBound", layout, Point.layout, Bool.layout) - lowerBound - -fun upperBound (T {upperBound = r, value, ...}, p): bool = - case !r of - NONE => (r := SOME p - ; (case !value of - Bottom => true - | Point p' => Point.equals (p, p') - | Top => false)) - | SOME p' => Point.equals (p, p') - -val upperBound = - Trace.trace2 ("FlatLattice.upperBound", layout, Point.layout, Bool.layout) - upperBound - -fun forcePoint (e, p) = - lowerBound (e, p) andalso upperBound (e, p) - -val forcePoint = - Trace.trace2 ("FlatLattice.forcePoint", layout, Point.layout, Bool.layout) - forcePoint - -fun point p = - let - val e = new () - val _ = forcePoint (e, p) - in - e - end - -val point = Trace.trace ("FlatLattice.point", Point.layout, layout) point - -end diff -Nru mlton-20130715/mlton/ssa/flat-lattice.sig mlton-20210117+dfsg/mlton/ssa/flat-lattice.sig --- mlton-20130715/mlton/ssa/flat-lattice.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/flat-lattice.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature FLAT_LATTICE_STRUCTS = - sig - structure Point: - sig - type t - - val equals: t * t -> bool - val layout: t -> Layout.t - end - end - -signature FLAT_LATTICE = - sig - include FLAT_LATTICE_STRUCTS - - type t - - val <= : t * t -> bool - val forcePoint: t * Point.t -> bool - val forceTop: t -> bool - val getPoint: t -> Point.t option - val isBottom: t -> bool - val isPoint: t -> bool - val isPointEq: t * Point.t -> bool - val isTop: t -> bool - val layout: t -> Layout.t - val lowerBound: t * Point.t -> bool - val new: unit -> t - val point: Point.t -> t - val upperBound: t * Point.t -> bool - end diff -Nru mlton-20130715/mlton/ssa/flatten.fun mlton-20210117+dfsg/mlton/ssa/flatten.fun --- mlton-20130715/mlton/ssa/flatten.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/flatten.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/global.fun mlton-20210117+dfsg/mlton/ssa/global.fun --- mlton-20130715/mlton/ssa/global.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/global.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2020 Matthew Fluet. + * Copyright (C) 1999-2005, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -18,17 +19,13 @@ fn (ConApp {con = c, args}, ConApp {con = c', args = args'}) => Con.equals (c, c') andalso equalss (args, args') | (Const c, Const c') => Const.equals (c, c') - | (PrimApp {prim = p, targs = t, ...}, PrimApp {prim = p', targs = t', ...}) => - let - datatype z = datatype Prim.Name.t - val n = Prim.name p - val n' = Prim.name p' - in - case (n, n') of - (Array_array0Const, Array_array0Const) => - Vector.equals (t, t', Type.equals) - | _ => false - end + | (PrimApp {prim = p, targs = ts, args = xs}, + PrimApp {prim = p', targs = ts', args = xs'}) => + (case (p, p') of + (Prim.Vector_vector, Prim.Vector_vector) => + Vector.equals (ts, ts', Type.equals) + andalso equalss (xs, xs') + | _ => false) | (Tuple xs, Tuple xs') => equalss (xs, xs') | _ => false @@ -41,24 +38,19 @@ (!binds, fn {var, ty, exp} => Statement.T {var = SOME var, ty = ty, exp = exp})) before binds := [] - val set: (word * bind) HashSet.t = HashSet.new {hash = #1} + val table: (Exp.t, bind) HashTable.t = + HashTable.new {equals = expEquals, + hash = Exp.hash} fun new (ty: Type.t, exp: Exp.t): Var.t = - let - val hash = hash exp - in - #var - (#2 - (HashSet.lookupOrInsert - (set, hash, - fn (_, {exp = exp', ...}) => expEquals (exp, exp'), - fn () => - let - val x = Var.newString "global" - val bind = {var = x, ty = ty, exp = exp} - in List.push (binds, bind) - ; (hash, bind) - end))) - end + #var + (HashTable.lookupOrInsert + (table, exp, fn () => + let + val x = Var.newString "global" + val bind = {var = x, ty = ty, exp = exp} + in List.push (binds, bind) + ; bind + end)) in {new = new, all = all} end end diff -Nru mlton-20130715/mlton/ssa/global.sig mlton-20210117+dfsg/mlton/ssa/global.sig --- mlton-20130715/mlton/ssa/global.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/global.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/inline.fun mlton-20210117+dfsg/mlton/ssa/inline.fun --- mlton-20130715/mlton/ssa/inline.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/inline.fun 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -49,73 +49,6 @@ end end -structure Size = - struct - val check : (int * int option) -> bool = - fn (_, NONE) => false - | (size, SOME size') => size > size' - - val defaultExpSize : Exp.t -> int = - fn ConApp {args, ...} => 1 + Vector.length args - | Const _ => 0 - | PrimApp {args, ...} => 1 + Vector.length args - | Profile _ => 0 - | Select _ => 1 + 1 - | Tuple xs => 1 + Vector.length xs - | Var _ => 0 - fun expSize (size, max) (doExp, _) exp = - let - val size' = doExp exp - val size = size + size' - in - (size, check (size, max)) - end - fun statementSize (size, max) (doExp, doTransfer) = - fn Statement.T {exp, ...} => expSize (size, max) (doExp, doTransfer) exp - fun statementsSize (size, max) (doExp, doTransfer) statements = - Exn.withEscape - (fn escape => - Vector.fold - (statements, (size, false), fn (statement, (size, check)) => - if check - then escape (size, check) - else statementSize (size, max) (doExp, doTransfer) statement)) - val defaultTransferSize = - fn Arith {args, ...} => 1 + Vector.length args - | Bug => 1 - | Call {args, ...} => 1 + Vector.length args - | Case {cases, ...} => 1 + Cases.length cases - | Goto {args, ...} => 1 + Vector.length args - | Raise xs => 1 + Vector.length xs - | Return xs => 1 + Vector.length xs - | Runtime {args, ...} => 1 + Vector.length args - fun transferSize (size, max) (_, doTransfer) transfer = - let - val size' = doTransfer transfer - val size = size + size' - in - (size, check (size, max)) - end - fun blockSize (size, max) (doExp, doTransfer) = - fn Block.T {statements, transfer, ...} => - case statementsSize (size, max) (doExp, doTransfer) statements of - (size, true) => (size, true) - | (size, false) => transferSize (size, max) (doExp, doTransfer) transfer - fun blocksSize (size, max) (doExp, doTransfer) blocks = - Exn.withEscape - (fn escape => - Vector.fold - (blocks, (size, false), fn (block, (size, check)) => - if check - then escape (size, check) - else blockSize (size, max) (doExp, doTransfer) block)) - fun functionSize (size, max) (doExp, doTransfer) f = - blocksSize (size, max) (doExp, doTransfer) (#blocks (Function.dest f)) - - val default = (defaultExpSize, defaultTransferSize) - fun functionGT max = #2 o (functionSize (0, max) default) - end - local fun 'a make (dontInlineFunc: Function.t * 'a -> bool) (Program.T {functions, ...}, a: 'a): Func.t -> bool = @@ -147,10 +80,14 @@ end in val leafOnce = make (fn (f, {size}) => - Size.functionGT size f + Option.isNone (Function.sizeMax (f, {max = size, + sizeExp = Exp.size, + sizeTransfer =Transfer.size})) orelse Function.containsCall f) val leafOnceNoLoop = make (fn (f, {size}) => - Size.functionGT size f + Option.isNone (Function.sizeMax (f, {max = size, + sizeExp = Exp.size, + sizeTransfer =Transfer.size})) orelse Function.containsCall f orelse Function.containsLoop f) end @@ -224,28 +161,29 @@ then Exn.withEscape (fn escape => let - val (n, check) = - Size.functionSize - (0, max) - (Size.defaultExpSize, - fn t => - case t of - Call {func, ...} => - let - val {shouldInline, size, ...} = - funcInfo func - in - if !shouldInline - then !size - else escape () - end - | _ => Size.defaultTransferSize t) - function + val res = + Function.sizeMax + (function, + {max = max, + sizeExp = Exp.size, + sizeTransfer = + fn t => + case t of + Call {func, ...} => + let + val {shouldInline, size, ...} = + funcInfo func + in + if !shouldInline + then !size + else escape () + end + | _ => Transfer.size t}) in - if check - then () - else (shouldInline := true - ; size := n) + case res of + NONE => () + | SOME n => (shouldInline := true + ; size := n) end) else () end @@ -335,20 +273,20 @@ Function.mayInline function andalso not (!doesCallSelf) andalso let - val (n, _) = - Size.functionSize - (0, NONE) - (Size.defaultExpSize, - fn t as Call {func, ...} => - let - val {shouldInline, size, ...} = funcInfo func - in - if !shouldInline - then !size - else Size.defaultTransferSize t - end - | t => Size.defaultTransferSize t) - function + val n = + Function.size + (function, + {sizeExp = Exp.size, + sizeTransfer = + fn t as Call {func, ...} => + let + val {shouldInline, size, ...} = funcInfo func + in + if !shouldInline + then !size + else Transfer.size t + end + | t => Transfer.size t}) in if setSize then size := n diff -Nru mlton-20130715/mlton/ssa/inline.sig mlton-20210117+dfsg/mlton/ssa/inline.sig --- mlton-20130715/mlton/ssa/inline.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/inline.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/introduce-loops.fun mlton-20210117+dfsg/mlton/ssa/introduce-loops.fun --- mlton-20130715/mlton/ssa/introduce-loops.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/introduce-loops.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/known-case.fun mlton-20210117+dfsg/mlton/ssa/known-case.fun --- mlton-20130715/mlton/ssa/known-case.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/known-case.fun 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -429,11 +429,9 @@ fun addNewBlock (block as Block.T {label, ...}) = (setLabelInfo (label, LabelInfo.new block); addBlock block) - local - val table: {hash: word, - transfer: Transfer.t, - label: Label.t} HashSet.t - = HashSet.new {hash = #hash} + local + val table: (Transfer.t, Label.t) HashTable.t = + HashTable.new {hash = Transfer.hash, equals = Transfer.equals} in fun newBlock transfer = let @@ -454,20 +452,9 @@ * I left the code in case we want to enable it when compiling * without profiling. *) - fun newBlock' transfer - = let - val hash = Transfer.hash transfer - val {label, ...} - = HashSet.lookupOrInsert - (table, hash, - fn {transfer = transfer', ...} => - Transfer.equals (transfer, transfer'), - fn () => {hash = hash, - label = newBlock transfer, - transfer = transfer}) - in - label - end + fun newBlock' transfer = + HashTable.lookupOrInsert + (table, transfer, fn () => newBlock transfer) val _ = newBlock' (* quell unused variable warning *) fun bugBlock () = newBlock Bug end @@ -747,7 +734,7 @@ else Vector.sub (conValues, i)) fun route (statements, (cases, default)) - = if Vector.length statements = 0 + = if Vector.isEmpty statements then (cases, default) else let fun route' dst @@ -803,7 +790,7 @@ | SOME (statements, transfer) => let val label - = if Vector.length statements = 0 + = if Vector.isEmpty statements then newBlock transfer else let val label = Label.newNoname () diff -Nru mlton-20130715/mlton/ssa/local-flatten.fun mlton-20210117+dfsg/mlton/ssa/local-flatten.fun --- mlton-20130715/mlton/ssa/local-flatten.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/local-flatten.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -129,11 +129,7 @@ | _ => ()) val _ = case transfer of - Arith {args, overflow, success, ...} => - (forces args - ; forceArgs overflow - ; forceArgs success) - | Bug => () + Bug => () | Call {args, return, ...} => (forces args ; Return.foreachLabel (return, forceArgs)) diff -Nru mlton-20130715/mlton/ssa/local-ref.fun mlton-20210117+dfsg/mlton/ssa/local-ref.fun --- mlton-20130715/mlton/ssa/local-ref.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/local-ref.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2020 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -18,8 +19,8 @@ val isReff: 'a t -> bool = fn p => - case name p of - Name.Ref_ref => true + case p of + Ref_ref => true | _ => false end @@ -186,7 +187,7 @@ then ignore (FuncLattice.<= (varFuncUses (valOf var), - varFuncUses (Vector.sub (args, 0)))) + varFuncUses (Vector.first args))) else default () | _ => default () end) @@ -283,55 +284,51 @@ end) (* Rewrite. *) fun rewriteStatement (s: Statement.t as Statement.T {exp, var, ...}) - = let - datatype z = datatype Prim.Name.t - in - case exp - of PrimApp {prim, args, ...} - => let - fun arg n = Vector.sub (args, n) - - fun rewriteReffAssign rvar var - = let - val vi = varInfo rvar - in - if VarInfo.isLocal vi - then Statement.T - {var = SOME rvar, - ty = #2 (valOf (VarInfo.reff vi)), - exp = Var var} - else s - end - fun rewriteReff () - = case var - of NONE => s - | SOME var => rewriteReffAssign var (arg 0) - fun rewriteAssign () = rewriteReffAssign (arg 0) (arg 1) - fun rewriteDeref rvar - = let - val vi = varInfo rvar - in - if VarInfo.isLocal vi - then let - in - Statement.T - {var = var, - ty = #2 (valOf (VarInfo.reff vi)), - exp = Var rvar} - end - else s - end - val rewriteDeref - = fn () => rewriteDeref (arg 0) - in - case Prim.name prim - of Ref_ref => rewriteReff () - | Ref_assign => rewriteAssign () - | Ref_deref => rewriteDeref () - | _ => s - end - | _ => s - end + = (case exp + of PrimApp {prim, args, ...} + => let + fun arg n = Vector.sub (args, n) + + fun rewriteReffAssign rvar var + = let + val vi = varInfo rvar + in + if VarInfo.isLocal vi + then Statement.T + {var = SOME rvar, + ty = #2 (valOf (VarInfo.reff vi)), + exp = Var var} + else s + end + fun rewriteReff () + = case var + of NONE => s + | SOME var => rewriteReffAssign var (arg 0) + fun rewriteAssign () = rewriteReffAssign (arg 0) (arg 1) + fun rewriteDeref rvar + = let + val vi = varInfo rvar + in + if VarInfo.isLocal vi + then let + in + Statement.T + {var = var, + ty = #2 (valOf (VarInfo.reff vi)), + exp = Var rvar} + end + else s + end + val rewriteDeref + = fn () => rewriteDeref (arg 0) + in + case prim + of Prim.Ref_ref => rewriteReff () + | Prim.Ref_assign => rewriteAssign () + | Prim.Ref_deref => rewriteDeref () + | _ => s + end + | _ => s) fun rewriteBlock (Block.T {label, args, statements, transfer}) = let val li = labelInfo label @@ -420,18 +417,17 @@ = (List.push (VarInfo.derefs (varInfo var), label) ; List.push (LabelInfo.derefs li, var)) fun default () = Exp.foreachVar (exp, nonLocal) - datatype z = datatype Prim.Name.t in case exp of PrimApp {prim, args, ...} => let fun arg n = Vector.sub (args, n) in - case Prim.name prim - of Ref_ref => (setReff (); default ()) - | Ref_assign => (setAssign (arg 0); - nonLocal (arg 1)) - | Ref_deref => setDeref (arg 0) + case prim + of Prim.Ref_ref => (setReff (); default ()) + | Prim.Ref_assign => (setAssign (arg 0); + nonLocal (arg 1)) + | Prim.Ref_deref => setDeref (arg 0) | _ => default () end | _ => default () diff -Nru mlton-20130715/mlton/ssa/loop-invariant.fun mlton-20210117+dfsg/mlton/ssa/loop-invariant.fun --- mlton-20130715/mlton/ssa/loop-invariant.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/loop-invariant.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/loop-unroll.fun mlton-20210117+dfsg/mlton/ssa/loop-unroll.fun --- mlton-20130715/mlton/ssa/loop-unroll.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/loop-unroll.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1409 @@ +(* Copyright (C) 2016 Matthew Surawski. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +(* Reduces or eliminates the iteration count of loops by duplicating + * the loop body. + *) +functor LoopUnroll (S: SSA_TRANSFORM_STRUCTS): SSA_TRANSFORM = +struct + +open S +open Exp Transfer Prim + +structure Graph = DirectedGraph +local + open Graph +in + structure Forest = LoopForest +end + + +structure Histogram = + struct + type t = (IntInf.t, int ref) HashTable.t + + fun inc (set: t, key: IntInf.t): unit = + let + val _ = HashTable.insertIfNew (set, key, + (fn () => ref 1), + Int.inc) + in + () + end + + fun new (): t = + HashTable.new {hash = IntInf.hash, equals = IntInf.equals} + + fun toList (set: t): (IntInf.t * int ref) list = + HashTable.toList set + + fun toString (set: t) : string = + let + val eles = toList set + in + List.fold (eles, "", fn ((k, r), s) => concat[s, + IntInf.toString k, ": ", + Int.toString (!r), "\n"]) + end + end + +val loopCount = Counter.new 0 +val optCount = Counter.new 0 +val total = Counter.new 0 +val partial = Counter.new 0 +val multiHeaders = Counter.new 0 +val varEntryArg = Counter.new 0 +val variantTransfer = Counter.new 0 +val unsupported = Counter.new 0 +val ccTransfer = Counter.new 0 +val varBound = Counter.new 0 +val infinite = Counter.new 0 +val boundDom = Counter.new 0 +val histogram = ref (Histogram.new ()) + +type BlockInfo = Label.t * (Var.t * Type.t) vector + +structure Loop = + struct + datatype Bound = Eq of IntInf.t | Lt of IntInf.t | Gt of IntInf.t + type Start = IntInf.t + type Step = IntInf.t + datatype t = T of {start: Start, step: Step, bound: Bound, invert: bool} + + fun toString (T {start, step, bound, invert}): string = + let + val boundStr = case bound of + Eq b => if invert then + concat ["!= ", IntInf.toString b] + else + concat ["= ", IntInf.toString b] + | Lt b => if invert then + concat ["!< ", IntInf.toString b] + else + concat ["< ", IntInf.toString b] + | Gt b => if invert then + concat ["!> ", IntInf.toString b] + else + concat ["> ", IntInf.toString b] + in + concat[" Start: ", IntInf.toString start, + " Step: ", IntInf.toString step, + " Bound: ", boundStr] + end + + fun isInfiniteLoop (T {start, step, bound, invert}): bool = + case bound of + Eq b => + if invert then + (if start = b then + false + else if start < b andalso step > 0 then + not (((b - start) mod step) = 0) + else if start > b andalso step < 0 then + not (((start - b) mod (~step)) = 0) + else + true) + else + step = 0 + | Lt b => + if invert then + start >= b andalso step >= 0 + else + start < b andalso step <= 0 + | Gt b => + if invert then + start <= b andalso step <= 0 + else + start > b andalso step >= 0 + + + fun iters (start: IntInf.t, step: IntInf.t, max: IntInf.t): IntInf.t = + let + val range = max - start + val iters = range div step + val adds = range mod step + in + if step > range then + 1 + else + iters + adds + end + + (* Assumes isInfiniteLoop is false, otherwise the result is undefined. *) + fun iterCount (T {start, step, bound, invert}): IntInf.t = + case bound of + Eq b => + if invert then + (b - start) div step + else + 1 + | Lt b => + (case (start >= b, invert) of + (true, false) => 0 + | (true, true) => iters (b - 1, ~step, start) + | (false, true) => 0 + | (false, false) => iters (start, step, b)) + | Gt b => + (case (start <= b, invert) of + (true, false) => 0 + | (true, true) => iters (start, step, b + 1) + | (false, true) => 0 + | (false, false) => iters (b, ~step, start)) + + fun makeConstStmt (v: IntInf.t, wsize: WordSize.t): Var.t * Statement.t = + let + val newWord = WordX.fromIntInf (v, wsize) + val newConst = Const.word newWord + val newExp = Exp.Const (newConst) + val newType = Type.word wsize + val newVar = Var.newNoname() + val newStatement = Statement.T {exp = newExp, + ty = newType, + var = SOME(newVar)} + in + (newVar, newStatement) + end + + fun makeVarStmt (v: IntInf.t, wsize: WordSize.t, var: Var.t) + : Var.t * Statement.t list = + let + val (cVar, cStmt) = makeConstStmt (v, wsize) + val newExp = Exp.PrimApp {args = Vector.new2 (var, cVar), + prim = Prim.Word_add wsize, + targs = Vector.new0 ()} + val newType = Type.word wsize + val newVar = Var.newNoname() + val newStatement = Statement.T {exp = newExp, + ty = newType, + var = SOME(newVar)} + in + (newVar, [cStmt, newStatement]) + end + + (* Given: + - a loop + - a word size + Returns: + A variable and statement for the constant value after the loops final + iteration. This value will make the loop exit. + Assumes isInfiniteLoop is false, otherwise the result is undefined. + *) + fun makeLastConstant (T {start, step, bound, invert}, + wsize: WordSize.t) + : Var.t list * Statement.t list = + let + val ic = iterCount (T {start = start, + step = step, + bound = bound, + invert = invert}) + val last = start + (step * ic) + val (newVar, newStatement) = makeConstStmt(last, wsize) + in + ([newVar], [newStatement]) + end + + (* Given: + - a loop + - a word size + - an iteration limit + Returns: + A pair of variables and statements for those variables + for each iteration of the loop. + This should go 1 step beyond the end of the loop. + Assumes isInfiniteLoop is false, otherwise this will run forever. *) + fun makeConstants (T {start, step, bound, invert}, + wsize: WordSize.t, + limit: IntInf.t) + : Var.t list * Statement.t list = + case bound of + Eq b => + if (start = b) <> invert andalso limit > 0 then + let + val (newVar, newStatement) = makeConstStmt(start, wsize) + val nextIter = T {start = start + step, + step = step, + bound = bound, + invert = invert} + val (rVars, rStmts) = makeConstants (nextIter, wsize, limit - 1) + in + (newVar::rVars, newStatement::rStmts) + end + else if limit > 0 then + let + val (newVar, newStatement) = makeConstStmt(start, wsize) + in + ([newVar], [newStatement]) + end + else + ([], []) + | Lt b => + if (start < b) <> invert andalso limit > 0 then + let + val (newVar, newStatement) = makeConstStmt(start, wsize) + val nextIter = T {start = start + step, + step = step, + bound = bound, + invert = invert} + val (rVars, rStmts) = makeConstants (nextIter, wsize, limit - 1) + in + (newVar::rVars, newStatement::rStmts) + end + else if limit > 0 then + let + val (newVar, newStatement) = makeConstStmt(start, wsize) + in + ([newVar], [newStatement]) + end + else + ([], []) + | Gt b => + if (start > b) <> invert andalso limit > 0 then + let + val (newVar, newStatement) = makeConstStmt(start, wsize) + val nextIter = T {start = start + step, + step = step, + bound = bound, + invert = invert} + val (rVars, rStmts) = makeConstants (nextIter, wsize, limit - 1) + in + (newVar::rVars, newStatement::rStmts) + end + else if limit > 0 then + let + val (newVar, newStatement) = makeConstStmt(start, wsize) + in + ([newVar], [newStatement]) + end + else + ([], []) + + fun makeStepsRec (step: Step, wsize: WordSize.t, + var: Var.t, times: IntInf.t, + vList: Var.t list, sList: Statement.t list) + : Var.t list * Statement.t list = + if times > 0 then + let + val stepAdd = step * (times - 1) + val (newVar, newStatements) = makeVarStmt(stepAdd, wsize, var) + in + makeStepsRec (step, wsize, var, times - 1, + newVar::vList, newStatements @ sList) + end + else (vList, sList) + + fun makeSteps (T {step, ...}, + wsize: WordSize.t, + var: Var.t, + times: IntInf.t) + : Var.t list * Statement.t list = + makeStepsRec (step, wsize, var, times, [], []) + + end + +fun logli (l: Layout.t, i: int): unit = + Control.diagnostics + (fn display => + display(Layout.indent(l, i * 2))) + +fun logsi (s: string, i: int): unit = + logli((Layout.str s), i) + +fun logs (s: string): unit = + logsi(s, 0) + +fun logstat (x: Counter.t, s: string): unit = + logs (concat [Int.toString(Counter.value x), " ", s]) + +fun listPop lst = + case lst of + [] => [] + | _::tl => tl + +(* If a block was renamed, return the new name. + Otherwise return the old name. *) +fun fixLabel (getBlockInfo: Label.t -> BlockInfo, + label: Label.t, + origLabels: Label.t vector): Label.t = + if Vector.contains(origLabels, label, Label.equals) then + let + val (name, _) = getBlockInfo(label) + in + name + end + else + label + +fun varOptEquals (v1: Var.t, v2: Var.t option): bool = + case v2 of + NONE => false + | SOME (v2') => Var.equals (v1, v2') + +(* For an binary operation where one argument is a constant, + load that constant. + Returns the variable, the constant, and true if the var was the first arg *) +fun varConst (args, loadVar, signed): (Var.t * IntInf.int * bool) option = + let + val a1 = Vector.sub (args, 0) + val a2 = Vector.sub (args, 1) + val a1v = loadVar(a1, signed) + val a2v = loadVar(a2, signed) + in + case (a1v, a2v) of + (SOME x, NONE) => SOME (a2, x, false) + | (NONE, SOME x) => SOME (a1, x, true) + | _ => NONE + end + +(* Given: + - an argument vector with two arguments + - a primative operaton that is an addition or subtraction of a const value + - a function from variables to their constant values + Returns: + - The non-const variable and the constant value in terms of addition *) +fun checkPrim (args, prim, loadVar) = + case prim of + Word_add _ => + (case varConst(args, loadVar, false) of + SOME(nextVar, x, _) => SOME (nextVar, x) + | NONE => NONE) + | Word_sub _ => + (case varConst(args, loadVar, false) of + SOME(nextVar, x, _) => SOME (nextVar, ~x) + | NONE => NONE) + | _ => NONE + +(* Given: + - a variable in the loop + - another variable in the loop + - the loop body + - a function from variables to their constant values + - a starting value, if the transfer to the header is an arith transfer + Returns: + - Some x such that the value of origVar in loop iteration i+1 is equal to + (the value of origVar in iteration i) + x, + or None if the step couldn't be computed *) +fun varChain (origVar, endVar, blocks, loadVar, total) = + case Var.equals (origVar, endVar) of + true => SOME (total) + | false => + let + val endVarAssign = Vector.peekMap (blocks, fn b => + let + val stmts = Block.statements b + val assignments = Vector.keepAllMap (stmts, fn s => + case varOptEquals (endVar, Statement.var s) of + false => NONE + | true => + (case Statement.exp s of + Exp.PrimApp {args, prim, ...} => + checkPrim (args, prim, loadVar) + | _ => NONE)) + in + case Vector.length assignments of + 0 => NONE + | 1 => SOME (Vector.sub (assignments, 0)) + | _ => raise Fail "Multiple assignments in SSA form!" + end) + in + case endVarAssign of + NONE => NONE + | SOME (nextVar, x) => + varChain(origVar, nextVar, blocks, loadVar, x + total) + end + +(* Given: + - a list of loop body labels + - a transfer on a boolean value where one branch exits the loop + and the other continues + Returns: + - the label that exits the loop + - the label that continues the loop + - true if the continue branch is the true branch + *) +fun loopExit (loopLabels: Label.t vector, transfer: Transfer.t) + : (Label.t * Label.t * bool) = + case transfer of + (* This should be a case statement on a boolean, + so all dsts should be unary. + One should transfer outside the loop, the other inside. *) + Transfer.Case {cases, default, ...} => + (case default of + SOME(defaultLabel) => + let + val (caseCon, caseLabel) = + case cases of + Cases.Con v => Vector.sub (v, 0) + | _ => raise Fail "This should be a con" + in + if Vector.contains (loopLabels, defaultLabel, Label.equals) then + (caseLabel, + defaultLabel, + Con.equals (Con.fromBool false, caseCon)) + else + (defaultLabel, + caseLabel, + Con.equals (Con.fromBool true, caseCon)) + end + | NONE => + (case cases of + Cases.Con v => + let + val (c1, d1) = Vector.sub (v, 0) + val (c2, d2) = Vector.sub (v, 1) + in + if Vector.contains (loopLabels, d1, Label.equals) then + (d2, d1, Con.equals (Con.fromBool true, c1)) + else + (d1, d2, Con.equals (Con.fromBool true, c2)) + end + | _ => raise Fail "This should be a con")) + + | _ => raise Fail "This should be a case statement" + +fun isLoopBranch (loopLabels, cases, default) = + case default of + SOME (defaultLabel) => + (case cases of + Cases.Con v => + if (Vector.length v) = 1 then + let + val (_, caseLabel) = Vector.sub (v, 0) + val defaultInLoop = + Vector.contains (loopLabels, defaultLabel, Label.equals) + val caseInLoop = + Vector.contains (loopLabels, caseLabel, Label.equals) + in + defaultInLoop <> caseInLoop + end + else + false + | _ => false) + | NONE => + (case cases of + Cases.Con v => + if (Vector.length v) = 2 then + let + val (_, c1) = Vector.sub (v, 0) + val (_, c2) = Vector.sub (v, 1) + val c1il = Vector.contains (loopLabels, c1, Label.equals) + val c2il = Vector.contains (loopLabels, c2, Label.equals) + in + c1il <> c2il + end + else + false + | _ => false) + +fun transfersToHeader (headerLabel, block) = + case Block.transfer block of + Transfer.Call {return, ...} => + (case return of + Return.NonTail {handler, ...} => + (case handler of + Handler.Handle l => Label.equals (headerLabel, l) + | _ => false) + | _ => false) + | Transfer.Case {cases, ...} => + (* We don't have to check default because we know the header isn't nullary *) + (case cases of + Cases.Con v => + Vector.exists (v, (fn (_, lbl) => Label.equals (headerLabel, lbl))) + | Cases.Word (_, v) => + Vector.exists (v, (fn (_, lbl) => Label.equals (headerLabel, lbl)))) + | Transfer.Goto {dst, ...} => + Label.equals (headerLabel, dst) + | Transfer.Runtime {return, ...} => + Label.equals(headerLabel, return) + | _ => false + +(* Given: + - a loop phi variable + - that variables index in the loop header's arguments + - that variables constant entry value (if it has one) + - the loop header block + - the loop body block + - a function from variables to their constant values + Returns: + - a Loop structure for unrolling that phi var, if one exists *) +fun checkArg ((argVar, _), argIndex, entryArg, header, loopBody, + loadVar: Var.t * bool -> IntInf.t option, domInfo, depth) = + case entryArg of + NONE => (logsi ("Can't unroll: entry arg not constant", depth) ; + Counter.tick varEntryArg ; + NONE) + | SOME (entryX, entryXSigned) => + let + val headerLabel = Block.label header + val unsupportedTransfer = ref false + + (* For every transfer to the start of the loop + get the variable at argIndex *) + val loopVars = Vector.keepAllMap (loopBody, fn block => + case Block.transfer block of + Transfer.Call {return, ...} => + (case return of + Return.NonTail {cont, ...} => + if Label.equals (headerLabel, cont) then + (unsupportedTransfer := true ; NONE) + else NONE + | _ => NONE) + | Transfer.Case {cases, ...} => + (case cases of + Cases.Con v => + if Vector.exists(v, fn (_, lbl) => + Label.equals (headerLabel, lbl)) then + (unsupportedTransfer := true ; NONE) + else NONE + | Cases.Word (_, v) => + if Vector.exists(v, fn (_, lbl) => + Label.equals (headerLabel, lbl)) then + (unsupportedTransfer := true ; NONE) + else NONE) + | Transfer.Goto {args, dst} => + if Label.equals (headerLabel, dst) then + SOME (Vector.sub (args, argIndex), 0) + else NONE + | _ => NONE) + in + if (Vector.length loopVars) > 1 + andalso not (Vector.forall + (loopVars, fn (arg, x) => + let + val (arg0, x0) = Vector.sub (loopVars, 0) + in + Var.equals (arg0, arg) andalso (x0 = x) + end)) + then + (logsi ("Can't unroll: variant transfer to head of loop", depth) ; + Counter.tick variantTransfer ; + NONE) + else if (!unsupportedTransfer) then + (logsi ("Can't unroll: unsupported transfer to head of loop", + depth) ; + Counter.tick unsupported ; + NONE) + else + let + val (loopVar, x) = Vector.sub (loopVars, 0) + in + case varChain (argVar, loopVar, loopBody, loadVar, x) of + NONE => (logsi ("Can't unroll: can't compute transfer", + depth) ; + Counter.tick ccTransfer ; + NONE) + | SOME (step) => + let + fun ltOrGt (vc, signed) = + case vc of + NONE => NONE + | SOME (_, c, b) => + if b then + SOME(Loop.Lt (c), signed) + else + SOME(Loop.Gt (c), signed) + + fun eq (vc, signed) = + case vc of + NONE => NONE + | SOME (_, c, _) => SOME(Loop.Eq (c), signed) + val loopLabels = Vector.map (loopBody, Block.label) + val transferVarBlock = Vector.peekMap (loopBody, (fn b => + let + val transferVar = + case Block.transfer b of + Transfer.Case {cases, default, test} => + if isLoopBranch (loopLabels, cases, default) then + SOME(test) + else NONE + | _ => NONE + val loopBound = + case (transferVar) of + NONE => NONE + | SOME (tVar) => + Vector.peekMap (Block.statements b, + (fn s => case Statement.var s of + NONE => NONE + | SOME (sVar) => + if Var.equals (tVar, sVar) then + case Statement.exp s of + PrimApp {args, prim, ...} => + if not (Vector.contains + (args, argVar, Var.equals)) + then + NONE + else + (case prim of + Word_lt (_, {signed}) => + ltOrGt + (varConst (args, + loadVar, + signed), + signed) + | Word_equal _ => + eq + (varConst (args, + loadVar, + false), + false) + | _ => NONE) + | _ => NONE + else NONE)) + in + case loopBound of + NONE => NONE + | SOME (bound, signed) => + SOME(bound, b, signed) + end)) + in + case transferVarBlock of + NONE => + (logsi ("Can't unroll: can't determine bound", depth) ; + Counter.tick varBound ; + NONE) + | SOME(bound, block, signed) => + let + val headerTransferBlocks = + Vector.keepAll(loopBody, (fn b => + transfersToHeader (headerLabel, b))) + val boundDominates = Vector.forall (headerTransferBlocks, + (fn b => List.exists ((domInfo (Block.label b)), + (fn l => Label.equals + ((Block.label block), l))))) + val loopLabels = Vector.map (loopBody, Block.label) + val (_, _, contIsTrue) = + loopExit (loopLabels, Block.transfer block) + val entryVal = if signed then entryXSigned + else entryX + in + if boundDominates then + SOME (argIndex, + block, + Loop.T {start = entryVal, + step = step, + bound = bound, + invert = not contIsTrue}) + else + (logsi ("Can't unroll: bound doesn't dominate", depth) ; + Counter.tick boundDom ; + NONE) + end + end + end + end +(* Check all of a loop's entry point arguments to see if a constant value. + Returns a list of int options where SOME(x) is always x for each entry. *) +fun findConstantStart (entryArgs: + (((IntInf.t * IntInf.t) option) vector) vector) + : ((IntInf.t * IntInf.t) option) vector = + if (Vector.length entryArgs) > 0 then + Vector.rev (Vector.fold (entryArgs, Vector.sub (entryArgs, 0), + fn (v1, v2) => Vector.fromList ( + Vector.fold2 (v1, v2, [], fn (a1, a2, lst) => + case (a1, a2) of + (SOME(x1, x1'), SOME(x2, _)) => + if x1 = x2 then SOME(x1, x1')::lst + else NONE::lst + | _ => NONE::lst)))) + else Vector.new0 () + +(* Look for any optimization opportunities in the loop. *) +fun findOpportunity(functionBody: Block.t vector, + loopBody: Block.t vector, + loopHeaders: Block.t vector, + loadGlobal: Var.t * bool -> IntInf.t option, + domInfo: Label.t -> Label.t list, + depth: int): + (int * Block.t * Loop.t) option = + if (Vector.length loopHeaders) = 1 then + let + val header = Vector.sub (loopHeaders, 0) + val headerArgs = Block.args header + val headerLabel = Block.label header + val () = logsi (concat["Evaluating loop with header: ", + Label.toString headerLabel], depth - 1) + fun blockEquals (b1, b2) = + Label.equals (Block.label b1, Block.label b2) + val emptyArgs = SOME(Vector.new (Vector.length headerArgs, NONE)) + val entryArgs = Vector.keepAllMap(functionBody, fn block => + if Vector.contains (loopBody, block, blockEquals) then + NONE + else case Block.transfer block of + Transfer.Call {return, ...} => + (case return of + Return.NonTail {cont, ...} => + if Label.equals (headerLabel, cont) then + emptyArgs + else NONE + | _ => NONE) + | Transfer.Case {cases, ...} => + (case cases of + Cases.Con v => + if Vector.exists (v, fn (_, lbl) => + Label.equals (headerLabel, lbl)) then + emptyArgs + else + NONE + | Cases.Word (_, v) => + if Vector.exists (v, fn (_, lbl) => + Label.equals (headerLabel, lbl)) then + emptyArgs + else NONE) + | Transfer.Goto {args, dst} => + if Label.equals (dst, headerLabel) then + SOME(Vector.map (args, fn a => + case (loadGlobal(a, false), + loadGlobal(a, true)) + of + (NONE, NONE) => NONE + | (SOME v1, SOME v2) => SOME (v1, v2) + | _ => raise Fail "Impossible")) + else NONE + | _ => NONE) + val () = logsi (concat["Loop has ", + Int.toString (Vector.length entryArgs), + " entry points"], depth - 1) + val constantArgs = findConstantStart entryArgs + val unrollableArgs = + Vector.keepAllMapi + (headerArgs, fn (i, arg) => ( + logsi (concat["Checking arg: ", Var.toString (#1 arg)], depth) ; + checkArg (arg, i, Vector.sub (constantArgs, i), + header, loopBody, loadGlobal, domInfo, depth + 1))) + in + if (Vector.length unrollableArgs) > 0 then + SOME(Vector.sub (unrollableArgs, 0)) + else NONE + end + else + (logsi ("Can't optimize: loop has more than 1 header", depth) ; + Counter.tick multiHeaders; + NONE) + +fun makeHeader(oldHeader, (newVars, newStmts), newEntry) = + let + val oldArgs = Block.args oldHeader + val newArgs = Vector.map (oldArgs, fn (arg, _) => arg) + val newTransfer = Transfer.Goto {args = newArgs, dst = newEntry} + in + (Block.T {args = oldArgs, + label = Block.label oldHeader, + statements = Vector.fromList newStmts, + transfer = newTransfer}, + newVars) + end + +(* Copy an entire loop. In the header, rewrite the transfer to take the loop branch. + In the transfers to the top of the loop, rewrite the transfer to goto next. + Ensure that the header is the first element in the list. + Replace all instances of argi with argVar *) +fun copyLoop(blocks: Block.t vector, + nextLabel: Label.t, + headerLabel: Label.t, + tBlock: Block.t, + argi: int, + argVar: Var.t, + rewriteTransfer: bool, + blockInfo: Label.t -> BlockInfo, + setBlockInfo: Label.t * BlockInfo -> unit): Block.t vector = + let + val labels = Vector.map (blocks, Block.label) + (* Assign a new label for each block *) + val newBlocks = Vector.map (blocks, fn b => + let + val oldName = Block.label b + val oldArgs = Block.args b + val newName = Label.newNoname() + val () = setBlockInfo(oldName, (newName, oldArgs)) + in + Block.T {args = Block.args b, + label = newName, + statements = Block.statements b, + transfer = Block.transfer b} + end) + (* Rewrite the transfers of each block *) + val fixedBlocks = Vector.map + (newBlocks, fn Block.T {args, label, statements, transfer} => + let + val f = fn l => fixLabel(blockInfo, l, labels) + val isHeader = Label.equals (label, f(headerLabel)) + val (newArgs, unrolledArg) = + if isHeader then + (args, SOME(Vector.sub (args, argi))) + else (args, NONE) + val newStmts = + if isHeader then + case unrolledArg of + NONE => statements + | SOME(var, ty) => + let + val assignExp = Exp.Var (argVar) + val assign = Statement.T {exp = assignExp, + ty = ty, + var = SOME(var)} + val assignV = Vector.new1(assign) + in + Vector.concat [assignV, statements] + end + else + statements + val newTransfer = + if rewriteTransfer andalso + Label.equals (label, f(Block.label tBlock)) + then + let + val (_, contLabel, _) = loopExit(labels, transfer) + in + Transfer.Goto {args = Vector.new0 (), dst = f(contLabel)} + end + else + case transfer of + Transfer.Call {args, func, return} => + let + val newReturn = + case return of + Return.NonTail {cont, handler} => + let + val newHandler = + case handler of + Handler.Handle l => Handler.Handle(f(l)) + | _ => handler + in + Return.NonTail {cont = f(cont), handler = newHandler} + end + | _ => return + in + Transfer.Call {args = args, func = func, return = newReturn} + end + | Transfer.Case {cases, default, test} => + let + val newCases = Cases.map(cases, f) + val newDefault = case default of + NONE => default + | SOME(l) => SOME(f(l)) + in + Transfer.Case {cases = newCases, + default = newDefault, + test = test} + end + | Transfer.Goto {args, dst} => + if Label.equals (dst, headerLabel) then + Transfer.Goto {args = args, dst = nextLabel} + else + Transfer.Goto {args = args, dst = f(dst)} + | Transfer.Runtime {args, prim, return} => + Transfer.Runtime {args = args, prim = prim, return = f(return)} + | _ => transfer + in + Block.T {args = newArgs, + label = label, + statements = newStmts, + transfer = newTransfer} + end) + in + Vector.rev fixedBlocks + end + +(* Unroll a loop. The header should ALWAYS be the first element + in the returned list. *) +fun unrollLoop (oldHeader, tBlock, argi, loopBlocks, argLabels, + exit, rewriteTransfer, blockInfo, setBlockInfo) = + let + val oldHeaderLabel = Block.label oldHeader + in + case argLabels of + [] => [exit] + | hd::tl => + let + val res = unrollLoop (oldHeader, tBlock, argi, + loopBlocks, tl, exit, rewriteTransfer, + blockInfo, setBlockInfo) + val nextBlockLabel = Block.label (List.first res) + val newLoop = copyLoop(loopBlocks, nextBlockLabel, oldHeaderLabel, + tBlock, argi, hd, rewriteTransfer, + blockInfo, setBlockInfo) + in + (Vector.toList newLoop) @ res + end + end + +(* Given: + - an itertion count + - a loop body + Returns (b, x, y, z) such that: + if b is true + - unroll the loop completely + - x, y, and z are undefined. + if b is false + - x is the number of times to expand the loop body + - y is the number of iterations to run the expanded body (must never be 0) + - z is the number of times to peel the loop body + *) +fun shouldOptimize (iterCount, loopBlocks, depth) = + let + val loopSize' = Block.sizeV (loopBlocks, {sizeExp = Exp.size, sizeTransfer = Transfer.size}) + val loopSize = IntInf.fromInt loopSize' + val unrollLimit = IntInf.fromInt (!Control.loopUnrollLimit) + val () = logsi ("iterations * loop size < unroll factor = can total unroll", + depth) + val canTotalUnroll = (iterCount * loopSize) < unrollLimit + val () = logsi (concat[IntInf.toString iterCount, " * ", + IntInf.toString loopSize, " < ", + IntInf.toString unrollLimit, " = ", + Bool.toString canTotalUnroll], depth) + in + if (iterCount = 1) orelse canTotalUnroll then + (* Loop runs once or it's small enough to unroll *) + (true, 0, 0, 0) + else if loopSize >= unrollLimit then + (* Loop is too big to unroll at all, peel off 1 iteration *) + (false, 1, iterCount - 1, 1) + else + let + val exBodySize = unrollLimit div loopSize + val exIters = iterCount div exBodySize + val leftovers = iterCount - (exIters * exBodySize) + in + if (exIters - 1) < 2 then + (* If the unpeeled loop would run 1 or 0 times, just unroll the + whole thing *) + (true, 0, 0, 0) + else + if leftovers = 0 then + (* If we don't get any unpeelings naturally, force one *) + (false, exBodySize, exIters - 1, exBodySize) + else + (* Otherwise stick them on the front of the loop *) + (false, exBodySize, exIters, leftovers) + end + end + +fun expandLoop (oldHeader, loopBlocks, loop, tBlock, argi, argSize, oldArg, + exBody, iterBody, exitLabel, blockInfo, setBlockInfo) = + let + (* Make a new loop header with an additional arg *) + val newLoopEntry = Label.newNoname() + val (newLoopHeader, loopArgLabels) = + makeHeader (oldHeader, + Loop.makeSteps (loop, argSize, oldArg, exBody), + newLoopEntry) + val iterVar = Var.newNoname () + val newLoopHeaderArgs' = Vector.concat + [Block.args newLoopHeader, + Vector.new1 (iterVar, Type.word argSize)] + val newLoopHeader' = + Block.T {args = newLoopHeaderArgs', + label = Label.newNoname (), + statements = Block.statements newLoopHeader, + transfer = Block.transfer newLoopHeader} + + (* Make a new goto to the top of the loop increasing the iter by 1 *) + val loopHeaderGoto = + let + val (newVar, newVarStmts) = Loop.makeVarStmt (1, argSize, iterVar) + val nonIterArgs = Vector.map (Block.args oldHeader, fn (a, _) => a) + val newArgs = Vector.concat [nonIterArgs, Vector.new1 (newVar)] + val newTransfer = Transfer.Goto {args = newArgs, + dst = Block.label newLoopHeader'} + in + Block.T {args = Vector.new0 (), + label = Label.newNoname (), + statements = Vector.fromList newVarStmts, + transfer = newTransfer} + end + + val newLoopExit = + let + val (newLimitVar, newLimitStmt) = + Loop.makeConstStmt (iterBody - 1, argSize) + val (newComp, newCompVar) = + let + val newVar = Var.newNoname () + val newTy = Type.datatypee Tycon.bool + val newExp = + PrimApp {args = Vector.new2 (iterVar, newLimitVar), + prim = Prim.Word_lt (argSize, {signed = true}), + targs = Vector.new0 ()} + in + (Statement.T {exp = newExp, + ty = newTy, + var = SOME(newVar)}, + newVar) + end + val exitStatements = Vector.new2(newLimitStmt, newComp) + val exitCases = Cases.Con ( + Vector.new1 (Con.fromBool true, + Block.label loopHeaderGoto)) + val exitTransfer = Transfer.Case {cases = exitCases, + default = SOME(exitLabel), + test = newCompVar} + in + Block.T {args = Block.args oldHeader, + label = Label.newNoname (), + statements = exitStatements, + transfer = exitTransfer} + end + + (* Expand the loop exBody times. Rewrite the bound's transfer, + because we know it will always be true and it won't be eliminated + by shrink. *) + val newLoopBlocks = unrollLoop (oldHeader, tBlock, argi, + loopBlocks, loopArgLabels, newLoopExit, + true, blockInfo, setBlockInfo) + val firstLoopBlock = List.first newLoopBlocks + val loopArgs' = Block.args firstLoopBlock + val loopStatements' = Block.statements firstLoopBlock + val loopTransfer' = Block.transfer firstLoopBlock + val newLoopHead = Block.T {args = loopArgs', + label = newLoopEntry, + statements = loopStatements', + transfer = loopTransfer'} + val newLoopBlocks' = newLoopHeader':: + (loopHeaderGoto:: + (newLoopHead:: + (listPop newLoopBlocks))) + in + newLoopBlocks' + end + +(* Attempt to optimize a single loop. Returns a list of blocks to add to the + program and a list of blocks to remove from the program. *) +fun optimizeLoop(allBlocks, headerNodes, loopNodes, + nodeBlock, loadGlobal, domInfo, depth) = + let + val () = Counter.tick loopCount + val headers = Vector.map (headerNodes, nodeBlock) + val loopBlocks = Vector.map (loopNodes, nodeBlock) + val loopBlockNames = Vector.map (loopBlocks, Block.label) + val optOpt = findOpportunity (allBlocks, loopBlocks, headers, + loadGlobal, domInfo, depth + 1) + val {get = blockInfo: Label.t -> BlockInfo, + set = setBlockInfo: Label.t * BlockInfo -> unit, destroy} = + Property.destGetSet(Label.plist, + Property.initRaise("blockInfo", Label.layout)) + in + case optOpt of + NONE => ([], []) + | SOME (argi, tBlock, loop) => + if Loop.isInfiniteLoop loop then + (logsi ("Can't unroll: infinite loop", depth) ; + Counter.tick infinite ; + logsi (concat["Index: ", Int.toString argi, Loop.toString loop], + depth) ; + ([], [])) + else + let + val () = Counter.tick optCount + val oldHeader = Vector.sub (headers, 0) + val oldArgs = Block.args oldHeader + val (oldArg, oldType) = Vector.sub (oldArgs, argi) + val () = logsi (concat["Can unroll loop on ", + Var.toString oldArg], depth) + val () = logsi (concat["Index: ", Int.toString argi, + Loop.toString loop], depth) + val iterCount = Loop.iterCount loop + val () = logsi (concat["Loop will run ", + IntInf.toString iterCount, + " times"], depth) + val () = logsi (concat["Transfer block is ", + Label.toString (Block.label tBlock)], + depth) + val () = Histogram.inc ((!histogram), iterCount) + val (totalUnroll, exBody, iterBody, peel) = + shouldOptimize (iterCount, loopBlocks, depth + 1) + val argSize = case Type.dest oldType of + Type.Word wsize => wsize + | _ => raise Fail "Argument is not of type word" + in + if totalUnroll then + let + val () = Counter.tick total + val () = logsi ("Completely unrolling loop", depth) + val newEntry = Label.newNoname() + val (newHeader, argLabels) = + makeHeader (oldHeader, + Loop.makeConstants (loop, argSize, iterCount+1), + newEntry) + val exitBlock = Block.T {args = oldArgs, + label = Label.newNoname (), + statements = Vector.new0 (), + transfer = Transfer.Bug} + (* For each induction variable value, copy the loop's body *) + val newBlocks = unrollLoop (oldHeader, tBlock, argi, + loopBlocks, argLabels, exitBlock, + false, blockInfo, setBlockInfo) + (* Fix the first entry's label *) + val firstBlock = List.first newBlocks + val args' = Block.args firstBlock + val statements' = Block.statements firstBlock + val transfer' = Block.transfer firstBlock + val newHead = Block.T {args = args', + label = newEntry, + statements = statements', + transfer = transfer'} + val newBlocks' = newHeader::(newHead::(listPop newBlocks)) + val () = destroy() + in + (newBlocks', (Vector.toList loopBlockNames)) + end + else + let + val () = Counter.tick partial + val () = logsi ("Partially unrolling loop", depth) + val () = logsi (concat["Body expansion: ", + IntInf.toString exBody, + " Body iterations: ", + IntInf.toString iterBody, + " Peel iterations: ", + IntInf.toString peel], + depth) + val oldArgLabels = Vector.map (oldArgs, fn (a, _) => a) + (* Produce an exit loop iteration. *) + val exitEntry = Label.newNoname() + val (exitHeader, exitConsts) = + makeHeader (oldHeader, + Loop.makeLastConstant (loop, argSize), + exitEntry) + val exitHeader' = + Block.T {args = Block.args exitHeader, + label = Label.newNoname (), + statements = Block.statements exitHeader, + transfer = Block.transfer exitHeader} + val exitBlock = Block.T {args = oldArgs, + label = Label.newNoname (), + statements = Vector.new0 (), + transfer = Transfer.Bug} + val exitBlocks = unrollLoop (oldHeader, tBlock, argi, + loopBlocks, exitConsts, exitBlock, + false, blockInfo, setBlockInfo) + val exitFirstBlock = List.first exitBlocks + val exitArgs = Block.args exitFirstBlock + val exitStatements = Block.statements exitFirstBlock + val exitTransfer = Block.transfer exitFirstBlock + val exitHead = Block.T {args = exitArgs, + label = exitEntry, + statements = exitStatements, + transfer = exitTransfer} + val exitGotoLabel = Label.newNoname() + val exitGoto = Block.T {args = Vector.new0 (), + label = exitGotoLabel, + statements = Vector.new0 (), + transfer = + Transfer.Goto + {args = oldArgLabels, + dst = Block.label exitHeader'}} + val exitBlocks' = exitGoto:: + exitHeader':: + (exitHead::(listPop exitBlocks)) + + (* Expand the loop *) + val exLoopBlocks = expandLoop (oldHeader, loopBlocks, loop, + tBlock, argi, argSize, + oldArg, exBody, iterBody, + exitGotoLabel, + blockInfo, setBlockInfo) + (* Make an entry to the expanded loop *) + val exLoopEntry = + let + val (zeroVar, zeroStmt) = Loop.makeConstStmt(0, argSize) + val exLoopHeader = Block.label (List.first exLoopBlocks) + val transferArgs = + Vector.concat [oldArgLabels, Vector.new1(zeroVar)] + val newTransfer = Transfer.Goto {args = transferArgs, + dst = exLoopHeader} + in + Block.T {args = oldArgs, + label = Label.newNoname(), + statements = Vector.new1 zeroStmt, + transfer = newTransfer} + end + (* Make a replacement loop entry *) + val newEntry = Label.newNoname() + val (newHeader, argLabels) = + makeHeader (oldHeader, + Loop.makeConstants (loop, argSize, peel), + newEntry) + (* For each induction variable value, copy the loop's body *) + val newBlocks = unrollLoop (oldHeader, tBlock, argi, + loopBlocks, argLabels, exLoopEntry, + false, blockInfo, setBlockInfo) + (* Fix the first entry's label *) + val firstBlock = List.first newBlocks + val args' = Block.args firstBlock + val statements' = Block.statements firstBlock + val transfer' = Block.transfer firstBlock + val newHead = Block.T {args = args', + label = newEntry, + statements = statements', + transfer = transfer'} + val newBlocks' = newHeader::(newHead::(listPop newBlocks)) + val () = destroy() + in + (newBlocks' @ exLoopBlocks @ exitBlocks', + (Vector.toList loopBlockNames)) + end + end + end + +(* Traverse sub-forests until the innermost loop is found. *) +fun traverseSubForest ({loops, notInLoop}, + allBlocks, + enclosingHeaders, + labelNode, nodeBlock, loadGlobal, domInfo) = + if (Vector.length loops) = 0 then + optimizeLoop(allBlocks, enclosingHeaders, notInLoop, + nodeBlock, loadGlobal, domInfo, 1) + else + Vector.fold(loops, ([], []), fn (loop, (new, remove)) => + let + val (nBlocks, rBlocks) = + traverseLoop(loop, allBlocks, labelNode, nodeBlock, loadGlobal, domInfo) + in + ((new @ nBlocks), (remove @ rBlocks)) + end) + +(* Traverse loops in the loop forest. *) +and traverseLoop ({headers, child}, + allBlocks, + labelNode, nodeBlock, loadGlobal, domInfo) = + traverseSubForest ((Forest.dest child), allBlocks, + headers, labelNode, nodeBlock, loadGlobal, domInfo) + +(* Traverse the top-level loop forest. *) +fun traverseForest ({loops, notInLoop = _}, allBlocks, labelNode, nodeBlock, loadGlobal, domInfo) = + let + (* Gather the blocks to add/remove *) + val (newBlocks, blocksToRemove) = + Vector.fold(loops, ([], []), fn (loop, (new, remove)) => + let + val (nBlocks, rBlocks) = + traverseLoop(loop, allBlocks, labelNode, nodeBlock, loadGlobal, domInfo) + in + ((new @ nBlocks), (remove @ rBlocks)) + end) + val keep: Block.t -> bool = + (fn b => not (List.contains(blocksToRemove, (Block.label b), Label.equals))) + val reducedBlocks = Vector.keepAll(allBlocks, keep) + in + (Vector.toList reducedBlocks) @ newBlocks + end + +fun setDoms tree = + let + val {get = domInfo: Label.t -> Label.t list, + set = setDomInfo: Label.t * Label.t list -> unit, destroy} = + Property.destGetSet(Label.plist, + Property.initRaise("domInfo", Label.layout)) + fun loop (tree, doms) = + case tree of + Tree.T (block, children) => + (setDomInfo (Block.label block, doms) ; + Vector.foreach (children, fn tree => loop(tree, + (Block.label block)::doms))) + val () = loop (tree, []) + in + (domInfo, destroy) + end + +(* Performs the optimization on the body of a single function. *) +fun optimizeFunction loadGlobal function = + let + val {graph, labelNode, nodeBlock} = Function.controlFlow function + val {args, blocks, mayInline, name, raises, returns, start} = + Function.dest function + val fsize = Function.size (function, {sizeExp = Exp.size, sizeTransfer = Transfer.size}) + val () = logs (concat["Optimizing function: ", Func.toString name, + " of size ", Int.toString fsize]) + val root = labelNode start + val forest = Graph.loopForestSteensgaard(graph, {root = root, nodeValue = fn x => x}) + val dtree = Function.dominatorTree function + val (domInfo, destroy) = setDoms dtree + val newBlocks = traverseForest((Forest.dest forest), + blocks, labelNode, nodeBlock, loadGlobal, domInfo) + val () = destroy() + in + Function.new {args = args, + blocks = Vector.fromList(newBlocks), + mayInline = mayInline, + name = name, + raises = raises, + returns = returns, + start = start} + end + +(* Entry point. *) +fun transform (Program.T {datatypes, globals, functions, main}) = + let + fun loadGlobal (var: Var.t, signed: bool): IntInf.t option = + let + fun matchGlobal v g = + case Statement.var g of + NONE => false + | SOME (v') => Var.equals (v, v') + in + case Vector.peek (globals, matchGlobal var) of + NONE => NONE + | SOME (stmt) => + (case Statement.exp stmt of + Exp.Const c => + (case c of + Const.Word w => + if signed then + SOME(WordX.toIntInfX w) + else + SOME(WordX.toIntInf w) + | _ => NONE) + | _ => NONE) + end + val () = + List.foreach + ([loopCount, total, partial, optCount, multiHeaders, varEntryArg, + variantTransfer, unsupported, ccTransfer, varBound, infinite, boundDom], + fn c => Counter.reset (c, 0)) + val () = histogram := Histogram.new () + val () = logs (concat["Unrolling loops. Unrolling factor = ", + Int.toString (!Control.loopUnrollLimit)]) + val optimizedFunctions = List.map (functions, optimizeFunction loadGlobal) + val restore = restoreFunction {globals = globals} + val () = logs "Performing SSA restore" + val cleanedFunctions = List.map (optimizedFunctions, restore) + val shrink = shrinkFunction {globals = globals} + val () = logs "Performing shrink" + val shrunkFunctions = List.map (cleanedFunctions, shrink) + val () = logstat (loopCount, + "total innermost loops") + val () = logstat (optCount, + "loops optimized") + val () = logstat (total, + "loops completely unrolled") + val () = logstat (partial, + "loops partially unrolled") + val () = logstat (multiHeaders, + "loops had multiple headers") + val () = logstat (varEntryArg, + "variable entry values") + val () = logstat (variantTransfer, + "loops had variant transfers to the header") + val () = logstat (unsupported, + "loops had unsupported transfers to the header") + val () = logstat (ccTransfer, + "loops had non-computable steps") + val () = logstat (varBound, + "loops had variable bounds") + val () = logstat (infinite, + "infinite loops") + val () = logstat (boundDom, + "loops had non-dominating bounds") + val () = logs ("Iterations: Occurences") + val () = logs (Histogram.toString (!histogram)) + val () = logs "Done." + in + Program.T {datatypes = datatypes, + globals = globals, + functions = shrunkFunctions, + main = main} + end + +end diff -Nru mlton-20130715/mlton/ssa/loop-unswitch.fun mlton-20210117+dfsg/mlton/ssa/loop-unswitch.fun --- mlton-20130715/mlton/ssa/loop-unswitch.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/loop-unswitch.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,395 @@ +(* Copyright (C) 2016 Matthew Surawski. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +(* Moves a conditional statement outside a loop by duplicating the loops body + * under each branch of the conditional. + *) +functor LoopUnswitch (S: SSA_TRANSFORM_STRUCTS): SSA_TRANSFORM = +struct + +open S +open Exp Transfer + +structure Graph = DirectedGraph +local + open Graph +in + structure Node = Node + structure Forest = LoopForest +end + +fun ++ (v: int ref): unit = + v := (!v) + 1 + +val optCount = ref 0 +val tooBig = ref 0 +val notInvariant = ref 0 +val multiHeaders = ref 0 + +type BlockInfo = Label.t * (Var.t * Type.t) vector + +fun logli (l: Layout.t, i: int): unit = + Control.diagnostics + (fn display => + display(Layout.indent(l, i))) + +fun logsi (s: string, i: int): unit = + logli((Layout.str s), i) + +fun logs (s: string): unit = + logsi(s, 0) + +fun logstat (x: int ref, s: string): unit = + logs (concat[Int.toString(!x), " ", s]) + +(* If a block was renamed, return the new name. Otherwise return the old name. *) +fun fixLabel (getBlockInfo: Label.t -> BlockInfo, + label: Label.t, + origLabels: Label.t vector): Label.t = + if Vector.contains(origLabels, label, Label.equals) then + let + val (name, _) = getBlockInfo(label) + in + name + end + else + label + +(* Copy an entire loop. *) +fun copyLoop(blocks: Block.t vector, + blockInfo: Label.t -> BlockInfo, + setBlockInfo: Label.t * BlockInfo -> unit): Block.t vector = + let + val labels = Vector.map (blocks, Block.label) + (* Assign a new label for each block *) + val newBlocks = Vector.map (blocks, fn b => + let + val oldName = Block.label b + val oldArgs = Block.args b + val newName = Label.newNoname() + val () = setBlockInfo(oldName, (newName, oldArgs)) + in + Block.T {args = Block.args b, + label = newName, + statements = Block.statements b, + transfer = Block.transfer b} + end) + (* Rewrite the transfers of each block *) + val fixedBlocks = Vector.map (newBlocks, + fn Block.T {args, label, statements, transfer} => + let + val f = fn l => fixLabel(blockInfo, l, labels) + val newTransfer = Transfer.replaceLabel(transfer, f) + in + Block.T {args = args, + label = label, + statements = statements, + transfer = newTransfer} + end) + in + fixedBlocks + end + +(* Find all variables introduced in a block. *) +fun blockVars (block: Block.t): Var.t list = + let + val args = Vector.fold ((Block.args block), [], (fn ((var, _), lst) => var::lst)) + val stmts = Vector.fold ((Block.statements block), [], (fn (stmt, lst) => + case Statement.var stmt of + NONE => lst + | SOME(v) => v::lst)) + in + args @ stmts + end + +(* Determine if the block can be unswitched. *) +fun detectCases(block: Block.t, loopVars: Var.t list, depth: int) = + case Block.transfer block of + Case {cases, default, test} => + let + val blockName = Block.label block + val () = logsi (concat ["Evaluating ", Label.toString(blockName)], depth) + val () = logli(Transfer.layout (Block.transfer block), depth) + val testIsInvariant = not (List.contains(loopVars, test, Var.equals)) + in + if testIsInvariant then + (logsi("Can optimize!", depth) ; SOME(cases, test, default)) + else + (logsi ("Can't optimize: condition not invariant", depth) ; + ++notInvariant ; + NONE) + end + | _ => NONE + +(* Look for any optimization opportunities in the loop. *) +fun findOpportunity(loopBody: Block.t vector, + loopHeaders: Block.t vector, + depth: int) + : (((Con.t, Label.t) Cases.t * Var.t * Label.t option) * Block.t) option = + let + val vars = Vector.fold (loopBody, [], (fn (b, lst) => (blockVars b) @ lst)) + val canOptimize = Vector.keepAllMap (loopBody, + fn b => detectCases (b, vars, depth + 1)) + in + if (Vector.length loopHeaders) = 1 then + case Vector.length canOptimize of + 0 => NONE + | _ => SOME(Vector.sub(canOptimize, 0), Vector.sub(loopHeaders, 0)) + else + (logsi ("Can't optimize: loop has more than 1 header", depth) ; + ++multiHeaders ; + NONE) + end + +(* Copy a loop and set up the transfer *) +fun makeBranch (loopBody: Block.t vector, + loopHeader: Block.t, + branchLabel: Label.t, + blockInfo: Label.t -> BlockInfo, + setBlockInfo: Label.t * BlockInfo -> unit, + labelNode: Label.t -> unit Node.t, + nodeBlock: unit Node.t -> Block.t) + : Block.t vector * Label.t = + let + (* Copy the loop body *) + val loopBodyLabels = Vector.map (loopBody, Block.label) + val newLoop = copyLoop(loopBody, blockInfo, setBlockInfo) + (* Set up a goto for the loop *) + val (newLoopHeaderLabel, _) = blockInfo(Block.label loopHeader) + val newLoopArgs = Vector.map (Block.args loopHeader, + fn (v, _) => v) + val newLoopEntryTransfer = Transfer.Goto {args = newLoopArgs, + dst = newLoopHeaderLabel} + val newLoopEntryLabel = Label.newNoname() + val newLoopEntryArgs = + if Vector.contains (loopBodyLabels, branchLabel, Label.equals) then + let + val (_, args) = blockInfo(branchLabel) + in + args + end + else + let + val block = nodeBlock (labelNode branchLabel) + in + Block.args block + end + val newLoopEntry = Block.T {args = newLoopEntryArgs, + label = newLoopEntryLabel, + statements = Vector.new0(), + transfer = newLoopEntryTransfer} + + (* Return the new loop, entrypoint, and entrypoint label *) + val returnBlocks = + Vector.concat [newLoop, (Vector.new1(newLoopEntry))] + in + (returnBlocks, newLoopEntryLabel) + end + +fun shouldOptimize (cases, default, loopBlocks, depth) = + let + val loopSize' = Block.sizeV (loopBlocks, {sizeExp = Exp.size, sizeTransfer = Transfer.size}) + val loopSize = IntInf.fromInt (loopSize') + val branchCount = + IntInf.fromInt ( + (case cases of + Cases.Con v => Vector.length v + | Cases.Word (_, v) => Vector.length v) + + + (case default of + NONE => 0 + | SOME _ => 1)) + val unswitchLimit = IntInf.fromInt (!Control.loopUnswitchLimit) + val shouldUnswitch = (branchCount * loopSize) < unswitchLimit + val () = logsi ("branches * loop size < unswitch factor = can unswitch", + depth) + val () = logsi (concat[IntInf.toString branchCount, " * ", + IntInf.toString loopSize, " < ", + IntInf.toString unswitchLimit, " = ", + Bool.toString shouldUnswitch], depth) + in + shouldUnswitch + end + +(* Attempt to optimize a single loop. Returns a list of blocks to add to the program + and a list of blocks to remove from the program. *) +fun optimizeLoop(headerNodes, loopNodes, labelNode, nodeBlock, depth): + Block.t list * Label.t list = + let + val () = logsi ("At innermost loop", depth) + val headers = Vector.map (headerNodes, nodeBlock) + val blocks = Vector.map (loopNodes, nodeBlock) + val blockNames = Vector.map (blocks, Block.label) + val condLabelOpt = findOpportunity(blocks, headers, depth) + val {get = blockInfo: Label.t -> BlockInfo, + set = setBlockInfo: Label.t * BlockInfo -> unit, destroy} = + Property.destGetSet(Label.plist, + Property.initRaise("blockInfo", Label.layout)) + in + case condLabelOpt of + NONE => ([], []) + | SOME((cases, check, default), header) => + if shouldOptimize (cases, default, blocks, depth + 1) then + let + val () = ++optCount + val mkBranch = fn lbl => makeBranch(blocks, header, lbl, blockInfo, + setBlockInfo, labelNode, nodeBlock) + (* Copy the loop body for the default case if necessary *) + val (newDefaultLoop, newDefault) = + case default of + NONE => ([], NONE) + | SOME(defaultLabel) => + let + val (newLoop, newLoopEntryLabel) = mkBranch(defaultLabel) + in + (Vector.toList newLoop, SOME(newLoopEntryLabel)) + end + (* Copy the loop body for each case (except default) *) + val (newLoops, newCases) = + case cases of + Cases.Con v => + let + val newLoopCases = + Vector.map(v, + fn (con, lbl) => + let + val (newLoop, newLoopEntryLabel) = mkBranch(lbl) + val newCase = (con, newLoopEntryLabel) + in + (newLoop, newCase) + end) + val (newLoops, newCaseList) = Vector.unzip newLoopCases + val newCases = Cases.Con (newCaseList) + in + (newLoops, newCases) + end + | Cases.Word (size, v) => + let + val newLoopCases = + Vector.map(v, + fn (wrd, lbl) => + let + val (newLoop, newLoopEntryLabel) = mkBranch(lbl) + val newCase = (wrd, newLoopEntryLabel) + in + (newLoop, newCase) + end) + val (newLoops, newCaseList) = Vector.unzip newLoopCases + val newCases = Cases.Word (size, newCaseList) + in + (newLoops, newCases) + end + + (* Produce a single list of new blocks *) + val loopBlocks = Vector.fold(newLoops, newDefaultLoop, fn (loop, acc) => + acc @ (Vector.toList loop)) + + (* Produce a new entry block with the same label as the old loop header *) + val newTransfer = Transfer.Case {cases = newCases, + default = newDefault, + test = check} + val newEntry = Block.T {args = Block.args header, + label = Block.label header, + statements = Vector.new0(), + transfer = newTransfer} + val () = destroy() + in + (newEntry::loopBlocks, (Vector.toList blockNames)) + end + else + (logsi ("Can't unswitch: too big", depth) ; + ++tooBig ; + ([], [])) + end + +(* Traverse sub-forests until the innermost loop is found. *) +fun traverseSubForest ({loops, notInLoop}, + enclosingHeaders, + labelNode, nodeBlock, depth): Block.t list * Label.t list = + if (Vector.length loops) = 0 then + optimizeLoop(enclosingHeaders, notInLoop, labelNode, nodeBlock, depth) + else + Vector.fold(loops, ([], []), fn (loop, (new, remove)) => + let + val (nBlocks, rBlocks) = traverseLoop(loop, labelNode, nodeBlock, depth + 1) + in + ((new @ nBlocks), (remove @ rBlocks)) + end) + +(* Traverse loops in the loop forest. *) +and traverseLoop ({headers, child}, + labelNode, nodeBlock, depth): Block.t list * Label.t list = + traverseSubForest ((Forest.dest child), headers, labelNode, nodeBlock, depth + 1) + +(* Traverse the top-level loop forest. *) +fun traverseForest ({loops, notInLoop = _}, allBlocks, labelNode, nodeBlock): Block.t list = + let + (* Gather the blocks to add/remove *) + val (newBlocks, blocksToRemove) = + Vector.fold(loops, ([], []), fn (loop, (new, remove)) => + let + val (nBlocks, rBlocks) = traverseLoop(loop, labelNode, nodeBlock, 1) + in + ((new @ nBlocks), (remove @ rBlocks)) + end) + val keep: Block.t -> bool = + (fn b => not (List.contains(blocksToRemove, (Block.label b), Label.equals))) + val reducedBlocks = Vector.keepAll(allBlocks, keep) + in + (Vector.toList reducedBlocks) @ newBlocks + end + +(* Performs the optimization on the body of a single function. *) +fun optimizeFunction(function: Function.t): Function.t = + let + val {graph, labelNode, nodeBlock} = Function.controlFlow function + val {args, blocks, mayInline, name, raises, returns, start} = + Function.dest function + val fsize = Function.size (function, {sizeExp = Exp.size, sizeTransfer = Transfer.size}) + val () = logs (concat["Optimizing function: ", Func.toString name, + " of size ", Int.toString fsize]) + val root = labelNode start + val forest = Graph.loopForestSteensgaard(graph, {root = root, nodeValue = fn x => x}) + val newBlocks = traverseForest((Forest.dest forest), blocks, labelNode, nodeBlock) + in + Function.new {args = args, + blocks = Vector.fromList(newBlocks), + mayInline = mayInline, + name = name, + raises = raises, + returns = returns, + start = start} + end + +(* Entry point. *) +fun transform (Program.T {datatypes, globals, functions, main}) = + let + val () = optCount := 0 + val () = tooBig := 0 + val () = notInvariant := 0 + val () = multiHeaders := 0 + val () = logs "Unswitching loops" + val optimizedFunctions = List.map (functions, optimizeFunction) + val restore = restoreFunction {globals = globals} + val () = logs "Performing SSA restore" + val cleanedFunctions = List.map (optimizedFunctions, restore) + val () = logstat (optCount, + "loops optimized") + val () = logstat (tooBig, + "loops too big to unswitch") + val () = logstat (notInvariant, + "loops had variant conditions") + val () = logstat (multiHeaders, + "loops had multiple headers") + val () = logs "Done." + in + Program.T {datatypes = datatypes, + globals = globals, + functions = cleanedFunctions, + main = main} + end + +end diff -Nru mlton-20130715/mlton/ssa/multi.fun mlton-20210117+dfsg/mlton/ssa/multi.fun --- mlton-20130715/mlton/ssa/multi.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/multi.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2020 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -135,8 +136,8 @@ = let val usesThreadsOrConts = Program.hasPrim (p, fn p => - case Prim.name p of - Prim.Name.Thread_switchTo => true + case p of + Prim.Thread_switchTo => true | _ => false) (* funcNode *) @@ -215,8 +216,8 @@ | Runtime {prim, ...} => if usesThreadsOrConts andalso - (case Prim.name prim of - Prim.Name.Thread_copyCurrent => true + (case prim of + Prim.Thread_copyCurrent => true | _ => false) then (ThreadCopyCurrent.force (LabelInfo.threadCopyCurrent li) ; diff -Nru mlton-20130715/mlton/ssa/multi.sig mlton-20210117+dfsg/mlton/ssa/multi.sig --- mlton-20130715/mlton/ssa/multi.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/multi.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/n-point-lattice.fun mlton-20210117+dfsg/mlton/ssa/n-point-lattice.fun --- mlton-20130715/mlton/ssa/n-point-lattice.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/n-point-lattice.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,117 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor NPointLattice (S: N_POINT_LATTICE_STRUCTS): N_POINT_LATTICE = -struct - -open S - -val N = List.length names - 1 - -structure Set = DisjointSet - -type value = int * (unit -> unit) AppendList.t ref List.t -datatype t = T of value Set.t - -fun value (T s) = Set.! s - -fun toString e = - case value e of - (n, _) => List.nth (names, n) - -val layout = Layout.str o toString - -fun new (): t = - T (Set.singleton (0, List.duplicate (N, fn () => ref AppendList.empty))) - -fun equals (T s, T s') = Set.equals (s, s') - -fun whenN (s, n', h') = - case value s of - (n, hss) => if n' < 0 orelse n' > N - then Error.bug "NPointLattice.whenN" - else if n >= n' - then h' () - else let - val hs = List.nth (hss, n' - n - 1) - in - hs := AppendList.cons (h', !hs) - end - -fun isN (s, n') = - case value s of - (n, _) => if n' < 0 orelse n' > N - then Error.bug "NPointLattice.isN" - else n = n' - -fun up (T s) = - case Set.! s of - (n, hss) => if n = N - then () - else (Set.:= (s, (n + 1, tl hss)) ; - AppendList.foreach (!(hd hss), fn h => h ())) - -fun makeN (s, n') = - case value s of - (n, _) => if n' < 0 orelse n' > N - then Error.bug "NPointLattice.makeN" - else if n >= n' - then () - else (up s ; makeN (s, n')) - -fun from <= to = - if equals (from, to) - then () - else - case (value from, value to) of - ((n,hss), (n',_)) => - (makeN (to, n) ; - List.foreachi - (hss, fn (i,hs) => - if n + i + 1 > n' - then hs := AppendList.cons (fn () => makeN (to, n + i + 1), !hs) - else ())) - -fun == (T s, T s') = - if Set.equals (s, s') - then () - else - let - val e = Set.! s - val e' = Set.! s' - val _ = Set.union (s, s') - in - case (e, e') of - ((n,hss), (n',hss')) => - let - val n'' = Int.max (n, n') - - fun doit (n, hss) = - let - val rec drop - = fn (hss, 0: Int.t) => hss - | (hs::hss, n) => - (AppendList.foreach - (!hs, fn h => h ()) ; - drop (hss, n - 1)) - | ([], _) => Error.bug "NPointLattice.==" - in - drop (hss, n'' - n) - end - val hss = doit (n, hss) - val hss' = doit (n', hss') - val hss'' - = List.map2 - (hss, hss', fn (hs, hs') => - ref (AppendList.append (!hs, !hs'))) - in - Set.:= (s, (n'', hss'')) - end - end - -end diff -Nru mlton-20130715/mlton/ssa/n-point-lattice.sig mlton-20210117+dfsg/mlton/ssa/n-point-lattice.sig --- mlton-20130715/mlton/ssa/n-point-lattice.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/n-point-lattice.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -(* Copyright (C) 2009 Matthew Fluet. - * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature N_POINT_LATTICE_STRUCTS = - sig - (* pretty print names *) - val names: string list - end - -signature N_POINT_LATTICE = - sig - include N_POINT_LATTICE_STRUCTS - - type t - - val <= : t * t -> unit (* force rhs to be up-ed if lhs is *) - val == : t * t -> unit (* force lhs and rhs to be the same *) - val isN: t * int -> bool - val layout: t -> Layout.t - val makeN: t * int -> unit - val new: unit -> t (* a new 0 *) - val up: t -> unit - (* handler will be run once iff value becomes gte N *) - val whenN: t * int * (unit -> unit) -> unit - end diff -Nru mlton-20130715/mlton/ssa/poly-equal.fun mlton-20210117+dfsg/mlton/ssa/poly-equal.fun --- mlton-20130715/mlton/ssa/poly-equal.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/poly-equal.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2014,2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -18,7 +18,7 @@ * For each datatype tycon and vector type, it builds an equality function and * translates calls to MLton_equal into calls to that function. * - * Also generates calls to primitives intInfEqual and wordEqual. + * Also generates calls to primitive wordEqual. * * For tuples, it does the equality test inline. I.E. it does not create * a separate equality function for each tuple type. @@ -44,12 +44,6 @@ struct open DirectExp - fun add (e1: t, e2: t, s): t = - primApp {prim = Prim.wordAdd s, - targs = Vector.new0 (), - args = Vector.new2 (e1, e2), - ty = Type.word s} - fun conjoin (e1: t, e2: t): t = casee {test = e1, cases = Con (Vector.new2 ({con = Con.truee, @@ -72,8 +66,21 @@ default = NONE, ty = Type.bool} + local + fun mk prim = + fn (e1: t, e2: t, s) => + primApp {prim = prim s, + targs = Vector.new0 (), + args = Vector.new2 (e1, e2), + ty = Type.word s} + in + val add = mk Prim.Word_add + val andb = mk Prim.Word_andb + val orb = mk Prim.Word_orb + end + fun wordEqual (e1: t, e2: t, s): t = - primApp {prim = Prim.wordEqual s, + primApp {prim = Prim.Word_equal s, targs = Vector.new0 (), args = Vector.new2 (e1, e2), ty = Type.bool} @@ -105,6 +112,13 @@ set = setVectorEqualFunc, destroy = destroyVectorEqualFunc} = Property.destGetSet (Type.plist, Property.initConst NONE) + val (getIntInfEqualFunc: unit -> Func.t option, + setIntInfEqualFunc: Func.t option -> unit) = + let + val r = ref NONE + in + (fn () => !r, fn fo => r := fo) + end val returns = SOME (Vector.new1 Type.bool) val seqIndexWordSize = WordSize.seqIndex () val seqIndexTy = Type.word seqIndexWordSize @@ -135,14 +149,14 @@ {test = darg1, ty = Type.bool, default = (if Vector.exists (cons, fn {args, ...} => - 0 = Vector.length args) + Vector.isEmpty args) then SOME Dexp.falsee else NONE), cases = Dexp.Con (Vector.keepAllMap (cons, fn {con, args} => - if 0 = Vector.length args + if Vector.isEmpty args then NONE else let @@ -186,97 +200,174 @@ in name end + and mkVectorEqualFunc {name: Func.t, + ty: Type.t, doEq: bool}: unit = + let + val loop = Func.newString (Func.originalName name ^ "Loop") + (* Build two functions, one that checks the lengths and the + * other that loops. + *) + val vty = Type.vector ty + local + val vec1 = (Var.newNoname (), vty) + val vec2 = (Var.newNoname (), vty) + val args = Vector.new2 (vec1, vec2) + val dvec1 = Dexp.var vec1 + val dvec2 = Dexp.var vec2 + val len1 = (Var.newNoname (), seqIndexTy) + val dlen1 = Dexp.var len1 + val len2 = (Var.newNoname (), seqIndexTy) + val dlen2 = Dexp.var len2 + + val body = + let + fun length dvec = + Dexp.primApp {prim = Prim.Vector_length, + targs = Vector.new1 ty, + args = Vector.new1 dvec, + ty = Type.word seqIndexWordSize} + val body = + Dexp.lett + {decs = [{var = #1 len1, exp = length dvec1}, + {var = #1 len2, exp = length dvec2}], + body = + Dexp.conjoin + (Dexp.wordEqual (dlen1, dlen2, seqIndexWordSize), + Dexp.call + {func = loop, + args = Vector.new4 + (dvec1, dvec2, dlen1, + Dexp.word (WordX.zero seqIndexWordSize)), + ty = Type.bool})} + in + if doEq + then Dexp.disjoin (Dexp.eq (dvec1, dvec2, vty), body) + else body + end + val (start, blocks) = Dexp.linearize (body, Handler.Caller) + val blocks = Vector.fromList blocks + in + val _ = + newFunction {args = args, + blocks = blocks, + mayInline = true, + name = name, + raises = NONE, + returns = returns, + start = start} + end + local + val vec1 = (Var.newNoname (), vty) + val vec2 = (Var.newNoname (), vty) + val len = (Var.newNoname (), seqIndexTy) + val i = (Var.newNoname (), seqIndexTy) + val args = Vector.new4 (vec1, vec2, len, i) + val dvec1 = Dexp.var vec1 + val dvec2 = Dexp.var vec2 + val dlen = Dexp.var len + val di = Dexp.var i + val body = + let + fun sub (dvec, di) = + Dexp.primApp {prim = Prim.Vector_sub, + targs = Vector.new1 ty, + args = Vector.new2 (dvec, di), + ty = ty} + val args = + Vector.new4 + (dvec1, dvec2, dlen, + Dexp.add + (di, Dexp.word (WordX.one seqIndexWordSize), + seqIndexWordSize)) + in + Dexp.disjoin + (Dexp.wordEqual + (di, dlen, seqIndexWordSize), + Dexp.conjoin + (equalExp (sub (dvec1, di), sub (dvec2, di), ty), + Dexp.call {args = args, + func = loop, + ty = Type.bool})) + end + val (start, blocks) = Dexp.linearize (body, Handler.Caller) + val blocks = Vector.fromList blocks + in + val _ = + newFunction {args = args, + blocks = blocks, + mayInline = true, + name = loop, + raises = NONE, + returns = returns, + start = start} + end + in + () + end and vectorEqualFunc (ty: Type.t): Func.t = case getVectorEqualFunc ty of SOME f => f | NONE => let - (* Build two functions, one that checks the lengths and the - * other that loops. - *) val name = Func.newString "vectorEqual" val _ = setVectorEqualFunc (ty, SOME name) - val loop = Func.newString "vectorEqualLoop" - val vty = Type.vector ty - local - val vec1 = (Var.newNoname (), vty) - val vec2 = (Var.newNoname (), vty) - val args = Vector.new2 (vec1, vec2) - val dvec1 = Dexp.var vec1 - val dvec2 = Dexp.var vec2 - val len1 = (Var.newNoname (), seqIndexTy) - val dlen1 = Dexp.var len1 - val len2 = (Var.newNoname (), seqIndexTy) - val dlen2 = Dexp.var len2 + val () = mkVectorEqualFunc {name = name, ty = ty, doEq = true} + in + name + end + and intInfEqualFunc (): Func.t = + case getIntInfEqualFunc () of + SOME f => f + | NONE => + let + val intInfEqual = Func.newString "intInfEqual" + val _ = setIntInfEqualFunc (SOME intInfEqual) + + val bws = WordSize.bigIntInfWord () + val sws = WordSize.smallIntInfWord () + + val bigIntInfEqual = Func.newString "bigIntInfEqual" + val () = mkVectorEqualFunc {name = bigIntInfEqual, + ty = Type.word bws, + doEq = false} - val body = - let - fun length dvec = - Dexp.primApp {prim = Prim.vectorLength, - targs = Vector.new1 ty, - args = Vector.new1 dvec, - ty = Type.word seqIndexWordSize} - in - Dexp.disjoin - (Dexp.eq (dvec1, dvec2, vty), - Dexp.lett - {decs = [{var = #1 len1, exp = length dvec1}, - {var = #1 len2, exp = length dvec2}], - body = - Dexp.conjoin - (Dexp.wordEqual (dlen1, dlen2, seqIndexWordSize), - Dexp.call - {func = loop, - args = (Vector.new4 - (dvec1, dvec2, dlen1, - Dexp.word (WordX.zero seqIndexWordSize))), - ty = Type.bool})}) - end - val (start, blocks) = Dexp.linearize (body, Handler.Caller) - val blocks = Vector.fromList blocks - in - val _ = - newFunction {args = args, - blocks = blocks, - mayInline = true, - name = name, - raises = NONE, - returns = returns, - start = start} - end local - val vec1 = (Var.newNoname (), vty) - val vec2 = (Var.newNoname (), vty) - val len = (Var.newNoname (), seqIndexTy) - val i = (Var.newNoname (), seqIndexTy) - val args = Vector.new4 (vec1, vec2, len, i) - val dvec1 = Dexp.var vec1 - val dvec2 = Dexp.var vec2 - val dlen = Dexp.var len - val di = Dexp.var i + val arg1 = (Var.newNoname (), Type.intInf) + val arg2 = (Var.newNoname (), Type.intInf) + val args = Vector.new2 (arg1, arg2) + val darg1 = Dexp.var arg1 + val darg2 = Dexp.var arg2 + fun toWord dx = + Dexp.primApp + {prim = Prim.IntInf_toWord, + targs = Vector.new0 (), + args = Vector.new1 dx, + ty = Type.word sws} + fun toVector dx = + Dexp.primApp + {prim = Prim.IntInf_toVector, + targs = Vector.new0 (), + args = Vector.new1 dx, + ty = Type.vector (Type.word bws)} + val one = Dexp.word (WordX.one sws) val body = - let - fun sub (dvec, di) = - Dexp.primApp {prim = Prim.vectorSub, - targs = Vector.new1 ty, - args = Vector.new2 (dvec, di), - ty = ty} - val args = - Vector.new4 - (dvec1, dvec2, dlen, - Dexp.add - (di, Dexp.word (WordX.one seqIndexWordSize), - seqIndexWordSize)) - in - Dexp.disjoin - (Dexp.wordEqual - (di, dlen, seqIndexWordSize), - Dexp.conjoin - (equalExp (sub (dvec1, di), sub (dvec2, di), ty), - Dexp.call {args = args, - func = loop, - ty = Type.bool})) - end + Dexp.disjoin + (Dexp.eq (darg1, darg2, Type.intInf), + Dexp.casee + {test = Dexp.wordEqual (Dexp.andb (Dexp.orb (toWord darg1, toWord darg2, sws), one, sws), one, sws), + ty = Type.bool, + default = NONE, + cases = + (Dexp.Con o Vector.new2) + ({con = Con.truee, + args = Vector.new0 (), + body = Dexp.falsee}, + {con = Con.falsee, + args = Vector.new0 (), + body = + Dexp.call {func = bigIntInfEqual, + args = Vector.new2 (toVector darg1, toVector darg2), + ty = Type.bool}})}) val (start, blocks) = Dexp.linearize (body, Handler.Caller) val blocks = Vector.fromList blocks in @@ -284,13 +375,13 @@ newFunction {args = args, blocks = blocks, mayInline = true, - name = loop, + name = intInfEqual, raises = NONE, returns = returns, start = start} end in - name + intInfEqual end and equalExp (e1: Dexp.t, e2: Dexp.t, ty: Type.t): Dexp.t = Dexp.name (e1, fn x1 => @@ -304,12 +395,12 @@ targs = targs, args = Vector.new2 (dx1, dx2), ty = Type.bool} - fun eq () = prim (Prim.eq, Vector.new1 ty) + fun eq () = prim (Prim.MLton_eq, Vector.new1 ty) fun hasConstArg () = #isConst (varInfo x1) orelse #isConst (varInfo x2) in case Type.dest ty of Type.Array _ => eq () - | Type.CPointer => prim (Prim.cpointerEqual, Vector.new0 ()) + | Type.CPointer => prim (Prim.CPointer_equal, Vector.new0 ()) | Type.Datatype tycon => if isEnum tycon orelse hasConstArg () then eq () @@ -319,13 +410,15 @@ | Type.IntInf => if hasConstArg () then eq () - else prim (Prim.intInfEqual, Vector.new0 ()) + else Dexp.call {func = intInfEqualFunc (), + args = Vector.new2 (dx1, dx2), + ty = Type.bool} | Type.Real rs => let val ws = WordSize.fromBits (RealSize.bits rs) fun toWord dx = Dexp.primApp - {prim = Prim.realCastToWord (rs, ws), + {prim = Prim.Real_castToWord (rs, ws), targs = Vector.new0 (), args = Vector.new1 dx, ty = Type.word ws} @@ -360,7 +453,7 @@ args = Vector.new2 (dx1, dx2), ty = Type.bool} | Type.Weak _ => eq () - | Type.Word ws => prim (Prim.wordEqual ws, Vector.new0 ()) + | Type.Word ws => prim (Prim.Word_equal ws, Vector.new0 ()) end val _ = @@ -381,9 +474,9 @@ Const c => (case c of Const.IntInf i => - if Const.SmallIntInf.isSmall i - then const () - else () + (case Const.IntInfRep.fromIntInf i of + Const.IntInfRep.Big _ => () + | Const.IntInfRep.Small _ => const ()) | Const.Word _ => const () | _ => ()) | ConApp {args, ...} => @@ -409,9 +502,9 @@ (setBind stmt; case exp of PrimApp {prim, ...} => - (case Prim.name prim of - Prim.Name.MLton_eq => setHasEqual () - | Prim.Name.MLton_equal => setHasEqual () + (case prim of + Prim.MLton_eq => setHasEqual () + | Prim.MLton_equal => setHasEqual () | _ => ()) | _ => ())) end) @@ -449,9 +542,9 @@ in case exp of PrimApp {prim, targs, args, ...} => - (case (Prim.name prim, Vector.length targs) of - (Prim.Name.MLton_eq, 1) => - (case Type.dest (Vector.sub (targs, 0)) of + (case (prim, Vector.length targs) of + (Prim.MLton_eq, 1) => + (case Type.dest (Vector.first targs) of Type.CPointer => let val cp0 = Vector.sub (args, 0) @@ -461,7 +554,7 @@ {var = var, ty = Type.bool, exp = Exp.PrimApp - {prim = Prim.cpointerEqual, + {prim = Prim.CPointer_equal, targs = Vector.new0 (), args = Vector.new2 (cp0,cp1)}} in @@ -480,7 +573,7 @@ {var = SOME w, ty = wt, exp = Exp.PrimApp - {prim = Prim.realCastToWord (rs, ws), + {prim = Prim.Real_castToWord (rs, ws), targs = Vector.new0 (), args = Vector.new1 r}} val wordEqStmt = @@ -488,7 +581,7 @@ {var = var, ty = Type.bool, exp = Exp.PrimApp - {prim = Prim.wordEqual ws, + {prim = Prim.Word_equal ws, targs = Vector.new0 (), args = Vector.new2 (w0,w1)}} in @@ -505,14 +598,14 @@ {var = var, ty = Type.bool, exp = Exp.PrimApp - {prim = Prim.wordEqual ws, + {prim = Prim.Word_equal ws, targs = Vector.new0 (), args = Vector.new2 (w0,w1)}} in adds [wordEqStmt] end | _ => normal ()) - | (Prim.Name.MLton_equal, 1) => + | (Prim.MLton_equal, 1) => let val ty = Vector.sub (targs, 0) fun arg i = Vector.sub (args, i) diff -Nru mlton-20130715/mlton/ssa/poly-hash.fun mlton-20210117+dfsg/mlton/ssa/poly-hash.fun --- mlton-20130715/mlton/ssa/poly-hash.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/poly-hash.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009-2010 Matthew Fluet. +(* Copyright (C) 2009-2010,2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -34,7 +34,7 @@ open DirectExp fun wordFromWord (w: word, ws: WordSize.t): t = - word (WordX.fromIntInf (Word.toIntInf w, ws)) + word (WordX.fromWord (w, ws)) fun shiftInt i = word (WordX.fromIntInf (i, WordSize.shiftArg)) @@ -48,10 +48,10 @@ args = Vector.new2 (e1, e2), ty = Type.word s} in - val add = mk Prim.wordAdd - val andb = mk Prim.wordAndb - val rshift = mk (fn s => Prim.wordRshift (s, {signed = false})) - val xorb = mk Prim.wordXorb + val add = mk Prim.Word_add + val andb = mk Prim.Word_andb + val rshift = mk (fn s => Prim.Word_rshift (s, {signed = false})) + val xorb = mk Prim.Word_xorb end local fun mk prim = @@ -61,11 +61,11 @@ args = Vector.new2 (e1, e2), ty = Type.word s} in - val mul = mk Prim.wordMul + val mul = mk Prim.Word_mul end fun wordEqual (e1: t, e2: t, s): t = - primApp {prim = Prim.wordEqual s, + primApp {prim = Prim.Word_equal s, targs = Vector.new0 (), args = Vector.new2 (e1, e2), ty = Type.bool} @@ -88,7 +88,7 @@ fun extdW w = if WordSize.equals (ws, workWordSize) then w - else Dexp.primApp {prim = Prim.wordExtdToWord + else Dexp.primApp {prim = Prim.Word_extdToWord (ws, workWordSize, {signed = false}), targs = Vector.new0 (), @@ -427,7 +427,7 @@ val body = Dexp.lett {decs = [{var = #1 len, exp = - Dexp.primApp {prim = Prim.vectorLength, + Dexp.primApp {prim = Prim.Vector_length, targs = Vector.new1 ty, args = Vector.new1 dvec, ty = seqIndexTy}}], @@ -466,7 +466,7 @@ Vector.new4 (hashExp (dst, - Dexp.primApp {prim = Prim.vectorSub, + Dexp.primApp {prim = Prim.Vector_sub, targs = Vector.new1 ty, args = Vector.new2 (dvec, di), ty = ty}, @@ -526,7 +526,7 @@ val ws = WordSize.cpointer () val toWord = Dexp.primApp - {prim = Prim.cpointerToWord, + {prim = Prim.CPointer_toWord, targs = Vector.new0 (), args = Vector.new1 dx, ty = Type.word ws} @@ -543,13 +543,13 @@ val bws = WordSize.bigIntInfWord () val toWord = Dexp.primApp - {prim = Prim.intInfToWord, + {prim = Prim.IntInf_toWord, targs = Vector.new0 (), args = Vector.new1 dx, ty = Type.word sws} val toVector = Dexp.primApp - {prim = Prim.intInfToVector, + {prim = Prim.IntInf_toVector, targs = Vector.new0 (), args = Vector.new1 dx, ty = Type.vector (Type.word bws)} @@ -581,7 +581,7 @@ val ws = WordSize.fromBits (RealSize.bits rs) val toWord = Dexp.primApp - {prim = Prim.realCastToWord (rs, ws), + {prim = Prim.Real_castToWord (rs, ws), targs = Vector.new0 (), args = Vector.new1 dx, ty = Type.word ws} @@ -678,8 +678,8 @@ (statements, fn Statement.T {exp, ...} => (case exp of PrimApp {prim, ...} => - (case Prim.name prim of - Prim.Name.MLton_hash => setHasHash () + (case prim of + Prim.MLton_hash => setHasHash () | _ => ()) | _ => ())) end) @@ -713,11 +713,11 @@ in case exp of PrimApp {prim, targs, args, ...} => - (case (Prim.name prim, Vector.length targs) of - (Prim.Name.MLton_hash, 1) => + (case (prim, Vector.length targs) of + (Prim.MLton_hash, 1) => let - val ty = Vector.sub (targs, 0) - val x = Vector.sub (args, 0) + val ty = Vector.first targs + val x = Vector.first args val l = Label.newNoname () in (finish diff -Nru mlton-20130715/mlton/ssa/prepasses2.fun mlton-20210117+dfsg/mlton/ssa/prepasses2.fun --- mlton-20130715/mlton/ssa/prepasses2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/prepasses2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2005-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/prepasses2.sig mlton-20210117+dfsg/mlton/ssa/prepasses2.sig --- mlton-20130715/mlton/ssa/prepasses2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/prepasses2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2005-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/prepasses.fun mlton-20210117+dfsg/mlton/ssa/prepasses.fun --- mlton-20130715/mlton/ssa/prepasses.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/prepasses.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017 Matthew Fluet. * Copyright (C) 2005-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -22,8 +22,8 @@ * Section 19.3 of Appel's "Modern Compiler Implementation in ML".) * However, passes that require critical edges to be broken in order * to accomodate code motion (for example, PRE), should also break an - * edge that connects a block with non-functional control transfer to - * one with two or more predecessors. + * edge that connects a block with non-goto transfer to one with two + * or more predecessors. *) structure CriticalEdges = struct @@ -73,10 +73,11 @@ let val mustBreak = case transfer of - Arith _ => true - | Call _ => true - | Runtime _ => true - | _ => false + Bug => false (* no successors *) + | Goto _ => false + | Raise _ => false (* no successors *) + | Return _ => false (* no successors *) + | _ => true in setLabelInfo (label, LabelInfo.new (args, mustBreak)) end) diff -Nru mlton-20130715/mlton/ssa/prepasses.sig mlton-20210117+dfsg/mlton/ssa/prepasses.sig --- mlton-20130715/mlton/ssa/prepasses.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/prepasses.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2005-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/profile2.fun mlton-20210117+dfsg/mlton/ssa/profile2.fun --- mlton-20130715/mlton/ssa/profile2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/profile2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -23,12 +24,39 @@ val enterF = fn () => Statement.profile enterF val leaveF = ProfileExp.Leave siF val leaveF = fn () => Statement.profile leaveF + val start = + if Vector.exists + (blocks, fn Block.T {transfer, ...} => + Exn.withEscape + (fn escape => + (Transfer.foreachLabel + (transfer, fn l => + if Label.equals (l, start) + then escape true + else ()) + ; false))) + then let + val newStart = Label.new start + val _ = + List.push + (extraBlocks, + Block.T + {args = Vector.new0 (), + label = newStart, + statements = Vector.new1 (enterF ()), + transfer = Transfer.Goto {dst = start, + args = Vector.new0 ()}}) + in + newStart + end + else start val blocks = Vector.map (blocks, fn Block.T {args, label, statements, transfer} => let val (enterFL, enterL, leaveL, leaveLF) = - if Vector.length statements = 0 + if not (!Control.profileBlock) + orelse Vector.isEmpty statements then (fn () => Vector.new1 (enterF ()), fn () => Vector.new0 (), fn () => Vector.new0 (), diff -Nru mlton-20130715/mlton/ssa/profile2.sig mlton-20210117+dfsg/mlton/ssa/profile2.sig --- mlton-20130715/mlton/ssa/profile2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/profile2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/profile.fun mlton-20210117+dfsg/mlton/ssa/profile.fun --- mlton-20130715/mlton/ssa/profile.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/profile.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -23,12 +24,39 @@ val enterF = fn () => Statement.profile enterF val leaveF = ProfileExp.Leave siF val leaveF = fn () => Statement.profile leaveF + val start = + if Vector.exists + (blocks, fn Block.T {transfer, ...} => + Exn.withEscape + (fn escape => + (Transfer.foreachLabel + (transfer, fn l => + if Label.equals (l, start) + then escape true + else ()) + ; false))) + then let + val newStart = Label.new start + val _ = + List.push + (extraBlocks, + Block.T + {args = Vector.new0 (), + label = newStart, + statements = Vector.new1 (enterF ()), + transfer = Transfer.Goto {dst = start, + args = Vector.new0 ()}}) + in + newStart + end + else start val blocks = Vector.map (blocks, fn Block.T {args, label, statements, transfer} => let val (enterFL, enterL, leaveL, leaveLF) = - if Vector.length statements = 0 + if not (!Control.profileBlock) + orelse Vector.isEmpty statements then (fn () => Vector.new1 (enterF ()), fn () => Vector.new0 (), fn () => Vector.new0 (), @@ -51,7 +79,7 @@ val enterStmts = if Label.equals (label, start) then enterFL () - else enterL () + else enterL () fun doitLF () = (leaveLF (), transfer) fun doitL () = (leaveL (), transfer) fun doit () = (Vector.new0 (), transfer) diff -Nru mlton-20130715/mlton/ssa/profile.sig mlton-20210117+dfsg/mlton/ssa/profile.sig --- mlton-20130715/mlton/ssa/profile.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/profile.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/redundant.fun mlton-20210117+dfsg/mlton/ssa/redundant.fun --- mlton-20130715/mlton/ssa/redundant.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/redundant.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2012 Matthew Fluet. +(* Copyright (C) 2009,2012,2019 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -195,7 +195,7 @@ val refine = fn r => if Vector.length r > 1 then List.push (todo, r) else () val fixedPoint = fn () => - fixedPoint (!todo) + fixedPoint (!todo before todo := []) end structure Class = Element.Class @@ -493,13 +493,7 @@ exp = Exp.replaceVar (exp, loopVar)}) val transfer = case transfer of - Arith {prim, args, overflow, success, ty} => - Arith {prim = prim, - args = loopVars args, - overflow = overflow, - success = success, - ty = ty} - | Bug => Bug + Bug => Bug | Call {func, args, return} => Call {func = func, args = loopVars (keepUseful diff -Nru mlton-20130715/mlton/ssa/redundant-tests.fun mlton-20210117+dfsg/mlton/ssa/redundant-tests.fun --- mlton-20130715/mlton/ssa/redundant-tests.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/redundant-tests.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2020 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -121,12 +121,11 @@ lhs = arg a, rhs = arg b}) fun doit rel = z (rel, 0, 1) - datatype z = datatype Prim.Name.t in - case Prim.name prim of - MLton_eq => doit EQ - | Word_equal _ => doit EQ - | Word_lt (_, sg) => doit (LT sg) + case prim of + Prim.MLton_eq => doit EQ + | Prim.Word_equal _ => doit EQ + | Prim.Word_lt (_, sg) => doit (LT sg) | _ => None end fun setConst (x, c) = setVarInfo (x, Const c) @@ -147,29 +146,10 @@ exp = ConApp {con = c, args = Vector.new0 ()}}) end in - val (trueVar, t) = make Con.truee - val (falseVar, f) = make Con.falsee + val (trueVar, trueStmt) = make Con.truee + val (falseVar, falseStmt) = make Con.falsee end - local - val statements = ref [] - in - val one = - WordSize.memoize - (fn s => - let - val one = Var.newNoname () - val () = - List.push - (statements, - Statement.T {exp = Exp.Const (Const.word (WordX.one s)), - ty = Type.word s, - var = SOME one}) - in - one - end) - val ones = Vector.fromList (!statements) - end - val globals = Vector.concat [Vector.new2 (t, f), ones, globals] + val globals = Vector.concat [Vector.new2 (trueStmt, falseStmt), globals] val shrink = shrinkFunction {globals = globals} val numSimplified = ref 0 fun simplifyFunction f = @@ -324,9 +304,43 @@ Vector.map (blocks, fn Block.T {label, args, statements, transfer} => let + fun add1Eligible (x: Var.t, s: WordSize.t, sg) = + isFact (label, fn Fact.T {lhs, rel, rhs} => + case (lhs, rel, rhs) of + (Oper.Var x', Rel.LT sg', _) => + Var.equals (x, x') + andalso sg = sg' + | (Oper.Var x', Rel.LE sg', + Oper.Const c) => + Var.equals (x, x') + andalso sg = sg' + andalso + (case c of + Const.Word w => + WordX.lt + (w, WordX.max (s, sg), sg) + | _ => Error.bug "RedundantTests.add1: strange fact") + | _ => false) + fun sub1Eligible (x: Var.t, s: WordSize.t, sg) = + isFact (label, fn Fact.T {lhs, rel, rhs} => + case (lhs, rel, rhs) of + (_, Rel.LT sg', Oper.Var x') => + Var.equals (x, x') + andalso sg = sg' + | (Oper.Const c, Rel.LE sg', + Oper.Var x') => + Var.equals (x, x') + andalso sg = sg' + andalso + (case c of + Const.Word w => + WordX.gt + (w, WordX.min (s, sg), sg) + | _ => Error.bug "RedundantTests.sub1: strange fact") + | _ => false) val statements = Vector.map - (statements, fn statement as Statement.T {ty, var, ...} => + (statements, fn statement as Statement.T {ty, var, exp, ...} => let fun doit x = (Int.inc numSimplified @@ -342,6 +356,60 @@ exp = Var x}) fun falsee () = doit falseVar fun truee () = doit trueVar + + fun checkPrimApp (args, prim) = + let + fun add1 (x: Var.t, s: WordSize.t, sg) = + if add1Eligible (x, s, sg) then falsee () + else statement + fun sub1 (x: Var.t, s: WordSize.t, sg) = + if sub1Eligible (x, s, sg) then falsee () + else statement + + fun add (c: Const.t, x: Var.t, + (s, sg as {signed})) = + case c of + Const.Word i => + if WordX.isOne i + then add1 (x, s, sg) + else if signed andalso WordX.isNegOne i + then sub1 (x, s, sg) + else statement + | _ => Error.bug ("RedundantTests.add: strange const") + in + case prim of + Prim.Word_addCheckP s => + let + val x1 = Vector.sub (args, 0) + val x2 = Vector.sub (args, 1) + in + case varInfo x1 of + Const c => add (c, x2, s) + | _ => (case varInfo x2 of + Const c => add (c, x1, s) + | _ => statement) + end + | Prim.Word_subCheckP (s, sg as {signed}) => + let + val x1 = Vector.sub (args, 0) + val x2 = Vector.sub (args, 1) + in + case varInfo x2 of + Const c => + (case c of + Const.Word i => + if WordX.isOne i + then sub1 (x1, s, sg) + else if signed andalso + WordX.isNegOne i + then + add1 (x1, s, sg) + else statement + | _ => Error.bug ("RedundantTests.sub: strange const")) + | _ => statement + end + | _ => statement + end in case var of NONE => statement @@ -361,120 +429,11 @@ False => falsee () | True => truee () | Unknown => statement) - | _ => statement) + | _ => (case exp of + Exp.PrimApp {args, prim, ...} => + checkPrimApp (args, prim) + | _ => statement)) end) - val noChange = (statements, transfer) - fun arith (args: Var.t vector, - prim: Type.t Prim.t, - success: Label.t) - : Statement.t vector * Transfer.t = - let - fun simplify (prim: Type.t Prim.t, - x: Var.t, - s: WordSize.t) = - let - val res = Var.newNoname () - in - (Vector.concat - [statements, - Vector.new1 - (Statement.T - {exp = PrimApp {args = Vector.new2 (x, one s), - prim = prim, - targs = Vector.new0 ()}, - ty = Type.word s, - var = SOME res})], - Goto {args = Vector.new1 res, - dst = success}) - end - fun add1 (x: Var.t, s: WordSize.t, sg) = - if isFact (label, fn Fact.T {lhs, rel, rhs} => - case (lhs, rel, rhs) of - (Oper.Var x', Rel.LT sg', _) => - Var.equals (x, x') - andalso sg = sg' - | (Oper.Var x', Rel.LE sg', - Oper.Const c) => - Var.equals (x, x') - andalso sg = sg' - andalso - (case c of - Const.Word w => - WordX.lt - (w, WordX.max (s, sg), sg) - | _ => Error.bug "RedundantTests.add1: strange fact") - | _ => false) - then simplify (Prim.wordAdd s, x, s) - else noChange - fun sub1 (x: Var.t, s: WordSize.t, sg) = - if isFact (label, fn Fact.T {lhs, rel, rhs} => - case (lhs, rel, rhs) of - (_, Rel.LT sg', Oper.Var x') => - Var.equals (x, x') - andalso sg = sg' - | (Oper.Const c, Rel.LE sg', - Oper.Var x') => - Var.equals (x, x') - andalso sg = sg' - andalso - (case c of - Const.Word w => - WordX.gt - (w, WordX.min (s, sg), sg) - | _ => Error.bug "RedundantTests.sub1: strange fact") - | _ => false) - then simplify (Prim.wordSub s, x, s) - else noChange - fun add (c: Const.t, x: Var.t, (s, sg as {signed})) = - case c of - Const.Word i => - if WordX.isOne i - then add1 (x, s, sg) - else if signed andalso WordX.isNegOne i - then sub1 (x, s, sg) - else noChange - | _ => Error.bug "RedundantTests.add: strange const" - datatype z = datatype Prim.Name.t - in - case Prim.name prim of - Word_addCheck s => - let - val x1 = Vector.sub (args, 0) - val x2 = Vector.sub (args, 1) - in - case varInfo x1 of - Const c => add (c, x2, s) - | _ => (case varInfo x2 of - Const c => add (c, x1, s) - | _ => noChange) - end - | Word_subCheck (s, sg as {signed}) => - let - val x1 = Vector.sub (args, 0) - val x2 = Vector.sub (args, 1) - in - case varInfo x2 of - Const c => - (case c of - Const.Word w => - if WordX.isOne w - then sub1 (x1, s, sg) - else - if (signed - andalso WordX.isNegOne w) - then add1 (x1, s, sg) - else noChange - | _ => - Error.bug "RedundantTests.sub: strage const") - | _ => noChange - end - | _ => noChange - end - val (statements, transfer) = - case transfer of - Arith {args, prim, success, ...} => - arith (args, prim, success) - | _ => noChange in Block.T {label = label, args = args, diff -Nru mlton-20130715/mlton/ssa/ref-flatten.fun mlton-20210117+dfsg/mlton/ssa/ref-flatten.fun --- mlton-20130715/mlton/ssa/ref-flatten.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ref-flatten.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,8 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017,2019-2020 Matthew Fluet. * Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -170,7 +170,7 @@ ref (if Vector.exists (Prod.dest args, fn {elt, isMutable} => isMutable andalso not (isUnit elt)) - andalso not (ObjectCon.isVector con) + andalso not (ObjectCon.isSequence con) then Unknown else NotFlat) in @@ -330,7 +330,7 @@ val args = Prod.map (args, makeTypeValue) val mayFlatten = Vector.exists (Prod.dest args, #isMutable) - andalso not (ObjectCon.isVector con) + andalso not (ObjectCon.isSequence con) in if mayFlatten orelse needToMakeProd args then Make (fn () => @@ -360,8 +360,8 @@ in v end)) + | Sequence => doit () | Tuple => doit () - | Vector => doit () end | Weak t => (case makeTypeValue t of @@ -430,7 +430,6 @@ | Make _ => Value.weak v fun arg i = Vector.sub (args, i) fun result () = typeValue resultType - datatype z = datatype Prim.Name.t fun dontFlatten () = (Vector.foreach (args, Value.dontFlatten) ; result ()) @@ -438,8 +437,25 @@ (Value.unify (arg 0, arg 1) ; result ()) in - case Prim.name prim of - Array_toVector => + case prim of + Prim.Array_toArray => + let + val res = result () + datatype z = datatype Value.value + val () = + case (Value.value (arg 0), Value.value res) of + (Ground _, Ground _) => () + | (Object (Obj {args = a, ...}), + Object (Obj {args = a', ...})) => + Vector.foreach2 + (Prod.dest a, Prod.dest a', + fn ({elt = v, ...}, {elt = v', ...}) => + Value.unify (v, v')) + | _ => Error.bug "RefFlatten.primApp: Array_toArray" + in + res + end + | Prim.Array_toVector => let val res = result () datatype z = datatype Value.value @@ -456,17 +472,17 @@ in res end - | FFI _ => + | Prim.CFunction _ => (* Some imports, like Real64.modf, take ref cells that can not * be flattened. *) dontFlatten () - | MLton_eq => equal () - | MLton_equal => equal () - | MLton_size => dontFlatten () - | MLton_share => dontFlatten () - | Weak_get => deWeak (arg 0) - | Weak_new => + | Prim.MLton_eq => equal () + | Prim.MLton_equal => equal () + | Prim.MLton_size => dontFlatten () + | Prim.MLton_share => dontFlatten () + | Prim.Weak_get => deWeak (arg 0) + | Prim.Weak_new => let val a = arg 0 in (Value.dontFlatten a; weak a) end @@ -475,7 +491,7 @@ fun base b = case b of Base.Object obj => obj - | Base.VectorSub {vector, ...} => vector + | Base.SequenceSub {sequence, ...} => sequence fun select {base, offset} = let datatype z = datatype Value.value @@ -497,6 +513,20 @@ *) ; Value.dontFlatten value) fun const c = typeValue (Type.ofConst c) + fun sequence {args, resultType} = + let + val v = typeValue resultType + val _ = + Vector.foreach + (args, fn args => + Vector.foreachi + (Prod.dest args, fn (offset, {elt, ...}) => + update {base = v, + offset = offset, + value = elt})) + in + v + end val {func, value = varValue, ...} = analyze {base = base, coerce = coerce, @@ -511,6 +541,7 @@ program = program, select = fn {base, offset, ...} => select {base = base, offset = offset}, + sequence = sequence, update = update, useFromTypeOnBinds = false} val varObject = Value.deObject o varValue @@ -590,7 +621,7 @@ else i := Unflattenable | Unflattenable => () end - | Base.VectorSub _ => ())) + | Base.SequenceSub _ => ())) | _ => Statement.foreachUse (s, use) val loopStatement = Trace.trace2 @@ -697,7 +728,7 @@ * approximate liveness), then don't allow the flattening to * happen. * - * Vectors may be objects of unbounded size. + * Sequences may be objects of unbounded size. * Weak pointers may not be objects of unbounded size; weak * pointers do not keep pointed-to object live. * Instances of recursive datatypes may be objects of unbounded @@ -779,7 +810,7 @@ | Datatype tc => Size.<= (tyconSize tc, s) | IntInf => Size.makeTop s | Object {args, con, ...} => - if ObjectCon.isVector con + if ObjectCon.isSequence con then Size.makeTop s else Prod.foreach (args, dependsOn) | Real _ => () @@ -1047,7 +1078,7 @@ {base = base, offset = (objectOffset (obj, offset))}))) - | Base.VectorSub _ => make exp)) + | Base.SequenceSub _ => make exp)) | _ => make exp end fun transformStatement (s: Statement.t): Statement.t vector = @@ -1075,7 +1106,7 @@ offset = objectOffset (obj, offset), value = value} end) - | Base.VectorSub _ => s) + | Base.SequenceSub _ => s) val transformStatement = Trace.trace ("RefFlatten.transformStatement", Statement.layout, diff -Nru mlton-20130715/mlton/ssa/remove-unused2.fun mlton-20210117+dfsg/mlton/ssa/remove-unused2.fun --- mlton-20130715/mlton/ssa/remove-unused2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/remove-unused2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -364,8 +364,8 @@ val () = case con of Con con => visitCon con + | Sequence => () | Tuple => () - | Vector => () in () end @@ -460,8 +460,8 @@ val () = case con of Con con => deconCon con + | Sequence => default () | Tuple => default () - | Vector => default () in () end @@ -483,23 +483,23 @@ () end val () = - case Prim.name prim of - Prim.Name.MLton_eq => + case prim of + Prim.MLton_eq => (* MLton_eq may be used on datatypes used as enums. *) - deconType (tyVar (Vector.sub (args, 0))) - | Prim.Name.MLton_equal => + deconType (tyVar (Vector.first args)) + | Prim.MLton_equal => (* MLton_equal will be expanded by poly-equal into uses * of constructors as patterns. *) - deconType (tyVar (Vector.sub (args, 0))) - | Prim.Name.MLton_hash => + deconType (tyVar (Vector.first args)) + | Prim.MLton_hash => (* MLton_hash will be expanded by poly-hash into uses * of constructors as patterns. *) - deconType (tyVar (Vector.sub (args, 0))) + deconType (tyVar (Vector.first args)) (* - | Prim.Name.MLton_size => - deconType (tyVar (Vector.sub (args, 0))) + | Prim.MLton_size => + deconType (tyVar (Vector.first args)) *) | _ => () in @@ -530,16 +530,17 @@ in () end - | Tuple => () - | Vector => Error.bug "RemoveUnused2.visitExp: Select:non-Con|Tuple") + | Sequence => Error.bug "RemoveUnused2.visitExp: Select:non-Con|Tuple" + | Tuple => ()) | _ => Error.bug "RemovUnused2.visitExp: Select:non-Object" in () end - | VectorSub {index, vector} => + | SequenceSub {index, sequence} => (visitVar index - ; visitVar vector) + ; visitVar sequence) end + | Sequence {args} => Vector.foreach (args, visitVars) | Var x => visitVar x val visitExpTh = fn e => fn () => visitExp e fun maybeVisitVarExp (var, exp) = @@ -577,24 +578,19 @@ ; visitVar base ; visitVar value)) end + | Sequence => Error.bug "RemoveUnused2.visitStatement: Update:non-Con|Tuple" | Tuple => (visitVar base - ; visitVar value) - | Vector => Error.bug "RemoveUnused2.visitStatement: Update:non-Con|Tuple") + ; visitVar value)) | _ => Error.bug "RemoveUnused2.visitStatement: Update:non-Object") - | VectorSub {index, vector} => + | SequenceSub {index, sequence} => (visitVar index - ; visitVar vector + ; visitVar sequence ; visitVar value) end fun visitTransfer (t: Transfer.t, fi: FuncInfo.t) = case t of - Arith {args, overflow, success, ty, ...} => - (visitVars args - ; visitLabel overflow - ; visitLabel success - ; visitType ty) - | Bug => () + Bug => () | Call {args, func, return} => let datatype u = None @@ -683,7 +679,7 @@ (Vector.foreach (cs, visitLabel o #2) ; Option.app (default, visitLabel)) | Cases.Con cases => - if Vector.length cases = 0 + if Vector.isEmpty cases then Option.app (default, visitLabel) else let val () = @@ -935,8 +931,6 @@ in (x, t) end)) - val getArithOverflowWrapperLabel = getOriginalWrapperLabel - val getArithSuccessWrapperLabel = getOriginalWrapperLabel val getRuntimeWrapperLabel = getOriginalWrapperLabel fun getBugFunc (fi: FuncInfo.t): Label.t = (* Can't share the Bug block across different places because the @@ -1156,8 +1150,8 @@ Select {base = Base.Object base, offset = offset} end - | Tuple => e - | Vector => Error.bug "RemoveUnused2.simplifyExp: Update:non-Con|Tuple") + | Sequence => Error.bug "RemoveUnused2.simplifyExp: Update:non-Con|Tuple" + | Tuple => e) | _ => Error.bug "RemoveUnused2.simplifyExp:Select:non-Object" end | _ => e @@ -1226,8 +1220,8 @@ end else NONE end - | Tuple => SOME s - | Vector => Error.bug "RemoveUnused2.simplifyStatement: Update:non-Con|Tuple") + | Sequence => Error.bug "RemoveUnused2.simplifyStatement: Update:non-Con|Tuple" + | Tuple => SOME s) | _ => Error.bug "RemoveUnused2.simplifyStatement: Select:non-Object" end | _ => SOME s @@ -1236,13 +1230,7 @@ Vector.keepAllMap (ss, simplifyStatement) fun simplifyTransfer (t: Transfer.t, fi: FuncInfo.t): Transfer.t = case t of - Arith {prim, args, overflow, success, ty} => - Arith {prim = prim, - args = args, - overflow = getArithOverflowWrapperLabel overflow, - success = getArithSuccessWrapperLabel success, - ty = simplifyType ty} - | Bug => Bug + Bug => Bug | Call {func, args, return} => let val fi' = funcInfo func @@ -1357,7 +1345,7 @@ in case default of NONE => none () - | SOME l => if Vector.length cases = 0 + | SOME l => if Vector.isEmpty cases then if LabelInfo.isUsed (labelInfo l) then Goto {dst = l, args = Vector.new0 ()} else Bug diff -Nru mlton-20130715/mlton/ssa/remove-unused.fun mlton-20210117+dfsg/mlton/ssa/remove-unused.fun --- mlton-20130715/mlton/ssa/remove-unused.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/remove-unused.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -432,23 +432,23 @@ () end val () = - case Prim.name prim of - Prim.Name.MLton_eq => + case prim of + Prim.MLton_eq => (* MLton_eq may be used on datatypes used as enums. *) - deconType (tyVar (Vector.sub (args, 0))) - | Prim.Name.MLton_equal => + deconType (tyVar (Vector.first args)) + | Prim.MLton_equal => (* MLton_equal will be expanded by poly-equal into uses * of constructors as patterns. *) - deconType (tyVar (Vector.sub (args, 0))) - | Prim.Name.MLton_hash => + deconType (tyVar (Vector.first args)) + | Prim.MLton_hash => (* MLton_hash will be expanded by poly-hash into uses * of constructors as patterns. *) - deconType (tyVar (Vector.sub (args, 0))) + deconType (tyVar (Vector.first args)) (* - | Prim.Name.MLton_size => - deconType (tyVar (Vector.sub (args, 0))) + | Prim.MLton_size => + deconType (tyVar (Vector.first args)) *) | _ => () in @@ -470,12 +470,7 @@ else maybeVisitVarExp (var, exp)) fun visitTransfer (t: Transfer.t, fi: FuncInfo.t) = case t of - Arith {args, overflow, success, ty, ...} => - (visitVars args - ; visitLabel overflow - ; visitLabel success - ; visitType ty) - | Bug => () + Bug => () | Call {args, func, return} => let datatype u = None @@ -563,7 +558,7 @@ (Vector.foreach (cs, visitLabel o #2) ; Option.app (default, visitLabel)) | Cases.Con cases => - if Vector.length cases = 0 + if Vector.isEmpty cases then Option.app (default, visitLabel) else let val () = @@ -816,8 +811,6 @@ in (x, t) end)) - val getArithOverflowWrapperLabel = getOriginalWrapperLabel - val getArithSuccessWrapperLabel = getOriginalWrapperLabel val getRuntimeWrapperLabel = getOriginalWrapperLabel fun getBugFunc (fi: FuncInfo.t): Label.t = (* Can't share the Bug block across different places because the @@ -1011,13 +1004,7 @@ Vector.keepAllMap (ss, simplifyStatement) fun simplifyTransfer (t: Transfer.t, fi: FuncInfo.t): Transfer.t = case t of - Arith {prim, args, overflow, success, ty} => - Arith {prim = prim, - args = args, - overflow = getArithOverflowWrapperLabel overflow, - success = getArithSuccessWrapperLabel success, - ty = simplifyType ty} - | Bug => Bug + Bug => Bug | Call {func, args, return} => let val fi' = funcInfo func @@ -1132,7 +1119,7 @@ in case default of NONE => none () - | SOME l => if Vector.length cases = 0 + | SOME l => if Vector.isEmpty cases then if LabelInfo.isUsed (labelInfo l) then Goto {dst = l, args = Vector.new0 ()} else Bug diff -Nru mlton-20130715/mlton/ssa/restore2.fun mlton-20210117+dfsg/mlton/ssa/restore2.fun --- mlton-20130715/mlton/ssa/restore2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/restore2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017,2019 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -26,6 +26,12 @@ functor Restore2 (S: RESTORE2_STRUCTS): RESTORE2 = struct +structure Control = + struct + open Control + fun diagnostics _ = () + end + open S open Exp Transfer @@ -239,18 +245,17 @@ else () (* init violations *) - val index = ref 0 + val index = Counter.new 0 val violations = Vector.fromListMap (!violations, fn x => let val vi = varInfo x - val _ = VarInfo.index vi := (!index) - val _ = Int.inc index + val _ = VarInfo.index vi := (Counter.next index) in x end) - val numViolations = !index + val numViolations = Counter.value index (* Diagnostics *) val _ = Control.diagnostics @@ -517,56 +522,47 @@ exp = exp} end local - type t = {dst: Label.t, - phiArgs: Var.t vector, - route: Label.t, - hash: Word.t} - val routeTable : t HashSet.t = HashSet.new {hash = #hash} + val routeTable: ({dst: Label.t, phiArgs: Var.t vector}, Label.t) HashTable.t = + HashTable.new {equals = (fn ({dst = dst1, phiArgs = phiArgs1}, + {dst = dst2, phiArgs = phiArgs2}) => + Label.equals (dst1, dst2) + andalso + Vector.equals (phiArgs1, phiArgs2, Var.equals)), + hash = (fn {dst, phiArgs} => + Hash.combine (Label.hash dst, Hash.vectorMap (phiArgs, Var.hash)))} in fun route dst = let val li = labelInfo dst val phiArgs = LabelInfo.phiArgs' li in - if Vector.length phiArgs = 0 + if Vector.isEmpty phiArgs then dst else let val phiArgs = Vector.map - (phiArgs, valOf o VarInfo.peekVar o varInfo) - val hash = Vector.fold - (phiArgs, Label.hash dst, fn (x, h) => - Word.xorb(Var.hash x, h)) - val {route, ...} - = HashSet.lookupOrInsert - (routeTable, hash, - fn {dst = dst', phiArgs = phiArgs', ... } => - Label.equals (dst, dst') - andalso - Vector.equals (phiArgs, phiArgs', Var.equals), - fn () => - let - val route = Label.new dst - val args = Vector.map - (LabelInfo.args' li, fn (x,ty) => - (Var.new x, ty)) - val args' = Vector.concat - [Vector.map(args, #1), - phiArgs] - val block = Block.T - {label = route, - args = args, - statements = Vector.new0 (), - transfer = Goto {dst = dst, - args = args'}} - val _ = List.push (blocks, block) - in - {dst = dst, - phiArgs = phiArgs, - route = route, - hash = hash} - end) + (phiArgs, valOf o VarInfo.peekVar o varInfo) in - route + HashTable.lookupOrInsert + (routeTable, {dst = dst, phiArgs = phiArgs}, + fn () => + let + val route = Label.new dst + val args = Vector.map + (LabelInfo.args' li, fn (x,ty) => + (Var.new x, ty)) + val args' = Vector.concat + [Vector.map(args, #1), + phiArgs] + val block = Block.T + {label = route, + args = args, + statements = Vector.new0 (), + transfer = Goto {dst = dst, + args = args'}} + val _ = List.push (blocks, block) + in + route + end) end end end @@ -627,7 +623,7 @@ val args = args val post = post end - val _ = Tree.traverse (Function.dominatorTree f, visitBlock) + val _ = Tree.traverse (dt, visitBlock) val _ = post () in Function.new {args = args, diff -Nru mlton-20130715/mlton/ssa/restore2.sig mlton-20210117+dfsg/mlton/ssa/restore2.sig --- mlton-20130715/mlton/ssa/restore2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/restore2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/restore.fun mlton-20210117+dfsg/mlton/ssa/restore.fun --- mlton-20130715/mlton/ssa/restore.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/restore.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -26,6 +26,12 @@ functor Restore (S: RESTORE_STRUCTS): RESTORE = struct +structure Control = + struct + open Control + fun diagnostics _ = () + end + open S open Exp Transfer @@ -240,18 +246,17 @@ else () (* init violations *) - val index = ref 0 + val index = Counter.new 0 val violations = Vector.fromListMap (!violations, fn x => let val vi = varInfo x - val _ = VarInfo.index vi := (!index) - val _ = Int.inc index + val _ = VarInfo.index vi := (Counter.next index) in x end) - val numViolations = !index + val numViolations = Counter.value index (* Diagnostics *) val _ = Control.diagnostics @@ -518,56 +523,47 @@ exp = exp} end local - type t = {dst: Label.t, - phiArgs: Var.t vector, - route: Label.t, - hash: Word.t} - val routeTable : t HashSet.t = HashSet.new {hash = #hash} + val routeTable: ({dst: Label.t, phiArgs: Var.t vector}, Label.t) HashTable.t = + HashTable.new {equals = (fn ({dst = dst1, phiArgs = phiArgs1}, + {dst = dst2, phiArgs = phiArgs2}) => + Label.equals (dst1, dst2) + andalso + Vector.equals (phiArgs1, phiArgs2, Var.equals)), + hash = (fn {dst, phiArgs} => + Hash.combine (Label.hash dst, Hash.vectorMap (phiArgs, Var.hash)))} in fun route dst = let val li = labelInfo dst val phiArgs = LabelInfo.phiArgs' li in - if Vector.length phiArgs = 0 + if Vector.isEmpty phiArgs then dst else let val phiArgs = Vector.map (phiArgs, valOf o VarInfo.peekVar o varInfo) - val hash = Vector.fold - (phiArgs, Label.hash dst, fn (x, h) => - Word.xorb(Var.hash x, h)) - val {route, ...} - = HashSet.lookupOrInsert - (routeTable, hash, - fn {dst = dst', phiArgs = phiArgs', ... } => - Label.equals (dst, dst') - andalso - Vector.equals (phiArgs, phiArgs', Var.equals), - fn () => - let - val route = Label.new dst - val args = Vector.map - (LabelInfo.args' li, fn (x,ty) => - (Var.new x, ty)) - val args' = Vector.concat - [Vector.map(args, #1), - phiArgs] - val block = Block.T - {label = route, - args = args, - statements = Vector.new0 (), - transfer = Goto {dst = dst, - args = args'}} - val _ = List.push (blocks, block) - in - {dst = dst, - phiArgs = phiArgs, - route = route, - hash = hash} - end) in - route + HashTable.lookupOrInsert + (routeTable, {dst = dst, phiArgs = phiArgs}, + fn () => + let + val route = Label.new dst + val args = Vector.map + (LabelInfo.args' li, fn (x,ty) => + (Var.new x, ty)) + val args' = Vector.concat + [Vector.map(args, #1), + phiArgs] + val block = Block.T + {label = route, + args = args, + statements = Vector.new0 (), + transfer = Goto {dst = dst, + args = args'}} + val _ = List.push (blocks, block) + in + route + end) end end end @@ -628,7 +624,7 @@ val args = args val post = post end - val _ = Tree.traverse (Function.dominatorTree f, visitBlock) + val _ = Tree.traverse (dt, visitBlock) val _ = post () in Function.new {args = args, diff -Nru mlton-20130715/mlton/ssa/restore.sig mlton-20210117+dfsg/mlton/ssa/restore.sig --- mlton-20130715/mlton/ssa/restore.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/restore.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/share-zero-vec.fun mlton-20210117+dfsg/mlton/ssa/share-zero-vec.fun --- mlton-20130715/mlton/ssa/share-zero-vec.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/share-zero-vec.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,233 @@ +(* Copyright (C) 2017,2019-2020 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor ShareZeroVec (S: SSA_TRANSFORM_STRUCTS): SSA_TRANSFORM = +struct + +open S +open Exp + +fun transform (Program.T {datatypes, globals, functions, main}) = + let + val seqIndexSize = WordSize.seqIndex () + val seqIndexTy = Type.word seqIndexSize + val (zeroVar, globals) = + case Vector.peekMap (globals, fn Statement.T {var, ty, exp} => + case (var, exp) of + (SOME var, Exp.Const (Const.Word w)) => + if WordX.isZero w + andalso Type.equals (seqIndexTy, ty) + then SOME var + else NONE + | _ => NONE) of + SOME zeroVar => (zeroVar, globals) + | _ => let + val zeroVar = Var.newString "zero" + val zeroVarStmt = + Statement.T + {var = SOME zeroVar, + ty = seqIndexTy, + exp = Exp.Const (Const.word (WordX.zero seqIndexSize))} + in + (zeroVar, Vector.concat [globals, Vector.new1 zeroVarStmt]) + end + + val shrink = shrinkFunction {globals = globals} + + (* initialize a HashTable for new zero-length array globals *) + val newGlobals = ref [] + local + val hs: (Type.t, Var.t) HashTable.t = + HashTable.new {hash = Type.hash, equals = Type.equals} + in + fun getZeroArrVar (ty: Type.t): Var.t = + HashTable.lookupOrInsert + (hs, ty, + fn () => + let + val zeroArrVar = Var.newString "zeroArr" + val statement = + Statement.T + {var = SOME zeroArrVar, + ty = Type.array ty, + exp = PrimApp + {args = Vector.new0 (), + prim = Prim.Array_array, + targs = Vector.new1 ty}} + val () = List.push (newGlobals, statement) + in + zeroArrVar + end) + end + + (* splitStmts (stmts, arrVars) + * returns (preStmts, (arrVar, arrTy, eltTy, lenVar), postStmts) + * when stmts = ...pre... + * val arrVar: arrTy = Array_alloc(eltTy) (lenVar) + * ...post... + * and arrVar in arrVars + *) + fun splitStmts (stmts, arrVars) = + case Vector.peekMapi + (stmts, fn Statement.T {var, ty, exp} => + case exp of + PrimApp ({prim, args, targs}) => + (case (var, prim) of + (SOME var, Prim.Array_alloc {raw = false}) => + if List.contains (arrVars, var, Var.equals) + then SOME (var, ty, + Vector.first targs, + Vector.first args) + else NONE + | _ => NONE) + | _ => NONE) of + NONE => NONE + | SOME (i, (arrVar, arrTy, eltTy, lenVar)) => + SOME (Vector.prefix (stmts, i), + (* val arrVar: arrTy = Array_alloc(eltTy) (lenVar) *) + (arrVar, arrTy, eltTy, lenVar), + Vector.dropPrefix (stmts, i + 1)) + + fun transformBlock (block, arrVars) = + case splitStmts (Block.statements block, arrVars) of + NONE => NONE + | SOME (preStmts, (arrVar, arrTy, eltTy, lenVar), postStmts) => + let + val Block.T {label, args, transfer, ...} = block + val ifZeroLab = Label.newString "L_zeroLen" + val ifNonZeroLab = Label.newString "L_nonZeroLen" + val joinLab = Label.newString "L_join" + + (* new block up to Array_alloc match *) + val preBlock = + let + val isZeroVar = Var.newString "isZero" + val newStatements = + Vector.new1 + (Statement.T + {var = SOME isZeroVar, + ty = Type.bool, + exp = PrimApp + {args = Vector.new2 (zeroVar, lenVar), + prim = Prim.Word_equal seqIndexSize, + targs = Vector.new0 ()}}) + val transfer = + Transfer.Case + {cases = (Cases.Con o Vector.new2) + ((Con.truee, ifZeroLab), + (Con.falsee, ifNonZeroLab)), + default = NONE, + test = isZeroVar} + in + Block.T {label = label, + args = args, + statements = Vector.concat [preStmts, + newStatements], + transfer = transfer} + end + + (* new block for if zero array *) + val ifZeroBlock = + let + val transfer = + Transfer.Goto + {args = Vector.new1 (getZeroArrVar eltTy), + dst = joinLab} + in + Block.T {label = ifZeroLab, + args = Vector.new0 (), + statements = Vector.new0 (), + transfer = transfer} + end + + (* new block for if non-zero array *) + val ifNonZeroBlock = + let + val arrVar' = Var.new arrVar + val statements = + Vector.new1 + (Statement.T + {var = SOME arrVar', + ty = arrTy, + exp = PrimApp + {args = Vector.new1 lenVar, + prim = Prim.Array_alloc {raw = false}, + targs = Vector.new1 eltTy}}) + val transfer = + Transfer.Goto + {args = Vector.new1 arrVar', + dst = joinLab} + in + Block.T {label = ifNonZeroLab, + args = Vector.new0 (), + statements = statements, + transfer = transfer} + end + + (* new block with statements following match *) + val joinBlock = + Block.T {label = joinLab, + args = Vector.new1 (arrVar, arrTy), + statements = postStmts, + transfer = transfer} + in + SOME (preBlock, ifZeroBlock, ifNonZeroBlock, joinBlock) + end + + val functions = + List.revMap + (functions, fn f => + let + val {args, blocks, mayInline, name, raises, returns, start} = + Function.dest f + + (* analysis: compile a list of array vars cast to vectors *) + val arrVars = + Vector.fold + (blocks, [], fn (Block.T {statements, ...}, acc) => + Vector.fold + (statements, acc, fn (Statement.T {exp, ...}, acc) => + case exp of + PrimApp ({prim, args, ...}) => + (case prim of + Prim.Array_toVector => + (Vector.first args)::acc + | _ => acc) + | _ => acc)) + in + if List.isEmpty arrVars + then f (* no Array_toVector found in the function *) + else (* transformation: branch and join at Array_alloc *) + let + fun doBlock (b, acc) = + case transformBlock (b, arrVars) of + NONE => b::acc + | SOME (preBlock, + ifZeroBlock, ifNonZeroBlock, + joinBlock) => + doBlock (joinBlock, + ifNonZeroBlock::ifZeroBlock::preBlock::acc) + val blocks = Vector.fold (blocks, [], doBlock) + val blocks = Vector.fromListRev blocks + in + shrink (Function.new {args = args, + blocks = blocks, + mayInline = mayInline, + name = name, + raises = raises, + returns = returns, + start = start}) + end + end) + val globals = Vector.concat [globals, Vector.fromList (!newGlobals)] + in + Program.T {datatypes = datatypes, + globals = globals, + functions = functions, + main = main} + end + +end diff -Nru mlton-20130715/mlton/ssa/shrink2.fun mlton-20210117+dfsg/mlton/ssa/shrink2.fun --- mlton-20130715/mlton/ssa/shrink2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/shrink2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2011 Matthew Fluet. +(* Copyright (C) 2009,2011,2017,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -132,7 +132,7 @@ Block | Bug | Case of {canMove: Statement.t list, - cases: Cases.t, + cases: (Con.t, Label.t) Cases.t, default: Label.t option} | Goto of {canMove: Statement.t list, dst: t, @@ -369,13 +369,8 @@ end in case transfer of - Arith {args, overflow, success, ...} => - (incVars args - ; incLabel overflow - ; incLabel success - ; normal ()) - | Bug => - if 0 = Vector.length statements + Bug => + if Vector.isEmpty statements andalso (case returns of NONE => true | SOME ts => @@ -405,7 +400,7 @@ andalso not (Array.sub (isHeader, i)) andalso 1 = Vector.length args andalso 1 = numVarOccurrences test - andalso Var.equals (test, #1 (Vector.sub (args, 0))) + andalso Var.equals (test, #1 (Vector.first args)) then doit (LabelMeaning.Case {canMove = canMove (), cases = cases, @@ -423,7 +418,7 @@ then (incLabelMeaning m ; normal ()) else - if 0 = Vector.length statements + if Vector.isEmpty statements andalso Vector.equals (args, actuals, fn ((x, _), x') => Var.equals (x, x') @@ -523,13 +518,13 @@ Block.args (Vector.sub (blocks, LabelMeaning.blockIndex m)) fun save (f, s) = let - val {destroy, graph, ...} = - Function.layoutDot (f, fn _ => NONE) + val {destroy, controlFlowGraph, ...} = + Function.layoutDot (f, Var.layout) in File.withOut (concat ["/tmp/", Func.toString (Function.name f), ".", s, ".dot"], - fn out => Layout.outputl (graph, out)) + fn out => Layout.outputl (controlFlowGraph, out)) ; destroy () end val () = if true then () else save (f, "pre") @@ -804,62 +799,7 @@ traceSimplifyTransfer (fn (t: Transfer.t) => case t of - Arith {prim, args, overflow, success, ty} => - let - val args = varInfos args - in - case primApp (prim, args) of - Prim.ApplyResult.Const c => - let - val () = deleteLabel overflow - val x = Var.newNoname () - val isUsed = ref false - val vi = - VarInfo.T {isUsed = isUsed, - numOccurrences = ref 0, - ty = SOME ty, - value = ref (SOME (Value.Const c)), - var = x} - val (ss, t) = goto (success, Vector.new1 vi) - val ss = - if !isUsed - then Bind {var = SOME x, - ty = Type.ofConst c, - exp = Exp.Const c} :: ss - else ss - in - (ss, t) - end - | Prim.ApplyResult.Var x => - let - val () = deleteLabel overflow - in - goto (success, Vector.new1 x) - end - | Prim.ApplyResult.Overflow => - let - val () = deleteLabel success - in - goto (overflow, Vector.new0 ()) - end - | Prim.ApplyResult.Apply (prim, args) => - let - val args = Vector.fromList args - in - ([], Arith {prim = prim, - args = uses args, - overflow = simplifyLabel overflow, - success = simplifyLabel success, - ty = ty}) - end - | _ => - ([], Arith {prim = prim, - args = uses args, - overflow = simplifyLabel overflow, - success = simplifyLabel success, - ty = ty}) - end - | Bug => ([], Bug) + Bug => ([], Bug) | Call {func, args, return} => let val (statements, return) = @@ -876,7 +816,7 @@ fn (i, Position.Formal i') => i = i' | _ => false) val m = labelMeaning cont - fun nonTail () = + fun nonTail handler = let val () = forceMeaningBlock m val handler = @@ -896,33 +836,35 @@ fun tail statements = (deleteLabelMeaning m ; (statements, Return.Tail)) - fun cont handlerEta = + fun cont (handler, handlerEta) = case LabelMeaning.aux m of LabelMeaning.Bug => (case handlerEta of - NONE => nonTail () + NONE => nonTail handler | SOME canMove => tail canMove) | LabelMeaning.Return {args, canMove} => if isEta (m, args) then tail canMove - else nonTail () - | _ => nonTail () - + else nonTail handler + | _ => nonTail handler in case handler of - Handler.Caller => cont NONE - | Handler.Dead => cont NONE + Handler.Caller => cont (handler, NONE) + | Handler.Dead => cont (handler, NONE) | Handler.Handle l => let val m = labelMeaning l in case LabelMeaning.aux m of - LabelMeaning.Bug => cont NONE + LabelMeaning.Bug => cont (handler, NONE) | LabelMeaning.Raise {args, canMove} => if isEta (m, args) - then cont (SOME canMove) - else nonTail () - | _ => nonTail () + then cont (if List.isEmpty canMove + then Handler.Caller + else handler, + SOME canMove) + else nonTail handler + | _ => nonTail handler end end | _ => ([], return) @@ -991,7 +933,7 @@ val l = Cases.hd cases fun isOk (l': Label.t): bool = Label.equals (l, l') in - if 0 = Vector.length (labelArgs l) + if Vector.isEmpty (labelArgs l) andalso Cases.forall (cases, isOk) andalso (case default of NONE => true @@ -1007,7 +949,7 @@ fun doit (l, args) = let val args = - if 0 = Vector.length (labelArgs l) + if Vector.isEmpty (labelArgs l) then Vector.new0 () else args val m = labelMeaning l @@ -1110,7 +1052,7 @@ cases = cases, default = default, gone = fn () => deleteLabelMeaning m, - test = Vector.sub (args, 0)} + test = Vector.first args} | Goto {canMove, dst, args} => if Array.sub (isHeader, i) orelse Array.sub (isBlock, i) @@ -1196,10 +1138,9 @@ | SOME ty => (case Type.dest ty of Type.Object {args, con = ObjectCon.Tuple} => - if Prod.length args - = Vector.length xs + if Prod.length args = Vector.length xs andalso - not (Prod.isMutable args) + Prod.allAreImmutable args then SOME object else no () | _ => no ())) @@ -1230,7 +1171,7 @@ val args = varInfos args val isMutable = case Type.dest ty of - Type.Object {args, ...} => Prod.isMutable args + Type.Object {args, ...} => Prod.someIsMutable args | _ => Error.bug "strange Object type" in (* It would be nice to improve this code to do @@ -1308,7 +1249,8 @@ | _ => Error.bug "Ssa2.Shrink2.evalBind: Select:non object") | _ => dontChange () end - | Base.VectorSub _ => simple {sideEffect = false}) + | Base.SequenceSub _ => simple {sideEffect = false}) + | Sequence _ => simple {sideEffect = false} | Var x => setVar (varInfo x) end and evalStatement arg : Statement.t list -> Statement.t list = diff -Nru mlton-20130715/mlton/ssa/shrink2.sig mlton-20210117+dfsg/mlton/ssa/shrink2.sig --- mlton-20130715/mlton/ssa/shrink2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/shrink2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/shrink.fun mlton-20210117+dfsg/mlton/ssa/shrink.fun --- mlton-20130715/mlton/ssa/shrink.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/shrink.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2011 Matthew Fluet. +(* Copyright (C) 2009,2011,2017,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -125,7 +125,7 @@ Block | Bug | Case of {canMove: Statement.t list, - cases: Cases.t, + cases: (Con.t, Label.t) Cases.t, default: Label.t option} | Goto of {canMove: Statement.t list, dst: t, @@ -364,12 +364,7 @@ end in case transfer of - Arith {args, overflow, success, ...} => - (incVars args - ; incLabel overflow - ; incLabel success - ; normal ()) - | Bug => + Bug => if Vector.forall (statements, Statement.isProfile) andalso (case returns of NONE => true @@ -400,7 +395,7 @@ andalso not (Array.sub (isHeader, i)) andalso 1 = Vector.length args andalso 1 = numVarOccurrences test - andalso Var.equals (test, #1 (Vector.sub (args, 0))) + andalso Var.equals (test, #1 (Vector.first args)) then doit (LabelMeaning.Case {canMove = canMove (), cases = cases, @@ -418,7 +413,7 @@ then (incLabelMeaning m ; normal ()) else - if 0 = Vector.length statements + if Vector.isEmpty statements andalso Vector.equals (args, actuals, fn ((x, _), x') => Var.equals (x, x') @@ -518,13 +513,13 @@ Block.args (Vector.sub (blocks, LabelMeaning.blockIndex m)) fun save (f, s) = let - val {destroy, graph, ...} = - Function.layoutDot (f, fn _ => NONE) + val {destroy, controlFlowGraph, ...} = + Function.layoutDot (f, Var.layout) in File.withOut (concat ["/tmp/", Func.toString (Function.name f), ".", s, ".dot"], - fn out => Layout.outputl (graph, out)) + fn out => Layout.outputl (controlFlowGraph, out)) ; destroy () end val _ = if true then () else save (f, "pre") @@ -800,62 +795,7 @@ traceSimplifyTransfer (fn (t: Transfer.t) => case t of - Arith {prim, args, overflow, success, ty} => - let - val args = varInfos args - in - case primApp (prim, args) of - Prim.ApplyResult.Const c => - let - val _ = deleteLabel overflow - val x = Var.newNoname () - val isUsed = ref false - val vi = - VarInfo.T {isUsed = isUsed, - numOccurrences = ref 0, - ty = SOME ty, - value = ref (SOME (Value.Const c)), - var = x} - val (ss, t) = goto (success, Vector.new1 vi) - val ss = - if !isUsed - then Statement.T {var = SOME x, - ty = Type.ofConst c, - exp = Exp.Const c} - :: ss - else ss - in - (ss, t) - end - | Prim.ApplyResult.Var x => - let - val _ = deleteLabel overflow - in - goto (success, Vector.new1 x) - end - | Prim.ApplyResult.Overflow => - let - val _ = deleteLabel success - in - goto (overflow, Vector.new0 ()) - end - | Prim.ApplyResult.Apply (prim, args) => - let val args = Vector.fromList args - in - ([], Arith {prim = prim, - args = uses args, - overflow = simplifyLabel overflow, - success = simplifyLabel success, - ty = ty}) - end - | _ => - ([], Arith {prim = prim, - args = uses args, - overflow = simplifyLabel overflow, - success = simplifyLabel success, - ty = ty}) - end - | Bug => ([], Bug) + Bug => ([], Bug) | Call {func, args, return} => let val (statements, return) = @@ -871,7 +811,7 @@ fn (i, Position.Formal i') => i = i' | _ => false) val m = labelMeaning cont - fun nonTail () = + fun nonTail handler = let val _ = forceMeaningBlock m val handler = @@ -891,33 +831,35 @@ fun tail statements = (deleteLabelMeaning m ; (statements, Return.Tail)) - fun cont handlerEta = + fun cont (handler, handlerEta) = case LabelMeaning.aux m of LabelMeaning.Bug => (case handlerEta of - NONE => nonTail () + NONE => nonTail handler | SOME canMove => tail canMove) | LabelMeaning.Return {args, canMove} => if isEta (m, args) then tail canMove - else nonTail () - | _ => nonTail () - + else nonTail handler + | _ => nonTail handler in case handler of - Handler.Caller => cont NONE - | Handler.Dead => cont NONE + Handler.Caller => cont (handler, NONE) + | Handler.Dead => cont (handler, NONE) | Handler.Handle l => let val m = labelMeaning l in case LabelMeaning.aux m of - LabelMeaning.Bug => cont NONE + LabelMeaning.Bug => cont (handler, NONE) | LabelMeaning.Raise {args, canMove} => if isEta (m, args) - then cont (SOME canMove) - else nonTail () - | _ => nonTail () + then cont (if List.isEmpty canMove + then Handler.Caller + else handler, + SOME canMove) + else nonTail handler + | _ => nonTail handler end end | _ => ([], return) @@ -986,7 +928,7 @@ val l = Cases.hd cases fun isOk (l': Label.t): bool = Label.equals (l, l') in - if 0 = Vector.length (labelArgs l) + if Vector.isEmpty (labelArgs l) andalso Cases.forall (cases, isOk) andalso (case default of NONE => true @@ -1092,7 +1034,7 @@ cases = cases, default = default, gone = fn () => deleteLabelMeaning m, - test = Vector.sub (args, 0)} + test = Vector.first args} | Goto {canMove, dst, args} => if Array.sub (isHeader, i) orelse Array.sub (isBlock, i) diff -Nru mlton-20130715/mlton/ssa/shrink.sig mlton-20210117+dfsg/mlton/ssa/shrink.sig --- mlton-20130715/mlton/ssa/shrink.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/shrink.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/simplify2.fun mlton-20210117+dfsg/mlton/ssa/simplify2.fun --- mlton-20130715/mlton/ssa/simplify2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/simplify2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -11,37 +12,21 @@ open S -(* structure CommonArg = CommonArg (S) *) -(* structure CommonBlock = CommonBlock (S) *) -(* structure CommonSubexp = CommonSubexp (S) *) -(* structure ConstantPropagation = ConstantPropagation (S) *) -(* structure Contify = Contify (S) *) structure DeepFlatten = DeepFlatten (S) -(* structure Flatten = Flatten (S) *) -(* structure Inline = Inline (S) *) -(* structure IntroduceLoops = IntroduceLoops (S) *) -(* structure KnownCase = KnownCase (S) *) -(* structure LocalFlatten = LocalFlatten (S) *) -(* structure LocalRef = LocalRef (S) *) -(* structure LoopInvariant = LoopInvariant (S) *) -(* structure PolyEqual = PolyEqual (S) *) structure Profile2 = Profile2 (S) -(* structure Redundant = Redundant (S) *) -(* structure RedundantTests = RedundantTests (S) *) structure RefFlatten = RefFlatten (S) structure RemoveUnused2 = RemoveUnused2 (S) -(* structure SimplifyTypes = SimplifyTypes (S) *) -(* structure Useless = Useless (S) *) structure Zone = Zone (S) type pass = {name: string, - doit: Program.t -> Program.t} + doit: Program.t -> Program.t, + execute: bool} val ssa2PassesDefault = - {name = "deepFlatten", doit = DeepFlatten.transform2} :: - {name = "refFlatten", doit = RefFlatten.transform2} :: - {name = "removeUnused5", doit = RemoveUnused2.transform2} :: - {name = "zone", doit = Zone.transform2} :: + {name = "deepFlatten", doit = DeepFlatten.transform2, execute = true} :: + {name = "refFlatten", doit = RefFlatten.transform2, execute = true} :: + {name = "removeUnused5", doit = RemoveUnused2.transform2, execute = true} :: + {name = "zone", doit = Zone.transform2, execute = false} :: nil val ssa2PassesMinimal = @@ -53,26 +38,27 @@ type passGen = string -> pass option fun mkSimplePassGen (name, doit): passGen = - let val count = Counter.new 1 + let val count = Counter.generator 1 in fn s => if s = name then SOME {name = concat [name, "#", - Int.toString (Counter.next count)], - doit = doit} + Int.toString (count ())], + doit = doit, + execute = true} else NONE end val passGens = - List.map([("addProfile", Profile2.addProfile), - ("deepFlatten", DeepFlatten.transform2), - ("dropProfile", Profile2.dropProfile), + List.map([("deepFlatten", DeepFlatten.transform2), ("refFlatten", RefFlatten.transform2), - ("removeUnused", RemoveUnused2.transform2), + ("removeUnused", RemoveUnused2.transform2), ("zone", Zone.transform2), - ("eliminateDeadBlocks",S.eliminateDeadBlocks), - ("orderFunctions",S.orderFunctions), - ("reverseFunctions",S.reverseFunctions), - ("shrink", S.shrink)], + ("ssa2AddProfile", Profile2.addProfile), + ("ssa2DropProfile", Profile2.dropProfile), + ("ssa2EliminateDeadBlocks", S.eliminateDeadBlocks), + ("ssa2OrderFunctions", S.orderFunctions), + ("ssa2ReverseFunctions", S.reverseFunctions), + ("ssa2Shrink", S.shrink)], mkSimplePassGen) in fun ssa2PassesSetCustom s = @@ -89,89 +75,44 @@ end)) end -val ssa2PassesString = ref "default" -val ssa2PassesGet = fn () => !ssa2PassesString -val ssa2PassesSet = fn s => - let - val _ = ssa2PassesString := s - in - case s of - "default" => (ssa2Passes := ssa2PassesDefault - ; Result.Yes ()) - | "minimal" => (ssa2Passes := ssa2PassesMinimal - ; Result.Yes ()) - | _ => ssa2PassesSetCustom s - end -val _ = List.push (Control.optimizationPasses, - {il = "ssa2", get = ssa2PassesGet, set = ssa2PassesSet}) +fun ssa2PassesSet s = + case s of + "default" => (ssa2Passes := ssa2PassesDefault + ; Result.Yes ()) + | "minimal" => (ssa2Passes := ssa2PassesMinimal + ; Result.Yes ()) + | _ => ssa2PassesSetCustom s +val _ = Control.OptimizationPasses.register {il = "ssa2", set = ssa2PassesSet} -fun pass ({name, doit, midfix}, p) = +fun simplify p = let - val _ = - let open Control - in maybeSaveToFile - ({name = name, - suffix = midfix ^ "pre.ssa2"}, - Control.No, p, Control.Layouts Program.layouts) - end + val ssa2Passes = AppendList.fromList (!ssa2Passes) + val ssa2Passes = + if !Control.profile <> Control.ProfileNone + andalso !Control.profileIL = Control.ProfileSSA2 + then AppendList.snoc (ssa2Passes, + {name = "ssa2AddProfile", + doit = Profile2.addProfile, + execute = true}) + else ssa2Passes + val ssa2Passes = + AppendList.snoc (ssa2Passes, {name = "ssa2OrderFunctions", + doit = S.orderFunctions, + execute = true}) + val ssa2Passes = AppendList.toList ssa2Passes + (* Always want to type check the initial and final SSA2 programs, + * even if type checking is turned off, just to catch bugs. + *) + val () = Control.trace (Control.Pass, "ssa2TypeCheck") typeCheck p val p = - Control.passTypeCheck - {display = Control.Layouts Program.layouts, - name = name, + Control.simplifyPasses + {arg = p, + passes = ssa2Passes, stats = Program.layoutStats, - style = Control.No, - suffix = midfix ^ "post.ssa2", - thunk = fn () => doit p, + toFile = Program.toFile, typeCheck = typeCheck} - in - p - end -fun maybePass ({name, doit, midfix}, p) = - if List.exists (!Control.dropPasses, fn re => - Regexp.Compiled.matchesAll (re, name)) - then p - else pass ({name = name, doit = doit, midfix = midfix}, p) - -fun simplify p = - let - fun simplify' n p = - let - val midfix = if n = 0 - then "" - else concat [Int.toString n,"."] - in - if n = !Control.loopPasses - then p - else simplify' - (n + 1) - (List.fold - (!ssa2Passes, p, fn ({name, doit}, p) => - maybePass ({name = name, doit = doit, midfix = midfix}, p))) - end - val p = simplify' 0 p + val () = Control.trace (Control.Pass, "ssa2TypeCheck") typeCheck p in p end - -val simplify = fn p => let - (* Always want to type check the initial and final SSA - * programs, even if type checking is turned off, just - * to catch bugs. - *) - val _ = typeCheck p - val p = simplify p - val p = - if !Control.profile <> Control.ProfileNone - andalso !Control.profileIL = Control.ProfileSSA2 - then pass ({name = "addProfile2", - doit = Profile2.addProfile, - midfix = ""}, p) - else p - val p = maybePass ({name = "orderFunctions2", - doit = S.orderFunctions, - midfix = ""}, p) - val _ = typeCheck p - in - p - end end diff -Nru mlton-20130715/mlton/ssa/simplify2.sig mlton-20210117+dfsg/mlton/ssa/simplify2.sig --- mlton-20130715/mlton/ssa/simplify2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/simplify2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/simplify.fun mlton-20210117+dfsg/mlton/ssa/simplify.fun --- mlton-20130715/mlton/ssa/simplify.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/simplify.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -18,6 +18,7 @@ structure CombineConversions = CombineConversions (S) structure ConstantPropagation = ConstantPropagation (S) structure Contify = Contify (S) +structure DuplicateGlobals = DuplicateGlobals (S) structure Flatten = Flatten (S) structure Inline = Inline (S) structure IntroduceLoops = IntroduceLoops (S) @@ -25,74 +26,106 @@ structure LocalFlatten = LocalFlatten (S) structure LocalRef = LocalRef (S) structure LoopInvariant = LoopInvariant (S) +structure LoopUnroll = LoopUnroll (S) +structure LoopUnswitch = LoopUnswitch (S) structure PolyEqual = PolyEqual (S) structure PolyHash = PolyHash (S) structure Profile = Profile (S) structure Redundant = Redundant (S) structure RedundantTests = RedundantTests (S) structure RemoveUnused = RemoveUnused (S) +structure ShareZeroVec = ShareZeroVec (S) structure SimplifyTypes = SimplifyTypes (S) +structure SplitTypes = SplitTypes (S) structure Useless = Useless (S) type pass = {name: string, - doit: Program.t -> Program.t} + doit: Program.t -> Program.t, + execute: bool} val ssaPassesDefault = - {name = "removeUnused1", doit = RemoveUnused.transform} :: - {name = "introduceLoops1", doit = IntroduceLoops.transform} :: - {name = "loopInvariant1", doit = LoopInvariant.transform} :: - {name = "inlineLeaf1", doit = fn p => - Inline.inlineLeaf (p, !Control.inlineLeafA)} :: - {name = "inlineLeaf2", doit = fn p => - Inline.inlineLeaf (p, !Control.inlineLeafB)} :: - {name = "contify1", doit = Contify.transform} :: - {name = "localFlatten1", doit = LocalFlatten.transform} :: - {name = "constantPropagation", doit = ConstantPropagation.transform} :: + {name = "removeUnused1", doit = RemoveUnused.transform, execute = true} :: + {name = "introduceLoops1", doit = IntroduceLoops.transform, execute = true} :: + {name = "loopInvariant1", doit = LoopInvariant.transform, execute = true} :: + {name = "inlineLeaf1", doit = fn p => + Inline.inlineLeaf (p, !Control.inlineLeafA), execute = true} :: + {name = "inlineLeaf2", doit = fn p => + Inline.inlineLeaf (p, !Control.inlineLeafB), execute = true} :: + {name = "contify1", doit = Contify.transform, execute = true} :: + {name = "localFlatten1", doit = LocalFlatten.transform, execute = true} :: + {name = "constantPropagation", doit = ConstantPropagation.transform, execute = true} :: + {name = "duplicateGlobals1", doit = DuplicateGlobals.transform, execute = false} :: + {name = "splitTypes1", doit = SplitTypes.transform, execute = true} :: (* useless should run * - after constant propagation because constant propagation makes * slots of tuples that are constant useless *) - {name = "useless", doit = Useless.transform} :: - {name = "removeUnused2", doit = RemoveUnused.transform} :: - {name = "simplifyTypes", doit = SimplifyTypes.transform} :: + {name = "useless", doit = Useless.transform, execute = true} :: + (* loopUnroll should run + * - after constants have been globalized + *) + {name = "loopUnroll1", doit = LoopUnroll.transform, execute = false} :: + {name = "removeUnused2", doit = RemoveUnused.transform, execute = true} :: + {name = "duplicateGlobals2", doit = DuplicateGlobals.transform, execute = true} :: + {name = "splitTypes2", doit = SplitTypes.transform, execute = true} :: + {name = "simplifyTypes", doit = SimplifyTypes.transform, execute = true} :: (* polyEqual should run * - after types are simplified so that many equals are turned into eqs * - before inlining so that equality functions can be inlined *) - {name = "polyEqual", doit = PolyEqual.transform} :: + {name = "polyEqual", doit = PolyEqual.transform, execute = true} :: (* polyHash should run * - after types are simplified * - before inlining so that hash functions can be inlined *) - {name = "polyHash", doit = PolyHash.transform} :: - {name = "introduceLoops2", doit = IntroduceLoops.transform} :: - {name = "loopInvariant2", doit = LoopInvariant.transform} :: - {name = "contify2", doit = Contify.transform} :: + {name = "polyHash", doit = PolyHash.transform, execute = true} :: + {name = "introduceLoops2", doit = IntroduceLoops.transform, execute = true} :: + {name = "loopInvariant2", doit = LoopInvariant.transform, execute = true} :: + (* loopUnswitch should run + * - after loop invariant code motion so invariant conditions are obvious + * - before a knownCase pass to cleanup after unswitching + *) + {name = "loopUnswitch1", doit = LoopUnswitch.transform, execute = false} :: + {name = "knownCase1", doit = KnownCase.transform, execute = false} :: + {name = "contify2", doit = Contify.transform, execute = true} :: {name = "inlineNonRecursive", doit = fn p => - Inline.inlineNonRecursive (p, !Control.inlineNonRec)} :: - {name = "localFlatten2", doit = LocalFlatten.transform} :: - {name = "removeUnused3", doit = RemoveUnused.transform} :: - {name = "contify3", doit = Contify.transform} :: - {name = "introduceLoops3", doit = IntroduceLoops.transform} :: - {name = "loopInvariant3", doit = LoopInvariant.transform} :: - {name = "localRef", doit = LocalRef.transform} :: - {name = "flatten", doit = Flatten.transform} :: - {name = "localFlatten3", doit = LocalFlatten.transform} :: - {name = "combineConversions", doit = CombineConversions.transform} :: - {name = "commonArg", doit = CommonArg.transform} :: - {name = "commonSubexp", doit = CommonSubexp.transform} :: - {name = "commonBlock", doit = CommonBlock.transform} :: - {name = "redundantTests", doit = RedundantTests.transform} :: - {name = "redundant", doit = Redundant.transform} :: - {name = "knownCase", doit = KnownCase.transform} :: - {name = "removeUnused4", doit = RemoveUnused.transform} :: + Inline.inlineNonRecursive (p, !Control.inlineNonRec), execute = true} :: + {name = "localFlatten2", doit = LocalFlatten.transform, execute = true} :: + {name = "removeUnused3", doit = RemoveUnused.transform, execute = true} :: + {name = "contify3", doit = Contify.transform, execute = true} :: + {name = "introduceLoops3", doit = IntroduceLoops.transform, execute = true} :: + {name = "loopInvariant3", doit = LoopInvariant.transform, execute = true} :: + {name = "localRef", doit = LocalRef.transform, execute = true} :: + {name = "flatten", doit = Flatten.transform, execute = true} :: + {name = "localFlatten3", doit = LocalFlatten.transform, execute = true} :: + {name = "combineConversions", doit = CombineConversions.transform, execute = true} :: + {name = "commonArg", doit = CommonArg.transform, execute = true} :: + {name = "commonSubexp1", doit = CommonSubexp.transform, execute = true} :: + {name = "commonBlock", doit = CommonBlock.transform, execute = true} :: + (* shareZeroVec should run + * - after useless because sharing of zero-length array inhibits + * changing type of flow-disjoint vector data + * - after simplifyTypes because it may make previously distinct + * types equal and allow more sharing of zero-length arrays + * - after inlining because shareZeroVec (slightly) increases size + * - before redundantTests because shareZeroVec introduces + * comparisons with zero + *) + {name = "shareZeroVec", doit = ShareZeroVec.transform, execute = true} :: + {name = "redundantTests", doit = RedundantTests.transform, execute = true} :: + {name = "redundant", doit = Redundant.transform, execute = true} :: + {name = "loopUnswitch2", doit = LoopUnswitch.transform, execute = false} :: + {name = "knownCase2", doit = KnownCase.transform, execute = true} :: + {name = "loopUnroll2", doit = LoopUnroll.transform, execute = false} :: + {name = "commonSubexp2", doit = CommonSubexp.transform, execute = false} :: + {name = "removeUnused4", doit = RemoveUnused.transform, execute = true} :: nil val ssaPassesMinimal = (* polyEqual cannot be omitted. It implements MLton_equal. *) - {name = "polyEqual", doit = PolyEqual.transform} :: + {name = "polyEqual", doit = PolyEqual.transform, execute = true} :: (* polyHash cannot be omitted. It implements MLton_hash. *) - {name = "polyHash", doit = PolyHash.transform} :: + {name = "polyHash", doit = PolyHash.transform, execute = true} :: nil val ssaPasses : pass list ref = ref ssaPassesDefault @@ -101,18 +134,19 @@ type passGen = string -> pass option fun mkSimplePassGen (name, doit): passGen = - let val count = Counter.new 1 + let val count = Counter.generator 1 in fn s => if s = name then SOME {name = concat [name, "#", - Int.toString (Counter.next count)], - doit = doit} + Int.toString (count ())], + doit = doit, + execute = true} else NONE end val inlinePassGen = let datatype t = Bool of bool | IntOpt of int option - val count = Counter.new 1 + val count = Counter.generator 1 fun nums s = Exn.withEscape (fn escape => @@ -150,10 +184,11 @@ SOME {name = concat ["inlineNonRecursive(", Int.toString product, ",", Int.toString small, ")#", - Int.toString (Counter.next count)], + Int.toString (count ())], doit = (fn p => Inline.inlineNonRecursive - (p, {small = small, product = product}))} + (p, {small = small, product = product})), + execute = true} val s = String.dropPrefix (s, String.size "inlineNonRecursive") in case nums s of @@ -168,10 +203,11 @@ Bool.toString loops, ",", Bool.toString repeat, ",", Option.toString Int.toString size, ")#", - Int.toString (Counter.next count)], + Int.toString (count ())], doit = (fn p => Inline.inlineLeaf - (p, {loops = loops, repeat = repeat, size = size}))} + (p, {loops = loops, repeat = repeat, size = size})), + execute = true} val s = String.dropPrefix (s, String.size "inlineLeaf") in case nums s of @@ -184,33 +220,37 @@ val passGens = inlinePassGen :: - (List.map([("addProfile", Profile.addProfile), - ("combineConversions", CombineConversions.transform), + (List.map([("combineConversions", CombineConversions.transform), ("commonArg", CommonArg.transform), ("commonBlock", CommonBlock.transform), ("commonSubexp", CommonSubexp.transform), ("constantPropagation", ConstantPropagation.transform), ("contify", Contify.transform), - ("dropProfile", Profile.dropProfile), + ("duplicateGlobals", DuplicateGlobals.transform), ("flatten", Flatten.transform), ("introduceLoops", IntroduceLoops.transform), ("knownCase", KnownCase.transform), ("localFlatten", LocalFlatten.transform), ("localRef", LocalRef.transform), ("loopInvariant", LoopInvariant.transform), + ("loopUnroll", LoopUnroll.transform), + ("loopUnswitch", LoopUnswitch.transform), ("polyEqual", PolyEqual.transform), ("polyHash", PolyHash.transform), ("redundant", Redundant.transform), ("redundantTests", RedundantTests.transform), ("removeUnused", RemoveUnused.transform), + ("shareZeroVec", ShareZeroVec.transform), ("simplifyTypes", SimplifyTypes.transform), + ("splitTypes", SplitTypes.transform), ("useless", Useless.transform), - ("breakCriticalEdges",fn p => - S.breakCriticalEdges (p, {codeMotion = true})), - ("eliminateDeadBlocks",S.eliminateDeadBlocks), - ("orderFunctions",S.orderFunctions), - ("reverseFunctions",S.reverseFunctions), - ("shrink", S.shrink)], + ("ssaAddProfile", Profile.addProfile), + ("ssaDropProfile", Profile.dropProfile), + ("ssaBreakCriticalEdges", fn p => S.breakCriticalEdges (p, {codeMotion = true})), + ("ssaEliminateDeadBlocks", S.eliminateDeadBlocks), + ("ssaOrderFunctions", S.orderFunctions), + ("ssaReverseFunctions", S.reverseFunctions), + ("ssaShrink", S.shrink)], mkSimplePassGen)) in fun ssaPassesSetCustom s = @@ -227,89 +267,45 @@ end)) end -val ssaPassesString = ref "default" -val ssaPassesGet = fn () => !ssaPassesString -val ssaPassesSet = fn s => - let - val _ = ssaPassesString := s - in - case s of - "default" => (ssaPasses := ssaPassesDefault - ; Result.Yes ()) - | "minimal" => (ssaPasses := ssaPassesMinimal - ; Result.Yes ()) - | _ => ssaPassesSetCustom s - end -val _ = List.push (Control.optimizationPasses, - {il = "ssa", get = ssaPassesGet, set = ssaPassesSet}) +fun ssaPassesSet s = + case s of + "default" => (ssaPasses := ssaPassesDefault + ; Result.Yes ()) + | "minimal" => (ssaPasses := ssaPassesMinimal + ; Result.Yes ()) + | _ => ssaPassesSetCustom s +val _ = Control.OptimizationPasses.register + {il = "ssa", set = ssaPassesSet} -fun pass ({name, doit, midfix}, p) = +fun simplify p = let - val _ = - let open Control - in maybeSaveToFile - ({name = name, - suffix = midfix ^ "pre.ssa"}, - Control.No, p, Control.Layouts Program.layouts) - end + val ssaPasses = AppendList.fromList (!ssaPasses) + val ssaPasses = + if !Control.profile <> Control.ProfileNone + andalso !Control.profileIL = Control.ProfileSSA + then AppendList.snoc (ssaPasses, + {name = "ssaAddProfile", + doit = Profile.addProfile, + execute = true}) + else ssaPasses + val ssaPasses = + AppendList.snoc (ssaPasses, {name = "ssaOrderFunctions", + doit = S.orderFunctions, + execute = true}) + val ssaPasses = AppendList.toList ssaPasses + (* Always want to type check the initial and final SSA programs, + * even if type checking is turned off, just to catch bugs. + *) + val () = Control.trace (Control.Pass, "ssaTypeCheck") typeCheck p val p = - Control.passTypeCheck - {display = Control.Layouts Program.layouts, - name = name, + Control.simplifyPasses + {arg = p, + passes = ssaPasses, stats = Program.layoutStats, - style = Control.No, - suffix = midfix ^ "post.ssa", - thunk = fn () => doit p, + toFile = Program.toFile, typeCheck = typeCheck} - in - p - end -fun maybePass ({name, doit, midfix}, p) = - if List.exists (!Control.dropPasses, fn re => - Regexp.Compiled.matchesAll (re, name)) - then p - else pass ({name = name, doit = doit, midfix = midfix}, p) - -fun simplify p = - let - fun simplify' n p = - let - val midfix = if n = 0 - then "" - else concat [Int.toString n,"."] - in - if n = !Control.loopPasses - then p - else simplify' - (n + 1) - (List.fold - (!ssaPasses, p, fn ({name, doit}, p) => - maybePass ({name = name, doit = doit, midfix = midfix}, p))) - end - val p = simplify' 0 p + val () = Control.trace (Control.Pass, "ssaTypeCheck") typeCheck p in p end - -val simplify = fn p => let - (* Always want to type check the initial and final SSA - * programs, even if type checking is turned off, just - * to catch bugs. - *) - val _ = typeCheck p - val p = simplify p - val p = - if !Control.profile <> Control.ProfileNone - andalso !Control.profileIL = Control.ProfileSSA - then pass ({name = "addProfile1", - doit = Profile.addProfile, - midfix = ""}, p) - else p - val p = maybePass ({name = "orderFunctions1", - doit = S.orderFunctions, - midfix = ""}, p) - val _ = typeCheck p - in - p - end end diff -Nru mlton-20130715/mlton/ssa/simplify.sig mlton-20210117+dfsg/mlton/ssa/simplify.sig --- mlton-20130715/mlton/ssa/simplify.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/simplify.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/simplify-types.fun mlton-20210117+dfsg/mlton/ssa/simplify-types.fun --- mlton-20130715/mlton/ssa/simplify-types.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/simplify-types.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2018,2020 Matthew Fluet. * Copyright (C) 1999-2005, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -14,7 +14,7 @@ * This pass computes a "cardinality" of each datatype, which is an * abstraction of the number of values of the datatype. * Zero means the datatype has no values (except for bottom). - * One means the datatype has one values (except for bottom). + * One means the datatype has one value (except for bottom). * Many means the datatype has many values. * * This pass removes all datatypes whose cardinality is Zero or One @@ -28,7 +28,7 @@ * Useless: it never appears in a ConApp. * Transparent: it is the only variant in its datatype * and its argument type does not contain any uses of - * Tycon.array or Tycon.vector. + * Tycon.array or Tycon.vector. * Useful: otherwise * This pass also removes Useless and Transparent constructors. * @@ -39,7 +39,7 @@ * the datatype and replace the lhs by the rhs, i.e. we must keep the * circularity around. * Must do similar things for vectors. - * + * * Also, to eliminate as many Transparent constructors as possible, for * something like the following, * datatype t = T of u array @@ -50,22 +50,81 @@ * where all uses of t are replaced by u array. *) -functor SimplifyTypes (S: SSA_TRANSFORM_STRUCTS): SSA_TRANSFORM = +functor SimplifyTypes (S: SSA_TRANSFORM_STRUCTS): SSA_TRANSFORM = struct open S open Exp Transfer structure Cardinality = struct - datatype t = Zero | One | Many + structure L = ThreePointLattice(val bottom = "zero" + val mid = "one" + val top = "many") + open L + + val isZero = isBottom + val newZero = new + val isOne = isMid + val makeOne = makeMid + val whenOne = whenMid + val makeMany = makeTop + val whenMany = whenTop - fun layout c = - Layout.str (case c of - Zero => "zero" - | One => "one" - | Many => "many") + local + fun mkNew (make: t -> unit) () = + let val c = newZero () + in make c; c end + in + val newOne = mkNew makeOne + val newMany = mkNew makeMany + end + + val one = newOne () + val many = newMany () + + structure Card = + struct + datatype t = Zero | One | Many + fun toCard c = + if isZero c then Zero + else if isOne c then One + else Many + fun sum esc (c1, c2) = + case (toCard c1, c2) of + (Zero, c2) => c2 + | (c1, Zero) => c1 + | _ => esc Many + fun prod esc (c1, c2) = + case (toCard c1, c2) of + (Zero, _) => esc Zero + | (_, Zero) => esc Zero + | (One, One) => One + | _ => Many + end - val equals: t * t -> bool = op = + local + fun make (f, id) cs = + let + val c' = newZero () + fun doit () = + case (Exn.withEscape + (fn escape => + Vector.fold (cs, id, f escape))) of + Card.Zero => () + | Card.One => makeOne c' + | Card.Many => makeMany c' + val () = + Vector.foreach + (cs, fn c => + (whenOne (c, doit); whenMany (c, doit))) + val () = doit () + in + c' + end + in + val sum = make (Card.sum, Card.Zero) + val prod = make (Card.prod, Card.One) + end end structure ConRep = @@ -94,264 +153,211 @@ structure Result = struct datatype 'a t = - Bugg + Dead | Delete | Keep of 'a fun layout layoutX = - let open Layout - in fn Bugg => str "Bug" - | Delete => str "Delete" - | Keep x => seq [str "Keep ", layoutX x] + let + open Layout + in + fn Dead => str "Dead" + | Delete => str "Delete" + | Keep x => seq [str "Keep ", layoutX x] end end fun transform (Program.T {datatypes, globals, functions, main}) = let - val {get = conInfo: Con.t -> {rep: ConRep.t ref, - args: Type.t vector}, + val {get = conInfo: Con.t -> {args: Type.t vector, + cardinality: Cardinality.t, + rep: ConRep.t ref}, set = setConInfo, ...} = Property.getSetOnce (Con.plist, Property.initRaise ("SimplifyTypes.conInfo", Con.layout)) val conInfo = Trace.trace ("SimplifyTypes.conInfo", Con.layout, - fn {rep, args} => - Layout.record [("rep", ConRep.layout (!rep)), - ("args", Vector.layout Type.layout args)]) + fn {args, cardinality, rep} => + Layout.record [("args", Vector.layout Type.layout args), + ("cardinality", Cardinality.layout cardinality), + ("rep", ConRep.layout (!rep))]) conInfo - val conRep = ! o #rep o conInfo - val conArgs = #args o conInfo - fun setConRep (con, r) = #rep (conInfo con) := r + local + fun make sel = sel o conInfo + fun make' sel = let val get = make sel + in (! o get, fn (c, x) => get c := x) + end + in + val conArgs = make #args + val conCardinality = make #cardinality + val (conRep, setConRep) = make' #rep + end val setConRep = Trace.trace2 ("SimplifyTypes.setConRep", Con.layout, ConRep.layout, Unit.layout) setConRep val conIsUseful = ConRep.isUseful o conRep val conIsUseful = - Trace.trace - ("SimplifyTypes.conIsUseful", Con.layout, Bool.layout) + Trace.trace + ("SimplifyTypes.conIsUseful", Con.layout, Bool.layout) conIsUseful - (* Initialize conInfo *) - val _ = - Vector.foreach - (datatypes, fn Datatype.T {cons, ...} => - Vector.foreach (cons, fn {con, args} => - setConInfo (con, {rep = ref ConRep.Useless, - args = args}))) - val {get = tyconReplacement: Tycon.t -> Type.t option, - set = setTyconReplacement, ...} = - Property.getSet (Tycon.plist, Property.initConst NONE) - val setTyconReplacement = fn (c, t) => setTyconReplacement (c, SOME t) - val {get = tyconInfo: Tycon.t -> { - cardinality: Cardinality.t ref, - cons: { - con: Con.t, - args: Type.t vector - } vector ref, + val {get = tyconInfo: Tycon.t -> {cardinality: Cardinality.t, numCons: int ref, - (* tycons whose cardinality depends on mine *) - dependents: Tycon.t list ref, - isOnWorklist: bool ref - }, + replacement: Type.t option ref}, set = setTyconInfo, ...} = Property.getSetOnce (Tycon.plist, Property.initRaise ("SimplifyTypes.tyconInfo", Tycon.layout)) - local - fun make sel = (! o sel o tyconInfo, - fn (t, x) => sel (tyconInfo t) := x) + fun make sel = sel o tyconInfo + fun make' sel = let val get = make sel + in (! o get, fn (t, x) => get t := x) + end in - val (tyconNumCons, setTyconNumCons) = make #numCons - val (tyconCardinality, _) = make #cardinality + val tyconCardinality = make #cardinality + val (tyconNumCons, setTyconNumCons) = make' #numCons + val (tyconReplacement, setTyconReplacement) = make' #replacement end + (* Initialize conInfo and typeInfo *) + fun initTyconInfo tycon = + setTyconInfo (tycon, {cardinality = Cardinality.newZero (), + numCons = ref 0, + replacement = ref NONE}) val _ = Vector.foreach (datatypes, fn Datatype.T {tycon, cons} => - setTyconInfo (tycon, { - cardinality = ref Cardinality.Zero, - numCons = ref 0, - cons = ref cons, - dependents = ref [], - isOnWorklist = ref false - })) + (initTyconInfo tycon; + Vector.foreach + (cons, fn {con, args} => + setConInfo (con, {args = args, + cardinality = Cardinality.newZero (), + rep = ref ConRep.Useless})))) (* Tentatively mark all constructors appearing in a ConApp as Useful - * (some may later be marked as Transparent). + * (some may later be marked as Useless or Transparent). + * Mark any tycons created by MLton_bogus as cardinality Many. *) val _ = let + fun setConRepUseful c = setConRep (c, ConRep.Useful) fun handleStatement (Statement.T {exp, ...}) = case exp of - ConApp {con, ...} => setConRep (con, ConRep.Useful) + ConApp {con, ...} => setConRepUseful con + | PrimApp {prim, targs, ...} => + (case prim of + Prim.MLton_bogus => + (case Type.dest (Vector.sub (targs, 0)) of + Type.Datatype tycon => + Cardinality.makeOne (tyconCardinality tycon) + | _ => ()) + | _ => ()) | _ => () (* Booleans are special because they are generated by primitives. *) - val _ = - List.foreach ([Con.truee, Con.falsee], fn c => - setConRep (c, ConRep.Useful)) + val _ = setConRepUseful Con.truee + val _ = setConRepUseful Con.falsee val _ = Vector.foreach (globals, handleStatement) - val _ = List.foreach + val _ = List.foreach (functions, fn f => Vector.foreach (Function.blocks f, fn Block.T {statements, ...} => Vector.foreach (statements, handleStatement))) in () end - + (* Compute the type cardinalities with a fixed point + * over the Cardinality lattice. + *) + val {get = typeCardinality, destroy = destroyTypeCardinality} = + Property.destGet + (Type.plist, + Property.initRec + (fn (t, typeCardinality) => + let + fun ptrCard t = + (Cardinality.prod o Vector.new2) + (typeCardinality t, Cardinality.many) + fun tupleCard ts = + (Cardinality.prod o Vector.map) + (ts, typeCardinality) + fun vecCard t = + (Cardinality.sum o Vector.new2) + (Cardinality.one, + (Cardinality.prod o Vector.new2) + (typeCardinality t, Cardinality.many)) + datatype z = datatype Type.dest + in + case Type.dest t of + Array _ => Cardinality.many + | CPointer => Cardinality.many + | Datatype tycon => tyconCardinality tycon + | IntInf => Cardinality.many + | Real _ => Cardinality.many + | Ref t => ptrCard t + | Thread => Cardinality.many + | Tuple ts => tupleCard ts + | Vector t => vecCard t + | Weak t => ptrCard t + | Word _ => Cardinality.many + end)) (* Remove useless constructors from datatypes. - * Remove datatypes which have no cons. + * Lower-bound cardinality of cons by product of arguments. + * Lower-bound cardinality of tycons by sum of cons. *) + val tyconVoid = Tycon.newString "void" + val _ = initTyconInfo tyconVoid + val typeVoid = Type.datatypee tyconVoid + val typeIsVoid = fn t => Type.equals (t, typeVoid) + val origDatatypes = datatypes val datatypes = - Vector.keepAllMap + Vector.map (datatypes, fn Datatype.T {tycon, cons} => let val cons = Vector.keepAll (cons, conIsUseful o #con) - in - if 0 = Vector.length cons - then (setTyconReplacement (tycon, Type.unit) - ; NONE) - else (#cons (tyconInfo tycon) := cons - ; SOME (Datatype.T {tycon = tycon, cons = cons})) - end) - (* Build the dependents for each tycon. *) - val _ = - Vector.foreach - (datatypes, fn Datatype.T {tycon, cons} => - let - datatype z = datatype Type.dest - val {get = setTypeDependents, destroy = destroyTypeDependents} = - Property.destGet - (Type.plist, - Property.initRec - (fn (t, setTypeDependents) => - case Type.dest t of - Array t => setTypeDependents t - | CPointer => () - | Datatype tycon' => - List.push (#dependents (tyconInfo tycon'), tycon) - | IntInf => () - | Real _ => () - | Ref t => setTypeDependents t - | Thread => () - | Tuple ts => Vector.foreach (ts, setTypeDependents) - | Vector t => setTypeDependents t - | Weak t => setTypeDependents t - | Word _ => ())) val _ = - Vector.foreach (cons, fn {args, ...} => - Vector.foreach (args, setTypeDependents)) - val _ = destroyTypeDependents () - in () - end) - (* diagnostic *) - val _ = - Control.diagnostics - (fn display => - let open Layout - in Vector.foreach - (datatypes, fn Datatype.T {tycon, ...} => - display (seq [str "dependents of ", - Tycon.layout tycon, - str " = ", - List.layout Tycon.layout - (!(#dependents (tyconInfo tycon)))])) + Cardinality.<= + (Cardinality.sum + (Vector.map (cons, conCardinality o #con)), + tyconCardinality tycon) + val _ = + Vector.foreach + (cons, fn {con, args} => + Cardinality.<= + (Cardinality.prod + (Vector.map (args, typeCardinality)), + conCardinality con)) + in + Datatype.T {tycon = tycon, cons = cons} end) - - local open Type Cardinality - in - fun typeCardinality t = - case dest t of - Datatype tycon => tyconCardinality tycon - | Ref t => pointerCardinality t - | Tuple ts => tupleCardinality ts - | Weak t => pointerCardinality t - | _ => Many - and pointerCardinality (t: Type.t) = - case typeCardinality t of - Zero => Zero - | _ => Many - and tupleCardinality (ts: Type.t vector) = - Exn.withEscape - (fn escape => - (Vector.foreach (ts, fn t => - let val c = typeCardinality t - in case c of - Many => escape Many - | One => () - | Zero => escape Zero - end) - ; One)) - end - fun conCardinality {args, con = _} = tupleCardinality args - (* Compute the tycon cardinalities with a fixed point, - * initially assuming every datatype tycon cardinality is Zero. - *) - val _ = - let - (* list of datatype tycons whose cardinality has not yet stabilized *) - val worklist = - ref (Vector.fold - (datatypes, [], fn (Datatype.T {tycon, ...}, ac) => - tycon :: ac)) - fun loop () = - case !worklist of - [] => () - | tycon :: tycons => - (worklist := tycons - ; let - val {cons, cardinality, dependents, isOnWorklist, - ...} = tyconInfo tycon - val c = - Exn.withEscape - (fn escape => - let datatype z = datatype Cardinality.t - in Vector.fold - (!cons, Zero, fn (c, ac) => - case conCardinality c of - Many => escape Many - | One => (case ac of - Many => Error.bug "SimplifyTypes.simplify: Many" - | One => escape Many - | Zero => One) - | Zero => ac) - end) - in isOnWorklist := false - ; if Cardinality.equals (c, !cardinality) - then () - else (cardinality := c - ; (List.foreach - (!dependents, fn tycon => - let - val {isOnWorklist, ...} = - tyconInfo tycon - in if !isOnWorklist - then () - else (isOnWorklist := true - ; List.push (worklist, tycon)) - end))) - end - ; loop ()) - in loop () - end (* diagnostic *) val _ = Control.diagnostics (fn display => - let open Layout - in Vector.foreach - (datatypes, fn Datatype.T {tycon, ...} => - display (seq [str "cardinality of ", - Tycon.layout tycon, - str " = ", - Cardinality.layout (tyconCardinality tycon)])) + let + open Layout + in + Vector.foreach + (origDatatypes, fn Datatype.T {tycon, cons} => + (display (seq [str "cardinality of ", + Tycon.layout tycon, + str " = ", + Cardinality.layout (tyconCardinality tycon)]); + Vector.foreach + (cons, fn {con, ...} => + (display (seq [str "rep of ", + Con.layout con, + str " = ", + ConRep.layout (conRep con)]); + display (seq [str "cardinality of ", + Con.layout con, + str " = ", + Cardinality.layout (conCardinality con)]))))) end) fun transparent (tycon, con, args) = - (setTyconReplacement (tycon, Type.tuple args) - ; setConRep (con, ConRep.Transparent) - ; setTyconNumCons (tycon, 1)) - (* "unary" is datatypes with one constructor whose rhs contains an - * array (or vector) type. - * For datatypes with one variant not containing an array type, eliminate - * the datatype. + (setTyconNumCons (tycon, 1) + ; setTyconReplacement (tycon, SOME (Type.tuple args)) + ; setConRep (con, ConRep.Transparent)) + (* "unary" are datatypes with one constructor + * whose rhs contains an array (or vector) type. + * For datatypes with one variant not containing an array type, + * eliminate the datatype. *) fun containsArrayOrVector (ty: Type.t): bool = let @@ -374,26 +380,29 @@ val cons = Vector.keepAllMap (cons, fn c as {con, ...} => - case conCardinality c of - Cardinality.Zero => (setConRep (con, ConRep.Useless) - ; NONE) - | _ => SOME c) - in case Vector.length cons of - 0 => (setTyconNumCons (tycon, 0) - ; setTyconReplacement (tycon, Type.unit) - ; (datatypes, unary)) - | 1 => - let - val {con, args} = Vector.sub (cons, 0) - in - if Vector.exists (args, containsArrayOrVector) - then (datatypes, - {tycon = tycon, con = con, args = args} :: unary) - else (transparent (tycon, con, args) - ; (datatypes, unary)) - end - | _ => (Datatype.T {tycon = tycon, cons = cons} :: datatypes, - unary) + if Cardinality.isZero (conCardinality con) + then (setConRep (con, ConRep.Useless) + ; NONE) + else SOME c) + in + case Vector.length cons of + 0 => (setTyconNumCons (tycon, 0) + ; if Cardinality.isZero (tyconCardinality tycon) + then setTyconReplacement (tycon, SOME typeVoid) + else setTyconReplacement (tycon, SOME Type.unit) + ; (datatypes, unary)) + | 1 => + let + val {con, args} = Vector.first cons + in + if Vector.exists (args, containsArrayOrVector) + then (datatypes, + {tycon = tycon, con = con, args = args} :: unary) + else (transparent (tycon, con, args) + ; (datatypes, unary)) + end + | _ => (Datatype.T {tycon = tycon, cons = cons} :: datatypes, + unary) end) fun containsTycon (ty: Type.t, tyc: Tycon.t): bool = let @@ -424,50 +433,119 @@ (unary, datatypes, fn ({tycon, con, args}, accum) => if Vector.exists (args, fn arg => containsTycon (arg, tycon)) then Datatype.T {tycon = tycon, - cons = Vector.new1 {con = con, args = args}} + cons = Vector.new1 {con = con, args = args}} :: accum else (transparent (tycon, con, args) ; accum)) - fun makeKeepSimplifyTypes simplifyType ts = - Vector.keepAllMap (ts, fn t => - let - val t = simplifyType t - in - if Type.isUnit t - then NONE - else SOME t - end) + (* diagnostic *) + val _ = + Control.diagnostics + (fn display => + let + open Layout + in + Vector.foreach + (origDatatypes, fn Datatype.T {tycon, cons} => + (display (seq [str "num cons of ", + Tycon.layout tycon, + str " = ", + Int.layout (tyconNumCons tycon)]); + display (seq [str "replacement of ", + Tycon.layout tycon, + str " = ", + Option.layout Type.layout (tyconReplacement tycon)]); + Vector.foreach + (cons, fn {con, ...} => + display (seq [str "rep of ", + Con.layout con, + str " = ", + ConRep.layout (conRep con)])))) + end) + + fun makeSimplifyTypeFns simplifyType = + let + val simplifyType = + Trace.trace + ("SimplifyTypes.simplifyType", Type.layout, Type.layout) + simplifyType + fun simplifyTypes ts = Vector.map (ts, simplifyType) + val simplifyTypes = + Trace.trace ("SimplifyTypes.simplifyTypes", + Vector.layout Type.layout, Vector.layout Type.layout) + simplifyTypes + fun simplifyUsefulTypesOpt ts = + Exn.withEscape + (fn escape => + SOME (Vector.keepAllMap + (ts, fn t => + let + val t = simplifyType t + in + if typeIsVoid t + then escape NONE + else if Type.isUnit t + then NONE + else SOME t + end))) + val simplifyUsefulTypesOpt = + Trace.trace ("SimplifyTypes.simplifyUsefulTypesOpt", + Vector.layout Type.layout, + Option.layout (Vector.layout Type.layout)) + simplifyUsefulTypesOpt + val simplifyUsefulTypes = valOf o simplifyUsefulTypesOpt + val simplifyUsefulTypes = + Trace.trace ("SimplifyTypes.simplifyUsefulTypes", + Vector.layout Type.layout, + Vector.layout Type.layout) + simplifyUsefulTypes + in + {simplifyType = simplifyType, + simplifyTypes = simplifyTypes, + simplifyUsefulTypes = simplifyUsefulTypes, + simplifyUsefulTypesOpt = simplifyUsefulTypesOpt} + end val {get = simplifyType, destroy = destroySimplifyType} = Property.destGet (Type.plist, Property.initRec (fn (t, simplifyType) => let - val keepSimplifyTypes = makeKeepSimplifyTypes simplifyType + val {simplifyType, simplifyUsefulTypesOpt, ...} = + makeSimplifyTypeFns simplifyType + fun doitPtr (mk, t) = + let + val t = simplifyType t + in + if typeIsVoid t + then typeVoid + else mk t + end open Type - in case dest t of - Array t => array (simplifyType t) - | Datatype tycon => - (case tyconReplacement tycon of - SOME t => - let - val t = simplifyType t - val _ = setTyconReplacement (tycon, t) - in - t - end - | NONE => t) - | Ref t => reff (simplifyType t) - | Tuple ts => Type.tuple (keepSimplifyTypes ts) - | Vector t => vector (simplifyType t) - | Weak t => weak (simplifyType t) - | _ => t + in + case dest t of + Array t => array (simplifyType t) + | Datatype tycon => + (case tyconReplacement tycon of + SOME t => + let + val t = simplifyType t + val _ = setTyconReplacement (tycon, SOME t) + in + t + end + | NONE => t) + | Ref t => doitPtr (reff, t) + | Tuple ts => + (case simplifyUsefulTypesOpt ts of + NONE => typeVoid + | SOME ts => Type.tuple ts) + | Vector t => vector (simplifyType t) + | Weak t => doitPtr (weak, t) + | _ => t end)) - val simplifyType = - Trace.trace ("SimplifyTypes.simplifyType", Type.layout, Type.layout) - simplifyType - fun simplifyTypes ts = Vector.map (ts, simplifyType) - val keepSimplifyTypes = makeKeepSimplifyTypes simplifyType + val {simplifyType, simplifyTypes, simplifyUsefulTypesOpt, simplifyUsefulTypes, ...} = + makeSimplifyTypeFns simplifyType + val typeIsUseful = not o Type.isUnit o simplifyType (* Simplify constructor argument types. *) val datatypes = Vector.fromListMap @@ -476,113 +554,117 @@ ; Datatype.T {tycon = tycon, cons = Vector.map (cons, fn {con, args} => {con = con, - args = keepSimplifyTypes args})})) + args = simplifyUsefulTypes args})})) + val datatypes = + Vector.concat + [Vector.new1 (Datatype.T {tycon = tyconVoid, cons = Vector.new0 ()}), + datatypes] val unitVar = Var.newNoname () - val {get = varInfo: Var.t -> Type.t, set = setVarInfo, ...} = - Property.getSetOnce + val {get = varInfo: Var.t -> {oldType: Type.t}, + set = setVarInfo, ...} = + Property.getSetOnce (Var.plist, Property.initRaise ("varInfo", Var.layout)) fun simplifyVarType (x: Var.t, t: Type.t): Type.t = - (setVarInfo (x, t) + (setVarInfo (x, {oldType = t}) ; simplifyType t) fun simplifyMaybeVarType (x: Var.t option, t: Type.t): Type.t = case x of SOME x => simplifyVarType (x, t) | NONE => simplifyType t - val oldVarType = varInfo - val newVarType = simplifyType o oldVarType + val oldVarType = #oldType o varInfo + val varIsUseful = typeIsUseful o oldVarType fun simplifyVar (x: Var.t): Var.t = - if Type.isUnit (newVarType x) - then unitVar - else x - val varIsUseless = Type.isUnit o newVarType - fun removeUselessVars xs = Vector.keepAll (xs, not o varIsUseless) + if varIsUseful x then x else unitVar + fun simplifyVars xs = Vector.map (xs, simplifyVar) + fun simplifyUsefulVars xs = Vector.keepAll (xs, varIsUseful) fun tuple xs = let - val xs = removeUselessVars xs - in if 1 = Vector.length xs - then Var (Vector.sub (xs, 0)) - else Tuple xs + val xs = simplifyUsefulVars xs + in + if 1 = Vector.length xs + then Var (Vector.first xs) + else Tuple xs end - fun simplifyFormals xts = - Vector.keepAllMap - (xts, fn (x, t) => - let val t = simplifyVarType (x, t) - in if Type.isUnit t - then NONE - else SOME (x, t) - end) - val typeIsUseful = not o Type.isUnit o simplifyType - datatype result = datatype Result.t - fun simplifyExp (e: Exp.t): Exp.t result = + fun simplifyUsefulFormals xts = + Exn.withEscape + (fn escape => + SOME (Vector.keepAllMap + (xts, fn (x, t) => + let + val t = simplifyVarType (x, t) + in + if typeIsVoid t + then escape NONE + else if Type.isUnit t + then NONE + else SOME (x, t) + end))) + fun simplifyExp (e: Exp.t): Exp.t = case e of ConApp {con, args} => (case conRep con of - ConRep.Transparent => Keep (tuple args) + ConRep.Transparent => tuple (simplifyUsefulVars args) | ConRep.Useful => - Keep (ConApp {con = con, - args = removeUselessVars args}) - | ConRep.Useless => Bugg) + ConApp {con = con, args = simplifyUsefulVars args} + | ConRep.Useless => + Error.bug "SimplifyTypes.simplfyExp: ConApp, ConRep.Useless") | PrimApp {prim, targs, args} => - Keep - (let - fun normal () = - PrimApp {prim = prim, - targs = simplifyTypes targs, - args = Vector.map (args, simplifyVar)} - fun equal () = - if 2 = Vector.length args - then - if varIsUseless (Vector.sub (args, 0)) - then ConApp {con = Con.truee, - args = Vector.new0 ()} - else normal () - else Error.bug "SimplifyTypes.simplifyExp: strange eq/equal PrimApp" - open Prim.Name - in case Prim.name prim of - MLton_eq => equal () - | MLton_equal => equal () - | _ => normal () - end) + let + fun normal () = + PrimApp {prim = prim, + targs = simplifyTypes targs, + args = simplifyVars args} + fun equal () = + if Cardinality.isOne (typeCardinality (Vector.first targs)) + then ConApp {con = Con.truee, args = Vector.new0 ()} + else normal () + fun length () = + if Cardinality.isZero (typeCardinality (Vector.first targs)) + then Exp.Const (Const.word (WordX.zero (WordSize.seqIndex ()))) + else normal () + in + case prim of + Prim.Array_length => length () + | Prim.MLton_eq => equal () + | Prim.MLton_equal => equal () + | Prim.Vector_length => length () + | _ => normal () + end | Select {tuple, offset} => let val ts = Type.deTuple (oldVarType tuple) - in Vector.fold' + in + Vector.fold' (ts, 0, (offset, 0), fn (pos, t, (n, offset)) => if n = 0 then (Vector.Done - (Keep - (if offset = 0 - andalso not (Vector.existsR - (ts, pos + 1, Vector.length ts, - typeIsUseful)) - then Var tuple - else Select {tuple = tuple, - offset = offset}))) - else Vector.Continue (n - 1, - if typeIsUseful t - then offset + 1 - else offset), - fn _ => Error.bug "SimplifyTypes.simplifyExp: Select:newOffset") + (if offset = 0 + andalso not (Vector.existsR + (ts, pos + 1, Vector.length ts, + typeIsUseful)) + then Var tuple + else Select {tuple = tuple, + offset = offset})) + else (Vector.Continue + (n - 1, + if typeIsUseful t + then offset + 1 + else offset)), + fn _ => Error.bug "SimplifyTypes.simplifyExp: Select") end - | Tuple xs => Keep (tuple xs) - | _ => Keep e + | Tuple xs => tuple xs + | _ => e val simplifyExp = Trace.trace ("SimplifyTypes.simplifyExp", - Exp.layout, Result.layout Exp.layout) + Exp.layout, Exp.layout) simplifyExp fun simplifyTransfer (t : Transfer.t): Statement.t vector * Transfer.t = case t of - Arith {prim, args, overflow, success, ty} => - (Vector.new0 (), Arith {prim = prim, - args = Vector.map (args, simplifyVar), - overflow = overflow, - success = success, - ty = ty}) - | Bug => (Vector.new0 (), t) + Bug => (Vector.new0 (), t) | Call {func, args, return} => (Vector.new0 (), Call {func = func, return = return, - args = removeUselessVars args}) + args = simplifyUsefulVars args}) | Case {test, cases = Cases.Con cases, default} => let val cases = @@ -595,7 +677,7 @@ | (n, SOME l) => if n = tyconNumCons (Type.deDatatype (oldVarType test)) then NONE - else SOME l + else SOME l fun normal () = (Vector.new0 (), Case {test = test, @@ -607,17 +689,17 @@ (Vector.new0 (), Goto {dst = l, args = Vector.new0 ()}) | (1, NONE) => let - val (con, l) = Vector.sub (cases, 0) + val (con, l) = Vector.first cases in if ConRep.isUseful (conRep con) then (* This case can occur because an array or vector * tycon was kept around. *) - normal () + normal () else (* The type has become a tuple. Do the selects. *) let - val ts = keepSimplifyTypes (conArgs con) + val ts = simplifyUsefulTypes (conArgs con) val (args, stmts) = if 1 = Vector.length ts then (Vector.new1 test, Vector.new0 ()) @@ -625,101 +707,160 @@ Vector.unzip (Vector.mapi (ts, fn (i, ty) => - let val x = Var.newNoname () - in (x, - Statement.T - {var = SOME x, + let + val x = Var.newNoname () + in + (x, + Statement.T + {var = SOME x, ty = ty, exp = Select {tuple = test, offset = i}}) end)) - in (stmts, Goto {dst = l, args = args}) + in + (stmts, Goto {dst = l, args = args}) end end | _ => normal () end | Case _ => (Vector.new0 (), t) | Goto {dst, args} => - (Vector.new0 (), Goto {dst = dst, args = removeUselessVars args}) - | Raise xs => (Vector.new0 (), Raise (removeUselessVars xs)) - | Return xs => (Vector.new0 (), Return (removeUselessVars xs)) + (Vector.new0 (), Goto {dst = dst, args = simplifyUsefulVars args}) + | Raise xs => (Vector.new0 (), Raise (simplifyUsefulVars xs)) + | Return xs => (Vector.new0 (), Return (simplifyUsefulVars xs)) | Runtime {prim, args, return} => (Vector.new0 (), Runtime {prim = prim, - args = Vector.map (args, simplifyVar), + args = simplifyVars args, return = return}) val simplifyTransfer = Trace.trace - ("SimplifyTypes.simplifyTransfer", Transfer.layout, + ("SimplifyTypes.simplifyTransfer", + Transfer.layout, Layout.tuple2 (Vector.layout Statement.layout, Transfer.layout)) simplifyTransfer + datatype result = datatype Result.t fun simplifyStatement (Statement.T {var, ty, exp}) = let - val ty = simplifyMaybeVarType (var, ty) + val ty = simplifyMaybeVarType (var, ty) in - (* It is wrong to omit calling simplifyExp when var = NONE because - * targs in a PrimApp may still need to be simplified. - *) - if not (Type.isUnit ty) - orelse Exp.maySideEffect exp - orelse (case exp of - Profile _ => true - | _ => false) - then - (case simplifyExp exp of - Bugg => Bugg - | Delete => Delete - | Keep exp => - Keep (Statement.T {var = var, ty = ty, exp = exp})) + if typeIsVoid ty + then (* It is impossible for a statement to produce a value of an + * uninhabited type; block must be unreachable. + * Example: `Vector_sub` from a `(ty) vector`, where `ty` is + * uninhabited. The `(ty) vector` type is inhabited, but + * only by the vector of length 0; this `Vector_sub` is + * unreachable due to a dominating bounds check that must + * necessarily fail. + *) + Dead + else if not (Type.isUnit ty) + orelse Exp.maySideEffect exp + orelse (case exp of + Profile _ => true + | _ => false) + then (* It is wrong to omit calling simplifyExp when var = + * NONE because targs in a PrimApp may still need to be + * simplified. + *) + Keep (Statement.T {var = var, ty = ty, + exp = simplifyExp exp}) else Delete end + val simplifyStatement = + Trace.trace + ("SimplifyTypes.simplifyStatement", + Statement.layout, + Result.layout Statement.layout) + simplifyStatement fun simplifyBlock (Block.T {label, args, statements, transfer}) = - let - val args = simplifyFormals args - val statements = - Vector.fold' - (statements, 0, [], fn (_, statement, statements) => - case simplifyStatement statement of - Bugg => Vector.Done NONE - | Delete => Vector.Continue statements - | Keep s => Vector.Continue (s :: statements), - SOME o Vector.fromListRev) - in - case statements of - NONE => Block.T {label = label, - args = args, - statements = Vector.new0 (), - transfer = Bug} - | SOME statements => - let - val (stmts, transfer) = simplifyTransfer transfer - val statements = Vector.concat [statements, stmts] - in - Block.T {label = label, - args = args, - statements = statements, - transfer = transfer} - end - end + case simplifyUsefulFormals args of + NONE => + (* It is impossible for a block to be called with a value of an + * uninhabited type; block must be unreachable. + * However, block may be the `cont` or `handle` of a non-tail + * call. While it will be impossible for the called function + * to `Return` or `Raise` with a value of an uninhabited type, + * the `returns` and `raises` of such a function will be + * transformed to `SOME (Vector.new0 ())`. + *) + ({dead = true}, Block.T {label = label, + args = Vector.new0 (), + statements = Vector.new0 (), + transfer = Bug}) + | SOME args => + let + val statements = + Vector.fold' + (statements, 0, [], fn (_, statement, statements) => + case simplifyStatement statement of + Dead => Vector.Done NONE + | Delete => Vector.Continue statements + | Keep s => Vector.Continue (s :: statements), + SOME o Vector.fromListRev) + in + case statements of + NONE => ({dead = true}, + Block.T {label = label, + args = args, + statements = Vector.new0 (), + transfer = Bug}) + | SOME statements => + let + val (stmts, transfer) = simplifyTransfer transfer + val statements = Vector.concat [statements, stmts] + in + ({dead = false}, + Block.T {label = label, + args = args, + statements = statements, + transfer = transfer}) + end + end fun simplifyFunction f = let val {args, mayInline, name, raises, returns, start, ...} = Function.dest f - val args = simplifyFormals args - val blocks = ref [] - val _ = - Function.dfs (f, fn block => - (List.push (blocks, simplifyBlock block) - ; fn () => ())) - val returns = Option.map (returns, keepSimplifyTypes) - val raises = Option.map (raises, keepSimplifyTypes) in - Function.new {args = args, - blocks = Vector.fromList (!blocks), - mayInline = mayInline, - name = name, - raises = raises, - returns = returns, - start = start} + case simplifyUsefulFormals args of + NONE => + (* It is impossible for a function to be called with a value of an + * uninhabited type; function must be unreachable. + *) + NONE + | SOME args => + let + val blocks = ref [] + fun loop (Tree.T (b, children)) = + let + val ({dead}, b) = simplifyBlock b + val _ = List.push (blocks, b) + in + if dead + then () + else Tree.Seq.foreach (children, loop) + end + val _ = loop (Function.dominatorTree f) + + local + fun doit rs = + case rs of + NONE => NONE + | SOME ts => SOME (case simplifyUsefulTypesOpt ts of + NONE => Vector.new0 () + | SOME ts => ts) + in + val returns = doit returns + val raises = doit raises + end + in + SOME (Function.new {args = args, + blocks = Vector.fromList (!blocks), + mayInline = mayInline, + name = name, + raises = raises, + returns = returns, + start = start}) + end end val globals = Vector.concat @@ -728,16 +869,18 @@ exp = Exp.unit}), Vector.keepAllMap (globals, fn s => case simplifyStatement s of - Bugg => Error.bug "SimplifyTypes.globals: bind can't fail" + Dead => Error.bug "SimplifyTypes.globals: Dead" | Delete => NONE | Keep b => SOME b)] val shrink = shrinkFunction {globals = globals} - val functions = List.revMap (functions, shrink o simplifyFunction) + val simplifyFunction = fn f => Option.map (simplifyFunction f, shrink) + val functions = List.revKeepAllMap (functions, simplifyFunction) val program = Program.T {datatypes = datatypes, globals = globals, functions = functions, main = main} + val _ = destroyTypeCardinality () val _ = destroySimplifyType () val _ = Program.clearTop program in diff -Nru mlton-20130715/mlton/ssa/sources.cm mlton-20210117+dfsg/mlton/ssa/sources.cm --- mlton-20130715/mlton/ssa/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -1,28 +1,26 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library -signature HANDLER -signature RETURN signature SSA signature SSA2 -functor FlatLattice functor Ssa functor Ssa2 functor SsaToSsa2 is +../../lib/mlton/sources.cm ../atoms/sources.cm ../control/sources.cm -../../lib/mlton/sources.cm equatable.sig equatable.sml @@ -48,14 +46,6 @@ shrink2.sig shrink.fun shrink2.fun -flat-lattice.sig -flat-lattice.fun -n-point-lattice.sig -n-point-lattice.fun -two-point-lattice.sig -two-point-lattice.fun -three-point-lattice.sig -three-point-lattice.fun restore.sig restore.fun @@ -72,6 +62,7 @@ constant-propagation.fun contify.fun deep-flatten.fun +duplicate-globals.fun flatten.fun inline.sig inline.fun @@ -80,6 +71,8 @@ local-flatten.fun local-ref.fun loop-invariant.fun +loop-unroll.fun +loop-unswitch.fun poly-equal.fun poly-hash.fun profile.sig @@ -91,7 +84,9 @@ ref-flatten.fun remove-unused.fun remove-unused2.fun +share-zero-vec.fun simplify-types.fun +split-types.fun useless.fun zone.fun simplify.sig diff -Nru mlton-20130715/mlton/ssa/sources.mlb mlton-20210117+dfsg/mlton/ssa/sources.mlb --- mlton-20130715/mlton/ssa/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -35,14 +36,6 @@ shrink2.sig shrink.fun shrink2.fun - flat-lattice.sig - ann "forceUsed" in flat-lattice.fun end - n-point-lattice.sig - ann "forceUsed" in n-point-lattice.fun end - two-point-lattice.sig - two-point-lattice.fun - three-point-lattice.sig - ann "forceUsed" in three-point-lattice.fun end restore.sig restore.fun @@ -59,6 +52,7 @@ constant-propagation.fun contify.fun deep-flatten.fun + duplicate-globals.fun flatten.fun inline.sig inline.fun @@ -67,6 +61,8 @@ local-flatten.fun local-ref.fun loop-invariant.fun + loop-unroll.fun + loop-unswitch.fun poly-equal.fun poly-hash.fun profile.sig @@ -78,7 +74,9 @@ ref-flatten.fun remove-unused.fun remove-unused2.fun + share-zero-vec.fun simplify-types.fun + split-types.fun useless.fun zone.fun simplify.sig @@ -92,12 +90,9 @@ ssa-to-ssa2.sig ssa-to-ssa2.fun in - signature HANDLER - signature RETURN signature SSA signature SSA2 - functor FlatLattice functor Ssa functor Ssa2 functor SsaToSsa2 diff -Nru mlton-20130715/mlton/ssa/split-types.fun mlton-20210117+dfsg/mlton/ssa/split-types.fun --- mlton-20130715/mlton/ssa/split-types.fun 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/split-types.fun 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,436 @@ +(* Copyright (C) 2018 Jason Carr + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + *) + +functor SplitTypes(S: SSA_TRANSFORM_STRUCTS): SSA_TRANSFORM = +struct + + open S + + structure TypeInfo = struct + datatype heapType = Array | Ref | Vector | Weak + datatype t = Unchanged of Type.t + | Fresh of {cons: con list ref, hash: word, tycon: Tycon.t} Equatable.t + | Tuple of t vector + | Heap of (t * heapType) + and con = ConData of Con.t * (t vector) + + fun layoutFresh {tycon=ty, cons=cons, ...} = + Layout.fill [Tycon.layout ty, Layout.str " # ", + Ref.layout (List.layout (fn ConData (con, _) => Con.layout con)) cons] + and layout (t: t) = + case t of + Unchanged t => Type.layout t + | Fresh eq => Equatable.layout (eq, layoutFresh) + | Tuple vect => Layout.tuple (Vector.toListMap (vect, layout)) + | Heap (t, ht) => Layout.fill [layout t, + case ht of + Array => Layout.str " array" + | Ref => Layout.str " ref" + | Vector => Layout.str " vector" + | Weak => Layout.str " weak"] + + and hash (t : t) : word = + case t of + Unchanged ty => Type.hash ty + | Fresh eq => #hash (Equatable.value eq) + | Tuple vect => Hash.vectorMap(vect, hash) + | Heap (t,htype) => Hash.combine (hash t, + (case htype of + Array => 0w0 + | Ref => 0w1 + | Vector => 0w2 + | Weak => 0w3)) + + (* The equality of types becomes more coarse during analysis, + * so it may be unsafe to use as equality *) + fun equated (t1, t2) = + case (t1, t2) of + (Unchanged ty1, Unchanged ty2) => Type.equals (ty1, ty2) + | (Fresh eq1, Fresh eq2) => Equatable.equals (eq1, eq2) + | (Tuple tup1, Tuple tup2) => Vector.equals (tup1, tup2, equated) + | (Heap (t1, _), Heap (t2, _)) => equated (t1, t2) + | _ => false + + fun deFresh t = + case t of + Fresh eq => eq + | _ => Error.bug "SplitTypes.TypeInfo.deFresh" + + fun mergeFresh coerceList ({tycon=tycon1, cons=cons1, hash=hash1}, {tycon=tycon2, cons=cons2, hash=_}) = + let + val tycon = + if Tycon.equals (tycon1, tycon2) + then tycon1 + else Error.bug "SplitTypes.TypeInfo.mergeFresh: Inconsistent tycons" + val cons = ref (!cons1) + val _ = List.foreach (!cons2, fn conData as ConData (con2, args2) => + let + val found = List.peek (!cons1, fn ConData (con1, _) => + Con.equals (con1, con2)) + in + case found of + SOME (ConData (_, args1)) => List.push (coerceList, (args1, args2)) + | NONE => List.push (cons, conData) + end) + in + {tycon=tycon, cons=cons, hash=hash1} + end + fun coerce (from, to) = + case (from, to) of + (Fresh a, Fresh b) => + let + (* in some situations, recursive data types may cause lost updates + * so we need to completely finish the coercion before we recurse *) + val coerceList = ref [] + val result = Equatable.equate (a, b, mergeFresh coerceList) + val _ = List.foreach (!coerceList, fn (args1, args2) => + Vector.foreach2 (args1, args2, coerce)) + in + result + end + | (Tuple a, Tuple b) => Vector.foreach2 (a, b, coerce) + | (Unchanged t1, Unchanged t2) => + if Type.equals (t1, t2) + then () + else Error.bug "SplitTypes.TypeInfo.coerce: Bad merge of unchanged types" + | (Heap (t1, _), Heap (t2, _)) => + coerce (t1, t2) + | _ => + Error.bug (Layout.toString (Layout.fill [ + Layout.str "SplitTypes.TypeInfo.coerce: Strange coercion: ", + layout from, Layout.str " coerced to ", layout to ])) + fun newFresh (tycon, cons) = + Equatable.new {tycon=tycon, cons=ref cons, hash=Random.word ()} + fun fromType (ty: Type.t) = + case Type.dest ty of + Type.Datatype tycon => Fresh (newFresh (tycon, [])) + | Type.Tuple ts => Tuple (Vector.map (ts, fromType)) + | Type.Array t => Heap (fromType t, Array) + | Type.Ref t => Heap (fromType t, Ref) + | Type.Vector t => Heap (fromType t, Vector) + | Type.Weak t => Heap (fromType t, Weak) + | _ => Unchanged ty + fun fromCon {con: Con.t, args: t vector, tycon: Tycon.t} = + Fresh (newFresh (tycon, [ConData (con, args)])) + fun fromTuple (vect: t vector) = Tuple vect + fun const (c: Const.t): t = fromType (Type.ofConst c) + + fun select {tuple, offset, resultType=_} = + case tuple of + Tuple ts => Vector.sub (ts, offset) + | _ => Error.bug "SplitTypes.TypeInfo.select: Tried to select from non-tuple info" + end + +fun transform (program as Program.T {datatypes, globals, functions, main}) = + let + val conTyconMap = + HashTable.new {hash=Con.hash, equals=Con.equals} + fun conTycon con = + HashTable.lookupOrInsert (conTyconMap, con, fn () => + Error.bug ("SplitTypes.transform.conTycon: " ^ (Con.toString con))) + val _ = + Vector.foreach (datatypes, fn Datatype.T {cons, tycon} => + Vector.foreach (cons, fn {con, ...} => + ignore (HashTable.lookupOrInsert (conTyconMap, con, fn () => tycon)))) + + (* primitives may return this boolean *) + val primBoolTy = Type.bool + val primBoolTycon = Type.deDatatype primBoolTy + val primBoolInfo = TypeInfo.fromType primBoolTy + val _ = List.map ([Con.truee, Con.falsee], fn con => + TypeInfo.coerce (TypeInfo.fromCon {con=con, args=Vector.new0 (), tycon = primBoolTycon}, primBoolInfo)) + + fun primApp {args, prim, resultType, resultVar=_, targs} = + let + fun derefPrim args = + case Vector.sub (args, 0) of + TypeInfo.Heap (t, _) => t + | _ => Error.bug "SplitTypes.transform.primApp: Strange deref" + fun refPrim heapType args = TypeInfo.Heap (Vector.sub (args, 0), heapType) + fun assignPrim heapType args = let + val _ = TypeInfo.coerce (Vector.sub (args, 0), TypeInfo.Heap (Vector.sub (args, 1), heapType)) + in + TypeInfo.fromType Type.unit + end + fun updatePrim heapType args = let + val _ = TypeInfo.coerce (Vector.sub (args, 0), TypeInfo.Heap (Vector.sub (args, 2), heapType)) + in + TypeInfo.fromType Type.unit + end + fun equalPrim args = + let + val _ = TypeInfo.coerce (Vector.sub (args, 0), Vector.sub (args, 1)) + in + primBoolInfo + end + fun default () = + if case Type.dest resultType of + Type.Datatype tycon => Tycon.equals (tycon, primBoolTycon) + | _ => false + then primBoolInfo + else TypeInfo.fromType resultType + + in + case prim of + Prim.Array_array => TypeInfo.Heap + let + val ty = TypeInfo.fromType (Vector.sub (targs, 0)) + val _ = Vector.foreach (args, fn a => TypeInfo.coerce (a, ty)) + in + (ty, TypeInfo.Array) + end + | Prim.Array_sub => derefPrim args + | Prim.Array_toArray => Vector.sub (args, 0) + | Prim.Array_toVector => Vector.sub (args, 0) + | Prim.Array_update => updatePrim TypeInfo.Array args + | Prim.Ref_ref => refPrim TypeInfo.Ref args + | Prim.Ref_deref => derefPrim args + | Prim.Ref_assign => assignPrim TypeInfo.Ref args + | Prim.Vector_sub => derefPrim args + | Prim.Vector_vector => TypeInfo.Heap + let + val ty = TypeInfo.fromType (Vector.sub (targs, 0)) + val _ = Vector.foreach (args, fn a => TypeInfo.coerce (a, ty)) + in + (ty, TypeInfo.Vector) + end + | Prim.Weak_get => derefPrim args + | Prim.Weak_new => refPrim TypeInfo.Weak args + | Prim.MLton_equal => equalPrim args + | Prim.MLton_eq => equalPrim args + | Prim.CFunction (CFunction.T {args=cargs, ...}) => + let + (* for the C methods, we need false -> 0 and true -> 1 so they have to remain bools *) + val _ = Vector.foreach2 (args, cargs, fn (arg, carg) => + if Type.equals (carg, primBoolTy) + then TypeInfo.coerce (arg, primBoolInfo) + else ()) + in + default () + end + | _ => default () + end + val { value, func, ... } = + analyze + { coerce = fn {from, to} => TypeInfo.coerce (from, to), + conApp = fn {con, args} => TypeInfo.fromCon {con = con, args = args, tycon = conTycon con}, + const = TypeInfo.const, + filter = fn (ty, con, args) => TypeInfo.coerce (ty, TypeInfo.fromCon {con=con, args=args, tycon = conTycon con}), + filterWord = fn _ => (), + fromType = TypeInfo.fromType, + layout = TypeInfo.layout, + primApp = primApp, + program = program, + select = TypeInfo.select, + tuple = TypeInfo.fromTuple, + useFromTypeOnBinds = true } + + val tyconMap = + HashTable.new {hash=(#hash o Equatable.value), equals=Equatable.equals} + + (* Always map the prim boolean to bool *) + val _ = HashTable.lookupOrInsert (tyconMap, TypeInfo.deFresh primBoolInfo, fn () => primBoolTycon) + + fun getTy typeInfo = + let + fun pickTycon {tycon, cons, hash = _} = + case (Tycon.equals (tycon, primBoolTycon), !Control.splitTypesBool) of + (true, Control.Always) => Tycon.new tycon + | (true, Control.Never) => tycon + | (true, Control.Smart) => if List.length (!cons) < 2 then Tycon.new tycon else tycon + | (false, _) => Tycon.new tycon + fun makeTy eq = pickTycon (Equatable.value eq) + in + case typeInfo of + TypeInfo.Unchanged ty => ty + | TypeInfo.Fresh eq => + Type.datatypee (HashTable.lookupOrInsert (tyconMap, eq, fn () => makeTy eq)) + | TypeInfo.Tuple typeInfos => + Type.tuple (Vector.map (typeInfos, getTy)) + | TypeInfo.Heap (typeInfo', heapType) => + (case heapType of + TypeInfo.Array => Type.array (getTy typeInfo') + | TypeInfo.Ref => Type.reff (getTy typeInfo') + | TypeInfo.Weak => Type.weak (getTy typeInfo') + | TypeInfo.Vector => Type.vector (getTy typeInfo')) + end + + + fun remappedConsHash (oldCon, tycon) = Hash.combine (Tycon.hash tycon, Con.hash oldCon) + val remappedCons: ((Con.t * Tycon.t), Con.t) HashTable.t = + HashTable.new {hash=remappedConsHash, equals=fn ((con1, tycon1), (con2, tycon2)) => + Tycon.equals (tycon1, tycon2) andalso Con.equals (con1, con2)} + fun remapCon (oldCon, newTycon) = + if Tycon.equals (newTycon, primBoolTycon) + then oldCon + else HashTable.lookupOrInsert (remappedCons, (oldCon, newTycon), fn () => Con.new oldCon) + + + (* Loop over the entire program, map each type to the new type, + * and each constructor to the new constructor *) + fun loopExp (exp, newTy) = + case exp of + Exp.ConApp {con, args} => + let + val newCon = remapCon (con, Type.deDatatype newTy) + in + Exp.ConApp {con=newCon, args=args} + end + | Exp.PrimApp {prim, args, ...} => + let + val argTys = Vector.map (args, fn arg => getTy (value arg)) + val newTargs = Prim.extractTargs (prim, + {args=argTys, + result=newTy, + typeOps = {deArray = Type.deArray, + deArrow = fn _ => Error.bug "SplitTypes.transform.loopExp: deArrow primApp", + deRef = Type.deRef, + deVector = Type.deVector, + deWeak = Type.deWeak}}) + val newPrim = + case prim of + Prim.CFunction (cfunc as CFunction.T {args=_, return=_, + convention, inline, kind, prototype, symbolScope, target}) => + let + val newArgs = argTys + val newReturn = newTy + val newCFunc = + case kind of + CFunction.Kind.Runtime _ => + CFunction.T {args=newArgs, return=newReturn, + convention=convention, inline=inline, kind=kind, prototype=prototype, + symbolScope=symbolScope, target=target} + | _ => cfunc + in + Prim.CFunction newCFunc + end + | _ => prim + in + Exp.PrimApp {prim=newPrim, targs=newTargs, args=args} + end + | _ => exp + fun loopStatement (Statement.T {exp, ty, var=varopt}) = + let + val newTy = + case varopt of + NONE => ty + | SOME var => getTy (value var) + val newExp = loopExp (exp, newTy) + in + Statement.T {exp=newExp, ty=newTy, var=varopt} + end + fun loopTransfer transfer = + case transfer of + Transfer.Case {cases, test, default} => + (case cases of + Cases.Con cases' => + let + val newTycon = Type.deDatatype (getTy (value test)) + val newCases = Cases.Con (Vector.map + (cases', + fn (con, label) => (remapCon (con, newTycon), label))) + (* if the cases are now exhaustive, default needs to be removed *) + val newDefault = + case (default, value test) of + (SOME _, TypeInfo.Fresh eq) => + let + val cons = (! o #cons o Equatable.value) eq + in + if Vector.length cases' < List.length cons + then default + else NONE + end + | _ => default + in + Transfer.Case {cases=newCases, default=newDefault, test=test} + end + | Cases.Word _ => transfer) + | _ => transfer + fun loopBlock (Block.T { args, label, statements, transfer }) = + let + val newArgs = Vector.map (args, fn (var, _) => (var, getTy (value var))) + val newStatements = Vector.map (statements, loopStatement) + val newTransfer = loopTransfer transfer + in + Block.T {args=newArgs, label=label, statements=newStatements ,transfer=newTransfer} + end + + + val globals = + Vector.map (globals, loopStatement) + val functions = + List.map (functions, fn f => + let + val { args, blocks, mayInline, name, start, ... } = + Function.dest f + val { args = argTys, raises = raiseTys, returns = returnTys } = func name + in + Function.new + { args = Vector.map2 (args, argTys, fn ((v, _), typeInfo) => (v, getTy typeInfo)), + blocks = Vector.map (blocks, loopBlock), + mayInline = mayInline, + name = name, + raises = Option.map (raiseTys, fn tys => Vector.map (tys, getTy)), + returns = Option.map (returnTys, fn tys => Vector.map (tys, getTy)), + start = start } + end) + + + (* This needs to run after looping since the types/constructors were + * duplicated at usage in the loops above *) + val numOldDatatypes = Vector.length datatypes + val datatypes = + let + fun reifyCon newTycon (TypeInfo.ConData (con, ts)) = + let + val newCon = remapCon (con, newTycon) + in + {con=newCon, args=Vector.map (ts, getTy)} + end + fun reifyCons (conList, newTycon) = + Vector.fromList (List.map (conList, reifyCon newTycon)) + + (* bool may appear multiple times depending on settings *) + val primBoolDt = Datatype.T + {cons=Vector.new2 + ({con=Con.truee, args=Vector.new0 ()}, + {con=Con.falsee, args=Vector.new0 ()}), tycon=primBoolTycon} + in + (Vector.fromList (primBoolDt :: (List.keepAllMap (HashTable.toList tyconMap, + fn (eq, tycon) => + (* Only one copy of the true prim bool type should exist *) + if Tycon.equals (tycon, primBoolTycon) + then NONE + else let + val {cons, ...} = Equatable.value eq + in + SOME (Datatype.T + {cons=reifyCons (!cons, tycon), tycon=tycon}) + end)))) + end + + val _ = Control.diagnostics + (fn display => + let + open Layout + in + display ( mayAlign [ + str "Program before splitting had ", + str (Int.toString numOldDatatypes), + str " datatypes.", + str "Program after splitting has ", + str (Int.toString (Vector.length datatypes)), + str " datatypes." + ]) + end ) + val program = + Program.T + { datatypes = datatypes, + globals = globals, + functions = functions, + main = main } + in program end +end diff -Nru mlton-20130715/mlton/ssa/ssa2.fun mlton-20210117+dfsg/mlton/ssa/ssa2.fun --- mlton-20130715/mlton/ssa/ssa2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/ssa2.sig mlton-20210117+dfsg/mlton/ssa/ssa2.sig --- mlton-20130715/mlton/ssa/ssa2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/ssa2-transform.sig mlton-20210117+dfsg/mlton/ssa/ssa2-transform.sig --- mlton-20130715/mlton/ssa/ssa2-transform.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa2-transform.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2009 Wesley W. Tersptra. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/ssa.fun mlton-20210117+dfsg/mlton/ssa/ssa.fun --- mlton-20130715/mlton/ssa/ssa.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/ssa.sig mlton-20210117+dfsg/mlton/ssa/ssa.sig --- mlton-20130715/mlton/ssa/ssa.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/ssa-to-ssa2.fun mlton-20210117+dfsg/mlton/ssa/ssa-to-ssa2.fun --- mlton-20130715/mlton/ssa/ssa-to-ssa2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa-to-ssa2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019-2020 Matthew Fluet. + * Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -114,57 +115,41 @@ | S.Exp.PrimApp {args, prim, ...} => let fun arg i = Vector.sub (args, i) + fun sequence () = + simple (S2.Exp.Sequence {args = Vector.map (args, Vector.new1)}) fun sub () = simple - (S2.Exp.Select {base = Base.VectorSub {index = arg 1, - vector = arg 0}, + (S2.Exp.Select {base = Base.SequenceSub {index = arg 1, + sequence = arg 0}, offset = 0}) - datatype z = datatype Prim.Name.t in - case Prim.name prim of - Array_array0Const => - let - val zeroVar = Var.newNoname () - val zeroTy = S2.Type.word (S2.WordSize.seqIndex ()) - val zeroExp = - (S2.Exp.Const o S2.Const.word) - (S2.WordX.zero (S2.WordSize.seqIndex ())) - in - Vector.new2 - (S2.Statement.Bind - {exp = zeroExp, - ty = zeroTy, - var = SOME zeroVar}, - S2.Statement.Bind - {exp = S2.Exp.PrimApp {args = Vector.new1 zeroVar, - prim = Prim.array}, - ty = ty, - var = var}) - end - | Array_sub => sub () - | Array_update => + case prim of + Prim.Array_array => sequence () + | Prim.Array_sub => sub () + | Prim.Array_update => maybeBindUnit (S2.Statement.Update - {base = Base.VectorSub {index = arg 1, - vector = arg 0}, + {base = Base.SequenceSub {index = arg 1, + sequence = arg 0}, offset = 0, value = arg 2}) - | Ref_assign => + | Prim.Ref_assign => maybeBindUnit (S2.Statement.Update {base = Base.Object (arg 0), offset = 0, value = arg 1}) - | Ref_deref => + | Prim.Ref_deref => simple (S2.Exp.Select {base = Base.Object (arg 0), offset = 0}) - | Ref_ref => + | Prim.Ref_ref => simple (S2.Exp.Object {args = Vector.new1 (arg 0), con = NONE}) - | Vector_length => + | Prim.Vector_length => simple (S2.Exp.PrimApp {args = args, - prim = Prim.arrayLength}) - | Vector_sub => sub () + prim = Prim.Array_length}) + | Prim.Vector_sub => sub () + | Prim.Vector_vector => sequence () | _ => simple (S2.Exp.PrimApp {args = args, prim = convertPrim prim}) @@ -194,7 +179,7 @@ handler = convertHandler handler} | S.Return.Tail => S2.Return.Tail val extraBlocks: S2.Block.t list ref = ref [] - fun convertCases (cs: S.Cases.t): S2.Cases.t = + fun convertCases (cs: (Con.t, Label.t) S.Cases.t): (Con.t, Label.t) S2.Cases.t = case cs of S.Cases.Con v => S2.Cases.Con @@ -245,13 +230,7 @@ | S.Cases.Word v => S2.Cases.Word v fun convertTransfer (t: S.Transfer.t): S2.Transfer.t = case t of - S.Transfer.Arith {args, overflow, prim, success, ty} => - S2.Transfer.Arith {args = args, - overflow = overflow, - prim = convertPrim prim, - success = success, - ty = convertType ty} - | S.Transfer.Bug => S2.Transfer.Bug + S.Transfer.Bug => S2.Transfer.Bug | S.Transfer.Call {args, func, return} => S2.Transfer.Call {args = args, func = func, diff -Nru mlton-20130715/mlton/ssa/ssa-to-ssa2.sig mlton-20210117+dfsg/mlton/ssa/ssa-to-ssa2.sig --- mlton-20130715/mlton/ssa/ssa-to-ssa2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa-to-ssa2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/ssa-transform.sig mlton-20210117+dfsg/mlton/ssa/ssa-transform.sig --- mlton-20130715/mlton/ssa/ssa-transform.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa-transform.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Copyright (C) 2009 Wesley W. Tersptra. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/ssa-tree2.fun mlton-20210117+dfsg/mlton/ssa/ssa-tree2.fun --- mlton-20130715/mlton/ssa/ssa-tree2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa-tree2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2014,2017-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,86 +12,26 @@ open S -structure Prod = - struct - datatype 'a t = T of {elt: 'a, isMutable: bool} vector - - fun dest (T p) = p - - val make = T - - fun empty () = T (Vector.new0 ()) - - fun fold (p, b, f) = - Vector.fold (dest p, b, fn ({elt, ...}, b) => f (elt, b)) - - fun foreach (p, f) = Vector.foreach (dest p, f o #elt) - - fun isEmpty p = Vector.isEmpty (dest p) - - fun isMutable (T v) = Vector.exists (v, #isMutable) - - fun sub (T p, i) = Vector.sub (p, i) - - fun elt (p, i) = #elt (sub (p, i)) - - fun length p = Vector.length (dest p) - - val equals: 'a t * 'a t * ('a * 'a -> bool) -> bool = - fn (p1, p2, equals) => - Vector.equals (dest p1, dest p2, - fn ({elt = e1, isMutable = m1}, - {elt = e2, isMutable = m2}) => - m1 = m2 andalso equals (e1, e2)) - - local - open Layout - in - fun layout (p, layout) = - paren - (#1 (Tycon.layoutApp - (Tycon.tuple, - Vector.map (dest p, fn {elt, isMutable} => - let - val lay = - if isMutable - then seq [layout elt, str " ref"] - else layout elt - in - (lay, ({isChar = false}, - Tycon.BindingStrength.unit)) - end)))) - end - - val map: 'a t * ('a -> 'b) -> 'b t = - fn (p, f) => - make (Vector.map (dest p, fn {elt, isMutable} => - {elt = f elt, - isMutable = isMutable})) - - val keepAllMap: 'a t * ('a -> 'b option) -> 'b t = - fn (p, f) => - make (Vector.keepAllMap (dest p, fn {elt, isMutable} => - Option.map (f elt, fn elt => - {elt = elt, - isMutable = isMutable}))) - end +(* infix declarations for Parse.Ops *) +infix 1 <|> >>= +infix 3 <*> <* *> +infixr 4 <$> <$$> <$$$> <$$$$> <$ <$?> structure ObjectCon = struct datatype t = Con of Con.t + | Sequence | Tuple - | Vector val equals: t * t -> bool = fn (Con c, Con c') => Con.equals (c, c') + | (Sequence, Sequence) => true | (Tuple, Tuple) => true - | (Vector, Vector) => true | _ => false - val isVector: t -> bool = - fn Vector => true + val isSequence: t -> bool = + fn Sequence => true | _ => false val layout: t -> Layout.t = @@ -101,9 +41,15 @@ in case oc of Con c => Con.layout c - | Tuple => str "Tuple" - | Vector => str "Vector" + | Sequence => str "sequence" + | Tuple => str "tuple" end + + local + val conAlts = Vector.fromList [("sequence", Sequence), ("tuple", Tuple)] + in + val parse = Con.parseAs (conAlts, Con) + end end datatype z = datatype ObjectCon.t @@ -139,13 +85,22 @@ fun equals (t, t') = PropertyList.equals (plist t, plist t') - val deVectorOpt: t -> t Prod.t option = + val deSequenceOpt: t -> t Prod.t option = fn t => case dest t of - Object {args, con = Vector} => SOME args + Object {args, con = Sequence} => SOME args | _ => NONE - val isVector: t -> bool = isSome o deVectorOpt + val deSequence1: t -> t = + fn t => + case deSequenceOpt t of + SOME args => + if Prod.length args = 1 + then Prod.elt (args, 0) + else Error.bug "SsaTree2.Type.deSequence1" + | _ => Error.bug "SsaTree2.Type.deSequence1" + + val isSequence: t -> bool = isSome o deSequenceOpt val deWeakOpt: t -> t option = fn t => @@ -192,7 +147,7 @@ let val w = newHash () in - fn t => lookup (Word.xorb (w, hash t), f t) + fn t => lookup (Hash.combine (w, hash t), f t) end in val weak = make Weak @@ -203,6 +158,12 @@ val bool = datatypee Tycon.bool + val isBool: t -> bool = + fn t => + case dest t of + Datatype t => Tycon.equals (t, Tycon.bool) + | _ => false + local fun make (tycon, tree) = lookup (Tycon.hash tycon, tree) in @@ -218,42 +179,36 @@ fn s => lookup (Tycon.hash (Tycon.word s), Word s) local - val generator: Word.t = 0wx5555 val tuple = newHash () - val vector = newHash () + val sequence = newHash () fun hashProd (p, base) = - Vector.fold (Prod.dest p, base, fn ({elt, ...}, w) => - Word.xorb (w * generator, hash elt)) + Hash.combine (base, Hash.vectorMap (Prod.dest p, fn {elt, ...} => hash elt)) in fun object {args, con}: t = let val base = case con of Con c => Con.hash c + | Sequence => sequence | Tuple => tuple - | Vector => vector val hash = hashProd (args, base) in lookup (hash, Object {args = args, con = con}) end end - fun vector p = object {args = p, con = Vector} + fun sequence p = object {args = p, con = Sequence} - local - fun make isMutable t = - vector (Prod.make (Vector.new1 {elt = t, isMutable = isMutable})) - in - val array1 = make true - val vector1 = make false - end + fun array1 ty = sequence (Prod.new1Mutable ty) + fun vector1 ty = sequence (Prod.new1Immutable ty) fun ofConst c = let datatype z = datatype Const.t in case c of - IntInf _ => intInf + CSymbol _ => cpointer + | IntInf _ => intInf | Null => cpointer | Real r => real (RealX.size r) | Word w => word (WordX.size w) @@ -291,21 +246,51 @@ | Object {args, con} => if isUnit t then str "unit" - else - let - val args = Prod.layout (args, layout) - in - case con of - Con c => seq [Con.layout c, str " of ", args] - | Tuple => args - | Vector => seq [args, str " vector"] - end + else seq [Prod.layout (args, layout), + str " ", + ObjectCon.layout con] | Real s => str (concat ["real", RealSize.toString s]) | Thread => str "thread" - | Weak t => seq [layout t, str " weak"] + | Weak t => seq [paren (layout t), str " ", str "weak"] | Word s => str (concat ["word", WordSize.toString s]))) end + local + structure P = Parse + open Parse.Ops + + val tyconAlts = + Vector.fromList + ([("cpointer", cpointer), + ("intInf", intInf), + ("unit", unit), + ("thread", thread)] @ + List.map (WordSize.all, fn ws => ("word" ^ WordSize.toString ws, word ws)) @ + List.map (RealSize.all, fn rs => ("real" ^ RealSize.toString rs, real rs))) + val unary = + Con.parseAs (Vector.new3 (("sequence", sequence o Prod.new1Immutable), + ("tuple", tuple o Prod.new1Immutable), + ("weak", weak)), + fn con => fn ty => + conApp (con, Prod.new1Immutable ty)) + in + fun parse () = + let + val parse = P.delay parse + in + Tycon.parseAs (tyconAlts, datatypee) + <|> + (P.paren parse >>= (fn ty => + unary >>= (fn unary => + P.pure (unary ty)))) + <|> + (Prod.parse parse >>= (fn args => + ObjectCon.parse >>= (fn con => + P.pure (object {args = args, con = con})))) + end + val parse = parse () + end + fun checkPrimApp {args, prim, result}: bool = let exception BadPrimApp @@ -345,183 +330,186 @@ val default = fn () => (default ()) handle BadPrimApp => false - datatype z = datatype Prim.Name.t fun arg i = Vector.sub (args, i) fun oneArg f = 1 = Vector.length args andalso f (arg 0) + fun twoArgs f = 2 = Vector.length args andalso f (arg 0, arg 1) + fun fiveArgs f = 5 = Vector.length args andalso f (arg 0, arg 1, arg 2, arg 3, arg 4) val seqIndex = word (WordSize.seqIndex ()) in - case Prim.name prim of - Array_array => - oneArg (fn n => - equals (n, seqIndex) andalso isVector result) - | Array_length => - oneArg (fn a => - isVector a andalso equals (result, seqIndex)) - | Array_toVector => + case prim of + Prim.Array_alloc _ => + oneArg + (fn n => + case deSequenceOpt result of + SOME resp => + Prod.allAreMutable resp + andalso equals (n, seqIndex) + | _ => false) + | Prim.Array_copyArray => + fiveArgs + (fn (dst, di, src, si, len) => + case (deSequenceOpt dst, deSequenceOpt src) of + (SOME dstp, SOME srcp) => + Vector.equals (Prod.dest dstp, Prod.dest srcp, + fn ({elt = dstElt, isMutable = dstIsMutable}, + {elt = srcElt, isMutable = srcIsMutable}) => + dstIsMutable andalso srcIsMutable + andalso equals (dstElt, srcElt)) + andalso equals (di, seqIndex) + andalso equals (si, seqIndex) + andalso equals (len, seqIndex) + andalso isUnit result + | _ => false) + | Prim.Array_copyVector => + fiveArgs + (fn (dst, di, src, si, len) => + case (deSequenceOpt dst, deSequenceOpt src) of + (SOME dstp, SOME srcp) => + Vector.equals (Prod.dest dstp, Prod.dest srcp, + fn ({elt = dstElt, isMutable = dstIsMutable}, + {elt = srcElt, ...}) => + dstIsMutable + andalso equals (dstElt, srcElt)) + andalso equals (di, seqIndex) + andalso equals (si, seqIndex) + andalso equals (len, seqIndex) + andalso isUnit result + | _ => false) + | Prim.Array_length => oneArg (fn a => - case (deVectorOpt a, deVectorOpt result) of - (SOME ap, SOME vp) => - Vector.equals (Prod.dest ap, Prod.dest vp, - fn ({elt = ae, isMutable = ai}, - {elt = ve, isMutable = vi}) => - (not vi orelse ai) - andalso equals (ae, ve)) + isSequence a andalso equals (result, seqIndex)) + | Prim.Array_toArray => + oneArg + (fn arr => + case (deSequenceOpt arr, deSequenceOpt result) of + (SOME arrp, SOME resp) => + Vector.equals (Prod.dest arrp, Prod.dest resp, + fn ({elt = arrElt, isMutable = arrIsMutable}, + {elt = resElt, isMutable = resIsMutable}) => + arrIsMutable andalso resIsMutable + andalso equals (arrElt, resElt)) + | _ => false) + | Prim.Array_toVector => + oneArg + (fn arr => + case (deSequenceOpt arr, deSequenceOpt result) of + (SOME arrp, SOME resp) => + Vector.equals (Prod.dest arrp, Prod.dest resp, + fn ({elt = arrElt, isMutable = arrIsMutable}, + {elt = resElt, ...}) => + arrIsMutable + andalso equals (arrElt, resElt)) + | _ => false) + | Prim.Array_uninit => + twoArgs + (fn (arr, i) => + case deSequenceOpt arr of + SOME arrp => + Prod.allAreMutable arrp + andalso equals (i, seqIndex) + andalso isUnit result + | _ => false) + | Prim.Array_uninitIsNop => + oneArg + (fn arr => + case deSequenceOpt arr of + SOME arrp => + Prod.allAreMutable arrp + andalso isBool result | _ => false) | _ => default () end end -structure Cases = +structure Base = struct - datatype t = - Con of (Con.t * Label.t) vector - | Word of WordSize.t * (WordX.t * Label.t) vector - - fun equals (c1: t, c2: t): bool = - let - fun doit (l1, l2, eq') = - Vector.equals - (l1, l2, fn ((x1, a1), (x2, a2)) => - eq' (x1, x2) andalso Label.equals (a1, a2)) - in - case (c1, c2) of - (Con l1, Con l2) => doit (l1, l2, Con.equals) - | (Word (_, l1), Word (_, l2)) => doit (l1, l2, WordX.equals) - | _ => false - end - - fun hd (c: t): Label.t = - let - fun doit v = - if Vector.length v >= 1 - then let val (_, a) = Vector.sub (v, 0) - in a - end - else Error.bug "SsaTree2.Cases.hd" - in - case c of - Con cs => doit cs - | Word (_, cs) => doit cs - end + datatype 'a t = + Object of 'a + | SequenceSub of {index: 'a, + sequence: 'a} - fun isEmpty (c: t): bool = + fun layout (base: 'a t, layoutX: 'a -> Layout.t): Layout.t = let - fun doit v = 0 = Vector.length v + open Layout in - case c of - Con cs => doit cs - | Word (_, cs) => doit cs + case base of + Object x => layoutX x + | SequenceSub {index, sequence} => + seq [str "$", tuple [layoutX sequence, layoutX index]] end - fun fold (c: t, b, f) = + fun parse (parseX: 'a Parse.t): 'a t Parse.t = let - fun doit l = Vector.fold (l, b, fn ((_, a), b) => f (a, b)) + open Parse in - case c of - Con l => doit l - | Word (_, l) => doit l + SequenceSub <$> + (mlSpaces *> str "$(" *> + parseX >>= (fn sequence => + mlSpaces *> str "," *> + parseX >>= (fn index => + mlSpaces *> str ")" *> + pure {index = index, sequence = sequence}))) + <|> + (Object <$> parseX) end - fun map (c: t, f): t = + fun layoutWithOffset (base: 'a t, offset, layoutX: 'a -> Layout.t): Layout.t = let - fun doit l = Vector.map (l, fn (i, x) => (i, f x)) - in - case c of - Con l => Con (doit l) - | Word (s, l) => Word (s, doit l) - end - - fun forall (c: t, f: Label.t -> bool): bool = - let - fun doit l = Vector.forall (l, fn (_, x) => f x) + open Layout in - case c of - Con l => doit l - | Word (_, l) => doit l + seq [str "#", Int.layout offset, str " ", + layout (base, layoutX)] end - fun foreach (c, f) = fold (c, (), fn (x, ()) => f x) - end - -local open Layout -in - fun layoutTuple xs = Vector.layout Var.layout xs -end - -structure Var = - struct - open Var - - fun pretty (x, global) = - case global x of - NONE => toString x - | SOME s => s - - fun prettys (xs: Var.t vector, global: Var.t -> string option) = - Layout.toString (Vector.layout - (fn x => - case global x of - NONE => layout x - | SOME s => Layout.str s) - xs) - end - -structure Base = - struct - datatype 'a t = - Object of 'a - | VectorSub of {index: 'a, - vector: 'a} - - fun layout (b: 'a t, layoutX: 'a -> Layout.t): Layout.t = + fun parseWithOffset (parseX: 'a Parse.t): ('a t * int) Parse.t = let - open Layout + open Parse in - case b of - Object x => layoutX x - | VectorSub {index, vector} => - seq [layoutX vector, str "[", layoutX index, str "]"] + mlSpaces *> char #"#" *> + (peek (nextSat Char.isDigit) *> + fromScan (Function.curry Int.scan StringCvt.DEC)) >>= (fn offset => + parse parseX >>= (fn base => + pure (base, offset))) end val equals: 'a t * 'a t * ('a * 'a -> bool) -> bool = fn (b1, b2, equalsX) => case (b1, b2) of (Object x1, Object x2) => equalsX (x1, x2) - | (VectorSub {index = i1, vector = v1}, - VectorSub {index = i2, vector = v2}) => + | (SequenceSub {index = i1, sequence = v1}, + SequenceSub {index = i2, sequence = v2}) => equalsX (i1, i2) andalso equalsX (v1, v2) | _ => false fun object (b: 'a t): 'a = case b of Object x => x - | VectorSub {vector = x, ...} => x + | SequenceSub {sequence = x, ...} => x local val newHash = Random.word val object = newHash () - val vectorSub = newHash () + val sequenceSub = newHash () in val hash: 'a t * ('a -> word) -> word = fn (b, hashX) => case b of - Object x => Word.xorb (object, hashX x) - | VectorSub {index, vector} => - Word.xorb (Word.xorb (hashX index, hashX vector), - vectorSub) + Object x => Hash.combine (object, hashX x) + | SequenceSub {index, sequence} => + Hash.combine3 (hashX index, hashX sequence, sequenceSub) end fun foreach (b: 'a t, f: 'a -> unit): unit = case b of Object x => f x - | VectorSub {index, vector} => (f index; f vector) + | SequenceSub {index, sequence} => (f index; f sequence) fun map (b: 'a t, f: 'a -> 'b): 'b t = case b of Object x => Object (f x) - | VectorSub {index, vector} => VectorSub {index = f index, - vector = f vector} + | SequenceSub {index, sequence} => SequenceSub {index = f index, + sequence = f sequence} end structure Exp = @@ -536,6 +524,7 @@ args: Var.t vector} | Select of {base: Var.t Base.t, offset: int} + | Sequence of {args: Var.t vector vector} | Var of Var.t val unit = Object {con = NONE, args = Vector.new0 ()} @@ -550,6 +539,7 @@ | Object {args, ...} => vs args | PrimApp {args, ...} => vs args | Select {base, ...} => Base.foreach (base, v) + | Sequence {args, ...} => Vector.foreach (args, vs) | Var x => v x end @@ -564,37 +554,70 @@ | PrimApp {prim, args} => PrimApp {args = fxs args, prim = prim} | Select {base, offset} => Select {base = Base.map (base, fx), offset = offset} + | Sequence {args} => + Sequence {args = Vector.map (args, fxs)} | Var x => Var (fx x) end fun layout' (e, layoutVar) = let open Layout + fun layoutArgs xs = Vector.layout layoutVar xs in case e of Const c => Const.layout c | Inject {sum, variant} => - seq [layoutVar variant, str ": ", Tycon.layout sum] + seq [str "inj ", paren (layoutVar variant), str ": ", Tycon.layout sum] | Object {con, args} => - seq [(case con of + seq [str "obj ", + (case con of NONE => empty | SOME c => seq [Con.layout c, str " "]), - layoutTuple args] + layoutArgs args] | PrimApp {args, prim} => - seq [Prim.layout prim, seq [str " ", layoutTuple args]] + seq [str "prim ", Prim.layoutFull (prim, Type.layout), str " ", layoutArgs args] | Select {base, offset} => - seq [str "#", Int.layout offset, str " ", - Base.layout (base, layoutVar)] + Base.layoutWithOffset (base, offset, layoutVar) + | Sequence {args} => + seq [str "seq ", + Vector.layout layoutArgs args] | Var x => layoutVar x end fun layout e = layout' (e, Var.layout) - fun toPretty (e, global: Var.t -> string option): string = - Layout.toString (layout' (e, fn x => - case global x of - NONE => Var.layout x - | SOME s => Layout.str s)) + val parse = + let + open Parse + val parseArgs = vector Var.parse + in + mlSpaces *> any + [Const <$> Const.parse, + Inject <$> + (kw "inj" *> + paren Var.parse >>= (fn variant => + sym ":" *> + Tycon.parse >>= (fn sum => + pure {variant = variant, sum = sum}))), + Object <$> + (kw "obj" *> + optional Con.parse >>= (fn con => + parseArgs >>= (fn args => + pure {con = con, args = args}))), + PrimApp <$> + (kw "prim" *> + Prim.parseFull Type.parse >>= (fn prim => + parseArgs >>= (fn args => + pure {prim = prim, args = args}))), + Select <$> + (Base.parseWithOffset Var.parse >>= (fn (base, offset) => + pure {base = base, offset = offset})), + Sequence <$> + (kw "seq" *> + vector parseArgs >>= (fn args => + pure {args = args})), + Var <$> Var.parse] + end fun maySideEffect (e: t): bool = case e of @@ -603,6 +626,7 @@ | Object _ => false | PrimApp {prim,...} => Prim.maySideEffect prim | Select _ => false + | Sequence _ => false | Var _ => false fun varsEquals (xs, xs') = Vector.equals (xs, xs', Var.equals) @@ -618,6 +642,8 @@ Prim.equals (prim, prim') andalso varsEquals (args, args') | (Select {base = b1, offset = i1}, Select {base = b2, offset = i2}) => Base.equals (b1, b2, Var.equals) andalso i1 = i2 + | (Sequence {args}, Sequence {args = args'}) => + Vector.equals (args, args', varsEquals) | (Var x, Var x') => Var.equals (x, x') | _ => false (* quell unused warning *) @@ -628,15 +654,15 @@ val inject = newHash () val primApp = newHash () val select = newHash () + val sequence = newHash () val tuple = newHash () fun hashVars (xs: Var.t vector, w: Word.t): Word.t = - Vector.fold (xs, w, fn (x, w) => Word.xorb (w, Var.hash x)) + Hash.combine (w, Hash.vectorMap (xs, Var.hash)) in val hash: t -> Word.t = fn Const c => Const.hash c | Inject {sum, variant} => - Word.xorb (inject, - Word.xorb (Tycon.hash sum, Var.hash variant)) + Hash.combine3 (inject, Tycon.hash sum, Var.hash variant) | Object {con, args, ...} => hashVars (args, case con of @@ -644,8 +670,11 @@ | SOME c => Con.hash c) | PrimApp {args, ...} => hashVars (args, primApp) | Select {base, offset} => - Word.xorb (select, - Base.hash (base, Var.hash) + Word.fromInt offset) + Hash.combine3 (select, Base.hash (base, Var.hash), Word.fromInt offset) + | Sequence {args} => + Hash.combine (sequence, + Hash.vectorMap (args, fn args => + Hash.vectorMap (args, Var.hash))) | Var x => Var.hash x end (* quell unused warning *) @@ -670,31 +699,46 @@ in case s of Bind {var, ty, exp} => - seq [seq [case var of - NONE => empty - | SOME var => - seq [Var.layout var, - if !Control.showTypes - then seq [str ": ", Type.layout ty] - else empty, - str " = "]], - Exp.layout' (exp, layoutVar)] - | Profile p => ProfileExp.layout p + let + val (sep, ty) = + if !Control.showTypes + then (str ":", indent (seq [Type.layout ty, str " ="], 2)) + else (str " =", empty) + in + mayAlign [mayAlign [seq [str "val ", + case var of + NONE => str "_" + | SOME var => Var.layout var, + sep], + ty], + indent (Exp.layout' (exp, layoutVar), 2)] + end + | Profile p => seq [str "prof ", ProfileExp.layout p] | Update {base, offset, value} => - seq [(if 0 = offset - then empty - else seq [str "#", Int.layout offset, str " "]), - Base.layout (base, layoutVar), - str " := ", layoutVar value] + mayAlign [seq [str "upd ", + Base.layoutWithOffset (base, offset, layoutVar), + str " :="], + layoutVar value] end - fun layout s = layout' (s, Var.layout) - fun toPretty (s: t, global: Var.t -> string option): string = - Layout.toString (layout' (s, fn x => - case global x of - NONE => Var.layout x - | SOME s => Layout.str s)) + val parse = + let + open Parse + in + mlSpaces *> any + [Bind <$> + (kw "val" *> + ((SOME <$> Var.parse) <|> (NONE <$ kw "_")) >>= (fn var => + sym ":" *> Type.parse >>= (fn ty => + sym "=" *> Exp.parse >>= (fn exp => + pure {var = var, ty = ty, exp = exp})))), + Update <$> + (kw "upd" *> + Base.parseWithOffset Var.parse >>= (fn (base, offset) => + sym ":=" *> Var.parse >>= (fn value => + pure {base = base, offset = offset, value = value})))] + end val profile = Profile @@ -705,10 +749,10 @@ fun clear s = foreachDef (s, Var.clear o #1) - fun prettifyGlobals (v: t vector): Var.t -> string option = + fun prettifyGlobals (v: t vector): Var.t -> Layout.t = let - val {get = global: Var.t -> string option, set = setGlobal, ...} = - Property.getSet (Var.plist, Property.initConst NONE) + val {get = global: Var.t -> Layout.t, set = setGlobal, ...} = + Property.getSet (Var.plist, Property.initFun Var.layout) val _ = Vector.foreach (v, fn s => @@ -717,28 +761,34 @@ Option.app (var, fn var => let - fun set s = + fun set () = let - val maxSize = 10 + val s = Layout.toString (Exp.layout' (exp, Var.layout)) + val maxSize = 20 + val dots = " ... " + val dotsSize = String.size dots + val frontSize = 2 * (maxSize - dotsSize) div 3 + val backSize = maxSize - dotsSize - frontSize val s = if String.size s > maxSize - then concat [String.prefix (s, maxSize), - "..."] - else s + then concat [String.prefix (s, frontSize), + dots, + String.suffix (s, backSize)] + else s in - setGlobal (var, SOME s) + if String.hasSubstring (s, {substring = "(*"}) + orelse String.hasSubstring (s, {substring = "*)"}) + then () + else setGlobal (var, Layout.seq [Var.layout var, + Layout.str (" (*" ^ s ^ "*)")]) end in case exp of - Const c => set (Layout.toString (Const.layout c)) + Const _ => set () | Object {con, args, ...} => (case con of - NONE => () - | SOME c => - set (if Vector.isEmpty args - then Con.toString c - else concat [Con.toString c, - "(...)"])) + NONE => if Vector.isEmpty args then set () else () + | SOME _ => set ()) | _ => () end) | _ => ()) @@ -769,164 +819,15 @@ datatype z = datatype Statement.t -structure Handler = - struct - structure Label = Label - - datatype t = - Caller - | Dead - | Handle of Label.t - - fun layout (h: t): Layout.t = - let - open Layout - in - case h of - Caller => str "Caller" - | Dead => str "Dead" - | Handle l => seq [str "Handle ", Label.layout l] - end - - val equals = - fn (Caller, Caller) => true - | (Dead, Dead) => true - | (Handle l, Handle l') => Label.equals (l, l') - | _ => false - - fun foldLabel (h: t, a: 'a, f: Label.t * 'a -> 'a): 'a = - case h of - Caller => a - | Dead => a - | Handle l => f (l, a) - - fun foreachLabel (h, f) = foldLabel (h, (), f o #1) - - fun map (h, f) = - case h of - Caller => Caller - | Dead => Dead - | Handle l => Handle (f l) - - local - val newHash = Random.word - val caller = newHash () - val dead = newHash () - val handlee = newHash () - in - fun hash (h: t): word = - case h of - Caller => caller - | Dead => dead - | Handle l => Word.xorb (handlee, Label.hash l) - end - end - -structure Return = - struct - structure Label = Label - structure Handler = Handler - - datatype t = - Dead - | NonTail of {cont: Label.t, - handler: Handler.t} - | Tail - - fun layout r = - let - open Layout - in - case r of - Dead => str "Dead" - | NonTail {cont, handler} => - seq [str "NonTail ", - Layout.record - [("cont", Label.layout cont), - ("handler", Handler.layout handler)]] - | Tail => str "Tail" - end - - fun equals (r, r'): bool = - case (r, r') of - (Dead, Dead) => true - | (NonTail {cont = c, handler = h}, - NonTail {cont = c', handler = h'}) => - Label.equals (c, c') andalso Handler.equals (h, h') - | (Tail, Tail) => true - | _ => false - - fun foldLabel (r: t, a, f) = - case r of - Dead => a - | NonTail {cont, handler} => - Handler.foldLabel (handler, f (cont, a), f) - | Tail => a - - fun foreachLabel (r, f) = foldLabel (r, (), f o #1) - - fun foreachHandler (r, f) = - case r of - Dead => () - | NonTail {handler, ...} => Handler.foreachLabel (handler, f) - | Tail => () - - fun map (r, f) = - case r of - Dead => Dead - | NonTail {cont, handler} => - NonTail {cont = f cont, - handler = Handler.map (handler, f)} - | Tail => Tail - - fun compose (r, r') = - case r' of - Dead => Dead - | NonTail {cont, handler} => - NonTail - {cont = cont, - handler = (case handler of - Handler.Caller => - (case r of - Dead => Handler.Caller - | NonTail {handler, ...} => handler - | Tail => Handler.Caller) - | Handler.Dead => handler - | Handler.Handle _ => handler)} - | Tail => r - (* quell unused warning *) - val _ = compose - - local - val newHash = Random.word - val dead = newHash () - val nonTail = newHash () - val tail = newHash () - in - fun hash r = - case r of - Dead => dead - | NonTail {cont, handler} => - Word.xorb (Word.xorb (nonTail, Label.hash cont), - Handler.hash handler) - | Tail => tail - end - end - structure Transfer = struct datatype t = - Arith of {prim: Type.t Prim.t, - args: Var.t vector, - overflow: Label.t, (* Must be nullary. *) - success: Label.t, (* Must be unary. *) - ty: Type.t} - | Bug (* MLton thought control couldn't reach here. *) + Bug (* MLton thought control couldn't reach here. *) | Call of {args: Var.t vector, func: Func.t, return: Return.t} | Case of {test: Var.t, - cases: Cases.t, + cases: (Con.t, Label.t) Cases.t, default: Label.t option} (* Must be nullary. *) | Goto of {dst: Label.t, args: Var.t vector} @@ -934,18 +835,14 @@ | Return of Var.t vector | Runtime of {prim: Type.t Prim.t, args: Var.t vector, - return: Label.t} (* Must be nullary. *) + return: Label.t} fun foreachFuncLabelVar (t, func: Func.t -> unit, label: Label.t -> unit, var) = let fun vars xs = Vector.foreach (xs, var) in case t of - Arith {args, overflow, success, ...} => - (vars args - ; label overflow - ; label success) - | Bug => () + Bug => () | Call {func = f, args, return, ...} => (func f ; Return.foreachLabel (return, label) @@ -978,13 +875,7 @@ fun fxs xs = Vector.map (xs, fx) in case t of - Arith {prim, args, overflow, success, ty} => - Arith {prim = prim, - args = fxs args, - overflow = fl overflow, - success = fl success, - ty = ty} - | Bug => Bug + Bug => Bug | Call {func, args, return} => Call {func = func, args = fxs args, @@ -1009,65 +900,125 @@ val _ = replaceLabel fun replaceVar (t, f) = replaceLabelVar (t, fn l => l, f) - local open Layout - in - fun layoutCase {test, cases, default} = - let - fun doit (l, layout) = - Vector.toListMap - (l, fn (i, l) => - seq [layout i, str " => ", Label.layout l]) - datatype z = datatype Cases.t - val cases = - case cases of - Con l => doit (l, Con.layout) - | Word (_, l) => doit (l, WordX.layout) - val cases = - case default of - NONE => cases - | SOME j => - cases @ [seq [str "_ => ", Label.layout j]] - in - align [seq [str "case ", Var.layout test, str " of"], - indent (alignPrefix (cases, "| "), 2)] - end - - val layout = - fn Arith {prim, args, overflow, success, ...} => - seq [Label.layout success, str " ", - tuple [Prim.layoutApp (prim, args, Var.layout)], - str " Overflow => ", - Label.layout overflow, str " ()"] - | Bug => str "Bug" + fun layout' (t, layoutVar) = + let + open Layout + fun layoutArgs xs = Vector.layout layoutVar xs + fun layoutCase {test, cases, default} = + let + fun doit (l, layout) = + Vector.toListMap + (l, fn (i, l) => + seq [layout i, str " => ", Label.layout l]) + datatype z = datatype Cases.t + val (suffix, cases) = + case cases of + Con l => (empty, doit (l, Con.layout)) + | Word (size, l) => (str (WordSize.toString size), + doit (l, fn w => (WordX.layout (w, {suffix = true})))) + val cases = + case default of + NONE => cases + | SOME j => + cases @ [seq [str "_ => ", Label.layout j]] + in + align [seq [str "case", suffix, str " ", layoutVar test, str " of"], + indent (alignPrefix (cases, "| "), 2)] + end + fun layoutPrim {prim, args} = + seq [Prim.layoutFull (prim, Type.layout), str " ", layoutArgs args] + in + case t of + Bug => str "bug" | Call {func, args, return} => - seq [Func.layout func, str " ", layoutTuple args, - str " ", Return.layout return] + let + val call = seq [Func.layout func, str " ", layoutArgs args] + in + case return of + Return.Dead => seq [str "call dead ", call] + | Return.NonTail {cont, handler} => + seq [str "call ", Label.layout cont, str " ", + paren call, + str " handle _ => ", + case handler of + Handler.Caller => str "raise" + | Handler.Dead => str "dead" + | Handler.Handle l => Label.layout l] + | Return.Tail => seq [str "call tail ", call] + end | Case arg => layoutCase arg | Goto {dst, args} => - seq [Label.layout dst, str " ", layoutTuple args] - | Raise xs => seq [str "raise ", layoutTuple xs] - | Return xs => - seq [str "return ", - if 1 = Vector.length xs - then Var.layout (Vector.sub (xs, 0)) - else layoutTuple xs] + seq [str "goto ", Label.layout dst, str " ", layoutArgs args] + | Raise xs => seq [str "raise ", layoutArgs xs] + | Return xs => seq [str "return ", layoutArgs xs] | Runtime {prim, args, return} => - seq [Label.layout return, str " ", - tuple [Prim.layoutApp (prim, args, Var.layout)]] - end + seq [str "runtime ", Label.layout return, str " ", + paren (layoutPrim {prim = prim, args = args})] + end + fun layout t = layout' (t, Var.layout) + + val parse = + let + open Parse + val parseArgs = vector Var.parse + fun parseCase (parse', mk) = + Var.parse >>= (fn test => + kw "of" *> + (Vector.fromList <$> + sepBy (parse' >>= (fn p => + sym "=>" *> + Label.parse >>= (fn l => + pure (p, l))), + sym "|")) >>= (fn cases => + optional ((if Vector.isEmpty cases then pure () else sym "|") *> + kw "_" *> sym "=>" *> Label.parse) >>= (fn default => + pure {test = test, + cases = mk cases, + default = default}))) + val parseCall = + Func.parse >>= (fn func => + parseArgs >>= (fn args => + pure (fn return => pure {func = func, args = args, return = return}))) + in + mlSpaces *> any + [Bug <$ kw "bug", + Call <$> + (kw "call" *> + mlSpaces *> + any [kw "dead" *> parseCall >>= (fn mkCall => mkCall Return.Dead), + kw "tail" *> parseCall >>= (fn mkCall => mkCall Return.Tail), + Label.parse >>= (fn cont => + paren parseCall >>= (fn mkCall => + kw "handle" *> kw "_" *> sym "=>" *> + any [kw "raise" *> mkCall (Return.NonTail {cont = cont, handler = Handler.Caller}), + kw "dead" *> mkCall (Return.NonTail {cont = cont, handler = Handler.Dead}), + Label.parse >>= (fn h => mkCall (Return.NonTail {cont = cont, handler = Handler.Handle h}))]))]), + Case <$> + any ((kw "case" *> parseCase (Con.parse, Cases.Con)) :: + (List.map (WordSize.all, fn ws => + kw ("case" ^ WordSize.toString ws) *> + parseCase (WordX.parse, fn cases => Cases.Word (ws, cases))))), + Goto <$> + (kw "goto" *> + Label.parse >>= (fn dst => + parseArgs >>= (fn args => + pure {dst = dst, args = args}))), + Raise <$> (kw "raise" *> parseArgs), + Return <$> (kw "return" *> parseArgs), + Runtime <$> + (kw "runtime" *> + Label.parse >>= (fn return => + paren (Prim.parseFull Type.parse >>= (fn prim => + parseArgs >>= (fn args => + pure (prim, args)))) >>= (fn (prim, args) => + pure {prim = prim, args = args, return = return})))] + end fun varsEquals (xs, xs') = Vector.equals (xs, xs', Var.equals) fun equals (e: t, e': t): bool = case (e, e') of - (Arith {prim, args, overflow, success, ...}, - Arith {prim = prim', args = args', - overflow = overflow', success = success', ...}) => - Prim.equals (prim, prim') andalso - varsEquals (args, args') andalso - Label.equals (overflow, overflow') andalso - Label.equals (success, success') - | (Bug, Bug) => true + (Bug, Bug) => true | (Call {func, args, return}, Call {func = func', args = args', return = return'}) => Func.equals (func, func') andalso @@ -1076,7 +1027,7 @@ | (Case {test, cases, default}, Case {test = test', cases = cases', default = default'}) => Var.equals (test, test') - andalso Cases.equals (cases, cases') + andalso Cases.equals (cases, cases', Con.equals, Label.equals) andalso Option.equals (default, default', Label.equals) | (Goto {dst, args}, Goto {dst = dst', args = args'}) => Label.equals (dst, dst') andalso @@ -1098,14 +1049,11 @@ val raisee = newHash () val return = newHash () fun hashVars (xs: Var.t vector, w: Word.t): Word.t = - Vector.fold (xs, w, fn (x, w) => Word.xorb (w, Var.hash x)) - fun hash2 (w1: Word.t, w2: Word.t) = Word.xorb (w1, w2) + Hash.combine (w, Hash.vectorMap (xs, Var.hash)) + fun hash2 (w1: Word.t, w2: Word.t) = Hash.combine (w1, w2) in val hash: t -> Word.t = - fn Arith {args, overflow, success, ...} => - hashVars (args, hash2 (Label.hash overflow, - Label.hash success)) - | Bug => bug + fn Bug => bug | Call {func, args, return} => hashVars (args, hash2 (Func.hash func, Return.hash return)) | Case {test, cases, default} => @@ -1134,12 +1082,21 @@ in fun layoutFormals (xts: (Var.t * Type.t) vector) = Vector.layout (fn (x, t) => - seq [Var.layout x, - if !Control.showTypes - then seq [str ": ", Type.layout t] - else empty]) + if !Control.showTypes + then mayAlign [seq [Var.layout x, str ":"], + indent (Type.layout t, 2)] + else Var.layout x) xts end +local + open Parse +in + val parseFormals = + vector (Var.parse >>= (fn x => + sym ":" *> + Type.parse >>= (fn ty => + pure (x, ty)))) +end structure Block = struct @@ -1157,22 +1114,37 @@ val transfer = make #transfer end - fun layout (T {label, args, statements, transfer}) = + fun layout' (T {label, args, statements, transfer}, layoutVar) = let open Layout + fun layoutStatement s = Statement.layout' (s, layoutVar) + fun layoutTransfer t = Transfer.layout' (t, layoutVar) in - align [seq [Label.layout label, str " ", - Vector.layout (fn (x, t) => - if !Control.showTypes - then seq [Var.layout x, str ": ", - Type.layout t] - else Var.layout x) args], + align [seq [str "block ", Label.layout label, str " ", + layoutFormals args], indent (align [align - (Vector.toListMap (statements, Statement.layout)), - Transfer.layout transfer], + (Vector.toListMap (statements, layoutStatement)), + layoutTransfer transfer], 2)] end + fun layout b = layout' (b, Var.layout) + + val parse = + let + open Parse + in + T <$> + (kw "block" *> + Label.parse >>= (fn label => + parseFormals >>= (fn args => + many Statement.parse >>= (fn statements => + Transfer.parse >>= (fn transfer => + pure {label = label, + args = args, + statements = Vector.fromList statements, + transfer = transfer}))))) + end fun clear (T {label, args, statements, ...}) = (Label.clear label @@ -1191,16 +1163,30 @@ let open Layout in - seq [Tycon.layout tycon, + seq [str "datatype ", Tycon.layout tycon, str " = ", alignPrefix (Vector.toListMap (cons, fn {con, args} => - seq [Con.layout con, str " of ", - Prod.layout (args, Type.layout)]), + seq [Prod.layout (args, Type.layout), str " ", + Con.layout con]), "| ")] end + val parse = + let + open Parse + in + T <$> + (kw "datatype" *> Tycon.parse >>= (fn tycon => + sym "=" *> + sepBy (Prod.parse Type.parse >>= (fn args => + Con.parse >>= (fn con => + pure {con = con, args = args})), + sym "|") >>= (fn cons => + pure {tycon = tycon, cons = Vector.fromList cons}))) + end + fun clear (T {cons, tycon}) = (Tycon.clear tycon ; Vector.foreach (cons, Con.clear o #con)) @@ -1354,25 +1340,18 @@ nodeBlock = #block o nodeInfo} end - fun layoutDot (f, global: Var.t -> string option) = + fun layoutDot (f, layoutVar) = let - val {name, start, blocks, ...} = dest f - fun makeName (name: string, - formals: (Var.t * Type.t) vector): string = - concat [name, " ", - let - open Layout - in - toString - (vector - (Vector.map - (formals, fn (var, ty) => - if !Control.showTypes - then seq [Var.layout var, - str ": ", - Type.layout ty] - else Var.layout var))) - end] + fun toStringStatement s = Layout.toString (Statement.layout' (s, layoutVar)) + fun toStringTransfer t = + Layout.toString + (case t of + Case {test, ...} => + Layout.seq [Layout.str "case ", layoutVar test] + | _ => Transfer.layout' (t, layoutVar)) + fun toStringFormals args = Layout.toString (layoutFormals args) + fun toStringHeader (name, args) = concat [name, " ", toStringFormals args] + val {name, args, start, blocks, returns, raises, ...} = dest f open Dot val graph = Graph.new () val {get = nodeOptions, ...} = @@ -1385,36 +1364,27 @@ Property.initFun (fn _ => newNode ())) val {get = edgeOptions, set = setEdgeOptions, ...} = Property.getSetOnce (Edge.plist, Property.initConst []) + fun edge (from, to, label: string, style: style): unit = + let + val e = Graph.addEdge (graph, {from = from, + to = to}) + val _ = setEdgeOptions (e, [EdgeOption.label label, + EdgeOption.Style style]) + in + () + end val _ = Vector.foreach (blocks, fn Block.T {label, args, statements, transfer} => let val from = labelNode label - fun edge (to: Label.t, - label: string, - style: style): unit = - let - val e = Graph.addEdge (graph, {from = from, - to = labelNode to}) - val _ = setEdgeOptions (e, [EdgeOption.label label, - EdgeOption.Style style]) - in - () - end - val rest = + val edge = fn (to, label, style) => + edge (from, labelNode to, label, style) + val () = case transfer of - Arith {prim, args, overflow, success, ...} => - (edge (success, "", Solid) - ; edge (overflow, "Overflow", Dashed) - ; [Layout.toString - (Prim.layoutApp (prim, args, fn x => - Layout.str - (Var.pretty (x, global))))]) - | Bug => ["bug"] - | Call {func, args, return} => + Bug => () + | Call {return, ...} => let - val f = Func.toString func - val args = Var.prettys (args, global) val _ = case return of Return.Dead => () @@ -1422,12 +1392,12 @@ (edge (cont, "", Dotted) ; (Handler.foreachLabel (handler, fn l => - edge (l, "", Dashed)))) + edge (l, "Handle", Dashed)))) | Return.Tail => () in - [f, " ", args] + () end - | Case {test, cases, default, ...} => + | Case {cases, default, ...} => let fun doit (v, toString) = Vector.foreach @@ -1435,68 +1405,67 @@ edge (j, toString x, Solid)) val _ = case cases of - Cases.Con v => doit (v, Con.toString) + Cases.Con v => + doit (v, Con.toString) | Cases.Word (_, v) => - doit (v, WordX.toString) + doit (v, fn w => WordX.toString (w, {suffix = true})) val _ = case default of NONE => () | SOME j => - edge (j, "default", Solid) + edge (j, "Default", Solid) in - ["case ", Var.toString test] + () end - | Goto {dst, args} => - (edge (dst, "", Solid) - ; [Label.toString dst, " ", - Var.prettys (args, global)]) - | Raise xs => ["raise ", Var.prettys (xs, global)] - | Return xs => ["return ", Var.prettys (xs, global)] - | Runtime {prim, args, return} => - (edge (return, "", Solid) - ; [Layout.toString - (Prim.layoutApp (prim, args, fn x => - Layout.str - (Var.pretty (x, global))))]) + | Goto {dst, ...} => edge (dst, "", Solid) + | Raise _ => () + | Return _ => () + | Runtime {return, ...} => edge (return, "", Dotted) + val lab = + [(toStringTransfer transfer, Left)] val lab = Vector.foldr - (statements, [(concat rest, Left)], fn (s, ac) => - let - val s = - case s of - Bind {exp, ty, var} => - let - val exp = Exp.toPretty (exp, global) - in - if Type.isUnit ty - then exp - else - case var of - NONE => exp - | SOME var => - concat [Var.toString var, - if !Control.showTypes - then concat [": ", - Layout.toString - (Type.layout ty)] - else "", - " = ", exp] - end - | _ => Statement.toPretty (s, global) - in - (s, Left) :: ac - end) - val name = makeName (Label.toString label, args) - val _ = setNodeText (from, (name, Left) :: lab) + (statements, lab, fn (s, ac) => + (toStringStatement s, Left) :: ac) + val lab = + (toStringHeader (Label.toString label, args), Left)::lab + val _ = setNodeText (from, lab) in () end) - val root = labelNode start - val graphLayout = + val startNode = labelNode start + val funNode = + let + val funNode = newNode () + val _ = edge (funNode, startNode, "Start", Solid) + val lab = + [(toStringTransfer (Transfer.Goto {dst = start, args = Vector.new0 ()}), Left)] + val lab = + if !Control.showTypes + then ((Layout.toString o Layout.seq) + [Layout.str ": ", + Layout.record [("returns", + Option.layout + (Vector.layout Type.layout) + returns), + ("raises", + Option.layout + (Vector.layout Type.layout) + raises)]], + Left)::lab + else lab + val lab = + (toStringHeader ("fun " ^ Func.toString name, args), Left):: + lab + val _ = setNodeText (funNode, lab) + in + funNode + end + val controlFlowGraphLayout = Graph.layoutDot (graph, fn {nodeName} => {title = concat [Func.toString name, " control-flow graph"], - options = [GraphOption.Rank (Min, [{nodeName = nodeName root}])], + options = [GraphOption.Rank (Min, [{nodeName = nodeName funNode}])], edgeOptions = edgeOptions, nodeOptions = fn n => let @@ -1504,7 +1473,8 @@ open NodeOption in FontColor Black :: Shape Box :: l end}) - fun treeLayout () = + val () = Graph.removeNode (graph, funNode) + fun dominatorTreeLayout () = let val {get = nodeOptions, set = setNodeOptions, ...} = Property.getSetOnce (Node.plist, Property.initConst []) @@ -1513,18 +1483,17 @@ (blocks, fn Block.T {label, ...} => setNodeOptions (labelNode label, [NodeOption.label (Label.toString label)])) - val treeLayout = + val dominatorTreeLayout = Tree.layoutDot (Graph.dominatorTree (graph, - {root = root, + {root = startNode, nodeValue = fn n => n}), {title = concat [Func.toString name, " dominator tree"], options = [], nodeOptions = nodeOptions}) in - treeLayout + dominatorTreeLayout end - (* fun loopForestLayout () = let val {get = nodeName, set = setNodeName, ...} = @@ -1536,18 +1505,19 @@ val loopForestLayout = Graph.LoopForest.layoutDot (Graph.loopForestSteensgaard (graph, - {root = root}), + {root = startNode, + nodeValue = fn x => x}), {title = concat [Func.toString name, " loop forest"], options = [], - nodeName = nodeName}) + name = nodeName}) in loopForestLayout end - *) in {destroy = destroy, - graph = graphLayout, - tree = treeLayout} + controlFlowGraph = controlFlowGraphLayout, + dominatorTree = dominatorTreeLayout, + loopForest = loopForestLayout} end end @@ -1571,63 +1541,108 @@ fun layoutHeader (f: t): Layout.t = let - val {args, name, raises, returns, start, ...} = dest f + val {args, name, mayInline, raises, returns, start, ...} = dest f open Layout - in - seq [str "fun ", - Func.layout name, - str " ", - layoutFormals args, - if !Control.showTypes - then seq [str ": ", - record [("raises", - Option.layout - (Vector.layout Type.layout) raises), - ("returns", - Option.layout - (Vector.layout Type.layout) returns)]] - else empty, - str " = ", Label.layout start, str " ()"] + val (sep, rty) = + if !Control.showTypes + then (str ":", + indent (seq [record [("returns", + Option.layout + (Vector.layout Type.layout) + returns), + ("raises", + Option.layout + (Vector.layout Type.layout) + raises)], + str " ="], + 2)) + else (str " =", empty) + in + mayAlign [mayAlign [seq [str "fun ", + if mayInline then empty else str "noinline ", + Func.layout name, + str " ", + layoutFormals args, + sep], + rty], + seq [Label.layout start, str " ()"]] + end + + val parseHeader = + let + open Parse + in + kw "fun" *> + optional (kw "noinline") >>= (fn noInline => + Func.parse >>= (fn name => + parseFormals >>= (fn args => + sym ":" *> + cbrack (ffield ("returns", option (vector Type.parse)) >>= (fn returns => + nfield ("raises", option (vector Type.parse)) >>= (fn raises => + pure (returns, raises)))) >>= (fn (returns, raises) => + sym "=" *> + Label.parse >>= (fn start => + paren (pure ()) *> + pure (Option.isNone noInline, name, args, returns, raises, start)))))) end - fun layout (f: t) = + fun layout' (f: t, layoutVar) = let val {blocks, ...} = dest f open Layout + fun layoutBlock b = Block.layout' (b, layoutVar) in align [layoutHeader f, - indent (align (Vector.toListMap (blocks, Block.layout)), 2)] + indent (align (Vector.toListMap (blocks, layoutBlock)), 2)] end + fun layout f = layout' (f, Var.layout) - fun layouts (f: t, global, output: Layout.t -> unit): unit = + val parse = + let + open Parse + in + new <$> + (parseHeader >>= (fn (mayInline, name, args, returns, raises, start) => + many Block.parse >>= (fn blocks => + pure {mayInline = mayInline, + name = name, + args = args, + returns = returns, + raises = raises, + start = start, + blocks = Vector.fromList blocks}))) + end + + fun layouts (f: t, layoutVar, output: Layout.t -> unit): unit = let val {blocks, name, ...} = dest f val _ = output (layoutHeader f) - val _ = Vector.foreach (blocks, fn b => - output (Layout.indent (Block.layout b, 2))) + val _ = + Vector.foreach + (blocks, fn b => + output (Layout.indent (Block.layout' (b, layoutVar), 2))) val _ = if not (!Control.keepDot) then () else let - val {destroy, graph, tree} = layoutDot (f, global) + val {destroy, controlFlowGraph, dominatorTree, loopForest} = + layoutDot (f, layoutVar) val name = Func.toString name fun doit (s, g) = - let - open Control - in - saveToFile - ({suffix = concat [name, ".", s, ".dot"]}, - Dot, (), Layout (fn () => g)) - end - val _ = doit ("cfg", graph) + Control.saveToFile + {arg = (), + name = SOME (concat [name, ".", s]), + toFile = {display = Control.Layout (fn () => g), + style = Control.Dot, + suffix = ".dot"}, + verb = Control.Detail} + val _ = doit ("cfg", controlFlowGraph) handle _ => Error.warning "SsaTree2.layouts: couldn't layout cfg" - val _ = doit ("dom", tree ()) + val _ = doit ("dom", dominatorTree ()) handle _ => Error.warning "SsaTree2.layouts: couldn't layout dom" - (* val _ = doit ("lf", loopForest ()) handle _ => Error.warning "SsaTree2.layouts: couldn't layout lf" - *) val () = destroy () in () @@ -1936,35 +1951,60 @@ fun layouts (p as T {datatypes, globals, functions, main}, output': Layout.t -> unit) = let - val global = Statement.prettifyGlobals globals + val layoutVar = Statement.prettifyGlobals globals open Layout (* Layout includes an output function, so we need to rebind output * to the one above. *) val output = output' in - output (str "\n\nDatatypes:") + output (str "\n\n(* Datatypes: *)") ; Vector.foreach (datatypes, output o Datatype.layout) - ; output (str "\n\nGlobals:") - ; Vector.foreach (globals, output o Statement.layout) - ; output (seq [str "\n\nMain: ", Func.layout main]) - ; output (str "\n\nFunctions:") + ; output (str "\n\n(* Globals: *)") + ; Vector.foreach (globals, output o (fn s => Statement.layout' (s, layoutVar))) + ; output (str "\n\n(* Functions: *)") ; List.foreach (functions, fn f => - Function.layouts (f, global, output)) + Function.layouts (f, layoutVar, output)) + ; output (seq [str "\n\n(* Main: *) ", Func.layout main]) ; if not (!Control.keepDot) then () else - let - open Control - in - saveToFile - ({suffix = "call-graph.dot"}, - Dot, (), Layout (fn () => - layoutCallGraph (p, !Control.inputFile))) - end + Control.saveToFile + {arg = (), + name = SOME "call-graph", + toFile = {display = Control.Layout (fn () => layoutCallGraph (p, !Control.inputFile)), + style = Control.Dot, + suffix = "dot"}, + verb = Control.Detail} + end + + val toFile = {display = Control.Layouts layouts, style = Control.ML, suffix = "ssa2"} + + fun parse () = + let + open Parse + + val () = Tycon.parseReset {prims = Vector.new1 Tycon.bool} + val () = Con.parseReset {prims = Vector.new2 (Con.truee, Con.falsee)} + val () = Var.parseReset {prims = Vector.new0 ()} + val () = Label.parseReset {prims = Vector.new0 ()} + val () = Func.parseReset {prims = Vector.new0 ()} + + val parseProgram = + T <$> + (many Datatype.parse >>= (fn datatypes => + many Statement.parse >>= (fn globals => + many Function.parse >>= (fn functions => + Func.parse >>= (fn main => + pure {datatypes = Vector.fromList datatypes, + globals = Vector.fromList globals, + functions = functions, + main = main}))))) + in + parseProgram <* (mlSpaces *> (failing next <|> fail "end of file")) end - fun layoutStats (T {datatypes, globals, functions, main, ...}) = + fun layoutStats (program as T {datatypes, globals, functions, main, ...}) = let val (mainNumVars, mainNumBlocks) = case List.peek (functions, fn f => @@ -2006,7 +2046,8 @@ (datatypes, fn Datatype.T {cons, ...} => Vector.foreach (cons, fn {args, ...} => Prod.foreach (args, countType))) - val numStatements = ref (Vector.length globals) + val numGlobals = Vector.length globals + val numStatements = ref numGlobals val numBlocks = ref 0 val _ = List.foreach @@ -2038,7 +2079,9 @@ open Layout in align - [seq [str "num vars in main = ", Int.layout mainNumVars], + [Control.sizeMessage ("ssa2 program", program), + seq [str "num globals = ", Int.layout (Vector.length globals)], + seq [str "num vars in main = ", Int.layout mainNumVars], seq [str "num blocks in main = ", Int.layout mainNumBlocks], seq [str "num functions in program = ", Int.layout numFunctions], seq [str "num blocks in program = ", Int.layout (!numBlocks)], @@ -2077,8 +2120,7 @@ | _ => () fun loopTransfer t = case t of - Arith {args, prim, ...} => f {args = args, prim = prim} - | Runtime {args, prim, ...} => f {args = args, prim = prim} + Runtime {args, prim, ...} => f {args = args, prim = prim} | _ => () val _ = Vector.foreach (globals, loopStatement) val _ = diff -Nru mlton-20130715/mlton/ssa/ssa-tree2.sig mlton-20210117+dfsg/mlton/ssa/ssa-tree2.sig --- mlton-20130715/mlton/ssa/ssa-tree2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa-tree2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -16,33 +16,14 @@ sig include SSA_TREE2_STRUCTS - structure Prod: - sig - type 'a t - - val dest: 'a t -> {elt: 'a, isMutable: bool} vector - val elt: 'a t * int -> 'a - val empty: unit -> 'a t - val fold: 'a t * 'b * ('a * 'b -> 'b) -> 'b - val foreach: 'a t * ('a -> unit) -> unit - val isEmpty: 'a t -> bool - val isMutable: 'a t -> bool - val keepAllMap: 'a t * ('a -> 'b option) -> 'b t - val layout: 'a t * ('a -> Layout.t) -> Layout.t - val length: 'a t -> int - val make: {elt: 'a, isMutable: bool} vector -> 'a t - val map: 'a t * ('a -> 'b) -> 'b t - val sub: 'a t * int -> {elt: 'a, isMutable: bool} - end - structure ObjectCon: sig datatype t = Con of Con.t + | Sequence | Tuple - | Vector - val isVector: t -> bool + val isSequence: t -> bool val layout: t -> Layout.t end @@ -70,9 +51,11 @@ val cpointer: t val datatypee: Tycon.t -> t val dest: t -> dest + val deSequence1: t -> t + val deSequenceOpt: t -> t Prod.t option val equals: t * t -> bool val intInf: t - val isVector: t -> bool + val isSequence: t -> bool val isUnit: t -> bool val layout: t -> Layout.t val object: {args: t Prod.t, con: ObjectCon.t} -> t @@ -80,9 +63,9 @@ val plist: t -> PropertyList.t val real: RealSize.t -> t val reff1: t -> t + val sequence: t Prod.t -> t val thread: t val tuple: t Prod.t -> t - val vector: t Prod.t -> t val vector1: t -> t val weak: t -> t val word: WordSize.t -> t @@ -93,8 +76,8 @@ sig datatype 'a t = Object of 'a - | VectorSub of {index: 'a, - vector: 'a} + | SequenceSub of {index: 'a, + sequence: 'a} val foreach: 'a t * ('a -> unit) -> unit val layout: 'a t * ('a -> Layout.t) -> Layout.t @@ -114,6 +97,7 @@ prim: Type.t Prim.t} | Select of {base: Var.t Base.t, offset: int} + | Sequence of {args: Var.t vector vector} | Var of Var.t val equals: t * t -> bool @@ -140,43 +124,18 @@ val foreachDef: t * (Var.t * Type.t -> unit) -> unit val foreachUse: t * (Var.t -> unit) -> unit val layout: t -> Layout.t - val prettifyGlobals: t vector -> (Var.t -> string option) val profile: ProfileExp.t -> t val replaceUses: t * (Var.t -> Var.t) -> t end - structure Cases: - sig - datatype t = - Con of (Con.t * Label.t) vector - | Word of WordSize.t * (WordX.t * Label.t) vector - - val forall: t * (Label.t -> bool) -> bool - val foreach: t * (Label.t -> unit) -> unit - val hd: t -> Label.t - val isEmpty: t -> bool - val map: t * (Label.t -> Label.t) -> t - end - - structure Handler: HANDLER - sharing Handler.Label = Label - - structure Return: RETURN - sharing Return.Handler = Handler - structure Transfer: sig datatype t = - Arith of {args: Var.t vector, - overflow: Label.t, (* Must be nullary. *) - prim: Type.t Prim.t, - success: Label.t, (* Must be unary. *) - ty: Type.t} (* int or word *) - | Bug (* MLton thought control couldn't reach here. *) + Bug (* MLton thought control couldn't reach here. *) | Call of {args: Var.t vector, func: Func.t, return: Return.t} - | Case of {cases: Cases.t, + | Case of {cases: (Con.t, Label.t) Cases.t, default: Label.t option, (* Must be nullary. *) test: Var.t} | Goto of {args: Var.t vector, @@ -188,7 +147,7 @@ | Return of Var.t vector | Runtime of {args: Var.t vector, prim: Type.t Prim.t, - return: Label.t} (* Must be nullary. *) + return: Label.t} val equals: t * t -> bool val foreachFunc : t * (Func.t -> unit) -> unit @@ -257,9 +216,10 @@ val foreachVar: t * (Var.t * Type.t -> unit) -> unit val layout: t -> Layout.t val layoutDot: - t * (Var.t -> string option) -> {destroy: unit -> unit, - graph: Layout.t, - tree: unit -> Layout.t} + t * (Var.t -> Layout.t) -> {destroy: unit -> unit, + controlFlowGraph: Layout.t, + dominatorTree: unit -> Layout.t, + loopForest: unit -> Layout.t} val name: t -> Func.t val new: {args: (Var.t * Type.t) vector, blocks: Block.t vector, @@ -292,5 +252,7 @@ val hasPrim: t * (Type.t Prim.t -> bool) -> bool val layouts: t * (Layout.t -> unit) -> unit val layoutStats: t -> Layout.t + val parse: unit -> t Parse.t + val toFile: {display: t Control.display, style: Control.style, suffix: string} end end diff -Nru mlton-20130715/mlton/ssa/ssa-tree.fun mlton-20210117+dfsg/mlton/ssa/ssa-tree.fun --- mlton-20130715/mlton/ssa/ssa-tree.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa-tree.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2014,2017-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,6 +12,11 @@ open S +(* infix declarations for Parse.Ops *) +infix 1 <|> >>= +infix 3 <*> <* *> +infixr 4 <$> <$$> <$$$> <$$$$> <$ <$?> + structure Type = struct datatype t = @@ -61,6 +66,7 @@ val (deTupleOpt,deTuple,isTuple) = make (fn Tuple ts => SOME ts | _ => NONE) val (_,deVector,_) = make (fn Vector t => SOME t | _ => NONE) val (_,deWeak,_) = make (fn Weak t => SOME t | _ => NONE) + val (deWordOpt,deWord,_) = make (fn Word ws => SOME ws | _ => NONE) end local @@ -101,7 +107,7 @@ let val w = newHash () in - fn t => lookup (Word.xorb (w, hash t), f t) + fn t => lookup (Hash.combine (w, hash t), f t) end in val array = make Array @@ -131,15 +137,12 @@ local - val generator: Word.t = 0wx5555 val w = newHash () in fun tuple ts = if 1 = Vector.length ts - then Vector.sub (ts, 0) - else lookup (Vector.fold (ts, w, fn (t, w) => - Word.xorb (w * generator, hash t)), - Tuple ts) + then Vector.first ts + else lookup (Hash.combine (w, Hash.vectorMap (ts, hash)), Tuple ts) end fun ofConst c = @@ -147,7 +150,8 @@ datatype z = datatype Const.t in case c of - IntInf _ => intInf + CSymbol _ => cpointer + | IntInf _ => intInf | Null => cpointer | Real r => real (RealX.size r) | Word w => word (WordX.size w) @@ -170,22 +174,65 @@ (plist, Property.initRec (fn (t, layout) => - case dest t of - Array t => seq [layout t, str " array"] - | CPointer => str "pointer" - | Datatype t => Tycon.layout t - | IntInf => str "intInf" - | Real s => str (concat ["real", RealSize.toString s]) - | Ref t => seq [layout t, str " ref"] - | Thread => str "thread" - | Tuple ts => - if Vector.isEmpty ts - then str "unit" - else paren (seq (separate (Vector.toListMap (ts, layout), - " * "))) - | Vector t => seq [layout t, str " vector"] - | Weak t => seq [layout t, str " weak"] - | Word s => str (concat ["word", WordSize.toString s]))) + let + fun unary (t, tc) = + seq [paren (layout t), str " ", str tc] + in + case dest t of + Array t => unary (t, "array") + | CPointer => str "cpointer" + | Datatype t => Tycon.layout t + | IntInf => str "intInf" + | Real s => str (concat ["real", RealSize.toString s]) + | Ref t => unary (t, "ref") + | Thread => str "thread" + | Tuple ts => + if Vector.isEmpty ts + then str "unit" + else seq [str "(", + (mayAlign o separateRight) + (Vector.toListMap (ts, layout), ","), + str ") tuple"] + | Vector t => unary (t, "vector") + | Weak t => unary (t, "weak") + | Word s => str (concat ["word", WordSize.toString s]) + end)) + end + + local + structure P = Parse + open Parse.Ops + + val tyconAlts = + Vector.fromList + ([("cpointer", cpointer), + ("intInf", intInf), + ("unit", unit), + ("thread", thread)] @ + List.map (WordSize.all, fn ws => ("word" ^ WordSize.toString ws, word ws)) @ + List.map (RealSize.all, fn rs => ("real" ^ RealSize.toString rs, real rs))) + val unary = + [array <$ P.kw "array", + reff <$ P.kw "ref", + (tuple o Vector.new1) <$ P.kw "tuple", + vector <$ P.kw "vector", + weak <$ P.kw "weak"] + in + fun parse () = + let + val parse = P.delay parse + in + Tycon.parseAs (tyconAlts, datatypee) + <|> + (P.paren parse >>= (fn ty => + P.any unary >>= (fn unary => + P.pure (unary ty)))) + <|> + (P.vector parse >>= (fn tys => + P.kw "tuple" *> + P.pure (tuple tys))) + end + val parse = parse () end fun checkPrimApp {args, prim, result, targs}: bool = @@ -213,109 +260,17 @@ word = word}}) val default = fn () => (default ()) handle BadPrimApp => false - - datatype z = datatype Prim.Name.t in - case Prim.name prim of + case prim of _ => default () end end -structure Cases = +structure Size = struct - datatype t = - Con of (Con.t * Label.t) vector - | Word of WordSize.t * (WordX.t * Label.t) vector - - fun equals (c1: t, c2: t): bool = - let - fun doit (l1, l2, eq') = - Vector.equals - (l1, l2, fn ((x1, a1), (x2, a2)) => - eq' (x1, x2) andalso Label.equals (a1, a2)) - in - case (c1, c2) of - (Con l1, Con l2) => doit (l1, l2, Con.equals) - | (Word (_, l1), Word (_, l2)) => doit (l1, l2, WordX.equals) - | _ => false - end - - fun hd (c: t): Label.t = - let - fun doit v = - if Vector.length v >= 1 - then let val (_, a) = Vector.sub (v, 0) - in a - end - else Error.bug "SsaTree.Cases.hd" - in - case c of - Con cs => doit cs - | Word (_, cs) => doit cs - end - - fun isEmpty (c: t): bool = - let - fun doit v = 0 = Vector.length v - in - case c of - Con cs => doit cs - | Word (_, cs) => doit cs - end - - fun fold (c: t, b, f) = - let - fun doit l = Vector.fold (l, b, fn ((_, a), b) => f (a, b)) - in - case c of - Con l => doit l - | Word (_, l) => doit l - end - - fun map (c: t, f): t = - let - fun doit l = Vector.map (l, fn (i, x) => (i, f x)) - in - case c of - Con l => Con (doit l) - | Word (s, l) => Word (s, doit l) - end - - fun forall (c: t, f: Label.t -> bool): bool = - let - fun doit l = Vector.forall (l, fn (_, x) => f x) - in - case c of - Con l => doit l - | Word (_, l) => doit l - end - - fun length (c: t): int = fold (c, 0, fn (_, i) => i + 1) - - fun foreach (c, f) = fold (c, (), fn (x, ()) => f x) - end - -local open Layout -in - fun layoutTuple xs = Vector.layout Var.layout xs -end - -structure Var = - struct - open Var - - fun pretty (x, global) = - case global x of - NONE => toString x - | SOME s => s - - fun prettys (xs: Var.t vector, global: Var.t -> string option) = - Layout.toString (Vector.layout - (fn x => - case global x of - NONE => layout x - | SOME s => Layout.str s) - xs) + val check: int * int option -> int *bool = + fn (size, NONE) => (size,false) + | (size, SOME max) => (size,size > max) end structure Exp = @@ -335,6 +290,16 @@ val unit = Tuple (Vector.new0 ()) + (* Vals to determine the size for inline.fun and loop optimization*) + val size : t -> int = + fn ConApp {args, ...} => 1 + Vector.length args + | Const _ => 0 + | PrimApp {args, ...} => 1 + Vector.length args + | Profile _ => 0 + | Select _ => 1 + 1 + | Tuple xs => 1 + Vector.length xs + | Var _ => 0 + fun foreachVar (e, v) = let fun vs xs = Vector.foreach (xs, v) @@ -365,28 +330,64 @@ | Var x => Var (fx x) end - fun layout e = + fun layout' (e, layoutVar) = let open Layout + fun layoutArgs xs = Vector.layout layoutVar xs in case e of ConApp {con, args} => - seq [Con.layout con, str " ", layoutTuple args] + seq [str "con ", + Con.layout con, + if Vector.isEmpty args + then empty + else seq [str " ", layoutArgs args]] | Const c => Const.layout c | PrimApp {prim, targs, args} => - seq [Prim.layout prim, + seq [str "prim ", + Prim.layoutFull (prim, Type.layout), if !Control.showTypes - then if 0 = Vector.length targs - then empty - else Vector.layout Type.layout targs - else empty, - seq [str " ", layoutTuple args]] + andalso not (Vector.isEmpty targs) + then Layout.list (Vector.toListMap (targs, Type.layout)) + else empty, + str " ", + layoutArgs args] | Profile p => ProfileExp.layout p | Select {tuple, offset} => seq [str "#", Int.layout offset, str " ", - Var.layout tuple] - | Tuple xs => layoutTuple xs - | Var x => Var.layout x + paren (layoutVar tuple)] + | Tuple xs => layoutArgs xs + | Var x => layoutVar x + end + fun layout e = layout' (e, Var.layout) + + val parse = + let + open Parse + val parseArgs = vector Var.parse + val parseArgsOpt = vectorOpt Var.parse + in + mlSpaces *> any + [ConApp <$> + (kw "con" *> + Con.parse >>= (fn con => + parseArgsOpt >>= (fn args => + pure {con = con, args = args}))), + Const <$> Const.parse, + PrimApp <$> + (kw "prim" *> + Prim.parseFull Type.parse >>= (fn prim => + listOpt Type.parse >>= (fn targs => + parseArgs >>= (fn args => + pure {prim = prim, targs = Vector.fromList targs, args = args})))), + Select <$> + (mlSpaces *> char #"#" *> + (peek (nextSat Char.isDigit) *> + fromScan (Function.curry Int.scan StringCvt.DEC)) >>= (fn offset => + paren Var.parse >>= (fn tuple => + pure {tuple = tuple, offset = offset}))), + Tuple <$> parseArgs, + Var <$> Var.parse] end fun maySideEffect (e: t): bool = @@ -406,9 +407,11 @@ (ConApp {con, args}, ConApp {con = con', args = args'}) => Con.equals (con, con') andalso varsEquals (args, args') | (Const c, Const c') => Const.equals (c, c') - | (PrimApp {prim, args, ...}, - PrimApp {prim = prim', args = args', ...}) => - Prim.equals (prim, prim') andalso varsEquals (args, args') + | (PrimApp {prim, targs, args}, + PrimApp {prim = prim', targs = targs', args = args'}) => + Prim.equals (prim, prim') + andalso Vector.equals (targs, targs', Type.equals) + andalso varsEquals (args, args') | (Profile p, Profile p') => ProfileExp.equals (p, p') | (Select {tuple = t, offset = i}, Select {tuple = t', offset = i'}) => Var.equals (t, t') andalso i = i' @@ -423,37 +426,22 @@ val select = newHash () val tuple = newHash () fun hashVars (xs: Var.t vector, w: Word.t): Word.t = - Vector.fold (xs, w, fn (x, w) => Word.xorb (w, Var.hash x)) + Hash.combine (w, Hash.vectorMap (xs, Var.hash)) + fun hashTypes (ts: Type.t vector, w: Word.t): Word.t = + Hash.combine (w, Hash.vectorMap (ts, Type.hash)) in val hash: t -> Word.t = fn ConApp {con, args, ...} => hashVars (args, Con.hash con) | Const c => Const.hash c - | PrimApp {args, ...} => hashVars (args, primApp) - | Profile p => Word.xorb (profile, ProfileExp.hash p) + | PrimApp {targs, args, ...} => hashVars (args, hashTypes (targs, primApp)) + | Profile p => Hash.combine (profile, ProfileExp.hash p) | Select {tuple, offset} => - Word.xorb (select, Var.hash tuple + Word.fromInt offset) + Hash.combine (select, Var.hash tuple + Word.fromInt offset) | Tuple xs => hashVars (xs, tuple) | Var x => Var.hash x end val hash = Trace.trace ("SsaTree.Exp.hash", layout, Word.layout) hash - - fun toPretty (e: t, global: Var.t -> string option): string = - case e of - ConApp {con, args} => - concat [Con.toString con, " ", Var.prettys (args, global)] - | Const c => Const.toString c - | PrimApp {prim, args, ...} => - Layout.toString - (Prim.layoutApp (prim, args, fn x => - case global x of - NONE => Var.layout x - | SOME s => Layout.str s)) - | Profile p => ProfileExp.toString p - | Select {tuple, offset} => - concat ["#", Int.toString offset, " ", Var.toString tuple] - | Tuple xs => Var.prettys (xs, global) - | Var x => Var.toString x end datatype z = datatype Exp.t @@ -470,19 +458,37 @@ val exp = make #exp end - fun layout (T {var, ty, exp}) = + fun sizeAux (T {exp, ...}, acc, max, sizeExp) = + Size.check (sizeExp exp + acc, max) + + fun layout' (T {var, ty, exp}, layoutVar) = let open Layout - in - seq [seq [case var of - NONE => empty - | SOME var => - seq [Var.layout var, - if !Control.showTypes - then seq [str ": ", Type.layout ty] - else empty, - str " = "]], - Exp.layout exp] + val (sep, ty) = + if !Control.showTypes + then (str ":", indent (seq [Type.layout ty, str " ="], 2)) + else (str " =", empty) + in + mayAlign [mayAlign [seq [str "val ", + case var of + NONE => str "_" + | SOME var => Var.layout var, + sep], + ty], + indent (Exp.layout' (exp, layoutVar), 2)] + end + fun layout e = layout' (e, Var.layout) + + val parse = + let + open Parse + in + T <$> + (kw "val" *> + ((SOME <$> Var.parse) <|> (NONE <$ kw "_")) >>= (fn var => + sym ":" *> Type.parse >>= (fn ty => + sym "=" *> Exp.parse >>= (fn exp => + pure {var = var, ty = ty, exp = exp})))) end local @@ -496,33 +502,42 @@ fun clear s = Option.app (var s, Var.clear) - fun prettifyGlobals (v: t vector): Var.t -> string option = + fun prettifyGlobals (v: t vector): Var.t -> Layout.t = let - val {get = global: Var.t -> string option, set = setGlobal, ...} = - Property.getSet (Var.plist, Property.initConst NONE) + val {get = global: Var.t -> Layout.t, set = setGlobal, ...} = + Property.getSet (Var.plist, Property.initFun Var.layout) val _ = Vector.foreach (v, fn T {var, exp, ...} => Option.app (var, fn var => let - fun set s = + fun set () = let - val maxSize = 10 + val s = Layout.toString (Exp.layout' (exp, Var.layout)) + val maxSize = 20 + val dots = " ... " + val dotsSize = String.size dots + val frontSize = 2 * (maxSize - dotsSize) div 3 + val backSize = maxSize - dotsSize - frontSize val s = if String.size s > maxSize - then concat [String.prefix (s, maxSize), "..."] + then concat [String.prefix (s, frontSize), + dots, + String.suffix (s, backSize)] else s in - setGlobal (var, SOME s) + if String.hasSubstring (s, {substring = "(*"}) + orelse String.hasSubstring (s, {substring = "*)"}) + then () + else setGlobal (var, Layout.seq [Var.layout var, + Layout.str (" (*" ^ s ^ "*)")]) end in case exp of - Const c => set (Layout.toString (Const.layout c)) - | ConApp {con, args, ...} => - if Vector.isEmpty args - then set (Con.toString con) - else set (concat [Con.toString con, "(...)"]) + Const _ => set () + | ConApp _ => set () + | Tuple xs => if Vector.isEmpty xs then set () else () | _ => () end)) in @@ -530,162 +545,15 @@ end end -structure Handler = - struct - structure Label = Label - - datatype t = - Caller - | Dead - | Handle of Label.t - - fun layout (h: t): Layout.t = - let - open Layout - in - case h of - Caller => str "Caller" - | Dead => str "Dead" - | Handle l => seq [str "Handle ", Label.layout l] - end - - val equals = - fn (Caller, Caller) => true - | (Dead, Dead) => true - | (Handle l, Handle l') => Label.equals (l, l') - | _ => false - - fun foldLabel (h: t, a: 'a, f: Label.t * 'a -> 'a): 'a = - case h of - Caller => a - | Dead => a - | Handle l => f (l, a) - - fun foreachLabel (h, f) = foldLabel (h, (), f o #1) - - fun map (h, f) = - case h of - Caller => Caller - | Dead => Dead - | Handle l => Handle (f l) - - local - val newHash = Random.word - val caller = newHash () - val dead = newHash () - val handlee = newHash () - in - fun hash (h: t): word = - case h of - Caller => caller - | Dead => dead - | Handle l => Word.xorb (handlee, Label.hash l) - end - end - -structure Return = - struct - structure Label = Label - structure Handler = Handler - - datatype t = - Dead - | NonTail of {cont: Label.t, - handler: Handler.t} - | Tail - - fun layout r = - let - open Layout - in - case r of - Dead => str "Dead" - | NonTail {cont, handler} => - seq [str "NonTail ", - Layout.record - [("cont", Label.layout cont), - ("handler", Handler.layout handler)]] - | Tail => str "Tail" - end - - fun equals (r, r'): bool = - case (r, r') of - (Dead, Dead) => true - | (NonTail {cont = c, handler = h}, - NonTail {cont = c', handler = h'}) => - Label.equals (c, c') andalso Handler.equals (h, h') - | (Tail, Tail) => true - | _ => false - - fun foldLabel (r: t, a, f) = - case r of - Dead => a - | NonTail {cont, handler} => - Handler.foldLabel (handler, f (cont, a), f) - | Tail => a - - fun foreachLabel (r, f) = foldLabel (r, (), f o #1) - - fun foreachHandler (r, f) = - case r of - Dead => () - | NonTail {handler, ...} => Handler.foreachLabel (handler, f) - | Tail => () - - fun map (r, f) = - case r of - Dead => Dead - | NonTail {cont, handler} => - NonTail {cont = f cont, - handler = Handler.map (handler, f)} - | Tail => Tail - - fun compose (r, r') = - case r' of - Dead => Dead - | NonTail {cont, handler} => - NonTail - {cont = cont, - handler = (case handler of - Handler.Caller => - (case r of - Dead => Handler.Caller - | NonTail {handler, ...} => handler - | Tail => Handler.Caller) - | Handler.Dead => handler - | Handler.Handle _ => handler)} - | Tail => r - - local - val newHash = Random.word - val dead = newHash () - val nonTail = newHash () - val tail = newHash () - in - fun hash r = - case r of - Dead => dead - | NonTail {cont, handler} => - Word.xorb (Word.xorb (nonTail, Label.hash cont), - Handler.hash handler) - | Tail => tail - end - end - structure Transfer = struct datatype t = - Arith of {prim: Type.t Prim.t, - args: Var.t vector, - overflow: Label.t, (* Must be nullary. *) - success: Label.t, (* Must be unary. *) - ty: Type.t} - | Bug (* MLton thought control couldn't reach here. *) + Bug (* MLton thought control couldn't reach here. *) | Call of {args: Var.t vector, func: Func.t, return: Return.t} | Case of {test: Var.t, - cases: Cases.t, + cases: (Con.t, Label.t) Cases.t, default: Label.t option} (* Must be nullary. *) | Goto of {dst: Label.t, args: Var.t vector} @@ -693,18 +561,24 @@ | Return of Var.t vector | Runtime of {prim: Type.t Prim.t, args: Var.t vector, - return: Label.t} (* Must be nullary. *) + return: Label.t} + + (* Vals to determine the size for inline.fun and loop optimization*) + val size = + fn Bug => 1 + | Call {args, ...} => 1 + Vector.length args + | Case {cases, ...} => 1 + Cases.length cases + | Goto {args, ...} => 1 + Vector.length args + | Raise xs => 1 + Vector.length xs + | Return xs => 1 + Vector.length xs + | Runtime {args, ...} => 1 + Vector.length args fun foreachFuncLabelVar (t, func: Func.t -> unit, label: Label.t -> unit, var) = let fun vars xs = Vector.foreach (xs, var) in case t of - Arith {args, overflow, success, ...} => - (vars args - ; label overflow - ; label success) - | Bug => () + Bug => () | Call {func = f, args, return, ...} => (func f ; Return.foreachLabel (return, label) @@ -735,13 +609,7 @@ fun fxs xs = Vector.map (xs, fx) in case t of - Arith {prim, args, overflow, success, ty} => - Arith {prim = prim, - args = fxs args, - overflow = fl overflow, - success = fl success, - ty = ty} - | Bug => Bug + Bug => Bug | Call {func, args, return} => Call {func = func, args = fxs args, @@ -764,65 +632,124 @@ fun replaceLabel (t, f) = replaceLabelVar (t, f, fn x => x) fun replaceVar (t, f) = replaceLabelVar (t, fn l => l, f) - local open Layout - in - fun layoutCase {test, cases, default} = - let - fun doit (l, layout) = - Vector.toListMap - (l, fn (i, l) => - seq [layout i, str " => ", Label.layout l]) - datatype z = datatype Cases.t - val cases = - case cases of - Con l => doit (l, Con.layout) - | Word (_, l) => doit (l, WordX.layout) - val cases = - case default of - NONE => cases - | SOME j => - cases @ [seq [str "_ => ", Label.layout j]] - in - align [seq [str "case ", Var.layout test, str " of"], - indent (alignPrefix (cases, "| "), 2)] - end - - val layout = - fn Arith {prim, args, overflow, success, ...} => - seq [Label.layout success, str " ", - tuple [Prim.layoutApp (prim, args, Var.layout)], - str " Overflow => ", - Label.layout overflow, str " ()"] - | Bug => str "Bug" + fun layout' (t, layoutVar) = + let + open Layout + fun layoutArgs xs = Vector.layout layoutVar xs + fun layoutCase {test, cases, default} = + let + fun doit (l, layout) = + Vector.toListMap + (l, fn (i, l) => + seq [layout i, str " => ", Label.layout l]) + datatype z = datatype Cases.t + val (suffix, cases) = + case cases of + Con l => (empty, doit (l, Con.layout)) + | Word (size, l) => (str (WordSize.toString size), + doit (l, fn w => WordX.layout (w, {suffix = true}))) + val cases = + case default of + NONE => cases + | SOME j => + cases @ [seq [str "_ => ", Label.layout j]] + in + align [seq [str "case", suffix, str " ", layoutVar test, str " of"], + indent (alignPrefix (cases, "| "), 2)] + end + fun layoutPrim {prim, args} = + seq [Prim.layoutFull (prim, Type.layout), str " ", layoutArgs args] + in + case t of + Bug => str "bug" | Call {func, args, return} => - seq [Func.layout func, str " ", layoutTuple args, - str " ", Return.layout return] + let + val call = seq [Func.layout func, str " ", layoutArgs args] + in + case return of + Return.Dead => seq [str "call dead ", call] + | Return.NonTail {cont, handler} => + seq [str "call ", Label.layout cont, str " ", + paren call, + str " handle _ => ", + case handler of + Handler.Caller => str "raise" + | Handler.Dead => str "dead" + | Handler.Handle l => Label.layout l] + | Return.Tail => seq [str "call tail ", call] + end | Case arg => layoutCase arg | Goto {dst, args} => - seq [Label.layout dst, str " ", layoutTuple args] - | Raise xs => seq [str "raise ", layoutTuple xs] - | Return xs => - seq [str "return ", - if 1 = Vector.length xs - then Var.layout (Vector.sub (xs, 0)) - else layoutTuple xs] + seq [str "goto ", Label.layout dst, str " ", layoutArgs args] + | Raise xs => seq [str "raise ", layoutArgs xs] + | Return xs => seq [str "return ", layoutArgs xs] | Runtime {prim, args, return} => - seq [Label.layout return, str " ", - tuple [Prim.layoutApp (prim, args, Var.layout)]] - end + seq [str "runtime ", Label.layout return, str " ", + paren (layoutPrim {prim = prim, args = args})] + end + fun layout t = layout' (t, Var.layout) + + val parse = + let + open Parse + val parseArgs = vector Var.parse + fun parseCase (parse', mk) = + Var.parse >>= (fn test => + kw "of" *> + (Vector.fromList <$> + sepBy (parse' >>= (fn p => + sym "=>" *> + Label.parse >>= (fn l => + pure (p, l))), + sym "|")) >>= (fn cases => + optional ((if Vector.isEmpty cases then pure () else sym "|") *> + kw "_" *> sym "=>" *> Label.parse) >>= (fn default => + pure {test = test, + cases = mk cases, + default = default}))) + val parseCall = + Func.parse >>= (fn func => + parseArgs >>= (fn args => + pure (fn return => pure {func = func, args = args, return = return}))) + in + mlSpaces *> any + [Bug <$ kw "bug", + Call <$> + (kw "call" *> + any [kw "dead" *> parseCall >>= (fn mkCall => mkCall Return.Dead), + kw "tail" *> parseCall >>= (fn mkCall => mkCall Return.Tail), + Label.parse >>= (fn cont => + paren parseCall >>= (fn mkCall => + kw "handle" *> kw "_" *> sym "=>" *> + any [kw "raise" *> mkCall (Return.NonTail {cont = cont, handler = Handler.Caller}), + kw "dead" *> mkCall (Return.NonTail {cont = cont, handler = Handler.Dead}), + Label.parse >>= (fn h => mkCall (Return.NonTail {cont = cont, handler = Handler.Handle h}))]))]), + Case <$> + any ((kw "case" *> parseCase (Con.parse, Cases.Con)) :: + (List.map (WordSize.all, fn ws => + kw ("case" ^ WordSize.toString ws) *> + parseCase (WordX.parse, fn cases => Cases.Word (ws, cases))))), + Goto <$> + (kw "goto" *> + Label.parse >>= (fn dst => + parseArgs >>= (fn args => + pure {dst = dst, args = args}))), + Raise <$> (kw "raise" *> parseArgs), + Return <$> (kw "return" *> parseArgs), + Runtime <$> + (kw "runtime" *> + Label.parse >>= (fn return => + paren (Prim.parseFull Type.parse >>= (fn prim => + parseArgs >>= (fn args => + pure (prim, args)))) >>= (fn (prim, args) => + pure {prim = prim, args = args, return = return})))] + end fun varsEquals (xs, xs') = Vector.equals (xs, xs', Var.equals) fun equals (e: t, e': t): bool = case (e, e') of - (Arith {prim, args, overflow, success, ...}, - Arith {prim = prim', args = args', - overflow = overflow', success = success', ...}) => - Prim.equals (prim, prim') andalso - varsEquals (args, args') andalso - Label.equals (overflow, overflow') andalso - Label.equals (success, success') - | (Bug, Bug) => true + (Bug, Bug) => true | (Call {func, args, return}, Call {func = func', args = args', return = return'}) => Func.equals (func, func') andalso @@ -831,7 +758,7 @@ | (Case {test, cases, default}, Case {test = test', cases = cases', default = default'}) => Var.equals (test, test') - andalso Cases.equals (cases, cases') + andalso Cases.equals (cases, cases', Con.equals, Label.equals) andalso Option.equals (default, default', Label.equals) | (Goto {dst, args}, Goto {dst = dst', args = args'}) => Label.equals (dst, dst') andalso @@ -851,14 +778,11 @@ val raisee = newHash () val return = newHash () fun hashVars (xs: Var.t vector, w: Word.t): Word.t = - Vector.fold (xs, w, fn (x, w) => Word.xorb (w, Var.hash x)) - fun hash2 (w1: Word.t, w2: Word.t) = Word.xorb (w1, w2) + Hash.combine (w, Hash.vectorMap (xs, Var.hash)) + fun hash2 (w1: Word.t, w2: Word.t) = Hash.combine (w1, w2) in val hash: t -> Word.t = - fn Arith {args, overflow, success, ...} => - hashVars (args, hash2 (Label.hash overflow, - Label.hash success)) - | Bug => bug + fn Bug => bug | Call {func, args, return} => hashVars (args, hash2 (Func.hash func, Return.hash return)) | Case {test, cases, default} => @@ -888,12 +812,21 @@ in fun layoutFormals (xts: (Var.t * Type.t) vector) = Vector.layout (fn (x, t) => - seq [Var.layout x, - if !Control.showTypes - then seq [str ": ", Type.layout t] - else empty]) + if !Control.showTypes + then mayAlign [seq [Var.layout x, str ":"], + indent (Type.layout t, 2)] + else Var.layout x) xts end +local + open Parse +in + val parseFormals = + vector (Var.parse >>= (fn x => + sym ":" *> + Type.parse >>= (fn ty => + pure (x, ty)))) +end structure Block = struct @@ -912,22 +845,60 @@ val transfer = make #transfer end - fun layout (T {label, args, statements, transfer}) = + fun sizeAux (T {statements, transfer, ...}, + acc, max, sizeExp, sizeTransfer) = + Exn.withEscape + (fn escape => + Vector.fold + (statements, Size.check (acc + sizeTransfer transfer, max), + fn (stmt, (acc, chk)) => + if chk + then escape (acc, chk) + else Statement.sizeAux (stmt, acc, max, sizeExp))) + + fun sizeAuxV (bs, acc, max, sizeExp, sizeTransfer) = + Exn.withEscape + (fn escape => + Vector.fold + (bs, (acc, false), fn (b, (acc, chk)) => + if chk + then escape (acc, chk) + else sizeAux (b, acc, max, sizeExp, sizeTransfer))) + + fun sizeV (bs, {sizeExp, sizeTransfer}) = + #1 (sizeAuxV (bs, 0, NONE, sizeExp, sizeTransfer)) + + fun layout' (T {label, args, statements, transfer}, layoutVar) = let open Layout + fun layoutStatement s = Statement.layout' (s, layoutVar) + fun layoutTransfer t = Transfer.layout' (t, layoutVar) in - align [seq [Label.layout label, str " ", - Vector.layout (fn (x, t) => - if !Control.showTypes - then seq [Var.layout x, str ": ", - Type.layout t] - else Var.layout x) args], + align [seq [str "block ", Label.layout label, str " ", + layoutFormals args], indent (align [align - (Vector.toListMap (statements, Statement.layout)), - Transfer.layout transfer], + (Vector.toListMap (statements, layoutStatement)), + layoutTransfer transfer], 2)] end + fun layout b = layout' (b, Var.layout) + + val parse = + let + open Parse + in + T <$> + (kw "block" *> + Label.parse >>= (fn label => + parseFormals >>= (fn args => + many Statement.parse >>= (fn statements => + Transfer.parse >>= (fn transfer => + pure {label = label, + args = args, + statements = Vector.fromList statements, + transfer = transfer}))))) + end fun clear (T {label, args, statements, ...}) = (Label.clear label @@ -948,7 +919,8 @@ let open Layout in - seq [Tycon.layout tycon, + seq [str "datatype ", + Tycon.layout tycon, str " = ", alignPrefix (Vector.toListMap @@ -961,6 +933,22 @@ "| ")] end + val parse = + let + open Parse + val conExcepts = Vector.new2 ("datatype", "val") + in + T <$> + (kw "datatype" *> + Tycon.parse >>= (fn tycon => + sym "=" *> + sepBy (Con.parseExcept conExcepts >>= (fn con => + ((kw "of" *> vector Type.parse) <|> pure (Vector.new0 ())) >>= (fn args => + pure {con = con, args = args})), + sym "|") >>= (fn cons => + pure {tycon = tycon, cons = Vector.fromList cons}))) + end + fun clear (T {tycon, cons}) = (Tycon.clear tycon ; Vector.foreach (cons, Con.clear o #con)) @@ -1003,6 +991,21 @@ val name = make #name end + fun sizeAux (f, acc, max, sizeExp, sizeTransfer) = + Block.sizeAuxV (blocks f, acc, max, sizeExp, sizeTransfer) + + fun size (f, {sizeExp, sizeTransfer}) = + #1 (sizeAux (f, 0, NONE, sizeExp, sizeTransfer)) + + fun sizeMax (f, {max, sizeExp, sizeTransfer}) = + let + val (s, chk) = sizeAux (f, 0, max, sizeExp, sizeTransfer) + in + if chk + then NONE + else SOME s + end + fun foreachVar (f: t, fx: Var.t * Type.t -> unit): unit = let val {args, blocks, ...} = dest f @@ -1115,25 +1118,18 @@ nodeBlock = #block o nodeInfo} end - fun layoutDot (f, global: Var.t -> string option) = + fun layoutDot (f, layoutVar) = let - val {name, start, blocks, ...} = dest f - fun makeName (name: string, - formals: (Var.t * Type.t) vector): string = - concat [name, " ", - let - open Layout - in - toString - (vector - (Vector.map - (formals, fn (var, ty) => - if !Control.showTypes - then seq [Var.layout var, - str ": ", - Type.layout ty] - else Var.layout var))) - end] + fun toStringStatement s = Layout.toString (Statement.layout' (s, layoutVar)) + fun toStringTransfer t = + Layout.toString + (case t of + Case {test, ...} => + Layout.seq [Layout.str "case ", layoutVar test] + | _ => Transfer.layout' (t, layoutVar)) + fun toStringFormals args = Layout.toString (layoutFormals args) + fun toStringHeader (name, args) = concat [name, " ", toStringFormals args] + val {name, args, start, blocks, returns, raises, ...} = dest f open Dot val graph = Graph.new () val {get = nodeOptions, ...} = @@ -1146,36 +1142,27 @@ Property.initFun (fn _ => newNode ())) val {get = edgeOptions, set = setEdgeOptions, ...} = Property.getSetOnce (Edge.plist, Property.initConst []) + fun edge (from, to, label: string, style: style): unit = + let + val e = Graph.addEdge (graph, {from = from, + to = to}) + val _ = setEdgeOptions (e, [EdgeOption.label label, + EdgeOption.Style style]) + in + () + end val _ = Vector.foreach (blocks, fn Block.T {label, args, statements, transfer} => let val from = labelNode label - fun edge (to: Label.t, - label: string, - style: style): unit = - let - val e = Graph.addEdge (graph, {from = from, - to = labelNode to}) - val _ = setEdgeOptions (e, [EdgeOption.label label, - EdgeOption.Style style]) - in - () - end - val rest = + val edge = fn (to, label, style) => + edge (from, labelNode to, label, style) + val () = case transfer of - Arith {prim, args, overflow, success, ...} => - (edge (success, "", Solid) - ; edge (overflow, "Overflow", Dashed) - ; [Layout.toString - (Prim.layoutApp (prim, args, fn x => - Layout.str - (Var.pretty (x, global))))]) - | Bug => ["bug"] - | Call {func, args, return} => + Bug => () + | Call {return, ...} => let - val f = Func.toString func - val args = Var.prettys (args, global) val _ = case return of Return.Dead => () @@ -1183,12 +1170,12 @@ (edge (cont, "", Dotted) ; (Handler.foreachLabel (handler, fn l => - edge (l, "", Dashed)))) + edge (l, "Handle", Dashed)))) | Return.Tail => () in - [f, " ", args] + () end - | Case {test, cases, default, ...} => + | Case {cases, default, ...} => let fun doit (v, toString) = Vector.foreach @@ -1196,63 +1183,67 @@ edge (j, toString x, Solid)) val _ = case cases of - Cases.Con v => doit (v, Con.toString) + Cases.Con v => + doit (v, Con.toString) | Cases.Word (_, v) => - doit (v, WordX.toString) + doit (v, fn w => WordX.toString (w, {suffix = true})) val _ = case default of NONE => () | SOME j => - edge (j, "default", Solid) + edge (j, "Default", Solid) in - ["case ", Var.toString test] + () end - | Goto {dst, args} => - (edge (dst, "", Solid) - ; [Label.toString dst, " ", - Var.prettys (args, global)]) - | Raise xs => ["raise ", Var.prettys (xs, global)] - | Return xs => ["return ", Var.prettys (xs, global)] - | Runtime {prim, args, return} => - (edge (return, "", Solid) - ; [Layout.toString - (Prim.layoutApp (prim, args, fn x => - Layout.str - (Var.pretty (x, global))))]) + | Goto {dst, ...} => edge (dst, "", Solid) + | Raise _ => () + | Return _ => () + | Runtime {return, ...} => edge (return, "", Dotted) + val lab = + [(toStringTransfer transfer, Left)] val lab = Vector.foldr - (statements, [(concat rest, Left)], - fn (Statement.T {var, ty, exp, ...}, ac) => - let - val exp = Exp.toPretty (exp, global) - val s = - if Type.isUnit ty - then exp - else - case var of - NONE => exp - | SOME var => - concat [Var.toString var, - if !Control.showTypes - then concat [": ", - Layout.toString - (Type.layout ty)] - else "", - " = ", exp] - in - (s, Left) :: ac - end) - val name = makeName (Label.toString label, args) - val _ = setNodeText (from, (name, Left) :: lab) + (statements, lab, fn (s, ac) => + (toStringStatement s, Left) :: ac) + val lab = + (toStringHeader (Label.toString label, args), Left)::lab + val _ = setNodeText (from, lab) in () end) - val root = labelNode start - val graphLayout = + val startNode = labelNode start + val funNode = + let + val funNode = newNode () + val _ = edge (funNode, startNode, "Start", Solid) + val lab = + [(toStringTransfer (Transfer.Goto {dst = start, args = Vector.new0 ()}), Left)] + val lab = + if !Control.showTypes + then ((Layout.toString o Layout.seq) + [Layout.str ": ", + Layout.record [("returns", + Option.layout + (Vector.layout Type.layout) + returns), + ("raises", + Option.layout + (Vector.layout Type.layout) + raises)]], + Left)::lab + else lab + val lab = + (toStringHeader ("fun " ^ Func.toString name, args), Left):: + lab + val _ = setNodeText (funNode, lab) + in + funNode + end + val controlFlowGraphLayout = Graph.layoutDot (graph, fn {nodeName} => {title = concat [Func.toString name, " control-flow graph"], - options = [GraphOption.Rank (Min, [{nodeName = nodeName root}])], + options = [GraphOption.Rank (Min, [{nodeName = nodeName funNode}])], edgeOptions = edgeOptions, nodeOptions = fn n => let @@ -1260,7 +1251,8 @@ open NodeOption in FontColor Black :: Shape Box :: l end}) - fun treeLayout () = + val () = Graph.removeNode (graph, funNode) + fun dominatorTreeLayout () = let val {get = nodeOptions, set = setNodeOptions, ...} = Property.getSetOnce (Node.plist, Property.initConst []) @@ -1269,18 +1261,17 @@ (blocks, fn Block.T {label, ...} => setNodeOptions (labelNode label, [NodeOption.label (Label.toString label)])) - val treeLayout = + val dominatorTreeLayout = Tree.layoutDot (Graph.dominatorTree (graph, - {root = root, + {root = startNode, nodeValue = fn n => n}), {title = concat [Func.toString name, " dominator tree"], options = [], nodeOptions = nodeOptions}) in - treeLayout + dominatorTreeLayout end - (* fun loopForestLayout () = let val {get = nodeName, set = setNodeName, ...} = @@ -1292,18 +1283,19 @@ val loopForestLayout = Graph.LoopForest.layoutDot (Graph.loopForestSteensgaard (graph, - {root = root}), + {root = startNode, + nodeValue = fn x => x}), {title = concat [Func.toString name, " loop forest"], options = [], - nodeName = nodeName}) + name = nodeName}) in loopForestLayout end - *) in {destroy = destroy, - graph = graphLayout, - tree = treeLayout} + controlFlowGraph = controlFlowGraphLayout, + dominatorTree = dominatorTreeLayout, + loopForest = loopForestLayout} end end @@ -1327,64 +1319,108 @@ fun layoutHeader (f: t): Layout.t = let - val {args, name, raises, returns, start, ...} = dest f + val {args, name, mayInline, raises, returns, start, ...} = dest f open Layout - in - seq [str "fun ", - Func.layout name, - str " ", - layoutFormals args, - if !Control.showTypes - then seq [str ": ", - record [("raises", - Option.layout - (Vector.layout Type.layout) raises), - ("returns", - Option.layout - (Vector.layout Type.layout) returns)]] - else empty, - str " = ", Label.layout start, str " ()"] + val (sep, rty) = + if !Control.showTypes + then (str ":", + indent (seq [record [("returns", + Option.layout + (Vector.layout Type.layout) + returns), + ("raises", + Option.layout + (Vector.layout Type.layout) + raises)], + str " ="], + 2)) + else (str " =", empty) + in + mayAlign [mayAlign [seq [str "fun ", + if mayInline then empty else str "noinline ", + Func.layout name, + str " ", + layoutFormals args, + sep], + rty], + seq [Label.layout start, str " ()"]] + end + + val parseHeader = + let + open Parse + in + kw "fun" *> + optional (kw "noinline") >>= (fn noInline => + Func.parse >>= (fn name => + parseFormals >>= (fn args => + sym ":" *> + cbrack (ffield ("returns", option (vector Type.parse)) >>= (fn returns => + nfield ("raises", option (vector Type.parse)) >>= (fn raises => + pure (returns, raises)))) >>= (fn (returns, raises) => + sym "=" *> + Label.parse >>= (fn start => + paren (pure ()) *> + pure (Option.isNone noInline, name, args, returns, raises, start)))))) end - fun layout (f: t) = + fun layout' (f: t, layoutVar) = let val {blocks, ...} = dest f open Layout + fun layoutBlock b = Block.layout' (b, layoutVar) in align [layoutHeader f, - indent (align (Vector.toListMap (blocks, Block.layout)), 2)] + indent (align (Vector.toListMap (blocks, layoutBlock)), 2)] end + fun layout f = layout' (f, Var.layout) - fun layouts (f: t, global, output: Layout.t -> unit): unit = + val parse = + let + open Parse + in + new <$> + (parseHeader >>= (fn (mayInline, name, args, returns, raises, start) => + many Block.parse >>= (fn blocks => + pure {mayInline = mayInline, + name = name, + args = args, + returns = returns, + raises = raises, + start = start, + blocks = Vector.fromList blocks}))) + end + + fun layouts (f: t, layoutVar, output: Layout.t -> unit): unit = let val {blocks, name, ...} = dest f val _ = output (layoutHeader f) - val _ = Vector.foreach (blocks, fn b => - output (Layout.indent (Block.layout b, 2))) + val _ = + Vector.foreach + (blocks, fn b => + output (Layout.indent (Block.layout' (b, layoutVar), 2))) val _ = if not (!Control.keepDot) then () else let - val {destroy, graph, tree} = - layoutDot (f, global) + val {destroy, controlFlowGraph, dominatorTree, loopForest} = + layoutDot (f, layoutVar) val name = Func.toString name fun doit (s, g) = - let - open Control - in - saveToFile - ({suffix = concat [name, ".", s, ".dot"]}, - Dot, (), Layout (fn () => g)) - end - val _ = doit ("cfg", graph) + Control.saveToFile + {arg = (), + name = SOME (concat [name, ".", s]), + toFile = {display = Control.Layout (fn () => g), + style = Control.Dot, + suffix = "dot"}, + verb = Control.Detail} + val _ = doit ("cfg", controlFlowGraph) handle _ => Error.warning "SsaTree.layouts: couldn't layout cfg" - val _ = doit ("dom", tree ()) + val _ = doit ("dom", dominatorTree ()) handle _ => Error.warning "SsaTree.layouts: couldn't layout dom" - (* val _ = doit ("lf", loopForest ()) handle _ => Error.warning "SsaTree.layouts: couldn't layout lf" - *) val () = destroy () in () @@ -1701,35 +1737,60 @@ fun layouts (p as T {datatypes, globals, functions, main}, output': Layout.t -> unit) = let - val global = Statement.prettifyGlobals globals + val layoutVar = Statement.prettifyGlobals globals open Layout (* Layout includes an output function, so we need to rebind output * to the one above. *) val output = output' in - output (str "\n\nDatatypes:") + output (str "\n\n(* Datatypes: *)") ; Vector.foreach (datatypes, output o Datatype.layout) - ; output (str "\n\nGlobals:") - ; Vector.foreach (globals, output o Statement.layout) - ; output (seq [str "\n\nMain: ", Func.layout main]) - ; output (str "\n\nFunctions:") + ; output (str "\n\n(* Globals: *)") + ; Vector.foreach (globals, output o (fn s => Statement.layout' (s, layoutVar))) + ; output (str "\n\n(* Functions: *)") ; List.foreach (functions, fn f => - Function.layouts (f, global, output)) + Function.layouts (f, layoutVar, output)) + ; output (seq [str "\n\n(* Main: *) ", Func.layout main]) ; if not (!Control.keepDot) then () else - let - open Control - in - saveToFile - ({suffix = "call-graph.dot"}, - Dot, (), Layout (fn () => - layoutCallGraph (p, !Control.inputFile))) - end + Control.saveToFile + {arg = (), + name = NONE, + toFile = {display = Control.Layout (fn () => layoutCallGraph (p, !Control.inputFile)), + style = Control.Dot, + suffix = "call-graph.dot"}, + verb = Control.Detail} + end + + val toFile = {display = Control.Layouts layouts, style = Control.ML, suffix = "ssa"} + + fun parse () = + let + open Parse + + val () = Tycon.parseReset {prims = Vector.new1 Tycon.bool} + val () = Con.parseReset {prims = Vector.new2 (Con.truee, Con.falsee)} + val () = Var.parseReset {prims = Vector.new0 ()} + val () = Label.parseReset {prims = Vector.new0 ()} + val () = Func.parseReset {prims = Vector.new0 ()} + + val parseProgram = + T <$> + (many Datatype.parse >>= (fn datatypes => + many Statement.parse >>= (fn globals => + many Function.parse >>= (fn functions => + Func.parse >>= (fn main => + pure {datatypes = Vector.fromList datatypes, + globals = Vector.fromList globals, + functions = functions, + main = main}))))) + in + parseProgram <* (mlSpaces *> (failing next <|> fail "end of file")) end - fun layoutStats (T {datatypes, globals, functions, main, ...}) = + fun layoutStats (program as T {datatypes, globals, functions, main, ...}) = let val (mainNumVars, mainNumBlocks) = case List.peek (functions, fn f => @@ -1774,7 +1835,8 @@ (datatypes, fn Datatype.T {cons, ...} => Vector.foreach (cons, fn {args, ...} => Vector.foreach (args, countType))) - val numStatements = ref (Vector.length globals) + val numGlobals = Vector.length globals + val numStatements = ref numGlobals val numBlocks = ref 0 val _ = List.foreach @@ -1802,7 +1864,9 @@ open Layout in align - [seq [str "num vars in main = ", Int.layout mainNumVars], + [Control.sizeMessage ("ssa program", program), + seq [str "num globals = ", Int.layout numGlobals], + seq [str "num vars in main = ", Int.layout mainNumVars], seq [str "num blocks in main = ", Int.layout mainNumBlocks], seq [str "num functions in program = ", Int.layout numFunctions], seq [str "num blocks in program = ", Int.layout (!numBlocks)], @@ -1841,8 +1905,7 @@ | _ => () fun loopTransfer t = case t of - Arith {prim, ...} => f prim - | Runtime {prim, ...} => f prim + Runtime {prim, ...} => f prim | _ => () val _ = Vector.foreach (globals, loopStatement) val _ = diff -Nru mlton-20130715/mlton/ssa/ssa-tree.sig mlton-20210117+dfsg/mlton/ssa/ssa-tree.sig --- mlton-20130715/mlton/ssa/ssa-tree.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/ssa-tree.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,43 +12,6 @@ include ATOMS end -signature HANDLER = - sig - structure Label: LABEL - - datatype t = - Caller - | Dead - | Handle of Label.t - - val equals: t * t -> bool - val foldLabel: t * 'a * (Label.t * 'a -> 'a) -> 'a - val foreachLabel: t * (Label.t -> unit) -> unit - val layout: t -> Layout.t - val map: t * (Label.t -> Label.t) -> t - end - -signature RETURN = - sig - structure Label: LABEL - - structure Handler: HANDLER - sharing Label = Handler.Label - - datatype t = - Dead - | NonTail of {cont: Label.t, - handler: Handler.t} - | Tail - - val compose: t * t -> t - val foldLabel: t * 'a * (Label.t * 'a -> 'a) -> 'a - val foreachHandler: t * (Label.t -> unit) -> unit - val foreachLabel: t * (Label.t -> unit) -> unit - val layout: t -> Layout.t - val map: t * (Label.t -> Label.t) -> t - end - signature SSA_TREE = sig include SSA_TREE_STRUCTS @@ -86,6 +49,8 @@ val deTupleOpt: t -> t vector option val deVector: t -> t val deWeak: t -> t + val deWord: t -> WordSize.t + val deWordOpt: t -> WordSize.t option val equals: t * t -> bool val hash: t -> word val intInf: t @@ -125,6 +90,7 @@ val layout: t -> Layout.t val maySideEffect: t -> bool val replaceVar: t * (Var.t -> Var.t) -> t + val size: t -> int val unit: t end @@ -137,67 +103,42 @@ val clear: t -> unit (* clear the var *) val exp: t -> Exp.t val layout: t -> Layout.t - val prettifyGlobals: t vector -> (Var.t -> string option) val profile: ProfileExp.t -> t val var: t -> Var.t option end - structure Cases: - sig - datatype t = - Con of (Con.t * Label.t) vector - | Word of WordSize.t * (WordX.t * Label.t) vector - - val forall: t * (Label.t -> bool) -> bool - val foreach: t * (Label.t -> unit) -> unit - val hd: t -> Label.t - val isEmpty: t -> bool - val length: t -> int - val map: t * (Label.t -> Label.t) -> t - end - - structure Handler: HANDLER - sharing Handler.Label = Label - - structure Return: RETURN - sharing Return.Handler = Handler - structure Transfer: sig datatype t = - Arith of {args: Var.t vector, - overflow: Label.t, (* Must be nullary. *) - prim: Type.t Prim.t, - success: Label.t, (* Must be unary. *) - ty: Type.t} (* int or word *) - | Bug (* MLton thought control couldn't reach here. *) + Bug (* MLton thought control couldn't reach here. *) | Call of {args: Var.t vector, func: Func.t, return: Return.t} - | Case of {cases: Cases.t, + | Case of {cases: (Con.t, Label.t) Cases.t, default: Label.t option, (* Must be nullary. *) test: Var.t} | Goto of {args: Var.t vector, dst: Label.t} - (* Raise implicitly raises to the caller. + (* Raise implicitly raises to the caller. * I.E. the local handler stack must be empty. *) | Raise of Var.t vector | Return of Var.t vector | Runtime of {args: Var.t vector, prim: Type.t Prim.t, - return: Label.t} (* Must be nullary. *) + return: Label.t} val equals: t * t -> bool val foreachFunc : t * (Func.t -> unit) -> unit val foreachLabel: t * (Label.t -> unit) -> unit val foreachLabelVar: t * (Label.t -> unit) * (Var.t -> unit) -> unit val foreachVar: t * (Var.t -> unit) -> unit - val hash: t -> Word.t + val hash: t -> Word.t val layout: t -> Layout.t val replaceLabelVar: t * (Label.t -> Label.t) * (Var.t -> Var.t) -> t val replaceLabel: t * (Label.t -> Label.t) -> t val replaceVar: t * (Var.t -> Var.t) -> t + val size: t -> int end structure Block: @@ -212,6 +153,7 @@ val clear: t -> unit val label: t -> Label.t val layout: t -> Layout.t + val sizeV: t vector * {sizeExp: Exp.t -> int, sizeTransfer: Transfer.t -> int} -> int val statements: t -> Statement.t vector val transfer: t -> Transfer.t end @@ -256,9 +198,10 @@ val foreachVar: t * (Var.t * Type.t -> unit) -> unit val layout: t -> Layout.t val layoutDot: - t * (Var.t -> string option) -> {destroy: unit -> unit, - graph: Layout.t, - tree: unit -> Layout.t} + t * (Var.t -> Layout.t) -> {destroy: unit -> unit, + controlFlowGraph: Layout.t, + dominatorTree: unit -> Layout.t, + loopForest: unit -> Layout.t} val mayInline: t -> bool val name: t -> Func.t val new: {args: (Var.t * Type.t) vector, @@ -269,6 +212,8 @@ returns: Type.t vector option, start: Label.t} -> t val profile: t * SourceInfo.t -> t + val size: t * {sizeExp: Exp.t -> int, sizeTransfer: Transfer.t -> int} -> int + val sizeMax: t * {max: int option, sizeExp: Exp.t -> int, sizeTransfer: Transfer.t -> int} -> int option end structure Program: @@ -292,5 +237,7 @@ val layouts: t * (Layout.t -> unit) -> unit val layoutStats: t -> Layout.t val mainFunction: t -> Function.t + val parse: unit -> t Parse.t + val toFile: {style: Control.style, suffix: string, display: t Control.display} end end diff -Nru mlton-20130715/mlton/ssa/three-point-lattice.fun mlton-20210117+dfsg/mlton/ssa/three-point-lattice.fun --- mlton-20130715/mlton/ssa/three-point-lattice.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/three-point-lattice.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor ThreePointLattice(S: THREE_POINT_LATTICE_STRUCTS): THREE_POINT_LATTICE = -struct - -open S - -structure L = NPointLattice(val names = [bottom, mid, top]) -open L - -val isBottom = fn x => isN (x, 0) -val isMid = fn x => isN (x, 1) -val isTop = fn x => isN (x, 2) -val makeMid = fn x => makeN (x, 1) -val makeTop = fn x => makeN (x, 2) -val whenMid = fn (x, h) => whenN (x, 1, h) -val whenTop = fn (x, h) => whenN (x, 2, h) -end diff -Nru mlton-20130715/mlton/ssa/three-point-lattice.sig mlton-20210117+dfsg/mlton/ssa/three-point-lattice.sig --- mlton-20130715/mlton/ssa/three-point-lattice.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/three-point-lattice.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature THREE_POINT_LATTICE_STRUCTS = - sig - (* pretty print names *) - val bottom: string - val mid: string - val top: string - end - -signature THREE_POINT_LATTICE = - sig - include THREE_POINT_LATTICE_STRUCTS - - type t - - val <= : t * t -> unit (* force rhs to be mid/top if lhs is *) - val == : t * t -> unit (* force lhs and rhs to be the same *) - val isBottom: t -> bool - val isMid: t -> bool - val isTop: t -> bool - val layout: t -> Layout.t - val makeTop: t -> unit - val makeMid: t -> unit - val new: unit -> t (* a new bottom *) - val up: t -> unit - (* handler will be run once iff value gte mid *) - val whenMid: t * (unit -> unit) -> unit - (* handler will be run once iff value gte top *) - val whenTop: t * (unit -> unit) -> unit - end diff -Nru mlton-20130715/mlton/ssa/two-point-lattice.fun mlton-20210117+dfsg/mlton/ssa/two-point-lattice.fun --- mlton-20130715/mlton/ssa/two-point-lattice.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/two-point-lattice.fun 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -functor TwoPointLattice (S: TWO_POINT_LATTICE_STRUCTS): TWO_POINT_LATTICE = -struct - -open S - -structure Set = DisjointSet -structure List = AppendList - -datatype t = T of value Set.t -and value = - Bottom of (unit -> unit) List.t ref (* If I become Top, then run these. *) - | Top - -fun value (T s) = Set.! s - -fun toString e = - case value e of - Bottom _ => bottom - | Top => top - -val layout = Layout.str o toString - -fun new (): t = T (Set.singleton (Bottom (ref List.empty))) - -fun equals (T s, T s') = Set.equals (s, s') - -fun addHandler (e, h) = - case value e of - Bottom hs => hs := List.cons (h, !hs) - | Top => h () - -fun isTop s = - case value s of - Top => true - | _ => false - -fun isBottom s = - case value s of - Bottom _ => true - | _ => false - -fun runHandlers hs = List.foreach (!hs, fn h => h ()) - -fun makeTop (T s) = - case Set.! s of - Top => () - | Bottom hs => (Set.:= (s, Top); runHandlers hs) - -fun from <= to = - if equals (from, to) - then () - else - case (value from, value to) of - (_, Top) => () - | (Top, _) => makeTop to - | (Bottom hs, _) => hs := List.cons (fn () => makeTop to, !hs) - -fun == (T s, T s') = - if Set.equals (s, s') - then () - else - let val e = Set.! s - val e' = Set.! s' - val _ = Set.union (s, s') - in - case (e, e') of - (Top, Top) => () - | (Bottom hs, Top) => (Set.:= (s, e'); runHandlers hs) - | (Top, Bottom hs) => (Set.:= (s, e); runHandlers hs) - | (Bottom hs, Bottom hs') => - Set.:= (s, Bottom (ref (List.append (!hs, !hs')))) - end - -end diff -Nru mlton-20130715/mlton/ssa/two-point-lattice.sig mlton-20210117+dfsg/mlton/ssa/two-point-lattice.sig --- mlton-20130715/mlton/ssa/two-point-lattice.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/two-point-lattice.sig 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - *) - -signature TWO_POINT_LATTICE_STRUCTS = - sig - (* pretty print names *) - val bottom: string - val top: string - end - -signature TWO_POINT_LATTICE = - sig - include TWO_POINT_LATTICE_STRUCTS - - type t - - val <= : t * t -> unit (* force rhs to be top if lhs is *) - val == : t * t -> unit (* force lhs and rhs to be the same *) - (* handler will be run once iff value becomes top *) - val addHandler: t * (unit -> unit) -> unit - val isBottom: t -> bool - val isTop: t -> bool - val layout: t -> Layout.t - val makeTop: t -> unit - val new: unit -> t (* a new bottom *) - end diff -Nru mlton-20130715/mlton/ssa/type-check2.fun mlton-20210117+dfsg/mlton/ssa/type-check2.fun --- mlton-20130715/mlton/ssa/type-check2.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/type-check2.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2011 Matthew Fluet. +(* Copyright (C) 2009,2011,2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -61,8 +61,8 @@ val _ = case oc of Con con => getCon con + | Sequence => () | Tuple => () - | Vector => () in () end @@ -104,6 +104,7 @@ | Object {args, con, ...} => (Option.app (con, getCon); getVars args) | PrimApp {args, ...} => getVars args | Select {base, ...} => Base.foreach (base, getVar) + | Sequence {args} => Vector.foreach (args, getVars) | Var x => getVar x in () @@ -126,9 +127,9 @@ in () end + handle exn => Error.reraiseSuffix (exn, concat [" in ", Layout.toString (Statement.layout s)]) val loopTransfer = - fn Arith {args, ty, ...} => (getVars args; loopType ty) - | Bug => () + fn Bug => () | Call {func, args, ...} => (getFunc func; getVars args) | Case {test, cases, default, ...} => let @@ -137,16 +138,15 @@ hash: 'a -> word, numExhaustiveCases: IntInf.t) = let - val table = HashSet.new {hash = hash} + val table = HashTable.new {equals = equals, hash = hash} val _ = Vector.foreach (cases, fn (x, _) => let val _ = - HashSet.insertIfNew - (table, hash x, fn y => equals (x, y), - fn () => x, - fn _ => Error.bug "Ssa.TypeCheck.loopTransfer: redundant branch in case") + HashTable.insertIfNew + (table, x, ignore, fn _ => + Error.bug "Ssa2.TypeCheck2.loopTransfer: redundant branch in case") in () end) @@ -154,9 +154,9 @@ in case (IntInf.equals (numCases, numExhaustiveCases), isSome default) of (true, true) => - Error.bug "Ssa.TypeCheck.loopTransfer: exhaustive case has default" + Error.bug "Ssa2.TypeCheck2.loopTransfer: exhaustive case has default" | (false, false) => - Error.bug "Ssa.TypeCheck.loopTransfer: non-exhaustive case has no default" + Error.bug "Ssa2.TypeCheck2.loopTransfer: non-exhaustive case has no default" | _ => () end fun doitWord (ws, cases) = @@ -166,7 +166,7 @@ val numExhaustiveCases = case Type.dest (getVar' test) of Type.Datatype t => Int.toIntInf (getTycon' t) - | _ => Error.bug "Ssa.TypeCheck.loopTransfer: case test is not a datatype" + | _ => Error.bug "Ssa2.TypeCheck2.loopTransfer: case test is not a datatype" in doit (cases, Con.equals, Con.hash, numExhaustiveCases) end @@ -182,6 +182,10 @@ | Raise xs => getVars xs | Return xs => getVars xs | Runtime {args, ...} => getVars args + val loopTransfer = + fn t => + (loopTransfer t) + handle exn => Error.reraiseSuffix (exn, concat [" in ", Layout.toString (Transfer.layout t)]) fun loopFunc (f: Function.t) = let val {args, blocks, raises, returns, start, ...} = Function.dest f @@ -190,10 +194,11 @@ *) fun loop (Tree.T (block, children)): unit = let - val Block.T {args, statements, transfer, ...} = block - val _ = Vector.foreach (args, bindVar) - val _ = Vector.foreach (statements, loopStatement) - val _ = loopTransfer transfer + val Block.T {label, args, statements, transfer, ...} = block + val _ = (Vector.foreach (args, bindVar) + ; Vector.foreach (statements, loopStatement) + ; loopTransfer transfer) + handle exn => Error.reraiseSuffix (exn, concat [" in ", Label.toString label]) val _ = Vector.foreach (children, loop) val _ = Vector.foreach (statements, fn s => @@ -222,16 +227,20 @@ in () end + handle exn => Error.reraiseSuffix (exn, concat [" in ", Func.toString (Function.name f)]) val _ = Vector.foreach (datatypes, fn Datatype.T {tycon, cons} => (bindTycon (tycon, Vector.length cons) ; Vector.foreach (cons, fn {con, ...} => bindCon con))) + handle exn => Error.reraiseSuffix (exn, concat [" in Datatypes"]) val _ = Vector.foreach (datatypes, fn Datatype.T {cons, ...} => Vector.foreach (cons, fn {args, ...} => Prod.foreach (args, loopType))) + handle exn => Error.reraiseSuffix (exn, concat [" in Datatypes"]) val _ = Vector.foreach (globals, loopStatement) + handle exn => Error.reraiseSuffix (exn, concat [" in Globals"]) val _ = List.foreach (functions, bindFunc o Function.name) val _ = List.foreach (functions, loopFunc) val _ = getFunc main @@ -377,20 +386,12 @@ if !Control.profile <> Control.ProfileNone then checkProf program else () - val out = Out.error - val print = Out.outputc out - exception TypeError - fun error (msg, lay) = - (print (concat ["Type error: ", msg, "\n"]) - ; Layout.output (lay, out) - ; print "\n" - ; raise TypeError) val {get = conInfo: Con.t -> {result: Type.t, ty: Type.t, tycon: Tycon.t}, set = setConInfo, ...} = Property.getSetOnce - (Con.plist, Property.initRaise ("TypeCheck.info", Con.layout)) + (Con.plist, Property.initRaise ("Ssa2.TypeCheck2.conInfo", Con.layout)) val conTycon = #tycon o conInfo val _ = Vector.foreach @@ -406,9 +407,12 @@ fun inject {sum: Tycon.t, variant: Type.t}: Type.t = let val error = fn msg => - error (concat ["inject: ", msg], - Layout.record [("sum", Tycon.layout sum), - ("variant", Type.layout variant)]) + Error.bug (concat ["Ssa2.TypeCheck2.inject (", + msg, " ", + (Layout.toString o Layout.record) + [("sum", Tycon.layout sum), + ("variant", Type.layout variant)], + ")"]) in case Type.dest variant of Type.Object {con, ...} => @@ -416,16 +420,18 @@ ObjectCon.Con c => if Tycon.equals (conTycon c, sum) then Type.datatypee sum - else error "inject into wrong sum" - | _ => error "inject") - | _ => error "inject of no object" + else error "wrong sum" + | _ => error "no object-con") + | _ => error "no object" end fun coerce {from: Type.t, to: Type.t}: unit = if Type.equals (from, to) then () - else error ("SSa2.TypeCheck2.coerce", - Layout.record [("from", Type.layout from), - ("to", Type.layout to)]) + else Error.bug (concat ["SSa2.TypeCheck2.coerce (", + (Layout.toString o Layout.record) + [("from", Type.layout from), + ("to", Type.layout to)], + ")"]) val coerce = Trace.trace ("Ssa2.TypeCheck2.coerce", fn {from, to} => let open Layout @@ -435,7 +441,7 @@ Unit.layout) coerce fun object {args, con, resultType} = let - fun err () = error ("bad object", Layout.empty) + fun err () = Error.bug "Ssa2.TypeCheck2.object (bad object)" in case Type.dest resultType of Type.Object {args = args', con = con'} => @@ -455,21 +461,38 @@ fun base b = case b of Base.Object ty => ty - | Base.VectorSub {index, vector} => - if Type.isVector vector + | Base.SequenceSub {index, sequence} => + if Type.isSequence sequence then let val _ = if Type.equals (index, Type.word (WordSize.seqIndex ())) then () - else error ("vector-sub of non seqIndex", Layout.empty) + else Error.bug "Ssa2.TypeCheck2.base (sequence-sub of non seqIndex)" in - vector + sequence end - else error ("vector-sub of non vector", Layout.empty) + else Error.bug "Ssa2.TypeCheck2.base (sequence-sub of non sequence)" fun select {base: Type.t, offset: int, resultType = _}: Type.t = case Type.dest base of Type.Object {args, ...} => Prod.elt (args, offset) - | _ => error ("select of non object", Layout.empty) + | _ => Error.bug "Ssa2.TypeCheck2.select (non object)" + fun sequence {args, resultType} = + let + fun err () = Error.bug "Ssa2.TypeCheck2.sequence (bad sequence)" + in + case Type.dest resultType of + Type.Object {args = args', con = ObjectCon.Sequence} => + (if (Vector.foreach + (args, fn args => + Vector.foreach2 + (Prod.dest args, Prod.dest args', + fn ({elt = t, isMutable = _}, {elt = t', ...}) => + coerce {from = t, to = t'})) + ; true) + then resultType + else err ()) + | _ => err () + end fun update {base, offset, value} = case Type.dest base of Type.Object {args, ...} => @@ -479,11 +502,11 @@ val () = if isMutable then () - else error ("update of non-mutable field", Layout.empty) + else Error.bug "Ssa2.TypeCheck2.update (non-mutable field)" in () end - | _ => error ("update of non object", Layout.empty) + | _ => Error.bug "Ssa2.TypeCheck2.update (non object)" fun filter {con, test, variant} = let val {result, ty, ...} = conInfo con @@ -495,19 +518,21 @@ fun filterWord (from, s) = coerce {from = from, to = Type.word s} fun primApp {args, prim, resultType, resultVar = _} = let - datatype z = datatype Prim.Name.t val () = if Type.checkPrimApp {args = args, prim = prim, result = resultType} then () - else error ("bad primapp", - let - open Layout - in - seq [Prim.layout prim, str " ", - tuple (Vector.toListMap (args, Type.layout))] - end) + else Error.bug (concat ["Ssa2.TypeCheck2.primApp (", + let + open Layout + in + (toString o seq) + [Prim.layout prim, + str " ", + Vector.layout Type.layout args] + end, + ")"]) in resultType end @@ -524,16 +549,16 @@ primApp = primApp, program = program, select = select, + sequence = sequence, update = update, useFromTypeOnBinds = true} - handle e => error (concat ["analyze raised exception ", - Layout.toString (Exn.layout e)], - Layout.empty) val _ = Program.clear program in () end -val typeCheck = Control.trace (Control.Pass, "typeCheck") typeCheck +val typeCheck = fn p => + (typeCheck p) + handle exn => Error.reraisePrefix (exn, "TypeError (SSA2): ") end diff -Nru mlton-20130715/mlton/ssa/type-check2.sig mlton-20210117+dfsg/mlton/ssa/type-check2.sig --- mlton-20130715/mlton/ssa/type-check2.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/type-check2.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/type-check.fun mlton-20210117+dfsg/mlton/ssa/type-check.fun --- mlton-20130715/mlton/ssa/type-check.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/type-check.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009,2011 Matthew Fluet. +(* Copyright (C) 2009,2011,2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -94,7 +94,7 @@ in () end - fun loopStatement (Statement.T {var, ty, exp, ...}) = + fun loopStatement (s as Statement.T {var, ty, exp, ...}) = let val _ = loopExp exp val _ = loopType ty @@ -102,9 +102,9 @@ in () end + handle exn => Error.reraiseSuffix (exn, concat [" in ", Layout.toString (Statement.layout s)]) val loopTransfer = - fn Arith {args, ty, ...} => (getVars args; loopType ty) - | Bug => () + fn Bug => () | Call {func, args, ...} => (getFunc func; getVars args) | Case {test, cases, default, ...} => let @@ -113,16 +113,15 @@ hash: 'a -> word, numExhaustiveCases: IntInf.t) = let - val table = HashSet.new {hash = hash} + val table = HashTable.new {equals = equals, hash = hash} val _ = Vector.foreach (cases, fn (x, _) => let val _ = - HashSet.insertIfNew - (table, hash x, fn y => equals (x, y), - fn () => x, - fn _ => Error.bug "Ssa.TypeCheck.loopTransfer: redundant branch in case") + HashTable.insertIfNew + (table, x, ignore, fn _ => + Error.bug "Ssa.TypeCheck.loopTransfer: redundant branch in case") in () end) @@ -158,6 +157,10 @@ | Raise xs => getVars xs | Return xs => getVars xs | Runtime {args, ...} => getVars args + val loopTransfer = + fn t => + (loopTransfer t) + handle exn => Error.reraiseSuffix (exn, concat [" in ", Layout.toString (Transfer.layout t)]) fun loopFunc (f: Function.t) = let val {args, blocks, raises, returns, start, ...} = Function.dest f @@ -166,10 +169,11 @@ *) fun loop (Tree.T (block, children)): unit = let - val Block.T {args, statements, transfer, ...} = block - val _ = Vector.foreach (args, bindVar) - val _ = Vector.foreach (statements, loopStatement) - val _ = loopTransfer transfer + val Block.T {label, args, statements, transfer, ...} = block + val _ = (Vector.foreach (args, bindVar) + ; Vector.foreach (statements, loopStatement) + ; loopTransfer transfer) + handle exn => Error.reraiseSuffix (exn, concat [" in ", Label.toString label]) val _ = Vector.foreach (children, loop) val _ = Vector.foreach (statements, fn s => @@ -198,16 +202,20 @@ in () end + handle exn => Error.reraiseSuffix (exn, concat [" in ", Func.toString (Function.name f)]) val _ = Vector.foreach (datatypes, fn Datatype.T {tycon, cons} => (bindTycon (tycon, Vector.length cons) ; Vector.foreach (cons, fn {con, ...} => bindCon con))) + handle exn => Error.reraiseSuffix (exn, concat [" in Datatypes"]) val _ = Vector.foreach (datatypes, fn Datatype.T {cons, ...} => Vector.foreach (cons, fn {args, ...} => Vector.foreach (args, loopType))) + handle exn => Error.reraiseSuffix (exn, concat [" in Datatypes"]) val _ = Vector.foreach (globals, loopStatement) + handle exn => Error.reraiseSuffix (exn, concat [" in Globals"]) val _ = List.foreach (functions, bindFunc o Function.name) val _ = getFunc main val _ = List.foreach (functions, loopFunc) @@ -354,20 +362,14 @@ if !Control.profile <> Control.ProfileNone then checkProf program else () - val out = Out.error - val print = Out.outputc out - exception TypeError - fun error (msg, lay) = - (print (concat ["Type error: ", msg, "\n"]) - ; Layout.output (lay, out) - ; print "\n" - ; raise TypeError) fun coerce {from: Type.t, to: Type.t}: unit = if Type.equals (from, to) then () - else error ("Ssa.TypeCheck.coerce", - Layout.record [("from", Type.layout from), - ("to", Type.layout to)]) + else Error.bug (concat ["Ssa.TypeCheck.coerce (", + (Layout.toString o Layout.record) + [("from", Type.layout from), + ("to", Type.layout to)], + ")"]) fun coerces (from, to) = Vector.foreach2 (from, to, fn (from, to) => coerce {from = from, to = to}) @@ -380,13 +382,13 @@ Unit.layout) coerce fun select {tuple: Type.t, offset: int, resultType = _}: Type.t = case Type.deTupleOpt tuple of - NONE => error ("select of non tuple", Layout.empty) + NONE => Error.bug ("Ssa.TypeCheck.select (non tuple)") | SOME ts => Vector.sub (ts, offset) val {get = conInfo: Con.t -> {args: Type.t vector, result: Type.t}, set = setConInfo, ...} = Property.getSetOnce - (Con.plist, Property.initRaise ("TypeCheck.info", Con.layout)) + (Con.plist, Property.initRaise ("Ssa.TypeCheck.conInfo", Con.layout)) val _ = Vector.foreach (datatypes, fn Datatype.T {tycon, cons} => @@ -412,20 +414,25 @@ end fun primApp {args, prim, resultType, resultVar = _, targs} = let - datatype z = datatype Prim.Name.t val () = if Type.checkPrimApp {args = args, prim = prim, result = resultType, targs = targs} then () - else error ("bad primapp", - let - open Layout - in - seq [Prim.layout prim, - tuple (Vector.toListMap (args, Type.layout))] - end) + else Error.bug (concat ["Ssa.TypeCheck.primApp (", + let + open Layout + in + (toString o seq) + [Prim.layout prim, + if Vector.isEmpty targs + then empty + else Vector.layout Type.layout targs, + str " ", + Vector.layout Type.layout args] + end, + ")"]) in resultType end @@ -445,14 +452,13 @@ tuple = Type.tuple, useFromTypeOnBinds = true } - handle e => error (concat ["analyze raised exception ", - Layout.toString (Exn.layout e)], - Layout.empty) val _ = Program.clear program in () end -val typeCheck = Control.trace (Control.Pass, "typeCheck") typeCheck +val typeCheck = fn p => + (typeCheck p) + handle exn => Error.reraisePrefix (exn, "TypeError (SSA): ") end diff -Nru mlton-20130715/mlton/ssa/type-check.sig mlton-20210117+dfsg/mlton/ssa/type-check.sig --- mlton-20130715/mlton/ssa/type-check.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/type-check.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/ssa/useless.fun mlton-20210117+dfsg/mlton/ssa/useless.fun --- mlton-20130715/mlton/ssa/useless.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/useless.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,8 +12,6 @@ open S (* useless thing elimination - * remove components of tuples that are constants (use unification) - * remove function arguments that are constants * build some kind of dependence graph where * - a value of ground type is useful if it is an arg to a primitive * - a tuple is useful if it contains a useful component @@ -33,38 +31,69 @@ * any primapp args must be as well. *) -(* Weirdness with raise/handle. - * There must be a uniform "calling convention" for raise and handle. - * Hence, just because some of a handlers args are useless, that doesn't mean - * that it can drop them, since they may be useful to another handler, and - * hence every raise will pass them along. The problem is that it is not - * possible to tell solely from looking at a function declaration whether it is - * a handler or not, and in fact, there is nothing preventing a jump being used - * in both ways. So, maybe the right thing is for the handler wrapper to - * do - * Another solution would be to unify all handler args. - *) - structure Value = struct structure Set = DisjointSet - structure Exists = + structure Exists : + sig + type t + val <= : t * t -> unit + val == : t * t -> unit + val doesExist: t -> bool + val layout: t -> Layout.t + val mustExist: t -> unit + val new: unit -> t + val whenExists: t * (unit -> unit) -> unit + end = struct structure L = TwoPointLattice (val bottom = "not exists" val top = "exists") open L val mustExist = makeTop val doesExist = isTop + val whenExists = addHandler end - structure Useful = + structure Useful : + sig + type t + val <= : t * t -> unit + val == : t * t -> unit + val isUseful: t -> bool + val layout: t -> Layout.t + val makeUseful: t -> unit + val makeWanted: t -> unit + val new: unit -> t + val whenUseful: t * (unit -> unit) -> unit + end = struct - structure L = TwoPointLattice (val bottom = "useless" + structure U = TwoPointLattice (val bottom = "useless" val top = "useful") - open L - val makeUseful = makeTop - val isUseful = isTop + structure W = TwoPointLattice (val bottom = "unwanted" + val top = "wanted") + + datatype t = T of U.t * W.t + + fun layout (T (u, w)) = + let open Layout + in seq [U.layout u, str "/", W.layout w] + end + + fun new () = + T (U.new (), W.new ()) + fun == (T (u, w), T (u', w')) = + (U.== (u, u'); W.== (w, w')) + fun (T (uf, wf)) <= (T (ut, wt)) = + (U.<= (uf, ut); + W.<= (wf, wt); + W.addHandler (wf, fn () => U.== (uf, ut))) + + fun makeUseful (T (u, _)) = U.makeTop u + fun isUseful (T (u, _)) = U.isTop u + fun whenUseful (T (u, _), h) = U.addHandler (u, h) + + fun makeWanted (T (_, w)) = W.makeTop w end datatype t = @@ -75,14 +104,14 @@ Array of {elt: slot, length: t, useful: Useful.t} - | Ground of Useful.t - | Ref of {arg: slot, + | Ground of Useful.t + | Ref of {arg: slot, + useful: Useful.t} + | Tuple of slot vector + | Vector of {elt: slot, + length: t} + | Weak of {arg: slot, useful: Useful.t} - | Tuple of slot vector - | Vector of {elt: slot, - length: t} - | Weak of {arg: slot, - useful: Useful.t} withtype slot = t * Exists.t local @@ -129,9 +158,9 @@ val _ = Set.union (s, s') in case (v, v') of - (Array {length = n, elt = e, ...}, - Array {length = n', elt = e', ...}) => - (unify (n, n'); unifySlot (e, e')) + (Array {useful = u, length = n, elt = e}, + Array {useful = u', length = n', elt = e'}) => + (Useful.== (u, u'); unify (n, n'); unifySlot (e, e')) | (Ground g, Ground g') => Useful.== (g, g') | (Ref {useful = u, arg = a}, Ref {useful = u', arg = a'}) => @@ -147,6 +176,12 @@ end and unifySlot ((v, e), (v', e')) = (unify (v, v'); Exists.== (e, e')) + val unify = + Trace.trace ("Useless.Value.unify", + Layout.tuple2 (layout, layout), + Unit.layout) + unify + fun coerce {from = from as T sfrom, to = to as T sto}: unit = if Set.equals (sfrom, sto) then () @@ -233,7 +268,7 @@ let fun useful () = let val u = Useful.new () - in Useful.addHandler + in Useful.whenUseful (u, fn () => List.foreach (es, Exists.mustExist)) ; u end @@ -247,7 +282,7 @@ Type.Array t => let val elt as (_, e) = slot t val length = loop (Type.word (WordSize.seqIndex ())) - in Exists.addHandler + in Exists.whenExists (e, fn () => Useful.makeUseful (deground length)) ; Array {useful = useful (), length = length, @@ -322,17 +357,25 @@ in val dearray: t -> t = make ("Useless.dearray", #1 o #elt) val arrayLength = make ("Useless.arrayLength", #length) + val arrayUseful = make ("Useless.arrayUseful", #useful) + end + local + fun make (err, sel) v = + case value v of + Ref fs => sel fs + | _ => Error.bug err + in + val deref: t -> t = make ("Useless.deref", #1 o #arg) + end + local + fun make (err, sel) v = + case value v of + Weak fs => sel fs + | _ => Error.bug err + in + val deweak: t -> t = make ("Useless.deweak", #1 o #arg) + val weakUseful = make ("Useless.weakUseful", #useful) end - - fun deref (r: t): t = - case value r of - Ref {arg, ...} => #1 arg - | _ => Error.bug "Useless.deref" - - fun deweak (v: t): t = - case value v of - Weak {arg, ...} => #1 arg - | _ => Error.bug "Useless.deweak" fun newType (v: t): Type.t = #1 (getNew v) and isUseful (v: t): bool = #2 (getNew v) @@ -405,16 +448,16 @@ val program as Program.T {datatypes, globals, functions, main} = eliminateDeadBlocks program val {get = conInfo: Con.t -> {args: Value.t vector, - argTypes: Type.t vector, value: unit -> Value.t}, set = setConInfo, ...} = Property.getSetOnce - (Con.plist, Property.initRaise ("conInfo", Con.layout)) - val {get = tyconInfo: Tycon.t -> {useful: bool ref, - cons: Con.t vector}, + (Con.plist, Property.initRaise ("Useless.conInfo", Con.layout)) + val {get = tyconInfo: Tycon.t -> {cons: Con.t vector, + visitedDeepMakeUseful: bool ref, + visitedShallowMakeUseful: bool ref}, set = setTyconInfo, ...} = Property.getSetOnce - (Tycon.plist, Property.initRaise ("tyconInfo", Tycon.layout)) + (Tycon.plist, Property.initRaise ("Useless.tyconInfo", Tycon.layout)) local open Value in val _ = @@ -422,13 +465,13 @@ (datatypes, fn Datatype.T {tycon, cons} => let val _ = - setTyconInfo (tycon, {useful = ref false, - cons = Vector.map (cons, #con)}) + setTyconInfo (tycon, {cons = Vector.map (cons, #con), + visitedDeepMakeUseful = ref false, + visitedShallowMakeUseful = ref false}) fun value () = fromType (Type.datatypee tycon) in Vector.foreach (cons, fn {con, args} => setConInfo (con, {value = value, - argTypes = args, args = Vector.map (args, fromType)})) end) val conArgs = #args o conInfo @@ -444,10 +487,6 @@ (Useful.makeUseful g ; coerces {from = conArgs con, to = to}) | _ => Error.bug "Useless.filter: non ground" - fun filterGround (v: Value.t): unit = - case value v of - Ground g => Useful.makeUseful g - | _ => Error.bug "Useless.filterGround: non ground" val filter = Trace.trace3 ("Useless.filter", Value.layout, @@ -455,38 +494,116 @@ Vector.layout Value.layout, Unit.layout) filter - (* This is used for primitive args, since we have no idea what - * components of its args that a primitive will look at. + fun filterGround (v: Value.t): unit = + case value v of + Ground g => Useful.makeUseful g + | _ => Error.bug "Useless.filterGround: non ground" + + (* This is for primitive args, which may inspect any component. *) - fun deepMakeUseful v = + fun mkDeepMakeUseful deepMakeUseful v = let val slot = deepMakeUseful o #1 in case value v of - Array {useful, length, elt} => - (Useful.makeUseful useful - ; deepMakeUseful length - ; slot elt) + Array {useful = u, length = n, elt = e} => + (Useful.makeUseful u + ; deepMakeUseful n + ; slot e) | Ground u => (Useful.makeUseful u (* Make all constructor args of this tycon useful *) ; (case Type.dest (ty v) of Type.Datatype tycon => - let val {useful, cons} = tyconInfo tycon - in if !useful + let + val {cons, visitedDeepMakeUseful, visitedShallowMakeUseful} = + tyconInfo tycon + in + if !visitedDeepMakeUseful then () - else (useful := true - ; Vector.foreach (cons, fn con => - Vector.foreach - (#args (conInfo con), - deepMakeUseful))) + else (visitedDeepMakeUseful := true + ; visitedShallowMakeUseful := true + ; Vector.foreach + (cons, fn con => + Vector.foreach + (#args (conInfo con), + deepMakeUseful))) end | _ => ())) - | Ref {arg, useful} => (Useful.makeUseful useful; slot arg) + | Ref {useful = u, arg = a} => (Useful.makeUseful u; slot a) | Tuple vs => Vector.foreach (vs, slot) - | Vector {length, elt} => (deepMakeUseful length; slot elt) - | Weak {arg, useful} => (Useful.makeUseful useful; slot arg) + | Vector {length = n, elt = e} => (deepMakeUseful n; slot e) + | Weak {useful = u, arg = a} => (Useful.makeUseful u; slot a) end + val deepMakeUseful = + Trace.traceRec + ("Useless.deepMakeUseful", + Value.layout, + Unit.layout) + mkDeepMakeUseful + + (* This is used for MLton_equal and MLton_hash, which will not inspect + * contents of Array, Ref, or Weak. + *) + fun mkShallowMakeUseful shallowMakeUseful v = + let + val slot = shallowMakeUseful o #1 + in + case value v of + Array {useful = u, ...} => Useful.makeUseful u + | Ground u => + (Useful.makeUseful u + (* Make all constructor args of this tycon useful *) + ; (case Type.dest (ty v) of + Type.Datatype tycon => + let + val {cons, visitedShallowMakeUseful, ...} = + tyconInfo tycon + in + if !visitedShallowMakeUseful + then () + else (visitedShallowMakeUseful := true + ; Vector.foreach + (cons, fn con => + Vector.foreach + (#args (conInfo con), + shallowMakeUseful))) + end + | _ => ())) + | Ref {useful = u, ...} => Useful.makeUseful u + | Tuple vs => Vector.foreach (vs, slot) + | Vector {length = n, elt = e} => (shallowMakeUseful n; slot e) + | Weak {useful = u, ...} => Useful.makeUseful u + end + val shallowMakeUseful = + Trace.traceRec + ("Useless.shallowMakeUseful", + Value.layout, + Unit.layout) + mkShallowMakeUseful + + (* This is used for MLton_eq, MLton_share, and MLton_size, + * which should only make use of the components that + * are used elsewhere in the computation. + *) + fun mkMakeWanted makeWanted v = + let + val slot = makeWanted o #1 + in + case value v of + Array {useful = u, ...} => Useful.makeWanted u + | Ground u => Useful.makeWanted u + | Ref {useful = u, ...} => Useful.makeWanted u + | Tuple vs => Vector.foreach (vs, slot) + | Vector {length = n, elt = e} => (makeWanted n; slot e) + | Weak {useful = u, ...} => Useful.makeWanted u + end + val makeWanted = + Trace.traceRec + ("Useless.makeWanted", + Value.layout, + Unit.layout) + mkMakeWanted fun primApp {args: t vector, prim, resultVar = _, resultType, targs = _} = @@ -505,48 +622,131 @@ in arg 1 dependsOn a ; coerce {from = arg 2, to = a} end - datatype z = datatype Prim.Name.t val _ = - case Prim.name prim of - Array_array => + case prim of + Prim.Array_alloc _ => coerce {from = arg 0, to = arrayLength result} - | Array_array0Const => () - | Array_length => return (arrayLength (arg 0)) - | Array_sub => sub () - | Array_toVector => + | Prim.Array_array => + let + val l = + (const o S.Const.word o WordX.fromInt) + (Vector.length args, + WordSize.seqIndex ()) + in + (coerce {from = l, to = arrayLength result} + ; Vector.foreach + (args, fn arg => + coerce {from = arg, to = dearray result})) + end + | Prim.Array_copyArray => + let + val a = dearray (arg 0) + in + arg 1 dependsOn a + ; arg 3 dependsOn a + ; arg 4 dependsOn a + ; case (value (arg 0), value (arg 2)) of + (Array {elt = e, ...}, Array {elt = e', ...}) => + unifySlot (e, e') + | _ => Error.bug "Useless.primApp: Array_copyArray" + end + | Prim.Array_copyVector => + let + val a = dearray (arg 0) + in + arg 1 dependsOn a + ; arg 3 dependsOn a + ; arg 4 dependsOn a + ; case (value (arg 0), value (arg 2)) of + (Array {elt = e, ...}, Vector {elt = e', ...}) => + unifySlot (e, e') + | _ => Error.bug "Useless.primApp: Array_copyVector" + end + | Prim.Array_length => return (arrayLength (arg 0)) + | Prim.Array_sub => sub () + | Prim.Array_toArray => + (case (value (arg 0), value result) of + (Array {length = l, elt = e, ...}, + Array {length = l', elt = e', ...}) => + (unify (l, l'); unifySlot (e, e')) + | _ => Error.bug "Useless.primApp: Array_toArray") + | Prim.Array_toVector => (case (value (arg 0), value result) of (Array {length = l, elt = e, ...}, Vector {length = l', elt = e', ...}) => (unify (l, l'); unifySlot (e, e')) | _ => Error.bug "Useless.primApp: Array_toVector") - | Array_update => update () - | FFI _ => + | Prim.Array_uninit => + let + val a = dearray (arg 0) + in + arg 1 dependsOn a + end + | Prim.Array_uninitIsNop => + Useful.whenUseful + (deground result, fn () => + Useful.makeUseful (arrayUseful (arg 0))) + | Prim.Array_update => update () + | Prim.CFunction _ => (Vector.foreach (args, deepMakeUseful); deepMakeUseful result) - | MLton_equal => Vector.foreach (args, deepMakeUseful) - | MLton_hash => Vector.foreach (args, deepMakeUseful) - | Ref_assign => coerce {from = arg 1, to = deref (arg 0)} - | Ref_deref => return (deref (arg 0)) - | Ref_ref => coerce {from = arg 0, to = deref result} - | Vector_length => return (vectorLength (arg 0)) - | Vector_sub => (arg 1 dependsOn result - ; return (devector (arg 0))) - | Weak_get => return (deweak (arg 0)) - | Weak_new => coerce {from = arg 0, to = deweak result} - | Word8Array_subWord _ => sub () - | Word8Array_updateWord _ => update () + | Prim.MLton_eq => + Useful.whenUseful + (deground result, fn () => + (unify (arg 0, arg 1) + ; makeWanted (arg 1))) + | Prim.MLton_equal => + Useful.whenUseful + (deground result, fn () => + (shallowMakeUseful (arg 0) + ; shallowMakeUseful (arg 1))) + | Prim.MLton_hash => + Useful.whenUseful + (deground result, fn () => + shallowMakeUseful (arg 0)) + | Prim.MLton_share => makeWanted (arg 0) + | Prim.MLton_size => + Useful.whenUseful + (deground result, fn () => + makeWanted (arg 0)) + | Prim.MLton_touch => shallowMakeUseful (arg 0) + | Prim.Ref_assign => coerce {from = arg 1, to = deref (arg 0)} + | Prim.Ref_deref => return (deref (arg 0)) + | Prim.Ref_ref => coerce {from = arg 0, to = deref result} + | Prim.Vector_length => return (vectorLength (arg 0)) + | Prim.Vector_sub => (arg 1 dependsOn result + ; return (devector (arg 0))) + | Prim.Vector_vector => + let + val l = + (const o S.Const.word o WordX.fromInt) + (Vector.length args, WordSize.seqIndex ()) + in + (coerce {from = l, to = vectorLength result} + ; Vector.foreach + (args, fn arg => + coerce {from = arg, to = devector result})) + end + | Prim.Weak_canGet => + Useful.whenUseful + (deground result, fn () => + Useful.makeUseful (weakUseful (arg 0))) + | Prim.Weak_get => return (deweak (arg 0)) + | Prim.Weak_new => coerce {from = arg 0, to = deweak result} + | Prim.WordArray_subWord _ => sub () + | Prim.WordArray_updateWord _ => update () | _ => - let (* allOrNothing so the type doesn't change *) + let + (* allOrNothing so the type doesn't change *) val res = allOrNothing result - in if Prim.maySideEffect prim + in + if Prim.maySideEffect prim then Vector.foreach (args, deepMakeUseful) - else - Vector.foreach (args, fn a => - case (allOrNothing a, res) of - (NONE, _) => () - | (SOME u, SOME u') => - Useful.<= (u', u) - | _ => ()) + else Vector.foreach (args, fn a => + case (allOrNothing a, res) of + (SOME u, SOME u') => + Useful.<= (u', u) + | _ => ()) end in result @@ -576,46 +776,6 @@ useFromTypeOnBinds = true } open Exp Transfer - (* Unify all handler args so that raise/handle has a consistent calling - * convention. - *) - val _ = - List.foreach - (functions, fn f => - let - val {raises = fraisevs, ...} = func (Function.name f) - fun coerce (x, y) = Value.coerce {from = x, to = y} - in - Vector.foreach - (Function.blocks f, fn Block.T {transfer, ...} => - case transfer of - Call {func = g, return, ...} => - let - val {raises = graisevs, ...} = func g - fun coerceRaise () = - case (graisevs, fraisevs) of - (NONE, NONE) => () - | (NONE, SOME _) => () - | (SOME _, NONE) => - Error.bug "Useless.useless: raise mismatch at Caller" - | (SOME vs, SOME vs') => - Vector.foreach2 (vs', vs, coerce) - in - case return of - Return.Dead => () - | Return.NonTail {handler, ...} => - (case handler of - Handler.Caller => coerceRaise () - | Handler.Dead => () - | Handler.Handle h => - Option.app - (graisevs, fn graisevs => - Vector.foreach2 - (label h, graisevs, coerce))) - | Return.Tail => coerceRaise () - end - | _ => ()) - end) val _ = Control.diagnostics (fn display => @@ -633,6 +793,13 @@ Vector.layout Value.layout (conArgs con)]) cons, 2)])) + fun diagVar x = + display (seq [Var.layout x, + str " ", Value.layout (value x)]) + val _ = + Vector.foreach + (globals, fn Statement.T {var, ...} => + Option.app (var, diagVar)) val _ = List.foreach (functions, fn f => @@ -652,9 +819,7 @@ raises)]) val _ = Function.foreachVar - (f, fn (x, _) => - display (seq [Var.layout x, - str " ", Value.layout (value x)])) + (f, fn (x, _) => diagVar x) in () end) @@ -674,7 +839,7 @@ Statement.T {var = SOME var, ty = ty, - exp = PrimApp {prim = Prim.bogus, + exp = PrimApp {prim = Prim.MLton_bogus, targs = Vector.new1 ty, args = Vector.new0 ()}}) ; var @@ -747,26 +912,67 @@ | Const _ => e | PrimApp {prim, args, ...} => let - val (args, argTypes) = - Vector.unzip - (Vector.map (args, fn x => - let val (t, b) = Value.getNew (value x) - in if b then (x, t) - else (unitVar, Type.unit) - end)) + fun arg i = Vector.sub (args, i) + fun doit () = + let + val (args, argTypes) = + Vector.unzip + (Vector.map (args, fn x => + let + val (t, b) = Value.getNew (value x) + in + if b + then (x, t) + else (unitVar, Type.unit) + end)) + in + PrimApp + {prim = prim, + args = args, + targs = (Prim.extractTargs + (prim, + {args = argTypes, + result = resultType, + typeOps = {deArray = Type.deArray, + deArrow = fn _ => Error.bug "Useless.doitExp: deArrow", + deRef = Type.deRef, + deVector = Type.deVector, + deWeak = Type.deWeak}}))} + end + fun makePtr dePtr = + if Type.isUnit (dePtr resultType) + then PrimApp {prim = prim, + targs = Vector.new1 Type.unit, + args = Vector.new1 unitVar} + else doit () in - PrimApp - {prim = prim, - args = args, - targs = (Prim.extractTargs - (prim, - {args = argTypes, - result = resultType, - typeOps = {deArray = Type.deArray, - deArrow = fn _ => Error.bug "Useless.doitExp: deArrow", - deRef = Type.deRef, - deVector = Type.deVector, - deWeak = Type.deWeak}}))} + case prim of + Prim.Array_uninitIsNop => + if varExists (Vector.sub (args, 0)) + then doit () + else ConApp {args = Vector.new0 (), + con = Con.truee} + | Prim.MLton_equal => + let + val (t0, _) = Value.getNew (value (arg 0)) + val (t1, _) = Value.getNew (value (arg 1)) + in + if Type.equals (t0, t1) + then PrimApp {prim = prim, + targs = Vector.new1 t0, + args = args} + else (* The arguments differ in the usefulness of + * contents of an Array, Ref, or Weak and + * the corresponding Array, Ref, or Weak + * objects must be distinct and, therefore, + * not equal. + *) + ConApp {args = Vector.new0 (), + con = Con.falsee} + end + | Prim.Ref_ref => makePtr Type.deRef + | Prim.Weak_new => makePtr Type.deWeak + | _ => doit () end | Select {tuple, offset} => let @@ -791,7 +997,7 @@ else NONE) in if 1 = Vector.length xs - then Var (Vector.sub (xs, 0)) + then Var (Vector.first xs) else Tuple xs end | Var _ => e @@ -825,14 +1031,17 @@ fun array () = Value.isUseful (Value.dearray (value (arg 0))) - datatype z = datatype Prim.Name.t - in case Prim.name prim of - Array_update => array () - | Ref_assign => - Value.isUseful - (Value.deref (value (arg 0))) - | Word8Array_updateWord _ => array () - | _ => true + in + case prim of + Prim.Array_copyArray => array () + | Prim.Array_copyVector => array () + | Prim.Array_uninit => array () + | Prim.Array_update => array () + | Prim.Ref_assign => + Value.isUseful + (Value.deref (value (arg 0))) + | Prim.WordArray_updateWord _ => array () + | _ => true end then yes ty else NONE @@ -857,70 +1066,94 @@ raises: Value.t vector option) : Block.t list * Transfer.t = case t of - Arith {prim, args, overflow, success, ty} => - let - val v = Value.fromType ty - val _ = Value.Useful.makeUseful (Value.deground v) - val res = Vector.new1 v - val sargs = label success - in - if agree (v, Vector.sub (sargs, 0)) - then ([], t) - else let - val (l, b) = dropUseless - (res, sargs, fn args => - Goto {dst = success, args = args}) - in - ([b], - Arith {prim = prim, - args = args, - overflow = overflow, - success = l, - ty = ty}) - end - end - | Bug => ([], Bug) + Bug => ([], Bug) | Call {func = f, args, return} => let - val {args = fargs, returns = freturns, ...} = func f + val {args = fargs, returns = freturns, raises = fraises} = func f + fun bug () = + let + val l = Label.newNoname () + in + (l, + Block.T {label = l, + args = Vector.new0 (), + statements = Vector.new0 (), + transfer = Bug}) + end + fun wrap (froms, tos, mkTrans) = + case (froms, tos) of + (NONE, NONE) => (true, bug) + | (NONE, SOME _) => (true, bug) + | (SOME _, NONE) => Error.bug "Useless.doitTransfer: Call mismatch" + | (SOME froms, SOME tos) => + (agrees (froms, tos), fn () => + dropUseless (froms, tos, mkTrans)) val (blocks, return) = case return of Return.Dead => ([], return) | Return.Tail => - (case (returns, freturns) of - (NONE, NONE) => ([], Return.Tail) - | (NONE, SOME _) => Error.bug "Useless.doitTransfer: return mismatch" - | (SOME _, NONE) => ([], Return.Tail) - | (SOME returns, SOME freturns) => - if agrees (freturns, returns) - then ([], Return.Tail) - else - let - val (l, b) = - dropUseless - (freturns, returns, Return) - in ([b], - Return.NonTail - {cont = l, - handler = Handler.Caller}) - end) - | Return.NonTail {cont, handler} => - (case freturns of - NONE => ([], return) - | SOME freturns => - let val returns = label cont - in if agrees (freturns, returns) - then ([], return) - else let - val (l, b) = - dropUseless - (freturns, returns, fn args => - Goto {dst = cont, args = args}) - in ([b], - Return.NonTail - {cont = l, handler = handler}) - end + (case (wrap (freturns, returns, Return), wrap (fraises, raises, Raise)) of + ((true, _), (true, _)) => + ([], Return.Tail) + | ((false, mkc), (true, _)) => + let + val (lc, bc) = mkc () + in + ([bc], + Return.NonTail {cont = lc, handler = Handler.Caller}) + end + | ((_, mkc), (false, mkh)) => + let + val (lc, bc) = mkc () + val (lh, bh) = mkh () + in + ([bc, bh], + Return.NonTail {cont = lc, + handler = Handler.Handle lh}) end) + | Return.NonTail {cont, handler} => + let + val returns = SOME (label cont) + val mkct = fn args => Goto {dst = cont, args = args} + val (raises, mkht) = + case handler of + Handler.Dead => (NONE, fn _ => Bug) + | Handler.Caller => (raises, Raise) + | Handler.Handle hand => + (SOME (label hand), + fn args => Goto {dst = hand, args = args}) + in + case (wrap (freturns, returns, mkct), wrap (fraises, raises, mkht)) of + ((true, _), (true, _)) => + ([], + Return.NonTail {cont = cont, + handler = handler}) + | ((false, mkc), (true, _)) => + let + val (lc, bc) = mkc () + in + ([bc], + Return.NonTail {cont = lc, + handler = handler}) + end + | ((true, _), (false, mkh)) => + let + val (lh, bh) = mkh () + in + ([bh], + Return.NonTail {cont = cont, + handler = Handler.Handle lh}) + end + | ((false, mkc), (false, mkh)) => + let + val (lc, bc) = mkc () + val (lh, bh) = mkh () + in + ([bc, bh], + Return.NonTail {cont = lc, + handler = Handler.Handle lh}) + end + end in (blocks, Call {func = f, args = keepUseful (args, fargs), diff -Nru mlton-20130715/mlton/ssa/zone.fun mlton-20210117+dfsg/mlton/ssa/zone.fun --- mlton-20130715/mlton/ssa/zone.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/ssa/zone.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2004-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -194,7 +194,7 @@ val {componentsRev, tuple, ...} = info' val components = Vector.fromListRev (!componentsRev) in - if 0 = Vector.length components + if Vector.isEmpty components then statements else let diff -Nru mlton-20130715/mlton/xml/call-count.fun mlton-20210117+dfsg/mlton/xml/call-count.fun --- mlton-20130715/mlton/xml/call-count.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/call-count.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/call-count.sig mlton-20210117+dfsg/mlton/xml/call-count.sig --- mlton-20130715/mlton/xml/call-count.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/call-count.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/cps-transform.fun mlton-20210117+dfsg/mlton/xml/cps-transform.fun --- mlton-20130715/mlton/xml/cps-transform.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/cps-transform.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2007-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 2007-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -14,7 +15,7 @@ fun transform (prog: Program.t): Program.t = let - val Program.T {datatypes, body, overflow} = prog + val Program.T {datatypes, body} = prog (* Answer type is always unit in an XML IL program. *) val ansTy = Type.unit @@ -62,32 +63,6 @@ Property.getSetOnce (Var.plist, Property.initRaise ("getVarOrigType", Var.layout)) val getVarExpOrigType = getVarOrigType o VarExp.var - - (* A mayOverflow primitive needs a special translation with a wrapper - * datatype. See transPrimExp:PrimApp. - *) - val wrapDatatypes = ref [] - val {get = getWrap, destroy = destroyWrap, ...} = - Property.destGet - (Type.plist, Property.initFun (fn ty => - let - val successCon = Con.newString "Success" - val failureCon = Con.newString "Failure" - val wrapTycon = Tycon.newString "Wrap" - val wrapTy = Type.con (wrapTycon, Vector.new0 ()) - val wrapDatatype = - {cons = Vector.new2 - ({arg = SOME ty, con = successCon}, - {arg = SOME exnTy, con = failureCon}), - tycon = wrapTycon, - tyvars = Vector.new0 ()} - val () = List.push (wrapDatatypes, wrapDatatype) - in - {successCon = successCon, - failureCon = failureCon, - wrapTy = wrapTy} - end)) - fun transVarExpWithType (x: VarExp.t) : DirectExp.t * Type.t = let val xTy = transType (getVarExpOrigType x) @@ -303,8 +278,8 @@ end val default = Option.map - (default, fn (e, r) => - (transExp (e, kVar, kTy, hVar, hTy), r)) + (default, fn e => + transExp (e, kVar, kTy, hVar, hTy)) in DirectExp.casee {cases = cases, @@ -340,109 +315,12 @@ in return (DirectExp.fromLambda (l, eTy)) end - | PrimApp {args, prim, targs} => - let - val primAppExp = - DirectExp.primApp - {args = Vector.map (args, transVarExp), - prim = prim, - targs = Vector.map (targs, transType), - ty = eTy} - in - if Prim.mayOverflow prim - then let - (* A mayOverflow primitive has an - * implicit raise, which is introduced - * explicitly by closure-convert - * (transformation from SXML to SSA). - * - * We leave an explicit Handle around - * the primitive to catch the - * exception. The non-exceptional - * result goes to the (normal) - * continuation, while the exception - * goes to the exception continuation. - * - * Naively, we would do: - * (k (primApp)) handle x => h x - * But, this evaluates the (normal) - * continuation in the context of the - * handler. - * - * Rather, we do: - * case ((Success (primApp)) - * handle x => Failure x) of - * Success x => k x - * Failure x => h x - * This evaluates the (normal) - * continuation outside the context of - * the handler. - * - * See /lib/mlton/basic/exn0.sml - * and "Exceptional Syntax" by Benton - * and Kennedy. - * - *) - - val {successCon, failureCon, wrapTy} = - getWrap eTy - - val testExp = - let - val xVar = Var.newNoname () - val x = DirectExp.monoVar (xVar, exnTy) - in - DirectExp.handlee - {try = DirectExp.conApp - {arg = SOME primAppExp, - con = successCon, - targs = Vector.new0 (), - ty = wrapTy}, - catch = (xVar, exnTy), - handler = DirectExp.conApp - {arg = SOME x, - con = failureCon, - targs = Vector.new0 (), - ty = wrapTy}, - ty = wrapTy} - end - - val successCase = - let - val xVar = Var.newNoname () - in - (Pat.T {arg = SOME (xVar, eTy), - con = successCon, - targs = Vector.new0 ()}, - DirectExp.app - {func = k, - arg = DirectExp.monoVar (xVar, eTy), - ty = ansTy}) - end - val failureCase = - let - val xVar = Var.newNoname () - in - (Pat.T - {arg = SOME (xVar, exnTy), - con = failureCon, - targs = Vector.new0 ()}, - DirectExp.app - {func = h, - arg = DirectExp.monoVar (xVar, exnTy), - ty = ansTy}) - end - val cases = - Cases.Con (Vector.new2 (successCase, failureCase)) - in - DirectExp.casee - {test = testExp, - cases = cases, - default = NONE, - ty = ansTy} - end - else return primAppExp - end + | PrimApp {args, prim, targs} => + DirectExp.primApp + {args = Vector.map (args, transVarExp), + prim = prim, + targs = Vector.map (targs, transType), + ty = eTy} | Profile _ => let (* Profile statements won't properly nest after @@ -575,18 +453,12 @@ ty = ansTy} val body = DirectExp.toExp body - (* Fetch accumulated wrap datatypes. *) - val wrapDatatypes = Vector.fromList (!wrapDatatypes) - val datatypes = Vector.concat [datatypes, wrapDatatypes] - - val prog = Program.T {datatypes = datatypes, - body = body, - overflow = overflow} + val prog = Program.T {datatypes = datatypes, + body = body} (* Clear and destroy properties. *) val () = Exp.clear body val () = destroyTransType () - val () = destroyWrap () in prog end diff -Nru mlton-20130715/mlton/xml/implement-exceptions.fun mlton-20210117+dfsg/mlton/xml/implement-exceptions.fun --- mlton-20130715/mlton/xml/implement-exceptions.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/implement-exceptions.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -30,11 +31,11 @@ (body, fn (_, _, e) => case e of PrimApp {prim, targs, ...} => - (case Prim.name prim of - Prim.Name.Exn_extra => - escape (Vector.sub (targs, 0)) - | Prim.Name.Exn_setExtendExtra => - escape (Vector.sub (targs, 0)) + (case prim of + Prim.Exn_extra => + escape (Vector.first targs) + | Prim.Exn_setExtendExtra => + escape (Vector.first targs) | _ => ()) | _ => ()) in @@ -201,7 +202,6 @@ NONE => false | SOME _ => true val exnValCons: {con: Con.t, arg: Type.t} list ref = ref [] - val overflow = ref NONE val traceLoopDec = Trace.trace ("ImplementExceptions.loopDec", Dec.layout, List.layout Dec.layout) @@ -243,10 +243,6 @@ *) let val exn = Var.newNoname () - val _ = - if Con.equals (con, Con.overflow) - then overflow := SOME exn - else () in (Type.unitRef, Dexp.vall {var = exn, exp = conApp uniq}, fn NONE => monoVar (exn, Type.exn) @@ -280,9 +276,7 @@ let fun normal () = primExp (Case {cases = Cases.map (cases, loop), - default = (Option.map - (default, fn (e, r) => - (loop e, r))), + default = Option.map (default, loop), test = test}) in case cases of @@ -292,7 +286,7 @@ else let val (Pat.T {con, ...}, _) = - Vector.sub (cases, 0) + Vector.first cases in if not (isExcon con) then normal () @@ -308,12 +302,12 @@ arg = unit (), ty = ty} val unit = Var.newString "unit" - val (body, region) = + val body = case default of NONE => Error.bug "ImplementExceptions: no default for exception case" - | SOME (e, r) => - (fromExp (loop e, ty), r) + | SOME e => + fromExp (loop e, ty) val decs = vall {var = defaultVar, @@ -330,8 +324,7 @@ casee {test = projectSum (VarExp.var test), ty = ty, - default = SOME (callDefault (), - region), + default = SOME (callDefault ()), cases = Cases.Con (Vector.map @@ -388,34 +381,33 @@ | Lambda l => primExp (Lambda (loopLambda l)) | PrimApp {args, prim, ...} => let - datatype z = datatype Prim.Name.t fun deref (var, ty) = primExp - (PrimApp {prim = Prim.deref, + (PrimApp {prim = Prim.Ref_deref, targs = Vector.new1 ty, args = Vector.new1 (VarExp.mono var)}) fun assign (var, ty) = primExp - (PrimApp {prim = Prim.assign, + (PrimApp {prim = Prim.Ref_assign, targs = Vector.new1 ty, args = Vector.new2 (VarExp.mono var, - Vector.sub (args, 0))}) + Vector.first args)}) in - case Prim.name prim of - Exn_extra => + case prim of + Prim.Exn_extra => (makeExp o projectExtra) - (VarExp.var (Vector.sub (args, 0))) - | Exn_name => + (VarExp.var (Vector.first args)) + | Prim.Exn_name => (primExp o App) {func = VarExp.mono exnNameVar, - arg = Vector.sub (args, 0)} - | Exn_setExtendExtra => + arg = Vector.first args} + | Prim.Exn_setExtendExtra => assign (extendExtraVar, extendExtraType) - | TopLevel_getHandler => + | Prim.TopLevel_getHandler => deref (topLevelHandlerVar, topLevelHandlerType) - | TopLevel_setHandler => + | Prim.TopLevel_setHandler => assign (topLevelHandlerVar, topLevelHandlerType) | _ => primExp exp @@ -521,8 +513,7 @@ val body = Dexp.toExp body val program = Program.T {datatypes = datatypes, - body = body, - overflow = !overflow} + body = body} val _ = destroy () in program diff -Nru mlton-20130715/mlton/xml/implement-suffix.fun mlton-20210117+dfsg/mlton/xml/implement-suffix.fun --- mlton-20130715/mlton/xml/implement-suffix.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/implement-suffix.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -14,7 +15,7 @@ datatype z = datatype PrimExp.t structure Dexp = DirectExp -fun transform (Program.T {datatypes, body, overflow, ...}): Program.t = +fun transform (Program.T {datatypes, body, ...}): Program.t = let (* topLevelSuffix holds the ref cell containing the function of * type unit -> unit that should be called on program exit. @@ -50,9 +51,7 @@ case exp of Case {test, cases, default} => primExp (Case {cases = Cases.map (cases, loop), - default = (Option.map - (default, fn (e, r) => - (loop e, r))), + default = Option.map (default, loop), test = test}) | ConApp {...} => keep () | Handle {try, catch = (catch, ty), handler} => @@ -62,24 +61,23 @@ | Lambda l => primExp (Lambda (loopLambda l)) | PrimApp {args, prim, ...} => let - datatype z = datatype Prim.Name.t fun deref (var, ty) = primExp - (PrimApp {prim = Prim.deref, + (PrimApp {prim = Prim.Ref_deref, targs = Vector.new1 ty, args = Vector.new1 (VarExp.mono var)}) fun assign (var, ty) = primExp - (PrimApp {prim = Prim.assign, + (PrimApp {prim = Prim.Ref_assign, targs = Vector.new1 ty, args = Vector.new2 (VarExp.mono var, - Vector.sub (args, 0))}) + Vector.first args)}) in - case Prim.name prim of - TopLevel_getSuffix => + case prim of + Prim.TopLevel_getSuffix => deref (topLevelSuffixVar, topLevelSuffixType) - | TopLevel_setSuffix => + | Prim.TopLevel_setSuffix => assign (topLevelSuffixVar, topLevelSuffixType) | _ => keep () @@ -118,7 +116,6 @@ val body = Dexp.toExp body in Program.T {datatypes = datatypes, - body = body, - overflow = overflow} + body = body} end end diff -Nru mlton-20130715/mlton/xml/monomorphise.fun mlton-20210117+dfsg/mlton/xml/monomorphise.fun --- mlton-20130715/mlton/xml/monomorphise.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/monomorphise.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -46,31 +47,23 @@ val toList: 'a t -> (Stype.t vector * 'a) list end = struct - type 'a t = (Stype.t vector * Word.t * 'a) HashSet.t + type 'a t = (Stype.t vector, 'a) HashTable.t local - val generator: Word.t = 0wx5555 val base = Random.word () in fun hash ts = - Vector.fold (ts, base, fn (t, w) => - Word.xorb (w * generator, Stype.hash t)) + Hash.combine (base, Hash.vectorMap (ts, Stype.hash)) fun equal (ts, ts') = Vector.equals (ts, ts', Stype.equals) end - fun new () : 'a t = HashSet.new {hash = #2} + fun new () : 'a t = HashTable.new {hash = hash, equals = equal} fun getOrAdd (c, ts, th) = - let - val hash = hash ts - in - (#3 o HashSet.lookupOrInsert) - (c, hash, fn (ts', _, _) => equal (ts, ts'), - fn () => (ts, hash, th ())) - end + HashTable.lookupOrInsert (c, ts, th) - fun toList c = HashSet.fold (c, [], fn ((ts, _, v), l) => (ts, v) :: l) + val toList = HashTable.toList end fun monomorphise (Xprogram.T {datatypes, body, ...}): Sprogram.t = @@ -145,7 +138,7 @@ val x' = Var.new x val ve = SvarExp.mono x' fun inst ts = - if 0 = Vector.length ts + if Vector.isEmpty ts then ve else Error.bug "Monomorphise.renameMono: expected monomorphic instance" val _ = setVar (x, inst) @@ -307,8 +300,7 @@ SprimExp.Case {test = monoVarExp test, cases = cases, - default = Option.map (default, fn (e, r) => - (monoExp e, r))} + default = Option.map (default, monoExp)} end | XprimExp.ConApp {con, targs, arg} => let val con = monoCon (con, targs) @@ -418,19 +410,10 @@ end | Xdec.Exception {con, arg} => let - val con' = - if Con.equals (con, Con.overflow) - then - (* We avoid renaming Overflow because the closure - * converter needs to recognize it. This is not - * safe in general, but is OK in this case because - * we know there is only one Overflow excon. - *) - con - else Con.new con + val con' = Con.new con val _ = setCon (con, fn _ => con') in - fn () => + fn () => [Sdec.Exception {con = con', arg = monoTypeOpt arg}] end) arg @@ -441,8 +424,7 @@ val datatypes = finishDbs [] val program = Sprogram.T {datatypes = Vector.fromList datatypes, - body = body, - overflow = NONE} + body = body} val _ = Sprogram.clear program val _ = destroyCon () val _ = destroyTycon () diff -Nru mlton-20130715/mlton/xml/monomorphise.sig mlton-20210117+dfsg/mlton/xml/monomorphise.sig --- mlton-20130715/mlton/xml/monomorphise.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/monomorphise.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/polyvariance.fun mlton-20210117+dfsg/mlton/xml/polyvariance.fun --- mlton-20130715/mlton/xml/polyvariance.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/polyvariance.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -66,11 +67,19 @@ (cases, (case default of NONE => n - | SOME (e, _) => loopExp (e, n)), - fn (e, n) => loopExp (e, n)) + | SOME e => loopExp (e, n)), + loopExp) end - | Handle {try, handler, ...} => - loopExp (try, loopExp (handler, n + 1)) + | Handle {try, catch = (catchVar, _), handler} => + (case Exp.dest handler of + {decs = [MonoVal {exp = Profile (ProfileExp.Leave _), ...}, + MonoVal {var = raiseVar, exp = Raise {exn = exnVar, ...}, ...}], + result = resultVar} => + if VarExp.equals (VarExp.mono catchVar, exnVar) + andalso VarExp.equals (VarExp.mono raiseVar, resultVar) + then loopExp (try, n - 1) + else loopExp (try, loopExp (handler, n + 1)) + | _ => loopExp (try, loopExp (handler, n + 1))) | Lambda l => loopLambda (l, n + 1) | Profile _ => n | _ => n + 1 @@ -141,8 +150,7 @@ | Case {test, cases, default} => (loopVar test ; Cases.foreach (cases, loopExp) - ; (Option.app - (default, loopExp o #1))) + ; Option.app (default, loopExp)) | ConApp {arg, ...} => Option.app (arg, loopVar) | Const _ => () @@ -190,7 +198,7 @@ in if isOK (if Vector.isEmpty lambdas then Error.bug "Polyvariance.loopExp.loopDecs: empty lambdas" else - #var (Vector.sub (lambdas, 0)), + #var (Vector.first lambdas), size, numOccurrences) then (List.foreach (dups, @@ -229,7 +237,7 @@ | SOME {shouldDuplicate, ...} => !shouldDuplicate end -fun transform (program as Program.T {datatypes, body, overflow}, +fun transform (program as Program.T {datatypes, body}, hofo: bool, small: int, product: int) = @@ -336,9 +344,7 @@ Case {test = loopVar test, cases = cases, default = - Option.map - (default, fn (e, r) => - (loopExp e, r))} + Option.map (default, loopExp)} end | ConApp {con, targs, arg} => ConApp {con = con, @@ -416,15 +422,9 @@ end | _ => Error.bug "Polyvariance.loopDecs: saw bogus dec" val body = loopExp body - val overflow = - Option.map (overflow, fn x => - case varInfo x of - Replace y => y - | _ => Error.bug "Polyvariance.duplicate: duplicating Overflow?") val program = Program.T {datatypes = datatypes, - body = body, - overflow = overflow} + body = body} val _ = Program.clear program in program @@ -441,13 +441,24 @@ then p else let val p = - Control.pass - {display = Control.Layouts Program.layouts, - name = "duplicate" ^ (Int.toString (n + 1)), + Control.simplifyPass + {arg = p, + doit = fn p => (Control.diagnostics + (fn layout => + layout (let + open Layout + in + seq [str "duplicate", + Int.layout (n+1), + str ":"] + end)) + ; shrink (transform (p, hofo, small, product))), + execute = true, + keepIL = false, + name = concat ["duplicate", Int.toString (n + 1)], stats = Program.layoutStats, - style = Control.No, - suffix = "post.xml", - thunk = fn () => shrink (transform (p, hofo, small, product))} + toFile = Program.toFile, + typeCheck = typeCheck} in loop (p, n + 1) end diff -Nru mlton-20130715/mlton/xml/scc-funs.fun mlton-20210117+dfsg/mlton/xml/scc-funs.fun --- mlton-20130715/mlton/xml/scc-funs.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/scc-funs.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,7 +16,7 @@ structure Graph = DirectedGraph structure Node = Graph.Node -fun sccFuns (Program.T {datatypes, body, overflow}) = +fun sccFuns (Program.T {datatypes, body}) = let (* For each function appearing in a fun dec record its node, which will * have edges to the nodes of other functions declared in the same dec @@ -51,8 +52,7 @@ | Case {test, cases, default} => (loopVarExp test ; Case {cases = Cases.map (cases, loopExp), - default = Option.map (default, fn (e, r) => - (loopExp e, r)), + default = Option.map (default, loopExp), test = test}) | ConApp {arg, ...} => (Option.app (arg, loopVarExp); e) | Const _ => e @@ -126,8 +126,7 @@ end in Program.T {datatypes = datatypes, - body = loopExp body, - overflow = overflow} + body = loopExp body} end end diff -Nru mlton-20130715/mlton/xml/scc-funs.sig mlton-20210117+dfsg/mlton/xml/scc-funs.sig --- mlton-20130715/mlton/xml/scc-funs.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/scc-funs.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/shrink.fun mlton-20210117+dfsg/mlton/xml/shrink.fun --- mlton-20130715/mlton/xml/shrink.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/shrink.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2019 Matthew Fluet. * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -128,7 +128,7 @@ | Tuple vs => PrimExp.Tuple (Vector.map (vs, VarInfo.varExp)) end -fun shrinkOnce (Program.T {datatypes, body, overflow}) = +fun shrinkOnce (Program.T {datatypes, body}) = let (* Keep track of the number of constuctors in each datatype so that * we can eliminate redundant defaults. @@ -143,12 +143,12 @@ in Vector.foreach (cons, fn {con, ...} => setConNumCons (con, n)) end) - fun isExhaustive (cases: exp Cases.t): bool = + fun isExhaustive (cases: (Pat.t, exp) Cases.t): bool = case cases of Cases.Con v => (0 < Vector.length v andalso (Vector.length v - = conNumCons (Pat.con (#1 (Vector.sub (v, 0)))))) + = conNumCons (Pat.con (#1 (Vector.first v))))) | _ => false val {get = varInfo: Var.t -> InternalVarInfo.t, set = setVarInfo, ...} = Property.getSet (Var.plist, @@ -397,12 +397,12 @@ (Vector.foreachR (cases, i + 1, Vector.length cases, deleteExp o #2) - ; Option.app (default, deleteExp o #1) + ; Option.app (default, deleteExp) ; Vector.Done (expression e)) else (deleteExp e; Vector.Continue ()) fun done () = case default of - SOME (e, _) => expression e + SOME e => expression e | NONE => Error.bug "Xml.Shrink.shrinkMonoVal: Case, match" in Vector.fold' (cases, 0, (), step, done) end @@ -411,10 +411,9 @@ (* Eliminate redundant default case. *) val default = if isExhaustive cases - then (Option.app (default, deleteExp o #1) + then (Option.app (default, deleteExp) ; NONE) - else Option.map (default, fn (e, r) => - (shrinkExp e, r)) + else Option.map (default, shrinkExp) in expansive (Case {test = test, @@ -451,25 +450,29 @@ | _ => Error.bug "Xml.Shrink.shrinkMonoVal: Case, default" end | ConApp {con, targs, arg} => - if Con.equals (con, Con.overflow) - then - expansive - (ConApp - {con = con, - targs = targs, - arg = Option.map (arg, shrinkVarExp)}) - else - let - val arg = Option.map (arg, varExpInfo) - in nonExpansiveValue - (fn () => Option.app (arg, VarInfo.delete), - Value.ConApp {con = con, targs = targs, arg = arg}) - end + let + val arg = Option.map (arg, varExpInfo) + in nonExpansiveValue + (fn () => Option.app (arg, VarInfo.delete), + Value.ConApp {con = con, targs = targs, arg = arg}) + end | Const c => nonExpansiveValue (fn () => (), Value.Const c) - | Handle {try, catch, handler} => - expansive (Handle {try = shrinkExp try, - catch = catch, - handler = shrinkExp handler}) + | Handle {try, catch as (catchVar, _), handler} => + let + val handler = shrinkExp handler + fun doit () = + expansive (Handle {try = shrinkExp try, + catch = catch, + handler = handler}) + in + case Exp.dest handler of + {decs = [MonoVal {var = raiseVar, exp = Raise {exn = exnVar, ...}, ...}], result = resultVar} => + if VarExp.equals (VarExp.mono catchVar, exnVar) + andalso VarExp.equals (VarExp.mono raiseVar, resultVar) + then expression try + else doit () + | _ => doit () + end | Lambda l => let val isInlined = ref false in nonExpansive @@ -586,29 +589,13 @@ mayInline = mayInline} end) l val _ = countExp body - val _ = - Option.app - (overflow, fn x => - case varInfo x of - InternalVarInfo.VarInfo i => VarInfo.inc1 i - | _ => Error.bug "Xml.Shrink.shrinkOnce: strange overflow var") val body = shrinkExp body - (* Must lookup the overflow variable again because it may have been set - * during shrinking. - *) - val overflow = - Option.map - (overflow, fn x => - case varInfo x of - InternalVarInfo.VarInfo i => VarExp.var (VarInfo.varExp i) - | _ => Error.bug "Xml.Shrink.shrinkOnce: strange overflow var") val _ = Exp.clear body val _ = Vector.foreach (datatypes, fn {cons, ...} => Vector.foreach (cons, Con.clear o #con)) in Program.T {datatypes = datatypes, - body = body, - overflow = overflow} + body = body} end val shrinkOnce = diff -Nru mlton-20130715/mlton/xml/shrink.sig mlton-20210117+dfsg/mlton/xml/shrink.sig --- mlton-20130715/mlton/xml/shrink.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/shrink.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/simplify-types.fun mlton-20210117+dfsg/mlton/xml/simplify-types.fun --- mlton-20130715/mlton/xml/simplify-types.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/simplify-types.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -46,7 +47,7 @@ end end -fun simplifyTypes (I.Program.T {body, datatypes, overflow}) = +fun simplifyTypes (I.Program.T {body, datatypes}) = let val {get = tyconInfo: Tycon.t -> {used: PowerSetLat.t} option, set = setTyconInfo, ...} = @@ -262,8 +263,7 @@ (s, Vector.map (v, fn (c, e) => (c, fixExp e))) in O.PrimExp.Case {cases = cases, - default = Option.map (default, fn (e, r) => - (fixExp e, r)), + default = Option.map (default, fixExp), test = fixVarExp test} end | I.PrimExp.ConApp {arg, con, targs} => @@ -292,8 +292,7 @@ val body = fixExp body in O.Program.T {datatypes = datatypes, - body = body, - overflow = overflow} + body = body} end end diff -Nru mlton-20130715/mlton/xml/simplify-types.sig mlton-20210117+dfsg/mlton/xml/simplify-types.sig --- mlton-20130715/mlton/xml/simplify-types.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/simplify-types.sig 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/sources.cm mlton-20210117+dfsg/mlton/xml/sources.cm --- mlton-20130715/mlton/xml/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/sources.cm 2021-12-28 17:19:36.000000000 +0000 @@ -2,25 +2,25 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) -Group +Library signature SXML signature XML signature XML_TYPE functor Monomorphise -functor Xml functor Sxml +functor Xml is +../../lib/mlton/sources.cm ../atoms/sources.cm ../control/sources.cm -../../lib/mlton/sources.cm xml-type.sig xml-tree.sig diff -Nru mlton-20130715/mlton/xml/sources.mlb mlton-20210117+dfsg/mlton/xml/sources.mlb --- mlton-20130715/mlton/xml/sources.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/sources.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -44,6 +44,6 @@ signature XML functor Monomorphise - functor Xml functor Sxml + functor Xml end diff -Nru mlton-20130715/mlton/xml/sxml-exns.sig mlton-20210117+dfsg/mlton/xml/sxml-exns.sig --- mlton-20130715/mlton/xml/sxml-exns.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/sxml-exns.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/sxml.fun mlton-20210117+dfsg/mlton/xml/sxml.fun --- mlton-20130715/mlton/xml/sxml.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/sxml.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,10 +1,23 @@ -(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) functor Sxml (S: SXML_STRUCTS): SXML = - SxmlSimplify (S) + SxmlSimplify (struct + open S + structure Program = + struct + open Program + val layoutStats = + mkLayoutStats "sxml" + val toFile = + {display = #display toFile, + style = #style toFile, + suffix = "sxml"} + end + end) diff -Nru mlton-20130715/mlton/xml/sxml.sig mlton-20210117+dfsg/mlton/xml/sxml.sig --- mlton-20130715/mlton/xml/sxml.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/sxml.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/sxml-simplify.fun mlton-20210117+dfsg/mlton/xml/sxml-simplify.fun --- mlton-20130715/mlton/xml/sxml-simplify.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/sxml-simplify.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -24,31 +25,32 @@ fn () => Polyvariance.transform p) type pass = {name: string, - doit: Program.t -> Program.t} + doit: Program.t -> Program.t, + execute: bool} val sxmlPassesDefault = - {name = "sxmlShrink1", doit = S.shrink} :: - {name = "implementSuffix", doit = ImplementSuffix.transform} :: - {name = "sxmlShrink2", doit = S.shrink} :: - {name = "implementExceptions", doit = ImplementExceptions.transform} :: - {name = "sxmlShrink3", doit = S.shrink} :: - (* {name = "uncurry", doit = Uncurry.transform} :: *) - (* {name = "sxmlShrink4", doit = S.shrink} :: *) - {name = "polyvariance", doit = Polyvariance.transform} :: - {name = "sxmlShrink4", doit = S.shrink} :: + {name = "sxmlShrink1", doit = S.shrink, execute = true} :: + {name = "implementSuffix", doit = ImplementSuffix.transform, execute = true} :: + {name = "sxmlShrink2", doit = S.shrink, execute = true} :: + {name = "implementExceptions", doit = ImplementExceptions.transform, execute = true} :: + {name = "sxmlShrink3", doit = S.shrink, execute = true} :: + (* {name = "uncurry", doit = Uncurry.transform, execute = true} :: *) + (* {name = "sxmlShrink4", doit = S.shrink, execute = true} :: *) + {name = "polyvariance", doit = Polyvariance.transform, execute = true} :: + {name = "sxmlShrink4", doit = S.shrink, execute = true} :: nil val sxmlPassesCpsTransform = sxmlPassesDefault @ - {name = "cpsTransform", doit = CPSTransform.transform} :: - {name = "cpsSxmlShrink5", doit = S.shrink} :: - {name = "cpsPolyvariance", doit = Polyvariance.transform} :: - {name = "cpsSxmlShrink6", doit = S.shrink} :: + {name = "cpsTransform", doit = CPSTransform.transform, execute = true} :: + {name = "cpsSxmlShrink5", doit = S.shrink, execute = true} :: + {name = "cpsPolyvariance", doit = Polyvariance.transform, execute = true} :: + {name = "cpsSxmlShrink6", doit = S.shrink, execute = true} :: nil val sxmlPassesMinimal = - {name = "implementSuffix", doit = ImplementSuffix.transform} :: - {name = "implementExceptions", doit = ImplementExceptions.transform} :: + {name = "implementSuffix", doit = ImplementSuffix.transform, execute = true} :: + {name = "implementExceptions", doit = ImplementExceptions.transform, execute = true} :: nil val sxmlPasses : pass list ref = ref sxmlPassesDefault @@ -57,17 +59,18 @@ type passGen = string -> pass option fun mkSimplePassGen (name, doit): passGen = - let val count = Counter.new 1 + let val next = Counter.generator 1 in fn s => if s = name then SOME {name = name ^ "#" ^ - (Int.toString (Counter.next count)), - doit = doit} + (Int.toString (next ())), + doit = doit, + execute = true} else NONE end val polyvariancePassGen = let - val count = Counter.new 1 + val next = Counter.generator 1 fun nums s = if s = "" then SOME [] @@ -95,8 +98,9 @@ Int.toString rounds, ",", Int.toString small, ",", Int.toString product, ")#", - Int.toString (Counter.next count)], - doit = polyvariance (hofo, rounds, small, product)} + Int.toString (next ())], + doit = polyvariance (hofo, rounds, small, product), + execute = true} val s = String.dropPrefix (s, String.size "polyvariance") in case nums s of @@ -111,7 +115,7 @@ val passGens = polyvariancePassGen :: (List.map([("sxmlShrink", S.shrink), - ("implementExceptions", ImplementExceptions.transform), + ("implementExceptions", ImplementExceptions.transform), ("implementSuffix", ImplementSuffix.transform)], mkSimplePassGen)) in @@ -129,71 +133,33 @@ end)) end -val sxmlPassesString = ref "default" -val sxmlPassesGet = fn () => !sxmlPassesString -val sxmlPassesSet = fn s => - let - val _ = sxmlPassesString := s - in - case s of - "default" => (sxmlPasses := sxmlPassesDefault - ; Result.Yes ()) - | "cpsTransform" => (sxmlPasses := sxmlPassesCpsTransform - ; Result.Yes ()) - | "minimal" => (sxmlPasses := sxmlPassesMinimal - ; Result.Yes ()) - | _ => sxmlPassesSetCustom s - end -val _ = List.push (Control.optimizationPasses, - {il = "sxml", get = sxmlPassesGet, set = sxmlPassesSet}) +fun sxmlPassesSet s = + case s of + "default" => (sxmlPasses := sxmlPassesDefault + ; Result.Yes ()) + | "cpsTransform" => (sxmlPasses := sxmlPassesCpsTransform + ; Result.Yes ()) + | "minimal" => (sxmlPasses := sxmlPassesMinimal + ; Result.Yes ()) + | _ => sxmlPassesSetCustom s +val _ = Control.OptimizationPasses.register {il = "sxml", set = sxmlPassesSet} -fun pass ({name, doit}, p) = +fun simplify p = let - val _ = - let open Control - in maybeSaveToFile - ({name = name, - suffix = "pre.sxml"}, - Control.No, p, Control.Layouts Program.layouts) - end + val sxmlPasses = !sxmlPasses + (* Always want to type check the initial and final SXML programs, + * even if type checking is turned off, just to catch bugs. + *) + val () = Control.trace (Control.Pass, "sxmlTypeCheck") typeCheck p val p = - Control.passTypeCheck - {display = Control.Layouts Program.layouts, - name = name, + Control.simplifyPasses + {arg = p, + passes = sxmlPasses, stats = Program.layoutStats, - style = Control.No, - suffix = "post.sxml", - thunk = fn () => doit p, + toFile = Program.toFile, typeCheck = typeCheck} + val () = Control.trace (Control.Pass, "sxmlTypeCheck") typeCheck p in p end -fun maybePass ({name, doit}, p) = - if List.exists (!Control.dropPasses, fn re => - Regexp.Compiled.matchesAll (re, name)) - then p - else pass ({name = name, doit = doit}, p) - -fun simplify p = - let - fun simplify' p = - List.fold - (!sxmlPasses, p, fn ({name, doit}, p) => - maybePass ({name = name, doit = doit}, p)) - val p = simplify' p - in - p - end - -val simplify = fn p => let - (* Always want to type check the initial and final XML - * programs, even if type checking is turned off, just - * to catch bugs. - *) - val _ = typeCheck p - val p' = simplify p - val _ = typeCheck p' - in - p' - end end diff -Nru mlton-20130715/mlton/xml/sxml-simplify.sig mlton-20210117+dfsg/mlton/xml/sxml-simplify.sig --- mlton-20130715/mlton/xml/sxml-simplify.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/sxml-simplify.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/sxml-tree.sig mlton-20210117+dfsg/mlton/xml/sxml-tree.sig --- mlton-20130715/mlton/xml/sxml-tree.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/sxml-tree.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/type-check.fun mlton-20210117+dfsg/mlton/xml/type-check.fun --- mlton-20130715/mlton/xml/type-check.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/type-check.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -12,7 +13,7 @@ open S open Dec PrimExp -fun typeCheck (program as Program.T {datatypes, body, overflow}): unit = +fun typeCheck (program as Program.T {datatypes, body}): unit = let (* tyvarInScope is used to ensure that tyvars never shadow themselves. *) val {get = tyvarInScope: Tyvar.t -> bool ref, ...} = @@ -176,13 +177,13 @@ App {arg, func} => checkApp (checkVarExp func, arg) | Case {cases, default, test} => let - val default = Option.map (default, checkExp o #1) + val default = Option.map (default, checkExp) fun equalss v = if Vector.isEmpty v then Error.bug "Xml.TypeCheck.equalss" else let - val t = Vector.sub (v, 0) + val t = Vector.first v in if Vector.forall (v, fn t' => Type.equals (t, t')) then SOME t @@ -319,15 +320,6 @@ if Type.equals (checkExp body, Type.unit) then () else Error.bug "Xml.TypeCheck.typeCheck: program must be of type unit" - val _ = - case overflow of - NONE => true - | SOME x => - let val {tyvars, ty} = getVar x - in - 0 = Vector.length tyvars - andalso Type.equals (ty, Type.exn) - end val _ = Program.clear program in () @@ -336,6 +328,4 @@ val typeCheck = Trace.trace ("Xml.TypeCheck.typeCheck", Program.layout, Unit.layout) typeCheck -val typeCheck = Control.trace (Control.Pass, "typeCheck") typeCheck - end diff -Nru mlton-20130715/mlton/xml/type-check.sig mlton-20210117+dfsg/mlton/xml/type-check.sig --- mlton-20130715/mlton/xml/type-check.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/type-check.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/uncurry.fun mlton-20210117+dfsg/mlton/xml/uncurry.fun --- mlton-20130715/mlton/xml/uncurry.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/uncurry.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/xml.fun mlton-20210117+dfsg/mlton/xml/xml.fun --- mlton-20130715/mlton/xml/xml.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/xml.fun 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/xml.sig mlton-20210117+dfsg/mlton/xml/xml.sig --- mlton-20130715/mlton/xml/xml.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/xml.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/xml-simplify.fun mlton-20210117+dfsg/mlton/xml/xml-simplify.fun --- mlton-20130715/mlton/xml/xml-simplify.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/xml-simplify.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -15,11 +16,12 @@ structure Output = S) type pass = {name: string, - doit: Program.t -> Program.t} + doit: Program.t -> Program.t, + execute: bool} val xmlPassesDefault = - {name = "xmlShrink", doit = S.shrink} :: - {name = "xmlSimplifyTypes", doit = SimplifyTypes.simplifyTypes} :: + {name = "xmlShrink", doit = S.shrink, execute = true} :: + {name = "xmlSimplifyTypes", doit = SimplifyTypes.simplifyTypes, execute = true} :: nil val xmlPassesMinimal = @@ -31,11 +33,12 @@ type passGen = string -> pass option fun mkSimplePassGen (name, doit): passGen = - let val count = Counter.new 1 + let val count = Counter.generator 1 in fn s => if s = name then SOME {name = concat [name, "#", - Int.toString (Counter.next count)], - doit = doit} + Int.toString (count ())], + doit = doit, + execute = true} else NONE end @@ -58,70 +61,31 @@ end)) end -val xmlPassesString = ref "default" -val xmlPassesGet = fn () => !xmlPassesString -val xmlPassesSet = fn s => - let - val _ = xmlPassesString := s - in - case s of - "default" => (xmlPasses := xmlPassesDefault - ; Result.Yes ()) - | "minimal" => (xmlPasses := xmlPassesMinimal - ; Result.Yes ()) - | _ => xmlPassesSetCustom s - end -val _ = List.push (Control.optimizationPasses, - {il = "xml", get = xmlPassesGet, set = xmlPassesSet}) +fun xmlPassesSet s = + case s of + "default" => (xmlPasses := xmlPassesDefault + ; Result.Yes ()) + | "minimal" => (xmlPasses := xmlPassesMinimal + ; Result.Yes ()) + | _ => xmlPassesSetCustom s +val _ = Control.OptimizationPasses.register {il = "xml", set = xmlPassesSet} -fun pass ({name, doit}, p) = +fun simplify p = let - val _ = - let open Control - in maybeSaveToFile - ({name = name, - suffix = "pre.xml"}, - Control.No, p, Control.Layouts Program.layouts) - end + val xmlPasses = !xmlPasses + (* Always want to type check the initial and final XML programs, + * even if type checking is turned off, just to catch bugs. + *) + val () = Control.trace (Control.Pass, "xmlTypeCheck") typeCheck p val p = - Control.passTypeCheck - {display = Control.Layouts Program.layouts, - name = name, + Control.simplifyPasses + {arg = p, + passes = xmlPasses, stats = Program.layoutStats, - style = Control.No, - suffix = "post.xml", - thunk = fn () => doit p, + toFile = Program.toFile, typeCheck = typeCheck} + val () = Control.trace (Control.Pass, "xmlTypeCheck") typeCheck p in p end -fun maybePass ({name, doit}, p) = - if List.exists (!Control.dropPasses, fn re => - Regexp.Compiled.matchesAll (re, name)) - then p - else pass ({name = name, doit = doit}, p) - -fun simplify p = - let - fun simplify' p = - List.fold - (!xmlPasses, p, fn ({name, doit}, p) => - maybePass ({name = name, doit = doit}, p)) - val p = simplify' p - in - p - end - -val simplify = fn p => let - (* Always want to type check the initial and final XML - * programs, even if type checking is turned off, just - * to catch bugs. - *) - val _ = typeCheck p - val p' = simplify p - val _ = typeCheck p' - in - p' - end - end diff -Nru mlton-20130715/mlton/xml/xml-simplify.sig mlton-20210117+dfsg/mlton/xml/xml-simplify.sig --- mlton-20130715/mlton/xml/xml-simplify.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/xml-simplify.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/xml-transform.sig mlton-20210117+dfsg/mlton/xml/xml-transform.sig --- mlton-20130715/mlton/xml/xml-transform.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/xml-transform.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ (* Copyright (C) 2007-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlton/xml/xml-tree.fun mlton-20210117+dfsg/mlton/xml/xml-tree.fun --- mlton-20130715/mlton/xml/xml-tree.fun 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/xml-tree.fun 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -(* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2017,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -11,6 +12,26 @@ open S +(* infix declarations for Parse.Ops *) +infix 1 <|> >>= +infix 3 <*> <* *> +infixr 4 <$> <$$> <$$$> <$$$$> <$ <$?> + +local + open Layout +in + fun layoutTyvars ts = + case Vector.length ts of + 0 => empty + | _ => seq [Vector.layout Tyvar.layout ts, str " "] +end +local + open Parse +in + val parseTyvars = + vectorOpt Tyvar.parse +end + structure Type = struct structure T = HashType (S) @@ -24,15 +45,31 @@ case Dest.dest t of Dest.Var a => Var a | Dest.Con x => Con x + + fun parse () = + let + open Parse + val parse = delay parse + in + (unit <$ kw "unit") + <|> + (var <$> Tyvar.parse) + <|> + (con <$> (vectorOpt parse >>= (fn args => + Tycon.parse >>= (fn con => + pure (con, args))))) + end + val parse = parse () end -fun maybeConstrain (x, t) = +fun maybeConstrain (pre, var, ty, post) = let open Layout in if !Control.showTypes - then seq [x, str ": ", Type.layout t] - else x + then mayAlign [seq [pre, Var.layout var, str ":"], + indent (seq [Type.layout ty, post], 2)] + else seq [pre, Var.layout var, post] end local @@ -44,6 +81,12 @@ then list (Vector.toListMap (ts, Type.layout)) else empty end +local + open Parse +in + val parseTargs = + Vector.fromList <$> listOpt Type.parse +end structure Pat = struct @@ -59,8 +102,24 @@ layoutTargs targs, case arg of NONE => empty - | SOME (x, t) => - maybeConstrain (seq [str " ", Var.layout x], t)] + | SOME (var, ty) => + seq [str " ", + paren (maybeConstrain (empty, var, ty, empty))]] + end + + local + open Parse + in + val parse = + T <$> + (Con.parse >>= (fn con => + parseTargs >>= (fn targs => + optional (paren + (Var.parse >>= (fn var => + sym ":" *> + Type.parse >>= (fn ty => + pure (var, ty))))) >>= (fn arg => + pure {con = con, targs = targs, arg = arg})))) end fun con (T {con, ...}) = con @@ -73,55 +132,6 @@ end end -structure Cases = - struct - datatype 'a t = - Con of (Pat.t * 'a) vector - | Word of WordSize.t * (WordX.t * 'a) vector - - fun layout (cs, layout) = - let - open Layout - fun doit (v, f) = - align (Vector.toListMap (v, fn (x, e) => - align [seq [f x, str " => "], - indent (layout e, 3)])) - in - case cs of - Con v => doit (v, Pat.layout) - | Word (_, v) => doit (v, WordX.layout) - end - - fun fold (c: 'a t, b: 'b, f: 'a * 'b -> 'b): 'b = - let - fun doit l = Vector.fold (l, b, fn ((_, a), b) => f (a, b)) - in - case c of - Con l => doit l - | Word (_, l) => doit l - end - - fun map (c: 'a t, f: 'a -> 'b): 'b t = - let - fun doit l = Vector.map (l, fn (i, x) => (i, f x)) - in - case c of - Con l => Con (doit l) - | Word (s, l) => Word (s, doit l) - end - - fun foreach (c, f) = fold (c, (), fn (x, ()) => f x) - - fun foreach' (c: 'a t, f: 'a -> unit, fc: Pat.t -> unit): unit = - let - fun doit l = Vector.foreach (l, fn (_, a) => f a) - in - case c of - Con l => Vector.foreach (l, fn (c, a) => (fc c; f a)) - | Word (_, l) => doit l - end - end - structure VarExp = struct datatype t = T of {targs: Type.t vector, @@ -141,15 +151,22 @@ end fun layout (T {var, targs, ...}) = - if !Control.showTypes - then let open Layout - in - if Vector.isEmpty targs - then Var.layout var - else seq [Var.layout var, str " ", - Vector.layout Type.layout targs] - end - else Var.layout var + let + open Layout + in + seq [Var.layout var, layoutTargs targs] + end + + val parse = + let + open Parse + val varExcepts = Vector.new4 ("exception", "val", "in", "fun") + in + T <$> + (Var.parseExcept varExcepts >>= (fn var => + parseTargs >>= (fn targs => + pure {var = var, targs = targs}))) + end end (*---------------------------------------------------*) @@ -163,8 +180,8 @@ App of {func: VarExp.t, arg: VarExp.t} | Case of {test: VarExp.t, - cases: exp Cases.t, - default: (exp * Region.t) option} + cases: (Pat.t, exp) Cases.t, + default: exp option} | ConApp of {con: Con.t, targs: Type.t vector, arg: VarExp.t option} @@ -210,82 +227,240 @@ case arg of NONE => empty | SOME t => seq [str " of ", Type.layout t]] - fun layoutTyvars ts = - case Vector.length ts of - 0 => empty - | 1 => seq [Tyvar.layout (Vector.sub (ts, 0)), str " "] - | _ => seq [tuple (Vector.toListMap (ts, Tyvar.layout)), str " "] fun layoutDec d = case d of Exception ca => seq [str "exception ", layoutConArg ca] | Fun {decs, tyvars} => - align [seq [str "val rec ", layoutTyvars tyvars], - indent (align (Vector.toListMap - (decs, fn {lambda, ty, var} => - align [seq [maybeConstrain (Var.layout var, ty), - str " = "], - indent (layoutLambda lambda, 3)])), - 3)] + align (Vector.toListMapi + (decs, fn (i, {lambda, ty, var}) => + let + val pre = + if i = 0 + then seq [str "fun ", layoutTyvars tyvars] + else str "and " + in + mayAlign [maybeConstrain (pre, var, ty, str " ="), + indent (layoutLambda lambda, 2)] + end)) | MonoVal {exp, ty, var} => - align [seq [str "val ", - maybeConstrain (Var.layout var, ty), str " = "], - indent (layoutPrimExp exp, 3)] + mayAlign [maybeConstrain (str "val ", var, ty, str " ="), + indent (layoutPrimExp exp, 2)] | PolyVal {exp, ty, tyvars, var} => - align [seq [str "val ", - if !Control.showTypes - then layoutTyvars tyvars - else empty, - maybeConstrain (Var.layout var, ty), - str " = "], - indent (layoutExp exp, 3)] + mayAlign [maybeConstrain (seq [str "val ", + if !Control.showTypes + then layoutTyvars tyvars + else empty], + var, ty, str " ="), + indent (layoutExp exp, 2)] and layoutExp (Exp {decs, result}) = - align [str "let", - indent (align (List.map (decs, layoutDec)), 3), - str "in", - indent (VarExp.layout result, 3), - str "end"] + if List.isEmpty decs + then VarExp.layout result + else align [str "let", + indent (align (List.map (decs, layoutDec)), 2), + str "in", + indent (VarExp.layout result, 2), + str "end"] and layoutPrimExp e = case e of App {arg, func} => seq [VarExp.layout func, str " ", VarExp.layout arg] | Case {test, cases, default} => - align [seq [str "case ", VarExp.layout test, str " of"], - Cases.layout (cases, layoutExp), - indent - (align - [case default of - NONE => empty - | SOME (e, _) => seq [str "_ => ", layoutExp e]], - 2)] + let + fun doit (v, layoutP) = + Vector.toListMap + (v, fn (p, e) => + mayAlign [seq [layoutP p, str " =>"], + indent (layoutExp e, 3)]) + datatype z = datatype Cases.t + val (suffix, cases) = + case cases of + Con v => (empty, doit (v, Pat.layout)) + | Word (ws, v) => (str (WordSize.toString ws), + doit (v, fn w => WordX.layout (w, {suffix = true}))) + val cases = + case default of + NONE => cases + | SOME e => cases @ [mayAlign [str "_ =>", indent (layoutExp e, 3)]] + in + align [seq [str "case", suffix, str " ", VarExp.layout test, str " of"], + indent (alignPrefix (cases, "| "), 2)] + end | ConApp {arg, con, targs, ...} => - seq [Con.layout con, + seq [str "con ", + Con.layout con, layoutTargs targs, case arg of NONE => empty | SOME x => seq [str " ", VarExp.layout x]] | Const c => Const.layout c | Handle {catch, handler, try} => - align [layoutExp try, - seq [str "handle ", - Var.layout (#1 catch), - str " => ", layoutExp handler]] + mayAlign [layoutExp try, + mayAlign [maybeConstrain + (str "handle ", #1 catch, #2 catch, str " =>"), + indent (layoutExp handler, 2)]] | Lambda l => layoutLambda l | PrimApp {args, prim, targs} => - seq [Prim.layout prim, + seq [str "prim ", + Prim.layoutFull(prim, Type.layout), layoutTargs targs, - str " ", tuple (Vector.toListMap (args, VarExp.layout))] + str " ", + Vector.layout VarExp.layout args] | Profile e => ProfileExp.layout e - | Raise {exn, ...} => seq [str "raise ", VarExp.layout exn] + | Raise {exn, extend} => + seq [str "raise ", + str (if extend then "extend " else ""), + VarExp.layout exn] | Select {offset, tuple} => seq [str "#", Int.layout offset, str " ", VarExp.layout tuple] - | Tuple xs => tuple (Vector.toListMap (xs, VarExp.layout)) + | Tuple xs => + Vector.layouti + (fn (i, x) => seq + (* very specific case to prevent open comments *) + [str (if i = 0 andalso + (case x of (VarExp.T {var, ...}) => + String.sub(Var.toString var, 0) = #"*") + then " " + else ""), + VarExp.layout x]) + xs | Var x => VarExp.layout x - and layoutLambda (Lam {arg, argType, body, ...}) = - align [seq [str "fn ", maybeConstrain (Var.layout arg, argType), - str " => "], - layoutExp body] + and layoutLambda (Lam {arg, argType, body, mayInline, ...}) = + mayAlign [maybeConstrain (seq [str "fn ", + str (if not mayInline then "noinline " else "")], + arg, argType, str " =>"), + indent (layoutExp body, 2)] -end +end + +local + open Parse +in + val parseConArg = + Con.parse >>= (fn con => + optional (kw "of" *> Type.parse) >>= (fn arg => + pure {con = con, arg = arg})) + val parseArgs = vector VarExp.parse + fun parseDec () = + mlSpaces *> any + [Exception <$> + (kw "exception" *> parseConArg), + Fun <$> + (kw "fun" *> + parseTyvars >>= (fn tyvars => + sepBy (Var.parse >>= (fn var => + sym ":" *> + Type.parse >>= (fn ty => + sym "=" *> + delay parseLambda >>= (fn lambda => + pure {var = var, ty = ty, lambda = lambda}))), + kw "and") >>= (fn decs => + pure {tyvars = tyvars, decs = Vector.fromList decs}))), + MonoVal <$> + (kw "val" *> + Var.parse >>= (fn var => + sym ":" *> + Type.parse >>= (fn ty => + sym "=" *> + delay parsePrimExp >>= (fn exp => + pure {var = var, ty = ty, exp = exp})))), + PolyVal <$> + (kw "val" *> + parseTyvars >>= (fn tyvars => + Var.parse >>= (fn var => + sym ":" *> + Type.parse >>= (fn ty => + sym "=" *> + delay parseExp >>= (fn exp => + pure {tyvars = tyvars, var = var, ty = ty, exp = exp})))))] + and parseExp () = + Exp <$> + ((kw "let" *> + many (delay parseDec) >>= (fn decs => + kw "in" *> + VarExp.parse >>= (fn result => + kw "end" *> + pure {decs = decs, result = result}))) + <|> + (VarExp.parse >>= (fn result => + pure {decs = [], result = result}))) + and parsePrimExp () = + mlSpaces *> any + [Case <$> + let + fun parseCase (parseP, mk) = + VarExp.parse >>= (fn test => + kw "of" *> + (Vector.fromList <$> + sepBy (parseP >>= (fn p => + sym "=>" *> + delay parseExp >>= (fn e => + pure (p, e))), + sym "|")) >>= (fn cases => + optional ((if Vector.isEmpty cases then pure () else sym "|") *> + kw "_" *> sym "=>" *> delay parseExp) >>= (fn default => + pure {test = test, + cases = mk cases, + default = default}))) + in + any ((kw "case" *> parseCase (Pat.parse, Cases.Con)) :: + (List.map (WordSize.all, fn ws => + (kw ("case" ^ WordSize.toString ws) *> + parseCase (WordX.parse, fn cases => (Cases.Word (ws, cases))))))) + end, + ConApp <$> + (kw "con" *> + Con.parse >>= (fn con => + parseTargs >>= (fn targs => + optional VarExp.parse >>= (fn arg => + pure {con = con, targs = targs, arg = arg})))), + Const <$> Const.parse, + Handle <$> + (delay parseExp >>= (fn try => + kw "handle" *> + Var.parse >>= (fn var => + sym ":" *> + Type.parse >>= (fn ty => + sym "=>" *> + delay parseExp >>= (fn handler => + pure {try = try, catch = (var, ty), handler = handler}))))), + Lambda <$> delay parseLambda, + PrimApp <$> + (kw "prim" *> + Prim.parseFull Type.parse >>= (fn prim => + parseTargs >>= (fn targs => + parseArgs >>= (fn args => + pure {prim = prim, targs = targs, args = args})))), + Raise <$> + (kw "raise" *> + optional (kw "extend") >>= (fn extend => + VarExp.parse >>= (fn exn => + pure {extend = Option.isSome extend, exn = exn}))), + Select <$> + (mlSpaces *> char #"#" *> + (peek (nextSat Char.isDigit) *> + fromScan (Function.curry Int.scan StringCvt.DEC)) >>= (fn offset => + VarExp.parse >>= (fn tuple => + pure {offset = offset, tuple = tuple}))), + Tuple <$> parseArgs, + App <$> + (VarExp.parse >>= (fn func => + VarExp.parse >>= (fn arg => + pure {func = func, arg = arg}))), + Var <$> VarExp.parse] + and parseLambda () = + Lam <$> + (kw "fn" *> + optional (kw "noinline") >>= (fn noInline => + Var.parse >>= (fn arg => + sym ":" *> + Type.parse >>= (fn argType => + sym "=>" *> + delay parseExp >>= (fn body => + pure {mayInline = Option.isNone noInline, + arg = arg, argType = argType, + body = body, + plist = PropertyList.new ()}))))) +end structure Dec = struct @@ -308,6 +483,8 @@ datatype t = datatype exp val layout = layoutExp + val parse = parseExp () + val make = Exp fun dest (Exp r) = r val decs = #decs o dest @@ -331,6 +508,24 @@ let datatype z = datatype Dec.t datatype z = datatype PrimExp.t + + fun mayRaiseExp e = List.exists (decs e, mayRaiseDec) + and mayRaisePrimExp e = + case e of + App _ => true + | Case {cases, default, ...} => + Cases.exists (cases, mayRaiseExp) + orelse + Option.fold (default, false, mayRaiseExp o #1) + | Handle {handler, ...} => + mayRaiseExp handler + | Raise _ => true + | _ => false + and mayRaiseDec d = + case d of + MonoVal {exp, ...} => mayRaisePrimExp exp + | _ => false + fun prof f = MonoVal {exp = Profile (f si), ty = Type.unit, @@ -355,7 +550,7 @@ var = unit}, MonoVal {exp = PrimApp {args = Vector.new1 (VarExp.mono unit), - prim = Prim.touch, + prim = Prim.MLton_touch, targs = Vector.new1 Type.unit}, ty = Type.unit, var = Var.newNoname ()}] @@ -369,10 +564,12 @@ [prof ProfileExp.Leave]] val try = make {decs = decs, result = result} in - fromPrimExp (Handle {catch = (exn, Type.exn), - handler = handler, - try = try}, - ty) + if mayRaiseExp e + then fromPrimExp (Handle {catch = (exn, Type.exn), + handler = handler, + try = try}, + ty) + else try end (*------------------------------------*) @@ -419,7 +616,7 @@ case arg of NONE => () | SOME x => monoVar x) - ; Option.app (default, loopExp o #1)))) + ; Option.app (default, loopExp)))) and loopDec d = case d of MonoVal {var, ty, exp} => @@ -490,6 +687,48 @@ (* quell unused warning *) val _ = size + fun dropProfile (e: t): t = + let + fun dropProfileExp (Exp {decs, result}) = + Exp {decs = List.keepAllMap (decs, dropProfileDec), + result = result} + and dropProfilePrimExp e = + case e of + Case {test, cases, default} => + Case {test = test, + cases = Cases.map (cases, dropProfileExp), + default = Option.map (default, dropProfileExp)} + | Handle {try, catch, handler} => + Handle {try = dropProfileExp try, + catch = catch, + handler = dropProfileExp handler} + | Lambda lambda => Lambda (dropProfileLambda lambda) + | _ => e + and dropProfileDec d = + case d of + Exception arg_con => SOME (Exception arg_con) + | Fun {decs, tyvars} => + SOME (Fun {decs = Vector.map + (decs, fn {lambda, ty, var} => + {lambda = dropProfileLambda lambda, + ty = ty, var = var}), + tyvars = tyvars}) + | MonoVal {exp = Profile _, ...} => NONE + | MonoVal {exp, ty, var} => + SOME (MonoVal {exp = dropProfilePrimExp exp, + ty = ty, var = var}) + | PolyVal {exp, ty, tyvars, var} => + SOME (PolyVal {exp = dropProfileExp exp, ty = ty, + tyvars = tyvars, var = var}) + and dropProfileLambda (Lam {arg, argType, body, mayInline, plist}) = + Lam {arg = arg, argType = argType, + body = dropProfileExp body, + mayInline = mayInline, + plist = plist} + in + dropProfileExp e + end + fun clear (e: t): unit = let open PrimExp fun clearTyvars ts = Vector.foreach (ts, Tyvar.clear) @@ -517,7 +756,7 @@ Lambda l => clearLambda l | Case {cases, default, ...} => (Cases.foreach' (cases, clearExp, clearPat) - ; Option.app (default, clearExp o #1)) + ; Option.app (default, clearExp)) | Handle {try, catch, handler, ...} => (clearExp try ; Var.clear (#1 catch) @@ -639,7 +878,7 @@ fun tuple {exps: t vector, ty: Type.t}: t = if 1 = Vector.length exps - then Vector.sub (exps, 0) + then Vector.first exps else converts (exps, fn xs => (PrimExp.Tuple (Vector.map (xs, #1)), ty)) @@ -671,7 +910,7 @@ fun convert2 (e1, e2, make) = converts (Vector.new2 (e1, e2), - fn xs => make (Vector.sub (xs, 0), Vector.sub (xs, 1))) + fn xs => make (Vector.first xs, Vector.sub (xs, 1))) fun app {func, arg, ty} = convert2 (func, arg, fn ((func, _), (arg, _)) => @@ -682,8 +921,7 @@ (Case {test = test, cases = Cases.map (cases, toExp), - default = (Option.map - (default, fn (e, r) => (toExp e, r)))}, + default = Option.map (default, toExp)}, ty)) fun raisee {exn: t, extend: bool, ty: Type.t}: t = @@ -699,7 +937,7 @@ fun reff (e: t): t = convert (e, fn (x, t) => - (PrimApp {prim = Prim.reff, + (PrimApp {prim = Prim.Ref_ref, targs = Vector.new1 t, args = Vector.new1 x}, Type.reff t)) @@ -709,15 +947,37 @@ let val t = Type.deRef t in - (PrimApp {prim = Prim.deref, + (PrimApp {prim = Prim.Ref_deref, targs = Vector.new1 t, args = Vector.new1 x}, t) end) + fun vectorLength (e: t): t = + convert (e, fn (x, t) => + let + val t = Type.deVector t + in + (PrimApp {prim = Prim.Vector_length, + targs = Vector.new1 t, + args = Vector.new1 x}, + Type.word (WordSize.seqIndex ())) + end) + + fun vectorSub (e1: t, e2: t): t = + convert2 (e1, e2, fn ((x1, t1), (x2, _)) => + let + val t = Type.deVector t1 + in + (PrimApp {prim = Prim.Vector_sub, + targs = Vector.new1 t, + args = Vector.new2 (x1, x2)}, + t) + end) + fun equal (e1, e2) = convert2 (e1, e2, fn ((x1, t), (x2, _)) => - (PrimApp {prim = Prim.equal, + (PrimApp {prim = Prim.MLton_equal, targs = Vector.new1 t, args = Vector.new2 (x1, x2)}, Type.bool)) @@ -744,7 +1004,7 @@ val bug: string -> t = fn s => - primApp {prim = Prim.bug, + primApp {prim = Prim.MLton_bug, targs = Vector.new0 (), args = Vector.new1 (string s), ty = Type.unit} @@ -779,7 +1039,7 @@ (body, case Vector.length components of 0 => [] - | 1 => [MonoVal {var = Vector.sub (components, 0), ty = t, exp = e}] + | 1 => [MonoVal {var = Vector.first components, ty = t, exp = e}] | _ => let val ts = Type.deTuple t @@ -819,6 +1079,17 @@ k)) end end) + + fun devector {vector: t, length: int, body}: t = + fn k => + let + val es = + Vector.tabulate + (length, fn i => + vectorSub (vector, const (Const.word (WordX.fromInt (i, WordSize.seqIndex ()))))) + in + convertsGen (es, fn args => (body args) k) + end end (*---------------------------------------------------*) @@ -836,11 +1107,25 @@ let open Layout in - seq [layoutTyvars tyvars, - Tycon.layout tycon, str " = ", - align - (separateLeft (Vector.toListMap (cons, layoutConArg), - "| "))] + seq [str "datatype ", + layoutTyvars tyvars, + Tycon.layout tycon, + str " = ", + alignPrefix + (Vector.toListMap (cons, layoutConArg), + "| ")] + end + + val parse = + let + open Parse + in + kw "datatype" *> + parseTyvars >>= (fn tyvars => + Tycon.parse >>= (fn tycon => + sym "=" *> + sepBy (parseConArg, sym "|") >>= (fn cons => + pure {tyvars = tyvars, tycon = tycon, cons = Vector.fromList cons}))) end end @@ -851,21 +1136,19 @@ structure Program = struct datatype t = T of {body: Exp.t, - datatypes: Datatype.t vector, - overflow: Var.t option} + datatypes: Datatype.t vector} - fun layout (T {body, datatypes, overflow, ...}) = + fun layout (T {body, datatypes, ...}) = let open Layout in align [str "\n\nDatatypes:", align (Vector.toListMap (datatypes, Datatype.layout)), - seq [str "\n\nOverflow: ", Option.layout Var.layout overflow], str "\n\nBody:", Exp.layout body] end - fun layouts (T {body, datatypes, overflow, ...}, output') = + fun layouts (T {body, datatypes, ...}, output') = let open Layout (* Layout includes an output function, so we need to rebind output @@ -873,13 +1156,38 @@ *) val output = output' in - output (str "\n\nDatatypes:") + output (str "\n\n(* Datatypes: *)") ; Vector.foreach (datatypes, output o Datatype.layout) - ; output (seq [str "\n\nOverflow: ", Option.layout Var.layout overflow]) - ; output (str "\n\nBody:") + ; output (str "\n\n(* Body: *)") ; output (Exp.layout body) end + val toFile = {display = Control.Layouts layouts, style = Control.ML, suffix = "xml"} + + fun parse () = + let + open Parse + + val () = Tyvar.parseReset {prims = Vector.new0 ()} + val () = Tycon.parseReset {prims = Vector.fromListMap (Tycon.prims, #tycon)} + val () = Con.parseReset {prims = Vector.new3 (Con.truee, Con.falsee, Con.reff)} + val () = Var.parseReset {prims = Vector.new0 ()} + + val parseProgram = + T <$> + (many Datatype.parse >>= (fn datatypes => + Exp.parse >>= (fn body => + pure {datatypes = Vector.fromList datatypes, + body = body}))) + in + parseProgram <* (mlSpaces *> (failing next <|> fail "end of file")) + end + + fun dropProfile (T {datatypes, body}) = + (Control.profile := Control.ProfileNone + ; T {datatypes = datatypes, + body = Exp.dropProfile body}) + fun clear (T {datatypes, body, ...}) = (Vector.foreach (datatypes, fn {tycon, tyvars, cons} => (Tycon.clear tycon @@ -887,30 +1195,38 @@ ; Vector.foreach (cons, Con.clear o #con))) ; Exp.clear body) - fun layoutStats (T {datatypes, body, ...}) = + fun mkLayoutStats il (program as T {datatypes, body, ...}) = let val numTypes = ref 0 fun inc _ = numTypes := 1 + !numTypes val {hom, destroy} = Type.makeHom {var = inc, con = inc} val numPrimExps = ref 0 - open Layout - in - Vector.foreach (datatypes, fn {cons, ...} => - Vector.foreach (cons, fn {arg, ...} => - case arg of - NONE => () - | SOME t => hom t)) - ; (Exp.foreach + val _ = + Vector.foreach + (datatypes, fn {cons, ...} => + Vector.foreach (cons, fn {arg, ...} => + case arg of + NONE => () + | SOME t => hom t)) + val _ = + Exp.foreach {exp = body, handlePrimExp = fn _ => numPrimExps := 1 + !numPrimExps, handleVarExp = fn _ => (), handleBoundVar = hom o #3, - handleExp = fn _ => ()}) - ; destroy () - ; align [seq [str "num primexps in program = ", Int.layout (!numPrimExps)], - seq [str "num types in program = ", Int.layout (!numTypes)], - Type.stats ()] + handleExp = fn _ => ()} + val _ = destroy () + + open Layout + in + align + [Control.sizeMessage (il ^ " program", program), + seq [str "num primexps in program = ", Int.layout (!numPrimExps)], + seq [str "num types in program = ", Int.layout (!numTypes)], + Type.stats ()] end + + val layoutStats = mkLayoutStats "xml" end end diff -Nru mlton-20130715/mlton/xml/xml-tree.sig mlton-20210117+dfsg/mlton/xml/xml-tree.sig --- mlton-20130715/mlton/xml/xml-tree.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/xml-tree.sig 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -(* Copyright (C) 2009 Matthew Fluet. +(* Copyright (C) 2009,2017,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -40,18 +40,6 @@ val layout: t -> Layout.t end - structure Cases: - sig - datatype 'a t = - Con of (Pat.t * 'a) vector - | Word of WordSize.t * (WordX.t * 'a) vector - - val fold: 'a t * 'b * ('a * 'b -> 'b) -> 'b - val foreach: 'a t * ('a -> unit) -> unit - val foreach': 'a t * ('a -> unit) * (Pat.t -> unit) -> unit - val map: 'a t * ('a -> 'b) -> 'b t - end - structure Lambda: sig type exp @@ -91,8 +79,8 @@ datatype t = App of {arg: VarExp.t, func: VarExp.t} - | Case of {cases: exp Cases.t, - default: (exp * Region.t) option, + | Case of {cases: (Pat.t, exp) Cases.t, + default: exp option, test: VarExp.t} | ConApp of {arg: VarExp.t option, con: Con.t, @@ -182,8 +170,8 @@ val app: {func: t, arg: t, ty: Type.t} -> t val bug: string -> t val casee: - {cases: t Cases.t, - default: (t * Region.t) option, + {cases: (Pat.t, t) Cases.t, + default: t option, test: t, ty: Type.t} (* type of entire case expression *) -> t @@ -195,6 +183,7 @@ val deref: t -> t val detuple: {tuple: t, body: (VarExp.t * Type.t) vector -> t} -> t val detupleBind: {tuple: t, components: Var.t vector, body: t} -> t + val devector: {vector: t, length: int, body: (VarExp.t * Type.t) vector -> t} -> t val equal: t * t -> t val falsee: unit -> t val fromExp: Exp.t * Type.t -> t @@ -231,6 +220,7 @@ ty: Type.t, var: Var.t} -> t val varExp: VarExp.t * Type.t -> t + val vectorLength: t -> t end structure Program: @@ -240,15 +230,15 @@ datatypes: {cons: {arg: Type.t option, con: Con.t} vector, tycon: Tycon.t, - tyvars: Tyvar.t vector} vector, - (* overflow is SOME only after exceptions have been - * implemented. - *) - overflow: Var.t option} + tyvars: Tyvar.t vector} vector} val clear: t -> unit (* clear all property lists *) + val dropProfile: t -> t val layout: t -> Layout.t val layouts: t * (Layout.t -> unit) -> unit val layoutStats: t -> Layout.t + val mkLayoutStats: string -> t -> Layout.t + val parse: unit -> t Parse.t + val toFile: {display: t Control.display, style: Control.style, suffix: string} end end diff -Nru mlton-20130715/mlton/xml/xml-type.sig mlton-20210117+dfsg/mlton/xml/xml-type.sig --- mlton-20130715/mlton/xml/xml-type.sig 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlton/xml/xml-type.sig 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlyacc/call-main.sml mlton-20210117+dfsg/mlyacc/call-main.sml --- mlton-20130715/mlyacc/call-main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/call-main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlyacc/doc/.gitignore mlton-20210117+dfsg/mlyacc/doc/.gitignore --- mlton-20130715/mlyacc/doc/.gitignore 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/doc/.gitignore 2021-12-28 17:19:36.000000000 +0000 @@ -1,4 +1,3 @@ -/html/ /mlyacc.aux /mlyacc.dvi /mlyacc.log diff -Nru mlton-20130715/mlyacc/doc/macros.hva mlton-20210117+dfsg/mlyacc/doc/macros.hva --- mlton-20130715/mlyacc/doc/macros.hva 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/doc/macros.hva 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -\newcommand{\parbox}[2]{#2} diff -Nru mlton-20130715/mlyacc/doc/Makefile mlton-20210117+dfsg/mlyacc/doc/Makefile --- mlton-20130715/mlyacc/doc/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/doc/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,22 +1,18 @@ -## Copyright (C) 2013 Matthew Fluet +## Copyright (C) 2013,2018 Matthew Fluet # Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## -html/index.html: $(TEX_FILES) - mkdir -p html - hevea -fix -o html/mlyacc.html -exec xxdate.exe macros.hva mlyacc.tex - cd html && hacha mlyacc.html && rm -f mlyacc.html - PDFLATEX := pdflatex mlyacc.pdf: mlyacc.tex $(PDFLATEX) mlyacc.tex $(PDFLATEX) mlyacc.tex + $(PDFLATEX) mlyacc.tex .PHONY: clean clean: diff -Nru mlton-20130715/mlyacc/doc/mlyacc.aux mlton-20210117+dfsg/mlyacc/doc/mlyacc.aux --- mlton-20130715/mlyacc/doc/mlyacc.aux 2013-07-16 15:01:04.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/doc/mlyacc.aux 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -\relax -\citation{bf} -\citation{ahu} -\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{4}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}General}{4}} -\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Module Dependencies}}{5}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Modules}{5}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.3}Error Recovery}{5}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.4}Precedence}{6}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.5}Notation}{7}} -\@writefile{toc}{\contentsline {section}{\numberline {2}ML-Yacc specifications}{7}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Lexical Definitions}{8}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Grammar}{9}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Required ML-Yacc Declarations}{10}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Optional ML-Yacc Declarations}{11}} -\newlabel{optional-def}{{2.4}{11}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}Declarations for improving error-recovery}{13}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.6}Rules}{13}} -\@writefile{toc}{\contentsline {section}{\numberline {3}Producing files with ML-Yacc}{14}} -\@writefile{toc}{\contentsline {section}{\numberline {4}The lexical analyzer}{14}} -\@writefile{toc}{\contentsline {section}{\numberline {5}Creating the parser}{15}} -\newlabel{create-parser}{{5}{15}} -\@writefile{toc}{\contentsline {section}{\numberline {6}Using the parser}{18}} -\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Parser Structure Signatures}{18}} -\@writefile{toc}{\contentsline {subsection}{\numberline {6.2}Using the parser structure}{19}} -\@writefile{toc}{\contentsline {section}{\numberline {7}Examples}{20}} -\@writefile{toc}{\contentsline {subsection}{\numberline {7.1}Sample Grammar}{21}} -\@writefile{toc}{\contentsline {subsection}{\numberline {7.2}Sample Lexer}{22}} -\@writefile{toc}{\contentsline {subsection}{\numberline {7.3}Top-level code}{23}} -\@writefile{toc}{\contentsline {section}{\numberline {8}Signatures}{24}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.1}Parsing structure signatures}{24}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.2}Lexers}{26}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.3}Signatures for the functor produced by ML-Yacc}{27}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.4}User parser signatures}{29}} -\@writefile{toc}{\contentsline {section}{\numberline {9}Sharing constraints}{30}} -\@writefile{toc}{\contentsline {section}{\numberline {10}Hints}{31}} -\@writefile{toc}{\contentsline {subsection}{\numberline {10.1}Multiple start symbols}{31}} -\@writefile{toc}{\contentsline {subsection}{\numberline {10.2}Functorizing things further}{32}} -\bibcite{bf}{1} -\bibcite{ahu}{2} -\@writefile{toc}{\contentsline {section}{\numberline {11}Acknowledgements}{33}} -\@writefile{toc}{\contentsline {section}{\numberline {12}Bugs}{33}} diff -Nru mlton-20130715/mlyacc/doc/mlyacc.log mlton-20210117+dfsg/mlyacc/doc/mlyacc.log --- mlton-20130715/mlyacc/doc/mlyacc.log 2013-07-16 15:01:04.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/doc/mlyacc.log 1970-01-01 00:00:00.000000000 +0000 @@ -1,239 +0,0 @@ -This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) (format=pdflatex 2012.8.20) 16 JUL 2013 11:01 -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**mlyacc.tex -(./mlyacc.tex -LaTeX2e <2011/06/27> -Babel and hyphenation patterns for english, dumylang, nohyphenation, us -englishmax, ukenglish, loaded. -(/usr/share/texlive/texmf-dist/tex/latex/base/latex209.def -File: latex209.def 1998/05/13 v0.52 Standard LaTeX file - - - Entering LaTeX 2.09 COMPATIBILITY MODE - ************************************************************* - !!WARNING!! !!WARNING!! !!WARNING!! !!WARNING!! - - This mode attempts to provide an emulation of the LaTeX 2.09 - author environment so that OLD documents can be successfully - processed. It should NOT be used for NEW documents! - - New documents should use Standard LaTeX conventions and start - with the \documentclass command. - - Compatibility mode is UNLIKELY TO WORK with LaTeX 2.09 style - files that change any internal macros, especially not with - those that change the FONT SELECTION or OUTPUT ROUTINES. - - Therefore such style files MUST BE UPDATED to use - Current Standard LaTeX: LaTeX2e. - If you suspect that you may be using such a style file, which - is probably very, very old by now, then you should attempt to - get it updated by sending a copy of this error message to the - author of that file. - ************************************************************* - -\footheight=\dimen102 -\@maxsep=\dimen103 -\@dblmaxsep=\dimen104 -\@cla=\count79 -\@clb=\count80 -\mscount=\count81 -(/usr/share/texlive/texmf-dist/tex/latex/base/tracefnt.sty -Package: tracefnt 1997/05/29 v3.0j Standard LaTeX package (font tracing) -\tracingfonts=\count82 -LaTeX Info: Redefining \selectfont on input line 101. -) -\symbold=\mathgroup4 -\symsans=\mathgroup5 -\symtypewriter=\mathgroup6 -\symitalic=\mathgroup7 -\symsmallcaps=\mathgroup8 -\symslanted=\mathgroup9 -LaTeX Font Info: Redeclaring math alphabet \mathbf on input line 293. -LaTeX Font Info: Redeclaring math alphabet \mathsf on input line 294. -LaTeX Font Info: Redeclaring math alphabet \mathtt on input line 295. -LaTeX Font Info: Redeclaring math alphabet \mathit on input line 301. -LaTeX Info: Redefining \em on input line 311. - -(/usr/share/texlive/texmf-dist/tex/latex/base/latexsym.sty -Package: latexsym 1998/08/17 v2.2e Standard LaTeX package (lasy symbols) -\symlasy=\mathgroup10 -LaTeX Font Info: Overwriting symbol font `lasy' in version `bold' -(Font) U/lasy/m/n --> U/lasy/b/n on input line 47. -) -LaTeX Font Info: Redeclaring math delimiter \lgroup on input line 375. -LaTeX Font Info: Redeclaring math delimiter \rgroup on input line 377. -LaTeX Font Info: Redeclaring math delimiter \bracevert on input line 379. -) -(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls -Document Class: article 2007/10/19 v1.4h Standard LaTeX document class -(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo -File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option) -) -\c@part=\count83 -\c@section=\count84 -\c@subsection=\count85 -\c@subsubsection=\count86 -\c@paragraph=\count87 -\c@subparagraph=\count88 -\c@figure=\count89 -\c@table=\count90 -\abovecaptionskip=\skip41 -\belowcaptionskip=\skip42 -Compatibility mode: definition of \rm ignored. -Compatibility mode: definition of \sf ignored. -Compatibility mode: definition of \tt ignored. -Compatibility mode: definition of \bf ignored. -Compatibility mode: definition of \it ignored. -Compatibility mode: definition of \sl ignored. -Compatibility mode: definition of \sc ignored. -LaTeX Info: Redefining \cal on input line 506. -LaTeX Info: Redefining \mit on input line 507. -\bibindent=\dimen105 -) (./mlyacc.aux) -\openout1 = `mlyacc.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 16. -LaTeX Font Info: ... okay on input line 16. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 16. -LaTeX Font Info: ... okay on input line 16. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 16. -LaTeX Font Info: ... okay on input line 16. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 16. -LaTeX Font Info: ... okay on input line 16. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 16. -LaTeX Font Info: ... okay on input line 16. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 16. -LaTeX Font Info: ... okay on input line 16. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <12> on input line 17. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <8> on input line 17. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <6> on input line 17. -LaTeX Font Info: Try loading font information for U+lasy on input line 17. - -(/usr/share/texlive/texmf-dist/tex/latex/base/ulasy.fd -File: ulasy.fd 1998/08/17 v2.2e LaTeX symbol font definitions -) [1 - -{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./mlyacc.toc -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <7> on input line 2. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <5> on input line 2. -) -\tf@toc=\write3 -\openout3 = `mlyacc.toc'. - - [2] [3] [4] [5] [6] -LaTeX Font Info: Try loading font information for OMS+cmr on input line 231. - - -(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd -File: omscmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions -) -LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10> not available -(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 231. -LaTeX Font Info: Try loading font information for OMS+cmtt on input line 242 -. -LaTeX Font Info: No file OMScmtt.fd. on input line 242. -LaTeX Font Warning: Font shape `OMS/cmtt/m/n' undefined -(Font) using `OMS/cmsy/m/n' instead -(Font) for symbol `textbraceleft' on input line 242. - [7] [8] -Overfull \hbox (12.77852pt too wide) in alignment at lines 353--393 - [][][] [] - [] - -[9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] -Overfull \hbox (89.49646pt too wide) in paragraph at lines 1119--1119 - [] \OT1/cmtt/m/n/10 "Error, line " ^ (Int.toString i) - ^ ", " ^ s ^ "\n")[] - [] - - -Overfull \hbox (0.24724pt too wide) in paragraph at lines 1147--1147 - [] \OT1/cmtt/m/n/10 (fn _ => TextIO.inputLine TextIO.stdI -n)[] - [] - - -Overfull \hbox (31.74696pt too wide) in paragraph at lines 1147--1147 - [] \OT1/cmtt/m/n/10 val (nextToken,lexer) = CalcParser.Stream.g -et lexer[] - [] - -[23] -Overfull \hbox (31.74696pt too wide) in paragraph at lines 1147--1147 - [] \OT1/cmtt/m/n/10 "result = " ^ (Int.toString r) - ^ "\n")[] - [] - - -Overfull \hbox (31.74696pt too wide) in paragraph at lines 1147--1147 - [] \OT1/cmtt/m/n/10 if CalcParser.sameToken(nextToken,dummyEOF) - then ()[] - [] - -[24] [25] -Overfull \hbox (10.74715pt too wide) in paragraph at lines 1251--1251 - [] \OT1/cmtt/m/n/10 preferred_subst:LrTable.term -> LrTable.term l -ist,[] - [] - -[26] [27] [28] [29] -Overfull \hbox (5.4972pt too wide) in paragraph at lines 1427--1427 - [] \OT1/cmtt/m/n/10 result * (svalue,pos) Token.token Stream.str -eam[] - [] - - -Overfull \hbox (0.24724pt too wide) in paragraph at lines 1480--1480 - []\OT1/cmtt/m/n/10 sharing type {n}Parser.svalue = {n}LrVals.ParserData.svalue - =[] - [] - -[30] -Overfull \hbox (0.24724pt too wide) in paragraph at lines 1480--1480 - [] \OT1/cmtt/m/n/10 {n}LrVals.Tokens.svalue = Lex.UserDeclarations.sval -ue[] - [] - -[31] [32] [33] (./mlyacc.aux) -LaTeX Font Warning: Some font shapes were not available, defaults substituted. - - -LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. - - ) -Here is how much of TeX's memory you used: - 429 strings out of 495016 - 5013 string characters out of 3180889 - 57242 words of memory out of 3000000 - 3650 multiletter control sequences out of 15000+200000 - 18603 words of font info for 68 fonts, out of 3000000 for 9000 - 36 hyphenation exceptions out of 8191 - 22i,13n,19p,192b,310s stack positions out of 5000i,500n,10000p,200000b,50000s - -Output written on mlyacc.pdf (33 pages, 236420 bytes). -PDF statistics: - 167 PDF objects out of 1000 (max. 8388607) - 116 compressed objects within 2 object streams - 0 named destinations out of 1000 (max. 500000) - 1 words of extra memory for PDF output out of 10000 (max. 10000000) - Binary files /tmp/tmpeijleaj1/J0IhGCp1bz/mlton-20130715/mlyacc/doc/mlyacc.pdf and /tmp/tmpeijleaj1/Onfiehphu5/mlton-20210117+dfsg/mlyacc/doc/mlyacc.pdf differ diff -Nru mlton-20130715/mlyacc/doc/mlyacc.toc mlton-20210117+dfsg/mlyacc/doc/mlyacc.toc --- mlton-20130715/mlyacc/doc/mlyacc.toc 2013-07-16 15:01:04.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/doc/mlyacc.toc 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -\contentsline {section}{\numberline {1}Introduction}{4} -\contentsline {subsection}{\numberline {1.1}General}{4} -\contentsline {subsection}{\numberline {1.2}Modules}{5} -\contentsline {subsection}{\numberline {1.3}Error Recovery}{5} -\contentsline {subsection}{\numberline {1.4}Precedence}{6} -\contentsline {subsection}{\numberline {1.5}Notation}{7} -\contentsline {section}{\numberline {2}ML-Yacc specifications}{7} -\contentsline {subsection}{\numberline {2.1}Lexical Definitions}{8} -\contentsline {subsection}{\numberline {2.2}Grammar}{9} -\contentsline {subsection}{\numberline {2.3}Required ML-Yacc Declarations}{10} -\contentsline {subsection}{\numberline {2.4}Optional ML-Yacc Declarations}{11} -\contentsline {subsection}{\numberline {2.5}Declarations for improving error-recovery}{13} -\contentsline {subsection}{\numberline {2.6}Rules}{13} -\contentsline {section}{\numberline {3}Producing files with ML-Yacc}{14} -\contentsline {section}{\numberline {4}The lexical analyzer}{14} -\contentsline {section}{\numberline {5}Creating the parser}{15} -\contentsline {section}{\numberline {6}Using the parser}{18} -\contentsline {subsection}{\numberline {6.1}Parser Structure Signatures}{18} -\contentsline {subsection}{\numberline {6.2}Using the parser structure}{19} -\contentsline {section}{\numberline {7}Examples}{20} -\contentsline {subsection}{\numberline {7.1}Sample Grammar}{21} -\contentsline {subsection}{\numberline {7.2}Sample Lexer}{22} -\contentsline {subsection}{\numberline {7.3}Top-level code}{23} -\contentsline {section}{\numberline {8}Signatures}{24} -\contentsline {subsection}{\numberline {8.1}Parsing structure signatures}{24} -\contentsline {subsection}{\numberline {8.2}Lexers}{26} -\contentsline {subsection}{\numberline {8.3}Signatures for the functor produced by ML-Yacc}{27} -\contentsline {subsection}{\numberline {8.4}User parser signatures}{29} -\contentsline {section}{\numberline {9}Sharing constraints}{30} -\contentsline {section}{\numberline {10}Hints}{31} -\contentsline {subsection}{\numberline {10.1}Multiple start symbols}{31} -\contentsline {subsection}{\numberline {10.2}Functorizing things further}{32} -\contentsline {section}{\numberline {11}Acknowledgements}{33} -\contentsline {section}{\numberline {12}Bugs}{33} diff -Nru mlton-20130715/mlyacc/examples/calc/calc.mlb mlton-20210117+dfsg/mlyacc/examples/calc/calc.mlb --- mlton-20130715/mlyacc/examples/calc/calc.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/calc/calc.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,9 @@ +local + $(SML_LIB)/basis/basis.mlb + $(SML_LIB)/mlyacc-lib/mlyacc-lib.mlb + calc.grm.sig + calc.grm.sml + calc.lex.sml +in + calc.sml +end diff -Nru mlton-20130715/mlyacc/examples/calc/calc.sml mlton-20210117+dfsg/mlyacc/examples/calc/calc.sml --- mlton-20130715/mlyacc/examples/calc/calc.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/calc/calc.sml 2021-12-28 17:19:36.000000000 +0000 @@ -45,7 +45,10 @@ *) fun parse () = - let val lexer = CalcParser.makeLexer (fn _ => TextIO.inputLine TextIO.stdIn) + let val lexer = CalcParser.makeLexer (fn _ => + (case TextIO.inputLine TextIO.stdIn + of SOME s => s + | _ => "")) val dummyEOF = CalcLrVals.Tokens.EOF(0,0) val dummySEMI = CalcLrVals.Tokens.SEMI(0,0) fun loop lexer = diff -Nru mlton-20130715/mlyacc/examples/calc/README mlton-20210117+dfsg/mlyacc/examples/calc/README --- mlton-20130715/mlyacc/examples/calc/README 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/calc/README 2021-12-28 17:19:36.000000000 +0000 @@ -5,13 +5,15 @@ calc.lex (* defines lexer *) calc.grm (* defines grammar *) calc.sml (* defines driver function, Calc.parse *) - sources.cm (* cm description file *) + calc.mlb (* ML Basis file *) -To compile this example, type +To compile this example, type the following commands - - CM.make "sources.cm"; + mllex calc.lex + mlyacc calc.grm + mlton calc.mlb -in this directory. CM will invoke ml-lex and ml-yacc to process the +in this directory. They will invoke ml-lex and ml-yacc to process the lexer specification calc.lex and the grammar specification calc.grm respectively. Then it will compile the resulting SML source files @@ -21,8 +23,9 @@ and the calc.sml file containing the driver code. -The end result of loading these files is a structure Calc containing a -top-level driver function named parse. +The end result of compiling these files is an executable file named +"calc", that is based on the structure Calc containing a top-level +driver function named parse. Calc.parse : unit -> unit @@ -40,7 +43,7 @@ fix input errors: a lexical error will cause exception LexError to be raised, while a syntax error will cause ParseError to be raised. -NOTE: The CM description file sources.cm mentions the ml-yacc library -(ml-yacc-lib.cm). CM's search path should be configured so that this -library will be found. This should normally be the case if SML/NJ is +NOTE: The ML Basis file calc.mlb mentions the ml-yacc library +(mlyacc-lib.mlb). MLton's search path should be configured so that this +library will be found. This should normally be the case if MLton is properly installed. diff -Nru mlton-20130715/mlyacc/examples/calc/sources.cm mlton-20210117+dfsg/mlyacc/examples/calc/sources.cm --- mlton-20130715/mlyacc/examples/calc/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/calc/sources.cm 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -Group is - -#if defined (NEW_CM) - $/basis.cm - $/ml-yacc-lib.cm -#else - ml-yacc-lib.cm -#endif - - calc.grm - calc.lex - calc.sml - diff -Nru mlton-20130715/mlyacc/examples/fol/fol.mlb mlton-20210117+dfsg/mlyacc/examples/fol/fol.mlb --- mlton-20130715/mlyacc/examples/fol/fol.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/fol/fol.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,12 @@ +local + $(SML_LIB)/basis/basis.mlb + $(SML_LIB)/mlyacc-lib/mlyacc-lib.mlb + absyn.sml + interface.sml + fol.grm.sig + fol.grm.sml + fol.lex.sml + parse.sml +in + link.sml +end \ No newline at end of file diff -Nru mlton-20130715/mlyacc/examples/fol/parse.sml mlton-20210117+dfsg/mlyacc/examples/fol/parse.sml --- mlton-20130715/mlyacc/examples/fol/parse.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/fol/parse.sml 2021-12-28 17:19:36.000000000 +0000 @@ -74,6 +74,9 @@ end fun top_parse () = - parse (Tokens.PARSEQUERY,0,(fn i => TextIO.inputLine TextIO.stdIn)) + parse (Tokens.PARSEQUERY,0,(fn i => + (case TextIO.inputLine TextIO.stdIn + of SOME s => s + | _ => ""))) end (* functor Parse *) diff -Nru mlton-20130715/mlyacc/examples/fol/README mlton-20210117+dfsg/mlyacc/examples/fol/README --- mlton-20130715/mlyacc/examples/fol/README 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/fol/README 2021-12-28 17:19:36.000000000 +0000 @@ -11,15 +11,17 @@ absyn.sml (* a trivial abstract syntax *) interface.sml (* interface to lexer and parser properties *) parse.sml (* driver functions *) - sources.cm (* cm description file *) + fol.mlb (* ML Basis file *) -To compile this example, type +To compile this example, type the following commands - - CM.make "sources.cm"; + mllex fol.lex + mlyacc fol.grm + mlton fol.mlb -in this directory. CM will invoke ml-lex and ml-yacc to process the -lexer specification calc.lex and the grammar specification calc.grm -respectively. Then it will compile the resulting SML source files +in this directory. They will invoke ml-lex and ml-yacc to process the +lexer specification fol.lex and the grammar specification fol.grm +respectively. Then they will compile the resulting SML source files fol.lex.sml fol.grm.sig @@ -49,7 +51,7 @@ - Parse.file_parse "list.fol"; -NOTE: The CM description file sources.cm mentions the ml-yacc library -(ml-yacc-lib.cm). CM's search path should be configured so that this -library will be found. This should normally be the case if SML/NJ is +NOTE: The ML Basis file fol.mlb mentions the ml-yacc library +(mlyacc-lib.mlb). MLton's search path should be configured so that this +library will be found. This should normally be the case if MLton is properly installed. diff -Nru mlton-20130715/mlyacc/examples/fol/sources.cm mlton-20210117+dfsg/mlyacc/examples/fol/sources.cm --- mlton-20130715/mlyacc/examples/fol/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/fol/sources.cm 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -Group is - -#if defined (NEW_CM) - $/basis.cm - $/ml-yacc-lib.cm -#else - ml-yacc-lib.cm -#endif - - fol.lex - fol.grm - - absyn.sml - - interface.sml - - parse.sml - link.sml - - diff -Nru mlton-20130715/mlyacc/examples/pascal/parser.sml mlton-20210117+dfsg/mlyacc/examples/pascal/parser.sml --- mlton-20130715/mlyacc/examples/pascal/parser.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/pascal/parser.sml 2021-12-28 17:19:36.000000000 +0000 @@ -25,7 +25,9 @@ fun keybd () = let val stream = - PascalParser.makeLexer (fn i => TextIO.inputLine TextIO.stdIn) + PascalParser.makeLexer (fn i => (case TextIO.inputLine TextIO.stdIn + of SOME s => s + | _ => "")) fun error (e,i:int,_) = TextIO.output(TextIO.stdOut, "std_in," ^ " line " ^ (Int.toString i) ^ ", Error: " ^ e ^ "\n") diff -Nru mlton-20130715/mlyacc/examples/pascal/pascal.mlb mlton-20210117+dfsg/mlyacc/examples/pascal/pascal.mlb --- mlton-20130715/mlyacc/examples/pascal/pascal.mlb 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/pascal/pascal.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,9 @@ +local + $(SML_LIB)/basis/basis.mlb + $(SML_LIB)/mlyacc-lib/mlyacc-lib.mlb + pascal.grm.sig + pascal.grm.sml + pascal.lex.sml +in + parser.sml +end \ No newline at end of file diff -Nru mlton-20130715/mlyacc/examples/pascal/README mlton-20210117+dfsg/mlyacc/examples/pascal/README --- mlton-20130715/mlyacc/examples/pascal/README 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/pascal/README 2021-12-28 17:19:36.000000000 +0000 @@ -1,16 +1,19 @@ This is a grammar for Berkeley Pascal, hacked to be SLR, though that is not necessary because ML-Yacc supports LALR(1). -To construct the parser, make this your current directory and run +To construct the parser, make this your current directory and run the +following commands - CM.make "sources.cm"; + mlyacc pascal.grm + mllex pascal.lex + mlton pascal.mlb -This will apply ML-Yacc to the file "pascal.grm" to create +They will apply ML-Yacc to the file "pascal.grm" to create the files "pascal.grm.sig" and "pascal.grm.sml", then ML_Lex will be applied to pascal.lex to produce pascal.lex.sml. Then these generated files will be compiled together with necessary -components from the ML-Yacc library supplied by the ml-yacc-lib.cm +components from the ML-Yacc library supplied by the mlyacc-lib.mlb file. The end result is a structure Parser with two functions. The diff -Nru mlton-20130715/mlyacc/examples/pascal/sources.cm mlton-20210117+dfsg/mlyacc/examples/pascal/sources.cm --- mlton-20130715/mlyacc/examples/pascal/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/pascal/sources.cm 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -Group is - -#if defined (NEW_CM) - $/basis.cm - $/ml-yacc-lib.cm -#else - ml-yacc-lib.cm -#endif - - pascal.grm - pascal.lex - - parser.sml - diff -Nru mlton-20130715/mlyacc/examples/pascal/test/c1.p mlton-20210117+dfsg/mlyacc/examples/pascal/test/c1.p --- mlton-20130715/mlyacc/examples/pascal/test/c1.p 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/pascal/test/c1.p 1970-01-01 00:00:00.000000000 +0000 @@ -1,271 +0,0 @@ -program simplex(input, output); - -{ two-phase simplex algorithm: version Feb. 24, 1988 } - -{ copyright K. Steiglitz } -{ Computer Science Dept. } -{ Princeton University 08544 } -{ ken@princeton.edu } - -const - maxpivots = 1000; { maximum no. of pivots } - large = 1.0e+31; { large number used in search for minimum cost column } - lowlim = -1.0e+31; { large negative number to test for unboundedness } - mmax = 32; { max. no. of rows } - ncolmax = 50; { max. no. of columns allowed in tableau } - eps = 1.0e-8; { for testing for zero } - -var - done, unbounded, optimal: boolean; { flags for simplex } - result: (toomanycols, unbound, infeas, toomanypivots, opt); - m: 1..mmax; { no. of rows - 1, the rows are numbered 0..m } - numpivots: integer; { pivot count } - pivotcol, pivotrow: integer; { pivot column and row } - pivotel: real; { pivot element } - cbar: real; { price when searching for entering column } - carry: array[-1..mmax, -1..mmax] of real; { inverse-basis matrix of the - revised simplex method } - phase: 1..2; { phase } - price: array[0..mmax] of real; { shadow prices = row -1 of carry = - -dual variables } - basis: array[0..mmax] of integer; { basis columns, negative integers - artificial } - ncol: 1..ncolmax; { number of columns } - tab: array[0..mmax, 1..ncolmax] of real; { tableau } - lhs: array[0..mmax] of real; { left-hand-side } - d: array[1..ncolmax] of real; { current cost vector } - c: array[1..ncolmax] of real; { cost vector in original problem } - curcol: array[-1..mmax] of real; { current column } - curcost: real; { current cost } - i, col, row: integer; { miscellaneous variables } - -procedure columnsearch; -{ looks for favorable column to enter basis. - returns lowest cost and its column number, or turns on the flag optimal } - -var - i , col : integer; - tempcost: real; { minimum cost, temporary cost of column } - - begin { columnsearch } - for i:= 0 to m do price[i]:= -carry[-1, i]; { set up price vector } - optimal:= false; - cbar:= large; - pivotcol:= 0; - for col:= 1 to ncol do - begin - tempcost:= d[col]; - for i:= 0 to m do tempcost:= tempcost - price[i]*tab[i, col]; - if( cbar > tempcost ) then - begin - cbar:= tempcost; - pivotcol:= col - end - end; { for col } - if ( cbar > -eps ) then optimal:= true - end; { columnsearch } - - -procedure rowsearch; -{ looks for pivot row. returns pivot row number, - or turns on the flag unbounded } - -var - i, j: integer; - ratio, minratio: real; { ratio and minimum ratio for ratio test } - - begin { rowsearch } - for i:= 0 to m do { generate column } - begin - curcol[i]:= 0.0; { current column = B inverse * original col. } - for j:= 0 to m do curcol[i]:= - curcol[i] + carry[i, j]*tab[j, pivotcol] - end; - curcol[-1]:= cbar; { first element in current column } - pivotrow:= -1; - minratio:= large; - for i:= 0 to m do { ratio test } - begin - if( curcol[i] > eps ) then - begin - ratio:= carry[i, -1]/curcol[i]; - if( minratio > ratio ) then { favorable row } - begin - minratio:= ratio; - pivotrow:= i; - pivotel:= curcol[i] - end - else { break tie with max pivot } - if ( (minratio = ratio) and (pivotel < curcol[i]) ) then - begin - pivotrow:= i; - pivotel:= curcol[i] - end - end { curcol > eps } - end; { for i } - if ( pivotrow = -1 ) then unbounded:= true { nothing found } - else unbounded:= false - end; { rowsearch } - - -procedure pivot; -{ pivots } - - var - i, j: integer; - - begin { pivot } - basis[pivotrow]:= pivotcol; - for j:= -1 to m do carry[pivotrow, j]:= carry[pivotrow, j]/pivotel; - for i:= -1 to m do - if( i<> pivotrow ) then - for j:= -1 to m do - carry[i, j]:= carry[i, j] - carry[pivotrow, j]*curcol[i]; - curcost:= -carry[-1, -1] - end; { pivot } - - -procedure changephase; -{ changes phase from 1 to 2, by switching to original cost vector } - - var - i, j, b: integer; - - begin { changephase } - phase:= 2; - for i:= 0 to m do if( basis[i] <= 0 ) then - writeln( '...artificial basis element ', basis[i]:5, - ' remains in basis after phase 1'); - for j:= 1 to ncol do d[j]:= c[j]; { switch to original cost vector } - for j:= -1 to m do - begin - carry[-1, j]:= 0.0; - for i:= 0 to m do - begin - b:= basis[i]; { ignore artificial basis elements that are } - if( b >= 1 ) then { still in basis } - carry[-1, j]:= carry[-1, j] - c[b]*carry[i,j] - end { for i } - end; { for j } - curcost:= -carry[-1, -1] - end; { changephase } - -procedure setup; -{ sets up test problem, lhs = tab*x, x >= 0, min c*x } -{ nrow = number of rows; ncol = number of cols } -{ tab = tableau; lhs = constants } - -var - i, j, nrow: integer; - -begin { setup } - readln(nrow); { read number of rows } - readln(ncol); { read number of columns } - m:= nrow - 1; { rows are numbered 0..m } - for j:= 1 to ncol do - read(c[j]); { cost vector } - for i:= 0 to m do - begin - read(lhs[i]); { left-hand-side } - for j:= 1 to ncol do - read(tab[i, j]) { tableau } - end; - - done:= false; { initialize carry matrix, etc. } - phase:= 1; - for i:= -1 to m do for j:= -1 to mmax do carry[i, j]:= 0.0; - for i:= 0 to m do carry[i, i]:= 1.0; { artificial basis } - for i:= 0 to m do - begin - carry[i, -1]:= lhs[i]; { -1 col of carry = left-hand-side } - carry[-1, -1]:= carry[-1, -1] - lhs[i] { - initial cost } - end; - curcost:= -carry[-1, -1]; - for i:= 0 to m do basis[i]:= -i; { initial, artificial basis } - if( ncol <= ncolmax ) then { check number of columns } - for col:= 1 to ncol do { initialize cost vector for phase 1 } - begin - d[col]:= 0.0; - for row:= 0 to m do d[col]:= d[col] - tab[row, col] - end - else - begin - writeln('...termination: too many columns for storage'); - done:= true; - result:= toomanycols - end; - numpivots:= 0; -end; { setup } - - -begin { simplex } - setup; - while( (numpivots < maxpivots) and (not done) and - ( (curcost > lowlim) or (phase = 1) ) ) do - begin - columnsearch; - if( not optimal ) then - begin { not optimal } - rowsearch; - if( unbounded ) then - begin - done:= true; - result:= unbound; - writeln('problem is unbounded') - end - else - begin - pivot; - numpivots:= numpivots + 1; - if ( (numpivots = 1 ) or ( numpivots mod 10 = 0 ) ) then - writeln('pivot ', numpivots:4, ' cost= ', curcost:12) - end - end { not optimal } - else { optimal } - if( phase = 1 ) then - begin - if( curcost > eps ) then - begin - done:= true; - result:= infeas; - writeln('problem is infeasible') - end - else - begin - if ( (numpivots <> 1 ) and ( numpivots mod 10 <> 0 ) ) then - writeln('pivot ', numpivots:4, ' cost= ', curcost:12); - writeln('phase 1 successfully completed'); - changephase - end - end { if phase = 1 } - else - begin - if ( (numpivots <> 1 ) and ( numpivots mod 10 <> 0 ) ) then - writeln('pivot ', numpivots:4, ' cost= ', curcost:12); - writeln('phase 2 successfully completed'); - done:= true; - result:= opt - end - end; { while } - if( (curcost <= lowlim) and (phase = 2) ) then - begin - if ( (numpivots <> 1 ) and ( numpivots mod 10 <> 0 ) ) then - writeln('pivot ', numpivots:4, ' cost= ', curcost:12); - result:= unbound; - writeln('problem is unbounded') - end; - if ( numpivots >= maxpivots ) then - begin - writeln('...termination: maximum number of pivots exceeded'); - result:= toomanypivots - end; - - if result = opt then - begin - writeln('optimal solution reached'); - writeln('cost =', -carry[-1,-1]:10:6); - for i:= 0 to m do - writeln('x(', basis[i]:4, ')= ', carry[i,-1]:10:6) - end - -end. diff -Nru mlton-20130715/mlyacc/examples/pascal/test/t1.p mlton-20210117+dfsg/mlyacc/examples/pascal/test/t1.p --- mlton-20130715/mlyacc/examples/pascal/test/t1.p 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/examples/pascal/test/t1.p 1970-01-01 00:00:00.000000000 +0000 @@ -1,270 +0,0 @@ -junk simplex(input, output); - -{ two-phase simplex algorithm: version Feb. 24, 1988 } - -{ copyright K. Steiglitz } -{ Computer Science Dept. } -{ Princeton University 08544 } -{ ken@princeton.edu } - -var - maxpivots = 1000; { maximum no. of pivots } - large = 1.0e+31; { large number used in search for minimum cost column } - lowlim = -1.0e+31; { large negative number to test for unboundedness } - mmax = 32; { max. no. of rows } - ncolmax = 50; { max. no. of columns allowed in tableau } - eps = 1.0e-8; { for testing for zero } - -const - done, unbounded, optimal: boolean; { flags for simplex } - result: (toomanycols, unbound, infeas, toomanypivots, opt); - m: 1..mmax; { no. of rows - 1, the rows are numbered 0..m } - numpivots: integer; { pivot count } - pivotcol, pivotrow: integer; { pivot column and row } - pivotel: real; { pivot element } - cbar: real; { price when searching for entering column } - carry: array[-1..mmax, -1..mmax] of real; { inverse-basis matrix of the - revised simplex method } - phase: 1..2; { phase } - price: array[0..mmax] of real; { shadow prices = row -1 of carry = - -dual variables } - basis: array[0..mmax] of integer; { basis columns, negative integers - artificial } - ncol: 1..ncolmax; { number of columns } - tab: array[0..mmax, 1..ncolmax] of real; { tableau } - lhs: array[0..mmax] of real; { left-hand-side } - d: array[1..ncolmax] of real; { current cost vector } - c: array[1..ncolmax] of real; { cost vector in original problem } - curcol: array[-1..mmax] of real; { current column } - curcost: real; { current cost } - i, col, row: integer; { miscellaneous variables } - -procedure columnsearch; -{ looks for favorable column to enter basis. - returns lowest cost and its column number, or turns on the flag optimal } - -var - i , col : integer; - tempcost: real; { minimum cost, temporary cost of column } - - begin { columnsearch } - for i:= 0 to m do price[i]:= -carry[-1, i]; { set up price vector } - optimal:= false; - cbar:= large; - pivotcol:= 0; - for col:= 1 to ncol do - begin - tempcost:= d[col]; - for i:= 0 to m do tempcost:= tempcost - price[i]*tab[i, col]; - if( cbar > tempcost ) then - begin - cbar:= tempcost; - pivotcol:= col - end - end; { for col } - if ( cbar > -eps ) then optimal:= true - end; { columnsearch } - - -procedure rowsearch; -{ looks for pivot row. returns pivot row number, - or turns on the flag unbounded } - -var - i, j: integer; - ratio, minratio: real; { ratio and minimum ratio for ratio test } - - begin { rowsearch } - for i:= 0 to m do { generate column } - begin - curcol[i]:= 0.0; { current column = B inverse * original col. } - for j:= 0 to m do curcol[i]:= - curcol[i] + carry[i, j]*tab[j, pivotcol] - end; - curcol[-1]:= cbar; { first element in current column } - pivotrow:= -1; - minratio:= large; - for i:= 0 to m do { ratio test } - begin - if( curcol[i] > eps ) then - begin - ratio:= carry[i, -1]/curcol[i]; - if( minratio > ratio ) then { favorable row } - begin - minratio:= ratio; - pivotrow:= i; - pivotel:= curcol[i] - end - else { break tie with max pivot } - if ( (minratio = ratio) and (pivotel < curcol[i]) ) then - begin - pivotrow:= i; - pivotel:= curcol[i] - end - end { curcol > eps } - end; { for i } - if ( pivotrow = -1 ) then unbounded:= true { nothing found } - else unbounded:= false - end; { rowsearch } - - -procedure pivot; -{ pivots } - - var - i, j: integer; - - begin { pivot } - basis[pivotrow]:= pivotcol; - for j:= -1 to m do carry[pivotrow, j]:= carry[pivotrow, j]/pivotel; - for i:= -1 to m do - if( i<> pivotrow ) then - for j:= -1 to m do - carry[i, j]:= carry[i, j] - carry[pivotrow, j]*curcol[i]; - curcost:= -carry[-1, -1] - end; { pivot } - - -procedure changephase; -{ changes phase from 1 to 2, by switching to original cost vector } - - var - i, j, b: integer; - - begin { changephase } - phase:= 2; - for i:= 0 to m do if( basis[i] <= 0 ) then - writeln( '...artificial basis element ', basis[i]:5, - ' remains in basis after phase 1'); - for j:= 1 to ncol do d[j]:= c[j]; { switch to original cost vector } - for j:= -1 to m do - begin - carry[-1, j]:= 0.0; - for i:= 0 to m do - begin - b:= basis[i]; { ignore artificial basis elements that are } - if( b >= 1 ) then { still in basis } - carry[-1, j]:= carry[-1, j] - c[b]*carry[i,j]; - end { for i } - end; { for j } - curcost:= -carry[-1, -1] - end; { changephase } - -procedure setup; -{ sets up test problem, lhs = tab*x, x >= 0, min c*x } -{ nrow = number of rows; ncol = number of cols } -{ tab = tableau; lhs = constants } - -var - i, j, nrow: integer; - -begin { setup } - readln(nrow); { read number of rows } - readln(ncol); { read number of columns } - m:= nrow - 1; { rows are numbered 0..m } - for j:= 1 to ncol do - read(c[j]); { cost vector } - for i:= 0 to m do - begin - read(lhs[i]); { left-hand-side } - for j:= 1 to ncol do - read(tab[i, j]); { tableau } - end; - - done:= false; { initialize carry matrix, etc. } - phase:= 1; - for i:= -1 to m do for j:= -1 to mmax do carry[i, j]:= 0.0; - for i:= 0 to m do carry[i, i]:= 1.0; { artificial basis } - for i:= 0 to m do - begin - carry[i, -1]:= lhs[i]; { -1 col of carry = left-hand-side } - carry[-1, -1]:= carry[-1, -1] - lhs[i] { - initial cost } - end; - curcost:= -carry[-1, -1]; - for i:= 0 to m do basis[i]:= -i; { initial, artificial basis } - if( ncol <= ncolmax ) then { check number of columns } - for col:= 1 to ncol do { initialize cost vector for phase 1 } - begin - d[col]:= 0.0; - for row:= 0 to m do d[col]:= d[col] - tab[row, col] - end - else - begin - writeln('...termination: too many columns for storage'); - done:= true; - result:= toomanycols - end; - numpivots:= 0; -end; { setup } - - -begin { simplex } - setup; - while( (numpivots < maxpivots) and (not done) and - ( (curcost > lowlim) or (phase = 1) ) ) do - begin - columnsearch; - if( not optimal ) then - begin { not optimal } - rowsearch; - if( unbounded ) then - begin - done:= true; - result:= unbound; - writeln('problem is unbounded') - end - else - begin - pivot; - numpivots:= numpivots + 1; - if ( (numpivots = 1 ) or ( numpivots mod 10 = 0 ) ) then - writeln('pivot ', numpivots:4, ' cost= ', curcost:12) - end - end { not optimal } - else { optimal } - if( phase = 1 ) then - begin - if( curcost > eps ) then - begin - done:= true; - result:= infeas; - writeln('problem is infeasible') - end - else - begin - if ( (numpivots <> 1 ) and ( numpivots mod 10 <> 0 ) ) then - writeln('pivot ', numpivots:4, ' cost= ', curcost:12); - writeln('phase 1 successfully completed'); - changephase - end - end { if phase = 1 } - else - begin - if ( (numpivots <> 1 ) and ( numpivots mod 10 <> 0 ) ) then - writeln('pivot ', numpivots:4, ' cost= ', curcost:12); - writeln('phase 2 successfully completed'); - done:= true; - result:= opt - end - end; { while } - if(((curcost <= lowlim) and (phase = 2) ) then - begin - if ( (numpivots <> 1 ) and ( numpivots mod 10 <> 0 ) ) then - writeln('pivot ', numpivots:4, ' cost= ', curcost:12); - result:= unbound; - writeln('problem is unbounded') - end; - if ( numpivots >= maxpivots ) then - begin - writeln('...termination: maximum number of pivots exceeded'); - result:= toomanypivots, - end; - - if result = opt then - begin - writeln('optimal solution reached'); - writeln('cost =', -carry[-1,-1]:10:6); - for i:= 0 to m do - writeln('x(', basis[i]:4, ')= ', carry[i,-1]:10:6) - -end. diff -Nru mlton-20130715/mlyacc/main.sml mlton-20210117+dfsg/mlyacc/main.sml --- mlton-20130715/mlyacc/main.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/main.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) diff -Nru mlton-20130715/mlyacc/Makefile mlton-20210117+dfsg/mlyacc/Makefile --- mlton-20130715/mlyacc/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,57 +1,39 @@ -## Copyright (C) 2009,2013 Matthew Fluet. +## Copyright (C) 2009,2013,2018-2020 Matthew Fluet. # Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## -SRC := $(shell cd .. && pwd) -BUILD := $(SRC)/build -BIN := $(BUILD)/bin -LIB := $(BUILD)/lib -MLTON := mlton -TARGET := self -FLAGS := -target $(TARGET) -NAME := mlyacc -PATH := $(BIN):$(shell echo $$PATH) +ROOT := .. +include $(ROOT)/Makefile.config -ifeq (mllex, $(shell if mllex >/dev/null 2>&1 || [ $$? != 127 ] ; then echo mllex; fi)) -MLLEX := mllex -else -ifeq (ml-lex, $(shell if ml-lex >/dev/null 2>&1 || [ $$? != 127 ] ; then echo ml-lex; fi)) -MLLEX := ml-lex -else -MLLEX := no-mllex -endif -endif +###################################################################### -ifeq (mlyacc, $(shell if mlyacc >/dev/null 2>&1 || [ $$? != 127 ] ; then echo mlyacc; fi)) -MLYACC := mlyacc -else -ifeq (ml-yacc, $(shell if ml-lex >/dev/null 2>&1 || [ $$? != 127 ] ; then echo ml-yacc; fi)) -MLYACC := ml-yacc -else -MLYACC := no-mlyacc -endif -endif +NAME := mlyacc all: $(NAME) -$(NAME): $(NAME).mlb $(shell PATH="$(BIN):$$PATH" && "$(MLTON)" -stop f $(NAME).mlb) +$(NAME): $(NAME).mlb $(shell "$(RUN_MLTON_DEPS)" -stop f $(NAME).mlb) @echo 'Compiling $(NAME)' - "$(MLTON)" $(FLAGS) $(NAME).mlb + "$(RUN_MLTON)" @MLton $(RUN_MLTON_RUNTIME_ARGS) -- $(RUN_MLTON_COMPILE_ARGS) -target $(TARGET) $(NAME).mlb -src/yacc.lex.sml: src/yacc.lex - rm -f src/yacc.lex.sml && \ - $(MLLEX) src/yacc.lex && \ - chmod -w src/yacc.lex.sml +.PHONY: clean +clean: + $(SRC)/bin/clean + +src/%.lex.sml: src/%.lex + $(RM) $<.* + $(RUN_MLLEX) $< + $(CHMOD) -w $<.* src/%.grm.sig src/%.grm.sml: src/%.grm - rm -f $<.* - $(MLYACC) $< - chmod -w $<.* + $(RM) $<.* + $(RUN_MLYACC) $< + $(CHMOD) -w $<.* + PDFLATEX := pdflatex @@ -59,7 +41,7 @@ $(MAKE) -C doc mlyacc.pdf mlyacc.pdf: doc/mlyacc.pdf - cp doc/mlyacc.pdf . + $(CP) doc/mlyacc.pdf . DOCS := ifneq ($(shell which $(PDFLATEX) 2> /dev/null),) @@ -69,13 +51,11 @@ .PHONY: docs docs: $(DOCS) -.PHONY: clean -clean: - ../bin/clean .PHONY: test test: $(NAME) - cp -p ../mlton/front-end/ml.grm . && \ + $(CP) ../mlton/front-end/ml.grm . \ $(NAME) ml.grm && \ - diff ml.grm.sig ../mlton/front-end/ml.grm.sig && \ - diff ml.grm.sml ../mlton/front-end/ml.grm.sml + $(DIFF) ml.grm.sig ../mlton/front-end/ml.grm.sig && \ + $(DIFF) ml.grm.sml ../mlton/front-end/ml.grm.sml \ + $(RM) ml.grm ml.grm.sig ml.grm.sml ml.grm.desc diff -Nru mlton-20130715/mlyacc/mlyacc.mlb mlton-20210117+dfsg/mlyacc/mlyacc.mlb --- mlton-20130715/mlyacc/mlyacc.mlb 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/mlyacc.mlb 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2004-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) Binary files /tmp/tmpeijleaj1/J0IhGCp1bz/mlton-20130715/mlyacc/mlyacc.pdf and /tmp/tmpeijleaj1/Onfiehphu5/mlton-20210117+dfsg/mlyacc/mlyacc.pdf differ diff -Nru mlton-20130715/mlyacc/src/coreutils.sml mlton-20210117+dfsg/mlyacc/src/coreutils.sml --- mlton-20130715/mlyacc/src/coreutils.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/src/coreutils.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ functor mkCoreUtils(structure Core : CORE) : CORE_UTILS = struct - open Array List + val sub = Array.sub infix 9 sub val DEBUG = true structure Core = Core @@ -21,7 +21,7 @@ end) val mkFuncs = fn (GRAMMAR {rules,terms,nonterms,...}) => - let val derives=array(nonterms,nil : rule list) + let val derives=Array.array(nonterms,nil : rule list) (* sort rules by their lhs nonterminal by placing them in an array indexed in their lhs nonterminal *) @@ -30,7 +30,7 @@ let val f = fn {lhs=lhs as (NT n), rhs, precedence,rulenum} => let val rule=RULE{lhs=lhs,rhs=rhs,precedence=precedence, rulenum=rulenum,num=0} - in update(derives,n,rule::(derives sub n)) + in Array.update(derives,n,rule::(derives sub n)) end in app f rules end @@ -51,7 +51,7 @@ if i (positions sub num) @@ -243,9 +243,9 @@ end val nonterms_w_null = - let val data = array(nonterms,NontermSet.empty) + let val data = Array.array(nonterms,NontermSet.empty) fun f n = if n=nonterms then () - else (update(data,n,nonterms_w_null (NT n)); + else (Array.update(data,n,nonterms_w_null (NT n)); f (n+1)) in (f 0; fn (NT nt) => data sub nt) end @@ -322,7 +322,7 @@ val closure_nonterms = let val data = - array(nonterms,nil: (nonterm * term list * bool) list) + Array.array(nonterms,nil: (nonterm * term list * bool) list) val do_nonterm = fn i => let val nonterms_followed_by_null = nonterms_w_null i @@ -349,7 +349,7 @@ end fun f i = if i=nonterms then () - else (update(data,i,do_nonterm (NT i)); f (i+1)) + else (Array.update(data,i,do_nonterm (NT i)); f (i+1)) val _ = f 0 in fn (NT i) => data sub i end diff -Nru mlton-20130715/mlyacc/src/look.sml mlton-20210117+dfsg/mlyacc/src/look.sml --- mlton-20130715/mlyacc/src/look.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/src/look.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ functor mkLook (structure IntGrammar : INTGRAMMAR) : LOOK = struct - open Array List + val sub = Array.sub infix 9 sub structure Grammar = IntGrammar.Grammar structure IntGrammar = IntGrammar @@ -73,8 +73,8 @@ | SOME ntlist => (lhs, ntlist) :: r end val items = List.foldr add_rule [] rules - val nullable = array(nonterms,false) - fun f ((NT i,nil),(l,_)) = (update(nullable,i,true); + val nullable = Array.array(nonterms,false) + fun f ((NT i,nil),(l,_)) = (Array.update(nullable,i,true); (l,true)) | f (a as (lhs,(h::t)),(l,change)) = (case (nullable sub h) of @@ -105,9 +105,9 @@ List.foldr (fn (RULE {rhs,...},r) =>(scanRhs addObj) (rhs,r)) empty rules val nontermMemo = fn f => - let val lookup = array(nonterms,nil) + let val lookup = Array.array(nonterms,nil) fun g i = if i=nonterms then () - else (update(lookup,i,f (NT i)); g (i+1)) + else (Array.update(lookup,i,f (NT i)); g (i+1)) in (g 0; fn (NT j) => lookup sub j) end diff -Nru mlton-20130715/mlyacc/src/mklrtable.sml mlton-20210117+dfsg/mlyacc/src/mklrtable.sml --- mlton-20130715/mlyacc/src/mklrtable.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/src/mklrtable.sml 2021-12-28 17:19:36.000000000 +0000 @@ -6,7 +6,7 @@ sharing type LrTable.nonterm = IntGrammar.Grammar.nonterm ) : MAKE_LR_TABLE = struct - open Array List + val sub = Array.sub infix 9 sub structure Core = mkCore(structure IntGrammar = IntGrammar) structure CoreUtils = mkCoreUtils(structure IntGrammar = IntGrammar @@ -178,8 +178,8 @@ val computeActions = fn (rules,precedence,graph,defaultReductions) => let val rulePrec = - let val precData = array(length rules,NONE : int option) - in app (fn RULE {rulenum=r,precedence=p,...} => update(precData,r,p)) + let val precData = Array.array(length rules,NONE : int option) + in app (fn RULE {rulenum=r,precedence=p,...} => Array.update(precData,r,p)) rules; fn i => precData sub i end @@ -322,7 +322,7 @@ val startErrs = List.foldr (fn (RULE {rhs,rulenum,...},r) => - if (exists (fn NONTERM a => a=start + if (List.exists (fn NONTERM a => a=start | _ => false) rhs) then START rulenum :: r else r) [] rules @@ -330,15 +330,15 @@ val nonshiftErrs = List.foldr (fn (RULE {rhs,rulenum,...},r) => (List.foldr (fn (nonshift,r) => - if (exists (fn TERM a => a=nonshift + if (List.exists (fn TERM a => a=nonshift | _ => false) rhs) then NS(nonshift,rulenum) :: r else r) r noshift) ) [] rules val notReduced = - let val ruleReduced = array(length rules,false) - val test = fn REDUCE i => update(ruleReduced,i,true) + let val ruleReduced = Array.array(length rules,false) + val test = fn REDUCE i => Array.update(ruleReduced,i,true) | _ => () val _ = app (fn (actions,default) => (app (fn (_,r) => test r) actions; diff -Nru mlton-20130715/mlyacc/src/mkprstruct.sml mlton-20210117+dfsg/mlyacc/src/mkprstruct.sml --- mlton-20130715/mlyacc/src/mkprstruct.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/src/mkprstruct.sml 2021-12-28 17:19:36.000000000 +0000 @@ -4,7 +4,7 @@ structure ShrinkLrTable : SHRINK_LR_TABLE sharing LrTable = ShrinkLrTable.LrTable):PRINT_STRUCT = struct - open Array List + val sub = Array.sub infix 9 sub structure LrTable = LrTable open ShrinkLrTable LrTable @@ -175,7 +175,7 @@ \ fun f i =\n\ \ if i=numstates then g i\n\ \ else (Array.update(memo,i,SHIFT (STATE i)); f (i+1))\n\ -\ in f 0 handle Subscript => ()\n\ +\ in f 0 handle General.Subscript => ()\n\ \ end\n\ \in\n\ \val entry_to_action = fn 0 => ACCEPT | 1 => ERROR | j => Array.sub(memo,(j-2))\n\ @@ -185,7 +185,7 @@ \val actionRowNumbers = string_to_list actionRowNumbers\n\ \val actionT = let val actionRowLookUp=\n\ \let val a=Array.fromList(actionRows) in fn i=>Array.sub(a,i) end\n\ -\in Array.fromList(map actionRowLookUp actionRowNumbers)\n\ +\in Array.fromList(List.map actionRowLookUp actionRowNumbers)\n\ \end\n\ \in LrTable.mkLrTable {actions=actionT,gotos=gotoT,numRules=numrules,\n\ \numStates=numstates,initialState=STATE "; diff -Nru mlton-20130715/mlyacc/src/shrink.sml mlton-20210117+dfsg/mlyacc/src/shrink.sml --- mlton-20130715/mlyacc/src/shrink.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/src/shrink.sml 2021-12-28 17:19:36.000000000 +0000 @@ -79,7 +79,7 @@ functor EquivFun(A : EQUIV_ARG) : EQUIV = struct - open Array List + val sub = Array.sub infix 9 sub (* Our algorithm for finding equivalence class is simple. The basic @@ -128,9 +128,9 @@ val inversePermute = fn permutation => fn nil => nil | l as h :: _ => - let val result = array(length l,h) + let val result = Array.array(length l,h) fun loop (elem :: r, dest :: s) = - (update(result,dest,elem); loop(r,s)) + (Array.update(result,dest,elem); loop(r,s)) | loop _ = () fun listofarray i = if i < Array.length result then diff -Nru mlton-20130715/mlyacc/src/yacc.sml mlton-20210117+dfsg/mlyacc/src/yacc.sml --- mlton-20130715/mlyacc/src/yacc.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/mlyacc/src/yacc.sml 2021-12-28 17:19:36.000000000 +0000 @@ -17,7 +17,7 @@ structure Absyn : ABSYN ) : PARSE_GEN = struct - open Array List + val sub = Array.sub infix 9 sub structure Grammar = MakeTable.Grammar structure Header = ParseGenParser.Header @@ -257,7 +257,7 @@ val ecTerms = List.foldr (fn (t,r) => - if hasType (TERM t) orelse exists (fn (a,_)=>a=t) value + if hasType (TERM t) orelse List.exists (fn (a,_)=>a=t) value then r else t::r) [] terms @@ -616,10 +616,10 @@ (* termToString: map terminals back to strings *) val termToString = - let val data = array(numTerms,"") + let val data = Array.array(numTerms,"") val unmap = fn (symbol,_) => let val name = symbolName symbol - in update(data, + in Array.update(data, case SymbolHash.find(name,symbolHash) of SOME i => i | NONE => raise Fail "termToString", @@ -633,10 +633,10 @@ end val nontermToString = - let val data = array(numNonterms,"") + let val data = Array.array(numNonterms,"") val unmap = fn (symbol,_) => let val name = symbolName symbol - in update(data, + in Array.update(data, case SymbolHash.find(name,symbolHash) of SOME i => i-numTerms | NONE => raise Fail "nontermToString", @@ -673,13 +673,13 @@ A rule is given the precedence of its rightmost terminal *) val termPrec = - let val precData = array(numTerms, NONE : int option) + let val precData = Array.array(numTerms, NONE : int option) val addPrec = fn termPrec => fn term as (T i) => case precData sub i of SOME _ => error {line = 1, col = 0} ("multiple precedences specified for terminal " ^ (termToString term)) - | NONE => update(precData,i,termPrec) + | NONE => Array.update(precData,i,termPrec) val termPrec = fn ((LEFT,_) ,i) => i | ((RIGHT,_),i) => i+2 | ((NONASSOC,l),i) => i+1 @@ -728,9 +728,9 @@ nontermNum "%start" name val symbolType = - let val data = array(numTerms+numNonterms,NONE : ty option) + let val data = Array.array(numTerms+numNonterms,NONE : ty option) fun unmap (symbol,ty) = - update(data, + Array.update(data, case SymbolHash.find(symbolName symbol,symbolHash) of SOME i => i | NONE => raise Fail "symbolType", diff -Nru mlton-20130715/README mlton-20210117+dfsg/README --- mlton-20130715/README 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/README 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -MLton is a whole-program optimizing compiler for the Standard ML -programming language. MLton has the following features. - - + Portability. - Runs on the following platforms. - o ARM: Linux (Debian). - o Alpha: Linux (Debian). - o AMD64: Darwin (Mac OS X), FreeBSD, Linux (Debian, Fedora, ...), - Solaris (10 and above). - o HPPA: HPUX (11.11 and above), Linux (Debian). - o IA64: HPUX (11.11 and above), Linux (Debian). - o PowerPC: AIX (5.2 and above), Darwin (Mac OS X), Linux (Debian, - Fedora). - o PowerPC64: AIX (5.2 and above). - o S390: Linux (Debian). - o Sparc: Linux (Debian), Solaris (8 and above). - o X86: Cygwin/Windows, Darwin (Mac OS X), FreeBSD, Linux (Debian, - Fedora, ...), MinGW/Windows, NetBSD, OpenBSD, Solaris (10 and - above). - + Robustness. - o Supports the full SML 97 language as given in The Definition - of Standard ML (Revised). - o A complete implementation of the Basis Library. - o Generates standalone executables. - o Compiles large programs. - o Support for large amounts of memory (up to 4G on 32-bit systems; - more on 64-bit systems). - o Support for large array lengths (up to 2^31 - 1 on 32-bit - systems; up to 2^63-1 on 64-bit systems). - o Support for large files, using 64-bit file positions. - + Performance. - o Executables have excellent running times. - o Generates small executables. - o Untagged and unboxed native integers, reals, and words. - o Unboxed native arrays. - o Multiple garbage collection strategies. - o Fast arbitrary-precision arithmetic based on the GnuMP. - + Tools. - o Source-level profiling for both time and allocation. - o MLLex lexer generator. - o MLYacc parser generator. - o ML-NLFFIGEN foreign-function-interface generator. - + Extensions. - o A simple and fast C FFI that supports calling from SML to C and - from C to SML. - o The ML Basis system for programming in the very large. - o Libraries for continuations, finalization, interval timers, - random numbers, resource limits, resource usage, signal - handlers, object size, system logging, threads, weak pointers, - and world save and restore. - -For more information, go to the MLton home page. - - http://mlton.org/ - -There are two mailing lists available. - - * MLton@mlton.org MLton developers - * MLton-user@mlton.org MLton user community - -doc directory contents: - README this file - changelog changelog - cm2mlb/ a utility for producing ML Basis programs in SML/NJ - cmcat/ a utility for producing whole programs in SML/NJ - examples/ example SML programs - guide/ HTML MLton guide (copy of the MLton wiki) - license/ license information - mllex.pdf user guide for mllex lexer generator - mlton-guide.pdf PDF version of MLton guide - mlyacc.pdf user guide for mlyacc parser generator diff -Nru mlton-20130715/README.adoc mlton-20210117+dfsg/README.adoc --- mlton-20130715/README.adoc 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/README.adoc 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,234 @@ += http://mlton.org[MLton] + +ifdef::env-github[] +image:https://travis-ci.com/MLton/mlton.svg?branch=master[Build Status, link = https://travis-ci.com/MLton/mlton] +endif::[] + +**** +MLton is a whole-program optimizing compiler for the Standard{nbsp}ML +programming language. MLton generates small executables with +excellent runtime performance, utilizing untagged and unboxed native +integers, reals, and words, unboxed native arrays, fast +arbitrary-precision arithmetic based on GMP, and multiple code +generation and garbage collection strategies. In addition, MLton +provides a feature rich Standard{nbsp}ML programming environment, with +full support for SML97 as given in The Definition of Standard{nbsp}ML +(Revised), a number of useful language extensions, a complete +implementation of the Standard ML Basis Library, various useful +libraries, a simple and fast C foreign function interface, the ML +Basis system for programming with source libraries, and tools such as +a lexer generator, a parser generator, and a profiler. +**** + + +== Features + + * Robustness. + + - Supports the full SML{nbsp}97 language as given in The Definition of Standard{nbsp}ML (Revised). + - A complete implementation of the http://sml-family.org/Basis/[Basis Library]. + - Generates standalone executables. + - Compiles large programs. + - Support for large amounts of memory (up to 4G on 32-bit systems; + more on 64-bit systems). + - Support for large array lengths (up to 2^31^ - 1 on 32-bit systems; + up to 2^63^-1 on 64-bit systems). + - Support for large files, using 64-bit file positions. + + * Performance. + + - Executables have excellent runtime performance. + - Generates small executables. + - Untagged and unboxed native integers, reals, and words. + - Unboxed native arrays. + - Multiple garbage collection strategies. + - Fast arbitrary-precision arithmetic based on https://gmplib.org[GMP]. + + * Tools. + + - Source-level http://mlton.org/Profiling[profiling] for both time and allocation. + - MLLex lexer generator. + - MLYacc parser generator. + - MLNLFFIGEN foreign-function-interface generator. + + * Extensions. + + - The http://mlton.org/MLBasis[ML Basis system] for programming with source libraries. + - A number of useful http://mlton.org/SuccessorML[language extensions]. + - A simple and fast http://mlton.org/ForeignFunctionInterface[C FFI] that supports calling from SML to C and from C to SML. + - Libraries for http://mlton.org/MLtonWeak[weak pointers] and http://mlton.org/MLtonFinalizable[finalization], http://mlton.org/MLtonThread[threads], http://mlton.org/MLtonCont[continuations], http://mlton.org/MLtonItimer[interval timers] and http://mlton.org/MLtonSignal[signal handlers], http://mlton.org/MLtonWorld[world save and restore], and http://mlton.org/MLtonStructure[more]. + + * Portability. + + - Runs on a wide variety of platforms. + + +== Build and Install (from source) + +=== Requirements + +==== Software + + * http://gcc.gnu.org/[GCC] or http://clang.llvm.org[Clang] (The C compiler must support `-std=gnu11`.) + * http://gmplib.org[GMP] (GNU Multiple Precision arithmetic library) + * http://savannah.gnu.org/projects/make[GNU Make] + * http://www.gnu.org/software/bash/[GNU Bash] + * binutils (`ar`, `ranlib`, `strip`, ...) + * miscellaneous Unix utilities (`diff`, `find`, `grep`, `gzip`, `patch`, `sed`, `tar`, `xargs`, ...) + * Standard{nbsp}ML compiler and tools to bootstrap: + - http://mlton.org[MLton] (`mlton`, `mllex`, and `mlyacc`) recommended. Pre-built binary packages for MLton can be installed via an OS package manager or (for select platforms) obtained from `http://mlton.org`. + - http://www.smlnj.org[SML/NJ] (`sml`, `ml-lex`, `ml-yacc`) supported, but not recommended. + * (optional, for documentation only) https://ctan.org/tex/[TeX], http://asciidoc.org/[AsciiDoc], http://pygments.org/[Pygments], http://www.graphicsmagick.org/[GraphicsMagick] or https://www.imagemagick.org/[ImageMagick], ... + +==== Hardware + + * ≥ 1GB RAM (for 32-bit platforms) or ≥ 2GB RAM (for 64-bit platforms) + +=== Build Instructions + +On typical platforms, building MLton requires no configuration and can be +accomplished via: + +[source,shell] +---- +$ make all +---- + +A small set of `Makefile` variables can be used to customize the build: + + * `CC`: Specify C compiler. Can be used for alternative tools (e.g., + `CC=clang` or `CC=gcc-7`). + * `WITH_GMP_DIR`, `WITH_GMP_INC_DIR`, `WITH_GMP_LIB_DIR`: Specify GMP include + and library paths, if not on default search paths. (If `WITH_GMP_DIR` is + set, then `WITH_GMP_INC_DIR` defaults to `$(WITH_GMP_DIR)/include` and + `WITH_GMP_LIB_DIR` defaults to `$(WITH_GMP_DIR)/lib`.) + * `MLTON_RUNTIME_ARGS`, `MLTON_COMPILE_ARGS`: Specify runtime and compile + arguments given to (the to-be-built) `mlton` when compiling distributed + executables ((self-compiled) `mlton`, `mllex`, `mlyacc`, `mlprof`, and + `mlnlffigen`). Can be used for testing (e.g., `MLTON_COMPILE_ARGS="-codegen + c"`) or for downstream packaging. + * `OLD_MLTON_RUNTIME_ARGS`, `OLD_MLTON_COMPILE_ARGS`: Specify runtime and + compile arguments given to "old" `mlton` when compiling "new" `mlton`. Can be + used to work around bugs in "old" `mlton` when compiling "new" `mlton`. + +For example: + +[source,shell] +---- +$ make CC=clang WITH_GMP_DIR=/opt/gmp MLTON_COMPILE_ARGS="-codegen c" all +---- + +The build artifacts are located under `./build`. The just-built `mlton` can be +executed via `./build/bin/mlton`. + +Building documentation can be accomplished via: + +[source,shell] +---- +$ make docs +---- + +=== Install Instructions + +On typical platforms, installing MLton (after performing `make all` and, +optionally, `make docs`) to `/usr/local` can be accomplished via: + +[source,shell] +---- +$ make install +---- + +A small set of `Makefile` variables can be used to customize the installation: + + * `PREFIX`: Specify the installation prefix. + +For example: + +[source,shell] +---- +$ make PREFIX=/opt/mlton install +---- + + +== Install (from binary package) + +=== Requirements + +==== Software + + * http://gcc.gnu.org/[GCC] or http://clang.llvm.org[Clang] (The C compiler must support `-std=gnu11`.) + * http://gmplib.org[GMP] (GNU Multiple Precision arithmetic library) + * http://savannah.gnu.org/projects/make[GNU Make] + * http://www.gnu.org/software/bash/[GNU Bash] + * miscellaneous Unix utilities (`bzip2`, `gzip`, `sed`, `tar`, ...) + +=== Binary Package + +A `.tgz` or `.tbz` binary package can be extracted at any location, yielding +`README.adoc` (this file), `CHANGELOG.adoc`, `LICENSE`, `Makefile`, `bin/`, +`lib/`, and `share/`. The compiler and tools can be executed in-place (e.g., +`./bin/mlton`). + +A small set of `Makefile` variables can be used to customize the binary package +via `make update`: + + * `CC`: Specify C compiler. Can be used for alternative tools (e.g., + `CC=clang` or `CC=gcc-7`). + * `WITH_GMP_DIR`, `WITH_GMP_INC_DIR`, `WITH_GMP_LIB_DIR`: Specify GMP include + and library paths, if not on default search paths. (If `WITH_GMP_DIR` is + set, then `WITH_GMP_INC_DIR` defaults to `$(WITH_GMP_DIR)/include` and + `WITH_GMP_LIB_DIR` defaults to `$(WITH_GMP_DIR)/lib`.) + +For example: + +[source,shell] +---- +$ make CC=clang WITH_GMP_DIR=/opt/gmp update +---- + +=== Install Instructions + +On typical platforms, installing MLton (after optionally performing +`make update`) to `/usr/local` can be accomplished via: + +[source,shell] +---- +$ make install +---- + +A small set of `Makefile` variables can be used to customize the installation: + + * `PREFIX`: Specify the installation prefix. + +For example: + +[source,shell] +---- +$ make PREFIX=/opt/mlton install +---- + + +== Resources + + * `http://mlton.org` + * Development + - `https://github.com/MLton/mlton` + - https://github.com/MLton/mlton/pulls[pull requests] + - https://github.com/MLton/mlton/issues[issue tracker] + * Mailing lists + - `MLton-devel@mlton.org` -- MLton developers + (https://sourceforge.net/mailarchive/forum.php?forum_name=mlton-devel[archive], + https://lists.sourceforge.net/lists/listinfo/mlton-devel[subscribe]) + - `MLton-user@mlton.org` -- MLton user community + (https://sourceforge.net/mailarchive/forum.php?forum_name=mlton-user[archive], + https://lists.sourceforge.net/lists/listinfo/mlton-user[subscribe]) + + +== Support and Contributing + +To report bugs or suggest new features, use the +https://github.com/MLton/mlton/issues[issue tracker] or ask on the +mailto:mlton-user@mlton.org[mailing list]. + +https://github.com/MLton/mlton/pulls[Pull requests] with bug fixes or +changes are welcome. diff -Nru mlton-20130715/regression/fail/constant-too-big.sml mlton-20210117+dfsg/regression/fail/constant-too-big.sml --- mlton-20130715/regression/fail/constant-too-big.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/constant-too-big.sml 2021-12-28 17:19:36.000000000 +0000 @@ -6,3 +6,8 @@ val _ = 0w12345678: Word16.word val _ = 0w12345678901234567890: Word32.word val _ = 0w1234567890123456789012345678901234567890: Word64.word +val _ = 1e999: Real32.real +val _ = 1e999: Real64.real +val _ = #"\uFFFF": Char.char +val _ = "A\uFFFFB": String.string +val _ = "A\uFFFFB\u9999C": String.string diff -Nru mlton-20130715/regression/fail/datatype-where-complex.1.sml mlton-20210117+dfsg/regression/fail/datatype-where-complex.1.sml --- mlton-20130715/regression/fail/datatype-where-complex.1.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/datatype-where-complex.1.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,4 @@ +signature S = + sig + datatype t = T + end where type t = int * int diff -Nru mlton-20130715/regression/fail/datatype-where-complex.2.sml mlton-20210117+dfsg/regression/fail/datatype-where-complex.2.sml --- mlton-20130715/regression/fail/datatype-where-complex.2.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/datatype-where-complex.2.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ +(* This should fail because 'a -> 'b is not a type name; + * The Defn does not treat -> as a TyName(2), but rather as a distinct + * sub-class of Type. *) +signature S = + sig + datatype ('a, 'b) t = T of 'a -> 'b + end where type ('a, 'b) t = 'a -> 'b + +(* Similarly, this should fail because 'a * 'b is not a type name; + * it is a synonym for {1: 'a, 2: 'b}, which is RowType. *) +signature S = + sig + datatype ('a, 'b) t = T of 'a * 'b + end where type ('a, 'b) t = 'a * 'b + +(* Similarly, this should fail because 'a * 'b is not a type name; + * it is a synonym for {1: 'a, 2: 'b}, which is RowType. *) +signature S = + sig + datatype t = T of unit + end where type t = unit + +(* On the other hand, The Defn does treat 'ref' and 'int' and other + * primitive types as TyName(k); see Appendix C. Hence, the following + * should succeed. *) +signature S = + sig + datatype 'a t = T of 'a ref + end where type 'a t = 'a ref +signature S = + sig + datatype t = T of int + end where type t = int diff -Nru mlton-20130715/regression/fail/datatype-where-complex.sml mlton-20210117+dfsg/regression/fail/datatype-where-complex.sml --- mlton-20130715/regression/fail/datatype-where-complex.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/datatype-where-complex.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -signature S = - sig - datatype t = T - end where type t = int * int diff -Nru mlton-20130715/regression/fail/duplicate-tyvar.sml mlton-20210117+dfsg/regression/fail/duplicate-tyvar.sml --- mlton-20130715/regression/fail/duplicate-tyvar.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/duplicate-tyvar.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1 +1,7 @@ type ('a, 'a) t = unit + +datatype ('a, 'a) t = T of ('a, 'a) u +withtype ('b, 'b) u = 'b * 'b + +fun ('a, 'a) id (x: 'a) : 'a = x +val ('a, 'a) id : 'a -> 'a = fn (x: 'a) => x : 'a diff -Nru mlton-20130715/regression/fail/infix.1.sml mlton-20210117+dfsg/regression/fail/infix.1.sml --- mlton-20130715/regression/fail/infix.1.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/infix.1.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,43 @@ +(* error *) +local + fun _ f _ = () +in +end + +(* error *) +local + fun (_ f _) = () +in +end + +(* error *) +local + fun (_ f _) _ = () +in +end + +infix && || + +(* error *) +local + fun && x = () +in +end + +(* error *) +local + fun x && = () +in +end + +(* error *) +local + fun && || = () +in +end + +(* error *) +local + fun || && = () +in +end diff -Nru mlton-20130715/regression/fail/infix.2.sml mlton-20210117+dfsg/regression/fail/infix.2.sml --- mlton-20130715/regression/fail/infix.2.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/infix.2.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,100 @@ +infix 1 @> +infixr 2 !!> @@> + +infix 0 & +infix 9 && + +datatype ('a, 'b) t1 = & of 'a * 'b +datatype ('a, 'b) t2 = && of 'a * 'b + +(* error *) +local + fun fst x && y = x +in +end + +(* defines fst *) +local + fun fst (x && y) = x +in + val _ = fst +end + +(* error *) +local + fun fst x @> +infixr 2 !!> @@> + +infix 0 & +infix 9 && + +datatype ('a, 'b) t1 = & of 'a * 'b +datatype ('a, 'b) t2 = && of 'a * 'b + +(* error *) +local + fun () = () +in +end + +(* error *) +local + fun () _ = () +in +end + +(* error *) +local + fun () _ _ = () +in +end + +(* error *) +local + fun () _ _ _ = () +in +end + +(* error *) +local + fun (f) = () +in +end + +(* error *) +local + fun (f) _ = () +in +end + +(* error *) +local + fun (f) _ _ = () +in +end + +(* error *) +local + fun (f) _ _ _ = () +in +end diff -Nru mlton-20130715/regression/fail/infix.4.sml mlton-20210117+dfsg/regression/fail/infix.4.sml --- mlton-20130715/regression/fail/infix.4.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/infix.4.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,40 @@ +infix 1 @> +infixr 2 !!> @@> + +infix 0 & +infix 9 && + +datatype ('a, 'b) t1 = & of 'a * 'b +datatype ('a, 'b) t2 = && of 'a * 'b + +(* error *) +local + fun _ f = () +in +end + +(* error *) +local + fun _ f _ = () +in +end + +(* error *) +local + fun (_ f _) = () +in +end + +(* error *) +local + fun (_ f _) _ = () +in +end + +(* error *) +local + fun _ f _ _ = () +in +end diff -Nru mlton-20130715/regression/fail/infix.5.sml mlton-20210117+dfsg/regression/fail/infix.5.sml --- mlton-20130715/regression/fail/infix.5.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/infix.5.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,72 @@ +infix 1 @> +infixr 2 !!> @@> + +infix 0 & +infix 9 && + +datatype ('a, 'b) t1 = & of 'a * 'b +datatype ('a, 'b) t2 = && of 'a * 'b + +(* defines @> +infixr 2 !!> @@> + +infix 0 & +infix 9 && + +datatype ('a, 'b) t1 = & of 'a * 'b +datatype ('a, 'b) t2 = && of 'a * 'b + + +(* defines z +in end +local +fun true z = z +in end +local +val rec true = fn z => z +in end +local +fun op:: z = z +in end +local +val rec op:: = fn z => z +in end +local +(* correct *) +val rec it = fn z => z +in end +local +(* correct *) +fun it z = z +in end diff -Nru mlton-20130715/regression/fail/special-ids.2.sml mlton-20210117+dfsg/regression/fail/special-ids.2.sml --- mlton-20130715/regression/fail/special-ids.2.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/special-ids.2.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,33 @@ +signature SIG1 = + sig + datatype t = = of unit + end +signature SIG2 = + sig + exception = + end +signature SIG3 = + sig + val = : unit + end + +local +datatype t = = of unit +in end +local +exception = +in end + +local +val op= = () +in end + +local +val rec f = fn op= => fn () => () +val rec op= = fn () => () +in end + +local +fun f op= () = () +fun op= () = () +in end diff -Nru mlton-20130715/regression/fail/val-rec-constructor.2.sml mlton-20210117+dfsg/regression/fail/val-rec-constructor.2.sml --- mlton-20130715/regression/fail/val-rec-constructor.2.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/val-rec-constructor.2.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -val rec SOME = fn _ => raise Fail "foo" diff -Nru mlton-20130715/regression/fail/val-rec-constructor.sml mlton-20210117+dfsg/regression/fail/val-rec-constructor.sml --- mlton-20130715/regression/fail/val-rec-constructor.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/fail/val-rec-constructor.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -val rec NONE = fn () => () diff -Nru mlton-20130715/regression/flat-array.4.sml mlton-20210117+dfsg/regression/flat-array.4.sml --- mlton-20130715/regression/flat-array.4.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/flat-array.4.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,28 @@ +structure Main = + struct + fun doit n = + let + val v = Vector.tabulate (1000000, fn i => + (Word14.fromInt i, + Word10.fromInt (i + 1), + Word8.fromInt (i + 2))) + fun loop n = + if 0 = n + then () + else + let + val sum = Vector.foldl (fn ((a, b, c), d) => + Word14.toLarge a + + Word10.toLarge b + + Word8.toLarge c + d) 0wx0 v + val _ = if 0wx20E0F3760 <> sum + then raise Fail (LargeWord.toString sum) + else () + in + loop (n - 1) + end + in + loop n + end + end +val _ = Main.doit 10 diff -Nru mlton-20130715/regression/gc-collect2.ok mlton-20210117+dfsg/regression/gc-collect2.ok --- mlton-20130715/regression/gc-collect2.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/gc-collect2.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +60480 diff -Nru mlton-20130715/regression/gc-collect2.sml mlton-20210117+dfsg/regression/gc-collect2.sml --- mlton-20130715/regression/gc-collect2.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/gc-collect2.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,54 @@ +val n = + case CommandLine.arguments () of + [n] => (case Int.fromString n of + SOME n => n + | NONE => 42) + | _ => 42 + +val () = MLton.GC.collect () + +val l = [ +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, + +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, + +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, + +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n, +n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n +] + +val k = List.foldl op+ 0 l + +val _ = print (Int.toString k ^ "\n") diff -Nru mlton-20130715/regression/int-inf.rep1.ok mlton-20210117+dfsg/regression/int-inf.rep1.ok --- mlton-20130715/regression/int-inf.rep1.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep1.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +That's good diff -Nru mlton-20130715/regression/int-inf.rep1.sml mlton-20210117+dfsg/regression/int-inf.rep1.sml --- mlton-20130715/regression/int-inf.rep1.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep1.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,6 @@ +structure I = MLton.IntInf +val bigthree = Vector.fromList (List.map I.BigWord.fromInt [0,3]) +val three = case I.fromRep (I.Big bigthree) of SOME b3 => b3 | NONE => 3 +val () = if three = three + 1 - 1 + then print "That's good\n" + else print "That's bad\n" diff -Nru mlton-20130715/regression/int-inf.rep2.ok mlton-20210117+dfsg/regression/int-inf.rep2.ok --- mlton-20130715/regression/int-inf.rep2.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep2.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +That's good diff -Nru mlton-20130715/regression/int-inf.rep2.sml mlton-20210117+dfsg/regression/int-inf.rep2.sml --- mlton-20130715/regression/int-inf.rep2.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep2.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,6 @@ +structure I = MLton.IntInf +val bigthree = Vector.fromList (List.map I.BigWord.fromInt [0,3]) +val three = case I.fromRep (I.Big bigthree) of SOME b3 => b3 | NONE => 3 +val () = case IntInf.compare (three, three + 1 - 1) of + EQUAL => print "That's good\n" + | _ => print "That's bad\n" diff -Nru mlton-20130715/regression/int-inf.rep3.ok mlton-20210117+dfsg/regression/int-inf.rep3.ok --- mlton-20130715/regression/int-inf.rep3.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep3.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +int-inf.rep3.???.ok missing diff -Nru mlton-20130715/regression/int-inf.rep3.rep32.ok mlton-20210117+dfsg/regression/int-inf.rep3.rep32.ok --- mlton-20130715/regression/int-inf.rep3.rep32.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep3.rep32.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,3 @@ +That's good +4294967296 +4294967296 diff -Nru mlton-20130715/regression/int-inf.rep3.rep64.ok mlton-20210117+dfsg/regression/int-inf.rep3.rep64.ok --- mlton-20130715/regression/int-inf.rep3.rep64.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep3.rep64.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,3 @@ +That's good +18446744073709551616 +18446744073709551616 diff -Nru mlton-20130715/regression/int-inf.rep3.sml mlton-20210117+dfsg/regression/int-inf.rep3.sml --- mlton-20130715/regression/int-inf.rep3.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep3.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,14 @@ +structure I = MLton.IntInf + +val big_canonical = Vector.fromList (List.map I.BigWord.fromInt [0,0,1]) +val big_canonical = valOf (I.fromRep (I.Big big_canonical)) + +val big_non_canon = Vector.fromList (List.map I.BigWord.fromInt [0,0,1,0]) +val big_non_canon = case I.fromRep (I.Big big_non_canon) of SOME bnc => bnc | NONE => big_canonical + +val () = if big_canonical = big_non_canon + then print "That's good\n" + else print "That's bad\n" + +val () = print (IntInf.toString big_canonical^"\n") +val () = print (IntInf.toString big_non_canon^"\n") diff -Nru mlton-20130715/regression/int-inf.rep4.ok mlton-20210117+dfsg/regression/int-inf.rep4.ok --- mlton-20130715/regression/int-inf.rep4.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep4.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +int-inf.rep4.???.ok missing diff -Nru mlton-20130715/regression/int-inf.rep4.rep32.ok mlton-20210117+dfsg/regression/int-inf.rep4.rep32.ok --- mlton-20130715/regression/int-inf.rep4.rep32.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep4.rep32.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,3 @@ +That's good +4294967296 +4294967296 diff -Nru mlton-20130715/regression/int-inf.rep4.rep64.ok mlton-20210117+dfsg/regression/int-inf.rep4.rep64.ok --- mlton-20130715/regression/int-inf.rep4.rep64.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep4.rep64.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,3 @@ +That's good +18446744073709551616 +18446744073709551616 diff -Nru mlton-20130715/regression/int-inf.rep4.sml mlton-20210117+dfsg/regression/int-inf.rep4.sml --- mlton-20130715/regression/int-inf.rep4.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep4.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,14 @@ +structure I = MLton.IntInf + +val big_canonical = Vector.fromList (List.map I.BigWord.fromInt [0,0,1]) +val big_canonical = valOf (I.fromRep (I.Big big_canonical)) + +val big_non_canon = Vector.fromList (List.map I.BigWord.fromInt [0,0,1,0]) +val big_non_canon = case I.fromRep (I.Big big_non_canon) of SOME bnc => bnc | NONE => big_canonical + +val () = case IntInf.compare (big_canonical, big_non_canon) of + EQUAL => print "That's good\n" + | _ => print "That's bad\n" + +val () = print (IntInf.toString big_canonical^"\n") +val () = print (IntInf.toString big_non_canon^"\n") diff -Nru mlton-20130715/regression/int-inf.rep5.sml mlton-20210117+dfsg/regression/int-inf.rep5.sml --- mlton-20130715/regression/int-inf.rep5.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-inf.rep5.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,83 @@ +structure II = IntInf +structure MII = MLton.IntInf + +structure BigWord = MLton.IntInf.BigWord +structure SmallInt = MLton.IntInf.SmallInt +datatype rep = datatype MLton.IntInf.rep +val toRep = MLton.IntInf.rep +val fromRep = MLton.IntInf.fromRep + +fun checkToFrom ii = + let + fun bug str = + print (concat ["checkToFrom ", + IntInf.toString ii, + " => ", + str, + "\n"]) + val r = toRep ii + val () = + if false + then print (concat ["toRep ", IntInf.toString ii, " = ", + case r of + Big _ => "Big\n" + | Small _ => "Small\n"]) + else () + in + case fromRep r of + NONE => bug "(isSome (fromRep r)) failed" + | SOME ii' => + if ii = ii' + then if r = toRep ii' + then () + else bug "(r = (toRep ii')) failed" + else bug "(ii = ii') failed" + end + +fun loop l = + case l of + nil => () + | (lo,hi)::l => + let + fun iloop ii = + if ii <= hi + then (checkToFrom ii; iloop (ii + 1)) + else loop l + in + iloop lo + end + +val tests = + let + val op + = SmallInt.+ + val op - = SmallInt.- + val op div = SmallInt.div + val two = SmallInt.fromInt 2 + val thirtytwo = SmallInt.fromInt 32 + val sixtyfour = thirtytwo + thirtytwo + + val min = valOf SmallInt.minInt + val hmin = min div two + val max = valOf SmallInt.maxInt + val hmax = max div two + in + [(SmallInt.toLarge min, SmallInt.toLarge (min + sixtyfour)), + (SmallInt.toLarge (hmin - thirtytwo), SmallInt.toLarge (hmin + thirtytwo)), + (SmallInt.toLarge (hmax - thirtytwo), SmallInt.toLarge (hmax + thirtytwo)), + (SmallInt.toLarge (max - sixtyfour), SmallInt.toLarge max)] + end + @ + let + val prec = valOf SmallInt.precision + val min = ~ (IntInf.pow (2, prec - 1)) + val hmin = min div 2 + val max = IntInf.pow (2, prec - 1) - 1 + val hmax = max div 2 + in + [(min, (min + 64)), + ((hmin - 32), (hmin + 32)), + ((hmax - 32), (hmax + 32)), + ((max - 64), max)] + end + +val () = loop tests diff -Nru mlton-20130715/regression/int-mul-pow2.ok mlton-20210117+dfsg/regression/int-mul-pow2.ok --- mlton-20130715/regression/int-mul-pow2.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-mul-pow2.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,3440 @@ +~32 * 64 = Overflow +~32 * 32 = Overflow +~32 * 16 = Overflow +~32 * 8 = Overflow +~32 * 4 = ~128 +~31 * 64 = Overflow +~31 * 32 = Overflow +~31 * 16 = Overflow +~31 * 8 = Overflow +~31 * 4 = ~124 +~30 * 64 = Overflow +~30 * 32 = Overflow +~30 * 16 = Overflow +~30 * 8 = Overflow +~30 * 4 = ~120 +~29 * 64 = Overflow +~29 * 32 = Overflow +~29 * 16 = Overflow +~29 * 8 = Overflow +~29 * 4 = ~116 +~28 * 64 = Overflow +~28 * 32 = Overflow +~28 * 16 = Overflow +~28 * 8 = Overflow +~28 * 4 = ~112 +~27 * 64 = Overflow +~27 * 32 = Overflow +~27 * 16 = Overflow +~27 * 8 = Overflow +~27 * 4 = ~108 +~26 * 64 = Overflow +~26 * 32 = Overflow +~26 * 16 = Overflow +~26 * 8 = Overflow +~26 * 4 = ~104 +~25 * 64 = Overflow +~25 * 32 = Overflow +~25 * 16 = Overflow +~25 * 8 = Overflow +~25 * 4 = ~100 +~24 * 64 = Overflow +~24 * 32 = Overflow +~24 * 16 = Overflow +~24 * 8 = Overflow +~24 * 4 = ~96 +~23 * 64 = Overflow +~23 * 32 = Overflow +~23 * 16 = Overflow +~23 * 8 = Overflow +~23 * 4 = ~92 +~22 * 64 = Overflow +~22 * 32 = Overflow +~22 * 16 = Overflow +~22 * 8 = Overflow +~22 * 4 = ~88 +~21 * 64 = Overflow +~21 * 32 = Overflow +~21 * 16 = Overflow +~21 * 8 = Overflow +~21 * 4 = ~84 +~20 * 64 = Overflow +~20 * 32 = Overflow +~20 * 16 = Overflow +~20 * 8 = Overflow +~20 * 4 = ~80 +~19 * 64 = Overflow +~19 * 32 = Overflow +~19 * 16 = Overflow +~19 * 8 = Overflow +~19 * 4 = ~76 +~18 * 64 = Overflow +~18 * 32 = Overflow +~18 * 16 = Overflow +~18 * 8 = Overflow +~18 * 4 = ~72 +~17 * 64 = Overflow +~17 * 32 = Overflow +~17 * 16 = Overflow +~17 * 8 = Overflow +~17 * 4 = ~68 +~16 * 64 = Overflow +~16 * 32 = Overflow +~16 * 16 = Overflow +~16 * 8 = ~128 +~16 * 4 = ~64 +~15 * 64 = Overflow +~15 * 32 = Overflow +~15 * 16 = Overflow +~15 * 8 = ~120 +~15 * 4 = ~60 +~14 * 64 = Overflow +~14 * 32 = Overflow +~14 * 16 = Overflow +~14 * 8 = ~112 +~14 * 4 = ~56 +~13 * 64 = Overflow +~13 * 32 = Overflow +~13 * 16 = Overflow +~13 * 8 = ~104 +~13 * 4 = ~52 +~12 * 64 = Overflow +~12 * 32 = Overflow +~12 * 16 = Overflow +~12 * 8 = ~96 +~12 * 4 = ~48 +~11 * 64 = Overflow +~11 * 32 = Overflow +~11 * 16 = Overflow +~11 * 8 = ~88 +~11 * 4 = ~44 +~10 * 64 = Overflow +~10 * 32 = Overflow +~10 * 16 = Overflow +~10 * 8 = ~80 +~10 * 4 = ~40 +~9 * 64 = Overflow +~9 * 32 = Overflow +~9 * 16 = Overflow +~9 * 8 = ~72 +~9 * 4 = ~36 +~8 * 64 = Overflow +~8 * 32 = Overflow +~8 * 16 = ~128 +~8 * 8 = ~64 +~8 * 4 = ~32 +~7 * 64 = Overflow +~7 * 32 = Overflow +~7 * 16 = ~112 +~7 * 8 = ~56 +~7 * 4 = ~28 +~6 * 64 = Overflow +~6 * 32 = Overflow +~6 * 16 = ~96 +~6 * 8 = ~48 +~6 * 4 = ~24 +~5 * 64 = Overflow +~5 * 32 = Overflow +~5 * 16 = ~80 +~5 * 8 = ~40 +~5 * 4 = ~20 +~4 * 64 = Overflow +~4 * 32 = ~128 +~4 * 16 = ~64 +~4 * 8 = ~32 +~4 * 4 = ~16 +~3 * 64 = Overflow +~3 * 32 = ~96 +~3 * 16 = ~48 +~3 * 8 = ~24 +~3 * 4 = ~12 +~2 * 64 = ~128 +~2 * 32 = ~64 +~2 * 16 = ~32 +~2 * 8 = ~16 +~2 * 4 = ~8 +~1 * 64 = ~64 +~1 * 32 = ~32 +~1 * 16 = ~16 +~1 * 8 = ~8 +~1 * 4 = ~4 +0 * 64 = 0 +0 * 32 = 0 +0 * 16 = 0 +0 * 8 = 0 +0 * 4 = 0 +1 * 64 = 64 +1 * 32 = 32 +1 * 16 = 16 +1 * 8 = 8 +1 * 4 = 4 +2 * 64 = Overflow +2 * 32 = 64 +2 * 16 = 32 +2 * 8 = 16 +2 * 4 = 8 +3 * 64 = Overflow +3 * 32 = 96 +3 * 16 = 48 +3 * 8 = 24 +3 * 4 = 12 +4 * 64 = Overflow +4 * 32 = Overflow +4 * 16 = 64 +4 * 8 = 32 +4 * 4 = 16 +5 * 64 = Overflow +5 * 32 = Overflow +5 * 16 = 80 +5 * 8 = 40 +5 * 4 = 20 +6 * 64 = Overflow +6 * 32 = Overflow +6 * 16 = 96 +6 * 8 = 48 +6 * 4 = 24 +7 * 64 = Overflow +7 * 32 = Overflow +7 * 16 = 112 +7 * 8 = 56 +7 * 4 = 28 +8 * 64 = Overflow +8 * 32 = Overflow +8 * 16 = Overflow +8 * 8 = 64 +8 * 4 = 32 +9 * 64 = Overflow +9 * 32 = Overflow +9 * 16 = Overflow +9 * 8 = 72 +9 * 4 = 36 +10 * 64 = Overflow +10 * 32 = Overflow +10 * 16 = Overflow +10 * 8 = 80 +10 * 4 = 40 +11 * 64 = Overflow +11 * 32 = Overflow +11 * 16 = Overflow +11 * 8 = 88 +11 * 4 = 44 +12 * 64 = Overflow +12 * 32 = Overflow +12 * 16 = Overflow +12 * 8 = 96 +12 * 4 = 48 +13 * 64 = Overflow +13 * 32 = Overflow +13 * 16 = Overflow +13 * 8 = 104 +13 * 4 = 52 +14 * 64 = Overflow +14 * 32 = Overflow +14 * 16 = Overflow +14 * 8 = 112 +14 * 4 = 56 +15 * 64 = Overflow +15 * 32 = Overflow +15 * 16 = Overflow +15 * 8 = 120 +15 * 4 = 60 +16 * 64 = Overflow +16 * 32 = Overflow +16 * 16 = Overflow +16 * 8 = Overflow +16 * 4 = 64 +17 * 64 = Overflow +17 * 32 = Overflow +17 * 16 = Overflow +17 * 8 = Overflow +17 * 4 = 68 +18 * 64 = Overflow +18 * 32 = Overflow +18 * 16 = Overflow +18 * 8 = Overflow +18 * 4 = 72 +19 * 64 = Overflow +19 * 32 = Overflow +19 * 16 = Overflow +19 * 8 = Overflow +19 * 4 = 76 +20 * 64 = Overflow +20 * 32 = Overflow +20 * 16 = Overflow +20 * 8 = Overflow +20 * 4 = 80 +21 * 64 = Overflow +21 * 32 = Overflow +21 * 16 = Overflow +21 * 8 = Overflow +21 * 4 = 84 +22 * 64 = Overflow +22 * 32 = Overflow +22 * 16 = Overflow +22 * 8 = Overflow +22 * 4 = 88 +23 * 64 = Overflow +23 * 32 = Overflow +23 * 16 = Overflow +23 * 8 = Overflow +23 * 4 = 92 +24 * 64 = Overflow +24 * 32 = Overflow +24 * 16 = Overflow +24 * 8 = Overflow +24 * 4 = 96 +25 * 64 = Overflow +25 * 32 = Overflow +25 * 16 = Overflow +25 * 8 = Overflow +25 * 4 = 100 +26 * 64 = Overflow +26 * 32 = Overflow +26 * 16 = Overflow +26 * 8 = Overflow +26 * 4 = 104 +27 * 64 = Overflow +27 * 32 = Overflow +27 * 16 = Overflow +27 * 8 = Overflow +27 * 4 = 108 +28 * 64 = Overflow +28 * 32 = Overflow +28 * 16 = Overflow +28 * 8 = Overflow +28 * 4 = 112 +29 * 64 = Overflow +29 * 32 = Overflow +29 * 16 = Overflow +29 * 8 = Overflow +29 * 4 = 116 +30 * 64 = Overflow +30 * 32 = Overflow +30 * 16 = Overflow +30 * 8 = Overflow +30 * 4 = 120 +31 * 64 = Overflow +31 * 32 = Overflow +31 * 16 = Overflow +31 * 8 = Overflow +31 * 4 = 124 +32 * 64 = Overflow +32 * 32 = Overflow +32 * 16 = Overflow +32 * 8 = Overflow +32 * 4 = Overflow +~32 * ~128 = Overflow +~32 * ~64 = Overflow +~32 * ~32 = Overflow +~32 * ~16 = Overflow +~32 * ~8 = Overflow +~31 * ~128 = Overflow +~31 * ~64 = Overflow +~31 * ~32 = Overflow +~31 * ~16 = Overflow +~31 * ~8 = Overflow +~30 * ~128 = Overflow +~30 * ~64 = Overflow +~30 * ~32 = Overflow +~30 * ~16 = Overflow +~30 * ~8 = Overflow +~29 * ~128 = Overflow +~29 * ~64 = Overflow +~29 * ~32 = Overflow +~29 * ~16 = Overflow +~29 * ~8 = Overflow +~28 * ~128 = Overflow +~28 * ~64 = Overflow +~28 * ~32 = Overflow +~28 * ~16 = Overflow +~28 * ~8 = Overflow +~27 * ~128 = Overflow +~27 * ~64 = Overflow +~27 * ~32 = Overflow +~27 * ~16 = Overflow +~27 * ~8 = Overflow +~26 * ~128 = Overflow +~26 * ~64 = Overflow +~26 * ~32 = Overflow +~26 * ~16 = Overflow +~26 * ~8 = Overflow +~25 * ~128 = Overflow +~25 * ~64 = Overflow +~25 * ~32 = Overflow +~25 * ~16 = Overflow +~25 * ~8 = Overflow +~24 * ~128 = Overflow +~24 * ~64 = Overflow +~24 * ~32 = Overflow +~24 * ~16 = Overflow +~24 * ~8 = Overflow +~23 * ~128 = Overflow +~23 * ~64 = Overflow +~23 * ~32 = Overflow +~23 * ~16 = Overflow +~23 * ~8 = Overflow +~22 * ~128 = Overflow +~22 * ~64 = Overflow +~22 * ~32 = Overflow +~22 * ~16 = Overflow +~22 * ~8 = Overflow +~21 * ~128 = Overflow +~21 * ~64 = Overflow +~21 * ~32 = Overflow +~21 * ~16 = Overflow +~21 * ~8 = Overflow +~20 * ~128 = Overflow +~20 * ~64 = Overflow +~20 * ~32 = Overflow +~20 * ~16 = Overflow +~20 * ~8 = Overflow +~19 * ~128 = Overflow +~19 * ~64 = Overflow +~19 * ~32 = Overflow +~19 * ~16 = Overflow +~19 * ~8 = Overflow +~18 * ~128 = Overflow +~18 * ~64 = Overflow +~18 * ~32 = Overflow +~18 * ~16 = Overflow +~18 * ~8 = Overflow +~17 * ~128 = Overflow +~17 * ~64 = Overflow +~17 * ~32 = Overflow +~17 * ~16 = Overflow +~17 * ~8 = Overflow +~16 * ~128 = Overflow +~16 * ~64 = Overflow +~16 * ~32 = Overflow +~16 * ~16 = Overflow +~16 * ~8 = Overflow +~15 * ~128 = Overflow +~15 * ~64 = Overflow +~15 * ~32 = Overflow +~15 * ~16 = Overflow +~15 * ~8 = 120 +~14 * ~128 = Overflow +~14 * ~64 = Overflow +~14 * ~32 = Overflow +~14 * ~16 = Overflow +~14 * ~8 = 112 +~13 * ~128 = Overflow +~13 * ~64 = Overflow +~13 * ~32 = Overflow +~13 * ~16 = Overflow +~13 * ~8 = 104 +~12 * ~128 = Overflow +~12 * ~64 = Overflow +~12 * ~32 = Overflow +~12 * ~16 = Overflow +~12 * ~8 = 96 +~11 * ~128 = Overflow +~11 * ~64 = Overflow +~11 * ~32 = Overflow +~11 * ~16 = Overflow +~11 * ~8 = 88 +~10 * ~128 = Overflow +~10 * ~64 = Overflow +~10 * ~32 = Overflow +~10 * ~16 = Overflow +~10 * ~8 = 80 +~9 * ~128 = Overflow +~9 * ~64 = Overflow +~9 * ~32 = Overflow +~9 * ~16 = Overflow +~9 * ~8 = 72 +~8 * ~128 = Overflow +~8 * ~64 = Overflow +~8 * ~32 = Overflow +~8 * ~16 = Overflow +~8 * ~8 = 64 +~7 * ~128 = Overflow +~7 * ~64 = Overflow +~7 * ~32 = Overflow +~7 * ~16 = 112 +~7 * ~8 = 56 +~6 * ~128 = Overflow +~6 * ~64 = Overflow +~6 * ~32 = Overflow +~6 * ~16 = 96 +~6 * ~8 = 48 +~5 * ~128 = Overflow +~5 * ~64 = Overflow +~5 * ~32 = Overflow +~5 * ~16 = 80 +~5 * ~8 = 40 +~4 * ~128 = Overflow +~4 * ~64 = Overflow +~4 * ~32 = Overflow +~4 * ~16 = 64 +~4 * ~8 = 32 +~3 * ~128 = Overflow +~3 * ~64 = Overflow +~3 * ~32 = 96 +~3 * ~16 = 48 +~3 * ~8 = 24 +~2 * ~128 = Overflow +~2 * ~64 = Overflow +~2 * ~32 = 64 +~2 * ~16 = 32 +~2 * ~8 = 16 +~1 * ~128 = Overflow +~1 * ~64 = 64 +~1 * ~32 = 32 +~1 * ~16 = 16 +~1 * ~8 = 8 +0 * ~128 = 0 +0 * ~64 = 0 +0 * ~32 = 0 +0 * ~16 = 0 +0 * ~8 = 0 +1 * ~128 = ~128 +1 * ~64 = ~64 +1 * ~32 = ~32 +1 * ~16 = ~16 +1 * ~8 = ~8 +2 * ~128 = Overflow +2 * ~64 = ~128 +2 * ~32 = ~64 +2 * ~16 = ~32 +2 * ~8 = ~16 +3 * ~128 = Overflow +3 * ~64 = Overflow +3 * ~32 = ~96 +3 * ~16 = ~48 +3 * ~8 = ~24 +4 * ~128 = Overflow +4 * ~64 = Overflow +4 * ~32 = ~128 +4 * ~16 = ~64 +4 * ~8 = ~32 +5 * ~128 = Overflow +5 * ~64 = Overflow +5 * ~32 = Overflow +5 * ~16 = ~80 +5 * ~8 = ~40 +6 * ~128 = Overflow +6 * ~64 = Overflow +6 * ~32 = Overflow +6 * ~16 = ~96 +6 * ~8 = ~48 +7 * ~128 = Overflow +7 * ~64 = Overflow +7 * ~32 = Overflow +7 * ~16 = ~112 +7 * ~8 = ~56 +8 * ~128 = Overflow +8 * ~64 = Overflow +8 * ~32 = Overflow +8 * ~16 = ~128 +8 * ~8 = ~64 +9 * ~128 = Overflow +9 * ~64 = Overflow +9 * ~32 = Overflow +9 * ~16 = Overflow +9 * ~8 = ~72 +10 * ~128 = Overflow +10 * ~64 = Overflow +10 * ~32 = Overflow +10 * ~16 = Overflow +10 * ~8 = ~80 +11 * ~128 = Overflow +11 * ~64 = Overflow +11 * ~32 = Overflow +11 * ~16 = Overflow +11 * ~8 = ~88 +12 * ~128 = Overflow +12 * ~64 = Overflow +12 * ~32 = Overflow +12 * ~16 = Overflow +12 * ~8 = ~96 +13 * ~128 = Overflow +13 * ~64 = Overflow +13 * ~32 = Overflow +13 * ~16 = Overflow +13 * ~8 = ~104 +14 * ~128 = Overflow +14 * ~64 = Overflow +14 * ~32 = Overflow +14 * ~16 = Overflow +14 * ~8 = ~112 +15 * ~128 = Overflow +15 * ~64 = Overflow +15 * ~32 = Overflow +15 * ~16 = Overflow +15 * ~8 = ~120 +16 * ~128 = Overflow +16 * ~64 = Overflow +16 * ~32 = Overflow +16 * ~16 = Overflow +16 * ~8 = ~128 +17 * ~128 = Overflow +17 * ~64 = Overflow +17 * ~32 = Overflow +17 * ~16 = Overflow +17 * ~8 = Overflow +18 * ~128 = Overflow +18 * ~64 = Overflow +18 * ~32 = Overflow +18 * ~16 = Overflow +18 * ~8 = Overflow +19 * ~128 = Overflow +19 * ~64 = Overflow +19 * ~32 = Overflow +19 * ~16 = Overflow +19 * ~8 = Overflow +20 * ~128 = Overflow +20 * ~64 = Overflow +20 * ~32 = Overflow +20 * ~16 = Overflow +20 * ~8 = Overflow +21 * ~128 = Overflow +21 * ~64 = Overflow +21 * ~32 = Overflow +21 * ~16 = Overflow +21 * ~8 = Overflow +22 * ~128 = Overflow +22 * ~64 = Overflow +22 * ~32 = Overflow +22 * ~16 = Overflow +22 * ~8 = Overflow +23 * ~128 = Overflow +23 * ~64 = Overflow +23 * ~32 = Overflow +23 * ~16 = Overflow +23 * ~8 = Overflow +24 * ~128 = Overflow +24 * ~64 = Overflow +24 * ~32 = Overflow +24 * ~16 = Overflow +24 * ~8 = Overflow +25 * ~128 = Overflow +25 * ~64 = Overflow +25 * ~32 = Overflow +25 * ~16 = Overflow +25 * ~8 = Overflow +26 * ~128 = Overflow +26 * ~64 = Overflow +26 * ~32 = Overflow +26 * ~16 = Overflow +26 * ~8 = Overflow +27 * ~128 = Overflow +27 * ~64 = Overflow +27 * ~32 = Overflow +27 * ~16 = Overflow +27 * ~8 = Overflow +28 * ~128 = Overflow +28 * ~64 = Overflow +28 * ~32 = Overflow +28 * ~16 = Overflow +28 * ~8 = Overflow +29 * ~128 = Overflow +29 * ~64 = Overflow +29 * ~32 = Overflow +29 * ~16 = Overflow +29 * ~8 = Overflow +30 * ~128 = Overflow +30 * ~64 = Overflow +30 * ~32 = Overflow +30 * ~16 = Overflow +30 * ~8 = Overflow +31 * ~128 = Overflow +31 * ~64 = Overflow +31 * ~32 = Overflow +31 * ~16 = Overflow +31 * ~8 = Overflow +32 * ~128 = Overflow +32 * ~64 = Overflow +32 * ~32 = Overflow +32 * ~16 = Overflow +32 * ~8 = Overflow +~128 * 1 = ~128 +~128 * 2 = Overflow +~128 * 4 = Overflow +~128 * 8 = Overflow +~128 * 16 = Overflow +~64 * 1 = ~64 +~64 * 2 = ~128 +~64 * 4 = Overflow +~64 * 8 = Overflow +~64 * 16 = Overflow +~32 * 1 = ~32 +~32 * 2 = ~64 +~32 * 4 = ~128 +~32 * 8 = Overflow +~32 * 16 = Overflow +~16 * 1 = ~16 +~16 * 2 = ~32 +~16 * 4 = ~64 +~16 * 8 = ~128 +~16 * 16 = Overflow +~8 * 1 = ~8 +~8 * 2 = ~16 +~8 * 4 = ~32 +~8 * 8 = ~64 +~8 * 16 = ~128 +~4 * 1 = ~4 +~4 * 2 = ~8 +~4 * 4 = ~16 +~4 * 8 = ~32 +~4 * 16 = ~64 +~4 * 1 = ~4 +~4 * 2 = ~8 +~4 * 4 = ~16 +~4 * 8 = ~32 +~4 * 16 = ~64 +~3 * 1 = ~3 +~3 * 2 = ~6 +~3 * 4 = ~12 +~3 * 8 = ~24 +~3 * 16 = ~48 +~2 * 1 = ~2 +~2 * 2 = ~4 +~2 * 4 = ~8 +~2 * 8 = ~16 +~2 * 16 = ~32 +~1 * 1 = ~1 +~1 * 2 = ~2 +~1 * 4 = ~4 +~1 * 8 = ~8 +~1 * 16 = ~16 +0 * 1 = 0 +0 * 2 = 0 +0 * 4 = 0 +0 * 8 = 0 +0 * 16 = 0 +1 * 1 = 1 +1 * 2 = 2 +1 * 4 = 4 +1 * 8 = 8 +1 * 16 = 16 +2 * 1 = 2 +2 * 2 = 4 +2 * 4 = 8 +2 * 8 = 16 +2 * 16 = 32 +3 * 1 = 3 +3 * 2 = 6 +3 * 4 = 12 +3 * 8 = 24 +3 * 16 = 48 +4 * 1 = 4 +4 * 2 = 8 +4 * 4 = 16 +4 * 8 = 32 +4 * 16 = 64 +2 * 1 = 2 +2 * 2 = 4 +2 * 4 = 8 +2 * 8 = 16 +2 * 16 = 32 +4 * 1 = 4 +4 * 2 = 8 +4 * 4 = 16 +4 * 8 = 32 +4 * 16 = 64 +8 * 1 = 8 +8 * 2 = 16 +8 * 4 = 32 +8 * 8 = 64 +8 * 16 = Overflow +16 * 1 = 16 +16 * 2 = 32 +16 * 4 = 64 +16 * 8 = Overflow +16 * 16 = Overflow +32 * 1 = 32 +32 * 2 = 64 +32 * 4 = Overflow +32 * 8 = Overflow +32 * 16 = Overflow +64 * 1 = 64 +64 * 2 = Overflow +64 * 4 = Overflow +64 * 8 = Overflow +64 * 16 = Overflow +~128 * ~1 = Overflow +~128 * ~2 = Overflow +~128 * ~4 = Overflow +~128 * ~8 = Overflow +~128 * ~16 = Overflow +~64 * ~1 = 64 +~64 * ~2 = Overflow +~64 * ~4 = Overflow +~64 * ~8 = Overflow +~64 * ~16 = Overflow +~32 * ~1 = 32 +~32 * ~2 = 64 +~32 * ~4 = Overflow +~32 * ~8 = Overflow +~32 * ~16 = Overflow +~16 * ~1 = 16 +~16 * ~2 = 32 +~16 * ~4 = 64 +~16 * ~8 = Overflow +~16 * ~16 = Overflow +~8 * ~1 = 8 +~8 * ~2 = 16 +~8 * ~4 = 32 +~8 * ~8 = 64 +~8 * ~16 = Overflow +~4 * ~1 = 4 +~4 * ~2 = 8 +~4 * ~4 = 16 +~4 * ~8 = 32 +~4 * ~16 = 64 +~4 * ~1 = 4 +~4 * ~2 = 8 +~4 * ~4 = 16 +~4 * ~8 = 32 +~4 * ~16 = 64 +~3 * ~1 = 3 +~3 * ~2 = 6 +~3 * ~4 = 12 +~3 * ~8 = 24 +~3 * ~16 = 48 +~2 * ~1 = 2 +~2 * ~2 = 4 +~2 * ~4 = 8 +~2 * ~8 = 16 +~2 * ~16 = 32 +~1 * ~1 = 1 +~1 * ~2 = 2 +~1 * ~4 = 4 +~1 * ~8 = 8 +~1 * ~16 = 16 +0 * ~1 = 0 +0 * ~2 = 0 +0 * ~4 = 0 +0 * ~8 = 0 +0 * ~16 = 0 +1 * ~1 = ~1 +1 * ~2 = ~2 +1 * ~4 = ~4 +1 * ~8 = ~8 +1 * ~16 = ~16 +2 * ~1 = ~2 +2 * ~2 = ~4 +2 * ~4 = ~8 +2 * ~8 = ~16 +2 * ~16 = ~32 +3 * ~1 = ~3 +3 * ~2 = ~6 +3 * ~4 = ~12 +3 * ~8 = ~24 +3 * ~16 = ~48 +4 * ~1 = ~4 +4 * ~2 = ~8 +4 * ~4 = ~16 +4 * ~8 = ~32 +4 * ~16 = ~64 +2 * ~1 = ~2 +2 * ~2 = ~4 +2 * ~4 = ~8 +2 * ~8 = ~16 +2 * ~16 = ~32 +4 * ~1 = ~4 +4 * ~2 = ~8 +4 * ~4 = ~16 +4 * ~8 = ~32 +4 * ~16 = ~64 +8 * ~1 = ~8 +8 * ~2 = ~16 +8 * ~4 = ~32 +8 * ~8 = ~64 +8 * ~16 = ~128 +16 * ~1 = ~16 +16 * ~2 = ~32 +16 * ~4 = ~64 +16 * ~8 = ~128 +16 * ~16 = Overflow +32 * ~1 = ~32 +32 * ~2 = ~64 +32 * ~4 = ~128 +32 * ~8 = Overflow +32 * ~16 = Overflow +64 * ~1 = ~64 +64 * ~2 = ~128 +64 * ~4 = Overflow +64 * ~8 = Overflow +64 * ~16 = Overflow +~32 * 16384 = Overflow +~32 * 8192 = Overflow +~32 * 4096 = Overflow +~32 * 2048 = Overflow +~32 * 1024 = ~32768 +~31 * 16384 = Overflow +~31 * 8192 = Overflow +~31 * 4096 = Overflow +~31 * 2048 = Overflow +~31 * 1024 = ~31744 +~30 * 16384 = Overflow +~30 * 8192 = Overflow +~30 * 4096 = Overflow +~30 * 2048 = Overflow +~30 * 1024 = ~30720 +~29 * 16384 = Overflow +~29 * 8192 = Overflow +~29 * 4096 = Overflow +~29 * 2048 = Overflow +~29 * 1024 = ~29696 +~28 * 16384 = Overflow +~28 * 8192 = Overflow +~28 * 4096 = Overflow +~28 * 2048 = Overflow +~28 * 1024 = ~28672 +~27 * 16384 = Overflow +~27 * 8192 = Overflow +~27 * 4096 = Overflow +~27 * 2048 = Overflow +~27 * 1024 = ~27648 +~26 * 16384 = Overflow +~26 * 8192 = Overflow +~26 * 4096 = Overflow +~26 * 2048 = Overflow +~26 * 1024 = ~26624 +~25 * 16384 = Overflow +~25 * 8192 = Overflow +~25 * 4096 = Overflow +~25 * 2048 = Overflow +~25 * 1024 = ~25600 +~24 * 16384 = Overflow +~24 * 8192 = Overflow +~24 * 4096 = Overflow +~24 * 2048 = Overflow +~24 * 1024 = ~24576 +~23 * 16384 = Overflow +~23 * 8192 = Overflow +~23 * 4096 = Overflow +~23 * 2048 = Overflow +~23 * 1024 = ~23552 +~22 * 16384 = Overflow +~22 * 8192 = Overflow +~22 * 4096 = Overflow +~22 * 2048 = Overflow +~22 * 1024 = ~22528 +~21 * 16384 = Overflow +~21 * 8192 = Overflow +~21 * 4096 = Overflow +~21 * 2048 = Overflow +~21 * 1024 = ~21504 +~20 * 16384 = Overflow +~20 * 8192 = Overflow +~20 * 4096 = Overflow +~20 * 2048 = Overflow +~20 * 1024 = ~20480 +~19 * 16384 = Overflow +~19 * 8192 = Overflow +~19 * 4096 = Overflow +~19 * 2048 = Overflow +~19 * 1024 = ~19456 +~18 * 16384 = Overflow +~18 * 8192 = Overflow +~18 * 4096 = Overflow +~18 * 2048 = Overflow +~18 * 1024 = ~18432 +~17 * 16384 = Overflow +~17 * 8192 = Overflow +~17 * 4096 = Overflow +~17 * 2048 = Overflow +~17 * 1024 = ~17408 +~16 * 16384 = Overflow +~16 * 8192 = Overflow +~16 * 4096 = Overflow +~16 * 2048 = ~32768 +~16 * 1024 = ~16384 +~15 * 16384 = Overflow +~15 * 8192 = Overflow +~15 * 4096 = Overflow +~15 * 2048 = ~30720 +~15 * 1024 = ~15360 +~14 * 16384 = Overflow +~14 * 8192 = Overflow +~14 * 4096 = Overflow +~14 * 2048 = ~28672 +~14 * 1024 = ~14336 +~13 * 16384 = Overflow +~13 * 8192 = Overflow +~13 * 4096 = Overflow +~13 * 2048 = ~26624 +~13 * 1024 = ~13312 +~12 * 16384 = Overflow +~12 * 8192 = Overflow +~12 * 4096 = Overflow +~12 * 2048 = ~24576 +~12 * 1024 = ~12288 +~11 * 16384 = Overflow +~11 * 8192 = Overflow +~11 * 4096 = Overflow +~11 * 2048 = ~22528 +~11 * 1024 = ~11264 +~10 * 16384 = Overflow +~10 * 8192 = Overflow +~10 * 4096 = Overflow +~10 * 2048 = ~20480 +~10 * 1024 = ~10240 +~9 * 16384 = Overflow +~9 * 8192 = Overflow +~9 * 4096 = Overflow +~9 * 2048 = ~18432 +~9 * 1024 = ~9216 +~8 * 16384 = Overflow +~8 * 8192 = Overflow +~8 * 4096 = ~32768 +~8 * 2048 = ~16384 +~8 * 1024 = ~8192 +~7 * 16384 = Overflow +~7 * 8192 = Overflow +~7 * 4096 = ~28672 +~7 * 2048 = ~14336 +~7 * 1024 = ~7168 +~6 * 16384 = Overflow +~6 * 8192 = Overflow +~6 * 4096 = ~24576 +~6 * 2048 = ~12288 +~6 * 1024 = ~6144 +~5 * 16384 = Overflow +~5 * 8192 = Overflow +~5 * 4096 = ~20480 +~5 * 2048 = ~10240 +~5 * 1024 = ~5120 +~4 * 16384 = Overflow +~4 * 8192 = ~32768 +~4 * 4096 = ~16384 +~4 * 2048 = ~8192 +~4 * 1024 = ~4096 +~3 * 16384 = Overflow +~3 * 8192 = ~24576 +~3 * 4096 = ~12288 +~3 * 2048 = ~6144 +~3 * 1024 = ~3072 +~2 * 16384 = ~32768 +~2 * 8192 = ~16384 +~2 * 4096 = ~8192 +~2 * 2048 = ~4096 +~2 * 1024 = ~2048 +~1 * 16384 = ~16384 +~1 * 8192 = ~8192 +~1 * 4096 = ~4096 +~1 * 2048 = ~2048 +~1 * 1024 = ~1024 +0 * 16384 = 0 +0 * 8192 = 0 +0 * 4096 = 0 +0 * 2048 = 0 +0 * 1024 = 0 +1 * 16384 = 16384 +1 * 8192 = 8192 +1 * 4096 = 4096 +1 * 2048 = 2048 +1 * 1024 = 1024 +2 * 16384 = Overflow +2 * 8192 = 16384 +2 * 4096 = 8192 +2 * 2048 = 4096 +2 * 1024 = 2048 +3 * 16384 = Overflow +3 * 8192 = 24576 +3 * 4096 = 12288 +3 * 2048 = 6144 +3 * 1024 = 3072 +4 * 16384 = Overflow +4 * 8192 = Overflow +4 * 4096 = 16384 +4 * 2048 = 8192 +4 * 1024 = 4096 +5 * 16384 = Overflow +5 * 8192 = Overflow +5 * 4096 = 20480 +5 * 2048 = 10240 +5 * 1024 = 5120 +6 * 16384 = Overflow +6 * 8192 = Overflow +6 * 4096 = 24576 +6 * 2048 = 12288 +6 * 1024 = 6144 +7 * 16384 = Overflow +7 * 8192 = Overflow +7 * 4096 = 28672 +7 * 2048 = 14336 +7 * 1024 = 7168 +8 * 16384 = Overflow +8 * 8192 = Overflow +8 * 4096 = Overflow +8 * 2048 = 16384 +8 * 1024 = 8192 +9 * 16384 = Overflow +9 * 8192 = Overflow +9 * 4096 = Overflow +9 * 2048 = 18432 +9 * 1024 = 9216 +10 * 16384 = Overflow +10 * 8192 = Overflow +10 * 4096 = Overflow +10 * 2048 = 20480 +10 * 1024 = 10240 +11 * 16384 = Overflow +11 * 8192 = Overflow +11 * 4096 = Overflow +11 * 2048 = 22528 +11 * 1024 = 11264 +12 * 16384 = Overflow +12 * 8192 = Overflow +12 * 4096 = Overflow +12 * 2048 = 24576 +12 * 1024 = 12288 +13 * 16384 = Overflow +13 * 8192 = Overflow +13 * 4096 = Overflow +13 * 2048 = 26624 +13 * 1024 = 13312 +14 * 16384 = Overflow +14 * 8192 = Overflow +14 * 4096 = Overflow +14 * 2048 = 28672 +14 * 1024 = 14336 +15 * 16384 = Overflow +15 * 8192 = Overflow +15 * 4096 = Overflow +15 * 2048 = 30720 +15 * 1024 = 15360 +16 * 16384 = Overflow +16 * 8192 = Overflow +16 * 4096 = Overflow +16 * 2048 = Overflow +16 * 1024 = 16384 +17 * 16384 = Overflow +17 * 8192 = Overflow +17 * 4096 = Overflow +17 * 2048 = Overflow +17 * 1024 = 17408 +18 * 16384 = Overflow +18 * 8192 = Overflow +18 * 4096 = Overflow +18 * 2048 = Overflow +18 * 1024 = 18432 +19 * 16384 = Overflow +19 * 8192 = Overflow +19 * 4096 = Overflow +19 * 2048 = Overflow +19 * 1024 = 19456 +20 * 16384 = Overflow +20 * 8192 = Overflow +20 * 4096 = Overflow +20 * 2048 = Overflow +20 * 1024 = 20480 +21 * 16384 = Overflow +21 * 8192 = Overflow +21 * 4096 = Overflow +21 * 2048 = Overflow +21 * 1024 = 21504 +22 * 16384 = Overflow +22 * 8192 = Overflow +22 * 4096 = Overflow +22 * 2048 = Overflow +22 * 1024 = 22528 +23 * 16384 = Overflow +23 * 8192 = Overflow +23 * 4096 = Overflow +23 * 2048 = Overflow +23 * 1024 = 23552 +24 * 16384 = Overflow +24 * 8192 = Overflow +24 * 4096 = Overflow +24 * 2048 = Overflow +24 * 1024 = 24576 +25 * 16384 = Overflow +25 * 8192 = Overflow +25 * 4096 = Overflow +25 * 2048 = Overflow +25 * 1024 = 25600 +26 * 16384 = Overflow +26 * 8192 = Overflow +26 * 4096 = Overflow +26 * 2048 = Overflow +26 * 1024 = 26624 +27 * 16384 = Overflow +27 * 8192 = Overflow +27 * 4096 = Overflow +27 * 2048 = Overflow +27 * 1024 = 27648 +28 * 16384 = Overflow +28 * 8192 = Overflow +28 * 4096 = Overflow +28 * 2048 = Overflow +28 * 1024 = 28672 +29 * 16384 = Overflow +29 * 8192 = Overflow +29 * 4096 = Overflow +29 * 2048 = Overflow +29 * 1024 = 29696 +30 * 16384 = Overflow +30 * 8192 = Overflow +30 * 4096 = Overflow +30 * 2048 = Overflow +30 * 1024 = 30720 +31 * 16384 = Overflow +31 * 8192 = Overflow +31 * 4096 = Overflow +31 * 2048 = Overflow +31 * 1024 = 31744 +32 * 16384 = Overflow +32 * 8192 = Overflow +32 * 4096 = Overflow +32 * 2048 = Overflow +32 * 1024 = Overflow +~32 * ~32768 = Overflow +~32 * ~16384 = Overflow +~32 * ~8192 = Overflow +~32 * ~4096 = Overflow +~32 * ~2048 = Overflow +~31 * ~32768 = Overflow +~31 * ~16384 = Overflow +~31 * ~8192 = Overflow +~31 * ~4096 = Overflow +~31 * ~2048 = Overflow +~30 * ~32768 = Overflow +~30 * ~16384 = Overflow +~30 * ~8192 = Overflow +~30 * ~4096 = Overflow +~30 * ~2048 = Overflow +~29 * ~32768 = Overflow +~29 * ~16384 = Overflow +~29 * ~8192 = Overflow +~29 * ~4096 = Overflow +~29 * ~2048 = Overflow +~28 * ~32768 = Overflow +~28 * ~16384 = Overflow +~28 * ~8192 = Overflow +~28 * ~4096 = Overflow +~28 * ~2048 = Overflow +~27 * ~32768 = Overflow +~27 * ~16384 = Overflow +~27 * ~8192 = Overflow +~27 * ~4096 = Overflow +~27 * ~2048 = Overflow +~26 * ~32768 = Overflow +~26 * ~16384 = Overflow +~26 * ~8192 = Overflow +~26 * ~4096 = Overflow +~26 * ~2048 = Overflow +~25 * ~32768 = Overflow +~25 * ~16384 = Overflow +~25 * ~8192 = Overflow +~25 * ~4096 = Overflow +~25 * ~2048 = Overflow +~24 * ~32768 = Overflow +~24 * ~16384 = Overflow +~24 * ~8192 = Overflow +~24 * ~4096 = Overflow +~24 * ~2048 = Overflow +~23 * ~32768 = Overflow +~23 * ~16384 = Overflow +~23 * ~8192 = Overflow +~23 * ~4096 = Overflow +~23 * ~2048 = Overflow +~22 * ~32768 = Overflow +~22 * ~16384 = Overflow +~22 * ~8192 = Overflow +~22 * ~4096 = Overflow +~22 * ~2048 = Overflow +~21 * ~32768 = Overflow +~21 * ~16384 = Overflow +~21 * ~8192 = Overflow +~21 * ~4096 = Overflow +~21 * ~2048 = Overflow +~20 * ~32768 = Overflow +~20 * ~16384 = Overflow +~20 * ~8192 = Overflow +~20 * ~4096 = Overflow +~20 * ~2048 = Overflow +~19 * ~32768 = Overflow +~19 * ~16384 = Overflow +~19 * ~8192 = Overflow +~19 * ~4096 = Overflow +~19 * ~2048 = Overflow +~18 * ~32768 = Overflow +~18 * ~16384 = Overflow +~18 * ~8192 = Overflow +~18 * ~4096 = Overflow +~18 * ~2048 = Overflow +~17 * ~32768 = Overflow +~17 * ~16384 = Overflow +~17 * ~8192 = Overflow +~17 * ~4096 = Overflow +~17 * ~2048 = Overflow +~16 * ~32768 = Overflow +~16 * ~16384 = Overflow +~16 * ~8192 = Overflow +~16 * ~4096 = Overflow +~16 * ~2048 = Overflow +~15 * ~32768 = Overflow +~15 * ~16384 = Overflow +~15 * ~8192 = Overflow +~15 * ~4096 = Overflow +~15 * ~2048 = 30720 +~14 * ~32768 = Overflow +~14 * ~16384 = Overflow +~14 * ~8192 = Overflow +~14 * ~4096 = Overflow +~14 * ~2048 = 28672 +~13 * ~32768 = Overflow +~13 * ~16384 = Overflow +~13 * ~8192 = Overflow +~13 * ~4096 = Overflow +~13 * ~2048 = 26624 +~12 * ~32768 = Overflow +~12 * ~16384 = Overflow +~12 * ~8192 = Overflow +~12 * ~4096 = Overflow +~12 * ~2048 = 24576 +~11 * ~32768 = Overflow +~11 * ~16384 = Overflow +~11 * ~8192 = Overflow +~11 * ~4096 = Overflow +~11 * ~2048 = 22528 +~10 * ~32768 = Overflow +~10 * ~16384 = Overflow +~10 * ~8192 = Overflow +~10 * ~4096 = Overflow +~10 * ~2048 = 20480 +~9 * ~32768 = Overflow +~9 * ~16384 = Overflow +~9 * ~8192 = Overflow +~9 * ~4096 = Overflow +~9 * ~2048 = 18432 +~8 * ~32768 = Overflow +~8 * ~16384 = Overflow +~8 * ~8192 = Overflow +~8 * ~4096 = Overflow +~8 * ~2048 = 16384 +~7 * ~32768 = Overflow +~7 * ~16384 = Overflow +~7 * ~8192 = Overflow +~7 * ~4096 = 28672 +~7 * ~2048 = 14336 +~6 * ~32768 = Overflow +~6 * ~16384 = Overflow +~6 * ~8192 = Overflow +~6 * ~4096 = 24576 +~6 * ~2048 = 12288 +~5 * ~32768 = Overflow +~5 * ~16384 = Overflow +~5 * ~8192 = Overflow +~5 * ~4096 = 20480 +~5 * ~2048 = 10240 +~4 * ~32768 = Overflow +~4 * ~16384 = Overflow +~4 * ~8192 = Overflow +~4 * ~4096 = 16384 +~4 * ~2048 = 8192 +~3 * ~32768 = Overflow +~3 * ~16384 = Overflow +~3 * ~8192 = 24576 +~3 * ~4096 = 12288 +~3 * ~2048 = 6144 +~2 * ~32768 = Overflow +~2 * ~16384 = Overflow +~2 * ~8192 = 16384 +~2 * ~4096 = 8192 +~2 * ~2048 = 4096 +~1 * ~32768 = Overflow +~1 * ~16384 = 16384 +~1 * ~8192 = 8192 +~1 * ~4096 = 4096 +~1 * ~2048 = 2048 +0 * ~32768 = 0 +0 * ~16384 = 0 +0 * ~8192 = 0 +0 * ~4096 = 0 +0 * ~2048 = 0 +1 * ~32768 = ~32768 +1 * ~16384 = ~16384 +1 * ~8192 = ~8192 +1 * ~4096 = ~4096 +1 * ~2048 = ~2048 +2 * ~32768 = Overflow +2 * ~16384 = ~32768 +2 * ~8192 = ~16384 +2 * ~4096 = ~8192 +2 * ~2048 = ~4096 +3 * ~32768 = Overflow +3 * ~16384 = Overflow +3 * ~8192 = ~24576 +3 * ~4096 = ~12288 +3 * ~2048 = ~6144 +4 * ~32768 = Overflow +4 * ~16384 = Overflow +4 * ~8192 = ~32768 +4 * ~4096 = ~16384 +4 * ~2048 = ~8192 +5 * ~32768 = Overflow +5 * ~16384 = Overflow +5 * ~8192 = Overflow +5 * ~4096 = ~20480 +5 * ~2048 = ~10240 +6 * ~32768 = Overflow +6 * ~16384 = Overflow +6 * ~8192 = Overflow +6 * ~4096 = ~24576 +6 * ~2048 = ~12288 +7 * ~32768 = Overflow +7 * ~16384 = Overflow +7 * ~8192 = Overflow +7 * ~4096 = ~28672 +7 * ~2048 = ~14336 +8 * ~32768 = Overflow +8 * ~16384 = Overflow +8 * ~8192 = Overflow +8 * ~4096 = ~32768 +8 * ~2048 = ~16384 +9 * ~32768 = Overflow +9 * ~16384 = Overflow +9 * ~8192 = Overflow +9 * ~4096 = Overflow +9 * ~2048 = ~18432 +10 * ~32768 = Overflow +10 * ~16384 = Overflow +10 * ~8192 = Overflow +10 * ~4096 = Overflow +10 * ~2048 = ~20480 +11 * ~32768 = Overflow +11 * ~16384 = Overflow +11 * ~8192 = Overflow +11 * ~4096 = Overflow +11 * ~2048 = ~22528 +12 * ~32768 = Overflow +12 * ~16384 = Overflow +12 * ~8192 = Overflow +12 * ~4096 = Overflow +12 * ~2048 = ~24576 +13 * ~32768 = Overflow +13 * ~16384 = Overflow +13 * ~8192 = Overflow +13 * ~4096 = Overflow +13 * ~2048 = ~26624 +14 * ~32768 = Overflow +14 * ~16384 = Overflow +14 * ~8192 = Overflow +14 * ~4096 = Overflow +14 * ~2048 = ~28672 +15 * ~32768 = Overflow +15 * ~16384 = Overflow +15 * ~8192 = Overflow +15 * ~4096 = Overflow +15 * ~2048 = ~30720 +16 * ~32768 = Overflow +16 * ~16384 = Overflow +16 * ~8192 = Overflow +16 * ~4096 = Overflow +16 * ~2048 = ~32768 +17 * ~32768 = Overflow +17 * ~16384 = Overflow +17 * ~8192 = Overflow +17 * ~4096 = Overflow +17 * ~2048 = Overflow +18 * ~32768 = Overflow +18 * ~16384 = Overflow +18 * ~8192 = Overflow +18 * ~4096 = Overflow +18 * ~2048 = Overflow +19 * ~32768 = Overflow +19 * ~16384 = Overflow +19 * ~8192 = Overflow +19 * ~4096 = Overflow +19 * ~2048 = Overflow +20 * ~32768 = Overflow +20 * ~16384 = Overflow +20 * ~8192 = Overflow +20 * ~4096 = Overflow +20 * ~2048 = Overflow +21 * ~32768 = Overflow +21 * ~16384 = Overflow +21 * ~8192 = Overflow +21 * ~4096 = Overflow +21 * ~2048 = Overflow +22 * ~32768 = Overflow +22 * ~16384 = Overflow +22 * ~8192 = Overflow +22 * ~4096 = Overflow +22 * ~2048 = Overflow +23 * ~32768 = Overflow +23 * ~16384 = Overflow +23 * ~8192 = Overflow +23 * ~4096 = Overflow +23 * ~2048 = Overflow +24 * ~32768 = Overflow +24 * ~16384 = Overflow +24 * ~8192 = Overflow +24 * ~4096 = Overflow +24 * ~2048 = Overflow +25 * ~32768 = Overflow +25 * ~16384 = Overflow +25 * ~8192 = Overflow +25 * ~4096 = Overflow +25 * ~2048 = Overflow +26 * ~32768 = Overflow +26 * ~16384 = Overflow +26 * ~8192 = Overflow +26 * ~4096 = Overflow +26 * ~2048 = Overflow +27 * ~32768 = Overflow +27 * ~16384 = Overflow +27 * ~8192 = Overflow +27 * ~4096 = Overflow +27 * ~2048 = Overflow +28 * ~32768 = Overflow +28 * ~16384 = Overflow +28 * ~8192 = Overflow +28 * ~4096 = Overflow +28 * ~2048 = Overflow +29 * ~32768 = Overflow +29 * ~16384 = Overflow +29 * ~8192 = Overflow +29 * ~4096 = Overflow +29 * ~2048 = Overflow +30 * ~32768 = Overflow +30 * ~16384 = Overflow +30 * ~8192 = Overflow +30 * ~4096 = Overflow +30 * ~2048 = Overflow +31 * ~32768 = Overflow +31 * ~16384 = Overflow +31 * ~8192 = Overflow +31 * ~4096 = Overflow +31 * ~2048 = Overflow +32 * ~32768 = Overflow +32 * ~16384 = Overflow +32 * ~8192 = Overflow +32 * ~4096 = Overflow +32 * ~2048 = Overflow +~32768 * 1 = ~32768 +~32768 * 2 = Overflow +~32768 * 4 = Overflow +~32768 * 8 = Overflow +~32768 * 16 = Overflow +~16384 * 1 = ~16384 +~16384 * 2 = ~32768 +~16384 * 4 = Overflow +~16384 * 8 = Overflow +~16384 * 16 = Overflow +~8192 * 1 = ~8192 +~8192 * 2 = ~16384 +~8192 * 4 = ~32768 +~8192 * 8 = Overflow +~8192 * 16 = Overflow +~4096 * 1 = ~4096 +~4096 * 2 = ~8192 +~4096 * 4 = ~16384 +~4096 * 8 = ~32768 +~4096 * 16 = Overflow +~2048 * 1 = ~2048 +~2048 * 2 = ~4096 +~2048 * 4 = ~8192 +~2048 * 8 = ~16384 +~2048 * 16 = ~32768 +~1024 * 1 = ~1024 +~1024 * 2 = ~2048 +~1024 * 4 = ~4096 +~1024 * 8 = ~8192 +~1024 * 16 = ~16384 +~4 * 1 = ~4 +~4 * 2 = ~8 +~4 * 4 = ~16 +~4 * 8 = ~32 +~4 * 16 = ~64 +~3 * 1 = ~3 +~3 * 2 = ~6 +~3 * 4 = ~12 +~3 * 8 = ~24 +~3 * 16 = ~48 +~2 * 1 = ~2 +~2 * 2 = ~4 +~2 * 4 = ~8 +~2 * 8 = ~16 +~2 * 16 = ~32 +~1 * 1 = ~1 +~1 * 2 = ~2 +~1 * 4 = ~4 +~1 * 8 = ~8 +~1 * 16 = ~16 +0 * 1 = 0 +0 * 2 = 0 +0 * 4 = 0 +0 * 8 = 0 +0 * 16 = 0 +1 * 1 = 1 +1 * 2 = 2 +1 * 4 = 4 +1 * 8 = 8 +1 * 16 = 16 +2 * 1 = 2 +2 * 2 = 4 +2 * 4 = 8 +2 * 8 = 16 +2 * 16 = 32 +3 * 1 = 3 +3 * 2 = 6 +3 * 4 = 12 +3 * 8 = 24 +3 * 16 = 48 +4 * 1 = 4 +4 * 2 = 8 +4 * 4 = 16 +4 * 8 = 32 +4 * 16 = 64 +512 * 1 = 512 +512 * 2 = 1024 +512 * 4 = 2048 +512 * 8 = 4096 +512 * 16 = 8192 +1024 * 1 = 1024 +1024 * 2 = 2048 +1024 * 4 = 4096 +1024 * 8 = 8192 +1024 * 16 = 16384 +2048 * 1 = 2048 +2048 * 2 = 4096 +2048 * 4 = 8192 +2048 * 8 = 16384 +2048 * 16 = Overflow +4096 * 1 = 4096 +4096 * 2 = 8192 +4096 * 4 = 16384 +4096 * 8 = Overflow +4096 * 16 = Overflow +8192 * 1 = 8192 +8192 * 2 = 16384 +8192 * 4 = Overflow +8192 * 8 = Overflow +8192 * 16 = Overflow +16384 * 1 = 16384 +16384 * 2 = Overflow +16384 * 4 = Overflow +16384 * 8 = Overflow +16384 * 16 = Overflow +~32768 * ~1 = Overflow +~32768 * ~2 = Overflow +~32768 * ~4 = Overflow +~32768 * ~8 = Overflow +~32768 * ~16 = Overflow +~16384 * ~1 = 16384 +~16384 * ~2 = Overflow +~16384 * ~4 = Overflow +~16384 * ~8 = Overflow +~16384 * ~16 = Overflow +~8192 * ~1 = 8192 +~8192 * ~2 = 16384 +~8192 * ~4 = Overflow +~8192 * ~8 = Overflow +~8192 * ~16 = Overflow +~4096 * ~1 = 4096 +~4096 * ~2 = 8192 +~4096 * ~4 = 16384 +~4096 * ~8 = Overflow +~4096 * ~16 = Overflow +~2048 * ~1 = 2048 +~2048 * ~2 = 4096 +~2048 * ~4 = 8192 +~2048 * ~8 = 16384 +~2048 * ~16 = Overflow +~1024 * ~1 = 1024 +~1024 * ~2 = 2048 +~1024 * ~4 = 4096 +~1024 * ~8 = 8192 +~1024 * ~16 = 16384 +~4 * ~1 = 4 +~4 * ~2 = 8 +~4 * ~4 = 16 +~4 * ~8 = 32 +~4 * ~16 = 64 +~3 * ~1 = 3 +~3 * ~2 = 6 +~3 * ~4 = 12 +~3 * ~8 = 24 +~3 * ~16 = 48 +~2 * ~1 = 2 +~2 * ~2 = 4 +~2 * ~4 = 8 +~2 * ~8 = 16 +~2 * ~16 = 32 +~1 * ~1 = 1 +~1 * ~2 = 2 +~1 * ~4 = 4 +~1 * ~8 = 8 +~1 * ~16 = 16 +0 * ~1 = 0 +0 * ~2 = 0 +0 * ~4 = 0 +0 * ~8 = 0 +0 * ~16 = 0 +1 * ~1 = ~1 +1 * ~2 = ~2 +1 * ~4 = ~4 +1 * ~8 = ~8 +1 * ~16 = ~16 +2 * ~1 = ~2 +2 * ~2 = ~4 +2 * ~4 = ~8 +2 * ~8 = ~16 +2 * ~16 = ~32 +3 * ~1 = ~3 +3 * ~2 = ~6 +3 * ~4 = ~12 +3 * ~8 = ~24 +3 * ~16 = ~48 +4 * ~1 = ~4 +4 * ~2 = ~8 +4 * ~4 = ~16 +4 * ~8 = ~32 +4 * ~16 = ~64 +512 * ~1 = ~512 +512 * ~2 = ~1024 +512 * ~4 = ~2048 +512 * ~8 = ~4096 +512 * ~16 = ~8192 +1024 * ~1 = ~1024 +1024 * ~2 = ~2048 +1024 * ~4 = ~4096 +1024 * ~8 = ~8192 +1024 * ~16 = ~16384 +2048 * ~1 = ~2048 +2048 * ~2 = ~4096 +2048 * ~4 = ~8192 +2048 * ~8 = ~16384 +2048 * ~16 = ~32768 +4096 * ~1 = ~4096 +4096 * ~2 = ~8192 +4096 * ~4 = ~16384 +4096 * ~8 = ~32768 +4096 * ~16 = Overflow +8192 * ~1 = ~8192 +8192 * ~2 = ~16384 +8192 * ~4 = ~32768 +8192 * ~8 = Overflow +8192 * ~16 = Overflow +16384 * ~1 = ~16384 +16384 * ~2 = ~32768 +16384 * ~4 = Overflow +16384 * ~8 = Overflow +16384 * ~16 = Overflow +~32 * 1073741824 = Overflow +~32 * 536870912 = Overflow +~32 * 268435456 = Overflow +~32 * 134217728 = Overflow +~32 * 67108864 = ~2147483648 +~31 * 1073741824 = Overflow +~31 * 536870912 = Overflow +~31 * 268435456 = Overflow +~31 * 134217728 = Overflow +~31 * 67108864 = ~2080374784 +~30 * 1073741824 = Overflow +~30 * 536870912 = Overflow +~30 * 268435456 = Overflow +~30 * 134217728 = Overflow +~30 * 67108864 = ~2013265920 +~29 * 1073741824 = Overflow +~29 * 536870912 = Overflow +~29 * 268435456 = Overflow +~29 * 134217728 = Overflow +~29 * 67108864 = ~1946157056 +~28 * 1073741824 = Overflow +~28 * 536870912 = Overflow +~28 * 268435456 = Overflow +~28 * 134217728 = Overflow +~28 * 67108864 = ~1879048192 +~27 * 1073741824 = Overflow +~27 * 536870912 = Overflow +~27 * 268435456 = Overflow +~27 * 134217728 = Overflow +~27 * 67108864 = ~1811939328 +~26 * 1073741824 = Overflow +~26 * 536870912 = Overflow +~26 * 268435456 = Overflow +~26 * 134217728 = Overflow +~26 * 67108864 = ~1744830464 +~25 * 1073741824 = Overflow +~25 * 536870912 = Overflow +~25 * 268435456 = Overflow +~25 * 134217728 = Overflow +~25 * 67108864 = ~1677721600 +~24 * 1073741824 = Overflow +~24 * 536870912 = Overflow +~24 * 268435456 = Overflow +~24 * 134217728 = Overflow +~24 * 67108864 = ~1610612736 +~23 * 1073741824 = Overflow +~23 * 536870912 = Overflow +~23 * 268435456 = Overflow +~23 * 134217728 = Overflow +~23 * 67108864 = ~1543503872 +~22 * 1073741824 = Overflow +~22 * 536870912 = Overflow +~22 * 268435456 = Overflow +~22 * 134217728 = Overflow +~22 * 67108864 = ~1476395008 +~21 * 1073741824 = Overflow +~21 * 536870912 = Overflow +~21 * 268435456 = Overflow +~21 * 134217728 = Overflow +~21 * 67108864 = ~1409286144 +~20 * 1073741824 = Overflow +~20 * 536870912 = Overflow +~20 * 268435456 = Overflow +~20 * 134217728 = Overflow +~20 * 67108864 = ~1342177280 +~19 * 1073741824 = Overflow +~19 * 536870912 = Overflow +~19 * 268435456 = Overflow +~19 * 134217728 = Overflow +~19 * 67108864 = ~1275068416 +~18 * 1073741824 = Overflow +~18 * 536870912 = Overflow +~18 * 268435456 = Overflow +~18 * 134217728 = Overflow +~18 * 67108864 = ~1207959552 +~17 * 1073741824 = Overflow +~17 * 536870912 = Overflow +~17 * 268435456 = Overflow +~17 * 134217728 = Overflow +~17 * 67108864 = ~1140850688 +~16 * 1073741824 = Overflow +~16 * 536870912 = Overflow +~16 * 268435456 = Overflow +~16 * 134217728 = ~2147483648 +~16 * 67108864 = ~1073741824 +~15 * 1073741824 = Overflow +~15 * 536870912 = Overflow +~15 * 268435456 = Overflow +~15 * 134217728 = ~2013265920 +~15 * 67108864 = ~1006632960 +~14 * 1073741824 = Overflow +~14 * 536870912 = Overflow +~14 * 268435456 = Overflow +~14 * 134217728 = ~1879048192 +~14 * 67108864 = ~939524096 +~13 * 1073741824 = Overflow +~13 * 536870912 = Overflow +~13 * 268435456 = Overflow +~13 * 134217728 = ~1744830464 +~13 * 67108864 = ~872415232 +~12 * 1073741824 = Overflow +~12 * 536870912 = Overflow +~12 * 268435456 = Overflow +~12 * 134217728 = ~1610612736 +~12 * 67108864 = ~805306368 +~11 * 1073741824 = Overflow +~11 * 536870912 = Overflow +~11 * 268435456 = Overflow +~11 * 134217728 = ~1476395008 +~11 * 67108864 = ~738197504 +~10 * 1073741824 = Overflow +~10 * 536870912 = Overflow +~10 * 268435456 = Overflow +~10 * 134217728 = ~1342177280 +~10 * 67108864 = ~671088640 +~9 * 1073741824 = Overflow +~9 * 536870912 = Overflow +~9 * 268435456 = Overflow +~9 * 134217728 = ~1207959552 +~9 * 67108864 = ~603979776 +~8 * 1073741824 = Overflow +~8 * 536870912 = Overflow +~8 * 268435456 = ~2147483648 +~8 * 134217728 = ~1073741824 +~8 * 67108864 = ~536870912 +~7 * 1073741824 = Overflow +~7 * 536870912 = Overflow +~7 * 268435456 = ~1879048192 +~7 * 134217728 = ~939524096 +~7 * 67108864 = ~469762048 +~6 * 1073741824 = Overflow +~6 * 536870912 = Overflow +~6 * 268435456 = ~1610612736 +~6 * 134217728 = ~805306368 +~6 * 67108864 = ~402653184 +~5 * 1073741824 = Overflow +~5 * 536870912 = Overflow +~5 * 268435456 = ~1342177280 +~5 * 134217728 = ~671088640 +~5 * 67108864 = ~335544320 +~4 * 1073741824 = Overflow +~4 * 536870912 = ~2147483648 +~4 * 268435456 = ~1073741824 +~4 * 134217728 = ~536870912 +~4 * 67108864 = ~268435456 +~3 * 1073741824 = Overflow +~3 * 536870912 = ~1610612736 +~3 * 268435456 = ~805306368 +~3 * 134217728 = ~402653184 +~3 * 67108864 = ~201326592 +~2 * 1073741824 = ~2147483648 +~2 * 536870912 = ~1073741824 +~2 * 268435456 = ~536870912 +~2 * 134217728 = ~268435456 +~2 * 67108864 = ~134217728 +~1 * 1073741824 = ~1073741824 +~1 * 536870912 = ~536870912 +~1 * 268435456 = ~268435456 +~1 * 134217728 = ~134217728 +~1 * 67108864 = ~67108864 +0 * 1073741824 = 0 +0 * 536870912 = 0 +0 * 268435456 = 0 +0 * 134217728 = 0 +0 * 67108864 = 0 +1 * 1073741824 = 1073741824 +1 * 536870912 = 536870912 +1 * 268435456 = 268435456 +1 * 134217728 = 134217728 +1 * 67108864 = 67108864 +2 * 1073741824 = Overflow +2 * 536870912 = 1073741824 +2 * 268435456 = 536870912 +2 * 134217728 = 268435456 +2 * 67108864 = 134217728 +3 * 1073741824 = Overflow +3 * 536870912 = 1610612736 +3 * 268435456 = 805306368 +3 * 134217728 = 402653184 +3 * 67108864 = 201326592 +4 * 1073741824 = Overflow +4 * 536870912 = Overflow +4 * 268435456 = 1073741824 +4 * 134217728 = 536870912 +4 * 67108864 = 268435456 +5 * 1073741824 = Overflow +5 * 536870912 = Overflow +5 * 268435456 = 1342177280 +5 * 134217728 = 671088640 +5 * 67108864 = 335544320 +6 * 1073741824 = Overflow +6 * 536870912 = Overflow +6 * 268435456 = 1610612736 +6 * 134217728 = 805306368 +6 * 67108864 = 402653184 +7 * 1073741824 = Overflow +7 * 536870912 = Overflow +7 * 268435456 = 1879048192 +7 * 134217728 = 939524096 +7 * 67108864 = 469762048 +8 * 1073741824 = Overflow +8 * 536870912 = Overflow +8 * 268435456 = Overflow +8 * 134217728 = 1073741824 +8 * 67108864 = 536870912 +9 * 1073741824 = Overflow +9 * 536870912 = Overflow +9 * 268435456 = Overflow +9 * 134217728 = 1207959552 +9 * 67108864 = 603979776 +10 * 1073741824 = Overflow +10 * 536870912 = Overflow +10 * 268435456 = Overflow +10 * 134217728 = 1342177280 +10 * 67108864 = 671088640 +11 * 1073741824 = Overflow +11 * 536870912 = Overflow +11 * 268435456 = Overflow +11 * 134217728 = 1476395008 +11 * 67108864 = 738197504 +12 * 1073741824 = Overflow +12 * 536870912 = Overflow +12 * 268435456 = Overflow +12 * 134217728 = 1610612736 +12 * 67108864 = 805306368 +13 * 1073741824 = Overflow +13 * 536870912 = Overflow +13 * 268435456 = Overflow +13 * 134217728 = 1744830464 +13 * 67108864 = 872415232 +14 * 1073741824 = Overflow +14 * 536870912 = Overflow +14 * 268435456 = Overflow +14 * 134217728 = 1879048192 +14 * 67108864 = 939524096 +15 * 1073741824 = Overflow +15 * 536870912 = Overflow +15 * 268435456 = Overflow +15 * 134217728 = 2013265920 +15 * 67108864 = 1006632960 +16 * 1073741824 = Overflow +16 * 536870912 = Overflow +16 * 268435456 = Overflow +16 * 134217728 = Overflow +16 * 67108864 = 1073741824 +17 * 1073741824 = Overflow +17 * 536870912 = Overflow +17 * 268435456 = Overflow +17 * 134217728 = Overflow +17 * 67108864 = 1140850688 +18 * 1073741824 = Overflow +18 * 536870912 = Overflow +18 * 268435456 = Overflow +18 * 134217728 = Overflow +18 * 67108864 = 1207959552 +19 * 1073741824 = Overflow +19 * 536870912 = Overflow +19 * 268435456 = Overflow +19 * 134217728 = Overflow +19 * 67108864 = 1275068416 +20 * 1073741824 = Overflow +20 * 536870912 = Overflow +20 * 268435456 = Overflow +20 * 134217728 = Overflow +20 * 67108864 = 1342177280 +21 * 1073741824 = Overflow +21 * 536870912 = Overflow +21 * 268435456 = Overflow +21 * 134217728 = Overflow +21 * 67108864 = 1409286144 +22 * 1073741824 = Overflow +22 * 536870912 = Overflow +22 * 268435456 = Overflow +22 * 134217728 = Overflow +22 * 67108864 = 1476395008 +23 * 1073741824 = Overflow +23 * 536870912 = Overflow +23 * 268435456 = Overflow +23 * 134217728 = Overflow +23 * 67108864 = 1543503872 +24 * 1073741824 = Overflow +24 * 536870912 = Overflow +24 * 268435456 = Overflow +24 * 134217728 = Overflow +24 * 67108864 = 1610612736 +25 * 1073741824 = Overflow +25 * 536870912 = Overflow +25 * 268435456 = Overflow +25 * 134217728 = Overflow +25 * 67108864 = 1677721600 +26 * 1073741824 = Overflow +26 * 536870912 = Overflow +26 * 268435456 = Overflow +26 * 134217728 = Overflow +26 * 67108864 = 1744830464 +27 * 1073741824 = Overflow +27 * 536870912 = Overflow +27 * 268435456 = Overflow +27 * 134217728 = Overflow +27 * 67108864 = 1811939328 +28 * 1073741824 = Overflow +28 * 536870912 = Overflow +28 * 268435456 = Overflow +28 * 134217728 = Overflow +28 * 67108864 = 1879048192 +29 * 1073741824 = Overflow +29 * 536870912 = Overflow +29 * 268435456 = Overflow +29 * 134217728 = Overflow +29 * 67108864 = 1946157056 +30 * 1073741824 = Overflow +30 * 536870912 = Overflow +30 * 268435456 = Overflow +30 * 134217728 = Overflow +30 * 67108864 = 2013265920 +31 * 1073741824 = Overflow +31 * 536870912 = Overflow +31 * 268435456 = Overflow +31 * 134217728 = Overflow +31 * 67108864 = 2080374784 +32 * 1073741824 = Overflow +32 * 536870912 = Overflow +32 * 268435456 = Overflow +32 * 134217728 = Overflow +32 * 67108864 = Overflow +~32 * ~2147483648 = Overflow +~32 * ~1073741824 = Overflow +~32 * ~536870912 = Overflow +~32 * ~268435456 = Overflow +~32 * ~134217728 = Overflow +~31 * ~2147483648 = Overflow +~31 * ~1073741824 = Overflow +~31 * ~536870912 = Overflow +~31 * ~268435456 = Overflow +~31 * ~134217728 = Overflow +~30 * ~2147483648 = Overflow +~30 * ~1073741824 = Overflow +~30 * ~536870912 = Overflow +~30 * ~268435456 = Overflow +~30 * ~134217728 = Overflow +~29 * ~2147483648 = Overflow +~29 * ~1073741824 = Overflow +~29 * ~536870912 = Overflow +~29 * ~268435456 = Overflow +~29 * ~134217728 = Overflow +~28 * ~2147483648 = Overflow +~28 * ~1073741824 = Overflow +~28 * ~536870912 = Overflow +~28 * ~268435456 = Overflow +~28 * ~134217728 = Overflow +~27 * ~2147483648 = Overflow +~27 * ~1073741824 = Overflow +~27 * ~536870912 = Overflow +~27 * ~268435456 = Overflow +~27 * ~134217728 = Overflow +~26 * ~2147483648 = Overflow +~26 * ~1073741824 = Overflow +~26 * ~536870912 = Overflow +~26 * ~268435456 = Overflow +~26 * ~134217728 = Overflow +~25 * ~2147483648 = Overflow +~25 * ~1073741824 = Overflow +~25 * ~536870912 = Overflow +~25 * ~268435456 = Overflow +~25 * ~134217728 = Overflow +~24 * ~2147483648 = Overflow +~24 * ~1073741824 = Overflow +~24 * ~536870912 = Overflow +~24 * ~268435456 = Overflow +~24 * ~134217728 = Overflow +~23 * ~2147483648 = Overflow +~23 * ~1073741824 = Overflow +~23 * ~536870912 = Overflow +~23 * ~268435456 = Overflow +~23 * ~134217728 = Overflow +~22 * ~2147483648 = Overflow +~22 * ~1073741824 = Overflow +~22 * ~536870912 = Overflow +~22 * ~268435456 = Overflow +~22 * ~134217728 = Overflow +~21 * ~2147483648 = Overflow +~21 * ~1073741824 = Overflow +~21 * ~536870912 = Overflow +~21 * ~268435456 = Overflow +~21 * ~134217728 = Overflow +~20 * ~2147483648 = Overflow +~20 * ~1073741824 = Overflow +~20 * ~536870912 = Overflow +~20 * ~268435456 = Overflow +~20 * ~134217728 = Overflow +~19 * ~2147483648 = Overflow +~19 * ~1073741824 = Overflow +~19 * ~536870912 = Overflow +~19 * ~268435456 = Overflow +~19 * ~134217728 = Overflow +~18 * ~2147483648 = Overflow +~18 * ~1073741824 = Overflow +~18 * ~536870912 = Overflow +~18 * ~268435456 = Overflow +~18 * ~134217728 = Overflow +~17 * ~2147483648 = Overflow +~17 * ~1073741824 = Overflow +~17 * ~536870912 = Overflow +~17 * ~268435456 = Overflow +~17 * ~134217728 = Overflow +~16 * ~2147483648 = Overflow +~16 * ~1073741824 = Overflow +~16 * ~536870912 = Overflow +~16 * ~268435456 = Overflow +~16 * ~134217728 = Overflow +~15 * ~2147483648 = Overflow +~15 * ~1073741824 = Overflow +~15 * ~536870912 = Overflow +~15 * ~268435456 = Overflow +~15 * ~134217728 = 2013265920 +~14 * ~2147483648 = Overflow +~14 * ~1073741824 = Overflow +~14 * ~536870912 = Overflow +~14 * ~268435456 = Overflow +~14 * ~134217728 = 1879048192 +~13 * ~2147483648 = Overflow +~13 * ~1073741824 = Overflow +~13 * ~536870912 = Overflow +~13 * ~268435456 = Overflow +~13 * ~134217728 = 1744830464 +~12 * ~2147483648 = Overflow +~12 * ~1073741824 = Overflow +~12 * ~536870912 = Overflow +~12 * ~268435456 = Overflow +~12 * ~134217728 = 1610612736 +~11 * ~2147483648 = Overflow +~11 * ~1073741824 = Overflow +~11 * ~536870912 = Overflow +~11 * ~268435456 = Overflow +~11 * ~134217728 = 1476395008 +~10 * ~2147483648 = Overflow +~10 * ~1073741824 = Overflow +~10 * ~536870912 = Overflow +~10 * ~268435456 = Overflow +~10 * ~134217728 = 1342177280 +~9 * ~2147483648 = Overflow +~9 * ~1073741824 = Overflow +~9 * ~536870912 = Overflow +~9 * ~268435456 = Overflow +~9 * ~134217728 = 1207959552 +~8 * ~2147483648 = Overflow +~8 * ~1073741824 = Overflow +~8 * ~536870912 = Overflow +~8 * ~268435456 = Overflow +~8 * ~134217728 = 1073741824 +~7 * ~2147483648 = Overflow +~7 * ~1073741824 = Overflow +~7 * ~536870912 = Overflow +~7 * ~268435456 = 1879048192 +~7 * ~134217728 = 939524096 +~6 * ~2147483648 = Overflow +~6 * ~1073741824 = Overflow +~6 * ~536870912 = Overflow +~6 * ~268435456 = 1610612736 +~6 * ~134217728 = 805306368 +~5 * ~2147483648 = Overflow +~5 * ~1073741824 = Overflow +~5 * ~536870912 = Overflow +~5 * ~268435456 = 1342177280 +~5 * ~134217728 = 671088640 +~4 * ~2147483648 = Overflow +~4 * ~1073741824 = Overflow +~4 * ~536870912 = Overflow +~4 * ~268435456 = 1073741824 +~4 * ~134217728 = 536870912 +~3 * ~2147483648 = Overflow +~3 * ~1073741824 = Overflow +~3 * ~536870912 = 1610612736 +~3 * ~268435456 = 805306368 +~3 * ~134217728 = 402653184 +~2 * ~2147483648 = Overflow +~2 * ~1073741824 = Overflow +~2 * ~536870912 = 1073741824 +~2 * ~268435456 = 536870912 +~2 * ~134217728 = 268435456 +~1 * ~2147483648 = Overflow +~1 * ~1073741824 = 1073741824 +~1 * ~536870912 = 536870912 +~1 * ~268435456 = 268435456 +~1 * ~134217728 = 134217728 +0 * ~2147483648 = 0 +0 * ~1073741824 = 0 +0 * ~536870912 = 0 +0 * ~268435456 = 0 +0 * ~134217728 = 0 +1 * ~2147483648 = ~2147483648 +1 * ~1073741824 = ~1073741824 +1 * ~536870912 = ~536870912 +1 * ~268435456 = ~268435456 +1 * ~134217728 = ~134217728 +2 * ~2147483648 = Overflow +2 * ~1073741824 = ~2147483648 +2 * ~536870912 = ~1073741824 +2 * ~268435456 = ~536870912 +2 * ~134217728 = ~268435456 +3 * ~2147483648 = Overflow +3 * ~1073741824 = Overflow +3 * ~536870912 = ~1610612736 +3 * ~268435456 = ~805306368 +3 * ~134217728 = ~402653184 +4 * ~2147483648 = Overflow +4 * ~1073741824 = Overflow +4 * ~536870912 = ~2147483648 +4 * ~268435456 = ~1073741824 +4 * ~134217728 = ~536870912 +5 * ~2147483648 = Overflow +5 * ~1073741824 = Overflow +5 * ~536870912 = Overflow +5 * ~268435456 = ~1342177280 +5 * ~134217728 = ~671088640 +6 * ~2147483648 = Overflow +6 * ~1073741824 = Overflow +6 * ~536870912 = Overflow +6 * ~268435456 = ~1610612736 +6 * ~134217728 = ~805306368 +7 * ~2147483648 = Overflow +7 * ~1073741824 = Overflow +7 * ~536870912 = Overflow +7 * ~268435456 = ~1879048192 +7 * ~134217728 = ~939524096 +8 * ~2147483648 = Overflow +8 * ~1073741824 = Overflow +8 * ~536870912 = Overflow +8 * ~268435456 = ~2147483648 +8 * ~134217728 = ~1073741824 +9 * ~2147483648 = Overflow +9 * ~1073741824 = Overflow +9 * ~536870912 = Overflow +9 * ~268435456 = Overflow +9 * ~134217728 = ~1207959552 +10 * ~2147483648 = Overflow +10 * ~1073741824 = Overflow +10 * ~536870912 = Overflow +10 * ~268435456 = Overflow +10 * ~134217728 = ~1342177280 +11 * ~2147483648 = Overflow +11 * ~1073741824 = Overflow +11 * ~536870912 = Overflow +11 * ~268435456 = Overflow +11 * ~134217728 = ~1476395008 +12 * ~2147483648 = Overflow +12 * ~1073741824 = Overflow +12 * ~536870912 = Overflow +12 * ~268435456 = Overflow +12 * ~134217728 = ~1610612736 +13 * ~2147483648 = Overflow +13 * ~1073741824 = Overflow +13 * ~536870912 = Overflow +13 * ~268435456 = Overflow +13 * ~134217728 = ~1744830464 +14 * ~2147483648 = Overflow +14 * ~1073741824 = Overflow +14 * ~536870912 = Overflow +14 * ~268435456 = Overflow +14 * ~134217728 = ~1879048192 +15 * ~2147483648 = Overflow +15 * ~1073741824 = Overflow +15 * ~536870912 = Overflow +15 * ~268435456 = Overflow +15 * ~134217728 = ~2013265920 +16 * ~2147483648 = Overflow +16 * ~1073741824 = Overflow +16 * ~536870912 = Overflow +16 * ~268435456 = Overflow +16 * ~134217728 = ~2147483648 +17 * ~2147483648 = Overflow +17 * ~1073741824 = Overflow +17 * ~536870912 = Overflow +17 * ~268435456 = Overflow +17 * ~134217728 = Overflow +18 * ~2147483648 = Overflow +18 * ~1073741824 = Overflow +18 * ~536870912 = Overflow +18 * ~268435456 = Overflow +18 * ~134217728 = Overflow +19 * ~2147483648 = Overflow +19 * ~1073741824 = Overflow +19 * ~536870912 = Overflow +19 * ~268435456 = Overflow +19 * ~134217728 = Overflow +20 * ~2147483648 = Overflow +20 * ~1073741824 = Overflow +20 * ~536870912 = Overflow +20 * ~268435456 = Overflow +20 * ~134217728 = Overflow +21 * ~2147483648 = Overflow +21 * ~1073741824 = Overflow +21 * ~536870912 = Overflow +21 * ~268435456 = Overflow +21 * ~134217728 = Overflow +22 * ~2147483648 = Overflow +22 * ~1073741824 = Overflow +22 * ~536870912 = Overflow +22 * ~268435456 = Overflow +22 * ~134217728 = Overflow +23 * ~2147483648 = Overflow +23 * ~1073741824 = Overflow +23 * ~536870912 = Overflow +23 * ~268435456 = Overflow +23 * ~134217728 = Overflow +24 * ~2147483648 = Overflow +24 * ~1073741824 = Overflow +24 * ~536870912 = Overflow +24 * ~268435456 = Overflow +24 * ~134217728 = Overflow +25 * ~2147483648 = Overflow +25 * ~1073741824 = Overflow +25 * ~536870912 = Overflow +25 * ~268435456 = Overflow +25 * ~134217728 = Overflow +26 * ~2147483648 = Overflow +26 * ~1073741824 = Overflow +26 * ~536870912 = Overflow +26 * ~268435456 = Overflow +26 * ~134217728 = Overflow +27 * ~2147483648 = Overflow +27 * ~1073741824 = Overflow +27 * ~536870912 = Overflow +27 * ~268435456 = Overflow +27 * ~134217728 = Overflow +28 * ~2147483648 = Overflow +28 * ~1073741824 = Overflow +28 * ~536870912 = Overflow +28 * ~268435456 = Overflow +28 * ~134217728 = Overflow +29 * ~2147483648 = Overflow +29 * ~1073741824 = Overflow +29 * ~536870912 = Overflow +29 * ~268435456 = Overflow +29 * ~134217728 = Overflow +30 * ~2147483648 = Overflow +30 * ~1073741824 = Overflow +30 * ~536870912 = Overflow +30 * ~268435456 = Overflow +30 * ~134217728 = Overflow +31 * ~2147483648 = Overflow +31 * ~1073741824 = Overflow +31 * ~536870912 = Overflow +31 * ~268435456 = Overflow +31 * ~134217728 = Overflow +32 * ~2147483648 = Overflow +32 * ~1073741824 = Overflow +32 * ~536870912 = Overflow +32 * ~268435456 = Overflow +32 * ~134217728 = Overflow +~2147483648 * 1 = ~2147483648 +~2147483648 * 2 = Overflow +~2147483648 * 4 = Overflow +~2147483648 * 8 = Overflow +~2147483648 * 16 = Overflow +~1073741824 * 1 = ~1073741824 +~1073741824 * 2 = ~2147483648 +~1073741824 * 4 = Overflow +~1073741824 * 8 = Overflow +~1073741824 * 16 = Overflow +~536870912 * 1 = ~536870912 +~536870912 * 2 = ~1073741824 +~536870912 * 4 = ~2147483648 +~536870912 * 8 = Overflow +~536870912 * 16 = Overflow +~268435456 * 1 = ~268435456 +~268435456 * 2 = ~536870912 +~268435456 * 4 = ~1073741824 +~268435456 * 8 = ~2147483648 +~268435456 * 16 = Overflow +~134217728 * 1 = ~134217728 +~134217728 * 2 = ~268435456 +~134217728 * 4 = ~536870912 +~134217728 * 8 = ~1073741824 +~134217728 * 16 = ~2147483648 +~67108864 * 1 = ~67108864 +~67108864 * 2 = ~134217728 +~67108864 * 4 = ~268435456 +~67108864 * 8 = ~536870912 +~67108864 * 16 = ~1073741824 +~4 * 1 = ~4 +~4 * 2 = ~8 +~4 * 4 = ~16 +~4 * 8 = ~32 +~4 * 16 = ~64 +~3 * 1 = ~3 +~3 * 2 = ~6 +~3 * 4 = ~12 +~3 * 8 = ~24 +~3 * 16 = ~48 +~2 * 1 = ~2 +~2 * 2 = ~4 +~2 * 4 = ~8 +~2 * 8 = ~16 +~2 * 16 = ~32 +~1 * 1 = ~1 +~1 * 2 = ~2 +~1 * 4 = ~4 +~1 * 8 = ~8 +~1 * 16 = ~16 +0 * 1 = 0 +0 * 2 = 0 +0 * 4 = 0 +0 * 8 = 0 +0 * 16 = 0 +1 * 1 = 1 +1 * 2 = 2 +1 * 4 = 4 +1 * 8 = 8 +1 * 16 = 16 +2 * 1 = 2 +2 * 2 = 4 +2 * 4 = 8 +2 * 8 = 16 +2 * 16 = 32 +3 * 1 = 3 +3 * 2 = 6 +3 * 4 = 12 +3 * 8 = 24 +3 * 16 = 48 +4 * 1 = 4 +4 * 2 = 8 +4 * 4 = 16 +4 * 8 = 32 +4 * 16 = 64 +33554432 * 1 = 33554432 +33554432 * 2 = 67108864 +33554432 * 4 = 134217728 +33554432 * 8 = 268435456 +33554432 * 16 = 536870912 +67108864 * 1 = 67108864 +67108864 * 2 = 134217728 +67108864 * 4 = 268435456 +67108864 * 8 = 536870912 +67108864 * 16 = 1073741824 +134217728 * 1 = 134217728 +134217728 * 2 = 268435456 +134217728 * 4 = 536870912 +134217728 * 8 = 1073741824 +134217728 * 16 = Overflow +268435456 * 1 = 268435456 +268435456 * 2 = 536870912 +268435456 * 4 = 1073741824 +268435456 * 8 = Overflow +268435456 * 16 = Overflow +536870912 * 1 = 536870912 +536870912 * 2 = 1073741824 +536870912 * 4 = Overflow +536870912 * 8 = Overflow +536870912 * 16 = Overflow +1073741824 * 1 = 1073741824 +1073741824 * 2 = Overflow +1073741824 * 4 = Overflow +1073741824 * 8 = Overflow +1073741824 * 16 = Overflow +~2147483648 * ~1 = Overflow +~2147483648 * ~2 = Overflow +~2147483648 * ~4 = Overflow +~2147483648 * ~8 = Overflow +~2147483648 * ~16 = Overflow +~1073741824 * ~1 = 1073741824 +~1073741824 * ~2 = Overflow +~1073741824 * ~4 = Overflow +~1073741824 * ~8 = Overflow +~1073741824 * ~16 = Overflow +~536870912 * ~1 = 536870912 +~536870912 * ~2 = 1073741824 +~536870912 * ~4 = Overflow +~536870912 * ~8 = Overflow +~536870912 * ~16 = Overflow +~268435456 * ~1 = 268435456 +~268435456 * ~2 = 536870912 +~268435456 * ~4 = 1073741824 +~268435456 * ~8 = Overflow +~268435456 * ~16 = Overflow +~134217728 * ~1 = 134217728 +~134217728 * ~2 = 268435456 +~134217728 * ~4 = 536870912 +~134217728 * ~8 = 1073741824 +~134217728 * ~16 = Overflow +~67108864 * ~1 = 67108864 +~67108864 * ~2 = 134217728 +~67108864 * ~4 = 268435456 +~67108864 * ~8 = 536870912 +~67108864 * ~16 = 1073741824 +~4 * ~1 = 4 +~4 * ~2 = 8 +~4 * ~4 = 16 +~4 * ~8 = 32 +~4 * ~16 = 64 +~3 * ~1 = 3 +~3 * ~2 = 6 +~3 * ~4 = 12 +~3 * ~8 = 24 +~3 * ~16 = 48 +~2 * ~1 = 2 +~2 * ~2 = 4 +~2 * ~4 = 8 +~2 * ~8 = 16 +~2 * ~16 = 32 +~1 * ~1 = 1 +~1 * ~2 = 2 +~1 * ~4 = 4 +~1 * ~8 = 8 +~1 * ~16 = 16 +0 * ~1 = 0 +0 * ~2 = 0 +0 * ~4 = 0 +0 * ~8 = 0 +0 * ~16 = 0 +1 * ~1 = ~1 +1 * ~2 = ~2 +1 * ~4 = ~4 +1 * ~8 = ~8 +1 * ~16 = ~16 +2 * ~1 = ~2 +2 * ~2 = ~4 +2 * ~4 = ~8 +2 * ~8 = ~16 +2 * ~16 = ~32 +3 * ~1 = ~3 +3 * ~2 = ~6 +3 * ~4 = ~12 +3 * ~8 = ~24 +3 * ~16 = ~48 +4 * ~1 = ~4 +4 * ~2 = ~8 +4 * ~4 = ~16 +4 * ~8 = ~32 +4 * ~16 = ~64 +33554432 * ~1 = ~33554432 +33554432 * ~2 = ~67108864 +33554432 * ~4 = ~134217728 +33554432 * ~8 = ~268435456 +33554432 * ~16 = ~536870912 +67108864 * ~1 = ~67108864 +67108864 * ~2 = ~134217728 +67108864 * ~4 = ~268435456 +67108864 * ~8 = ~536870912 +67108864 * ~16 = ~1073741824 +134217728 * ~1 = ~134217728 +134217728 * ~2 = ~268435456 +134217728 * ~4 = ~536870912 +134217728 * ~8 = ~1073741824 +134217728 * ~16 = ~2147483648 +268435456 * ~1 = ~268435456 +268435456 * ~2 = ~536870912 +268435456 * ~4 = ~1073741824 +268435456 * ~8 = ~2147483648 +268435456 * ~16 = Overflow +536870912 * ~1 = ~536870912 +536870912 * ~2 = ~1073741824 +536870912 * ~4 = ~2147483648 +536870912 * ~8 = Overflow +536870912 * ~16 = Overflow +1073741824 * ~1 = ~1073741824 +1073741824 * ~2 = ~2147483648 +1073741824 * ~4 = Overflow +1073741824 * ~8 = Overflow +1073741824 * ~16 = Overflow +~32 * 4611686018427387904 = Overflow +~32 * 2305843009213693952 = Overflow +~32 * 1152921504606846976 = Overflow +~32 * 576460752303423488 = Overflow +~32 * 288230376151711744 = ~9223372036854775808 +~31 * 4611686018427387904 = Overflow +~31 * 2305843009213693952 = Overflow +~31 * 1152921504606846976 = Overflow +~31 * 576460752303423488 = Overflow +~31 * 288230376151711744 = ~8935141660703064064 +~30 * 4611686018427387904 = Overflow +~30 * 2305843009213693952 = Overflow +~30 * 1152921504606846976 = Overflow +~30 * 576460752303423488 = Overflow +~30 * 288230376151711744 = ~8646911284551352320 +~29 * 4611686018427387904 = Overflow +~29 * 2305843009213693952 = Overflow +~29 * 1152921504606846976 = Overflow +~29 * 576460752303423488 = Overflow +~29 * 288230376151711744 = ~8358680908399640576 +~28 * 4611686018427387904 = Overflow +~28 * 2305843009213693952 = Overflow +~28 * 1152921504606846976 = Overflow +~28 * 576460752303423488 = Overflow +~28 * 288230376151711744 = ~8070450532247928832 +~27 * 4611686018427387904 = Overflow +~27 * 2305843009213693952 = Overflow +~27 * 1152921504606846976 = Overflow +~27 * 576460752303423488 = Overflow +~27 * 288230376151711744 = ~7782220156096217088 +~26 * 4611686018427387904 = Overflow +~26 * 2305843009213693952 = Overflow +~26 * 1152921504606846976 = Overflow +~26 * 576460752303423488 = Overflow +~26 * 288230376151711744 = ~7493989779944505344 +~25 * 4611686018427387904 = Overflow +~25 * 2305843009213693952 = Overflow +~25 * 1152921504606846976 = Overflow +~25 * 576460752303423488 = Overflow +~25 * 288230376151711744 = ~7205759403792793600 +~24 * 4611686018427387904 = Overflow +~24 * 2305843009213693952 = Overflow +~24 * 1152921504606846976 = Overflow +~24 * 576460752303423488 = Overflow +~24 * 288230376151711744 = ~6917529027641081856 +~23 * 4611686018427387904 = Overflow +~23 * 2305843009213693952 = Overflow +~23 * 1152921504606846976 = Overflow +~23 * 576460752303423488 = Overflow +~23 * 288230376151711744 = ~6629298651489370112 +~22 * 4611686018427387904 = Overflow +~22 * 2305843009213693952 = Overflow +~22 * 1152921504606846976 = Overflow +~22 * 576460752303423488 = Overflow +~22 * 288230376151711744 = ~6341068275337658368 +~21 * 4611686018427387904 = Overflow +~21 * 2305843009213693952 = Overflow +~21 * 1152921504606846976 = Overflow +~21 * 576460752303423488 = Overflow +~21 * 288230376151711744 = ~6052837899185946624 +~20 * 4611686018427387904 = Overflow +~20 * 2305843009213693952 = Overflow +~20 * 1152921504606846976 = Overflow +~20 * 576460752303423488 = Overflow +~20 * 288230376151711744 = ~5764607523034234880 +~19 * 4611686018427387904 = Overflow +~19 * 2305843009213693952 = Overflow +~19 * 1152921504606846976 = Overflow +~19 * 576460752303423488 = Overflow +~19 * 288230376151711744 = ~5476377146882523136 +~18 * 4611686018427387904 = Overflow +~18 * 2305843009213693952 = Overflow +~18 * 1152921504606846976 = Overflow +~18 * 576460752303423488 = Overflow +~18 * 288230376151711744 = ~5188146770730811392 +~17 * 4611686018427387904 = Overflow +~17 * 2305843009213693952 = Overflow +~17 * 1152921504606846976 = Overflow +~17 * 576460752303423488 = Overflow +~17 * 288230376151711744 = ~4899916394579099648 +~16 * 4611686018427387904 = Overflow +~16 * 2305843009213693952 = Overflow +~16 * 1152921504606846976 = Overflow +~16 * 576460752303423488 = ~9223372036854775808 +~16 * 288230376151711744 = ~4611686018427387904 +~15 * 4611686018427387904 = Overflow +~15 * 2305843009213693952 = Overflow +~15 * 1152921504606846976 = Overflow +~15 * 576460752303423488 = ~8646911284551352320 +~15 * 288230376151711744 = ~4323455642275676160 +~14 * 4611686018427387904 = Overflow +~14 * 2305843009213693952 = Overflow +~14 * 1152921504606846976 = Overflow +~14 * 576460752303423488 = ~8070450532247928832 +~14 * 288230376151711744 = ~4035225266123964416 +~13 * 4611686018427387904 = Overflow +~13 * 2305843009213693952 = Overflow +~13 * 1152921504606846976 = Overflow +~13 * 576460752303423488 = ~7493989779944505344 +~13 * 288230376151711744 = ~3746994889972252672 +~12 * 4611686018427387904 = Overflow +~12 * 2305843009213693952 = Overflow +~12 * 1152921504606846976 = Overflow +~12 * 576460752303423488 = ~6917529027641081856 +~12 * 288230376151711744 = ~3458764513820540928 +~11 * 4611686018427387904 = Overflow +~11 * 2305843009213693952 = Overflow +~11 * 1152921504606846976 = Overflow +~11 * 576460752303423488 = ~6341068275337658368 +~11 * 288230376151711744 = ~3170534137668829184 +~10 * 4611686018427387904 = Overflow +~10 * 2305843009213693952 = Overflow +~10 * 1152921504606846976 = Overflow +~10 * 576460752303423488 = ~5764607523034234880 +~10 * 288230376151711744 = ~2882303761517117440 +~9 * 4611686018427387904 = Overflow +~9 * 2305843009213693952 = Overflow +~9 * 1152921504606846976 = Overflow +~9 * 576460752303423488 = ~5188146770730811392 +~9 * 288230376151711744 = ~2594073385365405696 +~8 * 4611686018427387904 = Overflow +~8 * 2305843009213693952 = Overflow +~8 * 1152921504606846976 = ~9223372036854775808 +~8 * 576460752303423488 = ~4611686018427387904 +~8 * 288230376151711744 = ~2305843009213693952 +~7 * 4611686018427387904 = Overflow +~7 * 2305843009213693952 = Overflow +~7 * 1152921504606846976 = ~8070450532247928832 +~7 * 576460752303423488 = ~4035225266123964416 +~7 * 288230376151711744 = ~2017612633061982208 +~6 * 4611686018427387904 = Overflow +~6 * 2305843009213693952 = Overflow +~6 * 1152921504606846976 = ~6917529027641081856 +~6 * 576460752303423488 = ~3458764513820540928 +~6 * 288230376151711744 = ~1729382256910270464 +~5 * 4611686018427387904 = Overflow +~5 * 2305843009213693952 = Overflow +~5 * 1152921504606846976 = ~5764607523034234880 +~5 * 576460752303423488 = ~2882303761517117440 +~5 * 288230376151711744 = ~1441151880758558720 +~4 * 4611686018427387904 = Overflow +~4 * 2305843009213693952 = ~9223372036854775808 +~4 * 1152921504606846976 = ~4611686018427387904 +~4 * 576460752303423488 = ~2305843009213693952 +~4 * 288230376151711744 = ~1152921504606846976 +~3 * 4611686018427387904 = Overflow +~3 * 2305843009213693952 = ~6917529027641081856 +~3 * 1152921504606846976 = ~3458764513820540928 +~3 * 576460752303423488 = ~1729382256910270464 +~3 * 288230376151711744 = ~864691128455135232 +~2 * 4611686018427387904 = ~9223372036854775808 +~2 * 2305843009213693952 = ~4611686018427387904 +~2 * 1152921504606846976 = ~2305843009213693952 +~2 * 576460752303423488 = ~1152921504606846976 +~2 * 288230376151711744 = ~576460752303423488 +~1 * 4611686018427387904 = ~4611686018427387904 +~1 * 2305843009213693952 = ~2305843009213693952 +~1 * 1152921504606846976 = ~1152921504606846976 +~1 * 576460752303423488 = ~576460752303423488 +~1 * 288230376151711744 = ~288230376151711744 +0 * 4611686018427387904 = 0 +0 * 2305843009213693952 = 0 +0 * 1152921504606846976 = 0 +0 * 576460752303423488 = 0 +0 * 288230376151711744 = 0 +1 * 4611686018427387904 = 4611686018427387904 +1 * 2305843009213693952 = 2305843009213693952 +1 * 1152921504606846976 = 1152921504606846976 +1 * 576460752303423488 = 576460752303423488 +1 * 288230376151711744 = 288230376151711744 +2 * 4611686018427387904 = Overflow +2 * 2305843009213693952 = 4611686018427387904 +2 * 1152921504606846976 = 2305843009213693952 +2 * 576460752303423488 = 1152921504606846976 +2 * 288230376151711744 = 576460752303423488 +3 * 4611686018427387904 = Overflow +3 * 2305843009213693952 = 6917529027641081856 +3 * 1152921504606846976 = 3458764513820540928 +3 * 576460752303423488 = 1729382256910270464 +3 * 288230376151711744 = 864691128455135232 +4 * 4611686018427387904 = Overflow +4 * 2305843009213693952 = Overflow +4 * 1152921504606846976 = 4611686018427387904 +4 * 576460752303423488 = 2305843009213693952 +4 * 288230376151711744 = 1152921504606846976 +5 * 4611686018427387904 = Overflow +5 * 2305843009213693952 = Overflow +5 * 1152921504606846976 = 5764607523034234880 +5 * 576460752303423488 = 2882303761517117440 +5 * 288230376151711744 = 1441151880758558720 +6 * 4611686018427387904 = Overflow +6 * 2305843009213693952 = Overflow +6 * 1152921504606846976 = 6917529027641081856 +6 * 576460752303423488 = 3458764513820540928 +6 * 288230376151711744 = 1729382256910270464 +7 * 4611686018427387904 = Overflow +7 * 2305843009213693952 = Overflow +7 * 1152921504606846976 = 8070450532247928832 +7 * 576460752303423488 = 4035225266123964416 +7 * 288230376151711744 = 2017612633061982208 +8 * 4611686018427387904 = Overflow +8 * 2305843009213693952 = Overflow +8 * 1152921504606846976 = Overflow +8 * 576460752303423488 = 4611686018427387904 +8 * 288230376151711744 = 2305843009213693952 +9 * 4611686018427387904 = Overflow +9 * 2305843009213693952 = Overflow +9 * 1152921504606846976 = Overflow +9 * 576460752303423488 = 5188146770730811392 +9 * 288230376151711744 = 2594073385365405696 +10 * 4611686018427387904 = Overflow +10 * 2305843009213693952 = Overflow +10 * 1152921504606846976 = Overflow +10 * 576460752303423488 = 5764607523034234880 +10 * 288230376151711744 = 2882303761517117440 +11 * 4611686018427387904 = Overflow +11 * 2305843009213693952 = Overflow +11 * 1152921504606846976 = Overflow +11 * 576460752303423488 = 6341068275337658368 +11 * 288230376151711744 = 3170534137668829184 +12 * 4611686018427387904 = Overflow +12 * 2305843009213693952 = Overflow +12 * 1152921504606846976 = Overflow +12 * 576460752303423488 = 6917529027641081856 +12 * 288230376151711744 = 3458764513820540928 +13 * 4611686018427387904 = Overflow +13 * 2305843009213693952 = Overflow +13 * 1152921504606846976 = Overflow +13 * 576460752303423488 = 7493989779944505344 +13 * 288230376151711744 = 3746994889972252672 +14 * 4611686018427387904 = Overflow +14 * 2305843009213693952 = Overflow +14 * 1152921504606846976 = Overflow +14 * 576460752303423488 = 8070450532247928832 +14 * 288230376151711744 = 4035225266123964416 +15 * 4611686018427387904 = Overflow +15 * 2305843009213693952 = Overflow +15 * 1152921504606846976 = Overflow +15 * 576460752303423488 = 8646911284551352320 +15 * 288230376151711744 = 4323455642275676160 +16 * 4611686018427387904 = Overflow +16 * 2305843009213693952 = Overflow +16 * 1152921504606846976 = Overflow +16 * 576460752303423488 = Overflow +16 * 288230376151711744 = 4611686018427387904 +17 * 4611686018427387904 = Overflow +17 * 2305843009213693952 = Overflow +17 * 1152921504606846976 = Overflow +17 * 576460752303423488 = Overflow +17 * 288230376151711744 = 4899916394579099648 +18 * 4611686018427387904 = Overflow +18 * 2305843009213693952 = Overflow +18 * 1152921504606846976 = Overflow +18 * 576460752303423488 = Overflow +18 * 288230376151711744 = 5188146770730811392 +19 * 4611686018427387904 = Overflow +19 * 2305843009213693952 = Overflow +19 * 1152921504606846976 = Overflow +19 * 576460752303423488 = Overflow +19 * 288230376151711744 = 5476377146882523136 +20 * 4611686018427387904 = Overflow +20 * 2305843009213693952 = Overflow +20 * 1152921504606846976 = Overflow +20 * 576460752303423488 = Overflow +20 * 288230376151711744 = 5764607523034234880 +21 * 4611686018427387904 = Overflow +21 * 2305843009213693952 = Overflow +21 * 1152921504606846976 = Overflow +21 * 576460752303423488 = Overflow +21 * 288230376151711744 = 6052837899185946624 +22 * 4611686018427387904 = Overflow +22 * 2305843009213693952 = Overflow +22 * 1152921504606846976 = Overflow +22 * 576460752303423488 = Overflow +22 * 288230376151711744 = 6341068275337658368 +23 * 4611686018427387904 = Overflow +23 * 2305843009213693952 = Overflow +23 * 1152921504606846976 = Overflow +23 * 576460752303423488 = Overflow +23 * 288230376151711744 = 6629298651489370112 +24 * 4611686018427387904 = Overflow +24 * 2305843009213693952 = Overflow +24 * 1152921504606846976 = Overflow +24 * 576460752303423488 = Overflow +24 * 288230376151711744 = 6917529027641081856 +25 * 4611686018427387904 = Overflow +25 * 2305843009213693952 = Overflow +25 * 1152921504606846976 = Overflow +25 * 576460752303423488 = Overflow +25 * 288230376151711744 = 7205759403792793600 +26 * 4611686018427387904 = Overflow +26 * 2305843009213693952 = Overflow +26 * 1152921504606846976 = Overflow +26 * 576460752303423488 = Overflow +26 * 288230376151711744 = 7493989779944505344 +27 * 4611686018427387904 = Overflow +27 * 2305843009213693952 = Overflow +27 * 1152921504606846976 = Overflow +27 * 576460752303423488 = Overflow +27 * 288230376151711744 = 7782220156096217088 +28 * 4611686018427387904 = Overflow +28 * 2305843009213693952 = Overflow +28 * 1152921504606846976 = Overflow +28 * 576460752303423488 = Overflow +28 * 288230376151711744 = 8070450532247928832 +29 * 4611686018427387904 = Overflow +29 * 2305843009213693952 = Overflow +29 * 1152921504606846976 = Overflow +29 * 576460752303423488 = Overflow +29 * 288230376151711744 = 8358680908399640576 +30 * 4611686018427387904 = Overflow +30 * 2305843009213693952 = Overflow +30 * 1152921504606846976 = Overflow +30 * 576460752303423488 = Overflow +30 * 288230376151711744 = 8646911284551352320 +31 * 4611686018427387904 = Overflow +31 * 2305843009213693952 = Overflow +31 * 1152921504606846976 = Overflow +31 * 576460752303423488 = Overflow +31 * 288230376151711744 = 8935141660703064064 +32 * 4611686018427387904 = Overflow +32 * 2305843009213693952 = Overflow +32 * 1152921504606846976 = Overflow +32 * 576460752303423488 = Overflow +32 * 288230376151711744 = Overflow +~32 * ~9223372036854775808 = Overflow +~32 * ~4611686018427387904 = Overflow +~32 * ~2305843009213693952 = Overflow +~32 * ~1152921504606846976 = Overflow +~32 * ~576460752303423488 = Overflow +~31 * ~9223372036854775808 = Overflow +~31 * ~4611686018427387904 = Overflow +~31 * ~2305843009213693952 = Overflow +~31 * ~1152921504606846976 = Overflow +~31 * ~576460752303423488 = Overflow +~30 * ~9223372036854775808 = Overflow +~30 * ~4611686018427387904 = Overflow +~30 * ~2305843009213693952 = Overflow +~30 * ~1152921504606846976 = Overflow +~30 * ~576460752303423488 = Overflow +~29 * ~9223372036854775808 = Overflow +~29 * ~4611686018427387904 = Overflow +~29 * ~2305843009213693952 = Overflow +~29 * ~1152921504606846976 = Overflow +~29 * ~576460752303423488 = Overflow +~28 * ~9223372036854775808 = Overflow +~28 * ~4611686018427387904 = Overflow +~28 * ~2305843009213693952 = Overflow +~28 * ~1152921504606846976 = Overflow +~28 * ~576460752303423488 = Overflow +~27 * ~9223372036854775808 = Overflow +~27 * ~4611686018427387904 = Overflow +~27 * ~2305843009213693952 = Overflow +~27 * ~1152921504606846976 = Overflow +~27 * ~576460752303423488 = Overflow +~26 * ~9223372036854775808 = Overflow +~26 * ~4611686018427387904 = Overflow +~26 * ~2305843009213693952 = Overflow +~26 * ~1152921504606846976 = Overflow +~26 * ~576460752303423488 = Overflow +~25 * ~9223372036854775808 = Overflow +~25 * ~4611686018427387904 = Overflow +~25 * ~2305843009213693952 = Overflow +~25 * ~1152921504606846976 = Overflow +~25 * ~576460752303423488 = Overflow +~24 * ~9223372036854775808 = Overflow +~24 * ~4611686018427387904 = Overflow +~24 * ~2305843009213693952 = Overflow +~24 * ~1152921504606846976 = Overflow +~24 * ~576460752303423488 = Overflow +~23 * ~9223372036854775808 = Overflow +~23 * ~4611686018427387904 = Overflow +~23 * ~2305843009213693952 = Overflow +~23 * ~1152921504606846976 = Overflow +~23 * ~576460752303423488 = Overflow +~22 * ~9223372036854775808 = Overflow +~22 * ~4611686018427387904 = Overflow +~22 * ~2305843009213693952 = Overflow +~22 * ~1152921504606846976 = Overflow +~22 * ~576460752303423488 = Overflow +~21 * ~9223372036854775808 = Overflow +~21 * ~4611686018427387904 = Overflow +~21 * ~2305843009213693952 = Overflow +~21 * ~1152921504606846976 = Overflow +~21 * ~576460752303423488 = Overflow +~20 * ~9223372036854775808 = Overflow +~20 * ~4611686018427387904 = Overflow +~20 * ~2305843009213693952 = Overflow +~20 * ~1152921504606846976 = Overflow +~20 * ~576460752303423488 = Overflow +~19 * ~9223372036854775808 = Overflow +~19 * ~4611686018427387904 = Overflow +~19 * ~2305843009213693952 = Overflow +~19 * ~1152921504606846976 = Overflow +~19 * ~576460752303423488 = Overflow +~18 * ~9223372036854775808 = Overflow +~18 * ~4611686018427387904 = Overflow +~18 * ~2305843009213693952 = Overflow +~18 * ~1152921504606846976 = Overflow +~18 * ~576460752303423488 = Overflow +~17 * ~9223372036854775808 = Overflow +~17 * ~4611686018427387904 = Overflow +~17 * ~2305843009213693952 = Overflow +~17 * ~1152921504606846976 = Overflow +~17 * ~576460752303423488 = Overflow +~16 * ~9223372036854775808 = Overflow +~16 * ~4611686018427387904 = Overflow +~16 * ~2305843009213693952 = Overflow +~16 * ~1152921504606846976 = Overflow +~16 * ~576460752303423488 = Overflow +~15 * ~9223372036854775808 = Overflow +~15 * ~4611686018427387904 = Overflow +~15 * ~2305843009213693952 = Overflow +~15 * ~1152921504606846976 = Overflow +~15 * ~576460752303423488 = 8646911284551352320 +~14 * ~9223372036854775808 = Overflow +~14 * ~4611686018427387904 = Overflow +~14 * ~2305843009213693952 = Overflow +~14 * ~1152921504606846976 = Overflow +~14 * ~576460752303423488 = 8070450532247928832 +~13 * ~9223372036854775808 = Overflow +~13 * ~4611686018427387904 = Overflow +~13 * ~2305843009213693952 = Overflow +~13 * ~1152921504606846976 = Overflow +~13 * ~576460752303423488 = 7493989779944505344 +~12 * ~9223372036854775808 = Overflow +~12 * ~4611686018427387904 = Overflow +~12 * ~2305843009213693952 = Overflow +~12 * ~1152921504606846976 = Overflow +~12 * ~576460752303423488 = 6917529027641081856 +~11 * ~9223372036854775808 = Overflow +~11 * ~4611686018427387904 = Overflow +~11 * ~2305843009213693952 = Overflow +~11 * ~1152921504606846976 = Overflow +~11 * ~576460752303423488 = 6341068275337658368 +~10 * ~9223372036854775808 = Overflow +~10 * ~4611686018427387904 = Overflow +~10 * ~2305843009213693952 = Overflow +~10 * ~1152921504606846976 = Overflow +~10 * ~576460752303423488 = 5764607523034234880 +~9 * ~9223372036854775808 = Overflow +~9 * ~4611686018427387904 = Overflow +~9 * ~2305843009213693952 = Overflow +~9 * ~1152921504606846976 = Overflow +~9 * ~576460752303423488 = 5188146770730811392 +~8 * ~9223372036854775808 = Overflow +~8 * ~4611686018427387904 = Overflow +~8 * ~2305843009213693952 = Overflow +~8 * ~1152921504606846976 = Overflow +~8 * ~576460752303423488 = 4611686018427387904 +~7 * ~9223372036854775808 = Overflow +~7 * ~4611686018427387904 = Overflow +~7 * ~2305843009213693952 = Overflow +~7 * ~1152921504606846976 = 8070450532247928832 +~7 * ~576460752303423488 = 4035225266123964416 +~6 * ~9223372036854775808 = Overflow +~6 * ~4611686018427387904 = Overflow +~6 * ~2305843009213693952 = Overflow +~6 * ~1152921504606846976 = 6917529027641081856 +~6 * ~576460752303423488 = 3458764513820540928 +~5 * ~9223372036854775808 = Overflow +~5 * ~4611686018427387904 = Overflow +~5 * ~2305843009213693952 = Overflow +~5 * ~1152921504606846976 = 5764607523034234880 +~5 * ~576460752303423488 = 2882303761517117440 +~4 * ~9223372036854775808 = Overflow +~4 * ~4611686018427387904 = Overflow +~4 * ~2305843009213693952 = Overflow +~4 * ~1152921504606846976 = 4611686018427387904 +~4 * ~576460752303423488 = 2305843009213693952 +~3 * ~9223372036854775808 = Overflow +~3 * ~4611686018427387904 = Overflow +~3 * ~2305843009213693952 = 6917529027641081856 +~3 * ~1152921504606846976 = 3458764513820540928 +~3 * ~576460752303423488 = 1729382256910270464 +~2 * ~9223372036854775808 = Overflow +~2 * ~4611686018427387904 = Overflow +~2 * ~2305843009213693952 = 4611686018427387904 +~2 * ~1152921504606846976 = 2305843009213693952 +~2 * ~576460752303423488 = 1152921504606846976 +~1 * ~9223372036854775808 = Overflow +~1 * ~4611686018427387904 = 4611686018427387904 +~1 * ~2305843009213693952 = 2305843009213693952 +~1 * ~1152921504606846976 = 1152921504606846976 +~1 * ~576460752303423488 = 576460752303423488 +0 * ~9223372036854775808 = 0 +0 * ~4611686018427387904 = 0 +0 * ~2305843009213693952 = 0 +0 * ~1152921504606846976 = 0 +0 * ~576460752303423488 = 0 +1 * ~9223372036854775808 = ~9223372036854775808 +1 * ~4611686018427387904 = ~4611686018427387904 +1 * ~2305843009213693952 = ~2305843009213693952 +1 * ~1152921504606846976 = ~1152921504606846976 +1 * ~576460752303423488 = ~576460752303423488 +2 * ~9223372036854775808 = Overflow +2 * ~4611686018427387904 = ~9223372036854775808 +2 * ~2305843009213693952 = ~4611686018427387904 +2 * ~1152921504606846976 = ~2305843009213693952 +2 * ~576460752303423488 = ~1152921504606846976 +3 * ~9223372036854775808 = Overflow +3 * ~4611686018427387904 = Overflow +3 * ~2305843009213693952 = ~6917529027641081856 +3 * ~1152921504606846976 = ~3458764513820540928 +3 * ~576460752303423488 = ~1729382256910270464 +4 * ~9223372036854775808 = Overflow +4 * ~4611686018427387904 = Overflow +4 * ~2305843009213693952 = ~9223372036854775808 +4 * ~1152921504606846976 = ~4611686018427387904 +4 * ~576460752303423488 = ~2305843009213693952 +5 * ~9223372036854775808 = Overflow +5 * ~4611686018427387904 = Overflow +5 * ~2305843009213693952 = Overflow +5 * ~1152921504606846976 = ~5764607523034234880 +5 * ~576460752303423488 = ~2882303761517117440 +6 * ~9223372036854775808 = Overflow +6 * ~4611686018427387904 = Overflow +6 * ~2305843009213693952 = Overflow +6 * ~1152921504606846976 = ~6917529027641081856 +6 * ~576460752303423488 = ~3458764513820540928 +7 * ~9223372036854775808 = Overflow +7 * ~4611686018427387904 = Overflow +7 * ~2305843009213693952 = Overflow +7 * ~1152921504606846976 = ~8070450532247928832 +7 * ~576460752303423488 = ~4035225266123964416 +8 * ~9223372036854775808 = Overflow +8 * ~4611686018427387904 = Overflow +8 * ~2305843009213693952 = Overflow +8 * ~1152921504606846976 = ~9223372036854775808 +8 * ~576460752303423488 = ~4611686018427387904 +9 * ~9223372036854775808 = Overflow +9 * ~4611686018427387904 = Overflow +9 * ~2305843009213693952 = Overflow +9 * ~1152921504606846976 = Overflow +9 * ~576460752303423488 = ~5188146770730811392 +10 * ~9223372036854775808 = Overflow +10 * ~4611686018427387904 = Overflow +10 * ~2305843009213693952 = Overflow +10 * ~1152921504606846976 = Overflow +10 * ~576460752303423488 = ~5764607523034234880 +11 * ~9223372036854775808 = Overflow +11 * ~4611686018427387904 = Overflow +11 * ~2305843009213693952 = Overflow +11 * ~1152921504606846976 = Overflow +11 * ~576460752303423488 = ~6341068275337658368 +12 * ~9223372036854775808 = Overflow +12 * ~4611686018427387904 = Overflow +12 * ~2305843009213693952 = Overflow +12 * ~1152921504606846976 = Overflow +12 * ~576460752303423488 = ~6917529027641081856 +13 * ~9223372036854775808 = Overflow +13 * ~4611686018427387904 = Overflow +13 * ~2305843009213693952 = Overflow +13 * ~1152921504606846976 = Overflow +13 * ~576460752303423488 = ~7493989779944505344 +14 * ~9223372036854775808 = Overflow +14 * ~4611686018427387904 = Overflow +14 * ~2305843009213693952 = Overflow +14 * ~1152921504606846976 = Overflow +14 * ~576460752303423488 = ~8070450532247928832 +15 * ~9223372036854775808 = Overflow +15 * ~4611686018427387904 = Overflow +15 * ~2305843009213693952 = Overflow +15 * ~1152921504606846976 = Overflow +15 * ~576460752303423488 = ~8646911284551352320 +16 * ~9223372036854775808 = Overflow +16 * ~4611686018427387904 = Overflow +16 * ~2305843009213693952 = Overflow +16 * ~1152921504606846976 = Overflow +16 * ~576460752303423488 = ~9223372036854775808 +17 * ~9223372036854775808 = Overflow +17 * ~4611686018427387904 = Overflow +17 * ~2305843009213693952 = Overflow +17 * ~1152921504606846976 = Overflow +17 * ~576460752303423488 = Overflow +18 * ~9223372036854775808 = Overflow +18 * ~4611686018427387904 = Overflow +18 * ~2305843009213693952 = Overflow +18 * ~1152921504606846976 = Overflow +18 * ~576460752303423488 = Overflow +19 * ~9223372036854775808 = Overflow +19 * ~4611686018427387904 = Overflow +19 * ~2305843009213693952 = Overflow +19 * ~1152921504606846976 = Overflow +19 * ~576460752303423488 = Overflow +20 * ~9223372036854775808 = Overflow +20 * ~4611686018427387904 = Overflow +20 * ~2305843009213693952 = Overflow +20 * ~1152921504606846976 = Overflow +20 * ~576460752303423488 = Overflow +21 * ~9223372036854775808 = Overflow +21 * ~4611686018427387904 = Overflow +21 * ~2305843009213693952 = Overflow +21 * ~1152921504606846976 = Overflow +21 * ~576460752303423488 = Overflow +22 * ~9223372036854775808 = Overflow +22 * ~4611686018427387904 = Overflow +22 * ~2305843009213693952 = Overflow +22 * ~1152921504606846976 = Overflow +22 * ~576460752303423488 = Overflow +23 * ~9223372036854775808 = Overflow +23 * ~4611686018427387904 = Overflow +23 * ~2305843009213693952 = Overflow +23 * ~1152921504606846976 = Overflow +23 * ~576460752303423488 = Overflow +24 * ~9223372036854775808 = Overflow +24 * ~4611686018427387904 = Overflow +24 * ~2305843009213693952 = Overflow +24 * ~1152921504606846976 = Overflow +24 * ~576460752303423488 = Overflow +25 * ~9223372036854775808 = Overflow +25 * ~4611686018427387904 = Overflow +25 * ~2305843009213693952 = Overflow +25 * ~1152921504606846976 = Overflow +25 * ~576460752303423488 = Overflow +26 * ~9223372036854775808 = Overflow +26 * ~4611686018427387904 = Overflow +26 * ~2305843009213693952 = Overflow +26 * ~1152921504606846976 = Overflow +26 * ~576460752303423488 = Overflow +27 * ~9223372036854775808 = Overflow +27 * ~4611686018427387904 = Overflow +27 * ~2305843009213693952 = Overflow +27 * ~1152921504606846976 = Overflow +27 * ~576460752303423488 = Overflow +28 * ~9223372036854775808 = Overflow +28 * ~4611686018427387904 = Overflow +28 * ~2305843009213693952 = Overflow +28 * ~1152921504606846976 = Overflow +28 * ~576460752303423488 = Overflow +29 * ~9223372036854775808 = Overflow +29 * ~4611686018427387904 = Overflow +29 * ~2305843009213693952 = Overflow +29 * ~1152921504606846976 = Overflow +29 * ~576460752303423488 = Overflow +30 * ~9223372036854775808 = Overflow +30 * ~4611686018427387904 = Overflow +30 * ~2305843009213693952 = Overflow +30 * ~1152921504606846976 = Overflow +30 * ~576460752303423488 = Overflow +31 * ~9223372036854775808 = Overflow +31 * ~4611686018427387904 = Overflow +31 * ~2305843009213693952 = Overflow +31 * ~1152921504606846976 = Overflow +31 * ~576460752303423488 = Overflow +32 * ~9223372036854775808 = Overflow +32 * ~4611686018427387904 = Overflow +32 * ~2305843009213693952 = Overflow +32 * ~1152921504606846976 = Overflow +32 * ~576460752303423488 = Overflow +~9223372036854775808 * 1 = ~9223372036854775808 +~9223372036854775808 * 2 = Overflow +~9223372036854775808 * 4 = Overflow +~9223372036854775808 * 8 = Overflow +~9223372036854775808 * 16 = Overflow +~4611686018427387904 * 1 = ~4611686018427387904 +~4611686018427387904 * 2 = ~9223372036854775808 +~4611686018427387904 * 4 = Overflow +~4611686018427387904 * 8 = Overflow +~4611686018427387904 * 16 = Overflow +~2305843009213693952 * 1 = ~2305843009213693952 +~2305843009213693952 * 2 = ~4611686018427387904 +~2305843009213693952 * 4 = ~9223372036854775808 +~2305843009213693952 * 8 = Overflow +~2305843009213693952 * 16 = Overflow +~1152921504606846976 * 1 = ~1152921504606846976 +~1152921504606846976 * 2 = ~2305843009213693952 +~1152921504606846976 * 4 = ~4611686018427387904 +~1152921504606846976 * 8 = ~9223372036854775808 +~1152921504606846976 * 16 = Overflow +~576460752303423488 * 1 = ~576460752303423488 +~576460752303423488 * 2 = ~1152921504606846976 +~576460752303423488 * 4 = ~2305843009213693952 +~576460752303423488 * 8 = ~4611686018427387904 +~576460752303423488 * 16 = ~9223372036854775808 +~288230376151711744 * 1 = ~288230376151711744 +~288230376151711744 * 2 = ~576460752303423488 +~288230376151711744 * 4 = ~1152921504606846976 +~288230376151711744 * 8 = ~2305843009213693952 +~288230376151711744 * 16 = ~4611686018427387904 +~4 * 1 = ~4 +~4 * 2 = ~8 +~4 * 4 = ~16 +~4 * 8 = ~32 +~4 * 16 = ~64 +~3 * 1 = ~3 +~3 * 2 = ~6 +~3 * 4 = ~12 +~3 * 8 = ~24 +~3 * 16 = ~48 +~2 * 1 = ~2 +~2 * 2 = ~4 +~2 * 4 = ~8 +~2 * 8 = ~16 +~2 * 16 = ~32 +~1 * 1 = ~1 +~1 * 2 = ~2 +~1 * 4 = ~4 +~1 * 8 = ~8 +~1 * 16 = ~16 +0 * 1 = 0 +0 * 2 = 0 +0 * 4 = 0 +0 * 8 = 0 +0 * 16 = 0 +1 * 1 = 1 +1 * 2 = 2 +1 * 4 = 4 +1 * 8 = 8 +1 * 16 = 16 +2 * 1 = 2 +2 * 2 = 4 +2 * 4 = 8 +2 * 8 = 16 +2 * 16 = 32 +3 * 1 = 3 +3 * 2 = 6 +3 * 4 = 12 +3 * 8 = 24 +3 * 16 = 48 +4 * 1 = 4 +4 * 2 = 8 +4 * 4 = 16 +4 * 8 = 32 +4 * 16 = 64 +144115188075855872 * 1 = 144115188075855872 +144115188075855872 * 2 = 288230376151711744 +144115188075855872 * 4 = 576460752303423488 +144115188075855872 * 8 = 1152921504606846976 +144115188075855872 * 16 = 2305843009213693952 +288230376151711744 * 1 = 288230376151711744 +288230376151711744 * 2 = 576460752303423488 +288230376151711744 * 4 = 1152921504606846976 +288230376151711744 * 8 = 2305843009213693952 +288230376151711744 * 16 = 4611686018427387904 +576460752303423488 * 1 = 576460752303423488 +576460752303423488 * 2 = 1152921504606846976 +576460752303423488 * 4 = 2305843009213693952 +576460752303423488 * 8 = 4611686018427387904 +576460752303423488 * 16 = Overflow +1152921504606846976 * 1 = 1152921504606846976 +1152921504606846976 * 2 = 2305843009213693952 +1152921504606846976 * 4 = 4611686018427387904 +1152921504606846976 * 8 = Overflow +1152921504606846976 * 16 = Overflow +2305843009213693952 * 1 = 2305843009213693952 +2305843009213693952 * 2 = 4611686018427387904 +2305843009213693952 * 4 = Overflow +2305843009213693952 * 8 = Overflow +2305843009213693952 * 16 = Overflow +4611686018427387904 * 1 = 4611686018427387904 +4611686018427387904 * 2 = Overflow +4611686018427387904 * 4 = Overflow +4611686018427387904 * 8 = Overflow +4611686018427387904 * 16 = Overflow +~9223372036854775808 * ~1 = Overflow +~9223372036854775808 * ~2 = Overflow +~9223372036854775808 * ~4 = Overflow +~9223372036854775808 * ~8 = Overflow +~9223372036854775808 * ~16 = Overflow +~4611686018427387904 * ~1 = 4611686018427387904 +~4611686018427387904 * ~2 = Overflow +~4611686018427387904 * ~4 = Overflow +~4611686018427387904 * ~8 = Overflow +~4611686018427387904 * ~16 = Overflow +~2305843009213693952 * ~1 = 2305843009213693952 +~2305843009213693952 * ~2 = 4611686018427387904 +~2305843009213693952 * ~4 = Overflow +~2305843009213693952 * ~8 = Overflow +~2305843009213693952 * ~16 = Overflow +~1152921504606846976 * ~1 = 1152921504606846976 +~1152921504606846976 * ~2 = 2305843009213693952 +~1152921504606846976 * ~4 = 4611686018427387904 +~1152921504606846976 * ~8 = Overflow +~1152921504606846976 * ~16 = Overflow +~576460752303423488 * ~1 = 576460752303423488 +~576460752303423488 * ~2 = 1152921504606846976 +~576460752303423488 * ~4 = 2305843009213693952 +~576460752303423488 * ~8 = 4611686018427387904 +~576460752303423488 * ~16 = Overflow +~288230376151711744 * ~1 = 288230376151711744 +~288230376151711744 * ~2 = 576460752303423488 +~288230376151711744 * ~4 = 1152921504606846976 +~288230376151711744 * ~8 = 2305843009213693952 +~288230376151711744 * ~16 = 4611686018427387904 +~4 * ~1 = 4 +~4 * ~2 = 8 +~4 * ~4 = 16 +~4 * ~8 = 32 +~4 * ~16 = 64 +~3 * ~1 = 3 +~3 * ~2 = 6 +~3 * ~4 = 12 +~3 * ~8 = 24 +~3 * ~16 = 48 +~2 * ~1 = 2 +~2 * ~2 = 4 +~2 * ~4 = 8 +~2 * ~8 = 16 +~2 * ~16 = 32 +~1 * ~1 = 1 +~1 * ~2 = 2 +~1 * ~4 = 4 +~1 * ~8 = 8 +~1 * ~16 = 16 +0 * ~1 = 0 +0 * ~2 = 0 +0 * ~4 = 0 +0 * ~8 = 0 +0 * ~16 = 0 +1 * ~1 = ~1 +1 * ~2 = ~2 +1 * ~4 = ~4 +1 * ~8 = ~8 +1 * ~16 = ~16 +2 * ~1 = ~2 +2 * ~2 = ~4 +2 * ~4 = ~8 +2 * ~8 = ~16 +2 * ~16 = ~32 +3 * ~1 = ~3 +3 * ~2 = ~6 +3 * ~4 = ~12 +3 * ~8 = ~24 +3 * ~16 = ~48 +4 * ~1 = ~4 +4 * ~2 = ~8 +4 * ~4 = ~16 +4 * ~8 = ~32 +4 * ~16 = ~64 +144115188075855872 * ~1 = ~144115188075855872 +144115188075855872 * ~2 = ~288230376151711744 +144115188075855872 * ~4 = ~576460752303423488 +144115188075855872 * ~8 = ~1152921504606846976 +144115188075855872 * ~16 = ~2305843009213693952 +288230376151711744 * ~1 = ~288230376151711744 +288230376151711744 * ~2 = ~576460752303423488 +288230376151711744 * ~4 = ~1152921504606846976 +288230376151711744 * ~8 = ~2305843009213693952 +288230376151711744 * ~16 = ~4611686018427387904 +576460752303423488 * ~1 = ~576460752303423488 +576460752303423488 * ~2 = ~1152921504606846976 +576460752303423488 * ~4 = ~2305843009213693952 +576460752303423488 * ~8 = ~4611686018427387904 +576460752303423488 * ~16 = ~9223372036854775808 +1152921504606846976 * ~1 = ~1152921504606846976 +1152921504606846976 * ~2 = ~2305843009213693952 +1152921504606846976 * ~4 = ~4611686018427387904 +1152921504606846976 * ~8 = ~9223372036854775808 +1152921504606846976 * ~16 = Overflow +2305843009213693952 * ~1 = ~2305843009213693952 +2305843009213693952 * ~2 = ~4611686018427387904 +2305843009213693952 * ~4 = ~9223372036854775808 +2305843009213693952 * ~8 = Overflow +2305843009213693952 * ~16 = Overflow +4611686018427387904 * ~1 = ~4611686018427387904 +4611686018427387904 * ~2 = ~9223372036854775808 +4611686018427387904 * ~4 = Overflow +4611686018427387904 * ~8 = Overflow +4611686018427387904 * ~16 = Overflow diff -Nru mlton-20130715/regression/int-mul-pow2.sml mlton-20210117+dfsg/regression/int-mul-pow2.sml --- mlton-20130715/regression/int-mul-pow2.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/int-mul-pow2.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,187 @@ +functor Test(structure Int: + sig + include INTEGER + val zero: int + val one: int + end) = +struct + +val zero = Int.zero +val one = Int.one +val two = Int.+ (one, one) +val three = Int.+ (two, one) +val four = Int.* (two, two) +val eight = Int.* (four, two) +val sixteen = Int.* (eight, two) +val thirtytwo = Int.* (sixteen, two) + +val maxposint = valOf Int.maxInt +val maxnegpow2 = Int.- (Int.~ maxposint, one) +val maxpospow2 = Int.+ (Int.quot (maxposint, two), one) + +fun doit k = +let + val i = maxpospow2 + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.quot (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.quot (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.quot (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.quot (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) +in + () +end + +fun loop k = + if Int.> (k, thirtytwo) + then () + else (doit k; loop (Int.+ (k, one))) + +val () = loop (Int.~ thirtytwo) + +fun doit k = +let + val i = maxnegpow2 + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.quot (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.quot (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.quot (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.quot (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) +in + () +end + +fun loop k = + if Int.> (k, thirtytwo) + then () + else (doit k; loop (Int.+ (k, one))) + +val () = loop (Int.~ thirtytwo) + +val ks = [maxnegpow2, Int.quot (maxnegpow2, two), Int.quot (maxnegpow2, four), + Int.quot (maxnegpow2, eight), Int.quot (maxnegpow2, sixteen), Int.quot (maxnegpow2, thirtytwo), + Int.~ four, Int.~ three, Int.~ two, Int.~ one, + zero, + one, two, three, four, + Int.quot (maxpospow2, thirtytwo), Int.quot (maxpospow2, sixteen), Int.quot (maxpospow2, eight), + Int.quot (maxpospow2, four), Int.quot (maxpospow2, two), maxpospow2] + +fun doit k = +let + val i = one + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.* (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.* (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.* (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.* (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) +in + () +end + +fun loop ks = + case ks of + [] => () + | k::ks => (doit k; loop ks) + +val () = loop ks + +fun doit k = +let + val i = Int.~ one + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.* (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.* (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.* (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) + val i = Int.* (i, two) + val () = print (concat [Int.toString k, " * ", Int.toString i, " = ", + (Int.toString (Int.* (k, i)) + handle Overflow => "Overflow"), "\n"]) +in + () +end + +fun loop ks = + case ks of + [] => () + | k::ks => (doit k; loop ks) + +val () = loop ks + +end + +structure Test8 = Test(structure Int = + struct + open Int8 + val zero: int = 0 + val one: int = 1 + end) +structure Test16 = Test(structure Int = + struct + open Int16 + val zero: int = 0 + val one: int = 1 + end) +structure Test32 = Test(structure Int = + struct + open Int32 + val zero: int = 0 + val one: int = 1 + end) +structure Test64 = Test(structure Int = + struct + open Int64 + val zero: int = 0 + val one: int = 1 + end) diff -Nru mlton-20130715/regression/library/Makefile mlton-20210117+dfsg/regression/library/Makefile --- mlton-20130715/regression/library/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/library/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ ## Copyright (C) 2008 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/regression/Makefile mlton-20210117+dfsg/regression/Makefile --- mlton-20130715/regression/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/regression/mlton.share.alpha-linux.ok mlton-20210117+dfsg/regression/mlton.share.alpha-linux.ok --- mlton-20130715/regression/mlton.share.alpha-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.alpha-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2408 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 920 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1640 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 872 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2520 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2400008 -(1, 1) -size of a is 800120 -(1, 1) -size is 296 -size is 136 -abcdef abcdef -size is 88 -size is 56 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.amd64-darwin.ok mlton-20210117+dfsg/regression/mlton.share.amd64-darwin.ok --- mlton-20130715/regression/mlton.share.amd64-darwin.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.amd64-darwin.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2408 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 920 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1640 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 872 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2520 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2400008 -(1, 1) -size of a is 800120 -(1, 1) -size is 296 -size is 136 -abcdef abcdef -size is 88 -size is 56 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.amd64-freebsd.ok mlton-20210117+dfsg/regression/mlton.share.amd64-freebsd.ok --- mlton-20130715/regression/mlton.share.amd64-freebsd.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.amd64-freebsd.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2408 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 920 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1640 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 872 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2520 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2400008 -(1, 1) -size of a is 800120 -(1, 1) -size is 296 -size is 136 -abcdef abcdef -size is 88 -size is 56 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.amd64-linux.ok mlton-20210117+dfsg/regression/mlton.share.amd64-linux.ok --- mlton-20130715/regression/mlton.share.amd64-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.amd64-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2408 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 920 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1640 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 872 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2520 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2400008 -(1, 1) -size of a is 800120 -(1, 1) -size is 296 -size is 136 -abcdef abcdef -size is 88 -size is 56 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.amd64-mingw.ok mlton-20210117+dfsg/regression/mlton.share.amd64-mingw.ok --- mlton-20130715/regression/mlton.share.amd64-mingw.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.amd64-mingw.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2408 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 920 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1640 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 872 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2520 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2400008 -(1, 1) -size of a is 800120 -(1, 1) -size is 296 -size is 136 -abcdef abcdef -size is 88 -size is 56 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.arm-linux.ok mlton-20210117+dfsg/regression/mlton.share.arm-linux.ok --- mlton-20130715/regression/mlton.share.arm-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.arm-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2000 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 512 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1232 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 464 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1312 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2000000 -(1, 1) -size of a is 400112 -(1, 1) -size is 200 -size is 80 -abcdef abcdef -size is 64 -size is 40 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.hppa-hpux.ok mlton-20210117+dfsg/regression/mlton.share.hppa-hpux.ok --- mlton-20130715/regression/mlton.share.hppa-hpux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.hppa-hpux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2000 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 512 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1232 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 464 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1312 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2000000 -(1, 1) -size of a is 400112 -(1, 1) -size is 200 -size is 80 -abcdef abcdef -size is 64 -size is 40 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.hppa-linux.ok mlton-20210117+dfsg/regression/mlton.share.hppa-linux.ok --- mlton-20130715/regression/mlton.share.hppa-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.hppa-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2000 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 512 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1232 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 464 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1312 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2000000 -(1, 1) -size of a is 400112 -(1, 1) -size is 200 -size is 80 -abcdef abcdef -size is 64 -size is 40 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.ia64-hpux.ok mlton-20210117+dfsg/regression/mlton.share.ia64-hpux.ok --- mlton-20130715/regression/mlton.share.ia64-hpux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.ia64-hpux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2000 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 512 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1232 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 464 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1312 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2000000 -(1, 1) -size of a is 400112 -(1, 1) -size is 200 -size is 80 -abcdef abcdef -size is 64 -size is 40 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.ia64-linux.ok mlton-20210117+dfsg/regression/mlton.share.ia64-linux.ok --- mlton-20130715/regression/mlton.share.ia64-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.ia64-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2408 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 920 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1640 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 872 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2520 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 4008 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2400008 -(1, 1) -size of a is 800120 -(1, 1) -size is 296 -size is 136 -abcdef abcdef -size is 88 -size is 56 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.mips-linux.ok mlton-20210117+dfsg/regression/mlton.share.mips-linux.ok --- mlton-20130715/regression/mlton.share.mips-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.mips-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2000 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 512 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1232 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 464 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1312 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2000000 -(1, 1) -size of a is 400112 -(1, 1) -size is 200 -size is 80 -abcdef abcdef -size is 64 -size is 40 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.ok mlton-20210117+dfsg/regression/mlton.share.ok --- mlton-20130715/regression/mlton.share.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.ok 2021-12-28 17:19:36.000000000 +0000 @@ -1,718 +1 @@ -size of a is 1600 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 484 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1024 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 448 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 2400 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1284 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2400 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1600000 -(1, 1) -size of a is 400084 -(1, 1) -size is 172 -size is 72 -abcdef abcdef -size is 52 -size is 32 -abcdef abcdef -1 2 +mlton.share.???.ok missing diff -Nru mlton-20130715/regression/mlton.share.rep32a4.ok mlton-20210117+dfsg/regression/mlton.share.rep32a4.ok --- mlton-20130715/regression/mlton.share.rep32a4.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.rep32a4.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,718 @@ +size of a is 1600 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 484 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 1024 +0 => NONE +1 => (1, 1) +2 => (1, 1) +3 => (0, 0) +4 => (1, 1) +5 => (2, 2) +6 => (1, 1) +7 => (1, 1) +8 => (1, 1) +9 => (0, 0) +10 => (1, 1) +11 => (2, 2) +12 => (1, 1) +13 => (1, 1) +14 => (1, 1) +15 => (0, 0) +16 => (1, 1) +17 => (2, 2) +18 => (1, 1) +19 => (1, 1) +20 => (1, 1) +21 => (0, 0) +22 => (1, 1) +23 => (2, 2) +24 => (1, 1) +25 => (1, 1) +26 => (1, 1) +27 => (0, 0) +28 => (1, 1) +29 => (2, 2) +30 => (1, 1) +31 => (1, 1) +32 => (1, 1) +33 => (0, 0) +34 => (1, 1) +35 => (2, 2) +36 => (1, 1) +37 => (1, 1) +38 => (1, 1) +39 => (0, 0) +40 => (1, 1) +41 => (2, 2) +42 => (1, 1) +43 => (1, 1) +44 => (1, 1) +45 => (0, 0) +46 => (1, 1) +47 => (2, 2) +48 => (1, 1) +49 => (1, 1) +50 => (1, 1) +51 => (0, 0) +52 => (1, 1) +53 => (2, 2) +54 => (1, 1) +55 => (1, 1) +56 => (1, 1) +57 => (0, 0) +58 => (1, 1) +59 => (2, 2) +60 => (1, 1) +61 => (1, 1) +62 => (1, 1) +63 => (0, 0) +64 => (1, 1) +65 => (2, 2) +66 => (1, 1) +67 => (1, 1) +68 => (1, 1) +69 => (0, 0) +70 => (1, 1) +71 => (2, 2) +72 => (1, 1) +73 => (1, 1) +74 => (1, 1) +75 => (0, 0) +76 => (1, 1) +77 => (2, 2) +78 => (1, 1) +79 => (1, 1) +80 => (1, 1) +81 => (0, 0) +82 => (1, 1) +83 => (2, 2) +84 => (1, 1) +85 => (1, 1) +86 => (1, 1) +87 => (0, 0) +88 => (1, 1) +89 => (2, 2) +90 => (1, 1) +91 => (1, 1) +92 => (1, 1) +93 => (0, 0) +94 => (1, 1) +95 => (2, 2) +96 => (1, 1) +97 => (1, 1) +98 => (1, 1) +99 => (0, 0) +size of a is 448 +0 => NONE +1 => (1, 1) +2 => (1, 1) +3 => (0, 0) +4 => (1, 1) +5 => (2, 2) +6 => (1, 1) +7 => (1, 1) +8 => (1, 1) +9 => (0, 0) +10 => (1, 1) +11 => (2, 2) +12 => (1, 1) +13 => (1, 1) +14 => (1, 1) +15 => (0, 0) +16 => (1, 1) +17 => (2, 2) +18 => (1, 1) +19 => (1, 1) +20 => (1, 1) +21 => (0, 0) +22 => (1, 1) +23 => (2, 2) +24 => (1, 1) +25 => (1, 1) +26 => (1, 1) +27 => (0, 0) +28 => (1, 1) +29 => (2, 2) +30 => (1, 1) +31 => (1, 1) +32 => (1, 1) +33 => (0, 0) +34 => (1, 1) +35 => (2, 2) +36 => (1, 1) +37 => (1, 1) +38 => (1, 1) +39 => (0, 0) +40 => (1, 1) +41 => (2, 2) +42 => (1, 1) +43 => (1, 1) +44 => (1, 1) +45 => (0, 0) +46 => (1, 1) +47 => (2, 2) +48 => (1, 1) +49 => (1, 1) +50 => (1, 1) +51 => (0, 0) +52 => (1, 1) +53 => (2, 2) +54 => (1, 1) +55 => (1, 1) +56 => (1, 1) +57 => (0, 0) +58 => (1, 1) +59 => (2, 2) +60 => (1, 1) +61 => (1, 1) +62 => (1, 1) +63 => (0, 0) +64 => (1, 1) +65 => (2, 2) +66 => (1, 1) +67 => (1, 1) +68 => (1, 1) +69 => (0, 0) +70 => (1, 1) +71 => (2, 2) +72 => (1, 1) +73 => (1, 1) +74 => (1, 1) +75 => (0, 0) +76 => (1, 1) +77 => (2, 2) +78 => (1, 1) +79 => (1, 1) +80 => (1, 1) +81 => (0, 0) +82 => (1, 1) +83 => (2, 2) +84 => (1, 1) +85 => (1, 1) +86 => (1, 1) +87 => (0, 0) +88 => (1, 1) +89 => (2, 2) +90 => (1, 1) +91 => (1, 1) +92 => (1, 1) +93 => (0, 0) +94 => (1, 1) +95 => (2, 2) +96 => (1, 1) +97 => (1, 1) +98 => (1, 1) +99 => (0, 0) +size of a is 2400 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 1284 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 2400 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 1600000 +(1, 1) +size of a is 400084 +(1, 1) +size is 172 +size is 72 +abcdef abcdef +size is 52 +size is 32 +abcdef abcdef +1 2 diff -Nru mlton-20130715/regression/mlton.share.rep32a8.ok mlton-20210117+dfsg/regression/mlton.share.rep32a8.ok --- mlton-20130715/regression/mlton.share.rep32a8.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.rep32a8.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,718 @@ +size of a is 2000 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 512 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 1232 +0 => NONE +1 => (1, 1) +2 => (1, 1) +3 => (0, 0) +4 => (1, 1) +5 => (2, 2) +6 => (1, 1) +7 => (1, 1) +8 => (1, 1) +9 => (0, 0) +10 => (1, 1) +11 => (2, 2) +12 => (1, 1) +13 => (1, 1) +14 => (1, 1) +15 => (0, 0) +16 => (1, 1) +17 => (2, 2) +18 => (1, 1) +19 => (1, 1) +20 => (1, 1) +21 => (0, 0) +22 => (1, 1) +23 => (2, 2) +24 => (1, 1) +25 => (1, 1) +26 => (1, 1) +27 => (0, 0) +28 => (1, 1) +29 => (2, 2) +30 => (1, 1) +31 => (1, 1) +32 => (1, 1) +33 => (0, 0) +34 => (1, 1) +35 => (2, 2) +36 => (1, 1) +37 => (1, 1) +38 => (1, 1) +39 => (0, 0) +40 => (1, 1) +41 => (2, 2) +42 => (1, 1) +43 => (1, 1) +44 => (1, 1) +45 => (0, 0) +46 => (1, 1) +47 => (2, 2) +48 => (1, 1) +49 => (1, 1) +50 => (1, 1) +51 => (0, 0) +52 => (1, 1) +53 => (2, 2) +54 => (1, 1) +55 => (1, 1) +56 => (1, 1) +57 => (0, 0) +58 => (1, 1) +59 => (2, 2) +60 => (1, 1) +61 => (1, 1) +62 => (1, 1) +63 => (0, 0) +64 => (1, 1) +65 => (2, 2) +66 => (1, 1) +67 => (1, 1) +68 => (1, 1) +69 => (0, 0) +70 => (1, 1) +71 => (2, 2) +72 => (1, 1) +73 => (1, 1) +74 => (1, 1) +75 => (0, 0) +76 => (1, 1) +77 => (2, 2) +78 => (1, 1) +79 => (1, 1) +80 => (1, 1) +81 => (0, 0) +82 => (1, 1) +83 => (2, 2) +84 => (1, 1) +85 => (1, 1) +86 => (1, 1) +87 => (0, 0) +88 => (1, 1) +89 => (2, 2) +90 => (1, 1) +91 => (1, 1) +92 => (1, 1) +93 => (0, 0) +94 => (1, 1) +95 => (2, 2) +96 => (1, 1) +97 => (1, 1) +98 => (1, 1) +99 => (0, 0) +size of a is 464 +0 => NONE +1 => (1, 1) +2 => (1, 1) +3 => (0, 0) +4 => (1, 1) +5 => (2, 2) +6 => (1, 1) +7 => (1, 1) +8 => (1, 1) +9 => (0, 0) +10 => (1, 1) +11 => (2, 2) +12 => (1, 1) +13 => (1, 1) +14 => (1, 1) +15 => (0, 0) +16 => (1, 1) +17 => (2, 2) +18 => (1, 1) +19 => (1, 1) +20 => (1, 1) +21 => (0, 0) +22 => (1, 1) +23 => (2, 2) +24 => (1, 1) +25 => (1, 1) +26 => (1, 1) +27 => (0, 0) +28 => (1, 1) +29 => (2, 2) +30 => (1, 1) +31 => (1, 1) +32 => (1, 1) +33 => (0, 0) +34 => (1, 1) +35 => (2, 2) +36 => (1, 1) +37 => (1, 1) +38 => (1, 1) +39 => (0, 0) +40 => (1, 1) +41 => (2, 2) +42 => (1, 1) +43 => (1, 1) +44 => (1, 1) +45 => (0, 0) +46 => (1, 1) +47 => (2, 2) +48 => (1, 1) +49 => (1, 1) +50 => (1, 1) +51 => (0, 0) +52 => (1, 1) +53 => (2, 2) +54 => (1, 1) +55 => (1, 1) +56 => (1, 1) +57 => (0, 0) +58 => (1, 1) +59 => (2, 2) +60 => (1, 1) +61 => (1, 1) +62 => (1, 1) +63 => (0, 0) +64 => (1, 1) +65 => (2, 2) +66 => (1, 1) +67 => (1, 1) +68 => (1, 1) +69 => (0, 0) +70 => (1, 1) +71 => (2, 2) +72 => (1, 1) +73 => (1, 1) +74 => (1, 1) +75 => (0, 0) +76 => (1, 1) +77 => (2, 2) +78 => (1, 1) +79 => (1, 1) +80 => (1, 1) +81 => (0, 0) +82 => (1, 1) +83 => (2, 2) +84 => (1, 1) +85 => (1, 1) +86 => (1, 1) +87 => (0, 0) +88 => (1, 1) +89 => (2, 2) +90 => (1, 1) +91 => (1, 1) +92 => (1, 1) +93 => (0, 0) +94 => (1, 1) +95 => (2, 2) +96 => (1, 1) +97 => (1, 1) +98 => (1, 1) +99 => (0, 0) +size of a is 2800 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 1312 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 2800 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 2000000 +(1, 1) +size of a is 400112 +(1, 1) +size is 200 +size is 80 +abcdef abcdef +size is 64 +size is 40 +abcdef abcdef +1 2 diff -Nru mlton-20130715/regression/mlton.share.rep64.ok mlton-20210117+dfsg/regression/mlton.share.rep64.ok --- mlton-20130715/regression/mlton.share.rep64.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.rep64.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,718 @@ +size of a is 2408 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 920 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 1640 +0 => NONE +1 => (1, 1) +2 => (1, 1) +3 => (0, 0) +4 => (1, 1) +5 => (2, 2) +6 => (1, 1) +7 => (1, 1) +8 => (1, 1) +9 => (0, 0) +10 => (1, 1) +11 => (2, 2) +12 => (1, 1) +13 => (1, 1) +14 => (1, 1) +15 => (0, 0) +16 => (1, 1) +17 => (2, 2) +18 => (1, 1) +19 => (1, 1) +20 => (1, 1) +21 => (0, 0) +22 => (1, 1) +23 => (2, 2) +24 => (1, 1) +25 => (1, 1) +26 => (1, 1) +27 => (0, 0) +28 => (1, 1) +29 => (2, 2) +30 => (1, 1) +31 => (1, 1) +32 => (1, 1) +33 => (0, 0) +34 => (1, 1) +35 => (2, 2) +36 => (1, 1) +37 => (1, 1) +38 => (1, 1) +39 => (0, 0) +40 => (1, 1) +41 => (2, 2) +42 => (1, 1) +43 => (1, 1) +44 => (1, 1) +45 => (0, 0) +46 => (1, 1) +47 => (2, 2) +48 => (1, 1) +49 => (1, 1) +50 => (1, 1) +51 => (0, 0) +52 => (1, 1) +53 => (2, 2) +54 => (1, 1) +55 => (1, 1) +56 => (1, 1) +57 => (0, 0) +58 => (1, 1) +59 => (2, 2) +60 => (1, 1) +61 => (1, 1) +62 => (1, 1) +63 => (0, 0) +64 => (1, 1) +65 => (2, 2) +66 => (1, 1) +67 => (1, 1) +68 => (1, 1) +69 => (0, 0) +70 => (1, 1) +71 => (2, 2) +72 => (1, 1) +73 => (1, 1) +74 => (1, 1) +75 => (0, 0) +76 => (1, 1) +77 => (2, 2) +78 => (1, 1) +79 => (1, 1) +80 => (1, 1) +81 => (0, 0) +82 => (1, 1) +83 => (2, 2) +84 => (1, 1) +85 => (1, 1) +86 => (1, 1) +87 => (0, 0) +88 => (1, 1) +89 => (2, 2) +90 => (1, 1) +91 => (1, 1) +92 => (1, 1) +93 => (0, 0) +94 => (1, 1) +95 => (2, 2) +96 => (1, 1) +97 => (1, 1) +98 => (1, 1) +99 => (0, 0) +size of a is 872 +0 => NONE +1 => (1, 1) +2 => (1, 1) +3 => (0, 0) +4 => (1, 1) +5 => (2, 2) +6 => (1, 1) +7 => (1, 1) +8 => (1, 1) +9 => (0, 0) +10 => (1, 1) +11 => (2, 2) +12 => (1, 1) +13 => (1, 1) +14 => (1, 1) +15 => (0, 0) +16 => (1, 1) +17 => (2, 2) +18 => (1, 1) +19 => (1, 1) +20 => (1, 1) +21 => (0, 0) +22 => (1, 1) +23 => (2, 2) +24 => (1, 1) +25 => (1, 1) +26 => (1, 1) +27 => (0, 0) +28 => (1, 1) +29 => (2, 2) +30 => (1, 1) +31 => (1, 1) +32 => (1, 1) +33 => (0, 0) +34 => (1, 1) +35 => (2, 2) +36 => (1, 1) +37 => (1, 1) +38 => (1, 1) +39 => (0, 0) +40 => (1, 1) +41 => (2, 2) +42 => (1, 1) +43 => (1, 1) +44 => (1, 1) +45 => (0, 0) +46 => (1, 1) +47 => (2, 2) +48 => (1, 1) +49 => (1, 1) +50 => (1, 1) +51 => (0, 0) +52 => (1, 1) +53 => (2, 2) +54 => (1, 1) +55 => (1, 1) +56 => (1, 1) +57 => (0, 0) +58 => (1, 1) +59 => (2, 2) +60 => (1, 1) +61 => (1, 1) +62 => (1, 1) +63 => (0, 0) +64 => (1, 1) +65 => (2, 2) +66 => (1, 1) +67 => (1, 1) +68 => (1, 1) +69 => (0, 0) +70 => (1, 1) +71 => (2, 2) +72 => (1, 1) +73 => (1, 1) +74 => (1, 1) +75 => (0, 0) +76 => (1, 1) +77 => (2, 2) +78 => (1, 1) +79 => (1, 1) +80 => (1, 1) +81 => (0, 0) +82 => (1, 1) +83 => (2, 2) +84 => (1, 1) +85 => (1, 1) +86 => (1, 1) +87 => (0, 0) +88 => (1, 1) +89 => (2, 2) +90 => (1, 1) +91 => (1, 1) +92 => (1, 1) +93 => (0, 0) +94 => (1, 1) +95 => (2, 2) +96 => (1, 1) +97 => (1, 1) +98 => (1, 1) +99 => (0, 0) +size of a is 4008 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 2520 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 4008 +0 => NONE +1 => (1, 1) +2 => (0, 2) +3 => (1, 0) +4 => (0, 1) +5 => (1, 2) +6 => (0, 0) +7 => (1, 1) +8 => (0, 2) +9 => (1, 0) +10 => (0, 1) +11 => (1, 2) +12 => (0, 0) +13 => (1, 1) +14 => (0, 2) +15 => (1, 0) +16 => (0, 1) +17 => (1, 2) +18 => (0, 0) +19 => (1, 1) +20 => (0, 2) +21 => (1, 0) +22 => (0, 1) +23 => (1, 2) +24 => (0, 0) +25 => (1, 1) +26 => (0, 2) +27 => (1, 0) +28 => (0, 1) +29 => (1, 2) +30 => (0, 0) +31 => (1, 1) +32 => (0, 2) +33 => (1, 0) +34 => (0, 1) +35 => (1, 2) +36 => (0, 0) +37 => (1, 1) +38 => (0, 2) +39 => (1, 0) +40 => (0, 1) +41 => (1, 2) +42 => (0, 0) +43 => (1, 1) +44 => (0, 2) +45 => (1, 0) +46 => (0, 1) +47 => (1, 2) +48 => (0, 0) +49 => (1, 1) +50 => (0, 2) +51 => (1, 0) +52 => (0, 1) +53 => (1, 2) +54 => (0, 0) +55 => (1, 1) +56 => (0, 2) +57 => (1, 0) +58 => (0, 1) +59 => (1, 2) +60 => (0, 0) +61 => (1, 1) +62 => (0, 2) +63 => (1, 0) +64 => (0, 1) +65 => (1, 2) +66 => (0, 0) +67 => (1, 1) +68 => (0, 2) +69 => (1, 0) +70 => (0, 1) +71 => (1, 2) +72 => (0, 0) +73 => (1, 1) +74 => (0, 2) +75 => (1, 0) +76 => (0, 1) +77 => (1, 2) +78 => (0, 0) +79 => (1, 1) +80 => (0, 2) +81 => (1, 0) +82 => (0, 1) +83 => (1, 2) +84 => (0, 0) +85 => (1, 1) +86 => (0, 2) +87 => (1, 0) +88 => (0, 1) +89 => (1, 2) +90 => (0, 0) +91 => (1, 1) +92 => (0, 2) +93 => (1, 0) +94 => (0, 1) +95 => (1, 2) +96 => (0, 0) +97 => (1, 1) +98 => (0, 2) +99 => (1, 0) +size of a is 2400008 +(1, 1) +size of a is 800120 +(1, 1) +size is 296 +size is 136 +abcdef abcdef +size is 88 +size is 56 +abcdef abcdef +1 2 diff -Nru mlton-20130715/regression/mlton.share.s390-linux.ok mlton-20210117+dfsg/regression/mlton.share.s390-linux.ok --- mlton-20130715/regression/mlton.share.s390-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.s390-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2000 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 512 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1232 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 464 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1312 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2000000 -(1, 1) -size of a is 400112 -(1, 1) -size is 200 -size is 80 -abcdef abcdef -size is 64 -size is 40 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.sml mlton-20210117+dfsg/regression/mlton.share.sml --- mlton-20130715/regression/mlton.share.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.sml 2021-12-28 17:19:36.000000000 +0000 @@ -6,7 +6,7 @@ val () = Array.update (a, 0, NONE) fun msg () = - (print (concat ["size of a is ", Int.toString (MLton.size a), "\n"]) + (print (concat ["size of a is ", IntInf.toString (MLton.size a), "\n"]) ; Array.appi (fn (i, z) => print (concat [Int.toString i, " => ", case z of @@ -21,13 +21,15 @@ val () = msg () (* tuple option array with pre-existing sharing *) +val one = 1 + length (CommandLine.arguments ()) +val v = SOME (one, one) val a = Array.tabulate (100, fn i => if i mod 2 = 0 - then SOME (1, 1) + then v else SOME (i mod 3, i mod 3)) val () = Array.update (a, 0, NONE) fun msg () = - (print (concat ["size of a is ", Int.toString (MLton.size a), "\n"]) + (print (concat ["size of a is ", IntInf.toString (MLton.size a), "\n"]) ; Array.appi (fn (i, z) => print (concat [Int.toString i, " => ", case z of @@ -46,7 +48,7 @@ val () = Array.sub (a, 0) := NONE fun msg () = - (print (concat ["size of a is ", Int.toString (MLton.size a), "\n"]) + (print (concat ["size of a is ", IntInf.toString (MLton.size a), "\n"]) ; Array.appi (fn (i, z) => print (concat [Int.toString i, " => ", case !z of @@ -68,7 +70,7 @@ val () = Array.update (a, 0, NONE) fun msg () = - print (concat ["size of a is ", Int.toString (MLton.size a), "\n", + print (concat ["size of a is ", IntInf.toString (MLton.size a), "\n", case Array.sub (a, 1) of NONE => "NONE" | SOME (a, b) => @@ -97,13 +99,14 @@ else () (* sharing of vectors *) +val s = concat ["ab", "cd", "ef"] val a = Array.tabulate (10, fn i => if i mod 2 = 0 - then "abcdef" + then s else concat ["abc", "def"]) -fun p () = print (concat ["size is ", Int.toString (MLton.size a), "\n"]) +fun p () = print (concat ["size is ", IntInf.toString (MLton.size a), "\n"]) val () = p () @@ -118,10 +121,10 @@ val () = print (concat [s0, " ", s1, "\n"]) (* sharing of vectors in a tuple *) - -val t = ("abcdef", concat ["abc", "def"]) -fun p () = print (concat ["size is ", Int.toString (MLton.size t), "\n"]) +val t = (concat ["ab", "cd", "ef"], concat ["abc", "def"]) + +fun p () = print (concat ["size is ", IntInf.toString (MLton.size t), "\n"]) val () = p () diff -Nru mlton-20130715/regression/mlton.share.sparc-linux.ok mlton-20210117+dfsg/regression/mlton.share.sparc-linux.ok --- mlton-20130715/regression/mlton.share.sparc-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.sparc-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2000 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 512 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1232 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 464 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1312 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2000000 -(1, 1) -size of a is 400112 -(1, 1) -size is 200 -size is 80 -abcdef abcdef -size is 64 -size is 40 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/mlton.share.sparc-solaris.ok mlton-20210117+dfsg/regression/mlton.share.sparc-solaris.ok --- mlton-20130715/regression/mlton.share.sparc-solaris.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/mlton.share.sparc-solaris.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,718 +0,0 @@ -size of a is 2000 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 512 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1232 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 464 -0 => NONE -1 => (1, 1) -2 => (1, 1) -3 => (0, 0) -4 => (1, 1) -5 => (2, 2) -6 => (1, 1) -7 => (1, 1) -8 => (1, 1) -9 => (0, 0) -10 => (1, 1) -11 => (2, 2) -12 => (1, 1) -13 => (1, 1) -14 => (1, 1) -15 => (0, 0) -16 => (1, 1) -17 => (2, 2) -18 => (1, 1) -19 => (1, 1) -20 => (1, 1) -21 => (0, 0) -22 => (1, 1) -23 => (2, 2) -24 => (1, 1) -25 => (1, 1) -26 => (1, 1) -27 => (0, 0) -28 => (1, 1) -29 => (2, 2) -30 => (1, 1) -31 => (1, 1) -32 => (1, 1) -33 => (0, 0) -34 => (1, 1) -35 => (2, 2) -36 => (1, 1) -37 => (1, 1) -38 => (1, 1) -39 => (0, 0) -40 => (1, 1) -41 => (2, 2) -42 => (1, 1) -43 => (1, 1) -44 => (1, 1) -45 => (0, 0) -46 => (1, 1) -47 => (2, 2) -48 => (1, 1) -49 => (1, 1) -50 => (1, 1) -51 => (0, 0) -52 => (1, 1) -53 => (2, 2) -54 => (1, 1) -55 => (1, 1) -56 => (1, 1) -57 => (0, 0) -58 => (1, 1) -59 => (2, 2) -60 => (1, 1) -61 => (1, 1) -62 => (1, 1) -63 => (0, 0) -64 => (1, 1) -65 => (2, 2) -66 => (1, 1) -67 => (1, 1) -68 => (1, 1) -69 => (0, 0) -70 => (1, 1) -71 => (2, 2) -72 => (1, 1) -73 => (1, 1) -74 => (1, 1) -75 => (0, 0) -76 => (1, 1) -77 => (2, 2) -78 => (1, 1) -79 => (1, 1) -80 => (1, 1) -81 => (0, 0) -82 => (1, 1) -83 => (2, 2) -84 => (1, 1) -85 => (1, 1) -86 => (1, 1) -87 => (0, 0) -88 => (1, 1) -89 => (2, 2) -90 => (1, 1) -91 => (1, 1) -92 => (1, 1) -93 => (0, 0) -94 => (1, 1) -95 => (2, 2) -96 => (1, 1) -97 => (1, 1) -98 => (1, 1) -99 => (0, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 1312 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2800 -0 => NONE -1 => (1, 1) -2 => (0, 2) -3 => (1, 0) -4 => (0, 1) -5 => (1, 2) -6 => (0, 0) -7 => (1, 1) -8 => (0, 2) -9 => (1, 0) -10 => (0, 1) -11 => (1, 2) -12 => (0, 0) -13 => (1, 1) -14 => (0, 2) -15 => (1, 0) -16 => (0, 1) -17 => (1, 2) -18 => (0, 0) -19 => (1, 1) -20 => (0, 2) -21 => (1, 0) -22 => (0, 1) -23 => (1, 2) -24 => (0, 0) -25 => (1, 1) -26 => (0, 2) -27 => (1, 0) -28 => (0, 1) -29 => (1, 2) -30 => (0, 0) -31 => (1, 1) -32 => (0, 2) -33 => (1, 0) -34 => (0, 1) -35 => (1, 2) -36 => (0, 0) -37 => (1, 1) -38 => (0, 2) -39 => (1, 0) -40 => (0, 1) -41 => (1, 2) -42 => (0, 0) -43 => (1, 1) -44 => (0, 2) -45 => (1, 0) -46 => (0, 1) -47 => (1, 2) -48 => (0, 0) -49 => (1, 1) -50 => (0, 2) -51 => (1, 0) -52 => (0, 1) -53 => (1, 2) -54 => (0, 0) -55 => (1, 1) -56 => (0, 2) -57 => (1, 0) -58 => (0, 1) -59 => (1, 2) -60 => (0, 0) -61 => (1, 1) -62 => (0, 2) -63 => (1, 0) -64 => (0, 1) -65 => (1, 2) -66 => (0, 0) -67 => (1, 1) -68 => (0, 2) -69 => (1, 0) -70 => (0, 1) -71 => (1, 2) -72 => (0, 0) -73 => (1, 1) -74 => (0, 2) -75 => (1, 0) -76 => (0, 1) -77 => (1, 2) -78 => (0, 0) -79 => (1, 1) -80 => (0, 2) -81 => (1, 0) -82 => (0, 1) -83 => (1, 2) -84 => (0, 0) -85 => (1, 1) -86 => (0, 2) -87 => (1, 0) -88 => (0, 1) -89 => (1, 2) -90 => (0, 0) -91 => (1, 1) -92 => (0, 2) -93 => (1, 0) -94 => (0, 1) -95 => (1, 2) -96 => (0, 0) -97 => (1, 1) -98 => (0, 2) -99 => (1, 0) -size of a is 2000000 -(1, 1) -size of a is 400112 -(1, 1) -size is 200 -size is 80 -abcdef abcdef -size is 64 -size is 40 -abcdef abcdef -1 2 diff -Nru mlton-20130715/regression/real.alpha-linux.ok mlton-20210117+dfsg/regression/real.alpha-linux.ok --- mlton-20130715/regression/real.alpha-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.alpha-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,17876 +0,0 @@ - -Testing Real32 - -Testing fmt -0.34028235E39 -3.402823E38 -340282346638528859811704183484516925440.000000 -3.40282346639E38 -3E38 -340282346638528859811704183484516925440 -3E38 -3.4028234664E38 -340282346638528859811704183484516925440.0000000000 -3.402823466E38 -0.17014117E39 -1.701412E38 -170141173319264429905852091742258462720.000000 -1.70141173319E38 -2E38 -170141173319264429905852091742258462720 -2E38 -1.7014117332E38 -170141173319264429905852091742258462720.0000000000 -1.701411733E38 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3000001907 -1E1 -12 -10 -1.2300000191E1 -12.3000001907 -12.30000019 -0.31415927E1 -3.141593E0 -3.141593 -3.14159274101 -3E0 -3 -3 -3.1415927410E0 -3.1415927410 -3.141592741 -0.27182817E1 -2.718282E0 -2.718282 -2.71828174591 -3E0 -3 -3 -2.7182817459E0 -2.7182817459 -2.718281746 -0.123E1 -1.230000E0 -1.230000 -1.23000001907 -1E0 -1 -1 -1.2300000191E0 -1.2300000191 -1.230000019 -0.123 -1.230000E~1 -0.123000 -0.123000003397 -1E~1 -0 -0.1 -1.2300000340E~1 -0.1230000034 -0.1230000034 -0.123E~2 -1.230000E~3 -0.001230 -0.0012300000526 -1E~3 -0 -1E~3 -1.2300000526E~3 -0.0012300001 -0.001230000053 -0.11754944E~37 -1.175494E~38 -0.000000 -1.17549435082E~38 -1E~38 -0 -1E~38 -1.1754943508E~38 -0.0000000000 -1.175494351E~38 -0.5877472E~38 -5.877472E~39 -0.000000 -5.87747175411E~39 -6E~39 -0 -6E~39 -5.8774717541E~39 -0.0000000000 -5.877471754E~39 -0.1E~44 -1.401298E~45 -0.000000 -1.40129846432E~45 -1E~45 -0 -1E~45 -1.4012984643E~45 -0.0000000000 -1.401298464E~45 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.34028235E39 -~3.402823E38 -~340282346638528859811704183484516925440.000000 -~3.40282346639E38 -~3E38 -~340282346638528859811704183484516925440 -~3E38 -~3.4028234664E38 -~340282346638528859811704183484516925440.0000000000 -~3.402823466E38 -~0.17014117E39 -~1.701412E38 -~170141173319264429905852091742258462720.000000 -~1.70141173319E38 -~2E38 -~170141173319264429905852091742258462720 -~2E38 -~1.7014117332E38 -~170141173319264429905852091742258462720.0000000000 -~1.701411733E38 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3000001907 -~1E1 -~12 -~10 -~1.2300000191E1 -~12.3000001907 -~12.30000019 -~0.31415927E1 -~3.141593E0 -~3.141593 -~3.14159274101 -~3E0 -~3 -~3 -~3.1415927410E0 -~3.1415927410 -~3.141592741 -~0.27182817E1 -~2.718282E0 -~2.718282 -~2.71828174591 -~3E0 -~3 -~3 -~2.7182817459E0 -~2.7182817459 -~2.718281746 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23000001907 -~1E0 -~1 -~1 -~1.2300000191E0 -~1.2300000191 -~1.230000019 -~0.123 -~1.230000E~1 -~0.123000 -~0.123000003397 -~1E~1 -~0 -~0.1 -~1.2300000340E~1 -~0.1230000034 -~0.1230000034 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.0012300000526 -~1E~3 -~0 -~1E~3 -~1.2300000526E~3 -~0.0012300001 -~0.001230000053 -~0.11754944E~37 -~1.175494E~38 -~0.000000 -~1.17549435082E~38 -~1E~38 -~0 -~1E~38 -~1.1754943508E~38 -~0.0000000000 -~1.175494351E~38 -~0.5877472E~38 -~5.877472E~39 -~0.000000 -~5.87747175411E~39 -~6E~39 -~0 -~6E~39 -~5.8774717541E~39 -~0.0000000000 -~5.877471754E~39 -~0.1E~44 -~1.401298E~45 -~0.000000 -~1.40129846432E~45 -~1E~45 -~0 -~1E~45 -~1.4012984643E~45 -~0.0000000000 -~1.401298464E~45 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.31415927E1 0.31415927E1 -0.27182817E1 0.27182817E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.11754944E~37 0.11754944E~37 -0.5877472E~38 0.5877472E~38 -0.1E~44 0.1E~44 -0.0 0.0 -~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.31415927E1 ~0.31415927E1 -~0.27182817E1 ~0.27182817E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.11754944E~37 ~0.11754944E~37 -~0.5877472E~38 ~0.5877472E~38 -~0.1E~44 ~0.1E~44 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.34028235E39 normal - isFinite = true isNan = false isNormal = true -0.17014117E39 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.31415927E1 normal - isFinite = true isNan = false isNormal = true -0.27182817E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.34028235E39 normal - isFinite = true isNan = false isNormal = true -~0.17014117E39 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.31415927E1 normal - isFinite = true isNan = false isNormal = true -~0.27182817E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -~0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -~0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -3.40282346639E38 -3.40282346639E38 -true -1.40129846432E~45 -1.40129846432E~45 -true -1.17549435082E~38 -1.17549435082E~38 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.34028235E39 340282346638528859811704183484516925440 0.34028235E39 -0.17014117E39 170141173319264429905852091742258462720 0.17014117E39 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.31415927E1 3 0.3E1 -0.27182817E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.11754944E~37 0 0.0 -0.5877472E~38 0 0.0 -0.1E~44 0 0.0 -0.0 0 0.0 -~0.34028235E39 ~340282346638528859811704183484516925440 ~0.34028235E39 -~0.17014117E39 ~170141173319264429905852091742258462720 ~0.17014117E39 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.31415927E1 ~4 ~0.4E1 -~0.27182817E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.11754944E~37 ~1 ~0.1E1 -~0.5877472E~38 ~1 ~0.1E1 -~0.1E~44 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25 0 -zero ~0.25 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.5 0 -zero ~0.5 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.75 0 -zero ~0.75 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195518 -1.144729853 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -1 -0.4342944622 -0.4107813537 -7.544136047 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342376947 -1.856761098 -0.2070141882 -0.9424888492 -1.564468503 -1.109053612 -2.819815874 -0.8425793648 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240715 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf -0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195518 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136047 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342376947 -1.856761098 -nan -nan -~0.9424888492 -~1.564468503 -nan -~2.819815874 -~0.8425793648 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240715 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 -~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 -~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 -~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 -~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.5877472E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754942E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 -~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 -~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.5877472E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754942E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.5877472E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.5877472E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754942E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754942E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.5877472E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754942E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.5877472E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754942E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.5877472E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.5877472E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754942E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754942E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.17976931348623157E309 = 0.9999999999999999 * 2^1024 - = 0.17976931348623157E309 -0.8988465674311579E308 = 0.9999999999999999 * 2^1023 - = 0.8988465674311579E308 -0.123E4 = 0.6005859375 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.3141592653589793E1 = 0.7853981633974483 * 2^2 - = 0.3141592653589793E1 -0.2718281828459045E1 = 0.6795704571147613 * 2^2 - = 0.2718281828459045E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.22250738585072014E~307 = 0.5 * 2^~1021 - = 0.22250738585072014E~307 -0.0 = 0.0 * 2^0 - = 0.0 -~0.17976931348623157E309 = ~0.9999999999999999 * 2^1024 - = ~0.17976931348623157E309 -~0.8988465674311579E308 = ~0.9999999999999999 * 2^1023 - = ~0.8988465674311579E308 -~0.123E4 = ~0.6005859375 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.3141592653589793E1 = ~0.7853981633974483 * 2^2 - = ~0.3141592653589793E1 -~0.2718281828459045E1 = ~0.6795704571147613 * 2^2 - = ~0.2718281828459045E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.22250738585072014E~307 = ~0.5 * 2^~1021 - = ~0.22250738585072014E~307 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large diff -Nru mlton-20130715/regression/real.amd64-darwin.ok mlton-20210117+dfsg/regression/real.amd64-darwin.ok --- mlton-20130715/regression/real.amd64-darwin.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.amd64-darwin.ok 2021-12-28 17:19:36.000000000 +0000 @@ -616,17212 +616,25220 @@ Testing max, min -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796251 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796251 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195423 -1.144729972 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -0.9999999404 -0.4342944622 -0.4107813835 -7.544136524 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342377245 -1.856761098 -0.2070141882 -0.9424887896 -1.564468503 -1.109053612 -2.819815874 -0.8425793052 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240715 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 +Testing Real.{~,*,+,-,/,nextAfter,rem} +~ (0.34028235E39) = ~0.34028235E39 +~ (0.17014117E39) = ~0.17014117E39 +~ (0.123E4) = ~0.123E4 +~ (0.123E2) = ~0.123E2 +~ (0.31415927E1) = ~0.31415927E1 +~ (0.27182817E1) = ~0.27182817E1 +~ (0.123E1) = ~0.123E1 +~ (0.123) = ~0.123 +~ (0.123E~2) = ~0.123E~2 +~ (0.11754944E~37) = ~0.11754944E~37 +~ (0.5877472E~38) = ~0.5877472E~38 +~ (0.1E~44) = ~0.1E~44 +~ (0.0) = ~0.0 +~ (~0.34028235E39) = 0.34028235E39 +~ (~0.17014117E39) = 0.17014117E39 +~ (~0.123E4) = 0.123E4 +~ (~0.123E2) = 0.123E2 +~ (~0.31415927E1) = 0.31415927E1 +~ (~0.27182817E1) = 0.27182817E1 +~ (~0.123E1) = 0.123E1 +~ (~0.123) = 0.123 +~ (~0.123E~2) = 0.123E~2 +~ (~0.11754944E~37) = 0.11754944E~37 +~ (~0.5877472E~38) = 0.5877472E~38 +~ (~0.1E~44) = 0.1E~44 +~ (~0.0) = 0.0 +~ (inf) = ~inf +~ (~inf) = inf +~ (nan) = nan +~ (inf) = ~inf +* (0.34028235E39, 0.34028235E39) = inf ++ (0.34028235E39, 0.34028235E39) = inf +- (0.34028235E39, 0.34028235E39) = 0.0 +/ (0.34028235E39, 0.34028235E39) = 0.1E1 +nextAfter (0.34028235E39, 0.34028235E39) = 0.34028235E39 +rem (0.34028235E39, 0.34028235E39) = 0.0 +* (0.34028235E39, 0.17014117E39) = inf ++ (0.34028235E39, 0.17014117E39) = inf +- (0.34028235E39, 0.17014117E39) = 0.17014117E39 +/ (0.34028235E39, 0.17014117E39) = 0.2E1 +nextAfter (0.34028235E39, 0.17014117E39) = 0.34028233E39 +rem (0.34028235E39, 0.17014117E39) = 0.0 +* (0.34028235E39, 0.123E4) = inf ++ (0.34028235E39, 0.123E4) = 0.34028235E39 +- (0.34028235E39, 0.123E4) = 0.34028235E39 +/ (0.34028235E39, 0.123E4) = 0.2766523E36 +nextAfter (0.34028235E39, 0.123E4) = 0.34028233E39 +rem (0.34028235E39, 0.123E4) = 0.2028241E32 +* (0.34028235E39, 0.123E2) = inf ++ (0.34028235E39, 0.123E2) = 0.34028235E39 +- (0.34028235E39, 0.123E2) = 0.34028235E39 +/ (0.34028235E39, 0.123E2) = 0.27665232E38 +nextAfter (0.34028235E39, 0.123E2) = 0.34028233E39 +rem (0.34028235E39, 0.123E2) = ~inf +* (0.34028235E39, 0.31415927E1) = inf ++ (0.34028235E39, 0.31415927E1) = 0.34028235E39 +- (0.34028235E39, 0.31415927E1) = 0.34028235E39 +/ (0.34028235E39, 0.31415927E1) = 0.10831523E39 +nextAfter (0.34028235E39, 0.31415927E1) = 0.34028233E39 +rem (0.34028235E39, 0.31415927E1) = 0.2028241E32 +* (0.34028235E39, 0.27182817E1) = inf ++ (0.34028235E39, 0.27182817E1) = 0.34028235E39 +- (0.34028235E39, 0.27182817E1) = 0.34028235E39 +/ (0.34028235E39, 0.27182817E1) = 0.12518288E39 +nextAfter (0.34028235E39, 0.27182817E1) = 0.34028233E39 +rem (0.34028235E39, 0.27182817E1) = 0.0 +* (0.34028235E39, 0.123E1) = inf ++ (0.34028235E39, 0.123E1) = 0.34028235E39 +- (0.34028235E39, 0.123E1) = 0.34028235E39 +/ (0.34028235E39, 0.123E1) = 0.27665231E39 +nextAfter (0.34028235E39, 0.123E1) = 0.34028233E39 +rem (0.34028235E39, 0.123E1) = 0.0 +* (0.34028235E39, 0.123) = 0.4185473E38 ++ (0.34028235E39, 0.123) = 0.34028235E39 +- (0.34028235E39, 0.123) = 0.34028235E39 +/ (0.34028235E39, 0.123) = inf +nextAfter (0.34028235E39, 0.123) = 0.34028233E39 +rem (0.34028235E39, 0.123) = ~inf +* (0.34028235E39, 0.123E~2) = 0.4185473E36 ++ (0.34028235E39, 0.123E~2) = 0.34028235E39 +- (0.34028235E39, 0.123E~2) = 0.34028235E39 +/ (0.34028235E39, 0.123E~2) = inf +nextAfter (0.34028235E39, 0.123E~2) = 0.34028233E39 +rem (0.34028235E39, 0.123E~2) = ~inf +* (0.34028235E39, 0.11754944E~37) = 0.39999998E1 ++ (0.34028235E39, 0.11754944E~37) = 0.34028235E39 +- (0.34028235E39, 0.11754944E~37) = 0.34028235E39 +/ (0.34028235E39, 0.11754944E~37) = inf +nextAfter (0.34028235E39, 0.11754944E~37) = 0.34028233E39 +rem (0.34028235E39, 0.11754944E~37) = ~inf +* (0.34028235E39, 0.5877472E~38) = 0.19999999E1 ++ (0.34028235E39, 0.5877472E~38) = 0.34028235E39 +- (0.34028235E39, 0.5877472E~38) = 0.34028235E39 +/ (0.34028235E39, 0.5877472E~38) = inf +nextAfter (0.34028235E39, 0.5877472E~38) = 0.34028233E39 +rem (0.34028235E39, 0.5877472E~38) = ~inf +* (0.34028235E39, 0.1E~44) = 0.47683713E~6 ++ (0.34028235E39, 0.1E~44) = 0.34028235E39 +- (0.34028235E39, 0.1E~44) = 0.34028235E39 +/ (0.34028235E39, 0.1E~44) = inf +nextAfter (0.34028235E39, 0.1E~44) = 0.34028233E39 +rem (0.34028235E39, 0.1E~44) = ~inf +* (0.34028235E39, 0.0) = 0.0 ++ (0.34028235E39, 0.0) = 0.34028235E39 +- (0.34028235E39, 0.0) = 0.34028235E39 +/ (0.34028235E39, 0.0) = inf +nextAfter (0.34028235E39, 0.0) = 0.34028233E39 +rem (0.34028235E39, 0.0) = nan +* (0.34028235E39, ~0.34028235E39) = ~inf ++ (0.34028235E39, ~0.34028235E39) = 0.0 +- (0.34028235E39, ~0.34028235E39) = inf +/ (0.34028235E39, ~0.34028235E39) = ~0.1E1 +nextAfter (0.34028235E39, ~0.34028235E39) = 0.34028233E39 +rem (0.34028235E39, ~0.34028235E39) = 0.0 +* (0.34028235E39, ~0.17014117E39) = ~inf ++ (0.34028235E39, ~0.17014117E39) = 0.17014117E39 +- (0.34028235E39, ~0.17014117E39) = inf +/ (0.34028235E39, ~0.17014117E39) = ~0.2E1 +nextAfter (0.34028235E39, ~0.17014117E39) = 0.34028233E39 +rem (0.34028235E39, ~0.17014117E39) = 0.0 +* (0.34028235E39, ~0.123E4) = ~inf ++ (0.34028235E39, ~0.123E4) = 0.34028235E39 +- (0.34028235E39, ~0.123E4) = 0.34028235E39 +/ (0.34028235E39, ~0.123E4) = ~0.2766523E36 +nextAfter (0.34028235E39, ~0.123E4) = 0.34028233E39 +rem (0.34028235E39, ~0.123E4) = 0.2028241E32 +* (0.34028235E39, ~0.123E2) = ~inf ++ (0.34028235E39, ~0.123E2) = 0.34028235E39 +- (0.34028235E39, ~0.123E2) = 0.34028235E39 +/ (0.34028235E39, ~0.123E2) = ~0.27665232E38 +nextAfter (0.34028235E39, ~0.123E2) = 0.34028233E39 +rem (0.34028235E39, ~0.123E2) = ~inf +* (0.34028235E39, ~0.31415927E1) = ~inf ++ (0.34028235E39, ~0.31415927E1) = 0.34028235E39 +- (0.34028235E39, ~0.31415927E1) = 0.34028235E39 +/ (0.34028235E39, ~0.31415927E1) = ~0.10831523E39 +nextAfter (0.34028235E39, ~0.31415927E1) = 0.34028233E39 +rem (0.34028235E39, ~0.31415927E1) = 0.2028241E32 +* (0.34028235E39, ~0.27182817E1) = ~inf ++ (0.34028235E39, ~0.27182817E1) = 0.34028235E39 +- (0.34028235E39, ~0.27182817E1) = 0.34028235E39 +/ (0.34028235E39, ~0.27182817E1) = ~0.12518288E39 +nextAfter (0.34028235E39, ~0.27182817E1) = 0.34028233E39 +rem (0.34028235E39, ~0.27182817E1) = 0.0 +* (0.34028235E39, ~0.123E1) = ~inf ++ (0.34028235E39, ~0.123E1) = 0.34028235E39 +- (0.34028235E39, ~0.123E1) = 0.34028235E39 +/ (0.34028235E39, ~0.123E1) = ~0.27665231E39 +nextAfter (0.34028235E39, ~0.123E1) = 0.34028233E39 +rem (0.34028235E39, ~0.123E1) = 0.0 +* (0.34028235E39, ~0.123) = ~0.4185473E38 ++ (0.34028235E39, ~0.123) = 0.34028235E39 +- (0.34028235E39, ~0.123) = 0.34028235E39 +/ (0.34028235E39, ~0.123) = ~inf +nextAfter (0.34028235E39, ~0.123) = 0.34028233E39 +rem (0.34028235E39, ~0.123) = ~inf +* (0.34028235E39, ~0.123E~2) = ~0.4185473E36 ++ (0.34028235E39, ~0.123E~2) = 0.34028235E39 +- (0.34028235E39, ~0.123E~2) = 0.34028235E39 +/ (0.34028235E39, ~0.123E~2) = ~inf +nextAfter (0.34028235E39, ~0.123E~2) = 0.34028233E39 +rem (0.34028235E39, ~0.123E~2) = ~inf +* (0.34028235E39, ~0.11754944E~37) = ~0.39999998E1 ++ (0.34028235E39, ~0.11754944E~37) = 0.34028235E39 +- (0.34028235E39, ~0.11754944E~37) = 0.34028235E39 +/ (0.34028235E39, ~0.11754944E~37) = ~inf +nextAfter (0.34028235E39, ~0.11754944E~37) = 0.34028233E39 +rem (0.34028235E39, ~0.11754944E~37) = ~inf +* (0.34028235E39, ~0.5877472E~38) = ~0.19999999E1 ++ (0.34028235E39, ~0.5877472E~38) = 0.34028235E39 +- (0.34028235E39, ~0.5877472E~38) = 0.34028235E39 +/ (0.34028235E39, ~0.5877472E~38) = ~inf +nextAfter (0.34028235E39, ~0.5877472E~38) = 0.34028233E39 +rem (0.34028235E39, ~0.5877472E~38) = ~inf +* (0.34028235E39, ~0.1E~44) = ~0.47683713E~6 ++ (0.34028235E39, ~0.1E~44) = 0.34028235E39 +- (0.34028235E39, ~0.1E~44) = 0.34028235E39 +/ (0.34028235E39, ~0.1E~44) = ~inf +nextAfter (0.34028235E39, ~0.1E~44) = 0.34028233E39 +rem (0.34028235E39, ~0.1E~44) = ~inf +* (0.34028235E39, ~0.0) = ~0.0 ++ (0.34028235E39, ~0.0) = 0.34028235E39 +- (0.34028235E39, ~0.0) = 0.34028235E39 +/ (0.34028235E39, ~0.0) = ~inf +nextAfter (0.34028235E39, ~0.0) = 0.34028233E39 +rem (0.34028235E39, ~0.0) = nan +* (0.34028235E39, inf) = inf ++ (0.34028235E39, inf) = inf +- (0.34028235E39, inf) = ~inf +/ (0.34028235E39, inf) = 0.0 +nextAfter (0.34028235E39, inf) = inf +rem (0.34028235E39, inf) = 0.34028235E39 +* (0.34028235E39, ~inf) = ~inf ++ (0.34028235E39, ~inf) = ~inf +- (0.34028235E39, ~inf) = inf +/ (0.34028235E39, ~inf) = ~0.0 +nextAfter (0.34028235E39, ~inf) = 0.34028233E39 +rem (0.34028235E39, ~inf) = 0.34028235E39 +* (0.34028235E39, nan) = nan ++ (0.34028235E39, nan) = nan +- (0.34028235E39, nan) = nan +/ (0.34028235E39, nan) = nan +nextAfter (0.34028235E39, nan) = nan +rem (0.34028235E39, nan) = nan +* (0.34028235E39, inf) = inf ++ (0.34028235E39, inf) = inf +- (0.34028235E39, inf) = ~inf +/ (0.34028235E39, inf) = 0.0 +nextAfter (0.34028235E39, inf) = inf +rem (0.34028235E39, inf) = 0.34028235E39 +* (0.17014117E39, 0.34028235E39) = inf ++ (0.17014117E39, 0.34028235E39) = inf +- (0.17014117E39, 0.34028235E39) = ~0.17014117E39 +/ (0.17014117E39, 0.34028235E39) = 0.5 +nextAfter (0.17014117E39, 0.34028235E39) = 0.17014118E39 +rem (0.17014117E39, 0.34028235E39) = 0.17014117E39 +* (0.17014117E39, 0.17014117E39) = inf ++ (0.17014117E39, 0.17014117E39) = 0.34028235E39 +- (0.17014117E39, 0.17014117E39) = 0.0 +/ (0.17014117E39, 0.17014117E39) = 0.1E1 +nextAfter (0.17014117E39, 0.17014117E39) = 0.17014117E39 +rem (0.17014117E39, 0.17014117E39) = 0.0 +* (0.17014117E39, 0.123E4) = inf ++ (0.17014117E39, 0.123E4) = 0.17014117E39 +- (0.17014117E39, 0.123E4) = 0.17014117E39 +/ (0.17014117E39, 0.123E4) = 0.13832615E36 +nextAfter (0.17014117E39, 0.123E4) = 0.17014116E39 +rem (0.17014117E39, 0.123E4) = 0.10141205E32 +* (0.17014117E39, 0.123E2) = inf ++ (0.17014117E39, 0.123E2) = 0.17014117E39 +- (0.17014117E39, 0.123E2) = 0.17014117E39 +/ (0.17014117E39, 0.123E2) = 0.13832616E38 +nextAfter (0.17014117E39, 0.123E2) = 0.17014116E39 +rem (0.17014117E39, 0.123E2) = ~0.10141205E32 +* (0.17014117E39, 0.31415927E1) = inf ++ (0.17014117E39, 0.31415927E1) = 0.17014117E39 +- (0.17014117E39, 0.31415927E1) = 0.17014117E39 +/ (0.17014117E39, 0.31415927E1) = 0.54157613E38 +nextAfter (0.17014117E39, 0.31415927E1) = 0.17014116E39 +rem (0.17014117E39, 0.31415927E1) = 0.10141205E32 +* (0.17014117E39, 0.27182817E1) = inf ++ (0.17014117E39, 0.27182817E1) = 0.17014117E39 +- (0.17014117E39, 0.27182817E1) = 0.17014117E39 +/ (0.17014117E39, 0.27182817E1) = 0.6259144E38 +nextAfter (0.17014117E39, 0.27182817E1) = 0.17014116E39 +rem (0.17014117E39, 0.27182817E1) = 0.0 +* (0.17014117E39, 0.123E1) = 0.20927364E39 ++ (0.17014117E39, 0.123E1) = 0.17014117E39 +- (0.17014117E39, 0.123E1) = 0.17014117E39 +/ (0.17014117E39, 0.123E1) = 0.13832616E39 +nextAfter (0.17014117E39, 0.123E1) = 0.17014116E39 +rem (0.17014117E39, 0.123E1) = 0.0 +* (0.17014117E39, 0.123) = 0.20927365E38 ++ (0.17014117E39, 0.123) = 0.17014117E39 +- (0.17014117E39, 0.123) = 0.17014117E39 +/ (0.17014117E39, 0.123) = inf +nextAfter (0.17014117E39, 0.123) = 0.17014116E39 +rem (0.17014117E39, 0.123) = ~inf +* (0.17014117E39, 0.123E~2) = 0.20927364E36 ++ (0.17014117E39, 0.123E~2) = 0.17014117E39 +- (0.17014117E39, 0.123E~2) = 0.17014117E39 +/ (0.17014117E39, 0.123E~2) = inf +nextAfter (0.17014117E39, 0.123E~2) = 0.17014116E39 +rem (0.17014117E39, 0.123E~2) = ~inf +* (0.17014117E39, 0.11754944E~37) = 0.19999999E1 ++ (0.17014117E39, 0.11754944E~37) = 0.17014117E39 +- (0.17014117E39, 0.11754944E~37) = 0.17014117E39 +/ (0.17014117E39, 0.11754944E~37) = inf +nextAfter (0.17014117E39, 0.11754944E~37) = 0.17014116E39 +rem (0.17014117E39, 0.11754944E~37) = ~inf +* (0.17014117E39, 0.5877472E~38) = 0.99999994 ++ (0.17014117E39, 0.5877472E~38) = 0.17014117E39 +- (0.17014117E39, 0.5877472E~38) = 0.17014117E39 +/ (0.17014117E39, 0.5877472E~38) = inf +nextAfter (0.17014117E39, 0.5877472E~38) = 0.17014116E39 +rem (0.17014117E39, 0.5877472E~38) = ~inf +* (0.17014117E39, 0.1E~44) = 0.23841856E~6 ++ (0.17014117E39, 0.1E~44) = 0.17014117E39 +- (0.17014117E39, 0.1E~44) = 0.17014117E39 +/ (0.17014117E39, 0.1E~44) = inf +nextAfter (0.17014117E39, 0.1E~44) = 0.17014116E39 +rem (0.17014117E39, 0.1E~44) = ~inf +* (0.17014117E39, 0.0) = 0.0 ++ (0.17014117E39, 0.0) = 0.17014117E39 +- (0.17014117E39, 0.0) = 0.17014117E39 +/ (0.17014117E39, 0.0) = inf +nextAfter (0.17014117E39, 0.0) = 0.17014116E39 +rem (0.17014117E39, 0.0) = nan +* (0.17014117E39, ~0.34028235E39) = ~inf ++ (0.17014117E39, ~0.34028235E39) = ~0.17014117E39 +- (0.17014117E39, ~0.34028235E39) = inf +/ (0.17014117E39, ~0.34028235E39) = ~0.5 +nextAfter (0.17014117E39, ~0.34028235E39) = 0.17014116E39 +rem (0.17014117E39, ~0.34028235E39) = 0.17014117E39 +* (0.17014117E39, ~0.17014117E39) = ~inf ++ (0.17014117E39, ~0.17014117E39) = 0.0 +- (0.17014117E39, ~0.17014117E39) = 0.34028235E39 +/ (0.17014117E39, ~0.17014117E39) = ~0.1E1 +nextAfter (0.17014117E39, ~0.17014117E39) = 0.17014116E39 +rem (0.17014117E39, ~0.17014117E39) = 0.0 +* (0.17014117E39, ~0.123E4) = ~inf ++ (0.17014117E39, ~0.123E4) = 0.17014117E39 +- (0.17014117E39, ~0.123E4) = 0.17014117E39 +/ (0.17014117E39, ~0.123E4) = ~0.13832615E36 +nextAfter (0.17014117E39, ~0.123E4) = 0.17014116E39 +rem (0.17014117E39, ~0.123E4) = 0.10141205E32 +* (0.17014117E39, ~0.123E2) = ~inf ++ (0.17014117E39, ~0.123E2) = 0.17014117E39 +- (0.17014117E39, ~0.123E2) = 0.17014117E39 +/ (0.17014117E39, ~0.123E2) = ~0.13832616E38 +nextAfter (0.17014117E39, ~0.123E2) = 0.17014116E39 +rem (0.17014117E39, ~0.123E2) = ~0.10141205E32 +* (0.17014117E39, ~0.31415927E1) = ~inf ++ (0.17014117E39, ~0.31415927E1) = 0.17014117E39 +- (0.17014117E39, ~0.31415927E1) = 0.17014117E39 +/ (0.17014117E39, ~0.31415927E1) = ~0.54157613E38 +nextAfter (0.17014117E39, ~0.31415927E1) = 0.17014116E39 +rem (0.17014117E39, ~0.31415927E1) = 0.10141205E32 +* (0.17014117E39, ~0.27182817E1) = ~inf ++ (0.17014117E39, ~0.27182817E1) = 0.17014117E39 +- (0.17014117E39, ~0.27182817E1) = 0.17014117E39 +/ (0.17014117E39, ~0.27182817E1) = ~0.6259144E38 +nextAfter (0.17014117E39, ~0.27182817E1) = 0.17014116E39 +rem (0.17014117E39, ~0.27182817E1) = 0.0 +* (0.17014117E39, ~0.123E1) = ~0.20927364E39 ++ (0.17014117E39, ~0.123E1) = 0.17014117E39 +- (0.17014117E39, ~0.123E1) = 0.17014117E39 +/ (0.17014117E39, ~0.123E1) = ~0.13832616E39 +nextAfter (0.17014117E39, ~0.123E1) = 0.17014116E39 +rem (0.17014117E39, ~0.123E1) = 0.0 +* (0.17014117E39, ~0.123) = ~0.20927365E38 ++ (0.17014117E39, ~0.123) = 0.17014117E39 +- (0.17014117E39, ~0.123) = 0.17014117E39 +/ (0.17014117E39, ~0.123) = ~inf +nextAfter (0.17014117E39, ~0.123) = 0.17014116E39 +rem (0.17014117E39, ~0.123) = ~inf +* (0.17014117E39, ~0.123E~2) = ~0.20927364E36 ++ (0.17014117E39, ~0.123E~2) = 0.17014117E39 +- (0.17014117E39, ~0.123E~2) = 0.17014117E39 +/ (0.17014117E39, ~0.123E~2) = ~inf +nextAfter (0.17014117E39, ~0.123E~2) = 0.17014116E39 +rem (0.17014117E39, ~0.123E~2) = ~inf +* (0.17014117E39, ~0.11754944E~37) = ~0.19999999E1 ++ (0.17014117E39, ~0.11754944E~37) = 0.17014117E39 +- (0.17014117E39, ~0.11754944E~37) = 0.17014117E39 +/ (0.17014117E39, ~0.11754944E~37) = ~inf +nextAfter (0.17014117E39, ~0.11754944E~37) = 0.17014116E39 +rem (0.17014117E39, ~0.11754944E~37) = ~inf +* (0.17014117E39, ~0.5877472E~38) = ~0.99999994 ++ (0.17014117E39, ~0.5877472E~38) = 0.17014117E39 +- (0.17014117E39, ~0.5877472E~38) = 0.17014117E39 +/ (0.17014117E39, ~0.5877472E~38) = ~inf +nextAfter (0.17014117E39, ~0.5877472E~38) = 0.17014116E39 +rem (0.17014117E39, ~0.5877472E~38) = ~inf +* (0.17014117E39, ~0.1E~44) = ~0.23841856E~6 ++ (0.17014117E39, ~0.1E~44) = 0.17014117E39 +- (0.17014117E39, ~0.1E~44) = 0.17014117E39 +/ (0.17014117E39, ~0.1E~44) = ~inf +nextAfter (0.17014117E39, ~0.1E~44) = 0.17014116E39 +rem (0.17014117E39, ~0.1E~44) = ~inf +* (0.17014117E39, ~0.0) = ~0.0 ++ (0.17014117E39, ~0.0) = 0.17014117E39 +- (0.17014117E39, ~0.0) = 0.17014117E39 +/ (0.17014117E39, ~0.0) = ~inf +nextAfter (0.17014117E39, ~0.0) = 0.17014116E39 +rem (0.17014117E39, ~0.0) = nan +* (0.17014117E39, inf) = inf ++ (0.17014117E39, inf) = inf +- (0.17014117E39, inf) = ~inf +/ (0.17014117E39, inf) = 0.0 +nextAfter (0.17014117E39, inf) = 0.17014118E39 +rem (0.17014117E39, inf) = 0.17014117E39 +* (0.17014117E39, ~inf) = ~inf ++ (0.17014117E39, ~inf) = ~inf +- (0.17014117E39, ~inf) = inf +/ (0.17014117E39, ~inf) = ~0.0 +nextAfter (0.17014117E39, ~inf) = 0.17014116E39 +rem (0.17014117E39, ~inf) = 0.17014117E39 +* (0.17014117E39, nan) = nan ++ (0.17014117E39, nan) = nan +- (0.17014117E39, nan) = nan +/ (0.17014117E39, nan) = nan +nextAfter (0.17014117E39, nan) = nan +rem (0.17014117E39, nan) = nan +* (0.17014117E39, inf) = inf ++ (0.17014117E39, inf) = inf +- (0.17014117E39, inf) = ~inf +/ (0.17014117E39, inf) = 0.0 +nextAfter (0.17014117E39, inf) = 0.17014118E39 +rem (0.17014117E39, inf) = 0.17014117E39 +* (0.123E4, 0.34028235E39) = inf ++ (0.123E4, 0.34028235E39) = 0.34028235E39 +- (0.123E4, 0.34028235E39) = ~0.34028235E39 +/ (0.123E4, 0.34028235E39) = 0.36146455E~35 +nextAfter (0.123E4, 0.34028235E39) = 0.12300001E4 +rem (0.123E4, 0.34028235E39) = 0.123E4 +* (0.123E4, 0.17014117E39) = inf ++ (0.123E4, 0.17014117E39) = 0.17014117E39 +- (0.123E4, 0.17014117E39) = ~0.17014117E39 +/ (0.123E4, 0.17014117E39) = 0.7229291E~35 +nextAfter (0.123E4, 0.17014117E39) = 0.12300001E4 +rem (0.123E4, 0.17014117E39) = 0.123E4 +* (0.123E4, 0.123E4) = 0.15129E7 ++ (0.123E4, 0.123E4) = 0.246E4 +- (0.123E4, 0.123E4) = 0.0 +/ (0.123E4, 0.123E4) = 0.1E1 +nextAfter (0.123E4, 0.123E4) = 0.123E4 +rem (0.123E4, 0.123E4) = 0.0 +* (0.123E4, 0.123E2) = 0.15129E5 ++ (0.123E4, 0.123E2) = 0.12423E4 +- (0.123E4, 0.123E2) = 0.12177E4 +/ (0.123E4, 0.123E2) = 0.1E3 +nextAfter (0.123E4, 0.123E2) = 0.12299999E4 +rem (0.123E4, 0.123E2) = 0.0 +* (0.123E4, 0.31415927E1) = 0.38641592E4 ++ (0.123E4, 0.31415927E1) = 0.12331416E4 +- (0.123E4, 0.31415927E1) = 0.12268584E4 +/ (0.123E4, 0.31415927E1) = 0.39152115E3 +nextAfter (0.123E4, 0.31415927E1) = 0.12299999E4 +rem (0.123E4, 0.31415927E1) = 0.1637207E1 +* (0.123E4, 0.27182817E1) = 0.33434866E4 ++ (0.123E4, 0.27182817E1) = 0.12327183E4 +- (0.123E4, 0.27182817E1) = 0.12272817E4 +/ (0.123E4, 0.27182817E1) = 0.45249173E3 +nextAfter (0.123E4, 0.27182817E1) = 0.12299999E4 +rem (0.123E4, 0.27182817E1) = 0.13366699E1 +* (0.123E4, 0.123E1) = 0.15129E4 ++ (0.123E4, 0.123E1) = 0.123123E4 +- (0.123E4, 0.123E1) = 0.122877E4 +/ (0.123E4, 0.123E1) = 0.1E4 +nextAfter (0.123E4, 0.123E1) = 0.12299999E4 +rem (0.123E4, 0.123E1) = 0.0 +* (0.123E4, 0.123) = 0.15129001E3 ++ (0.123E4, 0.123) = 0.1230123E4 +- (0.123E4, 0.123) = 0.1229877E4 +/ (0.123E4, 0.123) = 0.1E5 +nextAfter (0.123E4, 0.123) = 0.12299999E4 +rem (0.123E4, 0.123) = 0.0 +* (0.123E4, 0.123E~2) = 0.15129001E1 ++ (0.123E4, 0.123E~2) = 0.12300012E4 +- (0.123E4, 0.123E~2) = 0.12299988E4 +/ (0.123E4, 0.123E~2) = 0.99999994E6 +nextAfter (0.123E4, 0.123E~2) = 0.12299999E4 +rem (0.123E4, 0.123E~2) = 0.12207031E~2 +* (0.123E4, 0.11754944E~37) = 0.1445858E~34 ++ (0.123E4, 0.11754944E~37) = 0.123E4 +- (0.123E4, 0.11754944E~37) = 0.123E4 +/ (0.123E4, 0.11754944E~37) = inf +nextAfter (0.123E4, 0.11754944E~37) = 0.12299999E4 +rem (0.123E4, 0.11754944E~37) = ~inf +* (0.123E4, 0.5877472E~38) = 0.722929E~35 ++ (0.123E4, 0.5877472E~38) = 0.123E4 +- (0.123E4, 0.5877472E~38) = 0.123E4 +/ (0.123E4, 0.5877472E~38) = inf +nextAfter (0.123E4, 0.5877472E~38) = 0.12299999E4 +rem (0.123E4, 0.5877472E~38) = ~inf +* (0.123E4, 0.1E~44) = 0.1724E~41 ++ (0.123E4, 0.1E~44) = 0.123E4 +- (0.123E4, 0.1E~44) = 0.123E4 +/ (0.123E4, 0.1E~44) = inf +nextAfter (0.123E4, 0.1E~44) = 0.12299999E4 +rem (0.123E4, 0.1E~44) = ~inf +* (0.123E4, 0.0) = 0.0 ++ (0.123E4, 0.0) = 0.123E4 +- (0.123E4, 0.0) = 0.123E4 +/ (0.123E4, 0.0) = inf +nextAfter (0.123E4, 0.0) = 0.12299999E4 +rem (0.123E4, 0.0) = nan +* (0.123E4, ~0.34028235E39) = ~inf ++ (0.123E4, ~0.34028235E39) = ~0.34028235E39 +- (0.123E4, ~0.34028235E39) = 0.34028235E39 +/ (0.123E4, ~0.34028235E39) = ~0.36146455E~35 +nextAfter (0.123E4, ~0.34028235E39) = 0.12299999E4 +rem (0.123E4, ~0.34028235E39) = 0.123E4 +* (0.123E4, ~0.17014117E39) = ~inf ++ (0.123E4, ~0.17014117E39) = ~0.17014117E39 +- (0.123E4, ~0.17014117E39) = 0.17014117E39 +/ (0.123E4, ~0.17014117E39) = ~0.7229291E~35 +nextAfter (0.123E4, ~0.17014117E39) = 0.12299999E4 +rem (0.123E4, ~0.17014117E39) = 0.123E4 +* (0.123E4, ~0.123E4) = ~0.15129E7 ++ (0.123E4, ~0.123E4) = 0.0 +- (0.123E4, ~0.123E4) = 0.246E4 +/ (0.123E4, ~0.123E4) = ~0.1E1 +nextAfter (0.123E4, ~0.123E4) = 0.12299999E4 +rem (0.123E4, ~0.123E4) = 0.0 +* (0.123E4, ~0.123E2) = ~0.15129E5 ++ (0.123E4, ~0.123E2) = 0.12177E4 +- (0.123E4, ~0.123E2) = 0.12423E4 +/ (0.123E4, ~0.123E2) = ~0.1E3 +nextAfter (0.123E4, ~0.123E2) = 0.12299999E4 +rem (0.123E4, ~0.123E2) = 0.0 +* (0.123E4, ~0.31415927E1) = ~0.38641592E4 ++ (0.123E4, ~0.31415927E1) = 0.12268584E4 +- (0.123E4, ~0.31415927E1) = 0.12331416E4 +/ (0.123E4, ~0.31415927E1) = ~0.39152115E3 +nextAfter (0.123E4, ~0.31415927E1) = 0.12299999E4 +rem (0.123E4, ~0.31415927E1) = 0.1637207E1 +* (0.123E4, ~0.27182817E1) = ~0.33434866E4 ++ (0.123E4, ~0.27182817E1) = 0.12272817E4 +- (0.123E4, ~0.27182817E1) = 0.12327183E4 +/ (0.123E4, ~0.27182817E1) = ~0.45249173E3 +nextAfter (0.123E4, ~0.27182817E1) = 0.12299999E4 +rem (0.123E4, ~0.27182817E1) = 0.13366699E1 +* (0.123E4, ~0.123E1) = ~0.15129E4 ++ (0.123E4, ~0.123E1) = 0.122877E4 +- (0.123E4, ~0.123E1) = 0.123123E4 +/ (0.123E4, ~0.123E1) = ~0.1E4 +nextAfter (0.123E4, ~0.123E1) = 0.12299999E4 +rem (0.123E4, ~0.123E1) = 0.0 +* (0.123E4, ~0.123) = ~0.15129001E3 ++ (0.123E4, ~0.123) = 0.1229877E4 +- (0.123E4, ~0.123) = 0.1230123E4 +/ (0.123E4, ~0.123) = ~0.1E5 +nextAfter (0.123E4, ~0.123) = 0.12299999E4 +rem (0.123E4, ~0.123) = 0.0 +* (0.123E4, ~0.123E~2) = ~0.15129001E1 ++ (0.123E4, ~0.123E~2) = 0.12299988E4 +- (0.123E4, ~0.123E~2) = 0.12300012E4 +/ (0.123E4, ~0.123E~2) = ~0.99999994E6 +nextAfter (0.123E4, ~0.123E~2) = 0.12299999E4 +rem (0.123E4, ~0.123E~2) = 0.12207031E~2 +* (0.123E4, ~0.11754944E~37) = ~0.1445858E~34 ++ (0.123E4, ~0.11754944E~37) = 0.123E4 +- (0.123E4, ~0.11754944E~37) = 0.123E4 +/ (0.123E4, ~0.11754944E~37) = ~inf +nextAfter (0.123E4, ~0.11754944E~37) = 0.12299999E4 +rem (0.123E4, ~0.11754944E~37) = ~inf +* (0.123E4, ~0.5877472E~38) = ~0.722929E~35 ++ (0.123E4, ~0.5877472E~38) = 0.123E4 +- (0.123E4, ~0.5877472E~38) = 0.123E4 +/ (0.123E4, ~0.5877472E~38) = ~inf +nextAfter (0.123E4, ~0.5877472E~38) = 0.12299999E4 +rem (0.123E4, ~0.5877472E~38) = ~inf +* (0.123E4, ~0.1E~44) = ~0.1724E~41 ++ (0.123E4, ~0.1E~44) = 0.123E4 +- (0.123E4, ~0.1E~44) = 0.123E4 +/ (0.123E4, ~0.1E~44) = ~inf +nextAfter (0.123E4, ~0.1E~44) = 0.12299999E4 +rem (0.123E4, ~0.1E~44) = ~inf +* (0.123E4, ~0.0) = ~0.0 ++ (0.123E4, ~0.0) = 0.123E4 +- (0.123E4, ~0.0) = 0.123E4 +/ (0.123E4, ~0.0) = ~inf +nextAfter (0.123E4, ~0.0) = 0.12299999E4 +rem (0.123E4, ~0.0) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300001E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E4, ~inf) = ~inf ++ (0.123E4, ~inf) = ~inf +- (0.123E4, ~inf) = inf +/ (0.123E4, ~inf) = ~0.0 +nextAfter (0.123E4, ~inf) = 0.12299999E4 +rem (0.123E4, ~inf) = 0.123E4 +* (0.123E4, nan) = nan ++ (0.123E4, nan) = nan +- (0.123E4, nan) = nan +/ (0.123E4, nan) = nan +nextAfter (0.123E4, nan) = nan +rem (0.123E4, nan) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300001E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E2, 0.34028235E39) = inf ++ (0.123E2, 0.34028235E39) = 0.34028235E39 +- (0.123E2, 0.34028235E39) = ~0.34028235E39 +/ (0.123E2, 0.34028235E39) = 0.36146455E~37 +nextAfter (0.123E2, 0.34028235E39) = 0.12300001E2 +rem (0.123E2, 0.34028235E39) = 0.123E2 +* (0.123E2, 0.17014117E39) = inf ++ (0.123E2, 0.17014117E39) = 0.17014117E39 +- (0.123E2, 0.17014117E39) = ~0.17014117E39 +/ (0.123E2, 0.17014117E39) = 0.7229291E~37 +nextAfter (0.123E2, 0.17014117E39) = 0.12300001E2 +rem (0.123E2, 0.17014117E39) = 0.123E2 +* (0.123E2, 0.123E4) = 0.15129E5 ++ (0.123E2, 0.123E4) = 0.12423E4 +- (0.123E2, 0.123E4) = ~0.12177E4 +/ (0.123E2, 0.123E4) = 0.1E~1 +nextAfter (0.123E2, 0.123E4) = 0.12300001E2 +rem (0.123E2, 0.123E4) = 0.123E2 +* (0.123E2, 0.123E2) = 0.15129001E3 ++ (0.123E2, 0.123E2) = 0.246E2 +- (0.123E2, 0.123E2) = 0.0 +/ (0.123E2, 0.123E2) = 0.1E1 +nextAfter (0.123E2, 0.123E2) = 0.123E2 +rem (0.123E2, 0.123E2) = 0.0 +* (0.123E2, 0.31415927E1) = 0.3864159E2 ++ (0.123E2, 0.31415927E1) = 0.15441593E2 +- (0.123E2, 0.31415927E1) = 0.9158407E1 +/ (0.123E2, 0.31415927E1) = 0.39152114E1 +nextAfter (0.123E2, 0.31415927E1) = 0.12299999E2 +rem (0.123E2, 0.31415927E1) = 0.28752222E1 +* (0.123E2, 0.27182817E1) = 0.33434868E2 ++ (0.123E2, 0.27182817E1) = 0.15018282E2 +- (0.123E2, 0.27182817E1) = 0.9581718E1 +/ (0.123E2, 0.27182817E1) = 0.4524917E1 +nextAfter (0.123E2, 0.27182817E1) = 0.12299999E2 +rem (0.123E2, 0.27182817E1) = 0.14268732E1 +* (0.123E2, 0.123E1) = 0.15129001E2 ++ (0.123E2, 0.123E1) = 0.13530001E2 +- (0.123E2, 0.123E1) = 0.1107E2 +/ (0.123E2, 0.123E1) = 0.1E2 +nextAfter (0.123E2, 0.123E1) = 0.12299999E2 +rem (0.123E2, 0.123E1) = 0.0 +* (0.123E2, 0.123) = 0.15129001E1 ++ (0.123E2, 0.123) = 0.12423E2 +- (0.123E2, 0.123) = 0.12177E2 +/ (0.123E2, 0.123) = 0.1E3 +nextAfter (0.123E2, 0.123) = 0.12299999E2 +rem (0.123E2, 0.123) = 0.0 +* (0.123E2, 0.123E~2) = 0.15129001E~1 ++ (0.123E2, 0.123E~2) = 0.1230123E2 +- (0.123E2, 0.123E~2) = 0.1229877E2 +/ (0.123E2, 0.123E~2) = 0.1E5 +nextAfter (0.123E2, 0.123E~2) = 0.12299999E2 +rem (0.123E2, 0.123E~2) = 0.0 +* (0.123E2, 0.11754944E~37) = 0.14458581E~36 ++ (0.123E2, 0.11754944E~37) = 0.123E2 +- (0.123E2, 0.11754944E~37) = 0.123E2 +/ (0.123E2, 0.11754944E~37) = inf +nextAfter (0.123E2, 0.11754944E~37) = 0.12299999E2 +rem (0.123E2, 0.11754944E~37) = ~inf +* (0.123E2, 0.5877472E~38) = 0.72292904E~37 ++ (0.123E2, 0.5877472E~38) = 0.123E2 +- (0.123E2, 0.5877472E~38) = 0.123E2 +/ (0.123E2, 0.5877472E~38) = inf +nextAfter (0.123E2, 0.5877472E~38) = 0.12299999E2 +rem (0.123E2, 0.5877472E~38) = ~inf +* (0.123E2, 0.1E~44) = 0.17E~43 ++ (0.123E2, 0.1E~44) = 0.123E2 +- (0.123E2, 0.1E~44) = 0.123E2 +/ (0.123E2, 0.1E~44) = inf +nextAfter (0.123E2, 0.1E~44) = 0.12299999E2 +rem (0.123E2, 0.1E~44) = ~inf +* (0.123E2, 0.0) = 0.0 ++ (0.123E2, 0.0) = 0.123E2 +- (0.123E2, 0.0) = 0.123E2 +/ (0.123E2, 0.0) = inf +nextAfter (0.123E2, 0.0) = 0.12299999E2 +rem (0.123E2, 0.0) = nan +* (0.123E2, ~0.34028235E39) = ~inf ++ (0.123E2, ~0.34028235E39) = ~0.34028235E39 +- (0.123E2, ~0.34028235E39) = 0.34028235E39 +/ (0.123E2, ~0.34028235E39) = ~0.36146455E~37 +nextAfter (0.123E2, ~0.34028235E39) = 0.12299999E2 +rem (0.123E2, ~0.34028235E39) = 0.123E2 +* (0.123E2, ~0.17014117E39) = ~inf ++ (0.123E2, ~0.17014117E39) = ~0.17014117E39 +- (0.123E2, ~0.17014117E39) = 0.17014117E39 +/ (0.123E2, ~0.17014117E39) = ~0.7229291E~37 +nextAfter (0.123E2, ~0.17014117E39) = 0.12299999E2 +rem (0.123E2, ~0.17014117E39) = 0.123E2 +* (0.123E2, ~0.123E4) = ~0.15129E5 ++ (0.123E2, ~0.123E4) = ~0.12177E4 +- (0.123E2, ~0.123E4) = 0.12423E4 +/ (0.123E2, ~0.123E4) = ~0.1E~1 +nextAfter (0.123E2, ~0.123E4) = 0.12299999E2 +rem (0.123E2, ~0.123E4) = 0.123E2 +* (0.123E2, ~0.123E2) = ~0.15129001E3 ++ (0.123E2, ~0.123E2) = 0.0 +- (0.123E2, ~0.123E2) = 0.246E2 +/ (0.123E2, ~0.123E2) = ~0.1E1 +nextAfter (0.123E2, ~0.123E2) = 0.12299999E2 +rem (0.123E2, ~0.123E2) = 0.0 +* (0.123E2, ~0.31415927E1) = ~0.3864159E2 ++ (0.123E2, ~0.31415927E1) = 0.9158407E1 +- (0.123E2, ~0.31415927E1) = 0.15441593E2 +/ (0.123E2, ~0.31415927E1) = ~0.39152114E1 +nextAfter (0.123E2, ~0.31415927E1) = 0.12299999E2 +rem (0.123E2, ~0.31415927E1) = 0.28752222E1 +* (0.123E2, ~0.27182817E1) = ~0.33434868E2 ++ (0.123E2, ~0.27182817E1) = 0.9581718E1 +- (0.123E2, ~0.27182817E1) = 0.15018282E2 +/ (0.123E2, ~0.27182817E1) = ~0.4524917E1 +nextAfter (0.123E2, ~0.27182817E1) = 0.12299999E2 +rem (0.123E2, ~0.27182817E1) = 0.14268732E1 +* (0.123E2, ~0.123E1) = ~0.15129001E2 ++ (0.123E2, ~0.123E1) = 0.1107E2 +- (0.123E2, ~0.123E1) = 0.13530001E2 +/ (0.123E2, ~0.123E1) = ~0.1E2 +nextAfter (0.123E2, ~0.123E1) = 0.12299999E2 +rem (0.123E2, ~0.123E1) = 0.0 +* (0.123E2, ~0.123) = ~0.15129001E1 ++ (0.123E2, ~0.123) = 0.12177E2 +- (0.123E2, ~0.123) = 0.12423E2 +/ (0.123E2, ~0.123) = ~0.1E3 +nextAfter (0.123E2, ~0.123) = 0.12299999E2 +rem (0.123E2, ~0.123) = 0.0 +* (0.123E2, ~0.123E~2) = ~0.15129001E~1 ++ (0.123E2, ~0.123E~2) = 0.1229877E2 +- (0.123E2, ~0.123E~2) = 0.1230123E2 +/ (0.123E2, ~0.123E~2) = ~0.1E5 +nextAfter (0.123E2, ~0.123E~2) = 0.12299999E2 +rem (0.123E2, ~0.123E~2) = 0.0 +* (0.123E2, ~0.11754944E~37) = ~0.14458581E~36 ++ (0.123E2, ~0.11754944E~37) = 0.123E2 +- (0.123E2, ~0.11754944E~37) = 0.123E2 +/ (0.123E2, ~0.11754944E~37) = ~inf +nextAfter (0.123E2, ~0.11754944E~37) = 0.12299999E2 +rem (0.123E2, ~0.11754944E~37) = ~inf +* (0.123E2, ~0.5877472E~38) = ~0.72292904E~37 ++ (0.123E2, ~0.5877472E~38) = 0.123E2 +- (0.123E2, ~0.5877472E~38) = 0.123E2 +/ (0.123E2, ~0.5877472E~38) = ~inf +nextAfter (0.123E2, ~0.5877472E~38) = 0.12299999E2 +rem (0.123E2, ~0.5877472E~38) = ~inf +* (0.123E2, ~0.1E~44) = ~0.17E~43 ++ (0.123E2, ~0.1E~44) = 0.123E2 +- (0.123E2, ~0.1E~44) = 0.123E2 +/ (0.123E2, ~0.1E~44) = ~inf +nextAfter (0.123E2, ~0.1E~44) = 0.12299999E2 +rem (0.123E2, ~0.1E~44) = ~inf +* (0.123E2, ~0.0) = ~0.0 ++ (0.123E2, ~0.0) = 0.123E2 +- (0.123E2, ~0.0) = 0.123E2 +/ (0.123E2, ~0.0) = ~inf +nextAfter (0.123E2, ~0.0) = 0.12299999E2 +rem (0.123E2, ~0.0) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300001E2 +rem (0.123E2, inf) = 0.123E2 +* (0.123E2, ~inf) = ~inf ++ (0.123E2, ~inf) = ~inf +- (0.123E2, ~inf) = inf +/ (0.123E2, ~inf) = ~0.0 +nextAfter (0.123E2, ~inf) = 0.12299999E2 +rem (0.123E2, ~inf) = 0.123E2 +* (0.123E2, nan) = nan ++ (0.123E2, nan) = nan +- (0.123E2, nan) = nan +/ (0.123E2, nan) = nan +nextAfter (0.123E2, nan) = nan +rem (0.123E2, nan) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300001E2 +rem (0.123E2, inf) = 0.123E2 +* (0.31415927E1, 0.34028235E39) = inf ++ (0.31415927E1, 0.34028235E39) = 0.34028235E39 +- (0.31415927E1, 0.34028235E39) = ~0.34028235E39 +/ (0.31415927E1, 0.34028235E39) = 0.9232312E~38 +nextAfter (0.31415927E1, 0.34028235E39) = 0.3141593E1 +rem (0.31415927E1, 0.34028235E39) = 0.31415927E1 +* (0.31415927E1, 0.17014117E39) = inf ++ (0.31415927E1, 0.17014117E39) = 0.17014117E39 +- (0.31415927E1, 0.17014117E39) = ~0.17014117E39 +/ (0.31415927E1, 0.17014117E39) = 0.18464624E~37 +nextAfter (0.31415927E1, 0.17014117E39) = 0.3141593E1 +rem (0.31415927E1, 0.17014117E39) = 0.31415927E1 +* (0.31415927E1, 0.123E4) = 0.38641592E4 ++ (0.31415927E1, 0.123E4) = 0.12331416E4 +- (0.31415927E1, 0.123E4) = ~0.12268584E4 +/ (0.31415927E1, 0.123E4) = 0.25541405E~2 +nextAfter (0.31415927E1, 0.123E4) = 0.3141593E1 +rem (0.31415927E1, 0.123E4) = 0.31415927E1 +* (0.31415927E1, 0.123E2) = 0.3864159E2 ++ (0.31415927E1, 0.123E2) = 0.15441593E2 +- (0.31415927E1, 0.123E2) = ~0.9158407E1 +/ (0.31415927E1, 0.123E2) = 0.25541404 +nextAfter (0.31415927E1, 0.123E2) = 0.3141593E1 +rem (0.31415927E1, 0.123E2) = 0.31415927E1 +* (0.31415927E1, 0.31415927E1) = 0.9869605E1 ++ (0.31415927E1, 0.31415927E1) = 0.62831855E1 +- (0.31415927E1, 0.31415927E1) = 0.0 +/ (0.31415927E1, 0.31415927E1) = 0.1E1 +nextAfter (0.31415927E1, 0.31415927E1) = 0.31415927E1 +rem (0.31415927E1, 0.31415927E1) = 0.0 +* (0.31415927E1, 0.27182817E1) = 0.8539734E1 ++ (0.31415927E1, 0.27182817E1) = 0.58598747E1 +- (0.31415927E1, 0.27182817E1) = 0.423311 +/ (0.31415927E1, 0.27182817E1) = 0.11557274E1 +nextAfter (0.31415927E1, 0.27182817E1) = 0.31415925E1 +rem (0.31415927E1, 0.27182817E1) = 0.423311 +* (0.31415927E1, 0.123E1) = 0.3864159E1 ++ (0.31415927E1, 0.123E1) = 0.43715925E1 +- (0.31415927E1, 0.123E1) = 0.19115927E1 +/ (0.31415927E1, 0.123E1) = 0.25541403E1 +nextAfter (0.31415927E1, 0.123E1) = 0.31415925E1 +rem (0.31415927E1, 0.123E1) = 0.6815927 +* (0.31415927E1, 0.123) = 0.38641593 ++ (0.31415927E1, 0.123) = 0.32645926E1 +- (0.31415927E1, 0.123) = 0.30185928E1 +/ (0.31415927E1, 0.123) = 0.25541403E2 +nextAfter (0.31415927E1, 0.123) = 0.31415925E1 +rem (0.31415927E1, 0.123) = 0.6659269E~1 +* (0.31415927E1, 0.123E~2) = 0.38641593E~2 ++ (0.31415927E1, 0.123E~2) = 0.31428227E1 +- (0.31415927E1, 0.123E~2) = 0.31403627E1 +/ (0.31415927E1, 0.123E~2) = 0.25541404E4 +nextAfter (0.31415927E1, 0.123E~2) = 0.31415925E1 +rem (0.31415927E1, 0.123E~2) = 0.17261505E~3 +* (0.31415927E1, 0.11754944E~37) = 0.36929245E~37 ++ (0.31415927E1, 0.11754944E~37) = 0.31415927E1 +- (0.31415927E1, 0.11754944E~37) = 0.31415927E1 +/ (0.31415927E1, 0.11754944E~37) = 0.26725715E39 +nextAfter (0.31415927E1, 0.11754944E~37) = 0.31415925E1 +rem (0.31415927E1, 0.11754944E~37) = 0.0 +* (0.31415927E1, 0.5877472E~38) = 0.18464623E~37 ++ (0.31415927E1, 0.5877472E~38) = 0.31415927E1 +- (0.31415927E1, 0.5877472E~38) = 0.31415927E1 +/ (0.31415927E1, 0.5877472E~38) = inf +nextAfter (0.31415927E1, 0.5877472E~38) = 0.31415925E1 +rem (0.31415927E1, 0.5877472E~38) = ~inf +* (0.31415927E1, 0.1E~44) = 0.4E~44 ++ (0.31415927E1, 0.1E~44) = 0.31415927E1 +- (0.31415927E1, 0.1E~44) = 0.31415927E1 +/ (0.31415927E1, 0.1E~44) = inf +nextAfter (0.31415927E1, 0.1E~44) = 0.31415925E1 +rem (0.31415927E1, 0.1E~44) = ~inf +* (0.31415927E1, 0.0) = 0.0 ++ (0.31415927E1, 0.0) = 0.31415927E1 +- (0.31415927E1, 0.0) = 0.31415927E1 +/ (0.31415927E1, 0.0) = inf +nextAfter (0.31415927E1, 0.0) = 0.31415925E1 +rem (0.31415927E1, 0.0) = nan +* (0.31415927E1, ~0.34028235E39) = ~inf ++ (0.31415927E1, ~0.34028235E39) = ~0.34028235E39 +- (0.31415927E1, ~0.34028235E39) = 0.34028235E39 +/ (0.31415927E1, ~0.34028235E39) = ~0.9232312E~38 +nextAfter (0.31415927E1, ~0.34028235E39) = 0.31415925E1 +rem (0.31415927E1, ~0.34028235E39) = 0.31415927E1 +* (0.31415927E1, ~0.17014117E39) = ~inf ++ (0.31415927E1, ~0.17014117E39) = ~0.17014117E39 +- (0.31415927E1, ~0.17014117E39) = 0.17014117E39 +/ (0.31415927E1, ~0.17014117E39) = ~0.18464624E~37 +nextAfter (0.31415927E1, ~0.17014117E39) = 0.31415925E1 +rem (0.31415927E1, ~0.17014117E39) = 0.31415927E1 +* (0.31415927E1, ~0.123E4) = ~0.38641592E4 ++ (0.31415927E1, ~0.123E4) = ~0.12268584E4 +- (0.31415927E1, ~0.123E4) = 0.12331416E4 +/ (0.31415927E1, ~0.123E4) = ~0.25541405E~2 +nextAfter (0.31415927E1, ~0.123E4) = 0.31415925E1 +rem (0.31415927E1, ~0.123E4) = 0.31415927E1 +* (0.31415927E1, ~0.123E2) = ~0.3864159E2 ++ (0.31415927E1, ~0.123E2) = ~0.9158407E1 +- (0.31415927E1, ~0.123E2) = 0.15441593E2 +/ (0.31415927E1, ~0.123E2) = ~0.25541404 +nextAfter (0.31415927E1, ~0.123E2) = 0.31415925E1 +rem (0.31415927E1, ~0.123E2) = 0.31415927E1 +* (0.31415927E1, ~0.31415927E1) = ~0.9869605E1 ++ (0.31415927E1, ~0.31415927E1) = 0.0 +- (0.31415927E1, ~0.31415927E1) = 0.62831855E1 +/ (0.31415927E1, ~0.31415927E1) = ~0.1E1 +nextAfter (0.31415927E1, ~0.31415927E1) = 0.31415925E1 +rem (0.31415927E1, ~0.31415927E1) = 0.0 +* (0.31415927E1, ~0.27182817E1) = ~0.8539734E1 ++ (0.31415927E1, ~0.27182817E1) = 0.423311 +- (0.31415927E1, ~0.27182817E1) = 0.58598747E1 +/ (0.31415927E1, ~0.27182817E1) = ~0.11557274E1 +nextAfter (0.31415927E1, ~0.27182817E1) = 0.31415925E1 +rem (0.31415927E1, ~0.27182817E1) = 0.423311 +* (0.31415927E1, ~0.123E1) = ~0.3864159E1 ++ (0.31415927E1, ~0.123E1) = 0.19115927E1 +- (0.31415927E1, ~0.123E1) = 0.43715925E1 +/ (0.31415927E1, ~0.123E1) = ~0.25541403E1 +nextAfter (0.31415927E1, ~0.123E1) = 0.31415925E1 +rem (0.31415927E1, ~0.123E1) = 0.6815927 +* (0.31415927E1, ~0.123) = ~0.38641593 ++ (0.31415927E1, ~0.123) = 0.30185928E1 +- (0.31415927E1, ~0.123) = 0.32645926E1 +/ (0.31415927E1, ~0.123) = ~0.25541403E2 +nextAfter (0.31415927E1, ~0.123) = 0.31415925E1 +rem (0.31415927E1, ~0.123) = 0.6659269E~1 +* (0.31415927E1, ~0.123E~2) = ~0.38641593E~2 ++ (0.31415927E1, ~0.123E~2) = 0.31403627E1 +- (0.31415927E1, ~0.123E~2) = 0.31428227E1 +/ (0.31415927E1, ~0.123E~2) = ~0.25541404E4 +nextAfter (0.31415927E1, ~0.123E~2) = 0.31415925E1 +rem (0.31415927E1, ~0.123E~2) = 0.17261505E~3 +* (0.31415927E1, ~0.11754944E~37) = ~0.36929245E~37 ++ (0.31415927E1, ~0.11754944E~37) = 0.31415927E1 +- (0.31415927E1, ~0.11754944E~37) = 0.31415927E1 +/ (0.31415927E1, ~0.11754944E~37) = ~0.26725715E39 +nextAfter (0.31415927E1, ~0.11754944E~37) = 0.31415925E1 +rem (0.31415927E1, ~0.11754944E~37) = 0.0 +* (0.31415927E1, ~0.5877472E~38) = ~0.18464623E~37 ++ (0.31415927E1, ~0.5877472E~38) = 0.31415927E1 +- (0.31415927E1, ~0.5877472E~38) = 0.31415927E1 +/ (0.31415927E1, ~0.5877472E~38) = ~inf +nextAfter (0.31415927E1, ~0.5877472E~38) = 0.31415925E1 +rem (0.31415927E1, ~0.5877472E~38) = ~inf +* (0.31415927E1, ~0.1E~44) = ~0.4E~44 ++ (0.31415927E1, ~0.1E~44) = 0.31415927E1 +- (0.31415927E1, ~0.1E~44) = 0.31415927E1 +/ (0.31415927E1, ~0.1E~44) = ~inf +nextAfter (0.31415927E1, ~0.1E~44) = 0.31415925E1 +rem (0.31415927E1, ~0.1E~44) = ~inf +* (0.31415927E1, ~0.0) = ~0.0 ++ (0.31415927E1, ~0.0) = 0.31415927E1 +- (0.31415927E1, ~0.0) = 0.31415927E1 +/ (0.31415927E1, ~0.0) = ~inf +nextAfter (0.31415927E1, ~0.0) = 0.31415925E1 +rem (0.31415927E1, ~0.0) = nan +* (0.31415927E1, inf) = inf ++ (0.31415927E1, inf) = inf +- (0.31415927E1, inf) = ~inf +/ (0.31415927E1, inf) = 0.0 +nextAfter (0.31415927E1, inf) = 0.3141593E1 +rem (0.31415927E1, inf) = 0.31415927E1 +* (0.31415927E1, ~inf) = ~inf ++ (0.31415927E1, ~inf) = ~inf +- (0.31415927E1, ~inf) = inf +/ (0.31415927E1, ~inf) = ~0.0 +nextAfter (0.31415927E1, ~inf) = 0.31415925E1 +rem (0.31415927E1, ~inf) = 0.31415927E1 +* (0.31415927E1, nan) = nan ++ (0.31415927E1, nan) = nan +- (0.31415927E1, nan) = nan +/ (0.31415927E1, nan) = nan +nextAfter (0.31415927E1, nan) = nan +rem (0.31415927E1, nan) = nan +* (0.31415927E1, inf) = inf ++ (0.31415927E1, inf) = inf +- (0.31415927E1, inf) = ~inf +/ (0.31415927E1, inf) = 0.0 +nextAfter (0.31415927E1, inf) = 0.3141593E1 +rem (0.31415927E1, inf) = 0.31415927E1 +* (0.27182817E1, 0.34028235E39) = inf ++ (0.27182817E1, 0.34028235E39) = 0.34028235E39 +- (0.27182817E1, 0.34028235E39) = ~0.34028235E39 +/ (0.27182817E1, 0.34028235E39) = 0.7988312E~38 +nextAfter (0.27182817E1, 0.34028235E39) = 0.2718282E1 +rem (0.27182817E1, 0.34028235E39) = 0.27182817E1 +* (0.27182817E1, 0.17014117E39) = inf ++ (0.27182817E1, 0.17014117E39) = 0.17014117E39 +- (0.27182817E1, 0.17014117E39) = ~0.17014117E39 +/ (0.27182817E1, 0.17014117E39) = 0.15976626E~37 +nextAfter (0.27182817E1, 0.17014117E39) = 0.2718282E1 +rem (0.27182817E1, 0.17014117E39) = 0.27182817E1 +* (0.27182817E1, 0.123E4) = 0.33434866E4 ++ (0.27182817E1, 0.123E4) = 0.12327183E4 +- (0.27182817E1, 0.123E4) = ~0.12272817E4 +/ (0.27182817E1, 0.123E4) = 0.22099852E~2 +nextAfter (0.27182817E1, 0.123E4) = 0.2718282E1 +rem (0.27182817E1, 0.123E4) = 0.27182817E1 +* (0.27182817E1, 0.123E2) = 0.33434868E2 ++ (0.27182817E1, 0.123E2) = 0.15018282E2 +- (0.27182817E1, 0.123E2) = ~0.9581718E1 +/ (0.27182817E1, 0.123E2) = 0.22099851 +nextAfter (0.27182817E1, 0.123E2) = 0.2718282E1 +rem (0.27182817E1, 0.123E2) = 0.27182817E1 +* (0.27182817E1, 0.31415927E1) = 0.8539734E1 ++ (0.27182817E1, 0.31415927E1) = 0.58598747E1 +- (0.27182817E1, 0.31415927E1) = ~0.423311 +/ (0.27182817E1, 0.31415927E1) = 0.86525595 +nextAfter (0.27182817E1, 0.31415927E1) = 0.2718282E1 +rem (0.27182817E1, 0.31415927E1) = 0.27182817E1 +* (0.27182817E1, 0.27182817E1) = 0.73890557E1 ++ (0.27182817E1, 0.27182817E1) = 0.54365635E1 +- (0.27182817E1, 0.27182817E1) = 0.0 +/ (0.27182817E1, 0.27182817E1) = 0.1E1 +nextAfter (0.27182817E1, 0.27182817E1) = 0.27182817E1 +rem (0.27182817E1, 0.27182817E1) = 0.0 +* (0.27182817E1, 0.123E1) = 0.33434865E1 ++ (0.27182817E1, 0.123E1) = 0.39482818E1 +- (0.27182817E1, 0.123E1) = 0.14882817E1 +/ (0.27182817E1, 0.123E1) = 0.2209985E1 +nextAfter (0.27182817E1, 0.123E1) = 0.27182815E1 +rem (0.27182817E1, 0.123E1) = 0.2582817 +* (0.27182817E1, 0.123) = 0.33434868 ++ (0.27182817E1, 0.123) = 0.28412817E1 +- (0.27182817E1, 0.123) = 0.25952818E1 +/ (0.27182817E1, 0.123) = 0.22099852E2 +nextAfter (0.27182817E1, 0.123) = 0.27182815E1 +rem (0.27182817E1, 0.123) = 0.12281656E~1 +* (0.27182817E1, 0.123E~2) = 0.33434867E~2 ++ (0.27182817E1, 0.123E~2) = 0.27195117E1 +- (0.27182817E1, 0.123E~2) = 0.27170517E1 +/ (0.27182817E1, 0.123E~2) = 0.2209985E4 +nextAfter (0.27182817E1, 0.123E~2) = 0.27182815E1 +rem (0.27182817E1, 0.123E~2) = 0.12116432E~2 +* (0.27182817E1, 0.11754944E~37) = 0.31953248E~37 ++ (0.27182817E1, 0.11754944E~37) = 0.27182817E1 +- (0.27182817E1, 0.11754944E~37) = 0.27182817E1 +/ (0.27182817E1, 0.11754944E~37) = 0.23124584E39 +nextAfter (0.27182817E1, 0.11754944E~37) = 0.27182815E1 +rem (0.27182817E1, 0.11754944E~37) = 0.0 +* (0.27182817E1, 0.5877472E~38) = 0.15976624E~37 ++ (0.27182817E1, 0.5877472E~38) = 0.27182817E1 +- (0.27182817E1, 0.5877472E~38) = 0.27182817E1 +/ (0.27182817E1, 0.5877472E~38) = inf +nextAfter (0.27182817E1, 0.5877472E~38) = 0.27182815E1 +rem (0.27182817E1, 0.5877472E~38) = ~inf +* (0.27182817E1, 0.1E~44) = 0.4E~44 ++ (0.27182817E1, 0.1E~44) = 0.27182817E1 +- (0.27182817E1, 0.1E~44) = 0.27182817E1 +/ (0.27182817E1, 0.1E~44) = inf +nextAfter (0.27182817E1, 0.1E~44) = 0.27182815E1 +rem (0.27182817E1, 0.1E~44) = ~inf +* (0.27182817E1, 0.0) = 0.0 ++ (0.27182817E1, 0.0) = 0.27182817E1 +- (0.27182817E1, 0.0) = 0.27182817E1 +/ (0.27182817E1, 0.0) = inf +nextAfter (0.27182817E1, 0.0) = 0.27182815E1 +rem (0.27182817E1, 0.0) = nan +* (0.27182817E1, ~0.34028235E39) = ~inf ++ (0.27182817E1, ~0.34028235E39) = ~0.34028235E39 +- (0.27182817E1, ~0.34028235E39) = 0.34028235E39 +/ (0.27182817E1, ~0.34028235E39) = ~0.7988312E~38 +nextAfter (0.27182817E1, ~0.34028235E39) = 0.27182815E1 +rem (0.27182817E1, ~0.34028235E39) = 0.27182817E1 +* (0.27182817E1, ~0.17014117E39) = ~inf ++ (0.27182817E1, ~0.17014117E39) = ~0.17014117E39 +- (0.27182817E1, ~0.17014117E39) = 0.17014117E39 +/ (0.27182817E1, ~0.17014117E39) = ~0.15976626E~37 +nextAfter (0.27182817E1, ~0.17014117E39) = 0.27182815E1 +rem (0.27182817E1, ~0.17014117E39) = 0.27182817E1 +* (0.27182817E1, ~0.123E4) = ~0.33434866E4 ++ (0.27182817E1, ~0.123E4) = ~0.12272817E4 +- (0.27182817E1, ~0.123E4) = 0.12327183E4 +/ (0.27182817E1, ~0.123E4) = ~0.22099852E~2 +nextAfter (0.27182817E1, ~0.123E4) = 0.27182815E1 +rem (0.27182817E1, ~0.123E4) = 0.27182817E1 +* (0.27182817E1, ~0.123E2) = ~0.33434868E2 ++ (0.27182817E1, ~0.123E2) = ~0.9581718E1 +- (0.27182817E1, ~0.123E2) = 0.15018282E2 +/ (0.27182817E1, ~0.123E2) = ~0.22099851 +nextAfter (0.27182817E1, ~0.123E2) = 0.27182815E1 +rem (0.27182817E1, ~0.123E2) = 0.27182817E1 +* (0.27182817E1, ~0.31415927E1) = ~0.8539734E1 ++ (0.27182817E1, ~0.31415927E1) = ~0.423311 +- (0.27182817E1, ~0.31415927E1) = 0.58598747E1 +/ (0.27182817E1, ~0.31415927E1) = ~0.86525595 +nextAfter (0.27182817E1, ~0.31415927E1) = 0.27182815E1 +rem (0.27182817E1, ~0.31415927E1) = 0.27182817E1 +* (0.27182817E1, ~0.27182817E1) = ~0.73890557E1 ++ (0.27182817E1, ~0.27182817E1) = 0.0 +- (0.27182817E1, ~0.27182817E1) = 0.54365635E1 +/ (0.27182817E1, ~0.27182817E1) = ~0.1E1 +nextAfter (0.27182817E1, ~0.27182817E1) = 0.27182815E1 +rem (0.27182817E1, ~0.27182817E1) = 0.0 +* (0.27182817E1, ~0.123E1) = ~0.33434865E1 ++ (0.27182817E1, ~0.123E1) = 0.14882817E1 +- (0.27182817E1, ~0.123E1) = 0.39482818E1 +/ (0.27182817E1, ~0.123E1) = ~0.2209985E1 +nextAfter (0.27182817E1, ~0.123E1) = 0.27182815E1 +rem (0.27182817E1, ~0.123E1) = 0.2582817 +* (0.27182817E1, ~0.123) = ~0.33434868 ++ (0.27182817E1, ~0.123) = 0.25952818E1 +- (0.27182817E1, ~0.123) = 0.28412817E1 +/ (0.27182817E1, ~0.123) = ~0.22099852E2 +nextAfter (0.27182817E1, ~0.123) = 0.27182815E1 +rem (0.27182817E1, ~0.123) = 0.12281656E~1 +* (0.27182817E1, ~0.123E~2) = ~0.33434867E~2 ++ (0.27182817E1, ~0.123E~2) = 0.27170517E1 +- (0.27182817E1, ~0.123E~2) = 0.27195117E1 +/ (0.27182817E1, ~0.123E~2) = ~0.2209985E4 +nextAfter (0.27182817E1, ~0.123E~2) = 0.27182815E1 +rem (0.27182817E1, ~0.123E~2) = 0.12116432E~2 +* (0.27182817E1, ~0.11754944E~37) = ~0.31953248E~37 ++ (0.27182817E1, ~0.11754944E~37) = 0.27182817E1 +- (0.27182817E1, ~0.11754944E~37) = 0.27182817E1 +/ (0.27182817E1, ~0.11754944E~37) = ~0.23124584E39 +nextAfter (0.27182817E1, ~0.11754944E~37) = 0.27182815E1 +rem (0.27182817E1, ~0.11754944E~37) = 0.0 +* (0.27182817E1, ~0.5877472E~38) = ~0.15976624E~37 ++ (0.27182817E1, ~0.5877472E~38) = 0.27182817E1 +- (0.27182817E1, ~0.5877472E~38) = 0.27182817E1 +/ (0.27182817E1, ~0.5877472E~38) = ~inf +nextAfter (0.27182817E1, ~0.5877472E~38) = 0.27182815E1 +rem (0.27182817E1, ~0.5877472E~38) = ~inf +* (0.27182817E1, ~0.1E~44) = ~0.4E~44 ++ (0.27182817E1, ~0.1E~44) = 0.27182817E1 +- (0.27182817E1, ~0.1E~44) = 0.27182817E1 +/ (0.27182817E1, ~0.1E~44) = ~inf +nextAfter (0.27182817E1, ~0.1E~44) = 0.27182815E1 +rem (0.27182817E1, ~0.1E~44) = ~inf +* (0.27182817E1, ~0.0) = ~0.0 ++ (0.27182817E1, ~0.0) = 0.27182817E1 +- (0.27182817E1, ~0.0) = 0.27182817E1 +/ (0.27182817E1, ~0.0) = ~inf +nextAfter (0.27182817E1, ~0.0) = 0.27182815E1 +rem (0.27182817E1, ~0.0) = nan +* (0.27182817E1, inf) = inf ++ (0.27182817E1, inf) = inf +- (0.27182817E1, inf) = ~inf +/ (0.27182817E1, inf) = 0.0 +nextAfter (0.27182817E1, inf) = 0.2718282E1 +rem (0.27182817E1, inf) = 0.27182817E1 +* (0.27182817E1, ~inf) = ~inf ++ (0.27182817E1, ~inf) = ~inf +- (0.27182817E1, ~inf) = inf +/ (0.27182817E1, ~inf) = ~0.0 +nextAfter (0.27182817E1, ~inf) = 0.27182815E1 +rem (0.27182817E1, ~inf) = 0.27182817E1 +* (0.27182817E1, nan) = nan ++ (0.27182817E1, nan) = nan +- (0.27182817E1, nan) = nan +/ (0.27182817E1, nan) = nan +nextAfter (0.27182817E1, nan) = nan +rem (0.27182817E1, nan) = nan +* (0.27182817E1, inf) = inf ++ (0.27182817E1, inf) = inf +- (0.27182817E1, inf) = ~inf +/ (0.27182817E1, inf) = 0.0 +nextAfter (0.27182817E1, inf) = 0.2718282E1 +rem (0.27182817E1, inf) = 0.27182817E1 +* (0.123E1, 0.34028235E39) = inf ++ (0.123E1, 0.34028235E39) = 0.34028235E39 +- (0.123E1, 0.34028235E39) = ~0.34028235E39 +/ (0.123E1, 0.34028235E39) = 0.3614645E~38 +nextAfter (0.123E1, 0.34028235E39) = 0.12300001E1 +rem (0.123E1, 0.34028235E39) = 0.123E1 +* (0.123E1, 0.17014117E39) = 0.20927364E39 ++ (0.123E1, 0.17014117E39) = 0.17014117E39 +- (0.123E1, 0.17014117E39) = ~0.17014117E39 +/ (0.123E1, 0.17014117E39) = 0.722929E~38 +nextAfter (0.123E1, 0.17014117E39) = 0.12300001E1 +rem (0.123E1, 0.17014117E39) = 0.123E1 +* (0.123E1, 0.123E4) = 0.15129E4 ++ (0.123E1, 0.123E4) = 0.123123E4 +- (0.123E1, 0.123E4) = ~0.122877E4 +/ (0.123E1, 0.123E4) = 0.1E~2 +nextAfter (0.123E1, 0.123E4) = 0.12300001E1 +rem (0.123E1, 0.123E4) = 0.123E1 +* (0.123E1, 0.123E2) = 0.15129001E2 ++ (0.123E1, 0.123E2) = 0.13530001E2 +- (0.123E1, 0.123E2) = ~0.1107E2 +/ (0.123E1, 0.123E2) = 0.1 +nextAfter (0.123E1, 0.123E2) = 0.12300001E1 +rem (0.123E1, 0.123E2) = 0.123E1 +* (0.123E1, 0.31415927E1) = 0.3864159E1 ++ (0.123E1, 0.31415927E1) = 0.43715925E1 +- (0.123E1, 0.31415927E1) = ~0.19115927E1 +/ (0.123E1, 0.31415927E1) = 0.39152116 +nextAfter (0.123E1, 0.31415927E1) = 0.12300001E1 +rem (0.123E1, 0.31415927E1) = 0.123E1 +* (0.123E1, 0.27182817E1) = 0.33434865E1 ++ (0.123E1, 0.27182817E1) = 0.39482818E1 +- (0.123E1, 0.27182817E1) = ~0.14882817E1 +/ (0.123E1, 0.27182817E1) = 0.45249173 +nextAfter (0.123E1, 0.27182817E1) = 0.12300001E1 +rem (0.123E1, 0.27182817E1) = 0.123E1 +* (0.123E1, 0.123E1) = 0.15129E1 ++ (0.123E1, 0.123E1) = 0.246E1 +- (0.123E1, 0.123E1) = 0.0 +/ (0.123E1, 0.123E1) = 0.1E1 +nextAfter (0.123E1, 0.123E1) = 0.123E1 +rem (0.123E1, 0.123E1) = 0.0 +* (0.123E1, 0.123) = 0.15129 ++ (0.123E1, 0.123) = 0.1353E1 +- (0.123E1, 0.123) = 0.1107E1 +/ (0.123E1, 0.123) = 0.1E2 +nextAfter (0.123E1, 0.123) = 0.12299999E1 +rem (0.123E1, 0.123) = 0.0 +* (0.123E1, 0.123E~2) = 0.15129001E~2 ++ (0.123E1, 0.123E~2) = 0.123123E1 +- (0.123E1, 0.123E~2) = 0.122877E1 +/ (0.123E1, 0.123E~2) = 0.1E4 +nextAfter (0.123E1, 0.123E~2) = 0.12299999E1 +rem (0.123E1, 0.123E~2) = 0.0 +* (0.123E1, 0.11754944E~37) = 0.14458581E~37 ++ (0.123E1, 0.11754944E~37) = 0.123E1 +- (0.123E1, 0.11754944E~37) = 0.123E1 +/ (0.123E1, 0.11754944E~37) = 0.10463683E39 +nextAfter (0.123E1, 0.11754944E~37) = 0.12299999E1 +rem (0.123E1, 0.11754944E~37) = 0.0 +* (0.123E1, 0.5877472E~38) = 0.722929E~38 ++ (0.123E1, 0.5877472E~38) = 0.123E1 +- (0.123E1, 0.5877472E~38) = 0.123E1 +/ (0.123E1, 0.5877472E~38) = 0.20927366E39 +nextAfter (0.123E1, 0.5877472E~38) = 0.12299999E1 +rem (0.123E1, 0.5877472E~38) = 0.0 +* (0.123E1, 0.1E~44) = 0.1E~44 ++ (0.123E1, 0.1E~44) = 0.123E1 +- (0.123E1, 0.1E~44) = 0.123E1 +/ (0.123E1, 0.1E~44) = inf +nextAfter (0.123E1, 0.1E~44) = 0.12299999E1 +rem (0.123E1, 0.1E~44) = ~inf +* (0.123E1, 0.0) = 0.0 ++ (0.123E1, 0.0) = 0.123E1 +- (0.123E1, 0.0) = 0.123E1 +/ (0.123E1, 0.0) = inf +nextAfter (0.123E1, 0.0) = 0.12299999E1 +rem (0.123E1, 0.0) = nan +* (0.123E1, ~0.34028235E39) = ~inf ++ (0.123E1, ~0.34028235E39) = ~0.34028235E39 +- (0.123E1, ~0.34028235E39) = 0.34028235E39 +/ (0.123E1, ~0.34028235E39) = ~0.3614645E~38 +nextAfter (0.123E1, ~0.34028235E39) = 0.12299999E1 +rem (0.123E1, ~0.34028235E39) = 0.123E1 +* (0.123E1, ~0.17014117E39) = ~0.20927364E39 ++ (0.123E1, ~0.17014117E39) = ~0.17014117E39 +- (0.123E1, ~0.17014117E39) = 0.17014117E39 +/ (0.123E1, ~0.17014117E39) = ~0.722929E~38 +nextAfter (0.123E1, ~0.17014117E39) = 0.12299999E1 +rem (0.123E1, ~0.17014117E39) = 0.123E1 +* (0.123E1, ~0.123E4) = ~0.15129E4 ++ (0.123E1, ~0.123E4) = ~0.122877E4 +- (0.123E1, ~0.123E4) = 0.123123E4 +/ (0.123E1, ~0.123E4) = ~0.1E~2 +nextAfter (0.123E1, ~0.123E4) = 0.12299999E1 +rem (0.123E1, ~0.123E4) = 0.123E1 +* (0.123E1, ~0.123E2) = ~0.15129001E2 ++ (0.123E1, ~0.123E2) = ~0.1107E2 +- (0.123E1, ~0.123E2) = 0.13530001E2 +/ (0.123E1, ~0.123E2) = ~0.1 +nextAfter (0.123E1, ~0.123E2) = 0.12299999E1 +rem (0.123E1, ~0.123E2) = 0.123E1 +* (0.123E1, ~0.31415927E1) = ~0.3864159E1 ++ (0.123E1, ~0.31415927E1) = ~0.19115927E1 +- (0.123E1, ~0.31415927E1) = 0.43715925E1 +/ (0.123E1, ~0.31415927E1) = ~0.39152116 +nextAfter (0.123E1, ~0.31415927E1) = 0.12299999E1 +rem (0.123E1, ~0.31415927E1) = 0.123E1 +* (0.123E1, ~0.27182817E1) = ~0.33434865E1 ++ (0.123E1, ~0.27182817E1) = ~0.14882817E1 +- (0.123E1, ~0.27182817E1) = 0.39482818E1 +/ (0.123E1, ~0.27182817E1) = ~0.45249173 +nextAfter (0.123E1, ~0.27182817E1) = 0.12299999E1 +rem (0.123E1, ~0.27182817E1) = 0.123E1 +* (0.123E1, ~0.123E1) = ~0.15129E1 ++ (0.123E1, ~0.123E1) = 0.0 +- (0.123E1, ~0.123E1) = 0.246E1 +/ (0.123E1, ~0.123E1) = ~0.1E1 +nextAfter (0.123E1, ~0.123E1) = 0.12299999E1 +rem (0.123E1, ~0.123E1) = 0.0 +* (0.123E1, ~0.123) = ~0.15129 ++ (0.123E1, ~0.123) = 0.1107E1 +- (0.123E1, ~0.123) = 0.1353E1 +/ (0.123E1, ~0.123) = ~0.1E2 +nextAfter (0.123E1, ~0.123) = 0.12299999E1 +rem (0.123E1, ~0.123) = 0.0 +* (0.123E1, ~0.123E~2) = ~0.15129001E~2 ++ (0.123E1, ~0.123E~2) = 0.122877E1 +- (0.123E1, ~0.123E~2) = 0.123123E1 +/ (0.123E1, ~0.123E~2) = ~0.1E4 +nextAfter (0.123E1, ~0.123E~2) = 0.12299999E1 +rem (0.123E1, ~0.123E~2) = 0.0 +* (0.123E1, ~0.11754944E~37) = ~0.14458581E~37 ++ (0.123E1, ~0.11754944E~37) = 0.123E1 +- (0.123E1, ~0.11754944E~37) = 0.123E1 +/ (0.123E1, ~0.11754944E~37) = ~0.10463683E39 +nextAfter (0.123E1, ~0.11754944E~37) = 0.12299999E1 +rem (0.123E1, ~0.11754944E~37) = 0.0 +* (0.123E1, ~0.5877472E~38) = ~0.722929E~38 ++ (0.123E1, ~0.5877472E~38) = 0.123E1 +- (0.123E1, ~0.5877472E~38) = 0.123E1 +/ (0.123E1, ~0.5877472E~38) = ~0.20927366E39 +nextAfter (0.123E1, ~0.5877472E~38) = 0.12299999E1 +rem (0.123E1, ~0.5877472E~38) = 0.0 +* (0.123E1, ~0.1E~44) = ~0.1E~44 ++ (0.123E1, ~0.1E~44) = 0.123E1 +- (0.123E1, ~0.1E~44) = 0.123E1 +/ (0.123E1, ~0.1E~44) = ~inf +nextAfter (0.123E1, ~0.1E~44) = 0.12299999E1 +rem (0.123E1, ~0.1E~44) = ~inf +* (0.123E1, ~0.0) = ~0.0 ++ (0.123E1, ~0.0) = 0.123E1 +- (0.123E1, ~0.0) = 0.123E1 +/ (0.123E1, ~0.0) = ~inf +nextAfter (0.123E1, ~0.0) = 0.12299999E1 +rem (0.123E1, ~0.0) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300001E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123E1, ~inf) = ~inf ++ (0.123E1, ~inf) = ~inf +- (0.123E1, ~inf) = inf +/ (0.123E1, ~inf) = ~0.0 +nextAfter (0.123E1, ~inf) = 0.12299999E1 +rem (0.123E1, ~inf) = 0.123E1 +* (0.123E1, nan) = nan ++ (0.123E1, nan) = nan +- (0.123E1, nan) = nan +/ (0.123E1, nan) = nan +nextAfter (0.123E1, nan) = nan +rem (0.123E1, nan) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300001E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123, 0.34028235E39) = 0.4185473E38 ++ (0.123, 0.34028235E39) = 0.34028235E39 +- (0.123, 0.34028235E39) = ~0.34028235E39 +/ (0.123, 0.34028235E39) = 0.361465E~39 +nextAfter (0.123, 0.34028235E39) = 0.12300001 +rem (0.123, 0.34028235E39) = 0.123 +* (0.123, 0.17014117E39) = 0.20927365E38 ++ (0.123, 0.17014117E39) = 0.17014117E39 +- (0.123, 0.17014117E39) = ~0.17014117E39 +/ (0.123, 0.17014117E39) = 0.722928E~39 +nextAfter (0.123, 0.17014117E39) = 0.12300001 +rem (0.123, 0.17014117E39) = 0.123 +* (0.123, 0.123E4) = 0.15129001E3 ++ (0.123, 0.123E4) = 0.1230123E4 +- (0.123, 0.123E4) = ~0.1229877E4 +/ (0.123, 0.123E4) = 0.100000005E~3 +nextAfter (0.123, 0.123E4) = 0.12300001 +rem (0.123, 0.123E4) = 0.123 +* (0.123, 0.123E2) = 0.15129001E1 ++ (0.123, 0.123E2) = 0.12423E2 +- (0.123, 0.123E2) = ~0.12177E2 +/ (0.123, 0.123E2) = 0.1E~1 +nextAfter (0.123, 0.123E2) = 0.12300001 +rem (0.123, 0.123E2) = 0.123 +* (0.123, 0.31415927E1) = 0.38641593 ++ (0.123, 0.31415927E1) = 0.32645926E1 +- (0.123, 0.31415927E1) = ~0.30185928E1 +/ (0.123, 0.31415927E1) = 0.39152116E~1 +nextAfter (0.123, 0.31415927E1) = 0.12300001 +rem (0.123, 0.31415927E1) = 0.123 +* (0.123, 0.27182817E1) = 0.33434868 ++ (0.123, 0.27182817E1) = 0.28412817E1 +- (0.123, 0.27182817E1) = ~0.25952818E1 +/ (0.123, 0.27182817E1) = 0.45249175E~1 +nextAfter (0.123, 0.27182817E1) = 0.12300001 +rem (0.123, 0.27182817E1) = 0.123 +* (0.123, 0.123E1) = 0.15129 ++ (0.123, 0.123E1) = 0.1353E1 +- (0.123, 0.123E1) = ~0.1107E1 +/ (0.123, 0.123E1) = 0.1 +nextAfter (0.123, 0.123E1) = 0.12300001 +rem (0.123, 0.123E1) = 0.123 +* (0.123, 0.123) = 0.15129001E~1 ++ (0.123, 0.123) = 0.246 +- (0.123, 0.123) = 0.0 +/ (0.123, 0.123) = 0.1E1 +nextAfter (0.123, 0.123) = 0.123 +rem (0.123, 0.123) = 0.0 +* (0.123, 0.123E~2) = 0.15129E~3 ++ (0.123, 0.123E~2) = 0.124230005 +- (0.123, 0.123E~2) = 0.12177 +/ (0.123, 0.123E~2) = 0.1E3 +nextAfter (0.123, 0.123E~2) = 0.122999996 +rem (0.123, 0.123E~2) = 0.0 +* (0.123, 0.11754944E~37) = 0.1445858E~38 ++ (0.123, 0.11754944E~37) = 0.123 +- (0.123, 0.11754944E~37) = 0.123 +/ (0.123, 0.11754944E~37) = 0.10463683E38 +nextAfter (0.123, 0.11754944E~37) = 0.122999996 +rem (0.123, 0.11754944E~37) = 0.0 +* (0.123, 0.5877472E~38) = 0.722928E~39 ++ (0.123, 0.5877472E~38) = 0.123 +- (0.123, 0.5877472E~38) = 0.123 +/ (0.123, 0.5877472E~38) = 0.20927366E38 +nextAfter (0.123, 0.5877472E~38) = 0.122999996 +rem (0.123, 0.5877472E~38) = 0.0 +* (0.123, 0.1E~44) = 0.0 ++ (0.123, 0.1E~44) = 0.123 +- (0.123, 0.1E~44) = 0.123 +/ (0.123, 0.1E~44) = inf +nextAfter (0.123, 0.1E~44) = 0.122999996 +rem (0.123, 0.1E~44) = ~inf +* (0.123, 0.0) = 0.0 ++ (0.123, 0.0) = 0.123 +- (0.123, 0.0) = 0.123 +/ (0.123, 0.0) = inf +nextAfter (0.123, 0.0) = 0.122999996 +rem (0.123, 0.0) = nan +* (0.123, ~0.34028235E39) = ~0.4185473E38 ++ (0.123, ~0.34028235E39) = ~0.34028235E39 +- (0.123, ~0.34028235E39) = 0.34028235E39 +/ (0.123, ~0.34028235E39) = ~0.361465E~39 +nextAfter (0.123, ~0.34028235E39) = 0.122999996 +rem (0.123, ~0.34028235E39) = 0.123 +* (0.123, ~0.17014117E39) = ~0.20927365E38 ++ (0.123, ~0.17014117E39) = ~0.17014117E39 +- (0.123, ~0.17014117E39) = 0.17014117E39 +/ (0.123, ~0.17014117E39) = ~0.722928E~39 +nextAfter (0.123, ~0.17014117E39) = 0.122999996 +rem (0.123, ~0.17014117E39) = 0.123 +* (0.123, ~0.123E4) = ~0.15129001E3 ++ (0.123, ~0.123E4) = ~0.1229877E4 +- (0.123, ~0.123E4) = 0.1230123E4 +/ (0.123, ~0.123E4) = ~0.100000005E~3 +nextAfter (0.123, ~0.123E4) = 0.122999996 +rem (0.123, ~0.123E4) = 0.123 +* (0.123, ~0.123E2) = ~0.15129001E1 ++ (0.123, ~0.123E2) = ~0.12177E2 +- (0.123, ~0.123E2) = 0.12423E2 +/ (0.123, ~0.123E2) = ~0.1E~1 +nextAfter (0.123, ~0.123E2) = 0.122999996 +rem (0.123, ~0.123E2) = 0.123 +* (0.123, ~0.31415927E1) = ~0.38641593 ++ (0.123, ~0.31415927E1) = ~0.30185928E1 +- (0.123, ~0.31415927E1) = 0.32645926E1 +/ (0.123, ~0.31415927E1) = ~0.39152116E~1 +nextAfter (0.123, ~0.31415927E1) = 0.122999996 +rem (0.123, ~0.31415927E1) = 0.123 +* (0.123, ~0.27182817E1) = ~0.33434868 ++ (0.123, ~0.27182817E1) = ~0.25952818E1 +- (0.123, ~0.27182817E1) = 0.28412817E1 +/ (0.123, ~0.27182817E1) = ~0.45249175E~1 +nextAfter (0.123, ~0.27182817E1) = 0.122999996 +rem (0.123, ~0.27182817E1) = 0.123 +* (0.123, ~0.123E1) = ~0.15129 ++ (0.123, ~0.123E1) = ~0.1107E1 +- (0.123, ~0.123E1) = 0.1353E1 +/ (0.123, ~0.123E1) = ~0.1 +nextAfter (0.123, ~0.123E1) = 0.122999996 +rem (0.123, ~0.123E1) = 0.123 +* (0.123, ~0.123) = ~0.15129001E~1 ++ (0.123, ~0.123) = 0.0 +- (0.123, ~0.123) = 0.246 +/ (0.123, ~0.123) = ~0.1E1 +nextAfter (0.123, ~0.123) = 0.122999996 +rem (0.123, ~0.123) = 0.0 +* (0.123, ~0.123E~2) = ~0.15129E~3 ++ (0.123, ~0.123E~2) = 0.12177 +- (0.123, ~0.123E~2) = 0.124230005 +/ (0.123, ~0.123E~2) = ~0.1E3 +nextAfter (0.123, ~0.123E~2) = 0.122999996 +rem (0.123, ~0.123E~2) = 0.0 +* (0.123, ~0.11754944E~37) = ~0.1445858E~38 ++ (0.123, ~0.11754944E~37) = 0.123 +- (0.123, ~0.11754944E~37) = 0.123 +/ (0.123, ~0.11754944E~37) = ~0.10463683E38 +nextAfter (0.123, ~0.11754944E~37) = 0.122999996 +rem (0.123, ~0.11754944E~37) = 0.0 +* (0.123, ~0.5877472E~38) = ~0.722928E~39 ++ (0.123, ~0.5877472E~38) = 0.123 +- (0.123, ~0.5877472E~38) = 0.123 +/ (0.123, ~0.5877472E~38) = ~0.20927366E38 +nextAfter (0.123, ~0.5877472E~38) = 0.122999996 +rem (0.123, ~0.5877472E~38) = 0.0 +* (0.123, ~0.1E~44) = ~0.0 ++ (0.123, ~0.1E~44) = 0.123 +- (0.123, ~0.1E~44) = 0.123 +/ (0.123, ~0.1E~44) = ~inf +nextAfter (0.123, ~0.1E~44) = 0.122999996 +rem (0.123, ~0.1E~44) = ~inf +* (0.123, ~0.0) = ~0.0 ++ (0.123, ~0.0) = 0.123 +- (0.123, ~0.0) = 0.123 +/ (0.123, ~0.0) = ~inf +nextAfter (0.123, ~0.0) = 0.122999996 +rem (0.123, ~0.0) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300001 +rem (0.123, inf) = 0.123 +* (0.123, ~inf) = ~inf ++ (0.123, ~inf) = ~inf +- (0.123, ~inf) = inf +/ (0.123, ~inf) = ~0.0 +nextAfter (0.123, ~inf) = 0.122999996 +rem (0.123, ~inf) = 0.123 +* (0.123, nan) = nan ++ (0.123, nan) = nan +- (0.123, nan) = nan +/ (0.123, nan) = nan +nextAfter (0.123, nan) = nan +rem (0.123, nan) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300001 +rem (0.123, inf) = 0.123 +* (0.123E~2, 0.34028235E39) = 0.4185473E36 ++ (0.123E~2, 0.34028235E39) = 0.34028235E39 +- (0.123E~2, 0.34028235E39) = ~0.34028235E39 +/ (0.123E~2, 0.34028235E39) = 0.3614E~41 +nextAfter (0.123E~2, 0.34028235E39) = 0.12300002E~2 +rem (0.123E~2, 0.34028235E39) = 0.123E~2 +* (0.123E~2, 0.17014117E39) = 0.20927364E36 ++ (0.123E~2, 0.17014117E39) = 0.17014117E39 +- (0.123E~2, 0.17014117E39) = ~0.17014117E39 +/ (0.123E~2, 0.17014117E39) = 0.7229E~41 +nextAfter (0.123E~2, 0.17014117E39) = 0.12300002E~2 +rem (0.123E~2, 0.17014117E39) = 0.123E~2 +* (0.123E~2, 0.123E4) = 0.15129001E1 ++ (0.123E~2, 0.123E4) = 0.12300012E4 +- (0.123E~2, 0.123E4) = ~0.12299988E4 +/ (0.123E~2, 0.123E4) = 0.1E~5 +nextAfter (0.123E~2, 0.123E4) = 0.12300002E~2 +rem (0.123E~2, 0.123E4) = 0.123E~2 +* (0.123E~2, 0.123E2) = 0.15129001E~1 ++ (0.123E~2, 0.123E2) = 0.1230123E2 +- (0.123E~2, 0.123E2) = ~0.1229877E2 +/ (0.123E~2, 0.123E2) = 0.100000005E~3 +nextAfter (0.123E~2, 0.123E2) = 0.12300002E~2 +rem (0.123E~2, 0.123E2) = 0.123E~2 +* (0.123E~2, 0.31415927E1) = 0.38641593E~2 ++ (0.123E~2, 0.31415927E1) = 0.31428227E1 +- (0.123E~2, 0.31415927E1) = ~0.31403627E1 +/ (0.123E~2, 0.31415927E1) = 0.39152117E~3 +nextAfter (0.123E~2, 0.31415927E1) = 0.12300002E~2 +rem (0.123E~2, 0.31415927E1) = 0.123E~2 +* (0.123E~2, 0.27182817E1) = 0.33434867E~2 ++ (0.123E~2, 0.27182817E1) = 0.27195117E1 +- (0.123E~2, 0.27182817E1) = ~0.27170517E1 +/ (0.123E~2, 0.27182817E1) = 0.45249175E~3 +nextAfter (0.123E~2, 0.27182817E1) = 0.12300002E~2 +rem (0.123E~2, 0.27182817E1) = 0.123E~2 +* (0.123E~2, 0.123E1) = 0.15129001E~2 ++ (0.123E~2, 0.123E1) = 0.123123E1 +- (0.123E~2, 0.123E1) = ~0.122877E1 +/ (0.123E~2, 0.123E1) = 0.1E~2 +nextAfter (0.123E~2, 0.123E1) = 0.12300002E~2 +rem (0.123E~2, 0.123E1) = 0.123E~2 +* (0.123E~2, 0.123) = 0.15129E~3 ++ (0.123E~2, 0.123) = 0.124230005 +- (0.123E~2, 0.123) = ~0.12177 +/ (0.123E~2, 0.123) = 0.1E~1 +nextAfter (0.123E~2, 0.123) = 0.12300002E~2 +rem (0.123E~2, 0.123) = 0.123E~2 +* (0.123E~2, 0.123E~2) = 0.15129001E~5 ++ (0.123E~2, 0.123E~2) = 0.246E~2 +- (0.123E~2, 0.123E~2) = 0.0 +/ (0.123E~2, 0.123E~2) = 0.1E1 +nextAfter (0.123E~2, 0.123E~2) = 0.123E~2 +rem (0.123E~2, 0.123E~2) = 0.0 +* (0.123E~2, 0.11754944E~37) = 0.14459E~40 ++ (0.123E~2, 0.11754944E~37) = 0.123E~2 +- (0.123E~2, 0.11754944E~37) = 0.123E~2 +/ (0.123E~2, 0.11754944E~37) = 0.10463683E36 +nextAfter (0.123E~2, 0.11754944E~37) = 0.12299999E~2 +rem (0.123E~2, 0.11754944E~37) = 0.0 +* (0.123E~2, 0.5877472E~38) = 0.7229E~41 ++ (0.123E~2, 0.5877472E~38) = 0.123E~2 +- (0.123E~2, 0.5877472E~38) = 0.123E~2 +/ (0.123E~2, 0.5877472E~38) = 0.20927366E36 +nextAfter (0.123E~2, 0.5877472E~38) = 0.12299999E~2 +rem (0.123E~2, 0.5877472E~38) = 0.0 +* (0.123E~2, 0.1E~44) = 0.0 ++ (0.123E~2, 0.1E~44) = 0.123E~2 +- (0.123E~2, 0.1E~44) = 0.123E~2 +/ (0.123E~2, 0.1E~44) = inf +nextAfter (0.123E~2, 0.1E~44) = 0.12299999E~2 +rem (0.123E~2, 0.1E~44) = ~inf +* (0.123E~2, 0.0) = 0.0 ++ (0.123E~2, 0.0) = 0.123E~2 +- (0.123E~2, 0.0) = 0.123E~2 +/ (0.123E~2, 0.0) = inf +nextAfter (0.123E~2, 0.0) = 0.12299999E~2 +rem (0.123E~2, 0.0) = nan +* (0.123E~2, ~0.34028235E39) = ~0.4185473E36 ++ (0.123E~2, ~0.34028235E39) = ~0.34028235E39 +- (0.123E~2, ~0.34028235E39) = 0.34028235E39 +/ (0.123E~2, ~0.34028235E39) = ~0.3614E~41 +nextAfter (0.123E~2, ~0.34028235E39) = 0.12299999E~2 +rem (0.123E~2, ~0.34028235E39) = 0.123E~2 +* (0.123E~2, ~0.17014117E39) = ~0.20927364E36 ++ (0.123E~2, ~0.17014117E39) = ~0.17014117E39 +- (0.123E~2, ~0.17014117E39) = 0.17014117E39 +/ (0.123E~2, ~0.17014117E39) = ~0.7229E~41 +nextAfter (0.123E~2, ~0.17014117E39) = 0.12299999E~2 +rem (0.123E~2, ~0.17014117E39) = 0.123E~2 +* (0.123E~2, ~0.123E4) = ~0.15129001E1 ++ (0.123E~2, ~0.123E4) = ~0.12299988E4 +- (0.123E~2, ~0.123E4) = 0.12300012E4 +/ (0.123E~2, ~0.123E4) = ~0.1E~5 +nextAfter (0.123E~2, ~0.123E4) = 0.12299999E~2 +rem (0.123E~2, ~0.123E4) = 0.123E~2 +* (0.123E~2, ~0.123E2) = ~0.15129001E~1 ++ (0.123E~2, ~0.123E2) = ~0.1229877E2 +- (0.123E~2, ~0.123E2) = 0.1230123E2 +/ (0.123E~2, ~0.123E2) = ~0.100000005E~3 +nextAfter (0.123E~2, ~0.123E2) = 0.12299999E~2 +rem (0.123E~2, ~0.123E2) = 0.123E~2 +* (0.123E~2, ~0.31415927E1) = ~0.38641593E~2 ++ (0.123E~2, ~0.31415927E1) = ~0.31403627E1 +- (0.123E~2, ~0.31415927E1) = 0.31428227E1 +/ (0.123E~2, ~0.31415927E1) = ~0.39152117E~3 +nextAfter (0.123E~2, ~0.31415927E1) = 0.12299999E~2 +rem (0.123E~2, ~0.31415927E1) = 0.123E~2 +* (0.123E~2, ~0.27182817E1) = ~0.33434867E~2 ++ (0.123E~2, ~0.27182817E1) = ~0.27170517E1 +- (0.123E~2, ~0.27182817E1) = 0.27195117E1 +/ (0.123E~2, ~0.27182817E1) = ~0.45249175E~3 +nextAfter (0.123E~2, ~0.27182817E1) = 0.12299999E~2 +rem (0.123E~2, ~0.27182817E1) = 0.123E~2 +* (0.123E~2, ~0.123E1) = ~0.15129001E~2 ++ (0.123E~2, ~0.123E1) = ~0.122877E1 +- (0.123E~2, ~0.123E1) = 0.123123E1 +/ (0.123E~2, ~0.123E1) = ~0.1E~2 +nextAfter (0.123E~2, ~0.123E1) = 0.12299999E~2 +rem (0.123E~2, ~0.123E1) = 0.123E~2 +* (0.123E~2, ~0.123) = ~0.15129E~3 ++ (0.123E~2, ~0.123) = ~0.12177 +- (0.123E~2, ~0.123) = 0.124230005 +/ (0.123E~2, ~0.123) = ~0.1E~1 +nextAfter (0.123E~2, ~0.123) = 0.12299999E~2 +rem (0.123E~2, ~0.123) = 0.123E~2 +* (0.123E~2, ~0.123E~2) = ~0.15129001E~5 ++ (0.123E~2, ~0.123E~2) = 0.0 +- (0.123E~2, ~0.123E~2) = 0.246E~2 +/ (0.123E~2, ~0.123E~2) = ~0.1E1 +nextAfter (0.123E~2, ~0.123E~2) = 0.12299999E~2 +rem (0.123E~2, ~0.123E~2) = 0.0 +* (0.123E~2, ~0.11754944E~37) = ~0.14459E~40 ++ (0.123E~2, ~0.11754944E~37) = 0.123E~2 +- (0.123E~2, ~0.11754944E~37) = 0.123E~2 +/ (0.123E~2, ~0.11754944E~37) = ~0.10463683E36 +nextAfter (0.123E~2, ~0.11754944E~37) = 0.12299999E~2 +rem (0.123E~2, ~0.11754944E~37) = 0.0 +* (0.123E~2, ~0.5877472E~38) = ~0.7229E~41 ++ (0.123E~2, ~0.5877472E~38) = 0.123E~2 +- (0.123E~2, ~0.5877472E~38) = 0.123E~2 +/ (0.123E~2, ~0.5877472E~38) = ~0.20927366E36 +nextAfter (0.123E~2, ~0.5877472E~38) = 0.12299999E~2 +rem (0.123E~2, ~0.5877472E~38) = 0.0 +* (0.123E~2, ~0.1E~44) = ~0.0 ++ (0.123E~2, ~0.1E~44) = 0.123E~2 +- (0.123E~2, ~0.1E~44) = 0.123E~2 +/ (0.123E~2, ~0.1E~44) = ~inf +nextAfter (0.123E~2, ~0.1E~44) = 0.12299999E~2 +rem (0.123E~2, ~0.1E~44) = ~inf +* (0.123E~2, ~0.0) = ~0.0 ++ (0.123E~2, ~0.0) = 0.123E~2 +- (0.123E~2, ~0.0) = 0.123E~2 +/ (0.123E~2, ~0.0) = ~inf +nextAfter (0.123E~2, ~0.0) = 0.12299999E~2 +rem (0.123E~2, ~0.0) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.123E~2, ~inf) = ~inf ++ (0.123E~2, ~inf) = ~inf +- (0.123E~2, ~inf) = inf +/ (0.123E~2, ~inf) = ~0.0 +nextAfter (0.123E~2, ~inf) = 0.12299999E~2 +rem (0.123E~2, ~inf) = 0.123E~2 +* (0.123E~2, nan) = nan ++ (0.123E~2, nan) = nan +- (0.123E~2, nan) = nan +/ (0.123E~2, nan) = nan +nextAfter (0.123E~2, nan) = nan +rem (0.123E~2, nan) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.11754944E~37, 0.34028235E39) = 0.39999998E1 ++ (0.11754944E~37, 0.34028235E39) = 0.34028235E39 +- (0.11754944E~37, 0.34028235E39) = ~0.34028235E39 +/ (0.11754944E~37, 0.34028235E39) = 0.0 +nextAfter (0.11754944E~37, 0.34028235E39) = 0.11754945E~37 +rem (0.11754944E~37, 0.34028235E39) = 0.11754944E~37 +* (0.11754944E~37, 0.17014117E39) = 0.19999999E1 ++ (0.11754944E~37, 0.17014117E39) = 0.17014117E39 +- (0.11754944E~37, 0.17014117E39) = ~0.17014117E39 +/ (0.11754944E~37, 0.17014117E39) = 0.0 +nextAfter (0.11754944E~37, 0.17014117E39) = 0.11754945E~37 +rem (0.11754944E~37, 0.17014117E39) = 0.11754944E~37 +* (0.11754944E~37, 0.123E4) = 0.1445858E~34 ++ (0.11754944E~37, 0.123E4) = 0.123E4 +- (0.11754944E~37, 0.123E4) = ~0.123E4 +/ (0.11754944E~37, 0.123E4) = 0.9557E~41 +nextAfter (0.11754944E~37, 0.123E4) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E4) = 0.11754944E~37 +* (0.11754944E~37, 0.123E2) = 0.14458581E~36 ++ (0.11754944E~37, 0.123E2) = 0.123E2 +- (0.11754944E~37, 0.123E2) = ~0.123E2 +/ (0.11754944E~37, 0.123E2) = 0.955687E~39 +nextAfter (0.11754944E~37, 0.123E2) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E2) = 0.11754944E~37 +* (0.11754944E~37, 0.31415927E1) = 0.36929245E~37 ++ (0.11754944E~37, 0.31415927E1) = 0.31415927E1 +- (0.11754944E~37, 0.31415927E1) = ~0.31415927E1 +/ (0.11754944E~37, 0.31415927E1) = 0.3741715E~38 +nextAfter (0.11754944E~37, 0.31415927E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.31415927E1) = 0.11754944E~37 +* (0.11754944E~37, 0.27182817E1) = 0.31953248E~37 ++ (0.11754944E~37, 0.27182817E1) = 0.27182817E1 +- (0.11754944E~37, 0.27182817E1) = ~0.27182817E1 +/ (0.11754944E~37, 0.27182817E1) = 0.4324403E~38 +nextAfter (0.11754944E~37, 0.27182817E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.27182817E1) = 0.11754944E~37 +* (0.11754944E~37, 0.123E1) = 0.14458581E~37 ++ (0.11754944E~37, 0.123E1) = 0.123E1 +- (0.11754944E~37, 0.123E1) = ~0.123E1 +/ (0.11754944E~37, 0.123E1) = 0.9556864E~38 +nextAfter (0.11754944E~37, 0.123E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E1) = 0.11754944E~37 +* (0.11754944E~37, 0.123) = 0.1445858E~38 ++ (0.11754944E~37, 0.123) = 0.123 +- (0.11754944E~37, 0.123) = ~0.123 +/ (0.11754944E~37, 0.123) = 0.9556864E~37 +nextAfter (0.11754944E~37, 0.123) = 0.11754945E~37 +rem (0.11754944E~37, 0.123) = 0.11754944E~37 +* (0.11754944E~37, 0.123E~2) = 0.14459E~40 ++ (0.11754944E~37, 0.123E~2) = 0.123E~2 +- (0.11754944E~37, 0.123E~2) = ~0.123E~2 +/ (0.11754944E~37, 0.123E~2) = 0.95568645E~35 +nextAfter (0.11754944E~37, 0.123E~2) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E~2) = 0.11754944E~37 +* (0.11754944E~37, 0.11754944E~37) = 0.0 ++ (0.11754944E~37, 0.11754944E~37) = 0.23509887E~37 +- (0.11754944E~37, 0.11754944E~37) = 0.0 +/ (0.11754944E~37, 0.11754944E~37) = 0.1E1 +nextAfter (0.11754944E~37, 0.11754944E~37) = 0.11754944E~37 +rem (0.11754944E~37, 0.11754944E~37) = 0.0 +* (0.11754944E~37, 0.5877472E~38) = 0.0 ++ (0.11754944E~37, 0.5877472E~38) = 0.17632415E~37 +- (0.11754944E~37, 0.5877472E~38) = 0.5877472E~38 +/ (0.11754944E~37, 0.5877472E~38) = 0.2E1 +nextAfter (0.11754944E~37, 0.5877472E~38) = 0.11754942E~37 +rem (0.11754944E~37, 0.5877472E~38) = 0.0 +* (0.11754944E~37, 0.1E~44) = 0.0 ++ (0.11754944E~37, 0.1E~44) = 0.11754945E~37 +- (0.11754944E~37, 0.1E~44) = 0.11754942E~37 +/ (0.11754944E~37, 0.1E~44) = 0.8388608E7 +nextAfter (0.11754944E~37, 0.1E~44) = 0.11754942E~37 +rem (0.11754944E~37, 0.1E~44) = 0.0 +* (0.11754944E~37, 0.0) = 0.0 ++ (0.11754944E~37, 0.0) = 0.11754944E~37 +- (0.11754944E~37, 0.0) = 0.11754944E~37 +/ (0.11754944E~37, 0.0) = inf +nextAfter (0.11754944E~37, 0.0) = 0.11754942E~37 +rem (0.11754944E~37, 0.0) = nan +* (0.11754944E~37, ~0.34028235E39) = ~0.39999998E1 ++ (0.11754944E~37, ~0.34028235E39) = ~0.34028235E39 +- (0.11754944E~37, ~0.34028235E39) = 0.34028235E39 +/ (0.11754944E~37, ~0.34028235E39) = ~0.0 +nextAfter (0.11754944E~37, ~0.34028235E39) = 0.11754942E~37 +rem (0.11754944E~37, ~0.34028235E39) = 0.11754944E~37 +* (0.11754944E~37, ~0.17014117E39) = ~0.19999999E1 ++ (0.11754944E~37, ~0.17014117E39) = ~0.17014117E39 +- (0.11754944E~37, ~0.17014117E39) = 0.17014117E39 +/ (0.11754944E~37, ~0.17014117E39) = ~0.0 +nextAfter (0.11754944E~37, ~0.17014117E39) = 0.11754942E~37 +rem (0.11754944E~37, ~0.17014117E39) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E4) = ~0.1445858E~34 ++ (0.11754944E~37, ~0.123E4) = ~0.123E4 +- (0.11754944E~37, ~0.123E4) = 0.123E4 +/ (0.11754944E~37, ~0.123E4) = ~0.9557E~41 +nextAfter (0.11754944E~37, ~0.123E4) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E4) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E2) = ~0.14458581E~36 ++ (0.11754944E~37, ~0.123E2) = ~0.123E2 +- (0.11754944E~37, ~0.123E2) = 0.123E2 +/ (0.11754944E~37, ~0.123E2) = ~0.955687E~39 +nextAfter (0.11754944E~37, ~0.123E2) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E2) = 0.11754944E~37 +* (0.11754944E~37, ~0.31415927E1) = ~0.36929245E~37 ++ (0.11754944E~37, ~0.31415927E1) = ~0.31415927E1 +- (0.11754944E~37, ~0.31415927E1) = 0.31415927E1 +/ (0.11754944E~37, ~0.31415927E1) = ~0.3741715E~38 +nextAfter (0.11754944E~37, ~0.31415927E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.31415927E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.27182817E1) = ~0.31953248E~37 ++ (0.11754944E~37, ~0.27182817E1) = ~0.27182817E1 +- (0.11754944E~37, ~0.27182817E1) = 0.27182817E1 +/ (0.11754944E~37, ~0.27182817E1) = ~0.4324403E~38 +nextAfter (0.11754944E~37, ~0.27182817E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.27182817E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E1) = ~0.14458581E~37 ++ (0.11754944E~37, ~0.123E1) = ~0.123E1 +- (0.11754944E~37, ~0.123E1) = 0.123E1 +/ (0.11754944E~37, ~0.123E1) = ~0.9556864E~38 +nextAfter (0.11754944E~37, ~0.123E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.123) = ~0.1445858E~38 ++ (0.11754944E~37, ~0.123) = ~0.123 +- (0.11754944E~37, ~0.123) = 0.123 +/ (0.11754944E~37, ~0.123) = ~0.9556864E~37 +nextAfter (0.11754944E~37, ~0.123) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E~2) = ~0.14459E~40 ++ (0.11754944E~37, ~0.123E~2) = ~0.123E~2 +- (0.11754944E~37, ~0.123E~2) = 0.123E~2 +/ (0.11754944E~37, ~0.123E~2) = ~0.95568645E~35 +nextAfter (0.11754944E~37, ~0.123E~2) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E~2) = 0.11754944E~37 +* (0.11754944E~37, ~0.11754944E~37) = ~0.0 ++ (0.11754944E~37, ~0.11754944E~37) = 0.0 +- (0.11754944E~37, ~0.11754944E~37) = 0.23509887E~37 +/ (0.11754944E~37, ~0.11754944E~37) = ~0.1E1 +nextAfter (0.11754944E~37, ~0.11754944E~37) = 0.11754942E~37 +rem (0.11754944E~37, ~0.11754944E~37) = 0.0 +* (0.11754944E~37, ~0.5877472E~38) = ~0.0 ++ (0.11754944E~37, ~0.5877472E~38) = 0.5877472E~38 +- (0.11754944E~37, ~0.5877472E~38) = 0.17632415E~37 +/ (0.11754944E~37, ~0.5877472E~38) = ~0.2E1 +nextAfter (0.11754944E~37, ~0.5877472E~38) = 0.11754942E~37 +rem (0.11754944E~37, ~0.5877472E~38) = 0.0 +* (0.11754944E~37, ~0.1E~44) = ~0.0 ++ (0.11754944E~37, ~0.1E~44) = 0.11754942E~37 +- (0.11754944E~37, ~0.1E~44) = 0.11754945E~37 +/ (0.11754944E~37, ~0.1E~44) = ~0.8388608E7 +nextAfter (0.11754944E~37, ~0.1E~44) = 0.11754942E~37 +rem (0.11754944E~37, ~0.1E~44) = 0.0 +* (0.11754944E~37, ~0.0) = ~0.0 ++ (0.11754944E~37, ~0.0) = 0.11754944E~37 +- (0.11754944E~37, ~0.0) = 0.11754944E~37 +/ (0.11754944E~37, ~0.0) = ~inf +nextAfter (0.11754944E~37, ~0.0) = 0.11754942E~37 +rem (0.11754944E~37, ~0.0) = nan +* (0.11754944E~37, inf) = inf ++ (0.11754944E~37, inf) = inf +- (0.11754944E~37, inf) = ~inf +/ (0.11754944E~37, inf) = 0.0 +nextAfter (0.11754944E~37, inf) = 0.11754945E~37 +rem (0.11754944E~37, inf) = 0.11754944E~37 +* (0.11754944E~37, ~inf) = ~inf ++ (0.11754944E~37, ~inf) = ~inf +- (0.11754944E~37, ~inf) = inf +/ (0.11754944E~37, ~inf) = ~0.0 +nextAfter (0.11754944E~37, ~inf) = 0.11754942E~37 +rem (0.11754944E~37, ~inf) = 0.11754944E~37 +* (0.11754944E~37, nan) = nan ++ (0.11754944E~37, nan) = nan +- (0.11754944E~37, nan) = nan +/ (0.11754944E~37, nan) = nan +nextAfter (0.11754944E~37, nan) = nan +rem (0.11754944E~37, nan) = nan +* (0.11754944E~37, inf) = inf ++ (0.11754944E~37, inf) = inf +- (0.11754944E~37, inf) = ~inf +/ (0.11754944E~37, inf) = 0.0 +nextAfter (0.11754944E~37, inf) = 0.11754945E~37 +rem (0.11754944E~37, inf) = 0.11754944E~37 +* (0.5877472E~38, 0.34028235E39) = 0.19999999E1 ++ (0.5877472E~38, 0.34028235E39) = 0.34028235E39 +- (0.5877472E~38, 0.34028235E39) = ~0.34028235E39 +/ (0.5877472E~38, 0.34028235E39) = 0.0 +nextAfter (0.5877472E~38, 0.34028235E39) = 0.5877473E~38 +rem (0.5877472E~38, 0.34028235E39) = 0.5877472E~38 +* (0.5877472E~38, 0.17014117E39) = 0.99999994 ++ (0.5877472E~38, 0.17014117E39) = 0.17014117E39 +- (0.5877472E~38, 0.17014117E39) = ~0.17014117E39 +/ (0.5877472E~38, 0.17014117E39) = 0.0 +nextAfter (0.5877472E~38, 0.17014117E39) = 0.5877473E~38 +rem (0.5877472E~38, 0.17014117E39) = 0.5877472E~38 +* (0.5877472E~38, 0.123E4) = 0.722929E~35 ++ (0.5877472E~38, 0.123E4) = 0.123E4 +- (0.5877472E~38, 0.123E4) = ~0.123E4 +/ (0.5877472E~38, 0.123E4) = 0.4778E~41 +nextAfter (0.5877472E~38, 0.123E4) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E4) = 0.5877472E~38 +* (0.5877472E~38, 0.123E2) = 0.72292904E~37 ++ (0.5877472E~38, 0.123E2) = 0.123E2 +- (0.5877472E~38, 0.123E2) = ~0.123E2 +/ (0.5877472E~38, 0.123E2) = 0.477843E~39 +nextAfter (0.5877472E~38, 0.123E2) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E2) = 0.5877472E~38 +* (0.5877472E~38, 0.31415927E1) = 0.18464623E~37 ++ (0.5877472E~38, 0.31415927E1) = 0.31415927E1 +- (0.5877472E~38, 0.31415927E1) = ~0.31415927E1 +/ (0.5877472E~38, 0.31415927E1) = 0.1870857E~38 +nextAfter (0.5877472E~38, 0.31415927E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.31415927E1) = 0.5877472E~38 +* (0.5877472E~38, 0.27182817E1) = 0.15976624E~37 ++ (0.5877472E~38, 0.27182817E1) = 0.27182817E1 +- (0.5877472E~38, 0.27182817E1) = ~0.27182817E1 +/ (0.5877472E~38, 0.27182817E1) = 0.2162201E~38 +nextAfter (0.5877472E~38, 0.27182817E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.27182817E1) = 0.5877472E~38 +* (0.5877472E~38, 0.123E1) = 0.722929E~38 ++ (0.5877472E~38, 0.123E1) = 0.123E1 +- (0.5877472E~38, 0.123E1) = ~0.123E1 +/ (0.5877472E~38, 0.123E1) = 0.4778432E~38 +nextAfter (0.5877472E~38, 0.123E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E1) = 0.5877472E~38 +* (0.5877472E~38, 0.123) = 0.722928E~39 ++ (0.5877472E~38, 0.123) = 0.123 +- (0.5877472E~38, 0.123) = ~0.123 +/ (0.5877472E~38, 0.123) = 0.4778432E~37 +nextAfter (0.5877472E~38, 0.123) = 0.5877473E~38 +rem (0.5877472E~38, 0.123) = 0.5877472E~38 +* (0.5877472E~38, 0.123E~2) = 0.7229E~41 ++ (0.5877472E~38, 0.123E~2) = 0.123E~2 +- (0.5877472E~38, 0.123E~2) = ~0.123E~2 +/ (0.5877472E~38, 0.123E~2) = 0.47784322E~35 +nextAfter (0.5877472E~38, 0.123E~2) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E~2) = 0.5877472E~38 +* (0.5877472E~38, 0.11754944E~37) = 0.0 ++ (0.5877472E~38, 0.11754944E~37) = 0.17632415E~37 +- (0.5877472E~38, 0.11754944E~37) = ~0.5877472E~38 +/ (0.5877472E~38, 0.11754944E~37) = 0.5 +nextAfter (0.5877472E~38, 0.11754944E~37) = 0.5877473E~38 +rem (0.5877472E~38, 0.11754944E~37) = 0.5877472E~38 +* (0.5877472E~38, 0.5877472E~38) = 0.0 ++ (0.5877472E~38, 0.5877472E~38) = 0.11754944E~37 +- (0.5877472E~38, 0.5877472E~38) = 0.0 +/ (0.5877472E~38, 0.5877472E~38) = 0.1E1 +nextAfter (0.5877472E~38, 0.5877472E~38) = 0.5877472E~38 +rem (0.5877472E~38, 0.5877472E~38) = 0.0 +* (0.5877472E~38, 0.1E~44) = 0.0 ++ (0.5877472E~38, 0.1E~44) = 0.5877473E~38 +- (0.5877472E~38, 0.1E~44) = 0.587747E~38 +/ (0.5877472E~38, 0.1E~44) = 0.4194304E7 +nextAfter (0.5877472E~38, 0.1E~44) = 0.587747E~38 +rem (0.5877472E~38, 0.1E~44) = 0.0 +* (0.5877472E~38, 0.0) = 0.0 ++ (0.5877472E~38, 0.0) = 0.5877472E~38 +- (0.5877472E~38, 0.0) = 0.5877472E~38 +/ (0.5877472E~38, 0.0) = inf +nextAfter (0.5877472E~38, 0.0) = 0.587747E~38 +rem (0.5877472E~38, 0.0) = nan +* (0.5877472E~38, ~0.34028235E39) = ~0.19999999E1 ++ (0.5877472E~38, ~0.34028235E39) = ~0.34028235E39 +- (0.5877472E~38, ~0.34028235E39) = 0.34028235E39 +/ (0.5877472E~38, ~0.34028235E39) = ~0.0 +nextAfter (0.5877472E~38, ~0.34028235E39) = 0.587747E~38 +rem (0.5877472E~38, ~0.34028235E39) = 0.5877472E~38 +* (0.5877472E~38, ~0.17014117E39) = ~0.99999994 ++ (0.5877472E~38, ~0.17014117E39) = ~0.17014117E39 +- (0.5877472E~38, ~0.17014117E39) = 0.17014117E39 +/ (0.5877472E~38, ~0.17014117E39) = ~0.0 +nextAfter (0.5877472E~38, ~0.17014117E39) = 0.587747E~38 +rem (0.5877472E~38, ~0.17014117E39) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E4) = ~0.722929E~35 ++ (0.5877472E~38, ~0.123E4) = ~0.123E4 +- (0.5877472E~38, ~0.123E4) = 0.123E4 +/ (0.5877472E~38, ~0.123E4) = ~0.4778E~41 +nextAfter (0.5877472E~38, ~0.123E4) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E4) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E2) = ~0.72292904E~37 ++ (0.5877472E~38, ~0.123E2) = ~0.123E2 +- (0.5877472E~38, ~0.123E2) = 0.123E2 +/ (0.5877472E~38, ~0.123E2) = ~0.477843E~39 +nextAfter (0.5877472E~38, ~0.123E2) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E2) = 0.5877472E~38 +* (0.5877472E~38, ~0.31415927E1) = ~0.18464623E~37 ++ (0.5877472E~38, ~0.31415927E1) = ~0.31415927E1 +- (0.5877472E~38, ~0.31415927E1) = 0.31415927E1 +/ (0.5877472E~38, ~0.31415927E1) = ~0.1870857E~38 +nextAfter (0.5877472E~38, ~0.31415927E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.31415927E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.27182817E1) = ~0.15976624E~37 ++ (0.5877472E~38, ~0.27182817E1) = ~0.27182817E1 +- (0.5877472E~38, ~0.27182817E1) = 0.27182817E1 +/ (0.5877472E~38, ~0.27182817E1) = ~0.2162201E~38 +nextAfter (0.5877472E~38, ~0.27182817E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.27182817E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E1) = ~0.722929E~38 ++ (0.5877472E~38, ~0.123E1) = ~0.123E1 +- (0.5877472E~38, ~0.123E1) = 0.123E1 +/ (0.5877472E~38, ~0.123E1) = ~0.4778432E~38 +nextAfter (0.5877472E~38, ~0.123E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.123) = ~0.722928E~39 ++ (0.5877472E~38, ~0.123) = ~0.123 +- (0.5877472E~38, ~0.123) = 0.123 +/ (0.5877472E~38, ~0.123) = ~0.4778432E~37 +nextAfter (0.5877472E~38, ~0.123) = 0.587747E~38 +rem (0.5877472E~38, ~0.123) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E~2) = ~0.7229E~41 ++ (0.5877472E~38, ~0.123E~2) = ~0.123E~2 +- (0.5877472E~38, ~0.123E~2) = 0.123E~2 +/ (0.5877472E~38, ~0.123E~2) = ~0.47784322E~35 +nextAfter (0.5877472E~38, ~0.123E~2) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E~2) = 0.5877472E~38 +* (0.5877472E~38, ~0.11754944E~37) = ~0.0 ++ (0.5877472E~38, ~0.11754944E~37) = ~0.5877472E~38 +- (0.5877472E~38, ~0.11754944E~37) = 0.17632415E~37 +/ (0.5877472E~38, ~0.11754944E~37) = ~0.5 +nextAfter (0.5877472E~38, ~0.11754944E~37) = 0.587747E~38 +rem (0.5877472E~38, ~0.11754944E~37) = 0.5877472E~38 +* (0.5877472E~38, ~0.5877472E~38) = ~0.0 ++ (0.5877472E~38, ~0.5877472E~38) = 0.0 +- (0.5877472E~38, ~0.5877472E~38) = 0.11754944E~37 +/ (0.5877472E~38, ~0.5877472E~38) = ~0.1E1 +nextAfter (0.5877472E~38, ~0.5877472E~38) = 0.587747E~38 +rem (0.5877472E~38, ~0.5877472E~38) = 0.0 +* (0.5877472E~38, ~0.1E~44) = ~0.0 ++ (0.5877472E~38, ~0.1E~44) = 0.587747E~38 +- (0.5877472E~38, ~0.1E~44) = 0.5877473E~38 +/ (0.5877472E~38, ~0.1E~44) = ~0.4194304E7 +nextAfter (0.5877472E~38, ~0.1E~44) = 0.587747E~38 +rem (0.5877472E~38, ~0.1E~44) = 0.0 +* (0.5877472E~38, ~0.0) = ~0.0 ++ (0.5877472E~38, ~0.0) = 0.5877472E~38 +- (0.5877472E~38, ~0.0) = 0.5877472E~38 +/ (0.5877472E~38, ~0.0) = ~inf +nextAfter (0.5877472E~38, ~0.0) = 0.587747E~38 +rem (0.5877472E~38, ~0.0) = nan +* (0.5877472E~38, inf) = inf ++ (0.5877472E~38, inf) = inf +- (0.5877472E~38, inf) = ~inf +/ (0.5877472E~38, inf) = 0.0 +nextAfter (0.5877472E~38, inf) = 0.5877473E~38 +rem (0.5877472E~38, inf) = 0.5877472E~38 +* (0.5877472E~38, ~inf) = ~inf ++ (0.5877472E~38, ~inf) = ~inf +- (0.5877472E~38, ~inf) = inf +/ (0.5877472E~38, ~inf) = ~0.0 +nextAfter (0.5877472E~38, ~inf) = 0.587747E~38 +rem (0.5877472E~38, ~inf) = 0.5877472E~38 +* (0.5877472E~38, nan) = nan ++ (0.5877472E~38, nan) = nan +- (0.5877472E~38, nan) = nan +/ (0.5877472E~38, nan) = nan +nextAfter (0.5877472E~38, nan) = nan +rem (0.5877472E~38, nan) = nan +* (0.5877472E~38, inf) = inf ++ (0.5877472E~38, inf) = inf +- (0.5877472E~38, inf) = ~inf +/ (0.5877472E~38, inf) = 0.0 +nextAfter (0.5877472E~38, inf) = 0.5877473E~38 +rem (0.5877472E~38, inf) = 0.5877472E~38 +* (0.1E~44, 0.34028235E39) = 0.47683713E~6 ++ (0.1E~44, 0.34028235E39) = 0.34028235E39 +- (0.1E~44, 0.34028235E39) = ~0.34028235E39 +/ (0.1E~44, 0.34028235E39) = 0.0 +nextAfter (0.1E~44, 0.34028235E39) = 0.3E~44 +rem (0.1E~44, 0.34028235E39) = 0.1E~44 +* (0.1E~44, 0.17014117E39) = 0.23841856E~6 ++ (0.1E~44, 0.17014117E39) = 0.17014117E39 +- (0.1E~44, 0.17014117E39) = ~0.17014117E39 +/ (0.1E~44, 0.17014117E39) = 0.0 +nextAfter (0.1E~44, 0.17014117E39) = 0.3E~44 +rem (0.1E~44, 0.17014117E39) = 0.1E~44 +* (0.1E~44, 0.123E4) = 0.1724E~41 ++ (0.1E~44, 0.123E4) = 0.123E4 +- (0.1E~44, 0.123E4) = ~0.123E4 +/ (0.1E~44, 0.123E4) = 0.0 +nextAfter (0.1E~44, 0.123E4) = 0.3E~44 +rem (0.1E~44, 0.123E4) = 0.1E~44 +* (0.1E~44, 0.123E2) = 0.17E~43 ++ (0.1E~44, 0.123E2) = 0.123E2 +- (0.1E~44, 0.123E2) = ~0.123E2 +/ (0.1E~44, 0.123E2) = 0.0 +nextAfter (0.1E~44, 0.123E2) = 0.3E~44 +rem (0.1E~44, 0.123E2) = 0.1E~44 +* (0.1E~44, 0.31415927E1) = 0.4E~44 ++ (0.1E~44, 0.31415927E1) = 0.31415927E1 +- (0.1E~44, 0.31415927E1) = ~0.31415927E1 +/ (0.1E~44, 0.31415927E1) = 0.0 +nextAfter (0.1E~44, 0.31415927E1) = 0.3E~44 +rem (0.1E~44, 0.31415927E1) = 0.1E~44 +* (0.1E~44, 0.27182817E1) = 0.4E~44 ++ (0.1E~44, 0.27182817E1) = 0.27182817E1 +- (0.1E~44, 0.27182817E1) = ~0.27182817E1 +/ (0.1E~44, 0.27182817E1) = 0.0 +nextAfter (0.1E~44, 0.27182817E1) = 0.3E~44 +rem (0.1E~44, 0.27182817E1) = 0.1E~44 +* (0.1E~44, 0.123E1) = 0.1E~44 ++ (0.1E~44, 0.123E1) = 0.123E1 +- (0.1E~44, 0.123E1) = ~0.123E1 +/ (0.1E~44, 0.123E1) = 0.1E~44 +nextAfter (0.1E~44, 0.123E1) = 0.3E~44 +rem (0.1E~44, 0.123E1) = 0.1E~44 +* (0.1E~44, 0.123) = 0.0 ++ (0.1E~44, 0.123) = 0.123 +- (0.1E~44, 0.123) = ~0.123 +/ (0.1E~44, 0.123) = 0.11E~43 +nextAfter (0.1E~44, 0.123) = 0.3E~44 +rem (0.1E~44, 0.123) = 0.1E~44 +* (0.1E~44, 0.123E~2) = 0.0 ++ (0.1E~44, 0.123E~2) = 0.123E~2 +- (0.1E~44, 0.123E~2) = ~0.123E~2 +/ (0.1E~44, 0.123E~2) = 0.1139E~41 +nextAfter (0.1E~44, 0.123E~2) = 0.3E~44 +rem (0.1E~44, 0.123E~2) = 0.1E~44 +* (0.1E~44, 0.11754944E~37) = 0.0 ++ (0.1E~44, 0.11754944E~37) = 0.11754945E~37 +- (0.1E~44, 0.11754944E~37) = ~0.11754942E~37 +/ (0.1E~44, 0.11754944E~37) = 0.11920929E~6 +nextAfter (0.1E~44, 0.11754944E~37) = 0.3E~44 +rem (0.1E~44, 0.11754944E~37) = 0.1E~44 +* (0.1E~44, 0.5877472E~38) = 0.0 ++ (0.1E~44, 0.5877472E~38) = 0.5877473E~38 +- (0.1E~44, 0.5877472E~38) = ~0.587747E~38 +/ (0.1E~44, 0.5877472E~38) = 0.23841858E~6 +nextAfter (0.1E~44, 0.5877472E~38) = 0.3E~44 +rem (0.1E~44, 0.5877472E~38) = 0.1E~44 +* (0.1E~44, 0.1E~44) = 0.0 ++ (0.1E~44, 0.1E~44) = 0.3E~44 +- (0.1E~44, 0.1E~44) = 0.0 +/ (0.1E~44, 0.1E~44) = 0.1E1 +nextAfter (0.1E~44, 0.1E~44) = 0.1E~44 +rem (0.1E~44, 0.1E~44) = 0.0 +* (0.1E~44, 0.0) = 0.0 ++ (0.1E~44, 0.0) = 0.1E~44 +- (0.1E~44, 0.0) = 0.1E~44 +/ (0.1E~44, 0.0) = inf +nextAfter (0.1E~44, 0.0) = 0.0 +rem (0.1E~44, 0.0) = nan +* (0.1E~44, ~0.34028235E39) = ~0.47683713E~6 ++ (0.1E~44, ~0.34028235E39) = ~0.34028235E39 +- (0.1E~44, ~0.34028235E39) = 0.34028235E39 +/ (0.1E~44, ~0.34028235E39) = ~0.0 +nextAfter (0.1E~44, ~0.34028235E39) = 0.0 +rem (0.1E~44, ~0.34028235E39) = 0.1E~44 +* (0.1E~44, ~0.17014117E39) = ~0.23841856E~6 ++ (0.1E~44, ~0.17014117E39) = ~0.17014117E39 +- (0.1E~44, ~0.17014117E39) = 0.17014117E39 +/ (0.1E~44, ~0.17014117E39) = ~0.0 +nextAfter (0.1E~44, ~0.17014117E39) = 0.0 +rem (0.1E~44, ~0.17014117E39) = 0.1E~44 +* (0.1E~44, ~0.123E4) = ~0.1724E~41 ++ (0.1E~44, ~0.123E4) = ~0.123E4 +- (0.1E~44, ~0.123E4) = 0.123E4 +/ (0.1E~44, ~0.123E4) = ~0.0 +nextAfter (0.1E~44, ~0.123E4) = 0.0 +rem (0.1E~44, ~0.123E4) = 0.1E~44 +* (0.1E~44, ~0.123E2) = ~0.17E~43 ++ (0.1E~44, ~0.123E2) = ~0.123E2 +- (0.1E~44, ~0.123E2) = 0.123E2 +/ (0.1E~44, ~0.123E2) = ~0.0 +nextAfter (0.1E~44, ~0.123E2) = 0.0 +rem (0.1E~44, ~0.123E2) = 0.1E~44 +* (0.1E~44, ~0.31415927E1) = ~0.4E~44 ++ (0.1E~44, ~0.31415927E1) = ~0.31415927E1 +- (0.1E~44, ~0.31415927E1) = 0.31415927E1 +/ (0.1E~44, ~0.31415927E1) = ~0.0 +nextAfter (0.1E~44, ~0.31415927E1) = 0.0 +rem (0.1E~44, ~0.31415927E1) = 0.1E~44 +* (0.1E~44, ~0.27182817E1) = ~0.4E~44 ++ (0.1E~44, ~0.27182817E1) = ~0.27182817E1 +- (0.1E~44, ~0.27182817E1) = 0.27182817E1 +/ (0.1E~44, ~0.27182817E1) = ~0.0 +nextAfter (0.1E~44, ~0.27182817E1) = 0.0 +rem (0.1E~44, ~0.27182817E1) = 0.1E~44 +* (0.1E~44, ~0.123E1) = ~0.1E~44 ++ (0.1E~44, ~0.123E1) = ~0.123E1 +- (0.1E~44, ~0.123E1) = 0.123E1 +/ (0.1E~44, ~0.123E1) = ~0.1E~44 +nextAfter (0.1E~44, ~0.123E1) = 0.0 +rem (0.1E~44, ~0.123E1) = 0.1E~44 +* (0.1E~44, ~0.123) = ~0.0 ++ (0.1E~44, ~0.123) = ~0.123 +- (0.1E~44, ~0.123) = 0.123 +/ (0.1E~44, ~0.123) = ~0.11E~43 +nextAfter (0.1E~44, ~0.123) = 0.0 +rem (0.1E~44, ~0.123) = 0.1E~44 +* (0.1E~44, ~0.123E~2) = ~0.0 ++ (0.1E~44, ~0.123E~2) = ~0.123E~2 +- (0.1E~44, ~0.123E~2) = 0.123E~2 +/ (0.1E~44, ~0.123E~2) = ~0.1139E~41 +nextAfter (0.1E~44, ~0.123E~2) = 0.0 +rem (0.1E~44, ~0.123E~2) = 0.1E~44 +* (0.1E~44, ~0.11754944E~37) = ~0.0 ++ (0.1E~44, ~0.11754944E~37) = ~0.11754942E~37 +- (0.1E~44, ~0.11754944E~37) = 0.11754945E~37 +/ (0.1E~44, ~0.11754944E~37) = ~0.11920929E~6 +nextAfter (0.1E~44, ~0.11754944E~37) = 0.0 +rem (0.1E~44, ~0.11754944E~37) = 0.1E~44 +* (0.1E~44, ~0.5877472E~38) = ~0.0 ++ (0.1E~44, ~0.5877472E~38) = ~0.587747E~38 +- (0.1E~44, ~0.5877472E~38) = 0.5877473E~38 +/ (0.1E~44, ~0.5877472E~38) = ~0.23841858E~6 +nextAfter (0.1E~44, ~0.5877472E~38) = 0.0 +rem (0.1E~44, ~0.5877472E~38) = 0.1E~44 +* (0.1E~44, ~0.1E~44) = ~0.0 ++ (0.1E~44, ~0.1E~44) = 0.0 +- (0.1E~44, ~0.1E~44) = 0.3E~44 +/ (0.1E~44, ~0.1E~44) = ~0.1E1 +nextAfter (0.1E~44, ~0.1E~44) = 0.0 +rem (0.1E~44, ~0.1E~44) = 0.0 +* (0.1E~44, ~0.0) = ~0.0 ++ (0.1E~44, ~0.0) = 0.1E~44 +- (0.1E~44, ~0.0) = 0.1E~44 +/ (0.1E~44, ~0.0) = ~inf +nextAfter (0.1E~44, ~0.0) = 0.0 +rem (0.1E~44, ~0.0) = nan +* (0.1E~44, inf) = inf ++ (0.1E~44, inf) = inf +- (0.1E~44, inf) = ~inf +/ (0.1E~44, inf) = 0.0 +nextAfter (0.1E~44, inf) = 0.3E~44 +rem (0.1E~44, inf) = 0.1E~44 +* (0.1E~44, ~inf) = ~inf ++ (0.1E~44, ~inf) = ~inf +- (0.1E~44, ~inf) = inf +/ (0.1E~44, ~inf) = ~0.0 +nextAfter (0.1E~44, ~inf) = 0.0 +rem (0.1E~44, ~inf) = 0.1E~44 +* (0.1E~44, nan) = nan ++ (0.1E~44, nan) = nan +- (0.1E~44, nan) = nan +/ (0.1E~44, nan) = nan +nextAfter (0.1E~44, nan) = nan +rem (0.1E~44, nan) = nan +* (0.1E~44, inf) = inf ++ (0.1E~44, inf) = inf +- (0.1E~44, inf) = ~inf +/ (0.1E~44, inf) = 0.0 +nextAfter (0.1E~44, inf) = 0.3E~44 +rem (0.1E~44, inf) = 0.1E~44 +* (0.0, 0.34028235E39) = 0.0 ++ (0.0, 0.34028235E39) = 0.34028235E39 +- (0.0, 0.34028235E39) = ~0.34028235E39 +/ (0.0, 0.34028235E39) = 0.0 +nextAfter (0.0, 0.34028235E39) = 0.1E~44 +rem (0.0, 0.34028235E39) = 0.0 +* (0.0, 0.17014117E39) = 0.0 ++ (0.0, 0.17014117E39) = 0.17014117E39 +- (0.0, 0.17014117E39) = ~0.17014117E39 +/ (0.0, 0.17014117E39) = 0.0 +nextAfter (0.0, 0.17014117E39) = 0.1E~44 +rem (0.0, 0.17014117E39) = 0.0 +* (0.0, 0.123E4) = 0.0 ++ (0.0, 0.123E4) = 0.123E4 +- (0.0, 0.123E4) = ~0.123E4 +/ (0.0, 0.123E4) = 0.0 +nextAfter (0.0, 0.123E4) = 0.1E~44 +rem (0.0, 0.123E4) = 0.0 +* (0.0, 0.123E2) = 0.0 ++ (0.0, 0.123E2) = 0.123E2 +- (0.0, 0.123E2) = ~0.123E2 +/ (0.0, 0.123E2) = 0.0 +nextAfter (0.0, 0.123E2) = 0.1E~44 +rem (0.0, 0.123E2) = 0.0 +* (0.0, 0.31415927E1) = 0.0 ++ (0.0, 0.31415927E1) = 0.31415927E1 +- (0.0, 0.31415927E1) = ~0.31415927E1 +/ (0.0, 0.31415927E1) = 0.0 +nextAfter (0.0, 0.31415927E1) = 0.1E~44 +rem (0.0, 0.31415927E1) = 0.0 +* (0.0, 0.27182817E1) = 0.0 ++ (0.0, 0.27182817E1) = 0.27182817E1 +- (0.0, 0.27182817E1) = ~0.27182817E1 +/ (0.0, 0.27182817E1) = 0.0 +nextAfter (0.0, 0.27182817E1) = 0.1E~44 +rem (0.0, 0.27182817E1) = 0.0 +* (0.0, 0.123E1) = 0.0 ++ (0.0, 0.123E1) = 0.123E1 +- (0.0, 0.123E1) = ~0.123E1 +/ (0.0, 0.123E1) = 0.0 +nextAfter (0.0, 0.123E1) = 0.1E~44 +rem (0.0, 0.123E1) = 0.0 +* (0.0, 0.123) = 0.0 ++ (0.0, 0.123) = 0.123 +- (0.0, 0.123) = ~0.123 +/ (0.0, 0.123) = 0.0 +nextAfter (0.0, 0.123) = 0.1E~44 +rem (0.0, 0.123) = 0.0 +* (0.0, 0.123E~2) = 0.0 ++ (0.0, 0.123E~2) = 0.123E~2 +- (0.0, 0.123E~2) = ~0.123E~2 +/ (0.0, 0.123E~2) = 0.0 +nextAfter (0.0, 0.123E~2) = 0.1E~44 +rem (0.0, 0.123E~2) = 0.0 +* (0.0, 0.11754944E~37) = 0.0 ++ (0.0, 0.11754944E~37) = 0.11754944E~37 +- (0.0, 0.11754944E~37) = ~0.11754944E~37 +/ (0.0, 0.11754944E~37) = 0.0 +nextAfter (0.0, 0.11754944E~37) = 0.1E~44 +rem (0.0, 0.11754944E~37) = 0.0 +* (0.0, 0.5877472E~38) = 0.0 ++ (0.0, 0.5877472E~38) = 0.5877472E~38 +- (0.0, 0.5877472E~38) = ~0.5877472E~38 +/ (0.0, 0.5877472E~38) = 0.0 +nextAfter (0.0, 0.5877472E~38) = 0.1E~44 +rem (0.0, 0.5877472E~38) = 0.0 +* (0.0, 0.1E~44) = 0.0 ++ (0.0, 0.1E~44) = 0.1E~44 +- (0.0, 0.1E~44) = ~0.1E~44 +/ (0.0, 0.1E~44) = 0.0 +nextAfter (0.0, 0.1E~44) = 0.1E~44 +rem (0.0, 0.1E~44) = 0.0 +* (0.0, 0.0) = 0.0 ++ (0.0, 0.0) = 0.0 +- (0.0, 0.0) = 0.0 +/ (0.0, 0.0) = nan +nextAfter (0.0, 0.0) = 0.0 +rem (0.0, 0.0) = 0.0 +* (0.0, ~0.34028235E39) = ~0.0 ++ (0.0, ~0.34028235E39) = ~0.34028235E39 +- (0.0, ~0.34028235E39) = 0.34028235E39 +/ (0.0, ~0.34028235E39) = ~0.0 +nextAfter (0.0, ~0.34028235E39) = ~0.1E~44 +rem (0.0, ~0.34028235E39) = 0.0 +* (0.0, ~0.17014117E39) = ~0.0 ++ (0.0, ~0.17014117E39) = ~0.17014117E39 +- (0.0, ~0.17014117E39) = 0.17014117E39 +/ (0.0, ~0.17014117E39) = ~0.0 +nextAfter (0.0, ~0.17014117E39) = ~0.1E~44 +rem (0.0, ~0.17014117E39) = 0.0 +* (0.0, ~0.123E4) = ~0.0 ++ (0.0, ~0.123E4) = ~0.123E4 +- (0.0, ~0.123E4) = 0.123E4 +/ (0.0, ~0.123E4) = ~0.0 +nextAfter (0.0, ~0.123E4) = ~0.1E~44 +rem (0.0, ~0.123E4) = 0.0 +* (0.0, ~0.123E2) = ~0.0 ++ (0.0, ~0.123E2) = ~0.123E2 +- (0.0, ~0.123E2) = 0.123E2 +/ (0.0, ~0.123E2) = ~0.0 +nextAfter (0.0, ~0.123E2) = ~0.1E~44 +rem (0.0, ~0.123E2) = 0.0 +* (0.0, ~0.31415927E1) = ~0.0 ++ (0.0, ~0.31415927E1) = ~0.31415927E1 +- (0.0, ~0.31415927E1) = 0.31415927E1 +/ (0.0, ~0.31415927E1) = ~0.0 +nextAfter (0.0, ~0.31415927E1) = ~0.1E~44 +rem (0.0, ~0.31415927E1) = 0.0 +* (0.0, ~0.27182817E1) = ~0.0 ++ (0.0, ~0.27182817E1) = ~0.27182817E1 +- (0.0, ~0.27182817E1) = 0.27182817E1 +/ (0.0, ~0.27182817E1) = ~0.0 +nextAfter (0.0, ~0.27182817E1) = ~0.1E~44 +rem (0.0, ~0.27182817E1) = 0.0 +* (0.0, ~0.123E1) = ~0.0 ++ (0.0, ~0.123E1) = ~0.123E1 +- (0.0, ~0.123E1) = 0.123E1 +/ (0.0, ~0.123E1) = ~0.0 +nextAfter (0.0, ~0.123E1) = ~0.1E~44 +rem (0.0, ~0.123E1) = 0.0 +* (0.0, ~0.123) = ~0.0 ++ (0.0, ~0.123) = ~0.123 +- (0.0, ~0.123) = 0.123 +/ (0.0, ~0.123) = ~0.0 +nextAfter (0.0, ~0.123) = ~0.1E~44 +rem (0.0, ~0.123) = 0.0 +* (0.0, ~0.123E~2) = ~0.0 ++ (0.0, ~0.123E~2) = ~0.123E~2 +- (0.0, ~0.123E~2) = 0.123E~2 +/ (0.0, ~0.123E~2) = ~0.0 +nextAfter (0.0, ~0.123E~2) = ~0.1E~44 +rem (0.0, ~0.123E~2) = 0.0 +* (0.0, ~0.11754944E~37) = ~0.0 ++ (0.0, ~0.11754944E~37) = ~0.11754944E~37 +- (0.0, ~0.11754944E~37) = 0.11754944E~37 +/ (0.0, ~0.11754944E~37) = ~0.0 +nextAfter (0.0, ~0.11754944E~37) = ~0.1E~44 +rem (0.0, ~0.11754944E~37) = 0.0 +* (0.0, ~0.5877472E~38) = ~0.0 ++ (0.0, ~0.5877472E~38) = ~0.5877472E~38 +- (0.0, ~0.5877472E~38) = 0.5877472E~38 +/ (0.0, ~0.5877472E~38) = ~0.0 +nextAfter (0.0, ~0.5877472E~38) = ~0.1E~44 +rem (0.0, ~0.5877472E~38) = 0.0 +* (0.0, ~0.1E~44) = ~0.0 ++ (0.0, ~0.1E~44) = ~0.1E~44 +- (0.0, ~0.1E~44) = 0.1E~44 +/ (0.0, ~0.1E~44) = ~0.0 +nextAfter (0.0, ~0.1E~44) = ~0.1E~44 +rem (0.0, ~0.1E~44) = 0.0 +* (0.0, ~0.0) = ~0.0 ++ (0.0, ~0.0) = 0.0 +- (0.0, ~0.0) = 0.0 +/ (0.0, ~0.0) = nan +nextAfter (0.0, ~0.0) = ~0.0 +rem (0.0, ~0.0) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.1E~44 +rem (0.0, inf) = 0.0 +* (0.0, ~inf) = nan ++ (0.0, ~inf) = ~inf +- (0.0, ~inf) = inf +/ (0.0, ~inf) = ~0.0 +nextAfter (0.0, ~inf) = ~0.1E~44 +rem (0.0, ~inf) = 0.0 +* (0.0, nan) = nan ++ (0.0, nan) = nan +- (0.0, nan) = nan +/ (0.0, nan) = nan +nextAfter (0.0, nan) = nan +rem (0.0, nan) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.1E~44 +rem (0.0, inf) = 0.0 +* (~0.34028235E39, 0.34028235E39) = ~inf ++ (~0.34028235E39, 0.34028235E39) = 0.0 +- (~0.34028235E39, 0.34028235E39) = ~inf +/ (~0.34028235E39, 0.34028235E39) = ~0.1E1 +nextAfter (~0.34028235E39, 0.34028235E39) = ~0.34028233E39 +rem (~0.34028235E39, 0.34028235E39) = 0.0 +* (~0.34028235E39, 0.17014117E39) = ~inf ++ (~0.34028235E39, 0.17014117E39) = ~0.17014117E39 +- (~0.34028235E39, 0.17014117E39) = ~inf +/ (~0.34028235E39, 0.17014117E39) = ~0.2E1 +nextAfter (~0.34028235E39, 0.17014117E39) = ~0.34028233E39 +rem (~0.34028235E39, 0.17014117E39) = 0.0 +* (~0.34028235E39, 0.123E4) = ~inf ++ (~0.34028235E39, 0.123E4) = ~0.34028235E39 +- (~0.34028235E39, 0.123E4) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E4) = ~0.2766523E36 +nextAfter (~0.34028235E39, 0.123E4) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E4) = ~0.2028241E32 +* (~0.34028235E39, 0.123E2) = ~inf ++ (~0.34028235E39, 0.123E2) = ~0.34028235E39 +- (~0.34028235E39, 0.123E2) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E2) = ~0.27665232E38 +nextAfter (~0.34028235E39, 0.123E2) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E2) = inf +* (~0.34028235E39, 0.31415927E1) = ~inf ++ (~0.34028235E39, 0.31415927E1) = ~0.34028235E39 +- (~0.34028235E39, 0.31415927E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.31415927E1) = ~0.10831523E39 +nextAfter (~0.34028235E39, 0.31415927E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.31415927E1) = ~0.2028241E32 +* (~0.34028235E39, 0.27182817E1) = ~inf ++ (~0.34028235E39, 0.27182817E1) = ~0.34028235E39 +- (~0.34028235E39, 0.27182817E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.27182817E1) = ~0.12518288E39 +nextAfter (~0.34028235E39, 0.27182817E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.27182817E1) = 0.0 +* (~0.34028235E39, 0.123E1) = ~inf ++ (~0.34028235E39, 0.123E1) = ~0.34028235E39 +- (~0.34028235E39, 0.123E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E1) = ~0.27665231E39 +nextAfter (~0.34028235E39, 0.123E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E1) = 0.0 +* (~0.34028235E39, 0.123) = ~0.4185473E38 ++ (~0.34028235E39, 0.123) = ~0.34028235E39 +- (~0.34028235E39, 0.123) = ~0.34028235E39 +/ (~0.34028235E39, 0.123) = ~inf +nextAfter (~0.34028235E39, 0.123) = ~0.34028233E39 +rem (~0.34028235E39, 0.123) = inf +* (~0.34028235E39, 0.123E~2) = ~0.4185473E36 ++ (~0.34028235E39, 0.123E~2) = ~0.34028235E39 +- (~0.34028235E39, 0.123E~2) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E~2) = ~inf +nextAfter (~0.34028235E39, 0.123E~2) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E~2) = inf +* (~0.34028235E39, 0.11754944E~37) = ~0.39999998E1 ++ (~0.34028235E39, 0.11754944E~37) = ~0.34028235E39 +- (~0.34028235E39, 0.11754944E~37) = ~0.34028235E39 +/ (~0.34028235E39, 0.11754944E~37) = ~inf +nextAfter (~0.34028235E39, 0.11754944E~37) = ~0.34028233E39 +rem (~0.34028235E39, 0.11754944E~37) = inf +* (~0.34028235E39, 0.5877472E~38) = ~0.19999999E1 ++ (~0.34028235E39, 0.5877472E~38) = ~0.34028235E39 +- (~0.34028235E39, 0.5877472E~38) = ~0.34028235E39 +/ (~0.34028235E39, 0.5877472E~38) = ~inf +nextAfter (~0.34028235E39, 0.5877472E~38) = ~0.34028233E39 +rem (~0.34028235E39, 0.5877472E~38) = inf +* (~0.34028235E39, 0.1E~44) = ~0.47683713E~6 ++ (~0.34028235E39, 0.1E~44) = ~0.34028235E39 +- (~0.34028235E39, 0.1E~44) = ~0.34028235E39 +/ (~0.34028235E39, 0.1E~44) = ~inf +nextAfter (~0.34028235E39, 0.1E~44) = ~0.34028233E39 +rem (~0.34028235E39, 0.1E~44) = inf +* (~0.34028235E39, 0.0) = ~0.0 ++ (~0.34028235E39, 0.0) = ~0.34028235E39 +- (~0.34028235E39, 0.0) = ~0.34028235E39 +/ (~0.34028235E39, 0.0) = ~inf +nextAfter (~0.34028235E39, 0.0) = ~0.34028233E39 +rem (~0.34028235E39, 0.0) = nan +* (~0.34028235E39, ~0.34028235E39) = inf ++ (~0.34028235E39, ~0.34028235E39) = ~inf +- (~0.34028235E39, ~0.34028235E39) = 0.0 +/ (~0.34028235E39, ~0.34028235E39) = 0.1E1 +nextAfter (~0.34028235E39, ~0.34028235E39) = ~0.34028235E39 +rem (~0.34028235E39, ~0.34028235E39) = 0.0 +* (~0.34028235E39, ~0.17014117E39) = inf ++ (~0.34028235E39, ~0.17014117E39) = ~inf +- (~0.34028235E39, ~0.17014117E39) = ~0.17014117E39 +/ (~0.34028235E39, ~0.17014117E39) = 0.2E1 +nextAfter (~0.34028235E39, ~0.17014117E39) = ~0.34028233E39 +rem (~0.34028235E39, ~0.17014117E39) = 0.0 +* (~0.34028235E39, ~0.123E4) = inf ++ (~0.34028235E39, ~0.123E4) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E4) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E4) = 0.2766523E36 +nextAfter (~0.34028235E39, ~0.123E4) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E4) = ~0.2028241E32 +* (~0.34028235E39, ~0.123E2) = inf ++ (~0.34028235E39, ~0.123E2) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E2) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E2) = 0.27665232E38 +nextAfter (~0.34028235E39, ~0.123E2) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E2) = inf +* (~0.34028235E39, ~0.31415927E1) = inf ++ (~0.34028235E39, ~0.31415927E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.31415927E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.31415927E1) = 0.10831523E39 +nextAfter (~0.34028235E39, ~0.31415927E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.31415927E1) = ~0.2028241E32 +* (~0.34028235E39, ~0.27182817E1) = inf ++ (~0.34028235E39, ~0.27182817E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.27182817E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.27182817E1) = 0.12518288E39 +nextAfter (~0.34028235E39, ~0.27182817E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.27182817E1) = 0.0 +* (~0.34028235E39, ~0.123E1) = inf ++ (~0.34028235E39, ~0.123E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E1) = 0.27665231E39 +nextAfter (~0.34028235E39, ~0.123E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E1) = 0.0 +* (~0.34028235E39, ~0.123) = 0.4185473E38 ++ (~0.34028235E39, ~0.123) = ~0.34028235E39 +- (~0.34028235E39, ~0.123) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123) = inf +nextAfter (~0.34028235E39, ~0.123) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123) = inf +* (~0.34028235E39, ~0.123E~2) = 0.4185473E36 ++ (~0.34028235E39, ~0.123E~2) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E~2) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E~2) = inf +nextAfter (~0.34028235E39, ~0.123E~2) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E~2) = inf +* (~0.34028235E39, ~0.11754944E~37) = 0.39999998E1 ++ (~0.34028235E39, ~0.11754944E~37) = ~0.34028235E39 +- (~0.34028235E39, ~0.11754944E~37) = ~0.34028235E39 +/ (~0.34028235E39, ~0.11754944E~37) = inf +nextAfter (~0.34028235E39, ~0.11754944E~37) = ~0.34028233E39 +rem (~0.34028235E39, ~0.11754944E~37) = inf +* (~0.34028235E39, ~0.5877472E~38) = 0.19999999E1 ++ (~0.34028235E39, ~0.5877472E~38) = ~0.34028235E39 +- (~0.34028235E39, ~0.5877472E~38) = ~0.34028235E39 +/ (~0.34028235E39, ~0.5877472E~38) = inf +nextAfter (~0.34028235E39, ~0.5877472E~38) = ~0.34028233E39 +rem (~0.34028235E39, ~0.5877472E~38) = inf +* (~0.34028235E39, ~0.1E~44) = 0.47683713E~6 ++ (~0.34028235E39, ~0.1E~44) = ~0.34028235E39 +- (~0.34028235E39, ~0.1E~44) = ~0.34028235E39 +/ (~0.34028235E39, ~0.1E~44) = inf +nextAfter (~0.34028235E39, ~0.1E~44) = ~0.34028233E39 +rem (~0.34028235E39, ~0.1E~44) = inf +* (~0.34028235E39, ~0.0) = 0.0 ++ (~0.34028235E39, ~0.0) = ~0.34028235E39 +- (~0.34028235E39, ~0.0) = ~0.34028235E39 +/ (~0.34028235E39, ~0.0) = inf +nextAfter (~0.34028235E39, ~0.0) = ~0.34028233E39 +rem (~0.34028235E39, ~0.0) = nan +* (~0.34028235E39, inf) = ~inf ++ (~0.34028235E39, inf) = inf +- (~0.34028235E39, inf) = ~inf +/ (~0.34028235E39, inf) = ~0.0 +nextAfter (~0.34028235E39, inf) = ~0.34028233E39 +rem (~0.34028235E39, inf) = ~0.34028235E39 +* (~0.34028235E39, ~inf) = inf ++ (~0.34028235E39, ~inf) = ~inf +- (~0.34028235E39, ~inf) = inf +/ (~0.34028235E39, ~inf) = 0.0 +nextAfter (~0.34028235E39, ~inf) = ~inf +rem (~0.34028235E39, ~inf) = ~0.34028235E39 +* (~0.34028235E39, nan) = nan ++ (~0.34028235E39, nan) = nan +- (~0.34028235E39, nan) = nan +/ (~0.34028235E39, nan) = nan +nextAfter (~0.34028235E39, nan) = nan +rem (~0.34028235E39, nan) = nan +* (~0.34028235E39, inf) = ~inf ++ (~0.34028235E39, inf) = inf +- (~0.34028235E39, inf) = ~inf +/ (~0.34028235E39, inf) = ~0.0 +nextAfter (~0.34028235E39, inf) = ~0.34028233E39 +rem (~0.34028235E39, inf) = ~0.34028235E39 +* (~0.17014117E39, 0.34028235E39) = ~inf ++ (~0.17014117E39, 0.34028235E39) = 0.17014117E39 +- (~0.17014117E39, 0.34028235E39) = ~inf +/ (~0.17014117E39, 0.34028235E39) = ~0.5 +nextAfter (~0.17014117E39, 0.34028235E39) = ~0.17014116E39 +rem (~0.17014117E39, 0.34028235E39) = ~0.17014117E39 +* (~0.17014117E39, 0.17014117E39) = ~inf ++ (~0.17014117E39, 0.17014117E39) = 0.0 +- (~0.17014117E39, 0.17014117E39) = ~0.34028235E39 +/ (~0.17014117E39, 0.17014117E39) = ~0.1E1 +nextAfter (~0.17014117E39, 0.17014117E39) = ~0.17014116E39 +rem (~0.17014117E39, 0.17014117E39) = 0.0 +* (~0.17014117E39, 0.123E4) = ~inf ++ (~0.17014117E39, 0.123E4) = ~0.17014117E39 +- (~0.17014117E39, 0.123E4) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E4) = ~0.13832615E36 +nextAfter (~0.17014117E39, 0.123E4) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E4) = ~0.10141205E32 +* (~0.17014117E39, 0.123E2) = ~inf ++ (~0.17014117E39, 0.123E2) = ~0.17014117E39 +- (~0.17014117E39, 0.123E2) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E2) = ~0.13832616E38 +nextAfter (~0.17014117E39, 0.123E2) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E2) = 0.10141205E32 +* (~0.17014117E39, 0.31415927E1) = ~inf ++ (~0.17014117E39, 0.31415927E1) = ~0.17014117E39 +- (~0.17014117E39, 0.31415927E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.31415927E1) = ~0.54157613E38 +nextAfter (~0.17014117E39, 0.31415927E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.31415927E1) = ~0.10141205E32 +* (~0.17014117E39, 0.27182817E1) = ~inf ++ (~0.17014117E39, 0.27182817E1) = ~0.17014117E39 +- (~0.17014117E39, 0.27182817E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.27182817E1) = ~0.6259144E38 +nextAfter (~0.17014117E39, 0.27182817E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.27182817E1) = 0.0 +* (~0.17014117E39, 0.123E1) = ~0.20927364E39 ++ (~0.17014117E39, 0.123E1) = ~0.17014117E39 +- (~0.17014117E39, 0.123E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E1) = ~0.13832616E39 +nextAfter (~0.17014117E39, 0.123E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E1) = 0.0 +* (~0.17014117E39, 0.123) = ~0.20927365E38 ++ (~0.17014117E39, 0.123) = ~0.17014117E39 +- (~0.17014117E39, 0.123) = ~0.17014117E39 +/ (~0.17014117E39, 0.123) = ~inf +nextAfter (~0.17014117E39, 0.123) = ~0.17014116E39 +rem (~0.17014117E39, 0.123) = inf +* (~0.17014117E39, 0.123E~2) = ~0.20927364E36 ++ (~0.17014117E39, 0.123E~2) = ~0.17014117E39 +- (~0.17014117E39, 0.123E~2) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E~2) = ~inf +nextAfter (~0.17014117E39, 0.123E~2) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E~2) = inf +* (~0.17014117E39, 0.11754944E~37) = ~0.19999999E1 ++ (~0.17014117E39, 0.11754944E~37) = ~0.17014117E39 +- (~0.17014117E39, 0.11754944E~37) = ~0.17014117E39 +/ (~0.17014117E39, 0.11754944E~37) = ~inf +nextAfter (~0.17014117E39, 0.11754944E~37) = ~0.17014116E39 +rem (~0.17014117E39, 0.11754944E~37) = inf +* (~0.17014117E39, 0.5877472E~38) = ~0.99999994 ++ (~0.17014117E39, 0.5877472E~38) = ~0.17014117E39 +- (~0.17014117E39, 0.5877472E~38) = ~0.17014117E39 +/ (~0.17014117E39, 0.5877472E~38) = ~inf +nextAfter (~0.17014117E39, 0.5877472E~38) = ~0.17014116E39 +rem (~0.17014117E39, 0.5877472E~38) = inf +* (~0.17014117E39, 0.1E~44) = ~0.23841856E~6 ++ (~0.17014117E39, 0.1E~44) = ~0.17014117E39 +- (~0.17014117E39, 0.1E~44) = ~0.17014117E39 +/ (~0.17014117E39, 0.1E~44) = ~inf +nextAfter (~0.17014117E39, 0.1E~44) = ~0.17014116E39 +rem (~0.17014117E39, 0.1E~44) = inf +* (~0.17014117E39, 0.0) = ~0.0 ++ (~0.17014117E39, 0.0) = ~0.17014117E39 +- (~0.17014117E39, 0.0) = ~0.17014117E39 +/ (~0.17014117E39, 0.0) = ~inf +nextAfter (~0.17014117E39, 0.0) = ~0.17014116E39 +rem (~0.17014117E39, 0.0) = nan +* (~0.17014117E39, ~0.34028235E39) = inf ++ (~0.17014117E39, ~0.34028235E39) = ~inf +- (~0.17014117E39, ~0.34028235E39) = 0.17014117E39 +/ (~0.17014117E39, ~0.34028235E39) = 0.5 +nextAfter (~0.17014117E39, ~0.34028235E39) = ~0.17014118E39 +rem (~0.17014117E39, ~0.34028235E39) = ~0.17014117E39 +* (~0.17014117E39, ~0.17014117E39) = inf ++ (~0.17014117E39, ~0.17014117E39) = ~0.34028235E39 +- (~0.17014117E39, ~0.17014117E39) = 0.0 +/ (~0.17014117E39, ~0.17014117E39) = 0.1E1 +nextAfter (~0.17014117E39, ~0.17014117E39) = ~0.17014117E39 +rem (~0.17014117E39, ~0.17014117E39) = 0.0 +* (~0.17014117E39, ~0.123E4) = inf ++ (~0.17014117E39, ~0.123E4) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E4) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E4) = 0.13832615E36 +nextAfter (~0.17014117E39, ~0.123E4) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E4) = ~0.10141205E32 +* (~0.17014117E39, ~0.123E2) = inf ++ (~0.17014117E39, ~0.123E2) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E2) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E2) = 0.13832616E38 +nextAfter (~0.17014117E39, ~0.123E2) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E2) = 0.10141205E32 +* (~0.17014117E39, ~0.31415927E1) = inf ++ (~0.17014117E39, ~0.31415927E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.31415927E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.31415927E1) = 0.54157613E38 +nextAfter (~0.17014117E39, ~0.31415927E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.31415927E1) = ~0.10141205E32 +* (~0.17014117E39, ~0.27182817E1) = inf ++ (~0.17014117E39, ~0.27182817E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.27182817E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.27182817E1) = 0.6259144E38 +nextAfter (~0.17014117E39, ~0.27182817E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.27182817E1) = 0.0 +* (~0.17014117E39, ~0.123E1) = 0.20927364E39 ++ (~0.17014117E39, ~0.123E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E1) = 0.13832616E39 +nextAfter (~0.17014117E39, ~0.123E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E1) = 0.0 +* (~0.17014117E39, ~0.123) = 0.20927365E38 ++ (~0.17014117E39, ~0.123) = ~0.17014117E39 +- (~0.17014117E39, ~0.123) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123) = inf +nextAfter (~0.17014117E39, ~0.123) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123) = inf +* (~0.17014117E39, ~0.123E~2) = 0.20927364E36 ++ (~0.17014117E39, ~0.123E~2) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E~2) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E~2) = inf +nextAfter (~0.17014117E39, ~0.123E~2) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E~2) = inf +* (~0.17014117E39, ~0.11754944E~37) = 0.19999999E1 ++ (~0.17014117E39, ~0.11754944E~37) = ~0.17014117E39 +- (~0.17014117E39, ~0.11754944E~37) = ~0.17014117E39 +/ (~0.17014117E39, ~0.11754944E~37) = inf +nextAfter (~0.17014117E39, ~0.11754944E~37) = ~0.17014116E39 +rem (~0.17014117E39, ~0.11754944E~37) = inf +* (~0.17014117E39, ~0.5877472E~38) = 0.99999994 ++ (~0.17014117E39, ~0.5877472E~38) = ~0.17014117E39 +- (~0.17014117E39, ~0.5877472E~38) = ~0.17014117E39 +/ (~0.17014117E39, ~0.5877472E~38) = inf +nextAfter (~0.17014117E39, ~0.5877472E~38) = ~0.17014116E39 +rem (~0.17014117E39, ~0.5877472E~38) = inf +* (~0.17014117E39, ~0.1E~44) = 0.23841856E~6 ++ (~0.17014117E39, ~0.1E~44) = ~0.17014117E39 +- (~0.17014117E39, ~0.1E~44) = ~0.17014117E39 +/ (~0.17014117E39, ~0.1E~44) = inf +nextAfter (~0.17014117E39, ~0.1E~44) = ~0.17014116E39 +rem (~0.17014117E39, ~0.1E~44) = inf +* (~0.17014117E39, ~0.0) = 0.0 ++ (~0.17014117E39, ~0.0) = ~0.17014117E39 +- (~0.17014117E39, ~0.0) = ~0.17014117E39 +/ (~0.17014117E39, ~0.0) = inf +nextAfter (~0.17014117E39, ~0.0) = ~0.17014116E39 +rem (~0.17014117E39, ~0.0) = nan +* (~0.17014117E39, inf) = ~inf ++ (~0.17014117E39, inf) = inf +- (~0.17014117E39, inf) = ~inf +/ (~0.17014117E39, inf) = ~0.0 +nextAfter (~0.17014117E39, inf) = ~0.17014116E39 +rem (~0.17014117E39, inf) = ~0.17014117E39 +* (~0.17014117E39, ~inf) = inf ++ (~0.17014117E39, ~inf) = ~inf +- (~0.17014117E39, ~inf) = inf +/ (~0.17014117E39, ~inf) = 0.0 +nextAfter (~0.17014117E39, ~inf) = ~0.17014118E39 +rem (~0.17014117E39, ~inf) = ~0.17014117E39 +* (~0.17014117E39, nan) = nan ++ (~0.17014117E39, nan) = nan +- (~0.17014117E39, nan) = nan +/ (~0.17014117E39, nan) = nan +nextAfter (~0.17014117E39, nan) = nan +rem (~0.17014117E39, nan) = nan +* (~0.17014117E39, inf) = ~inf ++ (~0.17014117E39, inf) = inf +- (~0.17014117E39, inf) = ~inf +/ (~0.17014117E39, inf) = ~0.0 +nextAfter (~0.17014117E39, inf) = ~0.17014116E39 +rem (~0.17014117E39, inf) = ~0.17014117E39 +* (~0.123E4, 0.34028235E39) = ~inf ++ (~0.123E4, 0.34028235E39) = 0.34028235E39 +- (~0.123E4, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E4, 0.34028235E39) = ~0.36146455E~35 +nextAfter (~0.123E4, 0.34028235E39) = ~0.12299999E4 +rem (~0.123E4, 0.34028235E39) = ~0.123E4 +* (~0.123E4, 0.17014117E39) = ~inf ++ (~0.123E4, 0.17014117E39) = 0.17014117E39 +- (~0.123E4, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E4, 0.17014117E39) = ~0.7229291E~35 +nextAfter (~0.123E4, 0.17014117E39) = ~0.12299999E4 +rem (~0.123E4, 0.17014117E39) = ~0.123E4 +* (~0.123E4, 0.123E4) = ~0.15129E7 ++ (~0.123E4, 0.123E4) = 0.0 +- (~0.123E4, 0.123E4) = ~0.246E4 +/ (~0.123E4, 0.123E4) = ~0.1E1 +nextAfter (~0.123E4, 0.123E4) = ~0.12299999E4 +rem (~0.123E4, 0.123E4) = 0.0 +* (~0.123E4, 0.123E2) = ~0.15129E5 ++ (~0.123E4, 0.123E2) = ~0.12177E4 +- (~0.123E4, 0.123E2) = ~0.12423E4 +/ (~0.123E4, 0.123E2) = ~0.1E3 +nextAfter (~0.123E4, 0.123E2) = ~0.12299999E4 +rem (~0.123E4, 0.123E2) = 0.0 +* (~0.123E4, 0.31415927E1) = ~0.38641592E4 ++ (~0.123E4, 0.31415927E1) = ~0.12268584E4 +- (~0.123E4, 0.31415927E1) = ~0.12331416E4 +/ (~0.123E4, 0.31415927E1) = ~0.39152115E3 +nextAfter (~0.123E4, 0.31415927E1) = ~0.12299999E4 +rem (~0.123E4, 0.31415927E1) = ~0.1637207E1 +* (~0.123E4, 0.27182817E1) = ~0.33434866E4 ++ (~0.123E4, 0.27182817E1) = ~0.12272817E4 +- (~0.123E4, 0.27182817E1) = ~0.12327183E4 +/ (~0.123E4, 0.27182817E1) = ~0.45249173E3 +nextAfter (~0.123E4, 0.27182817E1) = ~0.12299999E4 +rem (~0.123E4, 0.27182817E1) = ~0.13366699E1 +* (~0.123E4, 0.123E1) = ~0.15129E4 ++ (~0.123E4, 0.123E1) = ~0.122877E4 +- (~0.123E4, 0.123E1) = ~0.123123E4 +/ (~0.123E4, 0.123E1) = ~0.1E4 +nextAfter (~0.123E4, 0.123E1) = ~0.12299999E4 +rem (~0.123E4, 0.123E1) = 0.0 +* (~0.123E4, 0.123) = ~0.15129001E3 ++ (~0.123E4, 0.123) = ~0.1229877E4 +- (~0.123E4, 0.123) = ~0.1230123E4 +/ (~0.123E4, 0.123) = ~0.1E5 +nextAfter (~0.123E4, 0.123) = ~0.12299999E4 +rem (~0.123E4, 0.123) = 0.0 +* (~0.123E4, 0.123E~2) = ~0.15129001E1 ++ (~0.123E4, 0.123E~2) = ~0.12299988E4 +- (~0.123E4, 0.123E~2) = ~0.12300012E4 +/ (~0.123E4, 0.123E~2) = ~0.99999994E6 +nextAfter (~0.123E4, 0.123E~2) = ~0.12299999E4 +rem (~0.123E4, 0.123E~2) = ~0.12207031E~2 +* (~0.123E4, 0.11754944E~37) = ~0.1445858E~34 ++ (~0.123E4, 0.11754944E~37) = ~0.123E4 +- (~0.123E4, 0.11754944E~37) = ~0.123E4 +/ (~0.123E4, 0.11754944E~37) = ~inf +nextAfter (~0.123E4, 0.11754944E~37) = ~0.12299999E4 +rem (~0.123E4, 0.11754944E~37) = inf +* (~0.123E4, 0.5877472E~38) = ~0.722929E~35 ++ (~0.123E4, 0.5877472E~38) = ~0.123E4 +- (~0.123E4, 0.5877472E~38) = ~0.123E4 +/ (~0.123E4, 0.5877472E~38) = ~inf +nextAfter (~0.123E4, 0.5877472E~38) = ~0.12299999E4 +rem (~0.123E4, 0.5877472E~38) = inf +* (~0.123E4, 0.1E~44) = ~0.1724E~41 ++ (~0.123E4, 0.1E~44) = ~0.123E4 +- (~0.123E4, 0.1E~44) = ~0.123E4 +/ (~0.123E4, 0.1E~44) = ~inf +nextAfter (~0.123E4, 0.1E~44) = ~0.12299999E4 +rem (~0.123E4, 0.1E~44) = inf +* (~0.123E4, 0.0) = ~0.0 ++ (~0.123E4, 0.0) = ~0.123E4 +- (~0.123E4, 0.0) = ~0.123E4 +/ (~0.123E4, 0.0) = ~inf +nextAfter (~0.123E4, 0.0) = ~0.12299999E4 +rem (~0.123E4, 0.0) = nan +* (~0.123E4, ~0.34028235E39) = inf ++ (~0.123E4, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E4, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E4, ~0.34028235E39) = 0.36146455E~35 +nextAfter (~0.123E4, ~0.34028235E39) = ~0.12300001E4 +rem (~0.123E4, ~0.34028235E39) = ~0.123E4 +* (~0.123E4, ~0.17014117E39) = inf ++ (~0.123E4, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E4, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E4, ~0.17014117E39) = 0.7229291E~35 +nextAfter (~0.123E4, ~0.17014117E39) = ~0.12300001E4 +rem (~0.123E4, ~0.17014117E39) = ~0.123E4 +* (~0.123E4, ~0.123E4) = 0.15129E7 ++ (~0.123E4, ~0.123E4) = ~0.246E4 +- (~0.123E4, ~0.123E4) = 0.0 +/ (~0.123E4, ~0.123E4) = 0.1E1 +nextAfter (~0.123E4, ~0.123E4) = ~0.123E4 +rem (~0.123E4, ~0.123E4) = 0.0 +* (~0.123E4, ~0.123E2) = 0.15129E5 ++ (~0.123E4, ~0.123E2) = ~0.12423E4 +- (~0.123E4, ~0.123E2) = ~0.12177E4 +/ (~0.123E4, ~0.123E2) = 0.1E3 +nextAfter (~0.123E4, ~0.123E2) = ~0.12299999E4 +rem (~0.123E4, ~0.123E2) = 0.0 +* (~0.123E4, ~0.31415927E1) = 0.38641592E4 ++ (~0.123E4, ~0.31415927E1) = ~0.12331416E4 +- (~0.123E4, ~0.31415927E1) = ~0.12268584E4 +/ (~0.123E4, ~0.31415927E1) = 0.39152115E3 +nextAfter (~0.123E4, ~0.31415927E1) = ~0.12299999E4 +rem (~0.123E4, ~0.31415927E1) = ~0.1637207E1 +* (~0.123E4, ~0.27182817E1) = 0.33434866E4 ++ (~0.123E4, ~0.27182817E1) = ~0.12327183E4 +- (~0.123E4, ~0.27182817E1) = ~0.12272817E4 +/ (~0.123E4, ~0.27182817E1) = 0.45249173E3 +nextAfter (~0.123E4, ~0.27182817E1) = ~0.12299999E4 +rem (~0.123E4, ~0.27182817E1) = ~0.13366699E1 +* (~0.123E4, ~0.123E1) = 0.15129E4 ++ (~0.123E4, ~0.123E1) = ~0.123123E4 +- (~0.123E4, ~0.123E1) = ~0.122877E4 +/ (~0.123E4, ~0.123E1) = 0.1E4 +nextAfter (~0.123E4, ~0.123E1) = ~0.12299999E4 +rem (~0.123E4, ~0.123E1) = 0.0 +* (~0.123E4, ~0.123) = 0.15129001E3 ++ (~0.123E4, ~0.123) = ~0.1230123E4 +- (~0.123E4, ~0.123) = ~0.1229877E4 +/ (~0.123E4, ~0.123) = 0.1E5 +nextAfter (~0.123E4, ~0.123) = ~0.12299999E4 +rem (~0.123E4, ~0.123) = 0.0 +* (~0.123E4, ~0.123E~2) = 0.15129001E1 ++ (~0.123E4, ~0.123E~2) = ~0.12300012E4 +- (~0.123E4, ~0.123E~2) = ~0.12299988E4 +/ (~0.123E4, ~0.123E~2) = 0.99999994E6 +nextAfter (~0.123E4, ~0.123E~2) = ~0.12299999E4 +rem (~0.123E4, ~0.123E~2) = ~0.12207031E~2 +* (~0.123E4, ~0.11754944E~37) = 0.1445858E~34 ++ (~0.123E4, ~0.11754944E~37) = ~0.123E4 +- (~0.123E4, ~0.11754944E~37) = ~0.123E4 +/ (~0.123E4, ~0.11754944E~37) = inf +nextAfter (~0.123E4, ~0.11754944E~37) = ~0.12299999E4 +rem (~0.123E4, ~0.11754944E~37) = inf +* (~0.123E4, ~0.5877472E~38) = 0.722929E~35 ++ (~0.123E4, ~0.5877472E~38) = ~0.123E4 +- (~0.123E4, ~0.5877472E~38) = ~0.123E4 +/ (~0.123E4, ~0.5877472E~38) = inf +nextAfter (~0.123E4, ~0.5877472E~38) = ~0.12299999E4 +rem (~0.123E4, ~0.5877472E~38) = inf +* (~0.123E4, ~0.1E~44) = 0.1724E~41 ++ (~0.123E4, ~0.1E~44) = ~0.123E4 +- (~0.123E4, ~0.1E~44) = ~0.123E4 +/ (~0.123E4, ~0.1E~44) = inf +nextAfter (~0.123E4, ~0.1E~44) = ~0.12299999E4 +rem (~0.123E4, ~0.1E~44) = inf +* (~0.123E4, ~0.0) = 0.0 ++ (~0.123E4, ~0.0) = ~0.123E4 +- (~0.123E4, ~0.0) = ~0.123E4 +/ (~0.123E4, ~0.0) = inf +nextAfter (~0.123E4, ~0.0) = ~0.12299999E4 +rem (~0.123E4, ~0.0) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E4, ~inf) = inf ++ (~0.123E4, ~inf) = ~inf +- (~0.123E4, ~inf) = inf +/ (~0.123E4, ~inf) = 0.0 +nextAfter (~0.123E4, ~inf) = ~0.12300001E4 +rem (~0.123E4, ~inf) = ~0.123E4 +* (~0.123E4, nan) = nan ++ (~0.123E4, nan) = nan +- (~0.123E4, nan) = nan +/ (~0.123E4, nan) = nan +nextAfter (~0.123E4, nan) = nan +rem (~0.123E4, nan) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E2, 0.34028235E39) = ~inf ++ (~0.123E2, 0.34028235E39) = 0.34028235E39 +- (~0.123E2, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E2, 0.34028235E39) = ~0.36146455E~37 +nextAfter (~0.123E2, 0.34028235E39) = ~0.12299999E2 +rem (~0.123E2, 0.34028235E39) = ~0.123E2 +* (~0.123E2, 0.17014117E39) = ~inf ++ (~0.123E2, 0.17014117E39) = 0.17014117E39 +- (~0.123E2, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E2, 0.17014117E39) = ~0.7229291E~37 +nextAfter (~0.123E2, 0.17014117E39) = ~0.12299999E2 +rem (~0.123E2, 0.17014117E39) = ~0.123E2 +* (~0.123E2, 0.123E4) = ~0.15129E5 ++ (~0.123E2, 0.123E4) = 0.12177E4 +- (~0.123E2, 0.123E4) = ~0.12423E4 +/ (~0.123E2, 0.123E4) = ~0.1E~1 +nextAfter (~0.123E2, 0.123E4) = ~0.12299999E2 +rem (~0.123E2, 0.123E4) = ~0.123E2 +* (~0.123E2, 0.123E2) = ~0.15129001E3 ++ (~0.123E2, 0.123E2) = 0.0 +- (~0.123E2, 0.123E2) = ~0.246E2 +/ (~0.123E2, 0.123E2) = ~0.1E1 +nextAfter (~0.123E2, 0.123E2) = ~0.12299999E2 +rem (~0.123E2, 0.123E2) = 0.0 +* (~0.123E2, 0.31415927E1) = ~0.3864159E2 ++ (~0.123E2, 0.31415927E1) = ~0.9158407E1 +- (~0.123E2, 0.31415927E1) = ~0.15441593E2 +/ (~0.123E2, 0.31415927E1) = ~0.39152114E1 +nextAfter (~0.123E2, 0.31415927E1) = ~0.12299999E2 +rem (~0.123E2, 0.31415927E1) = ~0.28752222E1 +* (~0.123E2, 0.27182817E1) = ~0.33434868E2 ++ (~0.123E2, 0.27182817E1) = ~0.9581718E1 +- (~0.123E2, 0.27182817E1) = ~0.15018282E2 +/ (~0.123E2, 0.27182817E1) = ~0.4524917E1 +nextAfter (~0.123E2, 0.27182817E1) = ~0.12299999E2 +rem (~0.123E2, 0.27182817E1) = ~0.14268732E1 +* (~0.123E2, 0.123E1) = ~0.15129001E2 ++ (~0.123E2, 0.123E1) = ~0.1107E2 +- (~0.123E2, 0.123E1) = ~0.13530001E2 +/ (~0.123E2, 0.123E1) = ~0.1E2 +nextAfter (~0.123E2, 0.123E1) = ~0.12299999E2 +rem (~0.123E2, 0.123E1) = 0.0 +* (~0.123E2, 0.123) = ~0.15129001E1 ++ (~0.123E2, 0.123) = ~0.12177E2 +- (~0.123E2, 0.123) = ~0.12423E2 +/ (~0.123E2, 0.123) = ~0.1E3 +nextAfter (~0.123E2, 0.123) = ~0.12299999E2 +rem (~0.123E2, 0.123) = 0.0 +* (~0.123E2, 0.123E~2) = ~0.15129001E~1 ++ (~0.123E2, 0.123E~2) = ~0.1229877E2 +- (~0.123E2, 0.123E~2) = ~0.1230123E2 +/ (~0.123E2, 0.123E~2) = ~0.1E5 +nextAfter (~0.123E2, 0.123E~2) = ~0.12299999E2 +rem (~0.123E2, 0.123E~2) = 0.0 +* (~0.123E2, 0.11754944E~37) = ~0.14458581E~36 ++ (~0.123E2, 0.11754944E~37) = ~0.123E2 +- (~0.123E2, 0.11754944E~37) = ~0.123E2 +/ (~0.123E2, 0.11754944E~37) = ~inf +nextAfter (~0.123E2, 0.11754944E~37) = ~0.12299999E2 +rem (~0.123E2, 0.11754944E~37) = inf +* (~0.123E2, 0.5877472E~38) = ~0.72292904E~37 ++ (~0.123E2, 0.5877472E~38) = ~0.123E2 +- (~0.123E2, 0.5877472E~38) = ~0.123E2 +/ (~0.123E2, 0.5877472E~38) = ~inf +nextAfter (~0.123E2, 0.5877472E~38) = ~0.12299999E2 +rem (~0.123E2, 0.5877472E~38) = inf +* (~0.123E2, 0.1E~44) = ~0.17E~43 ++ (~0.123E2, 0.1E~44) = ~0.123E2 +- (~0.123E2, 0.1E~44) = ~0.123E2 +/ (~0.123E2, 0.1E~44) = ~inf +nextAfter (~0.123E2, 0.1E~44) = ~0.12299999E2 +rem (~0.123E2, 0.1E~44) = inf +* (~0.123E2, 0.0) = ~0.0 ++ (~0.123E2, 0.0) = ~0.123E2 +- (~0.123E2, 0.0) = ~0.123E2 +/ (~0.123E2, 0.0) = ~inf +nextAfter (~0.123E2, 0.0) = ~0.12299999E2 +rem (~0.123E2, 0.0) = nan +* (~0.123E2, ~0.34028235E39) = inf ++ (~0.123E2, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E2, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E2, ~0.34028235E39) = 0.36146455E~37 +nextAfter (~0.123E2, ~0.34028235E39) = ~0.12300001E2 +rem (~0.123E2, ~0.34028235E39) = ~0.123E2 +* (~0.123E2, ~0.17014117E39) = inf ++ (~0.123E2, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E2, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E2, ~0.17014117E39) = 0.7229291E~37 +nextAfter (~0.123E2, ~0.17014117E39) = ~0.12300001E2 +rem (~0.123E2, ~0.17014117E39) = ~0.123E2 +* (~0.123E2, ~0.123E4) = 0.15129E5 ++ (~0.123E2, ~0.123E4) = ~0.12423E4 +- (~0.123E2, ~0.123E4) = 0.12177E4 +/ (~0.123E2, ~0.123E4) = 0.1E~1 +nextAfter (~0.123E2, ~0.123E4) = ~0.12300001E2 +rem (~0.123E2, ~0.123E4) = ~0.123E2 +* (~0.123E2, ~0.123E2) = 0.15129001E3 ++ (~0.123E2, ~0.123E2) = ~0.246E2 +- (~0.123E2, ~0.123E2) = 0.0 +/ (~0.123E2, ~0.123E2) = 0.1E1 +nextAfter (~0.123E2, ~0.123E2) = ~0.123E2 +rem (~0.123E2, ~0.123E2) = 0.0 +* (~0.123E2, ~0.31415927E1) = 0.3864159E2 ++ (~0.123E2, ~0.31415927E1) = ~0.15441593E2 +- (~0.123E2, ~0.31415927E1) = ~0.9158407E1 +/ (~0.123E2, ~0.31415927E1) = 0.39152114E1 +nextAfter (~0.123E2, ~0.31415927E1) = ~0.12299999E2 +rem (~0.123E2, ~0.31415927E1) = ~0.28752222E1 +* (~0.123E2, ~0.27182817E1) = 0.33434868E2 ++ (~0.123E2, ~0.27182817E1) = ~0.15018282E2 +- (~0.123E2, ~0.27182817E1) = ~0.9581718E1 +/ (~0.123E2, ~0.27182817E1) = 0.4524917E1 +nextAfter (~0.123E2, ~0.27182817E1) = ~0.12299999E2 +rem (~0.123E2, ~0.27182817E1) = ~0.14268732E1 +* (~0.123E2, ~0.123E1) = 0.15129001E2 ++ (~0.123E2, ~0.123E1) = ~0.13530001E2 +- (~0.123E2, ~0.123E1) = ~0.1107E2 +/ (~0.123E2, ~0.123E1) = 0.1E2 +nextAfter (~0.123E2, ~0.123E1) = ~0.12299999E2 +rem (~0.123E2, ~0.123E1) = 0.0 +* (~0.123E2, ~0.123) = 0.15129001E1 ++ (~0.123E2, ~0.123) = ~0.12423E2 +- (~0.123E2, ~0.123) = ~0.12177E2 +/ (~0.123E2, ~0.123) = 0.1E3 +nextAfter (~0.123E2, ~0.123) = ~0.12299999E2 +rem (~0.123E2, ~0.123) = 0.0 +* (~0.123E2, ~0.123E~2) = 0.15129001E~1 ++ (~0.123E2, ~0.123E~2) = ~0.1230123E2 +- (~0.123E2, ~0.123E~2) = ~0.1229877E2 +/ (~0.123E2, ~0.123E~2) = 0.1E5 +nextAfter (~0.123E2, ~0.123E~2) = ~0.12299999E2 +rem (~0.123E2, ~0.123E~2) = 0.0 +* (~0.123E2, ~0.11754944E~37) = 0.14458581E~36 ++ (~0.123E2, ~0.11754944E~37) = ~0.123E2 +- (~0.123E2, ~0.11754944E~37) = ~0.123E2 +/ (~0.123E2, ~0.11754944E~37) = inf +nextAfter (~0.123E2, ~0.11754944E~37) = ~0.12299999E2 +rem (~0.123E2, ~0.11754944E~37) = inf +* (~0.123E2, ~0.5877472E~38) = 0.72292904E~37 ++ (~0.123E2, ~0.5877472E~38) = ~0.123E2 +- (~0.123E2, ~0.5877472E~38) = ~0.123E2 +/ (~0.123E2, ~0.5877472E~38) = inf +nextAfter (~0.123E2, ~0.5877472E~38) = ~0.12299999E2 +rem (~0.123E2, ~0.5877472E~38) = inf +* (~0.123E2, ~0.1E~44) = 0.17E~43 ++ (~0.123E2, ~0.1E~44) = ~0.123E2 +- (~0.123E2, ~0.1E~44) = ~0.123E2 +/ (~0.123E2, ~0.1E~44) = inf +nextAfter (~0.123E2, ~0.1E~44) = ~0.12299999E2 +rem (~0.123E2, ~0.1E~44) = inf +* (~0.123E2, ~0.0) = 0.0 ++ (~0.123E2, ~0.0) = ~0.123E2 +- (~0.123E2, ~0.0) = ~0.123E2 +/ (~0.123E2, ~0.0) = inf +nextAfter (~0.123E2, ~0.0) = ~0.12299999E2 +rem (~0.123E2, ~0.0) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.123E2, ~inf) = inf ++ (~0.123E2, ~inf) = ~inf +- (~0.123E2, ~inf) = inf +/ (~0.123E2, ~inf) = 0.0 +nextAfter (~0.123E2, ~inf) = ~0.12300001E2 +rem (~0.123E2, ~inf) = ~0.123E2 +* (~0.123E2, nan) = nan ++ (~0.123E2, nan) = nan +- (~0.123E2, nan) = nan +/ (~0.123E2, nan) = nan +nextAfter (~0.123E2, nan) = nan +rem (~0.123E2, nan) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.31415927E1, 0.34028235E39) = ~inf ++ (~0.31415927E1, 0.34028235E39) = 0.34028235E39 +- (~0.31415927E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.31415927E1, 0.34028235E39) = ~0.9232312E~38 +nextAfter (~0.31415927E1, 0.34028235E39) = ~0.31415925E1 +rem (~0.31415927E1, 0.34028235E39) = ~0.31415927E1 +* (~0.31415927E1, 0.17014117E39) = ~inf ++ (~0.31415927E1, 0.17014117E39) = 0.17014117E39 +- (~0.31415927E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.31415927E1, 0.17014117E39) = ~0.18464624E~37 +nextAfter (~0.31415927E1, 0.17014117E39) = ~0.31415925E1 +rem (~0.31415927E1, 0.17014117E39) = ~0.31415927E1 +* (~0.31415927E1, 0.123E4) = ~0.38641592E4 ++ (~0.31415927E1, 0.123E4) = 0.12268584E4 +- (~0.31415927E1, 0.123E4) = ~0.12331416E4 +/ (~0.31415927E1, 0.123E4) = ~0.25541405E~2 +nextAfter (~0.31415927E1, 0.123E4) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E4) = ~0.31415927E1 +* (~0.31415927E1, 0.123E2) = ~0.3864159E2 ++ (~0.31415927E1, 0.123E2) = 0.9158407E1 +- (~0.31415927E1, 0.123E2) = ~0.15441593E2 +/ (~0.31415927E1, 0.123E2) = ~0.25541404 +nextAfter (~0.31415927E1, 0.123E2) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E2) = ~0.31415927E1 +* (~0.31415927E1, 0.31415927E1) = ~0.9869605E1 ++ (~0.31415927E1, 0.31415927E1) = 0.0 +- (~0.31415927E1, 0.31415927E1) = ~0.62831855E1 +/ (~0.31415927E1, 0.31415927E1) = ~0.1E1 +nextAfter (~0.31415927E1, 0.31415927E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.31415927E1) = 0.0 +* (~0.31415927E1, 0.27182817E1) = ~0.8539734E1 ++ (~0.31415927E1, 0.27182817E1) = ~0.423311 +- (~0.31415927E1, 0.27182817E1) = ~0.58598747E1 +/ (~0.31415927E1, 0.27182817E1) = ~0.11557274E1 +nextAfter (~0.31415927E1, 0.27182817E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.27182817E1) = ~0.423311 +* (~0.31415927E1, 0.123E1) = ~0.3864159E1 ++ (~0.31415927E1, 0.123E1) = ~0.19115927E1 +- (~0.31415927E1, 0.123E1) = ~0.43715925E1 +/ (~0.31415927E1, 0.123E1) = ~0.25541403E1 +nextAfter (~0.31415927E1, 0.123E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E1) = ~0.6815927 +* (~0.31415927E1, 0.123) = ~0.38641593 ++ (~0.31415927E1, 0.123) = ~0.30185928E1 +- (~0.31415927E1, 0.123) = ~0.32645926E1 +/ (~0.31415927E1, 0.123) = ~0.25541403E2 +nextAfter (~0.31415927E1, 0.123) = ~0.31415925E1 +rem (~0.31415927E1, 0.123) = ~0.6659269E~1 +* (~0.31415927E1, 0.123E~2) = ~0.38641593E~2 ++ (~0.31415927E1, 0.123E~2) = ~0.31403627E1 +- (~0.31415927E1, 0.123E~2) = ~0.31428227E1 +/ (~0.31415927E1, 0.123E~2) = ~0.25541404E4 +nextAfter (~0.31415927E1, 0.123E~2) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E~2) = ~0.17261505E~3 +* (~0.31415927E1, 0.11754944E~37) = ~0.36929245E~37 ++ (~0.31415927E1, 0.11754944E~37) = ~0.31415927E1 +- (~0.31415927E1, 0.11754944E~37) = ~0.31415927E1 +/ (~0.31415927E1, 0.11754944E~37) = ~0.26725715E39 +nextAfter (~0.31415927E1, 0.11754944E~37) = ~0.31415925E1 +rem (~0.31415927E1, 0.11754944E~37) = 0.0 +* (~0.31415927E1, 0.5877472E~38) = ~0.18464623E~37 ++ (~0.31415927E1, 0.5877472E~38) = ~0.31415927E1 +- (~0.31415927E1, 0.5877472E~38) = ~0.31415927E1 +/ (~0.31415927E1, 0.5877472E~38) = ~inf +nextAfter (~0.31415927E1, 0.5877472E~38) = ~0.31415925E1 +rem (~0.31415927E1, 0.5877472E~38) = inf +* (~0.31415927E1, 0.1E~44) = ~0.4E~44 ++ (~0.31415927E1, 0.1E~44) = ~0.31415927E1 +- (~0.31415927E1, 0.1E~44) = ~0.31415927E1 +/ (~0.31415927E1, 0.1E~44) = ~inf +nextAfter (~0.31415927E1, 0.1E~44) = ~0.31415925E1 +rem (~0.31415927E1, 0.1E~44) = inf +* (~0.31415927E1, 0.0) = ~0.0 ++ (~0.31415927E1, 0.0) = ~0.31415927E1 +- (~0.31415927E1, 0.0) = ~0.31415927E1 +/ (~0.31415927E1, 0.0) = ~inf +nextAfter (~0.31415927E1, 0.0) = ~0.31415925E1 +rem (~0.31415927E1, 0.0) = nan +* (~0.31415927E1, ~0.34028235E39) = inf ++ (~0.31415927E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.31415927E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.31415927E1, ~0.34028235E39) = 0.9232312E~38 +nextAfter (~0.31415927E1, ~0.34028235E39) = ~0.3141593E1 +rem (~0.31415927E1, ~0.34028235E39) = ~0.31415927E1 +* (~0.31415927E1, ~0.17014117E39) = inf ++ (~0.31415927E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.31415927E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.31415927E1, ~0.17014117E39) = 0.18464624E~37 +nextAfter (~0.31415927E1, ~0.17014117E39) = ~0.3141593E1 +rem (~0.31415927E1, ~0.17014117E39) = ~0.31415927E1 +* (~0.31415927E1, ~0.123E4) = 0.38641592E4 ++ (~0.31415927E1, ~0.123E4) = ~0.12331416E4 +- (~0.31415927E1, ~0.123E4) = 0.12268584E4 +/ (~0.31415927E1, ~0.123E4) = 0.25541405E~2 +nextAfter (~0.31415927E1, ~0.123E4) = ~0.3141593E1 +rem (~0.31415927E1, ~0.123E4) = ~0.31415927E1 +* (~0.31415927E1, ~0.123E2) = 0.3864159E2 ++ (~0.31415927E1, ~0.123E2) = ~0.15441593E2 +- (~0.31415927E1, ~0.123E2) = 0.9158407E1 +/ (~0.31415927E1, ~0.123E2) = 0.25541404 +nextAfter (~0.31415927E1, ~0.123E2) = ~0.3141593E1 +rem (~0.31415927E1, ~0.123E2) = ~0.31415927E1 +* (~0.31415927E1, ~0.31415927E1) = 0.9869605E1 ++ (~0.31415927E1, ~0.31415927E1) = ~0.62831855E1 +- (~0.31415927E1, ~0.31415927E1) = 0.0 +/ (~0.31415927E1, ~0.31415927E1) = 0.1E1 +nextAfter (~0.31415927E1, ~0.31415927E1) = ~0.31415927E1 +rem (~0.31415927E1, ~0.31415927E1) = 0.0 +* (~0.31415927E1, ~0.27182817E1) = 0.8539734E1 ++ (~0.31415927E1, ~0.27182817E1) = ~0.58598747E1 +- (~0.31415927E1, ~0.27182817E1) = ~0.423311 +/ (~0.31415927E1, ~0.27182817E1) = 0.11557274E1 +nextAfter (~0.31415927E1, ~0.27182817E1) = ~0.31415925E1 +rem (~0.31415927E1, ~0.27182817E1) = ~0.423311 +* (~0.31415927E1, ~0.123E1) = 0.3864159E1 ++ (~0.31415927E1, ~0.123E1) = ~0.43715925E1 +- (~0.31415927E1, ~0.123E1) = ~0.19115927E1 +/ (~0.31415927E1, ~0.123E1) = 0.25541403E1 +nextAfter (~0.31415927E1, ~0.123E1) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123E1) = ~0.6815927 +* (~0.31415927E1, ~0.123) = 0.38641593 ++ (~0.31415927E1, ~0.123) = ~0.32645926E1 +- (~0.31415927E1, ~0.123) = ~0.30185928E1 +/ (~0.31415927E1, ~0.123) = 0.25541403E2 +nextAfter (~0.31415927E1, ~0.123) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123) = ~0.6659269E~1 +* (~0.31415927E1, ~0.123E~2) = 0.38641593E~2 ++ (~0.31415927E1, ~0.123E~2) = ~0.31428227E1 +- (~0.31415927E1, ~0.123E~2) = ~0.31403627E1 +/ (~0.31415927E1, ~0.123E~2) = 0.25541404E4 +nextAfter (~0.31415927E1, ~0.123E~2) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123E~2) = ~0.17261505E~3 +* (~0.31415927E1, ~0.11754944E~37) = 0.36929245E~37 ++ (~0.31415927E1, ~0.11754944E~37) = ~0.31415927E1 +- (~0.31415927E1, ~0.11754944E~37) = ~0.31415927E1 +/ (~0.31415927E1, ~0.11754944E~37) = 0.26725715E39 +nextAfter (~0.31415927E1, ~0.11754944E~37) = ~0.31415925E1 +rem (~0.31415927E1, ~0.11754944E~37) = 0.0 +* (~0.31415927E1, ~0.5877472E~38) = 0.18464623E~37 ++ (~0.31415927E1, ~0.5877472E~38) = ~0.31415927E1 +- (~0.31415927E1, ~0.5877472E~38) = ~0.31415927E1 +/ (~0.31415927E1, ~0.5877472E~38) = inf +nextAfter (~0.31415927E1, ~0.5877472E~38) = ~0.31415925E1 +rem (~0.31415927E1, ~0.5877472E~38) = inf +* (~0.31415927E1, ~0.1E~44) = 0.4E~44 ++ (~0.31415927E1, ~0.1E~44) = ~0.31415927E1 +- (~0.31415927E1, ~0.1E~44) = ~0.31415927E1 +/ (~0.31415927E1, ~0.1E~44) = inf +nextAfter (~0.31415927E1, ~0.1E~44) = ~0.31415925E1 +rem (~0.31415927E1, ~0.1E~44) = inf +* (~0.31415927E1, ~0.0) = 0.0 ++ (~0.31415927E1, ~0.0) = ~0.31415927E1 +- (~0.31415927E1, ~0.0) = ~0.31415927E1 +/ (~0.31415927E1, ~0.0) = inf +nextAfter (~0.31415927E1, ~0.0) = ~0.31415925E1 +rem (~0.31415927E1, ~0.0) = nan +* (~0.31415927E1, inf) = ~inf ++ (~0.31415927E1, inf) = inf +- (~0.31415927E1, inf) = ~inf +/ (~0.31415927E1, inf) = ~0.0 +nextAfter (~0.31415927E1, inf) = ~0.31415925E1 +rem (~0.31415927E1, inf) = ~0.31415927E1 +* (~0.31415927E1, ~inf) = inf ++ (~0.31415927E1, ~inf) = ~inf +- (~0.31415927E1, ~inf) = inf +/ (~0.31415927E1, ~inf) = 0.0 +nextAfter (~0.31415927E1, ~inf) = ~0.3141593E1 +rem (~0.31415927E1, ~inf) = ~0.31415927E1 +* (~0.31415927E1, nan) = nan ++ (~0.31415927E1, nan) = nan +- (~0.31415927E1, nan) = nan +/ (~0.31415927E1, nan) = nan +nextAfter (~0.31415927E1, nan) = nan +rem (~0.31415927E1, nan) = nan +* (~0.31415927E1, inf) = ~inf ++ (~0.31415927E1, inf) = inf +- (~0.31415927E1, inf) = ~inf +/ (~0.31415927E1, inf) = ~0.0 +nextAfter (~0.31415927E1, inf) = ~0.31415925E1 +rem (~0.31415927E1, inf) = ~0.31415927E1 +* (~0.27182817E1, 0.34028235E39) = ~inf ++ (~0.27182817E1, 0.34028235E39) = 0.34028235E39 +- (~0.27182817E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.27182817E1, 0.34028235E39) = ~0.7988312E~38 +nextAfter (~0.27182817E1, 0.34028235E39) = ~0.27182815E1 +rem (~0.27182817E1, 0.34028235E39) = ~0.27182817E1 +* (~0.27182817E1, 0.17014117E39) = ~inf ++ (~0.27182817E1, 0.17014117E39) = 0.17014117E39 +- (~0.27182817E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.27182817E1, 0.17014117E39) = ~0.15976626E~37 +nextAfter (~0.27182817E1, 0.17014117E39) = ~0.27182815E1 +rem (~0.27182817E1, 0.17014117E39) = ~0.27182817E1 +* (~0.27182817E1, 0.123E4) = ~0.33434866E4 ++ (~0.27182817E1, 0.123E4) = 0.12272817E4 +- (~0.27182817E1, 0.123E4) = ~0.12327183E4 +/ (~0.27182817E1, 0.123E4) = ~0.22099852E~2 +nextAfter (~0.27182817E1, 0.123E4) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E4) = ~0.27182817E1 +* (~0.27182817E1, 0.123E2) = ~0.33434868E2 ++ (~0.27182817E1, 0.123E2) = 0.9581718E1 +- (~0.27182817E1, 0.123E2) = ~0.15018282E2 +/ (~0.27182817E1, 0.123E2) = ~0.22099851 +nextAfter (~0.27182817E1, 0.123E2) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E2) = ~0.27182817E1 +* (~0.27182817E1, 0.31415927E1) = ~0.8539734E1 ++ (~0.27182817E1, 0.31415927E1) = 0.423311 +- (~0.27182817E1, 0.31415927E1) = ~0.58598747E1 +/ (~0.27182817E1, 0.31415927E1) = ~0.86525595 +nextAfter (~0.27182817E1, 0.31415927E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.31415927E1) = ~0.27182817E1 +* (~0.27182817E1, 0.27182817E1) = ~0.73890557E1 ++ (~0.27182817E1, 0.27182817E1) = 0.0 +- (~0.27182817E1, 0.27182817E1) = ~0.54365635E1 +/ (~0.27182817E1, 0.27182817E1) = ~0.1E1 +nextAfter (~0.27182817E1, 0.27182817E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.27182817E1) = 0.0 +* (~0.27182817E1, 0.123E1) = ~0.33434865E1 ++ (~0.27182817E1, 0.123E1) = ~0.14882817E1 +- (~0.27182817E1, 0.123E1) = ~0.39482818E1 +/ (~0.27182817E1, 0.123E1) = ~0.2209985E1 +nextAfter (~0.27182817E1, 0.123E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E1) = ~0.2582817 +* (~0.27182817E1, 0.123) = ~0.33434868 ++ (~0.27182817E1, 0.123) = ~0.25952818E1 +- (~0.27182817E1, 0.123) = ~0.28412817E1 +/ (~0.27182817E1, 0.123) = ~0.22099852E2 +nextAfter (~0.27182817E1, 0.123) = ~0.27182815E1 +rem (~0.27182817E1, 0.123) = ~0.12281656E~1 +* (~0.27182817E1, 0.123E~2) = ~0.33434867E~2 ++ (~0.27182817E1, 0.123E~2) = ~0.27170517E1 +- (~0.27182817E1, 0.123E~2) = ~0.27195117E1 +/ (~0.27182817E1, 0.123E~2) = ~0.2209985E4 +nextAfter (~0.27182817E1, 0.123E~2) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E~2) = ~0.12116432E~2 +* (~0.27182817E1, 0.11754944E~37) = ~0.31953248E~37 ++ (~0.27182817E1, 0.11754944E~37) = ~0.27182817E1 +- (~0.27182817E1, 0.11754944E~37) = ~0.27182817E1 +/ (~0.27182817E1, 0.11754944E~37) = ~0.23124584E39 +nextAfter (~0.27182817E1, 0.11754944E~37) = ~0.27182815E1 +rem (~0.27182817E1, 0.11754944E~37) = 0.0 +* (~0.27182817E1, 0.5877472E~38) = ~0.15976624E~37 ++ (~0.27182817E1, 0.5877472E~38) = ~0.27182817E1 +- (~0.27182817E1, 0.5877472E~38) = ~0.27182817E1 +/ (~0.27182817E1, 0.5877472E~38) = ~inf +nextAfter (~0.27182817E1, 0.5877472E~38) = ~0.27182815E1 +rem (~0.27182817E1, 0.5877472E~38) = inf +* (~0.27182817E1, 0.1E~44) = ~0.4E~44 ++ (~0.27182817E1, 0.1E~44) = ~0.27182817E1 +- (~0.27182817E1, 0.1E~44) = ~0.27182817E1 +/ (~0.27182817E1, 0.1E~44) = ~inf +nextAfter (~0.27182817E1, 0.1E~44) = ~0.27182815E1 +rem (~0.27182817E1, 0.1E~44) = inf +* (~0.27182817E1, 0.0) = ~0.0 ++ (~0.27182817E1, 0.0) = ~0.27182817E1 +- (~0.27182817E1, 0.0) = ~0.27182817E1 +/ (~0.27182817E1, 0.0) = ~inf +nextAfter (~0.27182817E1, 0.0) = ~0.27182815E1 +rem (~0.27182817E1, 0.0) = nan +* (~0.27182817E1, ~0.34028235E39) = inf ++ (~0.27182817E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.27182817E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.27182817E1, ~0.34028235E39) = 0.7988312E~38 +nextAfter (~0.27182817E1, ~0.34028235E39) = ~0.2718282E1 +rem (~0.27182817E1, ~0.34028235E39) = ~0.27182817E1 +* (~0.27182817E1, ~0.17014117E39) = inf ++ (~0.27182817E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.27182817E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.27182817E1, ~0.17014117E39) = 0.15976626E~37 +nextAfter (~0.27182817E1, ~0.17014117E39) = ~0.2718282E1 +rem (~0.27182817E1, ~0.17014117E39) = ~0.27182817E1 +* (~0.27182817E1, ~0.123E4) = 0.33434866E4 ++ (~0.27182817E1, ~0.123E4) = ~0.12327183E4 +- (~0.27182817E1, ~0.123E4) = 0.12272817E4 +/ (~0.27182817E1, ~0.123E4) = 0.22099852E~2 +nextAfter (~0.27182817E1, ~0.123E4) = ~0.2718282E1 +rem (~0.27182817E1, ~0.123E4) = ~0.27182817E1 +* (~0.27182817E1, ~0.123E2) = 0.33434868E2 ++ (~0.27182817E1, ~0.123E2) = ~0.15018282E2 +- (~0.27182817E1, ~0.123E2) = 0.9581718E1 +/ (~0.27182817E1, ~0.123E2) = 0.22099851 +nextAfter (~0.27182817E1, ~0.123E2) = ~0.2718282E1 +rem (~0.27182817E1, ~0.123E2) = ~0.27182817E1 +* (~0.27182817E1, ~0.31415927E1) = 0.8539734E1 ++ (~0.27182817E1, ~0.31415927E1) = ~0.58598747E1 +- (~0.27182817E1, ~0.31415927E1) = 0.423311 +/ (~0.27182817E1, ~0.31415927E1) = 0.86525595 +nextAfter (~0.27182817E1, ~0.31415927E1) = ~0.2718282E1 +rem (~0.27182817E1, ~0.31415927E1) = ~0.27182817E1 +* (~0.27182817E1, ~0.27182817E1) = 0.73890557E1 ++ (~0.27182817E1, ~0.27182817E1) = ~0.54365635E1 +- (~0.27182817E1, ~0.27182817E1) = 0.0 +/ (~0.27182817E1, ~0.27182817E1) = 0.1E1 +nextAfter (~0.27182817E1, ~0.27182817E1) = ~0.27182817E1 +rem (~0.27182817E1, ~0.27182817E1) = 0.0 +* (~0.27182817E1, ~0.123E1) = 0.33434865E1 ++ (~0.27182817E1, ~0.123E1) = ~0.39482818E1 +- (~0.27182817E1, ~0.123E1) = ~0.14882817E1 +/ (~0.27182817E1, ~0.123E1) = 0.2209985E1 +nextAfter (~0.27182817E1, ~0.123E1) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123E1) = ~0.2582817 +* (~0.27182817E1, ~0.123) = 0.33434868 ++ (~0.27182817E1, ~0.123) = ~0.28412817E1 +- (~0.27182817E1, ~0.123) = ~0.25952818E1 +/ (~0.27182817E1, ~0.123) = 0.22099852E2 +nextAfter (~0.27182817E1, ~0.123) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123) = ~0.12281656E~1 +* (~0.27182817E1, ~0.123E~2) = 0.33434867E~2 ++ (~0.27182817E1, ~0.123E~2) = ~0.27195117E1 +- (~0.27182817E1, ~0.123E~2) = ~0.27170517E1 +/ (~0.27182817E1, ~0.123E~2) = 0.2209985E4 +nextAfter (~0.27182817E1, ~0.123E~2) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123E~2) = ~0.12116432E~2 +* (~0.27182817E1, ~0.11754944E~37) = 0.31953248E~37 ++ (~0.27182817E1, ~0.11754944E~37) = ~0.27182817E1 +- (~0.27182817E1, ~0.11754944E~37) = ~0.27182817E1 +/ (~0.27182817E1, ~0.11754944E~37) = 0.23124584E39 +nextAfter (~0.27182817E1, ~0.11754944E~37) = ~0.27182815E1 +rem (~0.27182817E1, ~0.11754944E~37) = 0.0 +* (~0.27182817E1, ~0.5877472E~38) = 0.15976624E~37 ++ (~0.27182817E1, ~0.5877472E~38) = ~0.27182817E1 +- (~0.27182817E1, ~0.5877472E~38) = ~0.27182817E1 +/ (~0.27182817E1, ~0.5877472E~38) = inf +nextAfter (~0.27182817E1, ~0.5877472E~38) = ~0.27182815E1 +rem (~0.27182817E1, ~0.5877472E~38) = inf +* (~0.27182817E1, ~0.1E~44) = 0.4E~44 ++ (~0.27182817E1, ~0.1E~44) = ~0.27182817E1 +- (~0.27182817E1, ~0.1E~44) = ~0.27182817E1 +/ (~0.27182817E1, ~0.1E~44) = inf +nextAfter (~0.27182817E1, ~0.1E~44) = ~0.27182815E1 +rem (~0.27182817E1, ~0.1E~44) = inf +* (~0.27182817E1, ~0.0) = 0.0 ++ (~0.27182817E1, ~0.0) = ~0.27182817E1 +- (~0.27182817E1, ~0.0) = ~0.27182817E1 +/ (~0.27182817E1, ~0.0) = inf +nextAfter (~0.27182817E1, ~0.0) = ~0.27182815E1 +rem (~0.27182817E1, ~0.0) = nan +* (~0.27182817E1, inf) = ~inf ++ (~0.27182817E1, inf) = inf +- (~0.27182817E1, inf) = ~inf +/ (~0.27182817E1, inf) = ~0.0 +nextAfter (~0.27182817E1, inf) = ~0.27182815E1 +rem (~0.27182817E1, inf) = ~0.27182817E1 +* (~0.27182817E1, ~inf) = inf ++ (~0.27182817E1, ~inf) = ~inf +- (~0.27182817E1, ~inf) = inf +/ (~0.27182817E1, ~inf) = 0.0 +nextAfter (~0.27182817E1, ~inf) = ~0.2718282E1 +rem (~0.27182817E1, ~inf) = ~0.27182817E1 +* (~0.27182817E1, nan) = nan ++ (~0.27182817E1, nan) = nan +- (~0.27182817E1, nan) = nan +/ (~0.27182817E1, nan) = nan +nextAfter (~0.27182817E1, nan) = nan +rem (~0.27182817E1, nan) = nan +* (~0.27182817E1, inf) = ~inf ++ (~0.27182817E1, inf) = inf +- (~0.27182817E1, inf) = ~inf +/ (~0.27182817E1, inf) = ~0.0 +nextAfter (~0.27182817E1, inf) = ~0.27182815E1 +rem (~0.27182817E1, inf) = ~0.27182817E1 +* (~0.123E1, 0.34028235E39) = ~inf ++ (~0.123E1, 0.34028235E39) = 0.34028235E39 +- (~0.123E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E1, 0.34028235E39) = ~0.3614645E~38 +nextAfter (~0.123E1, 0.34028235E39) = ~0.12299999E1 +rem (~0.123E1, 0.34028235E39) = ~0.123E1 +* (~0.123E1, 0.17014117E39) = ~0.20927364E39 ++ (~0.123E1, 0.17014117E39) = 0.17014117E39 +- (~0.123E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E1, 0.17014117E39) = ~0.722929E~38 +nextAfter (~0.123E1, 0.17014117E39) = ~0.12299999E1 +rem (~0.123E1, 0.17014117E39) = ~0.123E1 +* (~0.123E1, 0.123E4) = ~0.15129E4 ++ (~0.123E1, 0.123E4) = 0.122877E4 +- (~0.123E1, 0.123E4) = ~0.123123E4 +/ (~0.123E1, 0.123E4) = ~0.1E~2 +nextAfter (~0.123E1, 0.123E4) = ~0.12299999E1 +rem (~0.123E1, 0.123E4) = ~0.123E1 +* (~0.123E1, 0.123E2) = ~0.15129001E2 ++ (~0.123E1, 0.123E2) = 0.1107E2 +- (~0.123E1, 0.123E2) = ~0.13530001E2 +/ (~0.123E1, 0.123E2) = ~0.1 +nextAfter (~0.123E1, 0.123E2) = ~0.12299999E1 +rem (~0.123E1, 0.123E2) = ~0.123E1 +* (~0.123E1, 0.31415927E1) = ~0.3864159E1 ++ (~0.123E1, 0.31415927E1) = 0.19115927E1 +- (~0.123E1, 0.31415927E1) = ~0.43715925E1 +/ (~0.123E1, 0.31415927E1) = ~0.39152116 +nextAfter (~0.123E1, 0.31415927E1) = ~0.12299999E1 +rem (~0.123E1, 0.31415927E1) = ~0.123E1 +* (~0.123E1, 0.27182817E1) = ~0.33434865E1 ++ (~0.123E1, 0.27182817E1) = 0.14882817E1 +- (~0.123E1, 0.27182817E1) = ~0.39482818E1 +/ (~0.123E1, 0.27182817E1) = ~0.45249173 +nextAfter (~0.123E1, 0.27182817E1) = ~0.12299999E1 +rem (~0.123E1, 0.27182817E1) = ~0.123E1 +* (~0.123E1, 0.123E1) = ~0.15129E1 ++ (~0.123E1, 0.123E1) = 0.0 +- (~0.123E1, 0.123E1) = ~0.246E1 +/ (~0.123E1, 0.123E1) = ~0.1E1 +nextAfter (~0.123E1, 0.123E1) = ~0.12299999E1 +rem (~0.123E1, 0.123E1) = 0.0 +* (~0.123E1, 0.123) = ~0.15129 ++ (~0.123E1, 0.123) = ~0.1107E1 +- (~0.123E1, 0.123) = ~0.1353E1 +/ (~0.123E1, 0.123) = ~0.1E2 +nextAfter (~0.123E1, 0.123) = ~0.12299999E1 +rem (~0.123E1, 0.123) = 0.0 +* (~0.123E1, 0.123E~2) = ~0.15129001E~2 ++ (~0.123E1, 0.123E~2) = ~0.122877E1 +- (~0.123E1, 0.123E~2) = ~0.123123E1 +/ (~0.123E1, 0.123E~2) = ~0.1E4 +nextAfter (~0.123E1, 0.123E~2) = ~0.12299999E1 +rem (~0.123E1, 0.123E~2) = 0.0 +* (~0.123E1, 0.11754944E~37) = ~0.14458581E~37 ++ (~0.123E1, 0.11754944E~37) = ~0.123E1 +- (~0.123E1, 0.11754944E~37) = ~0.123E1 +/ (~0.123E1, 0.11754944E~37) = ~0.10463683E39 +nextAfter (~0.123E1, 0.11754944E~37) = ~0.12299999E1 +rem (~0.123E1, 0.11754944E~37) = 0.0 +* (~0.123E1, 0.5877472E~38) = ~0.722929E~38 ++ (~0.123E1, 0.5877472E~38) = ~0.123E1 +- (~0.123E1, 0.5877472E~38) = ~0.123E1 +/ (~0.123E1, 0.5877472E~38) = ~0.20927366E39 +nextAfter (~0.123E1, 0.5877472E~38) = ~0.12299999E1 +rem (~0.123E1, 0.5877472E~38) = 0.0 +* (~0.123E1, 0.1E~44) = ~0.1E~44 ++ (~0.123E1, 0.1E~44) = ~0.123E1 +- (~0.123E1, 0.1E~44) = ~0.123E1 +/ (~0.123E1, 0.1E~44) = ~inf +nextAfter (~0.123E1, 0.1E~44) = ~0.12299999E1 +rem (~0.123E1, 0.1E~44) = inf +* (~0.123E1, 0.0) = ~0.0 ++ (~0.123E1, 0.0) = ~0.123E1 +- (~0.123E1, 0.0) = ~0.123E1 +/ (~0.123E1, 0.0) = ~inf +nextAfter (~0.123E1, 0.0) = ~0.12299999E1 +rem (~0.123E1, 0.0) = nan +* (~0.123E1, ~0.34028235E39) = inf ++ (~0.123E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E1, ~0.34028235E39) = 0.3614645E~38 +nextAfter (~0.123E1, ~0.34028235E39) = ~0.12300001E1 +rem (~0.123E1, ~0.34028235E39) = ~0.123E1 +* (~0.123E1, ~0.17014117E39) = 0.20927364E39 ++ (~0.123E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E1, ~0.17014117E39) = 0.722929E~38 +nextAfter (~0.123E1, ~0.17014117E39) = ~0.12300001E1 +rem (~0.123E1, ~0.17014117E39) = ~0.123E1 +* (~0.123E1, ~0.123E4) = 0.15129E4 ++ (~0.123E1, ~0.123E4) = ~0.123123E4 +- (~0.123E1, ~0.123E4) = 0.122877E4 +/ (~0.123E1, ~0.123E4) = 0.1E~2 +nextAfter (~0.123E1, ~0.123E4) = ~0.12300001E1 +rem (~0.123E1, ~0.123E4) = ~0.123E1 +* (~0.123E1, ~0.123E2) = 0.15129001E2 ++ (~0.123E1, ~0.123E2) = ~0.13530001E2 +- (~0.123E1, ~0.123E2) = 0.1107E2 +/ (~0.123E1, ~0.123E2) = 0.1 +nextAfter (~0.123E1, ~0.123E2) = ~0.12300001E1 +rem (~0.123E1, ~0.123E2) = ~0.123E1 +* (~0.123E1, ~0.31415927E1) = 0.3864159E1 ++ (~0.123E1, ~0.31415927E1) = ~0.43715925E1 +- (~0.123E1, ~0.31415927E1) = 0.19115927E1 +/ (~0.123E1, ~0.31415927E1) = 0.39152116 +nextAfter (~0.123E1, ~0.31415927E1) = ~0.12300001E1 +rem (~0.123E1, ~0.31415927E1) = ~0.123E1 +* (~0.123E1, ~0.27182817E1) = 0.33434865E1 ++ (~0.123E1, ~0.27182817E1) = ~0.39482818E1 +- (~0.123E1, ~0.27182817E1) = 0.14882817E1 +/ (~0.123E1, ~0.27182817E1) = 0.45249173 +nextAfter (~0.123E1, ~0.27182817E1) = ~0.12300001E1 +rem (~0.123E1, ~0.27182817E1) = ~0.123E1 +* (~0.123E1, ~0.123E1) = 0.15129E1 ++ (~0.123E1, ~0.123E1) = ~0.246E1 +- (~0.123E1, ~0.123E1) = 0.0 +/ (~0.123E1, ~0.123E1) = 0.1E1 +nextAfter (~0.123E1, ~0.123E1) = ~0.123E1 +rem (~0.123E1, ~0.123E1) = 0.0 +* (~0.123E1, ~0.123) = 0.15129 ++ (~0.123E1, ~0.123) = ~0.1353E1 +- (~0.123E1, ~0.123) = ~0.1107E1 +/ (~0.123E1, ~0.123) = 0.1E2 +nextAfter (~0.123E1, ~0.123) = ~0.12299999E1 +rem (~0.123E1, ~0.123) = 0.0 +* (~0.123E1, ~0.123E~2) = 0.15129001E~2 ++ (~0.123E1, ~0.123E~2) = ~0.123123E1 +- (~0.123E1, ~0.123E~2) = ~0.122877E1 +/ (~0.123E1, ~0.123E~2) = 0.1E4 +nextAfter (~0.123E1, ~0.123E~2) = ~0.12299999E1 +rem (~0.123E1, ~0.123E~2) = 0.0 +* (~0.123E1, ~0.11754944E~37) = 0.14458581E~37 ++ (~0.123E1, ~0.11754944E~37) = ~0.123E1 +- (~0.123E1, ~0.11754944E~37) = ~0.123E1 +/ (~0.123E1, ~0.11754944E~37) = 0.10463683E39 +nextAfter (~0.123E1, ~0.11754944E~37) = ~0.12299999E1 +rem (~0.123E1, ~0.11754944E~37) = 0.0 +* (~0.123E1, ~0.5877472E~38) = 0.722929E~38 ++ (~0.123E1, ~0.5877472E~38) = ~0.123E1 +- (~0.123E1, ~0.5877472E~38) = ~0.123E1 +/ (~0.123E1, ~0.5877472E~38) = 0.20927366E39 +nextAfter (~0.123E1, ~0.5877472E~38) = ~0.12299999E1 +rem (~0.123E1, ~0.5877472E~38) = 0.0 +* (~0.123E1, ~0.1E~44) = 0.1E~44 ++ (~0.123E1, ~0.1E~44) = ~0.123E1 +- (~0.123E1, ~0.1E~44) = ~0.123E1 +/ (~0.123E1, ~0.1E~44) = inf +nextAfter (~0.123E1, ~0.1E~44) = ~0.12299999E1 +rem (~0.123E1, ~0.1E~44) = inf +* (~0.123E1, ~0.0) = 0.0 ++ (~0.123E1, ~0.0) = ~0.123E1 +- (~0.123E1, ~0.0) = ~0.123E1 +/ (~0.123E1, ~0.0) = inf +nextAfter (~0.123E1, ~0.0) = ~0.12299999E1 +rem (~0.123E1, ~0.0) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123E1, ~inf) = inf ++ (~0.123E1, ~inf) = ~inf +- (~0.123E1, ~inf) = inf +/ (~0.123E1, ~inf) = 0.0 +nextAfter (~0.123E1, ~inf) = ~0.12300001E1 +rem (~0.123E1, ~inf) = ~0.123E1 +* (~0.123E1, nan) = nan ++ (~0.123E1, nan) = nan +- (~0.123E1, nan) = nan +/ (~0.123E1, nan) = nan +nextAfter (~0.123E1, nan) = nan +rem (~0.123E1, nan) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123, 0.34028235E39) = ~0.4185473E38 ++ (~0.123, 0.34028235E39) = 0.34028235E39 +- (~0.123, 0.34028235E39) = ~0.34028235E39 +/ (~0.123, 0.34028235E39) = ~0.361465E~39 +nextAfter (~0.123, 0.34028235E39) = ~0.122999996 +rem (~0.123, 0.34028235E39) = ~0.123 +* (~0.123, 0.17014117E39) = ~0.20927365E38 ++ (~0.123, 0.17014117E39) = 0.17014117E39 +- (~0.123, 0.17014117E39) = ~0.17014117E39 +/ (~0.123, 0.17014117E39) = ~0.722928E~39 +nextAfter (~0.123, 0.17014117E39) = ~0.122999996 +rem (~0.123, 0.17014117E39) = ~0.123 +* (~0.123, 0.123E4) = ~0.15129001E3 ++ (~0.123, 0.123E4) = 0.1229877E4 +- (~0.123, 0.123E4) = ~0.1230123E4 +/ (~0.123, 0.123E4) = ~0.100000005E~3 +nextAfter (~0.123, 0.123E4) = ~0.122999996 +rem (~0.123, 0.123E4) = ~0.123 +* (~0.123, 0.123E2) = ~0.15129001E1 ++ (~0.123, 0.123E2) = 0.12177E2 +- (~0.123, 0.123E2) = ~0.12423E2 +/ (~0.123, 0.123E2) = ~0.1E~1 +nextAfter (~0.123, 0.123E2) = ~0.122999996 +rem (~0.123, 0.123E2) = ~0.123 +* (~0.123, 0.31415927E1) = ~0.38641593 ++ (~0.123, 0.31415927E1) = 0.30185928E1 +- (~0.123, 0.31415927E1) = ~0.32645926E1 +/ (~0.123, 0.31415927E1) = ~0.39152116E~1 +nextAfter (~0.123, 0.31415927E1) = ~0.122999996 +rem (~0.123, 0.31415927E1) = ~0.123 +* (~0.123, 0.27182817E1) = ~0.33434868 ++ (~0.123, 0.27182817E1) = 0.25952818E1 +- (~0.123, 0.27182817E1) = ~0.28412817E1 +/ (~0.123, 0.27182817E1) = ~0.45249175E~1 +nextAfter (~0.123, 0.27182817E1) = ~0.122999996 +rem (~0.123, 0.27182817E1) = ~0.123 +* (~0.123, 0.123E1) = ~0.15129 ++ (~0.123, 0.123E1) = 0.1107E1 +- (~0.123, 0.123E1) = ~0.1353E1 +/ (~0.123, 0.123E1) = ~0.1 +nextAfter (~0.123, 0.123E1) = ~0.122999996 +rem (~0.123, 0.123E1) = ~0.123 +* (~0.123, 0.123) = ~0.15129001E~1 ++ (~0.123, 0.123) = 0.0 +- (~0.123, 0.123) = ~0.246 +/ (~0.123, 0.123) = ~0.1E1 +nextAfter (~0.123, 0.123) = ~0.122999996 +rem (~0.123, 0.123) = 0.0 +* (~0.123, 0.123E~2) = ~0.15129E~3 ++ (~0.123, 0.123E~2) = ~0.12177 +- (~0.123, 0.123E~2) = ~0.124230005 +/ (~0.123, 0.123E~2) = ~0.1E3 +nextAfter (~0.123, 0.123E~2) = ~0.122999996 +rem (~0.123, 0.123E~2) = 0.0 +* (~0.123, 0.11754944E~37) = ~0.1445858E~38 ++ (~0.123, 0.11754944E~37) = ~0.123 +- (~0.123, 0.11754944E~37) = ~0.123 +/ (~0.123, 0.11754944E~37) = ~0.10463683E38 +nextAfter (~0.123, 0.11754944E~37) = ~0.122999996 +rem (~0.123, 0.11754944E~37) = 0.0 +* (~0.123, 0.5877472E~38) = ~0.722928E~39 ++ (~0.123, 0.5877472E~38) = ~0.123 +- (~0.123, 0.5877472E~38) = ~0.123 +/ (~0.123, 0.5877472E~38) = ~0.20927366E38 +nextAfter (~0.123, 0.5877472E~38) = ~0.122999996 +rem (~0.123, 0.5877472E~38) = 0.0 +* (~0.123, 0.1E~44) = ~0.0 ++ (~0.123, 0.1E~44) = ~0.123 +- (~0.123, 0.1E~44) = ~0.123 +/ (~0.123, 0.1E~44) = ~inf +nextAfter (~0.123, 0.1E~44) = ~0.122999996 +rem (~0.123, 0.1E~44) = inf +* (~0.123, 0.0) = ~0.0 ++ (~0.123, 0.0) = ~0.123 +- (~0.123, 0.0) = ~0.123 +/ (~0.123, 0.0) = ~inf +nextAfter (~0.123, 0.0) = ~0.122999996 +rem (~0.123, 0.0) = nan +* (~0.123, ~0.34028235E39) = 0.4185473E38 ++ (~0.123, ~0.34028235E39) = ~0.34028235E39 +- (~0.123, ~0.34028235E39) = 0.34028235E39 +/ (~0.123, ~0.34028235E39) = 0.361465E~39 +nextAfter (~0.123, ~0.34028235E39) = ~0.12300001 +rem (~0.123, ~0.34028235E39) = ~0.123 +* (~0.123, ~0.17014117E39) = 0.20927365E38 ++ (~0.123, ~0.17014117E39) = ~0.17014117E39 +- (~0.123, ~0.17014117E39) = 0.17014117E39 +/ (~0.123, ~0.17014117E39) = 0.722928E~39 +nextAfter (~0.123, ~0.17014117E39) = ~0.12300001 +rem (~0.123, ~0.17014117E39) = ~0.123 +* (~0.123, ~0.123E4) = 0.15129001E3 ++ (~0.123, ~0.123E4) = ~0.1230123E4 +- (~0.123, ~0.123E4) = 0.1229877E4 +/ (~0.123, ~0.123E4) = 0.100000005E~3 +nextAfter (~0.123, ~0.123E4) = ~0.12300001 +rem (~0.123, ~0.123E4) = ~0.123 +* (~0.123, ~0.123E2) = 0.15129001E1 ++ (~0.123, ~0.123E2) = ~0.12423E2 +- (~0.123, ~0.123E2) = 0.12177E2 +/ (~0.123, ~0.123E2) = 0.1E~1 +nextAfter (~0.123, ~0.123E2) = ~0.12300001 +rem (~0.123, ~0.123E2) = ~0.123 +* (~0.123, ~0.31415927E1) = 0.38641593 ++ (~0.123, ~0.31415927E1) = ~0.32645926E1 +- (~0.123, ~0.31415927E1) = 0.30185928E1 +/ (~0.123, ~0.31415927E1) = 0.39152116E~1 +nextAfter (~0.123, ~0.31415927E1) = ~0.12300001 +rem (~0.123, ~0.31415927E1) = ~0.123 +* (~0.123, ~0.27182817E1) = 0.33434868 ++ (~0.123, ~0.27182817E1) = ~0.28412817E1 +- (~0.123, ~0.27182817E1) = 0.25952818E1 +/ (~0.123, ~0.27182817E1) = 0.45249175E~1 +nextAfter (~0.123, ~0.27182817E1) = ~0.12300001 +rem (~0.123, ~0.27182817E1) = ~0.123 +* (~0.123, ~0.123E1) = 0.15129 ++ (~0.123, ~0.123E1) = ~0.1353E1 +- (~0.123, ~0.123E1) = 0.1107E1 +/ (~0.123, ~0.123E1) = 0.1 +nextAfter (~0.123, ~0.123E1) = ~0.12300001 +rem (~0.123, ~0.123E1) = ~0.123 +* (~0.123, ~0.123) = 0.15129001E~1 ++ (~0.123, ~0.123) = ~0.246 +- (~0.123, ~0.123) = 0.0 +/ (~0.123, ~0.123) = 0.1E1 +nextAfter (~0.123, ~0.123) = ~0.123 +rem (~0.123, ~0.123) = 0.0 +* (~0.123, ~0.123E~2) = 0.15129E~3 ++ (~0.123, ~0.123E~2) = ~0.124230005 +- (~0.123, ~0.123E~2) = ~0.12177 +/ (~0.123, ~0.123E~2) = 0.1E3 +nextAfter (~0.123, ~0.123E~2) = ~0.122999996 +rem (~0.123, ~0.123E~2) = 0.0 +* (~0.123, ~0.11754944E~37) = 0.1445858E~38 ++ (~0.123, ~0.11754944E~37) = ~0.123 +- (~0.123, ~0.11754944E~37) = ~0.123 +/ (~0.123, ~0.11754944E~37) = 0.10463683E38 +nextAfter (~0.123, ~0.11754944E~37) = ~0.122999996 +rem (~0.123, ~0.11754944E~37) = 0.0 +* (~0.123, ~0.5877472E~38) = 0.722928E~39 ++ (~0.123, ~0.5877472E~38) = ~0.123 +- (~0.123, ~0.5877472E~38) = ~0.123 +/ (~0.123, ~0.5877472E~38) = 0.20927366E38 +nextAfter (~0.123, ~0.5877472E~38) = ~0.122999996 +rem (~0.123, ~0.5877472E~38) = 0.0 +* (~0.123, ~0.1E~44) = 0.0 ++ (~0.123, ~0.1E~44) = ~0.123 +- (~0.123, ~0.1E~44) = ~0.123 +/ (~0.123, ~0.1E~44) = inf +nextAfter (~0.123, ~0.1E~44) = ~0.122999996 +rem (~0.123, ~0.1E~44) = inf +* (~0.123, ~0.0) = 0.0 ++ (~0.123, ~0.0) = ~0.123 +- (~0.123, ~0.0) = ~0.123 +/ (~0.123, ~0.0) = inf +nextAfter (~0.123, ~0.0) = ~0.122999996 +rem (~0.123, ~0.0) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.122999996 +rem (~0.123, inf) = ~0.123 +* (~0.123, ~inf) = inf ++ (~0.123, ~inf) = ~inf +- (~0.123, ~inf) = inf +/ (~0.123, ~inf) = 0.0 +nextAfter (~0.123, ~inf) = ~0.12300001 +rem (~0.123, ~inf) = ~0.123 +* (~0.123, nan) = nan ++ (~0.123, nan) = nan +- (~0.123, nan) = nan +/ (~0.123, nan) = nan +nextAfter (~0.123, nan) = nan +rem (~0.123, nan) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.122999996 +rem (~0.123, inf) = ~0.123 +* (~0.123E~2, 0.34028235E39) = ~0.4185473E36 ++ (~0.123E~2, 0.34028235E39) = 0.34028235E39 +- (~0.123E~2, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E~2, 0.34028235E39) = ~0.3614E~41 +nextAfter (~0.123E~2, 0.34028235E39) = ~0.12299999E~2 +rem (~0.123E~2, 0.34028235E39) = ~0.123E~2 +* (~0.123E~2, 0.17014117E39) = ~0.20927364E36 ++ (~0.123E~2, 0.17014117E39) = 0.17014117E39 +- (~0.123E~2, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E~2, 0.17014117E39) = ~0.7229E~41 +nextAfter (~0.123E~2, 0.17014117E39) = ~0.12299999E~2 +rem (~0.123E~2, 0.17014117E39) = ~0.123E~2 +* (~0.123E~2, 0.123E4) = ~0.15129001E1 ++ (~0.123E~2, 0.123E4) = 0.12299988E4 +- (~0.123E~2, 0.123E4) = ~0.12300012E4 +/ (~0.123E~2, 0.123E4) = ~0.1E~5 +nextAfter (~0.123E~2, 0.123E4) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E4) = ~0.123E~2 +* (~0.123E~2, 0.123E2) = ~0.15129001E~1 ++ (~0.123E~2, 0.123E2) = 0.1229877E2 +- (~0.123E~2, 0.123E2) = ~0.1230123E2 +/ (~0.123E~2, 0.123E2) = ~0.100000005E~3 +nextAfter (~0.123E~2, 0.123E2) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E2) = ~0.123E~2 +* (~0.123E~2, 0.31415927E1) = ~0.38641593E~2 ++ (~0.123E~2, 0.31415927E1) = 0.31403627E1 +- (~0.123E~2, 0.31415927E1) = ~0.31428227E1 +/ (~0.123E~2, 0.31415927E1) = ~0.39152117E~3 +nextAfter (~0.123E~2, 0.31415927E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.31415927E1) = ~0.123E~2 +* (~0.123E~2, 0.27182817E1) = ~0.33434867E~2 ++ (~0.123E~2, 0.27182817E1) = 0.27170517E1 +- (~0.123E~2, 0.27182817E1) = ~0.27195117E1 +/ (~0.123E~2, 0.27182817E1) = ~0.45249175E~3 +nextAfter (~0.123E~2, 0.27182817E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.27182817E1) = ~0.123E~2 +* (~0.123E~2, 0.123E1) = ~0.15129001E~2 ++ (~0.123E~2, 0.123E1) = 0.122877E1 +- (~0.123E~2, 0.123E1) = ~0.123123E1 +/ (~0.123E~2, 0.123E1) = ~0.1E~2 +nextAfter (~0.123E~2, 0.123E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E1) = ~0.123E~2 +* (~0.123E~2, 0.123) = ~0.15129E~3 ++ (~0.123E~2, 0.123) = 0.12177 +- (~0.123E~2, 0.123) = ~0.124230005 +/ (~0.123E~2, 0.123) = ~0.1E~1 +nextAfter (~0.123E~2, 0.123) = ~0.12299999E~2 +rem (~0.123E~2, 0.123) = ~0.123E~2 +* (~0.123E~2, 0.123E~2) = ~0.15129001E~5 ++ (~0.123E~2, 0.123E~2) = 0.0 +- (~0.123E~2, 0.123E~2) = ~0.246E~2 +/ (~0.123E~2, 0.123E~2) = ~0.1E1 +nextAfter (~0.123E~2, 0.123E~2) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E~2) = 0.0 +* (~0.123E~2, 0.11754944E~37) = ~0.14459E~40 ++ (~0.123E~2, 0.11754944E~37) = ~0.123E~2 +- (~0.123E~2, 0.11754944E~37) = ~0.123E~2 +/ (~0.123E~2, 0.11754944E~37) = ~0.10463683E36 +nextAfter (~0.123E~2, 0.11754944E~37) = ~0.12299999E~2 +rem (~0.123E~2, 0.11754944E~37) = 0.0 +* (~0.123E~2, 0.5877472E~38) = ~0.7229E~41 ++ (~0.123E~2, 0.5877472E~38) = ~0.123E~2 +- (~0.123E~2, 0.5877472E~38) = ~0.123E~2 +/ (~0.123E~2, 0.5877472E~38) = ~0.20927366E36 +nextAfter (~0.123E~2, 0.5877472E~38) = ~0.12299999E~2 +rem (~0.123E~2, 0.5877472E~38) = 0.0 +* (~0.123E~2, 0.1E~44) = ~0.0 ++ (~0.123E~2, 0.1E~44) = ~0.123E~2 +- (~0.123E~2, 0.1E~44) = ~0.123E~2 +/ (~0.123E~2, 0.1E~44) = ~inf +nextAfter (~0.123E~2, 0.1E~44) = ~0.12299999E~2 +rem (~0.123E~2, 0.1E~44) = inf +* (~0.123E~2, 0.0) = ~0.0 ++ (~0.123E~2, 0.0) = ~0.123E~2 +- (~0.123E~2, 0.0) = ~0.123E~2 +/ (~0.123E~2, 0.0) = ~inf +nextAfter (~0.123E~2, 0.0) = ~0.12299999E~2 +rem (~0.123E~2, 0.0) = nan +* (~0.123E~2, ~0.34028235E39) = 0.4185473E36 ++ (~0.123E~2, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E~2, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E~2, ~0.34028235E39) = 0.3614E~41 +nextAfter (~0.123E~2, ~0.34028235E39) = ~0.12300002E~2 +rem (~0.123E~2, ~0.34028235E39) = ~0.123E~2 +* (~0.123E~2, ~0.17014117E39) = 0.20927364E36 ++ (~0.123E~2, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E~2, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E~2, ~0.17014117E39) = 0.7229E~41 +nextAfter (~0.123E~2, ~0.17014117E39) = ~0.12300002E~2 +rem (~0.123E~2, ~0.17014117E39) = ~0.123E~2 +* (~0.123E~2, ~0.123E4) = 0.15129001E1 ++ (~0.123E~2, ~0.123E4) = ~0.12300012E4 +- (~0.123E~2, ~0.123E4) = 0.12299988E4 +/ (~0.123E~2, ~0.123E4) = 0.1E~5 +nextAfter (~0.123E~2, ~0.123E4) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E4) = ~0.123E~2 +* (~0.123E~2, ~0.123E2) = 0.15129001E~1 ++ (~0.123E~2, ~0.123E2) = ~0.1230123E2 +- (~0.123E~2, ~0.123E2) = 0.1229877E2 +/ (~0.123E~2, ~0.123E2) = 0.100000005E~3 +nextAfter (~0.123E~2, ~0.123E2) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E2) = ~0.123E~2 +* (~0.123E~2, ~0.31415927E1) = 0.38641593E~2 ++ (~0.123E~2, ~0.31415927E1) = ~0.31428227E1 +- (~0.123E~2, ~0.31415927E1) = 0.31403627E1 +/ (~0.123E~2, ~0.31415927E1) = 0.39152117E~3 +nextAfter (~0.123E~2, ~0.31415927E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.31415927E1) = ~0.123E~2 +* (~0.123E~2, ~0.27182817E1) = 0.33434867E~2 ++ (~0.123E~2, ~0.27182817E1) = ~0.27195117E1 +- (~0.123E~2, ~0.27182817E1) = 0.27170517E1 +/ (~0.123E~2, ~0.27182817E1) = 0.45249175E~3 +nextAfter (~0.123E~2, ~0.27182817E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.27182817E1) = ~0.123E~2 +* (~0.123E~2, ~0.123E1) = 0.15129001E~2 ++ (~0.123E~2, ~0.123E1) = ~0.123123E1 +- (~0.123E~2, ~0.123E1) = 0.122877E1 +/ (~0.123E~2, ~0.123E1) = 0.1E~2 +nextAfter (~0.123E~2, ~0.123E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E1) = ~0.123E~2 +* (~0.123E~2, ~0.123) = 0.15129E~3 ++ (~0.123E~2, ~0.123) = ~0.124230005 +- (~0.123E~2, ~0.123) = 0.12177 +/ (~0.123E~2, ~0.123) = 0.1E~1 +nextAfter (~0.123E~2, ~0.123) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123) = ~0.123E~2 +* (~0.123E~2, ~0.123E~2) = 0.15129001E~5 ++ (~0.123E~2, ~0.123E~2) = ~0.246E~2 +- (~0.123E~2, ~0.123E~2) = 0.0 +/ (~0.123E~2, ~0.123E~2) = 0.1E1 +nextAfter (~0.123E~2, ~0.123E~2) = ~0.123E~2 +rem (~0.123E~2, ~0.123E~2) = 0.0 +* (~0.123E~2, ~0.11754944E~37) = 0.14459E~40 ++ (~0.123E~2, ~0.11754944E~37) = ~0.123E~2 +- (~0.123E~2, ~0.11754944E~37) = ~0.123E~2 +/ (~0.123E~2, ~0.11754944E~37) = 0.10463683E36 +nextAfter (~0.123E~2, ~0.11754944E~37) = ~0.12299999E~2 +rem (~0.123E~2, ~0.11754944E~37) = 0.0 +* (~0.123E~2, ~0.5877472E~38) = 0.7229E~41 ++ (~0.123E~2, ~0.5877472E~38) = ~0.123E~2 +- (~0.123E~2, ~0.5877472E~38) = ~0.123E~2 +/ (~0.123E~2, ~0.5877472E~38) = 0.20927366E36 +nextAfter (~0.123E~2, ~0.5877472E~38) = ~0.12299999E~2 +rem (~0.123E~2, ~0.5877472E~38) = 0.0 +* (~0.123E~2, ~0.1E~44) = 0.0 ++ (~0.123E~2, ~0.1E~44) = ~0.123E~2 +- (~0.123E~2, ~0.1E~44) = ~0.123E~2 +/ (~0.123E~2, ~0.1E~44) = inf +nextAfter (~0.123E~2, ~0.1E~44) = ~0.12299999E~2 +rem (~0.123E~2, ~0.1E~44) = inf +* (~0.123E~2, ~0.0) = 0.0 ++ (~0.123E~2, ~0.0) = ~0.123E~2 +- (~0.123E~2, ~0.0) = ~0.123E~2 +/ (~0.123E~2, ~0.0) = inf +nextAfter (~0.123E~2, ~0.0) = ~0.12299999E~2 +rem (~0.123E~2, ~0.0) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.123E~2, ~inf) = inf ++ (~0.123E~2, ~inf) = ~inf +- (~0.123E~2, ~inf) = inf +/ (~0.123E~2, ~inf) = 0.0 +nextAfter (~0.123E~2, ~inf) = ~0.12300002E~2 +rem (~0.123E~2, ~inf) = ~0.123E~2 +* (~0.123E~2, nan) = nan ++ (~0.123E~2, nan) = nan +- (~0.123E~2, nan) = nan +/ (~0.123E~2, nan) = nan +nextAfter (~0.123E~2, nan) = nan +rem (~0.123E~2, nan) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.11754944E~37, 0.34028235E39) = ~0.39999998E1 ++ (~0.11754944E~37, 0.34028235E39) = 0.34028235E39 +- (~0.11754944E~37, 0.34028235E39) = ~0.34028235E39 +/ (~0.11754944E~37, 0.34028235E39) = ~0.0 +nextAfter (~0.11754944E~37, 0.34028235E39) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.34028235E39) = ~0.11754944E~37 +* (~0.11754944E~37, 0.17014117E39) = ~0.19999999E1 ++ (~0.11754944E~37, 0.17014117E39) = 0.17014117E39 +- (~0.11754944E~37, 0.17014117E39) = ~0.17014117E39 +/ (~0.11754944E~37, 0.17014117E39) = ~0.0 +nextAfter (~0.11754944E~37, 0.17014117E39) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.17014117E39) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E4) = ~0.1445858E~34 ++ (~0.11754944E~37, 0.123E4) = 0.123E4 +- (~0.11754944E~37, 0.123E4) = ~0.123E4 +/ (~0.11754944E~37, 0.123E4) = ~0.9557E~41 +nextAfter (~0.11754944E~37, 0.123E4) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E4) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E2) = ~0.14458581E~36 ++ (~0.11754944E~37, 0.123E2) = 0.123E2 +- (~0.11754944E~37, 0.123E2) = ~0.123E2 +/ (~0.11754944E~37, 0.123E2) = ~0.955687E~39 +nextAfter (~0.11754944E~37, 0.123E2) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E2) = ~0.11754944E~37 +* (~0.11754944E~37, 0.31415927E1) = ~0.36929245E~37 ++ (~0.11754944E~37, 0.31415927E1) = 0.31415927E1 +- (~0.11754944E~37, 0.31415927E1) = ~0.31415927E1 +/ (~0.11754944E~37, 0.31415927E1) = ~0.3741715E~38 +nextAfter (~0.11754944E~37, 0.31415927E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.31415927E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.27182817E1) = ~0.31953248E~37 ++ (~0.11754944E~37, 0.27182817E1) = 0.27182817E1 +- (~0.11754944E~37, 0.27182817E1) = ~0.27182817E1 +/ (~0.11754944E~37, 0.27182817E1) = ~0.4324403E~38 +nextAfter (~0.11754944E~37, 0.27182817E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.27182817E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E1) = ~0.14458581E~37 ++ (~0.11754944E~37, 0.123E1) = 0.123E1 +- (~0.11754944E~37, 0.123E1) = ~0.123E1 +/ (~0.11754944E~37, 0.123E1) = ~0.9556864E~38 +nextAfter (~0.11754944E~37, 0.123E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123) = ~0.1445858E~38 ++ (~0.11754944E~37, 0.123) = 0.123 +- (~0.11754944E~37, 0.123) = ~0.123 +/ (~0.11754944E~37, 0.123) = ~0.9556864E~37 +nextAfter (~0.11754944E~37, 0.123) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E~2) = ~0.14459E~40 ++ (~0.11754944E~37, 0.123E~2) = 0.123E~2 +- (~0.11754944E~37, 0.123E~2) = ~0.123E~2 +/ (~0.11754944E~37, 0.123E~2) = ~0.95568645E~35 +nextAfter (~0.11754944E~37, 0.123E~2) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E~2) = ~0.11754944E~37 +* (~0.11754944E~37, 0.11754944E~37) = ~0.0 ++ (~0.11754944E~37, 0.11754944E~37) = 0.0 +- (~0.11754944E~37, 0.11754944E~37) = ~0.23509887E~37 +/ (~0.11754944E~37, 0.11754944E~37) = ~0.1E1 +nextAfter (~0.11754944E~37, 0.11754944E~37) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.11754944E~37) = 0.0 +* (~0.11754944E~37, 0.5877472E~38) = ~0.0 ++ (~0.11754944E~37, 0.5877472E~38) = ~0.5877472E~38 +- (~0.11754944E~37, 0.5877472E~38) = ~0.17632415E~37 +/ (~0.11754944E~37, 0.5877472E~38) = ~0.2E1 +nextAfter (~0.11754944E~37, 0.5877472E~38) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.5877472E~38) = 0.0 +* (~0.11754944E~37, 0.1E~44) = ~0.0 ++ (~0.11754944E~37, 0.1E~44) = ~0.11754942E~37 +- (~0.11754944E~37, 0.1E~44) = ~0.11754945E~37 +/ (~0.11754944E~37, 0.1E~44) = ~0.8388608E7 +nextAfter (~0.11754944E~37, 0.1E~44) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.1E~44) = 0.0 +* (~0.11754944E~37, 0.0) = ~0.0 ++ (~0.11754944E~37, 0.0) = ~0.11754944E~37 +- (~0.11754944E~37, 0.0) = ~0.11754944E~37 +/ (~0.11754944E~37, 0.0) = ~inf +nextAfter (~0.11754944E~37, 0.0) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.0) = nan +* (~0.11754944E~37, ~0.34028235E39) = 0.39999998E1 ++ (~0.11754944E~37, ~0.34028235E39) = ~0.34028235E39 +- (~0.11754944E~37, ~0.34028235E39) = 0.34028235E39 +/ (~0.11754944E~37, ~0.34028235E39) = 0.0 +nextAfter (~0.11754944E~37, ~0.34028235E39) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.34028235E39) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.17014117E39) = 0.19999999E1 ++ (~0.11754944E~37, ~0.17014117E39) = ~0.17014117E39 +- (~0.11754944E~37, ~0.17014117E39) = 0.17014117E39 +/ (~0.11754944E~37, ~0.17014117E39) = 0.0 +nextAfter (~0.11754944E~37, ~0.17014117E39) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.17014117E39) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E4) = 0.1445858E~34 ++ (~0.11754944E~37, ~0.123E4) = ~0.123E4 +- (~0.11754944E~37, ~0.123E4) = 0.123E4 +/ (~0.11754944E~37, ~0.123E4) = 0.9557E~41 +nextAfter (~0.11754944E~37, ~0.123E4) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E4) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E2) = 0.14458581E~36 ++ (~0.11754944E~37, ~0.123E2) = ~0.123E2 +- (~0.11754944E~37, ~0.123E2) = 0.123E2 +/ (~0.11754944E~37, ~0.123E2) = 0.955687E~39 +nextAfter (~0.11754944E~37, ~0.123E2) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E2) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.31415927E1) = 0.36929245E~37 ++ (~0.11754944E~37, ~0.31415927E1) = ~0.31415927E1 +- (~0.11754944E~37, ~0.31415927E1) = 0.31415927E1 +/ (~0.11754944E~37, ~0.31415927E1) = 0.3741715E~38 +nextAfter (~0.11754944E~37, ~0.31415927E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.31415927E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.27182817E1) = 0.31953248E~37 ++ (~0.11754944E~37, ~0.27182817E1) = ~0.27182817E1 +- (~0.11754944E~37, ~0.27182817E1) = 0.27182817E1 +/ (~0.11754944E~37, ~0.27182817E1) = 0.4324403E~38 +nextAfter (~0.11754944E~37, ~0.27182817E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.27182817E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E1) = 0.14458581E~37 ++ (~0.11754944E~37, ~0.123E1) = ~0.123E1 +- (~0.11754944E~37, ~0.123E1) = 0.123E1 +/ (~0.11754944E~37, ~0.123E1) = 0.9556864E~38 +nextAfter (~0.11754944E~37, ~0.123E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123) = 0.1445858E~38 ++ (~0.11754944E~37, ~0.123) = ~0.123 +- (~0.11754944E~37, ~0.123) = 0.123 +/ (~0.11754944E~37, ~0.123) = 0.9556864E~37 +nextAfter (~0.11754944E~37, ~0.123) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E~2) = 0.14459E~40 ++ (~0.11754944E~37, ~0.123E~2) = ~0.123E~2 +- (~0.11754944E~37, ~0.123E~2) = 0.123E~2 +/ (~0.11754944E~37, ~0.123E~2) = 0.95568645E~35 +nextAfter (~0.11754944E~37, ~0.123E~2) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E~2) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.11754944E~37) = 0.0 ++ (~0.11754944E~37, ~0.11754944E~37) = ~0.23509887E~37 +- (~0.11754944E~37, ~0.11754944E~37) = 0.0 +/ (~0.11754944E~37, ~0.11754944E~37) = 0.1E1 +nextAfter (~0.11754944E~37, ~0.11754944E~37) = ~0.11754944E~37 +rem (~0.11754944E~37, ~0.11754944E~37) = 0.0 +* (~0.11754944E~37, ~0.5877472E~38) = 0.0 ++ (~0.11754944E~37, ~0.5877472E~38) = ~0.17632415E~37 +- (~0.11754944E~37, ~0.5877472E~38) = ~0.5877472E~38 +/ (~0.11754944E~37, ~0.5877472E~38) = 0.2E1 +nextAfter (~0.11754944E~37, ~0.5877472E~38) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.5877472E~38) = 0.0 +* (~0.11754944E~37, ~0.1E~44) = 0.0 ++ (~0.11754944E~37, ~0.1E~44) = ~0.11754945E~37 +- (~0.11754944E~37, ~0.1E~44) = ~0.11754942E~37 +/ (~0.11754944E~37, ~0.1E~44) = 0.8388608E7 +nextAfter (~0.11754944E~37, ~0.1E~44) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.1E~44) = 0.0 +* (~0.11754944E~37, ~0.0) = 0.0 ++ (~0.11754944E~37, ~0.0) = ~0.11754944E~37 +- (~0.11754944E~37, ~0.0) = ~0.11754944E~37 +/ (~0.11754944E~37, ~0.0) = inf +nextAfter (~0.11754944E~37, ~0.0) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.0) = nan +* (~0.11754944E~37, inf) = ~inf ++ (~0.11754944E~37, inf) = inf +- (~0.11754944E~37, inf) = ~inf +/ (~0.11754944E~37, inf) = ~0.0 +nextAfter (~0.11754944E~37, inf) = ~0.11754942E~37 +rem (~0.11754944E~37, inf) = ~0.11754944E~37 +* (~0.11754944E~37, ~inf) = inf ++ (~0.11754944E~37, ~inf) = ~inf +- (~0.11754944E~37, ~inf) = inf +/ (~0.11754944E~37, ~inf) = 0.0 +nextAfter (~0.11754944E~37, ~inf) = ~0.11754945E~37 +rem (~0.11754944E~37, ~inf) = ~0.11754944E~37 +* (~0.11754944E~37, nan) = nan ++ (~0.11754944E~37, nan) = nan +- (~0.11754944E~37, nan) = nan +/ (~0.11754944E~37, nan) = nan +nextAfter (~0.11754944E~37, nan) = nan +rem (~0.11754944E~37, nan) = nan +* (~0.11754944E~37, inf) = ~inf ++ (~0.11754944E~37, inf) = inf +- (~0.11754944E~37, inf) = ~inf +/ (~0.11754944E~37, inf) = ~0.0 +nextAfter (~0.11754944E~37, inf) = ~0.11754942E~37 +rem (~0.11754944E~37, inf) = ~0.11754944E~37 +* (~0.5877472E~38, 0.34028235E39) = ~0.19999999E1 ++ (~0.5877472E~38, 0.34028235E39) = 0.34028235E39 +- (~0.5877472E~38, 0.34028235E39) = ~0.34028235E39 +/ (~0.5877472E~38, 0.34028235E39) = ~0.0 +nextAfter (~0.5877472E~38, 0.34028235E39) = ~0.587747E~38 +rem (~0.5877472E~38, 0.34028235E39) = ~0.5877472E~38 +* (~0.5877472E~38, 0.17014117E39) = ~0.99999994 ++ (~0.5877472E~38, 0.17014117E39) = 0.17014117E39 +- (~0.5877472E~38, 0.17014117E39) = ~0.17014117E39 +/ (~0.5877472E~38, 0.17014117E39) = ~0.0 +nextAfter (~0.5877472E~38, 0.17014117E39) = ~0.587747E~38 +rem (~0.5877472E~38, 0.17014117E39) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E4) = ~0.722929E~35 ++ (~0.5877472E~38, 0.123E4) = 0.123E4 +- (~0.5877472E~38, 0.123E4) = ~0.123E4 +/ (~0.5877472E~38, 0.123E4) = ~0.4778E~41 +nextAfter (~0.5877472E~38, 0.123E4) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E4) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E2) = ~0.72292904E~37 ++ (~0.5877472E~38, 0.123E2) = 0.123E2 +- (~0.5877472E~38, 0.123E2) = ~0.123E2 +/ (~0.5877472E~38, 0.123E2) = ~0.477843E~39 +nextAfter (~0.5877472E~38, 0.123E2) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E2) = ~0.5877472E~38 +* (~0.5877472E~38, 0.31415927E1) = ~0.18464623E~37 ++ (~0.5877472E~38, 0.31415927E1) = 0.31415927E1 +- (~0.5877472E~38, 0.31415927E1) = ~0.31415927E1 +/ (~0.5877472E~38, 0.31415927E1) = ~0.1870857E~38 +nextAfter (~0.5877472E~38, 0.31415927E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.31415927E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.27182817E1) = ~0.15976624E~37 ++ (~0.5877472E~38, 0.27182817E1) = 0.27182817E1 +- (~0.5877472E~38, 0.27182817E1) = ~0.27182817E1 +/ (~0.5877472E~38, 0.27182817E1) = ~0.2162201E~38 +nextAfter (~0.5877472E~38, 0.27182817E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.27182817E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E1) = ~0.722929E~38 ++ (~0.5877472E~38, 0.123E1) = 0.123E1 +- (~0.5877472E~38, 0.123E1) = ~0.123E1 +/ (~0.5877472E~38, 0.123E1) = ~0.4778432E~38 +nextAfter (~0.5877472E~38, 0.123E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123) = ~0.722928E~39 ++ (~0.5877472E~38, 0.123) = 0.123 +- (~0.5877472E~38, 0.123) = ~0.123 +/ (~0.5877472E~38, 0.123) = ~0.4778432E~37 +nextAfter (~0.5877472E~38, 0.123) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E~2) = ~0.7229E~41 ++ (~0.5877472E~38, 0.123E~2) = 0.123E~2 +- (~0.5877472E~38, 0.123E~2) = ~0.123E~2 +/ (~0.5877472E~38, 0.123E~2) = ~0.47784322E~35 +nextAfter (~0.5877472E~38, 0.123E~2) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E~2) = ~0.5877472E~38 +* (~0.5877472E~38, 0.11754944E~37) = ~0.0 ++ (~0.5877472E~38, 0.11754944E~37) = 0.5877472E~38 +- (~0.5877472E~38, 0.11754944E~37) = ~0.17632415E~37 +/ (~0.5877472E~38, 0.11754944E~37) = ~0.5 +nextAfter (~0.5877472E~38, 0.11754944E~37) = ~0.587747E~38 +rem (~0.5877472E~38, 0.11754944E~37) = ~0.5877472E~38 +* (~0.5877472E~38, 0.5877472E~38) = ~0.0 ++ (~0.5877472E~38, 0.5877472E~38) = 0.0 +- (~0.5877472E~38, 0.5877472E~38) = ~0.11754944E~37 +/ (~0.5877472E~38, 0.5877472E~38) = ~0.1E1 +nextAfter (~0.5877472E~38, 0.5877472E~38) = ~0.587747E~38 +rem (~0.5877472E~38, 0.5877472E~38) = 0.0 +* (~0.5877472E~38, 0.1E~44) = ~0.0 ++ (~0.5877472E~38, 0.1E~44) = ~0.587747E~38 +- (~0.5877472E~38, 0.1E~44) = ~0.5877473E~38 +/ (~0.5877472E~38, 0.1E~44) = ~0.4194304E7 +nextAfter (~0.5877472E~38, 0.1E~44) = ~0.587747E~38 +rem (~0.5877472E~38, 0.1E~44) = 0.0 +* (~0.5877472E~38, 0.0) = ~0.0 ++ (~0.5877472E~38, 0.0) = ~0.5877472E~38 +- (~0.5877472E~38, 0.0) = ~0.5877472E~38 +/ (~0.5877472E~38, 0.0) = ~inf +nextAfter (~0.5877472E~38, 0.0) = ~0.587747E~38 +rem (~0.5877472E~38, 0.0) = nan +* (~0.5877472E~38, ~0.34028235E39) = 0.19999999E1 ++ (~0.5877472E~38, ~0.34028235E39) = ~0.34028235E39 +- (~0.5877472E~38, ~0.34028235E39) = 0.34028235E39 +/ (~0.5877472E~38, ~0.34028235E39) = 0.0 +nextAfter (~0.5877472E~38, ~0.34028235E39) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.34028235E39) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.17014117E39) = 0.99999994 ++ (~0.5877472E~38, ~0.17014117E39) = ~0.17014117E39 +- (~0.5877472E~38, ~0.17014117E39) = 0.17014117E39 +/ (~0.5877472E~38, ~0.17014117E39) = 0.0 +nextAfter (~0.5877472E~38, ~0.17014117E39) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.17014117E39) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E4) = 0.722929E~35 ++ (~0.5877472E~38, ~0.123E4) = ~0.123E4 +- (~0.5877472E~38, ~0.123E4) = 0.123E4 +/ (~0.5877472E~38, ~0.123E4) = 0.4778E~41 +nextAfter (~0.5877472E~38, ~0.123E4) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E4) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E2) = 0.72292904E~37 ++ (~0.5877472E~38, ~0.123E2) = ~0.123E2 +- (~0.5877472E~38, ~0.123E2) = 0.123E2 +/ (~0.5877472E~38, ~0.123E2) = 0.477843E~39 +nextAfter (~0.5877472E~38, ~0.123E2) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E2) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.31415927E1) = 0.18464623E~37 ++ (~0.5877472E~38, ~0.31415927E1) = ~0.31415927E1 +- (~0.5877472E~38, ~0.31415927E1) = 0.31415927E1 +/ (~0.5877472E~38, ~0.31415927E1) = 0.1870857E~38 +nextAfter (~0.5877472E~38, ~0.31415927E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.31415927E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.27182817E1) = 0.15976624E~37 ++ (~0.5877472E~38, ~0.27182817E1) = ~0.27182817E1 +- (~0.5877472E~38, ~0.27182817E1) = 0.27182817E1 +/ (~0.5877472E~38, ~0.27182817E1) = 0.2162201E~38 +nextAfter (~0.5877472E~38, ~0.27182817E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.27182817E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E1) = 0.722929E~38 ++ (~0.5877472E~38, ~0.123E1) = ~0.123E1 +- (~0.5877472E~38, ~0.123E1) = 0.123E1 +/ (~0.5877472E~38, ~0.123E1) = 0.4778432E~38 +nextAfter (~0.5877472E~38, ~0.123E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123) = 0.722928E~39 ++ (~0.5877472E~38, ~0.123) = ~0.123 +- (~0.5877472E~38, ~0.123) = 0.123 +/ (~0.5877472E~38, ~0.123) = 0.4778432E~37 +nextAfter (~0.5877472E~38, ~0.123) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E~2) = 0.7229E~41 ++ (~0.5877472E~38, ~0.123E~2) = ~0.123E~2 +- (~0.5877472E~38, ~0.123E~2) = 0.123E~2 +/ (~0.5877472E~38, ~0.123E~2) = 0.47784322E~35 +nextAfter (~0.5877472E~38, ~0.123E~2) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E~2) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.11754944E~37) = 0.0 ++ (~0.5877472E~38, ~0.11754944E~37) = ~0.17632415E~37 +- (~0.5877472E~38, ~0.11754944E~37) = 0.5877472E~38 +/ (~0.5877472E~38, ~0.11754944E~37) = 0.5 +nextAfter (~0.5877472E~38, ~0.11754944E~37) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.11754944E~37) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.5877472E~38) = 0.0 ++ (~0.5877472E~38, ~0.5877472E~38) = ~0.11754944E~37 +- (~0.5877472E~38, ~0.5877472E~38) = 0.0 +/ (~0.5877472E~38, ~0.5877472E~38) = 0.1E1 +nextAfter (~0.5877472E~38, ~0.5877472E~38) = ~0.5877472E~38 +rem (~0.5877472E~38, ~0.5877472E~38) = 0.0 +* (~0.5877472E~38, ~0.1E~44) = 0.0 ++ (~0.5877472E~38, ~0.1E~44) = ~0.5877473E~38 +- (~0.5877472E~38, ~0.1E~44) = ~0.587747E~38 +/ (~0.5877472E~38, ~0.1E~44) = 0.4194304E7 +nextAfter (~0.5877472E~38, ~0.1E~44) = ~0.587747E~38 +rem (~0.5877472E~38, ~0.1E~44) = 0.0 +* (~0.5877472E~38, ~0.0) = 0.0 ++ (~0.5877472E~38, ~0.0) = ~0.5877472E~38 +- (~0.5877472E~38, ~0.0) = ~0.5877472E~38 +/ (~0.5877472E~38, ~0.0) = inf +nextAfter (~0.5877472E~38, ~0.0) = ~0.587747E~38 +rem (~0.5877472E~38, ~0.0) = nan +* (~0.5877472E~38, inf) = ~inf ++ (~0.5877472E~38, inf) = inf +- (~0.5877472E~38, inf) = ~inf +/ (~0.5877472E~38, inf) = ~0.0 +nextAfter (~0.5877472E~38, inf) = ~0.587747E~38 +rem (~0.5877472E~38, inf) = ~0.5877472E~38 +* (~0.5877472E~38, ~inf) = inf ++ (~0.5877472E~38, ~inf) = ~inf +- (~0.5877472E~38, ~inf) = inf +/ (~0.5877472E~38, ~inf) = 0.0 +nextAfter (~0.5877472E~38, ~inf) = ~0.5877473E~38 +rem (~0.5877472E~38, ~inf) = ~0.5877472E~38 +* (~0.5877472E~38, nan) = nan ++ (~0.5877472E~38, nan) = nan +- (~0.5877472E~38, nan) = nan +/ (~0.5877472E~38, nan) = nan +nextAfter (~0.5877472E~38, nan) = nan +rem (~0.5877472E~38, nan) = nan +* (~0.5877472E~38, inf) = ~inf ++ (~0.5877472E~38, inf) = inf +- (~0.5877472E~38, inf) = ~inf +/ (~0.5877472E~38, inf) = ~0.0 +nextAfter (~0.5877472E~38, inf) = ~0.587747E~38 +rem (~0.5877472E~38, inf) = ~0.5877472E~38 +* (~0.1E~44, 0.34028235E39) = ~0.47683713E~6 ++ (~0.1E~44, 0.34028235E39) = 0.34028235E39 +- (~0.1E~44, 0.34028235E39) = ~0.34028235E39 +/ (~0.1E~44, 0.34028235E39) = ~0.0 +nextAfter (~0.1E~44, 0.34028235E39) = ~0.0 +rem (~0.1E~44, 0.34028235E39) = ~0.1E~44 +* (~0.1E~44, 0.17014117E39) = ~0.23841856E~6 ++ (~0.1E~44, 0.17014117E39) = 0.17014117E39 +- (~0.1E~44, 0.17014117E39) = ~0.17014117E39 +/ (~0.1E~44, 0.17014117E39) = ~0.0 +nextAfter (~0.1E~44, 0.17014117E39) = ~0.0 +rem (~0.1E~44, 0.17014117E39) = ~0.1E~44 +* (~0.1E~44, 0.123E4) = ~0.1724E~41 ++ (~0.1E~44, 0.123E4) = 0.123E4 +- (~0.1E~44, 0.123E4) = ~0.123E4 +/ (~0.1E~44, 0.123E4) = ~0.0 +nextAfter (~0.1E~44, 0.123E4) = ~0.0 +rem (~0.1E~44, 0.123E4) = ~0.1E~44 +* (~0.1E~44, 0.123E2) = ~0.17E~43 ++ (~0.1E~44, 0.123E2) = 0.123E2 +- (~0.1E~44, 0.123E2) = ~0.123E2 +/ (~0.1E~44, 0.123E2) = ~0.0 +nextAfter (~0.1E~44, 0.123E2) = ~0.0 +rem (~0.1E~44, 0.123E2) = ~0.1E~44 +* (~0.1E~44, 0.31415927E1) = ~0.4E~44 ++ (~0.1E~44, 0.31415927E1) = 0.31415927E1 +- (~0.1E~44, 0.31415927E1) = ~0.31415927E1 +/ (~0.1E~44, 0.31415927E1) = ~0.0 +nextAfter (~0.1E~44, 0.31415927E1) = ~0.0 +rem (~0.1E~44, 0.31415927E1) = ~0.1E~44 +* (~0.1E~44, 0.27182817E1) = ~0.4E~44 ++ (~0.1E~44, 0.27182817E1) = 0.27182817E1 +- (~0.1E~44, 0.27182817E1) = ~0.27182817E1 +/ (~0.1E~44, 0.27182817E1) = ~0.0 +nextAfter (~0.1E~44, 0.27182817E1) = ~0.0 +rem (~0.1E~44, 0.27182817E1) = ~0.1E~44 +* (~0.1E~44, 0.123E1) = ~0.1E~44 ++ (~0.1E~44, 0.123E1) = 0.123E1 +- (~0.1E~44, 0.123E1) = ~0.123E1 +/ (~0.1E~44, 0.123E1) = ~0.1E~44 +nextAfter (~0.1E~44, 0.123E1) = ~0.0 +rem (~0.1E~44, 0.123E1) = ~0.1E~44 +* (~0.1E~44, 0.123) = ~0.0 ++ (~0.1E~44, 0.123) = 0.123 +- (~0.1E~44, 0.123) = ~0.123 +/ (~0.1E~44, 0.123) = ~0.11E~43 +nextAfter (~0.1E~44, 0.123) = ~0.0 +rem (~0.1E~44, 0.123) = ~0.1E~44 +* (~0.1E~44, 0.123E~2) = ~0.0 ++ (~0.1E~44, 0.123E~2) = 0.123E~2 +- (~0.1E~44, 0.123E~2) = ~0.123E~2 +/ (~0.1E~44, 0.123E~2) = ~0.1139E~41 +nextAfter (~0.1E~44, 0.123E~2) = ~0.0 +rem (~0.1E~44, 0.123E~2) = ~0.1E~44 +* (~0.1E~44, 0.11754944E~37) = ~0.0 ++ (~0.1E~44, 0.11754944E~37) = 0.11754942E~37 +- (~0.1E~44, 0.11754944E~37) = ~0.11754945E~37 +/ (~0.1E~44, 0.11754944E~37) = ~0.11920929E~6 +nextAfter (~0.1E~44, 0.11754944E~37) = ~0.0 +rem (~0.1E~44, 0.11754944E~37) = ~0.1E~44 +* (~0.1E~44, 0.5877472E~38) = ~0.0 ++ (~0.1E~44, 0.5877472E~38) = 0.587747E~38 +- (~0.1E~44, 0.5877472E~38) = ~0.5877473E~38 +/ (~0.1E~44, 0.5877472E~38) = ~0.23841858E~6 +nextAfter (~0.1E~44, 0.5877472E~38) = ~0.0 +rem (~0.1E~44, 0.5877472E~38) = ~0.1E~44 +* (~0.1E~44, 0.1E~44) = ~0.0 ++ (~0.1E~44, 0.1E~44) = 0.0 +- (~0.1E~44, 0.1E~44) = ~0.3E~44 +/ (~0.1E~44, 0.1E~44) = ~0.1E1 +nextAfter (~0.1E~44, 0.1E~44) = ~0.0 +rem (~0.1E~44, 0.1E~44) = 0.0 +* (~0.1E~44, 0.0) = ~0.0 ++ (~0.1E~44, 0.0) = ~0.1E~44 +- (~0.1E~44, 0.0) = ~0.1E~44 +/ (~0.1E~44, 0.0) = ~inf +nextAfter (~0.1E~44, 0.0) = ~0.0 +rem (~0.1E~44, 0.0) = nan +* (~0.1E~44, ~0.34028235E39) = 0.47683713E~6 ++ (~0.1E~44, ~0.34028235E39) = ~0.34028235E39 +- (~0.1E~44, ~0.34028235E39) = 0.34028235E39 +/ (~0.1E~44, ~0.34028235E39) = 0.0 +nextAfter (~0.1E~44, ~0.34028235E39) = ~0.3E~44 +rem (~0.1E~44, ~0.34028235E39) = ~0.1E~44 +* (~0.1E~44, ~0.17014117E39) = 0.23841856E~6 ++ (~0.1E~44, ~0.17014117E39) = ~0.17014117E39 +- (~0.1E~44, ~0.17014117E39) = 0.17014117E39 +/ (~0.1E~44, ~0.17014117E39) = 0.0 +nextAfter (~0.1E~44, ~0.17014117E39) = ~0.3E~44 +rem (~0.1E~44, ~0.17014117E39) = ~0.1E~44 +* (~0.1E~44, ~0.123E4) = 0.1724E~41 ++ (~0.1E~44, ~0.123E4) = ~0.123E4 +- (~0.1E~44, ~0.123E4) = 0.123E4 +/ (~0.1E~44, ~0.123E4) = 0.0 +nextAfter (~0.1E~44, ~0.123E4) = ~0.3E~44 +rem (~0.1E~44, ~0.123E4) = ~0.1E~44 +* (~0.1E~44, ~0.123E2) = 0.17E~43 ++ (~0.1E~44, ~0.123E2) = ~0.123E2 +- (~0.1E~44, ~0.123E2) = 0.123E2 +/ (~0.1E~44, ~0.123E2) = 0.0 +nextAfter (~0.1E~44, ~0.123E2) = ~0.3E~44 +rem (~0.1E~44, ~0.123E2) = ~0.1E~44 +* (~0.1E~44, ~0.31415927E1) = 0.4E~44 ++ (~0.1E~44, ~0.31415927E1) = ~0.31415927E1 +- (~0.1E~44, ~0.31415927E1) = 0.31415927E1 +/ (~0.1E~44, ~0.31415927E1) = 0.0 +nextAfter (~0.1E~44, ~0.31415927E1) = ~0.3E~44 +rem (~0.1E~44, ~0.31415927E1) = ~0.1E~44 +* (~0.1E~44, ~0.27182817E1) = 0.4E~44 ++ (~0.1E~44, ~0.27182817E1) = ~0.27182817E1 +- (~0.1E~44, ~0.27182817E1) = 0.27182817E1 +/ (~0.1E~44, ~0.27182817E1) = 0.0 +nextAfter (~0.1E~44, ~0.27182817E1) = ~0.3E~44 +rem (~0.1E~44, ~0.27182817E1) = ~0.1E~44 +* (~0.1E~44, ~0.123E1) = 0.1E~44 ++ (~0.1E~44, ~0.123E1) = ~0.123E1 +- (~0.1E~44, ~0.123E1) = 0.123E1 +/ (~0.1E~44, ~0.123E1) = 0.1E~44 +nextAfter (~0.1E~44, ~0.123E1) = ~0.3E~44 +rem (~0.1E~44, ~0.123E1) = ~0.1E~44 +* (~0.1E~44, ~0.123) = 0.0 ++ (~0.1E~44, ~0.123) = ~0.123 +- (~0.1E~44, ~0.123) = 0.123 +/ (~0.1E~44, ~0.123) = 0.11E~43 +nextAfter (~0.1E~44, ~0.123) = ~0.3E~44 +rem (~0.1E~44, ~0.123) = ~0.1E~44 +* (~0.1E~44, ~0.123E~2) = 0.0 ++ (~0.1E~44, ~0.123E~2) = ~0.123E~2 +- (~0.1E~44, ~0.123E~2) = 0.123E~2 +/ (~0.1E~44, ~0.123E~2) = 0.1139E~41 +nextAfter (~0.1E~44, ~0.123E~2) = ~0.3E~44 +rem (~0.1E~44, ~0.123E~2) = ~0.1E~44 +* (~0.1E~44, ~0.11754944E~37) = 0.0 ++ (~0.1E~44, ~0.11754944E~37) = ~0.11754945E~37 +- (~0.1E~44, ~0.11754944E~37) = 0.11754942E~37 +/ (~0.1E~44, ~0.11754944E~37) = 0.11920929E~6 +nextAfter (~0.1E~44, ~0.11754944E~37) = ~0.3E~44 +rem (~0.1E~44, ~0.11754944E~37) = ~0.1E~44 +* (~0.1E~44, ~0.5877472E~38) = 0.0 ++ (~0.1E~44, ~0.5877472E~38) = ~0.5877473E~38 +- (~0.1E~44, ~0.5877472E~38) = 0.587747E~38 +/ (~0.1E~44, ~0.5877472E~38) = 0.23841858E~6 +nextAfter (~0.1E~44, ~0.5877472E~38) = ~0.3E~44 +rem (~0.1E~44, ~0.5877472E~38) = ~0.1E~44 +* (~0.1E~44, ~0.1E~44) = 0.0 ++ (~0.1E~44, ~0.1E~44) = ~0.3E~44 +- (~0.1E~44, ~0.1E~44) = 0.0 +/ (~0.1E~44, ~0.1E~44) = 0.1E1 +nextAfter (~0.1E~44, ~0.1E~44) = ~0.1E~44 +rem (~0.1E~44, ~0.1E~44) = 0.0 +* (~0.1E~44, ~0.0) = 0.0 ++ (~0.1E~44, ~0.0) = ~0.1E~44 +- (~0.1E~44, ~0.0) = ~0.1E~44 +/ (~0.1E~44, ~0.0) = inf +nextAfter (~0.1E~44, ~0.0) = ~0.0 +rem (~0.1E~44, ~0.0) = nan +* (~0.1E~44, inf) = ~inf ++ (~0.1E~44, inf) = inf +- (~0.1E~44, inf) = ~inf +/ (~0.1E~44, inf) = ~0.0 +nextAfter (~0.1E~44, inf) = ~0.0 +rem (~0.1E~44, inf) = ~0.1E~44 +* (~0.1E~44, ~inf) = inf ++ (~0.1E~44, ~inf) = ~inf +- (~0.1E~44, ~inf) = inf +/ (~0.1E~44, ~inf) = 0.0 +nextAfter (~0.1E~44, ~inf) = ~0.3E~44 +rem (~0.1E~44, ~inf) = ~0.1E~44 +* (~0.1E~44, nan) = nan ++ (~0.1E~44, nan) = nan +- (~0.1E~44, nan) = nan +/ (~0.1E~44, nan) = nan +nextAfter (~0.1E~44, nan) = nan +rem (~0.1E~44, nan) = nan +* (~0.1E~44, inf) = ~inf ++ (~0.1E~44, inf) = inf +- (~0.1E~44, inf) = ~inf +/ (~0.1E~44, inf) = ~0.0 +nextAfter (~0.1E~44, inf) = ~0.0 +rem (~0.1E~44, inf) = ~0.1E~44 +* (~0.0, 0.34028235E39) = ~0.0 ++ (~0.0, 0.34028235E39) = 0.34028235E39 +- (~0.0, 0.34028235E39) = ~0.34028235E39 +/ (~0.0, 0.34028235E39) = ~0.0 +nextAfter (~0.0, 0.34028235E39) = 0.1E~44 +rem (~0.0, 0.34028235E39) = 0.0 +* (~0.0, 0.17014117E39) = ~0.0 ++ (~0.0, 0.17014117E39) = 0.17014117E39 +- (~0.0, 0.17014117E39) = ~0.17014117E39 +/ (~0.0, 0.17014117E39) = ~0.0 +nextAfter (~0.0, 0.17014117E39) = 0.1E~44 +rem (~0.0, 0.17014117E39) = 0.0 +* (~0.0, 0.123E4) = ~0.0 ++ (~0.0, 0.123E4) = 0.123E4 +- (~0.0, 0.123E4) = ~0.123E4 +/ (~0.0, 0.123E4) = ~0.0 +nextAfter (~0.0, 0.123E4) = 0.1E~44 +rem (~0.0, 0.123E4) = 0.0 +* (~0.0, 0.123E2) = ~0.0 ++ (~0.0, 0.123E2) = 0.123E2 +- (~0.0, 0.123E2) = ~0.123E2 +/ (~0.0, 0.123E2) = ~0.0 +nextAfter (~0.0, 0.123E2) = 0.1E~44 +rem (~0.0, 0.123E2) = 0.0 +* (~0.0, 0.31415927E1) = ~0.0 ++ (~0.0, 0.31415927E1) = 0.31415927E1 +- (~0.0, 0.31415927E1) = ~0.31415927E1 +/ (~0.0, 0.31415927E1) = ~0.0 +nextAfter (~0.0, 0.31415927E1) = 0.1E~44 +rem (~0.0, 0.31415927E1) = 0.0 +* (~0.0, 0.27182817E1) = ~0.0 ++ (~0.0, 0.27182817E1) = 0.27182817E1 +- (~0.0, 0.27182817E1) = ~0.27182817E1 +/ (~0.0, 0.27182817E1) = ~0.0 +nextAfter (~0.0, 0.27182817E1) = 0.1E~44 +rem (~0.0, 0.27182817E1) = 0.0 +* (~0.0, 0.123E1) = ~0.0 ++ (~0.0, 0.123E1) = 0.123E1 +- (~0.0, 0.123E1) = ~0.123E1 +/ (~0.0, 0.123E1) = ~0.0 +nextAfter (~0.0, 0.123E1) = 0.1E~44 +rem (~0.0, 0.123E1) = 0.0 +* (~0.0, 0.123) = ~0.0 ++ (~0.0, 0.123) = 0.123 +- (~0.0, 0.123) = ~0.123 +/ (~0.0, 0.123) = ~0.0 +nextAfter (~0.0, 0.123) = 0.1E~44 +rem (~0.0, 0.123) = 0.0 +* (~0.0, 0.123E~2) = ~0.0 ++ (~0.0, 0.123E~2) = 0.123E~2 +- (~0.0, 0.123E~2) = ~0.123E~2 +/ (~0.0, 0.123E~2) = ~0.0 +nextAfter (~0.0, 0.123E~2) = 0.1E~44 +rem (~0.0, 0.123E~2) = 0.0 +* (~0.0, 0.11754944E~37) = ~0.0 ++ (~0.0, 0.11754944E~37) = 0.11754944E~37 +- (~0.0, 0.11754944E~37) = ~0.11754944E~37 +/ (~0.0, 0.11754944E~37) = ~0.0 +nextAfter (~0.0, 0.11754944E~37) = 0.1E~44 +rem (~0.0, 0.11754944E~37) = 0.0 +* (~0.0, 0.5877472E~38) = ~0.0 ++ (~0.0, 0.5877472E~38) = 0.5877472E~38 +- (~0.0, 0.5877472E~38) = ~0.5877472E~38 +/ (~0.0, 0.5877472E~38) = ~0.0 +nextAfter (~0.0, 0.5877472E~38) = 0.1E~44 +rem (~0.0, 0.5877472E~38) = 0.0 +* (~0.0, 0.1E~44) = ~0.0 ++ (~0.0, 0.1E~44) = 0.1E~44 +- (~0.0, 0.1E~44) = ~0.1E~44 +/ (~0.0, 0.1E~44) = ~0.0 +nextAfter (~0.0, 0.1E~44) = 0.1E~44 +rem (~0.0, 0.1E~44) = 0.0 +* (~0.0, 0.0) = ~0.0 ++ (~0.0, 0.0) = 0.0 +- (~0.0, 0.0) = ~0.0 +/ (~0.0, 0.0) = nan +nextAfter (~0.0, 0.0) = 0.0 +rem (~0.0, 0.0) = 0.0 +* (~0.0, ~0.34028235E39) = 0.0 ++ (~0.0, ~0.34028235E39) = ~0.34028235E39 +- (~0.0, ~0.34028235E39) = 0.34028235E39 +/ (~0.0, ~0.34028235E39) = 0.0 +nextAfter (~0.0, ~0.34028235E39) = ~0.1E~44 +rem (~0.0, ~0.34028235E39) = 0.0 +* (~0.0, ~0.17014117E39) = 0.0 ++ (~0.0, ~0.17014117E39) = ~0.17014117E39 +- (~0.0, ~0.17014117E39) = 0.17014117E39 +/ (~0.0, ~0.17014117E39) = 0.0 +nextAfter (~0.0, ~0.17014117E39) = ~0.1E~44 +rem (~0.0, ~0.17014117E39) = 0.0 +* (~0.0, ~0.123E4) = 0.0 ++ (~0.0, ~0.123E4) = ~0.123E4 +- (~0.0, ~0.123E4) = 0.123E4 +/ (~0.0, ~0.123E4) = 0.0 +nextAfter (~0.0, ~0.123E4) = ~0.1E~44 +rem (~0.0, ~0.123E4) = 0.0 +* (~0.0, ~0.123E2) = 0.0 ++ (~0.0, ~0.123E2) = ~0.123E2 +- (~0.0, ~0.123E2) = 0.123E2 +/ (~0.0, ~0.123E2) = 0.0 +nextAfter (~0.0, ~0.123E2) = ~0.1E~44 +rem (~0.0, ~0.123E2) = 0.0 +* (~0.0, ~0.31415927E1) = 0.0 ++ (~0.0, ~0.31415927E1) = ~0.31415927E1 +- (~0.0, ~0.31415927E1) = 0.31415927E1 +/ (~0.0, ~0.31415927E1) = 0.0 +nextAfter (~0.0, ~0.31415927E1) = ~0.1E~44 +rem (~0.0, ~0.31415927E1) = 0.0 +* (~0.0, ~0.27182817E1) = 0.0 ++ (~0.0, ~0.27182817E1) = ~0.27182817E1 +- (~0.0, ~0.27182817E1) = 0.27182817E1 +/ (~0.0, ~0.27182817E1) = 0.0 +nextAfter (~0.0, ~0.27182817E1) = ~0.1E~44 +rem (~0.0, ~0.27182817E1) = 0.0 +* (~0.0, ~0.123E1) = 0.0 ++ (~0.0, ~0.123E1) = ~0.123E1 +- (~0.0, ~0.123E1) = 0.123E1 +/ (~0.0, ~0.123E1) = 0.0 +nextAfter (~0.0, ~0.123E1) = ~0.1E~44 +rem (~0.0, ~0.123E1) = 0.0 +* (~0.0, ~0.123) = 0.0 ++ (~0.0, ~0.123) = ~0.123 +- (~0.0, ~0.123) = 0.123 +/ (~0.0, ~0.123) = 0.0 +nextAfter (~0.0, ~0.123) = ~0.1E~44 +rem (~0.0, ~0.123) = 0.0 +* (~0.0, ~0.123E~2) = 0.0 ++ (~0.0, ~0.123E~2) = ~0.123E~2 +- (~0.0, ~0.123E~2) = 0.123E~2 +/ (~0.0, ~0.123E~2) = 0.0 +nextAfter (~0.0, ~0.123E~2) = ~0.1E~44 +rem (~0.0, ~0.123E~2) = 0.0 +* (~0.0, ~0.11754944E~37) = 0.0 ++ (~0.0, ~0.11754944E~37) = ~0.11754944E~37 +- (~0.0, ~0.11754944E~37) = 0.11754944E~37 +/ (~0.0, ~0.11754944E~37) = 0.0 +nextAfter (~0.0, ~0.11754944E~37) = ~0.1E~44 +rem (~0.0, ~0.11754944E~37) = 0.0 +* (~0.0, ~0.5877472E~38) = 0.0 ++ (~0.0, ~0.5877472E~38) = ~0.5877472E~38 +- (~0.0, ~0.5877472E~38) = 0.5877472E~38 +/ (~0.0, ~0.5877472E~38) = 0.0 +nextAfter (~0.0, ~0.5877472E~38) = ~0.1E~44 +rem (~0.0, ~0.5877472E~38) = 0.0 +* (~0.0, ~0.1E~44) = 0.0 ++ (~0.0, ~0.1E~44) = ~0.1E~44 +- (~0.0, ~0.1E~44) = 0.1E~44 +/ (~0.0, ~0.1E~44) = 0.0 +nextAfter (~0.0, ~0.1E~44) = ~0.1E~44 +rem (~0.0, ~0.1E~44) = 0.0 +* (~0.0, ~0.0) = 0.0 ++ (~0.0, ~0.0) = ~0.0 +- (~0.0, ~0.0) = 0.0 +/ (~0.0, ~0.0) = nan +nextAfter (~0.0, ~0.0) = ~0.0 +rem (~0.0, ~0.0) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.1E~44 +rem (~0.0, inf) = 0.0 +* (~0.0, ~inf) = nan ++ (~0.0, ~inf) = ~inf +- (~0.0, ~inf) = inf +/ (~0.0, ~inf) = 0.0 +nextAfter (~0.0, ~inf) = ~0.1E~44 +rem (~0.0, ~inf) = 0.0 +* (~0.0, nan) = nan ++ (~0.0, nan) = nan +- (~0.0, nan) = nan +/ (~0.0, nan) = nan +nextAfter (~0.0, nan) = nan +rem (~0.0, nan) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.1E~44 +rem (~0.0, inf) = 0.0 +* (inf, 0.34028235E39) = inf ++ (inf, 0.34028235E39) = inf +- (inf, 0.34028235E39) = inf +/ (inf, 0.34028235E39) = inf +nextAfter (inf, 0.34028235E39) = inf +rem (inf, 0.34028235E39) = nan +* (inf, 0.17014117E39) = inf ++ (inf, 0.17014117E39) = inf +- (inf, 0.17014117E39) = inf +/ (inf, 0.17014117E39) = inf +nextAfter (inf, 0.17014117E39) = inf +rem (inf, 0.17014117E39) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.31415927E1) = inf ++ (inf, 0.31415927E1) = inf +- (inf, 0.31415927E1) = inf +/ (inf, 0.31415927E1) = inf +nextAfter (inf, 0.31415927E1) = inf +rem (inf, 0.31415927E1) = nan +* (inf, 0.27182817E1) = inf ++ (inf, 0.27182817E1) = inf +- (inf, 0.27182817E1) = inf +/ (inf, 0.27182817E1) = inf +nextAfter (inf, 0.27182817E1) = inf +rem (inf, 0.27182817E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.11754944E~37) = inf ++ (inf, 0.11754944E~37) = inf +- (inf, 0.11754944E~37) = inf +/ (inf, 0.11754944E~37) = inf +nextAfter (inf, 0.11754944E~37) = inf +rem (inf, 0.11754944E~37) = nan +* (inf, 0.5877472E~38) = inf ++ (inf, 0.5877472E~38) = inf +- (inf, 0.5877472E~38) = inf +/ (inf, 0.5877472E~38) = inf +nextAfter (inf, 0.5877472E~38) = inf +rem (inf, 0.5877472E~38) = nan +* (inf, 0.1E~44) = inf ++ (inf, 0.1E~44) = inf +- (inf, 0.1E~44) = inf +/ (inf, 0.1E~44) = inf +nextAfter (inf, 0.1E~44) = inf +rem (inf, 0.1E~44) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.34028235E39) = ~inf ++ (inf, ~0.34028235E39) = inf +- (inf, ~0.34028235E39) = inf +/ (inf, ~0.34028235E39) = ~inf +nextAfter (inf, ~0.34028235E39) = inf +rem (inf, ~0.34028235E39) = nan +* (inf, ~0.17014117E39) = ~inf ++ (inf, ~0.17014117E39) = inf +- (inf, ~0.17014117E39) = inf +/ (inf, ~0.17014117E39) = ~inf +nextAfter (inf, ~0.17014117E39) = inf +rem (inf, ~0.17014117E39) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.31415927E1) = ~inf ++ (inf, ~0.31415927E1) = inf +- (inf, ~0.31415927E1) = inf +/ (inf, ~0.31415927E1) = ~inf +nextAfter (inf, ~0.31415927E1) = inf +rem (inf, ~0.31415927E1) = nan +* (inf, ~0.27182817E1) = ~inf ++ (inf, ~0.27182817E1) = inf +- (inf, ~0.27182817E1) = inf +/ (inf, ~0.27182817E1) = ~inf +nextAfter (inf, ~0.27182817E1) = inf +rem (inf, ~0.27182817E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.11754944E~37) = ~inf ++ (inf, ~0.11754944E~37) = inf +- (inf, ~0.11754944E~37) = inf +/ (inf, ~0.11754944E~37) = ~inf +nextAfter (inf, ~0.11754944E~37) = inf +rem (inf, ~0.11754944E~37) = nan +* (inf, ~0.5877472E~38) = ~inf ++ (inf, ~0.5877472E~38) = inf +- (inf, ~0.5877472E~38) = inf +/ (inf, ~0.5877472E~38) = ~inf +nextAfter (inf, ~0.5877472E~38) = inf +rem (inf, ~0.5877472E~38) = nan +* (inf, ~0.1E~44) = ~inf ++ (inf, ~0.1E~44) = inf +- (inf, ~0.1E~44) = inf +/ (inf, ~0.1E~44) = ~inf +nextAfter (inf, ~0.1E~44) = inf +rem (inf, ~0.1E~44) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (~inf, 0.34028235E39) = ~inf ++ (~inf, 0.34028235E39) = ~inf +- (~inf, 0.34028235E39) = ~inf +/ (~inf, 0.34028235E39) = ~inf +nextAfter (~inf, 0.34028235E39) = ~inf +rem (~inf, 0.34028235E39) = nan +* (~inf, 0.17014117E39) = ~inf ++ (~inf, 0.17014117E39) = ~inf +- (~inf, 0.17014117E39) = ~inf +/ (~inf, 0.17014117E39) = ~inf +nextAfter (~inf, 0.17014117E39) = ~inf +rem (~inf, 0.17014117E39) = nan +* (~inf, 0.123E4) = ~inf ++ (~inf, 0.123E4) = ~inf +- (~inf, 0.123E4) = ~inf +/ (~inf, 0.123E4) = ~inf +nextAfter (~inf, 0.123E4) = ~inf +rem (~inf, 0.123E4) = nan +* (~inf, 0.123E2) = ~inf ++ (~inf, 0.123E2) = ~inf +- (~inf, 0.123E2) = ~inf +/ (~inf, 0.123E2) = ~inf +nextAfter (~inf, 0.123E2) = ~inf +rem (~inf, 0.123E2) = nan +* (~inf, 0.31415927E1) = ~inf ++ (~inf, 0.31415927E1) = ~inf +- (~inf, 0.31415927E1) = ~inf +/ (~inf, 0.31415927E1) = ~inf +nextAfter (~inf, 0.31415927E1) = ~inf +rem (~inf, 0.31415927E1) = nan +* (~inf, 0.27182817E1) = ~inf ++ (~inf, 0.27182817E1) = ~inf +- (~inf, 0.27182817E1) = ~inf +/ (~inf, 0.27182817E1) = ~inf +nextAfter (~inf, 0.27182817E1) = ~inf +rem (~inf, 0.27182817E1) = nan +* (~inf, 0.123E1) = ~inf ++ (~inf, 0.123E1) = ~inf +- (~inf, 0.123E1) = ~inf +/ (~inf, 0.123E1) = ~inf +nextAfter (~inf, 0.123E1) = ~inf +rem (~inf, 0.123E1) = nan +* (~inf, 0.123) = ~inf ++ (~inf, 0.123) = ~inf +- (~inf, 0.123) = ~inf +/ (~inf, 0.123) = ~inf +nextAfter (~inf, 0.123) = ~inf +rem (~inf, 0.123) = nan +* (~inf, 0.123E~2) = ~inf ++ (~inf, 0.123E~2) = ~inf +- (~inf, 0.123E~2) = ~inf +/ (~inf, 0.123E~2) = ~inf +nextAfter (~inf, 0.123E~2) = ~inf +rem (~inf, 0.123E~2) = nan +* (~inf, 0.11754944E~37) = ~inf ++ (~inf, 0.11754944E~37) = ~inf +- (~inf, 0.11754944E~37) = ~inf +/ (~inf, 0.11754944E~37) = ~inf +nextAfter (~inf, 0.11754944E~37) = ~inf +rem (~inf, 0.11754944E~37) = nan +* (~inf, 0.5877472E~38) = ~inf ++ (~inf, 0.5877472E~38) = ~inf +- (~inf, 0.5877472E~38) = ~inf +/ (~inf, 0.5877472E~38) = ~inf +nextAfter (~inf, 0.5877472E~38) = ~inf +rem (~inf, 0.5877472E~38) = nan +* (~inf, 0.1E~44) = ~inf ++ (~inf, 0.1E~44) = ~inf +- (~inf, 0.1E~44) = ~inf +/ (~inf, 0.1E~44) = ~inf +nextAfter (~inf, 0.1E~44) = ~inf +rem (~inf, 0.1E~44) = nan +* (~inf, 0.0) = nan ++ (~inf, 0.0) = ~inf +- (~inf, 0.0) = ~inf +/ (~inf, 0.0) = ~inf +nextAfter (~inf, 0.0) = ~inf +rem (~inf, 0.0) = nan +* (~inf, ~0.34028235E39) = inf ++ (~inf, ~0.34028235E39) = ~inf +- (~inf, ~0.34028235E39) = ~inf +/ (~inf, ~0.34028235E39) = inf +nextAfter (~inf, ~0.34028235E39) = ~inf +rem (~inf, ~0.34028235E39) = nan +* (~inf, ~0.17014117E39) = inf ++ (~inf, ~0.17014117E39) = ~inf +- (~inf, ~0.17014117E39) = ~inf +/ (~inf, ~0.17014117E39) = inf +nextAfter (~inf, ~0.17014117E39) = ~inf +rem (~inf, ~0.17014117E39) = nan +* (~inf, ~0.123E4) = inf ++ (~inf, ~0.123E4) = ~inf +- (~inf, ~0.123E4) = ~inf +/ (~inf, ~0.123E4) = inf +nextAfter (~inf, ~0.123E4) = ~inf +rem (~inf, ~0.123E4) = nan +* (~inf, ~0.123E2) = inf ++ (~inf, ~0.123E2) = ~inf +- (~inf, ~0.123E2) = ~inf +/ (~inf, ~0.123E2) = inf +nextAfter (~inf, ~0.123E2) = ~inf +rem (~inf, ~0.123E2) = nan +* (~inf, ~0.31415927E1) = inf ++ (~inf, ~0.31415927E1) = ~inf +- (~inf, ~0.31415927E1) = ~inf +/ (~inf, ~0.31415927E1) = inf +nextAfter (~inf, ~0.31415927E1) = ~inf +rem (~inf, ~0.31415927E1) = nan +* (~inf, ~0.27182817E1) = inf ++ (~inf, ~0.27182817E1) = ~inf +- (~inf, ~0.27182817E1) = ~inf +/ (~inf, ~0.27182817E1) = inf +nextAfter (~inf, ~0.27182817E1) = ~inf +rem (~inf, ~0.27182817E1) = nan +* (~inf, ~0.123E1) = inf ++ (~inf, ~0.123E1) = ~inf +- (~inf, ~0.123E1) = ~inf +/ (~inf, ~0.123E1) = inf +nextAfter (~inf, ~0.123E1) = ~inf +rem (~inf, ~0.123E1) = nan +* (~inf, ~0.123) = inf ++ (~inf, ~0.123) = ~inf +- (~inf, ~0.123) = ~inf +/ (~inf, ~0.123) = inf +nextAfter (~inf, ~0.123) = ~inf +rem (~inf, ~0.123) = nan +* (~inf, ~0.123E~2) = inf ++ (~inf, ~0.123E~2) = ~inf +- (~inf, ~0.123E~2) = ~inf +/ (~inf, ~0.123E~2) = inf +nextAfter (~inf, ~0.123E~2) = ~inf +rem (~inf, ~0.123E~2) = nan +* (~inf, ~0.11754944E~37) = inf ++ (~inf, ~0.11754944E~37) = ~inf +- (~inf, ~0.11754944E~37) = ~inf +/ (~inf, ~0.11754944E~37) = inf +nextAfter (~inf, ~0.11754944E~37) = ~inf +rem (~inf, ~0.11754944E~37) = nan +* (~inf, ~0.5877472E~38) = inf ++ (~inf, ~0.5877472E~38) = ~inf +- (~inf, ~0.5877472E~38) = ~inf +/ (~inf, ~0.5877472E~38) = inf +nextAfter (~inf, ~0.5877472E~38) = ~inf +rem (~inf, ~0.5877472E~38) = nan +* (~inf, ~0.1E~44) = inf ++ (~inf, ~0.1E~44) = ~inf +- (~inf, ~0.1E~44) = ~inf +/ (~inf, ~0.1E~44) = inf +nextAfter (~inf, ~0.1E~44) = ~inf +rem (~inf, ~0.1E~44) = nan +* (~inf, ~0.0) = nan ++ (~inf, ~0.0) = ~inf +- (~inf, ~0.0) = ~inf +/ (~inf, ~0.0) = inf +nextAfter (~inf, ~0.0) = ~inf +rem (~inf, ~0.0) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (~inf, ~inf) = inf ++ (~inf, ~inf) = ~inf +- (~inf, ~inf) = nan +/ (~inf, ~inf) = nan +nextAfter (~inf, ~inf) = ~inf +rem (~inf, ~inf) = nan +* (~inf, nan) = nan ++ (~inf, nan) = nan +- (~inf, nan) = nan +/ (~inf, nan) = nan +nextAfter (~inf, nan) = nan +rem (~inf, nan) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (nan, 0.34028235E39) = nan ++ (nan, 0.34028235E39) = nan +- (nan, 0.34028235E39) = nan +/ (nan, 0.34028235E39) = nan +nextAfter (nan, 0.34028235E39) = nan +rem (nan, 0.34028235E39) = nan +* (nan, 0.17014117E39) = nan ++ (nan, 0.17014117E39) = nan +- (nan, 0.17014117E39) = nan +/ (nan, 0.17014117E39) = nan +nextAfter (nan, 0.17014117E39) = nan +rem (nan, 0.17014117E39) = nan +* (nan, 0.123E4) = nan ++ (nan, 0.123E4) = nan +- (nan, 0.123E4) = nan +/ (nan, 0.123E4) = nan +nextAfter (nan, 0.123E4) = nan +rem (nan, 0.123E4) = nan +* (nan, 0.123E2) = nan ++ (nan, 0.123E2) = nan +- (nan, 0.123E2) = nan +/ (nan, 0.123E2) = nan +nextAfter (nan, 0.123E2) = nan +rem (nan, 0.123E2) = nan +* (nan, 0.31415927E1) = nan ++ (nan, 0.31415927E1) = nan +- (nan, 0.31415927E1) = nan +/ (nan, 0.31415927E1) = nan +nextAfter (nan, 0.31415927E1) = nan +rem (nan, 0.31415927E1) = nan +* (nan, 0.27182817E1) = nan ++ (nan, 0.27182817E1) = nan +- (nan, 0.27182817E1) = nan +/ (nan, 0.27182817E1) = nan +nextAfter (nan, 0.27182817E1) = nan +rem (nan, 0.27182817E1) = nan +* (nan, 0.123E1) = nan ++ (nan, 0.123E1) = nan +- (nan, 0.123E1) = nan +/ (nan, 0.123E1) = nan +nextAfter (nan, 0.123E1) = nan +rem (nan, 0.123E1) = nan +* (nan, 0.123) = nan ++ (nan, 0.123) = nan +- (nan, 0.123) = nan +/ (nan, 0.123) = nan +nextAfter (nan, 0.123) = nan +rem (nan, 0.123) = nan +* (nan, 0.123E~2) = nan ++ (nan, 0.123E~2) = nan +- (nan, 0.123E~2) = nan +/ (nan, 0.123E~2) = nan +nextAfter (nan, 0.123E~2) = nan +rem (nan, 0.123E~2) = nan +* (nan, 0.11754944E~37) = nan ++ (nan, 0.11754944E~37) = nan +- (nan, 0.11754944E~37) = nan +/ (nan, 0.11754944E~37) = nan +nextAfter (nan, 0.11754944E~37) = nan +rem (nan, 0.11754944E~37) = nan +* (nan, 0.5877472E~38) = nan ++ (nan, 0.5877472E~38) = nan +- (nan, 0.5877472E~38) = nan +/ (nan, 0.5877472E~38) = nan +nextAfter (nan, 0.5877472E~38) = nan +rem (nan, 0.5877472E~38) = nan +* (nan, 0.1E~44) = nan ++ (nan, 0.1E~44) = nan +- (nan, 0.1E~44) = nan +/ (nan, 0.1E~44) = nan +nextAfter (nan, 0.1E~44) = nan +rem (nan, 0.1E~44) = nan +* (nan, 0.0) = nan ++ (nan, 0.0) = nan +- (nan, 0.0) = nan +/ (nan, 0.0) = nan +nextAfter (nan, 0.0) = nan +rem (nan, 0.0) = nan +* (nan, ~0.34028235E39) = nan ++ (nan, ~0.34028235E39) = nan +- (nan, ~0.34028235E39) = nan +/ (nan, ~0.34028235E39) = nan +nextAfter (nan, ~0.34028235E39) = nan +rem (nan, ~0.34028235E39) = nan +* (nan, ~0.17014117E39) = nan ++ (nan, ~0.17014117E39) = nan +- (nan, ~0.17014117E39) = nan +/ (nan, ~0.17014117E39) = nan +nextAfter (nan, ~0.17014117E39) = nan +rem (nan, ~0.17014117E39) = nan +* (nan, ~0.123E4) = nan ++ (nan, ~0.123E4) = nan +- (nan, ~0.123E4) = nan +/ (nan, ~0.123E4) = nan +nextAfter (nan, ~0.123E4) = nan +rem (nan, ~0.123E4) = nan +* (nan, ~0.123E2) = nan ++ (nan, ~0.123E2) = nan +- (nan, ~0.123E2) = nan +/ (nan, ~0.123E2) = nan +nextAfter (nan, ~0.123E2) = nan +rem (nan, ~0.123E2) = nan +* (nan, ~0.31415927E1) = nan ++ (nan, ~0.31415927E1) = nan +- (nan, ~0.31415927E1) = nan +/ (nan, ~0.31415927E1) = nan +nextAfter (nan, ~0.31415927E1) = nan +rem (nan, ~0.31415927E1) = nan +* (nan, ~0.27182817E1) = nan ++ (nan, ~0.27182817E1) = nan +- (nan, ~0.27182817E1) = nan +/ (nan, ~0.27182817E1) = nan +nextAfter (nan, ~0.27182817E1) = nan +rem (nan, ~0.27182817E1) = nan +* (nan, ~0.123E1) = nan ++ (nan, ~0.123E1) = nan +- (nan, ~0.123E1) = nan +/ (nan, ~0.123E1) = nan +nextAfter (nan, ~0.123E1) = nan +rem (nan, ~0.123E1) = nan +* (nan, ~0.123) = nan ++ (nan, ~0.123) = nan +- (nan, ~0.123) = nan +/ (nan, ~0.123) = nan +nextAfter (nan, ~0.123) = nan +rem (nan, ~0.123) = nan +* (nan, ~0.123E~2) = nan ++ (nan, ~0.123E~2) = nan +- (nan, ~0.123E~2) = nan +/ (nan, ~0.123E~2) = nan +nextAfter (nan, ~0.123E~2) = nan +rem (nan, ~0.123E~2) = nan +* (nan, ~0.11754944E~37) = nan ++ (nan, ~0.11754944E~37) = nan +- (nan, ~0.11754944E~37) = nan +/ (nan, ~0.11754944E~37) = nan +nextAfter (nan, ~0.11754944E~37) = nan +rem (nan, ~0.11754944E~37) = nan +* (nan, ~0.5877472E~38) = nan ++ (nan, ~0.5877472E~38) = nan +- (nan, ~0.5877472E~38) = nan +/ (nan, ~0.5877472E~38) = nan +nextAfter (nan, ~0.5877472E~38) = nan +rem (nan, ~0.5877472E~38) = nan +* (nan, ~0.1E~44) = nan ++ (nan, ~0.1E~44) = nan +- (nan, ~0.1E~44) = nan +/ (nan, ~0.1E~44) = nan +nextAfter (nan, ~0.1E~44) = nan +rem (nan, ~0.1E~44) = nan +* (nan, ~0.0) = nan ++ (nan, ~0.0) = nan +- (nan, ~0.0) = nan +/ (nan, ~0.0) = nan +nextAfter (nan, ~0.0) = nan +rem (nan, ~0.0) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (nan, ~inf) = nan ++ (nan, ~inf) = nan +- (nan, ~inf) = nan +/ (nan, ~inf) = nan +nextAfter (nan, ~inf) = nan +rem (nan, ~inf) = nan +* (nan, nan) = nan ++ (nan, nan) = nan +- (nan, nan) = nan +/ (nan, nan) = nan +nextAfter (nan, nan) = nan +rem (nan, nan) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (inf, 0.34028235E39) = inf ++ (inf, 0.34028235E39) = inf +- (inf, 0.34028235E39) = inf +/ (inf, 0.34028235E39) = inf +nextAfter (inf, 0.34028235E39) = inf +rem (inf, 0.34028235E39) = nan +* (inf, 0.17014117E39) = inf ++ (inf, 0.17014117E39) = inf +- (inf, 0.17014117E39) = inf +/ (inf, 0.17014117E39) = inf +nextAfter (inf, 0.17014117E39) = inf +rem (inf, 0.17014117E39) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.31415927E1) = inf ++ (inf, 0.31415927E1) = inf +- (inf, 0.31415927E1) = inf +/ (inf, 0.31415927E1) = inf +nextAfter (inf, 0.31415927E1) = inf +rem (inf, 0.31415927E1) = nan +* (inf, 0.27182817E1) = inf ++ (inf, 0.27182817E1) = inf +- (inf, 0.27182817E1) = inf +/ (inf, 0.27182817E1) = inf +nextAfter (inf, 0.27182817E1) = inf +rem (inf, 0.27182817E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.11754944E~37) = inf ++ (inf, 0.11754944E~37) = inf +- (inf, 0.11754944E~37) = inf +/ (inf, 0.11754944E~37) = inf +nextAfter (inf, 0.11754944E~37) = inf +rem (inf, 0.11754944E~37) = nan +* (inf, 0.5877472E~38) = inf ++ (inf, 0.5877472E~38) = inf +- (inf, 0.5877472E~38) = inf +/ (inf, 0.5877472E~38) = inf +nextAfter (inf, 0.5877472E~38) = inf +rem (inf, 0.5877472E~38) = nan +* (inf, 0.1E~44) = inf ++ (inf, 0.1E~44) = inf +- (inf, 0.1E~44) = inf +/ (inf, 0.1E~44) = inf +nextAfter (inf, 0.1E~44) = inf +rem (inf, 0.1E~44) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.34028235E39) = ~inf ++ (inf, ~0.34028235E39) = inf +- (inf, ~0.34028235E39) = inf +/ (inf, ~0.34028235E39) = ~inf +nextAfter (inf, ~0.34028235E39) = inf +rem (inf, ~0.34028235E39) = nan +* (inf, ~0.17014117E39) = ~inf ++ (inf, ~0.17014117E39) = inf +- (inf, ~0.17014117E39) = inf +/ (inf, ~0.17014117E39) = ~inf +nextAfter (inf, ~0.17014117E39) = inf +rem (inf, ~0.17014117E39) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.31415927E1) = ~inf ++ (inf, ~0.31415927E1) = inf +- (inf, ~0.31415927E1) = inf +/ (inf, ~0.31415927E1) = ~inf +nextAfter (inf, ~0.31415927E1) = inf +rem (inf, ~0.31415927E1) = nan +* (inf, ~0.27182817E1) = ~inf ++ (inf, ~0.27182817E1) = inf +- (inf, ~0.27182817E1) = inf +/ (inf, ~0.27182817E1) = ~inf +nextAfter (inf, ~0.27182817E1) = inf +rem (inf, ~0.27182817E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.11754944E~37) = ~inf ++ (inf, ~0.11754944E~37) = inf +- (inf, ~0.11754944E~37) = inf +/ (inf, ~0.11754944E~37) = ~inf +nextAfter (inf, ~0.11754944E~37) = inf +rem (inf, ~0.11754944E~37) = nan +* (inf, ~0.5877472E~38) = ~inf ++ (inf, ~0.5877472E~38) = inf +- (inf, ~0.5877472E~38) = inf +/ (inf, ~0.5877472E~38) = ~inf +nextAfter (inf, ~0.5877472E~38) = inf +rem (inf, ~0.5877472E~38) = nan +* (inf, ~0.1E~44) = ~inf ++ (inf, ~0.1E~44) = inf +- (inf, ~0.1E~44) = inf +/ (inf, ~0.1E~44) = ~inf +nextAfter (inf, ~0.1E~44) = inf +rem (inf, ~0.1E~44) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan + +Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh,atan2,pow} +acos (0.34028235E39) = nan +asin (0.34028235E39) = nan +atan (0.34028235E39) = 1.570796251 +cos (0.34028235E39) = 0.8530210257 +cosh (0.34028235E39) = inf +exp (0.34028235E39) = inf +ln (0.34028235E39) = 88.72283936 +log10 (0.34028235E39) = 38.53184128 +sin (0.34028235E39) = ~0.521876514 +sinh (0.34028235E39) = inf +sqrt (0.34028235E39) = 1.844674297E19 +tan (0.34028235E39) = ~0.6117979288 +tanh (0.34028235E39) = 1 +acos (0.17014117E39) = nan +asin (0.17014117E39) = nan +atan (0.17014117E39) = 1.570796251 +cos (0.17014117E39) = ~0.9625541568 +cosh (0.17014117E39) = inf +exp (0.17014117E39) = inf +ln (0.17014117E39) = 88.0296936 +log10 (0.17014117E39) = 38.23080826 +sin (0.17014117E39) = 0.2710894346 +sinh (0.17014117E39) = inf +sqrt (0.17014117E39) = 1.30438176E19 +tan (0.17014117E39) = ~0.281635493 +tanh (0.17014117E39) = 1 +acos (0.123E4) = nan +asin (0.123E4) = nan +atan (0.123E4) = 1.569983363 +cos (0.123E4) = 0.06642717123 +cosh (0.123E4) = inf +exp (0.123E4) = inf +ln (0.123E4) = 7.114769459 +log10 (0.123E4) = 3.089905024 +sin (0.123E4) = ~0.9977912903 +sinh (0.123E4) = inf +sqrt (0.123E4) = 35.07135773 +tan (0.123E4) = ~15.02083111 +tanh (0.123E4) = 1 +acos (0.123E2) = nan +asin (0.123E2) = nan +atan (0.123E2) = 1.489673972 +cos (0.123E2) = 0.9647326469 +cosh (0.123E2) = 109848.0156 +exp (0.123E2) = 219696.0312 +ln (0.123E2) = 2.509599209 +log10 (0.123E2) = 1.089905143 +sin (0.123E2) = ~0.2632316053 +sinh (0.123E2) = 109848.0156 +sqrt (0.123E2) = 3.50713563 +tan (0.123E2) = ~0.2728544474 +tanh (0.123E2) = 1 +acos (0.31415927E1) = nan +asin (0.31415927E1) = nan +atan (0.31415927E1) = 1.262627244 +cos (0.31415927E1) = ~1 +cosh (0.31415927E1) = 11.59195423 +exp (0.31415927E1) = 23.14069557 +ln (0.31415927E1) = 1.144729972 +log10 (0.31415927E1) = 0.4971498847 +sin (0.31415927E1) = ~8.742277657E~8 +sinh (0.31415927E1) = 11.54874039 +sqrt (0.31415927E1) = 1.772453904 +tan (0.31415927E1) = 8.742277657E~8 +tanh (0.31415927E1) = 0.9962720871 +acos (0.27182817E1) = nan +asin (0.27182817E1) = nan +atan (0.27182817E1) = 1.218282938 +cos (0.27182817E1) = ~0.9117338657 +cosh (0.27182817E1) = 7.610124588 +exp (0.27182817E1) = 15.15426064 +ln (0.27182817E1) = 0.9999999404 +log10 (0.27182817E1) = 0.4342944622 +sin (0.27182817E1) = 0.4107813537 +sinh (0.27182817E1) = 7.544136524 +sqrt (0.27182817E1) = 1.648721218 +tan (0.27182817E1) = ~0.4505496323 +tanh (0.27182817E1) = 0.9913288951 +acos (0.123E1) = nan +asin (0.123E1) = nan +atan (0.123E1) = 0.888173759 +cos (0.123E1) = 0.3342376947 +cosh (0.123E1) = 1.856761098 +exp (0.123E1) = 3.421229601 +ln (0.123E1) = 0.2070141882 +log10 (0.123E1) = 0.08990512043 +sin (0.123E1) = 0.9424887896 +sinh (0.123E1) = 1.564468503 +sqrt (0.123E1) = 1.109053612 +tan (0.123E1) = 2.819815874 +tanh (0.123E1) = 0.8425793052 +acos (0.123) = 1.447484016 +asin (0.123) = 0.1233122796 +atan (0.123) = 0.1223852858 +cos (0.123) = 0.9924450517 +cosh (0.123) = 1.007574081 +exp (0.123) = 1.130884409 +ln (0.123) = ~2.095570803 +log10 (0.123) = ~0.9100948572 +sin (0.123) = 0.1226900965 +sinh (0.123) = 0.1233103797 +sqrt (0.123) = 0.350713551 +tan (0.123) = 0.1236240715 +tanh (0.123) = 0.1223834455 +acos (0.123E~2) = 1.569566369 +asin (0.123E~2) = 0.001230000402 +atan (0.123E~2) = 0.001229999471 +cos (0.123E~2) = 0.9999992251 +cosh (0.123E~2) = 1.000000715 +exp (0.123E~2) = 1.001230717 +ln (0.123E~2) = ~6.700741291 +log10 (0.123E~2) = ~2.910094976 +sin (0.123E~2) = 0.001229999703 +sinh (0.123E~2) = 0.001230000402 +sqrt (0.123E~2) = 0.03507135808 +tan (0.123E~2) = 0.001230000635 +tanh (0.123E~2) = 0.001229999471 +acos (0.11754944E~37) = 1.570796371 +asin (0.11754944E~37) = 1.175494351E~38 +atan (0.11754944E~37) = 1.175494351E~38 +cos (0.11754944E~37) = 1 +cosh (0.11754944E~37) = 1 +exp (0.11754944E~37) = 1 +ln (0.11754944E~37) = ~87.33654785 +log10 (0.11754944E~37) = ~37.92977905 +sin (0.11754944E~37) = 1.175494351E~38 +sinh (0.11754944E~37) = 1.175494351E~38 +sqrt (0.11754944E~37) = 1.084202172E~19 +tan (0.11754944E~37) = 1.175494351E~38 +tanh (0.11754944E~37) = 1.175494351E~38 +acos (0.5877472E~38) = 1.570796371 +asin (0.5877472E~38) = 5.877471754E~39 +atan (0.5877472E~38) = 5.877471754E~39 +cos (0.5877472E~38) = 1 +cosh (0.5877472E~38) = 1 +exp (0.5877472E~38) = 1 +ln (0.5877472E~38) = ~88.0296936 +log10 (0.5877472E~38) = ~38.23080826 +sin (0.5877472E~38) = 5.877471754E~39 +sinh (0.5877472E~38) = 5.877471754E~39 +sqrt (0.5877472E~38) = 7.666466952E~20 +tan (0.5877472E~38) = 5.877471754E~39 +tanh (0.5877472E~38) = 5.877471754E~39 +acos (0.1E~44) = 1.570796371 +asin (0.1E~44) = 1.401298464E~45 +atan (0.1E~44) = 1.401298464E~45 +cos (0.1E~44) = 1 +cosh (0.1E~44) = 1 +exp (0.1E~44) = 1 +ln (0.1E~44) = ~103.2789307 +log10 (0.1E~44) = ~44.85346985 +sin (0.1E~44) = 1.401298464E~45 +sinh (0.1E~44) = 1.401298464E~45 +sqrt (0.1E~44) = 3.743392067E~23 +tan (0.1E~44) = 1.401298464E~45 +tanh (0.1E~44) = 1.401298464E~45 +acos (0.0) = 1.570796371 +asin (0.0) = 0 +atan (0.0) = 0 +cos (0.0) = 1 +cosh (0.0) = 1 +exp (0.0) = 1 +ln (0.0) = ~inf +log10 (0.0) = ~inf +sin (0.0) = 0 +sinh (0.0) = 0 +sqrt (0.0) = 0 +tan (0.0) = 0 +tanh (0.0) = 0 +acos (~0.34028235E39) = nan +asin (~0.34028235E39) = nan +atan (~0.34028235E39) = ~1.570796251 +cos (~0.34028235E39) = 0.8530210257 +cosh (~0.34028235E39) = inf +exp (~0.34028235E39) = 0 +ln (~0.34028235E39) = nan +log10 (~0.34028235E39) = nan +sin (~0.34028235E39) = 0.521876514 +sinh (~0.34028235E39) = ~inf +sqrt (~0.34028235E39) = nan +tan (~0.34028235E39) = 0.6117979288 +tanh (~0.34028235E39) = ~1 +acos (~0.17014117E39) = nan +asin (~0.17014117E39) = nan +atan (~0.17014117E39) = ~1.570796251 +cos (~0.17014117E39) = ~0.9625541568 +cosh (~0.17014117E39) = inf +exp (~0.17014117E39) = 0 +ln (~0.17014117E39) = nan +log10 (~0.17014117E39) = nan +sin (~0.17014117E39) = ~0.2710894346 +sinh (~0.17014117E39) = ~inf +sqrt (~0.17014117E39) = nan +tan (~0.17014117E39) = 0.281635493 +tanh (~0.17014117E39) = ~1 +acos (~0.123E4) = nan +asin (~0.123E4) = nan +atan (~0.123E4) = ~1.569983363 +cos (~0.123E4) = 0.06642717123 +cosh (~0.123E4) = inf +exp (~0.123E4) = 0 +ln (~0.123E4) = nan +log10 (~0.123E4) = nan +sin (~0.123E4) = 0.9977912903 +sinh (~0.123E4) = ~inf +sqrt (~0.123E4) = nan +tan (~0.123E4) = 15.02083111 +tanh (~0.123E4) = ~1 +acos (~0.123E2) = nan +asin (~0.123E2) = nan +atan (~0.123E2) = ~1.489673972 +cos (~0.123E2) = 0.9647326469 +cosh (~0.123E2) = 109848.0156 +exp (~0.123E2) = 4.551743586E~6 +ln (~0.123E2) = nan +log10 (~0.123E2) = nan +sin (~0.123E2) = 0.2632316053 +sinh (~0.123E2) = ~109848.0156 +sqrt (~0.123E2) = nan +tan (~0.123E2) = 0.2728544474 +tanh (~0.123E2) = ~1 +acos (~0.31415927E1) = nan +asin (~0.31415927E1) = nan +atan (~0.31415927E1) = ~1.262627244 +cos (~0.31415927E1) = ~1 +cosh (~0.31415927E1) = 11.59195423 +exp (~0.31415927E1) = 0.04321391508 +ln (~0.31415927E1) = nan +log10 (~0.31415927E1) = nan +sin (~0.31415927E1) = 8.742277657E~8 +sinh (~0.31415927E1) = ~11.54874039 +sqrt (~0.31415927E1) = nan +tan (~0.31415927E1) = ~8.742277657E~8 +tanh (~0.31415927E1) = ~0.9962720871 +acos (~0.27182817E1) = nan +asin (~0.27182817E1) = nan +atan (~0.27182817E1) = ~1.218282938 +cos (~0.27182817E1) = ~0.9117338657 +cosh (~0.27182817E1) = 7.610124588 +exp (~0.27182817E1) = 0.06598804146 +ln (~0.27182817E1) = nan +log10 (~0.27182817E1) = nan +sin (~0.27182817E1) = ~0.4107813537 +sinh (~0.27182817E1) = ~7.544136524 +sqrt (~0.27182817E1) = nan +tan (~0.27182817E1) = 0.4505496323 +tanh (~0.27182817E1) = ~0.9913288951 +acos (~0.123E1) = nan +asin (~0.123E1) = nan +atan (~0.123E1) = ~0.888173759 +cos (~0.123E1) = 0.3342376947 +cosh (~0.123E1) = 1.856761098 +exp (~0.123E1) = 0.2922925651 +ln (~0.123E1) = nan +log10 (~0.123E1) = nan +sin (~0.123E1) = ~0.9424887896 +sinh (~0.123E1) = ~1.564468503 +sqrt (~0.123E1) = nan +tan (~0.123E1) = ~2.819815874 +tanh (~0.123E1) = ~0.8425793052 +acos (~0.123) = 1.694108605 +asin (~0.123) = ~0.1233122796 +atan (~0.123) = ~0.1223852858 +cos (~0.123) = 0.9924450517 +cosh (~0.123) = 1.007574081 +exp (~0.123) = 0.8842636347 +ln (~0.123) = nan +log10 (~0.123) = nan +sin (~0.123) = ~0.1226900965 +sinh (~0.123) = ~0.1233103797 +sqrt (~0.123) = nan +tan (~0.123) = ~0.1236240715 +tanh (~0.123) = ~0.1223834455 +acos (~0.123E~2) = 1.572026372 +asin (~0.123E~2) = ~0.001230000402 +atan (~0.123E~2) = ~0.001229999471 +cos (~0.123E~2) = 0.9999992251 +cosh (~0.123E~2) = 1.000000715 +exp (~0.123E~2) = 0.9987707734 +ln (~0.123E~2) = nan +log10 (~0.123E~2) = nan +sin (~0.123E~2) = ~0.001229999703 +sinh (~0.123E~2) = ~0.001230000402 +sqrt (~0.123E~2) = nan +tan (~0.123E~2) = ~0.001230000635 +tanh (~0.123E~2) = ~0.001229999471 +acos (~0.11754944E~37) = 1.570796371 +asin (~0.11754944E~37) = ~1.175494351E~38 +atan (~0.11754944E~37) = ~1.175494351E~38 +cos (~0.11754944E~37) = 1 +cosh (~0.11754944E~37) = 1 +exp (~0.11754944E~37) = 1 +ln (~0.11754944E~37) = nan +log10 (~0.11754944E~37) = nan +sin (~0.11754944E~37) = ~1.175494351E~38 +sinh (~0.11754944E~37) = ~1.175494351E~38 +sqrt (~0.11754944E~37) = nan +tan (~0.11754944E~37) = ~1.175494351E~38 +tanh (~0.11754944E~37) = ~1.175494351E~38 +acos (~0.5877472E~38) = 1.570796371 +asin (~0.5877472E~38) = ~5.877471754E~39 +atan (~0.5877472E~38) = ~5.877471754E~39 +cos (~0.5877472E~38) = 1 +cosh (~0.5877472E~38) = 1 +exp (~0.5877472E~38) = 1 +ln (~0.5877472E~38) = nan +log10 (~0.5877472E~38) = nan +sin (~0.5877472E~38) = ~5.877471754E~39 +sinh (~0.5877472E~38) = ~5.877471754E~39 +sqrt (~0.5877472E~38) = nan +tan (~0.5877472E~38) = ~5.877471754E~39 +tanh (~0.5877472E~38) = ~5.877471754E~39 +acos (~0.1E~44) = 1.570796371 +asin (~0.1E~44) = ~1.401298464E~45 +atan (~0.1E~44) = ~1.401298464E~45 +cos (~0.1E~44) = 1 +cosh (~0.1E~44) = 1 +exp (~0.1E~44) = 1 +ln (~0.1E~44) = nan +log10 (~0.1E~44) = nan +sin (~0.1E~44) = ~1.401298464E~45 +sinh (~0.1E~44) = ~1.401298464E~45 +sqrt (~0.1E~44) = nan +tan (~0.1E~44) = ~1.401298464E~45 +tanh (~0.1E~44) = ~1.401298464E~45 +acos (~0.0) = 1.570796371 +asin (~0.0) = 0 +atan (~0.0) = 0 +cos (~0.0) = 1 +cosh (~0.0) = 1 +exp (~0.0) = 1 +ln (~0.0) = ~inf +log10 (~0.0) = ~inf +sin (~0.0) = 0 +sinh (~0.0) = 0 +sqrt (~0.0) = 0 +tan (~0.0) = 0 +tanh (~0.0) = 0 +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796251 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +acos (~inf) = nan +asin (~inf) = nan +atan (~inf) = ~1.570796251 +cos (~inf) = nan +cosh (~inf) = ~inf +exp (~inf) = 0 +ln (~inf) = nan +log10 (~inf) = nan +sin (~inf) = nan +sinh (~inf) = ~inf +sqrt (~inf) = nan +tan (~inf) = nan +tanh (~inf) = ~1 +acos (nan) = nan +asin (nan) = nan +atan (nan) = nan +cos (nan) = nan +cosh (nan) = nan +exp (nan) = nan +ln (nan) = nan +log10 (nan) = nan +sin (nan) = nan +sinh (nan) = nan +sqrt (nan) = nan +tan (nan) = nan +tanh (nan) = nan +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796251 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +atan2 (0.34028235E39, 0.34028235E39) = 0.7853981853 +pow (0.34028235E39, 0.34028235E39) = inf +atan2 (0.34028235E39, 0.17014117E39) = 1.107148767 +pow (0.34028235E39, 0.17014117E39) = inf +atan2 (0.34028235E39, 0.123E4) = 1.570796371 +pow (0.34028235E39, 0.123E4) = inf +atan2 (0.34028235E39, 0.123E2) = 1.570796371 +pow (0.34028235E39, 0.123E2) = inf +atan2 (0.34028235E39, 0.31415927E1) = 1.570796371 +pow (0.34028235E39, 0.31415927E1) = inf +atan2 (0.34028235E39, 0.27182817E1) = 1.570796371 +pow (0.34028235E39, 0.27182817E1) = inf +atan2 (0.34028235E39, 0.123E1) = 1.570796371 +pow (0.34028235E39, 0.123E1) = inf +atan2 (0.34028235E39, 0.123) = 1.570796371 +pow (0.34028235E39, 0.123) = 54880.28906 +atan2 (0.34028235E39, 0.123E~2) = 1.570796371 +pow (0.34028235E39, 0.123E~2) = 1.115306377 +atan2 (0.34028235E39, 0.11754944E~37) = 1.570796371 +pow (0.34028235E39, 0.11754944E~37) = 1 +atan2 (0.34028235E39, 0.5877472E~38) = 1.570796371 +pow (0.34028235E39, 0.5877472E~38) = 1 +atan2 (0.34028235E39, 0.1E~44) = 1.570796371 +pow (0.34028235E39, 0.1E~44) = 1 +atan2 (0.34028235E39, 0.0) = 1.570796371 +pow (0.34028235E39, 0.0) = 1 +atan2 (0.34028235E39, ~0.34028235E39) = 2.356194496 +pow (0.34028235E39, ~0.34028235E39) = 0 +atan2 (0.34028235E39, ~0.17014117E39) = 2.034443855 +pow (0.34028235E39, ~0.17014117E39) = 0 +atan2 (0.34028235E39, ~0.123E4) = 1.570796371 +pow (0.34028235E39, ~0.123E4) = 0 +atan2 (0.34028235E39, ~0.123E2) = 1.570796371 +pow (0.34028235E39, ~0.123E2) = 0 +atan2 (0.34028235E39, ~0.31415927E1) = 1.570796371 +pow (0.34028235E39, ~0.31415927E1) = 0 +atan2 (0.34028235E39, ~0.27182817E1) = 1.570796371 +pow (0.34028235E39, ~0.27182817E1) = 0 +atan2 (0.34028235E39, ~0.123E1) = 1.570796371 +pow (0.34028235E39, ~0.123E1) = 0 +atan2 (0.34028235E39, ~0.123) = 1.570796371 +pow (0.34028235E39, ~0.123) = 1.822147897E~5 +atan2 (0.34028235E39, ~0.123E~2) = 1.570796371 +pow (0.34028235E39, ~0.123E~2) = 0.8966146708 +atan2 (0.34028235E39, ~0.11754944E~37) = 1.570796371 +pow (0.34028235E39, ~0.11754944E~37) = 1 +atan2 (0.34028235E39, ~0.5877472E~38) = 1.570796371 +pow (0.34028235E39, ~0.5877472E~38) = 1 +atan2 (0.34028235E39, ~0.1E~44) = 1.570796371 +pow (0.34028235E39, ~0.1E~44) = 1 +atan2 (0.34028235E39, ~0.0) = 1.570796371 +pow (0.34028235E39, ~0.0) = 1 +atan2 (0.34028235E39, inf) = 0 +pow (0.34028235E39, inf) = inf +atan2 (0.34028235E39, ~inf) = 3.141592503 +pow (0.34028235E39, ~inf) = 0 +atan2 (0.34028235E39, nan) = nan +pow (0.34028235E39, nan) = nan +atan2 (0.34028235E39, inf) = 0 +pow (0.34028235E39, inf) = inf +atan2 (0.17014117E39, 0.34028235E39) = 0.463647604 +pow (0.17014117E39, 0.34028235E39) = inf +atan2 (0.17014117E39, 0.17014117E39) = 0.7853981853 +pow (0.17014117E39, 0.17014117E39) = inf +atan2 (0.17014117E39, 0.123E4) = 1.570796371 +pow (0.17014117E39, 0.123E4) = inf +atan2 (0.17014117E39, 0.123E2) = 1.570796371 +pow (0.17014117E39, 0.123E2) = inf +atan2 (0.17014117E39, 0.31415927E1) = 1.570796371 +pow (0.17014117E39, 0.31415927E1) = inf +atan2 (0.17014117E39, 0.27182817E1) = 1.570796371 +pow (0.17014117E39, 0.27182817E1) = inf +atan2 (0.17014117E39, 0.123E1) = 1.570796371 +pow (0.17014117E39, 0.123E1) = inf +atan2 (0.17014117E39, 0.123) = 1.570796371 +pow (0.17014117E39, 0.123) = 50395.26172 +atan2 (0.17014117E39, 0.123E~2) = 1.570796371 +pow (0.17014117E39, 0.123E~2) = 1.114355803 +atan2 (0.17014117E39, 0.11754944E~37) = 1.570796371 +pow (0.17014117E39, 0.11754944E~37) = 1 +atan2 (0.17014117E39, 0.5877472E~38) = 1.570796371 +pow (0.17014117E39, 0.5877472E~38) = 1 +atan2 (0.17014117E39, 0.1E~44) = 1.570796371 +pow (0.17014117E39, 0.1E~44) = 1 +atan2 (0.17014117E39, 0.0) = 1.570796371 +pow (0.17014117E39, 0.0) = 1 +atan2 (0.17014117E39, ~0.34028235E39) = 2.677945137 +pow (0.17014117E39, ~0.34028235E39) = 0 +atan2 (0.17014117E39, ~0.17014117E39) = 2.356194496 +pow (0.17014117E39, ~0.17014117E39) = 0 +atan2 (0.17014117E39, ~0.123E4) = 1.570796371 +pow (0.17014117E39, ~0.123E4) = 0 +atan2 (0.17014117E39, ~0.123E2) = 1.570796371 +pow (0.17014117E39, ~0.123E2) = 0 +atan2 (0.17014117E39, ~0.31415927E1) = 1.570796371 +pow (0.17014117E39, ~0.31415927E1) = 0 +atan2 (0.17014117E39, ~0.27182817E1) = 1.570796371 +pow (0.17014117E39, ~0.27182817E1) = 0 +atan2 (0.17014117E39, ~0.123E1) = 1.570796371 +pow (0.17014117E39, ~0.123E1) = 0 +atan2 (0.17014117E39, ~0.123) = 1.570796371 +pow (0.17014117E39, ~0.123) = 1.984313531E~5 +atan2 (0.17014117E39, ~0.123E~2) = 1.570796371 +pow (0.17014117E39, ~0.123E~2) = 0.8973793983 +atan2 (0.17014117E39, ~0.11754944E~37) = 1.570796371 +pow (0.17014117E39, ~0.11754944E~37) = 1 +atan2 (0.17014117E39, ~0.5877472E~38) = 1.570796371 +pow (0.17014117E39, ~0.5877472E~38) = 1 +atan2 (0.17014117E39, ~0.1E~44) = 1.570796371 +pow (0.17014117E39, ~0.1E~44) = 1 +atan2 (0.17014117E39, ~0.0) = 1.570796371 +pow (0.17014117E39, ~0.0) = 1 +atan2 (0.17014117E39, inf) = 0 +pow (0.17014117E39, inf) = inf +atan2 (0.17014117E39, ~inf) = 3.141592503 +pow (0.17014117E39, ~inf) = 0 +atan2 (0.17014117E39, nan) = nan +pow (0.17014117E39, nan) = nan +atan2 (0.17014117E39, inf) = 0 +pow (0.17014117E39, inf) = inf +atan2 (0.123E4, 0.34028235E39) = 3.614645488E~36 +pow (0.123E4, 0.34028235E39) = inf +atan2 (0.123E4, 0.17014117E39) = 7.229290975E~36 +pow (0.123E4, 0.17014117E39) = inf +atan2 (0.123E4, 0.123E4) = 0.7853981853 +pow (0.123E4, 0.123E4) = inf +atan2 (0.123E4, 0.123E2) = 1.560796618 +pow (0.123E4, 0.123E2) = 1.013522656E38 +atan2 (0.123E4, 0.31415927E1) = 1.568242192 +pow (0.123E4, 0.31415927E1) = 5095930368 +atan2 (0.123E4, 0.27182817E1) = 1.568586349 +pow (0.123E4, 0.27182817E1) = 250745216 +atan2 (0.123E4, 0.123E1) = 1.569796324 +pow (0.123E4, 0.123E1) = 6318.054199 +atan2 (0.123E4, 0.123) = 1.570696354 +pow (0.123E4, 0.123) = 2.39915514 +atan2 (0.123E4, 0.123E~2) = 1.570795298 +pow (0.123E4, 0.123E~2) = 1.008789539 +atan2 (0.123E4, 0.11754944E~37) = 1.570796371 +pow (0.123E4, 0.11754944E~37) = 1 +atan2 (0.123E4, 0.5877472E~38) = 1.570796371 +pow (0.123E4, 0.5877472E~38) = 1 +atan2 (0.123E4, 0.1E~44) = 1.570796371 +pow (0.123E4, 0.1E~44) = 1 +atan2 (0.123E4, 0.0) = 1.570796371 +pow (0.123E4, 0.0) = 1 +atan2 (0.123E4, ~0.34028235E39) = 3.141592503 +pow (0.123E4, ~0.34028235E39) = 0 +atan2 (0.123E4, ~0.17014117E39) = 3.141592503 +pow (0.123E4, ~0.17014117E39) = 0 +atan2 (0.123E4, ~0.123E4) = 2.356194496 +pow (0.123E4, ~0.123E4) = 0 +atan2 (0.123E4, ~0.123E2) = 1.580796003 +pow (0.123E4, ~0.123E2) = 9.86657752E~39 +atan2 (0.123E4, ~0.31415927E1) = 1.57335043 +pow (0.123E4, ~0.31415927E1) = 1.962350282E~10 +atan2 (0.123E4, ~0.27182817E1) = 1.573006272 +pow (0.123E4, ~0.27182817E1) = 3.988112063E~9 +atan2 (0.123E4, ~0.123E1) = 1.571796298 +pow (0.123E4, ~0.123E1) = 1.582765835E~4 +atan2 (0.123E4, ~0.123) = 1.570896268 +pow (0.123E4, ~0.123) = 0.4168134034 +atan2 (0.123E4, ~0.123E~2) = 1.570797324 +pow (0.123E4, ~0.123E~2) = 0.991286993 +atan2 (0.123E4, ~0.11754944E~37) = 1.570796371 +pow (0.123E4, ~0.11754944E~37) = 1 +atan2 (0.123E4, ~0.5877472E~38) = 1.570796371 +pow (0.123E4, ~0.5877472E~38) = 1 +atan2 (0.123E4, ~0.1E~44) = 1.570796371 +pow (0.123E4, ~0.1E~44) = 1 +atan2 (0.123E4, ~0.0) = 1.570796371 +pow (0.123E4, ~0.0) = 1 +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E4, ~inf) = 3.141592503 +pow (0.123E4, ~inf) = 0 +atan2 (0.123E4, nan) = nan +pow (0.123E4, nan) = nan +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E2, 0.34028235E39) = 3.614645465E~38 +pow (0.123E2, 0.34028235E39) = inf +atan2 (0.123E2, 0.17014117E39) = 7.22929093E~38 +pow (0.123E2, 0.17014117E39) = inf +atan2 (0.123E2, 0.123E4) = 0.009999667294 +pow (0.123E2, 0.123E4) = inf +atan2 (0.123E2, 0.123E2) = 0.7853981853 +pow (0.123E2, 0.123E2) = 2.545852141E13 +atan2 (0.123E2, 0.31415927E1) = 1.32072866 +pow (0.123E2, 0.31415927E1) = 2654.837891 +atan2 (0.123E2, 0.27182817E1) = 1.353293777 +pow (0.123E2, 0.27182817E1) = 917.6333618 +atan2 (0.123E2, 0.123E1) = 1.471127629 +pow (0.123E2, 0.123E1) = 21.90702057 +atan2 (0.123E2, 0.123) = 1.560796618 +pow (0.123E2, 0.123) = 1.361627579 +atan2 (0.123E2, 0.123E~2) = 1.570696354 +pow (0.123E2, 0.123E~2) = 1.003091574 +atan2 (0.123E2, 0.11754944E~37) = 1.570796371 +pow (0.123E2, 0.11754944E~37) = 1 +atan2 (0.123E2, 0.5877472E~38) = 1.570796371 +pow (0.123E2, 0.5877472E~38) = 1 +atan2 (0.123E2, 0.1E~44) = 1.570796371 +pow (0.123E2, 0.1E~44) = 1 +atan2 (0.123E2, 0.0) = 1.570796371 +pow (0.123E2, 0.0) = 1 +atan2 (0.123E2, ~0.34028235E39) = 3.141592503 +pow (0.123E2, ~0.34028235E39) = 0 +atan2 (0.123E2, ~0.17014117E39) = 3.141592503 +pow (0.123E2, ~0.17014117E39) = 0 +atan2 (0.123E2, ~0.123E4) = 3.131592989 +pow (0.123E2, ~0.123E4) = 0 +atan2 (0.123E2, ~0.123E2) = 2.356194496 +pow (0.123E2, ~0.123E2) = 3.927958084E~14 +atan2 (0.123E2, ~0.31415927E1) = 1.820864081 +pow (0.123E2, ~0.31415927E1) = 3.766708251E~4 +atan2 (0.123E2, ~0.27182817E1) = 1.788298845 +pow (0.123E2, ~0.27182817E1) = 0.00108975987 +atan2 (0.123E2, ~0.123E1) = 1.670464993 +pow (0.123E2, ~0.123E1) = 0.04564746842 +atan2 (0.123E2, ~0.123) = 1.580796003 +pow (0.123E2, ~0.123) = 0.7344152331 +atan2 (0.123E2, ~0.123E~2) = 1.570896268 +pow (0.123E2, ~0.123E~2) = 0.996917963 +atan2 (0.123E2, ~0.11754944E~37) = 1.570796371 +pow (0.123E2, ~0.11754944E~37) = 1 +atan2 (0.123E2, ~0.5877472E~38) = 1.570796371 +pow (0.123E2, ~0.5877472E~38) = 1 +atan2 (0.123E2, ~0.1E~44) = 1.570796371 +pow (0.123E2, ~0.1E~44) = 1 +atan2 (0.123E2, ~0.0) = 1.570796371 +pow (0.123E2, ~0.0) = 1 +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.123E2, ~inf) = 3.141592503 +pow (0.123E2, ~inf) = 0 +atan2 (0.123E2, nan) = nan +pow (0.123E2, nan) = nan +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.31415927E1, 0.34028235E39) = 9.232312E~39 +pow (0.31415927E1, 0.34028235E39) = inf +atan2 (0.31415927E1, 0.17014117E39) = 1.8464624E~38 +pow (0.31415927E1, 0.17014117E39) = inf +atan2 (0.31415927E1, 0.123E4) = 0.002554134931 +pow (0.31415927E1, 0.123E4) = inf +atan2 (0.31415927E1, 0.123E2) = 0.2500677109 +pow (0.31415927E1, 0.123E2) = 1302997.75 +atan2 (0.31415927E1, 0.31415927E1) = 0.7853981853 +pow (0.31415927E1, 0.31415927E1) = 36.46216583 +atan2 (0.31415927E1, 0.27182817E1) = 0.8575118184 +pow (0.31415927E1, 0.27182817E1) = 22.45915794 +atan2 (0.31415927E1, 0.123E1) = 1.19762063 +pow (0.31415927E1, 0.123E1) = 4.087844372 +atan2 (0.31415927E1, 0.123) = 1.531664252 +pow (0.31415927E1, 0.123) = 1.15119648 +atan2 (0.31415927E1, 0.123E~2) = 1.570404768 +pow (0.31415927E1, 0.123E~2) = 1.001409054 +atan2 (0.31415927E1, 0.11754944E~37) = 1.570796371 +pow (0.31415927E1, 0.11754944E~37) = 1 +atan2 (0.31415927E1, 0.5877472E~38) = 1.570796371 +pow (0.31415927E1, 0.5877472E~38) = 1 +atan2 (0.31415927E1, 0.1E~44) = 1.570796371 +pow (0.31415927E1, 0.1E~44) = 1 +atan2 (0.31415927E1, 0.0) = 1.570796371 +pow (0.31415927E1, 0.0) = 1 +atan2 (0.31415927E1, ~0.34028235E39) = 3.141592503 +pow (0.31415927E1, ~0.34028235E39) = 0 +atan2 (0.31415927E1, ~0.17014117E39) = 3.141592503 +pow (0.31415927E1, ~0.17014117E39) = 0 +atan2 (0.31415927E1, ~0.123E4) = 3.139038563 +pow (0.31415927E1, ~0.123E4) = 0 +atan2 (0.31415927E1, ~0.123E2) = 2.89152503 +pow (0.31415927E1, ~0.123E2) = 7.674610174E~7 +atan2 (0.31415927E1, ~0.31415927E1) = 2.356194496 +pow (0.31415927E1, ~0.31415927E1) = 0.02742568776 +atan2 (0.31415927E1, ~0.27182817E1) = 2.284080744 +pow (0.31415927E1, ~0.27182817E1) = 0.04452526942 +atan2 (0.31415927E1, ~0.123E1) = 1.943971992 +pow (0.31415927E1, ~0.123E1) = 0.2446276993 +atan2 (0.31415927E1, ~0.123) = 1.609928489 +pow (0.31415927E1, ~0.123) = 0.8686614633 +atan2 (0.31415927E1, ~0.123E~2) = 1.571187854 +pow (0.31415927E1, ~0.123E~2) = 0.9985929728 +atan2 (0.31415927E1, ~0.11754944E~37) = 1.570796371 +pow (0.31415927E1, ~0.11754944E~37) = 1 +atan2 (0.31415927E1, ~0.5877472E~38) = 1.570796371 +pow (0.31415927E1, ~0.5877472E~38) = 1 +atan2 (0.31415927E1, ~0.1E~44) = 1.570796371 +pow (0.31415927E1, ~0.1E~44) = 1 +atan2 (0.31415927E1, ~0.0) = 1.570796371 +pow (0.31415927E1, ~0.0) = 1 +atan2 (0.31415927E1, inf) = 0 +pow (0.31415927E1, inf) = inf +atan2 (0.31415927E1, ~inf) = 3.141592503 +pow (0.31415927E1, ~inf) = 0 +atan2 (0.31415927E1, nan) = nan +pow (0.31415927E1, nan) = nan +atan2 (0.31415927E1, inf) = 0 +pow (0.31415927E1, inf) = inf +atan2 (0.27182817E1, 0.34028235E39) = 7.988312091E~39 +pow (0.27182817E1, 0.34028235E39) = inf +atan2 (0.27182817E1, 0.17014117E39) = 1.597662558E~38 +pow (0.27182817E1, 0.17014117E39) = inf +atan2 (0.27182817E1, 0.123E4) = 0.002209981671 +pow (0.27182817E1, 0.123E4) = inf +atan2 (0.27182817E1, 0.123E2) = 0.2175025195 +pow (0.27182817E1, 0.123E2) = 219695.9531 +atan2 (0.27182817E1, 0.31415927E1) = 0.7132844925 +pow (0.27182817E1, 0.31415927E1) = 23.14069176 +atan2 (0.27182817E1, 0.27182817E1) = 0.7853981853 +pow (0.27182817E1, 0.27182817E1) = 15.15425968 +atan2 (0.27182817E1, 0.123E1) = 1.145872235 +pow (0.27182817E1, 0.123E1) = 3.421229362 +atan2 (0.27182817E1, 0.123) = 1.525578022 +pow (0.27182817E1, 0.123) = 1.130884409 +atan2 (0.27182817E1, 0.123E~2) = 1.570343852 +pow (0.27182817E1, 0.123E~2) = 1.001230717 +atan2 (0.27182817E1, 0.11754944E~37) = 1.570796371 +pow (0.27182817E1, 0.11754944E~37) = 1 +atan2 (0.27182817E1, 0.5877472E~38) = 1.570796371 +pow (0.27182817E1, 0.5877472E~38) = 1 +atan2 (0.27182817E1, 0.1E~44) = 1.570796371 +pow (0.27182817E1, 0.1E~44) = 1 +atan2 (0.27182817E1, 0.0) = 1.570796371 +pow (0.27182817E1, 0.0) = 1 +atan2 (0.27182817E1, ~0.34028235E39) = 3.141592503 +pow (0.27182817E1, ~0.34028235E39) = 0 +atan2 (0.27182817E1, ~0.17014117E39) = 3.141592503 +pow (0.27182817E1, ~0.17014117E39) = 0 +atan2 (0.27182817E1, ~0.123E4) = 3.139382601 +pow (0.27182817E1, ~0.123E4) = 0 +atan2 (0.27182817E1, ~0.123E2) = 2.924090147 +pow (0.27182817E1, ~0.123E2) = 4.551745405E~6 +atan2 (0.27182817E1, ~0.31415927E1) = 2.428308249 +pow (0.27182817E1, ~0.31415927E1) = 0.04321391881 +atan2 (0.27182817E1, ~0.27182817E1) = 2.356194496 +pow (0.27182817E1, ~0.27182817E1) = 0.06598804891 +atan2 (0.27182817E1, ~0.123E1) = 1.995720506 +pow (0.27182817E1, ~0.123E1) = 0.2922925949 +atan2 (0.27182817E1, ~0.123) = 1.6160146 +pow (0.27182817E1, ~0.123) = 0.8842636347 +atan2 (0.27182817E1, ~0.123E~2) = 1.57124877 +pow (0.27182817E1, ~0.123E~2) = 0.9987707734 +atan2 (0.27182817E1, ~0.11754944E~37) = 1.570796371 +pow (0.27182817E1, ~0.11754944E~37) = 1 +atan2 (0.27182817E1, ~0.5877472E~38) = 1.570796371 +pow (0.27182817E1, ~0.5877472E~38) = 1 +atan2 (0.27182817E1, ~0.1E~44) = 1.570796371 +pow (0.27182817E1, ~0.1E~44) = 1 +atan2 (0.27182817E1, ~0.0) = 1.570796371 +pow (0.27182817E1, ~0.0) = 1 +atan2 (0.27182817E1, inf) = 0 +pow (0.27182817E1, inf) = inf +atan2 (0.27182817E1, ~inf) = 3.141592503 +pow (0.27182817E1, ~inf) = 0 +atan2 (0.27182817E1, nan) = nan +pow (0.27182817E1, nan) = nan +atan2 (0.27182817E1, inf) = 0 +pow (0.27182817E1, inf) = inf +atan2 (0.123E1, 0.34028235E39) = 3.614645185E~39 +pow (0.123E1, 0.34028235E39) = inf +atan2 (0.123E1, 0.17014117E39) = 7.22929037E~39 +pow (0.123E1, 0.17014117E39) = inf +atan2 (0.123E1, 0.123E4) = 9.999996983E~4 +pow (0.123E1, 0.123E4) = inf +atan2 (0.123E1, 0.123E2) = 0.09966865182 +pow (0.123E1, 0.123E2) = 12.75947952 +atan2 (0.123E1, 0.31415927E1) = 0.3731757104 +pow (0.123E1, 0.31415927E1) = 1.916219592 +atan2 (0.123E1, 0.27182817E1) = 0.4249241352 +pow (0.123E1, 0.27182817E1) = 1.755445838 +atan2 (0.123E1, 0.123E1) = 0.7853981853 +pow (0.123E1, 0.123E1) = 1.289981008 +atan2 (0.123E1, 0.123) = 1.471127629 +pow (0.123E1, 0.123) = 1.025789738 +atan2 (0.123E1, 0.123E~2) = 1.569796324 +pow (0.123E1, 0.123E~2) = 1.000254631 +atan2 (0.123E1, 0.11754944E~37) = 1.570796371 +pow (0.123E1, 0.11754944E~37) = 1 +atan2 (0.123E1, 0.5877472E~38) = 1.570796371 +pow (0.123E1, 0.5877472E~38) = 1 +atan2 (0.123E1, 0.1E~44) = 1.570796371 +pow (0.123E1, 0.1E~44) = 1 +atan2 (0.123E1, 0.0) = 1.570796371 +pow (0.123E1, 0.0) = 1 +atan2 (0.123E1, ~0.34028235E39) = 3.141592503 +pow (0.123E1, ~0.34028235E39) = 0 +atan2 (0.123E1, ~0.17014117E39) = 3.141592503 +pow (0.123E1, ~0.17014117E39) = 0 +atan2 (0.123E1, ~0.123E4) = 3.140592575 +pow (0.123E1, ~0.123E4) = 0 +atan2 (0.123E1, ~0.123E2) = 3.041924 +pow (0.123E1, ~0.123E2) = 0.07837310433 +atan2 (0.123E1, ~0.31415927E1) = 2.768416882 +pow (0.123E1, ~0.31415927E1) = 0.5218608975 +atan2 (0.123E1, ~0.27182817E1) = 2.716668606 +pow (0.123E1, ~0.27182817E1) = 0.5696558356 +atan2 (0.123E1, ~0.123E1) = 2.356194496 +pow (0.123E1, ~0.123E1) = 0.7752052546 +atan2 (0.123E1, ~0.123) = 1.670464993 +pow (0.123E1, ~0.123) = 0.9748587012 +atan2 (0.123E1, ~0.123E~2) = 1.571796298 +pow (0.123E1, ~0.123E~2) = 0.9997454286 +atan2 (0.123E1, ~0.11754944E~37) = 1.570796371 +pow (0.123E1, ~0.11754944E~37) = 1 +atan2 (0.123E1, ~0.5877472E~38) = 1.570796371 +pow (0.123E1, ~0.5877472E~38) = 1 +atan2 (0.123E1, ~0.1E~44) = 1.570796371 +pow (0.123E1, ~0.1E~44) = 1 +atan2 (0.123E1, ~0.0) = 1.570796371 +pow (0.123E1, ~0.0) = 1 +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123E1, ~inf) = 3.141592503 +pow (0.123E1, ~inf) = 0 +atan2 (0.123E1, nan) = nan +pow (0.123E1, nan) = nan +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123, 0.34028235E39) = 3.614649389E~40 +pow (0.123, 0.34028235E39) = 0 +atan2 (0.123, 0.17014117E39) = 7.229284764E~40 +pow (0.123, 0.17014117E39) = 0 +atan2 (0.123, 0.123E4) = 1.000000047E~4 +pow (0.123, 0.123E4) = 0 +atan2 (0.123, 0.123E2) = 0.009999666363 +pow (0.123, 0.123E2) = 6.394886357E~12 +atan2 (0.123, 0.31415927E1) = 0.0391321294 +pow (0.123, 0.31415927E1) = 0.001383096678 +atan2 (0.123, 0.27182817E1) = 0.04521832988 +pow (0.123, 0.27182817E1) = 0.00335819344 +atan2 (0.123, 0.123E1) = 0.09966865182 +pow (0.123, 0.123E1) = 0.07595970482 +atan2 (0.123, 0.123) = 0.7853981853 +pow (0.123, 0.123) = 0.7727843523 +atan2 (0.123, 0.123E~2) = 1.560796618 +pow (0.123, 0.123E~2) = 0.9974257946 +atan2 (0.123, 0.11754944E~37) = 1.570796371 +pow (0.123, 0.11754944E~37) = 1 +atan2 (0.123, 0.5877472E~38) = 1.570796371 +pow (0.123, 0.5877472E~38) = 1 +atan2 (0.123, 0.1E~44) = 1.570796371 +pow (0.123, 0.1E~44) = 1 +atan2 (0.123, 0.0) = 1.570796371 +pow (0.123, 0.0) = 1 +atan2 (0.123, ~0.34028235E39) = 3.141592503 +pow (0.123, ~0.34028235E39) = inf +atan2 (0.123, ~0.17014117E39) = 3.141592503 +pow (0.123, ~0.17014117E39) = inf +atan2 (0.123, ~0.123E4) = 3.141492605 +pow (0.123, ~0.123E4) = inf +atan2 (0.123, ~0.123E2) = 3.131592989 +pow (0.123, ~0.123E2) = 156374941700 +atan2 (0.123, ~0.31415927E1) = 3.102460623 +pow (0.123, ~0.31415927E1) = 723.0152588 +atan2 (0.123, ~0.27182817E1) = 3.096374273 +pow (0.123, ~0.27182817E1) = 297.7791443 +atan2 (0.123, ~0.123E1) = 3.041924 +pow (0.123, ~0.123E1) = 13.16487408 +atan2 (0.123, ~0.123) = 2.356194496 +pow (0.123, ~0.123) = 1.294022083 +atan2 (0.123, ~0.123E~2) = 1.580796003 +pow (0.123, ~0.123E~2) = 1.002580881 +atan2 (0.123, ~0.11754944E~37) = 1.570796371 +pow (0.123, ~0.11754944E~37) = 1 +atan2 (0.123, ~0.5877472E~38) = 1.570796371 +pow (0.123, ~0.5877472E~38) = 1 +atan2 (0.123, ~0.1E~44) = 1.570796371 +pow (0.123, ~0.1E~44) = 1 +atan2 (0.123, ~0.0) = 1.570796371 +pow (0.123, ~0.0) = 1 +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123, ~inf) = 3.141592503 +pow (0.123, ~inf) = inf +atan2 (0.123, nan) = nan +pow (0.123, nan) = nan +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123E~2, 0.34028235E39) = 3.613948739E~42 +pow (0.123E~2, 0.34028235E39) = 0 +atan2 (0.123E~2, 0.17014117E39) = 7.229298777E~42 +pow (0.123E~2, 0.17014117E39) = 0 +atan2 (0.123E~2, 0.123E4) = 9.999999975E~7 +pow (0.123E~2, 0.123E4) = 0 +atan2 (0.123E~2, 0.123E2) = 1.000000047E~4 +pow (0.123E~2, 0.123E2) = 1.606321748E~36 +atan2 (0.123E~2, 0.31415927E1) = 3.915211419E~4 +pow (0.123E~2, 0.31415927E1) = 7.205548935E~10 +atan2 (0.123E~2, 0.27182817E1) = 4.524917167E~4 +pow (0.123E~2, 0.27182817E1) = 1.228972657E~8 +atan2 (0.123E~2, 0.123E1) = 9.999996983E~4 +pow (0.123E~2, 0.123E1) = 2.633802651E~4 +atan2 (0.123E~2, 0.123) = 0.009999667294 +pow (0.123E~2, 0.123) = 0.4385896027 +atan2 (0.123E~2, 0.123E~2) = 0.7853981853 +pow (0.123E~2, 0.123E~2) = 0.9917919636 +atan2 (0.123E~2, 0.11754944E~37) = 1.570796371 +pow (0.123E~2, 0.11754944E~37) = 1 +atan2 (0.123E~2, 0.5877472E~38) = 1.570796371 +pow (0.123E~2, 0.5877472E~38) = 1 +atan2 (0.123E~2, 0.1E~44) = 1.570796371 +pow (0.123E~2, 0.1E~44) = 1 +atan2 (0.123E~2, 0.0) = 1.570796371 +pow (0.123E~2, 0.0) = 1 +atan2 (0.123E~2, ~0.34028235E39) = 3.141592503 +pow (0.123E~2, ~0.34028235E39) = inf +atan2 (0.123E~2, ~0.17014117E39) = 3.141592503 +pow (0.123E~2, ~0.17014117E39) = inf +atan2 (0.123E~2, ~0.123E4) = 3.141591549 +pow (0.123E~2, ~0.123E4) = inf +atan2 (0.123E~2, ~0.123E2) = 3.141492605 +pow (0.123E~2, ~0.123E2) = 6.225402783E35 +atan2 (0.123E~2, ~0.31415927E1) = 3.141201019 +pow (0.123E~2, ~0.31415927E1) = 1387819264 +atan2 (0.123E~2, ~0.27182817E1) = 3.141140223 +pow (0.123E~2, ~0.27182817E1) = 81368776 +atan2 (0.123E~2, ~0.123E1) = 3.140592575 +pow (0.123E~2, ~0.123E1) = 3796.791504 +atan2 (0.123E~2, ~0.123) = 3.131592989 +pow (0.123E~2, ~0.123) = 2.280035973 +atan2 (0.123E~2, ~0.123E~2) = 2.356194496 +pow (0.123E~2, ~0.123E~2) = 1.008275986 +atan2 (0.123E~2, ~0.11754944E~37) = 1.570796371 +pow (0.123E~2, ~0.11754944E~37) = 1 +atan2 (0.123E~2, ~0.5877472E~38) = 1.570796371 +pow (0.123E~2, ~0.5877472E~38) = 1 +atan2 (0.123E~2, ~0.1E~44) = 1.570796371 +pow (0.123E~2, ~0.1E~44) = 1 +atan2 (0.123E~2, ~0.0) = 1.570796371 +pow (0.123E~2, ~0.0) = 1 +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.123E~2, ~inf) = 3.141592503 +pow (0.123E~2, ~inf) = inf +atan2 (0.123E~2, nan) = nan +pow (0.123E~2, nan) = nan +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.11754944E~37, 0.34028235E39) = 0 +pow (0.11754944E~37, 0.34028235E39) = 0 +atan2 (0.11754944E~37, 0.17014117E39) = 0 +pow (0.11754944E~37, 0.17014117E39) = 0 +atan2 (0.11754944E~37, 0.123E4) = 9.556855527E~42 +pow (0.11754944E~37, 0.123E4) = 0 +atan2 (0.11754944E~37, 0.123E2) = 9.55686954E~40 +pow (0.11754944E~37, 0.123E2) = 0 +atan2 (0.11754944E~37, 0.31415927E1) = 3.74171493E~39 +pow (0.11754944E~37, 0.31415927E1) = 0 +atan2 (0.11754944E~37, 0.27182817E1) = 4.324402857E~39 +pow (0.11754944E~37, 0.27182817E1) = 0 +atan2 (0.11754944E~37, 0.123E1) = 9.556863934E~39 +pow (0.11754944E~37, 0.123E1) = 0 +atan2 (0.11754944E~37, 0.123) = 9.556864495E~38 +pow (0.11754944E~37, 0.123) = 2.160911572E~5 +atan2 (0.11754944E~37, 0.123E~2) = 9.556864495E~36 +pow (0.11754944E~37, 0.123E~2) = 0.8981448412 +atan2 (0.11754944E~37, 0.11754944E~37) = 0.7853981853 +pow (0.11754944E~37, 0.11754944E~37) = 1 +atan2 (0.11754944E~37, 0.5877472E~38) = 1.107148767 +pow (0.11754944E~37, 0.5877472E~38) = 1 +atan2 (0.11754944E~37, 0.1E~44) = 1.570796251 +pow (0.11754944E~37, 0.1E~44) = 1 +atan2 (0.11754944E~37, 0.0) = 1.570796371 +pow (0.11754944E~37, 0.0) = 1 +atan2 (0.11754944E~37, ~0.34028235E39) = 3.141592503 +pow (0.11754944E~37, ~0.34028235E39) = inf +atan2 (0.11754944E~37, ~0.17014117E39) = 3.141592503 +pow (0.11754944E~37, ~0.17014117E39) = inf +atan2 (0.11754944E~37, ~0.123E4) = 3.141592503 +pow (0.11754944E~37, ~0.123E4) = inf +atan2 (0.11754944E~37, ~0.123E2) = 3.141592503 +pow (0.11754944E~37, ~0.123E2) = inf +atan2 (0.11754944E~37, ~0.31415927E1) = 3.141592503 +pow (0.11754944E~37, ~0.31415927E1) = inf +atan2 (0.11754944E~37, ~0.27182817E1) = 3.141592503 +pow (0.11754944E~37, ~0.27182817E1) = inf +atan2 (0.11754944E~37, ~0.123E1) = 3.141592503 +pow (0.11754944E~37, ~0.123E1) = inf +atan2 (0.11754944E~37, ~0.123) = 3.141592503 +pow (0.11754944E~37, ~0.123) = 46276.76562 +atan2 (0.11754944E~37, ~0.123E~2) = 3.141592503 +pow (0.11754944E~37, ~0.123E~2) = 1.113406181 +atan2 (0.11754944E~37, ~0.11754944E~37) = 2.356194496 +pow (0.11754944E~37, ~0.11754944E~37) = 1 +atan2 (0.11754944E~37, ~0.5877472E~38) = 2.034443855 +pow (0.11754944E~37, ~0.5877472E~38) = 1 +atan2 (0.11754944E~37, ~0.1E~44) = 1.57079649 +pow (0.11754944E~37, ~0.1E~44) = 1 +atan2 (0.11754944E~37, ~0.0) = 1.570796371 +pow (0.11754944E~37, ~0.0) = 1 +atan2 (0.11754944E~37, inf) = 0 +pow (0.11754944E~37, inf) = 0 +atan2 (0.11754944E~37, ~inf) = 3.141592503 +pow (0.11754944E~37, ~inf) = inf +atan2 (0.11754944E~37, nan) = nan +pow (0.11754944E~37, nan) = nan +atan2 (0.11754944E~37, inf) = 0 +pow (0.11754944E~37, inf) = 0 +atan2 (0.5877472E~38, 0.34028235E39) = 0 +pow (0.5877472E~38, 0.34028235E39) = 0 +atan2 (0.5877472E~38, 0.17014117E39) = 0 +pow (0.5877472E~38, 0.17014117E39) = 0 +atan2 (0.5877472E~38, 0.123E4) = 4.778427763E~42 +pow (0.5877472E~38, 0.123E4) = 0 +atan2 (0.5877472E~38, 0.123E2) = 4.778427763E~40 +pow (0.5877472E~38, 0.123E2) = 0 +atan2 (0.5877472E~38, 0.31415927E1) = 1.870856764E~39 +pow (0.5877472E~38, 0.31415927E1) = 0 +atan2 (0.5877472E~38, 0.27182817E1) = 2.162200728E~39 +pow (0.5877472E~38, 0.27182817E1) = 0 +atan2 (0.5877472E~38, 0.123E1) = 4.778431967E~39 +pow (0.5877472E~38, 0.123E1) = 0 +atan2 (0.5877472E~38, 0.123) = 4.778432248E~38 +pow (0.5877472E~38, 0.123) = 1.984313531E~5 +atan2 (0.5877472E~38, 0.123E~2) = 4.778432248E~36 +pow (0.5877472E~38, 0.123E~2) = 0.8973793983 +atan2 (0.5877472E~38, 0.11754944E~37) = 0.463647604 +pow (0.5877472E~38, 0.11754944E~37) = 1 +atan2 (0.5877472E~38, 0.5877472E~38) = 0.7853981853 +pow (0.5877472E~38, 0.5877472E~38) = 1 +atan2 (0.5877472E~38, 0.1E~44) = 1.570796132 +pow (0.5877472E~38, 0.1E~44) = 1 +atan2 (0.5877472E~38, 0.0) = 1.570796371 +pow (0.5877472E~38, 0.0) = 1 +atan2 (0.5877472E~38, ~0.34028235E39) = 3.141592503 +pow (0.5877472E~38, ~0.34028235E39) = inf +atan2 (0.5877472E~38, ~0.17014117E39) = 3.141592503 +pow (0.5877472E~38, ~0.17014117E39) = inf +atan2 (0.5877472E~38, ~0.123E4) = 3.141592503 +pow (0.5877472E~38, ~0.123E4) = inf +atan2 (0.5877472E~38, ~0.123E2) = 3.141592503 +pow (0.5877472E~38, ~0.123E2) = inf +atan2 (0.5877472E~38, ~0.31415927E1) = 3.141592503 +pow (0.5877472E~38, ~0.31415927E1) = inf +atan2 (0.5877472E~38, ~0.27182817E1) = 3.141592503 +pow (0.5877472E~38, ~0.27182817E1) = inf +atan2 (0.5877472E~38, ~0.123E1) = 3.141592503 +pow (0.5877472E~38, ~0.123E1) = inf +atan2 (0.5877472E~38, ~0.123) = 3.141592503 +pow (0.5877472E~38, ~0.123) = 50395.26172 +atan2 (0.5877472E~38, ~0.123E~2) = 3.141592503 +pow (0.5877472E~38, ~0.123E~2) = 1.114355803 +atan2 (0.5877472E~38, ~0.11754944E~37) = 2.677945137 +pow (0.5877472E~38, ~0.11754944E~37) = 1 +atan2 (0.5877472E~38, ~0.5877472E~38) = 2.356194496 +pow (0.5877472E~38, ~0.5877472E~38) = 1 +atan2 (0.5877472E~38, ~0.1E~44) = 1.570796609 +pow (0.5877472E~38, ~0.1E~44) = 1 +atan2 (0.5877472E~38, ~0.0) = 1.570796371 +pow (0.5877472E~38, ~0.0) = 1 +atan2 (0.5877472E~38, inf) = 0 +pow (0.5877472E~38, inf) = 0 +atan2 (0.5877472E~38, ~inf) = 3.141592503 +pow (0.5877472E~38, ~inf) = inf +atan2 (0.5877472E~38, nan) = nan +pow (0.5877472E~38, nan) = nan +atan2 (0.5877472E~38, inf) = 0 +pow (0.5877472E~38, inf) = 0 +atan2 (0.1E~44, 0.34028235E39) = 0 +pow (0.1E~44, 0.34028235E39) = 0 +atan2 (0.1E~44, 0.17014117E39) = 0 +pow (0.1E~44, 0.17014117E39) = 0 +atan2 (0.1E~44, 0.123E4) = 0 +pow (0.1E~44, 0.123E4) = 0 +atan2 (0.1E~44, 0.123E2) = 0 +pow (0.1E~44, 0.123E2) = 0 +atan2 (0.1E~44, 0.31415927E1) = 0 +pow (0.1E~44, 0.31415927E1) = 0 +atan2 (0.1E~44, 0.27182817E1) = 0 +pow (0.1E~44, 0.27182817E1) = 0 +atan2 (0.1E~44, 0.123E1) = 1.401298464E~45 +pow (0.1E~44, 0.123E1) = 0 +atan2 (0.1E~44, 0.123) = 1.121038771E~44 +pow (0.1E~44, 0.123) = 3.041046966E~6 +atan2 (0.1E~44, 0.123E~2) = 1.139255651E~42 +pow (0.1E~44, 0.123E~2) = 0.8807045221 +atan2 (0.1E~44, 0.11754944E~37) = 1.192092896E~7 +pow (0.1E~44, 0.11754944E~37) = 1 +atan2 (0.1E~44, 0.5877472E~38) = 2.384185791E~7 +pow (0.1E~44, 0.5877472E~38) = 1 +atan2 (0.1E~44, 0.1E~44) = 0.7853981853 +pow (0.1E~44, 0.1E~44) = 1 +atan2 (0.1E~44, 0.0) = 1.570796371 +pow (0.1E~44, 0.0) = 1 +atan2 (0.1E~44, ~0.34028235E39) = 3.141592503 +pow (0.1E~44, ~0.34028235E39) = inf +atan2 (0.1E~44, ~0.17014117E39) = 3.141592503 +pow (0.1E~44, ~0.17014117E39) = inf +atan2 (0.1E~44, ~0.123E4) = 3.141592503 +pow (0.1E~44, ~0.123E4) = inf +atan2 (0.1E~44, ~0.123E2) = 3.141592503 +pow (0.1E~44, ~0.123E2) = inf +atan2 (0.1E~44, ~0.31415927E1) = 3.141592503 +pow (0.1E~44, ~0.31415927E1) = inf +atan2 (0.1E~44, ~0.27182817E1) = 3.141592503 +pow (0.1E~44, ~0.27182817E1) = inf +atan2 (0.1E~44, ~0.123E1) = 3.141592503 +pow (0.1E~44, ~0.123E1) = inf +atan2 (0.1E~44, ~0.123) = 3.141592503 +pow (0.1E~44, ~0.123) = 328834.125 +atan2 (0.1E~44, ~0.123E~2) = 3.141592503 +pow (0.1E~44, ~0.123E~2) = 1.135454535 +atan2 (0.1E~44, ~0.11754944E~37) = 3.141592503 +pow (0.1E~44, ~0.11754944E~37) = 1 +atan2 (0.1E~44, ~0.5877472E~38) = 3.141592503 +pow (0.1E~44, ~0.5877472E~38) = 1 +atan2 (0.1E~44, ~0.1E~44) = 2.356194496 +pow (0.1E~44, ~0.1E~44) = 1 +atan2 (0.1E~44, ~0.0) = 1.570796371 +pow (0.1E~44, ~0.0) = 1 +atan2 (0.1E~44, inf) = 0 +pow (0.1E~44, inf) = 0 +atan2 (0.1E~44, ~inf) = 3.141592503 +pow (0.1E~44, ~inf) = inf +atan2 (0.1E~44, nan) = nan +pow (0.1E~44, nan) = nan +atan2 (0.1E~44, inf) = 0 +pow (0.1E~44, inf) = 0 +atan2 (0.0, 0.34028235E39) = 0 +pow (0.0, 0.34028235E39) = 0 +atan2 (0.0, 0.17014117E39) = 0 +pow (0.0, 0.17014117E39) = 0 +atan2 (0.0, 0.123E4) = 0 +pow (0.0, 0.123E4) = 0 +atan2 (0.0, 0.123E2) = 0 +pow (0.0, 0.123E2) = 0 +atan2 (0.0, 0.31415927E1) = 0 +pow (0.0, 0.31415927E1) = 0 +atan2 (0.0, 0.27182817E1) = 0 +pow (0.0, 0.27182817E1) = 0 +atan2 (0.0, 0.123E1) = 0 +pow (0.0, 0.123E1) = 0 +atan2 (0.0, 0.123) = 0 +pow (0.0, 0.123) = 0 +atan2 (0.0, 0.123E~2) = 0 +pow (0.0, 0.123E~2) = 0 +atan2 (0.0, 0.11754944E~37) = 0 +pow (0.0, 0.11754944E~37) = 0 +atan2 (0.0, 0.5877472E~38) = 0 +pow (0.0, 0.5877472E~38) = 0 +atan2 (0.0, 0.1E~44) = 0 +pow (0.0, 0.1E~44) = 0 +atan2 (0.0, 0.0) = 0 +pow (0.0, 0.0) = 1 +atan2 (0.0, ~0.34028235E39) = 3.141592503 +pow (0.0, ~0.34028235E39) = inf +atan2 (0.0, ~0.17014117E39) = 3.141592503 +pow (0.0, ~0.17014117E39) = inf +atan2 (0.0, ~0.123E4) = 3.141592503 +pow (0.0, ~0.123E4) = inf +atan2 (0.0, ~0.123E2) = 3.141592503 +pow (0.0, ~0.123E2) = inf +atan2 (0.0, ~0.31415927E1) = 3.141592503 +pow (0.0, ~0.31415927E1) = inf +atan2 (0.0, ~0.27182817E1) = 3.141592503 +pow (0.0, ~0.27182817E1) = inf +atan2 (0.0, ~0.123E1) = 3.141592503 +pow (0.0, ~0.123E1) = inf +atan2 (0.0, ~0.123) = 3.141592503 +pow (0.0, ~0.123) = inf +atan2 (0.0, ~0.123E~2) = 3.141592503 +pow (0.0, ~0.123E~2) = inf +atan2 (0.0, ~0.11754944E~37) = 3.141592503 +pow (0.0, ~0.11754944E~37) = inf +atan2 (0.0, ~0.5877472E~38) = 3.141592503 +pow (0.0, ~0.5877472E~38) = inf +atan2 (0.0, ~0.1E~44) = 3.141592503 +pow (0.0, ~0.1E~44) = inf +atan2 (0.0, ~0.0) = 3.141592503 +pow (0.0, ~0.0) = 1 +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (0.0, ~inf) = 3.141592503 +pow (0.0, ~inf) = inf +atan2 (0.0, nan) = nan +pow (0.0, nan) = nan +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (~0.34028235E39, 0.34028235E39) = ~0.7853981853 +pow (~0.34028235E39, 0.34028235E39) = inf +atan2 (~0.34028235E39, 0.17014117E39) = ~1.107148767 +pow (~0.34028235E39, 0.17014117E39) = inf +atan2 (~0.34028235E39, 0.123E4) = ~1.570796371 +pow (~0.34028235E39, 0.123E4) = inf +atan2 (~0.34028235E39, 0.123E2) = ~1.570796371 +pow (~0.34028235E39, 0.123E2) = nan +atan2 (~0.34028235E39, 0.31415927E1) = ~1.570796371 +pow (~0.34028235E39, 0.31415927E1) = nan +atan2 (~0.34028235E39, 0.27182817E1) = ~1.570796371 +pow (~0.34028235E39, 0.27182817E1) = nan +atan2 (~0.34028235E39, 0.123E1) = ~1.570796371 +pow (~0.34028235E39, 0.123E1) = nan +atan2 (~0.34028235E39, 0.123) = ~1.570796371 +pow (~0.34028235E39, 0.123) = nan +atan2 (~0.34028235E39, 0.123E~2) = ~1.570796371 +pow (~0.34028235E39, 0.123E~2) = nan +atan2 (~0.34028235E39, 0.11754944E~37) = ~1.570796371 +pow (~0.34028235E39, 0.11754944E~37) = nan +atan2 (~0.34028235E39, 0.5877472E~38) = ~1.570796371 +pow (~0.34028235E39, 0.5877472E~38) = nan +atan2 (~0.34028235E39, 0.1E~44) = ~1.570796371 +pow (~0.34028235E39, 0.1E~44) = nan +atan2 (~0.34028235E39, 0.0) = ~1.570796371 +pow (~0.34028235E39, 0.0) = 1 +atan2 (~0.34028235E39, ~0.34028235E39) = ~2.356194496 +pow (~0.34028235E39, ~0.34028235E39) = 0 +atan2 (~0.34028235E39, ~0.17014117E39) = ~2.034443855 +pow (~0.34028235E39, ~0.17014117E39) = 0 +atan2 (~0.34028235E39, ~0.123E4) = ~1.570796371 +pow (~0.34028235E39, ~0.123E4) = 0 +atan2 (~0.34028235E39, ~0.123E2) = ~1.570796371 +pow (~0.34028235E39, ~0.123E2) = nan +atan2 (~0.34028235E39, ~0.31415927E1) = ~1.570796371 +pow (~0.34028235E39, ~0.31415927E1) = nan +atan2 (~0.34028235E39, ~0.27182817E1) = ~1.570796371 +pow (~0.34028235E39, ~0.27182817E1) = nan +atan2 (~0.34028235E39, ~0.123E1) = ~1.570796371 +pow (~0.34028235E39, ~0.123E1) = nan +atan2 (~0.34028235E39, ~0.123) = ~1.570796371 +pow (~0.34028235E39, ~0.123) = nan +atan2 (~0.34028235E39, ~0.123E~2) = ~1.570796371 +pow (~0.34028235E39, ~0.123E~2) = nan +atan2 (~0.34028235E39, ~0.11754944E~37) = ~1.570796371 +pow (~0.34028235E39, ~0.11754944E~37) = nan +atan2 (~0.34028235E39, ~0.5877472E~38) = ~1.570796371 +pow (~0.34028235E39, ~0.5877472E~38) = nan +atan2 (~0.34028235E39, ~0.1E~44) = ~1.570796371 +pow (~0.34028235E39, ~0.1E~44) = nan +atan2 (~0.34028235E39, ~0.0) = ~1.570796371 +pow (~0.34028235E39, ~0.0) = 1 +atan2 (~0.34028235E39, inf) = 0 +pow (~0.34028235E39, inf) = inf +atan2 (~0.34028235E39, ~inf) = ~3.141592503 +pow (~0.34028235E39, ~inf) = 0 +atan2 (~0.34028235E39, nan) = nan +pow (~0.34028235E39, nan) = nan +atan2 (~0.34028235E39, inf) = 0 +pow (~0.34028235E39, inf) = inf +atan2 (~0.17014117E39, 0.34028235E39) = ~0.463647604 +pow (~0.17014117E39, 0.34028235E39) = inf +atan2 (~0.17014117E39, 0.17014117E39) = ~0.7853981853 +pow (~0.17014117E39, 0.17014117E39) = inf +atan2 (~0.17014117E39, 0.123E4) = ~1.570796371 +pow (~0.17014117E39, 0.123E4) = inf +atan2 (~0.17014117E39, 0.123E2) = ~1.570796371 +pow (~0.17014117E39, 0.123E2) = nan +atan2 (~0.17014117E39, 0.31415927E1) = ~1.570796371 +pow (~0.17014117E39, 0.31415927E1) = nan +atan2 (~0.17014117E39, 0.27182817E1) = ~1.570796371 +pow (~0.17014117E39, 0.27182817E1) = nan +atan2 (~0.17014117E39, 0.123E1) = ~1.570796371 +pow (~0.17014117E39, 0.123E1) = nan +atan2 (~0.17014117E39, 0.123) = ~1.570796371 +pow (~0.17014117E39, 0.123) = nan +atan2 (~0.17014117E39, 0.123E~2) = ~1.570796371 +pow (~0.17014117E39, 0.123E~2) = nan +atan2 (~0.17014117E39, 0.11754944E~37) = ~1.570796371 +pow (~0.17014117E39, 0.11754944E~37) = nan +atan2 (~0.17014117E39, 0.5877472E~38) = ~1.570796371 +pow (~0.17014117E39, 0.5877472E~38) = nan +atan2 (~0.17014117E39, 0.1E~44) = ~1.570796371 +pow (~0.17014117E39, 0.1E~44) = nan +atan2 (~0.17014117E39, 0.0) = ~1.570796371 +pow (~0.17014117E39, 0.0) = 1 +atan2 (~0.17014117E39, ~0.34028235E39) = ~2.677945137 +pow (~0.17014117E39, ~0.34028235E39) = 0 +atan2 (~0.17014117E39, ~0.17014117E39) = ~2.356194496 +pow (~0.17014117E39, ~0.17014117E39) = 0 +atan2 (~0.17014117E39, ~0.123E4) = ~1.570796371 +pow (~0.17014117E39, ~0.123E4) = 0 +atan2 (~0.17014117E39, ~0.123E2) = ~1.570796371 +pow (~0.17014117E39, ~0.123E2) = nan +atan2 (~0.17014117E39, ~0.31415927E1) = ~1.570796371 +pow (~0.17014117E39, ~0.31415927E1) = nan +atan2 (~0.17014117E39, ~0.27182817E1) = ~1.570796371 +pow (~0.17014117E39, ~0.27182817E1) = nan +atan2 (~0.17014117E39, ~0.123E1) = ~1.570796371 +pow (~0.17014117E39, ~0.123E1) = nan +atan2 (~0.17014117E39, ~0.123) = ~1.570796371 +pow (~0.17014117E39, ~0.123) = nan +atan2 (~0.17014117E39, ~0.123E~2) = ~1.570796371 +pow (~0.17014117E39, ~0.123E~2) = nan +atan2 (~0.17014117E39, ~0.11754944E~37) = ~1.570796371 +pow (~0.17014117E39, ~0.11754944E~37) = nan +atan2 (~0.17014117E39, ~0.5877472E~38) = ~1.570796371 +pow (~0.17014117E39, ~0.5877472E~38) = nan +atan2 (~0.17014117E39, ~0.1E~44) = ~1.570796371 +pow (~0.17014117E39, ~0.1E~44) = nan +atan2 (~0.17014117E39, ~0.0) = ~1.570796371 +pow (~0.17014117E39, ~0.0) = 1 +atan2 (~0.17014117E39, inf) = 0 +pow (~0.17014117E39, inf) = inf +atan2 (~0.17014117E39, ~inf) = ~3.141592503 +pow (~0.17014117E39, ~inf) = 0 +atan2 (~0.17014117E39, nan) = nan +pow (~0.17014117E39, nan) = nan +atan2 (~0.17014117E39, inf) = 0 +pow (~0.17014117E39, inf) = inf +atan2 (~0.123E4, 0.34028235E39) = ~3.614645488E~36 +pow (~0.123E4, 0.34028235E39) = inf +atan2 (~0.123E4, 0.17014117E39) = ~7.229290975E~36 +pow (~0.123E4, 0.17014117E39) = inf +atan2 (~0.123E4, 0.123E4) = ~0.7853981853 +pow (~0.123E4, 0.123E4) = inf +atan2 (~0.123E4, 0.123E2) = ~1.560796618 +pow (~0.123E4, 0.123E2) = nan +atan2 (~0.123E4, 0.31415927E1) = ~1.568242192 +pow (~0.123E4, 0.31415927E1) = nan +atan2 (~0.123E4, 0.27182817E1) = ~1.568586349 +pow (~0.123E4, 0.27182817E1) = nan +atan2 (~0.123E4, 0.123E1) = ~1.569796324 +pow (~0.123E4, 0.123E1) = nan +atan2 (~0.123E4, 0.123) = ~1.570696354 +pow (~0.123E4, 0.123) = nan +atan2 (~0.123E4, 0.123E~2) = ~1.570795298 +pow (~0.123E4, 0.123E~2) = nan +atan2 (~0.123E4, 0.11754944E~37) = ~1.570796371 +pow (~0.123E4, 0.11754944E~37) = nan +atan2 (~0.123E4, 0.5877472E~38) = ~1.570796371 +pow (~0.123E4, 0.5877472E~38) = nan +atan2 (~0.123E4, 0.1E~44) = ~1.570796371 +pow (~0.123E4, 0.1E~44) = nan +atan2 (~0.123E4, 0.0) = ~1.570796371 +pow (~0.123E4, 0.0) = 1 +atan2 (~0.123E4, ~0.34028235E39) = ~3.141592503 +pow (~0.123E4, ~0.34028235E39) = 0 +atan2 (~0.123E4, ~0.17014117E39) = ~3.141592503 +pow (~0.123E4, ~0.17014117E39) = 0 +atan2 (~0.123E4, ~0.123E4) = ~2.356194496 +pow (~0.123E4, ~0.123E4) = 0 +atan2 (~0.123E4, ~0.123E2) = ~1.580796003 +pow (~0.123E4, ~0.123E2) = nan +atan2 (~0.123E4, ~0.31415927E1) = ~1.57335043 +pow (~0.123E4, ~0.31415927E1) = nan +atan2 (~0.123E4, ~0.27182817E1) = ~1.573006272 +pow (~0.123E4, ~0.27182817E1) = nan +atan2 (~0.123E4, ~0.123E1) = ~1.571796298 +pow (~0.123E4, ~0.123E1) = nan +atan2 (~0.123E4, ~0.123) = ~1.570896268 +pow (~0.123E4, ~0.123) = nan +atan2 (~0.123E4, ~0.123E~2) = ~1.570797324 +pow (~0.123E4, ~0.123E~2) = nan +atan2 (~0.123E4, ~0.11754944E~37) = ~1.570796371 +pow (~0.123E4, ~0.11754944E~37) = nan +atan2 (~0.123E4, ~0.5877472E~38) = ~1.570796371 +pow (~0.123E4, ~0.5877472E~38) = nan +atan2 (~0.123E4, ~0.1E~44) = ~1.570796371 +pow (~0.123E4, ~0.1E~44) = nan +atan2 (~0.123E4, ~0.0) = ~1.570796371 +pow (~0.123E4, ~0.0) = 1 +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E4, ~inf) = ~3.141592503 +pow (~0.123E4, ~inf) = 0 +atan2 (~0.123E4, nan) = nan +pow (~0.123E4, nan) = nan +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E2, 0.34028235E39) = ~3.614645465E~38 +pow (~0.123E2, 0.34028235E39) = inf +atan2 (~0.123E2, 0.17014117E39) = ~7.22929093E~38 +pow (~0.123E2, 0.17014117E39) = inf +atan2 (~0.123E2, 0.123E4) = ~0.009999667294 +pow (~0.123E2, 0.123E4) = inf +atan2 (~0.123E2, 0.123E2) = ~0.7853981853 +pow (~0.123E2, 0.123E2) = nan +atan2 (~0.123E2, 0.31415927E1) = ~1.32072866 +pow (~0.123E2, 0.31415927E1) = nan +atan2 (~0.123E2, 0.27182817E1) = ~1.353293777 +pow (~0.123E2, 0.27182817E1) = nan +atan2 (~0.123E2, 0.123E1) = ~1.471127629 +pow (~0.123E2, 0.123E1) = nan +atan2 (~0.123E2, 0.123) = ~1.560796618 +pow (~0.123E2, 0.123) = nan +atan2 (~0.123E2, 0.123E~2) = ~1.570696354 +pow (~0.123E2, 0.123E~2) = nan +atan2 (~0.123E2, 0.11754944E~37) = ~1.570796371 +pow (~0.123E2, 0.11754944E~37) = nan +atan2 (~0.123E2, 0.5877472E~38) = ~1.570796371 +pow (~0.123E2, 0.5877472E~38) = nan +atan2 (~0.123E2, 0.1E~44) = ~1.570796371 +pow (~0.123E2, 0.1E~44) = nan +atan2 (~0.123E2, 0.0) = ~1.570796371 +pow (~0.123E2, 0.0) = 1 +atan2 (~0.123E2, ~0.34028235E39) = ~3.141592503 +pow (~0.123E2, ~0.34028235E39) = 0 +atan2 (~0.123E2, ~0.17014117E39) = ~3.141592503 +pow (~0.123E2, ~0.17014117E39) = 0 +atan2 (~0.123E2, ~0.123E4) = ~3.131592989 +pow (~0.123E2, ~0.123E4) = 0 +atan2 (~0.123E2, ~0.123E2) = ~2.356194496 +pow (~0.123E2, ~0.123E2) = nan +atan2 (~0.123E2, ~0.31415927E1) = ~1.820864081 +pow (~0.123E2, ~0.31415927E1) = nan +atan2 (~0.123E2, ~0.27182817E1) = ~1.788298845 +pow (~0.123E2, ~0.27182817E1) = nan +atan2 (~0.123E2, ~0.123E1) = ~1.670464993 +pow (~0.123E2, ~0.123E1) = nan +atan2 (~0.123E2, ~0.123) = ~1.580796003 +pow (~0.123E2, ~0.123) = nan +atan2 (~0.123E2, ~0.123E~2) = ~1.570896268 +pow (~0.123E2, ~0.123E~2) = nan +atan2 (~0.123E2, ~0.11754944E~37) = ~1.570796371 +pow (~0.123E2, ~0.11754944E~37) = nan +atan2 (~0.123E2, ~0.5877472E~38) = ~1.570796371 +pow (~0.123E2, ~0.5877472E~38) = nan +atan2 (~0.123E2, ~0.1E~44) = ~1.570796371 +pow (~0.123E2, ~0.1E~44) = nan +atan2 (~0.123E2, ~0.0) = ~1.570796371 +pow (~0.123E2, ~0.0) = 1 +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.123E2, ~inf) = ~3.141592503 +pow (~0.123E2, ~inf) = 0 +atan2 (~0.123E2, nan) = nan +pow (~0.123E2, nan) = nan +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.31415927E1, 0.34028235E39) = ~9.232312E~39 +pow (~0.31415927E1, 0.34028235E39) = inf +atan2 (~0.31415927E1, 0.17014117E39) = ~1.8464624E~38 +pow (~0.31415927E1, 0.17014117E39) = inf +atan2 (~0.31415927E1, 0.123E4) = ~0.002554134931 +pow (~0.31415927E1, 0.123E4) = inf +atan2 (~0.31415927E1, 0.123E2) = ~0.2500677109 +pow (~0.31415927E1, 0.123E2) = nan +atan2 (~0.31415927E1, 0.31415927E1) = ~0.7853981853 +pow (~0.31415927E1, 0.31415927E1) = nan +atan2 (~0.31415927E1, 0.27182817E1) = ~0.8575118184 +pow (~0.31415927E1, 0.27182817E1) = nan +atan2 (~0.31415927E1, 0.123E1) = ~1.19762063 +pow (~0.31415927E1, 0.123E1) = nan +atan2 (~0.31415927E1, 0.123) = ~1.531664252 +pow (~0.31415927E1, 0.123) = nan +atan2 (~0.31415927E1, 0.123E~2) = ~1.570404768 +pow (~0.31415927E1, 0.123E~2) = nan +atan2 (~0.31415927E1, 0.11754944E~37) = ~1.570796371 +pow (~0.31415927E1, 0.11754944E~37) = nan +atan2 (~0.31415927E1, 0.5877472E~38) = ~1.570796371 +pow (~0.31415927E1, 0.5877472E~38) = nan +atan2 (~0.31415927E1, 0.1E~44) = ~1.570796371 +pow (~0.31415927E1, 0.1E~44) = nan +atan2 (~0.31415927E1, 0.0) = ~1.570796371 +pow (~0.31415927E1, 0.0) = 1 +atan2 (~0.31415927E1, ~0.34028235E39) = ~3.141592503 +pow (~0.31415927E1, ~0.34028235E39) = 0 +atan2 (~0.31415927E1, ~0.17014117E39) = ~3.141592503 +pow (~0.31415927E1, ~0.17014117E39) = 0 +atan2 (~0.31415927E1, ~0.123E4) = ~3.139038563 +pow (~0.31415927E1, ~0.123E4) = 0 +atan2 (~0.31415927E1, ~0.123E2) = ~2.89152503 +pow (~0.31415927E1, ~0.123E2) = nan +atan2 (~0.31415927E1, ~0.31415927E1) = ~2.356194496 +pow (~0.31415927E1, ~0.31415927E1) = nan +atan2 (~0.31415927E1, ~0.27182817E1) = ~2.284080744 +pow (~0.31415927E1, ~0.27182817E1) = nan +atan2 (~0.31415927E1, ~0.123E1) = ~1.943971992 +pow (~0.31415927E1, ~0.123E1) = nan +atan2 (~0.31415927E1, ~0.123) = ~1.609928489 +pow (~0.31415927E1, ~0.123) = nan +atan2 (~0.31415927E1, ~0.123E~2) = ~1.571187854 +pow (~0.31415927E1, ~0.123E~2) = nan +atan2 (~0.31415927E1, ~0.11754944E~37) = ~1.570796371 +pow (~0.31415927E1, ~0.11754944E~37) = nan +atan2 (~0.31415927E1, ~0.5877472E~38) = ~1.570796371 +pow (~0.31415927E1, ~0.5877472E~38) = nan +atan2 (~0.31415927E1, ~0.1E~44) = ~1.570796371 +pow (~0.31415927E1, ~0.1E~44) = nan +atan2 (~0.31415927E1, ~0.0) = ~1.570796371 +pow (~0.31415927E1, ~0.0) = 1 +atan2 (~0.31415927E1, inf) = 0 +pow (~0.31415927E1, inf) = inf +atan2 (~0.31415927E1, ~inf) = ~3.141592503 +pow (~0.31415927E1, ~inf) = 0 +atan2 (~0.31415927E1, nan) = nan +pow (~0.31415927E1, nan) = nan +atan2 (~0.31415927E1, inf) = 0 +pow (~0.31415927E1, inf) = inf +atan2 (~0.27182817E1, 0.34028235E39) = ~7.988312091E~39 +pow (~0.27182817E1, 0.34028235E39) = inf +atan2 (~0.27182817E1, 0.17014117E39) = ~1.597662558E~38 +pow (~0.27182817E1, 0.17014117E39) = inf +atan2 (~0.27182817E1, 0.123E4) = ~0.002209981671 +pow (~0.27182817E1, 0.123E4) = inf +atan2 (~0.27182817E1, 0.123E2) = ~0.2175025195 +pow (~0.27182817E1, 0.123E2) = nan +atan2 (~0.27182817E1, 0.31415927E1) = ~0.7132844925 +pow (~0.27182817E1, 0.31415927E1) = nan +atan2 (~0.27182817E1, 0.27182817E1) = ~0.7853981853 +pow (~0.27182817E1, 0.27182817E1) = nan +atan2 (~0.27182817E1, 0.123E1) = ~1.145872235 +pow (~0.27182817E1, 0.123E1) = nan +atan2 (~0.27182817E1, 0.123) = ~1.525578022 +pow (~0.27182817E1, 0.123) = nan +atan2 (~0.27182817E1, 0.123E~2) = ~1.570343852 +pow (~0.27182817E1, 0.123E~2) = nan +atan2 (~0.27182817E1, 0.11754944E~37) = ~1.570796371 +pow (~0.27182817E1, 0.11754944E~37) = nan +atan2 (~0.27182817E1, 0.5877472E~38) = ~1.570796371 +pow (~0.27182817E1, 0.5877472E~38) = nan +atan2 (~0.27182817E1, 0.1E~44) = ~1.570796371 +pow (~0.27182817E1, 0.1E~44) = nan +atan2 (~0.27182817E1, 0.0) = ~1.570796371 +pow (~0.27182817E1, 0.0) = 1 +atan2 (~0.27182817E1, ~0.34028235E39) = ~3.141592503 +pow (~0.27182817E1, ~0.34028235E39) = 0 +atan2 (~0.27182817E1, ~0.17014117E39) = ~3.141592503 +pow (~0.27182817E1, ~0.17014117E39) = 0 +atan2 (~0.27182817E1, ~0.123E4) = ~3.139382601 +pow (~0.27182817E1, ~0.123E4) = 0 +atan2 (~0.27182817E1, ~0.123E2) = ~2.924090147 +pow (~0.27182817E1, ~0.123E2) = nan +atan2 (~0.27182817E1, ~0.31415927E1) = ~2.428308249 +pow (~0.27182817E1, ~0.31415927E1) = nan +atan2 (~0.27182817E1, ~0.27182817E1) = ~2.356194496 +pow (~0.27182817E1, ~0.27182817E1) = nan +atan2 (~0.27182817E1, ~0.123E1) = ~1.995720506 +pow (~0.27182817E1, ~0.123E1) = nan +atan2 (~0.27182817E1, ~0.123) = ~1.6160146 +pow (~0.27182817E1, ~0.123) = nan +atan2 (~0.27182817E1, ~0.123E~2) = ~1.57124877 +pow (~0.27182817E1, ~0.123E~2) = nan +atan2 (~0.27182817E1, ~0.11754944E~37) = ~1.570796371 +pow (~0.27182817E1, ~0.11754944E~37) = nan +atan2 (~0.27182817E1, ~0.5877472E~38) = ~1.570796371 +pow (~0.27182817E1, ~0.5877472E~38) = nan +atan2 (~0.27182817E1, ~0.1E~44) = ~1.570796371 +pow (~0.27182817E1, ~0.1E~44) = nan +atan2 (~0.27182817E1, ~0.0) = ~1.570796371 +pow (~0.27182817E1, ~0.0) = 1 +atan2 (~0.27182817E1, inf) = 0 +pow (~0.27182817E1, inf) = inf +atan2 (~0.27182817E1, ~inf) = ~3.141592503 +pow (~0.27182817E1, ~inf) = 0 +atan2 (~0.27182817E1, nan) = nan +pow (~0.27182817E1, nan) = nan +atan2 (~0.27182817E1, inf) = 0 +pow (~0.27182817E1, inf) = inf +atan2 (~0.123E1, 0.34028235E39) = ~3.614645185E~39 +pow (~0.123E1, 0.34028235E39) = inf +atan2 (~0.123E1, 0.17014117E39) = ~7.22929037E~39 +pow (~0.123E1, 0.17014117E39) = inf +atan2 (~0.123E1, 0.123E4) = ~9.999996983E~4 +pow (~0.123E1, 0.123E4) = inf +atan2 (~0.123E1, 0.123E2) = ~0.09966865182 +pow (~0.123E1, 0.123E2) = nan +atan2 (~0.123E1, 0.31415927E1) = ~0.3731757104 +pow (~0.123E1, 0.31415927E1) = nan +atan2 (~0.123E1, 0.27182817E1) = ~0.4249241352 +pow (~0.123E1, 0.27182817E1) = nan +atan2 (~0.123E1, 0.123E1) = ~0.7853981853 +pow (~0.123E1, 0.123E1) = nan +atan2 (~0.123E1, 0.123) = ~1.471127629 +pow (~0.123E1, 0.123) = nan +atan2 (~0.123E1, 0.123E~2) = ~1.569796324 +pow (~0.123E1, 0.123E~2) = nan +atan2 (~0.123E1, 0.11754944E~37) = ~1.570796371 +pow (~0.123E1, 0.11754944E~37) = nan +atan2 (~0.123E1, 0.5877472E~38) = ~1.570796371 +pow (~0.123E1, 0.5877472E~38) = nan +atan2 (~0.123E1, 0.1E~44) = ~1.570796371 +pow (~0.123E1, 0.1E~44) = nan +atan2 (~0.123E1, 0.0) = ~1.570796371 +pow (~0.123E1, 0.0) = 1 +atan2 (~0.123E1, ~0.34028235E39) = ~3.141592503 +pow (~0.123E1, ~0.34028235E39) = 0 +atan2 (~0.123E1, ~0.17014117E39) = ~3.141592503 +pow (~0.123E1, ~0.17014117E39) = 0 +atan2 (~0.123E1, ~0.123E4) = ~3.140592575 +pow (~0.123E1, ~0.123E4) = 0 +atan2 (~0.123E1, ~0.123E2) = ~3.041924 +pow (~0.123E1, ~0.123E2) = nan +atan2 (~0.123E1, ~0.31415927E1) = ~2.768416882 +pow (~0.123E1, ~0.31415927E1) = nan +atan2 (~0.123E1, ~0.27182817E1) = ~2.716668606 +pow (~0.123E1, ~0.27182817E1) = nan +atan2 (~0.123E1, ~0.123E1) = ~2.356194496 +pow (~0.123E1, ~0.123E1) = nan +atan2 (~0.123E1, ~0.123) = ~1.670464993 +pow (~0.123E1, ~0.123) = nan +atan2 (~0.123E1, ~0.123E~2) = ~1.571796298 +pow (~0.123E1, ~0.123E~2) = nan +atan2 (~0.123E1, ~0.11754944E~37) = ~1.570796371 +pow (~0.123E1, ~0.11754944E~37) = nan +atan2 (~0.123E1, ~0.5877472E~38) = ~1.570796371 +pow (~0.123E1, ~0.5877472E~38) = nan +atan2 (~0.123E1, ~0.1E~44) = ~1.570796371 +pow (~0.123E1, ~0.1E~44) = nan +atan2 (~0.123E1, ~0.0) = ~1.570796371 +pow (~0.123E1, ~0.0) = 1 +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123E1, ~inf) = ~3.141592503 +pow (~0.123E1, ~inf) = 0 +atan2 (~0.123E1, nan) = nan +pow (~0.123E1, nan) = nan +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123, 0.34028235E39) = ~3.614649389E~40 +pow (~0.123, 0.34028235E39) = 0 +atan2 (~0.123, 0.17014117E39) = ~7.229284764E~40 +pow (~0.123, 0.17014117E39) = 0 +atan2 (~0.123, 0.123E4) = ~1.000000047E~4 +pow (~0.123, 0.123E4) = 0 +atan2 (~0.123, 0.123E2) = ~0.009999666363 +pow (~0.123, 0.123E2) = nan +atan2 (~0.123, 0.31415927E1) = ~0.0391321294 +pow (~0.123, 0.31415927E1) = nan +atan2 (~0.123, 0.27182817E1) = ~0.04521832988 +pow (~0.123, 0.27182817E1) = nan +atan2 (~0.123, 0.123E1) = ~0.09966865182 +pow (~0.123, 0.123E1) = nan +atan2 (~0.123, 0.123) = ~0.7853981853 +pow (~0.123, 0.123) = nan +atan2 (~0.123, 0.123E~2) = ~1.560796618 +pow (~0.123, 0.123E~2) = nan +atan2 (~0.123, 0.11754944E~37) = ~1.570796371 +pow (~0.123, 0.11754944E~37) = nan +atan2 (~0.123, 0.5877472E~38) = ~1.570796371 +pow (~0.123, 0.5877472E~38) = nan +atan2 (~0.123, 0.1E~44) = ~1.570796371 +pow (~0.123, 0.1E~44) = nan +atan2 (~0.123, 0.0) = ~1.570796371 +pow (~0.123, 0.0) = 1 +atan2 (~0.123, ~0.34028235E39) = ~3.141592503 +pow (~0.123, ~0.34028235E39) = inf +atan2 (~0.123, ~0.17014117E39) = ~3.141592503 +pow (~0.123, ~0.17014117E39) = inf +atan2 (~0.123, ~0.123E4) = ~3.141492605 +pow (~0.123, ~0.123E4) = inf +atan2 (~0.123, ~0.123E2) = ~3.131592989 +pow (~0.123, ~0.123E2) = nan +atan2 (~0.123, ~0.31415927E1) = ~3.102460623 +pow (~0.123, ~0.31415927E1) = nan +atan2 (~0.123, ~0.27182817E1) = ~3.096374273 +pow (~0.123, ~0.27182817E1) = nan +atan2 (~0.123, ~0.123E1) = ~3.041924 +pow (~0.123, ~0.123E1) = nan +atan2 (~0.123, ~0.123) = ~2.356194496 +pow (~0.123, ~0.123) = nan +atan2 (~0.123, ~0.123E~2) = ~1.580796003 +pow (~0.123, ~0.123E~2) = nan +atan2 (~0.123, ~0.11754944E~37) = ~1.570796371 +pow (~0.123, ~0.11754944E~37) = nan +atan2 (~0.123, ~0.5877472E~38) = ~1.570796371 +pow (~0.123, ~0.5877472E~38) = nan +atan2 (~0.123, ~0.1E~44) = ~1.570796371 +pow (~0.123, ~0.1E~44) = nan +atan2 (~0.123, ~0.0) = ~1.570796371 +pow (~0.123, ~0.0) = 1 +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123, ~inf) = ~3.141592503 +pow (~0.123, ~inf) = inf +atan2 (~0.123, nan) = nan +pow (~0.123, nan) = nan +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123E~2, 0.34028235E39) = ~3.613948739E~42 +pow (~0.123E~2, 0.34028235E39) = 0 +atan2 (~0.123E~2, 0.17014117E39) = ~7.229298777E~42 +pow (~0.123E~2, 0.17014117E39) = 0 +atan2 (~0.123E~2, 0.123E4) = ~9.999999975E~7 +pow (~0.123E~2, 0.123E4) = 0 +atan2 (~0.123E~2, 0.123E2) = ~1.000000047E~4 +pow (~0.123E~2, 0.123E2) = nan +atan2 (~0.123E~2, 0.31415927E1) = ~3.915211419E~4 +pow (~0.123E~2, 0.31415927E1) = nan +atan2 (~0.123E~2, 0.27182817E1) = ~4.524917167E~4 +pow (~0.123E~2, 0.27182817E1) = nan +atan2 (~0.123E~2, 0.123E1) = ~9.999996983E~4 +pow (~0.123E~2, 0.123E1) = nan +atan2 (~0.123E~2, 0.123) = ~0.009999667294 +pow (~0.123E~2, 0.123) = nan +atan2 (~0.123E~2, 0.123E~2) = ~0.7853981853 +pow (~0.123E~2, 0.123E~2) = nan +atan2 (~0.123E~2, 0.11754944E~37) = ~1.570796371 +pow (~0.123E~2, 0.11754944E~37) = nan +atan2 (~0.123E~2, 0.5877472E~38) = ~1.570796371 +pow (~0.123E~2, 0.5877472E~38) = nan +atan2 (~0.123E~2, 0.1E~44) = ~1.570796371 +pow (~0.123E~2, 0.1E~44) = nan +atan2 (~0.123E~2, 0.0) = ~1.570796371 +pow (~0.123E~2, 0.0) = 1 +atan2 (~0.123E~2, ~0.34028235E39) = ~3.141592503 +pow (~0.123E~2, ~0.34028235E39) = inf +atan2 (~0.123E~2, ~0.17014117E39) = ~3.141592503 +pow (~0.123E~2, ~0.17014117E39) = inf +atan2 (~0.123E~2, ~0.123E4) = ~3.141591549 +pow (~0.123E~2, ~0.123E4) = inf +atan2 (~0.123E~2, ~0.123E2) = ~3.141492605 +pow (~0.123E~2, ~0.123E2) = nan +atan2 (~0.123E~2, ~0.31415927E1) = ~3.141201019 +pow (~0.123E~2, ~0.31415927E1) = nan +atan2 (~0.123E~2, ~0.27182817E1) = ~3.141140223 +pow (~0.123E~2, ~0.27182817E1) = nan +atan2 (~0.123E~2, ~0.123E1) = ~3.140592575 +pow (~0.123E~2, ~0.123E1) = nan +atan2 (~0.123E~2, ~0.123) = ~3.131592989 +pow (~0.123E~2, ~0.123) = nan +atan2 (~0.123E~2, ~0.123E~2) = ~2.356194496 +pow (~0.123E~2, ~0.123E~2) = nan +atan2 (~0.123E~2, ~0.11754944E~37) = ~1.570796371 +pow (~0.123E~2, ~0.11754944E~37) = nan +atan2 (~0.123E~2, ~0.5877472E~38) = ~1.570796371 +pow (~0.123E~2, ~0.5877472E~38) = nan +atan2 (~0.123E~2, ~0.1E~44) = ~1.570796371 +pow (~0.123E~2, ~0.1E~44) = nan +atan2 (~0.123E~2, ~0.0) = ~1.570796371 +pow (~0.123E~2, ~0.0) = 1 +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.123E~2, ~inf) = ~3.141592503 +pow (~0.123E~2, ~inf) = inf +atan2 (~0.123E~2, nan) = nan +pow (~0.123E~2, nan) = nan +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.11754944E~37, 0.34028235E39) = 0 +pow (~0.11754944E~37, 0.34028235E39) = 0 +atan2 (~0.11754944E~37, 0.17014117E39) = 0 +pow (~0.11754944E~37, 0.17014117E39) = 0 +atan2 (~0.11754944E~37, 0.123E4) = ~9.556855527E~42 +pow (~0.11754944E~37, 0.123E4) = 0 +atan2 (~0.11754944E~37, 0.123E2) = ~9.55686954E~40 +pow (~0.11754944E~37, 0.123E2) = nan +atan2 (~0.11754944E~37, 0.31415927E1) = ~3.74171493E~39 +pow (~0.11754944E~37, 0.31415927E1) = nan +atan2 (~0.11754944E~37, 0.27182817E1) = ~4.324402857E~39 +pow (~0.11754944E~37, 0.27182817E1) = nan +atan2 (~0.11754944E~37, 0.123E1) = ~9.556863934E~39 +pow (~0.11754944E~37, 0.123E1) = nan +atan2 (~0.11754944E~37, 0.123) = ~9.556864495E~38 +pow (~0.11754944E~37, 0.123) = nan +atan2 (~0.11754944E~37, 0.123E~2) = ~9.556864495E~36 +pow (~0.11754944E~37, 0.123E~2) = nan +atan2 (~0.11754944E~37, 0.11754944E~37) = ~0.7853981853 +pow (~0.11754944E~37, 0.11754944E~37) = nan +atan2 (~0.11754944E~37, 0.5877472E~38) = ~1.107148767 +pow (~0.11754944E~37, 0.5877472E~38) = nan +atan2 (~0.11754944E~37, 0.1E~44) = ~1.570796251 +pow (~0.11754944E~37, 0.1E~44) = nan +atan2 (~0.11754944E~37, 0.0) = ~1.570796371 +pow (~0.11754944E~37, 0.0) = 1 +atan2 (~0.11754944E~37, ~0.34028235E39) = ~3.141592503 +pow (~0.11754944E~37, ~0.34028235E39) = inf +atan2 (~0.11754944E~37, ~0.17014117E39) = ~3.141592503 +pow (~0.11754944E~37, ~0.17014117E39) = inf +atan2 (~0.11754944E~37, ~0.123E4) = ~3.141592503 +pow (~0.11754944E~37, ~0.123E4) = inf +atan2 (~0.11754944E~37, ~0.123E2) = ~3.141592503 +pow (~0.11754944E~37, ~0.123E2) = nan +atan2 (~0.11754944E~37, ~0.31415927E1) = ~3.141592503 +pow (~0.11754944E~37, ~0.31415927E1) = nan +atan2 (~0.11754944E~37, ~0.27182817E1) = ~3.141592503 +pow (~0.11754944E~37, ~0.27182817E1) = nan +atan2 (~0.11754944E~37, ~0.123E1) = ~3.141592503 +pow (~0.11754944E~37, ~0.123E1) = nan +atan2 (~0.11754944E~37, ~0.123) = ~3.141592503 +pow (~0.11754944E~37, ~0.123) = nan +atan2 (~0.11754944E~37, ~0.123E~2) = ~3.141592503 +pow (~0.11754944E~37, ~0.123E~2) = nan +atan2 (~0.11754944E~37, ~0.11754944E~37) = ~2.356194496 +pow (~0.11754944E~37, ~0.11754944E~37) = nan +atan2 (~0.11754944E~37, ~0.5877472E~38) = ~2.034443855 +pow (~0.11754944E~37, ~0.5877472E~38) = nan +atan2 (~0.11754944E~37, ~0.1E~44) = ~1.57079649 +pow (~0.11754944E~37, ~0.1E~44) = nan +atan2 (~0.11754944E~37, ~0.0) = ~1.570796371 +pow (~0.11754944E~37, ~0.0) = 1 +atan2 (~0.11754944E~37, inf) = 0 +pow (~0.11754944E~37, inf) = 0 +atan2 (~0.11754944E~37, ~inf) = ~3.141592503 +pow (~0.11754944E~37, ~inf) = inf +atan2 (~0.11754944E~37, nan) = nan +pow (~0.11754944E~37, nan) = nan +atan2 (~0.11754944E~37, inf) = 0 +pow (~0.11754944E~37, inf) = 0 +atan2 (~0.5877472E~38, 0.34028235E39) = 0 +pow (~0.5877472E~38, 0.34028235E39) = 0 +atan2 (~0.5877472E~38, 0.17014117E39) = 0 +pow (~0.5877472E~38, 0.17014117E39) = 0 +atan2 (~0.5877472E~38, 0.123E4) = ~4.778427763E~42 +pow (~0.5877472E~38, 0.123E4) = 0 +atan2 (~0.5877472E~38, 0.123E2) = ~4.778427763E~40 +pow (~0.5877472E~38, 0.123E2) = nan +atan2 (~0.5877472E~38, 0.31415927E1) = ~1.870856764E~39 +pow (~0.5877472E~38, 0.31415927E1) = nan +atan2 (~0.5877472E~38, 0.27182817E1) = ~2.162200728E~39 +pow (~0.5877472E~38, 0.27182817E1) = nan +atan2 (~0.5877472E~38, 0.123E1) = ~4.778431967E~39 +pow (~0.5877472E~38, 0.123E1) = nan +atan2 (~0.5877472E~38, 0.123) = ~4.778432248E~38 +pow (~0.5877472E~38, 0.123) = nan +atan2 (~0.5877472E~38, 0.123E~2) = ~4.778432248E~36 +pow (~0.5877472E~38, 0.123E~2) = nan +atan2 (~0.5877472E~38, 0.11754944E~37) = ~0.463647604 +pow (~0.5877472E~38, 0.11754944E~37) = nan +atan2 (~0.5877472E~38, 0.5877472E~38) = ~0.7853981853 +pow (~0.5877472E~38, 0.5877472E~38) = nan +atan2 (~0.5877472E~38, 0.1E~44) = ~1.570796132 +pow (~0.5877472E~38, 0.1E~44) = nan +atan2 (~0.5877472E~38, 0.0) = ~1.570796371 +pow (~0.5877472E~38, 0.0) = 1 +atan2 (~0.5877472E~38, ~0.34028235E39) = ~3.141592503 +pow (~0.5877472E~38, ~0.34028235E39) = inf +atan2 (~0.5877472E~38, ~0.17014117E39) = ~3.141592503 +pow (~0.5877472E~38, ~0.17014117E39) = inf +atan2 (~0.5877472E~38, ~0.123E4) = ~3.141592503 +pow (~0.5877472E~38, ~0.123E4) = inf +atan2 (~0.5877472E~38, ~0.123E2) = ~3.141592503 +pow (~0.5877472E~38, ~0.123E2) = nan +atan2 (~0.5877472E~38, ~0.31415927E1) = ~3.141592503 +pow (~0.5877472E~38, ~0.31415927E1) = nan +atan2 (~0.5877472E~38, ~0.27182817E1) = ~3.141592503 +pow (~0.5877472E~38, ~0.27182817E1) = nan +atan2 (~0.5877472E~38, ~0.123E1) = ~3.141592503 +pow (~0.5877472E~38, ~0.123E1) = nan +atan2 (~0.5877472E~38, ~0.123) = ~3.141592503 +pow (~0.5877472E~38, ~0.123) = nan +atan2 (~0.5877472E~38, ~0.123E~2) = ~3.141592503 +pow (~0.5877472E~38, ~0.123E~2) = nan +atan2 (~0.5877472E~38, ~0.11754944E~37) = ~2.677945137 +pow (~0.5877472E~38, ~0.11754944E~37) = nan +atan2 (~0.5877472E~38, ~0.5877472E~38) = ~2.356194496 +pow (~0.5877472E~38, ~0.5877472E~38) = nan +atan2 (~0.5877472E~38, ~0.1E~44) = ~1.570796609 +pow (~0.5877472E~38, ~0.1E~44) = nan +atan2 (~0.5877472E~38, ~0.0) = ~1.570796371 +pow (~0.5877472E~38, ~0.0) = 1 +atan2 (~0.5877472E~38, inf) = 0 +pow (~0.5877472E~38, inf) = 0 +atan2 (~0.5877472E~38, ~inf) = ~3.141592503 +pow (~0.5877472E~38, ~inf) = inf +atan2 (~0.5877472E~38, nan) = nan +pow (~0.5877472E~38, nan) = nan +atan2 (~0.5877472E~38, inf) = 0 +pow (~0.5877472E~38, inf) = 0 +atan2 (~0.1E~44, 0.34028235E39) = 0 +pow (~0.1E~44, 0.34028235E39) = 0 +atan2 (~0.1E~44, 0.17014117E39) = 0 +pow (~0.1E~44, 0.17014117E39) = 0 +atan2 (~0.1E~44, 0.123E4) = 0 +pow (~0.1E~44, 0.123E4) = 0 +atan2 (~0.1E~44, 0.123E2) = 0 +pow (~0.1E~44, 0.123E2) = nan +atan2 (~0.1E~44, 0.31415927E1) = 0 +pow (~0.1E~44, 0.31415927E1) = nan +atan2 (~0.1E~44, 0.27182817E1) = 0 +pow (~0.1E~44, 0.27182817E1) = nan +atan2 (~0.1E~44, 0.123E1) = ~1.401298464E~45 +pow (~0.1E~44, 0.123E1) = nan +atan2 (~0.1E~44, 0.123) = ~1.121038771E~44 +pow (~0.1E~44, 0.123) = nan +atan2 (~0.1E~44, 0.123E~2) = ~1.139255651E~42 +pow (~0.1E~44, 0.123E~2) = nan +atan2 (~0.1E~44, 0.11754944E~37) = ~1.192092896E~7 +pow (~0.1E~44, 0.11754944E~37) = nan +atan2 (~0.1E~44, 0.5877472E~38) = ~2.384185791E~7 +pow (~0.1E~44, 0.5877472E~38) = nan +atan2 (~0.1E~44, 0.1E~44) = ~0.7853981853 +pow (~0.1E~44, 0.1E~44) = nan +atan2 (~0.1E~44, 0.0) = ~1.570796371 +pow (~0.1E~44, 0.0) = 1 +atan2 (~0.1E~44, ~0.34028235E39) = ~3.141592503 +pow (~0.1E~44, ~0.34028235E39) = inf +atan2 (~0.1E~44, ~0.17014117E39) = ~3.141592503 +pow (~0.1E~44, ~0.17014117E39) = inf +atan2 (~0.1E~44, ~0.123E4) = ~3.141592503 +pow (~0.1E~44, ~0.123E4) = inf +atan2 (~0.1E~44, ~0.123E2) = ~3.141592503 +pow (~0.1E~44, ~0.123E2) = nan +atan2 (~0.1E~44, ~0.31415927E1) = ~3.141592503 +pow (~0.1E~44, ~0.31415927E1) = nan +atan2 (~0.1E~44, ~0.27182817E1) = ~3.141592503 +pow (~0.1E~44, ~0.27182817E1) = nan +atan2 (~0.1E~44, ~0.123E1) = ~3.141592503 +pow (~0.1E~44, ~0.123E1) = nan +atan2 (~0.1E~44, ~0.123) = ~3.141592503 +pow (~0.1E~44, ~0.123) = nan +atan2 (~0.1E~44, ~0.123E~2) = ~3.141592503 +pow (~0.1E~44, ~0.123E~2) = nan +atan2 (~0.1E~44, ~0.11754944E~37) = ~3.141592503 +pow (~0.1E~44, ~0.11754944E~37) = nan +atan2 (~0.1E~44, ~0.5877472E~38) = ~3.141592503 +pow (~0.1E~44, ~0.5877472E~38) = nan +atan2 (~0.1E~44, ~0.1E~44) = ~2.356194496 +pow (~0.1E~44, ~0.1E~44) = nan +atan2 (~0.1E~44, ~0.0) = ~1.570796371 +pow (~0.1E~44, ~0.0) = 1 +atan2 (~0.1E~44, inf) = 0 +pow (~0.1E~44, inf) = 0 +atan2 (~0.1E~44, ~inf) = ~3.141592503 +pow (~0.1E~44, ~inf) = inf +atan2 (~0.1E~44, nan) = nan +pow (~0.1E~44, nan) = nan +atan2 (~0.1E~44, inf) = 0 +pow (~0.1E~44, inf) = 0 +atan2 (~0.0, 0.34028235E39) = 0 +pow (~0.0, 0.34028235E39) = 0 +atan2 (~0.0, 0.17014117E39) = 0 +pow (~0.0, 0.17014117E39) = 0 +atan2 (~0.0, 0.123E4) = 0 +pow (~0.0, 0.123E4) = 0 +atan2 (~0.0, 0.123E2) = 0 +pow (~0.0, 0.123E2) = 0 +atan2 (~0.0, 0.31415927E1) = 0 +pow (~0.0, 0.31415927E1) = 0 +atan2 (~0.0, 0.27182817E1) = 0 +pow (~0.0, 0.27182817E1) = 0 +atan2 (~0.0, 0.123E1) = 0 +pow (~0.0, 0.123E1) = 0 +atan2 (~0.0, 0.123) = 0 +pow (~0.0, 0.123) = 0 +atan2 (~0.0, 0.123E~2) = 0 +pow (~0.0, 0.123E~2) = 0 +atan2 (~0.0, 0.11754944E~37) = 0 +pow (~0.0, 0.11754944E~37) = 0 +atan2 (~0.0, 0.5877472E~38) = 0 +pow (~0.0, 0.5877472E~38) = 0 +atan2 (~0.0, 0.1E~44) = 0 +pow (~0.0, 0.1E~44) = 0 +atan2 (~0.0, 0.0) = 0 +pow (~0.0, 0.0) = 1 +atan2 (~0.0, ~0.34028235E39) = ~3.141592503 +pow (~0.0, ~0.34028235E39) = inf +atan2 (~0.0, ~0.17014117E39) = ~3.141592503 +pow (~0.0, ~0.17014117E39) = inf +atan2 (~0.0, ~0.123E4) = ~3.141592503 +pow (~0.0, ~0.123E4) = inf +atan2 (~0.0, ~0.123E2) = ~3.141592503 +pow (~0.0, ~0.123E2) = inf +atan2 (~0.0, ~0.31415927E1) = ~3.141592503 +pow (~0.0, ~0.31415927E1) = inf +atan2 (~0.0, ~0.27182817E1) = ~3.141592503 +pow (~0.0, ~0.27182817E1) = inf +atan2 (~0.0, ~0.123E1) = ~3.141592503 +pow (~0.0, ~0.123E1) = inf +atan2 (~0.0, ~0.123) = ~3.141592503 +pow (~0.0, ~0.123) = inf +atan2 (~0.0, ~0.123E~2) = ~3.141592503 +pow (~0.0, ~0.123E~2) = inf +atan2 (~0.0, ~0.11754944E~37) = ~3.141592503 +pow (~0.0, ~0.11754944E~37) = inf +atan2 (~0.0, ~0.5877472E~38) = ~3.141592503 +pow (~0.0, ~0.5877472E~38) = inf +atan2 (~0.0, ~0.1E~44) = ~3.141592503 +pow (~0.0, ~0.1E~44) = inf +atan2 (~0.0, ~0.0) = ~3.141592503 +pow (~0.0, ~0.0) = 1 +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (~0.0, ~inf) = ~3.141592503 +pow (~0.0, ~inf) = inf +atan2 (~0.0, nan) = nan +pow (~0.0, nan) = nan +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (inf, 0.34028235E39) = 1.570796371 +pow (inf, 0.34028235E39) = inf +atan2 (inf, 0.17014117E39) = 1.570796371 +pow (inf, 0.17014117E39) = inf +atan2 (inf, 0.123E4) = 1.570796371 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796371 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.31415927E1) = 1.570796371 +pow (inf, 0.31415927E1) = inf +atan2 (inf, 0.27182817E1) = 1.570796371 +pow (inf, 0.27182817E1) = inf +atan2 (inf, 0.123E1) = 1.570796371 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796371 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796371 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.11754944E~37) = 1.570796371 +pow (inf, 0.11754944E~37) = inf +atan2 (inf, 0.5877472E~38) = 1.570796371 +pow (inf, 0.5877472E~38) = inf +atan2 (inf, 0.1E~44) = 1.570796371 +pow (inf, 0.1E~44) = inf +atan2 (inf, 0.0) = 1.570796371 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.34028235E39) = 1.570796371 +pow (inf, ~0.34028235E39) = 0 +atan2 (inf, ~0.17014117E39) = 1.570796371 +pow (inf, ~0.17014117E39) = 0 +atan2 (inf, ~0.123E4) = 1.570796371 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796371 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.31415927E1) = 1.570796371 +pow (inf, ~0.31415927E1) = 0 +atan2 (inf, ~0.27182817E1) = 1.570796371 +pow (inf, ~0.27182817E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796371 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796371 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796371 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.11754944E~37) = 1.570796371 +pow (inf, ~0.11754944E~37) = 0 +atan2 (inf, ~0.5877472E~38) = 1.570796371 +pow (inf, ~0.5877472E~38) = 0 +atan2 (inf, ~0.1E~44) = 1.570796371 +pow (inf, ~0.1E~44) = 0 +atan2 (inf, ~0.0) = 1.570796371 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.356194496 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (~inf, 0.34028235E39) = ~1.570796371 +pow (~inf, 0.34028235E39) = inf +atan2 (~inf, 0.17014117E39) = ~1.570796371 +pow (~inf, 0.17014117E39) = inf +atan2 (~inf, 0.123E4) = ~1.570796371 +pow (~inf, 0.123E4) = inf +atan2 (~inf, 0.123E2) = ~1.570796371 +pow (~inf, 0.123E2) = inf +atan2 (~inf, 0.31415927E1) = ~1.570796371 +pow (~inf, 0.31415927E1) = inf +atan2 (~inf, 0.27182817E1) = ~1.570796371 +pow (~inf, 0.27182817E1) = inf +atan2 (~inf, 0.123E1) = ~1.570796371 +pow (~inf, 0.123E1) = inf +atan2 (~inf, 0.123) = ~1.570796371 +pow (~inf, 0.123) = inf +atan2 (~inf, 0.123E~2) = ~1.570796371 +pow (~inf, 0.123E~2) = inf +atan2 (~inf, 0.11754944E~37) = ~1.570796371 +pow (~inf, 0.11754944E~37) = inf +atan2 (~inf, 0.5877472E~38) = ~1.570796371 +pow (~inf, 0.5877472E~38) = inf +atan2 (~inf, 0.1E~44) = ~1.570796371 +pow (~inf, 0.1E~44) = inf +atan2 (~inf, 0.0) = ~1.570796371 +pow (~inf, 0.0) = 1 +atan2 (~inf, ~0.34028235E39) = ~1.570796371 +pow (~inf, ~0.34028235E39) = 0 +atan2 (~inf, ~0.17014117E39) = ~1.570796371 +pow (~inf, ~0.17014117E39) = 0 +atan2 (~inf, ~0.123E4) = ~1.570796371 +pow (~inf, ~0.123E4) = 0 +atan2 (~inf, ~0.123E2) = ~1.570796371 +pow (~inf, ~0.123E2) = 0 +atan2 (~inf, ~0.31415927E1) = ~1.570796371 +pow (~inf, ~0.31415927E1) = 0 +atan2 (~inf, ~0.27182817E1) = ~1.570796371 +pow (~inf, ~0.27182817E1) = 0 +atan2 (~inf, ~0.123E1) = ~1.570796371 +pow (~inf, ~0.123E1) = 0 +atan2 (~inf, ~0.123) = ~1.570796371 +pow (~inf, ~0.123) = 0 +atan2 (~inf, ~0.123E~2) = ~1.570796371 +pow (~inf, ~0.123E~2) = 0 +atan2 (~inf, ~0.11754944E~37) = ~1.570796371 +pow (~inf, ~0.11754944E~37) = 0 +atan2 (~inf, ~0.5877472E~38) = ~1.570796371 +pow (~inf, ~0.5877472E~38) = 0 +atan2 (~inf, ~0.1E~44) = ~1.570796371 +pow (~inf, ~0.1E~44) = 0 +atan2 (~inf, ~0.0) = ~1.570796371 +pow (~inf, ~0.0) = 1 +atan2 (~inf, inf) = ~0.7853981853 +pow (~inf, inf) = inf +atan2 (~inf, ~inf) = ~2.356194496 +pow (~inf, ~inf) = 0 +atan2 (~inf, nan) = nan +pow (~inf, nan) = nan +atan2 (~inf, inf) = ~0.7853981853 +pow (~inf, inf) = inf +atan2 (nan, 0.34028235E39) = nan +pow (nan, 0.34028235E39) = nan +atan2 (nan, 0.17014117E39) = nan +pow (nan, 0.17014117E39) = nan +atan2 (nan, 0.123E4) = nan +pow (nan, 0.123E4) = nan +atan2 (nan, 0.123E2) = nan +pow (nan, 0.123E2) = nan +atan2 (nan, 0.31415927E1) = nan +pow (nan, 0.31415927E1) = nan +atan2 (nan, 0.27182817E1) = nan +pow (nan, 0.27182817E1) = nan +atan2 (nan, 0.123E1) = nan +pow (nan, 0.123E1) = nan +atan2 (nan, 0.123) = nan +pow (nan, 0.123) = nan +atan2 (nan, 0.123E~2) = nan +pow (nan, 0.123E~2) = nan +atan2 (nan, 0.11754944E~37) = nan +pow (nan, 0.11754944E~37) = nan +atan2 (nan, 0.5877472E~38) = nan +pow (nan, 0.5877472E~38) = nan +atan2 (nan, 0.1E~44) = nan +pow (nan, 0.1E~44) = nan +atan2 (nan, 0.0) = nan +pow (nan, 0.0) = 1 +atan2 (nan, ~0.34028235E39) = nan +pow (nan, ~0.34028235E39) = nan +atan2 (nan, ~0.17014117E39) = nan +pow (nan, ~0.17014117E39) = nan +atan2 (nan, ~0.123E4) = nan +pow (nan, ~0.123E4) = nan +atan2 (nan, ~0.123E2) = nan +pow (nan, ~0.123E2) = nan +atan2 (nan, ~0.31415927E1) = nan +pow (nan, ~0.31415927E1) = nan +atan2 (nan, ~0.27182817E1) = nan +pow (nan, ~0.27182817E1) = nan +atan2 (nan, ~0.123E1) = nan +pow (nan, ~0.123E1) = nan +atan2 (nan, ~0.123) = nan +pow (nan, ~0.123) = nan +atan2 (nan, ~0.123E~2) = nan +pow (nan, ~0.123E~2) = nan +atan2 (nan, ~0.11754944E~37) = nan +pow (nan, ~0.11754944E~37) = nan +atan2 (nan, ~0.5877472E~38) = nan +pow (nan, ~0.5877472E~38) = nan +atan2 (nan, ~0.1E~44) = nan +pow (nan, ~0.1E~44) = nan +atan2 (nan, ~0.0) = nan +pow (nan, ~0.0) = 1 +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (nan, ~inf) = nan +pow (nan, ~inf) = nan +atan2 (nan, nan) = nan +pow (nan, nan) = nan +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (inf, 0.34028235E39) = 1.570796371 +pow (inf, 0.34028235E39) = inf +atan2 (inf, 0.17014117E39) = 1.570796371 +pow (inf, 0.17014117E39) = inf +atan2 (inf, 0.123E4) = 1.570796371 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796371 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.31415927E1) = 1.570796371 +pow (inf, 0.31415927E1) = inf +atan2 (inf, 0.27182817E1) = 1.570796371 +pow (inf, 0.27182817E1) = inf +atan2 (inf, 0.123E1) = 1.570796371 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796371 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796371 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.11754944E~37) = 1.570796371 +pow (inf, 0.11754944E~37) = inf +atan2 (inf, 0.5877472E~38) = 1.570796371 +pow (inf, 0.5877472E~38) = inf +atan2 (inf, 0.1E~44) = 1.570796371 +pow (inf, 0.1E~44) = inf +atan2 (inf, 0.0) = 1.570796371 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.34028235E39) = 1.570796371 +pow (inf, ~0.34028235E39) = 0 +atan2 (inf, ~0.17014117E39) = 1.570796371 +pow (inf, ~0.17014117E39) = 0 +atan2 (inf, ~0.123E4) = 1.570796371 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796371 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.31415927E1) = 1.570796371 +pow (inf, ~0.31415927E1) = 0 +atan2 (inf, ~0.27182817E1) = 1.570796371 +pow (inf, ~0.27182817E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796371 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796371 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796371 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.11754944E~37) = 1.570796371 +pow (inf, ~0.11754944E~37) = 0 +atan2 (inf, ~0.5877472E~38) = 1.570796371 +pow (inf, ~0.5877472E~38) = 0 +atan2 (inf, ~0.1E~44) = 1.570796371 +pow (inf, ~0.1E~44) = 0 +atan2 (inf, ~0.0) = 1.570796371 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.356194496 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf + +Testing *+, *- +SOME *+ AND STANDARD RESULTS DIFFER +(r1, r2, r3): *+(r1, r2, r3) (r1 * r2 + r3) +-------------------------------------------- +(0.34028235E39, 0.123E1, ~0.34028235E39): 0.78264946E38 inf +(0.34028235E39, 0.123E1, ~0.17014117E39): 0.24840611E39 inf +(0.34028235E39, 0.123, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(0.34028235E39, ~0.123E1, 0.34028235E39): ~0.78264946E38 ~inf +(0.34028235E39, ~0.123E1, 0.17014117E39): ~0.24840611E39 ~inf +(0.34028235E39, ~0.123, 0.34028235E39): 0.2984276E39 0.29842763E39 +(0.17014117E39, 0.31415927E1, ~0.34028235E39): 0.19423192E39 inf +(0.17014117E39, 0.27182817E1, ~0.34028235E39): 0.1222093E39 inf +(0.17014117E39, 0.27182817E1, ~0.17014117E39): 0.29235047E39 inf +(0.17014117E39, 0.123E1, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(0.17014117E39, 0.123E1, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(0.17014117E39, 0.123, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(0.17014117E39, ~0.31415927E1, 0.34028235E39): ~0.19423192E39 ~inf +(0.17014117E39, ~0.27182817E1, 0.34028235E39): ~0.1222093E39 ~inf +(0.17014117E39, ~0.27182817E1, 0.17014117E39): ~0.29235047E39 ~inf +(0.17014117E39, ~0.123E1, 0.34028235E39): 0.1310087E39 0.13100871E39 +(0.17014117E39, ~0.123E1, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(0.17014117E39, ~0.123, 0.17014117E39): 0.1492138E39 0.14921381E39 +(0.123E4, 0.123E2, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(0.123E4, 0.123E2, ~0.123E1): 0.151277705E5 0.1512777E5 +(0.123E4, 0.31415927E1, 0.123E2): 0.3876459E4 0.38764592E4 +(0.123E4, 0.31415927E1, 0.123): 0.3864282E4 0.38642822E4 +(0.123E4, 0.31415927E1, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(0.123E4, 0.31415927E1, ~0.123E1): 0.3862929E4 0.38629292E4 +(0.123E4, 0.123, 0.123E~2): 0.15129123E3 0.15129124E3 +(0.123E4, 0.123, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(0.123E4, 0.123, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(0.123E4, 0.123, ~0.123E1): 0.15006E3 0.15006001E3 +(0.123E4, 0.123E~2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123E4, 0.123E~2, 0.123): 0.16359E1 0.16359001E1 +(0.123E4, 0.123E~2, ~0.123E1): 0.28290004 0.2829001 +(0.123E4, ~0.123E2, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(0.123E4, ~0.123E2, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(0.123E4, ~0.31415927E1, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(0.123E4, ~0.31415927E1, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(0.123E4, ~0.31415927E1, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(0.123E4, ~0.31415927E1, ~0.123): ~0.3864282E4 ~0.38642822E4 +(0.123E4, ~0.123, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(0.123E4, ~0.123, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(0.123E4, ~0.123, 0.123E1): ~0.15006E3 ~0.15006001E3 +(0.123E4, ~0.123, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(0.123E4, ~0.123E~2, 0.123E1): ~0.28290004 ~0.2829001 +(0.123E4, ~0.123E~2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123E4, ~0.123E~2, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123E2, 0.123E4, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(0.123E2, 0.123E4, ~0.123E1): 0.151277705E5 0.1512777E5 +(0.123E2, 0.123E2, 0.123E~2): 0.15129123E3 0.15129124E3 +(0.123E2, 0.123E2, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(0.123E2, 0.123E2, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(0.123E2, 0.123E2, ~0.123E1): 0.15006E3 0.15006001E3 +(0.123E2, 0.31415927E1, 0.123E2): 0.50941593E2 0.5094159E2 +(0.123E2, 0.31415927E1, 0.27182817E1): 0.41359875E2 0.4135987E2 +(0.123E2, 0.31415927E1, 0.123E~2): 0.38642822E2 0.3864282E2 +(0.123E2, 0.31415927E1, ~0.31415927E1): 0.355E2 0.35499996E2 +(0.123E2, 0.31415927E1, ~0.123): 0.38518593E2 0.3851859E2 +(0.123E2, 0.27182817E1, 0.31415927E1): 0.36576458E2 0.3657646E2 +(0.123E2, 0.27182817E1, 0.123): 0.33557865E2 0.3355787E2 +(0.123E2, 0.27182817E1, ~0.123E2): 0.21134867E2 0.21134869E2 +(0.123E2, 0.27182817E1, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(0.123E2, 0.27182817E1, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(0.123E2, 0.27182817E1, ~0.123E1): 0.32204865E2 0.3220487E2 +(0.123E2, 0.27182817E1, ~0.123E~2): 0.33433636E2 0.3343364E2 +(0.123E2, 0.123E1, ~0.123E2): 0.28290002E1 0.28290005E1 +(0.123E2, 0.123, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123E2, 0.123, 0.123): 0.16359E1 0.16359001E1 +(0.123E2, 0.123, ~0.123E1): 0.28290004 0.2829001 +(0.123E2, 0.123E~2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(0.123E2, ~0.123E4, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(0.123E2, ~0.123E4, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(0.123E2, ~0.123E2, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(0.123E2, ~0.123E2, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(0.123E2, ~0.123E2, 0.123E1): ~0.15006E3 ~0.15006001E3 +(0.123E2, ~0.123E2, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(0.123E2, ~0.31415927E1, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(0.123E2, ~0.31415927E1, 0.123): ~0.38518593E2 ~0.3851859E2 +(0.123E2, ~0.31415927E1, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(0.123E2, ~0.31415927E1, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(0.123E2, ~0.31415927E1, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(0.123E2, ~0.27182817E1, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(0.123E2, ~0.27182817E1, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(0.123E2, ~0.27182817E1, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(0.123E2, ~0.27182817E1, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(0.123E2, ~0.27182817E1, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(0.123E2, ~0.27182817E1, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(0.123E2, ~0.27182817E1, ~0.123): ~0.33557865E2 ~0.3355787E2 +(0.123E2, ~0.123E1, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(0.123E2, ~0.123, 0.123E1): ~0.28290004 ~0.2829001 +(0.123E2, ~0.123, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123E2, ~0.123, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123E2, ~0.123E~2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(0.31415927E1, 0.17014117E39, ~0.34028235E39): 0.19423192E39 inf +(0.31415927E1, 0.123E4, 0.123E2): 0.3876459E4 0.38764592E4 +(0.31415927E1, 0.123E4, 0.123): 0.3864282E4 0.38642822E4 +(0.31415927E1, 0.123E4, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(0.31415927E1, 0.123E4, ~0.123E1): 0.3862929E4 0.38629292E4 +(0.31415927E1, 0.123E2, 0.123E2): 0.50941593E2 0.5094159E2 +(0.31415927E1, 0.123E2, 0.27182817E1): 0.41359875E2 0.4135987E2 +(0.31415927E1, 0.123E2, 0.123E~2): 0.38642822E2 0.3864282E2 +(0.31415927E1, 0.123E2, ~0.31415927E1): 0.355E2 0.35499996E2 +(0.31415927E1, 0.123E2, ~0.123): 0.38518593E2 0.3851859E2 +(0.31415927E1, 0.31415927E1, 0.123E1): 0.11099605E2 0.11099606E2 +(0.31415927E1, 0.27182817E1, 0.123E2): 0.20839735E2 0.20839733E2 +(0.31415927E1, 0.27182817E1, 0.123E1): 0.9769734E1 0.9769733E1 +(0.31415927E1, 0.27182817E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(0.31415927E1, 0.27182817E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(0.31415927E1, 0.27182817E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(0.31415927E1, 0.27182817E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(0.31415927E1, 0.27182817E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(0.31415927E1, 0.123E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(0.31415927E1, 0.123E1, 0.123): 0.39871593E1 0.3987159E1 +(0.31415927E1, 0.123, ~0.123E1): ~0.8435841 ~0.84358406 +(0.31415927E1, 0.123, ~0.123): 0.2634159 0.26341593 +(0.31415927E1, ~0.17014117E39, 0.34028235E39): ~0.19423192E39 ~inf +(0.31415927E1, ~0.123E4, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(0.31415927E1, ~0.123E4, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(0.31415927E1, ~0.123E4, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(0.31415927E1, ~0.123E4, ~0.123): ~0.3864282E4 ~0.38642822E4 +(0.31415927E1, ~0.123E2, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(0.31415927E1, ~0.123E2, 0.123): ~0.38518593E2 ~0.3851859E2 +(0.31415927E1, ~0.123E2, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(0.31415927E1, ~0.123E2, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(0.31415927E1, ~0.123E2, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(0.31415927E1, ~0.31415927E1, ~0.123E1): ~0.11099605E2 ~0.11099606E2 +(0.31415927E1, ~0.27182817E1, 0.123E2): 0.3760266E1 0.37602663E1 +(0.31415927E1, ~0.27182817E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(0.31415927E1, ~0.27182817E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(0.31415927E1, ~0.27182817E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(0.31415927E1, ~0.27182817E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(0.31415927E1, ~0.27182817E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(0.31415927E1, ~0.27182817E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(0.31415927E1, ~0.123E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(0.31415927E1, ~0.123E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(0.31415927E1, ~0.123, 0.123E1): 0.8435841 0.84358406 +(0.31415927E1, ~0.123, 0.123): ~0.2634159 ~0.26341593 +(0.27182817E1, 0.17014117E39, ~0.34028235E39): 0.1222093E39 inf +(0.27182817E1, 0.17014117E39, ~0.17014117E39): 0.29235047E39 inf +(0.27182817E1, 0.123E2, 0.31415927E1): 0.36576458E2 0.3657646E2 +(0.27182817E1, 0.123E2, 0.123): 0.33557865E2 0.3355787E2 +(0.27182817E1, 0.123E2, ~0.123E2): 0.21134867E2 0.21134869E2 +(0.27182817E1, 0.123E2, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(0.27182817E1, 0.123E2, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(0.27182817E1, 0.123E2, ~0.123E1): 0.32204865E2 0.3220487E2 +(0.27182817E1, 0.123E2, ~0.123E~2): 0.33433636E2 0.3343364E2 +(0.27182817E1, 0.31415927E1, 0.123E2): 0.20839735E2 0.20839733E2 +(0.27182817E1, 0.31415927E1, 0.123E1): 0.9769734E1 0.9769733E1 +(0.27182817E1, 0.31415927E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(0.27182817E1, 0.31415927E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(0.27182817E1, 0.31415927E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(0.27182817E1, 0.31415927E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(0.27182817E1, 0.31415927E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(0.27182817E1, 0.27182817E1, 0.27182817E1): 0.10107337E2 0.10107338E2 +(0.27182817E1, 0.27182817E1, ~0.31415927E1): 0.42474627E1 0.4247463E1 +(0.27182817E1, 0.27182817E1, ~0.123E~2): 0.73878255E1 0.7387826E1 +(0.27182817E1, 0.123E1, 0.123E1): 0.4573487E1 0.45734863E1 +(0.27182817E1, 0.123E1, 0.123): 0.34664867E1 0.34664865E1 +(0.27182817E1, 0.123E1, ~0.31415927E1): 0.20189385 0.2018938 +(0.27182817E1, 0.123E1, ~0.27182817E1): 0.62520486 0.6252048 +(0.27182817E1, 0.123, 0.123E~2): 0.33557865 0.33557868 +(0.27182817E1, 0.123, ~0.123): 0.21134867 0.21134868 +(0.27182817E1, ~0.17014117E39, 0.34028235E39): ~0.1222093E39 ~inf +(0.27182817E1, ~0.17014117E39, 0.17014117E39): ~0.29235047E39 ~inf +(0.27182817E1, ~0.123E2, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(0.27182817E1, ~0.123E2, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(0.27182817E1, ~0.123E2, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(0.27182817E1, ~0.123E2, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(0.27182817E1, ~0.123E2, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(0.27182817E1, ~0.123E2, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(0.27182817E1, ~0.123E2, ~0.123): ~0.33557865E2 ~0.3355787E2 +(0.27182817E1, ~0.31415927E1, 0.123E2): 0.3760266E1 0.37602663E1 +(0.27182817E1, ~0.31415927E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(0.27182817E1, ~0.31415927E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(0.27182817E1, ~0.31415927E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(0.27182817E1, ~0.31415927E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(0.27182817E1, ~0.31415927E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(0.27182817E1, ~0.31415927E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(0.27182817E1, ~0.27182817E1, 0.31415927E1): ~0.42474627E1 ~0.4247463E1 +(0.27182817E1, ~0.27182817E1, 0.123E~2): ~0.73878255E1 ~0.7387826E1 +(0.27182817E1, ~0.27182817E1, ~0.27182817E1): ~0.10107337E2 ~0.10107338E2 +(0.27182817E1, ~0.123E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(0.27182817E1, ~0.123E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(0.27182817E1, ~0.123E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(0.27182817E1, ~0.123E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(0.27182817E1, ~0.123, 0.123): ~0.21134867 ~0.21134868 +(0.27182817E1, ~0.123, ~0.123E~2): ~0.33557865 ~0.33557868 +(0.123E1, 0.34028235E39, ~0.34028235E39): 0.78264946E38 inf +(0.123E1, 0.34028235E39, ~0.17014117E39): 0.24840611E39 inf +(0.123E1, 0.17014117E39, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(0.123E1, 0.17014117E39, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(0.123E1, 0.123E2, ~0.123E2): 0.28290002E1 0.28290005E1 +(0.123E1, 0.31415927E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(0.123E1, 0.31415927E1, 0.123): 0.39871593E1 0.3987159E1 +(0.123E1, 0.27182817E1, 0.123E1): 0.4573487E1 0.45734863E1 +(0.123E1, 0.27182817E1, 0.123): 0.34664867E1 0.34664865E1 +(0.123E1, 0.27182817E1, ~0.31415927E1): 0.20189385 0.2018938 +(0.123E1, 0.27182817E1, ~0.27182817E1): 0.62520486 0.6252048 +(0.123E1, 0.123E1, 0.123E1): 0.27429001E1 0.27429E1 +(0.123E1, 0.123E1, ~0.123E1): 0.28290004 0.28289998 +(0.123E1, 0.123E1, ~0.123): 0.13899001E1 0.13899E1 +(0.123E1, 0.123, 0.123E1): 0.13812901E1 0.138129E1 +(0.123E1, 0.123, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(0.123E1, 0.123, ~0.123): 0.28290004E~1 0.28289996E~1 +(0.123E1, 0.123, ~0.123E~2): 0.15006001 0.15006 +(0.123E1, 0.123E~2, ~0.123E~2): 0.28290003E~3 0.28290006E~3 +(0.123E1, ~0.34028235E39, 0.34028235E39): ~0.78264946E38 ~inf +(0.123E1, ~0.34028235E39, 0.17014117E39): ~0.24840611E39 ~inf +(0.123E1, ~0.17014117E39, 0.34028235E39): 0.1310087E39 0.13100871E39 +(0.123E1, ~0.17014117E39, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(0.123E1, ~0.123E2, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(0.123E1, ~0.31415927E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(0.123E1, ~0.31415927E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(0.123E1, ~0.27182817E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(0.123E1, ~0.27182817E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(0.123E1, ~0.27182817E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(0.123E1, ~0.27182817E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(0.123E1, ~0.123E1, 0.123E1): ~0.28290004 ~0.28289998 +(0.123E1, ~0.123E1, 0.123): ~0.13899001E1 ~0.13899E1 +(0.123E1, ~0.123E1, ~0.123E1): ~0.27429001E1 ~0.27429E1 +(0.123E1, ~0.123, 0.123E1): 0.107871E1 0.10787101E1 +(0.123E1, ~0.123, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(0.123E1, ~0.123, 0.123E~2): ~0.15006001 ~0.15006 +(0.123E1, ~0.123, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(0.123E1, ~0.123E~2, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(0.123, 0.34028235E39, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(0.123, 0.17014117E39, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(0.123, 0.123E4, 0.123E~2): 0.15129123E3 0.15129124E3 +(0.123, 0.123E4, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(0.123, 0.123E4, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(0.123, 0.123E4, ~0.123E1): 0.15006E3 0.15006001E3 +(0.123, 0.123E2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123, 0.123E2, 0.123): 0.16359E1 0.16359001E1 +(0.123, 0.123E2, ~0.123E1): 0.28290004 0.2829001 +(0.123, 0.31415927E1, ~0.123E1): ~0.8435841 ~0.84358406 +(0.123, 0.31415927E1, ~0.123): 0.2634159 0.26341593 +(0.123, 0.27182817E1, 0.123E~2): 0.33557865 0.33557868 +(0.123, 0.27182817E1, ~0.123): 0.21134867 0.21134868 +(0.123, 0.123E1, 0.123E1): 0.13812901E1 0.138129E1 +(0.123, 0.123E1, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(0.123, 0.123E1, ~0.123): 0.28290004E~1 0.28289996E~1 +(0.123, 0.123E1, ~0.123E~2): 0.15006001 0.15006 +(0.123, ~0.34028235E39, 0.34028235E39): 0.2984276E39 0.29842763E39 +(0.123, ~0.17014117E39, 0.17014117E39): 0.1492138E39 0.14921381E39 +(0.123, ~0.123E4, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(0.123, ~0.123E4, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(0.123, ~0.123E4, 0.123E1): ~0.15006E3 ~0.15006001E3 +(0.123, ~0.123E4, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(0.123, ~0.123E2, 0.123E1): ~0.28290004 ~0.2829001 +(0.123, ~0.123E2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123, ~0.123E2, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123, ~0.31415927E1, 0.123E1): 0.8435841 0.84358406 +(0.123, ~0.31415927E1, 0.123): ~0.2634159 ~0.26341593 +(0.123, ~0.27182817E1, 0.123): ~0.21134867 ~0.21134868 +(0.123, ~0.27182817E1, ~0.123E~2): ~0.33557865 ~0.33557868 +(0.123, ~0.123E1, 0.123E1): 0.107871E1 0.10787101E1 +(0.123, ~0.123E1, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(0.123, ~0.123E1, 0.123E~2): ~0.15006001 ~0.15006 +(0.123, ~0.123E1, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(0.123E~2, 0.123E4, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123E~2, 0.123E4, 0.123): 0.16359E1 0.16359001E1 +(0.123E~2, 0.123E4, ~0.123E1): 0.28290004 0.2829001 +(0.123E~2, 0.123E2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(0.123E~2, 0.123E1, ~0.123E~2): 0.28290003E~3 0.28290006E~3 +(0.123E~2, ~0.123E4, 0.123E1): ~0.28290004 ~0.2829001 +(0.123E~2, ~0.123E4, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123E~2, ~0.123E4, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123E~2, ~0.123E2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(0.123E~2, ~0.123E1, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(~0.34028235E39, 0.123E1, 0.34028235E39): ~0.78264946E38 ~inf +(~0.34028235E39, 0.123E1, 0.17014117E39): ~0.24840611E39 ~inf +(~0.34028235E39, 0.123, 0.34028235E39): 0.2984276E39 0.29842763E39 +(~0.34028235E39, ~0.123E1, ~0.34028235E39): 0.78264946E38 inf +(~0.34028235E39, ~0.123E1, ~0.17014117E39): 0.24840611E39 inf +(~0.34028235E39, ~0.123, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(~0.17014117E39, 0.31415927E1, 0.34028235E39): ~0.19423192E39 ~inf +(~0.17014117E39, 0.27182817E1, 0.34028235E39): ~0.1222093E39 ~inf +(~0.17014117E39, 0.27182817E1, 0.17014117E39): ~0.29235047E39 ~inf +(~0.17014117E39, 0.123E1, 0.34028235E39): 0.1310087E39 0.13100871E39 +(~0.17014117E39, 0.123E1, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(~0.17014117E39, 0.123, 0.17014117E39): 0.1492138E39 0.14921381E39 +(~0.17014117E39, ~0.31415927E1, ~0.34028235E39): 0.19423192E39 inf +(~0.17014117E39, ~0.27182817E1, ~0.34028235E39): 0.1222093E39 inf +(~0.17014117E39, ~0.27182817E1, ~0.17014117E39): 0.29235047E39 inf +(~0.17014117E39, ~0.123E1, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(~0.17014117E39, ~0.123E1, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(~0.17014117E39, ~0.123, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(~0.123E4, 0.123E2, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(~0.123E4, 0.123E2, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(~0.123E4, 0.31415927E1, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(~0.123E4, 0.31415927E1, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(~0.123E4, 0.31415927E1, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(~0.123E4, 0.31415927E1, ~0.123): ~0.3864282E4 ~0.38642822E4 +(~0.123E4, 0.123, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(~0.123E4, 0.123, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(~0.123E4, 0.123, 0.123E1): ~0.15006E3 ~0.15006001E3 +(~0.123E4, 0.123, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(~0.123E4, 0.123E~2, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123E4, 0.123E~2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123E4, 0.123E~2, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123E4, ~0.123E2, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(~0.123E4, ~0.123E2, ~0.123E1): 0.151277705E5 0.1512777E5 +(~0.123E4, ~0.31415927E1, 0.123E2): 0.3876459E4 0.38764592E4 +(~0.123E4, ~0.31415927E1, 0.123): 0.3864282E4 0.38642822E4 +(~0.123E4, ~0.31415927E1, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(~0.123E4, ~0.31415927E1, ~0.123E1): 0.3862929E4 0.38629292E4 +(~0.123E4, ~0.123, 0.123E~2): 0.15129123E3 0.15129124E3 +(~0.123E4, ~0.123, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(~0.123E4, ~0.123, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(~0.123E4, ~0.123, ~0.123E1): 0.15006E3 0.15006001E3 +(~0.123E4, ~0.123E~2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123E4, ~0.123E~2, 0.123): 0.16359E1 0.16359001E1 +(~0.123E4, ~0.123E~2, ~0.123E1): 0.28290004 0.2829001 +(~0.123E2, 0.123E4, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(~0.123E2, 0.123E4, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(~0.123E2, 0.123E2, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(~0.123E2, 0.123E2, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(~0.123E2, 0.123E2, 0.123E1): ~0.15006E3 ~0.15006001E3 +(~0.123E2, 0.123E2, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(~0.123E2, 0.31415927E1, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(~0.123E2, 0.31415927E1, 0.123): ~0.38518593E2 ~0.3851859E2 +(~0.123E2, 0.31415927E1, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(~0.123E2, 0.31415927E1, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(~0.123E2, 0.31415927E1, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(~0.123E2, 0.27182817E1, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(~0.123E2, 0.27182817E1, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(~0.123E2, 0.27182817E1, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(~0.123E2, 0.27182817E1, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(~0.123E2, 0.27182817E1, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(~0.123E2, 0.27182817E1, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(~0.123E2, 0.27182817E1, ~0.123): ~0.33557865E2 ~0.3355787E2 +(~0.123E2, 0.123E1, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(~0.123E2, 0.123, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123E2, 0.123, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123E2, 0.123, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123E2, 0.123E~2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(~0.123E2, ~0.123E4, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(~0.123E2, ~0.123E4, ~0.123E1): 0.151277705E5 0.1512777E5 +(~0.123E2, ~0.123E2, 0.123E~2): 0.15129123E3 0.15129124E3 +(~0.123E2, ~0.123E2, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(~0.123E2, ~0.123E2, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(~0.123E2, ~0.123E2, ~0.123E1): 0.15006E3 0.15006001E3 +(~0.123E2, ~0.31415927E1, 0.123E2): 0.50941593E2 0.5094159E2 +(~0.123E2, ~0.31415927E1, 0.27182817E1): 0.41359875E2 0.4135987E2 +(~0.123E2, ~0.31415927E1, 0.123E~2): 0.38642822E2 0.3864282E2 +(~0.123E2, ~0.31415927E1, ~0.31415927E1): 0.355E2 0.35499996E2 +(~0.123E2, ~0.31415927E1, ~0.123): 0.38518593E2 0.3851859E2 +(~0.123E2, ~0.27182817E1, 0.31415927E1): 0.36576458E2 0.3657646E2 +(~0.123E2, ~0.27182817E1, 0.123): 0.33557865E2 0.3355787E2 +(~0.123E2, ~0.27182817E1, ~0.123E2): 0.21134867E2 0.21134869E2 +(~0.123E2, ~0.27182817E1, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(~0.123E2, ~0.27182817E1, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(~0.123E2, ~0.27182817E1, ~0.123E1): 0.32204865E2 0.3220487E2 +(~0.123E2, ~0.27182817E1, ~0.123E~2): 0.33433636E2 0.3343364E2 +(~0.123E2, ~0.123E1, ~0.123E2): 0.28290002E1 0.28290005E1 +(~0.123E2, ~0.123, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123E2, ~0.123, 0.123): 0.16359E1 0.16359001E1 +(~0.123E2, ~0.123, ~0.123E1): 0.28290004 0.2829001 +(~0.123E2, ~0.123E~2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(~0.31415927E1, 0.17014117E39, 0.34028235E39): ~0.19423192E39 ~inf +(~0.31415927E1, 0.123E4, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(~0.31415927E1, 0.123E4, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(~0.31415927E1, 0.123E4, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(~0.31415927E1, 0.123E4, ~0.123): ~0.3864282E4 ~0.38642822E4 +(~0.31415927E1, 0.123E2, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(~0.31415927E1, 0.123E2, 0.123): ~0.38518593E2 ~0.3851859E2 +(~0.31415927E1, 0.123E2, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(~0.31415927E1, 0.123E2, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(~0.31415927E1, 0.123E2, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(~0.31415927E1, 0.31415927E1, ~0.123E1): ~0.11099605E2 ~0.11099606E2 +(~0.31415927E1, 0.27182817E1, 0.123E2): 0.3760266E1 0.37602663E1 +(~0.31415927E1, 0.27182817E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(~0.31415927E1, 0.27182817E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(~0.31415927E1, 0.27182817E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(~0.31415927E1, 0.27182817E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(~0.31415927E1, 0.27182817E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(~0.31415927E1, 0.27182817E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(~0.31415927E1, 0.123E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(~0.31415927E1, 0.123E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(~0.31415927E1, 0.123, 0.123E1): 0.8435841 0.84358406 +(~0.31415927E1, 0.123, 0.123): ~0.2634159 ~0.26341593 +(~0.31415927E1, ~0.17014117E39, ~0.34028235E39): 0.19423192E39 inf +(~0.31415927E1, ~0.123E4, 0.123E2): 0.3876459E4 0.38764592E4 +(~0.31415927E1, ~0.123E4, 0.123): 0.3864282E4 0.38642822E4 +(~0.31415927E1, ~0.123E4, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(~0.31415927E1, ~0.123E4, ~0.123E1): 0.3862929E4 0.38629292E4 +(~0.31415927E1, ~0.123E2, 0.123E2): 0.50941593E2 0.5094159E2 +(~0.31415927E1, ~0.123E2, 0.27182817E1): 0.41359875E2 0.4135987E2 +(~0.31415927E1, ~0.123E2, 0.123E~2): 0.38642822E2 0.3864282E2 +(~0.31415927E1, ~0.123E2, ~0.31415927E1): 0.355E2 0.35499996E2 +(~0.31415927E1, ~0.123E2, ~0.123): 0.38518593E2 0.3851859E2 +(~0.31415927E1, ~0.31415927E1, 0.123E1): 0.11099605E2 0.11099606E2 +(~0.31415927E1, ~0.27182817E1, 0.123E2): 0.20839735E2 0.20839733E2 +(~0.31415927E1, ~0.27182817E1, 0.123E1): 0.9769734E1 0.9769733E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(~0.31415927E1, ~0.27182817E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(~0.31415927E1, ~0.27182817E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(~0.31415927E1, ~0.123E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(~0.31415927E1, ~0.123E1, 0.123): 0.39871593E1 0.3987159E1 +(~0.31415927E1, ~0.123, ~0.123E1): ~0.8435841 ~0.84358406 +(~0.31415927E1, ~0.123, ~0.123): 0.2634159 0.26341593 +(~0.27182817E1, 0.17014117E39, 0.34028235E39): ~0.1222093E39 ~inf +(~0.27182817E1, 0.17014117E39, 0.17014117E39): ~0.29235047E39 ~inf +(~0.27182817E1, 0.123E2, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(~0.27182817E1, 0.123E2, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(~0.27182817E1, 0.123E2, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(~0.27182817E1, 0.123E2, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(~0.27182817E1, 0.123E2, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(~0.27182817E1, 0.123E2, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(~0.27182817E1, 0.123E2, ~0.123): ~0.33557865E2 ~0.3355787E2 +(~0.27182817E1, 0.31415927E1, 0.123E2): 0.3760266E1 0.37602663E1 +(~0.27182817E1, 0.31415927E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(~0.27182817E1, 0.31415927E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(~0.27182817E1, 0.31415927E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(~0.27182817E1, 0.31415927E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(~0.27182817E1, 0.31415927E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(~0.27182817E1, 0.31415927E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(~0.27182817E1, 0.27182817E1, 0.31415927E1): ~0.42474627E1 ~0.4247463E1 +(~0.27182817E1, 0.27182817E1, 0.123E~2): ~0.73878255E1 ~0.7387826E1 +(~0.27182817E1, 0.27182817E1, ~0.27182817E1): ~0.10107337E2 ~0.10107338E2 +(~0.27182817E1, 0.123E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(~0.27182817E1, 0.123E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(~0.27182817E1, 0.123E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(~0.27182817E1, 0.123E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(~0.27182817E1, 0.123, 0.123): ~0.21134867 ~0.21134868 +(~0.27182817E1, 0.123, ~0.123E~2): ~0.33557865 ~0.33557868 +(~0.27182817E1, ~0.17014117E39, ~0.34028235E39): 0.1222093E39 inf +(~0.27182817E1, ~0.17014117E39, ~0.17014117E39): 0.29235047E39 inf +(~0.27182817E1, ~0.123E2, 0.31415927E1): 0.36576458E2 0.3657646E2 +(~0.27182817E1, ~0.123E2, 0.123): 0.33557865E2 0.3355787E2 +(~0.27182817E1, ~0.123E2, ~0.123E2): 0.21134867E2 0.21134869E2 +(~0.27182817E1, ~0.123E2, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(~0.27182817E1, ~0.123E2, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(~0.27182817E1, ~0.123E2, ~0.123E1): 0.32204865E2 0.3220487E2 +(~0.27182817E1, ~0.123E2, ~0.123E~2): 0.33433636E2 0.3343364E2 +(~0.27182817E1, ~0.31415927E1, 0.123E2): 0.20839735E2 0.20839733E2 +(~0.27182817E1, ~0.31415927E1, 0.123E1): 0.9769734E1 0.9769733E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(~0.27182817E1, ~0.31415927E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(~0.27182817E1, ~0.31415927E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(~0.27182817E1, ~0.27182817E1, 0.27182817E1): 0.10107337E2 0.10107338E2 +(~0.27182817E1, ~0.27182817E1, ~0.31415927E1): 0.42474627E1 0.4247463E1 +(~0.27182817E1, ~0.27182817E1, ~0.123E~2): 0.73878255E1 0.7387826E1 +(~0.27182817E1, ~0.123E1, 0.123E1): 0.4573487E1 0.45734863E1 +(~0.27182817E1, ~0.123E1, 0.123): 0.34664867E1 0.34664865E1 +(~0.27182817E1, ~0.123E1, ~0.31415927E1): 0.20189385 0.2018938 +(~0.27182817E1, ~0.123E1, ~0.27182817E1): 0.62520486 0.6252048 +(~0.27182817E1, ~0.123, 0.123E~2): 0.33557865 0.33557868 +(~0.27182817E1, ~0.123, ~0.123): 0.21134867 0.21134868 +(~0.123E1, 0.34028235E39, 0.34028235E39): ~0.78264946E38 ~inf +(~0.123E1, 0.34028235E39, 0.17014117E39): ~0.24840611E39 ~inf +(~0.123E1, 0.17014117E39, 0.34028235E39): 0.1310087E39 0.13100871E39 +(~0.123E1, 0.17014117E39, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(~0.123E1, 0.123E2, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(~0.123E1, 0.31415927E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(~0.123E1, 0.31415927E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(~0.123E1, 0.27182817E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(~0.123E1, 0.27182817E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(~0.123E1, 0.27182817E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(~0.123E1, 0.27182817E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(~0.123E1, 0.123E1, 0.123E1): ~0.28290004 ~0.28289998 +(~0.123E1, 0.123E1, 0.123): ~0.13899001E1 ~0.13899E1 +(~0.123E1, 0.123E1, ~0.123E1): ~0.27429001E1 ~0.27429E1 +(~0.123E1, 0.123, 0.123E1): 0.107871E1 0.10787101E1 +(~0.123E1, 0.123, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(~0.123E1, 0.123, 0.123E~2): ~0.15006001 ~0.15006 +(~0.123E1, 0.123, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(~0.123E1, 0.123E~2, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(~0.123E1, ~0.34028235E39, ~0.34028235E39): 0.78264946E38 inf +(~0.123E1, ~0.34028235E39, ~0.17014117E39): 0.24840611E39 inf +(~0.123E1, ~0.17014117E39, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(~0.123E1, ~0.17014117E39, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(~0.123E1, ~0.123E2, ~0.123E2): 0.28290002E1 0.28290005E1 +(~0.123E1, ~0.31415927E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(~0.123E1, ~0.31415927E1, 0.123): 0.39871593E1 0.3987159E1 +(~0.123E1, ~0.27182817E1, 0.123E1): 0.4573487E1 0.45734863E1 +(~0.123E1, ~0.27182817E1, 0.123): 0.34664867E1 0.34664865E1 +(~0.123E1, ~0.27182817E1, ~0.31415927E1): 0.20189385 0.2018938 +(~0.123E1, ~0.27182817E1, ~0.27182817E1): 0.62520486 0.6252048 +(~0.123E1, ~0.123E1, 0.123E1): 0.27429001E1 0.27429E1 +(~0.123E1, ~0.123E1, ~0.123E1): 0.28290004 0.28289998 +(~0.123E1, ~0.123E1, ~0.123): 0.13899001E1 0.13899E1 +(~0.123E1, ~0.123, 0.123E1): 0.13812901E1 0.138129E1 +(~0.123E1, ~0.123, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(~0.123E1, ~0.123, ~0.123): 0.28290004E~1 0.28289996E~1 +(~0.123E1, ~0.123, ~0.123E~2): 0.15006001 0.15006 +(~0.123E1, ~0.123E~2, ~0.123E~2): 0.28290003E~3 0.28290006E~3 +(~0.123, 0.34028235E39, 0.34028235E39): 0.2984276E39 0.29842763E39 +(~0.123, 0.17014117E39, 0.17014117E39): 0.1492138E39 0.14921381E39 +(~0.123, 0.123E4, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(~0.123, 0.123E4, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(~0.123, 0.123E4, 0.123E1): ~0.15006E3 ~0.15006001E3 +(~0.123, 0.123E4, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(~0.123, 0.123E2, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123, 0.123E2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123, 0.123E2, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123, 0.31415927E1, 0.123E1): 0.8435841 0.84358406 +(~0.123, 0.31415927E1, 0.123): ~0.2634159 ~0.26341593 +(~0.123, 0.27182817E1, 0.123): ~0.21134867 ~0.21134868 +(~0.123, 0.27182817E1, ~0.123E~2): ~0.33557865 ~0.33557868 +(~0.123, 0.123E1, 0.123E1): 0.107871E1 0.10787101E1 +(~0.123, 0.123E1, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(~0.123, 0.123E1, 0.123E~2): ~0.15006001 ~0.15006 +(~0.123, 0.123E1, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(~0.123, ~0.34028235E39, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(~0.123, ~0.17014117E39, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(~0.123, ~0.123E4, 0.123E~2): 0.15129123E3 0.15129124E3 +(~0.123, ~0.123E4, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(~0.123, ~0.123E4, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(~0.123, ~0.123E4, ~0.123E1): 0.15006E3 0.15006001E3 +(~0.123, ~0.123E2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123, ~0.123E2, 0.123): 0.16359E1 0.16359001E1 +(~0.123, ~0.123E2, ~0.123E1): 0.28290004 0.2829001 +(~0.123, ~0.31415927E1, ~0.123E1): ~0.8435841 ~0.84358406 +(~0.123, ~0.31415927E1, ~0.123): 0.2634159 0.26341593 +(~0.123, ~0.27182817E1, 0.123E~2): 0.33557865 0.33557868 +(~0.123, ~0.27182817E1, ~0.123): 0.21134867 0.21134868 +(~0.123, ~0.123E1, 0.123E1): 0.13812901E1 0.138129E1 +(~0.123, ~0.123E1, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(~0.123, ~0.123E1, ~0.123): 0.28290004E~1 0.28289996E~1 +(~0.123, ~0.123E1, ~0.123E~2): 0.15006001 0.15006 +(~0.123E~2, 0.123E4, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123E~2, 0.123E4, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123E~2, 0.123E4, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123E~2, 0.123E2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(~0.123E~2, 0.123E1, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(~0.123E~2, ~0.123E4, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123E~2, ~0.123E4, 0.123): 0.16359E1 0.16359001E1 +(~0.123E~2, ~0.123E4, ~0.123E1): 0.28290004 0.2829001 +(~0.123E~2, ~0.123E2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(~0.123E~2, ~0.123E1, ~0.123E~2): 0.28290003E~3 0.28290006E~3 + +Testing Real.{realCeil,realFloor,realTrunc} +0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 +0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 +0.123E4 0.123E4 0.123E4 0.123E4 +0.123E2 0.13E2 0.12E2 0.12E2 +0.31415927E1 0.4E1 0.3E1 0.3E1 +0.27182817E1 0.3E1 0.2E1 0.2E1 +0.123E1 0.2E1 0.1E1 0.1E1 +0.123 0.1E1 0.0 0.0 +0.123E~2 0.1E1 0.0 0.0 +0.11754944E~37 0.1E1 0.0 0.0 +0.5877472E~38 0.1E1 0.0 0.0 +0.1E~44 0.1E1 0.0 0.0 +0.0 0.0 0.0 0.0 +~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 +~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 +~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 +~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 +~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 +~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 +~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 +~0.123 ~0.0 ~0.1E1 ~0.0 +~0.123E~2 ~0.0 ~0.1E1 ~0.0 +~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 +~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 +~0.1E~44 ~0.0 ~0.1E1 ~0.0 +~0.0 ~0.0 ~0.0 ~0.0 + +Testing Real.{<,<=,>,>=,==,!=,?=,unordered} +< (0.34028235E39, 0.34028235E39) = false +> (0.34028235E39, 0.34028235E39) = false +== (0.34028235E39, 0.34028235E39) = true +?= (0.34028235E39, 0.34028235E39) = true +< (0.34028235E39, 0.17014117E39) = false +> (0.34028235E39, 0.17014117E39) = true +== (0.34028235E39, 0.17014117E39) = false +?= (0.34028235E39, 0.17014117E39) = false +< (0.34028235E39, 0.123E4) = false +> (0.34028235E39, 0.123E4) = true +== (0.34028235E39, 0.123E4) = false +?= (0.34028235E39, 0.123E4) = false +< (0.34028235E39, 0.123E2) = false +> (0.34028235E39, 0.123E2) = true +== (0.34028235E39, 0.123E2) = false +?= (0.34028235E39, 0.123E2) = false +< (0.34028235E39, 0.31415927E1) = false +> (0.34028235E39, 0.31415927E1) = true +== (0.34028235E39, 0.31415927E1) = false +?= (0.34028235E39, 0.31415927E1) = false +< (0.34028235E39, 0.27182817E1) = false +> (0.34028235E39, 0.27182817E1) = true +== (0.34028235E39, 0.27182817E1) = false +?= (0.34028235E39, 0.27182817E1) = false +< (0.34028235E39, 0.123E1) = false +> (0.34028235E39, 0.123E1) = true +== (0.34028235E39, 0.123E1) = false +?= (0.34028235E39, 0.123E1) = false +< (0.34028235E39, 0.123) = false +> (0.34028235E39, 0.123) = true +== (0.34028235E39, 0.123) = false +?= (0.34028235E39, 0.123) = false +< (0.34028235E39, 0.123E~2) = false +> (0.34028235E39, 0.123E~2) = true +== (0.34028235E39, 0.123E~2) = false +?= (0.34028235E39, 0.123E~2) = false +< (0.34028235E39, 0.11754944E~37) = false +> (0.34028235E39, 0.11754944E~37) = true +== (0.34028235E39, 0.11754944E~37) = false +?= (0.34028235E39, 0.11754944E~37) = false +< (0.34028235E39, 0.5877472E~38) = false +> (0.34028235E39, 0.5877472E~38) = true +== (0.34028235E39, 0.5877472E~38) = false +?= (0.34028235E39, 0.5877472E~38) = false +< (0.34028235E39, 0.1E~44) = false +> (0.34028235E39, 0.1E~44) = true +== (0.34028235E39, 0.1E~44) = false +?= (0.34028235E39, 0.1E~44) = false +< (0.34028235E39, 0.0) = false +> (0.34028235E39, 0.0) = true +== (0.34028235E39, 0.0) = false +?= (0.34028235E39, 0.0) = false +< (0.34028235E39, ~0.34028235E39) = false +> (0.34028235E39, ~0.34028235E39) = true +== (0.34028235E39, ~0.34028235E39) = false +?= (0.34028235E39, ~0.34028235E39) = false +< (0.34028235E39, ~0.17014117E39) = false +> (0.34028235E39, ~0.17014117E39) = true +== (0.34028235E39, ~0.17014117E39) = false +?= (0.34028235E39, ~0.17014117E39) = false +< (0.34028235E39, ~0.123E4) = false +> (0.34028235E39, ~0.123E4) = true +== (0.34028235E39, ~0.123E4) = false +?= (0.34028235E39, ~0.123E4) = false +< (0.34028235E39, ~0.123E2) = false +> (0.34028235E39, ~0.123E2) = true +== (0.34028235E39, ~0.123E2) = false +?= (0.34028235E39, ~0.123E2) = false +< (0.34028235E39, ~0.31415927E1) = false +> (0.34028235E39, ~0.31415927E1) = true +== (0.34028235E39, ~0.31415927E1) = false +?= (0.34028235E39, ~0.31415927E1) = false +< (0.34028235E39, ~0.27182817E1) = false +> (0.34028235E39, ~0.27182817E1) = true +== (0.34028235E39, ~0.27182817E1) = false +?= (0.34028235E39, ~0.27182817E1) = false +< (0.34028235E39, ~0.123E1) = false +> (0.34028235E39, ~0.123E1) = true +== (0.34028235E39, ~0.123E1) = false +?= (0.34028235E39, ~0.123E1) = false +< (0.34028235E39, ~0.123) = false +> (0.34028235E39, ~0.123) = true +== (0.34028235E39, ~0.123) = false +?= (0.34028235E39, ~0.123) = false +< (0.34028235E39, ~0.123E~2) = false +> (0.34028235E39, ~0.123E~2) = true +== (0.34028235E39, ~0.123E~2) = false +?= (0.34028235E39, ~0.123E~2) = false +< (0.34028235E39, ~0.11754944E~37) = false +> (0.34028235E39, ~0.11754944E~37) = true +== (0.34028235E39, ~0.11754944E~37) = false +?= (0.34028235E39, ~0.11754944E~37) = false +< (0.34028235E39, ~0.5877472E~38) = false +> (0.34028235E39, ~0.5877472E~38) = true +== (0.34028235E39, ~0.5877472E~38) = false +?= (0.34028235E39, ~0.5877472E~38) = false +< (0.34028235E39, ~0.1E~44) = false +> (0.34028235E39, ~0.1E~44) = true +== (0.34028235E39, ~0.1E~44) = false +?= (0.34028235E39, ~0.1E~44) = false +< (0.34028235E39, ~0.0) = false +> (0.34028235E39, ~0.0) = true +== (0.34028235E39, ~0.0) = false +?= (0.34028235E39, ~0.0) = false +< (0.17014117E39, 0.34028235E39) = true +> (0.17014117E39, 0.34028235E39) = false +== (0.17014117E39, 0.34028235E39) = false +?= (0.17014117E39, 0.34028235E39) = false +< (0.17014117E39, 0.17014117E39) = false +> (0.17014117E39, 0.17014117E39) = false +== (0.17014117E39, 0.17014117E39) = true +?= (0.17014117E39, 0.17014117E39) = true +< (0.17014117E39, 0.123E4) = false +> (0.17014117E39, 0.123E4) = true +== (0.17014117E39, 0.123E4) = false +?= (0.17014117E39, 0.123E4) = false +< (0.17014117E39, 0.123E2) = false +> (0.17014117E39, 0.123E2) = true +== (0.17014117E39, 0.123E2) = false +?= (0.17014117E39, 0.123E2) = false +< (0.17014117E39, 0.31415927E1) = false +> (0.17014117E39, 0.31415927E1) = true +== (0.17014117E39, 0.31415927E1) = false +?= (0.17014117E39, 0.31415927E1) = false +< (0.17014117E39, 0.27182817E1) = false +> (0.17014117E39, 0.27182817E1) = true +== (0.17014117E39, 0.27182817E1) = false +?= (0.17014117E39, 0.27182817E1) = false +< (0.17014117E39, 0.123E1) = false +> (0.17014117E39, 0.123E1) = true +== (0.17014117E39, 0.123E1) = false +?= (0.17014117E39, 0.123E1) = false +< (0.17014117E39, 0.123) = false +> (0.17014117E39, 0.123) = true +== (0.17014117E39, 0.123) = false +?= (0.17014117E39, 0.123) = false +< (0.17014117E39, 0.123E~2) = false +> (0.17014117E39, 0.123E~2) = true +== (0.17014117E39, 0.123E~2) = false +?= (0.17014117E39, 0.123E~2) = false +< (0.17014117E39, 0.11754944E~37) = false +> (0.17014117E39, 0.11754944E~37) = true +== (0.17014117E39, 0.11754944E~37) = false +?= (0.17014117E39, 0.11754944E~37) = false +< (0.17014117E39, 0.5877472E~38) = false +> (0.17014117E39, 0.5877472E~38) = true +== (0.17014117E39, 0.5877472E~38) = false +?= (0.17014117E39, 0.5877472E~38) = false +< (0.17014117E39, 0.1E~44) = false +> (0.17014117E39, 0.1E~44) = true +== (0.17014117E39, 0.1E~44) = false +?= (0.17014117E39, 0.1E~44) = false +< (0.17014117E39, 0.0) = false +> (0.17014117E39, 0.0) = true +== (0.17014117E39, 0.0) = false +?= (0.17014117E39, 0.0) = false +< (0.17014117E39, ~0.34028235E39) = false +> (0.17014117E39, ~0.34028235E39) = true +== (0.17014117E39, ~0.34028235E39) = false +?= (0.17014117E39, ~0.34028235E39) = false +< (0.17014117E39, ~0.17014117E39) = false +> (0.17014117E39, ~0.17014117E39) = true +== (0.17014117E39, ~0.17014117E39) = false +?= (0.17014117E39, ~0.17014117E39) = false +< (0.17014117E39, ~0.123E4) = false +> (0.17014117E39, ~0.123E4) = true +== (0.17014117E39, ~0.123E4) = false +?= (0.17014117E39, ~0.123E4) = false +< (0.17014117E39, ~0.123E2) = false +> (0.17014117E39, ~0.123E2) = true +== (0.17014117E39, ~0.123E2) = false +?= (0.17014117E39, ~0.123E2) = false +< (0.17014117E39, ~0.31415927E1) = false +> (0.17014117E39, ~0.31415927E1) = true +== (0.17014117E39, ~0.31415927E1) = false +?= (0.17014117E39, ~0.31415927E1) = false +< (0.17014117E39, ~0.27182817E1) = false +> (0.17014117E39, ~0.27182817E1) = true +== (0.17014117E39, ~0.27182817E1) = false +?= (0.17014117E39, ~0.27182817E1) = false +< (0.17014117E39, ~0.123E1) = false +> (0.17014117E39, ~0.123E1) = true +== (0.17014117E39, ~0.123E1) = false +?= (0.17014117E39, ~0.123E1) = false +< (0.17014117E39, ~0.123) = false +> (0.17014117E39, ~0.123) = true +== (0.17014117E39, ~0.123) = false +?= (0.17014117E39, ~0.123) = false +< (0.17014117E39, ~0.123E~2) = false +> (0.17014117E39, ~0.123E~2) = true +== (0.17014117E39, ~0.123E~2) = false +?= (0.17014117E39, ~0.123E~2) = false +< (0.17014117E39, ~0.11754944E~37) = false +> (0.17014117E39, ~0.11754944E~37) = true +== (0.17014117E39, ~0.11754944E~37) = false +?= (0.17014117E39, ~0.11754944E~37) = false +< (0.17014117E39, ~0.5877472E~38) = false +> (0.17014117E39, ~0.5877472E~38) = true +== (0.17014117E39, ~0.5877472E~38) = false +?= (0.17014117E39, ~0.5877472E~38) = false +< (0.17014117E39, ~0.1E~44) = false +> (0.17014117E39, ~0.1E~44) = true +== (0.17014117E39, ~0.1E~44) = false +?= (0.17014117E39, ~0.1E~44) = false +< (0.17014117E39, ~0.0) = false +> (0.17014117E39, ~0.0) = true +== (0.17014117E39, ~0.0) = false +?= (0.17014117E39, ~0.0) = false +< (0.123E4, 0.34028235E39) = true +> (0.123E4, 0.34028235E39) = false +== (0.123E4, 0.34028235E39) = false +?= (0.123E4, 0.34028235E39) = false +< (0.123E4, 0.17014117E39) = true +> (0.123E4, 0.17014117E39) = false +== (0.123E4, 0.17014117E39) = false +?= (0.123E4, 0.17014117E39) = false +< (0.123E4, 0.123E4) = false +> (0.123E4, 0.123E4) = false +== (0.123E4, 0.123E4) = true +?= (0.123E4, 0.123E4) = true +< (0.123E4, 0.123E2) = false +> (0.123E4, 0.123E2) = true +== (0.123E4, 0.123E2) = false +?= (0.123E4, 0.123E2) = false +< (0.123E4, 0.31415927E1) = false +> (0.123E4, 0.31415927E1) = true +== (0.123E4, 0.31415927E1) = false +?= (0.123E4, 0.31415927E1) = false +< (0.123E4, 0.27182817E1) = false +> (0.123E4, 0.27182817E1) = true +== (0.123E4, 0.27182817E1) = false +?= (0.123E4, 0.27182817E1) = false +< (0.123E4, 0.123E1) = false +> (0.123E4, 0.123E1) = true +== (0.123E4, 0.123E1) = false +?= (0.123E4, 0.123E1) = false +< (0.123E4, 0.123) = false +> (0.123E4, 0.123) = true +== (0.123E4, 0.123) = false +?= (0.123E4, 0.123) = false +< (0.123E4, 0.123E~2) = false +> (0.123E4, 0.123E~2) = true +== (0.123E4, 0.123E~2) = false +?= (0.123E4, 0.123E~2) = false +< (0.123E4, 0.11754944E~37) = false +> (0.123E4, 0.11754944E~37) = true +== (0.123E4, 0.11754944E~37) = false +?= (0.123E4, 0.11754944E~37) = false +< (0.123E4, 0.5877472E~38) = false +> (0.123E4, 0.5877472E~38) = true +== (0.123E4, 0.5877472E~38) = false +?= (0.123E4, 0.5877472E~38) = false +< (0.123E4, 0.1E~44) = false +> (0.123E4, 0.1E~44) = true +== (0.123E4, 0.1E~44) = false +?= (0.123E4, 0.1E~44) = false +< (0.123E4, 0.0) = false +> (0.123E4, 0.0) = true +== (0.123E4, 0.0) = false +?= (0.123E4, 0.0) = false +< (0.123E4, ~0.34028235E39) = false +> (0.123E4, ~0.34028235E39) = true +== (0.123E4, ~0.34028235E39) = false +?= (0.123E4, ~0.34028235E39) = false +< (0.123E4, ~0.17014117E39) = false +> (0.123E4, ~0.17014117E39) = true +== (0.123E4, ~0.17014117E39) = false +?= (0.123E4, ~0.17014117E39) = false +< (0.123E4, ~0.123E4) = false +> (0.123E4, ~0.123E4) = true +== (0.123E4, ~0.123E4) = false +?= (0.123E4, ~0.123E4) = false +< (0.123E4, ~0.123E2) = false +> (0.123E4, ~0.123E2) = true +== (0.123E4, ~0.123E2) = false +?= (0.123E4, ~0.123E2) = false +< (0.123E4, ~0.31415927E1) = false +> (0.123E4, ~0.31415927E1) = true +== (0.123E4, ~0.31415927E1) = false +?= (0.123E4, ~0.31415927E1) = false +< (0.123E4, ~0.27182817E1) = false +> (0.123E4, ~0.27182817E1) = true +== (0.123E4, ~0.27182817E1) = false +?= (0.123E4, ~0.27182817E1) = false +< (0.123E4, ~0.123E1) = false +> (0.123E4, ~0.123E1) = true +== (0.123E4, ~0.123E1) = false +?= (0.123E4, ~0.123E1) = false +< (0.123E4, ~0.123) = false +> (0.123E4, ~0.123) = true +== (0.123E4, ~0.123) = false +?= (0.123E4, ~0.123) = false +< (0.123E4, ~0.123E~2) = false +> (0.123E4, ~0.123E~2) = true +== (0.123E4, ~0.123E~2) = false +?= (0.123E4, ~0.123E~2) = false +< (0.123E4, ~0.11754944E~37) = false +> (0.123E4, ~0.11754944E~37) = true +== (0.123E4, ~0.11754944E~37) = false +?= (0.123E4, ~0.11754944E~37) = false +< (0.123E4, ~0.5877472E~38) = false +> (0.123E4, ~0.5877472E~38) = true +== (0.123E4, ~0.5877472E~38) = false +?= (0.123E4, ~0.5877472E~38) = false +< (0.123E4, ~0.1E~44) = false +> (0.123E4, ~0.1E~44) = true +== (0.123E4, ~0.1E~44) = false +?= (0.123E4, ~0.1E~44) = false +< (0.123E4, ~0.0) = false +> (0.123E4, ~0.0) = true +== (0.123E4, ~0.0) = false +?= (0.123E4, ~0.0) = false +< (0.123E2, 0.34028235E39) = true +> (0.123E2, 0.34028235E39) = false +== (0.123E2, 0.34028235E39) = false +?= (0.123E2, 0.34028235E39) = false +< (0.123E2, 0.17014117E39) = true +> (0.123E2, 0.17014117E39) = false +== (0.123E2, 0.17014117E39) = false +?= (0.123E2, 0.17014117E39) = false +< (0.123E2, 0.123E4) = true +> (0.123E2, 0.123E4) = false +== (0.123E2, 0.123E4) = false +?= (0.123E2, 0.123E4) = false +< (0.123E2, 0.123E2) = false +> (0.123E2, 0.123E2) = false +== (0.123E2, 0.123E2) = true +?= (0.123E2, 0.123E2) = true +< (0.123E2, 0.31415927E1) = false +> (0.123E2, 0.31415927E1) = true +== (0.123E2, 0.31415927E1) = false +?= (0.123E2, 0.31415927E1) = false +< (0.123E2, 0.27182817E1) = false +> (0.123E2, 0.27182817E1) = true +== (0.123E2, 0.27182817E1) = false +?= (0.123E2, 0.27182817E1) = false +< (0.123E2, 0.123E1) = false +> (0.123E2, 0.123E1) = true +== (0.123E2, 0.123E1) = false +?= (0.123E2, 0.123E1) = false +< (0.123E2, 0.123) = false +> (0.123E2, 0.123) = true +== (0.123E2, 0.123) = false +?= (0.123E2, 0.123) = false +< (0.123E2, 0.123E~2) = false +> (0.123E2, 0.123E~2) = true +== (0.123E2, 0.123E~2) = false +?= (0.123E2, 0.123E~2) = false +< (0.123E2, 0.11754944E~37) = false +> (0.123E2, 0.11754944E~37) = true +== (0.123E2, 0.11754944E~37) = false +?= (0.123E2, 0.11754944E~37) = false +< (0.123E2, 0.5877472E~38) = false +> (0.123E2, 0.5877472E~38) = true +== (0.123E2, 0.5877472E~38) = false +?= (0.123E2, 0.5877472E~38) = false +< (0.123E2, 0.1E~44) = false +> (0.123E2, 0.1E~44) = true +== (0.123E2, 0.1E~44) = false +?= (0.123E2, 0.1E~44) = false +< (0.123E2, 0.0) = false +> (0.123E2, 0.0) = true +== (0.123E2, 0.0) = false +?= (0.123E2, 0.0) = false +< (0.123E2, ~0.34028235E39) = false +> (0.123E2, ~0.34028235E39) = true +== (0.123E2, ~0.34028235E39) = false +?= (0.123E2, ~0.34028235E39) = false +< (0.123E2, ~0.17014117E39) = false +> (0.123E2, ~0.17014117E39) = true +== (0.123E2, ~0.17014117E39) = false +?= (0.123E2, ~0.17014117E39) = false +< (0.123E2, ~0.123E4) = false +> (0.123E2, ~0.123E4) = true +== (0.123E2, ~0.123E4) = false +?= (0.123E2, ~0.123E4) = false +< (0.123E2, ~0.123E2) = false +> (0.123E2, ~0.123E2) = true +== (0.123E2, ~0.123E2) = false +?= (0.123E2, ~0.123E2) = false +< (0.123E2, ~0.31415927E1) = false +> (0.123E2, ~0.31415927E1) = true +== (0.123E2, ~0.31415927E1) = false +?= (0.123E2, ~0.31415927E1) = false +< (0.123E2, ~0.27182817E1) = false +> (0.123E2, ~0.27182817E1) = true +== (0.123E2, ~0.27182817E1) = false +?= (0.123E2, ~0.27182817E1) = false +< (0.123E2, ~0.123E1) = false +> (0.123E2, ~0.123E1) = true +== (0.123E2, ~0.123E1) = false +?= (0.123E2, ~0.123E1) = false +< (0.123E2, ~0.123) = false +> (0.123E2, ~0.123) = true +== (0.123E2, ~0.123) = false +?= (0.123E2, ~0.123) = false +< (0.123E2, ~0.123E~2) = false +> (0.123E2, ~0.123E~2) = true +== (0.123E2, ~0.123E~2) = false +?= (0.123E2, ~0.123E~2) = false +< (0.123E2, ~0.11754944E~37) = false +> (0.123E2, ~0.11754944E~37) = true +== (0.123E2, ~0.11754944E~37) = false +?= (0.123E2, ~0.11754944E~37) = false +< (0.123E2, ~0.5877472E~38) = false +> (0.123E2, ~0.5877472E~38) = true +== (0.123E2, ~0.5877472E~38) = false +?= (0.123E2, ~0.5877472E~38) = false +< (0.123E2, ~0.1E~44) = false +> (0.123E2, ~0.1E~44) = true +== (0.123E2, ~0.1E~44) = false +?= (0.123E2, ~0.1E~44) = false +< (0.123E2, ~0.0) = false +> (0.123E2, ~0.0) = true +== (0.123E2, ~0.0) = false +?= (0.123E2, ~0.0) = false +< (0.31415927E1, 0.34028235E39) = true +> (0.31415927E1, 0.34028235E39) = false +== (0.31415927E1, 0.34028235E39) = false +?= (0.31415927E1, 0.34028235E39) = false +< (0.31415927E1, 0.17014117E39) = true +> (0.31415927E1, 0.17014117E39) = false +== (0.31415927E1, 0.17014117E39) = false +?= (0.31415927E1, 0.17014117E39) = false +< (0.31415927E1, 0.123E4) = true +> (0.31415927E1, 0.123E4) = false +== (0.31415927E1, 0.123E4) = false +?= (0.31415927E1, 0.123E4) = false +< (0.31415927E1, 0.123E2) = true +> (0.31415927E1, 0.123E2) = false +== (0.31415927E1, 0.123E2) = false +?= (0.31415927E1, 0.123E2) = false +< (0.31415927E1, 0.31415927E1) = false +> (0.31415927E1, 0.31415927E1) = false +== (0.31415927E1, 0.31415927E1) = true +?= (0.31415927E1, 0.31415927E1) = true +< (0.31415927E1, 0.27182817E1) = false +> (0.31415927E1, 0.27182817E1) = true +== (0.31415927E1, 0.27182817E1) = false +?= (0.31415927E1, 0.27182817E1) = false +< (0.31415927E1, 0.123E1) = false +> (0.31415927E1, 0.123E1) = true +== (0.31415927E1, 0.123E1) = false +?= (0.31415927E1, 0.123E1) = false +< (0.31415927E1, 0.123) = false +> (0.31415927E1, 0.123) = true +== (0.31415927E1, 0.123) = false +?= (0.31415927E1, 0.123) = false +< (0.31415927E1, 0.123E~2) = false +> (0.31415927E1, 0.123E~2) = true +== (0.31415927E1, 0.123E~2) = false +?= (0.31415927E1, 0.123E~2) = false +< (0.31415927E1, 0.11754944E~37) = false +> (0.31415927E1, 0.11754944E~37) = true +== (0.31415927E1, 0.11754944E~37) = false +?= (0.31415927E1, 0.11754944E~37) = false +< (0.31415927E1, 0.5877472E~38) = false +> (0.31415927E1, 0.5877472E~38) = true +== (0.31415927E1, 0.5877472E~38) = false +?= (0.31415927E1, 0.5877472E~38) = false +< (0.31415927E1, 0.1E~44) = false +> (0.31415927E1, 0.1E~44) = true +== (0.31415927E1, 0.1E~44) = false +?= (0.31415927E1, 0.1E~44) = false +< (0.31415927E1, 0.0) = false +> (0.31415927E1, 0.0) = true +== (0.31415927E1, 0.0) = false +?= (0.31415927E1, 0.0) = false +< (0.31415927E1, ~0.34028235E39) = false +> (0.31415927E1, ~0.34028235E39) = true +== (0.31415927E1, ~0.34028235E39) = false +?= (0.31415927E1, ~0.34028235E39) = false +< (0.31415927E1, ~0.17014117E39) = false +> (0.31415927E1, ~0.17014117E39) = true +== (0.31415927E1, ~0.17014117E39) = false +?= (0.31415927E1, ~0.17014117E39) = false +< (0.31415927E1, ~0.123E4) = false +> (0.31415927E1, ~0.123E4) = true +== (0.31415927E1, ~0.123E4) = false +?= (0.31415927E1, ~0.123E4) = false +< (0.31415927E1, ~0.123E2) = false +> (0.31415927E1, ~0.123E2) = true +== (0.31415927E1, ~0.123E2) = false +?= (0.31415927E1, ~0.123E2) = false +< (0.31415927E1, ~0.31415927E1) = false +> (0.31415927E1, ~0.31415927E1) = true +== (0.31415927E1, ~0.31415927E1) = false +?= (0.31415927E1, ~0.31415927E1) = false +< (0.31415927E1, ~0.27182817E1) = false +> (0.31415927E1, ~0.27182817E1) = true +== (0.31415927E1, ~0.27182817E1) = false +?= (0.31415927E1, ~0.27182817E1) = false +< (0.31415927E1, ~0.123E1) = false +> (0.31415927E1, ~0.123E1) = true +== (0.31415927E1, ~0.123E1) = false +?= (0.31415927E1, ~0.123E1) = false +< (0.31415927E1, ~0.123) = false +> (0.31415927E1, ~0.123) = true +== (0.31415927E1, ~0.123) = false +?= (0.31415927E1, ~0.123) = false +< (0.31415927E1, ~0.123E~2) = false +> (0.31415927E1, ~0.123E~2) = true +== (0.31415927E1, ~0.123E~2) = false +?= (0.31415927E1, ~0.123E~2) = false +< (0.31415927E1, ~0.11754944E~37) = false +> (0.31415927E1, ~0.11754944E~37) = true +== (0.31415927E1, ~0.11754944E~37) = false +?= (0.31415927E1, ~0.11754944E~37) = false +< (0.31415927E1, ~0.5877472E~38) = false +> (0.31415927E1, ~0.5877472E~38) = true +== (0.31415927E1, ~0.5877472E~38) = false +?= (0.31415927E1, ~0.5877472E~38) = false +< (0.31415927E1, ~0.1E~44) = false +> (0.31415927E1, ~0.1E~44) = true +== (0.31415927E1, ~0.1E~44) = false +?= (0.31415927E1, ~0.1E~44) = false +< (0.31415927E1, ~0.0) = false +> (0.31415927E1, ~0.0) = true +== (0.31415927E1, ~0.0) = false +?= (0.31415927E1, ~0.0) = false +< (0.27182817E1, 0.34028235E39) = true +> (0.27182817E1, 0.34028235E39) = false +== (0.27182817E1, 0.34028235E39) = false +?= (0.27182817E1, 0.34028235E39) = false +< (0.27182817E1, 0.17014117E39) = true +> (0.27182817E1, 0.17014117E39) = false +== (0.27182817E1, 0.17014117E39) = false +?= (0.27182817E1, 0.17014117E39) = false +< (0.27182817E1, 0.123E4) = true +> (0.27182817E1, 0.123E4) = false +== (0.27182817E1, 0.123E4) = false +?= (0.27182817E1, 0.123E4) = false +< (0.27182817E1, 0.123E2) = true +> (0.27182817E1, 0.123E2) = false +== (0.27182817E1, 0.123E2) = false +?= (0.27182817E1, 0.123E2) = false +< (0.27182817E1, 0.31415927E1) = true +> (0.27182817E1, 0.31415927E1) = false +== (0.27182817E1, 0.31415927E1) = false +?= (0.27182817E1, 0.31415927E1) = false +< (0.27182817E1, 0.27182817E1) = false +> (0.27182817E1, 0.27182817E1) = false +== (0.27182817E1, 0.27182817E1) = true +?= (0.27182817E1, 0.27182817E1) = true +< (0.27182817E1, 0.123E1) = false +> (0.27182817E1, 0.123E1) = true +== (0.27182817E1, 0.123E1) = false +?= (0.27182817E1, 0.123E1) = false +< (0.27182817E1, 0.123) = false +> (0.27182817E1, 0.123) = true +== (0.27182817E1, 0.123) = false +?= (0.27182817E1, 0.123) = false +< (0.27182817E1, 0.123E~2) = false +> (0.27182817E1, 0.123E~2) = true +== (0.27182817E1, 0.123E~2) = false +?= (0.27182817E1, 0.123E~2) = false +< (0.27182817E1, 0.11754944E~37) = false +> (0.27182817E1, 0.11754944E~37) = true +== (0.27182817E1, 0.11754944E~37) = false +?= (0.27182817E1, 0.11754944E~37) = false +< (0.27182817E1, 0.5877472E~38) = false +> (0.27182817E1, 0.5877472E~38) = true +== (0.27182817E1, 0.5877472E~38) = false +?= (0.27182817E1, 0.5877472E~38) = false +< (0.27182817E1, 0.1E~44) = false +> (0.27182817E1, 0.1E~44) = true +== (0.27182817E1, 0.1E~44) = false +?= (0.27182817E1, 0.1E~44) = false +< (0.27182817E1, 0.0) = false +> (0.27182817E1, 0.0) = true +== (0.27182817E1, 0.0) = false +?= (0.27182817E1, 0.0) = false +< (0.27182817E1, ~0.34028235E39) = false +> (0.27182817E1, ~0.34028235E39) = true +== (0.27182817E1, ~0.34028235E39) = false +?= (0.27182817E1, ~0.34028235E39) = false +< (0.27182817E1, ~0.17014117E39) = false +> (0.27182817E1, ~0.17014117E39) = true +== (0.27182817E1, ~0.17014117E39) = false +?= (0.27182817E1, ~0.17014117E39) = false +< (0.27182817E1, ~0.123E4) = false +> (0.27182817E1, ~0.123E4) = true +== (0.27182817E1, ~0.123E4) = false +?= (0.27182817E1, ~0.123E4) = false +< (0.27182817E1, ~0.123E2) = false +> (0.27182817E1, ~0.123E2) = true +== (0.27182817E1, ~0.123E2) = false +?= (0.27182817E1, ~0.123E2) = false +< (0.27182817E1, ~0.31415927E1) = false +> (0.27182817E1, ~0.31415927E1) = true +== (0.27182817E1, ~0.31415927E1) = false +?= (0.27182817E1, ~0.31415927E1) = false +< (0.27182817E1, ~0.27182817E1) = false +> (0.27182817E1, ~0.27182817E1) = true +== (0.27182817E1, ~0.27182817E1) = false +?= (0.27182817E1, ~0.27182817E1) = false +< (0.27182817E1, ~0.123E1) = false +> (0.27182817E1, ~0.123E1) = true +== (0.27182817E1, ~0.123E1) = false +?= (0.27182817E1, ~0.123E1) = false +< (0.27182817E1, ~0.123) = false +> (0.27182817E1, ~0.123) = true +== (0.27182817E1, ~0.123) = false +?= (0.27182817E1, ~0.123) = false +< (0.27182817E1, ~0.123E~2) = false +> (0.27182817E1, ~0.123E~2) = true +== (0.27182817E1, ~0.123E~2) = false +?= (0.27182817E1, ~0.123E~2) = false +< (0.27182817E1, ~0.11754944E~37) = false +> (0.27182817E1, ~0.11754944E~37) = true +== (0.27182817E1, ~0.11754944E~37) = false +?= (0.27182817E1, ~0.11754944E~37) = false +< (0.27182817E1, ~0.5877472E~38) = false +> (0.27182817E1, ~0.5877472E~38) = true +== (0.27182817E1, ~0.5877472E~38) = false +?= (0.27182817E1, ~0.5877472E~38) = false +< (0.27182817E1, ~0.1E~44) = false +> (0.27182817E1, ~0.1E~44) = true +== (0.27182817E1, ~0.1E~44) = false +?= (0.27182817E1, ~0.1E~44) = false +< (0.27182817E1, ~0.0) = false +> (0.27182817E1, ~0.0) = true +== (0.27182817E1, ~0.0) = false +?= (0.27182817E1, ~0.0) = false +< (0.123E1, 0.34028235E39) = true +> (0.123E1, 0.34028235E39) = false +== (0.123E1, 0.34028235E39) = false +?= (0.123E1, 0.34028235E39) = false +< (0.123E1, 0.17014117E39) = true +> (0.123E1, 0.17014117E39) = false +== (0.123E1, 0.17014117E39) = false +?= (0.123E1, 0.17014117E39) = false +< (0.123E1, 0.123E4) = true +> (0.123E1, 0.123E4) = false +== (0.123E1, 0.123E4) = false +?= (0.123E1, 0.123E4) = false +< (0.123E1, 0.123E2) = true +> (0.123E1, 0.123E2) = false +== (0.123E1, 0.123E2) = false +?= (0.123E1, 0.123E2) = false +< (0.123E1, 0.31415927E1) = true +> (0.123E1, 0.31415927E1) = false +== (0.123E1, 0.31415927E1) = false +?= (0.123E1, 0.31415927E1) = false +< (0.123E1, 0.27182817E1) = true +> (0.123E1, 0.27182817E1) = false +== (0.123E1, 0.27182817E1) = false +?= (0.123E1, 0.27182817E1) = false +< (0.123E1, 0.123E1) = false +> (0.123E1, 0.123E1) = false +== (0.123E1, 0.123E1) = true +?= (0.123E1, 0.123E1) = true +< (0.123E1, 0.123) = false +> (0.123E1, 0.123) = true +== (0.123E1, 0.123) = false +?= (0.123E1, 0.123) = false +< (0.123E1, 0.123E~2) = false +> (0.123E1, 0.123E~2) = true +== (0.123E1, 0.123E~2) = false +?= (0.123E1, 0.123E~2) = false +< (0.123E1, 0.11754944E~37) = false +> (0.123E1, 0.11754944E~37) = true +== (0.123E1, 0.11754944E~37) = false +?= (0.123E1, 0.11754944E~37) = false +< (0.123E1, 0.5877472E~38) = false +> (0.123E1, 0.5877472E~38) = true +== (0.123E1, 0.5877472E~38) = false +?= (0.123E1, 0.5877472E~38) = false +< (0.123E1, 0.1E~44) = false +> (0.123E1, 0.1E~44) = true +== (0.123E1, 0.1E~44) = false +?= (0.123E1, 0.1E~44) = false +< (0.123E1, 0.0) = false +> (0.123E1, 0.0) = true +== (0.123E1, 0.0) = false +?= (0.123E1, 0.0) = false +< (0.123E1, ~0.34028235E39) = false +> (0.123E1, ~0.34028235E39) = true +== (0.123E1, ~0.34028235E39) = false +?= (0.123E1, ~0.34028235E39) = false +< (0.123E1, ~0.17014117E39) = false +> (0.123E1, ~0.17014117E39) = true +== (0.123E1, ~0.17014117E39) = false +?= (0.123E1, ~0.17014117E39) = false +< (0.123E1, ~0.123E4) = false +> (0.123E1, ~0.123E4) = true +== (0.123E1, ~0.123E4) = false +?= (0.123E1, ~0.123E4) = false +< (0.123E1, ~0.123E2) = false +> (0.123E1, ~0.123E2) = true +== (0.123E1, ~0.123E2) = false +?= (0.123E1, ~0.123E2) = false +< (0.123E1, ~0.31415927E1) = false +> (0.123E1, ~0.31415927E1) = true +== (0.123E1, ~0.31415927E1) = false +?= (0.123E1, ~0.31415927E1) = false +< (0.123E1, ~0.27182817E1) = false +> (0.123E1, ~0.27182817E1) = true +== (0.123E1, ~0.27182817E1) = false +?= (0.123E1, ~0.27182817E1) = false +< (0.123E1, ~0.123E1) = false +> (0.123E1, ~0.123E1) = true +== (0.123E1, ~0.123E1) = false +?= (0.123E1, ~0.123E1) = false +< (0.123E1, ~0.123) = false +> (0.123E1, ~0.123) = true +== (0.123E1, ~0.123) = false +?= (0.123E1, ~0.123) = false +< (0.123E1, ~0.123E~2) = false +> (0.123E1, ~0.123E~2) = true +== (0.123E1, ~0.123E~2) = false +?= (0.123E1, ~0.123E~2) = false +< (0.123E1, ~0.11754944E~37) = false +> (0.123E1, ~0.11754944E~37) = true +== (0.123E1, ~0.11754944E~37) = false +?= (0.123E1, ~0.11754944E~37) = false +< (0.123E1, ~0.5877472E~38) = false +> (0.123E1, ~0.5877472E~38) = true +== (0.123E1, ~0.5877472E~38) = false +?= (0.123E1, ~0.5877472E~38) = false +< (0.123E1, ~0.1E~44) = false +> (0.123E1, ~0.1E~44) = true +== (0.123E1, ~0.1E~44) = false +?= (0.123E1, ~0.1E~44) = false +< (0.123E1, ~0.0) = false +> (0.123E1, ~0.0) = true +== (0.123E1, ~0.0) = false +?= (0.123E1, ~0.0) = false +< (0.123, 0.34028235E39) = true +> (0.123, 0.34028235E39) = false +== (0.123, 0.34028235E39) = false +?= (0.123, 0.34028235E39) = false +< (0.123, 0.17014117E39) = true +> (0.123, 0.17014117E39) = false +== (0.123, 0.17014117E39) = false +?= (0.123, 0.17014117E39) = false +< (0.123, 0.123E4) = true +> (0.123, 0.123E4) = false +== (0.123, 0.123E4) = false +?= (0.123, 0.123E4) = false +< (0.123, 0.123E2) = true +> (0.123, 0.123E2) = false +== (0.123, 0.123E2) = false +?= (0.123, 0.123E2) = false +< (0.123, 0.31415927E1) = true +> (0.123, 0.31415927E1) = false +== (0.123, 0.31415927E1) = false +?= (0.123, 0.31415927E1) = false +< (0.123, 0.27182817E1) = true +> (0.123, 0.27182817E1) = false +== (0.123, 0.27182817E1) = false +?= (0.123, 0.27182817E1) = false +< (0.123, 0.123E1) = true +> (0.123, 0.123E1) = false +== (0.123, 0.123E1) = false +?= (0.123, 0.123E1) = false +< (0.123, 0.123) = false +> (0.123, 0.123) = false +== (0.123, 0.123) = true +?= (0.123, 0.123) = true +< (0.123, 0.123E~2) = false +> (0.123, 0.123E~2) = true +== (0.123, 0.123E~2) = false +?= (0.123, 0.123E~2) = false +< (0.123, 0.11754944E~37) = false +> (0.123, 0.11754944E~37) = true +== (0.123, 0.11754944E~37) = false +?= (0.123, 0.11754944E~37) = false +< (0.123, 0.5877472E~38) = false +> (0.123, 0.5877472E~38) = true +== (0.123, 0.5877472E~38) = false +?= (0.123, 0.5877472E~38) = false +< (0.123, 0.1E~44) = false +> (0.123, 0.1E~44) = true +== (0.123, 0.1E~44) = false +?= (0.123, 0.1E~44) = false +< (0.123, 0.0) = false +> (0.123, 0.0) = true +== (0.123, 0.0) = false +?= (0.123, 0.0) = false +< (0.123, ~0.34028235E39) = false +> (0.123, ~0.34028235E39) = true +== (0.123, ~0.34028235E39) = false +?= (0.123, ~0.34028235E39) = false +< (0.123, ~0.17014117E39) = false +> (0.123, ~0.17014117E39) = true +== (0.123, ~0.17014117E39) = false +?= (0.123, ~0.17014117E39) = false +< (0.123, ~0.123E4) = false +> (0.123, ~0.123E4) = true +== (0.123, ~0.123E4) = false +?= (0.123, ~0.123E4) = false +< (0.123, ~0.123E2) = false +> (0.123, ~0.123E2) = true +== (0.123, ~0.123E2) = false +?= (0.123, ~0.123E2) = false +< (0.123, ~0.31415927E1) = false +> (0.123, ~0.31415927E1) = true +== (0.123, ~0.31415927E1) = false +?= (0.123, ~0.31415927E1) = false +< (0.123, ~0.27182817E1) = false +> (0.123, ~0.27182817E1) = true +== (0.123, ~0.27182817E1) = false +?= (0.123, ~0.27182817E1) = false +< (0.123, ~0.123E1) = false +> (0.123, ~0.123E1) = true +== (0.123, ~0.123E1) = false +?= (0.123, ~0.123E1) = false +< (0.123, ~0.123) = false +> (0.123, ~0.123) = true +== (0.123, ~0.123) = false +?= (0.123, ~0.123) = false +< (0.123, ~0.123E~2) = false +> (0.123, ~0.123E~2) = true +== (0.123, ~0.123E~2) = false +?= (0.123, ~0.123E~2) = false +< (0.123, ~0.11754944E~37) = false +> (0.123, ~0.11754944E~37) = true +== (0.123, ~0.11754944E~37) = false +?= (0.123, ~0.11754944E~37) = false +< (0.123, ~0.5877472E~38) = false +> (0.123, ~0.5877472E~38) = true +== (0.123, ~0.5877472E~38) = false +?= (0.123, ~0.5877472E~38) = false +< (0.123, ~0.1E~44) = false +> (0.123, ~0.1E~44) = true +== (0.123, ~0.1E~44) = false +?= (0.123, ~0.1E~44) = false +< (0.123, ~0.0) = false +> (0.123, ~0.0) = true +== (0.123, ~0.0) = false +?= (0.123, ~0.0) = false +< (0.123E~2, 0.34028235E39) = true +> (0.123E~2, 0.34028235E39) = false +== (0.123E~2, 0.34028235E39) = false +?= (0.123E~2, 0.34028235E39) = false +< (0.123E~2, 0.17014117E39) = true +> (0.123E~2, 0.17014117E39) = false +== (0.123E~2, 0.17014117E39) = false +?= (0.123E~2, 0.17014117E39) = false +< (0.123E~2, 0.123E4) = true +> (0.123E~2, 0.123E4) = false +== (0.123E~2, 0.123E4) = false +?= (0.123E~2, 0.123E4) = false +< (0.123E~2, 0.123E2) = true +> (0.123E~2, 0.123E2) = false +== (0.123E~2, 0.123E2) = false +?= (0.123E~2, 0.123E2) = false +< (0.123E~2, 0.31415927E1) = true +> (0.123E~2, 0.31415927E1) = false +== (0.123E~2, 0.31415927E1) = false +?= (0.123E~2, 0.31415927E1) = false +< (0.123E~2, 0.27182817E1) = true +> (0.123E~2, 0.27182817E1) = false +== (0.123E~2, 0.27182817E1) = false +?= (0.123E~2, 0.27182817E1) = false +< (0.123E~2, 0.123E1) = true +> (0.123E~2, 0.123E1) = false +== (0.123E~2, 0.123E1) = false +?= (0.123E~2, 0.123E1) = false +< (0.123E~2, 0.123) = true +> (0.123E~2, 0.123) = false +== (0.123E~2, 0.123) = false +?= (0.123E~2, 0.123) = false +< (0.123E~2, 0.123E~2) = false +> (0.123E~2, 0.123E~2) = false +== (0.123E~2, 0.123E~2) = true +?= (0.123E~2, 0.123E~2) = true +< (0.123E~2, 0.11754944E~37) = false +> (0.123E~2, 0.11754944E~37) = true +== (0.123E~2, 0.11754944E~37) = false +?= (0.123E~2, 0.11754944E~37) = false +< (0.123E~2, 0.5877472E~38) = false +> (0.123E~2, 0.5877472E~38) = true +== (0.123E~2, 0.5877472E~38) = false +?= (0.123E~2, 0.5877472E~38) = false +< (0.123E~2, 0.1E~44) = false +> (0.123E~2, 0.1E~44) = true +== (0.123E~2, 0.1E~44) = false +?= (0.123E~2, 0.1E~44) = false +< (0.123E~2, 0.0) = false +> (0.123E~2, 0.0) = true +== (0.123E~2, 0.0) = false +?= (0.123E~2, 0.0) = false +< (0.123E~2, ~0.34028235E39) = false +> (0.123E~2, ~0.34028235E39) = true +== (0.123E~2, ~0.34028235E39) = false +?= (0.123E~2, ~0.34028235E39) = false +< (0.123E~2, ~0.17014117E39) = false +> (0.123E~2, ~0.17014117E39) = true +== (0.123E~2, ~0.17014117E39) = false +?= (0.123E~2, ~0.17014117E39) = false +< (0.123E~2, ~0.123E4) = false +> (0.123E~2, ~0.123E4) = true +== (0.123E~2, ~0.123E4) = false +?= (0.123E~2, ~0.123E4) = false +< (0.123E~2, ~0.123E2) = false +> (0.123E~2, ~0.123E2) = true +== (0.123E~2, ~0.123E2) = false +?= (0.123E~2, ~0.123E2) = false +< (0.123E~2, ~0.31415927E1) = false +> (0.123E~2, ~0.31415927E1) = true +== (0.123E~2, ~0.31415927E1) = false +?= (0.123E~2, ~0.31415927E1) = false +< (0.123E~2, ~0.27182817E1) = false +> (0.123E~2, ~0.27182817E1) = true +== (0.123E~2, ~0.27182817E1) = false +?= (0.123E~2, ~0.27182817E1) = false +< (0.123E~2, ~0.123E1) = false +> (0.123E~2, ~0.123E1) = true +== (0.123E~2, ~0.123E1) = false +?= (0.123E~2, ~0.123E1) = false +< (0.123E~2, ~0.123) = false +> (0.123E~2, ~0.123) = true +== (0.123E~2, ~0.123) = false +?= (0.123E~2, ~0.123) = false +< (0.123E~2, ~0.123E~2) = false +> (0.123E~2, ~0.123E~2) = true +== (0.123E~2, ~0.123E~2) = false +?= (0.123E~2, ~0.123E~2) = false +< (0.123E~2, ~0.11754944E~37) = false +> (0.123E~2, ~0.11754944E~37) = true +== (0.123E~2, ~0.11754944E~37) = false +?= (0.123E~2, ~0.11754944E~37) = false +< (0.123E~2, ~0.5877472E~38) = false +> (0.123E~2, ~0.5877472E~38) = true +== (0.123E~2, ~0.5877472E~38) = false +?= (0.123E~2, ~0.5877472E~38) = false +< (0.123E~2, ~0.1E~44) = false +> (0.123E~2, ~0.1E~44) = true +== (0.123E~2, ~0.1E~44) = false +?= (0.123E~2, ~0.1E~44) = false +< (0.123E~2, ~0.0) = false +> (0.123E~2, ~0.0) = true +== (0.123E~2, ~0.0) = false +?= (0.123E~2, ~0.0) = false +< (0.11754944E~37, 0.34028235E39) = true +> (0.11754944E~37, 0.34028235E39) = false +== (0.11754944E~37, 0.34028235E39) = false +?= (0.11754944E~37, 0.34028235E39) = false +< (0.11754944E~37, 0.17014117E39) = true +> (0.11754944E~37, 0.17014117E39) = false +== (0.11754944E~37, 0.17014117E39) = false +?= (0.11754944E~37, 0.17014117E39) = false +< (0.11754944E~37, 0.123E4) = true +> (0.11754944E~37, 0.123E4) = false +== (0.11754944E~37, 0.123E4) = false +?= (0.11754944E~37, 0.123E4) = false +< (0.11754944E~37, 0.123E2) = true +> (0.11754944E~37, 0.123E2) = false +== (0.11754944E~37, 0.123E2) = false +?= (0.11754944E~37, 0.123E2) = false +< (0.11754944E~37, 0.31415927E1) = true +> (0.11754944E~37, 0.31415927E1) = false +== (0.11754944E~37, 0.31415927E1) = false +?= (0.11754944E~37, 0.31415927E1) = false +< (0.11754944E~37, 0.27182817E1) = true +> (0.11754944E~37, 0.27182817E1) = false +== (0.11754944E~37, 0.27182817E1) = false +?= (0.11754944E~37, 0.27182817E1) = false +< (0.11754944E~37, 0.123E1) = true +> (0.11754944E~37, 0.123E1) = false +== (0.11754944E~37, 0.123E1) = false +?= (0.11754944E~37, 0.123E1) = false +< (0.11754944E~37, 0.123) = true +> (0.11754944E~37, 0.123) = false +== (0.11754944E~37, 0.123) = false +?= (0.11754944E~37, 0.123) = false +< (0.11754944E~37, 0.123E~2) = true +> (0.11754944E~37, 0.123E~2) = false +== (0.11754944E~37, 0.123E~2) = false +?= (0.11754944E~37, 0.123E~2) = false +< (0.11754944E~37, 0.11754944E~37) = false +> (0.11754944E~37, 0.11754944E~37) = false +== (0.11754944E~37, 0.11754944E~37) = true +?= (0.11754944E~37, 0.11754944E~37) = true +< (0.11754944E~37, 0.5877472E~38) = false +> (0.11754944E~37, 0.5877472E~38) = true +== (0.11754944E~37, 0.5877472E~38) = false +?= (0.11754944E~37, 0.5877472E~38) = false +< (0.11754944E~37, 0.1E~44) = false +> (0.11754944E~37, 0.1E~44) = true +== (0.11754944E~37, 0.1E~44) = false +?= (0.11754944E~37, 0.1E~44) = false +< (0.11754944E~37, 0.0) = false +> (0.11754944E~37, 0.0) = true +== (0.11754944E~37, 0.0) = false +?= (0.11754944E~37, 0.0) = false +< (0.11754944E~37, ~0.34028235E39) = false +> (0.11754944E~37, ~0.34028235E39) = true +== (0.11754944E~37, ~0.34028235E39) = false +?= (0.11754944E~37, ~0.34028235E39) = false +< (0.11754944E~37, ~0.17014117E39) = false +> (0.11754944E~37, ~0.17014117E39) = true +== (0.11754944E~37, ~0.17014117E39) = false +?= (0.11754944E~37, ~0.17014117E39) = false +< (0.11754944E~37, ~0.123E4) = false +> (0.11754944E~37, ~0.123E4) = true +== (0.11754944E~37, ~0.123E4) = false +?= (0.11754944E~37, ~0.123E4) = false +< (0.11754944E~37, ~0.123E2) = false +> (0.11754944E~37, ~0.123E2) = true +== (0.11754944E~37, ~0.123E2) = false +?= (0.11754944E~37, ~0.123E2) = false +< (0.11754944E~37, ~0.31415927E1) = false +> (0.11754944E~37, ~0.31415927E1) = true +== (0.11754944E~37, ~0.31415927E1) = false +?= (0.11754944E~37, ~0.31415927E1) = false +< (0.11754944E~37, ~0.27182817E1) = false +> (0.11754944E~37, ~0.27182817E1) = true +== (0.11754944E~37, ~0.27182817E1) = false +?= (0.11754944E~37, ~0.27182817E1) = false +< (0.11754944E~37, ~0.123E1) = false +> (0.11754944E~37, ~0.123E1) = true +== (0.11754944E~37, ~0.123E1) = false +?= (0.11754944E~37, ~0.123E1) = false +< (0.11754944E~37, ~0.123) = false +> (0.11754944E~37, ~0.123) = true +== (0.11754944E~37, ~0.123) = false +?= (0.11754944E~37, ~0.123) = false +< (0.11754944E~37, ~0.123E~2) = false +> (0.11754944E~37, ~0.123E~2) = true +== (0.11754944E~37, ~0.123E~2) = false +?= (0.11754944E~37, ~0.123E~2) = false +< (0.11754944E~37, ~0.11754944E~37) = false +> (0.11754944E~37, ~0.11754944E~37) = true +== (0.11754944E~37, ~0.11754944E~37) = false +?= (0.11754944E~37, ~0.11754944E~37) = false +< (0.11754944E~37, ~0.5877472E~38) = false +> (0.11754944E~37, ~0.5877472E~38) = true +== (0.11754944E~37, ~0.5877472E~38) = false +?= (0.11754944E~37, ~0.5877472E~38) = false +< (0.11754944E~37, ~0.1E~44) = false +> (0.11754944E~37, ~0.1E~44) = true +== (0.11754944E~37, ~0.1E~44) = false +?= (0.11754944E~37, ~0.1E~44) = false +< (0.11754944E~37, ~0.0) = false +> (0.11754944E~37, ~0.0) = true +== (0.11754944E~37, ~0.0) = false +?= (0.11754944E~37, ~0.0) = false +< (0.5877472E~38, 0.34028235E39) = true +> (0.5877472E~38, 0.34028235E39) = false +== (0.5877472E~38, 0.34028235E39) = false +?= (0.5877472E~38, 0.34028235E39) = false +< (0.5877472E~38, 0.17014117E39) = true +> (0.5877472E~38, 0.17014117E39) = false +== (0.5877472E~38, 0.17014117E39) = false +?= (0.5877472E~38, 0.17014117E39) = false +< (0.5877472E~38, 0.123E4) = true +> (0.5877472E~38, 0.123E4) = false +== (0.5877472E~38, 0.123E4) = false +?= (0.5877472E~38, 0.123E4) = false +< (0.5877472E~38, 0.123E2) = true +> (0.5877472E~38, 0.123E2) = false +== (0.5877472E~38, 0.123E2) = false +?= (0.5877472E~38, 0.123E2) = false +< (0.5877472E~38, 0.31415927E1) = true +> (0.5877472E~38, 0.31415927E1) = false +== (0.5877472E~38, 0.31415927E1) = false +?= (0.5877472E~38, 0.31415927E1) = false +< (0.5877472E~38, 0.27182817E1) = true +> (0.5877472E~38, 0.27182817E1) = false +== (0.5877472E~38, 0.27182817E1) = false +?= (0.5877472E~38, 0.27182817E1) = false +< (0.5877472E~38, 0.123E1) = true +> (0.5877472E~38, 0.123E1) = false +== (0.5877472E~38, 0.123E1) = false +?= (0.5877472E~38, 0.123E1) = false +< (0.5877472E~38, 0.123) = true +> (0.5877472E~38, 0.123) = false +== (0.5877472E~38, 0.123) = false +?= (0.5877472E~38, 0.123) = false +< (0.5877472E~38, 0.123E~2) = true +> (0.5877472E~38, 0.123E~2) = false +== (0.5877472E~38, 0.123E~2) = false +?= (0.5877472E~38, 0.123E~2) = false +< (0.5877472E~38, 0.11754944E~37) = true +> (0.5877472E~38, 0.11754944E~37) = false +== (0.5877472E~38, 0.11754944E~37) = false +?= (0.5877472E~38, 0.11754944E~37) = false +< (0.5877472E~38, 0.5877472E~38) = false +> (0.5877472E~38, 0.5877472E~38) = false +== (0.5877472E~38, 0.5877472E~38) = true +?= (0.5877472E~38, 0.5877472E~38) = true +< (0.5877472E~38, 0.1E~44) = false +> (0.5877472E~38, 0.1E~44) = true +== (0.5877472E~38, 0.1E~44) = false +?= (0.5877472E~38, 0.1E~44) = false +< (0.5877472E~38, 0.0) = false +> (0.5877472E~38, 0.0) = true +== (0.5877472E~38, 0.0) = false +?= (0.5877472E~38, 0.0) = false +< (0.5877472E~38, ~0.34028235E39) = false +> (0.5877472E~38, ~0.34028235E39) = true +== (0.5877472E~38, ~0.34028235E39) = false +?= (0.5877472E~38, ~0.34028235E39) = false +< (0.5877472E~38, ~0.17014117E39) = false +> (0.5877472E~38, ~0.17014117E39) = true +== (0.5877472E~38, ~0.17014117E39) = false +?= (0.5877472E~38, ~0.17014117E39) = false +< (0.5877472E~38, ~0.123E4) = false +> (0.5877472E~38, ~0.123E4) = true +== (0.5877472E~38, ~0.123E4) = false +?= (0.5877472E~38, ~0.123E4) = false +< (0.5877472E~38, ~0.123E2) = false +> (0.5877472E~38, ~0.123E2) = true +== (0.5877472E~38, ~0.123E2) = false +?= (0.5877472E~38, ~0.123E2) = false +< (0.5877472E~38, ~0.31415927E1) = false +> (0.5877472E~38, ~0.31415927E1) = true +== (0.5877472E~38, ~0.31415927E1) = false +?= (0.5877472E~38, ~0.31415927E1) = false +< (0.5877472E~38, ~0.27182817E1) = false +> (0.5877472E~38, ~0.27182817E1) = true +== (0.5877472E~38, ~0.27182817E1) = false +?= (0.5877472E~38, ~0.27182817E1) = false +< (0.5877472E~38, ~0.123E1) = false +> (0.5877472E~38, ~0.123E1) = true +== (0.5877472E~38, ~0.123E1) = false +?= (0.5877472E~38, ~0.123E1) = false +< (0.5877472E~38, ~0.123) = false +> (0.5877472E~38, ~0.123) = true +== (0.5877472E~38, ~0.123) = false +?= (0.5877472E~38, ~0.123) = false +< (0.5877472E~38, ~0.123E~2) = false +> (0.5877472E~38, ~0.123E~2) = true +== (0.5877472E~38, ~0.123E~2) = false +?= (0.5877472E~38, ~0.123E~2) = false +< (0.5877472E~38, ~0.11754944E~37) = false +> (0.5877472E~38, ~0.11754944E~37) = true +== (0.5877472E~38, ~0.11754944E~37) = false +?= (0.5877472E~38, ~0.11754944E~37) = false +< (0.5877472E~38, ~0.5877472E~38) = false +> (0.5877472E~38, ~0.5877472E~38) = true +== (0.5877472E~38, ~0.5877472E~38) = false +?= (0.5877472E~38, ~0.5877472E~38) = false +< (0.5877472E~38, ~0.1E~44) = false +> (0.5877472E~38, ~0.1E~44) = true +== (0.5877472E~38, ~0.1E~44) = false +?= (0.5877472E~38, ~0.1E~44) = false +< (0.5877472E~38, ~0.0) = false +> (0.5877472E~38, ~0.0) = true +== (0.5877472E~38, ~0.0) = false +?= (0.5877472E~38, ~0.0) = false +< (0.1E~44, 0.34028235E39) = true +> (0.1E~44, 0.34028235E39) = false +== (0.1E~44, 0.34028235E39) = false +?= (0.1E~44, 0.34028235E39) = false +< (0.1E~44, 0.17014117E39) = true +> (0.1E~44, 0.17014117E39) = false +== (0.1E~44, 0.17014117E39) = false +?= (0.1E~44, 0.17014117E39) = false +< (0.1E~44, 0.123E4) = true +> (0.1E~44, 0.123E4) = false +== (0.1E~44, 0.123E4) = false +?= (0.1E~44, 0.123E4) = false +< (0.1E~44, 0.123E2) = true +> (0.1E~44, 0.123E2) = false +== (0.1E~44, 0.123E2) = false +?= (0.1E~44, 0.123E2) = false +< (0.1E~44, 0.31415927E1) = true +> (0.1E~44, 0.31415927E1) = false +== (0.1E~44, 0.31415927E1) = false +?= (0.1E~44, 0.31415927E1) = false +< (0.1E~44, 0.27182817E1) = true +> (0.1E~44, 0.27182817E1) = false +== (0.1E~44, 0.27182817E1) = false +?= (0.1E~44, 0.27182817E1) = false +< (0.1E~44, 0.123E1) = true +> (0.1E~44, 0.123E1) = false +== (0.1E~44, 0.123E1) = false +?= (0.1E~44, 0.123E1) = false +< (0.1E~44, 0.123) = true +> (0.1E~44, 0.123) = false +== (0.1E~44, 0.123) = false +?= (0.1E~44, 0.123) = false +< (0.1E~44, 0.123E~2) = true +> (0.1E~44, 0.123E~2) = false +== (0.1E~44, 0.123E~2) = false +?= (0.1E~44, 0.123E~2) = false +< (0.1E~44, 0.11754944E~37) = true +> (0.1E~44, 0.11754944E~37) = false +== (0.1E~44, 0.11754944E~37) = false +?= (0.1E~44, 0.11754944E~37) = false +< (0.1E~44, 0.5877472E~38) = true +> (0.1E~44, 0.5877472E~38) = false +== (0.1E~44, 0.5877472E~38) = false +?= (0.1E~44, 0.5877472E~38) = false +< (0.1E~44, 0.1E~44) = false +> (0.1E~44, 0.1E~44) = false +== (0.1E~44, 0.1E~44) = true +?= (0.1E~44, 0.1E~44) = true +< (0.1E~44, 0.0) = false +> (0.1E~44, 0.0) = true +== (0.1E~44, 0.0) = false +?= (0.1E~44, 0.0) = false +< (0.1E~44, ~0.34028235E39) = false +> (0.1E~44, ~0.34028235E39) = true +== (0.1E~44, ~0.34028235E39) = false +?= (0.1E~44, ~0.34028235E39) = false +< (0.1E~44, ~0.17014117E39) = false +> (0.1E~44, ~0.17014117E39) = true +== (0.1E~44, ~0.17014117E39) = false +?= (0.1E~44, ~0.17014117E39) = false +< (0.1E~44, ~0.123E4) = false +> (0.1E~44, ~0.123E4) = true +== (0.1E~44, ~0.123E4) = false +?= (0.1E~44, ~0.123E4) = false +< (0.1E~44, ~0.123E2) = false +> (0.1E~44, ~0.123E2) = true +== (0.1E~44, ~0.123E2) = false +?= (0.1E~44, ~0.123E2) = false +< (0.1E~44, ~0.31415927E1) = false +> (0.1E~44, ~0.31415927E1) = true +== (0.1E~44, ~0.31415927E1) = false +?= (0.1E~44, ~0.31415927E1) = false +< (0.1E~44, ~0.27182817E1) = false +> (0.1E~44, ~0.27182817E1) = true +== (0.1E~44, ~0.27182817E1) = false +?= (0.1E~44, ~0.27182817E1) = false +< (0.1E~44, ~0.123E1) = false +> (0.1E~44, ~0.123E1) = true +== (0.1E~44, ~0.123E1) = false +?= (0.1E~44, ~0.123E1) = false +< (0.1E~44, ~0.123) = false +> (0.1E~44, ~0.123) = true +== (0.1E~44, ~0.123) = false +?= (0.1E~44, ~0.123) = false +< (0.1E~44, ~0.123E~2) = false +> (0.1E~44, ~0.123E~2) = true +== (0.1E~44, ~0.123E~2) = false +?= (0.1E~44, ~0.123E~2) = false +< (0.1E~44, ~0.11754944E~37) = false +> (0.1E~44, ~0.11754944E~37) = true +== (0.1E~44, ~0.11754944E~37) = false +?= (0.1E~44, ~0.11754944E~37) = false +< (0.1E~44, ~0.5877472E~38) = false +> (0.1E~44, ~0.5877472E~38) = true +== (0.1E~44, ~0.5877472E~38) = false +?= (0.1E~44, ~0.5877472E~38) = false +< (0.1E~44, ~0.1E~44) = false +> (0.1E~44, ~0.1E~44) = true +== (0.1E~44, ~0.1E~44) = false +?= (0.1E~44, ~0.1E~44) = false +< (0.1E~44, ~0.0) = false +> (0.1E~44, ~0.0) = true +== (0.1E~44, ~0.0) = false +?= (0.1E~44, ~0.0) = false +< (0.0, 0.34028235E39) = true +> (0.0, 0.34028235E39) = false +== (0.0, 0.34028235E39) = false +?= (0.0, 0.34028235E39) = false +< (0.0, 0.17014117E39) = true +> (0.0, 0.17014117E39) = false +== (0.0, 0.17014117E39) = false +?= (0.0, 0.17014117E39) = false +< (0.0, 0.123E4) = true +> (0.0, 0.123E4) = false +== (0.0, 0.123E4) = false +?= (0.0, 0.123E4) = false +< (0.0, 0.123E2) = true +> (0.0, 0.123E2) = false +== (0.0, 0.123E2) = false +?= (0.0, 0.123E2) = false +< (0.0, 0.31415927E1) = true +> (0.0, 0.31415927E1) = false +== (0.0, 0.31415927E1) = false +?= (0.0, 0.31415927E1) = false +< (0.0, 0.27182817E1) = true +> (0.0, 0.27182817E1) = false +== (0.0, 0.27182817E1) = false +?= (0.0, 0.27182817E1) = false +< (0.0, 0.123E1) = true +> (0.0, 0.123E1) = false +== (0.0, 0.123E1) = false +?= (0.0, 0.123E1) = false +< (0.0, 0.123) = true +> (0.0, 0.123) = false +== (0.0, 0.123) = false +?= (0.0, 0.123) = false +< (0.0, 0.123E~2) = true +> (0.0, 0.123E~2) = false +== (0.0, 0.123E~2) = false +?= (0.0, 0.123E~2) = false +< (0.0, 0.11754944E~37) = true +> (0.0, 0.11754944E~37) = false +== (0.0, 0.11754944E~37) = false +?= (0.0, 0.11754944E~37) = false +< (0.0, 0.5877472E~38) = true +> (0.0, 0.5877472E~38) = false +== (0.0, 0.5877472E~38) = false +?= (0.0, 0.5877472E~38) = false +< (0.0, 0.1E~44) = true +> (0.0, 0.1E~44) = false +== (0.0, 0.1E~44) = false +?= (0.0, 0.1E~44) = false +< (0.0, 0.0) = false +> (0.0, 0.0) = false +== (0.0, 0.0) = true +?= (0.0, 0.0) = true +< (0.0, ~0.34028235E39) = false +> (0.0, ~0.34028235E39) = true +== (0.0, ~0.34028235E39) = false +?= (0.0, ~0.34028235E39) = false +< (0.0, ~0.17014117E39) = false +> (0.0, ~0.17014117E39) = true +== (0.0, ~0.17014117E39) = false +?= (0.0, ~0.17014117E39) = false +< (0.0, ~0.123E4) = false +> (0.0, ~0.123E4) = true +== (0.0, ~0.123E4) = false +?= (0.0, ~0.123E4) = false +< (0.0, ~0.123E2) = false +> (0.0, ~0.123E2) = true +== (0.0, ~0.123E2) = false +?= (0.0, ~0.123E2) = false +< (0.0, ~0.31415927E1) = false +> (0.0, ~0.31415927E1) = true +== (0.0, ~0.31415927E1) = false +?= (0.0, ~0.31415927E1) = false +< (0.0, ~0.27182817E1) = false +> (0.0, ~0.27182817E1) = true +== (0.0, ~0.27182817E1) = false +?= (0.0, ~0.27182817E1) = false +< (0.0, ~0.123E1) = false +> (0.0, ~0.123E1) = true +== (0.0, ~0.123E1) = false +?= (0.0, ~0.123E1) = false +< (0.0, ~0.123) = false +> (0.0, ~0.123) = true +== (0.0, ~0.123) = false +?= (0.0, ~0.123) = false +< (0.0, ~0.123E~2) = false +> (0.0, ~0.123E~2) = true +== (0.0, ~0.123E~2) = false +?= (0.0, ~0.123E~2) = false +< (0.0, ~0.11754944E~37) = false +> (0.0, ~0.11754944E~37) = true +== (0.0, ~0.11754944E~37) = false +?= (0.0, ~0.11754944E~37) = false +< (0.0, ~0.5877472E~38) = false +> (0.0, ~0.5877472E~38) = true +== (0.0, ~0.5877472E~38) = false +?= (0.0, ~0.5877472E~38) = false +< (0.0, ~0.1E~44) = false +> (0.0, ~0.1E~44) = true +== (0.0, ~0.1E~44) = false +?= (0.0, ~0.1E~44) = false +< (0.0, ~0.0) = false +> (0.0, ~0.0) = false +== (0.0, ~0.0) = true +?= (0.0, ~0.0) = true +< (~0.34028235E39, 0.34028235E39) = true +> (~0.34028235E39, 0.34028235E39) = false +== (~0.34028235E39, 0.34028235E39) = false +?= (~0.34028235E39, 0.34028235E39) = false +< (~0.34028235E39, 0.17014117E39) = true +> (~0.34028235E39, 0.17014117E39) = false +== (~0.34028235E39, 0.17014117E39) = false +?= (~0.34028235E39, 0.17014117E39) = false +< (~0.34028235E39, 0.123E4) = true +> (~0.34028235E39, 0.123E4) = false +== (~0.34028235E39, 0.123E4) = false +?= (~0.34028235E39, 0.123E4) = false +< (~0.34028235E39, 0.123E2) = true +> (~0.34028235E39, 0.123E2) = false +== (~0.34028235E39, 0.123E2) = false +?= (~0.34028235E39, 0.123E2) = false +< (~0.34028235E39, 0.31415927E1) = true +> (~0.34028235E39, 0.31415927E1) = false +== (~0.34028235E39, 0.31415927E1) = false +?= (~0.34028235E39, 0.31415927E1) = false +< (~0.34028235E39, 0.27182817E1) = true +> (~0.34028235E39, 0.27182817E1) = false +== (~0.34028235E39, 0.27182817E1) = false +?= (~0.34028235E39, 0.27182817E1) = false +< (~0.34028235E39, 0.123E1) = true +> (~0.34028235E39, 0.123E1) = false +== (~0.34028235E39, 0.123E1) = false +?= (~0.34028235E39, 0.123E1) = false +< (~0.34028235E39, 0.123) = true +> (~0.34028235E39, 0.123) = false +== (~0.34028235E39, 0.123) = false +?= (~0.34028235E39, 0.123) = false +< (~0.34028235E39, 0.123E~2) = true +> (~0.34028235E39, 0.123E~2) = false +== (~0.34028235E39, 0.123E~2) = false +?= (~0.34028235E39, 0.123E~2) = false +< (~0.34028235E39, 0.11754944E~37) = true +> (~0.34028235E39, 0.11754944E~37) = false +== (~0.34028235E39, 0.11754944E~37) = false +?= (~0.34028235E39, 0.11754944E~37) = false +< (~0.34028235E39, 0.5877472E~38) = true +> (~0.34028235E39, 0.5877472E~38) = false +== (~0.34028235E39, 0.5877472E~38) = false +?= (~0.34028235E39, 0.5877472E~38) = false +< (~0.34028235E39, 0.1E~44) = true +> (~0.34028235E39, 0.1E~44) = false +== (~0.34028235E39, 0.1E~44) = false +?= (~0.34028235E39, 0.1E~44) = false +< (~0.34028235E39, 0.0) = true +> (~0.34028235E39, 0.0) = false +== (~0.34028235E39, 0.0) = false +?= (~0.34028235E39, 0.0) = false +< (~0.34028235E39, ~0.34028235E39) = false +> (~0.34028235E39, ~0.34028235E39) = false +== (~0.34028235E39, ~0.34028235E39) = true +?= (~0.34028235E39, ~0.34028235E39) = true +< (~0.34028235E39, ~0.17014117E39) = true +> (~0.34028235E39, ~0.17014117E39) = false +== (~0.34028235E39, ~0.17014117E39) = false +?= (~0.34028235E39, ~0.17014117E39) = false +< (~0.34028235E39, ~0.123E4) = true +> (~0.34028235E39, ~0.123E4) = false +== (~0.34028235E39, ~0.123E4) = false +?= (~0.34028235E39, ~0.123E4) = false +< (~0.34028235E39, ~0.123E2) = true +> (~0.34028235E39, ~0.123E2) = false +== (~0.34028235E39, ~0.123E2) = false +?= (~0.34028235E39, ~0.123E2) = false +< (~0.34028235E39, ~0.31415927E1) = true +> (~0.34028235E39, ~0.31415927E1) = false +== (~0.34028235E39, ~0.31415927E1) = false +?= (~0.34028235E39, ~0.31415927E1) = false +< (~0.34028235E39, ~0.27182817E1) = true +> (~0.34028235E39, ~0.27182817E1) = false +== (~0.34028235E39, ~0.27182817E1) = false +?= (~0.34028235E39, ~0.27182817E1) = false +< (~0.34028235E39, ~0.123E1) = true +> (~0.34028235E39, ~0.123E1) = false +== (~0.34028235E39, ~0.123E1) = false +?= (~0.34028235E39, ~0.123E1) = false +< (~0.34028235E39, ~0.123) = true +> (~0.34028235E39, ~0.123) = false +== (~0.34028235E39, ~0.123) = false +?= (~0.34028235E39, ~0.123) = false +< (~0.34028235E39, ~0.123E~2) = true +> (~0.34028235E39, ~0.123E~2) = false +== (~0.34028235E39, ~0.123E~2) = false +?= (~0.34028235E39, ~0.123E~2) = false +< (~0.34028235E39, ~0.11754944E~37) = true +> (~0.34028235E39, ~0.11754944E~37) = false +== (~0.34028235E39, ~0.11754944E~37) = false +?= (~0.34028235E39, ~0.11754944E~37) = false +< (~0.34028235E39, ~0.5877472E~38) = true +> (~0.34028235E39, ~0.5877472E~38) = false +== (~0.34028235E39, ~0.5877472E~38) = false +?= (~0.34028235E39, ~0.5877472E~38) = false +< (~0.34028235E39, ~0.1E~44) = true +> (~0.34028235E39, ~0.1E~44) = false +== (~0.34028235E39, ~0.1E~44) = false +?= (~0.34028235E39, ~0.1E~44) = false +< (~0.34028235E39, ~0.0) = true +> (~0.34028235E39, ~0.0) = false +== (~0.34028235E39, ~0.0) = false +?= (~0.34028235E39, ~0.0) = false +< (~0.17014117E39, 0.34028235E39) = true +> (~0.17014117E39, 0.34028235E39) = false +== (~0.17014117E39, 0.34028235E39) = false +?= (~0.17014117E39, 0.34028235E39) = false +< (~0.17014117E39, 0.17014117E39) = true +> (~0.17014117E39, 0.17014117E39) = false +== (~0.17014117E39, 0.17014117E39) = false +?= (~0.17014117E39, 0.17014117E39) = false +< (~0.17014117E39, 0.123E4) = true +> (~0.17014117E39, 0.123E4) = false +== (~0.17014117E39, 0.123E4) = false +?= (~0.17014117E39, 0.123E4) = false +< (~0.17014117E39, 0.123E2) = true +> (~0.17014117E39, 0.123E2) = false +== (~0.17014117E39, 0.123E2) = false +?= (~0.17014117E39, 0.123E2) = false +< (~0.17014117E39, 0.31415927E1) = true +> (~0.17014117E39, 0.31415927E1) = false +== (~0.17014117E39, 0.31415927E1) = false +?= (~0.17014117E39, 0.31415927E1) = false +< (~0.17014117E39, 0.27182817E1) = true +> (~0.17014117E39, 0.27182817E1) = false +== (~0.17014117E39, 0.27182817E1) = false +?= (~0.17014117E39, 0.27182817E1) = false +< (~0.17014117E39, 0.123E1) = true +> (~0.17014117E39, 0.123E1) = false +== (~0.17014117E39, 0.123E1) = false +?= (~0.17014117E39, 0.123E1) = false +< (~0.17014117E39, 0.123) = true +> (~0.17014117E39, 0.123) = false +== (~0.17014117E39, 0.123) = false +?= (~0.17014117E39, 0.123) = false +< (~0.17014117E39, 0.123E~2) = true +> (~0.17014117E39, 0.123E~2) = false +== (~0.17014117E39, 0.123E~2) = false +?= (~0.17014117E39, 0.123E~2) = false +< (~0.17014117E39, 0.11754944E~37) = true +> (~0.17014117E39, 0.11754944E~37) = false +== (~0.17014117E39, 0.11754944E~37) = false +?= (~0.17014117E39, 0.11754944E~37) = false +< (~0.17014117E39, 0.5877472E~38) = true +> (~0.17014117E39, 0.5877472E~38) = false +== (~0.17014117E39, 0.5877472E~38) = false +?= (~0.17014117E39, 0.5877472E~38) = false +< (~0.17014117E39, 0.1E~44) = true +> (~0.17014117E39, 0.1E~44) = false +== (~0.17014117E39, 0.1E~44) = false +?= (~0.17014117E39, 0.1E~44) = false +< (~0.17014117E39, 0.0) = true +> (~0.17014117E39, 0.0) = false +== (~0.17014117E39, 0.0) = false +?= (~0.17014117E39, 0.0) = false +< (~0.17014117E39, ~0.34028235E39) = false +> (~0.17014117E39, ~0.34028235E39) = true +== (~0.17014117E39, ~0.34028235E39) = false +?= (~0.17014117E39, ~0.34028235E39) = false +< (~0.17014117E39, ~0.17014117E39) = false +> (~0.17014117E39, ~0.17014117E39) = false +== (~0.17014117E39, ~0.17014117E39) = true +?= (~0.17014117E39, ~0.17014117E39) = true +< (~0.17014117E39, ~0.123E4) = true +> (~0.17014117E39, ~0.123E4) = false +== (~0.17014117E39, ~0.123E4) = false +?= (~0.17014117E39, ~0.123E4) = false +< (~0.17014117E39, ~0.123E2) = true +> (~0.17014117E39, ~0.123E2) = false +== (~0.17014117E39, ~0.123E2) = false +?= (~0.17014117E39, ~0.123E2) = false +< (~0.17014117E39, ~0.31415927E1) = true +> (~0.17014117E39, ~0.31415927E1) = false +== (~0.17014117E39, ~0.31415927E1) = false +?= (~0.17014117E39, ~0.31415927E1) = false +< (~0.17014117E39, ~0.27182817E1) = true +> (~0.17014117E39, ~0.27182817E1) = false +== (~0.17014117E39, ~0.27182817E1) = false +?= (~0.17014117E39, ~0.27182817E1) = false +< (~0.17014117E39, ~0.123E1) = true +> (~0.17014117E39, ~0.123E1) = false +== (~0.17014117E39, ~0.123E1) = false +?= (~0.17014117E39, ~0.123E1) = false +< (~0.17014117E39, ~0.123) = true +> (~0.17014117E39, ~0.123) = false +== (~0.17014117E39, ~0.123) = false +?= (~0.17014117E39, ~0.123) = false +< (~0.17014117E39, ~0.123E~2) = true +> (~0.17014117E39, ~0.123E~2) = false +== (~0.17014117E39, ~0.123E~2) = false +?= (~0.17014117E39, ~0.123E~2) = false +< (~0.17014117E39, ~0.11754944E~37) = true +> (~0.17014117E39, ~0.11754944E~37) = false +== (~0.17014117E39, ~0.11754944E~37) = false +?= (~0.17014117E39, ~0.11754944E~37) = false +< (~0.17014117E39, ~0.5877472E~38) = true +> (~0.17014117E39, ~0.5877472E~38) = false +== (~0.17014117E39, ~0.5877472E~38) = false +?= (~0.17014117E39, ~0.5877472E~38) = false +< (~0.17014117E39, ~0.1E~44) = true +> (~0.17014117E39, ~0.1E~44) = false +== (~0.17014117E39, ~0.1E~44) = false +?= (~0.17014117E39, ~0.1E~44) = false +< (~0.17014117E39, ~0.0) = true +> (~0.17014117E39, ~0.0) = false +== (~0.17014117E39, ~0.0) = false +?= (~0.17014117E39, ~0.0) = false +< (~0.123E4, 0.34028235E39) = true +> (~0.123E4, 0.34028235E39) = false +== (~0.123E4, 0.34028235E39) = false +?= (~0.123E4, 0.34028235E39) = false +< (~0.123E4, 0.17014117E39) = true +> (~0.123E4, 0.17014117E39) = false +== (~0.123E4, 0.17014117E39) = false +?= (~0.123E4, 0.17014117E39) = false +< (~0.123E4, 0.123E4) = true +> (~0.123E4, 0.123E4) = false +== (~0.123E4, 0.123E4) = false +?= (~0.123E4, 0.123E4) = false +< (~0.123E4, 0.123E2) = true +> (~0.123E4, 0.123E2) = false +== (~0.123E4, 0.123E2) = false +?= (~0.123E4, 0.123E2) = false +< (~0.123E4, 0.31415927E1) = true +> (~0.123E4, 0.31415927E1) = false +== (~0.123E4, 0.31415927E1) = false +?= (~0.123E4, 0.31415927E1) = false +< (~0.123E4, 0.27182817E1) = true +> (~0.123E4, 0.27182817E1) = false +== (~0.123E4, 0.27182817E1) = false +?= (~0.123E4, 0.27182817E1) = false +< (~0.123E4, 0.123E1) = true +> (~0.123E4, 0.123E1) = false +== (~0.123E4, 0.123E1) = false +?= (~0.123E4, 0.123E1) = false +< (~0.123E4, 0.123) = true +> (~0.123E4, 0.123) = false +== (~0.123E4, 0.123) = false +?= (~0.123E4, 0.123) = false +< (~0.123E4, 0.123E~2) = true +> (~0.123E4, 0.123E~2) = false +== (~0.123E4, 0.123E~2) = false +?= (~0.123E4, 0.123E~2) = false +< (~0.123E4, 0.11754944E~37) = true +> (~0.123E4, 0.11754944E~37) = false +== (~0.123E4, 0.11754944E~37) = false +?= (~0.123E4, 0.11754944E~37) = false +< (~0.123E4, 0.5877472E~38) = true +> (~0.123E4, 0.5877472E~38) = false +== (~0.123E4, 0.5877472E~38) = false +?= (~0.123E4, 0.5877472E~38) = false +< (~0.123E4, 0.1E~44) = true +> (~0.123E4, 0.1E~44) = false +== (~0.123E4, 0.1E~44) = false +?= (~0.123E4, 0.1E~44) = false +< (~0.123E4, 0.0) = true +> (~0.123E4, 0.0) = false +== (~0.123E4, 0.0) = false +?= (~0.123E4, 0.0) = false +< (~0.123E4, ~0.34028235E39) = false +> (~0.123E4, ~0.34028235E39) = true +== (~0.123E4, ~0.34028235E39) = false +?= (~0.123E4, ~0.34028235E39) = false +< (~0.123E4, ~0.17014117E39) = false +> (~0.123E4, ~0.17014117E39) = true +== (~0.123E4, ~0.17014117E39) = false +?= (~0.123E4, ~0.17014117E39) = false +< (~0.123E4, ~0.123E4) = false +> (~0.123E4, ~0.123E4) = false +== (~0.123E4, ~0.123E4) = true +?= (~0.123E4, ~0.123E4) = true +< (~0.123E4, ~0.123E2) = true +> (~0.123E4, ~0.123E2) = false +== (~0.123E4, ~0.123E2) = false +?= (~0.123E4, ~0.123E2) = false +< (~0.123E4, ~0.31415927E1) = true +> (~0.123E4, ~0.31415927E1) = false +== (~0.123E4, ~0.31415927E1) = false +?= (~0.123E4, ~0.31415927E1) = false +< (~0.123E4, ~0.27182817E1) = true +> (~0.123E4, ~0.27182817E1) = false +== (~0.123E4, ~0.27182817E1) = false +?= (~0.123E4, ~0.27182817E1) = false +< (~0.123E4, ~0.123E1) = true +> (~0.123E4, ~0.123E1) = false +== (~0.123E4, ~0.123E1) = false +?= (~0.123E4, ~0.123E1) = false +< (~0.123E4, ~0.123) = true +> (~0.123E4, ~0.123) = false +== (~0.123E4, ~0.123) = false +?= (~0.123E4, ~0.123) = false +< (~0.123E4, ~0.123E~2) = true +> (~0.123E4, ~0.123E~2) = false +== (~0.123E4, ~0.123E~2) = false +?= (~0.123E4, ~0.123E~2) = false +< (~0.123E4, ~0.11754944E~37) = true +> (~0.123E4, ~0.11754944E~37) = false +== (~0.123E4, ~0.11754944E~37) = false +?= (~0.123E4, ~0.11754944E~37) = false +< (~0.123E4, ~0.5877472E~38) = true +> (~0.123E4, ~0.5877472E~38) = false +== (~0.123E4, ~0.5877472E~38) = false +?= (~0.123E4, ~0.5877472E~38) = false +< (~0.123E4, ~0.1E~44) = true +> (~0.123E4, ~0.1E~44) = false +== (~0.123E4, ~0.1E~44) = false +?= (~0.123E4, ~0.1E~44) = false +< (~0.123E4, ~0.0) = true +> (~0.123E4, ~0.0) = false +== (~0.123E4, ~0.0) = false +?= (~0.123E4, ~0.0) = false +< (~0.123E2, 0.34028235E39) = true +> (~0.123E2, 0.34028235E39) = false +== (~0.123E2, 0.34028235E39) = false +?= (~0.123E2, 0.34028235E39) = false +< (~0.123E2, 0.17014117E39) = true +> (~0.123E2, 0.17014117E39) = false +== (~0.123E2, 0.17014117E39) = false +?= (~0.123E2, 0.17014117E39) = false +< (~0.123E2, 0.123E4) = true +> (~0.123E2, 0.123E4) = false +== (~0.123E2, 0.123E4) = false +?= (~0.123E2, 0.123E4) = false +< (~0.123E2, 0.123E2) = true +> (~0.123E2, 0.123E2) = false +== (~0.123E2, 0.123E2) = false +?= (~0.123E2, 0.123E2) = false +< (~0.123E2, 0.31415927E1) = true +> (~0.123E2, 0.31415927E1) = false +== (~0.123E2, 0.31415927E1) = false +?= (~0.123E2, 0.31415927E1) = false +< (~0.123E2, 0.27182817E1) = true +> (~0.123E2, 0.27182817E1) = false +== (~0.123E2, 0.27182817E1) = false +?= (~0.123E2, 0.27182817E1) = false +< (~0.123E2, 0.123E1) = true +> (~0.123E2, 0.123E1) = false +== (~0.123E2, 0.123E1) = false +?= (~0.123E2, 0.123E1) = false +< (~0.123E2, 0.123) = true +> (~0.123E2, 0.123) = false +== (~0.123E2, 0.123) = false +?= (~0.123E2, 0.123) = false +< (~0.123E2, 0.123E~2) = true +> (~0.123E2, 0.123E~2) = false +== (~0.123E2, 0.123E~2) = false +?= (~0.123E2, 0.123E~2) = false +< (~0.123E2, 0.11754944E~37) = true +> (~0.123E2, 0.11754944E~37) = false +== (~0.123E2, 0.11754944E~37) = false +?= (~0.123E2, 0.11754944E~37) = false +< (~0.123E2, 0.5877472E~38) = true +> (~0.123E2, 0.5877472E~38) = false +== (~0.123E2, 0.5877472E~38) = false +?= (~0.123E2, 0.5877472E~38) = false +< (~0.123E2, 0.1E~44) = true +> (~0.123E2, 0.1E~44) = false +== (~0.123E2, 0.1E~44) = false +?= (~0.123E2, 0.1E~44) = false +< (~0.123E2, 0.0) = true +> (~0.123E2, 0.0) = false +== (~0.123E2, 0.0) = false +?= (~0.123E2, 0.0) = false +< (~0.123E2, ~0.34028235E39) = false +> (~0.123E2, ~0.34028235E39) = true +== (~0.123E2, ~0.34028235E39) = false +?= (~0.123E2, ~0.34028235E39) = false +< (~0.123E2, ~0.17014117E39) = false +> (~0.123E2, ~0.17014117E39) = true +== (~0.123E2, ~0.17014117E39) = false +?= (~0.123E2, ~0.17014117E39) = false +< (~0.123E2, ~0.123E4) = false +> (~0.123E2, ~0.123E4) = true +== (~0.123E2, ~0.123E4) = false +?= (~0.123E2, ~0.123E4) = false +< (~0.123E2, ~0.123E2) = false +> (~0.123E2, ~0.123E2) = false +== (~0.123E2, ~0.123E2) = true +?= (~0.123E2, ~0.123E2) = true +< (~0.123E2, ~0.31415927E1) = true +> (~0.123E2, ~0.31415927E1) = false +== (~0.123E2, ~0.31415927E1) = false +?= (~0.123E2, ~0.31415927E1) = false +< (~0.123E2, ~0.27182817E1) = true +> (~0.123E2, ~0.27182817E1) = false +== (~0.123E2, ~0.27182817E1) = false +?= (~0.123E2, ~0.27182817E1) = false +< (~0.123E2, ~0.123E1) = true +> (~0.123E2, ~0.123E1) = false +== (~0.123E2, ~0.123E1) = false +?= (~0.123E2, ~0.123E1) = false +< (~0.123E2, ~0.123) = true +> (~0.123E2, ~0.123) = false +== (~0.123E2, ~0.123) = false +?= (~0.123E2, ~0.123) = false +< (~0.123E2, ~0.123E~2) = true +> (~0.123E2, ~0.123E~2) = false +== (~0.123E2, ~0.123E~2) = false +?= (~0.123E2, ~0.123E~2) = false +< (~0.123E2, ~0.11754944E~37) = true +> (~0.123E2, ~0.11754944E~37) = false +== (~0.123E2, ~0.11754944E~37) = false +?= (~0.123E2, ~0.11754944E~37) = false +< (~0.123E2, ~0.5877472E~38) = true +> (~0.123E2, ~0.5877472E~38) = false +== (~0.123E2, ~0.5877472E~38) = false +?= (~0.123E2, ~0.5877472E~38) = false +< (~0.123E2, ~0.1E~44) = true +> (~0.123E2, ~0.1E~44) = false +== (~0.123E2, ~0.1E~44) = false +?= (~0.123E2, ~0.1E~44) = false +< (~0.123E2, ~0.0) = true +> (~0.123E2, ~0.0) = false +== (~0.123E2, ~0.0) = false +?= (~0.123E2, ~0.0) = false +< (~0.31415927E1, 0.34028235E39) = true +> (~0.31415927E1, 0.34028235E39) = false +== (~0.31415927E1, 0.34028235E39) = false +?= (~0.31415927E1, 0.34028235E39) = false +< (~0.31415927E1, 0.17014117E39) = true +> (~0.31415927E1, 0.17014117E39) = false +== (~0.31415927E1, 0.17014117E39) = false +?= (~0.31415927E1, 0.17014117E39) = false +< (~0.31415927E1, 0.123E4) = true +> (~0.31415927E1, 0.123E4) = false +== (~0.31415927E1, 0.123E4) = false +?= (~0.31415927E1, 0.123E4) = false +< (~0.31415927E1, 0.123E2) = true +> (~0.31415927E1, 0.123E2) = false +== (~0.31415927E1, 0.123E2) = false +?= (~0.31415927E1, 0.123E2) = false +< (~0.31415927E1, 0.31415927E1) = true +> (~0.31415927E1, 0.31415927E1) = false +== (~0.31415927E1, 0.31415927E1) = false +?= (~0.31415927E1, 0.31415927E1) = false +< (~0.31415927E1, 0.27182817E1) = true +> (~0.31415927E1, 0.27182817E1) = false +== (~0.31415927E1, 0.27182817E1) = false +?= (~0.31415927E1, 0.27182817E1) = false +< (~0.31415927E1, 0.123E1) = true +> (~0.31415927E1, 0.123E1) = false +== (~0.31415927E1, 0.123E1) = false +?= (~0.31415927E1, 0.123E1) = false +< (~0.31415927E1, 0.123) = true +> (~0.31415927E1, 0.123) = false +== (~0.31415927E1, 0.123) = false +?= (~0.31415927E1, 0.123) = false +< (~0.31415927E1, 0.123E~2) = true +> (~0.31415927E1, 0.123E~2) = false +== (~0.31415927E1, 0.123E~2) = false +?= (~0.31415927E1, 0.123E~2) = false +< (~0.31415927E1, 0.11754944E~37) = true +> (~0.31415927E1, 0.11754944E~37) = false +== (~0.31415927E1, 0.11754944E~37) = false +?= (~0.31415927E1, 0.11754944E~37) = false +< (~0.31415927E1, 0.5877472E~38) = true +> (~0.31415927E1, 0.5877472E~38) = false +== (~0.31415927E1, 0.5877472E~38) = false +?= (~0.31415927E1, 0.5877472E~38) = false +< (~0.31415927E1, 0.1E~44) = true +> (~0.31415927E1, 0.1E~44) = false +== (~0.31415927E1, 0.1E~44) = false +?= (~0.31415927E1, 0.1E~44) = false +< (~0.31415927E1, 0.0) = true +> (~0.31415927E1, 0.0) = false +== (~0.31415927E1, 0.0) = false +?= (~0.31415927E1, 0.0) = false +< (~0.31415927E1, ~0.34028235E39) = false +> (~0.31415927E1, ~0.34028235E39) = true +== (~0.31415927E1, ~0.34028235E39) = false +?= (~0.31415927E1, ~0.34028235E39) = false +< (~0.31415927E1, ~0.17014117E39) = false +> (~0.31415927E1, ~0.17014117E39) = true +== (~0.31415927E1, ~0.17014117E39) = false +?= (~0.31415927E1, ~0.17014117E39) = false +< (~0.31415927E1, ~0.123E4) = false +> (~0.31415927E1, ~0.123E4) = true +== (~0.31415927E1, ~0.123E4) = false +?= (~0.31415927E1, ~0.123E4) = false +< (~0.31415927E1, ~0.123E2) = false +> (~0.31415927E1, ~0.123E2) = true +== (~0.31415927E1, ~0.123E2) = false +?= (~0.31415927E1, ~0.123E2) = false +< (~0.31415927E1, ~0.31415927E1) = false +> (~0.31415927E1, ~0.31415927E1) = false +== (~0.31415927E1, ~0.31415927E1) = true +?= (~0.31415927E1, ~0.31415927E1) = true +< (~0.31415927E1, ~0.27182817E1) = true +> (~0.31415927E1, ~0.27182817E1) = false +== (~0.31415927E1, ~0.27182817E1) = false +?= (~0.31415927E1, ~0.27182817E1) = false +< (~0.31415927E1, ~0.123E1) = true +> (~0.31415927E1, ~0.123E1) = false +== (~0.31415927E1, ~0.123E1) = false +?= (~0.31415927E1, ~0.123E1) = false +< (~0.31415927E1, ~0.123) = true +> (~0.31415927E1, ~0.123) = false +== (~0.31415927E1, ~0.123) = false +?= (~0.31415927E1, ~0.123) = false +< (~0.31415927E1, ~0.123E~2) = true +> (~0.31415927E1, ~0.123E~2) = false +== (~0.31415927E1, ~0.123E~2) = false +?= (~0.31415927E1, ~0.123E~2) = false +< (~0.31415927E1, ~0.11754944E~37) = true +> (~0.31415927E1, ~0.11754944E~37) = false +== (~0.31415927E1, ~0.11754944E~37) = false +?= (~0.31415927E1, ~0.11754944E~37) = false +< (~0.31415927E1, ~0.5877472E~38) = true +> (~0.31415927E1, ~0.5877472E~38) = false +== (~0.31415927E1, ~0.5877472E~38) = false +?= (~0.31415927E1, ~0.5877472E~38) = false +< (~0.31415927E1, ~0.1E~44) = true +> (~0.31415927E1, ~0.1E~44) = false +== (~0.31415927E1, ~0.1E~44) = false +?= (~0.31415927E1, ~0.1E~44) = false +< (~0.31415927E1, ~0.0) = true +> (~0.31415927E1, ~0.0) = false +== (~0.31415927E1, ~0.0) = false +?= (~0.31415927E1, ~0.0) = false +< (~0.27182817E1, 0.34028235E39) = true +> (~0.27182817E1, 0.34028235E39) = false +== (~0.27182817E1, 0.34028235E39) = false +?= (~0.27182817E1, 0.34028235E39) = false +< (~0.27182817E1, 0.17014117E39) = true +> (~0.27182817E1, 0.17014117E39) = false +== (~0.27182817E1, 0.17014117E39) = false +?= (~0.27182817E1, 0.17014117E39) = false +< (~0.27182817E1, 0.123E4) = true +> (~0.27182817E1, 0.123E4) = false +== (~0.27182817E1, 0.123E4) = false +?= (~0.27182817E1, 0.123E4) = false +< (~0.27182817E1, 0.123E2) = true +> (~0.27182817E1, 0.123E2) = false +== (~0.27182817E1, 0.123E2) = false +?= (~0.27182817E1, 0.123E2) = false +< (~0.27182817E1, 0.31415927E1) = true +> (~0.27182817E1, 0.31415927E1) = false +== (~0.27182817E1, 0.31415927E1) = false +?= (~0.27182817E1, 0.31415927E1) = false +< (~0.27182817E1, 0.27182817E1) = true +> (~0.27182817E1, 0.27182817E1) = false +== (~0.27182817E1, 0.27182817E1) = false +?= (~0.27182817E1, 0.27182817E1) = false +< (~0.27182817E1, 0.123E1) = true +> (~0.27182817E1, 0.123E1) = false +== (~0.27182817E1, 0.123E1) = false +?= (~0.27182817E1, 0.123E1) = false +< (~0.27182817E1, 0.123) = true +> (~0.27182817E1, 0.123) = false +== (~0.27182817E1, 0.123) = false +?= (~0.27182817E1, 0.123) = false +< (~0.27182817E1, 0.123E~2) = true +> (~0.27182817E1, 0.123E~2) = false +== (~0.27182817E1, 0.123E~2) = false +?= (~0.27182817E1, 0.123E~2) = false +< (~0.27182817E1, 0.11754944E~37) = true +> (~0.27182817E1, 0.11754944E~37) = false +== (~0.27182817E1, 0.11754944E~37) = false +?= (~0.27182817E1, 0.11754944E~37) = false +< (~0.27182817E1, 0.5877472E~38) = true +> (~0.27182817E1, 0.5877472E~38) = false +== (~0.27182817E1, 0.5877472E~38) = false +?= (~0.27182817E1, 0.5877472E~38) = false +< (~0.27182817E1, 0.1E~44) = true +> (~0.27182817E1, 0.1E~44) = false +== (~0.27182817E1, 0.1E~44) = false +?= (~0.27182817E1, 0.1E~44) = false +< (~0.27182817E1, 0.0) = true +> (~0.27182817E1, 0.0) = false +== (~0.27182817E1, 0.0) = false +?= (~0.27182817E1, 0.0) = false +< (~0.27182817E1, ~0.34028235E39) = false +> (~0.27182817E1, ~0.34028235E39) = true +== (~0.27182817E1, ~0.34028235E39) = false +?= (~0.27182817E1, ~0.34028235E39) = false +< (~0.27182817E1, ~0.17014117E39) = false +> (~0.27182817E1, ~0.17014117E39) = true +== (~0.27182817E1, ~0.17014117E39) = false +?= (~0.27182817E1, ~0.17014117E39) = false +< (~0.27182817E1, ~0.123E4) = false +> (~0.27182817E1, ~0.123E4) = true +== (~0.27182817E1, ~0.123E4) = false +?= (~0.27182817E1, ~0.123E4) = false +< (~0.27182817E1, ~0.123E2) = false +> (~0.27182817E1, ~0.123E2) = true +== (~0.27182817E1, ~0.123E2) = false +?= (~0.27182817E1, ~0.123E2) = false +< (~0.27182817E1, ~0.31415927E1) = false +> (~0.27182817E1, ~0.31415927E1) = true +== (~0.27182817E1, ~0.31415927E1) = false +?= (~0.27182817E1, ~0.31415927E1) = false +< (~0.27182817E1, ~0.27182817E1) = false +> (~0.27182817E1, ~0.27182817E1) = false +== (~0.27182817E1, ~0.27182817E1) = true +?= (~0.27182817E1, ~0.27182817E1) = true +< (~0.27182817E1, ~0.123E1) = true +> (~0.27182817E1, ~0.123E1) = false +== (~0.27182817E1, ~0.123E1) = false +?= (~0.27182817E1, ~0.123E1) = false +< (~0.27182817E1, ~0.123) = true +> (~0.27182817E1, ~0.123) = false +== (~0.27182817E1, ~0.123) = false +?= (~0.27182817E1, ~0.123) = false +< (~0.27182817E1, ~0.123E~2) = true +> (~0.27182817E1, ~0.123E~2) = false +== (~0.27182817E1, ~0.123E~2) = false +?= (~0.27182817E1, ~0.123E~2) = false +< (~0.27182817E1, ~0.11754944E~37) = true +> (~0.27182817E1, ~0.11754944E~37) = false +== (~0.27182817E1, ~0.11754944E~37) = false +?= (~0.27182817E1, ~0.11754944E~37) = false +< (~0.27182817E1, ~0.5877472E~38) = true +> (~0.27182817E1, ~0.5877472E~38) = false +== (~0.27182817E1, ~0.5877472E~38) = false +?= (~0.27182817E1, ~0.5877472E~38) = false +< (~0.27182817E1, ~0.1E~44) = true +> (~0.27182817E1, ~0.1E~44) = false +== (~0.27182817E1, ~0.1E~44) = false +?= (~0.27182817E1, ~0.1E~44) = false +< (~0.27182817E1, ~0.0) = true +> (~0.27182817E1, ~0.0) = false +== (~0.27182817E1, ~0.0) = false +?= (~0.27182817E1, ~0.0) = false +< (~0.123E1, 0.34028235E39) = true +> (~0.123E1, 0.34028235E39) = false +== (~0.123E1, 0.34028235E39) = false +?= (~0.123E1, 0.34028235E39) = false +< (~0.123E1, 0.17014117E39) = true +> (~0.123E1, 0.17014117E39) = false +== (~0.123E1, 0.17014117E39) = false +?= (~0.123E1, 0.17014117E39) = false +< (~0.123E1, 0.123E4) = true +> (~0.123E1, 0.123E4) = false +== (~0.123E1, 0.123E4) = false +?= (~0.123E1, 0.123E4) = false +< (~0.123E1, 0.123E2) = true +> (~0.123E1, 0.123E2) = false +== (~0.123E1, 0.123E2) = false +?= (~0.123E1, 0.123E2) = false +< (~0.123E1, 0.31415927E1) = true +> (~0.123E1, 0.31415927E1) = false +== (~0.123E1, 0.31415927E1) = false +?= (~0.123E1, 0.31415927E1) = false +< (~0.123E1, 0.27182817E1) = true +> (~0.123E1, 0.27182817E1) = false +== (~0.123E1, 0.27182817E1) = false +?= (~0.123E1, 0.27182817E1) = false +< (~0.123E1, 0.123E1) = true +> (~0.123E1, 0.123E1) = false +== (~0.123E1, 0.123E1) = false +?= (~0.123E1, 0.123E1) = false +< (~0.123E1, 0.123) = true +> (~0.123E1, 0.123) = false +== (~0.123E1, 0.123) = false +?= (~0.123E1, 0.123) = false +< (~0.123E1, 0.123E~2) = true +> (~0.123E1, 0.123E~2) = false +== (~0.123E1, 0.123E~2) = false +?= (~0.123E1, 0.123E~2) = false +< (~0.123E1, 0.11754944E~37) = true +> (~0.123E1, 0.11754944E~37) = false +== (~0.123E1, 0.11754944E~37) = false +?= (~0.123E1, 0.11754944E~37) = false +< (~0.123E1, 0.5877472E~38) = true +> (~0.123E1, 0.5877472E~38) = false +== (~0.123E1, 0.5877472E~38) = false +?= (~0.123E1, 0.5877472E~38) = false +< (~0.123E1, 0.1E~44) = true +> (~0.123E1, 0.1E~44) = false +== (~0.123E1, 0.1E~44) = false +?= (~0.123E1, 0.1E~44) = false +< (~0.123E1, 0.0) = true +> (~0.123E1, 0.0) = false +== (~0.123E1, 0.0) = false +?= (~0.123E1, 0.0) = false +< (~0.123E1, ~0.34028235E39) = false +> (~0.123E1, ~0.34028235E39) = true +== (~0.123E1, ~0.34028235E39) = false +?= (~0.123E1, ~0.34028235E39) = false +< (~0.123E1, ~0.17014117E39) = false +> (~0.123E1, ~0.17014117E39) = true +== (~0.123E1, ~0.17014117E39) = false +?= (~0.123E1, ~0.17014117E39) = false +< (~0.123E1, ~0.123E4) = false +> (~0.123E1, ~0.123E4) = true +== (~0.123E1, ~0.123E4) = false +?= (~0.123E1, ~0.123E4) = false +< (~0.123E1, ~0.123E2) = false +> (~0.123E1, ~0.123E2) = true +== (~0.123E1, ~0.123E2) = false +?= (~0.123E1, ~0.123E2) = false +< (~0.123E1, ~0.31415927E1) = false +> (~0.123E1, ~0.31415927E1) = true +== (~0.123E1, ~0.31415927E1) = false +?= (~0.123E1, ~0.31415927E1) = false +< (~0.123E1, ~0.27182817E1) = false +> (~0.123E1, ~0.27182817E1) = true +== (~0.123E1, ~0.27182817E1) = false +?= (~0.123E1, ~0.27182817E1) = false +< (~0.123E1, ~0.123E1) = false +> (~0.123E1, ~0.123E1) = false +== (~0.123E1, ~0.123E1) = true +?= (~0.123E1, ~0.123E1) = true +< (~0.123E1, ~0.123) = true +> (~0.123E1, ~0.123) = false +== (~0.123E1, ~0.123) = false +?= (~0.123E1, ~0.123) = false +< (~0.123E1, ~0.123E~2) = true +> (~0.123E1, ~0.123E~2) = false +== (~0.123E1, ~0.123E~2) = false +?= (~0.123E1, ~0.123E~2) = false +< (~0.123E1, ~0.11754944E~37) = true +> (~0.123E1, ~0.11754944E~37) = false +== (~0.123E1, ~0.11754944E~37) = false +?= (~0.123E1, ~0.11754944E~37) = false +< (~0.123E1, ~0.5877472E~38) = true +> (~0.123E1, ~0.5877472E~38) = false +== (~0.123E1, ~0.5877472E~38) = false +?= (~0.123E1, ~0.5877472E~38) = false +< (~0.123E1, ~0.1E~44) = true +> (~0.123E1, ~0.1E~44) = false +== (~0.123E1, ~0.1E~44) = false +?= (~0.123E1, ~0.1E~44) = false +< (~0.123E1, ~0.0) = true +> (~0.123E1, ~0.0) = false +== (~0.123E1, ~0.0) = false +?= (~0.123E1, ~0.0) = false +< (~0.123, 0.34028235E39) = true +> (~0.123, 0.34028235E39) = false +== (~0.123, 0.34028235E39) = false +?= (~0.123, 0.34028235E39) = false +< (~0.123, 0.17014117E39) = true +> (~0.123, 0.17014117E39) = false +== (~0.123, 0.17014117E39) = false +?= (~0.123, 0.17014117E39) = false +< (~0.123, 0.123E4) = true +> (~0.123, 0.123E4) = false +== (~0.123, 0.123E4) = false +?= (~0.123, 0.123E4) = false +< (~0.123, 0.123E2) = true +> (~0.123, 0.123E2) = false +== (~0.123, 0.123E2) = false +?= (~0.123, 0.123E2) = false +< (~0.123, 0.31415927E1) = true +> (~0.123, 0.31415927E1) = false +== (~0.123, 0.31415927E1) = false +?= (~0.123, 0.31415927E1) = false +< (~0.123, 0.27182817E1) = true +> (~0.123, 0.27182817E1) = false +== (~0.123, 0.27182817E1) = false +?= (~0.123, 0.27182817E1) = false +< (~0.123, 0.123E1) = true +> (~0.123, 0.123E1) = false +== (~0.123, 0.123E1) = false +?= (~0.123, 0.123E1) = false +< (~0.123, 0.123) = true +> (~0.123, 0.123) = false +== (~0.123, 0.123) = false +?= (~0.123, 0.123) = false +< (~0.123, 0.123E~2) = true +> (~0.123, 0.123E~2) = false +== (~0.123, 0.123E~2) = false +?= (~0.123, 0.123E~2) = false +< (~0.123, 0.11754944E~37) = true +> (~0.123, 0.11754944E~37) = false +== (~0.123, 0.11754944E~37) = false +?= (~0.123, 0.11754944E~37) = false +< (~0.123, 0.5877472E~38) = true +> (~0.123, 0.5877472E~38) = false +== (~0.123, 0.5877472E~38) = false +?= (~0.123, 0.5877472E~38) = false +< (~0.123, 0.1E~44) = true +> (~0.123, 0.1E~44) = false +== (~0.123, 0.1E~44) = false +?= (~0.123, 0.1E~44) = false +< (~0.123, 0.0) = true +> (~0.123, 0.0) = false +== (~0.123, 0.0) = false +?= (~0.123, 0.0) = false +< (~0.123, ~0.34028235E39) = false +> (~0.123, ~0.34028235E39) = true +== (~0.123, ~0.34028235E39) = false +?= (~0.123, ~0.34028235E39) = false +< (~0.123, ~0.17014117E39) = false +> (~0.123, ~0.17014117E39) = true +== (~0.123, ~0.17014117E39) = false +?= (~0.123, ~0.17014117E39) = false +< (~0.123, ~0.123E4) = false +> (~0.123, ~0.123E4) = true +== (~0.123, ~0.123E4) = false +?= (~0.123, ~0.123E4) = false +< (~0.123, ~0.123E2) = false +> (~0.123, ~0.123E2) = true +== (~0.123, ~0.123E2) = false +?= (~0.123, ~0.123E2) = false +< (~0.123, ~0.31415927E1) = false +> (~0.123, ~0.31415927E1) = true +== (~0.123, ~0.31415927E1) = false +?= (~0.123, ~0.31415927E1) = false +< (~0.123, ~0.27182817E1) = false +> (~0.123, ~0.27182817E1) = true +== (~0.123, ~0.27182817E1) = false +?= (~0.123, ~0.27182817E1) = false +< (~0.123, ~0.123E1) = false +> (~0.123, ~0.123E1) = true +== (~0.123, ~0.123E1) = false +?= (~0.123, ~0.123E1) = false +< (~0.123, ~0.123) = false +> (~0.123, ~0.123) = false +== (~0.123, ~0.123) = true +?= (~0.123, ~0.123) = true +< (~0.123, ~0.123E~2) = true +> (~0.123, ~0.123E~2) = false +== (~0.123, ~0.123E~2) = false +?= (~0.123, ~0.123E~2) = false +< (~0.123, ~0.11754944E~37) = true +> (~0.123, ~0.11754944E~37) = false +== (~0.123, ~0.11754944E~37) = false +?= (~0.123, ~0.11754944E~37) = false +< (~0.123, ~0.5877472E~38) = true +> (~0.123, ~0.5877472E~38) = false +== (~0.123, ~0.5877472E~38) = false +?= (~0.123, ~0.5877472E~38) = false +< (~0.123, ~0.1E~44) = true +> (~0.123, ~0.1E~44) = false +== (~0.123, ~0.1E~44) = false +?= (~0.123, ~0.1E~44) = false +< (~0.123, ~0.0) = true +> (~0.123, ~0.0) = false +== (~0.123, ~0.0) = false +?= (~0.123, ~0.0) = false +< (~0.123E~2, 0.34028235E39) = true +> (~0.123E~2, 0.34028235E39) = false +== (~0.123E~2, 0.34028235E39) = false +?= (~0.123E~2, 0.34028235E39) = false +< (~0.123E~2, 0.17014117E39) = true +> (~0.123E~2, 0.17014117E39) = false +== (~0.123E~2, 0.17014117E39) = false +?= (~0.123E~2, 0.17014117E39) = false +< (~0.123E~2, 0.123E4) = true +> (~0.123E~2, 0.123E4) = false +== (~0.123E~2, 0.123E4) = false +?= (~0.123E~2, 0.123E4) = false +< (~0.123E~2, 0.123E2) = true +> (~0.123E~2, 0.123E2) = false +== (~0.123E~2, 0.123E2) = false +?= (~0.123E~2, 0.123E2) = false +< (~0.123E~2, 0.31415927E1) = true +> (~0.123E~2, 0.31415927E1) = false +== (~0.123E~2, 0.31415927E1) = false +?= (~0.123E~2, 0.31415927E1) = false +< (~0.123E~2, 0.27182817E1) = true +> (~0.123E~2, 0.27182817E1) = false +== (~0.123E~2, 0.27182817E1) = false +?= (~0.123E~2, 0.27182817E1) = false +< (~0.123E~2, 0.123E1) = true +> (~0.123E~2, 0.123E1) = false +== (~0.123E~2, 0.123E1) = false +?= (~0.123E~2, 0.123E1) = false +< (~0.123E~2, 0.123) = true +> (~0.123E~2, 0.123) = false +== (~0.123E~2, 0.123) = false +?= (~0.123E~2, 0.123) = false +< (~0.123E~2, 0.123E~2) = true +> (~0.123E~2, 0.123E~2) = false +== (~0.123E~2, 0.123E~2) = false +?= (~0.123E~2, 0.123E~2) = false +< (~0.123E~2, 0.11754944E~37) = true +> (~0.123E~2, 0.11754944E~37) = false +== (~0.123E~2, 0.11754944E~37) = false +?= (~0.123E~2, 0.11754944E~37) = false +< (~0.123E~2, 0.5877472E~38) = true +> (~0.123E~2, 0.5877472E~38) = false +== (~0.123E~2, 0.5877472E~38) = false +?= (~0.123E~2, 0.5877472E~38) = false +< (~0.123E~2, 0.1E~44) = true +> (~0.123E~2, 0.1E~44) = false +== (~0.123E~2, 0.1E~44) = false +?= (~0.123E~2, 0.1E~44) = false +< (~0.123E~2, 0.0) = true +> (~0.123E~2, 0.0) = false +== (~0.123E~2, 0.0) = false +?= (~0.123E~2, 0.0) = false +< (~0.123E~2, ~0.34028235E39) = false +> (~0.123E~2, ~0.34028235E39) = true +== (~0.123E~2, ~0.34028235E39) = false +?= (~0.123E~2, ~0.34028235E39) = false +< (~0.123E~2, ~0.17014117E39) = false +> (~0.123E~2, ~0.17014117E39) = true +== (~0.123E~2, ~0.17014117E39) = false +?= (~0.123E~2, ~0.17014117E39) = false +< (~0.123E~2, ~0.123E4) = false +> (~0.123E~2, ~0.123E4) = true +== (~0.123E~2, ~0.123E4) = false +?= (~0.123E~2, ~0.123E4) = false +< (~0.123E~2, ~0.123E2) = false +> (~0.123E~2, ~0.123E2) = true +== (~0.123E~2, ~0.123E2) = false +?= (~0.123E~2, ~0.123E2) = false +< (~0.123E~2, ~0.31415927E1) = false +> (~0.123E~2, ~0.31415927E1) = true +== (~0.123E~2, ~0.31415927E1) = false +?= (~0.123E~2, ~0.31415927E1) = false +< (~0.123E~2, ~0.27182817E1) = false +> (~0.123E~2, ~0.27182817E1) = true +== (~0.123E~2, ~0.27182817E1) = false +?= (~0.123E~2, ~0.27182817E1) = false +< (~0.123E~2, ~0.123E1) = false +> (~0.123E~2, ~0.123E1) = true +== (~0.123E~2, ~0.123E1) = false +?= (~0.123E~2, ~0.123E1) = false +< (~0.123E~2, ~0.123) = false +> (~0.123E~2, ~0.123) = true +== (~0.123E~2, ~0.123) = false +?= (~0.123E~2, ~0.123) = false +< (~0.123E~2, ~0.123E~2) = false +> (~0.123E~2, ~0.123E~2) = false +== (~0.123E~2, ~0.123E~2) = true +?= (~0.123E~2, ~0.123E~2) = true +< (~0.123E~2, ~0.11754944E~37) = true +> (~0.123E~2, ~0.11754944E~37) = false +== (~0.123E~2, ~0.11754944E~37) = false +?= (~0.123E~2, ~0.11754944E~37) = false +< (~0.123E~2, ~0.5877472E~38) = true +> (~0.123E~2, ~0.5877472E~38) = false +== (~0.123E~2, ~0.5877472E~38) = false +?= (~0.123E~2, ~0.5877472E~38) = false +< (~0.123E~2, ~0.1E~44) = true +> (~0.123E~2, ~0.1E~44) = false +== (~0.123E~2, ~0.1E~44) = false +?= (~0.123E~2, ~0.1E~44) = false +< (~0.123E~2, ~0.0) = true +> (~0.123E~2, ~0.0) = false +== (~0.123E~2, ~0.0) = false +?= (~0.123E~2, ~0.0) = false +< (~0.11754944E~37, 0.34028235E39) = true +> (~0.11754944E~37, 0.34028235E39) = false +== (~0.11754944E~37, 0.34028235E39) = false +?= (~0.11754944E~37, 0.34028235E39) = false +< (~0.11754944E~37, 0.17014117E39) = true +> (~0.11754944E~37, 0.17014117E39) = false +== (~0.11754944E~37, 0.17014117E39) = false +?= (~0.11754944E~37, 0.17014117E39) = false +< (~0.11754944E~37, 0.123E4) = true +> (~0.11754944E~37, 0.123E4) = false +== (~0.11754944E~37, 0.123E4) = false +?= (~0.11754944E~37, 0.123E4) = false +< (~0.11754944E~37, 0.123E2) = true +> (~0.11754944E~37, 0.123E2) = false +== (~0.11754944E~37, 0.123E2) = false +?= (~0.11754944E~37, 0.123E2) = false +< (~0.11754944E~37, 0.31415927E1) = true +> (~0.11754944E~37, 0.31415927E1) = false +== (~0.11754944E~37, 0.31415927E1) = false +?= (~0.11754944E~37, 0.31415927E1) = false +< (~0.11754944E~37, 0.27182817E1) = true +> (~0.11754944E~37, 0.27182817E1) = false +== (~0.11754944E~37, 0.27182817E1) = false +?= (~0.11754944E~37, 0.27182817E1) = false +< (~0.11754944E~37, 0.123E1) = true +> (~0.11754944E~37, 0.123E1) = false +== (~0.11754944E~37, 0.123E1) = false +?= (~0.11754944E~37, 0.123E1) = false +< (~0.11754944E~37, 0.123) = true +> (~0.11754944E~37, 0.123) = false +== (~0.11754944E~37, 0.123) = false +?= (~0.11754944E~37, 0.123) = false +< (~0.11754944E~37, 0.123E~2) = true +> (~0.11754944E~37, 0.123E~2) = false +== (~0.11754944E~37, 0.123E~2) = false +?= (~0.11754944E~37, 0.123E~2) = false +< (~0.11754944E~37, 0.11754944E~37) = true +> (~0.11754944E~37, 0.11754944E~37) = false +== (~0.11754944E~37, 0.11754944E~37) = false +?= (~0.11754944E~37, 0.11754944E~37) = false +< (~0.11754944E~37, 0.5877472E~38) = true +> (~0.11754944E~37, 0.5877472E~38) = false +== (~0.11754944E~37, 0.5877472E~38) = false +?= (~0.11754944E~37, 0.5877472E~38) = false +< (~0.11754944E~37, 0.1E~44) = true +> (~0.11754944E~37, 0.1E~44) = false +== (~0.11754944E~37, 0.1E~44) = false +?= (~0.11754944E~37, 0.1E~44) = false +< (~0.11754944E~37, 0.0) = true +> (~0.11754944E~37, 0.0) = false +== (~0.11754944E~37, 0.0) = false +?= (~0.11754944E~37, 0.0) = false +< (~0.11754944E~37, ~0.34028235E39) = false +> (~0.11754944E~37, ~0.34028235E39) = true +== (~0.11754944E~37, ~0.34028235E39) = false +?= (~0.11754944E~37, ~0.34028235E39) = false +< (~0.11754944E~37, ~0.17014117E39) = false +> (~0.11754944E~37, ~0.17014117E39) = true +== (~0.11754944E~37, ~0.17014117E39) = false +?= (~0.11754944E~37, ~0.17014117E39) = false +< (~0.11754944E~37, ~0.123E4) = false +> (~0.11754944E~37, ~0.123E4) = true +== (~0.11754944E~37, ~0.123E4) = false +?= (~0.11754944E~37, ~0.123E4) = false +< (~0.11754944E~37, ~0.123E2) = false +> (~0.11754944E~37, ~0.123E2) = true +== (~0.11754944E~37, ~0.123E2) = false +?= (~0.11754944E~37, ~0.123E2) = false +< (~0.11754944E~37, ~0.31415927E1) = false +> (~0.11754944E~37, ~0.31415927E1) = true +== (~0.11754944E~37, ~0.31415927E1) = false +?= (~0.11754944E~37, ~0.31415927E1) = false +< (~0.11754944E~37, ~0.27182817E1) = false +> (~0.11754944E~37, ~0.27182817E1) = true +== (~0.11754944E~37, ~0.27182817E1) = false +?= (~0.11754944E~37, ~0.27182817E1) = false +< (~0.11754944E~37, ~0.123E1) = false +> (~0.11754944E~37, ~0.123E1) = true +== (~0.11754944E~37, ~0.123E1) = false +?= (~0.11754944E~37, ~0.123E1) = false +< (~0.11754944E~37, ~0.123) = false +> (~0.11754944E~37, ~0.123) = true +== (~0.11754944E~37, ~0.123) = false +?= (~0.11754944E~37, ~0.123) = false +< (~0.11754944E~37, ~0.123E~2) = false +> (~0.11754944E~37, ~0.123E~2) = true +== (~0.11754944E~37, ~0.123E~2) = false +?= (~0.11754944E~37, ~0.123E~2) = false +< (~0.11754944E~37, ~0.11754944E~37) = false +> (~0.11754944E~37, ~0.11754944E~37) = false +== (~0.11754944E~37, ~0.11754944E~37) = true +?= (~0.11754944E~37, ~0.11754944E~37) = true +< (~0.11754944E~37, ~0.5877472E~38) = true +> (~0.11754944E~37, ~0.5877472E~38) = false +== (~0.11754944E~37, ~0.5877472E~38) = false +?= (~0.11754944E~37, ~0.5877472E~38) = false +< (~0.11754944E~37, ~0.1E~44) = true +> (~0.11754944E~37, ~0.1E~44) = false +== (~0.11754944E~37, ~0.1E~44) = false +?= (~0.11754944E~37, ~0.1E~44) = false +< (~0.11754944E~37, ~0.0) = true +> (~0.11754944E~37, ~0.0) = false +== (~0.11754944E~37, ~0.0) = false +?= (~0.11754944E~37, ~0.0) = false +< (~0.5877472E~38, 0.34028235E39) = true +> (~0.5877472E~38, 0.34028235E39) = false +== (~0.5877472E~38, 0.34028235E39) = false +?= (~0.5877472E~38, 0.34028235E39) = false +< (~0.5877472E~38, 0.17014117E39) = true +> (~0.5877472E~38, 0.17014117E39) = false +== (~0.5877472E~38, 0.17014117E39) = false +?= (~0.5877472E~38, 0.17014117E39) = false +< (~0.5877472E~38, 0.123E4) = true +> (~0.5877472E~38, 0.123E4) = false +== (~0.5877472E~38, 0.123E4) = false +?= (~0.5877472E~38, 0.123E4) = false +< (~0.5877472E~38, 0.123E2) = true +> (~0.5877472E~38, 0.123E2) = false +== (~0.5877472E~38, 0.123E2) = false +?= (~0.5877472E~38, 0.123E2) = false +< (~0.5877472E~38, 0.31415927E1) = true +> (~0.5877472E~38, 0.31415927E1) = false +== (~0.5877472E~38, 0.31415927E1) = false +?= (~0.5877472E~38, 0.31415927E1) = false +< (~0.5877472E~38, 0.27182817E1) = true +> (~0.5877472E~38, 0.27182817E1) = false +== (~0.5877472E~38, 0.27182817E1) = false +?= (~0.5877472E~38, 0.27182817E1) = false +< (~0.5877472E~38, 0.123E1) = true +> (~0.5877472E~38, 0.123E1) = false +== (~0.5877472E~38, 0.123E1) = false +?= (~0.5877472E~38, 0.123E1) = false +< (~0.5877472E~38, 0.123) = true +> (~0.5877472E~38, 0.123) = false +== (~0.5877472E~38, 0.123) = false +?= (~0.5877472E~38, 0.123) = false +< (~0.5877472E~38, 0.123E~2) = true +> (~0.5877472E~38, 0.123E~2) = false +== (~0.5877472E~38, 0.123E~2) = false +?= (~0.5877472E~38, 0.123E~2) = false +< (~0.5877472E~38, 0.11754944E~37) = true +> (~0.5877472E~38, 0.11754944E~37) = false +== (~0.5877472E~38, 0.11754944E~37) = false +?= (~0.5877472E~38, 0.11754944E~37) = false +< (~0.5877472E~38, 0.5877472E~38) = true +> (~0.5877472E~38, 0.5877472E~38) = false +== (~0.5877472E~38, 0.5877472E~38) = false +?= (~0.5877472E~38, 0.5877472E~38) = false +< (~0.5877472E~38, 0.1E~44) = true +> (~0.5877472E~38, 0.1E~44) = false +== (~0.5877472E~38, 0.1E~44) = false +?= (~0.5877472E~38, 0.1E~44) = false +< (~0.5877472E~38, 0.0) = true +> (~0.5877472E~38, 0.0) = false +== (~0.5877472E~38, 0.0) = false +?= (~0.5877472E~38, 0.0) = false +< (~0.5877472E~38, ~0.34028235E39) = false +> (~0.5877472E~38, ~0.34028235E39) = true +== (~0.5877472E~38, ~0.34028235E39) = false +?= (~0.5877472E~38, ~0.34028235E39) = false +< (~0.5877472E~38, ~0.17014117E39) = false +> (~0.5877472E~38, ~0.17014117E39) = true +== (~0.5877472E~38, ~0.17014117E39) = false +?= (~0.5877472E~38, ~0.17014117E39) = false +< (~0.5877472E~38, ~0.123E4) = false +> (~0.5877472E~38, ~0.123E4) = true +== (~0.5877472E~38, ~0.123E4) = false +?= (~0.5877472E~38, ~0.123E4) = false +< (~0.5877472E~38, ~0.123E2) = false +> (~0.5877472E~38, ~0.123E2) = true +== (~0.5877472E~38, ~0.123E2) = false +?= (~0.5877472E~38, ~0.123E2) = false +< (~0.5877472E~38, ~0.31415927E1) = false +> (~0.5877472E~38, ~0.31415927E1) = true +== (~0.5877472E~38, ~0.31415927E1) = false +?= (~0.5877472E~38, ~0.31415927E1) = false +< (~0.5877472E~38, ~0.27182817E1) = false +> (~0.5877472E~38, ~0.27182817E1) = true +== (~0.5877472E~38, ~0.27182817E1) = false +?= (~0.5877472E~38, ~0.27182817E1) = false +< (~0.5877472E~38, ~0.123E1) = false +> (~0.5877472E~38, ~0.123E1) = true +== (~0.5877472E~38, ~0.123E1) = false +?= (~0.5877472E~38, ~0.123E1) = false +< (~0.5877472E~38, ~0.123) = false +> (~0.5877472E~38, ~0.123) = true +== (~0.5877472E~38, ~0.123) = false +?= (~0.5877472E~38, ~0.123) = false +< (~0.5877472E~38, ~0.123E~2) = false +> (~0.5877472E~38, ~0.123E~2) = true +== (~0.5877472E~38, ~0.123E~2) = false +?= (~0.5877472E~38, ~0.123E~2) = false +< (~0.5877472E~38, ~0.11754944E~37) = false +> (~0.5877472E~38, ~0.11754944E~37) = true +== (~0.5877472E~38, ~0.11754944E~37) = false +?= (~0.5877472E~38, ~0.11754944E~37) = false +< (~0.5877472E~38, ~0.5877472E~38) = false +> (~0.5877472E~38, ~0.5877472E~38) = false +== (~0.5877472E~38, ~0.5877472E~38) = true +?= (~0.5877472E~38, ~0.5877472E~38) = true +< (~0.5877472E~38, ~0.1E~44) = true +> (~0.5877472E~38, ~0.1E~44) = false +== (~0.5877472E~38, ~0.1E~44) = false +?= (~0.5877472E~38, ~0.1E~44) = false +< (~0.5877472E~38, ~0.0) = true +> (~0.5877472E~38, ~0.0) = false +== (~0.5877472E~38, ~0.0) = false +?= (~0.5877472E~38, ~0.0) = false +< (~0.1E~44, 0.34028235E39) = true +> (~0.1E~44, 0.34028235E39) = false +== (~0.1E~44, 0.34028235E39) = false +?= (~0.1E~44, 0.34028235E39) = false +< (~0.1E~44, 0.17014117E39) = true +> (~0.1E~44, 0.17014117E39) = false +== (~0.1E~44, 0.17014117E39) = false +?= (~0.1E~44, 0.17014117E39) = false +< (~0.1E~44, 0.123E4) = true +> (~0.1E~44, 0.123E4) = false +== (~0.1E~44, 0.123E4) = false +?= (~0.1E~44, 0.123E4) = false +< (~0.1E~44, 0.123E2) = true +> (~0.1E~44, 0.123E2) = false +== (~0.1E~44, 0.123E2) = false +?= (~0.1E~44, 0.123E2) = false +< (~0.1E~44, 0.31415927E1) = true +> (~0.1E~44, 0.31415927E1) = false +== (~0.1E~44, 0.31415927E1) = false +?= (~0.1E~44, 0.31415927E1) = false +< (~0.1E~44, 0.27182817E1) = true +> (~0.1E~44, 0.27182817E1) = false +== (~0.1E~44, 0.27182817E1) = false +?= (~0.1E~44, 0.27182817E1) = false +< (~0.1E~44, 0.123E1) = true +> (~0.1E~44, 0.123E1) = false +== (~0.1E~44, 0.123E1) = false +?= (~0.1E~44, 0.123E1) = false +< (~0.1E~44, 0.123) = true +> (~0.1E~44, 0.123) = false +== (~0.1E~44, 0.123) = false +?= (~0.1E~44, 0.123) = false +< (~0.1E~44, 0.123E~2) = true +> (~0.1E~44, 0.123E~2) = false +== (~0.1E~44, 0.123E~2) = false +?= (~0.1E~44, 0.123E~2) = false +< (~0.1E~44, 0.11754944E~37) = true +> (~0.1E~44, 0.11754944E~37) = false +== (~0.1E~44, 0.11754944E~37) = false +?= (~0.1E~44, 0.11754944E~37) = false +< (~0.1E~44, 0.5877472E~38) = true +> (~0.1E~44, 0.5877472E~38) = false +== (~0.1E~44, 0.5877472E~38) = false +?= (~0.1E~44, 0.5877472E~38) = false +< (~0.1E~44, 0.1E~44) = true +> (~0.1E~44, 0.1E~44) = false +== (~0.1E~44, 0.1E~44) = false +?= (~0.1E~44, 0.1E~44) = false +< (~0.1E~44, 0.0) = true +> (~0.1E~44, 0.0) = false +== (~0.1E~44, 0.0) = false +?= (~0.1E~44, 0.0) = false +< (~0.1E~44, ~0.34028235E39) = false +> (~0.1E~44, ~0.34028235E39) = true +== (~0.1E~44, ~0.34028235E39) = false +?= (~0.1E~44, ~0.34028235E39) = false +< (~0.1E~44, ~0.17014117E39) = false +> (~0.1E~44, ~0.17014117E39) = true +== (~0.1E~44, ~0.17014117E39) = false +?= (~0.1E~44, ~0.17014117E39) = false +< (~0.1E~44, ~0.123E4) = false +> (~0.1E~44, ~0.123E4) = true +== (~0.1E~44, ~0.123E4) = false +?= (~0.1E~44, ~0.123E4) = false +< (~0.1E~44, ~0.123E2) = false +> (~0.1E~44, ~0.123E2) = true +== (~0.1E~44, ~0.123E2) = false +?= (~0.1E~44, ~0.123E2) = false +< (~0.1E~44, ~0.31415927E1) = false +> (~0.1E~44, ~0.31415927E1) = true +== (~0.1E~44, ~0.31415927E1) = false +?= (~0.1E~44, ~0.31415927E1) = false +< (~0.1E~44, ~0.27182817E1) = false +> (~0.1E~44, ~0.27182817E1) = true +== (~0.1E~44, ~0.27182817E1) = false +?= (~0.1E~44, ~0.27182817E1) = false +< (~0.1E~44, ~0.123E1) = false +> (~0.1E~44, ~0.123E1) = true +== (~0.1E~44, ~0.123E1) = false +?= (~0.1E~44, ~0.123E1) = false +< (~0.1E~44, ~0.123) = false +> (~0.1E~44, ~0.123) = true +== (~0.1E~44, ~0.123) = false +?= (~0.1E~44, ~0.123) = false +< (~0.1E~44, ~0.123E~2) = false +> (~0.1E~44, ~0.123E~2) = true +== (~0.1E~44, ~0.123E~2) = false +?= (~0.1E~44, ~0.123E~2) = false +< (~0.1E~44, ~0.11754944E~37) = false +> (~0.1E~44, ~0.11754944E~37) = true +== (~0.1E~44, ~0.11754944E~37) = false +?= (~0.1E~44, ~0.11754944E~37) = false +< (~0.1E~44, ~0.5877472E~38) = false +> (~0.1E~44, ~0.5877472E~38) = true +== (~0.1E~44, ~0.5877472E~38) = false +?= (~0.1E~44, ~0.5877472E~38) = false +< (~0.1E~44, ~0.1E~44) = false +> (~0.1E~44, ~0.1E~44) = false +== (~0.1E~44, ~0.1E~44) = true +?= (~0.1E~44, ~0.1E~44) = true +< (~0.1E~44, ~0.0) = true +> (~0.1E~44, ~0.0) = false +== (~0.1E~44, ~0.0) = false +?= (~0.1E~44, ~0.0) = false +< (~0.0, 0.34028235E39) = true +> (~0.0, 0.34028235E39) = false +== (~0.0, 0.34028235E39) = false +?= (~0.0, 0.34028235E39) = false +< (~0.0, 0.17014117E39) = true +> (~0.0, 0.17014117E39) = false +== (~0.0, 0.17014117E39) = false +?= (~0.0, 0.17014117E39) = false +< (~0.0, 0.123E4) = true +> (~0.0, 0.123E4) = false +== (~0.0, 0.123E4) = false +?= (~0.0, 0.123E4) = false +< (~0.0, 0.123E2) = true +> (~0.0, 0.123E2) = false +== (~0.0, 0.123E2) = false +?= (~0.0, 0.123E2) = false +< (~0.0, 0.31415927E1) = true +> (~0.0, 0.31415927E1) = false +== (~0.0, 0.31415927E1) = false +?= (~0.0, 0.31415927E1) = false +< (~0.0, 0.27182817E1) = true +> (~0.0, 0.27182817E1) = false +== (~0.0, 0.27182817E1) = false +?= (~0.0, 0.27182817E1) = false +< (~0.0, 0.123E1) = true +> (~0.0, 0.123E1) = false +== (~0.0, 0.123E1) = false +?= (~0.0, 0.123E1) = false +< (~0.0, 0.123) = true +> (~0.0, 0.123) = false +== (~0.0, 0.123) = false +?= (~0.0, 0.123) = false +< (~0.0, 0.123E~2) = true +> (~0.0, 0.123E~2) = false +== (~0.0, 0.123E~2) = false +?= (~0.0, 0.123E~2) = false +< (~0.0, 0.11754944E~37) = true +> (~0.0, 0.11754944E~37) = false +== (~0.0, 0.11754944E~37) = false +?= (~0.0, 0.11754944E~37) = false +< (~0.0, 0.5877472E~38) = true +> (~0.0, 0.5877472E~38) = false +== (~0.0, 0.5877472E~38) = false +?= (~0.0, 0.5877472E~38) = false +< (~0.0, 0.1E~44) = true +> (~0.0, 0.1E~44) = false +== (~0.0, 0.1E~44) = false +?= (~0.0, 0.1E~44) = false +< (~0.0, 0.0) = false +> (~0.0, 0.0) = false +== (~0.0, 0.0) = true +?= (~0.0, 0.0) = true +< (~0.0, ~0.34028235E39) = false +> (~0.0, ~0.34028235E39) = true +== (~0.0, ~0.34028235E39) = false +?= (~0.0, ~0.34028235E39) = false +< (~0.0, ~0.17014117E39) = false +> (~0.0, ~0.17014117E39) = true +== (~0.0, ~0.17014117E39) = false +?= (~0.0, ~0.17014117E39) = false +< (~0.0, ~0.123E4) = false +> (~0.0, ~0.123E4) = true +== (~0.0, ~0.123E4) = false +?= (~0.0, ~0.123E4) = false +< (~0.0, ~0.123E2) = false +> (~0.0, ~0.123E2) = true +== (~0.0, ~0.123E2) = false +?= (~0.0, ~0.123E2) = false +< (~0.0, ~0.31415927E1) = false +> (~0.0, ~0.31415927E1) = true +== (~0.0, ~0.31415927E1) = false +?= (~0.0, ~0.31415927E1) = false +< (~0.0, ~0.27182817E1) = false +> (~0.0, ~0.27182817E1) = true +== (~0.0, ~0.27182817E1) = false +?= (~0.0, ~0.27182817E1) = false +< (~0.0, ~0.123E1) = false +> (~0.0, ~0.123E1) = true +== (~0.0, ~0.123E1) = false +?= (~0.0, ~0.123E1) = false +< (~0.0, ~0.123) = false +> (~0.0, ~0.123) = true +== (~0.0, ~0.123) = false +?= (~0.0, ~0.123) = false +< (~0.0, ~0.123E~2) = false +> (~0.0, ~0.123E~2) = true +== (~0.0, ~0.123E~2) = false +?= (~0.0, ~0.123E~2) = false +< (~0.0, ~0.11754944E~37) = false +> (~0.0, ~0.11754944E~37) = true +== (~0.0, ~0.11754944E~37) = false +?= (~0.0, ~0.11754944E~37) = false +< (~0.0, ~0.5877472E~38) = false +> (~0.0, ~0.5877472E~38) = true +== (~0.0, ~0.5877472E~38) = false +?= (~0.0, ~0.5877472E~38) = false +< (~0.0, ~0.1E~44) = false +> (~0.0, ~0.1E~44) = true +== (~0.0, ~0.1E~44) = false +?= (~0.0, ~0.1E~44) = false +< (~0.0, ~0.0) = false +> (~0.0, ~0.0) = false +== (~0.0, ~0.0) = true +?= (~0.0, ~0.0) = true + +Testing compare, compareReal +compare (0.34028235E39, 0.34028235E39) = EQUAL +compareReal (0.34028235E39, 0.34028235E39) = EQUAL +compare (0.34028235E39, 0.17014117E39) = GREATER +compareReal (0.34028235E39, 0.17014117E39) = GREATER +compare (0.34028235E39, 0.123E4) = GREATER +compareReal (0.34028235E39, 0.123E4) = GREATER +compare (0.34028235E39, 0.123E2) = GREATER +compareReal (0.34028235E39, 0.123E2) = GREATER +compare (0.34028235E39, 0.31415927E1) = GREATER +compareReal (0.34028235E39, 0.31415927E1) = GREATER +compare (0.34028235E39, 0.27182817E1) = GREATER +compareReal (0.34028235E39, 0.27182817E1) = GREATER +compare (0.34028235E39, 0.123E1) = GREATER +compareReal (0.34028235E39, 0.123E1) = GREATER +compare (0.34028235E39, 0.123) = GREATER +compareReal (0.34028235E39, 0.123) = GREATER +compare (0.34028235E39, 0.123E~2) = GREATER +compareReal (0.34028235E39, 0.123E~2) = GREATER +compare (0.34028235E39, 0.11754944E~37) = GREATER +compareReal (0.34028235E39, 0.11754944E~37) = GREATER +compare (0.34028235E39, 0.5877472E~38) = GREATER +compareReal (0.34028235E39, 0.5877472E~38) = GREATER +compare (0.34028235E39, 0.1E~44) = GREATER +compareReal (0.34028235E39, 0.1E~44) = GREATER +compare (0.34028235E39, 0.0) = GREATER +compareReal (0.34028235E39, 0.0) = GREATER +compare (0.34028235E39, ~0.34028235E39) = GREATER +compareReal (0.34028235E39, ~0.34028235E39) = GREATER +compare (0.34028235E39, ~0.17014117E39) = GREATER +compareReal (0.34028235E39, ~0.17014117E39) = GREATER +compare (0.34028235E39, ~0.123E4) = GREATER +compareReal (0.34028235E39, ~0.123E4) = GREATER +compare (0.34028235E39, ~0.123E2) = GREATER +compareReal (0.34028235E39, ~0.123E2) = GREATER +compare (0.34028235E39, ~0.31415927E1) = GREATER +compareReal (0.34028235E39, ~0.31415927E1) = GREATER +compare (0.34028235E39, ~0.27182817E1) = GREATER +compareReal (0.34028235E39, ~0.27182817E1) = GREATER +compare (0.34028235E39, ~0.123E1) = GREATER +compareReal (0.34028235E39, ~0.123E1) = GREATER +compare (0.34028235E39, ~0.123) = GREATER +compareReal (0.34028235E39, ~0.123) = GREATER +compare (0.34028235E39, ~0.123E~2) = GREATER +compareReal (0.34028235E39, ~0.123E~2) = GREATER +compare (0.34028235E39, ~0.11754944E~37) = GREATER +compareReal (0.34028235E39, ~0.11754944E~37) = GREATER +compare (0.34028235E39, ~0.5877472E~38) = GREATER +compareReal (0.34028235E39, ~0.5877472E~38) = GREATER +compare (0.34028235E39, ~0.1E~44) = GREATER +compareReal (0.34028235E39, ~0.1E~44) = GREATER +compare (0.34028235E39, ~0.0) = GREATER +compareReal (0.34028235E39, ~0.0) = GREATER +compare (0.17014117E39, 0.34028235E39) = LESS +compareReal (0.17014117E39, 0.34028235E39) = LESS +compare (0.17014117E39, 0.17014117E39) = EQUAL +compareReal (0.17014117E39, 0.17014117E39) = EQUAL +compare (0.17014117E39, 0.123E4) = GREATER +compareReal (0.17014117E39, 0.123E4) = GREATER +compare (0.17014117E39, 0.123E2) = GREATER +compareReal (0.17014117E39, 0.123E2) = GREATER +compare (0.17014117E39, 0.31415927E1) = GREATER +compareReal (0.17014117E39, 0.31415927E1) = GREATER +compare (0.17014117E39, 0.27182817E1) = GREATER +compareReal (0.17014117E39, 0.27182817E1) = GREATER +compare (0.17014117E39, 0.123E1) = GREATER +compareReal (0.17014117E39, 0.123E1) = GREATER +compare (0.17014117E39, 0.123) = GREATER +compareReal (0.17014117E39, 0.123) = GREATER +compare (0.17014117E39, 0.123E~2) = GREATER +compareReal (0.17014117E39, 0.123E~2) = GREATER +compare (0.17014117E39, 0.11754944E~37) = GREATER +compareReal (0.17014117E39, 0.11754944E~37) = GREATER +compare (0.17014117E39, 0.5877472E~38) = GREATER +compareReal (0.17014117E39, 0.5877472E~38) = GREATER +compare (0.17014117E39, 0.1E~44) = GREATER +compareReal (0.17014117E39, 0.1E~44) = GREATER +compare (0.17014117E39, 0.0) = GREATER +compareReal (0.17014117E39, 0.0) = GREATER +compare (0.17014117E39, ~0.34028235E39) = GREATER +compareReal (0.17014117E39, ~0.34028235E39) = GREATER +compare (0.17014117E39, ~0.17014117E39) = GREATER +compareReal (0.17014117E39, ~0.17014117E39) = GREATER +compare (0.17014117E39, ~0.123E4) = GREATER +compareReal (0.17014117E39, ~0.123E4) = GREATER +compare (0.17014117E39, ~0.123E2) = GREATER +compareReal (0.17014117E39, ~0.123E2) = GREATER +compare (0.17014117E39, ~0.31415927E1) = GREATER +compareReal (0.17014117E39, ~0.31415927E1) = GREATER +compare (0.17014117E39, ~0.27182817E1) = GREATER +compareReal (0.17014117E39, ~0.27182817E1) = GREATER +compare (0.17014117E39, ~0.123E1) = GREATER +compareReal (0.17014117E39, ~0.123E1) = GREATER +compare (0.17014117E39, ~0.123) = GREATER +compareReal (0.17014117E39, ~0.123) = GREATER +compare (0.17014117E39, ~0.123E~2) = GREATER +compareReal (0.17014117E39, ~0.123E~2) = GREATER +compare (0.17014117E39, ~0.11754944E~37) = GREATER +compareReal (0.17014117E39, ~0.11754944E~37) = GREATER +compare (0.17014117E39, ~0.5877472E~38) = GREATER +compareReal (0.17014117E39, ~0.5877472E~38) = GREATER +compare (0.17014117E39, ~0.1E~44) = GREATER +compareReal (0.17014117E39, ~0.1E~44) = GREATER +compare (0.17014117E39, ~0.0) = GREATER +compareReal (0.17014117E39, ~0.0) = GREATER +compare (0.123E4, 0.34028235E39) = LESS +compareReal (0.123E4, 0.34028235E39) = LESS +compare (0.123E4, 0.17014117E39) = LESS +compareReal (0.123E4, 0.17014117E39) = LESS +compare (0.123E4, 0.123E4) = EQUAL +compareReal (0.123E4, 0.123E4) = EQUAL +compare (0.123E4, 0.123E2) = GREATER +compareReal (0.123E4, 0.123E2) = GREATER +compare (0.123E4, 0.31415927E1) = GREATER +compareReal (0.123E4, 0.31415927E1) = GREATER +compare (0.123E4, 0.27182817E1) = GREATER +compareReal (0.123E4, 0.27182817E1) = GREATER +compare (0.123E4, 0.123E1) = GREATER +compareReal (0.123E4, 0.123E1) = GREATER +compare (0.123E4, 0.123) = GREATER +compareReal (0.123E4, 0.123) = GREATER +compare (0.123E4, 0.123E~2) = GREATER +compareReal (0.123E4, 0.123E~2) = GREATER +compare (0.123E4, 0.11754944E~37) = GREATER +compareReal (0.123E4, 0.11754944E~37) = GREATER +compare (0.123E4, 0.5877472E~38) = GREATER +compareReal (0.123E4, 0.5877472E~38) = GREATER +compare (0.123E4, 0.1E~44) = GREATER +compareReal (0.123E4, 0.1E~44) = GREATER +compare (0.123E4, 0.0) = GREATER +compareReal (0.123E4, 0.0) = GREATER +compare (0.123E4, ~0.34028235E39) = GREATER +compareReal (0.123E4, ~0.34028235E39) = GREATER +compare (0.123E4, ~0.17014117E39) = GREATER +compareReal (0.123E4, ~0.17014117E39) = GREATER +compare (0.123E4, ~0.123E4) = GREATER +compareReal (0.123E4, ~0.123E4) = GREATER +compare (0.123E4, ~0.123E2) = GREATER +compareReal (0.123E4, ~0.123E2) = GREATER +compare (0.123E4, ~0.31415927E1) = GREATER +compareReal (0.123E4, ~0.31415927E1) = GREATER +compare (0.123E4, ~0.27182817E1) = GREATER +compareReal (0.123E4, ~0.27182817E1) = GREATER +compare (0.123E4, ~0.123E1) = GREATER +compareReal (0.123E4, ~0.123E1) = GREATER +compare (0.123E4, ~0.123) = GREATER +compareReal (0.123E4, ~0.123) = GREATER +compare (0.123E4, ~0.123E~2) = GREATER +compareReal (0.123E4, ~0.123E~2) = GREATER +compare (0.123E4, ~0.11754944E~37) = GREATER +compareReal (0.123E4, ~0.11754944E~37) = GREATER +compare (0.123E4, ~0.5877472E~38) = GREATER +compareReal (0.123E4, ~0.5877472E~38) = GREATER +compare (0.123E4, ~0.1E~44) = GREATER +compareReal (0.123E4, ~0.1E~44) = GREATER +compare (0.123E4, ~0.0) = GREATER +compareReal (0.123E4, ~0.0) = GREATER +compare (0.123E2, 0.34028235E39) = LESS +compareReal (0.123E2, 0.34028235E39) = LESS +compare (0.123E2, 0.17014117E39) = LESS +compareReal (0.123E2, 0.17014117E39) = LESS +compare (0.123E2, 0.123E4) = LESS +compareReal (0.123E2, 0.123E4) = LESS +compare (0.123E2, 0.123E2) = EQUAL +compareReal (0.123E2, 0.123E2) = EQUAL +compare (0.123E2, 0.31415927E1) = GREATER +compareReal (0.123E2, 0.31415927E1) = GREATER +compare (0.123E2, 0.27182817E1) = GREATER +compareReal (0.123E2, 0.27182817E1) = GREATER +compare (0.123E2, 0.123E1) = GREATER +compareReal (0.123E2, 0.123E1) = GREATER +compare (0.123E2, 0.123) = GREATER +compareReal (0.123E2, 0.123) = GREATER +compare (0.123E2, 0.123E~2) = GREATER +compareReal (0.123E2, 0.123E~2) = GREATER +compare (0.123E2, 0.11754944E~37) = GREATER +compareReal (0.123E2, 0.11754944E~37) = GREATER +compare (0.123E2, 0.5877472E~38) = GREATER +compareReal (0.123E2, 0.5877472E~38) = GREATER +compare (0.123E2, 0.1E~44) = GREATER +compareReal (0.123E2, 0.1E~44) = GREATER +compare (0.123E2, 0.0) = GREATER +compareReal (0.123E2, 0.0) = GREATER +compare (0.123E2, ~0.34028235E39) = GREATER +compareReal (0.123E2, ~0.34028235E39) = GREATER +compare (0.123E2, ~0.17014117E39) = GREATER +compareReal (0.123E2, ~0.17014117E39) = GREATER +compare (0.123E2, ~0.123E4) = GREATER +compareReal (0.123E2, ~0.123E4) = GREATER +compare (0.123E2, ~0.123E2) = GREATER +compareReal (0.123E2, ~0.123E2) = GREATER +compare (0.123E2, ~0.31415927E1) = GREATER +compareReal (0.123E2, ~0.31415927E1) = GREATER +compare (0.123E2, ~0.27182817E1) = GREATER +compareReal (0.123E2, ~0.27182817E1) = GREATER +compare (0.123E2, ~0.123E1) = GREATER +compareReal (0.123E2, ~0.123E1) = GREATER +compare (0.123E2, ~0.123) = GREATER +compareReal (0.123E2, ~0.123) = GREATER +compare (0.123E2, ~0.123E~2) = GREATER +compareReal (0.123E2, ~0.123E~2) = GREATER +compare (0.123E2, ~0.11754944E~37) = GREATER +compareReal (0.123E2, ~0.11754944E~37) = GREATER +compare (0.123E2, ~0.5877472E~38) = GREATER +compareReal (0.123E2, ~0.5877472E~38) = GREATER +compare (0.123E2, ~0.1E~44) = GREATER +compareReal (0.123E2, ~0.1E~44) = GREATER +compare (0.123E2, ~0.0) = GREATER +compareReal (0.123E2, ~0.0) = GREATER +compare (0.31415927E1, 0.34028235E39) = LESS +compareReal (0.31415927E1, 0.34028235E39) = LESS +compare (0.31415927E1, 0.17014117E39) = LESS +compareReal (0.31415927E1, 0.17014117E39) = LESS +compare (0.31415927E1, 0.123E4) = LESS +compareReal (0.31415927E1, 0.123E4) = LESS +compare (0.31415927E1, 0.123E2) = LESS +compareReal (0.31415927E1, 0.123E2) = LESS +compare (0.31415927E1, 0.31415927E1) = EQUAL +compareReal (0.31415927E1, 0.31415927E1) = EQUAL +compare (0.31415927E1, 0.27182817E1) = GREATER +compareReal (0.31415927E1, 0.27182817E1) = GREATER +compare (0.31415927E1, 0.123E1) = GREATER +compareReal (0.31415927E1, 0.123E1) = GREATER +compare (0.31415927E1, 0.123) = GREATER +compareReal (0.31415927E1, 0.123) = GREATER +compare (0.31415927E1, 0.123E~2) = GREATER +compareReal (0.31415927E1, 0.123E~2) = GREATER +compare (0.31415927E1, 0.11754944E~37) = GREATER +compareReal (0.31415927E1, 0.11754944E~37) = GREATER +compare (0.31415927E1, 0.5877472E~38) = GREATER +compareReal (0.31415927E1, 0.5877472E~38) = GREATER +compare (0.31415927E1, 0.1E~44) = GREATER +compareReal (0.31415927E1, 0.1E~44) = GREATER +compare (0.31415927E1, 0.0) = GREATER +compareReal (0.31415927E1, 0.0) = GREATER +compare (0.31415927E1, ~0.34028235E39) = GREATER +compareReal (0.31415927E1, ~0.34028235E39) = GREATER +compare (0.31415927E1, ~0.17014117E39) = GREATER +compareReal (0.31415927E1, ~0.17014117E39) = GREATER +compare (0.31415927E1, ~0.123E4) = GREATER +compareReal (0.31415927E1, ~0.123E4) = GREATER +compare (0.31415927E1, ~0.123E2) = GREATER +compareReal (0.31415927E1, ~0.123E2) = GREATER +compare (0.31415927E1, ~0.31415927E1) = GREATER +compareReal (0.31415927E1, ~0.31415927E1) = GREATER +compare (0.31415927E1, ~0.27182817E1) = GREATER +compareReal (0.31415927E1, ~0.27182817E1) = GREATER +compare (0.31415927E1, ~0.123E1) = GREATER +compareReal (0.31415927E1, ~0.123E1) = GREATER +compare (0.31415927E1, ~0.123) = GREATER +compareReal (0.31415927E1, ~0.123) = GREATER +compare (0.31415927E1, ~0.123E~2) = GREATER +compareReal (0.31415927E1, ~0.123E~2) = GREATER +compare (0.31415927E1, ~0.11754944E~37) = GREATER +compareReal (0.31415927E1, ~0.11754944E~37) = GREATER +compare (0.31415927E1, ~0.5877472E~38) = GREATER +compareReal (0.31415927E1, ~0.5877472E~38) = GREATER +compare (0.31415927E1, ~0.1E~44) = GREATER +compareReal (0.31415927E1, ~0.1E~44) = GREATER +compare (0.31415927E1, ~0.0) = GREATER +compareReal (0.31415927E1, ~0.0) = GREATER +compare (0.27182817E1, 0.34028235E39) = LESS +compareReal (0.27182817E1, 0.34028235E39) = LESS +compare (0.27182817E1, 0.17014117E39) = LESS +compareReal (0.27182817E1, 0.17014117E39) = LESS +compare (0.27182817E1, 0.123E4) = LESS +compareReal (0.27182817E1, 0.123E4) = LESS +compare (0.27182817E1, 0.123E2) = LESS +compareReal (0.27182817E1, 0.123E2) = LESS +compare (0.27182817E1, 0.31415927E1) = LESS +compareReal (0.27182817E1, 0.31415927E1) = LESS +compare (0.27182817E1, 0.27182817E1) = EQUAL +compareReal (0.27182817E1, 0.27182817E1) = EQUAL +compare (0.27182817E1, 0.123E1) = GREATER +compareReal (0.27182817E1, 0.123E1) = GREATER +compare (0.27182817E1, 0.123) = GREATER +compareReal (0.27182817E1, 0.123) = GREATER +compare (0.27182817E1, 0.123E~2) = GREATER +compareReal (0.27182817E1, 0.123E~2) = GREATER +compare (0.27182817E1, 0.11754944E~37) = GREATER +compareReal (0.27182817E1, 0.11754944E~37) = GREATER +compare (0.27182817E1, 0.5877472E~38) = GREATER +compareReal (0.27182817E1, 0.5877472E~38) = GREATER +compare (0.27182817E1, 0.1E~44) = GREATER +compareReal (0.27182817E1, 0.1E~44) = GREATER +compare (0.27182817E1, 0.0) = GREATER +compareReal (0.27182817E1, 0.0) = GREATER +compare (0.27182817E1, ~0.34028235E39) = GREATER +compareReal (0.27182817E1, ~0.34028235E39) = GREATER +compare (0.27182817E1, ~0.17014117E39) = GREATER +compareReal (0.27182817E1, ~0.17014117E39) = GREATER +compare (0.27182817E1, ~0.123E4) = GREATER +compareReal (0.27182817E1, ~0.123E4) = GREATER +compare (0.27182817E1, ~0.123E2) = GREATER +compareReal (0.27182817E1, ~0.123E2) = GREATER +compare (0.27182817E1, ~0.31415927E1) = GREATER +compareReal (0.27182817E1, ~0.31415927E1) = GREATER +compare (0.27182817E1, ~0.27182817E1) = GREATER +compareReal (0.27182817E1, ~0.27182817E1) = GREATER +compare (0.27182817E1, ~0.123E1) = GREATER +compareReal (0.27182817E1, ~0.123E1) = GREATER +compare (0.27182817E1, ~0.123) = GREATER +compareReal (0.27182817E1, ~0.123) = GREATER +compare (0.27182817E1, ~0.123E~2) = GREATER +compareReal (0.27182817E1, ~0.123E~2) = GREATER +compare (0.27182817E1, ~0.11754944E~37) = GREATER +compareReal (0.27182817E1, ~0.11754944E~37) = GREATER +compare (0.27182817E1, ~0.5877472E~38) = GREATER +compareReal (0.27182817E1, ~0.5877472E~38) = GREATER +compare (0.27182817E1, ~0.1E~44) = GREATER +compareReal (0.27182817E1, ~0.1E~44) = GREATER +compare (0.27182817E1, ~0.0) = GREATER +compareReal (0.27182817E1, ~0.0) = GREATER +compare (0.123E1, 0.34028235E39) = LESS +compareReal (0.123E1, 0.34028235E39) = LESS +compare (0.123E1, 0.17014117E39) = LESS +compareReal (0.123E1, 0.17014117E39) = LESS +compare (0.123E1, 0.123E4) = LESS +compareReal (0.123E1, 0.123E4) = LESS +compare (0.123E1, 0.123E2) = LESS +compareReal (0.123E1, 0.123E2) = LESS +compare (0.123E1, 0.31415927E1) = LESS +compareReal (0.123E1, 0.31415927E1) = LESS +compare (0.123E1, 0.27182817E1) = LESS +compareReal (0.123E1, 0.27182817E1) = LESS +compare (0.123E1, 0.123E1) = EQUAL +compareReal (0.123E1, 0.123E1) = EQUAL +compare (0.123E1, 0.123) = GREATER +compareReal (0.123E1, 0.123) = GREATER +compare (0.123E1, 0.123E~2) = GREATER +compareReal (0.123E1, 0.123E~2) = GREATER +compare (0.123E1, 0.11754944E~37) = GREATER +compareReal (0.123E1, 0.11754944E~37) = GREATER +compare (0.123E1, 0.5877472E~38) = GREATER +compareReal (0.123E1, 0.5877472E~38) = GREATER +compare (0.123E1, 0.1E~44) = GREATER +compareReal (0.123E1, 0.1E~44) = GREATER +compare (0.123E1, 0.0) = GREATER +compareReal (0.123E1, 0.0) = GREATER +compare (0.123E1, ~0.34028235E39) = GREATER +compareReal (0.123E1, ~0.34028235E39) = GREATER +compare (0.123E1, ~0.17014117E39) = GREATER +compareReal (0.123E1, ~0.17014117E39) = GREATER +compare (0.123E1, ~0.123E4) = GREATER +compareReal (0.123E1, ~0.123E4) = GREATER +compare (0.123E1, ~0.123E2) = GREATER +compareReal (0.123E1, ~0.123E2) = GREATER +compare (0.123E1, ~0.31415927E1) = GREATER +compareReal (0.123E1, ~0.31415927E1) = GREATER +compare (0.123E1, ~0.27182817E1) = GREATER +compareReal (0.123E1, ~0.27182817E1) = GREATER +compare (0.123E1, ~0.123E1) = GREATER +compareReal (0.123E1, ~0.123E1) = GREATER +compare (0.123E1, ~0.123) = GREATER +compareReal (0.123E1, ~0.123) = GREATER +compare (0.123E1, ~0.123E~2) = GREATER +compareReal (0.123E1, ~0.123E~2) = GREATER +compare (0.123E1, ~0.11754944E~37) = GREATER +compareReal (0.123E1, ~0.11754944E~37) = GREATER +compare (0.123E1, ~0.5877472E~38) = GREATER +compareReal (0.123E1, ~0.5877472E~38) = GREATER +compare (0.123E1, ~0.1E~44) = GREATER +compareReal (0.123E1, ~0.1E~44) = GREATER +compare (0.123E1, ~0.0) = GREATER +compareReal (0.123E1, ~0.0) = GREATER +compare (0.123, 0.34028235E39) = LESS +compareReal (0.123, 0.34028235E39) = LESS +compare (0.123, 0.17014117E39) = LESS +compareReal (0.123, 0.17014117E39) = LESS +compare (0.123, 0.123E4) = LESS +compareReal (0.123, 0.123E4) = LESS +compare (0.123, 0.123E2) = LESS +compareReal (0.123, 0.123E2) = LESS +compare (0.123, 0.31415927E1) = LESS +compareReal (0.123, 0.31415927E1) = LESS +compare (0.123, 0.27182817E1) = LESS +compareReal (0.123, 0.27182817E1) = LESS +compare (0.123, 0.123E1) = LESS +compareReal (0.123, 0.123E1) = LESS +compare (0.123, 0.123) = EQUAL +compareReal (0.123, 0.123) = EQUAL +compare (0.123, 0.123E~2) = GREATER +compareReal (0.123, 0.123E~2) = GREATER +compare (0.123, 0.11754944E~37) = GREATER +compareReal (0.123, 0.11754944E~37) = GREATER +compare (0.123, 0.5877472E~38) = GREATER +compareReal (0.123, 0.5877472E~38) = GREATER +compare (0.123, 0.1E~44) = GREATER +compareReal (0.123, 0.1E~44) = GREATER +compare (0.123, 0.0) = GREATER +compareReal (0.123, 0.0) = GREATER +compare (0.123, ~0.34028235E39) = GREATER +compareReal (0.123, ~0.34028235E39) = GREATER +compare (0.123, ~0.17014117E39) = GREATER +compareReal (0.123, ~0.17014117E39) = GREATER +compare (0.123, ~0.123E4) = GREATER +compareReal (0.123, ~0.123E4) = GREATER +compare (0.123, ~0.123E2) = GREATER +compareReal (0.123, ~0.123E2) = GREATER +compare (0.123, ~0.31415927E1) = GREATER +compareReal (0.123, ~0.31415927E1) = GREATER +compare (0.123, ~0.27182817E1) = GREATER +compareReal (0.123, ~0.27182817E1) = GREATER +compare (0.123, ~0.123E1) = GREATER +compareReal (0.123, ~0.123E1) = GREATER +compare (0.123, ~0.123) = GREATER +compareReal (0.123, ~0.123) = GREATER +compare (0.123, ~0.123E~2) = GREATER +compareReal (0.123, ~0.123E~2) = GREATER +compare (0.123, ~0.11754944E~37) = GREATER +compareReal (0.123, ~0.11754944E~37) = GREATER +compare (0.123, ~0.5877472E~38) = GREATER +compareReal (0.123, ~0.5877472E~38) = GREATER +compare (0.123, ~0.1E~44) = GREATER +compareReal (0.123, ~0.1E~44) = GREATER +compare (0.123, ~0.0) = GREATER +compareReal (0.123, ~0.0) = GREATER +compare (0.123E~2, 0.34028235E39) = LESS +compareReal (0.123E~2, 0.34028235E39) = LESS +compare (0.123E~2, 0.17014117E39) = LESS +compareReal (0.123E~2, 0.17014117E39) = LESS +compare (0.123E~2, 0.123E4) = LESS +compareReal (0.123E~2, 0.123E4) = LESS +compare (0.123E~2, 0.123E2) = LESS +compareReal (0.123E~2, 0.123E2) = LESS +compare (0.123E~2, 0.31415927E1) = LESS +compareReal (0.123E~2, 0.31415927E1) = LESS +compare (0.123E~2, 0.27182817E1) = LESS +compareReal (0.123E~2, 0.27182817E1) = LESS +compare (0.123E~2, 0.123E1) = LESS +compareReal (0.123E~2, 0.123E1) = LESS +compare (0.123E~2, 0.123) = LESS +compareReal (0.123E~2, 0.123) = LESS +compare (0.123E~2, 0.123E~2) = EQUAL +compareReal (0.123E~2, 0.123E~2) = EQUAL +compare (0.123E~2, 0.11754944E~37) = GREATER +compareReal (0.123E~2, 0.11754944E~37) = GREATER +compare (0.123E~2, 0.5877472E~38) = GREATER +compareReal (0.123E~2, 0.5877472E~38) = GREATER +compare (0.123E~2, 0.1E~44) = GREATER +compareReal (0.123E~2, 0.1E~44) = GREATER +compare (0.123E~2, 0.0) = GREATER +compareReal (0.123E~2, 0.0) = GREATER +compare (0.123E~2, ~0.34028235E39) = GREATER +compareReal (0.123E~2, ~0.34028235E39) = GREATER +compare (0.123E~2, ~0.17014117E39) = GREATER +compareReal (0.123E~2, ~0.17014117E39) = GREATER +compare (0.123E~2, ~0.123E4) = GREATER +compareReal (0.123E~2, ~0.123E4) = GREATER +compare (0.123E~2, ~0.123E2) = GREATER +compareReal (0.123E~2, ~0.123E2) = GREATER +compare (0.123E~2, ~0.31415927E1) = GREATER +compareReal (0.123E~2, ~0.31415927E1) = GREATER +compare (0.123E~2, ~0.27182817E1) = GREATER +compareReal (0.123E~2, ~0.27182817E1) = GREATER +compare (0.123E~2, ~0.123E1) = GREATER +compareReal (0.123E~2, ~0.123E1) = GREATER +compare (0.123E~2, ~0.123) = GREATER +compareReal (0.123E~2, ~0.123) = GREATER +compare (0.123E~2, ~0.123E~2) = GREATER +compareReal (0.123E~2, ~0.123E~2) = GREATER +compare (0.123E~2, ~0.11754944E~37) = GREATER +compareReal (0.123E~2, ~0.11754944E~37) = GREATER +compare (0.123E~2, ~0.5877472E~38) = GREATER +compareReal (0.123E~2, ~0.5877472E~38) = GREATER +compare (0.123E~2, ~0.1E~44) = GREATER +compareReal (0.123E~2, ~0.1E~44) = GREATER +compare (0.123E~2, ~0.0) = GREATER +compareReal (0.123E~2, ~0.0) = GREATER +compare (0.11754944E~37, 0.34028235E39) = LESS +compareReal (0.11754944E~37, 0.34028235E39) = LESS +compare (0.11754944E~37, 0.17014117E39) = LESS +compareReal (0.11754944E~37, 0.17014117E39) = LESS +compare (0.11754944E~37, 0.123E4) = LESS +compareReal (0.11754944E~37, 0.123E4) = LESS +compare (0.11754944E~37, 0.123E2) = LESS +compareReal (0.11754944E~37, 0.123E2) = LESS +compare (0.11754944E~37, 0.31415927E1) = LESS +compareReal (0.11754944E~37, 0.31415927E1) = LESS +compare (0.11754944E~37, 0.27182817E1) = LESS +compareReal (0.11754944E~37, 0.27182817E1) = LESS +compare (0.11754944E~37, 0.123E1) = LESS +compareReal (0.11754944E~37, 0.123E1) = LESS +compare (0.11754944E~37, 0.123) = LESS +compareReal (0.11754944E~37, 0.123) = LESS +compare (0.11754944E~37, 0.123E~2) = LESS +compareReal (0.11754944E~37, 0.123E~2) = LESS +compare (0.11754944E~37, 0.11754944E~37) = EQUAL +compareReal (0.11754944E~37, 0.11754944E~37) = EQUAL +compare (0.11754944E~37, 0.5877472E~38) = GREATER +compareReal (0.11754944E~37, 0.5877472E~38) = GREATER +compare (0.11754944E~37, 0.1E~44) = GREATER +compareReal (0.11754944E~37, 0.1E~44) = GREATER +compare (0.11754944E~37, 0.0) = GREATER +compareReal (0.11754944E~37, 0.0) = GREATER +compare (0.11754944E~37, ~0.34028235E39) = GREATER +compareReal (0.11754944E~37, ~0.34028235E39) = GREATER +compare (0.11754944E~37, ~0.17014117E39) = GREATER +compareReal (0.11754944E~37, ~0.17014117E39) = GREATER +compare (0.11754944E~37, ~0.123E4) = GREATER +compareReal (0.11754944E~37, ~0.123E4) = GREATER +compare (0.11754944E~37, ~0.123E2) = GREATER +compareReal (0.11754944E~37, ~0.123E2) = GREATER +compare (0.11754944E~37, ~0.31415927E1) = GREATER +compareReal (0.11754944E~37, ~0.31415927E1) = GREATER +compare (0.11754944E~37, ~0.27182817E1) = GREATER +compareReal (0.11754944E~37, ~0.27182817E1) = GREATER +compare (0.11754944E~37, ~0.123E1) = GREATER +compareReal (0.11754944E~37, ~0.123E1) = GREATER +compare (0.11754944E~37, ~0.123) = GREATER +compareReal (0.11754944E~37, ~0.123) = GREATER +compare (0.11754944E~37, ~0.123E~2) = GREATER +compareReal (0.11754944E~37, ~0.123E~2) = GREATER +compare (0.11754944E~37, ~0.11754944E~37) = GREATER +compareReal (0.11754944E~37, ~0.11754944E~37) = GREATER +compare (0.11754944E~37, ~0.5877472E~38) = GREATER +compareReal (0.11754944E~37, ~0.5877472E~38) = GREATER +compare (0.11754944E~37, ~0.1E~44) = GREATER +compareReal (0.11754944E~37, ~0.1E~44) = GREATER +compare (0.11754944E~37, ~0.0) = GREATER +compareReal (0.11754944E~37, ~0.0) = GREATER +compare (0.5877472E~38, 0.34028235E39) = LESS +compareReal (0.5877472E~38, 0.34028235E39) = LESS +compare (0.5877472E~38, 0.17014117E39) = LESS +compareReal (0.5877472E~38, 0.17014117E39) = LESS +compare (0.5877472E~38, 0.123E4) = LESS +compareReal (0.5877472E~38, 0.123E4) = LESS +compare (0.5877472E~38, 0.123E2) = LESS +compareReal (0.5877472E~38, 0.123E2) = LESS +compare (0.5877472E~38, 0.31415927E1) = LESS +compareReal (0.5877472E~38, 0.31415927E1) = LESS +compare (0.5877472E~38, 0.27182817E1) = LESS +compareReal (0.5877472E~38, 0.27182817E1) = LESS +compare (0.5877472E~38, 0.123E1) = LESS +compareReal (0.5877472E~38, 0.123E1) = LESS +compare (0.5877472E~38, 0.123) = LESS +compareReal (0.5877472E~38, 0.123) = LESS +compare (0.5877472E~38, 0.123E~2) = LESS +compareReal (0.5877472E~38, 0.123E~2) = LESS +compare (0.5877472E~38, 0.11754944E~37) = LESS +compareReal (0.5877472E~38, 0.11754944E~37) = LESS +compare (0.5877472E~38, 0.5877472E~38) = EQUAL +compareReal (0.5877472E~38, 0.5877472E~38) = EQUAL +compare (0.5877472E~38, 0.1E~44) = GREATER +compareReal (0.5877472E~38, 0.1E~44) = GREATER +compare (0.5877472E~38, 0.0) = GREATER +compareReal (0.5877472E~38, 0.0) = GREATER +compare (0.5877472E~38, ~0.34028235E39) = GREATER +compareReal (0.5877472E~38, ~0.34028235E39) = GREATER +compare (0.5877472E~38, ~0.17014117E39) = GREATER +compareReal (0.5877472E~38, ~0.17014117E39) = GREATER +compare (0.5877472E~38, ~0.123E4) = GREATER +compareReal (0.5877472E~38, ~0.123E4) = GREATER +compare (0.5877472E~38, ~0.123E2) = GREATER +compareReal (0.5877472E~38, ~0.123E2) = GREATER +compare (0.5877472E~38, ~0.31415927E1) = GREATER +compareReal (0.5877472E~38, ~0.31415927E1) = GREATER +compare (0.5877472E~38, ~0.27182817E1) = GREATER +compareReal (0.5877472E~38, ~0.27182817E1) = GREATER +compare (0.5877472E~38, ~0.123E1) = GREATER +compareReal (0.5877472E~38, ~0.123E1) = GREATER +compare (0.5877472E~38, ~0.123) = GREATER +compareReal (0.5877472E~38, ~0.123) = GREATER +compare (0.5877472E~38, ~0.123E~2) = GREATER +compareReal (0.5877472E~38, ~0.123E~2) = GREATER +compare (0.5877472E~38, ~0.11754944E~37) = GREATER +compareReal (0.5877472E~38, ~0.11754944E~37) = GREATER +compare (0.5877472E~38, ~0.5877472E~38) = GREATER +compareReal (0.5877472E~38, ~0.5877472E~38) = GREATER +compare (0.5877472E~38, ~0.1E~44) = GREATER +compareReal (0.5877472E~38, ~0.1E~44) = GREATER +compare (0.5877472E~38, ~0.0) = GREATER +compareReal (0.5877472E~38, ~0.0) = GREATER +compare (0.1E~44, 0.34028235E39) = LESS +compareReal (0.1E~44, 0.34028235E39) = LESS +compare (0.1E~44, 0.17014117E39) = LESS +compareReal (0.1E~44, 0.17014117E39) = LESS +compare (0.1E~44, 0.123E4) = LESS +compareReal (0.1E~44, 0.123E4) = LESS +compare (0.1E~44, 0.123E2) = LESS +compareReal (0.1E~44, 0.123E2) = LESS +compare (0.1E~44, 0.31415927E1) = LESS +compareReal (0.1E~44, 0.31415927E1) = LESS +compare (0.1E~44, 0.27182817E1) = LESS +compareReal (0.1E~44, 0.27182817E1) = LESS +compare (0.1E~44, 0.123E1) = LESS +compareReal (0.1E~44, 0.123E1) = LESS +compare (0.1E~44, 0.123) = LESS +compareReal (0.1E~44, 0.123) = LESS +compare (0.1E~44, 0.123E~2) = LESS +compareReal (0.1E~44, 0.123E~2) = LESS +compare (0.1E~44, 0.11754944E~37) = LESS +compareReal (0.1E~44, 0.11754944E~37) = LESS +compare (0.1E~44, 0.5877472E~38) = LESS +compareReal (0.1E~44, 0.5877472E~38) = LESS +compare (0.1E~44, 0.1E~44) = EQUAL +compareReal (0.1E~44, 0.1E~44) = EQUAL +compare (0.1E~44, 0.0) = GREATER +compareReal (0.1E~44, 0.0) = GREATER +compare (0.1E~44, ~0.34028235E39) = GREATER +compareReal (0.1E~44, ~0.34028235E39) = GREATER +compare (0.1E~44, ~0.17014117E39) = GREATER +compareReal (0.1E~44, ~0.17014117E39) = GREATER +compare (0.1E~44, ~0.123E4) = GREATER +compareReal (0.1E~44, ~0.123E4) = GREATER +compare (0.1E~44, ~0.123E2) = GREATER +compareReal (0.1E~44, ~0.123E2) = GREATER +compare (0.1E~44, ~0.31415927E1) = GREATER +compareReal (0.1E~44, ~0.31415927E1) = GREATER +compare (0.1E~44, ~0.27182817E1) = GREATER +compareReal (0.1E~44, ~0.27182817E1) = GREATER +compare (0.1E~44, ~0.123E1) = GREATER +compareReal (0.1E~44, ~0.123E1) = GREATER +compare (0.1E~44, ~0.123) = GREATER +compareReal (0.1E~44, ~0.123) = GREATER +compare (0.1E~44, ~0.123E~2) = GREATER +compareReal (0.1E~44, ~0.123E~2) = GREATER +compare (0.1E~44, ~0.11754944E~37) = GREATER +compareReal (0.1E~44, ~0.11754944E~37) = GREATER +compare (0.1E~44, ~0.5877472E~38) = GREATER +compareReal (0.1E~44, ~0.5877472E~38) = GREATER +compare (0.1E~44, ~0.1E~44) = GREATER +compareReal (0.1E~44, ~0.1E~44) = GREATER +compare (0.1E~44, ~0.0) = GREATER +compareReal (0.1E~44, ~0.0) = GREATER +compare (0.0, 0.34028235E39) = LESS +compareReal (0.0, 0.34028235E39) = LESS +compare (0.0, 0.17014117E39) = LESS +compareReal (0.0, 0.17014117E39) = LESS +compare (0.0, 0.123E4) = LESS +compareReal (0.0, 0.123E4) = LESS +compare (0.0, 0.123E2) = LESS +compareReal (0.0, 0.123E2) = LESS +compare (0.0, 0.31415927E1) = LESS +compareReal (0.0, 0.31415927E1) = LESS +compare (0.0, 0.27182817E1) = LESS +compareReal (0.0, 0.27182817E1) = LESS +compare (0.0, 0.123E1) = LESS +compareReal (0.0, 0.123E1) = LESS +compare (0.0, 0.123) = LESS +compareReal (0.0, 0.123) = LESS +compare (0.0, 0.123E~2) = LESS +compareReal (0.0, 0.123E~2) = LESS +compare (0.0, 0.11754944E~37) = LESS +compareReal (0.0, 0.11754944E~37) = LESS +compare (0.0, 0.5877472E~38) = LESS +compareReal (0.0, 0.5877472E~38) = LESS +compare (0.0, 0.1E~44) = LESS +compareReal (0.0, 0.1E~44) = LESS +compare (0.0, 0.0) = EQUAL +compareReal (0.0, 0.0) = EQUAL +compare (0.0, ~0.34028235E39) = GREATER +compareReal (0.0, ~0.34028235E39) = GREATER +compare (0.0, ~0.17014117E39) = GREATER +compareReal (0.0, ~0.17014117E39) = GREATER +compare (0.0, ~0.123E4) = GREATER +compareReal (0.0, ~0.123E4) = GREATER +compare (0.0, ~0.123E2) = GREATER +compareReal (0.0, ~0.123E2) = GREATER +compare (0.0, ~0.31415927E1) = GREATER +compareReal (0.0, ~0.31415927E1) = GREATER +compare (0.0, ~0.27182817E1) = GREATER +compareReal (0.0, ~0.27182817E1) = GREATER +compare (0.0, ~0.123E1) = GREATER +compareReal (0.0, ~0.123E1) = GREATER +compare (0.0, ~0.123) = GREATER +compareReal (0.0, ~0.123) = GREATER +compare (0.0, ~0.123E~2) = GREATER +compareReal (0.0, ~0.123E~2) = GREATER +compare (0.0, ~0.11754944E~37) = GREATER +compareReal (0.0, ~0.11754944E~37) = GREATER +compare (0.0, ~0.5877472E~38) = GREATER +compareReal (0.0, ~0.5877472E~38) = GREATER +compare (0.0, ~0.1E~44) = GREATER +compareReal (0.0, ~0.1E~44) = GREATER +compare (0.0, ~0.0) = EQUAL +compareReal (0.0, ~0.0) = EQUAL +compare (~0.34028235E39, 0.34028235E39) = LESS +compareReal (~0.34028235E39, 0.34028235E39) = LESS +compare (~0.34028235E39, 0.17014117E39) = LESS +compareReal (~0.34028235E39, 0.17014117E39) = LESS +compare (~0.34028235E39, 0.123E4) = LESS +compareReal (~0.34028235E39, 0.123E4) = LESS +compare (~0.34028235E39, 0.123E2) = LESS +compareReal (~0.34028235E39, 0.123E2) = LESS +compare (~0.34028235E39, 0.31415927E1) = LESS +compareReal (~0.34028235E39, 0.31415927E1) = LESS +compare (~0.34028235E39, 0.27182817E1) = LESS +compareReal (~0.34028235E39, 0.27182817E1) = LESS +compare (~0.34028235E39, 0.123E1) = LESS +compareReal (~0.34028235E39, 0.123E1) = LESS +compare (~0.34028235E39, 0.123) = LESS +compareReal (~0.34028235E39, 0.123) = LESS +compare (~0.34028235E39, 0.123E~2) = LESS +compareReal (~0.34028235E39, 0.123E~2) = LESS +compare (~0.34028235E39, 0.11754944E~37) = LESS +compareReal (~0.34028235E39, 0.11754944E~37) = LESS +compare (~0.34028235E39, 0.5877472E~38) = LESS +compareReal (~0.34028235E39, 0.5877472E~38) = LESS +compare (~0.34028235E39, 0.1E~44) = LESS +compareReal (~0.34028235E39, 0.1E~44) = LESS +compare (~0.34028235E39, 0.0) = LESS +compareReal (~0.34028235E39, 0.0) = LESS +compare (~0.34028235E39, ~0.34028235E39) = EQUAL +compareReal (~0.34028235E39, ~0.34028235E39) = EQUAL +compare (~0.34028235E39, ~0.17014117E39) = LESS +compareReal (~0.34028235E39, ~0.17014117E39) = LESS +compare (~0.34028235E39, ~0.123E4) = LESS +compareReal (~0.34028235E39, ~0.123E4) = LESS +compare (~0.34028235E39, ~0.123E2) = LESS +compareReal (~0.34028235E39, ~0.123E2) = LESS +compare (~0.34028235E39, ~0.31415927E1) = LESS +compareReal (~0.34028235E39, ~0.31415927E1) = LESS +compare (~0.34028235E39, ~0.27182817E1) = LESS +compareReal (~0.34028235E39, ~0.27182817E1) = LESS +compare (~0.34028235E39, ~0.123E1) = LESS +compareReal (~0.34028235E39, ~0.123E1) = LESS +compare (~0.34028235E39, ~0.123) = LESS +compareReal (~0.34028235E39, ~0.123) = LESS +compare (~0.34028235E39, ~0.123E~2) = LESS +compareReal (~0.34028235E39, ~0.123E~2) = LESS +compare (~0.34028235E39, ~0.11754944E~37) = LESS +compareReal (~0.34028235E39, ~0.11754944E~37) = LESS +compare (~0.34028235E39, ~0.5877472E~38) = LESS +compareReal (~0.34028235E39, ~0.5877472E~38) = LESS +compare (~0.34028235E39, ~0.1E~44) = LESS +compareReal (~0.34028235E39, ~0.1E~44) = LESS +compare (~0.34028235E39, ~0.0) = LESS +compareReal (~0.34028235E39, ~0.0) = LESS +compare (~0.17014117E39, 0.34028235E39) = LESS +compareReal (~0.17014117E39, 0.34028235E39) = LESS +compare (~0.17014117E39, 0.17014117E39) = LESS +compareReal (~0.17014117E39, 0.17014117E39) = LESS +compare (~0.17014117E39, 0.123E4) = LESS +compareReal (~0.17014117E39, 0.123E4) = LESS +compare (~0.17014117E39, 0.123E2) = LESS +compareReal (~0.17014117E39, 0.123E2) = LESS +compare (~0.17014117E39, 0.31415927E1) = LESS +compareReal (~0.17014117E39, 0.31415927E1) = LESS +compare (~0.17014117E39, 0.27182817E1) = LESS +compareReal (~0.17014117E39, 0.27182817E1) = LESS +compare (~0.17014117E39, 0.123E1) = LESS +compareReal (~0.17014117E39, 0.123E1) = LESS +compare (~0.17014117E39, 0.123) = LESS +compareReal (~0.17014117E39, 0.123) = LESS +compare (~0.17014117E39, 0.123E~2) = LESS +compareReal (~0.17014117E39, 0.123E~2) = LESS +compare (~0.17014117E39, 0.11754944E~37) = LESS +compareReal (~0.17014117E39, 0.11754944E~37) = LESS +compare (~0.17014117E39, 0.5877472E~38) = LESS +compareReal (~0.17014117E39, 0.5877472E~38) = LESS +compare (~0.17014117E39, 0.1E~44) = LESS +compareReal (~0.17014117E39, 0.1E~44) = LESS +compare (~0.17014117E39, 0.0) = LESS +compareReal (~0.17014117E39, 0.0) = LESS +compare (~0.17014117E39, ~0.34028235E39) = GREATER +compareReal (~0.17014117E39, ~0.34028235E39) = GREATER +compare (~0.17014117E39, ~0.17014117E39) = EQUAL +compareReal (~0.17014117E39, ~0.17014117E39) = EQUAL +compare (~0.17014117E39, ~0.123E4) = LESS +compareReal (~0.17014117E39, ~0.123E4) = LESS +compare (~0.17014117E39, ~0.123E2) = LESS +compareReal (~0.17014117E39, ~0.123E2) = LESS +compare (~0.17014117E39, ~0.31415927E1) = LESS +compareReal (~0.17014117E39, ~0.31415927E1) = LESS +compare (~0.17014117E39, ~0.27182817E1) = LESS +compareReal (~0.17014117E39, ~0.27182817E1) = LESS +compare (~0.17014117E39, ~0.123E1) = LESS +compareReal (~0.17014117E39, ~0.123E1) = LESS +compare (~0.17014117E39, ~0.123) = LESS +compareReal (~0.17014117E39, ~0.123) = LESS +compare (~0.17014117E39, ~0.123E~2) = LESS +compareReal (~0.17014117E39, ~0.123E~2) = LESS +compare (~0.17014117E39, ~0.11754944E~37) = LESS +compareReal (~0.17014117E39, ~0.11754944E~37) = LESS +compare (~0.17014117E39, ~0.5877472E~38) = LESS +compareReal (~0.17014117E39, ~0.5877472E~38) = LESS +compare (~0.17014117E39, ~0.1E~44) = LESS +compareReal (~0.17014117E39, ~0.1E~44) = LESS +compare (~0.17014117E39, ~0.0) = LESS +compareReal (~0.17014117E39, ~0.0) = LESS +compare (~0.123E4, 0.34028235E39) = LESS +compareReal (~0.123E4, 0.34028235E39) = LESS +compare (~0.123E4, 0.17014117E39) = LESS +compareReal (~0.123E4, 0.17014117E39) = LESS +compare (~0.123E4, 0.123E4) = LESS +compareReal (~0.123E4, 0.123E4) = LESS +compare (~0.123E4, 0.123E2) = LESS +compareReal (~0.123E4, 0.123E2) = LESS +compare (~0.123E4, 0.31415927E1) = LESS +compareReal (~0.123E4, 0.31415927E1) = LESS +compare (~0.123E4, 0.27182817E1) = LESS +compareReal (~0.123E4, 0.27182817E1) = LESS +compare (~0.123E4, 0.123E1) = LESS +compareReal (~0.123E4, 0.123E1) = LESS +compare (~0.123E4, 0.123) = LESS +compareReal (~0.123E4, 0.123) = LESS +compare (~0.123E4, 0.123E~2) = LESS +compareReal (~0.123E4, 0.123E~2) = LESS +compare (~0.123E4, 0.11754944E~37) = LESS +compareReal (~0.123E4, 0.11754944E~37) = LESS +compare (~0.123E4, 0.5877472E~38) = LESS +compareReal (~0.123E4, 0.5877472E~38) = LESS +compare (~0.123E4, 0.1E~44) = LESS +compareReal (~0.123E4, 0.1E~44) = LESS +compare (~0.123E4, 0.0) = LESS +compareReal (~0.123E4, 0.0) = LESS +compare (~0.123E4, ~0.34028235E39) = GREATER +compareReal (~0.123E4, ~0.34028235E39) = GREATER +compare (~0.123E4, ~0.17014117E39) = GREATER +compareReal (~0.123E4, ~0.17014117E39) = GREATER +compare (~0.123E4, ~0.123E4) = EQUAL +compareReal (~0.123E4, ~0.123E4) = EQUAL +compare (~0.123E4, ~0.123E2) = LESS +compareReal (~0.123E4, ~0.123E2) = LESS +compare (~0.123E4, ~0.31415927E1) = LESS +compareReal (~0.123E4, ~0.31415927E1) = LESS +compare (~0.123E4, ~0.27182817E1) = LESS +compareReal (~0.123E4, ~0.27182817E1) = LESS +compare (~0.123E4, ~0.123E1) = LESS +compareReal (~0.123E4, ~0.123E1) = LESS +compare (~0.123E4, ~0.123) = LESS +compareReal (~0.123E4, ~0.123) = LESS +compare (~0.123E4, ~0.123E~2) = LESS +compareReal (~0.123E4, ~0.123E~2) = LESS +compare (~0.123E4, ~0.11754944E~37) = LESS +compareReal (~0.123E4, ~0.11754944E~37) = LESS +compare (~0.123E4, ~0.5877472E~38) = LESS +compareReal (~0.123E4, ~0.5877472E~38) = LESS +compare (~0.123E4, ~0.1E~44) = LESS +compareReal (~0.123E4, ~0.1E~44) = LESS +compare (~0.123E4, ~0.0) = LESS +compareReal (~0.123E4, ~0.0) = LESS +compare (~0.123E2, 0.34028235E39) = LESS +compareReal (~0.123E2, 0.34028235E39) = LESS +compare (~0.123E2, 0.17014117E39) = LESS +compareReal (~0.123E2, 0.17014117E39) = LESS +compare (~0.123E2, 0.123E4) = LESS +compareReal (~0.123E2, 0.123E4) = LESS +compare (~0.123E2, 0.123E2) = LESS +compareReal (~0.123E2, 0.123E2) = LESS +compare (~0.123E2, 0.31415927E1) = LESS +compareReal (~0.123E2, 0.31415927E1) = LESS +compare (~0.123E2, 0.27182817E1) = LESS +compareReal (~0.123E2, 0.27182817E1) = LESS +compare (~0.123E2, 0.123E1) = LESS +compareReal (~0.123E2, 0.123E1) = LESS +compare (~0.123E2, 0.123) = LESS +compareReal (~0.123E2, 0.123) = LESS +compare (~0.123E2, 0.123E~2) = LESS +compareReal (~0.123E2, 0.123E~2) = LESS +compare (~0.123E2, 0.11754944E~37) = LESS +compareReal (~0.123E2, 0.11754944E~37) = LESS +compare (~0.123E2, 0.5877472E~38) = LESS +compareReal (~0.123E2, 0.5877472E~38) = LESS +compare (~0.123E2, 0.1E~44) = LESS +compareReal (~0.123E2, 0.1E~44) = LESS +compare (~0.123E2, 0.0) = LESS +compareReal (~0.123E2, 0.0) = LESS +compare (~0.123E2, ~0.34028235E39) = GREATER +compareReal (~0.123E2, ~0.34028235E39) = GREATER +compare (~0.123E2, ~0.17014117E39) = GREATER +compareReal (~0.123E2, ~0.17014117E39) = GREATER +compare (~0.123E2, ~0.123E4) = GREATER +compareReal (~0.123E2, ~0.123E4) = GREATER +compare (~0.123E2, ~0.123E2) = EQUAL +compareReal (~0.123E2, ~0.123E2) = EQUAL +compare (~0.123E2, ~0.31415927E1) = LESS +compareReal (~0.123E2, ~0.31415927E1) = LESS +compare (~0.123E2, ~0.27182817E1) = LESS +compareReal (~0.123E2, ~0.27182817E1) = LESS +compare (~0.123E2, ~0.123E1) = LESS +compareReal (~0.123E2, ~0.123E1) = LESS +compare (~0.123E2, ~0.123) = LESS +compareReal (~0.123E2, ~0.123) = LESS +compare (~0.123E2, ~0.123E~2) = LESS +compareReal (~0.123E2, ~0.123E~2) = LESS +compare (~0.123E2, ~0.11754944E~37) = LESS +compareReal (~0.123E2, ~0.11754944E~37) = LESS +compare (~0.123E2, ~0.5877472E~38) = LESS +compareReal (~0.123E2, ~0.5877472E~38) = LESS +compare (~0.123E2, ~0.1E~44) = LESS +compareReal (~0.123E2, ~0.1E~44) = LESS +compare (~0.123E2, ~0.0) = LESS +compareReal (~0.123E2, ~0.0) = LESS +compare (~0.31415927E1, 0.34028235E39) = LESS +compareReal (~0.31415927E1, 0.34028235E39) = LESS +compare (~0.31415927E1, 0.17014117E39) = LESS +compareReal (~0.31415927E1, 0.17014117E39) = LESS +compare (~0.31415927E1, 0.123E4) = LESS +compareReal (~0.31415927E1, 0.123E4) = LESS +compare (~0.31415927E1, 0.123E2) = LESS +compareReal (~0.31415927E1, 0.123E2) = LESS +compare (~0.31415927E1, 0.31415927E1) = LESS +compareReal (~0.31415927E1, 0.31415927E1) = LESS +compare (~0.31415927E1, 0.27182817E1) = LESS +compareReal (~0.31415927E1, 0.27182817E1) = LESS +compare (~0.31415927E1, 0.123E1) = LESS +compareReal (~0.31415927E1, 0.123E1) = LESS +compare (~0.31415927E1, 0.123) = LESS +compareReal (~0.31415927E1, 0.123) = LESS +compare (~0.31415927E1, 0.123E~2) = LESS +compareReal (~0.31415927E1, 0.123E~2) = LESS +compare (~0.31415927E1, 0.11754944E~37) = LESS +compareReal (~0.31415927E1, 0.11754944E~37) = LESS +compare (~0.31415927E1, 0.5877472E~38) = LESS +compareReal (~0.31415927E1, 0.5877472E~38) = LESS +compare (~0.31415927E1, 0.1E~44) = LESS +compareReal (~0.31415927E1, 0.1E~44) = LESS +compare (~0.31415927E1, 0.0) = LESS +compareReal (~0.31415927E1, 0.0) = LESS +compare (~0.31415927E1, ~0.34028235E39) = GREATER +compareReal (~0.31415927E1, ~0.34028235E39) = GREATER +compare (~0.31415927E1, ~0.17014117E39) = GREATER +compareReal (~0.31415927E1, ~0.17014117E39) = GREATER +compare (~0.31415927E1, ~0.123E4) = GREATER +compareReal (~0.31415927E1, ~0.123E4) = GREATER +compare (~0.31415927E1, ~0.123E2) = GREATER +compareReal (~0.31415927E1, ~0.123E2) = GREATER +compare (~0.31415927E1, ~0.31415927E1) = EQUAL +compareReal (~0.31415927E1, ~0.31415927E1) = EQUAL +compare (~0.31415927E1, ~0.27182817E1) = LESS +compareReal (~0.31415927E1, ~0.27182817E1) = LESS +compare (~0.31415927E1, ~0.123E1) = LESS +compareReal (~0.31415927E1, ~0.123E1) = LESS +compare (~0.31415927E1, ~0.123) = LESS +compareReal (~0.31415927E1, ~0.123) = LESS +compare (~0.31415927E1, ~0.123E~2) = LESS +compareReal (~0.31415927E1, ~0.123E~2) = LESS +compare (~0.31415927E1, ~0.11754944E~37) = LESS +compareReal (~0.31415927E1, ~0.11754944E~37) = LESS +compare (~0.31415927E1, ~0.5877472E~38) = LESS +compareReal (~0.31415927E1, ~0.5877472E~38) = LESS +compare (~0.31415927E1, ~0.1E~44) = LESS +compareReal (~0.31415927E1, ~0.1E~44) = LESS +compare (~0.31415927E1, ~0.0) = LESS +compareReal (~0.31415927E1, ~0.0) = LESS +compare (~0.27182817E1, 0.34028235E39) = LESS +compareReal (~0.27182817E1, 0.34028235E39) = LESS +compare (~0.27182817E1, 0.17014117E39) = LESS +compareReal (~0.27182817E1, 0.17014117E39) = LESS +compare (~0.27182817E1, 0.123E4) = LESS +compareReal (~0.27182817E1, 0.123E4) = LESS +compare (~0.27182817E1, 0.123E2) = LESS +compareReal (~0.27182817E1, 0.123E2) = LESS +compare (~0.27182817E1, 0.31415927E1) = LESS +compareReal (~0.27182817E1, 0.31415927E1) = LESS +compare (~0.27182817E1, 0.27182817E1) = LESS +compareReal (~0.27182817E1, 0.27182817E1) = LESS +compare (~0.27182817E1, 0.123E1) = LESS +compareReal (~0.27182817E1, 0.123E1) = LESS +compare (~0.27182817E1, 0.123) = LESS +compareReal (~0.27182817E1, 0.123) = LESS +compare (~0.27182817E1, 0.123E~2) = LESS +compareReal (~0.27182817E1, 0.123E~2) = LESS +compare (~0.27182817E1, 0.11754944E~37) = LESS +compareReal (~0.27182817E1, 0.11754944E~37) = LESS +compare (~0.27182817E1, 0.5877472E~38) = LESS +compareReal (~0.27182817E1, 0.5877472E~38) = LESS +compare (~0.27182817E1, 0.1E~44) = LESS +compareReal (~0.27182817E1, 0.1E~44) = LESS +compare (~0.27182817E1, 0.0) = LESS +compareReal (~0.27182817E1, 0.0) = LESS +compare (~0.27182817E1, ~0.34028235E39) = GREATER +compareReal (~0.27182817E1, ~0.34028235E39) = GREATER +compare (~0.27182817E1, ~0.17014117E39) = GREATER +compareReal (~0.27182817E1, ~0.17014117E39) = GREATER +compare (~0.27182817E1, ~0.123E4) = GREATER +compareReal (~0.27182817E1, ~0.123E4) = GREATER +compare (~0.27182817E1, ~0.123E2) = GREATER +compareReal (~0.27182817E1, ~0.123E2) = GREATER +compare (~0.27182817E1, ~0.31415927E1) = GREATER +compareReal (~0.27182817E1, ~0.31415927E1) = GREATER +compare (~0.27182817E1, ~0.27182817E1) = EQUAL +compareReal (~0.27182817E1, ~0.27182817E1) = EQUAL +compare (~0.27182817E1, ~0.123E1) = LESS +compareReal (~0.27182817E1, ~0.123E1) = LESS +compare (~0.27182817E1, ~0.123) = LESS +compareReal (~0.27182817E1, ~0.123) = LESS +compare (~0.27182817E1, ~0.123E~2) = LESS +compareReal (~0.27182817E1, ~0.123E~2) = LESS +compare (~0.27182817E1, ~0.11754944E~37) = LESS +compareReal (~0.27182817E1, ~0.11754944E~37) = LESS +compare (~0.27182817E1, ~0.5877472E~38) = LESS +compareReal (~0.27182817E1, ~0.5877472E~38) = LESS +compare (~0.27182817E1, ~0.1E~44) = LESS +compareReal (~0.27182817E1, ~0.1E~44) = LESS +compare (~0.27182817E1, ~0.0) = LESS +compareReal (~0.27182817E1, ~0.0) = LESS +compare (~0.123E1, 0.34028235E39) = LESS +compareReal (~0.123E1, 0.34028235E39) = LESS +compare (~0.123E1, 0.17014117E39) = LESS +compareReal (~0.123E1, 0.17014117E39) = LESS +compare (~0.123E1, 0.123E4) = LESS +compareReal (~0.123E1, 0.123E4) = LESS +compare (~0.123E1, 0.123E2) = LESS +compareReal (~0.123E1, 0.123E2) = LESS +compare (~0.123E1, 0.31415927E1) = LESS +compareReal (~0.123E1, 0.31415927E1) = LESS +compare (~0.123E1, 0.27182817E1) = LESS +compareReal (~0.123E1, 0.27182817E1) = LESS +compare (~0.123E1, 0.123E1) = LESS +compareReal (~0.123E1, 0.123E1) = LESS +compare (~0.123E1, 0.123) = LESS +compareReal (~0.123E1, 0.123) = LESS +compare (~0.123E1, 0.123E~2) = LESS +compareReal (~0.123E1, 0.123E~2) = LESS +compare (~0.123E1, 0.11754944E~37) = LESS +compareReal (~0.123E1, 0.11754944E~37) = LESS +compare (~0.123E1, 0.5877472E~38) = LESS +compareReal (~0.123E1, 0.5877472E~38) = LESS +compare (~0.123E1, 0.1E~44) = LESS +compareReal (~0.123E1, 0.1E~44) = LESS +compare (~0.123E1, 0.0) = LESS +compareReal (~0.123E1, 0.0) = LESS +compare (~0.123E1, ~0.34028235E39) = GREATER +compareReal (~0.123E1, ~0.34028235E39) = GREATER +compare (~0.123E1, ~0.17014117E39) = GREATER +compareReal (~0.123E1, ~0.17014117E39) = GREATER +compare (~0.123E1, ~0.123E4) = GREATER +compareReal (~0.123E1, ~0.123E4) = GREATER +compare (~0.123E1, ~0.123E2) = GREATER +compareReal (~0.123E1, ~0.123E2) = GREATER +compare (~0.123E1, ~0.31415927E1) = GREATER +compareReal (~0.123E1, ~0.31415927E1) = GREATER +compare (~0.123E1, ~0.27182817E1) = GREATER +compareReal (~0.123E1, ~0.27182817E1) = GREATER +compare (~0.123E1, ~0.123E1) = EQUAL +compareReal (~0.123E1, ~0.123E1) = EQUAL +compare (~0.123E1, ~0.123) = LESS +compareReal (~0.123E1, ~0.123) = LESS +compare (~0.123E1, ~0.123E~2) = LESS +compareReal (~0.123E1, ~0.123E~2) = LESS +compare (~0.123E1, ~0.11754944E~37) = LESS +compareReal (~0.123E1, ~0.11754944E~37) = LESS +compare (~0.123E1, ~0.5877472E~38) = LESS +compareReal (~0.123E1, ~0.5877472E~38) = LESS +compare (~0.123E1, ~0.1E~44) = LESS +compareReal (~0.123E1, ~0.1E~44) = LESS +compare (~0.123E1, ~0.0) = LESS +compareReal (~0.123E1, ~0.0) = LESS +compare (~0.123, 0.34028235E39) = LESS +compareReal (~0.123, 0.34028235E39) = LESS +compare (~0.123, 0.17014117E39) = LESS +compareReal (~0.123, 0.17014117E39) = LESS +compare (~0.123, 0.123E4) = LESS +compareReal (~0.123, 0.123E4) = LESS +compare (~0.123, 0.123E2) = LESS +compareReal (~0.123, 0.123E2) = LESS +compare (~0.123, 0.31415927E1) = LESS +compareReal (~0.123, 0.31415927E1) = LESS +compare (~0.123, 0.27182817E1) = LESS +compareReal (~0.123, 0.27182817E1) = LESS +compare (~0.123, 0.123E1) = LESS +compareReal (~0.123, 0.123E1) = LESS +compare (~0.123, 0.123) = LESS +compareReal (~0.123, 0.123) = LESS +compare (~0.123, 0.123E~2) = LESS +compareReal (~0.123, 0.123E~2) = LESS +compare (~0.123, 0.11754944E~37) = LESS +compareReal (~0.123, 0.11754944E~37) = LESS +compare (~0.123, 0.5877472E~38) = LESS +compareReal (~0.123, 0.5877472E~38) = LESS +compare (~0.123, 0.1E~44) = LESS +compareReal (~0.123, 0.1E~44) = LESS +compare (~0.123, 0.0) = LESS +compareReal (~0.123, 0.0) = LESS +compare (~0.123, ~0.34028235E39) = GREATER +compareReal (~0.123, ~0.34028235E39) = GREATER +compare (~0.123, ~0.17014117E39) = GREATER +compareReal (~0.123, ~0.17014117E39) = GREATER +compare (~0.123, ~0.123E4) = GREATER +compareReal (~0.123, ~0.123E4) = GREATER +compare (~0.123, ~0.123E2) = GREATER +compareReal (~0.123, ~0.123E2) = GREATER +compare (~0.123, ~0.31415927E1) = GREATER +compareReal (~0.123, ~0.31415927E1) = GREATER +compare (~0.123, ~0.27182817E1) = GREATER +compareReal (~0.123, ~0.27182817E1) = GREATER +compare (~0.123, ~0.123E1) = GREATER +compareReal (~0.123, ~0.123E1) = GREATER +compare (~0.123, ~0.123) = EQUAL +compareReal (~0.123, ~0.123) = EQUAL +compare (~0.123, ~0.123E~2) = LESS +compareReal (~0.123, ~0.123E~2) = LESS +compare (~0.123, ~0.11754944E~37) = LESS +compareReal (~0.123, ~0.11754944E~37) = LESS +compare (~0.123, ~0.5877472E~38) = LESS +compareReal (~0.123, ~0.5877472E~38) = LESS +compare (~0.123, ~0.1E~44) = LESS +compareReal (~0.123, ~0.1E~44) = LESS +compare (~0.123, ~0.0) = LESS +compareReal (~0.123, ~0.0) = LESS +compare (~0.123E~2, 0.34028235E39) = LESS +compareReal (~0.123E~2, 0.34028235E39) = LESS +compare (~0.123E~2, 0.17014117E39) = LESS +compareReal (~0.123E~2, 0.17014117E39) = LESS +compare (~0.123E~2, 0.123E4) = LESS +compareReal (~0.123E~2, 0.123E4) = LESS +compare (~0.123E~2, 0.123E2) = LESS +compareReal (~0.123E~2, 0.123E2) = LESS +compare (~0.123E~2, 0.31415927E1) = LESS +compareReal (~0.123E~2, 0.31415927E1) = LESS +compare (~0.123E~2, 0.27182817E1) = LESS +compareReal (~0.123E~2, 0.27182817E1) = LESS +compare (~0.123E~2, 0.123E1) = LESS +compareReal (~0.123E~2, 0.123E1) = LESS +compare (~0.123E~2, 0.123) = LESS +compareReal (~0.123E~2, 0.123) = LESS +compare (~0.123E~2, 0.123E~2) = LESS +compareReal (~0.123E~2, 0.123E~2) = LESS +compare (~0.123E~2, 0.11754944E~37) = LESS +compareReal (~0.123E~2, 0.11754944E~37) = LESS +compare (~0.123E~2, 0.5877472E~38) = LESS +compareReal (~0.123E~2, 0.5877472E~38) = LESS +compare (~0.123E~2, 0.1E~44) = LESS +compareReal (~0.123E~2, 0.1E~44) = LESS +compare (~0.123E~2, 0.0) = LESS +compareReal (~0.123E~2, 0.0) = LESS +compare (~0.123E~2, ~0.34028235E39) = GREATER +compareReal (~0.123E~2, ~0.34028235E39) = GREATER +compare (~0.123E~2, ~0.17014117E39) = GREATER +compareReal (~0.123E~2, ~0.17014117E39) = GREATER +compare (~0.123E~2, ~0.123E4) = GREATER +compareReal (~0.123E~2, ~0.123E4) = GREATER +compare (~0.123E~2, ~0.123E2) = GREATER +compareReal (~0.123E~2, ~0.123E2) = GREATER +compare (~0.123E~2, ~0.31415927E1) = GREATER +compareReal (~0.123E~2, ~0.31415927E1) = GREATER +compare (~0.123E~2, ~0.27182817E1) = GREATER +compareReal (~0.123E~2, ~0.27182817E1) = GREATER +compare (~0.123E~2, ~0.123E1) = GREATER +compareReal (~0.123E~2, ~0.123E1) = GREATER +compare (~0.123E~2, ~0.123) = GREATER +compareReal (~0.123E~2, ~0.123) = GREATER +compare (~0.123E~2, ~0.123E~2) = EQUAL +compareReal (~0.123E~2, ~0.123E~2) = EQUAL +compare (~0.123E~2, ~0.11754944E~37) = LESS +compareReal (~0.123E~2, ~0.11754944E~37) = LESS +compare (~0.123E~2, ~0.5877472E~38) = LESS +compareReal (~0.123E~2, ~0.5877472E~38) = LESS +compare (~0.123E~2, ~0.1E~44) = LESS +compareReal (~0.123E~2, ~0.1E~44) = LESS +compare (~0.123E~2, ~0.0) = LESS +compareReal (~0.123E~2, ~0.0) = LESS +compare (~0.11754944E~37, 0.34028235E39) = LESS +compareReal (~0.11754944E~37, 0.34028235E39) = LESS +compare (~0.11754944E~37, 0.17014117E39) = LESS +compareReal (~0.11754944E~37, 0.17014117E39) = LESS +compare (~0.11754944E~37, 0.123E4) = LESS +compareReal (~0.11754944E~37, 0.123E4) = LESS +compare (~0.11754944E~37, 0.123E2) = LESS +compareReal (~0.11754944E~37, 0.123E2) = LESS +compare (~0.11754944E~37, 0.31415927E1) = LESS +compareReal (~0.11754944E~37, 0.31415927E1) = LESS +compare (~0.11754944E~37, 0.27182817E1) = LESS +compareReal (~0.11754944E~37, 0.27182817E1) = LESS +compare (~0.11754944E~37, 0.123E1) = LESS +compareReal (~0.11754944E~37, 0.123E1) = LESS +compare (~0.11754944E~37, 0.123) = LESS +compareReal (~0.11754944E~37, 0.123) = LESS +compare (~0.11754944E~37, 0.123E~2) = LESS +compareReal (~0.11754944E~37, 0.123E~2) = LESS +compare (~0.11754944E~37, 0.11754944E~37) = LESS +compareReal (~0.11754944E~37, 0.11754944E~37) = LESS +compare (~0.11754944E~37, 0.5877472E~38) = LESS +compareReal (~0.11754944E~37, 0.5877472E~38) = LESS +compare (~0.11754944E~37, 0.1E~44) = LESS +compareReal (~0.11754944E~37, 0.1E~44) = LESS +compare (~0.11754944E~37, 0.0) = LESS +compareReal (~0.11754944E~37, 0.0) = LESS +compare (~0.11754944E~37, ~0.34028235E39) = GREATER +compareReal (~0.11754944E~37, ~0.34028235E39) = GREATER +compare (~0.11754944E~37, ~0.17014117E39) = GREATER +compareReal (~0.11754944E~37, ~0.17014117E39) = GREATER +compare (~0.11754944E~37, ~0.123E4) = GREATER +compareReal (~0.11754944E~37, ~0.123E4) = GREATER +compare (~0.11754944E~37, ~0.123E2) = GREATER +compareReal (~0.11754944E~37, ~0.123E2) = GREATER +compare (~0.11754944E~37, ~0.31415927E1) = GREATER +compareReal (~0.11754944E~37, ~0.31415927E1) = GREATER +compare (~0.11754944E~37, ~0.27182817E1) = GREATER +compareReal (~0.11754944E~37, ~0.27182817E1) = GREATER +compare (~0.11754944E~37, ~0.123E1) = GREATER +compareReal (~0.11754944E~37, ~0.123E1) = GREATER +compare (~0.11754944E~37, ~0.123) = GREATER +compareReal (~0.11754944E~37, ~0.123) = GREATER +compare (~0.11754944E~37, ~0.123E~2) = GREATER +compareReal (~0.11754944E~37, ~0.123E~2) = GREATER +compare (~0.11754944E~37, ~0.11754944E~37) = EQUAL +compareReal (~0.11754944E~37, ~0.11754944E~37) = EQUAL +compare (~0.11754944E~37, ~0.5877472E~38) = LESS +compareReal (~0.11754944E~37, ~0.5877472E~38) = LESS +compare (~0.11754944E~37, ~0.1E~44) = LESS +compareReal (~0.11754944E~37, ~0.1E~44) = LESS +compare (~0.11754944E~37, ~0.0) = LESS +compareReal (~0.11754944E~37, ~0.0) = LESS +compare (~0.5877472E~38, 0.34028235E39) = LESS +compareReal (~0.5877472E~38, 0.34028235E39) = LESS +compare (~0.5877472E~38, 0.17014117E39) = LESS +compareReal (~0.5877472E~38, 0.17014117E39) = LESS +compare (~0.5877472E~38, 0.123E4) = LESS +compareReal (~0.5877472E~38, 0.123E4) = LESS +compare (~0.5877472E~38, 0.123E2) = LESS +compareReal (~0.5877472E~38, 0.123E2) = LESS +compare (~0.5877472E~38, 0.31415927E1) = LESS +compareReal (~0.5877472E~38, 0.31415927E1) = LESS +compare (~0.5877472E~38, 0.27182817E1) = LESS +compareReal (~0.5877472E~38, 0.27182817E1) = LESS +compare (~0.5877472E~38, 0.123E1) = LESS +compareReal (~0.5877472E~38, 0.123E1) = LESS +compare (~0.5877472E~38, 0.123) = LESS +compareReal (~0.5877472E~38, 0.123) = LESS +compare (~0.5877472E~38, 0.123E~2) = LESS +compareReal (~0.5877472E~38, 0.123E~2) = LESS +compare (~0.5877472E~38, 0.11754944E~37) = LESS +compareReal (~0.5877472E~38, 0.11754944E~37) = LESS +compare (~0.5877472E~38, 0.5877472E~38) = LESS +compareReal (~0.5877472E~38, 0.5877472E~38) = LESS +compare (~0.5877472E~38, 0.1E~44) = LESS +compareReal (~0.5877472E~38, 0.1E~44) = LESS +compare (~0.5877472E~38, 0.0) = LESS +compareReal (~0.5877472E~38, 0.0) = LESS +compare (~0.5877472E~38, ~0.34028235E39) = GREATER +compareReal (~0.5877472E~38, ~0.34028235E39) = GREATER +compare (~0.5877472E~38, ~0.17014117E39) = GREATER +compareReal (~0.5877472E~38, ~0.17014117E39) = GREATER +compare (~0.5877472E~38, ~0.123E4) = GREATER +compareReal (~0.5877472E~38, ~0.123E4) = GREATER +compare (~0.5877472E~38, ~0.123E2) = GREATER +compareReal (~0.5877472E~38, ~0.123E2) = GREATER +compare (~0.5877472E~38, ~0.31415927E1) = GREATER +compareReal (~0.5877472E~38, ~0.31415927E1) = GREATER +compare (~0.5877472E~38, ~0.27182817E1) = GREATER +compareReal (~0.5877472E~38, ~0.27182817E1) = GREATER +compare (~0.5877472E~38, ~0.123E1) = GREATER +compareReal (~0.5877472E~38, ~0.123E1) = GREATER +compare (~0.5877472E~38, ~0.123) = GREATER +compareReal (~0.5877472E~38, ~0.123) = GREATER +compare (~0.5877472E~38, ~0.123E~2) = GREATER +compareReal (~0.5877472E~38, ~0.123E~2) = GREATER +compare (~0.5877472E~38, ~0.11754944E~37) = GREATER +compareReal (~0.5877472E~38, ~0.11754944E~37) = GREATER +compare (~0.5877472E~38, ~0.5877472E~38) = EQUAL +compareReal (~0.5877472E~38, ~0.5877472E~38) = EQUAL +compare (~0.5877472E~38, ~0.1E~44) = LESS +compareReal (~0.5877472E~38, ~0.1E~44) = LESS +compare (~0.5877472E~38, ~0.0) = LESS +compareReal (~0.5877472E~38, ~0.0) = LESS +compare (~0.1E~44, 0.34028235E39) = LESS +compareReal (~0.1E~44, 0.34028235E39) = LESS +compare (~0.1E~44, 0.17014117E39) = LESS +compareReal (~0.1E~44, 0.17014117E39) = LESS +compare (~0.1E~44, 0.123E4) = LESS +compareReal (~0.1E~44, 0.123E4) = LESS +compare (~0.1E~44, 0.123E2) = LESS +compareReal (~0.1E~44, 0.123E2) = LESS +compare (~0.1E~44, 0.31415927E1) = LESS +compareReal (~0.1E~44, 0.31415927E1) = LESS +compare (~0.1E~44, 0.27182817E1) = LESS +compareReal (~0.1E~44, 0.27182817E1) = LESS +compare (~0.1E~44, 0.123E1) = LESS +compareReal (~0.1E~44, 0.123E1) = LESS +compare (~0.1E~44, 0.123) = LESS +compareReal (~0.1E~44, 0.123) = LESS +compare (~0.1E~44, 0.123E~2) = LESS +compareReal (~0.1E~44, 0.123E~2) = LESS +compare (~0.1E~44, 0.11754944E~37) = LESS +compareReal (~0.1E~44, 0.11754944E~37) = LESS +compare (~0.1E~44, 0.5877472E~38) = LESS +compareReal (~0.1E~44, 0.5877472E~38) = LESS +compare (~0.1E~44, 0.1E~44) = LESS +compareReal (~0.1E~44, 0.1E~44) = LESS +compare (~0.1E~44, 0.0) = LESS +compareReal (~0.1E~44, 0.0) = LESS +compare (~0.1E~44, ~0.34028235E39) = GREATER +compareReal (~0.1E~44, ~0.34028235E39) = GREATER +compare (~0.1E~44, ~0.17014117E39) = GREATER +compareReal (~0.1E~44, ~0.17014117E39) = GREATER +compare (~0.1E~44, ~0.123E4) = GREATER +compareReal (~0.1E~44, ~0.123E4) = GREATER +compare (~0.1E~44, ~0.123E2) = GREATER +compareReal (~0.1E~44, ~0.123E2) = GREATER +compare (~0.1E~44, ~0.31415927E1) = GREATER +compareReal (~0.1E~44, ~0.31415927E1) = GREATER +compare (~0.1E~44, ~0.27182817E1) = GREATER +compareReal (~0.1E~44, ~0.27182817E1) = GREATER +compare (~0.1E~44, ~0.123E1) = GREATER +compareReal (~0.1E~44, ~0.123E1) = GREATER +compare (~0.1E~44, ~0.123) = GREATER +compareReal (~0.1E~44, ~0.123) = GREATER +compare (~0.1E~44, ~0.123E~2) = GREATER +compareReal (~0.1E~44, ~0.123E~2) = GREATER +compare (~0.1E~44, ~0.11754944E~37) = GREATER +compareReal (~0.1E~44, ~0.11754944E~37) = GREATER +compare (~0.1E~44, ~0.5877472E~38) = GREATER +compareReal (~0.1E~44, ~0.5877472E~38) = GREATER +compare (~0.1E~44, ~0.1E~44) = EQUAL +compareReal (~0.1E~44, ~0.1E~44) = EQUAL +compare (~0.1E~44, ~0.0) = LESS +compareReal (~0.1E~44, ~0.0) = LESS +compare (~0.0, 0.34028235E39) = LESS +compareReal (~0.0, 0.34028235E39) = LESS +compare (~0.0, 0.17014117E39) = LESS +compareReal (~0.0, 0.17014117E39) = LESS +compare (~0.0, 0.123E4) = LESS +compareReal (~0.0, 0.123E4) = LESS +compare (~0.0, 0.123E2) = LESS +compareReal (~0.0, 0.123E2) = LESS +compare (~0.0, 0.31415927E1) = LESS +compareReal (~0.0, 0.31415927E1) = LESS +compare (~0.0, 0.27182817E1) = LESS +compareReal (~0.0, 0.27182817E1) = LESS +compare (~0.0, 0.123E1) = LESS +compareReal (~0.0, 0.123E1) = LESS +compare (~0.0, 0.123) = LESS +compareReal (~0.0, 0.123) = LESS +compare (~0.0, 0.123E~2) = LESS +compareReal (~0.0, 0.123E~2) = LESS +compare (~0.0, 0.11754944E~37) = LESS +compareReal (~0.0, 0.11754944E~37) = LESS +compare (~0.0, 0.5877472E~38) = LESS +compareReal (~0.0, 0.5877472E~38) = LESS +compare (~0.0, 0.1E~44) = LESS +compareReal (~0.0, 0.1E~44) = LESS +compare (~0.0, 0.0) = EQUAL +compareReal (~0.0, 0.0) = EQUAL +compare (~0.0, ~0.34028235E39) = GREATER +compareReal (~0.0, ~0.34028235E39) = GREATER +compare (~0.0, ~0.17014117E39) = GREATER +compareReal (~0.0, ~0.17014117E39) = GREATER +compare (~0.0, ~0.123E4) = GREATER +compareReal (~0.0, ~0.123E4) = GREATER +compare (~0.0, ~0.123E2) = GREATER +compareReal (~0.0, ~0.123E2) = GREATER +compare (~0.0, ~0.31415927E1) = GREATER +compareReal (~0.0, ~0.31415927E1) = GREATER +compare (~0.0, ~0.27182817E1) = GREATER +compareReal (~0.0, ~0.27182817E1) = GREATER +compare (~0.0, ~0.123E1) = GREATER +compareReal (~0.0, ~0.123E1) = GREATER +compare (~0.0, ~0.123) = GREATER +compareReal (~0.0, ~0.123) = GREATER +compare (~0.0, ~0.123E~2) = GREATER +compareReal (~0.0, ~0.123E~2) = GREATER +compare (~0.0, ~0.11754944E~37) = GREATER +compareReal (~0.0, ~0.11754944E~37) = GREATER +compare (~0.0, ~0.5877472E~38) = GREATER +compareReal (~0.0, ~0.5877472E~38) = GREATER +compare (~0.0, ~0.1E~44) = GREATER +compareReal (~0.0, ~0.1E~44) = GREATER +compare (~0.0, ~0.0) = EQUAL +compareReal (~0.0, ~0.0) = EQUAL + +Testing abs + +Testing {from,to}ManExp +0.34028235E39 = 0.99999994 * 2^128 + = 0.34028235E39 +0.17014117E39 = 0.99999994 * 2^127 + = 0.17014117E39 +0.123E4 = 0.60058594 * 2^11 + = 0.123E4 +0.123E2 = 0.76875 * 2^4 + = 0.123E2 +0.31415927E1 = 0.7853982 * 2^2 + = 0.31415927E1 +0.27182817E1 = 0.67957044 * 2^2 + = 0.27182817E1 +0.123E1 = 0.615 * 2^1 + = 0.123E1 +0.123 = 0.984 * 2^~3 + = 0.123 +0.123E~2 = 0.62976 * 2^~9 + = 0.123E~2 +0.11754944E~37 = 0.5 * 2^~125 + = 0.11754944E~37 +0.0 = 0.0 * 2^0 + = 0.0 +~0.34028235E39 = ~0.99999994 * 2^128 + = ~0.34028235E39 +~0.17014117E39 = ~0.99999994 * 2^127 + = ~0.17014117E39 +~0.123E4 = ~0.60058594 * 2^11 + = ~0.123E4 +~0.123E2 = ~0.76875 * 2^4 + = ~0.123E2 +~0.31415927E1 = ~0.7853982 * 2^2 + = ~0.31415927E1 +~0.27182817E1 = ~0.67957044 * 2^2 + = ~0.27182817E1 +~0.123E1 = ~0.615 * 2^1 + = ~0.123E1 +~0.123 = ~0.984 * 2^~3 + = ~0.123 +~0.123E~2 = ~0.62976 * 2^~9 + = ~0.123E~2 +~0.11754944E~37 = ~0.5 * 2^~125 + = ~0.11754944E~37 +~0.0 = ~0.0 * 2^0 + = ~0.0 + +Testing split + +Testing {from,to}Large + +Testing Real64 + +Testing fmt +0.17976931348623157E309 +1.797693E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 +1.79769313486E308 +2E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 +2E308 +1.7976931349E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 +1.797693135E308 +0.8988465674311579E308 +8.988466E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +8.98846567431E307 +9E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 +9E307 +8.9884656743E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 +8.988465674E307 +0.123E4 +1.230000E3 +1230.000000 +1230 +1E3 +1230 +1E3 +1.2300000000E3 +1230.0000000000 +1230 +0.123E2 +1.230000E1 +12.300000 +12.3 +1E1 +12 +10 +1.2300000000E1 +12.3000000000 +12.3 +0.3141592653589793E1 +3.141593E0 +3.141593 +3.14159265359 +3E0 +3 +3 +3.1415926536E0 +3.1415926536 +3.141592654 +0.2718281828459045E1 +2.718282E0 +2.718282 +2.71828182846 +3E0 +3 +3 +2.7182818285E0 +2.7182818285 +2.718281828 +0.123E1 +1.230000E0 +1.230000 +1.23 +1E0 1 1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796251 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796251 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf +1.2300000000E0 +1.2300000000 +1.23 +0.123 +1.230000E~1 +0.123000 +0.123 +1E~1 0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195423 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813835 -~7.544136524 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342377245 -1.856761098 -nan -nan -~0.9424887896 -~1.564468503 -nan -~2.819815874 -~0.8425793052 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240715 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 +0.1 +1.2300000000E~1 +0.1230000000 +0.123 +0.123E~2 +1.230000E~3 +0.001230 +0.00123 +1E~3 0 +1E~3 +1.2300000000E~3 +0.0012300000 +0.00123 +0.22250738585072014E~307 +2.225074E~308 +0.000000 +2.22507385851E~308 +2E~308 0 -1 -1 -1 -~inf -~inf +2E~308 +2.2250738585E~308 +0.0000000000 +2.225073859E~308 +0.11125369292536007E~307 +1.112537E~308 +0.000000 +1.11253692925E~308 +1E~308 0 +1E~308 +1.1125369293E~308 +0.0000000000 +1.112536929E~308 +0.5E~323 +4.940656E~324 +0.000000 +4.94065645841E~324 +5E~324 0 +5E~324 +4.9406564584E~324 +0.0000000000 +4.940656458E~324 +0.0 +0.000000E0 +0.000000 0 +0E0 0 0 -nan -nan -1.570796251 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796251 -nan -~inf +0.0000000000E0 +0.0000000000 0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796251 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 +~0.17976931348623157E309 +~1.797693E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 +~1.79769313486E308 +~2E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 +~2E308 +~1.7976931349E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 +~1.797693135E308 +~0.8988465674311579E308 +~8.988466E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +~8.98846567431E307 +~9E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 +~9E307 +~8.9884656743E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 +~8.988465674E307 ~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 +~1.230000E3 +~1230.000000 +~1230 +~1E3 +~1230 +~1E3 +~1.2300000000E3 +~1230.0000000000 +~1230 ~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 +~1.230000E1 +~12.300000 +~12.3 +~1E1 +~12 +~10 +~1.2300000000E1 +~12.3000000000 +~12.3 +~0.3141592653589793E1 +~3.141593E0 +~3.141593 +~3.14159265359 +~3E0 +~3 +~3 +~3.1415926536E0 +~3.1415926536 +~3.141592654 +~0.2718281828459045E1 +~2.718282E0 +~2.718282 +~2.71828182846 +~3E0 +~3 +~3 +~2.7182818285E0 +~2.7182818285 +~2.718281828 ~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 +~1.230000E0 +~1.230000 +~1.23 +~1E0 +~1 +~1 +~1.2300000000E0 +~1.2300000000 +~1.23 ~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.5877472E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754942E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 +~1.230000E~1 +~0.123000 +~0.123 +~1E~1 +~0 +~0.1 +~1.2300000000E~1 +~0.1230000000 ~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 ~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.5877472E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754942E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.5877472E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.5877472E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754942E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754942E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 +~1.230000E~3 +~0.001230 +~0.00123 +~1E~3 +~0 +~1E~3 +~1.2300000000E~3 +~0.0012300000 +~0.00123 +~0.22250738585072014E~307 +~2.225074E~308 +~0.000000 +~2.22507385851E~308 +~2E~308 +~0 +~2E~308 +~2.2250738585E~308 +~0.0000000000 +~2.225073859E~308 +~0.11125369292536007E~307 +~1.112537E~308 +~0.000000 +~1.11253692925E~308 +~1E~308 +~0 +~1E~308 +~1.1125369293E~308 +~0.0000000000 +~1.112536929E~308 +~0.5E~323 +~4.940656E~324 +~0.000000 +~4.94065645841E~324 +~5E~324 +~0 +~5E~324 +~4.9406564584E~324 +~0.0000000000 +~4.940656458E~324 ~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.5877472E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754942E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.5877472E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754942E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.5877472E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.5877472E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754942E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754942E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false +0.000000E0 +0.000000 +0 +0E0 +0 +0 +0.0000000000E0 +0.0000000000 +0 + +Testing scan +0.17976931348623157E309 0.17976931348623157E309 +0.8988465674311579E308 0.8988465674311579E308 +0.123E4 0.123E4 +0.123E2 0.123E2 +0.3141592653589793E1 0.3141592653589793E1 +0.2718281828459045E1 0.2718281828459045E1 +0.123E1 0.123E1 +0.123 0.123 +0.123E~2 0.123E~2 +0.22250738585072014E~307 0.22250738585072014E~307 +0.11125369292536007E~307 0.11125369292536007E~307 +0.5E~323 0.5E~323 +0.0 0.0 +~0.17976931348623157E309 ~0.17976931348623157E309 +~0.8988465674311579E308 ~0.8988465674311579E308 +~0.123E4 ~0.123E4 +~0.123E2 ~0.123E2 +~0.3141592653589793E1 ~0.3141592653589793E1 +~0.2718281828459045E1 ~0.2718281828459045E1 +~0.123E1 ~0.123E1 +~0.123 ~0.123 +~0.123E~2 ~0.123E~2 +~0.22250738585072014E~307 ~0.22250738585072014E~307 +~0.11125369292536007E~307 ~0.11125369292536007E~307 +~0.5E~323 ~0.5E~323 +~0.0 ~0.0 +inf inf +~inf ~inf +nan nan +inf inf + +Testing checkFloat + +Testing class, isFinite, isNan, isNormal +0.17976931348623157E309 normal + isFinite = true isNan = false isNormal = true +0.8988465674311579E308 normal + isFinite = true isNan = false isNormal = true +0.123E4 normal + isFinite = true isNan = false isNormal = true +0.123E2 normal + isFinite = true isNan = false isNormal = true +0.3141592653589793E1 normal + isFinite = true isNan = false isNormal = true +0.2718281828459045E1 normal + isFinite = true isNan = false isNormal = true +0.123E1 normal + isFinite = true isNan = false isNormal = true +0.123 normal + isFinite = true isNan = false isNormal = true +0.123E~2 normal + isFinite = true isNan = false isNormal = true +0.22250738585072014E~307 normal + isFinite = true isNan = false isNormal = true +0.11125369292536007E~307 subnormal + isFinite = true isNan = false isNormal = false +0.5E~323 subnormal + isFinite = true isNan = false isNormal = false +0.0 zero + isFinite = true isNan = false isNormal = false +~0.17976931348623157E309 normal + isFinite = true isNan = false isNormal = true +~0.8988465674311579E308 normal + isFinite = true isNan = false isNormal = true +~0.123E4 normal + isFinite = true isNan = false isNormal = true +~0.123E2 normal + isFinite = true isNan = false isNormal = true +~0.3141592653589793E1 normal + isFinite = true isNan = false isNormal = true +~0.2718281828459045E1 normal + isFinite = true isNan = false isNormal = true +~0.123E1 normal + isFinite = true isNan = false isNormal = true +~0.123 normal + isFinite = true isNan = false isNormal = true +~0.123E~2 normal + isFinite = true isNan = false isNormal = true +~0.22250738585072014E~307 normal + isFinite = true isNan = false isNormal = true +~0.11125369292536007E~307 subnormal + isFinite = true isNan = false isNormal = false +~0.5E~323 subnormal + isFinite = true isNan = false isNormal = false +~0.0 zero + isFinite = true isNan = false isNormal = false +inf inf + isFinite = false isNan = false isNormal = false +~inf inf + isFinite = false isNan = false isNormal = false +nan nan + isFinite = false isNan = true isNormal = false +inf inf + isFinite = false isNan = false isNormal = false + +Testing maxFinite, minPos, minNormalPos +1.79769313486E308 +1.79769313486E308 true -false -false -false -false +4.94065645841E~324 +4.94065645841E~324 true +2.22507385851E~308 +2.22507385851E~308 true +Testring fromString + +Testing {from,to}Decimal +inf inf true +inf inf true +~inf ~inf true +~inf ~inf true +inf inf true +inf inf true +~inf ~inf true +~inf ~inf true +nan nan true +nan nan true +~nan nan true +~nan nan true +0.0 0.0 true +0.0 0.0 true +0.0 0.0 true +~0.0 ~0.0 true +0.15E2 0.15E2 true +0.15E1 0.15E1 true +~0.15E2 ~0.15E2 true +0.15E2 0.15E2 true +0.15E~2 0.15E~2 true +0.15E~2 0.15E~2 true +0.15E~2 0.15E~2 true +0.12E1000 inf false +~0.12E1000 ~inf false +0.1E~998 0.0 false +~0.1E~998 ~0.0 false +inf inf true + +Testing {from,to}LargeInt +0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 +0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 +0.123E4 1230 0.123E4 +0.123E2 12 0.12E2 +0.3141592653589793E1 3 0.3E1 +0.2718281828459045E1 2 0.2E1 +0.123E1 1 0.1E1 +0.123 0 0.0 +0.123E~2 0 0.0 +0.22250738585072014E~307 0 0.0 +0.11125369292536007E~307 0 0.0 +0.5E~323 0 0.0 +0.0 0 0.0 +~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 +~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 +~0.123E4 ~1230 ~0.123E4 +~0.123E2 ~13 ~0.13E2 +~0.3141592653589793E1 ~4 ~0.4E1 +~0.2718281828459045E1 ~3 ~0.3E1 +~0.123E1 ~2 ~0.2E1 +~0.123 ~1 ~0.1E1 +~0.123E~2 ~1 ~0.1E1 +~0.22250738585072014E~307 ~1 ~0.1E1 +~0.11125369292536007E~307 ~1 ~0.1E1 +~0.5E~323 ~1 ~0.1E1 +~0.0 0 0.0 +nearest 0.0 0 +nearest ~0.0 0 +nearest 0.1E13 1000000000000 +nearest ~0.1E13 ~1000000000000 +nearest 0.25 0 +nearest ~0.25 0 +nearest 0.100000000000025E13 1000000000000 +nearest ~0.99999999999975E12 ~1000000000000 +nearest 0.5 0 +nearest ~0.5 0 +nearest 0.10000000000005E13 1000000000000 +nearest ~0.9999999999995E12 ~1000000000000 +nearest 0.75 1 +nearest ~0.75 ~1 +nearest 0.100000000000075E13 1000000000001 +nearest ~0.99999999999925E12 ~999999999999 +nearest 0.1E1 1 +nearest ~0.1E1 ~1 +nearest 0.1000000000001E13 1000000000001 +nearest ~0.999999999999E12 ~999999999999 +nearest 0.125E1 1 +nearest ~0.125E1 ~1 +nearest 0.100000000000125E13 1000000000001 +nearest ~0.99999999999875E12 ~999999999999 +nearest 0.15E1 2 +nearest ~0.15E1 ~2 +nearest 0.10000000000015E13 1000000000002 +nearest ~0.9999999999985E12 ~999999999998 +nearest 0.175E1 2 +nearest ~0.175E1 ~2 +nearest 0.100000000000175E13 1000000000002 +nearest ~0.99999999999825E12 ~999999999998 +nearest 0.2E1 2 +nearest ~0.2E1 ~2 +nearest 0.1000000000002E13 1000000000002 +nearest ~0.999999999998E12 ~999999999998 +nearest 0.25E1 2 +nearest ~0.25E1 ~2 +nearest 0.10000000000025E13 1000000000002 +nearest ~0.9999999999975E12 ~999999999998 +nearest 0.3E1 3 +nearest ~0.3E1 ~3 +nearest 0.1000000000003E13 1000000000003 +nearest ~0.999999999997E12 ~999999999997 +neginf 0.0 0 +neginf ~0.0 0 +neginf 0.1E13 1000000000000 +neginf ~0.1E13 ~1000000000000 +neginf 0.25 0 +neginf ~0.25 ~1 +neginf 0.100000000000025E13 1000000000000 +neginf ~0.99999999999975E12 ~1000000000000 +neginf 0.5 0 +neginf ~0.5 ~1 +neginf 0.10000000000005E13 1000000000000 +neginf ~0.9999999999995E12 ~1000000000000 +neginf 0.75 0 +neginf ~0.75 ~1 +neginf 0.100000000000075E13 1000000000000 +neginf ~0.99999999999925E12 ~1000000000000 +neginf 0.1E1 1 +neginf ~0.1E1 ~1 +neginf 0.1000000000001E13 1000000000001 +neginf ~0.999999999999E12 ~999999999999 +neginf 0.125E1 1 +neginf ~0.125E1 ~2 +neginf 0.100000000000125E13 1000000000001 +neginf ~0.99999999999875E12 ~999999999999 +neginf 0.15E1 1 +neginf ~0.15E1 ~2 +neginf 0.10000000000015E13 1000000000001 +neginf ~0.9999999999985E12 ~999999999999 +neginf 0.175E1 1 +neginf ~0.175E1 ~2 +neginf 0.100000000000175E13 1000000000001 +neginf ~0.99999999999825E12 ~999999999999 +neginf 0.2E1 2 +neginf ~0.2E1 ~2 +neginf 0.1000000000002E13 1000000000002 +neginf ~0.999999999998E12 ~999999999998 +neginf 0.25E1 2 +neginf ~0.25E1 ~3 +neginf 0.10000000000025E13 1000000000002 +neginf ~0.9999999999975E12 ~999999999998 +neginf 0.3E1 3 +neginf ~0.3E1 ~3 +neginf 0.1000000000003E13 1000000000003 +neginf ~0.999999999997E12 ~999999999997 +posinf 0.0 0 +posinf ~0.0 0 +posinf 0.1E13 1000000000000 +posinf ~0.1E13 ~1000000000000 +posinf 0.25 1 +posinf ~0.25 0 +posinf 0.100000000000025E13 1000000000001 +posinf ~0.99999999999975E12 ~999999999999 +posinf 0.5 1 +posinf ~0.5 0 +posinf 0.10000000000005E13 1000000000001 +posinf ~0.9999999999995E12 ~999999999999 +posinf 0.75 1 +posinf ~0.75 0 +posinf 0.100000000000075E13 1000000000001 +posinf ~0.99999999999925E12 ~999999999999 +posinf 0.1E1 1 +posinf ~0.1E1 ~1 +posinf 0.1000000000001E13 1000000000001 +posinf ~0.999999999999E12 ~999999999999 +posinf 0.125E1 2 +posinf ~0.125E1 ~1 +posinf 0.100000000000125E13 1000000000002 +posinf ~0.99999999999875E12 ~999999999998 +posinf 0.15E1 2 +posinf ~0.15E1 ~1 +posinf 0.10000000000015E13 1000000000002 +posinf ~0.9999999999985E12 ~999999999998 +posinf 0.175E1 2 +posinf ~0.175E1 ~1 +posinf 0.100000000000175E13 1000000000002 +posinf ~0.99999999999825E12 ~999999999998 +posinf 0.2E1 2 +posinf ~0.2E1 ~2 +posinf 0.1000000000002E13 1000000000002 +posinf ~0.999999999998E12 ~999999999998 +posinf 0.25E1 3 +posinf ~0.25E1 ~2 +posinf 0.10000000000025E13 1000000000003 +posinf ~0.9999999999975E12 ~999999999997 +posinf 0.3E1 3 +posinf ~0.3E1 ~3 +posinf 0.1000000000003E13 1000000000003 +posinf ~0.999999999997E12 ~999999999997 +zero 0.0 0 +zero ~0.0 0 +zero 0.1E13 1000000000000 +zero ~0.1E13 ~1000000000000 +zero 0.25 0 +zero ~0.25 0 +zero 0.100000000000025E13 1000000000000 +zero ~0.99999999999975E12 ~999999999999 +zero 0.5 0 +zero ~0.5 0 +zero 0.10000000000005E13 1000000000000 +zero ~0.9999999999995E12 ~999999999999 +zero 0.75 0 +zero ~0.75 0 +zero 0.100000000000075E13 1000000000000 +zero ~0.99999999999925E12 ~999999999999 +zero 0.1E1 1 +zero ~0.1E1 ~1 +zero 0.1000000000001E13 1000000000001 +zero ~0.999999999999E12 ~999999999999 +zero 0.125E1 1 +zero ~0.125E1 ~1 +zero 0.100000000000125E13 1000000000001 +zero ~0.99999999999875E12 ~999999999998 +zero 0.15E1 1 +zero ~0.15E1 ~1 +zero 0.10000000000015E13 1000000000001 +zero ~0.9999999999985E12 ~999999999998 +zero 0.175E1 1 +zero ~0.175E1 ~1 +zero 0.100000000000175E13 1000000000001 +zero ~0.99999999999825E12 ~999999999998 +zero 0.2E1 2 +zero ~0.2E1 ~2 +zero 0.1000000000002E13 1000000000002 +zero ~0.999999999998E12 ~999999999998 +zero 0.25E1 2 +zero ~0.25E1 ~2 +zero 0.10000000000025E13 1000000000002 +zero ~0.9999999999975E12 ~999999999997 +zero 0.3E1 3 +zero ~0.3E1 ~3 +zero 0.1000000000003E13 1000000000003 +zero ~0.999999999997E12 ~999999999997 + +Testing fromInt + +Testing toInt + +Testing ceil,floor,round,trunc + +Testing copySign, sameSign, sign, signBit + +Testing max, min + +Testing Real.{~,*,+,-,/,nextAfter,rem} +~ (0.17976931348623157E309) = ~0.17976931348623157E309 +~ (0.8988465674311579E308) = ~0.8988465674311579E308 +~ (0.123E4) = ~0.123E4 +~ (0.123E2) = ~0.123E2 +~ (0.3141592653589793E1) = ~0.3141592653589793E1 +~ (0.2718281828459045E1) = ~0.2718281828459045E1 +~ (0.123E1) = ~0.123E1 +~ (0.123) = ~0.123 +~ (0.123E~2) = ~0.123E~2 +~ (0.22250738585072014E~307) = ~0.22250738585072014E~307 +~ (0.11125369292536007E~307) = ~0.11125369292536007E~307 +~ (0.5E~323) = ~0.5E~323 +~ (0.0) = ~0.0 +~ (~0.17976931348623157E309) = 0.17976931348623157E309 +~ (~0.8988465674311579E308) = 0.8988465674311579E308 +~ (~0.123E4) = 0.123E4 +~ (~0.123E2) = 0.123E2 +~ (~0.3141592653589793E1) = 0.3141592653589793E1 +~ (~0.2718281828459045E1) = 0.2718281828459045E1 +~ (~0.123E1) = 0.123E1 +~ (~0.123) = 0.123 +~ (~0.123E~2) = 0.123E~2 +~ (~0.22250738585072014E~307) = 0.22250738585072014E~307 +~ (~0.11125369292536007E~307) = 0.11125369292536007E~307 +~ (~0.5E~323) = 0.5E~323 +~ (~0.0) = 0.0 +~ (inf) = ~inf +~ (~inf) = inf +~ (nan) = nan +~ (inf) = ~inf +* (0.17976931348623157E309, 0.17976931348623157E309) = inf ++ (0.17976931348623157E309, 0.17976931348623157E309) = inf +- (0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +/ (0.17976931348623157E309, 0.17976931348623157E309) = 0.1E1 +nextAfter (0.17976931348623157E309, 0.17976931348623157E309) = 0.17976931348623157E309 +rem (0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +* (0.17976931348623157E309, 0.8988465674311579E308) = inf ++ (0.17976931348623157E309, 0.8988465674311579E308) = inf +- (0.17976931348623157E309, 0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.17976931348623157E309, 0.8988465674311579E308) = 0.2E1 +nextAfter (0.17976931348623157E309, 0.8988465674311579E308) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.8988465674311579E308) = 0.0 +* (0.17976931348623157E309, 0.123E4) = inf ++ (0.17976931348623157E309, 0.123E4) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E4) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E4) = 0.1461539134034403E306 +nextAfter (0.17976931348623157E309, 0.123E4) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E4) = 0.0 +* (0.17976931348623157E309, 0.123E2) = inf ++ (0.17976931348623157E309, 0.123E2) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E2) = 0.1461539134034403E308 +nextAfter (0.17976931348623157E309, 0.123E2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E2) = 0.0 +* (0.17976931348623157E309, 0.3141592653589793E1) = inf ++ (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.3141592653589793E1) = 0.5722234971514056E308 +nextAfter (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.3141592653589793E1) = 0.0 +* (0.17976931348623157E309, 0.2718281828459045E1) = inf ++ (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.2718281828459045E1) = 0.661334345850887E308 +nextAfter (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.2718281828459045E1) = 0.199584030953472E293 +* (0.17976931348623157E309, 0.123E1) = inf ++ (0.17976931348623157E309, 0.123E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E1) = 0.1461539134034403E309 +nextAfter (0.17976931348623157E309, 0.123E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E1) = 0.199584030953472E293 +* (0.17976931348623157E309, 0.123) = 0.22111625558806483E308 ++ (0.17976931348623157E309, 0.123) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123) = inf +nextAfter (0.17976931348623157E309, 0.123) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123) = ~inf +* (0.17976931348623157E309, 0.123E~2) = 0.2211162555880648E306 ++ (0.17976931348623157E309, 0.123E~2) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E~2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E~2) = inf +nextAfter (0.17976931348623157E309, 0.123E~2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E~2) = ~inf +* (0.17976931348623157E309, 0.22250738585072014E~307) = 0.39999999999999996E1 ++ (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.22250738585072014E~307) = inf +nextAfter (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.22250738585072014E~307) = ~inf +* (0.17976931348623157E309, 0.11125369292536007E~307) = 0.19999999999999998E1 ++ (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.11125369292536007E~307) = inf +nextAfter (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.11125369292536007E~307) = ~inf +* (0.17976931348623157E309, 0.5E~323) = 0.8881784197001251E~15 ++ (0.17976931348623157E309, 0.5E~323) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.5E~323) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.5E~323) = inf +nextAfter (0.17976931348623157E309, 0.5E~323) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.5E~323) = ~inf +* (0.17976931348623157E309, 0.0) = 0.0 ++ (0.17976931348623157E309, 0.0) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.0) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.0) = inf +nextAfter (0.17976931348623157E309, 0.0) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.0) = nan +* (0.17976931348623157E309, ~0.17976931348623157E309) = ~inf ++ (0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +- (0.17976931348623157E309, ~0.17976931348623157E309) = inf +/ (0.17976931348623157E309, ~0.17976931348623157E309) = ~0.1E1 +nextAfter (0.17976931348623157E309, ~0.17976931348623157E309) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +* (0.17976931348623157E309, ~0.8988465674311579E308) = ~inf ++ (0.17976931348623157E309, ~0.8988465674311579E308) = 0.8988465674311579E308 +- (0.17976931348623157E309, ~0.8988465674311579E308) = inf +/ (0.17976931348623157E309, ~0.8988465674311579E308) = ~0.2E1 +nextAfter (0.17976931348623157E309, ~0.8988465674311579E308) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.8988465674311579E308) = 0.0 +* (0.17976931348623157E309, ~0.123E4) = ~inf ++ (0.17976931348623157E309, ~0.123E4) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E4) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E4) = ~0.1461539134034403E306 +nextAfter (0.17976931348623157E309, ~0.123E4) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E4) = 0.0 +* (0.17976931348623157E309, ~0.123E2) = ~inf ++ (0.17976931348623157E309, ~0.123E2) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E2) = ~0.1461539134034403E308 +nextAfter (0.17976931348623157E309, ~0.123E2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E2) = 0.0 +* (0.17976931348623157E309, ~0.3141592653589793E1) = ~inf ++ (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.3141592653589793E1) = ~0.5722234971514056E308 +nextAfter (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.3141592653589793E1) = 0.0 +* (0.17976931348623157E309, ~0.2718281828459045E1) = ~inf ++ (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.2718281828459045E1) = ~0.661334345850887E308 +nextAfter (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.2718281828459045E1) = 0.199584030953472E293 +* (0.17976931348623157E309, ~0.123E1) = ~inf ++ (0.17976931348623157E309, ~0.123E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E1) = ~0.1461539134034403E309 +nextAfter (0.17976931348623157E309, ~0.123E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E1) = 0.199584030953472E293 +* (0.17976931348623157E309, ~0.123) = ~0.22111625558806483E308 ++ (0.17976931348623157E309, ~0.123) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123) = ~inf +nextAfter (0.17976931348623157E309, ~0.123) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123) = ~inf +* (0.17976931348623157E309, ~0.123E~2) = ~0.2211162555880648E306 ++ (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E~2) = ~inf +nextAfter (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E~2) = ~inf +* (0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.39999999999999996E1 ++ (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.22250738585072014E~307) = ~inf +nextAfter (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.22250738585072014E~307) = ~inf +* (0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.19999999999999998E1 ++ (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.11125369292536007E~307) = ~inf +nextAfter (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.11125369292536007E~307) = ~inf +* (0.17976931348623157E309, ~0.5E~323) = ~0.8881784197001251E~15 ++ (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.5E~323) = ~inf +nextAfter (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.5E~323) = ~inf +* (0.17976931348623157E309, ~0.0) = ~0.0 ++ (0.17976931348623157E309, ~0.0) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.0) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.0) = ~inf +nextAfter (0.17976931348623157E309, ~0.0) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.0) = nan +* (0.17976931348623157E309, inf) = inf ++ (0.17976931348623157E309, inf) = inf +- (0.17976931348623157E309, inf) = ~inf +/ (0.17976931348623157E309, inf) = 0.0 +nextAfter (0.17976931348623157E309, inf) = inf +rem (0.17976931348623157E309, inf) = 0.17976931348623157E309 +* (0.17976931348623157E309, ~inf) = ~inf ++ (0.17976931348623157E309, ~inf) = ~inf +- (0.17976931348623157E309, ~inf) = inf +/ (0.17976931348623157E309, ~inf) = ~0.0 +nextAfter (0.17976931348623157E309, ~inf) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~inf) = 0.17976931348623157E309 +* (0.17976931348623157E309, nan) = nan ++ (0.17976931348623157E309, nan) = nan +- (0.17976931348623157E309, nan) = nan +/ (0.17976931348623157E309, nan) = nan +nextAfter (0.17976931348623157E309, nan) = nan +rem (0.17976931348623157E309, nan) = nan +* (0.17976931348623157E309, inf) = inf ++ (0.17976931348623157E309, inf) = inf +- (0.17976931348623157E309, inf) = ~inf +/ (0.17976931348623157E309, inf) = 0.0 +nextAfter (0.17976931348623157E309, inf) = inf +rem (0.17976931348623157E309, inf) = 0.17976931348623157E309 +* (0.8988465674311579E308, 0.17976931348623157E309) = inf ++ (0.8988465674311579E308, 0.17976931348623157E309) = inf +- (0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311579E308 +/ (0.8988465674311579E308, 0.17976931348623157E309) = 0.5 +nextAfter (0.8988465674311579E308, 0.17976931348623157E309) = 0.898846567431158E308 +rem (0.8988465674311579E308, 0.17976931348623157E309) = 0.8988465674311579E308 +* (0.8988465674311579E308, 0.8988465674311579E308) = inf ++ (0.8988465674311579E308, 0.8988465674311579E308) = 0.17976931348623157E309 +- (0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +/ (0.8988465674311579E308, 0.8988465674311579E308) = 0.1E1 +nextAfter (0.8988465674311579E308, 0.8988465674311579E308) = 0.8988465674311579E308 +rem (0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +* (0.8988465674311579E308, 0.123E4) = inf ++ (0.8988465674311579E308, 0.123E4) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E4) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E4) = 0.7307695670172015E305 +nextAfter (0.8988465674311579E308, 0.123E4) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E4) = 0.0 +* (0.8988465674311579E308, 0.123E2) = inf ++ (0.8988465674311579E308, 0.123E2) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E2) = 0.7307695670172014E307 +nextAfter (0.8988465674311579E308, 0.123E2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E2) = 0.0 +* (0.8988465674311579E308, 0.3141592653589793E1) = inf ++ (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.3141592653589793E1) = 0.2861117485757028E308 +nextAfter (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.3141592653589793E1) = 0.0 +* (0.8988465674311579E308, 0.2718281828459045E1) = inf ++ (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.2718281828459045E1) = 0.3306671729254435E308 +nextAfter (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.2718281828459045E1) = 0.99792015476736E292 +* (0.8988465674311579E308, 0.123E1) = 0.1105581277940324E309 ++ (0.8988465674311579E308, 0.123E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E1) = 0.7307695670172015E308 +nextAfter (0.8988465674311579E308, 0.123E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E1) = 0.99792015476736E292 +* (0.8988465674311579E308, 0.123) = 0.11055812779403241E308 ++ (0.8988465674311579E308, 0.123) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123) = inf +nextAfter (0.8988465674311579E308, 0.123) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123) = ~inf +* (0.8988465674311579E308, 0.123E~2) = 0.1105581277940324E306 ++ (0.8988465674311579E308, 0.123E~2) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E~2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E~2) = inf +nextAfter (0.8988465674311579E308, 0.123E~2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E~2) = ~inf +* (0.8988465674311579E308, 0.22250738585072014E~307) = 0.19999999999999998E1 ++ (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.22250738585072014E~307) = inf +nextAfter (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.22250738585072014E~307) = ~inf +* (0.8988465674311579E308, 0.11125369292536007E~307) = 0.9999999999999999 ++ (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.11125369292536007E~307) = inf +nextAfter (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.11125369292536007E~307) = ~inf +* (0.8988465674311579E308, 0.5E~323) = 0.44408920985006257E~15 ++ (0.8988465674311579E308, 0.5E~323) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.5E~323) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.5E~323) = inf +nextAfter (0.8988465674311579E308, 0.5E~323) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.5E~323) = ~inf +* (0.8988465674311579E308, 0.0) = 0.0 ++ (0.8988465674311579E308, 0.0) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.0) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.0) = inf +nextAfter (0.8988465674311579E308, 0.0) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.0) = nan +* (0.8988465674311579E308, ~0.17976931348623157E309) = ~inf ++ (0.8988465674311579E308, ~0.17976931348623157E309) = ~0.8988465674311579E308 +- (0.8988465674311579E308, ~0.17976931348623157E309) = inf +/ (0.8988465674311579E308, ~0.17976931348623157E309) = ~0.5 +nextAfter (0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311579E308 +* (0.8988465674311579E308, ~0.8988465674311579E308) = ~inf ++ (0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +- (0.8988465674311579E308, ~0.8988465674311579E308) = 0.17976931348623157E309 +/ (0.8988465674311579E308, ~0.8988465674311579E308) = ~0.1E1 +nextAfter (0.8988465674311579E308, ~0.8988465674311579E308) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +* (0.8988465674311579E308, ~0.123E4) = ~inf ++ (0.8988465674311579E308, ~0.123E4) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E4) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E4) = ~0.7307695670172015E305 +nextAfter (0.8988465674311579E308, ~0.123E4) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E4) = 0.0 +* (0.8988465674311579E308, ~0.123E2) = ~inf ++ (0.8988465674311579E308, ~0.123E2) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E2) = ~0.7307695670172014E307 +nextAfter (0.8988465674311579E308, ~0.123E2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E2) = 0.0 +* (0.8988465674311579E308, ~0.3141592653589793E1) = ~inf ++ (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.3141592653589793E1) = ~0.2861117485757028E308 +nextAfter (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.3141592653589793E1) = 0.0 +* (0.8988465674311579E308, ~0.2718281828459045E1) = ~inf ++ (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.2718281828459045E1) = ~0.3306671729254435E308 +nextAfter (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.2718281828459045E1) = 0.99792015476736E292 +* (0.8988465674311579E308, ~0.123E1) = ~0.1105581277940324E309 ++ (0.8988465674311579E308, ~0.123E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E1) = ~0.7307695670172015E308 +nextAfter (0.8988465674311579E308, ~0.123E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E1) = 0.99792015476736E292 +* (0.8988465674311579E308, ~0.123) = ~0.11055812779403241E308 ++ (0.8988465674311579E308, ~0.123) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123) = ~inf +nextAfter (0.8988465674311579E308, ~0.123) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123) = ~inf +* (0.8988465674311579E308, ~0.123E~2) = ~0.1105581277940324E306 ++ (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E~2) = ~inf +nextAfter (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E~2) = ~inf +* (0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.19999999999999998E1 ++ (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.22250738585072014E~307) = ~inf +nextAfter (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.22250738585072014E~307) = ~inf +* (0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.9999999999999999 ++ (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.11125369292536007E~307) = ~inf +nextAfter (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.11125369292536007E~307) = ~inf +* (0.8988465674311579E308, ~0.5E~323) = ~0.44408920985006257E~15 ++ (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.5E~323) = ~inf +nextAfter (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.5E~323) = ~inf +* (0.8988465674311579E308, ~0.0) = ~0.0 ++ (0.8988465674311579E308, ~0.0) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.0) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.0) = ~inf +nextAfter (0.8988465674311579E308, ~0.0) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.0) = nan +* (0.8988465674311579E308, inf) = inf ++ (0.8988465674311579E308, inf) = inf +- (0.8988465674311579E308, inf) = ~inf +/ (0.8988465674311579E308, inf) = 0.0 +nextAfter (0.8988465674311579E308, inf) = 0.898846567431158E308 +rem (0.8988465674311579E308, inf) = 0.8988465674311579E308 +* (0.8988465674311579E308, ~inf) = ~inf ++ (0.8988465674311579E308, ~inf) = ~inf +- (0.8988465674311579E308, ~inf) = inf +/ (0.8988465674311579E308, ~inf) = ~0.0 +nextAfter (0.8988465674311579E308, ~inf) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~inf) = 0.8988465674311579E308 +* (0.8988465674311579E308, nan) = nan ++ (0.8988465674311579E308, nan) = nan +- (0.8988465674311579E308, nan) = nan +/ (0.8988465674311579E308, nan) = nan +nextAfter (0.8988465674311579E308, nan) = nan +rem (0.8988465674311579E308, nan) = nan +* (0.8988465674311579E308, inf) = inf ++ (0.8988465674311579E308, inf) = inf +- (0.8988465674311579E308, inf) = ~inf +/ (0.8988465674311579E308, inf) = 0.0 +nextAfter (0.8988465674311579E308, inf) = 0.898846567431158E308 +rem (0.8988465674311579E308, inf) = 0.8988465674311579E308 +* (0.123E4, 0.17976931348623157E309) = inf ++ (0.123E4, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E4, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E4, 0.17976931348623157E309) = 0.6842102114909646E~305 +nextAfter (0.123E4, 0.17976931348623157E309) = 0.12300000000000002E4 +rem (0.123E4, 0.17976931348623157E309) = 0.123E4 +* (0.123E4, 0.8988465674311579E308) = inf ++ (0.123E4, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E4, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E4, 0.8988465674311579E308) = 0.1368420422981929E~304 +nextAfter (0.123E4, 0.8988465674311579E308) = 0.12300000000000002E4 +rem (0.123E4, 0.8988465674311579E308) = 0.123E4 +* (0.123E4, 0.123E4) = 0.15129E7 ++ (0.123E4, 0.123E4) = 0.246E4 +- (0.123E4, 0.123E4) = 0.0 +/ (0.123E4, 0.123E4) = 0.1E1 +nextAfter (0.123E4, 0.123E4) = 0.123E4 +rem (0.123E4, 0.123E4) = 0.0 +* (0.123E4, 0.123E2) = 0.15129E5 ++ (0.123E4, 0.123E2) = 0.12423E4 +- (0.123E4, 0.123E2) = 0.12177E4 +/ (0.123E4, 0.123E2) = 0.1E3 +nextAfter (0.123E4, 0.123E2) = 0.12299999999999998E4 +rem (0.123E4, 0.123E2) = 0.0 +* (0.123E4, 0.3141592653589793E1) = 0.38641589639154454E4 ++ (0.123E4, 0.3141592653589793E1) = 0.123314159265359E4 +- (0.123E4, 0.3141592653589793E1) = 0.122685840734641E4 +/ (0.123E4, 0.3141592653589793E1) = 0.39152116000606253E3 +nextAfter (0.123E4, 0.3141592653589793E1) = 0.12299999999999998E4 +rem (0.123E4, 0.3141592653589793E1) = 0.16372724463908526E1 +* (0.123E4, 0.2718281828459045E1) = 0.33434866490046256E4 ++ (0.123E4, 0.2718281828459045E1) = 0.1232718281828459E4 +- (0.123E4, 0.2718281828459045E1) = 0.1227281718171541E4 +/ (0.123E4, 0.2718281828459045E1) = 0.4524917126408741E3 +nextAfter (0.123E4, 0.2718281828459045E1) = 0.12299999999999998E4 +rem (0.123E4, 0.2718281828459045E1) = 0.13366135365115497E1 +* (0.123E4, 0.123E1) = 0.15129E4 ++ (0.123E4, 0.123E1) = 0.123123E4 +- (0.123E4, 0.123E1) = 0.122877E4 +/ (0.123E4, 0.123E1) = 0.1E4 +nextAfter (0.123E4, 0.123E1) = 0.12299999999999998E4 +rem (0.123E4, 0.123E1) = 0.0 +* (0.123E4, 0.123) = 0.15129E3 ++ (0.123E4, 0.123) = 0.1230123E4 +- (0.123E4, 0.123) = 0.1229877E4 +/ (0.123E4, 0.123) = 0.1E5 +nextAfter (0.123E4, 0.123) = 0.12299999999999998E4 +rem (0.123E4, 0.123) = 0.0 +* (0.123E4, 0.123E~2) = 0.15129E1 ++ (0.123E4, 0.123E~2) = 0.123000123E4 +- (0.123E4, 0.123E~2) = 0.122999877E4 +/ (0.123E4, 0.123E~2) = 0.1E7 +nextAfter (0.123E4, 0.123E~2) = 0.12299999999999998E4 +rem (0.123E4, 0.123E~2) = 0.0 +* (0.123E4, 0.22250738585072014E~307) = 0.27368408459638577E~304 ++ (0.123E4, 0.22250738585072014E~307) = 0.123E4 +- (0.123E4, 0.22250738585072014E~307) = 0.123E4 +/ (0.123E4, 0.22250738585072014E~307) = inf +nextAfter (0.123E4, 0.22250738585072014E~307) = 0.12299999999999998E4 +rem (0.123E4, 0.22250738585072014E~307) = ~inf +* (0.123E4, 0.11125369292536007E~307) = 0.13684204229819289E~304 ++ (0.123E4, 0.11125369292536007E~307) = 0.123E4 +- (0.123E4, 0.11125369292536007E~307) = 0.123E4 +/ (0.123E4, 0.11125369292536007E~307) = inf +nextAfter (0.123E4, 0.11125369292536007E~307) = 0.12299999999999998E4 +rem (0.123E4, 0.11125369292536007E~307) = ~inf +* (0.123E4, 0.5E~323) = 0.6077E~320 ++ (0.123E4, 0.5E~323) = 0.123E4 +- (0.123E4, 0.5E~323) = 0.123E4 +/ (0.123E4, 0.5E~323) = inf +nextAfter (0.123E4, 0.5E~323) = 0.12299999999999998E4 +rem (0.123E4, 0.5E~323) = ~inf +* (0.123E4, 0.0) = 0.0 ++ (0.123E4, 0.0) = 0.123E4 +- (0.123E4, 0.0) = 0.123E4 +/ (0.123E4, 0.0) = inf +nextAfter (0.123E4, 0.0) = 0.12299999999999998E4 +rem (0.123E4, 0.0) = nan +* (0.123E4, ~0.17976931348623157E309) = ~inf ++ (0.123E4, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E4, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E4, ~0.17976931348623157E309) = ~0.6842102114909646E~305 +nextAfter (0.123E4, ~0.17976931348623157E309) = 0.12299999999999998E4 +rem (0.123E4, ~0.17976931348623157E309) = 0.123E4 +* (0.123E4, ~0.8988465674311579E308) = ~inf ++ (0.123E4, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E4, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E4, ~0.8988465674311579E308) = ~0.1368420422981929E~304 +nextAfter (0.123E4, ~0.8988465674311579E308) = 0.12299999999999998E4 +rem (0.123E4, ~0.8988465674311579E308) = 0.123E4 +* (0.123E4, ~0.123E4) = ~0.15129E7 ++ (0.123E4, ~0.123E4) = 0.0 +- (0.123E4, ~0.123E4) = 0.246E4 +/ (0.123E4, ~0.123E4) = ~0.1E1 +nextAfter (0.123E4, ~0.123E4) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E4) = 0.0 +* (0.123E4, ~0.123E2) = ~0.15129E5 ++ (0.123E4, ~0.123E2) = 0.12177E4 +- (0.123E4, ~0.123E2) = 0.12423E4 +/ (0.123E4, ~0.123E2) = ~0.1E3 +nextAfter (0.123E4, ~0.123E2) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E2) = 0.0 +* (0.123E4, ~0.3141592653589793E1) = ~0.38641589639154454E4 ++ (0.123E4, ~0.3141592653589793E1) = 0.122685840734641E4 +- (0.123E4, ~0.3141592653589793E1) = 0.123314159265359E4 +/ (0.123E4, ~0.3141592653589793E1) = ~0.39152116000606253E3 +nextAfter (0.123E4, ~0.3141592653589793E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.3141592653589793E1) = 0.16372724463908526E1 +* (0.123E4, ~0.2718281828459045E1) = ~0.33434866490046256E4 ++ (0.123E4, ~0.2718281828459045E1) = 0.1227281718171541E4 +- (0.123E4, ~0.2718281828459045E1) = 0.1232718281828459E4 +/ (0.123E4, ~0.2718281828459045E1) = ~0.4524917126408741E3 +nextAfter (0.123E4, ~0.2718281828459045E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.2718281828459045E1) = 0.13366135365115497E1 +* (0.123E4, ~0.123E1) = ~0.15129E4 ++ (0.123E4, ~0.123E1) = 0.122877E4 +- (0.123E4, ~0.123E1) = 0.123123E4 +/ (0.123E4, ~0.123E1) = ~0.1E4 +nextAfter (0.123E4, ~0.123E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E1) = 0.0 +* (0.123E4, ~0.123) = ~0.15129E3 ++ (0.123E4, ~0.123) = 0.1229877E4 +- (0.123E4, ~0.123) = 0.1230123E4 +/ (0.123E4, ~0.123) = ~0.1E5 +nextAfter (0.123E4, ~0.123) = 0.12299999999999998E4 +rem (0.123E4, ~0.123) = 0.0 +* (0.123E4, ~0.123E~2) = ~0.15129E1 ++ (0.123E4, ~0.123E~2) = 0.122999877E4 +- (0.123E4, ~0.123E~2) = 0.123000123E4 +/ (0.123E4, ~0.123E~2) = ~0.1E7 +nextAfter (0.123E4, ~0.123E~2) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E~2) = 0.0 +* (0.123E4, ~0.22250738585072014E~307) = ~0.27368408459638577E~304 ++ (0.123E4, ~0.22250738585072014E~307) = 0.123E4 +- (0.123E4, ~0.22250738585072014E~307) = 0.123E4 +/ (0.123E4, ~0.22250738585072014E~307) = ~inf +nextAfter (0.123E4, ~0.22250738585072014E~307) = 0.12299999999999998E4 +rem (0.123E4, ~0.22250738585072014E~307) = ~inf +* (0.123E4, ~0.11125369292536007E~307) = ~0.13684204229819289E~304 ++ (0.123E4, ~0.11125369292536007E~307) = 0.123E4 +- (0.123E4, ~0.11125369292536007E~307) = 0.123E4 +/ (0.123E4, ~0.11125369292536007E~307) = ~inf +nextAfter (0.123E4, ~0.11125369292536007E~307) = 0.12299999999999998E4 +rem (0.123E4, ~0.11125369292536007E~307) = ~inf +* (0.123E4, ~0.5E~323) = ~0.6077E~320 ++ (0.123E4, ~0.5E~323) = 0.123E4 +- (0.123E4, ~0.5E~323) = 0.123E4 +/ (0.123E4, ~0.5E~323) = ~inf +nextAfter (0.123E4, ~0.5E~323) = 0.12299999999999998E4 +rem (0.123E4, ~0.5E~323) = ~inf +* (0.123E4, ~0.0) = ~0.0 ++ (0.123E4, ~0.0) = 0.123E4 +- (0.123E4, ~0.0) = 0.123E4 +/ (0.123E4, ~0.0) = ~inf +nextAfter (0.123E4, ~0.0) = 0.12299999999999998E4 +rem (0.123E4, ~0.0) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300000000000002E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E4, ~inf) = ~inf ++ (0.123E4, ~inf) = ~inf +- (0.123E4, ~inf) = inf +/ (0.123E4, ~inf) = ~0.0 +nextAfter (0.123E4, ~inf) = 0.12299999999999998E4 +rem (0.123E4, ~inf) = 0.123E4 +* (0.123E4, nan) = nan ++ (0.123E4, nan) = nan +- (0.123E4, nan) = nan +/ (0.123E4, nan) = nan +nextAfter (0.123E4, nan) = nan +rem (0.123E4, nan) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300000000000002E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E2, 0.17976931348623157E309) = inf ++ (0.123E2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E2, 0.17976931348623157E309) = 0.6842102114909646E~307 +nextAfter (0.123E2, 0.17976931348623157E309) = 0.12300000000000002E2 +rem (0.123E2, 0.17976931348623157E309) = 0.123E2 +* (0.123E2, 0.8988465674311579E308) = inf ++ (0.123E2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E2, 0.8988465674311579E308) = 0.13684204229819291E~306 +nextAfter (0.123E2, 0.8988465674311579E308) = 0.12300000000000002E2 +rem (0.123E2, 0.8988465674311579E308) = 0.123E2 +* (0.123E2, 0.123E4) = 0.15129E5 ++ (0.123E2, 0.123E4) = 0.12423E4 +- (0.123E2, 0.123E4) = ~0.12177E4 +/ (0.123E2, 0.123E4) = 0.1E~1 +nextAfter (0.123E2, 0.123E4) = 0.12300000000000002E2 +rem (0.123E2, 0.123E4) = 0.123E2 +* (0.123E2, 0.123E2) = 0.15129000000000002E3 ++ (0.123E2, 0.123E2) = 0.246E2 +- (0.123E2, 0.123E2) = 0.0 +/ (0.123E2, 0.123E2) = 0.1E1 +nextAfter (0.123E2, 0.123E2) = 0.123E2 +rem (0.123E2, 0.123E2) = 0.0 +* (0.123E2, 0.3141592653589793E1) = 0.3864158963915446E2 ++ (0.123E2, 0.3141592653589793E1) = 0.15441592653589794E2 +- (0.123E2, 0.3141592653589793E1) = 0.9158407346410208E1 +/ (0.123E2, 0.3141592653589793E1) = 0.3915211600060626E1 +nextAfter (0.123E2, 0.3141592653589793E1) = 0.12299999999999999E2 +rem (0.123E2, 0.3141592653589793E1) = 0.28752220392306214E1 +* (0.123E2, 0.2718281828459045E1) = 0.33434866490046254E2 ++ (0.123E2, 0.2718281828459045E1) = 0.15018281828459045E2 +- (0.123E2, 0.2718281828459045E1) = 0.9581718171540956E1 +/ (0.123E2, 0.2718281828459045E1) = 0.4524917126408741E1 +nextAfter (0.123E2, 0.2718281828459045E1) = 0.12299999999999999E2 +rem (0.123E2, 0.2718281828459045E1) = 0.14268726861638203E1 +* (0.123E2, 0.123E1) = 0.15129000000000001E2 ++ (0.123E2, 0.123E1) = 0.13530000000000001E2 +- (0.123E2, 0.123E1) = 0.1107E2 +/ (0.123E2, 0.123E1) = 0.1E2 +nextAfter (0.123E2, 0.123E1) = 0.12299999999999999E2 +rem (0.123E2, 0.123E1) = 0.0 +* (0.123E2, 0.123) = 0.15129000000000001E1 ++ (0.123E2, 0.123) = 0.12423E2 +- (0.123E2, 0.123) = 0.12177000000000001E2 +/ (0.123E2, 0.123) = 0.10000000000000001E3 +nextAfter (0.123E2, 0.123) = 0.12299999999999999E2 +rem (0.123E2, 0.123) = 0.0 +* (0.123E2, 0.123E~2) = 0.15129E~1 ++ (0.123E2, 0.123E~2) = 0.1230123E2 +- (0.123E2, 0.123E~2) = 0.12298770000000001E2 +/ (0.123E2, 0.123E~2) = 0.1E5 +nextAfter (0.123E2, 0.123E~2) = 0.12299999999999999E2 +rem (0.123E2, 0.123E~2) = 0.17763568394002505E~14 +* (0.123E2, 0.22250738585072014E~307) = 0.2736840845963858E~306 ++ (0.123E2, 0.22250738585072014E~307) = 0.123E2 +- (0.123E2, 0.22250738585072014E~307) = 0.123E2 +/ (0.123E2, 0.22250738585072014E~307) = inf +nextAfter (0.123E2, 0.22250738585072014E~307) = 0.12299999999999999E2 +rem (0.123E2, 0.22250738585072014E~307) = ~inf +* (0.123E2, 0.11125369292536007E~307) = 0.1368420422981929E~306 ++ (0.123E2, 0.11125369292536007E~307) = 0.123E2 +- (0.123E2, 0.11125369292536007E~307) = 0.123E2 +/ (0.123E2, 0.11125369292536007E~307) = inf +nextAfter (0.123E2, 0.11125369292536007E~307) = 0.12299999999999999E2 +rem (0.123E2, 0.11125369292536007E~307) = ~inf +* (0.123E2, 0.5E~323) = 0.6E~322 ++ (0.123E2, 0.5E~323) = 0.123E2 +- (0.123E2, 0.5E~323) = 0.123E2 +/ (0.123E2, 0.5E~323) = inf +nextAfter (0.123E2, 0.5E~323) = 0.12299999999999999E2 +rem (0.123E2, 0.5E~323) = ~inf +* (0.123E2, 0.0) = 0.0 ++ (0.123E2, 0.0) = 0.123E2 +- (0.123E2, 0.0) = 0.123E2 +/ (0.123E2, 0.0) = inf +nextAfter (0.123E2, 0.0) = 0.12299999999999999E2 +rem (0.123E2, 0.0) = nan +* (0.123E2, ~0.17976931348623157E309) = ~inf ++ (0.123E2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E2, ~0.17976931348623157E309) = ~0.6842102114909646E~307 +nextAfter (0.123E2, ~0.17976931348623157E309) = 0.12299999999999999E2 +rem (0.123E2, ~0.17976931348623157E309) = 0.123E2 +* (0.123E2, ~0.8988465674311579E308) = ~inf ++ (0.123E2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E2, ~0.8988465674311579E308) = ~0.13684204229819291E~306 +nextAfter (0.123E2, ~0.8988465674311579E308) = 0.12299999999999999E2 +rem (0.123E2, ~0.8988465674311579E308) = 0.123E2 +* (0.123E2, ~0.123E4) = ~0.15129E5 ++ (0.123E2, ~0.123E4) = ~0.12177E4 +- (0.123E2, ~0.123E4) = 0.12423E4 +/ (0.123E2, ~0.123E4) = ~0.1E~1 +nextAfter (0.123E2, ~0.123E4) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E4) = 0.123E2 +* (0.123E2, ~0.123E2) = ~0.15129000000000002E3 ++ (0.123E2, ~0.123E2) = 0.0 +- (0.123E2, ~0.123E2) = 0.246E2 +/ (0.123E2, ~0.123E2) = ~0.1E1 +nextAfter (0.123E2, ~0.123E2) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E2) = 0.0 +* (0.123E2, ~0.3141592653589793E1) = ~0.3864158963915446E2 ++ (0.123E2, ~0.3141592653589793E1) = 0.9158407346410208E1 +- (0.123E2, ~0.3141592653589793E1) = 0.15441592653589794E2 +/ (0.123E2, ~0.3141592653589793E1) = ~0.3915211600060626E1 +nextAfter (0.123E2, ~0.3141592653589793E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.3141592653589793E1) = 0.28752220392306214E1 +* (0.123E2, ~0.2718281828459045E1) = ~0.33434866490046254E2 ++ (0.123E2, ~0.2718281828459045E1) = 0.9581718171540956E1 +- (0.123E2, ~0.2718281828459045E1) = 0.15018281828459045E2 +/ (0.123E2, ~0.2718281828459045E1) = ~0.4524917126408741E1 +nextAfter (0.123E2, ~0.2718281828459045E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.2718281828459045E1) = 0.14268726861638203E1 +* (0.123E2, ~0.123E1) = ~0.15129000000000001E2 ++ (0.123E2, ~0.123E1) = 0.1107E2 +- (0.123E2, ~0.123E1) = 0.13530000000000001E2 +/ (0.123E2, ~0.123E1) = ~0.1E2 +nextAfter (0.123E2, ~0.123E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E1) = 0.0 +* (0.123E2, ~0.123) = ~0.15129000000000001E1 ++ (0.123E2, ~0.123) = 0.12177000000000001E2 +- (0.123E2, ~0.123) = 0.12423E2 +/ (0.123E2, ~0.123) = ~0.10000000000000001E3 +nextAfter (0.123E2, ~0.123) = 0.12299999999999999E2 +rem (0.123E2, ~0.123) = 0.0 +* (0.123E2, ~0.123E~2) = ~0.15129E~1 ++ (0.123E2, ~0.123E~2) = 0.12298770000000001E2 +- (0.123E2, ~0.123E~2) = 0.1230123E2 +/ (0.123E2, ~0.123E~2) = ~0.1E5 +nextAfter (0.123E2, ~0.123E~2) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E~2) = 0.17763568394002505E~14 +* (0.123E2, ~0.22250738585072014E~307) = ~0.2736840845963858E~306 ++ (0.123E2, ~0.22250738585072014E~307) = 0.123E2 +- (0.123E2, ~0.22250738585072014E~307) = 0.123E2 +/ (0.123E2, ~0.22250738585072014E~307) = ~inf +nextAfter (0.123E2, ~0.22250738585072014E~307) = 0.12299999999999999E2 +rem (0.123E2, ~0.22250738585072014E~307) = ~inf +* (0.123E2, ~0.11125369292536007E~307) = ~0.1368420422981929E~306 ++ (0.123E2, ~0.11125369292536007E~307) = 0.123E2 +- (0.123E2, ~0.11125369292536007E~307) = 0.123E2 +/ (0.123E2, ~0.11125369292536007E~307) = ~inf +nextAfter (0.123E2, ~0.11125369292536007E~307) = 0.12299999999999999E2 +rem (0.123E2, ~0.11125369292536007E~307) = ~inf +* (0.123E2, ~0.5E~323) = ~0.6E~322 ++ (0.123E2, ~0.5E~323) = 0.123E2 +- (0.123E2, ~0.5E~323) = 0.123E2 +/ (0.123E2, ~0.5E~323) = ~inf +nextAfter (0.123E2, ~0.5E~323) = 0.12299999999999999E2 +rem (0.123E2, ~0.5E~323) = ~inf +* (0.123E2, ~0.0) = ~0.0 ++ (0.123E2, ~0.0) = 0.123E2 +- (0.123E2, ~0.0) = 0.123E2 +/ (0.123E2, ~0.0) = ~inf +nextAfter (0.123E2, ~0.0) = 0.12299999999999999E2 +rem (0.123E2, ~0.0) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300000000000002E2 +rem (0.123E2, inf) = 0.123E2 +* (0.123E2, ~inf) = ~inf ++ (0.123E2, ~inf) = ~inf +- (0.123E2, ~inf) = inf +/ (0.123E2, ~inf) = ~0.0 +nextAfter (0.123E2, ~inf) = 0.12299999999999999E2 +rem (0.123E2, ~inf) = 0.123E2 +* (0.123E2, nan) = nan ++ (0.123E2, nan) = nan +- (0.123E2, nan) = nan +/ (0.123E2, nan) = nan +nextAfter (0.123E2, nan) = nan +rem (0.123E2, nan) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300000000000002E2 +rem (0.123E2, inf) = 0.123E2 +* (0.3141592653589793E1, 0.17976931348623157E309) = inf ++ (0.3141592653589793E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.3141592653589793E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.3141592653589793E1, 0.17976931348623157E309) = 0.17475689218952297E~307 +nextAfter (0.3141592653589793E1, 0.17976931348623157E309) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.17976931348623157E309) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.8988465674311579E308) = inf ++ (0.3141592653589793E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.3141592653589793E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.3141592653589793E1, 0.8988465674311579E308) = 0.349513784379046E~307 +nextAfter (0.3141592653589793E1, 0.8988465674311579E308) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.8988465674311579E308) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.123E4) = 0.38641589639154454E4 ++ (0.3141592653589793E1, 0.123E4) = 0.123314159265359E4 +- (0.3141592653589793E1, 0.123E4) = ~0.122685840734641E4 +/ (0.3141592653589793E1, 0.123E4) = 0.25541403687721893E~2 +nextAfter (0.3141592653589793E1, 0.123E4) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.123E4) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.123E2) = 0.3864158963915446E2 ++ (0.3141592653589793E1, 0.123E2) = 0.15441592653589794E2 +- (0.3141592653589793E1, 0.123E2) = ~0.9158407346410208E1 +/ (0.3141592653589793E1, 0.123E2) = 0.2554140368772189 +nextAfter (0.3141592653589793E1, 0.123E2) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.123E2) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.3141592653589793E1) = 0.9869604401089358E1 ++ (0.3141592653589793E1, 0.3141592653589793E1) = 0.6283185307179586E1 +- (0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +/ (0.3141592653589793E1, 0.3141592653589793E1) = 0.1E1 +nextAfter (0.3141592653589793E1, 0.3141592653589793E1) = 0.3141592653589793E1 +rem (0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +* (0.3141592653589793E1, 0.2718281828459045E1) = 0.8539734222673566E1 ++ (0.3141592653589793E1, 0.2718281828459045E1) = 0.5859874482048838E1 +- (0.3141592653589793E1, 0.2718281828459045E1) = 0.423310825130748 +/ (0.3141592653589793E1, 0.2718281828459045E1) = 0.11557273497909217E1 +nextAfter (0.3141592653589793E1, 0.2718281828459045E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.2718281828459045E1) = 0.423310825130748 +* (0.3141592653589793E1, 0.123E1) = 0.38641589639154454E1 ++ (0.3141592653589793E1, 0.123E1) = 0.43715926535897935E1 +- (0.3141592653589793E1, 0.123E1) = 0.19115926535897931E1 +/ (0.3141592653589793E1, 0.123E1) = 0.25541403687721895E1 +nextAfter (0.3141592653589793E1, 0.123E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123E1) = 0.6815926535897932 +* (0.3141592653589793E1, 0.123) = 0.38641589639154456 ++ (0.3141592653589793E1, 0.123) = 0.32645926535897933E1 +- (0.3141592653589793E1, 0.123) = 0.3018592653589793E1 +/ (0.3141592653589793E1, 0.123) = 0.25541403687721896E2 +nextAfter (0.3141592653589793E1, 0.123) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123) = 0.6659265358979294E~1 +* (0.3141592653589793E1, 0.123E~2) = 0.38641589639154456E~2 ++ (0.3141592653589793E1, 0.123E~2) = 0.3142822653589793E1 +- (0.3141592653589793E1, 0.123E~2) = 0.3140362653589793E1 +/ (0.3141592653589793E1, 0.123E~2) = 0.25541403687721895E4 +nextAfter (0.3141592653589793E1, 0.123E~2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123E~2) = 0.17265358979301482E~3 +* (0.3141592653589793E1, 0.22250738585072014E~307) = 0.6990275687580919E~307 ++ (0.3141592653589793E1, 0.22250738585072014E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.22250738585072014E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.22250738585072014E~307) = 0.14119048864730642E309 +nextAfter (0.3141592653589793E1, 0.22250738585072014E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.22250738585072014E~307) = 0.0 +* (0.3141592653589793E1, 0.11125369292536007E~307) = 0.34951378437904593E~307 ++ (0.3141592653589793E1, 0.11125369292536007E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.11125369292536007E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.11125369292536007E~307) = inf +nextAfter (0.3141592653589793E1, 0.11125369292536007E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.11125369292536007E~307) = ~inf +* (0.3141592653589793E1, 0.5E~323) = 0.15E~322 ++ (0.3141592653589793E1, 0.5E~323) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.5E~323) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.5E~323) = inf +nextAfter (0.3141592653589793E1, 0.5E~323) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.5E~323) = ~inf +* (0.3141592653589793E1, 0.0) = 0.0 ++ (0.3141592653589793E1, 0.0) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.0) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.0) = inf +nextAfter (0.3141592653589793E1, 0.0) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.0) = nan +* (0.3141592653589793E1, ~0.17976931348623157E309) = ~inf ++ (0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.3141592653589793E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17475689218952297E~307 +nextAfter (0.3141592653589793E1, ~0.17976931348623157E309) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.17976931348623157E309) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.8988465674311579E308) = ~inf ++ (0.3141592653589793E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.3141592653589793E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.3141592653589793E1, ~0.8988465674311579E308) = ~0.349513784379046E~307 +nextAfter (0.3141592653589793E1, ~0.8988465674311579E308) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.8988465674311579E308) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.123E4) = ~0.38641589639154454E4 ++ (0.3141592653589793E1, ~0.123E4) = ~0.122685840734641E4 +- (0.3141592653589793E1, ~0.123E4) = 0.123314159265359E4 +/ (0.3141592653589793E1, ~0.123E4) = ~0.25541403687721893E~2 +nextAfter (0.3141592653589793E1, ~0.123E4) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E4) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.123E2) = ~0.3864158963915446E2 ++ (0.3141592653589793E1, ~0.123E2) = ~0.9158407346410208E1 +- (0.3141592653589793E1, ~0.123E2) = 0.15441592653589794E2 +/ (0.3141592653589793E1, ~0.123E2) = ~0.2554140368772189 +nextAfter (0.3141592653589793E1, ~0.123E2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E2) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.3141592653589793E1) = ~0.9869604401089358E1 ++ (0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +- (0.3141592653589793E1, ~0.3141592653589793E1) = 0.6283185307179586E1 +/ (0.3141592653589793E1, ~0.3141592653589793E1) = ~0.1E1 +nextAfter (0.3141592653589793E1, ~0.3141592653589793E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +* (0.3141592653589793E1, ~0.2718281828459045E1) = ~0.8539734222673566E1 ++ (0.3141592653589793E1, ~0.2718281828459045E1) = 0.423310825130748 +- (0.3141592653589793E1, ~0.2718281828459045E1) = 0.5859874482048838E1 +/ (0.3141592653589793E1, ~0.2718281828459045E1) = ~0.11557273497909217E1 +nextAfter (0.3141592653589793E1, ~0.2718281828459045E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.2718281828459045E1) = 0.423310825130748 +* (0.3141592653589793E1, ~0.123E1) = ~0.38641589639154454E1 ++ (0.3141592653589793E1, ~0.123E1) = 0.19115926535897931E1 +- (0.3141592653589793E1, ~0.123E1) = 0.43715926535897935E1 +/ (0.3141592653589793E1, ~0.123E1) = ~0.25541403687721895E1 +nextAfter (0.3141592653589793E1, ~0.123E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E1) = 0.6815926535897932 +* (0.3141592653589793E1, ~0.123) = ~0.38641589639154456 ++ (0.3141592653589793E1, ~0.123) = 0.3018592653589793E1 +- (0.3141592653589793E1, ~0.123) = 0.32645926535897933E1 +/ (0.3141592653589793E1, ~0.123) = ~0.25541403687721896E2 +nextAfter (0.3141592653589793E1, ~0.123) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123) = 0.6659265358979294E~1 +* (0.3141592653589793E1, ~0.123E~2) = ~0.38641589639154456E~2 ++ (0.3141592653589793E1, ~0.123E~2) = 0.3140362653589793E1 +- (0.3141592653589793E1, ~0.123E~2) = 0.3142822653589793E1 +/ (0.3141592653589793E1, ~0.123E~2) = ~0.25541403687721895E4 +nextAfter (0.3141592653589793E1, ~0.123E~2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E~2) = 0.17265358979301482E~3 +* (0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.6990275687580919E~307 ++ (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.14119048864730642E309 +nextAfter (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.0 +* (0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.34951378437904593E~307 ++ (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.11125369292536007E~307) = ~inf +nextAfter (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.11125369292536007E~307) = ~inf +* (0.3141592653589793E1, ~0.5E~323) = ~0.15E~322 ++ (0.3141592653589793E1, ~0.5E~323) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.5E~323) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.5E~323) = ~inf +nextAfter (0.3141592653589793E1, ~0.5E~323) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.5E~323) = ~inf +* (0.3141592653589793E1, ~0.0) = ~0.0 ++ (0.3141592653589793E1, ~0.0) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.0) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.0) = ~inf +nextAfter (0.3141592653589793E1, ~0.0) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.0) = nan +* (0.3141592653589793E1, inf) = inf ++ (0.3141592653589793E1, inf) = inf +- (0.3141592653589793E1, inf) = ~inf +/ (0.3141592653589793E1, inf) = 0.0 +nextAfter (0.3141592653589793E1, inf) = 0.31415926535897936E1 +rem (0.3141592653589793E1, inf) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~inf) = ~inf ++ (0.3141592653589793E1, ~inf) = ~inf +- (0.3141592653589793E1, ~inf) = inf +/ (0.3141592653589793E1, ~inf) = ~0.0 +nextAfter (0.3141592653589793E1, ~inf) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~inf) = 0.3141592653589793E1 +* (0.3141592653589793E1, nan) = nan ++ (0.3141592653589793E1, nan) = nan +- (0.3141592653589793E1, nan) = nan +/ (0.3141592653589793E1, nan) = nan +nextAfter (0.3141592653589793E1, nan) = nan +rem (0.3141592653589793E1, nan) = nan +* (0.3141592653589793E1, inf) = inf ++ (0.3141592653589793E1, inf) = inf +- (0.3141592653589793E1, inf) = ~inf +/ (0.3141592653589793E1, inf) = 0.0 +nextAfter (0.3141592653589793E1, inf) = 0.31415926535897936E1 +rem (0.3141592653589793E1, inf) = 0.3141592653589793E1 +* (0.2718281828459045E1, 0.17976931348623157E309) = inf ++ (0.2718281828459045E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.2718281828459045E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.2718281828459045E1, 0.17976931348623157E309) = 0.15120944591398447E~307 +nextAfter (0.2718281828459045E1, 0.17976931348623157E309) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.17976931348623157E309) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.8988465674311579E308) = inf ++ (0.2718281828459045E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.2718281828459045E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.2718281828459045E1, 0.8988465674311579E308) = 0.30241889182796895E~307 +nextAfter (0.2718281828459045E1, 0.8988465674311579E308) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.8988465674311579E308) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.123E4) = 0.33434866490046256E4 ++ (0.2718281828459045E1, 0.123E4) = 0.1232718281828459E4 +- (0.2718281828459045E1, 0.123E4) = ~0.1227281718171541E4 +/ (0.2718281828459045E1, 0.123E4) = 0.22099852263894678E~2 +nextAfter (0.2718281828459045E1, 0.123E4) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.123E4) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.123E2) = 0.33434866490046254E2 ++ (0.2718281828459045E1, 0.123E2) = 0.15018281828459045E2 +- (0.2718281828459045E1, 0.123E2) = ~0.9581718171540956E1 +/ (0.2718281828459045E1, 0.123E2) = 0.22099852263894673 +nextAfter (0.2718281828459045E1, 0.123E2) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.123E2) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.3141592653589793E1) = 0.8539734222673566E1 ++ (0.2718281828459045E1, 0.3141592653589793E1) = 0.5859874482048838E1 +- (0.2718281828459045E1, 0.3141592653589793E1) = ~0.423310825130748 +/ (0.2718281828459045E1, 0.3141592653589793E1) = 0.8652559794322651 +nextAfter (0.2718281828459045E1, 0.3141592653589793E1) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.3141592653589793E1) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.2718281828459045E1) = 0.73890560989306495E1 ++ (0.2718281828459045E1, 0.2718281828459045E1) = 0.543656365691809E1 +- (0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +/ (0.2718281828459045E1, 0.2718281828459045E1) = 0.1E1 +nextAfter (0.2718281828459045E1, 0.2718281828459045E1) = 0.2718281828459045E1 +rem (0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +* (0.2718281828459045E1, 0.123E1) = 0.33434866490046256E1 ++ (0.2718281828459045E1, 0.123E1) = 0.3948281828459045E1 +- (0.2718281828459045E1, 0.123E1) = 0.1488281828459045E1 +/ (0.2718281828459045E1, 0.123E1) = 0.22099852263894677E1 +nextAfter (0.2718281828459045E1, 0.123E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123E1) = 0.2582818284590451 +* (0.2718281828459045E1, 0.123) = 0.33434866490046256 ++ (0.2718281828459045E1, 0.123) = 0.2841281828459045E1 +- (0.2718281828459045E1, 0.123) = 0.25952818284590453E1 +/ (0.2718281828459045E1, 0.123) = 0.22099852263894675E2 +nextAfter (0.2718281828459045E1, 0.123) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123) = 0.1228182845904513E~1 +* (0.2718281828459045E1, 0.123E~2) = 0.33434866490046253E~2 ++ (0.2718281828459045E1, 0.123E~2) = 0.2719511828459045E1 +- (0.2718281828459045E1, 0.123E~2) = 0.2717051828459045E1 +/ (0.2718281828459045E1, 0.123E~2) = 0.22099852263894677E4 +nextAfter (0.2718281828459045E1, 0.123E~2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123E~2) = 0.12118284590449946E~2 +* (0.2718281828459045E1, 0.22250738585072014E~307) = 0.6048377836559378E~307 ++ (0.2718281828459045E1, 0.22250738585072014E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.22250738585072014E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.22250738585072014E~307) = 0.12216591454104522E309 +nextAfter (0.2718281828459045E1, 0.22250738585072014E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.22250738585072014E~307) = 0.0 +* (0.2718281828459045E1, 0.11125369292536007E~307) = 0.3024188918279689E~307 ++ (0.2718281828459045E1, 0.11125369292536007E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.11125369292536007E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.11125369292536007E~307) = inf +nextAfter (0.2718281828459045E1, 0.11125369292536007E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.11125369292536007E~307) = ~inf +* (0.2718281828459045E1, 0.5E~323) = 0.15E~322 ++ (0.2718281828459045E1, 0.5E~323) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.5E~323) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.5E~323) = inf +nextAfter (0.2718281828459045E1, 0.5E~323) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.5E~323) = ~inf +* (0.2718281828459045E1, 0.0) = 0.0 ++ (0.2718281828459045E1, 0.0) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.0) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.0) = inf +nextAfter (0.2718281828459045E1, 0.0) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.0) = nan +* (0.2718281828459045E1, ~0.17976931348623157E309) = ~inf ++ (0.2718281828459045E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.2718281828459045E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.2718281828459045E1, ~0.17976931348623157E309) = ~0.15120944591398447E~307 +nextAfter (0.2718281828459045E1, ~0.17976931348623157E309) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.17976931348623157E309) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.8988465674311579E308) = ~inf ++ (0.2718281828459045E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.2718281828459045E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.2718281828459045E1, ~0.8988465674311579E308) = ~0.30241889182796895E~307 +nextAfter (0.2718281828459045E1, ~0.8988465674311579E308) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.8988465674311579E308) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.123E4) = ~0.33434866490046256E4 ++ (0.2718281828459045E1, ~0.123E4) = ~0.1227281718171541E4 +- (0.2718281828459045E1, ~0.123E4) = 0.1232718281828459E4 +/ (0.2718281828459045E1, ~0.123E4) = ~0.22099852263894678E~2 +nextAfter (0.2718281828459045E1, ~0.123E4) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E4) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.123E2) = ~0.33434866490046254E2 ++ (0.2718281828459045E1, ~0.123E2) = ~0.9581718171540956E1 +- (0.2718281828459045E1, ~0.123E2) = 0.15018281828459045E2 +/ (0.2718281828459045E1, ~0.123E2) = ~0.22099852263894673 +nextAfter (0.2718281828459045E1, ~0.123E2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E2) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.8539734222673566E1 ++ (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.423310825130748 +- (0.2718281828459045E1, ~0.3141592653589793E1) = 0.5859874482048838E1 +/ (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.8652559794322651 +nextAfter (0.2718281828459045E1, ~0.3141592653589793E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.3141592653589793E1) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.2718281828459045E1) = ~0.73890560989306495E1 ++ (0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +- (0.2718281828459045E1, ~0.2718281828459045E1) = 0.543656365691809E1 +/ (0.2718281828459045E1, ~0.2718281828459045E1) = ~0.1E1 +nextAfter (0.2718281828459045E1, ~0.2718281828459045E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +* (0.2718281828459045E1, ~0.123E1) = ~0.33434866490046256E1 ++ (0.2718281828459045E1, ~0.123E1) = 0.1488281828459045E1 +- (0.2718281828459045E1, ~0.123E1) = 0.3948281828459045E1 +/ (0.2718281828459045E1, ~0.123E1) = ~0.22099852263894677E1 +nextAfter (0.2718281828459045E1, ~0.123E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E1) = 0.2582818284590451 +* (0.2718281828459045E1, ~0.123) = ~0.33434866490046256 ++ (0.2718281828459045E1, ~0.123) = 0.25952818284590453E1 +- (0.2718281828459045E1, ~0.123) = 0.2841281828459045E1 +/ (0.2718281828459045E1, ~0.123) = ~0.22099852263894675E2 +nextAfter (0.2718281828459045E1, ~0.123) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123) = 0.1228182845904513E~1 +* (0.2718281828459045E1, ~0.123E~2) = ~0.33434866490046253E~2 ++ (0.2718281828459045E1, ~0.123E~2) = 0.2717051828459045E1 +- (0.2718281828459045E1, ~0.123E~2) = 0.2719511828459045E1 +/ (0.2718281828459045E1, ~0.123E~2) = ~0.22099852263894677E4 +nextAfter (0.2718281828459045E1, ~0.123E~2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E~2) = 0.12118284590449946E~2 +* (0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.6048377836559378E~307 ++ (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.12216591454104522E309 +nextAfter (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.0 +* (0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.3024188918279689E~307 ++ (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.11125369292536007E~307) = ~inf +nextAfter (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.11125369292536007E~307) = ~inf +* (0.2718281828459045E1, ~0.5E~323) = ~0.15E~322 ++ (0.2718281828459045E1, ~0.5E~323) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.5E~323) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.5E~323) = ~inf +nextAfter (0.2718281828459045E1, ~0.5E~323) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.5E~323) = ~inf +* (0.2718281828459045E1, ~0.0) = ~0.0 ++ (0.2718281828459045E1, ~0.0) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.0) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.0) = ~inf +nextAfter (0.2718281828459045E1, ~0.0) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.0) = nan +* (0.2718281828459045E1, inf) = inf ++ (0.2718281828459045E1, inf) = inf +- (0.2718281828459045E1, inf) = ~inf +/ (0.2718281828459045E1, inf) = 0.0 +nextAfter (0.2718281828459045E1, inf) = 0.27182818284590455E1 +rem (0.2718281828459045E1, inf) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~inf) = ~inf ++ (0.2718281828459045E1, ~inf) = ~inf +- (0.2718281828459045E1, ~inf) = inf +/ (0.2718281828459045E1, ~inf) = ~0.0 +nextAfter (0.2718281828459045E1, ~inf) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~inf) = 0.2718281828459045E1 +* (0.2718281828459045E1, nan) = nan ++ (0.2718281828459045E1, nan) = nan +- (0.2718281828459045E1, nan) = nan +/ (0.2718281828459045E1, nan) = nan +nextAfter (0.2718281828459045E1, nan) = nan +rem (0.2718281828459045E1, nan) = nan +* (0.2718281828459045E1, inf) = inf ++ (0.2718281828459045E1, inf) = inf +- (0.2718281828459045E1, inf) = ~inf +/ (0.2718281828459045E1, inf) = 0.0 +nextAfter (0.2718281828459045E1, inf) = 0.27182818284590455E1 +rem (0.2718281828459045E1, inf) = 0.2718281828459045E1 +* (0.123E1, 0.17976931348623157E309) = inf ++ (0.123E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E1, 0.17976931348623157E309) = 0.6842102114909647E~308 +nextAfter (0.123E1, 0.17976931348623157E309) = 0.12300000000000002E1 +rem (0.123E1, 0.17976931348623157E309) = 0.123E1 +* (0.123E1, 0.8988465674311579E308) = 0.1105581277940324E309 ++ (0.123E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E1, 0.8988465674311579E308) = 0.1368420422981929E~307 +nextAfter (0.123E1, 0.8988465674311579E308) = 0.12300000000000002E1 +rem (0.123E1, 0.8988465674311579E308) = 0.123E1 +* (0.123E1, 0.123E4) = 0.15129E4 ++ (0.123E1, 0.123E4) = 0.123123E4 +- (0.123E1, 0.123E4) = ~0.122877E4 +/ (0.123E1, 0.123E4) = 0.1E~2 +nextAfter (0.123E1, 0.123E4) = 0.12300000000000002E1 +rem (0.123E1, 0.123E4) = 0.123E1 +* (0.123E1, 0.123E2) = 0.15129000000000001E2 ++ (0.123E1, 0.123E2) = 0.13530000000000001E2 +- (0.123E1, 0.123E2) = ~0.1107E2 +/ (0.123E1, 0.123E2) = 0.9999999999999999E~1 +nextAfter (0.123E1, 0.123E2) = 0.12300000000000002E1 +rem (0.123E1, 0.123E2) = 0.123E1 +* (0.123E1, 0.3141592653589793E1) = 0.38641589639154454E1 ++ (0.123E1, 0.3141592653589793E1) = 0.43715926535897935E1 +- (0.123E1, 0.3141592653589793E1) = ~0.19115926535897931E1 +/ (0.123E1, 0.3141592653589793E1) = 0.3915211600060625 +nextAfter (0.123E1, 0.3141592653589793E1) = 0.12300000000000002E1 +rem (0.123E1, 0.3141592653589793E1) = 0.123E1 +* (0.123E1, 0.2718281828459045E1) = 0.33434866490046256E1 ++ (0.123E1, 0.2718281828459045E1) = 0.3948281828459045E1 +- (0.123E1, 0.2718281828459045E1) = ~0.1488281828459045E1 +/ (0.123E1, 0.2718281828459045E1) = 0.45249171264087407 +nextAfter (0.123E1, 0.2718281828459045E1) = 0.12300000000000002E1 +rem (0.123E1, 0.2718281828459045E1) = 0.123E1 +* (0.123E1, 0.123E1) = 0.15129E1 ++ (0.123E1, 0.123E1) = 0.246E1 +- (0.123E1, 0.123E1) = 0.0 +/ (0.123E1, 0.123E1) = 0.1E1 +nextAfter (0.123E1, 0.123E1) = 0.123E1 +rem (0.123E1, 0.123E1) = 0.0 +* (0.123E1, 0.123) = 0.15129 ++ (0.123E1, 0.123) = 0.1353E1 +- (0.123E1, 0.123) = 0.1107E1 +/ (0.123E1, 0.123) = 0.1E2 +nextAfter (0.123E1, 0.123) = 0.12299999999999998E1 +rem (0.123E1, 0.123) = 0.0 +* (0.123E1, 0.123E~2) = 0.15129E~2 ++ (0.123E1, 0.123E~2) = 0.123123E1 +- (0.123E1, 0.123E~2) = 0.122877E1 +/ (0.123E1, 0.123E~2) = 0.1E4 +nextAfter (0.123E1, 0.123E~2) = 0.12299999999999998E1 +rem (0.123E1, 0.123E~2) = 0.0 +* (0.123E1, 0.22250738585072014E~307) = 0.27368408459638577E~307 ++ (0.123E1, 0.22250738585072014E~307) = 0.123E1 +- (0.123E1, 0.22250738585072014E~307) = 0.123E1 +/ (0.123E1, 0.22250738585072014E~307) = 0.5527906389701621E308 +nextAfter (0.123E1, 0.22250738585072014E~307) = 0.12299999999999998E1 +rem (0.123E1, 0.22250738585072014E~307) = 0.0 +* (0.123E1, 0.11125369292536007E~307) = 0.1368420422981929E~307 ++ (0.123E1, 0.11125369292536007E~307) = 0.123E1 +- (0.123E1, 0.11125369292536007E~307) = 0.123E1 +/ (0.123E1, 0.11125369292536007E~307) = 0.11055812779403243E309 +nextAfter (0.123E1, 0.11125369292536007E~307) = 0.12299999999999998E1 +rem (0.123E1, 0.11125369292536007E~307) = 0.0 +* (0.123E1, 0.5E~323) = 0.5E~323 ++ (0.123E1, 0.5E~323) = 0.123E1 +- (0.123E1, 0.5E~323) = 0.123E1 +/ (0.123E1, 0.5E~323) = inf +nextAfter (0.123E1, 0.5E~323) = 0.12299999999999998E1 +rem (0.123E1, 0.5E~323) = ~inf +* (0.123E1, 0.0) = 0.0 ++ (0.123E1, 0.0) = 0.123E1 +- (0.123E1, 0.0) = 0.123E1 +/ (0.123E1, 0.0) = inf +nextAfter (0.123E1, 0.0) = 0.12299999999999998E1 +rem (0.123E1, 0.0) = nan +* (0.123E1, ~0.17976931348623157E309) = ~inf ++ (0.123E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E1, ~0.17976931348623157E309) = ~0.6842102114909647E~308 +nextAfter (0.123E1, ~0.17976931348623157E309) = 0.12299999999999998E1 +rem (0.123E1, ~0.17976931348623157E309) = 0.123E1 +* (0.123E1, ~0.8988465674311579E308) = ~0.1105581277940324E309 ++ (0.123E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E1, ~0.8988465674311579E308) = ~0.1368420422981929E~307 +nextAfter (0.123E1, ~0.8988465674311579E308) = 0.12299999999999998E1 +rem (0.123E1, ~0.8988465674311579E308) = 0.123E1 +* (0.123E1, ~0.123E4) = ~0.15129E4 ++ (0.123E1, ~0.123E4) = ~0.122877E4 +- (0.123E1, ~0.123E4) = 0.123123E4 +/ (0.123E1, ~0.123E4) = ~0.1E~2 +nextAfter (0.123E1, ~0.123E4) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E4) = 0.123E1 +* (0.123E1, ~0.123E2) = ~0.15129000000000001E2 ++ (0.123E1, ~0.123E2) = ~0.1107E2 +- (0.123E1, ~0.123E2) = 0.13530000000000001E2 +/ (0.123E1, ~0.123E2) = ~0.9999999999999999E~1 +nextAfter (0.123E1, ~0.123E2) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E2) = 0.123E1 +* (0.123E1, ~0.3141592653589793E1) = ~0.38641589639154454E1 ++ (0.123E1, ~0.3141592653589793E1) = ~0.19115926535897931E1 +- (0.123E1, ~0.3141592653589793E1) = 0.43715926535897935E1 +/ (0.123E1, ~0.3141592653589793E1) = ~0.3915211600060625 +nextAfter (0.123E1, ~0.3141592653589793E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.3141592653589793E1) = 0.123E1 +* (0.123E1, ~0.2718281828459045E1) = ~0.33434866490046256E1 ++ (0.123E1, ~0.2718281828459045E1) = ~0.1488281828459045E1 +- (0.123E1, ~0.2718281828459045E1) = 0.3948281828459045E1 +/ (0.123E1, ~0.2718281828459045E1) = ~0.45249171264087407 +nextAfter (0.123E1, ~0.2718281828459045E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.2718281828459045E1) = 0.123E1 +* (0.123E1, ~0.123E1) = ~0.15129E1 ++ (0.123E1, ~0.123E1) = 0.0 +- (0.123E1, ~0.123E1) = 0.246E1 +/ (0.123E1, ~0.123E1) = ~0.1E1 +nextAfter (0.123E1, ~0.123E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E1) = 0.0 +* (0.123E1, ~0.123) = ~0.15129 ++ (0.123E1, ~0.123) = 0.1107E1 +- (0.123E1, ~0.123) = 0.1353E1 +/ (0.123E1, ~0.123) = ~0.1E2 +nextAfter (0.123E1, ~0.123) = 0.12299999999999998E1 +rem (0.123E1, ~0.123) = 0.0 +* (0.123E1, ~0.123E~2) = ~0.15129E~2 ++ (0.123E1, ~0.123E~2) = 0.122877E1 +- (0.123E1, ~0.123E~2) = 0.123123E1 +/ (0.123E1, ~0.123E~2) = ~0.1E4 +nextAfter (0.123E1, ~0.123E~2) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E~2) = 0.0 +* (0.123E1, ~0.22250738585072014E~307) = ~0.27368408459638577E~307 ++ (0.123E1, ~0.22250738585072014E~307) = 0.123E1 +- (0.123E1, ~0.22250738585072014E~307) = 0.123E1 +/ (0.123E1, ~0.22250738585072014E~307) = ~0.5527906389701621E308 +nextAfter (0.123E1, ~0.22250738585072014E~307) = 0.12299999999999998E1 +rem (0.123E1, ~0.22250738585072014E~307) = 0.0 +* (0.123E1, ~0.11125369292536007E~307) = ~0.1368420422981929E~307 ++ (0.123E1, ~0.11125369292536007E~307) = 0.123E1 +- (0.123E1, ~0.11125369292536007E~307) = 0.123E1 +/ (0.123E1, ~0.11125369292536007E~307) = ~0.11055812779403243E309 +nextAfter (0.123E1, ~0.11125369292536007E~307) = 0.12299999999999998E1 +rem (0.123E1, ~0.11125369292536007E~307) = 0.0 +* (0.123E1, ~0.5E~323) = ~0.5E~323 ++ (0.123E1, ~0.5E~323) = 0.123E1 +- (0.123E1, ~0.5E~323) = 0.123E1 +/ (0.123E1, ~0.5E~323) = ~inf +nextAfter (0.123E1, ~0.5E~323) = 0.12299999999999998E1 +rem (0.123E1, ~0.5E~323) = ~inf +* (0.123E1, ~0.0) = ~0.0 ++ (0.123E1, ~0.0) = 0.123E1 +- (0.123E1, ~0.0) = 0.123E1 +/ (0.123E1, ~0.0) = ~inf +nextAfter (0.123E1, ~0.0) = 0.12299999999999998E1 +rem (0.123E1, ~0.0) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300000000000002E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123E1, ~inf) = ~inf ++ (0.123E1, ~inf) = ~inf +- (0.123E1, ~inf) = inf +/ (0.123E1, ~inf) = ~0.0 +nextAfter (0.123E1, ~inf) = 0.12299999999999998E1 +rem (0.123E1, ~inf) = 0.123E1 +* (0.123E1, nan) = nan ++ (0.123E1, nan) = nan +- (0.123E1, nan) = nan +/ (0.123E1, nan) = nan +nextAfter (0.123E1, nan) = nan +rem (0.123E1, nan) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300000000000002E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123, 0.17976931348623157E309) = 0.22111625558806483E308 ++ (0.123, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123, 0.17976931348623157E309) = 0.684210211490966E~309 +nextAfter (0.123, 0.17976931348623157E309) = 0.12300000000000001 +rem (0.123, 0.17976931348623157E309) = 0.123 +* (0.123, 0.8988465674311579E308) = 0.11055812779403241E308 ++ (0.123, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123, 0.8988465674311579E308) = 0.136842042298193E~308 +nextAfter (0.123, 0.8988465674311579E308) = 0.12300000000000001 +rem (0.123, 0.8988465674311579E308) = 0.123 +* (0.123, 0.123E4) = 0.15129E3 ++ (0.123, 0.123E4) = 0.1230123E4 +- (0.123, 0.123E4) = ~0.1229877E4 +/ (0.123, 0.123E4) = 0.1E~3 +nextAfter (0.123, 0.123E4) = 0.12300000000000001 +rem (0.123, 0.123E4) = 0.123 +* (0.123, 0.123E2) = 0.15129000000000001E1 ++ (0.123, 0.123E2) = 0.12423E2 +- (0.123, 0.123E2) = ~0.12177000000000001E2 +/ (0.123, 0.123E2) = 0.9999999999999998E~2 +nextAfter (0.123, 0.123E2) = 0.12300000000000001 +rem (0.123, 0.123E2) = 0.123 +* (0.123, 0.3141592653589793E1) = 0.38641589639154456 ++ (0.123, 0.3141592653589793E1) = 0.32645926535897933E1 +- (0.123, 0.3141592653589793E1) = ~0.3018592653589793E1 +/ (0.123, 0.3141592653589793E1) = 0.3915211600060625E~1 +nextAfter (0.123, 0.3141592653589793E1) = 0.12300000000000001 +rem (0.123, 0.3141592653589793E1) = 0.123 +* (0.123, 0.2718281828459045E1) = 0.33434866490046256 ++ (0.123, 0.2718281828459045E1) = 0.2841281828459045E1 +- (0.123, 0.2718281828459045E1) = ~0.25952818284590453E1 +/ (0.123, 0.2718281828459045E1) = 0.4524917126408741E~1 +nextAfter (0.123, 0.2718281828459045E1) = 0.12300000000000001 +rem (0.123, 0.2718281828459045E1) = 0.123 +* (0.123, 0.123E1) = 0.15129 ++ (0.123, 0.123E1) = 0.1353E1 +- (0.123, 0.123E1) = ~0.1107E1 +/ (0.123, 0.123E1) = 0.1 +nextAfter (0.123, 0.123E1) = 0.12300000000000001 +rem (0.123, 0.123E1) = 0.123 +* (0.123, 0.123) = 0.15129E~1 ++ (0.123, 0.123) = 0.246 +- (0.123, 0.123) = 0.0 +/ (0.123, 0.123) = 0.1E1 +nextAfter (0.123, 0.123) = 0.123 +rem (0.123, 0.123) = 0.0 +* (0.123, 0.123E~2) = 0.15129E~3 ++ (0.123, 0.123E~2) = 0.12423 +- (0.123, 0.123E~2) = 0.12177 +/ (0.123, 0.123E~2) = 0.1E3 +nextAfter (0.123, 0.123E~2) = 0.12299999999999998 +rem (0.123, 0.123E~2) = 0.0 +* (0.123, 0.22250738585072014E~307) = 0.273684084596386E~308 ++ (0.123, 0.22250738585072014E~307) = 0.123 +- (0.123, 0.22250738585072014E~307) = 0.123 +/ (0.123, 0.22250738585072014E~307) = 0.55279063897016213E307 +nextAfter (0.123, 0.22250738585072014E~307) = 0.12299999999999998 +rem (0.123, 0.22250738585072014E~307) = 0.0 +* (0.123, 0.11125369292536007E~307) = 0.136842042298193E~308 ++ (0.123, 0.11125369292536007E~307) = 0.123 +- (0.123, 0.11125369292536007E~307) = 0.123 +/ (0.123, 0.11125369292536007E~307) = 0.11055812779403243E308 +nextAfter (0.123, 0.11125369292536007E~307) = 0.12299999999999998 +rem (0.123, 0.11125369292536007E~307) = 0.0 +* (0.123, 0.5E~323) = 0.0 ++ (0.123, 0.5E~323) = 0.123 +- (0.123, 0.5E~323) = 0.123 +/ (0.123, 0.5E~323) = inf +nextAfter (0.123, 0.5E~323) = 0.12299999999999998 +rem (0.123, 0.5E~323) = ~inf +* (0.123, 0.0) = 0.0 ++ (0.123, 0.0) = 0.123 +- (0.123, 0.0) = 0.123 +/ (0.123, 0.0) = inf +nextAfter (0.123, 0.0) = 0.12299999999999998 +rem (0.123, 0.0) = nan +* (0.123, ~0.17976931348623157E309) = ~0.22111625558806483E308 ++ (0.123, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123, ~0.17976931348623157E309) = ~0.684210211490966E~309 +nextAfter (0.123, ~0.17976931348623157E309) = 0.12299999999999998 +rem (0.123, ~0.17976931348623157E309) = 0.123 +* (0.123, ~0.8988465674311579E308) = ~0.11055812779403241E308 ++ (0.123, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123, ~0.8988465674311579E308) = ~0.136842042298193E~308 +nextAfter (0.123, ~0.8988465674311579E308) = 0.12299999999999998 +rem (0.123, ~0.8988465674311579E308) = 0.123 +* (0.123, ~0.123E4) = ~0.15129E3 ++ (0.123, ~0.123E4) = ~0.1229877E4 +- (0.123, ~0.123E4) = 0.1230123E4 +/ (0.123, ~0.123E4) = ~0.1E~3 +nextAfter (0.123, ~0.123E4) = 0.12299999999999998 +rem (0.123, ~0.123E4) = 0.123 +* (0.123, ~0.123E2) = ~0.15129000000000001E1 ++ (0.123, ~0.123E2) = ~0.12177000000000001E2 +- (0.123, ~0.123E2) = 0.12423E2 +/ (0.123, ~0.123E2) = ~0.9999999999999998E~2 +nextAfter (0.123, ~0.123E2) = 0.12299999999999998 +rem (0.123, ~0.123E2) = 0.123 +* (0.123, ~0.3141592653589793E1) = ~0.38641589639154456 ++ (0.123, ~0.3141592653589793E1) = ~0.3018592653589793E1 +- (0.123, ~0.3141592653589793E1) = 0.32645926535897933E1 +/ (0.123, ~0.3141592653589793E1) = ~0.3915211600060625E~1 +nextAfter (0.123, ~0.3141592653589793E1) = 0.12299999999999998 +rem (0.123, ~0.3141592653589793E1) = 0.123 +* (0.123, ~0.2718281828459045E1) = ~0.33434866490046256 ++ (0.123, ~0.2718281828459045E1) = ~0.25952818284590453E1 +- (0.123, ~0.2718281828459045E1) = 0.2841281828459045E1 +/ (0.123, ~0.2718281828459045E1) = ~0.4524917126408741E~1 +nextAfter (0.123, ~0.2718281828459045E1) = 0.12299999999999998 +rem (0.123, ~0.2718281828459045E1) = 0.123 +* (0.123, ~0.123E1) = ~0.15129 ++ (0.123, ~0.123E1) = ~0.1107E1 +- (0.123, ~0.123E1) = 0.1353E1 +/ (0.123, ~0.123E1) = ~0.1 +nextAfter (0.123, ~0.123E1) = 0.12299999999999998 +rem (0.123, ~0.123E1) = 0.123 +* (0.123, ~0.123) = ~0.15129E~1 ++ (0.123, ~0.123) = 0.0 +- (0.123, ~0.123) = 0.246 +/ (0.123, ~0.123) = ~0.1E1 +nextAfter (0.123, ~0.123) = 0.12299999999999998 +rem (0.123, ~0.123) = 0.0 +* (0.123, ~0.123E~2) = ~0.15129E~3 ++ (0.123, ~0.123E~2) = 0.12177 +- (0.123, ~0.123E~2) = 0.12423 +/ (0.123, ~0.123E~2) = ~0.1E3 +nextAfter (0.123, ~0.123E~2) = 0.12299999999999998 +rem (0.123, ~0.123E~2) = 0.0 +* (0.123, ~0.22250738585072014E~307) = ~0.273684084596386E~308 ++ (0.123, ~0.22250738585072014E~307) = 0.123 +- (0.123, ~0.22250738585072014E~307) = 0.123 +/ (0.123, ~0.22250738585072014E~307) = ~0.55279063897016213E307 +nextAfter (0.123, ~0.22250738585072014E~307) = 0.12299999999999998 +rem (0.123, ~0.22250738585072014E~307) = 0.0 +* (0.123, ~0.11125369292536007E~307) = ~0.136842042298193E~308 ++ (0.123, ~0.11125369292536007E~307) = 0.123 +- (0.123, ~0.11125369292536007E~307) = 0.123 +/ (0.123, ~0.11125369292536007E~307) = ~0.11055812779403243E308 +nextAfter (0.123, ~0.11125369292536007E~307) = 0.12299999999999998 +rem (0.123, ~0.11125369292536007E~307) = 0.0 +* (0.123, ~0.5E~323) = ~0.0 ++ (0.123, ~0.5E~323) = 0.123 +- (0.123, ~0.5E~323) = 0.123 +/ (0.123, ~0.5E~323) = ~inf +nextAfter (0.123, ~0.5E~323) = 0.12299999999999998 +rem (0.123, ~0.5E~323) = ~inf +* (0.123, ~0.0) = ~0.0 ++ (0.123, ~0.0) = 0.123 +- (0.123, ~0.0) = 0.123 +/ (0.123, ~0.0) = ~inf +nextAfter (0.123, ~0.0) = 0.12299999999999998 +rem (0.123, ~0.0) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300000000000001 +rem (0.123, inf) = 0.123 +* (0.123, ~inf) = ~inf ++ (0.123, ~inf) = ~inf +- (0.123, ~inf) = inf +/ (0.123, ~inf) = ~0.0 +nextAfter (0.123, ~inf) = 0.12299999999999998 +rem (0.123, ~inf) = 0.123 +* (0.123, nan) = nan ++ (0.123, nan) = nan +- (0.123, nan) = nan +/ (0.123, nan) = nan +nextAfter (0.123, nan) = nan +rem (0.123, nan) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300000000000001 +rem (0.123, inf) = 0.123 +* (0.123E~2, 0.17976931348623157E309) = 0.2211162555880648E306 ++ (0.123E~2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E~2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E~2, 0.17976931348623157E309) = 0.684210211491E~311 +nextAfter (0.123E~2, 0.17976931348623157E309) = 0.12300000000000002E~2 +rem (0.123E~2, 0.17976931348623157E309) = 0.123E~2 +* (0.123E~2, 0.8988465674311579E308) = 0.1105581277940324E306 ++ (0.123E~2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E~2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E~2, 0.8988465674311579E308) = 0.1368420422982E~310 +nextAfter (0.123E~2, 0.8988465674311579E308) = 0.12300000000000002E~2 +rem (0.123E~2, 0.8988465674311579E308) = 0.123E~2 +* (0.123E~2, 0.123E4) = 0.15129E1 ++ (0.123E~2, 0.123E4) = 0.123000123E4 +- (0.123E~2, 0.123E4) = ~0.122999877E4 +/ (0.123E~2, 0.123E4) = 0.1E~5 +nextAfter (0.123E~2, 0.123E4) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E4) = 0.123E~2 +* (0.123E~2, 0.123E2) = 0.15129E~1 ++ (0.123E~2, 0.123E2) = 0.1230123E2 +- (0.123E~2, 0.123E2) = ~0.12298770000000001E2 +/ (0.123E~2, 0.123E2) = 0.9999999999999999E~4 +nextAfter (0.123E~2, 0.123E2) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E2) = 0.123E~2 +* (0.123E~2, 0.3141592653589793E1) = 0.38641589639154456E~2 ++ (0.123E~2, 0.3141592653589793E1) = 0.3142822653589793E1 +- (0.123E~2, 0.3141592653589793E1) = ~0.3140362653589793E1 +/ (0.123E~2, 0.3141592653589793E1) = 0.3915211600060625E~3 +nextAfter (0.123E~2, 0.3141592653589793E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.3141592653589793E1) = 0.123E~2 +* (0.123E~2, 0.2718281828459045E1) = 0.33434866490046253E~2 ++ (0.123E~2, 0.2718281828459045E1) = 0.2719511828459045E1 +- (0.123E~2, 0.2718281828459045E1) = ~0.2717051828459045E1 +/ (0.123E~2, 0.2718281828459045E1) = 0.45249171264087406E~3 +nextAfter (0.123E~2, 0.2718281828459045E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.2718281828459045E1) = 0.123E~2 +* (0.123E~2, 0.123E1) = 0.15129E~2 ++ (0.123E~2, 0.123E1) = 0.123123E1 +- (0.123E~2, 0.123E1) = ~0.122877E1 +/ (0.123E~2, 0.123E1) = 0.1E~2 +nextAfter (0.123E~2, 0.123E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E1) = 0.123E~2 +* (0.123E~2, 0.123) = 0.15129E~3 ++ (0.123E~2, 0.123) = 0.12423 +- (0.123E~2, 0.123) = ~0.12177 +/ (0.123E~2, 0.123) = 0.1E~1 +nextAfter (0.123E~2, 0.123) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123) = 0.123E~2 +* (0.123E~2, 0.123E~2) = 0.15129E~5 ++ (0.123E~2, 0.123E~2) = 0.246E~2 +- (0.123E~2, 0.123E~2) = 0.0 +/ (0.123E~2, 0.123E~2) = 0.1E1 +nextAfter (0.123E~2, 0.123E~2) = 0.123E~2 +rem (0.123E~2, 0.123E~2) = 0.0 +* (0.123E~2, 0.22250738585072014E~307) = 0.2736840845964E~310 ++ (0.123E~2, 0.22250738585072014E~307) = 0.123E~2 +- (0.123E~2, 0.22250738585072014E~307) = 0.123E~2 +/ (0.123E~2, 0.22250738585072014E~307) = 0.5527906389701621E305 +nextAfter (0.123E~2, 0.22250738585072014E~307) = 0.12299999999999998E~2 +rem (0.123E~2, 0.22250738585072014E~307) = 0.0 +* (0.123E~2, 0.11125369292536007E~307) = 0.1368420422982E~310 ++ (0.123E~2, 0.11125369292536007E~307) = 0.123E~2 +- (0.123E~2, 0.11125369292536007E~307) = 0.123E~2 +/ (0.123E~2, 0.11125369292536007E~307) = 0.11055812779403243E306 +nextAfter (0.123E~2, 0.11125369292536007E~307) = 0.12299999999999998E~2 +rem (0.123E~2, 0.11125369292536007E~307) = 0.0 +* (0.123E~2, 0.5E~323) = 0.0 ++ (0.123E~2, 0.5E~323) = 0.123E~2 +- (0.123E~2, 0.5E~323) = 0.123E~2 +/ (0.123E~2, 0.5E~323) = inf +nextAfter (0.123E~2, 0.5E~323) = 0.12299999999999998E~2 +rem (0.123E~2, 0.5E~323) = ~inf +* (0.123E~2, 0.0) = 0.0 ++ (0.123E~2, 0.0) = 0.123E~2 +- (0.123E~2, 0.0) = 0.123E~2 +/ (0.123E~2, 0.0) = inf +nextAfter (0.123E~2, 0.0) = 0.12299999999999998E~2 +rem (0.123E~2, 0.0) = nan +* (0.123E~2, ~0.17976931348623157E309) = ~0.2211162555880648E306 ++ (0.123E~2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E~2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E~2, ~0.17976931348623157E309) = ~0.684210211491E~311 +nextAfter (0.123E~2, ~0.17976931348623157E309) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.17976931348623157E309) = 0.123E~2 +* (0.123E~2, ~0.8988465674311579E308) = ~0.1105581277940324E306 ++ (0.123E~2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E~2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E~2, ~0.8988465674311579E308) = ~0.1368420422982E~310 +nextAfter (0.123E~2, ~0.8988465674311579E308) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.8988465674311579E308) = 0.123E~2 +* (0.123E~2, ~0.123E4) = ~0.15129E1 ++ (0.123E~2, ~0.123E4) = ~0.122999877E4 +- (0.123E~2, ~0.123E4) = 0.123000123E4 +/ (0.123E~2, ~0.123E4) = ~0.1E~5 +nextAfter (0.123E~2, ~0.123E4) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E4) = 0.123E~2 +* (0.123E~2, ~0.123E2) = ~0.15129E~1 ++ (0.123E~2, ~0.123E2) = ~0.12298770000000001E2 +- (0.123E~2, ~0.123E2) = 0.1230123E2 +/ (0.123E~2, ~0.123E2) = ~0.9999999999999999E~4 +nextAfter (0.123E~2, ~0.123E2) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E2) = 0.123E~2 +* (0.123E~2, ~0.3141592653589793E1) = ~0.38641589639154456E~2 ++ (0.123E~2, ~0.3141592653589793E1) = ~0.3140362653589793E1 +- (0.123E~2, ~0.3141592653589793E1) = 0.3142822653589793E1 +/ (0.123E~2, ~0.3141592653589793E1) = ~0.3915211600060625E~3 +nextAfter (0.123E~2, ~0.3141592653589793E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.3141592653589793E1) = 0.123E~2 +* (0.123E~2, ~0.2718281828459045E1) = ~0.33434866490046253E~2 ++ (0.123E~2, ~0.2718281828459045E1) = ~0.2717051828459045E1 +- (0.123E~2, ~0.2718281828459045E1) = 0.2719511828459045E1 +/ (0.123E~2, ~0.2718281828459045E1) = ~0.45249171264087406E~3 +nextAfter (0.123E~2, ~0.2718281828459045E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.2718281828459045E1) = 0.123E~2 +* (0.123E~2, ~0.123E1) = ~0.15129E~2 ++ (0.123E~2, ~0.123E1) = ~0.122877E1 +- (0.123E~2, ~0.123E1) = 0.123123E1 +/ (0.123E~2, ~0.123E1) = ~0.1E~2 +nextAfter (0.123E~2, ~0.123E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E1) = 0.123E~2 +* (0.123E~2, ~0.123) = ~0.15129E~3 ++ (0.123E~2, ~0.123) = ~0.12177 +- (0.123E~2, ~0.123) = 0.12423 +/ (0.123E~2, ~0.123) = ~0.1E~1 +nextAfter (0.123E~2, ~0.123) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123) = 0.123E~2 +* (0.123E~2, ~0.123E~2) = ~0.15129E~5 ++ (0.123E~2, ~0.123E~2) = 0.0 +- (0.123E~2, ~0.123E~2) = 0.246E~2 +/ (0.123E~2, ~0.123E~2) = ~0.1E1 +nextAfter (0.123E~2, ~0.123E~2) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E~2) = 0.0 +* (0.123E~2, ~0.22250738585072014E~307) = ~0.2736840845964E~310 ++ (0.123E~2, ~0.22250738585072014E~307) = 0.123E~2 +- (0.123E~2, ~0.22250738585072014E~307) = 0.123E~2 +/ (0.123E~2, ~0.22250738585072014E~307) = ~0.5527906389701621E305 +nextAfter (0.123E~2, ~0.22250738585072014E~307) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.22250738585072014E~307) = 0.0 +* (0.123E~2, ~0.11125369292536007E~307) = ~0.1368420422982E~310 ++ (0.123E~2, ~0.11125369292536007E~307) = 0.123E~2 +- (0.123E~2, ~0.11125369292536007E~307) = 0.123E~2 +/ (0.123E~2, ~0.11125369292536007E~307) = ~0.11055812779403243E306 +nextAfter (0.123E~2, ~0.11125369292536007E~307) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.11125369292536007E~307) = 0.0 +* (0.123E~2, ~0.5E~323) = ~0.0 ++ (0.123E~2, ~0.5E~323) = 0.123E~2 +- (0.123E~2, ~0.5E~323) = 0.123E~2 +/ (0.123E~2, ~0.5E~323) = ~inf +nextAfter (0.123E~2, ~0.5E~323) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.5E~323) = ~inf +* (0.123E~2, ~0.0) = ~0.0 ++ (0.123E~2, ~0.0) = 0.123E~2 +- (0.123E~2, ~0.0) = 0.123E~2 +/ (0.123E~2, ~0.0) = ~inf +nextAfter (0.123E~2, ~0.0) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.0) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300000000000002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.123E~2, ~inf) = ~inf ++ (0.123E~2, ~inf) = ~inf +- (0.123E~2, ~inf) = inf +/ (0.123E~2, ~inf) = ~0.0 +nextAfter (0.123E~2, ~inf) = 0.12299999999999998E~2 +rem (0.123E~2, ~inf) = 0.123E~2 +* (0.123E~2, nan) = nan ++ (0.123E~2, nan) = nan +- (0.123E~2, nan) = nan +/ (0.123E~2, nan) = nan +nextAfter (0.123E~2, nan) = nan +rem (0.123E~2, nan) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300000000000002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.22250738585072014E~307, 0.17976931348623157E309) = 0.39999999999999996E1 ++ (0.22250738585072014E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.22250738585072014E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.22250738585072014E~307, 0.17976931348623157E309) = 0.0 +nextAfter (0.22250738585072014E~307, 0.17976931348623157E309) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.17976931348623157E309) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.8988465674311579E308) = 0.19999999999999998E1 ++ (0.22250738585072014E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.22250738585072014E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.22250738585072014E~307, 0.8988465674311579E308) = 0.0 +nextAfter (0.22250738585072014E~307, 0.8988465674311579E308) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.8988465674311579E308) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E4) = 0.27368408459638577E~304 ++ (0.22250738585072014E~307, 0.123E4) = 0.123E4 +- (0.22250738585072014E~307, 0.123E4) = ~0.123E4 +/ (0.22250738585072014E~307, 0.123E4) = 0.18090031369976E~310 +nextAfter (0.22250738585072014E~307, 0.123E4) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E4) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E2) = 0.2736840845963858E~306 ++ (0.22250738585072014E~307, 0.123E2) = 0.123E2 +- (0.22250738585072014E~307, 0.123E2) = ~0.123E2 +/ (0.22250738585072014E~307, 0.123E2) = 0.1809003136997725E~308 +nextAfter (0.22250738585072014E~307, 0.123E2) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.3141592653589793E1) = 0.6990275687580919E~307 ++ (0.22250738585072014E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.22250738585072014E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.22250738585072014E~307, 0.3141592653589793E1) = 0.7082630066519554E~308 +nextAfter (0.22250738585072014E~307, 0.3141592653589793E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.3141592653589793E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.2718281828459045E1) = 0.6048377836559378E~307 ++ (0.22250738585072014E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.22250738585072014E~307, 0.2718281828459045E1) = 0.818558927632814E~308 +nextAfter (0.22250738585072014E~307, 0.2718281828459045E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.2718281828459045E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E1) = 0.27368408459638577E~307 ++ (0.22250738585072014E~307, 0.123E1) = 0.123E1 +- (0.22250738585072014E~307, 0.123E1) = ~0.123E1 +/ (0.22250738585072014E~307, 0.123E1) = 0.18090031369977247E~307 +nextAfter (0.22250738585072014E~307, 0.123E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123) = 0.273684084596386E~308 ++ (0.22250738585072014E~307, 0.123) = 0.123 +- (0.22250738585072014E~307, 0.123) = ~0.123 +/ (0.22250738585072014E~307, 0.123) = 0.1809003136997725E~306 +nextAfter (0.22250738585072014E~307, 0.123) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E~2) = 0.2736840845964E~310 ++ (0.22250738585072014E~307, 0.123E~2) = 0.123E~2 +- (0.22250738585072014E~307, 0.123E~2) = ~0.123E~2 +/ (0.22250738585072014E~307, 0.123E~2) = 0.18090031369977247E~304 +nextAfter (0.22250738585072014E~307, 0.123E~2) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E~2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 ++ (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.4450147717014403E~307 +- (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +/ (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.1E1 +nextAfter (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.22250738585072014E~307 +rem (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +* (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 ++ (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.3337610787760802E~307 +- (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.2E1 +nextAfter (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 +* (0.22250738585072014E~307, 0.5E~323) = 0.0 ++ (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507202E~307 +- (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507201E~307 +/ (0.22250738585072014E~307, 0.5E~323) = 0.4503599627370496E16 +nextAfter (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.5E~323) = 0.0 +* (0.22250738585072014E~307, 0.0) = 0.0 ++ (0.22250738585072014E~307, 0.0) = 0.22250738585072014E~307 +- (0.22250738585072014E~307, 0.0) = 0.22250738585072014E~307 +/ (0.22250738585072014E~307, 0.0) = inf +nextAfter (0.22250738585072014E~307, 0.0) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.0) = nan +* (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.39999999999999996E1 ++ (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.19999999999999998E1 ++ (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E4) = ~0.27368408459638577E~304 ++ (0.22250738585072014E~307, ~0.123E4) = ~0.123E4 +- (0.22250738585072014E~307, ~0.123E4) = 0.123E4 +/ (0.22250738585072014E~307, ~0.123E4) = ~0.18090031369976E~310 +nextAfter (0.22250738585072014E~307, ~0.123E4) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E4) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E2) = ~0.2736840845963858E~306 ++ (0.22250738585072014E~307, ~0.123E2) = ~0.123E2 +- (0.22250738585072014E~307, ~0.123E2) = 0.123E2 +/ (0.22250738585072014E~307, ~0.123E2) = ~0.1809003136997725E~308 +nextAfter (0.22250738585072014E~307, ~0.123E2) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.6990275687580919E~307 ++ (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.7082630066519554E~308 +nextAfter (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.6048377836559378E~307 ++ (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.818558927632814E~308 +nextAfter (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E1) = ~0.27368408459638577E~307 ++ (0.22250738585072014E~307, ~0.123E1) = ~0.123E1 +- (0.22250738585072014E~307, ~0.123E1) = 0.123E1 +/ (0.22250738585072014E~307, ~0.123E1) = ~0.18090031369977247E~307 +nextAfter (0.22250738585072014E~307, ~0.123E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123) = ~0.273684084596386E~308 ++ (0.22250738585072014E~307, ~0.123) = ~0.123 +- (0.22250738585072014E~307, ~0.123) = 0.123 +/ (0.22250738585072014E~307, ~0.123) = ~0.1809003136997725E~306 +nextAfter (0.22250738585072014E~307, ~0.123) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E~2) = ~0.2736840845964E~310 ++ (0.22250738585072014E~307, ~0.123E~2) = ~0.123E~2 +- (0.22250738585072014E~307, ~0.123E~2) = 0.123E~2 +/ (0.22250738585072014E~307, ~0.123E~2) = ~0.18090031369977247E~304 +nextAfter (0.22250738585072014E~307, ~0.123E~2) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E~2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.0 ++ (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +- (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.4450147717014403E~307 +/ (0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.1E1 +nextAfter (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +* (0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.0 ++ (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +- (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.3337610787760802E~307 +/ (0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.2E1 +nextAfter (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 +* (0.22250738585072014E~307, ~0.5E~323) = ~0.0 ++ (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507201E~307 +- (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507202E~307 +/ (0.22250738585072014E~307, ~0.5E~323) = ~0.4503599627370496E16 +nextAfter (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.5E~323) = 0.0 +* (0.22250738585072014E~307, ~0.0) = ~0.0 ++ (0.22250738585072014E~307, ~0.0) = 0.22250738585072014E~307 +- (0.22250738585072014E~307, ~0.0) = 0.22250738585072014E~307 +/ (0.22250738585072014E~307, ~0.0) = ~inf +nextAfter (0.22250738585072014E~307, ~0.0) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.0) = nan +* (0.22250738585072014E~307, inf) = inf ++ (0.22250738585072014E~307, inf) = inf +- (0.22250738585072014E~307, inf) = ~inf +/ (0.22250738585072014E~307, inf) = 0.0 +nextAfter (0.22250738585072014E~307, inf) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, inf) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~inf) = ~inf ++ (0.22250738585072014E~307, ~inf) = ~inf +- (0.22250738585072014E~307, ~inf) = inf +/ (0.22250738585072014E~307, ~inf) = ~0.0 +nextAfter (0.22250738585072014E~307, ~inf) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~inf) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, nan) = nan ++ (0.22250738585072014E~307, nan) = nan +- (0.22250738585072014E~307, nan) = nan +/ (0.22250738585072014E~307, nan) = nan +nextAfter (0.22250738585072014E~307, nan) = nan +rem (0.22250738585072014E~307, nan) = nan +* (0.22250738585072014E~307, inf) = inf ++ (0.22250738585072014E~307, inf) = inf +- (0.22250738585072014E~307, inf) = ~inf +/ (0.22250738585072014E~307, inf) = 0.0 +nextAfter (0.22250738585072014E~307, inf) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, inf) = 0.22250738585072014E~307 +* (0.11125369292536007E~307, 0.17976931348623157E309) = 0.19999999999999998E1 ++ (0.11125369292536007E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.11125369292536007E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.11125369292536007E~307, 0.17976931348623157E309) = 0.0 +nextAfter (0.11125369292536007E~307, 0.17976931348623157E309) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.17976931348623157E309) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.8988465674311579E308) = 0.9999999999999999 ++ (0.11125369292536007E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.11125369292536007E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.11125369292536007E~307, 0.8988465674311579E308) = 0.0 +nextAfter (0.11125369292536007E~307, 0.8988465674311579E308) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.8988465674311579E308) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E4) = 0.13684204229819289E~304 ++ (0.11125369292536007E~307, 0.123E4) = 0.123E4 +- (0.11125369292536007E~307, 0.123E4) = ~0.123E4 +/ (0.11125369292536007E~307, 0.123E4) = 0.904501568499E~311 +nextAfter (0.11125369292536007E~307, 0.123E4) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E4) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E2) = 0.1368420422981929E~306 ++ (0.11125369292536007E~307, 0.123E2) = 0.123E2 +- (0.11125369292536007E~307, 0.123E2) = ~0.123E2 +/ (0.11125369292536007E~307, 0.123E2) = 0.90450156849886E~309 +nextAfter (0.11125369292536007E~307, 0.123E2) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.3141592653589793E1) = 0.34951378437904593E~307 ++ (0.11125369292536007E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.11125369292536007E~307, 0.3141592653589793E1) = 0.3541315033259774E~308 +nextAfter (0.11125369292536007E~307, 0.3141592653589793E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.3141592653589793E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.2718281828459045E1) = 0.3024188918279689E~307 ++ (0.11125369292536007E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.11125369292536007E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.11125369292536007E~307, 0.2718281828459045E1) = 0.409279463816407E~308 +nextAfter (0.11125369292536007E~307, 0.2718281828459045E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.2718281828459045E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E1) = 0.1368420422981929E~307 ++ (0.11125369292536007E~307, 0.123E1) = 0.123E1 +- (0.11125369292536007E~307, 0.123E1) = ~0.123E1 +/ (0.11125369292536007E~307, 0.123E1) = 0.9045015684988623E~308 +nextAfter (0.11125369292536007E~307, 0.123E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123) = 0.136842042298193E~308 ++ (0.11125369292536007E~307, 0.123) = 0.123 +- (0.11125369292536007E~307, 0.123) = ~0.123 +/ (0.11125369292536007E~307, 0.123) = 0.9045015684988624E~307 +nextAfter (0.11125369292536007E~307, 0.123) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E~2) = 0.1368420422982E~310 ++ (0.11125369292536007E~307, 0.123E~2) = 0.123E~2 +- (0.11125369292536007E~307, 0.123E~2) = ~0.123E~2 +/ (0.11125369292536007E~307, 0.123E~2) = 0.9045015684988623E~305 +nextAfter (0.11125369292536007E~307, 0.123E~2) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E~2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.0 ++ (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.3337610787760802E~307 +- (0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536007E~307 +/ (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.5 +nextAfter (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 ++ (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.22250738585072014E~307 +- (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +/ (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.1E1 +nextAfter (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.11125369292536007E~307 +rem (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +* (0.11125369292536007E~307, 0.5E~323) = 0.0 ++ (0.11125369292536007E~307, 0.5E~323) = 0.1112536929253601E~307 +- (0.11125369292536007E~307, 0.5E~323) = 0.11125369292536E~307 +/ (0.11125369292536007E~307, 0.5E~323) = 0.2251799813685248E16 +nextAfter (0.11125369292536007E~307, 0.5E~323) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, 0.5E~323) = 0.0 +* (0.11125369292536007E~307, 0.0) = 0.0 ++ (0.11125369292536007E~307, 0.0) = 0.11125369292536007E~307 +- (0.11125369292536007E~307, 0.0) = 0.11125369292536007E~307 +/ (0.11125369292536007E~307, 0.0) = inf +nextAfter (0.11125369292536007E~307, 0.0) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, 0.0) = nan +* (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.19999999999999998E1 ++ (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.9999999999999999 ++ (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E4) = ~0.13684204229819289E~304 ++ (0.11125369292536007E~307, ~0.123E4) = ~0.123E4 +- (0.11125369292536007E~307, ~0.123E4) = 0.123E4 +/ (0.11125369292536007E~307, ~0.123E4) = ~0.904501568499E~311 +nextAfter (0.11125369292536007E~307, ~0.123E4) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E4) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E2) = ~0.1368420422981929E~306 ++ (0.11125369292536007E~307, ~0.123E2) = ~0.123E2 +- (0.11125369292536007E~307, ~0.123E2) = 0.123E2 +/ (0.11125369292536007E~307, ~0.123E2) = ~0.90450156849886E~309 +nextAfter (0.11125369292536007E~307, ~0.123E2) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.34951378437904593E~307 ++ (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3541315033259774E~308 +nextAfter (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.3024188918279689E~307 ++ (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.409279463816407E~308 +nextAfter (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E1) = ~0.1368420422981929E~307 ++ (0.11125369292536007E~307, ~0.123E1) = ~0.123E1 +- (0.11125369292536007E~307, ~0.123E1) = 0.123E1 +/ (0.11125369292536007E~307, ~0.123E1) = ~0.9045015684988623E~308 +nextAfter (0.11125369292536007E~307, ~0.123E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123) = ~0.136842042298193E~308 ++ (0.11125369292536007E~307, ~0.123) = ~0.123 +- (0.11125369292536007E~307, ~0.123) = 0.123 +/ (0.11125369292536007E~307, ~0.123) = ~0.9045015684988624E~307 +nextAfter (0.11125369292536007E~307, ~0.123) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E~2) = ~0.1368420422982E~310 ++ (0.11125369292536007E~307, ~0.123E~2) = ~0.123E~2 +- (0.11125369292536007E~307, ~0.123E~2) = 0.123E~2 +/ (0.11125369292536007E~307, ~0.123E~2) = ~0.9045015684988623E~305 +nextAfter (0.11125369292536007E~307, ~0.123E~2) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E~2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.0 ++ (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.11125369292536007E~307 +- (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.3337610787760802E~307 +/ (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.5 +nextAfter (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.0 ++ (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +- (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.22250738585072014E~307 +/ (0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.1E1 +nextAfter (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +* (0.11125369292536007E~307, ~0.5E~323) = ~0.0 ++ (0.11125369292536007E~307, ~0.5E~323) = 0.11125369292536E~307 +- (0.11125369292536007E~307, ~0.5E~323) = 0.1112536929253601E~307 +/ (0.11125369292536007E~307, ~0.5E~323) = ~0.2251799813685248E16 +nextAfter (0.11125369292536007E~307, ~0.5E~323) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.5E~323) = 0.0 +* (0.11125369292536007E~307, ~0.0) = ~0.0 ++ (0.11125369292536007E~307, ~0.0) = 0.11125369292536007E~307 +- (0.11125369292536007E~307, ~0.0) = 0.11125369292536007E~307 +/ (0.11125369292536007E~307, ~0.0) = ~inf +nextAfter (0.11125369292536007E~307, ~0.0) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.0) = nan +* (0.11125369292536007E~307, inf) = inf ++ (0.11125369292536007E~307, inf) = inf +- (0.11125369292536007E~307, inf) = ~inf +/ (0.11125369292536007E~307, inf) = 0.0 +nextAfter (0.11125369292536007E~307, inf) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, inf) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~inf) = ~inf ++ (0.11125369292536007E~307, ~inf) = ~inf +- (0.11125369292536007E~307, ~inf) = inf +/ (0.11125369292536007E~307, ~inf) = ~0.0 +nextAfter (0.11125369292536007E~307, ~inf) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~inf) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, nan) = nan ++ (0.11125369292536007E~307, nan) = nan +- (0.11125369292536007E~307, nan) = nan +/ (0.11125369292536007E~307, nan) = nan +nextAfter (0.11125369292536007E~307, nan) = nan +rem (0.11125369292536007E~307, nan) = nan +* (0.11125369292536007E~307, inf) = inf ++ (0.11125369292536007E~307, inf) = inf +- (0.11125369292536007E~307, inf) = ~inf +/ (0.11125369292536007E~307, inf) = 0.0 +nextAfter (0.11125369292536007E~307, inf) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, inf) = 0.11125369292536007E~307 +* (0.5E~323, 0.17976931348623157E309) = 0.8881784197001251E~15 ++ (0.5E~323, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.5E~323, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.5E~323, 0.17976931348623157E309) = 0.0 +nextAfter (0.5E~323, 0.17976931348623157E309) = 0.1E~322 +rem (0.5E~323, 0.17976931348623157E309) = 0.5E~323 +* (0.5E~323, 0.8988465674311579E308) = 0.44408920985006257E~15 ++ (0.5E~323, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.5E~323, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.5E~323, 0.8988465674311579E308) = 0.0 +nextAfter (0.5E~323, 0.8988465674311579E308) = 0.1E~322 +rem (0.5E~323, 0.8988465674311579E308) = 0.5E~323 +* (0.5E~323, 0.123E4) = 0.6077E~320 ++ (0.5E~323, 0.123E4) = 0.123E4 +- (0.5E~323, 0.123E4) = ~0.123E4 +/ (0.5E~323, 0.123E4) = 0.0 +nextAfter (0.5E~323, 0.123E4) = 0.1E~322 +rem (0.5E~323, 0.123E4) = 0.5E~323 +* (0.5E~323, 0.123E2) = 0.6E~322 ++ (0.5E~323, 0.123E2) = 0.123E2 +- (0.5E~323, 0.123E2) = ~0.123E2 +/ (0.5E~323, 0.123E2) = 0.0 +nextAfter (0.5E~323, 0.123E2) = 0.1E~322 +rem (0.5E~323, 0.123E2) = 0.5E~323 +* (0.5E~323, 0.3141592653589793E1) = 0.15E~322 ++ (0.5E~323, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.5E~323, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.5E~323, 0.3141592653589793E1) = 0.0 +nextAfter (0.5E~323, 0.3141592653589793E1) = 0.1E~322 +rem (0.5E~323, 0.3141592653589793E1) = 0.5E~323 +* (0.5E~323, 0.2718281828459045E1) = 0.15E~322 ++ (0.5E~323, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.5E~323, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.5E~323, 0.2718281828459045E1) = 0.0 +nextAfter (0.5E~323, 0.2718281828459045E1) = 0.1E~322 +rem (0.5E~323, 0.2718281828459045E1) = 0.5E~323 +* (0.5E~323, 0.123E1) = 0.5E~323 ++ (0.5E~323, 0.123E1) = 0.123E1 +- (0.5E~323, 0.123E1) = ~0.123E1 +/ (0.5E~323, 0.123E1) = 0.5E~323 +nextAfter (0.5E~323, 0.123E1) = 0.1E~322 +rem (0.5E~323, 0.123E1) = 0.5E~323 +* (0.5E~323, 0.123) = 0.0 ++ (0.5E~323, 0.123) = 0.123 +- (0.5E~323, 0.123) = ~0.123 +/ (0.5E~323, 0.123) = 0.4E~322 +nextAfter (0.5E~323, 0.123) = 0.1E~322 +rem (0.5E~323, 0.123) = 0.5E~323 +* (0.5E~323, 0.123E~2) = 0.0 ++ (0.5E~323, 0.123E~2) = 0.123E~2 +- (0.5E~323, 0.123E~2) = ~0.123E~2 +/ (0.5E~323, 0.123E~2) = 0.4017E~320 +nextAfter (0.5E~323, 0.123E~2) = 0.1E~322 +rem (0.5E~323, 0.123E~2) = 0.5E~323 +* (0.5E~323, 0.22250738585072014E~307) = 0.0 ++ (0.5E~323, 0.22250738585072014E~307) = 0.2225073858507202E~307 +- (0.5E~323, 0.22250738585072014E~307) = ~0.2225073858507201E~307 +/ (0.5E~323, 0.22250738585072014E~307) = 0.2220446049250313E~15 +nextAfter (0.5E~323, 0.22250738585072014E~307) = 0.1E~322 +rem (0.5E~323, 0.22250738585072014E~307) = 0.5E~323 +* (0.5E~323, 0.11125369292536007E~307) = 0.0 ++ (0.5E~323, 0.11125369292536007E~307) = 0.1112536929253601E~307 +- (0.5E~323, 0.11125369292536007E~307) = ~0.11125369292536E~307 +/ (0.5E~323, 0.11125369292536007E~307) = 0.4440892098500626E~15 +nextAfter (0.5E~323, 0.11125369292536007E~307) = 0.1E~322 +rem (0.5E~323, 0.11125369292536007E~307) = 0.5E~323 +* (0.5E~323, 0.5E~323) = 0.0 ++ (0.5E~323, 0.5E~323) = 0.1E~322 +- (0.5E~323, 0.5E~323) = 0.0 +/ (0.5E~323, 0.5E~323) = 0.1E1 +nextAfter (0.5E~323, 0.5E~323) = 0.5E~323 +rem (0.5E~323, 0.5E~323) = 0.0 +* (0.5E~323, 0.0) = 0.0 ++ (0.5E~323, 0.0) = 0.5E~323 +- (0.5E~323, 0.0) = 0.5E~323 +/ (0.5E~323, 0.0) = inf +nextAfter (0.5E~323, 0.0) = 0.0 +rem (0.5E~323, 0.0) = nan +* (0.5E~323, ~0.17976931348623157E309) = ~0.8881784197001251E~15 ++ (0.5E~323, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.5E~323, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.5E~323, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.5E~323, ~0.17976931348623157E309) = 0.0 +rem (0.5E~323, ~0.17976931348623157E309) = 0.5E~323 +* (0.5E~323, ~0.8988465674311579E308) = ~0.44408920985006257E~15 ++ (0.5E~323, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.5E~323, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.5E~323, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.5E~323, ~0.8988465674311579E308) = 0.0 +rem (0.5E~323, ~0.8988465674311579E308) = 0.5E~323 +* (0.5E~323, ~0.123E4) = ~0.6077E~320 ++ (0.5E~323, ~0.123E4) = ~0.123E4 +- (0.5E~323, ~0.123E4) = 0.123E4 +/ (0.5E~323, ~0.123E4) = ~0.0 +nextAfter (0.5E~323, ~0.123E4) = 0.0 +rem (0.5E~323, ~0.123E4) = 0.5E~323 +* (0.5E~323, ~0.123E2) = ~0.6E~322 ++ (0.5E~323, ~0.123E2) = ~0.123E2 +- (0.5E~323, ~0.123E2) = 0.123E2 +/ (0.5E~323, ~0.123E2) = ~0.0 +nextAfter (0.5E~323, ~0.123E2) = 0.0 +rem (0.5E~323, ~0.123E2) = 0.5E~323 +* (0.5E~323, ~0.3141592653589793E1) = ~0.15E~322 ++ (0.5E~323, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.5E~323, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.5E~323, ~0.3141592653589793E1) = ~0.0 +nextAfter (0.5E~323, ~0.3141592653589793E1) = 0.0 +rem (0.5E~323, ~0.3141592653589793E1) = 0.5E~323 +* (0.5E~323, ~0.2718281828459045E1) = ~0.15E~322 ++ (0.5E~323, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.5E~323, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.5E~323, ~0.2718281828459045E1) = ~0.0 +nextAfter (0.5E~323, ~0.2718281828459045E1) = 0.0 +rem (0.5E~323, ~0.2718281828459045E1) = 0.5E~323 +* (0.5E~323, ~0.123E1) = ~0.5E~323 ++ (0.5E~323, ~0.123E1) = ~0.123E1 +- (0.5E~323, ~0.123E1) = 0.123E1 +/ (0.5E~323, ~0.123E1) = ~0.5E~323 +nextAfter (0.5E~323, ~0.123E1) = 0.0 +rem (0.5E~323, ~0.123E1) = 0.5E~323 +* (0.5E~323, ~0.123) = ~0.0 ++ (0.5E~323, ~0.123) = ~0.123 +- (0.5E~323, ~0.123) = 0.123 +/ (0.5E~323, ~0.123) = ~0.4E~322 +nextAfter (0.5E~323, ~0.123) = 0.0 +rem (0.5E~323, ~0.123) = 0.5E~323 +* (0.5E~323, ~0.123E~2) = ~0.0 ++ (0.5E~323, ~0.123E~2) = ~0.123E~2 +- (0.5E~323, ~0.123E~2) = 0.123E~2 +/ (0.5E~323, ~0.123E~2) = ~0.4017E~320 +nextAfter (0.5E~323, ~0.123E~2) = 0.0 +rem (0.5E~323, ~0.123E~2) = 0.5E~323 +* (0.5E~323, ~0.22250738585072014E~307) = ~0.0 ++ (0.5E~323, ~0.22250738585072014E~307) = ~0.2225073858507201E~307 +- (0.5E~323, ~0.22250738585072014E~307) = 0.2225073858507202E~307 +/ (0.5E~323, ~0.22250738585072014E~307) = ~0.2220446049250313E~15 +nextAfter (0.5E~323, ~0.22250738585072014E~307) = 0.0 +rem (0.5E~323, ~0.22250738585072014E~307) = 0.5E~323 +* (0.5E~323, ~0.11125369292536007E~307) = ~0.0 ++ (0.5E~323, ~0.11125369292536007E~307) = ~0.11125369292536E~307 +- (0.5E~323, ~0.11125369292536007E~307) = 0.1112536929253601E~307 +/ (0.5E~323, ~0.11125369292536007E~307) = ~0.4440892098500626E~15 +nextAfter (0.5E~323, ~0.11125369292536007E~307) = 0.0 +rem (0.5E~323, ~0.11125369292536007E~307) = 0.5E~323 +* (0.5E~323, ~0.5E~323) = ~0.0 ++ (0.5E~323, ~0.5E~323) = 0.0 +- (0.5E~323, ~0.5E~323) = 0.1E~322 +/ (0.5E~323, ~0.5E~323) = ~0.1E1 +nextAfter (0.5E~323, ~0.5E~323) = 0.0 +rem (0.5E~323, ~0.5E~323) = 0.0 +* (0.5E~323, ~0.0) = ~0.0 ++ (0.5E~323, ~0.0) = 0.5E~323 +- (0.5E~323, ~0.0) = 0.5E~323 +/ (0.5E~323, ~0.0) = ~inf +nextAfter (0.5E~323, ~0.0) = 0.0 +rem (0.5E~323, ~0.0) = nan +* (0.5E~323, inf) = inf ++ (0.5E~323, inf) = inf +- (0.5E~323, inf) = ~inf +/ (0.5E~323, inf) = 0.0 +nextAfter (0.5E~323, inf) = 0.1E~322 +rem (0.5E~323, inf) = 0.5E~323 +* (0.5E~323, ~inf) = ~inf ++ (0.5E~323, ~inf) = ~inf +- (0.5E~323, ~inf) = inf +/ (0.5E~323, ~inf) = ~0.0 +nextAfter (0.5E~323, ~inf) = 0.0 +rem (0.5E~323, ~inf) = 0.5E~323 +* (0.5E~323, nan) = nan ++ (0.5E~323, nan) = nan +- (0.5E~323, nan) = nan +/ (0.5E~323, nan) = nan +nextAfter (0.5E~323, nan) = nan +rem (0.5E~323, nan) = nan +* (0.5E~323, inf) = inf ++ (0.5E~323, inf) = inf +- (0.5E~323, inf) = ~inf +/ (0.5E~323, inf) = 0.0 +nextAfter (0.5E~323, inf) = 0.1E~322 +rem (0.5E~323, inf) = 0.5E~323 +* (0.0, 0.17976931348623157E309) = 0.0 ++ (0.0, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.0, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.0, 0.17976931348623157E309) = 0.0 +nextAfter (0.0, 0.17976931348623157E309) = 0.5E~323 +rem (0.0, 0.17976931348623157E309) = 0.0 +* (0.0, 0.8988465674311579E308) = 0.0 ++ (0.0, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.0, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.0, 0.8988465674311579E308) = 0.0 +nextAfter (0.0, 0.8988465674311579E308) = 0.5E~323 +rem (0.0, 0.8988465674311579E308) = 0.0 +* (0.0, 0.123E4) = 0.0 ++ (0.0, 0.123E4) = 0.123E4 +- (0.0, 0.123E4) = ~0.123E4 +/ (0.0, 0.123E4) = 0.0 +nextAfter (0.0, 0.123E4) = 0.5E~323 +rem (0.0, 0.123E4) = 0.0 +* (0.0, 0.123E2) = 0.0 ++ (0.0, 0.123E2) = 0.123E2 +- (0.0, 0.123E2) = ~0.123E2 +/ (0.0, 0.123E2) = 0.0 +nextAfter (0.0, 0.123E2) = 0.5E~323 +rem (0.0, 0.123E2) = 0.0 +* (0.0, 0.3141592653589793E1) = 0.0 ++ (0.0, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.0, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.0, 0.3141592653589793E1) = 0.0 +nextAfter (0.0, 0.3141592653589793E1) = 0.5E~323 +rem (0.0, 0.3141592653589793E1) = 0.0 +* (0.0, 0.2718281828459045E1) = 0.0 ++ (0.0, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.0, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.0, 0.2718281828459045E1) = 0.0 +nextAfter (0.0, 0.2718281828459045E1) = 0.5E~323 +rem (0.0, 0.2718281828459045E1) = 0.0 +* (0.0, 0.123E1) = 0.0 ++ (0.0, 0.123E1) = 0.123E1 +- (0.0, 0.123E1) = ~0.123E1 +/ (0.0, 0.123E1) = 0.0 +nextAfter (0.0, 0.123E1) = 0.5E~323 +rem (0.0, 0.123E1) = 0.0 +* (0.0, 0.123) = 0.0 ++ (0.0, 0.123) = 0.123 +- (0.0, 0.123) = ~0.123 +/ (0.0, 0.123) = 0.0 +nextAfter (0.0, 0.123) = 0.5E~323 +rem (0.0, 0.123) = 0.0 +* (0.0, 0.123E~2) = 0.0 ++ (0.0, 0.123E~2) = 0.123E~2 +- (0.0, 0.123E~2) = ~0.123E~2 +/ (0.0, 0.123E~2) = 0.0 +nextAfter (0.0, 0.123E~2) = 0.5E~323 +rem (0.0, 0.123E~2) = 0.0 +* (0.0, 0.22250738585072014E~307) = 0.0 ++ (0.0, 0.22250738585072014E~307) = 0.22250738585072014E~307 +- (0.0, 0.22250738585072014E~307) = ~0.22250738585072014E~307 +/ (0.0, 0.22250738585072014E~307) = 0.0 +nextAfter (0.0, 0.22250738585072014E~307) = 0.5E~323 +rem (0.0, 0.22250738585072014E~307) = 0.0 +* (0.0, 0.11125369292536007E~307) = 0.0 ++ (0.0, 0.11125369292536007E~307) = 0.11125369292536007E~307 +- (0.0, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (0.0, 0.11125369292536007E~307) = 0.0 +nextAfter (0.0, 0.11125369292536007E~307) = 0.5E~323 +rem (0.0, 0.11125369292536007E~307) = 0.0 +* (0.0, 0.5E~323) = 0.0 ++ (0.0, 0.5E~323) = 0.5E~323 +- (0.0, 0.5E~323) = ~0.5E~323 +/ (0.0, 0.5E~323) = 0.0 +nextAfter (0.0, 0.5E~323) = 0.5E~323 +rem (0.0, 0.5E~323) = 0.0 +* (0.0, 0.0) = 0.0 ++ (0.0, 0.0) = 0.0 +- (0.0, 0.0) = 0.0 +/ (0.0, 0.0) = nan +nextAfter (0.0, 0.0) = 0.0 +rem (0.0, 0.0) = 0.0 +* (0.0, ~0.17976931348623157E309) = ~0.0 ++ (0.0, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.0, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.0, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.0, ~0.17976931348623157E309) = ~0.5E~323 +rem (0.0, ~0.17976931348623157E309) = 0.0 +* (0.0, ~0.8988465674311579E308) = ~0.0 ++ (0.0, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.0, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.0, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.0, ~0.8988465674311579E308) = ~0.5E~323 +rem (0.0, ~0.8988465674311579E308) = 0.0 +* (0.0, ~0.123E4) = ~0.0 ++ (0.0, ~0.123E4) = ~0.123E4 +- (0.0, ~0.123E4) = 0.123E4 +/ (0.0, ~0.123E4) = ~0.0 +nextAfter (0.0, ~0.123E4) = ~0.5E~323 +rem (0.0, ~0.123E4) = 0.0 +* (0.0, ~0.123E2) = ~0.0 ++ (0.0, ~0.123E2) = ~0.123E2 +- (0.0, ~0.123E2) = 0.123E2 +/ (0.0, ~0.123E2) = ~0.0 +nextAfter (0.0, ~0.123E2) = ~0.5E~323 +rem (0.0, ~0.123E2) = 0.0 +* (0.0, ~0.3141592653589793E1) = ~0.0 ++ (0.0, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.0, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.0, ~0.3141592653589793E1) = ~0.0 +nextAfter (0.0, ~0.3141592653589793E1) = ~0.5E~323 +rem (0.0, ~0.3141592653589793E1) = 0.0 +* (0.0, ~0.2718281828459045E1) = ~0.0 ++ (0.0, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.0, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.0, ~0.2718281828459045E1) = ~0.0 +nextAfter (0.0, ~0.2718281828459045E1) = ~0.5E~323 +rem (0.0, ~0.2718281828459045E1) = 0.0 +* (0.0, ~0.123E1) = ~0.0 ++ (0.0, ~0.123E1) = ~0.123E1 +- (0.0, ~0.123E1) = 0.123E1 +/ (0.0, ~0.123E1) = ~0.0 +nextAfter (0.0, ~0.123E1) = ~0.5E~323 +rem (0.0, ~0.123E1) = 0.0 +* (0.0, ~0.123) = ~0.0 ++ (0.0, ~0.123) = ~0.123 +- (0.0, ~0.123) = 0.123 +/ (0.0, ~0.123) = ~0.0 +nextAfter (0.0, ~0.123) = ~0.5E~323 +rem (0.0, ~0.123) = 0.0 +* (0.0, ~0.123E~2) = ~0.0 ++ (0.0, ~0.123E~2) = ~0.123E~2 +- (0.0, ~0.123E~2) = 0.123E~2 +/ (0.0, ~0.123E~2) = ~0.0 +nextAfter (0.0, ~0.123E~2) = ~0.5E~323 +rem (0.0, ~0.123E~2) = 0.0 +* (0.0, ~0.22250738585072014E~307) = ~0.0 ++ (0.0, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +- (0.0, ~0.22250738585072014E~307) = 0.22250738585072014E~307 +/ (0.0, ~0.22250738585072014E~307) = ~0.0 +nextAfter (0.0, ~0.22250738585072014E~307) = ~0.5E~323 +rem (0.0, ~0.22250738585072014E~307) = 0.0 +* (0.0, ~0.11125369292536007E~307) = ~0.0 ++ (0.0, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (0.0, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (0.0, ~0.11125369292536007E~307) = ~0.0 +nextAfter (0.0, ~0.11125369292536007E~307) = ~0.5E~323 +rem (0.0, ~0.11125369292536007E~307) = 0.0 +* (0.0, ~0.5E~323) = ~0.0 ++ (0.0, ~0.5E~323) = ~0.5E~323 +- (0.0, ~0.5E~323) = 0.5E~323 +/ (0.0, ~0.5E~323) = ~0.0 +nextAfter (0.0, ~0.5E~323) = ~0.5E~323 +rem (0.0, ~0.5E~323) = 0.0 +* (0.0, ~0.0) = ~0.0 ++ (0.0, ~0.0) = 0.0 +- (0.0, ~0.0) = 0.0 +/ (0.0, ~0.0) = nan +nextAfter (0.0, ~0.0) = ~0.0 +rem (0.0, ~0.0) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.5E~323 +rem (0.0, inf) = 0.0 +* (0.0, ~inf) = nan ++ (0.0, ~inf) = ~inf +- (0.0, ~inf) = inf +/ (0.0, ~inf) = ~0.0 +nextAfter (0.0, ~inf) = ~0.5E~323 +rem (0.0, ~inf) = 0.0 +* (0.0, nan) = nan ++ (0.0, nan) = nan +- (0.0, nan) = nan +/ (0.0, nan) = nan +nextAfter (0.0, nan) = nan +rem (0.0, nan) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.5E~323 +rem (0.0, inf) = 0.0 +* (~0.17976931348623157E309, 0.17976931348623157E309) = ~inf ++ (~0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +- (~0.17976931348623157E309, 0.17976931348623157E309) = ~inf +/ (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.1E1 +nextAfter (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +* (~0.17976931348623157E309, 0.8988465674311579E308) = ~inf ++ (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.17976931348623157E309, 0.8988465674311579E308) = ~inf +/ (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.2E1 +nextAfter (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.8988465674311579E308) = 0.0 +* (~0.17976931348623157E309, 0.123E4) = ~inf ++ (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E4) = ~0.1461539134034403E306 +nextAfter (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E4) = 0.0 +* (~0.17976931348623157E309, 0.123E2) = ~inf ++ (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E2) = ~0.1461539134034403E308 +nextAfter (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E2) = 0.0 +* (~0.17976931348623157E309, 0.3141592653589793E1) = ~inf ++ (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.5722234971514056E308 +nextAfter (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.3141592653589793E1) = 0.0 +* (~0.17976931348623157E309, 0.2718281828459045E1) = ~inf ++ (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.661334345850887E308 +nextAfter (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, 0.123E1) = ~inf ++ (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E1) = ~0.1461539134034403E309 +nextAfter (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, 0.123) = ~0.22111625558806483E308 ++ (~0.17976931348623157E309, 0.123) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123) = ~inf +nextAfter (~0.17976931348623157E309, 0.123) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123) = inf +* (~0.17976931348623157E309, 0.123E~2) = ~0.2211162555880648E306 ++ (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E~2) = ~inf +nextAfter (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E~2) = inf +* (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.39999999999999996E1 ++ (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.22250738585072014E~307) = ~inf +nextAfter (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.22250738585072014E~307) = inf +* (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.19999999999999998E1 ++ (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.11125369292536007E~307) = ~inf +nextAfter (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.11125369292536007E~307) = inf +* (~0.17976931348623157E309, 0.5E~323) = ~0.8881784197001251E~15 ++ (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.5E~323) = ~inf +nextAfter (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.5E~323) = inf +* (~0.17976931348623157E309, 0.0) = ~0.0 ++ (~0.17976931348623157E309, 0.0) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.0) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.0) = ~inf +nextAfter (~0.17976931348623157E309, 0.0) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.0) = nan +* (~0.17976931348623157E309, ~0.17976931348623157E309) = inf ++ (~0.17976931348623157E309, ~0.17976931348623157E309) = ~inf +- (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +/ (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.1E1 +nextAfter (~0.17976931348623157E309, ~0.17976931348623157E309) = ~0.17976931348623157E309 +rem (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +* (~0.17976931348623157E309, ~0.8988465674311579E308) = inf ++ (~0.17976931348623157E309, ~0.8988465674311579E308) = ~inf +- (~0.17976931348623157E309, ~0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.17976931348623157E309, ~0.8988465674311579E308) = 0.2E1 +nextAfter (~0.17976931348623157E309, ~0.8988465674311579E308) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.8988465674311579E308) = 0.0 +* (~0.17976931348623157E309, ~0.123E4) = inf ++ (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E4) = 0.1461539134034403E306 +nextAfter (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E4) = 0.0 +* (~0.17976931348623157E309, ~0.123E2) = inf ++ (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E2) = 0.1461539134034403E308 +nextAfter (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E2) = 0.0 +* (~0.17976931348623157E309, ~0.3141592653589793E1) = inf ++ (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.3141592653589793E1) = 0.5722234971514056E308 +nextAfter (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.3141592653589793E1) = 0.0 +* (~0.17976931348623157E309, ~0.2718281828459045E1) = inf ++ (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.2718281828459045E1) = 0.661334345850887E308 +nextAfter (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, ~0.123E1) = inf ++ (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E1) = 0.1461539134034403E309 +nextAfter (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, ~0.123) = 0.22111625558806483E308 ++ (~0.17976931348623157E309, ~0.123) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123) = inf +nextAfter (~0.17976931348623157E309, ~0.123) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123) = inf +* (~0.17976931348623157E309, ~0.123E~2) = 0.2211162555880648E306 ++ (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E~2) = inf +nextAfter (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E~2) = inf +* (~0.17976931348623157E309, ~0.22250738585072014E~307) = 0.39999999999999996E1 ++ (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.22250738585072014E~307) = inf +nextAfter (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.22250738585072014E~307) = inf +* (~0.17976931348623157E309, ~0.11125369292536007E~307) = 0.19999999999999998E1 ++ (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.11125369292536007E~307) = inf +nextAfter (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.11125369292536007E~307) = inf +* (~0.17976931348623157E309, ~0.5E~323) = 0.8881784197001251E~15 ++ (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.5E~323) = inf +nextAfter (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.5E~323) = inf +* (~0.17976931348623157E309, ~0.0) = 0.0 ++ (~0.17976931348623157E309, ~0.0) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.0) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.0) = inf +nextAfter (~0.17976931348623157E309, ~0.0) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.0) = nan +* (~0.17976931348623157E309, inf) = ~inf ++ (~0.17976931348623157E309, inf) = inf +- (~0.17976931348623157E309, inf) = ~inf +/ (~0.17976931348623157E309, inf) = ~0.0 +nextAfter (~0.17976931348623157E309, inf) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, inf) = ~0.17976931348623157E309 +* (~0.17976931348623157E309, ~inf) = inf ++ (~0.17976931348623157E309, ~inf) = ~inf +- (~0.17976931348623157E309, ~inf) = inf +/ (~0.17976931348623157E309, ~inf) = 0.0 +nextAfter (~0.17976931348623157E309, ~inf) = ~inf +rem (~0.17976931348623157E309, ~inf) = ~0.17976931348623157E309 +* (~0.17976931348623157E309, nan) = nan ++ (~0.17976931348623157E309, nan) = nan +- (~0.17976931348623157E309, nan) = nan +/ (~0.17976931348623157E309, nan) = nan +nextAfter (~0.17976931348623157E309, nan) = nan +rem (~0.17976931348623157E309, nan) = nan +* (~0.17976931348623157E309, inf) = ~inf ++ (~0.17976931348623157E309, inf) = inf +- (~0.17976931348623157E309, inf) = ~inf +/ (~0.17976931348623157E309, inf) = ~0.0 +nextAfter (~0.17976931348623157E309, inf) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, inf) = ~0.17976931348623157E309 +* (~0.8988465674311579E308, 0.17976931348623157E309) = ~inf ++ (~0.8988465674311579E308, 0.17976931348623157E309) = 0.8988465674311579E308 +- (~0.8988465674311579E308, 0.17976931348623157E309) = ~inf +/ (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.5 +nextAfter (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, 0.8988465674311579E308) = ~inf ++ (~0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +- (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.17976931348623157E309 +/ (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.1E1 +nextAfter (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +* (~0.8988465674311579E308, 0.123E4) = ~inf ++ (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E4) = ~0.7307695670172015E305 +nextAfter (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E4) = 0.0 +* (~0.8988465674311579E308, 0.123E2) = ~inf ++ (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E2) = ~0.7307695670172014E307 +nextAfter (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E2) = 0.0 +* (~0.8988465674311579E308, 0.3141592653589793E1) = ~inf ++ (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.2861117485757028E308 +nextAfter (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.3141592653589793E1) = 0.0 +* (~0.8988465674311579E308, 0.2718281828459045E1) = ~inf ++ (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.3306671729254435E308 +nextAfter (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, 0.123E1) = ~0.1105581277940324E309 ++ (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E1) = ~0.7307695670172015E308 +nextAfter (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, 0.123) = ~0.11055812779403241E308 ++ (~0.8988465674311579E308, 0.123) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123) = ~inf +nextAfter (~0.8988465674311579E308, 0.123) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123) = inf +* (~0.8988465674311579E308, 0.123E~2) = ~0.1105581277940324E306 ++ (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E~2) = ~inf +nextAfter (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E~2) = inf +* (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.19999999999999998E1 ++ (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.22250738585072014E~307) = ~inf +nextAfter (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.22250738585072014E~307) = inf +* (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.9999999999999999 ++ (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.11125369292536007E~307) = ~inf +nextAfter (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.11125369292536007E~307) = inf +* (~0.8988465674311579E308, 0.5E~323) = ~0.44408920985006257E~15 ++ (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.5E~323) = ~inf +nextAfter (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.5E~323) = inf +* (~0.8988465674311579E308, 0.0) = ~0.0 ++ (~0.8988465674311579E308, 0.0) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.0) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.0) = ~inf +nextAfter (~0.8988465674311579E308, 0.0) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.0) = nan +* (~0.8988465674311579E308, ~0.17976931348623157E309) = inf ++ (~0.8988465674311579E308, ~0.17976931348623157E309) = ~inf +- (~0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.17976931348623157E309) = 0.5 +nextAfter (~0.8988465674311579E308, ~0.17976931348623157E309) = ~0.898846567431158E308 +rem (~0.8988465674311579E308, ~0.17976931348623157E309) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, ~0.8988465674311579E308) = inf ++ (~0.8988465674311579E308, ~0.8988465674311579E308) = ~0.17976931348623157E309 +- (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +/ (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.1E1 +nextAfter (~0.8988465674311579E308, ~0.8988465674311579E308) = ~0.8988465674311579E308 +rem (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +* (~0.8988465674311579E308, ~0.123E4) = inf ++ (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E4) = 0.7307695670172015E305 +nextAfter (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E4) = 0.0 +* (~0.8988465674311579E308, ~0.123E2) = inf ++ (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E2) = 0.7307695670172014E307 +nextAfter (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E2) = 0.0 +* (~0.8988465674311579E308, ~0.3141592653589793E1) = inf ++ (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.3141592653589793E1) = 0.2861117485757028E308 +nextAfter (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.3141592653589793E1) = 0.0 +* (~0.8988465674311579E308, ~0.2718281828459045E1) = inf ++ (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.2718281828459045E1) = 0.3306671729254435E308 +nextAfter (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, ~0.123E1) = 0.1105581277940324E309 ++ (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E1) = 0.7307695670172015E308 +nextAfter (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, ~0.123) = 0.11055812779403241E308 ++ (~0.8988465674311579E308, ~0.123) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123) = inf +nextAfter (~0.8988465674311579E308, ~0.123) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123) = inf +* (~0.8988465674311579E308, ~0.123E~2) = 0.1105581277940324E306 ++ (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E~2) = inf +nextAfter (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E~2) = inf +* (~0.8988465674311579E308, ~0.22250738585072014E~307) = 0.19999999999999998E1 ++ (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.22250738585072014E~307) = inf +nextAfter (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.22250738585072014E~307) = inf +* (~0.8988465674311579E308, ~0.11125369292536007E~307) = 0.9999999999999999 ++ (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.11125369292536007E~307) = inf +nextAfter (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.11125369292536007E~307) = inf +* (~0.8988465674311579E308, ~0.5E~323) = 0.44408920985006257E~15 ++ (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.5E~323) = inf +nextAfter (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.5E~323) = inf +* (~0.8988465674311579E308, ~0.0) = 0.0 ++ (~0.8988465674311579E308, ~0.0) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.0) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.0) = inf +nextAfter (~0.8988465674311579E308, ~0.0) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.0) = nan +* (~0.8988465674311579E308, inf) = ~inf ++ (~0.8988465674311579E308, inf) = inf +- (~0.8988465674311579E308, inf) = ~inf +/ (~0.8988465674311579E308, inf) = ~0.0 +nextAfter (~0.8988465674311579E308, inf) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, inf) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, ~inf) = inf ++ (~0.8988465674311579E308, ~inf) = ~inf +- (~0.8988465674311579E308, ~inf) = inf +/ (~0.8988465674311579E308, ~inf) = 0.0 +nextAfter (~0.8988465674311579E308, ~inf) = ~0.898846567431158E308 +rem (~0.8988465674311579E308, ~inf) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, nan) = nan ++ (~0.8988465674311579E308, nan) = nan +- (~0.8988465674311579E308, nan) = nan +/ (~0.8988465674311579E308, nan) = nan +nextAfter (~0.8988465674311579E308, nan) = nan +rem (~0.8988465674311579E308, nan) = nan +* (~0.8988465674311579E308, inf) = ~inf ++ (~0.8988465674311579E308, inf) = inf +- (~0.8988465674311579E308, inf) = ~inf +/ (~0.8988465674311579E308, inf) = ~0.0 +nextAfter (~0.8988465674311579E308, inf) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, inf) = ~0.8988465674311579E308 +* (~0.123E4, 0.17976931348623157E309) = ~inf ++ (~0.123E4, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E4, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E4, 0.17976931348623157E309) = ~0.6842102114909646E~305 +nextAfter (~0.123E4, 0.17976931348623157E309) = ~0.12299999999999998E4 +rem (~0.123E4, 0.17976931348623157E309) = ~0.123E4 +* (~0.123E4, 0.8988465674311579E308) = ~inf ++ (~0.123E4, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E4, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E4, 0.8988465674311579E308) = ~0.1368420422981929E~304 +nextAfter (~0.123E4, 0.8988465674311579E308) = ~0.12299999999999998E4 +rem (~0.123E4, 0.8988465674311579E308) = ~0.123E4 +* (~0.123E4, 0.123E4) = ~0.15129E7 ++ (~0.123E4, 0.123E4) = 0.0 +- (~0.123E4, 0.123E4) = ~0.246E4 +/ (~0.123E4, 0.123E4) = ~0.1E1 +nextAfter (~0.123E4, 0.123E4) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E4) = 0.0 +* (~0.123E4, 0.123E2) = ~0.15129E5 ++ (~0.123E4, 0.123E2) = ~0.12177E4 +- (~0.123E4, 0.123E2) = ~0.12423E4 +/ (~0.123E4, 0.123E2) = ~0.1E3 +nextAfter (~0.123E4, 0.123E2) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E2) = 0.0 +* (~0.123E4, 0.3141592653589793E1) = ~0.38641589639154454E4 ++ (~0.123E4, 0.3141592653589793E1) = ~0.122685840734641E4 +- (~0.123E4, 0.3141592653589793E1) = ~0.123314159265359E4 +/ (~0.123E4, 0.3141592653589793E1) = ~0.39152116000606253E3 +nextAfter (~0.123E4, 0.3141592653589793E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.3141592653589793E1) = ~0.16372724463908526E1 +* (~0.123E4, 0.2718281828459045E1) = ~0.33434866490046256E4 ++ (~0.123E4, 0.2718281828459045E1) = ~0.1227281718171541E4 +- (~0.123E4, 0.2718281828459045E1) = ~0.1232718281828459E4 +/ (~0.123E4, 0.2718281828459045E1) = ~0.4524917126408741E3 +nextAfter (~0.123E4, 0.2718281828459045E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.2718281828459045E1) = ~0.13366135365115497E1 +* (~0.123E4, 0.123E1) = ~0.15129E4 ++ (~0.123E4, 0.123E1) = ~0.122877E4 +- (~0.123E4, 0.123E1) = ~0.123123E4 +/ (~0.123E4, 0.123E1) = ~0.1E4 +nextAfter (~0.123E4, 0.123E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E1) = 0.0 +* (~0.123E4, 0.123) = ~0.15129E3 ++ (~0.123E4, 0.123) = ~0.1229877E4 +- (~0.123E4, 0.123) = ~0.1230123E4 +/ (~0.123E4, 0.123) = ~0.1E5 +nextAfter (~0.123E4, 0.123) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123) = 0.0 +* (~0.123E4, 0.123E~2) = ~0.15129E1 ++ (~0.123E4, 0.123E~2) = ~0.122999877E4 +- (~0.123E4, 0.123E~2) = ~0.123000123E4 +/ (~0.123E4, 0.123E~2) = ~0.1E7 +nextAfter (~0.123E4, 0.123E~2) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E~2) = 0.0 +* (~0.123E4, 0.22250738585072014E~307) = ~0.27368408459638577E~304 ++ (~0.123E4, 0.22250738585072014E~307) = ~0.123E4 +- (~0.123E4, 0.22250738585072014E~307) = ~0.123E4 +/ (~0.123E4, 0.22250738585072014E~307) = ~inf +nextAfter (~0.123E4, 0.22250738585072014E~307) = ~0.12299999999999998E4 +rem (~0.123E4, 0.22250738585072014E~307) = inf +* (~0.123E4, 0.11125369292536007E~307) = ~0.13684204229819289E~304 ++ (~0.123E4, 0.11125369292536007E~307) = ~0.123E4 +- (~0.123E4, 0.11125369292536007E~307) = ~0.123E4 +/ (~0.123E4, 0.11125369292536007E~307) = ~inf +nextAfter (~0.123E4, 0.11125369292536007E~307) = ~0.12299999999999998E4 +rem (~0.123E4, 0.11125369292536007E~307) = inf +* (~0.123E4, 0.5E~323) = ~0.6077E~320 ++ (~0.123E4, 0.5E~323) = ~0.123E4 +- (~0.123E4, 0.5E~323) = ~0.123E4 +/ (~0.123E4, 0.5E~323) = ~inf +nextAfter (~0.123E4, 0.5E~323) = ~0.12299999999999998E4 +rem (~0.123E4, 0.5E~323) = inf +* (~0.123E4, 0.0) = ~0.0 ++ (~0.123E4, 0.0) = ~0.123E4 +- (~0.123E4, 0.0) = ~0.123E4 +/ (~0.123E4, 0.0) = ~inf +nextAfter (~0.123E4, 0.0) = ~0.12299999999999998E4 +rem (~0.123E4, 0.0) = nan +* (~0.123E4, ~0.17976931348623157E309) = inf ++ (~0.123E4, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E4, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E4, ~0.17976931348623157E309) = 0.6842102114909646E~305 +nextAfter (~0.123E4, ~0.17976931348623157E309) = ~0.12300000000000002E4 +rem (~0.123E4, ~0.17976931348623157E309) = ~0.123E4 +* (~0.123E4, ~0.8988465674311579E308) = inf ++ (~0.123E4, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E4, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E4, ~0.8988465674311579E308) = 0.1368420422981929E~304 +nextAfter (~0.123E4, ~0.8988465674311579E308) = ~0.12300000000000002E4 +rem (~0.123E4, ~0.8988465674311579E308) = ~0.123E4 +* (~0.123E4, ~0.123E4) = 0.15129E7 ++ (~0.123E4, ~0.123E4) = ~0.246E4 +- (~0.123E4, ~0.123E4) = 0.0 +/ (~0.123E4, ~0.123E4) = 0.1E1 +nextAfter (~0.123E4, ~0.123E4) = ~0.123E4 +rem (~0.123E4, ~0.123E4) = 0.0 +* (~0.123E4, ~0.123E2) = 0.15129E5 ++ (~0.123E4, ~0.123E2) = ~0.12423E4 +- (~0.123E4, ~0.123E2) = ~0.12177E4 +/ (~0.123E4, ~0.123E2) = 0.1E3 +nextAfter (~0.123E4, ~0.123E2) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E2) = 0.0 +* (~0.123E4, ~0.3141592653589793E1) = 0.38641589639154454E4 ++ (~0.123E4, ~0.3141592653589793E1) = ~0.123314159265359E4 +- (~0.123E4, ~0.3141592653589793E1) = ~0.122685840734641E4 +/ (~0.123E4, ~0.3141592653589793E1) = 0.39152116000606253E3 +nextAfter (~0.123E4, ~0.3141592653589793E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.3141592653589793E1) = ~0.16372724463908526E1 +* (~0.123E4, ~0.2718281828459045E1) = 0.33434866490046256E4 ++ (~0.123E4, ~0.2718281828459045E1) = ~0.1232718281828459E4 +- (~0.123E4, ~0.2718281828459045E1) = ~0.1227281718171541E4 +/ (~0.123E4, ~0.2718281828459045E1) = 0.4524917126408741E3 +nextAfter (~0.123E4, ~0.2718281828459045E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.2718281828459045E1) = ~0.13366135365115497E1 +* (~0.123E4, ~0.123E1) = 0.15129E4 ++ (~0.123E4, ~0.123E1) = ~0.123123E4 +- (~0.123E4, ~0.123E1) = ~0.122877E4 +/ (~0.123E4, ~0.123E1) = 0.1E4 +nextAfter (~0.123E4, ~0.123E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E1) = 0.0 +* (~0.123E4, ~0.123) = 0.15129E3 ++ (~0.123E4, ~0.123) = ~0.1230123E4 +- (~0.123E4, ~0.123) = ~0.1229877E4 +/ (~0.123E4, ~0.123) = 0.1E5 +nextAfter (~0.123E4, ~0.123) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123) = 0.0 +* (~0.123E4, ~0.123E~2) = 0.15129E1 ++ (~0.123E4, ~0.123E~2) = ~0.123000123E4 +- (~0.123E4, ~0.123E~2) = ~0.122999877E4 +/ (~0.123E4, ~0.123E~2) = 0.1E7 +nextAfter (~0.123E4, ~0.123E~2) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E~2) = 0.0 +* (~0.123E4, ~0.22250738585072014E~307) = 0.27368408459638577E~304 ++ (~0.123E4, ~0.22250738585072014E~307) = ~0.123E4 +- (~0.123E4, ~0.22250738585072014E~307) = ~0.123E4 +/ (~0.123E4, ~0.22250738585072014E~307) = inf +nextAfter (~0.123E4, ~0.22250738585072014E~307) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.22250738585072014E~307) = inf +* (~0.123E4, ~0.11125369292536007E~307) = 0.13684204229819289E~304 ++ (~0.123E4, ~0.11125369292536007E~307) = ~0.123E4 +- (~0.123E4, ~0.11125369292536007E~307) = ~0.123E4 +/ (~0.123E4, ~0.11125369292536007E~307) = inf +nextAfter (~0.123E4, ~0.11125369292536007E~307) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.11125369292536007E~307) = inf +* (~0.123E4, ~0.5E~323) = 0.6077E~320 ++ (~0.123E4, ~0.5E~323) = ~0.123E4 +- (~0.123E4, ~0.5E~323) = ~0.123E4 +/ (~0.123E4, ~0.5E~323) = inf +nextAfter (~0.123E4, ~0.5E~323) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.5E~323) = inf +* (~0.123E4, ~0.0) = 0.0 ++ (~0.123E4, ~0.0) = ~0.123E4 +- (~0.123E4, ~0.0) = ~0.123E4 +/ (~0.123E4, ~0.0) = inf +nextAfter (~0.123E4, ~0.0) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.0) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999999999998E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E4, ~inf) = inf ++ (~0.123E4, ~inf) = ~inf +- (~0.123E4, ~inf) = inf +/ (~0.123E4, ~inf) = 0.0 +nextAfter (~0.123E4, ~inf) = ~0.12300000000000002E4 +rem (~0.123E4, ~inf) = ~0.123E4 +* (~0.123E4, nan) = nan ++ (~0.123E4, nan) = nan +- (~0.123E4, nan) = nan +/ (~0.123E4, nan) = nan +nextAfter (~0.123E4, nan) = nan +rem (~0.123E4, nan) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999999999998E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E2, 0.17976931348623157E309) = ~inf ++ (~0.123E2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E2, 0.17976931348623157E309) = ~0.6842102114909646E~307 +nextAfter (~0.123E2, 0.17976931348623157E309) = ~0.12299999999999999E2 +rem (~0.123E2, 0.17976931348623157E309) = ~0.123E2 +* (~0.123E2, 0.8988465674311579E308) = ~inf ++ (~0.123E2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E2, 0.8988465674311579E308) = ~0.13684204229819291E~306 +nextAfter (~0.123E2, 0.8988465674311579E308) = ~0.12299999999999999E2 +rem (~0.123E2, 0.8988465674311579E308) = ~0.123E2 +* (~0.123E2, 0.123E4) = ~0.15129E5 ++ (~0.123E2, 0.123E4) = 0.12177E4 +- (~0.123E2, 0.123E4) = ~0.12423E4 +/ (~0.123E2, 0.123E4) = ~0.1E~1 +nextAfter (~0.123E2, 0.123E4) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E4) = ~0.123E2 +* (~0.123E2, 0.123E2) = ~0.15129000000000002E3 ++ (~0.123E2, 0.123E2) = 0.0 +- (~0.123E2, 0.123E2) = ~0.246E2 +/ (~0.123E2, 0.123E2) = ~0.1E1 +nextAfter (~0.123E2, 0.123E2) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E2) = 0.0 +* (~0.123E2, 0.3141592653589793E1) = ~0.3864158963915446E2 ++ (~0.123E2, 0.3141592653589793E1) = ~0.9158407346410208E1 +- (~0.123E2, 0.3141592653589793E1) = ~0.15441592653589794E2 +/ (~0.123E2, 0.3141592653589793E1) = ~0.3915211600060626E1 +nextAfter (~0.123E2, 0.3141592653589793E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.3141592653589793E1) = ~0.28752220392306214E1 +* (~0.123E2, 0.2718281828459045E1) = ~0.33434866490046254E2 ++ (~0.123E2, 0.2718281828459045E1) = ~0.9581718171540956E1 +- (~0.123E2, 0.2718281828459045E1) = ~0.15018281828459045E2 +/ (~0.123E2, 0.2718281828459045E1) = ~0.4524917126408741E1 +nextAfter (~0.123E2, 0.2718281828459045E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.2718281828459045E1) = ~0.14268726861638203E1 +* (~0.123E2, 0.123E1) = ~0.15129000000000001E2 ++ (~0.123E2, 0.123E1) = ~0.1107E2 +- (~0.123E2, 0.123E1) = ~0.13530000000000001E2 +/ (~0.123E2, 0.123E1) = ~0.1E2 +nextAfter (~0.123E2, 0.123E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E1) = 0.0 +* (~0.123E2, 0.123) = ~0.15129000000000001E1 ++ (~0.123E2, 0.123) = ~0.12177000000000001E2 +- (~0.123E2, 0.123) = ~0.12423E2 +/ (~0.123E2, 0.123) = ~0.10000000000000001E3 +nextAfter (~0.123E2, 0.123) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123) = 0.0 +* (~0.123E2, 0.123E~2) = ~0.15129E~1 ++ (~0.123E2, 0.123E~2) = ~0.12298770000000001E2 +- (~0.123E2, 0.123E~2) = ~0.1230123E2 +/ (~0.123E2, 0.123E~2) = ~0.1E5 +nextAfter (~0.123E2, 0.123E~2) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E~2) = ~0.17763568394002505E~14 +* (~0.123E2, 0.22250738585072014E~307) = ~0.2736840845963858E~306 ++ (~0.123E2, 0.22250738585072014E~307) = ~0.123E2 +- (~0.123E2, 0.22250738585072014E~307) = ~0.123E2 +/ (~0.123E2, 0.22250738585072014E~307) = ~inf +nextAfter (~0.123E2, 0.22250738585072014E~307) = ~0.12299999999999999E2 +rem (~0.123E2, 0.22250738585072014E~307) = inf +* (~0.123E2, 0.11125369292536007E~307) = ~0.1368420422981929E~306 ++ (~0.123E2, 0.11125369292536007E~307) = ~0.123E2 +- (~0.123E2, 0.11125369292536007E~307) = ~0.123E2 +/ (~0.123E2, 0.11125369292536007E~307) = ~inf +nextAfter (~0.123E2, 0.11125369292536007E~307) = ~0.12299999999999999E2 +rem (~0.123E2, 0.11125369292536007E~307) = inf +* (~0.123E2, 0.5E~323) = ~0.6E~322 ++ (~0.123E2, 0.5E~323) = ~0.123E2 +- (~0.123E2, 0.5E~323) = ~0.123E2 +/ (~0.123E2, 0.5E~323) = ~inf +nextAfter (~0.123E2, 0.5E~323) = ~0.12299999999999999E2 +rem (~0.123E2, 0.5E~323) = inf +* (~0.123E2, 0.0) = ~0.0 ++ (~0.123E2, 0.0) = ~0.123E2 +- (~0.123E2, 0.0) = ~0.123E2 +/ (~0.123E2, 0.0) = ~inf +nextAfter (~0.123E2, 0.0) = ~0.12299999999999999E2 +rem (~0.123E2, 0.0) = nan +* (~0.123E2, ~0.17976931348623157E309) = inf ++ (~0.123E2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E2, ~0.17976931348623157E309) = 0.6842102114909646E~307 +nextAfter (~0.123E2, ~0.17976931348623157E309) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.17976931348623157E309) = ~0.123E2 +* (~0.123E2, ~0.8988465674311579E308) = inf ++ (~0.123E2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E2, ~0.8988465674311579E308) = 0.13684204229819291E~306 +nextAfter (~0.123E2, ~0.8988465674311579E308) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.8988465674311579E308) = ~0.123E2 +* (~0.123E2, ~0.123E4) = 0.15129E5 ++ (~0.123E2, ~0.123E4) = ~0.12423E4 +- (~0.123E2, ~0.123E4) = 0.12177E4 +/ (~0.123E2, ~0.123E4) = 0.1E~1 +nextAfter (~0.123E2, ~0.123E4) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.123E4) = ~0.123E2 +* (~0.123E2, ~0.123E2) = 0.15129000000000002E3 ++ (~0.123E2, ~0.123E2) = ~0.246E2 +- (~0.123E2, ~0.123E2) = 0.0 +/ (~0.123E2, ~0.123E2) = 0.1E1 +nextAfter (~0.123E2, ~0.123E2) = ~0.123E2 +rem (~0.123E2, ~0.123E2) = 0.0 +* (~0.123E2, ~0.3141592653589793E1) = 0.3864158963915446E2 ++ (~0.123E2, ~0.3141592653589793E1) = ~0.15441592653589794E2 +- (~0.123E2, ~0.3141592653589793E1) = ~0.9158407346410208E1 +/ (~0.123E2, ~0.3141592653589793E1) = 0.3915211600060626E1 +nextAfter (~0.123E2, ~0.3141592653589793E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.3141592653589793E1) = ~0.28752220392306214E1 +* (~0.123E2, ~0.2718281828459045E1) = 0.33434866490046254E2 ++ (~0.123E2, ~0.2718281828459045E1) = ~0.15018281828459045E2 +- (~0.123E2, ~0.2718281828459045E1) = ~0.9581718171540956E1 +/ (~0.123E2, ~0.2718281828459045E1) = 0.4524917126408741E1 +nextAfter (~0.123E2, ~0.2718281828459045E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.2718281828459045E1) = ~0.14268726861638203E1 +* (~0.123E2, ~0.123E1) = 0.15129000000000001E2 ++ (~0.123E2, ~0.123E1) = ~0.13530000000000001E2 +- (~0.123E2, ~0.123E1) = ~0.1107E2 +/ (~0.123E2, ~0.123E1) = 0.1E2 +nextAfter (~0.123E2, ~0.123E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123E1) = 0.0 +* (~0.123E2, ~0.123) = 0.15129000000000001E1 ++ (~0.123E2, ~0.123) = ~0.12423E2 +- (~0.123E2, ~0.123) = ~0.12177000000000001E2 +/ (~0.123E2, ~0.123) = 0.10000000000000001E3 +nextAfter (~0.123E2, ~0.123) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123) = 0.0 +* (~0.123E2, ~0.123E~2) = 0.15129E~1 ++ (~0.123E2, ~0.123E~2) = ~0.1230123E2 +- (~0.123E2, ~0.123E~2) = ~0.12298770000000001E2 +/ (~0.123E2, ~0.123E~2) = 0.1E5 +nextAfter (~0.123E2, ~0.123E~2) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123E~2) = ~0.17763568394002505E~14 +* (~0.123E2, ~0.22250738585072014E~307) = 0.2736840845963858E~306 ++ (~0.123E2, ~0.22250738585072014E~307) = ~0.123E2 +- (~0.123E2, ~0.22250738585072014E~307) = ~0.123E2 +/ (~0.123E2, ~0.22250738585072014E~307) = inf +nextAfter (~0.123E2, ~0.22250738585072014E~307) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.22250738585072014E~307) = inf +* (~0.123E2, ~0.11125369292536007E~307) = 0.1368420422981929E~306 ++ (~0.123E2, ~0.11125369292536007E~307) = ~0.123E2 +- (~0.123E2, ~0.11125369292536007E~307) = ~0.123E2 +/ (~0.123E2, ~0.11125369292536007E~307) = inf +nextAfter (~0.123E2, ~0.11125369292536007E~307) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.11125369292536007E~307) = inf +* (~0.123E2, ~0.5E~323) = 0.6E~322 ++ (~0.123E2, ~0.5E~323) = ~0.123E2 +- (~0.123E2, ~0.5E~323) = ~0.123E2 +/ (~0.123E2, ~0.5E~323) = inf +nextAfter (~0.123E2, ~0.5E~323) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.5E~323) = inf +* (~0.123E2, ~0.0) = 0.0 ++ (~0.123E2, ~0.0) = ~0.123E2 +- (~0.123E2, ~0.0) = ~0.123E2 +/ (~0.123E2, ~0.0) = inf +nextAfter (~0.123E2, ~0.0) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.0) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999999999999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.123E2, ~inf) = inf ++ (~0.123E2, ~inf) = ~inf +- (~0.123E2, ~inf) = inf +/ (~0.123E2, ~inf) = 0.0 +nextAfter (~0.123E2, ~inf) = ~0.12300000000000002E2 +rem (~0.123E2, ~inf) = ~0.123E2 +* (~0.123E2, nan) = nan ++ (~0.123E2, nan) = nan +- (~0.123E2, nan) = nan +/ (~0.123E2, nan) = nan +nextAfter (~0.123E2, nan) = nan +rem (~0.123E2, nan) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999999999999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.3141592653589793E1, 0.17976931348623157E309) = ~inf ++ (~0.3141592653589793E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.17475689218952297E~307 +nextAfter (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.8988465674311579E308) = ~inf ++ (~0.3141592653589793E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.349513784379046E~307 +nextAfter (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.123E4) = ~0.38641589639154454E4 ++ (~0.3141592653589793E1, 0.123E4) = 0.122685840734641E4 +- (~0.3141592653589793E1, 0.123E4) = ~0.123314159265359E4 +/ (~0.3141592653589793E1, 0.123E4) = ~0.25541403687721893E~2 +nextAfter (~0.3141592653589793E1, 0.123E4) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E4) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.123E2) = ~0.3864158963915446E2 ++ (~0.3141592653589793E1, 0.123E2) = 0.9158407346410208E1 +- (~0.3141592653589793E1, 0.123E2) = ~0.15441592653589794E2 +/ (~0.3141592653589793E1, 0.123E2) = ~0.2554140368772189 +nextAfter (~0.3141592653589793E1, 0.123E2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E2) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.9869604401089358E1 ++ (~0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +- (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.6283185307179586E1 +/ (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.1E1 +nextAfter (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +* (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.8539734222673566E1 ++ (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.423310825130748 +- (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.5859874482048838E1 +/ (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.11557273497909217E1 +nextAfter (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.423310825130748 +* (~0.3141592653589793E1, 0.123E1) = ~0.38641589639154454E1 ++ (~0.3141592653589793E1, 0.123E1) = ~0.19115926535897931E1 +- (~0.3141592653589793E1, 0.123E1) = ~0.43715926535897935E1 +/ (~0.3141592653589793E1, 0.123E1) = ~0.25541403687721895E1 +nextAfter (~0.3141592653589793E1, 0.123E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E1) = ~0.6815926535897932 +* (~0.3141592653589793E1, 0.123) = ~0.38641589639154456 ++ (~0.3141592653589793E1, 0.123) = ~0.3018592653589793E1 +- (~0.3141592653589793E1, 0.123) = ~0.32645926535897933E1 +/ (~0.3141592653589793E1, 0.123) = ~0.25541403687721896E2 +nextAfter (~0.3141592653589793E1, 0.123) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123) = ~0.6659265358979294E~1 +* (~0.3141592653589793E1, 0.123E~2) = ~0.38641589639154456E~2 ++ (~0.3141592653589793E1, 0.123E~2) = ~0.3140362653589793E1 +- (~0.3141592653589793E1, 0.123E~2) = ~0.3142822653589793E1 +/ (~0.3141592653589793E1, 0.123E~2) = ~0.25541403687721895E4 +nextAfter (~0.3141592653589793E1, 0.123E~2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E~2) = ~0.17265358979301482E~3 +* (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.6990275687580919E~307 ++ (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.14119048864730642E309 +nextAfter (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.22250738585072014E~307) = 0.0 +* (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.34951378437904593E~307 ++ (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.11125369292536007E~307) = ~inf +nextAfter (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.11125369292536007E~307) = inf +* (~0.3141592653589793E1, 0.5E~323) = ~0.15E~322 ++ (~0.3141592653589793E1, 0.5E~323) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.5E~323) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.5E~323) = ~inf +nextAfter (~0.3141592653589793E1, 0.5E~323) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.5E~323) = inf +* (~0.3141592653589793E1, 0.0) = ~0.0 ++ (~0.3141592653589793E1, 0.0) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.0) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.0) = ~inf +nextAfter (~0.3141592653589793E1, 0.0) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.0) = nan +* (~0.3141592653589793E1, ~0.17976931348623157E309) = inf ++ (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.3141592653589793E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.3141592653589793E1, ~0.17976931348623157E309) = 0.17475689218952297E~307 +nextAfter (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.8988465674311579E308) = inf ++ (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.3141592653589793E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.3141592653589793E1, ~0.8988465674311579E308) = 0.349513784379046E~307 +nextAfter (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.123E4) = 0.38641589639154454E4 ++ (~0.3141592653589793E1, ~0.123E4) = ~0.123314159265359E4 +- (~0.3141592653589793E1, ~0.123E4) = 0.122685840734641E4 +/ (~0.3141592653589793E1, ~0.123E4) = 0.25541403687721893E~2 +nextAfter (~0.3141592653589793E1, ~0.123E4) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.123E4) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.123E2) = 0.3864158963915446E2 ++ (~0.3141592653589793E1, ~0.123E2) = ~0.15441592653589794E2 +- (~0.3141592653589793E1, ~0.123E2) = 0.9158407346410208E1 +/ (~0.3141592653589793E1, ~0.123E2) = 0.2554140368772189 +nextAfter (~0.3141592653589793E1, ~0.123E2) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.123E2) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.9869604401089358E1 ++ (~0.3141592653589793E1, ~0.3141592653589793E1) = ~0.6283185307179586E1 +- (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +/ (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.1E1 +nextAfter (~0.3141592653589793E1, ~0.3141592653589793E1) = ~0.3141592653589793E1 +rem (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +* (~0.3141592653589793E1, ~0.2718281828459045E1) = 0.8539734222673566E1 ++ (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.5859874482048838E1 +- (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.423310825130748 +/ (~0.3141592653589793E1, ~0.2718281828459045E1) = 0.11557273497909217E1 +nextAfter (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.423310825130748 +* (~0.3141592653589793E1, ~0.123E1) = 0.38641589639154454E1 ++ (~0.3141592653589793E1, ~0.123E1) = ~0.43715926535897935E1 +- (~0.3141592653589793E1, ~0.123E1) = ~0.19115926535897931E1 +/ (~0.3141592653589793E1, ~0.123E1) = 0.25541403687721895E1 +nextAfter (~0.3141592653589793E1, ~0.123E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123E1) = ~0.6815926535897932 +* (~0.3141592653589793E1, ~0.123) = 0.38641589639154456 ++ (~0.3141592653589793E1, ~0.123) = ~0.32645926535897933E1 +- (~0.3141592653589793E1, ~0.123) = ~0.3018592653589793E1 +/ (~0.3141592653589793E1, ~0.123) = 0.25541403687721896E2 +nextAfter (~0.3141592653589793E1, ~0.123) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123) = ~0.6659265358979294E~1 +* (~0.3141592653589793E1, ~0.123E~2) = 0.38641589639154456E~2 ++ (~0.3141592653589793E1, ~0.123E~2) = ~0.3142822653589793E1 +- (~0.3141592653589793E1, ~0.123E~2) = ~0.3140362653589793E1 +/ (~0.3141592653589793E1, ~0.123E~2) = 0.25541403687721895E4 +nextAfter (~0.3141592653589793E1, ~0.123E~2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123E~2) = ~0.17265358979301482E~3 +* (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.6990275687580919E~307 ++ (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.14119048864730642E309 +nextAfter (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.0 +* (~0.3141592653589793E1, ~0.11125369292536007E~307) = 0.34951378437904593E~307 ++ (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.11125369292536007E~307) = inf +nextAfter (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.11125369292536007E~307) = inf +* (~0.3141592653589793E1, ~0.5E~323) = 0.15E~322 ++ (~0.3141592653589793E1, ~0.5E~323) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.5E~323) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.5E~323) = inf +nextAfter (~0.3141592653589793E1, ~0.5E~323) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.5E~323) = inf +* (~0.3141592653589793E1, ~0.0) = 0.0 ++ (~0.3141592653589793E1, ~0.0) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.0) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.0) = inf +nextAfter (~0.3141592653589793E1, ~0.0) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.0) = nan +* (~0.3141592653589793E1, inf) = ~inf ++ (~0.3141592653589793E1, inf) = inf +- (~0.3141592653589793E1, inf) = ~inf +/ (~0.3141592653589793E1, inf) = ~0.0 +nextAfter (~0.3141592653589793E1, inf) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, inf) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~inf) = inf ++ (~0.3141592653589793E1, ~inf) = ~inf +- (~0.3141592653589793E1, ~inf) = inf +/ (~0.3141592653589793E1, ~inf) = 0.0 +nextAfter (~0.3141592653589793E1, ~inf) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~inf) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, nan) = nan ++ (~0.3141592653589793E1, nan) = nan +- (~0.3141592653589793E1, nan) = nan +/ (~0.3141592653589793E1, nan) = nan +nextAfter (~0.3141592653589793E1, nan) = nan +rem (~0.3141592653589793E1, nan) = nan +* (~0.3141592653589793E1, inf) = ~inf ++ (~0.3141592653589793E1, inf) = inf +- (~0.3141592653589793E1, inf) = ~inf +/ (~0.3141592653589793E1, inf) = ~0.0 +nextAfter (~0.3141592653589793E1, inf) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, inf) = ~0.3141592653589793E1 +* (~0.2718281828459045E1, 0.17976931348623157E309) = ~inf ++ (~0.2718281828459045E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.15120944591398447E~307 +nextAfter (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.8988465674311579E308) = ~inf ++ (~0.2718281828459045E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.30241889182796895E~307 +nextAfter (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.123E4) = ~0.33434866490046256E4 ++ (~0.2718281828459045E1, 0.123E4) = 0.1227281718171541E4 +- (~0.2718281828459045E1, 0.123E4) = ~0.1232718281828459E4 +/ (~0.2718281828459045E1, 0.123E4) = ~0.22099852263894678E~2 +nextAfter (~0.2718281828459045E1, 0.123E4) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E4) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.123E2) = ~0.33434866490046254E2 ++ (~0.2718281828459045E1, 0.123E2) = 0.9581718171540956E1 +- (~0.2718281828459045E1, 0.123E2) = ~0.15018281828459045E2 +/ (~0.2718281828459045E1, 0.123E2) = ~0.22099852263894673 +nextAfter (~0.2718281828459045E1, 0.123E2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E2) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.8539734222673566E1 ++ (~0.2718281828459045E1, 0.3141592653589793E1) = 0.423310825130748 +- (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.5859874482048838E1 +/ (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.8652559794322651 +nextAfter (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.73890560989306495E1 ++ (~0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +- (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.543656365691809E1 +/ (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.1E1 +nextAfter (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +* (~0.2718281828459045E1, 0.123E1) = ~0.33434866490046256E1 ++ (~0.2718281828459045E1, 0.123E1) = ~0.1488281828459045E1 +- (~0.2718281828459045E1, 0.123E1) = ~0.3948281828459045E1 +/ (~0.2718281828459045E1, 0.123E1) = ~0.22099852263894677E1 +nextAfter (~0.2718281828459045E1, 0.123E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E1) = ~0.2582818284590451 +* (~0.2718281828459045E1, 0.123) = ~0.33434866490046256 ++ (~0.2718281828459045E1, 0.123) = ~0.25952818284590453E1 +- (~0.2718281828459045E1, 0.123) = ~0.2841281828459045E1 +/ (~0.2718281828459045E1, 0.123) = ~0.22099852263894675E2 +nextAfter (~0.2718281828459045E1, 0.123) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123) = ~0.1228182845904513E~1 +* (~0.2718281828459045E1, 0.123E~2) = ~0.33434866490046253E~2 ++ (~0.2718281828459045E1, 0.123E~2) = ~0.2717051828459045E1 +- (~0.2718281828459045E1, 0.123E~2) = ~0.2719511828459045E1 +/ (~0.2718281828459045E1, 0.123E~2) = ~0.22099852263894677E4 +nextAfter (~0.2718281828459045E1, 0.123E~2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E~2) = ~0.12118284590449946E~2 +* (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.6048377836559378E~307 ++ (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.12216591454104522E309 +nextAfter (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.22250738585072014E~307) = 0.0 +* (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.3024188918279689E~307 ++ (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.11125369292536007E~307) = ~inf +nextAfter (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.11125369292536007E~307) = inf +* (~0.2718281828459045E1, 0.5E~323) = ~0.15E~322 ++ (~0.2718281828459045E1, 0.5E~323) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.5E~323) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.5E~323) = ~inf +nextAfter (~0.2718281828459045E1, 0.5E~323) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.5E~323) = inf +* (~0.2718281828459045E1, 0.0) = ~0.0 ++ (~0.2718281828459045E1, 0.0) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.0) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.0) = ~inf +nextAfter (~0.2718281828459045E1, 0.0) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.0) = nan +* (~0.2718281828459045E1, ~0.17976931348623157E309) = inf ++ (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.2718281828459045E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.2718281828459045E1, ~0.17976931348623157E309) = 0.15120944591398447E~307 +nextAfter (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.8988465674311579E308) = inf ++ (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.2718281828459045E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.2718281828459045E1, ~0.8988465674311579E308) = 0.30241889182796895E~307 +nextAfter (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.123E4) = 0.33434866490046256E4 ++ (~0.2718281828459045E1, ~0.123E4) = ~0.1232718281828459E4 +- (~0.2718281828459045E1, ~0.123E4) = 0.1227281718171541E4 +/ (~0.2718281828459045E1, ~0.123E4) = 0.22099852263894678E~2 +nextAfter (~0.2718281828459045E1, ~0.123E4) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.123E4) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.123E2) = 0.33434866490046254E2 ++ (~0.2718281828459045E1, ~0.123E2) = ~0.15018281828459045E2 +- (~0.2718281828459045E1, ~0.123E2) = 0.9581718171540956E1 +/ (~0.2718281828459045E1, ~0.123E2) = 0.22099852263894673 +nextAfter (~0.2718281828459045E1, ~0.123E2) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.123E2) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.8539734222673566E1 ++ (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.5859874482048838E1 +- (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.423310825130748 +/ (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.8652559794322651 +nextAfter (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.73890560989306495E1 ++ (~0.2718281828459045E1, ~0.2718281828459045E1) = ~0.543656365691809E1 +- (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +/ (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.1E1 +nextAfter (~0.2718281828459045E1, ~0.2718281828459045E1) = ~0.2718281828459045E1 +rem (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +* (~0.2718281828459045E1, ~0.123E1) = 0.33434866490046256E1 ++ (~0.2718281828459045E1, ~0.123E1) = ~0.3948281828459045E1 +- (~0.2718281828459045E1, ~0.123E1) = ~0.1488281828459045E1 +/ (~0.2718281828459045E1, ~0.123E1) = 0.22099852263894677E1 +nextAfter (~0.2718281828459045E1, ~0.123E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123E1) = ~0.2582818284590451 +* (~0.2718281828459045E1, ~0.123) = 0.33434866490046256 ++ (~0.2718281828459045E1, ~0.123) = ~0.2841281828459045E1 +- (~0.2718281828459045E1, ~0.123) = ~0.25952818284590453E1 +/ (~0.2718281828459045E1, ~0.123) = 0.22099852263894675E2 +nextAfter (~0.2718281828459045E1, ~0.123) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123) = ~0.1228182845904513E~1 +* (~0.2718281828459045E1, ~0.123E~2) = 0.33434866490046253E~2 ++ (~0.2718281828459045E1, ~0.123E~2) = ~0.2719511828459045E1 +- (~0.2718281828459045E1, ~0.123E~2) = ~0.2717051828459045E1 +/ (~0.2718281828459045E1, ~0.123E~2) = 0.22099852263894677E4 +nextAfter (~0.2718281828459045E1, ~0.123E~2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123E~2) = ~0.12118284590449946E~2 +* (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.6048377836559378E~307 ++ (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.12216591454104522E309 +nextAfter (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.0 +* (~0.2718281828459045E1, ~0.11125369292536007E~307) = 0.3024188918279689E~307 ++ (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.11125369292536007E~307) = inf +nextAfter (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.11125369292536007E~307) = inf +* (~0.2718281828459045E1, ~0.5E~323) = 0.15E~322 ++ (~0.2718281828459045E1, ~0.5E~323) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.5E~323) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.5E~323) = inf +nextAfter (~0.2718281828459045E1, ~0.5E~323) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.5E~323) = inf +* (~0.2718281828459045E1, ~0.0) = 0.0 ++ (~0.2718281828459045E1, ~0.0) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.0) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.0) = inf +nextAfter (~0.2718281828459045E1, ~0.0) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.0) = nan +* (~0.2718281828459045E1, inf) = ~inf ++ (~0.2718281828459045E1, inf) = inf +- (~0.2718281828459045E1, inf) = ~inf +/ (~0.2718281828459045E1, inf) = ~0.0 +nextAfter (~0.2718281828459045E1, inf) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, inf) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~inf) = inf ++ (~0.2718281828459045E1, ~inf) = ~inf +- (~0.2718281828459045E1, ~inf) = inf +/ (~0.2718281828459045E1, ~inf) = 0.0 +nextAfter (~0.2718281828459045E1, ~inf) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~inf) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, nan) = nan ++ (~0.2718281828459045E1, nan) = nan +- (~0.2718281828459045E1, nan) = nan +/ (~0.2718281828459045E1, nan) = nan +nextAfter (~0.2718281828459045E1, nan) = nan +rem (~0.2718281828459045E1, nan) = nan +* (~0.2718281828459045E1, inf) = ~inf ++ (~0.2718281828459045E1, inf) = inf +- (~0.2718281828459045E1, inf) = ~inf +/ (~0.2718281828459045E1, inf) = ~0.0 +nextAfter (~0.2718281828459045E1, inf) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, inf) = ~0.2718281828459045E1 +* (~0.123E1, 0.17976931348623157E309) = ~inf ++ (~0.123E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E1, 0.17976931348623157E309) = ~0.6842102114909647E~308 +nextAfter (~0.123E1, 0.17976931348623157E309) = ~0.12299999999999998E1 +rem (~0.123E1, 0.17976931348623157E309) = ~0.123E1 +* (~0.123E1, 0.8988465674311579E308) = ~0.1105581277940324E309 ++ (~0.123E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E1, 0.8988465674311579E308) = ~0.1368420422981929E~307 +nextAfter (~0.123E1, 0.8988465674311579E308) = ~0.12299999999999998E1 +rem (~0.123E1, 0.8988465674311579E308) = ~0.123E1 +* (~0.123E1, 0.123E4) = ~0.15129E4 ++ (~0.123E1, 0.123E4) = 0.122877E4 +- (~0.123E1, 0.123E4) = ~0.123123E4 +/ (~0.123E1, 0.123E4) = ~0.1E~2 +nextAfter (~0.123E1, 0.123E4) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E4) = ~0.123E1 +* (~0.123E1, 0.123E2) = ~0.15129000000000001E2 ++ (~0.123E1, 0.123E2) = 0.1107E2 +- (~0.123E1, 0.123E2) = ~0.13530000000000001E2 +/ (~0.123E1, 0.123E2) = ~0.9999999999999999E~1 +nextAfter (~0.123E1, 0.123E2) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E2) = ~0.123E1 +* (~0.123E1, 0.3141592653589793E1) = ~0.38641589639154454E1 ++ (~0.123E1, 0.3141592653589793E1) = 0.19115926535897931E1 +- (~0.123E1, 0.3141592653589793E1) = ~0.43715926535897935E1 +/ (~0.123E1, 0.3141592653589793E1) = ~0.3915211600060625 +nextAfter (~0.123E1, 0.3141592653589793E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.3141592653589793E1) = ~0.123E1 +* (~0.123E1, 0.2718281828459045E1) = ~0.33434866490046256E1 ++ (~0.123E1, 0.2718281828459045E1) = 0.1488281828459045E1 +- (~0.123E1, 0.2718281828459045E1) = ~0.3948281828459045E1 +/ (~0.123E1, 0.2718281828459045E1) = ~0.45249171264087407 +nextAfter (~0.123E1, 0.2718281828459045E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.2718281828459045E1) = ~0.123E1 +* (~0.123E1, 0.123E1) = ~0.15129E1 ++ (~0.123E1, 0.123E1) = 0.0 +- (~0.123E1, 0.123E1) = ~0.246E1 +/ (~0.123E1, 0.123E1) = ~0.1E1 +nextAfter (~0.123E1, 0.123E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E1) = 0.0 +* (~0.123E1, 0.123) = ~0.15129 ++ (~0.123E1, 0.123) = ~0.1107E1 +- (~0.123E1, 0.123) = ~0.1353E1 +/ (~0.123E1, 0.123) = ~0.1E2 +nextAfter (~0.123E1, 0.123) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123) = 0.0 +* (~0.123E1, 0.123E~2) = ~0.15129E~2 ++ (~0.123E1, 0.123E~2) = ~0.122877E1 +- (~0.123E1, 0.123E~2) = ~0.123123E1 +/ (~0.123E1, 0.123E~2) = ~0.1E4 +nextAfter (~0.123E1, 0.123E~2) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E~2) = 0.0 +* (~0.123E1, 0.22250738585072014E~307) = ~0.27368408459638577E~307 ++ (~0.123E1, 0.22250738585072014E~307) = ~0.123E1 +- (~0.123E1, 0.22250738585072014E~307) = ~0.123E1 +/ (~0.123E1, 0.22250738585072014E~307) = ~0.5527906389701621E308 +nextAfter (~0.123E1, 0.22250738585072014E~307) = ~0.12299999999999998E1 +rem (~0.123E1, 0.22250738585072014E~307) = 0.0 +* (~0.123E1, 0.11125369292536007E~307) = ~0.1368420422981929E~307 ++ (~0.123E1, 0.11125369292536007E~307) = ~0.123E1 +- (~0.123E1, 0.11125369292536007E~307) = ~0.123E1 +/ (~0.123E1, 0.11125369292536007E~307) = ~0.11055812779403243E309 +nextAfter (~0.123E1, 0.11125369292536007E~307) = ~0.12299999999999998E1 +rem (~0.123E1, 0.11125369292536007E~307) = 0.0 +* (~0.123E1, 0.5E~323) = ~0.5E~323 ++ (~0.123E1, 0.5E~323) = ~0.123E1 +- (~0.123E1, 0.5E~323) = ~0.123E1 +/ (~0.123E1, 0.5E~323) = ~inf +nextAfter (~0.123E1, 0.5E~323) = ~0.12299999999999998E1 +rem (~0.123E1, 0.5E~323) = inf +* (~0.123E1, 0.0) = ~0.0 ++ (~0.123E1, 0.0) = ~0.123E1 +- (~0.123E1, 0.0) = ~0.123E1 +/ (~0.123E1, 0.0) = ~inf +nextAfter (~0.123E1, 0.0) = ~0.12299999999999998E1 +rem (~0.123E1, 0.0) = nan +* (~0.123E1, ~0.17976931348623157E309) = inf ++ (~0.123E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E1, ~0.17976931348623157E309) = 0.6842102114909647E~308 +nextAfter (~0.123E1, ~0.17976931348623157E309) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.17976931348623157E309) = ~0.123E1 +* (~0.123E1, ~0.8988465674311579E308) = 0.1105581277940324E309 ++ (~0.123E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E1, ~0.8988465674311579E308) = 0.1368420422981929E~307 +nextAfter (~0.123E1, ~0.8988465674311579E308) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.8988465674311579E308) = ~0.123E1 +* (~0.123E1, ~0.123E4) = 0.15129E4 ++ (~0.123E1, ~0.123E4) = ~0.123123E4 +- (~0.123E1, ~0.123E4) = 0.122877E4 +/ (~0.123E1, ~0.123E4) = 0.1E~2 +nextAfter (~0.123E1, ~0.123E4) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.123E4) = ~0.123E1 +* (~0.123E1, ~0.123E2) = 0.15129000000000001E2 ++ (~0.123E1, ~0.123E2) = ~0.13530000000000001E2 +- (~0.123E1, ~0.123E2) = 0.1107E2 +/ (~0.123E1, ~0.123E2) = 0.9999999999999999E~1 +nextAfter (~0.123E1, ~0.123E2) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.123E2) = ~0.123E1 +* (~0.123E1, ~0.3141592653589793E1) = 0.38641589639154454E1 ++ (~0.123E1, ~0.3141592653589793E1) = ~0.43715926535897935E1 +- (~0.123E1, ~0.3141592653589793E1) = 0.19115926535897931E1 +/ (~0.123E1, ~0.3141592653589793E1) = 0.3915211600060625 +nextAfter (~0.123E1, ~0.3141592653589793E1) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.3141592653589793E1) = ~0.123E1 +* (~0.123E1, ~0.2718281828459045E1) = 0.33434866490046256E1 ++ (~0.123E1, ~0.2718281828459045E1) = ~0.3948281828459045E1 +- (~0.123E1, ~0.2718281828459045E1) = 0.1488281828459045E1 +/ (~0.123E1, ~0.2718281828459045E1) = 0.45249171264087407 +nextAfter (~0.123E1, ~0.2718281828459045E1) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.2718281828459045E1) = ~0.123E1 +* (~0.123E1, ~0.123E1) = 0.15129E1 ++ (~0.123E1, ~0.123E1) = ~0.246E1 +- (~0.123E1, ~0.123E1) = 0.0 +/ (~0.123E1, ~0.123E1) = 0.1E1 +nextAfter (~0.123E1, ~0.123E1) = ~0.123E1 +rem (~0.123E1, ~0.123E1) = 0.0 +* (~0.123E1, ~0.123) = 0.15129 ++ (~0.123E1, ~0.123) = ~0.1353E1 +- (~0.123E1, ~0.123) = ~0.1107E1 +/ (~0.123E1, ~0.123) = 0.1E2 +nextAfter (~0.123E1, ~0.123) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.123) = 0.0 +* (~0.123E1, ~0.123E~2) = 0.15129E~2 ++ (~0.123E1, ~0.123E~2) = ~0.123123E1 +- (~0.123E1, ~0.123E~2) = ~0.122877E1 +/ (~0.123E1, ~0.123E~2) = 0.1E4 +nextAfter (~0.123E1, ~0.123E~2) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.123E~2) = 0.0 +* (~0.123E1, ~0.22250738585072014E~307) = 0.27368408459638577E~307 ++ (~0.123E1, ~0.22250738585072014E~307) = ~0.123E1 +- (~0.123E1, ~0.22250738585072014E~307) = ~0.123E1 +/ (~0.123E1, ~0.22250738585072014E~307) = 0.5527906389701621E308 +nextAfter (~0.123E1, ~0.22250738585072014E~307) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.22250738585072014E~307) = 0.0 +* (~0.123E1, ~0.11125369292536007E~307) = 0.1368420422981929E~307 ++ (~0.123E1, ~0.11125369292536007E~307) = ~0.123E1 +- (~0.123E1, ~0.11125369292536007E~307) = ~0.123E1 +/ (~0.123E1, ~0.11125369292536007E~307) = 0.11055812779403243E309 +nextAfter (~0.123E1, ~0.11125369292536007E~307) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.11125369292536007E~307) = 0.0 +* (~0.123E1, ~0.5E~323) = 0.5E~323 ++ (~0.123E1, ~0.5E~323) = ~0.123E1 +- (~0.123E1, ~0.5E~323) = ~0.123E1 +/ (~0.123E1, ~0.5E~323) = inf +nextAfter (~0.123E1, ~0.5E~323) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.5E~323) = inf +* (~0.123E1, ~0.0) = 0.0 ++ (~0.123E1, ~0.0) = ~0.123E1 +- (~0.123E1, ~0.0) = ~0.123E1 +/ (~0.123E1, ~0.0) = inf +nextAfter (~0.123E1, ~0.0) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.0) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999999999998E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123E1, ~inf) = inf ++ (~0.123E1, ~inf) = ~inf +- (~0.123E1, ~inf) = inf +/ (~0.123E1, ~inf) = 0.0 +nextAfter (~0.123E1, ~inf) = ~0.12300000000000002E1 +rem (~0.123E1, ~inf) = ~0.123E1 +* (~0.123E1, nan) = nan ++ (~0.123E1, nan) = nan +- (~0.123E1, nan) = nan +/ (~0.123E1, nan) = nan +nextAfter (~0.123E1, nan) = nan +rem (~0.123E1, nan) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999999999998E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123, 0.17976931348623157E309) = ~0.22111625558806483E308 ++ (~0.123, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123, 0.17976931348623157E309) = ~0.684210211490966E~309 +nextAfter (~0.123, 0.17976931348623157E309) = ~0.12299999999999998 +rem (~0.123, 0.17976931348623157E309) = ~0.123 +* (~0.123, 0.8988465674311579E308) = ~0.11055812779403241E308 ++ (~0.123, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123, 0.8988465674311579E308) = ~0.136842042298193E~308 +nextAfter (~0.123, 0.8988465674311579E308) = ~0.12299999999999998 +rem (~0.123, 0.8988465674311579E308) = ~0.123 +* (~0.123, 0.123E4) = ~0.15129E3 ++ (~0.123, 0.123E4) = 0.1229877E4 +- (~0.123, 0.123E4) = ~0.1230123E4 +/ (~0.123, 0.123E4) = ~0.1E~3 +nextAfter (~0.123, 0.123E4) = ~0.12299999999999998 +rem (~0.123, 0.123E4) = ~0.123 +* (~0.123, 0.123E2) = ~0.15129000000000001E1 ++ (~0.123, 0.123E2) = 0.12177000000000001E2 +- (~0.123, 0.123E2) = ~0.12423E2 +/ (~0.123, 0.123E2) = ~0.9999999999999998E~2 +nextAfter (~0.123, 0.123E2) = ~0.12299999999999998 +rem (~0.123, 0.123E2) = ~0.123 +* (~0.123, 0.3141592653589793E1) = ~0.38641589639154456 ++ (~0.123, 0.3141592653589793E1) = 0.3018592653589793E1 +- (~0.123, 0.3141592653589793E1) = ~0.32645926535897933E1 +/ (~0.123, 0.3141592653589793E1) = ~0.3915211600060625E~1 +nextAfter (~0.123, 0.3141592653589793E1) = ~0.12299999999999998 +rem (~0.123, 0.3141592653589793E1) = ~0.123 +* (~0.123, 0.2718281828459045E1) = ~0.33434866490046256 ++ (~0.123, 0.2718281828459045E1) = 0.25952818284590453E1 +- (~0.123, 0.2718281828459045E1) = ~0.2841281828459045E1 +/ (~0.123, 0.2718281828459045E1) = ~0.4524917126408741E~1 +nextAfter (~0.123, 0.2718281828459045E1) = ~0.12299999999999998 +rem (~0.123, 0.2718281828459045E1) = ~0.123 +* (~0.123, 0.123E1) = ~0.15129 ++ (~0.123, 0.123E1) = 0.1107E1 +- (~0.123, 0.123E1) = ~0.1353E1 +/ (~0.123, 0.123E1) = ~0.1 +nextAfter (~0.123, 0.123E1) = ~0.12299999999999998 +rem (~0.123, 0.123E1) = ~0.123 +* (~0.123, 0.123) = ~0.15129E~1 ++ (~0.123, 0.123) = 0.0 +- (~0.123, 0.123) = ~0.246 +/ (~0.123, 0.123) = ~0.1E1 +nextAfter (~0.123, 0.123) = ~0.12299999999999998 +rem (~0.123, 0.123) = 0.0 +* (~0.123, 0.123E~2) = ~0.15129E~3 ++ (~0.123, 0.123E~2) = ~0.12177 +- (~0.123, 0.123E~2) = ~0.12423 +/ (~0.123, 0.123E~2) = ~0.1E3 +nextAfter (~0.123, 0.123E~2) = ~0.12299999999999998 +rem (~0.123, 0.123E~2) = 0.0 +* (~0.123, 0.22250738585072014E~307) = ~0.273684084596386E~308 ++ (~0.123, 0.22250738585072014E~307) = ~0.123 +- (~0.123, 0.22250738585072014E~307) = ~0.123 +/ (~0.123, 0.22250738585072014E~307) = ~0.55279063897016213E307 +nextAfter (~0.123, 0.22250738585072014E~307) = ~0.12299999999999998 +rem (~0.123, 0.22250738585072014E~307) = 0.0 +* (~0.123, 0.11125369292536007E~307) = ~0.136842042298193E~308 ++ (~0.123, 0.11125369292536007E~307) = ~0.123 +- (~0.123, 0.11125369292536007E~307) = ~0.123 +/ (~0.123, 0.11125369292536007E~307) = ~0.11055812779403243E308 +nextAfter (~0.123, 0.11125369292536007E~307) = ~0.12299999999999998 +rem (~0.123, 0.11125369292536007E~307) = 0.0 +* (~0.123, 0.5E~323) = ~0.0 ++ (~0.123, 0.5E~323) = ~0.123 +- (~0.123, 0.5E~323) = ~0.123 +/ (~0.123, 0.5E~323) = ~inf +nextAfter (~0.123, 0.5E~323) = ~0.12299999999999998 +rem (~0.123, 0.5E~323) = inf +* (~0.123, 0.0) = ~0.0 ++ (~0.123, 0.0) = ~0.123 +- (~0.123, 0.0) = ~0.123 +/ (~0.123, 0.0) = ~inf +nextAfter (~0.123, 0.0) = ~0.12299999999999998 +rem (~0.123, 0.0) = nan +* (~0.123, ~0.17976931348623157E309) = 0.22111625558806483E308 ++ (~0.123, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123, ~0.17976931348623157E309) = 0.684210211490966E~309 +nextAfter (~0.123, ~0.17976931348623157E309) = ~0.12300000000000001 +rem (~0.123, ~0.17976931348623157E309) = ~0.123 +* (~0.123, ~0.8988465674311579E308) = 0.11055812779403241E308 ++ (~0.123, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123, ~0.8988465674311579E308) = 0.136842042298193E~308 +nextAfter (~0.123, ~0.8988465674311579E308) = ~0.12300000000000001 +rem (~0.123, ~0.8988465674311579E308) = ~0.123 +* (~0.123, ~0.123E4) = 0.15129E3 ++ (~0.123, ~0.123E4) = ~0.1230123E4 +- (~0.123, ~0.123E4) = 0.1229877E4 +/ (~0.123, ~0.123E4) = 0.1E~3 +nextAfter (~0.123, ~0.123E4) = ~0.12300000000000001 +rem (~0.123, ~0.123E4) = ~0.123 +* (~0.123, ~0.123E2) = 0.15129000000000001E1 ++ (~0.123, ~0.123E2) = ~0.12423E2 +- (~0.123, ~0.123E2) = 0.12177000000000001E2 +/ (~0.123, ~0.123E2) = 0.9999999999999998E~2 +nextAfter (~0.123, ~0.123E2) = ~0.12300000000000001 +rem (~0.123, ~0.123E2) = ~0.123 +* (~0.123, ~0.3141592653589793E1) = 0.38641589639154456 ++ (~0.123, ~0.3141592653589793E1) = ~0.32645926535897933E1 +- (~0.123, ~0.3141592653589793E1) = 0.3018592653589793E1 +/ (~0.123, ~0.3141592653589793E1) = 0.3915211600060625E~1 +nextAfter (~0.123, ~0.3141592653589793E1) = ~0.12300000000000001 +rem (~0.123, ~0.3141592653589793E1) = ~0.123 +* (~0.123, ~0.2718281828459045E1) = 0.33434866490046256 ++ (~0.123, ~0.2718281828459045E1) = ~0.2841281828459045E1 +- (~0.123, ~0.2718281828459045E1) = 0.25952818284590453E1 +/ (~0.123, ~0.2718281828459045E1) = 0.4524917126408741E~1 +nextAfter (~0.123, ~0.2718281828459045E1) = ~0.12300000000000001 +rem (~0.123, ~0.2718281828459045E1) = ~0.123 +* (~0.123, ~0.123E1) = 0.15129 ++ (~0.123, ~0.123E1) = ~0.1353E1 +- (~0.123, ~0.123E1) = 0.1107E1 +/ (~0.123, ~0.123E1) = 0.1 +nextAfter (~0.123, ~0.123E1) = ~0.12300000000000001 +rem (~0.123, ~0.123E1) = ~0.123 +* (~0.123, ~0.123) = 0.15129E~1 ++ (~0.123, ~0.123) = ~0.246 +- (~0.123, ~0.123) = 0.0 +/ (~0.123, ~0.123) = 0.1E1 +nextAfter (~0.123, ~0.123) = ~0.123 +rem (~0.123, ~0.123) = 0.0 +* (~0.123, ~0.123E~2) = 0.15129E~3 ++ (~0.123, ~0.123E~2) = ~0.12423 +- (~0.123, ~0.123E~2) = ~0.12177 +/ (~0.123, ~0.123E~2) = 0.1E3 +nextAfter (~0.123, ~0.123E~2) = ~0.12299999999999998 +rem (~0.123, ~0.123E~2) = 0.0 +* (~0.123, ~0.22250738585072014E~307) = 0.273684084596386E~308 ++ (~0.123, ~0.22250738585072014E~307) = ~0.123 +- (~0.123, ~0.22250738585072014E~307) = ~0.123 +/ (~0.123, ~0.22250738585072014E~307) = 0.55279063897016213E307 +nextAfter (~0.123, ~0.22250738585072014E~307) = ~0.12299999999999998 +rem (~0.123, ~0.22250738585072014E~307) = 0.0 +* (~0.123, ~0.11125369292536007E~307) = 0.136842042298193E~308 ++ (~0.123, ~0.11125369292536007E~307) = ~0.123 +- (~0.123, ~0.11125369292536007E~307) = ~0.123 +/ (~0.123, ~0.11125369292536007E~307) = 0.11055812779403243E308 +nextAfter (~0.123, ~0.11125369292536007E~307) = ~0.12299999999999998 +rem (~0.123, ~0.11125369292536007E~307) = 0.0 +* (~0.123, ~0.5E~323) = 0.0 ++ (~0.123, ~0.5E~323) = ~0.123 +- (~0.123, ~0.5E~323) = ~0.123 +/ (~0.123, ~0.5E~323) = inf +nextAfter (~0.123, ~0.5E~323) = ~0.12299999999999998 +rem (~0.123, ~0.5E~323) = inf +* (~0.123, ~0.0) = 0.0 ++ (~0.123, ~0.0) = ~0.123 +- (~0.123, ~0.0) = ~0.123 +/ (~0.123, ~0.0) = inf +nextAfter (~0.123, ~0.0) = ~0.12299999999999998 +rem (~0.123, ~0.0) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.12299999999999998 +rem (~0.123, inf) = ~0.123 +* (~0.123, ~inf) = inf ++ (~0.123, ~inf) = ~inf +- (~0.123, ~inf) = inf +/ (~0.123, ~inf) = 0.0 +nextAfter (~0.123, ~inf) = ~0.12300000000000001 +rem (~0.123, ~inf) = ~0.123 +* (~0.123, nan) = nan ++ (~0.123, nan) = nan +- (~0.123, nan) = nan +/ (~0.123, nan) = nan +nextAfter (~0.123, nan) = nan +rem (~0.123, nan) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.12299999999999998 +rem (~0.123, inf) = ~0.123 +* (~0.123E~2, 0.17976931348623157E309) = ~0.2211162555880648E306 ++ (~0.123E~2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E~2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E~2, 0.17976931348623157E309) = ~0.684210211491E~311 +nextAfter (~0.123E~2, 0.17976931348623157E309) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.17976931348623157E309) = ~0.123E~2 +* (~0.123E~2, 0.8988465674311579E308) = ~0.1105581277940324E306 ++ (~0.123E~2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E~2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E~2, 0.8988465674311579E308) = ~0.1368420422982E~310 +nextAfter (~0.123E~2, 0.8988465674311579E308) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.8988465674311579E308) = ~0.123E~2 +* (~0.123E~2, 0.123E4) = ~0.15129E1 ++ (~0.123E~2, 0.123E4) = 0.122999877E4 +- (~0.123E~2, 0.123E4) = ~0.123000123E4 +/ (~0.123E~2, 0.123E4) = ~0.1E~5 +nextAfter (~0.123E~2, 0.123E4) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E4) = ~0.123E~2 +* (~0.123E~2, 0.123E2) = ~0.15129E~1 ++ (~0.123E~2, 0.123E2) = 0.12298770000000001E2 +- (~0.123E~2, 0.123E2) = ~0.1230123E2 +/ (~0.123E~2, 0.123E2) = ~0.9999999999999999E~4 +nextAfter (~0.123E~2, 0.123E2) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E2) = ~0.123E~2 +* (~0.123E~2, 0.3141592653589793E1) = ~0.38641589639154456E~2 ++ (~0.123E~2, 0.3141592653589793E1) = 0.3140362653589793E1 +- (~0.123E~2, 0.3141592653589793E1) = ~0.3142822653589793E1 +/ (~0.123E~2, 0.3141592653589793E1) = ~0.3915211600060625E~3 +nextAfter (~0.123E~2, 0.3141592653589793E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.3141592653589793E1) = ~0.123E~2 +* (~0.123E~2, 0.2718281828459045E1) = ~0.33434866490046253E~2 ++ (~0.123E~2, 0.2718281828459045E1) = 0.2717051828459045E1 +- (~0.123E~2, 0.2718281828459045E1) = ~0.2719511828459045E1 +/ (~0.123E~2, 0.2718281828459045E1) = ~0.45249171264087406E~3 +nextAfter (~0.123E~2, 0.2718281828459045E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.2718281828459045E1) = ~0.123E~2 +* (~0.123E~2, 0.123E1) = ~0.15129E~2 ++ (~0.123E~2, 0.123E1) = 0.122877E1 +- (~0.123E~2, 0.123E1) = ~0.123123E1 +/ (~0.123E~2, 0.123E1) = ~0.1E~2 +nextAfter (~0.123E~2, 0.123E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E1) = ~0.123E~2 +* (~0.123E~2, 0.123) = ~0.15129E~3 ++ (~0.123E~2, 0.123) = 0.12177 +- (~0.123E~2, 0.123) = ~0.12423 +/ (~0.123E~2, 0.123) = ~0.1E~1 +nextAfter (~0.123E~2, 0.123) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123) = ~0.123E~2 +* (~0.123E~2, 0.123E~2) = ~0.15129E~5 ++ (~0.123E~2, 0.123E~2) = 0.0 +- (~0.123E~2, 0.123E~2) = ~0.246E~2 +/ (~0.123E~2, 0.123E~2) = ~0.1E1 +nextAfter (~0.123E~2, 0.123E~2) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E~2) = 0.0 +* (~0.123E~2, 0.22250738585072014E~307) = ~0.2736840845964E~310 ++ (~0.123E~2, 0.22250738585072014E~307) = ~0.123E~2 +- (~0.123E~2, 0.22250738585072014E~307) = ~0.123E~2 +/ (~0.123E~2, 0.22250738585072014E~307) = ~0.5527906389701621E305 +nextAfter (~0.123E~2, 0.22250738585072014E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.22250738585072014E~307) = 0.0 +* (~0.123E~2, 0.11125369292536007E~307) = ~0.1368420422982E~310 ++ (~0.123E~2, 0.11125369292536007E~307) = ~0.123E~2 +- (~0.123E~2, 0.11125369292536007E~307) = ~0.123E~2 +/ (~0.123E~2, 0.11125369292536007E~307) = ~0.11055812779403243E306 +nextAfter (~0.123E~2, 0.11125369292536007E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.11125369292536007E~307) = 0.0 +* (~0.123E~2, 0.5E~323) = ~0.0 ++ (~0.123E~2, 0.5E~323) = ~0.123E~2 +- (~0.123E~2, 0.5E~323) = ~0.123E~2 +/ (~0.123E~2, 0.5E~323) = ~inf +nextAfter (~0.123E~2, 0.5E~323) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.5E~323) = inf +* (~0.123E~2, 0.0) = ~0.0 ++ (~0.123E~2, 0.0) = ~0.123E~2 +- (~0.123E~2, 0.0) = ~0.123E~2 +/ (~0.123E~2, 0.0) = ~inf +nextAfter (~0.123E~2, 0.0) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.0) = nan +* (~0.123E~2, ~0.17976931348623157E309) = 0.2211162555880648E306 ++ (~0.123E~2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E~2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E~2, ~0.17976931348623157E309) = 0.684210211491E~311 +nextAfter (~0.123E~2, ~0.17976931348623157E309) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.17976931348623157E309) = ~0.123E~2 +* (~0.123E~2, ~0.8988465674311579E308) = 0.1105581277940324E306 ++ (~0.123E~2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E~2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E~2, ~0.8988465674311579E308) = 0.1368420422982E~310 +nextAfter (~0.123E~2, ~0.8988465674311579E308) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.8988465674311579E308) = ~0.123E~2 +* (~0.123E~2, ~0.123E4) = 0.15129E1 ++ (~0.123E~2, ~0.123E4) = ~0.123000123E4 +- (~0.123E~2, ~0.123E4) = 0.122999877E4 +/ (~0.123E~2, ~0.123E4) = 0.1E~5 +nextAfter (~0.123E~2, ~0.123E4) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E4) = ~0.123E~2 +* (~0.123E~2, ~0.123E2) = 0.15129E~1 ++ (~0.123E~2, ~0.123E2) = ~0.1230123E2 +- (~0.123E~2, ~0.123E2) = 0.12298770000000001E2 +/ (~0.123E~2, ~0.123E2) = 0.9999999999999999E~4 +nextAfter (~0.123E~2, ~0.123E2) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E2) = ~0.123E~2 +* (~0.123E~2, ~0.3141592653589793E1) = 0.38641589639154456E~2 ++ (~0.123E~2, ~0.3141592653589793E1) = ~0.3142822653589793E1 +- (~0.123E~2, ~0.3141592653589793E1) = 0.3140362653589793E1 +/ (~0.123E~2, ~0.3141592653589793E1) = 0.3915211600060625E~3 +nextAfter (~0.123E~2, ~0.3141592653589793E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.3141592653589793E1) = ~0.123E~2 +* (~0.123E~2, ~0.2718281828459045E1) = 0.33434866490046253E~2 ++ (~0.123E~2, ~0.2718281828459045E1) = ~0.2719511828459045E1 +- (~0.123E~2, ~0.2718281828459045E1) = 0.2717051828459045E1 +/ (~0.123E~2, ~0.2718281828459045E1) = 0.45249171264087406E~3 +nextAfter (~0.123E~2, ~0.2718281828459045E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.2718281828459045E1) = ~0.123E~2 +* (~0.123E~2, ~0.123E1) = 0.15129E~2 ++ (~0.123E~2, ~0.123E1) = ~0.123123E1 +- (~0.123E~2, ~0.123E1) = 0.122877E1 +/ (~0.123E~2, ~0.123E1) = 0.1E~2 +nextAfter (~0.123E~2, ~0.123E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E1) = ~0.123E~2 +* (~0.123E~2, ~0.123) = 0.15129E~3 ++ (~0.123E~2, ~0.123) = ~0.12423 +- (~0.123E~2, ~0.123) = 0.12177 +/ (~0.123E~2, ~0.123) = 0.1E~1 +nextAfter (~0.123E~2, ~0.123) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123) = ~0.123E~2 +* (~0.123E~2, ~0.123E~2) = 0.15129E~5 ++ (~0.123E~2, ~0.123E~2) = ~0.246E~2 +- (~0.123E~2, ~0.123E~2) = 0.0 +/ (~0.123E~2, ~0.123E~2) = 0.1E1 +nextAfter (~0.123E~2, ~0.123E~2) = ~0.123E~2 +rem (~0.123E~2, ~0.123E~2) = 0.0 +* (~0.123E~2, ~0.22250738585072014E~307) = 0.2736840845964E~310 ++ (~0.123E~2, ~0.22250738585072014E~307) = ~0.123E~2 +- (~0.123E~2, ~0.22250738585072014E~307) = ~0.123E~2 +/ (~0.123E~2, ~0.22250738585072014E~307) = 0.5527906389701621E305 +nextAfter (~0.123E~2, ~0.22250738585072014E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.22250738585072014E~307) = 0.0 +* (~0.123E~2, ~0.11125369292536007E~307) = 0.1368420422982E~310 ++ (~0.123E~2, ~0.11125369292536007E~307) = ~0.123E~2 +- (~0.123E~2, ~0.11125369292536007E~307) = ~0.123E~2 +/ (~0.123E~2, ~0.11125369292536007E~307) = 0.11055812779403243E306 +nextAfter (~0.123E~2, ~0.11125369292536007E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.11125369292536007E~307) = 0.0 +* (~0.123E~2, ~0.5E~323) = 0.0 ++ (~0.123E~2, ~0.5E~323) = ~0.123E~2 +- (~0.123E~2, ~0.5E~323) = ~0.123E~2 +/ (~0.123E~2, ~0.5E~323) = inf +nextAfter (~0.123E~2, ~0.5E~323) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.5E~323) = inf +* (~0.123E~2, ~0.0) = 0.0 ++ (~0.123E~2, ~0.0) = ~0.123E~2 +- (~0.123E~2, ~0.0) = ~0.123E~2 +/ (~0.123E~2, ~0.0) = inf +nextAfter (~0.123E~2, ~0.0) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.0) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999999999998E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.123E~2, ~inf) = inf ++ (~0.123E~2, ~inf) = ~inf +- (~0.123E~2, ~inf) = inf +/ (~0.123E~2, ~inf) = 0.0 +nextAfter (~0.123E~2, ~inf) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~inf) = ~0.123E~2 +* (~0.123E~2, nan) = nan ++ (~0.123E~2, nan) = nan +- (~0.123E~2, nan) = nan +/ (~0.123E~2, nan) = nan +nextAfter (~0.123E~2, nan) = nan +rem (~0.123E~2, nan) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999999999998E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.39999999999999996E1 ++ (~0.22250738585072014E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.19999999999999998E1 ++ (~0.22250738585072014E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E4) = ~0.27368408459638577E~304 ++ (~0.22250738585072014E~307, 0.123E4) = 0.123E4 +- (~0.22250738585072014E~307, 0.123E4) = ~0.123E4 +/ (~0.22250738585072014E~307, 0.123E4) = ~0.18090031369976E~310 +nextAfter (~0.22250738585072014E~307, 0.123E4) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E4) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E2) = ~0.2736840845963858E~306 ++ (~0.22250738585072014E~307, 0.123E2) = 0.123E2 +- (~0.22250738585072014E~307, 0.123E2) = ~0.123E2 +/ (~0.22250738585072014E~307, 0.123E2) = ~0.1809003136997725E~308 +nextAfter (~0.22250738585072014E~307, 0.123E2) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.6990275687580919E~307 ++ (~0.22250738585072014E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.7082630066519554E~308 +nextAfter (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.6048377836559378E~307 ++ (~0.22250738585072014E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.818558927632814E~308 +nextAfter (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E1) = ~0.27368408459638577E~307 ++ (~0.22250738585072014E~307, 0.123E1) = 0.123E1 +- (~0.22250738585072014E~307, 0.123E1) = ~0.123E1 +/ (~0.22250738585072014E~307, 0.123E1) = ~0.18090031369977247E~307 +nextAfter (~0.22250738585072014E~307, 0.123E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123) = ~0.273684084596386E~308 ++ (~0.22250738585072014E~307, 0.123) = 0.123 +- (~0.22250738585072014E~307, 0.123) = ~0.123 +/ (~0.22250738585072014E~307, 0.123) = ~0.1809003136997725E~306 +nextAfter (~0.22250738585072014E~307, 0.123) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E~2) = ~0.2736840845964E~310 ++ (~0.22250738585072014E~307, 0.123E~2) = 0.123E~2 +- (~0.22250738585072014E~307, 0.123E~2) = ~0.123E~2 +/ (~0.22250738585072014E~307, 0.123E~2) = ~0.18090031369977247E~304 +nextAfter (~0.22250738585072014E~307, 0.123E~2) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E~2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.0 ++ (~0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +- (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.4450147717014403E~307 +/ (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.1E1 +nextAfter (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +* (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.0 ++ (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.3337610787760802E~307 +/ (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.2E1 +nextAfter (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 +* (~0.22250738585072014E~307, 0.5E~323) = ~0.0 ++ (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507201E~307 +- (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507202E~307 +/ (~0.22250738585072014E~307, 0.5E~323) = ~0.4503599627370496E16 +nextAfter (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.5E~323) = 0.0 +* (~0.22250738585072014E~307, 0.0) = ~0.0 ++ (~0.22250738585072014E~307, 0.0) = ~0.22250738585072014E~307 +- (~0.22250738585072014E~307, 0.0) = ~0.22250738585072014E~307 +/ (~0.22250738585072014E~307, 0.0) = ~inf +nextAfter (~0.22250738585072014E~307, 0.0) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.0) = nan +* (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.39999999999999996E1 ++ (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.19999999999999998E1 ++ (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E4) = 0.27368408459638577E~304 ++ (~0.22250738585072014E~307, ~0.123E4) = ~0.123E4 +- (~0.22250738585072014E~307, ~0.123E4) = 0.123E4 +/ (~0.22250738585072014E~307, ~0.123E4) = 0.18090031369976E~310 +nextAfter (~0.22250738585072014E~307, ~0.123E4) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E4) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E2) = 0.2736840845963858E~306 ++ (~0.22250738585072014E~307, ~0.123E2) = ~0.123E2 +- (~0.22250738585072014E~307, ~0.123E2) = 0.123E2 +/ (~0.22250738585072014E~307, ~0.123E2) = 0.1809003136997725E~308 +nextAfter (~0.22250738585072014E~307, ~0.123E2) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.6990275687580919E~307 ++ (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.7082630066519554E~308 +nextAfter (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.6048377836559378E~307 ++ (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.818558927632814E~308 +nextAfter (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E1) = 0.27368408459638577E~307 ++ (~0.22250738585072014E~307, ~0.123E1) = ~0.123E1 +- (~0.22250738585072014E~307, ~0.123E1) = 0.123E1 +/ (~0.22250738585072014E~307, ~0.123E1) = 0.18090031369977247E~307 +nextAfter (~0.22250738585072014E~307, ~0.123E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123) = 0.273684084596386E~308 ++ (~0.22250738585072014E~307, ~0.123) = ~0.123 +- (~0.22250738585072014E~307, ~0.123) = 0.123 +/ (~0.22250738585072014E~307, ~0.123) = 0.1809003136997725E~306 +nextAfter (~0.22250738585072014E~307, ~0.123) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E~2) = 0.2736840845964E~310 ++ (~0.22250738585072014E~307, ~0.123E~2) = ~0.123E~2 +- (~0.22250738585072014E~307, ~0.123E~2) = 0.123E~2 +/ (~0.22250738585072014E~307, ~0.123E~2) = 0.18090031369977247E~304 +nextAfter (~0.22250738585072014E~307, ~0.123E~2) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E~2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 ++ (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.4450147717014403E~307 +- (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +/ (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.1E1 +nextAfter (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +rem (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +* (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 ++ (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.3337610787760802E~307 +- (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.2E1 +nextAfter (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 +* (~0.22250738585072014E~307, ~0.5E~323) = 0.0 ++ (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507202E~307 +- (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507201E~307 +/ (~0.22250738585072014E~307, ~0.5E~323) = 0.4503599627370496E16 +nextAfter (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.5E~323) = 0.0 +* (~0.22250738585072014E~307, ~0.0) = 0.0 ++ (~0.22250738585072014E~307, ~0.0) = ~0.22250738585072014E~307 +- (~0.22250738585072014E~307, ~0.0) = ~0.22250738585072014E~307 +/ (~0.22250738585072014E~307, ~0.0) = inf +nextAfter (~0.22250738585072014E~307, ~0.0) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.0) = nan +* (~0.22250738585072014E~307, inf) = ~inf ++ (~0.22250738585072014E~307, inf) = inf +- (~0.22250738585072014E~307, inf) = ~inf +/ (~0.22250738585072014E~307, inf) = ~0.0 +nextAfter (~0.22250738585072014E~307, inf) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, inf) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~inf) = inf ++ (~0.22250738585072014E~307, ~inf) = ~inf +- (~0.22250738585072014E~307, ~inf) = inf +/ (~0.22250738585072014E~307, ~inf) = 0.0 +nextAfter (~0.22250738585072014E~307, ~inf) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~inf) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, nan) = nan ++ (~0.22250738585072014E~307, nan) = nan +- (~0.22250738585072014E~307, nan) = nan +/ (~0.22250738585072014E~307, nan) = nan +nextAfter (~0.22250738585072014E~307, nan) = nan +rem (~0.22250738585072014E~307, nan) = nan +* (~0.22250738585072014E~307, inf) = ~inf ++ (~0.22250738585072014E~307, inf) = inf +- (~0.22250738585072014E~307, inf) = ~inf +/ (~0.22250738585072014E~307, inf) = ~0.0 +nextAfter (~0.22250738585072014E~307, inf) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, inf) = ~0.22250738585072014E~307 +* (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.19999999999999998E1 ++ (~0.11125369292536007E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.9999999999999999 ++ (~0.11125369292536007E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E4) = ~0.13684204229819289E~304 ++ (~0.11125369292536007E~307, 0.123E4) = 0.123E4 +- (~0.11125369292536007E~307, 0.123E4) = ~0.123E4 +/ (~0.11125369292536007E~307, 0.123E4) = ~0.904501568499E~311 +nextAfter (~0.11125369292536007E~307, 0.123E4) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E4) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E2) = ~0.1368420422981929E~306 ++ (~0.11125369292536007E~307, 0.123E2) = 0.123E2 +- (~0.11125369292536007E~307, 0.123E2) = ~0.123E2 +/ (~0.11125369292536007E~307, 0.123E2) = ~0.90450156849886E~309 +nextAfter (~0.11125369292536007E~307, 0.123E2) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.34951378437904593E~307 ++ (~0.11125369292536007E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3541315033259774E~308 +nextAfter (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.3024188918279689E~307 ++ (~0.11125369292536007E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.409279463816407E~308 +nextAfter (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E1) = ~0.1368420422981929E~307 ++ (~0.11125369292536007E~307, 0.123E1) = 0.123E1 +- (~0.11125369292536007E~307, 0.123E1) = ~0.123E1 +/ (~0.11125369292536007E~307, 0.123E1) = ~0.9045015684988623E~308 +nextAfter (~0.11125369292536007E~307, 0.123E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123) = ~0.136842042298193E~308 ++ (~0.11125369292536007E~307, 0.123) = 0.123 +- (~0.11125369292536007E~307, 0.123) = ~0.123 +/ (~0.11125369292536007E~307, 0.123) = ~0.9045015684988624E~307 +nextAfter (~0.11125369292536007E~307, 0.123) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E~2) = ~0.1368420422982E~310 ++ (~0.11125369292536007E~307, 0.123E~2) = 0.123E~2 +- (~0.11125369292536007E~307, 0.123E~2) = ~0.123E~2 +/ (~0.11125369292536007E~307, 0.123E~2) = ~0.9045015684988623E~305 +nextAfter (~0.11125369292536007E~307, 0.123E~2) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E~2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.0 ++ (~0.11125369292536007E~307, 0.22250738585072014E~307) = 0.11125369292536007E~307 +- (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.3337610787760802E~307 +/ (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.5 +nextAfter (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.0 ++ (~0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +- (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.22250738585072014E~307 +/ (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.1E1 +nextAfter (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +* (~0.11125369292536007E~307, 0.5E~323) = ~0.0 ++ (~0.11125369292536007E~307, 0.5E~323) = ~0.11125369292536E~307 +- (~0.11125369292536007E~307, 0.5E~323) = ~0.1112536929253601E~307 +/ (~0.11125369292536007E~307, 0.5E~323) = ~0.2251799813685248E16 +nextAfter (~0.11125369292536007E~307, 0.5E~323) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.5E~323) = 0.0 +* (~0.11125369292536007E~307, 0.0) = ~0.0 ++ (~0.11125369292536007E~307, 0.0) = ~0.11125369292536007E~307 +- (~0.11125369292536007E~307, 0.0) = ~0.11125369292536007E~307 +/ (~0.11125369292536007E~307, 0.0) = ~inf +nextAfter (~0.11125369292536007E~307, 0.0) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.0) = nan +* (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.19999999999999998E1 ++ (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.9999999999999999 ++ (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E4) = 0.13684204229819289E~304 ++ (~0.11125369292536007E~307, ~0.123E4) = ~0.123E4 +- (~0.11125369292536007E~307, ~0.123E4) = 0.123E4 +/ (~0.11125369292536007E~307, ~0.123E4) = 0.904501568499E~311 +nextAfter (~0.11125369292536007E~307, ~0.123E4) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E4) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E2) = 0.1368420422981929E~306 ++ (~0.11125369292536007E~307, ~0.123E2) = ~0.123E2 +- (~0.11125369292536007E~307, ~0.123E2) = 0.123E2 +/ (~0.11125369292536007E~307, ~0.123E2) = 0.90450156849886E~309 +nextAfter (~0.11125369292536007E~307, ~0.123E2) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.34951378437904593E~307 ++ (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3541315033259774E~308 +nextAfter (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.3024188918279689E~307 ++ (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.409279463816407E~308 +nextAfter (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E1) = 0.1368420422981929E~307 ++ (~0.11125369292536007E~307, ~0.123E1) = ~0.123E1 +- (~0.11125369292536007E~307, ~0.123E1) = 0.123E1 +/ (~0.11125369292536007E~307, ~0.123E1) = 0.9045015684988623E~308 +nextAfter (~0.11125369292536007E~307, ~0.123E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123) = 0.136842042298193E~308 ++ (~0.11125369292536007E~307, ~0.123) = ~0.123 +- (~0.11125369292536007E~307, ~0.123) = 0.123 +/ (~0.11125369292536007E~307, ~0.123) = 0.9045015684988624E~307 +nextAfter (~0.11125369292536007E~307, ~0.123) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E~2) = 0.1368420422982E~310 ++ (~0.11125369292536007E~307, ~0.123E~2) = ~0.123E~2 +- (~0.11125369292536007E~307, ~0.123E~2) = 0.123E~2 +/ (~0.11125369292536007E~307, ~0.123E~2) = 0.9045015684988623E~305 +nextAfter (~0.11125369292536007E~307, ~0.123E~2) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E~2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.0 ++ (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.3337610787760802E~307 +- (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536007E~307 +/ (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.5 +nextAfter (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 ++ (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.22250738585072014E~307 +- (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +/ (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.1E1 +nextAfter (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +rem (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +* (~0.11125369292536007E~307, ~0.5E~323) = 0.0 ++ (~0.11125369292536007E~307, ~0.5E~323) = ~0.1112536929253601E~307 +- (~0.11125369292536007E~307, ~0.5E~323) = ~0.11125369292536E~307 +/ (~0.11125369292536007E~307, ~0.5E~323) = 0.2251799813685248E16 +nextAfter (~0.11125369292536007E~307, ~0.5E~323) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, ~0.5E~323) = 0.0 +* (~0.11125369292536007E~307, ~0.0) = 0.0 ++ (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536007E~307 +- (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536007E~307 +/ (~0.11125369292536007E~307, ~0.0) = inf +nextAfter (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, ~0.0) = nan +* (~0.11125369292536007E~307, inf) = ~inf ++ (~0.11125369292536007E~307, inf) = inf +- (~0.11125369292536007E~307, inf) = ~inf +/ (~0.11125369292536007E~307, inf) = ~0.0 +nextAfter (~0.11125369292536007E~307, inf) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, inf) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~inf) = inf ++ (~0.11125369292536007E~307, ~inf) = ~inf +- (~0.11125369292536007E~307, ~inf) = inf +/ (~0.11125369292536007E~307, ~inf) = 0.0 +nextAfter (~0.11125369292536007E~307, ~inf) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~inf) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, nan) = nan ++ (~0.11125369292536007E~307, nan) = nan +- (~0.11125369292536007E~307, nan) = nan +/ (~0.11125369292536007E~307, nan) = nan +nextAfter (~0.11125369292536007E~307, nan) = nan +rem (~0.11125369292536007E~307, nan) = nan +* (~0.11125369292536007E~307, inf) = ~inf ++ (~0.11125369292536007E~307, inf) = inf +- (~0.11125369292536007E~307, inf) = ~inf +/ (~0.11125369292536007E~307, inf) = ~0.0 +nextAfter (~0.11125369292536007E~307, inf) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, inf) = ~0.11125369292536007E~307 +* (~0.5E~323, 0.17976931348623157E309) = ~0.8881784197001251E~15 ++ (~0.5E~323, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.5E~323, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.5E~323, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.5E~323, 0.17976931348623157E309) = ~0.0 +rem (~0.5E~323, 0.17976931348623157E309) = ~0.5E~323 +* (~0.5E~323, 0.8988465674311579E308) = ~0.44408920985006257E~15 ++ (~0.5E~323, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.5E~323, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.5E~323, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.5E~323, 0.8988465674311579E308) = ~0.0 +rem (~0.5E~323, 0.8988465674311579E308) = ~0.5E~323 +* (~0.5E~323, 0.123E4) = ~0.6077E~320 ++ (~0.5E~323, 0.123E4) = 0.123E4 +- (~0.5E~323, 0.123E4) = ~0.123E4 +/ (~0.5E~323, 0.123E4) = ~0.0 +nextAfter (~0.5E~323, 0.123E4) = ~0.0 +rem (~0.5E~323, 0.123E4) = ~0.5E~323 +* (~0.5E~323, 0.123E2) = ~0.6E~322 ++ (~0.5E~323, 0.123E2) = 0.123E2 +- (~0.5E~323, 0.123E2) = ~0.123E2 +/ (~0.5E~323, 0.123E2) = ~0.0 +nextAfter (~0.5E~323, 0.123E2) = ~0.0 +rem (~0.5E~323, 0.123E2) = ~0.5E~323 +* (~0.5E~323, 0.3141592653589793E1) = ~0.15E~322 ++ (~0.5E~323, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.5E~323, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.5E~323, 0.3141592653589793E1) = ~0.0 +nextAfter (~0.5E~323, 0.3141592653589793E1) = ~0.0 +rem (~0.5E~323, 0.3141592653589793E1) = ~0.5E~323 +* (~0.5E~323, 0.2718281828459045E1) = ~0.15E~322 ++ (~0.5E~323, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.5E~323, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.5E~323, 0.2718281828459045E1) = ~0.0 +nextAfter (~0.5E~323, 0.2718281828459045E1) = ~0.0 +rem (~0.5E~323, 0.2718281828459045E1) = ~0.5E~323 +* (~0.5E~323, 0.123E1) = ~0.5E~323 ++ (~0.5E~323, 0.123E1) = 0.123E1 +- (~0.5E~323, 0.123E1) = ~0.123E1 +/ (~0.5E~323, 0.123E1) = ~0.5E~323 +nextAfter (~0.5E~323, 0.123E1) = ~0.0 +rem (~0.5E~323, 0.123E1) = ~0.5E~323 +* (~0.5E~323, 0.123) = ~0.0 ++ (~0.5E~323, 0.123) = 0.123 +- (~0.5E~323, 0.123) = ~0.123 +/ (~0.5E~323, 0.123) = ~0.4E~322 +nextAfter (~0.5E~323, 0.123) = ~0.0 +rem (~0.5E~323, 0.123) = ~0.5E~323 +* (~0.5E~323, 0.123E~2) = ~0.0 ++ (~0.5E~323, 0.123E~2) = 0.123E~2 +- (~0.5E~323, 0.123E~2) = ~0.123E~2 +/ (~0.5E~323, 0.123E~2) = ~0.4017E~320 +nextAfter (~0.5E~323, 0.123E~2) = ~0.0 +rem (~0.5E~323, 0.123E~2) = ~0.5E~323 +* (~0.5E~323, 0.22250738585072014E~307) = ~0.0 ++ (~0.5E~323, 0.22250738585072014E~307) = 0.2225073858507201E~307 +- (~0.5E~323, 0.22250738585072014E~307) = ~0.2225073858507202E~307 +/ (~0.5E~323, 0.22250738585072014E~307) = ~0.2220446049250313E~15 +nextAfter (~0.5E~323, 0.22250738585072014E~307) = ~0.0 +rem (~0.5E~323, 0.22250738585072014E~307) = ~0.5E~323 +* (~0.5E~323, 0.11125369292536007E~307) = ~0.0 ++ (~0.5E~323, 0.11125369292536007E~307) = 0.11125369292536E~307 +- (~0.5E~323, 0.11125369292536007E~307) = ~0.1112536929253601E~307 +/ (~0.5E~323, 0.11125369292536007E~307) = ~0.4440892098500626E~15 +nextAfter (~0.5E~323, 0.11125369292536007E~307) = ~0.0 +rem (~0.5E~323, 0.11125369292536007E~307) = ~0.5E~323 +* (~0.5E~323, 0.5E~323) = ~0.0 ++ (~0.5E~323, 0.5E~323) = 0.0 +- (~0.5E~323, 0.5E~323) = ~0.1E~322 +/ (~0.5E~323, 0.5E~323) = ~0.1E1 +nextAfter (~0.5E~323, 0.5E~323) = ~0.0 +rem (~0.5E~323, 0.5E~323) = 0.0 +* (~0.5E~323, 0.0) = ~0.0 ++ (~0.5E~323, 0.0) = ~0.5E~323 +- (~0.5E~323, 0.0) = ~0.5E~323 +/ (~0.5E~323, 0.0) = ~inf +nextAfter (~0.5E~323, 0.0) = ~0.0 +rem (~0.5E~323, 0.0) = nan +* (~0.5E~323, ~0.17976931348623157E309) = 0.8881784197001251E~15 ++ (~0.5E~323, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.5E~323, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.5E~323, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.5E~323, ~0.17976931348623157E309) = ~0.1E~322 +rem (~0.5E~323, ~0.17976931348623157E309) = ~0.5E~323 +* (~0.5E~323, ~0.8988465674311579E308) = 0.44408920985006257E~15 ++ (~0.5E~323, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.5E~323, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.5E~323, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.5E~323, ~0.8988465674311579E308) = ~0.1E~322 +rem (~0.5E~323, ~0.8988465674311579E308) = ~0.5E~323 +* (~0.5E~323, ~0.123E4) = 0.6077E~320 ++ (~0.5E~323, ~0.123E4) = ~0.123E4 +- (~0.5E~323, ~0.123E4) = 0.123E4 +/ (~0.5E~323, ~0.123E4) = 0.0 +nextAfter (~0.5E~323, ~0.123E4) = ~0.1E~322 +rem (~0.5E~323, ~0.123E4) = ~0.5E~323 +* (~0.5E~323, ~0.123E2) = 0.6E~322 ++ (~0.5E~323, ~0.123E2) = ~0.123E2 +- (~0.5E~323, ~0.123E2) = 0.123E2 +/ (~0.5E~323, ~0.123E2) = 0.0 +nextAfter (~0.5E~323, ~0.123E2) = ~0.1E~322 +rem (~0.5E~323, ~0.123E2) = ~0.5E~323 +* (~0.5E~323, ~0.3141592653589793E1) = 0.15E~322 ++ (~0.5E~323, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.5E~323, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.5E~323, ~0.3141592653589793E1) = 0.0 +nextAfter (~0.5E~323, ~0.3141592653589793E1) = ~0.1E~322 +rem (~0.5E~323, ~0.3141592653589793E1) = ~0.5E~323 +* (~0.5E~323, ~0.2718281828459045E1) = 0.15E~322 ++ (~0.5E~323, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.5E~323, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.5E~323, ~0.2718281828459045E1) = 0.0 +nextAfter (~0.5E~323, ~0.2718281828459045E1) = ~0.1E~322 +rem (~0.5E~323, ~0.2718281828459045E1) = ~0.5E~323 +* (~0.5E~323, ~0.123E1) = 0.5E~323 ++ (~0.5E~323, ~0.123E1) = ~0.123E1 +- (~0.5E~323, ~0.123E1) = 0.123E1 +/ (~0.5E~323, ~0.123E1) = 0.5E~323 +nextAfter (~0.5E~323, ~0.123E1) = ~0.1E~322 +rem (~0.5E~323, ~0.123E1) = ~0.5E~323 +* (~0.5E~323, ~0.123) = 0.0 ++ (~0.5E~323, ~0.123) = ~0.123 +- (~0.5E~323, ~0.123) = 0.123 +/ (~0.5E~323, ~0.123) = 0.4E~322 +nextAfter (~0.5E~323, ~0.123) = ~0.1E~322 +rem (~0.5E~323, ~0.123) = ~0.5E~323 +* (~0.5E~323, ~0.123E~2) = 0.0 ++ (~0.5E~323, ~0.123E~2) = ~0.123E~2 +- (~0.5E~323, ~0.123E~2) = 0.123E~2 +/ (~0.5E~323, ~0.123E~2) = 0.4017E~320 +nextAfter (~0.5E~323, ~0.123E~2) = ~0.1E~322 +rem (~0.5E~323, ~0.123E~2) = ~0.5E~323 +* (~0.5E~323, ~0.22250738585072014E~307) = 0.0 ++ (~0.5E~323, ~0.22250738585072014E~307) = ~0.2225073858507202E~307 +- (~0.5E~323, ~0.22250738585072014E~307) = 0.2225073858507201E~307 +/ (~0.5E~323, ~0.22250738585072014E~307) = 0.2220446049250313E~15 +nextAfter (~0.5E~323, ~0.22250738585072014E~307) = ~0.1E~322 +rem (~0.5E~323, ~0.22250738585072014E~307) = ~0.5E~323 +* (~0.5E~323, ~0.11125369292536007E~307) = 0.0 ++ (~0.5E~323, ~0.11125369292536007E~307) = ~0.1112536929253601E~307 +- (~0.5E~323, ~0.11125369292536007E~307) = 0.11125369292536E~307 +/ (~0.5E~323, ~0.11125369292536007E~307) = 0.4440892098500626E~15 +nextAfter (~0.5E~323, ~0.11125369292536007E~307) = ~0.1E~322 +rem (~0.5E~323, ~0.11125369292536007E~307) = ~0.5E~323 +* (~0.5E~323, ~0.5E~323) = 0.0 ++ (~0.5E~323, ~0.5E~323) = ~0.1E~322 +- (~0.5E~323, ~0.5E~323) = 0.0 +/ (~0.5E~323, ~0.5E~323) = 0.1E1 +nextAfter (~0.5E~323, ~0.5E~323) = ~0.5E~323 +rem (~0.5E~323, ~0.5E~323) = 0.0 +* (~0.5E~323, ~0.0) = 0.0 ++ (~0.5E~323, ~0.0) = ~0.5E~323 +- (~0.5E~323, ~0.0) = ~0.5E~323 +/ (~0.5E~323, ~0.0) = inf +nextAfter (~0.5E~323, ~0.0) = ~0.0 +rem (~0.5E~323, ~0.0) = nan +* (~0.5E~323, inf) = ~inf ++ (~0.5E~323, inf) = inf +- (~0.5E~323, inf) = ~inf +/ (~0.5E~323, inf) = ~0.0 +nextAfter (~0.5E~323, inf) = ~0.0 +rem (~0.5E~323, inf) = ~0.5E~323 +* (~0.5E~323, ~inf) = inf ++ (~0.5E~323, ~inf) = ~inf +- (~0.5E~323, ~inf) = inf +/ (~0.5E~323, ~inf) = 0.0 +nextAfter (~0.5E~323, ~inf) = ~0.1E~322 +rem (~0.5E~323, ~inf) = ~0.5E~323 +* (~0.5E~323, nan) = nan ++ (~0.5E~323, nan) = nan +- (~0.5E~323, nan) = nan +/ (~0.5E~323, nan) = nan +nextAfter (~0.5E~323, nan) = nan +rem (~0.5E~323, nan) = nan +* (~0.5E~323, inf) = ~inf ++ (~0.5E~323, inf) = inf +- (~0.5E~323, inf) = ~inf +/ (~0.5E~323, inf) = ~0.0 +nextAfter (~0.5E~323, inf) = ~0.0 +rem (~0.5E~323, inf) = ~0.5E~323 +* (~0.0, 0.17976931348623157E309) = ~0.0 ++ (~0.0, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.0, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.0, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.0, 0.17976931348623157E309) = 0.5E~323 +rem (~0.0, 0.17976931348623157E309) = 0.0 +* (~0.0, 0.8988465674311579E308) = ~0.0 ++ (~0.0, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.0, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.0, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.0, 0.8988465674311579E308) = 0.5E~323 +rem (~0.0, 0.8988465674311579E308) = 0.0 +* (~0.0, 0.123E4) = ~0.0 ++ (~0.0, 0.123E4) = 0.123E4 +- (~0.0, 0.123E4) = ~0.123E4 +/ (~0.0, 0.123E4) = ~0.0 +nextAfter (~0.0, 0.123E4) = 0.5E~323 +rem (~0.0, 0.123E4) = 0.0 +* (~0.0, 0.123E2) = ~0.0 ++ (~0.0, 0.123E2) = 0.123E2 +- (~0.0, 0.123E2) = ~0.123E2 +/ (~0.0, 0.123E2) = ~0.0 +nextAfter (~0.0, 0.123E2) = 0.5E~323 +rem (~0.0, 0.123E2) = 0.0 +* (~0.0, 0.3141592653589793E1) = ~0.0 ++ (~0.0, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.0, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.0, 0.3141592653589793E1) = ~0.0 +nextAfter (~0.0, 0.3141592653589793E1) = 0.5E~323 +rem (~0.0, 0.3141592653589793E1) = 0.0 +* (~0.0, 0.2718281828459045E1) = ~0.0 ++ (~0.0, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.0, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.0, 0.2718281828459045E1) = ~0.0 +nextAfter (~0.0, 0.2718281828459045E1) = 0.5E~323 +rem (~0.0, 0.2718281828459045E1) = 0.0 +* (~0.0, 0.123E1) = ~0.0 ++ (~0.0, 0.123E1) = 0.123E1 +- (~0.0, 0.123E1) = ~0.123E1 +/ (~0.0, 0.123E1) = ~0.0 +nextAfter (~0.0, 0.123E1) = 0.5E~323 +rem (~0.0, 0.123E1) = 0.0 +* (~0.0, 0.123) = ~0.0 ++ (~0.0, 0.123) = 0.123 +- (~0.0, 0.123) = ~0.123 +/ (~0.0, 0.123) = ~0.0 +nextAfter (~0.0, 0.123) = 0.5E~323 +rem (~0.0, 0.123) = 0.0 +* (~0.0, 0.123E~2) = ~0.0 ++ (~0.0, 0.123E~2) = 0.123E~2 +- (~0.0, 0.123E~2) = ~0.123E~2 +/ (~0.0, 0.123E~2) = ~0.0 +nextAfter (~0.0, 0.123E~2) = 0.5E~323 +rem (~0.0, 0.123E~2) = 0.0 +* (~0.0, 0.22250738585072014E~307) = ~0.0 ++ (~0.0, 0.22250738585072014E~307) = 0.22250738585072014E~307 +- (~0.0, 0.22250738585072014E~307) = ~0.22250738585072014E~307 +/ (~0.0, 0.22250738585072014E~307) = ~0.0 +nextAfter (~0.0, 0.22250738585072014E~307) = 0.5E~323 +rem (~0.0, 0.22250738585072014E~307) = 0.0 +* (~0.0, 0.11125369292536007E~307) = ~0.0 ++ (~0.0, 0.11125369292536007E~307) = 0.11125369292536007E~307 +- (~0.0, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (~0.0, 0.11125369292536007E~307) = ~0.0 +nextAfter (~0.0, 0.11125369292536007E~307) = 0.5E~323 +rem (~0.0, 0.11125369292536007E~307) = 0.0 +* (~0.0, 0.5E~323) = ~0.0 ++ (~0.0, 0.5E~323) = 0.5E~323 +- (~0.0, 0.5E~323) = ~0.5E~323 +/ (~0.0, 0.5E~323) = ~0.0 +nextAfter (~0.0, 0.5E~323) = 0.5E~323 +rem (~0.0, 0.5E~323) = 0.0 +* (~0.0, 0.0) = ~0.0 ++ (~0.0, 0.0) = 0.0 +- (~0.0, 0.0) = ~0.0 +/ (~0.0, 0.0) = nan +nextAfter (~0.0, 0.0) = 0.0 +rem (~0.0, 0.0) = 0.0 +* (~0.0, ~0.17976931348623157E309) = 0.0 ++ (~0.0, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.0, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.0, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.0, ~0.17976931348623157E309) = ~0.5E~323 +rem (~0.0, ~0.17976931348623157E309) = 0.0 +* (~0.0, ~0.8988465674311579E308) = 0.0 ++ (~0.0, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.0, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.0, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.0, ~0.8988465674311579E308) = ~0.5E~323 +rem (~0.0, ~0.8988465674311579E308) = 0.0 +* (~0.0, ~0.123E4) = 0.0 ++ (~0.0, ~0.123E4) = ~0.123E4 +- (~0.0, ~0.123E4) = 0.123E4 +/ (~0.0, ~0.123E4) = 0.0 +nextAfter (~0.0, ~0.123E4) = ~0.5E~323 +rem (~0.0, ~0.123E4) = 0.0 +* (~0.0, ~0.123E2) = 0.0 ++ (~0.0, ~0.123E2) = ~0.123E2 +- (~0.0, ~0.123E2) = 0.123E2 +/ (~0.0, ~0.123E2) = 0.0 +nextAfter (~0.0, ~0.123E2) = ~0.5E~323 +rem (~0.0, ~0.123E2) = 0.0 +* (~0.0, ~0.3141592653589793E1) = 0.0 ++ (~0.0, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.0, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.0, ~0.3141592653589793E1) = 0.0 +nextAfter (~0.0, ~0.3141592653589793E1) = ~0.5E~323 +rem (~0.0, ~0.3141592653589793E1) = 0.0 +* (~0.0, ~0.2718281828459045E1) = 0.0 ++ (~0.0, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.0, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.0, ~0.2718281828459045E1) = 0.0 +nextAfter (~0.0, ~0.2718281828459045E1) = ~0.5E~323 +rem (~0.0, ~0.2718281828459045E1) = 0.0 +* (~0.0, ~0.123E1) = 0.0 ++ (~0.0, ~0.123E1) = ~0.123E1 +- (~0.0, ~0.123E1) = 0.123E1 +/ (~0.0, ~0.123E1) = 0.0 +nextAfter (~0.0, ~0.123E1) = ~0.5E~323 +rem (~0.0, ~0.123E1) = 0.0 +* (~0.0, ~0.123) = 0.0 ++ (~0.0, ~0.123) = ~0.123 +- (~0.0, ~0.123) = 0.123 +/ (~0.0, ~0.123) = 0.0 +nextAfter (~0.0, ~0.123) = ~0.5E~323 +rem (~0.0, ~0.123) = 0.0 +* (~0.0, ~0.123E~2) = 0.0 ++ (~0.0, ~0.123E~2) = ~0.123E~2 +- (~0.0, ~0.123E~2) = 0.123E~2 +/ (~0.0, ~0.123E~2) = 0.0 +nextAfter (~0.0, ~0.123E~2) = ~0.5E~323 +rem (~0.0, ~0.123E~2) = 0.0 +* (~0.0, ~0.22250738585072014E~307) = 0.0 ++ (~0.0, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +- (~0.0, ~0.22250738585072014E~307) = 0.22250738585072014E~307 +/ (~0.0, ~0.22250738585072014E~307) = 0.0 +nextAfter (~0.0, ~0.22250738585072014E~307) = ~0.5E~323 +rem (~0.0, ~0.22250738585072014E~307) = 0.0 +* (~0.0, ~0.11125369292536007E~307) = 0.0 ++ (~0.0, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (~0.0, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (~0.0, ~0.11125369292536007E~307) = 0.0 +nextAfter (~0.0, ~0.11125369292536007E~307) = ~0.5E~323 +rem (~0.0, ~0.11125369292536007E~307) = 0.0 +* (~0.0, ~0.5E~323) = 0.0 ++ (~0.0, ~0.5E~323) = ~0.5E~323 +- (~0.0, ~0.5E~323) = 0.5E~323 +/ (~0.0, ~0.5E~323) = 0.0 +nextAfter (~0.0, ~0.5E~323) = ~0.5E~323 +rem (~0.0, ~0.5E~323) = 0.0 +* (~0.0, ~0.0) = 0.0 ++ (~0.0, ~0.0) = ~0.0 +- (~0.0, ~0.0) = 0.0 +/ (~0.0, ~0.0) = nan +nextAfter (~0.0, ~0.0) = ~0.0 +rem (~0.0, ~0.0) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.5E~323 +rem (~0.0, inf) = 0.0 +* (~0.0, ~inf) = nan ++ (~0.0, ~inf) = ~inf +- (~0.0, ~inf) = inf +/ (~0.0, ~inf) = 0.0 +nextAfter (~0.0, ~inf) = ~0.5E~323 +rem (~0.0, ~inf) = 0.0 +* (~0.0, nan) = nan ++ (~0.0, nan) = nan +- (~0.0, nan) = nan +/ (~0.0, nan) = nan +nextAfter (~0.0, nan) = nan +rem (~0.0, nan) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.5E~323 +rem (~0.0, inf) = 0.0 +* (inf, 0.17976931348623157E309) = inf ++ (inf, 0.17976931348623157E309) = inf +- (inf, 0.17976931348623157E309) = inf +/ (inf, 0.17976931348623157E309) = inf +nextAfter (inf, 0.17976931348623157E309) = inf +rem (inf, 0.17976931348623157E309) = nan +* (inf, 0.8988465674311579E308) = inf ++ (inf, 0.8988465674311579E308) = inf +- (inf, 0.8988465674311579E308) = inf +/ (inf, 0.8988465674311579E308) = inf +nextAfter (inf, 0.8988465674311579E308) = inf +rem (inf, 0.8988465674311579E308) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.3141592653589793E1) = inf ++ (inf, 0.3141592653589793E1) = inf +- (inf, 0.3141592653589793E1) = inf +/ (inf, 0.3141592653589793E1) = inf +nextAfter (inf, 0.3141592653589793E1) = inf +rem (inf, 0.3141592653589793E1) = nan +* (inf, 0.2718281828459045E1) = inf ++ (inf, 0.2718281828459045E1) = inf +- (inf, 0.2718281828459045E1) = inf +/ (inf, 0.2718281828459045E1) = inf +nextAfter (inf, 0.2718281828459045E1) = inf +rem (inf, 0.2718281828459045E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.22250738585072014E~307) = inf ++ (inf, 0.22250738585072014E~307) = inf +- (inf, 0.22250738585072014E~307) = inf +/ (inf, 0.22250738585072014E~307) = inf +nextAfter (inf, 0.22250738585072014E~307) = inf +rem (inf, 0.22250738585072014E~307) = nan +* (inf, 0.11125369292536007E~307) = inf ++ (inf, 0.11125369292536007E~307) = inf +- (inf, 0.11125369292536007E~307) = inf +/ (inf, 0.11125369292536007E~307) = inf +nextAfter (inf, 0.11125369292536007E~307) = inf +rem (inf, 0.11125369292536007E~307) = nan +* (inf, 0.5E~323) = inf ++ (inf, 0.5E~323) = inf +- (inf, 0.5E~323) = inf +/ (inf, 0.5E~323) = inf +nextAfter (inf, 0.5E~323) = inf +rem (inf, 0.5E~323) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.17976931348623157E309) = ~inf ++ (inf, ~0.17976931348623157E309) = inf +- (inf, ~0.17976931348623157E309) = inf +/ (inf, ~0.17976931348623157E309) = ~inf +nextAfter (inf, ~0.17976931348623157E309) = inf +rem (inf, ~0.17976931348623157E309) = nan +* (inf, ~0.8988465674311579E308) = ~inf ++ (inf, ~0.8988465674311579E308) = inf +- (inf, ~0.8988465674311579E308) = inf +/ (inf, ~0.8988465674311579E308) = ~inf +nextAfter (inf, ~0.8988465674311579E308) = inf +rem (inf, ~0.8988465674311579E308) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.3141592653589793E1) = ~inf ++ (inf, ~0.3141592653589793E1) = inf +- (inf, ~0.3141592653589793E1) = inf +/ (inf, ~0.3141592653589793E1) = ~inf +nextAfter (inf, ~0.3141592653589793E1) = inf +rem (inf, ~0.3141592653589793E1) = nan +* (inf, ~0.2718281828459045E1) = ~inf ++ (inf, ~0.2718281828459045E1) = inf +- (inf, ~0.2718281828459045E1) = inf +/ (inf, ~0.2718281828459045E1) = ~inf +nextAfter (inf, ~0.2718281828459045E1) = inf +rem (inf, ~0.2718281828459045E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.22250738585072014E~307) = ~inf ++ (inf, ~0.22250738585072014E~307) = inf +- (inf, ~0.22250738585072014E~307) = inf +/ (inf, ~0.22250738585072014E~307) = ~inf +nextAfter (inf, ~0.22250738585072014E~307) = inf +rem (inf, ~0.22250738585072014E~307) = nan +* (inf, ~0.11125369292536007E~307) = ~inf ++ (inf, ~0.11125369292536007E~307) = inf +- (inf, ~0.11125369292536007E~307) = inf +/ (inf, ~0.11125369292536007E~307) = ~inf +nextAfter (inf, ~0.11125369292536007E~307) = inf +rem (inf, ~0.11125369292536007E~307) = nan +* (inf, ~0.5E~323) = ~inf ++ (inf, ~0.5E~323) = inf +- (inf, ~0.5E~323) = inf +/ (inf, ~0.5E~323) = ~inf +nextAfter (inf, ~0.5E~323) = inf +rem (inf, ~0.5E~323) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (~inf, 0.17976931348623157E309) = ~inf ++ (~inf, 0.17976931348623157E309) = ~inf +- (~inf, 0.17976931348623157E309) = ~inf +/ (~inf, 0.17976931348623157E309) = ~inf +nextAfter (~inf, 0.17976931348623157E309) = ~inf +rem (~inf, 0.17976931348623157E309) = nan +* (~inf, 0.8988465674311579E308) = ~inf ++ (~inf, 0.8988465674311579E308) = ~inf +- (~inf, 0.8988465674311579E308) = ~inf +/ (~inf, 0.8988465674311579E308) = ~inf +nextAfter (~inf, 0.8988465674311579E308) = ~inf +rem (~inf, 0.8988465674311579E308) = nan +* (~inf, 0.123E4) = ~inf ++ (~inf, 0.123E4) = ~inf +- (~inf, 0.123E4) = ~inf +/ (~inf, 0.123E4) = ~inf +nextAfter (~inf, 0.123E4) = ~inf +rem (~inf, 0.123E4) = nan +* (~inf, 0.123E2) = ~inf ++ (~inf, 0.123E2) = ~inf +- (~inf, 0.123E2) = ~inf +/ (~inf, 0.123E2) = ~inf +nextAfter (~inf, 0.123E2) = ~inf +rem (~inf, 0.123E2) = nan +* (~inf, 0.3141592653589793E1) = ~inf ++ (~inf, 0.3141592653589793E1) = ~inf +- (~inf, 0.3141592653589793E1) = ~inf +/ (~inf, 0.3141592653589793E1) = ~inf +nextAfter (~inf, 0.3141592653589793E1) = ~inf +rem (~inf, 0.3141592653589793E1) = nan +* (~inf, 0.2718281828459045E1) = ~inf ++ (~inf, 0.2718281828459045E1) = ~inf +- (~inf, 0.2718281828459045E1) = ~inf +/ (~inf, 0.2718281828459045E1) = ~inf +nextAfter (~inf, 0.2718281828459045E1) = ~inf +rem (~inf, 0.2718281828459045E1) = nan +* (~inf, 0.123E1) = ~inf ++ (~inf, 0.123E1) = ~inf +- (~inf, 0.123E1) = ~inf +/ (~inf, 0.123E1) = ~inf +nextAfter (~inf, 0.123E1) = ~inf +rem (~inf, 0.123E1) = nan +* (~inf, 0.123) = ~inf ++ (~inf, 0.123) = ~inf +- (~inf, 0.123) = ~inf +/ (~inf, 0.123) = ~inf +nextAfter (~inf, 0.123) = ~inf +rem (~inf, 0.123) = nan +* (~inf, 0.123E~2) = ~inf ++ (~inf, 0.123E~2) = ~inf +- (~inf, 0.123E~2) = ~inf +/ (~inf, 0.123E~2) = ~inf +nextAfter (~inf, 0.123E~2) = ~inf +rem (~inf, 0.123E~2) = nan +* (~inf, 0.22250738585072014E~307) = ~inf ++ (~inf, 0.22250738585072014E~307) = ~inf +- (~inf, 0.22250738585072014E~307) = ~inf +/ (~inf, 0.22250738585072014E~307) = ~inf +nextAfter (~inf, 0.22250738585072014E~307) = ~inf +rem (~inf, 0.22250738585072014E~307) = nan +* (~inf, 0.11125369292536007E~307) = ~inf ++ (~inf, 0.11125369292536007E~307) = ~inf +- (~inf, 0.11125369292536007E~307) = ~inf +/ (~inf, 0.11125369292536007E~307) = ~inf +nextAfter (~inf, 0.11125369292536007E~307) = ~inf +rem (~inf, 0.11125369292536007E~307) = nan +* (~inf, 0.5E~323) = ~inf ++ (~inf, 0.5E~323) = ~inf +- (~inf, 0.5E~323) = ~inf +/ (~inf, 0.5E~323) = ~inf +nextAfter (~inf, 0.5E~323) = ~inf +rem (~inf, 0.5E~323) = nan +* (~inf, 0.0) = nan ++ (~inf, 0.0) = ~inf +- (~inf, 0.0) = ~inf +/ (~inf, 0.0) = ~inf +nextAfter (~inf, 0.0) = ~inf +rem (~inf, 0.0) = nan +* (~inf, ~0.17976931348623157E309) = inf ++ (~inf, ~0.17976931348623157E309) = ~inf +- (~inf, ~0.17976931348623157E309) = ~inf +/ (~inf, ~0.17976931348623157E309) = inf +nextAfter (~inf, ~0.17976931348623157E309) = ~inf +rem (~inf, ~0.17976931348623157E309) = nan +* (~inf, ~0.8988465674311579E308) = inf ++ (~inf, ~0.8988465674311579E308) = ~inf +- (~inf, ~0.8988465674311579E308) = ~inf +/ (~inf, ~0.8988465674311579E308) = inf +nextAfter (~inf, ~0.8988465674311579E308) = ~inf +rem (~inf, ~0.8988465674311579E308) = nan +* (~inf, ~0.123E4) = inf ++ (~inf, ~0.123E4) = ~inf +- (~inf, ~0.123E4) = ~inf +/ (~inf, ~0.123E4) = inf +nextAfter (~inf, ~0.123E4) = ~inf +rem (~inf, ~0.123E4) = nan +* (~inf, ~0.123E2) = inf ++ (~inf, ~0.123E2) = ~inf +- (~inf, ~0.123E2) = ~inf +/ (~inf, ~0.123E2) = inf +nextAfter (~inf, ~0.123E2) = ~inf +rem (~inf, ~0.123E2) = nan +* (~inf, ~0.3141592653589793E1) = inf ++ (~inf, ~0.3141592653589793E1) = ~inf +- (~inf, ~0.3141592653589793E1) = ~inf +/ (~inf, ~0.3141592653589793E1) = inf +nextAfter (~inf, ~0.3141592653589793E1) = ~inf +rem (~inf, ~0.3141592653589793E1) = nan +* (~inf, ~0.2718281828459045E1) = inf ++ (~inf, ~0.2718281828459045E1) = ~inf +- (~inf, ~0.2718281828459045E1) = ~inf +/ (~inf, ~0.2718281828459045E1) = inf +nextAfter (~inf, ~0.2718281828459045E1) = ~inf +rem (~inf, ~0.2718281828459045E1) = nan +* (~inf, ~0.123E1) = inf ++ (~inf, ~0.123E1) = ~inf +- (~inf, ~0.123E1) = ~inf +/ (~inf, ~0.123E1) = inf +nextAfter (~inf, ~0.123E1) = ~inf +rem (~inf, ~0.123E1) = nan +* (~inf, ~0.123) = inf ++ (~inf, ~0.123) = ~inf +- (~inf, ~0.123) = ~inf +/ (~inf, ~0.123) = inf +nextAfter (~inf, ~0.123) = ~inf +rem (~inf, ~0.123) = nan +* (~inf, ~0.123E~2) = inf ++ (~inf, ~0.123E~2) = ~inf +- (~inf, ~0.123E~2) = ~inf +/ (~inf, ~0.123E~2) = inf +nextAfter (~inf, ~0.123E~2) = ~inf +rem (~inf, ~0.123E~2) = nan +* (~inf, ~0.22250738585072014E~307) = inf ++ (~inf, ~0.22250738585072014E~307) = ~inf +- (~inf, ~0.22250738585072014E~307) = ~inf +/ (~inf, ~0.22250738585072014E~307) = inf +nextAfter (~inf, ~0.22250738585072014E~307) = ~inf +rem (~inf, ~0.22250738585072014E~307) = nan +* (~inf, ~0.11125369292536007E~307) = inf ++ (~inf, ~0.11125369292536007E~307) = ~inf +- (~inf, ~0.11125369292536007E~307) = ~inf +/ (~inf, ~0.11125369292536007E~307) = inf +nextAfter (~inf, ~0.11125369292536007E~307) = ~inf +rem (~inf, ~0.11125369292536007E~307) = nan +* (~inf, ~0.5E~323) = inf ++ (~inf, ~0.5E~323) = ~inf +- (~inf, ~0.5E~323) = ~inf +/ (~inf, ~0.5E~323) = inf +nextAfter (~inf, ~0.5E~323) = ~inf +rem (~inf, ~0.5E~323) = nan +* (~inf, ~0.0) = nan ++ (~inf, ~0.0) = ~inf +- (~inf, ~0.0) = ~inf +/ (~inf, ~0.0) = inf +nextAfter (~inf, ~0.0) = ~inf +rem (~inf, ~0.0) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (~inf, ~inf) = inf ++ (~inf, ~inf) = ~inf +- (~inf, ~inf) = nan +/ (~inf, ~inf) = nan +nextAfter (~inf, ~inf) = ~inf +rem (~inf, ~inf) = nan +* (~inf, nan) = nan ++ (~inf, nan) = nan +- (~inf, nan) = nan +/ (~inf, nan) = nan +nextAfter (~inf, nan) = nan +rem (~inf, nan) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (nan, 0.17976931348623157E309) = nan ++ (nan, 0.17976931348623157E309) = nan +- (nan, 0.17976931348623157E309) = nan +/ (nan, 0.17976931348623157E309) = nan +nextAfter (nan, 0.17976931348623157E309) = nan +rem (nan, 0.17976931348623157E309) = nan +* (nan, 0.8988465674311579E308) = nan ++ (nan, 0.8988465674311579E308) = nan +- (nan, 0.8988465674311579E308) = nan +/ (nan, 0.8988465674311579E308) = nan +nextAfter (nan, 0.8988465674311579E308) = nan +rem (nan, 0.8988465674311579E308) = nan +* (nan, 0.123E4) = nan ++ (nan, 0.123E4) = nan +- (nan, 0.123E4) = nan +/ (nan, 0.123E4) = nan +nextAfter (nan, 0.123E4) = nan +rem (nan, 0.123E4) = nan +* (nan, 0.123E2) = nan ++ (nan, 0.123E2) = nan +- (nan, 0.123E2) = nan +/ (nan, 0.123E2) = nan +nextAfter (nan, 0.123E2) = nan +rem (nan, 0.123E2) = nan +* (nan, 0.3141592653589793E1) = nan ++ (nan, 0.3141592653589793E1) = nan +- (nan, 0.3141592653589793E1) = nan +/ (nan, 0.3141592653589793E1) = nan +nextAfter (nan, 0.3141592653589793E1) = nan +rem (nan, 0.3141592653589793E1) = nan +* (nan, 0.2718281828459045E1) = nan ++ (nan, 0.2718281828459045E1) = nan +- (nan, 0.2718281828459045E1) = nan +/ (nan, 0.2718281828459045E1) = nan +nextAfter (nan, 0.2718281828459045E1) = nan +rem (nan, 0.2718281828459045E1) = nan +* (nan, 0.123E1) = nan ++ (nan, 0.123E1) = nan +- (nan, 0.123E1) = nan +/ (nan, 0.123E1) = nan +nextAfter (nan, 0.123E1) = nan +rem (nan, 0.123E1) = nan +* (nan, 0.123) = nan ++ (nan, 0.123) = nan +- (nan, 0.123) = nan +/ (nan, 0.123) = nan +nextAfter (nan, 0.123) = nan +rem (nan, 0.123) = nan +* (nan, 0.123E~2) = nan ++ (nan, 0.123E~2) = nan +- (nan, 0.123E~2) = nan +/ (nan, 0.123E~2) = nan +nextAfter (nan, 0.123E~2) = nan +rem (nan, 0.123E~2) = nan +* (nan, 0.22250738585072014E~307) = nan ++ (nan, 0.22250738585072014E~307) = nan +- (nan, 0.22250738585072014E~307) = nan +/ (nan, 0.22250738585072014E~307) = nan +nextAfter (nan, 0.22250738585072014E~307) = nan +rem (nan, 0.22250738585072014E~307) = nan +* (nan, 0.11125369292536007E~307) = nan ++ (nan, 0.11125369292536007E~307) = nan +- (nan, 0.11125369292536007E~307) = nan +/ (nan, 0.11125369292536007E~307) = nan +nextAfter (nan, 0.11125369292536007E~307) = nan +rem (nan, 0.11125369292536007E~307) = nan +* (nan, 0.5E~323) = nan ++ (nan, 0.5E~323) = nan +- (nan, 0.5E~323) = nan +/ (nan, 0.5E~323) = nan +nextAfter (nan, 0.5E~323) = nan +rem (nan, 0.5E~323) = nan +* (nan, 0.0) = nan ++ (nan, 0.0) = nan +- (nan, 0.0) = nan +/ (nan, 0.0) = nan +nextAfter (nan, 0.0) = nan +rem (nan, 0.0) = nan +* (nan, ~0.17976931348623157E309) = nan ++ (nan, ~0.17976931348623157E309) = nan +- (nan, ~0.17976931348623157E309) = nan +/ (nan, ~0.17976931348623157E309) = nan +nextAfter (nan, ~0.17976931348623157E309) = nan +rem (nan, ~0.17976931348623157E309) = nan +* (nan, ~0.8988465674311579E308) = nan ++ (nan, ~0.8988465674311579E308) = nan +- (nan, ~0.8988465674311579E308) = nan +/ (nan, ~0.8988465674311579E308) = nan +nextAfter (nan, ~0.8988465674311579E308) = nan +rem (nan, ~0.8988465674311579E308) = nan +* (nan, ~0.123E4) = nan ++ (nan, ~0.123E4) = nan +- (nan, ~0.123E4) = nan +/ (nan, ~0.123E4) = nan +nextAfter (nan, ~0.123E4) = nan +rem (nan, ~0.123E4) = nan +* (nan, ~0.123E2) = nan ++ (nan, ~0.123E2) = nan +- (nan, ~0.123E2) = nan +/ (nan, ~0.123E2) = nan +nextAfter (nan, ~0.123E2) = nan +rem (nan, ~0.123E2) = nan +* (nan, ~0.3141592653589793E1) = nan ++ (nan, ~0.3141592653589793E1) = nan +- (nan, ~0.3141592653589793E1) = nan +/ (nan, ~0.3141592653589793E1) = nan +nextAfter (nan, ~0.3141592653589793E1) = nan +rem (nan, ~0.3141592653589793E1) = nan +* (nan, ~0.2718281828459045E1) = nan ++ (nan, ~0.2718281828459045E1) = nan +- (nan, ~0.2718281828459045E1) = nan +/ (nan, ~0.2718281828459045E1) = nan +nextAfter (nan, ~0.2718281828459045E1) = nan +rem (nan, ~0.2718281828459045E1) = nan +* (nan, ~0.123E1) = nan ++ (nan, ~0.123E1) = nan +- (nan, ~0.123E1) = nan +/ (nan, ~0.123E1) = nan +nextAfter (nan, ~0.123E1) = nan +rem (nan, ~0.123E1) = nan +* (nan, ~0.123) = nan ++ (nan, ~0.123) = nan +- (nan, ~0.123) = nan +/ (nan, ~0.123) = nan +nextAfter (nan, ~0.123) = nan +rem (nan, ~0.123) = nan +* (nan, ~0.123E~2) = nan ++ (nan, ~0.123E~2) = nan +- (nan, ~0.123E~2) = nan +/ (nan, ~0.123E~2) = nan +nextAfter (nan, ~0.123E~2) = nan +rem (nan, ~0.123E~2) = nan +* (nan, ~0.22250738585072014E~307) = nan ++ (nan, ~0.22250738585072014E~307) = nan +- (nan, ~0.22250738585072014E~307) = nan +/ (nan, ~0.22250738585072014E~307) = nan +nextAfter (nan, ~0.22250738585072014E~307) = nan +rem (nan, ~0.22250738585072014E~307) = nan +* (nan, ~0.11125369292536007E~307) = nan ++ (nan, ~0.11125369292536007E~307) = nan +- (nan, ~0.11125369292536007E~307) = nan +/ (nan, ~0.11125369292536007E~307) = nan +nextAfter (nan, ~0.11125369292536007E~307) = nan +rem (nan, ~0.11125369292536007E~307) = nan +* (nan, ~0.5E~323) = nan ++ (nan, ~0.5E~323) = nan +- (nan, ~0.5E~323) = nan +/ (nan, ~0.5E~323) = nan +nextAfter (nan, ~0.5E~323) = nan +rem (nan, ~0.5E~323) = nan +* (nan, ~0.0) = nan ++ (nan, ~0.0) = nan +- (nan, ~0.0) = nan +/ (nan, ~0.0) = nan +nextAfter (nan, ~0.0) = nan +rem (nan, ~0.0) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (nan, ~inf) = nan ++ (nan, ~inf) = nan +- (nan, ~inf) = nan +/ (nan, ~inf) = nan +nextAfter (nan, ~inf) = nan +rem (nan, ~inf) = nan +* (nan, nan) = nan ++ (nan, nan) = nan +- (nan, nan) = nan +/ (nan, nan) = nan +nextAfter (nan, nan) = nan +rem (nan, nan) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (inf, 0.17976931348623157E309) = inf ++ (inf, 0.17976931348623157E309) = inf +- (inf, 0.17976931348623157E309) = inf +/ (inf, 0.17976931348623157E309) = inf +nextAfter (inf, 0.17976931348623157E309) = inf +rem (inf, 0.17976931348623157E309) = nan +* (inf, 0.8988465674311579E308) = inf ++ (inf, 0.8988465674311579E308) = inf +- (inf, 0.8988465674311579E308) = inf +/ (inf, 0.8988465674311579E308) = inf +nextAfter (inf, 0.8988465674311579E308) = inf +rem (inf, 0.8988465674311579E308) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.3141592653589793E1) = inf ++ (inf, 0.3141592653589793E1) = inf +- (inf, 0.3141592653589793E1) = inf +/ (inf, 0.3141592653589793E1) = inf +nextAfter (inf, 0.3141592653589793E1) = inf +rem (inf, 0.3141592653589793E1) = nan +* (inf, 0.2718281828459045E1) = inf ++ (inf, 0.2718281828459045E1) = inf +- (inf, 0.2718281828459045E1) = inf +/ (inf, 0.2718281828459045E1) = inf +nextAfter (inf, 0.2718281828459045E1) = inf +rem (inf, 0.2718281828459045E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.22250738585072014E~307) = inf ++ (inf, 0.22250738585072014E~307) = inf +- (inf, 0.22250738585072014E~307) = inf +/ (inf, 0.22250738585072014E~307) = inf +nextAfter (inf, 0.22250738585072014E~307) = inf +rem (inf, 0.22250738585072014E~307) = nan +* (inf, 0.11125369292536007E~307) = inf ++ (inf, 0.11125369292536007E~307) = inf +- (inf, 0.11125369292536007E~307) = inf +/ (inf, 0.11125369292536007E~307) = inf +nextAfter (inf, 0.11125369292536007E~307) = inf +rem (inf, 0.11125369292536007E~307) = nan +* (inf, 0.5E~323) = inf ++ (inf, 0.5E~323) = inf +- (inf, 0.5E~323) = inf +/ (inf, 0.5E~323) = inf +nextAfter (inf, 0.5E~323) = inf +rem (inf, 0.5E~323) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.17976931348623157E309) = ~inf ++ (inf, ~0.17976931348623157E309) = inf +- (inf, ~0.17976931348623157E309) = inf +/ (inf, ~0.17976931348623157E309) = ~inf +nextAfter (inf, ~0.17976931348623157E309) = inf +rem (inf, ~0.17976931348623157E309) = nan +* (inf, ~0.8988465674311579E308) = ~inf ++ (inf, ~0.8988465674311579E308) = inf +- (inf, ~0.8988465674311579E308) = inf +/ (inf, ~0.8988465674311579E308) = ~inf +nextAfter (inf, ~0.8988465674311579E308) = inf +rem (inf, ~0.8988465674311579E308) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.3141592653589793E1) = ~inf ++ (inf, ~0.3141592653589793E1) = inf +- (inf, ~0.3141592653589793E1) = inf +/ (inf, ~0.3141592653589793E1) = ~inf +nextAfter (inf, ~0.3141592653589793E1) = inf +rem (inf, ~0.3141592653589793E1) = nan +* (inf, ~0.2718281828459045E1) = ~inf ++ (inf, ~0.2718281828459045E1) = inf +- (inf, ~0.2718281828459045E1) = inf +/ (inf, ~0.2718281828459045E1) = ~inf +nextAfter (inf, ~0.2718281828459045E1) = inf +rem (inf, ~0.2718281828459045E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.22250738585072014E~307) = ~inf ++ (inf, ~0.22250738585072014E~307) = inf +- (inf, ~0.22250738585072014E~307) = inf +/ (inf, ~0.22250738585072014E~307) = ~inf +nextAfter (inf, ~0.22250738585072014E~307) = inf +rem (inf, ~0.22250738585072014E~307) = nan +* (inf, ~0.11125369292536007E~307) = ~inf ++ (inf, ~0.11125369292536007E~307) = inf +- (inf, ~0.11125369292536007E~307) = inf +/ (inf, ~0.11125369292536007E~307) = ~inf +nextAfter (inf, ~0.11125369292536007E~307) = inf +rem (inf, ~0.11125369292536007E~307) = nan +* (inf, ~0.5E~323) = ~inf ++ (inf, ~0.5E~323) = inf +- (inf, ~0.5E~323) = inf +/ (inf, ~0.5E~323) = ~inf +nextAfter (inf, ~0.5E~323) = inf +rem (inf, ~0.5E~323) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan + +Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh,atan2,pow} +acos (0.17976931348623157E309) = nan +asin (0.17976931348623157E309) = nan +atan (0.17976931348623157E309) = 1.570796327 +cos (0.17976931348623157E309) = ~0.9999876894 +cosh (0.17976931348623157E309) = inf +exp (0.17976931348623157E309) = inf +ln (0.17976931348623157E309) = 709.7827129 +log10 (0.17976931348623157E309) = 308.2547156 +sin (0.17976931348623157E309) = 0.004961954789 +sinh (0.17976931348623157E309) = inf +sqrt (0.17976931348623157E309) = 1.340780793E154 +tan (0.17976931348623157E309) = ~0.004962015874 +tanh (0.17976931348623157E309) = 1 +acos (0.8988465674311579E308) = nan +asin (0.8988465674311579E308) = nan +atan (0.8988465674311579E308) = 1.570796327 +cos (0.8988465674311579E308) = 0.00248098503 +cosh (0.8988465674311579E308) = inf +exp (0.8988465674311579E308) = inf +ln (0.8988465674311579E308) = 709.0895657 +log10 (0.8988465674311579E308) = 307.9536856 +sin (0.8988465674311579E308) = 0.9999969224 +sinh (0.8988465674311579E308) = inf +sqrt (0.8988465674311579E308) = 9.480751908E153 +tan (0.8988465674311579E308) = 403.0644725 +tanh (0.8988465674311579E308) = 1 +acos (0.123E4) = nan +asin (0.123E4) = nan +atan (0.123E4) = 1.569983319 +cos (0.123E4) = 0.06642716993 +cosh (0.123E4) = inf +exp (0.123E4) = inf +ln (0.123E4) = 7.114769448 +log10 (0.123E4) = 3.089905111 +sin (0.123E4) = ~0.9977912763 +sinh (0.123E4) = inf +sqrt (0.123E4) = 35.07135583 +tan (0.123E4) = ~15.02083074 +tanh (0.123E4) = 1 +acos (0.123E2) = nan +asin (0.123E2) = nan +atan (0.123E2) = 1.489673935 +cos (0.123E2) = 0.9647326179 +cosh (0.123E2) = 109847.9943 +exp (0.123E2) = 219695.9887 +ln (0.123E2) = 2.509599262 +log10 (0.123E2) = 1.089905111 +sin (0.123E2) = ~0.2632317914 +sinh (0.123E2) = 109847.9943 +sqrt (0.123E2) = 3.507135583 +tan (0.123E2) = ~0.272854661 +tanh (0.123E2) = 1 +acos (0.3141592653589793E1) = nan +asin (0.3141592653589793E1) = nan +atan (0.3141592653589793E1) = 1.262627256 +cos (0.3141592653589793E1) = ~1 +cosh (0.3141592653589793E1) = 11.59195328 +exp (0.3141592653589793E1) = 23.14069263 +ln (0.3141592653589793E1) = 1.144729886 +log10 (0.3141592653589793E1) = 0.4971498727 +sin (0.3141592653589793E1) = 1.224646799E~16 +sinh (0.3141592653589793E1) = 11.54873936 +sqrt (0.3141592653589793E1) = 1.772453851 +tan (0.3141592653589793E1) = ~1.224646799E~16 +tanh (0.3141592653589793E1) = 0.9962720762 +acos (0.2718281828459045E1) = nan +asin (0.2718281828459045E1) = nan +atan (0.2718281828459045E1) = 1.218282905 +cos (0.2718281828459045E1) = ~0.9117339148 +cosh (0.2718281828459045E1) = 7.610125139 +exp (0.2718281828459045E1) = 15.15426224 +ln (0.2718281828459045E1) = 1 +log10 (0.2718281828459045E1) = 0.4342944819 +sin (0.2718281828459045E1) = 0.4107812905 +sinh (0.2718281828459045E1) = 7.544137103 +sqrt (0.2718281828459045E1) = 1.648721271 +tan (0.2718281828459045E1) = ~0.4505495341 +tanh (0.2718281828459045E1) = 0.9913289158 +acos (0.123E1) = nan +asin (0.123E1) = nan +atan (0.123E1) = 0.8881737744 +cos (0.123E1) = 0.3342377271 +cosh (0.123E1) = 1.856761057 +exp (0.123E1) = 3.421229536 +ln (0.123E1) = 0.2070141694 +log10 (0.123E1) = 0.08990511144 +sin (0.123E1) = 0.9424888019 +sinh (0.123E1) = 1.564468479 +sqrt (0.123E1) = 1.109053651 +tan (0.123E1) = 2.819815734 +tanh (0.123E1) = 0.8425793257 +acos (0.123) = 1.447484052 +asin (0.123) = 0.1233122752 +atan (0.123) = 0.1223852815 +cos (0.123) = 0.9924450321 +cosh (0.123) = 1.007574042 +exp (0.123) = 1.130884421 +ln (0.123) = ~2.095570924 +log10 (0.123) = ~0.9100948886 +sin (0.123) = 0.12269009 +sinh (0.123) = 0.1233103792 +sqrt (0.123) = 0.3507135583 +tan (0.123) = 0.1236240659 +tanh (0.123) = 0.1223834419 +acos (0.123E~2) = 1.569566326 +asin (0.123E~2) = 0.00123000031 +atan (0.123E~2) = 0.00122999938 +cos (0.123E~2) = 0.9999992436 +cosh (0.123E~2) = 1.000000756 +exp (0.123E~2) = 1.001230757 +ln (0.123E~2) = ~6.70074111 +log10 (0.123E~2) = ~2.910094889 +sin (0.123E~2) = 0.00122999969 +sinh (0.123E~2) = 0.00123000031 +sqrt (0.123E~2) = 0.03507135583 +tan (0.123E~2) = 0.00123000062 +tanh (0.123E~2) = 0.00122999938 +acos (0.22250738585072014E~307) = 1.570796327 +asin (0.22250738585072014E~307) = 2.225073859E~308 +atan (0.22250738585072014E~307) = 2.225073859E~308 +cos (0.22250738585072014E~307) = 1 +cosh (0.22250738585072014E~307) = 1 +exp (0.22250738585072014E~307) = 1 +ln (0.22250738585072014E~307) = ~708.3964185 +log10 (0.22250738585072014E~307) = ~307.6526556 +sin (0.22250738585072014E~307) = 2.225073859E~308 +sinh (0.22250738585072014E~307) = 2.225073859E~308 +sqrt (0.22250738585072014E~307) = 1.491668146E~154 +tan (0.22250738585072014E~307) = 2.225073859E~308 +tanh (0.22250738585072014E~307) = 2.225073859E~308 +acos (0.11125369292536007E~307) = 1.570796327 +asin (0.11125369292536007E~307) = 1.112536929E~308 +atan (0.11125369292536007E~307) = 1.112536929E~308 +cos (0.11125369292536007E~307) = 1 +cosh (0.11125369292536007E~307) = 1 +exp (0.11125369292536007E~307) = 1 +ln (0.11125369292536007E~307) = ~709.0895657 +log10 (0.11125369292536007E~307) = ~307.9536856 +sin (0.11125369292536007E~307) = 1.112536929E~308 +sinh (0.11125369292536007E~307) = 1.112536929E~308 +sqrt (0.11125369292536007E~307) = 1.054768661E~154 +tan (0.11125369292536007E~307) = 1.112536929E~308 +tanh (0.11125369292536007E~307) = 1.112536929E~308 +acos (0.5E~323) = 1.570796327 +asin (0.5E~323) = 4.940656458E~324 +atan (0.5E~323) = 4.940656458E~324 +cos (0.5E~323) = 1 +cosh (0.5E~323) = 1 +exp (0.5E~323) = 1 +ln (0.5E~323) = ~744.4400719 +log10 (0.5E~323) = ~323.3062153 +sin (0.5E~323) = 4.940656458E~324 +sinh (0.5E~323) = 4.940656458E~324 +sqrt (0.5E~323) = 2.222758749E~162 +tan (0.5E~323) = 4.940656458E~324 +tanh (0.5E~323) = 4.940656458E~324 +acos (0.0) = 1.570796327 +asin (0.0) = 0 +atan (0.0) = 0 +cos (0.0) = 1 +cosh (0.0) = 1 +exp (0.0) = 1 +ln (0.0) = ~inf +log10 (0.0) = ~inf +sin (0.0) = 0 +sinh (0.0) = 0 +sqrt (0.0) = 0 +tan (0.0) = 0 +tanh (0.0) = 0 +acos (~0.17976931348623157E309) = nan +asin (~0.17976931348623157E309) = nan +atan (~0.17976931348623157E309) = ~1.570796327 +cos (~0.17976931348623157E309) = ~0.9999876894 +cosh (~0.17976931348623157E309) = inf +exp (~0.17976931348623157E309) = 0 +ln (~0.17976931348623157E309) = nan +log10 (~0.17976931348623157E309) = nan +sin (~0.17976931348623157E309) = ~0.004961954789 +sinh (~0.17976931348623157E309) = ~inf +sqrt (~0.17976931348623157E309) = nan +tan (~0.17976931348623157E309) = 0.004962015874 +tanh (~0.17976931348623157E309) = ~1 +acos (~0.8988465674311579E308) = nan +asin (~0.8988465674311579E308) = nan +atan (~0.8988465674311579E308) = ~1.570796327 +cos (~0.8988465674311579E308) = 0.00248098503 +cosh (~0.8988465674311579E308) = inf +exp (~0.8988465674311579E308) = 0 +ln (~0.8988465674311579E308) = nan +log10 (~0.8988465674311579E308) = nan +sin (~0.8988465674311579E308) = ~0.9999969224 +sinh (~0.8988465674311579E308) = ~inf +sqrt (~0.8988465674311579E308) = nan +tan (~0.8988465674311579E308) = ~403.0644725 +tanh (~0.8988465674311579E308) = ~1 +acos (~0.123E4) = nan +asin (~0.123E4) = nan +atan (~0.123E4) = ~1.569983319 +cos (~0.123E4) = 0.06642716993 +cosh (~0.123E4) = inf +exp (~0.123E4) = 0 +ln (~0.123E4) = nan +log10 (~0.123E4) = nan +sin (~0.123E4) = 0.9977912763 +sinh (~0.123E4) = ~inf +sqrt (~0.123E4) = nan +tan (~0.123E4) = 15.02083074 +tanh (~0.123E4) = ~1 +acos (~0.123E2) = nan +asin (~0.123E2) = nan +atan (~0.123E2) = ~1.489673935 +cos (~0.123E2) = 0.9647326179 +cosh (~0.123E2) = 109847.9943 +exp (~0.123E2) = 4.551744463E~6 +ln (~0.123E2) = nan +log10 (~0.123E2) = nan +sin (~0.123E2) = 0.2632317914 +sinh (~0.123E2) = ~109847.9943 +sqrt (~0.123E2) = nan +tan (~0.123E2) = 0.272854661 +tanh (~0.123E2) = ~1 +acos (~0.3141592653589793E1) = nan +asin (~0.3141592653589793E1) = nan +atan (~0.3141592653589793E1) = ~1.262627256 +cos (~0.3141592653589793E1) = ~1 +cosh (~0.3141592653589793E1) = 11.59195328 +exp (~0.3141592653589793E1) = 0.04321391826 +ln (~0.3141592653589793E1) = nan +log10 (~0.3141592653589793E1) = nan +sin (~0.3141592653589793E1) = ~1.224646799E~16 +sinh (~0.3141592653589793E1) = ~11.54873936 +sqrt (~0.3141592653589793E1) = nan +tan (~0.3141592653589793E1) = 1.224646799E~16 +tanh (~0.3141592653589793E1) = ~0.9962720762 +acos (~0.2718281828459045E1) = nan +asin (~0.2718281828459045E1) = nan +atan (~0.2718281828459045E1) = ~1.218282905 +cos (~0.2718281828459045E1) = ~0.9117339148 +cosh (~0.2718281828459045E1) = 7.610125139 +exp (~0.2718281828459045E1) = 0.06598803585 +ln (~0.2718281828459045E1) = nan +log10 (~0.2718281828459045E1) = nan +sin (~0.2718281828459045E1) = ~0.4107812905 +sinh (~0.2718281828459045E1) = ~7.544137103 +sqrt (~0.2718281828459045E1) = nan +tan (~0.2718281828459045E1) = 0.4505495341 +tanh (~0.2718281828459045E1) = ~0.9913289158 +acos (~0.123E1) = nan +asin (~0.123E1) = nan +atan (~0.123E1) = ~0.8881737744 +cos (~0.123E1) = 0.3342377271 +cosh (~0.123E1) = 1.856761057 +exp (~0.123E1) = 0.2922925777 +ln (~0.123E1) = nan +log10 (~0.123E1) = nan +sin (~0.123E1) = ~0.9424888019 +sinh (~0.123E1) = ~1.564468479 +sqrt (~0.123E1) = nan +tan (~0.123E1) = ~2.819815734 +tanh (~0.123E1) = ~0.8425793257 +acos (~0.123) = 1.694108602 +asin (~0.123) = ~0.1233122752 +atan (~0.123) = ~0.1223852815 +cos (~0.123) = 0.9924450321 +cosh (~0.123) = 1.007574042 +exp (~0.123) = 0.8842636626 +ln (~0.123) = nan +log10 (~0.123) = nan +sin (~0.123) = ~0.12269009 +sinh (~0.123) = ~0.1233103792 +sqrt (~0.123) = nan +tan (~0.123) = ~0.1236240659 +tanh (~0.123) = ~0.1223834419 +acos (~0.123E~2) = 1.572026327 +asin (~0.123E~2) = ~0.00123000031 +atan (~0.123E~2) = ~0.00122999938 +cos (~0.123E~2) = 0.9999992436 +cosh (~0.123E~2) = 1.000000756 +exp (~0.123E~2) = 0.9987707561 +ln (~0.123E~2) = nan +log10 (~0.123E~2) = nan +sin (~0.123E~2) = ~0.00122999969 +sinh (~0.123E~2) = ~0.00123000031 +sqrt (~0.123E~2) = nan +tan (~0.123E~2) = ~0.00123000062 +tanh (~0.123E~2) = ~0.00122999938 +acos (~0.22250738585072014E~307) = 1.570796327 +asin (~0.22250738585072014E~307) = ~2.225073859E~308 +atan (~0.22250738585072014E~307) = ~2.225073859E~308 +cos (~0.22250738585072014E~307) = 1 +cosh (~0.22250738585072014E~307) = 1 +exp (~0.22250738585072014E~307) = 1 +ln (~0.22250738585072014E~307) = nan +log10 (~0.22250738585072014E~307) = nan +sin (~0.22250738585072014E~307) = ~2.225073859E~308 +sinh (~0.22250738585072014E~307) = ~2.225073859E~308 +sqrt (~0.22250738585072014E~307) = nan +tan (~0.22250738585072014E~307) = ~2.225073859E~308 +tanh (~0.22250738585072014E~307) = ~2.225073859E~308 +acos (~0.11125369292536007E~307) = 1.570796327 +asin (~0.11125369292536007E~307) = ~1.112536929E~308 +atan (~0.11125369292536007E~307) = ~1.112536929E~308 +cos (~0.11125369292536007E~307) = 1 +cosh (~0.11125369292536007E~307) = 1 +exp (~0.11125369292536007E~307) = 1 +ln (~0.11125369292536007E~307) = nan +log10 (~0.11125369292536007E~307) = nan +sin (~0.11125369292536007E~307) = ~1.112536929E~308 +sinh (~0.11125369292536007E~307) = ~1.112536929E~308 +sqrt (~0.11125369292536007E~307) = nan +tan (~0.11125369292536007E~307) = ~1.112536929E~308 +tanh (~0.11125369292536007E~307) = ~1.112536929E~308 +acos (~0.5E~323) = 1.570796327 +asin (~0.5E~323) = ~4.940656458E~324 +atan (~0.5E~323) = ~4.940656458E~324 +cos (~0.5E~323) = 1 +cosh (~0.5E~323) = 1 +exp (~0.5E~323) = 1 +ln (~0.5E~323) = nan +log10 (~0.5E~323) = nan +sin (~0.5E~323) = ~4.940656458E~324 +sinh (~0.5E~323) = ~4.940656458E~324 +sqrt (~0.5E~323) = nan +tan (~0.5E~323) = ~4.940656458E~324 +tanh (~0.5E~323) = ~4.940656458E~324 +acos (~0.0) = 1.570796327 +asin (~0.0) = 0 +atan (~0.0) = 0 +cos (~0.0) = 1 +cosh (~0.0) = 1 +exp (~0.0) = 1 +ln (~0.0) = ~inf +log10 (~0.0) = ~inf +sin (~0.0) = 0 +sinh (~0.0) = 0 +sqrt (~0.0) = 0 +tan (~0.0) = 0 +tanh (~0.0) = 0 +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796327 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +acos (~inf) = nan +asin (~inf) = nan +atan (~inf) = ~1.570796327 +cos (~inf) = nan +cosh (~inf) = ~inf +exp (~inf) = 0 +ln (~inf) = nan +log10 (~inf) = nan +sin (~inf) = nan +sinh (~inf) = ~inf +sqrt (~inf) = nan +tan (~inf) = nan +tanh (~inf) = ~1 +acos (nan) = nan +asin (nan) = nan +atan (nan) = nan +cos (nan) = nan +cosh (nan) = nan +exp (nan) = nan +ln (nan) = nan +log10 (nan) = nan +sin (nan) = nan +sinh (nan) = nan +sqrt (nan) = nan +tan (nan) = nan +tanh (nan) = nan +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796327 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +atan2 (0.17976931348623157E309, 0.17976931348623157E309) = 0.7853981634 +pow (0.17976931348623157E309, 0.17976931348623157E309) = inf +atan2 (0.17976931348623157E309, 0.8988465674311579E308) = 1.107148718 +pow (0.17976931348623157E309, 0.8988465674311579E308) = inf +atan2 (0.17976931348623157E309, 0.123E4) = 1.570796327 +pow (0.17976931348623157E309, 0.123E4) = inf +atan2 (0.17976931348623157E309, 0.123E2) = 1.570796327 +pow (0.17976931348623157E309, 0.123E2) = inf +atan2 (0.17976931348623157E309, 0.3141592653589793E1) = 1.570796327 +pow (0.17976931348623157E309, 0.3141592653589793E1) = inf +atan2 (0.17976931348623157E309, 0.2718281828459045E1) = 1.570796327 +pow (0.17976931348623157E309, 0.2718281828459045E1) = inf +atan2 (0.17976931348623157E309, 0.123E1) = 1.570796327 +pow (0.17976931348623157E309, 0.123E1) = inf +atan2 (0.17976931348623157E309, 0.123) = 1.570796327 +pow (0.17976931348623157E309, 0.123) = 8.228676973E37 +atan2 (0.17976931348623157E309, 0.123E~2) = 1.570796327 +pow (0.17976931348623157E309, 0.123E~2) = 2.394160714 +atan2 (0.17976931348623157E309, 0.22250738585072014E~307) = 1.570796327 +pow (0.17976931348623157E309, 0.22250738585072014E~307) = 1 +atan2 (0.17976931348623157E309, 0.11125369292536007E~307) = 1.570796327 +pow (0.17976931348623157E309, 0.11125369292536007E~307) = 1 +atan2 (0.17976931348623157E309, 0.5E~323) = 1.570796327 +pow (0.17976931348623157E309, 0.5E~323) = 1 +atan2 (0.17976931348623157E309, 0.0) = 1.570796327 +pow (0.17976931348623157E309, 0.0) = 1 +atan2 (0.17976931348623157E309, ~0.17976931348623157E309) = 2.35619449 +pow (0.17976931348623157E309, ~0.17976931348623157E309) = 0 +atan2 (0.17976931348623157E309, ~0.8988465674311579E308) = 2.034443936 +pow (0.17976931348623157E309, ~0.8988465674311579E308) = 0 +atan2 (0.17976931348623157E309, ~0.123E4) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E4) = 0 +atan2 (0.17976931348623157E309, ~0.123E2) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E2) = 0 +atan2 (0.17976931348623157E309, ~0.3141592653589793E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.3141592653589793E1) = 0 +atan2 (0.17976931348623157E309, ~0.2718281828459045E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.2718281828459045E1) = 0 +atan2 (0.17976931348623157E309, ~0.123E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E1) = 0 +atan2 (0.17976931348623157E309, ~0.123) = 1.570796327 +pow (0.17976931348623157E309, ~0.123) = 1.21526219E~38 +atan2 (0.17976931348623157E309, ~0.123E~2) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E~2) = 0.4176829041 +atan2 (0.17976931348623157E309, ~0.22250738585072014E~307) = 1.570796327 +pow (0.17976931348623157E309, ~0.22250738585072014E~307) = 1 +atan2 (0.17976931348623157E309, ~0.11125369292536007E~307) = 1.570796327 +pow (0.17976931348623157E309, ~0.11125369292536007E~307) = 1 +atan2 (0.17976931348623157E309, ~0.5E~323) = 1.570796327 +pow (0.17976931348623157E309, ~0.5E~323) = 1 +atan2 (0.17976931348623157E309, ~0.0) = 1.570796327 +pow (0.17976931348623157E309, ~0.0) = 1 +atan2 (0.17976931348623157E309, inf) = 0 +pow (0.17976931348623157E309, inf) = inf +atan2 (0.17976931348623157E309, ~inf) = 3.141592654 +pow (0.17976931348623157E309, ~inf) = 0 +atan2 (0.17976931348623157E309, nan) = nan +pow (0.17976931348623157E309, nan) = nan +atan2 (0.17976931348623157E309, inf) = 0 +pow (0.17976931348623157E309, inf) = inf +atan2 (0.8988465674311579E308, 0.17976931348623157E309) = 0.463647609 +pow (0.8988465674311579E308, 0.17976931348623157E309) = inf +atan2 (0.8988465674311579E308, 0.8988465674311579E308) = 0.7853981634 +pow (0.8988465674311579E308, 0.8988465674311579E308) = inf +atan2 (0.8988465674311579E308, 0.123E4) = 1.570796327 +pow (0.8988465674311579E308, 0.123E4) = inf +atan2 (0.8988465674311579E308, 0.123E2) = 1.570796327 +pow (0.8988465674311579E308, 0.123E2) = inf +atan2 (0.8988465674311579E308, 0.3141592653589793E1) = 1.570796327 +pow (0.8988465674311579E308, 0.3141592653589793E1) = inf +atan2 (0.8988465674311579E308, 0.2718281828459045E1) = 1.570796327 +pow (0.8988465674311579E308, 0.2718281828459045E1) = inf +atan2 (0.8988465674311579E308, 0.123E1) = 1.570796327 +pow (0.8988465674311579E308, 0.123E1) = inf +atan2 (0.8988465674311579E308, 0.123) = 1.570796327 +pow (0.8988465674311579E308, 0.123) = 7.556197911E37 +atan2 (0.8988465674311579E308, 0.123E~2) = 1.570796327 +pow (0.8988465674311579E308, 0.123E~2) = 2.392120392 +atan2 (0.8988465674311579E308, 0.22250738585072014E~307) = 1.570796327 +pow (0.8988465674311579E308, 0.22250738585072014E~307) = 1 +atan2 (0.8988465674311579E308, 0.11125369292536007E~307) = 1.570796327 +pow (0.8988465674311579E308, 0.11125369292536007E~307) = 1 +atan2 (0.8988465674311579E308, 0.5E~323) = 1.570796327 +pow (0.8988465674311579E308, 0.5E~323) = 1 +atan2 (0.8988465674311579E308, 0.0) = 1.570796327 +pow (0.8988465674311579E308, 0.0) = 1 +atan2 (0.8988465674311579E308, ~0.17976931348623157E309) = 2.677945045 +pow (0.8988465674311579E308, ~0.17976931348623157E309) = 0 +atan2 (0.8988465674311579E308, ~0.8988465674311579E308) = 2.35619449 +pow (0.8988465674311579E308, ~0.8988465674311579E308) = 0 +atan2 (0.8988465674311579E308, ~0.123E4) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E4) = 0 +atan2 (0.8988465674311579E308, ~0.123E2) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E2) = 0 +atan2 (0.8988465674311579E308, ~0.3141592653589793E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.3141592653589793E1) = 0 +atan2 (0.8988465674311579E308, ~0.2718281828459045E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.2718281828459045E1) = 0 +atan2 (0.8988465674311579E308, ~0.123E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E1) = 0 +atan2 (0.8988465674311579E308, ~0.123) = 1.570796327 +pow (0.8988465674311579E308, ~0.123) = 1.323416898E~38 +atan2 (0.8988465674311579E308, ~0.123E~2) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E~2) = 0.4180391603 +atan2 (0.8988465674311579E308, ~0.22250738585072014E~307) = 1.570796327 +pow (0.8988465674311579E308, ~0.22250738585072014E~307) = 1 +atan2 (0.8988465674311579E308, ~0.11125369292536007E~307) = 1.570796327 +pow (0.8988465674311579E308, ~0.11125369292536007E~307) = 1 +atan2 (0.8988465674311579E308, ~0.5E~323) = 1.570796327 +pow (0.8988465674311579E308, ~0.5E~323) = 1 +atan2 (0.8988465674311579E308, ~0.0) = 1.570796327 +pow (0.8988465674311579E308, ~0.0) = 1 +atan2 (0.8988465674311579E308, inf) = 0 +pow (0.8988465674311579E308, inf) = inf +atan2 (0.8988465674311579E308, ~inf) = 3.141592654 +pow (0.8988465674311579E308, ~inf) = 0 +atan2 (0.8988465674311579E308, nan) = nan +pow (0.8988465674311579E308, nan) = nan +atan2 (0.8988465674311579E308, inf) = 0 +pow (0.8988465674311579E308, inf) = inf +atan2 (0.123E4, 0.17976931348623157E309) = 6.842102115E~306 +pow (0.123E4, 0.17976931348623157E309) = inf +atan2 (0.123E4, 0.8988465674311579E308) = 1.368420423E~305 +pow (0.123E4, 0.8988465674311579E308) = inf +atan2 (0.123E4, 0.123E4) = 0.7853981634 +pow (0.123E4, 0.123E4) = inf +atan2 (0.123E4, 0.123E2) = 1.56079666 +pow (0.123E4, 0.123E2) = 1.013521278E38 +atan2 (0.123E4, 0.3141592653589793E1) = 1.568242192 +pow (0.123E4, 0.3141592653589793E1) = 5095927004 +atan2 (0.123E4, 0.2718281828459045E1) = 1.568586345 +pow (0.123E4, 0.2718281828459045E1) = 250745366.3 +atan2 (0.123E4, 0.123E1) = 1.569796327 +pow (0.123E4, 0.123E1) = 6318.053325 +atan2 (0.123E4, 0.123) = 1.570696327 +pow (0.123E4, 0.123) = 2.39915512 +atan2 (0.123E4, 0.123E~2) = 1.570795327 +pow (0.123E4, 0.123E~2) = 1.00878957 +atan2 (0.123E4, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E4, 0.22250738585072014E~307) = 1 +atan2 (0.123E4, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E4, 0.11125369292536007E~307) = 1 +atan2 (0.123E4, 0.5E~323) = 1.570796327 +pow (0.123E4, 0.5E~323) = 1 +atan2 (0.123E4, 0.0) = 1.570796327 +pow (0.123E4, 0.0) = 1 +atan2 (0.123E4, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E4, ~0.17976931348623157E309) = 0 +atan2 (0.123E4, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E4, ~0.8988465674311579E308) = 0 +atan2 (0.123E4, ~0.123E4) = 2.35619449 +pow (0.123E4, ~0.123E4) = 0 +atan2 (0.123E4, ~0.123E2) = 1.580795993 +pow (0.123E4, ~0.123E2) = 9.86659108E~39 +atan2 (0.123E4, ~0.3141592653589793E1) = 1.573350462 +pow (0.123E4, ~0.3141592653589793E1) = 1.9623515E~10 +atan2 (0.123E4, ~0.2718281828459045E1) = 1.573006308 +pow (0.123E4, ~0.2718281828459045E1) = 3.98810959E~9 +atan2 (0.123E4, ~0.123E1) = 1.571796326 +pow (0.123E4, ~0.123E1) = 1.582766002E~4 +atan2 (0.123E4, ~0.123) = 1.570896327 +pow (0.123E4, ~0.123) = 0.4168133988 +atan2 (0.123E4, ~0.123E~2) = 1.570797327 +pow (0.123E4, ~0.123E~2) = 0.9912870136 +atan2 (0.123E4, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E4, ~0.22250738585072014E~307) = 1 +atan2 (0.123E4, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E4, ~0.11125369292536007E~307) = 1 +atan2 (0.123E4, ~0.5E~323) = 1.570796327 +pow (0.123E4, ~0.5E~323) = 1 +atan2 (0.123E4, ~0.0) = 1.570796327 +pow (0.123E4, ~0.0) = 1 +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E4, ~inf) = 3.141592654 +pow (0.123E4, ~inf) = 0 +atan2 (0.123E4, nan) = nan +pow (0.123E4, nan) = nan +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E2, 0.17976931348623157E309) = 6.842102115E~308 +pow (0.123E2, 0.17976931348623157E309) = inf +atan2 (0.123E2, 0.8988465674311579E308) = 1.368420423E~307 +pow (0.123E2, 0.8988465674311579E308) = inf +atan2 (0.123E2, 0.123E4) = 0.009999666687 +pow (0.123E2, 0.123E4) = inf +atan2 (0.123E2, 0.123E2) = 0.7853981634 +pow (0.123E2, 0.123E2) = 2.545850346E13 +atan2 (0.123E2, 0.3141592653589793E1) = 1.320728626 +pow (0.123E2, 0.3141592653589793E1) = 2654.83718 +atan2 (0.123E2, 0.2718281828459045E1) = 1.353293796 +pow (0.123E2, 0.2718281828459045E1) = 917.6334984 +atan2 (0.123E2, 0.123E1) = 1.471127674 +pow (0.123E2, 0.123E1) = 21.90701911 +atan2 (0.123E2, 0.123) = 1.56079666 +pow (0.123E2, 0.123) = 1.361627546 +atan2 (0.123E2, 0.123E~2) = 1.570696327 +pow (0.123E2, 0.123E~2) = 1.003091576 +atan2 (0.123E2, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E2, 0.22250738585072014E~307) = 1 +atan2 (0.123E2, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E2, 0.11125369292536007E~307) = 1 +atan2 (0.123E2, 0.5E~323) = 1.570796327 +pow (0.123E2, 0.5E~323) = 1 +atan2 (0.123E2, 0.0) = 1.570796327 +pow (0.123E2, 0.0) = 1 +atan2 (0.123E2, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E2, ~0.17976931348623157E309) = 0 +atan2 (0.123E2, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E2, ~0.8988465674311579E308) = 0 +atan2 (0.123E2, ~0.123E4) = 3.131592987 +pow (0.123E2, ~0.123E4) = 0 +atan2 (0.123E2, ~0.123E2) = 2.35619449 +pow (0.123E2, ~0.123E2) = 3.927960658E~14 +atan2 (0.123E2, ~0.3141592653589793E1) = 1.820864027 +pow (0.123E2, ~0.3141592653589793E1) = 3.766709339E~4 +atan2 (0.123E2, ~0.2718281828459045E1) = 1.788298857 +pow (0.123E2, ~0.2718281828459045E1) = 0.001089759694 +atan2 (0.123E2, ~0.123E1) = 1.670464979 +pow (0.123E2, ~0.123E1) = 0.04564747011 +atan2 (0.123E2, ~0.123) = 1.580795993 +pow (0.123E2, ~0.123) = 0.7344152246 +atan2 (0.123E2, ~0.123E~2) = 1.570896327 +pow (0.123E2, ~0.123E~2) = 0.9969179522 +atan2 (0.123E2, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E2, ~0.22250738585072014E~307) = 1 +atan2 (0.123E2, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E2, ~0.11125369292536007E~307) = 1 +atan2 (0.123E2, ~0.5E~323) = 1.570796327 +pow (0.123E2, ~0.5E~323) = 1 +atan2 (0.123E2, ~0.0) = 1.570796327 +pow (0.123E2, ~0.0) = 1 +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.123E2, ~inf) = 3.141592654 +pow (0.123E2, ~inf) = 0 +atan2 (0.123E2, nan) = nan +pow (0.123E2, nan) = nan +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.3141592653589793E1, 0.17976931348623157E309) = 1.747568922E~308 +pow (0.3141592653589793E1, 0.17976931348623157E309) = inf +atan2 (0.3141592653589793E1, 0.8988465674311579E308) = 3.495137844E~308 +pow (0.3141592653589793E1, 0.8988465674311579E308) = inf +atan2 (0.3141592653589793E1, 0.123E4) = 0.002554134815 +pow (0.3141592653589793E1, 0.123E4) = inf +atan2 (0.3141592653589793E1, 0.123E2) = 0.2500677004 +pow (0.3141592653589793E1, 0.123E2) = 1302997.055 +atan2 (0.3141592653589793E1, 0.3141592653589793E1) = 0.7853981634 +pow (0.3141592653589793E1, 0.3141592653589793E1) = 36.46215961 +atan2 (0.3141592653589793E1, 0.2718281828459045E1) = 0.8575117864 +pow (0.3141592653589793E1, 0.2718281828459045E1) = 22.45915772 +atan2 (0.3141592653589793E1, 0.123E1) = 1.197620596 +pow (0.3141592653589793E1, 0.123E1) = 4.087844278 +atan2 (0.3141592653589793E1, 0.123) = 1.531664198 +pow (0.3141592653589793E1, 0.123) = 1.151196431 +atan2 (0.3141592653589793E1, 0.123E~2) = 1.570404806 +pow (0.3141592653589793E1, 0.123E~2) = 1.001409009 +atan2 (0.3141592653589793E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.3141592653589793E1, 0.22250738585072014E~307) = 1 +atan2 (0.3141592653589793E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.3141592653589793E1, 0.11125369292536007E~307) = 1 +atan2 (0.3141592653589793E1, 0.5E~323) = 1.570796327 +pow (0.3141592653589793E1, 0.5E~323) = 1 +atan2 (0.3141592653589793E1, 0.0) = 1.570796327 +pow (0.3141592653589793E1, 0.0) = 1 +atan2 (0.3141592653589793E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.3141592653589793E1, ~0.17976931348623157E309) = 0 +atan2 (0.3141592653589793E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.3141592653589793E1, ~0.8988465674311579E308) = 0 +atan2 (0.3141592653589793E1, ~0.123E4) = 3.139038519 +pow (0.3141592653589793E1, ~0.123E4) = 0 +atan2 (0.3141592653589793E1, ~0.123E2) = 2.891524953 +pow (0.3141592653589793E1, ~0.123E2) = 7.674614429E~7 +atan2 (0.3141592653589793E1, ~0.3141592653589793E1) = 2.35619449 +pow (0.3141592653589793E1, ~0.3141592653589793E1) = 0.02742569312 +atan2 (0.3141592653589793E1, ~0.2718281828459045E1) = 2.284080867 +pow (0.3141592653589793E1, ~0.2718281828459045E1) = 0.04452526727 +atan2 (0.3141592653589793E1, ~0.123E1) = 1.943972057 +pow (0.3141592653589793E1, ~0.123E1) = 0.2446277138 +atan2 (0.3141592653589793E1, ~0.123) = 1.609928456 +pow (0.3141592653589793E1, ~0.123) = 0.8686614842 +atan2 (0.3141592653589793E1, ~0.123E~2) = 1.571187848 +pow (0.3141592653589793E1, ~0.123E~2) = 0.998592973 +atan2 (0.3141592653589793E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.3141592653589793E1, ~0.22250738585072014E~307) = 1 +atan2 (0.3141592653589793E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.3141592653589793E1, ~0.11125369292536007E~307) = 1 +atan2 (0.3141592653589793E1, ~0.5E~323) = 1.570796327 +pow (0.3141592653589793E1, ~0.5E~323) = 1 +atan2 (0.3141592653589793E1, ~0.0) = 1.570796327 +pow (0.3141592653589793E1, ~0.0) = 1 +atan2 (0.3141592653589793E1, inf) = 0 +pow (0.3141592653589793E1, inf) = inf +atan2 (0.3141592653589793E1, ~inf) = 3.141592654 +pow (0.3141592653589793E1, ~inf) = 0 +atan2 (0.3141592653589793E1, nan) = nan +pow (0.3141592653589793E1, nan) = nan +atan2 (0.3141592653589793E1, inf) = 0 +pow (0.3141592653589793E1, inf) = inf +atan2 (0.2718281828459045E1, 0.17976931348623157E309) = 1.512094459E~308 +pow (0.2718281828459045E1, 0.17976931348623157E309) = inf +atan2 (0.2718281828459045E1, 0.8988465674311579E308) = 3.024188918E~308 +pow (0.2718281828459045E1, 0.8988465674311579E308) = inf +atan2 (0.2718281828459045E1, 0.123E4) = 0.002209981629 +pow (0.2718281828459045E1, 0.123E4) = inf +atan2 (0.2718281828459045E1, 0.123E2) = 0.2175025304 +pow (0.2718281828459045E1, 0.123E2) = 219695.9887 +atan2 (0.2718281828459045E1, 0.3141592653589793E1) = 0.7132845404 +pow (0.2718281828459045E1, 0.3141592653589793E1) = 23.14069263 +atan2 (0.2718281828459045E1, 0.2718281828459045E1) = 0.7853981634 +pow (0.2718281828459045E1, 0.2718281828459045E1) = 15.15426224 +atan2 (0.2718281828459045E1, 0.123E1) = 1.145872224 +pow (0.2718281828459045E1, 0.123E1) = 3.421229536 +atan2 (0.2718281828459045E1, 0.123) = 1.525578 +pow (0.2718281828459045E1, 0.123) = 1.130884421 +atan2 (0.2718281828459045E1, 0.123E~2) = 1.570343835 +pow (0.2718281828459045E1, 0.123E~2) = 1.001230757 +atan2 (0.2718281828459045E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.2718281828459045E1, 0.22250738585072014E~307) = 1 +atan2 (0.2718281828459045E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.2718281828459045E1, 0.11125369292536007E~307) = 1 +atan2 (0.2718281828459045E1, 0.5E~323) = 1.570796327 +pow (0.2718281828459045E1, 0.5E~323) = 1 +atan2 (0.2718281828459045E1, 0.0) = 1.570796327 +pow (0.2718281828459045E1, 0.0) = 1 +atan2 (0.2718281828459045E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.2718281828459045E1, ~0.17976931348623157E309) = 0 +atan2 (0.2718281828459045E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.2718281828459045E1, ~0.8988465674311579E308) = 0 +atan2 (0.2718281828459045E1, ~0.123E4) = 3.139382672 +pow (0.2718281828459045E1, ~0.123E4) = 0 +atan2 (0.2718281828459045E1, ~0.123E2) = 2.924090123 +pow (0.2718281828459045E1, ~0.123E2) = 4.551744463E~6 +atan2 (0.2718281828459045E1, ~0.3141592653589793E1) = 2.428308113 +pow (0.2718281828459045E1, ~0.3141592653589793E1) = 0.04321391826 +atan2 (0.2718281828459045E1, ~0.2718281828459045E1) = 2.35619449 +pow (0.2718281828459045E1, ~0.2718281828459045E1) = 0.06598803585 +atan2 (0.2718281828459045E1, ~0.123E1) = 1.99572043 +pow (0.2718281828459045E1, ~0.123E1) = 0.2922925777 +atan2 (0.2718281828459045E1, ~0.123) = 1.616014654 +pow (0.2718281828459045E1, ~0.123) = 0.8842636626 +atan2 (0.2718281828459045E1, ~0.123E~2) = 1.571248818 +pow (0.2718281828459045E1, ~0.123E~2) = 0.9987707561 +atan2 (0.2718281828459045E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.2718281828459045E1, ~0.22250738585072014E~307) = 1 +atan2 (0.2718281828459045E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.2718281828459045E1, ~0.11125369292536007E~307) = 1 +atan2 (0.2718281828459045E1, ~0.5E~323) = 1.570796327 +pow (0.2718281828459045E1, ~0.5E~323) = 1 +atan2 (0.2718281828459045E1, ~0.0) = 1.570796327 +pow (0.2718281828459045E1, ~0.0) = 1 +atan2 (0.2718281828459045E1, inf) = 0 +pow (0.2718281828459045E1, inf) = inf +atan2 (0.2718281828459045E1, ~inf) = 3.141592654 +pow (0.2718281828459045E1, ~inf) = 0 +atan2 (0.2718281828459045E1, nan) = nan +pow (0.2718281828459045E1, nan) = nan +atan2 (0.2718281828459045E1, inf) = 0 +pow (0.2718281828459045E1, inf) = inf +atan2 (0.123E1, 0.17976931348623157E309) = 6.842102115E~309 +pow (0.123E1, 0.17976931348623157E309) = inf +atan2 (0.123E1, 0.8988465674311579E308) = 1.368420423E~308 +pow (0.123E1, 0.8988465674311579E308) = inf +atan2 (0.123E1, 0.123E4) = 9.999996667E~4 +pow (0.123E1, 0.123E4) = 3.830778757E110 +atan2 (0.123E1, 0.123E2) = 0.09966865249 +pow (0.123E1, 0.123E2) = 12.75947692 +atan2 (0.123E1, 0.3141592653589793E1) = 0.3731757303 +pow (0.123E1, 0.3141592653589793E1) = 1.916219422 +atan2 (0.123E1, 0.2718281828459045E1) = 0.4249241031 +pow (0.123E1, 0.2718281828459045E1) = 1.755445823 +atan2 (0.123E1, 0.123E1) = 0.7853981634 +pow (0.123E1, 0.123E1) = 1.289980921 +atan2 (0.123E1, 0.123) = 1.471127674 +pow (0.123E1, 0.123) = 1.025789688 +atan2 (0.123E1, 0.123E~2) = 1.569796327 +pow (0.123E1, 0.123E~2) = 1.00025466 +atan2 (0.123E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E1, 0.22250738585072014E~307) = 1 +atan2 (0.123E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E1, 0.11125369292536007E~307) = 1 +atan2 (0.123E1, 0.5E~323) = 1.570796327 +pow (0.123E1, 0.5E~323) = 1 +atan2 (0.123E1, 0.0) = 1.570796327 +pow (0.123E1, 0.0) = 1 +atan2 (0.123E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E1, ~0.17976931348623157E309) = 0 +atan2 (0.123E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E1, ~0.8988465674311579E308) = 0 +atan2 (0.123E1, ~0.123E4) = 3.140592654 +pow (0.123E1, ~0.123E4) = 2.610435275E~111 +atan2 (0.123E1, ~0.123E2) = 3.041924001 +pow (0.123E1, ~0.123E2) = 0.07837311876 +atan2 (0.123E1, ~0.3141592653589793E1) = 2.768416923 +pow (0.123E1, ~0.3141592653589793E1) = 0.5218609042 +atan2 (0.123E1, ~0.2718281828459045E1) = 2.71666855 +pow (0.123E1, ~0.2718281828459045E1) = 0.56965586 +atan2 (0.123E1, ~0.123E1) = 2.35619449 +pow (0.123E1, ~0.123E1) = 0.7752052637 +atan2 (0.123E1, ~0.123) = 1.670464979 +pow (0.123E1, ~0.123) = 0.9748586988 +atan2 (0.123E1, ~0.123E~2) = 1.571796326 +pow (0.123E1, ~0.123E~2) = 0.999745405 +atan2 (0.123E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E1, ~0.22250738585072014E~307) = 1 +atan2 (0.123E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E1, ~0.11125369292536007E~307) = 1 +atan2 (0.123E1, ~0.5E~323) = 1.570796327 +pow (0.123E1, ~0.5E~323) = 1 +atan2 (0.123E1, ~0.0) = 1.570796327 +pow (0.123E1, ~0.0) = 1 +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123E1, ~inf) = 3.141592654 +pow (0.123E1, ~inf) = 0 +atan2 (0.123E1, nan) = nan +pow (0.123E1, nan) = nan +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123, 0.17976931348623157E309) = 6.842102115E~310 +pow (0.123, 0.17976931348623157E309) = 0 +atan2 (0.123, 0.8988465674311579E308) = 1.368420423E~309 +pow (0.123, 0.8988465674311579E308) = 0 +atan2 (0.123, 0.123E4) = 9.999999967E~5 +pow (0.123, 0.123E4) = 0 +atan2 (0.123, 0.123E2) = 0.009999666687 +pow (0.123, 0.123E2) = 6.394886941E~12 +atan2 (0.123, 0.3141592653589793E1) = 0.03913212911 +pow (0.123, 0.3141592653589793E1) = 0.001383096824 +atan2 (0.123, 0.2718281828459045E1) = 0.04521832678 +pow (0.123, 0.2718281828459045E1) = 0.003358192615 +atan2 (0.123, 0.123E1) = 0.09966865249 +pow (0.123, 0.123E1) = 0.07595970809 +atan2 (0.123, 0.123) = 0.7853981634 +pow (0.123, 0.123) = 0.7727843683 +atan2 (0.123, 0.123E~2) = 1.56079666 +pow (0.123, 0.123E~2) = 0.9974257668 +atan2 (0.123, 0.22250738585072014E~307) = 1.570796327 +pow (0.123, 0.22250738585072014E~307) = 1 +atan2 (0.123, 0.11125369292536007E~307) = 1.570796327 +pow (0.123, 0.11125369292536007E~307) = 1 +atan2 (0.123, 0.5E~323) = 1.570796327 +pow (0.123, 0.5E~323) = 1 +atan2 (0.123, 0.0) = 1.570796327 +pow (0.123, 0.0) = 1 +atan2 (0.123, ~0.17976931348623157E309) = 3.141592654 +pow (0.123, ~0.17976931348623157E309) = inf +atan2 (0.123, ~0.8988465674311579E308) = 3.141592654 +pow (0.123, ~0.8988465674311579E308) = inf +atan2 (0.123, ~0.123E4) = 3.141492654 +pow (0.123, ~0.123E4) = inf +atan2 (0.123, ~0.123E2) = 3.131592987 +pow (0.123, ~0.123E2) = 156374930400 +atan2 (0.123, ~0.3141592653589793E1) = 3.102460524 +pow (0.123, ~0.3141592653589793E1) = 723.0151807 +atan2 (0.123, ~0.2718281828459045E1) = 3.096374327 +pow (0.123, ~0.2718281828459045E1) = 297.7792267 +atan2 (0.123, ~0.123E1) = 3.041924001 +pow (0.123, ~0.123E1) = 13.16487418 +atan2 (0.123, ~0.123) = 2.35619449 +pow (0.123, ~0.123) = 1.294022034 +atan2 (0.123, ~0.123E~2) = 1.580795993 +pow (0.123, ~0.123E~2) = 1.002580877 +atan2 (0.123, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123, ~0.22250738585072014E~307) = 1 +atan2 (0.123, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123, ~0.11125369292536007E~307) = 1 +atan2 (0.123, ~0.5E~323) = 1.570796327 +pow (0.123, ~0.5E~323) = 1 +atan2 (0.123, ~0.0) = 1.570796327 +pow (0.123, ~0.0) = 1 +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123, ~inf) = 3.141592654 +pow (0.123, ~inf) = inf +atan2 (0.123, nan) = nan +pow (0.123, nan) = nan +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123E~2, 0.17976931348623157E309) = 6.842102115E~312 +pow (0.123E~2, 0.17976931348623157E309) = 0 +atan2 (0.123E~2, 0.8988465674311579E308) = 1.368420423E~311 +pow (0.123E~2, 0.8988465674311579E308) = 0 +atan2 (0.123E~2, 0.123E4) = 1E~6 +pow (0.123E~2, 0.123E4) = 0 +atan2 (0.123E~2, 0.123E2) = 9.999999967E~5 +pow (0.123E~2, 0.123E2) = 1.606322974E~36 +atan2 (0.123E~2, 0.3141592653589793E1) = 3.9152114E~4 +pow (0.123E~2, 0.3141592653589793E1) = 7.205552335E~10 +atan2 (0.123E~2, 0.2718281828459045E1) = 4.524916818E~4 +pow (0.123E~2, 0.2718281828459045E1) = 1.228971878E~8 +atan2 (0.123E~2, 0.123E1) = 9.999996667E~4 +pow (0.123E~2, 0.123E1) = 2.633802994E~4 +atan2 (0.123E~2, 0.123) = 0.009999666687 +pow (0.123E~2, 0.123) = 0.4385895994 +atan2 (0.123E~2, 0.123E~2) = 0.7853981634 +pow (0.123E~2, 0.123E~2) = 0.9917919599 +atan2 (0.123E~2, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E~2, 0.22250738585072014E~307) = 1 +atan2 (0.123E~2, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E~2, 0.11125369292536007E~307) = 1 +atan2 (0.123E~2, 0.5E~323) = 1.570796327 +pow (0.123E~2, 0.5E~323) = 1 +atan2 (0.123E~2, 0.0) = 1.570796327 +pow (0.123E~2, 0.0) = 1 +atan2 (0.123E~2, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E~2, ~0.17976931348623157E309) = inf +atan2 (0.123E~2, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E~2, ~0.8988465674311579E308) = inf +atan2 (0.123E~2, ~0.123E4) = 3.141591654 +pow (0.123E~2, ~0.123E4) = inf +atan2 (0.123E~2, ~0.123E2) = 3.141492654 +pow (0.123E~2, ~0.123E2) = 6.225398107E35 +atan2 (0.123E~2, ~0.3141592653589793E1) = 3.141201132 +pow (0.123E~2, ~0.3141592653589793E1) = 1387818662 +atan2 (0.123E~2, ~0.2718281828459045E1) = 3.141140162 +pow (0.123E~2, ~0.2718281828459045E1) = 81368826.88 +atan2 (0.123E~2, ~0.123E1) = 3.140592654 +pow (0.123E~2, ~0.123E1) = 3796.791188 +atan2 (0.123E~2, ~0.123) = 3.131592987 +pow (0.123E~2, ~0.123) = 2.280035827 +atan2 (0.123E~2, ~0.123E~2) = 2.35619449 +pow (0.123E~2, ~0.123E~2) = 1.00827597 +atan2 (0.123E~2, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E~2, ~0.22250738585072014E~307) = 1 +atan2 (0.123E~2, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E~2, ~0.11125369292536007E~307) = 1 +atan2 (0.123E~2, ~0.5E~323) = 1.570796327 +pow (0.123E~2, ~0.5E~323) = 1 +atan2 (0.123E~2, ~0.0) = 1.570796327 +pow (0.123E~2, ~0.0) = 1 +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.123E~2, ~inf) = 3.141592654 +pow (0.123E~2, ~inf) = inf +atan2 (0.123E~2, nan) = nan +pow (0.123E~2, nan) = nan +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.22250738585072014E~307, 0.17976931348623157E309) = 0 +pow (0.22250738585072014E~307, 0.17976931348623157E309) = 0 +atan2 (0.22250738585072014E~307, 0.8988465674311579E308) = 0 +pow (0.22250738585072014E~307, 0.8988465674311579E308) = 0 +atan2 (0.22250738585072014E~307, 0.123E4) = 1.809003137E~311 +pow (0.22250738585072014E~307, 0.123E4) = 0 +atan2 (0.22250738585072014E~307, 0.123E2) = 1.809003137E~309 +pow (0.22250738585072014E~307, 0.123E2) = 0 +atan2 (0.22250738585072014E~307, 0.3141592653589793E1) = 7.082630067E~309 +pow (0.22250738585072014E~307, 0.3141592653589793E1) = 0 +atan2 (0.22250738585072014E~307, 0.2718281828459045E1) = 8.185589276E~309 +pow (0.22250738585072014E~307, 0.2718281828459045E1) = 0 +atan2 (0.22250738585072014E~307, 0.123E1) = 1.809003137E~308 +pow (0.22250738585072014E~307, 0.123E1) = 0 +atan2 (0.22250738585072014E~307, 0.123) = 1.809003137E~307 +pow (0.22250738585072014E~307, 0.123) = 1.441197052E~38 +atan2 (0.22250738585072014E~307, 0.123E~2) = 1.809003137E~305 +pow (0.22250738585072014E~307, 0.123E~2) = 0.4183957204 +atan2 (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.7853981634 +pow (0.22250738585072014E~307, 0.22250738585072014E~307) = 1 +atan2 (0.22250738585072014E~307, 0.11125369292536007E~307) = 1.107148718 +pow (0.22250738585072014E~307, 0.11125369292536007E~307) = 1 +atan2 (0.22250738585072014E~307, 0.5E~323) = 1.570796327 +pow (0.22250738585072014E~307, 0.5E~323) = 1 +atan2 (0.22250738585072014E~307, 0.0) = 1.570796327 +pow (0.22250738585072014E~307, 0.0) = 1 +atan2 (0.22250738585072014E~307, ~0.17976931348623157E309) = 3.141592654 +pow (0.22250738585072014E~307, ~0.17976931348623157E309) = inf +atan2 (0.22250738585072014E~307, ~0.8988465674311579E308) = 3.141592654 +pow (0.22250738585072014E~307, ~0.8988465674311579E308) = inf +atan2 (0.22250738585072014E~307, ~0.123E4) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E4) = inf +atan2 (0.22250738585072014E~307, ~0.123E2) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E2) = inf +atan2 (0.22250738585072014E~307, ~0.3141592653589793E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.3141592653589793E1) = inf +atan2 (0.22250738585072014E~307, ~0.2718281828459045E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.2718281828459045E1) = inf +atan2 (0.22250738585072014E~307, ~0.123E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E1) = inf +atan2 (0.22250738585072014E~307, ~0.123) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123) = 6.93867642E37 +atan2 (0.22250738585072014E~307, ~0.123E~2) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E~2) = 2.390081808 +atan2 (0.22250738585072014E~307, ~0.22250738585072014E~307) = 2.35619449 +pow (0.22250738585072014E~307, ~0.22250738585072014E~307) = 1 +atan2 (0.22250738585072014E~307, ~0.11125369292536007E~307) = 2.034443936 +pow (0.22250738585072014E~307, ~0.11125369292536007E~307) = 1 +atan2 (0.22250738585072014E~307, ~0.5E~323) = 1.570796327 +pow (0.22250738585072014E~307, ~0.5E~323) = 1 +atan2 (0.22250738585072014E~307, ~0.0) = 1.570796327 +pow (0.22250738585072014E~307, ~0.0) = 1 +atan2 (0.22250738585072014E~307, inf) = 0 +pow (0.22250738585072014E~307, inf) = 0 +atan2 (0.22250738585072014E~307, ~inf) = 3.141592654 +pow (0.22250738585072014E~307, ~inf) = inf +atan2 (0.22250738585072014E~307, nan) = nan +pow (0.22250738585072014E~307, nan) = nan +atan2 (0.22250738585072014E~307, inf) = 0 +pow (0.22250738585072014E~307, inf) = 0 +atan2 (0.11125369292536007E~307, 0.17976931348623157E309) = 0 +pow (0.11125369292536007E~307, 0.17976931348623157E309) = 0 +atan2 (0.11125369292536007E~307, 0.8988465674311579E308) = 0 +pow (0.11125369292536007E~307, 0.8988465674311579E308) = 0 +atan2 (0.11125369292536007E~307, 0.123E4) = 9.045015685E~312 +pow (0.11125369292536007E~307, 0.123E4) = 0 +atan2 (0.11125369292536007E~307, 0.123E2) = 9.045015685E~310 +pow (0.11125369292536007E~307, 0.123E2) = 0 +atan2 (0.11125369292536007E~307, 0.3141592653589793E1) = 3.541315033E~309 +pow (0.11125369292536007E~307, 0.3141592653589793E1) = 0 +atan2 (0.11125369292536007E~307, 0.2718281828459045E1) = 4.092794638E~309 +pow (0.11125369292536007E~307, 0.2718281828459045E1) = 0 +atan2 (0.11125369292536007E~307, 0.123E1) = 9.045015685E~309 +pow (0.11125369292536007E~307, 0.123E1) = 0 +atan2 (0.11125369292536007E~307, 0.123) = 9.045015685E~308 +pow (0.11125369292536007E~307, 0.123) = 1.323416898E~38 +atan2 (0.11125369292536007E~307, 0.123E~2) = 9.045015685E~306 +pow (0.11125369292536007E~307, 0.123E~2) = 0.4180391603 +atan2 (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.463647609 +pow (0.11125369292536007E~307, 0.22250738585072014E~307) = 1 +atan2 (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.7853981634 +pow (0.11125369292536007E~307, 0.11125369292536007E~307) = 1 +atan2 (0.11125369292536007E~307, 0.5E~323) = 1.570796327 +pow (0.11125369292536007E~307, 0.5E~323) = 1 +atan2 (0.11125369292536007E~307, 0.0) = 1.570796327 +pow (0.11125369292536007E~307, 0.0) = 1 +atan2 (0.11125369292536007E~307, ~0.17976931348623157E309) = 3.141592654 +pow (0.11125369292536007E~307, ~0.17976931348623157E309) = inf +atan2 (0.11125369292536007E~307, ~0.8988465674311579E308) = 3.141592654 +pow (0.11125369292536007E~307, ~0.8988465674311579E308) = inf +atan2 (0.11125369292536007E~307, ~0.123E4) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E4) = inf +atan2 (0.11125369292536007E~307, ~0.123E2) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E2) = inf +atan2 (0.11125369292536007E~307, ~0.3141592653589793E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.3141592653589793E1) = inf +atan2 (0.11125369292536007E~307, ~0.2718281828459045E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.2718281828459045E1) = inf +atan2 (0.11125369292536007E~307, ~0.123E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E1) = inf +atan2 (0.11125369292536007E~307, ~0.123) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123) = 7.556197911E37 +atan2 (0.11125369292536007E~307, ~0.123E~2) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E~2) = 2.392120392 +atan2 (0.11125369292536007E~307, ~0.22250738585072014E~307) = 2.677945045 +pow (0.11125369292536007E~307, ~0.22250738585072014E~307) = 1 +atan2 (0.11125369292536007E~307, ~0.11125369292536007E~307) = 2.35619449 +pow (0.11125369292536007E~307, ~0.11125369292536007E~307) = 1 +atan2 (0.11125369292536007E~307, ~0.5E~323) = 1.570796327 +pow (0.11125369292536007E~307, ~0.5E~323) = 1 +atan2 (0.11125369292536007E~307, ~0.0) = 1.570796327 +pow (0.11125369292536007E~307, ~0.0) = 1 +atan2 (0.11125369292536007E~307, inf) = 0 +pow (0.11125369292536007E~307, inf) = 0 +atan2 (0.11125369292536007E~307, ~inf) = 3.141592654 +pow (0.11125369292536007E~307, ~inf) = inf +atan2 (0.11125369292536007E~307, nan) = nan +pow (0.11125369292536007E~307, nan) = nan +atan2 (0.11125369292536007E~307, inf) = 0 +pow (0.11125369292536007E~307, inf) = 0 +atan2 (0.5E~323, 0.17976931348623157E309) = 0 +pow (0.5E~323, 0.17976931348623157E309) = 0 +atan2 (0.5E~323, 0.8988465674311579E308) = 0 +pow (0.5E~323, 0.8988465674311579E308) = 0 +atan2 (0.5E~323, 0.123E4) = 0 +pow (0.5E~323, 0.123E4) = 0 +atan2 (0.5E~323, 0.123E2) = 0 +pow (0.5E~323, 0.123E2) = 0 +atan2 (0.5E~323, 0.3141592653589793E1) = 0 +pow (0.5E~323, 0.3141592653589793E1) = 0 +atan2 (0.5E~323, 0.2718281828459045E1) = 0 +pow (0.5E~323, 0.2718281828459045E1) = 0 +atan2 (0.5E~323, 0.123E1) = 4.940656458E~324 +pow (0.5E~323, 0.123E1) = 0 +atan2 (0.5E~323, 0.123) = 3.952525167E~323 +pow (0.5E~323, 0.123) = 1.711336892E~40 +atan2 (0.5E~323, 0.123E~2) = 4.016753701E~321 +pow (0.5E~323, 0.123E~2) = 0.4002518566 +atan2 (0.5E~323, 0.22250738585072014E~307) = 2.220446049E~16 +pow (0.5E~323, 0.22250738585072014E~307) = 1 +atan2 (0.5E~323, 0.11125369292536007E~307) = 4.440892099E~16 +pow (0.5E~323, 0.11125369292536007E~307) = 1 +atan2 (0.5E~323, 0.5E~323) = 0.7853981634 +pow (0.5E~323, 0.5E~323) = 1 +atan2 (0.5E~323, 0.0) = 1.570796327 +pow (0.5E~323, 0.0) = 1 +atan2 (0.5E~323, ~0.17976931348623157E309) = 3.141592654 +pow (0.5E~323, ~0.17976931348623157E309) = inf +atan2 (0.5E~323, ~0.8988465674311579E308) = 3.141592654 +pow (0.5E~323, ~0.8988465674311579E308) = inf +atan2 (0.5E~323, ~0.123E4) = 3.141592654 +pow (0.5E~323, ~0.123E4) = inf +atan2 (0.5E~323, ~0.123E2) = 3.141592654 +pow (0.5E~323, ~0.123E2) = inf +atan2 (0.5E~323, ~0.3141592653589793E1) = 3.141592654 +pow (0.5E~323, ~0.3141592653589793E1) = inf +atan2 (0.5E~323, ~0.2718281828459045E1) = 3.141592654 +pow (0.5E~323, ~0.2718281828459045E1) = inf +atan2 (0.5E~323, ~0.123E1) = 3.141592654 +pow (0.5E~323, ~0.123E1) = inf +atan2 (0.5E~323, ~0.123) = 3.141592654 +pow (0.5E~323, ~0.123) = 5.843384809E39 +atan2 (0.5E~323, ~0.123E~2) = 3.141592654 +pow (0.5E~323, ~0.123E~2) = 2.498426887 +atan2 (0.5E~323, ~0.22250738585072014E~307) = 3.141592654 +pow (0.5E~323, ~0.22250738585072014E~307) = 1 +atan2 (0.5E~323, ~0.11125369292536007E~307) = 3.141592654 +pow (0.5E~323, ~0.11125369292536007E~307) = 1 +atan2 (0.5E~323, ~0.5E~323) = 2.35619449 +pow (0.5E~323, ~0.5E~323) = 1 +atan2 (0.5E~323, ~0.0) = 1.570796327 +pow (0.5E~323, ~0.0) = 1 +atan2 (0.5E~323, inf) = 0 +pow (0.5E~323, inf) = 0 +atan2 (0.5E~323, ~inf) = 3.141592654 +pow (0.5E~323, ~inf) = inf +atan2 (0.5E~323, nan) = nan +pow (0.5E~323, nan) = nan +atan2 (0.5E~323, inf) = 0 +pow (0.5E~323, inf) = 0 +atan2 (0.0, 0.17976931348623157E309) = 0 +pow (0.0, 0.17976931348623157E309) = 0 +atan2 (0.0, 0.8988465674311579E308) = 0 +pow (0.0, 0.8988465674311579E308) = 0 +atan2 (0.0, 0.123E4) = 0 +pow (0.0, 0.123E4) = 0 +atan2 (0.0, 0.123E2) = 0 +pow (0.0, 0.123E2) = 0 +atan2 (0.0, 0.3141592653589793E1) = 0 +pow (0.0, 0.3141592653589793E1) = 0 +atan2 (0.0, 0.2718281828459045E1) = 0 +pow (0.0, 0.2718281828459045E1) = 0 +atan2 (0.0, 0.123E1) = 0 +pow (0.0, 0.123E1) = 0 +atan2 (0.0, 0.123) = 0 +pow (0.0, 0.123) = 0 +atan2 (0.0, 0.123E~2) = 0 +pow (0.0, 0.123E~2) = 0 +atan2 (0.0, 0.22250738585072014E~307) = 0 +pow (0.0, 0.22250738585072014E~307) = 0 +atan2 (0.0, 0.11125369292536007E~307) = 0 +pow (0.0, 0.11125369292536007E~307) = 0 +atan2 (0.0, 0.5E~323) = 0 +pow (0.0, 0.5E~323) = 0 +atan2 (0.0, 0.0) = 0 +pow (0.0, 0.0) = 1 +atan2 (0.0, ~0.17976931348623157E309) = 3.141592654 +pow (0.0, ~0.17976931348623157E309) = inf +atan2 (0.0, ~0.8988465674311579E308) = 3.141592654 +pow (0.0, ~0.8988465674311579E308) = inf +atan2 (0.0, ~0.123E4) = 3.141592654 +pow (0.0, ~0.123E4) = inf +atan2 (0.0, ~0.123E2) = 3.141592654 +pow (0.0, ~0.123E2) = inf +atan2 (0.0, ~0.3141592653589793E1) = 3.141592654 +pow (0.0, ~0.3141592653589793E1) = inf +atan2 (0.0, ~0.2718281828459045E1) = 3.141592654 +pow (0.0, ~0.2718281828459045E1) = inf +atan2 (0.0, ~0.123E1) = 3.141592654 +pow (0.0, ~0.123E1) = inf +atan2 (0.0, ~0.123) = 3.141592654 +pow (0.0, ~0.123) = inf +atan2 (0.0, ~0.123E~2) = 3.141592654 +pow (0.0, ~0.123E~2) = inf +atan2 (0.0, ~0.22250738585072014E~307) = 3.141592654 +pow (0.0, ~0.22250738585072014E~307) = inf +atan2 (0.0, ~0.11125369292536007E~307) = 3.141592654 +pow (0.0, ~0.11125369292536007E~307) = inf +atan2 (0.0, ~0.5E~323) = 3.141592654 +pow (0.0, ~0.5E~323) = inf +atan2 (0.0, ~0.0) = 3.141592654 +pow (0.0, ~0.0) = 1 +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (0.0, ~inf) = 3.141592654 +pow (0.0, ~inf) = inf +atan2 (0.0, nan) = nan +pow (0.0, nan) = nan +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.7853981634 +pow (~0.17976931348623157E309, 0.17976931348623157E309) = inf +atan2 (~0.17976931348623157E309, 0.8988465674311579E308) = ~1.107148718 +pow (~0.17976931348623157E309, 0.8988465674311579E308) = inf +atan2 (~0.17976931348623157E309, 0.123E4) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E4) = inf +atan2 (~0.17976931348623157E309, 0.123E2) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E2) = nan +atan2 (~0.17976931348623157E309, 0.3141592653589793E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.3141592653589793E1) = nan +atan2 (~0.17976931348623157E309, 0.2718281828459045E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.2718281828459045E1) = nan +atan2 (~0.17976931348623157E309, 0.123E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E1) = nan +atan2 (~0.17976931348623157E309, 0.123) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123) = nan +atan2 (~0.17976931348623157E309, 0.123E~2) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E~2) = nan +atan2 (~0.17976931348623157E309, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.17976931348623157E309, 0.22250738585072014E~307) = nan +atan2 (~0.17976931348623157E309, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.17976931348623157E309, 0.11125369292536007E~307) = nan +atan2 (~0.17976931348623157E309, 0.5E~323) = ~1.570796327 +pow (~0.17976931348623157E309, 0.5E~323) = nan +atan2 (~0.17976931348623157E309, 0.0) = ~1.570796327 +pow (~0.17976931348623157E309, 0.0) = 1 +atan2 (~0.17976931348623157E309, ~0.17976931348623157E309) = ~2.35619449 +pow (~0.17976931348623157E309, ~0.17976931348623157E309) = 0 +atan2 (~0.17976931348623157E309, ~0.8988465674311579E308) = ~2.034443936 +pow (~0.17976931348623157E309, ~0.8988465674311579E308) = 0 +atan2 (~0.17976931348623157E309, ~0.123E4) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E4) = 0 +atan2 (~0.17976931348623157E309, ~0.123E2) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E2) = nan +atan2 (~0.17976931348623157E309, ~0.3141592653589793E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.3141592653589793E1) = nan +atan2 (~0.17976931348623157E309, ~0.2718281828459045E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.2718281828459045E1) = nan +atan2 (~0.17976931348623157E309, ~0.123E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E1) = nan +atan2 (~0.17976931348623157E309, ~0.123) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123) = nan +atan2 (~0.17976931348623157E309, ~0.123E~2) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E~2) = nan +atan2 (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.22250738585072014E~307) = nan +atan2 (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.11125369292536007E~307) = nan +atan2 (~0.17976931348623157E309, ~0.5E~323) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.5E~323) = nan +atan2 (~0.17976931348623157E309, ~0.0) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.0) = 1 +atan2 (~0.17976931348623157E309, inf) = 0 +pow (~0.17976931348623157E309, inf) = inf +atan2 (~0.17976931348623157E309, ~inf) = ~3.141592654 +pow (~0.17976931348623157E309, ~inf) = 0 +atan2 (~0.17976931348623157E309, nan) = nan +pow (~0.17976931348623157E309, nan) = nan +atan2 (~0.17976931348623157E309, inf) = 0 +pow (~0.17976931348623157E309, inf) = inf +atan2 (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.463647609 +pow (~0.8988465674311579E308, 0.17976931348623157E309) = inf +atan2 (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.7853981634 +pow (~0.8988465674311579E308, 0.8988465674311579E308) = inf +atan2 (~0.8988465674311579E308, 0.123E4) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E4) = inf +atan2 (~0.8988465674311579E308, 0.123E2) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E2) = nan +atan2 (~0.8988465674311579E308, 0.3141592653589793E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.3141592653589793E1) = nan +atan2 (~0.8988465674311579E308, 0.2718281828459045E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.2718281828459045E1) = nan +atan2 (~0.8988465674311579E308, 0.123E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E1) = nan +atan2 (~0.8988465674311579E308, 0.123) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123) = nan +atan2 (~0.8988465674311579E308, 0.123E~2) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E~2) = nan +atan2 (~0.8988465674311579E308, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.8988465674311579E308, 0.22250738585072014E~307) = nan +atan2 (~0.8988465674311579E308, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.8988465674311579E308, 0.11125369292536007E~307) = nan +atan2 (~0.8988465674311579E308, 0.5E~323) = ~1.570796327 +pow (~0.8988465674311579E308, 0.5E~323) = nan +atan2 (~0.8988465674311579E308, 0.0) = ~1.570796327 +pow (~0.8988465674311579E308, 0.0) = 1 +atan2 (~0.8988465674311579E308, ~0.17976931348623157E309) = ~2.677945045 +pow (~0.8988465674311579E308, ~0.17976931348623157E309) = 0 +atan2 (~0.8988465674311579E308, ~0.8988465674311579E308) = ~2.35619449 +pow (~0.8988465674311579E308, ~0.8988465674311579E308) = 0 +atan2 (~0.8988465674311579E308, ~0.123E4) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E4) = 0 +atan2 (~0.8988465674311579E308, ~0.123E2) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E2) = nan +atan2 (~0.8988465674311579E308, ~0.3141592653589793E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.3141592653589793E1) = nan +atan2 (~0.8988465674311579E308, ~0.2718281828459045E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.2718281828459045E1) = nan +atan2 (~0.8988465674311579E308, ~0.123E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E1) = nan +atan2 (~0.8988465674311579E308, ~0.123) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123) = nan +atan2 (~0.8988465674311579E308, ~0.123E~2) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E~2) = nan +atan2 (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.22250738585072014E~307) = nan +atan2 (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.11125369292536007E~307) = nan +atan2 (~0.8988465674311579E308, ~0.5E~323) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.5E~323) = nan +atan2 (~0.8988465674311579E308, ~0.0) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.0) = 1 +atan2 (~0.8988465674311579E308, inf) = 0 +pow (~0.8988465674311579E308, inf) = inf +atan2 (~0.8988465674311579E308, ~inf) = ~3.141592654 +pow (~0.8988465674311579E308, ~inf) = 0 +atan2 (~0.8988465674311579E308, nan) = nan +pow (~0.8988465674311579E308, nan) = nan +atan2 (~0.8988465674311579E308, inf) = 0 +pow (~0.8988465674311579E308, inf) = inf +atan2 (~0.123E4, 0.17976931348623157E309) = ~6.842102115E~306 +pow (~0.123E4, 0.17976931348623157E309) = inf +atan2 (~0.123E4, 0.8988465674311579E308) = ~1.368420423E~305 +pow (~0.123E4, 0.8988465674311579E308) = inf +atan2 (~0.123E4, 0.123E4) = ~0.7853981634 +pow (~0.123E4, 0.123E4) = inf +atan2 (~0.123E4, 0.123E2) = ~1.56079666 +pow (~0.123E4, 0.123E2) = nan +atan2 (~0.123E4, 0.3141592653589793E1) = ~1.568242192 +pow (~0.123E4, 0.3141592653589793E1) = nan +atan2 (~0.123E4, 0.2718281828459045E1) = ~1.568586345 +pow (~0.123E4, 0.2718281828459045E1) = nan +atan2 (~0.123E4, 0.123E1) = ~1.569796327 +pow (~0.123E4, 0.123E1) = nan +atan2 (~0.123E4, 0.123) = ~1.570696327 +pow (~0.123E4, 0.123) = nan +atan2 (~0.123E4, 0.123E~2) = ~1.570795327 +pow (~0.123E4, 0.123E~2) = nan +atan2 (~0.123E4, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E4, 0.22250738585072014E~307) = nan +atan2 (~0.123E4, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E4, 0.11125369292536007E~307) = nan +atan2 (~0.123E4, 0.5E~323) = ~1.570796327 +pow (~0.123E4, 0.5E~323) = nan +atan2 (~0.123E4, 0.0) = ~1.570796327 +pow (~0.123E4, 0.0) = 1 +atan2 (~0.123E4, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E4, ~0.17976931348623157E309) = 0 +atan2 (~0.123E4, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E4, ~0.8988465674311579E308) = 0 +atan2 (~0.123E4, ~0.123E4) = ~2.35619449 +pow (~0.123E4, ~0.123E4) = 0 +atan2 (~0.123E4, ~0.123E2) = ~1.580795993 +pow (~0.123E4, ~0.123E2) = nan +atan2 (~0.123E4, ~0.3141592653589793E1) = ~1.573350462 +pow (~0.123E4, ~0.3141592653589793E1) = nan +atan2 (~0.123E4, ~0.2718281828459045E1) = ~1.573006308 +pow (~0.123E4, ~0.2718281828459045E1) = nan +atan2 (~0.123E4, ~0.123E1) = ~1.571796326 +pow (~0.123E4, ~0.123E1) = nan +atan2 (~0.123E4, ~0.123) = ~1.570896327 +pow (~0.123E4, ~0.123) = nan +atan2 (~0.123E4, ~0.123E~2) = ~1.570797327 +pow (~0.123E4, ~0.123E~2) = nan +atan2 (~0.123E4, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E4, ~0.22250738585072014E~307) = nan +atan2 (~0.123E4, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E4, ~0.11125369292536007E~307) = nan +atan2 (~0.123E4, ~0.5E~323) = ~1.570796327 +pow (~0.123E4, ~0.5E~323) = nan +atan2 (~0.123E4, ~0.0) = ~1.570796327 +pow (~0.123E4, ~0.0) = 1 +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E4, ~inf) = ~3.141592654 +pow (~0.123E4, ~inf) = 0 +atan2 (~0.123E4, nan) = nan +pow (~0.123E4, nan) = nan +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E2, 0.17976931348623157E309) = ~6.842102115E~308 +pow (~0.123E2, 0.17976931348623157E309) = inf +atan2 (~0.123E2, 0.8988465674311579E308) = ~1.368420423E~307 +pow (~0.123E2, 0.8988465674311579E308) = inf +atan2 (~0.123E2, 0.123E4) = ~0.009999666687 +pow (~0.123E2, 0.123E4) = inf +atan2 (~0.123E2, 0.123E2) = ~0.7853981634 +pow (~0.123E2, 0.123E2) = nan +atan2 (~0.123E2, 0.3141592653589793E1) = ~1.320728626 +pow (~0.123E2, 0.3141592653589793E1) = nan +atan2 (~0.123E2, 0.2718281828459045E1) = ~1.353293796 +pow (~0.123E2, 0.2718281828459045E1) = nan +atan2 (~0.123E2, 0.123E1) = ~1.471127674 +pow (~0.123E2, 0.123E1) = nan +atan2 (~0.123E2, 0.123) = ~1.56079666 +pow (~0.123E2, 0.123) = nan +atan2 (~0.123E2, 0.123E~2) = ~1.570696327 +pow (~0.123E2, 0.123E~2) = nan +atan2 (~0.123E2, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E2, 0.22250738585072014E~307) = nan +atan2 (~0.123E2, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E2, 0.11125369292536007E~307) = nan +atan2 (~0.123E2, 0.5E~323) = ~1.570796327 +pow (~0.123E2, 0.5E~323) = nan +atan2 (~0.123E2, 0.0) = ~1.570796327 +pow (~0.123E2, 0.0) = 1 +atan2 (~0.123E2, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E2, ~0.17976931348623157E309) = 0 +atan2 (~0.123E2, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E2, ~0.8988465674311579E308) = 0 +atan2 (~0.123E2, ~0.123E4) = ~3.131592987 +pow (~0.123E2, ~0.123E4) = 0 +atan2 (~0.123E2, ~0.123E2) = ~2.35619449 +pow (~0.123E2, ~0.123E2) = nan +atan2 (~0.123E2, ~0.3141592653589793E1) = ~1.820864027 +pow (~0.123E2, ~0.3141592653589793E1) = nan +atan2 (~0.123E2, ~0.2718281828459045E1) = ~1.788298857 +pow (~0.123E2, ~0.2718281828459045E1) = nan +atan2 (~0.123E2, ~0.123E1) = ~1.670464979 +pow (~0.123E2, ~0.123E1) = nan +atan2 (~0.123E2, ~0.123) = ~1.580795993 +pow (~0.123E2, ~0.123) = nan +atan2 (~0.123E2, ~0.123E~2) = ~1.570896327 +pow (~0.123E2, ~0.123E~2) = nan +atan2 (~0.123E2, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E2, ~0.22250738585072014E~307) = nan +atan2 (~0.123E2, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E2, ~0.11125369292536007E~307) = nan +atan2 (~0.123E2, ~0.5E~323) = ~1.570796327 +pow (~0.123E2, ~0.5E~323) = nan +atan2 (~0.123E2, ~0.0) = ~1.570796327 +pow (~0.123E2, ~0.0) = 1 +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.123E2, ~inf) = ~3.141592654 +pow (~0.123E2, ~inf) = 0 +atan2 (~0.123E2, nan) = nan +pow (~0.123E2, nan) = nan +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.3141592653589793E1, 0.17976931348623157E309) = ~1.747568922E~308 +pow (~0.3141592653589793E1, 0.17976931348623157E309) = inf +atan2 (~0.3141592653589793E1, 0.8988465674311579E308) = ~3.495137844E~308 +pow (~0.3141592653589793E1, 0.8988465674311579E308) = inf +atan2 (~0.3141592653589793E1, 0.123E4) = ~0.002554134815 +pow (~0.3141592653589793E1, 0.123E4) = inf +atan2 (~0.3141592653589793E1, 0.123E2) = ~0.2500677004 +pow (~0.3141592653589793E1, 0.123E2) = nan +atan2 (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.7853981634 +pow (~0.3141592653589793E1, 0.3141592653589793E1) = nan +atan2 (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.8575117864 +pow (~0.3141592653589793E1, 0.2718281828459045E1) = nan +atan2 (~0.3141592653589793E1, 0.123E1) = ~1.197620596 +pow (~0.3141592653589793E1, 0.123E1) = nan +atan2 (~0.3141592653589793E1, 0.123) = ~1.531664198 +pow (~0.3141592653589793E1, 0.123) = nan +atan2 (~0.3141592653589793E1, 0.123E~2) = ~1.570404806 +pow (~0.3141592653589793E1, 0.123E~2) = nan +atan2 (~0.3141592653589793E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.3141592653589793E1, 0.22250738585072014E~307) = nan +atan2 (~0.3141592653589793E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.3141592653589793E1, 0.11125369292536007E~307) = nan +atan2 (~0.3141592653589793E1, 0.5E~323) = ~1.570796327 +pow (~0.3141592653589793E1, 0.5E~323) = nan +atan2 (~0.3141592653589793E1, 0.0) = ~1.570796327 +pow (~0.3141592653589793E1, 0.0) = 1 +atan2 (~0.3141592653589793E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.3141592653589793E1, ~0.17976931348623157E309) = 0 +atan2 (~0.3141592653589793E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.3141592653589793E1, ~0.8988465674311579E308) = 0 +atan2 (~0.3141592653589793E1, ~0.123E4) = ~3.139038519 +pow (~0.3141592653589793E1, ~0.123E4) = 0 +atan2 (~0.3141592653589793E1, ~0.123E2) = ~2.891524953 +pow (~0.3141592653589793E1, ~0.123E2) = nan +atan2 (~0.3141592653589793E1, ~0.3141592653589793E1) = ~2.35619449 +pow (~0.3141592653589793E1, ~0.3141592653589793E1) = nan +atan2 (~0.3141592653589793E1, ~0.2718281828459045E1) = ~2.284080867 +pow (~0.3141592653589793E1, ~0.2718281828459045E1) = nan +atan2 (~0.3141592653589793E1, ~0.123E1) = ~1.943972057 +pow (~0.3141592653589793E1, ~0.123E1) = nan +atan2 (~0.3141592653589793E1, ~0.123) = ~1.609928456 +pow (~0.3141592653589793E1, ~0.123) = nan +atan2 (~0.3141592653589793E1, ~0.123E~2) = ~1.571187848 +pow (~0.3141592653589793E1, ~0.123E~2) = nan +atan2 (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.22250738585072014E~307) = nan +atan2 (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.11125369292536007E~307) = nan +atan2 (~0.3141592653589793E1, ~0.5E~323) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.5E~323) = nan +atan2 (~0.3141592653589793E1, ~0.0) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.0) = 1 +atan2 (~0.3141592653589793E1, inf) = 0 +pow (~0.3141592653589793E1, inf) = inf +atan2 (~0.3141592653589793E1, ~inf) = ~3.141592654 +pow (~0.3141592653589793E1, ~inf) = 0 +atan2 (~0.3141592653589793E1, nan) = nan +pow (~0.3141592653589793E1, nan) = nan +atan2 (~0.3141592653589793E1, inf) = 0 +pow (~0.3141592653589793E1, inf) = inf +atan2 (~0.2718281828459045E1, 0.17976931348623157E309) = ~1.512094459E~308 +pow (~0.2718281828459045E1, 0.17976931348623157E309) = inf +atan2 (~0.2718281828459045E1, 0.8988465674311579E308) = ~3.024188918E~308 +pow (~0.2718281828459045E1, 0.8988465674311579E308) = inf +atan2 (~0.2718281828459045E1, 0.123E4) = ~0.002209981629 +pow (~0.2718281828459045E1, 0.123E4) = inf +atan2 (~0.2718281828459045E1, 0.123E2) = ~0.2175025304 +pow (~0.2718281828459045E1, 0.123E2) = nan +atan2 (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.7132845404 +pow (~0.2718281828459045E1, 0.3141592653589793E1) = nan +atan2 (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.7853981634 +pow (~0.2718281828459045E1, 0.2718281828459045E1) = nan +atan2 (~0.2718281828459045E1, 0.123E1) = ~1.145872224 +pow (~0.2718281828459045E1, 0.123E1) = nan +atan2 (~0.2718281828459045E1, 0.123) = ~1.525578 +pow (~0.2718281828459045E1, 0.123) = nan +atan2 (~0.2718281828459045E1, 0.123E~2) = ~1.570343835 +pow (~0.2718281828459045E1, 0.123E~2) = nan +atan2 (~0.2718281828459045E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.2718281828459045E1, 0.22250738585072014E~307) = nan +atan2 (~0.2718281828459045E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.2718281828459045E1, 0.11125369292536007E~307) = nan +atan2 (~0.2718281828459045E1, 0.5E~323) = ~1.570796327 +pow (~0.2718281828459045E1, 0.5E~323) = nan +atan2 (~0.2718281828459045E1, 0.0) = ~1.570796327 +pow (~0.2718281828459045E1, 0.0) = 1 +atan2 (~0.2718281828459045E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.2718281828459045E1, ~0.17976931348623157E309) = 0 +atan2 (~0.2718281828459045E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.2718281828459045E1, ~0.8988465674311579E308) = 0 +atan2 (~0.2718281828459045E1, ~0.123E4) = ~3.139382672 +pow (~0.2718281828459045E1, ~0.123E4) = 0 +atan2 (~0.2718281828459045E1, ~0.123E2) = ~2.924090123 +pow (~0.2718281828459045E1, ~0.123E2) = nan +atan2 (~0.2718281828459045E1, ~0.3141592653589793E1) = ~2.428308113 +pow (~0.2718281828459045E1, ~0.3141592653589793E1) = nan +atan2 (~0.2718281828459045E1, ~0.2718281828459045E1) = ~2.35619449 +pow (~0.2718281828459045E1, ~0.2718281828459045E1) = nan +atan2 (~0.2718281828459045E1, ~0.123E1) = ~1.99572043 +pow (~0.2718281828459045E1, ~0.123E1) = nan +atan2 (~0.2718281828459045E1, ~0.123) = ~1.616014654 +pow (~0.2718281828459045E1, ~0.123) = nan +atan2 (~0.2718281828459045E1, ~0.123E~2) = ~1.571248818 +pow (~0.2718281828459045E1, ~0.123E~2) = nan +atan2 (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.22250738585072014E~307) = nan +atan2 (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.11125369292536007E~307) = nan +atan2 (~0.2718281828459045E1, ~0.5E~323) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.5E~323) = nan +atan2 (~0.2718281828459045E1, ~0.0) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.0) = 1 +atan2 (~0.2718281828459045E1, inf) = 0 +pow (~0.2718281828459045E1, inf) = inf +atan2 (~0.2718281828459045E1, ~inf) = ~3.141592654 +pow (~0.2718281828459045E1, ~inf) = 0 +atan2 (~0.2718281828459045E1, nan) = nan +pow (~0.2718281828459045E1, nan) = nan +atan2 (~0.2718281828459045E1, inf) = 0 +pow (~0.2718281828459045E1, inf) = inf +atan2 (~0.123E1, 0.17976931348623157E309) = ~6.842102115E~309 +pow (~0.123E1, 0.17976931348623157E309) = inf +atan2 (~0.123E1, 0.8988465674311579E308) = ~1.368420423E~308 +pow (~0.123E1, 0.8988465674311579E308) = inf +atan2 (~0.123E1, 0.123E4) = ~9.999996667E~4 +pow (~0.123E1, 0.123E4) = 3.830778757E110 +atan2 (~0.123E1, 0.123E2) = ~0.09966865249 +pow (~0.123E1, 0.123E2) = nan +atan2 (~0.123E1, 0.3141592653589793E1) = ~0.3731757303 +pow (~0.123E1, 0.3141592653589793E1) = nan +atan2 (~0.123E1, 0.2718281828459045E1) = ~0.4249241031 +pow (~0.123E1, 0.2718281828459045E1) = nan +atan2 (~0.123E1, 0.123E1) = ~0.7853981634 +pow (~0.123E1, 0.123E1) = nan +atan2 (~0.123E1, 0.123) = ~1.471127674 +pow (~0.123E1, 0.123) = nan +atan2 (~0.123E1, 0.123E~2) = ~1.569796327 +pow (~0.123E1, 0.123E~2) = nan +atan2 (~0.123E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E1, 0.22250738585072014E~307) = nan +atan2 (~0.123E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E1, 0.11125369292536007E~307) = nan +atan2 (~0.123E1, 0.5E~323) = ~1.570796327 +pow (~0.123E1, 0.5E~323) = nan +atan2 (~0.123E1, 0.0) = ~1.570796327 +pow (~0.123E1, 0.0) = 1 +atan2 (~0.123E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E1, ~0.17976931348623157E309) = 0 +atan2 (~0.123E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E1, ~0.8988465674311579E308) = 0 +atan2 (~0.123E1, ~0.123E4) = ~3.140592654 +pow (~0.123E1, ~0.123E4) = 2.610435275E~111 +atan2 (~0.123E1, ~0.123E2) = ~3.041924001 +pow (~0.123E1, ~0.123E2) = nan +atan2 (~0.123E1, ~0.3141592653589793E1) = ~2.768416923 +pow (~0.123E1, ~0.3141592653589793E1) = nan +atan2 (~0.123E1, ~0.2718281828459045E1) = ~2.71666855 +pow (~0.123E1, ~0.2718281828459045E1) = nan +atan2 (~0.123E1, ~0.123E1) = ~2.35619449 +pow (~0.123E1, ~0.123E1) = nan +atan2 (~0.123E1, ~0.123) = ~1.670464979 +pow (~0.123E1, ~0.123) = nan +atan2 (~0.123E1, ~0.123E~2) = ~1.571796326 +pow (~0.123E1, ~0.123E~2) = nan +atan2 (~0.123E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E1, ~0.22250738585072014E~307) = nan +atan2 (~0.123E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E1, ~0.11125369292536007E~307) = nan +atan2 (~0.123E1, ~0.5E~323) = ~1.570796327 +pow (~0.123E1, ~0.5E~323) = nan +atan2 (~0.123E1, ~0.0) = ~1.570796327 +pow (~0.123E1, ~0.0) = 1 +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123E1, ~inf) = ~3.141592654 +pow (~0.123E1, ~inf) = 0 +atan2 (~0.123E1, nan) = nan +pow (~0.123E1, nan) = nan +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123, 0.17976931348623157E309) = ~6.842102115E~310 +pow (~0.123, 0.17976931348623157E309) = 0 +atan2 (~0.123, 0.8988465674311579E308) = ~1.368420423E~309 +pow (~0.123, 0.8988465674311579E308) = 0 +atan2 (~0.123, 0.123E4) = ~9.999999967E~5 +pow (~0.123, 0.123E4) = 0 +atan2 (~0.123, 0.123E2) = ~0.009999666687 +pow (~0.123, 0.123E2) = nan +atan2 (~0.123, 0.3141592653589793E1) = ~0.03913212911 +pow (~0.123, 0.3141592653589793E1) = nan +atan2 (~0.123, 0.2718281828459045E1) = ~0.04521832678 +pow (~0.123, 0.2718281828459045E1) = nan +atan2 (~0.123, 0.123E1) = ~0.09966865249 +pow (~0.123, 0.123E1) = nan +atan2 (~0.123, 0.123) = ~0.7853981634 +pow (~0.123, 0.123) = nan +atan2 (~0.123, 0.123E~2) = ~1.56079666 +pow (~0.123, 0.123E~2) = nan +atan2 (~0.123, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123, 0.22250738585072014E~307) = nan +atan2 (~0.123, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123, 0.11125369292536007E~307) = nan +atan2 (~0.123, 0.5E~323) = ~1.570796327 +pow (~0.123, 0.5E~323) = nan +atan2 (~0.123, 0.0) = ~1.570796327 +pow (~0.123, 0.0) = 1 +atan2 (~0.123, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123, ~0.17976931348623157E309) = inf +atan2 (~0.123, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123, ~0.8988465674311579E308) = inf +atan2 (~0.123, ~0.123E4) = ~3.141492654 +pow (~0.123, ~0.123E4) = inf +atan2 (~0.123, ~0.123E2) = ~3.131592987 +pow (~0.123, ~0.123E2) = nan +atan2 (~0.123, ~0.3141592653589793E1) = ~3.102460524 +pow (~0.123, ~0.3141592653589793E1) = nan +atan2 (~0.123, ~0.2718281828459045E1) = ~3.096374327 +pow (~0.123, ~0.2718281828459045E1) = nan +atan2 (~0.123, ~0.123E1) = ~3.041924001 +pow (~0.123, ~0.123E1) = nan +atan2 (~0.123, ~0.123) = ~2.35619449 +pow (~0.123, ~0.123) = nan +atan2 (~0.123, ~0.123E~2) = ~1.580795993 +pow (~0.123, ~0.123E~2) = nan +atan2 (~0.123, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123, ~0.22250738585072014E~307) = nan +atan2 (~0.123, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123, ~0.11125369292536007E~307) = nan +atan2 (~0.123, ~0.5E~323) = ~1.570796327 +pow (~0.123, ~0.5E~323) = nan +atan2 (~0.123, ~0.0) = ~1.570796327 +pow (~0.123, ~0.0) = 1 +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123, ~inf) = ~3.141592654 +pow (~0.123, ~inf) = inf +atan2 (~0.123, nan) = nan +pow (~0.123, nan) = nan +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123E~2, 0.17976931348623157E309) = ~6.842102115E~312 +pow (~0.123E~2, 0.17976931348623157E309) = 0 +atan2 (~0.123E~2, 0.8988465674311579E308) = ~1.368420423E~311 +pow (~0.123E~2, 0.8988465674311579E308) = 0 +atan2 (~0.123E~2, 0.123E4) = ~1E~6 +pow (~0.123E~2, 0.123E4) = 0 +atan2 (~0.123E~2, 0.123E2) = ~9.999999967E~5 +pow (~0.123E~2, 0.123E2) = nan +atan2 (~0.123E~2, 0.3141592653589793E1) = ~3.9152114E~4 +pow (~0.123E~2, 0.3141592653589793E1) = nan +atan2 (~0.123E~2, 0.2718281828459045E1) = ~4.524916818E~4 +pow (~0.123E~2, 0.2718281828459045E1) = nan +atan2 (~0.123E~2, 0.123E1) = ~9.999996667E~4 +pow (~0.123E~2, 0.123E1) = nan +atan2 (~0.123E~2, 0.123) = ~0.009999666687 +pow (~0.123E~2, 0.123) = nan +atan2 (~0.123E~2, 0.123E~2) = ~0.7853981634 +pow (~0.123E~2, 0.123E~2) = nan +atan2 (~0.123E~2, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E~2, 0.22250738585072014E~307) = nan +atan2 (~0.123E~2, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E~2, 0.11125369292536007E~307) = nan +atan2 (~0.123E~2, 0.5E~323) = ~1.570796327 +pow (~0.123E~2, 0.5E~323) = nan +atan2 (~0.123E~2, 0.0) = ~1.570796327 +pow (~0.123E~2, 0.0) = 1 +atan2 (~0.123E~2, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E~2, ~0.17976931348623157E309) = inf +atan2 (~0.123E~2, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E~2, ~0.8988465674311579E308) = inf +atan2 (~0.123E~2, ~0.123E4) = ~3.141591654 +pow (~0.123E~2, ~0.123E4) = inf +atan2 (~0.123E~2, ~0.123E2) = ~3.141492654 +pow (~0.123E~2, ~0.123E2) = nan +atan2 (~0.123E~2, ~0.3141592653589793E1) = ~3.141201132 +pow (~0.123E~2, ~0.3141592653589793E1) = nan +atan2 (~0.123E~2, ~0.2718281828459045E1) = ~3.141140162 +pow (~0.123E~2, ~0.2718281828459045E1) = nan +atan2 (~0.123E~2, ~0.123E1) = ~3.140592654 +pow (~0.123E~2, ~0.123E1) = nan +atan2 (~0.123E~2, ~0.123) = ~3.131592987 +pow (~0.123E~2, ~0.123) = nan +atan2 (~0.123E~2, ~0.123E~2) = ~2.35619449 +pow (~0.123E~2, ~0.123E~2) = nan +atan2 (~0.123E~2, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E~2, ~0.22250738585072014E~307) = nan +atan2 (~0.123E~2, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E~2, ~0.11125369292536007E~307) = nan +atan2 (~0.123E~2, ~0.5E~323) = ~1.570796327 +pow (~0.123E~2, ~0.5E~323) = nan +atan2 (~0.123E~2, ~0.0) = ~1.570796327 +pow (~0.123E~2, ~0.0) = 1 +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.123E~2, ~inf) = ~3.141592654 +pow (~0.123E~2, ~inf) = inf +atan2 (~0.123E~2, nan) = nan +pow (~0.123E~2, nan) = nan +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.22250738585072014E~307, 0.17976931348623157E309) = 0 +pow (~0.22250738585072014E~307, 0.17976931348623157E309) = 0 +atan2 (~0.22250738585072014E~307, 0.8988465674311579E308) = 0 +pow (~0.22250738585072014E~307, 0.8988465674311579E308) = 0 +atan2 (~0.22250738585072014E~307, 0.123E4) = ~1.809003137E~311 +pow (~0.22250738585072014E~307, 0.123E4) = 0 +atan2 (~0.22250738585072014E~307, 0.123E2) = ~1.809003137E~309 +pow (~0.22250738585072014E~307, 0.123E2) = nan +atan2 (~0.22250738585072014E~307, 0.3141592653589793E1) = ~7.082630067E~309 +pow (~0.22250738585072014E~307, 0.3141592653589793E1) = nan +atan2 (~0.22250738585072014E~307, 0.2718281828459045E1) = ~8.185589276E~309 +pow (~0.22250738585072014E~307, 0.2718281828459045E1) = nan +atan2 (~0.22250738585072014E~307, 0.123E1) = ~1.809003137E~308 +pow (~0.22250738585072014E~307, 0.123E1) = nan +atan2 (~0.22250738585072014E~307, 0.123) = ~1.809003137E~307 +pow (~0.22250738585072014E~307, 0.123) = nan +atan2 (~0.22250738585072014E~307, 0.123E~2) = ~1.809003137E~305 +pow (~0.22250738585072014E~307, 0.123E~2) = nan +atan2 (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.7853981634 +pow (~0.22250738585072014E~307, 0.22250738585072014E~307) = nan +atan2 (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~1.107148718 +pow (~0.22250738585072014E~307, 0.11125369292536007E~307) = nan +atan2 (~0.22250738585072014E~307, 0.5E~323) = ~1.570796327 +pow (~0.22250738585072014E~307, 0.5E~323) = nan +atan2 (~0.22250738585072014E~307, 0.0) = ~1.570796327 +pow (~0.22250738585072014E~307, 0.0) = 1 +atan2 (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.17976931348623157E309) = inf +atan2 (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.8988465674311579E308) = inf +atan2 (~0.22250738585072014E~307, ~0.123E4) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E4) = inf +atan2 (~0.22250738585072014E~307, ~0.123E2) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E2) = nan +atan2 (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.3141592653589793E1) = nan +atan2 (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.2718281828459045E1) = nan +atan2 (~0.22250738585072014E~307, ~0.123E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E1) = nan +atan2 (~0.22250738585072014E~307, ~0.123) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123) = nan +atan2 (~0.22250738585072014E~307, ~0.123E~2) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E~2) = nan +atan2 (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~2.35619449 +pow (~0.22250738585072014E~307, ~0.22250738585072014E~307) = nan +atan2 (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~2.034443936 +pow (~0.22250738585072014E~307, ~0.11125369292536007E~307) = nan +atan2 (~0.22250738585072014E~307, ~0.5E~323) = ~1.570796327 +pow (~0.22250738585072014E~307, ~0.5E~323) = nan +atan2 (~0.22250738585072014E~307, ~0.0) = ~1.570796327 +pow (~0.22250738585072014E~307, ~0.0) = 1 +atan2 (~0.22250738585072014E~307, inf) = 0 +pow (~0.22250738585072014E~307, inf) = 0 +atan2 (~0.22250738585072014E~307, ~inf) = ~3.141592654 +pow (~0.22250738585072014E~307, ~inf) = inf +atan2 (~0.22250738585072014E~307, nan) = nan +pow (~0.22250738585072014E~307, nan) = nan +atan2 (~0.22250738585072014E~307, inf) = 0 +pow (~0.22250738585072014E~307, inf) = 0 +atan2 (~0.11125369292536007E~307, 0.17976931348623157E309) = 0 +pow (~0.11125369292536007E~307, 0.17976931348623157E309) = 0 +atan2 (~0.11125369292536007E~307, 0.8988465674311579E308) = 0 +pow (~0.11125369292536007E~307, 0.8988465674311579E308) = 0 +atan2 (~0.11125369292536007E~307, 0.123E4) = ~9.045015685E~312 +pow (~0.11125369292536007E~307, 0.123E4) = 0 +atan2 (~0.11125369292536007E~307, 0.123E2) = ~9.045015685E~310 +pow (~0.11125369292536007E~307, 0.123E2) = nan +atan2 (~0.11125369292536007E~307, 0.3141592653589793E1) = ~3.541315033E~309 +pow (~0.11125369292536007E~307, 0.3141592653589793E1) = nan +atan2 (~0.11125369292536007E~307, 0.2718281828459045E1) = ~4.092794638E~309 +pow (~0.11125369292536007E~307, 0.2718281828459045E1) = nan +atan2 (~0.11125369292536007E~307, 0.123E1) = ~9.045015685E~309 +pow (~0.11125369292536007E~307, 0.123E1) = nan +atan2 (~0.11125369292536007E~307, 0.123) = ~9.045015685E~308 +pow (~0.11125369292536007E~307, 0.123) = nan +atan2 (~0.11125369292536007E~307, 0.123E~2) = ~9.045015685E~306 +pow (~0.11125369292536007E~307, 0.123E~2) = nan +atan2 (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.463647609 +pow (~0.11125369292536007E~307, 0.22250738585072014E~307) = nan +atan2 (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.7853981634 +pow (~0.11125369292536007E~307, 0.11125369292536007E~307) = nan +atan2 (~0.11125369292536007E~307, 0.5E~323) = ~1.570796327 +pow (~0.11125369292536007E~307, 0.5E~323) = nan +atan2 (~0.11125369292536007E~307, 0.0) = ~1.570796327 +pow (~0.11125369292536007E~307, 0.0) = 1 +atan2 (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.17976931348623157E309) = inf +atan2 (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.8988465674311579E308) = inf +atan2 (~0.11125369292536007E~307, ~0.123E4) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E4) = inf +atan2 (~0.11125369292536007E~307, ~0.123E2) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E2) = nan +atan2 (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.3141592653589793E1) = nan +atan2 (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.2718281828459045E1) = nan +atan2 (~0.11125369292536007E~307, ~0.123E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E1) = nan +atan2 (~0.11125369292536007E~307, ~0.123) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123) = nan +atan2 (~0.11125369292536007E~307, ~0.123E~2) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E~2) = nan +atan2 (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~2.677945045 +pow (~0.11125369292536007E~307, ~0.22250738585072014E~307) = nan +atan2 (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~2.35619449 +pow (~0.11125369292536007E~307, ~0.11125369292536007E~307) = nan +atan2 (~0.11125369292536007E~307, ~0.5E~323) = ~1.570796327 +pow (~0.11125369292536007E~307, ~0.5E~323) = nan +atan2 (~0.11125369292536007E~307, ~0.0) = ~1.570796327 +pow (~0.11125369292536007E~307, ~0.0) = 1 +atan2 (~0.11125369292536007E~307, inf) = 0 +pow (~0.11125369292536007E~307, inf) = 0 +atan2 (~0.11125369292536007E~307, ~inf) = ~3.141592654 +pow (~0.11125369292536007E~307, ~inf) = inf +atan2 (~0.11125369292536007E~307, nan) = nan +pow (~0.11125369292536007E~307, nan) = nan +atan2 (~0.11125369292536007E~307, inf) = 0 +pow (~0.11125369292536007E~307, inf) = 0 +atan2 (~0.5E~323, 0.17976931348623157E309) = 0 +pow (~0.5E~323, 0.17976931348623157E309) = 0 +atan2 (~0.5E~323, 0.8988465674311579E308) = 0 +pow (~0.5E~323, 0.8988465674311579E308) = 0 +atan2 (~0.5E~323, 0.123E4) = 0 +pow (~0.5E~323, 0.123E4) = 0 +atan2 (~0.5E~323, 0.123E2) = 0 +pow (~0.5E~323, 0.123E2) = nan +atan2 (~0.5E~323, 0.3141592653589793E1) = 0 +pow (~0.5E~323, 0.3141592653589793E1) = nan +atan2 (~0.5E~323, 0.2718281828459045E1) = 0 +pow (~0.5E~323, 0.2718281828459045E1) = nan +atan2 (~0.5E~323, 0.123E1) = ~4.940656458E~324 +pow (~0.5E~323, 0.123E1) = nan +atan2 (~0.5E~323, 0.123) = ~3.952525167E~323 +pow (~0.5E~323, 0.123) = nan +atan2 (~0.5E~323, 0.123E~2) = ~4.016753701E~321 +pow (~0.5E~323, 0.123E~2) = nan +atan2 (~0.5E~323, 0.22250738585072014E~307) = ~2.220446049E~16 +pow (~0.5E~323, 0.22250738585072014E~307) = nan +atan2 (~0.5E~323, 0.11125369292536007E~307) = ~4.440892099E~16 +pow (~0.5E~323, 0.11125369292536007E~307) = nan +atan2 (~0.5E~323, 0.5E~323) = ~0.7853981634 +pow (~0.5E~323, 0.5E~323) = nan +atan2 (~0.5E~323, 0.0) = ~1.570796327 +pow (~0.5E~323, 0.0) = 1 +atan2 (~0.5E~323, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.5E~323, ~0.17976931348623157E309) = inf +atan2 (~0.5E~323, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.5E~323, ~0.8988465674311579E308) = inf +atan2 (~0.5E~323, ~0.123E4) = ~3.141592654 +pow (~0.5E~323, ~0.123E4) = inf +atan2 (~0.5E~323, ~0.123E2) = ~3.141592654 +pow (~0.5E~323, ~0.123E2) = nan +atan2 (~0.5E~323, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.5E~323, ~0.3141592653589793E1) = nan +atan2 (~0.5E~323, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.5E~323, ~0.2718281828459045E1) = nan +atan2 (~0.5E~323, ~0.123E1) = ~3.141592654 +pow (~0.5E~323, ~0.123E1) = nan +atan2 (~0.5E~323, ~0.123) = ~3.141592654 +pow (~0.5E~323, ~0.123) = nan +atan2 (~0.5E~323, ~0.123E~2) = ~3.141592654 +pow (~0.5E~323, ~0.123E~2) = nan +atan2 (~0.5E~323, ~0.22250738585072014E~307) = ~3.141592654 +pow (~0.5E~323, ~0.22250738585072014E~307) = nan +atan2 (~0.5E~323, ~0.11125369292536007E~307) = ~3.141592654 +pow (~0.5E~323, ~0.11125369292536007E~307) = nan +atan2 (~0.5E~323, ~0.5E~323) = ~2.35619449 +pow (~0.5E~323, ~0.5E~323) = nan +atan2 (~0.5E~323, ~0.0) = ~1.570796327 +pow (~0.5E~323, ~0.0) = 1 +atan2 (~0.5E~323, inf) = 0 +pow (~0.5E~323, inf) = 0 +atan2 (~0.5E~323, ~inf) = ~3.141592654 +pow (~0.5E~323, ~inf) = inf +atan2 (~0.5E~323, nan) = nan +pow (~0.5E~323, nan) = nan +atan2 (~0.5E~323, inf) = 0 +pow (~0.5E~323, inf) = 0 +atan2 (~0.0, 0.17976931348623157E309) = 0 +pow (~0.0, 0.17976931348623157E309) = 0 +atan2 (~0.0, 0.8988465674311579E308) = 0 +pow (~0.0, 0.8988465674311579E308) = 0 +atan2 (~0.0, 0.123E4) = 0 +pow (~0.0, 0.123E4) = 0 +atan2 (~0.0, 0.123E2) = 0 +pow (~0.0, 0.123E2) = 0 +atan2 (~0.0, 0.3141592653589793E1) = 0 +pow (~0.0, 0.3141592653589793E1) = 0 +atan2 (~0.0, 0.2718281828459045E1) = 0 +pow (~0.0, 0.2718281828459045E1) = 0 +atan2 (~0.0, 0.123E1) = 0 +pow (~0.0, 0.123E1) = 0 +atan2 (~0.0, 0.123) = 0 +pow (~0.0, 0.123) = 0 +atan2 (~0.0, 0.123E~2) = 0 +pow (~0.0, 0.123E~2) = 0 +atan2 (~0.0, 0.22250738585072014E~307) = 0 +pow (~0.0, 0.22250738585072014E~307) = 0 +atan2 (~0.0, 0.11125369292536007E~307) = 0 +pow (~0.0, 0.11125369292536007E~307) = 0 +atan2 (~0.0, 0.5E~323) = 0 +pow (~0.0, 0.5E~323) = 0 +atan2 (~0.0, 0.0) = 0 +pow (~0.0, 0.0) = 1 +atan2 (~0.0, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.0, ~0.17976931348623157E309) = inf +atan2 (~0.0, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.0, ~0.8988465674311579E308) = inf +atan2 (~0.0, ~0.123E4) = ~3.141592654 +pow (~0.0, ~0.123E4) = inf +atan2 (~0.0, ~0.123E2) = ~3.141592654 +pow (~0.0, ~0.123E2) = inf +atan2 (~0.0, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.0, ~0.3141592653589793E1) = inf +atan2 (~0.0, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.0, ~0.2718281828459045E1) = inf +atan2 (~0.0, ~0.123E1) = ~3.141592654 +pow (~0.0, ~0.123E1) = inf +atan2 (~0.0, ~0.123) = ~3.141592654 +pow (~0.0, ~0.123) = inf +atan2 (~0.0, ~0.123E~2) = ~3.141592654 +pow (~0.0, ~0.123E~2) = inf +atan2 (~0.0, ~0.22250738585072014E~307) = ~3.141592654 +pow (~0.0, ~0.22250738585072014E~307) = inf +atan2 (~0.0, ~0.11125369292536007E~307) = ~3.141592654 +pow (~0.0, ~0.11125369292536007E~307) = inf +atan2 (~0.0, ~0.5E~323) = ~3.141592654 +pow (~0.0, ~0.5E~323) = inf +atan2 (~0.0, ~0.0) = ~3.141592654 +pow (~0.0, ~0.0) = 1 +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (~0.0, ~inf) = ~3.141592654 +pow (~0.0, ~inf) = inf +atan2 (~0.0, nan) = nan +pow (~0.0, nan) = nan +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (inf, 0.17976931348623157E309) = 1.570796327 +pow (inf, 0.17976931348623157E309) = inf +atan2 (inf, 0.8988465674311579E308) = 1.570796327 +pow (inf, 0.8988465674311579E308) = inf +atan2 (inf, 0.123E4) = 1.570796327 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796327 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.3141592653589793E1) = 1.570796327 +pow (inf, 0.3141592653589793E1) = inf +atan2 (inf, 0.2718281828459045E1) = 1.570796327 +pow (inf, 0.2718281828459045E1) = inf +atan2 (inf, 0.123E1) = 1.570796327 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796327 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796327 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.22250738585072014E~307) = 1.570796327 +pow (inf, 0.22250738585072014E~307) = inf +atan2 (inf, 0.11125369292536007E~307) = 1.570796327 +pow (inf, 0.11125369292536007E~307) = inf +atan2 (inf, 0.5E~323) = 1.570796327 +pow (inf, 0.5E~323) = inf +atan2 (inf, 0.0) = 1.570796327 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.17976931348623157E309) = 1.570796327 +pow (inf, ~0.17976931348623157E309) = 0 +atan2 (inf, ~0.8988465674311579E308) = 1.570796327 +pow (inf, ~0.8988465674311579E308) = 0 +atan2 (inf, ~0.123E4) = 1.570796327 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796327 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.3141592653589793E1) = 1.570796327 +pow (inf, ~0.3141592653589793E1) = 0 +atan2 (inf, ~0.2718281828459045E1) = 1.570796327 +pow (inf, ~0.2718281828459045E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796327 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796327 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796327 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.22250738585072014E~307) = 1.570796327 +pow (inf, ~0.22250738585072014E~307) = 0 +atan2 (inf, ~0.11125369292536007E~307) = 1.570796327 +pow (inf, ~0.11125369292536007E~307) = 0 +atan2 (inf, ~0.5E~323) = 1.570796327 +pow (inf, ~0.5E~323) = 0 +atan2 (inf, ~0.0) = 1.570796327 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.35619449 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (~inf, 0.17976931348623157E309) = ~1.570796327 +pow (~inf, 0.17976931348623157E309) = inf +atan2 (~inf, 0.8988465674311579E308) = ~1.570796327 +pow (~inf, 0.8988465674311579E308) = inf +atan2 (~inf, 0.123E4) = ~1.570796327 +pow (~inf, 0.123E4) = inf +atan2 (~inf, 0.123E2) = ~1.570796327 +pow (~inf, 0.123E2) = inf +atan2 (~inf, 0.3141592653589793E1) = ~1.570796327 +pow (~inf, 0.3141592653589793E1) = inf +atan2 (~inf, 0.2718281828459045E1) = ~1.570796327 +pow (~inf, 0.2718281828459045E1) = inf +atan2 (~inf, 0.123E1) = ~1.570796327 +pow (~inf, 0.123E1) = inf +atan2 (~inf, 0.123) = ~1.570796327 +pow (~inf, 0.123) = inf +atan2 (~inf, 0.123E~2) = ~1.570796327 +pow (~inf, 0.123E~2) = inf +atan2 (~inf, 0.22250738585072014E~307) = ~1.570796327 +pow (~inf, 0.22250738585072014E~307) = inf +atan2 (~inf, 0.11125369292536007E~307) = ~1.570796327 +pow (~inf, 0.11125369292536007E~307) = inf +atan2 (~inf, 0.5E~323) = ~1.570796327 +pow (~inf, 0.5E~323) = inf +atan2 (~inf, 0.0) = ~1.570796327 +pow (~inf, 0.0) = 1 +atan2 (~inf, ~0.17976931348623157E309) = ~1.570796327 +pow (~inf, ~0.17976931348623157E309) = 0 +atan2 (~inf, ~0.8988465674311579E308) = ~1.570796327 +pow (~inf, ~0.8988465674311579E308) = 0 +atan2 (~inf, ~0.123E4) = ~1.570796327 +pow (~inf, ~0.123E4) = 0 +atan2 (~inf, ~0.123E2) = ~1.570796327 +pow (~inf, ~0.123E2) = 0 +atan2 (~inf, ~0.3141592653589793E1) = ~1.570796327 +pow (~inf, ~0.3141592653589793E1) = 0 +atan2 (~inf, ~0.2718281828459045E1) = ~1.570796327 +pow (~inf, ~0.2718281828459045E1) = 0 +atan2 (~inf, ~0.123E1) = ~1.570796327 +pow (~inf, ~0.123E1) = 0 +atan2 (~inf, ~0.123) = ~1.570796327 +pow (~inf, ~0.123) = 0 +atan2 (~inf, ~0.123E~2) = ~1.570796327 +pow (~inf, ~0.123E~2) = 0 +atan2 (~inf, ~0.22250738585072014E~307) = ~1.570796327 +pow (~inf, ~0.22250738585072014E~307) = 0 +atan2 (~inf, ~0.11125369292536007E~307) = ~1.570796327 +pow (~inf, ~0.11125369292536007E~307) = 0 +atan2 (~inf, ~0.5E~323) = ~1.570796327 +pow (~inf, ~0.5E~323) = 0 +atan2 (~inf, ~0.0) = ~1.570796327 +pow (~inf, ~0.0) = 1 +atan2 (~inf, inf) = ~0.7853981634 +pow (~inf, inf) = inf +atan2 (~inf, ~inf) = ~2.35619449 +pow (~inf, ~inf) = 0 +atan2 (~inf, nan) = nan +pow (~inf, nan) = nan +atan2 (~inf, inf) = ~0.7853981634 +pow (~inf, inf) = inf +atan2 (nan, 0.17976931348623157E309) = nan +pow (nan, 0.17976931348623157E309) = nan +atan2 (nan, 0.8988465674311579E308) = nan +pow (nan, 0.8988465674311579E308) = nan +atan2 (nan, 0.123E4) = nan +pow (nan, 0.123E4) = nan +atan2 (nan, 0.123E2) = nan +pow (nan, 0.123E2) = nan +atan2 (nan, 0.3141592653589793E1) = nan +pow (nan, 0.3141592653589793E1) = nan +atan2 (nan, 0.2718281828459045E1) = nan +pow (nan, 0.2718281828459045E1) = nan +atan2 (nan, 0.123E1) = nan +pow (nan, 0.123E1) = nan +atan2 (nan, 0.123) = nan +pow (nan, 0.123) = nan +atan2 (nan, 0.123E~2) = nan +pow (nan, 0.123E~2) = nan +atan2 (nan, 0.22250738585072014E~307) = nan +pow (nan, 0.22250738585072014E~307) = nan +atan2 (nan, 0.11125369292536007E~307) = nan +pow (nan, 0.11125369292536007E~307) = nan +atan2 (nan, 0.5E~323) = nan +pow (nan, 0.5E~323) = nan +atan2 (nan, 0.0) = nan +pow (nan, 0.0) = 1 +atan2 (nan, ~0.17976931348623157E309) = nan +pow (nan, ~0.17976931348623157E309) = nan +atan2 (nan, ~0.8988465674311579E308) = nan +pow (nan, ~0.8988465674311579E308) = nan +atan2 (nan, ~0.123E4) = nan +pow (nan, ~0.123E4) = nan +atan2 (nan, ~0.123E2) = nan +pow (nan, ~0.123E2) = nan +atan2 (nan, ~0.3141592653589793E1) = nan +pow (nan, ~0.3141592653589793E1) = nan +atan2 (nan, ~0.2718281828459045E1) = nan +pow (nan, ~0.2718281828459045E1) = nan +atan2 (nan, ~0.123E1) = nan +pow (nan, ~0.123E1) = nan +atan2 (nan, ~0.123) = nan +pow (nan, ~0.123) = nan +atan2 (nan, ~0.123E~2) = nan +pow (nan, ~0.123E~2) = nan +atan2 (nan, ~0.22250738585072014E~307) = nan +pow (nan, ~0.22250738585072014E~307) = nan +atan2 (nan, ~0.11125369292536007E~307) = nan +pow (nan, ~0.11125369292536007E~307) = nan +atan2 (nan, ~0.5E~323) = nan +pow (nan, ~0.5E~323) = nan +atan2 (nan, ~0.0) = nan +pow (nan, ~0.0) = 1 +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (nan, ~inf) = nan +pow (nan, ~inf) = nan +atan2 (nan, nan) = nan +pow (nan, nan) = nan +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (inf, 0.17976931348623157E309) = 1.570796327 +pow (inf, 0.17976931348623157E309) = inf +atan2 (inf, 0.8988465674311579E308) = 1.570796327 +pow (inf, 0.8988465674311579E308) = inf +atan2 (inf, 0.123E4) = 1.570796327 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796327 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.3141592653589793E1) = 1.570796327 +pow (inf, 0.3141592653589793E1) = inf +atan2 (inf, 0.2718281828459045E1) = 1.570796327 +pow (inf, 0.2718281828459045E1) = inf +atan2 (inf, 0.123E1) = 1.570796327 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796327 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796327 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.22250738585072014E~307) = 1.570796327 +pow (inf, 0.22250738585072014E~307) = inf +atan2 (inf, 0.11125369292536007E~307) = 1.570796327 +pow (inf, 0.11125369292536007E~307) = inf +atan2 (inf, 0.5E~323) = 1.570796327 +pow (inf, 0.5E~323) = inf +atan2 (inf, 0.0) = 1.570796327 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.17976931348623157E309) = 1.570796327 +pow (inf, ~0.17976931348623157E309) = 0 +atan2 (inf, ~0.8988465674311579E308) = 1.570796327 +pow (inf, ~0.8988465674311579E308) = 0 +atan2 (inf, ~0.123E4) = 1.570796327 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796327 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.3141592653589793E1) = 1.570796327 +pow (inf, ~0.3141592653589793E1) = 0 +atan2 (inf, ~0.2718281828459045E1) = 1.570796327 +pow (inf, ~0.2718281828459045E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796327 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796327 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796327 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.22250738585072014E~307) = 1.570796327 +pow (inf, ~0.22250738585072014E~307) = 0 +atan2 (inf, ~0.11125369292536007E~307) = 1.570796327 +pow (inf, ~0.11125369292536007E~307) = 0 +atan2 (inf, ~0.5E~323) = 1.570796327 +pow (inf, ~0.5E~323) = 0 +atan2 (inf, ~0.0) = 1.570796327 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.35619449 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf + +Testing *+, *- +SOME *+ AND STANDARD RESULTS DIFFER +(r1, r2, r3): *+(r1, r2, r3) (r1 * r2 + r3) +-------------------------------------------- +(0.17976931348623157E309, 0.123E1, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(0.17976931348623157E309, 0.123E1, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(0.17976931348623157E309, ~0.123E1, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(0.17976931348623157E309, ~0.123E1, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(0.8988465674311579E308, 0.123E1, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(0.8988465674311579E308, 0.123E1, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(0.8988465674311579E308, ~0.3141592653589793E1, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(0.8988465674311579E308, ~0.123E1, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(0.8988465674311579E308, ~0.123E1, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(0.123E4, 0.123E2, 0.123E2): 0.15141300000000001E5 0.151413E5 +(0.123E4, 0.123E2, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(0.123E4, 0.123E2, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(0.123E4, 0.123E2, 0.123): 0.15129123000000001E5 0.15129123E5 +(0.123E4, 0.123E2, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(0.123E4, 0.123E2, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(0.123E4, 0.3141592653589793E1, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(0.123E4, 0.3141592653589793E1, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(0.123E4, 0.3141592653589793E1, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(0.123E4, 0.2718281828459045E1, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(0.123E4, 0.2718281828459045E1, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(0.123E4, 0.2718281828459045E1, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(0.123E4, 0.2718281828459045E1, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(0.123E4, 0.2718281828459045E1, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(0.123E4, 0.123E1, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(0.123E4, 0.123E1, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(0.123E4, 0.123E1, 0.123E1): 0.15141299999999999E4 0.151413E4 +(0.123E4, 0.123E1, 0.123): 0.1513023E4 0.15130230000000001E4 +(0.123E4, 0.123E1, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(0.123E4, 0.123E1, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(0.123E4, 0.123E1, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(0.123E4, 0.123, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(0.123E4, 0.123, 0.123E1): 0.15252E3 0.15251999999999998E3 +(0.123E4, 0.123, 0.123): 0.151413E3 0.15141299999999998E3 +(0.123E4, 0.123, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(0.123E4, 0.123, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(0.123E4, 0.123E~2, 0.123E1): 0.27429E1 0.27428999999999997E1 +(0.123E4, 0.123E~2, ~0.123E1): 0.2829 0.28289999999999993 +(0.123E4, 0.123E~2, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(0.123E4, ~0.123E2, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(0.123E4, ~0.123E2, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(0.123E4, ~0.123E2, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(0.123E4, ~0.123E2, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(0.123E4, ~0.123E2, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(0.123E4, ~0.123E2, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(0.123E4, ~0.3141592653589793E1, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(0.123E4, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(0.123E4, ~0.3141592653589793E1, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(0.123E4, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(0.123E4, ~0.2718281828459045E1, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(0.123E4, ~0.2718281828459045E1, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(0.123E4, ~0.2718281828459045E1, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(0.123E4, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(0.123E4, ~0.123E1, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(0.123E4, ~0.123E1, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(0.123E4, ~0.123E1, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(0.123E4, ~0.123E1, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(0.123E4, ~0.123E1, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(0.123E4, ~0.123E1, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(0.123E4, ~0.123E1, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(0.123E4, ~0.123, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(0.123E4, ~0.123, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(0.123E4, ~0.123, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(0.123E4, ~0.123, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(0.123E4, ~0.123, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(0.123E4, ~0.123E~2, 0.123E1): ~0.2829 ~0.28289999999999993 +(0.123E4, ~0.123E~2, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(0.123E4, ~0.123E~2, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(0.123E2, 0.123E4, 0.123E2): 0.15141300000000001E5 0.151413E5 +(0.123E2, 0.123E4, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(0.123E2, 0.123E4, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(0.123E2, 0.123E4, 0.123): 0.15129123000000001E5 0.15129123E5 +(0.123E2, 0.123E4, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(0.123E2, 0.123E4, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(0.123E2, 0.3141592653589793E1, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(0.123E2, 0.3141592653589793E1, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(0.123E2, 0.3141592653589793E1, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(0.123E2, 0.3141592653589793E1, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(0.123E2, 0.3141592653589793E1, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(0.123E2, 0.2718281828459045E1, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(0.123E2, 0.2718281828459045E1, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(0.123E2, 0.2718281828459045E1, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(0.123E2, 0.2718281828459045E1, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(0.123E2, 0.2718281828459045E1, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(0.123E2, 0.2718281828459045E1, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(0.123E2, 0.123E1, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(0.123E2, 0.123E1, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(0.123E2, 0.123E1, ~0.123): 0.15006E2 0.15006000000000002E2 +(0.123E2, 0.123E1, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(0.123E2, 0.123, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(0.123E2, 0.123, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(0.123E2, 0.123E~2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(0.123E2, ~0.123E4, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(0.123E2, ~0.123E4, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(0.123E2, ~0.123E4, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(0.123E2, ~0.123E4, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(0.123E2, ~0.123E4, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(0.123E2, ~0.123E4, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(0.123E2, ~0.3141592653589793E1, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(0.123E2, ~0.3141592653589793E1, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(0.123E2, ~0.3141592653589793E1, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(0.123E2, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(0.123E2, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(0.123E2, ~0.2718281828459045E1, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(0.123E2, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(0.123E2, ~0.2718281828459045E1, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(0.123E2, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(0.123E2, ~0.2718281828459045E1, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(0.123E2, ~0.2718281828459045E1, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(0.123E2, ~0.123E1, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(0.123E2, ~0.123E1, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(0.123E2, ~0.123E1, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(0.123E2, ~0.123E1, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(0.123E2, ~0.123, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(0.123E2, ~0.123, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(0.123E2, ~0.123E~2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(0.3141592653589793E1, 0.8988465674311579E308, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(0.3141592653589793E1, 0.123E4, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(0.3141592653589793E1, 0.123E4, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(0.3141592653589793E1, 0.123E4, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(0.3141592653589793E1, 0.123E2, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(0.3141592653589793E1, 0.123E2, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(0.3141592653589793E1, 0.123E2, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(0.3141592653589793E1, 0.123E2, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(0.3141592653589793E1, 0.123E2, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.2718281828459045E1): 0.71513225726303125E1 0.7151322572630313E1 +(0.3141592653589793E1, 0.2718281828459045E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(0.3141592653589793E1, 0.123E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(0.3141592653589793E1, 0.123E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(0.3141592653589793E1, 0.123E~2, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(0.3141592653589793E1, ~0.8988465674311579E308, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(0.3141592653589793E1, ~0.123E4, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(0.3141592653589793E1, ~0.123E4, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(0.3141592653589793E1, ~0.123E4, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(0.3141592653589793E1, ~0.123E2, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(0.3141592653589793E1, ~0.123E2, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(0.3141592653589793E1, ~0.123E2, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(0.3141592653589793E1, ~0.123E2, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(0.3141592653589793E1, ~0.123E2, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.2718281828459045E1): ~0.71513225726303125E1 ~0.7151322572630313E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(0.3141592653589793E1, ~0.123E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(0.3141592653589793E1, ~0.123E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(0.3141592653589793E1, ~0.123E~2, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(0.2718281828459045E1, 0.8988465674311579E308, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(0.2718281828459045E1, 0.123E4, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(0.2718281828459045E1, 0.123E4, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(0.2718281828459045E1, 0.123E4, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(0.2718281828459045E1, 0.123E4, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(0.2718281828459045E1, 0.123E4, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(0.2718281828459045E1, 0.123E2, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(0.2718281828459045E1, 0.123E2, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(0.2718281828459045E1, 0.123E2, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(0.2718281828459045E1, 0.123E2, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(0.2718281828459045E1, 0.123E2, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(0.2718281828459045E1, 0.123E2, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(0.2718281828459045E1, 0.3141592653589793E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.123E1): 0.6159056098930649E1 0.615905609893065E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.123E~2): 0.7387826098930649E1 0.738782609893065E1 +(0.2718281828459045E1, 0.123E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(0.2718281828459045E1, 0.123E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(0.2718281828459045E1, 0.123E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(0.2718281828459045E1, 0.123E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(0.2718281828459045E1, 0.123, ~0.123): 0.21134866490046253 0.21134866490046256 +(0.2718281828459045E1, ~0.8988465674311579E308, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(0.2718281828459045E1, ~0.123E4, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(0.2718281828459045E1, ~0.123E4, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(0.2718281828459045E1, ~0.123E4, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(0.2718281828459045E1, ~0.123E4, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(0.2718281828459045E1, ~0.123E4, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(0.2718281828459045E1, ~0.123E2, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(0.2718281828459045E1, ~0.123E2, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(0.2718281828459045E1, ~0.123E2, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(0.2718281828459045E1, ~0.123E2, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(0.2718281828459045E1, ~0.123E2, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(0.2718281828459045E1, ~0.123E2, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.123E1): ~0.6159056098930649E1 ~0.615905609893065E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.123E~2): ~0.7387826098930649E1 ~0.738782609893065E1 +(0.2718281828459045E1, ~0.123E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(0.2718281828459045E1, ~0.123E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(0.2718281828459045E1, ~0.123E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(0.2718281828459045E1, ~0.123E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(0.2718281828459045E1, ~0.123, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(0.123E1, 0.17976931348623157E309, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(0.123E1, 0.17976931348623157E309, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(0.123E1, 0.8988465674311579E308, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(0.123E1, 0.8988465674311579E308, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(0.123E1, 0.123E4, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(0.123E1, 0.123E4, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(0.123E1, 0.123E4, 0.123E1): 0.15141299999999999E4 0.151413E4 +(0.123E1, 0.123E4, 0.123): 0.1513023E4 0.15130230000000001E4 +(0.123E1, 0.123E4, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(0.123E1, 0.123E4, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(0.123E1, 0.123E4, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(0.123E1, 0.123E2, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(0.123E1, 0.123E2, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(0.123E1, 0.123E2, ~0.123): 0.15006E2 0.15006000000000002E2 +(0.123E1, 0.123E2, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(0.123E1, 0.3141592653589793E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(0.123E1, 0.3141592653589793E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(0.123E1, 0.2718281828459045E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(0.123E1, 0.2718281828459045E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(0.123E1, 0.2718281828459045E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(0.123E1, 0.2718281828459045E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(0.123E1, 0.123E1, 0.123E1): 0.27429E1 0.27428999999999997E1 +(0.123E1, 0.123E1, ~0.123E1): 0.2829 0.28289999999999993 +(0.123E1, 0.123, 0.123): 0.27429 0.27429000000000003 +(0.123E1, 0.123, 0.123E~2): 0.15252 0.15252000000000002 +(0.123E1, 0.123, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(0.123E1, ~0.17976931348623157E309, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(0.123E1, ~0.17976931348623157E309, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(0.123E1, ~0.8988465674311579E308, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(0.123E1, ~0.8988465674311579E308, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(0.123E1, ~0.123E4, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(0.123E1, ~0.123E4, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(0.123E1, ~0.123E4, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(0.123E1, ~0.123E4, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(0.123E1, ~0.123E4, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(0.123E1, ~0.123E4, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(0.123E1, ~0.123E4, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(0.123E1, ~0.123E2, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(0.123E1, ~0.123E2, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(0.123E1, ~0.123E2, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(0.123E1, ~0.123E2, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(0.123E1, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(0.123E1, ~0.3141592653589793E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(0.123E1, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(0.123E1, ~0.2718281828459045E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(0.123E1, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(0.123E1, ~0.2718281828459045E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(0.123E1, ~0.123E1, 0.123E1): ~0.2829 ~0.28289999999999993 +(0.123E1, ~0.123E1, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(0.123E1, ~0.123, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(0.123E1, ~0.123, ~0.123): ~0.27429 ~0.27429000000000003 +(0.123E1, ~0.123, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(0.123, 0.123E4, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(0.123, 0.123E4, 0.123E1): 0.15252E3 0.15251999999999998E3 +(0.123, 0.123E4, 0.123): 0.151413E3 0.15141299999999998E3 +(0.123, 0.123E4, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(0.123, 0.123E4, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(0.123, 0.123E2, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(0.123, 0.123E2, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(0.123, 0.2718281828459045E1, ~0.123): 0.21134866490046253 0.21134866490046256 +(0.123, 0.123E1, 0.123): 0.27429 0.27429000000000003 +(0.123, 0.123E1, 0.123E~2): 0.15252 0.15252000000000002 +(0.123, 0.123E1, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(0.123, 0.11125369292536007E~307, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(0.123, 0.11125369292536007E~307, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 +(0.123, ~0.123E4, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(0.123, ~0.123E4, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(0.123, ~0.123E4, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(0.123, ~0.123E4, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(0.123, ~0.123E4, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(0.123, ~0.123E2, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(0.123, ~0.123E2, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(0.123, ~0.2718281828459045E1, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(0.123, ~0.123E1, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(0.123, ~0.123E1, ~0.123): ~0.27429 ~0.27429000000000003 +(0.123, ~0.123E1, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(0.123, ~0.11125369292536007E~307, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(0.123, ~0.11125369292536007E~307, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(0.123E~2, 0.123E4, 0.123E1): 0.27429E1 0.27428999999999997E1 +(0.123E~2, 0.123E4, ~0.123E1): 0.2829 0.28289999999999993 +(0.123E~2, 0.123E4, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(0.123E~2, 0.123E2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(0.123E~2, 0.3141592653589793E1, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(0.123E~2, ~0.123E4, 0.123E1): ~0.2829 ~0.28289999999999993 +(0.123E~2, ~0.123E4, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(0.123E~2, ~0.123E4, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(0.123E~2, ~0.123E2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(0.123E~2, ~0.3141592653589793E1, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(0.11125369292536007E~307, 0.123, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(0.11125369292536007E~307, 0.123, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 +(0.11125369292536007E~307, ~0.123, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(0.11125369292536007E~307, ~0.123, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(~0.17976931348623157E309, 0.123E1, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(~0.17976931348623157E309, 0.123E1, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(~0.17976931348623157E309, ~0.123E1, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(~0.17976931348623157E309, ~0.123E1, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(~0.8988465674311579E308, 0.123E1, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(~0.8988465674311579E308, 0.123E1, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(~0.8988465674311579E308, ~0.123E1, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(~0.8988465674311579E308, ~0.123E1, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(~0.123E4, 0.123E2, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(~0.123E4, 0.123E2, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(~0.123E4, 0.123E2, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(~0.123E4, 0.123E2, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(~0.123E4, 0.123E2, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(~0.123E4, 0.123E2, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(~0.123E4, 0.3141592653589793E1, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(~0.123E4, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(~0.123E4, 0.3141592653589793E1, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(~0.123E4, 0.2718281828459045E1, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(~0.123E4, 0.2718281828459045E1, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(~0.123E4, 0.2718281828459045E1, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(~0.123E4, 0.2718281828459045E1, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(~0.123E4, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(~0.123E4, 0.123E1, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(~0.123E4, 0.123E1, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(~0.123E4, 0.123E1, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(~0.123E4, 0.123E1, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(~0.123E4, 0.123E1, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(~0.123E4, 0.123E1, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(~0.123E4, 0.123E1, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(~0.123E4, 0.123, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(~0.123E4, 0.123, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(~0.123E4, 0.123, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(~0.123E4, 0.123, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(~0.123E4, 0.123, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(~0.123E4, 0.123E~2, 0.123E1): ~0.2829 ~0.28289999999999993 +(~0.123E4, 0.123E~2, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(~0.123E4, 0.123E~2, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(~0.123E4, ~0.123E2, 0.123E2): 0.15141300000000001E5 0.151413E5 +(~0.123E4, ~0.123E2, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(~0.123E4, ~0.123E2, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(~0.123E4, ~0.123E2, 0.123): 0.15129123000000001E5 0.15129123E5 +(~0.123E4, ~0.123E2, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(~0.123E4, ~0.123E2, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(~0.123E4, ~0.3141592653589793E1, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(~0.123E4, ~0.3141592653589793E1, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(~0.123E4, ~0.3141592653589793E1, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(~0.123E4, ~0.2718281828459045E1, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(~0.123E4, ~0.2718281828459045E1, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(~0.123E4, ~0.2718281828459045E1, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(~0.123E4, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(~0.123E4, ~0.2718281828459045E1, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(~0.123E4, ~0.123E1, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(~0.123E4, ~0.123E1, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(~0.123E4, ~0.123E1, 0.123E1): 0.15141299999999999E4 0.151413E4 +(~0.123E4, ~0.123E1, 0.123): 0.1513023E4 0.15130230000000001E4 +(~0.123E4, ~0.123E1, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(~0.123E4, ~0.123E1, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(~0.123E4, ~0.123E1, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(~0.123E4, ~0.123, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(~0.123E4, ~0.123, 0.123E1): 0.15252E3 0.15251999999999998E3 +(~0.123E4, ~0.123, 0.123): 0.151413E3 0.15141299999999998E3 +(~0.123E4, ~0.123, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(~0.123E4, ~0.123, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(~0.123E4, ~0.123E~2, 0.123E1): 0.27429E1 0.27428999999999997E1 +(~0.123E4, ~0.123E~2, ~0.123E1): 0.2829 0.28289999999999993 +(~0.123E4, ~0.123E~2, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(~0.123E2, 0.123E4, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(~0.123E2, 0.123E4, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(~0.123E2, 0.123E4, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(~0.123E2, 0.123E4, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(~0.123E2, 0.123E4, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(~0.123E2, 0.123E4, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(~0.123E2, 0.3141592653589793E1, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(~0.123E2, 0.3141592653589793E1, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(~0.123E2, 0.3141592653589793E1, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(~0.123E2, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(~0.123E2, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(~0.123E2, 0.2718281828459045E1, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(~0.123E2, 0.2718281828459045E1, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(~0.123E2, 0.2718281828459045E1, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(~0.123E2, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(~0.123E2, 0.2718281828459045E1, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(~0.123E2, 0.2718281828459045E1, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(~0.123E2, 0.123E1, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(~0.123E2, 0.123E1, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(~0.123E2, 0.123E1, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(~0.123E2, 0.123E1, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(~0.123E2, 0.123, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(~0.123E2, 0.123, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(~0.123E2, 0.123E~2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(~0.123E2, ~0.123E4, 0.123E2): 0.15141300000000001E5 0.151413E5 +(~0.123E2, ~0.123E4, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(~0.123E2, ~0.123E4, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(~0.123E2, ~0.123E4, 0.123): 0.15129123000000001E5 0.15129123E5 +(~0.123E2, ~0.123E4, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(~0.123E2, ~0.123E4, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(~0.123E2, ~0.3141592653589793E1, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(~0.123E2, ~0.3141592653589793E1, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(~0.123E2, ~0.2718281828459045E1, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(~0.123E2, ~0.2718281828459045E1, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(~0.123E2, ~0.2718281828459045E1, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(~0.123E2, ~0.2718281828459045E1, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(~0.123E2, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(~0.123E2, ~0.2718281828459045E1, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(~0.123E2, ~0.123E1, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(~0.123E2, ~0.123E1, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(~0.123E2, ~0.123E1, ~0.123): 0.15006E2 0.15006000000000002E2 +(~0.123E2, ~0.123E1, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(~0.123E2, ~0.123, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(~0.123E2, ~0.123, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(~0.123E2, ~0.123E~2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(~0.3141592653589793E1, 0.8988465674311579E308, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(~0.3141592653589793E1, 0.123E4, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(~0.3141592653589793E1, 0.123E4, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(~0.3141592653589793E1, 0.123E4, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(~0.3141592653589793E1, 0.123E2, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(~0.3141592653589793E1, 0.123E2, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(~0.3141592653589793E1, 0.123E2, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(~0.3141592653589793E1, 0.123E2, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(~0.3141592653589793E1, 0.123E2, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.2718281828459045E1): ~0.71513225726303125E1 ~0.7151322572630313E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(~0.3141592653589793E1, 0.123E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(~0.3141592653589793E1, 0.123E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(~0.3141592653589793E1, 0.123E~2, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(~0.3141592653589793E1, ~0.123E4, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(~0.3141592653589793E1, ~0.123E4, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(~0.3141592653589793E1, ~0.123E4, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(~0.3141592653589793E1, ~0.123E2, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(~0.3141592653589793E1, ~0.123E2, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.2718281828459045E1): 0.71513225726303125E1 0.7151322572630313E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(~0.3141592653589793E1, ~0.123E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(~0.3141592653589793E1, ~0.123E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(~0.3141592653589793E1, ~0.123E~2, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(~0.2718281828459045E1, 0.8988465674311579E308, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(~0.2718281828459045E1, 0.123E4, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(~0.2718281828459045E1, 0.123E4, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(~0.2718281828459045E1, 0.123E4, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(~0.2718281828459045E1, 0.123E4, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(~0.2718281828459045E1, 0.123E4, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(~0.2718281828459045E1, 0.123E2, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(~0.2718281828459045E1, 0.123E2, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(~0.2718281828459045E1, 0.123E2, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(~0.2718281828459045E1, 0.123E2, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(~0.2718281828459045E1, 0.123E2, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(~0.2718281828459045E1, 0.123E2, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.123E1): ~0.6159056098930649E1 ~0.615905609893065E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.123E~2): ~0.7387826098930649E1 ~0.738782609893065E1 +(~0.2718281828459045E1, 0.123E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(~0.2718281828459045E1, 0.123E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(~0.2718281828459045E1, 0.123E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(~0.2718281828459045E1, 0.123E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(~0.2718281828459045E1, 0.123, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(~0.2718281828459045E1, ~0.123E4, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(~0.2718281828459045E1, ~0.123E4, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(~0.2718281828459045E1, ~0.123E4, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(~0.2718281828459045E1, ~0.123E4, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(~0.2718281828459045E1, ~0.123E4, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(~0.2718281828459045E1, ~0.123E2, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(~0.2718281828459045E1, ~0.123E2, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(~0.2718281828459045E1, ~0.123E2, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(~0.2718281828459045E1, ~0.123E2, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(~0.2718281828459045E1, ~0.123E2, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(~0.2718281828459045E1, ~0.123E2, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E1): 0.6159056098930649E1 0.615905609893065E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E~2): 0.7387826098930649E1 0.738782609893065E1 +(~0.2718281828459045E1, ~0.123E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(~0.2718281828459045E1, ~0.123E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(~0.2718281828459045E1, ~0.123E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(~0.2718281828459045E1, ~0.123E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(~0.2718281828459045E1, ~0.123, ~0.123): 0.21134866490046253 0.21134866490046256 +(~0.123E1, 0.17976931348623157E309, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(~0.123E1, 0.17976931348623157E309, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(~0.123E1, 0.8988465674311579E308, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(~0.123E1, 0.8988465674311579E308, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(~0.123E1, 0.123E4, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(~0.123E1, 0.123E4, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(~0.123E1, 0.123E4, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(~0.123E1, 0.123E4, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(~0.123E1, 0.123E4, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(~0.123E1, 0.123E4, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(~0.123E1, 0.123E4, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(~0.123E1, 0.123E2, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(~0.123E1, 0.123E2, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(~0.123E1, 0.123E2, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(~0.123E1, 0.123E2, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(~0.123E1, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(~0.123E1, 0.3141592653589793E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(~0.123E1, 0.2718281828459045E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(~0.123E1, 0.2718281828459045E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(~0.123E1, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(~0.123E1, 0.2718281828459045E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(~0.123E1, 0.123E1, 0.123E1): ~0.2829 ~0.28289999999999993 +(~0.123E1, 0.123E1, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(~0.123E1, 0.123, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(~0.123E1, 0.123, ~0.123): ~0.27429 ~0.27429000000000003 +(~0.123E1, 0.123, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(~0.123E1, ~0.17976931348623157E309, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(~0.123E1, ~0.17976931348623157E309, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(~0.123E1, ~0.8988465674311579E308, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(~0.123E1, ~0.8988465674311579E308, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(~0.123E1, ~0.123E4, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(~0.123E1, ~0.123E4, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(~0.123E1, ~0.123E4, 0.123E1): 0.15141299999999999E4 0.151413E4 +(~0.123E1, ~0.123E4, 0.123): 0.1513023E4 0.15130230000000001E4 +(~0.123E1, ~0.123E4, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(~0.123E1, ~0.123E4, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(~0.123E1, ~0.123E4, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(~0.123E1, ~0.123E2, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(~0.123E1, ~0.123E2, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(~0.123E1, ~0.123E2, ~0.123): 0.15006E2 0.15006000000000002E2 +(~0.123E1, ~0.123E2, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(~0.123E1, ~0.3141592653589793E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(~0.123E1, ~0.3141592653589793E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(~0.123E1, ~0.2718281828459045E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(~0.123E1, ~0.2718281828459045E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(~0.123E1, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(~0.123E1, ~0.2718281828459045E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(~0.123E1, ~0.123E1, 0.123E1): 0.27429E1 0.27428999999999997E1 +(~0.123E1, ~0.123E1, ~0.123E1): 0.2829 0.28289999999999993 +(~0.123E1, ~0.123, 0.123): 0.27429 0.27429000000000003 +(~0.123E1, ~0.123, 0.123E~2): 0.15252 0.15252000000000002 +(~0.123E1, ~0.123, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(~0.123, 0.123E4, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(~0.123, 0.123E4, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(~0.123, 0.123E4, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(~0.123, 0.123E4, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(~0.123, 0.123E4, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(~0.123, 0.123E2, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(~0.123, 0.123E2, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(~0.123, 0.2718281828459045E1, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(~0.123, 0.123E1, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(~0.123, 0.123E1, ~0.123): ~0.27429 ~0.27429000000000003 +(~0.123, 0.123E1, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(~0.123, 0.11125369292536007E~307, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(~0.123, 0.11125369292536007E~307, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(~0.123, ~0.123E4, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(~0.123, ~0.123E4, 0.123E1): 0.15252E3 0.15251999999999998E3 +(~0.123, ~0.123E4, 0.123): 0.151413E3 0.15141299999999998E3 +(~0.123, ~0.123E4, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(~0.123, ~0.123E4, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(~0.123, ~0.123E2, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(~0.123, ~0.123E2, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(~0.123, ~0.2718281828459045E1, ~0.123): 0.21134866490046253 0.21134866490046256 +(~0.123, ~0.123E1, 0.123): 0.27429 0.27429000000000003 +(~0.123, ~0.123E1, 0.123E~2): 0.15252 0.15252000000000002 +(~0.123, ~0.123E1, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(~0.123, ~0.11125369292536007E~307, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(~0.123, ~0.11125369292536007E~307, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 +(~0.123E~2, 0.123E4, 0.123E1): ~0.2829 ~0.28289999999999993 +(~0.123E~2, 0.123E4, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(~0.123E~2, 0.123E4, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(~0.123E~2, 0.123E2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(~0.123E~2, 0.3141592653589793E1, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(~0.123E~2, ~0.123E4, 0.123E1): 0.27429E1 0.27428999999999997E1 +(~0.123E~2, ~0.123E4, ~0.123E1): 0.2829 0.28289999999999993 +(~0.123E~2, ~0.123E4, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(~0.123E~2, ~0.123E2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(~0.123E~2, ~0.3141592653589793E1, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(~0.11125369292536007E~307, 0.123, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(~0.11125369292536007E~307, 0.123, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(~0.11125369292536007E~307, ~0.123, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(~0.11125369292536007E~307, ~0.123, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 + +Testing Real.{realCeil,realFloor,realTrunc} +0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 +0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 +0.123E4 0.123E4 0.123E4 0.123E4 +0.123E2 0.13E2 0.12E2 0.12E2 +0.3141592653589793E1 0.4E1 0.3E1 0.3E1 +0.2718281828459045E1 0.3E1 0.2E1 0.2E1 +0.123E1 0.2E1 0.1E1 0.1E1 +0.123 0.1E1 0.0 0.0 +0.123E~2 0.1E1 0.0 0.0 +0.22250738585072014E~307 0.1E1 0.0 0.0 +0.11125369292536007E~307 0.1E1 0.0 0.0 +0.5E~323 0.1E1 0.0 0.0 +0.0 0.0 0.0 0.0 +~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 +~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 +~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 +~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 +~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 +~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 +~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 +~0.123 ~0.0 ~0.1E1 ~0.0 +~0.123E~2 ~0.0 ~0.1E1 ~0.0 +~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 +~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 +~0.5E~323 ~0.0 ~0.1E1 ~0.0 +~0.0 ~0.0 ~0.0 ~0.0 + +Testing Real.{<,<=,>,>=,==,!=,?=,unordered} +< (0.17976931348623157E309, 0.17976931348623157E309) = false +> (0.17976931348623157E309, 0.17976931348623157E309) = false +== (0.17976931348623157E309, 0.17976931348623157E309) = true +?= (0.17976931348623157E309, 0.17976931348623157E309) = true +< (0.17976931348623157E309, 0.8988465674311579E308) = false +> (0.17976931348623157E309, 0.8988465674311579E308) = true +== (0.17976931348623157E309, 0.8988465674311579E308) = false +?= (0.17976931348623157E309, 0.8988465674311579E308) = false +< (0.17976931348623157E309, 0.123E4) = false +> (0.17976931348623157E309, 0.123E4) = true +== (0.17976931348623157E309, 0.123E4) = false +?= (0.17976931348623157E309, 0.123E4) = false +< (0.17976931348623157E309, 0.123E2) = false +> (0.17976931348623157E309, 0.123E2) = true +== (0.17976931348623157E309, 0.123E2) = false +?= (0.17976931348623157E309, 0.123E2) = false +< (0.17976931348623157E309, 0.3141592653589793E1) = false +> (0.17976931348623157E309, 0.3141592653589793E1) = true +== (0.17976931348623157E309, 0.3141592653589793E1) = false +?= (0.17976931348623157E309, 0.3141592653589793E1) = false +< (0.17976931348623157E309, 0.2718281828459045E1) = false +> (0.17976931348623157E309, 0.2718281828459045E1) = true +== (0.17976931348623157E309, 0.2718281828459045E1) = false +?= (0.17976931348623157E309, 0.2718281828459045E1) = false +< (0.17976931348623157E309, 0.123E1) = false +> (0.17976931348623157E309, 0.123E1) = true +== (0.17976931348623157E309, 0.123E1) = false +?= (0.17976931348623157E309, 0.123E1) = false +< (0.17976931348623157E309, 0.123) = false +> (0.17976931348623157E309, 0.123) = true +== (0.17976931348623157E309, 0.123) = false +?= (0.17976931348623157E309, 0.123) = false +< (0.17976931348623157E309, 0.123E~2) = false +> (0.17976931348623157E309, 0.123E~2) = true +== (0.17976931348623157E309, 0.123E~2) = false +?= (0.17976931348623157E309, 0.123E~2) = false +< (0.17976931348623157E309, 0.22250738585072014E~307) = false +> (0.17976931348623157E309, 0.22250738585072014E~307) = true +== (0.17976931348623157E309, 0.22250738585072014E~307) = false +?= (0.17976931348623157E309, 0.22250738585072014E~307) = false +< (0.17976931348623157E309, 0.11125369292536007E~307) = false +> (0.17976931348623157E309, 0.11125369292536007E~307) = true +== (0.17976931348623157E309, 0.11125369292536007E~307) = false +?= (0.17976931348623157E309, 0.11125369292536007E~307) = false +< (0.17976931348623157E309, 0.5E~323) = false +> (0.17976931348623157E309, 0.5E~323) = true +== (0.17976931348623157E309, 0.5E~323) = false +?= (0.17976931348623157E309, 0.5E~323) = false +< (0.17976931348623157E309, 0.0) = false +> (0.17976931348623157E309, 0.0) = true +== (0.17976931348623157E309, 0.0) = false +?= (0.17976931348623157E309, 0.0) = false +< (0.17976931348623157E309, ~0.17976931348623157E309) = false +> (0.17976931348623157E309, ~0.17976931348623157E309) = true +== (0.17976931348623157E309, ~0.17976931348623157E309) = false +?= (0.17976931348623157E309, ~0.17976931348623157E309) = false +< (0.17976931348623157E309, ~0.8988465674311579E308) = false +> (0.17976931348623157E309, ~0.8988465674311579E308) = true +== (0.17976931348623157E309, ~0.8988465674311579E308) = false +?= (0.17976931348623157E309, ~0.8988465674311579E308) = false +< (0.17976931348623157E309, ~0.123E4) = false +> (0.17976931348623157E309, ~0.123E4) = true +== (0.17976931348623157E309, ~0.123E4) = false +?= (0.17976931348623157E309, ~0.123E4) = false +< (0.17976931348623157E309, ~0.123E2) = false +> (0.17976931348623157E309, ~0.123E2) = true +== (0.17976931348623157E309, ~0.123E2) = false +?= (0.17976931348623157E309, ~0.123E2) = false +< (0.17976931348623157E309, ~0.3141592653589793E1) = false +> (0.17976931348623157E309, ~0.3141592653589793E1) = true +== (0.17976931348623157E309, ~0.3141592653589793E1) = false +?= (0.17976931348623157E309, ~0.3141592653589793E1) = false +< (0.17976931348623157E309, ~0.2718281828459045E1) = false +> (0.17976931348623157E309, ~0.2718281828459045E1) = true +== (0.17976931348623157E309, ~0.2718281828459045E1) = false +?= (0.17976931348623157E309, ~0.2718281828459045E1) = false +< (0.17976931348623157E309, ~0.123E1) = false +> (0.17976931348623157E309, ~0.123E1) = true +== (0.17976931348623157E309, ~0.123E1) = false +?= (0.17976931348623157E309, ~0.123E1) = false +< (0.17976931348623157E309, ~0.123) = false +> (0.17976931348623157E309, ~0.123) = true +== (0.17976931348623157E309, ~0.123) = false +?= (0.17976931348623157E309, ~0.123) = false +< (0.17976931348623157E309, ~0.123E~2) = false +> (0.17976931348623157E309, ~0.123E~2) = true +== (0.17976931348623157E309, ~0.123E~2) = false +?= (0.17976931348623157E309, ~0.123E~2) = false +< (0.17976931348623157E309, ~0.22250738585072014E~307) = false +> (0.17976931348623157E309, ~0.22250738585072014E~307) = true +== (0.17976931348623157E309, ~0.22250738585072014E~307) = false +?= (0.17976931348623157E309, ~0.22250738585072014E~307) = false +< (0.17976931348623157E309, ~0.11125369292536007E~307) = false +> (0.17976931348623157E309, ~0.11125369292536007E~307) = true +== (0.17976931348623157E309, ~0.11125369292536007E~307) = false +?= (0.17976931348623157E309, ~0.11125369292536007E~307) = false +< (0.17976931348623157E309, ~0.5E~323) = false +> (0.17976931348623157E309, ~0.5E~323) = true +== (0.17976931348623157E309, ~0.5E~323) = false +?= (0.17976931348623157E309, ~0.5E~323) = false +< (0.17976931348623157E309, ~0.0) = false +> (0.17976931348623157E309, ~0.0) = true +== (0.17976931348623157E309, ~0.0) = false +?= (0.17976931348623157E309, ~0.0) = false +< (0.8988465674311579E308, 0.17976931348623157E309) = true +> (0.8988465674311579E308, 0.17976931348623157E309) = false +== (0.8988465674311579E308, 0.17976931348623157E309) = false +?= (0.8988465674311579E308, 0.17976931348623157E309) = false +< (0.8988465674311579E308, 0.8988465674311579E308) = false +> (0.8988465674311579E308, 0.8988465674311579E308) = false +== (0.8988465674311579E308, 0.8988465674311579E308) = true +?= (0.8988465674311579E308, 0.8988465674311579E308) = true +< (0.8988465674311579E308, 0.123E4) = false +> (0.8988465674311579E308, 0.123E4) = true +== (0.8988465674311579E308, 0.123E4) = false +?= (0.8988465674311579E308, 0.123E4) = false +< (0.8988465674311579E308, 0.123E2) = false +> (0.8988465674311579E308, 0.123E2) = true +== (0.8988465674311579E308, 0.123E2) = false +?= (0.8988465674311579E308, 0.123E2) = false +< (0.8988465674311579E308, 0.3141592653589793E1) = false +> (0.8988465674311579E308, 0.3141592653589793E1) = true +== (0.8988465674311579E308, 0.3141592653589793E1) = false +?= (0.8988465674311579E308, 0.3141592653589793E1) = false +< (0.8988465674311579E308, 0.2718281828459045E1) = false +> (0.8988465674311579E308, 0.2718281828459045E1) = true +== (0.8988465674311579E308, 0.2718281828459045E1) = false +?= (0.8988465674311579E308, 0.2718281828459045E1) = false +< (0.8988465674311579E308, 0.123E1) = false +> (0.8988465674311579E308, 0.123E1) = true +== (0.8988465674311579E308, 0.123E1) = false +?= (0.8988465674311579E308, 0.123E1) = false +< (0.8988465674311579E308, 0.123) = false +> (0.8988465674311579E308, 0.123) = true +== (0.8988465674311579E308, 0.123) = false +?= (0.8988465674311579E308, 0.123) = false +< (0.8988465674311579E308, 0.123E~2) = false +> (0.8988465674311579E308, 0.123E~2) = true +== (0.8988465674311579E308, 0.123E~2) = false +?= (0.8988465674311579E308, 0.123E~2) = false +< (0.8988465674311579E308, 0.22250738585072014E~307) = false +> (0.8988465674311579E308, 0.22250738585072014E~307) = true +== (0.8988465674311579E308, 0.22250738585072014E~307) = false +?= (0.8988465674311579E308, 0.22250738585072014E~307) = false +< (0.8988465674311579E308, 0.11125369292536007E~307) = false +> (0.8988465674311579E308, 0.11125369292536007E~307) = true +== (0.8988465674311579E308, 0.11125369292536007E~307) = false +?= (0.8988465674311579E308, 0.11125369292536007E~307) = false +< (0.8988465674311579E308, 0.5E~323) = false +> (0.8988465674311579E308, 0.5E~323) = true +== (0.8988465674311579E308, 0.5E~323) = false +?= (0.8988465674311579E308, 0.5E~323) = false +< (0.8988465674311579E308, 0.0) = false +> (0.8988465674311579E308, 0.0) = true +== (0.8988465674311579E308, 0.0) = false +?= (0.8988465674311579E308, 0.0) = false +< (0.8988465674311579E308, ~0.17976931348623157E309) = false +> (0.8988465674311579E308, ~0.17976931348623157E309) = true +== (0.8988465674311579E308, ~0.17976931348623157E309) = false +?= (0.8988465674311579E308, ~0.17976931348623157E309) = false +< (0.8988465674311579E308, ~0.8988465674311579E308) = false +> (0.8988465674311579E308, ~0.8988465674311579E308) = true +== (0.8988465674311579E308, ~0.8988465674311579E308) = false +?= (0.8988465674311579E308, ~0.8988465674311579E308) = false +< (0.8988465674311579E308, ~0.123E4) = false +> (0.8988465674311579E308, ~0.123E4) = true +== (0.8988465674311579E308, ~0.123E4) = false +?= (0.8988465674311579E308, ~0.123E4) = false +< (0.8988465674311579E308, ~0.123E2) = false +> (0.8988465674311579E308, ~0.123E2) = true +== (0.8988465674311579E308, ~0.123E2) = false +?= (0.8988465674311579E308, ~0.123E2) = false +< (0.8988465674311579E308, ~0.3141592653589793E1) = false +> (0.8988465674311579E308, ~0.3141592653589793E1) = true +== (0.8988465674311579E308, ~0.3141592653589793E1) = false +?= (0.8988465674311579E308, ~0.3141592653589793E1) = false +< (0.8988465674311579E308, ~0.2718281828459045E1) = false +> (0.8988465674311579E308, ~0.2718281828459045E1) = true +== (0.8988465674311579E308, ~0.2718281828459045E1) = false +?= (0.8988465674311579E308, ~0.2718281828459045E1) = false +< (0.8988465674311579E308, ~0.123E1) = false +> (0.8988465674311579E308, ~0.123E1) = true +== (0.8988465674311579E308, ~0.123E1) = false +?= (0.8988465674311579E308, ~0.123E1) = false +< (0.8988465674311579E308, ~0.123) = false +> (0.8988465674311579E308, ~0.123) = true +== (0.8988465674311579E308, ~0.123) = false +?= (0.8988465674311579E308, ~0.123) = false +< (0.8988465674311579E308, ~0.123E~2) = false +> (0.8988465674311579E308, ~0.123E~2) = true +== (0.8988465674311579E308, ~0.123E~2) = false +?= (0.8988465674311579E308, ~0.123E~2) = false +< (0.8988465674311579E308, ~0.22250738585072014E~307) = false +> (0.8988465674311579E308, ~0.22250738585072014E~307) = true +== (0.8988465674311579E308, ~0.22250738585072014E~307) = false +?= (0.8988465674311579E308, ~0.22250738585072014E~307) = false +< (0.8988465674311579E308, ~0.11125369292536007E~307) = false +> (0.8988465674311579E308, ~0.11125369292536007E~307) = true +== (0.8988465674311579E308, ~0.11125369292536007E~307) = false +?= (0.8988465674311579E308, ~0.11125369292536007E~307) = false +< (0.8988465674311579E308, ~0.5E~323) = false +> (0.8988465674311579E308, ~0.5E~323) = true +== (0.8988465674311579E308, ~0.5E~323) = false +?= (0.8988465674311579E308, ~0.5E~323) = false +< (0.8988465674311579E308, ~0.0) = false +> (0.8988465674311579E308, ~0.0) = true +== (0.8988465674311579E308, ~0.0) = false +?= (0.8988465674311579E308, ~0.0) = false +< (0.123E4, 0.17976931348623157E309) = true +> (0.123E4, 0.17976931348623157E309) = false +== (0.123E4, 0.17976931348623157E309) = false +?= (0.123E4, 0.17976931348623157E309) = false +< (0.123E4, 0.8988465674311579E308) = true +> (0.123E4, 0.8988465674311579E308) = false +== (0.123E4, 0.8988465674311579E308) = false +?= (0.123E4, 0.8988465674311579E308) = false +< (0.123E4, 0.123E4) = false +> (0.123E4, 0.123E4) = false +== (0.123E4, 0.123E4) = true +?= (0.123E4, 0.123E4) = true +< (0.123E4, 0.123E2) = false +> (0.123E4, 0.123E2) = true +== (0.123E4, 0.123E2) = false +?= (0.123E4, 0.123E2) = false +< (0.123E4, 0.3141592653589793E1) = false +> (0.123E4, 0.3141592653589793E1) = true +== (0.123E4, 0.3141592653589793E1) = false +?= (0.123E4, 0.3141592653589793E1) = false +< (0.123E4, 0.2718281828459045E1) = false +> (0.123E4, 0.2718281828459045E1) = true +== (0.123E4, 0.2718281828459045E1) = false +?= (0.123E4, 0.2718281828459045E1) = false +< (0.123E4, 0.123E1) = false +> (0.123E4, 0.123E1) = true +== (0.123E4, 0.123E1) = false +?= (0.123E4, 0.123E1) = false +< (0.123E4, 0.123) = false +> (0.123E4, 0.123) = true +== (0.123E4, 0.123) = false +?= (0.123E4, 0.123) = false +< (0.123E4, 0.123E~2) = false +> (0.123E4, 0.123E~2) = true +== (0.123E4, 0.123E~2) = false +?= (0.123E4, 0.123E~2) = false +< (0.123E4, 0.22250738585072014E~307) = false +> (0.123E4, 0.22250738585072014E~307) = true +== (0.123E4, 0.22250738585072014E~307) = false +?= (0.123E4, 0.22250738585072014E~307) = false +< (0.123E4, 0.11125369292536007E~307) = false +> (0.123E4, 0.11125369292536007E~307) = true +== (0.123E4, 0.11125369292536007E~307) = false +?= (0.123E4, 0.11125369292536007E~307) = false +< (0.123E4, 0.5E~323) = false +> (0.123E4, 0.5E~323) = true +== (0.123E4, 0.5E~323) = false +?= (0.123E4, 0.5E~323) = false +< (0.123E4, 0.0) = false +> (0.123E4, 0.0) = true +== (0.123E4, 0.0) = false +?= (0.123E4, 0.0) = false +< (0.123E4, ~0.17976931348623157E309) = false +> (0.123E4, ~0.17976931348623157E309) = true +== (0.123E4, ~0.17976931348623157E309) = false +?= (0.123E4, ~0.17976931348623157E309) = false +< (0.123E4, ~0.8988465674311579E308) = false +> (0.123E4, ~0.8988465674311579E308) = true +== (0.123E4, ~0.8988465674311579E308) = false +?= (0.123E4, ~0.8988465674311579E308) = false +< (0.123E4, ~0.123E4) = false +> (0.123E4, ~0.123E4) = true +== (0.123E4, ~0.123E4) = false +?= (0.123E4, ~0.123E4) = false +< (0.123E4, ~0.123E2) = false +> (0.123E4, ~0.123E2) = true +== (0.123E4, ~0.123E2) = false +?= (0.123E4, ~0.123E2) = false +< (0.123E4, ~0.3141592653589793E1) = false +> (0.123E4, ~0.3141592653589793E1) = true +== (0.123E4, ~0.3141592653589793E1) = false +?= (0.123E4, ~0.3141592653589793E1) = false +< (0.123E4, ~0.2718281828459045E1) = false +> (0.123E4, ~0.2718281828459045E1) = true +== (0.123E4, ~0.2718281828459045E1) = false +?= (0.123E4, ~0.2718281828459045E1) = false +< (0.123E4, ~0.123E1) = false +> (0.123E4, ~0.123E1) = true +== (0.123E4, ~0.123E1) = false +?= (0.123E4, ~0.123E1) = false +< (0.123E4, ~0.123) = false +> (0.123E4, ~0.123) = true +== (0.123E4, ~0.123) = false +?= (0.123E4, ~0.123) = false +< (0.123E4, ~0.123E~2) = false +> (0.123E4, ~0.123E~2) = true +== (0.123E4, ~0.123E~2) = false +?= (0.123E4, ~0.123E~2) = false +< (0.123E4, ~0.22250738585072014E~307) = false +> (0.123E4, ~0.22250738585072014E~307) = true +== (0.123E4, ~0.22250738585072014E~307) = false +?= (0.123E4, ~0.22250738585072014E~307) = false +< (0.123E4, ~0.11125369292536007E~307) = false +> (0.123E4, ~0.11125369292536007E~307) = true +== (0.123E4, ~0.11125369292536007E~307) = false +?= (0.123E4, ~0.11125369292536007E~307) = false +< (0.123E4, ~0.5E~323) = false +> (0.123E4, ~0.5E~323) = true +== (0.123E4, ~0.5E~323) = false +?= (0.123E4, ~0.5E~323) = false +< (0.123E4, ~0.0) = false +> (0.123E4, ~0.0) = true +== (0.123E4, ~0.0) = false +?= (0.123E4, ~0.0) = false +< (0.123E2, 0.17976931348623157E309) = true +> (0.123E2, 0.17976931348623157E309) = false +== (0.123E2, 0.17976931348623157E309) = false +?= (0.123E2, 0.17976931348623157E309) = false +< (0.123E2, 0.8988465674311579E308) = true +> (0.123E2, 0.8988465674311579E308) = false +== (0.123E2, 0.8988465674311579E308) = false +?= (0.123E2, 0.8988465674311579E308) = false +< (0.123E2, 0.123E4) = true +> (0.123E2, 0.123E4) = false +== (0.123E2, 0.123E4) = false +?= (0.123E2, 0.123E4) = false +< (0.123E2, 0.123E2) = false +> (0.123E2, 0.123E2) = false +== (0.123E2, 0.123E2) = true +?= (0.123E2, 0.123E2) = true +< (0.123E2, 0.3141592653589793E1) = false +> (0.123E2, 0.3141592653589793E1) = true +== (0.123E2, 0.3141592653589793E1) = false +?= (0.123E2, 0.3141592653589793E1) = false +< (0.123E2, 0.2718281828459045E1) = false +> (0.123E2, 0.2718281828459045E1) = true +== (0.123E2, 0.2718281828459045E1) = false +?= (0.123E2, 0.2718281828459045E1) = false +< (0.123E2, 0.123E1) = false +> (0.123E2, 0.123E1) = true +== (0.123E2, 0.123E1) = false +?= (0.123E2, 0.123E1) = false +< (0.123E2, 0.123) = false +> (0.123E2, 0.123) = true +== (0.123E2, 0.123) = false +?= (0.123E2, 0.123) = false +< (0.123E2, 0.123E~2) = false +> (0.123E2, 0.123E~2) = true +== (0.123E2, 0.123E~2) = false +?= (0.123E2, 0.123E~2) = false +< (0.123E2, 0.22250738585072014E~307) = false +> (0.123E2, 0.22250738585072014E~307) = true +== (0.123E2, 0.22250738585072014E~307) = false +?= (0.123E2, 0.22250738585072014E~307) = false +< (0.123E2, 0.11125369292536007E~307) = false +> (0.123E2, 0.11125369292536007E~307) = true +== (0.123E2, 0.11125369292536007E~307) = false +?= (0.123E2, 0.11125369292536007E~307) = false +< (0.123E2, 0.5E~323) = false +> (0.123E2, 0.5E~323) = true +== (0.123E2, 0.5E~323) = false +?= (0.123E2, 0.5E~323) = false +< (0.123E2, 0.0) = false +> (0.123E2, 0.0) = true +== (0.123E2, 0.0) = false +?= (0.123E2, 0.0) = false +< (0.123E2, ~0.17976931348623157E309) = false +> (0.123E2, ~0.17976931348623157E309) = true +== (0.123E2, ~0.17976931348623157E309) = false +?= (0.123E2, ~0.17976931348623157E309) = false +< (0.123E2, ~0.8988465674311579E308) = false +> (0.123E2, ~0.8988465674311579E308) = true +== (0.123E2, ~0.8988465674311579E308) = false +?= (0.123E2, ~0.8988465674311579E308) = false +< (0.123E2, ~0.123E4) = false +> (0.123E2, ~0.123E4) = true +== (0.123E2, ~0.123E4) = false +?= (0.123E2, ~0.123E4) = false +< (0.123E2, ~0.123E2) = false +> (0.123E2, ~0.123E2) = true +== (0.123E2, ~0.123E2) = false +?= (0.123E2, ~0.123E2) = false +< (0.123E2, ~0.3141592653589793E1) = false +> (0.123E2, ~0.3141592653589793E1) = true +== (0.123E2, ~0.3141592653589793E1) = false +?= (0.123E2, ~0.3141592653589793E1) = false +< (0.123E2, ~0.2718281828459045E1) = false +> (0.123E2, ~0.2718281828459045E1) = true +== (0.123E2, ~0.2718281828459045E1) = false +?= (0.123E2, ~0.2718281828459045E1) = false +< (0.123E2, ~0.123E1) = false +> (0.123E2, ~0.123E1) = true +== (0.123E2, ~0.123E1) = false +?= (0.123E2, ~0.123E1) = false +< (0.123E2, ~0.123) = false +> (0.123E2, ~0.123) = true +== (0.123E2, ~0.123) = false +?= (0.123E2, ~0.123) = false +< (0.123E2, ~0.123E~2) = false +> (0.123E2, ~0.123E~2) = true +== (0.123E2, ~0.123E~2) = false +?= (0.123E2, ~0.123E~2) = false +< (0.123E2, ~0.22250738585072014E~307) = false +> (0.123E2, ~0.22250738585072014E~307) = true +== (0.123E2, ~0.22250738585072014E~307) = false +?= (0.123E2, ~0.22250738585072014E~307) = false +< (0.123E2, ~0.11125369292536007E~307) = false +> (0.123E2, ~0.11125369292536007E~307) = true +== (0.123E2, ~0.11125369292536007E~307) = false +?= (0.123E2, ~0.11125369292536007E~307) = false +< (0.123E2, ~0.5E~323) = false +> (0.123E2, ~0.5E~323) = true +== (0.123E2, ~0.5E~323) = false +?= (0.123E2, ~0.5E~323) = false +< (0.123E2, ~0.0) = false +> (0.123E2, ~0.0) = true +== (0.123E2, ~0.0) = false +?= (0.123E2, ~0.0) = false +< (0.3141592653589793E1, 0.17976931348623157E309) = true +> (0.3141592653589793E1, 0.17976931348623157E309) = false +== (0.3141592653589793E1, 0.17976931348623157E309) = false +?= (0.3141592653589793E1, 0.17976931348623157E309) = false +< (0.3141592653589793E1, 0.8988465674311579E308) = true +> (0.3141592653589793E1, 0.8988465674311579E308) = false +== (0.3141592653589793E1, 0.8988465674311579E308) = false +?= (0.3141592653589793E1, 0.8988465674311579E308) = false +< (0.3141592653589793E1, 0.123E4) = true +> (0.3141592653589793E1, 0.123E4) = false +== (0.3141592653589793E1, 0.123E4) = false +?= (0.3141592653589793E1, 0.123E4) = false +< (0.3141592653589793E1, 0.123E2) = true +> (0.3141592653589793E1, 0.123E2) = false +== (0.3141592653589793E1, 0.123E2) = false +?= (0.3141592653589793E1, 0.123E2) = false +< (0.3141592653589793E1, 0.3141592653589793E1) = false +> (0.3141592653589793E1, 0.3141592653589793E1) = false +== (0.3141592653589793E1, 0.3141592653589793E1) = true +?= (0.3141592653589793E1, 0.3141592653589793E1) = true +< (0.3141592653589793E1, 0.2718281828459045E1) = false +> (0.3141592653589793E1, 0.2718281828459045E1) = true +== (0.3141592653589793E1, 0.2718281828459045E1) = false +?= (0.3141592653589793E1, 0.2718281828459045E1) = false +< (0.3141592653589793E1, 0.123E1) = false +> (0.3141592653589793E1, 0.123E1) = true +== (0.3141592653589793E1, 0.123E1) = false +?= (0.3141592653589793E1, 0.123E1) = false +< (0.3141592653589793E1, 0.123) = false +> (0.3141592653589793E1, 0.123) = true +== (0.3141592653589793E1, 0.123) = false +?= (0.3141592653589793E1, 0.123) = false +< (0.3141592653589793E1, 0.123E~2) = false +> (0.3141592653589793E1, 0.123E~2) = true +== (0.3141592653589793E1, 0.123E~2) = false +?= (0.3141592653589793E1, 0.123E~2) = false +< (0.3141592653589793E1, 0.22250738585072014E~307) = false +> (0.3141592653589793E1, 0.22250738585072014E~307) = true +== (0.3141592653589793E1, 0.22250738585072014E~307) = false +?= (0.3141592653589793E1, 0.22250738585072014E~307) = false +< (0.3141592653589793E1, 0.11125369292536007E~307) = false +> (0.3141592653589793E1, 0.11125369292536007E~307) = true +== (0.3141592653589793E1, 0.11125369292536007E~307) = false +?= (0.3141592653589793E1, 0.11125369292536007E~307) = false +< (0.3141592653589793E1, 0.5E~323) = false +> (0.3141592653589793E1, 0.5E~323) = true +== (0.3141592653589793E1, 0.5E~323) = false +?= (0.3141592653589793E1, 0.5E~323) = false +< (0.3141592653589793E1, 0.0) = false +> (0.3141592653589793E1, 0.0) = true +== (0.3141592653589793E1, 0.0) = false +?= (0.3141592653589793E1, 0.0) = false +< (0.3141592653589793E1, ~0.17976931348623157E309) = false +> (0.3141592653589793E1, ~0.17976931348623157E309) = true +== (0.3141592653589793E1, ~0.17976931348623157E309) = false +?= (0.3141592653589793E1, ~0.17976931348623157E309) = false +< (0.3141592653589793E1, ~0.8988465674311579E308) = false +> (0.3141592653589793E1, ~0.8988465674311579E308) = true +== (0.3141592653589793E1, ~0.8988465674311579E308) = false +?= (0.3141592653589793E1, ~0.8988465674311579E308) = false +< (0.3141592653589793E1, ~0.123E4) = false +> (0.3141592653589793E1, ~0.123E4) = true +== (0.3141592653589793E1, ~0.123E4) = false +?= (0.3141592653589793E1, ~0.123E4) = false +< (0.3141592653589793E1, ~0.123E2) = false +> (0.3141592653589793E1, ~0.123E2) = true +== (0.3141592653589793E1, ~0.123E2) = false +?= (0.3141592653589793E1, ~0.123E2) = false +< (0.3141592653589793E1, ~0.3141592653589793E1) = false +> (0.3141592653589793E1, ~0.3141592653589793E1) = true +== (0.3141592653589793E1, ~0.3141592653589793E1) = false +?= (0.3141592653589793E1, ~0.3141592653589793E1) = false +< (0.3141592653589793E1, ~0.2718281828459045E1) = false +> (0.3141592653589793E1, ~0.2718281828459045E1) = true +== (0.3141592653589793E1, ~0.2718281828459045E1) = false +?= (0.3141592653589793E1, ~0.2718281828459045E1) = false +< (0.3141592653589793E1, ~0.123E1) = false +> (0.3141592653589793E1, ~0.123E1) = true +== (0.3141592653589793E1, ~0.123E1) = false +?= (0.3141592653589793E1, ~0.123E1) = false +< (0.3141592653589793E1, ~0.123) = false +> (0.3141592653589793E1, ~0.123) = true +== (0.3141592653589793E1, ~0.123) = false +?= (0.3141592653589793E1, ~0.123) = false +< (0.3141592653589793E1, ~0.123E~2) = false +> (0.3141592653589793E1, ~0.123E~2) = true +== (0.3141592653589793E1, ~0.123E~2) = false +?= (0.3141592653589793E1, ~0.123E~2) = false +< (0.3141592653589793E1, ~0.22250738585072014E~307) = false +> (0.3141592653589793E1, ~0.22250738585072014E~307) = true +== (0.3141592653589793E1, ~0.22250738585072014E~307) = false +?= (0.3141592653589793E1, ~0.22250738585072014E~307) = false +< (0.3141592653589793E1, ~0.11125369292536007E~307) = false +> (0.3141592653589793E1, ~0.11125369292536007E~307) = true +== (0.3141592653589793E1, ~0.11125369292536007E~307) = false +?= (0.3141592653589793E1, ~0.11125369292536007E~307) = false +< (0.3141592653589793E1, ~0.5E~323) = false +> (0.3141592653589793E1, ~0.5E~323) = true +== (0.3141592653589793E1, ~0.5E~323) = false +?= (0.3141592653589793E1, ~0.5E~323) = false +< (0.3141592653589793E1, ~0.0) = false +> (0.3141592653589793E1, ~0.0) = true +== (0.3141592653589793E1, ~0.0) = false +?= (0.3141592653589793E1, ~0.0) = false +< (0.2718281828459045E1, 0.17976931348623157E309) = true +> (0.2718281828459045E1, 0.17976931348623157E309) = false +== (0.2718281828459045E1, 0.17976931348623157E309) = false +?= (0.2718281828459045E1, 0.17976931348623157E309) = false +< (0.2718281828459045E1, 0.8988465674311579E308) = true +> (0.2718281828459045E1, 0.8988465674311579E308) = false +== (0.2718281828459045E1, 0.8988465674311579E308) = false +?= (0.2718281828459045E1, 0.8988465674311579E308) = false +< (0.2718281828459045E1, 0.123E4) = true +> (0.2718281828459045E1, 0.123E4) = false +== (0.2718281828459045E1, 0.123E4) = false +?= (0.2718281828459045E1, 0.123E4) = false +< (0.2718281828459045E1, 0.123E2) = true +> (0.2718281828459045E1, 0.123E2) = false +== (0.2718281828459045E1, 0.123E2) = false +?= (0.2718281828459045E1, 0.123E2) = false +< (0.2718281828459045E1, 0.3141592653589793E1) = true +> (0.2718281828459045E1, 0.3141592653589793E1) = false +== (0.2718281828459045E1, 0.3141592653589793E1) = false +?= (0.2718281828459045E1, 0.3141592653589793E1) = false +< (0.2718281828459045E1, 0.2718281828459045E1) = false +> (0.2718281828459045E1, 0.2718281828459045E1) = false +== (0.2718281828459045E1, 0.2718281828459045E1) = true +?= (0.2718281828459045E1, 0.2718281828459045E1) = true +< (0.2718281828459045E1, 0.123E1) = false +> (0.2718281828459045E1, 0.123E1) = true +== (0.2718281828459045E1, 0.123E1) = false +?= (0.2718281828459045E1, 0.123E1) = false +< (0.2718281828459045E1, 0.123) = false +> (0.2718281828459045E1, 0.123) = true +== (0.2718281828459045E1, 0.123) = false +?= (0.2718281828459045E1, 0.123) = false +< (0.2718281828459045E1, 0.123E~2) = false +> (0.2718281828459045E1, 0.123E~2) = true +== (0.2718281828459045E1, 0.123E~2) = false +?= (0.2718281828459045E1, 0.123E~2) = false +< (0.2718281828459045E1, 0.22250738585072014E~307) = false +> (0.2718281828459045E1, 0.22250738585072014E~307) = true +== (0.2718281828459045E1, 0.22250738585072014E~307) = false +?= (0.2718281828459045E1, 0.22250738585072014E~307) = false +< (0.2718281828459045E1, 0.11125369292536007E~307) = false +> (0.2718281828459045E1, 0.11125369292536007E~307) = true +== (0.2718281828459045E1, 0.11125369292536007E~307) = false +?= (0.2718281828459045E1, 0.11125369292536007E~307) = false +< (0.2718281828459045E1, 0.5E~323) = false +> (0.2718281828459045E1, 0.5E~323) = true +== (0.2718281828459045E1, 0.5E~323) = false +?= (0.2718281828459045E1, 0.5E~323) = false +< (0.2718281828459045E1, 0.0) = false +> (0.2718281828459045E1, 0.0) = true +== (0.2718281828459045E1, 0.0) = false +?= (0.2718281828459045E1, 0.0) = false +< (0.2718281828459045E1, ~0.17976931348623157E309) = false +> (0.2718281828459045E1, ~0.17976931348623157E309) = true +== (0.2718281828459045E1, ~0.17976931348623157E309) = false +?= (0.2718281828459045E1, ~0.17976931348623157E309) = false +< (0.2718281828459045E1, ~0.8988465674311579E308) = false +> (0.2718281828459045E1, ~0.8988465674311579E308) = true +== (0.2718281828459045E1, ~0.8988465674311579E308) = false +?= (0.2718281828459045E1, ~0.8988465674311579E308) = false +< (0.2718281828459045E1, ~0.123E4) = false +> (0.2718281828459045E1, ~0.123E4) = true +== (0.2718281828459045E1, ~0.123E4) = false +?= (0.2718281828459045E1, ~0.123E4) = false +< (0.2718281828459045E1, ~0.123E2) = false +> (0.2718281828459045E1, ~0.123E2) = true +== (0.2718281828459045E1, ~0.123E2) = false +?= (0.2718281828459045E1, ~0.123E2) = false +< (0.2718281828459045E1, ~0.3141592653589793E1) = false +> (0.2718281828459045E1, ~0.3141592653589793E1) = true +== (0.2718281828459045E1, ~0.3141592653589793E1) = false +?= (0.2718281828459045E1, ~0.3141592653589793E1) = false +< (0.2718281828459045E1, ~0.2718281828459045E1) = false +> (0.2718281828459045E1, ~0.2718281828459045E1) = true +== (0.2718281828459045E1, ~0.2718281828459045E1) = false +?= (0.2718281828459045E1, ~0.2718281828459045E1) = false +< (0.2718281828459045E1, ~0.123E1) = false +> (0.2718281828459045E1, ~0.123E1) = true +== (0.2718281828459045E1, ~0.123E1) = false +?= (0.2718281828459045E1, ~0.123E1) = false +< (0.2718281828459045E1, ~0.123) = false +> (0.2718281828459045E1, ~0.123) = true +== (0.2718281828459045E1, ~0.123) = false +?= (0.2718281828459045E1, ~0.123) = false +< (0.2718281828459045E1, ~0.123E~2) = false +> (0.2718281828459045E1, ~0.123E~2) = true +== (0.2718281828459045E1, ~0.123E~2) = false +?= (0.2718281828459045E1, ~0.123E~2) = false +< (0.2718281828459045E1, ~0.22250738585072014E~307) = false +> (0.2718281828459045E1, ~0.22250738585072014E~307) = true +== (0.2718281828459045E1, ~0.22250738585072014E~307) = false +?= (0.2718281828459045E1, ~0.22250738585072014E~307) = false +< (0.2718281828459045E1, ~0.11125369292536007E~307) = false +> (0.2718281828459045E1, ~0.11125369292536007E~307) = true +== (0.2718281828459045E1, ~0.11125369292536007E~307) = false +?= (0.2718281828459045E1, ~0.11125369292536007E~307) = false +< (0.2718281828459045E1, ~0.5E~323) = false +> (0.2718281828459045E1, ~0.5E~323) = true +== (0.2718281828459045E1, ~0.5E~323) = false +?= (0.2718281828459045E1, ~0.5E~323) = false +< (0.2718281828459045E1, ~0.0) = false +> (0.2718281828459045E1, ~0.0) = true +== (0.2718281828459045E1, ~0.0) = false +?= (0.2718281828459045E1, ~0.0) = false +< (0.123E1, 0.17976931348623157E309) = true +> (0.123E1, 0.17976931348623157E309) = false +== (0.123E1, 0.17976931348623157E309) = false +?= (0.123E1, 0.17976931348623157E309) = false +< (0.123E1, 0.8988465674311579E308) = true +> (0.123E1, 0.8988465674311579E308) = false +== (0.123E1, 0.8988465674311579E308) = false +?= (0.123E1, 0.8988465674311579E308) = false +< (0.123E1, 0.123E4) = true +> (0.123E1, 0.123E4) = false +== (0.123E1, 0.123E4) = false +?= (0.123E1, 0.123E4) = false +< (0.123E1, 0.123E2) = true +> (0.123E1, 0.123E2) = false +== (0.123E1, 0.123E2) = false +?= (0.123E1, 0.123E2) = false +< (0.123E1, 0.3141592653589793E1) = true +> (0.123E1, 0.3141592653589793E1) = false +== (0.123E1, 0.3141592653589793E1) = false +?= (0.123E1, 0.3141592653589793E1) = false +< (0.123E1, 0.2718281828459045E1) = true +> (0.123E1, 0.2718281828459045E1) = false +== (0.123E1, 0.2718281828459045E1) = false +?= (0.123E1, 0.2718281828459045E1) = false +< (0.123E1, 0.123E1) = false +> (0.123E1, 0.123E1) = false +== (0.123E1, 0.123E1) = true +?= (0.123E1, 0.123E1) = true +< (0.123E1, 0.123) = false +> (0.123E1, 0.123) = true +== (0.123E1, 0.123) = false +?= (0.123E1, 0.123) = false +< (0.123E1, 0.123E~2) = false +> (0.123E1, 0.123E~2) = true +== (0.123E1, 0.123E~2) = false +?= (0.123E1, 0.123E~2) = false +< (0.123E1, 0.22250738585072014E~307) = false +> (0.123E1, 0.22250738585072014E~307) = true +== (0.123E1, 0.22250738585072014E~307) = false +?= (0.123E1, 0.22250738585072014E~307) = false +< (0.123E1, 0.11125369292536007E~307) = false +> (0.123E1, 0.11125369292536007E~307) = true +== (0.123E1, 0.11125369292536007E~307) = false +?= (0.123E1, 0.11125369292536007E~307) = false +< (0.123E1, 0.5E~323) = false +> (0.123E1, 0.5E~323) = true +== (0.123E1, 0.5E~323) = false +?= (0.123E1, 0.5E~323) = false +< (0.123E1, 0.0) = false +> (0.123E1, 0.0) = true +== (0.123E1, 0.0) = false +?= (0.123E1, 0.0) = false +< (0.123E1, ~0.17976931348623157E309) = false +> (0.123E1, ~0.17976931348623157E309) = true +== (0.123E1, ~0.17976931348623157E309) = false +?= (0.123E1, ~0.17976931348623157E309) = false +< (0.123E1, ~0.8988465674311579E308) = false +> (0.123E1, ~0.8988465674311579E308) = true +== (0.123E1, ~0.8988465674311579E308) = false +?= (0.123E1, ~0.8988465674311579E308) = false +< (0.123E1, ~0.123E4) = false +> (0.123E1, ~0.123E4) = true +== (0.123E1, ~0.123E4) = false +?= (0.123E1, ~0.123E4) = false +< (0.123E1, ~0.123E2) = false +> (0.123E1, ~0.123E2) = true +== (0.123E1, ~0.123E2) = false +?= (0.123E1, ~0.123E2) = false +< (0.123E1, ~0.3141592653589793E1) = false +> (0.123E1, ~0.3141592653589793E1) = true +== (0.123E1, ~0.3141592653589793E1) = false +?= (0.123E1, ~0.3141592653589793E1) = false +< (0.123E1, ~0.2718281828459045E1) = false +> (0.123E1, ~0.2718281828459045E1) = true +== (0.123E1, ~0.2718281828459045E1) = false +?= (0.123E1, ~0.2718281828459045E1) = false +< (0.123E1, ~0.123E1) = false +> (0.123E1, ~0.123E1) = true +== (0.123E1, ~0.123E1) = false +?= (0.123E1, ~0.123E1) = false +< (0.123E1, ~0.123) = false +> (0.123E1, ~0.123) = true +== (0.123E1, ~0.123) = false +?= (0.123E1, ~0.123) = false +< (0.123E1, ~0.123E~2) = false +> (0.123E1, ~0.123E~2) = true +== (0.123E1, ~0.123E~2) = false +?= (0.123E1, ~0.123E~2) = false +< (0.123E1, ~0.22250738585072014E~307) = false +> (0.123E1, ~0.22250738585072014E~307) = true +== (0.123E1, ~0.22250738585072014E~307) = false +?= (0.123E1, ~0.22250738585072014E~307) = false +< (0.123E1, ~0.11125369292536007E~307) = false +> (0.123E1, ~0.11125369292536007E~307) = true +== (0.123E1, ~0.11125369292536007E~307) = false +?= (0.123E1, ~0.11125369292536007E~307) = false +< (0.123E1, ~0.5E~323) = false +> (0.123E1, ~0.5E~323) = true +== (0.123E1, ~0.5E~323) = false +?= (0.123E1, ~0.5E~323) = false +< (0.123E1, ~0.0) = false +> (0.123E1, ~0.0) = true +== (0.123E1, ~0.0) = false +?= (0.123E1, ~0.0) = false +< (0.123, 0.17976931348623157E309) = true +> (0.123, 0.17976931348623157E309) = false +== (0.123, 0.17976931348623157E309) = false +?= (0.123, 0.17976931348623157E309) = false +< (0.123, 0.8988465674311579E308) = true +> (0.123, 0.8988465674311579E308) = false +== (0.123, 0.8988465674311579E308) = false +?= (0.123, 0.8988465674311579E308) = false +< (0.123, 0.123E4) = true +> (0.123, 0.123E4) = false +== (0.123, 0.123E4) = false +?= (0.123, 0.123E4) = false +< (0.123, 0.123E2) = true +> (0.123, 0.123E2) = false +== (0.123, 0.123E2) = false +?= (0.123, 0.123E2) = false +< (0.123, 0.3141592653589793E1) = true +> (0.123, 0.3141592653589793E1) = false +== (0.123, 0.3141592653589793E1) = false +?= (0.123, 0.3141592653589793E1) = false +< (0.123, 0.2718281828459045E1) = true +> (0.123, 0.2718281828459045E1) = false +== (0.123, 0.2718281828459045E1) = false +?= (0.123, 0.2718281828459045E1) = false +< (0.123, 0.123E1) = true +> (0.123, 0.123E1) = false +== (0.123, 0.123E1) = false +?= (0.123, 0.123E1) = false +< (0.123, 0.123) = false +> (0.123, 0.123) = false +== (0.123, 0.123) = true +?= (0.123, 0.123) = true +< (0.123, 0.123E~2) = false +> (0.123, 0.123E~2) = true +== (0.123, 0.123E~2) = false +?= (0.123, 0.123E~2) = false +< (0.123, 0.22250738585072014E~307) = false +> (0.123, 0.22250738585072014E~307) = true +== (0.123, 0.22250738585072014E~307) = false +?= (0.123, 0.22250738585072014E~307) = false +< (0.123, 0.11125369292536007E~307) = false +> (0.123, 0.11125369292536007E~307) = true +== (0.123, 0.11125369292536007E~307) = false +?= (0.123, 0.11125369292536007E~307) = false +< (0.123, 0.5E~323) = false +> (0.123, 0.5E~323) = true +== (0.123, 0.5E~323) = false +?= (0.123, 0.5E~323) = false +< (0.123, 0.0) = false +> (0.123, 0.0) = true +== (0.123, 0.0) = false +?= (0.123, 0.0) = false +< (0.123, ~0.17976931348623157E309) = false +> (0.123, ~0.17976931348623157E309) = true +== (0.123, ~0.17976931348623157E309) = false +?= (0.123, ~0.17976931348623157E309) = false +< (0.123, ~0.8988465674311579E308) = false +> (0.123, ~0.8988465674311579E308) = true +== (0.123, ~0.8988465674311579E308) = false +?= (0.123, ~0.8988465674311579E308) = false +< (0.123, ~0.123E4) = false +> (0.123, ~0.123E4) = true +== (0.123, ~0.123E4) = false +?= (0.123, ~0.123E4) = false +< (0.123, ~0.123E2) = false +> (0.123, ~0.123E2) = true +== (0.123, ~0.123E2) = false +?= (0.123, ~0.123E2) = false +< (0.123, ~0.3141592653589793E1) = false +> (0.123, ~0.3141592653589793E1) = true +== (0.123, ~0.3141592653589793E1) = false +?= (0.123, ~0.3141592653589793E1) = false +< (0.123, ~0.2718281828459045E1) = false +> (0.123, ~0.2718281828459045E1) = true +== (0.123, ~0.2718281828459045E1) = false +?= (0.123, ~0.2718281828459045E1) = false +< (0.123, ~0.123E1) = false +> (0.123, ~0.123E1) = true +== (0.123, ~0.123E1) = false +?= (0.123, ~0.123E1) = false +< (0.123, ~0.123) = false +> (0.123, ~0.123) = true +== (0.123, ~0.123) = false +?= (0.123, ~0.123) = false +< (0.123, ~0.123E~2) = false +> (0.123, ~0.123E~2) = true +== (0.123, ~0.123E~2) = false +?= (0.123, ~0.123E~2) = false +< (0.123, ~0.22250738585072014E~307) = false +> (0.123, ~0.22250738585072014E~307) = true +== (0.123, ~0.22250738585072014E~307) = false +?= (0.123, ~0.22250738585072014E~307) = false +< (0.123, ~0.11125369292536007E~307) = false +> (0.123, ~0.11125369292536007E~307) = true +== (0.123, ~0.11125369292536007E~307) = false +?= (0.123, ~0.11125369292536007E~307) = false +< (0.123, ~0.5E~323) = false +> (0.123, ~0.5E~323) = true +== (0.123, ~0.5E~323) = false +?= (0.123, ~0.5E~323) = false +< (0.123, ~0.0) = false +> (0.123, ~0.0) = true +== (0.123, ~0.0) = false +?= (0.123, ~0.0) = false +< (0.123E~2, 0.17976931348623157E309) = true +> (0.123E~2, 0.17976931348623157E309) = false +== (0.123E~2, 0.17976931348623157E309) = false +?= (0.123E~2, 0.17976931348623157E309) = false +< (0.123E~2, 0.8988465674311579E308) = true +> (0.123E~2, 0.8988465674311579E308) = false +== (0.123E~2, 0.8988465674311579E308) = false +?= (0.123E~2, 0.8988465674311579E308) = false +< (0.123E~2, 0.123E4) = true +> (0.123E~2, 0.123E4) = false +== (0.123E~2, 0.123E4) = false +?= (0.123E~2, 0.123E4) = false +< (0.123E~2, 0.123E2) = true +> (0.123E~2, 0.123E2) = false +== (0.123E~2, 0.123E2) = false +?= (0.123E~2, 0.123E2) = false +< (0.123E~2, 0.3141592653589793E1) = true +> (0.123E~2, 0.3141592653589793E1) = false +== (0.123E~2, 0.3141592653589793E1) = false +?= (0.123E~2, 0.3141592653589793E1) = false +< (0.123E~2, 0.2718281828459045E1) = true +> (0.123E~2, 0.2718281828459045E1) = false +== (0.123E~2, 0.2718281828459045E1) = false +?= (0.123E~2, 0.2718281828459045E1) = false +< (0.123E~2, 0.123E1) = true +> (0.123E~2, 0.123E1) = false +== (0.123E~2, 0.123E1) = false +?= (0.123E~2, 0.123E1) = false +< (0.123E~2, 0.123) = true +> (0.123E~2, 0.123) = false +== (0.123E~2, 0.123) = false +?= (0.123E~2, 0.123) = false +< (0.123E~2, 0.123E~2) = false +> (0.123E~2, 0.123E~2) = false +== (0.123E~2, 0.123E~2) = true +?= (0.123E~2, 0.123E~2) = true +< (0.123E~2, 0.22250738585072014E~307) = false +> (0.123E~2, 0.22250738585072014E~307) = true +== (0.123E~2, 0.22250738585072014E~307) = false +?= (0.123E~2, 0.22250738585072014E~307) = false +< (0.123E~2, 0.11125369292536007E~307) = false +> (0.123E~2, 0.11125369292536007E~307) = true +== (0.123E~2, 0.11125369292536007E~307) = false +?= (0.123E~2, 0.11125369292536007E~307) = false +< (0.123E~2, 0.5E~323) = false +> (0.123E~2, 0.5E~323) = true +== (0.123E~2, 0.5E~323) = false +?= (0.123E~2, 0.5E~323) = false +< (0.123E~2, 0.0) = false +> (0.123E~2, 0.0) = true +== (0.123E~2, 0.0) = false +?= (0.123E~2, 0.0) = false +< (0.123E~2, ~0.17976931348623157E309) = false +> (0.123E~2, ~0.17976931348623157E309) = true +== (0.123E~2, ~0.17976931348623157E309) = false +?= (0.123E~2, ~0.17976931348623157E309) = false +< (0.123E~2, ~0.8988465674311579E308) = false +> (0.123E~2, ~0.8988465674311579E308) = true +== (0.123E~2, ~0.8988465674311579E308) = false +?= (0.123E~2, ~0.8988465674311579E308) = false +< (0.123E~2, ~0.123E4) = false +> (0.123E~2, ~0.123E4) = true +== (0.123E~2, ~0.123E4) = false +?= (0.123E~2, ~0.123E4) = false +< (0.123E~2, ~0.123E2) = false +> (0.123E~2, ~0.123E2) = true +== (0.123E~2, ~0.123E2) = false +?= (0.123E~2, ~0.123E2) = false +< (0.123E~2, ~0.3141592653589793E1) = false +> (0.123E~2, ~0.3141592653589793E1) = true +== (0.123E~2, ~0.3141592653589793E1) = false +?= (0.123E~2, ~0.3141592653589793E1) = false +< (0.123E~2, ~0.2718281828459045E1) = false +> (0.123E~2, ~0.2718281828459045E1) = true +== (0.123E~2, ~0.2718281828459045E1) = false +?= (0.123E~2, ~0.2718281828459045E1) = false +< (0.123E~2, ~0.123E1) = false +> (0.123E~2, ~0.123E1) = true +== (0.123E~2, ~0.123E1) = false +?= (0.123E~2, ~0.123E1) = false +< (0.123E~2, ~0.123) = false +> (0.123E~2, ~0.123) = true +== (0.123E~2, ~0.123) = false +?= (0.123E~2, ~0.123) = false +< (0.123E~2, ~0.123E~2) = false +> (0.123E~2, ~0.123E~2) = true +== (0.123E~2, ~0.123E~2) = false +?= (0.123E~2, ~0.123E~2) = false +< (0.123E~2, ~0.22250738585072014E~307) = false +> (0.123E~2, ~0.22250738585072014E~307) = true +== (0.123E~2, ~0.22250738585072014E~307) = false +?= (0.123E~2, ~0.22250738585072014E~307) = false +< (0.123E~2, ~0.11125369292536007E~307) = false +> (0.123E~2, ~0.11125369292536007E~307) = true +== (0.123E~2, ~0.11125369292536007E~307) = false +?= (0.123E~2, ~0.11125369292536007E~307) = false +< (0.123E~2, ~0.5E~323) = false +> (0.123E~2, ~0.5E~323) = true +== (0.123E~2, ~0.5E~323) = false +?= (0.123E~2, ~0.5E~323) = false +< (0.123E~2, ~0.0) = false +> (0.123E~2, ~0.0) = true +== (0.123E~2, ~0.0) = false +?= (0.123E~2, ~0.0) = false +< (0.22250738585072014E~307, 0.17976931348623157E309) = true +> (0.22250738585072014E~307, 0.17976931348623157E309) = false +== (0.22250738585072014E~307, 0.17976931348623157E309) = false +?= (0.22250738585072014E~307, 0.17976931348623157E309) = false +< (0.22250738585072014E~307, 0.8988465674311579E308) = true +> (0.22250738585072014E~307, 0.8988465674311579E308) = false +== (0.22250738585072014E~307, 0.8988465674311579E308) = false +?= (0.22250738585072014E~307, 0.8988465674311579E308) = false +< (0.22250738585072014E~307, 0.123E4) = true +> (0.22250738585072014E~307, 0.123E4) = false +== (0.22250738585072014E~307, 0.123E4) = false +?= (0.22250738585072014E~307, 0.123E4) = false +< (0.22250738585072014E~307, 0.123E2) = true +> (0.22250738585072014E~307, 0.123E2) = false +== (0.22250738585072014E~307, 0.123E2) = false +?= (0.22250738585072014E~307, 0.123E2) = false +< (0.22250738585072014E~307, 0.3141592653589793E1) = true +> (0.22250738585072014E~307, 0.3141592653589793E1) = false +== (0.22250738585072014E~307, 0.3141592653589793E1) = false +?= (0.22250738585072014E~307, 0.3141592653589793E1) = false +< (0.22250738585072014E~307, 0.2718281828459045E1) = true +> (0.22250738585072014E~307, 0.2718281828459045E1) = false +== (0.22250738585072014E~307, 0.2718281828459045E1) = false +?= (0.22250738585072014E~307, 0.2718281828459045E1) = false +< (0.22250738585072014E~307, 0.123E1) = true +> (0.22250738585072014E~307, 0.123E1) = false +== (0.22250738585072014E~307, 0.123E1) = false +?= (0.22250738585072014E~307, 0.123E1) = false +< (0.22250738585072014E~307, 0.123) = true +> (0.22250738585072014E~307, 0.123) = false +== (0.22250738585072014E~307, 0.123) = false +?= (0.22250738585072014E~307, 0.123) = false +< (0.22250738585072014E~307, 0.123E~2) = true +> (0.22250738585072014E~307, 0.123E~2) = false +== (0.22250738585072014E~307, 0.123E~2) = false +?= (0.22250738585072014E~307, 0.123E~2) = false +< (0.22250738585072014E~307, 0.22250738585072014E~307) = false +> (0.22250738585072014E~307, 0.22250738585072014E~307) = false +== (0.22250738585072014E~307, 0.22250738585072014E~307) = true +?= (0.22250738585072014E~307, 0.22250738585072014E~307) = true +< (0.22250738585072014E~307, 0.11125369292536007E~307) = false +> (0.22250738585072014E~307, 0.11125369292536007E~307) = true +== (0.22250738585072014E~307, 0.11125369292536007E~307) = false +?= (0.22250738585072014E~307, 0.11125369292536007E~307) = false +< (0.22250738585072014E~307, 0.5E~323) = false +> (0.22250738585072014E~307, 0.5E~323) = true +== (0.22250738585072014E~307, 0.5E~323) = false +?= (0.22250738585072014E~307, 0.5E~323) = false +< (0.22250738585072014E~307, 0.0) = false +> (0.22250738585072014E~307, 0.0) = true +== (0.22250738585072014E~307, 0.0) = false +?= (0.22250738585072014E~307, 0.0) = false +< (0.22250738585072014E~307, ~0.17976931348623157E309) = false +> (0.22250738585072014E~307, ~0.17976931348623157E309) = true +== (0.22250738585072014E~307, ~0.17976931348623157E309) = false +?= (0.22250738585072014E~307, ~0.17976931348623157E309) = false +< (0.22250738585072014E~307, ~0.8988465674311579E308) = false +> (0.22250738585072014E~307, ~0.8988465674311579E308) = true +== (0.22250738585072014E~307, ~0.8988465674311579E308) = false +?= (0.22250738585072014E~307, ~0.8988465674311579E308) = false +< (0.22250738585072014E~307, ~0.123E4) = false +> (0.22250738585072014E~307, ~0.123E4) = true +== (0.22250738585072014E~307, ~0.123E4) = false +?= (0.22250738585072014E~307, ~0.123E4) = false +< (0.22250738585072014E~307, ~0.123E2) = false +> (0.22250738585072014E~307, ~0.123E2) = true +== (0.22250738585072014E~307, ~0.123E2) = false +?= (0.22250738585072014E~307, ~0.123E2) = false +< (0.22250738585072014E~307, ~0.3141592653589793E1) = false +> (0.22250738585072014E~307, ~0.3141592653589793E1) = true +== (0.22250738585072014E~307, ~0.3141592653589793E1) = false +?= (0.22250738585072014E~307, ~0.3141592653589793E1) = false +< (0.22250738585072014E~307, ~0.2718281828459045E1) = false +> (0.22250738585072014E~307, ~0.2718281828459045E1) = true +== (0.22250738585072014E~307, ~0.2718281828459045E1) = false +?= (0.22250738585072014E~307, ~0.2718281828459045E1) = false +< (0.22250738585072014E~307, ~0.123E1) = false +> (0.22250738585072014E~307, ~0.123E1) = true +== (0.22250738585072014E~307, ~0.123E1) = false +?= (0.22250738585072014E~307, ~0.123E1) = false +< (0.22250738585072014E~307, ~0.123) = false +> (0.22250738585072014E~307, ~0.123) = true +== (0.22250738585072014E~307, ~0.123) = false +?= (0.22250738585072014E~307, ~0.123) = false +< (0.22250738585072014E~307, ~0.123E~2) = false +> (0.22250738585072014E~307, ~0.123E~2) = true +== (0.22250738585072014E~307, ~0.123E~2) = false +?= (0.22250738585072014E~307, ~0.123E~2) = false +< (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +> (0.22250738585072014E~307, ~0.22250738585072014E~307) = true +== (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +?= (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +< (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +> (0.22250738585072014E~307, ~0.11125369292536007E~307) = true +== (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +?= (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +< (0.22250738585072014E~307, ~0.5E~323) = false +> (0.22250738585072014E~307, ~0.5E~323) = true +== (0.22250738585072014E~307, ~0.5E~323) = false +?= (0.22250738585072014E~307, ~0.5E~323) = false +< (0.22250738585072014E~307, ~0.0) = false +> (0.22250738585072014E~307, ~0.0) = true +== (0.22250738585072014E~307, ~0.0) = false +?= (0.22250738585072014E~307, ~0.0) = false +< (0.11125369292536007E~307, 0.17976931348623157E309) = true +> (0.11125369292536007E~307, 0.17976931348623157E309) = false +== (0.11125369292536007E~307, 0.17976931348623157E309) = false +?= (0.11125369292536007E~307, 0.17976931348623157E309) = false +< (0.11125369292536007E~307, 0.8988465674311579E308) = true +> (0.11125369292536007E~307, 0.8988465674311579E308) = false +== (0.11125369292536007E~307, 0.8988465674311579E308) = false +?= (0.11125369292536007E~307, 0.8988465674311579E308) = false +< (0.11125369292536007E~307, 0.123E4) = true +> (0.11125369292536007E~307, 0.123E4) = false +== (0.11125369292536007E~307, 0.123E4) = false +?= (0.11125369292536007E~307, 0.123E4) = false +< (0.11125369292536007E~307, 0.123E2) = true +> (0.11125369292536007E~307, 0.123E2) = false +== (0.11125369292536007E~307, 0.123E2) = false +?= (0.11125369292536007E~307, 0.123E2) = false +< (0.11125369292536007E~307, 0.3141592653589793E1) = true +> (0.11125369292536007E~307, 0.3141592653589793E1) = false +== (0.11125369292536007E~307, 0.3141592653589793E1) = false +?= (0.11125369292536007E~307, 0.3141592653589793E1) = false +< (0.11125369292536007E~307, 0.2718281828459045E1) = true +> (0.11125369292536007E~307, 0.2718281828459045E1) = false +== (0.11125369292536007E~307, 0.2718281828459045E1) = false +?= (0.11125369292536007E~307, 0.2718281828459045E1) = false +< (0.11125369292536007E~307, 0.123E1) = true +> (0.11125369292536007E~307, 0.123E1) = false +== (0.11125369292536007E~307, 0.123E1) = false +?= (0.11125369292536007E~307, 0.123E1) = false +< (0.11125369292536007E~307, 0.123) = true +> (0.11125369292536007E~307, 0.123) = false +== (0.11125369292536007E~307, 0.123) = false +?= (0.11125369292536007E~307, 0.123) = false +< (0.11125369292536007E~307, 0.123E~2) = true +> (0.11125369292536007E~307, 0.123E~2) = false +== (0.11125369292536007E~307, 0.123E~2) = false +?= (0.11125369292536007E~307, 0.123E~2) = false +< (0.11125369292536007E~307, 0.22250738585072014E~307) = true +> (0.11125369292536007E~307, 0.22250738585072014E~307) = false +== (0.11125369292536007E~307, 0.22250738585072014E~307) = false +?= (0.11125369292536007E~307, 0.22250738585072014E~307) = false +< (0.11125369292536007E~307, 0.11125369292536007E~307) = false +> (0.11125369292536007E~307, 0.11125369292536007E~307) = false +== (0.11125369292536007E~307, 0.11125369292536007E~307) = true +?= (0.11125369292536007E~307, 0.11125369292536007E~307) = true +< (0.11125369292536007E~307, 0.5E~323) = false +> (0.11125369292536007E~307, 0.5E~323) = true +== (0.11125369292536007E~307, 0.5E~323) = false +?= (0.11125369292536007E~307, 0.5E~323) = false +< (0.11125369292536007E~307, 0.0) = false +> (0.11125369292536007E~307, 0.0) = true +== (0.11125369292536007E~307, 0.0) = false +?= (0.11125369292536007E~307, 0.0) = false +< (0.11125369292536007E~307, ~0.17976931348623157E309) = false +> (0.11125369292536007E~307, ~0.17976931348623157E309) = true +== (0.11125369292536007E~307, ~0.17976931348623157E309) = false +?= (0.11125369292536007E~307, ~0.17976931348623157E309) = false +< (0.11125369292536007E~307, ~0.8988465674311579E308) = false +> (0.11125369292536007E~307, ~0.8988465674311579E308) = true +== (0.11125369292536007E~307, ~0.8988465674311579E308) = false +?= (0.11125369292536007E~307, ~0.8988465674311579E308) = false +< (0.11125369292536007E~307, ~0.123E4) = false +> (0.11125369292536007E~307, ~0.123E4) = true +== (0.11125369292536007E~307, ~0.123E4) = false +?= (0.11125369292536007E~307, ~0.123E4) = false +< (0.11125369292536007E~307, ~0.123E2) = false +> (0.11125369292536007E~307, ~0.123E2) = true +== (0.11125369292536007E~307, ~0.123E2) = false +?= (0.11125369292536007E~307, ~0.123E2) = false +< (0.11125369292536007E~307, ~0.3141592653589793E1) = false +> (0.11125369292536007E~307, ~0.3141592653589793E1) = true +== (0.11125369292536007E~307, ~0.3141592653589793E1) = false +?= (0.11125369292536007E~307, ~0.3141592653589793E1) = false +< (0.11125369292536007E~307, ~0.2718281828459045E1) = false +> (0.11125369292536007E~307, ~0.2718281828459045E1) = true +== (0.11125369292536007E~307, ~0.2718281828459045E1) = false +?= (0.11125369292536007E~307, ~0.2718281828459045E1) = false +< (0.11125369292536007E~307, ~0.123E1) = false +> (0.11125369292536007E~307, ~0.123E1) = true +== (0.11125369292536007E~307, ~0.123E1) = false +?= (0.11125369292536007E~307, ~0.123E1) = false +< (0.11125369292536007E~307, ~0.123) = false +> (0.11125369292536007E~307, ~0.123) = true +== (0.11125369292536007E~307, ~0.123) = false +?= (0.11125369292536007E~307, ~0.123) = false +< (0.11125369292536007E~307, ~0.123E~2) = false +> (0.11125369292536007E~307, ~0.123E~2) = true +== (0.11125369292536007E~307, ~0.123E~2) = false +?= (0.11125369292536007E~307, ~0.123E~2) = false +< (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +> (0.11125369292536007E~307, ~0.22250738585072014E~307) = true +== (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +?= (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +< (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +> (0.11125369292536007E~307, ~0.11125369292536007E~307) = true +== (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +?= (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +< (0.11125369292536007E~307, ~0.5E~323) = false +> (0.11125369292536007E~307, ~0.5E~323) = true +== (0.11125369292536007E~307, ~0.5E~323) = false +?= (0.11125369292536007E~307, ~0.5E~323) = false +< (0.11125369292536007E~307, ~0.0) = false +> (0.11125369292536007E~307, ~0.0) = true +== (0.11125369292536007E~307, ~0.0) = false +?= (0.11125369292536007E~307, ~0.0) = false +< (0.5E~323, 0.17976931348623157E309) = true +> (0.5E~323, 0.17976931348623157E309) = false +== (0.5E~323, 0.17976931348623157E309) = false +?= (0.5E~323, 0.17976931348623157E309) = false +< (0.5E~323, 0.8988465674311579E308) = true +> (0.5E~323, 0.8988465674311579E308) = false +== (0.5E~323, 0.8988465674311579E308) = false +?= (0.5E~323, 0.8988465674311579E308) = false +< (0.5E~323, 0.123E4) = true +> (0.5E~323, 0.123E4) = false +== (0.5E~323, 0.123E4) = false +?= (0.5E~323, 0.123E4) = false +< (0.5E~323, 0.123E2) = true +> (0.5E~323, 0.123E2) = false +== (0.5E~323, 0.123E2) = false +?= (0.5E~323, 0.123E2) = false +< (0.5E~323, 0.3141592653589793E1) = true +> (0.5E~323, 0.3141592653589793E1) = false +== (0.5E~323, 0.3141592653589793E1) = false +?= (0.5E~323, 0.3141592653589793E1) = false +< (0.5E~323, 0.2718281828459045E1) = true +> (0.5E~323, 0.2718281828459045E1) = false +== (0.5E~323, 0.2718281828459045E1) = false +?= (0.5E~323, 0.2718281828459045E1) = false +< (0.5E~323, 0.123E1) = true +> (0.5E~323, 0.123E1) = false +== (0.5E~323, 0.123E1) = false +?= (0.5E~323, 0.123E1) = false +< (0.5E~323, 0.123) = true +> (0.5E~323, 0.123) = false +== (0.5E~323, 0.123) = false +?= (0.5E~323, 0.123) = false +< (0.5E~323, 0.123E~2) = true +> (0.5E~323, 0.123E~2) = false +== (0.5E~323, 0.123E~2) = false +?= (0.5E~323, 0.123E~2) = false +< (0.5E~323, 0.22250738585072014E~307) = true +> (0.5E~323, 0.22250738585072014E~307) = false +== (0.5E~323, 0.22250738585072014E~307) = false +?= (0.5E~323, 0.22250738585072014E~307) = false +< (0.5E~323, 0.11125369292536007E~307) = true +> (0.5E~323, 0.11125369292536007E~307) = false +== (0.5E~323, 0.11125369292536007E~307) = false +?= (0.5E~323, 0.11125369292536007E~307) = false +< (0.5E~323, 0.5E~323) = false +> (0.5E~323, 0.5E~323) = false +== (0.5E~323, 0.5E~323) = true +?= (0.5E~323, 0.5E~323) = true +< (0.5E~323, 0.0) = false +> (0.5E~323, 0.0) = true +== (0.5E~323, 0.0) = false +?= (0.5E~323, 0.0) = false +< (0.5E~323, ~0.17976931348623157E309) = false +> (0.5E~323, ~0.17976931348623157E309) = true +== (0.5E~323, ~0.17976931348623157E309) = false +?= (0.5E~323, ~0.17976931348623157E309) = false +< (0.5E~323, ~0.8988465674311579E308) = false +> (0.5E~323, ~0.8988465674311579E308) = true +== (0.5E~323, ~0.8988465674311579E308) = false +?= (0.5E~323, ~0.8988465674311579E308) = false +< (0.5E~323, ~0.123E4) = false +> (0.5E~323, ~0.123E4) = true +== (0.5E~323, ~0.123E4) = false +?= (0.5E~323, ~0.123E4) = false +< (0.5E~323, ~0.123E2) = false +> (0.5E~323, ~0.123E2) = true +== (0.5E~323, ~0.123E2) = false +?= (0.5E~323, ~0.123E2) = false +< (0.5E~323, ~0.3141592653589793E1) = false +> (0.5E~323, ~0.3141592653589793E1) = true +== (0.5E~323, ~0.3141592653589793E1) = false +?= (0.5E~323, ~0.3141592653589793E1) = false +< (0.5E~323, ~0.2718281828459045E1) = false +> (0.5E~323, ~0.2718281828459045E1) = true +== (0.5E~323, ~0.2718281828459045E1) = false +?= (0.5E~323, ~0.2718281828459045E1) = false +< (0.5E~323, ~0.123E1) = false +> (0.5E~323, ~0.123E1) = true +== (0.5E~323, ~0.123E1) = false +?= (0.5E~323, ~0.123E1) = false +< (0.5E~323, ~0.123) = false +> (0.5E~323, ~0.123) = true +== (0.5E~323, ~0.123) = false +?= (0.5E~323, ~0.123) = false +< (0.5E~323, ~0.123E~2) = false +> (0.5E~323, ~0.123E~2) = true +== (0.5E~323, ~0.123E~2) = false +?= (0.5E~323, ~0.123E~2) = false +< (0.5E~323, ~0.22250738585072014E~307) = false +> (0.5E~323, ~0.22250738585072014E~307) = true +== (0.5E~323, ~0.22250738585072014E~307) = false +?= (0.5E~323, ~0.22250738585072014E~307) = false +< (0.5E~323, ~0.11125369292536007E~307) = false +> (0.5E~323, ~0.11125369292536007E~307) = true +== (0.5E~323, ~0.11125369292536007E~307) = false +?= (0.5E~323, ~0.11125369292536007E~307) = false +< (0.5E~323, ~0.5E~323) = false +> (0.5E~323, ~0.5E~323) = true +== (0.5E~323, ~0.5E~323) = false +?= (0.5E~323, ~0.5E~323) = false +< (0.5E~323, ~0.0) = false +> (0.5E~323, ~0.0) = true +== (0.5E~323, ~0.0) = false +?= (0.5E~323, ~0.0) = false +< (0.0, 0.17976931348623157E309) = true +> (0.0, 0.17976931348623157E309) = false +== (0.0, 0.17976931348623157E309) = false +?= (0.0, 0.17976931348623157E309) = false +< (0.0, 0.8988465674311579E308) = true +> (0.0, 0.8988465674311579E308) = false +== (0.0, 0.8988465674311579E308) = false +?= (0.0, 0.8988465674311579E308) = false +< (0.0, 0.123E4) = true +> (0.0, 0.123E4) = false +== (0.0, 0.123E4) = false +?= (0.0, 0.123E4) = false +< (0.0, 0.123E2) = true +> (0.0, 0.123E2) = false +== (0.0, 0.123E2) = false +?= (0.0, 0.123E2) = false +< (0.0, 0.3141592653589793E1) = true +> (0.0, 0.3141592653589793E1) = false +== (0.0, 0.3141592653589793E1) = false +?= (0.0, 0.3141592653589793E1) = false +< (0.0, 0.2718281828459045E1) = true +> (0.0, 0.2718281828459045E1) = false +== (0.0, 0.2718281828459045E1) = false +?= (0.0, 0.2718281828459045E1) = false +< (0.0, 0.123E1) = true +> (0.0, 0.123E1) = false +== (0.0, 0.123E1) = false +?= (0.0, 0.123E1) = false +< (0.0, 0.123) = true +> (0.0, 0.123) = false +== (0.0, 0.123) = false +?= (0.0, 0.123) = false +< (0.0, 0.123E~2) = true +> (0.0, 0.123E~2) = false +== (0.0, 0.123E~2) = false +?= (0.0, 0.123E~2) = false +< (0.0, 0.22250738585072014E~307) = true +> (0.0, 0.22250738585072014E~307) = false +== (0.0, 0.22250738585072014E~307) = false +?= (0.0, 0.22250738585072014E~307) = false +< (0.0, 0.11125369292536007E~307) = true +> (0.0, 0.11125369292536007E~307) = false +== (0.0, 0.11125369292536007E~307) = false +?= (0.0, 0.11125369292536007E~307) = false +< (0.0, 0.5E~323) = true +> (0.0, 0.5E~323) = false +== (0.0, 0.5E~323) = false +?= (0.0, 0.5E~323) = false +< (0.0, 0.0) = false +> (0.0, 0.0) = false +== (0.0, 0.0) = true +?= (0.0, 0.0) = true +< (0.0, ~0.17976931348623157E309) = false +> (0.0, ~0.17976931348623157E309) = true +== (0.0, ~0.17976931348623157E309) = false +?= (0.0, ~0.17976931348623157E309) = false +< (0.0, ~0.8988465674311579E308) = false +> (0.0, ~0.8988465674311579E308) = true +== (0.0, ~0.8988465674311579E308) = false +?= (0.0, ~0.8988465674311579E308) = false +< (0.0, ~0.123E4) = false +> (0.0, ~0.123E4) = true +== (0.0, ~0.123E4) = false +?= (0.0, ~0.123E4) = false +< (0.0, ~0.123E2) = false +> (0.0, ~0.123E2) = true +== (0.0, ~0.123E2) = false +?= (0.0, ~0.123E2) = false +< (0.0, ~0.3141592653589793E1) = false +> (0.0, ~0.3141592653589793E1) = true +== (0.0, ~0.3141592653589793E1) = false +?= (0.0, ~0.3141592653589793E1) = false +< (0.0, ~0.2718281828459045E1) = false +> (0.0, ~0.2718281828459045E1) = true +== (0.0, ~0.2718281828459045E1) = false +?= (0.0, ~0.2718281828459045E1) = false +< (0.0, ~0.123E1) = false +> (0.0, ~0.123E1) = true +== (0.0, ~0.123E1) = false +?= (0.0, ~0.123E1) = false +< (0.0, ~0.123) = false +> (0.0, ~0.123) = true +== (0.0, ~0.123) = false +?= (0.0, ~0.123) = false +< (0.0, ~0.123E~2) = false +> (0.0, ~0.123E~2) = true +== (0.0, ~0.123E~2) = false +?= (0.0, ~0.123E~2) = false +< (0.0, ~0.22250738585072014E~307) = false +> (0.0, ~0.22250738585072014E~307) = true +== (0.0, ~0.22250738585072014E~307) = false +?= (0.0, ~0.22250738585072014E~307) = false +< (0.0, ~0.11125369292536007E~307) = false +> (0.0, ~0.11125369292536007E~307) = true +== (0.0, ~0.11125369292536007E~307) = false +?= (0.0, ~0.11125369292536007E~307) = false +< (0.0, ~0.5E~323) = false +> (0.0, ~0.5E~323) = true +== (0.0, ~0.5E~323) = false +?= (0.0, ~0.5E~323) = false +< (0.0, ~0.0) = false +> (0.0, ~0.0) = false +== (0.0, ~0.0) = true +?= (0.0, ~0.0) = true +< (~0.17976931348623157E309, 0.17976931348623157E309) = true +> (~0.17976931348623157E309, 0.17976931348623157E309) = false +== (~0.17976931348623157E309, 0.17976931348623157E309) = false +?= (~0.17976931348623157E309, 0.17976931348623157E309) = false +< (~0.17976931348623157E309, 0.8988465674311579E308) = true +> (~0.17976931348623157E309, 0.8988465674311579E308) = false +== (~0.17976931348623157E309, 0.8988465674311579E308) = false +?= (~0.17976931348623157E309, 0.8988465674311579E308) = false +< (~0.17976931348623157E309, 0.123E4) = true +> (~0.17976931348623157E309, 0.123E4) = false +== (~0.17976931348623157E309, 0.123E4) = false +?= (~0.17976931348623157E309, 0.123E4) = false +< (~0.17976931348623157E309, 0.123E2) = true +> (~0.17976931348623157E309, 0.123E2) = false +== (~0.17976931348623157E309, 0.123E2) = false +?= (~0.17976931348623157E309, 0.123E2) = false +< (~0.17976931348623157E309, 0.3141592653589793E1) = true +> (~0.17976931348623157E309, 0.3141592653589793E1) = false +== (~0.17976931348623157E309, 0.3141592653589793E1) = false +?= (~0.17976931348623157E309, 0.3141592653589793E1) = false +< (~0.17976931348623157E309, 0.2718281828459045E1) = true +> (~0.17976931348623157E309, 0.2718281828459045E1) = false +== (~0.17976931348623157E309, 0.2718281828459045E1) = false +?= (~0.17976931348623157E309, 0.2718281828459045E1) = false +< (~0.17976931348623157E309, 0.123E1) = true +> (~0.17976931348623157E309, 0.123E1) = false +== (~0.17976931348623157E309, 0.123E1) = false +?= (~0.17976931348623157E309, 0.123E1) = false +< (~0.17976931348623157E309, 0.123) = true +> (~0.17976931348623157E309, 0.123) = false +== (~0.17976931348623157E309, 0.123) = false +?= (~0.17976931348623157E309, 0.123) = false +< (~0.17976931348623157E309, 0.123E~2) = true +> (~0.17976931348623157E309, 0.123E~2) = false +== (~0.17976931348623157E309, 0.123E~2) = false +?= (~0.17976931348623157E309, 0.123E~2) = false +< (~0.17976931348623157E309, 0.22250738585072014E~307) = true +> (~0.17976931348623157E309, 0.22250738585072014E~307) = false +== (~0.17976931348623157E309, 0.22250738585072014E~307) = false +?= (~0.17976931348623157E309, 0.22250738585072014E~307) = false +< (~0.17976931348623157E309, 0.11125369292536007E~307) = true +> (~0.17976931348623157E309, 0.11125369292536007E~307) = false +== (~0.17976931348623157E309, 0.11125369292536007E~307) = false +?= (~0.17976931348623157E309, 0.11125369292536007E~307) = false +< (~0.17976931348623157E309, 0.5E~323) = true +> (~0.17976931348623157E309, 0.5E~323) = false +== (~0.17976931348623157E309, 0.5E~323) = false +?= (~0.17976931348623157E309, 0.5E~323) = false +< (~0.17976931348623157E309, 0.0) = true +> (~0.17976931348623157E309, 0.0) = false +== (~0.17976931348623157E309, 0.0) = false +?= (~0.17976931348623157E309, 0.0) = false +< (~0.17976931348623157E309, ~0.17976931348623157E309) = false +> (~0.17976931348623157E309, ~0.17976931348623157E309) = false +== (~0.17976931348623157E309, ~0.17976931348623157E309) = true +?= (~0.17976931348623157E309, ~0.17976931348623157E309) = true +< (~0.17976931348623157E309, ~0.8988465674311579E308) = true +> (~0.17976931348623157E309, ~0.8988465674311579E308) = false +== (~0.17976931348623157E309, ~0.8988465674311579E308) = false +?= (~0.17976931348623157E309, ~0.8988465674311579E308) = false +< (~0.17976931348623157E309, ~0.123E4) = true +> (~0.17976931348623157E309, ~0.123E4) = false +== (~0.17976931348623157E309, ~0.123E4) = false +?= (~0.17976931348623157E309, ~0.123E4) = false +< (~0.17976931348623157E309, ~0.123E2) = true +> (~0.17976931348623157E309, ~0.123E2) = false +== (~0.17976931348623157E309, ~0.123E2) = false +?= (~0.17976931348623157E309, ~0.123E2) = false +< (~0.17976931348623157E309, ~0.3141592653589793E1) = true +> (~0.17976931348623157E309, ~0.3141592653589793E1) = false +== (~0.17976931348623157E309, ~0.3141592653589793E1) = false +?= (~0.17976931348623157E309, ~0.3141592653589793E1) = false +< (~0.17976931348623157E309, ~0.2718281828459045E1) = true +> (~0.17976931348623157E309, ~0.2718281828459045E1) = false +== (~0.17976931348623157E309, ~0.2718281828459045E1) = false +?= (~0.17976931348623157E309, ~0.2718281828459045E1) = false +< (~0.17976931348623157E309, ~0.123E1) = true +> (~0.17976931348623157E309, ~0.123E1) = false +== (~0.17976931348623157E309, ~0.123E1) = false +?= (~0.17976931348623157E309, ~0.123E1) = false +< (~0.17976931348623157E309, ~0.123) = true +> (~0.17976931348623157E309, ~0.123) = false +== (~0.17976931348623157E309, ~0.123) = false +?= (~0.17976931348623157E309, ~0.123) = false +< (~0.17976931348623157E309, ~0.123E~2) = true +> (~0.17976931348623157E309, ~0.123E~2) = false +== (~0.17976931348623157E309, ~0.123E~2) = false +?= (~0.17976931348623157E309, ~0.123E~2) = false +< (~0.17976931348623157E309, ~0.22250738585072014E~307) = true +> (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +== (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +?= (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +< (~0.17976931348623157E309, ~0.11125369292536007E~307) = true +> (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +== (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +?= (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +< (~0.17976931348623157E309, ~0.5E~323) = true +> (~0.17976931348623157E309, ~0.5E~323) = false +== (~0.17976931348623157E309, ~0.5E~323) = false +?= (~0.17976931348623157E309, ~0.5E~323) = false +< (~0.17976931348623157E309, ~0.0) = true +> (~0.17976931348623157E309, ~0.0) = false +== (~0.17976931348623157E309, ~0.0) = false +?= (~0.17976931348623157E309, ~0.0) = false +< (~0.8988465674311579E308, 0.17976931348623157E309) = true +> (~0.8988465674311579E308, 0.17976931348623157E309) = false +== (~0.8988465674311579E308, 0.17976931348623157E309) = false +?= (~0.8988465674311579E308, 0.17976931348623157E309) = false +< (~0.8988465674311579E308, 0.8988465674311579E308) = true +> (~0.8988465674311579E308, 0.8988465674311579E308) = false +== (~0.8988465674311579E308, 0.8988465674311579E308) = false +?= (~0.8988465674311579E308, 0.8988465674311579E308) = false +< (~0.8988465674311579E308, 0.123E4) = true +> (~0.8988465674311579E308, 0.123E4) = false +== (~0.8988465674311579E308, 0.123E4) = false +?= (~0.8988465674311579E308, 0.123E4) = false +< (~0.8988465674311579E308, 0.123E2) = true +> (~0.8988465674311579E308, 0.123E2) = false +== (~0.8988465674311579E308, 0.123E2) = false +?= (~0.8988465674311579E308, 0.123E2) = false +< (~0.8988465674311579E308, 0.3141592653589793E1) = true +> (~0.8988465674311579E308, 0.3141592653589793E1) = false +== (~0.8988465674311579E308, 0.3141592653589793E1) = false +?= (~0.8988465674311579E308, 0.3141592653589793E1) = false +< (~0.8988465674311579E308, 0.2718281828459045E1) = true +> (~0.8988465674311579E308, 0.2718281828459045E1) = false +== (~0.8988465674311579E308, 0.2718281828459045E1) = false +?= (~0.8988465674311579E308, 0.2718281828459045E1) = false +< (~0.8988465674311579E308, 0.123E1) = true +> (~0.8988465674311579E308, 0.123E1) = false +== (~0.8988465674311579E308, 0.123E1) = false +?= (~0.8988465674311579E308, 0.123E1) = false +< (~0.8988465674311579E308, 0.123) = true +> (~0.8988465674311579E308, 0.123) = false +== (~0.8988465674311579E308, 0.123) = false +?= (~0.8988465674311579E308, 0.123) = false +< (~0.8988465674311579E308, 0.123E~2) = true +> (~0.8988465674311579E308, 0.123E~2) = false +== (~0.8988465674311579E308, 0.123E~2) = false +?= (~0.8988465674311579E308, 0.123E~2) = false +< (~0.8988465674311579E308, 0.22250738585072014E~307) = true +> (~0.8988465674311579E308, 0.22250738585072014E~307) = false +== (~0.8988465674311579E308, 0.22250738585072014E~307) = false +?= (~0.8988465674311579E308, 0.22250738585072014E~307) = false +< (~0.8988465674311579E308, 0.11125369292536007E~307) = true +> (~0.8988465674311579E308, 0.11125369292536007E~307) = false +== (~0.8988465674311579E308, 0.11125369292536007E~307) = false +?= (~0.8988465674311579E308, 0.11125369292536007E~307) = false +< (~0.8988465674311579E308, 0.5E~323) = true +> (~0.8988465674311579E308, 0.5E~323) = false +== (~0.8988465674311579E308, 0.5E~323) = false +?= (~0.8988465674311579E308, 0.5E~323) = false +< (~0.8988465674311579E308, 0.0) = true +> (~0.8988465674311579E308, 0.0) = false +== (~0.8988465674311579E308, 0.0) = false +?= (~0.8988465674311579E308, 0.0) = false +< (~0.8988465674311579E308, ~0.17976931348623157E309) = false +> (~0.8988465674311579E308, ~0.17976931348623157E309) = true +== (~0.8988465674311579E308, ~0.17976931348623157E309) = false +?= (~0.8988465674311579E308, ~0.17976931348623157E309) = false +< (~0.8988465674311579E308, ~0.8988465674311579E308) = false +> (~0.8988465674311579E308, ~0.8988465674311579E308) = false +== (~0.8988465674311579E308, ~0.8988465674311579E308) = true +?= (~0.8988465674311579E308, ~0.8988465674311579E308) = true +< (~0.8988465674311579E308, ~0.123E4) = true +> (~0.8988465674311579E308, ~0.123E4) = false +== (~0.8988465674311579E308, ~0.123E4) = false +?= (~0.8988465674311579E308, ~0.123E4) = false +< (~0.8988465674311579E308, ~0.123E2) = true +> (~0.8988465674311579E308, ~0.123E2) = false +== (~0.8988465674311579E308, ~0.123E2) = false +?= (~0.8988465674311579E308, ~0.123E2) = false +< (~0.8988465674311579E308, ~0.3141592653589793E1) = true +> (~0.8988465674311579E308, ~0.3141592653589793E1) = false +== (~0.8988465674311579E308, ~0.3141592653589793E1) = false +?= (~0.8988465674311579E308, ~0.3141592653589793E1) = false +< (~0.8988465674311579E308, ~0.2718281828459045E1) = true +> (~0.8988465674311579E308, ~0.2718281828459045E1) = false +== (~0.8988465674311579E308, ~0.2718281828459045E1) = false +?= (~0.8988465674311579E308, ~0.2718281828459045E1) = false +< (~0.8988465674311579E308, ~0.123E1) = true +> (~0.8988465674311579E308, ~0.123E1) = false +== (~0.8988465674311579E308, ~0.123E1) = false +?= (~0.8988465674311579E308, ~0.123E1) = false +< (~0.8988465674311579E308, ~0.123) = true +> (~0.8988465674311579E308, ~0.123) = false +== (~0.8988465674311579E308, ~0.123) = false +?= (~0.8988465674311579E308, ~0.123) = false +< (~0.8988465674311579E308, ~0.123E~2) = true +> (~0.8988465674311579E308, ~0.123E~2) = false +== (~0.8988465674311579E308, ~0.123E~2) = false +?= (~0.8988465674311579E308, ~0.123E~2) = false +< (~0.8988465674311579E308, ~0.22250738585072014E~307) = true +> (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +== (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +?= (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +< (~0.8988465674311579E308, ~0.11125369292536007E~307) = true +> (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +== (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +?= (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +< (~0.8988465674311579E308, ~0.5E~323) = true +> (~0.8988465674311579E308, ~0.5E~323) = false +== (~0.8988465674311579E308, ~0.5E~323) = false +?= (~0.8988465674311579E308, ~0.5E~323) = false +< (~0.8988465674311579E308, ~0.0) = true +> (~0.8988465674311579E308, ~0.0) = false +== (~0.8988465674311579E308, ~0.0) = false +?= (~0.8988465674311579E308, ~0.0) = false +< (~0.123E4, 0.17976931348623157E309) = true +> (~0.123E4, 0.17976931348623157E309) = false +== (~0.123E4, 0.17976931348623157E309) = false +?= (~0.123E4, 0.17976931348623157E309) = false +< (~0.123E4, 0.8988465674311579E308) = true +> (~0.123E4, 0.8988465674311579E308) = false +== (~0.123E4, 0.8988465674311579E308) = false +?= (~0.123E4, 0.8988465674311579E308) = false +< (~0.123E4, 0.123E4) = true +> (~0.123E4, 0.123E4) = false +== (~0.123E4, 0.123E4) = false +?= (~0.123E4, 0.123E4) = false +< (~0.123E4, 0.123E2) = true +> (~0.123E4, 0.123E2) = false +== (~0.123E4, 0.123E2) = false +?= (~0.123E4, 0.123E2) = false +< (~0.123E4, 0.3141592653589793E1) = true +> (~0.123E4, 0.3141592653589793E1) = false +== (~0.123E4, 0.3141592653589793E1) = false +?= (~0.123E4, 0.3141592653589793E1) = false +< (~0.123E4, 0.2718281828459045E1) = true +> (~0.123E4, 0.2718281828459045E1) = false +== (~0.123E4, 0.2718281828459045E1) = false +?= (~0.123E4, 0.2718281828459045E1) = false +< (~0.123E4, 0.123E1) = true +> (~0.123E4, 0.123E1) = false +== (~0.123E4, 0.123E1) = false +?= (~0.123E4, 0.123E1) = false +< (~0.123E4, 0.123) = true +> (~0.123E4, 0.123) = false +== (~0.123E4, 0.123) = false +?= (~0.123E4, 0.123) = false +< (~0.123E4, 0.123E~2) = true +> (~0.123E4, 0.123E~2) = false +== (~0.123E4, 0.123E~2) = false +?= (~0.123E4, 0.123E~2) = false +< (~0.123E4, 0.22250738585072014E~307) = true +> (~0.123E4, 0.22250738585072014E~307) = false +== (~0.123E4, 0.22250738585072014E~307) = false +?= (~0.123E4, 0.22250738585072014E~307) = false +< (~0.123E4, 0.11125369292536007E~307) = true +> (~0.123E4, 0.11125369292536007E~307) = false +== (~0.123E4, 0.11125369292536007E~307) = false +?= (~0.123E4, 0.11125369292536007E~307) = false +< (~0.123E4, 0.5E~323) = true +> (~0.123E4, 0.5E~323) = false +== (~0.123E4, 0.5E~323) = false +?= (~0.123E4, 0.5E~323) = false +< (~0.123E4, 0.0) = true +> (~0.123E4, 0.0) = false +== (~0.123E4, 0.0) = false +?= (~0.123E4, 0.0) = false +< (~0.123E4, ~0.17976931348623157E309) = false +> (~0.123E4, ~0.17976931348623157E309) = true +== (~0.123E4, ~0.17976931348623157E309) = false +?= (~0.123E4, ~0.17976931348623157E309) = false +< (~0.123E4, ~0.8988465674311579E308) = false +> (~0.123E4, ~0.8988465674311579E308) = true +== (~0.123E4, ~0.8988465674311579E308) = false +?= (~0.123E4, ~0.8988465674311579E308) = false +< (~0.123E4, ~0.123E4) = false +> (~0.123E4, ~0.123E4) = false +== (~0.123E4, ~0.123E4) = true +?= (~0.123E4, ~0.123E4) = true +< (~0.123E4, ~0.123E2) = true +> (~0.123E4, ~0.123E2) = false +== (~0.123E4, ~0.123E2) = false +?= (~0.123E4, ~0.123E2) = false +< (~0.123E4, ~0.3141592653589793E1) = true +> (~0.123E4, ~0.3141592653589793E1) = false +== (~0.123E4, ~0.3141592653589793E1) = false +?= (~0.123E4, ~0.3141592653589793E1) = false +< (~0.123E4, ~0.2718281828459045E1) = true +> (~0.123E4, ~0.2718281828459045E1) = false +== (~0.123E4, ~0.2718281828459045E1) = false +?= (~0.123E4, ~0.2718281828459045E1) = false +< (~0.123E4, ~0.123E1) = true +> (~0.123E4, ~0.123E1) = false +== (~0.123E4, ~0.123E1) = false +?= (~0.123E4, ~0.123E1) = false +< (~0.123E4, ~0.123) = true +> (~0.123E4, ~0.123) = false +== (~0.123E4, ~0.123) = false +?= (~0.123E4, ~0.123) = false +< (~0.123E4, ~0.123E~2) = true +> (~0.123E4, ~0.123E~2) = false +== (~0.123E4, ~0.123E~2) = false +?= (~0.123E4, ~0.123E~2) = false +< (~0.123E4, ~0.22250738585072014E~307) = true +> (~0.123E4, ~0.22250738585072014E~307) = false +== (~0.123E4, ~0.22250738585072014E~307) = false +?= (~0.123E4, ~0.22250738585072014E~307) = false +< (~0.123E4, ~0.11125369292536007E~307) = true +> (~0.123E4, ~0.11125369292536007E~307) = false +== (~0.123E4, ~0.11125369292536007E~307) = false +?= (~0.123E4, ~0.11125369292536007E~307) = false +< (~0.123E4, ~0.5E~323) = true +> (~0.123E4, ~0.5E~323) = false +== (~0.123E4, ~0.5E~323) = false +?= (~0.123E4, ~0.5E~323) = false +< (~0.123E4, ~0.0) = true +> (~0.123E4, ~0.0) = false +== (~0.123E4, ~0.0) = false +?= (~0.123E4, ~0.0) = false +< (~0.123E2, 0.17976931348623157E309) = true +> (~0.123E2, 0.17976931348623157E309) = false +== (~0.123E2, 0.17976931348623157E309) = false +?= (~0.123E2, 0.17976931348623157E309) = false +< (~0.123E2, 0.8988465674311579E308) = true +> (~0.123E2, 0.8988465674311579E308) = false +== (~0.123E2, 0.8988465674311579E308) = false +?= (~0.123E2, 0.8988465674311579E308) = false +< (~0.123E2, 0.123E4) = true +> (~0.123E2, 0.123E4) = false +== (~0.123E2, 0.123E4) = false +?= (~0.123E2, 0.123E4) = false +< (~0.123E2, 0.123E2) = true +> (~0.123E2, 0.123E2) = false +== (~0.123E2, 0.123E2) = false +?= (~0.123E2, 0.123E2) = false +< (~0.123E2, 0.3141592653589793E1) = true +> (~0.123E2, 0.3141592653589793E1) = false +== (~0.123E2, 0.3141592653589793E1) = false +?= (~0.123E2, 0.3141592653589793E1) = false +< (~0.123E2, 0.2718281828459045E1) = true +> (~0.123E2, 0.2718281828459045E1) = false +== (~0.123E2, 0.2718281828459045E1) = false +?= (~0.123E2, 0.2718281828459045E1) = false +< (~0.123E2, 0.123E1) = true +> (~0.123E2, 0.123E1) = false +== (~0.123E2, 0.123E1) = false +?= (~0.123E2, 0.123E1) = false +< (~0.123E2, 0.123) = true +> (~0.123E2, 0.123) = false +== (~0.123E2, 0.123) = false +?= (~0.123E2, 0.123) = false +< (~0.123E2, 0.123E~2) = true +> (~0.123E2, 0.123E~2) = false +== (~0.123E2, 0.123E~2) = false +?= (~0.123E2, 0.123E~2) = false +< (~0.123E2, 0.22250738585072014E~307) = true +> (~0.123E2, 0.22250738585072014E~307) = false +== (~0.123E2, 0.22250738585072014E~307) = false +?= (~0.123E2, 0.22250738585072014E~307) = false +< (~0.123E2, 0.11125369292536007E~307) = true +> (~0.123E2, 0.11125369292536007E~307) = false +== (~0.123E2, 0.11125369292536007E~307) = false +?= (~0.123E2, 0.11125369292536007E~307) = false +< (~0.123E2, 0.5E~323) = true +> (~0.123E2, 0.5E~323) = false +== (~0.123E2, 0.5E~323) = false +?= (~0.123E2, 0.5E~323) = false +< (~0.123E2, 0.0) = true +> (~0.123E2, 0.0) = false +== (~0.123E2, 0.0) = false +?= (~0.123E2, 0.0) = false +< (~0.123E2, ~0.17976931348623157E309) = false +> (~0.123E2, ~0.17976931348623157E309) = true +== (~0.123E2, ~0.17976931348623157E309) = false +?= (~0.123E2, ~0.17976931348623157E309) = false +< (~0.123E2, ~0.8988465674311579E308) = false +> (~0.123E2, ~0.8988465674311579E308) = true +== (~0.123E2, ~0.8988465674311579E308) = false +?= (~0.123E2, ~0.8988465674311579E308) = false +< (~0.123E2, ~0.123E4) = false +> (~0.123E2, ~0.123E4) = true +== (~0.123E2, ~0.123E4) = false +?= (~0.123E2, ~0.123E4) = false +< (~0.123E2, ~0.123E2) = false +> (~0.123E2, ~0.123E2) = false +== (~0.123E2, ~0.123E2) = true +?= (~0.123E2, ~0.123E2) = true +< (~0.123E2, ~0.3141592653589793E1) = true +> (~0.123E2, ~0.3141592653589793E1) = false +== (~0.123E2, ~0.3141592653589793E1) = false +?= (~0.123E2, ~0.3141592653589793E1) = false +< (~0.123E2, ~0.2718281828459045E1) = true +> (~0.123E2, ~0.2718281828459045E1) = false +== (~0.123E2, ~0.2718281828459045E1) = false +?= (~0.123E2, ~0.2718281828459045E1) = false +< (~0.123E2, ~0.123E1) = true +> (~0.123E2, ~0.123E1) = false +== (~0.123E2, ~0.123E1) = false +?= (~0.123E2, ~0.123E1) = false +< (~0.123E2, ~0.123) = true +> (~0.123E2, ~0.123) = false +== (~0.123E2, ~0.123) = false +?= (~0.123E2, ~0.123) = false +< (~0.123E2, ~0.123E~2) = true +> (~0.123E2, ~0.123E~2) = false +== (~0.123E2, ~0.123E~2) = false +?= (~0.123E2, ~0.123E~2) = false +< (~0.123E2, ~0.22250738585072014E~307) = true +> (~0.123E2, ~0.22250738585072014E~307) = false +== (~0.123E2, ~0.22250738585072014E~307) = false +?= (~0.123E2, ~0.22250738585072014E~307) = false +< (~0.123E2, ~0.11125369292536007E~307) = true +> (~0.123E2, ~0.11125369292536007E~307) = false +== (~0.123E2, ~0.11125369292536007E~307) = false +?= (~0.123E2, ~0.11125369292536007E~307) = false +< (~0.123E2, ~0.5E~323) = true +> (~0.123E2, ~0.5E~323) = false +== (~0.123E2, ~0.5E~323) = false +?= (~0.123E2, ~0.5E~323) = false +< (~0.123E2, ~0.0) = true +> (~0.123E2, ~0.0) = false +== (~0.123E2, ~0.0) = false +?= (~0.123E2, ~0.0) = false +< (~0.3141592653589793E1, 0.17976931348623157E309) = true +> (~0.3141592653589793E1, 0.17976931348623157E309) = false +== (~0.3141592653589793E1, 0.17976931348623157E309) = false +?= (~0.3141592653589793E1, 0.17976931348623157E309) = false +< (~0.3141592653589793E1, 0.8988465674311579E308) = true +> (~0.3141592653589793E1, 0.8988465674311579E308) = false +== (~0.3141592653589793E1, 0.8988465674311579E308) = false +?= (~0.3141592653589793E1, 0.8988465674311579E308) = false +< (~0.3141592653589793E1, 0.123E4) = true +> (~0.3141592653589793E1, 0.123E4) = false +== (~0.3141592653589793E1, 0.123E4) = false +?= (~0.3141592653589793E1, 0.123E4) = false +< (~0.3141592653589793E1, 0.123E2) = true +> (~0.3141592653589793E1, 0.123E2) = false +== (~0.3141592653589793E1, 0.123E2) = false +?= (~0.3141592653589793E1, 0.123E2) = false +< (~0.3141592653589793E1, 0.3141592653589793E1) = true +> (~0.3141592653589793E1, 0.3141592653589793E1) = false +== (~0.3141592653589793E1, 0.3141592653589793E1) = false +?= (~0.3141592653589793E1, 0.3141592653589793E1) = false +< (~0.3141592653589793E1, 0.2718281828459045E1) = true +> (~0.3141592653589793E1, 0.2718281828459045E1) = false +== (~0.3141592653589793E1, 0.2718281828459045E1) = false +?= (~0.3141592653589793E1, 0.2718281828459045E1) = false +< (~0.3141592653589793E1, 0.123E1) = true +> (~0.3141592653589793E1, 0.123E1) = false +== (~0.3141592653589793E1, 0.123E1) = false +?= (~0.3141592653589793E1, 0.123E1) = false +< (~0.3141592653589793E1, 0.123) = true +> (~0.3141592653589793E1, 0.123) = false +== (~0.3141592653589793E1, 0.123) = false +?= (~0.3141592653589793E1, 0.123) = false +< (~0.3141592653589793E1, 0.123E~2) = true +> (~0.3141592653589793E1, 0.123E~2) = false +== (~0.3141592653589793E1, 0.123E~2) = false +?= (~0.3141592653589793E1, 0.123E~2) = false +< (~0.3141592653589793E1, 0.22250738585072014E~307) = true +> (~0.3141592653589793E1, 0.22250738585072014E~307) = false +== (~0.3141592653589793E1, 0.22250738585072014E~307) = false +?= (~0.3141592653589793E1, 0.22250738585072014E~307) = false +< (~0.3141592653589793E1, 0.11125369292536007E~307) = true +> (~0.3141592653589793E1, 0.11125369292536007E~307) = false +== (~0.3141592653589793E1, 0.11125369292536007E~307) = false +?= (~0.3141592653589793E1, 0.11125369292536007E~307) = false +< (~0.3141592653589793E1, 0.5E~323) = true +> (~0.3141592653589793E1, 0.5E~323) = false +== (~0.3141592653589793E1, 0.5E~323) = false +?= (~0.3141592653589793E1, 0.5E~323) = false +< (~0.3141592653589793E1, 0.0) = true +> (~0.3141592653589793E1, 0.0) = false +== (~0.3141592653589793E1, 0.0) = false +?= (~0.3141592653589793E1, 0.0) = false +< (~0.3141592653589793E1, ~0.17976931348623157E309) = false +> (~0.3141592653589793E1, ~0.17976931348623157E309) = true +== (~0.3141592653589793E1, ~0.17976931348623157E309) = false +?= (~0.3141592653589793E1, ~0.17976931348623157E309) = false +< (~0.3141592653589793E1, ~0.8988465674311579E308) = false +> (~0.3141592653589793E1, ~0.8988465674311579E308) = true +== (~0.3141592653589793E1, ~0.8988465674311579E308) = false +?= (~0.3141592653589793E1, ~0.8988465674311579E308) = false +< (~0.3141592653589793E1, ~0.123E4) = false +> (~0.3141592653589793E1, ~0.123E4) = true +== (~0.3141592653589793E1, ~0.123E4) = false +?= (~0.3141592653589793E1, ~0.123E4) = false +< (~0.3141592653589793E1, ~0.123E2) = false +> (~0.3141592653589793E1, ~0.123E2) = true +== (~0.3141592653589793E1, ~0.123E2) = false +?= (~0.3141592653589793E1, ~0.123E2) = false +< (~0.3141592653589793E1, ~0.3141592653589793E1) = false +> (~0.3141592653589793E1, ~0.3141592653589793E1) = false +== (~0.3141592653589793E1, ~0.3141592653589793E1) = true +?= (~0.3141592653589793E1, ~0.3141592653589793E1) = true +< (~0.3141592653589793E1, ~0.2718281828459045E1) = true +> (~0.3141592653589793E1, ~0.2718281828459045E1) = false +== (~0.3141592653589793E1, ~0.2718281828459045E1) = false +?= (~0.3141592653589793E1, ~0.2718281828459045E1) = false +< (~0.3141592653589793E1, ~0.123E1) = true +> (~0.3141592653589793E1, ~0.123E1) = false +== (~0.3141592653589793E1, ~0.123E1) = false +?= (~0.3141592653589793E1, ~0.123E1) = false +< (~0.3141592653589793E1, ~0.123) = true +> (~0.3141592653589793E1, ~0.123) = false +== (~0.3141592653589793E1, ~0.123) = false +?= (~0.3141592653589793E1, ~0.123) = false +< (~0.3141592653589793E1, ~0.123E~2) = true +> (~0.3141592653589793E1, ~0.123E~2) = false +== (~0.3141592653589793E1, ~0.123E~2) = false +?= (~0.3141592653589793E1, ~0.123E~2) = false +< (~0.3141592653589793E1, ~0.22250738585072014E~307) = true +> (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +== (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +?= (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +< (~0.3141592653589793E1, ~0.11125369292536007E~307) = true +> (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +== (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +?= (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +< (~0.3141592653589793E1, ~0.5E~323) = true +> (~0.3141592653589793E1, ~0.5E~323) = false +== (~0.3141592653589793E1, ~0.5E~323) = false +?= (~0.3141592653589793E1, ~0.5E~323) = false +< (~0.3141592653589793E1, ~0.0) = true +> (~0.3141592653589793E1, ~0.0) = false +== (~0.3141592653589793E1, ~0.0) = false +?= (~0.3141592653589793E1, ~0.0) = false +< (~0.2718281828459045E1, 0.17976931348623157E309) = true +> (~0.2718281828459045E1, 0.17976931348623157E309) = false +== (~0.2718281828459045E1, 0.17976931348623157E309) = false +?= (~0.2718281828459045E1, 0.17976931348623157E309) = false +< (~0.2718281828459045E1, 0.8988465674311579E308) = true +> (~0.2718281828459045E1, 0.8988465674311579E308) = false +== (~0.2718281828459045E1, 0.8988465674311579E308) = false +?= (~0.2718281828459045E1, 0.8988465674311579E308) = false +< (~0.2718281828459045E1, 0.123E4) = true +> (~0.2718281828459045E1, 0.123E4) = false +== (~0.2718281828459045E1, 0.123E4) = false +?= (~0.2718281828459045E1, 0.123E4) = false +< (~0.2718281828459045E1, 0.123E2) = true +> (~0.2718281828459045E1, 0.123E2) = false +== (~0.2718281828459045E1, 0.123E2) = false +?= (~0.2718281828459045E1, 0.123E2) = false +< (~0.2718281828459045E1, 0.3141592653589793E1) = true +> (~0.2718281828459045E1, 0.3141592653589793E1) = false +== (~0.2718281828459045E1, 0.3141592653589793E1) = false +?= (~0.2718281828459045E1, 0.3141592653589793E1) = false +< (~0.2718281828459045E1, 0.2718281828459045E1) = true +> (~0.2718281828459045E1, 0.2718281828459045E1) = false +== (~0.2718281828459045E1, 0.2718281828459045E1) = false +?= (~0.2718281828459045E1, 0.2718281828459045E1) = false +< (~0.2718281828459045E1, 0.123E1) = true +> (~0.2718281828459045E1, 0.123E1) = false +== (~0.2718281828459045E1, 0.123E1) = false +?= (~0.2718281828459045E1, 0.123E1) = false +< (~0.2718281828459045E1, 0.123) = true +> (~0.2718281828459045E1, 0.123) = false +== (~0.2718281828459045E1, 0.123) = false +?= (~0.2718281828459045E1, 0.123) = false +< (~0.2718281828459045E1, 0.123E~2) = true +> (~0.2718281828459045E1, 0.123E~2) = false +== (~0.2718281828459045E1, 0.123E~2) = false +?= (~0.2718281828459045E1, 0.123E~2) = false +< (~0.2718281828459045E1, 0.22250738585072014E~307) = true +> (~0.2718281828459045E1, 0.22250738585072014E~307) = false +== (~0.2718281828459045E1, 0.22250738585072014E~307) = false +?= (~0.2718281828459045E1, 0.22250738585072014E~307) = false +< (~0.2718281828459045E1, 0.11125369292536007E~307) = true +> (~0.2718281828459045E1, 0.11125369292536007E~307) = false +== (~0.2718281828459045E1, 0.11125369292536007E~307) = false +?= (~0.2718281828459045E1, 0.11125369292536007E~307) = false +< (~0.2718281828459045E1, 0.5E~323) = true +> (~0.2718281828459045E1, 0.5E~323) = false +== (~0.2718281828459045E1, 0.5E~323) = false +?= (~0.2718281828459045E1, 0.5E~323) = false +< (~0.2718281828459045E1, 0.0) = true +> (~0.2718281828459045E1, 0.0) = false +== (~0.2718281828459045E1, 0.0) = false +?= (~0.2718281828459045E1, 0.0) = false +< (~0.2718281828459045E1, ~0.17976931348623157E309) = false +> (~0.2718281828459045E1, ~0.17976931348623157E309) = true +== (~0.2718281828459045E1, ~0.17976931348623157E309) = false +?= (~0.2718281828459045E1, ~0.17976931348623157E309) = false +< (~0.2718281828459045E1, ~0.8988465674311579E308) = false +> (~0.2718281828459045E1, ~0.8988465674311579E308) = true +== (~0.2718281828459045E1, ~0.8988465674311579E308) = false +?= (~0.2718281828459045E1, ~0.8988465674311579E308) = false +< (~0.2718281828459045E1, ~0.123E4) = false +> (~0.2718281828459045E1, ~0.123E4) = true +== (~0.2718281828459045E1, ~0.123E4) = false +?= (~0.2718281828459045E1, ~0.123E4) = false +< (~0.2718281828459045E1, ~0.123E2) = false +> (~0.2718281828459045E1, ~0.123E2) = true +== (~0.2718281828459045E1, ~0.123E2) = false +?= (~0.2718281828459045E1, ~0.123E2) = false +< (~0.2718281828459045E1, ~0.3141592653589793E1) = false +> (~0.2718281828459045E1, ~0.3141592653589793E1) = true +== (~0.2718281828459045E1, ~0.3141592653589793E1) = false +?= (~0.2718281828459045E1, ~0.3141592653589793E1) = false +< (~0.2718281828459045E1, ~0.2718281828459045E1) = false +> (~0.2718281828459045E1, ~0.2718281828459045E1) = false +== (~0.2718281828459045E1, ~0.2718281828459045E1) = true +?= (~0.2718281828459045E1, ~0.2718281828459045E1) = true +< (~0.2718281828459045E1, ~0.123E1) = true +> (~0.2718281828459045E1, ~0.123E1) = false +== (~0.2718281828459045E1, ~0.123E1) = false +?= (~0.2718281828459045E1, ~0.123E1) = false +< (~0.2718281828459045E1, ~0.123) = true +> (~0.2718281828459045E1, ~0.123) = false +== (~0.2718281828459045E1, ~0.123) = false +?= (~0.2718281828459045E1, ~0.123) = false +< (~0.2718281828459045E1, ~0.123E~2) = true +> (~0.2718281828459045E1, ~0.123E~2) = false +== (~0.2718281828459045E1, ~0.123E~2) = false +?= (~0.2718281828459045E1, ~0.123E~2) = false +< (~0.2718281828459045E1, ~0.22250738585072014E~307) = true +> (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +== (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +?= (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +< (~0.2718281828459045E1, ~0.11125369292536007E~307) = true +> (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +== (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +?= (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +< (~0.2718281828459045E1, ~0.5E~323) = true +> (~0.2718281828459045E1, ~0.5E~323) = false +== (~0.2718281828459045E1, ~0.5E~323) = false +?= (~0.2718281828459045E1, ~0.5E~323) = false +< (~0.2718281828459045E1, ~0.0) = true +> (~0.2718281828459045E1, ~0.0) = false +== (~0.2718281828459045E1, ~0.0) = false +?= (~0.2718281828459045E1, ~0.0) = false +< (~0.123E1, 0.17976931348623157E309) = true +> (~0.123E1, 0.17976931348623157E309) = false +== (~0.123E1, 0.17976931348623157E309) = false +?= (~0.123E1, 0.17976931348623157E309) = false +< (~0.123E1, 0.8988465674311579E308) = true +> (~0.123E1, 0.8988465674311579E308) = false +== (~0.123E1, 0.8988465674311579E308) = false +?= (~0.123E1, 0.8988465674311579E308) = false +< (~0.123E1, 0.123E4) = true +> (~0.123E1, 0.123E4) = false +== (~0.123E1, 0.123E4) = false +?= (~0.123E1, 0.123E4) = false +< (~0.123E1, 0.123E2) = true +> (~0.123E1, 0.123E2) = false +== (~0.123E1, 0.123E2) = false +?= (~0.123E1, 0.123E2) = false +< (~0.123E1, 0.3141592653589793E1) = true +> (~0.123E1, 0.3141592653589793E1) = false +== (~0.123E1, 0.3141592653589793E1) = false +?= (~0.123E1, 0.3141592653589793E1) = false +< (~0.123E1, 0.2718281828459045E1) = true +> (~0.123E1, 0.2718281828459045E1) = false +== (~0.123E1, 0.2718281828459045E1) = false +?= (~0.123E1, 0.2718281828459045E1) = false +< (~0.123E1, 0.123E1) = true +> (~0.123E1, 0.123E1) = false +== (~0.123E1, 0.123E1) = false +?= (~0.123E1, 0.123E1) = false +< (~0.123E1, 0.123) = true +> (~0.123E1, 0.123) = false +== (~0.123E1, 0.123) = false +?= (~0.123E1, 0.123) = false +< (~0.123E1, 0.123E~2) = true +> (~0.123E1, 0.123E~2) = false +== (~0.123E1, 0.123E~2) = false +?= (~0.123E1, 0.123E~2) = false +< (~0.123E1, 0.22250738585072014E~307) = true +> (~0.123E1, 0.22250738585072014E~307) = false +== (~0.123E1, 0.22250738585072014E~307) = false +?= (~0.123E1, 0.22250738585072014E~307) = false +< (~0.123E1, 0.11125369292536007E~307) = true +> (~0.123E1, 0.11125369292536007E~307) = false +== (~0.123E1, 0.11125369292536007E~307) = false +?= (~0.123E1, 0.11125369292536007E~307) = false +< (~0.123E1, 0.5E~323) = true +> (~0.123E1, 0.5E~323) = false +== (~0.123E1, 0.5E~323) = false +?= (~0.123E1, 0.5E~323) = false +< (~0.123E1, 0.0) = true +> (~0.123E1, 0.0) = false +== (~0.123E1, 0.0) = false +?= (~0.123E1, 0.0) = false +< (~0.123E1, ~0.17976931348623157E309) = false +> (~0.123E1, ~0.17976931348623157E309) = true +== (~0.123E1, ~0.17976931348623157E309) = false +?= (~0.123E1, ~0.17976931348623157E309) = false +< (~0.123E1, ~0.8988465674311579E308) = false +> (~0.123E1, ~0.8988465674311579E308) = true +== (~0.123E1, ~0.8988465674311579E308) = false +?= (~0.123E1, ~0.8988465674311579E308) = false +< (~0.123E1, ~0.123E4) = false +> (~0.123E1, ~0.123E4) = true +== (~0.123E1, ~0.123E4) = false +?= (~0.123E1, ~0.123E4) = false +< (~0.123E1, ~0.123E2) = false +> (~0.123E1, ~0.123E2) = true +== (~0.123E1, ~0.123E2) = false +?= (~0.123E1, ~0.123E2) = false +< (~0.123E1, ~0.3141592653589793E1) = false +> (~0.123E1, ~0.3141592653589793E1) = true +== (~0.123E1, ~0.3141592653589793E1) = false +?= (~0.123E1, ~0.3141592653589793E1) = false +< (~0.123E1, ~0.2718281828459045E1) = false +> (~0.123E1, ~0.2718281828459045E1) = true +== (~0.123E1, ~0.2718281828459045E1) = false +?= (~0.123E1, ~0.2718281828459045E1) = false +< (~0.123E1, ~0.123E1) = false +> (~0.123E1, ~0.123E1) = false +== (~0.123E1, ~0.123E1) = true +?= (~0.123E1, ~0.123E1) = true +< (~0.123E1, ~0.123) = true +> (~0.123E1, ~0.123) = false +== (~0.123E1, ~0.123) = false +?= (~0.123E1, ~0.123) = false +< (~0.123E1, ~0.123E~2) = true +> (~0.123E1, ~0.123E~2) = false +== (~0.123E1, ~0.123E~2) = false +?= (~0.123E1, ~0.123E~2) = false +< (~0.123E1, ~0.22250738585072014E~307) = true +> (~0.123E1, ~0.22250738585072014E~307) = false +== (~0.123E1, ~0.22250738585072014E~307) = false +?= (~0.123E1, ~0.22250738585072014E~307) = false +< (~0.123E1, ~0.11125369292536007E~307) = true +> (~0.123E1, ~0.11125369292536007E~307) = false +== (~0.123E1, ~0.11125369292536007E~307) = false +?= (~0.123E1, ~0.11125369292536007E~307) = false +< (~0.123E1, ~0.5E~323) = true +> (~0.123E1, ~0.5E~323) = false +== (~0.123E1, ~0.5E~323) = false +?= (~0.123E1, ~0.5E~323) = false +< (~0.123E1, ~0.0) = true +> (~0.123E1, ~0.0) = false +== (~0.123E1, ~0.0) = false +?= (~0.123E1, ~0.0) = false +< (~0.123, 0.17976931348623157E309) = true +> (~0.123, 0.17976931348623157E309) = false +== (~0.123, 0.17976931348623157E309) = false +?= (~0.123, 0.17976931348623157E309) = false +< (~0.123, 0.8988465674311579E308) = true +> (~0.123, 0.8988465674311579E308) = false +== (~0.123, 0.8988465674311579E308) = false +?= (~0.123, 0.8988465674311579E308) = false +< (~0.123, 0.123E4) = true +> (~0.123, 0.123E4) = false +== (~0.123, 0.123E4) = false +?= (~0.123, 0.123E4) = false +< (~0.123, 0.123E2) = true +> (~0.123, 0.123E2) = false +== (~0.123, 0.123E2) = false +?= (~0.123, 0.123E2) = false +< (~0.123, 0.3141592653589793E1) = true +> (~0.123, 0.3141592653589793E1) = false +== (~0.123, 0.3141592653589793E1) = false +?= (~0.123, 0.3141592653589793E1) = false +< (~0.123, 0.2718281828459045E1) = true +> (~0.123, 0.2718281828459045E1) = false +== (~0.123, 0.2718281828459045E1) = false +?= (~0.123, 0.2718281828459045E1) = false +< (~0.123, 0.123E1) = true +> (~0.123, 0.123E1) = false +== (~0.123, 0.123E1) = false +?= (~0.123, 0.123E1) = false +< (~0.123, 0.123) = true +> (~0.123, 0.123) = false +== (~0.123, 0.123) = false +?= (~0.123, 0.123) = false +< (~0.123, 0.123E~2) = true +> (~0.123, 0.123E~2) = false +== (~0.123, 0.123E~2) = false +?= (~0.123, 0.123E~2) = false +< (~0.123, 0.22250738585072014E~307) = true +> (~0.123, 0.22250738585072014E~307) = false +== (~0.123, 0.22250738585072014E~307) = false +?= (~0.123, 0.22250738585072014E~307) = false +< (~0.123, 0.11125369292536007E~307) = true +> (~0.123, 0.11125369292536007E~307) = false +== (~0.123, 0.11125369292536007E~307) = false +?= (~0.123, 0.11125369292536007E~307) = false +< (~0.123, 0.5E~323) = true +> (~0.123, 0.5E~323) = false +== (~0.123, 0.5E~323) = false +?= (~0.123, 0.5E~323) = false +< (~0.123, 0.0) = true +> (~0.123, 0.0) = false +== (~0.123, 0.0) = false +?= (~0.123, 0.0) = false +< (~0.123, ~0.17976931348623157E309) = false +> (~0.123, ~0.17976931348623157E309) = true +== (~0.123, ~0.17976931348623157E309) = false +?= (~0.123, ~0.17976931348623157E309) = false +< (~0.123, ~0.8988465674311579E308) = false +> (~0.123, ~0.8988465674311579E308) = true +== (~0.123, ~0.8988465674311579E308) = false +?= (~0.123, ~0.8988465674311579E308) = false +< (~0.123, ~0.123E4) = false +> (~0.123, ~0.123E4) = true +== (~0.123, ~0.123E4) = false +?= (~0.123, ~0.123E4) = false +< (~0.123, ~0.123E2) = false +> (~0.123, ~0.123E2) = true +== (~0.123, ~0.123E2) = false +?= (~0.123, ~0.123E2) = false +< (~0.123, ~0.3141592653589793E1) = false +> (~0.123, ~0.3141592653589793E1) = true +== (~0.123, ~0.3141592653589793E1) = false +?= (~0.123, ~0.3141592653589793E1) = false +< (~0.123, ~0.2718281828459045E1) = false +> (~0.123, ~0.2718281828459045E1) = true +== (~0.123, ~0.2718281828459045E1) = false +?= (~0.123, ~0.2718281828459045E1) = false +< (~0.123, ~0.123E1) = false +> (~0.123, ~0.123E1) = true +== (~0.123, ~0.123E1) = false +?= (~0.123, ~0.123E1) = false +< (~0.123, ~0.123) = false +> (~0.123, ~0.123) = false +== (~0.123, ~0.123) = true +?= (~0.123, ~0.123) = true +< (~0.123, ~0.123E~2) = true +> (~0.123, ~0.123E~2) = false +== (~0.123, ~0.123E~2) = false +?= (~0.123, ~0.123E~2) = false +< (~0.123, ~0.22250738585072014E~307) = true +> (~0.123, ~0.22250738585072014E~307) = false +== (~0.123, ~0.22250738585072014E~307) = false +?= (~0.123, ~0.22250738585072014E~307) = false +< (~0.123, ~0.11125369292536007E~307) = true +> (~0.123, ~0.11125369292536007E~307) = false +== (~0.123, ~0.11125369292536007E~307) = false +?= (~0.123, ~0.11125369292536007E~307) = false +< (~0.123, ~0.5E~323) = true +> (~0.123, ~0.5E~323) = false +== (~0.123, ~0.5E~323) = false +?= (~0.123, ~0.5E~323) = false +< (~0.123, ~0.0) = true +> (~0.123, ~0.0) = false +== (~0.123, ~0.0) = false +?= (~0.123, ~0.0) = false +< (~0.123E~2, 0.17976931348623157E309) = true +> (~0.123E~2, 0.17976931348623157E309) = false +== (~0.123E~2, 0.17976931348623157E309) = false +?= (~0.123E~2, 0.17976931348623157E309) = false +< (~0.123E~2, 0.8988465674311579E308) = true +> (~0.123E~2, 0.8988465674311579E308) = false +== (~0.123E~2, 0.8988465674311579E308) = false +?= (~0.123E~2, 0.8988465674311579E308) = false +< (~0.123E~2, 0.123E4) = true +> (~0.123E~2, 0.123E4) = false +== (~0.123E~2, 0.123E4) = false +?= (~0.123E~2, 0.123E4) = false +< (~0.123E~2, 0.123E2) = true +> (~0.123E~2, 0.123E2) = false +== (~0.123E~2, 0.123E2) = false +?= (~0.123E~2, 0.123E2) = false +< (~0.123E~2, 0.3141592653589793E1) = true +> (~0.123E~2, 0.3141592653589793E1) = false +== (~0.123E~2, 0.3141592653589793E1) = false +?= (~0.123E~2, 0.3141592653589793E1) = false +< (~0.123E~2, 0.2718281828459045E1) = true +> (~0.123E~2, 0.2718281828459045E1) = false +== (~0.123E~2, 0.2718281828459045E1) = false +?= (~0.123E~2, 0.2718281828459045E1) = false +< (~0.123E~2, 0.123E1) = true +> (~0.123E~2, 0.123E1) = false +== (~0.123E~2, 0.123E1) = false +?= (~0.123E~2, 0.123E1) = false +< (~0.123E~2, 0.123) = true +> (~0.123E~2, 0.123) = false +== (~0.123E~2, 0.123) = false +?= (~0.123E~2, 0.123) = false +< (~0.123E~2, 0.123E~2) = true +> (~0.123E~2, 0.123E~2) = false +== (~0.123E~2, 0.123E~2) = false +?= (~0.123E~2, 0.123E~2) = false +< (~0.123E~2, 0.22250738585072014E~307) = true +> (~0.123E~2, 0.22250738585072014E~307) = false +== (~0.123E~2, 0.22250738585072014E~307) = false +?= (~0.123E~2, 0.22250738585072014E~307) = false +< (~0.123E~2, 0.11125369292536007E~307) = true +> (~0.123E~2, 0.11125369292536007E~307) = false +== (~0.123E~2, 0.11125369292536007E~307) = false +?= (~0.123E~2, 0.11125369292536007E~307) = false +< (~0.123E~2, 0.5E~323) = true +> (~0.123E~2, 0.5E~323) = false +== (~0.123E~2, 0.5E~323) = false +?= (~0.123E~2, 0.5E~323) = false +< (~0.123E~2, 0.0) = true +> (~0.123E~2, 0.0) = false +== (~0.123E~2, 0.0) = false +?= (~0.123E~2, 0.0) = false +< (~0.123E~2, ~0.17976931348623157E309) = false +> (~0.123E~2, ~0.17976931348623157E309) = true +== (~0.123E~2, ~0.17976931348623157E309) = false +?= (~0.123E~2, ~0.17976931348623157E309) = false +< (~0.123E~2, ~0.8988465674311579E308) = false +> (~0.123E~2, ~0.8988465674311579E308) = true +== (~0.123E~2, ~0.8988465674311579E308) = false +?= (~0.123E~2, ~0.8988465674311579E308) = false +< (~0.123E~2, ~0.123E4) = false +> (~0.123E~2, ~0.123E4) = true +== (~0.123E~2, ~0.123E4) = false +?= (~0.123E~2, ~0.123E4) = false +< (~0.123E~2, ~0.123E2) = false +> (~0.123E~2, ~0.123E2) = true +== (~0.123E~2, ~0.123E2) = false +?= (~0.123E~2, ~0.123E2) = false +< (~0.123E~2, ~0.3141592653589793E1) = false +> (~0.123E~2, ~0.3141592653589793E1) = true +== (~0.123E~2, ~0.3141592653589793E1) = false +?= (~0.123E~2, ~0.3141592653589793E1) = false +< (~0.123E~2, ~0.2718281828459045E1) = false +> (~0.123E~2, ~0.2718281828459045E1) = true +== (~0.123E~2, ~0.2718281828459045E1) = false +?= (~0.123E~2, ~0.2718281828459045E1) = false +< (~0.123E~2, ~0.123E1) = false +> (~0.123E~2, ~0.123E1) = true +== (~0.123E~2, ~0.123E1) = false +?= (~0.123E~2, ~0.123E1) = false +< (~0.123E~2, ~0.123) = false +> (~0.123E~2, ~0.123) = true +== (~0.123E~2, ~0.123) = false +?= (~0.123E~2, ~0.123) = false +< (~0.123E~2, ~0.123E~2) = false +> (~0.123E~2, ~0.123E~2) = false +== (~0.123E~2, ~0.123E~2) = true +?= (~0.123E~2, ~0.123E~2) = true +< (~0.123E~2, ~0.22250738585072014E~307) = true +> (~0.123E~2, ~0.22250738585072014E~307) = false +== (~0.123E~2, ~0.22250738585072014E~307) = false +?= (~0.123E~2, ~0.22250738585072014E~307) = false +< (~0.123E~2, ~0.11125369292536007E~307) = true +> (~0.123E~2, ~0.11125369292536007E~307) = false +== (~0.123E~2, ~0.11125369292536007E~307) = false +?= (~0.123E~2, ~0.11125369292536007E~307) = false +< (~0.123E~2, ~0.5E~323) = true +> (~0.123E~2, ~0.5E~323) = false +== (~0.123E~2, ~0.5E~323) = false +?= (~0.123E~2, ~0.5E~323) = false +< (~0.123E~2, ~0.0) = true +> (~0.123E~2, ~0.0) = false +== (~0.123E~2, ~0.0) = false +?= (~0.123E~2, ~0.0) = false +< (~0.22250738585072014E~307, 0.17976931348623157E309) = true +> (~0.22250738585072014E~307, 0.17976931348623157E309) = false +== (~0.22250738585072014E~307, 0.17976931348623157E309) = false +?= (~0.22250738585072014E~307, 0.17976931348623157E309) = false +< (~0.22250738585072014E~307, 0.8988465674311579E308) = true +> (~0.22250738585072014E~307, 0.8988465674311579E308) = false +== (~0.22250738585072014E~307, 0.8988465674311579E308) = false +?= (~0.22250738585072014E~307, 0.8988465674311579E308) = false +< (~0.22250738585072014E~307, 0.123E4) = true +> (~0.22250738585072014E~307, 0.123E4) = false +== (~0.22250738585072014E~307, 0.123E4) = false +?= (~0.22250738585072014E~307, 0.123E4) = false +< (~0.22250738585072014E~307, 0.123E2) = true +> (~0.22250738585072014E~307, 0.123E2) = false +== (~0.22250738585072014E~307, 0.123E2) = false +?= (~0.22250738585072014E~307, 0.123E2) = false +< (~0.22250738585072014E~307, 0.3141592653589793E1) = true +> (~0.22250738585072014E~307, 0.3141592653589793E1) = false +== (~0.22250738585072014E~307, 0.3141592653589793E1) = false +?= (~0.22250738585072014E~307, 0.3141592653589793E1) = false +< (~0.22250738585072014E~307, 0.2718281828459045E1) = true +> (~0.22250738585072014E~307, 0.2718281828459045E1) = false +== (~0.22250738585072014E~307, 0.2718281828459045E1) = false +?= (~0.22250738585072014E~307, 0.2718281828459045E1) = false +< (~0.22250738585072014E~307, 0.123E1) = true +> (~0.22250738585072014E~307, 0.123E1) = false +== (~0.22250738585072014E~307, 0.123E1) = false +?= (~0.22250738585072014E~307, 0.123E1) = false +< (~0.22250738585072014E~307, 0.123) = true +> (~0.22250738585072014E~307, 0.123) = false +== (~0.22250738585072014E~307, 0.123) = false +?= (~0.22250738585072014E~307, 0.123) = false +< (~0.22250738585072014E~307, 0.123E~2) = true +> (~0.22250738585072014E~307, 0.123E~2) = false +== (~0.22250738585072014E~307, 0.123E~2) = false +?= (~0.22250738585072014E~307, 0.123E~2) = false +< (~0.22250738585072014E~307, 0.22250738585072014E~307) = true +> (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +== (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +?= (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +< (~0.22250738585072014E~307, 0.11125369292536007E~307) = true +> (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +== (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +?= (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +< (~0.22250738585072014E~307, 0.5E~323) = true +> (~0.22250738585072014E~307, 0.5E~323) = false +== (~0.22250738585072014E~307, 0.5E~323) = false +?= (~0.22250738585072014E~307, 0.5E~323) = false +< (~0.22250738585072014E~307, 0.0) = true +> (~0.22250738585072014E~307, 0.0) = false +== (~0.22250738585072014E~307, 0.0) = false +?= (~0.22250738585072014E~307, 0.0) = false +< (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +> (~0.22250738585072014E~307, ~0.17976931348623157E309) = true +== (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +?= (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +< (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +> (~0.22250738585072014E~307, ~0.8988465674311579E308) = true +== (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +?= (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +< (~0.22250738585072014E~307, ~0.123E4) = false +> (~0.22250738585072014E~307, ~0.123E4) = true +== (~0.22250738585072014E~307, ~0.123E4) = false +?= (~0.22250738585072014E~307, ~0.123E4) = false +< (~0.22250738585072014E~307, ~0.123E2) = false +> (~0.22250738585072014E~307, ~0.123E2) = true +== (~0.22250738585072014E~307, ~0.123E2) = false +?= (~0.22250738585072014E~307, ~0.123E2) = false +< (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +> (~0.22250738585072014E~307, ~0.3141592653589793E1) = true +== (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +?= (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +< (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +> (~0.22250738585072014E~307, ~0.2718281828459045E1) = true +== (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +?= (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +< (~0.22250738585072014E~307, ~0.123E1) = false +> (~0.22250738585072014E~307, ~0.123E1) = true +== (~0.22250738585072014E~307, ~0.123E1) = false +?= (~0.22250738585072014E~307, ~0.123E1) = false +< (~0.22250738585072014E~307, ~0.123) = false +> (~0.22250738585072014E~307, ~0.123) = true +== (~0.22250738585072014E~307, ~0.123) = false +?= (~0.22250738585072014E~307, ~0.123) = false +< (~0.22250738585072014E~307, ~0.123E~2) = false +> (~0.22250738585072014E~307, ~0.123E~2) = true +== (~0.22250738585072014E~307, ~0.123E~2) = false +?= (~0.22250738585072014E~307, ~0.123E~2) = false +< (~0.22250738585072014E~307, ~0.22250738585072014E~307) = false +> (~0.22250738585072014E~307, ~0.22250738585072014E~307) = false +== (~0.22250738585072014E~307, ~0.22250738585072014E~307) = true +?= (~0.22250738585072014E~307, ~0.22250738585072014E~307) = true +< (~0.22250738585072014E~307, ~0.11125369292536007E~307) = true +> (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +== (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +?= (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +< (~0.22250738585072014E~307, ~0.5E~323) = true +> (~0.22250738585072014E~307, ~0.5E~323) = false +== (~0.22250738585072014E~307, ~0.5E~323) = false +?= (~0.22250738585072014E~307, ~0.5E~323) = false +< (~0.22250738585072014E~307, ~0.0) = true +> (~0.22250738585072014E~307, ~0.0) = false +== (~0.22250738585072014E~307, ~0.0) = false +?= (~0.22250738585072014E~307, ~0.0) = false +< (~0.11125369292536007E~307, 0.17976931348623157E309) = true +> (~0.11125369292536007E~307, 0.17976931348623157E309) = false +== (~0.11125369292536007E~307, 0.17976931348623157E309) = false +?= (~0.11125369292536007E~307, 0.17976931348623157E309) = false +< (~0.11125369292536007E~307, 0.8988465674311579E308) = true +> (~0.11125369292536007E~307, 0.8988465674311579E308) = false +== (~0.11125369292536007E~307, 0.8988465674311579E308) = false +?= (~0.11125369292536007E~307, 0.8988465674311579E308) = false +< (~0.11125369292536007E~307, 0.123E4) = true +> (~0.11125369292536007E~307, 0.123E4) = false +== (~0.11125369292536007E~307, 0.123E4) = false +?= (~0.11125369292536007E~307, 0.123E4) = false +< (~0.11125369292536007E~307, 0.123E2) = true +> (~0.11125369292536007E~307, 0.123E2) = false +== (~0.11125369292536007E~307, 0.123E2) = false +?= (~0.11125369292536007E~307, 0.123E2) = false +< (~0.11125369292536007E~307, 0.3141592653589793E1) = true +> (~0.11125369292536007E~307, 0.3141592653589793E1) = false +== (~0.11125369292536007E~307, 0.3141592653589793E1) = false +?= (~0.11125369292536007E~307, 0.3141592653589793E1) = false +< (~0.11125369292536007E~307, 0.2718281828459045E1) = true +> (~0.11125369292536007E~307, 0.2718281828459045E1) = false +== (~0.11125369292536007E~307, 0.2718281828459045E1) = false +?= (~0.11125369292536007E~307, 0.2718281828459045E1) = false +< (~0.11125369292536007E~307, 0.123E1) = true +> (~0.11125369292536007E~307, 0.123E1) = false +== (~0.11125369292536007E~307, 0.123E1) = false +?= (~0.11125369292536007E~307, 0.123E1) = false +< (~0.11125369292536007E~307, 0.123) = true +> (~0.11125369292536007E~307, 0.123) = false +== (~0.11125369292536007E~307, 0.123) = false +?= (~0.11125369292536007E~307, 0.123) = false +< (~0.11125369292536007E~307, 0.123E~2) = true +> (~0.11125369292536007E~307, 0.123E~2) = false +== (~0.11125369292536007E~307, 0.123E~2) = false +?= (~0.11125369292536007E~307, 0.123E~2) = false +< (~0.11125369292536007E~307, 0.22250738585072014E~307) = true +> (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +== (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +?= (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +< (~0.11125369292536007E~307, 0.11125369292536007E~307) = true +> (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +== (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +?= (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +< (~0.11125369292536007E~307, 0.5E~323) = true +> (~0.11125369292536007E~307, 0.5E~323) = false +== (~0.11125369292536007E~307, 0.5E~323) = false +?= (~0.11125369292536007E~307, 0.5E~323) = false +< (~0.11125369292536007E~307, 0.0) = true +> (~0.11125369292536007E~307, 0.0) = false +== (~0.11125369292536007E~307, 0.0) = false +?= (~0.11125369292536007E~307, 0.0) = false +< (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +> (~0.11125369292536007E~307, ~0.17976931348623157E309) = true +== (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +?= (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +< (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +> (~0.11125369292536007E~307, ~0.8988465674311579E308) = true +== (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +?= (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +< (~0.11125369292536007E~307, ~0.123E4) = false +> (~0.11125369292536007E~307, ~0.123E4) = true +== (~0.11125369292536007E~307, ~0.123E4) = false +?= (~0.11125369292536007E~307, ~0.123E4) = false +< (~0.11125369292536007E~307, ~0.123E2) = false +> (~0.11125369292536007E~307, ~0.123E2) = true +== (~0.11125369292536007E~307, ~0.123E2) = false +?= (~0.11125369292536007E~307, ~0.123E2) = false +< (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +> (~0.11125369292536007E~307, ~0.3141592653589793E1) = true +== (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +?= (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +< (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +> (~0.11125369292536007E~307, ~0.2718281828459045E1) = true +== (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +?= (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +< (~0.11125369292536007E~307, ~0.123E1) = false +> (~0.11125369292536007E~307, ~0.123E1) = true +== (~0.11125369292536007E~307, ~0.123E1) = false +?= (~0.11125369292536007E~307, ~0.123E1) = false +< (~0.11125369292536007E~307, ~0.123) = false +> (~0.11125369292536007E~307, ~0.123) = true +== (~0.11125369292536007E~307, ~0.123) = false +?= (~0.11125369292536007E~307, ~0.123) = false +< (~0.11125369292536007E~307, ~0.123E~2) = false +> (~0.11125369292536007E~307, ~0.123E~2) = true +== (~0.11125369292536007E~307, ~0.123E~2) = false +?= (~0.11125369292536007E~307, ~0.123E~2) = false +< (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +> (~0.11125369292536007E~307, ~0.22250738585072014E~307) = true +== (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +?= (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +< (~0.11125369292536007E~307, ~0.11125369292536007E~307) = false +> (~0.11125369292536007E~307, ~0.11125369292536007E~307) = false +== (~0.11125369292536007E~307, ~0.11125369292536007E~307) = true +?= (~0.11125369292536007E~307, ~0.11125369292536007E~307) = true +< (~0.11125369292536007E~307, ~0.5E~323) = true +> (~0.11125369292536007E~307, ~0.5E~323) = false +== (~0.11125369292536007E~307, ~0.5E~323) = false +?= (~0.11125369292536007E~307, ~0.5E~323) = false +< (~0.11125369292536007E~307, ~0.0) = true +> (~0.11125369292536007E~307, ~0.0) = false +== (~0.11125369292536007E~307, ~0.0) = false +?= (~0.11125369292536007E~307, ~0.0) = false +< (~0.5E~323, 0.17976931348623157E309) = true +> (~0.5E~323, 0.17976931348623157E309) = false +== (~0.5E~323, 0.17976931348623157E309) = false +?= (~0.5E~323, 0.17976931348623157E309) = false +< (~0.5E~323, 0.8988465674311579E308) = true +> (~0.5E~323, 0.8988465674311579E308) = false +== (~0.5E~323, 0.8988465674311579E308) = false +?= (~0.5E~323, 0.8988465674311579E308) = false +< (~0.5E~323, 0.123E4) = true +> (~0.5E~323, 0.123E4) = false +== (~0.5E~323, 0.123E4) = false +?= (~0.5E~323, 0.123E4) = false +< (~0.5E~323, 0.123E2) = true +> (~0.5E~323, 0.123E2) = false +== (~0.5E~323, 0.123E2) = false +?= (~0.5E~323, 0.123E2) = false +< (~0.5E~323, 0.3141592653589793E1) = true +> (~0.5E~323, 0.3141592653589793E1) = false +== (~0.5E~323, 0.3141592653589793E1) = false +?= (~0.5E~323, 0.3141592653589793E1) = false +< (~0.5E~323, 0.2718281828459045E1) = true +> (~0.5E~323, 0.2718281828459045E1) = false +== (~0.5E~323, 0.2718281828459045E1) = false +?= (~0.5E~323, 0.2718281828459045E1) = false +< (~0.5E~323, 0.123E1) = true +> (~0.5E~323, 0.123E1) = false +== (~0.5E~323, 0.123E1) = false +?= (~0.5E~323, 0.123E1) = false +< (~0.5E~323, 0.123) = true +> (~0.5E~323, 0.123) = false +== (~0.5E~323, 0.123) = false +?= (~0.5E~323, 0.123) = false +< (~0.5E~323, 0.123E~2) = true +> (~0.5E~323, 0.123E~2) = false +== (~0.5E~323, 0.123E~2) = false +?= (~0.5E~323, 0.123E~2) = false +< (~0.5E~323, 0.22250738585072014E~307) = true +> (~0.5E~323, 0.22250738585072014E~307) = false +== (~0.5E~323, 0.22250738585072014E~307) = false +?= (~0.5E~323, 0.22250738585072014E~307) = false +< (~0.5E~323, 0.11125369292536007E~307) = true +> (~0.5E~323, 0.11125369292536007E~307) = false +== (~0.5E~323, 0.11125369292536007E~307) = false +?= (~0.5E~323, 0.11125369292536007E~307) = false +< (~0.5E~323, 0.5E~323) = true +> (~0.5E~323, 0.5E~323) = false +== (~0.5E~323, 0.5E~323) = false +?= (~0.5E~323, 0.5E~323) = false +< (~0.5E~323, 0.0) = true +> (~0.5E~323, 0.0) = false +== (~0.5E~323, 0.0) = false +?= (~0.5E~323, 0.0) = false +< (~0.5E~323, ~0.17976931348623157E309) = false +> (~0.5E~323, ~0.17976931348623157E309) = true +== (~0.5E~323, ~0.17976931348623157E309) = false +?= (~0.5E~323, ~0.17976931348623157E309) = false +< (~0.5E~323, ~0.8988465674311579E308) = false +> (~0.5E~323, ~0.8988465674311579E308) = true +== (~0.5E~323, ~0.8988465674311579E308) = false +?= (~0.5E~323, ~0.8988465674311579E308) = false +< (~0.5E~323, ~0.123E4) = false +> (~0.5E~323, ~0.123E4) = true +== (~0.5E~323, ~0.123E4) = false +?= (~0.5E~323, ~0.123E4) = false +< (~0.5E~323, ~0.123E2) = false +> (~0.5E~323, ~0.123E2) = true +== (~0.5E~323, ~0.123E2) = false +?= (~0.5E~323, ~0.123E2) = false +< (~0.5E~323, ~0.3141592653589793E1) = false +> (~0.5E~323, ~0.3141592653589793E1) = true +== (~0.5E~323, ~0.3141592653589793E1) = false +?= (~0.5E~323, ~0.3141592653589793E1) = false +< (~0.5E~323, ~0.2718281828459045E1) = false +> (~0.5E~323, ~0.2718281828459045E1) = true +== (~0.5E~323, ~0.2718281828459045E1) = false +?= (~0.5E~323, ~0.2718281828459045E1) = false +< (~0.5E~323, ~0.123E1) = false +> (~0.5E~323, ~0.123E1) = true +== (~0.5E~323, ~0.123E1) = false +?= (~0.5E~323, ~0.123E1) = false +< (~0.5E~323, ~0.123) = false +> (~0.5E~323, ~0.123) = true +== (~0.5E~323, ~0.123) = false +?= (~0.5E~323, ~0.123) = false +< (~0.5E~323, ~0.123E~2) = false +> (~0.5E~323, ~0.123E~2) = true +== (~0.5E~323, ~0.123E~2) = false +?= (~0.5E~323, ~0.123E~2) = false +< (~0.5E~323, ~0.22250738585072014E~307) = false +> (~0.5E~323, ~0.22250738585072014E~307) = true +== (~0.5E~323, ~0.22250738585072014E~307) = false +?= (~0.5E~323, ~0.22250738585072014E~307) = false +< (~0.5E~323, ~0.11125369292536007E~307) = false +> (~0.5E~323, ~0.11125369292536007E~307) = true +== (~0.5E~323, ~0.11125369292536007E~307) = false +?= (~0.5E~323, ~0.11125369292536007E~307) = false +< (~0.5E~323, ~0.5E~323) = false +> (~0.5E~323, ~0.5E~323) = false +== (~0.5E~323, ~0.5E~323) = true +?= (~0.5E~323, ~0.5E~323) = true +< (~0.5E~323, ~0.0) = true +> (~0.5E~323, ~0.0) = false +== (~0.5E~323, ~0.0) = false +?= (~0.5E~323, ~0.0) = false +< (~0.0, 0.17976931348623157E309) = true +> (~0.0, 0.17976931348623157E309) = false +== (~0.0, 0.17976931348623157E309) = false +?= (~0.0, 0.17976931348623157E309) = false +< (~0.0, 0.8988465674311579E308) = true +> (~0.0, 0.8988465674311579E308) = false +== (~0.0, 0.8988465674311579E308) = false +?= (~0.0, 0.8988465674311579E308) = false +< (~0.0, 0.123E4) = true +> (~0.0, 0.123E4) = false +== (~0.0, 0.123E4) = false +?= (~0.0, 0.123E4) = false +< (~0.0, 0.123E2) = true +> (~0.0, 0.123E2) = false +== (~0.0, 0.123E2) = false +?= (~0.0, 0.123E2) = false +< (~0.0, 0.3141592653589793E1) = true +> (~0.0, 0.3141592653589793E1) = false +== (~0.0, 0.3141592653589793E1) = false +?= (~0.0, 0.3141592653589793E1) = false +< (~0.0, 0.2718281828459045E1) = true +> (~0.0, 0.2718281828459045E1) = false +== (~0.0, 0.2718281828459045E1) = false +?= (~0.0, 0.2718281828459045E1) = false +< (~0.0, 0.123E1) = true +> (~0.0, 0.123E1) = false +== (~0.0, 0.123E1) = false +?= (~0.0, 0.123E1) = false +< (~0.0, 0.123) = true +> (~0.0, 0.123) = false +== (~0.0, 0.123) = false +?= (~0.0, 0.123) = false +< (~0.0, 0.123E~2) = true +> (~0.0, 0.123E~2) = false +== (~0.0, 0.123E~2) = false +?= (~0.0, 0.123E~2) = false +< (~0.0, 0.22250738585072014E~307) = true +> (~0.0, 0.22250738585072014E~307) = false +== (~0.0, 0.22250738585072014E~307) = false +?= (~0.0, 0.22250738585072014E~307) = false +< (~0.0, 0.11125369292536007E~307) = true +> (~0.0, 0.11125369292536007E~307) = false +== (~0.0, 0.11125369292536007E~307) = false +?= (~0.0, 0.11125369292536007E~307) = false +< (~0.0, 0.5E~323) = true +> (~0.0, 0.5E~323) = false +== (~0.0, 0.5E~323) = false +?= (~0.0, 0.5E~323) = false +< (~0.0, 0.0) = false +> (~0.0, 0.0) = false +== (~0.0, 0.0) = true +?= (~0.0, 0.0) = true +< (~0.0, ~0.17976931348623157E309) = false +> (~0.0, ~0.17976931348623157E309) = true +== (~0.0, ~0.17976931348623157E309) = false +?= (~0.0, ~0.17976931348623157E309) = false +< (~0.0, ~0.8988465674311579E308) = false +> (~0.0, ~0.8988465674311579E308) = true +== (~0.0, ~0.8988465674311579E308) = false +?= (~0.0, ~0.8988465674311579E308) = false +< (~0.0, ~0.123E4) = false +> (~0.0, ~0.123E4) = true +== (~0.0, ~0.123E4) = false +?= (~0.0, ~0.123E4) = false +< (~0.0, ~0.123E2) = false +> (~0.0, ~0.123E2) = true +== (~0.0, ~0.123E2) = false +?= (~0.0, ~0.123E2) = false +< (~0.0, ~0.3141592653589793E1) = false +> (~0.0, ~0.3141592653589793E1) = true +== (~0.0, ~0.3141592653589793E1) = false +?= (~0.0, ~0.3141592653589793E1) = false +< (~0.0, ~0.2718281828459045E1) = false +> (~0.0, ~0.2718281828459045E1) = true +== (~0.0, ~0.2718281828459045E1) = false +?= (~0.0, ~0.2718281828459045E1) = false +< (~0.0, ~0.123E1) = false +> (~0.0, ~0.123E1) = true +== (~0.0, ~0.123E1) = false +?= (~0.0, ~0.123E1) = false +< (~0.0, ~0.123) = false +> (~0.0, ~0.123) = true +== (~0.0, ~0.123) = false +?= (~0.0, ~0.123) = false +< (~0.0, ~0.123E~2) = false +> (~0.0, ~0.123E~2) = true +== (~0.0, ~0.123E~2) = false +?= (~0.0, ~0.123E~2) = false +< (~0.0, ~0.22250738585072014E~307) = false +> (~0.0, ~0.22250738585072014E~307) = true +== (~0.0, ~0.22250738585072014E~307) = false +?= (~0.0, ~0.22250738585072014E~307) = false +< (~0.0, ~0.11125369292536007E~307) = false +> (~0.0, ~0.11125369292536007E~307) = true +== (~0.0, ~0.11125369292536007E~307) = false +?= (~0.0, ~0.11125369292536007E~307) = false +< (~0.0, ~0.5E~323) = false +> (~0.0, ~0.5E~323) = true +== (~0.0, ~0.5E~323) = false +?= (~0.0, ~0.5E~323) = false +< (~0.0, ~0.0) = false +> (~0.0, ~0.0) = false +== (~0.0, ~0.0) = true +?= (~0.0, ~0.0) = true + Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL +compare (0.17976931348623157E309, 0.17976931348623157E309) = EQUAL +compareReal (0.17976931348623157E309, 0.17976931348623157E309) = EQUAL +compare (0.17976931348623157E309, 0.8988465674311579E308) = GREATER +compareReal (0.17976931348623157E309, 0.8988465674311579E308) = GREATER +compare (0.17976931348623157E309, 0.123E4) = GREATER +compareReal (0.17976931348623157E309, 0.123E4) = GREATER +compare (0.17976931348623157E309, 0.123E2) = GREATER +compareReal (0.17976931348623157E309, 0.123E2) = GREATER +compare (0.17976931348623157E309, 0.3141592653589793E1) = GREATER +compareReal (0.17976931348623157E309, 0.3141592653589793E1) = GREATER +compare (0.17976931348623157E309, 0.2718281828459045E1) = GREATER +compareReal (0.17976931348623157E309, 0.2718281828459045E1) = GREATER +compare (0.17976931348623157E309, 0.123E1) = GREATER +compareReal (0.17976931348623157E309, 0.123E1) = GREATER +compare (0.17976931348623157E309, 0.123) = GREATER +compareReal (0.17976931348623157E309, 0.123) = GREATER +compare (0.17976931348623157E309, 0.123E~2) = GREATER +compareReal (0.17976931348623157E309, 0.123E~2) = GREATER +compare (0.17976931348623157E309, 0.22250738585072014E~307) = GREATER +compareReal (0.17976931348623157E309, 0.22250738585072014E~307) = GREATER +compare (0.17976931348623157E309, 0.11125369292536007E~307) = GREATER +compareReal (0.17976931348623157E309, 0.11125369292536007E~307) = GREATER +compare (0.17976931348623157E309, 0.5E~323) = GREATER +compareReal (0.17976931348623157E309, 0.5E~323) = GREATER +compare (0.17976931348623157E309, 0.0) = GREATER +compareReal (0.17976931348623157E309, 0.0) = GREATER +compare (0.17976931348623157E309, ~0.17976931348623157E309) = GREATER +compareReal (0.17976931348623157E309, ~0.17976931348623157E309) = GREATER +compare (0.17976931348623157E309, ~0.8988465674311579E308) = GREATER +compareReal (0.17976931348623157E309, ~0.8988465674311579E308) = GREATER +compare (0.17976931348623157E309, ~0.123E4) = GREATER +compareReal (0.17976931348623157E309, ~0.123E4) = GREATER +compare (0.17976931348623157E309, ~0.123E2) = GREATER +compareReal (0.17976931348623157E309, ~0.123E2) = GREATER +compare (0.17976931348623157E309, ~0.3141592653589793E1) = GREATER +compareReal (0.17976931348623157E309, ~0.3141592653589793E1) = GREATER +compare (0.17976931348623157E309, ~0.2718281828459045E1) = GREATER +compareReal (0.17976931348623157E309, ~0.2718281828459045E1) = GREATER +compare (0.17976931348623157E309, ~0.123E1) = GREATER +compareReal (0.17976931348623157E309, ~0.123E1) = GREATER +compare (0.17976931348623157E309, ~0.123) = GREATER +compareReal (0.17976931348623157E309, ~0.123) = GREATER +compare (0.17976931348623157E309, ~0.123E~2) = GREATER +compareReal (0.17976931348623157E309, ~0.123E~2) = GREATER +compare (0.17976931348623157E309, ~0.22250738585072014E~307) = GREATER +compareReal (0.17976931348623157E309, ~0.22250738585072014E~307) = GREATER +compare (0.17976931348623157E309, ~0.11125369292536007E~307) = GREATER +compareReal (0.17976931348623157E309, ~0.11125369292536007E~307) = GREATER +compare (0.17976931348623157E309, ~0.5E~323) = GREATER +compareReal (0.17976931348623157E309, ~0.5E~323) = GREATER +compare (0.17976931348623157E309, ~0.0) = GREATER +compareReal (0.17976931348623157E309, ~0.0) = GREATER +compare (0.8988465674311579E308, 0.17976931348623157E309) = LESS +compareReal (0.8988465674311579E308, 0.17976931348623157E309) = LESS +compare (0.8988465674311579E308, 0.8988465674311579E308) = EQUAL +compareReal (0.8988465674311579E308, 0.8988465674311579E308) = EQUAL +compare (0.8988465674311579E308, 0.123E4) = GREATER +compareReal (0.8988465674311579E308, 0.123E4) = GREATER +compare (0.8988465674311579E308, 0.123E2) = GREATER +compareReal (0.8988465674311579E308, 0.123E2) = GREATER +compare (0.8988465674311579E308, 0.3141592653589793E1) = GREATER +compareReal (0.8988465674311579E308, 0.3141592653589793E1) = GREATER +compare (0.8988465674311579E308, 0.2718281828459045E1) = GREATER +compareReal (0.8988465674311579E308, 0.2718281828459045E1) = GREATER +compare (0.8988465674311579E308, 0.123E1) = GREATER +compareReal (0.8988465674311579E308, 0.123E1) = GREATER +compare (0.8988465674311579E308, 0.123) = GREATER +compareReal (0.8988465674311579E308, 0.123) = GREATER +compare (0.8988465674311579E308, 0.123E~2) = GREATER +compareReal (0.8988465674311579E308, 0.123E~2) = GREATER +compare (0.8988465674311579E308, 0.22250738585072014E~307) = GREATER +compareReal (0.8988465674311579E308, 0.22250738585072014E~307) = GREATER +compare (0.8988465674311579E308, 0.11125369292536007E~307) = GREATER +compareReal (0.8988465674311579E308, 0.11125369292536007E~307) = GREATER +compare (0.8988465674311579E308, 0.5E~323) = GREATER +compareReal (0.8988465674311579E308, 0.5E~323) = GREATER +compare (0.8988465674311579E308, 0.0) = GREATER +compareReal (0.8988465674311579E308, 0.0) = GREATER +compare (0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compareReal (0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compare (0.8988465674311579E308, ~0.8988465674311579E308) = GREATER +compareReal (0.8988465674311579E308, ~0.8988465674311579E308) = GREATER +compare (0.8988465674311579E308, ~0.123E4) = GREATER +compareReal (0.8988465674311579E308, ~0.123E4) = GREATER +compare (0.8988465674311579E308, ~0.123E2) = GREATER +compareReal (0.8988465674311579E308, ~0.123E2) = GREATER +compare (0.8988465674311579E308, ~0.3141592653589793E1) = GREATER +compareReal (0.8988465674311579E308, ~0.3141592653589793E1) = GREATER +compare (0.8988465674311579E308, ~0.2718281828459045E1) = GREATER +compareReal (0.8988465674311579E308, ~0.2718281828459045E1) = GREATER +compare (0.8988465674311579E308, ~0.123E1) = GREATER +compareReal (0.8988465674311579E308, ~0.123E1) = GREATER +compare (0.8988465674311579E308, ~0.123) = GREATER +compareReal (0.8988465674311579E308, ~0.123) = GREATER +compare (0.8988465674311579E308, ~0.123E~2) = GREATER +compareReal (0.8988465674311579E308, ~0.123E~2) = GREATER +compare (0.8988465674311579E308, ~0.22250738585072014E~307) = GREATER +compareReal (0.8988465674311579E308, ~0.22250738585072014E~307) = GREATER +compare (0.8988465674311579E308, ~0.11125369292536007E~307) = GREATER +compareReal (0.8988465674311579E308, ~0.11125369292536007E~307) = GREATER +compare (0.8988465674311579E308, ~0.5E~323) = GREATER +compareReal (0.8988465674311579E308, ~0.5E~323) = GREATER +compare (0.8988465674311579E308, ~0.0) = GREATER +compareReal (0.8988465674311579E308, ~0.0) = GREATER +compare (0.123E4, 0.17976931348623157E309) = LESS +compareReal (0.123E4, 0.17976931348623157E309) = LESS +compare (0.123E4, 0.8988465674311579E308) = LESS +compareReal (0.123E4, 0.8988465674311579E308) = LESS +compare (0.123E4, 0.123E4) = EQUAL +compareReal (0.123E4, 0.123E4) = EQUAL +compare (0.123E4, 0.123E2) = GREATER +compareReal (0.123E4, 0.123E2) = GREATER +compare (0.123E4, 0.3141592653589793E1) = GREATER +compareReal (0.123E4, 0.3141592653589793E1) = GREATER +compare (0.123E4, 0.2718281828459045E1) = GREATER +compareReal (0.123E4, 0.2718281828459045E1) = GREATER +compare (0.123E4, 0.123E1) = GREATER +compareReal (0.123E4, 0.123E1) = GREATER +compare (0.123E4, 0.123) = GREATER +compareReal (0.123E4, 0.123) = GREATER +compare (0.123E4, 0.123E~2) = GREATER +compareReal (0.123E4, 0.123E~2) = GREATER +compare (0.123E4, 0.22250738585072014E~307) = GREATER +compareReal (0.123E4, 0.22250738585072014E~307) = GREATER +compare (0.123E4, 0.11125369292536007E~307) = GREATER +compareReal (0.123E4, 0.11125369292536007E~307) = GREATER +compare (0.123E4, 0.5E~323) = GREATER +compareReal (0.123E4, 0.5E~323) = GREATER +compare (0.123E4, 0.0) = GREATER +compareReal (0.123E4, 0.0) = GREATER +compare (0.123E4, ~0.17976931348623157E309) = GREATER +compareReal (0.123E4, ~0.17976931348623157E309) = GREATER +compare (0.123E4, ~0.8988465674311579E308) = GREATER +compareReal (0.123E4, ~0.8988465674311579E308) = GREATER +compare (0.123E4, ~0.123E4) = GREATER +compareReal (0.123E4, ~0.123E4) = GREATER +compare (0.123E4, ~0.123E2) = GREATER +compareReal (0.123E4, ~0.123E2) = GREATER +compare (0.123E4, ~0.3141592653589793E1) = GREATER +compareReal (0.123E4, ~0.3141592653589793E1) = GREATER +compare (0.123E4, ~0.2718281828459045E1) = GREATER +compareReal (0.123E4, ~0.2718281828459045E1) = GREATER +compare (0.123E4, ~0.123E1) = GREATER +compareReal (0.123E4, ~0.123E1) = GREATER +compare (0.123E4, ~0.123) = GREATER +compareReal (0.123E4, ~0.123) = GREATER +compare (0.123E4, ~0.123E~2) = GREATER +compareReal (0.123E4, ~0.123E~2) = GREATER +compare (0.123E4, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E4, ~0.22250738585072014E~307) = GREATER +compare (0.123E4, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E4, ~0.11125369292536007E~307) = GREATER +compare (0.123E4, ~0.5E~323) = GREATER +compareReal (0.123E4, ~0.5E~323) = GREATER +compare (0.123E4, ~0.0) = GREATER +compareReal (0.123E4, ~0.0) = GREATER +compare (0.123E2, 0.17976931348623157E309) = LESS +compareReal (0.123E2, 0.17976931348623157E309) = LESS +compare (0.123E2, 0.8988465674311579E308) = LESS +compareReal (0.123E2, 0.8988465674311579E308) = LESS +compare (0.123E2, 0.123E4) = LESS +compareReal (0.123E2, 0.123E4) = LESS +compare (0.123E2, 0.123E2) = EQUAL +compareReal (0.123E2, 0.123E2) = EQUAL +compare (0.123E2, 0.3141592653589793E1) = GREATER +compareReal (0.123E2, 0.3141592653589793E1) = GREATER +compare (0.123E2, 0.2718281828459045E1) = GREATER +compareReal (0.123E2, 0.2718281828459045E1) = GREATER +compare (0.123E2, 0.123E1) = GREATER +compareReal (0.123E2, 0.123E1) = GREATER +compare (0.123E2, 0.123) = GREATER +compareReal (0.123E2, 0.123) = GREATER +compare (0.123E2, 0.123E~2) = GREATER +compareReal (0.123E2, 0.123E~2) = GREATER +compare (0.123E2, 0.22250738585072014E~307) = GREATER +compareReal (0.123E2, 0.22250738585072014E~307) = GREATER +compare (0.123E2, 0.11125369292536007E~307) = GREATER +compareReal (0.123E2, 0.11125369292536007E~307) = GREATER +compare (0.123E2, 0.5E~323) = GREATER +compareReal (0.123E2, 0.5E~323) = GREATER +compare (0.123E2, 0.0) = GREATER +compareReal (0.123E2, 0.0) = GREATER +compare (0.123E2, ~0.17976931348623157E309) = GREATER +compareReal (0.123E2, ~0.17976931348623157E309) = GREATER +compare (0.123E2, ~0.8988465674311579E308) = GREATER +compareReal (0.123E2, ~0.8988465674311579E308) = GREATER +compare (0.123E2, ~0.123E4) = GREATER +compareReal (0.123E2, ~0.123E4) = GREATER +compare (0.123E2, ~0.123E2) = GREATER +compareReal (0.123E2, ~0.123E2) = GREATER +compare (0.123E2, ~0.3141592653589793E1) = GREATER +compareReal (0.123E2, ~0.3141592653589793E1) = GREATER +compare (0.123E2, ~0.2718281828459045E1) = GREATER +compareReal (0.123E2, ~0.2718281828459045E1) = GREATER +compare (0.123E2, ~0.123E1) = GREATER +compareReal (0.123E2, ~0.123E1) = GREATER +compare (0.123E2, ~0.123) = GREATER +compareReal (0.123E2, ~0.123) = GREATER +compare (0.123E2, ~0.123E~2) = GREATER +compareReal (0.123E2, ~0.123E~2) = GREATER +compare (0.123E2, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E2, ~0.22250738585072014E~307) = GREATER +compare (0.123E2, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E2, ~0.11125369292536007E~307) = GREATER +compare (0.123E2, ~0.5E~323) = GREATER +compareReal (0.123E2, ~0.5E~323) = GREATER +compare (0.123E2, ~0.0) = GREATER +compareReal (0.123E2, ~0.0) = GREATER +compare (0.3141592653589793E1, 0.17976931348623157E309) = LESS +compareReal (0.3141592653589793E1, 0.17976931348623157E309) = LESS +compare (0.3141592653589793E1, 0.8988465674311579E308) = LESS +compareReal (0.3141592653589793E1, 0.8988465674311579E308) = LESS +compare (0.3141592653589793E1, 0.123E4) = LESS +compareReal (0.3141592653589793E1, 0.123E4) = LESS +compare (0.3141592653589793E1, 0.123E2) = LESS +compareReal (0.3141592653589793E1, 0.123E2) = LESS +compare (0.3141592653589793E1, 0.3141592653589793E1) = EQUAL +compareReal (0.3141592653589793E1, 0.3141592653589793E1) = EQUAL +compare (0.3141592653589793E1, 0.2718281828459045E1) = GREATER +compareReal (0.3141592653589793E1, 0.2718281828459045E1) = GREATER +compare (0.3141592653589793E1, 0.123E1) = GREATER +compareReal (0.3141592653589793E1, 0.123E1) = GREATER +compare (0.3141592653589793E1, 0.123) = GREATER +compareReal (0.3141592653589793E1, 0.123) = GREATER +compare (0.3141592653589793E1, 0.123E~2) = GREATER +compareReal (0.3141592653589793E1, 0.123E~2) = GREATER +compare (0.3141592653589793E1, 0.22250738585072014E~307) = GREATER +compareReal (0.3141592653589793E1, 0.22250738585072014E~307) = GREATER +compare (0.3141592653589793E1, 0.11125369292536007E~307) = GREATER +compareReal (0.3141592653589793E1, 0.11125369292536007E~307) = GREATER +compare (0.3141592653589793E1, 0.5E~323) = GREATER +compareReal (0.3141592653589793E1, 0.5E~323) = GREATER +compare (0.3141592653589793E1, 0.0) = GREATER +compareReal (0.3141592653589793E1, 0.0) = GREATER +compare (0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compareReal (0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compare (0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compareReal (0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compare (0.3141592653589793E1, ~0.123E4) = GREATER +compareReal (0.3141592653589793E1, ~0.123E4) = GREATER +compare (0.3141592653589793E1, ~0.123E2) = GREATER +compareReal (0.3141592653589793E1, ~0.123E2) = GREATER +compare (0.3141592653589793E1, ~0.3141592653589793E1) = GREATER +compareReal (0.3141592653589793E1, ~0.3141592653589793E1) = GREATER +compare (0.3141592653589793E1, ~0.2718281828459045E1) = GREATER +compareReal (0.3141592653589793E1, ~0.2718281828459045E1) = GREATER +compare (0.3141592653589793E1, ~0.123E1) = GREATER +compareReal (0.3141592653589793E1, ~0.123E1) = GREATER +compare (0.3141592653589793E1, ~0.123) = GREATER +compareReal (0.3141592653589793E1, ~0.123) = GREATER +compare (0.3141592653589793E1, ~0.123E~2) = GREATER +compareReal (0.3141592653589793E1, ~0.123E~2) = GREATER +compare (0.3141592653589793E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.3141592653589793E1, ~0.22250738585072014E~307) = GREATER +compare (0.3141592653589793E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.3141592653589793E1, ~0.11125369292536007E~307) = GREATER +compare (0.3141592653589793E1, ~0.5E~323) = GREATER +compareReal (0.3141592653589793E1, ~0.5E~323) = GREATER +compare (0.3141592653589793E1, ~0.0) = GREATER +compareReal (0.3141592653589793E1, ~0.0) = GREATER +compare (0.2718281828459045E1, 0.17976931348623157E309) = LESS +compareReal (0.2718281828459045E1, 0.17976931348623157E309) = LESS +compare (0.2718281828459045E1, 0.8988465674311579E308) = LESS +compareReal (0.2718281828459045E1, 0.8988465674311579E308) = LESS +compare (0.2718281828459045E1, 0.123E4) = LESS +compareReal (0.2718281828459045E1, 0.123E4) = LESS +compare (0.2718281828459045E1, 0.123E2) = LESS +compareReal (0.2718281828459045E1, 0.123E2) = LESS +compare (0.2718281828459045E1, 0.3141592653589793E1) = LESS +compareReal (0.2718281828459045E1, 0.3141592653589793E1) = LESS +compare (0.2718281828459045E1, 0.2718281828459045E1) = EQUAL +compareReal (0.2718281828459045E1, 0.2718281828459045E1) = EQUAL +compare (0.2718281828459045E1, 0.123E1) = GREATER +compareReal (0.2718281828459045E1, 0.123E1) = GREATER +compare (0.2718281828459045E1, 0.123) = GREATER +compareReal (0.2718281828459045E1, 0.123) = GREATER +compare (0.2718281828459045E1, 0.123E~2) = GREATER +compareReal (0.2718281828459045E1, 0.123E~2) = GREATER +compare (0.2718281828459045E1, 0.22250738585072014E~307) = GREATER +compareReal (0.2718281828459045E1, 0.22250738585072014E~307) = GREATER +compare (0.2718281828459045E1, 0.11125369292536007E~307) = GREATER +compareReal (0.2718281828459045E1, 0.11125369292536007E~307) = GREATER +compare (0.2718281828459045E1, 0.5E~323) = GREATER +compareReal (0.2718281828459045E1, 0.5E~323) = GREATER +compare (0.2718281828459045E1, 0.0) = GREATER +compareReal (0.2718281828459045E1, 0.0) = GREATER +compare (0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compareReal (0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compare (0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compareReal (0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compare (0.2718281828459045E1, ~0.123E4) = GREATER +compareReal (0.2718281828459045E1, ~0.123E4) = GREATER +compare (0.2718281828459045E1, ~0.123E2) = GREATER +compareReal (0.2718281828459045E1, ~0.123E2) = GREATER +compare (0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compareReal (0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compare (0.2718281828459045E1, ~0.2718281828459045E1) = GREATER +compareReal (0.2718281828459045E1, ~0.2718281828459045E1) = GREATER +compare (0.2718281828459045E1, ~0.123E1) = GREATER +compareReal (0.2718281828459045E1, ~0.123E1) = GREATER +compare (0.2718281828459045E1, ~0.123) = GREATER +compareReal (0.2718281828459045E1, ~0.123) = GREATER +compare (0.2718281828459045E1, ~0.123E~2) = GREATER +compareReal (0.2718281828459045E1, ~0.123E~2) = GREATER +compare (0.2718281828459045E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.2718281828459045E1, ~0.22250738585072014E~307) = GREATER +compare (0.2718281828459045E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.2718281828459045E1, ~0.11125369292536007E~307) = GREATER +compare (0.2718281828459045E1, ~0.5E~323) = GREATER +compareReal (0.2718281828459045E1, ~0.5E~323) = GREATER +compare (0.2718281828459045E1, ~0.0) = GREATER +compareReal (0.2718281828459045E1, ~0.0) = GREATER +compare (0.123E1, 0.17976931348623157E309) = LESS +compareReal (0.123E1, 0.17976931348623157E309) = LESS +compare (0.123E1, 0.8988465674311579E308) = LESS +compareReal (0.123E1, 0.8988465674311579E308) = LESS +compare (0.123E1, 0.123E4) = LESS +compareReal (0.123E1, 0.123E4) = LESS +compare (0.123E1, 0.123E2) = LESS +compareReal (0.123E1, 0.123E2) = LESS +compare (0.123E1, 0.3141592653589793E1) = LESS +compareReal (0.123E1, 0.3141592653589793E1) = LESS +compare (0.123E1, 0.2718281828459045E1) = LESS +compareReal (0.123E1, 0.2718281828459045E1) = LESS +compare (0.123E1, 0.123E1) = EQUAL +compareReal (0.123E1, 0.123E1) = EQUAL +compare (0.123E1, 0.123) = GREATER +compareReal (0.123E1, 0.123) = GREATER +compare (0.123E1, 0.123E~2) = GREATER +compareReal (0.123E1, 0.123E~2) = GREATER +compare (0.123E1, 0.22250738585072014E~307) = GREATER +compareReal (0.123E1, 0.22250738585072014E~307) = GREATER +compare (0.123E1, 0.11125369292536007E~307) = GREATER +compareReal (0.123E1, 0.11125369292536007E~307) = GREATER +compare (0.123E1, 0.5E~323) = GREATER +compareReal (0.123E1, 0.5E~323) = GREATER +compare (0.123E1, 0.0) = GREATER +compareReal (0.123E1, 0.0) = GREATER +compare (0.123E1, ~0.17976931348623157E309) = GREATER +compareReal (0.123E1, ~0.17976931348623157E309) = GREATER +compare (0.123E1, ~0.8988465674311579E308) = GREATER +compareReal (0.123E1, ~0.8988465674311579E308) = GREATER +compare (0.123E1, ~0.123E4) = GREATER +compareReal (0.123E1, ~0.123E4) = GREATER +compare (0.123E1, ~0.123E2) = GREATER +compareReal (0.123E1, ~0.123E2) = GREATER +compare (0.123E1, ~0.3141592653589793E1) = GREATER +compareReal (0.123E1, ~0.3141592653589793E1) = GREATER +compare (0.123E1, ~0.2718281828459045E1) = GREATER +compareReal (0.123E1, ~0.2718281828459045E1) = GREATER +compare (0.123E1, ~0.123E1) = GREATER +compareReal (0.123E1, ~0.123E1) = GREATER +compare (0.123E1, ~0.123) = GREATER +compareReal (0.123E1, ~0.123) = GREATER +compare (0.123E1, ~0.123E~2) = GREATER +compareReal (0.123E1, ~0.123E~2) = GREATER +compare (0.123E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E1, ~0.22250738585072014E~307) = GREATER +compare (0.123E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E1, ~0.11125369292536007E~307) = GREATER +compare (0.123E1, ~0.5E~323) = GREATER +compareReal (0.123E1, ~0.5E~323) = GREATER +compare (0.123E1, ~0.0) = GREATER +compareReal (0.123E1, ~0.0) = GREATER +compare (0.123, 0.17976931348623157E309) = LESS +compareReal (0.123, 0.17976931348623157E309) = LESS +compare (0.123, 0.8988465674311579E308) = LESS +compareReal (0.123, 0.8988465674311579E308) = LESS +compare (0.123, 0.123E4) = LESS +compareReal (0.123, 0.123E4) = LESS +compare (0.123, 0.123E2) = LESS +compareReal (0.123, 0.123E2) = LESS +compare (0.123, 0.3141592653589793E1) = LESS +compareReal (0.123, 0.3141592653589793E1) = LESS +compare (0.123, 0.2718281828459045E1) = LESS +compareReal (0.123, 0.2718281828459045E1) = LESS +compare (0.123, 0.123E1) = LESS +compareReal (0.123, 0.123E1) = LESS +compare (0.123, 0.123) = EQUAL +compareReal (0.123, 0.123) = EQUAL +compare (0.123, 0.123E~2) = GREATER +compareReal (0.123, 0.123E~2) = GREATER +compare (0.123, 0.22250738585072014E~307) = GREATER +compareReal (0.123, 0.22250738585072014E~307) = GREATER +compare (0.123, 0.11125369292536007E~307) = GREATER +compareReal (0.123, 0.11125369292536007E~307) = GREATER +compare (0.123, 0.5E~323) = GREATER +compareReal (0.123, 0.5E~323) = GREATER +compare (0.123, 0.0) = GREATER +compareReal (0.123, 0.0) = GREATER +compare (0.123, ~0.17976931348623157E309) = GREATER +compareReal (0.123, ~0.17976931348623157E309) = GREATER +compare (0.123, ~0.8988465674311579E308) = GREATER +compareReal (0.123, ~0.8988465674311579E308) = GREATER +compare (0.123, ~0.123E4) = GREATER +compareReal (0.123, ~0.123E4) = GREATER +compare (0.123, ~0.123E2) = GREATER +compareReal (0.123, ~0.123E2) = GREATER +compare (0.123, ~0.3141592653589793E1) = GREATER +compareReal (0.123, ~0.3141592653589793E1) = GREATER +compare (0.123, ~0.2718281828459045E1) = GREATER +compareReal (0.123, ~0.2718281828459045E1) = GREATER +compare (0.123, ~0.123E1) = GREATER +compareReal (0.123, ~0.123E1) = GREATER +compare (0.123, ~0.123) = GREATER +compareReal (0.123, ~0.123) = GREATER +compare (0.123, ~0.123E~2) = GREATER +compareReal (0.123, ~0.123E~2) = GREATER +compare (0.123, ~0.22250738585072014E~307) = GREATER +compareReal (0.123, ~0.22250738585072014E~307) = GREATER +compare (0.123, ~0.11125369292536007E~307) = GREATER +compareReal (0.123, ~0.11125369292536007E~307) = GREATER +compare (0.123, ~0.5E~323) = GREATER +compareReal (0.123, ~0.5E~323) = GREATER +compare (0.123, ~0.0) = GREATER +compareReal (0.123, ~0.0) = GREATER +compare (0.123E~2, 0.17976931348623157E309) = LESS +compareReal (0.123E~2, 0.17976931348623157E309) = LESS +compare (0.123E~2, 0.8988465674311579E308) = LESS +compareReal (0.123E~2, 0.8988465674311579E308) = LESS +compare (0.123E~2, 0.123E4) = LESS +compareReal (0.123E~2, 0.123E4) = LESS +compare (0.123E~2, 0.123E2) = LESS +compareReal (0.123E~2, 0.123E2) = LESS +compare (0.123E~2, 0.3141592653589793E1) = LESS +compareReal (0.123E~2, 0.3141592653589793E1) = LESS +compare (0.123E~2, 0.2718281828459045E1) = LESS +compareReal (0.123E~2, 0.2718281828459045E1) = LESS +compare (0.123E~2, 0.123E1) = LESS +compareReal (0.123E~2, 0.123E1) = LESS +compare (0.123E~2, 0.123) = LESS +compareReal (0.123E~2, 0.123) = LESS +compare (0.123E~2, 0.123E~2) = EQUAL +compareReal (0.123E~2, 0.123E~2) = EQUAL +compare (0.123E~2, 0.22250738585072014E~307) = GREATER +compareReal (0.123E~2, 0.22250738585072014E~307) = GREATER +compare (0.123E~2, 0.11125369292536007E~307) = GREATER +compareReal (0.123E~2, 0.11125369292536007E~307) = GREATER +compare (0.123E~2, 0.5E~323) = GREATER +compareReal (0.123E~2, 0.5E~323) = GREATER +compare (0.123E~2, 0.0) = GREATER +compareReal (0.123E~2, 0.0) = GREATER +compare (0.123E~2, ~0.17976931348623157E309) = GREATER +compareReal (0.123E~2, ~0.17976931348623157E309) = GREATER +compare (0.123E~2, ~0.8988465674311579E308) = GREATER +compareReal (0.123E~2, ~0.8988465674311579E308) = GREATER +compare (0.123E~2, ~0.123E4) = GREATER +compareReal (0.123E~2, ~0.123E4) = GREATER +compare (0.123E~2, ~0.123E2) = GREATER +compareReal (0.123E~2, ~0.123E2) = GREATER +compare (0.123E~2, ~0.3141592653589793E1) = GREATER +compareReal (0.123E~2, ~0.3141592653589793E1) = GREATER +compare (0.123E~2, ~0.2718281828459045E1) = GREATER +compareReal (0.123E~2, ~0.2718281828459045E1) = GREATER +compare (0.123E~2, ~0.123E1) = GREATER +compareReal (0.123E~2, ~0.123E1) = GREATER +compare (0.123E~2, ~0.123) = GREATER +compareReal (0.123E~2, ~0.123) = GREATER +compare (0.123E~2, ~0.123E~2) = GREATER +compareReal (0.123E~2, ~0.123E~2) = GREATER +compare (0.123E~2, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E~2, ~0.22250738585072014E~307) = GREATER +compare (0.123E~2, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E~2, ~0.11125369292536007E~307) = GREATER +compare (0.123E~2, ~0.5E~323) = GREATER +compareReal (0.123E~2, ~0.5E~323) = GREATER +compare (0.123E~2, ~0.0) = GREATER +compareReal (0.123E~2, ~0.0) = GREATER +compare (0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compareReal (0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compare (0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compareReal (0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compare (0.22250738585072014E~307, 0.123E4) = LESS +compareReal (0.22250738585072014E~307, 0.123E4) = LESS +compare (0.22250738585072014E~307, 0.123E2) = LESS +compareReal (0.22250738585072014E~307, 0.123E2) = LESS +compare (0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compareReal (0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compare (0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compareReal (0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compare (0.22250738585072014E~307, 0.123E1) = LESS +compareReal (0.22250738585072014E~307, 0.123E1) = LESS +compare (0.22250738585072014E~307, 0.123) = LESS +compareReal (0.22250738585072014E~307, 0.123) = LESS +compare (0.22250738585072014E~307, 0.123E~2) = LESS +compareReal (0.22250738585072014E~307, 0.123E~2) = LESS +compare (0.22250738585072014E~307, 0.22250738585072014E~307) = EQUAL +compareReal (0.22250738585072014E~307, 0.22250738585072014E~307) = EQUAL +compare (0.22250738585072014E~307, 0.11125369292536007E~307) = GREATER +compareReal (0.22250738585072014E~307, 0.11125369292536007E~307) = GREATER +compare (0.22250738585072014E~307, 0.5E~323) = GREATER +compareReal (0.22250738585072014E~307, 0.5E~323) = GREATER +compare (0.22250738585072014E~307, 0.0) = GREATER +compareReal (0.22250738585072014E~307, 0.0) = GREATER +compare (0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compareReal (0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compare (0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compareReal (0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compare (0.22250738585072014E~307, ~0.123E4) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E4) = GREATER +compare (0.22250738585072014E~307, ~0.123E2) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E2) = GREATER +compare (0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compare (0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compare (0.22250738585072014E~307, ~0.123E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E1) = GREATER +compare (0.22250738585072014E~307, ~0.123) = GREATER +compareReal (0.22250738585072014E~307, ~0.123) = GREATER +compare (0.22250738585072014E~307, ~0.123E~2) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E~2) = GREATER +compare (0.22250738585072014E~307, ~0.22250738585072014E~307) = GREATER +compareReal (0.22250738585072014E~307, ~0.22250738585072014E~307) = GREATER +compare (0.22250738585072014E~307, ~0.11125369292536007E~307) = GREATER +compareReal (0.22250738585072014E~307, ~0.11125369292536007E~307) = GREATER +compare (0.22250738585072014E~307, ~0.5E~323) = GREATER +compareReal (0.22250738585072014E~307, ~0.5E~323) = GREATER +compare (0.22250738585072014E~307, ~0.0) = GREATER +compareReal (0.22250738585072014E~307, ~0.0) = GREATER +compare (0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compareReal (0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compare (0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compareReal (0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compare (0.11125369292536007E~307, 0.123E4) = LESS +compareReal (0.11125369292536007E~307, 0.123E4) = LESS +compare (0.11125369292536007E~307, 0.123E2) = LESS +compareReal (0.11125369292536007E~307, 0.123E2) = LESS +compare (0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compareReal (0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compare (0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compareReal (0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compare (0.11125369292536007E~307, 0.123E1) = LESS +compareReal (0.11125369292536007E~307, 0.123E1) = LESS +compare (0.11125369292536007E~307, 0.123) = LESS +compareReal (0.11125369292536007E~307, 0.123) = LESS +compare (0.11125369292536007E~307, 0.123E~2) = LESS +compareReal (0.11125369292536007E~307, 0.123E~2) = LESS +compare (0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compareReal (0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compare (0.11125369292536007E~307, 0.11125369292536007E~307) = EQUAL +compareReal (0.11125369292536007E~307, 0.11125369292536007E~307) = EQUAL +compare (0.11125369292536007E~307, 0.5E~323) = GREATER +compareReal (0.11125369292536007E~307, 0.5E~323) = GREATER +compare (0.11125369292536007E~307, 0.0) = GREATER +compareReal (0.11125369292536007E~307, 0.0) = GREATER +compare (0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compareReal (0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compare (0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compareReal (0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compare (0.11125369292536007E~307, ~0.123E4) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E4) = GREATER +compare (0.11125369292536007E~307, ~0.123E2) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E2) = GREATER +compare (0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compare (0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compare (0.11125369292536007E~307, ~0.123E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E1) = GREATER +compare (0.11125369292536007E~307, ~0.123) = GREATER +compareReal (0.11125369292536007E~307, ~0.123) = GREATER +compare (0.11125369292536007E~307, ~0.123E~2) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E~2) = GREATER +compare (0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compareReal (0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compare (0.11125369292536007E~307, ~0.11125369292536007E~307) = GREATER +compareReal (0.11125369292536007E~307, ~0.11125369292536007E~307) = GREATER +compare (0.11125369292536007E~307, ~0.5E~323) = GREATER +compareReal (0.11125369292536007E~307, ~0.5E~323) = GREATER +compare (0.11125369292536007E~307, ~0.0) = GREATER +compareReal (0.11125369292536007E~307, ~0.0) = GREATER +compare (0.5E~323, 0.17976931348623157E309) = LESS +compareReal (0.5E~323, 0.17976931348623157E309) = LESS +compare (0.5E~323, 0.8988465674311579E308) = LESS +compareReal (0.5E~323, 0.8988465674311579E308) = LESS +compare (0.5E~323, 0.123E4) = LESS +compareReal (0.5E~323, 0.123E4) = LESS +compare (0.5E~323, 0.123E2) = LESS +compareReal (0.5E~323, 0.123E2) = LESS +compare (0.5E~323, 0.3141592653589793E1) = LESS +compareReal (0.5E~323, 0.3141592653589793E1) = LESS +compare (0.5E~323, 0.2718281828459045E1) = LESS +compareReal (0.5E~323, 0.2718281828459045E1) = LESS +compare (0.5E~323, 0.123E1) = LESS +compareReal (0.5E~323, 0.123E1) = LESS +compare (0.5E~323, 0.123) = LESS +compareReal (0.5E~323, 0.123) = LESS +compare (0.5E~323, 0.123E~2) = LESS +compareReal (0.5E~323, 0.123E~2) = LESS +compare (0.5E~323, 0.22250738585072014E~307) = LESS +compareReal (0.5E~323, 0.22250738585072014E~307) = LESS +compare (0.5E~323, 0.11125369292536007E~307) = LESS +compareReal (0.5E~323, 0.11125369292536007E~307) = LESS +compare (0.5E~323, 0.5E~323) = EQUAL +compareReal (0.5E~323, 0.5E~323) = EQUAL +compare (0.5E~323, 0.0) = GREATER +compareReal (0.5E~323, 0.0) = GREATER +compare (0.5E~323, ~0.17976931348623157E309) = GREATER +compareReal (0.5E~323, ~0.17976931348623157E309) = GREATER +compare (0.5E~323, ~0.8988465674311579E308) = GREATER +compareReal (0.5E~323, ~0.8988465674311579E308) = GREATER +compare (0.5E~323, ~0.123E4) = GREATER +compareReal (0.5E~323, ~0.123E4) = GREATER +compare (0.5E~323, ~0.123E2) = GREATER +compareReal (0.5E~323, ~0.123E2) = GREATER +compare (0.5E~323, ~0.3141592653589793E1) = GREATER +compareReal (0.5E~323, ~0.3141592653589793E1) = GREATER +compare (0.5E~323, ~0.2718281828459045E1) = GREATER +compareReal (0.5E~323, ~0.2718281828459045E1) = GREATER +compare (0.5E~323, ~0.123E1) = GREATER +compareReal (0.5E~323, ~0.123E1) = GREATER +compare (0.5E~323, ~0.123) = GREATER +compareReal (0.5E~323, ~0.123) = GREATER +compare (0.5E~323, ~0.123E~2) = GREATER +compareReal (0.5E~323, ~0.123E~2) = GREATER +compare (0.5E~323, ~0.22250738585072014E~307) = GREATER +compareReal (0.5E~323, ~0.22250738585072014E~307) = GREATER +compare (0.5E~323, ~0.11125369292536007E~307) = GREATER +compareReal (0.5E~323, ~0.11125369292536007E~307) = GREATER +compare (0.5E~323, ~0.5E~323) = GREATER +compareReal (0.5E~323, ~0.5E~323) = GREATER +compare (0.5E~323, ~0.0) = GREATER +compareReal (0.5E~323, ~0.0) = GREATER +compare (0.0, 0.17976931348623157E309) = LESS +compareReal (0.0, 0.17976931348623157E309) = LESS +compare (0.0, 0.8988465674311579E308) = LESS +compareReal (0.0, 0.8988465674311579E308) = LESS +compare (0.0, 0.123E4) = LESS +compareReal (0.0, 0.123E4) = LESS +compare (0.0, 0.123E2) = LESS +compareReal (0.0, 0.123E2) = LESS +compare (0.0, 0.3141592653589793E1) = LESS +compareReal (0.0, 0.3141592653589793E1) = LESS +compare (0.0, 0.2718281828459045E1) = LESS +compareReal (0.0, 0.2718281828459045E1) = LESS +compare (0.0, 0.123E1) = LESS +compareReal (0.0, 0.123E1) = LESS +compare (0.0, 0.123) = LESS +compareReal (0.0, 0.123) = LESS +compare (0.0, 0.123E~2) = LESS +compareReal (0.0, 0.123E~2) = LESS +compare (0.0, 0.22250738585072014E~307) = LESS +compareReal (0.0, 0.22250738585072014E~307) = LESS +compare (0.0, 0.11125369292536007E~307) = LESS +compareReal (0.0, 0.11125369292536007E~307) = LESS +compare (0.0, 0.5E~323) = LESS +compareReal (0.0, 0.5E~323) = LESS +compare (0.0, 0.0) = EQUAL +compareReal (0.0, 0.0) = EQUAL +compare (0.0, ~0.17976931348623157E309) = GREATER +compareReal (0.0, ~0.17976931348623157E309) = GREATER +compare (0.0, ~0.8988465674311579E308) = GREATER +compareReal (0.0, ~0.8988465674311579E308) = GREATER +compare (0.0, ~0.123E4) = GREATER +compareReal (0.0, ~0.123E4) = GREATER +compare (0.0, ~0.123E2) = GREATER +compareReal (0.0, ~0.123E2) = GREATER +compare (0.0, ~0.3141592653589793E1) = GREATER +compareReal (0.0, ~0.3141592653589793E1) = GREATER +compare (0.0, ~0.2718281828459045E1) = GREATER +compareReal (0.0, ~0.2718281828459045E1) = GREATER +compare (0.0, ~0.123E1) = GREATER +compareReal (0.0, ~0.123E1) = GREATER +compare (0.0, ~0.123) = GREATER +compareReal (0.0, ~0.123) = GREATER +compare (0.0, ~0.123E~2) = GREATER +compareReal (0.0, ~0.123E~2) = GREATER +compare (0.0, ~0.22250738585072014E~307) = GREATER +compareReal (0.0, ~0.22250738585072014E~307) = GREATER +compare (0.0, ~0.11125369292536007E~307) = GREATER +compareReal (0.0, ~0.11125369292536007E~307) = GREATER +compare (0.0, ~0.5E~323) = GREATER +compareReal (0.0, ~0.5E~323) = GREATER +compare (0.0, ~0.0) = EQUAL +compareReal (0.0, ~0.0) = EQUAL +compare (~0.17976931348623157E309, 0.17976931348623157E309) = LESS +compareReal (~0.17976931348623157E309, 0.17976931348623157E309) = LESS +compare (~0.17976931348623157E309, 0.8988465674311579E308) = LESS +compareReal (~0.17976931348623157E309, 0.8988465674311579E308) = LESS +compare (~0.17976931348623157E309, 0.123E4) = LESS +compareReal (~0.17976931348623157E309, 0.123E4) = LESS +compare (~0.17976931348623157E309, 0.123E2) = LESS +compareReal (~0.17976931348623157E309, 0.123E2) = LESS +compare (~0.17976931348623157E309, 0.3141592653589793E1) = LESS +compareReal (~0.17976931348623157E309, 0.3141592653589793E1) = LESS +compare (~0.17976931348623157E309, 0.2718281828459045E1) = LESS +compareReal (~0.17976931348623157E309, 0.2718281828459045E1) = LESS +compare (~0.17976931348623157E309, 0.123E1) = LESS +compareReal (~0.17976931348623157E309, 0.123E1) = LESS +compare (~0.17976931348623157E309, 0.123) = LESS +compareReal (~0.17976931348623157E309, 0.123) = LESS +compare (~0.17976931348623157E309, 0.123E~2) = LESS +compareReal (~0.17976931348623157E309, 0.123E~2) = LESS +compare (~0.17976931348623157E309, 0.22250738585072014E~307) = LESS +compareReal (~0.17976931348623157E309, 0.22250738585072014E~307) = LESS +compare (~0.17976931348623157E309, 0.11125369292536007E~307) = LESS +compareReal (~0.17976931348623157E309, 0.11125369292536007E~307) = LESS +compare (~0.17976931348623157E309, 0.5E~323) = LESS +compareReal (~0.17976931348623157E309, 0.5E~323) = LESS +compare (~0.17976931348623157E309, 0.0) = LESS +compareReal (~0.17976931348623157E309, 0.0) = LESS +compare (~0.17976931348623157E309, ~0.17976931348623157E309) = EQUAL +compareReal (~0.17976931348623157E309, ~0.17976931348623157E309) = EQUAL +compare (~0.17976931348623157E309, ~0.8988465674311579E308) = LESS +compareReal (~0.17976931348623157E309, ~0.8988465674311579E308) = LESS +compare (~0.17976931348623157E309, ~0.123E4) = LESS +compareReal (~0.17976931348623157E309, ~0.123E4) = LESS +compare (~0.17976931348623157E309, ~0.123E2) = LESS +compareReal (~0.17976931348623157E309, ~0.123E2) = LESS +compare (~0.17976931348623157E309, ~0.3141592653589793E1) = LESS +compareReal (~0.17976931348623157E309, ~0.3141592653589793E1) = LESS +compare (~0.17976931348623157E309, ~0.2718281828459045E1) = LESS +compareReal (~0.17976931348623157E309, ~0.2718281828459045E1) = LESS +compare (~0.17976931348623157E309, ~0.123E1) = LESS +compareReal (~0.17976931348623157E309, ~0.123E1) = LESS +compare (~0.17976931348623157E309, ~0.123) = LESS +compareReal (~0.17976931348623157E309, ~0.123) = LESS +compare (~0.17976931348623157E309, ~0.123E~2) = LESS +compareReal (~0.17976931348623157E309, ~0.123E~2) = LESS +compare (~0.17976931348623157E309, ~0.22250738585072014E~307) = LESS +compareReal (~0.17976931348623157E309, ~0.22250738585072014E~307) = LESS +compare (~0.17976931348623157E309, ~0.11125369292536007E~307) = LESS +compareReal (~0.17976931348623157E309, ~0.11125369292536007E~307) = LESS +compare (~0.17976931348623157E309, ~0.5E~323) = LESS +compareReal (~0.17976931348623157E309, ~0.5E~323) = LESS +compare (~0.17976931348623157E309, ~0.0) = LESS +compareReal (~0.17976931348623157E309, ~0.0) = LESS +compare (~0.8988465674311579E308, 0.17976931348623157E309) = LESS +compareReal (~0.8988465674311579E308, 0.17976931348623157E309) = LESS +compare (~0.8988465674311579E308, 0.8988465674311579E308) = LESS +compareReal (~0.8988465674311579E308, 0.8988465674311579E308) = LESS +compare (~0.8988465674311579E308, 0.123E4) = LESS +compareReal (~0.8988465674311579E308, 0.123E4) = LESS +compare (~0.8988465674311579E308, 0.123E2) = LESS +compareReal (~0.8988465674311579E308, 0.123E2) = LESS +compare (~0.8988465674311579E308, 0.3141592653589793E1) = LESS +compareReal (~0.8988465674311579E308, 0.3141592653589793E1) = LESS +compare (~0.8988465674311579E308, 0.2718281828459045E1) = LESS +compareReal (~0.8988465674311579E308, 0.2718281828459045E1) = LESS +compare (~0.8988465674311579E308, 0.123E1) = LESS +compareReal (~0.8988465674311579E308, 0.123E1) = LESS +compare (~0.8988465674311579E308, 0.123) = LESS +compareReal (~0.8988465674311579E308, 0.123) = LESS +compare (~0.8988465674311579E308, 0.123E~2) = LESS +compareReal (~0.8988465674311579E308, 0.123E~2) = LESS +compare (~0.8988465674311579E308, 0.22250738585072014E~307) = LESS +compareReal (~0.8988465674311579E308, 0.22250738585072014E~307) = LESS +compare (~0.8988465674311579E308, 0.11125369292536007E~307) = LESS +compareReal (~0.8988465674311579E308, 0.11125369292536007E~307) = LESS +compare (~0.8988465674311579E308, 0.5E~323) = LESS +compareReal (~0.8988465674311579E308, 0.5E~323) = LESS +compare (~0.8988465674311579E308, 0.0) = LESS +compareReal (~0.8988465674311579E308, 0.0) = LESS +compare (~0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compareReal (~0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compare (~0.8988465674311579E308, ~0.8988465674311579E308) = EQUAL +compareReal (~0.8988465674311579E308, ~0.8988465674311579E308) = EQUAL +compare (~0.8988465674311579E308, ~0.123E4) = LESS +compareReal (~0.8988465674311579E308, ~0.123E4) = LESS +compare (~0.8988465674311579E308, ~0.123E2) = LESS +compareReal (~0.8988465674311579E308, ~0.123E2) = LESS +compare (~0.8988465674311579E308, ~0.3141592653589793E1) = LESS +compareReal (~0.8988465674311579E308, ~0.3141592653589793E1) = LESS +compare (~0.8988465674311579E308, ~0.2718281828459045E1) = LESS +compareReal (~0.8988465674311579E308, ~0.2718281828459045E1) = LESS +compare (~0.8988465674311579E308, ~0.123E1) = LESS +compareReal (~0.8988465674311579E308, ~0.123E1) = LESS +compare (~0.8988465674311579E308, ~0.123) = LESS +compareReal (~0.8988465674311579E308, ~0.123) = LESS +compare (~0.8988465674311579E308, ~0.123E~2) = LESS +compareReal (~0.8988465674311579E308, ~0.123E~2) = LESS +compare (~0.8988465674311579E308, ~0.22250738585072014E~307) = LESS +compareReal (~0.8988465674311579E308, ~0.22250738585072014E~307) = LESS +compare (~0.8988465674311579E308, ~0.11125369292536007E~307) = LESS +compareReal (~0.8988465674311579E308, ~0.11125369292536007E~307) = LESS +compare (~0.8988465674311579E308, ~0.5E~323) = LESS +compareReal (~0.8988465674311579E308, ~0.5E~323) = LESS +compare (~0.8988465674311579E308, ~0.0) = LESS +compareReal (~0.8988465674311579E308, ~0.0) = LESS +compare (~0.123E4, 0.17976931348623157E309) = LESS +compareReal (~0.123E4, 0.17976931348623157E309) = LESS +compare (~0.123E4, 0.8988465674311579E308) = LESS +compareReal (~0.123E4, 0.8988465674311579E308) = LESS +compare (~0.123E4, 0.123E4) = LESS +compareReal (~0.123E4, 0.123E4) = LESS +compare (~0.123E4, 0.123E2) = LESS +compareReal (~0.123E4, 0.123E2) = LESS +compare (~0.123E4, 0.3141592653589793E1) = LESS +compareReal (~0.123E4, 0.3141592653589793E1) = LESS +compare (~0.123E4, 0.2718281828459045E1) = LESS +compareReal (~0.123E4, 0.2718281828459045E1) = LESS +compare (~0.123E4, 0.123E1) = LESS +compareReal (~0.123E4, 0.123E1) = LESS +compare (~0.123E4, 0.123) = LESS +compareReal (~0.123E4, 0.123) = LESS +compare (~0.123E4, 0.123E~2) = LESS +compareReal (~0.123E4, 0.123E~2) = LESS +compare (~0.123E4, 0.22250738585072014E~307) = LESS +compareReal (~0.123E4, 0.22250738585072014E~307) = LESS +compare (~0.123E4, 0.11125369292536007E~307) = LESS +compareReal (~0.123E4, 0.11125369292536007E~307) = LESS +compare (~0.123E4, 0.5E~323) = LESS +compareReal (~0.123E4, 0.5E~323) = LESS +compare (~0.123E4, 0.0) = LESS +compareReal (~0.123E4, 0.0) = LESS +compare (~0.123E4, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E4, ~0.17976931348623157E309) = GREATER +compare (~0.123E4, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E4, ~0.8988465674311579E308) = GREATER +compare (~0.123E4, ~0.123E4) = EQUAL +compareReal (~0.123E4, ~0.123E4) = EQUAL +compare (~0.123E4, ~0.123E2) = LESS +compareReal (~0.123E4, ~0.123E2) = LESS +compare (~0.123E4, ~0.3141592653589793E1) = LESS +compareReal (~0.123E4, ~0.3141592653589793E1) = LESS +compare (~0.123E4, ~0.2718281828459045E1) = LESS +compareReal (~0.123E4, ~0.2718281828459045E1) = LESS +compare (~0.123E4, ~0.123E1) = LESS +compareReal (~0.123E4, ~0.123E1) = LESS +compare (~0.123E4, ~0.123) = LESS +compareReal (~0.123E4, ~0.123) = LESS +compare (~0.123E4, ~0.123E~2) = LESS +compareReal (~0.123E4, ~0.123E~2) = LESS +compare (~0.123E4, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E4, ~0.22250738585072014E~307) = LESS +compare (~0.123E4, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E4, ~0.11125369292536007E~307) = LESS +compare (~0.123E4, ~0.5E~323) = LESS +compareReal (~0.123E4, ~0.5E~323) = LESS +compare (~0.123E4, ~0.0) = LESS +compareReal (~0.123E4, ~0.0) = LESS +compare (~0.123E2, 0.17976931348623157E309) = LESS +compareReal (~0.123E2, 0.17976931348623157E309) = LESS +compare (~0.123E2, 0.8988465674311579E308) = LESS +compareReal (~0.123E2, 0.8988465674311579E308) = LESS +compare (~0.123E2, 0.123E4) = LESS +compareReal (~0.123E2, 0.123E4) = LESS +compare (~0.123E2, 0.123E2) = LESS +compareReal (~0.123E2, 0.123E2) = LESS +compare (~0.123E2, 0.3141592653589793E1) = LESS +compareReal (~0.123E2, 0.3141592653589793E1) = LESS +compare (~0.123E2, 0.2718281828459045E1) = LESS +compareReal (~0.123E2, 0.2718281828459045E1) = LESS +compare (~0.123E2, 0.123E1) = LESS +compareReal (~0.123E2, 0.123E1) = LESS +compare (~0.123E2, 0.123) = LESS +compareReal (~0.123E2, 0.123) = LESS +compare (~0.123E2, 0.123E~2) = LESS +compareReal (~0.123E2, 0.123E~2) = LESS +compare (~0.123E2, 0.22250738585072014E~307) = LESS +compareReal (~0.123E2, 0.22250738585072014E~307) = LESS +compare (~0.123E2, 0.11125369292536007E~307) = LESS +compareReal (~0.123E2, 0.11125369292536007E~307) = LESS +compare (~0.123E2, 0.5E~323) = LESS +compareReal (~0.123E2, 0.5E~323) = LESS +compare (~0.123E2, 0.0) = LESS +compareReal (~0.123E2, 0.0) = LESS +compare (~0.123E2, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E2, ~0.17976931348623157E309) = GREATER +compare (~0.123E2, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E2, ~0.8988465674311579E308) = GREATER +compare (~0.123E2, ~0.123E4) = GREATER +compareReal (~0.123E2, ~0.123E4) = GREATER +compare (~0.123E2, ~0.123E2) = EQUAL +compareReal (~0.123E2, ~0.123E2) = EQUAL +compare (~0.123E2, ~0.3141592653589793E1) = LESS +compareReal (~0.123E2, ~0.3141592653589793E1) = LESS +compare (~0.123E2, ~0.2718281828459045E1) = LESS +compareReal (~0.123E2, ~0.2718281828459045E1) = LESS +compare (~0.123E2, ~0.123E1) = LESS +compareReal (~0.123E2, ~0.123E1) = LESS +compare (~0.123E2, ~0.123) = LESS +compareReal (~0.123E2, ~0.123) = LESS +compare (~0.123E2, ~0.123E~2) = LESS +compareReal (~0.123E2, ~0.123E~2) = LESS +compare (~0.123E2, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E2, ~0.22250738585072014E~307) = LESS +compare (~0.123E2, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E2, ~0.11125369292536007E~307) = LESS +compare (~0.123E2, ~0.5E~323) = LESS +compareReal (~0.123E2, ~0.5E~323) = LESS +compare (~0.123E2, ~0.0) = LESS +compareReal (~0.123E2, ~0.0) = LESS +compare (~0.3141592653589793E1, 0.17976931348623157E309) = LESS +compareReal (~0.3141592653589793E1, 0.17976931348623157E309) = LESS +compare (~0.3141592653589793E1, 0.8988465674311579E308) = LESS +compareReal (~0.3141592653589793E1, 0.8988465674311579E308) = LESS +compare (~0.3141592653589793E1, 0.123E4) = LESS +compareReal (~0.3141592653589793E1, 0.123E4) = LESS +compare (~0.3141592653589793E1, 0.123E2) = LESS +compareReal (~0.3141592653589793E1, 0.123E2) = LESS +compare (~0.3141592653589793E1, 0.3141592653589793E1) = LESS +compareReal (~0.3141592653589793E1, 0.3141592653589793E1) = LESS +compare (~0.3141592653589793E1, 0.2718281828459045E1) = LESS +compareReal (~0.3141592653589793E1, 0.2718281828459045E1) = LESS +compare (~0.3141592653589793E1, 0.123E1) = LESS +compareReal (~0.3141592653589793E1, 0.123E1) = LESS +compare (~0.3141592653589793E1, 0.123) = LESS +compareReal (~0.3141592653589793E1, 0.123) = LESS +compare (~0.3141592653589793E1, 0.123E~2) = LESS +compareReal (~0.3141592653589793E1, 0.123E~2) = LESS +compare (~0.3141592653589793E1, 0.22250738585072014E~307) = LESS +compareReal (~0.3141592653589793E1, 0.22250738585072014E~307) = LESS +compare (~0.3141592653589793E1, 0.11125369292536007E~307) = LESS +compareReal (~0.3141592653589793E1, 0.11125369292536007E~307) = LESS +compare (~0.3141592653589793E1, 0.5E~323) = LESS +compareReal (~0.3141592653589793E1, 0.5E~323) = LESS +compare (~0.3141592653589793E1, 0.0) = LESS +compareReal (~0.3141592653589793E1, 0.0) = LESS +compare (~0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compare (~0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compare (~0.3141592653589793E1, ~0.123E4) = GREATER +compareReal (~0.3141592653589793E1, ~0.123E4) = GREATER +compare (~0.3141592653589793E1, ~0.123E2) = GREATER +compareReal (~0.3141592653589793E1, ~0.123E2) = GREATER +compare (~0.3141592653589793E1, ~0.3141592653589793E1) = EQUAL +compareReal (~0.3141592653589793E1, ~0.3141592653589793E1) = EQUAL +compare (~0.3141592653589793E1, ~0.2718281828459045E1) = LESS +compareReal (~0.3141592653589793E1, ~0.2718281828459045E1) = LESS +compare (~0.3141592653589793E1, ~0.123E1) = LESS +compareReal (~0.3141592653589793E1, ~0.123E1) = LESS +compare (~0.3141592653589793E1, ~0.123) = LESS +compareReal (~0.3141592653589793E1, ~0.123) = LESS +compare (~0.3141592653589793E1, ~0.123E~2) = LESS +compareReal (~0.3141592653589793E1, ~0.123E~2) = LESS +compare (~0.3141592653589793E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.3141592653589793E1, ~0.22250738585072014E~307) = LESS +compare (~0.3141592653589793E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.3141592653589793E1, ~0.11125369292536007E~307) = LESS +compare (~0.3141592653589793E1, ~0.5E~323) = LESS +compareReal (~0.3141592653589793E1, ~0.5E~323) = LESS +compare (~0.3141592653589793E1, ~0.0) = LESS +compareReal (~0.3141592653589793E1, ~0.0) = LESS +compare (~0.2718281828459045E1, 0.17976931348623157E309) = LESS +compareReal (~0.2718281828459045E1, 0.17976931348623157E309) = LESS +compare (~0.2718281828459045E1, 0.8988465674311579E308) = LESS +compareReal (~0.2718281828459045E1, 0.8988465674311579E308) = LESS +compare (~0.2718281828459045E1, 0.123E4) = LESS +compareReal (~0.2718281828459045E1, 0.123E4) = LESS +compare (~0.2718281828459045E1, 0.123E2) = LESS +compareReal (~0.2718281828459045E1, 0.123E2) = LESS +compare (~0.2718281828459045E1, 0.3141592653589793E1) = LESS +compareReal (~0.2718281828459045E1, 0.3141592653589793E1) = LESS +compare (~0.2718281828459045E1, 0.2718281828459045E1) = LESS +compareReal (~0.2718281828459045E1, 0.2718281828459045E1) = LESS +compare (~0.2718281828459045E1, 0.123E1) = LESS +compareReal (~0.2718281828459045E1, 0.123E1) = LESS +compare (~0.2718281828459045E1, 0.123) = LESS +compareReal (~0.2718281828459045E1, 0.123) = LESS +compare (~0.2718281828459045E1, 0.123E~2) = LESS +compareReal (~0.2718281828459045E1, 0.123E~2) = LESS +compare (~0.2718281828459045E1, 0.22250738585072014E~307) = LESS +compareReal (~0.2718281828459045E1, 0.22250738585072014E~307) = LESS +compare (~0.2718281828459045E1, 0.11125369292536007E~307) = LESS +compareReal (~0.2718281828459045E1, 0.11125369292536007E~307) = LESS +compare (~0.2718281828459045E1, 0.5E~323) = LESS +compareReal (~0.2718281828459045E1, 0.5E~323) = LESS +compare (~0.2718281828459045E1, 0.0) = LESS +compareReal (~0.2718281828459045E1, 0.0) = LESS +compare (~0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compare (~0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compare (~0.2718281828459045E1, ~0.123E4) = GREATER +compareReal (~0.2718281828459045E1, ~0.123E4) = GREATER +compare (~0.2718281828459045E1, ~0.123E2) = GREATER +compareReal (~0.2718281828459045E1, ~0.123E2) = GREATER +compare (~0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compareReal (~0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compare (~0.2718281828459045E1, ~0.2718281828459045E1) = EQUAL +compareReal (~0.2718281828459045E1, ~0.2718281828459045E1) = EQUAL +compare (~0.2718281828459045E1, ~0.123E1) = LESS +compareReal (~0.2718281828459045E1, ~0.123E1) = LESS +compare (~0.2718281828459045E1, ~0.123) = LESS +compareReal (~0.2718281828459045E1, ~0.123) = LESS +compare (~0.2718281828459045E1, ~0.123E~2) = LESS +compareReal (~0.2718281828459045E1, ~0.123E~2) = LESS +compare (~0.2718281828459045E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.2718281828459045E1, ~0.22250738585072014E~307) = LESS +compare (~0.2718281828459045E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.2718281828459045E1, ~0.11125369292536007E~307) = LESS +compare (~0.2718281828459045E1, ~0.5E~323) = LESS +compareReal (~0.2718281828459045E1, ~0.5E~323) = LESS +compare (~0.2718281828459045E1, ~0.0) = LESS +compareReal (~0.2718281828459045E1, ~0.0) = LESS +compare (~0.123E1, 0.17976931348623157E309) = LESS +compareReal (~0.123E1, 0.17976931348623157E309) = LESS +compare (~0.123E1, 0.8988465674311579E308) = LESS +compareReal (~0.123E1, 0.8988465674311579E308) = LESS +compare (~0.123E1, 0.123E4) = LESS +compareReal (~0.123E1, 0.123E4) = LESS +compare (~0.123E1, 0.123E2) = LESS +compareReal (~0.123E1, 0.123E2) = LESS +compare (~0.123E1, 0.3141592653589793E1) = LESS +compareReal (~0.123E1, 0.3141592653589793E1) = LESS +compare (~0.123E1, 0.2718281828459045E1) = LESS +compareReal (~0.123E1, 0.2718281828459045E1) = LESS +compare (~0.123E1, 0.123E1) = LESS +compareReal (~0.123E1, 0.123E1) = LESS +compare (~0.123E1, 0.123) = LESS +compareReal (~0.123E1, 0.123) = LESS +compare (~0.123E1, 0.123E~2) = LESS +compareReal (~0.123E1, 0.123E~2) = LESS +compare (~0.123E1, 0.22250738585072014E~307) = LESS +compareReal (~0.123E1, 0.22250738585072014E~307) = LESS +compare (~0.123E1, 0.11125369292536007E~307) = LESS +compareReal (~0.123E1, 0.11125369292536007E~307) = LESS +compare (~0.123E1, 0.5E~323) = LESS +compareReal (~0.123E1, 0.5E~323) = LESS +compare (~0.123E1, 0.0) = LESS +compareReal (~0.123E1, 0.0) = LESS +compare (~0.123E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E1, ~0.17976931348623157E309) = GREATER +compare (~0.123E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E1, ~0.8988465674311579E308) = GREATER +compare (~0.123E1, ~0.123E4) = GREATER +compareReal (~0.123E1, ~0.123E4) = GREATER +compare (~0.123E1, ~0.123E2) = GREATER +compareReal (~0.123E1, ~0.123E2) = GREATER +compare (~0.123E1, ~0.3141592653589793E1) = GREATER +compareReal (~0.123E1, ~0.3141592653589793E1) = GREATER +compare (~0.123E1, ~0.2718281828459045E1) = GREATER +compareReal (~0.123E1, ~0.2718281828459045E1) = GREATER +compare (~0.123E1, ~0.123E1) = EQUAL +compareReal (~0.123E1, ~0.123E1) = EQUAL +compare (~0.123E1, ~0.123) = LESS +compareReal (~0.123E1, ~0.123) = LESS +compare (~0.123E1, ~0.123E~2) = LESS +compareReal (~0.123E1, ~0.123E~2) = LESS +compare (~0.123E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E1, ~0.22250738585072014E~307) = LESS +compare (~0.123E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E1, ~0.11125369292536007E~307) = LESS +compare (~0.123E1, ~0.5E~323) = LESS +compareReal (~0.123E1, ~0.5E~323) = LESS +compare (~0.123E1, ~0.0) = LESS +compareReal (~0.123E1, ~0.0) = LESS +compare (~0.123, 0.17976931348623157E309) = LESS +compareReal (~0.123, 0.17976931348623157E309) = LESS +compare (~0.123, 0.8988465674311579E308) = LESS +compareReal (~0.123, 0.8988465674311579E308) = LESS +compare (~0.123, 0.123E4) = LESS +compareReal (~0.123, 0.123E4) = LESS +compare (~0.123, 0.123E2) = LESS +compareReal (~0.123, 0.123E2) = LESS +compare (~0.123, 0.3141592653589793E1) = LESS +compareReal (~0.123, 0.3141592653589793E1) = LESS +compare (~0.123, 0.2718281828459045E1) = LESS +compareReal (~0.123, 0.2718281828459045E1) = LESS +compare (~0.123, 0.123E1) = LESS +compareReal (~0.123, 0.123E1) = LESS +compare (~0.123, 0.123) = LESS +compareReal (~0.123, 0.123) = LESS +compare (~0.123, 0.123E~2) = LESS +compareReal (~0.123, 0.123E~2) = LESS +compare (~0.123, 0.22250738585072014E~307) = LESS +compareReal (~0.123, 0.22250738585072014E~307) = LESS +compare (~0.123, 0.11125369292536007E~307) = LESS +compareReal (~0.123, 0.11125369292536007E~307) = LESS +compare (~0.123, 0.5E~323) = LESS +compareReal (~0.123, 0.5E~323) = LESS +compare (~0.123, 0.0) = LESS +compareReal (~0.123, 0.0) = LESS +compare (~0.123, ~0.17976931348623157E309) = GREATER +compareReal (~0.123, ~0.17976931348623157E309) = GREATER +compare (~0.123, ~0.8988465674311579E308) = GREATER +compareReal (~0.123, ~0.8988465674311579E308) = GREATER +compare (~0.123, ~0.123E4) = GREATER +compareReal (~0.123, ~0.123E4) = GREATER +compare (~0.123, ~0.123E2) = GREATER +compareReal (~0.123, ~0.123E2) = GREATER +compare (~0.123, ~0.3141592653589793E1) = GREATER +compareReal (~0.123, ~0.3141592653589793E1) = GREATER +compare (~0.123, ~0.2718281828459045E1) = GREATER +compareReal (~0.123, ~0.2718281828459045E1) = GREATER +compare (~0.123, ~0.123E1) = GREATER +compareReal (~0.123, ~0.123E1) = GREATER +compare (~0.123, ~0.123) = EQUAL +compareReal (~0.123, ~0.123) = EQUAL +compare (~0.123, ~0.123E~2) = LESS +compareReal (~0.123, ~0.123E~2) = LESS +compare (~0.123, ~0.22250738585072014E~307) = LESS +compareReal (~0.123, ~0.22250738585072014E~307) = LESS +compare (~0.123, ~0.11125369292536007E~307) = LESS +compareReal (~0.123, ~0.11125369292536007E~307) = LESS +compare (~0.123, ~0.5E~323) = LESS +compareReal (~0.123, ~0.5E~323) = LESS +compare (~0.123, ~0.0) = LESS +compareReal (~0.123, ~0.0) = LESS +compare (~0.123E~2, 0.17976931348623157E309) = LESS +compareReal (~0.123E~2, 0.17976931348623157E309) = LESS +compare (~0.123E~2, 0.8988465674311579E308) = LESS +compareReal (~0.123E~2, 0.8988465674311579E308) = LESS +compare (~0.123E~2, 0.123E4) = LESS +compareReal (~0.123E~2, 0.123E4) = LESS +compare (~0.123E~2, 0.123E2) = LESS +compareReal (~0.123E~2, 0.123E2) = LESS +compare (~0.123E~2, 0.3141592653589793E1) = LESS +compareReal (~0.123E~2, 0.3141592653589793E1) = LESS +compare (~0.123E~2, 0.2718281828459045E1) = LESS +compareReal (~0.123E~2, 0.2718281828459045E1) = LESS +compare (~0.123E~2, 0.123E1) = LESS +compareReal (~0.123E~2, 0.123E1) = LESS +compare (~0.123E~2, 0.123) = LESS +compareReal (~0.123E~2, 0.123) = LESS +compare (~0.123E~2, 0.123E~2) = LESS +compareReal (~0.123E~2, 0.123E~2) = LESS +compare (~0.123E~2, 0.22250738585072014E~307) = LESS +compareReal (~0.123E~2, 0.22250738585072014E~307) = LESS +compare (~0.123E~2, 0.11125369292536007E~307) = LESS +compareReal (~0.123E~2, 0.11125369292536007E~307) = LESS +compare (~0.123E~2, 0.5E~323) = LESS +compareReal (~0.123E~2, 0.5E~323) = LESS +compare (~0.123E~2, 0.0) = LESS +compareReal (~0.123E~2, 0.0) = LESS +compare (~0.123E~2, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E~2, ~0.17976931348623157E309) = GREATER +compare (~0.123E~2, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E~2, ~0.8988465674311579E308) = GREATER +compare (~0.123E~2, ~0.123E4) = GREATER +compareReal (~0.123E~2, ~0.123E4) = GREATER +compare (~0.123E~2, ~0.123E2) = GREATER +compareReal (~0.123E~2, ~0.123E2) = GREATER +compare (~0.123E~2, ~0.3141592653589793E1) = GREATER +compareReal (~0.123E~2, ~0.3141592653589793E1) = GREATER +compare (~0.123E~2, ~0.2718281828459045E1) = GREATER +compareReal (~0.123E~2, ~0.2718281828459045E1) = GREATER +compare (~0.123E~2, ~0.123E1) = GREATER +compareReal (~0.123E~2, ~0.123E1) = GREATER +compare (~0.123E~2, ~0.123) = GREATER +compareReal (~0.123E~2, ~0.123) = GREATER +compare (~0.123E~2, ~0.123E~2) = EQUAL +compareReal (~0.123E~2, ~0.123E~2) = EQUAL +compare (~0.123E~2, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E~2, ~0.22250738585072014E~307) = LESS +compare (~0.123E~2, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E~2, ~0.11125369292536007E~307) = LESS +compare (~0.123E~2, ~0.5E~323) = LESS +compareReal (~0.123E~2, ~0.5E~323) = LESS +compare (~0.123E~2, ~0.0) = LESS +compareReal (~0.123E~2, ~0.0) = LESS +compare (~0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compareReal (~0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compare (~0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compareReal (~0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compare (~0.22250738585072014E~307, 0.123E4) = LESS +compareReal (~0.22250738585072014E~307, 0.123E4) = LESS +compare (~0.22250738585072014E~307, 0.123E2) = LESS +compareReal (~0.22250738585072014E~307, 0.123E2) = LESS +compare (~0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compareReal (~0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compare (~0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compareReal (~0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compare (~0.22250738585072014E~307, 0.123E1) = LESS +compareReal (~0.22250738585072014E~307, 0.123E1) = LESS +compare (~0.22250738585072014E~307, 0.123) = LESS +compareReal (~0.22250738585072014E~307, 0.123) = LESS +compare (~0.22250738585072014E~307, 0.123E~2) = LESS +compareReal (~0.22250738585072014E~307, 0.123E~2) = LESS +compare (~0.22250738585072014E~307, 0.22250738585072014E~307) = LESS +compareReal (~0.22250738585072014E~307, 0.22250738585072014E~307) = LESS +compare (~0.22250738585072014E~307, 0.11125369292536007E~307) = LESS +compareReal (~0.22250738585072014E~307, 0.11125369292536007E~307) = LESS +compare (~0.22250738585072014E~307, 0.5E~323) = LESS +compareReal (~0.22250738585072014E~307, 0.5E~323) = LESS +compare (~0.22250738585072014E~307, 0.0) = LESS +compareReal (~0.22250738585072014E~307, 0.0) = LESS +compare (~0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compareReal (~0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compare (~0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compareReal (~0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compare (~0.22250738585072014E~307, ~0.123E4) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E4) = GREATER +compare (~0.22250738585072014E~307, ~0.123E2) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E2) = GREATER +compare (~0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compare (~0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compare (~0.22250738585072014E~307, ~0.123E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E1) = GREATER +compare (~0.22250738585072014E~307, ~0.123) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123) = GREATER +compare (~0.22250738585072014E~307, ~0.123E~2) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E~2) = GREATER +compare (~0.22250738585072014E~307, ~0.22250738585072014E~307) = EQUAL +compareReal (~0.22250738585072014E~307, ~0.22250738585072014E~307) = EQUAL +compare (~0.22250738585072014E~307, ~0.11125369292536007E~307) = LESS +compareReal (~0.22250738585072014E~307, ~0.11125369292536007E~307) = LESS +compare (~0.22250738585072014E~307, ~0.5E~323) = LESS +compareReal (~0.22250738585072014E~307, ~0.5E~323) = LESS +compare (~0.22250738585072014E~307, ~0.0) = LESS +compareReal (~0.22250738585072014E~307, ~0.0) = LESS +compare (~0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compareReal (~0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compare (~0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compareReal (~0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compare (~0.11125369292536007E~307, 0.123E4) = LESS +compareReal (~0.11125369292536007E~307, 0.123E4) = LESS +compare (~0.11125369292536007E~307, 0.123E2) = LESS +compareReal (~0.11125369292536007E~307, 0.123E2) = LESS +compare (~0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compareReal (~0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compare (~0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compareReal (~0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compare (~0.11125369292536007E~307, 0.123E1) = LESS +compareReal (~0.11125369292536007E~307, 0.123E1) = LESS +compare (~0.11125369292536007E~307, 0.123) = LESS +compareReal (~0.11125369292536007E~307, 0.123) = LESS +compare (~0.11125369292536007E~307, 0.123E~2) = LESS +compareReal (~0.11125369292536007E~307, 0.123E~2) = LESS +compare (~0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compareReal (~0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compare (~0.11125369292536007E~307, 0.11125369292536007E~307) = LESS +compareReal (~0.11125369292536007E~307, 0.11125369292536007E~307) = LESS +compare (~0.11125369292536007E~307, 0.5E~323) = LESS +compareReal (~0.11125369292536007E~307, 0.5E~323) = LESS +compare (~0.11125369292536007E~307, 0.0) = LESS +compareReal (~0.11125369292536007E~307, 0.0) = LESS +compare (~0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compareReal (~0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compare (~0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compareReal (~0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compare (~0.11125369292536007E~307, ~0.123E4) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E4) = GREATER +compare (~0.11125369292536007E~307, ~0.123E2) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E2) = GREATER +compare (~0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compare (~0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compare (~0.11125369292536007E~307, ~0.123E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E1) = GREATER +compare (~0.11125369292536007E~307, ~0.123) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123) = GREATER +compare (~0.11125369292536007E~307, ~0.123E~2) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E~2) = GREATER +compare (~0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compareReal (~0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compare (~0.11125369292536007E~307, ~0.11125369292536007E~307) = EQUAL +compareReal (~0.11125369292536007E~307, ~0.11125369292536007E~307) = EQUAL +compare (~0.11125369292536007E~307, ~0.5E~323) = LESS +compareReal (~0.11125369292536007E~307, ~0.5E~323) = LESS +compare (~0.11125369292536007E~307, ~0.0) = LESS +compareReal (~0.11125369292536007E~307, ~0.0) = LESS +compare (~0.5E~323, 0.17976931348623157E309) = LESS +compareReal (~0.5E~323, 0.17976931348623157E309) = LESS +compare (~0.5E~323, 0.8988465674311579E308) = LESS +compareReal (~0.5E~323, 0.8988465674311579E308) = LESS +compare (~0.5E~323, 0.123E4) = LESS +compareReal (~0.5E~323, 0.123E4) = LESS +compare (~0.5E~323, 0.123E2) = LESS +compareReal (~0.5E~323, 0.123E2) = LESS +compare (~0.5E~323, 0.3141592653589793E1) = LESS +compareReal (~0.5E~323, 0.3141592653589793E1) = LESS +compare (~0.5E~323, 0.2718281828459045E1) = LESS +compareReal (~0.5E~323, 0.2718281828459045E1) = LESS +compare (~0.5E~323, 0.123E1) = LESS +compareReal (~0.5E~323, 0.123E1) = LESS +compare (~0.5E~323, 0.123) = LESS +compareReal (~0.5E~323, 0.123) = LESS +compare (~0.5E~323, 0.123E~2) = LESS +compareReal (~0.5E~323, 0.123E~2) = LESS +compare (~0.5E~323, 0.22250738585072014E~307) = LESS +compareReal (~0.5E~323, 0.22250738585072014E~307) = LESS +compare (~0.5E~323, 0.11125369292536007E~307) = LESS +compareReal (~0.5E~323, 0.11125369292536007E~307) = LESS +compare (~0.5E~323, 0.5E~323) = LESS +compareReal (~0.5E~323, 0.5E~323) = LESS +compare (~0.5E~323, 0.0) = LESS +compareReal (~0.5E~323, 0.0) = LESS +compare (~0.5E~323, ~0.17976931348623157E309) = GREATER +compareReal (~0.5E~323, ~0.17976931348623157E309) = GREATER +compare (~0.5E~323, ~0.8988465674311579E308) = GREATER +compareReal (~0.5E~323, ~0.8988465674311579E308) = GREATER +compare (~0.5E~323, ~0.123E4) = GREATER +compareReal (~0.5E~323, ~0.123E4) = GREATER +compare (~0.5E~323, ~0.123E2) = GREATER +compareReal (~0.5E~323, ~0.123E2) = GREATER +compare (~0.5E~323, ~0.3141592653589793E1) = GREATER +compareReal (~0.5E~323, ~0.3141592653589793E1) = GREATER +compare (~0.5E~323, ~0.2718281828459045E1) = GREATER +compareReal (~0.5E~323, ~0.2718281828459045E1) = GREATER +compare (~0.5E~323, ~0.123E1) = GREATER +compareReal (~0.5E~323, ~0.123E1) = GREATER +compare (~0.5E~323, ~0.123) = GREATER +compareReal (~0.5E~323, ~0.123) = GREATER +compare (~0.5E~323, ~0.123E~2) = GREATER +compareReal (~0.5E~323, ~0.123E~2) = GREATER +compare (~0.5E~323, ~0.22250738585072014E~307) = GREATER +compareReal (~0.5E~323, ~0.22250738585072014E~307) = GREATER +compare (~0.5E~323, ~0.11125369292536007E~307) = GREATER +compareReal (~0.5E~323, ~0.11125369292536007E~307) = GREATER +compare (~0.5E~323, ~0.5E~323) = EQUAL +compareReal (~0.5E~323, ~0.5E~323) = EQUAL +compare (~0.5E~323, ~0.0) = LESS +compareReal (~0.5E~323, ~0.0) = LESS +compare (~0.0, 0.17976931348623157E309) = LESS +compareReal (~0.0, 0.17976931348623157E309) = LESS +compare (~0.0, 0.8988465674311579E308) = LESS +compareReal (~0.0, 0.8988465674311579E308) = LESS +compare (~0.0, 0.123E4) = LESS +compareReal (~0.0, 0.123E4) = LESS +compare (~0.0, 0.123E2) = LESS +compareReal (~0.0, 0.123E2) = LESS +compare (~0.0, 0.3141592653589793E1) = LESS +compareReal (~0.0, 0.3141592653589793E1) = LESS +compare (~0.0, 0.2718281828459045E1) = LESS +compareReal (~0.0, 0.2718281828459045E1) = LESS +compare (~0.0, 0.123E1) = LESS +compareReal (~0.0, 0.123E1) = LESS +compare (~0.0, 0.123) = LESS +compareReal (~0.0, 0.123) = LESS +compare (~0.0, 0.123E~2) = LESS +compareReal (~0.0, 0.123E~2) = LESS +compare (~0.0, 0.22250738585072014E~307) = LESS +compareReal (~0.0, 0.22250738585072014E~307) = LESS +compare (~0.0, 0.11125369292536007E~307) = LESS +compareReal (~0.0, 0.11125369292536007E~307) = LESS +compare (~0.0, 0.5E~323) = LESS +compareReal (~0.0, 0.5E~323) = LESS +compare (~0.0, 0.0) = EQUAL +compareReal (~0.0, 0.0) = EQUAL +compare (~0.0, ~0.17976931348623157E309) = GREATER +compareReal (~0.0, ~0.17976931348623157E309) = GREATER +compare (~0.0, ~0.8988465674311579E308) = GREATER +compareReal (~0.0, ~0.8988465674311579E308) = GREATER +compare (~0.0, ~0.123E4) = GREATER +compareReal (~0.0, ~0.123E4) = GREATER +compare (~0.0, ~0.123E2) = GREATER +compareReal (~0.0, ~0.123E2) = GREATER +compare (~0.0, ~0.3141592653589793E1) = GREATER +compareReal (~0.0, ~0.3141592653589793E1) = GREATER +compare (~0.0, ~0.2718281828459045E1) = GREATER +compareReal (~0.0, ~0.2718281828459045E1) = GREATER +compare (~0.0, ~0.123E1) = GREATER +compareReal (~0.0, ~0.123E1) = GREATER +compare (~0.0, ~0.123) = GREATER +compareReal (~0.0, ~0.123) = GREATER +compare (~0.0, ~0.123E~2) = GREATER +compareReal (~0.0, ~0.123E~2) = GREATER +compare (~0.0, ~0.22250738585072014E~307) = GREATER +compareReal (~0.0, ~0.22250738585072014E~307) = GREATER +compare (~0.0, ~0.11125369292536007E~307) = GREATER +compareReal (~0.0, ~0.11125369292536007E~307) = GREATER +compare (~0.0, ~0.5E~323) = GREATER +compareReal (~0.0, ~0.5E~323) = GREATER +compare (~0.0, ~0.0) = EQUAL +compareReal (~0.0, ~0.0) = EQUAL Testing abs diff -Nru mlton-20130715/regression/real.amd64-freebsd.ok mlton-20210117+dfsg/regression/real.amd64-freebsd.ok --- mlton-20130715/regression/real.amd64-freebsd.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.amd64-freebsd.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,17876 +0,0 @@ - -Testing Real32 - -Testing fmt -0.34028235E39 -3.402823E38 -340282346638528859811704183484516925440.000000 -3.40282346639E38 -3E38 -340282346638528859811704183484516925440 -3E38 -3.4028234664E38 -340282346638528859811704183484516925440.0000000000 -3.402823466E38 -0.17014117E39 -1.701412E38 -170141173319264429905852091742258462720.000000 -1.70141173319E38 -2E38 -170141173319264429905852091742258462720 -2E38 -1.7014117332E38 -170141173319264429905852091742258462720.0000000000 -1.701411733E38 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3000001907 -1E1 -12 -10 -1.2300000191E1 -12.3000001907 -12.30000019 -0.31415927E1 -3.141593E0 -3.141593 -3.14159274101 -3E0 -3 -3 -3.1415927410E0 -3.1415927410 -3.141592741 -0.27182817E1 -2.718282E0 -2.718282 -2.71828174591 -3E0 -3 -3 -2.7182817459E0 -2.7182817459 -2.718281746 -0.123E1 -1.230000E0 -1.230000 -1.23000001907 -1E0 -1 -1 -1.2300000191E0 -1.2300000191 -1.230000019 -0.123 -1.230000E~1 -0.123000 -0.123000003397 -1E~1 -0 -0.1 -1.2300000340E~1 -0.1230000034 -0.1230000034 -0.123E~2 -1.230000E~3 -0.001230 -0.0012300000526 -1E~3 -0 -1E~3 -1.2300000526E~3 -0.0012300001 -0.001230000053 -0.11754944E~37 -1.175494E~38 -0.000000 -1.17549435082E~38 -1E~38 -0 -1E~38 -1.1754943508E~38 -0.0000000000 -1.175494351E~38 -0.5877472E~38 -5.877472E~39 -0.000000 -5.87747175411E~39 -6E~39 -0 -6E~39 -5.8774717541E~39 -0.0000000000 -5.877471754E~39 -0.1E~44 -1.401298E~45 -0.000000 -1.40129846432E~45 -1E~45 -0 -1E~45 -1.4012984643E~45 -0.0000000000 -1.401298464E~45 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.34028235E39 -~3.402823E38 -~340282346638528859811704183484516925440.000000 -~3.40282346639E38 -~3E38 -~340282346638528859811704183484516925440 -~3E38 -~3.4028234664E38 -~340282346638528859811704183484516925440.0000000000 -~3.402823466E38 -~0.17014117E39 -~1.701412E38 -~170141173319264429905852091742258462720.000000 -~1.70141173319E38 -~2E38 -~170141173319264429905852091742258462720 -~2E38 -~1.7014117332E38 -~170141173319264429905852091742258462720.0000000000 -~1.701411733E38 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3000001907 -~1E1 -~12 -~10 -~1.2300000191E1 -~12.3000001907 -~12.30000019 -~0.31415927E1 -~3.141593E0 -~3.141593 -~3.14159274101 -~3E0 -~3 -~3 -~3.1415927410E0 -~3.1415927410 -~3.141592741 -~0.27182817E1 -~2.718282E0 -~2.718282 -~2.71828174591 -~3E0 -~3 -~3 -~2.7182817459E0 -~2.7182817459 -~2.718281746 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23000001907 -~1E0 -~1 -~1 -~1.2300000191E0 -~1.2300000191 -~1.230000019 -~0.123 -~1.230000E~1 -~0.123000 -~0.123000003397 -~1E~1 -~0 -~0.1 -~1.2300000340E~1 -~0.1230000034 -~0.1230000034 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.0012300000526 -~1E~3 -~0 -~1E~3 -~1.2300000526E~3 -~0.0012300001 -~0.001230000053 -~0.11754944E~37 -~1.175494E~38 -~0.000000 -~1.17549435082E~38 -~1E~38 -~0 -~1E~38 -~1.1754943508E~38 -~0.0000000000 -~1.175494351E~38 -~0.5877472E~38 -~5.877472E~39 -~0.000000 -~5.87747175411E~39 -~6E~39 -~0 -~6E~39 -~5.8774717541E~39 -~0.0000000000 -~5.877471754E~39 -~0.1E~44 -~1.401298E~45 -~0.000000 -~1.40129846432E~45 -~1E~45 -~0 -~1E~45 -~1.4012984643E~45 -~0.0000000000 -~1.401298464E~45 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.31415927E1 0.31415927E1 -0.27182817E1 0.27182817E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.11754944E~37 0.11754944E~37 -0.5877472E~38 0.5877472E~38 -0.1E~44 0.1E~44 -0.0 0.0 -~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.31415927E1 ~0.31415927E1 -~0.27182817E1 ~0.27182817E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.11754944E~37 ~0.11754944E~37 -~0.5877472E~38 ~0.5877472E~38 -~0.1E~44 ~0.1E~44 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.34028235E39 normal - isFinite = true isNan = false isNormal = true -0.17014117E39 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.31415927E1 normal - isFinite = true isNan = false isNormal = true -0.27182817E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.34028235E39 normal - isFinite = true isNan = false isNormal = true -~0.17014117E39 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.31415927E1 normal - isFinite = true isNan = false isNormal = true -~0.27182817E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -~0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -~0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -3.40282346639E38 -3.40282346639E38 -true -1.40129846432E~45 -1.40129846432E~45 -true -1.17549435082E~38 -1.17549435082E~38 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.34028235E39 340282346638528859811704183484516925440 0.34028235E39 -0.17014117E39 170141173319264429905852091742258462720 0.17014117E39 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.31415927E1 3 0.3E1 -0.27182817E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.11754944E~37 0 0.0 -0.5877472E~38 0 0.0 -0.1E~44 0 0.0 -0.0 0 0.0 -~0.34028235E39 ~340282346638528859811704183484516925440 ~0.34028235E39 -~0.17014117E39 ~170141173319264429905852091742258462720 ~0.17014117E39 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.31415927E1 ~4 ~0.4E1 -~0.27182817E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.11754944E~37 ~1 ~0.1E1 -~0.5877472E~38 ~1 ~0.1E1 -~0.1E~44 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25 0 -zero ~0.25 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.5 0 -zero ~0.5 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.75 0 -zero ~0.75 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195518 -1.144729853 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -1 -0.4342944622 -0.4107813537 -7.544136047 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342376947 -1.856761098 -0.2070141882 -0.9424888492 -1.564468503 -1.109053612 -2.819815874 -0.8425793648 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240715 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf -0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195518 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136047 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342376947 -1.856761098 -nan -nan -~0.9424888492 -~1.564468503 -nan -~2.819815874 -~0.8425793648 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240715 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 -~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 -~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 -~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 -~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.5877472E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754942E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 -~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 -~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.5877472E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754942E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.5877472E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.5877472E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754942E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754942E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.5877472E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754942E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.5877472E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754942E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.5877472E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.5877472E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754942E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754942E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.17976931348623157E309 = 0.9999999999999999 * 2^1024 - = 0.17976931348623157E309 -0.8988465674311579E308 = 0.9999999999999999 * 2^1023 - = 0.8988465674311579E308 -0.123E4 = 0.6005859375 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.3141592653589793E1 = 0.7853981633974483 * 2^2 - = 0.3141592653589793E1 -0.2718281828459045E1 = 0.6795704571147613 * 2^2 - = 0.2718281828459045E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.22250738585072014E~307 = 0.5 * 2^~1021 - = 0.22250738585072014E~307 -0.0 = 0.0 * 2^0 - = 0.0 -~0.17976931348623157E309 = ~0.9999999999999999 * 2^1024 - = ~0.17976931348623157E309 -~0.8988465674311579E308 = ~0.9999999999999999 * 2^1023 - = ~0.8988465674311579E308 -~0.123E4 = ~0.6005859375 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.3141592653589793E1 = ~0.7853981633974483 * 2^2 - = ~0.3141592653589793E1 -~0.2718281828459045E1 = ~0.6795704571147613 * 2^2 - = ~0.2718281828459045E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.22250738585072014E~307 = ~0.5 * 2^~1021 - = ~0.22250738585072014E~307 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large diff -Nru mlton-20130715/regression/real.amd64-linux.ok mlton-20210117+dfsg/regression/real.amd64-linux.ok --- mlton-20130715/regression/real.amd64-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.amd64-linux.ok 2021-12-28 17:19:36.000000000 +0000 @@ -616,17212 +616,25220 @@ Testing max, min -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195518 -1.144729853 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -1 -0.4342944622 -0.4107813537 -7.544136047 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342376947 -1.856761098 -0.2070141882 -0.9424888492 -1.564468503 -1.109053612 -2.819815874 -0.8425793648 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240715 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 +Testing Real.{~,*,+,-,/,nextAfter,rem} +~ (0.34028235E39) = ~0.34028235E39 +~ (0.17014117E39) = ~0.17014117E39 +~ (0.123E4) = ~0.123E4 +~ (0.123E2) = ~0.123E2 +~ (0.31415927E1) = ~0.31415927E1 +~ (0.27182817E1) = ~0.27182817E1 +~ (0.123E1) = ~0.123E1 +~ (0.123) = ~0.123 +~ (0.123E~2) = ~0.123E~2 +~ (0.11754944E~37) = ~0.11754944E~37 +~ (0.5877472E~38) = ~0.5877472E~38 +~ (0.1E~44) = ~0.1E~44 +~ (0.0) = ~0.0 +~ (~0.34028235E39) = 0.34028235E39 +~ (~0.17014117E39) = 0.17014117E39 +~ (~0.123E4) = 0.123E4 +~ (~0.123E2) = 0.123E2 +~ (~0.31415927E1) = 0.31415927E1 +~ (~0.27182817E1) = 0.27182817E1 +~ (~0.123E1) = 0.123E1 +~ (~0.123) = 0.123 +~ (~0.123E~2) = 0.123E~2 +~ (~0.11754944E~37) = 0.11754944E~37 +~ (~0.5877472E~38) = 0.5877472E~38 +~ (~0.1E~44) = 0.1E~44 +~ (~0.0) = 0.0 +~ (inf) = ~inf +~ (~inf) = inf +~ (nan) = nan +~ (inf) = ~inf +* (0.34028235E39, 0.34028235E39) = inf ++ (0.34028235E39, 0.34028235E39) = inf +- (0.34028235E39, 0.34028235E39) = 0.0 +/ (0.34028235E39, 0.34028235E39) = 0.1E1 +nextAfter (0.34028235E39, 0.34028235E39) = 0.34028235E39 +rem (0.34028235E39, 0.34028235E39) = 0.0 +* (0.34028235E39, 0.17014117E39) = inf ++ (0.34028235E39, 0.17014117E39) = inf +- (0.34028235E39, 0.17014117E39) = 0.17014117E39 +/ (0.34028235E39, 0.17014117E39) = 0.2E1 +nextAfter (0.34028235E39, 0.17014117E39) = 0.34028233E39 +rem (0.34028235E39, 0.17014117E39) = 0.0 +* (0.34028235E39, 0.123E4) = inf ++ (0.34028235E39, 0.123E4) = 0.34028235E39 +- (0.34028235E39, 0.123E4) = 0.34028235E39 +/ (0.34028235E39, 0.123E4) = 0.2766523E36 +nextAfter (0.34028235E39, 0.123E4) = 0.34028233E39 +rem (0.34028235E39, 0.123E4) = 0.2028241E32 +* (0.34028235E39, 0.123E2) = inf ++ (0.34028235E39, 0.123E2) = 0.34028235E39 +- (0.34028235E39, 0.123E2) = 0.34028235E39 +/ (0.34028235E39, 0.123E2) = 0.27665232E38 +nextAfter (0.34028235E39, 0.123E2) = 0.34028233E39 +rem (0.34028235E39, 0.123E2) = ~inf +* (0.34028235E39, 0.31415927E1) = inf ++ (0.34028235E39, 0.31415927E1) = 0.34028235E39 +- (0.34028235E39, 0.31415927E1) = 0.34028235E39 +/ (0.34028235E39, 0.31415927E1) = 0.10831523E39 +nextAfter (0.34028235E39, 0.31415927E1) = 0.34028233E39 +rem (0.34028235E39, 0.31415927E1) = 0.2028241E32 +* (0.34028235E39, 0.27182817E1) = inf ++ (0.34028235E39, 0.27182817E1) = 0.34028235E39 +- (0.34028235E39, 0.27182817E1) = 0.34028235E39 +/ (0.34028235E39, 0.27182817E1) = 0.12518288E39 +nextAfter (0.34028235E39, 0.27182817E1) = 0.34028233E39 +rem (0.34028235E39, 0.27182817E1) = 0.0 +* (0.34028235E39, 0.123E1) = inf ++ (0.34028235E39, 0.123E1) = 0.34028235E39 +- (0.34028235E39, 0.123E1) = 0.34028235E39 +/ (0.34028235E39, 0.123E1) = 0.27665231E39 +nextAfter (0.34028235E39, 0.123E1) = 0.34028233E39 +rem (0.34028235E39, 0.123E1) = 0.0 +* (0.34028235E39, 0.123) = 0.4185473E38 ++ (0.34028235E39, 0.123) = 0.34028235E39 +- (0.34028235E39, 0.123) = 0.34028235E39 +/ (0.34028235E39, 0.123) = inf +nextAfter (0.34028235E39, 0.123) = 0.34028233E39 +rem (0.34028235E39, 0.123) = ~inf +* (0.34028235E39, 0.123E~2) = 0.4185473E36 ++ (0.34028235E39, 0.123E~2) = 0.34028235E39 +- (0.34028235E39, 0.123E~2) = 0.34028235E39 +/ (0.34028235E39, 0.123E~2) = inf +nextAfter (0.34028235E39, 0.123E~2) = 0.34028233E39 +rem (0.34028235E39, 0.123E~2) = ~inf +* (0.34028235E39, 0.11754944E~37) = 0.39999998E1 ++ (0.34028235E39, 0.11754944E~37) = 0.34028235E39 +- (0.34028235E39, 0.11754944E~37) = 0.34028235E39 +/ (0.34028235E39, 0.11754944E~37) = inf +nextAfter (0.34028235E39, 0.11754944E~37) = 0.34028233E39 +rem (0.34028235E39, 0.11754944E~37) = ~inf +* (0.34028235E39, 0.5877472E~38) = 0.19999999E1 ++ (0.34028235E39, 0.5877472E~38) = 0.34028235E39 +- (0.34028235E39, 0.5877472E~38) = 0.34028235E39 +/ (0.34028235E39, 0.5877472E~38) = inf +nextAfter (0.34028235E39, 0.5877472E~38) = 0.34028233E39 +rem (0.34028235E39, 0.5877472E~38) = ~inf +* (0.34028235E39, 0.1E~44) = 0.47683713E~6 ++ (0.34028235E39, 0.1E~44) = 0.34028235E39 +- (0.34028235E39, 0.1E~44) = 0.34028235E39 +/ (0.34028235E39, 0.1E~44) = inf +nextAfter (0.34028235E39, 0.1E~44) = 0.34028233E39 +rem (0.34028235E39, 0.1E~44) = ~inf +* (0.34028235E39, 0.0) = 0.0 ++ (0.34028235E39, 0.0) = 0.34028235E39 +- (0.34028235E39, 0.0) = 0.34028235E39 +/ (0.34028235E39, 0.0) = inf +nextAfter (0.34028235E39, 0.0) = 0.34028233E39 +rem (0.34028235E39, 0.0) = nan +* (0.34028235E39, ~0.34028235E39) = ~inf ++ (0.34028235E39, ~0.34028235E39) = 0.0 +- (0.34028235E39, ~0.34028235E39) = inf +/ (0.34028235E39, ~0.34028235E39) = ~0.1E1 +nextAfter (0.34028235E39, ~0.34028235E39) = 0.34028233E39 +rem (0.34028235E39, ~0.34028235E39) = 0.0 +* (0.34028235E39, ~0.17014117E39) = ~inf ++ (0.34028235E39, ~0.17014117E39) = 0.17014117E39 +- (0.34028235E39, ~0.17014117E39) = inf +/ (0.34028235E39, ~0.17014117E39) = ~0.2E1 +nextAfter (0.34028235E39, ~0.17014117E39) = 0.34028233E39 +rem (0.34028235E39, ~0.17014117E39) = 0.0 +* (0.34028235E39, ~0.123E4) = ~inf ++ (0.34028235E39, ~0.123E4) = 0.34028235E39 +- (0.34028235E39, ~0.123E4) = 0.34028235E39 +/ (0.34028235E39, ~0.123E4) = ~0.2766523E36 +nextAfter (0.34028235E39, ~0.123E4) = 0.34028233E39 +rem (0.34028235E39, ~0.123E4) = 0.2028241E32 +* (0.34028235E39, ~0.123E2) = ~inf ++ (0.34028235E39, ~0.123E2) = 0.34028235E39 +- (0.34028235E39, ~0.123E2) = 0.34028235E39 +/ (0.34028235E39, ~0.123E2) = ~0.27665232E38 +nextAfter (0.34028235E39, ~0.123E2) = 0.34028233E39 +rem (0.34028235E39, ~0.123E2) = ~inf +* (0.34028235E39, ~0.31415927E1) = ~inf ++ (0.34028235E39, ~0.31415927E1) = 0.34028235E39 +- (0.34028235E39, ~0.31415927E1) = 0.34028235E39 +/ (0.34028235E39, ~0.31415927E1) = ~0.10831523E39 +nextAfter (0.34028235E39, ~0.31415927E1) = 0.34028233E39 +rem (0.34028235E39, ~0.31415927E1) = 0.2028241E32 +* (0.34028235E39, ~0.27182817E1) = ~inf ++ (0.34028235E39, ~0.27182817E1) = 0.34028235E39 +- (0.34028235E39, ~0.27182817E1) = 0.34028235E39 +/ (0.34028235E39, ~0.27182817E1) = ~0.12518288E39 +nextAfter (0.34028235E39, ~0.27182817E1) = 0.34028233E39 +rem (0.34028235E39, ~0.27182817E1) = 0.0 +* (0.34028235E39, ~0.123E1) = ~inf ++ (0.34028235E39, ~0.123E1) = 0.34028235E39 +- (0.34028235E39, ~0.123E1) = 0.34028235E39 +/ (0.34028235E39, ~0.123E1) = ~0.27665231E39 +nextAfter (0.34028235E39, ~0.123E1) = 0.34028233E39 +rem (0.34028235E39, ~0.123E1) = 0.0 +* (0.34028235E39, ~0.123) = ~0.4185473E38 ++ (0.34028235E39, ~0.123) = 0.34028235E39 +- (0.34028235E39, ~0.123) = 0.34028235E39 +/ (0.34028235E39, ~0.123) = ~inf +nextAfter (0.34028235E39, ~0.123) = 0.34028233E39 +rem (0.34028235E39, ~0.123) = ~inf +* (0.34028235E39, ~0.123E~2) = ~0.4185473E36 ++ (0.34028235E39, ~0.123E~2) = 0.34028235E39 +- (0.34028235E39, ~0.123E~2) = 0.34028235E39 +/ (0.34028235E39, ~0.123E~2) = ~inf +nextAfter (0.34028235E39, ~0.123E~2) = 0.34028233E39 +rem (0.34028235E39, ~0.123E~2) = ~inf +* (0.34028235E39, ~0.11754944E~37) = ~0.39999998E1 ++ (0.34028235E39, ~0.11754944E~37) = 0.34028235E39 +- (0.34028235E39, ~0.11754944E~37) = 0.34028235E39 +/ (0.34028235E39, ~0.11754944E~37) = ~inf +nextAfter (0.34028235E39, ~0.11754944E~37) = 0.34028233E39 +rem (0.34028235E39, ~0.11754944E~37) = ~inf +* (0.34028235E39, ~0.5877472E~38) = ~0.19999999E1 ++ (0.34028235E39, ~0.5877472E~38) = 0.34028235E39 +- (0.34028235E39, ~0.5877472E~38) = 0.34028235E39 +/ (0.34028235E39, ~0.5877472E~38) = ~inf +nextAfter (0.34028235E39, ~0.5877472E~38) = 0.34028233E39 +rem (0.34028235E39, ~0.5877472E~38) = ~inf +* (0.34028235E39, ~0.1E~44) = ~0.47683713E~6 ++ (0.34028235E39, ~0.1E~44) = 0.34028235E39 +- (0.34028235E39, ~0.1E~44) = 0.34028235E39 +/ (0.34028235E39, ~0.1E~44) = ~inf +nextAfter (0.34028235E39, ~0.1E~44) = 0.34028233E39 +rem (0.34028235E39, ~0.1E~44) = ~inf +* (0.34028235E39, ~0.0) = ~0.0 ++ (0.34028235E39, ~0.0) = 0.34028235E39 +- (0.34028235E39, ~0.0) = 0.34028235E39 +/ (0.34028235E39, ~0.0) = ~inf +nextAfter (0.34028235E39, ~0.0) = 0.34028233E39 +rem (0.34028235E39, ~0.0) = nan +* (0.34028235E39, inf) = inf ++ (0.34028235E39, inf) = inf +- (0.34028235E39, inf) = ~inf +/ (0.34028235E39, inf) = 0.0 +nextAfter (0.34028235E39, inf) = inf +rem (0.34028235E39, inf) = 0.34028235E39 +* (0.34028235E39, ~inf) = ~inf ++ (0.34028235E39, ~inf) = ~inf +- (0.34028235E39, ~inf) = inf +/ (0.34028235E39, ~inf) = ~0.0 +nextAfter (0.34028235E39, ~inf) = 0.34028233E39 +rem (0.34028235E39, ~inf) = 0.34028235E39 +* (0.34028235E39, nan) = nan ++ (0.34028235E39, nan) = nan +- (0.34028235E39, nan) = nan +/ (0.34028235E39, nan) = nan +nextAfter (0.34028235E39, nan) = nan +rem (0.34028235E39, nan) = nan +* (0.34028235E39, inf) = inf ++ (0.34028235E39, inf) = inf +- (0.34028235E39, inf) = ~inf +/ (0.34028235E39, inf) = 0.0 +nextAfter (0.34028235E39, inf) = inf +rem (0.34028235E39, inf) = 0.34028235E39 +* (0.17014117E39, 0.34028235E39) = inf ++ (0.17014117E39, 0.34028235E39) = inf +- (0.17014117E39, 0.34028235E39) = ~0.17014117E39 +/ (0.17014117E39, 0.34028235E39) = 0.5 +nextAfter (0.17014117E39, 0.34028235E39) = 0.17014118E39 +rem (0.17014117E39, 0.34028235E39) = 0.17014117E39 +* (0.17014117E39, 0.17014117E39) = inf ++ (0.17014117E39, 0.17014117E39) = 0.34028235E39 +- (0.17014117E39, 0.17014117E39) = 0.0 +/ (0.17014117E39, 0.17014117E39) = 0.1E1 +nextAfter (0.17014117E39, 0.17014117E39) = 0.17014117E39 +rem (0.17014117E39, 0.17014117E39) = 0.0 +* (0.17014117E39, 0.123E4) = inf ++ (0.17014117E39, 0.123E4) = 0.17014117E39 +- (0.17014117E39, 0.123E4) = 0.17014117E39 +/ (0.17014117E39, 0.123E4) = 0.13832615E36 +nextAfter (0.17014117E39, 0.123E4) = 0.17014116E39 +rem (0.17014117E39, 0.123E4) = 0.10141205E32 +* (0.17014117E39, 0.123E2) = inf ++ (0.17014117E39, 0.123E2) = 0.17014117E39 +- (0.17014117E39, 0.123E2) = 0.17014117E39 +/ (0.17014117E39, 0.123E2) = 0.13832616E38 +nextAfter (0.17014117E39, 0.123E2) = 0.17014116E39 +rem (0.17014117E39, 0.123E2) = ~0.10141205E32 +* (0.17014117E39, 0.31415927E1) = inf ++ (0.17014117E39, 0.31415927E1) = 0.17014117E39 +- (0.17014117E39, 0.31415927E1) = 0.17014117E39 +/ (0.17014117E39, 0.31415927E1) = 0.54157613E38 +nextAfter (0.17014117E39, 0.31415927E1) = 0.17014116E39 +rem (0.17014117E39, 0.31415927E1) = 0.10141205E32 +* (0.17014117E39, 0.27182817E1) = inf ++ (0.17014117E39, 0.27182817E1) = 0.17014117E39 +- (0.17014117E39, 0.27182817E1) = 0.17014117E39 +/ (0.17014117E39, 0.27182817E1) = 0.6259144E38 +nextAfter (0.17014117E39, 0.27182817E1) = 0.17014116E39 +rem (0.17014117E39, 0.27182817E1) = 0.0 +* (0.17014117E39, 0.123E1) = 0.20927364E39 ++ (0.17014117E39, 0.123E1) = 0.17014117E39 +- (0.17014117E39, 0.123E1) = 0.17014117E39 +/ (0.17014117E39, 0.123E1) = 0.13832616E39 +nextAfter (0.17014117E39, 0.123E1) = 0.17014116E39 +rem (0.17014117E39, 0.123E1) = 0.0 +* (0.17014117E39, 0.123) = 0.20927365E38 ++ (0.17014117E39, 0.123) = 0.17014117E39 +- (0.17014117E39, 0.123) = 0.17014117E39 +/ (0.17014117E39, 0.123) = inf +nextAfter (0.17014117E39, 0.123) = 0.17014116E39 +rem (0.17014117E39, 0.123) = ~inf +* (0.17014117E39, 0.123E~2) = 0.20927364E36 ++ (0.17014117E39, 0.123E~2) = 0.17014117E39 +- (0.17014117E39, 0.123E~2) = 0.17014117E39 +/ (0.17014117E39, 0.123E~2) = inf +nextAfter (0.17014117E39, 0.123E~2) = 0.17014116E39 +rem (0.17014117E39, 0.123E~2) = ~inf +* (0.17014117E39, 0.11754944E~37) = 0.19999999E1 ++ (0.17014117E39, 0.11754944E~37) = 0.17014117E39 +- (0.17014117E39, 0.11754944E~37) = 0.17014117E39 +/ (0.17014117E39, 0.11754944E~37) = inf +nextAfter (0.17014117E39, 0.11754944E~37) = 0.17014116E39 +rem (0.17014117E39, 0.11754944E~37) = ~inf +* (0.17014117E39, 0.5877472E~38) = 0.99999994 ++ (0.17014117E39, 0.5877472E~38) = 0.17014117E39 +- (0.17014117E39, 0.5877472E~38) = 0.17014117E39 +/ (0.17014117E39, 0.5877472E~38) = inf +nextAfter (0.17014117E39, 0.5877472E~38) = 0.17014116E39 +rem (0.17014117E39, 0.5877472E~38) = ~inf +* (0.17014117E39, 0.1E~44) = 0.23841856E~6 ++ (0.17014117E39, 0.1E~44) = 0.17014117E39 +- (0.17014117E39, 0.1E~44) = 0.17014117E39 +/ (0.17014117E39, 0.1E~44) = inf +nextAfter (0.17014117E39, 0.1E~44) = 0.17014116E39 +rem (0.17014117E39, 0.1E~44) = ~inf +* (0.17014117E39, 0.0) = 0.0 ++ (0.17014117E39, 0.0) = 0.17014117E39 +- (0.17014117E39, 0.0) = 0.17014117E39 +/ (0.17014117E39, 0.0) = inf +nextAfter (0.17014117E39, 0.0) = 0.17014116E39 +rem (0.17014117E39, 0.0) = nan +* (0.17014117E39, ~0.34028235E39) = ~inf ++ (0.17014117E39, ~0.34028235E39) = ~0.17014117E39 +- (0.17014117E39, ~0.34028235E39) = inf +/ (0.17014117E39, ~0.34028235E39) = ~0.5 +nextAfter (0.17014117E39, ~0.34028235E39) = 0.17014116E39 +rem (0.17014117E39, ~0.34028235E39) = 0.17014117E39 +* (0.17014117E39, ~0.17014117E39) = ~inf ++ (0.17014117E39, ~0.17014117E39) = 0.0 +- (0.17014117E39, ~0.17014117E39) = 0.34028235E39 +/ (0.17014117E39, ~0.17014117E39) = ~0.1E1 +nextAfter (0.17014117E39, ~0.17014117E39) = 0.17014116E39 +rem (0.17014117E39, ~0.17014117E39) = 0.0 +* (0.17014117E39, ~0.123E4) = ~inf ++ (0.17014117E39, ~0.123E4) = 0.17014117E39 +- (0.17014117E39, ~0.123E4) = 0.17014117E39 +/ (0.17014117E39, ~0.123E4) = ~0.13832615E36 +nextAfter (0.17014117E39, ~0.123E4) = 0.17014116E39 +rem (0.17014117E39, ~0.123E4) = 0.10141205E32 +* (0.17014117E39, ~0.123E2) = ~inf ++ (0.17014117E39, ~0.123E2) = 0.17014117E39 +- (0.17014117E39, ~0.123E2) = 0.17014117E39 +/ (0.17014117E39, ~0.123E2) = ~0.13832616E38 +nextAfter (0.17014117E39, ~0.123E2) = 0.17014116E39 +rem (0.17014117E39, ~0.123E2) = ~0.10141205E32 +* (0.17014117E39, ~0.31415927E1) = ~inf ++ (0.17014117E39, ~0.31415927E1) = 0.17014117E39 +- (0.17014117E39, ~0.31415927E1) = 0.17014117E39 +/ (0.17014117E39, ~0.31415927E1) = ~0.54157613E38 +nextAfter (0.17014117E39, ~0.31415927E1) = 0.17014116E39 +rem (0.17014117E39, ~0.31415927E1) = 0.10141205E32 +* (0.17014117E39, ~0.27182817E1) = ~inf ++ (0.17014117E39, ~0.27182817E1) = 0.17014117E39 +- (0.17014117E39, ~0.27182817E1) = 0.17014117E39 +/ (0.17014117E39, ~0.27182817E1) = ~0.6259144E38 +nextAfter (0.17014117E39, ~0.27182817E1) = 0.17014116E39 +rem (0.17014117E39, ~0.27182817E1) = 0.0 +* (0.17014117E39, ~0.123E1) = ~0.20927364E39 ++ (0.17014117E39, ~0.123E1) = 0.17014117E39 +- (0.17014117E39, ~0.123E1) = 0.17014117E39 +/ (0.17014117E39, ~0.123E1) = ~0.13832616E39 +nextAfter (0.17014117E39, ~0.123E1) = 0.17014116E39 +rem (0.17014117E39, ~0.123E1) = 0.0 +* (0.17014117E39, ~0.123) = ~0.20927365E38 ++ (0.17014117E39, ~0.123) = 0.17014117E39 +- (0.17014117E39, ~0.123) = 0.17014117E39 +/ (0.17014117E39, ~0.123) = ~inf +nextAfter (0.17014117E39, ~0.123) = 0.17014116E39 +rem (0.17014117E39, ~0.123) = ~inf +* (0.17014117E39, ~0.123E~2) = ~0.20927364E36 ++ (0.17014117E39, ~0.123E~2) = 0.17014117E39 +- (0.17014117E39, ~0.123E~2) = 0.17014117E39 +/ (0.17014117E39, ~0.123E~2) = ~inf +nextAfter (0.17014117E39, ~0.123E~2) = 0.17014116E39 +rem (0.17014117E39, ~0.123E~2) = ~inf +* (0.17014117E39, ~0.11754944E~37) = ~0.19999999E1 ++ (0.17014117E39, ~0.11754944E~37) = 0.17014117E39 +- (0.17014117E39, ~0.11754944E~37) = 0.17014117E39 +/ (0.17014117E39, ~0.11754944E~37) = ~inf +nextAfter (0.17014117E39, ~0.11754944E~37) = 0.17014116E39 +rem (0.17014117E39, ~0.11754944E~37) = ~inf +* (0.17014117E39, ~0.5877472E~38) = ~0.99999994 ++ (0.17014117E39, ~0.5877472E~38) = 0.17014117E39 +- (0.17014117E39, ~0.5877472E~38) = 0.17014117E39 +/ (0.17014117E39, ~0.5877472E~38) = ~inf +nextAfter (0.17014117E39, ~0.5877472E~38) = 0.17014116E39 +rem (0.17014117E39, ~0.5877472E~38) = ~inf +* (0.17014117E39, ~0.1E~44) = ~0.23841856E~6 ++ (0.17014117E39, ~0.1E~44) = 0.17014117E39 +- (0.17014117E39, ~0.1E~44) = 0.17014117E39 +/ (0.17014117E39, ~0.1E~44) = ~inf +nextAfter (0.17014117E39, ~0.1E~44) = 0.17014116E39 +rem (0.17014117E39, ~0.1E~44) = ~inf +* (0.17014117E39, ~0.0) = ~0.0 ++ (0.17014117E39, ~0.0) = 0.17014117E39 +- (0.17014117E39, ~0.0) = 0.17014117E39 +/ (0.17014117E39, ~0.0) = ~inf +nextAfter (0.17014117E39, ~0.0) = 0.17014116E39 +rem (0.17014117E39, ~0.0) = nan +* (0.17014117E39, inf) = inf ++ (0.17014117E39, inf) = inf +- (0.17014117E39, inf) = ~inf +/ (0.17014117E39, inf) = 0.0 +nextAfter (0.17014117E39, inf) = 0.17014118E39 +rem (0.17014117E39, inf) = 0.17014117E39 +* (0.17014117E39, ~inf) = ~inf ++ (0.17014117E39, ~inf) = ~inf +- (0.17014117E39, ~inf) = inf +/ (0.17014117E39, ~inf) = ~0.0 +nextAfter (0.17014117E39, ~inf) = 0.17014116E39 +rem (0.17014117E39, ~inf) = 0.17014117E39 +* (0.17014117E39, nan) = nan ++ (0.17014117E39, nan) = nan +- (0.17014117E39, nan) = nan +/ (0.17014117E39, nan) = nan +nextAfter (0.17014117E39, nan) = nan +rem (0.17014117E39, nan) = nan +* (0.17014117E39, inf) = inf ++ (0.17014117E39, inf) = inf +- (0.17014117E39, inf) = ~inf +/ (0.17014117E39, inf) = 0.0 +nextAfter (0.17014117E39, inf) = 0.17014118E39 +rem (0.17014117E39, inf) = 0.17014117E39 +* (0.123E4, 0.34028235E39) = inf ++ (0.123E4, 0.34028235E39) = 0.34028235E39 +- (0.123E4, 0.34028235E39) = ~0.34028235E39 +/ (0.123E4, 0.34028235E39) = 0.36146455E~35 +nextAfter (0.123E4, 0.34028235E39) = 0.12300001E4 +rem (0.123E4, 0.34028235E39) = 0.123E4 +* (0.123E4, 0.17014117E39) = inf ++ (0.123E4, 0.17014117E39) = 0.17014117E39 +- (0.123E4, 0.17014117E39) = ~0.17014117E39 +/ (0.123E4, 0.17014117E39) = 0.7229291E~35 +nextAfter (0.123E4, 0.17014117E39) = 0.12300001E4 +rem (0.123E4, 0.17014117E39) = 0.123E4 +* (0.123E4, 0.123E4) = 0.15129E7 ++ (0.123E4, 0.123E4) = 0.246E4 +- (0.123E4, 0.123E4) = 0.0 +/ (0.123E4, 0.123E4) = 0.1E1 +nextAfter (0.123E4, 0.123E4) = 0.123E4 +rem (0.123E4, 0.123E4) = 0.0 +* (0.123E4, 0.123E2) = 0.15129E5 ++ (0.123E4, 0.123E2) = 0.12423E4 +- (0.123E4, 0.123E2) = 0.12177E4 +/ (0.123E4, 0.123E2) = 0.1E3 +nextAfter (0.123E4, 0.123E2) = 0.12299999E4 +rem (0.123E4, 0.123E2) = 0.0 +* (0.123E4, 0.31415927E1) = 0.38641592E4 ++ (0.123E4, 0.31415927E1) = 0.12331416E4 +- (0.123E4, 0.31415927E1) = 0.12268584E4 +/ (0.123E4, 0.31415927E1) = 0.39152115E3 +nextAfter (0.123E4, 0.31415927E1) = 0.12299999E4 +rem (0.123E4, 0.31415927E1) = 0.1637207E1 +* (0.123E4, 0.27182817E1) = 0.33434866E4 ++ (0.123E4, 0.27182817E1) = 0.12327183E4 +- (0.123E4, 0.27182817E1) = 0.12272817E4 +/ (0.123E4, 0.27182817E1) = 0.45249173E3 +nextAfter (0.123E4, 0.27182817E1) = 0.12299999E4 +rem (0.123E4, 0.27182817E1) = 0.13366699E1 +* (0.123E4, 0.123E1) = 0.15129E4 ++ (0.123E4, 0.123E1) = 0.123123E4 +- (0.123E4, 0.123E1) = 0.122877E4 +/ (0.123E4, 0.123E1) = 0.1E4 +nextAfter (0.123E4, 0.123E1) = 0.12299999E4 +rem (0.123E4, 0.123E1) = 0.0 +* (0.123E4, 0.123) = 0.15129001E3 ++ (0.123E4, 0.123) = 0.1230123E4 +- (0.123E4, 0.123) = 0.1229877E4 +/ (0.123E4, 0.123) = 0.1E5 +nextAfter (0.123E4, 0.123) = 0.12299999E4 +rem (0.123E4, 0.123) = 0.0 +* (0.123E4, 0.123E~2) = 0.15129001E1 ++ (0.123E4, 0.123E~2) = 0.12300012E4 +- (0.123E4, 0.123E~2) = 0.12299988E4 +/ (0.123E4, 0.123E~2) = 0.99999994E6 +nextAfter (0.123E4, 0.123E~2) = 0.12299999E4 +rem (0.123E4, 0.123E~2) = 0.12207031E~2 +* (0.123E4, 0.11754944E~37) = 0.1445858E~34 ++ (0.123E4, 0.11754944E~37) = 0.123E4 +- (0.123E4, 0.11754944E~37) = 0.123E4 +/ (0.123E4, 0.11754944E~37) = inf +nextAfter (0.123E4, 0.11754944E~37) = 0.12299999E4 +rem (0.123E4, 0.11754944E~37) = ~inf +* (0.123E4, 0.5877472E~38) = 0.722929E~35 ++ (0.123E4, 0.5877472E~38) = 0.123E4 +- (0.123E4, 0.5877472E~38) = 0.123E4 +/ (0.123E4, 0.5877472E~38) = inf +nextAfter (0.123E4, 0.5877472E~38) = 0.12299999E4 +rem (0.123E4, 0.5877472E~38) = ~inf +* (0.123E4, 0.1E~44) = 0.1724E~41 ++ (0.123E4, 0.1E~44) = 0.123E4 +- (0.123E4, 0.1E~44) = 0.123E4 +/ (0.123E4, 0.1E~44) = inf +nextAfter (0.123E4, 0.1E~44) = 0.12299999E4 +rem (0.123E4, 0.1E~44) = ~inf +* (0.123E4, 0.0) = 0.0 ++ (0.123E4, 0.0) = 0.123E4 +- (0.123E4, 0.0) = 0.123E4 +/ (0.123E4, 0.0) = inf +nextAfter (0.123E4, 0.0) = 0.12299999E4 +rem (0.123E4, 0.0) = nan +* (0.123E4, ~0.34028235E39) = ~inf ++ (0.123E4, ~0.34028235E39) = ~0.34028235E39 +- (0.123E4, ~0.34028235E39) = 0.34028235E39 +/ (0.123E4, ~0.34028235E39) = ~0.36146455E~35 +nextAfter (0.123E4, ~0.34028235E39) = 0.12299999E4 +rem (0.123E4, ~0.34028235E39) = 0.123E4 +* (0.123E4, ~0.17014117E39) = ~inf ++ (0.123E4, ~0.17014117E39) = ~0.17014117E39 +- (0.123E4, ~0.17014117E39) = 0.17014117E39 +/ (0.123E4, ~0.17014117E39) = ~0.7229291E~35 +nextAfter (0.123E4, ~0.17014117E39) = 0.12299999E4 +rem (0.123E4, ~0.17014117E39) = 0.123E4 +* (0.123E4, ~0.123E4) = ~0.15129E7 ++ (0.123E4, ~0.123E4) = 0.0 +- (0.123E4, ~0.123E4) = 0.246E4 +/ (0.123E4, ~0.123E4) = ~0.1E1 +nextAfter (0.123E4, ~0.123E4) = 0.12299999E4 +rem (0.123E4, ~0.123E4) = 0.0 +* (0.123E4, ~0.123E2) = ~0.15129E5 ++ (0.123E4, ~0.123E2) = 0.12177E4 +- (0.123E4, ~0.123E2) = 0.12423E4 +/ (0.123E4, ~0.123E2) = ~0.1E3 +nextAfter (0.123E4, ~0.123E2) = 0.12299999E4 +rem (0.123E4, ~0.123E2) = 0.0 +* (0.123E4, ~0.31415927E1) = ~0.38641592E4 ++ (0.123E4, ~0.31415927E1) = 0.12268584E4 +- (0.123E4, ~0.31415927E1) = 0.12331416E4 +/ (0.123E4, ~0.31415927E1) = ~0.39152115E3 +nextAfter (0.123E4, ~0.31415927E1) = 0.12299999E4 +rem (0.123E4, ~0.31415927E1) = 0.1637207E1 +* (0.123E4, ~0.27182817E1) = ~0.33434866E4 ++ (0.123E4, ~0.27182817E1) = 0.12272817E4 +- (0.123E4, ~0.27182817E1) = 0.12327183E4 +/ (0.123E4, ~0.27182817E1) = ~0.45249173E3 +nextAfter (0.123E4, ~0.27182817E1) = 0.12299999E4 +rem (0.123E4, ~0.27182817E1) = 0.13366699E1 +* (0.123E4, ~0.123E1) = ~0.15129E4 ++ (0.123E4, ~0.123E1) = 0.122877E4 +- (0.123E4, ~0.123E1) = 0.123123E4 +/ (0.123E4, ~0.123E1) = ~0.1E4 +nextAfter (0.123E4, ~0.123E1) = 0.12299999E4 +rem (0.123E4, ~0.123E1) = 0.0 +* (0.123E4, ~0.123) = ~0.15129001E3 ++ (0.123E4, ~0.123) = 0.1229877E4 +- (0.123E4, ~0.123) = 0.1230123E4 +/ (0.123E4, ~0.123) = ~0.1E5 +nextAfter (0.123E4, ~0.123) = 0.12299999E4 +rem (0.123E4, ~0.123) = 0.0 +* (0.123E4, ~0.123E~2) = ~0.15129001E1 ++ (0.123E4, ~0.123E~2) = 0.12299988E4 +- (0.123E4, ~0.123E~2) = 0.12300012E4 +/ (0.123E4, ~0.123E~2) = ~0.99999994E6 +nextAfter (0.123E4, ~0.123E~2) = 0.12299999E4 +rem (0.123E4, ~0.123E~2) = 0.12207031E~2 +* (0.123E4, ~0.11754944E~37) = ~0.1445858E~34 ++ (0.123E4, ~0.11754944E~37) = 0.123E4 +- (0.123E4, ~0.11754944E~37) = 0.123E4 +/ (0.123E4, ~0.11754944E~37) = ~inf +nextAfter (0.123E4, ~0.11754944E~37) = 0.12299999E4 +rem (0.123E4, ~0.11754944E~37) = ~inf +* (0.123E4, ~0.5877472E~38) = ~0.722929E~35 ++ (0.123E4, ~0.5877472E~38) = 0.123E4 +- (0.123E4, ~0.5877472E~38) = 0.123E4 +/ (0.123E4, ~0.5877472E~38) = ~inf +nextAfter (0.123E4, ~0.5877472E~38) = 0.12299999E4 +rem (0.123E4, ~0.5877472E~38) = ~inf +* (0.123E4, ~0.1E~44) = ~0.1724E~41 ++ (0.123E4, ~0.1E~44) = 0.123E4 +- (0.123E4, ~0.1E~44) = 0.123E4 +/ (0.123E4, ~0.1E~44) = ~inf +nextAfter (0.123E4, ~0.1E~44) = 0.12299999E4 +rem (0.123E4, ~0.1E~44) = ~inf +* (0.123E4, ~0.0) = ~0.0 ++ (0.123E4, ~0.0) = 0.123E4 +- (0.123E4, ~0.0) = 0.123E4 +/ (0.123E4, ~0.0) = ~inf +nextAfter (0.123E4, ~0.0) = 0.12299999E4 +rem (0.123E4, ~0.0) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300001E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E4, ~inf) = ~inf ++ (0.123E4, ~inf) = ~inf +- (0.123E4, ~inf) = inf +/ (0.123E4, ~inf) = ~0.0 +nextAfter (0.123E4, ~inf) = 0.12299999E4 +rem (0.123E4, ~inf) = 0.123E4 +* (0.123E4, nan) = nan ++ (0.123E4, nan) = nan +- (0.123E4, nan) = nan +/ (0.123E4, nan) = nan +nextAfter (0.123E4, nan) = nan +rem (0.123E4, nan) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300001E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E2, 0.34028235E39) = inf ++ (0.123E2, 0.34028235E39) = 0.34028235E39 +- (0.123E2, 0.34028235E39) = ~0.34028235E39 +/ (0.123E2, 0.34028235E39) = 0.36146455E~37 +nextAfter (0.123E2, 0.34028235E39) = 0.12300001E2 +rem (0.123E2, 0.34028235E39) = 0.123E2 +* (0.123E2, 0.17014117E39) = inf ++ (0.123E2, 0.17014117E39) = 0.17014117E39 +- (0.123E2, 0.17014117E39) = ~0.17014117E39 +/ (0.123E2, 0.17014117E39) = 0.7229291E~37 +nextAfter (0.123E2, 0.17014117E39) = 0.12300001E2 +rem (0.123E2, 0.17014117E39) = 0.123E2 +* (0.123E2, 0.123E4) = 0.15129E5 ++ (0.123E2, 0.123E4) = 0.12423E4 +- (0.123E2, 0.123E4) = ~0.12177E4 +/ (0.123E2, 0.123E4) = 0.1E~1 +nextAfter (0.123E2, 0.123E4) = 0.12300001E2 +rem (0.123E2, 0.123E4) = 0.123E2 +* (0.123E2, 0.123E2) = 0.15129001E3 ++ (0.123E2, 0.123E2) = 0.246E2 +- (0.123E2, 0.123E2) = 0.0 +/ (0.123E2, 0.123E2) = 0.1E1 +nextAfter (0.123E2, 0.123E2) = 0.123E2 +rem (0.123E2, 0.123E2) = 0.0 +* (0.123E2, 0.31415927E1) = 0.3864159E2 ++ (0.123E2, 0.31415927E1) = 0.15441593E2 +- (0.123E2, 0.31415927E1) = 0.9158407E1 +/ (0.123E2, 0.31415927E1) = 0.39152114E1 +nextAfter (0.123E2, 0.31415927E1) = 0.12299999E2 +rem (0.123E2, 0.31415927E1) = 0.28752222E1 +* (0.123E2, 0.27182817E1) = 0.33434868E2 ++ (0.123E2, 0.27182817E1) = 0.15018282E2 +- (0.123E2, 0.27182817E1) = 0.9581718E1 +/ (0.123E2, 0.27182817E1) = 0.4524917E1 +nextAfter (0.123E2, 0.27182817E1) = 0.12299999E2 +rem (0.123E2, 0.27182817E1) = 0.14268732E1 +* (0.123E2, 0.123E1) = 0.15129001E2 ++ (0.123E2, 0.123E1) = 0.13530001E2 +- (0.123E2, 0.123E1) = 0.1107E2 +/ (0.123E2, 0.123E1) = 0.1E2 +nextAfter (0.123E2, 0.123E1) = 0.12299999E2 +rem (0.123E2, 0.123E1) = 0.0 +* (0.123E2, 0.123) = 0.15129001E1 ++ (0.123E2, 0.123) = 0.12423E2 +- (0.123E2, 0.123) = 0.12177E2 +/ (0.123E2, 0.123) = 0.1E3 +nextAfter (0.123E2, 0.123) = 0.12299999E2 +rem (0.123E2, 0.123) = 0.0 +* (0.123E2, 0.123E~2) = 0.15129001E~1 ++ (0.123E2, 0.123E~2) = 0.1230123E2 +- (0.123E2, 0.123E~2) = 0.1229877E2 +/ (0.123E2, 0.123E~2) = 0.1E5 +nextAfter (0.123E2, 0.123E~2) = 0.12299999E2 +rem (0.123E2, 0.123E~2) = 0.0 +* (0.123E2, 0.11754944E~37) = 0.14458581E~36 ++ (0.123E2, 0.11754944E~37) = 0.123E2 +- (0.123E2, 0.11754944E~37) = 0.123E2 +/ (0.123E2, 0.11754944E~37) = inf +nextAfter (0.123E2, 0.11754944E~37) = 0.12299999E2 +rem (0.123E2, 0.11754944E~37) = ~inf +* (0.123E2, 0.5877472E~38) = 0.72292904E~37 ++ (0.123E2, 0.5877472E~38) = 0.123E2 +- (0.123E2, 0.5877472E~38) = 0.123E2 +/ (0.123E2, 0.5877472E~38) = inf +nextAfter (0.123E2, 0.5877472E~38) = 0.12299999E2 +rem (0.123E2, 0.5877472E~38) = ~inf +* (0.123E2, 0.1E~44) = 0.17E~43 ++ (0.123E2, 0.1E~44) = 0.123E2 +- (0.123E2, 0.1E~44) = 0.123E2 +/ (0.123E2, 0.1E~44) = inf +nextAfter (0.123E2, 0.1E~44) = 0.12299999E2 +rem (0.123E2, 0.1E~44) = ~inf +* (0.123E2, 0.0) = 0.0 ++ (0.123E2, 0.0) = 0.123E2 +- (0.123E2, 0.0) = 0.123E2 +/ (0.123E2, 0.0) = inf +nextAfter (0.123E2, 0.0) = 0.12299999E2 +rem (0.123E2, 0.0) = nan +* (0.123E2, ~0.34028235E39) = ~inf ++ (0.123E2, ~0.34028235E39) = ~0.34028235E39 +- (0.123E2, ~0.34028235E39) = 0.34028235E39 +/ (0.123E2, ~0.34028235E39) = ~0.36146455E~37 +nextAfter (0.123E2, ~0.34028235E39) = 0.12299999E2 +rem (0.123E2, ~0.34028235E39) = 0.123E2 +* (0.123E2, ~0.17014117E39) = ~inf ++ (0.123E2, ~0.17014117E39) = ~0.17014117E39 +- (0.123E2, ~0.17014117E39) = 0.17014117E39 +/ (0.123E2, ~0.17014117E39) = ~0.7229291E~37 +nextAfter (0.123E2, ~0.17014117E39) = 0.12299999E2 +rem (0.123E2, ~0.17014117E39) = 0.123E2 +* (0.123E2, ~0.123E4) = ~0.15129E5 ++ (0.123E2, ~0.123E4) = ~0.12177E4 +- (0.123E2, ~0.123E4) = 0.12423E4 +/ (0.123E2, ~0.123E4) = ~0.1E~1 +nextAfter (0.123E2, ~0.123E4) = 0.12299999E2 +rem (0.123E2, ~0.123E4) = 0.123E2 +* (0.123E2, ~0.123E2) = ~0.15129001E3 ++ (0.123E2, ~0.123E2) = 0.0 +- (0.123E2, ~0.123E2) = 0.246E2 +/ (0.123E2, ~0.123E2) = ~0.1E1 +nextAfter (0.123E2, ~0.123E2) = 0.12299999E2 +rem (0.123E2, ~0.123E2) = 0.0 +* (0.123E2, ~0.31415927E1) = ~0.3864159E2 ++ (0.123E2, ~0.31415927E1) = 0.9158407E1 +- (0.123E2, ~0.31415927E1) = 0.15441593E2 +/ (0.123E2, ~0.31415927E1) = ~0.39152114E1 +nextAfter (0.123E2, ~0.31415927E1) = 0.12299999E2 +rem (0.123E2, ~0.31415927E1) = 0.28752222E1 +* (0.123E2, ~0.27182817E1) = ~0.33434868E2 ++ (0.123E2, ~0.27182817E1) = 0.9581718E1 +- (0.123E2, ~0.27182817E1) = 0.15018282E2 +/ (0.123E2, ~0.27182817E1) = ~0.4524917E1 +nextAfter (0.123E2, ~0.27182817E1) = 0.12299999E2 +rem (0.123E2, ~0.27182817E1) = 0.14268732E1 +* (0.123E2, ~0.123E1) = ~0.15129001E2 ++ (0.123E2, ~0.123E1) = 0.1107E2 +- (0.123E2, ~0.123E1) = 0.13530001E2 +/ (0.123E2, ~0.123E1) = ~0.1E2 +nextAfter (0.123E2, ~0.123E1) = 0.12299999E2 +rem (0.123E2, ~0.123E1) = 0.0 +* (0.123E2, ~0.123) = ~0.15129001E1 ++ (0.123E2, ~0.123) = 0.12177E2 +- (0.123E2, ~0.123) = 0.12423E2 +/ (0.123E2, ~0.123) = ~0.1E3 +nextAfter (0.123E2, ~0.123) = 0.12299999E2 +rem (0.123E2, ~0.123) = 0.0 +* (0.123E2, ~0.123E~2) = ~0.15129001E~1 ++ (0.123E2, ~0.123E~2) = 0.1229877E2 +- (0.123E2, ~0.123E~2) = 0.1230123E2 +/ (0.123E2, ~0.123E~2) = ~0.1E5 +nextAfter (0.123E2, ~0.123E~2) = 0.12299999E2 +rem (0.123E2, ~0.123E~2) = 0.0 +* (0.123E2, ~0.11754944E~37) = ~0.14458581E~36 ++ (0.123E2, ~0.11754944E~37) = 0.123E2 +- (0.123E2, ~0.11754944E~37) = 0.123E2 +/ (0.123E2, ~0.11754944E~37) = ~inf +nextAfter (0.123E2, ~0.11754944E~37) = 0.12299999E2 +rem (0.123E2, ~0.11754944E~37) = ~inf +* (0.123E2, ~0.5877472E~38) = ~0.72292904E~37 ++ (0.123E2, ~0.5877472E~38) = 0.123E2 +- (0.123E2, ~0.5877472E~38) = 0.123E2 +/ (0.123E2, ~0.5877472E~38) = ~inf +nextAfter (0.123E2, ~0.5877472E~38) = 0.12299999E2 +rem (0.123E2, ~0.5877472E~38) = ~inf +* (0.123E2, ~0.1E~44) = ~0.17E~43 ++ (0.123E2, ~0.1E~44) = 0.123E2 +- (0.123E2, ~0.1E~44) = 0.123E2 +/ (0.123E2, ~0.1E~44) = ~inf +nextAfter (0.123E2, ~0.1E~44) = 0.12299999E2 +rem (0.123E2, ~0.1E~44) = ~inf +* (0.123E2, ~0.0) = ~0.0 ++ (0.123E2, ~0.0) = 0.123E2 +- (0.123E2, ~0.0) = 0.123E2 +/ (0.123E2, ~0.0) = ~inf +nextAfter (0.123E2, ~0.0) = 0.12299999E2 +rem (0.123E2, ~0.0) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300001E2 +rem (0.123E2, inf) = 0.123E2 +* (0.123E2, ~inf) = ~inf ++ (0.123E2, ~inf) = ~inf +- (0.123E2, ~inf) = inf +/ (0.123E2, ~inf) = ~0.0 +nextAfter (0.123E2, ~inf) = 0.12299999E2 +rem (0.123E2, ~inf) = 0.123E2 +* (0.123E2, nan) = nan ++ (0.123E2, nan) = nan +- (0.123E2, nan) = nan +/ (0.123E2, nan) = nan +nextAfter (0.123E2, nan) = nan +rem (0.123E2, nan) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300001E2 +rem (0.123E2, inf) = 0.123E2 +* (0.31415927E1, 0.34028235E39) = inf ++ (0.31415927E1, 0.34028235E39) = 0.34028235E39 +- (0.31415927E1, 0.34028235E39) = ~0.34028235E39 +/ (0.31415927E1, 0.34028235E39) = 0.9232312E~38 +nextAfter (0.31415927E1, 0.34028235E39) = 0.3141593E1 +rem (0.31415927E1, 0.34028235E39) = 0.31415927E1 +* (0.31415927E1, 0.17014117E39) = inf ++ (0.31415927E1, 0.17014117E39) = 0.17014117E39 +- (0.31415927E1, 0.17014117E39) = ~0.17014117E39 +/ (0.31415927E1, 0.17014117E39) = 0.18464624E~37 +nextAfter (0.31415927E1, 0.17014117E39) = 0.3141593E1 +rem (0.31415927E1, 0.17014117E39) = 0.31415927E1 +* (0.31415927E1, 0.123E4) = 0.38641592E4 ++ (0.31415927E1, 0.123E4) = 0.12331416E4 +- (0.31415927E1, 0.123E4) = ~0.12268584E4 +/ (0.31415927E1, 0.123E4) = 0.25541405E~2 +nextAfter (0.31415927E1, 0.123E4) = 0.3141593E1 +rem (0.31415927E1, 0.123E4) = 0.31415927E1 +* (0.31415927E1, 0.123E2) = 0.3864159E2 ++ (0.31415927E1, 0.123E2) = 0.15441593E2 +- (0.31415927E1, 0.123E2) = ~0.9158407E1 +/ (0.31415927E1, 0.123E2) = 0.25541404 +nextAfter (0.31415927E1, 0.123E2) = 0.3141593E1 +rem (0.31415927E1, 0.123E2) = 0.31415927E1 +* (0.31415927E1, 0.31415927E1) = 0.9869605E1 ++ (0.31415927E1, 0.31415927E1) = 0.62831855E1 +- (0.31415927E1, 0.31415927E1) = 0.0 +/ (0.31415927E1, 0.31415927E1) = 0.1E1 +nextAfter (0.31415927E1, 0.31415927E1) = 0.31415927E1 +rem (0.31415927E1, 0.31415927E1) = 0.0 +* (0.31415927E1, 0.27182817E1) = 0.8539734E1 ++ (0.31415927E1, 0.27182817E1) = 0.58598747E1 +- (0.31415927E1, 0.27182817E1) = 0.423311 +/ (0.31415927E1, 0.27182817E1) = 0.11557274E1 +nextAfter (0.31415927E1, 0.27182817E1) = 0.31415925E1 +rem (0.31415927E1, 0.27182817E1) = 0.423311 +* (0.31415927E1, 0.123E1) = 0.3864159E1 ++ (0.31415927E1, 0.123E1) = 0.43715925E1 +- (0.31415927E1, 0.123E1) = 0.19115927E1 +/ (0.31415927E1, 0.123E1) = 0.25541403E1 +nextAfter (0.31415927E1, 0.123E1) = 0.31415925E1 +rem (0.31415927E1, 0.123E1) = 0.6815927 +* (0.31415927E1, 0.123) = 0.38641593 ++ (0.31415927E1, 0.123) = 0.32645926E1 +- (0.31415927E1, 0.123) = 0.30185928E1 +/ (0.31415927E1, 0.123) = 0.25541403E2 +nextAfter (0.31415927E1, 0.123) = 0.31415925E1 +rem (0.31415927E1, 0.123) = 0.6659269E~1 +* (0.31415927E1, 0.123E~2) = 0.38641593E~2 ++ (0.31415927E1, 0.123E~2) = 0.31428227E1 +- (0.31415927E1, 0.123E~2) = 0.31403627E1 +/ (0.31415927E1, 0.123E~2) = 0.25541404E4 +nextAfter (0.31415927E1, 0.123E~2) = 0.31415925E1 +rem (0.31415927E1, 0.123E~2) = 0.17261505E~3 +* (0.31415927E1, 0.11754944E~37) = 0.36929245E~37 ++ (0.31415927E1, 0.11754944E~37) = 0.31415927E1 +- (0.31415927E1, 0.11754944E~37) = 0.31415927E1 +/ (0.31415927E1, 0.11754944E~37) = 0.26725715E39 +nextAfter (0.31415927E1, 0.11754944E~37) = 0.31415925E1 +rem (0.31415927E1, 0.11754944E~37) = 0.0 +* (0.31415927E1, 0.5877472E~38) = 0.18464623E~37 ++ (0.31415927E1, 0.5877472E~38) = 0.31415927E1 +- (0.31415927E1, 0.5877472E~38) = 0.31415927E1 +/ (0.31415927E1, 0.5877472E~38) = inf +nextAfter (0.31415927E1, 0.5877472E~38) = 0.31415925E1 +rem (0.31415927E1, 0.5877472E~38) = ~inf +* (0.31415927E1, 0.1E~44) = 0.4E~44 ++ (0.31415927E1, 0.1E~44) = 0.31415927E1 +- (0.31415927E1, 0.1E~44) = 0.31415927E1 +/ (0.31415927E1, 0.1E~44) = inf +nextAfter (0.31415927E1, 0.1E~44) = 0.31415925E1 +rem (0.31415927E1, 0.1E~44) = ~inf +* (0.31415927E1, 0.0) = 0.0 ++ (0.31415927E1, 0.0) = 0.31415927E1 +- (0.31415927E1, 0.0) = 0.31415927E1 +/ (0.31415927E1, 0.0) = inf +nextAfter (0.31415927E1, 0.0) = 0.31415925E1 +rem (0.31415927E1, 0.0) = nan +* (0.31415927E1, ~0.34028235E39) = ~inf ++ (0.31415927E1, ~0.34028235E39) = ~0.34028235E39 +- (0.31415927E1, ~0.34028235E39) = 0.34028235E39 +/ (0.31415927E1, ~0.34028235E39) = ~0.9232312E~38 +nextAfter (0.31415927E1, ~0.34028235E39) = 0.31415925E1 +rem (0.31415927E1, ~0.34028235E39) = 0.31415927E1 +* (0.31415927E1, ~0.17014117E39) = ~inf ++ (0.31415927E1, ~0.17014117E39) = ~0.17014117E39 +- (0.31415927E1, ~0.17014117E39) = 0.17014117E39 +/ (0.31415927E1, ~0.17014117E39) = ~0.18464624E~37 +nextAfter (0.31415927E1, ~0.17014117E39) = 0.31415925E1 +rem (0.31415927E1, ~0.17014117E39) = 0.31415927E1 +* (0.31415927E1, ~0.123E4) = ~0.38641592E4 ++ (0.31415927E1, ~0.123E4) = ~0.12268584E4 +- (0.31415927E1, ~0.123E4) = 0.12331416E4 +/ (0.31415927E1, ~0.123E4) = ~0.25541405E~2 +nextAfter (0.31415927E1, ~0.123E4) = 0.31415925E1 +rem (0.31415927E1, ~0.123E4) = 0.31415927E1 +* (0.31415927E1, ~0.123E2) = ~0.3864159E2 ++ (0.31415927E1, ~0.123E2) = ~0.9158407E1 +- (0.31415927E1, ~0.123E2) = 0.15441593E2 +/ (0.31415927E1, ~0.123E2) = ~0.25541404 +nextAfter (0.31415927E1, ~0.123E2) = 0.31415925E1 +rem (0.31415927E1, ~0.123E2) = 0.31415927E1 +* (0.31415927E1, ~0.31415927E1) = ~0.9869605E1 ++ (0.31415927E1, ~0.31415927E1) = 0.0 +- (0.31415927E1, ~0.31415927E1) = 0.62831855E1 +/ (0.31415927E1, ~0.31415927E1) = ~0.1E1 +nextAfter (0.31415927E1, ~0.31415927E1) = 0.31415925E1 +rem (0.31415927E1, ~0.31415927E1) = 0.0 +* (0.31415927E1, ~0.27182817E1) = ~0.8539734E1 ++ (0.31415927E1, ~0.27182817E1) = 0.423311 +- (0.31415927E1, ~0.27182817E1) = 0.58598747E1 +/ (0.31415927E1, ~0.27182817E1) = ~0.11557274E1 +nextAfter (0.31415927E1, ~0.27182817E1) = 0.31415925E1 +rem (0.31415927E1, ~0.27182817E1) = 0.423311 +* (0.31415927E1, ~0.123E1) = ~0.3864159E1 ++ (0.31415927E1, ~0.123E1) = 0.19115927E1 +- (0.31415927E1, ~0.123E1) = 0.43715925E1 +/ (0.31415927E1, ~0.123E1) = ~0.25541403E1 +nextAfter (0.31415927E1, ~0.123E1) = 0.31415925E1 +rem (0.31415927E1, ~0.123E1) = 0.6815927 +* (0.31415927E1, ~0.123) = ~0.38641593 ++ (0.31415927E1, ~0.123) = 0.30185928E1 +- (0.31415927E1, ~0.123) = 0.32645926E1 +/ (0.31415927E1, ~0.123) = ~0.25541403E2 +nextAfter (0.31415927E1, ~0.123) = 0.31415925E1 +rem (0.31415927E1, ~0.123) = 0.6659269E~1 +* (0.31415927E1, ~0.123E~2) = ~0.38641593E~2 ++ (0.31415927E1, ~0.123E~2) = 0.31403627E1 +- (0.31415927E1, ~0.123E~2) = 0.31428227E1 +/ (0.31415927E1, ~0.123E~2) = ~0.25541404E4 +nextAfter (0.31415927E1, ~0.123E~2) = 0.31415925E1 +rem (0.31415927E1, ~0.123E~2) = 0.17261505E~3 +* (0.31415927E1, ~0.11754944E~37) = ~0.36929245E~37 ++ (0.31415927E1, ~0.11754944E~37) = 0.31415927E1 +- (0.31415927E1, ~0.11754944E~37) = 0.31415927E1 +/ (0.31415927E1, ~0.11754944E~37) = ~0.26725715E39 +nextAfter (0.31415927E1, ~0.11754944E~37) = 0.31415925E1 +rem (0.31415927E1, ~0.11754944E~37) = 0.0 +* (0.31415927E1, ~0.5877472E~38) = ~0.18464623E~37 ++ (0.31415927E1, ~0.5877472E~38) = 0.31415927E1 +- (0.31415927E1, ~0.5877472E~38) = 0.31415927E1 +/ (0.31415927E1, ~0.5877472E~38) = ~inf +nextAfter (0.31415927E1, ~0.5877472E~38) = 0.31415925E1 +rem (0.31415927E1, ~0.5877472E~38) = ~inf +* (0.31415927E1, ~0.1E~44) = ~0.4E~44 ++ (0.31415927E1, ~0.1E~44) = 0.31415927E1 +- (0.31415927E1, ~0.1E~44) = 0.31415927E1 +/ (0.31415927E1, ~0.1E~44) = ~inf +nextAfter (0.31415927E1, ~0.1E~44) = 0.31415925E1 +rem (0.31415927E1, ~0.1E~44) = ~inf +* (0.31415927E1, ~0.0) = ~0.0 ++ (0.31415927E1, ~0.0) = 0.31415927E1 +- (0.31415927E1, ~0.0) = 0.31415927E1 +/ (0.31415927E1, ~0.0) = ~inf +nextAfter (0.31415927E1, ~0.0) = 0.31415925E1 +rem (0.31415927E1, ~0.0) = nan +* (0.31415927E1, inf) = inf ++ (0.31415927E1, inf) = inf +- (0.31415927E1, inf) = ~inf +/ (0.31415927E1, inf) = 0.0 +nextAfter (0.31415927E1, inf) = 0.3141593E1 +rem (0.31415927E1, inf) = 0.31415927E1 +* (0.31415927E1, ~inf) = ~inf ++ (0.31415927E1, ~inf) = ~inf +- (0.31415927E1, ~inf) = inf +/ (0.31415927E1, ~inf) = ~0.0 +nextAfter (0.31415927E1, ~inf) = 0.31415925E1 +rem (0.31415927E1, ~inf) = 0.31415927E1 +* (0.31415927E1, nan) = nan ++ (0.31415927E1, nan) = nan +- (0.31415927E1, nan) = nan +/ (0.31415927E1, nan) = nan +nextAfter (0.31415927E1, nan) = nan +rem (0.31415927E1, nan) = nan +* (0.31415927E1, inf) = inf ++ (0.31415927E1, inf) = inf +- (0.31415927E1, inf) = ~inf +/ (0.31415927E1, inf) = 0.0 +nextAfter (0.31415927E1, inf) = 0.3141593E1 +rem (0.31415927E1, inf) = 0.31415927E1 +* (0.27182817E1, 0.34028235E39) = inf ++ (0.27182817E1, 0.34028235E39) = 0.34028235E39 +- (0.27182817E1, 0.34028235E39) = ~0.34028235E39 +/ (0.27182817E1, 0.34028235E39) = 0.7988312E~38 +nextAfter (0.27182817E1, 0.34028235E39) = 0.2718282E1 +rem (0.27182817E1, 0.34028235E39) = 0.27182817E1 +* (0.27182817E1, 0.17014117E39) = inf ++ (0.27182817E1, 0.17014117E39) = 0.17014117E39 +- (0.27182817E1, 0.17014117E39) = ~0.17014117E39 +/ (0.27182817E1, 0.17014117E39) = 0.15976626E~37 +nextAfter (0.27182817E1, 0.17014117E39) = 0.2718282E1 +rem (0.27182817E1, 0.17014117E39) = 0.27182817E1 +* (0.27182817E1, 0.123E4) = 0.33434866E4 ++ (0.27182817E1, 0.123E4) = 0.12327183E4 +- (0.27182817E1, 0.123E4) = ~0.12272817E4 +/ (0.27182817E1, 0.123E4) = 0.22099852E~2 +nextAfter (0.27182817E1, 0.123E4) = 0.2718282E1 +rem (0.27182817E1, 0.123E4) = 0.27182817E1 +* (0.27182817E1, 0.123E2) = 0.33434868E2 ++ (0.27182817E1, 0.123E2) = 0.15018282E2 +- (0.27182817E1, 0.123E2) = ~0.9581718E1 +/ (0.27182817E1, 0.123E2) = 0.22099851 +nextAfter (0.27182817E1, 0.123E2) = 0.2718282E1 +rem (0.27182817E1, 0.123E2) = 0.27182817E1 +* (0.27182817E1, 0.31415927E1) = 0.8539734E1 ++ (0.27182817E1, 0.31415927E1) = 0.58598747E1 +- (0.27182817E1, 0.31415927E1) = ~0.423311 +/ (0.27182817E1, 0.31415927E1) = 0.86525595 +nextAfter (0.27182817E1, 0.31415927E1) = 0.2718282E1 +rem (0.27182817E1, 0.31415927E1) = 0.27182817E1 +* (0.27182817E1, 0.27182817E1) = 0.73890557E1 ++ (0.27182817E1, 0.27182817E1) = 0.54365635E1 +- (0.27182817E1, 0.27182817E1) = 0.0 +/ (0.27182817E1, 0.27182817E1) = 0.1E1 +nextAfter (0.27182817E1, 0.27182817E1) = 0.27182817E1 +rem (0.27182817E1, 0.27182817E1) = 0.0 +* (0.27182817E1, 0.123E1) = 0.33434865E1 ++ (0.27182817E1, 0.123E1) = 0.39482818E1 +- (0.27182817E1, 0.123E1) = 0.14882817E1 +/ (0.27182817E1, 0.123E1) = 0.2209985E1 +nextAfter (0.27182817E1, 0.123E1) = 0.27182815E1 +rem (0.27182817E1, 0.123E1) = 0.2582817 +* (0.27182817E1, 0.123) = 0.33434868 ++ (0.27182817E1, 0.123) = 0.28412817E1 +- (0.27182817E1, 0.123) = 0.25952818E1 +/ (0.27182817E1, 0.123) = 0.22099852E2 +nextAfter (0.27182817E1, 0.123) = 0.27182815E1 +rem (0.27182817E1, 0.123) = 0.12281656E~1 +* (0.27182817E1, 0.123E~2) = 0.33434867E~2 ++ (0.27182817E1, 0.123E~2) = 0.27195117E1 +- (0.27182817E1, 0.123E~2) = 0.27170517E1 +/ (0.27182817E1, 0.123E~2) = 0.2209985E4 +nextAfter (0.27182817E1, 0.123E~2) = 0.27182815E1 +rem (0.27182817E1, 0.123E~2) = 0.12116432E~2 +* (0.27182817E1, 0.11754944E~37) = 0.31953248E~37 ++ (0.27182817E1, 0.11754944E~37) = 0.27182817E1 +- (0.27182817E1, 0.11754944E~37) = 0.27182817E1 +/ (0.27182817E1, 0.11754944E~37) = 0.23124584E39 +nextAfter (0.27182817E1, 0.11754944E~37) = 0.27182815E1 +rem (0.27182817E1, 0.11754944E~37) = 0.0 +* (0.27182817E1, 0.5877472E~38) = 0.15976624E~37 ++ (0.27182817E1, 0.5877472E~38) = 0.27182817E1 +- (0.27182817E1, 0.5877472E~38) = 0.27182817E1 +/ (0.27182817E1, 0.5877472E~38) = inf +nextAfter (0.27182817E1, 0.5877472E~38) = 0.27182815E1 +rem (0.27182817E1, 0.5877472E~38) = ~inf +* (0.27182817E1, 0.1E~44) = 0.4E~44 ++ (0.27182817E1, 0.1E~44) = 0.27182817E1 +- (0.27182817E1, 0.1E~44) = 0.27182817E1 +/ (0.27182817E1, 0.1E~44) = inf +nextAfter (0.27182817E1, 0.1E~44) = 0.27182815E1 +rem (0.27182817E1, 0.1E~44) = ~inf +* (0.27182817E1, 0.0) = 0.0 ++ (0.27182817E1, 0.0) = 0.27182817E1 +- (0.27182817E1, 0.0) = 0.27182817E1 +/ (0.27182817E1, 0.0) = inf +nextAfter (0.27182817E1, 0.0) = 0.27182815E1 +rem (0.27182817E1, 0.0) = nan +* (0.27182817E1, ~0.34028235E39) = ~inf ++ (0.27182817E1, ~0.34028235E39) = ~0.34028235E39 +- (0.27182817E1, ~0.34028235E39) = 0.34028235E39 +/ (0.27182817E1, ~0.34028235E39) = ~0.7988312E~38 +nextAfter (0.27182817E1, ~0.34028235E39) = 0.27182815E1 +rem (0.27182817E1, ~0.34028235E39) = 0.27182817E1 +* (0.27182817E1, ~0.17014117E39) = ~inf ++ (0.27182817E1, ~0.17014117E39) = ~0.17014117E39 +- (0.27182817E1, ~0.17014117E39) = 0.17014117E39 +/ (0.27182817E1, ~0.17014117E39) = ~0.15976626E~37 +nextAfter (0.27182817E1, ~0.17014117E39) = 0.27182815E1 +rem (0.27182817E1, ~0.17014117E39) = 0.27182817E1 +* (0.27182817E1, ~0.123E4) = ~0.33434866E4 ++ (0.27182817E1, ~0.123E4) = ~0.12272817E4 +- (0.27182817E1, ~0.123E4) = 0.12327183E4 +/ (0.27182817E1, ~0.123E4) = ~0.22099852E~2 +nextAfter (0.27182817E1, ~0.123E4) = 0.27182815E1 +rem (0.27182817E1, ~0.123E4) = 0.27182817E1 +* (0.27182817E1, ~0.123E2) = ~0.33434868E2 ++ (0.27182817E1, ~0.123E2) = ~0.9581718E1 +- (0.27182817E1, ~0.123E2) = 0.15018282E2 +/ (0.27182817E1, ~0.123E2) = ~0.22099851 +nextAfter (0.27182817E1, ~0.123E2) = 0.27182815E1 +rem (0.27182817E1, ~0.123E2) = 0.27182817E1 +* (0.27182817E1, ~0.31415927E1) = ~0.8539734E1 ++ (0.27182817E1, ~0.31415927E1) = ~0.423311 +- (0.27182817E1, ~0.31415927E1) = 0.58598747E1 +/ (0.27182817E1, ~0.31415927E1) = ~0.86525595 +nextAfter (0.27182817E1, ~0.31415927E1) = 0.27182815E1 +rem (0.27182817E1, ~0.31415927E1) = 0.27182817E1 +* (0.27182817E1, ~0.27182817E1) = ~0.73890557E1 ++ (0.27182817E1, ~0.27182817E1) = 0.0 +- (0.27182817E1, ~0.27182817E1) = 0.54365635E1 +/ (0.27182817E1, ~0.27182817E1) = ~0.1E1 +nextAfter (0.27182817E1, ~0.27182817E1) = 0.27182815E1 +rem (0.27182817E1, ~0.27182817E1) = 0.0 +* (0.27182817E1, ~0.123E1) = ~0.33434865E1 ++ (0.27182817E1, ~0.123E1) = 0.14882817E1 +- (0.27182817E1, ~0.123E1) = 0.39482818E1 +/ (0.27182817E1, ~0.123E1) = ~0.2209985E1 +nextAfter (0.27182817E1, ~0.123E1) = 0.27182815E1 +rem (0.27182817E1, ~0.123E1) = 0.2582817 +* (0.27182817E1, ~0.123) = ~0.33434868 ++ (0.27182817E1, ~0.123) = 0.25952818E1 +- (0.27182817E1, ~0.123) = 0.28412817E1 +/ (0.27182817E1, ~0.123) = ~0.22099852E2 +nextAfter (0.27182817E1, ~0.123) = 0.27182815E1 +rem (0.27182817E1, ~0.123) = 0.12281656E~1 +* (0.27182817E1, ~0.123E~2) = ~0.33434867E~2 ++ (0.27182817E1, ~0.123E~2) = 0.27170517E1 +- (0.27182817E1, ~0.123E~2) = 0.27195117E1 +/ (0.27182817E1, ~0.123E~2) = ~0.2209985E4 +nextAfter (0.27182817E1, ~0.123E~2) = 0.27182815E1 +rem (0.27182817E1, ~0.123E~2) = 0.12116432E~2 +* (0.27182817E1, ~0.11754944E~37) = ~0.31953248E~37 ++ (0.27182817E1, ~0.11754944E~37) = 0.27182817E1 +- (0.27182817E1, ~0.11754944E~37) = 0.27182817E1 +/ (0.27182817E1, ~0.11754944E~37) = ~0.23124584E39 +nextAfter (0.27182817E1, ~0.11754944E~37) = 0.27182815E1 +rem (0.27182817E1, ~0.11754944E~37) = 0.0 +* (0.27182817E1, ~0.5877472E~38) = ~0.15976624E~37 ++ (0.27182817E1, ~0.5877472E~38) = 0.27182817E1 +- (0.27182817E1, ~0.5877472E~38) = 0.27182817E1 +/ (0.27182817E1, ~0.5877472E~38) = ~inf +nextAfter (0.27182817E1, ~0.5877472E~38) = 0.27182815E1 +rem (0.27182817E1, ~0.5877472E~38) = ~inf +* (0.27182817E1, ~0.1E~44) = ~0.4E~44 ++ (0.27182817E1, ~0.1E~44) = 0.27182817E1 +- (0.27182817E1, ~0.1E~44) = 0.27182817E1 +/ (0.27182817E1, ~0.1E~44) = ~inf +nextAfter (0.27182817E1, ~0.1E~44) = 0.27182815E1 +rem (0.27182817E1, ~0.1E~44) = ~inf +* (0.27182817E1, ~0.0) = ~0.0 ++ (0.27182817E1, ~0.0) = 0.27182817E1 +- (0.27182817E1, ~0.0) = 0.27182817E1 +/ (0.27182817E1, ~0.0) = ~inf +nextAfter (0.27182817E1, ~0.0) = 0.27182815E1 +rem (0.27182817E1, ~0.0) = nan +* (0.27182817E1, inf) = inf ++ (0.27182817E1, inf) = inf +- (0.27182817E1, inf) = ~inf +/ (0.27182817E1, inf) = 0.0 +nextAfter (0.27182817E1, inf) = 0.2718282E1 +rem (0.27182817E1, inf) = 0.27182817E1 +* (0.27182817E1, ~inf) = ~inf ++ (0.27182817E1, ~inf) = ~inf +- (0.27182817E1, ~inf) = inf +/ (0.27182817E1, ~inf) = ~0.0 +nextAfter (0.27182817E1, ~inf) = 0.27182815E1 +rem (0.27182817E1, ~inf) = 0.27182817E1 +* (0.27182817E1, nan) = nan ++ (0.27182817E1, nan) = nan +- (0.27182817E1, nan) = nan +/ (0.27182817E1, nan) = nan +nextAfter (0.27182817E1, nan) = nan +rem (0.27182817E1, nan) = nan +* (0.27182817E1, inf) = inf ++ (0.27182817E1, inf) = inf +- (0.27182817E1, inf) = ~inf +/ (0.27182817E1, inf) = 0.0 +nextAfter (0.27182817E1, inf) = 0.2718282E1 +rem (0.27182817E1, inf) = 0.27182817E1 +* (0.123E1, 0.34028235E39) = inf ++ (0.123E1, 0.34028235E39) = 0.34028235E39 +- (0.123E1, 0.34028235E39) = ~0.34028235E39 +/ (0.123E1, 0.34028235E39) = 0.3614645E~38 +nextAfter (0.123E1, 0.34028235E39) = 0.12300001E1 +rem (0.123E1, 0.34028235E39) = 0.123E1 +* (0.123E1, 0.17014117E39) = 0.20927364E39 ++ (0.123E1, 0.17014117E39) = 0.17014117E39 +- (0.123E1, 0.17014117E39) = ~0.17014117E39 +/ (0.123E1, 0.17014117E39) = 0.722929E~38 +nextAfter (0.123E1, 0.17014117E39) = 0.12300001E1 +rem (0.123E1, 0.17014117E39) = 0.123E1 +* (0.123E1, 0.123E4) = 0.15129E4 ++ (0.123E1, 0.123E4) = 0.123123E4 +- (0.123E1, 0.123E4) = ~0.122877E4 +/ (0.123E1, 0.123E4) = 0.1E~2 +nextAfter (0.123E1, 0.123E4) = 0.12300001E1 +rem (0.123E1, 0.123E4) = 0.123E1 +* (0.123E1, 0.123E2) = 0.15129001E2 ++ (0.123E1, 0.123E2) = 0.13530001E2 +- (0.123E1, 0.123E2) = ~0.1107E2 +/ (0.123E1, 0.123E2) = 0.1 +nextAfter (0.123E1, 0.123E2) = 0.12300001E1 +rem (0.123E1, 0.123E2) = 0.123E1 +* (0.123E1, 0.31415927E1) = 0.3864159E1 ++ (0.123E1, 0.31415927E1) = 0.43715925E1 +- (0.123E1, 0.31415927E1) = ~0.19115927E1 +/ (0.123E1, 0.31415927E1) = 0.39152116 +nextAfter (0.123E1, 0.31415927E1) = 0.12300001E1 +rem (0.123E1, 0.31415927E1) = 0.123E1 +* (0.123E1, 0.27182817E1) = 0.33434865E1 ++ (0.123E1, 0.27182817E1) = 0.39482818E1 +- (0.123E1, 0.27182817E1) = ~0.14882817E1 +/ (0.123E1, 0.27182817E1) = 0.45249173 +nextAfter (0.123E1, 0.27182817E1) = 0.12300001E1 +rem (0.123E1, 0.27182817E1) = 0.123E1 +* (0.123E1, 0.123E1) = 0.15129E1 ++ (0.123E1, 0.123E1) = 0.246E1 +- (0.123E1, 0.123E1) = 0.0 +/ (0.123E1, 0.123E1) = 0.1E1 +nextAfter (0.123E1, 0.123E1) = 0.123E1 +rem (0.123E1, 0.123E1) = 0.0 +* (0.123E1, 0.123) = 0.15129 ++ (0.123E1, 0.123) = 0.1353E1 +- (0.123E1, 0.123) = 0.1107E1 +/ (0.123E1, 0.123) = 0.1E2 +nextAfter (0.123E1, 0.123) = 0.12299999E1 +rem (0.123E1, 0.123) = 0.0 +* (0.123E1, 0.123E~2) = 0.15129001E~2 ++ (0.123E1, 0.123E~2) = 0.123123E1 +- (0.123E1, 0.123E~2) = 0.122877E1 +/ (0.123E1, 0.123E~2) = 0.1E4 +nextAfter (0.123E1, 0.123E~2) = 0.12299999E1 +rem (0.123E1, 0.123E~2) = 0.0 +* (0.123E1, 0.11754944E~37) = 0.14458581E~37 ++ (0.123E1, 0.11754944E~37) = 0.123E1 +- (0.123E1, 0.11754944E~37) = 0.123E1 +/ (0.123E1, 0.11754944E~37) = 0.10463683E39 +nextAfter (0.123E1, 0.11754944E~37) = 0.12299999E1 +rem (0.123E1, 0.11754944E~37) = 0.0 +* (0.123E1, 0.5877472E~38) = 0.722929E~38 ++ (0.123E1, 0.5877472E~38) = 0.123E1 +- (0.123E1, 0.5877472E~38) = 0.123E1 +/ (0.123E1, 0.5877472E~38) = 0.20927366E39 +nextAfter (0.123E1, 0.5877472E~38) = 0.12299999E1 +rem (0.123E1, 0.5877472E~38) = 0.0 +* (0.123E1, 0.1E~44) = 0.1E~44 ++ (0.123E1, 0.1E~44) = 0.123E1 +- (0.123E1, 0.1E~44) = 0.123E1 +/ (0.123E1, 0.1E~44) = inf +nextAfter (0.123E1, 0.1E~44) = 0.12299999E1 +rem (0.123E1, 0.1E~44) = ~inf +* (0.123E1, 0.0) = 0.0 ++ (0.123E1, 0.0) = 0.123E1 +- (0.123E1, 0.0) = 0.123E1 +/ (0.123E1, 0.0) = inf +nextAfter (0.123E1, 0.0) = 0.12299999E1 +rem (0.123E1, 0.0) = nan +* (0.123E1, ~0.34028235E39) = ~inf ++ (0.123E1, ~0.34028235E39) = ~0.34028235E39 +- (0.123E1, ~0.34028235E39) = 0.34028235E39 +/ (0.123E1, ~0.34028235E39) = ~0.3614645E~38 +nextAfter (0.123E1, ~0.34028235E39) = 0.12299999E1 +rem (0.123E1, ~0.34028235E39) = 0.123E1 +* (0.123E1, ~0.17014117E39) = ~0.20927364E39 ++ (0.123E1, ~0.17014117E39) = ~0.17014117E39 +- (0.123E1, ~0.17014117E39) = 0.17014117E39 +/ (0.123E1, ~0.17014117E39) = ~0.722929E~38 +nextAfter (0.123E1, ~0.17014117E39) = 0.12299999E1 +rem (0.123E1, ~0.17014117E39) = 0.123E1 +* (0.123E1, ~0.123E4) = ~0.15129E4 ++ (0.123E1, ~0.123E4) = ~0.122877E4 +- (0.123E1, ~0.123E4) = 0.123123E4 +/ (0.123E1, ~0.123E4) = ~0.1E~2 +nextAfter (0.123E1, ~0.123E4) = 0.12299999E1 +rem (0.123E1, ~0.123E4) = 0.123E1 +* (0.123E1, ~0.123E2) = ~0.15129001E2 ++ (0.123E1, ~0.123E2) = ~0.1107E2 +- (0.123E1, ~0.123E2) = 0.13530001E2 +/ (0.123E1, ~0.123E2) = ~0.1 +nextAfter (0.123E1, ~0.123E2) = 0.12299999E1 +rem (0.123E1, ~0.123E2) = 0.123E1 +* (0.123E1, ~0.31415927E1) = ~0.3864159E1 ++ (0.123E1, ~0.31415927E1) = ~0.19115927E1 +- (0.123E1, ~0.31415927E1) = 0.43715925E1 +/ (0.123E1, ~0.31415927E1) = ~0.39152116 +nextAfter (0.123E1, ~0.31415927E1) = 0.12299999E1 +rem (0.123E1, ~0.31415927E1) = 0.123E1 +* (0.123E1, ~0.27182817E1) = ~0.33434865E1 ++ (0.123E1, ~0.27182817E1) = ~0.14882817E1 +- (0.123E1, ~0.27182817E1) = 0.39482818E1 +/ (0.123E1, ~0.27182817E1) = ~0.45249173 +nextAfter (0.123E1, ~0.27182817E1) = 0.12299999E1 +rem (0.123E1, ~0.27182817E1) = 0.123E1 +* (0.123E1, ~0.123E1) = ~0.15129E1 ++ (0.123E1, ~0.123E1) = 0.0 +- (0.123E1, ~0.123E1) = 0.246E1 +/ (0.123E1, ~0.123E1) = ~0.1E1 +nextAfter (0.123E1, ~0.123E1) = 0.12299999E1 +rem (0.123E1, ~0.123E1) = 0.0 +* (0.123E1, ~0.123) = ~0.15129 ++ (0.123E1, ~0.123) = 0.1107E1 +- (0.123E1, ~0.123) = 0.1353E1 +/ (0.123E1, ~0.123) = ~0.1E2 +nextAfter (0.123E1, ~0.123) = 0.12299999E1 +rem (0.123E1, ~0.123) = 0.0 +* (0.123E1, ~0.123E~2) = ~0.15129001E~2 ++ (0.123E1, ~0.123E~2) = 0.122877E1 +- (0.123E1, ~0.123E~2) = 0.123123E1 +/ (0.123E1, ~0.123E~2) = ~0.1E4 +nextAfter (0.123E1, ~0.123E~2) = 0.12299999E1 +rem (0.123E1, ~0.123E~2) = 0.0 +* (0.123E1, ~0.11754944E~37) = ~0.14458581E~37 ++ (0.123E1, ~0.11754944E~37) = 0.123E1 +- (0.123E1, ~0.11754944E~37) = 0.123E1 +/ (0.123E1, ~0.11754944E~37) = ~0.10463683E39 +nextAfter (0.123E1, ~0.11754944E~37) = 0.12299999E1 +rem (0.123E1, ~0.11754944E~37) = 0.0 +* (0.123E1, ~0.5877472E~38) = ~0.722929E~38 ++ (0.123E1, ~0.5877472E~38) = 0.123E1 +- (0.123E1, ~0.5877472E~38) = 0.123E1 +/ (0.123E1, ~0.5877472E~38) = ~0.20927366E39 +nextAfter (0.123E1, ~0.5877472E~38) = 0.12299999E1 +rem (0.123E1, ~0.5877472E~38) = 0.0 +* (0.123E1, ~0.1E~44) = ~0.1E~44 ++ (0.123E1, ~0.1E~44) = 0.123E1 +- (0.123E1, ~0.1E~44) = 0.123E1 +/ (0.123E1, ~0.1E~44) = ~inf +nextAfter (0.123E1, ~0.1E~44) = 0.12299999E1 +rem (0.123E1, ~0.1E~44) = ~inf +* (0.123E1, ~0.0) = ~0.0 ++ (0.123E1, ~0.0) = 0.123E1 +- (0.123E1, ~0.0) = 0.123E1 +/ (0.123E1, ~0.0) = ~inf +nextAfter (0.123E1, ~0.0) = 0.12299999E1 +rem (0.123E1, ~0.0) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300001E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123E1, ~inf) = ~inf ++ (0.123E1, ~inf) = ~inf +- (0.123E1, ~inf) = inf +/ (0.123E1, ~inf) = ~0.0 +nextAfter (0.123E1, ~inf) = 0.12299999E1 +rem (0.123E1, ~inf) = 0.123E1 +* (0.123E1, nan) = nan ++ (0.123E1, nan) = nan +- (0.123E1, nan) = nan +/ (0.123E1, nan) = nan +nextAfter (0.123E1, nan) = nan +rem (0.123E1, nan) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300001E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123, 0.34028235E39) = 0.4185473E38 ++ (0.123, 0.34028235E39) = 0.34028235E39 +- (0.123, 0.34028235E39) = ~0.34028235E39 +/ (0.123, 0.34028235E39) = 0.361465E~39 +nextAfter (0.123, 0.34028235E39) = 0.12300001 +rem (0.123, 0.34028235E39) = 0.123 +* (0.123, 0.17014117E39) = 0.20927365E38 ++ (0.123, 0.17014117E39) = 0.17014117E39 +- (0.123, 0.17014117E39) = ~0.17014117E39 +/ (0.123, 0.17014117E39) = 0.722928E~39 +nextAfter (0.123, 0.17014117E39) = 0.12300001 +rem (0.123, 0.17014117E39) = 0.123 +* (0.123, 0.123E4) = 0.15129001E3 ++ (0.123, 0.123E4) = 0.1230123E4 +- (0.123, 0.123E4) = ~0.1229877E4 +/ (0.123, 0.123E4) = 0.100000005E~3 +nextAfter (0.123, 0.123E4) = 0.12300001 +rem (0.123, 0.123E4) = 0.123 +* (0.123, 0.123E2) = 0.15129001E1 ++ (0.123, 0.123E2) = 0.12423E2 +- (0.123, 0.123E2) = ~0.12177E2 +/ (0.123, 0.123E2) = 0.1E~1 +nextAfter (0.123, 0.123E2) = 0.12300001 +rem (0.123, 0.123E2) = 0.123 +* (0.123, 0.31415927E1) = 0.38641593 ++ (0.123, 0.31415927E1) = 0.32645926E1 +- (0.123, 0.31415927E1) = ~0.30185928E1 +/ (0.123, 0.31415927E1) = 0.39152116E~1 +nextAfter (0.123, 0.31415927E1) = 0.12300001 +rem (0.123, 0.31415927E1) = 0.123 +* (0.123, 0.27182817E1) = 0.33434868 ++ (0.123, 0.27182817E1) = 0.28412817E1 +- (0.123, 0.27182817E1) = ~0.25952818E1 +/ (0.123, 0.27182817E1) = 0.45249175E~1 +nextAfter (0.123, 0.27182817E1) = 0.12300001 +rem (0.123, 0.27182817E1) = 0.123 +* (0.123, 0.123E1) = 0.15129 ++ (0.123, 0.123E1) = 0.1353E1 +- (0.123, 0.123E1) = ~0.1107E1 +/ (0.123, 0.123E1) = 0.1 +nextAfter (0.123, 0.123E1) = 0.12300001 +rem (0.123, 0.123E1) = 0.123 +* (0.123, 0.123) = 0.15129001E~1 ++ (0.123, 0.123) = 0.246 +- (0.123, 0.123) = 0.0 +/ (0.123, 0.123) = 0.1E1 +nextAfter (0.123, 0.123) = 0.123 +rem (0.123, 0.123) = 0.0 +* (0.123, 0.123E~2) = 0.15129E~3 ++ (0.123, 0.123E~2) = 0.124230005 +- (0.123, 0.123E~2) = 0.12177 +/ (0.123, 0.123E~2) = 0.1E3 +nextAfter (0.123, 0.123E~2) = 0.122999996 +rem (0.123, 0.123E~2) = 0.0 +* (0.123, 0.11754944E~37) = 0.1445858E~38 ++ (0.123, 0.11754944E~37) = 0.123 +- (0.123, 0.11754944E~37) = 0.123 +/ (0.123, 0.11754944E~37) = 0.10463683E38 +nextAfter (0.123, 0.11754944E~37) = 0.122999996 +rem (0.123, 0.11754944E~37) = 0.0 +* (0.123, 0.5877472E~38) = 0.722928E~39 ++ (0.123, 0.5877472E~38) = 0.123 +- (0.123, 0.5877472E~38) = 0.123 +/ (0.123, 0.5877472E~38) = 0.20927366E38 +nextAfter (0.123, 0.5877472E~38) = 0.122999996 +rem (0.123, 0.5877472E~38) = 0.0 +* (0.123, 0.1E~44) = 0.0 ++ (0.123, 0.1E~44) = 0.123 +- (0.123, 0.1E~44) = 0.123 +/ (0.123, 0.1E~44) = inf +nextAfter (0.123, 0.1E~44) = 0.122999996 +rem (0.123, 0.1E~44) = ~inf +* (0.123, 0.0) = 0.0 ++ (0.123, 0.0) = 0.123 +- (0.123, 0.0) = 0.123 +/ (0.123, 0.0) = inf +nextAfter (0.123, 0.0) = 0.122999996 +rem (0.123, 0.0) = nan +* (0.123, ~0.34028235E39) = ~0.4185473E38 ++ (0.123, ~0.34028235E39) = ~0.34028235E39 +- (0.123, ~0.34028235E39) = 0.34028235E39 +/ (0.123, ~0.34028235E39) = ~0.361465E~39 +nextAfter (0.123, ~0.34028235E39) = 0.122999996 +rem (0.123, ~0.34028235E39) = 0.123 +* (0.123, ~0.17014117E39) = ~0.20927365E38 ++ (0.123, ~0.17014117E39) = ~0.17014117E39 +- (0.123, ~0.17014117E39) = 0.17014117E39 +/ (0.123, ~0.17014117E39) = ~0.722928E~39 +nextAfter (0.123, ~0.17014117E39) = 0.122999996 +rem (0.123, ~0.17014117E39) = 0.123 +* (0.123, ~0.123E4) = ~0.15129001E3 ++ (0.123, ~0.123E4) = ~0.1229877E4 +- (0.123, ~0.123E4) = 0.1230123E4 +/ (0.123, ~0.123E4) = ~0.100000005E~3 +nextAfter (0.123, ~0.123E4) = 0.122999996 +rem (0.123, ~0.123E4) = 0.123 +* (0.123, ~0.123E2) = ~0.15129001E1 ++ (0.123, ~0.123E2) = ~0.12177E2 +- (0.123, ~0.123E2) = 0.12423E2 +/ (0.123, ~0.123E2) = ~0.1E~1 +nextAfter (0.123, ~0.123E2) = 0.122999996 +rem (0.123, ~0.123E2) = 0.123 +* (0.123, ~0.31415927E1) = ~0.38641593 ++ (0.123, ~0.31415927E1) = ~0.30185928E1 +- (0.123, ~0.31415927E1) = 0.32645926E1 +/ (0.123, ~0.31415927E1) = ~0.39152116E~1 +nextAfter (0.123, ~0.31415927E1) = 0.122999996 +rem (0.123, ~0.31415927E1) = 0.123 +* (0.123, ~0.27182817E1) = ~0.33434868 ++ (0.123, ~0.27182817E1) = ~0.25952818E1 +- (0.123, ~0.27182817E1) = 0.28412817E1 +/ (0.123, ~0.27182817E1) = ~0.45249175E~1 +nextAfter (0.123, ~0.27182817E1) = 0.122999996 +rem (0.123, ~0.27182817E1) = 0.123 +* (0.123, ~0.123E1) = ~0.15129 ++ (0.123, ~0.123E1) = ~0.1107E1 +- (0.123, ~0.123E1) = 0.1353E1 +/ (0.123, ~0.123E1) = ~0.1 +nextAfter (0.123, ~0.123E1) = 0.122999996 +rem (0.123, ~0.123E1) = 0.123 +* (0.123, ~0.123) = ~0.15129001E~1 ++ (0.123, ~0.123) = 0.0 +- (0.123, ~0.123) = 0.246 +/ (0.123, ~0.123) = ~0.1E1 +nextAfter (0.123, ~0.123) = 0.122999996 +rem (0.123, ~0.123) = 0.0 +* (0.123, ~0.123E~2) = ~0.15129E~3 ++ (0.123, ~0.123E~2) = 0.12177 +- (0.123, ~0.123E~2) = 0.124230005 +/ (0.123, ~0.123E~2) = ~0.1E3 +nextAfter (0.123, ~0.123E~2) = 0.122999996 +rem (0.123, ~0.123E~2) = 0.0 +* (0.123, ~0.11754944E~37) = ~0.1445858E~38 ++ (0.123, ~0.11754944E~37) = 0.123 +- (0.123, ~0.11754944E~37) = 0.123 +/ (0.123, ~0.11754944E~37) = ~0.10463683E38 +nextAfter (0.123, ~0.11754944E~37) = 0.122999996 +rem (0.123, ~0.11754944E~37) = 0.0 +* (0.123, ~0.5877472E~38) = ~0.722928E~39 ++ (0.123, ~0.5877472E~38) = 0.123 +- (0.123, ~0.5877472E~38) = 0.123 +/ (0.123, ~0.5877472E~38) = ~0.20927366E38 +nextAfter (0.123, ~0.5877472E~38) = 0.122999996 +rem (0.123, ~0.5877472E~38) = 0.0 +* (0.123, ~0.1E~44) = ~0.0 ++ (0.123, ~0.1E~44) = 0.123 +- (0.123, ~0.1E~44) = 0.123 +/ (0.123, ~0.1E~44) = ~inf +nextAfter (0.123, ~0.1E~44) = 0.122999996 +rem (0.123, ~0.1E~44) = ~inf +* (0.123, ~0.0) = ~0.0 ++ (0.123, ~0.0) = 0.123 +- (0.123, ~0.0) = 0.123 +/ (0.123, ~0.0) = ~inf +nextAfter (0.123, ~0.0) = 0.122999996 +rem (0.123, ~0.0) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300001 +rem (0.123, inf) = 0.123 +* (0.123, ~inf) = ~inf ++ (0.123, ~inf) = ~inf +- (0.123, ~inf) = inf +/ (0.123, ~inf) = ~0.0 +nextAfter (0.123, ~inf) = 0.122999996 +rem (0.123, ~inf) = 0.123 +* (0.123, nan) = nan ++ (0.123, nan) = nan +- (0.123, nan) = nan +/ (0.123, nan) = nan +nextAfter (0.123, nan) = nan +rem (0.123, nan) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300001 +rem (0.123, inf) = 0.123 +* (0.123E~2, 0.34028235E39) = 0.4185473E36 ++ (0.123E~2, 0.34028235E39) = 0.34028235E39 +- (0.123E~2, 0.34028235E39) = ~0.34028235E39 +/ (0.123E~2, 0.34028235E39) = 0.3614E~41 +nextAfter (0.123E~2, 0.34028235E39) = 0.12300002E~2 +rem (0.123E~2, 0.34028235E39) = 0.123E~2 +* (0.123E~2, 0.17014117E39) = 0.20927364E36 ++ (0.123E~2, 0.17014117E39) = 0.17014117E39 +- (0.123E~2, 0.17014117E39) = ~0.17014117E39 +/ (0.123E~2, 0.17014117E39) = 0.7229E~41 +nextAfter (0.123E~2, 0.17014117E39) = 0.12300002E~2 +rem (0.123E~2, 0.17014117E39) = 0.123E~2 +* (0.123E~2, 0.123E4) = 0.15129001E1 ++ (0.123E~2, 0.123E4) = 0.12300012E4 +- (0.123E~2, 0.123E4) = ~0.12299988E4 +/ (0.123E~2, 0.123E4) = 0.1E~5 +nextAfter (0.123E~2, 0.123E4) = 0.12300002E~2 +rem (0.123E~2, 0.123E4) = 0.123E~2 +* (0.123E~2, 0.123E2) = 0.15129001E~1 ++ (0.123E~2, 0.123E2) = 0.1230123E2 +- (0.123E~2, 0.123E2) = ~0.1229877E2 +/ (0.123E~2, 0.123E2) = 0.100000005E~3 +nextAfter (0.123E~2, 0.123E2) = 0.12300002E~2 +rem (0.123E~2, 0.123E2) = 0.123E~2 +* (0.123E~2, 0.31415927E1) = 0.38641593E~2 ++ (0.123E~2, 0.31415927E1) = 0.31428227E1 +- (0.123E~2, 0.31415927E1) = ~0.31403627E1 +/ (0.123E~2, 0.31415927E1) = 0.39152117E~3 +nextAfter (0.123E~2, 0.31415927E1) = 0.12300002E~2 +rem (0.123E~2, 0.31415927E1) = 0.123E~2 +* (0.123E~2, 0.27182817E1) = 0.33434867E~2 ++ (0.123E~2, 0.27182817E1) = 0.27195117E1 +- (0.123E~2, 0.27182817E1) = ~0.27170517E1 +/ (0.123E~2, 0.27182817E1) = 0.45249175E~3 +nextAfter (0.123E~2, 0.27182817E1) = 0.12300002E~2 +rem (0.123E~2, 0.27182817E1) = 0.123E~2 +* (0.123E~2, 0.123E1) = 0.15129001E~2 ++ (0.123E~2, 0.123E1) = 0.123123E1 +- (0.123E~2, 0.123E1) = ~0.122877E1 +/ (0.123E~2, 0.123E1) = 0.1E~2 +nextAfter (0.123E~2, 0.123E1) = 0.12300002E~2 +rem (0.123E~2, 0.123E1) = 0.123E~2 +* (0.123E~2, 0.123) = 0.15129E~3 ++ (0.123E~2, 0.123) = 0.124230005 +- (0.123E~2, 0.123) = ~0.12177 +/ (0.123E~2, 0.123) = 0.1E~1 +nextAfter (0.123E~2, 0.123) = 0.12300002E~2 +rem (0.123E~2, 0.123) = 0.123E~2 +* (0.123E~2, 0.123E~2) = 0.15129001E~5 ++ (0.123E~2, 0.123E~2) = 0.246E~2 +- (0.123E~2, 0.123E~2) = 0.0 +/ (0.123E~2, 0.123E~2) = 0.1E1 +nextAfter (0.123E~2, 0.123E~2) = 0.123E~2 +rem (0.123E~2, 0.123E~2) = 0.0 +* (0.123E~2, 0.11754944E~37) = 0.14459E~40 ++ (0.123E~2, 0.11754944E~37) = 0.123E~2 +- (0.123E~2, 0.11754944E~37) = 0.123E~2 +/ (0.123E~2, 0.11754944E~37) = 0.10463683E36 +nextAfter (0.123E~2, 0.11754944E~37) = 0.12299999E~2 +rem (0.123E~2, 0.11754944E~37) = 0.0 +* (0.123E~2, 0.5877472E~38) = 0.7229E~41 ++ (0.123E~2, 0.5877472E~38) = 0.123E~2 +- (0.123E~2, 0.5877472E~38) = 0.123E~2 +/ (0.123E~2, 0.5877472E~38) = 0.20927366E36 +nextAfter (0.123E~2, 0.5877472E~38) = 0.12299999E~2 +rem (0.123E~2, 0.5877472E~38) = 0.0 +* (0.123E~2, 0.1E~44) = 0.0 ++ (0.123E~2, 0.1E~44) = 0.123E~2 +- (0.123E~2, 0.1E~44) = 0.123E~2 +/ (0.123E~2, 0.1E~44) = inf +nextAfter (0.123E~2, 0.1E~44) = 0.12299999E~2 +rem (0.123E~2, 0.1E~44) = ~inf +* (0.123E~2, 0.0) = 0.0 ++ (0.123E~2, 0.0) = 0.123E~2 +- (0.123E~2, 0.0) = 0.123E~2 +/ (0.123E~2, 0.0) = inf +nextAfter (0.123E~2, 0.0) = 0.12299999E~2 +rem (0.123E~2, 0.0) = nan +* (0.123E~2, ~0.34028235E39) = ~0.4185473E36 ++ (0.123E~2, ~0.34028235E39) = ~0.34028235E39 +- (0.123E~2, ~0.34028235E39) = 0.34028235E39 +/ (0.123E~2, ~0.34028235E39) = ~0.3614E~41 +nextAfter (0.123E~2, ~0.34028235E39) = 0.12299999E~2 +rem (0.123E~2, ~0.34028235E39) = 0.123E~2 +* (0.123E~2, ~0.17014117E39) = ~0.20927364E36 ++ (0.123E~2, ~0.17014117E39) = ~0.17014117E39 +- (0.123E~2, ~0.17014117E39) = 0.17014117E39 +/ (0.123E~2, ~0.17014117E39) = ~0.7229E~41 +nextAfter (0.123E~2, ~0.17014117E39) = 0.12299999E~2 +rem (0.123E~2, ~0.17014117E39) = 0.123E~2 +* (0.123E~2, ~0.123E4) = ~0.15129001E1 ++ (0.123E~2, ~0.123E4) = ~0.12299988E4 +- (0.123E~2, ~0.123E4) = 0.12300012E4 +/ (0.123E~2, ~0.123E4) = ~0.1E~5 +nextAfter (0.123E~2, ~0.123E4) = 0.12299999E~2 +rem (0.123E~2, ~0.123E4) = 0.123E~2 +* (0.123E~2, ~0.123E2) = ~0.15129001E~1 ++ (0.123E~2, ~0.123E2) = ~0.1229877E2 +- (0.123E~2, ~0.123E2) = 0.1230123E2 +/ (0.123E~2, ~0.123E2) = ~0.100000005E~3 +nextAfter (0.123E~2, ~0.123E2) = 0.12299999E~2 +rem (0.123E~2, ~0.123E2) = 0.123E~2 +* (0.123E~2, ~0.31415927E1) = ~0.38641593E~2 ++ (0.123E~2, ~0.31415927E1) = ~0.31403627E1 +- (0.123E~2, ~0.31415927E1) = 0.31428227E1 +/ (0.123E~2, ~0.31415927E1) = ~0.39152117E~3 +nextAfter (0.123E~2, ~0.31415927E1) = 0.12299999E~2 +rem (0.123E~2, ~0.31415927E1) = 0.123E~2 +* (0.123E~2, ~0.27182817E1) = ~0.33434867E~2 ++ (0.123E~2, ~0.27182817E1) = ~0.27170517E1 +- (0.123E~2, ~0.27182817E1) = 0.27195117E1 +/ (0.123E~2, ~0.27182817E1) = ~0.45249175E~3 +nextAfter (0.123E~2, ~0.27182817E1) = 0.12299999E~2 +rem (0.123E~2, ~0.27182817E1) = 0.123E~2 +* (0.123E~2, ~0.123E1) = ~0.15129001E~2 ++ (0.123E~2, ~0.123E1) = ~0.122877E1 +- (0.123E~2, ~0.123E1) = 0.123123E1 +/ (0.123E~2, ~0.123E1) = ~0.1E~2 +nextAfter (0.123E~2, ~0.123E1) = 0.12299999E~2 +rem (0.123E~2, ~0.123E1) = 0.123E~2 +* (0.123E~2, ~0.123) = ~0.15129E~3 ++ (0.123E~2, ~0.123) = ~0.12177 +- (0.123E~2, ~0.123) = 0.124230005 +/ (0.123E~2, ~0.123) = ~0.1E~1 +nextAfter (0.123E~2, ~0.123) = 0.12299999E~2 +rem (0.123E~2, ~0.123) = 0.123E~2 +* (0.123E~2, ~0.123E~2) = ~0.15129001E~5 ++ (0.123E~2, ~0.123E~2) = 0.0 +- (0.123E~2, ~0.123E~2) = 0.246E~2 +/ (0.123E~2, ~0.123E~2) = ~0.1E1 +nextAfter (0.123E~2, ~0.123E~2) = 0.12299999E~2 +rem (0.123E~2, ~0.123E~2) = 0.0 +* (0.123E~2, ~0.11754944E~37) = ~0.14459E~40 ++ (0.123E~2, ~0.11754944E~37) = 0.123E~2 +- (0.123E~2, ~0.11754944E~37) = 0.123E~2 +/ (0.123E~2, ~0.11754944E~37) = ~0.10463683E36 +nextAfter (0.123E~2, ~0.11754944E~37) = 0.12299999E~2 +rem (0.123E~2, ~0.11754944E~37) = 0.0 +* (0.123E~2, ~0.5877472E~38) = ~0.7229E~41 ++ (0.123E~2, ~0.5877472E~38) = 0.123E~2 +- (0.123E~2, ~0.5877472E~38) = 0.123E~2 +/ (0.123E~2, ~0.5877472E~38) = ~0.20927366E36 +nextAfter (0.123E~2, ~0.5877472E~38) = 0.12299999E~2 +rem (0.123E~2, ~0.5877472E~38) = 0.0 +* (0.123E~2, ~0.1E~44) = ~0.0 ++ (0.123E~2, ~0.1E~44) = 0.123E~2 +- (0.123E~2, ~0.1E~44) = 0.123E~2 +/ (0.123E~2, ~0.1E~44) = ~inf +nextAfter (0.123E~2, ~0.1E~44) = 0.12299999E~2 +rem (0.123E~2, ~0.1E~44) = ~inf +* (0.123E~2, ~0.0) = ~0.0 ++ (0.123E~2, ~0.0) = 0.123E~2 +- (0.123E~2, ~0.0) = 0.123E~2 +/ (0.123E~2, ~0.0) = ~inf +nextAfter (0.123E~2, ~0.0) = 0.12299999E~2 +rem (0.123E~2, ~0.0) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.123E~2, ~inf) = ~inf ++ (0.123E~2, ~inf) = ~inf +- (0.123E~2, ~inf) = inf +/ (0.123E~2, ~inf) = ~0.0 +nextAfter (0.123E~2, ~inf) = 0.12299999E~2 +rem (0.123E~2, ~inf) = 0.123E~2 +* (0.123E~2, nan) = nan ++ (0.123E~2, nan) = nan +- (0.123E~2, nan) = nan +/ (0.123E~2, nan) = nan +nextAfter (0.123E~2, nan) = nan +rem (0.123E~2, nan) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.11754944E~37, 0.34028235E39) = 0.39999998E1 ++ (0.11754944E~37, 0.34028235E39) = 0.34028235E39 +- (0.11754944E~37, 0.34028235E39) = ~0.34028235E39 +/ (0.11754944E~37, 0.34028235E39) = 0.0 +nextAfter (0.11754944E~37, 0.34028235E39) = 0.11754945E~37 +rem (0.11754944E~37, 0.34028235E39) = 0.11754944E~37 +* (0.11754944E~37, 0.17014117E39) = 0.19999999E1 ++ (0.11754944E~37, 0.17014117E39) = 0.17014117E39 +- (0.11754944E~37, 0.17014117E39) = ~0.17014117E39 +/ (0.11754944E~37, 0.17014117E39) = 0.0 +nextAfter (0.11754944E~37, 0.17014117E39) = 0.11754945E~37 +rem (0.11754944E~37, 0.17014117E39) = 0.11754944E~37 +* (0.11754944E~37, 0.123E4) = 0.1445858E~34 ++ (0.11754944E~37, 0.123E4) = 0.123E4 +- (0.11754944E~37, 0.123E4) = ~0.123E4 +/ (0.11754944E~37, 0.123E4) = 0.9557E~41 +nextAfter (0.11754944E~37, 0.123E4) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E4) = 0.11754944E~37 +* (0.11754944E~37, 0.123E2) = 0.14458581E~36 ++ (0.11754944E~37, 0.123E2) = 0.123E2 +- (0.11754944E~37, 0.123E2) = ~0.123E2 +/ (0.11754944E~37, 0.123E2) = 0.955687E~39 +nextAfter (0.11754944E~37, 0.123E2) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E2) = 0.11754944E~37 +* (0.11754944E~37, 0.31415927E1) = 0.36929245E~37 ++ (0.11754944E~37, 0.31415927E1) = 0.31415927E1 +- (0.11754944E~37, 0.31415927E1) = ~0.31415927E1 +/ (0.11754944E~37, 0.31415927E1) = 0.3741715E~38 +nextAfter (0.11754944E~37, 0.31415927E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.31415927E1) = 0.11754944E~37 +* (0.11754944E~37, 0.27182817E1) = 0.31953248E~37 ++ (0.11754944E~37, 0.27182817E1) = 0.27182817E1 +- (0.11754944E~37, 0.27182817E1) = ~0.27182817E1 +/ (0.11754944E~37, 0.27182817E1) = 0.4324403E~38 +nextAfter (0.11754944E~37, 0.27182817E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.27182817E1) = 0.11754944E~37 +* (0.11754944E~37, 0.123E1) = 0.14458581E~37 ++ (0.11754944E~37, 0.123E1) = 0.123E1 +- (0.11754944E~37, 0.123E1) = ~0.123E1 +/ (0.11754944E~37, 0.123E1) = 0.9556864E~38 +nextAfter (0.11754944E~37, 0.123E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E1) = 0.11754944E~37 +* (0.11754944E~37, 0.123) = 0.1445858E~38 ++ (0.11754944E~37, 0.123) = 0.123 +- (0.11754944E~37, 0.123) = ~0.123 +/ (0.11754944E~37, 0.123) = 0.9556864E~37 +nextAfter (0.11754944E~37, 0.123) = 0.11754945E~37 +rem (0.11754944E~37, 0.123) = 0.11754944E~37 +* (0.11754944E~37, 0.123E~2) = 0.14459E~40 ++ (0.11754944E~37, 0.123E~2) = 0.123E~2 +- (0.11754944E~37, 0.123E~2) = ~0.123E~2 +/ (0.11754944E~37, 0.123E~2) = 0.95568645E~35 +nextAfter (0.11754944E~37, 0.123E~2) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E~2) = 0.11754944E~37 +* (0.11754944E~37, 0.11754944E~37) = 0.0 ++ (0.11754944E~37, 0.11754944E~37) = 0.23509887E~37 +- (0.11754944E~37, 0.11754944E~37) = 0.0 +/ (0.11754944E~37, 0.11754944E~37) = 0.1E1 +nextAfter (0.11754944E~37, 0.11754944E~37) = 0.11754944E~37 +rem (0.11754944E~37, 0.11754944E~37) = 0.0 +* (0.11754944E~37, 0.5877472E~38) = 0.0 ++ (0.11754944E~37, 0.5877472E~38) = 0.17632415E~37 +- (0.11754944E~37, 0.5877472E~38) = 0.5877472E~38 +/ (0.11754944E~37, 0.5877472E~38) = 0.2E1 +nextAfter (0.11754944E~37, 0.5877472E~38) = 0.11754942E~37 +rem (0.11754944E~37, 0.5877472E~38) = 0.0 +* (0.11754944E~37, 0.1E~44) = 0.0 ++ (0.11754944E~37, 0.1E~44) = 0.11754945E~37 +- (0.11754944E~37, 0.1E~44) = 0.11754942E~37 +/ (0.11754944E~37, 0.1E~44) = 0.8388608E7 +nextAfter (0.11754944E~37, 0.1E~44) = 0.11754942E~37 +rem (0.11754944E~37, 0.1E~44) = 0.0 +* (0.11754944E~37, 0.0) = 0.0 ++ (0.11754944E~37, 0.0) = 0.11754944E~37 +- (0.11754944E~37, 0.0) = 0.11754944E~37 +/ (0.11754944E~37, 0.0) = inf +nextAfter (0.11754944E~37, 0.0) = 0.11754942E~37 +rem (0.11754944E~37, 0.0) = nan +* (0.11754944E~37, ~0.34028235E39) = ~0.39999998E1 ++ (0.11754944E~37, ~0.34028235E39) = ~0.34028235E39 +- (0.11754944E~37, ~0.34028235E39) = 0.34028235E39 +/ (0.11754944E~37, ~0.34028235E39) = ~0.0 +nextAfter (0.11754944E~37, ~0.34028235E39) = 0.11754942E~37 +rem (0.11754944E~37, ~0.34028235E39) = 0.11754944E~37 +* (0.11754944E~37, ~0.17014117E39) = ~0.19999999E1 ++ (0.11754944E~37, ~0.17014117E39) = ~0.17014117E39 +- (0.11754944E~37, ~0.17014117E39) = 0.17014117E39 +/ (0.11754944E~37, ~0.17014117E39) = ~0.0 +nextAfter (0.11754944E~37, ~0.17014117E39) = 0.11754942E~37 +rem (0.11754944E~37, ~0.17014117E39) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E4) = ~0.1445858E~34 ++ (0.11754944E~37, ~0.123E4) = ~0.123E4 +- (0.11754944E~37, ~0.123E4) = 0.123E4 +/ (0.11754944E~37, ~0.123E4) = ~0.9557E~41 +nextAfter (0.11754944E~37, ~0.123E4) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E4) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E2) = ~0.14458581E~36 ++ (0.11754944E~37, ~0.123E2) = ~0.123E2 +- (0.11754944E~37, ~0.123E2) = 0.123E2 +/ (0.11754944E~37, ~0.123E2) = ~0.955687E~39 +nextAfter (0.11754944E~37, ~0.123E2) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E2) = 0.11754944E~37 +* (0.11754944E~37, ~0.31415927E1) = ~0.36929245E~37 ++ (0.11754944E~37, ~0.31415927E1) = ~0.31415927E1 +- (0.11754944E~37, ~0.31415927E1) = 0.31415927E1 +/ (0.11754944E~37, ~0.31415927E1) = ~0.3741715E~38 +nextAfter (0.11754944E~37, ~0.31415927E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.31415927E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.27182817E1) = ~0.31953248E~37 ++ (0.11754944E~37, ~0.27182817E1) = ~0.27182817E1 +- (0.11754944E~37, ~0.27182817E1) = 0.27182817E1 +/ (0.11754944E~37, ~0.27182817E1) = ~0.4324403E~38 +nextAfter (0.11754944E~37, ~0.27182817E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.27182817E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E1) = ~0.14458581E~37 ++ (0.11754944E~37, ~0.123E1) = ~0.123E1 +- (0.11754944E~37, ~0.123E1) = 0.123E1 +/ (0.11754944E~37, ~0.123E1) = ~0.9556864E~38 +nextAfter (0.11754944E~37, ~0.123E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.123) = ~0.1445858E~38 ++ (0.11754944E~37, ~0.123) = ~0.123 +- (0.11754944E~37, ~0.123) = 0.123 +/ (0.11754944E~37, ~0.123) = ~0.9556864E~37 +nextAfter (0.11754944E~37, ~0.123) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E~2) = ~0.14459E~40 ++ (0.11754944E~37, ~0.123E~2) = ~0.123E~2 +- (0.11754944E~37, ~0.123E~2) = 0.123E~2 +/ (0.11754944E~37, ~0.123E~2) = ~0.95568645E~35 +nextAfter (0.11754944E~37, ~0.123E~2) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E~2) = 0.11754944E~37 +* (0.11754944E~37, ~0.11754944E~37) = ~0.0 ++ (0.11754944E~37, ~0.11754944E~37) = 0.0 +- (0.11754944E~37, ~0.11754944E~37) = 0.23509887E~37 +/ (0.11754944E~37, ~0.11754944E~37) = ~0.1E1 +nextAfter (0.11754944E~37, ~0.11754944E~37) = 0.11754942E~37 +rem (0.11754944E~37, ~0.11754944E~37) = 0.0 +* (0.11754944E~37, ~0.5877472E~38) = ~0.0 ++ (0.11754944E~37, ~0.5877472E~38) = 0.5877472E~38 +- (0.11754944E~37, ~0.5877472E~38) = 0.17632415E~37 +/ (0.11754944E~37, ~0.5877472E~38) = ~0.2E1 +nextAfter (0.11754944E~37, ~0.5877472E~38) = 0.11754942E~37 +rem (0.11754944E~37, ~0.5877472E~38) = 0.0 +* (0.11754944E~37, ~0.1E~44) = ~0.0 ++ (0.11754944E~37, ~0.1E~44) = 0.11754942E~37 +- (0.11754944E~37, ~0.1E~44) = 0.11754945E~37 +/ (0.11754944E~37, ~0.1E~44) = ~0.8388608E7 +nextAfter (0.11754944E~37, ~0.1E~44) = 0.11754942E~37 +rem (0.11754944E~37, ~0.1E~44) = 0.0 +* (0.11754944E~37, ~0.0) = ~0.0 ++ (0.11754944E~37, ~0.0) = 0.11754944E~37 +- (0.11754944E~37, ~0.0) = 0.11754944E~37 +/ (0.11754944E~37, ~0.0) = ~inf +nextAfter (0.11754944E~37, ~0.0) = 0.11754942E~37 +rem (0.11754944E~37, ~0.0) = nan +* (0.11754944E~37, inf) = inf ++ (0.11754944E~37, inf) = inf +- (0.11754944E~37, inf) = ~inf +/ (0.11754944E~37, inf) = 0.0 +nextAfter (0.11754944E~37, inf) = 0.11754945E~37 +rem (0.11754944E~37, inf) = 0.11754944E~37 +* (0.11754944E~37, ~inf) = ~inf ++ (0.11754944E~37, ~inf) = ~inf +- (0.11754944E~37, ~inf) = inf +/ (0.11754944E~37, ~inf) = ~0.0 +nextAfter (0.11754944E~37, ~inf) = 0.11754942E~37 +rem (0.11754944E~37, ~inf) = 0.11754944E~37 +* (0.11754944E~37, nan) = nan ++ (0.11754944E~37, nan) = nan +- (0.11754944E~37, nan) = nan +/ (0.11754944E~37, nan) = nan +nextAfter (0.11754944E~37, nan) = nan +rem (0.11754944E~37, nan) = nan +* (0.11754944E~37, inf) = inf ++ (0.11754944E~37, inf) = inf +- (0.11754944E~37, inf) = ~inf +/ (0.11754944E~37, inf) = 0.0 +nextAfter (0.11754944E~37, inf) = 0.11754945E~37 +rem (0.11754944E~37, inf) = 0.11754944E~37 +* (0.5877472E~38, 0.34028235E39) = 0.19999999E1 ++ (0.5877472E~38, 0.34028235E39) = 0.34028235E39 +- (0.5877472E~38, 0.34028235E39) = ~0.34028235E39 +/ (0.5877472E~38, 0.34028235E39) = 0.0 +nextAfter (0.5877472E~38, 0.34028235E39) = 0.5877473E~38 +rem (0.5877472E~38, 0.34028235E39) = 0.5877472E~38 +* (0.5877472E~38, 0.17014117E39) = 0.99999994 ++ (0.5877472E~38, 0.17014117E39) = 0.17014117E39 +- (0.5877472E~38, 0.17014117E39) = ~0.17014117E39 +/ (0.5877472E~38, 0.17014117E39) = 0.0 +nextAfter (0.5877472E~38, 0.17014117E39) = 0.5877473E~38 +rem (0.5877472E~38, 0.17014117E39) = 0.5877472E~38 +* (0.5877472E~38, 0.123E4) = 0.722929E~35 ++ (0.5877472E~38, 0.123E4) = 0.123E4 +- (0.5877472E~38, 0.123E4) = ~0.123E4 +/ (0.5877472E~38, 0.123E4) = 0.4778E~41 +nextAfter (0.5877472E~38, 0.123E4) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E4) = 0.5877472E~38 +* (0.5877472E~38, 0.123E2) = 0.72292904E~37 ++ (0.5877472E~38, 0.123E2) = 0.123E2 +- (0.5877472E~38, 0.123E2) = ~0.123E2 +/ (0.5877472E~38, 0.123E2) = 0.477843E~39 +nextAfter (0.5877472E~38, 0.123E2) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E2) = 0.5877472E~38 +* (0.5877472E~38, 0.31415927E1) = 0.18464623E~37 ++ (0.5877472E~38, 0.31415927E1) = 0.31415927E1 +- (0.5877472E~38, 0.31415927E1) = ~0.31415927E1 +/ (0.5877472E~38, 0.31415927E1) = 0.1870857E~38 +nextAfter (0.5877472E~38, 0.31415927E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.31415927E1) = 0.5877472E~38 +* (0.5877472E~38, 0.27182817E1) = 0.15976624E~37 ++ (0.5877472E~38, 0.27182817E1) = 0.27182817E1 +- (0.5877472E~38, 0.27182817E1) = ~0.27182817E1 +/ (0.5877472E~38, 0.27182817E1) = 0.2162201E~38 +nextAfter (0.5877472E~38, 0.27182817E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.27182817E1) = 0.5877472E~38 +* (0.5877472E~38, 0.123E1) = 0.722929E~38 ++ (0.5877472E~38, 0.123E1) = 0.123E1 +- (0.5877472E~38, 0.123E1) = ~0.123E1 +/ (0.5877472E~38, 0.123E1) = 0.4778432E~38 +nextAfter (0.5877472E~38, 0.123E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E1) = 0.5877472E~38 +* (0.5877472E~38, 0.123) = 0.722928E~39 ++ (0.5877472E~38, 0.123) = 0.123 +- (0.5877472E~38, 0.123) = ~0.123 +/ (0.5877472E~38, 0.123) = 0.4778432E~37 +nextAfter (0.5877472E~38, 0.123) = 0.5877473E~38 +rem (0.5877472E~38, 0.123) = 0.5877472E~38 +* (0.5877472E~38, 0.123E~2) = 0.7229E~41 ++ (0.5877472E~38, 0.123E~2) = 0.123E~2 +- (0.5877472E~38, 0.123E~2) = ~0.123E~2 +/ (0.5877472E~38, 0.123E~2) = 0.47784322E~35 +nextAfter (0.5877472E~38, 0.123E~2) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E~2) = 0.5877472E~38 +* (0.5877472E~38, 0.11754944E~37) = 0.0 ++ (0.5877472E~38, 0.11754944E~37) = 0.17632415E~37 +- (0.5877472E~38, 0.11754944E~37) = ~0.5877472E~38 +/ (0.5877472E~38, 0.11754944E~37) = 0.5 +nextAfter (0.5877472E~38, 0.11754944E~37) = 0.5877473E~38 +rem (0.5877472E~38, 0.11754944E~37) = 0.5877472E~38 +* (0.5877472E~38, 0.5877472E~38) = 0.0 ++ (0.5877472E~38, 0.5877472E~38) = 0.11754944E~37 +- (0.5877472E~38, 0.5877472E~38) = 0.0 +/ (0.5877472E~38, 0.5877472E~38) = 0.1E1 +nextAfter (0.5877472E~38, 0.5877472E~38) = 0.5877472E~38 +rem (0.5877472E~38, 0.5877472E~38) = 0.0 +* (0.5877472E~38, 0.1E~44) = 0.0 ++ (0.5877472E~38, 0.1E~44) = 0.5877473E~38 +- (0.5877472E~38, 0.1E~44) = 0.587747E~38 +/ (0.5877472E~38, 0.1E~44) = 0.4194304E7 +nextAfter (0.5877472E~38, 0.1E~44) = 0.587747E~38 +rem (0.5877472E~38, 0.1E~44) = 0.0 +* (0.5877472E~38, 0.0) = 0.0 ++ (0.5877472E~38, 0.0) = 0.5877472E~38 +- (0.5877472E~38, 0.0) = 0.5877472E~38 +/ (0.5877472E~38, 0.0) = inf +nextAfter (0.5877472E~38, 0.0) = 0.587747E~38 +rem (0.5877472E~38, 0.0) = nan +* (0.5877472E~38, ~0.34028235E39) = ~0.19999999E1 ++ (0.5877472E~38, ~0.34028235E39) = ~0.34028235E39 +- (0.5877472E~38, ~0.34028235E39) = 0.34028235E39 +/ (0.5877472E~38, ~0.34028235E39) = ~0.0 +nextAfter (0.5877472E~38, ~0.34028235E39) = 0.587747E~38 +rem (0.5877472E~38, ~0.34028235E39) = 0.5877472E~38 +* (0.5877472E~38, ~0.17014117E39) = ~0.99999994 ++ (0.5877472E~38, ~0.17014117E39) = ~0.17014117E39 +- (0.5877472E~38, ~0.17014117E39) = 0.17014117E39 +/ (0.5877472E~38, ~0.17014117E39) = ~0.0 +nextAfter (0.5877472E~38, ~0.17014117E39) = 0.587747E~38 +rem (0.5877472E~38, ~0.17014117E39) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E4) = ~0.722929E~35 ++ (0.5877472E~38, ~0.123E4) = ~0.123E4 +- (0.5877472E~38, ~0.123E4) = 0.123E4 +/ (0.5877472E~38, ~0.123E4) = ~0.4778E~41 +nextAfter (0.5877472E~38, ~0.123E4) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E4) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E2) = ~0.72292904E~37 ++ (0.5877472E~38, ~0.123E2) = ~0.123E2 +- (0.5877472E~38, ~0.123E2) = 0.123E2 +/ (0.5877472E~38, ~0.123E2) = ~0.477843E~39 +nextAfter (0.5877472E~38, ~0.123E2) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E2) = 0.5877472E~38 +* (0.5877472E~38, ~0.31415927E1) = ~0.18464623E~37 ++ (0.5877472E~38, ~0.31415927E1) = ~0.31415927E1 +- (0.5877472E~38, ~0.31415927E1) = 0.31415927E1 +/ (0.5877472E~38, ~0.31415927E1) = ~0.1870857E~38 +nextAfter (0.5877472E~38, ~0.31415927E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.31415927E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.27182817E1) = ~0.15976624E~37 ++ (0.5877472E~38, ~0.27182817E1) = ~0.27182817E1 +- (0.5877472E~38, ~0.27182817E1) = 0.27182817E1 +/ (0.5877472E~38, ~0.27182817E1) = ~0.2162201E~38 +nextAfter (0.5877472E~38, ~0.27182817E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.27182817E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E1) = ~0.722929E~38 ++ (0.5877472E~38, ~0.123E1) = ~0.123E1 +- (0.5877472E~38, ~0.123E1) = 0.123E1 +/ (0.5877472E~38, ~0.123E1) = ~0.4778432E~38 +nextAfter (0.5877472E~38, ~0.123E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.123) = ~0.722928E~39 ++ (0.5877472E~38, ~0.123) = ~0.123 +- (0.5877472E~38, ~0.123) = 0.123 +/ (0.5877472E~38, ~0.123) = ~0.4778432E~37 +nextAfter (0.5877472E~38, ~0.123) = 0.587747E~38 +rem (0.5877472E~38, ~0.123) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E~2) = ~0.7229E~41 ++ (0.5877472E~38, ~0.123E~2) = ~0.123E~2 +- (0.5877472E~38, ~0.123E~2) = 0.123E~2 +/ (0.5877472E~38, ~0.123E~2) = ~0.47784322E~35 +nextAfter (0.5877472E~38, ~0.123E~2) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E~2) = 0.5877472E~38 +* (0.5877472E~38, ~0.11754944E~37) = ~0.0 ++ (0.5877472E~38, ~0.11754944E~37) = ~0.5877472E~38 +- (0.5877472E~38, ~0.11754944E~37) = 0.17632415E~37 +/ (0.5877472E~38, ~0.11754944E~37) = ~0.5 +nextAfter (0.5877472E~38, ~0.11754944E~37) = 0.587747E~38 +rem (0.5877472E~38, ~0.11754944E~37) = 0.5877472E~38 +* (0.5877472E~38, ~0.5877472E~38) = ~0.0 ++ (0.5877472E~38, ~0.5877472E~38) = 0.0 +- (0.5877472E~38, ~0.5877472E~38) = 0.11754944E~37 +/ (0.5877472E~38, ~0.5877472E~38) = ~0.1E1 +nextAfter (0.5877472E~38, ~0.5877472E~38) = 0.587747E~38 +rem (0.5877472E~38, ~0.5877472E~38) = 0.0 +* (0.5877472E~38, ~0.1E~44) = ~0.0 ++ (0.5877472E~38, ~0.1E~44) = 0.587747E~38 +- (0.5877472E~38, ~0.1E~44) = 0.5877473E~38 +/ (0.5877472E~38, ~0.1E~44) = ~0.4194304E7 +nextAfter (0.5877472E~38, ~0.1E~44) = 0.587747E~38 +rem (0.5877472E~38, ~0.1E~44) = 0.0 +* (0.5877472E~38, ~0.0) = ~0.0 ++ (0.5877472E~38, ~0.0) = 0.5877472E~38 +- (0.5877472E~38, ~0.0) = 0.5877472E~38 +/ (0.5877472E~38, ~0.0) = ~inf +nextAfter (0.5877472E~38, ~0.0) = 0.587747E~38 +rem (0.5877472E~38, ~0.0) = nan +* (0.5877472E~38, inf) = inf ++ (0.5877472E~38, inf) = inf +- (0.5877472E~38, inf) = ~inf +/ (0.5877472E~38, inf) = 0.0 +nextAfter (0.5877472E~38, inf) = 0.5877473E~38 +rem (0.5877472E~38, inf) = 0.5877472E~38 +* (0.5877472E~38, ~inf) = ~inf ++ (0.5877472E~38, ~inf) = ~inf +- (0.5877472E~38, ~inf) = inf +/ (0.5877472E~38, ~inf) = ~0.0 +nextAfter (0.5877472E~38, ~inf) = 0.587747E~38 +rem (0.5877472E~38, ~inf) = 0.5877472E~38 +* (0.5877472E~38, nan) = nan ++ (0.5877472E~38, nan) = nan +- (0.5877472E~38, nan) = nan +/ (0.5877472E~38, nan) = nan +nextAfter (0.5877472E~38, nan) = nan +rem (0.5877472E~38, nan) = nan +* (0.5877472E~38, inf) = inf ++ (0.5877472E~38, inf) = inf +- (0.5877472E~38, inf) = ~inf +/ (0.5877472E~38, inf) = 0.0 +nextAfter (0.5877472E~38, inf) = 0.5877473E~38 +rem (0.5877472E~38, inf) = 0.5877472E~38 +* (0.1E~44, 0.34028235E39) = 0.47683713E~6 ++ (0.1E~44, 0.34028235E39) = 0.34028235E39 +- (0.1E~44, 0.34028235E39) = ~0.34028235E39 +/ (0.1E~44, 0.34028235E39) = 0.0 +nextAfter (0.1E~44, 0.34028235E39) = 0.3E~44 +rem (0.1E~44, 0.34028235E39) = 0.1E~44 +* (0.1E~44, 0.17014117E39) = 0.23841856E~6 ++ (0.1E~44, 0.17014117E39) = 0.17014117E39 +- (0.1E~44, 0.17014117E39) = ~0.17014117E39 +/ (0.1E~44, 0.17014117E39) = 0.0 +nextAfter (0.1E~44, 0.17014117E39) = 0.3E~44 +rem (0.1E~44, 0.17014117E39) = 0.1E~44 +* (0.1E~44, 0.123E4) = 0.1724E~41 ++ (0.1E~44, 0.123E4) = 0.123E4 +- (0.1E~44, 0.123E4) = ~0.123E4 +/ (0.1E~44, 0.123E4) = 0.0 +nextAfter (0.1E~44, 0.123E4) = 0.3E~44 +rem (0.1E~44, 0.123E4) = 0.1E~44 +* (0.1E~44, 0.123E2) = 0.17E~43 ++ (0.1E~44, 0.123E2) = 0.123E2 +- (0.1E~44, 0.123E2) = ~0.123E2 +/ (0.1E~44, 0.123E2) = 0.0 +nextAfter (0.1E~44, 0.123E2) = 0.3E~44 +rem (0.1E~44, 0.123E2) = 0.1E~44 +* (0.1E~44, 0.31415927E1) = 0.4E~44 ++ (0.1E~44, 0.31415927E1) = 0.31415927E1 +- (0.1E~44, 0.31415927E1) = ~0.31415927E1 +/ (0.1E~44, 0.31415927E1) = 0.0 +nextAfter (0.1E~44, 0.31415927E1) = 0.3E~44 +rem (0.1E~44, 0.31415927E1) = 0.1E~44 +* (0.1E~44, 0.27182817E1) = 0.4E~44 ++ (0.1E~44, 0.27182817E1) = 0.27182817E1 +- (0.1E~44, 0.27182817E1) = ~0.27182817E1 +/ (0.1E~44, 0.27182817E1) = 0.0 +nextAfter (0.1E~44, 0.27182817E1) = 0.3E~44 +rem (0.1E~44, 0.27182817E1) = 0.1E~44 +* (0.1E~44, 0.123E1) = 0.1E~44 ++ (0.1E~44, 0.123E1) = 0.123E1 +- (0.1E~44, 0.123E1) = ~0.123E1 +/ (0.1E~44, 0.123E1) = 0.1E~44 +nextAfter (0.1E~44, 0.123E1) = 0.3E~44 +rem (0.1E~44, 0.123E1) = 0.1E~44 +* (0.1E~44, 0.123) = 0.0 ++ (0.1E~44, 0.123) = 0.123 +- (0.1E~44, 0.123) = ~0.123 +/ (0.1E~44, 0.123) = 0.11E~43 +nextAfter (0.1E~44, 0.123) = 0.3E~44 +rem (0.1E~44, 0.123) = 0.1E~44 +* (0.1E~44, 0.123E~2) = 0.0 ++ (0.1E~44, 0.123E~2) = 0.123E~2 +- (0.1E~44, 0.123E~2) = ~0.123E~2 +/ (0.1E~44, 0.123E~2) = 0.1139E~41 +nextAfter (0.1E~44, 0.123E~2) = 0.3E~44 +rem (0.1E~44, 0.123E~2) = 0.1E~44 +* (0.1E~44, 0.11754944E~37) = 0.0 ++ (0.1E~44, 0.11754944E~37) = 0.11754945E~37 +- (0.1E~44, 0.11754944E~37) = ~0.11754942E~37 +/ (0.1E~44, 0.11754944E~37) = 0.11920929E~6 +nextAfter (0.1E~44, 0.11754944E~37) = 0.3E~44 +rem (0.1E~44, 0.11754944E~37) = 0.1E~44 +* (0.1E~44, 0.5877472E~38) = 0.0 ++ (0.1E~44, 0.5877472E~38) = 0.5877473E~38 +- (0.1E~44, 0.5877472E~38) = ~0.587747E~38 +/ (0.1E~44, 0.5877472E~38) = 0.23841858E~6 +nextAfter (0.1E~44, 0.5877472E~38) = 0.3E~44 +rem (0.1E~44, 0.5877472E~38) = 0.1E~44 +* (0.1E~44, 0.1E~44) = 0.0 ++ (0.1E~44, 0.1E~44) = 0.3E~44 +- (0.1E~44, 0.1E~44) = 0.0 +/ (0.1E~44, 0.1E~44) = 0.1E1 +nextAfter (0.1E~44, 0.1E~44) = 0.1E~44 +rem (0.1E~44, 0.1E~44) = 0.0 +* (0.1E~44, 0.0) = 0.0 ++ (0.1E~44, 0.0) = 0.1E~44 +- (0.1E~44, 0.0) = 0.1E~44 +/ (0.1E~44, 0.0) = inf +nextAfter (0.1E~44, 0.0) = 0.0 +rem (0.1E~44, 0.0) = nan +* (0.1E~44, ~0.34028235E39) = ~0.47683713E~6 ++ (0.1E~44, ~0.34028235E39) = ~0.34028235E39 +- (0.1E~44, ~0.34028235E39) = 0.34028235E39 +/ (0.1E~44, ~0.34028235E39) = ~0.0 +nextAfter (0.1E~44, ~0.34028235E39) = 0.0 +rem (0.1E~44, ~0.34028235E39) = 0.1E~44 +* (0.1E~44, ~0.17014117E39) = ~0.23841856E~6 ++ (0.1E~44, ~0.17014117E39) = ~0.17014117E39 +- (0.1E~44, ~0.17014117E39) = 0.17014117E39 +/ (0.1E~44, ~0.17014117E39) = ~0.0 +nextAfter (0.1E~44, ~0.17014117E39) = 0.0 +rem (0.1E~44, ~0.17014117E39) = 0.1E~44 +* (0.1E~44, ~0.123E4) = ~0.1724E~41 ++ (0.1E~44, ~0.123E4) = ~0.123E4 +- (0.1E~44, ~0.123E4) = 0.123E4 +/ (0.1E~44, ~0.123E4) = ~0.0 +nextAfter (0.1E~44, ~0.123E4) = 0.0 +rem (0.1E~44, ~0.123E4) = 0.1E~44 +* (0.1E~44, ~0.123E2) = ~0.17E~43 ++ (0.1E~44, ~0.123E2) = ~0.123E2 +- (0.1E~44, ~0.123E2) = 0.123E2 +/ (0.1E~44, ~0.123E2) = ~0.0 +nextAfter (0.1E~44, ~0.123E2) = 0.0 +rem (0.1E~44, ~0.123E2) = 0.1E~44 +* (0.1E~44, ~0.31415927E1) = ~0.4E~44 ++ (0.1E~44, ~0.31415927E1) = ~0.31415927E1 +- (0.1E~44, ~0.31415927E1) = 0.31415927E1 +/ (0.1E~44, ~0.31415927E1) = ~0.0 +nextAfter (0.1E~44, ~0.31415927E1) = 0.0 +rem (0.1E~44, ~0.31415927E1) = 0.1E~44 +* (0.1E~44, ~0.27182817E1) = ~0.4E~44 ++ (0.1E~44, ~0.27182817E1) = ~0.27182817E1 +- (0.1E~44, ~0.27182817E1) = 0.27182817E1 +/ (0.1E~44, ~0.27182817E1) = ~0.0 +nextAfter (0.1E~44, ~0.27182817E1) = 0.0 +rem (0.1E~44, ~0.27182817E1) = 0.1E~44 +* (0.1E~44, ~0.123E1) = ~0.1E~44 ++ (0.1E~44, ~0.123E1) = ~0.123E1 +- (0.1E~44, ~0.123E1) = 0.123E1 +/ (0.1E~44, ~0.123E1) = ~0.1E~44 +nextAfter (0.1E~44, ~0.123E1) = 0.0 +rem (0.1E~44, ~0.123E1) = 0.1E~44 +* (0.1E~44, ~0.123) = ~0.0 ++ (0.1E~44, ~0.123) = ~0.123 +- (0.1E~44, ~0.123) = 0.123 +/ (0.1E~44, ~0.123) = ~0.11E~43 +nextAfter (0.1E~44, ~0.123) = 0.0 +rem (0.1E~44, ~0.123) = 0.1E~44 +* (0.1E~44, ~0.123E~2) = ~0.0 ++ (0.1E~44, ~0.123E~2) = ~0.123E~2 +- (0.1E~44, ~0.123E~2) = 0.123E~2 +/ (0.1E~44, ~0.123E~2) = ~0.1139E~41 +nextAfter (0.1E~44, ~0.123E~2) = 0.0 +rem (0.1E~44, ~0.123E~2) = 0.1E~44 +* (0.1E~44, ~0.11754944E~37) = ~0.0 ++ (0.1E~44, ~0.11754944E~37) = ~0.11754942E~37 +- (0.1E~44, ~0.11754944E~37) = 0.11754945E~37 +/ (0.1E~44, ~0.11754944E~37) = ~0.11920929E~6 +nextAfter (0.1E~44, ~0.11754944E~37) = 0.0 +rem (0.1E~44, ~0.11754944E~37) = 0.1E~44 +* (0.1E~44, ~0.5877472E~38) = ~0.0 ++ (0.1E~44, ~0.5877472E~38) = ~0.587747E~38 +- (0.1E~44, ~0.5877472E~38) = 0.5877473E~38 +/ (0.1E~44, ~0.5877472E~38) = ~0.23841858E~6 +nextAfter (0.1E~44, ~0.5877472E~38) = 0.0 +rem (0.1E~44, ~0.5877472E~38) = 0.1E~44 +* (0.1E~44, ~0.1E~44) = ~0.0 ++ (0.1E~44, ~0.1E~44) = 0.0 +- (0.1E~44, ~0.1E~44) = 0.3E~44 +/ (0.1E~44, ~0.1E~44) = ~0.1E1 +nextAfter (0.1E~44, ~0.1E~44) = 0.0 +rem (0.1E~44, ~0.1E~44) = 0.0 +* (0.1E~44, ~0.0) = ~0.0 ++ (0.1E~44, ~0.0) = 0.1E~44 +- (0.1E~44, ~0.0) = 0.1E~44 +/ (0.1E~44, ~0.0) = ~inf +nextAfter (0.1E~44, ~0.0) = 0.0 +rem (0.1E~44, ~0.0) = nan +* (0.1E~44, inf) = inf ++ (0.1E~44, inf) = inf +- (0.1E~44, inf) = ~inf +/ (0.1E~44, inf) = 0.0 +nextAfter (0.1E~44, inf) = 0.3E~44 +rem (0.1E~44, inf) = 0.1E~44 +* (0.1E~44, ~inf) = ~inf ++ (0.1E~44, ~inf) = ~inf +- (0.1E~44, ~inf) = inf +/ (0.1E~44, ~inf) = ~0.0 +nextAfter (0.1E~44, ~inf) = 0.0 +rem (0.1E~44, ~inf) = 0.1E~44 +* (0.1E~44, nan) = nan ++ (0.1E~44, nan) = nan +- (0.1E~44, nan) = nan +/ (0.1E~44, nan) = nan +nextAfter (0.1E~44, nan) = nan +rem (0.1E~44, nan) = nan +* (0.1E~44, inf) = inf ++ (0.1E~44, inf) = inf +- (0.1E~44, inf) = ~inf +/ (0.1E~44, inf) = 0.0 +nextAfter (0.1E~44, inf) = 0.3E~44 +rem (0.1E~44, inf) = 0.1E~44 +* (0.0, 0.34028235E39) = 0.0 ++ (0.0, 0.34028235E39) = 0.34028235E39 +- (0.0, 0.34028235E39) = ~0.34028235E39 +/ (0.0, 0.34028235E39) = 0.0 +nextAfter (0.0, 0.34028235E39) = 0.1E~44 +rem (0.0, 0.34028235E39) = 0.0 +* (0.0, 0.17014117E39) = 0.0 ++ (0.0, 0.17014117E39) = 0.17014117E39 +- (0.0, 0.17014117E39) = ~0.17014117E39 +/ (0.0, 0.17014117E39) = 0.0 +nextAfter (0.0, 0.17014117E39) = 0.1E~44 +rem (0.0, 0.17014117E39) = 0.0 +* (0.0, 0.123E4) = 0.0 ++ (0.0, 0.123E4) = 0.123E4 +- (0.0, 0.123E4) = ~0.123E4 +/ (0.0, 0.123E4) = 0.0 +nextAfter (0.0, 0.123E4) = 0.1E~44 +rem (0.0, 0.123E4) = 0.0 +* (0.0, 0.123E2) = 0.0 ++ (0.0, 0.123E2) = 0.123E2 +- (0.0, 0.123E2) = ~0.123E2 +/ (0.0, 0.123E2) = 0.0 +nextAfter (0.0, 0.123E2) = 0.1E~44 +rem (0.0, 0.123E2) = 0.0 +* (0.0, 0.31415927E1) = 0.0 ++ (0.0, 0.31415927E1) = 0.31415927E1 +- (0.0, 0.31415927E1) = ~0.31415927E1 +/ (0.0, 0.31415927E1) = 0.0 +nextAfter (0.0, 0.31415927E1) = 0.1E~44 +rem (0.0, 0.31415927E1) = 0.0 +* (0.0, 0.27182817E1) = 0.0 ++ (0.0, 0.27182817E1) = 0.27182817E1 +- (0.0, 0.27182817E1) = ~0.27182817E1 +/ (0.0, 0.27182817E1) = 0.0 +nextAfter (0.0, 0.27182817E1) = 0.1E~44 +rem (0.0, 0.27182817E1) = 0.0 +* (0.0, 0.123E1) = 0.0 ++ (0.0, 0.123E1) = 0.123E1 +- (0.0, 0.123E1) = ~0.123E1 +/ (0.0, 0.123E1) = 0.0 +nextAfter (0.0, 0.123E1) = 0.1E~44 +rem (0.0, 0.123E1) = 0.0 +* (0.0, 0.123) = 0.0 ++ (0.0, 0.123) = 0.123 +- (0.0, 0.123) = ~0.123 +/ (0.0, 0.123) = 0.0 +nextAfter (0.0, 0.123) = 0.1E~44 +rem (0.0, 0.123) = 0.0 +* (0.0, 0.123E~2) = 0.0 ++ (0.0, 0.123E~2) = 0.123E~2 +- (0.0, 0.123E~2) = ~0.123E~2 +/ (0.0, 0.123E~2) = 0.0 +nextAfter (0.0, 0.123E~2) = 0.1E~44 +rem (0.0, 0.123E~2) = 0.0 +* (0.0, 0.11754944E~37) = 0.0 ++ (0.0, 0.11754944E~37) = 0.11754944E~37 +- (0.0, 0.11754944E~37) = ~0.11754944E~37 +/ (0.0, 0.11754944E~37) = 0.0 +nextAfter (0.0, 0.11754944E~37) = 0.1E~44 +rem (0.0, 0.11754944E~37) = 0.0 +* (0.0, 0.5877472E~38) = 0.0 ++ (0.0, 0.5877472E~38) = 0.5877472E~38 +- (0.0, 0.5877472E~38) = ~0.5877472E~38 +/ (0.0, 0.5877472E~38) = 0.0 +nextAfter (0.0, 0.5877472E~38) = 0.1E~44 +rem (0.0, 0.5877472E~38) = 0.0 +* (0.0, 0.1E~44) = 0.0 ++ (0.0, 0.1E~44) = 0.1E~44 +- (0.0, 0.1E~44) = ~0.1E~44 +/ (0.0, 0.1E~44) = 0.0 +nextAfter (0.0, 0.1E~44) = 0.1E~44 +rem (0.0, 0.1E~44) = 0.0 +* (0.0, 0.0) = 0.0 ++ (0.0, 0.0) = 0.0 +- (0.0, 0.0) = 0.0 +/ (0.0, 0.0) = nan +nextAfter (0.0, 0.0) = 0.0 +rem (0.0, 0.0) = 0.0 +* (0.0, ~0.34028235E39) = ~0.0 ++ (0.0, ~0.34028235E39) = ~0.34028235E39 +- (0.0, ~0.34028235E39) = 0.34028235E39 +/ (0.0, ~0.34028235E39) = ~0.0 +nextAfter (0.0, ~0.34028235E39) = ~0.1E~44 +rem (0.0, ~0.34028235E39) = 0.0 +* (0.0, ~0.17014117E39) = ~0.0 ++ (0.0, ~0.17014117E39) = ~0.17014117E39 +- (0.0, ~0.17014117E39) = 0.17014117E39 +/ (0.0, ~0.17014117E39) = ~0.0 +nextAfter (0.0, ~0.17014117E39) = ~0.1E~44 +rem (0.0, ~0.17014117E39) = 0.0 +* (0.0, ~0.123E4) = ~0.0 ++ (0.0, ~0.123E4) = ~0.123E4 +- (0.0, ~0.123E4) = 0.123E4 +/ (0.0, ~0.123E4) = ~0.0 +nextAfter (0.0, ~0.123E4) = ~0.1E~44 +rem (0.0, ~0.123E4) = 0.0 +* (0.0, ~0.123E2) = ~0.0 ++ (0.0, ~0.123E2) = ~0.123E2 +- (0.0, ~0.123E2) = 0.123E2 +/ (0.0, ~0.123E2) = ~0.0 +nextAfter (0.0, ~0.123E2) = ~0.1E~44 +rem (0.0, ~0.123E2) = 0.0 +* (0.0, ~0.31415927E1) = ~0.0 ++ (0.0, ~0.31415927E1) = ~0.31415927E1 +- (0.0, ~0.31415927E1) = 0.31415927E1 +/ (0.0, ~0.31415927E1) = ~0.0 +nextAfter (0.0, ~0.31415927E1) = ~0.1E~44 +rem (0.0, ~0.31415927E1) = 0.0 +* (0.0, ~0.27182817E1) = ~0.0 ++ (0.0, ~0.27182817E1) = ~0.27182817E1 +- (0.0, ~0.27182817E1) = 0.27182817E1 +/ (0.0, ~0.27182817E1) = ~0.0 +nextAfter (0.0, ~0.27182817E1) = ~0.1E~44 +rem (0.0, ~0.27182817E1) = 0.0 +* (0.0, ~0.123E1) = ~0.0 ++ (0.0, ~0.123E1) = ~0.123E1 +- (0.0, ~0.123E1) = 0.123E1 +/ (0.0, ~0.123E1) = ~0.0 +nextAfter (0.0, ~0.123E1) = ~0.1E~44 +rem (0.0, ~0.123E1) = 0.0 +* (0.0, ~0.123) = ~0.0 ++ (0.0, ~0.123) = ~0.123 +- (0.0, ~0.123) = 0.123 +/ (0.0, ~0.123) = ~0.0 +nextAfter (0.0, ~0.123) = ~0.1E~44 +rem (0.0, ~0.123) = 0.0 +* (0.0, ~0.123E~2) = ~0.0 ++ (0.0, ~0.123E~2) = ~0.123E~2 +- (0.0, ~0.123E~2) = 0.123E~2 +/ (0.0, ~0.123E~2) = ~0.0 +nextAfter (0.0, ~0.123E~2) = ~0.1E~44 +rem (0.0, ~0.123E~2) = 0.0 +* (0.0, ~0.11754944E~37) = ~0.0 ++ (0.0, ~0.11754944E~37) = ~0.11754944E~37 +- (0.0, ~0.11754944E~37) = 0.11754944E~37 +/ (0.0, ~0.11754944E~37) = ~0.0 +nextAfter (0.0, ~0.11754944E~37) = ~0.1E~44 +rem (0.0, ~0.11754944E~37) = 0.0 +* (0.0, ~0.5877472E~38) = ~0.0 ++ (0.0, ~0.5877472E~38) = ~0.5877472E~38 +- (0.0, ~0.5877472E~38) = 0.5877472E~38 +/ (0.0, ~0.5877472E~38) = ~0.0 +nextAfter (0.0, ~0.5877472E~38) = ~0.1E~44 +rem (0.0, ~0.5877472E~38) = 0.0 +* (0.0, ~0.1E~44) = ~0.0 ++ (0.0, ~0.1E~44) = ~0.1E~44 +- (0.0, ~0.1E~44) = 0.1E~44 +/ (0.0, ~0.1E~44) = ~0.0 +nextAfter (0.0, ~0.1E~44) = ~0.1E~44 +rem (0.0, ~0.1E~44) = 0.0 +* (0.0, ~0.0) = ~0.0 ++ (0.0, ~0.0) = 0.0 +- (0.0, ~0.0) = 0.0 +/ (0.0, ~0.0) = nan +nextAfter (0.0, ~0.0) = ~0.0 +rem (0.0, ~0.0) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.1E~44 +rem (0.0, inf) = 0.0 +* (0.0, ~inf) = nan ++ (0.0, ~inf) = ~inf +- (0.0, ~inf) = inf +/ (0.0, ~inf) = ~0.0 +nextAfter (0.0, ~inf) = ~0.1E~44 +rem (0.0, ~inf) = 0.0 +* (0.0, nan) = nan ++ (0.0, nan) = nan +- (0.0, nan) = nan +/ (0.0, nan) = nan +nextAfter (0.0, nan) = nan +rem (0.0, nan) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.1E~44 +rem (0.0, inf) = 0.0 +* (~0.34028235E39, 0.34028235E39) = ~inf ++ (~0.34028235E39, 0.34028235E39) = 0.0 +- (~0.34028235E39, 0.34028235E39) = ~inf +/ (~0.34028235E39, 0.34028235E39) = ~0.1E1 +nextAfter (~0.34028235E39, 0.34028235E39) = ~0.34028233E39 +rem (~0.34028235E39, 0.34028235E39) = 0.0 +* (~0.34028235E39, 0.17014117E39) = ~inf ++ (~0.34028235E39, 0.17014117E39) = ~0.17014117E39 +- (~0.34028235E39, 0.17014117E39) = ~inf +/ (~0.34028235E39, 0.17014117E39) = ~0.2E1 +nextAfter (~0.34028235E39, 0.17014117E39) = ~0.34028233E39 +rem (~0.34028235E39, 0.17014117E39) = 0.0 +* (~0.34028235E39, 0.123E4) = ~inf ++ (~0.34028235E39, 0.123E4) = ~0.34028235E39 +- (~0.34028235E39, 0.123E4) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E4) = ~0.2766523E36 +nextAfter (~0.34028235E39, 0.123E4) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E4) = ~0.2028241E32 +* (~0.34028235E39, 0.123E2) = ~inf ++ (~0.34028235E39, 0.123E2) = ~0.34028235E39 +- (~0.34028235E39, 0.123E2) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E2) = ~0.27665232E38 +nextAfter (~0.34028235E39, 0.123E2) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E2) = inf +* (~0.34028235E39, 0.31415927E1) = ~inf ++ (~0.34028235E39, 0.31415927E1) = ~0.34028235E39 +- (~0.34028235E39, 0.31415927E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.31415927E1) = ~0.10831523E39 +nextAfter (~0.34028235E39, 0.31415927E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.31415927E1) = ~0.2028241E32 +* (~0.34028235E39, 0.27182817E1) = ~inf ++ (~0.34028235E39, 0.27182817E1) = ~0.34028235E39 +- (~0.34028235E39, 0.27182817E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.27182817E1) = ~0.12518288E39 +nextAfter (~0.34028235E39, 0.27182817E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.27182817E1) = 0.0 +* (~0.34028235E39, 0.123E1) = ~inf ++ (~0.34028235E39, 0.123E1) = ~0.34028235E39 +- (~0.34028235E39, 0.123E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E1) = ~0.27665231E39 +nextAfter (~0.34028235E39, 0.123E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E1) = 0.0 +* (~0.34028235E39, 0.123) = ~0.4185473E38 ++ (~0.34028235E39, 0.123) = ~0.34028235E39 +- (~0.34028235E39, 0.123) = ~0.34028235E39 +/ (~0.34028235E39, 0.123) = ~inf +nextAfter (~0.34028235E39, 0.123) = ~0.34028233E39 +rem (~0.34028235E39, 0.123) = inf +* (~0.34028235E39, 0.123E~2) = ~0.4185473E36 ++ (~0.34028235E39, 0.123E~2) = ~0.34028235E39 +- (~0.34028235E39, 0.123E~2) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E~2) = ~inf +nextAfter (~0.34028235E39, 0.123E~2) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E~2) = inf +* (~0.34028235E39, 0.11754944E~37) = ~0.39999998E1 ++ (~0.34028235E39, 0.11754944E~37) = ~0.34028235E39 +- (~0.34028235E39, 0.11754944E~37) = ~0.34028235E39 +/ (~0.34028235E39, 0.11754944E~37) = ~inf +nextAfter (~0.34028235E39, 0.11754944E~37) = ~0.34028233E39 +rem (~0.34028235E39, 0.11754944E~37) = inf +* (~0.34028235E39, 0.5877472E~38) = ~0.19999999E1 ++ (~0.34028235E39, 0.5877472E~38) = ~0.34028235E39 +- (~0.34028235E39, 0.5877472E~38) = ~0.34028235E39 +/ (~0.34028235E39, 0.5877472E~38) = ~inf +nextAfter (~0.34028235E39, 0.5877472E~38) = ~0.34028233E39 +rem (~0.34028235E39, 0.5877472E~38) = inf +* (~0.34028235E39, 0.1E~44) = ~0.47683713E~6 ++ (~0.34028235E39, 0.1E~44) = ~0.34028235E39 +- (~0.34028235E39, 0.1E~44) = ~0.34028235E39 +/ (~0.34028235E39, 0.1E~44) = ~inf +nextAfter (~0.34028235E39, 0.1E~44) = ~0.34028233E39 +rem (~0.34028235E39, 0.1E~44) = inf +* (~0.34028235E39, 0.0) = ~0.0 ++ (~0.34028235E39, 0.0) = ~0.34028235E39 +- (~0.34028235E39, 0.0) = ~0.34028235E39 +/ (~0.34028235E39, 0.0) = ~inf +nextAfter (~0.34028235E39, 0.0) = ~0.34028233E39 +rem (~0.34028235E39, 0.0) = nan +* (~0.34028235E39, ~0.34028235E39) = inf ++ (~0.34028235E39, ~0.34028235E39) = ~inf +- (~0.34028235E39, ~0.34028235E39) = 0.0 +/ (~0.34028235E39, ~0.34028235E39) = 0.1E1 +nextAfter (~0.34028235E39, ~0.34028235E39) = ~0.34028235E39 +rem (~0.34028235E39, ~0.34028235E39) = 0.0 +* (~0.34028235E39, ~0.17014117E39) = inf ++ (~0.34028235E39, ~0.17014117E39) = ~inf +- (~0.34028235E39, ~0.17014117E39) = ~0.17014117E39 +/ (~0.34028235E39, ~0.17014117E39) = 0.2E1 +nextAfter (~0.34028235E39, ~0.17014117E39) = ~0.34028233E39 +rem (~0.34028235E39, ~0.17014117E39) = 0.0 +* (~0.34028235E39, ~0.123E4) = inf ++ (~0.34028235E39, ~0.123E4) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E4) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E4) = 0.2766523E36 +nextAfter (~0.34028235E39, ~0.123E4) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E4) = ~0.2028241E32 +* (~0.34028235E39, ~0.123E2) = inf ++ (~0.34028235E39, ~0.123E2) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E2) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E2) = 0.27665232E38 +nextAfter (~0.34028235E39, ~0.123E2) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E2) = inf +* (~0.34028235E39, ~0.31415927E1) = inf ++ (~0.34028235E39, ~0.31415927E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.31415927E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.31415927E1) = 0.10831523E39 +nextAfter (~0.34028235E39, ~0.31415927E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.31415927E1) = ~0.2028241E32 +* (~0.34028235E39, ~0.27182817E1) = inf ++ (~0.34028235E39, ~0.27182817E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.27182817E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.27182817E1) = 0.12518288E39 +nextAfter (~0.34028235E39, ~0.27182817E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.27182817E1) = 0.0 +* (~0.34028235E39, ~0.123E1) = inf ++ (~0.34028235E39, ~0.123E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E1) = 0.27665231E39 +nextAfter (~0.34028235E39, ~0.123E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E1) = 0.0 +* (~0.34028235E39, ~0.123) = 0.4185473E38 ++ (~0.34028235E39, ~0.123) = ~0.34028235E39 +- (~0.34028235E39, ~0.123) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123) = inf +nextAfter (~0.34028235E39, ~0.123) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123) = inf +* (~0.34028235E39, ~0.123E~2) = 0.4185473E36 ++ (~0.34028235E39, ~0.123E~2) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E~2) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E~2) = inf +nextAfter (~0.34028235E39, ~0.123E~2) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E~2) = inf +* (~0.34028235E39, ~0.11754944E~37) = 0.39999998E1 ++ (~0.34028235E39, ~0.11754944E~37) = ~0.34028235E39 +- (~0.34028235E39, ~0.11754944E~37) = ~0.34028235E39 +/ (~0.34028235E39, ~0.11754944E~37) = inf +nextAfter (~0.34028235E39, ~0.11754944E~37) = ~0.34028233E39 +rem (~0.34028235E39, ~0.11754944E~37) = inf +* (~0.34028235E39, ~0.5877472E~38) = 0.19999999E1 ++ (~0.34028235E39, ~0.5877472E~38) = ~0.34028235E39 +- (~0.34028235E39, ~0.5877472E~38) = ~0.34028235E39 +/ (~0.34028235E39, ~0.5877472E~38) = inf +nextAfter (~0.34028235E39, ~0.5877472E~38) = ~0.34028233E39 +rem (~0.34028235E39, ~0.5877472E~38) = inf +* (~0.34028235E39, ~0.1E~44) = 0.47683713E~6 ++ (~0.34028235E39, ~0.1E~44) = ~0.34028235E39 +- (~0.34028235E39, ~0.1E~44) = ~0.34028235E39 +/ (~0.34028235E39, ~0.1E~44) = inf +nextAfter (~0.34028235E39, ~0.1E~44) = ~0.34028233E39 +rem (~0.34028235E39, ~0.1E~44) = inf +* (~0.34028235E39, ~0.0) = 0.0 ++ (~0.34028235E39, ~0.0) = ~0.34028235E39 +- (~0.34028235E39, ~0.0) = ~0.34028235E39 +/ (~0.34028235E39, ~0.0) = inf +nextAfter (~0.34028235E39, ~0.0) = ~0.34028233E39 +rem (~0.34028235E39, ~0.0) = nan +* (~0.34028235E39, inf) = ~inf ++ (~0.34028235E39, inf) = inf +- (~0.34028235E39, inf) = ~inf +/ (~0.34028235E39, inf) = ~0.0 +nextAfter (~0.34028235E39, inf) = ~0.34028233E39 +rem (~0.34028235E39, inf) = ~0.34028235E39 +* (~0.34028235E39, ~inf) = inf ++ (~0.34028235E39, ~inf) = ~inf +- (~0.34028235E39, ~inf) = inf +/ (~0.34028235E39, ~inf) = 0.0 +nextAfter (~0.34028235E39, ~inf) = ~inf +rem (~0.34028235E39, ~inf) = ~0.34028235E39 +* (~0.34028235E39, nan) = nan ++ (~0.34028235E39, nan) = nan +- (~0.34028235E39, nan) = nan +/ (~0.34028235E39, nan) = nan +nextAfter (~0.34028235E39, nan) = nan +rem (~0.34028235E39, nan) = nan +* (~0.34028235E39, inf) = ~inf ++ (~0.34028235E39, inf) = inf +- (~0.34028235E39, inf) = ~inf +/ (~0.34028235E39, inf) = ~0.0 +nextAfter (~0.34028235E39, inf) = ~0.34028233E39 +rem (~0.34028235E39, inf) = ~0.34028235E39 +* (~0.17014117E39, 0.34028235E39) = ~inf ++ (~0.17014117E39, 0.34028235E39) = 0.17014117E39 +- (~0.17014117E39, 0.34028235E39) = ~inf +/ (~0.17014117E39, 0.34028235E39) = ~0.5 +nextAfter (~0.17014117E39, 0.34028235E39) = ~0.17014116E39 +rem (~0.17014117E39, 0.34028235E39) = ~0.17014117E39 +* (~0.17014117E39, 0.17014117E39) = ~inf ++ (~0.17014117E39, 0.17014117E39) = 0.0 +- (~0.17014117E39, 0.17014117E39) = ~0.34028235E39 +/ (~0.17014117E39, 0.17014117E39) = ~0.1E1 +nextAfter (~0.17014117E39, 0.17014117E39) = ~0.17014116E39 +rem (~0.17014117E39, 0.17014117E39) = 0.0 +* (~0.17014117E39, 0.123E4) = ~inf ++ (~0.17014117E39, 0.123E4) = ~0.17014117E39 +- (~0.17014117E39, 0.123E4) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E4) = ~0.13832615E36 +nextAfter (~0.17014117E39, 0.123E4) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E4) = ~0.10141205E32 +* (~0.17014117E39, 0.123E2) = ~inf ++ (~0.17014117E39, 0.123E2) = ~0.17014117E39 +- (~0.17014117E39, 0.123E2) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E2) = ~0.13832616E38 +nextAfter (~0.17014117E39, 0.123E2) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E2) = 0.10141205E32 +* (~0.17014117E39, 0.31415927E1) = ~inf ++ (~0.17014117E39, 0.31415927E1) = ~0.17014117E39 +- (~0.17014117E39, 0.31415927E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.31415927E1) = ~0.54157613E38 +nextAfter (~0.17014117E39, 0.31415927E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.31415927E1) = ~0.10141205E32 +* (~0.17014117E39, 0.27182817E1) = ~inf ++ (~0.17014117E39, 0.27182817E1) = ~0.17014117E39 +- (~0.17014117E39, 0.27182817E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.27182817E1) = ~0.6259144E38 +nextAfter (~0.17014117E39, 0.27182817E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.27182817E1) = 0.0 +* (~0.17014117E39, 0.123E1) = ~0.20927364E39 ++ (~0.17014117E39, 0.123E1) = ~0.17014117E39 +- (~0.17014117E39, 0.123E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E1) = ~0.13832616E39 +nextAfter (~0.17014117E39, 0.123E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E1) = 0.0 +* (~0.17014117E39, 0.123) = ~0.20927365E38 ++ (~0.17014117E39, 0.123) = ~0.17014117E39 +- (~0.17014117E39, 0.123) = ~0.17014117E39 +/ (~0.17014117E39, 0.123) = ~inf +nextAfter (~0.17014117E39, 0.123) = ~0.17014116E39 +rem (~0.17014117E39, 0.123) = inf +* (~0.17014117E39, 0.123E~2) = ~0.20927364E36 ++ (~0.17014117E39, 0.123E~2) = ~0.17014117E39 +- (~0.17014117E39, 0.123E~2) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E~2) = ~inf +nextAfter (~0.17014117E39, 0.123E~2) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E~2) = inf +* (~0.17014117E39, 0.11754944E~37) = ~0.19999999E1 ++ (~0.17014117E39, 0.11754944E~37) = ~0.17014117E39 +- (~0.17014117E39, 0.11754944E~37) = ~0.17014117E39 +/ (~0.17014117E39, 0.11754944E~37) = ~inf +nextAfter (~0.17014117E39, 0.11754944E~37) = ~0.17014116E39 +rem (~0.17014117E39, 0.11754944E~37) = inf +* (~0.17014117E39, 0.5877472E~38) = ~0.99999994 ++ (~0.17014117E39, 0.5877472E~38) = ~0.17014117E39 +- (~0.17014117E39, 0.5877472E~38) = ~0.17014117E39 +/ (~0.17014117E39, 0.5877472E~38) = ~inf +nextAfter (~0.17014117E39, 0.5877472E~38) = ~0.17014116E39 +rem (~0.17014117E39, 0.5877472E~38) = inf +* (~0.17014117E39, 0.1E~44) = ~0.23841856E~6 ++ (~0.17014117E39, 0.1E~44) = ~0.17014117E39 +- (~0.17014117E39, 0.1E~44) = ~0.17014117E39 +/ (~0.17014117E39, 0.1E~44) = ~inf +nextAfter (~0.17014117E39, 0.1E~44) = ~0.17014116E39 +rem (~0.17014117E39, 0.1E~44) = inf +* (~0.17014117E39, 0.0) = ~0.0 ++ (~0.17014117E39, 0.0) = ~0.17014117E39 +- (~0.17014117E39, 0.0) = ~0.17014117E39 +/ (~0.17014117E39, 0.0) = ~inf +nextAfter (~0.17014117E39, 0.0) = ~0.17014116E39 +rem (~0.17014117E39, 0.0) = nan +* (~0.17014117E39, ~0.34028235E39) = inf ++ (~0.17014117E39, ~0.34028235E39) = ~inf +- (~0.17014117E39, ~0.34028235E39) = 0.17014117E39 +/ (~0.17014117E39, ~0.34028235E39) = 0.5 +nextAfter (~0.17014117E39, ~0.34028235E39) = ~0.17014118E39 +rem (~0.17014117E39, ~0.34028235E39) = ~0.17014117E39 +* (~0.17014117E39, ~0.17014117E39) = inf ++ (~0.17014117E39, ~0.17014117E39) = ~0.34028235E39 +- (~0.17014117E39, ~0.17014117E39) = 0.0 +/ (~0.17014117E39, ~0.17014117E39) = 0.1E1 +nextAfter (~0.17014117E39, ~0.17014117E39) = ~0.17014117E39 +rem (~0.17014117E39, ~0.17014117E39) = 0.0 +* (~0.17014117E39, ~0.123E4) = inf ++ (~0.17014117E39, ~0.123E4) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E4) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E4) = 0.13832615E36 +nextAfter (~0.17014117E39, ~0.123E4) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E4) = ~0.10141205E32 +* (~0.17014117E39, ~0.123E2) = inf ++ (~0.17014117E39, ~0.123E2) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E2) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E2) = 0.13832616E38 +nextAfter (~0.17014117E39, ~0.123E2) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E2) = 0.10141205E32 +* (~0.17014117E39, ~0.31415927E1) = inf ++ (~0.17014117E39, ~0.31415927E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.31415927E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.31415927E1) = 0.54157613E38 +nextAfter (~0.17014117E39, ~0.31415927E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.31415927E1) = ~0.10141205E32 +* (~0.17014117E39, ~0.27182817E1) = inf ++ (~0.17014117E39, ~0.27182817E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.27182817E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.27182817E1) = 0.6259144E38 +nextAfter (~0.17014117E39, ~0.27182817E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.27182817E1) = 0.0 +* (~0.17014117E39, ~0.123E1) = 0.20927364E39 ++ (~0.17014117E39, ~0.123E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E1) = 0.13832616E39 +nextAfter (~0.17014117E39, ~0.123E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E1) = 0.0 +* (~0.17014117E39, ~0.123) = 0.20927365E38 ++ (~0.17014117E39, ~0.123) = ~0.17014117E39 +- (~0.17014117E39, ~0.123) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123) = inf +nextAfter (~0.17014117E39, ~0.123) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123) = inf +* (~0.17014117E39, ~0.123E~2) = 0.20927364E36 ++ (~0.17014117E39, ~0.123E~2) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E~2) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E~2) = inf +nextAfter (~0.17014117E39, ~0.123E~2) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E~2) = inf +* (~0.17014117E39, ~0.11754944E~37) = 0.19999999E1 ++ (~0.17014117E39, ~0.11754944E~37) = ~0.17014117E39 +- (~0.17014117E39, ~0.11754944E~37) = ~0.17014117E39 +/ (~0.17014117E39, ~0.11754944E~37) = inf +nextAfter (~0.17014117E39, ~0.11754944E~37) = ~0.17014116E39 +rem (~0.17014117E39, ~0.11754944E~37) = inf +* (~0.17014117E39, ~0.5877472E~38) = 0.99999994 ++ (~0.17014117E39, ~0.5877472E~38) = ~0.17014117E39 +- (~0.17014117E39, ~0.5877472E~38) = ~0.17014117E39 +/ (~0.17014117E39, ~0.5877472E~38) = inf +nextAfter (~0.17014117E39, ~0.5877472E~38) = ~0.17014116E39 +rem (~0.17014117E39, ~0.5877472E~38) = inf +* (~0.17014117E39, ~0.1E~44) = 0.23841856E~6 ++ (~0.17014117E39, ~0.1E~44) = ~0.17014117E39 +- (~0.17014117E39, ~0.1E~44) = ~0.17014117E39 +/ (~0.17014117E39, ~0.1E~44) = inf +nextAfter (~0.17014117E39, ~0.1E~44) = ~0.17014116E39 +rem (~0.17014117E39, ~0.1E~44) = inf +* (~0.17014117E39, ~0.0) = 0.0 ++ (~0.17014117E39, ~0.0) = ~0.17014117E39 +- (~0.17014117E39, ~0.0) = ~0.17014117E39 +/ (~0.17014117E39, ~0.0) = inf +nextAfter (~0.17014117E39, ~0.0) = ~0.17014116E39 +rem (~0.17014117E39, ~0.0) = nan +* (~0.17014117E39, inf) = ~inf ++ (~0.17014117E39, inf) = inf +- (~0.17014117E39, inf) = ~inf +/ (~0.17014117E39, inf) = ~0.0 +nextAfter (~0.17014117E39, inf) = ~0.17014116E39 +rem (~0.17014117E39, inf) = ~0.17014117E39 +* (~0.17014117E39, ~inf) = inf ++ (~0.17014117E39, ~inf) = ~inf +- (~0.17014117E39, ~inf) = inf +/ (~0.17014117E39, ~inf) = 0.0 +nextAfter (~0.17014117E39, ~inf) = ~0.17014118E39 +rem (~0.17014117E39, ~inf) = ~0.17014117E39 +* (~0.17014117E39, nan) = nan ++ (~0.17014117E39, nan) = nan +- (~0.17014117E39, nan) = nan +/ (~0.17014117E39, nan) = nan +nextAfter (~0.17014117E39, nan) = nan +rem (~0.17014117E39, nan) = nan +* (~0.17014117E39, inf) = ~inf ++ (~0.17014117E39, inf) = inf +- (~0.17014117E39, inf) = ~inf +/ (~0.17014117E39, inf) = ~0.0 +nextAfter (~0.17014117E39, inf) = ~0.17014116E39 +rem (~0.17014117E39, inf) = ~0.17014117E39 +* (~0.123E4, 0.34028235E39) = ~inf ++ (~0.123E4, 0.34028235E39) = 0.34028235E39 +- (~0.123E4, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E4, 0.34028235E39) = ~0.36146455E~35 +nextAfter (~0.123E4, 0.34028235E39) = ~0.12299999E4 +rem (~0.123E4, 0.34028235E39) = ~0.123E4 +* (~0.123E4, 0.17014117E39) = ~inf ++ (~0.123E4, 0.17014117E39) = 0.17014117E39 +- (~0.123E4, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E4, 0.17014117E39) = ~0.7229291E~35 +nextAfter (~0.123E4, 0.17014117E39) = ~0.12299999E4 +rem (~0.123E4, 0.17014117E39) = ~0.123E4 +* (~0.123E4, 0.123E4) = ~0.15129E7 ++ (~0.123E4, 0.123E4) = 0.0 +- (~0.123E4, 0.123E4) = ~0.246E4 +/ (~0.123E4, 0.123E4) = ~0.1E1 +nextAfter (~0.123E4, 0.123E4) = ~0.12299999E4 +rem (~0.123E4, 0.123E4) = 0.0 +* (~0.123E4, 0.123E2) = ~0.15129E5 ++ (~0.123E4, 0.123E2) = ~0.12177E4 +- (~0.123E4, 0.123E2) = ~0.12423E4 +/ (~0.123E4, 0.123E2) = ~0.1E3 +nextAfter (~0.123E4, 0.123E2) = ~0.12299999E4 +rem (~0.123E4, 0.123E2) = 0.0 +* (~0.123E4, 0.31415927E1) = ~0.38641592E4 ++ (~0.123E4, 0.31415927E1) = ~0.12268584E4 +- (~0.123E4, 0.31415927E1) = ~0.12331416E4 +/ (~0.123E4, 0.31415927E1) = ~0.39152115E3 +nextAfter (~0.123E4, 0.31415927E1) = ~0.12299999E4 +rem (~0.123E4, 0.31415927E1) = ~0.1637207E1 +* (~0.123E4, 0.27182817E1) = ~0.33434866E4 ++ (~0.123E4, 0.27182817E1) = ~0.12272817E4 +- (~0.123E4, 0.27182817E1) = ~0.12327183E4 +/ (~0.123E4, 0.27182817E1) = ~0.45249173E3 +nextAfter (~0.123E4, 0.27182817E1) = ~0.12299999E4 +rem (~0.123E4, 0.27182817E1) = ~0.13366699E1 +* (~0.123E4, 0.123E1) = ~0.15129E4 ++ (~0.123E4, 0.123E1) = ~0.122877E4 +- (~0.123E4, 0.123E1) = ~0.123123E4 +/ (~0.123E4, 0.123E1) = ~0.1E4 +nextAfter (~0.123E4, 0.123E1) = ~0.12299999E4 +rem (~0.123E4, 0.123E1) = 0.0 +* (~0.123E4, 0.123) = ~0.15129001E3 ++ (~0.123E4, 0.123) = ~0.1229877E4 +- (~0.123E4, 0.123) = ~0.1230123E4 +/ (~0.123E4, 0.123) = ~0.1E5 +nextAfter (~0.123E4, 0.123) = ~0.12299999E4 +rem (~0.123E4, 0.123) = 0.0 +* (~0.123E4, 0.123E~2) = ~0.15129001E1 ++ (~0.123E4, 0.123E~2) = ~0.12299988E4 +- (~0.123E4, 0.123E~2) = ~0.12300012E4 +/ (~0.123E4, 0.123E~2) = ~0.99999994E6 +nextAfter (~0.123E4, 0.123E~2) = ~0.12299999E4 +rem (~0.123E4, 0.123E~2) = ~0.12207031E~2 +* (~0.123E4, 0.11754944E~37) = ~0.1445858E~34 ++ (~0.123E4, 0.11754944E~37) = ~0.123E4 +- (~0.123E4, 0.11754944E~37) = ~0.123E4 +/ (~0.123E4, 0.11754944E~37) = ~inf +nextAfter (~0.123E4, 0.11754944E~37) = ~0.12299999E4 +rem (~0.123E4, 0.11754944E~37) = inf +* (~0.123E4, 0.5877472E~38) = ~0.722929E~35 ++ (~0.123E4, 0.5877472E~38) = ~0.123E4 +- (~0.123E4, 0.5877472E~38) = ~0.123E4 +/ (~0.123E4, 0.5877472E~38) = ~inf +nextAfter (~0.123E4, 0.5877472E~38) = ~0.12299999E4 +rem (~0.123E4, 0.5877472E~38) = inf +* (~0.123E4, 0.1E~44) = ~0.1724E~41 ++ (~0.123E4, 0.1E~44) = ~0.123E4 +- (~0.123E4, 0.1E~44) = ~0.123E4 +/ (~0.123E4, 0.1E~44) = ~inf +nextAfter (~0.123E4, 0.1E~44) = ~0.12299999E4 +rem (~0.123E4, 0.1E~44) = inf +* (~0.123E4, 0.0) = ~0.0 ++ (~0.123E4, 0.0) = ~0.123E4 +- (~0.123E4, 0.0) = ~0.123E4 +/ (~0.123E4, 0.0) = ~inf +nextAfter (~0.123E4, 0.0) = ~0.12299999E4 +rem (~0.123E4, 0.0) = nan +* (~0.123E4, ~0.34028235E39) = inf ++ (~0.123E4, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E4, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E4, ~0.34028235E39) = 0.36146455E~35 +nextAfter (~0.123E4, ~0.34028235E39) = ~0.12300001E4 +rem (~0.123E4, ~0.34028235E39) = ~0.123E4 +* (~0.123E4, ~0.17014117E39) = inf ++ (~0.123E4, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E4, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E4, ~0.17014117E39) = 0.7229291E~35 +nextAfter (~0.123E4, ~0.17014117E39) = ~0.12300001E4 +rem (~0.123E4, ~0.17014117E39) = ~0.123E4 +* (~0.123E4, ~0.123E4) = 0.15129E7 ++ (~0.123E4, ~0.123E4) = ~0.246E4 +- (~0.123E4, ~0.123E4) = 0.0 +/ (~0.123E4, ~0.123E4) = 0.1E1 +nextAfter (~0.123E4, ~0.123E4) = ~0.123E4 +rem (~0.123E4, ~0.123E4) = 0.0 +* (~0.123E4, ~0.123E2) = 0.15129E5 ++ (~0.123E4, ~0.123E2) = ~0.12423E4 +- (~0.123E4, ~0.123E2) = ~0.12177E4 +/ (~0.123E4, ~0.123E2) = 0.1E3 +nextAfter (~0.123E4, ~0.123E2) = ~0.12299999E4 +rem (~0.123E4, ~0.123E2) = 0.0 +* (~0.123E4, ~0.31415927E1) = 0.38641592E4 ++ (~0.123E4, ~0.31415927E1) = ~0.12331416E4 +- (~0.123E4, ~0.31415927E1) = ~0.12268584E4 +/ (~0.123E4, ~0.31415927E1) = 0.39152115E3 +nextAfter (~0.123E4, ~0.31415927E1) = ~0.12299999E4 +rem (~0.123E4, ~0.31415927E1) = ~0.1637207E1 +* (~0.123E4, ~0.27182817E1) = 0.33434866E4 ++ (~0.123E4, ~0.27182817E1) = ~0.12327183E4 +- (~0.123E4, ~0.27182817E1) = ~0.12272817E4 +/ (~0.123E4, ~0.27182817E1) = 0.45249173E3 +nextAfter (~0.123E4, ~0.27182817E1) = ~0.12299999E4 +rem (~0.123E4, ~0.27182817E1) = ~0.13366699E1 +* (~0.123E4, ~0.123E1) = 0.15129E4 ++ (~0.123E4, ~0.123E1) = ~0.123123E4 +- (~0.123E4, ~0.123E1) = ~0.122877E4 +/ (~0.123E4, ~0.123E1) = 0.1E4 +nextAfter (~0.123E4, ~0.123E1) = ~0.12299999E4 +rem (~0.123E4, ~0.123E1) = 0.0 +* (~0.123E4, ~0.123) = 0.15129001E3 ++ (~0.123E4, ~0.123) = ~0.1230123E4 +- (~0.123E4, ~0.123) = ~0.1229877E4 +/ (~0.123E4, ~0.123) = 0.1E5 +nextAfter (~0.123E4, ~0.123) = ~0.12299999E4 +rem (~0.123E4, ~0.123) = 0.0 +* (~0.123E4, ~0.123E~2) = 0.15129001E1 ++ (~0.123E4, ~0.123E~2) = ~0.12300012E4 +- (~0.123E4, ~0.123E~2) = ~0.12299988E4 +/ (~0.123E4, ~0.123E~2) = 0.99999994E6 +nextAfter (~0.123E4, ~0.123E~2) = ~0.12299999E4 +rem (~0.123E4, ~0.123E~2) = ~0.12207031E~2 +* (~0.123E4, ~0.11754944E~37) = 0.1445858E~34 ++ (~0.123E4, ~0.11754944E~37) = ~0.123E4 +- (~0.123E4, ~0.11754944E~37) = ~0.123E4 +/ (~0.123E4, ~0.11754944E~37) = inf +nextAfter (~0.123E4, ~0.11754944E~37) = ~0.12299999E4 +rem (~0.123E4, ~0.11754944E~37) = inf +* (~0.123E4, ~0.5877472E~38) = 0.722929E~35 ++ (~0.123E4, ~0.5877472E~38) = ~0.123E4 +- (~0.123E4, ~0.5877472E~38) = ~0.123E4 +/ (~0.123E4, ~0.5877472E~38) = inf +nextAfter (~0.123E4, ~0.5877472E~38) = ~0.12299999E4 +rem (~0.123E4, ~0.5877472E~38) = inf +* (~0.123E4, ~0.1E~44) = 0.1724E~41 ++ (~0.123E4, ~0.1E~44) = ~0.123E4 +- (~0.123E4, ~0.1E~44) = ~0.123E4 +/ (~0.123E4, ~0.1E~44) = inf +nextAfter (~0.123E4, ~0.1E~44) = ~0.12299999E4 +rem (~0.123E4, ~0.1E~44) = inf +* (~0.123E4, ~0.0) = 0.0 ++ (~0.123E4, ~0.0) = ~0.123E4 +- (~0.123E4, ~0.0) = ~0.123E4 +/ (~0.123E4, ~0.0) = inf +nextAfter (~0.123E4, ~0.0) = ~0.12299999E4 +rem (~0.123E4, ~0.0) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E4, ~inf) = inf ++ (~0.123E4, ~inf) = ~inf +- (~0.123E4, ~inf) = inf +/ (~0.123E4, ~inf) = 0.0 +nextAfter (~0.123E4, ~inf) = ~0.12300001E4 +rem (~0.123E4, ~inf) = ~0.123E4 +* (~0.123E4, nan) = nan ++ (~0.123E4, nan) = nan +- (~0.123E4, nan) = nan +/ (~0.123E4, nan) = nan +nextAfter (~0.123E4, nan) = nan +rem (~0.123E4, nan) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E2, 0.34028235E39) = ~inf ++ (~0.123E2, 0.34028235E39) = 0.34028235E39 +- (~0.123E2, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E2, 0.34028235E39) = ~0.36146455E~37 +nextAfter (~0.123E2, 0.34028235E39) = ~0.12299999E2 +rem (~0.123E2, 0.34028235E39) = ~0.123E2 +* (~0.123E2, 0.17014117E39) = ~inf ++ (~0.123E2, 0.17014117E39) = 0.17014117E39 +- (~0.123E2, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E2, 0.17014117E39) = ~0.7229291E~37 +nextAfter (~0.123E2, 0.17014117E39) = ~0.12299999E2 +rem (~0.123E2, 0.17014117E39) = ~0.123E2 +* (~0.123E2, 0.123E4) = ~0.15129E5 ++ (~0.123E2, 0.123E4) = 0.12177E4 +- (~0.123E2, 0.123E4) = ~0.12423E4 +/ (~0.123E2, 0.123E4) = ~0.1E~1 +nextAfter (~0.123E2, 0.123E4) = ~0.12299999E2 +rem (~0.123E2, 0.123E4) = ~0.123E2 +* (~0.123E2, 0.123E2) = ~0.15129001E3 ++ (~0.123E2, 0.123E2) = 0.0 +- (~0.123E2, 0.123E2) = ~0.246E2 +/ (~0.123E2, 0.123E2) = ~0.1E1 +nextAfter (~0.123E2, 0.123E2) = ~0.12299999E2 +rem (~0.123E2, 0.123E2) = 0.0 +* (~0.123E2, 0.31415927E1) = ~0.3864159E2 ++ (~0.123E2, 0.31415927E1) = ~0.9158407E1 +- (~0.123E2, 0.31415927E1) = ~0.15441593E2 +/ (~0.123E2, 0.31415927E1) = ~0.39152114E1 +nextAfter (~0.123E2, 0.31415927E1) = ~0.12299999E2 +rem (~0.123E2, 0.31415927E1) = ~0.28752222E1 +* (~0.123E2, 0.27182817E1) = ~0.33434868E2 ++ (~0.123E2, 0.27182817E1) = ~0.9581718E1 +- (~0.123E2, 0.27182817E1) = ~0.15018282E2 +/ (~0.123E2, 0.27182817E1) = ~0.4524917E1 +nextAfter (~0.123E2, 0.27182817E1) = ~0.12299999E2 +rem (~0.123E2, 0.27182817E1) = ~0.14268732E1 +* (~0.123E2, 0.123E1) = ~0.15129001E2 ++ (~0.123E2, 0.123E1) = ~0.1107E2 +- (~0.123E2, 0.123E1) = ~0.13530001E2 +/ (~0.123E2, 0.123E1) = ~0.1E2 +nextAfter (~0.123E2, 0.123E1) = ~0.12299999E2 +rem (~0.123E2, 0.123E1) = 0.0 +* (~0.123E2, 0.123) = ~0.15129001E1 ++ (~0.123E2, 0.123) = ~0.12177E2 +- (~0.123E2, 0.123) = ~0.12423E2 +/ (~0.123E2, 0.123) = ~0.1E3 +nextAfter (~0.123E2, 0.123) = ~0.12299999E2 +rem (~0.123E2, 0.123) = 0.0 +* (~0.123E2, 0.123E~2) = ~0.15129001E~1 ++ (~0.123E2, 0.123E~2) = ~0.1229877E2 +- (~0.123E2, 0.123E~2) = ~0.1230123E2 +/ (~0.123E2, 0.123E~2) = ~0.1E5 +nextAfter (~0.123E2, 0.123E~2) = ~0.12299999E2 +rem (~0.123E2, 0.123E~2) = 0.0 +* (~0.123E2, 0.11754944E~37) = ~0.14458581E~36 ++ (~0.123E2, 0.11754944E~37) = ~0.123E2 +- (~0.123E2, 0.11754944E~37) = ~0.123E2 +/ (~0.123E2, 0.11754944E~37) = ~inf +nextAfter (~0.123E2, 0.11754944E~37) = ~0.12299999E2 +rem (~0.123E2, 0.11754944E~37) = inf +* (~0.123E2, 0.5877472E~38) = ~0.72292904E~37 ++ (~0.123E2, 0.5877472E~38) = ~0.123E2 +- (~0.123E2, 0.5877472E~38) = ~0.123E2 +/ (~0.123E2, 0.5877472E~38) = ~inf +nextAfter (~0.123E2, 0.5877472E~38) = ~0.12299999E2 +rem (~0.123E2, 0.5877472E~38) = inf +* (~0.123E2, 0.1E~44) = ~0.17E~43 ++ (~0.123E2, 0.1E~44) = ~0.123E2 +- (~0.123E2, 0.1E~44) = ~0.123E2 +/ (~0.123E2, 0.1E~44) = ~inf +nextAfter (~0.123E2, 0.1E~44) = ~0.12299999E2 +rem (~0.123E2, 0.1E~44) = inf +* (~0.123E2, 0.0) = ~0.0 ++ (~0.123E2, 0.0) = ~0.123E2 +- (~0.123E2, 0.0) = ~0.123E2 +/ (~0.123E2, 0.0) = ~inf +nextAfter (~0.123E2, 0.0) = ~0.12299999E2 +rem (~0.123E2, 0.0) = nan +* (~0.123E2, ~0.34028235E39) = inf ++ (~0.123E2, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E2, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E2, ~0.34028235E39) = 0.36146455E~37 +nextAfter (~0.123E2, ~0.34028235E39) = ~0.12300001E2 +rem (~0.123E2, ~0.34028235E39) = ~0.123E2 +* (~0.123E2, ~0.17014117E39) = inf ++ (~0.123E2, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E2, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E2, ~0.17014117E39) = 0.7229291E~37 +nextAfter (~0.123E2, ~0.17014117E39) = ~0.12300001E2 +rem (~0.123E2, ~0.17014117E39) = ~0.123E2 +* (~0.123E2, ~0.123E4) = 0.15129E5 ++ (~0.123E2, ~0.123E4) = ~0.12423E4 +- (~0.123E2, ~0.123E4) = 0.12177E4 +/ (~0.123E2, ~0.123E4) = 0.1E~1 +nextAfter (~0.123E2, ~0.123E4) = ~0.12300001E2 +rem (~0.123E2, ~0.123E4) = ~0.123E2 +* (~0.123E2, ~0.123E2) = 0.15129001E3 ++ (~0.123E2, ~0.123E2) = ~0.246E2 +- (~0.123E2, ~0.123E2) = 0.0 +/ (~0.123E2, ~0.123E2) = 0.1E1 +nextAfter (~0.123E2, ~0.123E2) = ~0.123E2 +rem (~0.123E2, ~0.123E2) = 0.0 +* (~0.123E2, ~0.31415927E1) = 0.3864159E2 ++ (~0.123E2, ~0.31415927E1) = ~0.15441593E2 +- (~0.123E2, ~0.31415927E1) = ~0.9158407E1 +/ (~0.123E2, ~0.31415927E1) = 0.39152114E1 +nextAfter (~0.123E2, ~0.31415927E1) = ~0.12299999E2 +rem (~0.123E2, ~0.31415927E1) = ~0.28752222E1 +* (~0.123E2, ~0.27182817E1) = 0.33434868E2 ++ (~0.123E2, ~0.27182817E1) = ~0.15018282E2 +- (~0.123E2, ~0.27182817E1) = ~0.9581718E1 +/ (~0.123E2, ~0.27182817E1) = 0.4524917E1 +nextAfter (~0.123E2, ~0.27182817E1) = ~0.12299999E2 +rem (~0.123E2, ~0.27182817E1) = ~0.14268732E1 +* (~0.123E2, ~0.123E1) = 0.15129001E2 ++ (~0.123E2, ~0.123E1) = ~0.13530001E2 +- (~0.123E2, ~0.123E1) = ~0.1107E2 +/ (~0.123E2, ~0.123E1) = 0.1E2 +nextAfter (~0.123E2, ~0.123E1) = ~0.12299999E2 +rem (~0.123E2, ~0.123E1) = 0.0 +* (~0.123E2, ~0.123) = 0.15129001E1 ++ (~0.123E2, ~0.123) = ~0.12423E2 +- (~0.123E2, ~0.123) = ~0.12177E2 +/ (~0.123E2, ~0.123) = 0.1E3 +nextAfter (~0.123E2, ~0.123) = ~0.12299999E2 +rem (~0.123E2, ~0.123) = 0.0 +* (~0.123E2, ~0.123E~2) = 0.15129001E~1 ++ (~0.123E2, ~0.123E~2) = ~0.1230123E2 +- (~0.123E2, ~0.123E~2) = ~0.1229877E2 +/ (~0.123E2, ~0.123E~2) = 0.1E5 +nextAfter (~0.123E2, ~0.123E~2) = ~0.12299999E2 +rem (~0.123E2, ~0.123E~2) = 0.0 +* (~0.123E2, ~0.11754944E~37) = 0.14458581E~36 ++ (~0.123E2, ~0.11754944E~37) = ~0.123E2 +- (~0.123E2, ~0.11754944E~37) = ~0.123E2 +/ (~0.123E2, ~0.11754944E~37) = inf +nextAfter (~0.123E2, ~0.11754944E~37) = ~0.12299999E2 +rem (~0.123E2, ~0.11754944E~37) = inf +* (~0.123E2, ~0.5877472E~38) = 0.72292904E~37 ++ (~0.123E2, ~0.5877472E~38) = ~0.123E2 +- (~0.123E2, ~0.5877472E~38) = ~0.123E2 +/ (~0.123E2, ~0.5877472E~38) = inf +nextAfter (~0.123E2, ~0.5877472E~38) = ~0.12299999E2 +rem (~0.123E2, ~0.5877472E~38) = inf +* (~0.123E2, ~0.1E~44) = 0.17E~43 ++ (~0.123E2, ~0.1E~44) = ~0.123E2 +- (~0.123E2, ~0.1E~44) = ~0.123E2 +/ (~0.123E2, ~0.1E~44) = inf +nextAfter (~0.123E2, ~0.1E~44) = ~0.12299999E2 +rem (~0.123E2, ~0.1E~44) = inf +* (~0.123E2, ~0.0) = 0.0 ++ (~0.123E2, ~0.0) = ~0.123E2 +- (~0.123E2, ~0.0) = ~0.123E2 +/ (~0.123E2, ~0.0) = inf +nextAfter (~0.123E2, ~0.0) = ~0.12299999E2 +rem (~0.123E2, ~0.0) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.123E2, ~inf) = inf ++ (~0.123E2, ~inf) = ~inf +- (~0.123E2, ~inf) = inf +/ (~0.123E2, ~inf) = 0.0 +nextAfter (~0.123E2, ~inf) = ~0.12300001E2 +rem (~0.123E2, ~inf) = ~0.123E2 +* (~0.123E2, nan) = nan ++ (~0.123E2, nan) = nan +- (~0.123E2, nan) = nan +/ (~0.123E2, nan) = nan +nextAfter (~0.123E2, nan) = nan +rem (~0.123E2, nan) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.31415927E1, 0.34028235E39) = ~inf ++ (~0.31415927E1, 0.34028235E39) = 0.34028235E39 +- (~0.31415927E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.31415927E1, 0.34028235E39) = ~0.9232312E~38 +nextAfter (~0.31415927E1, 0.34028235E39) = ~0.31415925E1 +rem (~0.31415927E1, 0.34028235E39) = ~0.31415927E1 +* (~0.31415927E1, 0.17014117E39) = ~inf ++ (~0.31415927E1, 0.17014117E39) = 0.17014117E39 +- (~0.31415927E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.31415927E1, 0.17014117E39) = ~0.18464624E~37 +nextAfter (~0.31415927E1, 0.17014117E39) = ~0.31415925E1 +rem (~0.31415927E1, 0.17014117E39) = ~0.31415927E1 +* (~0.31415927E1, 0.123E4) = ~0.38641592E4 ++ (~0.31415927E1, 0.123E4) = 0.12268584E4 +- (~0.31415927E1, 0.123E4) = ~0.12331416E4 +/ (~0.31415927E1, 0.123E4) = ~0.25541405E~2 +nextAfter (~0.31415927E1, 0.123E4) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E4) = ~0.31415927E1 +* (~0.31415927E1, 0.123E2) = ~0.3864159E2 ++ (~0.31415927E1, 0.123E2) = 0.9158407E1 +- (~0.31415927E1, 0.123E2) = ~0.15441593E2 +/ (~0.31415927E1, 0.123E2) = ~0.25541404 +nextAfter (~0.31415927E1, 0.123E2) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E2) = ~0.31415927E1 +* (~0.31415927E1, 0.31415927E1) = ~0.9869605E1 ++ (~0.31415927E1, 0.31415927E1) = 0.0 +- (~0.31415927E1, 0.31415927E1) = ~0.62831855E1 +/ (~0.31415927E1, 0.31415927E1) = ~0.1E1 +nextAfter (~0.31415927E1, 0.31415927E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.31415927E1) = 0.0 +* (~0.31415927E1, 0.27182817E1) = ~0.8539734E1 ++ (~0.31415927E1, 0.27182817E1) = ~0.423311 +- (~0.31415927E1, 0.27182817E1) = ~0.58598747E1 +/ (~0.31415927E1, 0.27182817E1) = ~0.11557274E1 +nextAfter (~0.31415927E1, 0.27182817E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.27182817E1) = ~0.423311 +* (~0.31415927E1, 0.123E1) = ~0.3864159E1 ++ (~0.31415927E1, 0.123E1) = ~0.19115927E1 +- (~0.31415927E1, 0.123E1) = ~0.43715925E1 +/ (~0.31415927E1, 0.123E1) = ~0.25541403E1 +nextAfter (~0.31415927E1, 0.123E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E1) = ~0.6815927 +* (~0.31415927E1, 0.123) = ~0.38641593 ++ (~0.31415927E1, 0.123) = ~0.30185928E1 +- (~0.31415927E1, 0.123) = ~0.32645926E1 +/ (~0.31415927E1, 0.123) = ~0.25541403E2 +nextAfter (~0.31415927E1, 0.123) = ~0.31415925E1 +rem (~0.31415927E1, 0.123) = ~0.6659269E~1 +* (~0.31415927E1, 0.123E~2) = ~0.38641593E~2 ++ (~0.31415927E1, 0.123E~2) = ~0.31403627E1 +- (~0.31415927E1, 0.123E~2) = ~0.31428227E1 +/ (~0.31415927E1, 0.123E~2) = ~0.25541404E4 +nextAfter (~0.31415927E1, 0.123E~2) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E~2) = ~0.17261505E~3 +* (~0.31415927E1, 0.11754944E~37) = ~0.36929245E~37 ++ (~0.31415927E1, 0.11754944E~37) = ~0.31415927E1 +- (~0.31415927E1, 0.11754944E~37) = ~0.31415927E1 +/ (~0.31415927E1, 0.11754944E~37) = ~0.26725715E39 +nextAfter (~0.31415927E1, 0.11754944E~37) = ~0.31415925E1 +rem (~0.31415927E1, 0.11754944E~37) = 0.0 +* (~0.31415927E1, 0.5877472E~38) = ~0.18464623E~37 ++ (~0.31415927E1, 0.5877472E~38) = ~0.31415927E1 +- (~0.31415927E1, 0.5877472E~38) = ~0.31415927E1 +/ (~0.31415927E1, 0.5877472E~38) = ~inf +nextAfter (~0.31415927E1, 0.5877472E~38) = ~0.31415925E1 +rem (~0.31415927E1, 0.5877472E~38) = inf +* (~0.31415927E1, 0.1E~44) = ~0.4E~44 ++ (~0.31415927E1, 0.1E~44) = ~0.31415927E1 +- (~0.31415927E1, 0.1E~44) = ~0.31415927E1 +/ (~0.31415927E1, 0.1E~44) = ~inf +nextAfter (~0.31415927E1, 0.1E~44) = ~0.31415925E1 +rem (~0.31415927E1, 0.1E~44) = inf +* (~0.31415927E1, 0.0) = ~0.0 ++ (~0.31415927E1, 0.0) = ~0.31415927E1 +- (~0.31415927E1, 0.0) = ~0.31415927E1 +/ (~0.31415927E1, 0.0) = ~inf +nextAfter (~0.31415927E1, 0.0) = ~0.31415925E1 +rem (~0.31415927E1, 0.0) = nan +* (~0.31415927E1, ~0.34028235E39) = inf ++ (~0.31415927E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.31415927E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.31415927E1, ~0.34028235E39) = 0.9232312E~38 +nextAfter (~0.31415927E1, ~0.34028235E39) = ~0.3141593E1 +rem (~0.31415927E1, ~0.34028235E39) = ~0.31415927E1 +* (~0.31415927E1, ~0.17014117E39) = inf ++ (~0.31415927E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.31415927E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.31415927E1, ~0.17014117E39) = 0.18464624E~37 +nextAfter (~0.31415927E1, ~0.17014117E39) = ~0.3141593E1 +rem (~0.31415927E1, ~0.17014117E39) = ~0.31415927E1 +* (~0.31415927E1, ~0.123E4) = 0.38641592E4 ++ (~0.31415927E1, ~0.123E4) = ~0.12331416E4 +- (~0.31415927E1, ~0.123E4) = 0.12268584E4 +/ (~0.31415927E1, ~0.123E4) = 0.25541405E~2 +nextAfter (~0.31415927E1, ~0.123E4) = ~0.3141593E1 +rem (~0.31415927E1, ~0.123E4) = ~0.31415927E1 +* (~0.31415927E1, ~0.123E2) = 0.3864159E2 ++ (~0.31415927E1, ~0.123E2) = ~0.15441593E2 +- (~0.31415927E1, ~0.123E2) = 0.9158407E1 +/ (~0.31415927E1, ~0.123E2) = 0.25541404 +nextAfter (~0.31415927E1, ~0.123E2) = ~0.3141593E1 +rem (~0.31415927E1, ~0.123E2) = ~0.31415927E1 +* (~0.31415927E1, ~0.31415927E1) = 0.9869605E1 ++ (~0.31415927E1, ~0.31415927E1) = ~0.62831855E1 +- (~0.31415927E1, ~0.31415927E1) = 0.0 +/ (~0.31415927E1, ~0.31415927E1) = 0.1E1 +nextAfter (~0.31415927E1, ~0.31415927E1) = ~0.31415927E1 +rem (~0.31415927E1, ~0.31415927E1) = 0.0 +* (~0.31415927E1, ~0.27182817E1) = 0.8539734E1 ++ (~0.31415927E1, ~0.27182817E1) = ~0.58598747E1 +- (~0.31415927E1, ~0.27182817E1) = ~0.423311 +/ (~0.31415927E1, ~0.27182817E1) = 0.11557274E1 +nextAfter (~0.31415927E1, ~0.27182817E1) = ~0.31415925E1 +rem (~0.31415927E1, ~0.27182817E1) = ~0.423311 +* (~0.31415927E1, ~0.123E1) = 0.3864159E1 ++ (~0.31415927E1, ~0.123E1) = ~0.43715925E1 +- (~0.31415927E1, ~0.123E1) = ~0.19115927E1 +/ (~0.31415927E1, ~0.123E1) = 0.25541403E1 +nextAfter (~0.31415927E1, ~0.123E1) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123E1) = ~0.6815927 +* (~0.31415927E1, ~0.123) = 0.38641593 ++ (~0.31415927E1, ~0.123) = ~0.32645926E1 +- (~0.31415927E1, ~0.123) = ~0.30185928E1 +/ (~0.31415927E1, ~0.123) = 0.25541403E2 +nextAfter (~0.31415927E1, ~0.123) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123) = ~0.6659269E~1 +* (~0.31415927E1, ~0.123E~2) = 0.38641593E~2 ++ (~0.31415927E1, ~0.123E~2) = ~0.31428227E1 +- (~0.31415927E1, ~0.123E~2) = ~0.31403627E1 +/ (~0.31415927E1, ~0.123E~2) = 0.25541404E4 +nextAfter (~0.31415927E1, ~0.123E~2) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123E~2) = ~0.17261505E~3 +* (~0.31415927E1, ~0.11754944E~37) = 0.36929245E~37 ++ (~0.31415927E1, ~0.11754944E~37) = ~0.31415927E1 +- (~0.31415927E1, ~0.11754944E~37) = ~0.31415927E1 +/ (~0.31415927E1, ~0.11754944E~37) = 0.26725715E39 +nextAfter (~0.31415927E1, ~0.11754944E~37) = ~0.31415925E1 +rem (~0.31415927E1, ~0.11754944E~37) = 0.0 +* (~0.31415927E1, ~0.5877472E~38) = 0.18464623E~37 ++ (~0.31415927E1, ~0.5877472E~38) = ~0.31415927E1 +- (~0.31415927E1, ~0.5877472E~38) = ~0.31415927E1 +/ (~0.31415927E1, ~0.5877472E~38) = inf +nextAfter (~0.31415927E1, ~0.5877472E~38) = ~0.31415925E1 +rem (~0.31415927E1, ~0.5877472E~38) = inf +* (~0.31415927E1, ~0.1E~44) = 0.4E~44 ++ (~0.31415927E1, ~0.1E~44) = ~0.31415927E1 +- (~0.31415927E1, ~0.1E~44) = ~0.31415927E1 +/ (~0.31415927E1, ~0.1E~44) = inf +nextAfter (~0.31415927E1, ~0.1E~44) = ~0.31415925E1 +rem (~0.31415927E1, ~0.1E~44) = inf +* (~0.31415927E1, ~0.0) = 0.0 ++ (~0.31415927E1, ~0.0) = ~0.31415927E1 +- (~0.31415927E1, ~0.0) = ~0.31415927E1 +/ (~0.31415927E1, ~0.0) = inf +nextAfter (~0.31415927E1, ~0.0) = ~0.31415925E1 +rem (~0.31415927E1, ~0.0) = nan +* (~0.31415927E1, inf) = ~inf ++ (~0.31415927E1, inf) = inf +- (~0.31415927E1, inf) = ~inf +/ (~0.31415927E1, inf) = ~0.0 +nextAfter (~0.31415927E1, inf) = ~0.31415925E1 +rem (~0.31415927E1, inf) = ~0.31415927E1 +* (~0.31415927E1, ~inf) = inf ++ (~0.31415927E1, ~inf) = ~inf +- (~0.31415927E1, ~inf) = inf +/ (~0.31415927E1, ~inf) = 0.0 +nextAfter (~0.31415927E1, ~inf) = ~0.3141593E1 +rem (~0.31415927E1, ~inf) = ~0.31415927E1 +* (~0.31415927E1, nan) = nan ++ (~0.31415927E1, nan) = nan +- (~0.31415927E1, nan) = nan +/ (~0.31415927E1, nan) = nan +nextAfter (~0.31415927E1, nan) = nan +rem (~0.31415927E1, nan) = nan +* (~0.31415927E1, inf) = ~inf ++ (~0.31415927E1, inf) = inf +- (~0.31415927E1, inf) = ~inf +/ (~0.31415927E1, inf) = ~0.0 +nextAfter (~0.31415927E1, inf) = ~0.31415925E1 +rem (~0.31415927E1, inf) = ~0.31415927E1 +* (~0.27182817E1, 0.34028235E39) = ~inf ++ (~0.27182817E1, 0.34028235E39) = 0.34028235E39 +- (~0.27182817E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.27182817E1, 0.34028235E39) = ~0.7988312E~38 +nextAfter (~0.27182817E1, 0.34028235E39) = ~0.27182815E1 +rem (~0.27182817E1, 0.34028235E39) = ~0.27182817E1 +* (~0.27182817E1, 0.17014117E39) = ~inf ++ (~0.27182817E1, 0.17014117E39) = 0.17014117E39 +- (~0.27182817E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.27182817E1, 0.17014117E39) = ~0.15976626E~37 +nextAfter (~0.27182817E1, 0.17014117E39) = ~0.27182815E1 +rem (~0.27182817E1, 0.17014117E39) = ~0.27182817E1 +* (~0.27182817E1, 0.123E4) = ~0.33434866E4 ++ (~0.27182817E1, 0.123E4) = 0.12272817E4 +- (~0.27182817E1, 0.123E4) = ~0.12327183E4 +/ (~0.27182817E1, 0.123E4) = ~0.22099852E~2 +nextAfter (~0.27182817E1, 0.123E4) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E4) = ~0.27182817E1 +* (~0.27182817E1, 0.123E2) = ~0.33434868E2 ++ (~0.27182817E1, 0.123E2) = 0.9581718E1 +- (~0.27182817E1, 0.123E2) = ~0.15018282E2 +/ (~0.27182817E1, 0.123E2) = ~0.22099851 +nextAfter (~0.27182817E1, 0.123E2) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E2) = ~0.27182817E1 +* (~0.27182817E1, 0.31415927E1) = ~0.8539734E1 ++ (~0.27182817E1, 0.31415927E1) = 0.423311 +- (~0.27182817E1, 0.31415927E1) = ~0.58598747E1 +/ (~0.27182817E1, 0.31415927E1) = ~0.86525595 +nextAfter (~0.27182817E1, 0.31415927E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.31415927E1) = ~0.27182817E1 +* (~0.27182817E1, 0.27182817E1) = ~0.73890557E1 ++ (~0.27182817E1, 0.27182817E1) = 0.0 +- (~0.27182817E1, 0.27182817E1) = ~0.54365635E1 +/ (~0.27182817E1, 0.27182817E1) = ~0.1E1 +nextAfter (~0.27182817E1, 0.27182817E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.27182817E1) = 0.0 +* (~0.27182817E1, 0.123E1) = ~0.33434865E1 ++ (~0.27182817E1, 0.123E1) = ~0.14882817E1 +- (~0.27182817E1, 0.123E1) = ~0.39482818E1 +/ (~0.27182817E1, 0.123E1) = ~0.2209985E1 +nextAfter (~0.27182817E1, 0.123E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E1) = ~0.2582817 +* (~0.27182817E1, 0.123) = ~0.33434868 ++ (~0.27182817E1, 0.123) = ~0.25952818E1 +- (~0.27182817E1, 0.123) = ~0.28412817E1 +/ (~0.27182817E1, 0.123) = ~0.22099852E2 +nextAfter (~0.27182817E1, 0.123) = ~0.27182815E1 +rem (~0.27182817E1, 0.123) = ~0.12281656E~1 +* (~0.27182817E1, 0.123E~2) = ~0.33434867E~2 ++ (~0.27182817E1, 0.123E~2) = ~0.27170517E1 +- (~0.27182817E1, 0.123E~2) = ~0.27195117E1 +/ (~0.27182817E1, 0.123E~2) = ~0.2209985E4 +nextAfter (~0.27182817E1, 0.123E~2) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E~2) = ~0.12116432E~2 +* (~0.27182817E1, 0.11754944E~37) = ~0.31953248E~37 ++ (~0.27182817E1, 0.11754944E~37) = ~0.27182817E1 +- (~0.27182817E1, 0.11754944E~37) = ~0.27182817E1 +/ (~0.27182817E1, 0.11754944E~37) = ~0.23124584E39 +nextAfter (~0.27182817E1, 0.11754944E~37) = ~0.27182815E1 +rem (~0.27182817E1, 0.11754944E~37) = 0.0 +* (~0.27182817E1, 0.5877472E~38) = ~0.15976624E~37 ++ (~0.27182817E1, 0.5877472E~38) = ~0.27182817E1 +- (~0.27182817E1, 0.5877472E~38) = ~0.27182817E1 +/ (~0.27182817E1, 0.5877472E~38) = ~inf +nextAfter (~0.27182817E1, 0.5877472E~38) = ~0.27182815E1 +rem (~0.27182817E1, 0.5877472E~38) = inf +* (~0.27182817E1, 0.1E~44) = ~0.4E~44 ++ (~0.27182817E1, 0.1E~44) = ~0.27182817E1 +- (~0.27182817E1, 0.1E~44) = ~0.27182817E1 +/ (~0.27182817E1, 0.1E~44) = ~inf +nextAfter (~0.27182817E1, 0.1E~44) = ~0.27182815E1 +rem (~0.27182817E1, 0.1E~44) = inf +* (~0.27182817E1, 0.0) = ~0.0 ++ (~0.27182817E1, 0.0) = ~0.27182817E1 +- (~0.27182817E1, 0.0) = ~0.27182817E1 +/ (~0.27182817E1, 0.0) = ~inf +nextAfter (~0.27182817E1, 0.0) = ~0.27182815E1 +rem (~0.27182817E1, 0.0) = nan +* (~0.27182817E1, ~0.34028235E39) = inf ++ (~0.27182817E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.27182817E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.27182817E1, ~0.34028235E39) = 0.7988312E~38 +nextAfter (~0.27182817E1, ~0.34028235E39) = ~0.2718282E1 +rem (~0.27182817E1, ~0.34028235E39) = ~0.27182817E1 +* (~0.27182817E1, ~0.17014117E39) = inf ++ (~0.27182817E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.27182817E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.27182817E1, ~0.17014117E39) = 0.15976626E~37 +nextAfter (~0.27182817E1, ~0.17014117E39) = ~0.2718282E1 +rem (~0.27182817E1, ~0.17014117E39) = ~0.27182817E1 +* (~0.27182817E1, ~0.123E4) = 0.33434866E4 ++ (~0.27182817E1, ~0.123E4) = ~0.12327183E4 +- (~0.27182817E1, ~0.123E4) = 0.12272817E4 +/ (~0.27182817E1, ~0.123E4) = 0.22099852E~2 +nextAfter (~0.27182817E1, ~0.123E4) = ~0.2718282E1 +rem (~0.27182817E1, ~0.123E4) = ~0.27182817E1 +* (~0.27182817E1, ~0.123E2) = 0.33434868E2 ++ (~0.27182817E1, ~0.123E2) = ~0.15018282E2 +- (~0.27182817E1, ~0.123E2) = 0.9581718E1 +/ (~0.27182817E1, ~0.123E2) = 0.22099851 +nextAfter (~0.27182817E1, ~0.123E2) = ~0.2718282E1 +rem (~0.27182817E1, ~0.123E2) = ~0.27182817E1 +* (~0.27182817E1, ~0.31415927E1) = 0.8539734E1 ++ (~0.27182817E1, ~0.31415927E1) = ~0.58598747E1 +- (~0.27182817E1, ~0.31415927E1) = 0.423311 +/ (~0.27182817E1, ~0.31415927E1) = 0.86525595 +nextAfter (~0.27182817E1, ~0.31415927E1) = ~0.2718282E1 +rem (~0.27182817E1, ~0.31415927E1) = ~0.27182817E1 +* (~0.27182817E1, ~0.27182817E1) = 0.73890557E1 ++ (~0.27182817E1, ~0.27182817E1) = ~0.54365635E1 +- (~0.27182817E1, ~0.27182817E1) = 0.0 +/ (~0.27182817E1, ~0.27182817E1) = 0.1E1 +nextAfter (~0.27182817E1, ~0.27182817E1) = ~0.27182817E1 +rem (~0.27182817E1, ~0.27182817E1) = 0.0 +* (~0.27182817E1, ~0.123E1) = 0.33434865E1 ++ (~0.27182817E1, ~0.123E1) = ~0.39482818E1 +- (~0.27182817E1, ~0.123E1) = ~0.14882817E1 +/ (~0.27182817E1, ~0.123E1) = 0.2209985E1 +nextAfter (~0.27182817E1, ~0.123E1) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123E1) = ~0.2582817 +* (~0.27182817E1, ~0.123) = 0.33434868 ++ (~0.27182817E1, ~0.123) = ~0.28412817E1 +- (~0.27182817E1, ~0.123) = ~0.25952818E1 +/ (~0.27182817E1, ~0.123) = 0.22099852E2 +nextAfter (~0.27182817E1, ~0.123) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123) = ~0.12281656E~1 +* (~0.27182817E1, ~0.123E~2) = 0.33434867E~2 ++ (~0.27182817E1, ~0.123E~2) = ~0.27195117E1 +- (~0.27182817E1, ~0.123E~2) = ~0.27170517E1 +/ (~0.27182817E1, ~0.123E~2) = 0.2209985E4 +nextAfter (~0.27182817E1, ~0.123E~2) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123E~2) = ~0.12116432E~2 +* (~0.27182817E1, ~0.11754944E~37) = 0.31953248E~37 ++ (~0.27182817E1, ~0.11754944E~37) = ~0.27182817E1 +- (~0.27182817E1, ~0.11754944E~37) = ~0.27182817E1 +/ (~0.27182817E1, ~0.11754944E~37) = 0.23124584E39 +nextAfter (~0.27182817E1, ~0.11754944E~37) = ~0.27182815E1 +rem (~0.27182817E1, ~0.11754944E~37) = 0.0 +* (~0.27182817E1, ~0.5877472E~38) = 0.15976624E~37 ++ (~0.27182817E1, ~0.5877472E~38) = ~0.27182817E1 +- (~0.27182817E1, ~0.5877472E~38) = ~0.27182817E1 +/ (~0.27182817E1, ~0.5877472E~38) = inf +nextAfter (~0.27182817E1, ~0.5877472E~38) = ~0.27182815E1 +rem (~0.27182817E1, ~0.5877472E~38) = inf +* (~0.27182817E1, ~0.1E~44) = 0.4E~44 ++ (~0.27182817E1, ~0.1E~44) = ~0.27182817E1 +- (~0.27182817E1, ~0.1E~44) = ~0.27182817E1 +/ (~0.27182817E1, ~0.1E~44) = inf +nextAfter (~0.27182817E1, ~0.1E~44) = ~0.27182815E1 +rem (~0.27182817E1, ~0.1E~44) = inf +* (~0.27182817E1, ~0.0) = 0.0 ++ (~0.27182817E1, ~0.0) = ~0.27182817E1 +- (~0.27182817E1, ~0.0) = ~0.27182817E1 +/ (~0.27182817E1, ~0.0) = inf +nextAfter (~0.27182817E1, ~0.0) = ~0.27182815E1 +rem (~0.27182817E1, ~0.0) = nan +* (~0.27182817E1, inf) = ~inf ++ (~0.27182817E1, inf) = inf +- (~0.27182817E1, inf) = ~inf +/ (~0.27182817E1, inf) = ~0.0 +nextAfter (~0.27182817E1, inf) = ~0.27182815E1 +rem (~0.27182817E1, inf) = ~0.27182817E1 +* (~0.27182817E1, ~inf) = inf ++ (~0.27182817E1, ~inf) = ~inf +- (~0.27182817E1, ~inf) = inf +/ (~0.27182817E1, ~inf) = 0.0 +nextAfter (~0.27182817E1, ~inf) = ~0.2718282E1 +rem (~0.27182817E1, ~inf) = ~0.27182817E1 +* (~0.27182817E1, nan) = nan ++ (~0.27182817E1, nan) = nan +- (~0.27182817E1, nan) = nan +/ (~0.27182817E1, nan) = nan +nextAfter (~0.27182817E1, nan) = nan +rem (~0.27182817E1, nan) = nan +* (~0.27182817E1, inf) = ~inf ++ (~0.27182817E1, inf) = inf +- (~0.27182817E1, inf) = ~inf +/ (~0.27182817E1, inf) = ~0.0 +nextAfter (~0.27182817E1, inf) = ~0.27182815E1 +rem (~0.27182817E1, inf) = ~0.27182817E1 +* (~0.123E1, 0.34028235E39) = ~inf ++ (~0.123E1, 0.34028235E39) = 0.34028235E39 +- (~0.123E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E1, 0.34028235E39) = ~0.3614645E~38 +nextAfter (~0.123E1, 0.34028235E39) = ~0.12299999E1 +rem (~0.123E1, 0.34028235E39) = ~0.123E1 +* (~0.123E1, 0.17014117E39) = ~0.20927364E39 ++ (~0.123E1, 0.17014117E39) = 0.17014117E39 +- (~0.123E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E1, 0.17014117E39) = ~0.722929E~38 +nextAfter (~0.123E1, 0.17014117E39) = ~0.12299999E1 +rem (~0.123E1, 0.17014117E39) = ~0.123E1 +* (~0.123E1, 0.123E4) = ~0.15129E4 ++ (~0.123E1, 0.123E4) = 0.122877E4 +- (~0.123E1, 0.123E4) = ~0.123123E4 +/ (~0.123E1, 0.123E4) = ~0.1E~2 +nextAfter (~0.123E1, 0.123E4) = ~0.12299999E1 +rem (~0.123E1, 0.123E4) = ~0.123E1 +* (~0.123E1, 0.123E2) = ~0.15129001E2 ++ (~0.123E1, 0.123E2) = 0.1107E2 +- (~0.123E1, 0.123E2) = ~0.13530001E2 +/ (~0.123E1, 0.123E2) = ~0.1 +nextAfter (~0.123E1, 0.123E2) = ~0.12299999E1 +rem (~0.123E1, 0.123E2) = ~0.123E1 +* (~0.123E1, 0.31415927E1) = ~0.3864159E1 ++ (~0.123E1, 0.31415927E1) = 0.19115927E1 +- (~0.123E1, 0.31415927E1) = ~0.43715925E1 +/ (~0.123E1, 0.31415927E1) = ~0.39152116 +nextAfter (~0.123E1, 0.31415927E1) = ~0.12299999E1 +rem (~0.123E1, 0.31415927E1) = ~0.123E1 +* (~0.123E1, 0.27182817E1) = ~0.33434865E1 ++ (~0.123E1, 0.27182817E1) = 0.14882817E1 +- (~0.123E1, 0.27182817E1) = ~0.39482818E1 +/ (~0.123E1, 0.27182817E1) = ~0.45249173 +nextAfter (~0.123E1, 0.27182817E1) = ~0.12299999E1 +rem (~0.123E1, 0.27182817E1) = ~0.123E1 +* (~0.123E1, 0.123E1) = ~0.15129E1 ++ (~0.123E1, 0.123E1) = 0.0 +- (~0.123E1, 0.123E1) = ~0.246E1 +/ (~0.123E1, 0.123E1) = ~0.1E1 +nextAfter (~0.123E1, 0.123E1) = ~0.12299999E1 +rem (~0.123E1, 0.123E1) = 0.0 +* (~0.123E1, 0.123) = ~0.15129 ++ (~0.123E1, 0.123) = ~0.1107E1 +- (~0.123E1, 0.123) = ~0.1353E1 +/ (~0.123E1, 0.123) = ~0.1E2 +nextAfter (~0.123E1, 0.123) = ~0.12299999E1 +rem (~0.123E1, 0.123) = 0.0 +* (~0.123E1, 0.123E~2) = ~0.15129001E~2 ++ (~0.123E1, 0.123E~2) = ~0.122877E1 +- (~0.123E1, 0.123E~2) = ~0.123123E1 +/ (~0.123E1, 0.123E~2) = ~0.1E4 +nextAfter (~0.123E1, 0.123E~2) = ~0.12299999E1 +rem (~0.123E1, 0.123E~2) = 0.0 +* (~0.123E1, 0.11754944E~37) = ~0.14458581E~37 ++ (~0.123E1, 0.11754944E~37) = ~0.123E1 +- (~0.123E1, 0.11754944E~37) = ~0.123E1 +/ (~0.123E1, 0.11754944E~37) = ~0.10463683E39 +nextAfter (~0.123E1, 0.11754944E~37) = ~0.12299999E1 +rem (~0.123E1, 0.11754944E~37) = 0.0 +* (~0.123E1, 0.5877472E~38) = ~0.722929E~38 ++ (~0.123E1, 0.5877472E~38) = ~0.123E1 +- (~0.123E1, 0.5877472E~38) = ~0.123E1 +/ (~0.123E1, 0.5877472E~38) = ~0.20927366E39 +nextAfter (~0.123E1, 0.5877472E~38) = ~0.12299999E1 +rem (~0.123E1, 0.5877472E~38) = 0.0 +* (~0.123E1, 0.1E~44) = ~0.1E~44 ++ (~0.123E1, 0.1E~44) = ~0.123E1 +- (~0.123E1, 0.1E~44) = ~0.123E1 +/ (~0.123E1, 0.1E~44) = ~inf +nextAfter (~0.123E1, 0.1E~44) = ~0.12299999E1 +rem (~0.123E1, 0.1E~44) = inf +* (~0.123E1, 0.0) = ~0.0 ++ (~0.123E1, 0.0) = ~0.123E1 +- (~0.123E1, 0.0) = ~0.123E1 +/ (~0.123E1, 0.0) = ~inf +nextAfter (~0.123E1, 0.0) = ~0.12299999E1 +rem (~0.123E1, 0.0) = nan +* (~0.123E1, ~0.34028235E39) = inf ++ (~0.123E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E1, ~0.34028235E39) = 0.3614645E~38 +nextAfter (~0.123E1, ~0.34028235E39) = ~0.12300001E1 +rem (~0.123E1, ~0.34028235E39) = ~0.123E1 +* (~0.123E1, ~0.17014117E39) = 0.20927364E39 ++ (~0.123E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E1, ~0.17014117E39) = 0.722929E~38 +nextAfter (~0.123E1, ~0.17014117E39) = ~0.12300001E1 +rem (~0.123E1, ~0.17014117E39) = ~0.123E1 +* (~0.123E1, ~0.123E4) = 0.15129E4 ++ (~0.123E1, ~0.123E4) = ~0.123123E4 +- (~0.123E1, ~0.123E4) = 0.122877E4 +/ (~0.123E1, ~0.123E4) = 0.1E~2 +nextAfter (~0.123E1, ~0.123E4) = ~0.12300001E1 +rem (~0.123E1, ~0.123E4) = ~0.123E1 +* (~0.123E1, ~0.123E2) = 0.15129001E2 ++ (~0.123E1, ~0.123E2) = ~0.13530001E2 +- (~0.123E1, ~0.123E2) = 0.1107E2 +/ (~0.123E1, ~0.123E2) = 0.1 +nextAfter (~0.123E1, ~0.123E2) = ~0.12300001E1 +rem (~0.123E1, ~0.123E2) = ~0.123E1 +* (~0.123E1, ~0.31415927E1) = 0.3864159E1 ++ (~0.123E1, ~0.31415927E1) = ~0.43715925E1 +- (~0.123E1, ~0.31415927E1) = 0.19115927E1 +/ (~0.123E1, ~0.31415927E1) = 0.39152116 +nextAfter (~0.123E1, ~0.31415927E1) = ~0.12300001E1 +rem (~0.123E1, ~0.31415927E1) = ~0.123E1 +* (~0.123E1, ~0.27182817E1) = 0.33434865E1 ++ (~0.123E1, ~0.27182817E1) = ~0.39482818E1 +- (~0.123E1, ~0.27182817E1) = 0.14882817E1 +/ (~0.123E1, ~0.27182817E1) = 0.45249173 +nextAfter (~0.123E1, ~0.27182817E1) = ~0.12300001E1 +rem (~0.123E1, ~0.27182817E1) = ~0.123E1 +* (~0.123E1, ~0.123E1) = 0.15129E1 ++ (~0.123E1, ~0.123E1) = ~0.246E1 +- (~0.123E1, ~0.123E1) = 0.0 +/ (~0.123E1, ~0.123E1) = 0.1E1 +nextAfter (~0.123E1, ~0.123E1) = ~0.123E1 +rem (~0.123E1, ~0.123E1) = 0.0 +* (~0.123E1, ~0.123) = 0.15129 ++ (~0.123E1, ~0.123) = ~0.1353E1 +- (~0.123E1, ~0.123) = ~0.1107E1 +/ (~0.123E1, ~0.123) = 0.1E2 +nextAfter (~0.123E1, ~0.123) = ~0.12299999E1 +rem (~0.123E1, ~0.123) = 0.0 +* (~0.123E1, ~0.123E~2) = 0.15129001E~2 ++ (~0.123E1, ~0.123E~2) = ~0.123123E1 +- (~0.123E1, ~0.123E~2) = ~0.122877E1 +/ (~0.123E1, ~0.123E~2) = 0.1E4 +nextAfter (~0.123E1, ~0.123E~2) = ~0.12299999E1 +rem (~0.123E1, ~0.123E~2) = 0.0 +* (~0.123E1, ~0.11754944E~37) = 0.14458581E~37 ++ (~0.123E1, ~0.11754944E~37) = ~0.123E1 +- (~0.123E1, ~0.11754944E~37) = ~0.123E1 +/ (~0.123E1, ~0.11754944E~37) = 0.10463683E39 +nextAfter (~0.123E1, ~0.11754944E~37) = ~0.12299999E1 +rem (~0.123E1, ~0.11754944E~37) = 0.0 +* (~0.123E1, ~0.5877472E~38) = 0.722929E~38 ++ (~0.123E1, ~0.5877472E~38) = ~0.123E1 +- (~0.123E1, ~0.5877472E~38) = ~0.123E1 +/ (~0.123E1, ~0.5877472E~38) = 0.20927366E39 +nextAfter (~0.123E1, ~0.5877472E~38) = ~0.12299999E1 +rem (~0.123E1, ~0.5877472E~38) = 0.0 +* (~0.123E1, ~0.1E~44) = 0.1E~44 ++ (~0.123E1, ~0.1E~44) = ~0.123E1 +- (~0.123E1, ~0.1E~44) = ~0.123E1 +/ (~0.123E1, ~0.1E~44) = inf +nextAfter (~0.123E1, ~0.1E~44) = ~0.12299999E1 +rem (~0.123E1, ~0.1E~44) = inf +* (~0.123E1, ~0.0) = 0.0 ++ (~0.123E1, ~0.0) = ~0.123E1 +- (~0.123E1, ~0.0) = ~0.123E1 +/ (~0.123E1, ~0.0) = inf +nextAfter (~0.123E1, ~0.0) = ~0.12299999E1 +rem (~0.123E1, ~0.0) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123E1, ~inf) = inf ++ (~0.123E1, ~inf) = ~inf +- (~0.123E1, ~inf) = inf +/ (~0.123E1, ~inf) = 0.0 +nextAfter (~0.123E1, ~inf) = ~0.12300001E1 +rem (~0.123E1, ~inf) = ~0.123E1 +* (~0.123E1, nan) = nan ++ (~0.123E1, nan) = nan +- (~0.123E1, nan) = nan +/ (~0.123E1, nan) = nan +nextAfter (~0.123E1, nan) = nan +rem (~0.123E1, nan) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123, 0.34028235E39) = ~0.4185473E38 ++ (~0.123, 0.34028235E39) = 0.34028235E39 +- (~0.123, 0.34028235E39) = ~0.34028235E39 +/ (~0.123, 0.34028235E39) = ~0.361465E~39 +nextAfter (~0.123, 0.34028235E39) = ~0.122999996 +rem (~0.123, 0.34028235E39) = ~0.123 +* (~0.123, 0.17014117E39) = ~0.20927365E38 ++ (~0.123, 0.17014117E39) = 0.17014117E39 +- (~0.123, 0.17014117E39) = ~0.17014117E39 +/ (~0.123, 0.17014117E39) = ~0.722928E~39 +nextAfter (~0.123, 0.17014117E39) = ~0.122999996 +rem (~0.123, 0.17014117E39) = ~0.123 +* (~0.123, 0.123E4) = ~0.15129001E3 ++ (~0.123, 0.123E4) = 0.1229877E4 +- (~0.123, 0.123E4) = ~0.1230123E4 +/ (~0.123, 0.123E4) = ~0.100000005E~3 +nextAfter (~0.123, 0.123E4) = ~0.122999996 +rem (~0.123, 0.123E4) = ~0.123 +* (~0.123, 0.123E2) = ~0.15129001E1 ++ (~0.123, 0.123E2) = 0.12177E2 +- (~0.123, 0.123E2) = ~0.12423E2 +/ (~0.123, 0.123E2) = ~0.1E~1 +nextAfter (~0.123, 0.123E2) = ~0.122999996 +rem (~0.123, 0.123E2) = ~0.123 +* (~0.123, 0.31415927E1) = ~0.38641593 ++ (~0.123, 0.31415927E1) = 0.30185928E1 +- (~0.123, 0.31415927E1) = ~0.32645926E1 +/ (~0.123, 0.31415927E1) = ~0.39152116E~1 +nextAfter (~0.123, 0.31415927E1) = ~0.122999996 +rem (~0.123, 0.31415927E1) = ~0.123 +* (~0.123, 0.27182817E1) = ~0.33434868 ++ (~0.123, 0.27182817E1) = 0.25952818E1 +- (~0.123, 0.27182817E1) = ~0.28412817E1 +/ (~0.123, 0.27182817E1) = ~0.45249175E~1 +nextAfter (~0.123, 0.27182817E1) = ~0.122999996 +rem (~0.123, 0.27182817E1) = ~0.123 +* (~0.123, 0.123E1) = ~0.15129 ++ (~0.123, 0.123E1) = 0.1107E1 +- (~0.123, 0.123E1) = ~0.1353E1 +/ (~0.123, 0.123E1) = ~0.1 +nextAfter (~0.123, 0.123E1) = ~0.122999996 +rem (~0.123, 0.123E1) = ~0.123 +* (~0.123, 0.123) = ~0.15129001E~1 ++ (~0.123, 0.123) = 0.0 +- (~0.123, 0.123) = ~0.246 +/ (~0.123, 0.123) = ~0.1E1 +nextAfter (~0.123, 0.123) = ~0.122999996 +rem (~0.123, 0.123) = 0.0 +* (~0.123, 0.123E~2) = ~0.15129E~3 ++ (~0.123, 0.123E~2) = ~0.12177 +- (~0.123, 0.123E~2) = ~0.124230005 +/ (~0.123, 0.123E~2) = ~0.1E3 +nextAfter (~0.123, 0.123E~2) = ~0.122999996 +rem (~0.123, 0.123E~2) = 0.0 +* (~0.123, 0.11754944E~37) = ~0.1445858E~38 ++ (~0.123, 0.11754944E~37) = ~0.123 +- (~0.123, 0.11754944E~37) = ~0.123 +/ (~0.123, 0.11754944E~37) = ~0.10463683E38 +nextAfter (~0.123, 0.11754944E~37) = ~0.122999996 +rem (~0.123, 0.11754944E~37) = 0.0 +* (~0.123, 0.5877472E~38) = ~0.722928E~39 ++ (~0.123, 0.5877472E~38) = ~0.123 +- (~0.123, 0.5877472E~38) = ~0.123 +/ (~0.123, 0.5877472E~38) = ~0.20927366E38 +nextAfter (~0.123, 0.5877472E~38) = ~0.122999996 +rem (~0.123, 0.5877472E~38) = 0.0 +* (~0.123, 0.1E~44) = ~0.0 ++ (~0.123, 0.1E~44) = ~0.123 +- (~0.123, 0.1E~44) = ~0.123 +/ (~0.123, 0.1E~44) = ~inf +nextAfter (~0.123, 0.1E~44) = ~0.122999996 +rem (~0.123, 0.1E~44) = inf +* (~0.123, 0.0) = ~0.0 ++ (~0.123, 0.0) = ~0.123 +- (~0.123, 0.0) = ~0.123 +/ (~0.123, 0.0) = ~inf +nextAfter (~0.123, 0.0) = ~0.122999996 +rem (~0.123, 0.0) = nan +* (~0.123, ~0.34028235E39) = 0.4185473E38 ++ (~0.123, ~0.34028235E39) = ~0.34028235E39 +- (~0.123, ~0.34028235E39) = 0.34028235E39 +/ (~0.123, ~0.34028235E39) = 0.361465E~39 +nextAfter (~0.123, ~0.34028235E39) = ~0.12300001 +rem (~0.123, ~0.34028235E39) = ~0.123 +* (~0.123, ~0.17014117E39) = 0.20927365E38 ++ (~0.123, ~0.17014117E39) = ~0.17014117E39 +- (~0.123, ~0.17014117E39) = 0.17014117E39 +/ (~0.123, ~0.17014117E39) = 0.722928E~39 +nextAfter (~0.123, ~0.17014117E39) = ~0.12300001 +rem (~0.123, ~0.17014117E39) = ~0.123 +* (~0.123, ~0.123E4) = 0.15129001E3 ++ (~0.123, ~0.123E4) = ~0.1230123E4 +- (~0.123, ~0.123E4) = 0.1229877E4 +/ (~0.123, ~0.123E4) = 0.100000005E~3 +nextAfter (~0.123, ~0.123E4) = ~0.12300001 +rem (~0.123, ~0.123E4) = ~0.123 +* (~0.123, ~0.123E2) = 0.15129001E1 ++ (~0.123, ~0.123E2) = ~0.12423E2 +- (~0.123, ~0.123E2) = 0.12177E2 +/ (~0.123, ~0.123E2) = 0.1E~1 +nextAfter (~0.123, ~0.123E2) = ~0.12300001 +rem (~0.123, ~0.123E2) = ~0.123 +* (~0.123, ~0.31415927E1) = 0.38641593 ++ (~0.123, ~0.31415927E1) = ~0.32645926E1 +- (~0.123, ~0.31415927E1) = 0.30185928E1 +/ (~0.123, ~0.31415927E1) = 0.39152116E~1 +nextAfter (~0.123, ~0.31415927E1) = ~0.12300001 +rem (~0.123, ~0.31415927E1) = ~0.123 +* (~0.123, ~0.27182817E1) = 0.33434868 ++ (~0.123, ~0.27182817E1) = ~0.28412817E1 +- (~0.123, ~0.27182817E1) = 0.25952818E1 +/ (~0.123, ~0.27182817E1) = 0.45249175E~1 +nextAfter (~0.123, ~0.27182817E1) = ~0.12300001 +rem (~0.123, ~0.27182817E1) = ~0.123 +* (~0.123, ~0.123E1) = 0.15129 ++ (~0.123, ~0.123E1) = ~0.1353E1 +- (~0.123, ~0.123E1) = 0.1107E1 +/ (~0.123, ~0.123E1) = 0.1 +nextAfter (~0.123, ~0.123E1) = ~0.12300001 +rem (~0.123, ~0.123E1) = ~0.123 +* (~0.123, ~0.123) = 0.15129001E~1 ++ (~0.123, ~0.123) = ~0.246 +- (~0.123, ~0.123) = 0.0 +/ (~0.123, ~0.123) = 0.1E1 +nextAfter (~0.123, ~0.123) = ~0.123 +rem (~0.123, ~0.123) = 0.0 +* (~0.123, ~0.123E~2) = 0.15129E~3 ++ (~0.123, ~0.123E~2) = ~0.124230005 +- (~0.123, ~0.123E~2) = ~0.12177 +/ (~0.123, ~0.123E~2) = 0.1E3 +nextAfter (~0.123, ~0.123E~2) = ~0.122999996 +rem (~0.123, ~0.123E~2) = 0.0 +* (~0.123, ~0.11754944E~37) = 0.1445858E~38 ++ (~0.123, ~0.11754944E~37) = ~0.123 +- (~0.123, ~0.11754944E~37) = ~0.123 +/ (~0.123, ~0.11754944E~37) = 0.10463683E38 +nextAfter (~0.123, ~0.11754944E~37) = ~0.122999996 +rem (~0.123, ~0.11754944E~37) = 0.0 +* (~0.123, ~0.5877472E~38) = 0.722928E~39 ++ (~0.123, ~0.5877472E~38) = ~0.123 +- (~0.123, ~0.5877472E~38) = ~0.123 +/ (~0.123, ~0.5877472E~38) = 0.20927366E38 +nextAfter (~0.123, ~0.5877472E~38) = ~0.122999996 +rem (~0.123, ~0.5877472E~38) = 0.0 +* (~0.123, ~0.1E~44) = 0.0 ++ (~0.123, ~0.1E~44) = ~0.123 +- (~0.123, ~0.1E~44) = ~0.123 +/ (~0.123, ~0.1E~44) = inf +nextAfter (~0.123, ~0.1E~44) = ~0.122999996 +rem (~0.123, ~0.1E~44) = inf +* (~0.123, ~0.0) = 0.0 ++ (~0.123, ~0.0) = ~0.123 +- (~0.123, ~0.0) = ~0.123 +/ (~0.123, ~0.0) = inf +nextAfter (~0.123, ~0.0) = ~0.122999996 +rem (~0.123, ~0.0) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.122999996 +rem (~0.123, inf) = ~0.123 +* (~0.123, ~inf) = inf ++ (~0.123, ~inf) = ~inf +- (~0.123, ~inf) = inf +/ (~0.123, ~inf) = 0.0 +nextAfter (~0.123, ~inf) = ~0.12300001 +rem (~0.123, ~inf) = ~0.123 +* (~0.123, nan) = nan ++ (~0.123, nan) = nan +- (~0.123, nan) = nan +/ (~0.123, nan) = nan +nextAfter (~0.123, nan) = nan +rem (~0.123, nan) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.122999996 +rem (~0.123, inf) = ~0.123 +* (~0.123E~2, 0.34028235E39) = ~0.4185473E36 ++ (~0.123E~2, 0.34028235E39) = 0.34028235E39 +- (~0.123E~2, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E~2, 0.34028235E39) = ~0.3614E~41 +nextAfter (~0.123E~2, 0.34028235E39) = ~0.12299999E~2 +rem (~0.123E~2, 0.34028235E39) = ~0.123E~2 +* (~0.123E~2, 0.17014117E39) = ~0.20927364E36 ++ (~0.123E~2, 0.17014117E39) = 0.17014117E39 +- (~0.123E~2, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E~2, 0.17014117E39) = ~0.7229E~41 +nextAfter (~0.123E~2, 0.17014117E39) = ~0.12299999E~2 +rem (~0.123E~2, 0.17014117E39) = ~0.123E~2 +* (~0.123E~2, 0.123E4) = ~0.15129001E1 ++ (~0.123E~2, 0.123E4) = 0.12299988E4 +- (~0.123E~2, 0.123E4) = ~0.12300012E4 +/ (~0.123E~2, 0.123E4) = ~0.1E~5 +nextAfter (~0.123E~2, 0.123E4) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E4) = ~0.123E~2 +* (~0.123E~2, 0.123E2) = ~0.15129001E~1 ++ (~0.123E~2, 0.123E2) = 0.1229877E2 +- (~0.123E~2, 0.123E2) = ~0.1230123E2 +/ (~0.123E~2, 0.123E2) = ~0.100000005E~3 +nextAfter (~0.123E~2, 0.123E2) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E2) = ~0.123E~2 +* (~0.123E~2, 0.31415927E1) = ~0.38641593E~2 ++ (~0.123E~2, 0.31415927E1) = 0.31403627E1 +- (~0.123E~2, 0.31415927E1) = ~0.31428227E1 +/ (~0.123E~2, 0.31415927E1) = ~0.39152117E~3 +nextAfter (~0.123E~2, 0.31415927E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.31415927E1) = ~0.123E~2 +* (~0.123E~2, 0.27182817E1) = ~0.33434867E~2 ++ (~0.123E~2, 0.27182817E1) = 0.27170517E1 +- (~0.123E~2, 0.27182817E1) = ~0.27195117E1 +/ (~0.123E~2, 0.27182817E1) = ~0.45249175E~3 +nextAfter (~0.123E~2, 0.27182817E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.27182817E1) = ~0.123E~2 +* (~0.123E~2, 0.123E1) = ~0.15129001E~2 ++ (~0.123E~2, 0.123E1) = 0.122877E1 +- (~0.123E~2, 0.123E1) = ~0.123123E1 +/ (~0.123E~2, 0.123E1) = ~0.1E~2 +nextAfter (~0.123E~2, 0.123E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E1) = ~0.123E~2 +* (~0.123E~2, 0.123) = ~0.15129E~3 ++ (~0.123E~2, 0.123) = 0.12177 +- (~0.123E~2, 0.123) = ~0.124230005 +/ (~0.123E~2, 0.123) = ~0.1E~1 +nextAfter (~0.123E~2, 0.123) = ~0.12299999E~2 +rem (~0.123E~2, 0.123) = ~0.123E~2 +* (~0.123E~2, 0.123E~2) = ~0.15129001E~5 ++ (~0.123E~2, 0.123E~2) = 0.0 +- (~0.123E~2, 0.123E~2) = ~0.246E~2 +/ (~0.123E~2, 0.123E~2) = ~0.1E1 +nextAfter (~0.123E~2, 0.123E~2) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E~2) = 0.0 +* (~0.123E~2, 0.11754944E~37) = ~0.14459E~40 ++ (~0.123E~2, 0.11754944E~37) = ~0.123E~2 +- (~0.123E~2, 0.11754944E~37) = ~0.123E~2 +/ (~0.123E~2, 0.11754944E~37) = ~0.10463683E36 +nextAfter (~0.123E~2, 0.11754944E~37) = ~0.12299999E~2 +rem (~0.123E~2, 0.11754944E~37) = 0.0 +* (~0.123E~2, 0.5877472E~38) = ~0.7229E~41 ++ (~0.123E~2, 0.5877472E~38) = ~0.123E~2 +- (~0.123E~2, 0.5877472E~38) = ~0.123E~2 +/ (~0.123E~2, 0.5877472E~38) = ~0.20927366E36 +nextAfter (~0.123E~2, 0.5877472E~38) = ~0.12299999E~2 +rem (~0.123E~2, 0.5877472E~38) = 0.0 +* (~0.123E~2, 0.1E~44) = ~0.0 ++ (~0.123E~2, 0.1E~44) = ~0.123E~2 +- (~0.123E~2, 0.1E~44) = ~0.123E~2 +/ (~0.123E~2, 0.1E~44) = ~inf +nextAfter (~0.123E~2, 0.1E~44) = ~0.12299999E~2 +rem (~0.123E~2, 0.1E~44) = inf +* (~0.123E~2, 0.0) = ~0.0 ++ (~0.123E~2, 0.0) = ~0.123E~2 +- (~0.123E~2, 0.0) = ~0.123E~2 +/ (~0.123E~2, 0.0) = ~inf +nextAfter (~0.123E~2, 0.0) = ~0.12299999E~2 +rem (~0.123E~2, 0.0) = nan +* (~0.123E~2, ~0.34028235E39) = 0.4185473E36 ++ (~0.123E~2, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E~2, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E~2, ~0.34028235E39) = 0.3614E~41 +nextAfter (~0.123E~2, ~0.34028235E39) = ~0.12300002E~2 +rem (~0.123E~2, ~0.34028235E39) = ~0.123E~2 +* (~0.123E~2, ~0.17014117E39) = 0.20927364E36 ++ (~0.123E~2, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E~2, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E~2, ~0.17014117E39) = 0.7229E~41 +nextAfter (~0.123E~2, ~0.17014117E39) = ~0.12300002E~2 +rem (~0.123E~2, ~0.17014117E39) = ~0.123E~2 +* (~0.123E~2, ~0.123E4) = 0.15129001E1 ++ (~0.123E~2, ~0.123E4) = ~0.12300012E4 +- (~0.123E~2, ~0.123E4) = 0.12299988E4 +/ (~0.123E~2, ~0.123E4) = 0.1E~5 +nextAfter (~0.123E~2, ~0.123E4) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E4) = ~0.123E~2 +* (~0.123E~2, ~0.123E2) = 0.15129001E~1 ++ (~0.123E~2, ~0.123E2) = ~0.1230123E2 +- (~0.123E~2, ~0.123E2) = 0.1229877E2 +/ (~0.123E~2, ~0.123E2) = 0.100000005E~3 +nextAfter (~0.123E~2, ~0.123E2) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E2) = ~0.123E~2 +* (~0.123E~2, ~0.31415927E1) = 0.38641593E~2 ++ (~0.123E~2, ~0.31415927E1) = ~0.31428227E1 +- (~0.123E~2, ~0.31415927E1) = 0.31403627E1 +/ (~0.123E~2, ~0.31415927E1) = 0.39152117E~3 +nextAfter (~0.123E~2, ~0.31415927E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.31415927E1) = ~0.123E~2 +* (~0.123E~2, ~0.27182817E1) = 0.33434867E~2 ++ (~0.123E~2, ~0.27182817E1) = ~0.27195117E1 +- (~0.123E~2, ~0.27182817E1) = 0.27170517E1 +/ (~0.123E~2, ~0.27182817E1) = 0.45249175E~3 +nextAfter (~0.123E~2, ~0.27182817E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.27182817E1) = ~0.123E~2 +* (~0.123E~2, ~0.123E1) = 0.15129001E~2 ++ (~0.123E~2, ~0.123E1) = ~0.123123E1 +- (~0.123E~2, ~0.123E1) = 0.122877E1 +/ (~0.123E~2, ~0.123E1) = 0.1E~2 +nextAfter (~0.123E~2, ~0.123E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E1) = ~0.123E~2 +* (~0.123E~2, ~0.123) = 0.15129E~3 ++ (~0.123E~2, ~0.123) = ~0.124230005 +- (~0.123E~2, ~0.123) = 0.12177 +/ (~0.123E~2, ~0.123) = 0.1E~1 +nextAfter (~0.123E~2, ~0.123) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123) = ~0.123E~2 +* (~0.123E~2, ~0.123E~2) = 0.15129001E~5 ++ (~0.123E~2, ~0.123E~2) = ~0.246E~2 +- (~0.123E~2, ~0.123E~2) = 0.0 +/ (~0.123E~2, ~0.123E~2) = 0.1E1 +nextAfter (~0.123E~2, ~0.123E~2) = ~0.123E~2 +rem (~0.123E~2, ~0.123E~2) = 0.0 +* (~0.123E~2, ~0.11754944E~37) = 0.14459E~40 ++ (~0.123E~2, ~0.11754944E~37) = ~0.123E~2 +- (~0.123E~2, ~0.11754944E~37) = ~0.123E~2 +/ (~0.123E~2, ~0.11754944E~37) = 0.10463683E36 +nextAfter (~0.123E~2, ~0.11754944E~37) = ~0.12299999E~2 +rem (~0.123E~2, ~0.11754944E~37) = 0.0 +* (~0.123E~2, ~0.5877472E~38) = 0.7229E~41 ++ (~0.123E~2, ~0.5877472E~38) = ~0.123E~2 +- (~0.123E~2, ~0.5877472E~38) = ~0.123E~2 +/ (~0.123E~2, ~0.5877472E~38) = 0.20927366E36 +nextAfter (~0.123E~2, ~0.5877472E~38) = ~0.12299999E~2 +rem (~0.123E~2, ~0.5877472E~38) = 0.0 +* (~0.123E~2, ~0.1E~44) = 0.0 ++ (~0.123E~2, ~0.1E~44) = ~0.123E~2 +- (~0.123E~2, ~0.1E~44) = ~0.123E~2 +/ (~0.123E~2, ~0.1E~44) = inf +nextAfter (~0.123E~2, ~0.1E~44) = ~0.12299999E~2 +rem (~0.123E~2, ~0.1E~44) = inf +* (~0.123E~2, ~0.0) = 0.0 ++ (~0.123E~2, ~0.0) = ~0.123E~2 +- (~0.123E~2, ~0.0) = ~0.123E~2 +/ (~0.123E~2, ~0.0) = inf +nextAfter (~0.123E~2, ~0.0) = ~0.12299999E~2 +rem (~0.123E~2, ~0.0) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.123E~2, ~inf) = inf ++ (~0.123E~2, ~inf) = ~inf +- (~0.123E~2, ~inf) = inf +/ (~0.123E~2, ~inf) = 0.0 +nextAfter (~0.123E~2, ~inf) = ~0.12300002E~2 +rem (~0.123E~2, ~inf) = ~0.123E~2 +* (~0.123E~2, nan) = nan ++ (~0.123E~2, nan) = nan +- (~0.123E~2, nan) = nan +/ (~0.123E~2, nan) = nan +nextAfter (~0.123E~2, nan) = nan +rem (~0.123E~2, nan) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.11754944E~37, 0.34028235E39) = ~0.39999998E1 ++ (~0.11754944E~37, 0.34028235E39) = 0.34028235E39 +- (~0.11754944E~37, 0.34028235E39) = ~0.34028235E39 +/ (~0.11754944E~37, 0.34028235E39) = ~0.0 +nextAfter (~0.11754944E~37, 0.34028235E39) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.34028235E39) = ~0.11754944E~37 +* (~0.11754944E~37, 0.17014117E39) = ~0.19999999E1 ++ (~0.11754944E~37, 0.17014117E39) = 0.17014117E39 +- (~0.11754944E~37, 0.17014117E39) = ~0.17014117E39 +/ (~0.11754944E~37, 0.17014117E39) = ~0.0 +nextAfter (~0.11754944E~37, 0.17014117E39) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.17014117E39) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E4) = ~0.1445858E~34 ++ (~0.11754944E~37, 0.123E4) = 0.123E4 +- (~0.11754944E~37, 0.123E4) = ~0.123E4 +/ (~0.11754944E~37, 0.123E4) = ~0.9557E~41 +nextAfter (~0.11754944E~37, 0.123E4) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E4) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E2) = ~0.14458581E~36 ++ (~0.11754944E~37, 0.123E2) = 0.123E2 +- (~0.11754944E~37, 0.123E2) = ~0.123E2 +/ (~0.11754944E~37, 0.123E2) = ~0.955687E~39 +nextAfter (~0.11754944E~37, 0.123E2) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E2) = ~0.11754944E~37 +* (~0.11754944E~37, 0.31415927E1) = ~0.36929245E~37 ++ (~0.11754944E~37, 0.31415927E1) = 0.31415927E1 +- (~0.11754944E~37, 0.31415927E1) = ~0.31415927E1 +/ (~0.11754944E~37, 0.31415927E1) = ~0.3741715E~38 +nextAfter (~0.11754944E~37, 0.31415927E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.31415927E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.27182817E1) = ~0.31953248E~37 ++ (~0.11754944E~37, 0.27182817E1) = 0.27182817E1 +- (~0.11754944E~37, 0.27182817E1) = ~0.27182817E1 +/ (~0.11754944E~37, 0.27182817E1) = ~0.4324403E~38 +nextAfter (~0.11754944E~37, 0.27182817E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.27182817E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E1) = ~0.14458581E~37 ++ (~0.11754944E~37, 0.123E1) = 0.123E1 +- (~0.11754944E~37, 0.123E1) = ~0.123E1 +/ (~0.11754944E~37, 0.123E1) = ~0.9556864E~38 +nextAfter (~0.11754944E~37, 0.123E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123) = ~0.1445858E~38 ++ (~0.11754944E~37, 0.123) = 0.123 +- (~0.11754944E~37, 0.123) = ~0.123 +/ (~0.11754944E~37, 0.123) = ~0.9556864E~37 +nextAfter (~0.11754944E~37, 0.123) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E~2) = ~0.14459E~40 ++ (~0.11754944E~37, 0.123E~2) = 0.123E~2 +- (~0.11754944E~37, 0.123E~2) = ~0.123E~2 +/ (~0.11754944E~37, 0.123E~2) = ~0.95568645E~35 +nextAfter (~0.11754944E~37, 0.123E~2) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E~2) = ~0.11754944E~37 +* (~0.11754944E~37, 0.11754944E~37) = ~0.0 ++ (~0.11754944E~37, 0.11754944E~37) = 0.0 +- (~0.11754944E~37, 0.11754944E~37) = ~0.23509887E~37 +/ (~0.11754944E~37, 0.11754944E~37) = ~0.1E1 +nextAfter (~0.11754944E~37, 0.11754944E~37) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.11754944E~37) = 0.0 +* (~0.11754944E~37, 0.5877472E~38) = ~0.0 ++ (~0.11754944E~37, 0.5877472E~38) = ~0.5877472E~38 +- (~0.11754944E~37, 0.5877472E~38) = ~0.17632415E~37 +/ (~0.11754944E~37, 0.5877472E~38) = ~0.2E1 +nextAfter (~0.11754944E~37, 0.5877472E~38) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.5877472E~38) = 0.0 +* (~0.11754944E~37, 0.1E~44) = ~0.0 ++ (~0.11754944E~37, 0.1E~44) = ~0.11754942E~37 +- (~0.11754944E~37, 0.1E~44) = ~0.11754945E~37 +/ (~0.11754944E~37, 0.1E~44) = ~0.8388608E7 +nextAfter (~0.11754944E~37, 0.1E~44) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.1E~44) = 0.0 +* (~0.11754944E~37, 0.0) = ~0.0 ++ (~0.11754944E~37, 0.0) = ~0.11754944E~37 +- (~0.11754944E~37, 0.0) = ~0.11754944E~37 +/ (~0.11754944E~37, 0.0) = ~inf +nextAfter (~0.11754944E~37, 0.0) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.0) = nan +* (~0.11754944E~37, ~0.34028235E39) = 0.39999998E1 ++ (~0.11754944E~37, ~0.34028235E39) = ~0.34028235E39 +- (~0.11754944E~37, ~0.34028235E39) = 0.34028235E39 +/ (~0.11754944E~37, ~0.34028235E39) = 0.0 +nextAfter (~0.11754944E~37, ~0.34028235E39) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.34028235E39) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.17014117E39) = 0.19999999E1 ++ (~0.11754944E~37, ~0.17014117E39) = ~0.17014117E39 +- (~0.11754944E~37, ~0.17014117E39) = 0.17014117E39 +/ (~0.11754944E~37, ~0.17014117E39) = 0.0 +nextAfter (~0.11754944E~37, ~0.17014117E39) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.17014117E39) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E4) = 0.1445858E~34 ++ (~0.11754944E~37, ~0.123E4) = ~0.123E4 +- (~0.11754944E~37, ~0.123E4) = 0.123E4 +/ (~0.11754944E~37, ~0.123E4) = 0.9557E~41 +nextAfter (~0.11754944E~37, ~0.123E4) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E4) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E2) = 0.14458581E~36 ++ (~0.11754944E~37, ~0.123E2) = ~0.123E2 +- (~0.11754944E~37, ~0.123E2) = 0.123E2 +/ (~0.11754944E~37, ~0.123E2) = 0.955687E~39 +nextAfter (~0.11754944E~37, ~0.123E2) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E2) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.31415927E1) = 0.36929245E~37 ++ (~0.11754944E~37, ~0.31415927E1) = ~0.31415927E1 +- (~0.11754944E~37, ~0.31415927E1) = 0.31415927E1 +/ (~0.11754944E~37, ~0.31415927E1) = 0.3741715E~38 +nextAfter (~0.11754944E~37, ~0.31415927E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.31415927E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.27182817E1) = 0.31953248E~37 ++ (~0.11754944E~37, ~0.27182817E1) = ~0.27182817E1 +- (~0.11754944E~37, ~0.27182817E1) = 0.27182817E1 +/ (~0.11754944E~37, ~0.27182817E1) = 0.4324403E~38 +nextAfter (~0.11754944E~37, ~0.27182817E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.27182817E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E1) = 0.14458581E~37 ++ (~0.11754944E~37, ~0.123E1) = ~0.123E1 +- (~0.11754944E~37, ~0.123E1) = 0.123E1 +/ (~0.11754944E~37, ~0.123E1) = 0.9556864E~38 +nextAfter (~0.11754944E~37, ~0.123E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123) = 0.1445858E~38 ++ (~0.11754944E~37, ~0.123) = ~0.123 +- (~0.11754944E~37, ~0.123) = 0.123 +/ (~0.11754944E~37, ~0.123) = 0.9556864E~37 +nextAfter (~0.11754944E~37, ~0.123) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E~2) = 0.14459E~40 ++ (~0.11754944E~37, ~0.123E~2) = ~0.123E~2 +- (~0.11754944E~37, ~0.123E~2) = 0.123E~2 +/ (~0.11754944E~37, ~0.123E~2) = 0.95568645E~35 +nextAfter (~0.11754944E~37, ~0.123E~2) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E~2) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.11754944E~37) = 0.0 ++ (~0.11754944E~37, ~0.11754944E~37) = ~0.23509887E~37 +- (~0.11754944E~37, ~0.11754944E~37) = 0.0 +/ (~0.11754944E~37, ~0.11754944E~37) = 0.1E1 +nextAfter (~0.11754944E~37, ~0.11754944E~37) = ~0.11754944E~37 +rem (~0.11754944E~37, ~0.11754944E~37) = 0.0 +* (~0.11754944E~37, ~0.5877472E~38) = 0.0 ++ (~0.11754944E~37, ~0.5877472E~38) = ~0.17632415E~37 +- (~0.11754944E~37, ~0.5877472E~38) = ~0.5877472E~38 +/ (~0.11754944E~37, ~0.5877472E~38) = 0.2E1 +nextAfter (~0.11754944E~37, ~0.5877472E~38) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.5877472E~38) = 0.0 +* (~0.11754944E~37, ~0.1E~44) = 0.0 ++ (~0.11754944E~37, ~0.1E~44) = ~0.11754945E~37 +- (~0.11754944E~37, ~0.1E~44) = ~0.11754942E~37 +/ (~0.11754944E~37, ~0.1E~44) = 0.8388608E7 +nextAfter (~0.11754944E~37, ~0.1E~44) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.1E~44) = 0.0 +* (~0.11754944E~37, ~0.0) = 0.0 ++ (~0.11754944E~37, ~0.0) = ~0.11754944E~37 +- (~0.11754944E~37, ~0.0) = ~0.11754944E~37 +/ (~0.11754944E~37, ~0.0) = inf +nextAfter (~0.11754944E~37, ~0.0) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.0) = nan +* (~0.11754944E~37, inf) = ~inf ++ (~0.11754944E~37, inf) = inf +- (~0.11754944E~37, inf) = ~inf +/ (~0.11754944E~37, inf) = ~0.0 +nextAfter (~0.11754944E~37, inf) = ~0.11754942E~37 +rem (~0.11754944E~37, inf) = ~0.11754944E~37 +* (~0.11754944E~37, ~inf) = inf ++ (~0.11754944E~37, ~inf) = ~inf +- (~0.11754944E~37, ~inf) = inf +/ (~0.11754944E~37, ~inf) = 0.0 +nextAfter (~0.11754944E~37, ~inf) = ~0.11754945E~37 +rem (~0.11754944E~37, ~inf) = ~0.11754944E~37 +* (~0.11754944E~37, nan) = nan ++ (~0.11754944E~37, nan) = nan +- (~0.11754944E~37, nan) = nan +/ (~0.11754944E~37, nan) = nan +nextAfter (~0.11754944E~37, nan) = nan +rem (~0.11754944E~37, nan) = nan +* (~0.11754944E~37, inf) = ~inf ++ (~0.11754944E~37, inf) = inf +- (~0.11754944E~37, inf) = ~inf +/ (~0.11754944E~37, inf) = ~0.0 +nextAfter (~0.11754944E~37, inf) = ~0.11754942E~37 +rem (~0.11754944E~37, inf) = ~0.11754944E~37 +* (~0.5877472E~38, 0.34028235E39) = ~0.19999999E1 ++ (~0.5877472E~38, 0.34028235E39) = 0.34028235E39 +- (~0.5877472E~38, 0.34028235E39) = ~0.34028235E39 +/ (~0.5877472E~38, 0.34028235E39) = ~0.0 +nextAfter (~0.5877472E~38, 0.34028235E39) = ~0.587747E~38 +rem (~0.5877472E~38, 0.34028235E39) = ~0.5877472E~38 +* (~0.5877472E~38, 0.17014117E39) = ~0.99999994 ++ (~0.5877472E~38, 0.17014117E39) = 0.17014117E39 +- (~0.5877472E~38, 0.17014117E39) = ~0.17014117E39 +/ (~0.5877472E~38, 0.17014117E39) = ~0.0 +nextAfter (~0.5877472E~38, 0.17014117E39) = ~0.587747E~38 +rem (~0.5877472E~38, 0.17014117E39) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E4) = ~0.722929E~35 ++ (~0.5877472E~38, 0.123E4) = 0.123E4 +- (~0.5877472E~38, 0.123E4) = ~0.123E4 +/ (~0.5877472E~38, 0.123E4) = ~0.4778E~41 +nextAfter (~0.5877472E~38, 0.123E4) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E4) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E2) = ~0.72292904E~37 ++ (~0.5877472E~38, 0.123E2) = 0.123E2 +- (~0.5877472E~38, 0.123E2) = ~0.123E2 +/ (~0.5877472E~38, 0.123E2) = ~0.477843E~39 +nextAfter (~0.5877472E~38, 0.123E2) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E2) = ~0.5877472E~38 +* (~0.5877472E~38, 0.31415927E1) = ~0.18464623E~37 ++ (~0.5877472E~38, 0.31415927E1) = 0.31415927E1 +- (~0.5877472E~38, 0.31415927E1) = ~0.31415927E1 +/ (~0.5877472E~38, 0.31415927E1) = ~0.1870857E~38 +nextAfter (~0.5877472E~38, 0.31415927E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.31415927E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.27182817E1) = ~0.15976624E~37 ++ (~0.5877472E~38, 0.27182817E1) = 0.27182817E1 +- (~0.5877472E~38, 0.27182817E1) = ~0.27182817E1 +/ (~0.5877472E~38, 0.27182817E1) = ~0.2162201E~38 +nextAfter (~0.5877472E~38, 0.27182817E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.27182817E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E1) = ~0.722929E~38 ++ (~0.5877472E~38, 0.123E1) = 0.123E1 +- (~0.5877472E~38, 0.123E1) = ~0.123E1 +/ (~0.5877472E~38, 0.123E1) = ~0.4778432E~38 +nextAfter (~0.5877472E~38, 0.123E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123) = ~0.722928E~39 ++ (~0.5877472E~38, 0.123) = 0.123 +- (~0.5877472E~38, 0.123) = ~0.123 +/ (~0.5877472E~38, 0.123) = ~0.4778432E~37 +nextAfter (~0.5877472E~38, 0.123) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E~2) = ~0.7229E~41 ++ (~0.5877472E~38, 0.123E~2) = 0.123E~2 +- (~0.5877472E~38, 0.123E~2) = ~0.123E~2 +/ (~0.5877472E~38, 0.123E~2) = ~0.47784322E~35 +nextAfter (~0.5877472E~38, 0.123E~2) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E~2) = ~0.5877472E~38 +* (~0.5877472E~38, 0.11754944E~37) = ~0.0 ++ (~0.5877472E~38, 0.11754944E~37) = 0.5877472E~38 +- (~0.5877472E~38, 0.11754944E~37) = ~0.17632415E~37 +/ (~0.5877472E~38, 0.11754944E~37) = ~0.5 +nextAfter (~0.5877472E~38, 0.11754944E~37) = ~0.587747E~38 +rem (~0.5877472E~38, 0.11754944E~37) = ~0.5877472E~38 +* (~0.5877472E~38, 0.5877472E~38) = ~0.0 ++ (~0.5877472E~38, 0.5877472E~38) = 0.0 +- (~0.5877472E~38, 0.5877472E~38) = ~0.11754944E~37 +/ (~0.5877472E~38, 0.5877472E~38) = ~0.1E1 +nextAfter (~0.5877472E~38, 0.5877472E~38) = ~0.587747E~38 +rem (~0.5877472E~38, 0.5877472E~38) = 0.0 +* (~0.5877472E~38, 0.1E~44) = ~0.0 ++ (~0.5877472E~38, 0.1E~44) = ~0.587747E~38 +- (~0.5877472E~38, 0.1E~44) = ~0.5877473E~38 +/ (~0.5877472E~38, 0.1E~44) = ~0.4194304E7 +nextAfter (~0.5877472E~38, 0.1E~44) = ~0.587747E~38 +rem (~0.5877472E~38, 0.1E~44) = 0.0 +* (~0.5877472E~38, 0.0) = ~0.0 ++ (~0.5877472E~38, 0.0) = ~0.5877472E~38 +- (~0.5877472E~38, 0.0) = ~0.5877472E~38 +/ (~0.5877472E~38, 0.0) = ~inf +nextAfter (~0.5877472E~38, 0.0) = ~0.587747E~38 +rem (~0.5877472E~38, 0.0) = nan +* (~0.5877472E~38, ~0.34028235E39) = 0.19999999E1 ++ (~0.5877472E~38, ~0.34028235E39) = ~0.34028235E39 +- (~0.5877472E~38, ~0.34028235E39) = 0.34028235E39 +/ (~0.5877472E~38, ~0.34028235E39) = 0.0 +nextAfter (~0.5877472E~38, ~0.34028235E39) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.34028235E39) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.17014117E39) = 0.99999994 ++ (~0.5877472E~38, ~0.17014117E39) = ~0.17014117E39 +- (~0.5877472E~38, ~0.17014117E39) = 0.17014117E39 +/ (~0.5877472E~38, ~0.17014117E39) = 0.0 +nextAfter (~0.5877472E~38, ~0.17014117E39) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.17014117E39) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E4) = 0.722929E~35 ++ (~0.5877472E~38, ~0.123E4) = ~0.123E4 +- (~0.5877472E~38, ~0.123E4) = 0.123E4 +/ (~0.5877472E~38, ~0.123E4) = 0.4778E~41 +nextAfter (~0.5877472E~38, ~0.123E4) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E4) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E2) = 0.72292904E~37 ++ (~0.5877472E~38, ~0.123E2) = ~0.123E2 +- (~0.5877472E~38, ~0.123E2) = 0.123E2 +/ (~0.5877472E~38, ~0.123E2) = 0.477843E~39 +nextAfter (~0.5877472E~38, ~0.123E2) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E2) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.31415927E1) = 0.18464623E~37 ++ (~0.5877472E~38, ~0.31415927E1) = ~0.31415927E1 +- (~0.5877472E~38, ~0.31415927E1) = 0.31415927E1 +/ (~0.5877472E~38, ~0.31415927E1) = 0.1870857E~38 +nextAfter (~0.5877472E~38, ~0.31415927E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.31415927E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.27182817E1) = 0.15976624E~37 ++ (~0.5877472E~38, ~0.27182817E1) = ~0.27182817E1 +- (~0.5877472E~38, ~0.27182817E1) = 0.27182817E1 +/ (~0.5877472E~38, ~0.27182817E1) = 0.2162201E~38 +nextAfter (~0.5877472E~38, ~0.27182817E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.27182817E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E1) = 0.722929E~38 ++ (~0.5877472E~38, ~0.123E1) = ~0.123E1 +- (~0.5877472E~38, ~0.123E1) = 0.123E1 +/ (~0.5877472E~38, ~0.123E1) = 0.4778432E~38 +nextAfter (~0.5877472E~38, ~0.123E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123) = 0.722928E~39 ++ (~0.5877472E~38, ~0.123) = ~0.123 +- (~0.5877472E~38, ~0.123) = 0.123 +/ (~0.5877472E~38, ~0.123) = 0.4778432E~37 +nextAfter (~0.5877472E~38, ~0.123) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E~2) = 0.7229E~41 ++ (~0.5877472E~38, ~0.123E~2) = ~0.123E~2 +- (~0.5877472E~38, ~0.123E~2) = 0.123E~2 +/ (~0.5877472E~38, ~0.123E~2) = 0.47784322E~35 +nextAfter (~0.5877472E~38, ~0.123E~2) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E~2) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.11754944E~37) = 0.0 ++ (~0.5877472E~38, ~0.11754944E~37) = ~0.17632415E~37 +- (~0.5877472E~38, ~0.11754944E~37) = 0.5877472E~38 +/ (~0.5877472E~38, ~0.11754944E~37) = 0.5 +nextAfter (~0.5877472E~38, ~0.11754944E~37) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.11754944E~37) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.5877472E~38) = 0.0 ++ (~0.5877472E~38, ~0.5877472E~38) = ~0.11754944E~37 +- (~0.5877472E~38, ~0.5877472E~38) = 0.0 +/ (~0.5877472E~38, ~0.5877472E~38) = 0.1E1 +nextAfter (~0.5877472E~38, ~0.5877472E~38) = ~0.5877472E~38 +rem (~0.5877472E~38, ~0.5877472E~38) = 0.0 +* (~0.5877472E~38, ~0.1E~44) = 0.0 ++ (~0.5877472E~38, ~0.1E~44) = ~0.5877473E~38 +- (~0.5877472E~38, ~0.1E~44) = ~0.587747E~38 +/ (~0.5877472E~38, ~0.1E~44) = 0.4194304E7 +nextAfter (~0.5877472E~38, ~0.1E~44) = ~0.587747E~38 +rem (~0.5877472E~38, ~0.1E~44) = 0.0 +* (~0.5877472E~38, ~0.0) = 0.0 ++ (~0.5877472E~38, ~0.0) = ~0.5877472E~38 +- (~0.5877472E~38, ~0.0) = ~0.5877472E~38 +/ (~0.5877472E~38, ~0.0) = inf +nextAfter (~0.5877472E~38, ~0.0) = ~0.587747E~38 +rem (~0.5877472E~38, ~0.0) = nan +* (~0.5877472E~38, inf) = ~inf ++ (~0.5877472E~38, inf) = inf +- (~0.5877472E~38, inf) = ~inf +/ (~0.5877472E~38, inf) = ~0.0 +nextAfter (~0.5877472E~38, inf) = ~0.587747E~38 +rem (~0.5877472E~38, inf) = ~0.5877472E~38 +* (~0.5877472E~38, ~inf) = inf ++ (~0.5877472E~38, ~inf) = ~inf +- (~0.5877472E~38, ~inf) = inf +/ (~0.5877472E~38, ~inf) = 0.0 +nextAfter (~0.5877472E~38, ~inf) = ~0.5877473E~38 +rem (~0.5877472E~38, ~inf) = ~0.5877472E~38 +* (~0.5877472E~38, nan) = nan ++ (~0.5877472E~38, nan) = nan +- (~0.5877472E~38, nan) = nan +/ (~0.5877472E~38, nan) = nan +nextAfter (~0.5877472E~38, nan) = nan +rem (~0.5877472E~38, nan) = nan +* (~0.5877472E~38, inf) = ~inf ++ (~0.5877472E~38, inf) = inf +- (~0.5877472E~38, inf) = ~inf +/ (~0.5877472E~38, inf) = ~0.0 +nextAfter (~0.5877472E~38, inf) = ~0.587747E~38 +rem (~0.5877472E~38, inf) = ~0.5877472E~38 +* (~0.1E~44, 0.34028235E39) = ~0.47683713E~6 ++ (~0.1E~44, 0.34028235E39) = 0.34028235E39 +- (~0.1E~44, 0.34028235E39) = ~0.34028235E39 +/ (~0.1E~44, 0.34028235E39) = ~0.0 +nextAfter (~0.1E~44, 0.34028235E39) = ~0.0 +rem (~0.1E~44, 0.34028235E39) = ~0.1E~44 +* (~0.1E~44, 0.17014117E39) = ~0.23841856E~6 ++ (~0.1E~44, 0.17014117E39) = 0.17014117E39 +- (~0.1E~44, 0.17014117E39) = ~0.17014117E39 +/ (~0.1E~44, 0.17014117E39) = ~0.0 +nextAfter (~0.1E~44, 0.17014117E39) = ~0.0 +rem (~0.1E~44, 0.17014117E39) = ~0.1E~44 +* (~0.1E~44, 0.123E4) = ~0.1724E~41 ++ (~0.1E~44, 0.123E4) = 0.123E4 +- (~0.1E~44, 0.123E4) = ~0.123E4 +/ (~0.1E~44, 0.123E4) = ~0.0 +nextAfter (~0.1E~44, 0.123E4) = ~0.0 +rem (~0.1E~44, 0.123E4) = ~0.1E~44 +* (~0.1E~44, 0.123E2) = ~0.17E~43 ++ (~0.1E~44, 0.123E2) = 0.123E2 +- (~0.1E~44, 0.123E2) = ~0.123E2 +/ (~0.1E~44, 0.123E2) = ~0.0 +nextAfter (~0.1E~44, 0.123E2) = ~0.0 +rem (~0.1E~44, 0.123E2) = ~0.1E~44 +* (~0.1E~44, 0.31415927E1) = ~0.4E~44 ++ (~0.1E~44, 0.31415927E1) = 0.31415927E1 +- (~0.1E~44, 0.31415927E1) = ~0.31415927E1 +/ (~0.1E~44, 0.31415927E1) = ~0.0 +nextAfter (~0.1E~44, 0.31415927E1) = ~0.0 +rem (~0.1E~44, 0.31415927E1) = ~0.1E~44 +* (~0.1E~44, 0.27182817E1) = ~0.4E~44 ++ (~0.1E~44, 0.27182817E1) = 0.27182817E1 +- (~0.1E~44, 0.27182817E1) = ~0.27182817E1 +/ (~0.1E~44, 0.27182817E1) = ~0.0 +nextAfter (~0.1E~44, 0.27182817E1) = ~0.0 +rem (~0.1E~44, 0.27182817E1) = ~0.1E~44 +* (~0.1E~44, 0.123E1) = ~0.1E~44 ++ (~0.1E~44, 0.123E1) = 0.123E1 +- (~0.1E~44, 0.123E1) = ~0.123E1 +/ (~0.1E~44, 0.123E1) = ~0.1E~44 +nextAfter (~0.1E~44, 0.123E1) = ~0.0 +rem (~0.1E~44, 0.123E1) = ~0.1E~44 +* (~0.1E~44, 0.123) = ~0.0 ++ (~0.1E~44, 0.123) = 0.123 +- (~0.1E~44, 0.123) = ~0.123 +/ (~0.1E~44, 0.123) = ~0.11E~43 +nextAfter (~0.1E~44, 0.123) = ~0.0 +rem (~0.1E~44, 0.123) = ~0.1E~44 +* (~0.1E~44, 0.123E~2) = ~0.0 ++ (~0.1E~44, 0.123E~2) = 0.123E~2 +- (~0.1E~44, 0.123E~2) = ~0.123E~2 +/ (~0.1E~44, 0.123E~2) = ~0.1139E~41 +nextAfter (~0.1E~44, 0.123E~2) = ~0.0 +rem (~0.1E~44, 0.123E~2) = ~0.1E~44 +* (~0.1E~44, 0.11754944E~37) = ~0.0 ++ (~0.1E~44, 0.11754944E~37) = 0.11754942E~37 +- (~0.1E~44, 0.11754944E~37) = ~0.11754945E~37 +/ (~0.1E~44, 0.11754944E~37) = ~0.11920929E~6 +nextAfter (~0.1E~44, 0.11754944E~37) = ~0.0 +rem (~0.1E~44, 0.11754944E~37) = ~0.1E~44 +* (~0.1E~44, 0.5877472E~38) = ~0.0 ++ (~0.1E~44, 0.5877472E~38) = 0.587747E~38 +- (~0.1E~44, 0.5877472E~38) = ~0.5877473E~38 +/ (~0.1E~44, 0.5877472E~38) = ~0.23841858E~6 +nextAfter (~0.1E~44, 0.5877472E~38) = ~0.0 +rem (~0.1E~44, 0.5877472E~38) = ~0.1E~44 +* (~0.1E~44, 0.1E~44) = ~0.0 ++ (~0.1E~44, 0.1E~44) = 0.0 +- (~0.1E~44, 0.1E~44) = ~0.3E~44 +/ (~0.1E~44, 0.1E~44) = ~0.1E1 +nextAfter (~0.1E~44, 0.1E~44) = ~0.0 +rem (~0.1E~44, 0.1E~44) = 0.0 +* (~0.1E~44, 0.0) = ~0.0 ++ (~0.1E~44, 0.0) = ~0.1E~44 +- (~0.1E~44, 0.0) = ~0.1E~44 +/ (~0.1E~44, 0.0) = ~inf +nextAfter (~0.1E~44, 0.0) = ~0.0 +rem (~0.1E~44, 0.0) = nan +* (~0.1E~44, ~0.34028235E39) = 0.47683713E~6 ++ (~0.1E~44, ~0.34028235E39) = ~0.34028235E39 +- (~0.1E~44, ~0.34028235E39) = 0.34028235E39 +/ (~0.1E~44, ~0.34028235E39) = 0.0 +nextAfter (~0.1E~44, ~0.34028235E39) = ~0.3E~44 +rem (~0.1E~44, ~0.34028235E39) = ~0.1E~44 +* (~0.1E~44, ~0.17014117E39) = 0.23841856E~6 ++ (~0.1E~44, ~0.17014117E39) = ~0.17014117E39 +- (~0.1E~44, ~0.17014117E39) = 0.17014117E39 +/ (~0.1E~44, ~0.17014117E39) = 0.0 +nextAfter (~0.1E~44, ~0.17014117E39) = ~0.3E~44 +rem (~0.1E~44, ~0.17014117E39) = ~0.1E~44 +* (~0.1E~44, ~0.123E4) = 0.1724E~41 ++ (~0.1E~44, ~0.123E4) = ~0.123E4 +- (~0.1E~44, ~0.123E4) = 0.123E4 +/ (~0.1E~44, ~0.123E4) = 0.0 +nextAfter (~0.1E~44, ~0.123E4) = ~0.3E~44 +rem (~0.1E~44, ~0.123E4) = ~0.1E~44 +* (~0.1E~44, ~0.123E2) = 0.17E~43 ++ (~0.1E~44, ~0.123E2) = ~0.123E2 +- (~0.1E~44, ~0.123E2) = 0.123E2 +/ (~0.1E~44, ~0.123E2) = 0.0 +nextAfter (~0.1E~44, ~0.123E2) = ~0.3E~44 +rem (~0.1E~44, ~0.123E2) = ~0.1E~44 +* (~0.1E~44, ~0.31415927E1) = 0.4E~44 ++ (~0.1E~44, ~0.31415927E1) = ~0.31415927E1 +- (~0.1E~44, ~0.31415927E1) = 0.31415927E1 +/ (~0.1E~44, ~0.31415927E1) = 0.0 +nextAfter (~0.1E~44, ~0.31415927E1) = ~0.3E~44 +rem (~0.1E~44, ~0.31415927E1) = ~0.1E~44 +* (~0.1E~44, ~0.27182817E1) = 0.4E~44 ++ (~0.1E~44, ~0.27182817E1) = ~0.27182817E1 +- (~0.1E~44, ~0.27182817E1) = 0.27182817E1 +/ (~0.1E~44, ~0.27182817E1) = 0.0 +nextAfter (~0.1E~44, ~0.27182817E1) = ~0.3E~44 +rem (~0.1E~44, ~0.27182817E1) = ~0.1E~44 +* (~0.1E~44, ~0.123E1) = 0.1E~44 ++ (~0.1E~44, ~0.123E1) = ~0.123E1 +- (~0.1E~44, ~0.123E1) = 0.123E1 +/ (~0.1E~44, ~0.123E1) = 0.1E~44 +nextAfter (~0.1E~44, ~0.123E1) = ~0.3E~44 +rem (~0.1E~44, ~0.123E1) = ~0.1E~44 +* (~0.1E~44, ~0.123) = 0.0 ++ (~0.1E~44, ~0.123) = ~0.123 +- (~0.1E~44, ~0.123) = 0.123 +/ (~0.1E~44, ~0.123) = 0.11E~43 +nextAfter (~0.1E~44, ~0.123) = ~0.3E~44 +rem (~0.1E~44, ~0.123) = ~0.1E~44 +* (~0.1E~44, ~0.123E~2) = 0.0 ++ (~0.1E~44, ~0.123E~2) = ~0.123E~2 +- (~0.1E~44, ~0.123E~2) = 0.123E~2 +/ (~0.1E~44, ~0.123E~2) = 0.1139E~41 +nextAfter (~0.1E~44, ~0.123E~2) = ~0.3E~44 +rem (~0.1E~44, ~0.123E~2) = ~0.1E~44 +* (~0.1E~44, ~0.11754944E~37) = 0.0 ++ (~0.1E~44, ~0.11754944E~37) = ~0.11754945E~37 +- (~0.1E~44, ~0.11754944E~37) = 0.11754942E~37 +/ (~0.1E~44, ~0.11754944E~37) = 0.11920929E~6 +nextAfter (~0.1E~44, ~0.11754944E~37) = ~0.3E~44 +rem (~0.1E~44, ~0.11754944E~37) = ~0.1E~44 +* (~0.1E~44, ~0.5877472E~38) = 0.0 ++ (~0.1E~44, ~0.5877472E~38) = ~0.5877473E~38 +- (~0.1E~44, ~0.5877472E~38) = 0.587747E~38 +/ (~0.1E~44, ~0.5877472E~38) = 0.23841858E~6 +nextAfter (~0.1E~44, ~0.5877472E~38) = ~0.3E~44 +rem (~0.1E~44, ~0.5877472E~38) = ~0.1E~44 +* (~0.1E~44, ~0.1E~44) = 0.0 ++ (~0.1E~44, ~0.1E~44) = ~0.3E~44 +- (~0.1E~44, ~0.1E~44) = 0.0 +/ (~0.1E~44, ~0.1E~44) = 0.1E1 +nextAfter (~0.1E~44, ~0.1E~44) = ~0.1E~44 +rem (~0.1E~44, ~0.1E~44) = 0.0 +* (~0.1E~44, ~0.0) = 0.0 ++ (~0.1E~44, ~0.0) = ~0.1E~44 +- (~0.1E~44, ~0.0) = ~0.1E~44 +/ (~0.1E~44, ~0.0) = inf +nextAfter (~0.1E~44, ~0.0) = ~0.0 +rem (~0.1E~44, ~0.0) = nan +* (~0.1E~44, inf) = ~inf ++ (~0.1E~44, inf) = inf +- (~0.1E~44, inf) = ~inf +/ (~0.1E~44, inf) = ~0.0 +nextAfter (~0.1E~44, inf) = ~0.0 +rem (~0.1E~44, inf) = ~0.1E~44 +* (~0.1E~44, ~inf) = inf ++ (~0.1E~44, ~inf) = ~inf +- (~0.1E~44, ~inf) = inf +/ (~0.1E~44, ~inf) = 0.0 +nextAfter (~0.1E~44, ~inf) = ~0.3E~44 +rem (~0.1E~44, ~inf) = ~0.1E~44 +* (~0.1E~44, nan) = nan ++ (~0.1E~44, nan) = nan +- (~0.1E~44, nan) = nan +/ (~0.1E~44, nan) = nan +nextAfter (~0.1E~44, nan) = nan +rem (~0.1E~44, nan) = nan +* (~0.1E~44, inf) = ~inf ++ (~0.1E~44, inf) = inf +- (~0.1E~44, inf) = ~inf +/ (~0.1E~44, inf) = ~0.0 +nextAfter (~0.1E~44, inf) = ~0.0 +rem (~0.1E~44, inf) = ~0.1E~44 +* (~0.0, 0.34028235E39) = ~0.0 ++ (~0.0, 0.34028235E39) = 0.34028235E39 +- (~0.0, 0.34028235E39) = ~0.34028235E39 +/ (~0.0, 0.34028235E39) = ~0.0 +nextAfter (~0.0, 0.34028235E39) = 0.1E~44 +rem (~0.0, 0.34028235E39) = 0.0 +* (~0.0, 0.17014117E39) = ~0.0 ++ (~0.0, 0.17014117E39) = 0.17014117E39 +- (~0.0, 0.17014117E39) = ~0.17014117E39 +/ (~0.0, 0.17014117E39) = ~0.0 +nextAfter (~0.0, 0.17014117E39) = 0.1E~44 +rem (~0.0, 0.17014117E39) = 0.0 +* (~0.0, 0.123E4) = ~0.0 ++ (~0.0, 0.123E4) = 0.123E4 +- (~0.0, 0.123E4) = ~0.123E4 +/ (~0.0, 0.123E4) = ~0.0 +nextAfter (~0.0, 0.123E4) = 0.1E~44 +rem (~0.0, 0.123E4) = 0.0 +* (~0.0, 0.123E2) = ~0.0 ++ (~0.0, 0.123E2) = 0.123E2 +- (~0.0, 0.123E2) = ~0.123E2 +/ (~0.0, 0.123E2) = ~0.0 +nextAfter (~0.0, 0.123E2) = 0.1E~44 +rem (~0.0, 0.123E2) = 0.0 +* (~0.0, 0.31415927E1) = ~0.0 ++ (~0.0, 0.31415927E1) = 0.31415927E1 +- (~0.0, 0.31415927E1) = ~0.31415927E1 +/ (~0.0, 0.31415927E1) = ~0.0 +nextAfter (~0.0, 0.31415927E1) = 0.1E~44 +rem (~0.0, 0.31415927E1) = 0.0 +* (~0.0, 0.27182817E1) = ~0.0 ++ (~0.0, 0.27182817E1) = 0.27182817E1 +- (~0.0, 0.27182817E1) = ~0.27182817E1 +/ (~0.0, 0.27182817E1) = ~0.0 +nextAfter (~0.0, 0.27182817E1) = 0.1E~44 +rem (~0.0, 0.27182817E1) = 0.0 +* (~0.0, 0.123E1) = ~0.0 ++ (~0.0, 0.123E1) = 0.123E1 +- (~0.0, 0.123E1) = ~0.123E1 +/ (~0.0, 0.123E1) = ~0.0 +nextAfter (~0.0, 0.123E1) = 0.1E~44 +rem (~0.0, 0.123E1) = 0.0 +* (~0.0, 0.123) = ~0.0 ++ (~0.0, 0.123) = 0.123 +- (~0.0, 0.123) = ~0.123 +/ (~0.0, 0.123) = ~0.0 +nextAfter (~0.0, 0.123) = 0.1E~44 +rem (~0.0, 0.123) = 0.0 +* (~0.0, 0.123E~2) = ~0.0 ++ (~0.0, 0.123E~2) = 0.123E~2 +- (~0.0, 0.123E~2) = ~0.123E~2 +/ (~0.0, 0.123E~2) = ~0.0 +nextAfter (~0.0, 0.123E~2) = 0.1E~44 +rem (~0.0, 0.123E~2) = 0.0 +* (~0.0, 0.11754944E~37) = ~0.0 ++ (~0.0, 0.11754944E~37) = 0.11754944E~37 +- (~0.0, 0.11754944E~37) = ~0.11754944E~37 +/ (~0.0, 0.11754944E~37) = ~0.0 +nextAfter (~0.0, 0.11754944E~37) = 0.1E~44 +rem (~0.0, 0.11754944E~37) = 0.0 +* (~0.0, 0.5877472E~38) = ~0.0 ++ (~0.0, 0.5877472E~38) = 0.5877472E~38 +- (~0.0, 0.5877472E~38) = ~0.5877472E~38 +/ (~0.0, 0.5877472E~38) = ~0.0 +nextAfter (~0.0, 0.5877472E~38) = 0.1E~44 +rem (~0.0, 0.5877472E~38) = 0.0 +* (~0.0, 0.1E~44) = ~0.0 ++ (~0.0, 0.1E~44) = 0.1E~44 +- (~0.0, 0.1E~44) = ~0.1E~44 +/ (~0.0, 0.1E~44) = ~0.0 +nextAfter (~0.0, 0.1E~44) = 0.1E~44 +rem (~0.0, 0.1E~44) = 0.0 +* (~0.0, 0.0) = ~0.0 ++ (~0.0, 0.0) = 0.0 +- (~0.0, 0.0) = ~0.0 +/ (~0.0, 0.0) = nan +nextAfter (~0.0, 0.0) = 0.0 +rem (~0.0, 0.0) = 0.0 +* (~0.0, ~0.34028235E39) = 0.0 ++ (~0.0, ~0.34028235E39) = ~0.34028235E39 +- (~0.0, ~0.34028235E39) = 0.34028235E39 +/ (~0.0, ~0.34028235E39) = 0.0 +nextAfter (~0.0, ~0.34028235E39) = ~0.1E~44 +rem (~0.0, ~0.34028235E39) = 0.0 +* (~0.0, ~0.17014117E39) = 0.0 ++ (~0.0, ~0.17014117E39) = ~0.17014117E39 +- (~0.0, ~0.17014117E39) = 0.17014117E39 +/ (~0.0, ~0.17014117E39) = 0.0 +nextAfter (~0.0, ~0.17014117E39) = ~0.1E~44 +rem (~0.0, ~0.17014117E39) = 0.0 +* (~0.0, ~0.123E4) = 0.0 ++ (~0.0, ~0.123E4) = ~0.123E4 +- (~0.0, ~0.123E4) = 0.123E4 +/ (~0.0, ~0.123E4) = 0.0 +nextAfter (~0.0, ~0.123E4) = ~0.1E~44 +rem (~0.0, ~0.123E4) = 0.0 +* (~0.0, ~0.123E2) = 0.0 ++ (~0.0, ~0.123E2) = ~0.123E2 +- (~0.0, ~0.123E2) = 0.123E2 +/ (~0.0, ~0.123E2) = 0.0 +nextAfter (~0.0, ~0.123E2) = ~0.1E~44 +rem (~0.0, ~0.123E2) = 0.0 +* (~0.0, ~0.31415927E1) = 0.0 ++ (~0.0, ~0.31415927E1) = ~0.31415927E1 +- (~0.0, ~0.31415927E1) = 0.31415927E1 +/ (~0.0, ~0.31415927E1) = 0.0 +nextAfter (~0.0, ~0.31415927E1) = ~0.1E~44 +rem (~0.0, ~0.31415927E1) = 0.0 +* (~0.0, ~0.27182817E1) = 0.0 ++ (~0.0, ~0.27182817E1) = ~0.27182817E1 +- (~0.0, ~0.27182817E1) = 0.27182817E1 +/ (~0.0, ~0.27182817E1) = 0.0 +nextAfter (~0.0, ~0.27182817E1) = ~0.1E~44 +rem (~0.0, ~0.27182817E1) = 0.0 +* (~0.0, ~0.123E1) = 0.0 ++ (~0.0, ~0.123E1) = ~0.123E1 +- (~0.0, ~0.123E1) = 0.123E1 +/ (~0.0, ~0.123E1) = 0.0 +nextAfter (~0.0, ~0.123E1) = ~0.1E~44 +rem (~0.0, ~0.123E1) = 0.0 +* (~0.0, ~0.123) = 0.0 ++ (~0.0, ~0.123) = ~0.123 +- (~0.0, ~0.123) = 0.123 +/ (~0.0, ~0.123) = 0.0 +nextAfter (~0.0, ~0.123) = ~0.1E~44 +rem (~0.0, ~0.123) = 0.0 +* (~0.0, ~0.123E~2) = 0.0 ++ (~0.0, ~0.123E~2) = ~0.123E~2 +- (~0.0, ~0.123E~2) = 0.123E~2 +/ (~0.0, ~0.123E~2) = 0.0 +nextAfter (~0.0, ~0.123E~2) = ~0.1E~44 +rem (~0.0, ~0.123E~2) = 0.0 +* (~0.0, ~0.11754944E~37) = 0.0 ++ (~0.0, ~0.11754944E~37) = ~0.11754944E~37 +- (~0.0, ~0.11754944E~37) = 0.11754944E~37 +/ (~0.0, ~0.11754944E~37) = 0.0 +nextAfter (~0.0, ~0.11754944E~37) = ~0.1E~44 +rem (~0.0, ~0.11754944E~37) = 0.0 +* (~0.0, ~0.5877472E~38) = 0.0 ++ (~0.0, ~0.5877472E~38) = ~0.5877472E~38 +- (~0.0, ~0.5877472E~38) = 0.5877472E~38 +/ (~0.0, ~0.5877472E~38) = 0.0 +nextAfter (~0.0, ~0.5877472E~38) = ~0.1E~44 +rem (~0.0, ~0.5877472E~38) = 0.0 +* (~0.0, ~0.1E~44) = 0.0 ++ (~0.0, ~0.1E~44) = ~0.1E~44 +- (~0.0, ~0.1E~44) = 0.1E~44 +/ (~0.0, ~0.1E~44) = 0.0 +nextAfter (~0.0, ~0.1E~44) = ~0.1E~44 +rem (~0.0, ~0.1E~44) = 0.0 +* (~0.0, ~0.0) = 0.0 ++ (~0.0, ~0.0) = ~0.0 +- (~0.0, ~0.0) = 0.0 +/ (~0.0, ~0.0) = nan +nextAfter (~0.0, ~0.0) = ~0.0 +rem (~0.0, ~0.0) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.1E~44 +rem (~0.0, inf) = 0.0 +* (~0.0, ~inf) = nan ++ (~0.0, ~inf) = ~inf +- (~0.0, ~inf) = inf +/ (~0.0, ~inf) = 0.0 +nextAfter (~0.0, ~inf) = ~0.1E~44 +rem (~0.0, ~inf) = 0.0 +* (~0.0, nan) = nan ++ (~0.0, nan) = nan +- (~0.0, nan) = nan +/ (~0.0, nan) = nan +nextAfter (~0.0, nan) = nan +rem (~0.0, nan) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.1E~44 +rem (~0.0, inf) = 0.0 +* (inf, 0.34028235E39) = inf ++ (inf, 0.34028235E39) = inf +- (inf, 0.34028235E39) = inf +/ (inf, 0.34028235E39) = inf +nextAfter (inf, 0.34028235E39) = inf +rem (inf, 0.34028235E39) = nan +* (inf, 0.17014117E39) = inf ++ (inf, 0.17014117E39) = inf +- (inf, 0.17014117E39) = inf +/ (inf, 0.17014117E39) = inf +nextAfter (inf, 0.17014117E39) = inf +rem (inf, 0.17014117E39) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.31415927E1) = inf ++ (inf, 0.31415927E1) = inf +- (inf, 0.31415927E1) = inf +/ (inf, 0.31415927E1) = inf +nextAfter (inf, 0.31415927E1) = inf +rem (inf, 0.31415927E1) = nan +* (inf, 0.27182817E1) = inf ++ (inf, 0.27182817E1) = inf +- (inf, 0.27182817E1) = inf +/ (inf, 0.27182817E1) = inf +nextAfter (inf, 0.27182817E1) = inf +rem (inf, 0.27182817E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.11754944E~37) = inf ++ (inf, 0.11754944E~37) = inf +- (inf, 0.11754944E~37) = inf +/ (inf, 0.11754944E~37) = inf +nextAfter (inf, 0.11754944E~37) = inf +rem (inf, 0.11754944E~37) = nan +* (inf, 0.5877472E~38) = inf ++ (inf, 0.5877472E~38) = inf +- (inf, 0.5877472E~38) = inf +/ (inf, 0.5877472E~38) = inf +nextAfter (inf, 0.5877472E~38) = inf +rem (inf, 0.5877472E~38) = nan +* (inf, 0.1E~44) = inf ++ (inf, 0.1E~44) = inf +- (inf, 0.1E~44) = inf +/ (inf, 0.1E~44) = inf +nextAfter (inf, 0.1E~44) = inf +rem (inf, 0.1E~44) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.34028235E39) = ~inf ++ (inf, ~0.34028235E39) = inf +- (inf, ~0.34028235E39) = inf +/ (inf, ~0.34028235E39) = ~inf +nextAfter (inf, ~0.34028235E39) = inf +rem (inf, ~0.34028235E39) = nan +* (inf, ~0.17014117E39) = ~inf ++ (inf, ~0.17014117E39) = inf +- (inf, ~0.17014117E39) = inf +/ (inf, ~0.17014117E39) = ~inf +nextAfter (inf, ~0.17014117E39) = inf +rem (inf, ~0.17014117E39) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.31415927E1) = ~inf ++ (inf, ~0.31415927E1) = inf +- (inf, ~0.31415927E1) = inf +/ (inf, ~0.31415927E1) = ~inf +nextAfter (inf, ~0.31415927E1) = inf +rem (inf, ~0.31415927E1) = nan +* (inf, ~0.27182817E1) = ~inf ++ (inf, ~0.27182817E1) = inf +- (inf, ~0.27182817E1) = inf +/ (inf, ~0.27182817E1) = ~inf +nextAfter (inf, ~0.27182817E1) = inf +rem (inf, ~0.27182817E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.11754944E~37) = ~inf ++ (inf, ~0.11754944E~37) = inf +- (inf, ~0.11754944E~37) = inf +/ (inf, ~0.11754944E~37) = ~inf +nextAfter (inf, ~0.11754944E~37) = inf +rem (inf, ~0.11754944E~37) = nan +* (inf, ~0.5877472E~38) = ~inf ++ (inf, ~0.5877472E~38) = inf +- (inf, ~0.5877472E~38) = inf +/ (inf, ~0.5877472E~38) = ~inf +nextAfter (inf, ~0.5877472E~38) = inf +rem (inf, ~0.5877472E~38) = nan +* (inf, ~0.1E~44) = ~inf ++ (inf, ~0.1E~44) = inf +- (inf, ~0.1E~44) = inf +/ (inf, ~0.1E~44) = ~inf +nextAfter (inf, ~0.1E~44) = inf +rem (inf, ~0.1E~44) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (~inf, 0.34028235E39) = ~inf ++ (~inf, 0.34028235E39) = ~inf +- (~inf, 0.34028235E39) = ~inf +/ (~inf, 0.34028235E39) = ~inf +nextAfter (~inf, 0.34028235E39) = ~inf +rem (~inf, 0.34028235E39) = nan +* (~inf, 0.17014117E39) = ~inf ++ (~inf, 0.17014117E39) = ~inf +- (~inf, 0.17014117E39) = ~inf +/ (~inf, 0.17014117E39) = ~inf +nextAfter (~inf, 0.17014117E39) = ~inf +rem (~inf, 0.17014117E39) = nan +* (~inf, 0.123E4) = ~inf ++ (~inf, 0.123E4) = ~inf +- (~inf, 0.123E4) = ~inf +/ (~inf, 0.123E4) = ~inf +nextAfter (~inf, 0.123E4) = ~inf +rem (~inf, 0.123E4) = nan +* (~inf, 0.123E2) = ~inf ++ (~inf, 0.123E2) = ~inf +- (~inf, 0.123E2) = ~inf +/ (~inf, 0.123E2) = ~inf +nextAfter (~inf, 0.123E2) = ~inf +rem (~inf, 0.123E2) = nan +* (~inf, 0.31415927E1) = ~inf ++ (~inf, 0.31415927E1) = ~inf +- (~inf, 0.31415927E1) = ~inf +/ (~inf, 0.31415927E1) = ~inf +nextAfter (~inf, 0.31415927E1) = ~inf +rem (~inf, 0.31415927E1) = nan +* (~inf, 0.27182817E1) = ~inf ++ (~inf, 0.27182817E1) = ~inf +- (~inf, 0.27182817E1) = ~inf +/ (~inf, 0.27182817E1) = ~inf +nextAfter (~inf, 0.27182817E1) = ~inf +rem (~inf, 0.27182817E1) = nan +* (~inf, 0.123E1) = ~inf ++ (~inf, 0.123E1) = ~inf +- (~inf, 0.123E1) = ~inf +/ (~inf, 0.123E1) = ~inf +nextAfter (~inf, 0.123E1) = ~inf +rem (~inf, 0.123E1) = nan +* (~inf, 0.123) = ~inf ++ (~inf, 0.123) = ~inf +- (~inf, 0.123) = ~inf +/ (~inf, 0.123) = ~inf +nextAfter (~inf, 0.123) = ~inf +rem (~inf, 0.123) = nan +* (~inf, 0.123E~2) = ~inf ++ (~inf, 0.123E~2) = ~inf +- (~inf, 0.123E~2) = ~inf +/ (~inf, 0.123E~2) = ~inf +nextAfter (~inf, 0.123E~2) = ~inf +rem (~inf, 0.123E~2) = nan +* (~inf, 0.11754944E~37) = ~inf ++ (~inf, 0.11754944E~37) = ~inf +- (~inf, 0.11754944E~37) = ~inf +/ (~inf, 0.11754944E~37) = ~inf +nextAfter (~inf, 0.11754944E~37) = ~inf +rem (~inf, 0.11754944E~37) = nan +* (~inf, 0.5877472E~38) = ~inf ++ (~inf, 0.5877472E~38) = ~inf +- (~inf, 0.5877472E~38) = ~inf +/ (~inf, 0.5877472E~38) = ~inf +nextAfter (~inf, 0.5877472E~38) = ~inf +rem (~inf, 0.5877472E~38) = nan +* (~inf, 0.1E~44) = ~inf ++ (~inf, 0.1E~44) = ~inf +- (~inf, 0.1E~44) = ~inf +/ (~inf, 0.1E~44) = ~inf +nextAfter (~inf, 0.1E~44) = ~inf +rem (~inf, 0.1E~44) = nan +* (~inf, 0.0) = nan ++ (~inf, 0.0) = ~inf +- (~inf, 0.0) = ~inf +/ (~inf, 0.0) = ~inf +nextAfter (~inf, 0.0) = ~inf +rem (~inf, 0.0) = nan +* (~inf, ~0.34028235E39) = inf ++ (~inf, ~0.34028235E39) = ~inf +- (~inf, ~0.34028235E39) = ~inf +/ (~inf, ~0.34028235E39) = inf +nextAfter (~inf, ~0.34028235E39) = ~inf +rem (~inf, ~0.34028235E39) = nan +* (~inf, ~0.17014117E39) = inf ++ (~inf, ~0.17014117E39) = ~inf +- (~inf, ~0.17014117E39) = ~inf +/ (~inf, ~0.17014117E39) = inf +nextAfter (~inf, ~0.17014117E39) = ~inf +rem (~inf, ~0.17014117E39) = nan +* (~inf, ~0.123E4) = inf ++ (~inf, ~0.123E4) = ~inf +- (~inf, ~0.123E4) = ~inf +/ (~inf, ~0.123E4) = inf +nextAfter (~inf, ~0.123E4) = ~inf +rem (~inf, ~0.123E4) = nan +* (~inf, ~0.123E2) = inf ++ (~inf, ~0.123E2) = ~inf +- (~inf, ~0.123E2) = ~inf +/ (~inf, ~0.123E2) = inf +nextAfter (~inf, ~0.123E2) = ~inf +rem (~inf, ~0.123E2) = nan +* (~inf, ~0.31415927E1) = inf ++ (~inf, ~0.31415927E1) = ~inf +- (~inf, ~0.31415927E1) = ~inf +/ (~inf, ~0.31415927E1) = inf +nextAfter (~inf, ~0.31415927E1) = ~inf +rem (~inf, ~0.31415927E1) = nan +* (~inf, ~0.27182817E1) = inf ++ (~inf, ~0.27182817E1) = ~inf +- (~inf, ~0.27182817E1) = ~inf +/ (~inf, ~0.27182817E1) = inf +nextAfter (~inf, ~0.27182817E1) = ~inf +rem (~inf, ~0.27182817E1) = nan +* (~inf, ~0.123E1) = inf ++ (~inf, ~0.123E1) = ~inf +- (~inf, ~0.123E1) = ~inf +/ (~inf, ~0.123E1) = inf +nextAfter (~inf, ~0.123E1) = ~inf +rem (~inf, ~0.123E1) = nan +* (~inf, ~0.123) = inf ++ (~inf, ~0.123) = ~inf +- (~inf, ~0.123) = ~inf +/ (~inf, ~0.123) = inf +nextAfter (~inf, ~0.123) = ~inf +rem (~inf, ~0.123) = nan +* (~inf, ~0.123E~2) = inf ++ (~inf, ~0.123E~2) = ~inf +- (~inf, ~0.123E~2) = ~inf +/ (~inf, ~0.123E~2) = inf +nextAfter (~inf, ~0.123E~2) = ~inf +rem (~inf, ~0.123E~2) = nan +* (~inf, ~0.11754944E~37) = inf ++ (~inf, ~0.11754944E~37) = ~inf +- (~inf, ~0.11754944E~37) = ~inf +/ (~inf, ~0.11754944E~37) = inf +nextAfter (~inf, ~0.11754944E~37) = ~inf +rem (~inf, ~0.11754944E~37) = nan +* (~inf, ~0.5877472E~38) = inf ++ (~inf, ~0.5877472E~38) = ~inf +- (~inf, ~0.5877472E~38) = ~inf +/ (~inf, ~0.5877472E~38) = inf +nextAfter (~inf, ~0.5877472E~38) = ~inf +rem (~inf, ~0.5877472E~38) = nan +* (~inf, ~0.1E~44) = inf ++ (~inf, ~0.1E~44) = ~inf +- (~inf, ~0.1E~44) = ~inf +/ (~inf, ~0.1E~44) = inf +nextAfter (~inf, ~0.1E~44) = ~inf +rem (~inf, ~0.1E~44) = nan +* (~inf, ~0.0) = nan ++ (~inf, ~0.0) = ~inf +- (~inf, ~0.0) = ~inf +/ (~inf, ~0.0) = inf +nextAfter (~inf, ~0.0) = ~inf +rem (~inf, ~0.0) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (~inf, ~inf) = inf ++ (~inf, ~inf) = ~inf +- (~inf, ~inf) = nan +/ (~inf, ~inf) = nan +nextAfter (~inf, ~inf) = ~inf +rem (~inf, ~inf) = nan +* (~inf, nan) = nan ++ (~inf, nan) = nan +- (~inf, nan) = nan +/ (~inf, nan) = nan +nextAfter (~inf, nan) = nan +rem (~inf, nan) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (nan, 0.34028235E39) = nan ++ (nan, 0.34028235E39) = nan +- (nan, 0.34028235E39) = nan +/ (nan, 0.34028235E39) = nan +nextAfter (nan, 0.34028235E39) = nan +rem (nan, 0.34028235E39) = nan +* (nan, 0.17014117E39) = nan ++ (nan, 0.17014117E39) = nan +- (nan, 0.17014117E39) = nan +/ (nan, 0.17014117E39) = nan +nextAfter (nan, 0.17014117E39) = nan +rem (nan, 0.17014117E39) = nan +* (nan, 0.123E4) = nan ++ (nan, 0.123E4) = nan +- (nan, 0.123E4) = nan +/ (nan, 0.123E4) = nan +nextAfter (nan, 0.123E4) = nan +rem (nan, 0.123E4) = nan +* (nan, 0.123E2) = nan ++ (nan, 0.123E2) = nan +- (nan, 0.123E2) = nan +/ (nan, 0.123E2) = nan +nextAfter (nan, 0.123E2) = nan +rem (nan, 0.123E2) = nan +* (nan, 0.31415927E1) = nan ++ (nan, 0.31415927E1) = nan +- (nan, 0.31415927E1) = nan +/ (nan, 0.31415927E1) = nan +nextAfter (nan, 0.31415927E1) = nan +rem (nan, 0.31415927E1) = nan +* (nan, 0.27182817E1) = nan ++ (nan, 0.27182817E1) = nan +- (nan, 0.27182817E1) = nan +/ (nan, 0.27182817E1) = nan +nextAfter (nan, 0.27182817E1) = nan +rem (nan, 0.27182817E1) = nan +* (nan, 0.123E1) = nan ++ (nan, 0.123E1) = nan +- (nan, 0.123E1) = nan +/ (nan, 0.123E1) = nan +nextAfter (nan, 0.123E1) = nan +rem (nan, 0.123E1) = nan +* (nan, 0.123) = nan ++ (nan, 0.123) = nan +- (nan, 0.123) = nan +/ (nan, 0.123) = nan +nextAfter (nan, 0.123) = nan +rem (nan, 0.123) = nan +* (nan, 0.123E~2) = nan ++ (nan, 0.123E~2) = nan +- (nan, 0.123E~2) = nan +/ (nan, 0.123E~2) = nan +nextAfter (nan, 0.123E~2) = nan +rem (nan, 0.123E~2) = nan +* (nan, 0.11754944E~37) = nan ++ (nan, 0.11754944E~37) = nan +- (nan, 0.11754944E~37) = nan +/ (nan, 0.11754944E~37) = nan +nextAfter (nan, 0.11754944E~37) = nan +rem (nan, 0.11754944E~37) = nan +* (nan, 0.5877472E~38) = nan ++ (nan, 0.5877472E~38) = nan +- (nan, 0.5877472E~38) = nan +/ (nan, 0.5877472E~38) = nan +nextAfter (nan, 0.5877472E~38) = nan +rem (nan, 0.5877472E~38) = nan +* (nan, 0.1E~44) = nan ++ (nan, 0.1E~44) = nan +- (nan, 0.1E~44) = nan +/ (nan, 0.1E~44) = nan +nextAfter (nan, 0.1E~44) = nan +rem (nan, 0.1E~44) = nan +* (nan, 0.0) = nan ++ (nan, 0.0) = nan +- (nan, 0.0) = nan +/ (nan, 0.0) = nan +nextAfter (nan, 0.0) = nan +rem (nan, 0.0) = nan +* (nan, ~0.34028235E39) = nan ++ (nan, ~0.34028235E39) = nan +- (nan, ~0.34028235E39) = nan +/ (nan, ~0.34028235E39) = nan +nextAfter (nan, ~0.34028235E39) = nan +rem (nan, ~0.34028235E39) = nan +* (nan, ~0.17014117E39) = nan ++ (nan, ~0.17014117E39) = nan +- (nan, ~0.17014117E39) = nan +/ (nan, ~0.17014117E39) = nan +nextAfter (nan, ~0.17014117E39) = nan +rem (nan, ~0.17014117E39) = nan +* (nan, ~0.123E4) = nan ++ (nan, ~0.123E4) = nan +- (nan, ~0.123E4) = nan +/ (nan, ~0.123E4) = nan +nextAfter (nan, ~0.123E4) = nan +rem (nan, ~0.123E4) = nan +* (nan, ~0.123E2) = nan ++ (nan, ~0.123E2) = nan +- (nan, ~0.123E2) = nan +/ (nan, ~0.123E2) = nan +nextAfter (nan, ~0.123E2) = nan +rem (nan, ~0.123E2) = nan +* (nan, ~0.31415927E1) = nan ++ (nan, ~0.31415927E1) = nan +- (nan, ~0.31415927E1) = nan +/ (nan, ~0.31415927E1) = nan +nextAfter (nan, ~0.31415927E1) = nan +rem (nan, ~0.31415927E1) = nan +* (nan, ~0.27182817E1) = nan ++ (nan, ~0.27182817E1) = nan +- (nan, ~0.27182817E1) = nan +/ (nan, ~0.27182817E1) = nan +nextAfter (nan, ~0.27182817E1) = nan +rem (nan, ~0.27182817E1) = nan +* (nan, ~0.123E1) = nan ++ (nan, ~0.123E1) = nan +- (nan, ~0.123E1) = nan +/ (nan, ~0.123E1) = nan +nextAfter (nan, ~0.123E1) = nan +rem (nan, ~0.123E1) = nan +* (nan, ~0.123) = nan ++ (nan, ~0.123) = nan +- (nan, ~0.123) = nan +/ (nan, ~0.123) = nan +nextAfter (nan, ~0.123) = nan +rem (nan, ~0.123) = nan +* (nan, ~0.123E~2) = nan ++ (nan, ~0.123E~2) = nan +- (nan, ~0.123E~2) = nan +/ (nan, ~0.123E~2) = nan +nextAfter (nan, ~0.123E~2) = nan +rem (nan, ~0.123E~2) = nan +* (nan, ~0.11754944E~37) = nan ++ (nan, ~0.11754944E~37) = nan +- (nan, ~0.11754944E~37) = nan +/ (nan, ~0.11754944E~37) = nan +nextAfter (nan, ~0.11754944E~37) = nan +rem (nan, ~0.11754944E~37) = nan +* (nan, ~0.5877472E~38) = nan ++ (nan, ~0.5877472E~38) = nan +- (nan, ~0.5877472E~38) = nan +/ (nan, ~0.5877472E~38) = nan +nextAfter (nan, ~0.5877472E~38) = nan +rem (nan, ~0.5877472E~38) = nan +* (nan, ~0.1E~44) = nan ++ (nan, ~0.1E~44) = nan +- (nan, ~0.1E~44) = nan +/ (nan, ~0.1E~44) = nan +nextAfter (nan, ~0.1E~44) = nan +rem (nan, ~0.1E~44) = nan +* (nan, ~0.0) = nan ++ (nan, ~0.0) = nan +- (nan, ~0.0) = nan +/ (nan, ~0.0) = nan +nextAfter (nan, ~0.0) = nan +rem (nan, ~0.0) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (nan, ~inf) = nan ++ (nan, ~inf) = nan +- (nan, ~inf) = nan +/ (nan, ~inf) = nan +nextAfter (nan, ~inf) = nan +rem (nan, ~inf) = nan +* (nan, nan) = nan ++ (nan, nan) = nan +- (nan, nan) = nan +/ (nan, nan) = nan +nextAfter (nan, nan) = nan +rem (nan, nan) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (inf, 0.34028235E39) = inf ++ (inf, 0.34028235E39) = inf +- (inf, 0.34028235E39) = inf +/ (inf, 0.34028235E39) = inf +nextAfter (inf, 0.34028235E39) = inf +rem (inf, 0.34028235E39) = nan +* (inf, 0.17014117E39) = inf ++ (inf, 0.17014117E39) = inf +- (inf, 0.17014117E39) = inf +/ (inf, 0.17014117E39) = inf +nextAfter (inf, 0.17014117E39) = inf +rem (inf, 0.17014117E39) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.31415927E1) = inf ++ (inf, 0.31415927E1) = inf +- (inf, 0.31415927E1) = inf +/ (inf, 0.31415927E1) = inf +nextAfter (inf, 0.31415927E1) = inf +rem (inf, 0.31415927E1) = nan +* (inf, 0.27182817E1) = inf ++ (inf, 0.27182817E1) = inf +- (inf, 0.27182817E1) = inf +/ (inf, 0.27182817E1) = inf +nextAfter (inf, 0.27182817E1) = inf +rem (inf, 0.27182817E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.11754944E~37) = inf ++ (inf, 0.11754944E~37) = inf +- (inf, 0.11754944E~37) = inf +/ (inf, 0.11754944E~37) = inf +nextAfter (inf, 0.11754944E~37) = inf +rem (inf, 0.11754944E~37) = nan +* (inf, 0.5877472E~38) = inf ++ (inf, 0.5877472E~38) = inf +- (inf, 0.5877472E~38) = inf +/ (inf, 0.5877472E~38) = inf +nextAfter (inf, 0.5877472E~38) = inf +rem (inf, 0.5877472E~38) = nan +* (inf, 0.1E~44) = inf ++ (inf, 0.1E~44) = inf +- (inf, 0.1E~44) = inf +/ (inf, 0.1E~44) = inf +nextAfter (inf, 0.1E~44) = inf +rem (inf, 0.1E~44) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.34028235E39) = ~inf ++ (inf, ~0.34028235E39) = inf +- (inf, ~0.34028235E39) = inf +/ (inf, ~0.34028235E39) = ~inf +nextAfter (inf, ~0.34028235E39) = inf +rem (inf, ~0.34028235E39) = nan +* (inf, ~0.17014117E39) = ~inf ++ (inf, ~0.17014117E39) = inf +- (inf, ~0.17014117E39) = inf +/ (inf, ~0.17014117E39) = ~inf +nextAfter (inf, ~0.17014117E39) = inf +rem (inf, ~0.17014117E39) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.31415927E1) = ~inf ++ (inf, ~0.31415927E1) = inf +- (inf, ~0.31415927E1) = inf +/ (inf, ~0.31415927E1) = ~inf +nextAfter (inf, ~0.31415927E1) = inf +rem (inf, ~0.31415927E1) = nan +* (inf, ~0.27182817E1) = ~inf ++ (inf, ~0.27182817E1) = inf +- (inf, ~0.27182817E1) = inf +/ (inf, ~0.27182817E1) = ~inf +nextAfter (inf, ~0.27182817E1) = inf +rem (inf, ~0.27182817E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.11754944E~37) = ~inf ++ (inf, ~0.11754944E~37) = inf +- (inf, ~0.11754944E~37) = inf +/ (inf, ~0.11754944E~37) = ~inf +nextAfter (inf, ~0.11754944E~37) = inf +rem (inf, ~0.11754944E~37) = nan +* (inf, ~0.5877472E~38) = ~inf ++ (inf, ~0.5877472E~38) = inf +- (inf, ~0.5877472E~38) = inf +/ (inf, ~0.5877472E~38) = ~inf +nextAfter (inf, ~0.5877472E~38) = inf +rem (inf, ~0.5877472E~38) = nan +* (inf, ~0.1E~44) = ~inf ++ (inf, ~0.1E~44) = inf +- (inf, ~0.1E~44) = inf +/ (inf, ~0.1E~44) = ~inf +nextAfter (inf, ~0.1E~44) = inf +rem (inf, ~0.1E~44) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan + +Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh,atan2,pow} +acos (0.34028235E39) = nan +asin (0.34028235E39) = nan +atan (0.34028235E39) = 1.570796371 +cos (0.34028235E39) = 0.8530210257 +cosh (0.34028235E39) = inf +exp (0.34028235E39) = inf +ln (0.34028235E39) = 88.72283936 +log10 (0.34028235E39) = 38.53184128 +sin (0.34028235E39) = ~0.521876514 +sinh (0.34028235E39) = inf +sqrt (0.34028235E39) = 1.844674297E19 +tan (0.34028235E39) = ~0.6117979288 +tanh (0.34028235E39) = 1 +acos (0.17014117E39) = nan +asin (0.17014117E39) = nan +atan (0.17014117E39) = 1.570796371 +cos (0.17014117E39) = ~0.9625541568 +cosh (0.17014117E39) = inf +exp (0.17014117E39) = inf +ln (0.17014117E39) = 88.0296936 +log10 (0.17014117E39) = 38.23080826 +sin (0.17014117E39) = 0.2710894346 +sinh (0.17014117E39) = inf +sqrt (0.17014117E39) = 1.30438176E19 +tan (0.17014117E39) = ~0.2816355228 +tanh (0.17014117E39) = 1 +acos (0.123E4) = nan +asin (0.123E4) = nan +atan (0.123E4) = 1.569983363 +cos (0.123E4) = 0.06642717123 +cosh (0.123E4) = inf +exp (0.123E4) = inf +ln (0.123E4) = 7.114769459 +log10 (0.123E4) = 3.089905024 +sin (0.123E4) = ~0.9977912903 +sinh (0.123E4) = inf +sqrt (0.123E4) = 35.07135773 +tan (0.123E4) = ~15.02083111 +tanh (0.123E4) = 1 +acos (0.123E2) = nan +asin (0.123E2) = nan +atan (0.123E2) = 1.489673972 +cos (0.123E2) = 0.9647326469 +cosh (0.123E2) = 109848.0156 +exp (0.123E2) = 219696.0312 +ln (0.123E2) = 2.509599209 +log10 (0.123E2) = 1.089905143 +sin (0.123E2) = ~0.2632316053 +sinh (0.123E2) = 109848.0156 +sqrt (0.123E2) = 3.50713563 +tan (0.123E2) = ~0.2728544474 +tanh (0.123E2) = 1 +acos (0.31415927E1) = nan +asin (0.31415927E1) = nan +atan (0.31415927E1) = 1.262627244 +cos (0.31415927E1) = ~1 +cosh (0.31415927E1) = 11.59195518 +exp (0.31415927E1) = 23.14069557 +ln (0.31415927E1) = 1.144729972 +log10 (0.31415927E1) = 0.4971498847 +sin (0.31415927E1) = ~8.742277657E~8 +sinh (0.31415927E1) = 11.54873943 +sqrt (0.31415927E1) = 1.772453904 +tan (0.31415927E1) = 8.742277657E~8 +tanh (0.31415927E1) = 0.9962720871 +acos (0.27182817E1) = nan +asin (0.27182817E1) = nan +atan (0.27182817E1) = 1.218282938 +cos (0.27182817E1) = ~0.9117338657 +cosh (0.27182817E1) = 7.610124111 +exp (0.27182817E1) = 15.15426064 +ln (0.27182817E1) = 0.9999999404 +log10 (0.27182817E1) = 0.4342944622 +sin (0.27182817E1) = 0.4107813537 +sinh (0.27182817E1) = 7.544136047 +sqrt (0.27182817E1) = 1.648721218 +tan (0.27182817E1) = ~0.4505496323 +tanh (0.27182817E1) = 0.9913288951 +acos (0.123E1) = nan +asin (0.123E1) = nan +atan (0.123E1) = 0.888173759 +cos (0.123E1) = 0.3342376947 +cosh (0.123E1) = 1.856761098 +exp (0.123E1) = 3.421229601 +ln (0.123E1) = 0.2070141882 +log10 (0.123E1) = 0.08990512043 +sin (0.123E1) = 0.9424887896 +sinh (0.123E1) = 1.564468503 +sqrt (0.123E1) = 1.109053612 +tan (0.123E1) = 2.819815874 +tanh (0.123E1) = 0.8425793648 +acos (0.123) = 1.447484016 +asin (0.123) = 0.1233122796 +atan (0.123) = 0.1223852858 +cos (0.123) = 0.9924450517 +cosh (0.123) = 1.007574081 +exp (0.123) = 1.130884409 +ln (0.123) = ~2.095570803 +log10 (0.123) = ~0.9100948572 +sin (0.123) = 0.1226900965 +sinh (0.123) = 0.1233103797 +sqrt (0.123) = 0.350713551 +tan (0.123) = 0.1236240715 +tanh (0.123) = 0.1223834455 +acos (0.123E~2) = 1.569566369 +asin (0.123E~2) = 0.001230000402 +atan (0.123E~2) = 0.001229999471 +cos (0.123E~2) = 0.9999992251 +cosh (0.123E~2) = 1.000000715 +exp (0.123E~2) = 1.001230717 +ln (0.123E~2) = ~6.700741291 +log10 (0.123E~2) = ~2.910094976 +sin (0.123E~2) = 0.001229999703 +sinh (0.123E~2) = 0.001230000402 +sqrt (0.123E~2) = 0.03507135808 +tan (0.123E~2) = 0.001230000635 +tanh (0.123E~2) = 0.001229999471 +acos (0.11754944E~37) = 1.570796371 +asin (0.11754944E~37) = 1.175494351E~38 +atan (0.11754944E~37) = 1.175494351E~38 +cos (0.11754944E~37) = 1 +cosh (0.11754944E~37) = 1 +exp (0.11754944E~37) = 1 +ln (0.11754944E~37) = ~87.33654785 +log10 (0.11754944E~37) = ~37.92977905 +sin (0.11754944E~37) = 1.175494351E~38 +sinh (0.11754944E~37) = 1.175494351E~38 +sqrt (0.11754944E~37) = 1.084202172E~19 +tan (0.11754944E~37) = 1.175494351E~38 +tanh (0.11754944E~37) = 1.175494351E~38 +acos (0.5877472E~38) = 1.570796371 +asin (0.5877472E~38) = 5.877471754E~39 +atan (0.5877472E~38) = 5.877471754E~39 +cos (0.5877472E~38) = 1 +cosh (0.5877472E~38) = 1 +exp (0.5877472E~38) = 1 +ln (0.5877472E~38) = ~88.0296936 +log10 (0.5877472E~38) = ~38.23080826 +sin (0.5877472E~38) = 5.877471754E~39 +sinh (0.5877472E~38) = 5.877471754E~39 +sqrt (0.5877472E~38) = 7.666466952E~20 +tan (0.5877472E~38) = 5.877471754E~39 +tanh (0.5877472E~38) = 5.877471754E~39 +acos (0.1E~44) = 1.570796371 +asin (0.1E~44) = 1.401298464E~45 +atan (0.1E~44) = 1.401298464E~45 +cos (0.1E~44) = 1 +cosh (0.1E~44) = 1 +exp (0.1E~44) = 1 +ln (0.1E~44) = ~103.2789307 +log10 (0.1E~44) = ~44.85346985 +sin (0.1E~44) = 1.401298464E~45 +sinh (0.1E~44) = 1.401298464E~45 +sqrt (0.1E~44) = 3.743392067E~23 +tan (0.1E~44) = 1.401298464E~45 +tanh (0.1E~44) = 1.401298464E~45 +acos (0.0) = 1.570796371 +asin (0.0) = 0 +atan (0.0) = 0 +cos (0.0) = 1 +cosh (0.0) = 1 +exp (0.0) = 1 +ln (0.0) = ~inf +log10 (0.0) = ~inf +sin (0.0) = 0 +sinh (0.0) = 0 +sqrt (0.0) = 0 +tan (0.0) = 0 +tanh (0.0) = 0 +acos (~0.34028235E39) = nan +asin (~0.34028235E39) = nan +atan (~0.34028235E39) = ~1.570796371 +cos (~0.34028235E39) = 0.8530210257 +cosh (~0.34028235E39) = inf +exp (~0.34028235E39) = 0 +ln (~0.34028235E39) = nan +log10 (~0.34028235E39) = nan +sin (~0.34028235E39) = 0.521876514 +sinh (~0.34028235E39) = ~inf +sqrt (~0.34028235E39) = nan +tan (~0.34028235E39) = 0.6117979288 +tanh (~0.34028235E39) = ~1 +acos (~0.17014117E39) = nan +asin (~0.17014117E39) = nan +atan (~0.17014117E39) = ~1.570796371 +cos (~0.17014117E39) = ~0.9625541568 +cosh (~0.17014117E39) = inf +exp (~0.17014117E39) = 0 +ln (~0.17014117E39) = nan +log10 (~0.17014117E39) = nan +sin (~0.17014117E39) = ~0.2710894346 +sinh (~0.17014117E39) = ~inf +sqrt (~0.17014117E39) = nan +tan (~0.17014117E39) = 0.2816355228 +tanh (~0.17014117E39) = ~1 +acos (~0.123E4) = nan +asin (~0.123E4) = nan +atan (~0.123E4) = ~1.569983363 +cos (~0.123E4) = 0.06642717123 +cosh (~0.123E4) = inf +exp (~0.123E4) = 0 +ln (~0.123E4) = nan +log10 (~0.123E4) = nan +sin (~0.123E4) = 0.9977912903 +sinh (~0.123E4) = ~inf +sqrt (~0.123E4) = nan +tan (~0.123E4) = 15.02083111 +tanh (~0.123E4) = ~1 +acos (~0.123E2) = nan +asin (~0.123E2) = nan +atan (~0.123E2) = ~1.489673972 +cos (~0.123E2) = 0.9647326469 +cosh (~0.123E2) = 109848.0156 +exp (~0.123E2) = 4.551743586E~6 +ln (~0.123E2) = nan +log10 (~0.123E2) = nan +sin (~0.123E2) = 0.2632316053 +sinh (~0.123E2) = ~109848.0156 +sqrt (~0.123E2) = nan +tan (~0.123E2) = 0.2728544474 +tanh (~0.123E2) = ~1 +acos (~0.31415927E1) = nan +asin (~0.31415927E1) = nan +atan (~0.31415927E1) = ~1.262627244 +cos (~0.31415927E1) = ~1 +cosh (~0.31415927E1) = 11.59195518 +exp (~0.31415927E1) = 0.04321391508 +ln (~0.31415927E1) = nan +log10 (~0.31415927E1) = nan +sin (~0.31415927E1) = 8.742277657E~8 +sinh (~0.31415927E1) = ~11.54873943 +sqrt (~0.31415927E1) = nan +tan (~0.31415927E1) = ~8.742277657E~8 +tanh (~0.31415927E1) = ~0.9962720871 +acos (~0.27182817E1) = nan +asin (~0.27182817E1) = nan +atan (~0.27182817E1) = ~1.218282938 +cos (~0.27182817E1) = ~0.9117338657 +cosh (~0.27182817E1) = 7.610124111 +exp (~0.27182817E1) = 0.06598804146 +ln (~0.27182817E1) = nan +log10 (~0.27182817E1) = nan +sin (~0.27182817E1) = ~0.4107813537 +sinh (~0.27182817E1) = ~7.544136047 +sqrt (~0.27182817E1) = nan +tan (~0.27182817E1) = 0.4505496323 +tanh (~0.27182817E1) = ~0.9913288951 +acos (~0.123E1) = nan +asin (~0.123E1) = nan +atan (~0.123E1) = ~0.888173759 +cos (~0.123E1) = 0.3342376947 +cosh (~0.123E1) = 1.856761098 +exp (~0.123E1) = 0.2922925651 +ln (~0.123E1) = nan +log10 (~0.123E1) = nan +sin (~0.123E1) = ~0.9424887896 +sinh (~0.123E1) = ~1.564468503 +sqrt (~0.123E1) = nan +tan (~0.123E1) = ~2.819815874 +tanh (~0.123E1) = ~0.8425793648 +acos (~0.123) = 1.694108605 +asin (~0.123) = ~0.1233122796 +atan (~0.123) = ~0.1223852858 +cos (~0.123) = 0.9924450517 +cosh (~0.123) = 1.007574081 +exp (~0.123) = 0.8842636347 +ln (~0.123) = nan +log10 (~0.123) = nan +sin (~0.123) = ~0.1226900965 +sinh (~0.123) = ~0.1233103797 +sqrt (~0.123) = nan +tan (~0.123) = ~0.1236240715 +tanh (~0.123) = ~0.1223834455 +acos (~0.123E~2) = 1.572026372 +asin (~0.123E~2) = ~0.001230000402 +atan (~0.123E~2) = ~0.001229999471 +cos (~0.123E~2) = 0.9999992251 +cosh (~0.123E~2) = 1.000000715 +exp (~0.123E~2) = 0.9987707734 +ln (~0.123E~2) = nan +log10 (~0.123E~2) = nan +sin (~0.123E~2) = ~0.001229999703 +sinh (~0.123E~2) = ~0.001230000402 +sqrt (~0.123E~2) = nan +tan (~0.123E~2) = ~0.001230000635 +tanh (~0.123E~2) = ~0.001229999471 +acos (~0.11754944E~37) = 1.570796371 +asin (~0.11754944E~37) = ~1.175494351E~38 +atan (~0.11754944E~37) = ~1.175494351E~38 +cos (~0.11754944E~37) = 1 +cosh (~0.11754944E~37) = 1 +exp (~0.11754944E~37) = 1 +ln (~0.11754944E~37) = nan +log10 (~0.11754944E~37) = nan +sin (~0.11754944E~37) = ~1.175494351E~38 +sinh (~0.11754944E~37) = ~1.175494351E~38 +sqrt (~0.11754944E~37) = nan +tan (~0.11754944E~37) = ~1.175494351E~38 +tanh (~0.11754944E~37) = ~1.175494351E~38 +acos (~0.5877472E~38) = 1.570796371 +asin (~0.5877472E~38) = ~5.877471754E~39 +atan (~0.5877472E~38) = ~5.877471754E~39 +cos (~0.5877472E~38) = 1 +cosh (~0.5877472E~38) = 1 +exp (~0.5877472E~38) = 1 +ln (~0.5877472E~38) = nan +log10 (~0.5877472E~38) = nan +sin (~0.5877472E~38) = ~5.877471754E~39 +sinh (~0.5877472E~38) = ~5.877471754E~39 +sqrt (~0.5877472E~38) = nan +tan (~0.5877472E~38) = ~5.877471754E~39 +tanh (~0.5877472E~38) = ~5.877471754E~39 +acos (~0.1E~44) = 1.570796371 +asin (~0.1E~44) = ~1.401298464E~45 +atan (~0.1E~44) = ~1.401298464E~45 +cos (~0.1E~44) = 1 +cosh (~0.1E~44) = 1 +exp (~0.1E~44) = 1 +ln (~0.1E~44) = nan +log10 (~0.1E~44) = nan +sin (~0.1E~44) = ~1.401298464E~45 +sinh (~0.1E~44) = ~1.401298464E~45 +sqrt (~0.1E~44) = nan +tan (~0.1E~44) = ~1.401298464E~45 +tanh (~0.1E~44) = ~1.401298464E~45 +acos (~0.0) = 1.570796371 +asin (~0.0) = 0 +atan (~0.0) = 0 +cos (~0.0) = 1 +cosh (~0.0) = 1 +exp (~0.0) = 1 +ln (~0.0) = ~inf +log10 (~0.0) = ~inf +sin (~0.0) = 0 +sinh (~0.0) = 0 +sqrt (~0.0) = 0 +tan (~0.0) = 0 +tanh (~0.0) = 0 +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796371 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +acos (~inf) = nan +asin (~inf) = nan +atan (~inf) = ~1.570796371 +cos (~inf) = nan +cosh (~inf) = ~inf +exp (~inf) = 0 +ln (~inf) = nan +log10 (~inf) = nan +sin (~inf) = nan +sinh (~inf) = ~inf +sqrt (~inf) = nan +tan (~inf) = nan +tanh (~inf) = ~1 +acos (nan) = nan +asin (nan) = nan +atan (nan) = nan +cos (nan) = nan +cosh (nan) = nan +exp (nan) = nan +ln (nan) = nan +log10 (nan) = nan +sin (nan) = nan +sinh (nan) = nan +sqrt (nan) = nan +tan (nan) = nan +tanh (nan) = nan +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796371 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +atan2 (0.34028235E39, 0.34028235E39) = 0.7853981853 +pow (0.34028235E39, 0.34028235E39) = inf +atan2 (0.34028235E39, 0.17014117E39) = 1.107148767 +pow (0.34028235E39, 0.17014117E39) = inf +atan2 (0.34028235E39, 0.123E4) = 1.570796371 +pow (0.34028235E39, 0.123E4) = inf +atan2 (0.34028235E39, 0.123E2) = 1.570796371 +pow (0.34028235E39, 0.123E2) = inf +atan2 (0.34028235E39, 0.31415927E1) = 1.570796371 +pow (0.34028235E39, 0.31415927E1) = inf +atan2 (0.34028235E39, 0.27182817E1) = 1.570796371 +pow (0.34028235E39, 0.27182817E1) = inf +atan2 (0.34028235E39, 0.123E1) = 1.570796371 +pow (0.34028235E39, 0.123E1) = inf +atan2 (0.34028235E39, 0.123) = 1.570796371 +pow (0.34028235E39, 0.123) = 54880.28906 +atan2 (0.34028235E39, 0.123E~2) = 1.570796371 +pow (0.34028235E39, 0.123E~2) = 1.115306377 +atan2 (0.34028235E39, 0.11754944E~37) = 1.570796371 +pow (0.34028235E39, 0.11754944E~37) = 1 +atan2 (0.34028235E39, 0.5877472E~38) = 1.570796371 +pow (0.34028235E39, 0.5877472E~38) = 1 +atan2 (0.34028235E39, 0.1E~44) = 1.570796371 +pow (0.34028235E39, 0.1E~44) = 1 +atan2 (0.34028235E39, 0.0) = 1.570796371 +pow (0.34028235E39, 0.0) = 1 +atan2 (0.34028235E39, ~0.34028235E39) = 2.356194496 +pow (0.34028235E39, ~0.34028235E39) = 0 +atan2 (0.34028235E39, ~0.17014117E39) = 2.034443855 +pow (0.34028235E39, ~0.17014117E39) = 0 +atan2 (0.34028235E39, ~0.123E4) = 1.570796251 +pow (0.34028235E39, ~0.123E4) = 0 +atan2 (0.34028235E39, ~0.123E2) = 1.570796251 +pow (0.34028235E39, ~0.123E2) = 0 +atan2 (0.34028235E39, ~0.31415927E1) = 1.570796251 +pow (0.34028235E39, ~0.31415927E1) = 0 +atan2 (0.34028235E39, ~0.27182817E1) = 1.570796251 +pow (0.34028235E39, ~0.27182817E1) = 0 +atan2 (0.34028235E39, ~0.123E1) = 1.570796251 +pow (0.34028235E39, ~0.123E1) = 0 +atan2 (0.34028235E39, ~0.123) = 1.570796251 +pow (0.34028235E39, ~0.123) = 1.822147897E~5 +atan2 (0.34028235E39, ~0.123E~2) = 1.570796251 +pow (0.34028235E39, ~0.123E~2) = 0.8966146708 +atan2 (0.34028235E39, ~0.11754944E~37) = 1.570796251 +pow (0.34028235E39, ~0.11754944E~37) = 1 +atan2 (0.34028235E39, ~0.5877472E~38) = 1.570796251 +pow (0.34028235E39, ~0.5877472E~38) = 1 +atan2 (0.34028235E39, ~0.1E~44) = 1.570796251 +pow (0.34028235E39, ~0.1E~44) = 1 +atan2 (0.34028235E39, ~0.0) = 1.570796371 +pow (0.34028235E39, ~0.0) = 1 +atan2 (0.34028235E39, inf) = 0 +pow (0.34028235E39, inf) = inf +atan2 (0.34028235E39, ~inf) = 3.141592741 +pow (0.34028235E39, ~inf) = 0 +atan2 (0.34028235E39, nan) = nan +pow (0.34028235E39, nan) = nan +atan2 (0.34028235E39, inf) = 0 +pow (0.34028235E39, inf) = inf +atan2 (0.17014117E39, 0.34028235E39) = 0.463647604 +pow (0.17014117E39, 0.34028235E39) = inf +atan2 (0.17014117E39, 0.17014117E39) = 0.7853981853 +pow (0.17014117E39, 0.17014117E39) = inf +atan2 (0.17014117E39, 0.123E4) = 1.570796371 +pow (0.17014117E39, 0.123E4) = inf +atan2 (0.17014117E39, 0.123E2) = 1.570796371 +pow (0.17014117E39, 0.123E2) = inf +atan2 (0.17014117E39, 0.31415927E1) = 1.570796371 +pow (0.17014117E39, 0.31415927E1) = inf +atan2 (0.17014117E39, 0.27182817E1) = 1.570796371 +pow (0.17014117E39, 0.27182817E1) = inf +atan2 (0.17014117E39, 0.123E1) = 1.570796371 +pow (0.17014117E39, 0.123E1) = inf +atan2 (0.17014117E39, 0.123) = 1.570796371 +pow (0.17014117E39, 0.123) = 50395.26172 +atan2 (0.17014117E39, 0.123E~2) = 1.570796371 +pow (0.17014117E39, 0.123E~2) = 1.114355803 +atan2 (0.17014117E39, 0.11754944E~37) = 1.570796371 +pow (0.17014117E39, 0.11754944E~37) = 1 +atan2 (0.17014117E39, 0.5877472E~38) = 1.570796371 +pow (0.17014117E39, 0.5877472E~38) = 1 +atan2 (0.17014117E39, 0.1E~44) = 1.570796371 +pow (0.17014117E39, 0.1E~44) = 1 +atan2 (0.17014117E39, 0.0) = 1.570796371 +pow (0.17014117E39, 0.0) = 1 +atan2 (0.17014117E39, ~0.34028235E39) = 2.677945137 +pow (0.17014117E39, ~0.34028235E39) = 0 +atan2 (0.17014117E39, ~0.17014117E39) = 2.356194496 +pow (0.17014117E39, ~0.17014117E39) = 0 +atan2 (0.17014117E39, ~0.123E4) = 1.570796251 +pow (0.17014117E39, ~0.123E4) = 0 +atan2 (0.17014117E39, ~0.123E2) = 1.570796251 +pow (0.17014117E39, ~0.123E2) = 0 +atan2 (0.17014117E39, ~0.31415927E1) = 1.570796251 +pow (0.17014117E39, ~0.31415927E1) = 0 +atan2 (0.17014117E39, ~0.27182817E1) = 1.570796251 +pow (0.17014117E39, ~0.27182817E1) = 0 +atan2 (0.17014117E39, ~0.123E1) = 1.570796251 +pow (0.17014117E39, ~0.123E1) = 0 +atan2 (0.17014117E39, ~0.123) = 1.570796251 +pow (0.17014117E39, ~0.123) = 1.984313531E~5 +atan2 (0.17014117E39, ~0.123E~2) = 1.570796251 +pow (0.17014117E39, ~0.123E~2) = 0.8973793983 +atan2 (0.17014117E39, ~0.11754944E~37) = 1.570796251 +pow (0.17014117E39, ~0.11754944E~37) = 1 +atan2 (0.17014117E39, ~0.5877472E~38) = 1.570796251 +pow (0.17014117E39, ~0.5877472E~38) = 1 +atan2 (0.17014117E39, ~0.1E~44) = 1.570796251 +pow (0.17014117E39, ~0.1E~44) = 1 +atan2 (0.17014117E39, ~0.0) = 1.570796371 +pow (0.17014117E39, ~0.0) = 1 +atan2 (0.17014117E39, inf) = 0 +pow (0.17014117E39, inf) = inf +atan2 (0.17014117E39, ~inf) = 3.141592741 +pow (0.17014117E39, ~inf) = 0 +atan2 (0.17014117E39, nan) = nan +pow (0.17014117E39, nan) = nan +atan2 (0.17014117E39, inf) = 0 +pow (0.17014117E39, inf) = inf +atan2 (0.123E4, 0.34028235E39) = 3.614645488E~36 +pow (0.123E4, 0.34028235E39) = inf +atan2 (0.123E4, 0.17014117E39) = 7.229290975E~36 +pow (0.123E4, 0.17014117E39) = inf +atan2 (0.123E4, 0.123E4) = 0.7853981853 +pow (0.123E4, 0.123E4) = inf +atan2 (0.123E4, 0.123E2) = 1.560796618 +pow (0.123E4, 0.123E2) = 1.013522656E38 +atan2 (0.123E4, 0.31415927E1) = 1.568242192 +pow (0.123E4, 0.31415927E1) = 5095930368 +atan2 (0.123E4, 0.27182817E1) = 1.568586349 +pow (0.123E4, 0.27182817E1) = 250745216 +atan2 (0.123E4, 0.123E1) = 1.569796324 +pow (0.123E4, 0.123E1) = 6318.054199 +atan2 (0.123E4, 0.123) = 1.570696354 +pow (0.123E4, 0.123) = 2.39915514 +atan2 (0.123E4, 0.123E~2) = 1.570795298 +pow (0.123E4, 0.123E~2) = 1.008789539 +atan2 (0.123E4, 0.11754944E~37) = 1.570796371 +pow (0.123E4, 0.11754944E~37) = 1 +atan2 (0.123E4, 0.5877472E~38) = 1.570796371 +pow (0.123E4, 0.5877472E~38) = 1 +atan2 (0.123E4, 0.1E~44) = 1.570796371 +pow (0.123E4, 0.1E~44) = 1 +atan2 (0.123E4, 0.0) = 1.570796371 +pow (0.123E4, 0.0) = 1 +atan2 (0.123E4, ~0.34028235E39) = 3.141592741 +pow (0.123E4, ~0.34028235E39) = 0 +atan2 (0.123E4, ~0.17014117E39) = 3.141592741 +pow (0.123E4, ~0.17014117E39) = 0 +atan2 (0.123E4, ~0.123E4) = 2.356194496 +pow (0.123E4, ~0.123E4) = 0 +atan2 (0.123E4, ~0.123E2) = 1.580796003 +pow (0.123E4, ~0.123E2) = 9.86657752E~39 +atan2 (0.123E4, ~0.31415927E1) = 1.57335043 +pow (0.123E4, ~0.31415927E1) = 1.962350282E~10 +atan2 (0.123E4, ~0.27182817E1) = 1.573006272 +pow (0.123E4, ~0.27182817E1) = 3.988112063E~9 +atan2 (0.123E4, ~0.123E1) = 1.571796298 +pow (0.123E4, ~0.123E1) = 1.582765835E~4 +atan2 (0.123E4, ~0.123) = 1.570896268 +pow (0.123E4, ~0.123) = 0.4168134034 +atan2 (0.123E4, ~0.123E~2) = 1.570797324 +pow (0.123E4, ~0.123E~2) = 0.991286993 +atan2 (0.123E4, ~0.11754944E~37) = 1.570796251 +pow (0.123E4, ~0.11754944E~37) = 1 +atan2 (0.123E4, ~0.5877472E~38) = 1.570796251 +pow (0.123E4, ~0.5877472E~38) = 1 +atan2 (0.123E4, ~0.1E~44) = 1.570796251 +pow (0.123E4, ~0.1E~44) = 1 +atan2 (0.123E4, ~0.0) = 1.570796371 +pow (0.123E4, ~0.0) = 1 +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E4, ~inf) = 3.141592741 +pow (0.123E4, ~inf) = 0 +atan2 (0.123E4, nan) = nan +pow (0.123E4, nan) = nan +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E2, 0.34028235E39) = 3.614645465E~38 +pow (0.123E2, 0.34028235E39) = inf +atan2 (0.123E2, 0.17014117E39) = 7.22929093E~38 +pow (0.123E2, 0.17014117E39) = inf +atan2 (0.123E2, 0.123E4) = 0.009999666363 +pow (0.123E2, 0.123E4) = inf +atan2 (0.123E2, 0.123E2) = 0.7853981853 +pow (0.123E2, 0.123E2) = 2.545852141E13 +atan2 (0.123E2, 0.31415927E1) = 1.32072866 +pow (0.123E2, 0.31415927E1) = 2654.837891 +atan2 (0.123E2, 0.27182817E1) = 1.353293777 +pow (0.123E2, 0.27182817E1) = 917.6333618 +atan2 (0.123E2, 0.123E1) = 1.471127629 +pow (0.123E2, 0.123E1) = 21.90702057 +atan2 (0.123E2, 0.123) = 1.560796618 +pow (0.123E2, 0.123) = 1.361627579 +atan2 (0.123E2, 0.123E~2) = 1.570696354 +pow (0.123E2, 0.123E~2) = 1.003091574 +atan2 (0.123E2, 0.11754944E~37) = 1.570796371 +pow (0.123E2, 0.11754944E~37) = 1 +atan2 (0.123E2, 0.5877472E~38) = 1.570796371 +pow (0.123E2, 0.5877472E~38) = 1 +atan2 (0.123E2, 0.1E~44) = 1.570796371 +pow (0.123E2, 0.1E~44) = 1 +atan2 (0.123E2, 0.0) = 1.570796371 +pow (0.123E2, 0.0) = 1 +atan2 (0.123E2, ~0.34028235E39) = 3.141592741 +pow (0.123E2, ~0.34028235E39) = 0 +atan2 (0.123E2, ~0.17014117E39) = 3.141592741 +pow (0.123E2, ~0.17014117E39) = 0 +atan2 (0.123E2, ~0.123E4) = 3.131592989 +pow (0.123E2, ~0.123E4) = 0 +atan2 (0.123E2, ~0.123E2) = 2.356194496 +pow (0.123E2, ~0.123E2) = 3.927958084E~14 +atan2 (0.123E2, ~0.31415927E1) = 1.820863962 +pow (0.123E2, ~0.31415927E1) = 3.766708251E~4 +atan2 (0.123E2, ~0.27182817E1) = 1.788298845 +pow (0.123E2, ~0.27182817E1) = 0.00108975987 +atan2 (0.123E2, ~0.123E1) = 1.670464993 +pow (0.123E2, ~0.123E1) = 0.04564746842 +atan2 (0.123E2, ~0.123) = 1.580796003 +pow (0.123E2, ~0.123) = 0.7344152331 +atan2 (0.123E2, ~0.123E~2) = 1.570896268 +pow (0.123E2, ~0.123E~2) = 0.996917963 +atan2 (0.123E2, ~0.11754944E~37) = 1.570796251 +pow (0.123E2, ~0.11754944E~37) = 1 +atan2 (0.123E2, ~0.5877472E~38) = 1.570796251 +pow (0.123E2, ~0.5877472E~38) = 1 +atan2 (0.123E2, ~0.1E~44) = 1.570796251 +pow (0.123E2, ~0.1E~44) = 1 +atan2 (0.123E2, ~0.0) = 1.570796371 +pow (0.123E2, ~0.0) = 1 +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.123E2, ~inf) = 3.141592741 +pow (0.123E2, ~inf) = 0 +atan2 (0.123E2, nan) = nan +pow (0.123E2, nan) = nan +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.31415927E1, 0.34028235E39) = 9.232312E~39 +pow (0.31415927E1, 0.34028235E39) = inf +atan2 (0.31415927E1, 0.17014117E39) = 1.8464624E~38 +pow (0.31415927E1, 0.17014117E39) = inf +atan2 (0.31415927E1, 0.123E4) = 0.002554134931 +pow (0.31415927E1, 0.123E4) = inf +atan2 (0.31415927E1, 0.123E2) = 0.2500677109 +pow (0.31415927E1, 0.123E2) = 1302997.75 +atan2 (0.31415927E1, 0.31415927E1) = 0.7853981853 +pow (0.31415927E1, 0.31415927E1) = 36.46216583 +atan2 (0.31415927E1, 0.27182817E1) = 0.8575118184 +pow (0.31415927E1, 0.27182817E1) = 22.45915794 +atan2 (0.31415927E1, 0.123E1) = 1.19762063 +pow (0.31415927E1, 0.123E1) = 4.087844372 +atan2 (0.31415927E1, 0.123) = 1.531664252 +pow (0.31415927E1, 0.123) = 1.15119648 +atan2 (0.31415927E1, 0.123E~2) = 1.570404768 +pow (0.31415927E1, 0.123E~2) = 1.001409054 +atan2 (0.31415927E1, 0.11754944E~37) = 1.570796371 +pow (0.31415927E1, 0.11754944E~37) = 1 +atan2 (0.31415927E1, 0.5877472E~38) = 1.570796371 +pow (0.31415927E1, 0.5877472E~38) = 1 +atan2 (0.31415927E1, 0.1E~44) = 1.570796371 +pow (0.31415927E1, 0.1E~44) = 1 +atan2 (0.31415927E1, 0.0) = 1.570796371 +pow (0.31415927E1, 0.0) = 1 +atan2 (0.31415927E1, ~0.34028235E39) = 3.141592741 +pow (0.31415927E1, ~0.34028235E39) = 0 +atan2 (0.31415927E1, ~0.17014117E39) = 3.141592741 +pow (0.31415927E1, ~0.17014117E39) = 0 +atan2 (0.31415927E1, ~0.123E4) = 3.139038563 +pow (0.31415927E1, ~0.123E4) = 0 +atan2 (0.31415927E1, ~0.123E2) = 2.89152503 +pow (0.31415927E1, ~0.123E2) = 7.674610174E~7 +atan2 (0.31415927E1, ~0.31415927E1) = 2.356194496 +pow (0.31415927E1, ~0.31415927E1) = 0.02742568776 +atan2 (0.31415927E1, ~0.27182817E1) = 2.284080982 +pow (0.31415927E1, ~0.27182817E1) = 0.04452526942 +atan2 (0.31415927E1, ~0.123E1) = 1.943971992 +pow (0.31415927E1, ~0.123E1) = 0.2446276993 +atan2 (0.31415927E1, ~0.123) = 1.60992837 +pow (0.31415927E1, ~0.123) = 0.8686614633 +atan2 (0.31415927E1, ~0.123E~2) = 1.571187854 +pow (0.31415927E1, ~0.123E~2) = 0.9985929728 +atan2 (0.31415927E1, ~0.11754944E~37) = 1.570796251 +pow (0.31415927E1, ~0.11754944E~37) = 1 +atan2 (0.31415927E1, ~0.5877472E~38) = 1.570796251 +pow (0.31415927E1, ~0.5877472E~38) = 1 +atan2 (0.31415927E1, ~0.1E~44) = 1.570796251 +pow (0.31415927E1, ~0.1E~44) = 1 +atan2 (0.31415927E1, ~0.0) = 1.570796371 +pow (0.31415927E1, ~0.0) = 1 +atan2 (0.31415927E1, inf) = 0 +pow (0.31415927E1, inf) = inf +atan2 (0.31415927E1, ~inf) = 3.141592741 +pow (0.31415927E1, ~inf) = 0 +atan2 (0.31415927E1, nan) = nan +pow (0.31415927E1, nan) = nan +atan2 (0.31415927E1, inf) = 0 +pow (0.31415927E1, inf) = inf +atan2 (0.27182817E1, 0.34028235E39) = 7.988312091E~39 +pow (0.27182817E1, 0.34028235E39) = inf +atan2 (0.27182817E1, 0.17014117E39) = 1.597662558E~38 +pow (0.27182817E1, 0.17014117E39) = inf +atan2 (0.27182817E1, 0.123E4) = 0.002209981671 +pow (0.27182817E1, 0.123E4) = inf +atan2 (0.27182817E1, 0.123E2) = 0.2175025195 +pow (0.27182817E1, 0.123E2) = 219695.9531 +atan2 (0.27182817E1, 0.31415927E1) = 0.7132844925 +pow (0.27182817E1, 0.31415927E1) = 23.14069176 +atan2 (0.27182817E1, 0.27182817E1) = 0.7853981853 +pow (0.27182817E1, 0.27182817E1) = 15.15425968 +atan2 (0.27182817E1, 0.123E1) = 1.145872235 +pow (0.27182817E1, 0.123E1) = 3.421229362 +atan2 (0.27182817E1, 0.123) = 1.525578022 +pow (0.27182817E1, 0.123) = 1.130884409 +atan2 (0.27182817E1, 0.123E~2) = 1.570343852 +pow (0.27182817E1, 0.123E~2) = 1.001230717 +atan2 (0.27182817E1, 0.11754944E~37) = 1.570796371 +pow (0.27182817E1, 0.11754944E~37) = 1 +atan2 (0.27182817E1, 0.5877472E~38) = 1.570796371 +pow (0.27182817E1, 0.5877472E~38) = 1 +atan2 (0.27182817E1, 0.1E~44) = 1.570796371 +pow (0.27182817E1, 0.1E~44) = 1 +atan2 (0.27182817E1, 0.0) = 1.570796371 +pow (0.27182817E1, 0.0) = 1 +atan2 (0.27182817E1, ~0.34028235E39) = 3.141592741 +pow (0.27182817E1, ~0.34028235E39) = 0 +atan2 (0.27182817E1, ~0.17014117E39) = 3.141592741 +pow (0.27182817E1, ~0.17014117E39) = 0 +atan2 (0.27182817E1, ~0.123E4) = 3.139382601 +pow (0.27182817E1, ~0.123E4) = 0 +atan2 (0.27182817E1, ~0.123E2) = 2.924090147 +pow (0.27182817E1, ~0.123E2) = 4.551745405E~6 +atan2 (0.27182817E1, ~0.31415927E1) = 2.428308249 +pow (0.27182817E1, ~0.31415927E1) = 0.04321391881 +atan2 (0.27182817E1, ~0.27182817E1) = 2.356194496 +pow (0.27182817E1, ~0.27182817E1) = 0.06598804891 +atan2 (0.27182817E1, ~0.123E1) = 1.995720387 +pow (0.27182817E1, ~0.123E1) = 0.2922925949 +atan2 (0.27182817E1, ~0.123) = 1.6160146 +pow (0.27182817E1, ~0.123) = 0.8842636347 +atan2 (0.27182817E1, ~0.123E~2) = 1.57124877 +pow (0.27182817E1, ~0.123E~2) = 0.9987707734 +atan2 (0.27182817E1, ~0.11754944E~37) = 1.570796251 +pow (0.27182817E1, ~0.11754944E~37) = 1 +atan2 (0.27182817E1, ~0.5877472E~38) = 1.570796251 +pow (0.27182817E1, ~0.5877472E~38) = 1 +atan2 (0.27182817E1, ~0.1E~44) = 1.570796251 +pow (0.27182817E1, ~0.1E~44) = 1 +atan2 (0.27182817E1, ~0.0) = 1.570796371 +pow (0.27182817E1, ~0.0) = 1 +atan2 (0.27182817E1, inf) = 0 +pow (0.27182817E1, inf) = inf +atan2 (0.27182817E1, ~inf) = 3.141592741 +pow (0.27182817E1, ~inf) = 0 +atan2 (0.27182817E1, nan) = nan +pow (0.27182817E1, nan) = nan +atan2 (0.27182817E1, inf) = 0 +pow (0.27182817E1, inf) = inf +atan2 (0.123E1, 0.34028235E39) = 3.614645185E~39 +pow (0.123E1, 0.34028235E39) = inf +atan2 (0.123E1, 0.17014117E39) = 7.22929037E~39 +pow (0.123E1, 0.17014117E39) = inf +atan2 (0.123E1, 0.123E4) = 9.999996983E~4 +pow (0.123E1, 0.123E4) = inf +atan2 (0.123E1, 0.123E2) = 0.09966865182 +pow (0.123E1, 0.123E2) = 12.75947952 +atan2 (0.123E1, 0.31415927E1) = 0.3731757402 +pow (0.123E1, 0.31415927E1) = 1.916219592 +atan2 (0.123E1, 0.27182817E1) = 0.4249241054 +pow (0.123E1, 0.27182817E1) = 1.755445838 +atan2 (0.123E1, 0.123E1) = 0.7853981853 +pow (0.123E1, 0.123E1) = 1.289981008 +atan2 (0.123E1, 0.123) = 1.471127629 +pow (0.123E1, 0.123) = 1.025789738 +atan2 (0.123E1, 0.123E~2) = 1.569796324 +pow (0.123E1, 0.123E~2) = 1.000254631 +atan2 (0.123E1, 0.11754944E~37) = 1.570796371 +pow (0.123E1, 0.11754944E~37) = 1 +atan2 (0.123E1, 0.5877472E~38) = 1.570796371 +pow (0.123E1, 0.5877472E~38) = 1 +atan2 (0.123E1, 0.1E~44) = 1.570796371 +pow (0.123E1, 0.1E~44) = 1 +atan2 (0.123E1, 0.0) = 1.570796371 +pow (0.123E1, 0.0) = 1 +atan2 (0.123E1, ~0.34028235E39) = 3.141592741 +pow (0.123E1, ~0.34028235E39) = 0 +atan2 (0.123E1, ~0.17014117E39) = 3.141592741 +pow (0.123E1, ~0.17014117E39) = 0 +atan2 (0.123E1, ~0.123E4) = 3.140592575 +pow (0.123E1, ~0.123E4) = 0 +atan2 (0.123E1, ~0.123E2) = 3.041924 +pow (0.123E1, ~0.123E2) = 0.07837310433 +atan2 (0.123E1, ~0.31415927E1) = 2.768416882 +pow (0.123E1, ~0.31415927E1) = 0.5218608975 +atan2 (0.123E1, ~0.27182817E1) = 2.716668606 +pow (0.123E1, ~0.27182817E1) = 0.5696558356 +atan2 (0.123E1, ~0.123E1) = 2.356194496 +pow (0.123E1, ~0.123E1) = 0.7752052546 +atan2 (0.123E1, ~0.123) = 1.670464993 +pow (0.123E1, ~0.123) = 0.9748587012 +atan2 (0.123E1, ~0.123E~2) = 1.571796298 +pow (0.123E1, ~0.123E~2) = 0.9997454286 +atan2 (0.123E1, ~0.11754944E~37) = 1.570796251 +pow (0.123E1, ~0.11754944E~37) = 1 +atan2 (0.123E1, ~0.5877472E~38) = 1.570796251 +pow (0.123E1, ~0.5877472E~38) = 1 +atan2 (0.123E1, ~0.1E~44) = 1.570796251 +pow (0.123E1, ~0.1E~44) = 1 +atan2 (0.123E1, ~0.0) = 1.570796371 +pow (0.123E1, ~0.0) = 1 +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123E1, ~inf) = 3.141592741 +pow (0.123E1, ~inf) = 0 +atan2 (0.123E1, nan) = nan +pow (0.123E1, nan) = nan +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123, 0.34028235E39) = 3.614649389E~40 +pow (0.123, 0.34028235E39) = 0 +atan2 (0.123, 0.17014117E39) = 7.229284764E~40 +pow (0.123, 0.17014117E39) = 0 +atan2 (0.123, 0.123E4) = 1.000000047E~4 +pow (0.123, 0.123E4) = 0 +atan2 (0.123, 0.123E2) = 0.009999666363 +pow (0.123, 0.123E2) = 6.394886357E~12 +atan2 (0.123, 0.31415927E1) = 0.0391321294 +pow (0.123, 0.31415927E1) = 0.001383096678 +atan2 (0.123, 0.27182817E1) = 0.04521832988 +pow (0.123, 0.27182817E1) = 0.00335819344 +atan2 (0.123, 0.123E1) = 0.09966865182 +pow (0.123, 0.123E1) = 0.07595970482 +atan2 (0.123, 0.123) = 0.7853981853 +pow (0.123, 0.123) = 0.7727843523 +atan2 (0.123, 0.123E~2) = 1.560796618 +pow (0.123, 0.123E~2) = 0.9974257946 +atan2 (0.123, 0.11754944E~37) = 1.570796371 +pow (0.123, 0.11754944E~37) = 1 +atan2 (0.123, 0.5877472E~38) = 1.570796371 +pow (0.123, 0.5877472E~38) = 1 +atan2 (0.123, 0.1E~44) = 1.570796371 +pow (0.123, 0.1E~44) = 1 +atan2 (0.123, 0.0) = 1.570796371 +pow (0.123, 0.0) = 1 +atan2 (0.123, ~0.34028235E39) = 3.141592741 +pow (0.123, ~0.34028235E39) = inf +atan2 (0.123, ~0.17014117E39) = 3.141592741 +pow (0.123, ~0.17014117E39) = inf +atan2 (0.123, ~0.123E4) = 3.141492605 +pow (0.123, ~0.123E4) = inf +atan2 (0.123, ~0.123E2) = 3.131592989 +pow (0.123, ~0.123E2) = 156374941700 +atan2 (0.123, ~0.31415927E1) = 3.102460623 +pow (0.123, ~0.31415927E1) = 723.0152588 +atan2 (0.123, ~0.27182817E1) = 3.096374273 +pow (0.123, ~0.27182817E1) = 297.7791443 +atan2 (0.123, ~0.123E1) = 3.041924 +pow (0.123, ~0.123E1) = 13.16487408 +atan2 (0.123, ~0.123) = 2.356194496 +pow (0.123, ~0.123) = 1.294022083 +atan2 (0.123, ~0.123E~2) = 1.580796003 +pow (0.123, ~0.123E~2) = 1.002580881 +atan2 (0.123, ~0.11754944E~37) = 1.570796251 +pow (0.123, ~0.11754944E~37) = 1 +atan2 (0.123, ~0.5877472E~38) = 1.570796251 +pow (0.123, ~0.5877472E~38) = 1 +atan2 (0.123, ~0.1E~44) = 1.570796251 +pow (0.123, ~0.1E~44) = 1 +atan2 (0.123, ~0.0) = 1.570796371 +pow (0.123, ~0.0) = 1 +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123, ~inf) = 3.141592741 +pow (0.123, ~inf) = inf +atan2 (0.123, nan) = nan +pow (0.123, nan) = nan +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123E~2, 0.34028235E39) = 3.613948739E~42 +pow (0.123E~2, 0.34028235E39) = 0 +atan2 (0.123E~2, 0.17014117E39) = 7.229298777E~42 +pow (0.123E~2, 0.17014117E39) = 0 +atan2 (0.123E~2, 0.123E4) = 9.999999975E~7 +pow (0.123E~2, 0.123E4) = 0 +atan2 (0.123E~2, 0.123E2) = 1.000000047E~4 +pow (0.123E~2, 0.123E2) = 1.606321748E~36 +atan2 (0.123E~2, 0.31415927E1) = 3.915211419E~4 +pow (0.123E~2, 0.31415927E1) = 7.205548935E~10 +atan2 (0.123E~2, 0.27182817E1) = 4.524917167E~4 +pow (0.123E~2, 0.27182817E1) = 1.228972657E~8 +atan2 (0.123E~2, 0.123E1) = 9.999996983E~4 +pow (0.123E~2, 0.123E1) = 2.633802651E~4 +atan2 (0.123E~2, 0.123) = 0.009999666363 +pow (0.123E~2, 0.123) = 0.4385896027 +atan2 (0.123E~2, 0.123E~2) = 0.7853981853 +pow (0.123E~2, 0.123E~2) = 0.9917919636 +atan2 (0.123E~2, 0.11754944E~37) = 1.570796371 +pow (0.123E~2, 0.11754944E~37) = 1 +atan2 (0.123E~2, 0.5877472E~38) = 1.570796371 +pow (0.123E~2, 0.5877472E~38) = 1 +atan2 (0.123E~2, 0.1E~44) = 1.570796371 +pow (0.123E~2, 0.1E~44) = 1 +atan2 (0.123E~2, 0.0) = 1.570796371 +pow (0.123E~2, 0.0) = 1 +atan2 (0.123E~2, ~0.34028235E39) = 3.141592741 +pow (0.123E~2, ~0.34028235E39) = inf +atan2 (0.123E~2, ~0.17014117E39) = 3.141592741 +pow (0.123E~2, ~0.17014117E39) = inf +atan2 (0.123E~2, ~0.123E4) = 3.141591549 +pow (0.123E~2, ~0.123E4) = inf +atan2 (0.123E~2, ~0.123E2) = 3.141492605 +pow (0.123E~2, ~0.123E2) = 6.225402783E35 +atan2 (0.123E~2, ~0.31415927E1) = 3.141201019 +pow (0.123E~2, ~0.31415927E1) = 1387819264 +atan2 (0.123E~2, ~0.27182817E1) = 3.141140223 +pow (0.123E~2, ~0.27182817E1) = 81368776 +atan2 (0.123E~2, ~0.123E1) = 3.140592575 +pow (0.123E~2, ~0.123E1) = 3796.791504 +atan2 (0.123E~2, ~0.123) = 3.131592989 +pow (0.123E~2, ~0.123) = 2.280035973 +atan2 (0.123E~2, ~0.123E~2) = 2.356194496 +pow (0.123E~2, ~0.123E~2) = 1.008275986 +atan2 (0.123E~2, ~0.11754944E~37) = 1.570796251 +pow (0.123E~2, ~0.11754944E~37) = 1 +atan2 (0.123E~2, ~0.5877472E~38) = 1.570796251 +pow (0.123E~2, ~0.5877472E~38) = 1 +atan2 (0.123E~2, ~0.1E~44) = 1.570796251 +pow (0.123E~2, ~0.1E~44) = 1 +atan2 (0.123E~2, ~0.0) = 1.570796371 +pow (0.123E~2, ~0.0) = 1 +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.123E~2, ~inf) = 3.141592741 +pow (0.123E~2, ~inf) = inf +atan2 (0.123E~2, nan) = nan +pow (0.123E~2, nan) = nan +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.11754944E~37, 0.34028235E39) = 0 +pow (0.11754944E~37, 0.34028235E39) = 0 +atan2 (0.11754944E~37, 0.17014117E39) = 0 +pow (0.11754944E~37, 0.17014117E39) = 0 +atan2 (0.11754944E~37, 0.123E4) = 9.556855527E~42 +pow (0.11754944E~37, 0.123E4) = 0 +atan2 (0.11754944E~37, 0.123E2) = 9.55686954E~40 +pow (0.11754944E~37, 0.123E2) = 0 +atan2 (0.11754944E~37, 0.31415927E1) = 3.74171493E~39 +pow (0.11754944E~37, 0.31415927E1) = 0 +atan2 (0.11754944E~37, 0.27182817E1) = 4.324402857E~39 +pow (0.11754944E~37, 0.27182817E1) = 0 +atan2 (0.11754944E~37, 0.123E1) = 9.556863934E~39 +pow (0.11754944E~37, 0.123E1) = 0 +atan2 (0.11754944E~37, 0.123) = 9.556864495E~38 +pow (0.11754944E~37, 0.123) = 2.160911572E~5 +atan2 (0.11754944E~37, 0.123E~2) = 9.556864495E~36 +pow (0.11754944E~37, 0.123E~2) = 0.8981448412 +atan2 (0.11754944E~37, 0.11754944E~37) = 0.7853981853 +pow (0.11754944E~37, 0.11754944E~37) = 1 +atan2 (0.11754944E~37, 0.5877472E~38) = 1.107148767 +pow (0.11754944E~37, 0.5877472E~38) = 1 +atan2 (0.11754944E~37, 0.1E~44) = 1.570796251 +pow (0.11754944E~37, 0.1E~44) = 1 +atan2 (0.11754944E~37, 0.0) = 1.570796371 +pow (0.11754944E~37, 0.0) = 1 +atan2 (0.11754944E~37, ~0.34028235E39) = 3.141592741 +pow (0.11754944E~37, ~0.34028235E39) = inf +atan2 (0.11754944E~37, ~0.17014117E39) = 3.141592741 +pow (0.11754944E~37, ~0.17014117E39) = inf +atan2 (0.11754944E~37, ~0.123E4) = 3.141592741 +pow (0.11754944E~37, ~0.123E4) = inf +atan2 (0.11754944E~37, ~0.123E2) = 3.141592741 +pow (0.11754944E~37, ~0.123E2) = inf +atan2 (0.11754944E~37, ~0.31415927E1) = 3.141592741 +pow (0.11754944E~37, ~0.31415927E1) = inf +atan2 (0.11754944E~37, ~0.27182817E1) = 3.141592741 +pow (0.11754944E~37, ~0.27182817E1) = inf +atan2 (0.11754944E~37, ~0.123E1) = 3.141592741 +pow (0.11754944E~37, ~0.123E1) = inf +atan2 (0.11754944E~37, ~0.123) = 3.141592741 +pow (0.11754944E~37, ~0.123) = 46276.76562 +atan2 (0.11754944E~37, ~0.123E~2) = 3.141592741 +pow (0.11754944E~37, ~0.123E~2) = 1.113406181 +atan2 (0.11754944E~37, ~0.11754944E~37) = 2.356194496 +pow (0.11754944E~37, ~0.11754944E~37) = 1 +atan2 (0.11754944E~37, ~0.5877472E~38) = 2.034443855 +pow (0.11754944E~37, ~0.5877472E~38) = 1 +atan2 (0.11754944E~37, ~0.1E~44) = 1.570796371 +pow (0.11754944E~37, ~0.1E~44) = 1 +atan2 (0.11754944E~37, ~0.0) = 1.570796371 +pow (0.11754944E~37, ~0.0) = 1 +atan2 (0.11754944E~37, inf) = 0 +pow (0.11754944E~37, inf) = 0 +atan2 (0.11754944E~37, ~inf) = 3.141592741 +pow (0.11754944E~37, ~inf) = inf +atan2 (0.11754944E~37, nan) = nan +pow (0.11754944E~37, nan) = nan +atan2 (0.11754944E~37, inf) = 0 +pow (0.11754944E~37, inf) = 0 +atan2 (0.5877472E~38, 0.34028235E39) = 0 +pow (0.5877472E~38, 0.34028235E39) = 0 +atan2 (0.5877472E~38, 0.17014117E39) = 0 +pow (0.5877472E~38, 0.17014117E39) = 0 +atan2 (0.5877472E~38, 0.123E4) = 4.778427763E~42 +pow (0.5877472E~38, 0.123E4) = 0 +atan2 (0.5877472E~38, 0.123E2) = 4.778427763E~40 +pow (0.5877472E~38, 0.123E2) = 0 +atan2 (0.5877472E~38, 0.31415927E1) = 1.870856764E~39 +pow (0.5877472E~38, 0.31415927E1) = 0 +atan2 (0.5877472E~38, 0.27182817E1) = 2.162200728E~39 +pow (0.5877472E~38, 0.27182817E1) = 0 +atan2 (0.5877472E~38, 0.123E1) = 4.778431967E~39 +pow (0.5877472E~38, 0.123E1) = 0 +atan2 (0.5877472E~38, 0.123) = 4.778432248E~38 +pow (0.5877472E~38, 0.123) = 1.984313531E~5 +atan2 (0.5877472E~38, 0.123E~2) = 4.778432248E~36 +pow (0.5877472E~38, 0.123E~2) = 0.8973793983 +atan2 (0.5877472E~38, 0.11754944E~37) = 0.463647604 +pow (0.5877472E~38, 0.11754944E~37) = 1 +atan2 (0.5877472E~38, 0.5877472E~38) = 0.7853981853 +pow (0.5877472E~38, 0.5877472E~38) = 1 +atan2 (0.5877472E~38, 0.1E~44) = 1.570796132 +pow (0.5877472E~38, 0.1E~44) = 1 +atan2 (0.5877472E~38, 0.0) = 1.570796371 +pow (0.5877472E~38, 0.0) = 1 +atan2 (0.5877472E~38, ~0.34028235E39) = 3.141592741 +pow (0.5877472E~38, ~0.34028235E39) = inf +atan2 (0.5877472E~38, ~0.17014117E39) = 3.141592741 +pow (0.5877472E~38, ~0.17014117E39) = inf +atan2 (0.5877472E~38, ~0.123E4) = 3.141592741 +pow (0.5877472E~38, ~0.123E4) = inf +atan2 (0.5877472E~38, ~0.123E2) = 3.141592741 +pow (0.5877472E~38, ~0.123E2) = inf +atan2 (0.5877472E~38, ~0.31415927E1) = 3.141592741 +pow (0.5877472E~38, ~0.31415927E1) = inf +atan2 (0.5877472E~38, ~0.27182817E1) = 3.141592741 +pow (0.5877472E~38, ~0.27182817E1) = inf +atan2 (0.5877472E~38, ~0.123E1) = 3.141592741 +pow (0.5877472E~38, ~0.123E1) = inf +atan2 (0.5877472E~38, ~0.123) = 3.141592741 +pow (0.5877472E~38, ~0.123) = 50395.26172 +atan2 (0.5877472E~38, ~0.123E~2) = 3.141592741 +pow (0.5877472E~38, ~0.123E~2) = 1.114355803 +atan2 (0.5877472E~38, ~0.11754944E~37) = 2.677945137 +pow (0.5877472E~38, ~0.11754944E~37) = 1 +atan2 (0.5877472E~38, ~0.5877472E~38) = 2.356194496 +pow (0.5877472E~38, ~0.5877472E~38) = 1 +atan2 (0.5877472E~38, ~0.1E~44) = 1.57079649 +pow (0.5877472E~38, ~0.1E~44) = 1 +atan2 (0.5877472E~38, ~0.0) = 1.570796371 +pow (0.5877472E~38, ~0.0) = 1 +atan2 (0.5877472E~38, inf) = 0 +pow (0.5877472E~38, inf) = 0 +atan2 (0.5877472E~38, ~inf) = 3.141592741 +pow (0.5877472E~38, ~inf) = inf +atan2 (0.5877472E~38, nan) = nan +pow (0.5877472E~38, nan) = nan +atan2 (0.5877472E~38, inf) = 0 +pow (0.5877472E~38, inf) = 0 +atan2 (0.1E~44, 0.34028235E39) = 0 +pow (0.1E~44, 0.34028235E39) = 0 +atan2 (0.1E~44, 0.17014117E39) = 0 +pow (0.1E~44, 0.17014117E39) = 0 +atan2 (0.1E~44, 0.123E4) = 0 +pow (0.1E~44, 0.123E4) = 0 +atan2 (0.1E~44, 0.123E2) = 0 +pow (0.1E~44, 0.123E2) = 0 +atan2 (0.1E~44, 0.31415927E1) = 0 +pow (0.1E~44, 0.31415927E1) = 0 +atan2 (0.1E~44, 0.27182817E1) = 0 +pow (0.1E~44, 0.27182817E1) = 0 +atan2 (0.1E~44, 0.123E1) = 1.401298464E~45 +pow (0.1E~44, 0.123E1) = 0 +atan2 (0.1E~44, 0.123) = 1.121038771E~44 +pow (0.1E~44, 0.123) = 3.041046966E~6 +atan2 (0.1E~44, 0.123E~2) = 1.139255651E~42 +pow (0.1E~44, 0.123E~2) = 0.8807045221 +atan2 (0.1E~44, 0.11754944E~37) = 1.192092896E~7 +pow (0.1E~44, 0.11754944E~37) = 1 +atan2 (0.1E~44, 0.5877472E~38) = 2.384185791E~7 +pow (0.1E~44, 0.5877472E~38) = 1 +atan2 (0.1E~44, 0.1E~44) = 0.7853981853 +pow (0.1E~44, 0.1E~44) = 1 +atan2 (0.1E~44, 0.0) = 1.570796371 +pow (0.1E~44, 0.0) = 1 +atan2 (0.1E~44, ~0.34028235E39) = 3.141592741 +pow (0.1E~44, ~0.34028235E39) = inf +atan2 (0.1E~44, ~0.17014117E39) = 3.141592741 +pow (0.1E~44, ~0.17014117E39) = inf +atan2 (0.1E~44, ~0.123E4) = 3.141592741 +pow (0.1E~44, ~0.123E4) = inf +atan2 (0.1E~44, ~0.123E2) = 3.141592741 +pow (0.1E~44, ~0.123E2) = inf +atan2 (0.1E~44, ~0.31415927E1) = 3.141592741 +pow (0.1E~44, ~0.31415927E1) = inf +atan2 (0.1E~44, ~0.27182817E1) = 3.141592741 +pow (0.1E~44, ~0.27182817E1) = inf +atan2 (0.1E~44, ~0.123E1) = 3.141592741 +pow (0.1E~44, ~0.123E1) = inf +atan2 (0.1E~44, ~0.123) = 3.141592741 +pow (0.1E~44, ~0.123) = 328834.125 +atan2 (0.1E~44, ~0.123E~2) = 3.141592741 +pow (0.1E~44, ~0.123E~2) = 1.135454535 +atan2 (0.1E~44, ~0.11754944E~37) = 3.141592503 +pow (0.1E~44, ~0.11754944E~37) = 1 +atan2 (0.1E~44, ~0.5877472E~38) = 3.141592503 +pow (0.1E~44, ~0.5877472E~38) = 1 +atan2 (0.1E~44, ~0.1E~44) = 2.356194496 +pow (0.1E~44, ~0.1E~44) = 1 +atan2 (0.1E~44, ~0.0) = 1.570796371 +pow (0.1E~44, ~0.0) = 1 +atan2 (0.1E~44, inf) = 0 +pow (0.1E~44, inf) = 0 +atan2 (0.1E~44, ~inf) = 3.141592741 +pow (0.1E~44, ~inf) = inf +atan2 (0.1E~44, nan) = nan +pow (0.1E~44, nan) = nan +atan2 (0.1E~44, inf) = 0 +pow (0.1E~44, inf) = 0 +atan2 (0.0, 0.34028235E39) = 0 +pow (0.0, 0.34028235E39) = 0 +atan2 (0.0, 0.17014117E39) = 0 +pow (0.0, 0.17014117E39) = 0 +atan2 (0.0, 0.123E4) = 0 +pow (0.0, 0.123E4) = 0 +atan2 (0.0, 0.123E2) = 0 +pow (0.0, 0.123E2) = 0 +atan2 (0.0, 0.31415927E1) = 0 +pow (0.0, 0.31415927E1) = 0 +atan2 (0.0, 0.27182817E1) = 0 +pow (0.0, 0.27182817E1) = 0 +atan2 (0.0, 0.123E1) = 0 +pow (0.0, 0.123E1) = 0 +atan2 (0.0, 0.123) = 0 +pow (0.0, 0.123) = 0 +atan2 (0.0, 0.123E~2) = 0 +pow (0.0, 0.123E~2) = 0 +atan2 (0.0, 0.11754944E~37) = 0 +pow (0.0, 0.11754944E~37) = 0 +atan2 (0.0, 0.5877472E~38) = 0 +pow (0.0, 0.5877472E~38) = 0 +atan2 (0.0, 0.1E~44) = 0 +pow (0.0, 0.1E~44) = 0 +atan2 (0.0, 0.0) = 0 +pow (0.0, 0.0) = 1 +atan2 (0.0, ~0.34028235E39) = 3.141592741 +pow (0.0, ~0.34028235E39) = inf +atan2 (0.0, ~0.17014117E39) = 3.141592741 +pow (0.0, ~0.17014117E39) = inf +atan2 (0.0, ~0.123E4) = 3.141592741 +pow (0.0, ~0.123E4) = inf +atan2 (0.0, ~0.123E2) = 3.141592741 +pow (0.0, ~0.123E2) = inf +atan2 (0.0, ~0.31415927E1) = 3.141592741 +pow (0.0, ~0.31415927E1) = inf +atan2 (0.0, ~0.27182817E1) = 3.141592741 +pow (0.0, ~0.27182817E1) = inf +atan2 (0.0, ~0.123E1) = 3.141592741 +pow (0.0, ~0.123E1) = inf +atan2 (0.0, ~0.123) = 3.141592741 +pow (0.0, ~0.123) = inf +atan2 (0.0, ~0.123E~2) = 3.141592741 +pow (0.0, ~0.123E~2) = inf +atan2 (0.0, ~0.11754944E~37) = 3.141592741 +pow (0.0, ~0.11754944E~37) = inf +atan2 (0.0, ~0.5877472E~38) = 3.141592741 +pow (0.0, ~0.5877472E~38) = inf +atan2 (0.0, ~0.1E~44) = 3.141592741 +pow (0.0, ~0.1E~44) = inf +atan2 (0.0, ~0.0) = 3.141592741 +pow (0.0, ~0.0) = 1 +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (0.0, ~inf) = 3.141592741 +pow (0.0, ~inf) = inf +atan2 (0.0, nan) = nan +pow (0.0, nan) = nan +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (~0.34028235E39, 0.34028235E39) = ~0.7853981853 +pow (~0.34028235E39, 0.34028235E39) = inf +atan2 (~0.34028235E39, 0.17014117E39) = ~1.107148767 +pow (~0.34028235E39, 0.17014117E39) = inf +atan2 (~0.34028235E39, 0.123E4) = ~1.570796371 +pow (~0.34028235E39, 0.123E4) = inf +atan2 (~0.34028235E39, 0.123E2) = ~1.570796371 +pow (~0.34028235E39, 0.123E2) = nan +atan2 (~0.34028235E39, 0.31415927E1) = ~1.570796371 +pow (~0.34028235E39, 0.31415927E1) = nan +atan2 (~0.34028235E39, 0.27182817E1) = ~1.570796371 +pow (~0.34028235E39, 0.27182817E1) = nan +atan2 (~0.34028235E39, 0.123E1) = ~1.570796371 +pow (~0.34028235E39, 0.123E1) = nan +atan2 (~0.34028235E39, 0.123) = ~1.570796371 +pow (~0.34028235E39, 0.123) = nan +atan2 (~0.34028235E39, 0.123E~2) = ~1.570796371 +pow (~0.34028235E39, 0.123E~2) = nan +atan2 (~0.34028235E39, 0.11754944E~37) = ~1.570796371 +pow (~0.34028235E39, 0.11754944E~37) = nan +atan2 (~0.34028235E39, 0.5877472E~38) = ~1.570796371 +pow (~0.34028235E39, 0.5877472E~38) = nan +atan2 (~0.34028235E39, 0.1E~44) = ~1.570796371 +pow (~0.34028235E39, 0.1E~44) = nan +atan2 (~0.34028235E39, 0.0) = ~1.570796371 +pow (~0.34028235E39, 0.0) = 1 +atan2 (~0.34028235E39, ~0.34028235E39) = ~2.356194496 +pow (~0.34028235E39, ~0.34028235E39) = 0 +atan2 (~0.34028235E39, ~0.17014117E39) = ~2.034443855 +pow (~0.34028235E39, ~0.17014117E39) = 0 +atan2 (~0.34028235E39, ~0.123E4) = ~1.570796251 +pow (~0.34028235E39, ~0.123E4) = 0 +atan2 (~0.34028235E39, ~0.123E2) = ~1.570796251 +pow (~0.34028235E39, ~0.123E2) = nan +atan2 (~0.34028235E39, ~0.31415927E1) = ~1.570796251 +pow (~0.34028235E39, ~0.31415927E1) = nan +atan2 (~0.34028235E39, ~0.27182817E1) = ~1.570796251 +pow (~0.34028235E39, ~0.27182817E1) = nan +atan2 (~0.34028235E39, ~0.123E1) = ~1.570796251 +pow (~0.34028235E39, ~0.123E1) = nan +atan2 (~0.34028235E39, ~0.123) = ~1.570796251 +pow (~0.34028235E39, ~0.123) = nan +atan2 (~0.34028235E39, ~0.123E~2) = ~1.570796251 +pow (~0.34028235E39, ~0.123E~2) = nan +atan2 (~0.34028235E39, ~0.11754944E~37) = ~1.570796251 +pow (~0.34028235E39, ~0.11754944E~37) = nan +atan2 (~0.34028235E39, ~0.5877472E~38) = ~1.570796251 +pow (~0.34028235E39, ~0.5877472E~38) = nan +atan2 (~0.34028235E39, ~0.1E~44) = ~1.570796251 +pow (~0.34028235E39, ~0.1E~44) = nan +atan2 (~0.34028235E39, ~0.0) = ~1.570796371 +pow (~0.34028235E39, ~0.0) = 1 +atan2 (~0.34028235E39, inf) = 0 +pow (~0.34028235E39, inf) = inf +atan2 (~0.34028235E39, ~inf) = ~3.141592741 +pow (~0.34028235E39, ~inf) = 0 +atan2 (~0.34028235E39, nan) = nan +pow (~0.34028235E39, nan) = nan +atan2 (~0.34028235E39, inf) = 0 +pow (~0.34028235E39, inf) = inf +atan2 (~0.17014117E39, 0.34028235E39) = ~0.463647604 +pow (~0.17014117E39, 0.34028235E39) = inf +atan2 (~0.17014117E39, 0.17014117E39) = ~0.7853981853 +pow (~0.17014117E39, 0.17014117E39) = inf +atan2 (~0.17014117E39, 0.123E4) = ~1.570796371 +pow (~0.17014117E39, 0.123E4) = inf +atan2 (~0.17014117E39, 0.123E2) = ~1.570796371 +pow (~0.17014117E39, 0.123E2) = nan +atan2 (~0.17014117E39, 0.31415927E1) = ~1.570796371 +pow (~0.17014117E39, 0.31415927E1) = nan +atan2 (~0.17014117E39, 0.27182817E1) = ~1.570796371 +pow (~0.17014117E39, 0.27182817E1) = nan +atan2 (~0.17014117E39, 0.123E1) = ~1.570796371 +pow (~0.17014117E39, 0.123E1) = nan +atan2 (~0.17014117E39, 0.123) = ~1.570796371 +pow (~0.17014117E39, 0.123) = nan +atan2 (~0.17014117E39, 0.123E~2) = ~1.570796371 +pow (~0.17014117E39, 0.123E~2) = nan +atan2 (~0.17014117E39, 0.11754944E~37) = ~1.570796371 +pow (~0.17014117E39, 0.11754944E~37) = nan +atan2 (~0.17014117E39, 0.5877472E~38) = ~1.570796371 +pow (~0.17014117E39, 0.5877472E~38) = nan +atan2 (~0.17014117E39, 0.1E~44) = ~1.570796371 +pow (~0.17014117E39, 0.1E~44) = nan +atan2 (~0.17014117E39, 0.0) = ~1.570796371 +pow (~0.17014117E39, 0.0) = 1 +atan2 (~0.17014117E39, ~0.34028235E39) = ~2.677945137 +pow (~0.17014117E39, ~0.34028235E39) = 0 +atan2 (~0.17014117E39, ~0.17014117E39) = ~2.356194496 +pow (~0.17014117E39, ~0.17014117E39) = 0 +atan2 (~0.17014117E39, ~0.123E4) = ~1.570796251 +pow (~0.17014117E39, ~0.123E4) = 0 +atan2 (~0.17014117E39, ~0.123E2) = ~1.570796251 +pow (~0.17014117E39, ~0.123E2) = nan +atan2 (~0.17014117E39, ~0.31415927E1) = ~1.570796251 +pow (~0.17014117E39, ~0.31415927E1) = nan +atan2 (~0.17014117E39, ~0.27182817E1) = ~1.570796251 +pow (~0.17014117E39, ~0.27182817E1) = nan +atan2 (~0.17014117E39, ~0.123E1) = ~1.570796251 +pow (~0.17014117E39, ~0.123E1) = nan +atan2 (~0.17014117E39, ~0.123) = ~1.570796251 +pow (~0.17014117E39, ~0.123) = nan +atan2 (~0.17014117E39, ~0.123E~2) = ~1.570796251 +pow (~0.17014117E39, ~0.123E~2) = nan +atan2 (~0.17014117E39, ~0.11754944E~37) = ~1.570796251 +pow (~0.17014117E39, ~0.11754944E~37) = nan +atan2 (~0.17014117E39, ~0.5877472E~38) = ~1.570796251 +pow (~0.17014117E39, ~0.5877472E~38) = nan +atan2 (~0.17014117E39, ~0.1E~44) = ~1.570796251 +pow (~0.17014117E39, ~0.1E~44) = nan +atan2 (~0.17014117E39, ~0.0) = ~1.570796371 +pow (~0.17014117E39, ~0.0) = 1 +atan2 (~0.17014117E39, inf) = 0 +pow (~0.17014117E39, inf) = inf +atan2 (~0.17014117E39, ~inf) = ~3.141592741 +pow (~0.17014117E39, ~inf) = 0 +atan2 (~0.17014117E39, nan) = nan +pow (~0.17014117E39, nan) = nan +atan2 (~0.17014117E39, inf) = 0 +pow (~0.17014117E39, inf) = inf +atan2 (~0.123E4, 0.34028235E39) = ~3.614645488E~36 +pow (~0.123E4, 0.34028235E39) = inf +atan2 (~0.123E4, 0.17014117E39) = ~7.229290975E~36 +pow (~0.123E4, 0.17014117E39) = inf +atan2 (~0.123E4, 0.123E4) = ~0.7853981853 +pow (~0.123E4, 0.123E4) = inf +atan2 (~0.123E4, 0.123E2) = ~1.560796618 +pow (~0.123E4, 0.123E2) = nan +atan2 (~0.123E4, 0.31415927E1) = ~1.568242192 +pow (~0.123E4, 0.31415927E1) = nan +atan2 (~0.123E4, 0.27182817E1) = ~1.568586349 +pow (~0.123E4, 0.27182817E1) = nan +atan2 (~0.123E4, 0.123E1) = ~1.569796324 +pow (~0.123E4, 0.123E1) = nan +atan2 (~0.123E4, 0.123) = ~1.570696354 +pow (~0.123E4, 0.123) = nan +atan2 (~0.123E4, 0.123E~2) = ~1.570795298 +pow (~0.123E4, 0.123E~2) = nan +atan2 (~0.123E4, 0.11754944E~37) = ~1.570796371 +pow (~0.123E4, 0.11754944E~37) = nan +atan2 (~0.123E4, 0.5877472E~38) = ~1.570796371 +pow (~0.123E4, 0.5877472E~38) = nan +atan2 (~0.123E4, 0.1E~44) = ~1.570796371 +pow (~0.123E4, 0.1E~44) = nan +atan2 (~0.123E4, 0.0) = ~1.570796371 +pow (~0.123E4, 0.0) = 1 +atan2 (~0.123E4, ~0.34028235E39) = ~3.141592741 +pow (~0.123E4, ~0.34028235E39) = 0 +atan2 (~0.123E4, ~0.17014117E39) = ~3.141592741 +pow (~0.123E4, ~0.17014117E39) = 0 +atan2 (~0.123E4, ~0.123E4) = ~2.356194496 +pow (~0.123E4, ~0.123E4) = 0 +atan2 (~0.123E4, ~0.123E2) = ~1.580796003 +pow (~0.123E4, ~0.123E2) = nan +atan2 (~0.123E4, ~0.31415927E1) = ~1.57335043 +pow (~0.123E4, ~0.31415927E1) = nan +atan2 (~0.123E4, ~0.27182817E1) = ~1.573006272 +pow (~0.123E4, ~0.27182817E1) = nan +atan2 (~0.123E4, ~0.123E1) = ~1.571796298 +pow (~0.123E4, ~0.123E1) = nan +atan2 (~0.123E4, ~0.123) = ~1.570896268 +pow (~0.123E4, ~0.123) = nan +atan2 (~0.123E4, ~0.123E~2) = ~1.570797324 +pow (~0.123E4, ~0.123E~2) = nan +atan2 (~0.123E4, ~0.11754944E~37) = ~1.570796251 +pow (~0.123E4, ~0.11754944E~37) = nan +atan2 (~0.123E4, ~0.5877472E~38) = ~1.570796251 +pow (~0.123E4, ~0.5877472E~38) = nan +atan2 (~0.123E4, ~0.1E~44) = ~1.570796251 +pow (~0.123E4, ~0.1E~44) = nan +atan2 (~0.123E4, ~0.0) = ~1.570796371 +pow (~0.123E4, ~0.0) = 1 +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E4, ~inf) = ~3.141592741 +pow (~0.123E4, ~inf) = 0 +atan2 (~0.123E4, nan) = nan +pow (~0.123E4, nan) = nan +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E2, 0.34028235E39) = ~3.614645465E~38 +pow (~0.123E2, 0.34028235E39) = inf +atan2 (~0.123E2, 0.17014117E39) = ~7.22929093E~38 +pow (~0.123E2, 0.17014117E39) = inf +atan2 (~0.123E2, 0.123E4) = ~0.009999666363 +pow (~0.123E2, 0.123E4) = inf +atan2 (~0.123E2, 0.123E2) = ~0.7853981853 +pow (~0.123E2, 0.123E2) = nan +atan2 (~0.123E2, 0.31415927E1) = ~1.32072866 +pow (~0.123E2, 0.31415927E1) = nan +atan2 (~0.123E2, 0.27182817E1) = ~1.353293777 +pow (~0.123E2, 0.27182817E1) = nan +atan2 (~0.123E2, 0.123E1) = ~1.471127629 +pow (~0.123E2, 0.123E1) = nan +atan2 (~0.123E2, 0.123) = ~1.560796618 +pow (~0.123E2, 0.123) = nan +atan2 (~0.123E2, 0.123E~2) = ~1.570696354 +pow (~0.123E2, 0.123E~2) = nan +atan2 (~0.123E2, 0.11754944E~37) = ~1.570796371 +pow (~0.123E2, 0.11754944E~37) = nan +atan2 (~0.123E2, 0.5877472E~38) = ~1.570796371 +pow (~0.123E2, 0.5877472E~38) = nan +atan2 (~0.123E2, 0.1E~44) = ~1.570796371 +pow (~0.123E2, 0.1E~44) = nan +atan2 (~0.123E2, 0.0) = ~1.570796371 +pow (~0.123E2, 0.0) = 1 +atan2 (~0.123E2, ~0.34028235E39) = ~3.141592741 +pow (~0.123E2, ~0.34028235E39) = 0 +atan2 (~0.123E2, ~0.17014117E39) = ~3.141592741 +pow (~0.123E2, ~0.17014117E39) = 0 +atan2 (~0.123E2, ~0.123E4) = ~3.131592989 +pow (~0.123E2, ~0.123E4) = 0 +atan2 (~0.123E2, ~0.123E2) = ~2.356194496 +pow (~0.123E2, ~0.123E2) = nan +atan2 (~0.123E2, ~0.31415927E1) = ~1.820863962 +pow (~0.123E2, ~0.31415927E1) = nan +atan2 (~0.123E2, ~0.27182817E1) = ~1.788298845 +pow (~0.123E2, ~0.27182817E1) = nan +atan2 (~0.123E2, ~0.123E1) = ~1.670464993 +pow (~0.123E2, ~0.123E1) = nan +atan2 (~0.123E2, ~0.123) = ~1.580796003 +pow (~0.123E2, ~0.123) = nan +atan2 (~0.123E2, ~0.123E~2) = ~1.570896268 +pow (~0.123E2, ~0.123E~2) = nan +atan2 (~0.123E2, ~0.11754944E~37) = ~1.570796251 +pow (~0.123E2, ~0.11754944E~37) = nan +atan2 (~0.123E2, ~0.5877472E~38) = ~1.570796251 +pow (~0.123E2, ~0.5877472E~38) = nan +atan2 (~0.123E2, ~0.1E~44) = ~1.570796251 +pow (~0.123E2, ~0.1E~44) = nan +atan2 (~0.123E2, ~0.0) = ~1.570796371 +pow (~0.123E2, ~0.0) = 1 +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.123E2, ~inf) = ~3.141592741 +pow (~0.123E2, ~inf) = 0 +atan2 (~0.123E2, nan) = nan +pow (~0.123E2, nan) = nan +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.31415927E1, 0.34028235E39) = ~9.232312E~39 +pow (~0.31415927E1, 0.34028235E39) = inf +atan2 (~0.31415927E1, 0.17014117E39) = ~1.8464624E~38 +pow (~0.31415927E1, 0.17014117E39) = inf +atan2 (~0.31415927E1, 0.123E4) = ~0.002554134931 +pow (~0.31415927E1, 0.123E4) = inf +atan2 (~0.31415927E1, 0.123E2) = ~0.2500677109 +pow (~0.31415927E1, 0.123E2) = nan +atan2 (~0.31415927E1, 0.31415927E1) = ~0.7853981853 +pow (~0.31415927E1, 0.31415927E1) = nan +atan2 (~0.31415927E1, 0.27182817E1) = ~0.8575118184 +pow (~0.31415927E1, 0.27182817E1) = nan +atan2 (~0.31415927E1, 0.123E1) = ~1.19762063 +pow (~0.31415927E1, 0.123E1) = nan +atan2 (~0.31415927E1, 0.123) = ~1.531664252 +pow (~0.31415927E1, 0.123) = nan +atan2 (~0.31415927E1, 0.123E~2) = ~1.570404768 +pow (~0.31415927E1, 0.123E~2) = nan +atan2 (~0.31415927E1, 0.11754944E~37) = ~1.570796371 +pow (~0.31415927E1, 0.11754944E~37) = nan +atan2 (~0.31415927E1, 0.5877472E~38) = ~1.570796371 +pow (~0.31415927E1, 0.5877472E~38) = nan +atan2 (~0.31415927E1, 0.1E~44) = ~1.570796371 +pow (~0.31415927E1, 0.1E~44) = nan +atan2 (~0.31415927E1, 0.0) = ~1.570796371 +pow (~0.31415927E1, 0.0) = 1 +atan2 (~0.31415927E1, ~0.34028235E39) = ~3.141592741 +pow (~0.31415927E1, ~0.34028235E39) = 0 +atan2 (~0.31415927E1, ~0.17014117E39) = ~3.141592741 +pow (~0.31415927E1, ~0.17014117E39) = 0 +atan2 (~0.31415927E1, ~0.123E4) = ~3.139038563 +pow (~0.31415927E1, ~0.123E4) = 0 +atan2 (~0.31415927E1, ~0.123E2) = ~2.89152503 +pow (~0.31415927E1, ~0.123E2) = nan +atan2 (~0.31415927E1, ~0.31415927E1) = ~2.356194496 +pow (~0.31415927E1, ~0.31415927E1) = nan +atan2 (~0.31415927E1, ~0.27182817E1) = ~2.284080982 +pow (~0.31415927E1, ~0.27182817E1) = nan +atan2 (~0.31415927E1, ~0.123E1) = ~1.943971992 +pow (~0.31415927E1, ~0.123E1) = nan +atan2 (~0.31415927E1, ~0.123) = ~1.60992837 +pow (~0.31415927E1, ~0.123) = nan +atan2 (~0.31415927E1, ~0.123E~2) = ~1.571187854 +pow (~0.31415927E1, ~0.123E~2) = nan +atan2 (~0.31415927E1, ~0.11754944E~37) = ~1.570796251 +pow (~0.31415927E1, ~0.11754944E~37) = nan +atan2 (~0.31415927E1, ~0.5877472E~38) = ~1.570796251 +pow (~0.31415927E1, ~0.5877472E~38) = nan +atan2 (~0.31415927E1, ~0.1E~44) = ~1.570796251 +pow (~0.31415927E1, ~0.1E~44) = nan +atan2 (~0.31415927E1, ~0.0) = ~1.570796371 +pow (~0.31415927E1, ~0.0) = 1 +atan2 (~0.31415927E1, inf) = 0 +pow (~0.31415927E1, inf) = inf +atan2 (~0.31415927E1, ~inf) = ~3.141592741 +pow (~0.31415927E1, ~inf) = 0 +atan2 (~0.31415927E1, nan) = nan +pow (~0.31415927E1, nan) = nan +atan2 (~0.31415927E1, inf) = 0 +pow (~0.31415927E1, inf) = inf +atan2 (~0.27182817E1, 0.34028235E39) = ~7.988312091E~39 +pow (~0.27182817E1, 0.34028235E39) = inf +atan2 (~0.27182817E1, 0.17014117E39) = ~1.597662558E~38 +pow (~0.27182817E1, 0.17014117E39) = inf +atan2 (~0.27182817E1, 0.123E4) = ~0.002209981671 +pow (~0.27182817E1, 0.123E4) = inf +atan2 (~0.27182817E1, 0.123E2) = ~0.2175025195 +pow (~0.27182817E1, 0.123E2) = nan +atan2 (~0.27182817E1, 0.31415927E1) = ~0.7132844925 +pow (~0.27182817E1, 0.31415927E1) = nan +atan2 (~0.27182817E1, 0.27182817E1) = ~0.7853981853 +pow (~0.27182817E1, 0.27182817E1) = nan +atan2 (~0.27182817E1, 0.123E1) = ~1.145872235 +pow (~0.27182817E1, 0.123E1) = nan +atan2 (~0.27182817E1, 0.123) = ~1.525578022 +pow (~0.27182817E1, 0.123) = nan +atan2 (~0.27182817E1, 0.123E~2) = ~1.570343852 +pow (~0.27182817E1, 0.123E~2) = nan +atan2 (~0.27182817E1, 0.11754944E~37) = ~1.570796371 +pow (~0.27182817E1, 0.11754944E~37) = nan +atan2 (~0.27182817E1, 0.5877472E~38) = ~1.570796371 +pow (~0.27182817E1, 0.5877472E~38) = nan +atan2 (~0.27182817E1, 0.1E~44) = ~1.570796371 +pow (~0.27182817E1, 0.1E~44) = nan +atan2 (~0.27182817E1, 0.0) = ~1.570796371 +pow (~0.27182817E1, 0.0) = 1 +atan2 (~0.27182817E1, ~0.34028235E39) = ~3.141592741 +pow (~0.27182817E1, ~0.34028235E39) = 0 +atan2 (~0.27182817E1, ~0.17014117E39) = ~3.141592741 +pow (~0.27182817E1, ~0.17014117E39) = 0 +atan2 (~0.27182817E1, ~0.123E4) = ~3.139382601 +pow (~0.27182817E1, ~0.123E4) = 0 +atan2 (~0.27182817E1, ~0.123E2) = ~2.924090147 +pow (~0.27182817E1, ~0.123E2) = nan +atan2 (~0.27182817E1, ~0.31415927E1) = ~2.428308249 +pow (~0.27182817E1, ~0.31415927E1) = nan +atan2 (~0.27182817E1, ~0.27182817E1) = ~2.356194496 +pow (~0.27182817E1, ~0.27182817E1) = nan +atan2 (~0.27182817E1, ~0.123E1) = ~1.995720387 +pow (~0.27182817E1, ~0.123E1) = nan +atan2 (~0.27182817E1, ~0.123) = ~1.6160146 +pow (~0.27182817E1, ~0.123) = nan +atan2 (~0.27182817E1, ~0.123E~2) = ~1.57124877 +pow (~0.27182817E1, ~0.123E~2) = nan +atan2 (~0.27182817E1, ~0.11754944E~37) = ~1.570796251 +pow (~0.27182817E1, ~0.11754944E~37) = nan +atan2 (~0.27182817E1, ~0.5877472E~38) = ~1.570796251 +pow (~0.27182817E1, ~0.5877472E~38) = nan +atan2 (~0.27182817E1, ~0.1E~44) = ~1.570796251 +pow (~0.27182817E1, ~0.1E~44) = nan +atan2 (~0.27182817E1, ~0.0) = ~1.570796371 +pow (~0.27182817E1, ~0.0) = 1 +atan2 (~0.27182817E1, inf) = 0 +pow (~0.27182817E1, inf) = inf +atan2 (~0.27182817E1, ~inf) = ~3.141592741 +pow (~0.27182817E1, ~inf) = 0 +atan2 (~0.27182817E1, nan) = nan +pow (~0.27182817E1, nan) = nan +atan2 (~0.27182817E1, inf) = 0 +pow (~0.27182817E1, inf) = inf +atan2 (~0.123E1, 0.34028235E39) = ~3.614645185E~39 +pow (~0.123E1, 0.34028235E39) = inf +atan2 (~0.123E1, 0.17014117E39) = ~7.22929037E~39 +pow (~0.123E1, 0.17014117E39) = inf +atan2 (~0.123E1, 0.123E4) = ~9.999996983E~4 +pow (~0.123E1, 0.123E4) = inf +atan2 (~0.123E1, 0.123E2) = ~0.09966865182 +pow (~0.123E1, 0.123E2) = nan +atan2 (~0.123E1, 0.31415927E1) = ~0.3731757402 +pow (~0.123E1, 0.31415927E1) = nan +atan2 (~0.123E1, 0.27182817E1) = ~0.4249241054 +pow (~0.123E1, 0.27182817E1) = nan +atan2 (~0.123E1, 0.123E1) = ~0.7853981853 +pow (~0.123E1, 0.123E1) = nan +atan2 (~0.123E1, 0.123) = ~1.471127629 +pow (~0.123E1, 0.123) = nan +atan2 (~0.123E1, 0.123E~2) = ~1.569796324 +pow (~0.123E1, 0.123E~2) = nan +atan2 (~0.123E1, 0.11754944E~37) = ~1.570796371 +pow (~0.123E1, 0.11754944E~37) = nan +atan2 (~0.123E1, 0.5877472E~38) = ~1.570796371 +pow (~0.123E1, 0.5877472E~38) = nan +atan2 (~0.123E1, 0.1E~44) = ~1.570796371 +pow (~0.123E1, 0.1E~44) = nan +atan2 (~0.123E1, 0.0) = ~1.570796371 +pow (~0.123E1, 0.0) = 1 +atan2 (~0.123E1, ~0.34028235E39) = ~3.141592741 +pow (~0.123E1, ~0.34028235E39) = 0 +atan2 (~0.123E1, ~0.17014117E39) = ~3.141592741 +pow (~0.123E1, ~0.17014117E39) = 0 +atan2 (~0.123E1, ~0.123E4) = ~3.140592575 +pow (~0.123E1, ~0.123E4) = 0 +atan2 (~0.123E1, ~0.123E2) = ~3.041924 +pow (~0.123E1, ~0.123E2) = nan +atan2 (~0.123E1, ~0.31415927E1) = ~2.768416882 +pow (~0.123E1, ~0.31415927E1) = nan +atan2 (~0.123E1, ~0.27182817E1) = ~2.716668606 +pow (~0.123E1, ~0.27182817E1) = nan +atan2 (~0.123E1, ~0.123E1) = ~2.356194496 +pow (~0.123E1, ~0.123E1) = nan +atan2 (~0.123E1, ~0.123) = ~1.670464993 +pow (~0.123E1, ~0.123) = nan +atan2 (~0.123E1, ~0.123E~2) = ~1.571796298 +pow (~0.123E1, ~0.123E~2) = nan +atan2 (~0.123E1, ~0.11754944E~37) = ~1.570796251 +pow (~0.123E1, ~0.11754944E~37) = nan +atan2 (~0.123E1, ~0.5877472E~38) = ~1.570796251 +pow (~0.123E1, ~0.5877472E~38) = nan +atan2 (~0.123E1, ~0.1E~44) = ~1.570796251 +pow (~0.123E1, ~0.1E~44) = nan +atan2 (~0.123E1, ~0.0) = ~1.570796371 +pow (~0.123E1, ~0.0) = 1 +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123E1, ~inf) = ~3.141592741 +pow (~0.123E1, ~inf) = 0 +atan2 (~0.123E1, nan) = nan +pow (~0.123E1, nan) = nan +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123, 0.34028235E39) = ~3.614649389E~40 +pow (~0.123, 0.34028235E39) = 0 +atan2 (~0.123, 0.17014117E39) = ~7.229284764E~40 +pow (~0.123, 0.17014117E39) = 0 +atan2 (~0.123, 0.123E4) = ~1.000000047E~4 +pow (~0.123, 0.123E4) = 0 +atan2 (~0.123, 0.123E2) = ~0.009999666363 +pow (~0.123, 0.123E2) = nan +atan2 (~0.123, 0.31415927E1) = ~0.0391321294 +pow (~0.123, 0.31415927E1) = nan +atan2 (~0.123, 0.27182817E1) = ~0.04521832988 +pow (~0.123, 0.27182817E1) = nan +atan2 (~0.123, 0.123E1) = ~0.09966865182 +pow (~0.123, 0.123E1) = nan +atan2 (~0.123, 0.123) = ~0.7853981853 +pow (~0.123, 0.123) = nan +atan2 (~0.123, 0.123E~2) = ~1.560796618 +pow (~0.123, 0.123E~2) = nan +atan2 (~0.123, 0.11754944E~37) = ~1.570796371 +pow (~0.123, 0.11754944E~37) = nan +atan2 (~0.123, 0.5877472E~38) = ~1.570796371 +pow (~0.123, 0.5877472E~38) = nan +atan2 (~0.123, 0.1E~44) = ~1.570796371 +pow (~0.123, 0.1E~44) = nan +atan2 (~0.123, 0.0) = ~1.570796371 +pow (~0.123, 0.0) = 1 +atan2 (~0.123, ~0.34028235E39) = ~3.141592741 +pow (~0.123, ~0.34028235E39) = inf +atan2 (~0.123, ~0.17014117E39) = ~3.141592741 +pow (~0.123, ~0.17014117E39) = inf +atan2 (~0.123, ~0.123E4) = ~3.141492605 +pow (~0.123, ~0.123E4) = inf +atan2 (~0.123, ~0.123E2) = ~3.131592989 +pow (~0.123, ~0.123E2) = nan +atan2 (~0.123, ~0.31415927E1) = ~3.102460623 +pow (~0.123, ~0.31415927E1) = nan +atan2 (~0.123, ~0.27182817E1) = ~3.096374273 +pow (~0.123, ~0.27182817E1) = nan +atan2 (~0.123, ~0.123E1) = ~3.041924 +pow (~0.123, ~0.123E1) = nan +atan2 (~0.123, ~0.123) = ~2.356194496 +pow (~0.123, ~0.123) = nan +atan2 (~0.123, ~0.123E~2) = ~1.580796003 +pow (~0.123, ~0.123E~2) = nan +atan2 (~0.123, ~0.11754944E~37) = ~1.570796251 +pow (~0.123, ~0.11754944E~37) = nan +atan2 (~0.123, ~0.5877472E~38) = ~1.570796251 +pow (~0.123, ~0.5877472E~38) = nan +atan2 (~0.123, ~0.1E~44) = ~1.570796251 +pow (~0.123, ~0.1E~44) = nan +atan2 (~0.123, ~0.0) = ~1.570796371 +pow (~0.123, ~0.0) = 1 +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123, ~inf) = ~3.141592741 +pow (~0.123, ~inf) = inf +atan2 (~0.123, nan) = nan +pow (~0.123, nan) = nan +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123E~2, 0.34028235E39) = ~3.613948739E~42 +pow (~0.123E~2, 0.34028235E39) = 0 +atan2 (~0.123E~2, 0.17014117E39) = ~7.229298777E~42 +pow (~0.123E~2, 0.17014117E39) = 0 +atan2 (~0.123E~2, 0.123E4) = ~9.999999975E~7 +pow (~0.123E~2, 0.123E4) = 0 +atan2 (~0.123E~2, 0.123E2) = ~1.000000047E~4 +pow (~0.123E~2, 0.123E2) = nan +atan2 (~0.123E~2, 0.31415927E1) = ~3.915211419E~4 +pow (~0.123E~2, 0.31415927E1) = nan +atan2 (~0.123E~2, 0.27182817E1) = ~4.524917167E~4 +pow (~0.123E~2, 0.27182817E1) = nan +atan2 (~0.123E~2, 0.123E1) = ~9.999996983E~4 +pow (~0.123E~2, 0.123E1) = nan +atan2 (~0.123E~2, 0.123) = ~0.009999666363 +pow (~0.123E~2, 0.123) = nan +atan2 (~0.123E~2, 0.123E~2) = ~0.7853981853 +pow (~0.123E~2, 0.123E~2) = nan +atan2 (~0.123E~2, 0.11754944E~37) = ~1.570796371 +pow (~0.123E~2, 0.11754944E~37) = nan +atan2 (~0.123E~2, 0.5877472E~38) = ~1.570796371 +pow (~0.123E~2, 0.5877472E~38) = nan +atan2 (~0.123E~2, 0.1E~44) = ~1.570796371 +pow (~0.123E~2, 0.1E~44) = nan +atan2 (~0.123E~2, 0.0) = ~1.570796371 +pow (~0.123E~2, 0.0) = 1 +atan2 (~0.123E~2, ~0.34028235E39) = ~3.141592741 +pow (~0.123E~2, ~0.34028235E39) = inf +atan2 (~0.123E~2, ~0.17014117E39) = ~3.141592741 +pow (~0.123E~2, ~0.17014117E39) = inf +atan2 (~0.123E~2, ~0.123E4) = ~3.141591549 +pow (~0.123E~2, ~0.123E4) = inf +atan2 (~0.123E~2, ~0.123E2) = ~3.141492605 +pow (~0.123E~2, ~0.123E2) = nan +atan2 (~0.123E~2, ~0.31415927E1) = ~3.141201019 +pow (~0.123E~2, ~0.31415927E1) = nan +atan2 (~0.123E~2, ~0.27182817E1) = ~3.141140223 +pow (~0.123E~2, ~0.27182817E1) = nan +atan2 (~0.123E~2, ~0.123E1) = ~3.140592575 +pow (~0.123E~2, ~0.123E1) = nan +atan2 (~0.123E~2, ~0.123) = ~3.131592989 +pow (~0.123E~2, ~0.123) = nan +atan2 (~0.123E~2, ~0.123E~2) = ~2.356194496 +pow (~0.123E~2, ~0.123E~2) = nan +atan2 (~0.123E~2, ~0.11754944E~37) = ~1.570796251 +pow (~0.123E~2, ~0.11754944E~37) = nan +atan2 (~0.123E~2, ~0.5877472E~38) = ~1.570796251 +pow (~0.123E~2, ~0.5877472E~38) = nan +atan2 (~0.123E~2, ~0.1E~44) = ~1.570796251 +pow (~0.123E~2, ~0.1E~44) = nan +atan2 (~0.123E~2, ~0.0) = ~1.570796371 +pow (~0.123E~2, ~0.0) = 1 +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.123E~2, ~inf) = ~3.141592741 +pow (~0.123E~2, ~inf) = inf +atan2 (~0.123E~2, nan) = nan +pow (~0.123E~2, nan) = nan +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.11754944E~37, 0.34028235E39) = 0 +pow (~0.11754944E~37, 0.34028235E39) = 0 +atan2 (~0.11754944E~37, 0.17014117E39) = 0 +pow (~0.11754944E~37, 0.17014117E39) = 0 +atan2 (~0.11754944E~37, 0.123E4) = ~9.556855527E~42 +pow (~0.11754944E~37, 0.123E4) = 0 +atan2 (~0.11754944E~37, 0.123E2) = ~9.55686954E~40 +pow (~0.11754944E~37, 0.123E2) = nan +atan2 (~0.11754944E~37, 0.31415927E1) = ~3.74171493E~39 +pow (~0.11754944E~37, 0.31415927E1) = nan +atan2 (~0.11754944E~37, 0.27182817E1) = ~4.324402857E~39 +pow (~0.11754944E~37, 0.27182817E1) = nan +atan2 (~0.11754944E~37, 0.123E1) = ~9.556863934E~39 +pow (~0.11754944E~37, 0.123E1) = nan +atan2 (~0.11754944E~37, 0.123) = ~9.556864495E~38 +pow (~0.11754944E~37, 0.123) = nan +atan2 (~0.11754944E~37, 0.123E~2) = ~9.556864495E~36 +pow (~0.11754944E~37, 0.123E~2) = nan +atan2 (~0.11754944E~37, 0.11754944E~37) = ~0.7853981853 +pow (~0.11754944E~37, 0.11754944E~37) = nan +atan2 (~0.11754944E~37, 0.5877472E~38) = ~1.107148767 +pow (~0.11754944E~37, 0.5877472E~38) = nan +atan2 (~0.11754944E~37, 0.1E~44) = ~1.570796251 +pow (~0.11754944E~37, 0.1E~44) = nan +atan2 (~0.11754944E~37, 0.0) = ~1.570796371 +pow (~0.11754944E~37, 0.0) = 1 +atan2 (~0.11754944E~37, ~0.34028235E39) = ~3.141592741 +pow (~0.11754944E~37, ~0.34028235E39) = inf +atan2 (~0.11754944E~37, ~0.17014117E39) = ~3.141592741 +pow (~0.11754944E~37, ~0.17014117E39) = inf +atan2 (~0.11754944E~37, ~0.123E4) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E4) = inf +atan2 (~0.11754944E~37, ~0.123E2) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E2) = nan +atan2 (~0.11754944E~37, ~0.31415927E1) = ~3.141592741 +pow (~0.11754944E~37, ~0.31415927E1) = nan +atan2 (~0.11754944E~37, ~0.27182817E1) = ~3.141592741 +pow (~0.11754944E~37, ~0.27182817E1) = nan +atan2 (~0.11754944E~37, ~0.123E1) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E1) = nan +atan2 (~0.11754944E~37, ~0.123) = ~3.141592741 +pow (~0.11754944E~37, ~0.123) = nan +atan2 (~0.11754944E~37, ~0.123E~2) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E~2) = nan +atan2 (~0.11754944E~37, ~0.11754944E~37) = ~2.356194496 +pow (~0.11754944E~37, ~0.11754944E~37) = nan +atan2 (~0.11754944E~37, ~0.5877472E~38) = ~2.034443855 +pow (~0.11754944E~37, ~0.5877472E~38) = nan +atan2 (~0.11754944E~37, ~0.1E~44) = ~1.570796371 +pow (~0.11754944E~37, ~0.1E~44) = nan +atan2 (~0.11754944E~37, ~0.0) = ~1.570796371 +pow (~0.11754944E~37, ~0.0) = 1 +atan2 (~0.11754944E~37, inf) = 0 +pow (~0.11754944E~37, inf) = 0 +atan2 (~0.11754944E~37, ~inf) = ~3.141592741 +pow (~0.11754944E~37, ~inf) = inf +atan2 (~0.11754944E~37, nan) = nan +pow (~0.11754944E~37, nan) = nan +atan2 (~0.11754944E~37, inf) = 0 +pow (~0.11754944E~37, inf) = 0 +atan2 (~0.5877472E~38, 0.34028235E39) = 0 +pow (~0.5877472E~38, 0.34028235E39) = 0 +atan2 (~0.5877472E~38, 0.17014117E39) = 0 +pow (~0.5877472E~38, 0.17014117E39) = 0 +atan2 (~0.5877472E~38, 0.123E4) = ~4.778427763E~42 +pow (~0.5877472E~38, 0.123E4) = 0 +atan2 (~0.5877472E~38, 0.123E2) = ~4.778427763E~40 +pow (~0.5877472E~38, 0.123E2) = nan +atan2 (~0.5877472E~38, 0.31415927E1) = ~1.870856764E~39 +pow (~0.5877472E~38, 0.31415927E1) = nan +atan2 (~0.5877472E~38, 0.27182817E1) = ~2.162200728E~39 +pow (~0.5877472E~38, 0.27182817E1) = nan +atan2 (~0.5877472E~38, 0.123E1) = ~4.778431967E~39 +pow (~0.5877472E~38, 0.123E1) = nan +atan2 (~0.5877472E~38, 0.123) = ~4.778432248E~38 +pow (~0.5877472E~38, 0.123) = nan +atan2 (~0.5877472E~38, 0.123E~2) = ~4.778432248E~36 +pow (~0.5877472E~38, 0.123E~2) = nan +atan2 (~0.5877472E~38, 0.11754944E~37) = ~0.463647604 +pow (~0.5877472E~38, 0.11754944E~37) = nan +atan2 (~0.5877472E~38, 0.5877472E~38) = ~0.7853981853 +pow (~0.5877472E~38, 0.5877472E~38) = nan +atan2 (~0.5877472E~38, 0.1E~44) = ~1.570796132 +pow (~0.5877472E~38, 0.1E~44) = nan +atan2 (~0.5877472E~38, 0.0) = ~1.570796371 +pow (~0.5877472E~38, 0.0) = 1 +atan2 (~0.5877472E~38, ~0.34028235E39) = ~3.141592741 +pow (~0.5877472E~38, ~0.34028235E39) = inf +atan2 (~0.5877472E~38, ~0.17014117E39) = ~3.141592741 +pow (~0.5877472E~38, ~0.17014117E39) = inf +atan2 (~0.5877472E~38, ~0.123E4) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E4) = inf +atan2 (~0.5877472E~38, ~0.123E2) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E2) = nan +atan2 (~0.5877472E~38, ~0.31415927E1) = ~3.141592741 +pow (~0.5877472E~38, ~0.31415927E1) = nan +atan2 (~0.5877472E~38, ~0.27182817E1) = ~3.141592741 +pow (~0.5877472E~38, ~0.27182817E1) = nan +atan2 (~0.5877472E~38, ~0.123E1) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E1) = nan +atan2 (~0.5877472E~38, ~0.123) = ~3.141592741 +pow (~0.5877472E~38, ~0.123) = nan +atan2 (~0.5877472E~38, ~0.123E~2) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E~2) = nan +atan2 (~0.5877472E~38, ~0.11754944E~37) = ~2.677945137 +pow (~0.5877472E~38, ~0.11754944E~37) = nan +atan2 (~0.5877472E~38, ~0.5877472E~38) = ~2.356194496 +pow (~0.5877472E~38, ~0.5877472E~38) = nan +atan2 (~0.5877472E~38, ~0.1E~44) = ~1.57079649 +pow (~0.5877472E~38, ~0.1E~44) = nan +atan2 (~0.5877472E~38, ~0.0) = ~1.570796371 +pow (~0.5877472E~38, ~0.0) = 1 +atan2 (~0.5877472E~38, inf) = 0 +pow (~0.5877472E~38, inf) = 0 +atan2 (~0.5877472E~38, ~inf) = ~3.141592741 +pow (~0.5877472E~38, ~inf) = inf +atan2 (~0.5877472E~38, nan) = nan +pow (~0.5877472E~38, nan) = nan +atan2 (~0.5877472E~38, inf) = 0 +pow (~0.5877472E~38, inf) = 0 +atan2 (~0.1E~44, 0.34028235E39) = 0 +pow (~0.1E~44, 0.34028235E39) = 0 +atan2 (~0.1E~44, 0.17014117E39) = 0 +pow (~0.1E~44, 0.17014117E39) = 0 +atan2 (~0.1E~44, 0.123E4) = 0 +pow (~0.1E~44, 0.123E4) = 0 +atan2 (~0.1E~44, 0.123E2) = 0 +pow (~0.1E~44, 0.123E2) = nan +atan2 (~0.1E~44, 0.31415927E1) = 0 +pow (~0.1E~44, 0.31415927E1) = nan +atan2 (~0.1E~44, 0.27182817E1) = 0 +pow (~0.1E~44, 0.27182817E1) = nan +atan2 (~0.1E~44, 0.123E1) = ~1.401298464E~45 +pow (~0.1E~44, 0.123E1) = nan +atan2 (~0.1E~44, 0.123) = ~1.121038771E~44 +pow (~0.1E~44, 0.123) = nan +atan2 (~0.1E~44, 0.123E~2) = ~1.139255651E~42 +pow (~0.1E~44, 0.123E~2) = nan +atan2 (~0.1E~44, 0.11754944E~37) = ~1.192092896E~7 +pow (~0.1E~44, 0.11754944E~37) = nan +atan2 (~0.1E~44, 0.5877472E~38) = ~2.384185791E~7 +pow (~0.1E~44, 0.5877472E~38) = nan +atan2 (~0.1E~44, 0.1E~44) = ~0.7853981853 +pow (~0.1E~44, 0.1E~44) = nan +atan2 (~0.1E~44, 0.0) = ~1.570796371 +pow (~0.1E~44, 0.0) = 1 +atan2 (~0.1E~44, ~0.34028235E39) = ~3.141592741 +pow (~0.1E~44, ~0.34028235E39) = inf +atan2 (~0.1E~44, ~0.17014117E39) = ~3.141592741 +pow (~0.1E~44, ~0.17014117E39) = inf +atan2 (~0.1E~44, ~0.123E4) = ~3.141592741 +pow (~0.1E~44, ~0.123E4) = inf +atan2 (~0.1E~44, ~0.123E2) = ~3.141592741 +pow (~0.1E~44, ~0.123E2) = nan +atan2 (~0.1E~44, ~0.31415927E1) = ~3.141592741 +pow (~0.1E~44, ~0.31415927E1) = nan +atan2 (~0.1E~44, ~0.27182817E1) = ~3.141592741 +pow (~0.1E~44, ~0.27182817E1) = nan +atan2 (~0.1E~44, ~0.123E1) = ~3.141592741 +pow (~0.1E~44, ~0.123E1) = nan +atan2 (~0.1E~44, ~0.123) = ~3.141592741 +pow (~0.1E~44, ~0.123) = nan +atan2 (~0.1E~44, ~0.123E~2) = ~3.141592741 +pow (~0.1E~44, ~0.123E~2) = nan +atan2 (~0.1E~44, ~0.11754944E~37) = ~3.141592503 +pow (~0.1E~44, ~0.11754944E~37) = nan +atan2 (~0.1E~44, ~0.5877472E~38) = ~3.141592503 +pow (~0.1E~44, ~0.5877472E~38) = nan +atan2 (~0.1E~44, ~0.1E~44) = ~2.356194496 +pow (~0.1E~44, ~0.1E~44) = nan +atan2 (~0.1E~44, ~0.0) = ~1.570796371 +pow (~0.1E~44, ~0.0) = 1 +atan2 (~0.1E~44, inf) = 0 +pow (~0.1E~44, inf) = 0 +atan2 (~0.1E~44, ~inf) = ~3.141592741 +pow (~0.1E~44, ~inf) = inf +atan2 (~0.1E~44, nan) = nan +pow (~0.1E~44, nan) = nan +atan2 (~0.1E~44, inf) = 0 +pow (~0.1E~44, inf) = 0 +atan2 (~0.0, 0.34028235E39) = 0 +pow (~0.0, 0.34028235E39) = 0 +atan2 (~0.0, 0.17014117E39) = 0 +pow (~0.0, 0.17014117E39) = 0 +atan2 (~0.0, 0.123E4) = 0 +pow (~0.0, 0.123E4) = 0 +atan2 (~0.0, 0.123E2) = 0 +pow (~0.0, 0.123E2) = 0 +atan2 (~0.0, 0.31415927E1) = 0 +pow (~0.0, 0.31415927E1) = 0 +atan2 (~0.0, 0.27182817E1) = 0 +pow (~0.0, 0.27182817E1) = 0 +atan2 (~0.0, 0.123E1) = 0 +pow (~0.0, 0.123E1) = 0 +atan2 (~0.0, 0.123) = 0 +pow (~0.0, 0.123) = 0 +atan2 (~0.0, 0.123E~2) = 0 +pow (~0.0, 0.123E~2) = 0 +atan2 (~0.0, 0.11754944E~37) = 0 +pow (~0.0, 0.11754944E~37) = 0 +atan2 (~0.0, 0.5877472E~38) = 0 +pow (~0.0, 0.5877472E~38) = 0 +atan2 (~0.0, 0.1E~44) = 0 +pow (~0.0, 0.1E~44) = 0 +atan2 (~0.0, 0.0) = 0 +pow (~0.0, 0.0) = 1 +atan2 (~0.0, ~0.34028235E39) = ~3.141592741 +pow (~0.0, ~0.34028235E39) = inf +atan2 (~0.0, ~0.17014117E39) = ~3.141592741 +pow (~0.0, ~0.17014117E39) = inf +atan2 (~0.0, ~0.123E4) = ~3.141592741 +pow (~0.0, ~0.123E4) = inf +atan2 (~0.0, ~0.123E2) = ~3.141592741 +pow (~0.0, ~0.123E2) = inf +atan2 (~0.0, ~0.31415927E1) = ~3.141592741 +pow (~0.0, ~0.31415927E1) = inf +atan2 (~0.0, ~0.27182817E1) = ~3.141592741 +pow (~0.0, ~0.27182817E1) = inf +atan2 (~0.0, ~0.123E1) = ~3.141592741 +pow (~0.0, ~0.123E1) = inf +atan2 (~0.0, ~0.123) = ~3.141592741 +pow (~0.0, ~0.123) = inf +atan2 (~0.0, ~0.123E~2) = ~3.141592741 +pow (~0.0, ~0.123E~2) = inf +atan2 (~0.0, ~0.11754944E~37) = ~3.141592741 +pow (~0.0, ~0.11754944E~37) = inf +atan2 (~0.0, ~0.5877472E~38) = ~3.141592741 +pow (~0.0, ~0.5877472E~38) = inf +atan2 (~0.0, ~0.1E~44) = ~3.141592741 +pow (~0.0, ~0.1E~44) = inf +atan2 (~0.0, ~0.0) = ~3.141592741 +pow (~0.0, ~0.0) = 1 +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (~0.0, ~inf) = ~3.141592741 +pow (~0.0, ~inf) = inf +atan2 (~0.0, nan) = nan +pow (~0.0, nan) = nan +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (inf, 0.34028235E39) = 1.570796371 +pow (inf, 0.34028235E39) = inf +atan2 (inf, 0.17014117E39) = 1.570796371 +pow (inf, 0.17014117E39) = inf +atan2 (inf, 0.123E4) = 1.570796371 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796371 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.31415927E1) = 1.570796371 +pow (inf, 0.31415927E1) = inf +atan2 (inf, 0.27182817E1) = 1.570796371 +pow (inf, 0.27182817E1) = inf +atan2 (inf, 0.123E1) = 1.570796371 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796371 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796371 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.11754944E~37) = 1.570796371 +pow (inf, 0.11754944E~37) = inf +atan2 (inf, 0.5877472E~38) = 1.570796371 +pow (inf, 0.5877472E~38) = inf +atan2 (inf, 0.1E~44) = 1.570796371 +pow (inf, 0.1E~44) = inf +atan2 (inf, 0.0) = 1.570796371 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.34028235E39) = 1.570796371 +pow (inf, ~0.34028235E39) = 0 +atan2 (inf, ~0.17014117E39) = 1.570796371 +pow (inf, ~0.17014117E39) = 0 +atan2 (inf, ~0.123E4) = 1.570796371 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796371 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.31415927E1) = 1.570796371 +pow (inf, ~0.31415927E1) = 0 +atan2 (inf, ~0.27182817E1) = 1.570796371 +pow (inf, ~0.27182817E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796371 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796371 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796371 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.11754944E~37) = 1.570796371 +pow (inf, ~0.11754944E~37) = 0 +atan2 (inf, ~0.5877472E~38) = 1.570796371 +pow (inf, ~0.5877472E~38) = 0 +atan2 (inf, ~0.1E~44) = 1.570796371 +pow (inf, ~0.1E~44) = 0 +atan2 (inf, ~0.0) = 1.570796371 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.356194496 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (~inf, 0.34028235E39) = ~1.570796371 +pow (~inf, 0.34028235E39) = inf +atan2 (~inf, 0.17014117E39) = ~1.570796371 +pow (~inf, 0.17014117E39) = inf +atan2 (~inf, 0.123E4) = ~1.570796371 +pow (~inf, 0.123E4) = inf +atan2 (~inf, 0.123E2) = ~1.570796371 +pow (~inf, 0.123E2) = inf +atan2 (~inf, 0.31415927E1) = ~1.570796371 +pow (~inf, 0.31415927E1) = inf +atan2 (~inf, 0.27182817E1) = ~1.570796371 +pow (~inf, 0.27182817E1) = inf +atan2 (~inf, 0.123E1) = ~1.570796371 +pow (~inf, 0.123E1) = inf +atan2 (~inf, 0.123) = ~1.570796371 +pow (~inf, 0.123) = inf +atan2 (~inf, 0.123E~2) = ~1.570796371 +pow (~inf, 0.123E~2) = inf +atan2 (~inf, 0.11754944E~37) = ~1.570796371 +pow (~inf, 0.11754944E~37) = inf +atan2 (~inf, 0.5877472E~38) = ~1.570796371 +pow (~inf, 0.5877472E~38) = inf +atan2 (~inf, 0.1E~44) = ~1.570796371 +pow (~inf, 0.1E~44) = inf +atan2 (~inf, 0.0) = ~1.570796371 +pow (~inf, 0.0) = 1 +atan2 (~inf, ~0.34028235E39) = ~1.570796371 +pow (~inf, ~0.34028235E39) = 0 +atan2 (~inf, ~0.17014117E39) = ~1.570796371 +pow (~inf, ~0.17014117E39) = 0 +atan2 (~inf, ~0.123E4) = ~1.570796371 +pow (~inf, ~0.123E4) = 0 +atan2 (~inf, ~0.123E2) = ~1.570796371 +pow (~inf, ~0.123E2) = 0 +atan2 (~inf, ~0.31415927E1) = ~1.570796371 +pow (~inf, ~0.31415927E1) = 0 +atan2 (~inf, ~0.27182817E1) = ~1.570796371 +pow (~inf, ~0.27182817E1) = 0 +atan2 (~inf, ~0.123E1) = ~1.570796371 +pow (~inf, ~0.123E1) = 0 +atan2 (~inf, ~0.123) = ~1.570796371 +pow (~inf, ~0.123) = 0 +atan2 (~inf, ~0.123E~2) = ~1.570796371 +pow (~inf, ~0.123E~2) = 0 +atan2 (~inf, ~0.11754944E~37) = ~1.570796371 +pow (~inf, ~0.11754944E~37) = 0 +atan2 (~inf, ~0.5877472E~38) = ~1.570796371 +pow (~inf, ~0.5877472E~38) = 0 +atan2 (~inf, ~0.1E~44) = ~1.570796371 +pow (~inf, ~0.1E~44) = 0 +atan2 (~inf, ~0.0) = ~1.570796371 +pow (~inf, ~0.0) = 1 +atan2 (~inf, inf) = ~0.7853981853 +pow (~inf, inf) = inf +atan2 (~inf, ~inf) = ~2.356194496 +pow (~inf, ~inf) = 0 +atan2 (~inf, nan) = nan +pow (~inf, nan) = nan +atan2 (~inf, inf) = ~0.7853981853 +pow (~inf, inf) = inf +atan2 (nan, 0.34028235E39) = nan +pow (nan, 0.34028235E39) = nan +atan2 (nan, 0.17014117E39) = nan +pow (nan, 0.17014117E39) = nan +atan2 (nan, 0.123E4) = nan +pow (nan, 0.123E4) = nan +atan2 (nan, 0.123E2) = nan +pow (nan, 0.123E2) = nan +atan2 (nan, 0.31415927E1) = nan +pow (nan, 0.31415927E1) = nan +atan2 (nan, 0.27182817E1) = nan +pow (nan, 0.27182817E1) = nan +atan2 (nan, 0.123E1) = nan +pow (nan, 0.123E1) = nan +atan2 (nan, 0.123) = nan +pow (nan, 0.123) = nan +atan2 (nan, 0.123E~2) = nan +pow (nan, 0.123E~2) = nan +atan2 (nan, 0.11754944E~37) = nan +pow (nan, 0.11754944E~37) = nan +atan2 (nan, 0.5877472E~38) = nan +pow (nan, 0.5877472E~38) = nan +atan2 (nan, 0.1E~44) = nan +pow (nan, 0.1E~44) = nan +atan2 (nan, 0.0) = nan +pow (nan, 0.0) = 1 +atan2 (nan, ~0.34028235E39) = nan +pow (nan, ~0.34028235E39) = nan +atan2 (nan, ~0.17014117E39) = nan +pow (nan, ~0.17014117E39) = nan +atan2 (nan, ~0.123E4) = nan +pow (nan, ~0.123E4) = nan +atan2 (nan, ~0.123E2) = nan +pow (nan, ~0.123E2) = nan +atan2 (nan, ~0.31415927E1) = nan +pow (nan, ~0.31415927E1) = nan +atan2 (nan, ~0.27182817E1) = nan +pow (nan, ~0.27182817E1) = nan +atan2 (nan, ~0.123E1) = nan +pow (nan, ~0.123E1) = nan +atan2 (nan, ~0.123) = nan +pow (nan, ~0.123) = nan +atan2 (nan, ~0.123E~2) = nan +pow (nan, ~0.123E~2) = nan +atan2 (nan, ~0.11754944E~37) = nan +pow (nan, ~0.11754944E~37) = nan +atan2 (nan, ~0.5877472E~38) = nan +pow (nan, ~0.5877472E~38) = nan +atan2 (nan, ~0.1E~44) = nan +pow (nan, ~0.1E~44) = nan +atan2 (nan, ~0.0) = nan +pow (nan, ~0.0) = 1 +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (nan, ~inf) = nan +pow (nan, ~inf) = nan +atan2 (nan, nan) = nan +pow (nan, nan) = nan +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (inf, 0.34028235E39) = 1.570796371 +pow (inf, 0.34028235E39) = inf +atan2 (inf, 0.17014117E39) = 1.570796371 +pow (inf, 0.17014117E39) = inf +atan2 (inf, 0.123E4) = 1.570796371 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796371 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.31415927E1) = 1.570796371 +pow (inf, 0.31415927E1) = inf +atan2 (inf, 0.27182817E1) = 1.570796371 +pow (inf, 0.27182817E1) = inf +atan2 (inf, 0.123E1) = 1.570796371 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796371 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796371 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.11754944E~37) = 1.570796371 +pow (inf, 0.11754944E~37) = inf +atan2 (inf, 0.5877472E~38) = 1.570796371 +pow (inf, 0.5877472E~38) = inf +atan2 (inf, 0.1E~44) = 1.570796371 +pow (inf, 0.1E~44) = inf +atan2 (inf, 0.0) = 1.570796371 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.34028235E39) = 1.570796371 +pow (inf, ~0.34028235E39) = 0 +atan2 (inf, ~0.17014117E39) = 1.570796371 +pow (inf, ~0.17014117E39) = 0 +atan2 (inf, ~0.123E4) = 1.570796371 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796371 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.31415927E1) = 1.570796371 +pow (inf, ~0.31415927E1) = 0 +atan2 (inf, ~0.27182817E1) = 1.570796371 +pow (inf, ~0.27182817E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796371 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796371 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796371 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.11754944E~37) = 1.570796371 +pow (inf, ~0.11754944E~37) = 0 +atan2 (inf, ~0.5877472E~38) = 1.570796371 +pow (inf, ~0.5877472E~38) = 0 +atan2 (inf, ~0.1E~44) = 1.570796371 +pow (inf, ~0.1E~44) = 0 +atan2 (inf, ~0.0) = 1.570796371 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.356194496 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf + +Testing *+, *- +SOME *+ AND STANDARD RESULTS DIFFER +(r1, r2, r3): *+(r1, r2, r3) (r1 * r2 + r3) +-------------------------------------------- +(0.34028235E39, 0.123E1, ~0.34028235E39): 0.78264946E38 inf +(0.34028235E39, 0.123E1, ~0.17014117E39): 0.24840611E39 inf +(0.34028235E39, 0.123, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(0.34028235E39, ~0.123E1, 0.34028235E39): ~0.78264946E38 ~inf +(0.34028235E39, ~0.123E1, 0.17014117E39): ~0.24840611E39 ~inf +(0.34028235E39, ~0.123, 0.34028235E39): 0.2984276E39 0.29842763E39 +(0.17014117E39, 0.31415927E1, ~0.34028235E39): 0.19423192E39 inf +(0.17014117E39, 0.27182817E1, ~0.34028235E39): 0.1222093E39 inf +(0.17014117E39, 0.27182817E1, ~0.17014117E39): 0.29235047E39 inf +(0.17014117E39, 0.123E1, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(0.17014117E39, 0.123E1, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(0.17014117E39, 0.123, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(0.17014117E39, ~0.31415927E1, 0.34028235E39): ~0.19423192E39 ~inf +(0.17014117E39, ~0.27182817E1, 0.34028235E39): ~0.1222093E39 ~inf +(0.17014117E39, ~0.27182817E1, 0.17014117E39): ~0.29235047E39 ~inf +(0.17014117E39, ~0.123E1, 0.34028235E39): 0.1310087E39 0.13100871E39 +(0.17014117E39, ~0.123E1, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(0.17014117E39, ~0.123, 0.17014117E39): 0.1492138E39 0.14921381E39 +(0.123E4, 0.123E2, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(0.123E4, 0.123E2, ~0.123E1): 0.151277705E5 0.1512777E5 +(0.123E4, 0.31415927E1, 0.123E2): 0.3876459E4 0.38764592E4 +(0.123E4, 0.31415927E1, 0.123): 0.3864282E4 0.38642822E4 +(0.123E4, 0.31415927E1, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(0.123E4, 0.31415927E1, ~0.123E1): 0.3862929E4 0.38629292E4 +(0.123E4, 0.123, 0.123E~2): 0.15129123E3 0.15129124E3 +(0.123E4, 0.123, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(0.123E4, 0.123, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(0.123E4, 0.123, ~0.123E1): 0.15006E3 0.15006001E3 +(0.123E4, 0.123E~2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123E4, 0.123E~2, 0.123): 0.16359E1 0.16359001E1 +(0.123E4, 0.123E~2, ~0.123E1): 0.28290004 0.2829001 +(0.123E4, ~0.123E2, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(0.123E4, ~0.123E2, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(0.123E4, ~0.31415927E1, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(0.123E4, ~0.31415927E1, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(0.123E4, ~0.31415927E1, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(0.123E4, ~0.31415927E1, ~0.123): ~0.3864282E4 ~0.38642822E4 +(0.123E4, ~0.123, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(0.123E4, ~0.123, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(0.123E4, ~0.123, 0.123E1): ~0.15006E3 ~0.15006001E3 +(0.123E4, ~0.123, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(0.123E4, ~0.123E~2, 0.123E1): ~0.28290004 ~0.2829001 +(0.123E4, ~0.123E~2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123E4, ~0.123E~2, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123E2, 0.123E4, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(0.123E2, 0.123E4, ~0.123E1): 0.151277705E5 0.1512777E5 +(0.123E2, 0.123E2, 0.123E~2): 0.15129123E3 0.15129124E3 +(0.123E2, 0.123E2, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(0.123E2, 0.123E2, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(0.123E2, 0.123E2, ~0.123E1): 0.15006E3 0.15006001E3 +(0.123E2, 0.31415927E1, 0.123E2): 0.50941593E2 0.5094159E2 +(0.123E2, 0.31415927E1, 0.27182817E1): 0.41359875E2 0.4135987E2 +(0.123E2, 0.31415927E1, 0.123E~2): 0.38642822E2 0.3864282E2 +(0.123E2, 0.31415927E1, ~0.31415927E1): 0.355E2 0.35499996E2 +(0.123E2, 0.31415927E1, ~0.123): 0.38518593E2 0.3851859E2 +(0.123E2, 0.27182817E1, 0.31415927E1): 0.36576458E2 0.3657646E2 +(0.123E2, 0.27182817E1, 0.123): 0.33557865E2 0.3355787E2 +(0.123E2, 0.27182817E1, ~0.123E2): 0.21134867E2 0.21134869E2 +(0.123E2, 0.27182817E1, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(0.123E2, 0.27182817E1, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(0.123E2, 0.27182817E1, ~0.123E1): 0.32204865E2 0.3220487E2 +(0.123E2, 0.27182817E1, ~0.123E~2): 0.33433636E2 0.3343364E2 +(0.123E2, 0.123E1, ~0.123E2): 0.28290002E1 0.28290005E1 +(0.123E2, 0.123, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123E2, 0.123, 0.123): 0.16359E1 0.16359001E1 +(0.123E2, 0.123, ~0.123E1): 0.28290004 0.2829001 +(0.123E2, 0.123E~2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(0.123E2, ~0.123E4, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(0.123E2, ~0.123E4, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(0.123E2, ~0.123E2, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(0.123E2, ~0.123E2, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(0.123E2, ~0.123E2, 0.123E1): ~0.15006E3 ~0.15006001E3 +(0.123E2, ~0.123E2, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(0.123E2, ~0.31415927E1, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(0.123E2, ~0.31415927E1, 0.123): ~0.38518593E2 ~0.3851859E2 +(0.123E2, ~0.31415927E1, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(0.123E2, ~0.31415927E1, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(0.123E2, ~0.31415927E1, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(0.123E2, ~0.27182817E1, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(0.123E2, ~0.27182817E1, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(0.123E2, ~0.27182817E1, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(0.123E2, ~0.27182817E1, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(0.123E2, ~0.27182817E1, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(0.123E2, ~0.27182817E1, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(0.123E2, ~0.27182817E1, ~0.123): ~0.33557865E2 ~0.3355787E2 +(0.123E2, ~0.123E1, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(0.123E2, ~0.123, 0.123E1): ~0.28290004 ~0.2829001 +(0.123E2, ~0.123, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123E2, ~0.123, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123E2, ~0.123E~2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(0.31415927E1, 0.17014117E39, ~0.34028235E39): 0.19423192E39 inf +(0.31415927E1, 0.123E4, 0.123E2): 0.3876459E4 0.38764592E4 +(0.31415927E1, 0.123E4, 0.123): 0.3864282E4 0.38642822E4 +(0.31415927E1, 0.123E4, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(0.31415927E1, 0.123E4, ~0.123E1): 0.3862929E4 0.38629292E4 +(0.31415927E1, 0.123E2, 0.123E2): 0.50941593E2 0.5094159E2 +(0.31415927E1, 0.123E2, 0.27182817E1): 0.41359875E2 0.4135987E2 +(0.31415927E1, 0.123E2, 0.123E~2): 0.38642822E2 0.3864282E2 +(0.31415927E1, 0.123E2, ~0.31415927E1): 0.355E2 0.35499996E2 +(0.31415927E1, 0.123E2, ~0.123): 0.38518593E2 0.3851859E2 +(0.31415927E1, 0.31415927E1, 0.123E1): 0.11099605E2 0.11099606E2 +(0.31415927E1, 0.27182817E1, 0.123E2): 0.20839735E2 0.20839733E2 +(0.31415927E1, 0.27182817E1, 0.123E1): 0.9769734E1 0.9769733E1 +(0.31415927E1, 0.27182817E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(0.31415927E1, 0.27182817E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(0.31415927E1, 0.27182817E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(0.31415927E1, 0.27182817E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(0.31415927E1, 0.27182817E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(0.31415927E1, 0.123E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(0.31415927E1, 0.123E1, 0.123): 0.39871593E1 0.3987159E1 +(0.31415927E1, 0.123, ~0.123E1): ~0.8435841 ~0.84358406 +(0.31415927E1, 0.123, ~0.123): 0.2634159 0.26341593 +(0.31415927E1, ~0.17014117E39, 0.34028235E39): ~0.19423192E39 ~inf +(0.31415927E1, ~0.123E4, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(0.31415927E1, ~0.123E4, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(0.31415927E1, ~0.123E4, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(0.31415927E1, ~0.123E4, ~0.123): ~0.3864282E4 ~0.38642822E4 +(0.31415927E1, ~0.123E2, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(0.31415927E1, ~0.123E2, 0.123): ~0.38518593E2 ~0.3851859E2 +(0.31415927E1, ~0.123E2, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(0.31415927E1, ~0.123E2, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(0.31415927E1, ~0.123E2, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(0.31415927E1, ~0.31415927E1, ~0.123E1): ~0.11099605E2 ~0.11099606E2 +(0.31415927E1, ~0.27182817E1, 0.123E2): 0.3760266E1 0.37602663E1 +(0.31415927E1, ~0.27182817E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(0.31415927E1, ~0.27182817E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(0.31415927E1, ~0.27182817E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(0.31415927E1, ~0.27182817E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(0.31415927E1, ~0.27182817E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(0.31415927E1, ~0.27182817E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(0.31415927E1, ~0.123E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(0.31415927E1, ~0.123E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(0.31415927E1, ~0.123, 0.123E1): 0.8435841 0.84358406 +(0.31415927E1, ~0.123, 0.123): ~0.2634159 ~0.26341593 +(0.27182817E1, 0.17014117E39, ~0.34028235E39): 0.1222093E39 inf +(0.27182817E1, 0.17014117E39, ~0.17014117E39): 0.29235047E39 inf +(0.27182817E1, 0.123E2, 0.31415927E1): 0.36576458E2 0.3657646E2 +(0.27182817E1, 0.123E2, 0.123): 0.33557865E2 0.3355787E2 +(0.27182817E1, 0.123E2, ~0.123E2): 0.21134867E2 0.21134869E2 +(0.27182817E1, 0.123E2, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(0.27182817E1, 0.123E2, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(0.27182817E1, 0.123E2, ~0.123E1): 0.32204865E2 0.3220487E2 +(0.27182817E1, 0.123E2, ~0.123E~2): 0.33433636E2 0.3343364E2 +(0.27182817E1, 0.31415927E1, 0.123E2): 0.20839735E2 0.20839733E2 +(0.27182817E1, 0.31415927E1, 0.123E1): 0.9769734E1 0.9769733E1 +(0.27182817E1, 0.31415927E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(0.27182817E1, 0.31415927E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(0.27182817E1, 0.31415927E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(0.27182817E1, 0.31415927E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(0.27182817E1, 0.31415927E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(0.27182817E1, 0.27182817E1, 0.27182817E1): 0.10107337E2 0.10107338E2 +(0.27182817E1, 0.27182817E1, ~0.31415927E1): 0.42474627E1 0.4247463E1 +(0.27182817E1, 0.27182817E1, ~0.123E~2): 0.73878255E1 0.7387826E1 +(0.27182817E1, 0.123E1, 0.123E1): 0.4573487E1 0.45734863E1 +(0.27182817E1, 0.123E1, 0.123): 0.34664867E1 0.34664865E1 +(0.27182817E1, 0.123E1, ~0.31415927E1): 0.20189385 0.2018938 +(0.27182817E1, 0.123E1, ~0.27182817E1): 0.62520486 0.6252048 +(0.27182817E1, 0.123, 0.123E~2): 0.33557865 0.33557868 +(0.27182817E1, 0.123, ~0.123): 0.21134867 0.21134868 +(0.27182817E1, ~0.17014117E39, 0.34028235E39): ~0.1222093E39 ~inf +(0.27182817E1, ~0.17014117E39, 0.17014117E39): ~0.29235047E39 ~inf +(0.27182817E1, ~0.123E2, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(0.27182817E1, ~0.123E2, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(0.27182817E1, ~0.123E2, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(0.27182817E1, ~0.123E2, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(0.27182817E1, ~0.123E2, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(0.27182817E1, ~0.123E2, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(0.27182817E1, ~0.123E2, ~0.123): ~0.33557865E2 ~0.3355787E2 +(0.27182817E1, ~0.31415927E1, 0.123E2): 0.3760266E1 0.37602663E1 +(0.27182817E1, ~0.31415927E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(0.27182817E1, ~0.31415927E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(0.27182817E1, ~0.31415927E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(0.27182817E1, ~0.31415927E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(0.27182817E1, ~0.31415927E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(0.27182817E1, ~0.31415927E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(0.27182817E1, ~0.27182817E1, 0.31415927E1): ~0.42474627E1 ~0.4247463E1 +(0.27182817E1, ~0.27182817E1, 0.123E~2): ~0.73878255E1 ~0.7387826E1 +(0.27182817E1, ~0.27182817E1, ~0.27182817E1): ~0.10107337E2 ~0.10107338E2 +(0.27182817E1, ~0.123E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(0.27182817E1, ~0.123E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(0.27182817E1, ~0.123E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(0.27182817E1, ~0.123E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(0.27182817E1, ~0.123, 0.123): ~0.21134867 ~0.21134868 +(0.27182817E1, ~0.123, ~0.123E~2): ~0.33557865 ~0.33557868 +(0.123E1, 0.34028235E39, ~0.34028235E39): 0.78264946E38 inf +(0.123E1, 0.34028235E39, ~0.17014117E39): 0.24840611E39 inf +(0.123E1, 0.17014117E39, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(0.123E1, 0.17014117E39, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(0.123E1, 0.123E2, ~0.123E2): 0.28290002E1 0.28290005E1 +(0.123E1, 0.31415927E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(0.123E1, 0.31415927E1, 0.123): 0.39871593E1 0.3987159E1 +(0.123E1, 0.27182817E1, 0.123E1): 0.4573487E1 0.45734863E1 +(0.123E1, 0.27182817E1, 0.123): 0.34664867E1 0.34664865E1 +(0.123E1, 0.27182817E1, ~0.31415927E1): 0.20189385 0.2018938 +(0.123E1, 0.27182817E1, ~0.27182817E1): 0.62520486 0.6252048 +(0.123E1, 0.123E1, 0.123E1): 0.27429001E1 0.27429E1 +(0.123E1, 0.123E1, ~0.123E1): 0.28290004 0.28289998 +(0.123E1, 0.123E1, ~0.123): 0.13899001E1 0.13899E1 +(0.123E1, 0.123, 0.123E1): 0.13812901E1 0.138129E1 +(0.123E1, 0.123, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(0.123E1, 0.123, ~0.123): 0.28290004E~1 0.28289996E~1 +(0.123E1, 0.123, ~0.123E~2): 0.15006001 0.15006 +(0.123E1, 0.123E~2, ~0.123E~2): 0.28290003E~3 0.28290006E~3 +(0.123E1, ~0.34028235E39, 0.34028235E39): ~0.78264946E38 ~inf +(0.123E1, ~0.34028235E39, 0.17014117E39): ~0.24840611E39 ~inf +(0.123E1, ~0.17014117E39, 0.34028235E39): 0.1310087E39 0.13100871E39 +(0.123E1, ~0.17014117E39, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(0.123E1, ~0.123E2, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(0.123E1, ~0.31415927E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(0.123E1, ~0.31415927E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(0.123E1, ~0.27182817E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(0.123E1, ~0.27182817E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(0.123E1, ~0.27182817E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(0.123E1, ~0.27182817E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(0.123E1, ~0.123E1, 0.123E1): ~0.28290004 ~0.28289998 +(0.123E1, ~0.123E1, 0.123): ~0.13899001E1 ~0.13899E1 +(0.123E1, ~0.123E1, ~0.123E1): ~0.27429001E1 ~0.27429E1 +(0.123E1, ~0.123, 0.123E1): 0.107871E1 0.10787101E1 +(0.123E1, ~0.123, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(0.123E1, ~0.123, 0.123E~2): ~0.15006001 ~0.15006 +(0.123E1, ~0.123, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(0.123E1, ~0.123E~2, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(0.123, 0.34028235E39, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(0.123, 0.17014117E39, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(0.123, 0.123E4, 0.123E~2): 0.15129123E3 0.15129124E3 +(0.123, 0.123E4, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(0.123, 0.123E4, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(0.123, 0.123E4, ~0.123E1): 0.15006E3 0.15006001E3 +(0.123, 0.123E2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123, 0.123E2, 0.123): 0.16359E1 0.16359001E1 +(0.123, 0.123E2, ~0.123E1): 0.28290004 0.2829001 +(0.123, 0.31415927E1, ~0.123E1): ~0.8435841 ~0.84358406 +(0.123, 0.31415927E1, ~0.123): 0.2634159 0.26341593 +(0.123, 0.27182817E1, 0.123E~2): 0.33557865 0.33557868 +(0.123, 0.27182817E1, ~0.123): 0.21134867 0.21134868 +(0.123, 0.123E1, 0.123E1): 0.13812901E1 0.138129E1 +(0.123, 0.123E1, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(0.123, 0.123E1, ~0.123): 0.28290004E~1 0.28289996E~1 +(0.123, 0.123E1, ~0.123E~2): 0.15006001 0.15006 +(0.123, ~0.34028235E39, 0.34028235E39): 0.2984276E39 0.29842763E39 +(0.123, ~0.17014117E39, 0.17014117E39): 0.1492138E39 0.14921381E39 +(0.123, ~0.123E4, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(0.123, ~0.123E4, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(0.123, ~0.123E4, 0.123E1): ~0.15006E3 ~0.15006001E3 +(0.123, ~0.123E4, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(0.123, ~0.123E2, 0.123E1): ~0.28290004 ~0.2829001 +(0.123, ~0.123E2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123, ~0.123E2, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123, ~0.31415927E1, 0.123E1): 0.8435841 0.84358406 +(0.123, ~0.31415927E1, 0.123): ~0.2634159 ~0.26341593 +(0.123, ~0.27182817E1, 0.123): ~0.21134867 ~0.21134868 +(0.123, ~0.27182817E1, ~0.123E~2): ~0.33557865 ~0.33557868 +(0.123, ~0.123E1, 0.123E1): 0.107871E1 0.10787101E1 +(0.123, ~0.123E1, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(0.123, ~0.123E1, 0.123E~2): ~0.15006001 ~0.15006 +(0.123, ~0.123E1, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(0.123E~2, 0.123E4, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123E~2, 0.123E4, 0.123): 0.16359E1 0.16359001E1 +(0.123E~2, 0.123E4, ~0.123E1): 0.28290004 0.2829001 +(0.123E~2, 0.123E2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(0.123E~2, 0.123E1, ~0.123E~2): 0.28290003E~3 0.28290006E~3 +(0.123E~2, ~0.123E4, 0.123E1): ~0.28290004 ~0.2829001 +(0.123E~2, ~0.123E4, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123E~2, ~0.123E4, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123E~2, ~0.123E2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(0.123E~2, ~0.123E1, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(~0.34028235E39, 0.123E1, 0.34028235E39): ~0.78264946E38 ~inf +(~0.34028235E39, 0.123E1, 0.17014117E39): ~0.24840611E39 ~inf +(~0.34028235E39, 0.123, 0.34028235E39): 0.2984276E39 0.29842763E39 +(~0.34028235E39, ~0.123E1, ~0.34028235E39): 0.78264946E38 inf +(~0.34028235E39, ~0.123E1, ~0.17014117E39): 0.24840611E39 inf +(~0.34028235E39, ~0.123, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(~0.17014117E39, 0.31415927E1, 0.34028235E39): ~0.19423192E39 ~inf +(~0.17014117E39, 0.27182817E1, 0.34028235E39): ~0.1222093E39 ~inf +(~0.17014117E39, 0.27182817E1, 0.17014117E39): ~0.29235047E39 ~inf +(~0.17014117E39, 0.123E1, 0.34028235E39): 0.1310087E39 0.13100871E39 +(~0.17014117E39, 0.123E1, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(~0.17014117E39, 0.123, 0.17014117E39): 0.1492138E39 0.14921381E39 +(~0.17014117E39, ~0.31415927E1, ~0.34028235E39): 0.19423192E39 inf +(~0.17014117E39, ~0.27182817E1, ~0.34028235E39): 0.1222093E39 inf +(~0.17014117E39, ~0.27182817E1, ~0.17014117E39): 0.29235047E39 inf +(~0.17014117E39, ~0.123E1, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(~0.17014117E39, ~0.123E1, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(~0.17014117E39, ~0.123, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(~0.123E4, 0.123E2, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(~0.123E4, 0.123E2, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(~0.123E4, 0.31415927E1, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(~0.123E4, 0.31415927E1, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(~0.123E4, 0.31415927E1, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(~0.123E4, 0.31415927E1, ~0.123): ~0.3864282E4 ~0.38642822E4 +(~0.123E4, 0.123, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(~0.123E4, 0.123, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(~0.123E4, 0.123, 0.123E1): ~0.15006E3 ~0.15006001E3 +(~0.123E4, 0.123, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(~0.123E4, 0.123E~2, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123E4, 0.123E~2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123E4, 0.123E~2, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123E4, ~0.123E2, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(~0.123E4, ~0.123E2, ~0.123E1): 0.151277705E5 0.1512777E5 +(~0.123E4, ~0.31415927E1, 0.123E2): 0.3876459E4 0.38764592E4 +(~0.123E4, ~0.31415927E1, 0.123): 0.3864282E4 0.38642822E4 +(~0.123E4, ~0.31415927E1, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(~0.123E4, ~0.31415927E1, ~0.123E1): 0.3862929E4 0.38629292E4 +(~0.123E4, ~0.123, 0.123E~2): 0.15129123E3 0.15129124E3 +(~0.123E4, ~0.123, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(~0.123E4, ~0.123, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(~0.123E4, ~0.123, ~0.123E1): 0.15006E3 0.15006001E3 +(~0.123E4, ~0.123E~2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123E4, ~0.123E~2, 0.123): 0.16359E1 0.16359001E1 +(~0.123E4, ~0.123E~2, ~0.123E1): 0.28290004 0.2829001 +(~0.123E2, 0.123E4, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(~0.123E2, 0.123E4, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(~0.123E2, 0.123E2, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(~0.123E2, 0.123E2, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(~0.123E2, 0.123E2, 0.123E1): ~0.15006E3 ~0.15006001E3 +(~0.123E2, 0.123E2, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(~0.123E2, 0.31415927E1, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(~0.123E2, 0.31415927E1, 0.123): ~0.38518593E2 ~0.3851859E2 +(~0.123E2, 0.31415927E1, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(~0.123E2, 0.31415927E1, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(~0.123E2, 0.31415927E1, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(~0.123E2, 0.27182817E1, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(~0.123E2, 0.27182817E1, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(~0.123E2, 0.27182817E1, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(~0.123E2, 0.27182817E1, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(~0.123E2, 0.27182817E1, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(~0.123E2, 0.27182817E1, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(~0.123E2, 0.27182817E1, ~0.123): ~0.33557865E2 ~0.3355787E2 +(~0.123E2, 0.123E1, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(~0.123E2, 0.123, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123E2, 0.123, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123E2, 0.123, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123E2, 0.123E~2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(~0.123E2, ~0.123E4, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(~0.123E2, ~0.123E4, ~0.123E1): 0.151277705E5 0.1512777E5 +(~0.123E2, ~0.123E2, 0.123E~2): 0.15129123E3 0.15129124E3 +(~0.123E2, ~0.123E2, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(~0.123E2, ~0.123E2, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(~0.123E2, ~0.123E2, ~0.123E1): 0.15006E3 0.15006001E3 +(~0.123E2, ~0.31415927E1, 0.123E2): 0.50941593E2 0.5094159E2 +(~0.123E2, ~0.31415927E1, 0.27182817E1): 0.41359875E2 0.4135987E2 +(~0.123E2, ~0.31415927E1, 0.123E~2): 0.38642822E2 0.3864282E2 +(~0.123E2, ~0.31415927E1, ~0.31415927E1): 0.355E2 0.35499996E2 +(~0.123E2, ~0.31415927E1, ~0.123): 0.38518593E2 0.3851859E2 +(~0.123E2, ~0.27182817E1, 0.31415927E1): 0.36576458E2 0.3657646E2 +(~0.123E2, ~0.27182817E1, 0.123): 0.33557865E2 0.3355787E2 +(~0.123E2, ~0.27182817E1, ~0.123E2): 0.21134867E2 0.21134869E2 +(~0.123E2, ~0.27182817E1, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(~0.123E2, ~0.27182817E1, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(~0.123E2, ~0.27182817E1, ~0.123E1): 0.32204865E2 0.3220487E2 +(~0.123E2, ~0.27182817E1, ~0.123E~2): 0.33433636E2 0.3343364E2 +(~0.123E2, ~0.123E1, ~0.123E2): 0.28290002E1 0.28290005E1 +(~0.123E2, ~0.123, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123E2, ~0.123, 0.123): 0.16359E1 0.16359001E1 +(~0.123E2, ~0.123, ~0.123E1): 0.28290004 0.2829001 +(~0.123E2, ~0.123E~2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(~0.31415927E1, 0.17014117E39, 0.34028235E39): ~0.19423192E39 ~inf +(~0.31415927E1, 0.123E4, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(~0.31415927E1, 0.123E4, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(~0.31415927E1, 0.123E4, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(~0.31415927E1, 0.123E4, ~0.123): ~0.3864282E4 ~0.38642822E4 +(~0.31415927E1, 0.123E2, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(~0.31415927E1, 0.123E2, 0.123): ~0.38518593E2 ~0.3851859E2 +(~0.31415927E1, 0.123E2, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(~0.31415927E1, 0.123E2, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(~0.31415927E1, 0.123E2, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(~0.31415927E1, 0.31415927E1, ~0.123E1): ~0.11099605E2 ~0.11099606E2 +(~0.31415927E1, 0.27182817E1, 0.123E2): 0.3760266E1 0.37602663E1 +(~0.31415927E1, 0.27182817E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(~0.31415927E1, 0.27182817E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(~0.31415927E1, 0.27182817E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(~0.31415927E1, 0.27182817E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(~0.31415927E1, 0.27182817E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(~0.31415927E1, 0.27182817E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(~0.31415927E1, 0.123E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(~0.31415927E1, 0.123E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(~0.31415927E1, 0.123, 0.123E1): 0.8435841 0.84358406 +(~0.31415927E1, 0.123, 0.123): ~0.2634159 ~0.26341593 +(~0.31415927E1, ~0.17014117E39, ~0.34028235E39): 0.19423192E39 inf +(~0.31415927E1, ~0.123E4, 0.123E2): 0.3876459E4 0.38764592E4 +(~0.31415927E1, ~0.123E4, 0.123): 0.3864282E4 0.38642822E4 +(~0.31415927E1, ~0.123E4, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(~0.31415927E1, ~0.123E4, ~0.123E1): 0.3862929E4 0.38629292E4 +(~0.31415927E1, ~0.123E2, 0.123E2): 0.50941593E2 0.5094159E2 +(~0.31415927E1, ~0.123E2, 0.27182817E1): 0.41359875E2 0.4135987E2 +(~0.31415927E1, ~0.123E2, 0.123E~2): 0.38642822E2 0.3864282E2 +(~0.31415927E1, ~0.123E2, ~0.31415927E1): 0.355E2 0.35499996E2 +(~0.31415927E1, ~0.123E2, ~0.123): 0.38518593E2 0.3851859E2 +(~0.31415927E1, ~0.31415927E1, 0.123E1): 0.11099605E2 0.11099606E2 +(~0.31415927E1, ~0.27182817E1, 0.123E2): 0.20839735E2 0.20839733E2 +(~0.31415927E1, ~0.27182817E1, 0.123E1): 0.9769734E1 0.9769733E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(~0.31415927E1, ~0.27182817E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(~0.31415927E1, ~0.27182817E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(~0.31415927E1, ~0.123E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(~0.31415927E1, ~0.123E1, 0.123): 0.39871593E1 0.3987159E1 +(~0.31415927E1, ~0.123, ~0.123E1): ~0.8435841 ~0.84358406 +(~0.31415927E1, ~0.123, ~0.123): 0.2634159 0.26341593 +(~0.27182817E1, 0.17014117E39, 0.34028235E39): ~0.1222093E39 ~inf +(~0.27182817E1, 0.17014117E39, 0.17014117E39): ~0.29235047E39 ~inf +(~0.27182817E1, 0.123E2, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(~0.27182817E1, 0.123E2, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(~0.27182817E1, 0.123E2, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(~0.27182817E1, 0.123E2, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(~0.27182817E1, 0.123E2, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(~0.27182817E1, 0.123E2, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(~0.27182817E1, 0.123E2, ~0.123): ~0.33557865E2 ~0.3355787E2 +(~0.27182817E1, 0.31415927E1, 0.123E2): 0.3760266E1 0.37602663E1 +(~0.27182817E1, 0.31415927E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(~0.27182817E1, 0.31415927E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(~0.27182817E1, 0.31415927E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(~0.27182817E1, 0.31415927E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(~0.27182817E1, 0.31415927E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(~0.27182817E1, 0.31415927E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(~0.27182817E1, 0.27182817E1, 0.31415927E1): ~0.42474627E1 ~0.4247463E1 +(~0.27182817E1, 0.27182817E1, 0.123E~2): ~0.73878255E1 ~0.7387826E1 +(~0.27182817E1, 0.27182817E1, ~0.27182817E1): ~0.10107337E2 ~0.10107338E2 +(~0.27182817E1, 0.123E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(~0.27182817E1, 0.123E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(~0.27182817E1, 0.123E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(~0.27182817E1, 0.123E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(~0.27182817E1, 0.123, 0.123): ~0.21134867 ~0.21134868 +(~0.27182817E1, 0.123, ~0.123E~2): ~0.33557865 ~0.33557868 +(~0.27182817E1, ~0.17014117E39, ~0.34028235E39): 0.1222093E39 inf +(~0.27182817E1, ~0.17014117E39, ~0.17014117E39): 0.29235047E39 inf +(~0.27182817E1, ~0.123E2, 0.31415927E1): 0.36576458E2 0.3657646E2 +(~0.27182817E1, ~0.123E2, 0.123): 0.33557865E2 0.3355787E2 +(~0.27182817E1, ~0.123E2, ~0.123E2): 0.21134867E2 0.21134869E2 +(~0.27182817E1, ~0.123E2, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(~0.27182817E1, ~0.123E2, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(~0.27182817E1, ~0.123E2, ~0.123E1): 0.32204865E2 0.3220487E2 +(~0.27182817E1, ~0.123E2, ~0.123E~2): 0.33433636E2 0.3343364E2 +(~0.27182817E1, ~0.31415927E1, 0.123E2): 0.20839735E2 0.20839733E2 +(~0.27182817E1, ~0.31415927E1, 0.123E1): 0.9769734E1 0.9769733E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(~0.27182817E1, ~0.31415927E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(~0.27182817E1, ~0.31415927E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(~0.27182817E1, ~0.27182817E1, 0.27182817E1): 0.10107337E2 0.10107338E2 +(~0.27182817E1, ~0.27182817E1, ~0.31415927E1): 0.42474627E1 0.4247463E1 +(~0.27182817E1, ~0.27182817E1, ~0.123E~2): 0.73878255E1 0.7387826E1 +(~0.27182817E1, ~0.123E1, 0.123E1): 0.4573487E1 0.45734863E1 +(~0.27182817E1, ~0.123E1, 0.123): 0.34664867E1 0.34664865E1 +(~0.27182817E1, ~0.123E1, ~0.31415927E1): 0.20189385 0.2018938 +(~0.27182817E1, ~0.123E1, ~0.27182817E1): 0.62520486 0.6252048 +(~0.27182817E1, ~0.123, 0.123E~2): 0.33557865 0.33557868 +(~0.27182817E1, ~0.123, ~0.123): 0.21134867 0.21134868 +(~0.123E1, 0.34028235E39, 0.34028235E39): ~0.78264946E38 ~inf +(~0.123E1, 0.34028235E39, 0.17014117E39): ~0.24840611E39 ~inf +(~0.123E1, 0.17014117E39, 0.34028235E39): 0.1310087E39 0.13100871E39 +(~0.123E1, 0.17014117E39, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(~0.123E1, 0.123E2, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(~0.123E1, 0.31415927E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(~0.123E1, 0.31415927E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(~0.123E1, 0.27182817E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(~0.123E1, 0.27182817E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(~0.123E1, 0.27182817E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(~0.123E1, 0.27182817E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(~0.123E1, 0.123E1, 0.123E1): ~0.28290004 ~0.28289998 +(~0.123E1, 0.123E1, 0.123): ~0.13899001E1 ~0.13899E1 +(~0.123E1, 0.123E1, ~0.123E1): ~0.27429001E1 ~0.27429E1 +(~0.123E1, 0.123, 0.123E1): 0.107871E1 0.10787101E1 +(~0.123E1, 0.123, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(~0.123E1, 0.123, 0.123E~2): ~0.15006001 ~0.15006 +(~0.123E1, 0.123, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(~0.123E1, 0.123E~2, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(~0.123E1, ~0.34028235E39, ~0.34028235E39): 0.78264946E38 inf +(~0.123E1, ~0.34028235E39, ~0.17014117E39): 0.24840611E39 inf +(~0.123E1, ~0.17014117E39, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(~0.123E1, ~0.17014117E39, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(~0.123E1, ~0.123E2, ~0.123E2): 0.28290002E1 0.28290005E1 +(~0.123E1, ~0.31415927E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(~0.123E1, ~0.31415927E1, 0.123): 0.39871593E1 0.3987159E1 +(~0.123E1, ~0.27182817E1, 0.123E1): 0.4573487E1 0.45734863E1 +(~0.123E1, ~0.27182817E1, 0.123): 0.34664867E1 0.34664865E1 +(~0.123E1, ~0.27182817E1, ~0.31415927E1): 0.20189385 0.2018938 +(~0.123E1, ~0.27182817E1, ~0.27182817E1): 0.62520486 0.6252048 +(~0.123E1, ~0.123E1, 0.123E1): 0.27429001E1 0.27429E1 +(~0.123E1, ~0.123E1, ~0.123E1): 0.28290004 0.28289998 +(~0.123E1, ~0.123E1, ~0.123): 0.13899001E1 0.13899E1 +(~0.123E1, ~0.123, 0.123E1): 0.13812901E1 0.138129E1 +(~0.123E1, ~0.123, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(~0.123E1, ~0.123, ~0.123): 0.28290004E~1 0.28289996E~1 +(~0.123E1, ~0.123, ~0.123E~2): 0.15006001 0.15006 +(~0.123E1, ~0.123E~2, ~0.123E~2): 0.28290003E~3 0.28290006E~3 +(~0.123, 0.34028235E39, 0.34028235E39): 0.2984276E39 0.29842763E39 +(~0.123, 0.17014117E39, 0.17014117E39): 0.1492138E39 0.14921381E39 +(~0.123, 0.123E4, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(~0.123, 0.123E4, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(~0.123, 0.123E4, 0.123E1): ~0.15006E3 ~0.15006001E3 +(~0.123, 0.123E4, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(~0.123, 0.123E2, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123, 0.123E2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123, 0.123E2, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123, 0.31415927E1, 0.123E1): 0.8435841 0.84358406 +(~0.123, 0.31415927E1, 0.123): ~0.2634159 ~0.26341593 +(~0.123, 0.27182817E1, 0.123): ~0.21134867 ~0.21134868 +(~0.123, 0.27182817E1, ~0.123E~2): ~0.33557865 ~0.33557868 +(~0.123, 0.123E1, 0.123E1): 0.107871E1 0.10787101E1 +(~0.123, 0.123E1, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(~0.123, 0.123E1, 0.123E~2): ~0.15006001 ~0.15006 +(~0.123, 0.123E1, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(~0.123, ~0.34028235E39, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(~0.123, ~0.17014117E39, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(~0.123, ~0.123E4, 0.123E~2): 0.15129123E3 0.15129124E3 +(~0.123, ~0.123E4, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(~0.123, ~0.123E4, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(~0.123, ~0.123E4, ~0.123E1): 0.15006E3 0.15006001E3 +(~0.123, ~0.123E2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123, ~0.123E2, 0.123): 0.16359E1 0.16359001E1 +(~0.123, ~0.123E2, ~0.123E1): 0.28290004 0.2829001 +(~0.123, ~0.31415927E1, ~0.123E1): ~0.8435841 ~0.84358406 +(~0.123, ~0.31415927E1, ~0.123): 0.2634159 0.26341593 +(~0.123, ~0.27182817E1, 0.123E~2): 0.33557865 0.33557868 +(~0.123, ~0.27182817E1, ~0.123): 0.21134867 0.21134868 +(~0.123, ~0.123E1, 0.123E1): 0.13812901E1 0.138129E1 +(~0.123, ~0.123E1, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(~0.123, ~0.123E1, ~0.123): 0.28290004E~1 0.28289996E~1 +(~0.123, ~0.123E1, ~0.123E~2): 0.15006001 0.15006 +(~0.123E~2, 0.123E4, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123E~2, 0.123E4, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123E~2, 0.123E4, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123E~2, 0.123E2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(~0.123E~2, 0.123E1, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(~0.123E~2, ~0.123E4, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123E~2, ~0.123E4, 0.123): 0.16359E1 0.16359001E1 +(~0.123E~2, ~0.123E4, ~0.123E1): 0.28290004 0.2829001 +(~0.123E~2, ~0.123E2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(~0.123E~2, ~0.123E1, ~0.123E~2): 0.28290003E~3 0.28290006E~3 + +Testing Real.{realCeil,realFloor,realTrunc} +0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 +0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 +0.123E4 0.123E4 0.123E4 0.123E4 +0.123E2 0.13E2 0.12E2 0.12E2 +0.31415927E1 0.4E1 0.3E1 0.3E1 +0.27182817E1 0.3E1 0.2E1 0.2E1 +0.123E1 0.2E1 0.1E1 0.1E1 +0.123 0.1E1 0.0 0.0 +0.123E~2 0.1E1 0.0 0.0 +0.11754944E~37 0.1E1 0.0 0.0 +0.5877472E~38 0.1E1 0.0 0.0 +0.1E~44 0.1E1 0.0 0.0 +0.0 0.0 0.0 0.0 +~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 +~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 +~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 +~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 +~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 +~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 +~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 +~0.123 ~0.0 ~0.1E1 ~0.0 +~0.123E~2 ~0.0 ~0.1E1 ~0.0 +~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 +~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 +~0.1E~44 ~0.0 ~0.1E1 ~0.0 +~0.0 ~0.0 ~0.0 ~0.0 + +Testing Real.{<,<=,>,>=,==,!=,?=,unordered} +< (0.34028235E39, 0.34028235E39) = false +> (0.34028235E39, 0.34028235E39) = false +== (0.34028235E39, 0.34028235E39) = true +?= (0.34028235E39, 0.34028235E39) = true +< (0.34028235E39, 0.17014117E39) = false +> (0.34028235E39, 0.17014117E39) = true +== (0.34028235E39, 0.17014117E39) = false +?= (0.34028235E39, 0.17014117E39) = false +< (0.34028235E39, 0.123E4) = false +> (0.34028235E39, 0.123E4) = true +== (0.34028235E39, 0.123E4) = false +?= (0.34028235E39, 0.123E4) = false +< (0.34028235E39, 0.123E2) = false +> (0.34028235E39, 0.123E2) = true +== (0.34028235E39, 0.123E2) = false +?= (0.34028235E39, 0.123E2) = false +< (0.34028235E39, 0.31415927E1) = false +> (0.34028235E39, 0.31415927E1) = true +== (0.34028235E39, 0.31415927E1) = false +?= (0.34028235E39, 0.31415927E1) = false +< (0.34028235E39, 0.27182817E1) = false +> (0.34028235E39, 0.27182817E1) = true +== (0.34028235E39, 0.27182817E1) = false +?= (0.34028235E39, 0.27182817E1) = false +< (0.34028235E39, 0.123E1) = false +> (0.34028235E39, 0.123E1) = true +== (0.34028235E39, 0.123E1) = false +?= (0.34028235E39, 0.123E1) = false +< (0.34028235E39, 0.123) = false +> (0.34028235E39, 0.123) = true +== (0.34028235E39, 0.123) = false +?= (0.34028235E39, 0.123) = false +< (0.34028235E39, 0.123E~2) = false +> (0.34028235E39, 0.123E~2) = true +== (0.34028235E39, 0.123E~2) = false +?= (0.34028235E39, 0.123E~2) = false +< (0.34028235E39, 0.11754944E~37) = false +> (0.34028235E39, 0.11754944E~37) = true +== (0.34028235E39, 0.11754944E~37) = false +?= (0.34028235E39, 0.11754944E~37) = false +< (0.34028235E39, 0.5877472E~38) = false +> (0.34028235E39, 0.5877472E~38) = true +== (0.34028235E39, 0.5877472E~38) = false +?= (0.34028235E39, 0.5877472E~38) = false +< (0.34028235E39, 0.1E~44) = false +> (0.34028235E39, 0.1E~44) = true +== (0.34028235E39, 0.1E~44) = false +?= (0.34028235E39, 0.1E~44) = false +< (0.34028235E39, 0.0) = false +> (0.34028235E39, 0.0) = true +== (0.34028235E39, 0.0) = false +?= (0.34028235E39, 0.0) = false +< (0.34028235E39, ~0.34028235E39) = false +> (0.34028235E39, ~0.34028235E39) = true +== (0.34028235E39, ~0.34028235E39) = false +?= (0.34028235E39, ~0.34028235E39) = false +< (0.34028235E39, ~0.17014117E39) = false +> (0.34028235E39, ~0.17014117E39) = true +== (0.34028235E39, ~0.17014117E39) = false +?= (0.34028235E39, ~0.17014117E39) = false +< (0.34028235E39, ~0.123E4) = false +> (0.34028235E39, ~0.123E4) = true +== (0.34028235E39, ~0.123E4) = false +?= (0.34028235E39, ~0.123E4) = false +< (0.34028235E39, ~0.123E2) = false +> (0.34028235E39, ~0.123E2) = true +== (0.34028235E39, ~0.123E2) = false +?= (0.34028235E39, ~0.123E2) = false +< (0.34028235E39, ~0.31415927E1) = false +> (0.34028235E39, ~0.31415927E1) = true +== (0.34028235E39, ~0.31415927E1) = false +?= (0.34028235E39, ~0.31415927E1) = false +< (0.34028235E39, ~0.27182817E1) = false +> (0.34028235E39, ~0.27182817E1) = true +== (0.34028235E39, ~0.27182817E1) = false +?= (0.34028235E39, ~0.27182817E1) = false +< (0.34028235E39, ~0.123E1) = false +> (0.34028235E39, ~0.123E1) = true +== (0.34028235E39, ~0.123E1) = false +?= (0.34028235E39, ~0.123E1) = false +< (0.34028235E39, ~0.123) = false +> (0.34028235E39, ~0.123) = true +== (0.34028235E39, ~0.123) = false +?= (0.34028235E39, ~0.123) = false +< (0.34028235E39, ~0.123E~2) = false +> (0.34028235E39, ~0.123E~2) = true +== (0.34028235E39, ~0.123E~2) = false +?= (0.34028235E39, ~0.123E~2) = false +< (0.34028235E39, ~0.11754944E~37) = false +> (0.34028235E39, ~0.11754944E~37) = true +== (0.34028235E39, ~0.11754944E~37) = false +?= (0.34028235E39, ~0.11754944E~37) = false +< (0.34028235E39, ~0.5877472E~38) = false +> (0.34028235E39, ~0.5877472E~38) = true +== (0.34028235E39, ~0.5877472E~38) = false +?= (0.34028235E39, ~0.5877472E~38) = false +< (0.34028235E39, ~0.1E~44) = false +> (0.34028235E39, ~0.1E~44) = true +== (0.34028235E39, ~0.1E~44) = false +?= (0.34028235E39, ~0.1E~44) = false +< (0.34028235E39, ~0.0) = false +> (0.34028235E39, ~0.0) = true +== (0.34028235E39, ~0.0) = false +?= (0.34028235E39, ~0.0) = false +< (0.17014117E39, 0.34028235E39) = true +> (0.17014117E39, 0.34028235E39) = false +== (0.17014117E39, 0.34028235E39) = false +?= (0.17014117E39, 0.34028235E39) = false +< (0.17014117E39, 0.17014117E39) = false +> (0.17014117E39, 0.17014117E39) = false +== (0.17014117E39, 0.17014117E39) = true +?= (0.17014117E39, 0.17014117E39) = true +< (0.17014117E39, 0.123E4) = false +> (0.17014117E39, 0.123E4) = true +== (0.17014117E39, 0.123E4) = false +?= (0.17014117E39, 0.123E4) = false +< (0.17014117E39, 0.123E2) = false +> (0.17014117E39, 0.123E2) = true +== (0.17014117E39, 0.123E2) = false +?= (0.17014117E39, 0.123E2) = false +< (0.17014117E39, 0.31415927E1) = false +> (0.17014117E39, 0.31415927E1) = true +== (0.17014117E39, 0.31415927E1) = false +?= (0.17014117E39, 0.31415927E1) = false +< (0.17014117E39, 0.27182817E1) = false +> (0.17014117E39, 0.27182817E1) = true +== (0.17014117E39, 0.27182817E1) = false +?= (0.17014117E39, 0.27182817E1) = false +< (0.17014117E39, 0.123E1) = false +> (0.17014117E39, 0.123E1) = true +== (0.17014117E39, 0.123E1) = false +?= (0.17014117E39, 0.123E1) = false +< (0.17014117E39, 0.123) = false +> (0.17014117E39, 0.123) = true +== (0.17014117E39, 0.123) = false +?= (0.17014117E39, 0.123) = false +< (0.17014117E39, 0.123E~2) = false +> (0.17014117E39, 0.123E~2) = true +== (0.17014117E39, 0.123E~2) = false +?= (0.17014117E39, 0.123E~2) = false +< (0.17014117E39, 0.11754944E~37) = false +> (0.17014117E39, 0.11754944E~37) = true +== (0.17014117E39, 0.11754944E~37) = false +?= (0.17014117E39, 0.11754944E~37) = false +< (0.17014117E39, 0.5877472E~38) = false +> (0.17014117E39, 0.5877472E~38) = true +== (0.17014117E39, 0.5877472E~38) = false +?= (0.17014117E39, 0.5877472E~38) = false +< (0.17014117E39, 0.1E~44) = false +> (0.17014117E39, 0.1E~44) = true +== (0.17014117E39, 0.1E~44) = false +?= (0.17014117E39, 0.1E~44) = false +< (0.17014117E39, 0.0) = false +> (0.17014117E39, 0.0) = true +== (0.17014117E39, 0.0) = false +?= (0.17014117E39, 0.0) = false +< (0.17014117E39, ~0.34028235E39) = false +> (0.17014117E39, ~0.34028235E39) = true +== (0.17014117E39, ~0.34028235E39) = false +?= (0.17014117E39, ~0.34028235E39) = false +< (0.17014117E39, ~0.17014117E39) = false +> (0.17014117E39, ~0.17014117E39) = true +== (0.17014117E39, ~0.17014117E39) = false +?= (0.17014117E39, ~0.17014117E39) = false +< (0.17014117E39, ~0.123E4) = false +> (0.17014117E39, ~0.123E4) = true +== (0.17014117E39, ~0.123E4) = false +?= (0.17014117E39, ~0.123E4) = false +< (0.17014117E39, ~0.123E2) = false +> (0.17014117E39, ~0.123E2) = true +== (0.17014117E39, ~0.123E2) = false +?= (0.17014117E39, ~0.123E2) = false +< (0.17014117E39, ~0.31415927E1) = false +> (0.17014117E39, ~0.31415927E1) = true +== (0.17014117E39, ~0.31415927E1) = false +?= (0.17014117E39, ~0.31415927E1) = false +< (0.17014117E39, ~0.27182817E1) = false +> (0.17014117E39, ~0.27182817E1) = true +== (0.17014117E39, ~0.27182817E1) = false +?= (0.17014117E39, ~0.27182817E1) = false +< (0.17014117E39, ~0.123E1) = false +> (0.17014117E39, ~0.123E1) = true +== (0.17014117E39, ~0.123E1) = false +?= (0.17014117E39, ~0.123E1) = false +< (0.17014117E39, ~0.123) = false +> (0.17014117E39, ~0.123) = true +== (0.17014117E39, ~0.123) = false +?= (0.17014117E39, ~0.123) = false +< (0.17014117E39, ~0.123E~2) = false +> (0.17014117E39, ~0.123E~2) = true +== (0.17014117E39, ~0.123E~2) = false +?= (0.17014117E39, ~0.123E~2) = false +< (0.17014117E39, ~0.11754944E~37) = false +> (0.17014117E39, ~0.11754944E~37) = true +== (0.17014117E39, ~0.11754944E~37) = false +?= (0.17014117E39, ~0.11754944E~37) = false +< (0.17014117E39, ~0.5877472E~38) = false +> (0.17014117E39, ~0.5877472E~38) = true +== (0.17014117E39, ~0.5877472E~38) = false +?= (0.17014117E39, ~0.5877472E~38) = false +< (0.17014117E39, ~0.1E~44) = false +> (0.17014117E39, ~0.1E~44) = true +== (0.17014117E39, ~0.1E~44) = false +?= (0.17014117E39, ~0.1E~44) = false +< (0.17014117E39, ~0.0) = false +> (0.17014117E39, ~0.0) = true +== (0.17014117E39, ~0.0) = false +?= (0.17014117E39, ~0.0) = false +< (0.123E4, 0.34028235E39) = true +> (0.123E4, 0.34028235E39) = false +== (0.123E4, 0.34028235E39) = false +?= (0.123E4, 0.34028235E39) = false +< (0.123E4, 0.17014117E39) = true +> (0.123E4, 0.17014117E39) = false +== (0.123E4, 0.17014117E39) = false +?= (0.123E4, 0.17014117E39) = false +< (0.123E4, 0.123E4) = false +> (0.123E4, 0.123E4) = false +== (0.123E4, 0.123E4) = true +?= (0.123E4, 0.123E4) = true +< (0.123E4, 0.123E2) = false +> (0.123E4, 0.123E2) = true +== (0.123E4, 0.123E2) = false +?= (0.123E4, 0.123E2) = false +< (0.123E4, 0.31415927E1) = false +> (0.123E4, 0.31415927E1) = true +== (0.123E4, 0.31415927E1) = false +?= (0.123E4, 0.31415927E1) = false +< (0.123E4, 0.27182817E1) = false +> (0.123E4, 0.27182817E1) = true +== (0.123E4, 0.27182817E1) = false +?= (0.123E4, 0.27182817E1) = false +< (0.123E4, 0.123E1) = false +> (0.123E4, 0.123E1) = true +== (0.123E4, 0.123E1) = false +?= (0.123E4, 0.123E1) = false +< (0.123E4, 0.123) = false +> (0.123E4, 0.123) = true +== (0.123E4, 0.123) = false +?= (0.123E4, 0.123) = false +< (0.123E4, 0.123E~2) = false +> (0.123E4, 0.123E~2) = true +== (0.123E4, 0.123E~2) = false +?= (0.123E4, 0.123E~2) = false +< (0.123E4, 0.11754944E~37) = false +> (0.123E4, 0.11754944E~37) = true +== (0.123E4, 0.11754944E~37) = false +?= (0.123E4, 0.11754944E~37) = false +< (0.123E4, 0.5877472E~38) = false +> (0.123E4, 0.5877472E~38) = true +== (0.123E4, 0.5877472E~38) = false +?= (0.123E4, 0.5877472E~38) = false +< (0.123E4, 0.1E~44) = false +> (0.123E4, 0.1E~44) = true +== (0.123E4, 0.1E~44) = false +?= (0.123E4, 0.1E~44) = false +< (0.123E4, 0.0) = false +> (0.123E4, 0.0) = true +== (0.123E4, 0.0) = false +?= (0.123E4, 0.0) = false +< (0.123E4, ~0.34028235E39) = false +> (0.123E4, ~0.34028235E39) = true +== (0.123E4, ~0.34028235E39) = false +?= (0.123E4, ~0.34028235E39) = false +< (0.123E4, ~0.17014117E39) = false +> (0.123E4, ~0.17014117E39) = true +== (0.123E4, ~0.17014117E39) = false +?= (0.123E4, ~0.17014117E39) = false +< (0.123E4, ~0.123E4) = false +> (0.123E4, ~0.123E4) = true +== (0.123E4, ~0.123E4) = false +?= (0.123E4, ~0.123E4) = false +< (0.123E4, ~0.123E2) = false +> (0.123E4, ~0.123E2) = true +== (0.123E4, ~0.123E2) = false +?= (0.123E4, ~0.123E2) = false +< (0.123E4, ~0.31415927E1) = false +> (0.123E4, ~0.31415927E1) = true +== (0.123E4, ~0.31415927E1) = false +?= (0.123E4, ~0.31415927E1) = false +< (0.123E4, ~0.27182817E1) = false +> (0.123E4, ~0.27182817E1) = true +== (0.123E4, ~0.27182817E1) = false +?= (0.123E4, ~0.27182817E1) = false +< (0.123E4, ~0.123E1) = false +> (0.123E4, ~0.123E1) = true +== (0.123E4, ~0.123E1) = false +?= (0.123E4, ~0.123E1) = false +< (0.123E4, ~0.123) = false +> (0.123E4, ~0.123) = true +== (0.123E4, ~0.123) = false +?= (0.123E4, ~0.123) = false +< (0.123E4, ~0.123E~2) = false +> (0.123E4, ~0.123E~2) = true +== (0.123E4, ~0.123E~2) = false +?= (0.123E4, ~0.123E~2) = false +< (0.123E4, ~0.11754944E~37) = false +> (0.123E4, ~0.11754944E~37) = true +== (0.123E4, ~0.11754944E~37) = false +?= (0.123E4, ~0.11754944E~37) = false +< (0.123E4, ~0.5877472E~38) = false +> (0.123E4, ~0.5877472E~38) = true +== (0.123E4, ~0.5877472E~38) = false +?= (0.123E4, ~0.5877472E~38) = false +< (0.123E4, ~0.1E~44) = false +> (0.123E4, ~0.1E~44) = true +== (0.123E4, ~0.1E~44) = false +?= (0.123E4, ~0.1E~44) = false +< (0.123E4, ~0.0) = false +> (0.123E4, ~0.0) = true +== (0.123E4, ~0.0) = false +?= (0.123E4, ~0.0) = false +< (0.123E2, 0.34028235E39) = true +> (0.123E2, 0.34028235E39) = false +== (0.123E2, 0.34028235E39) = false +?= (0.123E2, 0.34028235E39) = false +< (0.123E2, 0.17014117E39) = true +> (0.123E2, 0.17014117E39) = false +== (0.123E2, 0.17014117E39) = false +?= (0.123E2, 0.17014117E39) = false +< (0.123E2, 0.123E4) = true +> (0.123E2, 0.123E4) = false +== (0.123E2, 0.123E4) = false +?= (0.123E2, 0.123E4) = false +< (0.123E2, 0.123E2) = false +> (0.123E2, 0.123E2) = false +== (0.123E2, 0.123E2) = true +?= (0.123E2, 0.123E2) = true +< (0.123E2, 0.31415927E1) = false +> (0.123E2, 0.31415927E1) = true +== (0.123E2, 0.31415927E1) = false +?= (0.123E2, 0.31415927E1) = false +< (0.123E2, 0.27182817E1) = false +> (0.123E2, 0.27182817E1) = true +== (0.123E2, 0.27182817E1) = false +?= (0.123E2, 0.27182817E1) = false +< (0.123E2, 0.123E1) = false +> (0.123E2, 0.123E1) = true +== (0.123E2, 0.123E1) = false +?= (0.123E2, 0.123E1) = false +< (0.123E2, 0.123) = false +> (0.123E2, 0.123) = true +== (0.123E2, 0.123) = false +?= (0.123E2, 0.123) = false +< (0.123E2, 0.123E~2) = false +> (0.123E2, 0.123E~2) = true +== (0.123E2, 0.123E~2) = false +?= (0.123E2, 0.123E~2) = false +< (0.123E2, 0.11754944E~37) = false +> (0.123E2, 0.11754944E~37) = true +== (0.123E2, 0.11754944E~37) = false +?= (0.123E2, 0.11754944E~37) = false +< (0.123E2, 0.5877472E~38) = false +> (0.123E2, 0.5877472E~38) = true +== (0.123E2, 0.5877472E~38) = false +?= (0.123E2, 0.5877472E~38) = false +< (0.123E2, 0.1E~44) = false +> (0.123E2, 0.1E~44) = true +== (0.123E2, 0.1E~44) = false +?= (0.123E2, 0.1E~44) = false +< (0.123E2, 0.0) = false +> (0.123E2, 0.0) = true +== (0.123E2, 0.0) = false +?= (0.123E2, 0.0) = false +< (0.123E2, ~0.34028235E39) = false +> (0.123E2, ~0.34028235E39) = true +== (0.123E2, ~0.34028235E39) = false +?= (0.123E2, ~0.34028235E39) = false +< (0.123E2, ~0.17014117E39) = false +> (0.123E2, ~0.17014117E39) = true +== (0.123E2, ~0.17014117E39) = false +?= (0.123E2, ~0.17014117E39) = false +< (0.123E2, ~0.123E4) = false +> (0.123E2, ~0.123E4) = true +== (0.123E2, ~0.123E4) = false +?= (0.123E2, ~0.123E4) = false +< (0.123E2, ~0.123E2) = false +> (0.123E2, ~0.123E2) = true +== (0.123E2, ~0.123E2) = false +?= (0.123E2, ~0.123E2) = false +< (0.123E2, ~0.31415927E1) = false +> (0.123E2, ~0.31415927E1) = true +== (0.123E2, ~0.31415927E1) = false +?= (0.123E2, ~0.31415927E1) = false +< (0.123E2, ~0.27182817E1) = false +> (0.123E2, ~0.27182817E1) = true +== (0.123E2, ~0.27182817E1) = false +?= (0.123E2, ~0.27182817E1) = false +< (0.123E2, ~0.123E1) = false +> (0.123E2, ~0.123E1) = true +== (0.123E2, ~0.123E1) = false +?= (0.123E2, ~0.123E1) = false +< (0.123E2, ~0.123) = false +> (0.123E2, ~0.123) = true +== (0.123E2, ~0.123) = false +?= (0.123E2, ~0.123) = false +< (0.123E2, ~0.123E~2) = false +> (0.123E2, ~0.123E~2) = true +== (0.123E2, ~0.123E~2) = false +?= (0.123E2, ~0.123E~2) = false +< (0.123E2, ~0.11754944E~37) = false +> (0.123E2, ~0.11754944E~37) = true +== (0.123E2, ~0.11754944E~37) = false +?= (0.123E2, ~0.11754944E~37) = false +< (0.123E2, ~0.5877472E~38) = false +> (0.123E2, ~0.5877472E~38) = true +== (0.123E2, ~0.5877472E~38) = false +?= (0.123E2, ~0.5877472E~38) = false +< (0.123E2, ~0.1E~44) = false +> (0.123E2, ~0.1E~44) = true +== (0.123E2, ~0.1E~44) = false +?= (0.123E2, ~0.1E~44) = false +< (0.123E2, ~0.0) = false +> (0.123E2, ~0.0) = true +== (0.123E2, ~0.0) = false +?= (0.123E2, ~0.0) = false +< (0.31415927E1, 0.34028235E39) = true +> (0.31415927E1, 0.34028235E39) = false +== (0.31415927E1, 0.34028235E39) = false +?= (0.31415927E1, 0.34028235E39) = false +< (0.31415927E1, 0.17014117E39) = true +> (0.31415927E1, 0.17014117E39) = false +== (0.31415927E1, 0.17014117E39) = false +?= (0.31415927E1, 0.17014117E39) = false +< (0.31415927E1, 0.123E4) = true +> (0.31415927E1, 0.123E4) = false +== (0.31415927E1, 0.123E4) = false +?= (0.31415927E1, 0.123E4) = false +< (0.31415927E1, 0.123E2) = true +> (0.31415927E1, 0.123E2) = false +== (0.31415927E1, 0.123E2) = false +?= (0.31415927E1, 0.123E2) = false +< (0.31415927E1, 0.31415927E1) = false +> (0.31415927E1, 0.31415927E1) = false +== (0.31415927E1, 0.31415927E1) = true +?= (0.31415927E1, 0.31415927E1) = true +< (0.31415927E1, 0.27182817E1) = false +> (0.31415927E1, 0.27182817E1) = true +== (0.31415927E1, 0.27182817E1) = false +?= (0.31415927E1, 0.27182817E1) = false +< (0.31415927E1, 0.123E1) = false +> (0.31415927E1, 0.123E1) = true +== (0.31415927E1, 0.123E1) = false +?= (0.31415927E1, 0.123E1) = false +< (0.31415927E1, 0.123) = false +> (0.31415927E1, 0.123) = true +== (0.31415927E1, 0.123) = false +?= (0.31415927E1, 0.123) = false +< (0.31415927E1, 0.123E~2) = false +> (0.31415927E1, 0.123E~2) = true +== (0.31415927E1, 0.123E~2) = false +?= (0.31415927E1, 0.123E~2) = false +< (0.31415927E1, 0.11754944E~37) = false +> (0.31415927E1, 0.11754944E~37) = true +== (0.31415927E1, 0.11754944E~37) = false +?= (0.31415927E1, 0.11754944E~37) = false +< (0.31415927E1, 0.5877472E~38) = false +> (0.31415927E1, 0.5877472E~38) = true +== (0.31415927E1, 0.5877472E~38) = false +?= (0.31415927E1, 0.5877472E~38) = false +< (0.31415927E1, 0.1E~44) = false +> (0.31415927E1, 0.1E~44) = true +== (0.31415927E1, 0.1E~44) = false +?= (0.31415927E1, 0.1E~44) = false +< (0.31415927E1, 0.0) = false +> (0.31415927E1, 0.0) = true +== (0.31415927E1, 0.0) = false +?= (0.31415927E1, 0.0) = false +< (0.31415927E1, ~0.34028235E39) = false +> (0.31415927E1, ~0.34028235E39) = true +== (0.31415927E1, ~0.34028235E39) = false +?= (0.31415927E1, ~0.34028235E39) = false +< (0.31415927E1, ~0.17014117E39) = false +> (0.31415927E1, ~0.17014117E39) = true +== (0.31415927E1, ~0.17014117E39) = false +?= (0.31415927E1, ~0.17014117E39) = false +< (0.31415927E1, ~0.123E4) = false +> (0.31415927E1, ~0.123E4) = true +== (0.31415927E1, ~0.123E4) = false +?= (0.31415927E1, ~0.123E4) = false +< (0.31415927E1, ~0.123E2) = false +> (0.31415927E1, ~0.123E2) = true +== (0.31415927E1, ~0.123E2) = false +?= (0.31415927E1, ~0.123E2) = false +< (0.31415927E1, ~0.31415927E1) = false +> (0.31415927E1, ~0.31415927E1) = true +== (0.31415927E1, ~0.31415927E1) = false +?= (0.31415927E1, ~0.31415927E1) = false +< (0.31415927E1, ~0.27182817E1) = false +> (0.31415927E1, ~0.27182817E1) = true +== (0.31415927E1, ~0.27182817E1) = false +?= (0.31415927E1, ~0.27182817E1) = false +< (0.31415927E1, ~0.123E1) = false +> (0.31415927E1, ~0.123E1) = true +== (0.31415927E1, ~0.123E1) = false +?= (0.31415927E1, ~0.123E1) = false +< (0.31415927E1, ~0.123) = false +> (0.31415927E1, ~0.123) = true +== (0.31415927E1, ~0.123) = false +?= (0.31415927E1, ~0.123) = false +< (0.31415927E1, ~0.123E~2) = false +> (0.31415927E1, ~0.123E~2) = true +== (0.31415927E1, ~0.123E~2) = false +?= (0.31415927E1, ~0.123E~2) = false +< (0.31415927E1, ~0.11754944E~37) = false +> (0.31415927E1, ~0.11754944E~37) = true +== (0.31415927E1, ~0.11754944E~37) = false +?= (0.31415927E1, ~0.11754944E~37) = false +< (0.31415927E1, ~0.5877472E~38) = false +> (0.31415927E1, ~0.5877472E~38) = true +== (0.31415927E1, ~0.5877472E~38) = false +?= (0.31415927E1, ~0.5877472E~38) = false +< (0.31415927E1, ~0.1E~44) = false +> (0.31415927E1, ~0.1E~44) = true +== (0.31415927E1, ~0.1E~44) = false +?= (0.31415927E1, ~0.1E~44) = false +< (0.31415927E1, ~0.0) = false +> (0.31415927E1, ~0.0) = true +== (0.31415927E1, ~0.0) = false +?= (0.31415927E1, ~0.0) = false +< (0.27182817E1, 0.34028235E39) = true +> (0.27182817E1, 0.34028235E39) = false +== (0.27182817E1, 0.34028235E39) = false +?= (0.27182817E1, 0.34028235E39) = false +< (0.27182817E1, 0.17014117E39) = true +> (0.27182817E1, 0.17014117E39) = false +== (0.27182817E1, 0.17014117E39) = false +?= (0.27182817E1, 0.17014117E39) = false +< (0.27182817E1, 0.123E4) = true +> (0.27182817E1, 0.123E4) = false +== (0.27182817E1, 0.123E4) = false +?= (0.27182817E1, 0.123E4) = false +< (0.27182817E1, 0.123E2) = true +> (0.27182817E1, 0.123E2) = false +== (0.27182817E1, 0.123E2) = false +?= (0.27182817E1, 0.123E2) = false +< (0.27182817E1, 0.31415927E1) = true +> (0.27182817E1, 0.31415927E1) = false +== (0.27182817E1, 0.31415927E1) = false +?= (0.27182817E1, 0.31415927E1) = false +< (0.27182817E1, 0.27182817E1) = false +> (0.27182817E1, 0.27182817E1) = false +== (0.27182817E1, 0.27182817E1) = true +?= (0.27182817E1, 0.27182817E1) = true +< (0.27182817E1, 0.123E1) = false +> (0.27182817E1, 0.123E1) = true +== (0.27182817E1, 0.123E1) = false +?= (0.27182817E1, 0.123E1) = false +< (0.27182817E1, 0.123) = false +> (0.27182817E1, 0.123) = true +== (0.27182817E1, 0.123) = false +?= (0.27182817E1, 0.123) = false +< (0.27182817E1, 0.123E~2) = false +> (0.27182817E1, 0.123E~2) = true +== (0.27182817E1, 0.123E~2) = false +?= (0.27182817E1, 0.123E~2) = false +< (0.27182817E1, 0.11754944E~37) = false +> (0.27182817E1, 0.11754944E~37) = true +== (0.27182817E1, 0.11754944E~37) = false +?= (0.27182817E1, 0.11754944E~37) = false +< (0.27182817E1, 0.5877472E~38) = false +> (0.27182817E1, 0.5877472E~38) = true +== (0.27182817E1, 0.5877472E~38) = false +?= (0.27182817E1, 0.5877472E~38) = false +< (0.27182817E1, 0.1E~44) = false +> (0.27182817E1, 0.1E~44) = true +== (0.27182817E1, 0.1E~44) = false +?= (0.27182817E1, 0.1E~44) = false +< (0.27182817E1, 0.0) = false +> (0.27182817E1, 0.0) = true +== (0.27182817E1, 0.0) = false +?= (0.27182817E1, 0.0) = false +< (0.27182817E1, ~0.34028235E39) = false +> (0.27182817E1, ~0.34028235E39) = true +== (0.27182817E1, ~0.34028235E39) = false +?= (0.27182817E1, ~0.34028235E39) = false +< (0.27182817E1, ~0.17014117E39) = false +> (0.27182817E1, ~0.17014117E39) = true +== (0.27182817E1, ~0.17014117E39) = false +?= (0.27182817E1, ~0.17014117E39) = false +< (0.27182817E1, ~0.123E4) = false +> (0.27182817E1, ~0.123E4) = true +== (0.27182817E1, ~0.123E4) = false +?= (0.27182817E1, ~0.123E4) = false +< (0.27182817E1, ~0.123E2) = false +> (0.27182817E1, ~0.123E2) = true +== (0.27182817E1, ~0.123E2) = false +?= (0.27182817E1, ~0.123E2) = false +< (0.27182817E1, ~0.31415927E1) = false +> (0.27182817E1, ~0.31415927E1) = true +== (0.27182817E1, ~0.31415927E1) = false +?= (0.27182817E1, ~0.31415927E1) = false +< (0.27182817E1, ~0.27182817E1) = false +> (0.27182817E1, ~0.27182817E1) = true +== (0.27182817E1, ~0.27182817E1) = false +?= (0.27182817E1, ~0.27182817E1) = false +< (0.27182817E1, ~0.123E1) = false +> (0.27182817E1, ~0.123E1) = true +== (0.27182817E1, ~0.123E1) = false +?= (0.27182817E1, ~0.123E1) = false +< (0.27182817E1, ~0.123) = false +> (0.27182817E1, ~0.123) = true +== (0.27182817E1, ~0.123) = false +?= (0.27182817E1, ~0.123) = false +< (0.27182817E1, ~0.123E~2) = false +> (0.27182817E1, ~0.123E~2) = true +== (0.27182817E1, ~0.123E~2) = false +?= (0.27182817E1, ~0.123E~2) = false +< (0.27182817E1, ~0.11754944E~37) = false +> (0.27182817E1, ~0.11754944E~37) = true +== (0.27182817E1, ~0.11754944E~37) = false +?= (0.27182817E1, ~0.11754944E~37) = false +< (0.27182817E1, ~0.5877472E~38) = false +> (0.27182817E1, ~0.5877472E~38) = true +== (0.27182817E1, ~0.5877472E~38) = false +?= (0.27182817E1, ~0.5877472E~38) = false +< (0.27182817E1, ~0.1E~44) = false +> (0.27182817E1, ~0.1E~44) = true +== (0.27182817E1, ~0.1E~44) = false +?= (0.27182817E1, ~0.1E~44) = false +< (0.27182817E1, ~0.0) = false +> (0.27182817E1, ~0.0) = true +== (0.27182817E1, ~0.0) = false +?= (0.27182817E1, ~0.0) = false +< (0.123E1, 0.34028235E39) = true +> (0.123E1, 0.34028235E39) = false +== (0.123E1, 0.34028235E39) = false +?= (0.123E1, 0.34028235E39) = false +< (0.123E1, 0.17014117E39) = true +> (0.123E1, 0.17014117E39) = false +== (0.123E1, 0.17014117E39) = false +?= (0.123E1, 0.17014117E39) = false +< (0.123E1, 0.123E4) = true +> (0.123E1, 0.123E4) = false +== (0.123E1, 0.123E4) = false +?= (0.123E1, 0.123E4) = false +< (0.123E1, 0.123E2) = true +> (0.123E1, 0.123E2) = false +== (0.123E1, 0.123E2) = false +?= (0.123E1, 0.123E2) = false +< (0.123E1, 0.31415927E1) = true +> (0.123E1, 0.31415927E1) = false +== (0.123E1, 0.31415927E1) = false +?= (0.123E1, 0.31415927E1) = false +< (0.123E1, 0.27182817E1) = true +> (0.123E1, 0.27182817E1) = false +== (0.123E1, 0.27182817E1) = false +?= (0.123E1, 0.27182817E1) = false +< (0.123E1, 0.123E1) = false +> (0.123E1, 0.123E1) = false +== (0.123E1, 0.123E1) = true +?= (0.123E1, 0.123E1) = true +< (0.123E1, 0.123) = false +> (0.123E1, 0.123) = true +== (0.123E1, 0.123) = false +?= (0.123E1, 0.123) = false +< (0.123E1, 0.123E~2) = false +> (0.123E1, 0.123E~2) = true +== (0.123E1, 0.123E~2) = false +?= (0.123E1, 0.123E~2) = false +< (0.123E1, 0.11754944E~37) = false +> (0.123E1, 0.11754944E~37) = true +== (0.123E1, 0.11754944E~37) = false +?= (0.123E1, 0.11754944E~37) = false +< (0.123E1, 0.5877472E~38) = false +> (0.123E1, 0.5877472E~38) = true +== (0.123E1, 0.5877472E~38) = false +?= (0.123E1, 0.5877472E~38) = false +< (0.123E1, 0.1E~44) = false +> (0.123E1, 0.1E~44) = true +== (0.123E1, 0.1E~44) = false +?= (0.123E1, 0.1E~44) = false +< (0.123E1, 0.0) = false +> (0.123E1, 0.0) = true +== (0.123E1, 0.0) = false +?= (0.123E1, 0.0) = false +< (0.123E1, ~0.34028235E39) = false +> (0.123E1, ~0.34028235E39) = true +== (0.123E1, ~0.34028235E39) = false +?= (0.123E1, ~0.34028235E39) = false +< (0.123E1, ~0.17014117E39) = false +> (0.123E1, ~0.17014117E39) = true +== (0.123E1, ~0.17014117E39) = false +?= (0.123E1, ~0.17014117E39) = false +< (0.123E1, ~0.123E4) = false +> (0.123E1, ~0.123E4) = true +== (0.123E1, ~0.123E4) = false +?= (0.123E1, ~0.123E4) = false +< (0.123E1, ~0.123E2) = false +> (0.123E1, ~0.123E2) = true +== (0.123E1, ~0.123E2) = false +?= (0.123E1, ~0.123E2) = false +< (0.123E1, ~0.31415927E1) = false +> (0.123E1, ~0.31415927E1) = true +== (0.123E1, ~0.31415927E1) = false +?= (0.123E1, ~0.31415927E1) = false +< (0.123E1, ~0.27182817E1) = false +> (0.123E1, ~0.27182817E1) = true +== (0.123E1, ~0.27182817E1) = false +?= (0.123E1, ~0.27182817E1) = false +< (0.123E1, ~0.123E1) = false +> (0.123E1, ~0.123E1) = true +== (0.123E1, ~0.123E1) = false +?= (0.123E1, ~0.123E1) = false +< (0.123E1, ~0.123) = false +> (0.123E1, ~0.123) = true +== (0.123E1, ~0.123) = false +?= (0.123E1, ~0.123) = false +< (0.123E1, ~0.123E~2) = false +> (0.123E1, ~0.123E~2) = true +== (0.123E1, ~0.123E~2) = false +?= (0.123E1, ~0.123E~2) = false +< (0.123E1, ~0.11754944E~37) = false +> (0.123E1, ~0.11754944E~37) = true +== (0.123E1, ~0.11754944E~37) = false +?= (0.123E1, ~0.11754944E~37) = false +< (0.123E1, ~0.5877472E~38) = false +> (0.123E1, ~0.5877472E~38) = true +== (0.123E1, ~0.5877472E~38) = false +?= (0.123E1, ~0.5877472E~38) = false +< (0.123E1, ~0.1E~44) = false +> (0.123E1, ~0.1E~44) = true +== (0.123E1, ~0.1E~44) = false +?= (0.123E1, ~0.1E~44) = false +< (0.123E1, ~0.0) = false +> (0.123E1, ~0.0) = true +== (0.123E1, ~0.0) = false +?= (0.123E1, ~0.0) = false +< (0.123, 0.34028235E39) = true +> (0.123, 0.34028235E39) = false +== (0.123, 0.34028235E39) = false +?= (0.123, 0.34028235E39) = false +< (0.123, 0.17014117E39) = true +> (0.123, 0.17014117E39) = false +== (0.123, 0.17014117E39) = false +?= (0.123, 0.17014117E39) = false +< (0.123, 0.123E4) = true +> (0.123, 0.123E4) = false +== (0.123, 0.123E4) = false +?= (0.123, 0.123E4) = false +< (0.123, 0.123E2) = true +> (0.123, 0.123E2) = false +== (0.123, 0.123E2) = false +?= (0.123, 0.123E2) = false +< (0.123, 0.31415927E1) = true +> (0.123, 0.31415927E1) = false +== (0.123, 0.31415927E1) = false +?= (0.123, 0.31415927E1) = false +< (0.123, 0.27182817E1) = true +> (0.123, 0.27182817E1) = false +== (0.123, 0.27182817E1) = false +?= (0.123, 0.27182817E1) = false +< (0.123, 0.123E1) = true +> (0.123, 0.123E1) = false +== (0.123, 0.123E1) = false +?= (0.123, 0.123E1) = false +< (0.123, 0.123) = false +> (0.123, 0.123) = false +== (0.123, 0.123) = true +?= (0.123, 0.123) = true +< (0.123, 0.123E~2) = false +> (0.123, 0.123E~2) = true +== (0.123, 0.123E~2) = false +?= (0.123, 0.123E~2) = false +< (0.123, 0.11754944E~37) = false +> (0.123, 0.11754944E~37) = true +== (0.123, 0.11754944E~37) = false +?= (0.123, 0.11754944E~37) = false +< (0.123, 0.5877472E~38) = false +> (0.123, 0.5877472E~38) = true +== (0.123, 0.5877472E~38) = false +?= (0.123, 0.5877472E~38) = false +< (0.123, 0.1E~44) = false +> (0.123, 0.1E~44) = true +== (0.123, 0.1E~44) = false +?= (0.123, 0.1E~44) = false +< (0.123, 0.0) = false +> (0.123, 0.0) = true +== (0.123, 0.0) = false +?= (0.123, 0.0) = false +< (0.123, ~0.34028235E39) = false +> (0.123, ~0.34028235E39) = true +== (0.123, ~0.34028235E39) = false +?= (0.123, ~0.34028235E39) = false +< (0.123, ~0.17014117E39) = false +> (0.123, ~0.17014117E39) = true +== (0.123, ~0.17014117E39) = false +?= (0.123, ~0.17014117E39) = false +< (0.123, ~0.123E4) = false +> (0.123, ~0.123E4) = true +== (0.123, ~0.123E4) = false +?= (0.123, ~0.123E4) = false +< (0.123, ~0.123E2) = false +> (0.123, ~0.123E2) = true +== (0.123, ~0.123E2) = false +?= (0.123, ~0.123E2) = false +< (0.123, ~0.31415927E1) = false +> (0.123, ~0.31415927E1) = true +== (0.123, ~0.31415927E1) = false +?= (0.123, ~0.31415927E1) = false +< (0.123, ~0.27182817E1) = false +> (0.123, ~0.27182817E1) = true +== (0.123, ~0.27182817E1) = false +?= (0.123, ~0.27182817E1) = false +< (0.123, ~0.123E1) = false +> (0.123, ~0.123E1) = true +== (0.123, ~0.123E1) = false +?= (0.123, ~0.123E1) = false +< (0.123, ~0.123) = false +> (0.123, ~0.123) = true +== (0.123, ~0.123) = false +?= (0.123, ~0.123) = false +< (0.123, ~0.123E~2) = false +> (0.123, ~0.123E~2) = true +== (0.123, ~0.123E~2) = false +?= (0.123, ~0.123E~2) = false +< (0.123, ~0.11754944E~37) = false +> (0.123, ~0.11754944E~37) = true +== (0.123, ~0.11754944E~37) = false +?= (0.123, ~0.11754944E~37) = false +< (0.123, ~0.5877472E~38) = false +> (0.123, ~0.5877472E~38) = true +== (0.123, ~0.5877472E~38) = false +?= (0.123, ~0.5877472E~38) = false +< (0.123, ~0.1E~44) = false +> (0.123, ~0.1E~44) = true +== (0.123, ~0.1E~44) = false +?= (0.123, ~0.1E~44) = false +< (0.123, ~0.0) = false +> (0.123, ~0.0) = true +== (0.123, ~0.0) = false +?= (0.123, ~0.0) = false +< (0.123E~2, 0.34028235E39) = true +> (0.123E~2, 0.34028235E39) = false +== (0.123E~2, 0.34028235E39) = false +?= (0.123E~2, 0.34028235E39) = false +< (0.123E~2, 0.17014117E39) = true +> (0.123E~2, 0.17014117E39) = false +== (0.123E~2, 0.17014117E39) = false +?= (0.123E~2, 0.17014117E39) = false +< (0.123E~2, 0.123E4) = true +> (0.123E~2, 0.123E4) = false +== (0.123E~2, 0.123E4) = false +?= (0.123E~2, 0.123E4) = false +< (0.123E~2, 0.123E2) = true +> (0.123E~2, 0.123E2) = false +== (0.123E~2, 0.123E2) = false +?= (0.123E~2, 0.123E2) = false +< (0.123E~2, 0.31415927E1) = true +> (0.123E~2, 0.31415927E1) = false +== (0.123E~2, 0.31415927E1) = false +?= (0.123E~2, 0.31415927E1) = false +< (0.123E~2, 0.27182817E1) = true +> (0.123E~2, 0.27182817E1) = false +== (0.123E~2, 0.27182817E1) = false +?= (0.123E~2, 0.27182817E1) = false +< (0.123E~2, 0.123E1) = true +> (0.123E~2, 0.123E1) = false +== (0.123E~2, 0.123E1) = false +?= (0.123E~2, 0.123E1) = false +< (0.123E~2, 0.123) = true +> (0.123E~2, 0.123) = false +== (0.123E~2, 0.123) = false +?= (0.123E~2, 0.123) = false +< (0.123E~2, 0.123E~2) = false +> (0.123E~2, 0.123E~2) = false +== (0.123E~2, 0.123E~2) = true +?= (0.123E~2, 0.123E~2) = true +< (0.123E~2, 0.11754944E~37) = false +> (0.123E~2, 0.11754944E~37) = true +== (0.123E~2, 0.11754944E~37) = false +?= (0.123E~2, 0.11754944E~37) = false +< (0.123E~2, 0.5877472E~38) = false +> (0.123E~2, 0.5877472E~38) = true +== (0.123E~2, 0.5877472E~38) = false +?= (0.123E~2, 0.5877472E~38) = false +< (0.123E~2, 0.1E~44) = false +> (0.123E~2, 0.1E~44) = true +== (0.123E~2, 0.1E~44) = false +?= (0.123E~2, 0.1E~44) = false +< (0.123E~2, 0.0) = false +> (0.123E~2, 0.0) = true +== (0.123E~2, 0.0) = false +?= (0.123E~2, 0.0) = false +< (0.123E~2, ~0.34028235E39) = false +> (0.123E~2, ~0.34028235E39) = true +== (0.123E~2, ~0.34028235E39) = false +?= (0.123E~2, ~0.34028235E39) = false +< (0.123E~2, ~0.17014117E39) = false +> (0.123E~2, ~0.17014117E39) = true +== (0.123E~2, ~0.17014117E39) = false +?= (0.123E~2, ~0.17014117E39) = false +< (0.123E~2, ~0.123E4) = false +> (0.123E~2, ~0.123E4) = true +== (0.123E~2, ~0.123E4) = false +?= (0.123E~2, ~0.123E4) = false +< (0.123E~2, ~0.123E2) = false +> (0.123E~2, ~0.123E2) = true +== (0.123E~2, ~0.123E2) = false +?= (0.123E~2, ~0.123E2) = false +< (0.123E~2, ~0.31415927E1) = false +> (0.123E~2, ~0.31415927E1) = true +== (0.123E~2, ~0.31415927E1) = false +?= (0.123E~2, ~0.31415927E1) = false +< (0.123E~2, ~0.27182817E1) = false +> (0.123E~2, ~0.27182817E1) = true +== (0.123E~2, ~0.27182817E1) = false +?= (0.123E~2, ~0.27182817E1) = false +< (0.123E~2, ~0.123E1) = false +> (0.123E~2, ~0.123E1) = true +== (0.123E~2, ~0.123E1) = false +?= (0.123E~2, ~0.123E1) = false +< (0.123E~2, ~0.123) = false +> (0.123E~2, ~0.123) = true +== (0.123E~2, ~0.123) = false +?= (0.123E~2, ~0.123) = false +< (0.123E~2, ~0.123E~2) = false +> (0.123E~2, ~0.123E~2) = true +== (0.123E~2, ~0.123E~2) = false +?= (0.123E~2, ~0.123E~2) = false +< (0.123E~2, ~0.11754944E~37) = false +> (0.123E~2, ~0.11754944E~37) = true +== (0.123E~2, ~0.11754944E~37) = false +?= (0.123E~2, ~0.11754944E~37) = false +< (0.123E~2, ~0.5877472E~38) = false +> (0.123E~2, ~0.5877472E~38) = true +== (0.123E~2, ~0.5877472E~38) = false +?= (0.123E~2, ~0.5877472E~38) = false +< (0.123E~2, ~0.1E~44) = false +> (0.123E~2, ~0.1E~44) = true +== (0.123E~2, ~0.1E~44) = false +?= (0.123E~2, ~0.1E~44) = false +< (0.123E~2, ~0.0) = false +> (0.123E~2, ~0.0) = true +== (0.123E~2, ~0.0) = false +?= (0.123E~2, ~0.0) = false +< (0.11754944E~37, 0.34028235E39) = true +> (0.11754944E~37, 0.34028235E39) = false +== (0.11754944E~37, 0.34028235E39) = false +?= (0.11754944E~37, 0.34028235E39) = false +< (0.11754944E~37, 0.17014117E39) = true +> (0.11754944E~37, 0.17014117E39) = false +== (0.11754944E~37, 0.17014117E39) = false +?= (0.11754944E~37, 0.17014117E39) = false +< (0.11754944E~37, 0.123E4) = true +> (0.11754944E~37, 0.123E4) = false +== (0.11754944E~37, 0.123E4) = false +?= (0.11754944E~37, 0.123E4) = false +< (0.11754944E~37, 0.123E2) = true +> (0.11754944E~37, 0.123E2) = false +== (0.11754944E~37, 0.123E2) = false +?= (0.11754944E~37, 0.123E2) = false +< (0.11754944E~37, 0.31415927E1) = true +> (0.11754944E~37, 0.31415927E1) = false +== (0.11754944E~37, 0.31415927E1) = false +?= (0.11754944E~37, 0.31415927E1) = false +< (0.11754944E~37, 0.27182817E1) = true +> (0.11754944E~37, 0.27182817E1) = false +== (0.11754944E~37, 0.27182817E1) = false +?= (0.11754944E~37, 0.27182817E1) = false +< (0.11754944E~37, 0.123E1) = true +> (0.11754944E~37, 0.123E1) = false +== (0.11754944E~37, 0.123E1) = false +?= (0.11754944E~37, 0.123E1) = false +< (0.11754944E~37, 0.123) = true +> (0.11754944E~37, 0.123) = false +== (0.11754944E~37, 0.123) = false +?= (0.11754944E~37, 0.123) = false +< (0.11754944E~37, 0.123E~2) = true +> (0.11754944E~37, 0.123E~2) = false +== (0.11754944E~37, 0.123E~2) = false +?= (0.11754944E~37, 0.123E~2) = false +< (0.11754944E~37, 0.11754944E~37) = false +> (0.11754944E~37, 0.11754944E~37) = false +== (0.11754944E~37, 0.11754944E~37) = true +?= (0.11754944E~37, 0.11754944E~37) = true +< (0.11754944E~37, 0.5877472E~38) = false +> (0.11754944E~37, 0.5877472E~38) = true +== (0.11754944E~37, 0.5877472E~38) = false +?= (0.11754944E~37, 0.5877472E~38) = false +< (0.11754944E~37, 0.1E~44) = false +> (0.11754944E~37, 0.1E~44) = true +== (0.11754944E~37, 0.1E~44) = false +?= (0.11754944E~37, 0.1E~44) = false +< (0.11754944E~37, 0.0) = false +> (0.11754944E~37, 0.0) = true +== (0.11754944E~37, 0.0) = false +?= (0.11754944E~37, 0.0) = false +< (0.11754944E~37, ~0.34028235E39) = false +> (0.11754944E~37, ~0.34028235E39) = true +== (0.11754944E~37, ~0.34028235E39) = false +?= (0.11754944E~37, ~0.34028235E39) = false +< (0.11754944E~37, ~0.17014117E39) = false +> (0.11754944E~37, ~0.17014117E39) = true +== (0.11754944E~37, ~0.17014117E39) = false +?= (0.11754944E~37, ~0.17014117E39) = false +< (0.11754944E~37, ~0.123E4) = false +> (0.11754944E~37, ~0.123E4) = true +== (0.11754944E~37, ~0.123E4) = false +?= (0.11754944E~37, ~0.123E4) = false +< (0.11754944E~37, ~0.123E2) = false +> (0.11754944E~37, ~0.123E2) = true +== (0.11754944E~37, ~0.123E2) = false +?= (0.11754944E~37, ~0.123E2) = false +< (0.11754944E~37, ~0.31415927E1) = false +> (0.11754944E~37, ~0.31415927E1) = true +== (0.11754944E~37, ~0.31415927E1) = false +?= (0.11754944E~37, ~0.31415927E1) = false +< (0.11754944E~37, ~0.27182817E1) = false +> (0.11754944E~37, ~0.27182817E1) = true +== (0.11754944E~37, ~0.27182817E1) = false +?= (0.11754944E~37, ~0.27182817E1) = false +< (0.11754944E~37, ~0.123E1) = false +> (0.11754944E~37, ~0.123E1) = true +== (0.11754944E~37, ~0.123E1) = false +?= (0.11754944E~37, ~0.123E1) = false +< (0.11754944E~37, ~0.123) = false +> (0.11754944E~37, ~0.123) = true +== (0.11754944E~37, ~0.123) = false +?= (0.11754944E~37, ~0.123) = false +< (0.11754944E~37, ~0.123E~2) = false +> (0.11754944E~37, ~0.123E~2) = true +== (0.11754944E~37, ~0.123E~2) = false +?= (0.11754944E~37, ~0.123E~2) = false +< (0.11754944E~37, ~0.11754944E~37) = false +> (0.11754944E~37, ~0.11754944E~37) = true +== (0.11754944E~37, ~0.11754944E~37) = false +?= (0.11754944E~37, ~0.11754944E~37) = false +< (0.11754944E~37, ~0.5877472E~38) = false +> (0.11754944E~37, ~0.5877472E~38) = true +== (0.11754944E~37, ~0.5877472E~38) = false +?= (0.11754944E~37, ~0.5877472E~38) = false +< (0.11754944E~37, ~0.1E~44) = false +> (0.11754944E~37, ~0.1E~44) = true +== (0.11754944E~37, ~0.1E~44) = false +?= (0.11754944E~37, ~0.1E~44) = false +< (0.11754944E~37, ~0.0) = false +> (0.11754944E~37, ~0.0) = true +== (0.11754944E~37, ~0.0) = false +?= (0.11754944E~37, ~0.0) = false +< (0.5877472E~38, 0.34028235E39) = true +> (0.5877472E~38, 0.34028235E39) = false +== (0.5877472E~38, 0.34028235E39) = false +?= (0.5877472E~38, 0.34028235E39) = false +< (0.5877472E~38, 0.17014117E39) = true +> (0.5877472E~38, 0.17014117E39) = false +== (0.5877472E~38, 0.17014117E39) = false +?= (0.5877472E~38, 0.17014117E39) = false +< (0.5877472E~38, 0.123E4) = true +> (0.5877472E~38, 0.123E4) = false +== (0.5877472E~38, 0.123E4) = false +?= (0.5877472E~38, 0.123E4) = false +< (0.5877472E~38, 0.123E2) = true +> (0.5877472E~38, 0.123E2) = false +== (0.5877472E~38, 0.123E2) = false +?= (0.5877472E~38, 0.123E2) = false +< (0.5877472E~38, 0.31415927E1) = true +> (0.5877472E~38, 0.31415927E1) = false +== (0.5877472E~38, 0.31415927E1) = false +?= (0.5877472E~38, 0.31415927E1) = false +< (0.5877472E~38, 0.27182817E1) = true +> (0.5877472E~38, 0.27182817E1) = false +== (0.5877472E~38, 0.27182817E1) = false +?= (0.5877472E~38, 0.27182817E1) = false +< (0.5877472E~38, 0.123E1) = true +> (0.5877472E~38, 0.123E1) = false +== (0.5877472E~38, 0.123E1) = false +?= (0.5877472E~38, 0.123E1) = false +< (0.5877472E~38, 0.123) = true +> (0.5877472E~38, 0.123) = false +== (0.5877472E~38, 0.123) = false +?= (0.5877472E~38, 0.123) = false +< (0.5877472E~38, 0.123E~2) = true +> (0.5877472E~38, 0.123E~2) = false +== (0.5877472E~38, 0.123E~2) = false +?= (0.5877472E~38, 0.123E~2) = false +< (0.5877472E~38, 0.11754944E~37) = true +> (0.5877472E~38, 0.11754944E~37) = false +== (0.5877472E~38, 0.11754944E~37) = false +?= (0.5877472E~38, 0.11754944E~37) = false +< (0.5877472E~38, 0.5877472E~38) = false +> (0.5877472E~38, 0.5877472E~38) = false +== (0.5877472E~38, 0.5877472E~38) = true +?= (0.5877472E~38, 0.5877472E~38) = true +< (0.5877472E~38, 0.1E~44) = false +> (0.5877472E~38, 0.1E~44) = true +== (0.5877472E~38, 0.1E~44) = false +?= (0.5877472E~38, 0.1E~44) = false +< (0.5877472E~38, 0.0) = false +> (0.5877472E~38, 0.0) = true +== (0.5877472E~38, 0.0) = false +?= (0.5877472E~38, 0.0) = false +< (0.5877472E~38, ~0.34028235E39) = false +> (0.5877472E~38, ~0.34028235E39) = true +== (0.5877472E~38, ~0.34028235E39) = false +?= (0.5877472E~38, ~0.34028235E39) = false +< (0.5877472E~38, ~0.17014117E39) = false +> (0.5877472E~38, ~0.17014117E39) = true +== (0.5877472E~38, ~0.17014117E39) = false +?= (0.5877472E~38, ~0.17014117E39) = false +< (0.5877472E~38, ~0.123E4) = false +> (0.5877472E~38, ~0.123E4) = true +== (0.5877472E~38, ~0.123E4) = false +?= (0.5877472E~38, ~0.123E4) = false +< (0.5877472E~38, ~0.123E2) = false +> (0.5877472E~38, ~0.123E2) = true +== (0.5877472E~38, ~0.123E2) = false +?= (0.5877472E~38, ~0.123E2) = false +< (0.5877472E~38, ~0.31415927E1) = false +> (0.5877472E~38, ~0.31415927E1) = true +== (0.5877472E~38, ~0.31415927E1) = false +?= (0.5877472E~38, ~0.31415927E1) = false +< (0.5877472E~38, ~0.27182817E1) = false +> (0.5877472E~38, ~0.27182817E1) = true +== (0.5877472E~38, ~0.27182817E1) = false +?= (0.5877472E~38, ~0.27182817E1) = false +< (0.5877472E~38, ~0.123E1) = false +> (0.5877472E~38, ~0.123E1) = true +== (0.5877472E~38, ~0.123E1) = false +?= (0.5877472E~38, ~0.123E1) = false +< (0.5877472E~38, ~0.123) = false +> (0.5877472E~38, ~0.123) = true +== (0.5877472E~38, ~0.123) = false +?= (0.5877472E~38, ~0.123) = false +< (0.5877472E~38, ~0.123E~2) = false +> (0.5877472E~38, ~0.123E~2) = true +== (0.5877472E~38, ~0.123E~2) = false +?= (0.5877472E~38, ~0.123E~2) = false +< (0.5877472E~38, ~0.11754944E~37) = false +> (0.5877472E~38, ~0.11754944E~37) = true +== (0.5877472E~38, ~0.11754944E~37) = false +?= (0.5877472E~38, ~0.11754944E~37) = false +< (0.5877472E~38, ~0.5877472E~38) = false +> (0.5877472E~38, ~0.5877472E~38) = true +== (0.5877472E~38, ~0.5877472E~38) = false +?= (0.5877472E~38, ~0.5877472E~38) = false +< (0.5877472E~38, ~0.1E~44) = false +> (0.5877472E~38, ~0.1E~44) = true +== (0.5877472E~38, ~0.1E~44) = false +?= (0.5877472E~38, ~0.1E~44) = false +< (0.5877472E~38, ~0.0) = false +> (0.5877472E~38, ~0.0) = true +== (0.5877472E~38, ~0.0) = false +?= (0.5877472E~38, ~0.0) = false +< (0.1E~44, 0.34028235E39) = true +> (0.1E~44, 0.34028235E39) = false +== (0.1E~44, 0.34028235E39) = false +?= (0.1E~44, 0.34028235E39) = false +< (0.1E~44, 0.17014117E39) = true +> (0.1E~44, 0.17014117E39) = false +== (0.1E~44, 0.17014117E39) = false +?= (0.1E~44, 0.17014117E39) = false +< (0.1E~44, 0.123E4) = true +> (0.1E~44, 0.123E4) = false +== (0.1E~44, 0.123E4) = false +?= (0.1E~44, 0.123E4) = false +< (0.1E~44, 0.123E2) = true +> (0.1E~44, 0.123E2) = false +== (0.1E~44, 0.123E2) = false +?= (0.1E~44, 0.123E2) = false +< (0.1E~44, 0.31415927E1) = true +> (0.1E~44, 0.31415927E1) = false +== (0.1E~44, 0.31415927E1) = false +?= (0.1E~44, 0.31415927E1) = false +< (0.1E~44, 0.27182817E1) = true +> (0.1E~44, 0.27182817E1) = false +== (0.1E~44, 0.27182817E1) = false +?= (0.1E~44, 0.27182817E1) = false +< (0.1E~44, 0.123E1) = true +> (0.1E~44, 0.123E1) = false +== (0.1E~44, 0.123E1) = false +?= (0.1E~44, 0.123E1) = false +< (0.1E~44, 0.123) = true +> (0.1E~44, 0.123) = false +== (0.1E~44, 0.123) = false +?= (0.1E~44, 0.123) = false +< (0.1E~44, 0.123E~2) = true +> (0.1E~44, 0.123E~2) = false +== (0.1E~44, 0.123E~2) = false +?= (0.1E~44, 0.123E~2) = false +< (0.1E~44, 0.11754944E~37) = true +> (0.1E~44, 0.11754944E~37) = false +== (0.1E~44, 0.11754944E~37) = false +?= (0.1E~44, 0.11754944E~37) = false +< (0.1E~44, 0.5877472E~38) = true +> (0.1E~44, 0.5877472E~38) = false +== (0.1E~44, 0.5877472E~38) = false +?= (0.1E~44, 0.5877472E~38) = false +< (0.1E~44, 0.1E~44) = false +> (0.1E~44, 0.1E~44) = false +== (0.1E~44, 0.1E~44) = true +?= (0.1E~44, 0.1E~44) = true +< (0.1E~44, 0.0) = false +> (0.1E~44, 0.0) = true +== (0.1E~44, 0.0) = false +?= (0.1E~44, 0.0) = false +< (0.1E~44, ~0.34028235E39) = false +> (0.1E~44, ~0.34028235E39) = true +== (0.1E~44, ~0.34028235E39) = false +?= (0.1E~44, ~0.34028235E39) = false +< (0.1E~44, ~0.17014117E39) = false +> (0.1E~44, ~0.17014117E39) = true +== (0.1E~44, ~0.17014117E39) = false +?= (0.1E~44, ~0.17014117E39) = false +< (0.1E~44, ~0.123E4) = false +> (0.1E~44, ~0.123E4) = true +== (0.1E~44, ~0.123E4) = false +?= (0.1E~44, ~0.123E4) = false +< (0.1E~44, ~0.123E2) = false +> (0.1E~44, ~0.123E2) = true +== (0.1E~44, ~0.123E2) = false +?= (0.1E~44, ~0.123E2) = false +< (0.1E~44, ~0.31415927E1) = false +> (0.1E~44, ~0.31415927E1) = true +== (0.1E~44, ~0.31415927E1) = false +?= (0.1E~44, ~0.31415927E1) = false +< (0.1E~44, ~0.27182817E1) = false +> (0.1E~44, ~0.27182817E1) = true +== (0.1E~44, ~0.27182817E1) = false +?= (0.1E~44, ~0.27182817E1) = false +< (0.1E~44, ~0.123E1) = false +> (0.1E~44, ~0.123E1) = true +== (0.1E~44, ~0.123E1) = false +?= (0.1E~44, ~0.123E1) = false +< (0.1E~44, ~0.123) = false +> (0.1E~44, ~0.123) = true +== (0.1E~44, ~0.123) = false +?= (0.1E~44, ~0.123) = false +< (0.1E~44, ~0.123E~2) = false +> (0.1E~44, ~0.123E~2) = true +== (0.1E~44, ~0.123E~2) = false +?= (0.1E~44, ~0.123E~2) = false +< (0.1E~44, ~0.11754944E~37) = false +> (0.1E~44, ~0.11754944E~37) = true +== (0.1E~44, ~0.11754944E~37) = false +?= (0.1E~44, ~0.11754944E~37) = false +< (0.1E~44, ~0.5877472E~38) = false +> (0.1E~44, ~0.5877472E~38) = true +== (0.1E~44, ~0.5877472E~38) = false +?= (0.1E~44, ~0.5877472E~38) = false +< (0.1E~44, ~0.1E~44) = false +> (0.1E~44, ~0.1E~44) = true +== (0.1E~44, ~0.1E~44) = false +?= (0.1E~44, ~0.1E~44) = false +< (0.1E~44, ~0.0) = false +> (0.1E~44, ~0.0) = true +== (0.1E~44, ~0.0) = false +?= (0.1E~44, ~0.0) = false +< (0.0, 0.34028235E39) = true +> (0.0, 0.34028235E39) = false +== (0.0, 0.34028235E39) = false +?= (0.0, 0.34028235E39) = false +< (0.0, 0.17014117E39) = true +> (0.0, 0.17014117E39) = false +== (0.0, 0.17014117E39) = false +?= (0.0, 0.17014117E39) = false +< (0.0, 0.123E4) = true +> (0.0, 0.123E4) = false +== (0.0, 0.123E4) = false +?= (0.0, 0.123E4) = false +< (0.0, 0.123E2) = true +> (0.0, 0.123E2) = false +== (0.0, 0.123E2) = false +?= (0.0, 0.123E2) = false +< (0.0, 0.31415927E1) = true +> (0.0, 0.31415927E1) = false +== (0.0, 0.31415927E1) = false +?= (0.0, 0.31415927E1) = false +< (0.0, 0.27182817E1) = true +> (0.0, 0.27182817E1) = false +== (0.0, 0.27182817E1) = false +?= (0.0, 0.27182817E1) = false +< (0.0, 0.123E1) = true +> (0.0, 0.123E1) = false +== (0.0, 0.123E1) = false +?= (0.0, 0.123E1) = false +< (0.0, 0.123) = true +> (0.0, 0.123) = false +== (0.0, 0.123) = false +?= (0.0, 0.123) = false +< (0.0, 0.123E~2) = true +> (0.0, 0.123E~2) = false +== (0.0, 0.123E~2) = false +?= (0.0, 0.123E~2) = false +< (0.0, 0.11754944E~37) = true +> (0.0, 0.11754944E~37) = false +== (0.0, 0.11754944E~37) = false +?= (0.0, 0.11754944E~37) = false +< (0.0, 0.5877472E~38) = true +> (0.0, 0.5877472E~38) = false +== (0.0, 0.5877472E~38) = false +?= (0.0, 0.5877472E~38) = false +< (0.0, 0.1E~44) = true +> (0.0, 0.1E~44) = false +== (0.0, 0.1E~44) = false +?= (0.0, 0.1E~44) = false +< (0.0, 0.0) = false +> (0.0, 0.0) = false +== (0.0, 0.0) = true +?= (0.0, 0.0) = true +< (0.0, ~0.34028235E39) = false +> (0.0, ~0.34028235E39) = true +== (0.0, ~0.34028235E39) = false +?= (0.0, ~0.34028235E39) = false +< (0.0, ~0.17014117E39) = false +> (0.0, ~0.17014117E39) = true +== (0.0, ~0.17014117E39) = false +?= (0.0, ~0.17014117E39) = false +< (0.0, ~0.123E4) = false +> (0.0, ~0.123E4) = true +== (0.0, ~0.123E4) = false +?= (0.0, ~0.123E4) = false +< (0.0, ~0.123E2) = false +> (0.0, ~0.123E2) = true +== (0.0, ~0.123E2) = false +?= (0.0, ~0.123E2) = false +< (0.0, ~0.31415927E1) = false +> (0.0, ~0.31415927E1) = true +== (0.0, ~0.31415927E1) = false +?= (0.0, ~0.31415927E1) = false +< (0.0, ~0.27182817E1) = false +> (0.0, ~0.27182817E1) = true +== (0.0, ~0.27182817E1) = false +?= (0.0, ~0.27182817E1) = false +< (0.0, ~0.123E1) = false +> (0.0, ~0.123E1) = true +== (0.0, ~0.123E1) = false +?= (0.0, ~0.123E1) = false +< (0.0, ~0.123) = false +> (0.0, ~0.123) = true +== (0.0, ~0.123) = false +?= (0.0, ~0.123) = false +< (0.0, ~0.123E~2) = false +> (0.0, ~0.123E~2) = true +== (0.0, ~0.123E~2) = false +?= (0.0, ~0.123E~2) = false +< (0.0, ~0.11754944E~37) = false +> (0.0, ~0.11754944E~37) = true +== (0.0, ~0.11754944E~37) = false +?= (0.0, ~0.11754944E~37) = false +< (0.0, ~0.5877472E~38) = false +> (0.0, ~0.5877472E~38) = true +== (0.0, ~0.5877472E~38) = false +?= (0.0, ~0.5877472E~38) = false +< (0.0, ~0.1E~44) = false +> (0.0, ~0.1E~44) = true +== (0.0, ~0.1E~44) = false +?= (0.0, ~0.1E~44) = false +< (0.0, ~0.0) = false +> (0.0, ~0.0) = false +== (0.0, ~0.0) = true +?= (0.0, ~0.0) = true +< (~0.34028235E39, 0.34028235E39) = true +> (~0.34028235E39, 0.34028235E39) = false +== (~0.34028235E39, 0.34028235E39) = false +?= (~0.34028235E39, 0.34028235E39) = false +< (~0.34028235E39, 0.17014117E39) = true +> (~0.34028235E39, 0.17014117E39) = false +== (~0.34028235E39, 0.17014117E39) = false +?= (~0.34028235E39, 0.17014117E39) = false +< (~0.34028235E39, 0.123E4) = true +> (~0.34028235E39, 0.123E4) = false +== (~0.34028235E39, 0.123E4) = false +?= (~0.34028235E39, 0.123E4) = false +< (~0.34028235E39, 0.123E2) = true +> (~0.34028235E39, 0.123E2) = false +== (~0.34028235E39, 0.123E2) = false +?= (~0.34028235E39, 0.123E2) = false +< (~0.34028235E39, 0.31415927E1) = true +> (~0.34028235E39, 0.31415927E1) = false +== (~0.34028235E39, 0.31415927E1) = false +?= (~0.34028235E39, 0.31415927E1) = false +< (~0.34028235E39, 0.27182817E1) = true +> (~0.34028235E39, 0.27182817E1) = false +== (~0.34028235E39, 0.27182817E1) = false +?= (~0.34028235E39, 0.27182817E1) = false +< (~0.34028235E39, 0.123E1) = true +> (~0.34028235E39, 0.123E1) = false +== (~0.34028235E39, 0.123E1) = false +?= (~0.34028235E39, 0.123E1) = false +< (~0.34028235E39, 0.123) = true +> (~0.34028235E39, 0.123) = false +== (~0.34028235E39, 0.123) = false +?= (~0.34028235E39, 0.123) = false +< (~0.34028235E39, 0.123E~2) = true +> (~0.34028235E39, 0.123E~2) = false +== (~0.34028235E39, 0.123E~2) = false +?= (~0.34028235E39, 0.123E~2) = false +< (~0.34028235E39, 0.11754944E~37) = true +> (~0.34028235E39, 0.11754944E~37) = false +== (~0.34028235E39, 0.11754944E~37) = false +?= (~0.34028235E39, 0.11754944E~37) = false +< (~0.34028235E39, 0.5877472E~38) = true +> (~0.34028235E39, 0.5877472E~38) = false +== (~0.34028235E39, 0.5877472E~38) = false +?= (~0.34028235E39, 0.5877472E~38) = false +< (~0.34028235E39, 0.1E~44) = true +> (~0.34028235E39, 0.1E~44) = false +== (~0.34028235E39, 0.1E~44) = false +?= (~0.34028235E39, 0.1E~44) = false +< (~0.34028235E39, 0.0) = true +> (~0.34028235E39, 0.0) = false +== (~0.34028235E39, 0.0) = false +?= (~0.34028235E39, 0.0) = false +< (~0.34028235E39, ~0.34028235E39) = false +> (~0.34028235E39, ~0.34028235E39) = false +== (~0.34028235E39, ~0.34028235E39) = true +?= (~0.34028235E39, ~0.34028235E39) = true +< (~0.34028235E39, ~0.17014117E39) = true +> (~0.34028235E39, ~0.17014117E39) = false +== (~0.34028235E39, ~0.17014117E39) = false +?= (~0.34028235E39, ~0.17014117E39) = false +< (~0.34028235E39, ~0.123E4) = true +> (~0.34028235E39, ~0.123E4) = false +== (~0.34028235E39, ~0.123E4) = false +?= (~0.34028235E39, ~0.123E4) = false +< (~0.34028235E39, ~0.123E2) = true +> (~0.34028235E39, ~0.123E2) = false +== (~0.34028235E39, ~0.123E2) = false +?= (~0.34028235E39, ~0.123E2) = false +< (~0.34028235E39, ~0.31415927E1) = true +> (~0.34028235E39, ~0.31415927E1) = false +== (~0.34028235E39, ~0.31415927E1) = false +?= (~0.34028235E39, ~0.31415927E1) = false +< (~0.34028235E39, ~0.27182817E1) = true +> (~0.34028235E39, ~0.27182817E1) = false +== (~0.34028235E39, ~0.27182817E1) = false +?= (~0.34028235E39, ~0.27182817E1) = false +< (~0.34028235E39, ~0.123E1) = true +> (~0.34028235E39, ~0.123E1) = false +== (~0.34028235E39, ~0.123E1) = false +?= (~0.34028235E39, ~0.123E1) = false +< (~0.34028235E39, ~0.123) = true +> (~0.34028235E39, ~0.123) = false +== (~0.34028235E39, ~0.123) = false +?= (~0.34028235E39, ~0.123) = false +< (~0.34028235E39, ~0.123E~2) = true +> (~0.34028235E39, ~0.123E~2) = false +== (~0.34028235E39, ~0.123E~2) = false +?= (~0.34028235E39, ~0.123E~2) = false +< (~0.34028235E39, ~0.11754944E~37) = true +> (~0.34028235E39, ~0.11754944E~37) = false +== (~0.34028235E39, ~0.11754944E~37) = false +?= (~0.34028235E39, ~0.11754944E~37) = false +< (~0.34028235E39, ~0.5877472E~38) = true +> (~0.34028235E39, ~0.5877472E~38) = false +== (~0.34028235E39, ~0.5877472E~38) = false +?= (~0.34028235E39, ~0.5877472E~38) = false +< (~0.34028235E39, ~0.1E~44) = true +> (~0.34028235E39, ~0.1E~44) = false +== (~0.34028235E39, ~0.1E~44) = false +?= (~0.34028235E39, ~0.1E~44) = false +< (~0.34028235E39, ~0.0) = true +> (~0.34028235E39, ~0.0) = false +== (~0.34028235E39, ~0.0) = false +?= (~0.34028235E39, ~0.0) = false +< (~0.17014117E39, 0.34028235E39) = true +> (~0.17014117E39, 0.34028235E39) = false +== (~0.17014117E39, 0.34028235E39) = false +?= (~0.17014117E39, 0.34028235E39) = false +< (~0.17014117E39, 0.17014117E39) = true +> (~0.17014117E39, 0.17014117E39) = false +== (~0.17014117E39, 0.17014117E39) = false +?= (~0.17014117E39, 0.17014117E39) = false +< (~0.17014117E39, 0.123E4) = true +> (~0.17014117E39, 0.123E4) = false +== (~0.17014117E39, 0.123E4) = false +?= (~0.17014117E39, 0.123E4) = false +< (~0.17014117E39, 0.123E2) = true +> (~0.17014117E39, 0.123E2) = false +== (~0.17014117E39, 0.123E2) = false +?= (~0.17014117E39, 0.123E2) = false +< (~0.17014117E39, 0.31415927E1) = true +> (~0.17014117E39, 0.31415927E1) = false +== (~0.17014117E39, 0.31415927E1) = false +?= (~0.17014117E39, 0.31415927E1) = false +< (~0.17014117E39, 0.27182817E1) = true +> (~0.17014117E39, 0.27182817E1) = false +== (~0.17014117E39, 0.27182817E1) = false +?= (~0.17014117E39, 0.27182817E1) = false +< (~0.17014117E39, 0.123E1) = true +> (~0.17014117E39, 0.123E1) = false +== (~0.17014117E39, 0.123E1) = false +?= (~0.17014117E39, 0.123E1) = false +< (~0.17014117E39, 0.123) = true +> (~0.17014117E39, 0.123) = false +== (~0.17014117E39, 0.123) = false +?= (~0.17014117E39, 0.123) = false +< (~0.17014117E39, 0.123E~2) = true +> (~0.17014117E39, 0.123E~2) = false +== (~0.17014117E39, 0.123E~2) = false +?= (~0.17014117E39, 0.123E~2) = false +< (~0.17014117E39, 0.11754944E~37) = true +> (~0.17014117E39, 0.11754944E~37) = false +== (~0.17014117E39, 0.11754944E~37) = false +?= (~0.17014117E39, 0.11754944E~37) = false +< (~0.17014117E39, 0.5877472E~38) = true +> (~0.17014117E39, 0.5877472E~38) = false +== (~0.17014117E39, 0.5877472E~38) = false +?= (~0.17014117E39, 0.5877472E~38) = false +< (~0.17014117E39, 0.1E~44) = true +> (~0.17014117E39, 0.1E~44) = false +== (~0.17014117E39, 0.1E~44) = false +?= (~0.17014117E39, 0.1E~44) = false +< (~0.17014117E39, 0.0) = true +> (~0.17014117E39, 0.0) = false +== (~0.17014117E39, 0.0) = false +?= (~0.17014117E39, 0.0) = false +< (~0.17014117E39, ~0.34028235E39) = false +> (~0.17014117E39, ~0.34028235E39) = true +== (~0.17014117E39, ~0.34028235E39) = false +?= (~0.17014117E39, ~0.34028235E39) = false +< (~0.17014117E39, ~0.17014117E39) = false +> (~0.17014117E39, ~0.17014117E39) = false +== (~0.17014117E39, ~0.17014117E39) = true +?= (~0.17014117E39, ~0.17014117E39) = true +< (~0.17014117E39, ~0.123E4) = true +> (~0.17014117E39, ~0.123E4) = false +== (~0.17014117E39, ~0.123E4) = false +?= (~0.17014117E39, ~0.123E4) = false +< (~0.17014117E39, ~0.123E2) = true +> (~0.17014117E39, ~0.123E2) = false +== (~0.17014117E39, ~0.123E2) = false +?= (~0.17014117E39, ~0.123E2) = false +< (~0.17014117E39, ~0.31415927E1) = true +> (~0.17014117E39, ~0.31415927E1) = false +== (~0.17014117E39, ~0.31415927E1) = false +?= (~0.17014117E39, ~0.31415927E1) = false +< (~0.17014117E39, ~0.27182817E1) = true +> (~0.17014117E39, ~0.27182817E1) = false +== (~0.17014117E39, ~0.27182817E1) = false +?= (~0.17014117E39, ~0.27182817E1) = false +< (~0.17014117E39, ~0.123E1) = true +> (~0.17014117E39, ~0.123E1) = false +== (~0.17014117E39, ~0.123E1) = false +?= (~0.17014117E39, ~0.123E1) = false +< (~0.17014117E39, ~0.123) = true +> (~0.17014117E39, ~0.123) = false +== (~0.17014117E39, ~0.123) = false +?= (~0.17014117E39, ~0.123) = false +< (~0.17014117E39, ~0.123E~2) = true +> (~0.17014117E39, ~0.123E~2) = false +== (~0.17014117E39, ~0.123E~2) = false +?= (~0.17014117E39, ~0.123E~2) = false +< (~0.17014117E39, ~0.11754944E~37) = true +> (~0.17014117E39, ~0.11754944E~37) = false +== (~0.17014117E39, ~0.11754944E~37) = false +?= (~0.17014117E39, ~0.11754944E~37) = false +< (~0.17014117E39, ~0.5877472E~38) = true +> (~0.17014117E39, ~0.5877472E~38) = false +== (~0.17014117E39, ~0.5877472E~38) = false +?= (~0.17014117E39, ~0.5877472E~38) = false +< (~0.17014117E39, ~0.1E~44) = true +> (~0.17014117E39, ~0.1E~44) = false +== (~0.17014117E39, ~0.1E~44) = false +?= (~0.17014117E39, ~0.1E~44) = false +< (~0.17014117E39, ~0.0) = true +> (~0.17014117E39, ~0.0) = false +== (~0.17014117E39, ~0.0) = false +?= (~0.17014117E39, ~0.0) = false +< (~0.123E4, 0.34028235E39) = true +> (~0.123E4, 0.34028235E39) = false +== (~0.123E4, 0.34028235E39) = false +?= (~0.123E4, 0.34028235E39) = false +< (~0.123E4, 0.17014117E39) = true +> (~0.123E4, 0.17014117E39) = false +== (~0.123E4, 0.17014117E39) = false +?= (~0.123E4, 0.17014117E39) = false +< (~0.123E4, 0.123E4) = true +> (~0.123E4, 0.123E4) = false +== (~0.123E4, 0.123E4) = false +?= (~0.123E4, 0.123E4) = false +< (~0.123E4, 0.123E2) = true +> (~0.123E4, 0.123E2) = false +== (~0.123E4, 0.123E2) = false +?= (~0.123E4, 0.123E2) = false +< (~0.123E4, 0.31415927E1) = true +> (~0.123E4, 0.31415927E1) = false +== (~0.123E4, 0.31415927E1) = false +?= (~0.123E4, 0.31415927E1) = false +< (~0.123E4, 0.27182817E1) = true +> (~0.123E4, 0.27182817E1) = false +== (~0.123E4, 0.27182817E1) = false +?= (~0.123E4, 0.27182817E1) = false +< (~0.123E4, 0.123E1) = true +> (~0.123E4, 0.123E1) = false +== (~0.123E4, 0.123E1) = false +?= (~0.123E4, 0.123E1) = false +< (~0.123E4, 0.123) = true +> (~0.123E4, 0.123) = false +== (~0.123E4, 0.123) = false +?= (~0.123E4, 0.123) = false +< (~0.123E4, 0.123E~2) = true +> (~0.123E4, 0.123E~2) = false +== (~0.123E4, 0.123E~2) = false +?= (~0.123E4, 0.123E~2) = false +< (~0.123E4, 0.11754944E~37) = true +> (~0.123E4, 0.11754944E~37) = false +== (~0.123E4, 0.11754944E~37) = false +?= (~0.123E4, 0.11754944E~37) = false +< (~0.123E4, 0.5877472E~38) = true +> (~0.123E4, 0.5877472E~38) = false +== (~0.123E4, 0.5877472E~38) = false +?= (~0.123E4, 0.5877472E~38) = false +< (~0.123E4, 0.1E~44) = true +> (~0.123E4, 0.1E~44) = false +== (~0.123E4, 0.1E~44) = false +?= (~0.123E4, 0.1E~44) = false +< (~0.123E4, 0.0) = true +> (~0.123E4, 0.0) = false +== (~0.123E4, 0.0) = false +?= (~0.123E4, 0.0) = false +< (~0.123E4, ~0.34028235E39) = false +> (~0.123E4, ~0.34028235E39) = true +== (~0.123E4, ~0.34028235E39) = false +?= (~0.123E4, ~0.34028235E39) = false +< (~0.123E4, ~0.17014117E39) = false +> (~0.123E4, ~0.17014117E39) = true +== (~0.123E4, ~0.17014117E39) = false +?= (~0.123E4, ~0.17014117E39) = false +< (~0.123E4, ~0.123E4) = false +> (~0.123E4, ~0.123E4) = false +== (~0.123E4, ~0.123E4) = true +?= (~0.123E4, ~0.123E4) = true +< (~0.123E4, ~0.123E2) = true +> (~0.123E4, ~0.123E2) = false +== (~0.123E4, ~0.123E2) = false +?= (~0.123E4, ~0.123E2) = false +< (~0.123E4, ~0.31415927E1) = true +> (~0.123E4, ~0.31415927E1) = false +== (~0.123E4, ~0.31415927E1) = false +?= (~0.123E4, ~0.31415927E1) = false +< (~0.123E4, ~0.27182817E1) = true +> (~0.123E4, ~0.27182817E1) = false +== (~0.123E4, ~0.27182817E1) = false +?= (~0.123E4, ~0.27182817E1) = false +< (~0.123E4, ~0.123E1) = true +> (~0.123E4, ~0.123E1) = false +== (~0.123E4, ~0.123E1) = false +?= (~0.123E4, ~0.123E1) = false +< (~0.123E4, ~0.123) = true +> (~0.123E4, ~0.123) = false +== (~0.123E4, ~0.123) = false +?= (~0.123E4, ~0.123) = false +< (~0.123E4, ~0.123E~2) = true +> (~0.123E4, ~0.123E~2) = false +== (~0.123E4, ~0.123E~2) = false +?= (~0.123E4, ~0.123E~2) = false +< (~0.123E4, ~0.11754944E~37) = true +> (~0.123E4, ~0.11754944E~37) = false +== (~0.123E4, ~0.11754944E~37) = false +?= (~0.123E4, ~0.11754944E~37) = false +< (~0.123E4, ~0.5877472E~38) = true +> (~0.123E4, ~0.5877472E~38) = false +== (~0.123E4, ~0.5877472E~38) = false +?= (~0.123E4, ~0.5877472E~38) = false +< (~0.123E4, ~0.1E~44) = true +> (~0.123E4, ~0.1E~44) = false +== (~0.123E4, ~0.1E~44) = false +?= (~0.123E4, ~0.1E~44) = false +< (~0.123E4, ~0.0) = true +> (~0.123E4, ~0.0) = false +== (~0.123E4, ~0.0) = false +?= (~0.123E4, ~0.0) = false +< (~0.123E2, 0.34028235E39) = true +> (~0.123E2, 0.34028235E39) = false +== (~0.123E2, 0.34028235E39) = false +?= (~0.123E2, 0.34028235E39) = false +< (~0.123E2, 0.17014117E39) = true +> (~0.123E2, 0.17014117E39) = false +== (~0.123E2, 0.17014117E39) = false +?= (~0.123E2, 0.17014117E39) = false +< (~0.123E2, 0.123E4) = true +> (~0.123E2, 0.123E4) = false +== (~0.123E2, 0.123E4) = false +?= (~0.123E2, 0.123E4) = false +< (~0.123E2, 0.123E2) = true +> (~0.123E2, 0.123E2) = false +== (~0.123E2, 0.123E2) = false +?= (~0.123E2, 0.123E2) = false +< (~0.123E2, 0.31415927E1) = true +> (~0.123E2, 0.31415927E1) = false +== (~0.123E2, 0.31415927E1) = false +?= (~0.123E2, 0.31415927E1) = false +< (~0.123E2, 0.27182817E1) = true +> (~0.123E2, 0.27182817E1) = false +== (~0.123E2, 0.27182817E1) = false +?= (~0.123E2, 0.27182817E1) = false +< (~0.123E2, 0.123E1) = true +> (~0.123E2, 0.123E1) = false +== (~0.123E2, 0.123E1) = false +?= (~0.123E2, 0.123E1) = false +< (~0.123E2, 0.123) = true +> (~0.123E2, 0.123) = false +== (~0.123E2, 0.123) = false +?= (~0.123E2, 0.123) = false +< (~0.123E2, 0.123E~2) = true +> (~0.123E2, 0.123E~2) = false +== (~0.123E2, 0.123E~2) = false +?= (~0.123E2, 0.123E~2) = false +< (~0.123E2, 0.11754944E~37) = true +> (~0.123E2, 0.11754944E~37) = false +== (~0.123E2, 0.11754944E~37) = false +?= (~0.123E2, 0.11754944E~37) = false +< (~0.123E2, 0.5877472E~38) = true +> (~0.123E2, 0.5877472E~38) = false +== (~0.123E2, 0.5877472E~38) = false +?= (~0.123E2, 0.5877472E~38) = false +< (~0.123E2, 0.1E~44) = true +> (~0.123E2, 0.1E~44) = false +== (~0.123E2, 0.1E~44) = false +?= (~0.123E2, 0.1E~44) = false +< (~0.123E2, 0.0) = true +> (~0.123E2, 0.0) = false +== (~0.123E2, 0.0) = false +?= (~0.123E2, 0.0) = false +< (~0.123E2, ~0.34028235E39) = false +> (~0.123E2, ~0.34028235E39) = true +== (~0.123E2, ~0.34028235E39) = false +?= (~0.123E2, ~0.34028235E39) = false +< (~0.123E2, ~0.17014117E39) = false +> (~0.123E2, ~0.17014117E39) = true +== (~0.123E2, ~0.17014117E39) = false +?= (~0.123E2, ~0.17014117E39) = false +< (~0.123E2, ~0.123E4) = false +> (~0.123E2, ~0.123E4) = true +== (~0.123E2, ~0.123E4) = false +?= (~0.123E2, ~0.123E4) = false +< (~0.123E2, ~0.123E2) = false +> (~0.123E2, ~0.123E2) = false +== (~0.123E2, ~0.123E2) = true +?= (~0.123E2, ~0.123E2) = true +< (~0.123E2, ~0.31415927E1) = true +> (~0.123E2, ~0.31415927E1) = false +== (~0.123E2, ~0.31415927E1) = false +?= (~0.123E2, ~0.31415927E1) = false +< (~0.123E2, ~0.27182817E1) = true +> (~0.123E2, ~0.27182817E1) = false +== (~0.123E2, ~0.27182817E1) = false +?= (~0.123E2, ~0.27182817E1) = false +< (~0.123E2, ~0.123E1) = true +> (~0.123E2, ~0.123E1) = false +== (~0.123E2, ~0.123E1) = false +?= (~0.123E2, ~0.123E1) = false +< (~0.123E2, ~0.123) = true +> (~0.123E2, ~0.123) = false +== (~0.123E2, ~0.123) = false +?= (~0.123E2, ~0.123) = false +< (~0.123E2, ~0.123E~2) = true +> (~0.123E2, ~0.123E~2) = false +== (~0.123E2, ~0.123E~2) = false +?= (~0.123E2, ~0.123E~2) = false +< (~0.123E2, ~0.11754944E~37) = true +> (~0.123E2, ~0.11754944E~37) = false +== (~0.123E2, ~0.11754944E~37) = false +?= (~0.123E2, ~0.11754944E~37) = false +< (~0.123E2, ~0.5877472E~38) = true +> (~0.123E2, ~0.5877472E~38) = false +== (~0.123E2, ~0.5877472E~38) = false +?= (~0.123E2, ~0.5877472E~38) = false +< (~0.123E2, ~0.1E~44) = true +> (~0.123E2, ~0.1E~44) = false +== (~0.123E2, ~0.1E~44) = false +?= (~0.123E2, ~0.1E~44) = false +< (~0.123E2, ~0.0) = true +> (~0.123E2, ~0.0) = false +== (~0.123E2, ~0.0) = false +?= (~0.123E2, ~0.0) = false +< (~0.31415927E1, 0.34028235E39) = true +> (~0.31415927E1, 0.34028235E39) = false +== (~0.31415927E1, 0.34028235E39) = false +?= (~0.31415927E1, 0.34028235E39) = false +< (~0.31415927E1, 0.17014117E39) = true +> (~0.31415927E1, 0.17014117E39) = false +== (~0.31415927E1, 0.17014117E39) = false +?= (~0.31415927E1, 0.17014117E39) = false +< (~0.31415927E1, 0.123E4) = true +> (~0.31415927E1, 0.123E4) = false +== (~0.31415927E1, 0.123E4) = false +?= (~0.31415927E1, 0.123E4) = false +< (~0.31415927E1, 0.123E2) = true +> (~0.31415927E1, 0.123E2) = false +== (~0.31415927E1, 0.123E2) = false +?= (~0.31415927E1, 0.123E2) = false +< (~0.31415927E1, 0.31415927E1) = true +> (~0.31415927E1, 0.31415927E1) = false +== (~0.31415927E1, 0.31415927E1) = false +?= (~0.31415927E1, 0.31415927E1) = false +< (~0.31415927E1, 0.27182817E1) = true +> (~0.31415927E1, 0.27182817E1) = false +== (~0.31415927E1, 0.27182817E1) = false +?= (~0.31415927E1, 0.27182817E1) = false +< (~0.31415927E1, 0.123E1) = true +> (~0.31415927E1, 0.123E1) = false +== (~0.31415927E1, 0.123E1) = false +?= (~0.31415927E1, 0.123E1) = false +< (~0.31415927E1, 0.123) = true +> (~0.31415927E1, 0.123) = false +== (~0.31415927E1, 0.123) = false +?= (~0.31415927E1, 0.123) = false +< (~0.31415927E1, 0.123E~2) = true +> (~0.31415927E1, 0.123E~2) = false +== (~0.31415927E1, 0.123E~2) = false +?= (~0.31415927E1, 0.123E~2) = false +< (~0.31415927E1, 0.11754944E~37) = true +> (~0.31415927E1, 0.11754944E~37) = false +== (~0.31415927E1, 0.11754944E~37) = false +?= (~0.31415927E1, 0.11754944E~37) = false +< (~0.31415927E1, 0.5877472E~38) = true +> (~0.31415927E1, 0.5877472E~38) = false +== (~0.31415927E1, 0.5877472E~38) = false +?= (~0.31415927E1, 0.5877472E~38) = false +< (~0.31415927E1, 0.1E~44) = true +> (~0.31415927E1, 0.1E~44) = false +== (~0.31415927E1, 0.1E~44) = false +?= (~0.31415927E1, 0.1E~44) = false +< (~0.31415927E1, 0.0) = true +> (~0.31415927E1, 0.0) = false +== (~0.31415927E1, 0.0) = false +?= (~0.31415927E1, 0.0) = false +< (~0.31415927E1, ~0.34028235E39) = false +> (~0.31415927E1, ~0.34028235E39) = true +== (~0.31415927E1, ~0.34028235E39) = false +?= (~0.31415927E1, ~0.34028235E39) = false +< (~0.31415927E1, ~0.17014117E39) = false +> (~0.31415927E1, ~0.17014117E39) = true +== (~0.31415927E1, ~0.17014117E39) = false +?= (~0.31415927E1, ~0.17014117E39) = false +< (~0.31415927E1, ~0.123E4) = false +> (~0.31415927E1, ~0.123E4) = true +== (~0.31415927E1, ~0.123E4) = false +?= (~0.31415927E1, ~0.123E4) = false +< (~0.31415927E1, ~0.123E2) = false +> (~0.31415927E1, ~0.123E2) = true +== (~0.31415927E1, ~0.123E2) = false +?= (~0.31415927E1, ~0.123E2) = false +< (~0.31415927E1, ~0.31415927E1) = false +> (~0.31415927E1, ~0.31415927E1) = false +== (~0.31415927E1, ~0.31415927E1) = true +?= (~0.31415927E1, ~0.31415927E1) = true +< (~0.31415927E1, ~0.27182817E1) = true +> (~0.31415927E1, ~0.27182817E1) = false +== (~0.31415927E1, ~0.27182817E1) = false +?= (~0.31415927E1, ~0.27182817E1) = false +< (~0.31415927E1, ~0.123E1) = true +> (~0.31415927E1, ~0.123E1) = false +== (~0.31415927E1, ~0.123E1) = false +?= (~0.31415927E1, ~0.123E1) = false +< (~0.31415927E1, ~0.123) = true +> (~0.31415927E1, ~0.123) = false +== (~0.31415927E1, ~0.123) = false +?= (~0.31415927E1, ~0.123) = false +< (~0.31415927E1, ~0.123E~2) = true +> (~0.31415927E1, ~0.123E~2) = false +== (~0.31415927E1, ~0.123E~2) = false +?= (~0.31415927E1, ~0.123E~2) = false +< (~0.31415927E1, ~0.11754944E~37) = true +> (~0.31415927E1, ~0.11754944E~37) = false +== (~0.31415927E1, ~0.11754944E~37) = false +?= (~0.31415927E1, ~0.11754944E~37) = false +< (~0.31415927E1, ~0.5877472E~38) = true +> (~0.31415927E1, ~0.5877472E~38) = false +== (~0.31415927E1, ~0.5877472E~38) = false +?= (~0.31415927E1, ~0.5877472E~38) = false +< (~0.31415927E1, ~0.1E~44) = true +> (~0.31415927E1, ~0.1E~44) = false +== (~0.31415927E1, ~0.1E~44) = false +?= (~0.31415927E1, ~0.1E~44) = false +< (~0.31415927E1, ~0.0) = true +> (~0.31415927E1, ~0.0) = false +== (~0.31415927E1, ~0.0) = false +?= (~0.31415927E1, ~0.0) = false +< (~0.27182817E1, 0.34028235E39) = true +> (~0.27182817E1, 0.34028235E39) = false +== (~0.27182817E1, 0.34028235E39) = false +?= (~0.27182817E1, 0.34028235E39) = false +< (~0.27182817E1, 0.17014117E39) = true +> (~0.27182817E1, 0.17014117E39) = false +== (~0.27182817E1, 0.17014117E39) = false +?= (~0.27182817E1, 0.17014117E39) = false +< (~0.27182817E1, 0.123E4) = true +> (~0.27182817E1, 0.123E4) = false +== (~0.27182817E1, 0.123E4) = false +?= (~0.27182817E1, 0.123E4) = false +< (~0.27182817E1, 0.123E2) = true +> (~0.27182817E1, 0.123E2) = false +== (~0.27182817E1, 0.123E2) = false +?= (~0.27182817E1, 0.123E2) = false +< (~0.27182817E1, 0.31415927E1) = true +> (~0.27182817E1, 0.31415927E1) = false +== (~0.27182817E1, 0.31415927E1) = false +?= (~0.27182817E1, 0.31415927E1) = false +< (~0.27182817E1, 0.27182817E1) = true +> (~0.27182817E1, 0.27182817E1) = false +== (~0.27182817E1, 0.27182817E1) = false +?= (~0.27182817E1, 0.27182817E1) = false +< (~0.27182817E1, 0.123E1) = true +> (~0.27182817E1, 0.123E1) = false +== (~0.27182817E1, 0.123E1) = false +?= (~0.27182817E1, 0.123E1) = false +< (~0.27182817E1, 0.123) = true +> (~0.27182817E1, 0.123) = false +== (~0.27182817E1, 0.123) = false +?= (~0.27182817E1, 0.123) = false +< (~0.27182817E1, 0.123E~2) = true +> (~0.27182817E1, 0.123E~2) = false +== (~0.27182817E1, 0.123E~2) = false +?= (~0.27182817E1, 0.123E~2) = false +< (~0.27182817E1, 0.11754944E~37) = true +> (~0.27182817E1, 0.11754944E~37) = false +== (~0.27182817E1, 0.11754944E~37) = false +?= (~0.27182817E1, 0.11754944E~37) = false +< (~0.27182817E1, 0.5877472E~38) = true +> (~0.27182817E1, 0.5877472E~38) = false +== (~0.27182817E1, 0.5877472E~38) = false +?= (~0.27182817E1, 0.5877472E~38) = false +< (~0.27182817E1, 0.1E~44) = true +> (~0.27182817E1, 0.1E~44) = false +== (~0.27182817E1, 0.1E~44) = false +?= (~0.27182817E1, 0.1E~44) = false +< (~0.27182817E1, 0.0) = true +> (~0.27182817E1, 0.0) = false +== (~0.27182817E1, 0.0) = false +?= (~0.27182817E1, 0.0) = false +< (~0.27182817E1, ~0.34028235E39) = false +> (~0.27182817E1, ~0.34028235E39) = true +== (~0.27182817E1, ~0.34028235E39) = false +?= (~0.27182817E1, ~0.34028235E39) = false +< (~0.27182817E1, ~0.17014117E39) = false +> (~0.27182817E1, ~0.17014117E39) = true +== (~0.27182817E1, ~0.17014117E39) = false +?= (~0.27182817E1, ~0.17014117E39) = false +< (~0.27182817E1, ~0.123E4) = false +> (~0.27182817E1, ~0.123E4) = true +== (~0.27182817E1, ~0.123E4) = false +?= (~0.27182817E1, ~0.123E4) = false +< (~0.27182817E1, ~0.123E2) = false +> (~0.27182817E1, ~0.123E2) = true +== (~0.27182817E1, ~0.123E2) = false +?= (~0.27182817E1, ~0.123E2) = false +< (~0.27182817E1, ~0.31415927E1) = false +> (~0.27182817E1, ~0.31415927E1) = true +== (~0.27182817E1, ~0.31415927E1) = false +?= (~0.27182817E1, ~0.31415927E1) = false +< (~0.27182817E1, ~0.27182817E1) = false +> (~0.27182817E1, ~0.27182817E1) = false +== (~0.27182817E1, ~0.27182817E1) = true +?= (~0.27182817E1, ~0.27182817E1) = true +< (~0.27182817E1, ~0.123E1) = true +> (~0.27182817E1, ~0.123E1) = false +== (~0.27182817E1, ~0.123E1) = false +?= (~0.27182817E1, ~0.123E1) = false +< (~0.27182817E1, ~0.123) = true +> (~0.27182817E1, ~0.123) = false +== (~0.27182817E1, ~0.123) = false +?= (~0.27182817E1, ~0.123) = false +< (~0.27182817E1, ~0.123E~2) = true +> (~0.27182817E1, ~0.123E~2) = false +== (~0.27182817E1, ~0.123E~2) = false +?= (~0.27182817E1, ~0.123E~2) = false +< (~0.27182817E1, ~0.11754944E~37) = true +> (~0.27182817E1, ~0.11754944E~37) = false +== (~0.27182817E1, ~0.11754944E~37) = false +?= (~0.27182817E1, ~0.11754944E~37) = false +< (~0.27182817E1, ~0.5877472E~38) = true +> (~0.27182817E1, ~0.5877472E~38) = false +== (~0.27182817E1, ~0.5877472E~38) = false +?= (~0.27182817E1, ~0.5877472E~38) = false +< (~0.27182817E1, ~0.1E~44) = true +> (~0.27182817E1, ~0.1E~44) = false +== (~0.27182817E1, ~0.1E~44) = false +?= (~0.27182817E1, ~0.1E~44) = false +< (~0.27182817E1, ~0.0) = true +> (~0.27182817E1, ~0.0) = false +== (~0.27182817E1, ~0.0) = false +?= (~0.27182817E1, ~0.0) = false +< (~0.123E1, 0.34028235E39) = true +> (~0.123E1, 0.34028235E39) = false +== (~0.123E1, 0.34028235E39) = false +?= (~0.123E1, 0.34028235E39) = false +< (~0.123E1, 0.17014117E39) = true +> (~0.123E1, 0.17014117E39) = false +== (~0.123E1, 0.17014117E39) = false +?= (~0.123E1, 0.17014117E39) = false +< (~0.123E1, 0.123E4) = true +> (~0.123E1, 0.123E4) = false +== (~0.123E1, 0.123E4) = false +?= (~0.123E1, 0.123E4) = false +< (~0.123E1, 0.123E2) = true +> (~0.123E1, 0.123E2) = false +== (~0.123E1, 0.123E2) = false +?= (~0.123E1, 0.123E2) = false +< (~0.123E1, 0.31415927E1) = true +> (~0.123E1, 0.31415927E1) = false +== (~0.123E1, 0.31415927E1) = false +?= (~0.123E1, 0.31415927E1) = false +< (~0.123E1, 0.27182817E1) = true +> (~0.123E1, 0.27182817E1) = false +== (~0.123E1, 0.27182817E1) = false +?= (~0.123E1, 0.27182817E1) = false +< (~0.123E1, 0.123E1) = true +> (~0.123E1, 0.123E1) = false +== (~0.123E1, 0.123E1) = false +?= (~0.123E1, 0.123E1) = false +< (~0.123E1, 0.123) = true +> (~0.123E1, 0.123) = false +== (~0.123E1, 0.123) = false +?= (~0.123E1, 0.123) = false +< (~0.123E1, 0.123E~2) = true +> (~0.123E1, 0.123E~2) = false +== (~0.123E1, 0.123E~2) = false +?= (~0.123E1, 0.123E~2) = false +< (~0.123E1, 0.11754944E~37) = true +> (~0.123E1, 0.11754944E~37) = false +== (~0.123E1, 0.11754944E~37) = false +?= (~0.123E1, 0.11754944E~37) = false +< (~0.123E1, 0.5877472E~38) = true +> (~0.123E1, 0.5877472E~38) = false +== (~0.123E1, 0.5877472E~38) = false +?= (~0.123E1, 0.5877472E~38) = false +< (~0.123E1, 0.1E~44) = true +> (~0.123E1, 0.1E~44) = false +== (~0.123E1, 0.1E~44) = false +?= (~0.123E1, 0.1E~44) = false +< (~0.123E1, 0.0) = true +> (~0.123E1, 0.0) = false +== (~0.123E1, 0.0) = false +?= (~0.123E1, 0.0) = false +< (~0.123E1, ~0.34028235E39) = false +> (~0.123E1, ~0.34028235E39) = true +== (~0.123E1, ~0.34028235E39) = false +?= (~0.123E1, ~0.34028235E39) = false +< (~0.123E1, ~0.17014117E39) = false +> (~0.123E1, ~0.17014117E39) = true +== (~0.123E1, ~0.17014117E39) = false +?= (~0.123E1, ~0.17014117E39) = false +< (~0.123E1, ~0.123E4) = false +> (~0.123E1, ~0.123E4) = true +== (~0.123E1, ~0.123E4) = false +?= (~0.123E1, ~0.123E4) = false +< (~0.123E1, ~0.123E2) = false +> (~0.123E1, ~0.123E2) = true +== (~0.123E1, ~0.123E2) = false +?= (~0.123E1, ~0.123E2) = false +< (~0.123E1, ~0.31415927E1) = false +> (~0.123E1, ~0.31415927E1) = true +== (~0.123E1, ~0.31415927E1) = false +?= (~0.123E1, ~0.31415927E1) = false +< (~0.123E1, ~0.27182817E1) = false +> (~0.123E1, ~0.27182817E1) = true +== (~0.123E1, ~0.27182817E1) = false +?= (~0.123E1, ~0.27182817E1) = false +< (~0.123E1, ~0.123E1) = false +> (~0.123E1, ~0.123E1) = false +== (~0.123E1, ~0.123E1) = true +?= (~0.123E1, ~0.123E1) = true +< (~0.123E1, ~0.123) = true +> (~0.123E1, ~0.123) = false +== (~0.123E1, ~0.123) = false +?= (~0.123E1, ~0.123) = false +< (~0.123E1, ~0.123E~2) = true +> (~0.123E1, ~0.123E~2) = false +== (~0.123E1, ~0.123E~2) = false +?= (~0.123E1, ~0.123E~2) = false +< (~0.123E1, ~0.11754944E~37) = true +> (~0.123E1, ~0.11754944E~37) = false +== (~0.123E1, ~0.11754944E~37) = false +?= (~0.123E1, ~0.11754944E~37) = false +< (~0.123E1, ~0.5877472E~38) = true +> (~0.123E1, ~0.5877472E~38) = false +== (~0.123E1, ~0.5877472E~38) = false +?= (~0.123E1, ~0.5877472E~38) = false +< (~0.123E1, ~0.1E~44) = true +> (~0.123E1, ~0.1E~44) = false +== (~0.123E1, ~0.1E~44) = false +?= (~0.123E1, ~0.1E~44) = false +< (~0.123E1, ~0.0) = true +> (~0.123E1, ~0.0) = false +== (~0.123E1, ~0.0) = false +?= (~0.123E1, ~0.0) = false +< (~0.123, 0.34028235E39) = true +> (~0.123, 0.34028235E39) = false +== (~0.123, 0.34028235E39) = false +?= (~0.123, 0.34028235E39) = false +< (~0.123, 0.17014117E39) = true +> (~0.123, 0.17014117E39) = false +== (~0.123, 0.17014117E39) = false +?= (~0.123, 0.17014117E39) = false +< (~0.123, 0.123E4) = true +> (~0.123, 0.123E4) = false +== (~0.123, 0.123E4) = false +?= (~0.123, 0.123E4) = false +< (~0.123, 0.123E2) = true +> (~0.123, 0.123E2) = false +== (~0.123, 0.123E2) = false +?= (~0.123, 0.123E2) = false +< (~0.123, 0.31415927E1) = true +> (~0.123, 0.31415927E1) = false +== (~0.123, 0.31415927E1) = false +?= (~0.123, 0.31415927E1) = false +< (~0.123, 0.27182817E1) = true +> (~0.123, 0.27182817E1) = false +== (~0.123, 0.27182817E1) = false +?= (~0.123, 0.27182817E1) = false +< (~0.123, 0.123E1) = true +> (~0.123, 0.123E1) = false +== (~0.123, 0.123E1) = false +?= (~0.123, 0.123E1) = false +< (~0.123, 0.123) = true +> (~0.123, 0.123) = false +== (~0.123, 0.123) = false +?= (~0.123, 0.123) = false +< (~0.123, 0.123E~2) = true +> (~0.123, 0.123E~2) = false +== (~0.123, 0.123E~2) = false +?= (~0.123, 0.123E~2) = false +< (~0.123, 0.11754944E~37) = true +> (~0.123, 0.11754944E~37) = false +== (~0.123, 0.11754944E~37) = false +?= (~0.123, 0.11754944E~37) = false +< (~0.123, 0.5877472E~38) = true +> (~0.123, 0.5877472E~38) = false +== (~0.123, 0.5877472E~38) = false +?= (~0.123, 0.5877472E~38) = false +< (~0.123, 0.1E~44) = true +> (~0.123, 0.1E~44) = false +== (~0.123, 0.1E~44) = false +?= (~0.123, 0.1E~44) = false +< (~0.123, 0.0) = true +> (~0.123, 0.0) = false +== (~0.123, 0.0) = false +?= (~0.123, 0.0) = false +< (~0.123, ~0.34028235E39) = false +> (~0.123, ~0.34028235E39) = true +== (~0.123, ~0.34028235E39) = false +?= (~0.123, ~0.34028235E39) = false +< (~0.123, ~0.17014117E39) = false +> (~0.123, ~0.17014117E39) = true +== (~0.123, ~0.17014117E39) = false +?= (~0.123, ~0.17014117E39) = false +< (~0.123, ~0.123E4) = false +> (~0.123, ~0.123E4) = true +== (~0.123, ~0.123E4) = false +?= (~0.123, ~0.123E4) = false +< (~0.123, ~0.123E2) = false +> (~0.123, ~0.123E2) = true +== (~0.123, ~0.123E2) = false +?= (~0.123, ~0.123E2) = false +< (~0.123, ~0.31415927E1) = false +> (~0.123, ~0.31415927E1) = true +== (~0.123, ~0.31415927E1) = false +?= (~0.123, ~0.31415927E1) = false +< (~0.123, ~0.27182817E1) = false +> (~0.123, ~0.27182817E1) = true +== (~0.123, ~0.27182817E1) = false +?= (~0.123, ~0.27182817E1) = false +< (~0.123, ~0.123E1) = false +> (~0.123, ~0.123E1) = true +== (~0.123, ~0.123E1) = false +?= (~0.123, ~0.123E1) = false +< (~0.123, ~0.123) = false +> (~0.123, ~0.123) = false +== (~0.123, ~0.123) = true +?= (~0.123, ~0.123) = true +< (~0.123, ~0.123E~2) = true +> (~0.123, ~0.123E~2) = false +== (~0.123, ~0.123E~2) = false +?= (~0.123, ~0.123E~2) = false +< (~0.123, ~0.11754944E~37) = true +> (~0.123, ~0.11754944E~37) = false +== (~0.123, ~0.11754944E~37) = false +?= (~0.123, ~0.11754944E~37) = false +< (~0.123, ~0.5877472E~38) = true +> (~0.123, ~0.5877472E~38) = false +== (~0.123, ~0.5877472E~38) = false +?= (~0.123, ~0.5877472E~38) = false +< (~0.123, ~0.1E~44) = true +> (~0.123, ~0.1E~44) = false +== (~0.123, ~0.1E~44) = false +?= (~0.123, ~0.1E~44) = false +< (~0.123, ~0.0) = true +> (~0.123, ~0.0) = false +== (~0.123, ~0.0) = false +?= (~0.123, ~0.0) = false +< (~0.123E~2, 0.34028235E39) = true +> (~0.123E~2, 0.34028235E39) = false +== (~0.123E~2, 0.34028235E39) = false +?= (~0.123E~2, 0.34028235E39) = false +< (~0.123E~2, 0.17014117E39) = true +> (~0.123E~2, 0.17014117E39) = false +== (~0.123E~2, 0.17014117E39) = false +?= (~0.123E~2, 0.17014117E39) = false +< (~0.123E~2, 0.123E4) = true +> (~0.123E~2, 0.123E4) = false +== (~0.123E~2, 0.123E4) = false +?= (~0.123E~2, 0.123E4) = false +< (~0.123E~2, 0.123E2) = true +> (~0.123E~2, 0.123E2) = false +== (~0.123E~2, 0.123E2) = false +?= (~0.123E~2, 0.123E2) = false +< (~0.123E~2, 0.31415927E1) = true +> (~0.123E~2, 0.31415927E1) = false +== (~0.123E~2, 0.31415927E1) = false +?= (~0.123E~2, 0.31415927E1) = false +< (~0.123E~2, 0.27182817E1) = true +> (~0.123E~2, 0.27182817E1) = false +== (~0.123E~2, 0.27182817E1) = false +?= (~0.123E~2, 0.27182817E1) = false +< (~0.123E~2, 0.123E1) = true +> (~0.123E~2, 0.123E1) = false +== (~0.123E~2, 0.123E1) = false +?= (~0.123E~2, 0.123E1) = false +< (~0.123E~2, 0.123) = true +> (~0.123E~2, 0.123) = false +== (~0.123E~2, 0.123) = false +?= (~0.123E~2, 0.123) = false +< (~0.123E~2, 0.123E~2) = true +> (~0.123E~2, 0.123E~2) = false +== (~0.123E~2, 0.123E~2) = false +?= (~0.123E~2, 0.123E~2) = false +< (~0.123E~2, 0.11754944E~37) = true +> (~0.123E~2, 0.11754944E~37) = false +== (~0.123E~2, 0.11754944E~37) = false +?= (~0.123E~2, 0.11754944E~37) = false +< (~0.123E~2, 0.5877472E~38) = true +> (~0.123E~2, 0.5877472E~38) = false +== (~0.123E~2, 0.5877472E~38) = false +?= (~0.123E~2, 0.5877472E~38) = false +< (~0.123E~2, 0.1E~44) = true +> (~0.123E~2, 0.1E~44) = false +== (~0.123E~2, 0.1E~44) = false +?= (~0.123E~2, 0.1E~44) = false +< (~0.123E~2, 0.0) = true +> (~0.123E~2, 0.0) = false +== (~0.123E~2, 0.0) = false +?= (~0.123E~2, 0.0) = false +< (~0.123E~2, ~0.34028235E39) = false +> (~0.123E~2, ~0.34028235E39) = true +== (~0.123E~2, ~0.34028235E39) = false +?= (~0.123E~2, ~0.34028235E39) = false +< (~0.123E~2, ~0.17014117E39) = false +> (~0.123E~2, ~0.17014117E39) = true +== (~0.123E~2, ~0.17014117E39) = false +?= (~0.123E~2, ~0.17014117E39) = false +< (~0.123E~2, ~0.123E4) = false +> (~0.123E~2, ~0.123E4) = true +== (~0.123E~2, ~0.123E4) = false +?= (~0.123E~2, ~0.123E4) = false +< (~0.123E~2, ~0.123E2) = false +> (~0.123E~2, ~0.123E2) = true +== (~0.123E~2, ~0.123E2) = false +?= (~0.123E~2, ~0.123E2) = false +< (~0.123E~2, ~0.31415927E1) = false +> (~0.123E~2, ~0.31415927E1) = true +== (~0.123E~2, ~0.31415927E1) = false +?= (~0.123E~2, ~0.31415927E1) = false +< (~0.123E~2, ~0.27182817E1) = false +> (~0.123E~2, ~0.27182817E1) = true +== (~0.123E~2, ~0.27182817E1) = false +?= (~0.123E~2, ~0.27182817E1) = false +< (~0.123E~2, ~0.123E1) = false +> (~0.123E~2, ~0.123E1) = true +== (~0.123E~2, ~0.123E1) = false +?= (~0.123E~2, ~0.123E1) = false +< (~0.123E~2, ~0.123) = false +> (~0.123E~2, ~0.123) = true +== (~0.123E~2, ~0.123) = false +?= (~0.123E~2, ~0.123) = false +< (~0.123E~2, ~0.123E~2) = false +> (~0.123E~2, ~0.123E~2) = false +== (~0.123E~2, ~0.123E~2) = true +?= (~0.123E~2, ~0.123E~2) = true +< (~0.123E~2, ~0.11754944E~37) = true +> (~0.123E~2, ~0.11754944E~37) = false +== (~0.123E~2, ~0.11754944E~37) = false +?= (~0.123E~2, ~0.11754944E~37) = false +< (~0.123E~2, ~0.5877472E~38) = true +> (~0.123E~2, ~0.5877472E~38) = false +== (~0.123E~2, ~0.5877472E~38) = false +?= (~0.123E~2, ~0.5877472E~38) = false +< (~0.123E~2, ~0.1E~44) = true +> (~0.123E~2, ~0.1E~44) = false +== (~0.123E~2, ~0.1E~44) = false +?= (~0.123E~2, ~0.1E~44) = false +< (~0.123E~2, ~0.0) = true +> (~0.123E~2, ~0.0) = false +== (~0.123E~2, ~0.0) = false +?= (~0.123E~2, ~0.0) = false +< (~0.11754944E~37, 0.34028235E39) = true +> (~0.11754944E~37, 0.34028235E39) = false +== (~0.11754944E~37, 0.34028235E39) = false +?= (~0.11754944E~37, 0.34028235E39) = false +< (~0.11754944E~37, 0.17014117E39) = true +> (~0.11754944E~37, 0.17014117E39) = false +== (~0.11754944E~37, 0.17014117E39) = false +?= (~0.11754944E~37, 0.17014117E39) = false +< (~0.11754944E~37, 0.123E4) = true +> (~0.11754944E~37, 0.123E4) = false +== (~0.11754944E~37, 0.123E4) = false +?= (~0.11754944E~37, 0.123E4) = false +< (~0.11754944E~37, 0.123E2) = true +> (~0.11754944E~37, 0.123E2) = false +== (~0.11754944E~37, 0.123E2) = false +?= (~0.11754944E~37, 0.123E2) = false +< (~0.11754944E~37, 0.31415927E1) = true +> (~0.11754944E~37, 0.31415927E1) = false +== (~0.11754944E~37, 0.31415927E1) = false +?= (~0.11754944E~37, 0.31415927E1) = false +< (~0.11754944E~37, 0.27182817E1) = true +> (~0.11754944E~37, 0.27182817E1) = false +== (~0.11754944E~37, 0.27182817E1) = false +?= (~0.11754944E~37, 0.27182817E1) = false +< (~0.11754944E~37, 0.123E1) = true +> (~0.11754944E~37, 0.123E1) = false +== (~0.11754944E~37, 0.123E1) = false +?= (~0.11754944E~37, 0.123E1) = false +< (~0.11754944E~37, 0.123) = true +> (~0.11754944E~37, 0.123) = false +== (~0.11754944E~37, 0.123) = false +?= (~0.11754944E~37, 0.123) = false +< (~0.11754944E~37, 0.123E~2) = true +> (~0.11754944E~37, 0.123E~2) = false +== (~0.11754944E~37, 0.123E~2) = false +?= (~0.11754944E~37, 0.123E~2) = false +< (~0.11754944E~37, 0.11754944E~37) = true +> (~0.11754944E~37, 0.11754944E~37) = false +== (~0.11754944E~37, 0.11754944E~37) = false +?= (~0.11754944E~37, 0.11754944E~37) = false +< (~0.11754944E~37, 0.5877472E~38) = true +> (~0.11754944E~37, 0.5877472E~38) = false +== (~0.11754944E~37, 0.5877472E~38) = false +?= (~0.11754944E~37, 0.5877472E~38) = false +< (~0.11754944E~37, 0.1E~44) = true +> (~0.11754944E~37, 0.1E~44) = false +== (~0.11754944E~37, 0.1E~44) = false +?= (~0.11754944E~37, 0.1E~44) = false +< (~0.11754944E~37, 0.0) = true +> (~0.11754944E~37, 0.0) = false +== (~0.11754944E~37, 0.0) = false +?= (~0.11754944E~37, 0.0) = false +< (~0.11754944E~37, ~0.34028235E39) = false +> (~0.11754944E~37, ~0.34028235E39) = true +== (~0.11754944E~37, ~0.34028235E39) = false +?= (~0.11754944E~37, ~0.34028235E39) = false +< (~0.11754944E~37, ~0.17014117E39) = false +> (~0.11754944E~37, ~0.17014117E39) = true +== (~0.11754944E~37, ~0.17014117E39) = false +?= (~0.11754944E~37, ~0.17014117E39) = false +< (~0.11754944E~37, ~0.123E4) = false +> (~0.11754944E~37, ~0.123E4) = true +== (~0.11754944E~37, ~0.123E4) = false +?= (~0.11754944E~37, ~0.123E4) = false +< (~0.11754944E~37, ~0.123E2) = false +> (~0.11754944E~37, ~0.123E2) = true +== (~0.11754944E~37, ~0.123E2) = false +?= (~0.11754944E~37, ~0.123E2) = false +< (~0.11754944E~37, ~0.31415927E1) = false +> (~0.11754944E~37, ~0.31415927E1) = true +== (~0.11754944E~37, ~0.31415927E1) = false +?= (~0.11754944E~37, ~0.31415927E1) = false +< (~0.11754944E~37, ~0.27182817E1) = false +> (~0.11754944E~37, ~0.27182817E1) = true +== (~0.11754944E~37, ~0.27182817E1) = false +?= (~0.11754944E~37, ~0.27182817E1) = false +< (~0.11754944E~37, ~0.123E1) = false +> (~0.11754944E~37, ~0.123E1) = true +== (~0.11754944E~37, ~0.123E1) = false +?= (~0.11754944E~37, ~0.123E1) = false +< (~0.11754944E~37, ~0.123) = false +> (~0.11754944E~37, ~0.123) = true +== (~0.11754944E~37, ~0.123) = false +?= (~0.11754944E~37, ~0.123) = false +< (~0.11754944E~37, ~0.123E~2) = false +> (~0.11754944E~37, ~0.123E~2) = true +== (~0.11754944E~37, ~0.123E~2) = false +?= (~0.11754944E~37, ~0.123E~2) = false +< (~0.11754944E~37, ~0.11754944E~37) = false +> (~0.11754944E~37, ~0.11754944E~37) = false +== (~0.11754944E~37, ~0.11754944E~37) = true +?= (~0.11754944E~37, ~0.11754944E~37) = true +< (~0.11754944E~37, ~0.5877472E~38) = true +> (~0.11754944E~37, ~0.5877472E~38) = false +== (~0.11754944E~37, ~0.5877472E~38) = false +?= (~0.11754944E~37, ~0.5877472E~38) = false +< (~0.11754944E~37, ~0.1E~44) = true +> (~0.11754944E~37, ~0.1E~44) = false +== (~0.11754944E~37, ~0.1E~44) = false +?= (~0.11754944E~37, ~0.1E~44) = false +< (~0.11754944E~37, ~0.0) = true +> (~0.11754944E~37, ~0.0) = false +== (~0.11754944E~37, ~0.0) = false +?= (~0.11754944E~37, ~0.0) = false +< (~0.5877472E~38, 0.34028235E39) = true +> (~0.5877472E~38, 0.34028235E39) = false +== (~0.5877472E~38, 0.34028235E39) = false +?= (~0.5877472E~38, 0.34028235E39) = false +< (~0.5877472E~38, 0.17014117E39) = true +> (~0.5877472E~38, 0.17014117E39) = false +== (~0.5877472E~38, 0.17014117E39) = false +?= (~0.5877472E~38, 0.17014117E39) = false +< (~0.5877472E~38, 0.123E4) = true +> (~0.5877472E~38, 0.123E4) = false +== (~0.5877472E~38, 0.123E4) = false +?= (~0.5877472E~38, 0.123E4) = false +< (~0.5877472E~38, 0.123E2) = true +> (~0.5877472E~38, 0.123E2) = false +== (~0.5877472E~38, 0.123E2) = false +?= (~0.5877472E~38, 0.123E2) = false +< (~0.5877472E~38, 0.31415927E1) = true +> (~0.5877472E~38, 0.31415927E1) = false +== (~0.5877472E~38, 0.31415927E1) = false +?= (~0.5877472E~38, 0.31415927E1) = false +< (~0.5877472E~38, 0.27182817E1) = true +> (~0.5877472E~38, 0.27182817E1) = false +== (~0.5877472E~38, 0.27182817E1) = false +?= (~0.5877472E~38, 0.27182817E1) = false +< (~0.5877472E~38, 0.123E1) = true +> (~0.5877472E~38, 0.123E1) = false +== (~0.5877472E~38, 0.123E1) = false +?= (~0.5877472E~38, 0.123E1) = false +< (~0.5877472E~38, 0.123) = true +> (~0.5877472E~38, 0.123) = false +== (~0.5877472E~38, 0.123) = false +?= (~0.5877472E~38, 0.123) = false +< (~0.5877472E~38, 0.123E~2) = true +> (~0.5877472E~38, 0.123E~2) = false +== (~0.5877472E~38, 0.123E~2) = false +?= (~0.5877472E~38, 0.123E~2) = false +< (~0.5877472E~38, 0.11754944E~37) = true +> (~0.5877472E~38, 0.11754944E~37) = false +== (~0.5877472E~38, 0.11754944E~37) = false +?= (~0.5877472E~38, 0.11754944E~37) = false +< (~0.5877472E~38, 0.5877472E~38) = true +> (~0.5877472E~38, 0.5877472E~38) = false +== (~0.5877472E~38, 0.5877472E~38) = false +?= (~0.5877472E~38, 0.5877472E~38) = false +< (~0.5877472E~38, 0.1E~44) = true +> (~0.5877472E~38, 0.1E~44) = false +== (~0.5877472E~38, 0.1E~44) = false +?= (~0.5877472E~38, 0.1E~44) = false +< (~0.5877472E~38, 0.0) = true +> (~0.5877472E~38, 0.0) = false +== (~0.5877472E~38, 0.0) = false +?= (~0.5877472E~38, 0.0) = false +< (~0.5877472E~38, ~0.34028235E39) = false +> (~0.5877472E~38, ~0.34028235E39) = true +== (~0.5877472E~38, ~0.34028235E39) = false +?= (~0.5877472E~38, ~0.34028235E39) = false +< (~0.5877472E~38, ~0.17014117E39) = false +> (~0.5877472E~38, ~0.17014117E39) = true +== (~0.5877472E~38, ~0.17014117E39) = false +?= (~0.5877472E~38, ~0.17014117E39) = false +< (~0.5877472E~38, ~0.123E4) = false +> (~0.5877472E~38, ~0.123E4) = true +== (~0.5877472E~38, ~0.123E4) = false +?= (~0.5877472E~38, ~0.123E4) = false +< (~0.5877472E~38, ~0.123E2) = false +> (~0.5877472E~38, ~0.123E2) = true +== (~0.5877472E~38, ~0.123E2) = false +?= (~0.5877472E~38, ~0.123E2) = false +< (~0.5877472E~38, ~0.31415927E1) = false +> (~0.5877472E~38, ~0.31415927E1) = true +== (~0.5877472E~38, ~0.31415927E1) = false +?= (~0.5877472E~38, ~0.31415927E1) = false +< (~0.5877472E~38, ~0.27182817E1) = false +> (~0.5877472E~38, ~0.27182817E1) = true +== (~0.5877472E~38, ~0.27182817E1) = false +?= (~0.5877472E~38, ~0.27182817E1) = false +< (~0.5877472E~38, ~0.123E1) = false +> (~0.5877472E~38, ~0.123E1) = true +== (~0.5877472E~38, ~0.123E1) = false +?= (~0.5877472E~38, ~0.123E1) = false +< (~0.5877472E~38, ~0.123) = false +> (~0.5877472E~38, ~0.123) = true +== (~0.5877472E~38, ~0.123) = false +?= (~0.5877472E~38, ~0.123) = false +< (~0.5877472E~38, ~0.123E~2) = false +> (~0.5877472E~38, ~0.123E~2) = true +== (~0.5877472E~38, ~0.123E~2) = false +?= (~0.5877472E~38, ~0.123E~2) = false +< (~0.5877472E~38, ~0.11754944E~37) = false +> (~0.5877472E~38, ~0.11754944E~37) = true +== (~0.5877472E~38, ~0.11754944E~37) = false +?= (~0.5877472E~38, ~0.11754944E~37) = false +< (~0.5877472E~38, ~0.5877472E~38) = false +> (~0.5877472E~38, ~0.5877472E~38) = false +== (~0.5877472E~38, ~0.5877472E~38) = true +?= (~0.5877472E~38, ~0.5877472E~38) = true +< (~0.5877472E~38, ~0.1E~44) = true +> (~0.5877472E~38, ~0.1E~44) = false +== (~0.5877472E~38, ~0.1E~44) = false +?= (~0.5877472E~38, ~0.1E~44) = false +< (~0.5877472E~38, ~0.0) = true +> (~0.5877472E~38, ~0.0) = false +== (~0.5877472E~38, ~0.0) = false +?= (~0.5877472E~38, ~0.0) = false +< (~0.1E~44, 0.34028235E39) = true +> (~0.1E~44, 0.34028235E39) = false +== (~0.1E~44, 0.34028235E39) = false +?= (~0.1E~44, 0.34028235E39) = false +< (~0.1E~44, 0.17014117E39) = true +> (~0.1E~44, 0.17014117E39) = false +== (~0.1E~44, 0.17014117E39) = false +?= (~0.1E~44, 0.17014117E39) = false +< (~0.1E~44, 0.123E4) = true +> (~0.1E~44, 0.123E4) = false +== (~0.1E~44, 0.123E4) = false +?= (~0.1E~44, 0.123E4) = false +< (~0.1E~44, 0.123E2) = true +> (~0.1E~44, 0.123E2) = false +== (~0.1E~44, 0.123E2) = false +?= (~0.1E~44, 0.123E2) = false +< (~0.1E~44, 0.31415927E1) = true +> (~0.1E~44, 0.31415927E1) = false +== (~0.1E~44, 0.31415927E1) = false +?= (~0.1E~44, 0.31415927E1) = false +< (~0.1E~44, 0.27182817E1) = true +> (~0.1E~44, 0.27182817E1) = false +== (~0.1E~44, 0.27182817E1) = false +?= (~0.1E~44, 0.27182817E1) = false +< (~0.1E~44, 0.123E1) = true +> (~0.1E~44, 0.123E1) = false +== (~0.1E~44, 0.123E1) = false +?= (~0.1E~44, 0.123E1) = false +< (~0.1E~44, 0.123) = true +> (~0.1E~44, 0.123) = false +== (~0.1E~44, 0.123) = false +?= (~0.1E~44, 0.123) = false +< (~0.1E~44, 0.123E~2) = true +> (~0.1E~44, 0.123E~2) = false +== (~0.1E~44, 0.123E~2) = false +?= (~0.1E~44, 0.123E~2) = false +< (~0.1E~44, 0.11754944E~37) = true +> (~0.1E~44, 0.11754944E~37) = false +== (~0.1E~44, 0.11754944E~37) = false +?= (~0.1E~44, 0.11754944E~37) = false +< (~0.1E~44, 0.5877472E~38) = true +> (~0.1E~44, 0.5877472E~38) = false +== (~0.1E~44, 0.5877472E~38) = false +?= (~0.1E~44, 0.5877472E~38) = false +< (~0.1E~44, 0.1E~44) = true +> (~0.1E~44, 0.1E~44) = false +== (~0.1E~44, 0.1E~44) = false +?= (~0.1E~44, 0.1E~44) = false +< (~0.1E~44, 0.0) = true +> (~0.1E~44, 0.0) = false +== (~0.1E~44, 0.0) = false +?= (~0.1E~44, 0.0) = false +< (~0.1E~44, ~0.34028235E39) = false +> (~0.1E~44, ~0.34028235E39) = true +== (~0.1E~44, ~0.34028235E39) = false +?= (~0.1E~44, ~0.34028235E39) = false +< (~0.1E~44, ~0.17014117E39) = false +> (~0.1E~44, ~0.17014117E39) = true +== (~0.1E~44, ~0.17014117E39) = false +?= (~0.1E~44, ~0.17014117E39) = false +< (~0.1E~44, ~0.123E4) = false +> (~0.1E~44, ~0.123E4) = true +== (~0.1E~44, ~0.123E4) = false +?= (~0.1E~44, ~0.123E4) = false +< (~0.1E~44, ~0.123E2) = false +> (~0.1E~44, ~0.123E2) = true +== (~0.1E~44, ~0.123E2) = false +?= (~0.1E~44, ~0.123E2) = false +< (~0.1E~44, ~0.31415927E1) = false +> (~0.1E~44, ~0.31415927E1) = true +== (~0.1E~44, ~0.31415927E1) = false +?= (~0.1E~44, ~0.31415927E1) = false +< (~0.1E~44, ~0.27182817E1) = false +> (~0.1E~44, ~0.27182817E1) = true +== (~0.1E~44, ~0.27182817E1) = false +?= (~0.1E~44, ~0.27182817E1) = false +< (~0.1E~44, ~0.123E1) = false +> (~0.1E~44, ~0.123E1) = true +== (~0.1E~44, ~0.123E1) = false +?= (~0.1E~44, ~0.123E1) = false +< (~0.1E~44, ~0.123) = false +> (~0.1E~44, ~0.123) = true +== (~0.1E~44, ~0.123) = false +?= (~0.1E~44, ~0.123) = false +< (~0.1E~44, ~0.123E~2) = false +> (~0.1E~44, ~0.123E~2) = true +== (~0.1E~44, ~0.123E~2) = false +?= (~0.1E~44, ~0.123E~2) = false +< (~0.1E~44, ~0.11754944E~37) = false +> (~0.1E~44, ~0.11754944E~37) = true +== (~0.1E~44, ~0.11754944E~37) = false +?= (~0.1E~44, ~0.11754944E~37) = false +< (~0.1E~44, ~0.5877472E~38) = false +> (~0.1E~44, ~0.5877472E~38) = true +== (~0.1E~44, ~0.5877472E~38) = false +?= (~0.1E~44, ~0.5877472E~38) = false +< (~0.1E~44, ~0.1E~44) = false +> (~0.1E~44, ~0.1E~44) = false +== (~0.1E~44, ~0.1E~44) = true +?= (~0.1E~44, ~0.1E~44) = true +< (~0.1E~44, ~0.0) = true +> (~0.1E~44, ~0.0) = false +== (~0.1E~44, ~0.0) = false +?= (~0.1E~44, ~0.0) = false +< (~0.0, 0.34028235E39) = true +> (~0.0, 0.34028235E39) = false +== (~0.0, 0.34028235E39) = false +?= (~0.0, 0.34028235E39) = false +< (~0.0, 0.17014117E39) = true +> (~0.0, 0.17014117E39) = false +== (~0.0, 0.17014117E39) = false +?= (~0.0, 0.17014117E39) = false +< (~0.0, 0.123E4) = true +> (~0.0, 0.123E4) = false +== (~0.0, 0.123E4) = false +?= (~0.0, 0.123E4) = false +< (~0.0, 0.123E2) = true +> (~0.0, 0.123E2) = false +== (~0.0, 0.123E2) = false +?= (~0.0, 0.123E2) = false +< (~0.0, 0.31415927E1) = true +> (~0.0, 0.31415927E1) = false +== (~0.0, 0.31415927E1) = false +?= (~0.0, 0.31415927E1) = false +< (~0.0, 0.27182817E1) = true +> (~0.0, 0.27182817E1) = false +== (~0.0, 0.27182817E1) = false +?= (~0.0, 0.27182817E1) = false +< (~0.0, 0.123E1) = true +> (~0.0, 0.123E1) = false +== (~0.0, 0.123E1) = false +?= (~0.0, 0.123E1) = false +< (~0.0, 0.123) = true +> (~0.0, 0.123) = false +== (~0.0, 0.123) = false +?= (~0.0, 0.123) = false +< (~0.0, 0.123E~2) = true +> (~0.0, 0.123E~2) = false +== (~0.0, 0.123E~2) = false +?= (~0.0, 0.123E~2) = false +< (~0.0, 0.11754944E~37) = true +> (~0.0, 0.11754944E~37) = false +== (~0.0, 0.11754944E~37) = false +?= (~0.0, 0.11754944E~37) = false +< (~0.0, 0.5877472E~38) = true +> (~0.0, 0.5877472E~38) = false +== (~0.0, 0.5877472E~38) = false +?= (~0.0, 0.5877472E~38) = false +< (~0.0, 0.1E~44) = true +> (~0.0, 0.1E~44) = false +== (~0.0, 0.1E~44) = false +?= (~0.0, 0.1E~44) = false +< (~0.0, 0.0) = false +> (~0.0, 0.0) = false +== (~0.0, 0.0) = true +?= (~0.0, 0.0) = true +< (~0.0, ~0.34028235E39) = false +> (~0.0, ~0.34028235E39) = true +== (~0.0, ~0.34028235E39) = false +?= (~0.0, ~0.34028235E39) = false +< (~0.0, ~0.17014117E39) = false +> (~0.0, ~0.17014117E39) = true +== (~0.0, ~0.17014117E39) = false +?= (~0.0, ~0.17014117E39) = false +< (~0.0, ~0.123E4) = false +> (~0.0, ~0.123E4) = true +== (~0.0, ~0.123E4) = false +?= (~0.0, ~0.123E4) = false +< (~0.0, ~0.123E2) = false +> (~0.0, ~0.123E2) = true +== (~0.0, ~0.123E2) = false +?= (~0.0, ~0.123E2) = false +< (~0.0, ~0.31415927E1) = false +> (~0.0, ~0.31415927E1) = true +== (~0.0, ~0.31415927E1) = false +?= (~0.0, ~0.31415927E1) = false +< (~0.0, ~0.27182817E1) = false +> (~0.0, ~0.27182817E1) = true +== (~0.0, ~0.27182817E1) = false +?= (~0.0, ~0.27182817E1) = false +< (~0.0, ~0.123E1) = false +> (~0.0, ~0.123E1) = true +== (~0.0, ~0.123E1) = false +?= (~0.0, ~0.123E1) = false +< (~0.0, ~0.123) = false +> (~0.0, ~0.123) = true +== (~0.0, ~0.123) = false +?= (~0.0, ~0.123) = false +< (~0.0, ~0.123E~2) = false +> (~0.0, ~0.123E~2) = true +== (~0.0, ~0.123E~2) = false +?= (~0.0, ~0.123E~2) = false +< (~0.0, ~0.11754944E~37) = false +> (~0.0, ~0.11754944E~37) = true +== (~0.0, ~0.11754944E~37) = false +?= (~0.0, ~0.11754944E~37) = false +< (~0.0, ~0.5877472E~38) = false +> (~0.0, ~0.5877472E~38) = true +== (~0.0, ~0.5877472E~38) = false +?= (~0.0, ~0.5877472E~38) = false +< (~0.0, ~0.1E~44) = false +> (~0.0, ~0.1E~44) = true +== (~0.0, ~0.1E~44) = false +?= (~0.0, ~0.1E~44) = false +< (~0.0, ~0.0) = false +> (~0.0, ~0.0) = false +== (~0.0, ~0.0) = true +?= (~0.0, ~0.0) = true + +Testing compare, compareReal +compare (0.34028235E39, 0.34028235E39) = EQUAL +compareReal (0.34028235E39, 0.34028235E39) = EQUAL +compare (0.34028235E39, 0.17014117E39) = GREATER +compareReal (0.34028235E39, 0.17014117E39) = GREATER +compare (0.34028235E39, 0.123E4) = GREATER +compareReal (0.34028235E39, 0.123E4) = GREATER +compare (0.34028235E39, 0.123E2) = GREATER +compareReal (0.34028235E39, 0.123E2) = GREATER +compare (0.34028235E39, 0.31415927E1) = GREATER +compareReal (0.34028235E39, 0.31415927E1) = GREATER +compare (0.34028235E39, 0.27182817E1) = GREATER +compareReal (0.34028235E39, 0.27182817E1) = GREATER +compare (0.34028235E39, 0.123E1) = GREATER +compareReal (0.34028235E39, 0.123E1) = GREATER +compare (0.34028235E39, 0.123) = GREATER +compareReal (0.34028235E39, 0.123) = GREATER +compare (0.34028235E39, 0.123E~2) = GREATER +compareReal (0.34028235E39, 0.123E~2) = GREATER +compare (0.34028235E39, 0.11754944E~37) = GREATER +compareReal (0.34028235E39, 0.11754944E~37) = GREATER +compare (0.34028235E39, 0.5877472E~38) = GREATER +compareReal (0.34028235E39, 0.5877472E~38) = GREATER +compare (0.34028235E39, 0.1E~44) = GREATER +compareReal (0.34028235E39, 0.1E~44) = GREATER +compare (0.34028235E39, 0.0) = GREATER +compareReal (0.34028235E39, 0.0) = GREATER +compare (0.34028235E39, ~0.34028235E39) = GREATER +compareReal (0.34028235E39, ~0.34028235E39) = GREATER +compare (0.34028235E39, ~0.17014117E39) = GREATER +compareReal (0.34028235E39, ~0.17014117E39) = GREATER +compare (0.34028235E39, ~0.123E4) = GREATER +compareReal (0.34028235E39, ~0.123E4) = GREATER +compare (0.34028235E39, ~0.123E2) = GREATER +compareReal (0.34028235E39, ~0.123E2) = GREATER +compare (0.34028235E39, ~0.31415927E1) = GREATER +compareReal (0.34028235E39, ~0.31415927E1) = GREATER +compare (0.34028235E39, ~0.27182817E1) = GREATER +compareReal (0.34028235E39, ~0.27182817E1) = GREATER +compare (0.34028235E39, ~0.123E1) = GREATER +compareReal (0.34028235E39, ~0.123E1) = GREATER +compare (0.34028235E39, ~0.123) = GREATER +compareReal (0.34028235E39, ~0.123) = GREATER +compare (0.34028235E39, ~0.123E~2) = GREATER +compareReal (0.34028235E39, ~0.123E~2) = GREATER +compare (0.34028235E39, ~0.11754944E~37) = GREATER +compareReal (0.34028235E39, ~0.11754944E~37) = GREATER +compare (0.34028235E39, ~0.5877472E~38) = GREATER +compareReal (0.34028235E39, ~0.5877472E~38) = GREATER +compare (0.34028235E39, ~0.1E~44) = GREATER +compareReal (0.34028235E39, ~0.1E~44) = GREATER +compare (0.34028235E39, ~0.0) = GREATER +compareReal (0.34028235E39, ~0.0) = GREATER +compare (0.17014117E39, 0.34028235E39) = LESS +compareReal (0.17014117E39, 0.34028235E39) = LESS +compare (0.17014117E39, 0.17014117E39) = EQUAL +compareReal (0.17014117E39, 0.17014117E39) = EQUAL +compare (0.17014117E39, 0.123E4) = GREATER +compareReal (0.17014117E39, 0.123E4) = GREATER +compare (0.17014117E39, 0.123E2) = GREATER +compareReal (0.17014117E39, 0.123E2) = GREATER +compare (0.17014117E39, 0.31415927E1) = GREATER +compareReal (0.17014117E39, 0.31415927E1) = GREATER +compare (0.17014117E39, 0.27182817E1) = GREATER +compareReal (0.17014117E39, 0.27182817E1) = GREATER +compare (0.17014117E39, 0.123E1) = GREATER +compareReal (0.17014117E39, 0.123E1) = GREATER +compare (0.17014117E39, 0.123) = GREATER +compareReal (0.17014117E39, 0.123) = GREATER +compare (0.17014117E39, 0.123E~2) = GREATER +compareReal (0.17014117E39, 0.123E~2) = GREATER +compare (0.17014117E39, 0.11754944E~37) = GREATER +compareReal (0.17014117E39, 0.11754944E~37) = GREATER +compare (0.17014117E39, 0.5877472E~38) = GREATER +compareReal (0.17014117E39, 0.5877472E~38) = GREATER +compare (0.17014117E39, 0.1E~44) = GREATER +compareReal (0.17014117E39, 0.1E~44) = GREATER +compare (0.17014117E39, 0.0) = GREATER +compareReal (0.17014117E39, 0.0) = GREATER +compare (0.17014117E39, ~0.34028235E39) = GREATER +compareReal (0.17014117E39, ~0.34028235E39) = GREATER +compare (0.17014117E39, ~0.17014117E39) = GREATER +compareReal (0.17014117E39, ~0.17014117E39) = GREATER +compare (0.17014117E39, ~0.123E4) = GREATER +compareReal (0.17014117E39, ~0.123E4) = GREATER +compare (0.17014117E39, ~0.123E2) = GREATER +compareReal (0.17014117E39, ~0.123E2) = GREATER +compare (0.17014117E39, ~0.31415927E1) = GREATER +compareReal (0.17014117E39, ~0.31415927E1) = GREATER +compare (0.17014117E39, ~0.27182817E1) = GREATER +compareReal (0.17014117E39, ~0.27182817E1) = GREATER +compare (0.17014117E39, ~0.123E1) = GREATER +compareReal (0.17014117E39, ~0.123E1) = GREATER +compare (0.17014117E39, ~0.123) = GREATER +compareReal (0.17014117E39, ~0.123) = GREATER +compare (0.17014117E39, ~0.123E~2) = GREATER +compareReal (0.17014117E39, ~0.123E~2) = GREATER +compare (0.17014117E39, ~0.11754944E~37) = GREATER +compareReal (0.17014117E39, ~0.11754944E~37) = GREATER +compare (0.17014117E39, ~0.5877472E~38) = GREATER +compareReal (0.17014117E39, ~0.5877472E~38) = GREATER +compare (0.17014117E39, ~0.1E~44) = GREATER +compareReal (0.17014117E39, ~0.1E~44) = GREATER +compare (0.17014117E39, ~0.0) = GREATER +compareReal (0.17014117E39, ~0.0) = GREATER +compare (0.123E4, 0.34028235E39) = LESS +compareReal (0.123E4, 0.34028235E39) = LESS +compare (0.123E4, 0.17014117E39) = LESS +compareReal (0.123E4, 0.17014117E39) = LESS +compare (0.123E4, 0.123E4) = EQUAL +compareReal (0.123E4, 0.123E4) = EQUAL +compare (0.123E4, 0.123E2) = GREATER +compareReal (0.123E4, 0.123E2) = GREATER +compare (0.123E4, 0.31415927E1) = GREATER +compareReal (0.123E4, 0.31415927E1) = GREATER +compare (0.123E4, 0.27182817E1) = GREATER +compareReal (0.123E4, 0.27182817E1) = GREATER +compare (0.123E4, 0.123E1) = GREATER +compareReal (0.123E4, 0.123E1) = GREATER +compare (0.123E4, 0.123) = GREATER +compareReal (0.123E4, 0.123) = GREATER +compare (0.123E4, 0.123E~2) = GREATER +compareReal (0.123E4, 0.123E~2) = GREATER +compare (0.123E4, 0.11754944E~37) = GREATER +compareReal (0.123E4, 0.11754944E~37) = GREATER +compare (0.123E4, 0.5877472E~38) = GREATER +compareReal (0.123E4, 0.5877472E~38) = GREATER +compare (0.123E4, 0.1E~44) = GREATER +compareReal (0.123E4, 0.1E~44) = GREATER +compare (0.123E4, 0.0) = GREATER +compareReal (0.123E4, 0.0) = GREATER +compare (0.123E4, ~0.34028235E39) = GREATER +compareReal (0.123E4, ~0.34028235E39) = GREATER +compare (0.123E4, ~0.17014117E39) = GREATER +compareReal (0.123E4, ~0.17014117E39) = GREATER +compare (0.123E4, ~0.123E4) = GREATER +compareReal (0.123E4, ~0.123E4) = GREATER +compare (0.123E4, ~0.123E2) = GREATER +compareReal (0.123E4, ~0.123E2) = GREATER +compare (0.123E4, ~0.31415927E1) = GREATER +compareReal (0.123E4, ~0.31415927E1) = GREATER +compare (0.123E4, ~0.27182817E1) = GREATER +compareReal (0.123E4, ~0.27182817E1) = GREATER +compare (0.123E4, ~0.123E1) = GREATER +compareReal (0.123E4, ~0.123E1) = GREATER +compare (0.123E4, ~0.123) = GREATER +compareReal (0.123E4, ~0.123) = GREATER +compare (0.123E4, ~0.123E~2) = GREATER +compareReal (0.123E4, ~0.123E~2) = GREATER +compare (0.123E4, ~0.11754944E~37) = GREATER +compareReal (0.123E4, ~0.11754944E~37) = GREATER +compare (0.123E4, ~0.5877472E~38) = GREATER +compareReal (0.123E4, ~0.5877472E~38) = GREATER +compare (0.123E4, ~0.1E~44) = GREATER +compareReal (0.123E4, ~0.1E~44) = GREATER +compare (0.123E4, ~0.0) = GREATER +compareReal (0.123E4, ~0.0) = GREATER +compare (0.123E2, 0.34028235E39) = LESS +compareReal (0.123E2, 0.34028235E39) = LESS +compare (0.123E2, 0.17014117E39) = LESS +compareReal (0.123E2, 0.17014117E39) = LESS +compare (0.123E2, 0.123E4) = LESS +compareReal (0.123E2, 0.123E4) = LESS +compare (0.123E2, 0.123E2) = EQUAL +compareReal (0.123E2, 0.123E2) = EQUAL +compare (0.123E2, 0.31415927E1) = GREATER +compareReal (0.123E2, 0.31415927E1) = GREATER +compare (0.123E2, 0.27182817E1) = GREATER +compareReal (0.123E2, 0.27182817E1) = GREATER +compare (0.123E2, 0.123E1) = GREATER +compareReal (0.123E2, 0.123E1) = GREATER +compare (0.123E2, 0.123) = GREATER +compareReal (0.123E2, 0.123) = GREATER +compare (0.123E2, 0.123E~2) = GREATER +compareReal (0.123E2, 0.123E~2) = GREATER +compare (0.123E2, 0.11754944E~37) = GREATER +compareReal (0.123E2, 0.11754944E~37) = GREATER +compare (0.123E2, 0.5877472E~38) = GREATER +compareReal (0.123E2, 0.5877472E~38) = GREATER +compare (0.123E2, 0.1E~44) = GREATER +compareReal (0.123E2, 0.1E~44) = GREATER +compare (0.123E2, 0.0) = GREATER +compareReal (0.123E2, 0.0) = GREATER +compare (0.123E2, ~0.34028235E39) = GREATER +compareReal (0.123E2, ~0.34028235E39) = GREATER +compare (0.123E2, ~0.17014117E39) = GREATER +compareReal (0.123E2, ~0.17014117E39) = GREATER +compare (0.123E2, ~0.123E4) = GREATER +compareReal (0.123E2, ~0.123E4) = GREATER +compare (0.123E2, ~0.123E2) = GREATER +compareReal (0.123E2, ~0.123E2) = GREATER +compare (0.123E2, ~0.31415927E1) = GREATER +compareReal (0.123E2, ~0.31415927E1) = GREATER +compare (0.123E2, ~0.27182817E1) = GREATER +compareReal (0.123E2, ~0.27182817E1) = GREATER +compare (0.123E2, ~0.123E1) = GREATER +compareReal (0.123E2, ~0.123E1) = GREATER +compare (0.123E2, ~0.123) = GREATER +compareReal (0.123E2, ~0.123) = GREATER +compare (0.123E2, ~0.123E~2) = GREATER +compareReal (0.123E2, ~0.123E~2) = GREATER +compare (0.123E2, ~0.11754944E~37) = GREATER +compareReal (0.123E2, ~0.11754944E~37) = GREATER +compare (0.123E2, ~0.5877472E~38) = GREATER +compareReal (0.123E2, ~0.5877472E~38) = GREATER +compare (0.123E2, ~0.1E~44) = GREATER +compareReal (0.123E2, ~0.1E~44) = GREATER +compare (0.123E2, ~0.0) = GREATER +compareReal (0.123E2, ~0.0) = GREATER +compare (0.31415927E1, 0.34028235E39) = LESS +compareReal (0.31415927E1, 0.34028235E39) = LESS +compare (0.31415927E1, 0.17014117E39) = LESS +compareReal (0.31415927E1, 0.17014117E39) = LESS +compare (0.31415927E1, 0.123E4) = LESS +compareReal (0.31415927E1, 0.123E4) = LESS +compare (0.31415927E1, 0.123E2) = LESS +compareReal (0.31415927E1, 0.123E2) = LESS +compare (0.31415927E1, 0.31415927E1) = EQUAL +compareReal (0.31415927E1, 0.31415927E1) = EQUAL +compare (0.31415927E1, 0.27182817E1) = GREATER +compareReal (0.31415927E1, 0.27182817E1) = GREATER +compare (0.31415927E1, 0.123E1) = GREATER +compareReal (0.31415927E1, 0.123E1) = GREATER +compare (0.31415927E1, 0.123) = GREATER +compareReal (0.31415927E1, 0.123) = GREATER +compare (0.31415927E1, 0.123E~2) = GREATER +compareReal (0.31415927E1, 0.123E~2) = GREATER +compare (0.31415927E1, 0.11754944E~37) = GREATER +compareReal (0.31415927E1, 0.11754944E~37) = GREATER +compare (0.31415927E1, 0.5877472E~38) = GREATER +compareReal (0.31415927E1, 0.5877472E~38) = GREATER +compare (0.31415927E1, 0.1E~44) = GREATER +compareReal (0.31415927E1, 0.1E~44) = GREATER +compare (0.31415927E1, 0.0) = GREATER +compareReal (0.31415927E1, 0.0) = GREATER +compare (0.31415927E1, ~0.34028235E39) = GREATER +compareReal (0.31415927E1, ~0.34028235E39) = GREATER +compare (0.31415927E1, ~0.17014117E39) = GREATER +compareReal (0.31415927E1, ~0.17014117E39) = GREATER +compare (0.31415927E1, ~0.123E4) = GREATER +compareReal (0.31415927E1, ~0.123E4) = GREATER +compare (0.31415927E1, ~0.123E2) = GREATER +compareReal (0.31415927E1, ~0.123E2) = GREATER +compare (0.31415927E1, ~0.31415927E1) = GREATER +compareReal (0.31415927E1, ~0.31415927E1) = GREATER +compare (0.31415927E1, ~0.27182817E1) = GREATER +compareReal (0.31415927E1, ~0.27182817E1) = GREATER +compare (0.31415927E1, ~0.123E1) = GREATER +compareReal (0.31415927E1, ~0.123E1) = GREATER +compare (0.31415927E1, ~0.123) = GREATER +compareReal (0.31415927E1, ~0.123) = GREATER +compare (0.31415927E1, ~0.123E~2) = GREATER +compareReal (0.31415927E1, ~0.123E~2) = GREATER +compare (0.31415927E1, ~0.11754944E~37) = GREATER +compareReal (0.31415927E1, ~0.11754944E~37) = GREATER +compare (0.31415927E1, ~0.5877472E~38) = GREATER +compareReal (0.31415927E1, ~0.5877472E~38) = GREATER +compare (0.31415927E1, ~0.1E~44) = GREATER +compareReal (0.31415927E1, ~0.1E~44) = GREATER +compare (0.31415927E1, ~0.0) = GREATER +compareReal (0.31415927E1, ~0.0) = GREATER +compare (0.27182817E1, 0.34028235E39) = LESS +compareReal (0.27182817E1, 0.34028235E39) = LESS +compare (0.27182817E1, 0.17014117E39) = LESS +compareReal (0.27182817E1, 0.17014117E39) = LESS +compare (0.27182817E1, 0.123E4) = LESS +compareReal (0.27182817E1, 0.123E4) = LESS +compare (0.27182817E1, 0.123E2) = LESS +compareReal (0.27182817E1, 0.123E2) = LESS +compare (0.27182817E1, 0.31415927E1) = LESS +compareReal (0.27182817E1, 0.31415927E1) = LESS +compare (0.27182817E1, 0.27182817E1) = EQUAL +compareReal (0.27182817E1, 0.27182817E1) = EQUAL +compare (0.27182817E1, 0.123E1) = GREATER +compareReal (0.27182817E1, 0.123E1) = GREATER +compare (0.27182817E1, 0.123) = GREATER +compareReal (0.27182817E1, 0.123) = GREATER +compare (0.27182817E1, 0.123E~2) = GREATER +compareReal (0.27182817E1, 0.123E~2) = GREATER +compare (0.27182817E1, 0.11754944E~37) = GREATER +compareReal (0.27182817E1, 0.11754944E~37) = GREATER +compare (0.27182817E1, 0.5877472E~38) = GREATER +compareReal (0.27182817E1, 0.5877472E~38) = GREATER +compare (0.27182817E1, 0.1E~44) = GREATER +compareReal (0.27182817E1, 0.1E~44) = GREATER +compare (0.27182817E1, 0.0) = GREATER +compareReal (0.27182817E1, 0.0) = GREATER +compare (0.27182817E1, ~0.34028235E39) = GREATER +compareReal (0.27182817E1, ~0.34028235E39) = GREATER +compare (0.27182817E1, ~0.17014117E39) = GREATER +compareReal (0.27182817E1, ~0.17014117E39) = GREATER +compare (0.27182817E1, ~0.123E4) = GREATER +compareReal (0.27182817E1, ~0.123E4) = GREATER +compare (0.27182817E1, ~0.123E2) = GREATER +compareReal (0.27182817E1, ~0.123E2) = GREATER +compare (0.27182817E1, ~0.31415927E1) = GREATER +compareReal (0.27182817E1, ~0.31415927E1) = GREATER +compare (0.27182817E1, ~0.27182817E1) = GREATER +compareReal (0.27182817E1, ~0.27182817E1) = GREATER +compare (0.27182817E1, ~0.123E1) = GREATER +compareReal (0.27182817E1, ~0.123E1) = GREATER +compare (0.27182817E1, ~0.123) = GREATER +compareReal (0.27182817E1, ~0.123) = GREATER +compare (0.27182817E1, ~0.123E~2) = GREATER +compareReal (0.27182817E1, ~0.123E~2) = GREATER +compare (0.27182817E1, ~0.11754944E~37) = GREATER +compareReal (0.27182817E1, ~0.11754944E~37) = GREATER +compare (0.27182817E1, ~0.5877472E~38) = GREATER +compareReal (0.27182817E1, ~0.5877472E~38) = GREATER +compare (0.27182817E1, ~0.1E~44) = GREATER +compareReal (0.27182817E1, ~0.1E~44) = GREATER +compare (0.27182817E1, ~0.0) = GREATER +compareReal (0.27182817E1, ~0.0) = GREATER +compare (0.123E1, 0.34028235E39) = LESS +compareReal (0.123E1, 0.34028235E39) = LESS +compare (0.123E1, 0.17014117E39) = LESS +compareReal (0.123E1, 0.17014117E39) = LESS +compare (0.123E1, 0.123E4) = LESS +compareReal (0.123E1, 0.123E4) = LESS +compare (0.123E1, 0.123E2) = LESS +compareReal (0.123E1, 0.123E2) = LESS +compare (0.123E1, 0.31415927E1) = LESS +compareReal (0.123E1, 0.31415927E1) = LESS +compare (0.123E1, 0.27182817E1) = LESS +compareReal (0.123E1, 0.27182817E1) = LESS +compare (0.123E1, 0.123E1) = EQUAL +compareReal (0.123E1, 0.123E1) = EQUAL +compare (0.123E1, 0.123) = GREATER +compareReal (0.123E1, 0.123) = GREATER +compare (0.123E1, 0.123E~2) = GREATER +compareReal (0.123E1, 0.123E~2) = GREATER +compare (0.123E1, 0.11754944E~37) = GREATER +compareReal (0.123E1, 0.11754944E~37) = GREATER +compare (0.123E1, 0.5877472E~38) = GREATER +compareReal (0.123E1, 0.5877472E~38) = GREATER +compare (0.123E1, 0.1E~44) = GREATER +compareReal (0.123E1, 0.1E~44) = GREATER +compare (0.123E1, 0.0) = GREATER +compareReal (0.123E1, 0.0) = GREATER +compare (0.123E1, ~0.34028235E39) = GREATER +compareReal (0.123E1, ~0.34028235E39) = GREATER +compare (0.123E1, ~0.17014117E39) = GREATER +compareReal (0.123E1, ~0.17014117E39) = GREATER +compare (0.123E1, ~0.123E4) = GREATER +compareReal (0.123E1, ~0.123E4) = GREATER +compare (0.123E1, ~0.123E2) = GREATER +compareReal (0.123E1, ~0.123E2) = GREATER +compare (0.123E1, ~0.31415927E1) = GREATER +compareReal (0.123E1, ~0.31415927E1) = GREATER +compare (0.123E1, ~0.27182817E1) = GREATER +compareReal (0.123E1, ~0.27182817E1) = GREATER +compare (0.123E1, ~0.123E1) = GREATER +compareReal (0.123E1, ~0.123E1) = GREATER +compare (0.123E1, ~0.123) = GREATER +compareReal (0.123E1, ~0.123) = GREATER +compare (0.123E1, ~0.123E~2) = GREATER +compareReal (0.123E1, ~0.123E~2) = GREATER +compare (0.123E1, ~0.11754944E~37) = GREATER +compareReal (0.123E1, ~0.11754944E~37) = GREATER +compare (0.123E1, ~0.5877472E~38) = GREATER +compareReal (0.123E1, ~0.5877472E~38) = GREATER +compare (0.123E1, ~0.1E~44) = GREATER +compareReal (0.123E1, ~0.1E~44) = GREATER +compare (0.123E1, ~0.0) = GREATER +compareReal (0.123E1, ~0.0) = GREATER +compare (0.123, 0.34028235E39) = LESS +compareReal (0.123, 0.34028235E39) = LESS +compare (0.123, 0.17014117E39) = LESS +compareReal (0.123, 0.17014117E39) = LESS +compare (0.123, 0.123E4) = LESS +compareReal (0.123, 0.123E4) = LESS +compare (0.123, 0.123E2) = LESS +compareReal (0.123, 0.123E2) = LESS +compare (0.123, 0.31415927E1) = LESS +compareReal (0.123, 0.31415927E1) = LESS +compare (0.123, 0.27182817E1) = LESS +compareReal (0.123, 0.27182817E1) = LESS +compare (0.123, 0.123E1) = LESS +compareReal (0.123, 0.123E1) = LESS +compare (0.123, 0.123) = EQUAL +compareReal (0.123, 0.123) = EQUAL +compare (0.123, 0.123E~2) = GREATER +compareReal (0.123, 0.123E~2) = GREATER +compare (0.123, 0.11754944E~37) = GREATER +compareReal (0.123, 0.11754944E~37) = GREATER +compare (0.123, 0.5877472E~38) = GREATER +compareReal (0.123, 0.5877472E~38) = GREATER +compare (0.123, 0.1E~44) = GREATER +compareReal (0.123, 0.1E~44) = GREATER +compare (0.123, 0.0) = GREATER +compareReal (0.123, 0.0) = GREATER +compare (0.123, ~0.34028235E39) = GREATER +compareReal (0.123, ~0.34028235E39) = GREATER +compare (0.123, ~0.17014117E39) = GREATER +compareReal (0.123, ~0.17014117E39) = GREATER +compare (0.123, ~0.123E4) = GREATER +compareReal (0.123, ~0.123E4) = GREATER +compare (0.123, ~0.123E2) = GREATER +compareReal (0.123, ~0.123E2) = GREATER +compare (0.123, ~0.31415927E1) = GREATER +compareReal (0.123, ~0.31415927E1) = GREATER +compare (0.123, ~0.27182817E1) = GREATER +compareReal (0.123, ~0.27182817E1) = GREATER +compare (0.123, ~0.123E1) = GREATER +compareReal (0.123, ~0.123E1) = GREATER +compare (0.123, ~0.123) = GREATER +compareReal (0.123, ~0.123) = GREATER +compare (0.123, ~0.123E~2) = GREATER +compareReal (0.123, ~0.123E~2) = GREATER +compare (0.123, ~0.11754944E~37) = GREATER +compareReal (0.123, ~0.11754944E~37) = GREATER +compare (0.123, ~0.5877472E~38) = GREATER +compareReal (0.123, ~0.5877472E~38) = GREATER +compare (0.123, ~0.1E~44) = GREATER +compareReal (0.123, ~0.1E~44) = GREATER +compare (0.123, ~0.0) = GREATER +compareReal (0.123, ~0.0) = GREATER +compare (0.123E~2, 0.34028235E39) = LESS +compareReal (0.123E~2, 0.34028235E39) = LESS +compare (0.123E~2, 0.17014117E39) = LESS +compareReal (0.123E~2, 0.17014117E39) = LESS +compare (0.123E~2, 0.123E4) = LESS +compareReal (0.123E~2, 0.123E4) = LESS +compare (0.123E~2, 0.123E2) = LESS +compareReal (0.123E~2, 0.123E2) = LESS +compare (0.123E~2, 0.31415927E1) = LESS +compareReal (0.123E~2, 0.31415927E1) = LESS +compare (0.123E~2, 0.27182817E1) = LESS +compareReal (0.123E~2, 0.27182817E1) = LESS +compare (0.123E~2, 0.123E1) = LESS +compareReal (0.123E~2, 0.123E1) = LESS +compare (0.123E~2, 0.123) = LESS +compareReal (0.123E~2, 0.123) = LESS +compare (0.123E~2, 0.123E~2) = EQUAL +compareReal (0.123E~2, 0.123E~2) = EQUAL +compare (0.123E~2, 0.11754944E~37) = GREATER +compareReal (0.123E~2, 0.11754944E~37) = GREATER +compare (0.123E~2, 0.5877472E~38) = GREATER +compareReal (0.123E~2, 0.5877472E~38) = GREATER +compare (0.123E~2, 0.1E~44) = GREATER +compareReal (0.123E~2, 0.1E~44) = GREATER +compare (0.123E~2, 0.0) = GREATER +compareReal (0.123E~2, 0.0) = GREATER +compare (0.123E~2, ~0.34028235E39) = GREATER +compareReal (0.123E~2, ~0.34028235E39) = GREATER +compare (0.123E~2, ~0.17014117E39) = GREATER +compareReal (0.123E~2, ~0.17014117E39) = GREATER +compare (0.123E~2, ~0.123E4) = GREATER +compareReal (0.123E~2, ~0.123E4) = GREATER +compare (0.123E~2, ~0.123E2) = GREATER +compareReal (0.123E~2, ~0.123E2) = GREATER +compare (0.123E~2, ~0.31415927E1) = GREATER +compareReal (0.123E~2, ~0.31415927E1) = GREATER +compare (0.123E~2, ~0.27182817E1) = GREATER +compareReal (0.123E~2, ~0.27182817E1) = GREATER +compare (0.123E~2, ~0.123E1) = GREATER +compareReal (0.123E~2, ~0.123E1) = GREATER +compare (0.123E~2, ~0.123) = GREATER +compareReal (0.123E~2, ~0.123) = GREATER +compare (0.123E~2, ~0.123E~2) = GREATER +compareReal (0.123E~2, ~0.123E~2) = GREATER +compare (0.123E~2, ~0.11754944E~37) = GREATER +compareReal (0.123E~2, ~0.11754944E~37) = GREATER +compare (0.123E~2, ~0.5877472E~38) = GREATER +compareReal (0.123E~2, ~0.5877472E~38) = GREATER +compare (0.123E~2, ~0.1E~44) = GREATER +compareReal (0.123E~2, ~0.1E~44) = GREATER +compare (0.123E~2, ~0.0) = GREATER +compareReal (0.123E~2, ~0.0) = GREATER +compare (0.11754944E~37, 0.34028235E39) = LESS +compareReal (0.11754944E~37, 0.34028235E39) = LESS +compare (0.11754944E~37, 0.17014117E39) = LESS +compareReal (0.11754944E~37, 0.17014117E39) = LESS +compare (0.11754944E~37, 0.123E4) = LESS +compareReal (0.11754944E~37, 0.123E4) = LESS +compare (0.11754944E~37, 0.123E2) = LESS +compareReal (0.11754944E~37, 0.123E2) = LESS +compare (0.11754944E~37, 0.31415927E1) = LESS +compareReal (0.11754944E~37, 0.31415927E1) = LESS +compare (0.11754944E~37, 0.27182817E1) = LESS +compareReal (0.11754944E~37, 0.27182817E1) = LESS +compare (0.11754944E~37, 0.123E1) = LESS +compareReal (0.11754944E~37, 0.123E1) = LESS +compare (0.11754944E~37, 0.123) = LESS +compareReal (0.11754944E~37, 0.123) = LESS +compare (0.11754944E~37, 0.123E~2) = LESS +compareReal (0.11754944E~37, 0.123E~2) = LESS +compare (0.11754944E~37, 0.11754944E~37) = EQUAL +compareReal (0.11754944E~37, 0.11754944E~37) = EQUAL +compare (0.11754944E~37, 0.5877472E~38) = GREATER +compareReal (0.11754944E~37, 0.5877472E~38) = GREATER +compare (0.11754944E~37, 0.1E~44) = GREATER +compareReal (0.11754944E~37, 0.1E~44) = GREATER +compare (0.11754944E~37, 0.0) = GREATER +compareReal (0.11754944E~37, 0.0) = GREATER +compare (0.11754944E~37, ~0.34028235E39) = GREATER +compareReal (0.11754944E~37, ~0.34028235E39) = GREATER +compare (0.11754944E~37, ~0.17014117E39) = GREATER +compareReal (0.11754944E~37, ~0.17014117E39) = GREATER +compare (0.11754944E~37, ~0.123E4) = GREATER +compareReal (0.11754944E~37, ~0.123E4) = GREATER +compare (0.11754944E~37, ~0.123E2) = GREATER +compareReal (0.11754944E~37, ~0.123E2) = GREATER +compare (0.11754944E~37, ~0.31415927E1) = GREATER +compareReal (0.11754944E~37, ~0.31415927E1) = GREATER +compare (0.11754944E~37, ~0.27182817E1) = GREATER +compareReal (0.11754944E~37, ~0.27182817E1) = GREATER +compare (0.11754944E~37, ~0.123E1) = GREATER +compareReal (0.11754944E~37, ~0.123E1) = GREATER +compare (0.11754944E~37, ~0.123) = GREATER +compareReal (0.11754944E~37, ~0.123) = GREATER +compare (0.11754944E~37, ~0.123E~2) = GREATER +compareReal (0.11754944E~37, ~0.123E~2) = GREATER +compare (0.11754944E~37, ~0.11754944E~37) = GREATER +compareReal (0.11754944E~37, ~0.11754944E~37) = GREATER +compare (0.11754944E~37, ~0.5877472E~38) = GREATER +compareReal (0.11754944E~37, ~0.5877472E~38) = GREATER +compare (0.11754944E~37, ~0.1E~44) = GREATER +compareReal (0.11754944E~37, ~0.1E~44) = GREATER +compare (0.11754944E~37, ~0.0) = GREATER +compareReal (0.11754944E~37, ~0.0) = GREATER +compare (0.5877472E~38, 0.34028235E39) = LESS +compareReal (0.5877472E~38, 0.34028235E39) = LESS +compare (0.5877472E~38, 0.17014117E39) = LESS +compareReal (0.5877472E~38, 0.17014117E39) = LESS +compare (0.5877472E~38, 0.123E4) = LESS +compareReal (0.5877472E~38, 0.123E4) = LESS +compare (0.5877472E~38, 0.123E2) = LESS +compareReal (0.5877472E~38, 0.123E2) = LESS +compare (0.5877472E~38, 0.31415927E1) = LESS +compareReal (0.5877472E~38, 0.31415927E1) = LESS +compare (0.5877472E~38, 0.27182817E1) = LESS +compareReal (0.5877472E~38, 0.27182817E1) = LESS +compare (0.5877472E~38, 0.123E1) = LESS +compareReal (0.5877472E~38, 0.123E1) = LESS +compare (0.5877472E~38, 0.123) = LESS +compareReal (0.5877472E~38, 0.123) = LESS +compare (0.5877472E~38, 0.123E~2) = LESS +compareReal (0.5877472E~38, 0.123E~2) = LESS +compare (0.5877472E~38, 0.11754944E~37) = LESS +compareReal (0.5877472E~38, 0.11754944E~37) = LESS +compare (0.5877472E~38, 0.5877472E~38) = EQUAL +compareReal (0.5877472E~38, 0.5877472E~38) = EQUAL +compare (0.5877472E~38, 0.1E~44) = GREATER +compareReal (0.5877472E~38, 0.1E~44) = GREATER +compare (0.5877472E~38, 0.0) = GREATER +compareReal (0.5877472E~38, 0.0) = GREATER +compare (0.5877472E~38, ~0.34028235E39) = GREATER +compareReal (0.5877472E~38, ~0.34028235E39) = GREATER +compare (0.5877472E~38, ~0.17014117E39) = GREATER +compareReal (0.5877472E~38, ~0.17014117E39) = GREATER +compare (0.5877472E~38, ~0.123E4) = GREATER +compareReal (0.5877472E~38, ~0.123E4) = GREATER +compare (0.5877472E~38, ~0.123E2) = GREATER +compareReal (0.5877472E~38, ~0.123E2) = GREATER +compare (0.5877472E~38, ~0.31415927E1) = GREATER +compareReal (0.5877472E~38, ~0.31415927E1) = GREATER +compare (0.5877472E~38, ~0.27182817E1) = GREATER +compareReal (0.5877472E~38, ~0.27182817E1) = GREATER +compare (0.5877472E~38, ~0.123E1) = GREATER +compareReal (0.5877472E~38, ~0.123E1) = GREATER +compare (0.5877472E~38, ~0.123) = GREATER +compareReal (0.5877472E~38, ~0.123) = GREATER +compare (0.5877472E~38, ~0.123E~2) = GREATER +compareReal (0.5877472E~38, ~0.123E~2) = GREATER +compare (0.5877472E~38, ~0.11754944E~37) = GREATER +compareReal (0.5877472E~38, ~0.11754944E~37) = GREATER +compare (0.5877472E~38, ~0.5877472E~38) = GREATER +compareReal (0.5877472E~38, ~0.5877472E~38) = GREATER +compare (0.5877472E~38, ~0.1E~44) = GREATER +compareReal (0.5877472E~38, ~0.1E~44) = GREATER +compare (0.5877472E~38, ~0.0) = GREATER +compareReal (0.5877472E~38, ~0.0) = GREATER +compare (0.1E~44, 0.34028235E39) = LESS +compareReal (0.1E~44, 0.34028235E39) = LESS +compare (0.1E~44, 0.17014117E39) = LESS +compareReal (0.1E~44, 0.17014117E39) = LESS +compare (0.1E~44, 0.123E4) = LESS +compareReal (0.1E~44, 0.123E4) = LESS +compare (0.1E~44, 0.123E2) = LESS +compareReal (0.1E~44, 0.123E2) = LESS +compare (0.1E~44, 0.31415927E1) = LESS +compareReal (0.1E~44, 0.31415927E1) = LESS +compare (0.1E~44, 0.27182817E1) = LESS +compareReal (0.1E~44, 0.27182817E1) = LESS +compare (0.1E~44, 0.123E1) = LESS +compareReal (0.1E~44, 0.123E1) = LESS +compare (0.1E~44, 0.123) = LESS +compareReal (0.1E~44, 0.123) = LESS +compare (0.1E~44, 0.123E~2) = LESS +compareReal (0.1E~44, 0.123E~2) = LESS +compare (0.1E~44, 0.11754944E~37) = LESS +compareReal (0.1E~44, 0.11754944E~37) = LESS +compare (0.1E~44, 0.5877472E~38) = LESS +compareReal (0.1E~44, 0.5877472E~38) = LESS +compare (0.1E~44, 0.1E~44) = EQUAL +compareReal (0.1E~44, 0.1E~44) = EQUAL +compare (0.1E~44, 0.0) = GREATER +compareReal (0.1E~44, 0.0) = GREATER +compare (0.1E~44, ~0.34028235E39) = GREATER +compareReal (0.1E~44, ~0.34028235E39) = GREATER +compare (0.1E~44, ~0.17014117E39) = GREATER +compareReal (0.1E~44, ~0.17014117E39) = GREATER +compare (0.1E~44, ~0.123E4) = GREATER +compareReal (0.1E~44, ~0.123E4) = GREATER +compare (0.1E~44, ~0.123E2) = GREATER +compareReal (0.1E~44, ~0.123E2) = GREATER +compare (0.1E~44, ~0.31415927E1) = GREATER +compareReal (0.1E~44, ~0.31415927E1) = GREATER +compare (0.1E~44, ~0.27182817E1) = GREATER +compareReal (0.1E~44, ~0.27182817E1) = GREATER +compare (0.1E~44, ~0.123E1) = GREATER +compareReal (0.1E~44, ~0.123E1) = GREATER +compare (0.1E~44, ~0.123) = GREATER +compareReal (0.1E~44, ~0.123) = GREATER +compare (0.1E~44, ~0.123E~2) = GREATER +compareReal (0.1E~44, ~0.123E~2) = GREATER +compare (0.1E~44, ~0.11754944E~37) = GREATER +compareReal (0.1E~44, ~0.11754944E~37) = GREATER +compare (0.1E~44, ~0.5877472E~38) = GREATER +compareReal (0.1E~44, ~0.5877472E~38) = GREATER +compare (0.1E~44, ~0.1E~44) = GREATER +compareReal (0.1E~44, ~0.1E~44) = GREATER +compare (0.1E~44, ~0.0) = GREATER +compareReal (0.1E~44, ~0.0) = GREATER +compare (0.0, 0.34028235E39) = LESS +compareReal (0.0, 0.34028235E39) = LESS +compare (0.0, 0.17014117E39) = LESS +compareReal (0.0, 0.17014117E39) = LESS +compare (0.0, 0.123E4) = LESS +compareReal (0.0, 0.123E4) = LESS +compare (0.0, 0.123E2) = LESS +compareReal (0.0, 0.123E2) = LESS +compare (0.0, 0.31415927E1) = LESS +compareReal (0.0, 0.31415927E1) = LESS +compare (0.0, 0.27182817E1) = LESS +compareReal (0.0, 0.27182817E1) = LESS +compare (0.0, 0.123E1) = LESS +compareReal (0.0, 0.123E1) = LESS +compare (0.0, 0.123) = LESS +compareReal (0.0, 0.123) = LESS +compare (0.0, 0.123E~2) = LESS +compareReal (0.0, 0.123E~2) = LESS +compare (0.0, 0.11754944E~37) = LESS +compareReal (0.0, 0.11754944E~37) = LESS +compare (0.0, 0.5877472E~38) = LESS +compareReal (0.0, 0.5877472E~38) = LESS +compare (0.0, 0.1E~44) = LESS +compareReal (0.0, 0.1E~44) = LESS +compare (0.0, 0.0) = EQUAL +compareReal (0.0, 0.0) = EQUAL +compare (0.0, ~0.34028235E39) = GREATER +compareReal (0.0, ~0.34028235E39) = GREATER +compare (0.0, ~0.17014117E39) = GREATER +compareReal (0.0, ~0.17014117E39) = GREATER +compare (0.0, ~0.123E4) = GREATER +compareReal (0.0, ~0.123E4) = GREATER +compare (0.0, ~0.123E2) = GREATER +compareReal (0.0, ~0.123E2) = GREATER +compare (0.0, ~0.31415927E1) = GREATER +compareReal (0.0, ~0.31415927E1) = GREATER +compare (0.0, ~0.27182817E1) = GREATER +compareReal (0.0, ~0.27182817E1) = GREATER +compare (0.0, ~0.123E1) = GREATER +compareReal (0.0, ~0.123E1) = GREATER +compare (0.0, ~0.123) = GREATER +compareReal (0.0, ~0.123) = GREATER +compare (0.0, ~0.123E~2) = GREATER +compareReal (0.0, ~0.123E~2) = GREATER +compare (0.0, ~0.11754944E~37) = GREATER +compareReal (0.0, ~0.11754944E~37) = GREATER +compare (0.0, ~0.5877472E~38) = GREATER +compareReal (0.0, ~0.5877472E~38) = GREATER +compare (0.0, ~0.1E~44) = GREATER +compareReal (0.0, ~0.1E~44) = GREATER +compare (0.0, ~0.0) = EQUAL +compareReal (0.0, ~0.0) = EQUAL +compare (~0.34028235E39, 0.34028235E39) = LESS +compareReal (~0.34028235E39, 0.34028235E39) = LESS +compare (~0.34028235E39, 0.17014117E39) = LESS +compareReal (~0.34028235E39, 0.17014117E39) = LESS +compare (~0.34028235E39, 0.123E4) = LESS +compareReal (~0.34028235E39, 0.123E4) = LESS +compare (~0.34028235E39, 0.123E2) = LESS +compareReal (~0.34028235E39, 0.123E2) = LESS +compare (~0.34028235E39, 0.31415927E1) = LESS +compareReal (~0.34028235E39, 0.31415927E1) = LESS +compare (~0.34028235E39, 0.27182817E1) = LESS +compareReal (~0.34028235E39, 0.27182817E1) = LESS +compare (~0.34028235E39, 0.123E1) = LESS +compareReal (~0.34028235E39, 0.123E1) = LESS +compare (~0.34028235E39, 0.123) = LESS +compareReal (~0.34028235E39, 0.123) = LESS +compare (~0.34028235E39, 0.123E~2) = LESS +compareReal (~0.34028235E39, 0.123E~2) = LESS +compare (~0.34028235E39, 0.11754944E~37) = LESS +compareReal (~0.34028235E39, 0.11754944E~37) = LESS +compare (~0.34028235E39, 0.5877472E~38) = LESS +compareReal (~0.34028235E39, 0.5877472E~38) = LESS +compare (~0.34028235E39, 0.1E~44) = LESS +compareReal (~0.34028235E39, 0.1E~44) = LESS +compare (~0.34028235E39, 0.0) = LESS +compareReal (~0.34028235E39, 0.0) = LESS +compare (~0.34028235E39, ~0.34028235E39) = EQUAL +compareReal (~0.34028235E39, ~0.34028235E39) = EQUAL +compare (~0.34028235E39, ~0.17014117E39) = LESS +compareReal (~0.34028235E39, ~0.17014117E39) = LESS +compare (~0.34028235E39, ~0.123E4) = LESS +compareReal (~0.34028235E39, ~0.123E4) = LESS +compare (~0.34028235E39, ~0.123E2) = LESS +compareReal (~0.34028235E39, ~0.123E2) = LESS +compare (~0.34028235E39, ~0.31415927E1) = LESS +compareReal (~0.34028235E39, ~0.31415927E1) = LESS +compare (~0.34028235E39, ~0.27182817E1) = LESS +compareReal (~0.34028235E39, ~0.27182817E1) = LESS +compare (~0.34028235E39, ~0.123E1) = LESS +compareReal (~0.34028235E39, ~0.123E1) = LESS +compare (~0.34028235E39, ~0.123) = LESS +compareReal (~0.34028235E39, ~0.123) = LESS +compare (~0.34028235E39, ~0.123E~2) = LESS +compareReal (~0.34028235E39, ~0.123E~2) = LESS +compare (~0.34028235E39, ~0.11754944E~37) = LESS +compareReal (~0.34028235E39, ~0.11754944E~37) = LESS +compare (~0.34028235E39, ~0.5877472E~38) = LESS +compareReal (~0.34028235E39, ~0.5877472E~38) = LESS +compare (~0.34028235E39, ~0.1E~44) = LESS +compareReal (~0.34028235E39, ~0.1E~44) = LESS +compare (~0.34028235E39, ~0.0) = LESS +compareReal (~0.34028235E39, ~0.0) = LESS +compare (~0.17014117E39, 0.34028235E39) = LESS +compareReal (~0.17014117E39, 0.34028235E39) = LESS +compare (~0.17014117E39, 0.17014117E39) = LESS +compareReal (~0.17014117E39, 0.17014117E39) = LESS +compare (~0.17014117E39, 0.123E4) = LESS +compareReal (~0.17014117E39, 0.123E4) = LESS +compare (~0.17014117E39, 0.123E2) = LESS +compareReal (~0.17014117E39, 0.123E2) = LESS +compare (~0.17014117E39, 0.31415927E1) = LESS +compareReal (~0.17014117E39, 0.31415927E1) = LESS +compare (~0.17014117E39, 0.27182817E1) = LESS +compareReal (~0.17014117E39, 0.27182817E1) = LESS +compare (~0.17014117E39, 0.123E1) = LESS +compareReal (~0.17014117E39, 0.123E1) = LESS +compare (~0.17014117E39, 0.123) = LESS +compareReal (~0.17014117E39, 0.123) = LESS +compare (~0.17014117E39, 0.123E~2) = LESS +compareReal (~0.17014117E39, 0.123E~2) = LESS +compare (~0.17014117E39, 0.11754944E~37) = LESS +compareReal (~0.17014117E39, 0.11754944E~37) = LESS +compare (~0.17014117E39, 0.5877472E~38) = LESS +compareReal (~0.17014117E39, 0.5877472E~38) = LESS +compare (~0.17014117E39, 0.1E~44) = LESS +compareReal (~0.17014117E39, 0.1E~44) = LESS +compare (~0.17014117E39, 0.0) = LESS +compareReal (~0.17014117E39, 0.0) = LESS +compare (~0.17014117E39, ~0.34028235E39) = GREATER +compareReal (~0.17014117E39, ~0.34028235E39) = GREATER +compare (~0.17014117E39, ~0.17014117E39) = EQUAL +compareReal (~0.17014117E39, ~0.17014117E39) = EQUAL +compare (~0.17014117E39, ~0.123E4) = LESS +compareReal (~0.17014117E39, ~0.123E4) = LESS +compare (~0.17014117E39, ~0.123E2) = LESS +compareReal (~0.17014117E39, ~0.123E2) = LESS +compare (~0.17014117E39, ~0.31415927E1) = LESS +compareReal (~0.17014117E39, ~0.31415927E1) = LESS +compare (~0.17014117E39, ~0.27182817E1) = LESS +compareReal (~0.17014117E39, ~0.27182817E1) = LESS +compare (~0.17014117E39, ~0.123E1) = LESS +compareReal (~0.17014117E39, ~0.123E1) = LESS +compare (~0.17014117E39, ~0.123) = LESS +compareReal (~0.17014117E39, ~0.123) = LESS +compare (~0.17014117E39, ~0.123E~2) = LESS +compareReal (~0.17014117E39, ~0.123E~2) = LESS +compare (~0.17014117E39, ~0.11754944E~37) = LESS +compareReal (~0.17014117E39, ~0.11754944E~37) = LESS +compare (~0.17014117E39, ~0.5877472E~38) = LESS +compareReal (~0.17014117E39, ~0.5877472E~38) = LESS +compare (~0.17014117E39, ~0.1E~44) = LESS +compareReal (~0.17014117E39, ~0.1E~44) = LESS +compare (~0.17014117E39, ~0.0) = LESS +compareReal (~0.17014117E39, ~0.0) = LESS +compare (~0.123E4, 0.34028235E39) = LESS +compareReal (~0.123E4, 0.34028235E39) = LESS +compare (~0.123E4, 0.17014117E39) = LESS +compareReal (~0.123E4, 0.17014117E39) = LESS +compare (~0.123E4, 0.123E4) = LESS +compareReal (~0.123E4, 0.123E4) = LESS +compare (~0.123E4, 0.123E2) = LESS +compareReal (~0.123E4, 0.123E2) = LESS +compare (~0.123E4, 0.31415927E1) = LESS +compareReal (~0.123E4, 0.31415927E1) = LESS +compare (~0.123E4, 0.27182817E1) = LESS +compareReal (~0.123E4, 0.27182817E1) = LESS +compare (~0.123E4, 0.123E1) = LESS +compareReal (~0.123E4, 0.123E1) = LESS +compare (~0.123E4, 0.123) = LESS +compareReal (~0.123E4, 0.123) = LESS +compare (~0.123E4, 0.123E~2) = LESS +compareReal (~0.123E4, 0.123E~2) = LESS +compare (~0.123E4, 0.11754944E~37) = LESS +compareReal (~0.123E4, 0.11754944E~37) = LESS +compare (~0.123E4, 0.5877472E~38) = LESS +compareReal (~0.123E4, 0.5877472E~38) = LESS +compare (~0.123E4, 0.1E~44) = LESS +compareReal (~0.123E4, 0.1E~44) = LESS +compare (~0.123E4, 0.0) = LESS +compareReal (~0.123E4, 0.0) = LESS +compare (~0.123E4, ~0.34028235E39) = GREATER +compareReal (~0.123E4, ~0.34028235E39) = GREATER +compare (~0.123E4, ~0.17014117E39) = GREATER +compareReal (~0.123E4, ~0.17014117E39) = GREATER +compare (~0.123E4, ~0.123E4) = EQUAL +compareReal (~0.123E4, ~0.123E4) = EQUAL +compare (~0.123E4, ~0.123E2) = LESS +compareReal (~0.123E4, ~0.123E2) = LESS +compare (~0.123E4, ~0.31415927E1) = LESS +compareReal (~0.123E4, ~0.31415927E1) = LESS +compare (~0.123E4, ~0.27182817E1) = LESS +compareReal (~0.123E4, ~0.27182817E1) = LESS +compare (~0.123E4, ~0.123E1) = LESS +compareReal (~0.123E4, ~0.123E1) = LESS +compare (~0.123E4, ~0.123) = LESS +compareReal (~0.123E4, ~0.123) = LESS +compare (~0.123E4, ~0.123E~2) = LESS +compareReal (~0.123E4, ~0.123E~2) = LESS +compare (~0.123E4, ~0.11754944E~37) = LESS +compareReal (~0.123E4, ~0.11754944E~37) = LESS +compare (~0.123E4, ~0.5877472E~38) = LESS +compareReal (~0.123E4, ~0.5877472E~38) = LESS +compare (~0.123E4, ~0.1E~44) = LESS +compareReal (~0.123E4, ~0.1E~44) = LESS +compare (~0.123E4, ~0.0) = LESS +compareReal (~0.123E4, ~0.0) = LESS +compare (~0.123E2, 0.34028235E39) = LESS +compareReal (~0.123E2, 0.34028235E39) = LESS +compare (~0.123E2, 0.17014117E39) = LESS +compareReal (~0.123E2, 0.17014117E39) = LESS +compare (~0.123E2, 0.123E4) = LESS +compareReal (~0.123E2, 0.123E4) = LESS +compare (~0.123E2, 0.123E2) = LESS +compareReal (~0.123E2, 0.123E2) = LESS +compare (~0.123E2, 0.31415927E1) = LESS +compareReal (~0.123E2, 0.31415927E1) = LESS +compare (~0.123E2, 0.27182817E1) = LESS +compareReal (~0.123E2, 0.27182817E1) = LESS +compare (~0.123E2, 0.123E1) = LESS +compareReal (~0.123E2, 0.123E1) = LESS +compare (~0.123E2, 0.123) = LESS +compareReal (~0.123E2, 0.123) = LESS +compare (~0.123E2, 0.123E~2) = LESS +compareReal (~0.123E2, 0.123E~2) = LESS +compare (~0.123E2, 0.11754944E~37) = LESS +compareReal (~0.123E2, 0.11754944E~37) = LESS +compare (~0.123E2, 0.5877472E~38) = LESS +compareReal (~0.123E2, 0.5877472E~38) = LESS +compare (~0.123E2, 0.1E~44) = LESS +compareReal (~0.123E2, 0.1E~44) = LESS +compare (~0.123E2, 0.0) = LESS +compareReal (~0.123E2, 0.0) = LESS +compare (~0.123E2, ~0.34028235E39) = GREATER +compareReal (~0.123E2, ~0.34028235E39) = GREATER +compare (~0.123E2, ~0.17014117E39) = GREATER +compareReal (~0.123E2, ~0.17014117E39) = GREATER +compare (~0.123E2, ~0.123E4) = GREATER +compareReal (~0.123E2, ~0.123E4) = GREATER +compare (~0.123E2, ~0.123E2) = EQUAL +compareReal (~0.123E2, ~0.123E2) = EQUAL +compare (~0.123E2, ~0.31415927E1) = LESS +compareReal (~0.123E2, ~0.31415927E1) = LESS +compare (~0.123E2, ~0.27182817E1) = LESS +compareReal (~0.123E2, ~0.27182817E1) = LESS +compare (~0.123E2, ~0.123E1) = LESS +compareReal (~0.123E2, ~0.123E1) = LESS +compare (~0.123E2, ~0.123) = LESS +compareReal (~0.123E2, ~0.123) = LESS +compare (~0.123E2, ~0.123E~2) = LESS +compareReal (~0.123E2, ~0.123E~2) = LESS +compare (~0.123E2, ~0.11754944E~37) = LESS +compareReal (~0.123E2, ~0.11754944E~37) = LESS +compare (~0.123E2, ~0.5877472E~38) = LESS +compareReal (~0.123E2, ~0.5877472E~38) = LESS +compare (~0.123E2, ~0.1E~44) = LESS +compareReal (~0.123E2, ~0.1E~44) = LESS +compare (~0.123E2, ~0.0) = LESS +compareReal (~0.123E2, ~0.0) = LESS +compare (~0.31415927E1, 0.34028235E39) = LESS +compareReal (~0.31415927E1, 0.34028235E39) = LESS +compare (~0.31415927E1, 0.17014117E39) = LESS +compareReal (~0.31415927E1, 0.17014117E39) = LESS +compare (~0.31415927E1, 0.123E4) = LESS +compareReal (~0.31415927E1, 0.123E4) = LESS +compare (~0.31415927E1, 0.123E2) = LESS +compareReal (~0.31415927E1, 0.123E2) = LESS +compare (~0.31415927E1, 0.31415927E1) = LESS +compareReal (~0.31415927E1, 0.31415927E1) = LESS +compare (~0.31415927E1, 0.27182817E1) = LESS +compareReal (~0.31415927E1, 0.27182817E1) = LESS +compare (~0.31415927E1, 0.123E1) = LESS +compareReal (~0.31415927E1, 0.123E1) = LESS +compare (~0.31415927E1, 0.123) = LESS +compareReal (~0.31415927E1, 0.123) = LESS +compare (~0.31415927E1, 0.123E~2) = LESS +compareReal (~0.31415927E1, 0.123E~2) = LESS +compare (~0.31415927E1, 0.11754944E~37) = LESS +compareReal (~0.31415927E1, 0.11754944E~37) = LESS +compare (~0.31415927E1, 0.5877472E~38) = LESS +compareReal (~0.31415927E1, 0.5877472E~38) = LESS +compare (~0.31415927E1, 0.1E~44) = LESS +compareReal (~0.31415927E1, 0.1E~44) = LESS +compare (~0.31415927E1, 0.0) = LESS +compareReal (~0.31415927E1, 0.0) = LESS +compare (~0.31415927E1, ~0.34028235E39) = GREATER +compareReal (~0.31415927E1, ~0.34028235E39) = GREATER +compare (~0.31415927E1, ~0.17014117E39) = GREATER +compareReal (~0.31415927E1, ~0.17014117E39) = GREATER +compare (~0.31415927E1, ~0.123E4) = GREATER +compareReal (~0.31415927E1, ~0.123E4) = GREATER +compare (~0.31415927E1, ~0.123E2) = GREATER +compareReal (~0.31415927E1, ~0.123E2) = GREATER +compare (~0.31415927E1, ~0.31415927E1) = EQUAL +compareReal (~0.31415927E1, ~0.31415927E1) = EQUAL +compare (~0.31415927E1, ~0.27182817E1) = LESS +compareReal (~0.31415927E1, ~0.27182817E1) = LESS +compare (~0.31415927E1, ~0.123E1) = LESS +compareReal (~0.31415927E1, ~0.123E1) = LESS +compare (~0.31415927E1, ~0.123) = LESS +compareReal (~0.31415927E1, ~0.123) = LESS +compare (~0.31415927E1, ~0.123E~2) = LESS +compareReal (~0.31415927E1, ~0.123E~2) = LESS +compare (~0.31415927E1, ~0.11754944E~37) = LESS +compareReal (~0.31415927E1, ~0.11754944E~37) = LESS +compare (~0.31415927E1, ~0.5877472E~38) = LESS +compareReal (~0.31415927E1, ~0.5877472E~38) = LESS +compare (~0.31415927E1, ~0.1E~44) = LESS +compareReal (~0.31415927E1, ~0.1E~44) = LESS +compare (~0.31415927E1, ~0.0) = LESS +compareReal (~0.31415927E1, ~0.0) = LESS +compare (~0.27182817E1, 0.34028235E39) = LESS +compareReal (~0.27182817E1, 0.34028235E39) = LESS +compare (~0.27182817E1, 0.17014117E39) = LESS +compareReal (~0.27182817E1, 0.17014117E39) = LESS +compare (~0.27182817E1, 0.123E4) = LESS +compareReal (~0.27182817E1, 0.123E4) = LESS +compare (~0.27182817E1, 0.123E2) = LESS +compareReal (~0.27182817E1, 0.123E2) = LESS +compare (~0.27182817E1, 0.31415927E1) = LESS +compareReal (~0.27182817E1, 0.31415927E1) = LESS +compare (~0.27182817E1, 0.27182817E1) = LESS +compareReal (~0.27182817E1, 0.27182817E1) = LESS +compare (~0.27182817E1, 0.123E1) = LESS +compareReal (~0.27182817E1, 0.123E1) = LESS +compare (~0.27182817E1, 0.123) = LESS +compareReal (~0.27182817E1, 0.123) = LESS +compare (~0.27182817E1, 0.123E~2) = LESS +compareReal (~0.27182817E1, 0.123E~2) = LESS +compare (~0.27182817E1, 0.11754944E~37) = LESS +compareReal (~0.27182817E1, 0.11754944E~37) = LESS +compare (~0.27182817E1, 0.5877472E~38) = LESS +compareReal (~0.27182817E1, 0.5877472E~38) = LESS +compare (~0.27182817E1, 0.1E~44) = LESS +compareReal (~0.27182817E1, 0.1E~44) = LESS +compare (~0.27182817E1, 0.0) = LESS +compareReal (~0.27182817E1, 0.0) = LESS +compare (~0.27182817E1, ~0.34028235E39) = GREATER +compareReal (~0.27182817E1, ~0.34028235E39) = GREATER +compare (~0.27182817E1, ~0.17014117E39) = GREATER +compareReal (~0.27182817E1, ~0.17014117E39) = GREATER +compare (~0.27182817E1, ~0.123E4) = GREATER +compareReal (~0.27182817E1, ~0.123E4) = GREATER +compare (~0.27182817E1, ~0.123E2) = GREATER +compareReal (~0.27182817E1, ~0.123E2) = GREATER +compare (~0.27182817E1, ~0.31415927E1) = GREATER +compareReal (~0.27182817E1, ~0.31415927E1) = GREATER +compare (~0.27182817E1, ~0.27182817E1) = EQUAL +compareReal (~0.27182817E1, ~0.27182817E1) = EQUAL +compare (~0.27182817E1, ~0.123E1) = LESS +compareReal (~0.27182817E1, ~0.123E1) = LESS +compare (~0.27182817E1, ~0.123) = LESS +compareReal (~0.27182817E1, ~0.123) = LESS +compare (~0.27182817E1, ~0.123E~2) = LESS +compareReal (~0.27182817E1, ~0.123E~2) = LESS +compare (~0.27182817E1, ~0.11754944E~37) = LESS +compareReal (~0.27182817E1, ~0.11754944E~37) = LESS +compare (~0.27182817E1, ~0.5877472E~38) = LESS +compareReal (~0.27182817E1, ~0.5877472E~38) = LESS +compare (~0.27182817E1, ~0.1E~44) = LESS +compareReal (~0.27182817E1, ~0.1E~44) = LESS +compare (~0.27182817E1, ~0.0) = LESS +compareReal (~0.27182817E1, ~0.0) = LESS +compare (~0.123E1, 0.34028235E39) = LESS +compareReal (~0.123E1, 0.34028235E39) = LESS +compare (~0.123E1, 0.17014117E39) = LESS +compareReal (~0.123E1, 0.17014117E39) = LESS +compare (~0.123E1, 0.123E4) = LESS +compareReal (~0.123E1, 0.123E4) = LESS +compare (~0.123E1, 0.123E2) = LESS +compareReal (~0.123E1, 0.123E2) = LESS +compare (~0.123E1, 0.31415927E1) = LESS +compareReal (~0.123E1, 0.31415927E1) = LESS +compare (~0.123E1, 0.27182817E1) = LESS +compareReal (~0.123E1, 0.27182817E1) = LESS +compare (~0.123E1, 0.123E1) = LESS +compareReal (~0.123E1, 0.123E1) = LESS +compare (~0.123E1, 0.123) = LESS +compareReal (~0.123E1, 0.123) = LESS +compare (~0.123E1, 0.123E~2) = LESS +compareReal (~0.123E1, 0.123E~2) = LESS +compare (~0.123E1, 0.11754944E~37) = LESS +compareReal (~0.123E1, 0.11754944E~37) = LESS +compare (~0.123E1, 0.5877472E~38) = LESS +compareReal (~0.123E1, 0.5877472E~38) = LESS +compare (~0.123E1, 0.1E~44) = LESS +compareReal (~0.123E1, 0.1E~44) = LESS +compare (~0.123E1, 0.0) = LESS +compareReal (~0.123E1, 0.0) = LESS +compare (~0.123E1, ~0.34028235E39) = GREATER +compareReal (~0.123E1, ~0.34028235E39) = GREATER +compare (~0.123E1, ~0.17014117E39) = GREATER +compareReal (~0.123E1, ~0.17014117E39) = GREATER +compare (~0.123E1, ~0.123E4) = GREATER +compareReal (~0.123E1, ~0.123E4) = GREATER +compare (~0.123E1, ~0.123E2) = GREATER +compareReal (~0.123E1, ~0.123E2) = GREATER +compare (~0.123E1, ~0.31415927E1) = GREATER +compareReal (~0.123E1, ~0.31415927E1) = GREATER +compare (~0.123E1, ~0.27182817E1) = GREATER +compareReal (~0.123E1, ~0.27182817E1) = GREATER +compare (~0.123E1, ~0.123E1) = EQUAL +compareReal (~0.123E1, ~0.123E1) = EQUAL +compare (~0.123E1, ~0.123) = LESS +compareReal (~0.123E1, ~0.123) = LESS +compare (~0.123E1, ~0.123E~2) = LESS +compareReal (~0.123E1, ~0.123E~2) = LESS +compare (~0.123E1, ~0.11754944E~37) = LESS +compareReal (~0.123E1, ~0.11754944E~37) = LESS +compare (~0.123E1, ~0.5877472E~38) = LESS +compareReal (~0.123E1, ~0.5877472E~38) = LESS +compare (~0.123E1, ~0.1E~44) = LESS +compareReal (~0.123E1, ~0.1E~44) = LESS +compare (~0.123E1, ~0.0) = LESS +compareReal (~0.123E1, ~0.0) = LESS +compare (~0.123, 0.34028235E39) = LESS +compareReal (~0.123, 0.34028235E39) = LESS +compare (~0.123, 0.17014117E39) = LESS +compareReal (~0.123, 0.17014117E39) = LESS +compare (~0.123, 0.123E4) = LESS +compareReal (~0.123, 0.123E4) = LESS +compare (~0.123, 0.123E2) = LESS +compareReal (~0.123, 0.123E2) = LESS +compare (~0.123, 0.31415927E1) = LESS +compareReal (~0.123, 0.31415927E1) = LESS +compare (~0.123, 0.27182817E1) = LESS +compareReal (~0.123, 0.27182817E1) = LESS +compare (~0.123, 0.123E1) = LESS +compareReal (~0.123, 0.123E1) = LESS +compare (~0.123, 0.123) = LESS +compareReal (~0.123, 0.123) = LESS +compare (~0.123, 0.123E~2) = LESS +compareReal (~0.123, 0.123E~2) = LESS +compare (~0.123, 0.11754944E~37) = LESS +compareReal (~0.123, 0.11754944E~37) = LESS +compare (~0.123, 0.5877472E~38) = LESS +compareReal (~0.123, 0.5877472E~38) = LESS +compare (~0.123, 0.1E~44) = LESS +compareReal (~0.123, 0.1E~44) = LESS +compare (~0.123, 0.0) = LESS +compareReal (~0.123, 0.0) = LESS +compare (~0.123, ~0.34028235E39) = GREATER +compareReal (~0.123, ~0.34028235E39) = GREATER +compare (~0.123, ~0.17014117E39) = GREATER +compareReal (~0.123, ~0.17014117E39) = GREATER +compare (~0.123, ~0.123E4) = GREATER +compareReal (~0.123, ~0.123E4) = GREATER +compare (~0.123, ~0.123E2) = GREATER +compareReal (~0.123, ~0.123E2) = GREATER +compare (~0.123, ~0.31415927E1) = GREATER +compareReal (~0.123, ~0.31415927E1) = GREATER +compare (~0.123, ~0.27182817E1) = GREATER +compareReal (~0.123, ~0.27182817E1) = GREATER +compare (~0.123, ~0.123E1) = GREATER +compareReal (~0.123, ~0.123E1) = GREATER +compare (~0.123, ~0.123) = EQUAL +compareReal (~0.123, ~0.123) = EQUAL +compare (~0.123, ~0.123E~2) = LESS +compareReal (~0.123, ~0.123E~2) = LESS +compare (~0.123, ~0.11754944E~37) = LESS +compareReal (~0.123, ~0.11754944E~37) = LESS +compare (~0.123, ~0.5877472E~38) = LESS +compareReal (~0.123, ~0.5877472E~38) = LESS +compare (~0.123, ~0.1E~44) = LESS +compareReal (~0.123, ~0.1E~44) = LESS +compare (~0.123, ~0.0) = LESS +compareReal (~0.123, ~0.0) = LESS +compare (~0.123E~2, 0.34028235E39) = LESS +compareReal (~0.123E~2, 0.34028235E39) = LESS +compare (~0.123E~2, 0.17014117E39) = LESS +compareReal (~0.123E~2, 0.17014117E39) = LESS +compare (~0.123E~2, 0.123E4) = LESS +compareReal (~0.123E~2, 0.123E4) = LESS +compare (~0.123E~2, 0.123E2) = LESS +compareReal (~0.123E~2, 0.123E2) = LESS +compare (~0.123E~2, 0.31415927E1) = LESS +compareReal (~0.123E~2, 0.31415927E1) = LESS +compare (~0.123E~2, 0.27182817E1) = LESS +compareReal (~0.123E~2, 0.27182817E1) = LESS +compare (~0.123E~2, 0.123E1) = LESS +compareReal (~0.123E~2, 0.123E1) = LESS +compare (~0.123E~2, 0.123) = LESS +compareReal (~0.123E~2, 0.123) = LESS +compare (~0.123E~2, 0.123E~2) = LESS +compareReal (~0.123E~2, 0.123E~2) = LESS +compare (~0.123E~2, 0.11754944E~37) = LESS +compareReal (~0.123E~2, 0.11754944E~37) = LESS +compare (~0.123E~2, 0.5877472E~38) = LESS +compareReal (~0.123E~2, 0.5877472E~38) = LESS +compare (~0.123E~2, 0.1E~44) = LESS +compareReal (~0.123E~2, 0.1E~44) = LESS +compare (~0.123E~2, 0.0) = LESS +compareReal (~0.123E~2, 0.0) = LESS +compare (~0.123E~2, ~0.34028235E39) = GREATER +compareReal (~0.123E~2, ~0.34028235E39) = GREATER +compare (~0.123E~2, ~0.17014117E39) = GREATER +compareReal (~0.123E~2, ~0.17014117E39) = GREATER +compare (~0.123E~2, ~0.123E4) = GREATER +compareReal (~0.123E~2, ~0.123E4) = GREATER +compare (~0.123E~2, ~0.123E2) = GREATER +compareReal (~0.123E~2, ~0.123E2) = GREATER +compare (~0.123E~2, ~0.31415927E1) = GREATER +compareReal (~0.123E~2, ~0.31415927E1) = GREATER +compare (~0.123E~2, ~0.27182817E1) = GREATER +compareReal (~0.123E~2, ~0.27182817E1) = GREATER +compare (~0.123E~2, ~0.123E1) = GREATER +compareReal (~0.123E~2, ~0.123E1) = GREATER +compare (~0.123E~2, ~0.123) = GREATER +compareReal (~0.123E~2, ~0.123) = GREATER +compare (~0.123E~2, ~0.123E~2) = EQUAL +compareReal (~0.123E~2, ~0.123E~2) = EQUAL +compare (~0.123E~2, ~0.11754944E~37) = LESS +compareReal (~0.123E~2, ~0.11754944E~37) = LESS +compare (~0.123E~2, ~0.5877472E~38) = LESS +compareReal (~0.123E~2, ~0.5877472E~38) = LESS +compare (~0.123E~2, ~0.1E~44) = LESS +compareReal (~0.123E~2, ~0.1E~44) = LESS +compare (~0.123E~2, ~0.0) = LESS +compareReal (~0.123E~2, ~0.0) = LESS +compare (~0.11754944E~37, 0.34028235E39) = LESS +compareReal (~0.11754944E~37, 0.34028235E39) = LESS +compare (~0.11754944E~37, 0.17014117E39) = LESS +compareReal (~0.11754944E~37, 0.17014117E39) = LESS +compare (~0.11754944E~37, 0.123E4) = LESS +compareReal (~0.11754944E~37, 0.123E4) = LESS +compare (~0.11754944E~37, 0.123E2) = LESS +compareReal (~0.11754944E~37, 0.123E2) = LESS +compare (~0.11754944E~37, 0.31415927E1) = LESS +compareReal (~0.11754944E~37, 0.31415927E1) = LESS +compare (~0.11754944E~37, 0.27182817E1) = LESS +compareReal (~0.11754944E~37, 0.27182817E1) = LESS +compare (~0.11754944E~37, 0.123E1) = LESS +compareReal (~0.11754944E~37, 0.123E1) = LESS +compare (~0.11754944E~37, 0.123) = LESS +compareReal (~0.11754944E~37, 0.123) = LESS +compare (~0.11754944E~37, 0.123E~2) = LESS +compareReal (~0.11754944E~37, 0.123E~2) = LESS +compare (~0.11754944E~37, 0.11754944E~37) = LESS +compareReal (~0.11754944E~37, 0.11754944E~37) = LESS +compare (~0.11754944E~37, 0.5877472E~38) = LESS +compareReal (~0.11754944E~37, 0.5877472E~38) = LESS +compare (~0.11754944E~37, 0.1E~44) = LESS +compareReal (~0.11754944E~37, 0.1E~44) = LESS +compare (~0.11754944E~37, 0.0) = LESS +compareReal (~0.11754944E~37, 0.0) = LESS +compare (~0.11754944E~37, ~0.34028235E39) = GREATER +compareReal (~0.11754944E~37, ~0.34028235E39) = GREATER +compare (~0.11754944E~37, ~0.17014117E39) = GREATER +compareReal (~0.11754944E~37, ~0.17014117E39) = GREATER +compare (~0.11754944E~37, ~0.123E4) = GREATER +compareReal (~0.11754944E~37, ~0.123E4) = GREATER +compare (~0.11754944E~37, ~0.123E2) = GREATER +compareReal (~0.11754944E~37, ~0.123E2) = GREATER +compare (~0.11754944E~37, ~0.31415927E1) = GREATER +compareReal (~0.11754944E~37, ~0.31415927E1) = GREATER +compare (~0.11754944E~37, ~0.27182817E1) = GREATER +compareReal (~0.11754944E~37, ~0.27182817E1) = GREATER +compare (~0.11754944E~37, ~0.123E1) = GREATER +compareReal (~0.11754944E~37, ~0.123E1) = GREATER +compare (~0.11754944E~37, ~0.123) = GREATER +compareReal (~0.11754944E~37, ~0.123) = GREATER +compare (~0.11754944E~37, ~0.123E~2) = GREATER +compareReal (~0.11754944E~37, ~0.123E~2) = GREATER +compare (~0.11754944E~37, ~0.11754944E~37) = EQUAL +compareReal (~0.11754944E~37, ~0.11754944E~37) = EQUAL +compare (~0.11754944E~37, ~0.5877472E~38) = LESS +compareReal (~0.11754944E~37, ~0.5877472E~38) = LESS +compare (~0.11754944E~37, ~0.1E~44) = LESS +compareReal (~0.11754944E~37, ~0.1E~44) = LESS +compare (~0.11754944E~37, ~0.0) = LESS +compareReal (~0.11754944E~37, ~0.0) = LESS +compare (~0.5877472E~38, 0.34028235E39) = LESS +compareReal (~0.5877472E~38, 0.34028235E39) = LESS +compare (~0.5877472E~38, 0.17014117E39) = LESS +compareReal (~0.5877472E~38, 0.17014117E39) = LESS +compare (~0.5877472E~38, 0.123E4) = LESS +compareReal (~0.5877472E~38, 0.123E4) = LESS +compare (~0.5877472E~38, 0.123E2) = LESS +compareReal (~0.5877472E~38, 0.123E2) = LESS +compare (~0.5877472E~38, 0.31415927E1) = LESS +compareReal (~0.5877472E~38, 0.31415927E1) = LESS +compare (~0.5877472E~38, 0.27182817E1) = LESS +compareReal (~0.5877472E~38, 0.27182817E1) = LESS +compare (~0.5877472E~38, 0.123E1) = LESS +compareReal (~0.5877472E~38, 0.123E1) = LESS +compare (~0.5877472E~38, 0.123) = LESS +compareReal (~0.5877472E~38, 0.123) = LESS +compare (~0.5877472E~38, 0.123E~2) = LESS +compareReal (~0.5877472E~38, 0.123E~2) = LESS +compare (~0.5877472E~38, 0.11754944E~37) = LESS +compareReal (~0.5877472E~38, 0.11754944E~37) = LESS +compare (~0.5877472E~38, 0.5877472E~38) = LESS +compareReal (~0.5877472E~38, 0.5877472E~38) = LESS +compare (~0.5877472E~38, 0.1E~44) = LESS +compareReal (~0.5877472E~38, 0.1E~44) = LESS +compare (~0.5877472E~38, 0.0) = LESS +compareReal (~0.5877472E~38, 0.0) = LESS +compare (~0.5877472E~38, ~0.34028235E39) = GREATER +compareReal (~0.5877472E~38, ~0.34028235E39) = GREATER +compare (~0.5877472E~38, ~0.17014117E39) = GREATER +compareReal (~0.5877472E~38, ~0.17014117E39) = GREATER +compare (~0.5877472E~38, ~0.123E4) = GREATER +compareReal (~0.5877472E~38, ~0.123E4) = GREATER +compare (~0.5877472E~38, ~0.123E2) = GREATER +compareReal (~0.5877472E~38, ~0.123E2) = GREATER +compare (~0.5877472E~38, ~0.31415927E1) = GREATER +compareReal (~0.5877472E~38, ~0.31415927E1) = GREATER +compare (~0.5877472E~38, ~0.27182817E1) = GREATER +compareReal (~0.5877472E~38, ~0.27182817E1) = GREATER +compare (~0.5877472E~38, ~0.123E1) = GREATER +compareReal (~0.5877472E~38, ~0.123E1) = GREATER +compare (~0.5877472E~38, ~0.123) = GREATER +compareReal (~0.5877472E~38, ~0.123) = GREATER +compare (~0.5877472E~38, ~0.123E~2) = GREATER +compareReal (~0.5877472E~38, ~0.123E~2) = GREATER +compare (~0.5877472E~38, ~0.11754944E~37) = GREATER +compareReal (~0.5877472E~38, ~0.11754944E~37) = GREATER +compare (~0.5877472E~38, ~0.5877472E~38) = EQUAL +compareReal (~0.5877472E~38, ~0.5877472E~38) = EQUAL +compare (~0.5877472E~38, ~0.1E~44) = LESS +compareReal (~0.5877472E~38, ~0.1E~44) = LESS +compare (~0.5877472E~38, ~0.0) = LESS +compareReal (~0.5877472E~38, ~0.0) = LESS +compare (~0.1E~44, 0.34028235E39) = LESS +compareReal (~0.1E~44, 0.34028235E39) = LESS +compare (~0.1E~44, 0.17014117E39) = LESS +compareReal (~0.1E~44, 0.17014117E39) = LESS +compare (~0.1E~44, 0.123E4) = LESS +compareReal (~0.1E~44, 0.123E4) = LESS +compare (~0.1E~44, 0.123E2) = LESS +compareReal (~0.1E~44, 0.123E2) = LESS +compare (~0.1E~44, 0.31415927E1) = LESS +compareReal (~0.1E~44, 0.31415927E1) = LESS +compare (~0.1E~44, 0.27182817E1) = LESS +compareReal (~0.1E~44, 0.27182817E1) = LESS +compare (~0.1E~44, 0.123E1) = LESS +compareReal (~0.1E~44, 0.123E1) = LESS +compare (~0.1E~44, 0.123) = LESS +compareReal (~0.1E~44, 0.123) = LESS +compare (~0.1E~44, 0.123E~2) = LESS +compareReal (~0.1E~44, 0.123E~2) = LESS +compare (~0.1E~44, 0.11754944E~37) = LESS +compareReal (~0.1E~44, 0.11754944E~37) = LESS +compare (~0.1E~44, 0.5877472E~38) = LESS +compareReal (~0.1E~44, 0.5877472E~38) = LESS +compare (~0.1E~44, 0.1E~44) = LESS +compareReal (~0.1E~44, 0.1E~44) = LESS +compare (~0.1E~44, 0.0) = LESS +compareReal (~0.1E~44, 0.0) = LESS +compare (~0.1E~44, ~0.34028235E39) = GREATER +compareReal (~0.1E~44, ~0.34028235E39) = GREATER +compare (~0.1E~44, ~0.17014117E39) = GREATER +compareReal (~0.1E~44, ~0.17014117E39) = GREATER +compare (~0.1E~44, ~0.123E4) = GREATER +compareReal (~0.1E~44, ~0.123E4) = GREATER +compare (~0.1E~44, ~0.123E2) = GREATER +compareReal (~0.1E~44, ~0.123E2) = GREATER +compare (~0.1E~44, ~0.31415927E1) = GREATER +compareReal (~0.1E~44, ~0.31415927E1) = GREATER +compare (~0.1E~44, ~0.27182817E1) = GREATER +compareReal (~0.1E~44, ~0.27182817E1) = GREATER +compare (~0.1E~44, ~0.123E1) = GREATER +compareReal (~0.1E~44, ~0.123E1) = GREATER +compare (~0.1E~44, ~0.123) = GREATER +compareReal (~0.1E~44, ~0.123) = GREATER +compare (~0.1E~44, ~0.123E~2) = GREATER +compareReal (~0.1E~44, ~0.123E~2) = GREATER +compare (~0.1E~44, ~0.11754944E~37) = GREATER +compareReal (~0.1E~44, ~0.11754944E~37) = GREATER +compare (~0.1E~44, ~0.5877472E~38) = GREATER +compareReal (~0.1E~44, ~0.5877472E~38) = GREATER +compare (~0.1E~44, ~0.1E~44) = EQUAL +compareReal (~0.1E~44, ~0.1E~44) = EQUAL +compare (~0.1E~44, ~0.0) = LESS +compareReal (~0.1E~44, ~0.0) = LESS +compare (~0.0, 0.34028235E39) = LESS +compareReal (~0.0, 0.34028235E39) = LESS +compare (~0.0, 0.17014117E39) = LESS +compareReal (~0.0, 0.17014117E39) = LESS +compare (~0.0, 0.123E4) = LESS +compareReal (~0.0, 0.123E4) = LESS +compare (~0.0, 0.123E2) = LESS +compareReal (~0.0, 0.123E2) = LESS +compare (~0.0, 0.31415927E1) = LESS +compareReal (~0.0, 0.31415927E1) = LESS +compare (~0.0, 0.27182817E1) = LESS +compareReal (~0.0, 0.27182817E1) = LESS +compare (~0.0, 0.123E1) = LESS +compareReal (~0.0, 0.123E1) = LESS +compare (~0.0, 0.123) = LESS +compareReal (~0.0, 0.123) = LESS +compare (~0.0, 0.123E~2) = LESS +compareReal (~0.0, 0.123E~2) = LESS +compare (~0.0, 0.11754944E~37) = LESS +compareReal (~0.0, 0.11754944E~37) = LESS +compare (~0.0, 0.5877472E~38) = LESS +compareReal (~0.0, 0.5877472E~38) = LESS +compare (~0.0, 0.1E~44) = LESS +compareReal (~0.0, 0.1E~44) = LESS +compare (~0.0, 0.0) = EQUAL +compareReal (~0.0, 0.0) = EQUAL +compare (~0.0, ~0.34028235E39) = GREATER +compareReal (~0.0, ~0.34028235E39) = GREATER +compare (~0.0, ~0.17014117E39) = GREATER +compareReal (~0.0, ~0.17014117E39) = GREATER +compare (~0.0, ~0.123E4) = GREATER +compareReal (~0.0, ~0.123E4) = GREATER +compare (~0.0, ~0.123E2) = GREATER +compareReal (~0.0, ~0.123E2) = GREATER +compare (~0.0, ~0.31415927E1) = GREATER +compareReal (~0.0, ~0.31415927E1) = GREATER +compare (~0.0, ~0.27182817E1) = GREATER +compareReal (~0.0, ~0.27182817E1) = GREATER +compare (~0.0, ~0.123E1) = GREATER +compareReal (~0.0, ~0.123E1) = GREATER +compare (~0.0, ~0.123) = GREATER +compareReal (~0.0, ~0.123) = GREATER +compare (~0.0, ~0.123E~2) = GREATER +compareReal (~0.0, ~0.123E~2) = GREATER +compare (~0.0, ~0.11754944E~37) = GREATER +compareReal (~0.0, ~0.11754944E~37) = GREATER +compare (~0.0, ~0.5877472E~38) = GREATER +compareReal (~0.0, ~0.5877472E~38) = GREATER +compare (~0.0, ~0.1E~44) = GREATER +compareReal (~0.0, ~0.1E~44) = GREATER +compare (~0.0, ~0.0) = EQUAL +compareReal (~0.0, ~0.0) = EQUAL + +Testing abs + +Testing {from,to}ManExp +0.34028235E39 = 0.99999994 * 2^128 + = 0.34028235E39 +0.17014117E39 = 0.99999994 * 2^127 + = 0.17014117E39 +0.123E4 = 0.60058594 * 2^11 + = 0.123E4 +0.123E2 = 0.76875 * 2^4 + = 0.123E2 +0.31415927E1 = 0.7853982 * 2^2 + = 0.31415927E1 +0.27182817E1 = 0.67957044 * 2^2 + = 0.27182817E1 +0.123E1 = 0.615 * 2^1 + = 0.123E1 +0.123 = 0.984 * 2^~3 + = 0.123 +0.123E~2 = 0.62976 * 2^~9 + = 0.123E~2 +0.11754944E~37 = 0.5 * 2^~125 + = 0.11754944E~37 +0.0 = 0.0 * 2^0 + = 0.0 +~0.34028235E39 = ~0.99999994 * 2^128 + = ~0.34028235E39 +~0.17014117E39 = ~0.99999994 * 2^127 + = ~0.17014117E39 +~0.123E4 = ~0.60058594 * 2^11 + = ~0.123E4 +~0.123E2 = ~0.76875 * 2^4 + = ~0.123E2 +~0.31415927E1 = ~0.7853982 * 2^2 + = ~0.31415927E1 +~0.27182817E1 = ~0.67957044 * 2^2 + = ~0.27182817E1 +~0.123E1 = ~0.615 * 2^1 + = ~0.123E1 +~0.123 = ~0.984 * 2^~3 + = ~0.123 +~0.123E~2 = ~0.62976 * 2^~9 + = ~0.123E~2 +~0.11754944E~37 = ~0.5 * 2^~125 + = ~0.11754944E~37 +~0.0 = ~0.0 * 2^0 + = ~0.0 + +Testing split + +Testing {from,to}Large + +Testing Real64 + +Testing fmt +0.17976931348623157E309 +1.797693E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 +1.79769313486E308 +2E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 +2E308 +1.7976931349E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 +1.797693135E308 +0.8988465674311579E308 +8.988466E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +8.98846567431E307 +9E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 +9E307 +8.9884656743E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 +8.988465674E307 +0.123E4 +1.230000E3 +1230.000000 +1230 +1E3 +1230 +1E3 +1.2300000000E3 +1230.0000000000 +1230 +0.123E2 +1.230000E1 +12.300000 +12.3 +1E1 +12 +10 +1.2300000000E1 +12.3000000000 +12.3 +0.3141592653589793E1 +3.141593E0 +3.141593 +3.14159265359 +3E0 +3 +3 +3.1415926536E0 +3.1415926536 +3.141592654 +0.2718281828459045E1 +2.718282E0 +2.718282 +2.71828182846 +3E0 +3 +3 +2.7182818285E0 +2.7182818285 +2.718281828 +0.123E1 +1.230000E0 +1.230000 +1.23 +1E0 1 1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf +1.2300000000E0 +1.2300000000 +1.23 +0.123 +1.230000E~1 +0.123000 +0.123 +1E~1 0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195518 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136047 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342376947 -1.856761098 -nan -nan -~0.9424888492 -~1.564468503 -nan -~2.819815874 -~0.8425793648 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240715 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 +0.1 +1.2300000000E~1 +0.1230000000 +0.123 +0.123E~2 +1.230000E~3 +0.001230 +0.00123 +1E~3 0 +1E~3 +1.2300000000E~3 +0.0012300000 +0.00123 +0.22250738585072014E~307 +2.225074E~308 +0.000000 +2.22507385851E~308 +2E~308 0 -1 -1 -1 -~inf -~inf +2E~308 +2.2250738585E~308 +0.0000000000 +2.225073859E~308 +0.11125369292536007E~307 +1.112537E~308 +0.000000 +1.11253692925E~308 +1E~308 0 +1E~308 +1.1125369293E~308 +0.0000000000 +1.112536929E~308 +0.5E~323 +4.940656E~324 +0.000000 +4.94065645841E~324 +5E~324 0 +5E~324 +4.9406564584E~324 +0.0000000000 +4.940656458E~324 +0.0 +0.000000E0 +0.000000 0 +0E0 0 0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf +0.0000000000E0 +0.0000000000 0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 +~0.17976931348623157E309 +~1.797693E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 +~1.79769313486E308 +~2E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 +~2E308 +~1.7976931349E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 +~1.797693135E308 +~0.8988465674311579E308 +~8.988466E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +~8.98846567431E307 +~9E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 +~9E307 +~8.9884656743E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 +~8.988465674E307 ~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 +~1.230000E3 +~1230.000000 +~1230 +~1E3 +~1230 +~1E3 +~1.2300000000E3 +~1230.0000000000 +~1230 ~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 +~1.230000E1 +~12.300000 +~12.3 +~1E1 +~12 +~10 +~1.2300000000E1 +~12.3000000000 +~12.3 +~0.3141592653589793E1 +~3.141593E0 +~3.141593 +~3.14159265359 +~3E0 +~3 +~3 +~3.1415926536E0 +~3.1415926536 +~3.141592654 +~0.2718281828459045E1 +~2.718282E0 +~2.718282 +~2.71828182846 +~3E0 +~3 +~3 +~2.7182818285E0 +~2.7182818285 +~2.718281828 ~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 +~1.230000E0 +~1.230000 +~1.23 +~1E0 +~1 +~1 +~1.2300000000E0 +~1.2300000000 +~1.23 ~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.5877472E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754942E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 +~1.230000E~1 +~0.123000 +~0.123 +~1E~1 +~0 +~0.1 +~1.2300000000E~1 +~0.1230000000 ~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 ~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.5877472E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754942E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.5877472E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.5877472E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754942E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754942E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 +~1.230000E~3 +~0.001230 +~0.00123 +~1E~3 +~0 +~1E~3 +~1.2300000000E~3 +~0.0012300000 +~0.00123 +~0.22250738585072014E~307 +~2.225074E~308 +~0.000000 +~2.22507385851E~308 +~2E~308 +~0 +~2E~308 +~2.2250738585E~308 +~0.0000000000 +~2.225073859E~308 +~0.11125369292536007E~307 +~1.112537E~308 +~0.000000 +~1.11253692925E~308 +~1E~308 +~0 +~1E~308 +~1.1125369293E~308 +~0.0000000000 +~1.112536929E~308 +~0.5E~323 +~4.940656E~324 +~0.000000 +~4.94065645841E~324 +~5E~324 +~0 +~5E~324 +~4.9406564584E~324 +~0.0000000000 +~4.940656458E~324 ~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.5877472E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754942E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.5877472E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754942E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.5877472E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.5877472E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754942E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754942E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false +0.000000E0 +0.000000 +0 +0E0 +0 +0 +0.0000000000E0 +0.0000000000 +0 + +Testing scan +0.17976931348623157E309 0.17976931348623157E309 +0.8988465674311579E308 0.8988465674311579E308 +0.123E4 0.123E4 +0.123E2 0.123E2 +0.3141592653589793E1 0.3141592653589793E1 +0.2718281828459045E1 0.2718281828459045E1 +0.123E1 0.123E1 +0.123 0.123 +0.123E~2 0.123E~2 +0.22250738585072014E~307 0.22250738585072014E~307 +0.11125369292536007E~307 0.11125369292536007E~307 +0.5E~323 0.5E~323 +0.0 0.0 +~0.17976931348623157E309 ~0.17976931348623157E309 +~0.8988465674311579E308 ~0.8988465674311579E308 +~0.123E4 ~0.123E4 +~0.123E2 ~0.123E2 +~0.3141592653589793E1 ~0.3141592653589793E1 +~0.2718281828459045E1 ~0.2718281828459045E1 +~0.123E1 ~0.123E1 +~0.123 ~0.123 +~0.123E~2 ~0.123E~2 +~0.22250738585072014E~307 ~0.22250738585072014E~307 +~0.11125369292536007E~307 ~0.11125369292536007E~307 +~0.5E~323 ~0.5E~323 +~0.0 ~0.0 +inf inf +~inf ~inf +nan nan +inf inf + +Testing checkFloat + +Testing class, isFinite, isNan, isNormal +0.17976931348623157E309 normal + isFinite = true isNan = false isNormal = true +0.8988465674311579E308 normal + isFinite = true isNan = false isNormal = true +0.123E4 normal + isFinite = true isNan = false isNormal = true +0.123E2 normal + isFinite = true isNan = false isNormal = true +0.3141592653589793E1 normal + isFinite = true isNan = false isNormal = true +0.2718281828459045E1 normal + isFinite = true isNan = false isNormal = true +0.123E1 normal + isFinite = true isNan = false isNormal = true +0.123 normal + isFinite = true isNan = false isNormal = true +0.123E~2 normal + isFinite = true isNan = false isNormal = true +0.22250738585072014E~307 normal + isFinite = true isNan = false isNormal = true +0.11125369292536007E~307 subnormal + isFinite = true isNan = false isNormal = false +0.5E~323 subnormal + isFinite = true isNan = false isNormal = false +0.0 zero + isFinite = true isNan = false isNormal = false +~0.17976931348623157E309 normal + isFinite = true isNan = false isNormal = true +~0.8988465674311579E308 normal + isFinite = true isNan = false isNormal = true +~0.123E4 normal + isFinite = true isNan = false isNormal = true +~0.123E2 normal + isFinite = true isNan = false isNormal = true +~0.3141592653589793E1 normal + isFinite = true isNan = false isNormal = true +~0.2718281828459045E1 normal + isFinite = true isNan = false isNormal = true +~0.123E1 normal + isFinite = true isNan = false isNormal = true +~0.123 normal + isFinite = true isNan = false isNormal = true +~0.123E~2 normal + isFinite = true isNan = false isNormal = true +~0.22250738585072014E~307 normal + isFinite = true isNan = false isNormal = true +~0.11125369292536007E~307 subnormal + isFinite = true isNan = false isNormal = false +~0.5E~323 subnormal + isFinite = true isNan = false isNormal = false +~0.0 zero + isFinite = true isNan = false isNormal = false +inf inf + isFinite = false isNan = false isNormal = false +~inf inf + isFinite = false isNan = false isNormal = false +nan nan + isFinite = false isNan = true isNormal = false +inf inf + isFinite = false isNan = false isNormal = false + +Testing maxFinite, minPos, minNormalPos +1.79769313486E308 +1.79769313486E308 true -false -false -false -false +4.94065645841E~324 +4.94065645841E~324 true +2.22507385851E~308 +2.22507385851E~308 true +Testring fromString + +Testing {from,to}Decimal +inf inf true +inf inf true +~inf ~inf true +~inf ~inf true +inf inf true +inf inf true +~inf ~inf true +~inf ~inf true +nan nan true +nan nan true +~nan nan true +~nan nan true +0.0 0.0 true +0.0 0.0 true +0.0 0.0 true +~0.0 ~0.0 true +0.15E2 0.15E2 true +0.15E1 0.15E1 true +~0.15E2 ~0.15E2 true +0.15E2 0.15E2 true +0.15E~2 0.15E~2 true +0.15E~2 0.15E~2 true +0.15E~2 0.15E~2 true +0.12E1000 inf false +~0.12E1000 ~inf false +0.1E~998 0.0 false +~0.1E~998 ~0.0 false +inf inf true + +Testing {from,to}LargeInt +0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 +0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 +0.123E4 1230 0.123E4 +0.123E2 12 0.12E2 +0.3141592653589793E1 3 0.3E1 +0.2718281828459045E1 2 0.2E1 +0.123E1 1 0.1E1 +0.123 0 0.0 +0.123E~2 0 0.0 +0.22250738585072014E~307 0 0.0 +0.11125369292536007E~307 0 0.0 +0.5E~323 0 0.0 +0.0 0 0.0 +~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 +~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 +~0.123E4 ~1230 ~0.123E4 +~0.123E2 ~13 ~0.13E2 +~0.3141592653589793E1 ~4 ~0.4E1 +~0.2718281828459045E1 ~3 ~0.3E1 +~0.123E1 ~2 ~0.2E1 +~0.123 ~1 ~0.1E1 +~0.123E~2 ~1 ~0.1E1 +~0.22250738585072014E~307 ~1 ~0.1E1 +~0.11125369292536007E~307 ~1 ~0.1E1 +~0.5E~323 ~1 ~0.1E1 +~0.0 0 0.0 +nearest 0.0 0 +nearest ~0.0 0 +nearest 0.1E13 1000000000000 +nearest ~0.1E13 ~1000000000000 +nearest 0.25 0 +nearest ~0.25 0 +nearest 0.100000000000025E13 1000000000000 +nearest ~0.99999999999975E12 ~1000000000000 +nearest 0.5 0 +nearest ~0.5 0 +nearest 0.10000000000005E13 1000000000000 +nearest ~0.9999999999995E12 ~1000000000000 +nearest 0.75 1 +nearest ~0.75 ~1 +nearest 0.100000000000075E13 1000000000001 +nearest ~0.99999999999925E12 ~999999999999 +nearest 0.1E1 1 +nearest ~0.1E1 ~1 +nearest 0.1000000000001E13 1000000000001 +nearest ~0.999999999999E12 ~999999999999 +nearest 0.125E1 1 +nearest ~0.125E1 ~1 +nearest 0.100000000000125E13 1000000000001 +nearest ~0.99999999999875E12 ~999999999999 +nearest 0.15E1 2 +nearest ~0.15E1 ~2 +nearest 0.10000000000015E13 1000000000002 +nearest ~0.9999999999985E12 ~999999999998 +nearest 0.175E1 2 +nearest ~0.175E1 ~2 +nearest 0.100000000000175E13 1000000000002 +nearest ~0.99999999999825E12 ~999999999998 +nearest 0.2E1 2 +nearest ~0.2E1 ~2 +nearest 0.1000000000002E13 1000000000002 +nearest ~0.999999999998E12 ~999999999998 +nearest 0.25E1 2 +nearest ~0.25E1 ~2 +nearest 0.10000000000025E13 1000000000002 +nearest ~0.9999999999975E12 ~999999999998 +nearest 0.3E1 3 +nearest ~0.3E1 ~3 +nearest 0.1000000000003E13 1000000000003 +nearest ~0.999999999997E12 ~999999999997 +neginf 0.0 0 +neginf ~0.0 0 +neginf 0.1E13 1000000000000 +neginf ~0.1E13 ~1000000000000 +neginf 0.25 0 +neginf ~0.25 ~1 +neginf 0.100000000000025E13 1000000000000 +neginf ~0.99999999999975E12 ~1000000000000 +neginf 0.5 0 +neginf ~0.5 ~1 +neginf 0.10000000000005E13 1000000000000 +neginf ~0.9999999999995E12 ~1000000000000 +neginf 0.75 0 +neginf ~0.75 ~1 +neginf 0.100000000000075E13 1000000000000 +neginf ~0.99999999999925E12 ~1000000000000 +neginf 0.1E1 1 +neginf ~0.1E1 ~1 +neginf 0.1000000000001E13 1000000000001 +neginf ~0.999999999999E12 ~999999999999 +neginf 0.125E1 1 +neginf ~0.125E1 ~2 +neginf 0.100000000000125E13 1000000000001 +neginf ~0.99999999999875E12 ~999999999999 +neginf 0.15E1 1 +neginf ~0.15E1 ~2 +neginf 0.10000000000015E13 1000000000001 +neginf ~0.9999999999985E12 ~999999999999 +neginf 0.175E1 1 +neginf ~0.175E1 ~2 +neginf 0.100000000000175E13 1000000000001 +neginf ~0.99999999999825E12 ~999999999999 +neginf 0.2E1 2 +neginf ~0.2E1 ~2 +neginf 0.1000000000002E13 1000000000002 +neginf ~0.999999999998E12 ~999999999998 +neginf 0.25E1 2 +neginf ~0.25E1 ~3 +neginf 0.10000000000025E13 1000000000002 +neginf ~0.9999999999975E12 ~999999999998 +neginf 0.3E1 3 +neginf ~0.3E1 ~3 +neginf 0.1000000000003E13 1000000000003 +neginf ~0.999999999997E12 ~999999999997 +posinf 0.0 0 +posinf ~0.0 0 +posinf 0.1E13 1000000000000 +posinf ~0.1E13 ~1000000000000 +posinf 0.25 1 +posinf ~0.25 0 +posinf 0.100000000000025E13 1000000000001 +posinf ~0.99999999999975E12 ~999999999999 +posinf 0.5 1 +posinf ~0.5 0 +posinf 0.10000000000005E13 1000000000001 +posinf ~0.9999999999995E12 ~999999999999 +posinf 0.75 1 +posinf ~0.75 0 +posinf 0.100000000000075E13 1000000000001 +posinf ~0.99999999999925E12 ~999999999999 +posinf 0.1E1 1 +posinf ~0.1E1 ~1 +posinf 0.1000000000001E13 1000000000001 +posinf ~0.999999999999E12 ~999999999999 +posinf 0.125E1 2 +posinf ~0.125E1 ~1 +posinf 0.100000000000125E13 1000000000002 +posinf ~0.99999999999875E12 ~999999999998 +posinf 0.15E1 2 +posinf ~0.15E1 ~1 +posinf 0.10000000000015E13 1000000000002 +posinf ~0.9999999999985E12 ~999999999998 +posinf 0.175E1 2 +posinf ~0.175E1 ~1 +posinf 0.100000000000175E13 1000000000002 +posinf ~0.99999999999825E12 ~999999999998 +posinf 0.2E1 2 +posinf ~0.2E1 ~2 +posinf 0.1000000000002E13 1000000000002 +posinf ~0.999999999998E12 ~999999999998 +posinf 0.25E1 3 +posinf ~0.25E1 ~2 +posinf 0.10000000000025E13 1000000000003 +posinf ~0.9999999999975E12 ~999999999997 +posinf 0.3E1 3 +posinf ~0.3E1 ~3 +posinf 0.1000000000003E13 1000000000003 +posinf ~0.999999999997E12 ~999999999997 +zero 0.0 0 +zero ~0.0 0 +zero 0.1E13 1000000000000 +zero ~0.1E13 ~1000000000000 +zero 0.25 0 +zero ~0.25 0 +zero 0.100000000000025E13 1000000000000 +zero ~0.99999999999975E12 ~999999999999 +zero 0.5 0 +zero ~0.5 0 +zero 0.10000000000005E13 1000000000000 +zero ~0.9999999999995E12 ~999999999999 +zero 0.75 0 +zero ~0.75 0 +zero 0.100000000000075E13 1000000000000 +zero ~0.99999999999925E12 ~999999999999 +zero 0.1E1 1 +zero ~0.1E1 ~1 +zero 0.1000000000001E13 1000000000001 +zero ~0.999999999999E12 ~999999999999 +zero 0.125E1 1 +zero ~0.125E1 ~1 +zero 0.100000000000125E13 1000000000001 +zero ~0.99999999999875E12 ~999999999998 +zero 0.15E1 1 +zero ~0.15E1 ~1 +zero 0.10000000000015E13 1000000000001 +zero ~0.9999999999985E12 ~999999999998 +zero 0.175E1 1 +zero ~0.175E1 ~1 +zero 0.100000000000175E13 1000000000001 +zero ~0.99999999999825E12 ~999999999998 +zero 0.2E1 2 +zero ~0.2E1 ~2 +zero 0.1000000000002E13 1000000000002 +zero ~0.999999999998E12 ~999999999998 +zero 0.25E1 2 +zero ~0.25E1 ~2 +zero 0.10000000000025E13 1000000000002 +zero ~0.9999999999975E12 ~999999999997 +zero 0.3E1 3 +zero ~0.3E1 ~3 +zero 0.1000000000003E13 1000000000003 +zero ~0.999999999997E12 ~999999999997 + +Testing fromInt + +Testing toInt + +Testing ceil,floor,round,trunc + +Testing copySign, sameSign, sign, signBit + +Testing max, min + +Testing Real.{~,*,+,-,/,nextAfter,rem} +~ (0.17976931348623157E309) = ~0.17976931348623157E309 +~ (0.8988465674311579E308) = ~0.8988465674311579E308 +~ (0.123E4) = ~0.123E4 +~ (0.123E2) = ~0.123E2 +~ (0.3141592653589793E1) = ~0.3141592653589793E1 +~ (0.2718281828459045E1) = ~0.2718281828459045E1 +~ (0.123E1) = ~0.123E1 +~ (0.123) = ~0.123 +~ (0.123E~2) = ~0.123E~2 +~ (0.22250738585072014E~307) = ~0.22250738585072014E~307 +~ (0.11125369292536007E~307) = ~0.11125369292536007E~307 +~ (0.5E~323) = ~0.5E~323 +~ (0.0) = ~0.0 +~ (~0.17976931348623157E309) = 0.17976931348623157E309 +~ (~0.8988465674311579E308) = 0.8988465674311579E308 +~ (~0.123E4) = 0.123E4 +~ (~0.123E2) = 0.123E2 +~ (~0.3141592653589793E1) = 0.3141592653589793E1 +~ (~0.2718281828459045E1) = 0.2718281828459045E1 +~ (~0.123E1) = 0.123E1 +~ (~0.123) = 0.123 +~ (~0.123E~2) = 0.123E~2 +~ (~0.22250738585072014E~307) = 0.22250738585072014E~307 +~ (~0.11125369292536007E~307) = 0.11125369292536007E~307 +~ (~0.5E~323) = 0.5E~323 +~ (~0.0) = 0.0 +~ (inf) = ~inf +~ (~inf) = inf +~ (nan) = nan +~ (inf) = ~inf +* (0.17976931348623157E309, 0.17976931348623157E309) = inf ++ (0.17976931348623157E309, 0.17976931348623157E309) = inf +- (0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +/ (0.17976931348623157E309, 0.17976931348623157E309) = 0.1E1 +nextAfter (0.17976931348623157E309, 0.17976931348623157E309) = 0.17976931348623157E309 +rem (0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +* (0.17976931348623157E309, 0.8988465674311579E308) = inf ++ (0.17976931348623157E309, 0.8988465674311579E308) = inf +- (0.17976931348623157E309, 0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.17976931348623157E309, 0.8988465674311579E308) = 0.2E1 +nextAfter (0.17976931348623157E309, 0.8988465674311579E308) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.8988465674311579E308) = 0.0 +* (0.17976931348623157E309, 0.123E4) = inf ++ (0.17976931348623157E309, 0.123E4) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E4) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E4) = 0.1461539134034403E306 +nextAfter (0.17976931348623157E309, 0.123E4) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E4) = 0.0 +* (0.17976931348623157E309, 0.123E2) = inf ++ (0.17976931348623157E309, 0.123E2) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E2) = 0.1461539134034403E308 +nextAfter (0.17976931348623157E309, 0.123E2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E2) = 0.0 +* (0.17976931348623157E309, 0.3141592653589793E1) = inf ++ (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.3141592653589793E1) = 0.5722234971514056E308 +nextAfter (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.3141592653589793E1) = 0.0 +* (0.17976931348623157E309, 0.2718281828459045E1) = inf ++ (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.2718281828459045E1) = 0.661334345850887E308 +nextAfter (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.2718281828459045E1) = 0.199584030953472E293 +* (0.17976931348623157E309, 0.123E1) = inf ++ (0.17976931348623157E309, 0.123E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E1) = 0.1461539134034403E309 +nextAfter (0.17976931348623157E309, 0.123E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E1) = 0.199584030953472E293 +* (0.17976931348623157E309, 0.123) = 0.22111625558806483E308 ++ (0.17976931348623157E309, 0.123) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123) = inf +nextAfter (0.17976931348623157E309, 0.123) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123) = ~inf +* (0.17976931348623157E309, 0.123E~2) = 0.2211162555880648E306 ++ (0.17976931348623157E309, 0.123E~2) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E~2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E~2) = inf +nextAfter (0.17976931348623157E309, 0.123E~2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E~2) = ~inf +* (0.17976931348623157E309, 0.22250738585072014E~307) = 0.39999999999999996E1 ++ (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.22250738585072014E~307) = inf +nextAfter (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.22250738585072014E~307) = ~inf +* (0.17976931348623157E309, 0.11125369292536007E~307) = 0.19999999999999998E1 ++ (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.11125369292536007E~307) = inf +nextAfter (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.11125369292536007E~307) = ~inf +* (0.17976931348623157E309, 0.5E~323) = 0.8881784197001251E~15 ++ (0.17976931348623157E309, 0.5E~323) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.5E~323) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.5E~323) = inf +nextAfter (0.17976931348623157E309, 0.5E~323) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.5E~323) = ~inf +* (0.17976931348623157E309, 0.0) = 0.0 ++ (0.17976931348623157E309, 0.0) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.0) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.0) = inf +nextAfter (0.17976931348623157E309, 0.0) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.0) = nan +* (0.17976931348623157E309, ~0.17976931348623157E309) = ~inf ++ (0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +- (0.17976931348623157E309, ~0.17976931348623157E309) = inf +/ (0.17976931348623157E309, ~0.17976931348623157E309) = ~0.1E1 +nextAfter (0.17976931348623157E309, ~0.17976931348623157E309) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +* (0.17976931348623157E309, ~0.8988465674311579E308) = ~inf ++ (0.17976931348623157E309, ~0.8988465674311579E308) = 0.8988465674311579E308 +- (0.17976931348623157E309, ~0.8988465674311579E308) = inf +/ (0.17976931348623157E309, ~0.8988465674311579E308) = ~0.2E1 +nextAfter (0.17976931348623157E309, ~0.8988465674311579E308) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.8988465674311579E308) = 0.0 +* (0.17976931348623157E309, ~0.123E4) = ~inf ++ (0.17976931348623157E309, ~0.123E4) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E4) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E4) = ~0.1461539134034403E306 +nextAfter (0.17976931348623157E309, ~0.123E4) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E4) = 0.0 +* (0.17976931348623157E309, ~0.123E2) = ~inf ++ (0.17976931348623157E309, ~0.123E2) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E2) = ~0.1461539134034403E308 +nextAfter (0.17976931348623157E309, ~0.123E2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E2) = 0.0 +* (0.17976931348623157E309, ~0.3141592653589793E1) = ~inf ++ (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.3141592653589793E1) = ~0.5722234971514056E308 +nextAfter (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.3141592653589793E1) = 0.0 +* (0.17976931348623157E309, ~0.2718281828459045E1) = ~inf ++ (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.2718281828459045E1) = ~0.661334345850887E308 +nextAfter (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.2718281828459045E1) = 0.199584030953472E293 +* (0.17976931348623157E309, ~0.123E1) = ~inf ++ (0.17976931348623157E309, ~0.123E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E1) = ~0.1461539134034403E309 +nextAfter (0.17976931348623157E309, ~0.123E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E1) = 0.199584030953472E293 +* (0.17976931348623157E309, ~0.123) = ~0.22111625558806483E308 ++ (0.17976931348623157E309, ~0.123) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123) = ~inf +nextAfter (0.17976931348623157E309, ~0.123) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123) = ~inf +* (0.17976931348623157E309, ~0.123E~2) = ~0.2211162555880648E306 ++ (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E~2) = ~inf +nextAfter (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E~2) = ~inf +* (0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.39999999999999996E1 ++ (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.22250738585072014E~307) = ~inf +nextAfter (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.22250738585072014E~307) = ~inf +* (0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.19999999999999998E1 ++ (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.11125369292536007E~307) = ~inf +nextAfter (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.11125369292536007E~307) = ~inf +* (0.17976931348623157E309, ~0.5E~323) = ~0.8881784197001251E~15 ++ (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.5E~323) = ~inf +nextAfter (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.5E~323) = ~inf +* (0.17976931348623157E309, ~0.0) = ~0.0 ++ (0.17976931348623157E309, ~0.0) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.0) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.0) = ~inf +nextAfter (0.17976931348623157E309, ~0.0) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.0) = nan +* (0.17976931348623157E309, inf) = inf ++ (0.17976931348623157E309, inf) = inf +- (0.17976931348623157E309, inf) = ~inf +/ (0.17976931348623157E309, inf) = 0.0 +nextAfter (0.17976931348623157E309, inf) = inf +rem (0.17976931348623157E309, inf) = 0.17976931348623157E309 +* (0.17976931348623157E309, ~inf) = ~inf ++ (0.17976931348623157E309, ~inf) = ~inf +- (0.17976931348623157E309, ~inf) = inf +/ (0.17976931348623157E309, ~inf) = ~0.0 +nextAfter (0.17976931348623157E309, ~inf) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~inf) = 0.17976931348623157E309 +* (0.17976931348623157E309, nan) = nan ++ (0.17976931348623157E309, nan) = nan +- (0.17976931348623157E309, nan) = nan +/ (0.17976931348623157E309, nan) = nan +nextAfter (0.17976931348623157E309, nan) = nan +rem (0.17976931348623157E309, nan) = nan +* (0.17976931348623157E309, inf) = inf ++ (0.17976931348623157E309, inf) = inf +- (0.17976931348623157E309, inf) = ~inf +/ (0.17976931348623157E309, inf) = 0.0 +nextAfter (0.17976931348623157E309, inf) = inf +rem (0.17976931348623157E309, inf) = 0.17976931348623157E309 +* (0.8988465674311579E308, 0.17976931348623157E309) = inf ++ (0.8988465674311579E308, 0.17976931348623157E309) = inf +- (0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311579E308 +/ (0.8988465674311579E308, 0.17976931348623157E309) = 0.5 +nextAfter (0.8988465674311579E308, 0.17976931348623157E309) = 0.898846567431158E308 +rem (0.8988465674311579E308, 0.17976931348623157E309) = 0.8988465674311579E308 +* (0.8988465674311579E308, 0.8988465674311579E308) = inf ++ (0.8988465674311579E308, 0.8988465674311579E308) = 0.17976931348623157E309 +- (0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +/ (0.8988465674311579E308, 0.8988465674311579E308) = 0.1E1 +nextAfter (0.8988465674311579E308, 0.8988465674311579E308) = 0.8988465674311579E308 +rem (0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +* (0.8988465674311579E308, 0.123E4) = inf ++ (0.8988465674311579E308, 0.123E4) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E4) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E4) = 0.7307695670172015E305 +nextAfter (0.8988465674311579E308, 0.123E4) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E4) = 0.0 +* (0.8988465674311579E308, 0.123E2) = inf ++ (0.8988465674311579E308, 0.123E2) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E2) = 0.7307695670172014E307 +nextAfter (0.8988465674311579E308, 0.123E2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E2) = 0.0 +* (0.8988465674311579E308, 0.3141592653589793E1) = inf ++ (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.3141592653589793E1) = 0.2861117485757028E308 +nextAfter (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.3141592653589793E1) = 0.0 +* (0.8988465674311579E308, 0.2718281828459045E1) = inf ++ (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.2718281828459045E1) = 0.3306671729254435E308 +nextAfter (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.2718281828459045E1) = 0.99792015476736E292 +* (0.8988465674311579E308, 0.123E1) = 0.1105581277940324E309 ++ (0.8988465674311579E308, 0.123E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E1) = 0.7307695670172015E308 +nextAfter (0.8988465674311579E308, 0.123E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E1) = 0.99792015476736E292 +* (0.8988465674311579E308, 0.123) = 0.11055812779403241E308 ++ (0.8988465674311579E308, 0.123) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123) = inf +nextAfter (0.8988465674311579E308, 0.123) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123) = ~inf +* (0.8988465674311579E308, 0.123E~2) = 0.1105581277940324E306 ++ (0.8988465674311579E308, 0.123E~2) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E~2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E~2) = inf +nextAfter (0.8988465674311579E308, 0.123E~2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E~2) = ~inf +* (0.8988465674311579E308, 0.22250738585072014E~307) = 0.19999999999999998E1 ++ (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.22250738585072014E~307) = inf +nextAfter (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.22250738585072014E~307) = ~inf +* (0.8988465674311579E308, 0.11125369292536007E~307) = 0.9999999999999999 ++ (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.11125369292536007E~307) = inf +nextAfter (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.11125369292536007E~307) = ~inf +* (0.8988465674311579E308, 0.5E~323) = 0.44408920985006257E~15 ++ (0.8988465674311579E308, 0.5E~323) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.5E~323) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.5E~323) = inf +nextAfter (0.8988465674311579E308, 0.5E~323) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.5E~323) = ~inf +* (0.8988465674311579E308, 0.0) = 0.0 ++ (0.8988465674311579E308, 0.0) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.0) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.0) = inf +nextAfter (0.8988465674311579E308, 0.0) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.0) = nan +* (0.8988465674311579E308, ~0.17976931348623157E309) = ~inf ++ (0.8988465674311579E308, ~0.17976931348623157E309) = ~0.8988465674311579E308 +- (0.8988465674311579E308, ~0.17976931348623157E309) = inf +/ (0.8988465674311579E308, ~0.17976931348623157E309) = ~0.5 +nextAfter (0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311579E308 +* (0.8988465674311579E308, ~0.8988465674311579E308) = ~inf ++ (0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +- (0.8988465674311579E308, ~0.8988465674311579E308) = 0.17976931348623157E309 +/ (0.8988465674311579E308, ~0.8988465674311579E308) = ~0.1E1 +nextAfter (0.8988465674311579E308, ~0.8988465674311579E308) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +* (0.8988465674311579E308, ~0.123E4) = ~inf ++ (0.8988465674311579E308, ~0.123E4) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E4) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E4) = ~0.7307695670172015E305 +nextAfter (0.8988465674311579E308, ~0.123E4) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E4) = 0.0 +* (0.8988465674311579E308, ~0.123E2) = ~inf ++ (0.8988465674311579E308, ~0.123E2) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E2) = ~0.7307695670172014E307 +nextAfter (0.8988465674311579E308, ~0.123E2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E2) = 0.0 +* (0.8988465674311579E308, ~0.3141592653589793E1) = ~inf ++ (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.3141592653589793E1) = ~0.2861117485757028E308 +nextAfter (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.3141592653589793E1) = 0.0 +* (0.8988465674311579E308, ~0.2718281828459045E1) = ~inf ++ (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.2718281828459045E1) = ~0.3306671729254435E308 +nextAfter (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.2718281828459045E1) = 0.99792015476736E292 +* (0.8988465674311579E308, ~0.123E1) = ~0.1105581277940324E309 ++ (0.8988465674311579E308, ~0.123E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E1) = ~0.7307695670172015E308 +nextAfter (0.8988465674311579E308, ~0.123E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E1) = 0.99792015476736E292 +* (0.8988465674311579E308, ~0.123) = ~0.11055812779403241E308 ++ (0.8988465674311579E308, ~0.123) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123) = ~inf +nextAfter (0.8988465674311579E308, ~0.123) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123) = ~inf +* (0.8988465674311579E308, ~0.123E~2) = ~0.1105581277940324E306 ++ (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E~2) = ~inf +nextAfter (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E~2) = ~inf +* (0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.19999999999999998E1 ++ (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.22250738585072014E~307) = ~inf +nextAfter (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.22250738585072014E~307) = ~inf +* (0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.9999999999999999 ++ (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.11125369292536007E~307) = ~inf +nextAfter (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.11125369292536007E~307) = ~inf +* (0.8988465674311579E308, ~0.5E~323) = ~0.44408920985006257E~15 ++ (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.5E~323) = ~inf +nextAfter (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.5E~323) = ~inf +* (0.8988465674311579E308, ~0.0) = ~0.0 ++ (0.8988465674311579E308, ~0.0) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.0) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.0) = ~inf +nextAfter (0.8988465674311579E308, ~0.0) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.0) = nan +* (0.8988465674311579E308, inf) = inf ++ (0.8988465674311579E308, inf) = inf +- (0.8988465674311579E308, inf) = ~inf +/ (0.8988465674311579E308, inf) = 0.0 +nextAfter (0.8988465674311579E308, inf) = 0.898846567431158E308 +rem (0.8988465674311579E308, inf) = 0.8988465674311579E308 +* (0.8988465674311579E308, ~inf) = ~inf ++ (0.8988465674311579E308, ~inf) = ~inf +- (0.8988465674311579E308, ~inf) = inf +/ (0.8988465674311579E308, ~inf) = ~0.0 +nextAfter (0.8988465674311579E308, ~inf) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~inf) = 0.8988465674311579E308 +* (0.8988465674311579E308, nan) = nan ++ (0.8988465674311579E308, nan) = nan +- (0.8988465674311579E308, nan) = nan +/ (0.8988465674311579E308, nan) = nan +nextAfter (0.8988465674311579E308, nan) = nan +rem (0.8988465674311579E308, nan) = nan +* (0.8988465674311579E308, inf) = inf ++ (0.8988465674311579E308, inf) = inf +- (0.8988465674311579E308, inf) = ~inf +/ (0.8988465674311579E308, inf) = 0.0 +nextAfter (0.8988465674311579E308, inf) = 0.898846567431158E308 +rem (0.8988465674311579E308, inf) = 0.8988465674311579E308 +* (0.123E4, 0.17976931348623157E309) = inf ++ (0.123E4, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E4, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E4, 0.17976931348623157E309) = 0.6842102114909646E~305 +nextAfter (0.123E4, 0.17976931348623157E309) = 0.12300000000000002E4 +rem (0.123E4, 0.17976931348623157E309) = 0.123E4 +* (0.123E4, 0.8988465674311579E308) = inf ++ (0.123E4, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E4, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E4, 0.8988465674311579E308) = 0.1368420422981929E~304 +nextAfter (0.123E4, 0.8988465674311579E308) = 0.12300000000000002E4 +rem (0.123E4, 0.8988465674311579E308) = 0.123E4 +* (0.123E4, 0.123E4) = 0.15129E7 ++ (0.123E4, 0.123E4) = 0.246E4 +- (0.123E4, 0.123E4) = 0.0 +/ (0.123E4, 0.123E4) = 0.1E1 +nextAfter (0.123E4, 0.123E4) = 0.123E4 +rem (0.123E4, 0.123E4) = 0.0 +* (0.123E4, 0.123E2) = 0.15129E5 ++ (0.123E4, 0.123E2) = 0.12423E4 +- (0.123E4, 0.123E2) = 0.12177E4 +/ (0.123E4, 0.123E2) = 0.1E3 +nextAfter (0.123E4, 0.123E2) = 0.12299999999999998E4 +rem (0.123E4, 0.123E2) = 0.0 +* (0.123E4, 0.3141592653589793E1) = 0.38641589639154454E4 ++ (0.123E4, 0.3141592653589793E1) = 0.123314159265359E4 +- (0.123E4, 0.3141592653589793E1) = 0.122685840734641E4 +/ (0.123E4, 0.3141592653589793E1) = 0.39152116000606253E3 +nextAfter (0.123E4, 0.3141592653589793E1) = 0.12299999999999998E4 +rem (0.123E4, 0.3141592653589793E1) = 0.16372724463908526E1 +* (0.123E4, 0.2718281828459045E1) = 0.33434866490046256E4 ++ (0.123E4, 0.2718281828459045E1) = 0.1232718281828459E4 +- (0.123E4, 0.2718281828459045E1) = 0.1227281718171541E4 +/ (0.123E4, 0.2718281828459045E1) = 0.4524917126408741E3 +nextAfter (0.123E4, 0.2718281828459045E1) = 0.12299999999999998E4 +rem (0.123E4, 0.2718281828459045E1) = 0.13366135365115497E1 +* (0.123E4, 0.123E1) = 0.15129E4 ++ (0.123E4, 0.123E1) = 0.123123E4 +- (0.123E4, 0.123E1) = 0.122877E4 +/ (0.123E4, 0.123E1) = 0.1E4 +nextAfter (0.123E4, 0.123E1) = 0.12299999999999998E4 +rem (0.123E4, 0.123E1) = 0.0 +* (0.123E4, 0.123) = 0.15129E3 ++ (0.123E4, 0.123) = 0.1230123E4 +- (0.123E4, 0.123) = 0.1229877E4 +/ (0.123E4, 0.123) = 0.1E5 +nextAfter (0.123E4, 0.123) = 0.12299999999999998E4 +rem (0.123E4, 0.123) = 0.0 +* (0.123E4, 0.123E~2) = 0.15129E1 ++ (0.123E4, 0.123E~2) = 0.123000123E4 +- (0.123E4, 0.123E~2) = 0.122999877E4 +/ (0.123E4, 0.123E~2) = 0.1E7 +nextAfter (0.123E4, 0.123E~2) = 0.12299999999999998E4 +rem (0.123E4, 0.123E~2) = 0.0 +* (0.123E4, 0.22250738585072014E~307) = 0.27368408459638577E~304 ++ (0.123E4, 0.22250738585072014E~307) = 0.123E4 +- (0.123E4, 0.22250738585072014E~307) = 0.123E4 +/ (0.123E4, 0.22250738585072014E~307) = inf +nextAfter (0.123E4, 0.22250738585072014E~307) = 0.12299999999999998E4 +rem (0.123E4, 0.22250738585072014E~307) = ~inf +* (0.123E4, 0.11125369292536007E~307) = 0.13684204229819289E~304 ++ (0.123E4, 0.11125369292536007E~307) = 0.123E4 +- (0.123E4, 0.11125369292536007E~307) = 0.123E4 +/ (0.123E4, 0.11125369292536007E~307) = inf +nextAfter (0.123E4, 0.11125369292536007E~307) = 0.12299999999999998E4 +rem (0.123E4, 0.11125369292536007E~307) = ~inf +* (0.123E4, 0.5E~323) = 0.6077E~320 ++ (0.123E4, 0.5E~323) = 0.123E4 +- (0.123E4, 0.5E~323) = 0.123E4 +/ (0.123E4, 0.5E~323) = inf +nextAfter (0.123E4, 0.5E~323) = 0.12299999999999998E4 +rem (0.123E4, 0.5E~323) = ~inf +* (0.123E4, 0.0) = 0.0 ++ (0.123E4, 0.0) = 0.123E4 +- (0.123E4, 0.0) = 0.123E4 +/ (0.123E4, 0.0) = inf +nextAfter (0.123E4, 0.0) = 0.12299999999999998E4 +rem (0.123E4, 0.0) = nan +* (0.123E4, ~0.17976931348623157E309) = ~inf ++ (0.123E4, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E4, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E4, ~0.17976931348623157E309) = ~0.6842102114909646E~305 +nextAfter (0.123E4, ~0.17976931348623157E309) = 0.12299999999999998E4 +rem (0.123E4, ~0.17976931348623157E309) = 0.123E4 +* (0.123E4, ~0.8988465674311579E308) = ~inf ++ (0.123E4, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E4, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E4, ~0.8988465674311579E308) = ~0.1368420422981929E~304 +nextAfter (0.123E4, ~0.8988465674311579E308) = 0.12299999999999998E4 +rem (0.123E4, ~0.8988465674311579E308) = 0.123E4 +* (0.123E4, ~0.123E4) = ~0.15129E7 ++ (0.123E4, ~0.123E4) = 0.0 +- (0.123E4, ~0.123E4) = 0.246E4 +/ (0.123E4, ~0.123E4) = ~0.1E1 +nextAfter (0.123E4, ~0.123E4) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E4) = 0.0 +* (0.123E4, ~0.123E2) = ~0.15129E5 ++ (0.123E4, ~0.123E2) = 0.12177E4 +- (0.123E4, ~0.123E2) = 0.12423E4 +/ (0.123E4, ~0.123E2) = ~0.1E3 +nextAfter (0.123E4, ~0.123E2) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E2) = 0.0 +* (0.123E4, ~0.3141592653589793E1) = ~0.38641589639154454E4 ++ (0.123E4, ~0.3141592653589793E1) = 0.122685840734641E4 +- (0.123E4, ~0.3141592653589793E1) = 0.123314159265359E4 +/ (0.123E4, ~0.3141592653589793E1) = ~0.39152116000606253E3 +nextAfter (0.123E4, ~0.3141592653589793E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.3141592653589793E1) = 0.16372724463908526E1 +* (0.123E4, ~0.2718281828459045E1) = ~0.33434866490046256E4 ++ (0.123E4, ~0.2718281828459045E1) = 0.1227281718171541E4 +- (0.123E4, ~0.2718281828459045E1) = 0.1232718281828459E4 +/ (0.123E4, ~0.2718281828459045E1) = ~0.4524917126408741E3 +nextAfter (0.123E4, ~0.2718281828459045E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.2718281828459045E1) = 0.13366135365115497E1 +* (0.123E4, ~0.123E1) = ~0.15129E4 ++ (0.123E4, ~0.123E1) = 0.122877E4 +- (0.123E4, ~0.123E1) = 0.123123E4 +/ (0.123E4, ~0.123E1) = ~0.1E4 +nextAfter (0.123E4, ~0.123E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E1) = 0.0 +* (0.123E4, ~0.123) = ~0.15129E3 ++ (0.123E4, ~0.123) = 0.1229877E4 +- (0.123E4, ~0.123) = 0.1230123E4 +/ (0.123E4, ~0.123) = ~0.1E5 +nextAfter (0.123E4, ~0.123) = 0.12299999999999998E4 +rem (0.123E4, ~0.123) = 0.0 +* (0.123E4, ~0.123E~2) = ~0.15129E1 ++ (0.123E4, ~0.123E~2) = 0.122999877E4 +- (0.123E4, ~0.123E~2) = 0.123000123E4 +/ (0.123E4, ~0.123E~2) = ~0.1E7 +nextAfter (0.123E4, ~0.123E~2) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E~2) = 0.0 +* (0.123E4, ~0.22250738585072014E~307) = ~0.27368408459638577E~304 ++ (0.123E4, ~0.22250738585072014E~307) = 0.123E4 +- (0.123E4, ~0.22250738585072014E~307) = 0.123E4 +/ (0.123E4, ~0.22250738585072014E~307) = ~inf +nextAfter (0.123E4, ~0.22250738585072014E~307) = 0.12299999999999998E4 +rem (0.123E4, ~0.22250738585072014E~307) = ~inf +* (0.123E4, ~0.11125369292536007E~307) = ~0.13684204229819289E~304 ++ (0.123E4, ~0.11125369292536007E~307) = 0.123E4 +- (0.123E4, ~0.11125369292536007E~307) = 0.123E4 +/ (0.123E4, ~0.11125369292536007E~307) = ~inf +nextAfter (0.123E4, ~0.11125369292536007E~307) = 0.12299999999999998E4 +rem (0.123E4, ~0.11125369292536007E~307) = ~inf +* (0.123E4, ~0.5E~323) = ~0.6077E~320 ++ (0.123E4, ~0.5E~323) = 0.123E4 +- (0.123E4, ~0.5E~323) = 0.123E4 +/ (0.123E4, ~0.5E~323) = ~inf +nextAfter (0.123E4, ~0.5E~323) = 0.12299999999999998E4 +rem (0.123E4, ~0.5E~323) = ~inf +* (0.123E4, ~0.0) = ~0.0 ++ (0.123E4, ~0.0) = 0.123E4 +- (0.123E4, ~0.0) = 0.123E4 +/ (0.123E4, ~0.0) = ~inf +nextAfter (0.123E4, ~0.0) = 0.12299999999999998E4 +rem (0.123E4, ~0.0) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300000000000002E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E4, ~inf) = ~inf ++ (0.123E4, ~inf) = ~inf +- (0.123E4, ~inf) = inf +/ (0.123E4, ~inf) = ~0.0 +nextAfter (0.123E4, ~inf) = 0.12299999999999998E4 +rem (0.123E4, ~inf) = 0.123E4 +* (0.123E4, nan) = nan ++ (0.123E4, nan) = nan +- (0.123E4, nan) = nan +/ (0.123E4, nan) = nan +nextAfter (0.123E4, nan) = nan +rem (0.123E4, nan) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300000000000002E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E2, 0.17976931348623157E309) = inf ++ (0.123E2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E2, 0.17976931348623157E309) = 0.6842102114909646E~307 +nextAfter (0.123E2, 0.17976931348623157E309) = 0.12300000000000002E2 +rem (0.123E2, 0.17976931348623157E309) = 0.123E2 +* (0.123E2, 0.8988465674311579E308) = inf ++ (0.123E2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E2, 0.8988465674311579E308) = 0.13684204229819291E~306 +nextAfter (0.123E2, 0.8988465674311579E308) = 0.12300000000000002E2 +rem (0.123E2, 0.8988465674311579E308) = 0.123E2 +* (0.123E2, 0.123E4) = 0.15129E5 ++ (0.123E2, 0.123E4) = 0.12423E4 +- (0.123E2, 0.123E4) = ~0.12177E4 +/ (0.123E2, 0.123E4) = 0.1E~1 +nextAfter (0.123E2, 0.123E4) = 0.12300000000000002E2 +rem (0.123E2, 0.123E4) = 0.123E2 +* (0.123E2, 0.123E2) = 0.15129000000000002E3 ++ (0.123E2, 0.123E2) = 0.246E2 +- (0.123E2, 0.123E2) = 0.0 +/ (0.123E2, 0.123E2) = 0.1E1 +nextAfter (0.123E2, 0.123E2) = 0.123E2 +rem (0.123E2, 0.123E2) = 0.0 +* (0.123E2, 0.3141592653589793E1) = 0.3864158963915446E2 ++ (0.123E2, 0.3141592653589793E1) = 0.15441592653589794E2 +- (0.123E2, 0.3141592653589793E1) = 0.9158407346410208E1 +/ (0.123E2, 0.3141592653589793E1) = 0.3915211600060626E1 +nextAfter (0.123E2, 0.3141592653589793E1) = 0.12299999999999999E2 +rem (0.123E2, 0.3141592653589793E1) = 0.28752220392306214E1 +* (0.123E2, 0.2718281828459045E1) = 0.33434866490046254E2 ++ (0.123E2, 0.2718281828459045E1) = 0.15018281828459045E2 +- (0.123E2, 0.2718281828459045E1) = 0.9581718171540956E1 +/ (0.123E2, 0.2718281828459045E1) = 0.4524917126408741E1 +nextAfter (0.123E2, 0.2718281828459045E1) = 0.12299999999999999E2 +rem (0.123E2, 0.2718281828459045E1) = 0.14268726861638203E1 +* (0.123E2, 0.123E1) = 0.15129000000000001E2 ++ (0.123E2, 0.123E1) = 0.13530000000000001E2 +- (0.123E2, 0.123E1) = 0.1107E2 +/ (0.123E2, 0.123E1) = 0.1E2 +nextAfter (0.123E2, 0.123E1) = 0.12299999999999999E2 +rem (0.123E2, 0.123E1) = 0.0 +* (0.123E2, 0.123) = 0.15129000000000001E1 ++ (0.123E2, 0.123) = 0.12423E2 +- (0.123E2, 0.123) = 0.12177000000000001E2 +/ (0.123E2, 0.123) = 0.10000000000000001E3 +nextAfter (0.123E2, 0.123) = 0.12299999999999999E2 +rem (0.123E2, 0.123) = 0.0 +* (0.123E2, 0.123E~2) = 0.15129E~1 ++ (0.123E2, 0.123E~2) = 0.1230123E2 +- (0.123E2, 0.123E~2) = 0.12298770000000001E2 +/ (0.123E2, 0.123E~2) = 0.1E5 +nextAfter (0.123E2, 0.123E~2) = 0.12299999999999999E2 +rem (0.123E2, 0.123E~2) = 0.17763568394002505E~14 +* (0.123E2, 0.22250738585072014E~307) = 0.2736840845963858E~306 ++ (0.123E2, 0.22250738585072014E~307) = 0.123E2 +- (0.123E2, 0.22250738585072014E~307) = 0.123E2 +/ (0.123E2, 0.22250738585072014E~307) = inf +nextAfter (0.123E2, 0.22250738585072014E~307) = 0.12299999999999999E2 +rem (0.123E2, 0.22250738585072014E~307) = ~inf +* (0.123E2, 0.11125369292536007E~307) = 0.1368420422981929E~306 ++ (0.123E2, 0.11125369292536007E~307) = 0.123E2 +- (0.123E2, 0.11125369292536007E~307) = 0.123E2 +/ (0.123E2, 0.11125369292536007E~307) = inf +nextAfter (0.123E2, 0.11125369292536007E~307) = 0.12299999999999999E2 +rem (0.123E2, 0.11125369292536007E~307) = ~inf +* (0.123E2, 0.5E~323) = 0.6E~322 ++ (0.123E2, 0.5E~323) = 0.123E2 +- (0.123E2, 0.5E~323) = 0.123E2 +/ (0.123E2, 0.5E~323) = inf +nextAfter (0.123E2, 0.5E~323) = 0.12299999999999999E2 +rem (0.123E2, 0.5E~323) = ~inf +* (0.123E2, 0.0) = 0.0 ++ (0.123E2, 0.0) = 0.123E2 +- (0.123E2, 0.0) = 0.123E2 +/ (0.123E2, 0.0) = inf +nextAfter (0.123E2, 0.0) = 0.12299999999999999E2 +rem (0.123E2, 0.0) = nan +* (0.123E2, ~0.17976931348623157E309) = ~inf ++ (0.123E2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E2, ~0.17976931348623157E309) = ~0.6842102114909646E~307 +nextAfter (0.123E2, ~0.17976931348623157E309) = 0.12299999999999999E2 +rem (0.123E2, ~0.17976931348623157E309) = 0.123E2 +* (0.123E2, ~0.8988465674311579E308) = ~inf ++ (0.123E2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E2, ~0.8988465674311579E308) = ~0.13684204229819291E~306 +nextAfter (0.123E2, ~0.8988465674311579E308) = 0.12299999999999999E2 +rem (0.123E2, ~0.8988465674311579E308) = 0.123E2 +* (0.123E2, ~0.123E4) = ~0.15129E5 ++ (0.123E2, ~0.123E4) = ~0.12177E4 +- (0.123E2, ~0.123E4) = 0.12423E4 +/ (0.123E2, ~0.123E4) = ~0.1E~1 +nextAfter (0.123E2, ~0.123E4) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E4) = 0.123E2 +* (0.123E2, ~0.123E2) = ~0.15129000000000002E3 ++ (0.123E2, ~0.123E2) = 0.0 +- (0.123E2, ~0.123E2) = 0.246E2 +/ (0.123E2, ~0.123E2) = ~0.1E1 +nextAfter (0.123E2, ~0.123E2) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E2) = 0.0 +* (0.123E2, ~0.3141592653589793E1) = ~0.3864158963915446E2 ++ (0.123E2, ~0.3141592653589793E1) = 0.9158407346410208E1 +- (0.123E2, ~0.3141592653589793E1) = 0.15441592653589794E2 +/ (0.123E2, ~0.3141592653589793E1) = ~0.3915211600060626E1 +nextAfter (0.123E2, ~0.3141592653589793E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.3141592653589793E1) = 0.28752220392306214E1 +* (0.123E2, ~0.2718281828459045E1) = ~0.33434866490046254E2 ++ (0.123E2, ~0.2718281828459045E1) = 0.9581718171540956E1 +- (0.123E2, ~0.2718281828459045E1) = 0.15018281828459045E2 +/ (0.123E2, ~0.2718281828459045E1) = ~0.4524917126408741E1 +nextAfter (0.123E2, ~0.2718281828459045E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.2718281828459045E1) = 0.14268726861638203E1 +* (0.123E2, ~0.123E1) = ~0.15129000000000001E2 ++ (0.123E2, ~0.123E1) = 0.1107E2 +- (0.123E2, ~0.123E1) = 0.13530000000000001E2 +/ (0.123E2, ~0.123E1) = ~0.1E2 +nextAfter (0.123E2, ~0.123E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E1) = 0.0 +* (0.123E2, ~0.123) = ~0.15129000000000001E1 ++ (0.123E2, ~0.123) = 0.12177000000000001E2 +- (0.123E2, ~0.123) = 0.12423E2 +/ (0.123E2, ~0.123) = ~0.10000000000000001E3 +nextAfter (0.123E2, ~0.123) = 0.12299999999999999E2 +rem (0.123E2, ~0.123) = 0.0 +* (0.123E2, ~0.123E~2) = ~0.15129E~1 ++ (0.123E2, ~0.123E~2) = 0.12298770000000001E2 +- (0.123E2, ~0.123E~2) = 0.1230123E2 +/ (0.123E2, ~0.123E~2) = ~0.1E5 +nextAfter (0.123E2, ~0.123E~2) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E~2) = 0.17763568394002505E~14 +* (0.123E2, ~0.22250738585072014E~307) = ~0.2736840845963858E~306 ++ (0.123E2, ~0.22250738585072014E~307) = 0.123E2 +- (0.123E2, ~0.22250738585072014E~307) = 0.123E2 +/ (0.123E2, ~0.22250738585072014E~307) = ~inf +nextAfter (0.123E2, ~0.22250738585072014E~307) = 0.12299999999999999E2 +rem (0.123E2, ~0.22250738585072014E~307) = ~inf +* (0.123E2, ~0.11125369292536007E~307) = ~0.1368420422981929E~306 ++ (0.123E2, ~0.11125369292536007E~307) = 0.123E2 +- (0.123E2, ~0.11125369292536007E~307) = 0.123E2 +/ (0.123E2, ~0.11125369292536007E~307) = ~inf +nextAfter (0.123E2, ~0.11125369292536007E~307) = 0.12299999999999999E2 +rem (0.123E2, ~0.11125369292536007E~307) = ~inf +* (0.123E2, ~0.5E~323) = ~0.6E~322 ++ (0.123E2, ~0.5E~323) = 0.123E2 +- (0.123E2, ~0.5E~323) = 0.123E2 +/ (0.123E2, ~0.5E~323) = ~inf +nextAfter (0.123E2, ~0.5E~323) = 0.12299999999999999E2 +rem (0.123E2, ~0.5E~323) = ~inf +* (0.123E2, ~0.0) = ~0.0 ++ (0.123E2, ~0.0) = 0.123E2 +- (0.123E2, ~0.0) = 0.123E2 +/ (0.123E2, ~0.0) = ~inf +nextAfter (0.123E2, ~0.0) = 0.12299999999999999E2 +rem (0.123E2, ~0.0) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300000000000002E2 +rem (0.123E2, inf) = 0.123E2 +* (0.123E2, ~inf) = ~inf ++ (0.123E2, ~inf) = ~inf +- (0.123E2, ~inf) = inf +/ (0.123E2, ~inf) = ~0.0 +nextAfter (0.123E2, ~inf) = 0.12299999999999999E2 +rem (0.123E2, ~inf) = 0.123E2 +* (0.123E2, nan) = nan ++ (0.123E2, nan) = nan +- (0.123E2, nan) = nan +/ (0.123E2, nan) = nan +nextAfter (0.123E2, nan) = nan +rem (0.123E2, nan) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300000000000002E2 +rem (0.123E2, inf) = 0.123E2 +* (0.3141592653589793E1, 0.17976931348623157E309) = inf ++ (0.3141592653589793E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.3141592653589793E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.3141592653589793E1, 0.17976931348623157E309) = 0.17475689218952297E~307 +nextAfter (0.3141592653589793E1, 0.17976931348623157E309) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.17976931348623157E309) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.8988465674311579E308) = inf ++ (0.3141592653589793E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.3141592653589793E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.3141592653589793E1, 0.8988465674311579E308) = 0.349513784379046E~307 +nextAfter (0.3141592653589793E1, 0.8988465674311579E308) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.8988465674311579E308) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.123E4) = 0.38641589639154454E4 ++ (0.3141592653589793E1, 0.123E4) = 0.123314159265359E4 +- (0.3141592653589793E1, 0.123E4) = ~0.122685840734641E4 +/ (0.3141592653589793E1, 0.123E4) = 0.25541403687721893E~2 +nextAfter (0.3141592653589793E1, 0.123E4) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.123E4) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.123E2) = 0.3864158963915446E2 ++ (0.3141592653589793E1, 0.123E2) = 0.15441592653589794E2 +- (0.3141592653589793E1, 0.123E2) = ~0.9158407346410208E1 +/ (0.3141592653589793E1, 0.123E2) = 0.2554140368772189 +nextAfter (0.3141592653589793E1, 0.123E2) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.123E2) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.3141592653589793E1) = 0.9869604401089358E1 ++ (0.3141592653589793E1, 0.3141592653589793E1) = 0.6283185307179586E1 +- (0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +/ (0.3141592653589793E1, 0.3141592653589793E1) = 0.1E1 +nextAfter (0.3141592653589793E1, 0.3141592653589793E1) = 0.3141592653589793E1 +rem (0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +* (0.3141592653589793E1, 0.2718281828459045E1) = 0.8539734222673566E1 ++ (0.3141592653589793E1, 0.2718281828459045E1) = 0.5859874482048838E1 +- (0.3141592653589793E1, 0.2718281828459045E1) = 0.423310825130748 +/ (0.3141592653589793E1, 0.2718281828459045E1) = 0.11557273497909217E1 +nextAfter (0.3141592653589793E1, 0.2718281828459045E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.2718281828459045E1) = 0.423310825130748 +* (0.3141592653589793E1, 0.123E1) = 0.38641589639154454E1 ++ (0.3141592653589793E1, 0.123E1) = 0.43715926535897935E1 +- (0.3141592653589793E1, 0.123E1) = 0.19115926535897931E1 +/ (0.3141592653589793E1, 0.123E1) = 0.25541403687721895E1 +nextAfter (0.3141592653589793E1, 0.123E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123E1) = 0.6815926535897932 +* (0.3141592653589793E1, 0.123) = 0.38641589639154456 ++ (0.3141592653589793E1, 0.123) = 0.32645926535897933E1 +- (0.3141592653589793E1, 0.123) = 0.3018592653589793E1 +/ (0.3141592653589793E1, 0.123) = 0.25541403687721896E2 +nextAfter (0.3141592653589793E1, 0.123) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123) = 0.6659265358979294E~1 +* (0.3141592653589793E1, 0.123E~2) = 0.38641589639154456E~2 ++ (0.3141592653589793E1, 0.123E~2) = 0.3142822653589793E1 +- (0.3141592653589793E1, 0.123E~2) = 0.3140362653589793E1 +/ (0.3141592653589793E1, 0.123E~2) = 0.25541403687721895E4 +nextAfter (0.3141592653589793E1, 0.123E~2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123E~2) = 0.17265358979301482E~3 +* (0.3141592653589793E1, 0.22250738585072014E~307) = 0.6990275687580919E~307 ++ (0.3141592653589793E1, 0.22250738585072014E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.22250738585072014E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.22250738585072014E~307) = 0.14119048864730642E309 +nextAfter (0.3141592653589793E1, 0.22250738585072014E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.22250738585072014E~307) = 0.0 +* (0.3141592653589793E1, 0.11125369292536007E~307) = 0.34951378437904593E~307 ++ (0.3141592653589793E1, 0.11125369292536007E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.11125369292536007E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.11125369292536007E~307) = inf +nextAfter (0.3141592653589793E1, 0.11125369292536007E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.11125369292536007E~307) = ~inf +* (0.3141592653589793E1, 0.5E~323) = 0.15E~322 ++ (0.3141592653589793E1, 0.5E~323) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.5E~323) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.5E~323) = inf +nextAfter (0.3141592653589793E1, 0.5E~323) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.5E~323) = ~inf +* (0.3141592653589793E1, 0.0) = 0.0 ++ (0.3141592653589793E1, 0.0) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.0) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.0) = inf +nextAfter (0.3141592653589793E1, 0.0) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.0) = nan +* (0.3141592653589793E1, ~0.17976931348623157E309) = ~inf ++ (0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.3141592653589793E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17475689218952297E~307 +nextAfter (0.3141592653589793E1, ~0.17976931348623157E309) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.17976931348623157E309) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.8988465674311579E308) = ~inf ++ (0.3141592653589793E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.3141592653589793E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.3141592653589793E1, ~0.8988465674311579E308) = ~0.349513784379046E~307 +nextAfter (0.3141592653589793E1, ~0.8988465674311579E308) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.8988465674311579E308) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.123E4) = ~0.38641589639154454E4 ++ (0.3141592653589793E1, ~0.123E4) = ~0.122685840734641E4 +- (0.3141592653589793E1, ~0.123E4) = 0.123314159265359E4 +/ (0.3141592653589793E1, ~0.123E4) = ~0.25541403687721893E~2 +nextAfter (0.3141592653589793E1, ~0.123E4) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E4) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.123E2) = ~0.3864158963915446E2 ++ (0.3141592653589793E1, ~0.123E2) = ~0.9158407346410208E1 +- (0.3141592653589793E1, ~0.123E2) = 0.15441592653589794E2 +/ (0.3141592653589793E1, ~0.123E2) = ~0.2554140368772189 +nextAfter (0.3141592653589793E1, ~0.123E2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E2) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.3141592653589793E1) = ~0.9869604401089358E1 ++ (0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +- (0.3141592653589793E1, ~0.3141592653589793E1) = 0.6283185307179586E1 +/ (0.3141592653589793E1, ~0.3141592653589793E1) = ~0.1E1 +nextAfter (0.3141592653589793E1, ~0.3141592653589793E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +* (0.3141592653589793E1, ~0.2718281828459045E1) = ~0.8539734222673566E1 ++ (0.3141592653589793E1, ~0.2718281828459045E1) = 0.423310825130748 +- (0.3141592653589793E1, ~0.2718281828459045E1) = 0.5859874482048838E1 +/ (0.3141592653589793E1, ~0.2718281828459045E1) = ~0.11557273497909217E1 +nextAfter (0.3141592653589793E1, ~0.2718281828459045E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.2718281828459045E1) = 0.423310825130748 +* (0.3141592653589793E1, ~0.123E1) = ~0.38641589639154454E1 ++ (0.3141592653589793E1, ~0.123E1) = 0.19115926535897931E1 +- (0.3141592653589793E1, ~0.123E1) = 0.43715926535897935E1 +/ (0.3141592653589793E1, ~0.123E1) = ~0.25541403687721895E1 +nextAfter (0.3141592653589793E1, ~0.123E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E1) = 0.6815926535897932 +* (0.3141592653589793E1, ~0.123) = ~0.38641589639154456 ++ (0.3141592653589793E1, ~0.123) = 0.3018592653589793E1 +- (0.3141592653589793E1, ~0.123) = 0.32645926535897933E1 +/ (0.3141592653589793E1, ~0.123) = ~0.25541403687721896E2 +nextAfter (0.3141592653589793E1, ~0.123) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123) = 0.6659265358979294E~1 +* (0.3141592653589793E1, ~0.123E~2) = ~0.38641589639154456E~2 ++ (0.3141592653589793E1, ~0.123E~2) = 0.3140362653589793E1 +- (0.3141592653589793E1, ~0.123E~2) = 0.3142822653589793E1 +/ (0.3141592653589793E1, ~0.123E~2) = ~0.25541403687721895E4 +nextAfter (0.3141592653589793E1, ~0.123E~2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E~2) = 0.17265358979301482E~3 +* (0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.6990275687580919E~307 ++ (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.14119048864730642E309 +nextAfter (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.0 +* (0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.34951378437904593E~307 ++ (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.11125369292536007E~307) = ~inf +nextAfter (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.11125369292536007E~307) = ~inf +* (0.3141592653589793E1, ~0.5E~323) = ~0.15E~322 ++ (0.3141592653589793E1, ~0.5E~323) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.5E~323) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.5E~323) = ~inf +nextAfter (0.3141592653589793E1, ~0.5E~323) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.5E~323) = ~inf +* (0.3141592653589793E1, ~0.0) = ~0.0 ++ (0.3141592653589793E1, ~0.0) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.0) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.0) = ~inf +nextAfter (0.3141592653589793E1, ~0.0) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.0) = nan +* (0.3141592653589793E1, inf) = inf ++ (0.3141592653589793E1, inf) = inf +- (0.3141592653589793E1, inf) = ~inf +/ (0.3141592653589793E1, inf) = 0.0 +nextAfter (0.3141592653589793E1, inf) = 0.31415926535897936E1 +rem (0.3141592653589793E1, inf) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~inf) = ~inf ++ (0.3141592653589793E1, ~inf) = ~inf +- (0.3141592653589793E1, ~inf) = inf +/ (0.3141592653589793E1, ~inf) = ~0.0 +nextAfter (0.3141592653589793E1, ~inf) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~inf) = 0.3141592653589793E1 +* (0.3141592653589793E1, nan) = nan ++ (0.3141592653589793E1, nan) = nan +- (0.3141592653589793E1, nan) = nan +/ (0.3141592653589793E1, nan) = nan +nextAfter (0.3141592653589793E1, nan) = nan +rem (0.3141592653589793E1, nan) = nan +* (0.3141592653589793E1, inf) = inf ++ (0.3141592653589793E1, inf) = inf +- (0.3141592653589793E1, inf) = ~inf +/ (0.3141592653589793E1, inf) = 0.0 +nextAfter (0.3141592653589793E1, inf) = 0.31415926535897936E1 +rem (0.3141592653589793E1, inf) = 0.3141592653589793E1 +* (0.2718281828459045E1, 0.17976931348623157E309) = inf ++ (0.2718281828459045E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.2718281828459045E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.2718281828459045E1, 0.17976931348623157E309) = 0.15120944591398447E~307 +nextAfter (0.2718281828459045E1, 0.17976931348623157E309) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.17976931348623157E309) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.8988465674311579E308) = inf ++ (0.2718281828459045E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.2718281828459045E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.2718281828459045E1, 0.8988465674311579E308) = 0.30241889182796895E~307 +nextAfter (0.2718281828459045E1, 0.8988465674311579E308) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.8988465674311579E308) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.123E4) = 0.33434866490046256E4 ++ (0.2718281828459045E1, 0.123E4) = 0.1232718281828459E4 +- (0.2718281828459045E1, 0.123E4) = ~0.1227281718171541E4 +/ (0.2718281828459045E1, 0.123E4) = 0.22099852263894678E~2 +nextAfter (0.2718281828459045E1, 0.123E4) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.123E4) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.123E2) = 0.33434866490046254E2 ++ (0.2718281828459045E1, 0.123E2) = 0.15018281828459045E2 +- (0.2718281828459045E1, 0.123E2) = ~0.9581718171540956E1 +/ (0.2718281828459045E1, 0.123E2) = 0.22099852263894673 +nextAfter (0.2718281828459045E1, 0.123E2) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.123E2) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.3141592653589793E1) = 0.8539734222673566E1 ++ (0.2718281828459045E1, 0.3141592653589793E1) = 0.5859874482048838E1 +- (0.2718281828459045E1, 0.3141592653589793E1) = ~0.423310825130748 +/ (0.2718281828459045E1, 0.3141592653589793E1) = 0.8652559794322651 +nextAfter (0.2718281828459045E1, 0.3141592653589793E1) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.3141592653589793E1) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.2718281828459045E1) = 0.73890560989306495E1 ++ (0.2718281828459045E1, 0.2718281828459045E1) = 0.543656365691809E1 +- (0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +/ (0.2718281828459045E1, 0.2718281828459045E1) = 0.1E1 +nextAfter (0.2718281828459045E1, 0.2718281828459045E1) = 0.2718281828459045E1 +rem (0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +* (0.2718281828459045E1, 0.123E1) = 0.33434866490046256E1 ++ (0.2718281828459045E1, 0.123E1) = 0.3948281828459045E1 +- (0.2718281828459045E1, 0.123E1) = 0.1488281828459045E1 +/ (0.2718281828459045E1, 0.123E1) = 0.22099852263894677E1 +nextAfter (0.2718281828459045E1, 0.123E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123E1) = 0.2582818284590451 +* (0.2718281828459045E1, 0.123) = 0.33434866490046256 ++ (0.2718281828459045E1, 0.123) = 0.2841281828459045E1 +- (0.2718281828459045E1, 0.123) = 0.25952818284590453E1 +/ (0.2718281828459045E1, 0.123) = 0.22099852263894675E2 +nextAfter (0.2718281828459045E1, 0.123) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123) = 0.1228182845904513E~1 +* (0.2718281828459045E1, 0.123E~2) = 0.33434866490046253E~2 ++ (0.2718281828459045E1, 0.123E~2) = 0.2719511828459045E1 +- (0.2718281828459045E1, 0.123E~2) = 0.2717051828459045E1 +/ (0.2718281828459045E1, 0.123E~2) = 0.22099852263894677E4 +nextAfter (0.2718281828459045E1, 0.123E~2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123E~2) = 0.12118284590449946E~2 +* (0.2718281828459045E1, 0.22250738585072014E~307) = 0.6048377836559378E~307 ++ (0.2718281828459045E1, 0.22250738585072014E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.22250738585072014E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.22250738585072014E~307) = 0.12216591454104522E309 +nextAfter (0.2718281828459045E1, 0.22250738585072014E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.22250738585072014E~307) = 0.0 +* (0.2718281828459045E1, 0.11125369292536007E~307) = 0.3024188918279689E~307 ++ (0.2718281828459045E1, 0.11125369292536007E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.11125369292536007E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.11125369292536007E~307) = inf +nextAfter (0.2718281828459045E1, 0.11125369292536007E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.11125369292536007E~307) = ~inf +* (0.2718281828459045E1, 0.5E~323) = 0.15E~322 ++ (0.2718281828459045E1, 0.5E~323) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.5E~323) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.5E~323) = inf +nextAfter (0.2718281828459045E1, 0.5E~323) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.5E~323) = ~inf +* (0.2718281828459045E1, 0.0) = 0.0 ++ (0.2718281828459045E1, 0.0) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.0) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.0) = inf +nextAfter (0.2718281828459045E1, 0.0) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.0) = nan +* (0.2718281828459045E1, ~0.17976931348623157E309) = ~inf ++ (0.2718281828459045E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.2718281828459045E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.2718281828459045E1, ~0.17976931348623157E309) = ~0.15120944591398447E~307 +nextAfter (0.2718281828459045E1, ~0.17976931348623157E309) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.17976931348623157E309) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.8988465674311579E308) = ~inf ++ (0.2718281828459045E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.2718281828459045E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.2718281828459045E1, ~0.8988465674311579E308) = ~0.30241889182796895E~307 +nextAfter (0.2718281828459045E1, ~0.8988465674311579E308) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.8988465674311579E308) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.123E4) = ~0.33434866490046256E4 ++ (0.2718281828459045E1, ~0.123E4) = ~0.1227281718171541E4 +- (0.2718281828459045E1, ~0.123E4) = 0.1232718281828459E4 +/ (0.2718281828459045E1, ~0.123E4) = ~0.22099852263894678E~2 +nextAfter (0.2718281828459045E1, ~0.123E4) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E4) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.123E2) = ~0.33434866490046254E2 ++ (0.2718281828459045E1, ~0.123E2) = ~0.9581718171540956E1 +- (0.2718281828459045E1, ~0.123E2) = 0.15018281828459045E2 +/ (0.2718281828459045E1, ~0.123E2) = ~0.22099852263894673 +nextAfter (0.2718281828459045E1, ~0.123E2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E2) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.8539734222673566E1 ++ (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.423310825130748 +- (0.2718281828459045E1, ~0.3141592653589793E1) = 0.5859874482048838E1 +/ (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.8652559794322651 +nextAfter (0.2718281828459045E1, ~0.3141592653589793E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.3141592653589793E1) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.2718281828459045E1) = ~0.73890560989306495E1 ++ (0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +- (0.2718281828459045E1, ~0.2718281828459045E1) = 0.543656365691809E1 +/ (0.2718281828459045E1, ~0.2718281828459045E1) = ~0.1E1 +nextAfter (0.2718281828459045E1, ~0.2718281828459045E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +* (0.2718281828459045E1, ~0.123E1) = ~0.33434866490046256E1 ++ (0.2718281828459045E1, ~0.123E1) = 0.1488281828459045E1 +- (0.2718281828459045E1, ~0.123E1) = 0.3948281828459045E1 +/ (0.2718281828459045E1, ~0.123E1) = ~0.22099852263894677E1 +nextAfter (0.2718281828459045E1, ~0.123E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E1) = 0.2582818284590451 +* (0.2718281828459045E1, ~0.123) = ~0.33434866490046256 ++ (0.2718281828459045E1, ~0.123) = 0.25952818284590453E1 +- (0.2718281828459045E1, ~0.123) = 0.2841281828459045E1 +/ (0.2718281828459045E1, ~0.123) = ~0.22099852263894675E2 +nextAfter (0.2718281828459045E1, ~0.123) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123) = 0.1228182845904513E~1 +* (0.2718281828459045E1, ~0.123E~2) = ~0.33434866490046253E~2 ++ (0.2718281828459045E1, ~0.123E~2) = 0.2717051828459045E1 +- (0.2718281828459045E1, ~0.123E~2) = 0.2719511828459045E1 +/ (0.2718281828459045E1, ~0.123E~2) = ~0.22099852263894677E4 +nextAfter (0.2718281828459045E1, ~0.123E~2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E~2) = 0.12118284590449946E~2 +* (0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.6048377836559378E~307 ++ (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.12216591454104522E309 +nextAfter (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.0 +* (0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.3024188918279689E~307 ++ (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.11125369292536007E~307) = ~inf +nextAfter (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.11125369292536007E~307) = ~inf +* (0.2718281828459045E1, ~0.5E~323) = ~0.15E~322 ++ (0.2718281828459045E1, ~0.5E~323) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.5E~323) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.5E~323) = ~inf +nextAfter (0.2718281828459045E1, ~0.5E~323) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.5E~323) = ~inf +* (0.2718281828459045E1, ~0.0) = ~0.0 ++ (0.2718281828459045E1, ~0.0) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.0) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.0) = ~inf +nextAfter (0.2718281828459045E1, ~0.0) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.0) = nan +* (0.2718281828459045E1, inf) = inf ++ (0.2718281828459045E1, inf) = inf +- (0.2718281828459045E1, inf) = ~inf +/ (0.2718281828459045E1, inf) = 0.0 +nextAfter (0.2718281828459045E1, inf) = 0.27182818284590455E1 +rem (0.2718281828459045E1, inf) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~inf) = ~inf ++ (0.2718281828459045E1, ~inf) = ~inf +- (0.2718281828459045E1, ~inf) = inf +/ (0.2718281828459045E1, ~inf) = ~0.0 +nextAfter (0.2718281828459045E1, ~inf) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~inf) = 0.2718281828459045E1 +* (0.2718281828459045E1, nan) = nan ++ (0.2718281828459045E1, nan) = nan +- (0.2718281828459045E1, nan) = nan +/ (0.2718281828459045E1, nan) = nan +nextAfter (0.2718281828459045E1, nan) = nan +rem (0.2718281828459045E1, nan) = nan +* (0.2718281828459045E1, inf) = inf ++ (0.2718281828459045E1, inf) = inf +- (0.2718281828459045E1, inf) = ~inf +/ (0.2718281828459045E1, inf) = 0.0 +nextAfter (0.2718281828459045E1, inf) = 0.27182818284590455E1 +rem (0.2718281828459045E1, inf) = 0.2718281828459045E1 +* (0.123E1, 0.17976931348623157E309) = inf ++ (0.123E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E1, 0.17976931348623157E309) = 0.6842102114909647E~308 +nextAfter (0.123E1, 0.17976931348623157E309) = 0.12300000000000002E1 +rem (0.123E1, 0.17976931348623157E309) = 0.123E1 +* (0.123E1, 0.8988465674311579E308) = 0.1105581277940324E309 ++ (0.123E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E1, 0.8988465674311579E308) = 0.1368420422981929E~307 +nextAfter (0.123E1, 0.8988465674311579E308) = 0.12300000000000002E1 +rem (0.123E1, 0.8988465674311579E308) = 0.123E1 +* (0.123E1, 0.123E4) = 0.15129E4 ++ (0.123E1, 0.123E4) = 0.123123E4 +- (0.123E1, 0.123E4) = ~0.122877E4 +/ (0.123E1, 0.123E4) = 0.1E~2 +nextAfter (0.123E1, 0.123E4) = 0.12300000000000002E1 +rem (0.123E1, 0.123E4) = 0.123E1 +* (0.123E1, 0.123E2) = 0.15129000000000001E2 ++ (0.123E1, 0.123E2) = 0.13530000000000001E2 +- (0.123E1, 0.123E2) = ~0.1107E2 +/ (0.123E1, 0.123E2) = 0.9999999999999999E~1 +nextAfter (0.123E1, 0.123E2) = 0.12300000000000002E1 +rem (0.123E1, 0.123E2) = 0.123E1 +* (0.123E1, 0.3141592653589793E1) = 0.38641589639154454E1 ++ (0.123E1, 0.3141592653589793E1) = 0.43715926535897935E1 +- (0.123E1, 0.3141592653589793E1) = ~0.19115926535897931E1 +/ (0.123E1, 0.3141592653589793E1) = 0.3915211600060625 +nextAfter (0.123E1, 0.3141592653589793E1) = 0.12300000000000002E1 +rem (0.123E1, 0.3141592653589793E1) = 0.123E1 +* (0.123E1, 0.2718281828459045E1) = 0.33434866490046256E1 ++ (0.123E1, 0.2718281828459045E1) = 0.3948281828459045E1 +- (0.123E1, 0.2718281828459045E1) = ~0.1488281828459045E1 +/ (0.123E1, 0.2718281828459045E1) = 0.45249171264087407 +nextAfter (0.123E1, 0.2718281828459045E1) = 0.12300000000000002E1 +rem (0.123E1, 0.2718281828459045E1) = 0.123E1 +* (0.123E1, 0.123E1) = 0.15129E1 ++ (0.123E1, 0.123E1) = 0.246E1 +- (0.123E1, 0.123E1) = 0.0 +/ (0.123E1, 0.123E1) = 0.1E1 +nextAfter (0.123E1, 0.123E1) = 0.123E1 +rem (0.123E1, 0.123E1) = 0.0 +* (0.123E1, 0.123) = 0.15129 ++ (0.123E1, 0.123) = 0.1353E1 +- (0.123E1, 0.123) = 0.1107E1 +/ (0.123E1, 0.123) = 0.1E2 +nextAfter (0.123E1, 0.123) = 0.12299999999999998E1 +rem (0.123E1, 0.123) = 0.0 +* (0.123E1, 0.123E~2) = 0.15129E~2 ++ (0.123E1, 0.123E~2) = 0.123123E1 +- (0.123E1, 0.123E~2) = 0.122877E1 +/ (0.123E1, 0.123E~2) = 0.1E4 +nextAfter (0.123E1, 0.123E~2) = 0.12299999999999998E1 +rem (0.123E1, 0.123E~2) = 0.0 +* (0.123E1, 0.22250738585072014E~307) = 0.27368408459638577E~307 ++ (0.123E1, 0.22250738585072014E~307) = 0.123E1 +- (0.123E1, 0.22250738585072014E~307) = 0.123E1 +/ (0.123E1, 0.22250738585072014E~307) = 0.5527906389701621E308 +nextAfter (0.123E1, 0.22250738585072014E~307) = 0.12299999999999998E1 +rem (0.123E1, 0.22250738585072014E~307) = 0.0 +* (0.123E1, 0.11125369292536007E~307) = 0.1368420422981929E~307 ++ (0.123E1, 0.11125369292536007E~307) = 0.123E1 +- (0.123E1, 0.11125369292536007E~307) = 0.123E1 +/ (0.123E1, 0.11125369292536007E~307) = 0.11055812779403243E309 +nextAfter (0.123E1, 0.11125369292536007E~307) = 0.12299999999999998E1 +rem (0.123E1, 0.11125369292536007E~307) = 0.0 +* (0.123E1, 0.5E~323) = 0.5E~323 ++ (0.123E1, 0.5E~323) = 0.123E1 +- (0.123E1, 0.5E~323) = 0.123E1 +/ (0.123E1, 0.5E~323) = inf +nextAfter (0.123E1, 0.5E~323) = 0.12299999999999998E1 +rem (0.123E1, 0.5E~323) = ~inf +* (0.123E1, 0.0) = 0.0 ++ (0.123E1, 0.0) = 0.123E1 +- (0.123E1, 0.0) = 0.123E1 +/ (0.123E1, 0.0) = inf +nextAfter (0.123E1, 0.0) = 0.12299999999999998E1 +rem (0.123E1, 0.0) = nan +* (0.123E1, ~0.17976931348623157E309) = ~inf ++ (0.123E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E1, ~0.17976931348623157E309) = ~0.6842102114909647E~308 +nextAfter (0.123E1, ~0.17976931348623157E309) = 0.12299999999999998E1 +rem (0.123E1, ~0.17976931348623157E309) = 0.123E1 +* (0.123E1, ~0.8988465674311579E308) = ~0.1105581277940324E309 ++ (0.123E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E1, ~0.8988465674311579E308) = ~0.1368420422981929E~307 +nextAfter (0.123E1, ~0.8988465674311579E308) = 0.12299999999999998E1 +rem (0.123E1, ~0.8988465674311579E308) = 0.123E1 +* (0.123E1, ~0.123E4) = ~0.15129E4 ++ (0.123E1, ~0.123E4) = ~0.122877E4 +- (0.123E1, ~0.123E4) = 0.123123E4 +/ (0.123E1, ~0.123E4) = ~0.1E~2 +nextAfter (0.123E1, ~0.123E4) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E4) = 0.123E1 +* (0.123E1, ~0.123E2) = ~0.15129000000000001E2 ++ (0.123E1, ~0.123E2) = ~0.1107E2 +- (0.123E1, ~0.123E2) = 0.13530000000000001E2 +/ (0.123E1, ~0.123E2) = ~0.9999999999999999E~1 +nextAfter (0.123E1, ~0.123E2) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E2) = 0.123E1 +* (0.123E1, ~0.3141592653589793E1) = ~0.38641589639154454E1 ++ (0.123E1, ~0.3141592653589793E1) = ~0.19115926535897931E1 +- (0.123E1, ~0.3141592653589793E1) = 0.43715926535897935E1 +/ (0.123E1, ~0.3141592653589793E1) = ~0.3915211600060625 +nextAfter (0.123E1, ~0.3141592653589793E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.3141592653589793E1) = 0.123E1 +* (0.123E1, ~0.2718281828459045E1) = ~0.33434866490046256E1 ++ (0.123E1, ~0.2718281828459045E1) = ~0.1488281828459045E1 +- (0.123E1, ~0.2718281828459045E1) = 0.3948281828459045E1 +/ (0.123E1, ~0.2718281828459045E1) = ~0.45249171264087407 +nextAfter (0.123E1, ~0.2718281828459045E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.2718281828459045E1) = 0.123E1 +* (0.123E1, ~0.123E1) = ~0.15129E1 ++ (0.123E1, ~0.123E1) = 0.0 +- (0.123E1, ~0.123E1) = 0.246E1 +/ (0.123E1, ~0.123E1) = ~0.1E1 +nextAfter (0.123E1, ~0.123E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E1) = 0.0 +* (0.123E1, ~0.123) = ~0.15129 ++ (0.123E1, ~0.123) = 0.1107E1 +- (0.123E1, ~0.123) = 0.1353E1 +/ (0.123E1, ~0.123) = ~0.1E2 +nextAfter (0.123E1, ~0.123) = 0.12299999999999998E1 +rem (0.123E1, ~0.123) = 0.0 +* (0.123E1, ~0.123E~2) = ~0.15129E~2 ++ (0.123E1, ~0.123E~2) = 0.122877E1 +- (0.123E1, ~0.123E~2) = 0.123123E1 +/ (0.123E1, ~0.123E~2) = ~0.1E4 +nextAfter (0.123E1, ~0.123E~2) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E~2) = 0.0 +* (0.123E1, ~0.22250738585072014E~307) = ~0.27368408459638577E~307 ++ (0.123E1, ~0.22250738585072014E~307) = 0.123E1 +- (0.123E1, ~0.22250738585072014E~307) = 0.123E1 +/ (0.123E1, ~0.22250738585072014E~307) = ~0.5527906389701621E308 +nextAfter (0.123E1, ~0.22250738585072014E~307) = 0.12299999999999998E1 +rem (0.123E1, ~0.22250738585072014E~307) = 0.0 +* (0.123E1, ~0.11125369292536007E~307) = ~0.1368420422981929E~307 ++ (0.123E1, ~0.11125369292536007E~307) = 0.123E1 +- (0.123E1, ~0.11125369292536007E~307) = 0.123E1 +/ (0.123E1, ~0.11125369292536007E~307) = ~0.11055812779403243E309 +nextAfter (0.123E1, ~0.11125369292536007E~307) = 0.12299999999999998E1 +rem (0.123E1, ~0.11125369292536007E~307) = 0.0 +* (0.123E1, ~0.5E~323) = ~0.5E~323 ++ (0.123E1, ~0.5E~323) = 0.123E1 +- (0.123E1, ~0.5E~323) = 0.123E1 +/ (0.123E1, ~0.5E~323) = ~inf +nextAfter (0.123E1, ~0.5E~323) = 0.12299999999999998E1 +rem (0.123E1, ~0.5E~323) = ~inf +* (0.123E1, ~0.0) = ~0.0 ++ (0.123E1, ~0.0) = 0.123E1 +- (0.123E1, ~0.0) = 0.123E1 +/ (0.123E1, ~0.0) = ~inf +nextAfter (0.123E1, ~0.0) = 0.12299999999999998E1 +rem (0.123E1, ~0.0) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300000000000002E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123E1, ~inf) = ~inf ++ (0.123E1, ~inf) = ~inf +- (0.123E1, ~inf) = inf +/ (0.123E1, ~inf) = ~0.0 +nextAfter (0.123E1, ~inf) = 0.12299999999999998E1 +rem (0.123E1, ~inf) = 0.123E1 +* (0.123E1, nan) = nan ++ (0.123E1, nan) = nan +- (0.123E1, nan) = nan +/ (0.123E1, nan) = nan +nextAfter (0.123E1, nan) = nan +rem (0.123E1, nan) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300000000000002E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123, 0.17976931348623157E309) = 0.22111625558806483E308 ++ (0.123, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123, 0.17976931348623157E309) = 0.684210211490966E~309 +nextAfter (0.123, 0.17976931348623157E309) = 0.12300000000000001 +rem (0.123, 0.17976931348623157E309) = 0.123 +* (0.123, 0.8988465674311579E308) = 0.11055812779403241E308 ++ (0.123, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123, 0.8988465674311579E308) = 0.136842042298193E~308 +nextAfter (0.123, 0.8988465674311579E308) = 0.12300000000000001 +rem (0.123, 0.8988465674311579E308) = 0.123 +* (0.123, 0.123E4) = 0.15129E3 ++ (0.123, 0.123E4) = 0.1230123E4 +- (0.123, 0.123E4) = ~0.1229877E4 +/ (0.123, 0.123E4) = 0.1E~3 +nextAfter (0.123, 0.123E4) = 0.12300000000000001 +rem (0.123, 0.123E4) = 0.123 +* (0.123, 0.123E2) = 0.15129000000000001E1 ++ (0.123, 0.123E2) = 0.12423E2 +- (0.123, 0.123E2) = ~0.12177000000000001E2 +/ (0.123, 0.123E2) = 0.9999999999999998E~2 +nextAfter (0.123, 0.123E2) = 0.12300000000000001 +rem (0.123, 0.123E2) = 0.123 +* (0.123, 0.3141592653589793E1) = 0.38641589639154456 ++ (0.123, 0.3141592653589793E1) = 0.32645926535897933E1 +- (0.123, 0.3141592653589793E1) = ~0.3018592653589793E1 +/ (0.123, 0.3141592653589793E1) = 0.3915211600060625E~1 +nextAfter (0.123, 0.3141592653589793E1) = 0.12300000000000001 +rem (0.123, 0.3141592653589793E1) = 0.123 +* (0.123, 0.2718281828459045E1) = 0.33434866490046256 ++ (0.123, 0.2718281828459045E1) = 0.2841281828459045E1 +- (0.123, 0.2718281828459045E1) = ~0.25952818284590453E1 +/ (0.123, 0.2718281828459045E1) = 0.4524917126408741E~1 +nextAfter (0.123, 0.2718281828459045E1) = 0.12300000000000001 +rem (0.123, 0.2718281828459045E1) = 0.123 +* (0.123, 0.123E1) = 0.15129 ++ (0.123, 0.123E1) = 0.1353E1 +- (0.123, 0.123E1) = ~0.1107E1 +/ (0.123, 0.123E1) = 0.1 +nextAfter (0.123, 0.123E1) = 0.12300000000000001 +rem (0.123, 0.123E1) = 0.123 +* (0.123, 0.123) = 0.15129E~1 ++ (0.123, 0.123) = 0.246 +- (0.123, 0.123) = 0.0 +/ (0.123, 0.123) = 0.1E1 +nextAfter (0.123, 0.123) = 0.123 +rem (0.123, 0.123) = 0.0 +* (0.123, 0.123E~2) = 0.15129E~3 ++ (0.123, 0.123E~2) = 0.12423 +- (0.123, 0.123E~2) = 0.12177 +/ (0.123, 0.123E~2) = 0.1E3 +nextAfter (0.123, 0.123E~2) = 0.12299999999999998 +rem (0.123, 0.123E~2) = 0.0 +* (0.123, 0.22250738585072014E~307) = 0.273684084596386E~308 ++ (0.123, 0.22250738585072014E~307) = 0.123 +- (0.123, 0.22250738585072014E~307) = 0.123 +/ (0.123, 0.22250738585072014E~307) = 0.55279063897016213E307 +nextAfter (0.123, 0.22250738585072014E~307) = 0.12299999999999998 +rem (0.123, 0.22250738585072014E~307) = 0.0 +* (0.123, 0.11125369292536007E~307) = 0.136842042298193E~308 ++ (0.123, 0.11125369292536007E~307) = 0.123 +- (0.123, 0.11125369292536007E~307) = 0.123 +/ (0.123, 0.11125369292536007E~307) = 0.11055812779403243E308 +nextAfter (0.123, 0.11125369292536007E~307) = 0.12299999999999998 +rem (0.123, 0.11125369292536007E~307) = 0.0 +* (0.123, 0.5E~323) = 0.0 ++ (0.123, 0.5E~323) = 0.123 +- (0.123, 0.5E~323) = 0.123 +/ (0.123, 0.5E~323) = inf +nextAfter (0.123, 0.5E~323) = 0.12299999999999998 +rem (0.123, 0.5E~323) = ~inf +* (0.123, 0.0) = 0.0 ++ (0.123, 0.0) = 0.123 +- (0.123, 0.0) = 0.123 +/ (0.123, 0.0) = inf +nextAfter (0.123, 0.0) = 0.12299999999999998 +rem (0.123, 0.0) = nan +* (0.123, ~0.17976931348623157E309) = ~0.22111625558806483E308 ++ (0.123, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123, ~0.17976931348623157E309) = ~0.684210211490966E~309 +nextAfter (0.123, ~0.17976931348623157E309) = 0.12299999999999998 +rem (0.123, ~0.17976931348623157E309) = 0.123 +* (0.123, ~0.8988465674311579E308) = ~0.11055812779403241E308 ++ (0.123, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123, ~0.8988465674311579E308) = ~0.136842042298193E~308 +nextAfter (0.123, ~0.8988465674311579E308) = 0.12299999999999998 +rem (0.123, ~0.8988465674311579E308) = 0.123 +* (0.123, ~0.123E4) = ~0.15129E3 ++ (0.123, ~0.123E4) = ~0.1229877E4 +- (0.123, ~0.123E4) = 0.1230123E4 +/ (0.123, ~0.123E4) = ~0.1E~3 +nextAfter (0.123, ~0.123E4) = 0.12299999999999998 +rem (0.123, ~0.123E4) = 0.123 +* (0.123, ~0.123E2) = ~0.15129000000000001E1 ++ (0.123, ~0.123E2) = ~0.12177000000000001E2 +- (0.123, ~0.123E2) = 0.12423E2 +/ (0.123, ~0.123E2) = ~0.9999999999999998E~2 +nextAfter (0.123, ~0.123E2) = 0.12299999999999998 +rem (0.123, ~0.123E2) = 0.123 +* (0.123, ~0.3141592653589793E1) = ~0.38641589639154456 ++ (0.123, ~0.3141592653589793E1) = ~0.3018592653589793E1 +- (0.123, ~0.3141592653589793E1) = 0.32645926535897933E1 +/ (0.123, ~0.3141592653589793E1) = ~0.3915211600060625E~1 +nextAfter (0.123, ~0.3141592653589793E1) = 0.12299999999999998 +rem (0.123, ~0.3141592653589793E1) = 0.123 +* (0.123, ~0.2718281828459045E1) = ~0.33434866490046256 ++ (0.123, ~0.2718281828459045E1) = ~0.25952818284590453E1 +- (0.123, ~0.2718281828459045E1) = 0.2841281828459045E1 +/ (0.123, ~0.2718281828459045E1) = ~0.4524917126408741E~1 +nextAfter (0.123, ~0.2718281828459045E1) = 0.12299999999999998 +rem (0.123, ~0.2718281828459045E1) = 0.123 +* (0.123, ~0.123E1) = ~0.15129 ++ (0.123, ~0.123E1) = ~0.1107E1 +- (0.123, ~0.123E1) = 0.1353E1 +/ (0.123, ~0.123E1) = ~0.1 +nextAfter (0.123, ~0.123E1) = 0.12299999999999998 +rem (0.123, ~0.123E1) = 0.123 +* (0.123, ~0.123) = ~0.15129E~1 ++ (0.123, ~0.123) = 0.0 +- (0.123, ~0.123) = 0.246 +/ (0.123, ~0.123) = ~0.1E1 +nextAfter (0.123, ~0.123) = 0.12299999999999998 +rem (0.123, ~0.123) = 0.0 +* (0.123, ~0.123E~2) = ~0.15129E~3 ++ (0.123, ~0.123E~2) = 0.12177 +- (0.123, ~0.123E~2) = 0.12423 +/ (0.123, ~0.123E~2) = ~0.1E3 +nextAfter (0.123, ~0.123E~2) = 0.12299999999999998 +rem (0.123, ~0.123E~2) = 0.0 +* (0.123, ~0.22250738585072014E~307) = ~0.273684084596386E~308 ++ (0.123, ~0.22250738585072014E~307) = 0.123 +- (0.123, ~0.22250738585072014E~307) = 0.123 +/ (0.123, ~0.22250738585072014E~307) = ~0.55279063897016213E307 +nextAfter (0.123, ~0.22250738585072014E~307) = 0.12299999999999998 +rem (0.123, ~0.22250738585072014E~307) = 0.0 +* (0.123, ~0.11125369292536007E~307) = ~0.136842042298193E~308 ++ (0.123, ~0.11125369292536007E~307) = 0.123 +- (0.123, ~0.11125369292536007E~307) = 0.123 +/ (0.123, ~0.11125369292536007E~307) = ~0.11055812779403243E308 +nextAfter (0.123, ~0.11125369292536007E~307) = 0.12299999999999998 +rem (0.123, ~0.11125369292536007E~307) = 0.0 +* (0.123, ~0.5E~323) = ~0.0 ++ (0.123, ~0.5E~323) = 0.123 +- (0.123, ~0.5E~323) = 0.123 +/ (0.123, ~0.5E~323) = ~inf +nextAfter (0.123, ~0.5E~323) = 0.12299999999999998 +rem (0.123, ~0.5E~323) = ~inf +* (0.123, ~0.0) = ~0.0 ++ (0.123, ~0.0) = 0.123 +- (0.123, ~0.0) = 0.123 +/ (0.123, ~0.0) = ~inf +nextAfter (0.123, ~0.0) = 0.12299999999999998 +rem (0.123, ~0.0) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300000000000001 +rem (0.123, inf) = 0.123 +* (0.123, ~inf) = ~inf ++ (0.123, ~inf) = ~inf +- (0.123, ~inf) = inf +/ (0.123, ~inf) = ~0.0 +nextAfter (0.123, ~inf) = 0.12299999999999998 +rem (0.123, ~inf) = 0.123 +* (0.123, nan) = nan ++ (0.123, nan) = nan +- (0.123, nan) = nan +/ (0.123, nan) = nan +nextAfter (0.123, nan) = nan +rem (0.123, nan) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300000000000001 +rem (0.123, inf) = 0.123 +* (0.123E~2, 0.17976931348623157E309) = 0.2211162555880648E306 ++ (0.123E~2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E~2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E~2, 0.17976931348623157E309) = 0.684210211491E~311 +nextAfter (0.123E~2, 0.17976931348623157E309) = 0.12300000000000002E~2 +rem (0.123E~2, 0.17976931348623157E309) = 0.123E~2 +* (0.123E~2, 0.8988465674311579E308) = 0.1105581277940324E306 ++ (0.123E~2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E~2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E~2, 0.8988465674311579E308) = 0.1368420422982E~310 +nextAfter (0.123E~2, 0.8988465674311579E308) = 0.12300000000000002E~2 +rem (0.123E~2, 0.8988465674311579E308) = 0.123E~2 +* (0.123E~2, 0.123E4) = 0.15129E1 ++ (0.123E~2, 0.123E4) = 0.123000123E4 +- (0.123E~2, 0.123E4) = ~0.122999877E4 +/ (0.123E~2, 0.123E4) = 0.1E~5 +nextAfter (0.123E~2, 0.123E4) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E4) = 0.123E~2 +* (0.123E~2, 0.123E2) = 0.15129E~1 ++ (0.123E~2, 0.123E2) = 0.1230123E2 +- (0.123E~2, 0.123E2) = ~0.12298770000000001E2 +/ (0.123E~2, 0.123E2) = 0.9999999999999999E~4 +nextAfter (0.123E~2, 0.123E2) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E2) = 0.123E~2 +* (0.123E~2, 0.3141592653589793E1) = 0.38641589639154456E~2 ++ (0.123E~2, 0.3141592653589793E1) = 0.3142822653589793E1 +- (0.123E~2, 0.3141592653589793E1) = ~0.3140362653589793E1 +/ (0.123E~2, 0.3141592653589793E1) = 0.3915211600060625E~3 +nextAfter (0.123E~2, 0.3141592653589793E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.3141592653589793E1) = 0.123E~2 +* (0.123E~2, 0.2718281828459045E1) = 0.33434866490046253E~2 ++ (0.123E~2, 0.2718281828459045E1) = 0.2719511828459045E1 +- (0.123E~2, 0.2718281828459045E1) = ~0.2717051828459045E1 +/ (0.123E~2, 0.2718281828459045E1) = 0.45249171264087406E~3 +nextAfter (0.123E~2, 0.2718281828459045E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.2718281828459045E1) = 0.123E~2 +* (0.123E~2, 0.123E1) = 0.15129E~2 ++ (0.123E~2, 0.123E1) = 0.123123E1 +- (0.123E~2, 0.123E1) = ~0.122877E1 +/ (0.123E~2, 0.123E1) = 0.1E~2 +nextAfter (0.123E~2, 0.123E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E1) = 0.123E~2 +* (0.123E~2, 0.123) = 0.15129E~3 ++ (0.123E~2, 0.123) = 0.12423 +- (0.123E~2, 0.123) = ~0.12177 +/ (0.123E~2, 0.123) = 0.1E~1 +nextAfter (0.123E~2, 0.123) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123) = 0.123E~2 +* (0.123E~2, 0.123E~2) = 0.15129E~5 ++ (0.123E~2, 0.123E~2) = 0.246E~2 +- (0.123E~2, 0.123E~2) = 0.0 +/ (0.123E~2, 0.123E~2) = 0.1E1 +nextAfter (0.123E~2, 0.123E~2) = 0.123E~2 +rem (0.123E~2, 0.123E~2) = 0.0 +* (0.123E~2, 0.22250738585072014E~307) = 0.2736840845964E~310 ++ (0.123E~2, 0.22250738585072014E~307) = 0.123E~2 +- (0.123E~2, 0.22250738585072014E~307) = 0.123E~2 +/ (0.123E~2, 0.22250738585072014E~307) = 0.5527906389701621E305 +nextAfter (0.123E~2, 0.22250738585072014E~307) = 0.12299999999999998E~2 +rem (0.123E~2, 0.22250738585072014E~307) = 0.0 +* (0.123E~2, 0.11125369292536007E~307) = 0.1368420422982E~310 ++ (0.123E~2, 0.11125369292536007E~307) = 0.123E~2 +- (0.123E~2, 0.11125369292536007E~307) = 0.123E~2 +/ (0.123E~2, 0.11125369292536007E~307) = 0.11055812779403243E306 +nextAfter (0.123E~2, 0.11125369292536007E~307) = 0.12299999999999998E~2 +rem (0.123E~2, 0.11125369292536007E~307) = 0.0 +* (0.123E~2, 0.5E~323) = 0.0 ++ (0.123E~2, 0.5E~323) = 0.123E~2 +- (0.123E~2, 0.5E~323) = 0.123E~2 +/ (0.123E~2, 0.5E~323) = inf +nextAfter (0.123E~2, 0.5E~323) = 0.12299999999999998E~2 +rem (0.123E~2, 0.5E~323) = ~inf +* (0.123E~2, 0.0) = 0.0 ++ (0.123E~2, 0.0) = 0.123E~2 +- (0.123E~2, 0.0) = 0.123E~2 +/ (0.123E~2, 0.0) = inf +nextAfter (0.123E~2, 0.0) = 0.12299999999999998E~2 +rem (0.123E~2, 0.0) = nan +* (0.123E~2, ~0.17976931348623157E309) = ~0.2211162555880648E306 ++ (0.123E~2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E~2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E~2, ~0.17976931348623157E309) = ~0.684210211491E~311 +nextAfter (0.123E~2, ~0.17976931348623157E309) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.17976931348623157E309) = 0.123E~2 +* (0.123E~2, ~0.8988465674311579E308) = ~0.1105581277940324E306 ++ (0.123E~2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E~2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E~2, ~0.8988465674311579E308) = ~0.1368420422982E~310 +nextAfter (0.123E~2, ~0.8988465674311579E308) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.8988465674311579E308) = 0.123E~2 +* (0.123E~2, ~0.123E4) = ~0.15129E1 ++ (0.123E~2, ~0.123E4) = ~0.122999877E4 +- (0.123E~2, ~0.123E4) = 0.123000123E4 +/ (0.123E~2, ~0.123E4) = ~0.1E~5 +nextAfter (0.123E~2, ~0.123E4) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E4) = 0.123E~2 +* (0.123E~2, ~0.123E2) = ~0.15129E~1 ++ (0.123E~2, ~0.123E2) = ~0.12298770000000001E2 +- (0.123E~2, ~0.123E2) = 0.1230123E2 +/ (0.123E~2, ~0.123E2) = ~0.9999999999999999E~4 +nextAfter (0.123E~2, ~0.123E2) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E2) = 0.123E~2 +* (0.123E~2, ~0.3141592653589793E1) = ~0.38641589639154456E~2 ++ (0.123E~2, ~0.3141592653589793E1) = ~0.3140362653589793E1 +- (0.123E~2, ~0.3141592653589793E1) = 0.3142822653589793E1 +/ (0.123E~2, ~0.3141592653589793E1) = ~0.3915211600060625E~3 +nextAfter (0.123E~2, ~0.3141592653589793E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.3141592653589793E1) = 0.123E~2 +* (0.123E~2, ~0.2718281828459045E1) = ~0.33434866490046253E~2 ++ (0.123E~2, ~0.2718281828459045E1) = ~0.2717051828459045E1 +- (0.123E~2, ~0.2718281828459045E1) = 0.2719511828459045E1 +/ (0.123E~2, ~0.2718281828459045E1) = ~0.45249171264087406E~3 +nextAfter (0.123E~2, ~0.2718281828459045E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.2718281828459045E1) = 0.123E~2 +* (0.123E~2, ~0.123E1) = ~0.15129E~2 ++ (0.123E~2, ~0.123E1) = ~0.122877E1 +- (0.123E~2, ~0.123E1) = 0.123123E1 +/ (0.123E~2, ~0.123E1) = ~0.1E~2 +nextAfter (0.123E~2, ~0.123E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E1) = 0.123E~2 +* (0.123E~2, ~0.123) = ~0.15129E~3 ++ (0.123E~2, ~0.123) = ~0.12177 +- (0.123E~2, ~0.123) = 0.12423 +/ (0.123E~2, ~0.123) = ~0.1E~1 +nextAfter (0.123E~2, ~0.123) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123) = 0.123E~2 +* (0.123E~2, ~0.123E~2) = ~0.15129E~5 ++ (0.123E~2, ~0.123E~2) = 0.0 +- (0.123E~2, ~0.123E~2) = 0.246E~2 +/ (0.123E~2, ~0.123E~2) = ~0.1E1 +nextAfter (0.123E~2, ~0.123E~2) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E~2) = 0.0 +* (0.123E~2, ~0.22250738585072014E~307) = ~0.2736840845964E~310 ++ (0.123E~2, ~0.22250738585072014E~307) = 0.123E~2 +- (0.123E~2, ~0.22250738585072014E~307) = 0.123E~2 +/ (0.123E~2, ~0.22250738585072014E~307) = ~0.5527906389701621E305 +nextAfter (0.123E~2, ~0.22250738585072014E~307) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.22250738585072014E~307) = 0.0 +* (0.123E~2, ~0.11125369292536007E~307) = ~0.1368420422982E~310 ++ (0.123E~2, ~0.11125369292536007E~307) = 0.123E~2 +- (0.123E~2, ~0.11125369292536007E~307) = 0.123E~2 +/ (0.123E~2, ~0.11125369292536007E~307) = ~0.11055812779403243E306 +nextAfter (0.123E~2, ~0.11125369292536007E~307) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.11125369292536007E~307) = 0.0 +* (0.123E~2, ~0.5E~323) = ~0.0 ++ (0.123E~2, ~0.5E~323) = 0.123E~2 +- (0.123E~2, ~0.5E~323) = 0.123E~2 +/ (0.123E~2, ~0.5E~323) = ~inf +nextAfter (0.123E~2, ~0.5E~323) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.5E~323) = ~inf +* (0.123E~2, ~0.0) = ~0.0 ++ (0.123E~2, ~0.0) = 0.123E~2 +- (0.123E~2, ~0.0) = 0.123E~2 +/ (0.123E~2, ~0.0) = ~inf +nextAfter (0.123E~2, ~0.0) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.0) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300000000000002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.123E~2, ~inf) = ~inf ++ (0.123E~2, ~inf) = ~inf +- (0.123E~2, ~inf) = inf +/ (0.123E~2, ~inf) = ~0.0 +nextAfter (0.123E~2, ~inf) = 0.12299999999999998E~2 +rem (0.123E~2, ~inf) = 0.123E~2 +* (0.123E~2, nan) = nan ++ (0.123E~2, nan) = nan +- (0.123E~2, nan) = nan +/ (0.123E~2, nan) = nan +nextAfter (0.123E~2, nan) = nan +rem (0.123E~2, nan) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300000000000002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.22250738585072014E~307, 0.17976931348623157E309) = 0.39999999999999996E1 ++ (0.22250738585072014E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.22250738585072014E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.22250738585072014E~307, 0.17976931348623157E309) = 0.0 +nextAfter (0.22250738585072014E~307, 0.17976931348623157E309) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.17976931348623157E309) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.8988465674311579E308) = 0.19999999999999998E1 ++ (0.22250738585072014E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.22250738585072014E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.22250738585072014E~307, 0.8988465674311579E308) = 0.0 +nextAfter (0.22250738585072014E~307, 0.8988465674311579E308) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.8988465674311579E308) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E4) = 0.27368408459638577E~304 ++ (0.22250738585072014E~307, 0.123E4) = 0.123E4 +- (0.22250738585072014E~307, 0.123E4) = ~0.123E4 +/ (0.22250738585072014E~307, 0.123E4) = 0.18090031369976E~310 +nextAfter (0.22250738585072014E~307, 0.123E4) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E4) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E2) = 0.2736840845963858E~306 ++ (0.22250738585072014E~307, 0.123E2) = 0.123E2 +- (0.22250738585072014E~307, 0.123E2) = ~0.123E2 +/ (0.22250738585072014E~307, 0.123E2) = 0.1809003136997725E~308 +nextAfter (0.22250738585072014E~307, 0.123E2) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.3141592653589793E1) = 0.6990275687580919E~307 ++ (0.22250738585072014E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.22250738585072014E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.22250738585072014E~307, 0.3141592653589793E1) = 0.7082630066519554E~308 +nextAfter (0.22250738585072014E~307, 0.3141592653589793E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.3141592653589793E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.2718281828459045E1) = 0.6048377836559378E~307 ++ (0.22250738585072014E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.22250738585072014E~307, 0.2718281828459045E1) = 0.818558927632814E~308 +nextAfter (0.22250738585072014E~307, 0.2718281828459045E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.2718281828459045E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E1) = 0.27368408459638577E~307 ++ (0.22250738585072014E~307, 0.123E1) = 0.123E1 +- (0.22250738585072014E~307, 0.123E1) = ~0.123E1 +/ (0.22250738585072014E~307, 0.123E1) = 0.18090031369977247E~307 +nextAfter (0.22250738585072014E~307, 0.123E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123) = 0.273684084596386E~308 ++ (0.22250738585072014E~307, 0.123) = 0.123 +- (0.22250738585072014E~307, 0.123) = ~0.123 +/ (0.22250738585072014E~307, 0.123) = 0.1809003136997725E~306 +nextAfter (0.22250738585072014E~307, 0.123) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E~2) = 0.2736840845964E~310 ++ (0.22250738585072014E~307, 0.123E~2) = 0.123E~2 +- (0.22250738585072014E~307, 0.123E~2) = ~0.123E~2 +/ (0.22250738585072014E~307, 0.123E~2) = 0.18090031369977247E~304 +nextAfter (0.22250738585072014E~307, 0.123E~2) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E~2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 ++ (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.4450147717014403E~307 +- (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +/ (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.1E1 +nextAfter (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.22250738585072014E~307 +rem (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +* (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 ++ (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.3337610787760802E~307 +- (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.2E1 +nextAfter (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 +* (0.22250738585072014E~307, 0.5E~323) = 0.0 ++ (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507202E~307 +- (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507201E~307 +/ (0.22250738585072014E~307, 0.5E~323) = 0.4503599627370496E16 +nextAfter (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.5E~323) = 0.0 +* (0.22250738585072014E~307, 0.0) = 0.0 ++ (0.22250738585072014E~307, 0.0) = 0.22250738585072014E~307 +- (0.22250738585072014E~307, 0.0) = 0.22250738585072014E~307 +/ (0.22250738585072014E~307, 0.0) = inf +nextAfter (0.22250738585072014E~307, 0.0) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.0) = nan +* (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.39999999999999996E1 ++ (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.19999999999999998E1 ++ (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E4) = ~0.27368408459638577E~304 ++ (0.22250738585072014E~307, ~0.123E4) = ~0.123E4 +- (0.22250738585072014E~307, ~0.123E4) = 0.123E4 +/ (0.22250738585072014E~307, ~0.123E4) = ~0.18090031369976E~310 +nextAfter (0.22250738585072014E~307, ~0.123E4) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E4) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E2) = ~0.2736840845963858E~306 ++ (0.22250738585072014E~307, ~0.123E2) = ~0.123E2 +- (0.22250738585072014E~307, ~0.123E2) = 0.123E2 +/ (0.22250738585072014E~307, ~0.123E2) = ~0.1809003136997725E~308 +nextAfter (0.22250738585072014E~307, ~0.123E2) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.6990275687580919E~307 ++ (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.7082630066519554E~308 +nextAfter (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.6048377836559378E~307 ++ (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.818558927632814E~308 +nextAfter (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E1) = ~0.27368408459638577E~307 ++ (0.22250738585072014E~307, ~0.123E1) = ~0.123E1 +- (0.22250738585072014E~307, ~0.123E1) = 0.123E1 +/ (0.22250738585072014E~307, ~0.123E1) = ~0.18090031369977247E~307 +nextAfter (0.22250738585072014E~307, ~0.123E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123) = ~0.273684084596386E~308 ++ (0.22250738585072014E~307, ~0.123) = ~0.123 +- (0.22250738585072014E~307, ~0.123) = 0.123 +/ (0.22250738585072014E~307, ~0.123) = ~0.1809003136997725E~306 +nextAfter (0.22250738585072014E~307, ~0.123) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E~2) = ~0.2736840845964E~310 ++ (0.22250738585072014E~307, ~0.123E~2) = ~0.123E~2 +- (0.22250738585072014E~307, ~0.123E~2) = 0.123E~2 +/ (0.22250738585072014E~307, ~0.123E~2) = ~0.18090031369977247E~304 +nextAfter (0.22250738585072014E~307, ~0.123E~2) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E~2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.0 ++ (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +- (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.4450147717014403E~307 +/ (0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.1E1 +nextAfter (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +* (0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.0 ++ (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +- (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.3337610787760802E~307 +/ (0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.2E1 +nextAfter (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 +* (0.22250738585072014E~307, ~0.5E~323) = ~0.0 ++ (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507201E~307 +- (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507202E~307 +/ (0.22250738585072014E~307, ~0.5E~323) = ~0.4503599627370496E16 +nextAfter (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.5E~323) = 0.0 +* (0.22250738585072014E~307, ~0.0) = ~0.0 ++ (0.22250738585072014E~307, ~0.0) = 0.22250738585072014E~307 +- (0.22250738585072014E~307, ~0.0) = 0.22250738585072014E~307 +/ (0.22250738585072014E~307, ~0.0) = ~inf +nextAfter (0.22250738585072014E~307, ~0.0) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.0) = nan +* (0.22250738585072014E~307, inf) = inf ++ (0.22250738585072014E~307, inf) = inf +- (0.22250738585072014E~307, inf) = ~inf +/ (0.22250738585072014E~307, inf) = 0.0 +nextAfter (0.22250738585072014E~307, inf) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, inf) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~inf) = ~inf ++ (0.22250738585072014E~307, ~inf) = ~inf +- (0.22250738585072014E~307, ~inf) = inf +/ (0.22250738585072014E~307, ~inf) = ~0.0 +nextAfter (0.22250738585072014E~307, ~inf) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~inf) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, nan) = nan ++ (0.22250738585072014E~307, nan) = nan +- (0.22250738585072014E~307, nan) = nan +/ (0.22250738585072014E~307, nan) = nan +nextAfter (0.22250738585072014E~307, nan) = nan +rem (0.22250738585072014E~307, nan) = nan +* (0.22250738585072014E~307, inf) = inf ++ (0.22250738585072014E~307, inf) = inf +- (0.22250738585072014E~307, inf) = ~inf +/ (0.22250738585072014E~307, inf) = 0.0 +nextAfter (0.22250738585072014E~307, inf) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, inf) = 0.22250738585072014E~307 +* (0.11125369292536007E~307, 0.17976931348623157E309) = 0.19999999999999998E1 ++ (0.11125369292536007E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.11125369292536007E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.11125369292536007E~307, 0.17976931348623157E309) = 0.0 +nextAfter (0.11125369292536007E~307, 0.17976931348623157E309) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.17976931348623157E309) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.8988465674311579E308) = 0.9999999999999999 ++ (0.11125369292536007E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.11125369292536007E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.11125369292536007E~307, 0.8988465674311579E308) = 0.0 +nextAfter (0.11125369292536007E~307, 0.8988465674311579E308) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.8988465674311579E308) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E4) = 0.13684204229819289E~304 ++ (0.11125369292536007E~307, 0.123E4) = 0.123E4 +- (0.11125369292536007E~307, 0.123E4) = ~0.123E4 +/ (0.11125369292536007E~307, 0.123E4) = 0.904501568499E~311 +nextAfter (0.11125369292536007E~307, 0.123E4) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E4) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E2) = 0.1368420422981929E~306 ++ (0.11125369292536007E~307, 0.123E2) = 0.123E2 +- (0.11125369292536007E~307, 0.123E2) = ~0.123E2 +/ (0.11125369292536007E~307, 0.123E2) = 0.90450156849886E~309 +nextAfter (0.11125369292536007E~307, 0.123E2) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.3141592653589793E1) = 0.34951378437904593E~307 ++ (0.11125369292536007E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.11125369292536007E~307, 0.3141592653589793E1) = 0.3541315033259774E~308 +nextAfter (0.11125369292536007E~307, 0.3141592653589793E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.3141592653589793E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.2718281828459045E1) = 0.3024188918279689E~307 ++ (0.11125369292536007E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.11125369292536007E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.11125369292536007E~307, 0.2718281828459045E1) = 0.409279463816407E~308 +nextAfter (0.11125369292536007E~307, 0.2718281828459045E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.2718281828459045E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E1) = 0.1368420422981929E~307 ++ (0.11125369292536007E~307, 0.123E1) = 0.123E1 +- (0.11125369292536007E~307, 0.123E1) = ~0.123E1 +/ (0.11125369292536007E~307, 0.123E1) = 0.9045015684988623E~308 +nextAfter (0.11125369292536007E~307, 0.123E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123) = 0.136842042298193E~308 ++ (0.11125369292536007E~307, 0.123) = 0.123 +- (0.11125369292536007E~307, 0.123) = ~0.123 +/ (0.11125369292536007E~307, 0.123) = 0.9045015684988624E~307 +nextAfter (0.11125369292536007E~307, 0.123) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E~2) = 0.1368420422982E~310 ++ (0.11125369292536007E~307, 0.123E~2) = 0.123E~2 +- (0.11125369292536007E~307, 0.123E~2) = ~0.123E~2 +/ (0.11125369292536007E~307, 0.123E~2) = 0.9045015684988623E~305 +nextAfter (0.11125369292536007E~307, 0.123E~2) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E~2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.0 ++ (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.3337610787760802E~307 +- (0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536007E~307 +/ (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.5 +nextAfter (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 ++ (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.22250738585072014E~307 +- (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +/ (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.1E1 +nextAfter (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.11125369292536007E~307 +rem (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +* (0.11125369292536007E~307, 0.5E~323) = 0.0 ++ (0.11125369292536007E~307, 0.5E~323) = 0.1112536929253601E~307 +- (0.11125369292536007E~307, 0.5E~323) = 0.11125369292536E~307 +/ (0.11125369292536007E~307, 0.5E~323) = 0.2251799813685248E16 +nextAfter (0.11125369292536007E~307, 0.5E~323) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, 0.5E~323) = 0.0 +* (0.11125369292536007E~307, 0.0) = 0.0 ++ (0.11125369292536007E~307, 0.0) = 0.11125369292536007E~307 +- (0.11125369292536007E~307, 0.0) = 0.11125369292536007E~307 +/ (0.11125369292536007E~307, 0.0) = inf +nextAfter (0.11125369292536007E~307, 0.0) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, 0.0) = nan +* (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.19999999999999998E1 ++ (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.9999999999999999 ++ (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E4) = ~0.13684204229819289E~304 ++ (0.11125369292536007E~307, ~0.123E4) = ~0.123E4 +- (0.11125369292536007E~307, ~0.123E4) = 0.123E4 +/ (0.11125369292536007E~307, ~0.123E4) = ~0.904501568499E~311 +nextAfter (0.11125369292536007E~307, ~0.123E4) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E4) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E2) = ~0.1368420422981929E~306 ++ (0.11125369292536007E~307, ~0.123E2) = ~0.123E2 +- (0.11125369292536007E~307, ~0.123E2) = 0.123E2 +/ (0.11125369292536007E~307, ~0.123E2) = ~0.90450156849886E~309 +nextAfter (0.11125369292536007E~307, ~0.123E2) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.34951378437904593E~307 ++ (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3541315033259774E~308 +nextAfter (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.3024188918279689E~307 ++ (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.409279463816407E~308 +nextAfter (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E1) = ~0.1368420422981929E~307 ++ (0.11125369292536007E~307, ~0.123E1) = ~0.123E1 +- (0.11125369292536007E~307, ~0.123E1) = 0.123E1 +/ (0.11125369292536007E~307, ~0.123E1) = ~0.9045015684988623E~308 +nextAfter (0.11125369292536007E~307, ~0.123E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123) = ~0.136842042298193E~308 ++ (0.11125369292536007E~307, ~0.123) = ~0.123 +- (0.11125369292536007E~307, ~0.123) = 0.123 +/ (0.11125369292536007E~307, ~0.123) = ~0.9045015684988624E~307 +nextAfter (0.11125369292536007E~307, ~0.123) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E~2) = ~0.1368420422982E~310 ++ (0.11125369292536007E~307, ~0.123E~2) = ~0.123E~2 +- (0.11125369292536007E~307, ~0.123E~2) = 0.123E~2 +/ (0.11125369292536007E~307, ~0.123E~2) = ~0.9045015684988623E~305 +nextAfter (0.11125369292536007E~307, ~0.123E~2) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E~2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.0 ++ (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.11125369292536007E~307 +- (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.3337610787760802E~307 +/ (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.5 +nextAfter (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.0 ++ (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +- (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.22250738585072014E~307 +/ (0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.1E1 +nextAfter (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +* (0.11125369292536007E~307, ~0.5E~323) = ~0.0 ++ (0.11125369292536007E~307, ~0.5E~323) = 0.11125369292536E~307 +- (0.11125369292536007E~307, ~0.5E~323) = 0.1112536929253601E~307 +/ (0.11125369292536007E~307, ~0.5E~323) = ~0.2251799813685248E16 +nextAfter (0.11125369292536007E~307, ~0.5E~323) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.5E~323) = 0.0 +* (0.11125369292536007E~307, ~0.0) = ~0.0 ++ (0.11125369292536007E~307, ~0.0) = 0.11125369292536007E~307 +- (0.11125369292536007E~307, ~0.0) = 0.11125369292536007E~307 +/ (0.11125369292536007E~307, ~0.0) = ~inf +nextAfter (0.11125369292536007E~307, ~0.0) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.0) = nan +* (0.11125369292536007E~307, inf) = inf ++ (0.11125369292536007E~307, inf) = inf +- (0.11125369292536007E~307, inf) = ~inf +/ (0.11125369292536007E~307, inf) = 0.0 +nextAfter (0.11125369292536007E~307, inf) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, inf) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~inf) = ~inf ++ (0.11125369292536007E~307, ~inf) = ~inf +- (0.11125369292536007E~307, ~inf) = inf +/ (0.11125369292536007E~307, ~inf) = ~0.0 +nextAfter (0.11125369292536007E~307, ~inf) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~inf) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, nan) = nan ++ (0.11125369292536007E~307, nan) = nan +- (0.11125369292536007E~307, nan) = nan +/ (0.11125369292536007E~307, nan) = nan +nextAfter (0.11125369292536007E~307, nan) = nan +rem (0.11125369292536007E~307, nan) = nan +* (0.11125369292536007E~307, inf) = inf ++ (0.11125369292536007E~307, inf) = inf +- (0.11125369292536007E~307, inf) = ~inf +/ (0.11125369292536007E~307, inf) = 0.0 +nextAfter (0.11125369292536007E~307, inf) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, inf) = 0.11125369292536007E~307 +* (0.5E~323, 0.17976931348623157E309) = 0.8881784197001251E~15 ++ (0.5E~323, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.5E~323, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.5E~323, 0.17976931348623157E309) = 0.0 +nextAfter (0.5E~323, 0.17976931348623157E309) = 0.1E~322 +rem (0.5E~323, 0.17976931348623157E309) = 0.5E~323 +* (0.5E~323, 0.8988465674311579E308) = 0.44408920985006257E~15 ++ (0.5E~323, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.5E~323, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.5E~323, 0.8988465674311579E308) = 0.0 +nextAfter (0.5E~323, 0.8988465674311579E308) = 0.1E~322 +rem (0.5E~323, 0.8988465674311579E308) = 0.5E~323 +* (0.5E~323, 0.123E4) = 0.6077E~320 ++ (0.5E~323, 0.123E4) = 0.123E4 +- (0.5E~323, 0.123E4) = ~0.123E4 +/ (0.5E~323, 0.123E4) = 0.0 +nextAfter (0.5E~323, 0.123E4) = 0.1E~322 +rem (0.5E~323, 0.123E4) = 0.5E~323 +* (0.5E~323, 0.123E2) = 0.6E~322 ++ (0.5E~323, 0.123E2) = 0.123E2 +- (0.5E~323, 0.123E2) = ~0.123E2 +/ (0.5E~323, 0.123E2) = 0.0 +nextAfter (0.5E~323, 0.123E2) = 0.1E~322 +rem (0.5E~323, 0.123E2) = 0.5E~323 +* (0.5E~323, 0.3141592653589793E1) = 0.15E~322 ++ (0.5E~323, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.5E~323, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.5E~323, 0.3141592653589793E1) = 0.0 +nextAfter (0.5E~323, 0.3141592653589793E1) = 0.1E~322 +rem (0.5E~323, 0.3141592653589793E1) = 0.5E~323 +* (0.5E~323, 0.2718281828459045E1) = 0.15E~322 ++ (0.5E~323, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.5E~323, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.5E~323, 0.2718281828459045E1) = 0.0 +nextAfter (0.5E~323, 0.2718281828459045E1) = 0.1E~322 +rem (0.5E~323, 0.2718281828459045E1) = 0.5E~323 +* (0.5E~323, 0.123E1) = 0.5E~323 ++ (0.5E~323, 0.123E1) = 0.123E1 +- (0.5E~323, 0.123E1) = ~0.123E1 +/ (0.5E~323, 0.123E1) = 0.5E~323 +nextAfter (0.5E~323, 0.123E1) = 0.1E~322 +rem (0.5E~323, 0.123E1) = 0.5E~323 +* (0.5E~323, 0.123) = 0.0 ++ (0.5E~323, 0.123) = 0.123 +- (0.5E~323, 0.123) = ~0.123 +/ (0.5E~323, 0.123) = 0.4E~322 +nextAfter (0.5E~323, 0.123) = 0.1E~322 +rem (0.5E~323, 0.123) = 0.5E~323 +* (0.5E~323, 0.123E~2) = 0.0 ++ (0.5E~323, 0.123E~2) = 0.123E~2 +- (0.5E~323, 0.123E~2) = ~0.123E~2 +/ (0.5E~323, 0.123E~2) = 0.4017E~320 +nextAfter (0.5E~323, 0.123E~2) = 0.1E~322 +rem (0.5E~323, 0.123E~2) = 0.5E~323 +* (0.5E~323, 0.22250738585072014E~307) = 0.0 ++ (0.5E~323, 0.22250738585072014E~307) = 0.2225073858507202E~307 +- (0.5E~323, 0.22250738585072014E~307) = ~0.2225073858507201E~307 +/ (0.5E~323, 0.22250738585072014E~307) = 0.2220446049250313E~15 +nextAfter (0.5E~323, 0.22250738585072014E~307) = 0.1E~322 +rem (0.5E~323, 0.22250738585072014E~307) = 0.5E~323 +* (0.5E~323, 0.11125369292536007E~307) = 0.0 ++ (0.5E~323, 0.11125369292536007E~307) = 0.1112536929253601E~307 +- (0.5E~323, 0.11125369292536007E~307) = ~0.11125369292536E~307 +/ (0.5E~323, 0.11125369292536007E~307) = 0.4440892098500626E~15 +nextAfter (0.5E~323, 0.11125369292536007E~307) = 0.1E~322 +rem (0.5E~323, 0.11125369292536007E~307) = 0.5E~323 +* (0.5E~323, 0.5E~323) = 0.0 ++ (0.5E~323, 0.5E~323) = 0.1E~322 +- (0.5E~323, 0.5E~323) = 0.0 +/ (0.5E~323, 0.5E~323) = 0.1E1 +nextAfter (0.5E~323, 0.5E~323) = 0.5E~323 +rem (0.5E~323, 0.5E~323) = 0.0 +* (0.5E~323, 0.0) = 0.0 ++ (0.5E~323, 0.0) = 0.5E~323 +- (0.5E~323, 0.0) = 0.5E~323 +/ (0.5E~323, 0.0) = inf +nextAfter (0.5E~323, 0.0) = 0.0 +rem (0.5E~323, 0.0) = nan +* (0.5E~323, ~0.17976931348623157E309) = ~0.8881784197001251E~15 ++ (0.5E~323, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.5E~323, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.5E~323, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.5E~323, ~0.17976931348623157E309) = 0.0 +rem (0.5E~323, ~0.17976931348623157E309) = 0.5E~323 +* (0.5E~323, ~0.8988465674311579E308) = ~0.44408920985006257E~15 ++ (0.5E~323, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.5E~323, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.5E~323, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.5E~323, ~0.8988465674311579E308) = 0.0 +rem (0.5E~323, ~0.8988465674311579E308) = 0.5E~323 +* (0.5E~323, ~0.123E4) = ~0.6077E~320 ++ (0.5E~323, ~0.123E4) = ~0.123E4 +- (0.5E~323, ~0.123E4) = 0.123E4 +/ (0.5E~323, ~0.123E4) = ~0.0 +nextAfter (0.5E~323, ~0.123E4) = 0.0 +rem (0.5E~323, ~0.123E4) = 0.5E~323 +* (0.5E~323, ~0.123E2) = ~0.6E~322 ++ (0.5E~323, ~0.123E2) = ~0.123E2 +- (0.5E~323, ~0.123E2) = 0.123E2 +/ (0.5E~323, ~0.123E2) = ~0.0 +nextAfter (0.5E~323, ~0.123E2) = 0.0 +rem (0.5E~323, ~0.123E2) = 0.5E~323 +* (0.5E~323, ~0.3141592653589793E1) = ~0.15E~322 ++ (0.5E~323, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.5E~323, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.5E~323, ~0.3141592653589793E1) = ~0.0 +nextAfter (0.5E~323, ~0.3141592653589793E1) = 0.0 +rem (0.5E~323, ~0.3141592653589793E1) = 0.5E~323 +* (0.5E~323, ~0.2718281828459045E1) = ~0.15E~322 ++ (0.5E~323, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.5E~323, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.5E~323, ~0.2718281828459045E1) = ~0.0 +nextAfter (0.5E~323, ~0.2718281828459045E1) = 0.0 +rem (0.5E~323, ~0.2718281828459045E1) = 0.5E~323 +* (0.5E~323, ~0.123E1) = ~0.5E~323 ++ (0.5E~323, ~0.123E1) = ~0.123E1 +- (0.5E~323, ~0.123E1) = 0.123E1 +/ (0.5E~323, ~0.123E1) = ~0.5E~323 +nextAfter (0.5E~323, ~0.123E1) = 0.0 +rem (0.5E~323, ~0.123E1) = 0.5E~323 +* (0.5E~323, ~0.123) = ~0.0 ++ (0.5E~323, ~0.123) = ~0.123 +- (0.5E~323, ~0.123) = 0.123 +/ (0.5E~323, ~0.123) = ~0.4E~322 +nextAfter (0.5E~323, ~0.123) = 0.0 +rem (0.5E~323, ~0.123) = 0.5E~323 +* (0.5E~323, ~0.123E~2) = ~0.0 ++ (0.5E~323, ~0.123E~2) = ~0.123E~2 +- (0.5E~323, ~0.123E~2) = 0.123E~2 +/ (0.5E~323, ~0.123E~2) = ~0.4017E~320 +nextAfter (0.5E~323, ~0.123E~2) = 0.0 +rem (0.5E~323, ~0.123E~2) = 0.5E~323 +* (0.5E~323, ~0.22250738585072014E~307) = ~0.0 ++ (0.5E~323, ~0.22250738585072014E~307) = ~0.2225073858507201E~307 +- (0.5E~323, ~0.22250738585072014E~307) = 0.2225073858507202E~307 +/ (0.5E~323, ~0.22250738585072014E~307) = ~0.2220446049250313E~15 +nextAfter (0.5E~323, ~0.22250738585072014E~307) = 0.0 +rem (0.5E~323, ~0.22250738585072014E~307) = 0.5E~323 +* (0.5E~323, ~0.11125369292536007E~307) = ~0.0 ++ (0.5E~323, ~0.11125369292536007E~307) = ~0.11125369292536E~307 +- (0.5E~323, ~0.11125369292536007E~307) = 0.1112536929253601E~307 +/ (0.5E~323, ~0.11125369292536007E~307) = ~0.4440892098500626E~15 +nextAfter (0.5E~323, ~0.11125369292536007E~307) = 0.0 +rem (0.5E~323, ~0.11125369292536007E~307) = 0.5E~323 +* (0.5E~323, ~0.5E~323) = ~0.0 ++ (0.5E~323, ~0.5E~323) = 0.0 +- (0.5E~323, ~0.5E~323) = 0.1E~322 +/ (0.5E~323, ~0.5E~323) = ~0.1E1 +nextAfter (0.5E~323, ~0.5E~323) = 0.0 +rem (0.5E~323, ~0.5E~323) = 0.0 +* (0.5E~323, ~0.0) = ~0.0 ++ (0.5E~323, ~0.0) = 0.5E~323 +- (0.5E~323, ~0.0) = 0.5E~323 +/ (0.5E~323, ~0.0) = ~inf +nextAfter (0.5E~323, ~0.0) = 0.0 +rem (0.5E~323, ~0.0) = nan +* (0.5E~323, inf) = inf ++ (0.5E~323, inf) = inf +- (0.5E~323, inf) = ~inf +/ (0.5E~323, inf) = 0.0 +nextAfter (0.5E~323, inf) = 0.1E~322 +rem (0.5E~323, inf) = 0.5E~323 +* (0.5E~323, ~inf) = ~inf ++ (0.5E~323, ~inf) = ~inf +- (0.5E~323, ~inf) = inf +/ (0.5E~323, ~inf) = ~0.0 +nextAfter (0.5E~323, ~inf) = 0.0 +rem (0.5E~323, ~inf) = 0.5E~323 +* (0.5E~323, nan) = nan ++ (0.5E~323, nan) = nan +- (0.5E~323, nan) = nan +/ (0.5E~323, nan) = nan +nextAfter (0.5E~323, nan) = nan +rem (0.5E~323, nan) = nan +* (0.5E~323, inf) = inf ++ (0.5E~323, inf) = inf +- (0.5E~323, inf) = ~inf +/ (0.5E~323, inf) = 0.0 +nextAfter (0.5E~323, inf) = 0.1E~322 +rem (0.5E~323, inf) = 0.5E~323 +* (0.0, 0.17976931348623157E309) = 0.0 ++ (0.0, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.0, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.0, 0.17976931348623157E309) = 0.0 +nextAfter (0.0, 0.17976931348623157E309) = 0.5E~323 +rem (0.0, 0.17976931348623157E309) = 0.0 +* (0.0, 0.8988465674311579E308) = 0.0 ++ (0.0, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.0, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.0, 0.8988465674311579E308) = 0.0 +nextAfter (0.0, 0.8988465674311579E308) = 0.5E~323 +rem (0.0, 0.8988465674311579E308) = 0.0 +* (0.0, 0.123E4) = 0.0 ++ (0.0, 0.123E4) = 0.123E4 +- (0.0, 0.123E4) = ~0.123E4 +/ (0.0, 0.123E4) = 0.0 +nextAfter (0.0, 0.123E4) = 0.5E~323 +rem (0.0, 0.123E4) = 0.0 +* (0.0, 0.123E2) = 0.0 ++ (0.0, 0.123E2) = 0.123E2 +- (0.0, 0.123E2) = ~0.123E2 +/ (0.0, 0.123E2) = 0.0 +nextAfter (0.0, 0.123E2) = 0.5E~323 +rem (0.0, 0.123E2) = 0.0 +* (0.0, 0.3141592653589793E1) = 0.0 ++ (0.0, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.0, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.0, 0.3141592653589793E1) = 0.0 +nextAfter (0.0, 0.3141592653589793E1) = 0.5E~323 +rem (0.0, 0.3141592653589793E1) = 0.0 +* (0.0, 0.2718281828459045E1) = 0.0 ++ (0.0, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.0, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.0, 0.2718281828459045E1) = 0.0 +nextAfter (0.0, 0.2718281828459045E1) = 0.5E~323 +rem (0.0, 0.2718281828459045E1) = 0.0 +* (0.0, 0.123E1) = 0.0 ++ (0.0, 0.123E1) = 0.123E1 +- (0.0, 0.123E1) = ~0.123E1 +/ (0.0, 0.123E1) = 0.0 +nextAfter (0.0, 0.123E1) = 0.5E~323 +rem (0.0, 0.123E1) = 0.0 +* (0.0, 0.123) = 0.0 ++ (0.0, 0.123) = 0.123 +- (0.0, 0.123) = ~0.123 +/ (0.0, 0.123) = 0.0 +nextAfter (0.0, 0.123) = 0.5E~323 +rem (0.0, 0.123) = 0.0 +* (0.0, 0.123E~2) = 0.0 ++ (0.0, 0.123E~2) = 0.123E~2 +- (0.0, 0.123E~2) = ~0.123E~2 +/ (0.0, 0.123E~2) = 0.0 +nextAfter (0.0, 0.123E~2) = 0.5E~323 +rem (0.0, 0.123E~2) = 0.0 +* (0.0, 0.22250738585072014E~307) = 0.0 ++ (0.0, 0.22250738585072014E~307) = 0.22250738585072014E~307 +- (0.0, 0.22250738585072014E~307) = ~0.22250738585072014E~307 +/ (0.0, 0.22250738585072014E~307) = 0.0 +nextAfter (0.0, 0.22250738585072014E~307) = 0.5E~323 +rem (0.0, 0.22250738585072014E~307) = 0.0 +* (0.0, 0.11125369292536007E~307) = 0.0 ++ (0.0, 0.11125369292536007E~307) = 0.11125369292536007E~307 +- (0.0, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (0.0, 0.11125369292536007E~307) = 0.0 +nextAfter (0.0, 0.11125369292536007E~307) = 0.5E~323 +rem (0.0, 0.11125369292536007E~307) = 0.0 +* (0.0, 0.5E~323) = 0.0 ++ (0.0, 0.5E~323) = 0.5E~323 +- (0.0, 0.5E~323) = ~0.5E~323 +/ (0.0, 0.5E~323) = 0.0 +nextAfter (0.0, 0.5E~323) = 0.5E~323 +rem (0.0, 0.5E~323) = 0.0 +* (0.0, 0.0) = 0.0 ++ (0.0, 0.0) = 0.0 +- (0.0, 0.0) = 0.0 +/ (0.0, 0.0) = nan +nextAfter (0.0, 0.0) = 0.0 +rem (0.0, 0.0) = 0.0 +* (0.0, ~0.17976931348623157E309) = ~0.0 ++ (0.0, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.0, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.0, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.0, ~0.17976931348623157E309) = ~0.5E~323 +rem (0.0, ~0.17976931348623157E309) = 0.0 +* (0.0, ~0.8988465674311579E308) = ~0.0 ++ (0.0, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.0, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.0, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.0, ~0.8988465674311579E308) = ~0.5E~323 +rem (0.0, ~0.8988465674311579E308) = 0.0 +* (0.0, ~0.123E4) = ~0.0 ++ (0.0, ~0.123E4) = ~0.123E4 +- (0.0, ~0.123E4) = 0.123E4 +/ (0.0, ~0.123E4) = ~0.0 +nextAfter (0.0, ~0.123E4) = ~0.5E~323 +rem (0.0, ~0.123E4) = 0.0 +* (0.0, ~0.123E2) = ~0.0 ++ (0.0, ~0.123E2) = ~0.123E2 +- (0.0, ~0.123E2) = 0.123E2 +/ (0.0, ~0.123E2) = ~0.0 +nextAfter (0.0, ~0.123E2) = ~0.5E~323 +rem (0.0, ~0.123E2) = 0.0 +* (0.0, ~0.3141592653589793E1) = ~0.0 ++ (0.0, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.0, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.0, ~0.3141592653589793E1) = ~0.0 +nextAfter (0.0, ~0.3141592653589793E1) = ~0.5E~323 +rem (0.0, ~0.3141592653589793E1) = 0.0 +* (0.0, ~0.2718281828459045E1) = ~0.0 ++ (0.0, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.0, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.0, ~0.2718281828459045E1) = ~0.0 +nextAfter (0.0, ~0.2718281828459045E1) = ~0.5E~323 +rem (0.0, ~0.2718281828459045E1) = 0.0 +* (0.0, ~0.123E1) = ~0.0 ++ (0.0, ~0.123E1) = ~0.123E1 +- (0.0, ~0.123E1) = 0.123E1 +/ (0.0, ~0.123E1) = ~0.0 +nextAfter (0.0, ~0.123E1) = ~0.5E~323 +rem (0.0, ~0.123E1) = 0.0 +* (0.0, ~0.123) = ~0.0 ++ (0.0, ~0.123) = ~0.123 +- (0.0, ~0.123) = 0.123 +/ (0.0, ~0.123) = ~0.0 +nextAfter (0.0, ~0.123) = ~0.5E~323 +rem (0.0, ~0.123) = 0.0 +* (0.0, ~0.123E~2) = ~0.0 ++ (0.0, ~0.123E~2) = ~0.123E~2 +- (0.0, ~0.123E~2) = 0.123E~2 +/ (0.0, ~0.123E~2) = ~0.0 +nextAfter (0.0, ~0.123E~2) = ~0.5E~323 +rem (0.0, ~0.123E~2) = 0.0 +* (0.0, ~0.22250738585072014E~307) = ~0.0 ++ (0.0, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +- (0.0, ~0.22250738585072014E~307) = 0.22250738585072014E~307 +/ (0.0, ~0.22250738585072014E~307) = ~0.0 +nextAfter (0.0, ~0.22250738585072014E~307) = ~0.5E~323 +rem (0.0, ~0.22250738585072014E~307) = 0.0 +* (0.0, ~0.11125369292536007E~307) = ~0.0 ++ (0.0, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (0.0, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (0.0, ~0.11125369292536007E~307) = ~0.0 +nextAfter (0.0, ~0.11125369292536007E~307) = ~0.5E~323 +rem (0.0, ~0.11125369292536007E~307) = 0.0 +* (0.0, ~0.5E~323) = ~0.0 ++ (0.0, ~0.5E~323) = ~0.5E~323 +- (0.0, ~0.5E~323) = 0.5E~323 +/ (0.0, ~0.5E~323) = ~0.0 +nextAfter (0.0, ~0.5E~323) = ~0.5E~323 +rem (0.0, ~0.5E~323) = 0.0 +* (0.0, ~0.0) = ~0.0 ++ (0.0, ~0.0) = 0.0 +- (0.0, ~0.0) = 0.0 +/ (0.0, ~0.0) = nan +nextAfter (0.0, ~0.0) = ~0.0 +rem (0.0, ~0.0) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.5E~323 +rem (0.0, inf) = 0.0 +* (0.0, ~inf) = nan ++ (0.0, ~inf) = ~inf +- (0.0, ~inf) = inf +/ (0.0, ~inf) = ~0.0 +nextAfter (0.0, ~inf) = ~0.5E~323 +rem (0.0, ~inf) = 0.0 +* (0.0, nan) = nan ++ (0.0, nan) = nan +- (0.0, nan) = nan +/ (0.0, nan) = nan +nextAfter (0.0, nan) = nan +rem (0.0, nan) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.5E~323 +rem (0.0, inf) = 0.0 +* (~0.17976931348623157E309, 0.17976931348623157E309) = ~inf ++ (~0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +- (~0.17976931348623157E309, 0.17976931348623157E309) = ~inf +/ (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.1E1 +nextAfter (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +* (~0.17976931348623157E309, 0.8988465674311579E308) = ~inf ++ (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.17976931348623157E309, 0.8988465674311579E308) = ~inf +/ (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.2E1 +nextAfter (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.8988465674311579E308) = 0.0 +* (~0.17976931348623157E309, 0.123E4) = ~inf ++ (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E4) = ~0.1461539134034403E306 +nextAfter (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E4) = 0.0 +* (~0.17976931348623157E309, 0.123E2) = ~inf ++ (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E2) = ~0.1461539134034403E308 +nextAfter (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E2) = 0.0 +* (~0.17976931348623157E309, 0.3141592653589793E1) = ~inf ++ (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.5722234971514056E308 +nextAfter (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.3141592653589793E1) = 0.0 +* (~0.17976931348623157E309, 0.2718281828459045E1) = ~inf ++ (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.661334345850887E308 +nextAfter (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, 0.123E1) = ~inf ++ (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E1) = ~0.1461539134034403E309 +nextAfter (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, 0.123) = ~0.22111625558806483E308 ++ (~0.17976931348623157E309, 0.123) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123) = ~inf +nextAfter (~0.17976931348623157E309, 0.123) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123) = inf +* (~0.17976931348623157E309, 0.123E~2) = ~0.2211162555880648E306 ++ (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E~2) = ~inf +nextAfter (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E~2) = inf +* (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.39999999999999996E1 ++ (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.22250738585072014E~307) = ~inf +nextAfter (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.22250738585072014E~307) = inf +* (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.19999999999999998E1 ++ (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.11125369292536007E~307) = ~inf +nextAfter (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.11125369292536007E~307) = inf +* (~0.17976931348623157E309, 0.5E~323) = ~0.8881784197001251E~15 ++ (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.5E~323) = ~inf +nextAfter (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.5E~323) = inf +* (~0.17976931348623157E309, 0.0) = ~0.0 ++ (~0.17976931348623157E309, 0.0) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.0) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.0) = ~inf +nextAfter (~0.17976931348623157E309, 0.0) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.0) = nan +* (~0.17976931348623157E309, ~0.17976931348623157E309) = inf ++ (~0.17976931348623157E309, ~0.17976931348623157E309) = ~inf +- (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +/ (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.1E1 +nextAfter (~0.17976931348623157E309, ~0.17976931348623157E309) = ~0.17976931348623157E309 +rem (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +* (~0.17976931348623157E309, ~0.8988465674311579E308) = inf ++ (~0.17976931348623157E309, ~0.8988465674311579E308) = ~inf +- (~0.17976931348623157E309, ~0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.17976931348623157E309, ~0.8988465674311579E308) = 0.2E1 +nextAfter (~0.17976931348623157E309, ~0.8988465674311579E308) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.8988465674311579E308) = 0.0 +* (~0.17976931348623157E309, ~0.123E4) = inf ++ (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E4) = 0.1461539134034403E306 +nextAfter (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E4) = 0.0 +* (~0.17976931348623157E309, ~0.123E2) = inf ++ (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E2) = 0.1461539134034403E308 +nextAfter (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E2) = 0.0 +* (~0.17976931348623157E309, ~0.3141592653589793E1) = inf ++ (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.3141592653589793E1) = 0.5722234971514056E308 +nextAfter (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.3141592653589793E1) = 0.0 +* (~0.17976931348623157E309, ~0.2718281828459045E1) = inf ++ (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.2718281828459045E1) = 0.661334345850887E308 +nextAfter (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, ~0.123E1) = inf ++ (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E1) = 0.1461539134034403E309 +nextAfter (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, ~0.123) = 0.22111625558806483E308 ++ (~0.17976931348623157E309, ~0.123) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123) = inf +nextAfter (~0.17976931348623157E309, ~0.123) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123) = inf +* (~0.17976931348623157E309, ~0.123E~2) = 0.2211162555880648E306 ++ (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E~2) = inf +nextAfter (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E~2) = inf +* (~0.17976931348623157E309, ~0.22250738585072014E~307) = 0.39999999999999996E1 ++ (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.22250738585072014E~307) = inf +nextAfter (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.22250738585072014E~307) = inf +* (~0.17976931348623157E309, ~0.11125369292536007E~307) = 0.19999999999999998E1 ++ (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.11125369292536007E~307) = inf +nextAfter (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.11125369292536007E~307) = inf +* (~0.17976931348623157E309, ~0.5E~323) = 0.8881784197001251E~15 ++ (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.5E~323) = inf +nextAfter (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.5E~323) = inf +* (~0.17976931348623157E309, ~0.0) = 0.0 ++ (~0.17976931348623157E309, ~0.0) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.0) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.0) = inf +nextAfter (~0.17976931348623157E309, ~0.0) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.0) = nan +* (~0.17976931348623157E309, inf) = ~inf ++ (~0.17976931348623157E309, inf) = inf +- (~0.17976931348623157E309, inf) = ~inf +/ (~0.17976931348623157E309, inf) = ~0.0 +nextAfter (~0.17976931348623157E309, inf) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, inf) = ~0.17976931348623157E309 +* (~0.17976931348623157E309, ~inf) = inf ++ (~0.17976931348623157E309, ~inf) = ~inf +- (~0.17976931348623157E309, ~inf) = inf +/ (~0.17976931348623157E309, ~inf) = 0.0 +nextAfter (~0.17976931348623157E309, ~inf) = ~inf +rem (~0.17976931348623157E309, ~inf) = ~0.17976931348623157E309 +* (~0.17976931348623157E309, nan) = nan ++ (~0.17976931348623157E309, nan) = nan +- (~0.17976931348623157E309, nan) = nan +/ (~0.17976931348623157E309, nan) = nan +nextAfter (~0.17976931348623157E309, nan) = nan +rem (~0.17976931348623157E309, nan) = nan +* (~0.17976931348623157E309, inf) = ~inf ++ (~0.17976931348623157E309, inf) = inf +- (~0.17976931348623157E309, inf) = ~inf +/ (~0.17976931348623157E309, inf) = ~0.0 +nextAfter (~0.17976931348623157E309, inf) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, inf) = ~0.17976931348623157E309 +* (~0.8988465674311579E308, 0.17976931348623157E309) = ~inf ++ (~0.8988465674311579E308, 0.17976931348623157E309) = 0.8988465674311579E308 +- (~0.8988465674311579E308, 0.17976931348623157E309) = ~inf +/ (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.5 +nextAfter (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, 0.8988465674311579E308) = ~inf ++ (~0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +- (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.17976931348623157E309 +/ (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.1E1 +nextAfter (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +* (~0.8988465674311579E308, 0.123E4) = ~inf ++ (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E4) = ~0.7307695670172015E305 +nextAfter (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E4) = 0.0 +* (~0.8988465674311579E308, 0.123E2) = ~inf ++ (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E2) = ~0.7307695670172014E307 +nextAfter (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E2) = 0.0 +* (~0.8988465674311579E308, 0.3141592653589793E1) = ~inf ++ (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.2861117485757028E308 +nextAfter (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.3141592653589793E1) = 0.0 +* (~0.8988465674311579E308, 0.2718281828459045E1) = ~inf ++ (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.3306671729254435E308 +nextAfter (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, 0.123E1) = ~0.1105581277940324E309 ++ (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E1) = ~0.7307695670172015E308 +nextAfter (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, 0.123) = ~0.11055812779403241E308 ++ (~0.8988465674311579E308, 0.123) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123) = ~inf +nextAfter (~0.8988465674311579E308, 0.123) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123) = inf +* (~0.8988465674311579E308, 0.123E~2) = ~0.1105581277940324E306 ++ (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E~2) = ~inf +nextAfter (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E~2) = inf +* (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.19999999999999998E1 ++ (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.22250738585072014E~307) = ~inf +nextAfter (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.22250738585072014E~307) = inf +* (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.9999999999999999 ++ (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.11125369292536007E~307) = ~inf +nextAfter (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.11125369292536007E~307) = inf +* (~0.8988465674311579E308, 0.5E~323) = ~0.44408920985006257E~15 ++ (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.5E~323) = ~inf +nextAfter (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.5E~323) = inf +* (~0.8988465674311579E308, 0.0) = ~0.0 ++ (~0.8988465674311579E308, 0.0) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.0) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.0) = ~inf +nextAfter (~0.8988465674311579E308, 0.0) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.0) = nan +* (~0.8988465674311579E308, ~0.17976931348623157E309) = inf ++ (~0.8988465674311579E308, ~0.17976931348623157E309) = ~inf +- (~0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.17976931348623157E309) = 0.5 +nextAfter (~0.8988465674311579E308, ~0.17976931348623157E309) = ~0.898846567431158E308 +rem (~0.8988465674311579E308, ~0.17976931348623157E309) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, ~0.8988465674311579E308) = inf ++ (~0.8988465674311579E308, ~0.8988465674311579E308) = ~0.17976931348623157E309 +- (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +/ (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.1E1 +nextAfter (~0.8988465674311579E308, ~0.8988465674311579E308) = ~0.8988465674311579E308 +rem (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +* (~0.8988465674311579E308, ~0.123E4) = inf ++ (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E4) = 0.7307695670172015E305 +nextAfter (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E4) = 0.0 +* (~0.8988465674311579E308, ~0.123E2) = inf ++ (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E2) = 0.7307695670172014E307 +nextAfter (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E2) = 0.0 +* (~0.8988465674311579E308, ~0.3141592653589793E1) = inf ++ (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.3141592653589793E1) = 0.2861117485757028E308 +nextAfter (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.3141592653589793E1) = 0.0 +* (~0.8988465674311579E308, ~0.2718281828459045E1) = inf ++ (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.2718281828459045E1) = 0.3306671729254435E308 +nextAfter (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, ~0.123E1) = 0.1105581277940324E309 ++ (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E1) = 0.7307695670172015E308 +nextAfter (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, ~0.123) = 0.11055812779403241E308 ++ (~0.8988465674311579E308, ~0.123) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123) = inf +nextAfter (~0.8988465674311579E308, ~0.123) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123) = inf +* (~0.8988465674311579E308, ~0.123E~2) = 0.1105581277940324E306 ++ (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E~2) = inf +nextAfter (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E~2) = inf +* (~0.8988465674311579E308, ~0.22250738585072014E~307) = 0.19999999999999998E1 ++ (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.22250738585072014E~307) = inf +nextAfter (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.22250738585072014E~307) = inf +* (~0.8988465674311579E308, ~0.11125369292536007E~307) = 0.9999999999999999 ++ (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.11125369292536007E~307) = inf +nextAfter (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.11125369292536007E~307) = inf +* (~0.8988465674311579E308, ~0.5E~323) = 0.44408920985006257E~15 ++ (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.5E~323) = inf +nextAfter (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.5E~323) = inf +* (~0.8988465674311579E308, ~0.0) = 0.0 ++ (~0.8988465674311579E308, ~0.0) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.0) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.0) = inf +nextAfter (~0.8988465674311579E308, ~0.0) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.0) = nan +* (~0.8988465674311579E308, inf) = ~inf ++ (~0.8988465674311579E308, inf) = inf +- (~0.8988465674311579E308, inf) = ~inf +/ (~0.8988465674311579E308, inf) = ~0.0 +nextAfter (~0.8988465674311579E308, inf) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, inf) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, ~inf) = inf ++ (~0.8988465674311579E308, ~inf) = ~inf +- (~0.8988465674311579E308, ~inf) = inf +/ (~0.8988465674311579E308, ~inf) = 0.0 +nextAfter (~0.8988465674311579E308, ~inf) = ~0.898846567431158E308 +rem (~0.8988465674311579E308, ~inf) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, nan) = nan ++ (~0.8988465674311579E308, nan) = nan +- (~0.8988465674311579E308, nan) = nan +/ (~0.8988465674311579E308, nan) = nan +nextAfter (~0.8988465674311579E308, nan) = nan +rem (~0.8988465674311579E308, nan) = nan +* (~0.8988465674311579E308, inf) = ~inf ++ (~0.8988465674311579E308, inf) = inf +- (~0.8988465674311579E308, inf) = ~inf +/ (~0.8988465674311579E308, inf) = ~0.0 +nextAfter (~0.8988465674311579E308, inf) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, inf) = ~0.8988465674311579E308 +* (~0.123E4, 0.17976931348623157E309) = ~inf ++ (~0.123E4, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E4, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E4, 0.17976931348623157E309) = ~0.6842102114909646E~305 +nextAfter (~0.123E4, 0.17976931348623157E309) = ~0.12299999999999998E4 +rem (~0.123E4, 0.17976931348623157E309) = ~0.123E4 +* (~0.123E4, 0.8988465674311579E308) = ~inf ++ (~0.123E4, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E4, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E4, 0.8988465674311579E308) = ~0.1368420422981929E~304 +nextAfter (~0.123E4, 0.8988465674311579E308) = ~0.12299999999999998E4 +rem (~0.123E4, 0.8988465674311579E308) = ~0.123E4 +* (~0.123E4, 0.123E4) = ~0.15129E7 ++ (~0.123E4, 0.123E4) = 0.0 +- (~0.123E4, 0.123E4) = ~0.246E4 +/ (~0.123E4, 0.123E4) = ~0.1E1 +nextAfter (~0.123E4, 0.123E4) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E4) = 0.0 +* (~0.123E4, 0.123E2) = ~0.15129E5 ++ (~0.123E4, 0.123E2) = ~0.12177E4 +- (~0.123E4, 0.123E2) = ~0.12423E4 +/ (~0.123E4, 0.123E2) = ~0.1E3 +nextAfter (~0.123E4, 0.123E2) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E2) = 0.0 +* (~0.123E4, 0.3141592653589793E1) = ~0.38641589639154454E4 ++ (~0.123E4, 0.3141592653589793E1) = ~0.122685840734641E4 +- (~0.123E4, 0.3141592653589793E1) = ~0.123314159265359E4 +/ (~0.123E4, 0.3141592653589793E1) = ~0.39152116000606253E3 +nextAfter (~0.123E4, 0.3141592653589793E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.3141592653589793E1) = ~0.16372724463908526E1 +* (~0.123E4, 0.2718281828459045E1) = ~0.33434866490046256E4 ++ (~0.123E4, 0.2718281828459045E1) = ~0.1227281718171541E4 +- (~0.123E4, 0.2718281828459045E1) = ~0.1232718281828459E4 +/ (~0.123E4, 0.2718281828459045E1) = ~0.4524917126408741E3 +nextAfter (~0.123E4, 0.2718281828459045E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.2718281828459045E1) = ~0.13366135365115497E1 +* (~0.123E4, 0.123E1) = ~0.15129E4 ++ (~0.123E4, 0.123E1) = ~0.122877E4 +- (~0.123E4, 0.123E1) = ~0.123123E4 +/ (~0.123E4, 0.123E1) = ~0.1E4 +nextAfter (~0.123E4, 0.123E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E1) = 0.0 +* (~0.123E4, 0.123) = ~0.15129E3 ++ (~0.123E4, 0.123) = ~0.1229877E4 +- (~0.123E4, 0.123) = ~0.1230123E4 +/ (~0.123E4, 0.123) = ~0.1E5 +nextAfter (~0.123E4, 0.123) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123) = 0.0 +* (~0.123E4, 0.123E~2) = ~0.15129E1 ++ (~0.123E4, 0.123E~2) = ~0.122999877E4 +- (~0.123E4, 0.123E~2) = ~0.123000123E4 +/ (~0.123E4, 0.123E~2) = ~0.1E7 +nextAfter (~0.123E4, 0.123E~2) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E~2) = 0.0 +* (~0.123E4, 0.22250738585072014E~307) = ~0.27368408459638577E~304 ++ (~0.123E4, 0.22250738585072014E~307) = ~0.123E4 +- (~0.123E4, 0.22250738585072014E~307) = ~0.123E4 +/ (~0.123E4, 0.22250738585072014E~307) = ~inf +nextAfter (~0.123E4, 0.22250738585072014E~307) = ~0.12299999999999998E4 +rem (~0.123E4, 0.22250738585072014E~307) = inf +* (~0.123E4, 0.11125369292536007E~307) = ~0.13684204229819289E~304 ++ (~0.123E4, 0.11125369292536007E~307) = ~0.123E4 +- (~0.123E4, 0.11125369292536007E~307) = ~0.123E4 +/ (~0.123E4, 0.11125369292536007E~307) = ~inf +nextAfter (~0.123E4, 0.11125369292536007E~307) = ~0.12299999999999998E4 +rem (~0.123E4, 0.11125369292536007E~307) = inf +* (~0.123E4, 0.5E~323) = ~0.6077E~320 ++ (~0.123E4, 0.5E~323) = ~0.123E4 +- (~0.123E4, 0.5E~323) = ~0.123E4 +/ (~0.123E4, 0.5E~323) = ~inf +nextAfter (~0.123E4, 0.5E~323) = ~0.12299999999999998E4 +rem (~0.123E4, 0.5E~323) = inf +* (~0.123E4, 0.0) = ~0.0 ++ (~0.123E4, 0.0) = ~0.123E4 +- (~0.123E4, 0.0) = ~0.123E4 +/ (~0.123E4, 0.0) = ~inf +nextAfter (~0.123E4, 0.0) = ~0.12299999999999998E4 +rem (~0.123E4, 0.0) = nan +* (~0.123E4, ~0.17976931348623157E309) = inf ++ (~0.123E4, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E4, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E4, ~0.17976931348623157E309) = 0.6842102114909646E~305 +nextAfter (~0.123E4, ~0.17976931348623157E309) = ~0.12300000000000002E4 +rem (~0.123E4, ~0.17976931348623157E309) = ~0.123E4 +* (~0.123E4, ~0.8988465674311579E308) = inf ++ (~0.123E4, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E4, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E4, ~0.8988465674311579E308) = 0.1368420422981929E~304 +nextAfter (~0.123E4, ~0.8988465674311579E308) = ~0.12300000000000002E4 +rem (~0.123E4, ~0.8988465674311579E308) = ~0.123E4 +* (~0.123E4, ~0.123E4) = 0.15129E7 ++ (~0.123E4, ~0.123E4) = ~0.246E4 +- (~0.123E4, ~0.123E4) = 0.0 +/ (~0.123E4, ~0.123E4) = 0.1E1 +nextAfter (~0.123E4, ~0.123E4) = ~0.123E4 +rem (~0.123E4, ~0.123E4) = 0.0 +* (~0.123E4, ~0.123E2) = 0.15129E5 ++ (~0.123E4, ~0.123E2) = ~0.12423E4 +- (~0.123E4, ~0.123E2) = ~0.12177E4 +/ (~0.123E4, ~0.123E2) = 0.1E3 +nextAfter (~0.123E4, ~0.123E2) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E2) = 0.0 +* (~0.123E4, ~0.3141592653589793E1) = 0.38641589639154454E4 ++ (~0.123E4, ~0.3141592653589793E1) = ~0.123314159265359E4 +- (~0.123E4, ~0.3141592653589793E1) = ~0.122685840734641E4 +/ (~0.123E4, ~0.3141592653589793E1) = 0.39152116000606253E3 +nextAfter (~0.123E4, ~0.3141592653589793E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.3141592653589793E1) = ~0.16372724463908526E1 +* (~0.123E4, ~0.2718281828459045E1) = 0.33434866490046256E4 ++ (~0.123E4, ~0.2718281828459045E1) = ~0.1232718281828459E4 +- (~0.123E4, ~0.2718281828459045E1) = ~0.1227281718171541E4 +/ (~0.123E4, ~0.2718281828459045E1) = 0.4524917126408741E3 +nextAfter (~0.123E4, ~0.2718281828459045E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.2718281828459045E1) = ~0.13366135365115497E1 +* (~0.123E4, ~0.123E1) = 0.15129E4 ++ (~0.123E4, ~0.123E1) = ~0.123123E4 +- (~0.123E4, ~0.123E1) = ~0.122877E4 +/ (~0.123E4, ~0.123E1) = 0.1E4 +nextAfter (~0.123E4, ~0.123E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E1) = 0.0 +* (~0.123E4, ~0.123) = 0.15129E3 ++ (~0.123E4, ~0.123) = ~0.1230123E4 +- (~0.123E4, ~0.123) = ~0.1229877E4 +/ (~0.123E4, ~0.123) = 0.1E5 +nextAfter (~0.123E4, ~0.123) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123) = 0.0 +* (~0.123E4, ~0.123E~2) = 0.15129E1 ++ (~0.123E4, ~0.123E~2) = ~0.123000123E4 +- (~0.123E4, ~0.123E~2) = ~0.122999877E4 +/ (~0.123E4, ~0.123E~2) = 0.1E7 +nextAfter (~0.123E4, ~0.123E~2) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E~2) = 0.0 +* (~0.123E4, ~0.22250738585072014E~307) = 0.27368408459638577E~304 ++ (~0.123E4, ~0.22250738585072014E~307) = ~0.123E4 +- (~0.123E4, ~0.22250738585072014E~307) = ~0.123E4 +/ (~0.123E4, ~0.22250738585072014E~307) = inf +nextAfter (~0.123E4, ~0.22250738585072014E~307) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.22250738585072014E~307) = inf +* (~0.123E4, ~0.11125369292536007E~307) = 0.13684204229819289E~304 ++ (~0.123E4, ~0.11125369292536007E~307) = ~0.123E4 +- (~0.123E4, ~0.11125369292536007E~307) = ~0.123E4 +/ (~0.123E4, ~0.11125369292536007E~307) = inf +nextAfter (~0.123E4, ~0.11125369292536007E~307) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.11125369292536007E~307) = inf +* (~0.123E4, ~0.5E~323) = 0.6077E~320 ++ (~0.123E4, ~0.5E~323) = ~0.123E4 +- (~0.123E4, ~0.5E~323) = ~0.123E4 +/ (~0.123E4, ~0.5E~323) = inf +nextAfter (~0.123E4, ~0.5E~323) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.5E~323) = inf +* (~0.123E4, ~0.0) = 0.0 ++ (~0.123E4, ~0.0) = ~0.123E4 +- (~0.123E4, ~0.0) = ~0.123E4 +/ (~0.123E4, ~0.0) = inf +nextAfter (~0.123E4, ~0.0) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.0) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999999999998E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E4, ~inf) = inf ++ (~0.123E4, ~inf) = ~inf +- (~0.123E4, ~inf) = inf +/ (~0.123E4, ~inf) = 0.0 +nextAfter (~0.123E4, ~inf) = ~0.12300000000000002E4 +rem (~0.123E4, ~inf) = ~0.123E4 +* (~0.123E4, nan) = nan ++ (~0.123E4, nan) = nan +- (~0.123E4, nan) = nan +/ (~0.123E4, nan) = nan +nextAfter (~0.123E4, nan) = nan +rem (~0.123E4, nan) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999999999998E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E2, 0.17976931348623157E309) = ~inf ++ (~0.123E2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E2, 0.17976931348623157E309) = ~0.6842102114909646E~307 +nextAfter (~0.123E2, 0.17976931348623157E309) = ~0.12299999999999999E2 +rem (~0.123E2, 0.17976931348623157E309) = ~0.123E2 +* (~0.123E2, 0.8988465674311579E308) = ~inf ++ (~0.123E2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E2, 0.8988465674311579E308) = ~0.13684204229819291E~306 +nextAfter (~0.123E2, 0.8988465674311579E308) = ~0.12299999999999999E2 +rem (~0.123E2, 0.8988465674311579E308) = ~0.123E2 +* (~0.123E2, 0.123E4) = ~0.15129E5 ++ (~0.123E2, 0.123E4) = 0.12177E4 +- (~0.123E2, 0.123E4) = ~0.12423E4 +/ (~0.123E2, 0.123E4) = ~0.1E~1 +nextAfter (~0.123E2, 0.123E4) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E4) = ~0.123E2 +* (~0.123E2, 0.123E2) = ~0.15129000000000002E3 ++ (~0.123E2, 0.123E2) = 0.0 +- (~0.123E2, 0.123E2) = ~0.246E2 +/ (~0.123E2, 0.123E2) = ~0.1E1 +nextAfter (~0.123E2, 0.123E2) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E2) = 0.0 +* (~0.123E2, 0.3141592653589793E1) = ~0.3864158963915446E2 ++ (~0.123E2, 0.3141592653589793E1) = ~0.9158407346410208E1 +- (~0.123E2, 0.3141592653589793E1) = ~0.15441592653589794E2 +/ (~0.123E2, 0.3141592653589793E1) = ~0.3915211600060626E1 +nextAfter (~0.123E2, 0.3141592653589793E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.3141592653589793E1) = ~0.28752220392306214E1 +* (~0.123E2, 0.2718281828459045E1) = ~0.33434866490046254E2 ++ (~0.123E2, 0.2718281828459045E1) = ~0.9581718171540956E1 +- (~0.123E2, 0.2718281828459045E1) = ~0.15018281828459045E2 +/ (~0.123E2, 0.2718281828459045E1) = ~0.4524917126408741E1 +nextAfter (~0.123E2, 0.2718281828459045E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.2718281828459045E1) = ~0.14268726861638203E1 +* (~0.123E2, 0.123E1) = ~0.15129000000000001E2 ++ (~0.123E2, 0.123E1) = ~0.1107E2 +- (~0.123E2, 0.123E1) = ~0.13530000000000001E2 +/ (~0.123E2, 0.123E1) = ~0.1E2 +nextAfter (~0.123E2, 0.123E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E1) = 0.0 +* (~0.123E2, 0.123) = ~0.15129000000000001E1 ++ (~0.123E2, 0.123) = ~0.12177000000000001E2 +- (~0.123E2, 0.123) = ~0.12423E2 +/ (~0.123E2, 0.123) = ~0.10000000000000001E3 +nextAfter (~0.123E2, 0.123) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123) = 0.0 +* (~0.123E2, 0.123E~2) = ~0.15129E~1 ++ (~0.123E2, 0.123E~2) = ~0.12298770000000001E2 +- (~0.123E2, 0.123E~2) = ~0.1230123E2 +/ (~0.123E2, 0.123E~2) = ~0.1E5 +nextAfter (~0.123E2, 0.123E~2) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E~2) = ~0.17763568394002505E~14 +* (~0.123E2, 0.22250738585072014E~307) = ~0.2736840845963858E~306 ++ (~0.123E2, 0.22250738585072014E~307) = ~0.123E2 +- (~0.123E2, 0.22250738585072014E~307) = ~0.123E2 +/ (~0.123E2, 0.22250738585072014E~307) = ~inf +nextAfter (~0.123E2, 0.22250738585072014E~307) = ~0.12299999999999999E2 +rem (~0.123E2, 0.22250738585072014E~307) = inf +* (~0.123E2, 0.11125369292536007E~307) = ~0.1368420422981929E~306 ++ (~0.123E2, 0.11125369292536007E~307) = ~0.123E2 +- (~0.123E2, 0.11125369292536007E~307) = ~0.123E2 +/ (~0.123E2, 0.11125369292536007E~307) = ~inf +nextAfter (~0.123E2, 0.11125369292536007E~307) = ~0.12299999999999999E2 +rem (~0.123E2, 0.11125369292536007E~307) = inf +* (~0.123E2, 0.5E~323) = ~0.6E~322 ++ (~0.123E2, 0.5E~323) = ~0.123E2 +- (~0.123E2, 0.5E~323) = ~0.123E2 +/ (~0.123E2, 0.5E~323) = ~inf +nextAfter (~0.123E2, 0.5E~323) = ~0.12299999999999999E2 +rem (~0.123E2, 0.5E~323) = inf +* (~0.123E2, 0.0) = ~0.0 ++ (~0.123E2, 0.0) = ~0.123E2 +- (~0.123E2, 0.0) = ~0.123E2 +/ (~0.123E2, 0.0) = ~inf +nextAfter (~0.123E2, 0.0) = ~0.12299999999999999E2 +rem (~0.123E2, 0.0) = nan +* (~0.123E2, ~0.17976931348623157E309) = inf ++ (~0.123E2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E2, ~0.17976931348623157E309) = 0.6842102114909646E~307 +nextAfter (~0.123E2, ~0.17976931348623157E309) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.17976931348623157E309) = ~0.123E2 +* (~0.123E2, ~0.8988465674311579E308) = inf ++ (~0.123E2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E2, ~0.8988465674311579E308) = 0.13684204229819291E~306 +nextAfter (~0.123E2, ~0.8988465674311579E308) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.8988465674311579E308) = ~0.123E2 +* (~0.123E2, ~0.123E4) = 0.15129E5 ++ (~0.123E2, ~0.123E4) = ~0.12423E4 +- (~0.123E2, ~0.123E4) = 0.12177E4 +/ (~0.123E2, ~0.123E4) = 0.1E~1 +nextAfter (~0.123E2, ~0.123E4) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.123E4) = ~0.123E2 +* (~0.123E2, ~0.123E2) = 0.15129000000000002E3 ++ (~0.123E2, ~0.123E2) = ~0.246E2 +- (~0.123E2, ~0.123E2) = 0.0 +/ (~0.123E2, ~0.123E2) = 0.1E1 +nextAfter (~0.123E2, ~0.123E2) = ~0.123E2 +rem (~0.123E2, ~0.123E2) = 0.0 +* (~0.123E2, ~0.3141592653589793E1) = 0.3864158963915446E2 ++ (~0.123E2, ~0.3141592653589793E1) = ~0.15441592653589794E2 +- (~0.123E2, ~0.3141592653589793E1) = ~0.9158407346410208E1 +/ (~0.123E2, ~0.3141592653589793E1) = 0.3915211600060626E1 +nextAfter (~0.123E2, ~0.3141592653589793E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.3141592653589793E1) = ~0.28752220392306214E1 +* (~0.123E2, ~0.2718281828459045E1) = 0.33434866490046254E2 ++ (~0.123E2, ~0.2718281828459045E1) = ~0.15018281828459045E2 +- (~0.123E2, ~0.2718281828459045E1) = ~0.9581718171540956E1 +/ (~0.123E2, ~0.2718281828459045E1) = 0.4524917126408741E1 +nextAfter (~0.123E2, ~0.2718281828459045E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.2718281828459045E1) = ~0.14268726861638203E1 +* (~0.123E2, ~0.123E1) = 0.15129000000000001E2 ++ (~0.123E2, ~0.123E1) = ~0.13530000000000001E2 +- (~0.123E2, ~0.123E1) = ~0.1107E2 +/ (~0.123E2, ~0.123E1) = 0.1E2 +nextAfter (~0.123E2, ~0.123E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123E1) = 0.0 +* (~0.123E2, ~0.123) = 0.15129000000000001E1 ++ (~0.123E2, ~0.123) = ~0.12423E2 +- (~0.123E2, ~0.123) = ~0.12177000000000001E2 +/ (~0.123E2, ~0.123) = 0.10000000000000001E3 +nextAfter (~0.123E2, ~0.123) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123) = 0.0 +* (~0.123E2, ~0.123E~2) = 0.15129E~1 ++ (~0.123E2, ~0.123E~2) = ~0.1230123E2 +- (~0.123E2, ~0.123E~2) = ~0.12298770000000001E2 +/ (~0.123E2, ~0.123E~2) = 0.1E5 +nextAfter (~0.123E2, ~0.123E~2) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123E~2) = ~0.17763568394002505E~14 +* (~0.123E2, ~0.22250738585072014E~307) = 0.2736840845963858E~306 ++ (~0.123E2, ~0.22250738585072014E~307) = ~0.123E2 +- (~0.123E2, ~0.22250738585072014E~307) = ~0.123E2 +/ (~0.123E2, ~0.22250738585072014E~307) = inf +nextAfter (~0.123E2, ~0.22250738585072014E~307) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.22250738585072014E~307) = inf +* (~0.123E2, ~0.11125369292536007E~307) = 0.1368420422981929E~306 ++ (~0.123E2, ~0.11125369292536007E~307) = ~0.123E2 +- (~0.123E2, ~0.11125369292536007E~307) = ~0.123E2 +/ (~0.123E2, ~0.11125369292536007E~307) = inf +nextAfter (~0.123E2, ~0.11125369292536007E~307) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.11125369292536007E~307) = inf +* (~0.123E2, ~0.5E~323) = 0.6E~322 ++ (~0.123E2, ~0.5E~323) = ~0.123E2 +- (~0.123E2, ~0.5E~323) = ~0.123E2 +/ (~0.123E2, ~0.5E~323) = inf +nextAfter (~0.123E2, ~0.5E~323) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.5E~323) = inf +* (~0.123E2, ~0.0) = 0.0 ++ (~0.123E2, ~0.0) = ~0.123E2 +- (~0.123E2, ~0.0) = ~0.123E2 +/ (~0.123E2, ~0.0) = inf +nextAfter (~0.123E2, ~0.0) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.0) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999999999999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.123E2, ~inf) = inf ++ (~0.123E2, ~inf) = ~inf +- (~0.123E2, ~inf) = inf +/ (~0.123E2, ~inf) = 0.0 +nextAfter (~0.123E2, ~inf) = ~0.12300000000000002E2 +rem (~0.123E2, ~inf) = ~0.123E2 +* (~0.123E2, nan) = nan ++ (~0.123E2, nan) = nan +- (~0.123E2, nan) = nan +/ (~0.123E2, nan) = nan +nextAfter (~0.123E2, nan) = nan +rem (~0.123E2, nan) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999999999999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.3141592653589793E1, 0.17976931348623157E309) = ~inf ++ (~0.3141592653589793E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.17475689218952297E~307 +nextAfter (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.8988465674311579E308) = ~inf ++ (~0.3141592653589793E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.349513784379046E~307 +nextAfter (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.123E4) = ~0.38641589639154454E4 ++ (~0.3141592653589793E1, 0.123E4) = 0.122685840734641E4 +- (~0.3141592653589793E1, 0.123E4) = ~0.123314159265359E4 +/ (~0.3141592653589793E1, 0.123E4) = ~0.25541403687721893E~2 +nextAfter (~0.3141592653589793E1, 0.123E4) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E4) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.123E2) = ~0.3864158963915446E2 ++ (~0.3141592653589793E1, 0.123E2) = 0.9158407346410208E1 +- (~0.3141592653589793E1, 0.123E2) = ~0.15441592653589794E2 +/ (~0.3141592653589793E1, 0.123E2) = ~0.2554140368772189 +nextAfter (~0.3141592653589793E1, 0.123E2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E2) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.9869604401089358E1 ++ (~0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +- (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.6283185307179586E1 +/ (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.1E1 +nextAfter (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +* (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.8539734222673566E1 ++ (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.423310825130748 +- (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.5859874482048838E1 +/ (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.11557273497909217E1 +nextAfter (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.423310825130748 +* (~0.3141592653589793E1, 0.123E1) = ~0.38641589639154454E1 ++ (~0.3141592653589793E1, 0.123E1) = ~0.19115926535897931E1 +- (~0.3141592653589793E1, 0.123E1) = ~0.43715926535897935E1 +/ (~0.3141592653589793E1, 0.123E1) = ~0.25541403687721895E1 +nextAfter (~0.3141592653589793E1, 0.123E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E1) = ~0.6815926535897932 +* (~0.3141592653589793E1, 0.123) = ~0.38641589639154456 ++ (~0.3141592653589793E1, 0.123) = ~0.3018592653589793E1 +- (~0.3141592653589793E1, 0.123) = ~0.32645926535897933E1 +/ (~0.3141592653589793E1, 0.123) = ~0.25541403687721896E2 +nextAfter (~0.3141592653589793E1, 0.123) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123) = ~0.6659265358979294E~1 +* (~0.3141592653589793E1, 0.123E~2) = ~0.38641589639154456E~2 ++ (~0.3141592653589793E1, 0.123E~2) = ~0.3140362653589793E1 +- (~0.3141592653589793E1, 0.123E~2) = ~0.3142822653589793E1 +/ (~0.3141592653589793E1, 0.123E~2) = ~0.25541403687721895E4 +nextAfter (~0.3141592653589793E1, 0.123E~2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E~2) = ~0.17265358979301482E~3 +* (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.6990275687580919E~307 ++ (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.14119048864730642E309 +nextAfter (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.22250738585072014E~307) = 0.0 +* (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.34951378437904593E~307 ++ (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.11125369292536007E~307) = ~inf +nextAfter (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.11125369292536007E~307) = inf +* (~0.3141592653589793E1, 0.5E~323) = ~0.15E~322 ++ (~0.3141592653589793E1, 0.5E~323) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.5E~323) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.5E~323) = ~inf +nextAfter (~0.3141592653589793E1, 0.5E~323) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.5E~323) = inf +* (~0.3141592653589793E1, 0.0) = ~0.0 ++ (~0.3141592653589793E1, 0.0) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.0) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.0) = ~inf +nextAfter (~0.3141592653589793E1, 0.0) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.0) = nan +* (~0.3141592653589793E1, ~0.17976931348623157E309) = inf ++ (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.3141592653589793E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.3141592653589793E1, ~0.17976931348623157E309) = 0.17475689218952297E~307 +nextAfter (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.8988465674311579E308) = inf ++ (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.3141592653589793E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.3141592653589793E1, ~0.8988465674311579E308) = 0.349513784379046E~307 +nextAfter (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.123E4) = 0.38641589639154454E4 ++ (~0.3141592653589793E1, ~0.123E4) = ~0.123314159265359E4 +- (~0.3141592653589793E1, ~0.123E4) = 0.122685840734641E4 +/ (~0.3141592653589793E1, ~0.123E4) = 0.25541403687721893E~2 +nextAfter (~0.3141592653589793E1, ~0.123E4) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.123E4) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.123E2) = 0.3864158963915446E2 ++ (~0.3141592653589793E1, ~0.123E2) = ~0.15441592653589794E2 +- (~0.3141592653589793E1, ~0.123E2) = 0.9158407346410208E1 +/ (~0.3141592653589793E1, ~0.123E2) = 0.2554140368772189 +nextAfter (~0.3141592653589793E1, ~0.123E2) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.123E2) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.9869604401089358E1 ++ (~0.3141592653589793E1, ~0.3141592653589793E1) = ~0.6283185307179586E1 +- (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +/ (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.1E1 +nextAfter (~0.3141592653589793E1, ~0.3141592653589793E1) = ~0.3141592653589793E1 +rem (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +* (~0.3141592653589793E1, ~0.2718281828459045E1) = 0.8539734222673566E1 ++ (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.5859874482048838E1 +- (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.423310825130748 +/ (~0.3141592653589793E1, ~0.2718281828459045E1) = 0.11557273497909217E1 +nextAfter (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.423310825130748 +* (~0.3141592653589793E1, ~0.123E1) = 0.38641589639154454E1 ++ (~0.3141592653589793E1, ~0.123E1) = ~0.43715926535897935E1 +- (~0.3141592653589793E1, ~0.123E1) = ~0.19115926535897931E1 +/ (~0.3141592653589793E1, ~0.123E1) = 0.25541403687721895E1 +nextAfter (~0.3141592653589793E1, ~0.123E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123E1) = ~0.6815926535897932 +* (~0.3141592653589793E1, ~0.123) = 0.38641589639154456 ++ (~0.3141592653589793E1, ~0.123) = ~0.32645926535897933E1 +- (~0.3141592653589793E1, ~0.123) = ~0.3018592653589793E1 +/ (~0.3141592653589793E1, ~0.123) = 0.25541403687721896E2 +nextAfter (~0.3141592653589793E1, ~0.123) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123) = ~0.6659265358979294E~1 +* (~0.3141592653589793E1, ~0.123E~2) = 0.38641589639154456E~2 ++ (~0.3141592653589793E1, ~0.123E~2) = ~0.3142822653589793E1 +- (~0.3141592653589793E1, ~0.123E~2) = ~0.3140362653589793E1 +/ (~0.3141592653589793E1, ~0.123E~2) = 0.25541403687721895E4 +nextAfter (~0.3141592653589793E1, ~0.123E~2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123E~2) = ~0.17265358979301482E~3 +* (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.6990275687580919E~307 ++ (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.14119048864730642E309 +nextAfter (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.0 +* (~0.3141592653589793E1, ~0.11125369292536007E~307) = 0.34951378437904593E~307 ++ (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.11125369292536007E~307) = inf +nextAfter (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.11125369292536007E~307) = inf +* (~0.3141592653589793E1, ~0.5E~323) = 0.15E~322 ++ (~0.3141592653589793E1, ~0.5E~323) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.5E~323) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.5E~323) = inf +nextAfter (~0.3141592653589793E1, ~0.5E~323) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.5E~323) = inf +* (~0.3141592653589793E1, ~0.0) = 0.0 ++ (~0.3141592653589793E1, ~0.0) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.0) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.0) = inf +nextAfter (~0.3141592653589793E1, ~0.0) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.0) = nan +* (~0.3141592653589793E1, inf) = ~inf ++ (~0.3141592653589793E1, inf) = inf +- (~0.3141592653589793E1, inf) = ~inf +/ (~0.3141592653589793E1, inf) = ~0.0 +nextAfter (~0.3141592653589793E1, inf) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, inf) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~inf) = inf ++ (~0.3141592653589793E1, ~inf) = ~inf +- (~0.3141592653589793E1, ~inf) = inf +/ (~0.3141592653589793E1, ~inf) = 0.0 +nextAfter (~0.3141592653589793E1, ~inf) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~inf) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, nan) = nan ++ (~0.3141592653589793E1, nan) = nan +- (~0.3141592653589793E1, nan) = nan +/ (~0.3141592653589793E1, nan) = nan +nextAfter (~0.3141592653589793E1, nan) = nan +rem (~0.3141592653589793E1, nan) = nan +* (~0.3141592653589793E1, inf) = ~inf ++ (~0.3141592653589793E1, inf) = inf +- (~0.3141592653589793E1, inf) = ~inf +/ (~0.3141592653589793E1, inf) = ~0.0 +nextAfter (~0.3141592653589793E1, inf) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, inf) = ~0.3141592653589793E1 +* (~0.2718281828459045E1, 0.17976931348623157E309) = ~inf ++ (~0.2718281828459045E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.15120944591398447E~307 +nextAfter (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.8988465674311579E308) = ~inf ++ (~0.2718281828459045E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.30241889182796895E~307 +nextAfter (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.123E4) = ~0.33434866490046256E4 ++ (~0.2718281828459045E1, 0.123E4) = 0.1227281718171541E4 +- (~0.2718281828459045E1, 0.123E4) = ~0.1232718281828459E4 +/ (~0.2718281828459045E1, 0.123E4) = ~0.22099852263894678E~2 +nextAfter (~0.2718281828459045E1, 0.123E4) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E4) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.123E2) = ~0.33434866490046254E2 ++ (~0.2718281828459045E1, 0.123E2) = 0.9581718171540956E1 +- (~0.2718281828459045E1, 0.123E2) = ~0.15018281828459045E2 +/ (~0.2718281828459045E1, 0.123E2) = ~0.22099852263894673 +nextAfter (~0.2718281828459045E1, 0.123E2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E2) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.8539734222673566E1 ++ (~0.2718281828459045E1, 0.3141592653589793E1) = 0.423310825130748 +- (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.5859874482048838E1 +/ (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.8652559794322651 +nextAfter (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.73890560989306495E1 ++ (~0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +- (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.543656365691809E1 +/ (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.1E1 +nextAfter (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +* (~0.2718281828459045E1, 0.123E1) = ~0.33434866490046256E1 ++ (~0.2718281828459045E1, 0.123E1) = ~0.1488281828459045E1 +- (~0.2718281828459045E1, 0.123E1) = ~0.3948281828459045E1 +/ (~0.2718281828459045E1, 0.123E1) = ~0.22099852263894677E1 +nextAfter (~0.2718281828459045E1, 0.123E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E1) = ~0.2582818284590451 +* (~0.2718281828459045E1, 0.123) = ~0.33434866490046256 ++ (~0.2718281828459045E1, 0.123) = ~0.25952818284590453E1 +- (~0.2718281828459045E1, 0.123) = ~0.2841281828459045E1 +/ (~0.2718281828459045E1, 0.123) = ~0.22099852263894675E2 +nextAfter (~0.2718281828459045E1, 0.123) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123) = ~0.1228182845904513E~1 +* (~0.2718281828459045E1, 0.123E~2) = ~0.33434866490046253E~2 ++ (~0.2718281828459045E1, 0.123E~2) = ~0.2717051828459045E1 +- (~0.2718281828459045E1, 0.123E~2) = ~0.2719511828459045E1 +/ (~0.2718281828459045E1, 0.123E~2) = ~0.22099852263894677E4 +nextAfter (~0.2718281828459045E1, 0.123E~2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E~2) = ~0.12118284590449946E~2 +* (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.6048377836559378E~307 ++ (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.12216591454104522E309 +nextAfter (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.22250738585072014E~307) = 0.0 +* (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.3024188918279689E~307 ++ (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.11125369292536007E~307) = ~inf +nextAfter (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.11125369292536007E~307) = inf +* (~0.2718281828459045E1, 0.5E~323) = ~0.15E~322 ++ (~0.2718281828459045E1, 0.5E~323) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.5E~323) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.5E~323) = ~inf +nextAfter (~0.2718281828459045E1, 0.5E~323) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.5E~323) = inf +* (~0.2718281828459045E1, 0.0) = ~0.0 ++ (~0.2718281828459045E1, 0.0) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.0) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.0) = ~inf +nextAfter (~0.2718281828459045E1, 0.0) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.0) = nan +* (~0.2718281828459045E1, ~0.17976931348623157E309) = inf ++ (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.2718281828459045E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.2718281828459045E1, ~0.17976931348623157E309) = 0.15120944591398447E~307 +nextAfter (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.8988465674311579E308) = inf ++ (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.2718281828459045E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.2718281828459045E1, ~0.8988465674311579E308) = 0.30241889182796895E~307 +nextAfter (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.123E4) = 0.33434866490046256E4 ++ (~0.2718281828459045E1, ~0.123E4) = ~0.1232718281828459E4 +- (~0.2718281828459045E1, ~0.123E4) = 0.1227281718171541E4 +/ (~0.2718281828459045E1, ~0.123E4) = 0.22099852263894678E~2 +nextAfter (~0.2718281828459045E1, ~0.123E4) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.123E4) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.123E2) = 0.33434866490046254E2 ++ (~0.2718281828459045E1, ~0.123E2) = ~0.15018281828459045E2 +- (~0.2718281828459045E1, ~0.123E2) = 0.9581718171540956E1 +/ (~0.2718281828459045E1, ~0.123E2) = 0.22099852263894673 +nextAfter (~0.2718281828459045E1, ~0.123E2) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.123E2) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.8539734222673566E1 ++ (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.5859874482048838E1 +- (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.423310825130748 +/ (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.8652559794322651 +nextAfter (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.73890560989306495E1 ++ (~0.2718281828459045E1, ~0.2718281828459045E1) = ~0.543656365691809E1 +- (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +/ (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.1E1 +nextAfter (~0.2718281828459045E1, ~0.2718281828459045E1) = ~0.2718281828459045E1 +rem (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +* (~0.2718281828459045E1, ~0.123E1) = 0.33434866490046256E1 ++ (~0.2718281828459045E1, ~0.123E1) = ~0.3948281828459045E1 +- (~0.2718281828459045E1, ~0.123E1) = ~0.1488281828459045E1 +/ (~0.2718281828459045E1, ~0.123E1) = 0.22099852263894677E1 +nextAfter (~0.2718281828459045E1, ~0.123E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123E1) = ~0.2582818284590451 +* (~0.2718281828459045E1, ~0.123) = 0.33434866490046256 ++ (~0.2718281828459045E1, ~0.123) = ~0.2841281828459045E1 +- (~0.2718281828459045E1, ~0.123) = ~0.25952818284590453E1 +/ (~0.2718281828459045E1, ~0.123) = 0.22099852263894675E2 +nextAfter (~0.2718281828459045E1, ~0.123) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123) = ~0.1228182845904513E~1 +* (~0.2718281828459045E1, ~0.123E~2) = 0.33434866490046253E~2 ++ (~0.2718281828459045E1, ~0.123E~2) = ~0.2719511828459045E1 +- (~0.2718281828459045E1, ~0.123E~2) = ~0.2717051828459045E1 +/ (~0.2718281828459045E1, ~0.123E~2) = 0.22099852263894677E4 +nextAfter (~0.2718281828459045E1, ~0.123E~2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123E~2) = ~0.12118284590449946E~2 +* (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.6048377836559378E~307 ++ (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.12216591454104522E309 +nextAfter (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.0 +* (~0.2718281828459045E1, ~0.11125369292536007E~307) = 0.3024188918279689E~307 ++ (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.11125369292536007E~307) = inf +nextAfter (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.11125369292536007E~307) = inf +* (~0.2718281828459045E1, ~0.5E~323) = 0.15E~322 ++ (~0.2718281828459045E1, ~0.5E~323) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.5E~323) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.5E~323) = inf +nextAfter (~0.2718281828459045E1, ~0.5E~323) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.5E~323) = inf +* (~0.2718281828459045E1, ~0.0) = 0.0 ++ (~0.2718281828459045E1, ~0.0) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.0) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.0) = inf +nextAfter (~0.2718281828459045E1, ~0.0) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.0) = nan +* (~0.2718281828459045E1, inf) = ~inf ++ (~0.2718281828459045E1, inf) = inf +- (~0.2718281828459045E1, inf) = ~inf +/ (~0.2718281828459045E1, inf) = ~0.0 +nextAfter (~0.2718281828459045E1, inf) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, inf) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~inf) = inf ++ (~0.2718281828459045E1, ~inf) = ~inf +- (~0.2718281828459045E1, ~inf) = inf +/ (~0.2718281828459045E1, ~inf) = 0.0 +nextAfter (~0.2718281828459045E1, ~inf) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~inf) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, nan) = nan ++ (~0.2718281828459045E1, nan) = nan +- (~0.2718281828459045E1, nan) = nan +/ (~0.2718281828459045E1, nan) = nan +nextAfter (~0.2718281828459045E1, nan) = nan +rem (~0.2718281828459045E1, nan) = nan +* (~0.2718281828459045E1, inf) = ~inf ++ (~0.2718281828459045E1, inf) = inf +- (~0.2718281828459045E1, inf) = ~inf +/ (~0.2718281828459045E1, inf) = ~0.0 +nextAfter (~0.2718281828459045E1, inf) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, inf) = ~0.2718281828459045E1 +* (~0.123E1, 0.17976931348623157E309) = ~inf ++ (~0.123E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E1, 0.17976931348623157E309) = ~0.6842102114909647E~308 +nextAfter (~0.123E1, 0.17976931348623157E309) = ~0.12299999999999998E1 +rem (~0.123E1, 0.17976931348623157E309) = ~0.123E1 +* (~0.123E1, 0.8988465674311579E308) = ~0.1105581277940324E309 ++ (~0.123E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E1, 0.8988465674311579E308) = ~0.1368420422981929E~307 +nextAfter (~0.123E1, 0.8988465674311579E308) = ~0.12299999999999998E1 +rem (~0.123E1, 0.8988465674311579E308) = ~0.123E1 +* (~0.123E1, 0.123E4) = ~0.15129E4 ++ (~0.123E1, 0.123E4) = 0.122877E4 +- (~0.123E1, 0.123E4) = ~0.123123E4 +/ (~0.123E1, 0.123E4) = ~0.1E~2 +nextAfter (~0.123E1, 0.123E4) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E4) = ~0.123E1 +* (~0.123E1, 0.123E2) = ~0.15129000000000001E2 ++ (~0.123E1, 0.123E2) = 0.1107E2 +- (~0.123E1, 0.123E2) = ~0.13530000000000001E2 +/ (~0.123E1, 0.123E2) = ~0.9999999999999999E~1 +nextAfter (~0.123E1, 0.123E2) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E2) = ~0.123E1 +* (~0.123E1, 0.3141592653589793E1) = ~0.38641589639154454E1 ++ (~0.123E1, 0.3141592653589793E1) = 0.19115926535897931E1 +- (~0.123E1, 0.3141592653589793E1) = ~0.43715926535897935E1 +/ (~0.123E1, 0.3141592653589793E1) = ~0.3915211600060625 +nextAfter (~0.123E1, 0.3141592653589793E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.3141592653589793E1) = ~0.123E1 +* (~0.123E1, 0.2718281828459045E1) = ~0.33434866490046256E1 ++ (~0.123E1, 0.2718281828459045E1) = 0.1488281828459045E1 +- (~0.123E1, 0.2718281828459045E1) = ~0.3948281828459045E1 +/ (~0.123E1, 0.2718281828459045E1) = ~0.45249171264087407 +nextAfter (~0.123E1, 0.2718281828459045E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.2718281828459045E1) = ~0.123E1 +* (~0.123E1, 0.123E1) = ~0.15129E1 ++ (~0.123E1, 0.123E1) = 0.0 +- (~0.123E1, 0.123E1) = ~0.246E1 +/ (~0.123E1, 0.123E1) = ~0.1E1 +nextAfter (~0.123E1, 0.123E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E1) = 0.0 +* (~0.123E1, 0.123) = ~0.15129 ++ (~0.123E1, 0.123) = ~0.1107E1 +- (~0.123E1, 0.123) = ~0.1353E1 +/ (~0.123E1, 0.123) = ~0.1E2 +nextAfter (~0.123E1, 0.123) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123) = 0.0 +* (~0.123E1, 0.123E~2) = ~0.15129E~2 ++ (~0.123E1, 0.123E~2) = ~0.122877E1 +- (~0.123E1, 0.123E~2) = ~0.123123E1 +/ (~0.123E1, 0.123E~2) = ~0.1E4 +nextAfter (~0.123E1, 0.123E~2) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E~2) = 0.0 +* (~0.123E1, 0.22250738585072014E~307) = ~0.27368408459638577E~307 ++ (~0.123E1, 0.22250738585072014E~307) = ~0.123E1 +- (~0.123E1, 0.22250738585072014E~307) = ~0.123E1 +/ (~0.123E1, 0.22250738585072014E~307) = ~0.5527906389701621E308 +nextAfter (~0.123E1, 0.22250738585072014E~307) = ~0.12299999999999998E1 +rem (~0.123E1, 0.22250738585072014E~307) = 0.0 +* (~0.123E1, 0.11125369292536007E~307) = ~0.1368420422981929E~307 ++ (~0.123E1, 0.11125369292536007E~307) = ~0.123E1 +- (~0.123E1, 0.11125369292536007E~307) = ~0.123E1 +/ (~0.123E1, 0.11125369292536007E~307) = ~0.11055812779403243E309 +nextAfter (~0.123E1, 0.11125369292536007E~307) = ~0.12299999999999998E1 +rem (~0.123E1, 0.11125369292536007E~307) = 0.0 +* (~0.123E1, 0.5E~323) = ~0.5E~323 ++ (~0.123E1, 0.5E~323) = ~0.123E1 +- (~0.123E1, 0.5E~323) = ~0.123E1 +/ (~0.123E1, 0.5E~323) = ~inf +nextAfter (~0.123E1, 0.5E~323) = ~0.12299999999999998E1 +rem (~0.123E1, 0.5E~323) = inf +* (~0.123E1, 0.0) = ~0.0 ++ (~0.123E1, 0.0) = ~0.123E1 +- (~0.123E1, 0.0) = ~0.123E1 +/ (~0.123E1, 0.0) = ~inf +nextAfter (~0.123E1, 0.0) = ~0.12299999999999998E1 +rem (~0.123E1, 0.0) = nan +* (~0.123E1, ~0.17976931348623157E309) = inf ++ (~0.123E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E1, ~0.17976931348623157E309) = 0.6842102114909647E~308 +nextAfter (~0.123E1, ~0.17976931348623157E309) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.17976931348623157E309) = ~0.123E1 +* (~0.123E1, ~0.8988465674311579E308) = 0.1105581277940324E309 ++ (~0.123E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E1, ~0.8988465674311579E308) = 0.1368420422981929E~307 +nextAfter (~0.123E1, ~0.8988465674311579E308) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.8988465674311579E308) = ~0.123E1 +* (~0.123E1, ~0.123E4) = 0.15129E4 ++ (~0.123E1, ~0.123E4) = ~0.123123E4 +- (~0.123E1, ~0.123E4) = 0.122877E4 +/ (~0.123E1, ~0.123E4) = 0.1E~2 +nextAfter (~0.123E1, ~0.123E4) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.123E4) = ~0.123E1 +* (~0.123E1, ~0.123E2) = 0.15129000000000001E2 ++ (~0.123E1, ~0.123E2) = ~0.13530000000000001E2 +- (~0.123E1, ~0.123E2) = 0.1107E2 +/ (~0.123E1, ~0.123E2) = 0.9999999999999999E~1 +nextAfter (~0.123E1, ~0.123E2) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.123E2) = ~0.123E1 +* (~0.123E1, ~0.3141592653589793E1) = 0.38641589639154454E1 ++ (~0.123E1, ~0.3141592653589793E1) = ~0.43715926535897935E1 +- (~0.123E1, ~0.3141592653589793E1) = 0.19115926535897931E1 +/ (~0.123E1, ~0.3141592653589793E1) = 0.3915211600060625 +nextAfter (~0.123E1, ~0.3141592653589793E1) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.3141592653589793E1) = ~0.123E1 +* (~0.123E1, ~0.2718281828459045E1) = 0.33434866490046256E1 ++ (~0.123E1, ~0.2718281828459045E1) = ~0.3948281828459045E1 +- (~0.123E1, ~0.2718281828459045E1) = 0.1488281828459045E1 +/ (~0.123E1, ~0.2718281828459045E1) = 0.45249171264087407 +nextAfter (~0.123E1, ~0.2718281828459045E1) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.2718281828459045E1) = ~0.123E1 +* (~0.123E1, ~0.123E1) = 0.15129E1 ++ (~0.123E1, ~0.123E1) = ~0.246E1 +- (~0.123E1, ~0.123E1) = 0.0 +/ (~0.123E1, ~0.123E1) = 0.1E1 +nextAfter (~0.123E1, ~0.123E1) = ~0.123E1 +rem (~0.123E1, ~0.123E1) = 0.0 +* (~0.123E1, ~0.123) = 0.15129 ++ (~0.123E1, ~0.123) = ~0.1353E1 +- (~0.123E1, ~0.123) = ~0.1107E1 +/ (~0.123E1, ~0.123) = 0.1E2 +nextAfter (~0.123E1, ~0.123) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.123) = 0.0 +* (~0.123E1, ~0.123E~2) = 0.15129E~2 ++ (~0.123E1, ~0.123E~2) = ~0.123123E1 +- (~0.123E1, ~0.123E~2) = ~0.122877E1 +/ (~0.123E1, ~0.123E~2) = 0.1E4 +nextAfter (~0.123E1, ~0.123E~2) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.123E~2) = 0.0 +* (~0.123E1, ~0.22250738585072014E~307) = 0.27368408459638577E~307 ++ (~0.123E1, ~0.22250738585072014E~307) = ~0.123E1 +- (~0.123E1, ~0.22250738585072014E~307) = ~0.123E1 +/ (~0.123E1, ~0.22250738585072014E~307) = 0.5527906389701621E308 +nextAfter (~0.123E1, ~0.22250738585072014E~307) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.22250738585072014E~307) = 0.0 +* (~0.123E1, ~0.11125369292536007E~307) = 0.1368420422981929E~307 ++ (~0.123E1, ~0.11125369292536007E~307) = ~0.123E1 +- (~0.123E1, ~0.11125369292536007E~307) = ~0.123E1 +/ (~0.123E1, ~0.11125369292536007E~307) = 0.11055812779403243E309 +nextAfter (~0.123E1, ~0.11125369292536007E~307) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.11125369292536007E~307) = 0.0 +* (~0.123E1, ~0.5E~323) = 0.5E~323 ++ (~0.123E1, ~0.5E~323) = ~0.123E1 +- (~0.123E1, ~0.5E~323) = ~0.123E1 +/ (~0.123E1, ~0.5E~323) = inf +nextAfter (~0.123E1, ~0.5E~323) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.5E~323) = inf +* (~0.123E1, ~0.0) = 0.0 ++ (~0.123E1, ~0.0) = ~0.123E1 +- (~0.123E1, ~0.0) = ~0.123E1 +/ (~0.123E1, ~0.0) = inf +nextAfter (~0.123E1, ~0.0) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.0) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999999999998E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123E1, ~inf) = inf ++ (~0.123E1, ~inf) = ~inf +- (~0.123E1, ~inf) = inf +/ (~0.123E1, ~inf) = 0.0 +nextAfter (~0.123E1, ~inf) = ~0.12300000000000002E1 +rem (~0.123E1, ~inf) = ~0.123E1 +* (~0.123E1, nan) = nan ++ (~0.123E1, nan) = nan +- (~0.123E1, nan) = nan +/ (~0.123E1, nan) = nan +nextAfter (~0.123E1, nan) = nan +rem (~0.123E1, nan) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999999999998E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123, 0.17976931348623157E309) = ~0.22111625558806483E308 ++ (~0.123, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123, 0.17976931348623157E309) = ~0.684210211490966E~309 +nextAfter (~0.123, 0.17976931348623157E309) = ~0.12299999999999998 +rem (~0.123, 0.17976931348623157E309) = ~0.123 +* (~0.123, 0.8988465674311579E308) = ~0.11055812779403241E308 ++ (~0.123, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123, 0.8988465674311579E308) = ~0.136842042298193E~308 +nextAfter (~0.123, 0.8988465674311579E308) = ~0.12299999999999998 +rem (~0.123, 0.8988465674311579E308) = ~0.123 +* (~0.123, 0.123E4) = ~0.15129E3 ++ (~0.123, 0.123E4) = 0.1229877E4 +- (~0.123, 0.123E4) = ~0.1230123E4 +/ (~0.123, 0.123E4) = ~0.1E~3 +nextAfter (~0.123, 0.123E4) = ~0.12299999999999998 +rem (~0.123, 0.123E4) = ~0.123 +* (~0.123, 0.123E2) = ~0.15129000000000001E1 ++ (~0.123, 0.123E2) = 0.12177000000000001E2 +- (~0.123, 0.123E2) = ~0.12423E2 +/ (~0.123, 0.123E2) = ~0.9999999999999998E~2 +nextAfter (~0.123, 0.123E2) = ~0.12299999999999998 +rem (~0.123, 0.123E2) = ~0.123 +* (~0.123, 0.3141592653589793E1) = ~0.38641589639154456 ++ (~0.123, 0.3141592653589793E1) = 0.3018592653589793E1 +- (~0.123, 0.3141592653589793E1) = ~0.32645926535897933E1 +/ (~0.123, 0.3141592653589793E1) = ~0.3915211600060625E~1 +nextAfter (~0.123, 0.3141592653589793E1) = ~0.12299999999999998 +rem (~0.123, 0.3141592653589793E1) = ~0.123 +* (~0.123, 0.2718281828459045E1) = ~0.33434866490046256 ++ (~0.123, 0.2718281828459045E1) = 0.25952818284590453E1 +- (~0.123, 0.2718281828459045E1) = ~0.2841281828459045E1 +/ (~0.123, 0.2718281828459045E1) = ~0.4524917126408741E~1 +nextAfter (~0.123, 0.2718281828459045E1) = ~0.12299999999999998 +rem (~0.123, 0.2718281828459045E1) = ~0.123 +* (~0.123, 0.123E1) = ~0.15129 ++ (~0.123, 0.123E1) = 0.1107E1 +- (~0.123, 0.123E1) = ~0.1353E1 +/ (~0.123, 0.123E1) = ~0.1 +nextAfter (~0.123, 0.123E1) = ~0.12299999999999998 +rem (~0.123, 0.123E1) = ~0.123 +* (~0.123, 0.123) = ~0.15129E~1 ++ (~0.123, 0.123) = 0.0 +- (~0.123, 0.123) = ~0.246 +/ (~0.123, 0.123) = ~0.1E1 +nextAfter (~0.123, 0.123) = ~0.12299999999999998 +rem (~0.123, 0.123) = 0.0 +* (~0.123, 0.123E~2) = ~0.15129E~3 ++ (~0.123, 0.123E~2) = ~0.12177 +- (~0.123, 0.123E~2) = ~0.12423 +/ (~0.123, 0.123E~2) = ~0.1E3 +nextAfter (~0.123, 0.123E~2) = ~0.12299999999999998 +rem (~0.123, 0.123E~2) = 0.0 +* (~0.123, 0.22250738585072014E~307) = ~0.273684084596386E~308 ++ (~0.123, 0.22250738585072014E~307) = ~0.123 +- (~0.123, 0.22250738585072014E~307) = ~0.123 +/ (~0.123, 0.22250738585072014E~307) = ~0.55279063897016213E307 +nextAfter (~0.123, 0.22250738585072014E~307) = ~0.12299999999999998 +rem (~0.123, 0.22250738585072014E~307) = 0.0 +* (~0.123, 0.11125369292536007E~307) = ~0.136842042298193E~308 ++ (~0.123, 0.11125369292536007E~307) = ~0.123 +- (~0.123, 0.11125369292536007E~307) = ~0.123 +/ (~0.123, 0.11125369292536007E~307) = ~0.11055812779403243E308 +nextAfter (~0.123, 0.11125369292536007E~307) = ~0.12299999999999998 +rem (~0.123, 0.11125369292536007E~307) = 0.0 +* (~0.123, 0.5E~323) = ~0.0 ++ (~0.123, 0.5E~323) = ~0.123 +- (~0.123, 0.5E~323) = ~0.123 +/ (~0.123, 0.5E~323) = ~inf +nextAfter (~0.123, 0.5E~323) = ~0.12299999999999998 +rem (~0.123, 0.5E~323) = inf +* (~0.123, 0.0) = ~0.0 ++ (~0.123, 0.0) = ~0.123 +- (~0.123, 0.0) = ~0.123 +/ (~0.123, 0.0) = ~inf +nextAfter (~0.123, 0.0) = ~0.12299999999999998 +rem (~0.123, 0.0) = nan +* (~0.123, ~0.17976931348623157E309) = 0.22111625558806483E308 ++ (~0.123, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123, ~0.17976931348623157E309) = 0.684210211490966E~309 +nextAfter (~0.123, ~0.17976931348623157E309) = ~0.12300000000000001 +rem (~0.123, ~0.17976931348623157E309) = ~0.123 +* (~0.123, ~0.8988465674311579E308) = 0.11055812779403241E308 ++ (~0.123, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123, ~0.8988465674311579E308) = 0.136842042298193E~308 +nextAfter (~0.123, ~0.8988465674311579E308) = ~0.12300000000000001 +rem (~0.123, ~0.8988465674311579E308) = ~0.123 +* (~0.123, ~0.123E4) = 0.15129E3 ++ (~0.123, ~0.123E4) = ~0.1230123E4 +- (~0.123, ~0.123E4) = 0.1229877E4 +/ (~0.123, ~0.123E4) = 0.1E~3 +nextAfter (~0.123, ~0.123E4) = ~0.12300000000000001 +rem (~0.123, ~0.123E4) = ~0.123 +* (~0.123, ~0.123E2) = 0.15129000000000001E1 ++ (~0.123, ~0.123E2) = ~0.12423E2 +- (~0.123, ~0.123E2) = 0.12177000000000001E2 +/ (~0.123, ~0.123E2) = 0.9999999999999998E~2 +nextAfter (~0.123, ~0.123E2) = ~0.12300000000000001 +rem (~0.123, ~0.123E2) = ~0.123 +* (~0.123, ~0.3141592653589793E1) = 0.38641589639154456 ++ (~0.123, ~0.3141592653589793E1) = ~0.32645926535897933E1 +- (~0.123, ~0.3141592653589793E1) = 0.3018592653589793E1 +/ (~0.123, ~0.3141592653589793E1) = 0.3915211600060625E~1 +nextAfter (~0.123, ~0.3141592653589793E1) = ~0.12300000000000001 +rem (~0.123, ~0.3141592653589793E1) = ~0.123 +* (~0.123, ~0.2718281828459045E1) = 0.33434866490046256 ++ (~0.123, ~0.2718281828459045E1) = ~0.2841281828459045E1 +- (~0.123, ~0.2718281828459045E1) = 0.25952818284590453E1 +/ (~0.123, ~0.2718281828459045E1) = 0.4524917126408741E~1 +nextAfter (~0.123, ~0.2718281828459045E1) = ~0.12300000000000001 +rem (~0.123, ~0.2718281828459045E1) = ~0.123 +* (~0.123, ~0.123E1) = 0.15129 ++ (~0.123, ~0.123E1) = ~0.1353E1 +- (~0.123, ~0.123E1) = 0.1107E1 +/ (~0.123, ~0.123E1) = 0.1 +nextAfter (~0.123, ~0.123E1) = ~0.12300000000000001 +rem (~0.123, ~0.123E1) = ~0.123 +* (~0.123, ~0.123) = 0.15129E~1 ++ (~0.123, ~0.123) = ~0.246 +- (~0.123, ~0.123) = 0.0 +/ (~0.123, ~0.123) = 0.1E1 +nextAfter (~0.123, ~0.123) = ~0.123 +rem (~0.123, ~0.123) = 0.0 +* (~0.123, ~0.123E~2) = 0.15129E~3 ++ (~0.123, ~0.123E~2) = ~0.12423 +- (~0.123, ~0.123E~2) = ~0.12177 +/ (~0.123, ~0.123E~2) = 0.1E3 +nextAfter (~0.123, ~0.123E~2) = ~0.12299999999999998 +rem (~0.123, ~0.123E~2) = 0.0 +* (~0.123, ~0.22250738585072014E~307) = 0.273684084596386E~308 ++ (~0.123, ~0.22250738585072014E~307) = ~0.123 +- (~0.123, ~0.22250738585072014E~307) = ~0.123 +/ (~0.123, ~0.22250738585072014E~307) = 0.55279063897016213E307 +nextAfter (~0.123, ~0.22250738585072014E~307) = ~0.12299999999999998 +rem (~0.123, ~0.22250738585072014E~307) = 0.0 +* (~0.123, ~0.11125369292536007E~307) = 0.136842042298193E~308 ++ (~0.123, ~0.11125369292536007E~307) = ~0.123 +- (~0.123, ~0.11125369292536007E~307) = ~0.123 +/ (~0.123, ~0.11125369292536007E~307) = 0.11055812779403243E308 +nextAfter (~0.123, ~0.11125369292536007E~307) = ~0.12299999999999998 +rem (~0.123, ~0.11125369292536007E~307) = 0.0 +* (~0.123, ~0.5E~323) = 0.0 ++ (~0.123, ~0.5E~323) = ~0.123 +- (~0.123, ~0.5E~323) = ~0.123 +/ (~0.123, ~0.5E~323) = inf +nextAfter (~0.123, ~0.5E~323) = ~0.12299999999999998 +rem (~0.123, ~0.5E~323) = inf +* (~0.123, ~0.0) = 0.0 ++ (~0.123, ~0.0) = ~0.123 +- (~0.123, ~0.0) = ~0.123 +/ (~0.123, ~0.0) = inf +nextAfter (~0.123, ~0.0) = ~0.12299999999999998 +rem (~0.123, ~0.0) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.12299999999999998 +rem (~0.123, inf) = ~0.123 +* (~0.123, ~inf) = inf ++ (~0.123, ~inf) = ~inf +- (~0.123, ~inf) = inf +/ (~0.123, ~inf) = 0.0 +nextAfter (~0.123, ~inf) = ~0.12300000000000001 +rem (~0.123, ~inf) = ~0.123 +* (~0.123, nan) = nan ++ (~0.123, nan) = nan +- (~0.123, nan) = nan +/ (~0.123, nan) = nan +nextAfter (~0.123, nan) = nan +rem (~0.123, nan) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.12299999999999998 +rem (~0.123, inf) = ~0.123 +* (~0.123E~2, 0.17976931348623157E309) = ~0.2211162555880648E306 ++ (~0.123E~2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E~2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E~2, 0.17976931348623157E309) = ~0.684210211491E~311 +nextAfter (~0.123E~2, 0.17976931348623157E309) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.17976931348623157E309) = ~0.123E~2 +* (~0.123E~2, 0.8988465674311579E308) = ~0.1105581277940324E306 ++ (~0.123E~2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E~2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E~2, 0.8988465674311579E308) = ~0.1368420422982E~310 +nextAfter (~0.123E~2, 0.8988465674311579E308) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.8988465674311579E308) = ~0.123E~2 +* (~0.123E~2, 0.123E4) = ~0.15129E1 ++ (~0.123E~2, 0.123E4) = 0.122999877E4 +- (~0.123E~2, 0.123E4) = ~0.123000123E4 +/ (~0.123E~2, 0.123E4) = ~0.1E~5 +nextAfter (~0.123E~2, 0.123E4) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E4) = ~0.123E~2 +* (~0.123E~2, 0.123E2) = ~0.15129E~1 ++ (~0.123E~2, 0.123E2) = 0.12298770000000001E2 +- (~0.123E~2, 0.123E2) = ~0.1230123E2 +/ (~0.123E~2, 0.123E2) = ~0.9999999999999999E~4 +nextAfter (~0.123E~2, 0.123E2) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E2) = ~0.123E~2 +* (~0.123E~2, 0.3141592653589793E1) = ~0.38641589639154456E~2 ++ (~0.123E~2, 0.3141592653589793E1) = 0.3140362653589793E1 +- (~0.123E~2, 0.3141592653589793E1) = ~0.3142822653589793E1 +/ (~0.123E~2, 0.3141592653589793E1) = ~0.3915211600060625E~3 +nextAfter (~0.123E~2, 0.3141592653589793E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.3141592653589793E1) = ~0.123E~2 +* (~0.123E~2, 0.2718281828459045E1) = ~0.33434866490046253E~2 ++ (~0.123E~2, 0.2718281828459045E1) = 0.2717051828459045E1 +- (~0.123E~2, 0.2718281828459045E1) = ~0.2719511828459045E1 +/ (~0.123E~2, 0.2718281828459045E1) = ~0.45249171264087406E~3 +nextAfter (~0.123E~2, 0.2718281828459045E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.2718281828459045E1) = ~0.123E~2 +* (~0.123E~2, 0.123E1) = ~0.15129E~2 ++ (~0.123E~2, 0.123E1) = 0.122877E1 +- (~0.123E~2, 0.123E1) = ~0.123123E1 +/ (~0.123E~2, 0.123E1) = ~0.1E~2 +nextAfter (~0.123E~2, 0.123E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E1) = ~0.123E~2 +* (~0.123E~2, 0.123) = ~0.15129E~3 ++ (~0.123E~2, 0.123) = 0.12177 +- (~0.123E~2, 0.123) = ~0.12423 +/ (~0.123E~2, 0.123) = ~0.1E~1 +nextAfter (~0.123E~2, 0.123) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123) = ~0.123E~2 +* (~0.123E~2, 0.123E~2) = ~0.15129E~5 ++ (~0.123E~2, 0.123E~2) = 0.0 +- (~0.123E~2, 0.123E~2) = ~0.246E~2 +/ (~0.123E~2, 0.123E~2) = ~0.1E1 +nextAfter (~0.123E~2, 0.123E~2) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E~2) = 0.0 +* (~0.123E~2, 0.22250738585072014E~307) = ~0.2736840845964E~310 ++ (~0.123E~2, 0.22250738585072014E~307) = ~0.123E~2 +- (~0.123E~2, 0.22250738585072014E~307) = ~0.123E~2 +/ (~0.123E~2, 0.22250738585072014E~307) = ~0.5527906389701621E305 +nextAfter (~0.123E~2, 0.22250738585072014E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.22250738585072014E~307) = 0.0 +* (~0.123E~2, 0.11125369292536007E~307) = ~0.1368420422982E~310 ++ (~0.123E~2, 0.11125369292536007E~307) = ~0.123E~2 +- (~0.123E~2, 0.11125369292536007E~307) = ~0.123E~2 +/ (~0.123E~2, 0.11125369292536007E~307) = ~0.11055812779403243E306 +nextAfter (~0.123E~2, 0.11125369292536007E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.11125369292536007E~307) = 0.0 +* (~0.123E~2, 0.5E~323) = ~0.0 ++ (~0.123E~2, 0.5E~323) = ~0.123E~2 +- (~0.123E~2, 0.5E~323) = ~0.123E~2 +/ (~0.123E~2, 0.5E~323) = ~inf +nextAfter (~0.123E~2, 0.5E~323) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.5E~323) = inf +* (~0.123E~2, 0.0) = ~0.0 ++ (~0.123E~2, 0.0) = ~0.123E~2 +- (~0.123E~2, 0.0) = ~0.123E~2 +/ (~0.123E~2, 0.0) = ~inf +nextAfter (~0.123E~2, 0.0) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.0) = nan +* (~0.123E~2, ~0.17976931348623157E309) = 0.2211162555880648E306 ++ (~0.123E~2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E~2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E~2, ~0.17976931348623157E309) = 0.684210211491E~311 +nextAfter (~0.123E~2, ~0.17976931348623157E309) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.17976931348623157E309) = ~0.123E~2 +* (~0.123E~2, ~0.8988465674311579E308) = 0.1105581277940324E306 ++ (~0.123E~2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E~2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E~2, ~0.8988465674311579E308) = 0.1368420422982E~310 +nextAfter (~0.123E~2, ~0.8988465674311579E308) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.8988465674311579E308) = ~0.123E~2 +* (~0.123E~2, ~0.123E4) = 0.15129E1 ++ (~0.123E~2, ~0.123E4) = ~0.123000123E4 +- (~0.123E~2, ~0.123E4) = 0.122999877E4 +/ (~0.123E~2, ~0.123E4) = 0.1E~5 +nextAfter (~0.123E~2, ~0.123E4) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E4) = ~0.123E~2 +* (~0.123E~2, ~0.123E2) = 0.15129E~1 ++ (~0.123E~2, ~0.123E2) = ~0.1230123E2 +- (~0.123E~2, ~0.123E2) = 0.12298770000000001E2 +/ (~0.123E~2, ~0.123E2) = 0.9999999999999999E~4 +nextAfter (~0.123E~2, ~0.123E2) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E2) = ~0.123E~2 +* (~0.123E~2, ~0.3141592653589793E1) = 0.38641589639154456E~2 ++ (~0.123E~2, ~0.3141592653589793E1) = ~0.3142822653589793E1 +- (~0.123E~2, ~0.3141592653589793E1) = 0.3140362653589793E1 +/ (~0.123E~2, ~0.3141592653589793E1) = 0.3915211600060625E~3 +nextAfter (~0.123E~2, ~0.3141592653589793E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.3141592653589793E1) = ~0.123E~2 +* (~0.123E~2, ~0.2718281828459045E1) = 0.33434866490046253E~2 ++ (~0.123E~2, ~0.2718281828459045E1) = ~0.2719511828459045E1 +- (~0.123E~2, ~0.2718281828459045E1) = 0.2717051828459045E1 +/ (~0.123E~2, ~0.2718281828459045E1) = 0.45249171264087406E~3 +nextAfter (~0.123E~2, ~0.2718281828459045E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.2718281828459045E1) = ~0.123E~2 +* (~0.123E~2, ~0.123E1) = 0.15129E~2 ++ (~0.123E~2, ~0.123E1) = ~0.123123E1 +- (~0.123E~2, ~0.123E1) = 0.122877E1 +/ (~0.123E~2, ~0.123E1) = 0.1E~2 +nextAfter (~0.123E~2, ~0.123E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E1) = ~0.123E~2 +* (~0.123E~2, ~0.123) = 0.15129E~3 ++ (~0.123E~2, ~0.123) = ~0.12423 +- (~0.123E~2, ~0.123) = 0.12177 +/ (~0.123E~2, ~0.123) = 0.1E~1 +nextAfter (~0.123E~2, ~0.123) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123) = ~0.123E~2 +* (~0.123E~2, ~0.123E~2) = 0.15129E~5 ++ (~0.123E~2, ~0.123E~2) = ~0.246E~2 +- (~0.123E~2, ~0.123E~2) = 0.0 +/ (~0.123E~2, ~0.123E~2) = 0.1E1 +nextAfter (~0.123E~2, ~0.123E~2) = ~0.123E~2 +rem (~0.123E~2, ~0.123E~2) = 0.0 +* (~0.123E~2, ~0.22250738585072014E~307) = 0.2736840845964E~310 ++ (~0.123E~2, ~0.22250738585072014E~307) = ~0.123E~2 +- (~0.123E~2, ~0.22250738585072014E~307) = ~0.123E~2 +/ (~0.123E~2, ~0.22250738585072014E~307) = 0.5527906389701621E305 +nextAfter (~0.123E~2, ~0.22250738585072014E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.22250738585072014E~307) = 0.0 +* (~0.123E~2, ~0.11125369292536007E~307) = 0.1368420422982E~310 ++ (~0.123E~2, ~0.11125369292536007E~307) = ~0.123E~2 +- (~0.123E~2, ~0.11125369292536007E~307) = ~0.123E~2 +/ (~0.123E~2, ~0.11125369292536007E~307) = 0.11055812779403243E306 +nextAfter (~0.123E~2, ~0.11125369292536007E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.11125369292536007E~307) = 0.0 +* (~0.123E~2, ~0.5E~323) = 0.0 ++ (~0.123E~2, ~0.5E~323) = ~0.123E~2 +- (~0.123E~2, ~0.5E~323) = ~0.123E~2 +/ (~0.123E~2, ~0.5E~323) = inf +nextAfter (~0.123E~2, ~0.5E~323) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.5E~323) = inf +* (~0.123E~2, ~0.0) = 0.0 ++ (~0.123E~2, ~0.0) = ~0.123E~2 +- (~0.123E~2, ~0.0) = ~0.123E~2 +/ (~0.123E~2, ~0.0) = inf +nextAfter (~0.123E~2, ~0.0) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.0) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999999999998E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.123E~2, ~inf) = inf ++ (~0.123E~2, ~inf) = ~inf +- (~0.123E~2, ~inf) = inf +/ (~0.123E~2, ~inf) = 0.0 +nextAfter (~0.123E~2, ~inf) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~inf) = ~0.123E~2 +* (~0.123E~2, nan) = nan ++ (~0.123E~2, nan) = nan +- (~0.123E~2, nan) = nan +/ (~0.123E~2, nan) = nan +nextAfter (~0.123E~2, nan) = nan +rem (~0.123E~2, nan) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999999999998E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.39999999999999996E1 ++ (~0.22250738585072014E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.19999999999999998E1 ++ (~0.22250738585072014E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E4) = ~0.27368408459638577E~304 ++ (~0.22250738585072014E~307, 0.123E4) = 0.123E4 +- (~0.22250738585072014E~307, 0.123E4) = ~0.123E4 +/ (~0.22250738585072014E~307, 0.123E4) = ~0.18090031369976E~310 +nextAfter (~0.22250738585072014E~307, 0.123E4) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E4) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E2) = ~0.2736840845963858E~306 ++ (~0.22250738585072014E~307, 0.123E2) = 0.123E2 +- (~0.22250738585072014E~307, 0.123E2) = ~0.123E2 +/ (~0.22250738585072014E~307, 0.123E2) = ~0.1809003136997725E~308 +nextAfter (~0.22250738585072014E~307, 0.123E2) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.6990275687580919E~307 ++ (~0.22250738585072014E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.7082630066519554E~308 +nextAfter (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.6048377836559378E~307 ++ (~0.22250738585072014E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.818558927632814E~308 +nextAfter (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E1) = ~0.27368408459638577E~307 ++ (~0.22250738585072014E~307, 0.123E1) = 0.123E1 +- (~0.22250738585072014E~307, 0.123E1) = ~0.123E1 +/ (~0.22250738585072014E~307, 0.123E1) = ~0.18090031369977247E~307 +nextAfter (~0.22250738585072014E~307, 0.123E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123) = ~0.273684084596386E~308 ++ (~0.22250738585072014E~307, 0.123) = 0.123 +- (~0.22250738585072014E~307, 0.123) = ~0.123 +/ (~0.22250738585072014E~307, 0.123) = ~0.1809003136997725E~306 +nextAfter (~0.22250738585072014E~307, 0.123) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E~2) = ~0.2736840845964E~310 ++ (~0.22250738585072014E~307, 0.123E~2) = 0.123E~2 +- (~0.22250738585072014E~307, 0.123E~2) = ~0.123E~2 +/ (~0.22250738585072014E~307, 0.123E~2) = ~0.18090031369977247E~304 +nextAfter (~0.22250738585072014E~307, 0.123E~2) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E~2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.0 ++ (~0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +- (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.4450147717014403E~307 +/ (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.1E1 +nextAfter (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +* (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.0 ++ (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.3337610787760802E~307 +/ (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.2E1 +nextAfter (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 +* (~0.22250738585072014E~307, 0.5E~323) = ~0.0 ++ (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507201E~307 +- (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507202E~307 +/ (~0.22250738585072014E~307, 0.5E~323) = ~0.4503599627370496E16 +nextAfter (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.5E~323) = 0.0 +* (~0.22250738585072014E~307, 0.0) = ~0.0 ++ (~0.22250738585072014E~307, 0.0) = ~0.22250738585072014E~307 +- (~0.22250738585072014E~307, 0.0) = ~0.22250738585072014E~307 +/ (~0.22250738585072014E~307, 0.0) = ~inf +nextAfter (~0.22250738585072014E~307, 0.0) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.0) = nan +* (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.39999999999999996E1 ++ (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.19999999999999998E1 ++ (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E4) = 0.27368408459638577E~304 ++ (~0.22250738585072014E~307, ~0.123E4) = ~0.123E4 +- (~0.22250738585072014E~307, ~0.123E4) = 0.123E4 +/ (~0.22250738585072014E~307, ~0.123E4) = 0.18090031369976E~310 +nextAfter (~0.22250738585072014E~307, ~0.123E4) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E4) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E2) = 0.2736840845963858E~306 ++ (~0.22250738585072014E~307, ~0.123E2) = ~0.123E2 +- (~0.22250738585072014E~307, ~0.123E2) = 0.123E2 +/ (~0.22250738585072014E~307, ~0.123E2) = 0.1809003136997725E~308 +nextAfter (~0.22250738585072014E~307, ~0.123E2) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.6990275687580919E~307 ++ (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.7082630066519554E~308 +nextAfter (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.6048377836559378E~307 ++ (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.818558927632814E~308 +nextAfter (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E1) = 0.27368408459638577E~307 ++ (~0.22250738585072014E~307, ~0.123E1) = ~0.123E1 +- (~0.22250738585072014E~307, ~0.123E1) = 0.123E1 +/ (~0.22250738585072014E~307, ~0.123E1) = 0.18090031369977247E~307 +nextAfter (~0.22250738585072014E~307, ~0.123E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123) = 0.273684084596386E~308 ++ (~0.22250738585072014E~307, ~0.123) = ~0.123 +- (~0.22250738585072014E~307, ~0.123) = 0.123 +/ (~0.22250738585072014E~307, ~0.123) = 0.1809003136997725E~306 +nextAfter (~0.22250738585072014E~307, ~0.123) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E~2) = 0.2736840845964E~310 ++ (~0.22250738585072014E~307, ~0.123E~2) = ~0.123E~2 +- (~0.22250738585072014E~307, ~0.123E~2) = 0.123E~2 +/ (~0.22250738585072014E~307, ~0.123E~2) = 0.18090031369977247E~304 +nextAfter (~0.22250738585072014E~307, ~0.123E~2) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E~2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 ++ (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.4450147717014403E~307 +- (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +/ (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.1E1 +nextAfter (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +rem (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +* (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 ++ (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.3337610787760802E~307 +- (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.2E1 +nextAfter (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 +* (~0.22250738585072014E~307, ~0.5E~323) = 0.0 ++ (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507202E~307 +- (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507201E~307 +/ (~0.22250738585072014E~307, ~0.5E~323) = 0.4503599627370496E16 +nextAfter (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.5E~323) = 0.0 +* (~0.22250738585072014E~307, ~0.0) = 0.0 ++ (~0.22250738585072014E~307, ~0.0) = ~0.22250738585072014E~307 +- (~0.22250738585072014E~307, ~0.0) = ~0.22250738585072014E~307 +/ (~0.22250738585072014E~307, ~0.0) = inf +nextAfter (~0.22250738585072014E~307, ~0.0) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.0) = nan +* (~0.22250738585072014E~307, inf) = ~inf ++ (~0.22250738585072014E~307, inf) = inf +- (~0.22250738585072014E~307, inf) = ~inf +/ (~0.22250738585072014E~307, inf) = ~0.0 +nextAfter (~0.22250738585072014E~307, inf) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, inf) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~inf) = inf ++ (~0.22250738585072014E~307, ~inf) = ~inf +- (~0.22250738585072014E~307, ~inf) = inf +/ (~0.22250738585072014E~307, ~inf) = 0.0 +nextAfter (~0.22250738585072014E~307, ~inf) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~inf) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, nan) = nan ++ (~0.22250738585072014E~307, nan) = nan +- (~0.22250738585072014E~307, nan) = nan +/ (~0.22250738585072014E~307, nan) = nan +nextAfter (~0.22250738585072014E~307, nan) = nan +rem (~0.22250738585072014E~307, nan) = nan +* (~0.22250738585072014E~307, inf) = ~inf ++ (~0.22250738585072014E~307, inf) = inf +- (~0.22250738585072014E~307, inf) = ~inf +/ (~0.22250738585072014E~307, inf) = ~0.0 +nextAfter (~0.22250738585072014E~307, inf) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, inf) = ~0.22250738585072014E~307 +* (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.19999999999999998E1 ++ (~0.11125369292536007E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.9999999999999999 ++ (~0.11125369292536007E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E4) = ~0.13684204229819289E~304 ++ (~0.11125369292536007E~307, 0.123E4) = 0.123E4 +- (~0.11125369292536007E~307, 0.123E4) = ~0.123E4 +/ (~0.11125369292536007E~307, 0.123E4) = ~0.904501568499E~311 +nextAfter (~0.11125369292536007E~307, 0.123E4) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E4) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E2) = ~0.1368420422981929E~306 ++ (~0.11125369292536007E~307, 0.123E2) = 0.123E2 +- (~0.11125369292536007E~307, 0.123E2) = ~0.123E2 +/ (~0.11125369292536007E~307, 0.123E2) = ~0.90450156849886E~309 +nextAfter (~0.11125369292536007E~307, 0.123E2) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.34951378437904593E~307 ++ (~0.11125369292536007E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3541315033259774E~308 +nextAfter (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.3024188918279689E~307 ++ (~0.11125369292536007E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.409279463816407E~308 +nextAfter (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E1) = ~0.1368420422981929E~307 ++ (~0.11125369292536007E~307, 0.123E1) = 0.123E1 +- (~0.11125369292536007E~307, 0.123E1) = ~0.123E1 +/ (~0.11125369292536007E~307, 0.123E1) = ~0.9045015684988623E~308 +nextAfter (~0.11125369292536007E~307, 0.123E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123) = ~0.136842042298193E~308 ++ (~0.11125369292536007E~307, 0.123) = 0.123 +- (~0.11125369292536007E~307, 0.123) = ~0.123 +/ (~0.11125369292536007E~307, 0.123) = ~0.9045015684988624E~307 +nextAfter (~0.11125369292536007E~307, 0.123) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E~2) = ~0.1368420422982E~310 ++ (~0.11125369292536007E~307, 0.123E~2) = 0.123E~2 +- (~0.11125369292536007E~307, 0.123E~2) = ~0.123E~2 +/ (~0.11125369292536007E~307, 0.123E~2) = ~0.9045015684988623E~305 +nextAfter (~0.11125369292536007E~307, 0.123E~2) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E~2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.0 ++ (~0.11125369292536007E~307, 0.22250738585072014E~307) = 0.11125369292536007E~307 +- (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.3337610787760802E~307 +/ (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.5 +nextAfter (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.0 ++ (~0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +- (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.22250738585072014E~307 +/ (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.1E1 +nextAfter (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +* (~0.11125369292536007E~307, 0.5E~323) = ~0.0 ++ (~0.11125369292536007E~307, 0.5E~323) = ~0.11125369292536E~307 +- (~0.11125369292536007E~307, 0.5E~323) = ~0.1112536929253601E~307 +/ (~0.11125369292536007E~307, 0.5E~323) = ~0.2251799813685248E16 +nextAfter (~0.11125369292536007E~307, 0.5E~323) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.5E~323) = 0.0 +* (~0.11125369292536007E~307, 0.0) = ~0.0 ++ (~0.11125369292536007E~307, 0.0) = ~0.11125369292536007E~307 +- (~0.11125369292536007E~307, 0.0) = ~0.11125369292536007E~307 +/ (~0.11125369292536007E~307, 0.0) = ~inf +nextAfter (~0.11125369292536007E~307, 0.0) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.0) = nan +* (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.19999999999999998E1 ++ (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.9999999999999999 ++ (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E4) = 0.13684204229819289E~304 ++ (~0.11125369292536007E~307, ~0.123E4) = ~0.123E4 +- (~0.11125369292536007E~307, ~0.123E4) = 0.123E4 +/ (~0.11125369292536007E~307, ~0.123E4) = 0.904501568499E~311 +nextAfter (~0.11125369292536007E~307, ~0.123E4) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E4) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E2) = 0.1368420422981929E~306 ++ (~0.11125369292536007E~307, ~0.123E2) = ~0.123E2 +- (~0.11125369292536007E~307, ~0.123E2) = 0.123E2 +/ (~0.11125369292536007E~307, ~0.123E2) = 0.90450156849886E~309 +nextAfter (~0.11125369292536007E~307, ~0.123E2) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.34951378437904593E~307 ++ (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3541315033259774E~308 +nextAfter (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.3024188918279689E~307 ++ (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.409279463816407E~308 +nextAfter (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E1) = 0.1368420422981929E~307 ++ (~0.11125369292536007E~307, ~0.123E1) = ~0.123E1 +- (~0.11125369292536007E~307, ~0.123E1) = 0.123E1 +/ (~0.11125369292536007E~307, ~0.123E1) = 0.9045015684988623E~308 +nextAfter (~0.11125369292536007E~307, ~0.123E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123) = 0.136842042298193E~308 ++ (~0.11125369292536007E~307, ~0.123) = ~0.123 +- (~0.11125369292536007E~307, ~0.123) = 0.123 +/ (~0.11125369292536007E~307, ~0.123) = 0.9045015684988624E~307 +nextAfter (~0.11125369292536007E~307, ~0.123) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E~2) = 0.1368420422982E~310 ++ (~0.11125369292536007E~307, ~0.123E~2) = ~0.123E~2 +- (~0.11125369292536007E~307, ~0.123E~2) = 0.123E~2 +/ (~0.11125369292536007E~307, ~0.123E~2) = 0.9045015684988623E~305 +nextAfter (~0.11125369292536007E~307, ~0.123E~2) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E~2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.0 ++ (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.3337610787760802E~307 +- (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536007E~307 +/ (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.5 +nextAfter (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 ++ (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.22250738585072014E~307 +- (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +/ (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.1E1 +nextAfter (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +rem (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +* (~0.11125369292536007E~307, ~0.5E~323) = 0.0 ++ (~0.11125369292536007E~307, ~0.5E~323) = ~0.1112536929253601E~307 +- (~0.11125369292536007E~307, ~0.5E~323) = ~0.11125369292536E~307 +/ (~0.11125369292536007E~307, ~0.5E~323) = 0.2251799813685248E16 +nextAfter (~0.11125369292536007E~307, ~0.5E~323) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, ~0.5E~323) = 0.0 +* (~0.11125369292536007E~307, ~0.0) = 0.0 ++ (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536007E~307 +- (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536007E~307 +/ (~0.11125369292536007E~307, ~0.0) = inf +nextAfter (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, ~0.0) = nan +* (~0.11125369292536007E~307, inf) = ~inf ++ (~0.11125369292536007E~307, inf) = inf +- (~0.11125369292536007E~307, inf) = ~inf +/ (~0.11125369292536007E~307, inf) = ~0.0 +nextAfter (~0.11125369292536007E~307, inf) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, inf) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~inf) = inf ++ (~0.11125369292536007E~307, ~inf) = ~inf +- (~0.11125369292536007E~307, ~inf) = inf +/ (~0.11125369292536007E~307, ~inf) = 0.0 +nextAfter (~0.11125369292536007E~307, ~inf) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~inf) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, nan) = nan ++ (~0.11125369292536007E~307, nan) = nan +- (~0.11125369292536007E~307, nan) = nan +/ (~0.11125369292536007E~307, nan) = nan +nextAfter (~0.11125369292536007E~307, nan) = nan +rem (~0.11125369292536007E~307, nan) = nan +* (~0.11125369292536007E~307, inf) = ~inf ++ (~0.11125369292536007E~307, inf) = inf +- (~0.11125369292536007E~307, inf) = ~inf +/ (~0.11125369292536007E~307, inf) = ~0.0 +nextAfter (~0.11125369292536007E~307, inf) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, inf) = ~0.11125369292536007E~307 +* (~0.5E~323, 0.17976931348623157E309) = ~0.8881784197001251E~15 ++ (~0.5E~323, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.5E~323, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.5E~323, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.5E~323, 0.17976931348623157E309) = ~0.0 +rem (~0.5E~323, 0.17976931348623157E309) = ~0.5E~323 +* (~0.5E~323, 0.8988465674311579E308) = ~0.44408920985006257E~15 ++ (~0.5E~323, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.5E~323, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.5E~323, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.5E~323, 0.8988465674311579E308) = ~0.0 +rem (~0.5E~323, 0.8988465674311579E308) = ~0.5E~323 +* (~0.5E~323, 0.123E4) = ~0.6077E~320 ++ (~0.5E~323, 0.123E4) = 0.123E4 +- (~0.5E~323, 0.123E4) = ~0.123E4 +/ (~0.5E~323, 0.123E4) = ~0.0 +nextAfter (~0.5E~323, 0.123E4) = ~0.0 +rem (~0.5E~323, 0.123E4) = ~0.5E~323 +* (~0.5E~323, 0.123E2) = ~0.6E~322 ++ (~0.5E~323, 0.123E2) = 0.123E2 +- (~0.5E~323, 0.123E2) = ~0.123E2 +/ (~0.5E~323, 0.123E2) = ~0.0 +nextAfter (~0.5E~323, 0.123E2) = ~0.0 +rem (~0.5E~323, 0.123E2) = ~0.5E~323 +* (~0.5E~323, 0.3141592653589793E1) = ~0.15E~322 ++ (~0.5E~323, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.5E~323, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.5E~323, 0.3141592653589793E1) = ~0.0 +nextAfter (~0.5E~323, 0.3141592653589793E1) = ~0.0 +rem (~0.5E~323, 0.3141592653589793E1) = ~0.5E~323 +* (~0.5E~323, 0.2718281828459045E1) = ~0.15E~322 ++ (~0.5E~323, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.5E~323, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.5E~323, 0.2718281828459045E1) = ~0.0 +nextAfter (~0.5E~323, 0.2718281828459045E1) = ~0.0 +rem (~0.5E~323, 0.2718281828459045E1) = ~0.5E~323 +* (~0.5E~323, 0.123E1) = ~0.5E~323 ++ (~0.5E~323, 0.123E1) = 0.123E1 +- (~0.5E~323, 0.123E1) = ~0.123E1 +/ (~0.5E~323, 0.123E1) = ~0.5E~323 +nextAfter (~0.5E~323, 0.123E1) = ~0.0 +rem (~0.5E~323, 0.123E1) = ~0.5E~323 +* (~0.5E~323, 0.123) = ~0.0 ++ (~0.5E~323, 0.123) = 0.123 +- (~0.5E~323, 0.123) = ~0.123 +/ (~0.5E~323, 0.123) = ~0.4E~322 +nextAfter (~0.5E~323, 0.123) = ~0.0 +rem (~0.5E~323, 0.123) = ~0.5E~323 +* (~0.5E~323, 0.123E~2) = ~0.0 ++ (~0.5E~323, 0.123E~2) = 0.123E~2 +- (~0.5E~323, 0.123E~2) = ~0.123E~2 +/ (~0.5E~323, 0.123E~2) = ~0.4017E~320 +nextAfter (~0.5E~323, 0.123E~2) = ~0.0 +rem (~0.5E~323, 0.123E~2) = ~0.5E~323 +* (~0.5E~323, 0.22250738585072014E~307) = ~0.0 ++ (~0.5E~323, 0.22250738585072014E~307) = 0.2225073858507201E~307 +- (~0.5E~323, 0.22250738585072014E~307) = ~0.2225073858507202E~307 +/ (~0.5E~323, 0.22250738585072014E~307) = ~0.2220446049250313E~15 +nextAfter (~0.5E~323, 0.22250738585072014E~307) = ~0.0 +rem (~0.5E~323, 0.22250738585072014E~307) = ~0.5E~323 +* (~0.5E~323, 0.11125369292536007E~307) = ~0.0 ++ (~0.5E~323, 0.11125369292536007E~307) = 0.11125369292536E~307 +- (~0.5E~323, 0.11125369292536007E~307) = ~0.1112536929253601E~307 +/ (~0.5E~323, 0.11125369292536007E~307) = ~0.4440892098500626E~15 +nextAfter (~0.5E~323, 0.11125369292536007E~307) = ~0.0 +rem (~0.5E~323, 0.11125369292536007E~307) = ~0.5E~323 +* (~0.5E~323, 0.5E~323) = ~0.0 ++ (~0.5E~323, 0.5E~323) = 0.0 +- (~0.5E~323, 0.5E~323) = ~0.1E~322 +/ (~0.5E~323, 0.5E~323) = ~0.1E1 +nextAfter (~0.5E~323, 0.5E~323) = ~0.0 +rem (~0.5E~323, 0.5E~323) = 0.0 +* (~0.5E~323, 0.0) = ~0.0 ++ (~0.5E~323, 0.0) = ~0.5E~323 +- (~0.5E~323, 0.0) = ~0.5E~323 +/ (~0.5E~323, 0.0) = ~inf +nextAfter (~0.5E~323, 0.0) = ~0.0 +rem (~0.5E~323, 0.0) = nan +* (~0.5E~323, ~0.17976931348623157E309) = 0.8881784197001251E~15 ++ (~0.5E~323, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.5E~323, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.5E~323, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.5E~323, ~0.17976931348623157E309) = ~0.1E~322 +rem (~0.5E~323, ~0.17976931348623157E309) = ~0.5E~323 +* (~0.5E~323, ~0.8988465674311579E308) = 0.44408920985006257E~15 ++ (~0.5E~323, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.5E~323, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.5E~323, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.5E~323, ~0.8988465674311579E308) = ~0.1E~322 +rem (~0.5E~323, ~0.8988465674311579E308) = ~0.5E~323 +* (~0.5E~323, ~0.123E4) = 0.6077E~320 ++ (~0.5E~323, ~0.123E4) = ~0.123E4 +- (~0.5E~323, ~0.123E4) = 0.123E4 +/ (~0.5E~323, ~0.123E4) = 0.0 +nextAfter (~0.5E~323, ~0.123E4) = ~0.1E~322 +rem (~0.5E~323, ~0.123E4) = ~0.5E~323 +* (~0.5E~323, ~0.123E2) = 0.6E~322 ++ (~0.5E~323, ~0.123E2) = ~0.123E2 +- (~0.5E~323, ~0.123E2) = 0.123E2 +/ (~0.5E~323, ~0.123E2) = 0.0 +nextAfter (~0.5E~323, ~0.123E2) = ~0.1E~322 +rem (~0.5E~323, ~0.123E2) = ~0.5E~323 +* (~0.5E~323, ~0.3141592653589793E1) = 0.15E~322 ++ (~0.5E~323, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.5E~323, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.5E~323, ~0.3141592653589793E1) = 0.0 +nextAfter (~0.5E~323, ~0.3141592653589793E1) = ~0.1E~322 +rem (~0.5E~323, ~0.3141592653589793E1) = ~0.5E~323 +* (~0.5E~323, ~0.2718281828459045E1) = 0.15E~322 ++ (~0.5E~323, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.5E~323, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.5E~323, ~0.2718281828459045E1) = 0.0 +nextAfter (~0.5E~323, ~0.2718281828459045E1) = ~0.1E~322 +rem (~0.5E~323, ~0.2718281828459045E1) = ~0.5E~323 +* (~0.5E~323, ~0.123E1) = 0.5E~323 ++ (~0.5E~323, ~0.123E1) = ~0.123E1 +- (~0.5E~323, ~0.123E1) = 0.123E1 +/ (~0.5E~323, ~0.123E1) = 0.5E~323 +nextAfter (~0.5E~323, ~0.123E1) = ~0.1E~322 +rem (~0.5E~323, ~0.123E1) = ~0.5E~323 +* (~0.5E~323, ~0.123) = 0.0 ++ (~0.5E~323, ~0.123) = ~0.123 +- (~0.5E~323, ~0.123) = 0.123 +/ (~0.5E~323, ~0.123) = 0.4E~322 +nextAfter (~0.5E~323, ~0.123) = ~0.1E~322 +rem (~0.5E~323, ~0.123) = ~0.5E~323 +* (~0.5E~323, ~0.123E~2) = 0.0 ++ (~0.5E~323, ~0.123E~2) = ~0.123E~2 +- (~0.5E~323, ~0.123E~2) = 0.123E~2 +/ (~0.5E~323, ~0.123E~2) = 0.4017E~320 +nextAfter (~0.5E~323, ~0.123E~2) = ~0.1E~322 +rem (~0.5E~323, ~0.123E~2) = ~0.5E~323 +* (~0.5E~323, ~0.22250738585072014E~307) = 0.0 ++ (~0.5E~323, ~0.22250738585072014E~307) = ~0.2225073858507202E~307 +- (~0.5E~323, ~0.22250738585072014E~307) = 0.2225073858507201E~307 +/ (~0.5E~323, ~0.22250738585072014E~307) = 0.2220446049250313E~15 +nextAfter (~0.5E~323, ~0.22250738585072014E~307) = ~0.1E~322 +rem (~0.5E~323, ~0.22250738585072014E~307) = ~0.5E~323 +* (~0.5E~323, ~0.11125369292536007E~307) = 0.0 ++ (~0.5E~323, ~0.11125369292536007E~307) = ~0.1112536929253601E~307 +- (~0.5E~323, ~0.11125369292536007E~307) = 0.11125369292536E~307 +/ (~0.5E~323, ~0.11125369292536007E~307) = 0.4440892098500626E~15 +nextAfter (~0.5E~323, ~0.11125369292536007E~307) = ~0.1E~322 +rem (~0.5E~323, ~0.11125369292536007E~307) = ~0.5E~323 +* (~0.5E~323, ~0.5E~323) = 0.0 ++ (~0.5E~323, ~0.5E~323) = ~0.1E~322 +- (~0.5E~323, ~0.5E~323) = 0.0 +/ (~0.5E~323, ~0.5E~323) = 0.1E1 +nextAfter (~0.5E~323, ~0.5E~323) = ~0.5E~323 +rem (~0.5E~323, ~0.5E~323) = 0.0 +* (~0.5E~323, ~0.0) = 0.0 ++ (~0.5E~323, ~0.0) = ~0.5E~323 +- (~0.5E~323, ~0.0) = ~0.5E~323 +/ (~0.5E~323, ~0.0) = inf +nextAfter (~0.5E~323, ~0.0) = ~0.0 +rem (~0.5E~323, ~0.0) = nan +* (~0.5E~323, inf) = ~inf ++ (~0.5E~323, inf) = inf +- (~0.5E~323, inf) = ~inf +/ (~0.5E~323, inf) = ~0.0 +nextAfter (~0.5E~323, inf) = ~0.0 +rem (~0.5E~323, inf) = ~0.5E~323 +* (~0.5E~323, ~inf) = inf ++ (~0.5E~323, ~inf) = ~inf +- (~0.5E~323, ~inf) = inf +/ (~0.5E~323, ~inf) = 0.0 +nextAfter (~0.5E~323, ~inf) = ~0.1E~322 +rem (~0.5E~323, ~inf) = ~0.5E~323 +* (~0.5E~323, nan) = nan ++ (~0.5E~323, nan) = nan +- (~0.5E~323, nan) = nan +/ (~0.5E~323, nan) = nan +nextAfter (~0.5E~323, nan) = nan +rem (~0.5E~323, nan) = nan +* (~0.5E~323, inf) = ~inf ++ (~0.5E~323, inf) = inf +- (~0.5E~323, inf) = ~inf +/ (~0.5E~323, inf) = ~0.0 +nextAfter (~0.5E~323, inf) = ~0.0 +rem (~0.5E~323, inf) = ~0.5E~323 +* (~0.0, 0.17976931348623157E309) = ~0.0 ++ (~0.0, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.0, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.0, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.0, 0.17976931348623157E309) = 0.5E~323 +rem (~0.0, 0.17976931348623157E309) = 0.0 +* (~0.0, 0.8988465674311579E308) = ~0.0 ++ (~0.0, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.0, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.0, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.0, 0.8988465674311579E308) = 0.5E~323 +rem (~0.0, 0.8988465674311579E308) = 0.0 +* (~0.0, 0.123E4) = ~0.0 ++ (~0.0, 0.123E4) = 0.123E4 +- (~0.0, 0.123E4) = ~0.123E4 +/ (~0.0, 0.123E4) = ~0.0 +nextAfter (~0.0, 0.123E4) = 0.5E~323 +rem (~0.0, 0.123E4) = 0.0 +* (~0.0, 0.123E2) = ~0.0 ++ (~0.0, 0.123E2) = 0.123E2 +- (~0.0, 0.123E2) = ~0.123E2 +/ (~0.0, 0.123E2) = ~0.0 +nextAfter (~0.0, 0.123E2) = 0.5E~323 +rem (~0.0, 0.123E2) = 0.0 +* (~0.0, 0.3141592653589793E1) = ~0.0 ++ (~0.0, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.0, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.0, 0.3141592653589793E1) = ~0.0 +nextAfter (~0.0, 0.3141592653589793E1) = 0.5E~323 +rem (~0.0, 0.3141592653589793E1) = 0.0 +* (~0.0, 0.2718281828459045E1) = ~0.0 ++ (~0.0, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.0, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.0, 0.2718281828459045E1) = ~0.0 +nextAfter (~0.0, 0.2718281828459045E1) = 0.5E~323 +rem (~0.0, 0.2718281828459045E1) = 0.0 +* (~0.0, 0.123E1) = ~0.0 ++ (~0.0, 0.123E1) = 0.123E1 +- (~0.0, 0.123E1) = ~0.123E1 +/ (~0.0, 0.123E1) = ~0.0 +nextAfter (~0.0, 0.123E1) = 0.5E~323 +rem (~0.0, 0.123E1) = 0.0 +* (~0.0, 0.123) = ~0.0 ++ (~0.0, 0.123) = 0.123 +- (~0.0, 0.123) = ~0.123 +/ (~0.0, 0.123) = ~0.0 +nextAfter (~0.0, 0.123) = 0.5E~323 +rem (~0.0, 0.123) = 0.0 +* (~0.0, 0.123E~2) = ~0.0 ++ (~0.0, 0.123E~2) = 0.123E~2 +- (~0.0, 0.123E~2) = ~0.123E~2 +/ (~0.0, 0.123E~2) = ~0.0 +nextAfter (~0.0, 0.123E~2) = 0.5E~323 +rem (~0.0, 0.123E~2) = 0.0 +* (~0.0, 0.22250738585072014E~307) = ~0.0 ++ (~0.0, 0.22250738585072014E~307) = 0.22250738585072014E~307 +- (~0.0, 0.22250738585072014E~307) = ~0.22250738585072014E~307 +/ (~0.0, 0.22250738585072014E~307) = ~0.0 +nextAfter (~0.0, 0.22250738585072014E~307) = 0.5E~323 +rem (~0.0, 0.22250738585072014E~307) = 0.0 +* (~0.0, 0.11125369292536007E~307) = ~0.0 ++ (~0.0, 0.11125369292536007E~307) = 0.11125369292536007E~307 +- (~0.0, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (~0.0, 0.11125369292536007E~307) = ~0.0 +nextAfter (~0.0, 0.11125369292536007E~307) = 0.5E~323 +rem (~0.0, 0.11125369292536007E~307) = 0.0 +* (~0.0, 0.5E~323) = ~0.0 ++ (~0.0, 0.5E~323) = 0.5E~323 +- (~0.0, 0.5E~323) = ~0.5E~323 +/ (~0.0, 0.5E~323) = ~0.0 +nextAfter (~0.0, 0.5E~323) = 0.5E~323 +rem (~0.0, 0.5E~323) = 0.0 +* (~0.0, 0.0) = ~0.0 ++ (~0.0, 0.0) = 0.0 +- (~0.0, 0.0) = ~0.0 +/ (~0.0, 0.0) = nan +nextAfter (~0.0, 0.0) = 0.0 +rem (~0.0, 0.0) = 0.0 +* (~0.0, ~0.17976931348623157E309) = 0.0 ++ (~0.0, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.0, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.0, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.0, ~0.17976931348623157E309) = ~0.5E~323 +rem (~0.0, ~0.17976931348623157E309) = 0.0 +* (~0.0, ~0.8988465674311579E308) = 0.0 ++ (~0.0, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.0, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.0, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.0, ~0.8988465674311579E308) = ~0.5E~323 +rem (~0.0, ~0.8988465674311579E308) = 0.0 +* (~0.0, ~0.123E4) = 0.0 ++ (~0.0, ~0.123E4) = ~0.123E4 +- (~0.0, ~0.123E4) = 0.123E4 +/ (~0.0, ~0.123E4) = 0.0 +nextAfter (~0.0, ~0.123E4) = ~0.5E~323 +rem (~0.0, ~0.123E4) = 0.0 +* (~0.0, ~0.123E2) = 0.0 ++ (~0.0, ~0.123E2) = ~0.123E2 +- (~0.0, ~0.123E2) = 0.123E2 +/ (~0.0, ~0.123E2) = 0.0 +nextAfter (~0.0, ~0.123E2) = ~0.5E~323 +rem (~0.0, ~0.123E2) = 0.0 +* (~0.0, ~0.3141592653589793E1) = 0.0 ++ (~0.0, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.0, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.0, ~0.3141592653589793E1) = 0.0 +nextAfter (~0.0, ~0.3141592653589793E1) = ~0.5E~323 +rem (~0.0, ~0.3141592653589793E1) = 0.0 +* (~0.0, ~0.2718281828459045E1) = 0.0 ++ (~0.0, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.0, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.0, ~0.2718281828459045E1) = 0.0 +nextAfter (~0.0, ~0.2718281828459045E1) = ~0.5E~323 +rem (~0.0, ~0.2718281828459045E1) = 0.0 +* (~0.0, ~0.123E1) = 0.0 ++ (~0.0, ~0.123E1) = ~0.123E1 +- (~0.0, ~0.123E1) = 0.123E1 +/ (~0.0, ~0.123E1) = 0.0 +nextAfter (~0.0, ~0.123E1) = ~0.5E~323 +rem (~0.0, ~0.123E1) = 0.0 +* (~0.0, ~0.123) = 0.0 ++ (~0.0, ~0.123) = ~0.123 +- (~0.0, ~0.123) = 0.123 +/ (~0.0, ~0.123) = 0.0 +nextAfter (~0.0, ~0.123) = ~0.5E~323 +rem (~0.0, ~0.123) = 0.0 +* (~0.0, ~0.123E~2) = 0.0 ++ (~0.0, ~0.123E~2) = ~0.123E~2 +- (~0.0, ~0.123E~2) = 0.123E~2 +/ (~0.0, ~0.123E~2) = 0.0 +nextAfter (~0.0, ~0.123E~2) = ~0.5E~323 +rem (~0.0, ~0.123E~2) = 0.0 +* (~0.0, ~0.22250738585072014E~307) = 0.0 ++ (~0.0, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +- (~0.0, ~0.22250738585072014E~307) = 0.22250738585072014E~307 +/ (~0.0, ~0.22250738585072014E~307) = 0.0 +nextAfter (~0.0, ~0.22250738585072014E~307) = ~0.5E~323 +rem (~0.0, ~0.22250738585072014E~307) = 0.0 +* (~0.0, ~0.11125369292536007E~307) = 0.0 ++ (~0.0, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (~0.0, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (~0.0, ~0.11125369292536007E~307) = 0.0 +nextAfter (~0.0, ~0.11125369292536007E~307) = ~0.5E~323 +rem (~0.0, ~0.11125369292536007E~307) = 0.0 +* (~0.0, ~0.5E~323) = 0.0 ++ (~0.0, ~0.5E~323) = ~0.5E~323 +- (~0.0, ~0.5E~323) = 0.5E~323 +/ (~0.0, ~0.5E~323) = 0.0 +nextAfter (~0.0, ~0.5E~323) = ~0.5E~323 +rem (~0.0, ~0.5E~323) = 0.0 +* (~0.0, ~0.0) = 0.0 ++ (~0.0, ~0.0) = ~0.0 +- (~0.0, ~0.0) = 0.0 +/ (~0.0, ~0.0) = nan +nextAfter (~0.0, ~0.0) = ~0.0 +rem (~0.0, ~0.0) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.5E~323 +rem (~0.0, inf) = 0.0 +* (~0.0, ~inf) = nan ++ (~0.0, ~inf) = ~inf +- (~0.0, ~inf) = inf +/ (~0.0, ~inf) = 0.0 +nextAfter (~0.0, ~inf) = ~0.5E~323 +rem (~0.0, ~inf) = 0.0 +* (~0.0, nan) = nan ++ (~0.0, nan) = nan +- (~0.0, nan) = nan +/ (~0.0, nan) = nan +nextAfter (~0.0, nan) = nan +rem (~0.0, nan) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.5E~323 +rem (~0.0, inf) = 0.0 +* (inf, 0.17976931348623157E309) = inf ++ (inf, 0.17976931348623157E309) = inf +- (inf, 0.17976931348623157E309) = inf +/ (inf, 0.17976931348623157E309) = inf +nextAfter (inf, 0.17976931348623157E309) = inf +rem (inf, 0.17976931348623157E309) = nan +* (inf, 0.8988465674311579E308) = inf ++ (inf, 0.8988465674311579E308) = inf +- (inf, 0.8988465674311579E308) = inf +/ (inf, 0.8988465674311579E308) = inf +nextAfter (inf, 0.8988465674311579E308) = inf +rem (inf, 0.8988465674311579E308) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.3141592653589793E1) = inf ++ (inf, 0.3141592653589793E1) = inf +- (inf, 0.3141592653589793E1) = inf +/ (inf, 0.3141592653589793E1) = inf +nextAfter (inf, 0.3141592653589793E1) = inf +rem (inf, 0.3141592653589793E1) = nan +* (inf, 0.2718281828459045E1) = inf ++ (inf, 0.2718281828459045E1) = inf +- (inf, 0.2718281828459045E1) = inf +/ (inf, 0.2718281828459045E1) = inf +nextAfter (inf, 0.2718281828459045E1) = inf +rem (inf, 0.2718281828459045E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.22250738585072014E~307) = inf ++ (inf, 0.22250738585072014E~307) = inf +- (inf, 0.22250738585072014E~307) = inf +/ (inf, 0.22250738585072014E~307) = inf +nextAfter (inf, 0.22250738585072014E~307) = inf +rem (inf, 0.22250738585072014E~307) = nan +* (inf, 0.11125369292536007E~307) = inf ++ (inf, 0.11125369292536007E~307) = inf +- (inf, 0.11125369292536007E~307) = inf +/ (inf, 0.11125369292536007E~307) = inf +nextAfter (inf, 0.11125369292536007E~307) = inf +rem (inf, 0.11125369292536007E~307) = nan +* (inf, 0.5E~323) = inf ++ (inf, 0.5E~323) = inf +- (inf, 0.5E~323) = inf +/ (inf, 0.5E~323) = inf +nextAfter (inf, 0.5E~323) = inf +rem (inf, 0.5E~323) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.17976931348623157E309) = ~inf ++ (inf, ~0.17976931348623157E309) = inf +- (inf, ~0.17976931348623157E309) = inf +/ (inf, ~0.17976931348623157E309) = ~inf +nextAfter (inf, ~0.17976931348623157E309) = inf +rem (inf, ~0.17976931348623157E309) = nan +* (inf, ~0.8988465674311579E308) = ~inf ++ (inf, ~0.8988465674311579E308) = inf +- (inf, ~0.8988465674311579E308) = inf +/ (inf, ~0.8988465674311579E308) = ~inf +nextAfter (inf, ~0.8988465674311579E308) = inf +rem (inf, ~0.8988465674311579E308) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.3141592653589793E1) = ~inf ++ (inf, ~0.3141592653589793E1) = inf +- (inf, ~0.3141592653589793E1) = inf +/ (inf, ~0.3141592653589793E1) = ~inf +nextAfter (inf, ~0.3141592653589793E1) = inf +rem (inf, ~0.3141592653589793E1) = nan +* (inf, ~0.2718281828459045E1) = ~inf ++ (inf, ~0.2718281828459045E1) = inf +- (inf, ~0.2718281828459045E1) = inf +/ (inf, ~0.2718281828459045E1) = ~inf +nextAfter (inf, ~0.2718281828459045E1) = inf +rem (inf, ~0.2718281828459045E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.22250738585072014E~307) = ~inf ++ (inf, ~0.22250738585072014E~307) = inf +- (inf, ~0.22250738585072014E~307) = inf +/ (inf, ~0.22250738585072014E~307) = ~inf +nextAfter (inf, ~0.22250738585072014E~307) = inf +rem (inf, ~0.22250738585072014E~307) = nan +* (inf, ~0.11125369292536007E~307) = ~inf ++ (inf, ~0.11125369292536007E~307) = inf +- (inf, ~0.11125369292536007E~307) = inf +/ (inf, ~0.11125369292536007E~307) = ~inf +nextAfter (inf, ~0.11125369292536007E~307) = inf +rem (inf, ~0.11125369292536007E~307) = nan +* (inf, ~0.5E~323) = ~inf ++ (inf, ~0.5E~323) = inf +- (inf, ~0.5E~323) = inf +/ (inf, ~0.5E~323) = ~inf +nextAfter (inf, ~0.5E~323) = inf +rem (inf, ~0.5E~323) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (~inf, 0.17976931348623157E309) = ~inf ++ (~inf, 0.17976931348623157E309) = ~inf +- (~inf, 0.17976931348623157E309) = ~inf +/ (~inf, 0.17976931348623157E309) = ~inf +nextAfter (~inf, 0.17976931348623157E309) = ~inf +rem (~inf, 0.17976931348623157E309) = nan +* (~inf, 0.8988465674311579E308) = ~inf ++ (~inf, 0.8988465674311579E308) = ~inf +- (~inf, 0.8988465674311579E308) = ~inf +/ (~inf, 0.8988465674311579E308) = ~inf +nextAfter (~inf, 0.8988465674311579E308) = ~inf +rem (~inf, 0.8988465674311579E308) = nan +* (~inf, 0.123E4) = ~inf ++ (~inf, 0.123E4) = ~inf +- (~inf, 0.123E4) = ~inf +/ (~inf, 0.123E4) = ~inf +nextAfter (~inf, 0.123E4) = ~inf +rem (~inf, 0.123E4) = nan +* (~inf, 0.123E2) = ~inf ++ (~inf, 0.123E2) = ~inf +- (~inf, 0.123E2) = ~inf +/ (~inf, 0.123E2) = ~inf +nextAfter (~inf, 0.123E2) = ~inf +rem (~inf, 0.123E2) = nan +* (~inf, 0.3141592653589793E1) = ~inf ++ (~inf, 0.3141592653589793E1) = ~inf +- (~inf, 0.3141592653589793E1) = ~inf +/ (~inf, 0.3141592653589793E1) = ~inf +nextAfter (~inf, 0.3141592653589793E1) = ~inf +rem (~inf, 0.3141592653589793E1) = nan +* (~inf, 0.2718281828459045E1) = ~inf ++ (~inf, 0.2718281828459045E1) = ~inf +- (~inf, 0.2718281828459045E1) = ~inf +/ (~inf, 0.2718281828459045E1) = ~inf +nextAfter (~inf, 0.2718281828459045E1) = ~inf +rem (~inf, 0.2718281828459045E1) = nan +* (~inf, 0.123E1) = ~inf ++ (~inf, 0.123E1) = ~inf +- (~inf, 0.123E1) = ~inf +/ (~inf, 0.123E1) = ~inf +nextAfter (~inf, 0.123E1) = ~inf +rem (~inf, 0.123E1) = nan +* (~inf, 0.123) = ~inf ++ (~inf, 0.123) = ~inf +- (~inf, 0.123) = ~inf +/ (~inf, 0.123) = ~inf +nextAfter (~inf, 0.123) = ~inf +rem (~inf, 0.123) = nan +* (~inf, 0.123E~2) = ~inf ++ (~inf, 0.123E~2) = ~inf +- (~inf, 0.123E~2) = ~inf +/ (~inf, 0.123E~2) = ~inf +nextAfter (~inf, 0.123E~2) = ~inf +rem (~inf, 0.123E~2) = nan +* (~inf, 0.22250738585072014E~307) = ~inf ++ (~inf, 0.22250738585072014E~307) = ~inf +- (~inf, 0.22250738585072014E~307) = ~inf +/ (~inf, 0.22250738585072014E~307) = ~inf +nextAfter (~inf, 0.22250738585072014E~307) = ~inf +rem (~inf, 0.22250738585072014E~307) = nan +* (~inf, 0.11125369292536007E~307) = ~inf ++ (~inf, 0.11125369292536007E~307) = ~inf +- (~inf, 0.11125369292536007E~307) = ~inf +/ (~inf, 0.11125369292536007E~307) = ~inf +nextAfter (~inf, 0.11125369292536007E~307) = ~inf +rem (~inf, 0.11125369292536007E~307) = nan +* (~inf, 0.5E~323) = ~inf ++ (~inf, 0.5E~323) = ~inf +- (~inf, 0.5E~323) = ~inf +/ (~inf, 0.5E~323) = ~inf +nextAfter (~inf, 0.5E~323) = ~inf +rem (~inf, 0.5E~323) = nan +* (~inf, 0.0) = nan ++ (~inf, 0.0) = ~inf +- (~inf, 0.0) = ~inf +/ (~inf, 0.0) = ~inf +nextAfter (~inf, 0.0) = ~inf +rem (~inf, 0.0) = nan +* (~inf, ~0.17976931348623157E309) = inf ++ (~inf, ~0.17976931348623157E309) = ~inf +- (~inf, ~0.17976931348623157E309) = ~inf +/ (~inf, ~0.17976931348623157E309) = inf +nextAfter (~inf, ~0.17976931348623157E309) = ~inf +rem (~inf, ~0.17976931348623157E309) = nan +* (~inf, ~0.8988465674311579E308) = inf ++ (~inf, ~0.8988465674311579E308) = ~inf +- (~inf, ~0.8988465674311579E308) = ~inf +/ (~inf, ~0.8988465674311579E308) = inf +nextAfter (~inf, ~0.8988465674311579E308) = ~inf +rem (~inf, ~0.8988465674311579E308) = nan +* (~inf, ~0.123E4) = inf ++ (~inf, ~0.123E4) = ~inf +- (~inf, ~0.123E4) = ~inf +/ (~inf, ~0.123E4) = inf +nextAfter (~inf, ~0.123E4) = ~inf +rem (~inf, ~0.123E4) = nan +* (~inf, ~0.123E2) = inf ++ (~inf, ~0.123E2) = ~inf +- (~inf, ~0.123E2) = ~inf +/ (~inf, ~0.123E2) = inf +nextAfter (~inf, ~0.123E2) = ~inf +rem (~inf, ~0.123E2) = nan +* (~inf, ~0.3141592653589793E1) = inf ++ (~inf, ~0.3141592653589793E1) = ~inf +- (~inf, ~0.3141592653589793E1) = ~inf +/ (~inf, ~0.3141592653589793E1) = inf +nextAfter (~inf, ~0.3141592653589793E1) = ~inf +rem (~inf, ~0.3141592653589793E1) = nan +* (~inf, ~0.2718281828459045E1) = inf ++ (~inf, ~0.2718281828459045E1) = ~inf +- (~inf, ~0.2718281828459045E1) = ~inf +/ (~inf, ~0.2718281828459045E1) = inf +nextAfter (~inf, ~0.2718281828459045E1) = ~inf +rem (~inf, ~0.2718281828459045E1) = nan +* (~inf, ~0.123E1) = inf ++ (~inf, ~0.123E1) = ~inf +- (~inf, ~0.123E1) = ~inf +/ (~inf, ~0.123E1) = inf +nextAfter (~inf, ~0.123E1) = ~inf +rem (~inf, ~0.123E1) = nan +* (~inf, ~0.123) = inf ++ (~inf, ~0.123) = ~inf +- (~inf, ~0.123) = ~inf +/ (~inf, ~0.123) = inf +nextAfter (~inf, ~0.123) = ~inf +rem (~inf, ~0.123) = nan +* (~inf, ~0.123E~2) = inf ++ (~inf, ~0.123E~2) = ~inf +- (~inf, ~0.123E~2) = ~inf +/ (~inf, ~0.123E~2) = inf +nextAfter (~inf, ~0.123E~2) = ~inf +rem (~inf, ~0.123E~2) = nan +* (~inf, ~0.22250738585072014E~307) = inf ++ (~inf, ~0.22250738585072014E~307) = ~inf +- (~inf, ~0.22250738585072014E~307) = ~inf +/ (~inf, ~0.22250738585072014E~307) = inf +nextAfter (~inf, ~0.22250738585072014E~307) = ~inf +rem (~inf, ~0.22250738585072014E~307) = nan +* (~inf, ~0.11125369292536007E~307) = inf ++ (~inf, ~0.11125369292536007E~307) = ~inf +- (~inf, ~0.11125369292536007E~307) = ~inf +/ (~inf, ~0.11125369292536007E~307) = inf +nextAfter (~inf, ~0.11125369292536007E~307) = ~inf +rem (~inf, ~0.11125369292536007E~307) = nan +* (~inf, ~0.5E~323) = inf ++ (~inf, ~0.5E~323) = ~inf +- (~inf, ~0.5E~323) = ~inf +/ (~inf, ~0.5E~323) = inf +nextAfter (~inf, ~0.5E~323) = ~inf +rem (~inf, ~0.5E~323) = nan +* (~inf, ~0.0) = nan ++ (~inf, ~0.0) = ~inf +- (~inf, ~0.0) = ~inf +/ (~inf, ~0.0) = inf +nextAfter (~inf, ~0.0) = ~inf +rem (~inf, ~0.0) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (~inf, ~inf) = inf ++ (~inf, ~inf) = ~inf +- (~inf, ~inf) = nan +/ (~inf, ~inf) = nan +nextAfter (~inf, ~inf) = ~inf +rem (~inf, ~inf) = nan +* (~inf, nan) = nan ++ (~inf, nan) = nan +- (~inf, nan) = nan +/ (~inf, nan) = nan +nextAfter (~inf, nan) = nan +rem (~inf, nan) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (nan, 0.17976931348623157E309) = nan ++ (nan, 0.17976931348623157E309) = nan +- (nan, 0.17976931348623157E309) = nan +/ (nan, 0.17976931348623157E309) = nan +nextAfter (nan, 0.17976931348623157E309) = nan +rem (nan, 0.17976931348623157E309) = nan +* (nan, 0.8988465674311579E308) = nan ++ (nan, 0.8988465674311579E308) = nan +- (nan, 0.8988465674311579E308) = nan +/ (nan, 0.8988465674311579E308) = nan +nextAfter (nan, 0.8988465674311579E308) = nan +rem (nan, 0.8988465674311579E308) = nan +* (nan, 0.123E4) = nan ++ (nan, 0.123E4) = nan +- (nan, 0.123E4) = nan +/ (nan, 0.123E4) = nan +nextAfter (nan, 0.123E4) = nan +rem (nan, 0.123E4) = nan +* (nan, 0.123E2) = nan ++ (nan, 0.123E2) = nan +- (nan, 0.123E2) = nan +/ (nan, 0.123E2) = nan +nextAfter (nan, 0.123E2) = nan +rem (nan, 0.123E2) = nan +* (nan, 0.3141592653589793E1) = nan ++ (nan, 0.3141592653589793E1) = nan +- (nan, 0.3141592653589793E1) = nan +/ (nan, 0.3141592653589793E1) = nan +nextAfter (nan, 0.3141592653589793E1) = nan +rem (nan, 0.3141592653589793E1) = nan +* (nan, 0.2718281828459045E1) = nan ++ (nan, 0.2718281828459045E1) = nan +- (nan, 0.2718281828459045E1) = nan +/ (nan, 0.2718281828459045E1) = nan +nextAfter (nan, 0.2718281828459045E1) = nan +rem (nan, 0.2718281828459045E1) = nan +* (nan, 0.123E1) = nan ++ (nan, 0.123E1) = nan +- (nan, 0.123E1) = nan +/ (nan, 0.123E1) = nan +nextAfter (nan, 0.123E1) = nan +rem (nan, 0.123E1) = nan +* (nan, 0.123) = nan ++ (nan, 0.123) = nan +- (nan, 0.123) = nan +/ (nan, 0.123) = nan +nextAfter (nan, 0.123) = nan +rem (nan, 0.123) = nan +* (nan, 0.123E~2) = nan ++ (nan, 0.123E~2) = nan +- (nan, 0.123E~2) = nan +/ (nan, 0.123E~2) = nan +nextAfter (nan, 0.123E~2) = nan +rem (nan, 0.123E~2) = nan +* (nan, 0.22250738585072014E~307) = nan ++ (nan, 0.22250738585072014E~307) = nan +- (nan, 0.22250738585072014E~307) = nan +/ (nan, 0.22250738585072014E~307) = nan +nextAfter (nan, 0.22250738585072014E~307) = nan +rem (nan, 0.22250738585072014E~307) = nan +* (nan, 0.11125369292536007E~307) = nan ++ (nan, 0.11125369292536007E~307) = nan +- (nan, 0.11125369292536007E~307) = nan +/ (nan, 0.11125369292536007E~307) = nan +nextAfter (nan, 0.11125369292536007E~307) = nan +rem (nan, 0.11125369292536007E~307) = nan +* (nan, 0.5E~323) = nan ++ (nan, 0.5E~323) = nan +- (nan, 0.5E~323) = nan +/ (nan, 0.5E~323) = nan +nextAfter (nan, 0.5E~323) = nan +rem (nan, 0.5E~323) = nan +* (nan, 0.0) = nan ++ (nan, 0.0) = nan +- (nan, 0.0) = nan +/ (nan, 0.0) = nan +nextAfter (nan, 0.0) = nan +rem (nan, 0.0) = nan +* (nan, ~0.17976931348623157E309) = nan ++ (nan, ~0.17976931348623157E309) = nan +- (nan, ~0.17976931348623157E309) = nan +/ (nan, ~0.17976931348623157E309) = nan +nextAfter (nan, ~0.17976931348623157E309) = nan +rem (nan, ~0.17976931348623157E309) = nan +* (nan, ~0.8988465674311579E308) = nan ++ (nan, ~0.8988465674311579E308) = nan +- (nan, ~0.8988465674311579E308) = nan +/ (nan, ~0.8988465674311579E308) = nan +nextAfter (nan, ~0.8988465674311579E308) = nan +rem (nan, ~0.8988465674311579E308) = nan +* (nan, ~0.123E4) = nan ++ (nan, ~0.123E4) = nan +- (nan, ~0.123E4) = nan +/ (nan, ~0.123E4) = nan +nextAfter (nan, ~0.123E4) = nan +rem (nan, ~0.123E4) = nan +* (nan, ~0.123E2) = nan ++ (nan, ~0.123E2) = nan +- (nan, ~0.123E2) = nan +/ (nan, ~0.123E2) = nan +nextAfter (nan, ~0.123E2) = nan +rem (nan, ~0.123E2) = nan +* (nan, ~0.3141592653589793E1) = nan ++ (nan, ~0.3141592653589793E1) = nan +- (nan, ~0.3141592653589793E1) = nan +/ (nan, ~0.3141592653589793E1) = nan +nextAfter (nan, ~0.3141592653589793E1) = nan +rem (nan, ~0.3141592653589793E1) = nan +* (nan, ~0.2718281828459045E1) = nan ++ (nan, ~0.2718281828459045E1) = nan +- (nan, ~0.2718281828459045E1) = nan +/ (nan, ~0.2718281828459045E1) = nan +nextAfter (nan, ~0.2718281828459045E1) = nan +rem (nan, ~0.2718281828459045E1) = nan +* (nan, ~0.123E1) = nan ++ (nan, ~0.123E1) = nan +- (nan, ~0.123E1) = nan +/ (nan, ~0.123E1) = nan +nextAfter (nan, ~0.123E1) = nan +rem (nan, ~0.123E1) = nan +* (nan, ~0.123) = nan ++ (nan, ~0.123) = nan +- (nan, ~0.123) = nan +/ (nan, ~0.123) = nan +nextAfter (nan, ~0.123) = nan +rem (nan, ~0.123) = nan +* (nan, ~0.123E~2) = nan ++ (nan, ~0.123E~2) = nan +- (nan, ~0.123E~2) = nan +/ (nan, ~0.123E~2) = nan +nextAfter (nan, ~0.123E~2) = nan +rem (nan, ~0.123E~2) = nan +* (nan, ~0.22250738585072014E~307) = nan ++ (nan, ~0.22250738585072014E~307) = nan +- (nan, ~0.22250738585072014E~307) = nan +/ (nan, ~0.22250738585072014E~307) = nan +nextAfter (nan, ~0.22250738585072014E~307) = nan +rem (nan, ~0.22250738585072014E~307) = nan +* (nan, ~0.11125369292536007E~307) = nan ++ (nan, ~0.11125369292536007E~307) = nan +- (nan, ~0.11125369292536007E~307) = nan +/ (nan, ~0.11125369292536007E~307) = nan +nextAfter (nan, ~0.11125369292536007E~307) = nan +rem (nan, ~0.11125369292536007E~307) = nan +* (nan, ~0.5E~323) = nan ++ (nan, ~0.5E~323) = nan +- (nan, ~0.5E~323) = nan +/ (nan, ~0.5E~323) = nan +nextAfter (nan, ~0.5E~323) = nan +rem (nan, ~0.5E~323) = nan +* (nan, ~0.0) = nan ++ (nan, ~0.0) = nan +- (nan, ~0.0) = nan +/ (nan, ~0.0) = nan +nextAfter (nan, ~0.0) = nan +rem (nan, ~0.0) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (nan, ~inf) = nan ++ (nan, ~inf) = nan +- (nan, ~inf) = nan +/ (nan, ~inf) = nan +nextAfter (nan, ~inf) = nan +rem (nan, ~inf) = nan +* (nan, nan) = nan ++ (nan, nan) = nan +- (nan, nan) = nan +/ (nan, nan) = nan +nextAfter (nan, nan) = nan +rem (nan, nan) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (inf, 0.17976931348623157E309) = inf ++ (inf, 0.17976931348623157E309) = inf +- (inf, 0.17976931348623157E309) = inf +/ (inf, 0.17976931348623157E309) = inf +nextAfter (inf, 0.17976931348623157E309) = inf +rem (inf, 0.17976931348623157E309) = nan +* (inf, 0.8988465674311579E308) = inf ++ (inf, 0.8988465674311579E308) = inf +- (inf, 0.8988465674311579E308) = inf +/ (inf, 0.8988465674311579E308) = inf +nextAfter (inf, 0.8988465674311579E308) = inf +rem (inf, 0.8988465674311579E308) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.3141592653589793E1) = inf ++ (inf, 0.3141592653589793E1) = inf +- (inf, 0.3141592653589793E1) = inf +/ (inf, 0.3141592653589793E1) = inf +nextAfter (inf, 0.3141592653589793E1) = inf +rem (inf, 0.3141592653589793E1) = nan +* (inf, 0.2718281828459045E1) = inf ++ (inf, 0.2718281828459045E1) = inf +- (inf, 0.2718281828459045E1) = inf +/ (inf, 0.2718281828459045E1) = inf +nextAfter (inf, 0.2718281828459045E1) = inf +rem (inf, 0.2718281828459045E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.22250738585072014E~307) = inf ++ (inf, 0.22250738585072014E~307) = inf +- (inf, 0.22250738585072014E~307) = inf +/ (inf, 0.22250738585072014E~307) = inf +nextAfter (inf, 0.22250738585072014E~307) = inf +rem (inf, 0.22250738585072014E~307) = nan +* (inf, 0.11125369292536007E~307) = inf ++ (inf, 0.11125369292536007E~307) = inf +- (inf, 0.11125369292536007E~307) = inf +/ (inf, 0.11125369292536007E~307) = inf +nextAfter (inf, 0.11125369292536007E~307) = inf +rem (inf, 0.11125369292536007E~307) = nan +* (inf, 0.5E~323) = inf ++ (inf, 0.5E~323) = inf +- (inf, 0.5E~323) = inf +/ (inf, 0.5E~323) = inf +nextAfter (inf, 0.5E~323) = inf +rem (inf, 0.5E~323) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.17976931348623157E309) = ~inf ++ (inf, ~0.17976931348623157E309) = inf +- (inf, ~0.17976931348623157E309) = inf +/ (inf, ~0.17976931348623157E309) = ~inf +nextAfter (inf, ~0.17976931348623157E309) = inf +rem (inf, ~0.17976931348623157E309) = nan +* (inf, ~0.8988465674311579E308) = ~inf ++ (inf, ~0.8988465674311579E308) = inf +- (inf, ~0.8988465674311579E308) = inf +/ (inf, ~0.8988465674311579E308) = ~inf +nextAfter (inf, ~0.8988465674311579E308) = inf +rem (inf, ~0.8988465674311579E308) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.3141592653589793E1) = ~inf ++ (inf, ~0.3141592653589793E1) = inf +- (inf, ~0.3141592653589793E1) = inf +/ (inf, ~0.3141592653589793E1) = ~inf +nextAfter (inf, ~0.3141592653589793E1) = inf +rem (inf, ~0.3141592653589793E1) = nan +* (inf, ~0.2718281828459045E1) = ~inf ++ (inf, ~0.2718281828459045E1) = inf +- (inf, ~0.2718281828459045E1) = inf +/ (inf, ~0.2718281828459045E1) = ~inf +nextAfter (inf, ~0.2718281828459045E1) = inf +rem (inf, ~0.2718281828459045E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.22250738585072014E~307) = ~inf ++ (inf, ~0.22250738585072014E~307) = inf +- (inf, ~0.22250738585072014E~307) = inf +/ (inf, ~0.22250738585072014E~307) = ~inf +nextAfter (inf, ~0.22250738585072014E~307) = inf +rem (inf, ~0.22250738585072014E~307) = nan +* (inf, ~0.11125369292536007E~307) = ~inf ++ (inf, ~0.11125369292536007E~307) = inf +- (inf, ~0.11125369292536007E~307) = inf +/ (inf, ~0.11125369292536007E~307) = ~inf +nextAfter (inf, ~0.11125369292536007E~307) = inf +rem (inf, ~0.11125369292536007E~307) = nan +* (inf, ~0.5E~323) = ~inf ++ (inf, ~0.5E~323) = inf +- (inf, ~0.5E~323) = inf +/ (inf, ~0.5E~323) = ~inf +nextAfter (inf, ~0.5E~323) = inf +rem (inf, ~0.5E~323) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan + +Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh,atan2,pow} +acos (0.17976931348623157E309) = nan +asin (0.17976931348623157E309) = nan +atan (0.17976931348623157E309) = 1.570796327 +cos (0.17976931348623157E309) = ~0.9999876894 +cosh (0.17976931348623157E309) = inf +exp (0.17976931348623157E309) = inf +ln (0.17976931348623157E309) = 709.7827129 +log10 (0.17976931348623157E309) = 308.2547156 +sin (0.17976931348623157E309) = 0.004961954789 +sinh (0.17976931348623157E309) = inf +sqrt (0.17976931348623157E309) = 1.340780793E154 +tan (0.17976931348623157E309) = ~0.004962015874 +tanh (0.17976931348623157E309) = 1 +acos (0.8988465674311579E308) = nan +asin (0.8988465674311579E308) = nan +atan (0.8988465674311579E308) = 1.570796327 +cos (0.8988465674311579E308) = 0.00248098503 +cosh (0.8988465674311579E308) = inf +exp (0.8988465674311579E308) = inf +ln (0.8988465674311579E308) = 709.0895657 +log10 (0.8988465674311579E308) = 307.9536856 +sin (0.8988465674311579E308) = 0.9999969224 +sinh (0.8988465674311579E308) = inf +sqrt (0.8988465674311579E308) = 9.480751908E153 +tan (0.8988465674311579E308) = 403.0644725 +tanh (0.8988465674311579E308) = 1 +acos (0.123E4) = nan +asin (0.123E4) = nan +atan (0.123E4) = 1.569983319 +cos (0.123E4) = 0.06642716993 +cosh (0.123E4) = inf +exp (0.123E4) = inf +ln (0.123E4) = 7.114769448 +log10 (0.123E4) = 3.089905111 +sin (0.123E4) = ~0.9977912763 +sinh (0.123E4) = inf +sqrt (0.123E4) = 35.07135583 +tan (0.123E4) = ~15.02083074 +tanh (0.123E4) = 1 +acos (0.123E2) = nan +asin (0.123E2) = nan +atan (0.123E2) = 1.489673935 +cos (0.123E2) = 0.9647326179 +cosh (0.123E2) = 109847.9943 +exp (0.123E2) = 219695.9887 +ln (0.123E2) = 2.509599262 +log10 (0.123E2) = 1.089905111 +sin (0.123E2) = ~0.2632317914 +sinh (0.123E2) = 109847.9943 +sqrt (0.123E2) = 3.507135583 +tan (0.123E2) = ~0.272854661 +tanh (0.123E2) = 1 +acos (0.3141592653589793E1) = nan +asin (0.3141592653589793E1) = nan +atan (0.3141592653589793E1) = 1.262627256 +cos (0.3141592653589793E1) = ~1 +cosh (0.3141592653589793E1) = 11.59195328 +exp (0.3141592653589793E1) = 23.14069263 +ln (0.3141592653589793E1) = 1.144729886 +log10 (0.3141592653589793E1) = 0.4971498727 +sin (0.3141592653589793E1) = 1.224646799E~16 +sinh (0.3141592653589793E1) = 11.54873936 +sqrt (0.3141592653589793E1) = 1.772453851 +tan (0.3141592653589793E1) = ~1.224646799E~16 +tanh (0.3141592653589793E1) = 0.9962720762 +acos (0.2718281828459045E1) = nan +asin (0.2718281828459045E1) = nan +atan (0.2718281828459045E1) = 1.218282905 +cos (0.2718281828459045E1) = ~0.9117339148 +cosh (0.2718281828459045E1) = 7.610125139 +exp (0.2718281828459045E1) = 15.15426224 +ln (0.2718281828459045E1) = 1 +log10 (0.2718281828459045E1) = 0.4342944819 +sin (0.2718281828459045E1) = 0.4107812905 +sinh (0.2718281828459045E1) = 7.544137103 +sqrt (0.2718281828459045E1) = 1.648721271 +tan (0.2718281828459045E1) = ~0.4505495341 +tanh (0.2718281828459045E1) = 0.9913289158 +acos (0.123E1) = nan +asin (0.123E1) = nan +atan (0.123E1) = 0.8881737744 +cos (0.123E1) = 0.3342377271 +cosh (0.123E1) = 1.856761057 +exp (0.123E1) = 3.421229536 +ln (0.123E1) = 0.2070141694 +log10 (0.123E1) = 0.08990511144 +sin (0.123E1) = 0.9424888019 +sinh (0.123E1) = 1.564468479 +sqrt (0.123E1) = 1.109053651 +tan (0.123E1) = 2.819815734 +tanh (0.123E1) = 0.8425793257 +acos (0.123) = 1.447484052 +asin (0.123) = 0.1233122752 +atan (0.123) = 0.1223852815 +cos (0.123) = 0.9924450321 +cosh (0.123) = 1.007574042 +exp (0.123) = 1.130884421 +ln (0.123) = ~2.095570924 +log10 (0.123) = ~0.9100948886 +sin (0.123) = 0.12269009 +sinh (0.123) = 0.1233103792 +sqrt (0.123) = 0.3507135583 +tan (0.123) = 0.1236240659 +tanh (0.123) = 0.1223834419 +acos (0.123E~2) = 1.569566326 +asin (0.123E~2) = 0.00123000031 +atan (0.123E~2) = 0.00122999938 +cos (0.123E~2) = 0.9999992436 +cosh (0.123E~2) = 1.000000756 +exp (0.123E~2) = 1.001230757 +ln (0.123E~2) = ~6.70074111 +log10 (0.123E~2) = ~2.910094889 +sin (0.123E~2) = 0.00122999969 +sinh (0.123E~2) = 0.00123000031 +sqrt (0.123E~2) = 0.03507135583 +tan (0.123E~2) = 0.00123000062 +tanh (0.123E~2) = 0.00122999938 +acos (0.22250738585072014E~307) = 1.570796327 +asin (0.22250738585072014E~307) = 2.225073859E~308 +atan (0.22250738585072014E~307) = 2.225073859E~308 +cos (0.22250738585072014E~307) = 1 +cosh (0.22250738585072014E~307) = 1 +exp (0.22250738585072014E~307) = 1 +ln (0.22250738585072014E~307) = ~708.3964185 +log10 (0.22250738585072014E~307) = ~307.6526556 +sin (0.22250738585072014E~307) = 2.225073859E~308 +sinh (0.22250738585072014E~307) = 2.225073859E~308 +sqrt (0.22250738585072014E~307) = 1.491668146E~154 +tan (0.22250738585072014E~307) = 2.225073859E~308 +tanh (0.22250738585072014E~307) = 2.225073859E~308 +acos (0.11125369292536007E~307) = 1.570796327 +asin (0.11125369292536007E~307) = 1.112536929E~308 +atan (0.11125369292536007E~307) = 1.112536929E~308 +cos (0.11125369292536007E~307) = 1 +cosh (0.11125369292536007E~307) = 1 +exp (0.11125369292536007E~307) = 1 +ln (0.11125369292536007E~307) = ~709.0895657 +log10 (0.11125369292536007E~307) = ~307.9536856 +sin (0.11125369292536007E~307) = 1.112536929E~308 +sinh (0.11125369292536007E~307) = 1.112536929E~308 +sqrt (0.11125369292536007E~307) = 1.054768661E~154 +tan (0.11125369292536007E~307) = 1.112536929E~308 +tanh (0.11125369292536007E~307) = 1.112536929E~308 +acos (0.5E~323) = 1.570796327 +asin (0.5E~323) = 4.940656458E~324 +atan (0.5E~323) = 4.940656458E~324 +cos (0.5E~323) = 1 +cosh (0.5E~323) = 1 +exp (0.5E~323) = 1 +ln (0.5E~323) = ~744.4400719 +log10 (0.5E~323) = ~323.3062153 +sin (0.5E~323) = 4.940656458E~324 +sinh (0.5E~323) = 4.940656458E~324 +sqrt (0.5E~323) = 2.222758749E~162 +tan (0.5E~323) = 4.940656458E~324 +tanh (0.5E~323) = 4.940656458E~324 +acos (0.0) = 1.570796327 +asin (0.0) = 0 +atan (0.0) = 0 +cos (0.0) = 1 +cosh (0.0) = 1 +exp (0.0) = 1 +ln (0.0) = ~inf +log10 (0.0) = ~inf +sin (0.0) = 0 +sinh (0.0) = 0 +sqrt (0.0) = 0 +tan (0.0) = 0 +tanh (0.0) = 0 +acos (~0.17976931348623157E309) = nan +asin (~0.17976931348623157E309) = nan +atan (~0.17976931348623157E309) = ~1.570796327 +cos (~0.17976931348623157E309) = ~0.9999876894 +cosh (~0.17976931348623157E309) = inf +exp (~0.17976931348623157E309) = 0 +ln (~0.17976931348623157E309) = nan +log10 (~0.17976931348623157E309) = nan +sin (~0.17976931348623157E309) = ~0.004961954789 +sinh (~0.17976931348623157E309) = ~inf +sqrt (~0.17976931348623157E309) = nan +tan (~0.17976931348623157E309) = 0.004962015874 +tanh (~0.17976931348623157E309) = ~1 +acos (~0.8988465674311579E308) = nan +asin (~0.8988465674311579E308) = nan +atan (~0.8988465674311579E308) = ~1.570796327 +cos (~0.8988465674311579E308) = 0.00248098503 +cosh (~0.8988465674311579E308) = inf +exp (~0.8988465674311579E308) = 0 +ln (~0.8988465674311579E308) = nan +log10 (~0.8988465674311579E308) = nan +sin (~0.8988465674311579E308) = ~0.9999969224 +sinh (~0.8988465674311579E308) = ~inf +sqrt (~0.8988465674311579E308) = nan +tan (~0.8988465674311579E308) = ~403.0644725 +tanh (~0.8988465674311579E308) = ~1 +acos (~0.123E4) = nan +asin (~0.123E4) = nan +atan (~0.123E4) = ~1.569983319 +cos (~0.123E4) = 0.06642716993 +cosh (~0.123E4) = inf +exp (~0.123E4) = 0 +ln (~0.123E4) = nan +log10 (~0.123E4) = nan +sin (~0.123E4) = 0.9977912763 +sinh (~0.123E4) = ~inf +sqrt (~0.123E4) = nan +tan (~0.123E4) = 15.02083074 +tanh (~0.123E4) = ~1 +acos (~0.123E2) = nan +asin (~0.123E2) = nan +atan (~0.123E2) = ~1.489673935 +cos (~0.123E2) = 0.9647326179 +cosh (~0.123E2) = 109847.9943 +exp (~0.123E2) = 4.551744463E~6 +ln (~0.123E2) = nan +log10 (~0.123E2) = nan +sin (~0.123E2) = 0.2632317914 +sinh (~0.123E2) = ~109847.9943 +sqrt (~0.123E2) = nan +tan (~0.123E2) = 0.272854661 +tanh (~0.123E2) = ~1 +acos (~0.3141592653589793E1) = nan +asin (~0.3141592653589793E1) = nan +atan (~0.3141592653589793E1) = ~1.262627256 +cos (~0.3141592653589793E1) = ~1 +cosh (~0.3141592653589793E1) = 11.59195328 +exp (~0.3141592653589793E1) = 0.04321391826 +ln (~0.3141592653589793E1) = nan +log10 (~0.3141592653589793E1) = nan +sin (~0.3141592653589793E1) = ~1.224646799E~16 +sinh (~0.3141592653589793E1) = ~11.54873936 +sqrt (~0.3141592653589793E1) = nan +tan (~0.3141592653589793E1) = 1.224646799E~16 +tanh (~0.3141592653589793E1) = ~0.9962720762 +acos (~0.2718281828459045E1) = nan +asin (~0.2718281828459045E1) = nan +atan (~0.2718281828459045E1) = ~1.218282905 +cos (~0.2718281828459045E1) = ~0.9117339148 +cosh (~0.2718281828459045E1) = 7.610125139 +exp (~0.2718281828459045E1) = 0.06598803585 +ln (~0.2718281828459045E1) = nan +log10 (~0.2718281828459045E1) = nan +sin (~0.2718281828459045E1) = ~0.4107812905 +sinh (~0.2718281828459045E1) = ~7.544137103 +sqrt (~0.2718281828459045E1) = nan +tan (~0.2718281828459045E1) = 0.4505495341 +tanh (~0.2718281828459045E1) = ~0.9913289158 +acos (~0.123E1) = nan +asin (~0.123E1) = nan +atan (~0.123E1) = ~0.8881737744 +cos (~0.123E1) = 0.3342377271 +cosh (~0.123E1) = 1.856761057 +exp (~0.123E1) = 0.2922925777 +ln (~0.123E1) = nan +log10 (~0.123E1) = nan +sin (~0.123E1) = ~0.9424888019 +sinh (~0.123E1) = ~1.564468479 +sqrt (~0.123E1) = nan +tan (~0.123E1) = ~2.819815734 +tanh (~0.123E1) = ~0.8425793257 +acos (~0.123) = 1.694108602 +asin (~0.123) = ~0.1233122752 +atan (~0.123) = ~0.1223852815 +cos (~0.123) = 0.9924450321 +cosh (~0.123) = 1.007574042 +exp (~0.123) = 0.8842636626 +ln (~0.123) = nan +log10 (~0.123) = nan +sin (~0.123) = ~0.12269009 +sinh (~0.123) = ~0.1233103792 +sqrt (~0.123) = nan +tan (~0.123) = ~0.1236240659 +tanh (~0.123) = ~0.1223834419 +acos (~0.123E~2) = 1.572026327 +asin (~0.123E~2) = ~0.00123000031 +atan (~0.123E~2) = ~0.00122999938 +cos (~0.123E~2) = 0.9999992436 +cosh (~0.123E~2) = 1.000000756 +exp (~0.123E~2) = 0.9987707561 +ln (~0.123E~2) = nan +log10 (~0.123E~2) = nan +sin (~0.123E~2) = ~0.00122999969 +sinh (~0.123E~2) = ~0.00123000031 +sqrt (~0.123E~2) = nan +tan (~0.123E~2) = ~0.00123000062 +tanh (~0.123E~2) = ~0.00122999938 +acos (~0.22250738585072014E~307) = 1.570796327 +asin (~0.22250738585072014E~307) = ~2.225073859E~308 +atan (~0.22250738585072014E~307) = ~2.225073859E~308 +cos (~0.22250738585072014E~307) = 1 +cosh (~0.22250738585072014E~307) = 1 +exp (~0.22250738585072014E~307) = 1 +ln (~0.22250738585072014E~307) = nan +log10 (~0.22250738585072014E~307) = nan +sin (~0.22250738585072014E~307) = ~2.225073859E~308 +sinh (~0.22250738585072014E~307) = ~2.225073859E~308 +sqrt (~0.22250738585072014E~307) = nan +tan (~0.22250738585072014E~307) = ~2.225073859E~308 +tanh (~0.22250738585072014E~307) = ~2.225073859E~308 +acos (~0.11125369292536007E~307) = 1.570796327 +asin (~0.11125369292536007E~307) = ~1.112536929E~308 +atan (~0.11125369292536007E~307) = ~1.112536929E~308 +cos (~0.11125369292536007E~307) = 1 +cosh (~0.11125369292536007E~307) = 1 +exp (~0.11125369292536007E~307) = 1 +ln (~0.11125369292536007E~307) = nan +log10 (~0.11125369292536007E~307) = nan +sin (~0.11125369292536007E~307) = ~1.112536929E~308 +sinh (~0.11125369292536007E~307) = ~1.112536929E~308 +sqrt (~0.11125369292536007E~307) = nan +tan (~0.11125369292536007E~307) = ~1.112536929E~308 +tanh (~0.11125369292536007E~307) = ~1.112536929E~308 +acos (~0.5E~323) = 1.570796327 +asin (~0.5E~323) = ~4.940656458E~324 +atan (~0.5E~323) = ~4.940656458E~324 +cos (~0.5E~323) = 1 +cosh (~0.5E~323) = 1 +exp (~0.5E~323) = 1 +ln (~0.5E~323) = nan +log10 (~0.5E~323) = nan +sin (~0.5E~323) = ~4.940656458E~324 +sinh (~0.5E~323) = ~4.940656458E~324 +sqrt (~0.5E~323) = nan +tan (~0.5E~323) = ~4.940656458E~324 +tanh (~0.5E~323) = ~4.940656458E~324 +acos (~0.0) = 1.570796327 +asin (~0.0) = 0 +atan (~0.0) = 0 +cos (~0.0) = 1 +cosh (~0.0) = 1 +exp (~0.0) = 1 +ln (~0.0) = ~inf +log10 (~0.0) = ~inf +sin (~0.0) = 0 +sinh (~0.0) = 0 +sqrt (~0.0) = 0 +tan (~0.0) = 0 +tanh (~0.0) = 0 +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796327 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +acos (~inf) = nan +asin (~inf) = nan +atan (~inf) = ~1.570796327 +cos (~inf) = nan +cosh (~inf) = ~inf +exp (~inf) = 0 +ln (~inf) = nan +log10 (~inf) = nan +sin (~inf) = nan +sinh (~inf) = ~inf +sqrt (~inf) = nan +tan (~inf) = nan +tanh (~inf) = ~1 +acos (nan) = nan +asin (nan) = nan +atan (nan) = nan +cos (nan) = nan +cosh (nan) = nan +exp (nan) = nan +ln (nan) = nan +log10 (nan) = nan +sin (nan) = nan +sinh (nan) = nan +sqrt (nan) = nan +tan (nan) = nan +tanh (nan) = nan +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796327 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +atan2 (0.17976931348623157E309, 0.17976931348623157E309) = 0.7853981634 +pow (0.17976931348623157E309, 0.17976931348623157E309) = inf +atan2 (0.17976931348623157E309, 0.8988465674311579E308) = 1.107148718 +pow (0.17976931348623157E309, 0.8988465674311579E308) = inf +atan2 (0.17976931348623157E309, 0.123E4) = 1.570796327 +pow (0.17976931348623157E309, 0.123E4) = inf +atan2 (0.17976931348623157E309, 0.123E2) = 1.570796327 +pow (0.17976931348623157E309, 0.123E2) = inf +atan2 (0.17976931348623157E309, 0.3141592653589793E1) = 1.570796327 +pow (0.17976931348623157E309, 0.3141592653589793E1) = inf +atan2 (0.17976931348623157E309, 0.2718281828459045E1) = 1.570796327 +pow (0.17976931348623157E309, 0.2718281828459045E1) = inf +atan2 (0.17976931348623157E309, 0.123E1) = 1.570796327 +pow (0.17976931348623157E309, 0.123E1) = inf +atan2 (0.17976931348623157E309, 0.123) = 1.570796327 +pow (0.17976931348623157E309, 0.123) = 8.228676973E37 +atan2 (0.17976931348623157E309, 0.123E~2) = 1.570796327 +pow (0.17976931348623157E309, 0.123E~2) = 2.394160714 +atan2 (0.17976931348623157E309, 0.22250738585072014E~307) = 1.570796327 +pow (0.17976931348623157E309, 0.22250738585072014E~307) = 1 +atan2 (0.17976931348623157E309, 0.11125369292536007E~307) = 1.570796327 +pow (0.17976931348623157E309, 0.11125369292536007E~307) = 1 +atan2 (0.17976931348623157E309, 0.5E~323) = 1.570796327 +pow (0.17976931348623157E309, 0.5E~323) = 1 +atan2 (0.17976931348623157E309, 0.0) = 1.570796327 +pow (0.17976931348623157E309, 0.0) = 1 +atan2 (0.17976931348623157E309, ~0.17976931348623157E309) = 2.35619449 +pow (0.17976931348623157E309, ~0.17976931348623157E309) = 0 +atan2 (0.17976931348623157E309, ~0.8988465674311579E308) = 2.034443936 +pow (0.17976931348623157E309, ~0.8988465674311579E308) = 0 +atan2 (0.17976931348623157E309, ~0.123E4) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E4) = 0 +atan2 (0.17976931348623157E309, ~0.123E2) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E2) = 0 +atan2 (0.17976931348623157E309, ~0.3141592653589793E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.3141592653589793E1) = 0 +atan2 (0.17976931348623157E309, ~0.2718281828459045E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.2718281828459045E1) = 0 +atan2 (0.17976931348623157E309, ~0.123E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E1) = 0 +atan2 (0.17976931348623157E309, ~0.123) = 1.570796327 +pow (0.17976931348623157E309, ~0.123) = 1.21526219E~38 +atan2 (0.17976931348623157E309, ~0.123E~2) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E~2) = 0.4176829041 +atan2 (0.17976931348623157E309, ~0.22250738585072014E~307) = 1.570796327 +pow (0.17976931348623157E309, ~0.22250738585072014E~307) = 1 +atan2 (0.17976931348623157E309, ~0.11125369292536007E~307) = 1.570796327 +pow (0.17976931348623157E309, ~0.11125369292536007E~307) = 1 +atan2 (0.17976931348623157E309, ~0.5E~323) = 1.570796327 +pow (0.17976931348623157E309, ~0.5E~323) = 1 +atan2 (0.17976931348623157E309, ~0.0) = 1.570796327 +pow (0.17976931348623157E309, ~0.0) = 1 +atan2 (0.17976931348623157E309, inf) = 0 +pow (0.17976931348623157E309, inf) = inf +atan2 (0.17976931348623157E309, ~inf) = 3.141592654 +pow (0.17976931348623157E309, ~inf) = 0 +atan2 (0.17976931348623157E309, nan) = nan +pow (0.17976931348623157E309, nan) = nan +atan2 (0.17976931348623157E309, inf) = 0 +pow (0.17976931348623157E309, inf) = inf +atan2 (0.8988465674311579E308, 0.17976931348623157E309) = 0.463647609 +pow (0.8988465674311579E308, 0.17976931348623157E309) = inf +atan2 (0.8988465674311579E308, 0.8988465674311579E308) = 0.7853981634 +pow (0.8988465674311579E308, 0.8988465674311579E308) = inf +atan2 (0.8988465674311579E308, 0.123E4) = 1.570796327 +pow (0.8988465674311579E308, 0.123E4) = inf +atan2 (0.8988465674311579E308, 0.123E2) = 1.570796327 +pow (0.8988465674311579E308, 0.123E2) = inf +atan2 (0.8988465674311579E308, 0.3141592653589793E1) = 1.570796327 +pow (0.8988465674311579E308, 0.3141592653589793E1) = inf +atan2 (0.8988465674311579E308, 0.2718281828459045E1) = 1.570796327 +pow (0.8988465674311579E308, 0.2718281828459045E1) = inf +atan2 (0.8988465674311579E308, 0.123E1) = 1.570796327 +pow (0.8988465674311579E308, 0.123E1) = inf +atan2 (0.8988465674311579E308, 0.123) = 1.570796327 +pow (0.8988465674311579E308, 0.123) = 7.556197911E37 +atan2 (0.8988465674311579E308, 0.123E~2) = 1.570796327 +pow (0.8988465674311579E308, 0.123E~2) = 2.392120392 +atan2 (0.8988465674311579E308, 0.22250738585072014E~307) = 1.570796327 +pow (0.8988465674311579E308, 0.22250738585072014E~307) = 1 +atan2 (0.8988465674311579E308, 0.11125369292536007E~307) = 1.570796327 +pow (0.8988465674311579E308, 0.11125369292536007E~307) = 1 +atan2 (0.8988465674311579E308, 0.5E~323) = 1.570796327 +pow (0.8988465674311579E308, 0.5E~323) = 1 +atan2 (0.8988465674311579E308, 0.0) = 1.570796327 +pow (0.8988465674311579E308, 0.0) = 1 +atan2 (0.8988465674311579E308, ~0.17976931348623157E309) = 2.677945045 +pow (0.8988465674311579E308, ~0.17976931348623157E309) = 0 +atan2 (0.8988465674311579E308, ~0.8988465674311579E308) = 2.35619449 +pow (0.8988465674311579E308, ~0.8988465674311579E308) = 0 +atan2 (0.8988465674311579E308, ~0.123E4) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E4) = 0 +atan2 (0.8988465674311579E308, ~0.123E2) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E2) = 0 +atan2 (0.8988465674311579E308, ~0.3141592653589793E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.3141592653589793E1) = 0 +atan2 (0.8988465674311579E308, ~0.2718281828459045E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.2718281828459045E1) = 0 +atan2 (0.8988465674311579E308, ~0.123E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E1) = 0 +atan2 (0.8988465674311579E308, ~0.123) = 1.570796327 +pow (0.8988465674311579E308, ~0.123) = 1.323416898E~38 +atan2 (0.8988465674311579E308, ~0.123E~2) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E~2) = 0.4180391603 +atan2 (0.8988465674311579E308, ~0.22250738585072014E~307) = 1.570796327 +pow (0.8988465674311579E308, ~0.22250738585072014E~307) = 1 +atan2 (0.8988465674311579E308, ~0.11125369292536007E~307) = 1.570796327 +pow (0.8988465674311579E308, ~0.11125369292536007E~307) = 1 +atan2 (0.8988465674311579E308, ~0.5E~323) = 1.570796327 +pow (0.8988465674311579E308, ~0.5E~323) = 1 +atan2 (0.8988465674311579E308, ~0.0) = 1.570796327 +pow (0.8988465674311579E308, ~0.0) = 1 +atan2 (0.8988465674311579E308, inf) = 0 +pow (0.8988465674311579E308, inf) = inf +atan2 (0.8988465674311579E308, ~inf) = 3.141592654 +pow (0.8988465674311579E308, ~inf) = 0 +atan2 (0.8988465674311579E308, nan) = nan +pow (0.8988465674311579E308, nan) = nan +atan2 (0.8988465674311579E308, inf) = 0 +pow (0.8988465674311579E308, inf) = inf +atan2 (0.123E4, 0.17976931348623157E309) = 6.842102115E~306 +pow (0.123E4, 0.17976931348623157E309) = inf +atan2 (0.123E4, 0.8988465674311579E308) = 1.368420423E~305 +pow (0.123E4, 0.8988465674311579E308) = inf +atan2 (0.123E4, 0.123E4) = 0.7853981634 +pow (0.123E4, 0.123E4) = inf +atan2 (0.123E4, 0.123E2) = 1.56079666 +pow (0.123E4, 0.123E2) = 1.013521278E38 +atan2 (0.123E4, 0.3141592653589793E1) = 1.568242192 +pow (0.123E4, 0.3141592653589793E1) = 5095927004 +atan2 (0.123E4, 0.2718281828459045E1) = 1.568586345 +pow (0.123E4, 0.2718281828459045E1) = 250745366.3 +atan2 (0.123E4, 0.123E1) = 1.569796327 +pow (0.123E4, 0.123E1) = 6318.053325 +atan2 (0.123E4, 0.123) = 1.570696327 +pow (0.123E4, 0.123) = 2.39915512 +atan2 (0.123E4, 0.123E~2) = 1.570795327 +pow (0.123E4, 0.123E~2) = 1.00878957 +atan2 (0.123E4, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E4, 0.22250738585072014E~307) = 1 +atan2 (0.123E4, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E4, 0.11125369292536007E~307) = 1 +atan2 (0.123E4, 0.5E~323) = 1.570796327 +pow (0.123E4, 0.5E~323) = 1 +atan2 (0.123E4, 0.0) = 1.570796327 +pow (0.123E4, 0.0) = 1 +atan2 (0.123E4, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E4, ~0.17976931348623157E309) = 0 +atan2 (0.123E4, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E4, ~0.8988465674311579E308) = 0 +atan2 (0.123E4, ~0.123E4) = 2.35619449 +pow (0.123E4, ~0.123E4) = 0 +atan2 (0.123E4, ~0.123E2) = 1.580795993 +pow (0.123E4, ~0.123E2) = 9.86659108E~39 +atan2 (0.123E4, ~0.3141592653589793E1) = 1.573350462 +pow (0.123E4, ~0.3141592653589793E1) = 1.9623515E~10 +atan2 (0.123E4, ~0.2718281828459045E1) = 1.573006308 +pow (0.123E4, ~0.2718281828459045E1) = 3.98810959E~9 +atan2 (0.123E4, ~0.123E1) = 1.571796326 +pow (0.123E4, ~0.123E1) = 1.582766002E~4 +atan2 (0.123E4, ~0.123) = 1.570896327 +pow (0.123E4, ~0.123) = 0.4168133988 +atan2 (0.123E4, ~0.123E~2) = 1.570797327 +pow (0.123E4, ~0.123E~2) = 0.9912870136 +atan2 (0.123E4, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E4, ~0.22250738585072014E~307) = 1 +atan2 (0.123E4, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E4, ~0.11125369292536007E~307) = 1 +atan2 (0.123E4, ~0.5E~323) = 1.570796327 +pow (0.123E4, ~0.5E~323) = 1 +atan2 (0.123E4, ~0.0) = 1.570796327 +pow (0.123E4, ~0.0) = 1 +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E4, ~inf) = 3.141592654 +pow (0.123E4, ~inf) = 0 +atan2 (0.123E4, nan) = nan +pow (0.123E4, nan) = nan +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E2, 0.17976931348623157E309) = 6.842102115E~308 +pow (0.123E2, 0.17976931348623157E309) = inf +atan2 (0.123E2, 0.8988465674311579E308) = 1.368420423E~307 +pow (0.123E2, 0.8988465674311579E308) = inf +atan2 (0.123E2, 0.123E4) = 0.009999666687 +pow (0.123E2, 0.123E4) = inf +atan2 (0.123E2, 0.123E2) = 0.7853981634 +pow (0.123E2, 0.123E2) = 2.545850346E13 +atan2 (0.123E2, 0.3141592653589793E1) = 1.320728626 +pow (0.123E2, 0.3141592653589793E1) = 2654.83718 +atan2 (0.123E2, 0.2718281828459045E1) = 1.353293796 +pow (0.123E2, 0.2718281828459045E1) = 917.6334984 +atan2 (0.123E2, 0.123E1) = 1.471127674 +pow (0.123E2, 0.123E1) = 21.90701911 +atan2 (0.123E2, 0.123) = 1.56079666 +pow (0.123E2, 0.123) = 1.361627546 +atan2 (0.123E2, 0.123E~2) = 1.570696327 +pow (0.123E2, 0.123E~2) = 1.003091576 +atan2 (0.123E2, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E2, 0.22250738585072014E~307) = 1 +atan2 (0.123E2, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E2, 0.11125369292536007E~307) = 1 +atan2 (0.123E2, 0.5E~323) = 1.570796327 +pow (0.123E2, 0.5E~323) = 1 +atan2 (0.123E2, 0.0) = 1.570796327 +pow (0.123E2, 0.0) = 1 +atan2 (0.123E2, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E2, ~0.17976931348623157E309) = 0 +atan2 (0.123E2, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E2, ~0.8988465674311579E308) = 0 +atan2 (0.123E2, ~0.123E4) = 3.131592987 +pow (0.123E2, ~0.123E4) = 0 +atan2 (0.123E2, ~0.123E2) = 2.35619449 +pow (0.123E2, ~0.123E2) = 3.927960658E~14 +atan2 (0.123E2, ~0.3141592653589793E1) = 1.820864027 +pow (0.123E2, ~0.3141592653589793E1) = 3.766709339E~4 +atan2 (0.123E2, ~0.2718281828459045E1) = 1.788298857 +pow (0.123E2, ~0.2718281828459045E1) = 0.001089759694 +atan2 (0.123E2, ~0.123E1) = 1.670464979 +pow (0.123E2, ~0.123E1) = 0.04564747011 +atan2 (0.123E2, ~0.123) = 1.580795993 +pow (0.123E2, ~0.123) = 0.7344152246 +atan2 (0.123E2, ~0.123E~2) = 1.570896327 +pow (0.123E2, ~0.123E~2) = 0.9969179522 +atan2 (0.123E2, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E2, ~0.22250738585072014E~307) = 1 +atan2 (0.123E2, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E2, ~0.11125369292536007E~307) = 1 +atan2 (0.123E2, ~0.5E~323) = 1.570796327 +pow (0.123E2, ~0.5E~323) = 1 +atan2 (0.123E2, ~0.0) = 1.570796327 +pow (0.123E2, ~0.0) = 1 +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.123E2, ~inf) = 3.141592654 +pow (0.123E2, ~inf) = 0 +atan2 (0.123E2, nan) = nan +pow (0.123E2, nan) = nan +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.3141592653589793E1, 0.17976931348623157E309) = 1.747568922E~308 +pow (0.3141592653589793E1, 0.17976931348623157E309) = inf +atan2 (0.3141592653589793E1, 0.8988465674311579E308) = 3.495137844E~308 +pow (0.3141592653589793E1, 0.8988465674311579E308) = inf +atan2 (0.3141592653589793E1, 0.123E4) = 0.002554134815 +pow (0.3141592653589793E1, 0.123E4) = inf +atan2 (0.3141592653589793E1, 0.123E2) = 0.2500677004 +pow (0.3141592653589793E1, 0.123E2) = 1302997.055 +atan2 (0.3141592653589793E1, 0.3141592653589793E1) = 0.7853981634 +pow (0.3141592653589793E1, 0.3141592653589793E1) = 36.46215961 +atan2 (0.3141592653589793E1, 0.2718281828459045E1) = 0.8575117864 +pow (0.3141592653589793E1, 0.2718281828459045E1) = 22.45915772 +atan2 (0.3141592653589793E1, 0.123E1) = 1.197620596 +pow (0.3141592653589793E1, 0.123E1) = 4.087844278 +atan2 (0.3141592653589793E1, 0.123) = 1.531664198 +pow (0.3141592653589793E1, 0.123) = 1.151196431 +atan2 (0.3141592653589793E1, 0.123E~2) = 1.570404806 +pow (0.3141592653589793E1, 0.123E~2) = 1.001409009 +atan2 (0.3141592653589793E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.3141592653589793E1, 0.22250738585072014E~307) = 1 +atan2 (0.3141592653589793E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.3141592653589793E1, 0.11125369292536007E~307) = 1 +atan2 (0.3141592653589793E1, 0.5E~323) = 1.570796327 +pow (0.3141592653589793E1, 0.5E~323) = 1 +atan2 (0.3141592653589793E1, 0.0) = 1.570796327 +pow (0.3141592653589793E1, 0.0) = 1 +atan2 (0.3141592653589793E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.3141592653589793E1, ~0.17976931348623157E309) = 0 +atan2 (0.3141592653589793E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.3141592653589793E1, ~0.8988465674311579E308) = 0 +atan2 (0.3141592653589793E1, ~0.123E4) = 3.139038519 +pow (0.3141592653589793E1, ~0.123E4) = 0 +atan2 (0.3141592653589793E1, ~0.123E2) = 2.891524953 +pow (0.3141592653589793E1, ~0.123E2) = 7.674614429E~7 +atan2 (0.3141592653589793E1, ~0.3141592653589793E1) = 2.35619449 +pow (0.3141592653589793E1, ~0.3141592653589793E1) = 0.02742569312 +atan2 (0.3141592653589793E1, ~0.2718281828459045E1) = 2.284080867 +pow (0.3141592653589793E1, ~0.2718281828459045E1) = 0.04452526727 +atan2 (0.3141592653589793E1, ~0.123E1) = 1.943972057 +pow (0.3141592653589793E1, ~0.123E1) = 0.2446277138 +atan2 (0.3141592653589793E1, ~0.123) = 1.609928456 +pow (0.3141592653589793E1, ~0.123) = 0.8686614842 +atan2 (0.3141592653589793E1, ~0.123E~2) = 1.571187848 +pow (0.3141592653589793E1, ~0.123E~2) = 0.998592973 +atan2 (0.3141592653589793E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.3141592653589793E1, ~0.22250738585072014E~307) = 1 +atan2 (0.3141592653589793E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.3141592653589793E1, ~0.11125369292536007E~307) = 1 +atan2 (0.3141592653589793E1, ~0.5E~323) = 1.570796327 +pow (0.3141592653589793E1, ~0.5E~323) = 1 +atan2 (0.3141592653589793E1, ~0.0) = 1.570796327 +pow (0.3141592653589793E1, ~0.0) = 1 +atan2 (0.3141592653589793E1, inf) = 0 +pow (0.3141592653589793E1, inf) = inf +atan2 (0.3141592653589793E1, ~inf) = 3.141592654 +pow (0.3141592653589793E1, ~inf) = 0 +atan2 (0.3141592653589793E1, nan) = nan +pow (0.3141592653589793E1, nan) = nan +atan2 (0.3141592653589793E1, inf) = 0 +pow (0.3141592653589793E1, inf) = inf +atan2 (0.2718281828459045E1, 0.17976931348623157E309) = 1.512094459E~308 +pow (0.2718281828459045E1, 0.17976931348623157E309) = inf +atan2 (0.2718281828459045E1, 0.8988465674311579E308) = 3.024188918E~308 +pow (0.2718281828459045E1, 0.8988465674311579E308) = inf +atan2 (0.2718281828459045E1, 0.123E4) = 0.002209981629 +pow (0.2718281828459045E1, 0.123E4) = inf +atan2 (0.2718281828459045E1, 0.123E2) = 0.2175025304 +pow (0.2718281828459045E1, 0.123E2) = 219695.9887 +atan2 (0.2718281828459045E1, 0.3141592653589793E1) = 0.7132845404 +pow (0.2718281828459045E1, 0.3141592653589793E1) = 23.14069263 +atan2 (0.2718281828459045E1, 0.2718281828459045E1) = 0.7853981634 +pow (0.2718281828459045E1, 0.2718281828459045E1) = 15.15426224 +atan2 (0.2718281828459045E1, 0.123E1) = 1.145872224 +pow (0.2718281828459045E1, 0.123E1) = 3.421229536 +atan2 (0.2718281828459045E1, 0.123) = 1.525578 +pow (0.2718281828459045E1, 0.123) = 1.130884421 +atan2 (0.2718281828459045E1, 0.123E~2) = 1.570343835 +pow (0.2718281828459045E1, 0.123E~2) = 1.001230757 +atan2 (0.2718281828459045E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.2718281828459045E1, 0.22250738585072014E~307) = 1 +atan2 (0.2718281828459045E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.2718281828459045E1, 0.11125369292536007E~307) = 1 +atan2 (0.2718281828459045E1, 0.5E~323) = 1.570796327 +pow (0.2718281828459045E1, 0.5E~323) = 1 +atan2 (0.2718281828459045E1, 0.0) = 1.570796327 +pow (0.2718281828459045E1, 0.0) = 1 +atan2 (0.2718281828459045E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.2718281828459045E1, ~0.17976931348623157E309) = 0 +atan2 (0.2718281828459045E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.2718281828459045E1, ~0.8988465674311579E308) = 0 +atan2 (0.2718281828459045E1, ~0.123E4) = 3.139382672 +pow (0.2718281828459045E1, ~0.123E4) = 0 +atan2 (0.2718281828459045E1, ~0.123E2) = 2.924090123 +pow (0.2718281828459045E1, ~0.123E2) = 4.551744463E~6 +atan2 (0.2718281828459045E1, ~0.3141592653589793E1) = 2.428308113 +pow (0.2718281828459045E1, ~0.3141592653589793E1) = 0.04321391826 +atan2 (0.2718281828459045E1, ~0.2718281828459045E1) = 2.35619449 +pow (0.2718281828459045E1, ~0.2718281828459045E1) = 0.06598803585 +atan2 (0.2718281828459045E1, ~0.123E1) = 1.99572043 +pow (0.2718281828459045E1, ~0.123E1) = 0.2922925777 +atan2 (0.2718281828459045E1, ~0.123) = 1.616014654 +pow (0.2718281828459045E1, ~0.123) = 0.8842636626 +atan2 (0.2718281828459045E1, ~0.123E~2) = 1.571248818 +pow (0.2718281828459045E1, ~0.123E~2) = 0.9987707561 +atan2 (0.2718281828459045E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.2718281828459045E1, ~0.22250738585072014E~307) = 1 +atan2 (0.2718281828459045E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.2718281828459045E1, ~0.11125369292536007E~307) = 1 +atan2 (0.2718281828459045E1, ~0.5E~323) = 1.570796327 +pow (0.2718281828459045E1, ~0.5E~323) = 1 +atan2 (0.2718281828459045E1, ~0.0) = 1.570796327 +pow (0.2718281828459045E1, ~0.0) = 1 +atan2 (0.2718281828459045E1, inf) = 0 +pow (0.2718281828459045E1, inf) = inf +atan2 (0.2718281828459045E1, ~inf) = 3.141592654 +pow (0.2718281828459045E1, ~inf) = 0 +atan2 (0.2718281828459045E1, nan) = nan +pow (0.2718281828459045E1, nan) = nan +atan2 (0.2718281828459045E1, inf) = 0 +pow (0.2718281828459045E1, inf) = inf +atan2 (0.123E1, 0.17976931348623157E309) = 6.842102115E~309 +pow (0.123E1, 0.17976931348623157E309) = inf +atan2 (0.123E1, 0.8988465674311579E308) = 1.368420423E~308 +pow (0.123E1, 0.8988465674311579E308) = inf +atan2 (0.123E1, 0.123E4) = 9.999996667E~4 +pow (0.123E1, 0.123E4) = 3.830778757E110 +atan2 (0.123E1, 0.123E2) = 0.09966865249 +pow (0.123E1, 0.123E2) = 12.75947692 +atan2 (0.123E1, 0.3141592653589793E1) = 0.3731757303 +pow (0.123E1, 0.3141592653589793E1) = 1.916219422 +atan2 (0.123E1, 0.2718281828459045E1) = 0.4249241031 +pow (0.123E1, 0.2718281828459045E1) = 1.755445823 +atan2 (0.123E1, 0.123E1) = 0.7853981634 +pow (0.123E1, 0.123E1) = 1.289980921 +atan2 (0.123E1, 0.123) = 1.471127674 +pow (0.123E1, 0.123) = 1.025789688 +atan2 (0.123E1, 0.123E~2) = 1.569796327 +pow (0.123E1, 0.123E~2) = 1.00025466 +atan2 (0.123E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E1, 0.22250738585072014E~307) = 1 +atan2 (0.123E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E1, 0.11125369292536007E~307) = 1 +atan2 (0.123E1, 0.5E~323) = 1.570796327 +pow (0.123E1, 0.5E~323) = 1 +atan2 (0.123E1, 0.0) = 1.570796327 +pow (0.123E1, 0.0) = 1 +atan2 (0.123E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E1, ~0.17976931348623157E309) = 0 +atan2 (0.123E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E1, ~0.8988465674311579E308) = 0 +atan2 (0.123E1, ~0.123E4) = 3.140592654 +pow (0.123E1, ~0.123E4) = 2.610435275E~111 +atan2 (0.123E1, ~0.123E2) = 3.041924001 +pow (0.123E1, ~0.123E2) = 0.07837311876 +atan2 (0.123E1, ~0.3141592653589793E1) = 2.768416923 +pow (0.123E1, ~0.3141592653589793E1) = 0.5218609042 +atan2 (0.123E1, ~0.2718281828459045E1) = 2.71666855 +pow (0.123E1, ~0.2718281828459045E1) = 0.56965586 +atan2 (0.123E1, ~0.123E1) = 2.35619449 +pow (0.123E1, ~0.123E1) = 0.7752052637 +atan2 (0.123E1, ~0.123) = 1.670464979 +pow (0.123E1, ~0.123) = 0.9748586988 +atan2 (0.123E1, ~0.123E~2) = 1.571796326 +pow (0.123E1, ~0.123E~2) = 0.999745405 +atan2 (0.123E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E1, ~0.22250738585072014E~307) = 1 +atan2 (0.123E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E1, ~0.11125369292536007E~307) = 1 +atan2 (0.123E1, ~0.5E~323) = 1.570796327 +pow (0.123E1, ~0.5E~323) = 1 +atan2 (0.123E1, ~0.0) = 1.570796327 +pow (0.123E1, ~0.0) = 1 +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123E1, ~inf) = 3.141592654 +pow (0.123E1, ~inf) = 0 +atan2 (0.123E1, nan) = nan +pow (0.123E1, nan) = nan +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123, 0.17976931348623157E309) = 6.842102115E~310 +pow (0.123, 0.17976931348623157E309) = 0 +atan2 (0.123, 0.8988465674311579E308) = 1.368420423E~309 +pow (0.123, 0.8988465674311579E308) = 0 +atan2 (0.123, 0.123E4) = 9.999999967E~5 +pow (0.123, 0.123E4) = 0 +atan2 (0.123, 0.123E2) = 0.009999666687 +pow (0.123, 0.123E2) = 6.394886941E~12 +atan2 (0.123, 0.3141592653589793E1) = 0.03913212911 +pow (0.123, 0.3141592653589793E1) = 0.001383096824 +atan2 (0.123, 0.2718281828459045E1) = 0.04521832678 +pow (0.123, 0.2718281828459045E1) = 0.003358192615 +atan2 (0.123, 0.123E1) = 0.09966865249 +pow (0.123, 0.123E1) = 0.07595970809 +atan2 (0.123, 0.123) = 0.7853981634 +pow (0.123, 0.123) = 0.7727843683 +atan2 (0.123, 0.123E~2) = 1.56079666 +pow (0.123, 0.123E~2) = 0.9974257668 +atan2 (0.123, 0.22250738585072014E~307) = 1.570796327 +pow (0.123, 0.22250738585072014E~307) = 1 +atan2 (0.123, 0.11125369292536007E~307) = 1.570796327 +pow (0.123, 0.11125369292536007E~307) = 1 +atan2 (0.123, 0.5E~323) = 1.570796327 +pow (0.123, 0.5E~323) = 1 +atan2 (0.123, 0.0) = 1.570796327 +pow (0.123, 0.0) = 1 +atan2 (0.123, ~0.17976931348623157E309) = 3.141592654 +pow (0.123, ~0.17976931348623157E309) = inf +atan2 (0.123, ~0.8988465674311579E308) = 3.141592654 +pow (0.123, ~0.8988465674311579E308) = inf +atan2 (0.123, ~0.123E4) = 3.141492654 +pow (0.123, ~0.123E4) = inf +atan2 (0.123, ~0.123E2) = 3.131592987 +pow (0.123, ~0.123E2) = 156374930400 +atan2 (0.123, ~0.3141592653589793E1) = 3.102460524 +pow (0.123, ~0.3141592653589793E1) = 723.0151807 +atan2 (0.123, ~0.2718281828459045E1) = 3.096374327 +pow (0.123, ~0.2718281828459045E1) = 297.7792267 +atan2 (0.123, ~0.123E1) = 3.041924001 +pow (0.123, ~0.123E1) = 13.16487418 +atan2 (0.123, ~0.123) = 2.35619449 +pow (0.123, ~0.123) = 1.294022034 +atan2 (0.123, ~0.123E~2) = 1.580795993 +pow (0.123, ~0.123E~2) = 1.002580877 +atan2 (0.123, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123, ~0.22250738585072014E~307) = 1 +atan2 (0.123, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123, ~0.11125369292536007E~307) = 1 +atan2 (0.123, ~0.5E~323) = 1.570796327 +pow (0.123, ~0.5E~323) = 1 +atan2 (0.123, ~0.0) = 1.570796327 +pow (0.123, ~0.0) = 1 +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123, ~inf) = 3.141592654 +pow (0.123, ~inf) = inf +atan2 (0.123, nan) = nan +pow (0.123, nan) = nan +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123E~2, 0.17976931348623157E309) = 6.842102115E~312 +pow (0.123E~2, 0.17976931348623157E309) = 0 +atan2 (0.123E~2, 0.8988465674311579E308) = 1.368420423E~311 +pow (0.123E~2, 0.8988465674311579E308) = 0 +atan2 (0.123E~2, 0.123E4) = 1E~6 +pow (0.123E~2, 0.123E4) = 0 +atan2 (0.123E~2, 0.123E2) = 9.999999967E~5 +pow (0.123E~2, 0.123E2) = 1.606322974E~36 +atan2 (0.123E~2, 0.3141592653589793E1) = 3.9152114E~4 +pow (0.123E~2, 0.3141592653589793E1) = 7.205552335E~10 +atan2 (0.123E~2, 0.2718281828459045E1) = 4.524916818E~4 +pow (0.123E~2, 0.2718281828459045E1) = 1.228971878E~8 +atan2 (0.123E~2, 0.123E1) = 9.999996667E~4 +pow (0.123E~2, 0.123E1) = 2.633802994E~4 +atan2 (0.123E~2, 0.123) = 0.009999666687 +pow (0.123E~2, 0.123) = 0.4385895994 +atan2 (0.123E~2, 0.123E~2) = 0.7853981634 +pow (0.123E~2, 0.123E~2) = 0.9917919599 +atan2 (0.123E~2, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E~2, 0.22250738585072014E~307) = 1 +atan2 (0.123E~2, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E~2, 0.11125369292536007E~307) = 1 +atan2 (0.123E~2, 0.5E~323) = 1.570796327 +pow (0.123E~2, 0.5E~323) = 1 +atan2 (0.123E~2, 0.0) = 1.570796327 +pow (0.123E~2, 0.0) = 1 +atan2 (0.123E~2, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E~2, ~0.17976931348623157E309) = inf +atan2 (0.123E~2, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E~2, ~0.8988465674311579E308) = inf +atan2 (0.123E~2, ~0.123E4) = 3.141591654 +pow (0.123E~2, ~0.123E4) = inf +atan2 (0.123E~2, ~0.123E2) = 3.141492654 +pow (0.123E~2, ~0.123E2) = 6.225398107E35 +atan2 (0.123E~2, ~0.3141592653589793E1) = 3.141201132 +pow (0.123E~2, ~0.3141592653589793E1) = 1387818662 +atan2 (0.123E~2, ~0.2718281828459045E1) = 3.141140162 +pow (0.123E~2, ~0.2718281828459045E1) = 81368826.88 +atan2 (0.123E~2, ~0.123E1) = 3.140592654 +pow (0.123E~2, ~0.123E1) = 3796.791188 +atan2 (0.123E~2, ~0.123) = 3.131592987 +pow (0.123E~2, ~0.123) = 2.280035827 +atan2 (0.123E~2, ~0.123E~2) = 2.35619449 +pow (0.123E~2, ~0.123E~2) = 1.00827597 +atan2 (0.123E~2, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E~2, ~0.22250738585072014E~307) = 1 +atan2 (0.123E~2, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E~2, ~0.11125369292536007E~307) = 1 +atan2 (0.123E~2, ~0.5E~323) = 1.570796327 +pow (0.123E~2, ~0.5E~323) = 1 +atan2 (0.123E~2, ~0.0) = 1.570796327 +pow (0.123E~2, ~0.0) = 1 +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.123E~2, ~inf) = 3.141592654 +pow (0.123E~2, ~inf) = inf +atan2 (0.123E~2, nan) = nan +pow (0.123E~2, nan) = nan +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.22250738585072014E~307, 0.17976931348623157E309) = 0 +pow (0.22250738585072014E~307, 0.17976931348623157E309) = 0 +atan2 (0.22250738585072014E~307, 0.8988465674311579E308) = 0 +pow (0.22250738585072014E~307, 0.8988465674311579E308) = 0 +atan2 (0.22250738585072014E~307, 0.123E4) = 1.809003137E~311 +pow (0.22250738585072014E~307, 0.123E4) = 0 +atan2 (0.22250738585072014E~307, 0.123E2) = 1.809003137E~309 +pow (0.22250738585072014E~307, 0.123E2) = 0 +atan2 (0.22250738585072014E~307, 0.3141592653589793E1) = 7.082630067E~309 +pow (0.22250738585072014E~307, 0.3141592653589793E1) = 0 +atan2 (0.22250738585072014E~307, 0.2718281828459045E1) = 8.185589276E~309 +pow (0.22250738585072014E~307, 0.2718281828459045E1) = 0 +atan2 (0.22250738585072014E~307, 0.123E1) = 1.809003137E~308 +pow (0.22250738585072014E~307, 0.123E1) = 0 +atan2 (0.22250738585072014E~307, 0.123) = 1.809003137E~307 +pow (0.22250738585072014E~307, 0.123) = 1.441197052E~38 +atan2 (0.22250738585072014E~307, 0.123E~2) = 1.809003137E~305 +pow (0.22250738585072014E~307, 0.123E~2) = 0.4183957204 +atan2 (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.7853981634 +pow (0.22250738585072014E~307, 0.22250738585072014E~307) = 1 +atan2 (0.22250738585072014E~307, 0.11125369292536007E~307) = 1.107148718 +pow (0.22250738585072014E~307, 0.11125369292536007E~307) = 1 +atan2 (0.22250738585072014E~307, 0.5E~323) = 1.570796327 +pow (0.22250738585072014E~307, 0.5E~323) = 1 +atan2 (0.22250738585072014E~307, 0.0) = 1.570796327 +pow (0.22250738585072014E~307, 0.0) = 1 +atan2 (0.22250738585072014E~307, ~0.17976931348623157E309) = 3.141592654 +pow (0.22250738585072014E~307, ~0.17976931348623157E309) = inf +atan2 (0.22250738585072014E~307, ~0.8988465674311579E308) = 3.141592654 +pow (0.22250738585072014E~307, ~0.8988465674311579E308) = inf +atan2 (0.22250738585072014E~307, ~0.123E4) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E4) = inf +atan2 (0.22250738585072014E~307, ~0.123E2) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E2) = inf +atan2 (0.22250738585072014E~307, ~0.3141592653589793E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.3141592653589793E1) = inf +atan2 (0.22250738585072014E~307, ~0.2718281828459045E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.2718281828459045E1) = inf +atan2 (0.22250738585072014E~307, ~0.123E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E1) = inf +atan2 (0.22250738585072014E~307, ~0.123) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123) = 6.93867642E37 +atan2 (0.22250738585072014E~307, ~0.123E~2) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E~2) = 2.390081808 +atan2 (0.22250738585072014E~307, ~0.22250738585072014E~307) = 2.35619449 +pow (0.22250738585072014E~307, ~0.22250738585072014E~307) = 1 +atan2 (0.22250738585072014E~307, ~0.11125369292536007E~307) = 2.034443936 +pow (0.22250738585072014E~307, ~0.11125369292536007E~307) = 1 +atan2 (0.22250738585072014E~307, ~0.5E~323) = 1.570796327 +pow (0.22250738585072014E~307, ~0.5E~323) = 1 +atan2 (0.22250738585072014E~307, ~0.0) = 1.570796327 +pow (0.22250738585072014E~307, ~0.0) = 1 +atan2 (0.22250738585072014E~307, inf) = 0 +pow (0.22250738585072014E~307, inf) = 0 +atan2 (0.22250738585072014E~307, ~inf) = 3.141592654 +pow (0.22250738585072014E~307, ~inf) = inf +atan2 (0.22250738585072014E~307, nan) = nan +pow (0.22250738585072014E~307, nan) = nan +atan2 (0.22250738585072014E~307, inf) = 0 +pow (0.22250738585072014E~307, inf) = 0 +atan2 (0.11125369292536007E~307, 0.17976931348623157E309) = 0 +pow (0.11125369292536007E~307, 0.17976931348623157E309) = 0 +atan2 (0.11125369292536007E~307, 0.8988465674311579E308) = 0 +pow (0.11125369292536007E~307, 0.8988465674311579E308) = 0 +atan2 (0.11125369292536007E~307, 0.123E4) = 9.045015685E~312 +pow (0.11125369292536007E~307, 0.123E4) = 0 +atan2 (0.11125369292536007E~307, 0.123E2) = 9.045015685E~310 +pow (0.11125369292536007E~307, 0.123E2) = 0 +atan2 (0.11125369292536007E~307, 0.3141592653589793E1) = 3.541315033E~309 +pow (0.11125369292536007E~307, 0.3141592653589793E1) = 0 +atan2 (0.11125369292536007E~307, 0.2718281828459045E1) = 4.092794638E~309 +pow (0.11125369292536007E~307, 0.2718281828459045E1) = 0 +atan2 (0.11125369292536007E~307, 0.123E1) = 9.045015685E~309 +pow (0.11125369292536007E~307, 0.123E1) = 0 +atan2 (0.11125369292536007E~307, 0.123) = 9.045015685E~308 +pow (0.11125369292536007E~307, 0.123) = 1.323416898E~38 +atan2 (0.11125369292536007E~307, 0.123E~2) = 9.045015685E~306 +pow (0.11125369292536007E~307, 0.123E~2) = 0.4180391603 +atan2 (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.463647609 +pow (0.11125369292536007E~307, 0.22250738585072014E~307) = 1 +atan2 (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.7853981634 +pow (0.11125369292536007E~307, 0.11125369292536007E~307) = 1 +atan2 (0.11125369292536007E~307, 0.5E~323) = 1.570796327 +pow (0.11125369292536007E~307, 0.5E~323) = 1 +atan2 (0.11125369292536007E~307, 0.0) = 1.570796327 +pow (0.11125369292536007E~307, 0.0) = 1 +atan2 (0.11125369292536007E~307, ~0.17976931348623157E309) = 3.141592654 +pow (0.11125369292536007E~307, ~0.17976931348623157E309) = inf +atan2 (0.11125369292536007E~307, ~0.8988465674311579E308) = 3.141592654 +pow (0.11125369292536007E~307, ~0.8988465674311579E308) = inf +atan2 (0.11125369292536007E~307, ~0.123E4) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E4) = inf +atan2 (0.11125369292536007E~307, ~0.123E2) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E2) = inf +atan2 (0.11125369292536007E~307, ~0.3141592653589793E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.3141592653589793E1) = inf +atan2 (0.11125369292536007E~307, ~0.2718281828459045E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.2718281828459045E1) = inf +atan2 (0.11125369292536007E~307, ~0.123E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E1) = inf +atan2 (0.11125369292536007E~307, ~0.123) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123) = 7.556197911E37 +atan2 (0.11125369292536007E~307, ~0.123E~2) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E~2) = 2.392120392 +atan2 (0.11125369292536007E~307, ~0.22250738585072014E~307) = 2.677945045 +pow (0.11125369292536007E~307, ~0.22250738585072014E~307) = 1 +atan2 (0.11125369292536007E~307, ~0.11125369292536007E~307) = 2.35619449 +pow (0.11125369292536007E~307, ~0.11125369292536007E~307) = 1 +atan2 (0.11125369292536007E~307, ~0.5E~323) = 1.570796327 +pow (0.11125369292536007E~307, ~0.5E~323) = 1 +atan2 (0.11125369292536007E~307, ~0.0) = 1.570796327 +pow (0.11125369292536007E~307, ~0.0) = 1 +atan2 (0.11125369292536007E~307, inf) = 0 +pow (0.11125369292536007E~307, inf) = 0 +atan2 (0.11125369292536007E~307, ~inf) = 3.141592654 +pow (0.11125369292536007E~307, ~inf) = inf +atan2 (0.11125369292536007E~307, nan) = nan +pow (0.11125369292536007E~307, nan) = nan +atan2 (0.11125369292536007E~307, inf) = 0 +pow (0.11125369292536007E~307, inf) = 0 +atan2 (0.5E~323, 0.17976931348623157E309) = 0 +pow (0.5E~323, 0.17976931348623157E309) = 0 +atan2 (0.5E~323, 0.8988465674311579E308) = 0 +pow (0.5E~323, 0.8988465674311579E308) = 0 +atan2 (0.5E~323, 0.123E4) = 0 +pow (0.5E~323, 0.123E4) = 0 +atan2 (0.5E~323, 0.123E2) = 0 +pow (0.5E~323, 0.123E2) = 0 +atan2 (0.5E~323, 0.3141592653589793E1) = 0 +pow (0.5E~323, 0.3141592653589793E1) = 0 +atan2 (0.5E~323, 0.2718281828459045E1) = 0 +pow (0.5E~323, 0.2718281828459045E1) = 0 +atan2 (0.5E~323, 0.123E1) = 4.940656458E~324 +pow (0.5E~323, 0.123E1) = 0 +atan2 (0.5E~323, 0.123) = 3.952525167E~323 +pow (0.5E~323, 0.123) = 1.711336892E~40 +atan2 (0.5E~323, 0.123E~2) = 4.016753701E~321 +pow (0.5E~323, 0.123E~2) = 0.4002518566 +atan2 (0.5E~323, 0.22250738585072014E~307) = 2.220446049E~16 +pow (0.5E~323, 0.22250738585072014E~307) = 1 +atan2 (0.5E~323, 0.11125369292536007E~307) = 4.440892099E~16 +pow (0.5E~323, 0.11125369292536007E~307) = 1 +atan2 (0.5E~323, 0.5E~323) = 0.7853981634 +pow (0.5E~323, 0.5E~323) = 1 +atan2 (0.5E~323, 0.0) = 1.570796327 +pow (0.5E~323, 0.0) = 1 +atan2 (0.5E~323, ~0.17976931348623157E309) = 3.141592654 +pow (0.5E~323, ~0.17976931348623157E309) = inf +atan2 (0.5E~323, ~0.8988465674311579E308) = 3.141592654 +pow (0.5E~323, ~0.8988465674311579E308) = inf +atan2 (0.5E~323, ~0.123E4) = 3.141592654 +pow (0.5E~323, ~0.123E4) = inf +atan2 (0.5E~323, ~0.123E2) = 3.141592654 +pow (0.5E~323, ~0.123E2) = inf +atan2 (0.5E~323, ~0.3141592653589793E1) = 3.141592654 +pow (0.5E~323, ~0.3141592653589793E1) = inf +atan2 (0.5E~323, ~0.2718281828459045E1) = 3.141592654 +pow (0.5E~323, ~0.2718281828459045E1) = inf +atan2 (0.5E~323, ~0.123E1) = 3.141592654 +pow (0.5E~323, ~0.123E1) = inf +atan2 (0.5E~323, ~0.123) = 3.141592654 +pow (0.5E~323, ~0.123) = 5.843384809E39 +atan2 (0.5E~323, ~0.123E~2) = 3.141592654 +pow (0.5E~323, ~0.123E~2) = 2.498426887 +atan2 (0.5E~323, ~0.22250738585072014E~307) = 3.141592654 +pow (0.5E~323, ~0.22250738585072014E~307) = 1 +atan2 (0.5E~323, ~0.11125369292536007E~307) = 3.141592654 +pow (0.5E~323, ~0.11125369292536007E~307) = 1 +atan2 (0.5E~323, ~0.5E~323) = 2.35619449 +pow (0.5E~323, ~0.5E~323) = 1 +atan2 (0.5E~323, ~0.0) = 1.570796327 +pow (0.5E~323, ~0.0) = 1 +atan2 (0.5E~323, inf) = 0 +pow (0.5E~323, inf) = 0 +atan2 (0.5E~323, ~inf) = 3.141592654 +pow (0.5E~323, ~inf) = inf +atan2 (0.5E~323, nan) = nan +pow (0.5E~323, nan) = nan +atan2 (0.5E~323, inf) = 0 +pow (0.5E~323, inf) = 0 +atan2 (0.0, 0.17976931348623157E309) = 0 +pow (0.0, 0.17976931348623157E309) = 0 +atan2 (0.0, 0.8988465674311579E308) = 0 +pow (0.0, 0.8988465674311579E308) = 0 +atan2 (0.0, 0.123E4) = 0 +pow (0.0, 0.123E4) = 0 +atan2 (0.0, 0.123E2) = 0 +pow (0.0, 0.123E2) = 0 +atan2 (0.0, 0.3141592653589793E1) = 0 +pow (0.0, 0.3141592653589793E1) = 0 +atan2 (0.0, 0.2718281828459045E1) = 0 +pow (0.0, 0.2718281828459045E1) = 0 +atan2 (0.0, 0.123E1) = 0 +pow (0.0, 0.123E1) = 0 +atan2 (0.0, 0.123) = 0 +pow (0.0, 0.123) = 0 +atan2 (0.0, 0.123E~2) = 0 +pow (0.0, 0.123E~2) = 0 +atan2 (0.0, 0.22250738585072014E~307) = 0 +pow (0.0, 0.22250738585072014E~307) = 0 +atan2 (0.0, 0.11125369292536007E~307) = 0 +pow (0.0, 0.11125369292536007E~307) = 0 +atan2 (0.0, 0.5E~323) = 0 +pow (0.0, 0.5E~323) = 0 +atan2 (0.0, 0.0) = 0 +pow (0.0, 0.0) = 1 +atan2 (0.0, ~0.17976931348623157E309) = 3.141592654 +pow (0.0, ~0.17976931348623157E309) = inf +atan2 (0.0, ~0.8988465674311579E308) = 3.141592654 +pow (0.0, ~0.8988465674311579E308) = inf +atan2 (0.0, ~0.123E4) = 3.141592654 +pow (0.0, ~0.123E4) = inf +atan2 (0.0, ~0.123E2) = 3.141592654 +pow (0.0, ~0.123E2) = inf +atan2 (0.0, ~0.3141592653589793E1) = 3.141592654 +pow (0.0, ~0.3141592653589793E1) = inf +atan2 (0.0, ~0.2718281828459045E1) = 3.141592654 +pow (0.0, ~0.2718281828459045E1) = inf +atan2 (0.0, ~0.123E1) = 3.141592654 +pow (0.0, ~0.123E1) = inf +atan2 (0.0, ~0.123) = 3.141592654 +pow (0.0, ~0.123) = inf +atan2 (0.0, ~0.123E~2) = 3.141592654 +pow (0.0, ~0.123E~2) = inf +atan2 (0.0, ~0.22250738585072014E~307) = 3.141592654 +pow (0.0, ~0.22250738585072014E~307) = inf +atan2 (0.0, ~0.11125369292536007E~307) = 3.141592654 +pow (0.0, ~0.11125369292536007E~307) = inf +atan2 (0.0, ~0.5E~323) = 3.141592654 +pow (0.0, ~0.5E~323) = inf +atan2 (0.0, ~0.0) = 3.141592654 +pow (0.0, ~0.0) = 1 +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (0.0, ~inf) = 3.141592654 +pow (0.0, ~inf) = inf +atan2 (0.0, nan) = nan +pow (0.0, nan) = nan +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.7853981634 +pow (~0.17976931348623157E309, 0.17976931348623157E309) = inf +atan2 (~0.17976931348623157E309, 0.8988465674311579E308) = ~1.107148718 +pow (~0.17976931348623157E309, 0.8988465674311579E308) = inf +atan2 (~0.17976931348623157E309, 0.123E4) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E4) = inf +atan2 (~0.17976931348623157E309, 0.123E2) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E2) = nan +atan2 (~0.17976931348623157E309, 0.3141592653589793E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.3141592653589793E1) = nan +atan2 (~0.17976931348623157E309, 0.2718281828459045E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.2718281828459045E1) = nan +atan2 (~0.17976931348623157E309, 0.123E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E1) = nan +atan2 (~0.17976931348623157E309, 0.123) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123) = nan +atan2 (~0.17976931348623157E309, 0.123E~2) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E~2) = nan +atan2 (~0.17976931348623157E309, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.17976931348623157E309, 0.22250738585072014E~307) = nan +atan2 (~0.17976931348623157E309, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.17976931348623157E309, 0.11125369292536007E~307) = nan +atan2 (~0.17976931348623157E309, 0.5E~323) = ~1.570796327 +pow (~0.17976931348623157E309, 0.5E~323) = nan +atan2 (~0.17976931348623157E309, 0.0) = ~1.570796327 +pow (~0.17976931348623157E309, 0.0) = 1 +atan2 (~0.17976931348623157E309, ~0.17976931348623157E309) = ~2.35619449 +pow (~0.17976931348623157E309, ~0.17976931348623157E309) = 0 +atan2 (~0.17976931348623157E309, ~0.8988465674311579E308) = ~2.034443936 +pow (~0.17976931348623157E309, ~0.8988465674311579E308) = 0 +atan2 (~0.17976931348623157E309, ~0.123E4) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E4) = 0 +atan2 (~0.17976931348623157E309, ~0.123E2) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E2) = nan +atan2 (~0.17976931348623157E309, ~0.3141592653589793E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.3141592653589793E1) = nan +atan2 (~0.17976931348623157E309, ~0.2718281828459045E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.2718281828459045E1) = nan +atan2 (~0.17976931348623157E309, ~0.123E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E1) = nan +atan2 (~0.17976931348623157E309, ~0.123) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123) = nan +atan2 (~0.17976931348623157E309, ~0.123E~2) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E~2) = nan +atan2 (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.22250738585072014E~307) = nan +atan2 (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.11125369292536007E~307) = nan +atan2 (~0.17976931348623157E309, ~0.5E~323) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.5E~323) = nan +atan2 (~0.17976931348623157E309, ~0.0) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.0) = 1 +atan2 (~0.17976931348623157E309, inf) = 0 +pow (~0.17976931348623157E309, inf) = inf +atan2 (~0.17976931348623157E309, ~inf) = ~3.141592654 +pow (~0.17976931348623157E309, ~inf) = 0 +atan2 (~0.17976931348623157E309, nan) = nan +pow (~0.17976931348623157E309, nan) = nan +atan2 (~0.17976931348623157E309, inf) = 0 +pow (~0.17976931348623157E309, inf) = inf +atan2 (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.463647609 +pow (~0.8988465674311579E308, 0.17976931348623157E309) = inf +atan2 (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.7853981634 +pow (~0.8988465674311579E308, 0.8988465674311579E308) = inf +atan2 (~0.8988465674311579E308, 0.123E4) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E4) = inf +atan2 (~0.8988465674311579E308, 0.123E2) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E2) = nan +atan2 (~0.8988465674311579E308, 0.3141592653589793E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.3141592653589793E1) = nan +atan2 (~0.8988465674311579E308, 0.2718281828459045E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.2718281828459045E1) = nan +atan2 (~0.8988465674311579E308, 0.123E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E1) = nan +atan2 (~0.8988465674311579E308, 0.123) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123) = nan +atan2 (~0.8988465674311579E308, 0.123E~2) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E~2) = nan +atan2 (~0.8988465674311579E308, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.8988465674311579E308, 0.22250738585072014E~307) = nan +atan2 (~0.8988465674311579E308, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.8988465674311579E308, 0.11125369292536007E~307) = nan +atan2 (~0.8988465674311579E308, 0.5E~323) = ~1.570796327 +pow (~0.8988465674311579E308, 0.5E~323) = nan +atan2 (~0.8988465674311579E308, 0.0) = ~1.570796327 +pow (~0.8988465674311579E308, 0.0) = 1 +atan2 (~0.8988465674311579E308, ~0.17976931348623157E309) = ~2.677945045 +pow (~0.8988465674311579E308, ~0.17976931348623157E309) = 0 +atan2 (~0.8988465674311579E308, ~0.8988465674311579E308) = ~2.35619449 +pow (~0.8988465674311579E308, ~0.8988465674311579E308) = 0 +atan2 (~0.8988465674311579E308, ~0.123E4) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E4) = 0 +atan2 (~0.8988465674311579E308, ~0.123E2) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E2) = nan +atan2 (~0.8988465674311579E308, ~0.3141592653589793E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.3141592653589793E1) = nan +atan2 (~0.8988465674311579E308, ~0.2718281828459045E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.2718281828459045E1) = nan +atan2 (~0.8988465674311579E308, ~0.123E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E1) = nan +atan2 (~0.8988465674311579E308, ~0.123) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123) = nan +atan2 (~0.8988465674311579E308, ~0.123E~2) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E~2) = nan +atan2 (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.22250738585072014E~307) = nan +atan2 (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.11125369292536007E~307) = nan +atan2 (~0.8988465674311579E308, ~0.5E~323) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.5E~323) = nan +atan2 (~0.8988465674311579E308, ~0.0) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.0) = 1 +atan2 (~0.8988465674311579E308, inf) = 0 +pow (~0.8988465674311579E308, inf) = inf +atan2 (~0.8988465674311579E308, ~inf) = ~3.141592654 +pow (~0.8988465674311579E308, ~inf) = 0 +atan2 (~0.8988465674311579E308, nan) = nan +pow (~0.8988465674311579E308, nan) = nan +atan2 (~0.8988465674311579E308, inf) = 0 +pow (~0.8988465674311579E308, inf) = inf +atan2 (~0.123E4, 0.17976931348623157E309) = ~6.842102115E~306 +pow (~0.123E4, 0.17976931348623157E309) = inf +atan2 (~0.123E4, 0.8988465674311579E308) = ~1.368420423E~305 +pow (~0.123E4, 0.8988465674311579E308) = inf +atan2 (~0.123E4, 0.123E4) = ~0.7853981634 +pow (~0.123E4, 0.123E4) = inf +atan2 (~0.123E4, 0.123E2) = ~1.56079666 +pow (~0.123E4, 0.123E2) = nan +atan2 (~0.123E4, 0.3141592653589793E1) = ~1.568242192 +pow (~0.123E4, 0.3141592653589793E1) = nan +atan2 (~0.123E4, 0.2718281828459045E1) = ~1.568586345 +pow (~0.123E4, 0.2718281828459045E1) = nan +atan2 (~0.123E4, 0.123E1) = ~1.569796327 +pow (~0.123E4, 0.123E1) = nan +atan2 (~0.123E4, 0.123) = ~1.570696327 +pow (~0.123E4, 0.123) = nan +atan2 (~0.123E4, 0.123E~2) = ~1.570795327 +pow (~0.123E4, 0.123E~2) = nan +atan2 (~0.123E4, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E4, 0.22250738585072014E~307) = nan +atan2 (~0.123E4, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E4, 0.11125369292536007E~307) = nan +atan2 (~0.123E4, 0.5E~323) = ~1.570796327 +pow (~0.123E4, 0.5E~323) = nan +atan2 (~0.123E4, 0.0) = ~1.570796327 +pow (~0.123E4, 0.0) = 1 +atan2 (~0.123E4, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E4, ~0.17976931348623157E309) = 0 +atan2 (~0.123E4, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E4, ~0.8988465674311579E308) = 0 +atan2 (~0.123E4, ~0.123E4) = ~2.35619449 +pow (~0.123E4, ~0.123E4) = 0 +atan2 (~0.123E4, ~0.123E2) = ~1.580795993 +pow (~0.123E4, ~0.123E2) = nan +atan2 (~0.123E4, ~0.3141592653589793E1) = ~1.573350462 +pow (~0.123E4, ~0.3141592653589793E1) = nan +atan2 (~0.123E4, ~0.2718281828459045E1) = ~1.573006308 +pow (~0.123E4, ~0.2718281828459045E1) = nan +atan2 (~0.123E4, ~0.123E1) = ~1.571796326 +pow (~0.123E4, ~0.123E1) = nan +atan2 (~0.123E4, ~0.123) = ~1.570896327 +pow (~0.123E4, ~0.123) = nan +atan2 (~0.123E4, ~0.123E~2) = ~1.570797327 +pow (~0.123E4, ~0.123E~2) = nan +atan2 (~0.123E4, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E4, ~0.22250738585072014E~307) = nan +atan2 (~0.123E4, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E4, ~0.11125369292536007E~307) = nan +atan2 (~0.123E4, ~0.5E~323) = ~1.570796327 +pow (~0.123E4, ~0.5E~323) = nan +atan2 (~0.123E4, ~0.0) = ~1.570796327 +pow (~0.123E4, ~0.0) = 1 +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E4, ~inf) = ~3.141592654 +pow (~0.123E4, ~inf) = 0 +atan2 (~0.123E4, nan) = nan +pow (~0.123E4, nan) = nan +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E2, 0.17976931348623157E309) = ~6.842102115E~308 +pow (~0.123E2, 0.17976931348623157E309) = inf +atan2 (~0.123E2, 0.8988465674311579E308) = ~1.368420423E~307 +pow (~0.123E2, 0.8988465674311579E308) = inf +atan2 (~0.123E2, 0.123E4) = ~0.009999666687 +pow (~0.123E2, 0.123E4) = inf +atan2 (~0.123E2, 0.123E2) = ~0.7853981634 +pow (~0.123E2, 0.123E2) = nan +atan2 (~0.123E2, 0.3141592653589793E1) = ~1.320728626 +pow (~0.123E2, 0.3141592653589793E1) = nan +atan2 (~0.123E2, 0.2718281828459045E1) = ~1.353293796 +pow (~0.123E2, 0.2718281828459045E1) = nan +atan2 (~0.123E2, 0.123E1) = ~1.471127674 +pow (~0.123E2, 0.123E1) = nan +atan2 (~0.123E2, 0.123) = ~1.56079666 +pow (~0.123E2, 0.123) = nan +atan2 (~0.123E2, 0.123E~2) = ~1.570696327 +pow (~0.123E2, 0.123E~2) = nan +atan2 (~0.123E2, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E2, 0.22250738585072014E~307) = nan +atan2 (~0.123E2, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E2, 0.11125369292536007E~307) = nan +atan2 (~0.123E2, 0.5E~323) = ~1.570796327 +pow (~0.123E2, 0.5E~323) = nan +atan2 (~0.123E2, 0.0) = ~1.570796327 +pow (~0.123E2, 0.0) = 1 +atan2 (~0.123E2, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E2, ~0.17976931348623157E309) = 0 +atan2 (~0.123E2, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E2, ~0.8988465674311579E308) = 0 +atan2 (~0.123E2, ~0.123E4) = ~3.131592987 +pow (~0.123E2, ~0.123E4) = 0 +atan2 (~0.123E2, ~0.123E2) = ~2.35619449 +pow (~0.123E2, ~0.123E2) = nan +atan2 (~0.123E2, ~0.3141592653589793E1) = ~1.820864027 +pow (~0.123E2, ~0.3141592653589793E1) = nan +atan2 (~0.123E2, ~0.2718281828459045E1) = ~1.788298857 +pow (~0.123E2, ~0.2718281828459045E1) = nan +atan2 (~0.123E2, ~0.123E1) = ~1.670464979 +pow (~0.123E2, ~0.123E1) = nan +atan2 (~0.123E2, ~0.123) = ~1.580795993 +pow (~0.123E2, ~0.123) = nan +atan2 (~0.123E2, ~0.123E~2) = ~1.570896327 +pow (~0.123E2, ~0.123E~2) = nan +atan2 (~0.123E2, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E2, ~0.22250738585072014E~307) = nan +atan2 (~0.123E2, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E2, ~0.11125369292536007E~307) = nan +atan2 (~0.123E2, ~0.5E~323) = ~1.570796327 +pow (~0.123E2, ~0.5E~323) = nan +atan2 (~0.123E2, ~0.0) = ~1.570796327 +pow (~0.123E2, ~0.0) = 1 +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.123E2, ~inf) = ~3.141592654 +pow (~0.123E2, ~inf) = 0 +atan2 (~0.123E2, nan) = nan +pow (~0.123E2, nan) = nan +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.3141592653589793E1, 0.17976931348623157E309) = ~1.747568922E~308 +pow (~0.3141592653589793E1, 0.17976931348623157E309) = inf +atan2 (~0.3141592653589793E1, 0.8988465674311579E308) = ~3.495137844E~308 +pow (~0.3141592653589793E1, 0.8988465674311579E308) = inf +atan2 (~0.3141592653589793E1, 0.123E4) = ~0.002554134815 +pow (~0.3141592653589793E1, 0.123E4) = inf +atan2 (~0.3141592653589793E1, 0.123E2) = ~0.2500677004 +pow (~0.3141592653589793E1, 0.123E2) = nan +atan2 (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.7853981634 +pow (~0.3141592653589793E1, 0.3141592653589793E1) = nan +atan2 (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.8575117864 +pow (~0.3141592653589793E1, 0.2718281828459045E1) = nan +atan2 (~0.3141592653589793E1, 0.123E1) = ~1.197620596 +pow (~0.3141592653589793E1, 0.123E1) = nan +atan2 (~0.3141592653589793E1, 0.123) = ~1.531664198 +pow (~0.3141592653589793E1, 0.123) = nan +atan2 (~0.3141592653589793E1, 0.123E~2) = ~1.570404806 +pow (~0.3141592653589793E1, 0.123E~2) = nan +atan2 (~0.3141592653589793E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.3141592653589793E1, 0.22250738585072014E~307) = nan +atan2 (~0.3141592653589793E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.3141592653589793E1, 0.11125369292536007E~307) = nan +atan2 (~0.3141592653589793E1, 0.5E~323) = ~1.570796327 +pow (~0.3141592653589793E1, 0.5E~323) = nan +atan2 (~0.3141592653589793E1, 0.0) = ~1.570796327 +pow (~0.3141592653589793E1, 0.0) = 1 +atan2 (~0.3141592653589793E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.3141592653589793E1, ~0.17976931348623157E309) = 0 +atan2 (~0.3141592653589793E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.3141592653589793E1, ~0.8988465674311579E308) = 0 +atan2 (~0.3141592653589793E1, ~0.123E4) = ~3.139038519 +pow (~0.3141592653589793E1, ~0.123E4) = 0 +atan2 (~0.3141592653589793E1, ~0.123E2) = ~2.891524953 +pow (~0.3141592653589793E1, ~0.123E2) = nan +atan2 (~0.3141592653589793E1, ~0.3141592653589793E1) = ~2.35619449 +pow (~0.3141592653589793E1, ~0.3141592653589793E1) = nan +atan2 (~0.3141592653589793E1, ~0.2718281828459045E1) = ~2.284080867 +pow (~0.3141592653589793E1, ~0.2718281828459045E1) = nan +atan2 (~0.3141592653589793E1, ~0.123E1) = ~1.943972057 +pow (~0.3141592653589793E1, ~0.123E1) = nan +atan2 (~0.3141592653589793E1, ~0.123) = ~1.609928456 +pow (~0.3141592653589793E1, ~0.123) = nan +atan2 (~0.3141592653589793E1, ~0.123E~2) = ~1.571187848 +pow (~0.3141592653589793E1, ~0.123E~2) = nan +atan2 (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.22250738585072014E~307) = nan +atan2 (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.11125369292536007E~307) = nan +atan2 (~0.3141592653589793E1, ~0.5E~323) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.5E~323) = nan +atan2 (~0.3141592653589793E1, ~0.0) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.0) = 1 +atan2 (~0.3141592653589793E1, inf) = 0 +pow (~0.3141592653589793E1, inf) = inf +atan2 (~0.3141592653589793E1, ~inf) = ~3.141592654 +pow (~0.3141592653589793E1, ~inf) = 0 +atan2 (~0.3141592653589793E1, nan) = nan +pow (~0.3141592653589793E1, nan) = nan +atan2 (~0.3141592653589793E1, inf) = 0 +pow (~0.3141592653589793E1, inf) = inf +atan2 (~0.2718281828459045E1, 0.17976931348623157E309) = ~1.512094459E~308 +pow (~0.2718281828459045E1, 0.17976931348623157E309) = inf +atan2 (~0.2718281828459045E1, 0.8988465674311579E308) = ~3.024188918E~308 +pow (~0.2718281828459045E1, 0.8988465674311579E308) = inf +atan2 (~0.2718281828459045E1, 0.123E4) = ~0.002209981629 +pow (~0.2718281828459045E1, 0.123E4) = inf +atan2 (~0.2718281828459045E1, 0.123E2) = ~0.2175025304 +pow (~0.2718281828459045E1, 0.123E2) = nan +atan2 (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.7132845404 +pow (~0.2718281828459045E1, 0.3141592653589793E1) = nan +atan2 (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.7853981634 +pow (~0.2718281828459045E1, 0.2718281828459045E1) = nan +atan2 (~0.2718281828459045E1, 0.123E1) = ~1.145872224 +pow (~0.2718281828459045E1, 0.123E1) = nan +atan2 (~0.2718281828459045E1, 0.123) = ~1.525578 +pow (~0.2718281828459045E1, 0.123) = nan +atan2 (~0.2718281828459045E1, 0.123E~2) = ~1.570343835 +pow (~0.2718281828459045E1, 0.123E~2) = nan +atan2 (~0.2718281828459045E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.2718281828459045E1, 0.22250738585072014E~307) = nan +atan2 (~0.2718281828459045E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.2718281828459045E1, 0.11125369292536007E~307) = nan +atan2 (~0.2718281828459045E1, 0.5E~323) = ~1.570796327 +pow (~0.2718281828459045E1, 0.5E~323) = nan +atan2 (~0.2718281828459045E1, 0.0) = ~1.570796327 +pow (~0.2718281828459045E1, 0.0) = 1 +atan2 (~0.2718281828459045E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.2718281828459045E1, ~0.17976931348623157E309) = 0 +atan2 (~0.2718281828459045E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.2718281828459045E1, ~0.8988465674311579E308) = 0 +atan2 (~0.2718281828459045E1, ~0.123E4) = ~3.139382672 +pow (~0.2718281828459045E1, ~0.123E4) = 0 +atan2 (~0.2718281828459045E1, ~0.123E2) = ~2.924090123 +pow (~0.2718281828459045E1, ~0.123E2) = nan +atan2 (~0.2718281828459045E1, ~0.3141592653589793E1) = ~2.428308113 +pow (~0.2718281828459045E1, ~0.3141592653589793E1) = nan +atan2 (~0.2718281828459045E1, ~0.2718281828459045E1) = ~2.35619449 +pow (~0.2718281828459045E1, ~0.2718281828459045E1) = nan +atan2 (~0.2718281828459045E1, ~0.123E1) = ~1.99572043 +pow (~0.2718281828459045E1, ~0.123E1) = nan +atan2 (~0.2718281828459045E1, ~0.123) = ~1.616014654 +pow (~0.2718281828459045E1, ~0.123) = nan +atan2 (~0.2718281828459045E1, ~0.123E~2) = ~1.571248818 +pow (~0.2718281828459045E1, ~0.123E~2) = nan +atan2 (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.22250738585072014E~307) = nan +atan2 (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.11125369292536007E~307) = nan +atan2 (~0.2718281828459045E1, ~0.5E~323) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.5E~323) = nan +atan2 (~0.2718281828459045E1, ~0.0) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.0) = 1 +atan2 (~0.2718281828459045E1, inf) = 0 +pow (~0.2718281828459045E1, inf) = inf +atan2 (~0.2718281828459045E1, ~inf) = ~3.141592654 +pow (~0.2718281828459045E1, ~inf) = 0 +atan2 (~0.2718281828459045E1, nan) = nan +pow (~0.2718281828459045E1, nan) = nan +atan2 (~0.2718281828459045E1, inf) = 0 +pow (~0.2718281828459045E1, inf) = inf +atan2 (~0.123E1, 0.17976931348623157E309) = ~6.842102115E~309 +pow (~0.123E1, 0.17976931348623157E309) = inf +atan2 (~0.123E1, 0.8988465674311579E308) = ~1.368420423E~308 +pow (~0.123E1, 0.8988465674311579E308) = inf +atan2 (~0.123E1, 0.123E4) = ~9.999996667E~4 +pow (~0.123E1, 0.123E4) = 3.830778757E110 +atan2 (~0.123E1, 0.123E2) = ~0.09966865249 +pow (~0.123E1, 0.123E2) = nan +atan2 (~0.123E1, 0.3141592653589793E1) = ~0.3731757303 +pow (~0.123E1, 0.3141592653589793E1) = nan +atan2 (~0.123E1, 0.2718281828459045E1) = ~0.4249241031 +pow (~0.123E1, 0.2718281828459045E1) = nan +atan2 (~0.123E1, 0.123E1) = ~0.7853981634 +pow (~0.123E1, 0.123E1) = nan +atan2 (~0.123E1, 0.123) = ~1.471127674 +pow (~0.123E1, 0.123) = nan +atan2 (~0.123E1, 0.123E~2) = ~1.569796327 +pow (~0.123E1, 0.123E~2) = nan +atan2 (~0.123E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E1, 0.22250738585072014E~307) = nan +atan2 (~0.123E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E1, 0.11125369292536007E~307) = nan +atan2 (~0.123E1, 0.5E~323) = ~1.570796327 +pow (~0.123E1, 0.5E~323) = nan +atan2 (~0.123E1, 0.0) = ~1.570796327 +pow (~0.123E1, 0.0) = 1 +atan2 (~0.123E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E1, ~0.17976931348623157E309) = 0 +atan2 (~0.123E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E1, ~0.8988465674311579E308) = 0 +atan2 (~0.123E1, ~0.123E4) = ~3.140592654 +pow (~0.123E1, ~0.123E4) = 2.610435275E~111 +atan2 (~0.123E1, ~0.123E2) = ~3.041924001 +pow (~0.123E1, ~0.123E2) = nan +atan2 (~0.123E1, ~0.3141592653589793E1) = ~2.768416923 +pow (~0.123E1, ~0.3141592653589793E1) = nan +atan2 (~0.123E1, ~0.2718281828459045E1) = ~2.71666855 +pow (~0.123E1, ~0.2718281828459045E1) = nan +atan2 (~0.123E1, ~0.123E1) = ~2.35619449 +pow (~0.123E1, ~0.123E1) = nan +atan2 (~0.123E1, ~0.123) = ~1.670464979 +pow (~0.123E1, ~0.123) = nan +atan2 (~0.123E1, ~0.123E~2) = ~1.571796326 +pow (~0.123E1, ~0.123E~2) = nan +atan2 (~0.123E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E1, ~0.22250738585072014E~307) = nan +atan2 (~0.123E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E1, ~0.11125369292536007E~307) = nan +atan2 (~0.123E1, ~0.5E~323) = ~1.570796327 +pow (~0.123E1, ~0.5E~323) = nan +atan2 (~0.123E1, ~0.0) = ~1.570796327 +pow (~0.123E1, ~0.0) = 1 +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123E1, ~inf) = ~3.141592654 +pow (~0.123E1, ~inf) = 0 +atan2 (~0.123E1, nan) = nan +pow (~0.123E1, nan) = nan +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123, 0.17976931348623157E309) = ~6.842102115E~310 +pow (~0.123, 0.17976931348623157E309) = 0 +atan2 (~0.123, 0.8988465674311579E308) = ~1.368420423E~309 +pow (~0.123, 0.8988465674311579E308) = 0 +atan2 (~0.123, 0.123E4) = ~9.999999967E~5 +pow (~0.123, 0.123E4) = 0 +atan2 (~0.123, 0.123E2) = ~0.009999666687 +pow (~0.123, 0.123E2) = nan +atan2 (~0.123, 0.3141592653589793E1) = ~0.03913212911 +pow (~0.123, 0.3141592653589793E1) = nan +atan2 (~0.123, 0.2718281828459045E1) = ~0.04521832678 +pow (~0.123, 0.2718281828459045E1) = nan +atan2 (~0.123, 0.123E1) = ~0.09966865249 +pow (~0.123, 0.123E1) = nan +atan2 (~0.123, 0.123) = ~0.7853981634 +pow (~0.123, 0.123) = nan +atan2 (~0.123, 0.123E~2) = ~1.56079666 +pow (~0.123, 0.123E~2) = nan +atan2 (~0.123, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123, 0.22250738585072014E~307) = nan +atan2 (~0.123, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123, 0.11125369292536007E~307) = nan +atan2 (~0.123, 0.5E~323) = ~1.570796327 +pow (~0.123, 0.5E~323) = nan +atan2 (~0.123, 0.0) = ~1.570796327 +pow (~0.123, 0.0) = 1 +atan2 (~0.123, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123, ~0.17976931348623157E309) = inf +atan2 (~0.123, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123, ~0.8988465674311579E308) = inf +atan2 (~0.123, ~0.123E4) = ~3.141492654 +pow (~0.123, ~0.123E4) = inf +atan2 (~0.123, ~0.123E2) = ~3.131592987 +pow (~0.123, ~0.123E2) = nan +atan2 (~0.123, ~0.3141592653589793E1) = ~3.102460524 +pow (~0.123, ~0.3141592653589793E1) = nan +atan2 (~0.123, ~0.2718281828459045E1) = ~3.096374327 +pow (~0.123, ~0.2718281828459045E1) = nan +atan2 (~0.123, ~0.123E1) = ~3.041924001 +pow (~0.123, ~0.123E1) = nan +atan2 (~0.123, ~0.123) = ~2.35619449 +pow (~0.123, ~0.123) = nan +atan2 (~0.123, ~0.123E~2) = ~1.580795993 +pow (~0.123, ~0.123E~2) = nan +atan2 (~0.123, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123, ~0.22250738585072014E~307) = nan +atan2 (~0.123, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123, ~0.11125369292536007E~307) = nan +atan2 (~0.123, ~0.5E~323) = ~1.570796327 +pow (~0.123, ~0.5E~323) = nan +atan2 (~0.123, ~0.0) = ~1.570796327 +pow (~0.123, ~0.0) = 1 +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123, ~inf) = ~3.141592654 +pow (~0.123, ~inf) = inf +atan2 (~0.123, nan) = nan +pow (~0.123, nan) = nan +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123E~2, 0.17976931348623157E309) = ~6.842102115E~312 +pow (~0.123E~2, 0.17976931348623157E309) = 0 +atan2 (~0.123E~2, 0.8988465674311579E308) = ~1.368420423E~311 +pow (~0.123E~2, 0.8988465674311579E308) = 0 +atan2 (~0.123E~2, 0.123E4) = ~1E~6 +pow (~0.123E~2, 0.123E4) = 0 +atan2 (~0.123E~2, 0.123E2) = ~9.999999967E~5 +pow (~0.123E~2, 0.123E2) = nan +atan2 (~0.123E~2, 0.3141592653589793E1) = ~3.9152114E~4 +pow (~0.123E~2, 0.3141592653589793E1) = nan +atan2 (~0.123E~2, 0.2718281828459045E1) = ~4.524916818E~4 +pow (~0.123E~2, 0.2718281828459045E1) = nan +atan2 (~0.123E~2, 0.123E1) = ~9.999996667E~4 +pow (~0.123E~2, 0.123E1) = nan +atan2 (~0.123E~2, 0.123) = ~0.009999666687 +pow (~0.123E~2, 0.123) = nan +atan2 (~0.123E~2, 0.123E~2) = ~0.7853981634 +pow (~0.123E~2, 0.123E~2) = nan +atan2 (~0.123E~2, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E~2, 0.22250738585072014E~307) = nan +atan2 (~0.123E~2, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E~2, 0.11125369292536007E~307) = nan +atan2 (~0.123E~2, 0.5E~323) = ~1.570796327 +pow (~0.123E~2, 0.5E~323) = nan +atan2 (~0.123E~2, 0.0) = ~1.570796327 +pow (~0.123E~2, 0.0) = 1 +atan2 (~0.123E~2, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E~2, ~0.17976931348623157E309) = inf +atan2 (~0.123E~2, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E~2, ~0.8988465674311579E308) = inf +atan2 (~0.123E~2, ~0.123E4) = ~3.141591654 +pow (~0.123E~2, ~0.123E4) = inf +atan2 (~0.123E~2, ~0.123E2) = ~3.141492654 +pow (~0.123E~2, ~0.123E2) = nan +atan2 (~0.123E~2, ~0.3141592653589793E1) = ~3.141201132 +pow (~0.123E~2, ~0.3141592653589793E1) = nan +atan2 (~0.123E~2, ~0.2718281828459045E1) = ~3.141140162 +pow (~0.123E~2, ~0.2718281828459045E1) = nan +atan2 (~0.123E~2, ~0.123E1) = ~3.140592654 +pow (~0.123E~2, ~0.123E1) = nan +atan2 (~0.123E~2, ~0.123) = ~3.131592987 +pow (~0.123E~2, ~0.123) = nan +atan2 (~0.123E~2, ~0.123E~2) = ~2.35619449 +pow (~0.123E~2, ~0.123E~2) = nan +atan2 (~0.123E~2, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E~2, ~0.22250738585072014E~307) = nan +atan2 (~0.123E~2, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E~2, ~0.11125369292536007E~307) = nan +atan2 (~0.123E~2, ~0.5E~323) = ~1.570796327 +pow (~0.123E~2, ~0.5E~323) = nan +atan2 (~0.123E~2, ~0.0) = ~1.570796327 +pow (~0.123E~2, ~0.0) = 1 +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.123E~2, ~inf) = ~3.141592654 +pow (~0.123E~2, ~inf) = inf +atan2 (~0.123E~2, nan) = nan +pow (~0.123E~2, nan) = nan +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.22250738585072014E~307, 0.17976931348623157E309) = 0 +pow (~0.22250738585072014E~307, 0.17976931348623157E309) = 0 +atan2 (~0.22250738585072014E~307, 0.8988465674311579E308) = 0 +pow (~0.22250738585072014E~307, 0.8988465674311579E308) = 0 +atan2 (~0.22250738585072014E~307, 0.123E4) = ~1.809003137E~311 +pow (~0.22250738585072014E~307, 0.123E4) = 0 +atan2 (~0.22250738585072014E~307, 0.123E2) = ~1.809003137E~309 +pow (~0.22250738585072014E~307, 0.123E2) = nan +atan2 (~0.22250738585072014E~307, 0.3141592653589793E1) = ~7.082630067E~309 +pow (~0.22250738585072014E~307, 0.3141592653589793E1) = nan +atan2 (~0.22250738585072014E~307, 0.2718281828459045E1) = ~8.185589276E~309 +pow (~0.22250738585072014E~307, 0.2718281828459045E1) = nan +atan2 (~0.22250738585072014E~307, 0.123E1) = ~1.809003137E~308 +pow (~0.22250738585072014E~307, 0.123E1) = nan +atan2 (~0.22250738585072014E~307, 0.123) = ~1.809003137E~307 +pow (~0.22250738585072014E~307, 0.123) = nan +atan2 (~0.22250738585072014E~307, 0.123E~2) = ~1.809003137E~305 +pow (~0.22250738585072014E~307, 0.123E~2) = nan +atan2 (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.7853981634 +pow (~0.22250738585072014E~307, 0.22250738585072014E~307) = nan +atan2 (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~1.107148718 +pow (~0.22250738585072014E~307, 0.11125369292536007E~307) = nan +atan2 (~0.22250738585072014E~307, 0.5E~323) = ~1.570796327 +pow (~0.22250738585072014E~307, 0.5E~323) = nan +atan2 (~0.22250738585072014E~307, 0.0) = ~1.570796327 +pow (~0.22250738585072014E~307, 0.0) = 1 +atan2 (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.17976931348623157E309) = inf +atan2 (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.8988465674311579E308) = inf +atan2 (~0.22250738585072014E~307, ~0.123E4) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E4) = inf +atan2 (~0.22250738585072014E~307, ~0.123E2) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E2) = nan +atan2 (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.3141592653589793E1) = nan +atan2 (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.2718281828459045E1) = nan +atan2 (~0.22250738585072014E~307, ~0.123E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E1) = nan +atan2 (~0.22250738585072014E~307, ~0.123) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123) = nan +atan2 (~0.22250738585072014E~307, ~0.123E~2) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E~2) = nan +atan2 (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~2.35619449 +pow (~0.22250738585072014E~307, ~0.22250738585072014E~307) = nan +atan2 (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~2.034443936 +pow (~0.22250738585072014E~307, ~0.11125369292536007E~307) = nan +atan2 (~0.22250738585072014E~307, ~0.5E~323) = ~1.570796327 +pow (~0.22250738585072014E~307, ~0.5E~323) = nan +atan2 (~0.22250738585072014E~307, ~0.0) = ~1.570796327 +pow (~0.22250738585072014E~307, ~0.0) = 1 +atan2 (~0.22250738585072014E~307, inf) = 0 +pow (~0.22250738585072014E~307, inf) = 0 +atan2 (~0.22250738585072014E~307, ~inf) = ~3.141592654 +pow (~0.22250738585072014E~307, ~inf) = inf +atan2 (~0.22250738585072014E~307, nan) = nan +pow (~0.22250738585072014E~307, nan) = nan +atan2 (~0.22250738585072014E~307, inf) = 0 +pow (~0.22250738585072014E~307, inf) = 0 +atan2 (~0.11125369292536007E~307, 0.17976931348623157E309) = 0 +pow (~0.11125369292536007E~307, 0.17976931348623157E309) = 0 +atan2 (~0.11125369292536007E~307, 0.8988465674311579E308) = 0 +pow (~0.11125369292536007E~307, 0.8988465674311579E308) = 0 +atan2 (~0.11125369292536007E~307, 0.123E4) = ~9.045015685E~312 +pow (~0.11125369292536007E~307, 0.123E4) = 0 +atan2 (~0.11125369292536007E~307, 0.123E2) = ~9.045015685E~310 +pow (~0.11125369292536007E~307, 0.123E2) = nan +atan2 (~0.11125369292536007E~307, 0.3141592653589793E1) = ~3.541315033E~309 +pow (~0.11125369292536007E~307, 0.3141592653589793E1) = nan +atan2 (~0.11125369292536007E~307, 0.2718281828459045E1) = ~4.092794638E~309 +pow (~0.11125369292536007E~307, 0.2718281828459045E1) = nan +atan2 (~0.11125369292536007E~307, 0.123E1) = ~9.045015685E~309 +pow (~0.11125369292536007E~307, 0.123E1) = nan +atan2 (~0.11125369292536007E~307, 0.123) = ~9.045015685E~308 +pow (~0.11125369292536007E~307, 0.123) = nan +atan2 (~0.11125369292536007E~307, 0.123E~2) = ~9.045015685E~306 +pow (~0.11125369292536007E~307, 0.123E~2) = nan +atan2 (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.463647609 +pow (~0.11125369292536007E~307, 0.22250738585072014E~307) = nan +atan2 (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.7853981634 +pow (~0.11125369292536007E~307, 0.11125369292536007E~307) = nan +atan2 (~0.11125369292536007E~307, 0.5E~323) = ~1.570796327 +pow (~0.11125369292536007E~307, 0.5E~323) = nan +atan2 (~0.11125369292536007E~307, 0.0) = ~1.570796327 +pow (~0.11125369292536007E~307, 0.0) = 1 +atan2 (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.17976931348623157E309) = inf +atan2 (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.8988465674311579E308) = inf +atan2 (~0.11125369292536007E~307, ~0.123E4) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E4) = inf +atan2 (~0.11125369292536007E~307, ~0.123E2) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E2) = nan +atan2 (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.3141592653589793E1) = nan +atan2 (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.2718281828459045E1) = nan +atan2 (~0.11125369292536007E~307, ~0.123E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E1) = nan +atan2 (~0.11125369292536007E~307, ~0.123) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123) = nan +atan2 (~0.11125369292536007E~307, ~0.123E~2) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E~2) = nan +atan2 (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~2.677945045 +pow (~0.11125369292536007E~307, ~0.22250738585072014E~307) = nan +atan2 (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~2.35619449 +pow (~0.11125369292536007E~307, ~0.11125369292536007E~307) = nan +atan2 (~0.11125369292536007E~307, ~0.5E~323) = ~1.570796327 +pow (~0.11125369292536007E~307, ~0.5E~323) = nan +atan2 (~0.11125369292536007E~307, ~0.0) = ~1.570796327 +pow (~0.11125369292536007E~307, ~0.0) = 1 +atan2 (~0.11125369292536007E~307, inf) = 0 +pow (~0.11125369292536007E~307, inf) = 0 +atan2 (~0.11125369292536007E~307, ~inf) = ~3.141592654 +pow (~0.11125369292536007E~307, ~inf) = inf +atan2 (~0.11125369292536007E~307, nan) = nan +pow (~0.11125369292536007E~307, nan) = nan +atan2 (~0.11125369292536007E~307, inf) = 0 +pow (~0.11125369292536007E~307, inf) = 0 +atan2 (~0.5E~323, 0.17976931348623157E309) = 0 +pow (~0.5E~323, 0.17976931348623157E309) = 0 +atan2 (~0.5E~323, 0.8988465674311579E308) = 0 +pow (~0.5E~323, 0.8988465674311579E308) = 0 +atan2 (~0.5E~323, 0.123E4) = 0 +pow (~0.5E~323, 0.123E4) = 0 +atan2 (~0.5E~323, 0.123E2) = 0 +pow (~0.5E~323, 0.123E2) = nan +atan2 (~0.5E~323, 0.3141592653589793E1) = 0 +pow (~0.5E~323, 0.3141592653589793E1) = nan +atan2 (~0.5E~323, 0.2718281828459045E1) = 0 +pow (~0.5E~323, 0.2718281828459045E1) = nan +atan2 (~0.5E~323, 0.123E1) = ~4.940656458E~324 +pow (~0.5E~323, 0.123E1) = nan +atan2 (~0.5E~323, 0.123) = ~3.952525167E~323 +pow (~0.5E~323, 0.123) = nan +atan2 (~0.5E~323, 0.123E~2) = ~4.016753701E~321 +pow (~0.5E~323, 0.123E~2) = nan +atan2 (~0.5E~323, 0.22250738585072014E~307) = ~2.220446049E~16 +pow (~0.5E~323, 0.22250738585072014E~307) = nan +atan2 (~0.5E~323, 0.11125369292536007E~307) = ~4.440892099E~16 +pow (~0.5E~323, 0.11125369292536007E~307) = nan +atan2 (~0.5E~323, 0.5E~323) = ~0.7853981634 +pow (~0.5E~323, 0.5E~323) = nan +atan2 (~0.5E~323, 0.0) = ~1.570796327 +pow (~0.5E~323, 0.0) = 1 +atan2 (~0.5E~323, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.5E~323, ~0.17976931348623157E309) = inf +atan2 (~0.5E~323, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.5E~323, ~0.8988465674311579E308) = inf +atan2 (~0.5E~323, ~0.123E4) = ~3.141592654 +pow (~0.5E~323, ~0.123E4) = inf +atan2 (~0.5E~323, ~0.123E2) = ~3.141592654 +pow (~0.5E~323, ~0.123E2) = nan +atan2 (~0.5E~323, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.5E~323, ~0.3141592653589793E1) = nan +atan2 (~0.5E~323, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.5E~323, ~0.2718281828459045E1) = nan +atan2 (~0.5E~323, ~0.123E1) = ~3.141592654 +pow (~0.5E~323, ~0.123E1) = nan +atan2 (~0.5E~323, ~0.123) = ~3.141592654 +pow (~0.5E~323, ~0.123) = nan +atan2 (~0.5E~323, ~0.123E~2) = ~3.141592654 +pow (~0.5E~323, ~0.123E~2) = nan +atan2 (~0.5E~323, ~0.22250738585072014E~307) = ~3.141592654 +pow (~0.5E~323, ~0.22250738585072014E~307) = nan +atan2 (~0.5E~323, ~0.11125369292536007E~307) = ~3.141592654 +pow (~0.5E~323, ~0.11125369292536007E~307) = nan +atan2 (~0.5E~323, ~0.5E~323) = ~2.35619449 +pow (~0.5E~323, ~0.5E~323) = nan +atan2 (~0.5E~323, ~0.0) = ~1.570796327 +pow (~0.5E~323, ~0.0) = 1 +atan2 (~0.5E~323, inf) = 0 +pow (~0.5E~323, inf) = 0 +atan2 (~0.5E~323, ~inf) = ~3.141592654 +pow (~0.5E~323, ~inf) = inf +atan2 (~0.5E~323, nan) = nan +pow (~0.5E~323, nan) = nan +atan2 (~0.5E~323, inf) = 0 +pow (~0.5E~323, inf) = 0 +atan2 (~0.0, 0.17976931348623157E309) = 0 +pow (~0.0, 0.17976931348623157E309) = 0 +atan2 (~0.0, 0.8988465674311579E308) = 0 +pow (~0.0, 0.8988465674311579E308) = 0 +atan2 (~0.0, 0.123E4) = 0 +pow (~0.0, 0.123E4) = 0 +atan2 (~0.0, 0.123E2) = 0 +pow (~0.0, 0.123E2) = 0 +atan2 (~0.0, 0.3141592653589793E1) = 0 +pow (~0.0, 0.3141592653589793E1) = 0 +atan2 (~0.0, 0.2718281828459045E1) = 0 +pow (~0.0, 0.2718281828459045E1) = 0 +atan2 (~0.0, 0.123E1) = 0 +pow (~0.0, 0.123E1) = 0 +atan2 (~0.0, 0.123) = 0 +pow (~0.0, 0.123) = 0 +atan2 (~0.0, 0.123E~2) = 0 +pow (~0.0, 0.123E~2) = 0 +atan2 (~0.0, 0.22250738585072014E~307) = 0 +pow (~0.0, 0.22250738585072014E~307) = 0 +atan2 (~0.0, 0.11125369292536007E~307) = 0 +pow (~0.0, 0.11125369292536007E~307) = 0 +atan2 (~0.0, 0.5E~323) = 0 +pow (~0.0, 0.5E~323) = 0 +atan2 (~0.0, 0.0) = 0 +pow (~0.0, 0.0) = 1 +atan2 (~0.0, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.0, ~0.17976931348623157E309) = inf +atan2 (~0.0, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.0, ~0.8988465674311579E308) = inf +atan2 (~0.0, ~0.123E4) = ~3.141592654 +pow (~0.0, ~0.123E4) = inf +atan2 (~0.0, ~0.123E2) = ~3.141592654 +pow (~0.0, ~0.123E2) = inf +atan2 (~0.0, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.0, ~0.3141592653589793E1) = inf +atan2 (~0.0, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.0, ~0.2718281828459045E1) = inf +atan2 (~0.0, ~0.123E1) = ~3.141592654 +pow (~0.0, ~0.123E1) = inf +atan2 (~0.0, ~0.123) = ~3.141592654 +pow (~0.0, ~0.123) = inf +atan2 (~0.0, ~0.123E~2) = ~3.141592654 +pow (~0.0, ~0.123E~2) = inf +atan2 (~0.0, ~0.22250738585072014E~307) = ~3.141592654 +pow (~0.0, ~0.22250738585072014E~307) = inf +atan2 (~0.0, ~0.11125369292536007E~307) = ~3.141592654 +pow (~0.0, ~0.11125369292536007E~307) = inf +atan2 (~0.0, ~0.5E~323) = ~3.141592654 +pow (~0.0, ~0.5E~323) = inf +atan2 (~0.0, ~0.0) = ~3.141592654 +pow (~0.0, ~0.0) = 1 +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (~0.0, ~inf) = ~3.141592654 +pow (~0.0, ~inf) = inf +atan2 (~0.0, nan) = nan +pow (~0.0, nan) = nan +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (inf, 0.17976931348623157E309) = 1.570796327 +pow (inf, 0.17976931348623157E309) = inf +atan2 (inf, 0.8988465674311579E308) = 1.570796327 +pow (inf, 0.8988465674311579E308) = inf +atan2 (inf, 0.123E4) = 1.570796327 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796327 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.3141592653589793E1) = 1.570796327 +pow (inf, 0.3141592653589793E1) = inf +atan2 (inf, 0.2718281828459045E1) = 1.570796327 +pow (inf, 0.2718281828459045E1) = inf +atan2 (inf, 0.123E1) = 1.570796327 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796327 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796327 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.22250738585072014E~307) = 1.570796327 +pow (inf, 0.22250738585072014E~307) = inf +atan2 (inf, 0.11125369292536007E~307) = 1.570796327 +pow (inf, 0.11125369292536007E~307) = inf +atan2 (inf, 0.5E~323) = 1.570796327 +pow (inf, 0.5E~323) = inf +atan2 (inf, 0.0) = 1.570796327 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.17976931348623157E309) = 1.570796327 +pow (inf, ~0.17976931348623157E309) = 0 +atan2 (inf, ~0.8988465674311579E308) = 1.570796327 +pow (inf, ~0.8988465674311579E308) = 0 +atan2 (inf, ~0.123E4) = 1.570796327 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796327 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.3141592653589793E1) = 1.570796327 +pow (inf, ~0.3141592653589793E1) = 0 +atan2 (inf, ~0.2718281828459045E1) = 1.570796327 +pow (inf, ~0.2718281828459045E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796327 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796327 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796327 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.22250738585072014E~307) = 1.570796327 +pow (inf, ~0.22250738585072014E~307) = 0 +atan2 (inf, ~0.11125369292536007E~307) = 1.570796327 +pow (inf, ~0.11125369292536007E~307) = 0 +atan2 (inf, ~0.5E~323) = 1.570796327 +pow (inf, ~0.5E~323) = 0 +atan2 (inf, ~0.0) = 1.570796327 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.35619449 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (~inf, 0.17976931348623157E309) = ~1.570796327 +pow (~inf, 0.17976931348623157E309) = inf +atan2 (~inf, 0.8988465674311579E308) = ~1.570796327 +pow (~inf, 0.8988465674311579E308) = inf +atan2 (~inf, 0.123E4) = ~1.570796327 +pow (~inf, 0.123E4) = inf +atan2 (~inf, 0.123E2) = ~1.570796327 +pow (~inf, 0.123E2) = inf +atan2 (~inf, 0.3141592653589793E1) = ~1.570796327 +pow (~inf, 0.3141592653589793E1) = inf +atan2 (~inf, 0.2718281828459045E1) = ~1.570796327 +pow (~inf, 0.2718281828459045E1) = inf +atan2 (~inf, 0.123E1) = ~1.570796327 +pow (~inf, 0.123E1) = inf +atan2 (~inf, 0.123) = ~1.570796327 +pow (~inf, 0.123) = inf +atan2 (~inf, 0.123E~2) = ~1.570796327 +pow (~inf, 0.123E~2) = inf +atan2 (~inf, 0.22250738585072014E~307) = ~1.570796327 +pow (~inf, 0.22250738585072014E~307) = inf +atan2 (~inf, 0.11125369292536007E~307) = ~1.570796327 +pow (~inf, 0.11125369292536007E~307) = inf +atan2 (~inf, 0.5E~323) = ~1.570796327 +pow (~inf, 0.5E~323) = inf +atan2 (~inf, 0.0) = ~1.570796327 +pow (~inf, 0.0) = 1 +atan2 (~inf, ~0.17976931348623157E309) = ~1.570796327 +pow (~inf, ~0.17976931348623157E309) = 0 +atan2 (~inf, ~0.8988465674311579E308) = ~1.570796327 +pow (~inf, ~0.8988465674311579E308) = 0 +atan2 (~inf, ~0.123E4) = ~1.570796327 +pow (~inf, ~0.123E4) = 0 +atan2 (~inf, ~0.123E2) = ~1.570796327 +pow (~inf, ~0.123E2) = 0 +atan2 (~inf, ~0.3141592653589793E1) = ~1.570796327 +pow (~inf, ~0.3141592653589793E1) = 0 +atan2 (~inf, ~0.2718281828459045E1) = ~1.570796327 +pow (~inf, ~0.2718281828459045E1) = 0 +atan2 (~inf, ~0.123E1) = ~1.570796327 +pow (~inf, ~0.123E1) = 0 +atan2 (~inf, ~0.123) = ~1.570796327 +pow (~inf, ~0.123) = 0 +atan2 (~inf, ~0.123E~2) = ~1.570796327 +pow (~inf, ~0.123E~2) = 0 +atan2 (~inf, ~0.22250738585072014E~307) = ~1.570796327 +pow (~inf, ~0.22250738585072014E~307) = 0 +atan2 (~inf, ~0.11125369292536007E~307) = ~1.570796327 +pow (~inf, ~0.11125369292536007E~307) = 0 +atan2 (~inf, ~0.5E~323) = ~1.570796327 +pow (~inf, ~0.5E~323) = 0 +atan2 (~inf, ~0.0) = ~1.570796327 +pow (~inf, ~0.0) = 1 +atan2 (~inf, inf) = ~0.7853981634 +pow (~inf, inf) = inf +atan2 (~inf, ~inf) = ~2.35619449 +pow (~inf, ~inf) = 0 +atan2 (~inf, nan) = nan +pow (~inf, nan) = nan +atan2 (~inf, inf) = ~0.7853981634 +pow (~inf, inf) = inf +atan2 (nan, 0.17976931348623157E309) = nan +pow (nan, 0.17976931348623157E309) = nan +atan2 (nan, 0.8988465674311579E308) = nan +pow (nan, 0.8988465674311579E308) = nan +atan2 (nan, 0.123E4) = nan +pow (nan, 0.123E4) = nan +atan2 (nan, 0.123E2) = nan +pow (nan, 0.123E2) = nan +atan2 (nan, 0.3141592653589793E1) = nan +pow (nan, 0.3141592653589793E1) = nan +atan2 (nan, 0.2718281828459045E1) = nan +pow (nan, 0.2718281828459045E1) = nan +atan2 (nan, 0.123E1) = nan +pow (nan, 0.123E1) = nan +atan2 (nan, 0.123) = nan +pow (nan, 0.123) = nan +atan2 (nan, 0.123E~2) = nan +pow (nan, 0.123E~2) = nan +atan2 (nan, 0.22250738585072014E~307) = nan +pow (nan, 0.22250738585072014E~307) = nan +atan2 (nan, 0.11125369292536007E~307) = nan +pow (nan, 0.11125369292536007E~307) = nan +atan2 (nan, 0.5E~323) = nan +pow (nan, 0.5E~323) = nan +atan2 (nan, 0.0) = nan +pow (nan, 0.0) = 1 +atan2 (nan, ~0.17976931348623157E309) = nan +pow (nan, ~0.17976931348623157E309) = nan +atan2 (nan, ~0.8988465674311579E308) = nan +pow (nan, ~0.8988465674311579E308) = nan +atan2 (nan, ~0.123E4) = nan +pow (nan, ~0.123E4) = nan +atan2 (nan, ~0.123E2) = nan +pow (nan, ~0.123E2) = nan +atan2 (nan, ~0.3141592653589793E1) = nan +pow (nan, ~0.3141592653589793E1) = nan +atan2 (nan, ~0.2718281828459045E1) = nan +pow (nan, ~0.2718281828459045E1) = nan +atan2 (nan, ~0.123E1) = nan +pow (nan, ~0.123E1) = nan +atan2 (nan, ~0.123) = nan +pow (nan, ~0.123) = nan +atan2 (nan, ~0.123E~2) = nan +pow (nan, ~0.123E~2) = nan +atan2 (nan, ~0.22250738585072014E~307) = nan +pow (nan, ~0.22250738585072014E~307) = nan +atan2 (nan, ~0.11125369292536007E~307) = nan +pow (nan, ~0.11125369292536007E~307) = nan +atan2 (nan, ~0.5E~323) = nan +pow (nan, ~0.5E~323) = nan +atan2 (nan, ~0.0) = nan +pow (nan, ~0.0) = 1 +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (nan, ~inf) = nan +pow (nan, ~inf) = nan +atan2 (nan, nan) = nan +pow (nan, nan) = nan +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (inf, 0.17976931348623157E309) = 1.570796327 +pow (inf, 0.17976931348623157E309) = inf +atan2 (inf, 0.8988465674311579E308) = 1.570796327 +pow (inf, 0.8988465674311579E308) = inf +atan2 (inf, 0.123E4) = 1.570796327 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796327 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.3141592653589793E1) = 1.570796327 +pow (inf, 0.3141592653589793E1) = inf +atan2 (inf, 0.2718281828459045E1) = 1.570796327 +pow (inf, 0.2718281828459045E1) = inf +atan2 (inf, 0.123E1) = 1.570796327 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796327 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796327 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.22250738585072014E~307) = 1.570796327 +pow (inf, 0.22250738585072014E~307) = inf +atan2 (inf, 0.11125369292536007E~307) = 1.570796327 +pow (inf, 0.11125369292536007E~307) = inf +atan2 (inf, 0.5E~323) = 1.570796327 +pow (inf, 0.5E~323) = inf +atan2 (inf, 0.0) = 1.570796327 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.17976931348623157E309) = 1.570796327 +pow (inf, ~0.17976931348623157E309) = 0 +atan2 (inf, ~0.8988465674311579E308) = 1.570796327 +pow (inf, ~0.8988465674311579E308) = 0 +atan2 (inf, ~0.123E4) = 1.570796327 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796327 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.3141592653589793E1) = 1.570796327 +pow (inf, ~0.3141592653589793E1) = 0 +atan2 (inf, ~0.2718281828459045E1) = 1.570796327 +pow (inf, ~0.2718281828459045E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796327 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796327 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796327 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.22250738585072014E~307) = 1.570796327 +pow (inf, ~0.22250738585072014E~307) = 0 +atan2 (inf, ~0.11125369292536007E~307) = 1.570796327 +pow (inf, ~0.11125369292536007E~307) = 0 +atan2 (inf, ~0.5E~323) = 1.570796327 +pow (inf, ~0.5E~323) = 0 +atan2 (inf, ~0.0) = 1.570796327 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.35619449 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf + +Testing *+, *- +SOME *+ AND STANDARD RESULTS DIFFER +(r1, r2, r3): *+(r1, r2, r3) (r1 * r2 + r3) +-------------------------------------------- +(0.17976931348623157E309, 0.123E1, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(0.17976931348623157E309, 0.123E1, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(0.17976931348623157E309, ~0.123E1, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(0.17976931348623157E309, ~0.123E1, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(0.8988465674311579E308, 0.123E1, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(0.8988465674311579E308, 0.123E1, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(0.8988465674311579E308, ~0.3141592653589793E1, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(0.8988465674311579E308, ~0.123E1, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(0.8988465674311579E308, ~0.123E1, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(0.123E4, 0.123E2, 0.123E2): 0.15141300000000001E5 0.151413E5 +(0.123E4, 0.123E2, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(0.123E4, 0.123E2, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(0.123E4, 0.123E2, 0.123): 0.15129123000000001E5 0.15129123E5 +(0.123E4, 0.123E2, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(0.123E4, 0.123E2, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(0.123E4, 0.3141592653589793E1, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(0.123E4, 0.3141592653589793E1, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(0.123E4, 0.3141592653589793E1, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(0.123E4, 0.2718281828459045E1, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(0.123E4, 0.2718281828459045E1, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(0.123E4, 0.2718281828459045E1, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(0.123E4, 0.2718281828459045E1, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(0.123E4, 0.2718281828459045E1, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(0.123E4, 0.123E1, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(0.123E4, 0.123E1, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(0.123E4, 0.123E1, 0.123E1): 0.15141299999999999E4 0.151413E4 +(0.123E4, 0.123E1, 0.123): 0.1513023E4 0.15130230000000001E4 +(0.123E4, 0.123E1, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(0.123E4, 0.123E1, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(0.123E4, 0.123E1, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(0.123E4, 0.123, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(0.123E4, 0.123, 0.123E1): 0.15252E3 0.15251999999999998E3 +(0.123E4, 0.123, 0.123): 0.151413E3 0.15141299999999998E3 +(0.123E4, 0.123, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(0.123E4, 0.123, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(0.123E4, 0.123E~2, 0.123E1): 0.27429E1 0.27428999999999997E1 +(0.123E4, 0.123E~2, ~0.123E1): 0.2829 0.28289999999999993 +(0.123E4, 0.123E~2, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(0.123E4, ~0.123E2, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(0.123E4, ~0.123E2, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(0.123E4, ~0.123E2, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(0.123E4, ~0.123E2, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(0.123E4, ~0.123E2, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(0.123E4, ~0.123E2, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(0.123E4, ~0.3141592653589793E1, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(0.123E4, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(0.123E4, ~0.3141592653589793E1, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(0.123E4, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(0.123E4, ~0.2718281828459045E1, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(0.123E4, ~0.2718281828459045E1, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(0.123E4, ~0.2718281828459045E1, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(0.123E4, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(0.123E4, ~0.123E1, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(0.123E4, ~0.123E1, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(0.123E4, ~0.123E1, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(0.123E4, ~0.123E1, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(0.123E4, ~0.123E1, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(0.123E4, ~0.123E1, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(0.123E4, ~0.123E1, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(0.123E4, ~0.123, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(0.123E4, ~0.123, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(0.123E4, ~0.123, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(0.123E4, ~0.123, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(0.123E4, ~0.123, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(0.123E4, ~0.123E~2, 0.123E1): ~0.2829 ~0.28289999999999993 +(0.123E4, ~0.123E~2, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(0.123E4, ~0.123E~2, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(0.123E2, 0.123E4, 0.123E2): 0.15141300000000001E5 0.151413E5 +(0.123E2, 0.123E4, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(0.123E2, 0.123E4, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(0.123E2, 0.123E4, 0.123): 0.15129123000000001E5 0.15129123E5 +(0.123E2, 0.123E4, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(0.123E2, 0.123E4, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(0.123E2, 0.3141592653589793E1, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(0.123E2, 0.3141592653589793E1, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(0.123E2, 0.3141592653589793E1, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(0.123E2, 0.3141592653589793E1, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(0.123E2, 0.3141592653589793E1, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(0.123E2, 0.2718281828459045E1, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(0.123E2, 0.2718281828459045E1, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(0.123E2, 0.2718281828459045E1, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(0.123E2, 0.2718281828459045E1, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(0.123E2, 0.2718281828459045E1, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(0.123E2, 0.2718281828459045E1, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(0.123E2, 0.123E1, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(0.123E2, 0.123E1, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(0.123E2, 0.123E1, ~0.123): 0.15006E2 0.15006000000000002E2 +(0.123E2, 0.123E1, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(0.123E2, 0.123, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(0.123E2, 0.123, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(0.123E2, 0.123E~2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(0.123E2, ~0.123E4, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(0.123E2, ~0.123E4, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(0.123E2, ~0.123E4, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(0.123E2, ~0.123E4, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(0.123E2, ~0.123E4, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(0.123E2, ~0.123E4, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(0.123E2, ~0.3141592653589793E1, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(0.123E2, ~0.3141592653589793E1, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(0.123E2, ~0.3141592653589793E1, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(0.123E2, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(0.123E2, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(0.123E2, ~0.2718281828459045E1, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(0.123E2, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(0.123E2, ~0.2718281828459045E1, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(0.123E2, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(0.123E2, ~0.2718281828459045E1, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(0.123E2, ~0.2718281828459045E1, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(0.123E2, ~0.123E1, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(0.123E2, ~0.123E1, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(0.123E2, ~0.123E1, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(0.123E2, ~0.123E1, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(0.123E2, ~0.123, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(0.123E2, ~0.123, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(0.123E2, ~0.123E~2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(0.3141592653589793E1, 0.8988465674311579E308, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(0.3141592653589793E1, 0.123E4, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(0.3141592653589793E1, 0.123E4, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(0.3141592653589793E1, 0.123E4, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(0.3141592653589793E1, 0.123E2, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(0.3141592653589793E1, 0.123E2, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(0.3141592653589793E1, 0.123E2, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(0.3141592653589793E1, 0.123E2, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(0.3141592653589793E1, 0.123E2, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.2718281828459045E1): 0.71513225726303125E1 0.7151322572630313E1 +(0.3141592653589793E1, 0.2718281828459045E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(0.3141592653589793E1, 0.123E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(0.3141592653589793E1, 0.123E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(0.3141592653589793E1, 0.123E~2, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(0.3141592653589793E1, ~0.8988465674311579E308, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(0.3141592653589793E1, ~0.123E4, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(0.3141592653589793E1, ~0.123E4, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(0.3141592653589793E1, ~0.123E4, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(0.3141592653589793E1, ~0.123E2, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(0.3141592653589793E1, ~0.123E2, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(0.3141592653589793E1, ~0.123E2, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(0.3141592653589793E1, ~0.123E2, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(0.3141592653589793E1, ~0.123E2, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.2718281828459045E1): ~0.71513225726303125E1 ~0.7151322572630313E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(0.3141592653589793E1, ~0.123E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(0.3141592653589793E1, ~0.123E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(0.3141592653589793E1, ~0.123E~2, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(0.2718281828459045E1, 0.8988465674311579E308, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(0.2718281828459045E1, 0.123E4, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(0.2718281828459045E1, 0.123E4, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(0.2718281828459045E1, 0.123E4, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(0.2718281828459045E1, 0.123E4, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(0.2718281828459045E1, 0.123E4, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(0.2718281828459045E1, 0.123E2, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(0.2718281828459045E1, 0.123E2, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(0.2718281828459045E1, 0.123E2, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(0.2718281828459045E1, 0.123E2, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(0.2718281828459045E1, 0.123E2, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(0.2718281828459045E1, 0.123E2, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(0.2718281828459045E1, 0.3141592653589793E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.123E1): 0.6159056098930649E1 0.615905609893065E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.123E~2): 0.7387826098930649E1 0.738782609893065E1 +(0.2718281828459045E1, 0.123E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(0.2718281828459045E1, 0.123E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(0.2718281828459045E1, 0.123E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(0.2718281828459045E1, 0.123E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(0.2718281828459045E1, 0.123, ~0.123): 0.21134866490046253 0.21134866490046256 +(0.2718281828459045E1, ~0.8988465674311579E308, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(0.2718281828459045E1, ~0.123E4, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(0.2718281828459045E1, ~0.123E4, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(0.2718281828459045E1, ~0.123E4, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(0.2718281828459045E1, ~0.123E4, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(0.2718281828459045E1, ~0.123E4, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(0.2718281828459045E1, ~0.123E2, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(0.2718281828459045E1, ~0.123E2, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(0.2718281828459045E1, ~0.123E2, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(0.2718281828459045E1, ~0.123E2, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(0.2718281828459045E1, ~0.123E2, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(0.2718281828459045E1, ~0.123E2, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.123E1): ~0.6159056098930649E1 ~0.615905609893065E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.123E~2): ~0.7387826098930649E1 ~0.738782609893065E1 +(0.2718281828459045E1, ~0.123E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(0.2718281828459045E1, ~0.123E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(0.2718281828459045E1, ~0.123E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(0.2718281828459045E1, ~0.123E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(0.2718281828459045E1, ~0.123, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(0.123E1, 0.17976931348623157E309, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(0.123E1, 0.17976931348623157E309, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(0.123E1, 0.8988465674311579E308, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(0.123E1, 0.8988465674311579E308, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(0.123E1, 0.123E4, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(0.123E1, 0.123E4, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(0.123E1, 0.123E4, 0.123E1): 0.15141299999999999E4 0.151413E4 +(0.123E1, 0.123E4, 0.123): 0.1513023E4 0.15130230000000001E4 +(0.123E1, 0.123E4, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(0.123E1, 0.123E4, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(0.123E1, 0.123E4, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(0.123E1, 0.123E2, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(0.123E1, 0.123E2, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(0.123E1, 0.123E2, ~0.123): 0.15006E2 0.15006000000000002E2 +(0.123E1, 0.123E2, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(0.123E1, 0.3141592653589793E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(0.123E1, 0.3141592653589793E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(0.123E1, 0.2718281828459045E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(0.123E1, 0.2718281828459045E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(0.123E1, 0.2718281828459045E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(0.123E1, 0.2718281828459045E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(0.123E1, 0.123E1, 0.123E1): 0.27429E1 0.27428999999999997E1 +(0.123E1, 0.123E1, ~0.123E1): 0.2829 0.28289999999999993 +(0.123E1, 0.123, 0.123): 0.27429 0.27429000000000003 +(0.123E1, 0.123, 0.123E~2): 0.15252 0.15252000000000002 +(0.123E1, 0.123, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(0.123E1, ~0.17976931348623157E309, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(0.123E1, ~0.17976931348623157E309, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(0.123E1, ~0.8988465674311579E308, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(0.123E1, ~0.8988465674311579E308, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(0.123E1, ~0.123E4, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(0.123E1, ~0.123E4, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(0.123E1, ~0.123E4, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(0.123E1, ~0.123E4, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(0.123E1, ~0.123E4, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(0.123E1, ~0.123E4, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(0.123E1, ~0.123E4, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(0.123E1, ~0.123E2, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(0.123E1, ~0.123E2, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(0.123E1, ~0.123E2, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(0.123E1, ~0.123E2, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(0.123E1, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(0.123E1, ~0.3141592653589793E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(0.123E1, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(0.123E1, ~0.2718281828459045E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(0.123E1, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(0.123E1, ~0.2718281828459045E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(0.123E1, ~0.123E1, 0.123E1): ~0.2829 ~0.28289999999999993 +(0.123E1, ~0.123E1, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(0.123E1, ~0.123, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(0.123E1, ~0.123, ~0.123): ~0.27429 ~0.27429000000000003 +(0.123E1, ~0.123, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(0.123, 0.123E4, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(0.123, 0.123E4, 0.123E1): 0.15252E3 0.15251999999999998E3 +(0.123, 0.123E4, 0.123): 0.151413E3 0.15141299999999998E3 +(0.123, 0.123E4, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(0.123, 0.123E4, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(0.123, 0.123E2, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(0.123, 0.123E2, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(0.123, 0.2718281828459045E1, ~0.123): 0.21134866490046253 0.21134866490046256 +(0.123, 0.123E1, 0.123): 0.27429 0.27429000000000003 +(0.123, 0.123E1, 0.123E~2): 0.15252 0.15252000000000002 +(0.123, 0.123E1, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(0.123, 0.11125369292536007E~307, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(0.123, 0.11125369292536007E~307, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 +(0.123, ~0.123E4, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(0.123, ~0.123E4, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(0.123, ~0.123E4, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(0.123, ~0.123E4, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(0.123, ~0.123E4, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(0.123, ~0.123E2, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(0.123, ~0.123E2, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(0.123, ~0.2718281828459045E1, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(0.123, ~0.123E1, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(0.123, ~0.123E1, ~0.123): ~0.27429 ~0.27429000000000003 +(0.123, ~0.123E1, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(0.123, ~0.11125369292536007E~307, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(0.123, ~0.11125369292536007E~307, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(0.123E~2, 0.123E4, 0.123E1): 0.27429E1 0.27428999999999997E1 +(0.123E~2, 0.123E4, ~0.123E1): 0.2829 0.28289999999999993 +(0.123E~2, 0.123E4, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(0.123E~2, 0.123E2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(0.123E~2, 0.3141592653589793E1, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(0.123E~2, ~0.123E4, 0.123E1): ~0.2829 ~0.28289999999999993 +(0.123E~2, ~0.123E4, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(0.123E~2, ~0.123E4, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(0.123E~2, ~0.123E2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(0.123E~2, ~0.3141592653589793E1, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(0.11125369292536007E~307, 0.123, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(0.11125369292536007E~307, 0.123, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 +(0.11125369292536007E~307, ~0.123, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(0.11125369292536007E~307, ~0.123, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(~0.17976931348623157E309, 0.123E1, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(~0.17976931348623157E309, 0.123E1, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(~0.17976931348623157E309, ~0.123E1, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(~0.17976931348623157E309, ~0.123E1, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(~0.8988465674311579E308, 0.123E1, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(~0.8988465674311579E308, 0.123E1, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(~0.8988465674311579E308, ~0.123E1, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(~0.8988465674311579E308, ~0.123E1, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(~0.123E4, 0.123E2, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(~0.123E4, 0.123E2, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(~0.123E4, 0.123E2, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(~0.123E4, 0.123E2, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(~0.123E4, 0.123E2, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(~0.123E4, 0.123E2, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(~0.123E4, 0.3141592653589793E1, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(~0.123E4, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(~0.123E4, 0.3141592653589793E1, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(~0.123E4, 0.2718281828459045E1, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(~0.123E4, 0.2718281828459045E1, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(~0.123E4, 0.2718281828459045E1, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(~0.123E4, 0.2718281828459045E1, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(~0.123E4, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(~0.123E4, 0.123E1, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(~0.123E4, 0.123E1, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(~0.123E4, 0.123E1, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(~0.123E4, 0.123E1, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(~0.123E4, 0.123E1, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(~0.123E4, 0.123E1, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(~0.123E4, 0.123E1, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(~0.123E4, 0.123, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(~0.123E4, 0.123, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(~0.123E4, 0.123, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(~0.123E4, 0.123, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(~0.123E4, 0.123, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(~0.123E4, 0.123E~2, 0.123E1): ~0.2829 ~0.28289999999999993 +(~0.123E4, 0.123E~2, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(~0.123E4, 0.123E~2, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(~0.123E4, ~0.123E2, 0.123E2): 0.15141300000000001E5 0.151413E5 +(~0.123E4, ~0.123E2, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(~0.123E4, ~0.123E2, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(~0.123E4, ~0.123E2, 0.123): 0.15129123000000001E5 0.15129123E5 +(~0.123E4, ~0.123E2, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(~0.123E4, ~0.123E2, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(~0.123E4, ~0.3141592653589793E1, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(~0.123E4, ~0.3141592653589793E1, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(~0.123E4, ~0.3141592653589793E1, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(~0.123E4, ~0.2718281828459045E1, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(~0.123E4, ~0.2718281828459045E1, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(~0.123E4, ~0.2718281828459045E1, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(~0.123E4, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(~0.123E4, ~0.2718281828459045E1, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(~0.123E4, ~0.123E1, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(~0.123E4, ~0.123E1, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(~0.123E4, ~0.123E1, 0.123E1): 0.15141299999999999E4 0.151413E4 +(~0.123E4, ~0.123E1, 0.123): 0.1513023E4 0.15130230000000001E4 +(~0.123E4, ~0.123E1, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(~0.123E4, ~0.123E1, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(~0.123E4, ~0.123E1, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(~0.123E4, ~0.123, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(~0.123E4, ~0.123, 0.123E1): 0.15252E3 0.15251999999999998E3 +(~0.123E4, ~0.123, 0.123): 0.151413E3 0.15141299999999998E3 +(~0.123E4, ~0.123, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(~0.123E4, ~0.123, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(~0.123E4, ~0.123E~2, 0.123E1): 0.27429E1 0.27428999999999997E1 +(~0.123E4, ~0.123E~2, ~0.123E1): 0.2829 0.28289999999999993 +(~0.123E4, ~0.123E~2, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(~0.123E2, 0.123E4, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(~0.123E2, 0.123E4, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(~0.123E2, 0.123E4, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(~0.123E2, 0.123E4, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(~0.123E2, 0.123E4, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(~0.123E2, 0.123E4, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(~0.123E2, 0.3141592653589793E1, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(~0.123E2, 0.3141592653589793E1, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(~0.123E2, 0.3141592653589793E1, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(~0.123E2, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(~0.123E2, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(~0.123E2, 0.2718281828459045E1, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(~0.123E2, 0.2718281828459045E1, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(~0.123E2, 0.2718281828459045E1, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(~0.123E2, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(~0.123E2, 0.2718281828459045E1, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(~0.123E2, 0.2718281828459045E1, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(~0.123E2, 0.123E1, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(~0.123E2, 0.123E1, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(~0.123E2, 0.123E1, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(~0.123E2, 0.123E1, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(~0.123E2, 0.123, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(~0.123E2, 0.123, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(~0.123E2, 0.123E~2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(~0.123E2, ~0.123E4, 0.123E2): 0.15141300000000001E5 0.151413E5 +(~0.123E2, ~0.123E4, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(~0.123E2, ~0.123E4, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(~0.123E2, ~0.123E4, 0.123): 0.15129123000000001E5 0.15129123E5 +(~0.123E2, ~0.123E4, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(~0.123E2, ~0.123E4, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(~0.123E2, ~0.3141592653589793E1, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(~0.123E2, ~0.3141592653589793E1, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(~0.123E2, ~0.2718281828459045E1, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(~0.123E2, ~0.2718281828459045E1, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(~0.123E2, ~0.2718281828459045E1, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(~0.123E2, ~0.2718281828459045E1, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(~0.123E2, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(~0.123E2, ~0.2718281828459045E1, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(~0.123E2, ~0.123E1, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(~0.123E2, ~0.123E1, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(~0.123E2, ~0.123E1, ~0.123): 0.15006E2 0.15006000000000002E2 +(~0.123E2, ~0.123E1, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(~0.123E2, ~0.123, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(~0.123E2, ~0.123, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(~0.123E2, ~0.123E~2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(~0.3141592653589793E1, 0.8988465674311579E308, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(~0.3141592653589793E1, 0.123E4, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(~0.3141592653589793E1, 0.123E4, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(~0.3141592653589793E1, 0.123E4, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(~0.3141592653589793E1, 0.123E2, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(~0.3141592653589793E1, 0.123E2, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(~0.3141592653589793E1, 0.123E2, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(~0.3141592653589793E1, 0.123E2, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(~0.3141592653589793E1, 0.123E2, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.2718281828459045E1): ~0.71513225726303125E1 ~0.7151322572630313E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(~0.3141592653589793E1, 0.123E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(~0.3141592653589793E1, 0.123E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(~0.3141592653589793E1, 0.123E~2, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(~0.3141592653589793E1, ~0.123E4, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(~0.3141592653589793E1, ~0.123E4, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(~0.3141592653589793E1, ~0.123E4, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(~0.3141592653589793E1, ~0.123E2, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(~0.3141592653589793E1, ~0.123E2, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.2718281828459045E1): 0.71513225726303125E1 0.7151322572630313E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(~0.3141592653589793E1, ~0.123E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(~0.3141592653589793E1, ~0.123E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(~0.3141592653589793E1, ~0.123E~2, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(~0.2718281828459045E1, 0.8988465674311579E308, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(~0.2718281828459045E1, 0.123E4, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(~0.2718281828459045E1, 0.123E4, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(~0.2718281828459045E1, 0.123E4, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(~0.2718281828459045E1, 0.123E4, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(~0.2718281828459045E1, 0.123E4, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(~0.2718281828459045E1, 0.123E2, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(~0.2718281828459045E1, 0.123E2, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(~0.2718281828459045E1, 0.123E2, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(~0.2718281828459045E1, 0.123E2, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(~0.2718281828459045E1, 0.123E2, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(~0.2718281828459045E1, 0.123E2, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.123E1): ~0.6159056098930649E1 ~0.615905609893065E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.123E~2): ~0.7387826098930649E1 ~0.738782609893065E1 +(~0.2718281828459045E1, 0.123E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(~0.2718281828459045E1, 0.123E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(~0.2718281828459045E1, 0.123E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(~0.2718281828459045E1, 0.123E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(~0.2718281828459045E1, 0.123, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(~0.2718281828459045E1, ~0.123E4, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(~0.2718281828459045E1, ~0.123E4, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(~0.2718281828459045E1, ~0.123E4, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(~0.2718281828459045E1, ~0.123E4, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(~0.2718281828459045E1, ~0.123E4, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(~0.2718281828459045E1, ~0.123E2, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(~0.2718281828459045E1, ~0.123E2, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(~0.2718281828459045E1, ~0.123E2, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(~0.2718281828459045E1, ~0.123E2, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(~0.2718281828459045E1, ~0.123E2, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(~0.2718281828459045E1, ~0.123E2, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E1): 0.6159056098930649E1 0.615905609893065E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E~2): 0.7387826098930649E1 0.738782609893065E1 +(~0.2718281828459045E1, ~0.123E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(~0.2718281828459045E1, ~0.123E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(~0.2718281828459045E1, ~0.123E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(~0.2718281828459045E1, ~0.123E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(~0.2718281828459045E1, ~0.123, ~0.123): 0.21134866490046253 0.21134866490046256 +(~0.123E1, 0.17976931348623157E309, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(~0.123E1, 0.17976931348623157E309, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(~0.123E1, 0.8988465674311579E308, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(~0.123E1, 0.8988465674311579E308, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(~0.123E1, 0.123E4, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(~0.123E1, 0.123E4, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(~0.123E1, 0.123E4, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(~0.123E1, 0.123E4, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(~0.123E1, 0.123E4, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(~0.123E1, 0.123E4, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(~0.123E1, 0.123E4, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(~0.123E1, 0.123E2, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(~0.123E1, 0.123E2, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(~0.123E1, 0.123E2, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(~0.123E1, 0.123E2, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(~0.123E1, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(~0.123E1, 0.3141592653589793E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(~0.123E1, 0.2718281828459045E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(~0.123E1, 0.2718281828459045E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(~0.123E1, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(~0.123E1, 0.2718281828459045E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(~0.123E1, 0.123E1, 0.123E1): ~0.2829 ~0.28289999999999993 +(~0.123E1, 0.123E1, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(~0.123E1, 0.123, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(~0.123E1, 0.123, ~0.123): ~0.27429 ~0.27429000000000003 +(~0.123E1, 0.123, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(~0.123E1, ~0.17976931348623157E309, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(~0.123E1, ~0.17976931348623157E309, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(~0.123E1, ~0.8988465674311579E308, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(~0.123E1, ~0.8988465674311579E308, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(~0.123E1, ~0.123E4, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(~0.123E1, ~0.123E4, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(~0.123E1, ~0.123E4, 0.123E1): 0.15141299999999999E4 0.151413E4 +(~0.123E1, ~0.123E4, 0.123): 0.1513023E4 0.15130230000000001E4 +(~0.123E1, ~0.123E4, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(~0.123E1, ~0.123E4, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(~0.123E1, ~0.123E4, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(~0.123E1, ~0.123E2, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(~0.123E1, ~0.123E2, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(~0.123E1, ~0.123E2, ~0.123): 0.15006E2 0.15006000000000002E2 +(~0.123E1, ~0.123E2, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(~0.123E1, ~0.3141592653589793E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(~0.123E1, ~0.3141592653589793E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(~0.123E1, ~0.2718281828459045E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(~0.123E1, ~0.2718281828459045E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(~0.123E1, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(~0.123E1, ~0.2718281828459045E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(~0.123E1, ~0.123E1, 0.123E1): 0.27429E1 0.27428999999999997E1 +(~0.123E1, ~0.123E1, ~0.123E1): 0.2829 0.28289999999999993 +(~0.123E1, ~0.123, 0.123): 0.27429 0.27429000000000003 +(~0.123E1, ~0.123, 0.123E~2): 0.15252 0.15252000000000002 +(~0.123E1, ~0.123, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(~0.123, 0.123E4, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(~0.123, 0.123E4, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(~0.123, 0.123E4, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(~0.123, 0.123E4, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(~0.123, 0.123E4, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(~0.123, 0.123E2, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(~0.123, 0.123E2, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(~0.123, 0.2718281828459045E1, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(~0.123, 0.123E1, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(~0.123, 0.123E1, ~0.123): ~0.27429 ~0.27429000000000003 +(~0.123, 0.123E1, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(~0.123, 0.11125369292536007E~307, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(~0.123, 0.11125369292536007E~307, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(~0.123, ~0.123E4, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(~0.123, ~0.123E4, 0.123E1): 0.15252E3 0.15251999999999998E3 +(~0.123, ~0.123E4, 0.123): 0.151413E3 0.15141299999999998E3 +(~0.123, ~0.123E4, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(~0.123, ~0.123E4, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(~0.123, ~0.123E2, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(~0.123, ~0.123E2, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(~0.123, ~0.2718281828459045E1, ~0.123): 0.21134866490046253 0.21134866490046256 +(~0.123, ~0.123E1, 0.123): 0.27429 0.27429000000000003 +(~0.123, ~0.123E1, 0.123E~2): 0.15252 0.15252000000000002 +(~0.123, ~0.123E1, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(~0.123, ~0.11125369292536007E~307, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(~0.123, ~0.11125369292536007E~307, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 +(~0.123E~2, 0.123E4, 0.123E1): ~0.2829 ~0.28289999999999993 +(~0.123E~2, 0.123E4, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(~0.123E~2, 0.123E4, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(~0.123E~2, 0.123E2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(~0.123E~2, 0.3141592653589793E1, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(~0.123E~2, ~0.123E4, 0.123E1): 0.27429E1 0.27428999999999997E1 +(~0.123E~2, ~0.123E4, ~0.123E1): 0.2829 0.28289999999999993 +(~0.123E~2, ~0.123E4, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(~0.123E~2, ~0.123E2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(~0.123E~2, ~0.3141592653589793E1, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(~0.11125369292536007E~307, 0.123, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(~0.11125369292536007E~307, 0.123, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(~0.11125369292536007E~307, ~0.123, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(~0.11125369292536007E~307, ~0.123, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 + +Testing Real.{realCeil,realFloor,realTrunc} +0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 +0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 +0.123E4 0.123E4 0.123E4 0.123E4 +0.123E2 0.13E2 0.12E2 0.12E2 +0.3141592653589793E1 0.4E1 0.3E1 0.3E1 +0.2718281828459045E1 0.3E1 0.2E1 0.2E1 +0.123E1 0.2E1 0.1E1 0.1E1 +0.123 0.1E1 0.0 0.0 +0.123E~2 0.1E1 0.0 0.0 +0.22250738585072014E~307 0.1E1 0.0 0.0 +0.11125369292536007E~307 0.1E1 0.0 0.0 +0.5E~323 0.1E1 0.0 0.0 +0.0 0.0 0.0 0.0 +~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 +~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 +~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 +~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 +~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 +~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 +~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 +~0.123 ~0.0 ~0.1E1 ~0.0 +~0.123E~2 ~0.0 ~0.1E1 ~0.0 +~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 +~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 +~0.5E~323 ~0.0 ~0.1E1 ~0.0 +~0.0 ~0.0 ~0.0 ~0.0 + +Testing Real.{<,<=,>,>=,==,!=,?=,unordered} +< (0.17976931348623157E309, 0.17976931348623157E309) = false +> (0.17976931348623157E309, 0.17976931348623157E309) = false +== (0.17976931348623157E309, 0.17976931348623157E309) = true +?= (0.17976931348623157E309, 0.17976931348623157E309) = true +< (0.17976931348623157E309, 0.8988465674311579E308) = false +> (0.17976931348623157E309, 0.8988465674311579E308) = true +== (0.17976931348623157E309, 0.8988465674311579E308) = false +?= (0.17976931348623157E309, 0.8988465674311579E308) = false +< (0.17976931348623157E309, 0.123E4) = false +> (0.17976931348623157E309, 0.123E4) = true +== (0.17976931348623157E309, 0.123E4) = false +?= (0.17976931348623157E309, 0.123E4) = false +< (0.17976931348623157E309, 0.123E2) = false +> (0.17976931348623157E309, 0.123E2) = true +== (0.17976931348623157E309, 0.123E2) = false +?= (0.17976931348623157E309, 0.123E2) = false +< (0.17976931348623157E309, 0.3141592653589793E1) = false +> (0.17976931348623157E309, 0.3141592653589793E1) = true +== (0.17976931348623157E309, 0.3141592653589793E1) = false +?= (0.17976931348623157E309, 0.3141592653589793E1) = false +< (0.17976931348623157E309, 0.2718281828459045E1) = false +> (0.17976931348623157E309, 0.2718281828459045E1) = true +== (0.17976931348623157E309, 0.2718281828459045E1) = false +?= (0.17976931348623157E309, 0.2718281828459045E1) = false +< (0.17976931348623157E309, 0.123E1) = false +> (0.17976931348623157E309, 0.123E1) = true +== (0.17976931348623157E309, 0.123E1) = false +?= (0.17976931348623157E309, 0.123E1) = false +< (0.17976931348623157E309, 0.123) = false +> (0.17976931348623157E309, 0.123) = true +== (0.17976931348623157E309, 0.123) = false +?= (0.17976931348623157E309, 0.123) = false +< (0.17976931348623157E309, 0.123E~2) = false +> (0.17976931348623157E309, 0.123E~2) = true +== (0.17976931348623157E309, 0.123E~2) = false +?= (0.17976931348623157E309, 0.123E~2) = false +< (0.17976931348623157E309, 0.22250738585072014E~307) = false +> (0.17976931348623157E309, 0.22250738585072014E~307) = true +== (0.17976931348623157E309, 0.22250738585072014E~307) = false +?= (0.17976931348623157E309, 0.22250738585072014E~307) = false +< (0.17976931348623157E309, 0.11125369292536007E~307) = false +> (0.17976931348623157E309, 0.11125369292536007E~307) = true +== (0.17976931348623157E309, 0.11125369292536007E~307) = false +?= (0.17976931348623157E309, 0.11125369292536007E~307) = false +< (0.17976931348623157E309, 0.5E~323) = false +> (0.17976931348623157E309, 0.5E~323) = true +== (0.17976931348623157E309, 0.5E~323) = false +?= (0.17976931348623157E309, 0.5E~323) = false +< (0.17976931348623157E309, 0.0) = false +> (0.17976931348623157E309, 0.0) = true +== (0.17976931348623157E309, 0.0) = false +?= (0.17976931348623157E309, 0.0) = false +< (0.17976931348623157E309, ~0.17976931348623157E309) = false +> (0.17976931348623157E309, ~0.17976931348623157E309) = true +== (0.17976931348623157E309, ~0.17976931348623157E309) = false +?= (0.17976931348623157E309, ~0.17976931348623157E309) = false +< (0.17976931348623157E309, ~0.8988465674311579E308) = false +> (0.17976931348623157E309, ~0.8988465674311579E308) = true +== (0.17976931348623157E309, ~0.8988465674311579E308) = false +?= (0.17976931348623157E309, ~0.8988465674311579E308) = false +< (0.17976931348623157E309, ~0.123E4) = false +> (0.17976931348623157E309, ~0.123E4) = true +== (0.17976931348623157E309, ~0.123E4) = false +?= (0.17976931348623157E309, ~0.123E4) = false +< (0.17976931348623157E309, ~0.123E2) = false +> (0.17976931348623157E309, ~0.123E2) = true +== (0.17976931348623157E309, ~0.123E2) = false +?= (0.17976931348623157E309, ~0.123E2) = false +< (0.17976931348623157E309, ~0.3141592653589793E1) = false +> (0.17976931348623157E309, ~0.3141592653589793E1) = true +== (0.17976931348623157E309, ~0.3141592653589793E1) = false +?= (0.17976931348623157E309, ~0.3141592653589793E1) = false +< (0.17976931348623157E309, ~0.2718281828459045E1) = false +> (0.17976931348623157E309, ~0.2718281828459045E1) = true +== (0.17976931348623157E309, ~0.2718281828459045E1) = false +?= (0.17976931348623157E309, ~0.2718281828459045E1) = false +< (0.17976931348623157E309, ~0.123E1) = false +> (0.17976931348623157E309, ~0.123E1) = true +== (0.17976931348623157E309, ~0.123E1) = false +?= (0.17976931348623157E309, ~0.123E1) = false +< (0.17976931348623157E309, ~0.123) = false +> (0.17976931348623157E309, ~0.123) = true +== (0.17976931348623157E309, ~0.123) = false +?= (0.17976931348623157E309, ~0.123) = false +< (0.17976931348623157E309, ~0.123E~2) = false +> (0.17976931348623157E309, ~0.123E~2) = true +== (0.17976931348623157E309, ~0.123E~2) = false +?= (0.17976931348623157E309, ~0.123E~2) = false +< (0.17976931348623157E309, ~0.22250738585072014E~307) = false +> (0.17976931348623157E309, ~0.22250738585072014E~307) = true +== (0.17976931348623157E309, ~0.22250738585072014E~307) = false +?= (0.17976931348623157E309, ~0.22250738585072014E~307) = false +< (0.17976931348623157E309, ~0.11125369292536007E~307) = false +> (0.17976931348623157E309, ~0.11125369292536007E~307) = true +== (0.17976931348623157E309, ~0.11125369292536007E~307) = false +?= (0.17976931348623157E309, ~0.11125369292536007E~307) = false +< (0.17976931348623157E309, ~0.5E~323) = false +> (0.17976931348623157E309, ~0.5E~323) = true +== (0.17976931348623157E309, ~0.5E~323) = false +?= (0.17976931348623157E309, ~0.5E~323) = false +< (0.17976931348623157E309, ~0.0) = false +> (0.17976931348623157E309, ~0.0) = true +== (0.17976931348623157E309, ~0.0) = false +?= (0.17976931348623157E309, ~0.0) = false +< (0.8988465674311579E308, 0.17976931348623157E309) = true +> (0.8988465674311579E308, 0.17976931348623157E309) = false +== (0.8988465674311579E308, 0.17976931348623157E309) = false +?= (0.8988465674311579E308, 0.17976931348623157E309) = false +< (0.8988465674311579E308, 0.8988465674311579E308) = false +> (0.8988465674311579E308, 0.8988465674311579E308) = false +== (0.8988465674311579E308, 0.8988465674311579E308) = true +?= (0.8988465674311579E308, 0.8988465674311579E308) = true +< (0.8988465674311579E308, 0.123E4) = false +> (0.8988465674311579E308, 0.123E4) = true +== (0.8988465674311579E308, 0.123E4) = false +?= (0.8988465674311579E308, 0.123E4) = false +< (0.8988465674311579E308, 0.123E2) = false +> (0.8988465674311579E308, 0.123E2) = true +== (0.8988465674311579E308, 0.123E2) = false +?= (0.8988465674311579E308, 0.123E2) = false +< (0.8988465674311579E308, 0.3141592653589793E1) = false +> (0.8988465674311579E308, 0.3141592653589793E1) = true +== (0.8988465674311579E308, 0.3141592653589793E1) = false +?= (0.8988465674311579E308, 0.3141592653589793E1) = false +< (0.8988465674311579E308, 0.2718281828459045E1) = false +> (0.8988465674311579E308, 0.2718281828459045E1) = true +== (0.8988465674311579E308, 0.2718281828459045E1) = false +?= (0.8988465674311579E308, 0.2718281828459045E1) = false +< (0.8988465674311579E308, 0.123E1) = false +> (0.8988465674311579E308, 0.123E1) = true +== (0.8988465674311579E308, 0.123E1) = false +?= (0.8988465674311579E308, 0.123E1) = false +< (0.8988465674311579E308, 0.123) = false +> (0.8988465674311579E308, 0.123) = true +== (0.8988465674311579E308, 0.123) = false +?= (0.8988465674311579E308, 0.123) = false +< (0.8988465674311579E308, 0.123E~2) = false +> (0.8988465674311579E308, 0.123E~2) = true +== (0.8988465674311579E308, 0.123E~2) = false +?= (0.8988465674311579E308, 0.123E~2) = false +< (0.8988465674311579E308, 0.22250738585072014E~307) = false +> (0.8988465674311579E308, 0.22250738585072014E~307) = true +== (0.8988465674311579E308, 0.22250738585072014E~307) = false +?= (0.8988465674311579E308, 0.22250738585072014E~307) = false +< (0.8988465674311579E308, 0.11125369292536007E~307) = false +> (0.8988465674311579E308, 0.11125369292536007E~307) = true +== (0.8988465674311579E308, 0.11125369292536007E~307) = false +?= (0.8988465674311579E308, 0.11125369292536007E~307) = false +< (0.8988465674311579E308, 0.5E~323) = false +> (0.8988465674311579E308, 0.5E~323) = true +== (0.8988465674311579E308, 0.5E~323) = false +?= (0.8988465674311579E308, 0.5E~323) = false +< (0.8988465674311579E308, 0.0) = false +> (0.8988465674311579E308, 0.0) = true +== (0.8988465674311579E308, 0.0) = false +?= (0.8988465674311579E308, 0.0) = false +< (0.8988465674311579E308, ~0.17976931348623157E309) = false +> (0.8988465674311579E308, ~0.17976931348623157E309) = true +== (0.8988465674311579E308, ~0.17976931348623157E309) = false +?= (0.8988465674311579E308, ~0.17976931348623157E309) = false +< (0.8988465674311579E308, ~0.8988465674311579E308) = false +> (0.8988465674311579E308, ~0.8988465674311579E308) = true +== (0.8988465674311579E308, ~0.8988465674311579E308) = false +?= (0.8988465674311579E308, ~0.8988465674311579E308) = false +< (0.8988465674311579E308, ~0.123E4) = false +> (0.8988465674311579E308, ~0.123E4) = true +== (0.8988465674311579E308, ~0.123E4) = false +?= (0.8988465674311579E308, ~0.123E4) = false +< (0.8988465674311579E308, ~0.123E2) = false +> (0.8988465674311579E308, ~0.123E2) = true +== (0.8988465674311579E308, ~0.123E2) = false +?= (0.8988465674311579E308, ~0.123E2) = false +< (0.8988465674311579E308, ~0.3141592653589793E1) = false +> (0.8988465674311579E308, ~0.3141592653589793E1) = true +== (0.8988465674311579E308, ~0.3141592653589793E1) = false +?= (0.8988465674311579E308, ~0.3141592653589793E1) = false +< (0.8988465674311579E308, ~0.2718281828459045E1) = false +> (0.8988465674311579E308, ~0.2718281828459045E1) = true +== (0.8988465674311579E308, ~0.2718281828459045E1) = false +?= (0.8988465674311579E308, ~0.2718281828459045E1) = false +< (0.8988465674311579E308, ~0.123E1) = false +> (0.8988465674311579E308, ~0.123E1) = true +== (0.8988465674311579E308, ~0.123E1) = false +?= (0.8988465674311579E308, ~0.123E1) = false +< (0.8988465674311579E308, ~0.123) = false +> (0.8988465674311579E308, ~0.123) = true +== (0.8988465674311579E308, ~0.123) = false +?= (0.8988465674311579E308, ~0.123) = false +< (0.8988465674311579E308, ~0.123E~2) = false +> (0.8988465674311579E308, ~0.123E~2) = true +== (0.8988465674311579E308, ~0.123E~2) = false +?= (0.8988465674311579E308, ~0.123E~2) = false +< (0.8988465674311579E308, ~0.22250738585072014E~307) = false +> (0.8988465674311579E308, ~0.22250738585072014E~307) = true +== (0.8988465674311579E308, ~0.22250738585072014E~307) = false +?= (0.8988465674311579E308, ~0.22250738585072014E~307) = false +< (0.8988465674311579E308, ~0.11125369292536007E~307) = false +> (0.8988465674311579E308, ~0.11125369292536007E~307) = true +== (0.8988465674311579E308, ~0.11125369292536007E~307) = false +?= (0.8988465674311579E308, ~0.11125369292536007E~307) = false +< (0.8988465674311579E308, ~0.5E~323) = false +> (0.8988465674311579E308, ~0.5E~323) = true +== (0.8988465674311579E308, ~0.5E~323) = false +?= (0.8988465674311579E308, ~0.5E~323) = false +< (0.8988465674311579E308, ~0.0) = false +> (0.8988465674311579E308, ~0.0) = true +== (0.8988465674311579E308, ~0.0) = false +?= (0.8988465674311579E308, ~0.0) = false +< (0.123E4, 0.17976931348623157E309) = true +> (0.123E4, 0.17976931348623157E309) = false +== (0.123E4, 0.17976931348623157E309) = false +?= (0.123E4, 0.17976931348623157E309) = false +< (0.123E4, 0.8988465674311579E308) = true +> (0.123E4, 0.8988465674311579E308) = false +== (0.123E4, 0.8988465674311579E308) = false +?= (0.123E4, 0.8988465674311579E308) = false +< (0.123E4, 0.123E4) = false +> (0.123E4, 0.123E4) = false +== (0.123E4, 0.123E4) = true +?= (0.123E4, 0.123E4) = true +< (0.123E4, 0.123E2) = false +> (0.123E4, 0.123E2) = true +== (0.123E4, 0.123E2) = false +?= (0.123E4, 0.123E2) = false +< (0.123E4, 0.3141592653589793E1) = false +> (0.123E4, 0.3141592653589793E1) = true +== (0.123E4, 0.3141592653589793E1) = false +?= (0.123E4, 0.3141592653589793E1) = false +< (0.123E4, 0.2718281828459045E1) = false +> (0.123E4, 0.2718281828459045E1) = true +== (0.123E4, 0.2718281828459045E1) = false +?= (0.123E4, 0.2718281828459045E1) = false +< (0.123E4, 0.123E1) = false +> (0.123E4, 0.123E1) = true +== (0.123E4, 0.123E1) = false +?= (0.123E4, 0.123E1) = false +< (0.123E4, 0.123) = false +> (0.123E4, 0.123) = true +== (0.123E4, 0.123) = false +?= (0.123E4, 0.123) = false +< (0.123E4, 0.123E~2) = false +> (0.123E4, 0.123E~2) = true +== (0.123E4, 0.123E~2) = false +?= (0.123E4, 0.123E~2) = false +< (0.123E4, 0.22250738585072014E~307) = false +> (0.123E4, 0.22250738585072014E~307) = true +== (0.123E4, 0.22250738585072014E~307) = false +?= (0.123E4, 0.22250738585072014E~307) = false +< (0.123E4, 0.11125369292536007E~307) = false +> (0.123E4, 0.11125369292536007E~307) = true +== (0.123E4, 0.11125369292536007E~307) = false +?= (0.123E4, 0.11125369292536007E~307) = false +< (0.123E4, 0.5E~323) = false +> (0.123E4, 0.5E~323) = true +== (0.123E4, 0.5E~323) = false +?= (0.123E4, 0.5E~323) = false +< (0.123E4, 0.0) = false +> (0.123E4, 0.0) = true +== (0.123E4, 0.0) = false +?= (0.123E4, 0.0) = false +< (0.123E4, ~0.17976931348623157E309) = false +> (0.123E4, ~0.17976931348623157E309) = true +== (0.123E4, ~0.17976931348623157E309) = false +?= (0.123E4, ~0.17976931348623157E309) = false +< (0.123E4, ~0.8988465674311579E308) = false +> (0.123E4, ~0.8988465674311579E308) = true +== (0.123E4, ~0.8988465674311579E308) = false +?= (0.123E4, ~0.8988465674311579E308) = false +< (0.123E4, ~0.123E4) = false +> (0.123E4, ~0.123E4) = true +== (0.123E4, ~0.123E4) = false +?= (0.123E4, ~0.123E4) = false +< (0.123E4, ~0.123E2) = false +> (0.123E4, ~0.123E2) = true +== (0.123E4, ~0.123E2) = false +?= (0.123E4, ~0.123E2) = false +< (0.123E4, ~0.3141592653589793E1) = false +> (0.123E4, ~0.3141592653589793E1) = true +== (0.123E4, ~0.3141592653589793E1) = false +?= (0.123E4, ~0.3141592653589793E1) = false +< (0.123E4, ~0.2718281828459045E1) = false +> (0.123E4, ~0.2718281828459045E1) = true +== (0.123E4, ~0.2718281828459045E1) = false +?= (0.123E4, ~0.2718281828459045E1) = false +< (0.123E4, ~0.123E1) = false +> (0.123E4, ~0.123E1) = true +== (0.123E4, ~0.123E1) = false +?= (0.123E4, ~0.123E1) = false +< (0.123E4, ~0.123) = false +> (0.123E4, ~0.123) = true +== (0.123E4, ~0.123) = false +?= (0.123E4, ~0.123) = false +< (0.123E4, ~0.123E~2) = false +> (0.123E4, ~0.123E~2) = true +== (0.123E4, ~0.123E~2) = false +?= (0.123E4, ~0.123E~2) = false +< (0.123E4, ~0.22250738585072014E~307) = false +> (0.123E4, ~0.22250738585072014E~307) = true +== (0.123E4, ~0.22250738585072014E~307) = false +?= (0.123E4, ~0.22250738585072014E~307) = false +< (0.123E4, ~0.11125369292536007E~307) = false +> (0.123E4, ~0.11125369292536007E~307) = true +== (0.123E4, ~0.11125369292536007E~307) = false +?= (0.123E4, ~0.11125369292536007E~307) = false +< (0.123E4, ~0.5E~323) = false +> (0.123E4, ~0.5E~323) = true +== (0.123E4, ~0.5E~323) = false +?= (0.123E4, ~0.5E~323) = false +< (0.123E4, ~0.0) = false +> (0.123E4, ~0.0) = true +== (0.123E4, ~0.0) = false +?= (0.123E4, ~0.0) = false +< (0.123E2, 0.17976931348623157E309) = true +> (0.123E2, 0.17976931348623157E309) = false +== (0.123E2, 0.17976931348623157E309) = false +?= (0.123E2, 0.17976931348623157E309) = false +< (0.123E2, 0.8988465674311579E308) = true +> (0.123E2, 0.8988465674311579E308) = false +== (0.123E2, 0.8988465674311579E308) = false +?= (0.123E2, 0.8988465674311579E308) = false +< (0.123E2, 0.123E4) = true +> (0.123E2, 0.123E4) = false +== (0.123E2, 0.123E4) = false +?= (0.123E2, 0.123E4) = false +< (0.123E2, 0.123E2) = false +> (0.123E2, 0.123E2) = false +== (0.123E2, 0.123E2) = true +?= (0.123E2, 0.123E2) = true +< (0.123E2, 0.3141592653589793E1) = false +> (0.123E2, 0.3141592653589793E1) = true +== (0.123E2, 0.3141592653589793E1) = false +?= (0.123E2, 0.3141592653589793E1) = false +< (0.123E2, 0.2718281828459045E1) = false +> (0.123E2, 0.2718281828459045E1) = true +== (0.123E2, 0.2718281828459045E1) = false +?= (0.123E2, 0.2718281828459045E1) = false +< (0.123E2, 0.123E1) = false +> (0.123E2, 0.123E1) = true +== (0.123E2, 0.123E1) = false +?= (0.123E2, 0.123E1) = false +< (0.123E2, 0.123) = false +> (0.123E2, 0.123) = true +== (0.123E2, 0.123) = false +?= (0.123E2, 0.123) = false +< (0.123E2, 0.123E~2) = false +> (0.123E2, 0.123E~2) = true +== (0.123E2, 0.123E~2) = false +?= (0.123E2, 0.123E~2) = false +< (0.123E2, 0.22250738585072014E~307) = false +> (0.123E2, 0.22250738585072014E~307) = true +== (0.123E2, 0.22250738585072014E~307) = false +?= (0.123E2, 0.22250738585072014E~307) = false +< (0.123E2, 0.11125369292536007E~307) = false +> (0.123E2, 0.11125369292536007E~307) = true +== (0.123E2, 0.11125369292536007E~307) = false +?= (0.123E2, 0.11125369292536007E~307) = false +< (0.123E2, 0.5E~323) = false +> (0.123E2, 0.5E~323) = true +== (0.123E2, 0.5E~323) = false +?= (0.123E2, 0.5E~323) = false +< (0.123E2, 0.0) = false +> (0.123E2, 0.0) = true +== (0.123E2, 0.0) = false +?= (0.123E2, 0.0) = false +< (0.123E2, ~0.17976931348623157E309) = false +> (0.123E2, ~0.17976931348623157E309) = true +== (0.123E2, ~0.17976931348623157E309) = false +?= (0.123E2, ~0.17976931348623157E309) = false +< (0.123E2, ~0.8988465674311579E308) = false +> (0.123E2, ~0.8988465674311579E308) = true +== (0.123E2, ~0.8988465674311579E308) = false +?= (0.123E2, ~0.8988465674311579E308) = false +< (0.123E2, ~0.123E4) = false +> (0.123E2, ~0.123E4) = true +== (0.123E2, ~0.123E4) = false +?= (0.123E2, ~0.123E4) = false +< (0.123E2, ~0.123E2) = false +> (0.123E2, ~0.123E2) = true +== (0.123E2, ~0.123E2) = false +?= (0.123E2, ~0.123E2) = false +< (0.123E2, ~0.3141592653589793E1) = false +> (0.123E2, ~0.3141592653589793E1) = true +== (0.123E2, ~0.3141592653589793E1) = false +?= (0.123E2, ~0.3141592653589793E1) = false +< (0.123E2, ~0.2718281828459045E1) = false +> (0.123E2, ~0.2718281828459045E1) = true +== (0.123E2, ~0.2718281828459045E1) = false +?= (0.123E2, ~0.2718281828459045E1) = false +< (0.123E2, ~0.123E1) = false +> (0.123E2, ~0.123E1) = true +== (0.123E2, ~0.123E1) = false +?= (0.123E2, ~0.123E1) = false +< (0.123E2, ~0.123) = false +> (0.123E2, ~0.123) = true +== (0.123E2, ~0.123) = false +?= (0.123E2, ~0.123) = false +< (0.123E2, ~0.123E~2) = false +> (0.123E2, ~0.123E~2) = true +== (0.123E2, ~0.123E~2) = false +?= (0.123E2, ~0.123E~2) = false +< (0.123E2, ~0.22250738585072014E~307) = false +> (0.123E2, ~0.22250738585072014E~307) = true +== (0.123E2, ~0.22250738585072014E~307) = false +?= (0.123E2, ~0.22250738585072014E~307) = false +< (0.123E2, ~0.11125369292536007E~307) = false +> (0.123E2, ~0.11125369292536007E~307) = true +== (0.123E2, ~0.11125369292536007E~307) = false +?= (0.123E2, ~0.11125369292536007E~307) = false +< (0.123E2, ~0.5E~323) = false +> (0.123E2, ~0.5E~323) = true +== (0.123E2, ~0.5E~323) = false +?= (0.123E2, ~0.5E~323) = false +< (0.123E2, ~0.0) = false +> (0.123E2, ~0.0) = true +== (0.123E2, ~0.0) = false +?= (0.123E2, ~0.0) = false +< (0.3141592653589793E1, 0.17976931348623157E309) = true +> (0.3141592653589793E1, 0.17976931348623157E309) = false +== (0.3141592653589793E1, 0.17976931348623157E309) = false +?= (0.3141592653589793E1, 0.17976931348623157E309) = false +< (0.3141592653589793E1, 0.8988465674311579E308) = true +> (0.3141592653589793E1, 0.8988465674311579E308) = false +== (0.3141592653589793E1, 0.8988465674311579E308) = false +?= (0.3141592653589793E1, 0.8988465674311579E308) = false +< (0.3141592653589793E1, 0.123E4) = true +> (0.3141592653589793E1, 0.123E4) = false +== (0.3141592653589793E1, 0.123E4) = false +?= (0.3141592653589793E1, 0.123E4) = false +< (0.3141592653589793E1, 0.123E2) = true +> (0.3141592653589793E1, 0.123E2) = false +== (0.3141592653589793E1, 0.123E2) = false +?= (0.3141592653589793E1, 0.123E2) = false +< (0.3141592653589793E1, 0.3141592653589793E1) = false +> (0.3141592653589793E1, 0.3141592653589793E1) = false +== (0.3141592653589793E1, 0.3141592653589793E1) = true +?= (0.3141592653589793E1, 0.3141592653589793E1) = true +< (0.3141592653589793E1, 0.2718281828459045E1) = false +> (0.3141592653589793E1, 0.2718281828459045E1) = true +== (0.3141592653589793E1, 0.2718281828459045E1) = false +?= (0.3141592653589793E1, 0.2718281828459045E1) = false +< (0.3141592653589793E1, 0.123E1) = false +> (0.3141592653589793E1, 0.123E1) = true +== (0.3141592653589793E1, 0.123E1) = false +?= (0.3141592653589793E1, 0.123E1) = false +< (0.3141592653589793E1, 0.123) = false +> (0.3141592653589793E1, 0.123) = true +== (0.3141592653589793E1, 0.123) = false +?= (0.3141592653589793E1, 0.123) = false +< (0.3141592653589793E1, 0.123E~2) = false +> (0.3141592653589793E1, 0.123E~2) = true +== (0.3141592653589793E1, 0.123E~2) = false +?= (0.3141592653589793E1, 0.123E~2) = false +< (0.3141592653589793E1, 0.22250738585072014E~307) = false +> (0.3141592653589793E1, 0.22250738585072014E~307) = true +== (0.3141592653589793E1, 0.22250738585072014E~307) = false +?= (0.3141592653589793E1, 0.22250738585072014E~307) = false +< (0.3141592653589793E1, 0.11125369292536007E~307) = false +> (0.3141592653589793E1, 0.11125369292536007E~307) = true +== (0.3141592653589793E1, 0.11125369292536007E~307) = false +?= (0.3141592653589793E1, 0.11125369292536007E~307) = false +< (0.3141592653589793E1, 0.5E~323) = false +> (0.3141592653589793E1, 0.5E~323) = true +== (0.3141592653589793E1, 0.5E~323) = false +?= (0.3141592653589793E1, 0.5E~323) = false +< (0.3141592653589793E1, 0.0) = false +> (0.3141592653589793E1, 0.0) = true +== (0.3141592653589793E1, 0.0) = false +?= (0.3141592653589793E1, 0.0) = false +< (0.3141592653589793E1, ~0.17976931348623157E309) = false +> (0.3141592653589793E1, ~0.17976931348623157E309) = true +== (0.3141592653589793E1, ~0.17976931348623157E309) = false +?= (0.3141592653589793E1, ~0.17976931348623157E309) = false +< (0.3141592653589793E1, ~0.8988465674311579E308) = false +> (0.3141592653589793E1, ~0.8988465674311579E308) = true +== (0.3141592653589793E1, ~0.8988465674311579E308) = false +?= (0.3141592653589793E1, ~0.8988465674311579E308) = false +< (0.3141592653589793E1, ~0.123E4) = false +> (0.3141592653589793E1, ~0.123E4) = true +== (0.3141592653589793E1, ~0.123E4) = false +?= (0.3141592653589793E1, ~0.123E4) = false +< (0.3141592653589793E1, ~0.123E2) = false +> (0.3141592653589793E1, ~0.123E2) = true +== (0.3141592653589793E1, ~0.123E2) = false +?= (0.3141592653589793E1, ~0.123E2) = false +< (0.3141592653589793E1, ~0.3141592653589793E1) = false +> (0.3141592653589793E1, ~0.3141592653589793E1) = true +== (0.3141592653589793E1, ~0.3141592653589793E1) = false +?= (0.3141592653589793E1, ~0.3141592653589793E1) = false +< (0.3141592653589793E1, ~0.2718281828459045E1) = false +> (0.3141592653589793E1, ~0.2718281828459045E1) = true +== (0.3141592653589793E1, ~0.2718281828459045E1) = false +?= (0.3141592653589793E1, ~0.2718281828459045E1) = false +< (0.3141592653589793E1, ~0.123E1) = false +> (0.3141592653589793E1, ~0.123E1) = true +== (0.3141592653589793E1, ~0.123E1) = false +?= (0.3141592653589793E1, ~0.123E1) = false +< (0.3141592653589793E1, ~0.123) = false +> (0.3141592653589793E1, ~0.123) = true +== (0.3141592653589793E1, ~0.123) = false +?= (0.3141592653589793E1, ~0.123) = false +< (0.3141592653589793E1, ~0.123E~2) = false +> (0.3141592653589793E1, ~0.123E~2) = true +== (0.3141592653589793E1, ~0.123E~2) = false +?= (0.3141592653589793E1, ~0.123E~2) = false +< (0.3141592653589793E1, ~0.22250738585072014E~307) = false +> (0.3141592653589793E1, ~0.22250738585072014E~307) = true +== (0.3141592653589793E1, ~0.22250738585072014E~307) = false +?= (0.3141592653589793E1, ~0.22250738585072014E~307) = false +< (0.3141592653589793E1, ~0.11125369292536007E~307) = false +> (0.3141592653589793E1, ~0.11125369292536007E~307) = true +== (0.3141592653589793E1, ~0.11125369292536007E~307) = false +?= (0.3141592653589793E1, ~0.11125369292536007E~307) = false +< (0.3141592653589793E1, ~0.5E~323) = false +> (0.3141592653589793E1, ~0.5E~323) = true +== (0.3141592653589793E1, ~0.5E~323) = false +?= (0.3141592653589793E1, ~0.5E~323) = false +< (0.3141592653589793E1, ~0.0) = false +> (0.3141592653589793E1, ~0.0) = true +== (0.3141592653589793E1, ~0.0) = false +?= (0.3141592653589793E1, ~0.0) = false +< (0.2718281828459045E1, 0.17976931348623157E309) = true +> (0.2718281828459045E1, 0.17976931348623157E309) = false +== (0.2718281828459045E1, 0.17976931348623157E309) = false +?= (0.2718281828459045E1, 0.17976931348623157E309) = false +< (0.2718281828459045E1, 0.8988465674311579E308) = true +> (0.2718281828459045E1, 0.8988465674311579E308) = false +== (0.2718281828459045E1, 0.8988465674311579E308) = false +?= (0.2718281828459045E1, 0.8988465674311579E308) = false +< (0.2718281828459045E1, 0.123E4) = true +> (0.2718281828459045E1, 0.123E4) = false +== (0.2718281828459045E1, 0.123E4) = false +?= (0.2718281828459045E1, 0.123E4) = false +< (0.2718281828459045E1, 0.123E2) = true +> (0.2718281828459045E1, 0.123E2) = false +== (0.2718281828459045E1, 0.123E2) = false +?= (0.2718281828459045E1, 0.123E2) = false +< (0.2718281828459045E1, 0.3141592653589793E1) = true +> (0.2718281828459045E1, 0.3141592653589793E1) = false +== (0.2718281828459045E1, 0.3141592653589793E1) = false +?= (0.2718281828459045E1, 0.3141592653589793E1) = false +< (0.2718281828459045E1, 0.2718281828459045E1) = false +> (0.2718281828459045E1, 0.2718281828459045E1) = false +== (0.2718281828459045E1, 0.2718281828459045E1) = true +?= (0.2718281828459045E1, 0.2718281828459045E1) = true +< (0.2718281828459045E1, 0.123E1) = false +> (0.2718281828459045E1, 0.123E1) = true +== (0.2718281828459045E1, 0.123E1) = false +?= (0.2718281828459045E1, 0.123E1) = false +< (0.2718281828459045E1, 0.123) = false +> (0.2718281828459045E1, 0.123) = true +== (0.2718281828459045E1, 0.123) = false +?= (0.2718281828459045E1, 0.123) = false +< (0.2718281828459045E1, 0.123E~2) = false +> (0.2718281828459045E1, 0.123E~2) = true +== (0.2718281828459045E1, 0.123E~2) = false +?= (0.2718281828459045E1, 0.123E~2) = false +< (0.2718281828459045E1, 0.22250738585072014E~307) = false +> (0.2718281828459045E1, 0.22250738585072014E~307) = true +== (0.2718281828459045E1, 0.22250738585072014E~307) = false +?= (0.2718281828459045E1, 0.22250738585072014E~307) = false +< (0.2718281828459045E1, 0.11125369292536007E~307) = false +> (0.2718281828459045E1, 0.11125369292536007E~307) = true +== (0.2718281828459045E1, 0.11125369292536007E~307) = false +?= (0.2718281828459045E1, 0.11125369292536007E~307) = false +< (0.2718281828459045E1, 0.5E~323) = false +> (0.2718281828459045E1, 0.5E~323) = true +== (0.2718281828459045E1, 0.5E~323) = false +?= (0.2718281828459045E1, 0.5E~323) = false +< (0.2718281828459045E1, 0.0) = false +> (0.2718281828459045E1, 0.0) = true +== (0.2718281828459045E1, 0.0) = false +?= (0.2718281828459045E1, 0.0) = false +< (0.2718281828459045E1, ~0.17976931348623157E309) = false +> (0.2718281828459045E1, ~0.17976931348623157E309) = true +== (0.2718281828459045E1, ~0.17976931348623157E309) = false +?= (0.2718281828459045E1, ~0.17976931348623157E309) = false +< (0.2718281828459045E1, ~0.8988465674311579E308) = false +> (0.2718281828459045E1, ~0.8988465674311579E308) = true +== (0.2718281828459045E1, ~0.8988465674311579E308) = false +?= (0.2718281828459045E1, ~0.8988465674311579E308) = false +< (0.2718281828459045E1, ~0.123E4) = false +> (0.2718281828459045E1, ~0.123E4) = true +== (0.2718281828459045E1, ~0.123E4) = false +?= (0.2718281828459045E1, ~0.123E4) = false +< (0.2718281828459045E1, ~0.123E2) = false +> (0.2718281828459045E1, ~0.123E2) = true +== (0.2718281828459045E1, ~0.123E2) = false +?= (0.2718281828459045E1, ~0.123E2) = false +< (0.2718281828459045E1, ~0.3141592653589793E1) = false +> (0.2718281828459045E1, ~0.3141592653589793E1) = true +== (0.2718281828459045E1, ~0.3141592653589793E1) = false +?= (0.2718281828459045E1, ~0.3141592653589793E1) = false +< (0.2718281828459045E1, ~0.2718281828459045E1) = false +> (0.2718281828459045E1, ~0.2718281828459045E1) = true +== (0.2718281828459045E1, ~0.2718281828459045E1) = false +?= (0.2718281828459045E1, ~0.2718281828459045E1) = false +< (0.2718281828459045E1, ~0.123E1) = false +> (0.2718281828459045E1, ~0.123E1) = true +== (0.2718281828459045E1, ~0.123E1) = false +?= (0.2718281828459045E1, ~0.123E1) = false +< (0.2718281828459045E1, ~0.123) = false +> (0.2718281828459045E1, ~0.123) = true +== (0.2718281828459045E1, ~0.123) = false +?= (0.2718281828459045E1, ~0.123) = false +< (0.2718281828459045E1, ~0.123E~2) = false +> (0.2718281828459045E1, ~0.123E~2) = true +== (0.2718281828459045E1, ~0.123E~2) = false +?= (0.2718281828459045E1, ~0.123E~2) = false +< (0.2718281828459045E1, ~0.22250738585072014E~307) = false +> (0.2718281828459045E1, ~0.22250738585072014E~307) = true +== (0.2718281828459045E1, ~0.22250738585072014E~307) = false +?= (0.2718281828459045E1, ~0.22250738585072014E~307) = false +< (0.2718281828459045E1, ~0.11125369292536007E~307) = false +> (0.2718281828459045E1, ~0.11125369292536007E~307) = true +== (0.2718281828459045E1, ~0.11125369292536007E~307) = false +?= (0.2718281828459045E1, ~0.11125369292536007E~307) = false +< (0.2718281828459045E1, ~0.5E~323) = false +> (0.2718281828459045E1, ~0.5E~323) = true +== (0.2718281828459045E1, ~0.5E~323) = false +?= (0.2718281828459045E1, ~0.5E~323) = false +< (0.2718281828459045E1, ~0.0) = false +> (0.2718281828459045E1, ~0.0) = true +== (0.2718281828459045E1, ~0.0) = false +?= (0.2718281828459045E1, ~0.0) = false +< (0.123E1, 0.17976931348623157E309) = true +> (0.123E1, 0.17976931348623157E309) = false +== (0.123E1, 0.17976931348623157E309) = false +?= (0.123E1, 0.17976931348623157E309) = false +< (0.123E1, 0.8988465674311579E308) = true +> (0.123E1, 0.8988465674311579E308) = false +== (0.123E1, 0.8988465674311579E308) = false +?= (0.123E1, 0.8988465674311579E308) = false +< (0.123E1, 0.123E4) = true +> (0.123E1, 0.123E4) = false +== (0.123E1, 0.123E4) = false +?= (0.123E1, 0.123E4) = false +< (0.123E1, 0.123E2) = true +> (0.123E1, 0.123E2) = false +== (0.123E1, 0.123E2) = false +?= (0.123E1, 0.123E2) = false +< (0.123E1, 0.3141592653589793E1) = true +> (0.123E1, 0.3141592653589793E1) = false +== (0.123E1, 0.3141592653589793E1) = false +?= (0.123E1, 0.3141592653589793E1) = false +< (0.123E1, 0.2718281828459045E1) = true +> (0.123E1, 0.2718281828459045E1) = false +== (0.123E1, 0.2718281828459045E1) = false +?= (0.123E1, 0.2718281828459045E1) = false +< (0.123E1, 0.123E1) = false +> (0.123E1, 0.123E1) = false +== (0.123E1, 0.123E1) = true +?= (0.123E1, 0.123E1) = true +< (0.123E1, 0.123) = false +> (0.123E1, 0.123) = true +== (0.123E1, 0.123) = false +?= (0.123E1, 0.123) = false +< (0.123E1, 0.123E~2) = false +> (0.123E1, 0.123E~2) = true +== (0.123E1, 0.123E~2) = false +?= (0.123E1, 0.123E~2) = false +< (0.123E1, 0.22250738585072014E~307) = false +> (0.123E1, 0.22250738585072014E~307) = true +== (0.123E1, 0.22250738585072014E~307) = false +?= (0.123E1, 0.22250738585072014E~307) = false +< (0.123E1, 0.11125369292536007E~307) = false +> (0.123E1, 0.11125369292536007E~307) = true +== (0.123E1, 0.11125369292536007E~307) = false +?= (0.123E1, 0.11125369292536007E~307) = false +< (0.123E1, 0.5E~323) = false +> (0.123E1, 0.5E~323) = true +== (0.123E1, 0.5E~323) = false +?= (0.123E1, 0.5E~323) = false +< (0.123E1, 0.0) = false +> (0.123E1, 0.0) = true +== (0.123E1, 0.0) = false +?= (0.123E1, 0.0) = false +< (0.123E1, ~0.17976931348623157E309) = false +> (0.123E1, ~0.17976931348623157E309) = true +== (0.123E1, ~0.17976931348623157E309) = false +?= (0.123E1, ~0.17976931348623157E309) = false +< (0.123E1, ~0.8988465674311579E308) = false +> (0.123E1, ~0.8988465674311579E308) = true +== (0.123E1, ~0.8988465674311579E308) = false +?= (0.123E1, ~0.8988465674311579E308) = false +< (0.123E1, ~0.123E4) = false +> (0.123E1, ~0.123E4) = true +== (0.123E1, ~0.123E4) = false +?= (0.123E1, ~0.123E4) = false +< (0.123E1, ~0.123E2) = false +> (0.123E1, ~0.123E2) = true +== (0.123E1, ~0.123E2) = false +?= (0.123E1, ~0.123E2) = false +< (0.123E1, ~0.3141592653589793E1) = false +> (0.123E1, ~0.3141592653589793E1) = true +== (0.123E1, ~0.3141592653589793E1) = false +?= (0.123E1, ~0.3141592653589793E1) = false +< (0.123E1, ~0.2718281828459045E1) = false +> (0.123E1, ~0.2718281828459045E1) = true +== (0.123E1, ~0.2718281828459045E1) = false +?= (0.123E1, ~0.2718281828459045E1) = false +< (0.123E1, ~0.123E1) = false +> (0.123E1, ~0.123E1) = true +== (0.123E1, ~0.123E1) = false +?= (0.123E1, ~0.123E1) = false +< (0.123E1, ~0.123) = false +> (0.123E1, ~0.123) = true +== (0.123E1, ~0.123) = false +?= (0.123E1, ~0.123) = false +< (0.123E1, ~0.123E~2) = false +> (0.123E1, ~0.123E~2) = true +== (0.123E1, ~0.123E~2) = false +?= (0.123E1, ~0.123E~2) = false +< (0.123E1, ~0.22250738585072014E~307) = false +> (0.123E1, ~0.22250738585072014E~307) = true +== (0.123E1, ~0.22250738585072014E~307) = false +?= (0.123E1, ~0.22250738585072014E~307) = false +< (0.123E1, ~0.11125369292536007E~307) = false +> (0.123E1, ~0.11125369292536007E~307) = true +== (0.123E1, ~0.11125369292536007E~307) = false +?= (0.123E1, ~0.11125369292536007E~307) = false +< (0.123E1, ~0.5E~323) = false +> (0.123E1, ~0.5E~323) = true +== (0.123E1, ~0.5E~323) = false +?= (0.123E1, ~0.5E~323) = false +< (0.123E1, ~0.0) = false +> (0.123E1, ~0.0) = true +== (0.123E1, ~0.0) = false +?= (0.123E1, ~0.0) = false +< (0.123, 0.17976931348623157E309) = true +> (0.123, 0.17976931348623157E309) = false +== (0.123, 0.17976931348623157E309) = false +?= (0.123, 0.17976931348623157E309) = false +< (0.123, 0.8988465674311579E308) = true +> (0.123, 0.8988465674311579E308) = false +== (0.123, 0.8988465674311579E308) = false +?= (0.123, 0.8988465674311579E308) = false +< (0.123, 0.123E4) = true +> (0.123, 0.123E4) = false +== (0.123, 0.123E4) = false +?= (0.123, 0.123E4) = false +< (0.123, 0.123E2) = true +> (0.123, 0.123E2) = false +== (0.123, 0.123E2) = false +?= (0.123, 0.123E2) = false +< (0.123, 0.3141592653589793E1) = true +> (0.123, 0.3141592653589793E1) = false +== (0.123, 0.3141592653589793E1) = false +?= (0.123, 0.3141592653589793E1) = false +< (0.123, 0.2718281828459045E1) = true +> (0.123, 0.2718281828459045E1) = false +== (0.123, 0.2718281828459045E1) = false +?= (0.123, 0.2718281828459045E1) = false +< (0.123, 0.123E1) = true +> (0.123, 0.123E1) = false +== (0.123, 0.123E1) = false +?= (0.123, 0.123E1) = false +< (0.123, 0.123) = false +> (0.123, 0.123) = false +== (0.123, 0.123) = true +?= (0.123, 0.123) = true +< (0.123, 0.123E~2) = false +> (0.123, 0.123E~2) = true +== (0.123, 0.123E~2) = false +?= (0.123, 0.123E~2) = false +< (0.123, 0.22250738585072014E~307) = false +> (0.123, 0.22250738585072014E~307) = true +== (0.123, 0.22250738585072014E~307) = false +?= (0.123, 0.22250738585072014E~307) = false +< (0.123, 0.11125369292536007E~307) = false +> (0.123, 0.11125369292536007E~307) = true +== (0.123, 0.11125369292536007E~307) = false +?= (0.123, 0.11125369292536007E~307) = false +< (0.123, 0.5E~323) = false +> (0.123, 0.5E~323) = true +== (0.123, 0.5E~323) = false +?= (0.123, 0.5E~323) = false +< (0.123, 0.0) = false +> (0.123, 0.0) = true +== (0.123, 0.0) = false +?= (0.123, 0.0) = false +< (0.123, ~0.17976931348623157E309) = false +> (0.123, ~0.17976931348623157E309) = true +== (0.123, ~0.17976931348623157E309) = false +?= (0.123, ~0.17976931348623157E309) = false +< (0.123, ~0.8988465674311579E308) = false +> (0.123, ~0.8988465674311579E308) = true +== (0.123, ~0.8988465674311579E308) = false +?= (0.123, ~0.8988465674311579E308) = false +< (0.123, ~0.123E4) = false +> (0.123, ~0.123E4) = true +== (0.123, ~0.123E4) = false +?= (0.123, ~0.123E4) = false +< (0.123, ~0.123E2) = false +> (0.123, ~0.123E2) = true +== (0.123, ~0.123E2) = false +?= (0.123, ~0.123E2) = false +< (0.123, ~0.3141592653589793E1) = false +> (0.123, ~0.3141592653589793E1) = true +== (0.123, ~0.3141592653589793E1) = false +?= (0.123, ~0.3141592653589793E1) = false +< (0.123, ~0.2718281828459045E1) = false +> (0.123, ~0.2718281828459045E1) = true +== (0.123, ~0.2718281828459045E1) = false +?= (0.123, ~0.2718281828459045E1) = false +< (0.123, ~0.123E1) = false +> (0.123, ~0.123E1) = true +== (0.123, ~0.123E1) = false +?= (0.123, ~0.123E1) = false +< (0.123, ~0.123) = false +> (0.123, ~0.123) = true +== (0.123, ~0.123) = false +?= (0.123, ~0.123) = false +< (0.123, ~0.123E~2) = false +> (0.123, ~0.123E~2) = true +== (0.123, ~0.123E~2) = false +?= (0.123, ~0.123E~2) = false +< (0.123, ~0.22250738585072014E~307) = false +> (0.123, ~0.22250738585072014E~307) = true +== (0.123, ~0.22250738585072014E~307) = false +?= (0.123, ~0.22250738585072014E~307) = false +< (0.123, ~0.11125369292536007E~307) = false +> (0.123, ~0.11125369292536007E~307) = true +== (0.123, ~0.11125369292536007E~307) = false +?= (0.123, ~0.11125369292536007E~307) = false +< (0.123, ~0.5E~323) = false +> (0.123, ~0.5E~323) = true +== (0.123, ~0.5E~323) = false +?= (0.123, ~0.5E~323) = false +< (0.123, ~0.0) = false +> (0.123, ~0.0) = true +== (0.123, ~0.0) = false +?= (0.123, ~0.0) = false +< (0.123E~2, 0.17976931348623157E309) = true +> (0.123E~2, 0.17976931348623157E309) = false +== (0.123E~2, 0.17976931348623157E309) = false +?= (0.123E~2, 0.17976931348623157E309) = false +< (0.123E~2, 0.8988465674311579E308) = true +> (0.123E~2, 0.8988465674311579E308) = false +== (0.123E~2, 0.8988465674311579E308) = false +?= (0.123E~2, 0.8988465674311579E308) = false +< (0.123E~2, 0.123E4) = true +> (0.123E~2, 0.123E4) = false +== (0.123E~2, 0.123E4) = false +?= (0.123E~2, 0.123E4) = false +< (0.123E~2, 0.123E2) = true +> (0.123E~2, 0.123E2) = false +== (0.123E~2, 0.123E2) = false +?= (0.123E~2, 0.123E2) = false +< (0.123E~2, 0.3141592653589793E1) = true +> (0.123E~2, 0.3141592653589793E1) = false +== (0.123E~2, 0.3141592653589793E1) = false +?= (0.123E~2, 0.3141592653589793E1) = false +< (0.123E~2, 0.2718281828459045E1) = true +> (0.123E~2, 0.2718281828459045E1) = false +== (0.123E~2, 0.2718281828459045E1) = false +?= (0.123E~2, 0.2718281828459045E1) = false +< (0.123E~2, 0.123E1) = true +> (0.123E~2, 0.123E1) = false +== (0.123E~2, 0.123E1) = false +?= (0.123E~2, 0.123E1) = false +< (0.123E~2, 0.123) = true +> (0.123E~2, 0.123) = false +== (0.123E~2, 0.123) = false +?= (0.123E~2, 0.123) = false +< (0.123E~2, 0.123E~2) = false +> (0.123E~2, 0.123E~2) = false +== (0.123E~2, 0.123E~2) = true +?= (0.123E~2, 0.123E~2) = true +< (0.123E~2, 0.22250738585072014E~307) = false +> (0.123E~2, 0.22250738585072014E~307) = true +== (0.123E~2, 0.22250738585072014E~307) = false +?= (0.123E~2, 0.22250738585072014E~307) = false +< (0.123E~2, 0.11125369292536007E~307) = false +> (0.123E~2, 0.11125369292536007E~307) = true +== (0.123E~2, 0.11125369292536007E~307) = false +?= (0.123E~2, 0.11125369292536007E~307) = false +< (0.123E~2, 0.5E~323) = false +> (0.123E~2, 0.5E~323) = true +== (0.123E~2, 0.5E~323) = false +?= (0.123E~2, 0.5E~323) = false +< (0.123E~2, 0.0) = false +> (0.123E~2, 0.0) = true +== (0.123E~2, 0.0) = false +?= (0.123E~2, 0.0) = false +< (0.123E~2, ~0.17976931348623157E309) = false +> (0.123E~2, ~0.17976931348623157E309) = true +== (0.123E~2, ~0.17976931348623157E309) = false +?= (0.123E~2, ~0.17976931348623157E309) = false +< (0.123E~2, ~0.8988465674311579E308) = false +> (0.123E~2, ~0.8988465674311579E308) = true +== (0.123E~2, ~0.8988465674311579E308) = false +?= (0.123E~2, ~0.8988465674311579E308) = false +< (0.123E~2, ~0.123E4) = false +> (0.123E~2, ~0.123E4) = true +== (0.123E~2, ~0.123E4) = false +?= (0.123E~2, ~0.123E4) = false +< (0.123E~2, ~0.123E2) = false +> (0.123E~2, ~0.123E2) = true +== (0.123E~2, ~0.123E2) = false +?= (0.123E~2, ~0.123E2) = false +< (0.123E~2, ~0.3141592653589793E1) = false +> (0.123E~2, ~0.3141592653589793E1) = true +== (0.123E~2, ~0.3141592653589793E1) = false +?= (0.123E~2, ~0.3141592653589793E1) = false +< (0.123E~2, ~0.2718281828459045E1) = false +> (0.123E~2, ~0.2718281828459045E1) = true +== (0.123E~2, ~0.2718281828459045E1) = false +?= (0.123E~2, ~0.2718281828459045E1) = false +< (0.123E~2, ~0.123E1) = false +> (0.123E~2, ~0.123E1) = true +== (0.123E~2, ~0.123E1) = false +?= (0.123E~2, ~0.123E1) = false +< (0.123E~2, ~0.123) = false +> (0.123E~2, ~0.123) = true +== (0.123E~2, ~0.123) = false +?= (0.123E~2, ~0.123) = false +< (0.123E~2, ~0.123E~2) = false +> (0.123E~2, ~0.123E~2) = true +== (0.123E~2, ~0.123E~2) = false +?= (0.123E~2, ~0.123E~2) = false +< (0.123E~2, ~0.22250738585072014E~307) = false +> (0.123E~2, ~0.22250738585072014E~307) = true +== (0.123E~2, ~0.22250738585072014E~307) = false +?= (0.123E~2, ~0.22250738585072014E~307) = false +< (0.123E~2, ~0.11125369292536007E~307) = false +> (0.123E~2, ~0.11125369292536007E~307) = true +== (0.123E~2, ~0.11125369292536007E~307) = false +?= (0.123E~2, ~0.11125369292536007E~307) = false +< (0.123E~2, ~0.5E~323) = false +> (0.123E~2, ~0.5E~323) = true +== (0.123E~2, ~0.5E~323) = false +?= (0.123E~2, ~0.5E~323) = false +< (0.123E~2, ~0.0) = false +> (0.123E~2, ~0.0) = true +== (0.123E~2, ~0.0) = false +?= (0.123E~2, ~0.0) = false +< (0.22250738585072014E~307, 0.17976931348623157E309) = true +> (0.22250738585072014E~307, 0.17976931348623157E309) = false +== (0.22250738585072014E~307, 0.17976931348623157E309) = false +?= (0.22250738585072014E~307, 0.17976931348623157E309) = false +< (0.22250738585072014E~307, 0.8988465674311579E308) = true +> (0.22250738585072014E~307, 0.8988465674311579E308) = false +== (0.22250738585072014E~307, 0.8988465674311579E308) = false +?= (0.22250738585072014E~307, 0.8988465674311579E308) = false +< (0.22250738585072014E~307, 0.123E4) = true +> (0.22250738585072014E~307, 0.123E4) = false +== (0.22250738585072014E~307, 0.123E4) = false +?= (0.22250738585072014E~307, 0.123E4) = false +< (0.22250738585072014E~307, 0.123E2) = true +> (0.22250738585072014E~307, 0.123E2) = false +== (0.22250738585072014E~307, 0.123E2) = false +?= (0.22250738585072014E~307, 0.123E2) = false +< (0.22250738585072014E~307, 0.3141592653589793E1) = true +> (0.22250738585072014E~307, 0.3141592653589793E1) = false +== (0.22250738585072014E~307, 0.3141592653589793E1) = false +?= (0.22250738585072014E~307, 0.3141592653589793E1) = false +< (0.22250738585072014E~307, 0.2718281828459045E1) = true +> (0.22250738585072014E~307, 0.2718281828459045E1) = false +== (0.22250738585072014E~307, 0.2718281828459045E1) = false +?= (0.22250738585072014E~307, 0.2718281828459045E1) = false +< (0.22250738585072014E~307, 0.123E1) = true +> (0.22250738585072014E~307, 0.123E1) = false +== (0.22250738585072014E~307, 0.123E1) = false +?= (0.22250738585072014E~307, 0.123E1) = false +< (0.22250738585072014E~307, 0.123) = true +> (0.22250738585072014E~307, 0.123) = false +== (0.22250738585072014E~307, 0.123) = false +?= (0.22250738585072014E~307, 0.123) = false +< (0.22250738585072014E~307, 0.123E~2) = true +> (0.22250738585072014E~307, 0.123E~2) = false +== (0.22250738585072014E~307, 0.123E~2) = false +?= (0.22250738585072014E~307, 0.123E~2) = false +< (0.22250738585072014E~307, 0.22250738585072014E~307) = false +> (0.22250738585072014E~307, 0.22250738585072014E~307) = false +== (0.22250738585072014E~307, 0.22250738585072014E~307) = true +?= (0.22250738585072014E~307, 0.22250738585072014E~307) = true +< (0.22250738585072014E~307, 0.11125369292536007E~307) = false +> (0.22250738585072014E~307, 0.11125369292536007E~307) = true +== (0.22250738585072014E~307, 0.11125369292536007E~307) = false +?= (0.22250738585072014E~307, 0.11125369292536007E~307) = false +< (0.22250738585072014E~307, 0.5E~323) = false +> (0.22250738585072014E~307, 0.5E~323) = true +== (0.22250738585072014E~307, 0.5E~323) = false +?= (0.22250738585072014E~307, 0.5E~323) = false +< (0.22250738585072014E~307, 0.0) = false +> (0.22250738585072014E~307, 0.0) = true +== (0.22250738585072014E~307, 0.0) = false +?= (0.22250738585072014E~307, 0.0) = false +< (0.22250738585072014E~307, ~0.17976931348623157E309) = false +> (0.22250738585072014E~307, ~0.17976931348623157E309) = true +== (0.22250738585072014E~307, ~0.17976931348623157E309) = false +?= (0.22250738585072014E~307, ~0.17976931348623157E309) = false +< (0.22250738585072014E~307, ~0.8988465674311579E308) = false +> (0.22250738585072014E~307, ~0.8988465674311579E308) = true +== (0.22250738585072014E~307, ~0.8988465674311579E308) = false +?= (0.22250738585072014E~307, ~0.8988465674311579E308) = false +< (0.22250738585072014E~307, ~0.123E4) = false +> (0.22250738585072014E~307, ~0.123E4) = true +== (0.22250738585072014E~307, ~0.123E4) = false +?= (0.22250738585072014E~307, ~0.123E4) = false +< (0.22250738585072014E~307, ~0.123E2) = false +> (0.22250738585072014E~307, ~0.123E2) = true +== (0.22250738585072014E~307, ~0.123E2) = false +?= (0.22250738585072014E~307, ~0.123E2) = false +< (0.22250738585072014E~307, ~0.3141592653589793E1) = false +> (0.22250738585072014E~307, ~0.3141592653589793E1) = true +== (0.22250738585072014E~307, ~0.3141592653589793E1) = false +?= (0.22250738585072014E~307, ~0.3141592653589793E1) = false +< (0.22250738585072014E~307, ~0.2718281828459045E1) = false +> (0.22250738585072014E~307, ~0.2718281828459045E1) = true +== (0.22250738585072014E~307, ~0.2718281828459045E1) = false +?= (0.22250738585072014E~307, ~0.2718281828459045E1) = false +< (0.22250738585072014E~307, ~0.123E1) = false +> (0.22250738585072014E~307, ~0.123E1) = true +== (0.22250738585072014E~307, ~0.123E1) = false +?= (0.22250738585072014E~307, ~0.123E1) = false +< (0.22250738585072014E~307, ~0.123) = false +> (0.22250738585072014E~307, ~0.123) = true +== (0.22250738585072014E~307, ~0.123) = false +?= (0.22250738585072014E~307, ~0.123) = false +< (0.22250738585072014E~307, ~0.123E~2) = false +> (0.22250738585072014E~307, ~0.123E~2) = true +== (0.22250738585072014E~307, ~0.123E~2) = false +?= (0.22250738585072014E~307, ~0.123E~2) = false +< (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +> (0.22250738585072014E~307, ~0.22250738585072014E~307) = true +== (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +?= (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +< (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +> (0.22250738585072014E~307, ~0.11125369292536007E~307) = true +== (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +?= (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +< (0.22250738585072014E~307, ~0.5E~323) = false +> (0.22250738585072014E~307, ~0.5E~323) = true +== (0.22250738585072014E~307, ~0.5E~323) = false +?= (0.22250738585072014E~307, ~0.5E~323) = false +< (0.22250738585072014E~307, ~0.0) = false +> (0.22250738585072014E~307, ~0.0) = true +== (0.22250738585072014E~307, ~0.0) = false +?= (0.22250738585072014E~307, ~0.0) = false +< (0.11125369292536007E~307, 0.17976931348623157E309) = true +> (0.11125369292536007E~307, 0.17976931348623157E309) = false +== (0.11125369292536007E~307, 0.17976931348623157E309) = false +?= (0.11125369292536007E~307, 0.17976931348623157E309) = false +< (0.11125369292536007E~307, 0.8988465674311579E308) = true +> (0.11125369292536007E~307, 0.8988465674311579E308) = false +== (0.11125369292536007E~307, 0.8988465674311579E308) = false +?= (0.11125369292536007E~307, 0.8988465674311579E308) = false +< (0.11125369292536007E~307, 0.123E4) = true +> (0.11125369292536007E~307, 0.123E4) = false +== (0.11125369292536007E~307, 0.123E4) = false +?= (0.11125369292536007E~307, 0.123E4) = false +< (0.11125369292536007E~307, 0.123E2) = true +> (0.11125369292536007E~307, 0.123E2) = false +== (0.11125369292536007E~307, 0.123E2) = false +?= (0.11125369292536007E~307, 0.123E2) = false +< (0.11125369292536007E~307, 0.3141592653589793E1) = true +> (0.11125369292536007E~307, 0.3141592653589793E1) = false +== (0.11125369292536007E~307, 0.3141592653589793E1) = false +?= (0.11125369292536007E~307, 0.3141592653589793E1) = false +< (0.11125369292536007E~307, 0.2718281828459045E1) = true +> (0.11125369292536007E~307, 0.2718281828459045E1) = false +== (0.11125369292536007E~307, 0.2718281828459045E1) = false +?= (0.11125369292536007E~307, 0.2718281828459045E1) = false +< (0.11125369292536007E~307, 0.123E1) = true +> (0.11125369292536007E~307, 0.123E1) = false +== (0.11125369292536007E~307, 0.123E1) = false +?= (0.11125369292536007E~307, 0.123E1) = false +< (0.11125369292536007E~307, 0.123) = true +> (0.11125369292536007E~307, 0.123) = false +== (0.11125369292536007E~307, 0.123) = false +?= (0.11125369292536007E~307, 0.123) = false +< (0.11125369292536007E~307, 0.123E~2) = true +> (0.11125369292536007E~307, 0.123E~2) = false +== (0.11125369292536007E~307, 0.123E~2) = false +?= (0.11125369292536007E~307, 0.123E~2) = false +< (0.11125369292536007E~307, 0.22250738585072014E~307) = true +> (0.11125369292536007E~307, 0.22250738585072014E~307) = false +== (0.11125369292536007E~307, 0.22250738585072014E~307) = false +?= (0.11125369292536007E~307, 0.22250738585072014E~307) = false +< (0.11125369292536007E~307, 0.11125369292536007E~307) = false +> (0.11125369292536007E~307, 0.11125369292536007E~307) = false +== (0.11125369292536007E~307, 0.11125369292536007E~307) = true +?= (0.11125369292536007E~307, 0.11125369292536007E~307) = true +< (0.11125369292536007E~307, 0.5E~323) = false +> (0.11125369292536007E~307, 0.5E~323) = true +== (0.11125369292536007E~307, 0.5E~323) = false +?= (0.11125369292536007E~307, 0.5E~323) = false +< (0.11125369292536007E~307, 0.0) = false +> (0.11125369292536007E~307, 0.0) = true +== (0.11125369292536007E~307, 0.0) = false +?= (0.11125369292536007E~307, 0.0) = false +< (0.11125369292536007E~307, ~0.17976931348623157E309) = false +> (0.11125369292536007E~307, ~0.17976931348623157E309) = true +== (0.11125369292536007E~307, ~0.17976931348623157E309) = false +?= (0.11125369292536007E~307, ~0.17976931348623157E309) = false +< (0.11125369292536007E~307, ~0.8988465674311579E308) = false +> (0.11125369292536007E~307, ~0.8988465674311579E308) = true +== (0.11125369292536007E~307, ~0.8988465674311579E308) = false +?= (0.11125369292536007E~307, ~0.8988465674311579E308) = false +< (0.11125369292536007E~307, ~0.123E4) = false +> (0.11125369292536007E~307, ~0.123E4) = true +== (0.11125369292536007E~307, ~0.123E4) = false +?= (0.11125369292536007E~307, ~0.123E4) = false +< (0.11125369292536007E~307, ~0.123E2) = false +> (0.11125369292536007E~307, ~0.123E2) = true +== (0.11125369292536007E~307, ~0.123E2) = false +?= (0.11125369292536007E~307, ~0.123E2) = false +< (0.11125369292536007E~307, ~0.3141592653589793E1) = false +> (0.11125369292536007E~307, ~0.3141592653589793E1) = true +== (0.11125369292536007E~307, ~0.3141592653589793E1) = false +?= (0.11125369292536007E~307, ~0.3141592653589793E1) = false +< (0.11125369292536007E~307, ~0.2718281828459045E1) = false +> (0.11125369292536007E~307, ~0.2718281828459045E1) = true +== (0.11125369292536007E~307, ~0.2718281828459045E1) = false +?= (0.11125369292536007E~307, ~0.2718281828459045E1) = false +< (0.11125369292536007E~307, ~0.123E1) = false +> (0.11125369292536007E~307, ~0.123E1) = true +== (0.11125369292536007E~307, ~0.123E1) = false +?= (0.11125369292536007E~307, ~0.123E1) = false +< (0.11125369292536007E~307, ~0.123) = false +> (0.11125369292536007E~307, ~0.123) = true +== (0.11125369292536007E~307, ~0.123) = false +?= (0.11125369292536007E~307, ~0.123) = false +< (0.11125369292536007E~307, ~0.123E~2) = false +> (0.11125369292536007E~307, ~0.123E~2) = true +== (0.11125369292536007E~307, ~0.123E~2) = false +?= (0.11125369292536007E~307, ~0.123E~2) = false +< (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +> (0.11125369292536007E~307, ~0.22250738585072014E~307) = true +== (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +?= (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +< (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +> (0.11125369292536007E~307, ~0.11125369292536007E~307) = true +== (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +?= (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +< (0.11125369292536007E~307, ~0.5E~323) = false +> (0.11125369292536007E~307, ~0.5E~323) = true +== (0.11125369292536007E~307, ~0.5E~323) = false +?= (0.11125369292536007E~307, ~0.5E~323) = false +< (0.11125369292536007E~307, ~0.0) = false +> (0.11125369292536007E~307, ~0.0) = true +== (0.11125369292536007E~307, ~0.0) = false +?= (0.11125369292536007E~307, ~0.0) = false +< (0.5E~323, 0.17976931348623157E309) = true +> (0.5E~323, 0.17976931348623157E309) = false +== (0.5E~323, 0.17976931348623157E309) = false +?= (0.5E~323, 0.17976931348623157E309) = false +< (0.5E~323, 0.8988465674311579E308) = true +> (0.5E~323, 0.8988465674311579E308) = false +== (0.5E~323, 0.8988465674311579E308) = false +?= (0.5E~323, 0.8988465674311579E308) = false +< (0.5E~323, 0.123E4) = true +> (0.5E~323, 0.123E4) = false +== (0.5E~323, 0.123E4) = false +?= (0.5E~323, 0.123E4) = false +< (0.5E~323, 0.123E2) = true +> (0.5E~323, 0.123E2) = false +== (0.5E~323, 0.123E2) = false +?= (0.5E~323, 0.123E2) = false +< (0.5E~323, 0.3141592653589793E1) = true +> (0.5E~323, 0.3141592653589793E1) = false +== (0.5E~323, 0.3141592653589793E1) = false +?= (0.5E~323, 0.3141592653589793E1) = false +< (0.5E~323, 0.2718281828459045E1) = true +> (0.5E~323, 0.2718281828459045E1) = false +== (0.5E~323, 0.2718281828459045E1) = false +?= (0.5E~323, 0.2718281828459045E1) = false +< (0.5E~323, 0.123E1) = true +> (0.5E~323, 0.123E1) = false +== (0.5E~323, 0.123E1) = false +?= (0.5E~323, 0.123E1) = false +< (0.5E~323, 0.123) = true +> (0.5E~323, 0.123) = false +== (0.5E~323, 0.123) = false +?= (0.5E~323, 0.123) = false +< (0.5E~323, 0.123E~2) = true +> (0.5E~323, 0.123E~2) = false +== (0.5E~323, 0.123E~2) = false +?= (0.5E~323, 0.123E~2) = false +< (0.5E~323, 0.22250738585072014E~307) = true +> (0.5E~323, 0.22250738585072014E~307) = false +== (0.5E~323, 0.22250738585072014E~307) = false +?= (0.5E~323, 0.22250738585072014E~307) = false +< (0.5E~323, 0.11125369292536007E~307) = true +> (0.5E~323, 0.11125369292536007E~307) = false +== (0.5E~323, 0.11125369292536007E~307) = false +?= (0.5E~323, 0.11125369292536007E~307) = false +< (0.5E~323, 0.5E~323) = false +> (0.5E~323, 0.5E~323) = false +== (0.5E~323, 0.5E~323) = true +?= (0.5E~323, 0.5E~323) = true +< (0.5E~323, 0.0) = false +> (0.5E~323, 0.0) = true +== (0.5E~323, 0.0) = false +?= (0.5E~323, 0.0) = false +< (0.5E~323, ~0.17976931348623157E309) = false +> (0.5E~323, ~0.17976931348623157E309) = true +== (0.5E~323, ~0.17976931348623157E309) = false +?= (0.5E~323, ~0.17976931348623157E309) = false +< (0.5E~323, ~0.8988465674311579E308) = false +> (0.5E~323, ~0.8988465674311579E308) = true +== (0.5E~323, ~0.8988465674311579E308) = false +?= (0.5E~323, ~0.8988465674311579E308) = false +< (0.5E~323, ~0.123E4) = false +> (0.5E~323, ~0.123E4) = true +== (0.5E~323, ~0.123E4) = false +?= (0.5E~323, ~0.123E4) = false +< (0.5E~323, ~0.123E2) = false +> (0.5E~323, ~0.123E2) = true +== (0.5E~323, ~0.123E2) = false +?= (0.5E~323, ~0.123E2) = false +< (0.5E~323, ~0.3141592653589793E1) = false +> (0.5E~323, ~0.3141592653589793E1) = true +== (0.5E~323, ~0.3141592653589793E1) = false +?= (0.5E~323, ~0.3141592653589793E1) = false +< (0.5E~323, ~0.2718281828459045E1) = false +> (0.5E~323, ~0.2718281828459045E1) = true +== (0.5E~323, ~0.2718281828459045E1) = false +?= (0.5E~323, ~0.2718281828459045E1) = false +< (0.5E~323, ~0.123E1) = false +> (0.5E~323, ~0.123E1) = true +== (0.5E~323, ~0.123E1) = false +?= (0.5E~323, ~0.123E1) = false +< (0.5E~323, ~0.123) = false +> (0.5E~323, ~0.123) = true +== (0.5E~323, ~0.123) = false +?= (0.5E~323, ~0.123) = false +< (0.5E~323, ~0.123E~2) = false +> (0.5E~323, ~0.123E~2) = true +== (0.5E~323, ~0.123E~2) = false +?= (0.5E~323, ~0.123E~2) = false +< (0.5E~323, ~0.22250738585072014E~307) = false +> (0.5E~323, ~0.22250738585072014E~307) = true +== (0.5E~323, ~0.22250738585072014E~307) = false +?= (0.5E~323, ~0.22250738585072014E~307) = false +< (0.5E~323, ~0.11125369292536007E~307) = false +> (0.5E~323, ~0.11125369292536007E~307) = true +== (0.5E~323, ~0.11125369292536007E~307) = false +?= (0.5E~323, ~0.11125369292536007E~307) = false +< (0.5E~323, ~0.5E~323) = false +> (0.5E~323, ~0.5E~323) = true +== (0.5E~323, ~0.5E~323) = false +?= (0.5E~323, ~0.5E~323) = false +< (0.5E~323, ~0.0) = false +> (0.5E~323, ~0.0) = true +== (0.5E~323, ~0.0) = false +?= (0.5E~323, ~0.0) = false +< (0.0, 0.17976931348623157E309) = true +> (0.0, 0.17976931348623157E309) = false +== (0.0, 0.17976931348623157E309) = false +?= (0.0, 0.17976931348623157E309) = false +< (0.0, 0.8988465674311579E308) = true +> (0.0, 0.8988465674311579E308) = false +== (0.0, 0.8988465674311579E308) = false +?= (0.0, 0.8988465674311579E308) = false +< (0.0, 0.123E4) = true +> (0.0, 0.123E4) = false +== (0.0, 0.123E4) = false +?= (0.0, 0.123E4) = false +< (0.0, 0.123E2) = true +> (0.0, 0.123E2) = false +== (0.0, 0.123E2) = false +?= (0.0, 0.123E2) = false +< (0.0, 0.3141592653589793E1) = true +> (0.0, 0.3141592653589793E1) = false +== (0.0, 0.3141592653589793E1) = false +?= (0.0, 0.3141592653589793E1) = false +< (0.0, 0.2718281828459045E1) = true +> (0.0, 0.2718281828459045E1) = false +== (0.0, 0.2718281828459045E1) = false +?= (0.0, 0.2718281828459045E1) = false +< (0.0, 0.123E1) = true +> (0.0, 0.123E1) = false +== (0.0, 0.123E1) = false +?= (0.0, 0.123E1) = false +< (0.0, 0.123) = true +> (0.0, 0.123) = false +== (0.0, 0.123) = false +?= (0.0, 0.123) = false +< (0.0, 0.123E~2) = true +> (0.0, 0.123E~2) = false +== (0.0, 0.123E~2) = false +?= (0.0, 0.123E~2) = false +< (0.0, 0.22250738585072014E~307) = true +> (0.0, 0.22250738585072014E~307) = false +== (0.0, 0.22250738585072014E~307) = false +?= (0.0, 0.22250738585072014E~307) = false +< (0.0, 0.11125369292536007E~307) = true +> (0.0, 0.11125369292536007E~307) = false +== (0.0, 0.11125369292536007E~307) = false +?= (0.0, 0.11125369292536007E~307) = false +< (0.0, 0.5E~323) = true +> (0.0, 0.5E~323) = false +== (0.0, 0.5E~323) = false +?= (0.0, 0.5E~323) = false +< (0.0, 0.0) = false +> (0.0, 0.0) = false +== (0.0, 0.0) = true +?= (0.0, 0.0) = true +< (0.0, ~0.17976931348623157E309) = false +> (0.0, ~0.17976931348623157E309) = true +== (0.0, ~0.17976931348623157E309) = false +?= (0.0, ~0.17976931348623157E309) = false +< (0.0, ~0.8988465674311579E308) = false +> (0.0, ~0.8988465674311579E308) = true +== (0.0, ~0.8988465674311579E308) = false +?= (0.0, ~0.8988465674311579E308) = false +< (0.0, ~0.123E4) = false +> (0.0, ~0.123E4) = true +== (0.0, ~0.123E4) = false +?= (0.0, ~0.123E4) = false +< (0.0, ~0.123E2) = false +> (0.0, ~0.123E2) = true +== (0.0, ~0.123E2) = false +?= (0.0, ~0.123E2) = false +< (0.0, ~0.3141592653589793E1) = false +> (0.0, ~0.3141592653589793E1) = true +== (0.0, ~0.3141592653589793E1) = false +?= (0.0, ~0.3141592653589793E1) = false +< (0.0, ~0.2718281828459045E1) = false +> (0.0, ~0.2718281828459045E1) = true +== (0.0, ~0.2718281828459045E1) = false +?= (0.0, ~0.2718281828459045E1) = false +< (0.0, ~0.123E1) = false +> (0.0, ~0.123E1) = true +== (0.0, ~0.123E1) = false +?= (0.0, ~0.123E1) = false +< (0.0, ~0.123) = false +> (0.0, ~0.123) = true +== (0.0, ~0.123) = false +?= (0.0, ~0.123) = false +< (0.0, ~0.123E~2) = false +> (0.0, ~0.123E~2) = true +== (0.0, ~0.123E~2) = false +?= (0.0, ~0.123E~2) = false +< (0.0, ~0.22250738585072014E~307) = false +> (0.0, ~0.22250738585072014E~307) = true +== (0.0, ~0.22250738585072014E~307) = false +?= (0.0, ~0.22250738585072014E~307) = false +< (0.0, ~0.11125369292536007E~307) = false +> (0.0, ~0.11125369292536007E~307) = true +== (0.0, ~0.11125369292536007E~307) = false +?= (0.0, ~0.11125369292536007E~307) = false +< (0.0, ~0.5E~323) = false +> (0.0, ~0.5E~323) = true +== (0.0, ~0.5E~323) = false +?= (0.0, ~0.5E~323) = false +< (0.0, ~0.0) = false +> (0.0, ~0.0) = false +== (0.0, ~0.0) = true +?= (0.0, ~0.0) = true +< (~0.17976931348623157E309, 0.17976931348623157E309) = true +> (~0.17976931348623157E309, 0.17976931348623157E309) = false +== (~0.17976931348623157E309, 0.17976931348623157E309) = false +?= (~0.17976931348623157E309, 0.17976931348623157E309) = false +< (~0.17976931348623157E309, 0.8988465674311579E308) = true +> (~0.17976931348623157E309, 0.8988465674311579E308) = false +== (~0.17976931348623157E309, 0.8988465674311579E308) = false +?= (~0.17976931348623157E309, 0.8988465674311579E308) = false +< (~0.17976931348623157E309, 0.123E4) = true +> (~0.17976931348623157E309, 0.123E4) = false +== (~0.17976931348623157E309, 0.123E4) = false +?= (~0.17976931348623157E309, 0.123E4) = false +< (~0.17976931348623157E309, 0.123E2) = true +> (~0.17976931348623157E309, 0.123E2) = false +== (~0.17976931348623157E309, 0.123E2) = false +?= (~0.17976931348623157E309, 0.123E2) = false +< (~0.17976931348623157E309, 0.3141592653589793E1) = true +> (~0.17976931348623157E309, 0.3141592653589793E1) = false +== (~0.17976931348623157E309, 0.3141592653589793E1) = false +?= (~0.17976931348623157E309, 0.3141592653589793E1) = false +< (~0.17976931348623157E309, 0.2718281828459045E1) = true +> (~0.17976931348623157E309, 0.2718281828459045E1) = false +== (~0.17976931348623157E309, 0.2718281828459045E1) = false +?= (~0.17976931348623157E309, 0.2718281828459045E1) = false +< (~0.17976931348623157E309, 0.123E1) = true +> (~0.17976931348623157E309, 0.123E1) = false +== (~0.17976931348623157E309, 0.123E1) = false +?= (~0.17976931348623157E309, 0.123E1) = false +< (~0.17976931348623157E309, 0.123) = true +> (~0.17976931348623157E309, 0.123) = false +== (~0.17976931348623157E309, 0.123) = false +?= (~0.17976931348623157E309, 0.123) = false +< (~0.17976931348623157E309, 0.123E~2) = true +> (~0.17976931348623157E309, 0.123E~2) = false +== (~0.17976931348623157E309, 0.123E~2) = false +?= (~0.17976931348623157E309, 0.123E~2) = false +< (~0.17976931348623157E309, 0.22250738585072014E~307) = true +> (~0.17976931348623157E309, 0.22250738585072014E~307) = false +== (~0.17976931348623157E309, 0.22250738585072014E~307) = false +?= (~0.17976931348623157E309, 0.22250738585072014E~307) = false +< (~0.17976931348623157E309, 0.11125369292536007E~307) = true +> (~0.17976931348623157E309, 0.11125369292536007E~307) = false +== (~0.17976931348623157E309, 0.11125369292536007E~307) = false +?= (~0.17976931348623157E309, 0.11125369292536007E~307) = false +< (~0.17976931348623157E309, 0.5E~323) = true +> (~0.17976931348623157E309, 0.5E~323) = false +== (~0.17976931348623157E309, 0.5E~323) = false +?= (~0.17976931348623157E309, 0.5E~323) = false +< (~0.17976931348623157E309, 0.0) = true +> (~0.17976931348623157E309, 0.0) = false +== (~0.17976931348623157E309, 0.0) = false +?= (~0.17976931348623157E309, 0.0) = false +< (~0.17976931348623157E309, ~0.17976931348623157E309) = false +> (~0.17976931348623157E309, ~0.17976931348623157E309) = false +== (~0.17976931348623157E309, ~0.17976931348623157E309) = true +?= (~0.17976931348623157E309, ~0.17976931348623157E309) = true +< (~0.17976931348623157E309, ~0.8988465674311579E308) = true +> (~0.17976931348623157E309, ~0.8988465674311579E308) = false +== (~0.17976931348623157E309, ~0.8988465674311579E308) = false +?= (~0.17976931348623157E309, ~0.8988465674311579E308) = false +< (~0.17976931348623157E309, ~0.123E4) = true +> (~0.17976931348623157E309, ~0.123E4) = false +== (~0.17976931348623157E309, ~0.123E4) = false +?= (~0.17976931348623157E309, ~0.123E4) = false +< (~0.17976931348623157E309, ~0.123E2) = true +> (~0.17976931348623157E309, ~0.123E2) = false +== (~0.17976931348623157E309, ~0.123E2) = false +?= (~0.17976931348623157E309, ~0.123E2) = false +< (~0.17976931348623157E309, ~0.3141592653589793E1) = true +> (~0.17976931348623157E309, ~0.3141592653589793E1) = false +== (~0.17976931348623157E309, ~0.3141592653589793E1) = false +?= (~0.17976931348623157E309, ~0.3141592653589793E1) = false +< (~0.17976931348623157E309, ~0.2718281828459045E1) = true +> (~0.17976931348623157E309, ~0.2718281828459045E1) = false +== (~0.17976931348623157E309, ~0.2718281828459045E1) = false +?= (~0.17976931348623157E309, ~0.2718281828459045E1) = false +< (~0.17976931348623157E309, ~0.123E1) = true +> (~0.17976931348623157E309, ~0.123E1) = false +== (~0.17976931348623157E309, ~0.123E1) = false +?= (~0.17976931348623157E309, ~0.123E1) = false +< (~0.17976931348623157E309, ~0.123) = true +> (~0.17976931348623157E309, ~0.123) = false +== (~0.17976931348623157E309, ~0.123) = false +?= (~0.17976931348623157E309, ~0.123) = false +< (~0.17976931348623157E309, ~0.123E~2) = true +> (~0.17976931348623157E309, ~0.123E~2) = false +== (~0.17976931348623157E309, ~0.123E~2) = false +?= (~0.17976931348623157E309, ~0.123E~2) = false +< (~0.17976931348623157E309, ~0.22250738585072014E~307) = true +> (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +== (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +?= (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +< (~0.17976931348623157E309, ~0.11125369292536007E~307) = true +> (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +== (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +?= (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +< (~0.17976931348623157E309, ~0.5E~323) = true +> (~0.17976931348623157E309, ~0.5E~323) = false +== (~0.17976931348623157E309, ~0.5E~323) = false +?= (~0.17976931348623157E309, ~0.5E~323) = false +< (~0.17976931348623157E309, ~0.0) = true +> (~0.17976931348623157E309, ~0.0) = false +== (~0.17976931348623157E309, ~0.0) = false +?= (~0.17976931348623157E309, ~0.0) = false +< (~0.8988465674311579E308, 0.17976931348623157E309) = true +> (~0.8988465674311579E308, 0.17976931348623157E309) = false +== (~0.8988465674311579E308, 0.17976931348623157E309) = false +?= (~0.8988465674311579E308, 0.17976931348623157E309) = false +< (~0.8988465674311579E308, 0.8988465674311579E308) = true +> (~0.8988465674311579E308, 0.8988465674311579E308) = false +== (~0.8988465674311579E308, 0.8988465674311579E308) = false +?= (~0.8988465674311579E308, 0.8988465674311579E308) = false +< (~0.8988465674311579E308, 0.123E4) = true +> (~0.8988465674311579E308, 0.123E4) = false +== (~0.8988465674311579E308, 0.123E4) = false +?= (~0.8988465674311579E308, 0.123E4) = false +< (~0.8988465674311579E308, 0.123E2) = true +> (~0.8988465674311579E308, 0.123E2) = false +== (~0.8988465674311579E308, 0.123E2) = false +?= (~0.8988465674311579E308, 0.123E2) = false +< (~0.8988465674311579E308, 0.3141592653589793E1) = true +> (~0.8988465674311579E308, 0.3141592653589793E1) = false +== (~0.8988465674311579E308, 0.3141592653589793E1) = false +?= (~0.8988465674311579E308, 0.3141592653589793E1) = false +< (~0.8988465674311579E308, 0.2718281828459045E1) = true +> (~0.8988465674311579E308, 0.2718281828459045E1) = false +== (~0.8988465674311579E308, 0.2718281828459045E1) = false +?= (~0.8988465674311579E308, 0.2718281828459045E1) = false +< (~0.8988465674311579E308, 0.123E1) = true +> (~0.8988465674311579E308, 0.123E1) = false +== (~0.8988465674311579E308, 0.123E1) = false +?= (~0.8988465674311579E308, 0.123E1) = false +< (~0.8988465674311579E308, 0.123) = true +> (~0.8988465674311579E308, 0.123) = false +== (~0.8988465674311579E308, 0.123) = false +?= (~0.8988465674311579E308, 0.123) = false +< (~0.8988465674311579E308, 0.123E~2) = true +> (~0.8988465674311579E308, 0.123E~2) = false +== (~0.8988465674311579E308, 0.123E~2) = false +?= (~0.8988465674311579E308, 0.123E~2) = false +< (~0.8988465674311579E308, 0.22250738585072014E~307) = true +> (~0.8988465674311579E308, 0.22250738585072014E~307) = false +== (~0.8988465674311579E308, 0.22250738585072014E~307) = false +?= (~0.8988465674311579E308, 0.22250738585072014E~307) = false +< (~0.8988465674311579E308, 0.11125369292536007E~307) = true +> (~0.8988465674311579E308, 0.11125369292536007E~307) = false +== (~0.8988465674311579E308, 0.11125369292536007E~307) = false +?= (~0.8988465674311579E308, 0.11125369292536007E~307) = false +< (~0.8988465674311579E308, 0.5E~323) = true +> (~0.8988465674311579E308, 0.5E~323) = false +== (~0.8988465674311579E308, 0.5E~323) = false +?= (~0.8988465674311579E308, 0.5E~323) = false +< (~0.8988465674311579E308, 0.0) = true +> (~0.8988465674311579E308, 0.0) = false +== (~0.8988465674311579E308, 0.0) = false +?= (~0.8988465674311579E308, 0.0) = false +< (~0.8988465674311579E308, ~0.17976931348623157E309) = false +> (~0.8988465674311579E308, ~0.17976931348623157E309) = true +== (~0.8988465674311579E308, ~0.17976931348623157E309) = false +?= (~0.8988465674311579E308, ~0.17976931348623157E309) = false +< (~0.8988465674311579E308, ~0.8988465674311579E308) = false +> (~0.8988465674311579E308, ~0.8988465674311579E308) = false +== (~0.8988465674311579E308, ~0.8988465674311579E308) = true +?= (~0.8988465674311579E308, ~0.8988465674311579E308) = true +< (~0.8988465674311579E308, ~0.123E4) = true +> (~0.8988465674311579E308, ~0.123E4) = false +== (~0.8988465674311579E308, ~0.123E4) = false +?= (~0.8988465674311579E308, ~0.123E4) = false +< (~0.8988465674311579E308, ~0.123E2) = true +> (~0.8988465674311579E308, ~0.123E2) = false +== (~0.8988465674311579E308, ~0.123E2) = false +?= (~0.8988465674311579E308, ~0.123E2) = false +< (~0.8988465674311579E308, ~0.3141592653589793E1) = true +> (~0.8988465674311579E308, ~0.3141592653589793E1) = false +== (~0.8988465674311579E308, ~0.3141592653589793E1) = false +?= (~0.8988465674311579E308, ~0.3141592653589793E1) = false +< (~0.8988465674311579E308, ~0.2718281828459045E1) = true +> (~0.8988465674311579E308, ~0.2718281828459045E1) = false +== (~0.8988465674311579E308, ~0.2718281828459045E1) = false +?= (~0.8988465674311579E308, ~0.2718281828459045E1) = false +< (~0.8988465674311579E308, ~0.123E1) = true +> (~0.8988465674311579E308, ~0.123E1) = false +== (~0.8988465674311579E308, ~0.123E1) = false +?= (~0.8988465674311579E308, ~0.123E1) = false +< (~0.8988465674311579E308, ~0.123) = true +> (~0.8988465674311579E308, ~0.123) = false +== (~0.8988465674311579E308, ~0.123) = false +?= (~0.8988465674311579E308, ~0.123) = false +< (~0.8988465674311579E308, ~0.123E~2) = true +> (~0.8988465674311579E308, ~0.123E~2) = false +== (~0.8988465674311579E308, ~0.123E~2) = false +?= (~0.8988465674311579E308, ~0.123E~2) = false +< (~0.8988465674311579E308, ~0.22250738585072014E~307) = true +> (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +== (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +?= (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +< (~0.8988465674311579E308, ~0.11125369292536007E~307) = true +> (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +== (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +?= (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +< (~0.8988465674311579E308, ~0.5E~323) = true +> (~0.8988465674311579E308, ~0.5E~323) = false +== (~0.8988465674311579E308, ~0.5E~323) = false +?= (~0.8988465674311579E308, ~0.5E~323) = false +< (~0.8988465674311579E308, ~0.0) = true +> (~0.8988465674311579E308, ~0.0) = false +== (~0.8988465674311579E308, ~0.0) = false +?= (~0.8988465674311579E308, ~0.0) = false +< (~0.123E4, 0.17976931348623157E309) = true +> (~0.123E4, 0.17976931348623157E309) = false +== (~0.123E4, 0.17976931348623157E309) = false +?= (~0.123E4, 0.17976931348623157E309) = false +< (~0.123E4, 0.8988465674311579E308) = true +> (~0.123E4, 0.8988465674311579E308) = false +== (~0.123E4, 0.8988465674311579E308) = false +?= (~0.123E4, 0.8988465674311579E308) = false +< (~0.123E4, 0.123E4) = true +> (~0.123E4, 0.123E4) = false +== (~0.123E4, 0.123E4) = false +?= (~0.123E4, 0.123E4) = false +< (~0.123E4, 0.123E2) = true +> (~0.123E4, 0.123E2) = false +== (~0.123E4, 0.123E2) = false +?= (~0.123E4, 0.123E2) = false +< (~0.123E4, 0.3141592653589793E1) = true +> (~0.123E4, 0.3141592653589793E1) = false +== (~0.123E4, 0.3141592653589793E1) = false +?= (~0.123E4, 0.3141592653589793E1) = false +< (~0.123E4, 0.2718281828459045E1) = true +> (~0.123E4, 0.2718281828459045E1) = false +== (~0.123E4, 0.2718281828459045E1) = false +?= (~0.123E4, 0.2718281828459045E1) = false +< (~0.123E4, 0.123E1) = true +> (~0.123E4, 0.123E1) = false +== (~0.123E4, 0.123E1) = false +?= (~0.123E4, 0.123E1) = false +< (~0.123E4, 0.123) = true +> (~0.123E4, 0.123) = false +== (~0.123E4, 0.123) = false +?= (~0.123E4, 0.123) = false +< (~0.123E4, 0.123E~2) = true +> (~0.123E4, 0.123E~2) = false +== (~0.123E4, 0.123E~2) = false +?= (~0.123E4, 0.123E~2) = false +< (~0.123E4, 0.22250738585072014E~307) = true +> (~0.123E4, 0.22250738585072014E~307) = false +== (~0.123E4, 0.22250738585072014E~307) = false +?= (~0.123E4, 0.22250738585072014E~307) = false +< (~0.123E4, 0.11125369292536007E~307) = true +> (~0.123E4, 0.11125369292536007E~307) = false +== (~0.123E4, 0.11125369292536007E~307) = false +?= (~0.123E4, 0.11125369292536007E~307) = false +< (~0.123E4, 0.5E~323) = true +> (~0.123E4, 0.5E~323) = false +== (~0.123E4, 0.5E~323) = false +?= (~0.123E4, 0.5E~323) = false +< (~0.123E4, 0.0) = true +> (~0.123E4, 0.0) = false +== (~0.123E4, 0.0) = false +?= (~0.123E4, 0.0) = false +< (~0.123E4, ~0.17976931348623157E309) = false +> (~0.123E4, ~0.17976931348623157E309) = true +== (~0.123E4, ~0.17976931348623157E309) = false +?= (~0.123E4, ~0.17976931348623157E309) = false +< (~0.123E4, ~0.8988465674311579E308) = false +> (~0.123E4, ~0.8988465674311579E308) = true +== (~0.123E4, ~0.8988465674311579E308) = false +?= (~0.123E4, ~0.8988465674311579E308) = false +< (~0.123E4, ~0.123E4) = false +> (~0.123E4, ~0.123E4) = false +== (~0.123E4, ~0.123E4) = true +?= (~0.123E4, ~0.123E4) = true +< (~0.123E4, ~0.123E2) = true +> (~0.123E4, ~0.123E2) = false +== (~0.123E4, ~0.123E2) = false +?= (~0.123E4, ~0.123E2) = false +< (~0.123E4, ~0.3141592653589793E1) = true +> (~0.123E4, ~0.3141592653589793E1) = false +== (~0.123E4, ~0.3141592653589793E1) = false +?= (~0.123E4, ~0.3141592653589793E1) = false +< (~0.123E4, ~0.2718281828459045E1) = true +> (~0.123E4, ~0.2718281828459045E1) = false +== (~0.123E4, ~0.2718281828459045E1) = false +?= (~0.123E4, ~0.2718281828459045E1) = false +< (~0.123E4, ~0.123E1) = true +> (~0.123E4, ~0.123E1) = false +== (~0.123E4, ~0.123E1) = false +?= (~0.123E4, ~0.123E1) = false +< (~0.123E4, ~0.123) = true +> (~0.123E4, ~0.123) = false +== (~0.123E4, ~0.123) = false +?= (~0.123E4, ~0.123) = false +< (~0.123E4, ~0.123E~2) = true +> (~0.123E4, ~0.123E~2) = false +== (~0.123E4, ~0.123E~2) = false +?= (~0.123E4, ~0.123E~2) = false +< (~0.123E4, ~0.22250738585072014E~307) = true +> (~0.123E4, ~0.22250738585072014E~307) = false +== (~0.123E4, ~0.22250738585072014E~307) = false +?= (~0.123E4, ~0.22250738585072014E~307) = false +< (~0.123E4, ~0.11125369292536007E~307) = true +> (~0.123E4, ~0.11125369292536007E~307) = false +== (~0.123E4, ~0.11125369292536007E~307) = false +?= (~0.123E4, ~0.11125369292536007E~307) = false +< (~0.123E4, ~0.5E~323) = true +> (~0.123E4, ~0.5E~323) = false +== (~0.123E4, ~0.5E~323) = false +?= (~0.123E4, ~0.5E~323) = false +< (~0.123E4, ~0.0) = true +> (~0.123E4, ~0.0) = false +== (~0.123E4, ~0.0) = false +?= (~0.123E4, ~0.0) = false +< (~0.123E2, 0.17976931348623157E309) = true +> (~0.123E2, 0.17976931348623157E309) = false +== (~0.123E2, 0.17976931348623157E309) = false +?= (~0.123E2, 0.17976931348623157E309) = false +< (~0.123E2, 0.8988465674311579E308) = true +> (~0.123E2, 0.8988465674311579E308) = false +== (~0.123E2, 0.8988465674311579E308) = false +?= (~0.123E2, 0.8988465674311579E308) = false +< (~0.123E2, 0.123E4) = true +> (~0.123E2, 0.123E4) = false +== (~0.123E2, 0.123E4) = false +?= (~0.123E2, 0.123E4) = false +< (~0.123E2, 0.123E2) = true +> (~0.123E2, 0.123E2) = false +== (~0.123E2, 0.123E2) = false +?= (~0.123E2, 0.123E2) = false +< (~0.123E2, 0.3141592653589793E1) = true +> (~0.123E2, 0.3141592653589793E1) = false +== (~0.123E2, 0.3141592653589793E1) = false +?= (~0.123E2, 0.3141592653589793E1) = false +< (~0.123E2, 0.2718281828459045E1) = true +> (~0.123E2, 0.2718281828459045E1) = false +== (~0.123E2, 0.2718281828459045E1) = false +?= (~0.123E2, 0.2718281828459045E1) = false +< (~0.123E2, 0.123E1) = true +> (~0.123E2, 0.123E1) = false +== (~0.123E2, 0.123E1) = false +?= (~0.123E2, 0.123E1) = false +< (~0.123E2, 0.123) = true +> (~0.123E2, 0.123) = false +== (~0.123E2, 0.123) = false +?= (~0.123E2, 0.123) = false +< (~0.123E2, 0.123E~2) = true +> (~0.123E2, 0.123E~2) = false +== (~0.123E2, 0.123E~2) = false +?= (~0.123E2, 0.123E~2) = false +< (~0.123E2, 0.22250738585072014E~307) = true +> (~0.123E2, 0.22250738585072014E~307) = false +== (~0.123E2, 0.22250738585072014E~307) = false +?= (~0.123E2, 0.22250738585072014E~307) = false +< (~0.123E2, 0.11125369292536007E~307) = true +> (~0.123E2, 0.11125369292536007E~307) = false +== (~0.123E2, 0.11125369292536007E~307) = false +?= (~0.123E2, 0.11125369292536007E~307) = false +< (~0.123E2, 0.5E~323) = true +> (~0.123E2, 0.5E~323) = false +== (~0.123E2, 0.5E~323) = false +?= (~0.123E2, 0.5E~323) = false +< (~0.123E2, 0.0) = true +> (~0.123E2, 0.0) = false +== (~0.123E2, 0.0) = false +?= (~0.123E2, 0.0) = false +< (~0.123E2, ~0.17976931348623157E309) = false +> (~0.123E2, ~0.17976931348623157E309) = true +== (~0.123E2, ~0.17976931348623157E309) = false +?= (~0.123E2, ~0.17976931348623157E309) = false +< (~0.123E2, ~0.8988465674311579E308) = false +> (~0.123E2, ~0.8988465674311579E308) = true +== (~0.123E2, ~0.8988465674311579E308) = false +?= (~0.123E2, ~0.8988465674311579E308) = false +< (~0.123E2, ~0.123E4) = false +> (~0.123E2, ~0.123E4) = true +== (~0.123E2, ~0.123E4) = false +?= (~0.123E2, ~0.123E4) = false +< (~0.123E2, ~0.123E2) = false +> (~0.123E2, ~0.123E2) = false +== (~0.123E2, ~0.123E2) = true +?= (~0.123E2, ~0.123E2) = true +< (~0.123E2, ~0.3141592653589793E1) = true +> (~0.123E2, ~0.3141592653589793E1) = false +== (~0.123E2, ~0.3141592653589793E1) = false +?= (~0.123E2, ~0.3141592653589793E1) = false +< (~0.123E2, ~0.2718281828459045E1) = true +> (~0.123E2, ~0.2718281828459045E1) = false +== (~0.123E2, ~0.2718281828459045E1) = false +?= (~0.123E2, ~0.2718281828459045E1) = false +< (~0.123E2, ~0.123E1) = true +> (~0.123E2, ~0.123E1) = false +== (~0.123E2, ~0.123E1) = false +?= (~0.123E2, ~0.123E1) = false +< (~0.123E2, ~0.123) = true +> (~0.123E2, ~0.123) = false +== (~0.123E2, ~0.123) = false +?= (~0.123E2, ~0.123) = false +< (~0.123E2, ~0.123E~2) = true +> (~0.123E2, ~0.123E~2) = false +== (~0.123E2, ~0.123E~2) = false +?= (~0.123E2, ~0.123E~2) = false +< (~0.123E2, ~0.22250738585072014E~307) = true +> (~0.123E2, ~0.22250738585072014E~307) = false +== (~0.123E2, ~0.22250738585072014E~307) = false +?= (~0.123E2, ~0.22250738585072014E~307) = false +< (~0.123E2, ~0.11125369292536007E~307) = true +> (~0.123E2, ~0.11125369292536007E~307) = false +== (~0.123E2, ~0.11125369292536007E~307) = false +?= (~0.123E2, ~0.11125369292536007E~307) = false +< (~0.123E2, ~0.5E~323) = true +> (~0.123E2, ~0.5E~323) = false +== (~0.123E2, ~0.5E~323) = false +?= (~0.123E2, ~0.5E~323) = false +< (~0.123E2, ~0.0) = true +> (~0.123E2, ~0.0) = false +== (~0.123E2, ~0.0) = false +?= (~0.123E2, ~0.0) = false +< (~0.3141592653589793E1, 0.17976931348623157E309) = true +> (~0.3141592653589793E1, 0.17976931348623157E309) = false +== (~0.3141592653589793E1, 0.17976931348623157E309) = false +?= (~0.3141592653589793E1, 0.17976931348623157E309) = false +< (~0.3141592653589793E1, 0.8988465674311579E308) = true +> (~0.3141592653589793E1, 0.8988465674311579E308) = false +== (~0.3141592653589793E1, 0.8988465674311579E308) = false +?= (~0.3141592653589793E1, 0.8988465674311579E308) = false +< (~0.3141592653589793E1, 0.123E4) = true +> (~0.3141592653589793E1, 0.123E4) = false +== (~0.3141592653589793E1, 0.123E4) = false +?= (~0.3141592653589793E1, 0.123E4) = false +< (~0.3141592653589793E1, 0.123E2) = true +> (~0.3141592653589793E1, 0.123E2) = false +== (~0.3141592653589793E1, 0.123E2) = false +?= (~0.3141592653589793E1, 0.123E2) = false +< (~0.3141592653589793E1, 0.3141592653589793E1) = true +> (~0.3141592653589793E1, 0.3141592653589793E1) = false +== (~0.3141592653589793E1, 0.3141592653589793E1) = false +?= (~0.3141592653589793E1, 0.3141592653589793E1) = false +< (~0.3141592653589793E1, 0.2718281828459045E1) = true +> (~0.3141592653589793E1, 0.2718281828459045E1) = false +== (~0.3141592653589793E1, 0.2718281828459045E1) = false +?= (~0.3141592653589793E1, 0.2718281828459045E1) = false +< (~0.3141592653589793E1, 0.123E1) = true +> (~0.3141592653589793E1, 0.123E1) = false +== (~0.3141592653589793E1, 0.123E1) = false +?= (~0.3141592653589793E1, 0.123E1) = false +< (~0.3141592653589793E1, 0.123) = true +> (~0.3141592653589793E1, 0.123) = false +== (~0.3141592653589793E1, 0.123) = false +?= (~0.3141592653589793E1, 0.123) = false +< (~0.3141592653589793E1, 0.123E~2) = true +> (~0.3141592653589793E1, 0.123E~2) = false +== (~0.3141592653589793E1, 0.123E~2) = false +?= (~0.3141592653589793E1, 0.123E~2) = false +< (~0.3141592653589793E1, 0.22250738585072014E~307) = true +> (~0.3141592653589793E1, 0.22250738585072014E~307) = false +== (~0.3141592653589793E1, 0.22250738585072014E~307) = false +?= (~0.3141592653589793E1, 0.22250738585072014E~307) = false +< (~0.3141592653589793E1, 0.11125369292536007E~307) = true +> (~0.3141592653589793E1, 0.11125369292536007E~307) = false +== (~0.3141592653589793E1, 0.11125369292536007E~307) = false +?= (~0.3141592653589793E1, 0.11125369292536007E~307) = false +< (~0.3141592653589793E1, 0.5E~323) = true +> (~0.3141592653589793E1, 0.5E~323) = false +== (~0.3141592653589793E1, 0.5E~323) = false +?= (~0.3141592653589793E1, 0.5E~323) = false +< (~0.3141592653589793E1, 0.0) = true +> (~0.3141592653589793E1, 0.0) = false +== (~0.3141592653589793E1, 0.0) = false +?= (~0.3141592653589793E1, 0.0) = false +< (~0.3141592653589793E1, ~0.17976931348623157E309) = false +> (~0.3141592653589793E1, ~0.17976931348623157E309) = true +== (~0.3141592653589793E1, ~0.17976931348623157E309) = false +?= (~0.3141592653589793E1, ~0.17976931348623157E309) = false +< (~0.3141592653589793E1, ~0.8988465674311579E308) = false +> (~0.3141592653589793E1, ~0.8988465674311579E308) = true +== (~0.3141592653589793E1, ~0.8988465674311579E308) = false +?= (~0.3141592653589793E1, ~0.8988465674311579E308) = false +< (~0.3141592653589793E1, ~0.123E4) = false +> (~0.3141592653589793E1, ~0.123E4) = true +== (~0.3141592653589793E1, ~0.123E4) = false +?= (~0.3141592653589793E1, ~0.123E4) = false +< (~0.3141592653589793E1, ~0.123E2) = false +> (~0.3141592653589793E1, ~0.123E2) = true +== (~0.3141592653589793E1, ~0.123E2) = false +?= (~0.3141592653589793E1, ~0.123E2) = false +< (~0.3141592653589793E1, ~0.3141592653589793E1) = false +> (~0.3141592653589793E1, ~0.3141592653589793E1) = false +== (~0.3141592653589793E1, ~0.3141592653589793E1) = true +?= (~0.3141592653589793E1, ~0.3141592653589793E1) = true +< (~0.3141592653589793E1, ~0.2718281828459045E1) = true +> (~0.3141592653589793E1, ~0.2718281828459045E1) = false +== (~0.3141592653589793E1, ~0.2718281828459045E1) = false +?= (~0.3141592653589793E1, ~0.2718281828459045E1) = false +< (~0.3141592653589793E1, ~0.123E1) = true +> (~0.3141592653589793E1, ~0.123E1) = false +== (~0.3141592653589793E1, ~0.123E1) = false +?= (~0.3141592653589793E1, ~0.123E1) = false +< (~0.3141592653589793E1, ~0.123) = true +> (~0.3141592653589793E1, ~0.123) = false +== (~0.3141592653589793E1, ~0.123) = false +?= (~0.3141592653589793E1, ~0.123) = false +< (~0.3141592653589793E1, ~0.123E~2) = true +> (~0.3141592653589793E1, ~0.123E~2) = false +== (~0.3141592653589793E1, ~0.123E~2) = false +?= (~0.3141592653589793E1, ~0.123E~2) = false +< (~0.3141592653589793E1, ~0.22250738585072014E~307) = true +> (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +== (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +?= (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +< (~0.3141592653589793E1, ~0.11125369292536007E~307) = true +> (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +== (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +?= (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +< (~0.3141592653589793E1, ~0.5E~323) = true +> (~0.3141592653589793E1, ~0.5E~323) = false +== (~0.3141592653589793E1, ~0.5E~323) = false +?= (~0.3141592653589793E1, ~0.5E~323) = false +< (~0.3141592653589793E1, ~0.0) = true +> (~0.3141592653589793E1, ~0.0) = false +== (~0.3141592653589793E1, ~0.0) = false +?= (~0.3141592653589793E1, ~0.0) = false +< (~0.2718281828459045E1, 0.17976931348623157E309) = true +> (~0.2718281828459045E1, 0.17976931348623157E309) = false +== (~0.2718281828459045E1, 0.17976931348623157E309) = false +?= (~0.2718281828459045E1, 0.17976931348623157E309) = false +< (~0.2718281828459045E1, 0.8988465674311579E308) = true +> (~0.2718281828459045E1, 0.8988465674311579E308) = false +== (~0.2718281828459045E1, 0.8988465674311579E308) = false +?= (~0.2718281828459045E1, 0.8988465674311579E308) = false +< (~0.2718281828459045E1, 0.123E4) = true +> (~0.2718281828459045E1, 0.123E4) = false +== (~0.2718281828459045E1, 0.123E4) = false +?= (~0.2718281828459045E1, 0.123E4) = false +< (~0.2718281828459045E1, 0.123E2) = true +> (~0.2718281828459045E1, 0.123E2) = false +== (~0.2718281828459045E1, 0.123E2) = false +?= (~0.2718281828459045E1, 0.123E2) = false +< (~0.2718281828459045E1, 0.3141592653589793E1) = true +> (~0.2718281828459045E1, 0.3141592653589793E1) = false +== (~0.2718281828459045E1, 0.3141592653589793E1) = false +?= (~0.2718281828459045E1, 0.3141592653589793E1) = false +< (~0.2718281828459045E1, 0.2718281828459045E1) = true +> (~0.2718281828459045E1, 0.2718281828459045E1) = false +== (~0.2718281828459045E1, 0.2718281828459045E1) = false +?= (~0.2718281828459045E1, 0.2718281828459045E1) = false +< (~0.2718281828459045E1, 0.123E1) = true +> (~0.2718281828459045E1, 0.123E1) = false +== (~0.2718281828459045E1, 0.123E1) = false +?= (~0.2718281828459045E1, 0.123E1) = false +< (~0.2718281828459045E1, 0.123) = true +> (~0.2718281828459045E1, 0.123) = false +== (~0.2718281828459045E1, 0.123) = false +?= (~0.2718281828459045E1, 0.123) = false +< (~0.2718281828459045E1, 0.123E~2) = true +> (~0.2718281828459045E1, 0.123E~2) = false +== (~0.2718281828459045E1, 0.123E~2) = false +?= (~0.2718281828459045E1, 0.123E~2) = false +< (~0.2718281828459045E1, 0.22250738585072014E~307) = true +> (~0.2718281828459045E1, 0.22250738585072014E~307) = false +== (~0.2718281828459045E1, 0.22250738585072014E~307) = false +?= (~0.2718281828459045E1, 0.22250738585072014E~307) = false +< (~0.2718281828459045E1, 0.11125369292536007E~307) = true +> (~0.2718281828459045E1, 0.11125369292536007E~307) = false +== (~0.2718281828459045E1, 0.11125369292536007E~307) = false +?= (~0.2718281828459045E1, 0.11125369292536007E~307) = false +< (~0.2718281828459045E1, 0.5E~323) = true +> (~0.2718281828459045E1, 0.5E~323) = false +== (~0.2718281828459045E1, 0.5E~323) = false +?= (~0.2718281828459045E1, 0.5E~323) = false +< (~0.2718281828459045E1, 0.0) = true +> (~0.2718281828459045E1, 0.0) = false +== (~0.2718281828459045E1, 0.0) = false +?= (~0.2718281828459045E1, 0.0) = false +< (~0.2718281828459045E1, ~0.17976931348623157E309) = false +> (~0.2718281828459045E1, ~0.17976931348623157E309) = true +== (~0.2718281828459045E1, ~0.17976931348623157E309) = false +?= (~0.2718281828459045E1, ~0.17976931348623157E309) = false +< (~0.2718281828459045E1, ~0.8988465674311579E308) = false +> (~0.2718281828459045E1, ~0.8988465674311579E308) = true +== (~0.2718281828459045E1, ~0.8988465674311579E308) = false +?= (~0.2718281828459045E1, ~0.8988465674311579E308) = false +< (~0.2718281828459045E1, ~0.123E4) = false +> (~0.2718281828459045E1, ~0.123E4) = true +== (~0.2718281828459045E1, ~0.123E4) = false +?= (~0.2718281828459045E1, ~0.123E4) = false +< (~0.2718281828459045E1, ~0.123E2) = false +> (~0.2718281828459045E1, ~0.123E2) = true +== (~0.2718281828459045E1, ~0.123E2) = false +?= (~0.2718281828459045E1, ~0.123E2) = false +< (~0.2718281828459045E1, ~0.3141592653589793E1) = false +> (~0.2718281828459045E1, ~0.3141592653589793E1) = true +== (~0.2718281828459045E1, ~0.3141592653589793E1) = false +?= (~0.2718281828459045E1, ~0.3141592653589793E1) = false +< (~0.2718281828459045E1, ~0.2718281828459045E1) = false +> (~0.2718281828459045E1, ~0.2718281828459045E1) = false +== (~0.2718281828459045E1, ~0.2718281828459045E1) = true +?= (~0.2718281828459045E1, ~0.2718281828459045E1) = true +< (~0.2718281828459045E1, ~0.123E1) = true +> (~0.2718281828459045E1, ~0.123E1) = false +== (~0.2718281828459045E1, ~0.123E1) = false +?= (~0.2718281828459045E1, ~0.123E1) = false +< (~0.2718281828459045E1, ~0.123) = true +> (~0.2718281828459045E1, ~0.123) = false +== (~0.2718281828459045E1, ~0.123) = false +?= (~0.2718281828459045E1, ~0.123) = false +< (~0.2718281828459045E1, ~0.123E~2) = true +> (~0.2718281828459045E1, ~0.123E~2) = false +== (~0.2718281828459045E1, ~0.123E~2) = false +?= (~0.2718281828459045E1, ~0.123E~2) = false +< (~0.2718281828459045E1, ~0.22250738585072014E~307) = true +> (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +== (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +?= (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +< (~0.2718281828459045E1, ~0.11125369292536007E~307) = true +> (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +== (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +?= (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +< (~0.2718281828459045E1, ~0.5E~323) = true +> (~0.2718281828459045E1, ~0.5E~323) = false +== (~0.2718281828459045E1, ~0.5E~323) = false +?= (~0.2718281828459045E1, ~0.5E~323) = false +< (~0.2718281828459045E1, ~0.0) = true +> (~0.2718281828459045E1, ~0.0) = false +== (~0.2718281828459045E1, ~0.0) = false +?= (~0.2718281828459045E1, ~0.0) = false +< (~0.123E1, 0.17976931348623157E309) = true +> (~0.123E1, 0.17976931348623157E309) = false +== (~0.123E1, 0.17976931348623157E309) = false +?= (~0.123E1, 0.17976931348623157E309) = false +< (~0.123E1, 0.8988465674311579E308) = true +> (~0.123E1, 0.8988465674311579E308) = false +== (~0.123E1, 0.8988465674311579E308) = false +?= (~0.123E1, 0.8988465674311579E308) = false +< (~0.123E1, 0.123E4) = true +> (~0.123E1, 0.123E4) = false +== (~0.123E1, 0.123E4) = false +?= (~0.123E1, 0.123E4) = false +< (~0.123E1, 0.123E2) = true +> (~0.123E1, 0.123E2) = false +== (~0.123E1, 0.123E2) = false +?= (~0.123E1, 0.123E2) = false +< (~0.123E1, 0.3141592653589793E1) = true +> (~0.123E1, 0.3141592653589793E1) = false +== (~0.123E1, 0.3141592653589793E1) = false +?= (~0.123E1, 0.3141592653589793E1) = false +< (~0.123E1, 0.2718281828459045E1) = true +> (~0.123E1, 0.2718281828459045E1) = false +== (~0.123E1, 0.2718281828459045E1) = false +?= (~0.123E1, 0.2718281828459045E1) = false +< (~0.123E1, 0.123E1) = true +> (~0.123E1, 0.123E1) = false +== (~0.123E1, 0.123E1) = false +?= (~0.123E1, 0.123E1) = false +< (~0.123E1, 0.123) = true +> (~0.123E1, 0.123) = false +== (~0.123E1, 0.123) = false +?= (~0.123E1, 0.123) = false +< (~0.123E1, 0.123E~2) = true +> (~0.123E1, 0.123E~2) = false +== (~0.123E1, 0.123E~2) = false +?= (~0.123E1, 0.123E~2) = false +< (~0.123E1, 0.22250738585072014E~307) = true +> (~0.123E1, 0.22250738585072014E~307) = false +== (~0.123E1, 0.22250738585072014E~307) = false +?= (~0.123E1, 0.22250738585072014E~307) = false +< (~0.123E1, 0.11125369292536007E~307) = true +> (~0.123E1, 0.11125369292536007E~307) = false +== (~0.123E1, 0.11125369292536007E~307) = false +?= (~0.123E1, 0.11125369292536007E~307) = false +< (~0.123E1, 0.5E~323) = true +> (~0.123E1, 0.5E~323) = false +== (~0.123E1, 0.5E~323) = false +?= (~0.123E1, 0.5E~323) = false +< (~0.123E1, 0.0) = true +> (~0.123E1, 0.0) = false +== (~0.123E1, 0.0) = false +?= (~0.123E1, 0.0) = false +< (~0.123E1, ~0.17976931348623157E309) = false +> (~0.123E1, ~0.17976931348623157E309) = true +== (~0.123E1, ~0.17976931348623157E309) = false +?= (~0.123E1, ~0.17976931348623157E309) = false +< (~0.123E1, ~0.8988465674311579E308) = false +> (~0.123E1, ~0.8988465674311579E308) = true +== (~0.123E1, ~0.8988465674311579E308) = false +?= (~0.123E1, ~0.8988465674311579E308) = false +< (~0.123E1, ~0.123E4) = false +> (~0.123E1, ~0.123E4) = true +== (~0.123E1, ~0.123E4) = false +?= (~0.123E1, ~0.123E4) = false +< (~0.123E1, ~0.123E2) = false +> (~0.123E1, ~0.123E2) = true +== (~0.123E1, ~0.123E2) = false +?= (~0.123E1, ~0.123E2) = false +< (~0.123E1, ~0.3141592653589793E1) = false +> (~0.123E1, ~0.3141592653589793E1) = true +== (~0.123E1, ~0.3141592653589793E1) = false +?= (~0.123E1, ~0.3141592653589793E1) = false +< (~0.123E1, ~0.2718281828459045E1) = false +> (~0.123E1, ~0.2718281828459045E1) = true +== (~0.123E1, ~0.2718281828459045E1) = false +?= (~0.123E1, ~0.2718281828459045E1) = false +< (~0.123E1, ~0.123E1) = false +> (~0.123E1, ~0.123E1) = false +== (~0.123E1, ~0.123E1) = true +?= (~0.123E1, ~0.123E1) = true +< (~0.123E1, ~0.123) = true +> (~0.123E1, ~0.123) = false +== (~0.123E1, ~0.123) = false +?= (~0.123E1, ~0.123) = false +< (~0.123E1, ~0.123E~2) = true +> (~0.123E1, ~0.123E~2) = false +== (~0.123E1, ~0.123E~2) = false +?= (~0.123E1, ~0.123E~2) = false +< (~0.123E1, ~0.22250738585072014E~307) = true +> (~0.123E1, ~0.22250738585072014E~307) = false +== (~0.123E1, ~0.22250738585072014E~307) = false +?= (~0.123E1, ~0.22250738585072014E~307) = false +< (~0.123E1, ~0.11125369292536007E~307) = true +> (~0.123E1, ~0.11125369292536007E~307) = false +== (~0.123E1, ~0.11125369292536007E~307) = false +?= (~0.123E1, ~0.11125369292536007E~307) = false +< (~0.123E1, ~0.5E~323) = true +> (~0.123E1, ~0.5E~323) = false +== (~0.123E1, ~0.5E~323) = false +?= (~0.123E1, ~0.5E~323) = false +< (~0.123E1, ~0.0) = true +> (~0.123E1, ~0.0) = false +== (~0.123E1, ~0.0) = false +?= (~0.123E1, ~0.0) = false +< (~0.123, 0.17976931348623157E309) = true +> (~0.123, 0.17976931348623157E309) = false +== (~0.123, 0.17976931348623157E309) = false +?= (~0.123, 0.17976931348623157E309) = false +< (~0.123, 0.8988465674311579E308) = true +> (~0.123, 0.8988465674311579E308) = false +== (~0.123, 0.8988465674311579E308) = false +?= (~0.123, 0.8988465674311579E308) = false +< (~0.123, 0.123E4) = true +> (~0.123, 0.123E4) = false +== (~0.123, 0.123E4) = false +?= (~0.123, 0.123E4) = false +< (~0.123, 0.123E2) = true +> (~0.123, 0.123E2) = false +== (~0.123, 0.123E2) = false +?= (~0.123, 0.123E2) = false +< (~0.123, 0.3141592653589793E1) = true +> (~0.123, 0.3141592653589793E1) = false +== (~0.123, 0.3141592653589793E1) = false +?= (~0.123, 0.3141592653589793E1) = false +< (~0.123, 0.2718281828459045E1) = true +> (~0.123, 0.2718281828459045E1) = false +== (~0.123, 0.2718281828459045E1) = false +?= (~0.123, 0.2718281828459045E1) = false +< (~0.123, 0.123E1) = true +> (~0.123, 0.123E1) = false +== (~0.123, 0.123E1) = false +?= (~0.123, 0.123E1) = false +< (~0.123, 0.123) = true +> (~0.123, 0.123) = false +== (~0.123, 0.123) = false +?= (~0.123, 0.123) = false +< (~0.123, 0.123E~2) = true +> (~0.123, 0.123E~2) = false +== (~0.123, 0.123E~2) = false +?= (~0.123, 0.123E~2) = false +< (~0.123, 0.22250738585072014E~307) = true +> (~0.123, 0.22250738585072014E~307) = false +== (~0.123, 0.22250738585072014E~307) = false +?= (~0.123, 0.22250738585072014E~307) = false +< (~0.123, 0.11125369292536007E~307) = true +> (~0.123, 0.11125369292536007E~307) = false +== (~0.123, 0.11125369292536007E~307) = false +?= (~0.123, 0.11125369292536007E~307) = false +< (~0.123, 0.5E~323) = true +> (~0.123, 0.5E~323) = false +== (~0.123, 0.5E~323) = false +?= (~0.123, 0.5E~323) = false +< (~0.123, 0.0) = true +> (~0.123, 0.0) = false +== (~0.123, 0.0) = false +?= (~0.123, 0.0) = false +< (~0.123, ~0.17976931348623157E309) = false +> (~0.123, ~0.17976931348623157E309) = true +== (~0.123, ~0.17976931348623157E309) = false +?= (~0.123, ~0.17976931348623157E309) = false +< (~0.123, ~0.8988465674311579E308) = false +> (~0.123, ~0.8988465674311579E308) = true +== (~0.123, ~0.8988465674311579E308) = false +?= (~0.123, ~0.8988465674311579E308) = false +< (~0.123, ~0.123E4) = false +> (~0.123, ~0.123E4) = true +== (~0.123, ~0.123E4) = false +?= (~0.123, ~0.123E4) = false +< (~0.123, ~0.123E2) = false +> (~0.123, ~0.123E2) = true +== (~0.123, ~0.123E2) = false +?= (~0.123, ~0.123E2) = false +< (~0.123, ~0.3141592653589793E1) = false +> (~0.123, ~0.3141592653589793E1) = true +== (~0.123, ~0.3141592653589793E1) = false +?= (~0.123, ~0.3141592653589793E1) = false +< (~0.123, ~0.2718281828459045E1) = false +> (~0.123, ~0.2718281828459045E1) = true +== (~0.123, ~0.2718281828459045E1) = false +?= (~0.123, ~0.2718281828459045E1) = false +< (~0.123, ~0.123E1) = false +> (~0.123, ~0.123E1) = true +== (~0.123, ~0.123E1) = false +?= (~0.123, ~0.123E1) = false +< (~0.123, ~0.123) = false +> (~0.123, ~0.123) = false +== (~0.123, ~0.123) = true +?= (~0.123, ~0.123) = true +< (~0.123, ~0.123E~2) = true +> (~0.123, ~0.123E~2) = false +== (~0.123, ~0.123E~2) = false +?= (~0.123, ~0.123E~2) = false +< (~0.123, ~0.22250738585072014E~307) = true +> (~0.123, ~0.22250738585072014E~307) = false +== (~0.123, ~0.22250738585072014E~307) = false +?= (~0.123, ~0.22250738585072014E~307) = false +< (~0.123, ~0.11125369292536007E~307) = true +> (~0.123, ~0.11125369292536007E~307) = false +== (~0.123, ~0.11125369292536007E~307) = false +?= (~0.123, ~0.11125369292536007E~307) = false +< (~0.123, ~0.5E~323) = true +> (~0.123, ~0.5E~323) = false +== (~0.123, ~0.5E~323) = false +?= (~0.123, ~0.5E~323) = false +< (~0.123, ~0.0) = true +> (~0.123, ~0.0) = false +== (~0.123, ~0.0) = false +?= (~0.123, ~0.0) = false +< (~0.123E~2, 0.17976931348623157E309) = true +> (~0.123E~2, 0.17976931348623157E309) = false +== (~0.123E~2, 0.17976931348623157E309) = false +?= (~0.123E~2, 0.17976931348623157E309) = false +< (~0.123E~2, 0.8988465674311579E308) = true +> (~0.123E~2, 0.8988465674311579E308) = false +== (~0.123E~2, 0.8988465674311579E308) = false +?= (~0.123E~2, 0.8988465674311579E308) = false +< (~0.123E~2, 0.123E4) = true +> (~0.123E~2, 0.123E4) = false +== (~0.123E~2, 0.123E4) = false +?= (~0.123E~2, 0.123E4) = false +< (~0.123E~2, 0.123E2) = true +> (~0.123E~2, 0.123E2) = false +== (~0.123E~2, 0.123E2) = false +?= (~0.123E~2, 0.123E2) = false +< (~0.123E~2, 0.3141592653589793E1) = true +> (~0.123E~2, 0.3141592653589793E1) = false +== (~0.123E~2, 0.3141592653589793E1) = false +?= (~0.123E~2, 0.3141592653589793E1) = false +< (~0.123E~2, 0.2718281828459045E1) = true +> (~0.123E~2, 0.2718281828459045E1) = false +== (~0.123E~2, 0.2718281828459045E1) = false +?= (~0.123E~2, 0.2718281828459045E1) = false +< (~0.123E~2, 0.123E1) = true +> (~0.123E~2, 0.123E1) = false +== (~0.123E~2, 0.123E1) = false +?= (~0.123E~2, 0.123E1) = false +< (~0.123E~2, 0.123) = true +> (~0.123E~2, 0.123) = false +== (~0.123E~2, 0.123) = false +?= (~0.123E~2, 0.123) = false +< (~0.123E~2, 0.123E~2) = true +> (~0.123E~2, 0.123E~2) = false +== (~0.123E~2, 0.123E~2) = false +?= (~0.123E~2, 0.123E~2) = false +< (~0.123E~2, 0.22250738585072014E~307) = true +> (~0.123E~2, 0.22250738585072014E~307) = false +== (~0.123E~2, 0.22250738585072014E~307) = false +?= (~0.123E~2, 0.22250738585072014E~307) = false +< (~0.123E~2, 0.11125369292536007E~307) = true +> (~0.123E~2, 0.11125369292536007E~307) = false +== (~0.123E~2, 0.11125369292536007E~307) = false +?= (~0.123E~2, 0.11125369292536007E~307) = false +< (~0.123E~2, 0.5E~323) = true +> (~0.123E~2, 0.5E~323) = false +== (~0.123E~2, 0.5E~323) = false +?= (~0.123E~2, 0.5E~323) = false +< (~0.123E~2, 0.0) = true +> (~0.123E~2, 0.0) = false +== (~0.123E~2, 0.0) = false +?= (~0.123E~2, 0.0) = false +< (~0.123E~2, ~0.17976931348623157E309) = false +> (~0.123E~2, ~0.17976931348623157E309) = true +== (~0.123E~2, ~0.17976931348623157E309) = false +?= (~0.123E~2, ~0.17976931348623157E309) = false +< (~0.123E~2, ~0.8988465674311579E308) = false +> (~0.123E~2, ~0.8988465674311579E308) = true +== (~0.123E~2, ~0.8988465674311579E308) = false +?= (~0.123E~2, ~0.8988465674311579E308) = false +< (~0.123E~2, ~0.123E4) = false +> (~0.123E~2, ~0.123E4) = true +== (~0.123E~2, ~0.123E4) = false +?= (~0.123E~2, ~0.123E4) = false +< (~0.123E~2, ~0.123E2) = false +> (~0.123E~2, ~0.123E2) = true +== (~0.123E~2, ~0.123E2) = false +?= (~0.123E~2, ~0.123E2) = false +< (~0.123E~2, ~0.3141592653589793E1) = false +> (~0.123E~2, ~0.3141592653589793E1) = true +== (~0.123E~2, ~0.3141592653589793E1) = false +?= (~0.123E~2, ~0.3141592653589793E1) = false +< (~0.123E~2, ~0.2718281828459045E1) = false +> (~0.123E~2, ~0.2718281828459045E1) = true +== (~0.123E~2, ~0.2718281828459045E1) = false +?= (~0.123E~2, ~0.2718281828459045E1) = false +< (~0.123E~2, ~0.123E1) = false +> (~0.123E~2, ~0.123E1) = true +== (~0.123E~2, ~0.123E1) = false +?= (~0.123E~2, ~0.123E1) = false +< (~0.123E~2, ~0.123) = false +> (~0.123E~2, ~0.123) = true +== (~0.123E~2, ~0.123) = false +?= (~0.123E~2, ~0.123) = false +< (~0.123E~2, ~0.123E~2) = false +> (~0.123E~2, ~0.123E~2) = false +== (~0.123E~2, ~0.123E~2) = true +?= (~0.123E~2, ~0.123E~2) = true +< (~0.123E~2, ~0.22250738585072014E~307) = true +> (~0.123E~2, ~0.22250738585072014E~307) = false +== (~0.123E~2, ~0.22250738585072014E~307) = false +?= (~0.123E~2, ~0.22250738585072014E~307) = false +< (~0.123E~2, ~0.11125369292536007E~307) = true +> (~0.123E~2, ~0.11125369292536007E~307) = false +== (~0.123E~2, ~0.11125369292536007E~307) = false +?= (~0.123E~2, ~0.11125369292536007E~307) = false +< (~0.123E~2, ~0.5E~323) = true +> (~0.123E~2, ~0.5E~323) = false +== (~0.123E~2, ~0.5E~323) = false +?= (~0.123E~2, ~0.5E~323) = false +< (~0.123E~2, ~0.0) = true +> (~0.123E~2, ~0.0) = false +== (~0.123E~2, ~0.0) = false +?= (~0.123E~2, ~0.0) = false +< (~0.22250738585072014E~307, 0.17976931348623157E309) = true +> (~0.22250738585072014E~307, 0.17976931348623157E309) = false +== (~0.22250738585072014E~307, 0.17976931348623157E309) = false +?= (~0.22250738585072014E~307, 0.17976931348623157E309) = false +< (~0.22250738585072014E~307, 0.8988465674311579E308) = true +> (~0.22250738585072014E~307, 0.8988465674311579E308) = false +== (~0.22250738585072014E~307, 0.8988465674311579E308) = false +?= (~0.22250738585072014E~307, 0.8988465674311579E308) = false +< (~0.22250738585072014E~307, 0.123E4) = true +> (~0.22250738585072014E~307, 0.123E4) = false +== (~0.22250738585072014E~307, 0.123E4) = false +?= (~0.22250738585072014E~307, 0.123E4) = false +< (~0.22250738585072014E~307, 0.123E2) = true +> (~0.22250738585072014E~307, 0.123E2) = false +== (~0.22250738585072014E~307, 0.123E2) = false +?= (~0.22250738585072014E~307, 0.123E2) = false +< (~0.22250738585072014E~307, 0.3141592653589793E1) = true +> (~0.22250738585072014E~307, 0.3141592653589793E1) = false +== (~0.22250738585072014E~307, 0.3141592653589793E1) = false +?= (~0.22250738585072014E~307, 0.3141592653589793E1) = false +< (~0.22250738585072014E~307, 0.2718281828459045E1) = true +> (~0.22250738585072014E~307, 0.2718281828459045E1) = false +== (~0.22250738585072014E~307, 0.2718281828459045E1) = false +?= (~0.22250738585072014E~307, 0.2718281828459045E1) = false +< (~0.22250738585072014E~307, 0.123E1) = true +> (~0.22250738585072014E~307, 0.123E1) = false +== (~0.22250738585072014E~307, 0.123E1) = false +?= (~0.22250738585072014E~307, 0.123E1) = false +< (~0.22250738585072014E~307, 0.123) = true +> (~0.22250738585072014E~307, 0.123) = false +== (~0.22250738585072014E~307, 0.123) = false +?= (~0.22250738585072014E~307, 0.123) = false +< (~0.22250738585072014E~307, 0.123E~2) = true +> (~0.22250738585072014E~307, 0.123E~2) = false +== (~0.22250738585072014E~307, 0.123E~2) = false +?= (~0.22250738585072014E~307, 0.123E~2) = false +< (~0.22250738585072014E~307, 0.22250738585072014E~307) = true +> (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +== (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +?= (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +< (~0.22250738585072014E~307, 0.11125369292536007E~307) = true +> (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +== (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +?= (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +< (~0.22250738585072014E~307, 0.5E~323) = true +> (~0.22250738585072014E~307, 0.5E~323) = false +== (~0.22250738585072014E~307, 0.5E~323) = false +?= (~0.22250738585072014E~307, 0.5E~323) = false +< (~0.22250738585072014E~307, 0.0) = true +> (~0.22250738585072014E~307, 0.0) = false +== (~0.22250738585072014E~307, 0.0) = false +?= (~0.22250738585072014E~307, 0.0) = false +< (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +> (~0.22250738585072014E~307, ~0.17976931348623157E309) = true +== (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +?= (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +< (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +> (~0.22250738585072014E~307, ~0.8988465674311579E308) = true +== (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +?= (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +< (~0.22250738585072014E~307, ~0.123E4) = false +> (~0.22250738585072014E~307, ~0.123E4) = true +== (~0.22250738585072014E~307, ~0.123E4) = false +?= (~0.22250738585072014E~307, ~0.123E4) = false +< (~0.22250738585072014E~307, ~0.123E2) = false +> (~0.22250738585072014E~307, ~0.123E2) = true +== (~0.22250738585072014E~307, ~0.123E2) = false +?= (~0.22250738585072014E~307, ~0.123E2) = false +< (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +> (~0.22250738585072014E~307, ~0.3141592653589793E1) = true +== (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +?= (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +< (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +> (~0.22250738585072014E~307, ~0.2718281828459045E1) = true +== (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +?= (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +< (~0.22250738585072014E~307, ~0.123E1) = false +> (~0.22250738585072014E~307, ~0.123E1) = true +== (~0.22250738585072014E~307, ~0.123E1) = false +?= (~0.22250738585072014E~307, ~0.123E1) = false +< (~0.22250738585072014E~307, ~0.123) = false +> (~0.22250738585072014E~307, ~0.123) = true +== (~0.22250738585072014E~307, ~0.123) = false +?= (~0.22250738585072014E~307, ~0.123) = false +< (~0.22250738585072014E~307, ~0.123E~2) = false +> (~0.22250738585072014E~307, ~0.123E~2) = true +== (~0.22250738585072014E~307, ~0.123E~2) = false +?= (~0.22250738585072014E~307, ~0.123E~2) = false +< (~0.22250738585072014E~307, ~0.22250738585072014E~307) = false +> (~0.22250738585072014E~307, ~0.22250738585072014E~307) = false +== (~0.22250738585072014E~307, ~0.22250738585072014E~307) = true +?= (~0.22250738585072014E~307, ~0.22250738585072014E~307) = true +< (~0.22250738585072014E~307, ~0.11125369292536007E~307) = true +> (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +== (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +?= (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +< (~0.22250738585072014E~307, ~0.5E~323) = true +> (~0.22250738585072014E~307, ~0.5E~323) = false +== (~0.22250738585072014E~307, ~0.5E~323) = false +?= (~0.22250738585072014E~307, ~0.5E~323) = false +< (~0.22250738585072014E~307, ~0.0) = true +> (~0.22250738585072014E~307, ~0.0) = false +== (~0.22250738585072014E~307, ~0.0) = false +?= (~0.22250738585072014E~307, ~0.0) = false +< (~0.11125369292536007E~307, 0.17976931348623157E309) = true +> (~0.11125369292536007E~307, 0.17976931348623157E309) = false +== (~0.11125369292536007E~307, 0.17976931348623157E309) = false +?= (~0.11125369292536007E~307, 0.17976931348623157E309) = false +< (~0.11125369292536007E~307, 0.8988465674311579E308) = true +> (~0.11125369292536007E~307, 0.8988465674311579E308) = false +== (~0.11125369292536007E~307, 0.8988465674311579E308) = false +?= (~0.11125369292536007E~307, 0.8988465674311579E308) = false +< (~0.11125369292536007E~307, 0.123E4) = true +> (~0.11125369292536007E~307, 0.123E4) = false +== (~0.11125369292536007E~307, 0.123E4) = false +?= (~0.11125369292536007E~307, 0.123E4) = false +< (~0.11125369292536007E~307, 0.123E2) = true +> (~0.11125369292536007E~307, 0.123E2) = false +== (~0.11125369292536007E~307, 0.123E2) = false +?= (~0.11125369292536007E~307, 0.123E2) = false +< (~0.11125369292536007E~307, 0.3141592653589793E1) = true +> (~0.11125369292536007E~307, 0.3141592653589793E1) = false +== (~0.11125369292536007E~307, 0.3141592653589793E1) = false +?= (~0.11125369292536007E~307, 0.3141592653589793E1) = false +< (~0.11125369292536007E~307, 0.2718281828459045E1) = true +> (~0.11125369292536007E~307, 0.2718281828459045E1) = false +== (~0.11125369292536007E~307, 0.2718281828459045E1) = false +?= (~0.11125369292536007E~307, 0.2718281828459045E1) = false +< (~0.11125369292536007E~307, 0.123E1) = true +> (~0.11125369292536007E~307, 0.123E1) = false +== (~0.11125369292536007E~307, 0.123E1) = false +?= (~0.11125369292536007E~307, 0.123E1) = false +< (~0.11125369292536007E~307, 0.123) = true +> (~0.11125369292536007E~307, 0.123) = false +== (~0.11125369292536007E~307, 0.123) = false +?= (~0.11125369292536007E~307, 0.123) = false +< (~0.11125369292536007E~307, 0.123E~2) = true +> (~0.11125369292536007E~307, 0.123E~2) = false +== (~0.11125369292536007E~307, 0.123E~2) = false +?= (~0.11125369292536007E~307, 0.123E~2) = false +< (~0.11125369292536007E~307, 0.22250738585072014E~307) = true +> (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +== (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +?= (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +< (~0.11125369292536007E~307, 0.11125369292536007E~307) = true +> (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +== (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +?= (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +< (~0.11125369292536007E~307, 0.5E~323) = true +> (~0.11125369292536007E~307, 0.5E~323) = false +== (~0.11125369292536007E~307, 0.5E~323) = false +?= (~0.11125369292536007E~307, 0.5E~323) = false +< (~0.11125369292536007E~307, 0.0) = true +> (~0.11125369292536007E~307, 0.0) = false +== (~0.11125369292536007E~307, 0.0) = false +?= (~0.11125369292536007E~307, 0.0) = false +< (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +> (~0.11125369292536007E~307, ~0.17976931348623157E309) = true +== (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +?= (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +< (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +> (~0.11125369292536007E~307, ~0.8988465674311579E308) = true +== (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +?= (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +< (~0.11125369292536007E~307, ~0.123E4) = false +> (~0.11125369292536007E~307, ~0.123E4) = true +== (~0.11125369292536007E~307, ~0.123E4) = false +?= (~0.11125369292536007E~307, ~0.123E4) = false +< (~0.11125369292536007E~307, ~0.123E2) = false +> (~0.11125369292536007E~307, ~0.123E2) = true +== (~0.11125369292536007E~307, ~0.123E2) = false +?= (~0.11125369292536007E~307, ~0.123E2) = false +< (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +> (~0.11125369292536007E~307, ~0.3141592653589793E1) = true +== (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +?= (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +< (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +> (~0.11125369292536007E~307, ~0.2718281828459045E1) = true +== (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +?= (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +< (~0.11125369292536007E~307, ~0.123E1) = false +> (~0.11125369292536007E~307, ~0.123E1) = true +== (~0.11125369292536007E~307, ~0.123E1) = false +?= (~0.11125369292536007E~307, ~0.123E1) = false +< (~0.11125369292536007E~307, ~0.123) = false +> (~0.11125369292536007E~307, ~0.123) = true +== (~0.11125369292536007E~307, ~0.123) = false +?= (~0.11125369292536007E~307, ~0.123) = false +< (~0.11125369292536007E~307, ~0.123E~2) = false +> (~0.11125369292536007E~307, ~0.123E~2) = true +== (~0.11125369292536007E~307, ~0.123E~2) = false +?= (~0.11125369292536007E~307, ~0.123E~2) = false +< (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +> (~0.11125369292536007E~307, ~0.22250738585072014E~307) = true +== (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +?= (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +< (~0.11125369292536007E~307, ~0.11125369292536007E~307) = false +> (~0.11125369292536007E~307, ~0.11125369292536007E~307) = false +== (~0.11125369292536007E~307, ~0.11125369292536007E~307) = true +?= (~0.11125369292536007E~307, ~0.11125369292536007E~307) = true +< (~0.11125369292536007E~307, ~0.5E~323) = true +> (~0.11125369292536007E~307, ~0.5E~323) = false +== (~0.11125369292536007E~307, ~0.5E~323) = false +?= (~0.11125369292536007E~307, ~0.5E~323) = false +< (~0.11125369292536007E~307, ~0.0) = true +> (~0.11125369292536007E~307, ~0.0) = false +== (~0.11125369292536007E~307, ~0.0) = false +?= (~0.11125369292536007E~307, ~0.0) = false +< (~0.5E~323, 0.17976931348623157E309) = true +> (~0.5E~323, 0.17976931348623157E309) = false +== (~0.5E~323, 0.17976931348623157E309) = false +?= (~0.5E~323, 0.17976931348623157E309) = false +< (~0.5E~323, 0.8988465674311579E308) = true +> (~0.5E~323, 0.8988465674311579E308) = false +== (~0.5E~323, 0.8988465674311579E308) = false +?= (~0.5E~323, 0.8988465674311579E308) = false +< (~0.5E~323, 0.123E4) = true +> (~0.5E~323, 0.123E4) = false +== (~0.5E~323, 0.123E4) = false +?= (~0.5E~323, 0.123E4) = false +< (~0.5E~323, 0.123E2) = true +> (~0.5E~323, 0.123E2) = false +== (~0.5E~323, 0.123E2) = false +?= (~0.5E~323, 0.123E2) = false +< (~0.5E~323, 0.3141592653589793E1) = true +> (~0.5E~323, 0.3141592653589793E1) = false +== (~0.5E~323, 0.3141592653589793E1) = false +?= (~0.5E~323, 0.3141592653589793E1) = false +< (~0.5E~323, 0.2718281828459045E1) = true +> (~0.5E~323, 0.2718281828459045E1) = false +== (~0.5E~323, 0.2718281828459045E1) = false +?= (~0.5E~323, 0.2718281828459045E1) = false +< (~0.5E~323, 0.123E1) = true +> (~0.5E~323, 0.123E1) = false +== (~0.5E~323, 0.123E1) = false +?= (~0.5E~323, 0.123E1) = false +< (~0.5E~323, 0.123) = true +> (~0.5E~323, 0.123) = false +== (~0.5E~323, 0.123) = false +?= (~0.5E~323, 0.123) = false +< (~0.5E~323, 0.123E~2) = true +> (~0.5E~323, 0.123E~2) = false +== (~0.5E~323, 0.123E~2) = false +?= (~0.5E~323, 0.123E~2) = false +< (~0.5E~323, 0.22250738585072014E~307) = true +> (~0.5E~323, 0.22250738585072014E~307) = false +== (~0.5E~323, 0.22250738585072014E~307) = false +?= (~0.5E~323, 0.22250738585072014E~307) = false +< (~0.5E~323, 0.11125369292536007E~307) = true +> (~0.5E~323, 0.11125369292536007E~307) = false +== (~0.5E~323, 0.11125369292536007E~307) = false +?= (~0.5E~323, 0.11125369292536007E~307) = false +< (~0.5E~323, 0.5E~323) = true +> (~0.5E~323, 0.5E~323) = false +== (~0.5E~323, 0.5E~323) = false +?= (~0.5E~323, 0.5E~323) = false +< (~0.5E~323, 0.0) = true +> (~0.5E~323, 0.0) = false +== (~0.5E~323, 0.0) = false +?= (~0.5E~323, 0.0) = false +< (~0.5E~323, ~0.17976931348623157E309) = false +> (~0.5E~323, ~0.17976931348623157E309) = true +== (~0.5E~323, ~0.17976931348623157E309) = false +?= (~0.5E~323, ~0.17976931348623157E309) = false +< (~0.5E~323, ~0.8988465674311579E308) = false +> (~0.5E~323, ~0.8988465674311579E308) = true +== (~0.5E~323, ~0.8988465674311579E308) = false +?= (~0.5E~323, ~0.8988465674311579E308) = false +< (~0.5E~323, ~0.123E4) = false +> (~0.5E~323, ~0.123E4) = true +== (~0.5E~323, ~0.123E4) = false +?= (~0.5E~323, ~0.123E4) = false +< (~0.5E~323, ~0.123E2) = false +> (~0.5E~323, ~0.123E2) = true +== (~0.5E~323, ~0.123E2) = false +?= (~0.5E~323, ~0.123E2) = false +< (~0.5E~323, ~0.3141592653589793E1) = false +> (~0.5E~323, ~0.3141592653589793E1) = true +== (~0.5E~323, ~0.3141592653589793E1) = false +?= (~0.5E~323, ~0.3141592653589793E1) = false +< (~0.5E~323, ~0.2718281828459045E1) = false +> (~0.5E~323, ~0.2718281828459045E1) = true +== (~0.5E~323, ~0.2718281828459045E1) = false +?= (~0.5E~323, ~0.2718281828459045E1) = false +< (~0.5E~323, ~0.123E1) = false +> (~0.5E~323, ~0.123E1) = true +== (~0.5E~323, ~0.123E1) = false +?= (~0.5E~323, ~0.123E1) = false +< (~0.5E~323, ~0.123) = false +> (~0.5E~323, ~0.123) = true +== (~0.5E~323, ~0.123) = false +?= (~0.5E~323, ~0.123) = false +< (~0.5E~323, ~0.123E~2) = false +> (~0.5E~323, ~0.123E~2) = true +== (~0.5E~323, ~0.123E~2) = false +?= (~0.5E~323, ~0.123E~2) = false +< (~0.5E~323, ~0.22250738585072014E~307) = false +> (~0.5E~323, ~0.22250738585072014E~307) = true +== (~0.5E~323, ~0.22250738585072014E~307) = false +?= (~0.5E~323, ~0.22250738585072014E~307) = false +< (~0.5E~323, ~0.11125369292536007E~307) = false +> (~0.5E~323, ~0.11125369292536007E~307) = true +== (~0.5E~323, ~0.11125369292536007E~307) = false +?= (~0.5E~323, ~0.11125369292536007E~307) = false +< (~0.5E~323, ~0.5E~323) = false +> (~0.5E~323, ~0.5E~323) = false +== (~0.5E~323, ~0.5E~323) = true +?= (~0.5E~323, ~0.5E~323) = true +< (~0.5E~323, ~0.0) = true +> (~0.5E~323, ~0.0) = false +== (~0.5E~323, ~0.0) = false +?= (~0.5E~323, ~0.0) = false +< (~0.0, 0.17976931348623157E309) = true +> (~0.0, 0.17976931348623157E309) = false +== (~0.0, 0.17976931348623157E309) = false +?= (~0.0, 0.17976931348623157E309) = false +< (~0.0, 0.8988465674311579E308) = true +> (~0.0, 0.8988465674311579E308) = false +== (~0.0, 0.8988465674311579E308) = false +?= (~0.0, 0.8988465674311579E308) = false +< (~0.0, 0.123E4) = true +> (~0.0, 0.123E4) = false +== (~0.0, 0.123E4) = false +?= (~0.0, 0.123E4) = false +< (~0.0, 0.123E2) = true +> (~0.0, 0.123E2) = false +== (~0.0, 0.123E2) = false +?= (~0.0, 0.123E2) = false +< (~0.0, 0.3141592653589793E1) = true +> (~0.0, 0.3141592653589793E1) = false +== (~0.0, 0.3141592653589793E1) = false +?= (~0.0, 0.3141592653589793E1) = false +< (~0.0, 0.2718281828459045E1) = true +> (~0.0, 0.2718281828459045E1) = false +== (~0.0, 0.2718281828459045E1) = false +?= (~0.0, 0.2718281828459045E1) = false +< (~0.0, 0.123E1) = true +> (~0.0, 0.123E1) = false +== (~0.0, 0.123E1) = false +?= (~0.0, 0.123E1) = false +< (~0.0, 0.123) = true +> (~0.0, 0.123) = false +== (~0.0, 0.123) = false +?= (~0.0, 0.123) = false +< (~0.0, 0.123E~2) = true +> (~0.0, 0.123E~2) = false +== (~0.0, 0.123E~2) = false +?= (~0.0, 0.123E~2) = false +< (~0.0, 0.22250738585072014E~307) = true +> (~0.0, 0.22250738585072014E~307) = false +== (~0.0, 0.22250738585072014E~307) = false +?= (~0.0, 0.22250738585072014E~307) = false +< (~0.0, 0.11125369292536007E~307) = true +> (~0.0, 0.11125369292536007E~307) = false +== (~0.0, 0.11125369292536007E~307) = false +?= (~0.0, 0.11125369292536007E~307) = false +< (~0.0, 0.5E~323) = true +> (~0.0, 0.5E~323) = false +== (~0.0, 0.5E~323) = false +?= (~0.0, 0.5E~323) = false +< (~0.0, 0.0) = false +> (~0.0, 0.0) = false +== (~0.0, 0.0) = true +?= (~0.0, 0.0) = true +< (~0.0, ~0.17976931348623157E309) = false +> (~0.0, ~0.17976931348623157E309) = true +== (~0.0, ~0.17976931348623157E309) = false +?= (~0.0, ~0.17976931348623157E309) = false +< (~0.0, ~0.8988465674311579E308) = false +> (~0.0, ~0.8988465674311579E308) = true +== (~0.0, ~0.8988465674311579E308) = false +?= (~0.0, ~0.8988465674311579E308) = false +< (~0.0, ~0.123E4) = false +> (~0.0, ~0.123E4) = true +== (~0.0, ~0.123E4) = false +?= (~0.0, ~0.123E4) = false +< (~0.0, ~0.123E2) = false +> (~0.0, ~0.123E2) = true +== (~0.0, ~0.123E2) = false +?= (~0.0, ~0.123E2) = false +< (~0.0, ~0.3141592653589793E1) = false +> (~0.0, ~0.3141592653589793E1) = true +== (~0.0, ~0.3141592653589793E1) = false +?= (~0.0, ~0.3141592653589793E1) = false +< (~0.0, ~0.2718281828459045E1) = false +> (~0.0, ~0.2718281828459045E1) = true +== (~0.0, ~0.2718281828459045E1) = false +?= (~0.0, ~0.2718281828459045E1) = false +< (~0.0, ~0.123E1) = false +> (~0.0, ~0.123E1) = true +== (~0.0, ~0.123E1) = false +?= (~0.0, ~0.123E1) = false +< (~0.0, ~0.123) = false +> (~0.0, ~0.123) = true +== (~0.0, ~0.123) = false +?= (~0.0, ~0.123) = false +< (~0.0, ~0.123E~2) = false +> (~0.0, ~0.123E~2) = true +== (~0.0, ~0.123E~2) = false +?= (~0.0, ~0.123E~2) = false +< (~0.0, ~0.22250738585072014E~307) = false +> (~0.0, ~0.22250738585072014E~307) = true +== (~0.0, ~0.22250738585072014E~307) = false +?= (~0.0, ~0.22250738585072014E~307) = false +< (~0.0, ~0.11125369292536007E~307) = false +> (~0.0, ~0.11125369292536007E~307) = true +== (~0.0, ~0.11125369292536007E~307) = false +?= (~0.0, ~0.11125369292536007E~307) = false +< (~0.0, ~0.5E~323) = false +> (~0.0, ~0.5E~323) = true +== (~0.0, ~0.5E~323) = false +?= (~0.0, ~0.5E~323) = false +< (~0.0, ~0.0) = false +> (~0.0, ~0.0) = false +== (~0.0, ~0.0) = true +?= (~0.0, ~0.0) = true + Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL +compare (0.17976931348623157E309, 0.17976931348623157E309) = EQUAL +compareReal (0.17976931348623157E309, 0.17976931348623157E309) = EQUAL +compare (0.17976931348623157E309, 0.8988465674311579E308) = GREATER +compareReal (0.17976931348623157E309, 0.8988465674311579E308) = GREATER +compare (0.17976931348623157E309, 0.123E4) = GREATER +compareReal (0.17976931348623157E309, 0.123E4) = GREATER +compare (0.17976931348623157E309, 0.123E2) = GREATER +compareReal (0.17976931348623157E309, 0.123E2) = GREATER +compare (0.17976931348623157E309, 0.3141592653589793E1) = GREATER +compareReal (0.17976931348623157E309, 0.3141592653589793E1) = GREATER +compare (0.17976931348623157E309, 0.2718281828459045E1) = GREATER +compareReal (0.17976931348623157E309, 0.2718281828459045E1) = GREATER +compare (0.17976931348623157E309, 0.123E1) = GREATER +compareReal (0.17976931348623157E309, 0.123E1) = GREATER +compare (0.17976931348623157E309, 0.123) = GREATER +compareReal (0.17976931348623157E309, 0.123) = GREATER +compare (0.17976931348623157E309, 0.123E~2) = GREATER +compareReal (0.17976931348623157E309, 0.123E~2) = GREATER +compare (0.17976931348623157E309, 0.22250738585072014E~307) = GREATER +compareReal (0.17976931348623157E309, 0.22250738585072014E~307) = GREATER +compare (0.17976931348623157E309, 0.11125369292536007E~307) = GREATER +compareReal (0.17976931348623157E309, 0.11125369292536007E~307) = GREATER +compare (0.17976931348623157E309, 0.5E~323) = GREATER +compareReal (0.17976931348623157E309, 0.5E~323) = GREATER +compare (0.17976931348623157E309, 0.0) = GREATER +compareReal (0.17976931348623157E309, 0.0) = GREATER +compare (0.17976931348623157E309, ~0.17976931348623157E309) = GREATER +compareReal (0.17976931348623157E309, ~0.17976931348623157E309) = GREATER +compare (0.17976931348623157E309, ~0.8988465674311579E308) = GREATER +compareReal (0.17976931348623157E309, ~0.8988465674311579E308) = GREATER +compare (0.17976931348623157E309, ~0.123E4) = GREATER +compareReal (0.17976931348623157E309, ~0.123E4) = GREATER +compare (0.17976931348623157E309, ~0.123E2) = GREATER +compareReal (0.17976931348623157E309, ~0.123E2) = GREATER +compare (0.17976931348623157E309, ~0.3141592653589793E1) = GREATER +compareReal (0.17976931348623157E309, ~0.3141592653589793E1) = GREATER +compare (0.17976931348623157E309, ~0.2718281828459045E1) = GREATER +compareReal (0.17976931348623157E309, ~0.2718281828459045E1) = GREATER +compare (0.17976931348623157E309, ~0.123E1) = GREATER +compareReal (0.17976931348623157E309, ~0.123E1) = GREATER +compare (0.17976931348623157E309, ~0.123) = GREATER +compareReal (0.17976931348623157E309, ~0.123) = GREATER +compare (0.17976931348623157E309, ~0.123E~2) = GREATER +compareReal (0.17976931348623157E309, ~0.123E~2) = GREATER +compare (0.17976931348623157E309, ~0.22250738585072014E~307) = GREATER +compareReal (0.17976931348623157E309, ~0.22250738585072014E~307) = GREATER +compare (0.17976931348623157E309, ~0.11125369292536007E~307) = GREATER +compareReal (0.17976931348623157E309, ~0.11125369292536007E~307) = GREATER +compare (0.17976931348623157E309, ~0.5E~323) = GREATER +compareReal (0.17976931348623157E309, ~0.5E~323) = GREATER +compare (0.17976931348623157E309, ~0.0) = GREATER +compareReal (0.17976931348623157E309, ~0.0) = GREATER +compare (0.8988465674311579E308, 0.17976931348623157E309) = LESS +compareReal (0.8988465674311579E308, 0.17976931348623157E309) = LESS +compare (0.8988465674311579E308, 0.8988465674311579E308) = EQUAL +compareReal (0.8988465674311579E308, 0.8988465674311579E308) = EQUAL +compare (0.8988465674311579E308, 0.123E4) = GREATER +compareReal (0.8988465674311579E308, 0.123E4) = GREATER +compare (0.8988465674311579E308, 0.123E2) = GREATER +compareReal (0.8988465674311579E308, 0.123E2) = GREATER +compare (0.8988465674311579E308, 0.3141592653589793E1) = GREATER +compareReal (0.8988465674311579E308, 0.3141592653589793E1) = GREATER +compare (0.8988465674311579E308, 0.2718281828459045E1) = GREATER +compareReal (0.8988465674311579E308, 0.2718281828459045E1) = GREATER +compare (0.8988465674311579E308, 0.123E1) = GREATER +compareReal (0.8988465674311579E308, 0.123E1) = GREATER +compare (0.8988465674311579E308, 0.123) = GREATER +compareReal (0.8988465674311579E308, 0.123) = GREATER +compare (0.8988465674311579E308, 0.123E~2) = GREATER +compareReal (0.8988465674311579E308, 0.123E~2) = GREATER +compare (0.8988465674311579E308, 0.22250738585072014E~307) = GREATER +compareReal (0.8988465674311579E308, 0.22250738585072014E~307) = GREATER +compare (0.8988465674311579E308, 0.11125369292536007E~307) = GREATER +compareReal (0.8988465674311579E308, 0.11125369292536007E~307) = GREATER +compare (0.8988465674311579E308, 0.5E~323) = GREATER +compareReal (0.8988465674311579E308, 0.5E~323) = GREATER +compare (0.8988465674311579E308, 0.0) = GREATER +compareReal (0.8988465674311579E308, 0.0) = GREATER +compare (0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compareReal (0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compare (0.8988465674311579E308, ~0.8988465674311579E308) = GREATER +compareReal (0.8988465674311579E308, ~0.8988465674311579E308) = GREATER +compare (0.8988465674311579E308, ~0.123E4) = GREATER +compareReal (0.8988465674311579E308, ~0.123E4) = GREATER +compare (0.8988465674311579E308, ~0.123E2) = GREATER +compareReal (0.8988465674311579E308, ~0.123E2) = GREATER +compare (0.8988465674311579E308, ~0.3141592653589793E1) = GREATER +compareReal (0.8988465674311579E308, ~0.3141592653589793E1) = GREATER +compare (0.8988465674311579E308, ~0.2718281828459045E1) = GREATER +compareReal (0.8988465674311579E308, ~0.2718281828459045E1) = GREATER +compare (0.8988465674311579E308, ~0.123E1) = GREATER +compareReal (0.8988465674311579E308, ~0.123E1) = GREATER +compare (0.8988465674311579E308, ~0.123) = GREATER +compareReal (0.8988465674311579E308, ~0.123) = GREATER +compare (0.8988465674311579E308, ~0.123E~2) = GREATER +compareReal (0.8988465674311579E308, ~0.123E~2) = GREATER +compare (0.8988465674311579E308, ~0.22250738585072014E~307) = GREATER +compareReal (0.8988465674311579E308, ~0.22250738585072014E~307) = GREATER +compare (0.8988465674311579E308, ~0.11125369292536007E~307) = GREATER +compareReal (0.8988465674311579E308, ~0.11125369292536007E~307) = GREATER +compare (0.8988465674311579E308, ~0.5E~323) = GREATER +compareReal (0.8988465674311579E308, ~0.5E~323) = GREATER +compare (0.8988465674311579E308, ~0.0) = GREATER +compareReal (0.8988465674311579E308, ~0.0) = GREATER +compare (0.123E4, 0.17976931348623157E309) = LESS +compareReal (0.123E4, 0.17976931348623157E309) = LESS +compare (0.123E4, 0.8988465674311579E308) = LESS +compareReal (0.123E4, 0.8988465674311579E308) = LESS +compare (0.123E4, 0.123E4) = EQUAL +compareReal (0.123E4, 0.123E4) = EQUAL +compare (0.123E4, 0.123E2) = GREATER +compareReal (0.123E4, 0.123E2) = GREATER +compare (0.123E4, 0.3141592653589793E1) = GREATER +compareReal (0.123E4, 0.3141592653589793E1) = GREATER +compare (0.123E4, 0.2718281828459045E1) = GREATER +compareReal (0.123E4, 0.2718281828459045E1) = GREATER +compare (0.123E4, 0.123E1) = GREATER +compareReal (0.123E4, 0.123E1) = GREATER +compare (0.123E4, 0.123) = GREATER +compareReal (0.123E4, 0.123) = GREATER +compare (0.123E4, 0.123E~2) = GREATER +compareReal (0.123E4, 0.123E~2) = GREATER +compare (0.123E4, 0.22250738585072014E~307) = GREATER +compareReal (0.123E4, 0.22250738585072014E~307) = GREATER +compare (0.123E4, 0.11125369292536007E~307) = GREATER +compareReal (0.123E4, 0.11125369292536007E~307) = GREATER +compare (0.123E4, 0.5E~323) = GREATER +compareReal (0.123E4, 0.5E~323) = GREATER +compare (0.123E4, 0.0) = GREATER +compareReal (0.123E4, 0.0) = GREATER +compare (0.123E4, ~0.17976931348623157E309) = GREATER +compareReal (0.123E4, ~0.17976931348623157E309) = GREATER +compare (0.123E4, ~0.8988465674311579E308) = GREATER +compareReal (0.123E4, ~0.8988465674311579E308) = GREATER +compare (0.123E4, ~0.123E4) = GREATER +compareReal (0.123E4, ~0.123E4) = GREATER +compare (0.123E4, ~0.123E2) = GREATER +compareReal (0.123E4, ~0.123E2) = GREATER +compare (0.123E4, ~0.3141592653589793E1) = GREATER +compareReal (0.123E4, ~0.3141592653589793E1) = GREATER +compare (0.123E4, ~0.2718281828459045E1) = GREATER +compareReal (0.123E4, ~0.2718281828459045E1) = GREATER +compare (0.123E4, ~0.123E1) = GREATER +compareReal (0.123E4, ~0.123E1) = GREATER +compare (0.123E4, ~0.123) = GREATER +compareReal (0.123E4, ~0.123) = GREATER +compare (0.123E4, ~0.123E~2) = GREATER +compareReal (0.123E4, ~0.123E~2) = GREATER +compare (0.123E4, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E4, ~0.22250738585072014E~307) = GREATER +compare (0.123E4, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E4, ~0.11125369292536007E~307) = GREATER +compare (0.123E4, ~0.5E~323) = GREATER +compareReal (0.123E4, ~0.5E~323) = GREATER +compare (0.123E4, ~0.0) = GREATER +compareReal (0.123E4, ~0.0) = GREATER +compare (0.123E2, 0.17976931348623157E309) = LESS +compareReal (0.123E2, 0.17976931348623157E309) = LESS +compare (0.123E2, 0.8988465674311579E308) = LESS +compareReal (0.123E2, 0.8988465674311579E308) = LESS +compare (0.123E2, 0.123E4) = LESS +compareReal (0.123E2, 0.123E4) = LESS +compare (0.123E2, 0.123E2) = EQUAL +compareReal (0.123E2, 0.123E2) = EQUAL +compare (0.123E2, 0.3141592653589793E1) = GREATER +compareReal (0.123E2, 0.3141592653589793E1) = GREATER +compare (0.123E2, 0.2718281828459045E1) = GREATER +compareReal (0.123E2, 0.2718281828459045E1) = GREATER +compare (0.123E2, 0.123E1) = GREATER +compareReal (0.123E2, 0.123E1) = GREATER +compare (0.123E2, 0.123) = GREATER +compareReal (0.123E2, 0.123) = GREATER +compare (0.123E2, 0.123E~2) = GREATER +compareReal (0.123E2, 0.123E~2) = GREATER +compare (0.123E2, 0.22250738585072014E~307) = GREATER +compareReal (0.123E2, 0.22250738585072014E~307) = GREATER +compare (0.123E2, 0.11125369292536007E~307) = GREATER +compareReal (0.123E2, 0.11125369292536007E~307) = GREATER +compare (0.123E2, 0.5E~323) = GREATER +compareReal (0.123E2, 0.5E~323) = GREATER +compare (0.123E2, 0.0) = GREATER +compareReal (0.123E2, 0.0) = GREATER +compare (0.123E2, ~0.17976931348623157E309) = GREATER +compareReal (0.123E2, ~0.17976931348623157E309) = GREATER +compare (0.123E2, ~0.8988465674311579E308) = GREATER +compareReal (0.123E2, ~0.8988465674311579E308) = GREATER +compare (0.123E2, ~0.123E4) = GREATER +compareReal (0.123E2, ~0.123E4) = GREATER +compare (0.123E2, ~0.123E2) = GREATER +compareReal (0.123E2, ~0.123E2) = GREATER +compare (0.123E2, ~0.3141592653589793E1) = GREATER +compareReal (0.123E2, ~0.3141592653589793E1) = GREATER +compare (0.123E2, ~0.2718281828459045E1) = GREATER +compareReal (0.123E2, ~0.2718281828459045E1) = GREATER +compare (0.123E2, ~0.123E1) = GREATER +compareReal (0.123E2, ~0.123E1) = GREATER +compare (0.123E2, ~0.123) = GREATER +compareReal (0.123E2, ~0.123) = GREATER +compare (0.123E2, ~0.123E~2) = GREATER +compareReal (0.123E2, ~0.123E~2) = GREATER +compare (0.123E2, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E2, ~0.22250738585072014E~307) = GREATER +compare (0.123E2, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E2, ~0.11125369292536007E~307) = GREATER +compare (0.123E2, ~0.5E~323) = GREATER +compareReal (0.123E2, ~0.5E~323) = GREATER +compare (0.123E2, ~0.0) = GREATER +compareReal (0.123E2, ~0.0) = GREATER +compare (0.3141592653589793E1, 0.17976931348623157E309) = LESS +compareReal (0.3141592653589793E1, 0.17976931348623157E309) = LESS +compare (0.3141592653589793E1, 0.8988465674311579E308) = LESS +compareReal (0.3141592653589793E1, 0.8988465674311579E308) = LESS +compare (0.3141592653589793E1, 0.123E4) = LESS +compareReal (0.3141592653589793E1, 0.123E4) = LESS +compare (0.3141592653589793E1, 0.123E2) = LESS +compareReal (0.3141592653589793E1, 0.123E2) = LESS +compare (0.3141592653589793E1, 0.3141592653589793E1) = EQUAL +compareReal (0.3141592653589793E1, 0.3141592653589793E1) = EQUAL +compare (0.3141592653589793E1, 0.2718281828459045E1) = GREATER +compareReal (0.3141592653589793E1, 0.2718281828459045E1) = GREATER +compare (0.3141592653589793E1, 0.123E1) = GREATER +compareReal (0.3141592653589793E1, 0.123E1) = GREATER +compare (0.3141592653589793E1, 0.123) = GREATER +compareReal (0.3141592653589793E1, 0.123) = GREATER +compare (0.3141592653589793E1, 0.123E~2) = GREATER +compareReal (0.3141592653589793E1, 0.123E~2) = GREATER +compare (0.3141592653589793E1, 0.22250738585072014E~307) = GREATER +compareReal (0.3141592653589793E1, 0.22250738585072014E~307) = GREATER +compare (0.3141592653589793E1, 0.11125369292536007E~307) = GREATER +compareReal (0.3141592653589793E1, 0.11125369292536007E~307) = GREATER +compare (0.3141592653589793E1, 0.5E~323) = GREATER +compareReal (0.3141592653589793E1, 0.5E~323) = GREATER +compare (0.3141592653589793E1, 0.0) = GREATER +compareReal (0.3141592653589793E1, 0.0) = GREATER +compare (0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compareReal (0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compare (0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compareReal (0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compare (0.3141592653589793E1, ~0.123E4) = GREATER +compareReal (0.3141592653589793E1, ~0.123E4) = GREATER +compare (0.3141592653589793E1, ~0.123E2) = GREATER +compareReal (0.3141592653589793E1, ~0.123E2) = GREATER +compare (0.3141592653589793E1, ~0.3141592653589793E1) = GREATER +compareReal (0.3141592653589793E1, ~0.3141592653589793E1) = GREATER +compare (0.3141592653589793E1, ~0.2718281828459045E1) = GREATER +compareReal (0.3141592653589793E1, ~0.2718281828459045E1) = GREATER +compare (0.3141592653589793E1, ~0.123E1) = GREATER +compareReal (0.3141592653589793E1, ~0.123E1) = GREATER +compare (0.3141592653589793E1, ~0.123) = GREATER +compareReal (0.3141592653589793E1, ~0.123) = GREATER +compare (0.3141592653589793E1, ~0.123E~2) = GREATER +compareReal (0.3141592653589793E1, ~0.123E~2) = GREATER +compare (0.3141592653589793E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.3141592653589793E1, ~0.22250738585072014E~307) = GREATER +compare (0.3141592653589793E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.3141592653589793E1, ~0.11125369292536007E~307) = GREATER +compare (0.3141592653589793E1, ~0.5E~323) = GREATER +compareReal (0.3141592653589793E1, ~0.5E~323) = GREATER +compare (0.3141592653589793E1, ~0.0) = GREATER +compareReal (0.3141592653589793E1, ~0.0) = GREATER +compare (0.2718281828459045E1, 0.17976931348623157E309) = LESS +compareReal (0.2718281828459045E1, 0.17976931348623157E309) = LESS +compare (0.2718281828459045E1, 0.8988465674311579E308) = LESS +compareReal (0.2718281828459045E1, 0.8988465674311579E308) = LESS +compare (0.2718281828459045E1, 0.123E4) = LESS +compareReal (0.2718281828459045E1, 0.123E4) = LESS +compare (0.2718281828459045E1, 0.123E2) = LESS +compareReal (0.2718281828459045E1, 0.123E2) = LESS +compare (0.2718281828459045E1, 0.3141592653589793E1) = LESS +compareReal (0.2718281828459045E1, 0.3141592653589793E1) = LESS +compare (0.2718281828459045E1, 0.2718281828459045E1) = EQUAL +compareReal (0.2718281828459045E1, 0.2718281828459045E1) = EQUAL +compare (0.2718281828459045E1, 0.123E1) = GREATER +compareReal (0.2718281828459045E1, 0.123E1) = GREATER +compare (0.2718281828459045E1, 0.123) = GREATER +compareReal (0.2718281828459045E1, 0.123) = GREATER +compare (0.2718281828459045E1, 0.123E~2) = GREATER +compareReal (0.2718281828459045E1, 0.123E~2) = GREATER +compare (0.2718281828459045E1, 0.22250738585072014E~307) = GREATER +compareReal (0.2718281828459045E1, 0.22250738585072014E~307) = GREATER +compare (0.2718281828459045E1, 0.11125369292536007E~307) = GREATER +compareReal (0.2718281828459045E1, 0.11125369292536007E~307) = GREATER +compare (0.2718281828459045E1, 0.5E~323) = GREATER +compareReal (0.2718281828459045E1, 0.5E~323) = GREATER +compare (0.2718281828459045E1, 0.0) = GREATER +compareReal (0.2718281828459045E1, 0.0) = GREATER +compare (0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compareReal (0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compare (0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compareReal (0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compare (0.2718281828459045E1, ~0.123E4) = GREATER +compareReal (0.2718281828459045E1, ~0.123E4) = GREATER +compare (0.2718281828459045E1, ~0.123E2) = GREATER +compareReal (0.2718281828459045E1, ~0.123E2) = GREATER +compare (0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compareReal (0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compare (0.2718281828459045E1, ~0.2718281828459045E1) = GREATER +compareReal (0.2718281828459045E1, ~0.2718281828459045E1) = GREATER +compare (0.2718281828459045E1, ~0.123E1) = GREATER +compareReal (0.2718281828459045E1, ~0.123E1) = GREATER +compare (0.2718281828459045E1, ~0.123) = GREATER +compareReal (0.2718281828459045E1, ~0.123) = GREATER +compare (0.2718281828459045E1, ~0.123E~2) = GREATER +compareReal (0.2718281828459045E1, ~0.123E~2) = GREATER +compare (0.2718281828459045E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.2718281828459045E1, ~0.22250738585072014E~307) = GREATER +compare (0.2718281828459045E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.2718281828459045E1, ~0.11125369292536007E~307) = GREATER +compare (0.2718281828459045E1, ~0.5E~323) = GREATER +compareReal (0.2718281828459045E1, ~0.5E~323) = GREATER +compare (0.2718281828459045E1, ~0.0) = GREATER +compareReal (0.2718281828459045E1, ~0.0) = GREATER +compare (0.123E1, 0.17976931348623157E309) = LESS +compareReal (0.123E1, 0.17976931348623157E309) = LESS +compare (0.123E1, 0.8988465674311579E308) = LESS +compareReal (0.123E1, 0.8988465674311579E308) = LESS +compare (0.123E1, 0.123E4) = LESS +compareReal (0.123E1, 0.123E4) = LESS +compare (0.123E1, 0.123E2) = LESS +compareReal (0.123E1, 0.123E2) = LESS +compare (0.123E1, 0.3141592653589793E1) = LESS +compareReal (0.123E1, 0.3141592653589793E1) = LESS +compare (0.123E1, 0.2718281828459045E1) = LESS +compareReal (0.123E1, 0.2718281828459045E1) = LESS +compare (0.123E1, 0.123E1) = EQUAL +compareReal (0.123E1, 0.123E1) = EQUAL +compare (0.123E1, 0.123) = GREATER +compareReal (0.123E1, 0.123) = GREATER +compare (0.123E1, 0.123E~2) = GREATER +compareReal (0.123E1, 0.123E~2) = GREATER +compare (0.123E1, 0.22250738585072014E~307) = GREATER +compareReal (0.123E1, 0.22250738585072014E~307) = GREATER +compare (0.123E1, 0.11125369292536007E~307) = GREATER +compareReal (0.123E1, 0.11125369292536007E~307) = GREATER +compare (0.123E1, 0.5E~323) = GREATER +compareReal (0.123E1, 0.5E~323) = GREATER +compare (0.123E1, 0.0) = GREATER +compareReal (0.123E1, 0.0) = GREATER +compare (0.123E1, ~0.17976931348623157E309) = GREATER +compareReal (0.123E1, ~0.17976931348623157E309) = GREATER +compare (0.123E1, ~0.8988465674311579E308) = GREATER +compareReal (0.123E1, ~0.8988465674311579E308) = GREATER +compare (0.123E1, ~0.123E4) = GREATER +compareReal (0.123E1, ~0.123E4) = GREATER +compare (0.123E1, ~0.123E2) = GREATER +compareReal (0.123E1, ~0.123E2) = GREATER +compare (0.123E1, ~0.3141592653589793E1) = GREATER +compareReal (0.123E1, ~0.3141592653589793E1) = GREATER +compare (0.123E1, ~0.2718281828459045E1) = GREATER +compareReal (0.123E1, ~0.2718281828459045E1) = GREATER +compare (0.123E1, ~0.123E1) = GREATER +compareReal (0.123E1, ~0.123E1) = GREATER +compare (0.123E1, ~0.123) = GREATER +compareReal (0.123E1, ~0.123) = GREATER +compare (0.123E1, ~0.123E~2) = GREATER +compareReal (0.123E1, ~0.123E~2) = GREATER +compare (0.123E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E1, ~0.22250738585072014E~307) = GREATER +compare (0.123E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E1, ~0.11125369292536007E~307) = GREATER +compare (0.123E1, ~0.5E~323) = GREATER +compareReal (0.123E1, ~0.5E~323) = GREATER +compare (0.123E1, ~0.0) = GREATER +compareReal (0.123E1, ~0.0) = GREATER +compare (0.123, 0.17976931348623157E309) = LESS +compareReal (0.123, 0.17976931348623157E309) = LESS +compare (0.123, 0.8988465674311579E308) = LESS +compareReal (0.123, 0.8988465674311579E308) = LESS +compare (0.123, 0.123E4) = LESS +compareReal (0.123, 0.123E4) = LESS +compare (0.123, 0.123E2) = LESS +compareReal (0.123, 0.123E2) = LESS +compare (0.123, 0.3141592653589793E1) = LESS +compareReal (0.123, 0.3141592653589793E1) = LESS +compare (0.123, 0.2718281828459045E1) = LESS +compareReal (0.123, 0.2718281828459045E1) = LESS +compare (0.123, 0.123E1) = LESS +compareReal (0.123, 0.123E1) = LESS +compare (0.123, 0.123) = EQUAL +compareReal (0.123, 0.123) = EQUAL +compare (0.123, 0.123E~2) = GREATER +compareReal (0.123, 0.123E~2) = GREATER +compare (0.123, 0.22250738585072014E~307) = GREATER +compareReal (0.123, 0.22250738585072014E~307) = GREATER +compare (0.123, 0.11125369292536007E~307) = GREATER +compareReal (0.123, 0.11125369292536007E~307) = GREATER +compare (0.123, 0.5E~323) = GREATER +compareReal (0.123, 0.5E~323) = GREATER +compare (0.123, 0.0) = GREATER +compareReal (0.123, 0.0) = GREATER +compare (0.123, ~0.17976931348623157E309) = GREATER +compareReal (0.123, ~0.17976931348623157E309) = GREATER +compare (0.123, ~0.8988465674311579E308) = GREATER +compareReal (0.123, ~0.8988465674311579E308) = GREATER +compare (0.123, ~0.123E4) = GREATER +compareReal (0.123, ~0.123E4) = GREATER +compare (0.123, ~0.123E2) = GREATER +compareReal (0.123, ~0.123E2) = GREATER +compare (0.123, ~0.3141592653589793E1) = GREATER +compareReal (0.123, ~0.3141592653589793E1) = GREATER +compare (0.123, ~0.2718281828459045E1) = GREATER +compareReal (0.123, ~0.2718281828459045E1) = GREATER +compare (0.123, ~0.123E1) = GREATER +compareReal (0.123, ~0.123E1) = GREATER +compare (0.123, ~0.123) = GREATER +compareReal (0.123, ~0.123) = GREATER +compare (0.123, ~0.123E~2) = GREATER +compareReal (0.123, ~0.123E~2) = GREATER +compare (0.123, ~0.22250738585072014E~307) = GREATER +compareReal (0.123, ~0.22250738585072014E~307) = GREATER +compare (0.123, ~0.11125369292536007E~307) = GREATER +compareReal (0.123, ~0.11125369292536007E~307) = GREATER +compare (0.123, ~0.5E~323) = GREATER +compareReal (0.123, ~0.5E~323) = GREATER +compare (0.123, ~0.0) = GREATER +compareReal (0.123, ~0.0) = GREATER +compare (0.123E~2, 0.17976931348623157E309) = LESS +compareReal (0.123E~2, 0.17976931348623157E309) = LESS +compare (0.123E~2, 0.8988465674311579E308) = LESS +compareReal (0.123E~2, 0.8988465674311579E308) = LESS +compare (0.123E~2, 0.123E4) = LESS +compareReal (0.123E~2, 0.123E4) = LESS +compare (0.123E~2, 0.123E2) = LESS +compareReal (0.123E~2, 0.123E2) = LESS +compare (0.123E~2, 0.3141592653589793E1) = LESS +compareReal (0.123E~2, 0.3141592653589793E1) = LESS +compare (0.123E~2, 0.2718281828459045E1) = LESS +compareReal (0.123E~2, 0.2718281828459045E1) = LESS +compare (0.123E~2, 0.123E1) = LESS +compareReal (0.123E~2, 0.123E1) = LESS +compare (0.123E~2, 0.123) = LESS +compareReal (0.123E~2, 0.123) = LESS +compare (0.123E~2, 0.123E~2) = EQUAL +compareReal (0.123E~2, 0.123E~2) = EQUAL +compare (0.123E~2, 0.22250738585072014E~307) = GREATER +compareReal (0.123E~2, 0.22250738585072014E~307) = GREATER +compare (0.123E~2, 0.11125369292536007E~307) = GREATER +compareReal (0.123E~2, 0.11125369292536007E~307) = GREATER +compare (0.123E~2, 0.5E~323) = GREATER +compareReal (0.123E~2, 0.5E~323) = GREATER +compare (0.123E~2, 0.0) = GREATER +compareReal (0.123E~2, 0.0) = GREATER +compare (0.123E~2, ~0.17976931348623157E309) = GREATER +compareReal (0.123E~2, ~0.17976931348623157E309) = GREATER +compare (0.123E~2, ~0.8988465674311579E308) = GREATER +compareReal (0.123E~2, ~0.8988465674311579E308) = GREATER +compare (0.123E~2, ~0.123E4) = GREATER +compareReal (0.123E~2, ~0.123E4) = GREATER +compare (0.123E~2, ~0.123E2) = GREATER +compareReal (0.123E~2, ~0.123E2) = GREATER +compare (0.123E~2, ~0.3141592653589793E1) = GREATER +compareReal (0.123E~2, ~0.3141592653589793E1) = GREATER +compare (0.123E~2, ~0.2718281828459045E1) = GREATER +compareReal (0.123E~2, ~0.2718281828459045E1) = GREATER +compare (0.123E~2, ~0.123E1) = GREATER +compareReal (0.123E~2, ~0.123E1) = GREATER +compare (0.123E~2, ~0.123) = GREATER +compareReal (0.123E~2, ~0.123) = GREATER +compare (0.123E~2, ~0.123E~2) = GREATER +compareReal (0.123E~2, ~0.123E~2) = GREATER +compare (0.123E~2, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E~2, ~0.22250738585072014E~307) = GREATER +compare (0.123E~2, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E~2, ~0.11125369292536007E~307) = GREATER +compare (0.123E~2, ~0.5E~323) = GREATER +compareReal (0.123E~2, ~0.5E~323) = GREATER +compare (0.123E~2, ~0.0) = GREATER +compareReal (0.123E~2, ~0.0) = GREATER +compare (0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compareReal (0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compare (0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compareReal (0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compare (0.22250738585072014E~307, 0.123E4) = LESS +compareReal (0.22250738585072014E~307, 0.123E4) = LESS +compare (0.22250738585072014E~307, 0.123E2) = LESS +compareReal (0.22250738585072014E~307, 0.123E2) = LESS +compare (0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compareReal (0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compare (0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compareReal (0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compare (0.22250738585072014E~307, 0.123E1) = LESS +compareReal (0.22250738585072014E~307, 0.123E1) = LESS +compare (0.22250738585072014E~307, 0.123) = LESS +compareReal (0.22250738585072014E~307, 0.123) = LESS +compare (0.22250738585072014E~307, 0.123E~2) = LESS +compareReal (0.22250738585072014E~307, 0.123E~2) = LESS +compare (0.22250738585072014E~307, 0.22250738585072014E~307) = EQUAL +compareReal (0.22250738585072014E~307, 0.22250738585072014E~307) = EQUAL +compare (0.22250738585072014E~307, 0.11125369292536007E~307) = GREATER +compareReal (0.22250738585072014E~307, 0.11125369292536007E~307) = GREATER +compare (0.22250738585072014E~307, 0.5E~323) = GREATER +compareReal (0.22250738585072014E~307, 0.5E~323) = GREATER +compare (0.22250738585072014E~307, 0.0) = GREATER +compareReal (0.22250738585072014E~307, 0.0) = GREATER +compare (0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compareReal (0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compare (0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compareReal (0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compare (0.22250738585072014E~307, ~0.123E4) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E4) = GREATER +compare (0.22250738585072014E~307, ~0.123E2) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E2) = GREATER +compare (0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compare (0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compare (0.22250738585072014E~307, ~0.123E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E1) = GREATER +compare (0.22250738585072014E~307, ~0.123) = GREATER +compareReal (0.22250738585072014E~307, ~0.123) = GREATER +compare (0.22250738585072014E~307, ~0.123E~2) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E~2) = GREATER +compare (0.22250738585072014E~307, ~0.22250738585072014E~307) = GREATER +compareReal (0.22250738585072014E~307, ~0.22250738585072014E~307) = GREATER +compare (0.22250738585072014E~307, ~0.11125369292536007E~307) = GREATER +compareReal (0.22250738585072014E~307, ~0.11125369292536007E~307) = GREATER +compare (0.22250738585072014E~307, ~0.5E~323) = GREATER +compareReal (0.22250738585072014E~307, ~0.5E~323) = GREATER +compare (0.22250738585072014E~307, ~0.0) = GREATER +compareReal (0.22250738585072014E~307, ~0.0) = GREATER +compare (0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compareReal (0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compare (0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compareReal (0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compare (0.11125369292536007E~307, 0.123E4) = LESS +compareReal (0.11125369292536007E~307, 0.123E4) = LESS +compare (0.11125369292536007E~307, 0.123E2) = LESS +compareReal (0.11125369292536007E~307, 0.123E2) = LESS +compare (0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compareReal (0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compare (0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compareReal (0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compare (0.11125369292536007E~307, 0.123E1) = LESS +compareReal (0.11125369292536007E~307, 0.123E1) = LESS +compare (0.11125369292536007E~307, 0.123) = LESS +compareReal (0.11125369292536007E~307, 0.123) = LESS +compare (0.11125369292536007E~307, 0.123E~2) = LESS +compareReal (0.11125369292536007E~307, 0.123E~2) = LESS +compare (0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compareReal (0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compare (0.11125369292536007E~307, 0.11125369292536007E~307) = EQUAL +compareReal (0.11125369292536007E~307, 0.11125369292536007E~307) = EQUAL +compare (0.11125369292536007E~307, 0.5E~323) = GREATER +compareReal (0.11125369292536007E~307, 0.5E~323) = GREATER +compare (0.11125369292536007E~307, 0.0) = GREATER +compareReal (0.11125369292536007E~307, 0.0) = GREATER +compare (0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compareReal (0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compare (0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compareReal (0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compare (0.11125369292536007E~307, ~0.123E4) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E4) = GREATER +compare (0.11125369292536007E~307, ~0.123E2) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E2) = GREATER +compare (0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compare (0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compare (0.11125369292536007E~307, ~0.123E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E1) = GREATER +compare (0.11125369292536007E~307, ~0.123) = GREATER +compareReal (0.11125369292536007E~307, ~0.123) = GREATER +compare (0.11125369292536007E~307, ~0.123E~2) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E~2) = GREATER +compare (0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compareReal (0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compare (0.11125369292536007E~307, ~0.11125369292536007E~307) = GREATER +compareReal (0.11125369292536007E~307, ~0.11125369292536007E~307) = GREATER +compare (0.11125369292536007E~307, ~0.5E~323) = GREATER +compareReal (0.11125369292536007E~307, ~0.5E~323) = GREATER +compare (0.11125369292536007E~307, ~0.0) = GREATER +compareReal (0.11125369292536007E~307, ~0.0) = GREATER +compare (0.5E~323, 0.17976931348623157E309) = LESS +compareReal (0.5E~323, 0.17976931348623157E309) = LESS +compare (0.5E~323, 0.8988465674311579E308) = LESS +compareReal (0.5E~323, 0.8988465674311579E308) = LESS +compare (0.5E~323, 0.123E4) = LESS +compareReal (0.5E~323, 0.123E4) = LESS +compare (0.5E~323, 0.123E2) = LESS +compareReal (0.5E~323, 0.123E2) = LESS +compare (0.5E~323, 0.3141592653589793E1) = LESS +compareReal (0.5E~323, 0.3141592653589793E1) = LESS +compare (0.5E~323, 0.2718281828459045E1) = LESS +compareReal (0.5E~323, 0.2718281828459045E1) = LESS +compare (0.5E~323, 0.123E1) = LESS +compareReal (0.5E~323, 0.123E1) = LESS +compare (0.5E~323, 0.123) = LESS +compareReal (0.5E~323, 0.123) = LESS +compare (0.5E~323, 0.123E~2) = LESS +compareReal (0.5E~323, 0.123E~2) = LESS +compare (0.5E~323, 0.22250738585072014E~307) = LESS +compareReal (0.5E~323, 0.22250738585072014E~307) = LESS +compare (0.5E~323, 0.11125369292536007E~307) = LESS +compareReal (0.5E~323, 0.11125369292536007E~307) = LESS +compare (0.5E~323, 0.5E~323) = EQUAL +compareReal (0.5E~323, 0.5E~323) = EQUAL +compare (0.5E~323, 0.0) = GREATER +compareReal (0.5E~323, 0.0) = GREATER +compare (0.5E~323, ~0.17976931348623157E309) = GREATER +compareReal (0.5E~323, ~0.17976931348623157E309) = GREATER +compare (0.5E~323, ~0.8988465674311579E308) = GREATER +compareReal (0.5E~323, ~0.8988465674311579E308) = GREATER +compare (0.5E~323, ~0.123E4) = GREATER +compareReal (0.5E~323, ~0.123E4) = GREATER +compare (0.5E~323, ~0.123E2) = GREATER +compareReal (0.5E~323, ~0.123E2) = GREATER +compare (0.5E~323, ~0.3141592653589793E1) = GREATER +compareReal (0.5E~323, ~0.3141592653589793E1) = GREATER +compare (0.5E~323, ~0.2718281828459045E1) = GREATER +compareReal (0.5E~323, ~0.2718281828459045E1) = GREATER +compare (0.5E~323, ~0.123E1) = GREATER +compareReal (0.5E~323, ~0.123E1) = GREATER +compare (0.5E~323, ~0.123) = GREATER +compareReal (0.5E~323, ~0.123) = GREATER +compare (0.5E~323, ~0.123E~2) = GREATER +compareReal (0.5E~323, ~0.123E~2) = GREATER +compare (0.5E~323, ~0.22250738585072014E~307) = GREATER +compareReal (0.5E~323, ~0.22250738585072014E~307) = GREATER +compare (0.5E~323, ~0.11125369292536007E~307) = GREATER +compareReal (0.5E~323, ~0.11125369292536007E~307) = GREATER +compare (0.5E~323, ~0.5E~323) = GREATER +compareReal (0.5E~323, ~0.5E~323) = GREATER +compare (0.5E~323, ~0.0) = GREATER +compareReal (0.5E~323, ~0.0) = GREATER +compare (0.0, 0.17976931348623157E309) = LESS +compareReal (0.0, 0.17976931348623157E309) = LESS +compare (0.0, 0.8988465674311579E308) = LESS +compareReal (0.0, 0.8988465674311579E308) = LESS +compare (0.0, 0.123E4) = LESS +compareReal (0.0, 0.123E4) = LESS +compare (0.0, 0.123E2) = LESS +compareReal (0.0, 0.123E2) = LESS +compare (0.0, 0.3141592653589793E1) = LESS +compareReal (0.0, 0.3141592653589793E1) = LESS +compare (0.0, 0.2718281828459045E1) = LESS +compareReal (0.0, 0.2718281828459045E1) = LESS +compare (0.0, 0.123E1) = LESS +compareReal (0.0, 0.123E1) = LESS +compare (0.0, 0.123) = LESS +compareReal (0.0, 0.123) = LESS +compare (0.0, 0.123E~2) = LESS +compareReal (0.0, 0.123E~2) = LESS +compare (0.0, 0.22250738585072014E~307) = LESS +compareReal (0.0, 0.22250738585072014E~307) = LESS +compare (0.0, 0.11125369292536007E~307) = LESS +compareReal (0.0, 0.11125369292536007E~307) = LESS +compare (0.0, 0.5E~323) = LESS +compareReal (0.0, 0.5E~323) = LESS +compare (0.0, 0.0) = EQUAL +compareReal (0.0, 0.0) = EQUAL +compare (0.0, ~0.17976931348623157E309) = GREATER +compareReal (0.0, ~0.17976931348623157E309) = GREATER +compare (0.0, ~0.8988465674311579E308) = GREATER +compareReal (0.0, ~0.8988465674311579E308) = GREATER +compare (0.0, ~0.123E4) = GREATER +compareReal (0.0, ~0.123E4) = GREATER +compare (0.0, ~0.123E2) = GREATER +compareReal (0.0, ~0.123E2) = GREATER +compare (0.0, ~0.3141592653589793E1) = GREATER +compareReal (0.0, ~0.3141592653589793E1) = GREATER +compare (0.0, ~0.2718281828459045E1) = GREATER +compareReal (0.0, ~0.2718281828459045E1) = GREATER +compare (0.0, ~0.123E1) = GREATER +compareReal (0.0, ~0.123E1) = GREATER +compare (0.0, ~0.123) = GREATER +compareReal (0.0, ~0.123) = GREATER +compare (0.0, ~0.123E~2) = GREATER +compareReal (0.0, ~0.123E~2) = GREATER +compare (0.0, ~0.22250738585072014E~307) = GREATER +compareReal (0.0, ~0.22250738585072014E~307) = GREATER +compare (0.0, ~0.11125369292536007E~307) = GREATER +compareReal (0.0, ~0.11125369292536007E~307) = GREATER +compare (0.0, ~0.5E~323) = GREATER +compareReal (0.0, ~0.5E~323) = GREATER +compare (0.0, ~0.0) = EQUAL +compareReal (0.0, ~0.0) = EQUAL +compare (~0.17976931348623157E309, 0.17976931348623157E309) = LESS +compareReal (~0.17976931348623157E309, 0.17976931348623157E309) = LESS +compare (~0.17976931348623157E309, 0.8988465674311579E308) = LESS +compareReal (~0.17976931348623157E309, 0.8988465674311579E308) = LESS +compare (~0.17976931348623157E309, 0.123E4) = LESS +compareReal (~0.17976931348623157E309, 0.123E4) = LESS +compare (~0.17976931348623157E309, 0.123E2) = LESS +compareReal (~0.17976931348623157E309, 0.123E2) = LESS +compare (~0.17976931348623157E309, 0.3141592653589793E1) = LESS +compareReal (~0.17976931348623157E309, 0.3141592653589793E1) = LESS +compare (~0.17976931348623157E309, 0.2718281828459045E1) = LESS +compareReal (~0.17976931348623157E309, 0.2718281828459045E1) = LESS +compare (~0.17976931348623157E309, 0.123E1) = LESS +compareReal (~0.17976931348623157E309, 0.123E1) = LESS +compare (~0.17976931348623157E309, 0.123) = LESS +compareReal (~0.17976931348623157E309, 0.123) = LESS +compare (~0.17976931348623157E309, 0.123E~2) = LESS +compareReal (~0.17976931348623157E309, 0.123E~2) = LESS +compare (~0.17976931348623157E309, 0.22250738585072014E~307) = LESS +compareReal (~0.17976931348623157E309, 0.22250738585072014E~307) = LESS +compare (~0.17976931348623157E309, 0.11125369292536007E~307) = LESS +compareReal (~0.17976931348623157E309, 0.11125369292536007E~307) = LESS +compare (~0.17976931348623157E309, 0.5E~323) = LESS +compareReal (~0.17976931348623157E309, 0.5E~323) = LESS +compare (~0.17976931348623157E309, 0.0) = LESS +compareReal (~0.17976931348623157E309, 0.0) = LESS +compare (~0.17976931348623157E309, ~0.17976931348623157E309) = EQUAL +compareReal (~0.17976931348623157E309, ~0.17976931348623157E309) = EQUAL +compare (~0.17976931348623157E309, ~0.8988465674311579E308) = LESS +compareReal (~0.17976931348623157E309, ~0.8988465674311579E308) = LESS +compare (~0.17976931348623157E309, ~0.123E4) = LESS +compareReal (~0.17976931348623157E309, ~0.123E4) = LESS +compare (~0.17976931348623157E309, ~0.123E2) = LESS +compareReal (~0.17976931348623157E309, ~0.123E2) = LESS +compare (~0.17976931348623157E309, ~0.3141592653589793E1) = LESS +compareReal (~0.17976931348623157E309, ~0.3141592653589793E1) = LESS +compare (~0.17976931348623157E309, ~0.2718281828459045E1) = LESS +compareReal (~0.17976931348623157E309, ~0.2718281828459045E1) = LESS +compare (~0.17976931348623157E309, ~0.123E1) = LESS +compareReal (~0.17976931348623157E309, ~0.123E1) = LESS +compare (~0.17976931348623157E309, ~0.123) = LESS +compareReal (~0.17976931348623157E309, ~0.123) = LESS +compare (~0.17976931348623157E309, ~0.123E~2) = LESS +compareReal (~0.17976931348623157E309, ~0.123E~2) = LESS +compare (~0.17976931348623157E309, ~0.22250738585072014E~307) = LESS +compareReal (~0.17976931348623157E309, ~0.22250738585072014E~307) = LESS +compare (~0.17976931348623157E309, ~0.11125369292536007E~307) = LESS +compareReal (~0.17976931348623157E309, ~0.11125369292536007E~307) = LESS +compare (~0.17976931348623157E309, ~0.5E~323) = LESS +compareReal (~0.17976931348623157E309, ~0.5E~323) = LESS +compare (~0.17976931348623157E309, ~0.0) = LESS +compareReal (~0.17976931348623157E309, ~0.0) = LESS +compare (~0.8988465674311579E308, 0.17976931348623157E309) = LESS +compareReal (~0.8988465674311579E308, 0.17976931348623157E309) = LESS +compare (~0.8988465674311579E308, 0.8988465674311579E308) = LESS +compareReal (~0.8988465674311579E308, 0.8988465674311579E308) = LESS +compare (~0.8988465674311579E308, 0.123E4) = LESS +compareReal (~0.8988465674311579E308, 0.123E4) = LESS +compare (~0.8988465674311579E308, 0.123E2) = LESS +compareReal (~0.8988465674311579E308, 0.123E2) = LESS +compare (~0.8988465674311579E308, 0.3141592653589793E1) = LESS +compareReal (~0.8988465674311579E308, 0.3141592653589793E1) = LESS +compare (~0.8988465674311579E308, 0.2718281828459045E1) = LESS +compareReal (~0.8988465674311579E308, 0.2718281828459045E1) = LESS +compare (~0.8988465674311579E308, 0.123E1) = LESS +compareReal (~0.8988465674311579E308, 0.123E1) = LESS +compare (~0.8988465674311579E308, 0.123) = LESS +compareReal (~0.8988465674311579E308, 0.123) = LESS +compare (~0.8988465674311579E308, 0.123E~2) = LESS +compareReal (~0.8988465674311579E308, 0.123E~2) = LESS +compare (~0.8988465674311579E308, 0.22250738585072014E~307) = LESS +compareReal (~0.8988465674311579E308, 0.22250738585072014E~307) = LESS +compare (~0.8988465674311579E308, 0.11125369292536007E~307) = LESS +compareReal (~0.8988465674311579E308, 0.11125369292536007E~307) = LESS +compare (~0.8988465674311579E308, 0.5E~323) = LESS +compareReal (~0.8988465674311579E308, 0.5E~323) = LESS +compare (~0.8988465674311579E308, 0.0) = LESS +compareReal (~0.8988465674311579E308, 0.0) = LESS +compare (~0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compareReal (~0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compare (~0.8988465674311579E308, ~0.8988465674311579E308) = EQUAL +compareReal (~0.8988465674311579E308, ~0.8988465674311579E308) = EQUAL +compare (~0.8988465674311579E308, ~0.123E4) = LESS +compareReal (~0.8988465674311579E308, ~0.123E4) = LESS +compare (~0.8988465674311579E308, ~0.123E2) = LESS +compareReal (~0.8988465674311579E308, ~0.123E2) = LESS +compare (~0.8988465674311579E308, ~0.3141592653589793E1) = LESS +compareReal (~0.8988465674311579E308, ~0.3141592653589793E1) = LESS +compare (~0.8988465674311579E308, ~0.2718281828459045E1) = LESS +compareReal (~0.8988465674311579E308, ~0.2718281828459045E1) = LESS +compare (~0.8988465674311579E308, ~0.123E1) = LESS +compareReal (~0.8988465674311579E308, ~0.123E1) = LESS +compare (~0.8988465674311579E308, ~0.123) = LESS +compareReal (~0.8988465674311579E308, ~0.123) = LESS +compare (~0.8988465674311579E308, ~0.123E~2) = LESS +compareReal (~0.8988465674311579E308, ~0.123E~2) = LESS +compare (~0.8988465674311579E308, ~0.22250738585072014E~307) = LESS +compareReal (~0.8988465674311579E308, ~0.22250738585072014E~307) = LESS +compare (~0.8988465674311579E308, ~0.11125369292536007E~307) = LESS +compareReal (~0.8988465674311579E308, ~0.11125369292536007E~307) = LESS +compare (~0.8988465674311579E308, ~0.5E~323) = LESS +compareReal (~0.8988465674311579E308, ~0.5E~323) = LESS +compare (~0.8988465674311579E308, ~0.0) = LESS +compareReal (~0.8988465674311579E308, ~0.0) = LESS +compare (~0.123E4, 0.17976931348623157E309) = LESS +compareReal (~0.123E4, 0.17976931348623157E309) = LESS +compare (~0.123E4, 0.8988465674311579E308) = LESS +compareReal (~0.123E4, 0.8988465674311579E308) = LESS +compare (~0.123E4, 0.123E4) = LESS +compareReal (~0.123E4, 0.123E4) = LESS +compare (~0.123E4, 0.123E2) = LESS +compareReal (~0.123E4, 0.123E2) = LESS +compare (~0.123E4, 0.3141592653589793E1) = LESS +compareReal (~0.123E4, 0.3141592653589793E1) = LESS +compare (~0.123E4, 0.2718281828459045E1) = LESS +compareReal (~0.123E4, 0.2718281828459045E1) = LESS +compare (~0.123E4, 0.123E1) = LESS +compareReal (~0.123E4, 0.123E1) = LESS +compare (~0.123E4, 0.123) = LESS +compareReal (~0.123E4, 0.123) = LESS +compare (~0.123E4, 0.123E~2) = LESS +compareReal (~0.123E4, 0.123E~2) = LESS +compare (~0.123E4, 0.22250738585072014E~307) = LESS +compareReal (~0.123E4, 0.22250738585072014E~307) = LESS +compare (~0.123E4, 0.11125369292536007E~307) = LESS +compareReal (~0.123E4, 0.11125369292536007E~307) = LESS +compare (~0.123E4, 0.5E~323) = LESS +compareReal (~0.123E4, 0.5E~323) = LESS +compare (~0.123E4, 0.0) = LESS +compareReal (~0.123E4, 0.0) = LESS +compare (~0.123E4, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E4, ~0.17976931348623157E309) = GREATER +compare (~0.123E4, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E4, ~0.8988465674311579E308) = GREATER +compare (~0.123E4, ~0.123E4) = EQUAL +compareReal (~0.123E4, ~0.123E4) = EQUAL +compare (~0.123E4, ~0.123E2) = LESS +compareReal (~0.123E4, ~0.123E2) = LESS +compare (~0.123E4, ~0.3141592653589793E1) = LESS +compareReal (~0.123E4, ~0.3141592653589793E1) = LESS +compare (~0.123E4, ~0.2718281828459045E1) = LESS +compareReal (~0.123E4, ~0.2718281828459045E1) = LESS +compare (~0.123E4, ~0.123E1) = LESS +compareReal (~0.123E4, ~0.123E1) = LESS +compare (~0.123E4, ~0.123) = LESS +compareReal (~0.123E4, ~0.123) = LESS +compare (~0.123E4, ~0.123E~2) = LESS +compareReal (~0.123E4, ~0.123E~2) = LESS +compare (~0.123E4, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E4, ~0.22250738585072014E~307) = LESS +compare (~0.123E4, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E4, ~0.11125369292536007E~307) = LESS +compare (~0.123E4, ~0.5E~323) = LESS +compareReal (~0.123E4, ~0.5E~323) = LESS +compare (~0.123E4, ~0.0) = LESS +compareReal (~0.123E4, ~0.0) = LESS +compare (~0.123E2, 0.17976931348623157E309) = LESS +compareReal (~0.123E2, 0.17976931348623157E309) = LESS +compare (~0.123E2, 0.8988465674311579E308) = LESS +compareReal (~0.123E2, 0.8988465674311579E308) = LESS +compare (~0.123E2, 0.123E4) = LESS +compareReal (~0.123E2, 0.123E4) = LESS +compare (~0.123E2, 0.123E2) = LESS +compareReal (~0.123E2, 0.123E2) = LESS +compare (~0.123E2, 0.3141592653589793E1) = LESS +compareReal (~0.123E2, 0.3141592653589793E1) = LESS +compare (~0.123E2, 0.2718281828459045E1) = LESS +compareReal (~0.123E2, 0.2718281828459045E1) = LESS +compare (~0.123E2, 0.123E1) = LESS +compareReal (~0.123E2, 0.123E1) = LESS +compare (~0.123E2, 0.123) = LESS +compareReal (~0.123E2, 0.123) = LESS +compare (~0.123E2, 0.123E~2) = LESS +compareReal (~0.123E2, 0.123E~2) = LESS +compare (~0.123E2, 0.22250738585072014E~307) = LESS +compareReal (~0.123E2, 0.22250738585072014E~307) = LESS +compare (~0.123E2, 0.11125369292536007E~307) = LESS +compareReal (~0.123E2, 0.11125369292536007E~307) = LESS +compare (~0.123E2, 0.5E~323) = LESS +compareReal (~0.123E2, 0.5E~323) = LESS +compare (~0.123E2, 0.0) = LESS +compareReal (~0.123E2, 0.0) = LESS +compare (~0.123E2, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E2, ~0.17976931348623157E309) = GREATER +compare (~0.123E2, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E2, ~0.8988465674311579E308) = GREATER +compare (~0.123E2, ~0.123E4) = GREATER +compareReal (~0.123E2, ~0.123E4) = GREATER +compare (~0.123E2, ~0.123E2) = EQUAL +compareReal (~0.123E2, ~0.123E2) = EQUAL +compare (~0.123E2, ~0.3141592653589793E1) = LESS +compareReal (~0.123E2, ~0.3141592653589793E1) = LESS +compare (~0.123E2, ~0.2718281828459045E1) = LESS +compareReal (~0.123E2, ~0.2718281828459045E1) = LESS +compare (~0.123E2, ~0.123E1) = LESS +compareReal (~0.123E2, ~0.123E1) = LESS +compare (~0.123E2, ~0.123) = LESS +compareReal (~0.123E2, ~0.123) = LESS +compare (~0.123E2, ~0.123E~2) = LESS +compareReal (~0.123E2, ~0.123E~2) = LESS +compare (~0.123E2, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E2, ~0.22250738585072014E~307) = LESS +compare (~0.123E2, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E2, ~0.11125369292536007E~307) = LESS +compare (~0.123E2, ~0.5E~323) = LESS +compareReal (~0.123E2, ~0.5E~323) = LESS +compare (~0.123E2, ~0.0) = LESS +compareReal (~0.123E2, ~0.0) = LESS +compare (~0.3141592653589793E1, 0.17976931348623157E309) = LESS +compareReal (~0.3141592653589793E1, 0.17976931348623157E309) = LESS +compare (~0.3141592653589793E1, 0.8988465674311579E308) = LESS +compareReal (~0.3141592653589793E1, 0.8988465674311579E308) = LESS +compare (~0.3141592653589793E1, 0.123E4) = LESS +compareReal (~0.3141592653589793E1, 0.123E4) = LESS +compare (~0.3141592653589793E1, 0.123E2) = LESS +compareReal (~0.3141592653589793E1, 0.123E2) = LESS +compare (~0.3141592653589793E1, 0.3141592653589793E1) = LESS +compareReal (~0.3141592653589793E1, 0.3141592653589793E1) = LESS +compare (~0.3141592653589793E1, 0.2718281828459045E1) = LESS +compareReal (~0.3141592653589793E1, 0.2718281828459045E1) = LESS +compare (~0.3141592653589793E1, 0.123E1) = LESS +compareReal (~0.3141592653589793E1, 0.123E1) = LESS +compare (~0.3141592653589793E1, 0.123) = LESS +compareReal (~0.3141592653589793E1, 0.123) = LESS +compare (~0.3141592653589793E1, 0.123E~2) = LESS +compareReal (~0.3141592653589793E1, 0.123E~2) = LESS +compare (~0.3141592653589793E1, 0.22250738585072014E~307) = LESS +compareReal (~0.3141592653589793E1, 0.22250738585072014E~307) = LESS +compare (~0.3141592653589793E1, 0.11125369292536007E~307) = LESS +compareReal (~0.3141592653589793E1, 0.11125369292536007E~307) = LESS +compare (~0.3141592653589793E1, 0.5E~323) = LESS +compareReal (~0.3141592653589793E1, 0.5E~323) = LESS +compare (~0.3141592653589793E1, 0.0) = LESS +compareReal (~0.3141592653589793E1, 0.0) = LESS +compare (~0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compare (~0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compare (~0.3141592653589793E1, ~0.123E4) = GREATER +compareReal (~0.3141592653589793E1, ~0.123E4) = GREATER +compare (~0.3141592653589793E1, ~0.123E2) = GREATER +compareReal (~0.3141592653589793E1, ~0.123E2) = GREATER +compare (~0.3141592653589793E1, ~0.3141592653589793E1) = EQUAL +compareReal (~0.3141592653589793E1, ~0.3141592653589793E1) = EQUAL +compare (~0.3141592653589793E1, ~0.2718281828459045E1) = LESS +compareReal (~0.3141592653589793E1, ~0.2718281828459045E1) = LESS +compare (~0.3141592653589793E1, ~0.123E1) = LESS +compareReal (~0.3141592653589793E1, ~0.123E1) = LESS +compare (~0.3141592653589793E1, ~0.123) = LESS +compareReal (~0.3141592653589793E1, ~0.123) = LESS +compare (~0.3141592653589793E1, ~0.123E~2) = LESS +compareReal (~0.3141592653589793E1, ~0.123E~2) = LESS +compare (~0.3141592653589793E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.3141592653589793E1, ~0.22250738585072014E~307) = LESS +compare (~0.3141592653589793E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.3141592653589793E1, ~0.11125369292536007E~307) = LESS +compare (~0.3141592653589793E1, ~0.5E~323) = LESS +compareReal (~0.3141592653589793E1, ~0.5E~323) = LESS +compare (~0.3141592653589793E1, ~0.0) = LESS +compareReal (~0.3141592653589793E1, ~0.0) = LESS +compare (~0.2718281828459045E1, 0.17976931348623157E309) = LESS +compareReal (~0.2718281828459045E1, 0.17976931348623157E309) = LESS +compare (~0.2718281828459045E1, 0.8988465674311579E308) = LESS +compareReal (~0.2718281828459045E1, 0.8988465674311579E308) = LESS +compare (~0.2718281828459045E1, 0.123E4) = LESS +compareReal (~0.2718281828459045E1, 0.123E4) = LESS +compare (~0.2718281828459045E1, 0.123E2) = LESS +compareReal (~0.2718281828459045E1, 0.123E2) = LESS +compare (~0.2718281828459045E1, 0.3141592653589793E1) = LESS +compareReal (~0.2718281828459045E1, 0.3141592653589793E1) = LESS +compare (~0.2718281828459045E1, 0.2718281828459045E1) = LESS +compareReal (~0.2718281828459045E1, 0.2718281828459045E1) = LESS +compare (~0.2718281828459045E1, 0.123E1) = LESS +compareReal (~0.2718281828459045E1, 0.123E1) = LESS +compare (~0.2718281828459045E1, 0.123) = LESS +compareReal (~0.2718281828459045E1, 0.123) = LESS +compare (~0.2718281828459045E1, 0.123E~2) = LESS +compareReal (~0.2718281828459045E1, 0.123E~2) = LESS +compare (~0.2718281828459045E1, 0.22250738585072014E~307) = LESS +compareReal (~0.2718281828459045E1, 0.22250738585072014E~307) = LESS +compare (~0.2718281828459045E1, 0.11125369292536007E~307) = LESS +compareReal (~0.2718281828459045E1, 0.11125369292536007E~307) = LESS +compare (~0.2718281828459045E1, 0.5E~323) = LESS +compareReal (~0.2718281828459045E1, 0.5E~323) = LESS +compare (~0.2718281828459045E1, 0.0) = LESS +compareReal (~0.2718281828459045E1, 0.0) = LESS +compare (~0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compare (~0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compare (~0.2718281828459045E1, ~0.123E4) = GREATER +compareReal (~0.2718281828459045E1, ~0.123E4) = GREATER +compare (~0.2718281828459045E1, ~0.123E2) = GREATER +compareReal (~0.2718281828459045E1, ~0.123E2) = GREATER +compare (~0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compareReal (~0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compare (~0.2718281828459045E1, ~0.2718281828459045E1) = EQUAL +compareReal (~0.2718281828459045E1, ~0.2718281828459045E1) = EQUAL +compare (~0.2718281828459045E1, ~0.123E1) = LESS +compareReal (~0.2718281828459045E1, ~0.123E1) = LESS +compare (~0.2718281828459045E1, ~0.123) = LESS +compareReal (~0.2718281828459045E1, ~0.123) = LESS +compare (~0.2718281828459045E1, ~0.123E~2) = LESS +compareReal (~0.2718281828459045E1, ~0.123E~2) = LESS +compare (~0.2718281828459045E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.2718281828459045E1, ~0.22250738585072014E~307) = LESS +compare (~0.2718281828459045E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.2718281828459045E1, ~0.11125369292536007E~307) = LESS +compare (~0.2718281828459045E1, ~0.5E~323) = LESS +compareReal (~0.2718281828459045E1, ~0.5E~323) = LESS +compare (~0.2718281828459045E1, ~0.0) = LESS +compareReal (~0.2718281828459045E1, ~0.0) = LESS +compare (~0.123E1, 0.17976931348623157E309) = LESS +compareReal (~0.123E1, 0.17976931348623157E309) = LESS +compare (~0.123E1, 0.8988465674311579E308) = LESS +compareReal (~0.123E1, 0.8988465674311579E308) = LESS +compare (~0.123E1, 0.123E4) = LESS +compareReal (~0.123E1, 0.123E4) = LESS +compare (~0.123E1, 0.123E2) = LESS +compareReal (~0.123E1, 0.123E2) = LESS +compare (~0.123E1, 0.3141592653589793E1) = LESS +compareReal (~0.123E1, 0.3141592653589793E1) = LESS +compare (~0.123E1, 0.2718281828459045E1) = LESS +compareReal (~0.123E1, 0.2718281828459045E1) = LESS +compare (~0.123E1, 0.123E1) = LESS +compareReal (~0.123E1, 0.123E1) = LESS +compare (~0.123E1, 0.123) = LESS +compareReal (~0.123E1, 0.123) = LESS +compare (~0.123E1, 0.123E~2) = LESS +compareReal (~0.123E1, 0.123E~2) = LESS +compare (~0.123E1, 0.22250738585072014E~307) = LESS +compareReal (~0.123E1, 0.22250738585072014E~307) = LESS +compare (~0.123E1, 0.11125369292536007E~307) = LESS +compareReal (~0.123E1, 0.11125369292536007E~307) = LESS +compare (~0.123E1, 0.5E~323) = LESS +compareReal (~0.123E1, 0.5E~323) = LESS +compare (~0.123E1, 0.0) = LESS +compareReal (~0.123E1, 0.0) = LESS +compare (~0.123E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E1, ~0.17976931348623157E309) = GREATER +compare (~0.123E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E1, ~0.8988465674311579E308) = GREATER +compare (~0.123E1, ~0.123E4) = GREATER +compareReal (~0.123E1, ~0.123E4) = GREATER +compare (~0.123E1, ~0.123E2) = GREATER +compareReal (~0.123E1, ~0.123E2) = GREATER +compare (~0.123E1, ~0.3141592653589793E1) = GREATER +compareReal (~0.123E1, ~0.3141592653589793E1) = GREATER +compare (~0.123E1, ~0.2718281828459045E1) = GREATER +compareReal (~0.123E1, ~0.2718281828459045E1) = GREATER +compare (~0.123E1, ~0.123E1) = EQUAL +compareReal (~0.123E1, ~0.123E1) = EQUAL +compare (~0.123E1, ~0.123) = LESS +compareReal (~0.123E1, ~0.123) = LESS +compare (~0.123E1, ~0.123E~2) = LESS +compareReal (~0.123E1, ~0.123E~2) = LESS +compare (~0.123E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E1, ~0.22250738585072014E~307) = LESS +compare (~0.123E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E1, ~0.11125369292536007E~307) = LESS +compare (~0.123E1, ~0.5E~323) = LESS +compareReal (~0.123E1, ~0.5E~323) = LESS +compare (~0.123E1, ~0.0) = LESS +compareReal (~0.123E1, ~0.0) = LESS +compare (~0.123, 0.17976931348623157E309) = LESS +compareReal (~0.123, 0.17976931348623157E309) = LESS +compare (~0.123, 0.8988465674311579E308) = LESS +compareReal (~0.123, 0.8988465674311579E308) = LESS +compare (~0.123, 0.123E4) = LESS +compareReal (~0.123, 0.123E4) = LESS +compare (~0.123, 0.123E2) = LESS +compareReal (~0.123, 0.123E2) = LESS +compare (~0.123, 0.3141592653589793E1) = LESS +compareReal (~0.123, 0.3141592653589793E1) = LESS +compare (~0.123, 0.2718281828459045E1) = LESS +compareReal (~0.123, 0.2718281828459045E1) = LESS +compare (~0.123, 0.123E1) = LESS +compareReal (~0.123, 0.123E1) = LESS +compare (~0.123, 0.123) = LESS +compareReal (~0.123, 0.123) = LESS +compare (~0.123, 0.123E~2) = LESS +compareReal (~0.123, 0.123E~2) = LESS +compare (~0.123, 0.22250738585072014E~307) = LESS +compareReal (~0.123, 0.22250738585072014E~307) = LESS +compare (~0.123, 0.11125369292536007E~307) = LESS +compareReal (~0.123, 0.11125369292536007E~307) = LESS +compare (~0.123, 0.5E~323) = LESS +compareReal (~0.123, 0.5E~323) = LESS +compare (~0.123, 0.0) = LESS +compareReal (~0.123, 0.0) = LESS +compare (~0.123, ~0.17976931348623157E309) = GREATER +compareReal (~0.123, ~0.17976931348623157E309) = GREATER +compare (~0.123, ~0.8988465674311579E308) = GREATER +compareReal (~0.123, ~0.8988465674311579E308) = GREATER +compare (~0.123, ~0.123E4) = GREATER +compareReal (~0.123, ~0.123E4) = GREATER +compare (~0.123, ~0.123E2) = GREATER +compareReal (~0.123, ~0.123E2) = GREATER +compare (~0.123, ~0.3141592653589793E1) = GREATER +compareReal (~0.123, ~0.3141592653589793E1) = GREATER +compare (~0.123, ~0.2718281828459045E1) = GREATER +compareReal (~0.123, ~0.2718281828459045E1) = GREATER +compare (~0.123, ~0.123E1) = GREATER +compareReal (~0.123, ~0.123E1) = GREATER +compare (~0.123, ~0.123) = EQUAL +compareReal (~0.123, ~0.123) = EQUAL +compare (~0.123, ~0.123E~2) = LESS +compareReal (~0.123, ~0.123E~2) = LESS +compare (~0.123, ~0.22250738585072014E~307) = LESS +compareReal (~0.123, ~0.22250738585072014E~307) = LESS +compare (~0.123, ~0.11125369292536007E~307) = LESS +compareReal (~0.123, ~0.11125369292536007E~307) = LESS +compare (~0.123, ~0.5E~323) = LESS +compareReal (~0.123, ~0.5E~323) = LESS +compare (~0.123, ~0.0) = LESS +compareReal (~0.123, ~0.0) = LESS +compare (~0.123E~2, 0.17976931348623157E309) = LESS +compareReal (~0.123E~2, 0.17976931348623157E309) = LESS +compare (~0.123E~2, 0.8988465674311579E308) = LESS +compareReal (~0.123E~2, 0.8988465674311579E308) = LESS +compare (~0.123E~2, 0.123E4) = LESS +compareReal (~0.123E~2, 0.123E4) = LESS +compare (~0.123E~2, 0.123E2) = LESS +compareReal (~0.123E~2, 0.123E2) = LESS +compare (~0.123E~2, 0.3141592653589793E1) = LESS +compareReal (~0.123E~2, 0.3141592653589793E1) = LESS +compare (~0.123E~2, 0.2718281828459045E1) = LESS +compareReal (~0.123E~2, 0.2718281828459045E1) = LESS +compare (~0.123E~2, 0.123E1) = LESS +compareReal (~0.123E~2, 0.123E1) = LESS +compare (~0.123E~2, 0.123) = LESS +compareReal (~0.123E~2, 0.123) = LESS +compare (~0.123E~2, 0.123E~2) = LESS +compareReal (~0.123E~2, 0.123E~2) = LESS +compare (~0.123E~2, 0.22250738585072014E~307) = LESS +compareReal (~0.123E~2, 0.22250738585072014E~307) = LESS +compare (~0.123E~2, 0.11125369292536007E~307) = LESS +compareReal (~0.123E~2, 0.11125369292536007E~307) = LESS +compare (~0.123E~2, 0.5E~323) = LESS +compareReal (~0.123E~2, 0.5E~323) = LESS +compare (~0.123E~2, 0.0) = LESS +compareReal (~0.123E~2, 0.0) = LESS +compare (~0.123E~2, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E~2, ~0.17976931348623157E309) = GREATER +compare (~0.123E~2, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E~2, ~0.8988465674311579E308) = GREATER +compare (~0.123E~2, ~0.123E4) = GREATER +compareReal (~0.123E~2, ~0.123E4) = GREATER +compare (~0.123E~2, ~0.123E2) = GREATER +compareReal (~0.123E~2, ~0.123E2) = GREATER +compare (~0.123E~2, ~0.3141592653589793E1) = GREATER +compareReal (~0.123E~2, ~0.3141592653589793E1) = GREATER +compare (~0.123E~2, ~0.2718281828459045E1) = GREATER +compareReal (~0.123E~2, ~0.2718281828459045E1) = GREATER +compare (~0.123E~2, ~0.123E1) = GREATER +compareReal (~0.123E~2, ~0.123E1) = GREATER +compare (~0.123E~2, ~0.123) = GREATER +compareReal (~0.123E~2, ~0.123) = GREATER +compare (~0.123E~2, ~0.123E~2) = EQUAL +compareReal (~0.123E~2, ~0.123E~2) = EQUAL +compare (~0.123E~2, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E~2, ~0.22250738585072014E~307) = LESS +compare (~0.123E~2, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E~2, ~0.11125369292536007E~307) = LESS +compare (~0.123E~2, ~0.5E~323) = LESS +compareReal (~0.123E~2, ~0.5E~323) = LESS +compare (~0.123E~2, ~0.0) = LESS +compareReal (~0.123E~2, ~0.0) = LESS +compare (~0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compareReal (~0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compare (~0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compareReal (~0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compare (~0.22250738585072014E~307, 0.123E4) = LESS +compareReal (~0.22250738585072014E~307, 0.123E4) = LESS +compare (~0.22250738585072014E~307, 0.123E2) = LESS +compareReal (~0.22250738585072014E~307, 0.123E2) = LESS +compare (~0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compareReal (~0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compare (~0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compareReal (~0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compare (~0.22250738585072014E~307, 0.123E1) = LESS +compareReal (~0.22250738585072014E~307, 0.123E1) = LESS +compare (~0.22250738585072014E~307, 0.123) = LESS +compareReal (~0.22250738585072014E~307, 0.123) = LESS +compare (~0.22250738585072014E~307, 0.123E~2) = LESS +compareReal (~0.22250738585072014E~307, 0.123E~2) = LESS +compare (~0.22250738585072014E~307, 0.22250738585072014E~307) = LESS +compareReal (~0.22250738585072014E~307, 0.22250738585072014E~307) = LESS +compare (~0.22250738585072014E~307, 0.11125369292536007E~307) = LESS +compareReal (~0.22250738585072014E~307, 0.11125369292536007E~307) = LESS +compare (~0.22250738585072014E~307, 0.5E~323) = LESS +compareReal (~0.22250738585072014E~307, 0.5E~323) = LESS +compare (~0.22250738585072014E~307, 0.0) = LESS +compareReal (~0.22250738585072014E~307, 0.0) = LESS +compare (~0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compareReal (~0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compare (~0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compareReal (~0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compare (~0.22250738585072014E~307, ~0.123E4) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E4) = GREATER +compare (~0.22250738585072014E~307, ~0.123E2) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E2) = GREATER +compare (~0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compare (~0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compare (~0.22250738585072014E~307, ~0.123E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E1) = GREATER +compare (~0.22250738585072014E~307, ~0.123) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123) = GREATER +compare (~0.22250738585072014E~307, ~0.123E~2) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E~2) = GREATER +compare (~0.22250738585072014E~307, ~0.22250738585072014E~307) = EQUAL +compareReal (~0.22250738585072014E~307, ~0.22250738585072014E~307) = EQUAL +compare (~0.22250738585072014E~307, ~0.11125369292536007E~307) = LESS +compareReal (~0.22250738585072014E~307, ~0.11125369292536007E~307) = LESS +compare (~0.22250738585072014E~307, ~0.5E~323) = LESS +compareReal (~0.22250738585072014E~307, ~0.5E~323) = LESS +compare (~0.22250738585072014E~307, ~0.0) = LESS +compareReal (~0.22250738585072014E~307, ~0.0) = LESS +compare (~0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compareReal (~0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compare (~0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compareReal (~0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compare (~0.11125369292536007E~307, 0.123E4) = LESS +compareReal (~0.11125369292536007E~307, 0.123E4) = LESS +compare (~0.11125369292536007E~307, 0.123E2) = LESS +compareReal (~0.11125369292536007E~307, 0.123E2) = LESS +compare (~0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compareReal (~0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compare (~0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compareReal (~0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compare (~0.11125369292536007E~307, 0.123E1) = LESS +compareReal (~0.11125369292536007E~307, 0.123E1) = LESS +compare (~0.11125369292536007E~307, 0.123) = LESS +compareReal (~0.11125369292536007E~307, 0.123) = LESS +compare (~0.11125369292536007E~307, 0.123E~2) = LESS +compareReal (~0.11125369292536007E~307, 0.123E~2) = LESS +compare (~0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compareReal (~0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compare (~0.11125369292536007E~307, 0.11125369292536007E~307) = LESS +compareReal (~0.11125369292536007E~307, 0.11125369292536007E~307) = LESS +compare (~0.11125369292536007E~307, 0.5E~323) = LESS +compareReal (~0.11125369292536007E~307, 0.5E~323) = LESS +compare (~0.11125369292536007E~307, 0.0) = LESS +compareReal (~0.11125369292536007E~307, 0.0) = LESS +compare (~0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compareReal (~0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compare (~0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compareReal (~0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compare (~0.11125369292536007E~307, ~0.123E4) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E4) = GREATER +compare (~0.11125369292536007E~307, ~0.123E2) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E2) = GREATER +compare (~0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compare (~0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compare (~0.11125369292536007E~307, ~0.123E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E1) = GREATER +compare (~0.11125369292536007E~307, ~0.123) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123) = GREATER +compare (~0.11125369292536007E~307, ~0.123E~2) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E~2) = GREATER +compare (~0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compareReal (~0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compare (~0.11125369292536007E~307, ~0.11125369292536007E~307) = EQUAL +compareReal (~0.11125369292536007E~307, ~0.11125369292536007E~307) = EQUAL +compare (~0.11125369292536007E~307, ~0.5E~323) = LESS +compareReal (~0.11125369292536007E~307, ~0.5E~323) = LESS +compare (~0.11125369292536007E~307, ~0.0) = LESS +compareReal (~0.11125369292536007E~307, ~0.0) = LESS +compare (~0.5E~323, 0.17976931348623157E309) = LESS +compareReal (~0.5E~323, 0.17976931348623157E309) = LESS +compare (~0.5E~323, 0.8988465674311579E308) = LESS +compareReal (~0.5E~323, 0.8988465674311579E308) = LESS +compare (~0.5E~323, 0.123E4) = LESS +compareReal (~0.5E~323, 0.123E4) = LESS +compare (~0.5E~323, 0.123E2) = LESS +compareReal (~0.5E~323, 0.123E2) = LESS +compare (~0.5E~323, 0.3141592653589793E1) = LESS +compareReal (~0.5E~323, 0.3141592653589793E1) = LESS +compare (~0.5E~323, 0.2718281828459045E1) = LESS +compareReal (~0.5E~323, 0.2718281828459045E1) = LESS +compare (~0.5E~323, 0.123E1) = LESS +compareReal (~0.5E~323, 0.123E1) = LESS +compare (~0.5E~323, 0.123) = LESS +compareReal (~0.5E~323, 0.123) = LESS +compare (~0.5E~323, 0.123E~2) = LESS +compareReal (~0.5E~323, 0.123E~2) = LESS +compare (~0.5E~323, 0.22250738585072014E~307) = LESS +compareReal (~0.5E~323, 0.22250738585072014E~307) = LESS +compare (~0.5E~323, 0.11125369292536007E~307) = LESS +compareReal (~0.5E~323, 0.11125369292536007E~307) = LESS +compare (~0.5E~323, 0.5E~323) = LESS +compareReal (~0.5E~323, 0.5E~323) = LESS +compare (~0.5E~323, 0.0) = LESS +compareReal (~0.5E~323, 0.0) = LESS +compare (~0.5E~323, ~0.17976931348623157E309) = GREATER +compareReal (~0.5E~323, ~0.17976931348623157E309) = GREATER +compare (~0.5E~323, ~0.8988465674311579E308) = GREATER +compareReal (~0.5E~323, ~0.8988465674311579E308) = GREATER +compare (~0.5E~323, ~0.123E4) = GREATER +compareReal (~0.5E~323, ~0.123E4) = GREATER +compare (~0.5E~323, ~0.123E2) = GREATER +compareReal (~0.5E~323, ~0.123E2) = GREATER +compare (~0.5E~323, ~0.3141592653589793E1) = GREATER +compareReal (~0.5E~323, ~0.3141592653589793E1) = GREATER +compare (~0.5E~323, ~0.2718281828459045E1) = GREATER +compareReal (~0.5E~323, ~0.2718281828459045E1) = GREATER +compare (~0.5E~323, ~0.123E1) = GREATER +compareReal (~0.5E~323, ~0.123E1) = GREATER +compare (~0.5E~323, ~0.123) = GREATER +compareReal (~0.5E~323, ~0.123) = GREATER +compare (~0.5E~323, ~0.123E~2) = GREATER +compareReal (~0.5E~323, ~0.123E~2) = GREATER +compare (~0.5E~323, ~0.22250738585072014E~307) = GREATER +compareReal (~0.5E~323, ~0.22250738585072014E~307) = GREATER +compare (~0.5E~323, ~0.11125369292536007E~307) = GREATER +compareReal (~0.5E~323, ~0.11125369292536007E~307) = GREATER +compare (~0.5E~323, ~0.5E~323) = EQUAL +compareReal (~0.5E~323, ~0.5E~323) = EQUAL +compare (~0.5E~323, ~0.0) = LESS +compareReal (~0.5E~323, ~0.0) = LESS +compare (~0.0, 0.17976931348623157E309) = LESS +compareReal (~0.0, 0.17976931348623157E309) = LESS +compare (~0.0, 0.8988465674311579E308) = LESS +compareReal (~0.0, 0.8988465674311579E308) = LESS +compare (~0.0, 0.123E4) = LESS +compareReal (~0.0, 0.123E4) = LESS +compare (~0.0, 0.123E2) = LESS +compareReal (~0.0, 0.123E2) = LESS +compare (~0.0, 0.3141592653589793E1) = LESS +compareReal (~0.0, 0.3141592653589793E1) = LESS +compare (~0.0, 0.2718281828459045E1) = LESS +compareReal (~0.0, 0.2718281828459045E1) = LESS +compare (~0.0, 0.123E1) = LESS +compareReal (~0.0, 0.123E1) = LESS +compare (~0.0, 0.123) = LESS +compareReal (~0.0, 0.123) = LESS +compare (~0.0, 0.123E~2) = LESS +compareReal (~0.0, 0.123E~2) = LESS +compare (~0.0, 0.22250738585072014E~307) = LESS +compareReal (~0.0, 0.22250738585072014E~307) = LESS +compare (~0.0, 0.11125369292536007E~307) = LESS +compareReal (~0.0, 0.11125369292536007E~307) = LESS +compare (~0.0, 0.5E~323) = LESS +compareReal (~0.0, 0.5E~323) = LESS +compare (~0.0, 0.0) = EQUAL +compareReal (~0.0, 0.0) = EQUAL +compare (~0.0, ~0.17976931348623157E309) = GREATER +compareReal (~0.0, ~0.17976931348623157E309) = GREATER +compare (~0.0, ~0.8988465674311579E308) = GREATER +compareReal (~0.0, ~0.8988465674311579E308) = GREATER +compare (~0.0, ~0.123E4) = GREATER +compareReal (~0.0, ~0.123E4) = GREATER +compare (~0.0, ~0.123E2) = GREATER +compareReal (~0.0, ~0.123E2) = GREATER +compare (~0.0, ~0.3141592653589793E1) = GREATER +compareReal (~0.0, ~0.3141592653589793E1) = GREATER +compare (~0.0, ~0.2718281828459045E1) = GREATER +compareReal (~0.0, ~0.2718281828459045E1) = GREATER +compare (~0.0, ~0.123E1) = GREATER +compareReal (~0.0, ~0.123E1) = GREATER +compare (~0.0, ~0.123) = GREATER +compareReal (~0.0, ~0.123) = GREATER +compare (~0.0, ~0.123E~2) = GREATER +compareReal (~0.0, ~0.123E~2) = GREATER +compare (~0.0, ~0.22250738585072014E~307) = GREATER +compareReal (~0.0, ~0.22250738585072014E~307) = GREATER +compare (~0.0, ~0.11125369292536007E~307) = GREATER +compareReal (~0.0, ~0.11125369292536007E~307) = GREATER +compare (~0.0, ~0.5E~323) = GREATER +compareReal (~0.0, ~0.5E~323) = GREATER +compare (~0.0, ~0.0) = EQUAL +compareReal (~0.0, ~0.0) = EQUAL Testing abs diff -Nru mlton-20130715/regression/real.arm-linux.ok mlton-20210117+dfsg/regression/real.arm-linux.ok --- mlton-20130715/regression/real.arm-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.arm-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,17876 +0,0 @@ - -Testing Real32 - -Testing fmt -0.34028235E39 -3.402823E38 -340282346638528859811704183484516925440.000000 -3.40282346639E38 -3E38 -340282346638528859811704183484516925440 -3E38 -3.4028234664E38 -340282346638528859811704183484516925440.0000000000 -3.402823466E38 -0.17014117E39 -1.701412E38 -170141173319264429905852091742258462720.000000 -1.70141173319E38 -2E38 -170141173319264429905852091742258462720 -2E38 -1.7014117332E38 -170141173319264429905852091742258462720.0000000000 -1.701411733E38 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3000001907 -1E1 -12 -10 -1.2300000191E1 -12.3000001907 -12.30000019 -0.31415927E1 -3.141593E0 -3.141593 -3.14159274101 -3E0 -3 -3 -3.1415927410E0 -3.1415927410 -3.141592741 -0.27182817E1 -2.718282E0 -2.718282 -2.71828174591 -3E0 -3 -3 -2.7182817459E0 -2.7182817459 -2.718281746 -0.123E1 -1.230000E0 -1.230000 -1.23000001907 -1E0 -1 -1 -1.2300000191E0 -1.2300000191 -1.230000019 -0.123 -1.230000E~1 -0.123000 -0.123000003397 -1E~1 -0 -0.1 -1.2300000340E~1 -0.1230000034 -0.1230000034 -0.123E~2 -1.230000E~3 -0.001230 -0.0012300000526 -1E~3 -0 -1E~3 -1.2300000526E~3 -0.0012300001 -0.001230000053 -0.11754944E~37 -1.175494E~38 -0.000000 -1.17549435082E~38 -1E~38 -0 -1E~38 -1.1754943508E~38 -0.0000000000 -1.175494351E~38 -0.5877472E~38 -5.877472E~39 -0.000000 -5.87747175411E~39 -6E~39 -0 -6E~39 -5.8774717541E~39 -0.0000000000 -5.877471754E~39 -0.1E~44 -1.401298E~45 -0.000000 -1.40129846432E~45 -1E~45 -0 -1E~45 -1.4012984643E~45 -0.0000000000 -1.401298464E~45 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.34028235E39 -~3.402823E38 -~340282346638528859811704183484516925440.000000 -~3.40282346639E38 -~3E38 -~340282346638528859811704183484516925440 -~3E38 -~3.4028234664E38 -~340282346638528859811704183484516925440.0000000000 -~3.402823466E38 -~0.17014117E39 -~1.701412E38 -~170141173319264429905852091742258462720.000000 -~1.70141173319E38 -~2E38 -~170141173319264429905852091742258462720 -~2E38 -~1.7014117332E38 -~170141173319264429905852091742258462720.0000000000 -~1.701411733E38 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3000001907 -~1E1 -~12 -~10 -~1.2300000191E1 -~12.3000001907 -~12.30000019 -~0.31415927E1 -~3.141593E0 -~3.141593 -~3.14159274101 -~3E0 -~3 -~3 -~3.1415927410E0 -~3.1415927410 -~3.141592741 -~0.27182817E1 -~2.718282E0 -~2.718282 -~2.71828174591 -~3E0 -~3 -~3 -~2.7182817459E0 -~2.7182817459 -~2.718281746 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23000001907 -~1E0 -~1 -~1 -~1.2300000191E0 -~1.2300000191 -~1.230000019 -~0.123 -~1.230000E~1 -~0.123000 -~0.123000003397 -~1E~1 -~0 -~0.1 -~1.2300000340E~1 -~0.1230000034 -~0.1230000034 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.0012300000526 -~1E~3 -~0 -~1E~3 -~1.2300000526E~3 -~0.0012300001 -~0.001230000053 -~0.11754944E~37 -~1.175494E~38 -~0.000000 -~1.17549435082E~38 -~1E~38 -~0 -~1E~38 -~1.1754943508E~38 -~0.0000000000 -~1.175494351E~38 -~0.5877472E~38 -~5.877472E~39 -~0.000000 -~5.87747175411E~39 -~6E~39 -~0 -~6E~39 -~5.8774717541E~39 -~0.0000000000 -~5.877471754E~39 -~0.1E~44 -~1.401298E~45 -~0.000000 -~1.40129846432E~45 -~1E~45 -~0 -~1E~45 -~1.4012984643E~45 -~0.0000000000 -~1.401298464E~45 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.31415927E1 0.31415927E1 -0.27182817E1 0.27182817E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.11754944E~37 0.11754944E~37 -0.5877472E~38 0.5877472E~38 -0.1E~44 0.1E~44 -0.0 0.0 -~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.31415927E1 ~0.31415927E1 -~0.27182817E1 ~0.27182817E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.11754944E~37 ~0.11754944E~37 -~0.5877472E~38 ~0.5877472E~38 -~0.1E~44 ~0.1E~44 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.34028235E39 normal - isFinite = true isNan = false isNormal = true -0.17014117E39 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.31415927E1 normal - isFinite = true isNan = false isNormal = true -0.27182817E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.34028235E39 normal - isFinite = true isNan = false isNormal = true -~0.17014117E39 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.31415927E1 normal - isFinite = true isNan = false isNormal = true -~0.27182817E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -~0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -~0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -3.40282346639E38 -3.40282346639E38 -true -1.40129846432E~45 -1.40129846432E~45 -true -1.17549435082E~38 -1.17549435082E~38 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.34028235E39 340282346638528859811704183484516925440 0.34028235E39 -0.17014117E39 170141173319264429905852091742258462720 0.17014117E39 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.31415927E1 3 0.3E1 -0.27182817E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.11754944E~37 0 0.0 -0.5877472E~38 0 0.0 -0.1E~44 0 0.0 -0.0 0 0.0 -~0.34028235E39 ~340282346638528859811704183484516925440 ~0.34028235E39 -~0.17014117E39 ~170141173319264429905852091742258462720 ~0.17014117E39 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.31415927E1 ~4 ~0.4E1 -~0.27182817E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.11754944E~37 ~1 ~0.1E1 -~0.5877472E~38 ~1 ~0.1E1 -~0.1E~44 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25 0 -zero ~0.25 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.5 0 -zero ~0.5 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.75 0 -zero ~0.75 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195423 -1.144729853 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -1 -0.4342944622 -0.4107813537 -7.544136047 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342376947 -1.856761098 -0.2070141882 -0.9424887896 -1.564468503 -1.109053612 -2.819815874 -0.8425793648 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.123624064 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf -0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195423 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136047 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342376947 -1.856761098 -nan -nan -~0.9424887896 -~1.564468503 -nan -~2.819815874 -~0.8425793648 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.123624064 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 -~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 -~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 -~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 -~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.0 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754941E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 -~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 -~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.0 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754941E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.0 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.3E~44 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.0 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.3E~44 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754941E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.3E~44 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754941E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.3E~44 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.0 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754941E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.0 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754941E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.0 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.3E~44 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.0 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.3E~44 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754941E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.3E~44 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754941E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.0 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.22250738585072004E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.0 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.22250738585072004E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.0 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1E~322 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.0 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1E~322 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.22250738585072004E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1E~322 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.22250738585072004E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1E~322 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.0 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072004E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.0 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.22250738585072004E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.0 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1E~322 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.0 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1E~322 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.22250738585072004E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1E~322 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.22250738585072004E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.17976931348623157E309 = 0.9999999999999999 * 2^1024 - = 0.17976931348623157E309 -0.8988465674311579E308 = 0.9999999999999999 * 2^1023 - = 0.8988465674311579E308 -0.123E4 = 0.6005859375 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.3141592653589793E1 = 0.7853981633974483 * 2^2 - = 0.3141592653589793E1 -0.2718281828459045E1 = 0.6795704571147613 * 2^2 - = 0.2718281828459045E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.22250738585072014E~307 = 0.5 * 2^~1021 - = 0.22250738585072014E~307 -0.0 = 0.0 * 2^0 - = 0.0 -~0.17976931348623157E309 = ~0.9999999999999999 * 2^1024 - = ~0.17976931348623157E309 -~0.8988465674311579E308 = ~0.9999999999999999 * 2^1023 - = ~0.8988465674311579E308 -~0.123E4 = ~0.6005859375 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.3141592653589793E1 = ~0.7853981633974483 * 2^2 - = ~0.3141592653589793E1 -~0.2718281828459045E1 = ~0.6795704571147613 * 2^2 - = ~0.2718281828459045E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.22250738585072014E~307 = ~0.5 * 2^~1021 - = ~0.22250738585072014E~307 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large diff -Nru mlton-20130715/regression/real-basic.x86-cygwin.ok mlton-20210117+dfsg/regression/real-basic.x86-cygwin.ok --- mlton-20130715/regression/real-basic.x86-cygwin.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real-basic.x86-cygwin.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -Real32 - Reported - precision: 24 - max exponent: 128 - min exponent: ~125 - min denormal: ~148 - Actual - precision: 64 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 - Exported - precision: 24 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 -Real64 - Reported - precision: 53 - max exponent: 1024 - min exponent: ~1021 - min denormal: ~1073 - Actual - precision: 64 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 - Exported - precision: 53 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 diff -Nru mlton-20130715/regression/real-basic.x86-darwin.ok mlton-20210117+dfsg/regression/real-basic.x86-darwin.ok --- mlton-20130715/regression/real-basic.x86-darwin.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real-basic.x86-darwin.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -Real32 - Reported - precision: 24 - max exponent: 128 - min exponent: ~125 - min denormal: ~148 - Actual - precision: 64 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 - Exported - precision: 24 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 -Real64 - Reported - precision: 53 - max exponent: 1024 - min exponent: ~1021 - min denormal: ~1073 - Actual - precision: 64 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 - Exported - precision: 53 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 diff -Nru mlton-20130715/regression/real-basic.x86-freebsd.ok mlton-20210117+dfsg/regression/real-basic.x86-freebsd.ok --- mlton-20130715/regression/real-basic.x86-freebsd.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real-basic.x86-freebsd.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -Real32 - Reported - precision: 24 - max exponent: 128 - min exponent: ~125 - min denormal: ~148 - Actual - precision: 64 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 - Exported - precision: 24 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 -Real64 - Reported - precision: 53 - max exponent: 1024 - min exponent: ~1021 - min denormal: ~1073 - Actual - precision: 64 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 - Exported - precision: 53 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 diff -Nru mlton-20130715/regression/real-basic.x86-hurd.ok mlton-20210117+dfsg/regression/real-basic.x86-hurd.ok --- mlton-20130715/regression/real-basic.x86-hurd.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real-basic.x86-hurd.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -Real32 - Reported - precision: 24 - max exponent: 128 - min exponent: ~125 - min denormal: ~148 - Actual - precision: 64 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 - Exported - precision: 24 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 -Real64 - Reported - precision: 53 - max exponent: 1024 - min exponent: ~1021 - min denormal: ~1073 - Actual - precision: 64 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 - Exported - precision: 53 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 diff -Nru mlton-20130715/regression/real-basic.x86-linux.ok mlton-20210117+dfsg/regression/real-basic.x86-linux.ok --- mlton-20130715/regression/real-basic.x86-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real-basic.x86-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -Real32 - Reported - precision: 24 - max exponent: 128 - min exponent: ~125 - min denormal: ~148 - Actual - precision: 64 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 - Exported - precision: 24 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 -Real64 - Reported - precision: 53 - max exponent: 1024 - min exponent: ~1021 - min denormal: ~1073 - Actual - precision: 64 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 - Exported - precision: 53 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 diff -Nru mlton-20130715/regression/real-basic.x86-mingw.ok mlton-20210117+dfsg/regression/real-basic.x86-mingw.ok --- mlton-20130715/regression/real-basic.x86-mingw.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real-basic.x86-mingw.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -Real32 - Reported - precision: 24 - max exponent: 128 - min exponent: ~125 - min denormal: ~148 - Actual - precision: 64 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 - Exported - precision: 24 - max exponent: 128 - min exponent: ~149 - min denormal: ~149 -Real64 - Reported - precision: 53 - max exponent: 1024 - min exponent: ~1021 - min denormal: ~1073 - Actual - precision: 64 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 - Exported - precision: 53 - max exponent: 1024 - min exponent: ~1074 - min denormal: ~1074 diff -Nru mlton-20130715/regression/real-basic.x86.ok mlton-20210117+dfsg/regression/real-basic.x86.ok --- mlton-20130715/regression/real-basic.x86.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/real-basic.x86.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,32 @@ +Real32 + Reported + precision: 24 + max exponent: 128 + min exponent: ~125 + min denormal: ~148 + Actual + precision: 64 + max exponent: 128 + min exponent: ~149 + min denormal: ~149 + Exported + precision: 24 + max exponent: 128 + min exponent: ~149 + min denormal: ~149 +Real64 + Reported + precision: 53 + max exponent: 1024 + min exponent: ~1021 + min denormal: ~1073 + Actual + precision: 64 + max exponent: 1024 + min exponent: ~1074 + min denormal: ~1074 + Exported + precision: 53 + max exponent: 1024 + min exponent: ~1074 + min denormal: ~1074 diff -Nru mlton-20130715/regression/real.hppa-hpux.ok mlton-20210117+dfsg/regression/real.hppa-hpux.ok --- mlton-20130715/regression/real.hppa-hpux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.hppa-hpux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,17876 +0,0 @@ - -Testing Real32 - -Testing fmt -0.34028235E39 -3.402823E38 -340282346638528859811704183484516925440.000000 -3.40282346639E38 -3E38 -340282346638528859811704183484516925440 -3E38 -3.4028234664E38 -340282346638528859811704183484516925440.0000000000 -3.402823466E38 -0.17014117E39 -1.701412E38 -170141173319264429905852091742258462720.000000 -1.70141173319E38 -2E38 -170141173319264429905852091742258462720 -2E38 -1.7014117332E38 -170141173319264429905852091742258462720.0000000000 -1.701411733E38 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3000001907 -1E1 -12 -10 -1.2300000191E1 -12.3000001907 -12.30000019 -0.31415927E1 -3.141593E0 -3.141593 -3.14159274101 -3E0 -3 -3 -3.1415927410E0 -3.1415927410 -3.141592741 -0.27182817E1 -2.718282E0 -2.718282 -2.71828174591 -3E0 -3 -3 -2.7182817459E0 -2.7182817459 -2.718281746 -0.123E1 -1.230000E0 -1.230000 -1.23000001907 -1E0 -1 -1 -1.2300000191E0 -1.2300000191 -1.230000019 -0.123 -1.230000E~1 -0.123000 -0.123000003397 -1E~1 -0 -0.1 -1.2300000340E~1 -0.1230000034 -0.1230000034 -0.123E~2 -1.230000E~3 -0.001230 -0.0012300000526 -1E~3 -0 -1E~3 -1.2300000526E~3 -0.0012300001 -0.001230000053 -0.11754944E~37 -1.175494E~38 -0.000000 -1.17549435082E~38 -1E~38 -0 -1E~38 -1.1754943508E~38 -0.0000000000 -1.175494351E~38 -0.5877472E~38 -5.877472E~39 -0.000000 -5.87747175411E~39 -6E~39 -0 -6E~39 -5.8774717541E~39 -0.0000000000 -5.877471754E~39 -0.1E~44 -1.401298E~45 -0.000000 -1.40129846432E~45 -1E~45 -0 -1E~45 -1.4012984643E~45 -0.0000000000 -1.401298464E~45 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.34028235E39 -~3.402823E38 -~340282346638528859811704183484516925440.000000 -~3.40282346639E38 -~3E38 -~340282346638528859811704183484516925440 -~3E38 -~3.4028234664E38 -~340282346638528859811704183484516925440.0000000000 -~3.402823466E38 -~0.17014117E39 -~1.701412E38 -~170141173319264429905852091742258462720.000000 -~1.70141173319E38 -~2E38 -~170141173319264429905852091742258462720 -~2E38 -~1.7014117332E38 -~170141173319264429905852091742258462720.0000000000 -~1.701411733E38 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3000001907 -~1E1 -~12 -~10 -~1.2300000191E1 -~12.3000001907 -~12.30000019 -~0.31415927E1 -~3.141593E0 -~3.141593 -~3.14159274101 -~3E0 -~3 -~3 -~3.1415927410E0 -~3.1415927410 -~3.141592741 -~0.27182817E1 -~2.718282E0 -~2.718282 -~2.71828174591 -~3E0 -~3 -~3 -~2.7182817459E0 -~2.7182817459 -~2.718281746 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23000001907 -~1E0 -~1 -~1 -~1.2300000191E0 -~1.2300000191 -~1.230000019 -~0.123 -~1.230000E~1 -~0.123000 -~0.123000003397 -~1E~1 -~0 -~0.1 -~1.2300000340E~1 -~0.1230000034 -~0.1230000034 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.0012300000526 -~1E~3 -~0 -~1E~3 -~1.2300000526E~3 -~0.0012300001 -~0.001230000053 -~0.11754944E~37 -~1.175494E~38 -~0.000000 -~1.17549435082E~38 -~1E~38 -~0 -~1E~38 -~1.1754943508E~38 -~0.0000000000 -~1.175494351E~38 -~0.5877472E~38 -~5.877472E~39 -~0.000000 -~5.87747175411E~39 -~6E~39 -~0 -~6E~39 -~5.8774717541E~39 -~0.0000000000 -~5.877471754E~39 -~0.1E~44 -~1.401298E~45 -~0.000000 -~1.40129846432E~45 -~1E~45 -~0 -~1E~45 -~1.4012984643E~45 -~0.0000000000 -~1.401298464E~45 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.31415927E1 0.31415927E1 -0.27182817E1 0.27182817E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.11754944E~37 0.11754944E~37 -0.5877472E~38 0.5877472E~38 -0.1E~44 0.1E~44 -0.0 0.0 -~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.31415927E1 ~0.31415927E1 -~0.27182817E1 ~0.27182817E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.11754944E~37 ~0.11754944E~37 -~0.5877472E~38 ~0.5877472E~38 -~0.1E~44 ~0.1E~44 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.34028235E39 normal - isFinite = true isNan = false isNormal = true -0.17014117E39 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.31415927E1 normal - isFinite = true isNan = false isNormal = true -0.27182817E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.34028235E39 normal - isFinite = true isNan = false isNormal = true -~0.17014117E39 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.31415927E1 normal - isFinite = true isNan = false isNormal = true -~0.27182817E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -~0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -~0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -3.40282346639E38 -3.40282346639E38 -true -1.40129846432E~45 -1.40129846432E~45 -true -1.17549435082E~38 -1.17549435082E~38 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.34028235E39 340282346638528859811704183484516925440 0.34028235E39 -0.17014117E39 170141173319264429905852091742258462720 0.17014117E39 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.31415927E1 3 0.3E1 -0.27182817E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.11754944E~37 0 0.0 -0.5877472E~38 0 0.0 -0.1E~44 0 0.0 -0.0 0 0.0 -~0.34028235E39 ~340282346638528859811704183484516925440 ~0.34028235E39 -~0.17014117E39 ~170141173319264429905852091742258462720 ~0.17014117E39 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.31415927E1 ~4 ~0.4E1 -~0.27182817E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.11754944E~37 ~1 ~0.1E1 -~0.5877472E~38 ~1 ~0.1E1 -~0.1E~44 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25 0 -zero ~0.25 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.5 0 -zero ~0.5 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.75 0 -zero ~0.75 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083015 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544176 -1 -nan -nan -1.262627363 -~1 -11.59195518 -1.144729972 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -0.9999999404 -0.4342944622 -0.4107813537 -7.544136524 -1.648721218 -~0.4505496025 -0.9913288951 -nan -nan -0.8881738186 -0.3342376947 -1.856761098 -0.2070141882 -0.9424887896 -1.564468503 -1.109053612 -2.819815874 -0.8425793052 -1.447484136 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240864 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf -0 -nan -nan -0.9977912903 -~inf -nan -15.02083015 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544176 -~1 -nan -nan -~1.262627363 -~1 -11.59195423 -nan -nan -nan -~0.9962721467 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136524 -nan -0.4505496025 -~0.9913288355 -nan -nan -~0.8881738186 -0.3342376947 -1.856761098 -nan -nan -~0.9424887896 -~1.564468503 -nan -~2.819815874 -~0.8425793052 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240864 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 -~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 -~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 -~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 -~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.5877472E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754942E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 -~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 -~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.5877472E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754942E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.5877472E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.5877472E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754942E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754942E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.5877472E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754942E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.5877472E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754942E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.5877472E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.5877472E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754942E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754942E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.17976931348623157E309 = 0.9999999999999999 * 2^1024 - = 0.17976931348623157E309 -0.8988465674311579E308 = 0.9999999999999999 * 2^1023 - = 0.8988465674311579E308 -0.123E4 = 0.6005859375 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.3141592653589793E1 = 0.7853981633974483 * 2^2 - = 0.3141592653589793E1 -0.2718281828459045E1 = 0.6795704571147613 * 2^2 - = 0.2718281828459045E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.22250738585072014E~307 = 0.5 * 2^~1021 - = 0.22250738585072014E~307 -0.0 = 0.0 * 2^0 - = 0.0 -~0.17976931348623157E309 = ~0.9999999999999999 * 2^1024 - = ~0.17976931348623157E309 -~0.8988465674311579E308 = ~0.9999999999999999 * 2^1023 - = ~0.8988465674311579E308 -~0.123E4 = ~0.6005859375 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.3141592653589793E1 = ~0.7853981633974483 * 2^2 - = ~0.3141592653589793E1 -~0.2718281828459045E1 = ~0.6795704571147613 * 2^2 - = ~0.2718281828459045E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.22250738585072014E~307 = ~0.5 * 2^~1021 - = ~0.22250738585072014E~307 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large diff -Nru mlton-20130715/regression/real.hppa-linux.ok mlton-20210117+dfsg/regression/real.hppa-linux.ok --- mlton-20130715/regression/real.hppa-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.hppa-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,17876 +0,0 @@ - -Testing Real32 - -Testing fmt -0.34028235E39 -3.402823E38 -340282346638528859811704183484516925440.000000 -3.40282346639E38 -3E38 -340282346638528859811704183484516925440 -3E38 -3.4028234664E38 -340282346638528859811704183484516925440.0000000000 -3.402823466E38 -0.17014117E39 -1.701412E38 -170141173319264429905852091742258462720.000000 -1.70141173319E38 -2E38 -170141173319264429905852091742258462720 -2E38 -1.7014117332E38 -170141173319264429905852091742258462720.0000000000 -1.701411733E38 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3000001907 -1E1 -12 -10 -1.2300000191E1 -12.3000001907 -12.30000019 -0.31415927E1 -3.141593E0 -3.141593 -3.14159274101 -3E0 -3 -3 -3.1415927410E0 -3.1415927410 -3.141592741 -0.27182817E1 -2.718282E0 -2.718282 -2.71828174591 -3E0 -3 -3 -2.7182817459E0 -2.7182817459 -2.718281746 -0.123E1 -1.230000E0 -1.230000 -1.23000001907 -1E0 -1 -1 -1.2300000191E0 -1.2300000191 -1.230000019 -0.123 -1.230000E~1 -0.123000 -0.123000003397 -1E~1 -0 -0.1 -1.2300000340E~1 -0.1230000034 -0.1230000034 -0.123E~2 -1.230000E~3 -0.001230 -0.0012300000526 -1E~3 -0 -1E~3 -1.2300000526E~3 -0.0012300001 -0.001230000053 -0.11754944E~37 -1.175494E~38 -0.000000 -1.17549435082E~38 -1E~38 -0 -1E~38 -1.1754943508E~38 -0.0000000000 -1.175494351E~38 -0.5877472E~38 -5.877472E~39 -0.000000 -5.87747175411E~39 -6E~39 -0 -6E~39 -5.8774717541E~39 -0.0000000000 -5.877471754E~39 -0.1E~44 -1.401298E~45 -0.000000 -1.40129846432E~45 -1E~45 -0 -1E~45 -1.4012984643E~45 -0.0000000000 -1.401298464E~45 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.34028235E39 -~3.402823E38 -~340282346638528859811704183484516925440.000000 -~3.40282346639E38 -~3E38 -~340282346638528859811704183484516925440 -~3E38 -~3.4028234664E38 -~340282346638528859811704183484516925440.0000000000 -~3.402823466E38 -~0.17014117E39 -~1.701412E38 -~170141173319264429905852091742258462720.000000 -~1.70141173319E38 -~2E38 -~170141173319264429905852091742258462720 -~2E38 -~1.7014117332E38 -~170141173319264429905852091742258462720.0000000000 -~1.701411733E38 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3000001907 -~1E1 -~12 -~10 -~1.2300000191E1 -~12.3000001907 -~12.30000019 -~0.31415927E1 -~3.141593E0 -~3.141593 -~3.14159274101 -~3E0 -~3 -~3 -~3.1415927410E0 -~3.1415927410 -~3.141592741 -~0.27182817E1 -~2.718282E0 -~2.718282 -~2.71828174591 -~3E0 -~3 -~3 -~2.7182817459E0 -~2.7182817459 -~2.718281746 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23000001907 -~1E0 -~1 -~1 -~1.2300000191E0 -~1.2300000191 -~1.230000019 -~0.123 -~1.230000E~1 -~0.123000 -~0.123000003397 -~1E~1 -~0 -~0.1 -~1.2300000340E~1 -~0.1230000034 -~0.1230000034 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.0012300000526 -~1E~3 -~0 -~1E~3 -~1.2300000526E~3 -~0.0012300001 -~0.001230000053 -~0.11754944E~37 -~1.175494E~38 -~0.000000 -~1.17549435082E~38 -~1E~38 -~0 -~1E~38 -~1.1754943508E~38 -~0.0000000000 -~1.175494351E~38 -~0.5877472E~38 -~5.877472E~39 -~0.000000 -~5.87747175411E~39 -~6E~39 -~0 -~6E~39 -~5.8774717541E~39 -~0.0000000000 -~5.877471754E~39 -~0.1E~44 -~1.401298E~45 -~0.000000 -~1.40129846432E~45 -~1E~45 -~0 -~1E~45 -~1.4012984643E~45 -~0.0000000000 -~1.401298464E~45 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.31415927E1 0.31415927E1 -0.27182817E1 0.27182817E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.11754944E~37 0.11754944E~37 -0.5877472E~38 0.5877472E~38 -0.1E~44 0.1E~44 -0.0 0.0 -~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.31415927E1 ~0.31415927E1 -~0.27182817E1 ~0.27182817E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.11754944E~37 ~0.11754944E~37 -~0.5877472E~38 ~0.5877472E~38 -~0.1E~44 ~0.1E~44 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.34028235E39 normal - isFinite = true isNan = false isNormal = true -0.17014117E39 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.31415927E1 normal - isFinite = true isNan = false isNormal = true -0.27182817E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.34028235E39 normal - isFinite = true isNan = false isNormal = true -~0.17014117E39 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.31415927E1 normal - isFinite = true isNan = false isNormal = true -~0.27182817E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -~0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -~0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -3.40282346639E38 -3.40282346639E38 -true -1.40129846432E~45 -1.40129846432E~45 -true -1.17549435082E~38 -1.17549435082E~38 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.34028235E39 340282346638528859811704183484516925440 0.34028235E39 -0.17014117E39 170141173319264429905852091742258462720 0.17014117E39 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.31415927E1 3 0.3E1 -0.27182817E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.11754944E~37 0 0.0 -0.5877472E~38 0 0.0 -0.1E~44 0 0.0 -0.0 0 0.0 -~0.34028235E39 ~340282346638528859811704183484516925440 ~0.34028235E39 -~0.17014117E39 ~170141173319264429905852091742258462720 ~0.17014117E39 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.31415927E1 ~4 ~0.4E1 -~0.27182817E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.11754944E~37 ~1 ~0.1E1 -~0.5877472E~38 ~1 ~0.1E1 -~0.1E~44 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25 0 -zero ~0.25 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.5 0 -zero ~0.5 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.75 0 -zero ~0.75 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195518 -1.144729853 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -1 -0.4342944622 -0.4107813537 -7.544136047 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342376947 -1.856761098 -0.2070141882 -0.9424888492 -1.564468503 -1.109053612 -2.819815874 -0.8425793648 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240715 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf -0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195518 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136047 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342376947 -1.856761098 -nan -nan -~0.9424888492 -~1.564468503 -nan -~2.819815874 -~0.8425793648 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240715 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 -~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 -~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 -~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 -~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.587747E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754941E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 -~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 -~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.587747E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754941E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.587747E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.587747E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754941E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754941E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.587747E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754941E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.587747E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754941E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.587747E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.587747E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754941E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754941E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.17976931348623157E309 = 0.9999999999999999 * 2^1024 - = 0.17976931348623157E309 -0.8988465674311579E308 = 0.9999999999999999 * 2^1023 - = 0.8988465674311579E308 -0.123E4 = 0.6005859375 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.3141592653589793E1 = 0.7853981633974483 * 2^2 - = 0.3141592653589793E1 -0.2718281828459045E1 = 0.6795704571147613 * 2^2 - = 0.2718281828459045E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.22250738585072014E~307 = 0.5 * 2^~1021 - = 0.22250738585072014E~307 -0.0 = 0.0 * 2^0 - = 0.0 -~0.17976931348623157E309 = ~0.9999999999999999 * 2^1024 - = ~0.17976931348623157E309 -~0.8988465674311579E308 = ~0.9999999999999999 * 2^1023 - = ~0.8988465674311579E308 -~0.123E4 = ~0.6005859375 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.3141592653589793E1 = ~0.7853981633974483 * 2^2 - = ~0.3141592653589793E1 -~0.2718281828459045E1 = ~0.6795704571147613 * 2^2 - = ~0.2718281828459045E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.22250738585072014E~307 = ~0.5 * 2^~1021 - = ~0.22250738585072014E~307 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large diff -Nru mlton-20130715/regression/real.mipsel-linux.ok mlton-20210117+dfsg/regression/real.mipsel-linux.ok --- mlton-20130715/regression/real.mipsel-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.mipsel-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,17876 +0,0 @@ - -Testing Real32 - -Testing fmt -0.34028235E39 -3.402823E38 -340282346638528859811704183484516925440.000000 -3.40282346639E38 -3E38 -340282346638528859811704183484516925440 -3E38 -3.4028234664E38 -340282346638528859811704183484516925440.0000000000 -3.402823466E38 -0.17014117E39 -1.701412E38 -170141173319264429905852091742258462720.000000 -1.70141173319E38 -2E38 -170141173319264429905852091742258462720 -2E38 -1.7014117332E38 -170141173319264429905852091742258462720.0000000000 -1.701411733E38 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3000001907 -1E1 -12 -10 -1.2300000191E1 -12.3000001907 -12.30000019 -0.31415927E1 -3.141593E0 -3.141593 -3.14159274101 -3E0 -3 -3 -3.1415927410E0 -3.1415927410 -3.141592741 -0.27182817E1 -2.718282E0 -2.718282 -2.71828174591 -3E0 -3 -3 -2.7182817459E0 -2.7182817459 -2.718281746 -0.123E1 -1.230000E0 -1.230000 -1.23000001907 -1E0 -1 -1 -1.2300000191E0 -1.2300000191 -1.230000019 -0.123 -1.230000E~1 -0.123000 -0.123000003397 -1E~1 -0 -0.1 -1.2300000340E~1 -0.1230000034 -0.1230000034 -0.123E~2 -1.230000E~3 -0.001230 -0.0012300000526 -1E~3 -0 -1E~3 -1.2300000526E~3 -0.0012300001 -0.001230000053 -0.11754944E~37 -1.175494E~38 -0.000000 -1.17549435082E~38 -1E~38 -0 -1E~38 -1.1754943508E~38 -0.0000000000 -1.175494351E~38 -0.5877472E~38 -5.877472E~39 -0.000000 -5.87747175411E~39 -6E~39 -0 -6E~39 -5.8774717541E~39 -0.0000000000 -5.877471754E~39 -0.1E~44 -1.401298E~45 -0.000000 -1.40129846432E~45 -1E~45 -0 -1E~45 -1.4012984643E~45 -0.0000000000 -1.401298464E~45 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.34028235E39 -~3.402823E38 -~340282346638528859811704183484516925440.000000 -~3.40282346639E38 -~3E38 -~340282346638528859811704183484516925440 -~3E38 -~3.4028234664E38 -~340282346638528859811704183484516925440.0000000000 -~3.402823466E38 -~0.17014117E39 -~1.701412E38 -~170141173319264429905852091742258462720.000000 -~1.70141173319E38 -~2E38 -~170141173319264429905852091742258462720 -~2E38 -~1.7014117332E38 -~170141173319264429905852091742258462720.0000000000 -~1.701411733E38 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3000001907 -~1E1 -~12 -~10 -~1.2300000191E1 -~12.3000001907 -~12.30000019 -~0.31415927E1 -~3.141593E0 -~3.141593 -~3.14159274101 -~3E0 -~3 -~3 -~3.1415927410E0 -~3.1415927410 -~3.141592741 -~0.27182817E1 -~2.718282E0 -~2.718282 -~2.71828174591 -~3E0 -~3 -~3 -~2.7182817459E0 -~2.7182817459 -~2.718281746 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23000001907 -~1E0 -~1 -~1 -~1.2300000191E0 -~1.2300000191 -~1.230000019 -~0.123 -~1.230000E~1 -~0.123000 -~0.123000003397 -~1E~1 -~0 -~0.1 -~1.2300000340E~1 -~0.1230000034 -~0.1230000034 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.0012300000526 -~1E~3 -~0 -~1E~3 -~1.2300000526E~3 -~0.0012300001 -~0.001230000053 -~0.11754944E~37 -~1.175494E~38 -~0.000000 -~1.17549435082E~38 -~1E~38 -~0 -~1E~38 -~1.1754943508E~38 -~0.0000000000 -~1.175494351E~38 -~0.5877472E~38 -~5.877472E~39 -~0.000000 -~5.87747175411E~39 -~6E~39 -~0 -~6E~39 -~5.8774717541E~39 -~0.0000000000 -~5.877471754E~39 -~0.1E~44 -~1.401298E~45 -~0.000000 -~1.40129846432E~45 -~1E~45 -~0 -~1E~45 -~1.4012984643E~45 -~0.0000000000 -~1.401298464E~45 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.31415927E1 0.31415927E1 -0.27182817E1 0.27182817E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.11754944E~37 0.11754944E~37 -0.5877472E~38 0.5877472E~38 -0.1E~44 0.1E~44 -0.0 0.0 -~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.31415927E1 ~0.31415927E1 -~0.27182817E1 ~0.27182817E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.11754944E~37 ~0.11754944E~37 -~0.5877472E~38 ~0.5877472E~38 -~0.1E~44 ~0.1E~44 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.34028235E39 normal - isFinite = true isNan = false isNormal = true -0.17014117E39 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.31415927E1 normal - isFinite = true isNan = false isNormal = true -0.27182817E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.34028235E39 normal - isFinite = true isNan = false isNormal = true -~0.17014117E39 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.31415927E1 normal - isFinite = true isNan = false isNormal = true -~0.27182817E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -~0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -~0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -3.40282346639E38 -3.40282346639E38 -true -1.40129846432E~45 -1.40129846432E~45 -true -1.17549435082E~38 -1.17549435082E~38 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.34028235E39 340282346638528859811704183484516925440 0.34028235E39 -0.17014117E39 170141173319264429905852091742258462720 0.17014117E39 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.31415927E1 3 0.3E1 -0.27182817E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.11754944E~37 0 0.0 -0.5877472E~38 0 0.0 -0.1E~44 0 0.0 -0.0 0 0.0 -~0.34028235E39 ~340282346638528859811704183484516925440 ~0.34028235E39 -~0.17014117E39 ~170141173319264429905852091742258462720 ~0.17014117E39 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.31415927E1 ~4 ~0.4E1 -~0.27182817E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.11754944E~37 ~1 ~0.1E1 -~0.5877472E~38 ~1 ~0.1E1 -~0.1E~44 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25 0 -zero ~0.25 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.5 0 -zero ~0.5 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.75 0 -zero ~0.75 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195518 -1.144729853 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -1 -0.4342944622 -0.4107813537 -7.544136047 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342376947 -1.856761098 -0.2070141882 -0.9424888492 -1.564468503 -1.109053612 -2.819815874 -0.8425793648 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240715 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf -0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195518 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136047 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342376947 -1.856761098 -nan -nan -~0.9424888492 -~1.564468503 -nan -~2.819815874 -~0.8425793648 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240715 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 -~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 -~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 -~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 -~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.5877472E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754942E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 -~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 -~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.5877472E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754942E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.5877472E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.5877472E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754942E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754942E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.5877472E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754942E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.5877472E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754942E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.5877472E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.5877472E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754942E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754942E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.17976931348623157E309 = 0.9999999999999999 * 2^1024 - = 0.17976931348623157E309 -0.8988465674311579E308 = 0.9999999999999999 * 2^1023 - = 0.8988465674311579E308 -0.123E4 = 0.6005859375 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.3141592653589793E1 = 0.7853981633974483 * 2^2 - = 0.3141592653589793E1 -0.2718281828459045E1 = 0.6795704571147613 * 2^2 - = 0.2718281828459045E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.22250738585072014E~307 = 0.5 * 2^~1021 - = 0.22250738585072014E~307 -0.0 = 0.0 * 2^0 - = 0.0 -~0.17976931348623157E309 = ~0.9999999999999999 * 2^1024 - = ~0.17976931348623157E309 -~0.8988465674311579E308 = ~0.9999999999999999 * 2^1023 - = ~0.8988465674311579E308 -~0.123E4 = ~0.6005859375 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.3141592653589793E1 = ~0.7853981633974483 * 2^2 - = ~0.3141592653589793E1 -~0.2718281828459045E1 = ~0.6795704571147613 * 2^2 - = ~0.2718281828459045E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.22250738585072014E~307 = ~0.5 * 2^~1021 - = ~0.22250738585072014E~307 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large diff -Nru mlton-20130715/regression/real.mips-linux.ok mlton-20210117+dfsg/regression/real.mips-linux.ok --- mlton-20130715/regression/real.mips-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.mips-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,17876 +0,0 @@ - -Testing Real32 - -Testing fmt -0.34028235E39 -3.402823E38 -340282346638528859811704183484516925440.000000 -3.40282346639E38 -3E38 -340282346638528859811704183484516925440 -3E38 -3.4028234664E38 -340282346638528859811704183484516925440.0000000000 -3.402823466E38 -0.17014117E39 -1.701412E38 -170141173319264429905852091742258462720.000000 -1.70141173319E38 -2E38 -170141173319264429905852091742258462720 -2E38 -1.7014117332E38 -170141173319264429905852091742258462720.0000000000 -1.701411733E38 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3000001907 -1E1 -12 -10 -1.2300000191E1 -12.3000001907 -12.30000019 -0.31415927E1 -3.141593E0 -3.141593 -3.14159274101 -3E0 -3 -3 -3.1415927410E0 -3.1415927410 -3.141592741 -0.27182817E1 -2.718282E0 -2.718282 -2.71828174591 -3E0 -3 -3 -2.7182817459E0 -2.7182817459 -2.718281746 -0.123E1 -1.230000E0 -1.230000 -1.23000001907 -1E0 -1 -1 -1.2300000191E0 -1.2300000191 -1.230000019 -0.123 -1.230000E~1 -0.123000 -0.123000003397 -1E~1 -0 -0.1 -1.2300000340E~1 -0.1230000034 -0.1230000034 -0.123E~2 -1.230000E~3 -0.001230 -0.0012300000526 -1E~3 -0 -1E~3 -1.2300000526E~3 -0.0012300001 -0.001230000053 -0.11754944E~37 -1.175494E~38 -0.000000 -1.17549435082E~38 -1E~38 -0 -1E~38 -1.1754943508E~38 -0.0000000000 -1.175494351E~38 -0.5877472E~38 -5.877472E~39 -0.000000 -5.87747175411E~39 -6E~39 -0 -6E~39 -5.8774717541E~39 -0.0000000000 -5.877471754E~39 -0.1E~44 -1.401298E~45 -0.000000 -1.40129846432E~45 -1E~45 -0 -1E~45 -1.4012984643E~45 -0.0000000000 -1.401298464E~45 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.34028235E39 -~3.402823E38 -~340282346638528859811704183484516925440.000000 -~3.40282346639E38 -~3E38 -~340282346638528859811704183484516925440 -~3E38 -~3.4028234664E38 -~340282346638528859811704183484516925440.0000000000 -~3.402823466E38 -~0.17014117E39 -~1.701412E38 -~170141173319264429905852091742258462720.000000 -~1.70141173319E38 -~2E38 -~170141173319264429905852091742258462720 -~2E38 -~1.7014117332E38 -~170141173319264429905852091742258462720.0000000000 -~1.701411733E38 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3000001907 -~1E1 -~12 -~10 -~1.2300000191E1 -~12.3000001907 -~12.30000019 -~0.31415927E1 -~3.141593E0 -~3.141593 -~3.14159274101 -~3E0 -~3 -~3 -~3.1415927410E0 -~3.1415927410 -~3.141592741 -~0.27182817E1 -~2.718282E0 -~2.718282 -~2.71828174591 -~3E0 -~3 -~3 -~2.7182817459E0 -~2.7182817459 -~2.718281746 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23000001907 -~1E0 -~1 -~1 -~1.2300000191E0 -~1.2300000191 -~1.230000019 -~0.123 -~1.230000E~1 -~0.123000 -~0.123000003397 -~1E~1 -~0 -~0.1 -~1.2300000340E~1 -~0.1230000034 -~0.1230000034 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.0012300000526 -~1E~3 -~0 -~1E~3 -~1.2300000526E~3 -~0.0012300001 -~0.001230000053 -~0.11754944E~37 -~1.175494E~38 -~0.000000 -~1.17549435082E~38 -~1E~38 -~0 -~1E~38 -~1.1754943508E~38 -~0.0000000000 -~1.175494351E~38 -~0.5877472E~38 -~5.877472E~39 -~0.000000 -~5.87747175411E~39 -~6E~39 -~0 -~6E~39 -~5.8774717541E~39 -~0.0000000000 -~5.877471754E~39 -~0.1E~44 -~1.401298E~45 -~0.000000 -~1.40129846432E~45 -~1E~45 -~0 -~1E~45 -~1.4012984643E~45 -~0.0000000000 -~1.401298464E~45 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.31415927E1 0.31415927E1 -0.27182817E1 0.27182817E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.11754944E~37 0.11754944E~37 -0.5877472E~38 0.5877472E~38 -0.1E~44 0.1E~44 -0.0 0.0 -~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.31415927E1 ~0.31415927E1 -~0.27182817E1 ~0.27182817E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.11754944E~37 ~0.11754944E~37 -~0.5877472E~38 ~0.5877472E~38 -~0.1E~44 ~0.1E~44 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.34028235E39 normal - isFinite = true isNan = false isNormal = true -0.17014117E39 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.31415927E1 normal - isFinite = true isNan = false isNormal = true -0.27182817E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.34028235E39 normal - isFinite = true isNan = false isNormal = true -~0.17014117E39 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.31415927E1 normal - isFinite = true isNan = false isNormal = true -~0.27182817E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -~0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -~0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -3.40282346639E38 -3.40282346639E38 -true -1.40129846432E~45 -1.40129846432E~45 -true -1.17549435082E~38 -1.17549435082E~38 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.34028235E39 340282346638528859811704183484516925440 0.34028235E39 -0.17014117E39 170141173319264429905852091742258462720 0.17014117E39 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.31415927E1 3 0.3E1 -0.27182817E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.11754944E~37 0 0.0 -0.5877472E~38 0 0.0 -0.1E~44 0 0.0 -0.0 0 0.0 -~0.34028235E39 ~340282346638528859811704183484516925440 ~0.34028235E39 -~0.17014117E39 ~170141173319264429905852091742258462720 ~0.17014117E39 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.31415927E1 ~4 ~0.4E1 -~0.27182817E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.11754944E~37 ~1 ~0.1E1 -~0.5877472E~38 ~1 ~0.1E1 -~0.1E~44 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25 0 -zero ~0.25 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.5 0 -zero ~0.5 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.75 0 -zero ~0.75 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195518 -1.144729853 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -1 -0.4342944622 -0.4107813537 -7.544136047 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342376947 -1.856761098 -0.2070141882 -0.9424888492 -1.564468503 -1.109053612 -2.819815874 -0.8425793648 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240715 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf -0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195518 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136047 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342376947 -1.856761098 -nan -nan -~0.9424888492 -~1.564468503 -nan -~2.819815874 -~0.8425793648 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240715 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 -~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 -~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 -~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 -~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.5877472E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754942E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 -~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 -~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.5877472E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754942E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.5877472E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.5877472E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754942E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754942E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.5877472E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754942E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.5877472E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754942E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.5877472E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.5877472E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754942E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754942E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.17976931348623157E309 = 0.9999999999999999 * 2^1024 - = 0.17976931348623157E309 -0.8988465674311579E308 = 0.9999999999999999 * 2^1023 - = 0.8988465674311579E308 -0.123E4 = 0.6005859375 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.3141592653589793E1 = 0.7853981633974483 * 2^2 - = 0.3141592653589793E1 -0.2718281828459045E1 = 0.6795704571147613 * 2^2 - = 0.2718281828459045E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.22250738585072014E~307 = 0.5 * 2^~1021 - = 0.22250738585072014E~307 -0.0 = 0.0 * 2^0 - = 0.0 -~0.17976931348623157E309 = ~0.9999999999999999 * 2^1024 - = ~0.17976931348623157E309 -~0.8988465674311579E308 = ~0.9999999999999999 * 2^1023 - = ~0.8988465674311579E308 -~0.123E4 = ~0.6005859375 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.3141592653589793E1 = ~0.7853981633974483 * 2^2 - = ~0.3141592653589793E1 -~0.2718281828459045E1 = ~0.6795704571147613 * 2^2 - = ~0.2718281828459045E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.22250738585072014E~307 = ~0.5 * 2^~1021 - = ~0.22250738585072014E~307 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large diff -Nru mlton-20130715/regression/real.ok mlton-20210117+dfsg/regression/real.ok --- mlton-20130715/regression/real.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.ok 2021-12-28 17:19:36.000000000 +0000 @@ -616,17212 +616,25220 @@ Testing max, min -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195423 -1.144729972 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -0.9999999404 -0.4342944622 -0.4107813537 -7.544136524 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342376947 -1.856761098 -0.2070141882 -0.9424887896 -1.564468503 -1.109053612 -2.819815874 -0.8425793052 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240715 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 +Testing Real.{~,*,+,-,/,nextAfter,rem} +~ (0.34028235E39) = ~0.34028235E39 +~ (0.17014117E39) = ~0.17014117E39 +~ (0.123E4) = ~0.123E4 +~ (0.123E2) = ~0.123E2 +~ (0.31415927E1) = ~0.31415927E1 +~ (0.27182817E1) = ~0.27182817E1 +~ (0.123E1) = ~0.123E1 +~ (0.123) = ~0.123 +~ (0.123E~2) = ~0.123E~2 +~ (0.11754944E~37) = ~0.11754944E~37 +~ (0.5877472E~38) = ~0.5877472E~38 +~ (0.1E~44) = ~0.1E~44 +~ (0.0) = ~0.0 +~ (~0.34028235E39) = 0.34028235E39 +~ (~0.17014117E39) = 0.17014117E39 +~ (~0.123E4) = 0.123E4 +~ (~0.123E2) = 0.123E2 +~ (~0.31415927E1) = 0.31415927E1 +~ (~0.27182817E1) = 0.27182817E1 +~ (~0.123E1) = 0.123E1 +~ (~0.123) = 0.123 +~ (~0.123E~2) = 0.123E~2 +~ (~0.11754944E~37) = 0.11754944E~37 +~ (~0.5877472E~38) = 0.5877472E~38 +~ (~0.1E~44) = 0.1E~44 +~ (~0.0) = 0.0 +~ (inf) = ~inf +~ (~inf) = inf +~ (nan) = nan +~ (inf) = ~inf +* (0.34028235E39, 0.34028235E39) = inf ++ (0.34028235E39, 0.34028235E39) = inf +- (0.34028235E39, 0.34028235E39) = 0.0 +/ (0.34028235E39, 0.34028235E39) = 0.1E1 +nextAfter (0.34028235E39, 0.34028235E39) = 0.34028235E39 +rem (0.34028235E39, 0.34028235E39) = 0.0 +* (0.34028235E39, 0.17014117E39) = inf ++ (0.34028235E39, 0.17014117E39) = inf +- (0.34028235E39, 0.17014117E39) = 0.17014117E39 +/ (0.34028235E39, 0.17014117E39) = 0.2E1 +nextAfter (0.34028235E39, 0.17014117E39) = 0.34028233E39 +rem (0.34028235E39, 0.17014117E39) = 0.0 +* (0.34028235E39, 0.123E4) = inf ++ (0.34028235E39, 0.123E4) = 0.34028235E39 +- (0.34028235E39, 0.123E4) = 0.34028235E39 +/ (0.34028235E39, 0.123E4) = 0.2766523E36 +nextAfter (0.34028235E39, 0.123E4) = 0.34028233E39 +rem (0.34028235E39, 0.123E4) = 0.2028241E32 +* (0.34028235E39, 0.123E2) = inf ++ (0.34028235E39, 0.123E2) = 0.34028235E39 +- (0.34028235E39, 0.123E2) = 0.34028235E39 +/ (0.34028235E39, 0.123E2) = 0.27665232E38 +nextAfter (0.34028235E39, 0.123E2) = 0.34028233E39 +rem (0.34028235E39, 0.123E2) = ~inf +* (0.34028235E39, 0.31415927E1) = inf ++ (0.34028235E39, 0.31415927E1) = 0.34028235E39 +- (0.34028235E39, 0.31415927E1) = 0.34028235E39 +/ (0.34028235E39, 0.31415927E1) = 0.10831523E39 +nextAfter (0.34028235E39, 0.31415927E1) = 0.34028233E39 +rem (0.34028235E39, 0.31415927E1) = 0.2028241E32 +* (0.34028235E39, 0.27182817E1) = inf ++ (0.34028235E39, 0.27182817E1) = 0.34028235E39 +- (0.34028235E39, 0.27182817E1) = 0.34028235E39 +/ (0.34028235E39, 0.27182817E1) = 0.12518288E39 +nextAfter (0.34028235E39, 0.27182817E1) = 0.34028233E39 +rem (0.34028235E39, 0.27182817E1) = 0.0 +* (0.34028235E39, 0.123E1) = inf ++ (0.34028235E39, 0.123E1) = 0.34028235E39 +- (0.34028235E39, 0.123E1) = 0.34028235E39 +/ (0.34028235E39, 0.123E1) = 0.27665231E39 +nextAfter (0.34028235E39, 0.123E1) = 0.34028233E39 +rem (0.34028235E39, 0.123E1) = 0.0 +* (0.34028235E39, 0.123) = 0.4185473E38 ++ (0.34028235E39, 0.123) = 0.34028235E39 +- (0.34028235E39, 0.123) = 0.34028235E39 +/ (0.34028235E39, 0.123) = inf +nextAfter (0.34028235E39, 0.123) = 0.34028233E39 +rem (0.34028235E39, 0.123) = ~inf +* (0.34028235E39, 0.123E~2) = 0.4185473E36 ++ (0.34028235E39, 0.123E~2) = 0.34028235E39 +- (0.34028235E39, 0.123E~2) = 0.34028235E39 +/ (0.34028235E39, 0.123E~2) = inf +nextAfter (0.34028235E39, 0.123E~2) = 0.34028233E39 +rem (0.34028235E39, 0.123E~2) = ~inf +* (0.34028235E39, 0.11754944E~37) = 0.39999998E1 ++ (0.34028235E39, 0.11754944E~37) = 0.34028235E39 +- (0.34028235E39, 0.11754944E~37) = 0.34028235E39 +/ (0.34028235E39, 0.11754944E~37) = inf +nextAfter (0.34028235E39, 0.11754944E~37) = 0.34028233E39 +rem (0.34028235E39, 0.11754944E~37) = ~inf +* (0.34028235E39, 0.5877472E~38) = 0.19999999E1 ++ (0.34028235E39, 0.5877472E~38) = 0.34028235E39 +- (0.34028235E39, 0.5877472E~38) = 0.34028235E39 +/ (0.34028235E39, 0.5877472E~38) = inf +nextAfter (0.34028235E39, 0.5877472E~38) = 0.34028233E39 +rem (0.34028235E39, 0.5877472E~38) = ~inf +* (0.34028235E39, 0.1E~44) = 0.47683713E~6 ++ (0.34028235E39, 0.1E~44) = 0.34028235E39 +- (0.34028235E39, 0.1E~44) = 0.34028235E39 +/ (0.34028235E39, 0.1E~44) = inf +nextAfter (0.34028235E39, 0.1E~44) = 0.34028233E39 +rem (0.34028235E39, 0.1E~44) = ~inf +* (0.34028235E39, 0.0) = 0.0 ++ (0.34028235E39, 0.0) = 0.34028235E39 +- (0.34028235E39, 0.0) = 0.34028235E39 +/ (0.34028235E39, 0.0) = inf +nextAfter (0.34028235E39, 0.0) = 0.34028233E39 +rem (0.34028235E39, 0.0) = nan +* (0.34028235E39, ~0.34028235E39) = ~inf ++ (0.34028235E39, ~0.34028235E39) = 0.0 +- (0.34028235E39, ~0.34028235E39) = inf +/ (0.34028235E39, ~0.34028235E39) = ~0.1E1 +nextAfter (0.34028235E39, ~0.34028235E39) = 0.34028233E39 +rem (0.34028235E39, ~0.34028235E39) = 0.0 +* (0.34028235E39, ~0.17014117E39) = ~inf ++ (0.34028235E39, ~0.17014117E39) = 0.17014117E39 +- (0.34028235E39, ~0.17014117E39) = inf +/ (0.34028235E39, ~0.17014117E39) = ~0.2E1 +nextAfter (0.34028235E39, ~0.17014117E39) = 0.34028233E39 +rem (0.34028235E39, ~0.17014117E39) = 0.0 +* (0.34028235E39, ~0.123E4) = ~inf ++ (0.34028235E39, ~0.123E4) = 0.34028235E39 +- (0.34028235E39, ~0.123E4) = 0.34028235E39 +/ (0.34028235E39, ~0.123E4) = ~0.2766523E36 +nextAfter (0.34028235E39, ~0.123E4) = 0.34028233E39 +rem (0.34028235E39, ~0.123E4) = 0.2028241E32 +* (0.34028235E39, ~0.123E2) = ~inf ++ (0.34028235E39, ~0.123E2) = 0.34028235E39 +- (0.34028235E39, ~0.123E2) = 0.34028235E39 +/ (0.34028235E39, ~0.123E2) = ~0.27665232E38 +nextAfter (0.34028235E39, ~0.123E2) = 0.34028233E39 +rem (0.34028235E39, ~0.123E2) = ~inf +* (0.34028235E39, ~0.31415927E1) = ~inf ++ (0.34028235E39, ~0.31415927E1) = 0.34028235E39 +- (0.34028235E39, ~0.31415927E1) = 0.34028235E39 +/ (0.34028235E39, ~0.31415927E1) = ~0.10831523E39 +nextAfter (0.34028235E39, ~0.31415927E1) = 0.34028233E39 +rem (0.34028235E39, ~0.31415927E1) = 0.2028241E32 +* (0.34028235E39, ~0.27182817E1) = ~inf ++ (0.34028235E39, ~0.27182817E1) = 0.34028235E39 +- (0.34028235E39, ~0.27182817E1) = 0.34028235E39 +/ (0.34028235E39, ~0.27182817E1) = ~0.12518288E39 +nextAfter (0.34028235E39, ~0.27182817E1) = 0.34028233E39 +rem (0.34028235E39, ~0.27182817E1) = 0.0 +* (0.34028235E39, ~0.123E1) = ~inf ++ (0.34028235E39, ~0.123E1) = 0.34028235E39 +- (0.34028235E39, ~0.123E1) = 0.34028235E39 +/ (0.34028235E39, ~0.123E1) = ~0.27665231E39 +nextAfter (0.34028235E39, ~0.123E1) = 0.34028233E39 +rem (0.34028235E39, ~0.123E1) = 0.0 +* (0.34028235E39, ~0.123) = ~0.4185473E38 ++ (0.34028235E39, ~0.123) = 0.34028235E39 +- (0.34028235E39, ~0.123) = 0.34028235E39 +/ (0.34028235E39, ~0.123) = ~inf +nextAfter (0.34028235E39, ~0.123) = 0.34028233E39 +rem (0.34028235E39, ~0.123) = ~inf +* (0.34028235E39, ~0.123E~2) = ~0.4185473E36 ++ (0.34028235E39, ~0.123E~2) = 0.34028235E39 +- (0.34028235E39, ~0.123E~2) = 0.34028235E39 +/ (0.34028235E39, ~0.123E~2) = ~inf +nextAfter (0.34028235E39, ~0.123E~2) = 0.34028233E39 +rem (0.34028235E39, ~0.123E~2) = ~inf +* (0.34028235E39, ~0.11754944E~37) = ~0.39999998E1 ++ (0.34028235E39, ~0.11754944E~37) = 0.34028235E39 +- (0.34028235E39, ~0.11754944E~37) = 0.34028235E39 +/ (0.34028235E39, ~0.11754944E~37) = ~inf +nextAfter (0.34028235E39, ~0.11754944E~37) = 0.34028233E39 +rem (0.34028235E39, ~0.11754944E~37) = ~inf +* (0.34028235E39, ~0.5877472E~38) = ~0.19999999E1 ++ (0.34028235E39, ~0.5877472E~38) = 0.34028235E39 +- (0.34028235E39, ~0.5877472E~38) = 0.34028235E39 +/ (0.34028235E39, ~0.5877472E~38) = ~inf +nextAfter (0.34028235E39, ~0.5877472E~38) = 0.34028233E39 +rem (0.34028235E39, ~0.5877472E~38) = ~inf +* (0.34028235E39, ~0.1E~44) = ~0.47683713E~6 ++ (0.34028235E39, ~0.1E~44) = 0.34028235E39 +- (0.34028235E39, ~0.1E~44) = 0.34028235E39 +/ (0.34028235E39, ~0.1E~44) = ~inf +nextAfter (0.34028235E39, ~0.1E~44) = 0.34028233E39 +rem (0.34028235E39, ~0.1E~44) = ~inf +* (0.34028235E39, ~0.0) = ~0.0 ++ (0.34028235E39, ~0.0) = 0.34028235E39 +- (0.34028235E39, ~0.0) = 0.34028235E39 +/ (0.34028235E39, ~0.0) = ~inf +nextAfter (0.34028235E39, ~0.0) = 0.34028233E39 +rem (0.34028235E39, ~0.0) = nan +* (0.34028235E39, inf) = inf ++ (0.34028235E39, inf) = inf +- (0.34028235E39, inf) = ~inf +/ (0.34028235E39, inf) = 0.0 +nextAfter (0.34028235E39, inf) = inf +rem (0.34028235E39, inf) = 0.34028235E39 +* (0.34028235E39, ~inf) = ~inf ++ (0.34028235E39, ~inf) = ~inf +- (0.34028235E39, ~inf) = inf +/ (0.34028235E39, ~inf) = ~0.0 +nextAfter (0.34028235E39, ~inf) = 0.34028233E39 +rem (0.34028235E39, ~inf) = 0.34028235E39 +* (0.34028235E39, nan) = nan ++ (0.34028235E39, nan) = nan +- (0.34028235E39, nan) = nan +/ (0.34028235E39, nan) = nan +nextAfter (0.34028235E39, nan) = nan +rem (0.34028235E39, nan) = nan +* (0.34028235E39, inf) = inf ++ (0.34028235E39, inf) = inf +- (0.34028235E39, inf) = ~inf +/ (0.34028235E39, inf) = 0.0 +nextAfter (0.34028235E39, inf) = inf +rem (0.34028235E39, inf) = 0.34028235E39 +* (0.17014117E39, 0.34028235E39) = inf ++ (0.17014117E39, 0.34028235E39) = inf +- (0.17014117E39, 0.34028235E39) = ~0.17014117E39 +/ (0.17014117E39, 0.34028235E39) = 0.5 +nextAfter (0.17014117E39, 0.34028235E39) = 0.17014118E39 +rem (0.17014117E39, 0.34028235E39) = 0.17014117E39 +* (0.17014117E39, 0.17014117E39) = inf ++ (0.17014117E39, 0.17014117E39) = 0.34028235E39 +- (0.17014117E39, 0.17014117E39) = 0.0 +/ (0.17014117E39, 0.17014117E39) = 0.1E1 +nextAfter (0.17014117E39, 0.17014117E39) = 0.17014117E39 +rem (0.17014117E39, 0.17014117E39) = 0.0 +* (0.17014117E39, 0.123E4) = inf ++ (0.17014117E39, 0.123E4) = 0.17014117E39 +- (0.17014117E39, 0.123E4) = 0.17014117E39 +/ (0.17014117E39, 0.123E4) = 0.13832615E36 +nextAfter (0.17014117E39, 0.123E4) = 0.17014116E39 +rem (0.17014117E39, 0.123E4) = 0.10141205E32 +* (0.17014117E39, 0.123E2) = inf ++ (0.17014117E39, 0.123E2) = 0.17014117E39 +- (0.17014117E39, 0.123E2) = 0.17014117E39 +/ (0.17014117E39, 0.123E2) = 0.13832616E38 +nextAfter (0.17014117E39, 0.123E2) = 0.17014116E39 +rem (0.17014117E39, 0.123E2) = ~0.10141205E32 +* (0.17014117E39, 0.31415927E1) = inf ++ (0.17014117E39, 0.31415927E1) = 0.17014117E39 +- (0.17014117E39, 0.31415927E1) = 0.17014117E39 +/ (0.17014117E39, 0.31415927E1) = 0.54157613E38 +nextAfter (0.17014117E39, 0.31415927E1) = 0.17014116E39 +rem (0.17014117E39, 0.31415927E1) = 0.10141205E32 +* (0.17014117E39, 0.27182817E1) = inf ++ (0.17014117E39, 0.27182817E1) = 0.17014117E39 +- (0.17014117E39, 0.27182817E1) = 0.17014117E39 +/ (0.17014117E39, 0.27182817E1) = 0.6259144E38 +nextAfter (0.17014117E39, 0.27182817E1) = 0.17014116E39 +rem (0.17014117E39, 0.27182817E1) = 0.0 +* (0.17014117E39, 0.123E1) = 0.20927364E39 ++ (0.17014117E39, 0.123E1) = 0.17014117E39 +- (0.17014117E39, 0.123E1) = 0.17014117E39 +/ (0.17014117E39, 0.123E1) = 0.13832616E39 +nextAfter (0.17014117E39, 0.123E1) = 0.17014116E39 +rem (0.17014117E39, 0.123E1) = 0.0 +* (0.17014117E39, 0.123) = 0.20927365E38 ++ (0.17014117E39, 0.123) = 0.17014117E39 +- (0.17014117E39, 0.123) = 0.17014117E39 +/ (0.17014117E39, 0.123) = inf +nextAfter (0.17014117E39, 0.123) = 0.17014116E39 +rem (0.17014117E39, 0.123) = ~inf +* (0.17014117E39, 0.123E~2) = 0.20927364E36 ++ (0.17014117E39, 0.123E~2) = 0.17014117E39 +- (0.17014117E39, 0.123E~2) = 0.17014117E39 +/ (0.17014117E39, 0.123E~2) = inf +nextAfter (0.17014117E39, 0.123E~2) = 0.17014116E39 +rem (0.17014117E39, 0.123E~2) = ~inf +* (0.17014117E39, 0.11754944E~37) = 0.19999999E1 ++ (0.17014117E39, 0.11754944E~37) = 0.17014117E39 +- (0.17014117E39, 0.11754944E~37) = 0.17014117E39 +/ (0.17014117E39, 0.11754944E~37) = inf +nextAfter (0.17014117E39, 0.11754944E~37) = 0.17014116E39 +rem (0.17014117E39, 0.11754944E~37) = ~inf +* (0.17014117E39, 0.5877472E~38) = 0.99999994 ++ (0.17014117E39, 0.5877472E~38) = 0.17014117E39 +- (0.17014117E39, 0.5877472E~38) = 0.17014117E39 +/ (0.17014117E39, 0.5877472E~38) = inf +nextAfter (0.17014117E39, 0.5877472E~38) = 0.17014116E39 +rem (0.17014117E39, 0.5877472E~38) = ~inf +* (0.17014117E39, 0.1E~44) = 0.23841856E~6 ++ (0.17014117E39, 0.1E~44) = 0.17014117E39 +- (0.17014117E39, 0.1E~44) = 0.17014117E39 +/ (0.17014117E39, 0.1E~44) = inf +nextAfter (0.17014117E39, 0.1E~44) = 0.17014116E39 +rem (0.17014117E39, 0.1E~44) = ~inf +* (0.17014117E39, 0.0) = 0.0 ++ (0.17014117E39, 0.0) = 0.17014117E39 +- (0.17014117E39, 0.0) = 0.17014117E39 +/ (0.17014117E39, 0.0) = inf +nextAfter (0.17014117E39, 0.0) = 0.17014116E39 +rem (0.17014117E39, 0.0) = nan +* (0.17014117E39, ~0.34028235E39) = ~inf ++ (0.17014117E39, ~0.34028235E39) = ~0.17014117E39 +- (0.17014117E39, ~0.34028235E39) = inf +/ (0.17014117E39, ~0.34028235E39) = ~0.5 +nextAfter (0.17014117E39, ~0.34028235E39) = 0.17014116E39 +rem (0.17014117E39, ~0.34028235E39) = 0.17014117E39 +* (0.17014117E39, ~0.17014117E39) = ~inf ++ (0.17014117E39, ~0.17014117E39) = 0.0 +- (0.17014117E39, ~0.17014117E39) = 0.34028235E39 +/ (0.17014117E39, ~0.17014117E39) = ~0.1E1 +nextAfter (0.17014117E39, ~0.17014117E39) = 0.17014116E39 +rem (0.17014117E39, ~0.17014117E39) = 0.0 +* (0.17014117E39, ~0.123E4) = ~inf ++ (0.17014117E39, ~0.123E4) = 0.17014117E39 +- (0.17014117E39, ~0.123E4) = 0.17014117E39 +/ (0.17014117E39, ~0.123E4) = ~0.13832615E36 +nextAfter (0.17014117E39, ~0.123E4) = 0.17014116E39 +rem (0.17014117E39, ~0.123E4) = 0.10141205E32 +* (0.17014117E39, ~0.123E2) = ~inf ++ (0.17014117E39, ~0.123E2) = 0.17014117E39 +- (0.17014117E39, ~0.123E2) = 0.17014117E39 +/ (0.17014117E39, ~0.123E2) = ~0.13832616E38 +nextAfter (0.17014117E39, ~0.123E2) = 0.17014116E39 +rem (0.17014117E39, ~0.123E2) = ~0.10141205E32 +* (0.17014117E39, ~0.31415927E1) = ~inf ++ (0.17014117E39, ~0.31415927E1) = 0.17014117E39 +- (0.17014117E39, ~0.31415927E1) = 0.17014117E39 +/ (0.17014117E39, ~0.31415927E1) = ~0.54157613E38 +nextAfter (0.17014117E39, ~0.31415927E1) = 0.17014116E39 +rem (0.17014117E39, ~0.31415927E1) = 0.10141205E32 +* (0.17014117E39, ~0.27182817E1) = ~inf ++ (0.17014117E39, ~0.27182817E1) = 0.17014117E39 +- (0.17014117E39, ~0.27182817E1) = 0.17014117E39 +/ (0.17014117E39, ~0.27182817E1) = ~0.6259144E38 +nextAfter (0.17014117E39, ~0.27182817E1) = 0.17014116E39 +rem (0.17014117E39, ~0.27182817E1) = 0.0 +* (0.17014117E39, ~0.123E1) = ~0.20927364E39 ++ (0.17014117E39, ~0.123E1) = 0.17014117E39 +- (0.17014117E39, ~0.123E1) = 0.17014117E39 +/ (0.17014117E39, ~0.123E1) = ~0.13832616E39 +nextAfter (0.17014117E39, ~0.123E1) = 0.17014116E39 +rem (0.17014117E39, ~0.123E1) = 0.0 +* (0.17014117E39, ~0.123) = ~0.20927365E38 ++ (0.17014117E39, ~0.123) = 0.17014117E39 +- (0.17014117E39, ~0.123) = 0.17014117E39 +/ (0.17014117E39, ~0.123) = ~inf +nextAfter (0.17014117E39, ~0.123) = 0.17014116E39 +rem (0.17014117E39, ~0.123) = ~inf +* (0.17014117E39, ~0.123E~2) = ~0.20927364E36 ++ (0.17014117E39, ~0.123E~2) = 0.17014117E39 +- (0.17014117E39, ~0.123E~2) = 0.17014117E39 +/ (0.17014117E39, ~0.123E~2) = ~inf +nextAfter (0.17014117E39, ~0.123E~2) = 0.17014116E39 +rem (0.17014117E39, ~0.123E~2) = ~inf +* (0.17014117E39, ~0.11754944E~37) = ~0.19999999E1 ++ (0.17014117E39, ~0.11754944E~37) = 0.17014117E39 +- (0.17014117E39, ~0.11754944E~37) = 0.17014117E39 +/ (0.17014117E39, ~0.11754944E~37) = ~inf +nextAfter (0.17014117E39, ~0.11754944E~37) = 0.17014116E39 +rem (0.17014117E39, ~0.11754944E~37) = ~inf +* (0.17014117E39, ~0.5877472E~38) = ~0.99999994 ++ (0.17014117E39, ~0.5877472E~38) = 0.17014117E39 +- (0.17014117E39, ~0.5877472E~38) = 0.17014117E39 +/ (0.17014117E39, ~0.5877472E~38) = ~inf +nextAfter (0.17014117E39, ~0.5877472E~38) = 0.17014116E39 +rem (0.17014117E39, ~0.5877472E~38) = ~inf +* (0.17014117E39, ~0.1E~44) = ~0.23841856E~6 ++ (0.17014117E39, ~0.1E~44) = 0.17014117E39 +- (0.17014117E39, ~0.1E~44) = 0.17014117E39 +/ (0.17014117E39, ~0.1E~44) = ~inf +nextAfter (0.17014117E39, ~0.1E~44) = 0.17014116E39 +rem (0.17014117E39, ~0.1E~44) = ~inf +* (0.17014117E39, ~0.0) = ~0.0 ++ (0.17014117E39, ~0.0) = 0.17014117E39 +- (0.17014117E39, ~0.0) = 0.17014117E39 +/ (0.17014117E39, ~0.0) = ~inf +nextAfter (0.17014117E39, ~0.0) = 0.17014116E39 +rem (0.17014117E39, ~0.0) = nan +* (0.17014117E39, inf) = inf ++ (0.17014117E39, inf) = inf +- (0.17014117E39, inf) = ~inf +/ (0.17014117E39, inf) = 0.0 +nextAfter (0.17014117E39, inf) = 0.17014118E39 +rem (0.17014117E39, inf) = 0.17014117E39 +* (0.17014117E39, ~inf) = ~inf ++ (0.17014117E39, ~inf) = ~inf +- (0.17014117E39, ~inf) = inf +/ (0.17014117E39, ~inf) = ~0.0 +nextAfter (0.17014117E39, ~inf) = 0.17014116E39 +rem (0.17014117E39, ~inf) = 0.17014117E39 +* (0.17014117E39, nan) = nan ++ (0.17014117E39, nan) = nan +- (0.17014117E39, nan) = nan +/ (0.17014117E39, nan) = nan +nextAfter (0.17014117E39, nan) = nan +rem (0.17014117E39, nan) = nan +* (0.17014117E39, inf) = inf ++ (0.17014117E39, inf) = inf +- (0.17014117E39, inf) = ~inf +/ (0.17014117E39, inf) = 0.0 +nextAfter (0.17014117E39, inf) = 0.17014118E39 +rem (0.17014117E39, inf) = 0.17014117E39 +* (0.123E4, 0.34028235E39) = inf ++ (0.123E4, 0.34028235E39) = 0.34028235E39 +- (0.123E4, 0.34028235E39) = ~0.34028235E39 +/ (0.123E4, 0.34028235E39) = 0.36146455E~35 +nextAfter (0.123E4, 0.34028235E39) = 0.12300001E4 +rem (0.123E4, 0.34028235E39) = 0.123E4 +* (0.123E4, 0.17014117E39) = inf ++ (0.123E4, 0.17014117E39) = 0.17014117E39 +- (0.123E4, 0.17014117E39) = ~0.17014117E39 +/ (0.123E4, 0.17014117E39) = 0.7229291E~35 +nextAfter (0.123E4, 0.17014117E39) = 0.12300001E4 +rem (0.123E4, 0.17014117E39) = 0.123E4 +* (0.123E4, 0.123E4) = 0.15129E7 ++ (0.123E4, 0.123E4) = 0.246E4 +- (0.123E4, 0.123E4) = 0.0 +/ (0.123E4, 0.123E4) = 0.1E1 +nextAfter (0.123E4, 0.123E4) = 0.123E4 +rem (0.123E4, 0.123E4) = 0.0 +* (0.123E4, 0.123E2) = 0.15129E5 ++ (0.123E4, 0.123E2) = 0.12423E4 +- (0.123E4, 0.123E2) = 0.12177E4 +/ (0.123E4, 0.123E2) = 0.1E3 +nextAfter (0.123E4, 0.123E2) = 0.12299999E4 +rem (0.123E4, 0.123E2) = 0.0 +* (0.123E4, 0.31415927E1) = 0.38641592E4 ++ (0.123E4, 0.31415927E1) = 0.12331416E4 +- (0.123E4, 0.31415927E1) = 0.12268584E4 +/ (0.123E4, 0.31415927E1) = 0.39152115E3 +nextAfter (0.123E4, 0.31415927E1) = 0.12299999E4 +rem (0.123E4, 0.31415927E1) = 0.1637207E1 +* (0.123E4, 0.27182817E1) = 0.33434866E4 ++ (0.123E4, 0.27182817E1) = 0.12327183E4 +- (0.123E4, 0.27182817E1) = 0.12272817E4 +/ (0.123E4, 0.27182817E1) = 0.45249173E3 +nextAfter (0.123E4, 0.27182817E1) = 0.12299999E4 +rem (0.123E4, 0.27182817E1) = 0.13366699E1 +* (0.123E4, 0.123E1) = 0.15129E4 ++ (0.123E4, 0.123E1) = 0.123123E4 +- (0.123E4, 0.123E1) = 0.122877E4 +/ (0.123E4, 0.123E1) = 0.1E4 +nextAfter (0.123E4, 0.123E1) = 0.12299999E4 +rem (0.123E4, 0.123E1) = 0.0 +* (0.123E4, 0.123) = 0.15129001E3 ++ (0.123E4, 0.123) = 0.1230123E4 +- (0.123E4, 0.123) = 0.1229877E4 +/ (0.123E4, 0.123) = 0.1E5 +nextAfter (0.123E4, 0.123) = 0.12299999E4 +rem (0.123E4, 0.123) = 0.0 +* (0.123E4, 0.123E~2) = 0.15129001E1 ++ (0.123E4, 0.123E~2) = 0.12300012E4 +- (0.123E4, 0.123E~2) = 0.12299988E4 +/ (0.123E4, 0.123E~2) = 0.99999994E6 +nextAfter (0.123E4, 0.123E~2) = 0.12299999E4 +rem (0.123E4, 0.123E~2) = 0.12207031E~2 +* (0.123E4, 0.11754944E~37) = 0.1445858E~34 ++ (0.123E4, 0.11754944E~37) = 0.123E4 +- (0.123E4, 0.11754944E~37) = 0.123E4 +/ (0.123E4, 0.11754944E~37) = inf +nextAfter (0.123E4, 0.11754944E~37) = 0.12299999E4 +rem (0.123E4, 0.11754944E~37) = ~inf +* (0.123E4, 0.5877472E~38) = 0.722929E~35 ++ (0.123E4, 0.5877472E~38) = 0.123E4 +- (0.123E4, 0.5877472E~38) = 0.123E4 +/ (0.123E4, 0.5877472E~38) = inf +nextAfter (0.123E4, 0.5877472E~38) = 0.12299999E4 +rem (0.123E4, 0.5877472E~38) = ~inf +* (0.123E4, 0.1E~44) = 0.1724E~41 ++ (0.123E4, 0.1E~44) = 0.123E4 +- (0.123E4, 0.1E~44) = 0.123E4 +/ (0.123E4, 0.1E~44) = inf +nextAfter (0.123E4, 0.1E~44) = 0.12299999E4 +rem (0.123E4, 0.1E~44) = ~inf +* (0.123E4, 0.0) = 0.0 ++ (0.123E4, 0.0) = 0.123E4 +- (0.123E4, 0.0) = 0.123E4 +/ (0.123E4, 0.0) = inf +nextAfter (0.123E4, 0.0) = 0.12299999E4 +rem (0.123E4, 0.0) = nan +* (0.123E4, ~0.34028235E39) = ~inf ++ (0.123E4, ~0.34028235E39) = ~0.34028235E39 +- (0.123E4, ~0.34028235E39) = 0.34028235E39 +/ (0.123E4, ~0.34028235E39) = ~0.36146455E~35 +nextAfter (0.123E4, ~0.34028235E39) = 0.12299999E4 +rem (0.123E4, ~0.34028235E39) = 0.123E4 +* (0.123E4, ~0.17014117E39) = ~inf ++ (0.123E4, ~0.17014117E39) = ~0.17014117E39 +- (0.123E4, ~0.17014117E39) = 0.17014117E39 +/ (0.123E4, ~0.17014117E39) = ~0.7229291E~35 +nextAfter (0.123E4, ~0.17014117E39) = 0.12299999E4 +rem (0.123E4, ~0.17014117E39) = 0.123E4 +* (0.123E4, ~0.123E4) = ~0.15129E7 ++ (0.123E4, ~0.123E4) = 0.0 +- (0.123E4, ~0.123E4) = 0.246E4 +/ (0.123E4, ~0.123E4) = ~0.1E1 +nextAfter (0.123E4, ~0.123E4) = 0.12299999E4 +rem (0.123E4, ~0.123E4) = 0.0 +* (0.123E4, ~0.123E2) = ~0.15129E5 ++ (0.123E4, ~0.123E2) = 0.12177E4 +- (0.123E4, ~0.123E2) = 0.12423E4 +/ (0.123E4, ~0.123E2) = ~0.1E3 +nextAfter (0.123E4, ~0.123E2) = 0.12299999E4 +rem (0.123E4, ~0.123E2) = 0.0 +* (0.123E4, ~0.31415927E1) = ~0.38641592E4 ++ (0.123E4, ~0.31415927E1) = 0.12268584E4 +- (0.123E4, ~0.31415927E1) = 0.12331416E4 +/ (0.123E4, ~0.31415927E1) = ~0.39152115E3 +nextAfter (0.123E4, ~0.31415927E1) = 0.12299999E4 +rem (0.123E4, ~0.31415927E1) = 0.1637207E1 +* (0.123E4, ~0.27182817E1) = ~0.33434866E4 ++ (0.123E4, ~0.27182817E1) = 0.12272817E4 +- (0.123E4, ~0.27182817E1) = 0.12327183E4 +/ (0.123E4, ~0.27182817E1) = ~0.45249173E3 +nextAfter (0.123E4, ~0.27182817E1) = 0.12299999E4 +rem (0.123E4, ~0.27182817E1) = 0.13366699E1 +* (0.123E4, ~0.123E1) = ~0.15129E4 ++ (0.123E4, ~0.123E1) = 0.122877E4 +- (0.123E4, ~0.123E1) = 0.123123E4 +/ (0.123E4, ~0.123E1) = ~0.1E4 +nextAfter (0.123E4, ~0.123E1) = 0.12299999E4 +rem (0.123E4, ~0.123E1) = 0.0 +* (0.123E4, ~0.123) = ~0.15129001E3 ++ (0.123E4, ~0.123) = 0.1229877E4 +- (0.123E4, ~0.123) = 0.1230123E4 +/ (0.123E4, ~0.123) = ~0.1E5 +nextAfter (0.123E4, ~0.123) = 0.12299999E4 +rem (0.123E4, ~0.123) = 0.0 +* (0.123E4, ~0.123E~2) = ~0.15129001E1 ++ (0.123E4, ~0.123E~2) = 0.12299988E4 +- (0.123E4, ~0.123E~2) = 0.12300012E4 +/ (0.123E4, ~0.123E~2) = ~0.99999994E6 +nextAfter (0.123E4, ~0.123E~2) = 0.12299999E4 +rem (0.123E4, ~0.123E~2) = 0.12207031E~2 +* (0.123E4, ~0.11754944E~37) = ~0.1445858E~34 ++ (0.123E4, ~0.11754944E~37) = 0.123E4 +- (0.123E4, ~0.11754944E~37) = 0.123E4 +/ (0.123E4, ~0.11754944E~37) = ~inf +nextAfter (0.123E4, ~0.11754944E~37) = 0.12299999E4 +rem (0.123E4, ~0.11754944E~37) = ~inf +* (0.123E4, ~0.5877472E~38) = ~0.722929E~35 ++ (0.123E4, ~0.5877472E~38) = 0.123E4 +- (0.123E4, ~0.5877472E~38) = 0.123E4 +/ (0.123E4, ~0.5877472E~38) = ~inf +nextAfter (0.123E4, ~0.5877472E~38) = 0.12299999E4 +rem (0.123E4, ~0.5877472E~38) = ~inf +* (0.123E4, ~0.1E~44) = ~0.1724E~41 ++ (0.123E4, ~0.1E~44) = 0.123E4 +- (0.123E4, ~0.1E~44) = 0.123E4 +/ (0.123E4, ~0.1E~44) = ~inf +nextAfter (0.123E4, ~0.1E~44) = 0.12299999E4 +rem (0.123E4, ~0.1E~44) = ~inf +* (0.123E4, ~0.0) = ~0.0 ++ (0.123E4, ~0.0) = 0.123E4 +- (0.123E4, ~0.0) = 0.123E4 +/ (0.123E4, ~0.0) = ~inf +nextAfter (0.123E4, ~0.0) = 0.12299999E4 +rem (0.123E4, ~0.0) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300001E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E4, ~inf) = ~inf ++ (0.123E4, ~inf) = ~inf +- (0.123E4, ~inf) = inf +/ (0.123E4, ~inf) = ~0.0 +nextAfter (0.123E4, ~inf) = 0.12299999E4 +rem (0.123E4, ~inf) = 0.123E4 +* (0.123E4, nan) = nan ++ (0.123E4, nan) = nan +- (0.123E4, nan) = nan +/ (0.123E4, nan) = nan +nextAfter (0.123E4, nan) = nan +rem (0.123E4, nan) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300001E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E2, 0.34028235E39) = inf ++ (0.123E2, 0.34028235E39) = 0.34028235E39 +- (0.123E2, 0.34028235E39) = ~0.34028235E39 +/ (0.123E2, 0.34028235E39) = 0.36146455E~37 +nextAfter (0.123E2, 0.34028235E39) = 0.12300001E2 +rem (0.123E2, 0.34028235E39) = 0.123E2 +* (0.123E2, 0.17014117E39) = inf ++ (0.123E2, 0.17014117E39) = 0.17014117E39 +- (0.123E2, 0.17014117E39) = ~0.17014117E39 +/ (0.123E2, 0.17014117E39) = 0.7229291E~37 +nextAfter (0.123E2, 0.17014117E39) = 0.12300001E2 +rem (0.123E2, 0.17014117E39) = 0.123E2 +* (0.123E2, 0.123E4) = 0.15129E5 ++ (0.123E2, 0.123E4) = 0.12423E4 +- (0.123E2, 0.123E4) = ~0.12177E4 +/ (0.123E2, 0.123E4) = 0.1E~1 +nextAfter (0.123E2, 0.123E4) = 0.12300001E2 +rem (0.123E2, 0.123E4) = 0.123E2 +* (0.123E2, 0.123E2) = 0.15129001E3 ++ (0.123E2, 0.123E2) = 0.246E2 +- (0.123E2, 0.123E2) = 0.0 +/ (0.123E2, 0.123E2) = 0.1E1 +nextAfter (0.123E2, 0.123E2) = 0.123E2 +rem (0.123E2, 0.123E2) = 0.0 +* (0.123E2, 0.31415927E1) = 0.3864159E2 ++ (0.123E2, 0.31415927E1) = 0.15441593E2 +- (0.123E2, 0.31415927E1) = 0.9158407E1 +/ (0.123E2, 0.31415927E1) = 0.39152114E1 +nextAfter (0.123E2, 0.31415927E1) = 0.12299999E2 +rem (0.123E2, 0.31415927E1) = 0.28752222E1 +* (0.123E2, 0.27182817E1) = 0.33434868E2 ++ (0.123E2, 0.27182817E1) = 0.15018282E2 +- (0.123E2, 0.27182817E1) = 0.9581718E1 +/ (0.123E2, 0.27182817E1) = 0.4524917E1 +nextAfter (0.123E2, 0.27182817E1) = 0.12299999E2 +rem (0.123E2, 0.27182817E1) = 0.14268732E1 +* (0.123E2, 0.123E1) = 0.15129001E2 ++ (0.123E2, 0.123E1) = 0.13530001E2 +- (0.123E2, 0.123E1) = 0.1107E2 +/ (0.123E2, 0.123E1) = 0.1E2 +nextAfter (0.123E2, 0.123E1) = 0.12299999E2 +rem (0.123E2, 0.123E1) = 0.0 +* (0.123E2, 0.123) = 0.15129001E1 ++ (0.123E2, 0.123) = 0.12423E2 +- (0.123E2, 0.123) = 0.12177E2 +/ (0.123E2, 0.123) = 0.1E3 +nextAfter (0.123E2, 0.123) = 0.12299999E2 +rem (0.123E2, 0.123) = 0.0 +* (0.123E2, 0.123E~2) = 0.15129001E~1 ++ (0.123E2, 0.123E~2) = 0.1230123E2 +- (0.123E2, 0.123E~2) = 0.1229877E2 +/ (0.123E2, 0.123E~2) = 0.1E5 +nextAfter (0.123E2, 0.123E~2) = 0.12299999E2 +rem (0.123E2, 0.123E~2) = 0.0 +* (0.123E2, 0.11754944E~37) = 0.14458581E~36 ++ (0.123E2, 0.11754944E~37) = 0.123E2 +- (0.123E2, 0.11754944E~37) = 0.123E2 +/ (0.123E2, 0.11754944E~37) = inf +nextAfter (0.123E2, 0.11754944E~37) = 0.12299999E2 +rem (0.123E2, 0.11754944E~37) = ~inf +* (0.123E2, 0.5877472E~38) = 0.72292904E~37 ++ (0.123E2, 0.5877472E~38) = 0.123E2 +- (0.123E2, 0.5877472E~38) = 0.123E2 +/ (0.123E2, 0.5877472E~38) = inf +nextAfter (0.123E2, 0.5877472E~38) = 0.12299999E2 +rem (0.123E2, 0.5877472E~38) = ~inf +* (0.123E2, 0.1E~44) = 0.17E~43 ++ (0.123E2, 0.1E~44) = 0.123E2 +- (0.123E2, 0.1E~44) = 0.123E2 +/ (0.123E2, 0.1E~44) = inf +nextAfter (0.123E2, 0.1E~44) = 0.12299999E2 +rem (0.123E2, 0.1E~44) = ~inf +* (0.123E2, 0.0) = 0.0 ++ (0.123E2, 0.0) = 0.123E2 +- (0.123E2, 0.0) = 0.123E2 +/ (0.123E2, 0.0) = inf +nextAfter (0.123E2, 0.0) = 0.12299999E2 +rem (0.123E2, 0.0) = nan +* (0.123E2, ~0.34028235E39) = ~inf ++ (0.123E2, ~0.34028235E39) = ~0.34028235E39 +- (0.123E2, ~0.34028235E39) = 0.34028235E39 +/ (0.123E2, ~0.34028235E39) = ~0.36146455E~37 +nextAfter (0.123E2, ~0.34028235E39) = 0.12299999E2 +rem (0.123E2, ~0.34028235E39) = 0.123E2 +* (0.123E2, ~0.17014117E39) = ~inf ++ (0.123E2, ~0.17014117E39) = ~0.17014117E39 +- (0.123E2, ~0.17014117E39) = 0.17014117E39 +/ (0.123E2, ~0.17014117E39) = ~0.7229291E~37 +nextAfter (0.123E2, ~0.17014117E39) = 0.12299999E2 +rem (0.123E2, ~0.17014117E39) = 0.123E2 +* (0.123E2, ~0.123E4) = ~0.15129E5 ++ (0.123E2, ~0.123E4) = ~0.12177E4 +- (0.123E2, ~0.123E4) = 0.12423E4 +/ (0.123E2, ~0.123E4) = ~0.1E~1 +nextAfter (0.123E2, ~0.123E4) = 0.12299999E2 +rem (0.123E2, ~0.123E4) = 0.123E2 +* (0.123E2, ~0.123E2) = ~0.15129001E3 ++ (0.123E2, ~0.123E2) = 0.0 +- (0.123E2, ~0.123E2) = 0.246E2 +/ (0.123E2, ~0.123E2) = ~0.1E1 +nextAfter (0.123E2, ~0.123E2) = 0.12299999E2 +rem (0.123E2, ~0.123E2) = 0.0 +* (0.123E2, ~0.31415927E1) = ~0.3864159E2 ++ (0.123E2, ~0.31415927E1) = 0.9158407E1 +- (0.123E2, ~0.31415927E1) = 0.15441593E2 +/ (0.123E2, ~0.31415927E1) = ~0.39152114E1 +nextAfter (0.123E2, ~0.31415927E1) = 0.12299999E2 +rem (0.123E2, ~0.31415927E1) = 0.28752222E1 +* (0.123E2, ~0.27182817E1) = ~0.33434868E2 ++ (0.123E2, ~0.27182817E1) = 0.9581718E1 +- (0.123E2, ~0.27182817E1) = 0.15018282E2 +/ (0.123E2, ~0.27182817E1) = ~0.4524917E1 +nextAfter (0.123E2, ~0.27182817E1) = 0.12299999E2 +rem (0.123E2, ~0.27182817E1) = 0.14268732E1 +* (0.123E2, ~0.123E1) = ~0.15129001E2 ++ (0.123E2, ~0.123E1) = 0.1107E2 +- (0.123E2, ~0.123E1) = 0.13530001E2 +/ (0.123E2, ~0.123E1) = ~0.1E2 +nextAfter (0.123E2, ~0.123E1) = 0.12299999E2 +rem (0.123E2, ~0.123E1) = 0.0 +* (0.123E2, ~0.123) = ~0.15129001E1 ++ (0.123E2, ~0.123) = 0.12177E2 +- (0.123E2, ~0.123) = 0.12423E2 +/ (0.123E2, ~0.123) = ~0.1E3 +nextAfter (0.123E2, ~0.123) = 0.12299999E2 +rem (0.123E2, ~0.123) = 0.0 +* (0.123E2, ~0.123E~2) = ~0.15129001E~1 ++ (0.123E2, ~0.123E~2) = 0.1229877E2 +- (0.123E2, ~0.123E~2) = 0.1230123E2 +/ (0.123E2, ~0.123E~2) = ~0.1E5 +nextAfter (0.123E2, ~0.123E~2) = 0.12299999E2 +rem (0.123E2, ~0.123E~2) = 0.0 +* (0.123E2, ~0.11754944E~37) = ~0.14458581E~36 ++ (0.123E2, ~0.11754944E~37) = 0.123E2 +- (0.123E2, ~0.11754944E~37) = 0.123E2 +/ (0.123E2, ~0.11754944E~37) = ~inf +nextAfter (0.123E2, ~0.11754944E~37) = 0.12299999E2 +rem (0.123E2, ~0.11754944E~37) = ~inf +* (0.123E2, ~0.5877472E~38) = ~0.72292904E~37 ++ (0.123E2, ~0.5877472E~38) = 0.123E2 +- (0.123E2, ~0.5877472E~38) = 0.123E2 +/ (0.123E2, ~0.5877472E~38) = ~inf +nextAfter (0.123E2, ~0.5877472E~38) = 0.12299999E2 +rem (0.123E2, ~0.5877472E~38) = ~inf +* (0.123E2, ~0.1E~44) = ~0.17E~43 ++ (0.123E2, ~0.1E~44) = 0.123E2 +- (0.123E2, ~0.1E~44) = 0.123E2 +/ (0.123E2, ~0.1E~44) = ~inf +nextAfter (0.123E2, ~0.1E~44) = 0.12299999E2 +rem (0.123E2, ~0.1E~44) = ~inf +* (0.123E2, ~0.0) = ~0.0 ++ (0.123E2, ~0.0) = 0.123E2 +- (0.123E2, ~0.0) = 0.123E2 +/ (0.123E2, ~0.0) = ~inf +nextAfter (0.123E2, ~0.0) = 0.12299999E2 +rem (0.123E2, ~0.0) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300001E2 +rem (0.123E2, inf) = 0.123E2 +* (0.123E2, ~inf) = ~inf ++ (0.123E2, ~inf) = ~inf +- (0.123E2, ~inf) = inf +/ (0.123E2, ~inf) = ~0.0 +nextAfter (0.123E2, ~inf) = 0.12299999E2 +rem (0.123E2, ~inf) = 0.123E2 +* (0.123E2, nan) = nan ++ (0.123E2, nan) = nan +- (0.123E2, nan) = nan +/ (0.123E2, nan) = nan +nextAfter (0.123E2, nan) = nan +rem (0.123E2, nan) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300001E2 +rem (0.123E2, inf) = 0.123E2 +* (0.31415927E1, 0.34028235E39) = inf ++ (0.31415927E1, 0.34028235E39) = 0.34028235E39 +- (0.31415927E1, 0.34028235E39) = ~0.34028235E39 +/ (0.31415927E1, 0.34028235E39) = 0.9232312E~38 +nextAfter (0.31415927E1, 0.34028235E39) = 0.3141593E1 +rem (0.31415927E1, 0.34028235E39) = 0.31415927E1 +* (0.31415927E1, 0.17014117E39) = inf ++ (0.31415927E1, 0.17014117E39) = 0.17014117E39 +- (0.31415927E1, 0.17014117E39) = ~0.17014117E39 +/ (0.31415927E1, 0.17014117E39) = 0.18464624E~37 +nextAfter (0.31415927E1, 0.17014117E39) = 0.3141593E1 +rem (0.31415927E1, 0.17014117E39) = 0.31415927E1 +* (0.31415927E1, 0.123E4) = 0.38641592E4 ++ (0.31415927E1, 0.123E4) = 0.12331416E4 +- (0.31415927E1, 0.123E4) = ~0.12268584E4 +/ (0.31415927E1, 0.123E4) = 0.25541405E~2 +nextAfter (0.31415927E1, 0.123E4) = 0.3141593E1 +rem (0.31415927E1, 0.123E4) = 0.31415927E1 +* (0.31415927E1, 0.123E2) = 0.3864159E2 ++ (0.31415927E1, 0.123E2) = 0.15441593E2 +- (0.31415927E1, 0.123E2) = ~0.9158407E1 +/ (0.31415927E1, 0.123E2) = 0.25541404 +nextAfter (0.31415927E1, 0.123E2) = 0.3141593E1 +rem (0.31415927E1, 0.123E2) = 0.31415927E1 +* (0.31415927E1, 0.31415927E1) = 0.9869605E1 ++ (0.31415927E1, 0.31415927E1) = 0.62831855E1 +- (0.31415927E1, 0.31415927E1) = 0.0 +/ (0.31415927E1, 0.31415927E1) = 0.1E1 +nextAfter (0.31415927E1, 0.31415927E1) = 0.31415927E1 +rem (0.31415927E1, 0.31415927E1) = 0.0 +* (0.31415927E1, 0.27182817E1) = 0.8539734E1 ++ (0.31415927E1, 0.27182817E1) = 0.58598747E1 +- (0.31415927E1, 0.27182817E1) = 0.423311 +/ (0.31415927E1, 0.27182817E1) = 0.11557274E1 +nextAfter (0.31415927E1, 0.27182817E1) = 0.31415925E1 +rem (0.31415927E1, 0.27182817E1) = 0.423311 +* (0.31415927E1, 0.123E1) = 0.3864159E1 ++ (0.31415927E1, 0.123E1) = 0.43715925E1 +- (0.31415927E1, 0.123E1) = 0.19115927E1 +/ (0.31415927E1, 0.123E1) = 0.25541403E1 +nextAfter (0.31415927E1, 0.123E1) = 0.31415925E1 +rem (0.31415927E1, 0.123E1) = 0.6815927 +* (0.31415927E1, 0.123) = 0.38641593 ++ (0.31415927E1, 0.123) = 0.32645926E1 +- (0.31415927E1, 0.123) = 0.30185928E1 +/ (0.31415927E1, 0.123) = 0.25541403E2 +nextAfter (0.31415927E1, 0.123) = 0.31415925E1 +rem (0.31415927E1, 0.123) = 0.6659269E~1 +* (0.31415927E1, 0.123E~2) = 0.38641593E~2 ++ (0.31415927E1, 0.123E~2) = 0.31428227E1 +- (0.31415927E1, 0.123E~2) = 0.31403627E1 +/ (0.31415927E1, 0.123E~2) = 0.25541404E4 +nextAfter (0.31415927E1, 0.123E~2) = 0.31415925E1 +rem (0.31415927E1, 0.123E~2) = 0.17261505E~3 +* (0.31415927E1, 0.11754944E~37) = 0.36929245E~37 ++ (0.31415927E1, 0.11754944E~37) = 0.31415927E1 +- (0.31415927E1, 0.11754944E~37) = 0.31415927E1 +/ (0.31415927E1, 0.11754944E~37) = 0.26725715E39 +nextAfter (0.31415927E1, 0.11754944E~37) = 0.31415925E1 +rem (0.31415927E1, 0.11754944E~37) = 0.0 +* (0.31415927E1, 0.5877472E~38) = 0.18464623E~37 ++ (0.31415927E1, 0.5877472E~38) = 0.31415927E1 +- (0.31415927E1, 0.5877472E~38) = 0.31415927E1 +/ (0.31415927E1, 0.5877472E~38) = inf +nextAfter (0.31415927E1, 0.5877472E~38) = 0.31415925E1 +rem (0.31415927E1, 0.5877472E~38) = ~inf +* (0.31415927E1, 0.1E~44) = 0.4E~44 ++ (0.31415927E1, 0.1E~44) = 0.31415927E1 +- (0.31415927E1, 0.1E~44) = 0.31415927E1 +/ (0.31415927E1, 0.1E~44) = inf +nextAfter (0.31415927E1, 0.1E~44) = 0.31415925E1 +rem (0.31415927E1, 0.1E~44) = ~inf +* (0.31415927E1, 0.0) = 0.0 ++ (0.31415927E1, 0.0) = 0.31415927E1 +- (0.31415927E1, 0.0) = 0.31415927E1 +/ (0.31415927E1, 0.0) = inf +nextAfter (0.31415927E1, 0.0) = 0.31415925E1 +rem (0.31415927E1, 0.0) = nan +* (0.31415927E1, ~0.34028235E39) = ~inf ++ (0.31415927E1, ~0.34028235E39) = ~0.34028235E39 +- (0.31415927E1, ~0.34028235E39) = 0.34028235E39 +/ (0.31415927E1, ~0.34028235E39) = ~0.9232312E~38 +nextAfter (0.31415927E1, ~0.34028235E39) = 0.31415925E1 +rem (0.31415927E1, ~0.34028235E39) = 0.31415927E1 +* (0.31415927E1, ~0.17014117E39) = ~inf ++ (0.31415927E1, ~0.17014117E39) = ~0.17014117E39 +- (0.31415927E1, ~0.17014117E39) = 0.17014117E39 +/ (0.31415927E1, ~0.17014117E39) = ~0.18464624E~37 +nextAfter (0.31415927E1, ~0.17014117E39) = 0.31415925E1 +rem (0.31415927E1, ~0.17014117E39) = 0.31415927E1 +* (0.31415927E1, ~0.123E4) = ~0.38641592E4 ++ (0.31415927E1, ~0.123E4) = ~0.12268584E4 +- (0.31415927E1, ~0.123E4) = 0.12331416E4 +/ (0.31415927E1, ~0.123E4) = ~0.25541405E~2 +nextAfter (0.31415927E1, ~0.123E4) = 0.31415925E1 +rem (0.31415927E1, ~0.123E4) = 0.31415927E1 +* (0.31415927E1, ~0.123E2) = ~0.3864159E2 ++ (0.31415927E1, ~0.123E2) = ~0.9158407E1 +- (0.31415927E1, ~0.123E2) = 0.15441593E2 +/ (0.31415927E1, ~0.123E2) = ~0.25541404 +nextAfter (0.31415927E1, ~0.123E2) = 0.31415925E1 +rem (0.31415927E1, ~0.123E2) = 0.31415927E1 +* (0.31415927E1, ~0.31415927E1) = ~0.9869605E1 ++ (0.31415927E1, ~0.31415927E1) = 0.0 +- (0.31415927E1, ~0.31415927E1) = 0.62831855E1 +/ (0.31415927E1, ~0.31415927E1) = ~0.1E1 +nextAfter (0.31415927E1, ~0.31415927E1) = 0.31415925E1 +rem (0.31415927E1, ~0.31415927E1) = 0.0 +* (0.31415927E1, ~0.27182817E1) = ~0.8539734E1 ++ (0.31415927E1, ~0.27182817E1) = 0.423311 +- (0.31415927E1, ~0.27182817E1) = 0.58598747E1 +/ (0.31415927E1, ~0.27182817E1) = ~0.11557274E1 +nextAfter (0.31415927E1, ~0.27182817E1) = 0.31415925E1 +rem (0.31415927E1, ~0.27182817E1) = 0.423311 +* (0.31415927E1, ~0.123E1) = ~0.3864159E1 ++ (0.31415927E1, ~0.123E1) = 0.19115927E1 +- (0.31415927E1, ~0.123E1) = 0.43715925E1 +/ (0.31415927E1, ~0.123E1) = ~0.25541403E1 +nextAfter (0.31415927E1, ~0.123E1) = 0.31415925E1 +rem (0.31415927E1, ~0.123E1) = 0.6815927 +* (0.31415927E1, ~0.123) = ~0.38641593 ++ (0.31415927E1, ~0.123) = 0.30185928E1 +- (0.31415927E1, ~0.123) = 0.32645926E1 +/ (0.31415927E1, ~0.123) = ~0.25541403E2 +nextAfter (0.31415927E1, ~0.123) = 0.31415925E1 +rem (0.31415927E1, ~0.123) = 0.6659269E~1 +* (0.31415927E1, ~0.123E~2) = ~0.38641593E~2 ++ (0.31415927E1, ~0.123E~2) = 0.31403627E1 +- (0.31415927E1, ~0.123E~2) = 0.31428227E1 +/ (0.31415927E1, ~0.123E~2) = ~0.25541404E4 +nextAfter (0.31415927E1, ~0.123E~2) = 0.31415925E1 +rem (0.31415927E1, ~0.123E~2) = 0.17261505E~3 +* (0.31415927E1, ~0.11754944E~37) = ~0.36929245E~37 ++ (0.31415927E1, ~0.11754944E~37) = 0.31415927E1 +- (0.31415927E1, ~0.11754944E~37) = 0.31415927E1 +/ (0.31415927E1, ~0.11754944E~37) = ~0.26725715E39 +nextAfter (0.31415927E1, ~0.11754944E~37) = 0.31415925E1 +rem (0.31415927E1, ~0.11754944E~37) = 0.0 +* (0.31415927E1, ~0.5877472E~38) = ~0.18464623E~37 ++ (0.31415927E1, ~0.5877472E~38) = 0.31415927E1 +- (0.31415927E1, ~0.5877472E~38) = 0.31415927E1 +/ (0.31415927E1, ~0.5877472E~38) = ~inf +nextAfter (0.31415927E1, ~0.5877472E~38) = 0.31415925E1 +rem (0.31415927E1, ~0.5877472E~38) = ~inf +* (0.31415927E1, ~0.1E~44) = ~0.4E~44 ++ (0.31415927E1, ~0.1E~44) = 0.31415927E1 +- (0.31415927E1, ~0.1E~44) = 0.31415927E1 +/ (0.31415927E1, ~0.1E~44) = ~inf +nextAfter (0.31415927E1, ~0.1E~44) = 0.31415925E1 +rem (0.31415927E1, ~0.1E~44) = ~inf +* (0.31415927E1, ~0.0) = ~0.0 ++ (0.31415927E1, ~0.0) = 0.31415927E1 +- (0.31415927E1, ~0.0) = 0.31415927E1 +/ (0.31415927E1, ~0.0) = ~inf +nextAfter (0.31415927E1, ~0.0) = 0.31415925E1 +rem (0.31415927E1, ~0.0) = nan +* (0.31415927E1, inf) = inf ++ (0.31415927E1, inf) = inf +- (0.31415927E1, inf) = ~inf +/ (0.31415927E1, inf) = 0.0 +nextAfter (0.31415927E1, inf) = 0.3141593E1 +rem (0.31415927E1, inf) = 0.31415927E1 +* (0.31415927E1, ~inf) = ~inf ++ (0.31415927E1, ~inf) = ~inf +- (0.31415927E1, ~inf) = inf +/ (0.31415927E1, ~inf) = ~0.0 +nextAfter (0.31415927E1, ~inf) = 0.31415925E1 +rem (0.31415927E1, ~inf) = 0.31415927E1 +* (0.31415927E1, nan) = nan ++ (0.31415927E1, nan) = nan +- (0.31415927E1, nan) = nan +/ (0.31415927E1, nan) = nan +nextAfter (0.31415927E1, nan) = nan +rem (0.31415927E1, nan) = nan +* (0.31415927E1, inf) = inf ++ (0.31415927E1, inf) = inf +- (0.31415927E1, inf) = ~inf +/ (0.31415927E1, inf) = 0.0 +nextAfter (0.31415927E1, inf) = 0.3141593E1 +rem (0.31415927E1, inf) = 0.31415927E1 +* (0.27182817E1, 0.34028235E39) = inf ++ (0.27182817E1, 0.34028235E39) = 0.34028235E39 +- (0.27182817E1, 0.34028235E39) = ~0.34028235E39 +/ (0.27182817E1, 0.34028235E39) = 0.7988312E~38 +nextAfter (0.27182817E1, 0.34028235E39) = 0.2718282E1 +rem (0.27182817E1, 0.34028235E39) = 0.27182817E1 +* (0.27182817E1, 0.17014117E39) = inf ++ (0.27182817E1, 0.17014117E39) = 0.17014117E39 +- (0.27182817E1, 0.17014117E39) = ~0.17014117E39 +/ (0.27182817E1, 0.17014117E39) = 0.15976626E~37 +nextAfter (0.27182817E1, 0.17014117E39) = 0.2718282E1 +rem (0.27182817E1, 0.17014117E39) = 0.27182817E1 +* (0.27182817E1, 0.123E4) = 0.33434866E4 ++ (0.27182817E1, 0.123E4) = 0.12327183E4 +- (0.27182817E1, 0.123E4) = ~0.12272817E4 +/ (0.27182817E1, 0.123E4) = 0.22099852E~2 +nextAfter (0.27182817E1, 0.123E4) = 0.2718282E1 +rem (0.27182817E1, 0.123E4) = 0.27182817E1 +* (0.27182817E1, 0.123E2) = 0.33434868E2 ++ (0.27182817E1, 0.123E2) = 0.15018282E2 +- (0.27182817E1, 0.123E2) = ~0.9581718E1 +/ (0.27182817E1, 0.123E2) = 0.22099851 +nextAfter (0.27182817E1, 0.123E2) = 0.2718282E1 +rem (0.27182817E1, 0.123E2) = 0.27182817E1 +* (0.27182817E1, 0.31415927E1) = 0.8539734E1 ++ (0.27182817E1, 0.31415927E1) = 0.58598747E1 +- (0.27182817E1, 0.31415927E1) = ~0.423311 +/ (0.27182817E1, 0.31415927E1) = 0.86525595 +nextAfter (0.27182817E1, 0.31415927E1) = 0.2718282E1 +rem (0.27182817E1, 0.31415927E1) = 0.27182817E1 +* (0.27182817E1, 0.27182817E1) = 0.73890557E1 ++ (0.27182817E1, 0.27182817E1) = 0.54365635E1 +- (0.27182817E1, 0.27182817E1) = 0.0 +/ (0.27182817E1, 0.27182817E1) = 0.1E1 +nextAfter (0.27182817E1, 0.27182817E1) = 0.27182817E1 +rem (0.27182817E1, 0.27182817E1) = 0.0 +* (0.27182817E1, 0.123E1) = 0.33434865E1 ++ (0.27182817E1, 0.123E1) = 0.39482818E1 +- (0.27182817E1, 0.123E1) = 0.14882817E1 +/ (0.27182817E1, 0.123E1) = 0.2209985E1 +nextAfter (0.27182817E1, 0.123E1) = 0.27182815E1 +rem (0.27182817E1, 0.123E1) = 0.2582817 +* (0.27182817E1, 0.123) = 0.33434868 ++ (0.27182817E1, 0.123) = 0.28412817E1 +- (0.27182817E1, 0.123) = 0.25952818E1 +/ (0.27182817E1, 0.123) = 0.22099852E2 +nextAfter (0.27182817E1, 0.123) = 0.27182815E1 +rem (0.27182817E1, 0.123) = 0.12281656E~1 +* (0.27182817E1, 0.123E~2) = 0.33434867E~2 ++ (0.27182817E1, 0.123E~2) = 0.27195117E1 +- (0.27182817E1, 0.123E~2) = 0.27170517E1 +/ (0.27182817E1, 0.123E~2) = 0.2209985E4 +nextAfter (0.27182817E1, 0.123E~2) = 0.27182815E1 +rem (0.27182817E1, 0.123E~2) = 0.12116432E~2 +* (0.27182817E1, 0.11754944E~37) = 0.31953248E~37 ++ (0.27182817E1, 0.11754944E~37) = 0.27182817E1 +- (0.27182817E1, 0.11754944E~37) = 0.27182817E1 +/ (0.27182817E1, 0.11754944E~37) = 0.23124584E39 +nextAfter (0.27182817E1, 0.11754944E~37) = 0.27182815E1 +rem (0.27182817E1, 0.11754944E~37) = 0.0 +* (0.27182817E1, 0.5877472E~38) = 0.15976624E~37 ++ (0.27182817E1, 0.5877472E~38) = 0.27182817E1 +- (0.27182817E1, 0.5877472E~38) = 0.27182817E1 +/ (0.27182817E1, 0.5877472E~38) = inf +nextAfter (0.27182817E1, 0.5877472E~38) = 0.27182815E1 +rem (0.27182817E1, 0.5877472E~38) = ~inf +* (0.27182817E1, 0.1E~44) = 0.4E~44 ++ (0.27182817E1, 0.1E~44) = 0.27182817E1 +- (0.27182817E1, 0.1E~44) = 0.27182817E1 +/ (0.27182817E1, 0.1E~44) = inf +nextAfter (0.27182817E1, 0.1E~44) = 0.27182815E1 +rem (0.27182817E1, 0.1E~44) = ~inf +* (0.27182817E1, 0.0) = 0.0 ++ (0.27182817E1, 0.0) = 0.27182817E1 +- (0.27182817E1, 0.0) = 0.27182817E1 +/ (0.27182817E1, 0.0) = inf +nextAfter (0.27182817E1, 0.0) = 0.27182815E1 +rem (0.27182817E1, 0.0) = nan +* (0.27182817E1, ~0.34028235E39) = ~inf ++ (0.27182817E1, ~0.34028235E39) = ~0.34028235E39 +- (0.27182817E1, ~0.34028235E39) = 0.34028235E39 +/ (0.27182817E1, ~0.34028235E39) = ~0.7988312E~38 +nextAfter (0.27182817E1, ~0.34028235E39) = 0.27182815E1 +rem (0.27182817E1, ~0.34028235E39) = 0.27182817E1 +* (0.27182817E1, ~0.17014117E39) = ~inf ++ (0.27182817E1, ~0.17014117E39) = ~0.17014117E39 +- (0.27182817E1, ~0.17014117E39) = 0.17014117E39 +/ (0.27182817E1, ~0.17014117E39) = ~0.15976626E~37 +nextAfter (0.27182817E1, ~0.17014117E39) = 0.27182815E1 +rem (0.27182817E1, ~0.17014117E39) = 0.27182817E1 +* (0.27182817E1, ~0.123E4) = ~0.33434866E4 ++ (0.27182817E1, ~0.123E4) = ~0.12272817E4 +- (0.27182817E1, ~0.123E4) = 0.12327183E4 +/ (0.27182817E1, ~0.123E4) = ~0.22099852E~2 +nextAfter (0.27182817E1, ~0.123E4) = 0.27182815E1 +rem (0.27182817E1, ~0.123E4) = 0.27182817E1 +* (0.27182817E1, ~0.123E2) = ~0.33434868E2 ++ (0.27182817E1, ~0.123E2) = ~0.9581718E1 +- (0.27182817E1, ~0.123E2) = 0.15018282E2 +/ (0.27182817E1, ~0.123E2) = ~0.22099851 +nextAfter (0.27182817E1, ~0.123E2) = 0.27182815E1 +rem (0.27182817E1, ~0.123E2) = 0.27182817E1 +* (0.27182817E1, ~0.31415927E1) = ~0.8539734E1 ++ (0.27182817E1, ~0.31415927E1) = ~0.423311 +- (0.27182817E1, ~0.31415927E1) = 0.58598747E1 +/ (0.27182817E1, ~0.31415927E1) = ~0.86525595 +nextAfter (0.27182817E1, ~0.31415927E1) = 0.27182815E1 +rem (0.27182817E1, ~0.31415927E1) = 0.27182817E1 +* (0.27182817E1, ~0.27182817E1) = ~0.73890557E1 ++ (0.27182817E1, ~0.27182817E1) = 0.0 +- (0.27182817E1, ~0.27182817E1) = 0.54365635E1 +/ (0.27182817E1, ~0.27182817E1) = ~0.1E1 +nextAfter (0.27182817E1, ~0.27182817E1) = 0.27182815E1 +rem (0.27182817E1, ~0.27182817E1) = 0.0 +* (0.27182817E1, ~0.123E1) = ~0.33434865E1 ++ (0.27182817E1, ~0.123E1) = 0.14882817E1 +- (0.27182817E1, ~0.123E1) = 0.39482818E1 +/ (0.27182817E1, ~0.123E1) = ~0.2209985E1 +nextAfter (0.27182817E1, ~0.123E1) = 0.27182815E1 +rem (0.27182817E1, ~0.123E1) = 0.2582817 +* (0.27182817E1, ~0.123) = ~0.33434868 ++ (0.27182817E1, ~0.123) = 0.25952818E1 +- (0.27182817E1, ~0.123) = 0.28412817E1 +/ (0.27182817E1, ~0.123) = ~0.22099852E2 +nextAfter (0.27182817E1, ~0.123) = 0.27182815E1 +rem (0.27182817E1, ~0.123) = 0.12281656E~1 +* (0.27182817E1, ~0.123E~2) = ~0.33434867E~2 ++ (0.27182817E1, ~0.123E~2) = 0.27170517E1 +- (0.27182817E1, ~0.123E~2) = 0.27195117E1 +/ (0.27182817E1, ~0.123E~2) = ~0.2209985E4 +nextAfter (0.27182817E1, ~0.123E~2) = 0.27182815E1 +rem (0.27182817E1, ~0.123E~2) = 0.12116432E~2 +* (0.27182817E1, ~0.11754944E~37) = ~0.31953248E~37 ++ (0.27182817E1, ~0.11754944E~37) = 0.27182817E1 +- (0.27182817E1, ~0.11754944E~37) = 0.27182817E1 +/ (0.27182817E1, ~0.11754944E~37) = ~0.23124584E39 +nextAfter (0.27182817E1, ~0.11754944E~37) = 0.27182815E1 +rem (0.27182817E1, ~0.11754944E~37) = 0.0 +* (0.27182817E1, ~0.5877472E~38) = ~0.15976624E~37 ++ (0.27182817E1, ~0.5877472E~38) = 0.27182817E1 +- (0.27182817E1, ~0.5877472E~38) = 0.27182817E1 +/ (0.27182817E1, ~0.5877472E~38) = ~inf +nextAfter (0.27182817E1, ~0.5877472E~38) = 0.27182815E1 +rem (0.27182817E1, ~0.5877472E~38) = ~inf +* (0.27182817E1, ~0.1E~44) = ~0.4E~44 ++ (0.27182817E1, ~0.1E~44) = 0.27182817E1 +- (0.27182817E1, ~0.1E~44) = 0.27182817E1 +/ (0.27182817E1, ~0.1E~44) = ~inf +nextAfter (0.27182817E1, ~0.1E~44) = 0.27182815E1 +rem (0.27182817E1, ~0.1E~44) = ~inf +* (0.27182817E1, ~0.0) = ~0.0 ++ (0.27182817E1, ~0.0) = 0.27182817E1 +- (0.27182817E1, ~0.0) = 0.27182817E1 +/ (0.27182817E1, ~0.0) = ~inf +nextAfter (0.27182817E1, ~0.0) = 0.27182815E1 +rem (0.27182817E1, ~0.0) = nan +* (0.27182817E1, inf) = inf ++ (0.27182817E1, inf) = inf +- (0.27182817E1, inf) = ~inf +/ (0.27182817E1, inf) = 0.0 +nextAfter (0.27182817E1, inf) = 0.2718282E1 +rem (0.27182817E1, inf) = 0.27182817E1 +* (0.27182817E1, ~inf) = ~inf ++ (0.27182817E1, ~inf) = ~inf +- (0.27182817E1, ~inf) = inf +/ (0.27182817E1, ~inf) = ~0.0 +nextAfter (0.27182817E1, ~inf) = 0.27182815E1 +rem (0.27182817E1, ~inf) = 0.27182817E1 +* (0.27182817E1, nan) = nan ++ (0.27182817E1, nan) = nan +- (0.27182817E1, nan) = nan +/ (0.27182817E1, nan) = nan +nextAfter (0.27182817E1, nan) = nan +rem (0.27182817E1, nan) = nan +* (0.27182817E1, inf) = inf ++ (0.27182817E1, inf) = inf +- (0.27182817E1, inf) = ~inf +/ (0.27182817E1, inf) = 0.0 +nextAfter (0.27182817E1, inf) = 0.2718282E1 +rem (0.27182817E1, inf) = 0.27182817E1 +* (0.123E1, 0.34028235E39) = inf ++ (0.123E1, 0.34028235E39) = 0.34028235E39 +- (0.123E1, 0.34028235E39) = ~0.34028235E39 +/ (0.123E1, 0.34028235E39) = 0.3614645E~38 +nextAfter (0.123E1, 0.34028235E39) = 0.12300001E1 +rem (0.123E1, 0.34028235E39) = 0.123E1 +* (0.123E1, 0.17014117E39) = 0.20927364E39 ++ (0.123E1, 0.17014117E39) = 0.17014117E39 +- (0.123E1, 0.17014117E39) = ~0.17014117E39 +/ (0.123E1, 0.17014117E39) = 0.722929E~38 +nextAfter (0.123E1, 0.17014117E39) = 0.12300001E1 +rem (0.123E1, 0.17014117E39) = 0.123E1 +* (0.123E1, 0.123E4) = 0.15129E4 ++ (0.123E1, 0.123E4) = 0.123123E4 +- (0.123E1, 0.123E4) = ~0.122877E4 +/ (0.123E1, 0.123E4) = 0.1E~2 +nextAfter (0.123E1, 0.123E4) = 0.12300001E1 +rem (0.123E1, 0.123E4) = 0.123E1 +* (0.123E1, 0.123E2) = 0.15129001E2 ++ (0.123E1, 0.123E2) = 0.13530001E2 +- (0.123E1, 0.123E2) = ~0.1107E2 +/ (0.123E1, 0.123E2) = 0.1 +nextAfter (0.123E1, 0.123E2) = 0.12300001E1 +rem (0.123E1, 0.123E2) = 0.123E1 +* (0.123E1, 0.31415927E1) = 0.3864159E1 ++ (0.123E1, 0.31415927E1) = 0.43715925E1 +- (0.123E1, 0.31415927E1) = ~0.19115927E1 +/ (0.123E1, 0.31415927E1) = 0.39152116 +nextAfter (0.123E1, 0.31415927E1) = 0.12300001E1 +rem (0.123E1, 0.31415927E1) = 0.123E1 +* (0.123E1, 0.27182817E1) = 0.33434865E1 ++ (0.123E1, 0.27182817E1) = 0.39482818E1 +- (0.123E1, 0.27182817E1) = ~0.14882817E1 +/ (0.123E1, 0.27182817E1) = 0.45249173 +nextAfter (0.123E1, 0.27182817E1) = 0.12300001E1 +rem (0.123E1, 0.27182817E1) = 0.123E1 +* (0.123E1, 0.123E1) = 0.15129E1 ++ (0.123E1, 0.123E1) = 0.246E1 +- (0.123E1, 0.123E1) = 0.0 +/ (0.123E1, 0.123E1) = 0.1E1 +nextAfter (0.123E1, 0.123E1) = 0.123E1 +rem (0.123E1, 0.123E1) = 0.0 +* (0.123E1, 0.123) = 0.15129 ++ (0.123E1, 0.123) = 0.1353E1 +- (0.123E1, 0.123) = 0.1107E1 +/ (0.123E1, 0.123) = 0.1E2 +nextAfter (0.123E1, 0.123) = 0.12299999E1 +rem (0.123E1, 0.123) = 0.0 +* (0.123E1, 0.123E~2) = 0.15129001E~2 ++ (0.123E1, 0.123E~2) = 0.123123E1 +- (0.123E1, 0.123E~2) = 0.122877E1 +/ (0.123E1, 0.123E~2) = 0.1E4 +nextAfter (0.123E1, 0.123E~2) = 0.12299999E1 +rem (0.123E1, 0.123E~2) = 0.0 +* (0.123E1, 0.11754944E~37) = 0.14458581E~37 ++ (0.123E1, 0.11754944E~37) = 0.123E1 +- (0.123E1, 0.11754944E~37) = 0.123E1 +/ (0.123E1, 0.11754944E~37) = 0.10463683E39 +nextAfter (0.123E1, 0.11754944E~37) = 0.12299999E1 +rem (0.123E1, 0.11754944E~37) = 0.0 +* (0.123E1, 0.5877472E~38) = 0.722929E~38 ++ (0.123E1, 0.5877472E~38) = 0.123E1 +- (0.123E1, 0.5877472E~38) = 0.123E1 +/ (0.123E1, 0.5877472E~38) = 0.20927366E39 +nextAfter (0.123E1, 0.5877472E~38) = 0.12299999E1 +rem (0.123E1, 0.5877472E~38) = 0.0 +* (0.123E1, 0.1E~44) = 0.1E~44 ++ (0.123E1, 0.1E~44) = 0.123E1 +- (0.123E1, 0.1E~44) = 0.123E1 +/ (0.123E1, 0.1E~44) = inf +nextAfter (0.123E1, 0.1E~44) = 0.12299999E1 +rem (0.123E1, 0.1E~44) = ~inf +* (0.123E1, 0.0) = 0.0 ++ (0.123E1, 0.0) = 0.123E1 +- (0.123E1, 0.0) = 0.123E1 +/ (0.123E1, 0.0) = inf +nextAfter (0.123E1, 0.0) = 0.12299999E1 +rem (0.123E1, 0.0) = nan +* (0.123E1, ~0.34028235E39) = ~inf ++ (0.123E1, ~0.34028235E39) = ~0.34028235E39 +- (0.123E1, ~0.34028235E39) = 0.34028235E39 +/ (0.123E1, ~0.34028235E39) = ~0.3614645E~38 +nextAfter (0.123E1, ~0.34028235E39) = 0.12299999E1 +rem (0.123E1, ~0.34028235E39) = 0.123E1 +* (0.123E1, ~0.17014117E39) = ~0.20927364E39 ++ (0.123E1, ~0.17014117E39) = ~0.17014117E39 +- (0.123E1, ~0.17014117E39) = 0.17014117E39 +/ (0.123E1, ~0.17014117E39) = ~0.722929E~38 +nextAfter (0.123E1, ~0.17014117E39) = 0.12299999E1 +rem (0.123E1, ~0.17014117E39) = 0.123E1 +* (0.123E1, ~0.123E4) = ~0.15129E4 ++ (0.123E1, ~0.123E4) = ~0.122877E4 +- (0.123E1, ~0.123E4) = 0.123123E4 +/ (0.123E1, ~0.123E4) = ~0.1E~2 +nextAfter (0.123E1, ~0.123E4) = 0.12299999E1 +rem (0.123E1, ~0.123E4) = 0.123E1 +* (0.123E1, ~0.123E2) = ~0.15129001E2 ++ (0.123E1, ~0.123E2) = ~0.1107E2 +- (0.123E1, ~0.123E2) = 0.13530001E2 +/ (0.123E1, ~0.123E2) = ~0.1 +nextAfter (0.123E1, ~0.123E2) = 0.12299999E1 +rem (0.123E1, ~0.123E2) = 0.123E1 +* (0.123E1, ~0.31415927E1) = ~0.3864159E1 ++ (0.123E1, ~0.31415927E1) = ~0.19115927E1 +- (0.123E1, ~0.31415927E1) = 0.43715925E1 +/ (0.123E1, ~0.31415927E1) = ~0.39152116 +nextAfter (0.123E1, ~0.31415927E1) = 0.12299999E1 +rem (0.123E1, ~0.31415927E1) = 0.123E1 +* (0.123E1, ~0.27182817E1) = ~0.33434865E1 ++ (0.123E1, ~0.27182817E1) = ~0.14882817E1 +- (0.123E1, ~0.27182817E1) = 0.39482818E1 +/ (0.123E1, ~0.27182817E1) = ~0.45249173 +nextAfter (0.123E1, ~0.27182817E1) = 0.12299999E1 +rem (0.123E1, ~0.27182817E1) = 0.123E1 +* (0.123E1, ~0.123E1) = ~0.15129E1 ++ (0.123E1, ~0.123E1) = 0.0 +- (0.123E1, ~0.123E1) = 0.246E1 +/ (0.123E1, ~0.123E1) = ~0.1E1 +nextAfter (0.123E1, ~0.123E1) = 0.12299999E1 +rem (0.123E1, ~0.123E1) = 0.0 +* (0.123E1, ~0.123) = ~0.15129 ++ (0.123E1, ~0.123) = 0.1107E1 +- (0.123E1, ~0.123) = 0.1353E1 +/ (0.123E1, ~0.123) = ~0.1E2 +nextAfter (0.123E1, ~0.123) = 0.12299999E1 +rem (0.123E1, ~0.123) = 0.0 +* (0.123E1, ~0.123E~2) = ~0.15129001E~2 ++ (0.123E1, ~0.123E~2) = 0.122877E1 +- (0.123E1, ~0.123E~2) = 0.123123E1 +/ (0.123E1, ~0.123E~2) = ~0.1E4 +nextAfter (0.123E1, ~0.123E~2) = 0.12299999E1 +rem (0.123E1, ~0.123E~2) = 0.0 +* (0.123E1, ~0.11754944E~37) = ~0.14458581E~37 ++ (0.123E1, ~0.11754944E~37) = 0.123E1 +- (0.123E1, ~0.11754944E~37) = 0.123E1 +/ (0.123E1, ~0.11754944E~37) = ~0.10463683E39 +nextAfter (0.123E1, ~0.11754944E~37) = 0.12299999E1 +rem (0.123E1, ~0.11754944E~37) = 0.0 +* (0.123E1, ~0.5877472E~38) = ~0.722929E~38 ++ (0.123E1, ~0.5877472E~38) = 0.123E1 +- (0.123E1, ~0.5877472E~38) = 0.123E1 +/ (0.123E1, ~0.5877472E~38) = ~0.20927366E39 +nextAfter (0.123E1, ~0.5877472E~38) = 0.12299999E1 +rem (0.123E1, ~0.5877472E~38) = 0.0 +* (0.123E1, ~0.1E~44) = ~0.1E~44 ++ (0.123E1, ~0.1E~44) = 0.123E1 +- (0.123E1, ~0.1E~44) = 0.123E1 +/ (0.123E1, ~0.1E~44) = ~inf +nextAfter (0.123E1, ~0.1E~44) = 0.12299999E1 +rem (0.123E1, ~0.1E~44) = ~inf +* (0.123E1, ~0.0) = ~0.0 ++ (0.123E1, ~0.0) = 0.123E1 +- (0.123E1, ~0.0) = 0.123E1 +/ (0.123E1, ~0.0) = ~inf +nextAfter (0.123E1, ~0.0) = 0.12299999E1 +rem (0.123E1, ~0.0) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300001E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123E1, ~inf) = ~inf ++ (0.123E1, ~inf) = ~inf +- (0.123E1, ~inf) = inf +/ (0.123E1, ~inf) = ~0.0 +nextAfter (0.123E1, ~inf) = 0.12299999E1 +rem (0.123E1, ~inf) = 0.123E1 +* (0.123E1, nan) = nan ++ (0.123E1, nan) = nan +- (0.123E1, nan) = nan +/ (0.123E1, nan) = nan +nextAfter (0.123E1, nan) = nan +rem (0.123E1, nan) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300001E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123, 0.34028235E39) = 0.4185473E38 ++ (0.123, 0.34028235E39) = 0.34028235E39 +- (0.123, 0.34028235E39) = ~0.34028235E39 +/ (0.123, 0.34028235E39) = 0.361465E~39 +nextAfter (0.123, 0.34028235E39) = 0.12300001 +rem (0.123, 0.34028235E39) = 0.123 +* (0.123, 0.17014117E39) = 0.20927365E38 ++ (0.123, 0.17014117E39) = 0.17014117E39 +- (0.123, 0.17014117E39) = ~0.17014117E39 +/ (0.123, 0.17014117E39) = 0.722928E~39 +nextAfter (0.123, 0.17014117E39) = 0.12300001 +rem (0.123, 0.17014117E39) = 0.123 +* (0.123, 0.123E4) = 0.15129001E3 ++ (0.123, 0.123E4) = 0.1230123E4 +- (0.123, 0.123E4) = ~0.1229877E4 +/ (0.123, 0.123E4) = 0.100000005E~3 +nextAfter (0.123, 0.123E4) = 0.12300001 +rem (0.123, 0.123E4) = 0.123 +* (0.123, 0.123E2) = 0.15129001E1 ++ (0.123, 0.123E2) = 0.12423E2 +- (0.123, 0.123E2) = ~0.12177E2 +/ (0.123, 0.123E2) = 0.1E~1 +nextAfter (0.123, 0.123E2) = 0.12300001 +rem (0.123, 0.123E2) = 0.123 +* (0.123, 0.31415927E1) = 0.38641593 ++ (0.123, 0.31415927E1) = 0.32645926E1 +- (0.123, 0.31415927E1) = ~0.30185928E1 +/ (0.123, 0.31415927E1) = 0.39152116E~1 +nextAfter (0.123, 0.31415927E1) = 0.12300001 +rem (0.123, 0.31415927E1) = 0.123 +* (0.123, 0.27182817E1) = 0.33434868 ++ (0.123, 0.27182817E1) = 0.28412817E1 +- (0.123, 0.27182817E1) = ~0.25952818E1 +/ (0.123, 0.27182817E1) = 0.45249175E~1 +nextAfter (0.123, 0.27182817E1) = 0.12300001 +rem (0.123, 0.27182817E1) = 0.123 +* (0.123, 0.123E1) = 0.15129 ++ (0.123, 0.123E1) = 0.1353E1 +- (0.123, 0.123E1) = ~0.1107E1 +/ (0.123, 0.123E1) = 0.1 +nextAfter (0.123, 0.123E1) = 0.12300001 +rem (0.123, 0.123E1) = 0.123 +* (0.123, 0.123) = 0.15129001E~1 ++ (0.123, 0.123) = 0.246 +- (0.123, 0.123) = 0.0 +/ (0.123, 0.123) = 0.1E1 +nextAfter (0.123, 0.123) = 0.123 +rem (0.123, 0.123) = 0.0 +* (0.123, 0.123E~2) = 0.15129E~3 ++ (0.123, 0.123E~2) = 0.124230005 +- (0.123, 0.123E~2) = 0.12177 +/ (0.123, 0.123E~2) = 0.1E3 +nextAfter (0.123, 0.123E~2) = 0.122999996 +rem (0.123, 0.123E~2) = 0.0 +* (0.123, 0.11754944E~37) = 0.1445858E~38 ++ (0.123, 0.11754944E~37) = 0.123 +- (0.123, 0.11754944E~37) = 0.123 +/ (0.123, 0.11754944E~37) = 0.10463683E38 +nextAfter (0.123, 0.11754944E~37) = 0.122999996 +rem (0.123, 0.11754944E~37) = 0.0 +* (0.123, 0.5877472E~38) = 0.722928E~39 ++ (0.123, 0.5877472E~38) = 0.123 +- (0.123, 0.5877472E~38) = 0.123 +/ (0.123, 0.5877472E~38) = 0.20927366E38 +nextAfter (0.123, 0.5877472E~38) = 0.122999996 +rem (0.123, 0.5877472E~38) = 0.0 +* (0.123, 0.1E~44) = 0.0 ++ (0.123, 0.1E~44) = 0.123 +- (0.123, 0.1E~44) = 0.123 +/ (0.123, 0.1E~44) = inf +nextAfter (0.123, 0.1E~44) = 0.122999996 +rem (0.123, 0.1E~44) = ~inf +* (0.123, 0.0) = 0.0 ++ (0.123, 0.0) = 0.123 +- (0.123, 0.0) = 0.123 +/ (0.123, 0.0) = inf +nextAfter (0.123, 0.0) = 0.122999996 +rem (0.123, 0.0) = nan +* (0.123, ~0.34028235E39) = ~0.4185473E38 ++ (0.123, ~0.34028235E39) = ~0.34028235E39 +- (0.123, ~0.34028235E39) = 0.34028235E39 +/ (0.123, ~0.34028235E39) = ~0.361465E~39 +nextAfter (0.123, ~0.34028235E39) = 0.122999996 +rem (0.123, ~0.34028235E39) = 0.123 +* (0.123, ~0.17014117E39) = ~0.20927365E38 ++ (0.123, ~0.17014117E39) = ~0.17014117E39 +- (0.123, ~0.17014117E39) = 0.17014117E39 +/ (0.123, ~0.17014117E39) = ~0.722928E~39 +nextAfter (0.123, ~0.17014117E39) = 0.122999996 +rem (0.123, ~0.17014117E39) = 0.123 +* (0.123, ~0.123E4) = ~0.15129001E3 ++ (0.123, ~0.123E4) = ~0.1229877E4 +- (0.123, ~0.123E4) = 0.1230123E4 +/ (0.123, ~0.123E4) = ~0.100000005E~3 +nextAfter (0.123, ~0.123E4) = 0.122999996 +rem (0.123, ~0.123E4) = 0.123 +* (0.123, ~0.123E2) = ~0.15129001E1 ++ (0.123, ~0.123E2) = ~0.12177E2 +- (0.123, ~0.123E2) = 0.12423E2 +/ (0.123, ~0.123E2) = ~0.1E~1 +nextAfter (0.123, ~0.123E2) = 0.122999996 +rem (0.123, ~0.123E2) = 0.123 +* (0.123, ~0.31415927E1) = ~0.38641593 ++ (0.123, ~0.31415927E1) = ~0.30185928E1 +- (0.123, ~0.31415927E1) = 0.32645926E1 +/ (0.123, ~0.31415927E1) = ~0.39152116E~1 +nextAfter (0.123, ~0.31415927E1) = 0.122999996 +rem (0.123, ~0.31415927E1) = 0.123 +* (0.123, ~0.27182817E1) = ~0.33434868 ++ (0.123, ~0.27182817E1) = ~0.25952818E1 +- (0.123, ~0.27182817E1) = 0.28412817E1 +/ (0.123, ~0.27182817E1) = ~0.45249175E~1 +nextAfter (0.123, ~0.27182817E1) = 0.122999996 +rem (0.123, ~0.27182817E1) = 0.123 +* (0.123, ~0.123E1) = ~0.15129 ++ (0.123, ~0.123E1) = ~0.1107E1 +- (0.123, ~0.123E1) = 0.1353E1 +/ (0.123, ~0.123E1) = ~0.1 +nextAfter (0.123, ~0.123E1) = 0.122999996 +rem (0.123, ~0.123E1) = 0.123 +* (0.123, ~0.123) = ~0.15129001E~1 ++ (0.123, ~0.123) = 0.0 +- (0.123, ~0.123) = 0.246 +/ (0.123, ~0.123) = ~0.1E1 +nextAfter (0.123, ~0.123) = 0.122999996 +rem (0.123, ~0.123) = 0.0 +* (0.123, ~0.123E~2) = ~0.15129E~3 ++ (0.123, ~0.123E~2) = 0.12177 +- (0.123, ~0.123E~2) = 0.124230005 +/ (0.123, ~0.123E~2) = ~0.1E3 +nextAfter (0.123, ~0.123E~2) = 0.122999996 +rem (0.123, ~0.123E~2) = 0.0 +* (0.123, ~0.11754944E~37) = ~0.1445858E~38 ++ (0.123, ~0.11754944E~37) = 0.123 +- (0.123, ~0.11754944E~37) = 0.123 +/ (0.123, ~0.11754944E~37) = ~0.10463683E38 +nextAfter (0.123, ~0.11754944E~37) = 0.122999996 +rem (0.123, ~0.11754944E~37) = 0.0 +* (0.123, ~0.5877472E~38) = ~0.722928E~39 ++ (0.123, ~0.5877472E~38) = 0.123 +- (0.123, ~0.5877472E~38) = 0.123 +/ (0.123, ~0.5877472E~38) = ~0.20927366E38 +nextAfter (0.123, ~0.5877472E~38) = 0.122999996 +rem (0.123, ~0.5877472E~38) = 0.0 +* (0.123, ~0.1E~44) = ~0.0 ++ (0.123, ~0.1E~44) = 0.123 +- (0.123, ~0.1E~44) = 0.123 +/ (0.123, ~0.1E~44) = ~inf +nextAfter (0.123, ~0.1E~44) = 0.122999996 +rem (0.123, ~0.1E~44) = ~inf +* (0.123, ~0.0) = ~0.0 ++ (0.123, ~0.0) = 0.123 +- (0.123, ~0.0) = 0.123 +/ (0.123, ~0.0) = ~inf +nextAfter (0.123, ~0.0) = 0.122999996 +rem (0.123, ~0.0) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300001 +rem (0.123, inf) = 0.123 +* (0.123, ~inf) = ~inf ++ (0.123, ~inf) = ~inf +- (0.123, ~inf) = inf +/ (0.123, ~inf) = ~0.0 +nextAfter (0.123, ~inf) = 0.122999996 +rem (0.123, ~inf) = 0.123 +* (0.123, nan) = nan ++ (0.123, nan) = nan +- (0.123, nan) = nan +/ (0.123, nan) = nan +nextAfter (0.123, nan) = nan +rem (0.123, nan) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300001 +rem (0.123, inf) = 0.123 +* (0.123E~2, 0.34028235E39) = 0.4185473E36 ++ (0.123E~2, 0.34028235E39) = 0.34028235E39 +- (0.123E~2, 0.34028235E39) = ~0.34028235E39 +/ (0.123E~2, 0.34028235E39) = 0.3614E~41 +nextAfter (0.123E~2, 0.34028235E39) = 0.12300002E~2 +rem (0.123E~2, 0.34028235E39) = 0.123E~2 +* (0.123E~2, 0.17014117E39) = 0.20927364E36 ++ (0.123E~2, 0.17014117E39) = 0.17014117E39 +- (0.123E~2, 0.17014117E39) = ~0.17014117E39 +/ (0.123E~2, 0.17014117E39) = 0.7229E~41 +nextAfter (0.123E~2, 0.17014117E39) = 0.12300002E~2 +rem (0.123E~2, 0.17014117E39) = 0.123E~2 +* (0.123E~2, 0.123E4) = 0.15129001E1 ++ (0.123E~2, 0.123E4) = 0.12300012E4 +- (0.123E~2, 0.123E4) = ~0.12299988E4 +/ (0.123E~2, 0.123E4) = 0.1E~5 +nextAfter (0.123E~2, 0.123E4) = 0.12300002E~2 +rem (0.123E~2, 0.123E4) = 0.123E~2 +* (0.123E~2, 0.123E2) = 0.15129001E~1 ++ (0.123E~2, 0.123E2) = 0.1230123E2 +- (0.123E~2, 0.123E2) = ~0.1229877E2 +/ (0.123E~2, 0.123E2) = 0.100000005E~3 +nextAfter (0.123E~2, 0.123E2) = 0.12300002E~2 +rem (0.123E~2, 0.123E2) = 0.123E~2 +* (0.123E~2, 0.31415927E1) = 0.38641593E~2 ++ (0.123E~2, 0.31415927E1) = 0.31428227E1 +- (0.123E~2, 0.31415927E1) = ~0.31403627E1 +/ (0.123E~2, 0.31415927E1) = 0.39152117E~3 +nextAfter (0.123E~2, 0.31415927E1) = 0.12300002E~2 +rem (0.123E~2, 0.31415927E1) = 0.123E~2 +* (0.123E~2, 0.27182817E1) = 0.33434867E~2 ++ (0.123E~2, 0.27182817E1) = 0.27195117E1 +- (0.123E~2, 0.27182817E1) = ~0.27170517E1 +/ (0.123E~2, 0.27182817E1) = 0.45249175E~3 +nextAfter (0.123E~2, 0.27182817E1) = 0.12300002E~2 +rem (0.123E~2, 0.27182817E1) = 0.123E~2 +* (0.123E~2, 0.123E1) = 0.15129001E~2 ++ (0.123E~2, 0.123E1) = 0.123123E1 +- (0.123E~2, 0.123E1) = ~0.122877E1 +/ (0.123E~2, 0.123E1) = 0.1E~2 +nextAfter (0.123E~2, 0.123E1) = 0.12300002E~2 +rem (0.123E~2, 0.123E1) = 0.123E~2 +* (0.123E~2, 0.123) = 0.15129E~3 ++ (0.123E~2, 0.123) = 0.124230005 +- (0.123E~2, 0.123) = ~0.12177 +/ (0.123E~2, 0.123) = 0.1E~1 +nextAfter (0.123E~2, 0.123) = 0.12300002E~2 +rem (0.123E~2, 0.123) = 0.123E~2 +* (0.123E~2, 0.123E~2) = 0.15129001E~5 ++ (0.123E~2, 0.123E~2) = 0.246E~2 +- (0.123E~2, 0.123E~2) = 0.0 +/ (0.123E~2, 0.123E~2) = 0.1E1 +nextAfter (0.123E~2, 0.123E~2) = 0.123E~2 +rem (0.123E~2, 0.123E~2) = 0.0 +* (0.123E~2, 0.11754944E~37) = 0.14459E~40 ++ (0.123E~2, 0.11754944E~37) = 0.123E~2 +- (0.123E~2, 0.11754944E~37) = 0.123E~2 +/ (0.123E~2, 0.11754944E~37) = 0.10463683E36 +nextAfter (0.123E~2, 0.11754944E~37) = 0.12299999E~2 +rem (0.123E~2, 0.11754944E~37) = 0.0 +* (0.123E~2, 0.5877472E~38) = 0.7229E~41 ++ (0.123E~2, 0.5877472E~38) = 0.123E~2 +- (0.123E~2, 0.5877472E~38) = 0.123E~2 +/ (0.123E~2, 0.5877472E~38) = 0.20927366E36 +nextAfter (0.123E~2, 0.5877472E~38) = 0.12299999E~2 +rem (0.123E~2, 0.5877472E~38) = 0.0 +* (0.123E~2, 0.1E~44) = 0.0 ++ (0.123E~2, 0.1E~44) = 0.123E~2 +- (0.123E~2, 0.1E~44) = 0.123E~2 +/ (0.123E~2, 0.1E~44) = inf +nextAfter (0.123E~2, 0.1E~44) = 0.12299999E~2 +rem (0.123E~2, 0.1E~44) = ~inf +* (0.123E~2, 0.0) = 0.0 ++ (0.123E~2, 0.0) = 0.123E~2 +- (0.123E~2, 0.0) = 0.123E~2 +/ (0.123E~2, 0.0) = inf +nextAfter (0.123E~2, 0.0) = 0.12299999E~2 +rem (0.123E~2, 0.0) = nan +* (0.123E~2, ~0.34028235E39) = ~0.4185473E36 ++ (0.123E~2, ~0.34028235E39) = ~0.34028235E39 +- (0.123E~2, ~0.34028235E39) = 0.34028235E39 +/ (0.123E~2, ~0.34028235E39) = ~0.3614E~41 +nextAfter (0.123E~2, ~0.34028235E39) = 0.12299999E~2 +rem (0.123E~2, ~0.34028235E39) = 0.123E~2 +* (0.123E~2, ~0.17014117E39) = ~0.20927364E36 ++ (0.123E~2, ~0.17014117E39) = ~0.17014117E39 +- (0.123E~2, ~0.17014117E39) = 0.17014117E39 +/ (0.123E~2, ~0.17014117E39) = ~0.7229E~41 +nextAfter (0.123E~2, ~0.17014117E39) = 0.12299999E~2 +rem (0.123E~2, ~0.17014117E39) = 0.123E~2 +* (0.123E~2, ~0.123E4) = ~0.15129001E1 ++ (0.123E~2, ~0.123E4) = ~0.12299988E4 +- (0.123E~2, ~0.123E4) = 0.12300012E4 +/ (0.123E~2, ~0.123E4) = ~0.1E~5 +nextAfter (0.123E~2, ~0.123E4) = 0.12299999E~2 +rem (0.123E~2, ~0.123E4) = 0.123E~2 +* (0.123E~2, ~0.123E2) = ~0.15129001E~1 ++ (0.123E~2, ~0.123E2) = ~0.1229877E2 +- (0.123E~2, ~0.123E2) = 0.1230123E2 +/ (0.123E~2, ~0.123E2) = ~0.100000005E~3 +nextAfter (0.123E~2, ~0.123E2) = 0.12299999E~2 +rem (0.123E~2, ~0.123E2) = 0.123E~2 +* (0.123E~2, ~0.31415927E1) = ~0.38641593E~2 ++ (0.123E~2, ~0.31415927E1) = ~0.31403627E1 +- (0.123E~2, ~0.31415927E1) = 0.31428227E1 +/ (0.123E~2, ~0.31415927E1) = ~0.39152117E~3 +nextAfter (0.123E~2, ~0.31415927E1) = 0.12299999E~2 +rem (0.123E~2, ~0.31415927E1) = 0.123E~2 +* (0.123E~2, ~0.27182817E1) = ~0.33434867E~2 ++ (0.123E~2, ~0.27182817E1) = ~0.27170517E1 +- (0.123E~2, ~0.27182817E1) = 0.27195117E1 +/ (0.123E~2, ~0.27182817E1) = ~0.45249175E~3 +nextAfter (0.123E~2, ~0.27182817E1) = 0.12299999E~2 +rem (0.123E~2, ~0.27182817E1) = 0.123E~2 +* (0.123E~2, ~0.123E1) = ~0.15129001E~2 ++ (0.123E~2, ~0.123E1) = ~0.122877E1 +- (0.123E~2, ~0.123E1) = 0.123123E1 +/ (0.123E~2, ~0.123E1) = ~0.1E~2 +nextAfter (0.123E~2, ~0.123E1) = 0.12299999E~2 +rem (0.123E~2, ~0.123E1) = 0.123E~2 +* (0.123E~2, ~0.123) = ~0.15129E~3 ++ (0.123E~2, ~0.123) = ~0.12177 +- (0.123E~2, ~0.123) = 0.124230005 +/ (0.123E~2, ~0.123) = ~0.1E~1 +nextAfter (0.123E~2, ~0.123) = 0.12299999E~2 +rem (0.123E~2, ~0.123) = 0.123E~2 +* (0.123E~2, ~0.123E~2) = ~0.15129001E~5 ++ (0.123E~2, ~0.123E~2) = 0.0 +- (0.123E~2, ~0.123E~2) = 0.246E~2 +/ (0.123E~2, ~0.123E~2) = ~0.1E1 +nextAfter (0.123E~2, ~0.123E~2) = 0.12299999E~2 +rem (0.123E~2, ~0.123E~2) = 0.0 +* (0.123E~2, ~0.11754944E~37) = ~0.14459E~40 ++ (0.123E~2, ~0.11754944E~37) = 0.123E~2 +- (0.123E~2, ~0.11754944E~37) = 0.123E~2 +/ (0.123E~2, ~0.11754944E~37) = ~0.10463683E36 +nextAfter (0.123E~2, ~0.11754944E~37) = 0.12299999E~2 +rem (0.123E~2, ~0.11754944E~37) = 0.0 +* (0.123E~2, ~0.5877472E~38) = ~0.7229E~41 ++ (0.123E~2, ~0.5877472E~38) = 0.123E~2 +- (0.123E~2, ~0.5877472E~38) = 0.123E~2 +/ (0.123E~2, ~0.5877472E~38) = ~0.20927366E36 +nextAfter (0.123E~2, ~0.5877472E~38) = 0.12299999E~2 +rem (0.123E~2, ~0.5877472E~38) = 0.0 +* (0.123E~2, ~0.1E~44) = ~0.0 ++ (0.123E~2, ~0.1E~44) = 0.123E~2 +- (0.123E~2, ~0.1E~44) = 0.123E~2 +/ (0.123E~2, ~0.1E~44) = ~inf +nextAfter (0.123E~2, ~0.1E~44) = 0.12299999E~2 +rem (0.123E~2, ~0.1E~44) = ~inf +* (0.123E~2, ~0.0) = ~0.0 ++ (0.123E~2, ~0.0) = 0.123E~2 +- (0.123E~2, ~0.0) = 0.123E~2 +/ (0.123E~2, ~0.0) = ~inf +nextAfter (0.123E~2, ~0.0) = 0.12299999E~2 +rem (0.123E~2, ~0.0) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.123E~2, ~inf) = ~inf ++ (0.123E~2, ~inf) = ~inf +- (0.123E~2, ~inf) = inf +/ (0.123E~2, ~inf) = ~0.0 +nextAfter (0.123E~2, ~inf) = 0.12299999E~2 +rem (0.123E~2, ~inf) = 0.123E~2 +* (0.123E~2, nan) = nan ++ (0.123E~2, nan) = nan +- (0.123E~2, nan) = nan +/ (0.123E~2, nan) = nan +nextAfter (0.123E~2, nan) = nan +rem (0.123E~2, nan) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.11754944E~37, 0.34028235E39) = 0.39999998E1 ++ (0.11754944E~37, 0.34028235E39) = 0.34028235E39 +- (0.11754944E~37, 0.34028235E39) = ~0.34028235E39 +/ (0.11754944E~37, 0.34028235E39) = 0.0 +nextAfter (0.11754944E~37, 0.34028235E39) = 0.11754945E~37 +rem (0.11754944E~37, 0.34028235E39) = 0.11754944E~37 +* (0.11754944E~37, 0.17014117E39) = 0.19999999E1 ++ (0.11754944E~37, 0.17014117E39) = 0.17014117E39 +- (0.11754944E~37, 0.17014117E39) = ~0.17014117E39 +/ (0.11754944E~37, 0.17014117E39) = 0.0 +nextAfter (0.11754944E~37, 0.17014117E39) = 0.11754945E~37 +rem (0.11754944E~37, 0.17014117E39) = 0.11754944E~37 +* (0.11754944E~37, 0.123E4) = 0.1445858E~34 ++ (0.11754944E~37, 0.123E4) = 0.123E4 +- (0.11754944E~37, 0.123E4) = ~0.123E4 +/ (0.11754944E~37, 0.123E4) = 0.9557E~41 +nextAfter (0.11754944E~37, 0.123E4) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E4) = 0.11754944E~37 +* (0.11754944E~37, 0.123E2) = 0.14458581E~36 ++ (0.11754944E~37, 0.123E2) = 0.123E2 +- (0.11754944E~37, 0.123E2) = ~0.123E2 +/ (0.11754944E~37, 0.123E2) = 0.955687E~39 +nextAfter (0.11754944E~37, 0.123E2) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E2) = 0.11754944E~37 +* (0.11754944E~37, 0.31415927E1) = 0.36929245E~37 ++ (0.11754944E~37, 0.31415927E1) = 0.31415927E1 +- (0.11754944E~37, 0.31415927E1) = ~0.31415927E1 +/ (0.11754944E~37, 0.31415927E1) = 0.3741715E~38 +nextAfter (0.11754944E~37, 0.31415927E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.31415927E1) = 0.11754944E~37 +* (0.11754944E~37, 0.27182817E1) = 0.31953248E~37 ++ (0.11754944E~37, 0.27182817E1) = 0.27182817E1 +- (0.11754944E~37, 0.27182817E1) = ~0.27182817E1 +/ (0.11754944E~37, 0.27182817E1) = 0.4324403E~38 +nextAfter (0.11754944E~37, 0.27182817E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.27182817E1) = 0.11754944E~37 +* (0.11754944E~37, 0.123E1) = 0.14458581E~37 ++ (0.11754944E~37, 0.123E1) = 0.123E1 +- (0.11754944E~37, 0.123E1) = ~0.123E1 +/ (0.11754944E~37, 0.123E1) = 0.9556864E~38 +nextAfter (0.11754944E~37, 0.123E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E1) = 0.11754944E~37 +* (0.11754944E~37, 0.123) = 0.1445858E~38 ++ (0.11754944E~37, 0.123) = 0.123 +- (0.11754944E~37, 0.123) = ~0.123 +/ (0.11754944E~37, 0.123) = 0.9556864E~37 +nextAfter (0.11754944E~37, 0.123) = 0.11754945E~37 +rem (0.11754944E~37, 0.123) = 0.11754944E~37 +* (0.11754944E~37, 0.123E~2) = 0.14459E~40 ++ (0.11754944E~37, 0.123E~2) = 0.123E~2 +- (0.11754944E~37, 0.123E~2) = ~0.123E~2 +/ (0.11754944E~37, 0.123E~2) = 0.95568645E~35 +nextAfter (0.11754944E~37, 0.123E~2) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E~2) = 0.11754944E~37 +* (0.11754944E~37, 0.11754944E~37) = 0.0 ++ (0.11754944E~37, 0.11754944E~37) = 0.23509887E~37 +- (0.11754944E~37, 0.11754944E~37) = 0.0 +/ (0.11754944E~37, 0.11754944E~37) = 0.1E1 +nextAfter (0.11754944E~37, 0.11754944E~37) = 0.11754944E~37 +rem (0.11754944E~37, 0.11754944E~37) = 0.0 +* (0.11754944E~37, 0.5877472E~38) = 0.0 ++ (0.11754944E~37, 0.5877472E~38) = 0.17632415E~37 +- (0.11754944E~37, 0.5877472E~38) = 0.5877472E~38 +/ (0.11754944E~37, 0.5877472E~38) = 0.2E1 +nextAfter (0.11754944E~37, 0.5877472E~38) = 0.11754942E~37 +rem (0.11754944E~37, 0.5877472E~38) = 0.0 +* (0.11754944E~37, 0.1E~44) = 0.0 ++ (0.11754944E~37, 0.1E~44) = 0.11754945E~37 +- (0.11754944E~37, 0.1E~44) = 0.11754942E~37 +/ (0.11754944E~37, 0.1E~44) = 0.8388608E7 +nextAfter (0.11754944E~37, 0.1E~44) = 0.11754942E~37 +rem (0.11754944E~37, 0.1E~44) = 0.0 +* (0.11754944E~37, 0.0) = 0.0 ++ (0.11754944E~37, 0.0) = 0.11754944E~37 +- (0.11754944E~37, 0.0) = 0.11754944E~37 +/ (0.11754944E~37, 0.0) = inf +nextAfter (0.11754944E~37, 0.0) = 0.11754942E~37 +rem (0.11754944E~37, 0.0) = nan +* (0.11754944E~37, ~0.34028235E39) = ~0.39999998E1 ++ (0.11754944E~37, ~0.34028235E39) = ~0.34028235E39 +- (0.11754944E~37, ~0.34028235E39) = 0.34028235E39 +/ (0.11754944E~37, ~0.34028235E39) = ~0.0 +nextAfter (0.11754944E~37, ~0.34028235E39) = 0.11754942E~37 +rem (0.11754944E~37, ~0.34028235E39) = 0.11754944E~37 +* (0.11754944E~37, ~0.17014117E39) = ~0.19999999E1 ++ (0.11754944E~37, ~0.17014117E39) = ~0.17014117E39 +- (0.11754944E~37, ~0.17014117E39) = 0.17014117E39 +/ (0.11754944E~37, ~0.17014117E39) = ~0.0 +nextAfter (0.11754944E~37, ~0.17014117E39) = 0.11754942E~37 +rem (0.11754944E~37, ~0.17014117E39) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E4) = ~0.1445858E~34 ++ (0.11754944E~37, ~0.123E4) = ~0.123E4 +- (0.11754944E~37, ~0.123E4) = 0.123E4 +/ (0.11754944E~37, ~0.123E4) = ~0.9557E~41 +nextAfter (0.11754944E~37, ~0.123E4) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E4) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E2) = ~0.14458581E~36 ++ (0.11754944E~37, ~0.123E2) = ~0.123E2 +- (0.11754944E~37, ~0.123E2) = 0.123E2 +/ (0.11754944E~37, ~0.123E2) = ~0.955687E~39 +nextAfter (0.11754944E~37, ~0.123E2) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E2) = 0.11754944E~37 +* (0.11754944E~37, ~0.31415927E1) = ~0.36929245E~37 ++ (0.11754944E~37, ~0.31415927E1) = ~0.31415927E1 +- (0.11754944E~37, ~0.31415927E1) = 0.31415927E1 +/ (0.11754944E~37, ~0.31415927E1) = ~0.3741715E~38 +nextAfter (0.11754944E~37, ~0.31415927E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.31415927E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.27182817E1) = ~0.31953248E~37 ++ (0.11754944E~37, ~0.27182817E1) = ~0.27182817E1 +- (0.11754944E~37, ~0.27182817E1) = 0.27182817E1 +/ (0.11754944E~37, ~0.27182817E1) = ~0.4324403E~38 +nextAfter (0.11754944E~37, ~0.27182817E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.27182817E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E1) = ~0.14458581E~37 ++ (0.11754944E~37, ~0.123E1) = ~0.123E1 +- (0.11754944E~37, ~0.123E1) = 0.123E1 +/ (0.11754944E~37, ~0.123E1) = ~0.9556864E~38 +nextAfter (0.11754944E~37, ~0.123E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.123) = ~0.1445858E~38 ++ (0.11754944E~37, ~0.123) = ~0.123 +- (0.11754944E~37, ~0.123) = 0.123 +/ (0.11754944E~37, ~0.123) = ~0.9556864E~37 +nextAfter (0.11754944E~37, ~0.123) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E~2) = ~0.14459E~40 ++ (0.11754944E~37, ~0.123E~2) = ~0.123E~2 +- (0.11754944E~37, ~0.123E~2) = 0.123E~2 +/ (0.11754944E~37, ~0.123E~2) = ~0.95568645E~35 +nextAfter (0.11754944E~37, ~0.123E~2) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E~2) = 0.11754944E~37 +* (0.11754944E~37, ~0.11754944E~37) = ~0.0 ++ (0.11754944E~37, ~0.11754944E~37) = 0.0 +- (0.11754944E~37, ~0.11754944E~37) = 0.23509887E~37 +/ (0.11754944E~37, ~0.11754944E~37) = ~0.1E1 +nextAfter (0.11754944E~37, ~0.11754944E~37) = 0.11754942E~37 +rem (0.11754944E~37, ~0.11754944E~37) = 0.0 +* (0.11754944E~37, ~0.5877472E~38) = ~0.0 ++ (0.11754944E~37, ~0.5877472E~38) = 0.5877472E~38 +- (0.11754944E~37, ~0.5877472E~38) = 0.17632415E~37 +/ (0.11754944E~37, ~0.5877472E~38) = ~0.2E1 +nextAfter (0.11754944E~37, ~0.5877472E~38) = 0.11754942E~37 +rem (0.11754944E~37, ~0.5877472E~38) = 0.0 +* (0.11754944E~37, ~0.1E~44) = ~0.0 ++ (0.11754944E~37, ~0.1E~44) = 0.11754942E~37 +- (0.11754944E~37, ~0.1E~44) = 0.11754945E~37 +/ (0.11754944E~37, ~0.1E~44) = ~0.8388608E7 +nextAfter (0.11754944E~37, ~0.1E~44) = 0.11754942E~37 +rem (0.11754944E~37, ~0.1E~44) = 0.0 +* (0.11754944E~37, ~0.0) = ~0.0 ++ (0.11754944E~37, ~0.0) = 0.11754944E~37 +- (0.11754944E~37, ~0.0) = 0.11754944E~37 +/ (0.11754944E~37, ~0.0) = ~inf +nextAfter (0.11754944E~37, ~0.0) = 0.11754942E~37 +rem (0.11754944E~37, ~0.0) = nan +* (0.11754944E~37, inf) = inf ++ (0.11754944E~37, inf) = inf +- (0.11754944E~37, inf) = ~inf +/ (0.11754944E~37, inf) = 0.0 +nextAfter (0.11754944E~37, inf) = 0.11754945E~37 +rem (0.11754944E~37, inf) = 0.11754944E~37 +* (0.11754944E~37, ~inf) = ~inf ++ (0.11754944E~37, ~inf) = ~inf +- (0.11754944E~37, ~inf) = inf +/ (0.11754944E~37, ~inf) = ~0.0 +nextAfter (0.11754944E~37, ~inf) = 0.11754942E~37 +rem (0.11754944E~37, ~inf) = 0.11754944E~37 +* (0.11754944E~37, nan) = nan ++ (0.11754944E~37, nan) = nan +- (0.11754944E~37, nan) = nan +/ (0.11754944E~37, nan) = nan +nextAfter (0.11754944E~37, nan) = nan +rem (0.11754944E~37, nan) = nan +* (0.11754944E~37, inf) = inf ++ (0.11754944E~37, inf) = inf +- (0.11754944E~37, inf) = ~inf +/ (0.11754944E~37, inf) = 0.0 +nextAfter (0.11754944E~37, inf) = 0.11754945E~37 +rem (0.11754944E~37, inf) = 0.11754944E~37 +* (0.5877472E~38, 0.34028235E39) = 0.19999999E1 ++ (0.5877472E~38, 0.34028235E39) = 0.34028235E39 +- (0.5877472E~38, 0.34028235E39) = ~0.34028235E39 +/ (0.5877472E~38, 0.34028235E39) = 0.0 +nextAfter (0.5877472E~38, 0.34028235E39) = 0.5877473E~38 +rem (0.5877472E~38, 0.34028235E39) = 0.5877472E~38 +* (0.5877472E~38, 0.17014117E39) = 0.99999994 ++ (0.5877472E~38, 0.17014117E39) = 0.17014117E39 +- (0.5877472E~38, 0.17014117E39) = ~0.17014117E39 +/ (0.5877472E~38, 0.17014117E39) = 0.0 +nextAfter (0.5877472E~38, 0.17014117E39) = 0.5877473E~38 +rem (0.5877472E~38, 0.17014117E39) = 0.5877472E~38 +* (0.5877472E~38, 0.123E4) = 0.722929E~35 ++ (0.5877472E~38, 0.123E4) = 0.123E4 +- (0.5877472E~38, 0.123E4) = ~0.123E4 +/ (0.5877472E~38, 0.123E4) = 0.4778E~41 +nextAfter (0.5877472E~38, 0.123E4) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E4) = 0.5877472E~38 +* (0.5877472E~38, 0.123E2) = 0.72292904E~37 ++ (0.5877472E~38, 0.123E2) = 0.123E2 +- (0.5877472E~38, 0.123E2) = ~0.123E2 +/ (0.5877472E~38, 0.123E2) = 0.477843E~39 +nextAfter (0.5877472E~38, 0.123E2) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E2) = 0.5877472E~38 +* (0.5877472E~38, 0.31415927E1) = 0.18464623E~37 ++ (0.5877472E~38, 0.31415927E1) = 0.31415927E1 +- (0.5877472E~38, 0.31415927E1) = ~0.31415927E1 +/ (0.5877472E~38, 0.31415927E1) = 0.1870857E~38 +nextAfter (0.5877472E~38, 0.31415927E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.31415927E1) = 0.5877472E~38 +* (0.5877472E~38, 0.27182817E1) = 0.15976624E~37 ++ (0.5877472E~38, 0.27182817E1) = 0.27182817E1 +- (0.5877472E~38, 0.27182817E1) = ~0.27182817E1 +/ (0.5877472E~38, 0.27182817E1) = 0.2162201E~38 +nextAfter (0.5877472E~38, 0.27182817E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.27182817E1) = 0.5877472E~38 +* (0.5877472E~38, 0.123E1) = 0.722929E~38 ++ (0.5877472E~38, 0.123E1) = 0.123E1 +- (0.5877472E~38, 0.123E1) = ~0.123E1 +/ (0.5877472E~38, 0.123E1) = 0.4778432E~38 +nextAfter (0.5877472E~38, 0.123E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E1) = 0.5877472E~38 +* (0.5877472E~38, 0.123) = 0.722928E~39 ++ (0.5877472E~38, 0.123) = 0.123 +- (0.5877472E~38, 0.123) = ~0.123 +/ (0.5877472E~38, 0.123) = 0.4778432E~37 +nextAfter (0.5877472E~38, 0.123) = 0.5877473E~38 +rem (0.5877472E~38, 0.123) = 0.5877472E~38 +* (0.5877472E~38, 0.123E~2) = 0.7229E~41 ++ (0.5877472E~38, 0.123E~2) = 0.123E~2 +- (0.5877472E~38, 0.123E~2) = ~0.123E~2 +/ (0.5877472E~38, 0.123E~2) = 0.47784322E~35 +nextAfter (0.5877472E~38, 0.123E~2) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E~2) = 0.5877472E~38 +* (0.5877472E~38, 0.11754944E~37) = 0.0 ++ (0.5877472E~38, 0.11754944E~37) = 0.17632415E~37 +- (0.5877472E~38, 0.11754944E~37) = ~0.5877472E~38 +/ (0.5877472E~38, 0.11754944E~37) = 0.5 +nextAfter (0.5877472E~38, 0.11754944E~37) = 0.5877473E~38 +rem (0.5877472E~38, 0.11754944E~37) = 0.5877472E~38 +* (0.5877472E~38, 0.5877472E~38) = 0.0 ++ (0.5877472E~38, 0.5877472E~38) = 0.11754944E~37 +- (0.5877472E~38, 0.5877472E~38) = 0.0 +/ (0.5877472E~38, 0.5877472E~38) = 0.1E1 +nextAfter (0.5877472E~38, 0.5877472E~38) = 0.5877472E~38 +rem (0.5877472E~38, 0.5877472E~38) = 0.0 +* (0.5877472E~38, 0.1E~44) = 0.0 ++ (0.5877472E~38, 0.1E~44) = 0.5877473E~38 +- (0.5877472E~38, 0.1E~44) = 0.587747E~38 +/ (0.5877472E~38, 0.1E~44) = 0.4194304E7 +nextAfter (0.5877472E~38, 0.1E~44) = 0.587747E~38 +rem (0.5877472E~38, 0.1E~44) = 0.0 +* (0.5877472E~38, 0.0) = 0.0 ++ (0.5877472E~38, 0.0) = 0.5877472E~38 +- (0.5877472E~38, 0.0) = 0.5877472E~38 +/ (0.5877472E~38, 0.0) = inf +nextAfter (0.5877472E~38, 0.0) = 0.587747E~38 +rem (0.5877472E~38, 0.0) = nan +* (0.5877472E~38, ~0.34028235E39) = ~0.19999999E1 ++ (0.5877472E~38, ~0.34028235E39) = ~0.34028235E39 +- (0.5877472E~38, ~0.34028235E39) = 0.34028235E39 +/ (0.5877472E~38, ~0.34028235E39) = ~0.0 +nextAfter (0.5877472E~38, ~0.34028235E39) = 0.587747E~38 +rem (0.5877472E~38, ~0.34028235E39) = 0.5877472E~38 +* (0.5877472E~38, ~0.17014117E39) = ~0.99999994 ++ (0.5877472E~38, ~0.17014117E39) = ~0.17014117E39 +- (0.5877472E~38, ~0.17014117E39) = 0.17014117E39 +/ (0.5877472E~38, ~0.17014117E39) = ~0.0 +nextAfter (0.5877472E~38, ~0.17014117E39) = 0.587747E~38 +rem (0.5877472E~38, ~0.17014117E39) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E4) = ~0.722929E~35 ++ (0.5877472E~38, ~0.123E4) = ~0.123E4 +- (0.5877472E~38, ~0.123E4) = 0.123E4 +/ (0.5877472E~38, ~0.123E4) = ~0.4778E~41 +nextAfter (0.5877472E~38, ~0.123E4) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E4) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E2) = ~0.72292904E~37 ++ (0.5877472E~38, ~0.123E2) = ~0.123E2 +- (0.5877472E~38, ~0.123E2) = 0.123E2 +/ (0.5877472E~38, ~0.123E2) = ~0.477843E~39 +nextAfter (0.5877472E~38, ~0.123E2) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E2) = 0.5877472E~38 +* (0.5877472E~38, ~0.31415927E1) = ~0.18464623E~37 ++ (0.5877472E~38, ~0.31415927E1) = ~0.31415927E1 +- (0.5877472E~38, ~0.31415927E1) = 0.31415927E1 +/ (0.5877472E~38, ~0.31415927E1) = ~0.1870857E~38 +nextAfter (0.5877472E~38, ~0.31415927E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.31415927E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.27182817E1) = ~0.15976624E~37 ++ (0.5877472E~38, ~0.27182817E1) = ~0.27182817E1 +- (0.5877472E~38, ~0.27182817E1) = 0.27182817E1 +/ (0.5877472E~38, ~0.27182817E1) = ~0.2162201E~38 +nextAfter (0.5877472E~38, ~0.27182817E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.27182817E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E1) = ~0.722929E~38 ++ (0.5877472E~38, ~0.123E1) = ~0.123E1 +- (0.5877472E~38, ~0.123E1) = 0.123E1 +/ (0.5877472E~38, ~0.123E1) = ~0.4778432E~38 +nextAfter (0.5877472E~38, ~0.123E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.123) = ~0.722928E~39 ++ (0.5877472E~38, ~0.123) = ~0.123 +- (0.5877472E~38, ~0.123) = 0.123 +/ (0.5877472E~38, ~0.123) = ~0.4778432E~37 +nextAfter (0.5877472E~38, ~0.123) = 0.587747E~38 +rem (0.5877472E~38, ~0.123) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E~2) = ~0.7229E~41 ++ (0.5877472E~38, ~0.123E~2) = ~0.123E~2 +- (0.5877472E~38, ~0.123E~2) = 0.123E~2 +/ (0.5877472E~38, ~0.123E~2) = ~0.47784322E~35 +nextAfter (0.5877472E~38, ~0.123E~2) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E~2) = 0.5877472E~38 +* (0.5877472E~38, ~0.11754944E~37) = ~0.0 ++ (0.5877472E~38, ~0.11754944E~37) = ~0.5877472E~38 +- (0.5877472E~38, ~0.11754944E~37) = 0.17632415E~37 +/ (0.5877472E~38, ~0.11754944E~37) = ~0.5 +nextAfter (0.5877472E~38, ~0.11754944E~37) = 0.587747E~38 +rem (0.5877472E~38, ~0.11754944E~37) = 0.5877472E~38 +* (0.5877472E~38, ~0.5877472E~38) = ~0.0 ++ (0.5877472E~38, ~0.5877472E~38) = 0.0 +- (0.5877472E~38, ~0.5877472E~38) = 0.11754944E~37 +/ (0.5877472E~38, ~0.5877472E~38) = ~0.1E1 +nextAfter (0.5877472E~38, ~0.5877472E~38) = 0.587747E~38 +rem (0.5877472E~38, ~0.5877472E~38) = 0.0 +* (0.5877472E~38, ~0.1E~44) = ~0.0 ++ (0.5877472E~38, ~0.1E~44) = 0.587747E~38 +- (0.5877472E~38, ~0.1E~44) = 0.5877473E~38 +/ (0.5877472E~38, ~0.1E~44) = ~0.4194304E7 +nextAfter (0.5877472E~38, ~0.1E~44) = 0.587747E~38 +rem (0.5877472E~38, ~0.1E~44) = 0.0 +* (0.5877472E~38, ~0.0) = ~0.0 ++ (0.5877472E~38, ~0.0) = 0.5877472E~38 +- (0.5877472E~38, ~0.0) = 0.5877472E~38 +/ (0.5877472E~38, ~0.0) = ~inf +nextAfter (0.5877472E~38, ~0.0) = 0.587747E~38 +rem (0.5877472E~38, ~0.0) = nan +* (0.5877472E~38, inf) = inf ++ (0.5877472E~38, inf) = inf +- (0.5877472E~38, inf) = ~inf +/ (0.5877472E~38, inf) = 0.0 +nextAfter (0.5877472E~38, inf) = 0.5877473E~38 +rem (0.5877472E~38, inf) = 0.5877472E~38 +* (0.5877472E~38, ~inf) = ~inf ++ (0.5877472E~38, ~inf) = ~inf +- (0.5877472E~38, ~inf) = inf +/ (0.5877472E~38, ~inf) = ~0.0 +nextAfter (0.5877472E~38, ~inf) = 0.587747E~38 +rem (0.5877472E~38, ~inf) = 0.5877472E~38 +* (0.5877472E~38, nan) = nan ++ (0.5877472E~38, nan) = nan +- (0.5877472E~38, nan) = nan +/ (0.5877472E~38, nan) = nan +nextAfter (0.5877472E~38, nan) = nan +rem (0.5877472E~38, nan) = nan +* (0.5877472E~38, inf) = inf ++ (0.5877472E~38, inf) = inf +- (0.5877472E~38, inf) = ~inf +/ (0.5877472E~38, inf) = 0.0 +nextAfter (0.5877472E~38, inf) = 0.5877473E~38 +rem (0.5877472E~38, inf) = 0.5877472E~38 +* (0.1E~44, 0.34028235E39) = 0.47683713E~6 ++ (0.1E~44, 0.34028235E39) = 0.34028235E39 +- (0.1E~44, 0.34028235E39) = ~0.34028235E39 +/ (0.1E~44, 0.34028235E39) = 0.0 +nextAfter (0.1E~44, 0.34028235E39) = 0.3E~44 +rem (0.1E~44, 0.34028235E39) = 0.1E~44 +* (0.1E~44, 0.17014117E39) = 0.23841856E~6 ++ (0.1E~44, 0.17014117E39) = 0.17014117E39 +- (0.1E~44, 0.17014117E39) = ~0.17014117E39 +/ (0.1E~44, 0.17014117E39) = 0.0 +nextAfter (0.1E~44, 0.17014117E39) = 0.3E~44 +rem (0.1E~44, 0.17014117E39) = 0.1E~44 +* (0.1E~44, 0.123E4) = 0.1724E~41 ++ (0.1E~44, 0.123E4) = 0.123E4 +- (0.1E~44, 0.123E4) = ~0.123E4 +/ (0.1E~44, 0.123E4) = 0.0 +nextAfter (0.1E~44, 0.123E4) = 0.3E~44 +rem (0.1E~44, 0.123E4) = 0.1E~44 +* (0.1E~44, 0.123E2) = 0.17E~43 ++ (0.1E~44, 0.123E2) = 0.123E2 +- (0.1E~44, 0.123E2) = ~0.123E2 +/ (0.1E~44, 0.123E2) = 0.0 +nextAfter (0.1E~44, 0.123E2) = 0.3E~44 +rem (0.1E~44, 0.123E2) = 0.1E~44 +* (0.1E~44, 0.31415927E1) = 0.4E~44 ++ (0.1E~44, 0.31415927E1) = 0.31415927E1 +- (0.1E~44, 0.31415927E1) = ~0.31415927E1 +/ (0.1E~44, 0.31415927E1) = 0.0 +nextAfter (0.1E~44, 0.31415927E1) = 0.3E~44 +rem (0.1E~44, 0.31415927E1) = 0.1E~44 +* (0.1E~44, 0.27182817E1) = 0.4E~44 ++ (0.1E~44, 0.27182817E1) = 0.27182817E1 +- (0.1E~44, 0.27182817E1) = ~0.27182817E1 +/ (0.1E~44, 0.27182817E1) = 0.0 +nextAfter (0.1E~44, 0.27182817E1) = 0.3E~44 +rem (0.1E~44, 0.27182817E1) = 0.1E~44 +* (0.1E~44, 0.123E1) = 0.1E~44 ++ (0.1E~44, 0.123E1) = 0.123E1 +- (0.1E~44, 0.123E1) = ~0.123E1 +/ (0.1E~44, 0.123E1) = 0.1E~44 +nextAfter (0.1E~44, 0.123E1) = 0.3E~44 +rem (0.1E~44, 0.123E1) = 0.1E~44 +* (0.1E~44, 0.123) = 0.0 ++ (0.1E~44, 0.123) = 0.123 +- (0.1E~44, 0.123) = ~0.123 +/ (0.1E~44, 0.123) = 0.11E~43 +nextAfter (0.1E~44, 0.123) = 0.3E~44 +rem (0.1E~44, 0.123) = 0.1E~44 +* (0.1E~44, 0.123E~2) = 0.0 ++ (0.1E~44, 0.123E~2) = 0.123E~2 +- (0.1E~44, 0.123E~2) = ~0.123E~2 +/ (0.1E~44, 0.123E~2) = 0.1139E~41 +nextAfter (0.1E~44, 0.123E~2) = 0.3E~44 +rem (0.1E~44, 0.123E~2) = 0.1E~44 +* (0.1E~44, 0.11754944E~37) = 0.0 ++ (0.1E~44, 0.11754944E~37) = 0.11754945E~37 +- (0.1E~44, 0.11754944E~37) = ~0.11754942E~37 +/ (0.1E~44, 0.11754944E~37) = 0.11920929E~6 +nextAfter (0.1E~44, 0.11754944E~37) = 0.3E~44 +rem (0.1E~44, 0.11754944E~37) = 0.1E~44 +* (0.1E~44, 0.5877472E~38) = 0.0 ++ (0.1E~44, 0.5877472E~38) = 0.5877473E~38 +- (0.1E~44, 0.5877472E~38) = ~0.587747E~38 +/ (0.1E~44, 0.5877472E~38) = 0.23841858E~6 +nextAfter (0.1E~44, 0.5877472E~38) = 0.3E~44 +rem (0.1E~44, 0.5877472E~38) = 0.1E~44 +* (0.1E~44, 0.1E~44) = 0.0 ++ (0.1E~44, 0.1E~44) = 0.3E~44 +- (0.1E~44, 0.1E~44) = 0.0 +/ (0.1E~44, 0.1E~44) = 0.1E1 +nextAfter (0.1E~44, 0.1E~44) = 0.1E~44 +rem (0.1E~44, 0.1E~44) = 0.0 +* (0.1E~44, 0.0) = 0.0 ++ (0.1E~44, 0.0) = 0.1E~44 +- (0.1E~44, 0.0) = 0.1E~44 +/ (0.1E~44, 0.0) = inf +nextAfter (0.1E~44, 0.0) = 0.0 +rem (0.1E~44, 0.0) = nan +* (0.1E~44, ~0.34028235E39) = ~0.47683713E~6 ++ (0.1E~44, ~0.34028235E39) = ~0.34028235E39 +- (0.1E~44, ~0.34028235E39) = 0.34028235E39 +/ (0.1E~44, ~0.34028235E39) = ~0.0 +nextAfter (0.1E~44, ~0.34028235E39) = 0.0 +rem (0.1E~44, ~0.34028235E39) = 0.1E~44 +* (0.1E~44, ~0.17014117E39) = ~0.23841856E~6 ++ (0.1E~44, ~0.17014117E39) = ~0.17014117E39 +- (0.1E~44, ~0.17014117E39) = 0.17014117E39 +/ (0.1E~44, ~0.17014117E39) = ~0.0 +nextAfter (0.1E~44, ~0.17014117E39) = 0.0 +rem (0.1E~44, ~0.17014117E39) = 0.1E~44 +* (0.1E~44, ~0.123E4) = ~0.1724E~41 ++ (0.1E~44, ~0.123E4) = ~0.123E4 +- (0.1E~44, ~0.123E4) = 0.123E4 +/ (0.1E~44, ~0.123E4) = ~0.0 +nextAfter (0.1E~44, ~0.123E4) = 0.0 +rem (0.1E~44, ~0.123E4) = 0.1E~44 +* (0.1E~44, ~0.123E2) = ~0.17E~43 ++ (0.1E~44, ~0.123E2) = ~0.123E2 +- (0.1E~44, ~0.123E2) = 0.123E2 +/ (0.1E~44, ~0.123E2) = ~0.0 +nextAfter (0.1E~44, ~0.123E2) = 0.0 +rem (0.1E~44, ~0.123E2) = 0.1E~44 +* (0.1E~44, ~0.31415927E1) = ~0.4E~44 ++ (0.1E~44, ~0.31415927E1) = ~0.31415927E1 +- (0.1E~44, ~0.31415927E1) = 0.31415927E1 +/ (0.1E~44, ~0.31415927E1) = ~0.0 +nextAfter (0.1E~44, ~0.31415927E1) = 0.0 +rem (0.1E~44, ~0.31415927E1) = 0.1E~44 +* (0.1E~44, ~0.27182817E1) = ~0.4E~44 ++ (0.1E~44, ~0.27182817E1) = ~0.27182817E1 +- (0.1E~44, ~0.27182817E1) = 0.27182817E1 +/ (0.1E~44, ~0.27182817E1) = ~0.0 +nextAfter (0.1E~44, ~0.27182817E1) = 0.0 +rem (0.1E~44, ~0.27182817E1) = 0.1E~44 +* (0.1E~44, ~0.123E1) = ~0.1E~44 ++ (0.1E~44, ~0.123E1) = ~0.123E1 +- (0.1E~44, ~0.123E1) = 0.123E1 +/ (0.1E~44, ~0.123E1) = ~0.1E~44 +nextAfter (0.1E~44, ~0.123E1) = 0.0 +rem (0.1E~44, ~0.123E1) = 0.1E~44 +* (0.1E~44, ~0.123) = ~0.0 ++ (0.1E~44, ~0.123) = ~0.123 +- (0.1E~44, ~0.123) = 0.123 +/ (0.1E~44, ~0.123) = ~0.11E~43 +nextAfter (0.1E~44, ~0.123) = 0.0 +rem (0.1E~44, ~0.123) = 0.1E~44 +* (0.1E~44, ~0.123E~2) = ~0.0 ++ (0.1E~44, ~0.123E~2) = ~0.123E~2 +- (0.1E~44, ~0.123E~2) = 0.123E~2 +/ (0.1E~44, ~0.123E~2) = ~0.1139E~41 +nextAfter (0.1E~44, ~0.123E~2) = 0.0 +rem (0.1E~44, ~0.123E~2) = 0.1E~44 +* (0.1E~44, ~0.11754944E~37) = ~0.0 ++ (0.1E~44, ~0.11754944E~37) = ~0.11754942E~37 +- (0.1E~44, ~0.11754944E~37) = 0.11754945E~37 +/ (0.1E~44, ~0.11754944E~37) = ~0.11920929E~6 +nextAfter (0.1E~44, ~0.11754944E~37) = 0.0 +rem (0.1E~44, ~0.11754944E~37) = 0.1E~44 +* (0.1E~44, ~0.5877472E~38) = ~0.0 ++ (0.1E~44, ~0.5877472E~38) = ~0.587747E~38 +- (0.1E~44, ~0.5877472E~38) = 0.5877473E~38 +/ (0.1E~44, ~0.5877472E~38) = ~0.23841858E~6 +nextAfter (0.1E~44, ~0.5877472E~38) = 0.0 +rem (0.1E~44, ~0.5877472E~38) = 0.1E~44 +* (0.1E~44, ~0.1E~44) = ~0.0 ++ (0.1E~44, ~0.1E~44) = 0.0 +- (0.1E~44, ~0.1E~44) = 0.3E~44 +/ (0.1E~44, ~0.1E~44) = ~0.1E1 +nextAfter (0.1E~44, ~0.1E~44) = 0.0 +rem (0.1E~44, ~0.1E~44) = 0.0 +* (0.1E~44, ~0.0) = ~0.0 ++ (0.1E~44, ~0.0) = 0.1E~44 +- (0.1E~44, ~0.0) = 0.1E~44 +/ (0.1E~44, ~0.0) = ~inf +nextAfter (0.1E~44, ~0.0) = 0.0 +rem (0.1E~44, ~0.0) = nan +* (0.1E~44, inf) = inf ++ (0.1E~44, inf) = inf +- (0.1E~44, inf) = ~inf +/ (0.1E~44, inf) = 0.0 +nextAfter (0.1E~44, inf) = 0.3E~44 +rem (0.1E~44, inf) = 0.1E~44 +* (0.1E~44, ~inf) = ~inf ++ (0.1E~44, ~inf) = ~inf +- (0.1E~44, ~inf) = inf +/ (0.1E~44, ~inf) = ~0.0 +nextAfter (0.1E~44, ~inf) = 0.0 +rem (0.1E~44, ~inf) = 0.1E~44 +* (0.1E~44, nan) = nan ++ (0.1E~44, nan) = nan +- (0.1E~44, nan) = nan +/ (0.1E~44, nan) = nan +nextAfter (0.1E~44, nan) = nan +rem (0.1E~44, nan) = nan +* (0.1E~44, inf) = inf ++ (0.1E~44, inf) = inf +- (0.1E~44, inf) = ~inf +/ (0.1E~44, inf) = 0.0 +nextAfter (0.1E~44, inf) = 0.3E~44 +rem (0.1E~44, inf) = 0.1E~44 +* (0.0, 0.34028235E39) = 0.0 ++ (0.0, 0.34028235E39) = 0.34028235E39 +- (0.0, 0.34028235E39) = ~0.34028235E39 +/ (0.0, 0.34028235E39) = 0.0 +nextAfter (0.0, 0.34028235E39) = 0.1E~44 +rem (0.0, 0.34028235E39) = 0.0 +* (0.0, 0.17014117E39) = 0.0 ++ (0.0, 0.17014117E39) = 0.17014117E39 +- (0.0, 0.17014117E39) = ~0.17014117E39 +/ (0.0, 0.17014117E39) = 0.0 +nextAfter (0.0, 0.17014117E39) = 0.1E~44 +rem (0.0, 0.17014117E39) = 0.0 +* (0.0, 0.123E4) = 0.0 ++ (0.0, 0.123E4) = 0.123E4 +- (0.0, 0.123E4) = ~0.123E4 +/ (0.0, 0.123E4) = 0.0 +nextAfter (0.0, 0.123E4) = 0.1E~44 +rem (0.0, 0.123E4) = 0.0 +* (0.0, 0.123E2) = 0.0 ++ (0.0, 0.123E2) = 0.123E2 +- (0.0, 0.123E2) = ~0.123E2 +/ (0.0, 0.123E2) = 0.0 +nextAfter (0.0, 0.123E2) = 0.1E~44 +rem (0.0, 0.123E2) = 0.0 +* (0.0, 0.31415927E1) = 0.0 ++ (0.0, 0.31415927E1) = 0.31415927E1 +- (0.0, 0.31415927E1) = ~0.31415927E1 +/ (0.0, 0.31415927E1) = 0.0 +nextAfter (0.0, 0.31415927E1) = 0.1E~44 +rem (0.0, 0.31415927E1) = 0.0 +* (0.0, 0.27182817E1) = 0.0 ++ (0.0, 0.27182817E1) = 0.27182817E1 +- (0.0, 0.27182817E1) = ~0.27182817E1 +/ (0.0, 0.27182817E1) = 0.0 +nextAfter (0.0, 0.27182817E1) = 0.1E~44 +rem (0.0, 0.27182817E1) = 0.0 +* (0.0, 0.123E1) = 0.0 ++ (0.0, 0.123E1) = 0.123E1 +- (0.0, 0.123E1) = ~0.123E1 +/ (0.0, 0.123E1) = 0.0 +nextAfter (0.0, 0.123E1) = 0.1E~44 +rem (0.0, 0.123E1) = 0.0 +* (0.0, 0.123) = 0.0 ++ (0.0, 0.123) = 0.123 +- (0.0, 0.123) = ~0.123 +/ (0.0, 0.123) = 0.0 +nextAfter (0.0, 0.123) = 0.1E~44 +rem (0.0, 0.123) = 0.0 +* (0.0, 0.123E~2) = 0.0 ++ (0.0, 0.123E~2) = 0.123E~2 +- (0.0, 0.123E~2) = ~0.123E~2 +/ (0.0, 0.123E~2) = 0.0 +nextAfter (0.0, 0.123E~2) = 0.1E~44 +rem (0.0, 0.123E~2) = 0.0 +* (0.0, 0.11754944E~37) = 0.0 ++ (0.0, 0.11754944E~37) = 0.11754944E~37 +- (0.0, 0.11754944E~37) = ~0.11754944E~37 +/ (0.0, 0.11754944E~37) = 0.0 +nextAfter (0.0, 0.11754944E~37) = 0.1E~44 +rem (0.0, 0.11754944E~37) = 0.0 +* (0.0, 0.5877472E~38) = 0.0 ++ (0.0, 0.5877472E~38) = 0.5877472E~38 +- (0.0, 0.5877472E~38) = ~0.5877472E~38 +/ (0.0, 0.5877472E~38) = 0.0 +nextAfter (0.0, 0.5877472E~38) = 0.1E~44 +rem (0.0, 0.5877472E~38) = 0.0 +* (0.0, 0.1E~44) = 0.0 ++ (0.0, 0.1E~44) = 0.1E~44 +- (0.0, 0.1E~44) = ~0.1E~44 +/ (0.0, 0.1E~44) = 0.0 +nextAfter (0.0, 0.1E~44) = 0.1E~44 +rem (0.0, 0.1E~44) = 0.0 +* (0.0, 0.0) = 0.0 ++ (0.0, 0.0) = 0.0 +- (0.0, 0.0) = 0.0 +/ (0.0, 0.0) = nan +nextAfter (0.0, 0.0) = 0.0 +rem (0.0, 0.0) = 0.0 +* (0.0, ~0.34028235E39) = ~0.0 ++ (0.0, ~0.34028235E39) = ~0.34028235E39 +- (0.0, ~0.34028235E39) = 0.34028235E39 +/ (0.0, ~0.34028235E39) = ~0.0 +nextAfter (0.0, ~0.34028235E39) = ~0.1E~44 +rem (0.0, ~0.34028235E39) = 0.0 +* (0.0, ~0.17014117E39) = ~0.0 ++ (0.0, ~0.17014117E39) = ~0.17014117E39 +- (0.0, ~0.17014117E39) = 0.17014117E39 +/ (0.0, ~0.17014117E39) = ~0.0 +nextAfter (0.0, ~0.17014117E39) = ~0.1E~44 +rem (0.0, ~0.17014117E39) = 0.0 +* (0.0, ~0.123E4) = ~0.0 ++ (0.0, ~0.123E4) = ~0.123E4 +- (0.0, ~0.123E4) = 0.123E4 +/ (0.0, ~0.123E4) = ~0.0 +nextAfter (0.0, ~0.123E4) = ~0.1E~44 +rem (0.0, ~0.123E4) = 0.0 +* (0.0, ~0.123E2) = ~0.0 ++ (0.0, ~0.123E2) = ~0.123E2 +- (0.0, ~0.123E2) = 0.123E2 +/ (0.0, ~0.123E2) = ~0.0 +nextAfter (0.0, ~0.123E2) = ~0.1E~44 +rem (0.0, ~0.123E2) = 0.0 +* (0.0, ~0.31415927E1) = ~0.0 ++ (0.0, ~0.31415927E1) = ~0.31415927E1 +- (0.0, ~0.31415927E1) = 0.31415927E1 +/ (0.0, ~0.31415927E1) = ~0.0 +nextAfter (0.0, ~0.31415927E1) = ~0.1E~44 +rem (0.0, ~0.31415927E1) = 0.0 +* (0.0, ~0.27182817E1) = ~0.0 ++ (0.0, ~0.27182817E1) = ~0.27182817E1 +- (0.0, ~0.27182817E1) = 0.27182817E1 +/ (0.0, ~0.27182817E1) = ~0.0 +nextAfter (0.0, ~0.27182817E1) = ~0.1E~44 +rem (0.0, ~0.27182817E1) = 0.0 +* (0.0, ~0.123E1) = ~0.0 ++ (0.0, ~0.123E1) = ~0.123E1 +- (0.0, ~0.123E1) = 0.123E1 +/ (0.0, ~0.123E1) = ~0.0 +nextAfter (0.0, ~0.123E1) = ~0.1E~44 +rem (0.0, ~0.123E1) = 0.0 +* (0.0, ~0.123) = ~0.0 ++ (0.0, ~0.123) = ~0.123 +- (0.0, ~0.123) = 0.123 +/ (0.0, ~0.123) = ~0.0 +nextAfter (0.0, ~0.123) = ~0.1E~44 +rem (0.0, ~0.123) = 0.0 +* (0.0, ~0.123E~2) = ~0.0 ++ (0.0, ~0.123E~2) = ~0.123E~2 +- (0.0, ~0.123E~2) = 0.123E~2 +/ (0.0, ~0.123E~2) = ~0.0 +nextAfter (0.0, ~0.123E~2) = ~0.1E~44 +rem (0.0, ~0.123E~2) = 0.0 +* (0.0, ~0.11754944E~37) = ~0.0 ++ (0.0, ~0.11754944E~37) = ~0.11754944E~37 +- (0.0, ~0.11754944E~37) = 0.11754944E~37 +/ (0.0, ~0.11754944E~37) = ~0.0 +nextAfter (0.0, ~0.11754944E~37) = ~0.1E~44 +rem (0.0, ~0.11754944E~37) = 0.0 +* (0.0, ~0.5877472E~38) = ~0.0 ++ (0.0, ~0.5877472E~38) = ~0.5877472E~38 +- (0.0, ~0.5877472E~38) = 0.5877472E~38 +/ (0.0, ~0.5877472E~38) = ~0.0 +nextAfter (0.0, ~0.5877472E~38) = ~0.1E~44 +rem (0.0, ~0.5877472E~38) = 0.0 +* (0.0, ~0.1E~44) = ~0.0 ++ (0.0, ~0.1E~44) = ~0.1E~44 +- (0.0, ~0.1E~44) = 0.1E~44 +/ (0.0, ~0.1E~44) = ~0.0 +nextAfter (0.0, ~0.1E~44) = ~0.1E~44 +rem (0.0, ~0.1E~44) = 0.0 +* (0.0, ~0.0) = ~0.0 ++ (0.0, ~0.0) = 0.0 +- (0.0, ~0.0) = 0.0 +/ (0.0, ~0.0) = nan +nextAfter (0.0, ~0.0) = ~0.0 +rem (0.0, ~0.0) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.1E~44 +rem (0.0, inf) = 0.0 +* (0.0, ~inf) = nan ++ (0.0, ~inf) = ~inf +- (0.0, ~inf) = inf +/ (0.0, ~inf) = ~0.0 +nextAfter (0.0, ~inf) = ~0.1E~44 +rem (0.0, ~inf) = 0.0 +* (0.0, nan) = nan ++ (0.0, nan) = nan +- (0.0, nan) = nan +/ (0.0, nan) = nan +nextAfter (0.0, nan) = nan +rem (0.0, nan) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.1E~44 +rem (0.0, inf) = 0.0 +* (~0.34028235E39, 0.34028235E39) = ~inf ++ (~0.34028235E39, 0.34028235E39) = 0.0 +- (~0.34028235E39, 0.34028235E39) = ~inf +/ (~0.34028235E39, 0.34028235E39) = ~0.1E1 +nextAfter (~0.34028235E39, 0.34028235E39) = ~0.34028233E39 +rem (~0.34028235E39, 0.34028235E39) = 0.0 +* (~0.34028235E39, 0.17014117E39) = ~inf ++ (~0.34028235E39, 0.17014117E39) = ~0.17014117E39 +- (~0.34028235E39, 0.17014117E39) = ~inf +/ (~0.34028235E39, 0.17014117E39) = ~0.2E1 +nextAfter (~0.34028235E39, 0.17014117E39) = ~0.34028233E39 +rem (~0.34028235E39, 0.17014117E39) = 0.0 +* (~0.34028235E39, 0.123E4) = ~inf ++ (~0.34028235E39, 0.123E4) = ~0.34028235E39 +- (~0.34028235E39, 0.123E4) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E4) = ~0.2766523E36 +nextAfter (~0.34028235E39, 0.123E4) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E4) = ~0.2028241E32 +* (~0.34028235E39, 0.123E2) = ~inf ++ (~0.34028235E39, 0.123E2) = ~0.34028235E39 +- (~0.34028235E39, 0.123E2) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E2) = ~0.27665232E38 +nextAfter (~0.34028235E39, 0.123E2) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E2) = inf +* (~0.34028235E39, 0.31415927E1) = ~inf ++ (~0.34028235E39, 0.31415927E1) = ~0.34028235E39 +- (~0.34028235E39, 0.31415927E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.31415927E1) = ~0.10831523E39 +nextAfter (~0.34028235E39, 0.31415927E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.31415927E1) = ~0.2028241E32 +* (~0.34028235E39, 0.27182817E1) = ~inf ++ (~0.34028235E39, 0.27182817E1) = ~0.34028235E39 +- (~0.34028235E39, 0.27182817E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.27182817E1) = ~0.12518288E39 +nextAfter (~0.34028235E39, 0.27182817E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.27182817E1) = 0.0 +* (~0.34028235E39, 0.123E1) = ~inf ++ (~0.34028235E39, 0.123E1) = ~0.34028235E39 +- (~0.34028235E39, 0.123E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E1) = ~0.27665231E39 +nextAfter (~0.34028235E39, 0.123E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E1) = 0.0 +* (~0.34028235E39, 0.123) = ~0.4185473E38 ++ (~0.34028235E39, 0.123) = ~0.34028235E39 +- (~0.34028235E39, 0.123) = ~0.34028235E39 +/ (~0.34028235E39, 0.123) = ~inf +nextAfter (~0.34028235E39, 0.123) = ~0.34028233E39 +rem (~0.34028235E39, 0.123) = inf +* (~0.34028235E39, 0.123E~2) = ~0.4185473E36 ++ (~0.34028235E39, 0.123E~2) = ~0.34028235E39 +- (~0.34028235E39, 0.123E~2) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E~2) = ~inf +nextAfter (~0.34028235E39, 0.123E~2) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E~2) = inf +* (~0.34028235E39, 0.11754944E~37) = ~0.39999998E1 ++ (~0.34028235E39, 0.11754944E~37) = ~0.34028235E39 +- (~0.34028235E39, 0.11754944E~37) = ~0.34028235E39 +/ (~0.34028235E39, 0.11754944E~37) = ~inf +nextAfter (~0.34028235E39, 0.11754944E~37) = ~0.34028233E39 +rem (~0.34028235E39, 0.11754944E~37) = inf +* (~0.34028235E39, 0.5877472E~38) = ~0.19999999E1 ++ (~0.34028235E39, 0.5877472E~38) = ~0.34028235E39 +- (~0.34028235E39, 0.5877472E~38) = ~0.34028235E39 +/ (~0.34028235E39, 0.5877472E~38) = ~inf +nextAfter (~0.34028235E39, 0.5877472E~38) = ~0.34028233E39 +rem (~0.34028235E39, 0.5877472E~38) = inf +* (~0.34028235E39, 0.1E~44) = ~0.47683713E~6 ++ (~0.34028235E39, 0.1E~44) = ~0.34028235E39 +- (~0.34028235E39, 0.1E~44) = ~0.34028235E39 +/ (~0.34028235E39, 0.1E~44) = ~inf +nextAfter (~0.34028235E39, 0.1E~44) = ~0.34028233E39 +rem (~0.34028235E39, 0.1E~44) = inf +* (~0.34028235E39, 0.0) = ~0.0 ++ (~0.34028235E39, 0.0) = ~0.34028235E39 +- (~0.34028235E39, 0.0) = ~0.34028235E39 +/ (~0.34028235E39, 0.0) = ~inf +nextAfter (~0.34028235E39, 0.0) = ~0.34028233E39 +rem (~0.34028235E39, 0.0) = nan +* (~0.34028235E39, ~0.34028235E39) = inf ++ (~0.34028235E39, ~0.34028235E39) = ~inf +- (~0.34028235E39, ~0.34028235E39) = 0.0 +/ (~0.34028235E39, ~0.34028235E39) = 0.1E1 +nextAfter (~0.34028235E39, ~0.34028235E39) = ~0.34028235E39 +rem (~0.34028235E39, ~0.34028235E39) = 0.0 +* (~0.34028235E39, ~0.17014117E39) = inf ++ (~0.34028235E39, ~0.17014117E39) = ~inf +- (~0.34028235E39, ~0.17014117E39) = ~0.17014117E39 +/ (~0.34028235E39, ~0.17014117E39) = 0.2E1 +nextAfter (~0.34028235E39, ~0.17014117E39) = ~0.34028233E39 +rem (~0.34028235E39, ~0.17014117E39) = 0.0 +* (~0.34028235E39, ~0.123E4) = inf ++ (~0.34028235E39, ~0.123E4) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E4) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E4) = 0.2766523E36 +nextAfter (~0.34028235E39, ~0.123E4) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E4) = ~0.2028241E32 +* (~0.34028235E39, ~0.123E2) = inf ++ (~0.34028235E39, ~0.123E2) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E2) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E2) = 0.27665232E38 +nextAfter (~0.34028235E39, ~0.123E2) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E2) = inf +* (~0.34028235E39, ~0.31415927E1) = inf ++ (~0.34028235E39, ~0.31415927E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.31415927E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.31415927E1) = 0.10831523E39 +nextAfter (~0.34028235E39, ~0.31415927E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.31415927E1) = ~0.2028241E32 +* (~0.34028235E39, ~0.27182817E1) = inf ++ (~0.34028235E39, ~0.27182817E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.27182817E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.27182817E1) = 0.12518288E39 +nextAfter (~0.34028235E39, ~0.27182817E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.27182817E1) = 0.0 +* (~0.34028235E39, ~0.123E1) = inf ++ (~0.34028235E39, ~0.123E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E1) = 0.27665231E39 +nextAfter (~0.34028235E39, ~0.123E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E1) = 0.0 +* (~0.34028235E39, ~0.123) = 0.4185473E38 ++ (~0.34028235E39, ~0.123) = ~0.34028235E39 +- (~0.34028235E39, ~0.123) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123) = inf +nextAfter (~0.34028235E39, ~0.123) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123) = inf +* (~0.34028235E39, ~0.123E~2) = 0.4185473E36 ++ (~0.34028235E39, ~0.123E~2) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E~2) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E~2) = inf +nextAfter (~0.34028235E39, ~0.123E~2) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E~2) = inf +* (~0.34028235E39, ~0.11754944E~37) = 0.39999998E1 ++ (~0.34028235E39, ~0.11754944E~37) = ~0.34028235E39 +- (~0.34028235E39, ~0.11754944E~37) = ~0.34028235E39 +/ (~0.34028235E39, ~0.11754944E~37) = inf +nextAfter (~0.34028235E39, ~0.11754944E~37) = ~0.34028233E39 +rem (~0.34028235E39, ~0.11754944E~37) = inf +* (~0.34028235E39, ~0.5877472E~38) = 0.19999999E1 ++ (~0.34028235E39, ~0.5877472E~38) = ~0.34028235E39 +- (~0.34028235E39, ~0.5877472E~38) = ~0.34028235E39 +/ (~0.34028235E39, ~0.5877472E~38) = inf +nextAfter (~0.34028235E39, ~0.5877472E~38) = ~0.34028233E39 +rem (~0.34028235E39, ~0.5877472E~38) = inf +* (~0.34028235E39, ~0.1E~44) = 0.47683713E~6 ++ (~0.34028235E39, ~0.1E~44) = ~0.34028235E39 +- (~0.34028235E39, ~0.1E~44) = ~0.34028235E39 +/ (~0.34028235E39, ~0.1E~44) = inf +nextAfter (~0.34028235E39, ~0.1E~44) = ~0.34028233E39 +rem (~0.34028235E39, ~0.1E~44) = inf +* (~0.34028235E39, ~0.0) = 0.0 ++ (~0.34028235E39, ~0.0) = ~0.34028235E39 +- (~0.34028235E39, ~0.0) = ~0.34028235E39 +/ (~0.34028235E39, ~0.0) = inf +nextAfter (~0.34028235E39, ~0.0) = ~0.34028233E39 +rem (~0.34028235E39, ~0.0) = nan +* (~0.34028235E39, inf) = ~inf ++ (~0.34028235E39, inf) = inf +- (~0.34028235E39, inf) = ~inf +/ (~0.34028235E39, inf) = ~0.0 +nextAfter (~0.34028235E39, inf) = ~0.34028233E39 +rem (~0.34028235E39, inf) = ~0.34028235E39 +* (~0.34028235E39, ~inf) = inf ++ (~0.34028235E39, ~inf) = ~inf +- (~0.34028235E39, ~inf) = inf +/ (~0.34028235E39, ~inf) = 0.0 +nextAfter (~0.34028235E39, ~inf) = ~inf +rem (~0.34028235E39, ~inf) = ~0.34028235E39 +* (~0.34028235E39, nan) = nan ++ (~0.34028235E39, nan) = nan +- (~0.34028235E39, nan) = nan +/ (~0.34028235E39, nan) = nan +nextAfter (~0.34028235E39, nan) = nan +rem (~0.34028235E39, nan) = nan +* (~0.34028235E39, inf) = ~inf ++ (~0.34028235E39, inf) = inf +- (~0.34028235E39, inf) = ~inf +/ (~0.34028235E39, inf) = ~0.0 +nextAfter (~0.34028235E39, inf) = ~0.34028233E39 +rem (~0.34028235E39, inf) = ~0.34028235E39 +* (~0.17014117E39, 0.34028235E39) = ~inf ++ (~0.17014117E39, 0.34028235E39) = 0.17014117E39 +- (~0.17014117E39, 0.34028235E39) = ~inf +/ (~0.17014117E39, 0.34028235E39) = ~0.5 +nextAfter (~0.17014117E39, 0.34028235E39) = ~0.17014116E39 +rem (~0.17014117E39, 0.34028235E39) = ~0.17014117E39 +* (~0.17014117E39, 0.17014117E39) = ~inf ++ (~0.17014117E39, 0.17014117E39) = 0.0 +- (~0.17014117E39, 0.17014117E39) = ~0.34028235E39 +/ (~0.17014117E39, 0.17014117E39) = ~0.1E1 +nextAfter (~0.17014117E39, 0.17014117E39) = ~0.17014116E39 +rem (~0.17014117E39, 0.17014117E39) = 0.0 +* (~0.17014117E39, 0.123E4) = ~inf ++ (~0.17014117E39, 0.123E4) = ~0.17014117E39 +- (~0.17014117E39, 0.123E4) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E4) = ~0.13832615E36 +nextAfter (~0.17014117E39, 0.123E4) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E4) = ~0.10141205E32 +* (~0.17014117E39, 0.123E2) = ~inf ++ (~0.17014117E39, 0.123E2) = ~0.17014117E39 +- (~0.17014117E39, 0.123E2) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E2) = ~0.13832616E38 +nextAfter (~0.17014117E39, 0.123E2) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E2) = 0.10141205E32 +* (~0.17014117E39, 0.31415927E1) = ~inf ++ (~0.17014117E39, 0.31415927E1) = ~0.17014117E39 +- (~0.17014117E39, 0.31415927E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.31415927E1) = ~0.54157613E38 +nextAfter (~0.17014117E39, 0.31415927E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.31415927E1) = ~0.10141205E32 +* (~0.17014117E39, 0.27182817E1) = ~inf ++ (~0.17014117E39, 0.27182817E1) = ~0.17014117E39 +- (~0.17014117E39, 0.27182817E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.27182817E1) = ~0.6259144E38 +nextAfter (~0.17014117E39, 0.27182817E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.27182817E1) = 0.0 +* (~0.17014117E39, 0.123E1) = ~0.20927364E39 ++ (~0.17014117E39, 0.123E1) = ~0.17014117E39 +- (~0.17014117E39, 0.123E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E1) = ~0.13832616E39 +nextAfter (~0.17014117E39, 0.123E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E1) = 0.0 +* (~0.17014117E39, 0.123) = ~0.20927365E38 ++ (~0.17014117E39, 0.123) = ~0.17014117E39 +- (~0.17014117E39, 0.123) = ~0.17014117E39 +/ (~0.17014117E39, 0.123) = ~inf +nextAfter (~0.17014117E39, 0.123) = ~0.17014116E39 +rem (~0.17014117E39, 0.123) = inf +* (~0.17014117E39, 0.123E~2) = ~0.20927364E36 ++ (~0.17014117E39, 0.123E~2) = ~0.17014117E39 +- (~0.17014117E39, 0.123E~2) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E~2) = ~inf +nextAfter (~0.17014117E39, 0.123E~2) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E~2) = inf +* (~0.17014117E39, 0.11754944E~37) = ~0.19999999E1 ++ (~0.17014117E39, 0.11754944E~37) = ~0.17014117E39 +- (~0.17014117E39, 0.11754944E~37) = ~0.17014117E39 +/ (~0.17014117E39, 0.11754944E~37) = ~inf +nextAfter (~0.17014117E39, 0.11754944E~37) = ~0.17014116E39 +rem (~0.17014117E39, 0.11754944E~37) = inf +* (~0.17014117E39, 0.5877472E~38) = ~0.99999994 ++ (~0.17014117E39, 0.5877472E~38) = ~0.17014117E39 +- (~0.17014117E39, 0.5877472E~38) = ~0.17014117E39 +/ (~0.17014117E39, 0.5877472E~38) = ~inf +nextAfter (~0.17014117E39, 0.5877472E~38) = ~0.17014116E39 +rem (~0.17014117E39, 0.5877472E~38) = inf +* (~0.17014117E39, 0.1E~44) = ~0.23841856E~6 ++ (~0.17014117E39, 0.1E~44) = ~0.17014117E39 +- (~0.17014117E39, 0.1E~44) = ~0.17014117E39 +/ (~0.17014117E39, 0.1E~44) = ~inf +nextAfter (~0.17014117E39, 0.1E~44) = ~0.17014116E39 +rem (~0.17014117E39, 0.1E~44) = inf +* (~0.17014117E39, 0.0) = ~0.0 ++ (~0.17014117E39, 0.0) = ~0.17014117E39 +- (~0.17014117E39, 0.0) = ~0.17014117E39 +/ (~0.17014117E39, 0.0) = ~inf +nextAfter (~0.17014117E39, 0.0) = ~0.17014116E39 +rem (~0.17014117E39, 0.0) = nan +* (~0.17014117E39, ~0.34028235E39) = inf ++ (~0.17014117E39, ~0.34028235E39) = ~inf +- (~0.17014117E39, ~0.34028235E39) = 0.17014117E39 +/ (~0.17014117E39, ~0.34028235E39) = 0.5 +nextAfter (~0.17014117E39, ~0.34028235E39) = ~0.17014118E39 +rem (~0.17014117E39, ~0.34028235E39) = ~0.17014117E39 +* (~0.17014117E39, ~0.17014117E39) = inf ++ (~0.17014117E39, ~0.17014117E39) = ~0.34028235E39 +- (~0.17014117E39, ~0.17014117E39) = 0.0 +/ (~0.17014117E39, ~0.17014117E39) = 0.1E1 +nextAfter (~0.17014117E39, ~0.17014117E39) = ~0.17014117E39 +rem (~0.17014117E39, ~0.17014117E39) = 0.0 +* (~0.17014117E39, ~0.123E4) = inf ++ (~0.17014117E39, ~0.123E4) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E4) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E4) = 0.13832615E36 +nextAfter (~0.17014117E39, ~0.123E4) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E4) = ~0.10141205E32 +* (~0.17014117E39, ~0.123E2) = inf ++ (~0.17014117E39, ~0.123E2) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E2) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E2) = 0.13832616E38 +nextAfter (~0.17014117E39, ~0.123E2) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E2) = 0.10141205E32 +* (~0.17014117E39, ~0.31415927E1) = inf ++ (~0.17014117E39, ~0.31415927E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.31415927E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.31415927E1) = 0.54157613E38 +nextAfter (~0.17014117E39, ~0.31415927E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.31415927E1) = ~0.10141205E32 +* (~0.17014117E39, ~0.27182817E1) = inf ++ (~0.17014117E39, ~0.27182817E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.27182817E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.27182817E1) = 0.6259144E38 +nextAfter (~0.17014117E39, ~0.27182817E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.27182817E1) = 0.0 +* (~0.17014117E39, ~0.123E1) = 0.20927364E39 ++ (~0.17014117E39, ~0.123E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E1) = 0.13832616E39 +nextAfter (~0.17014117E39, ~0.123E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E1) = 0.0 +* (~0.17014117E39, ~0.123) = 0.20927365E38 ++ (~0.17014117E39, ~0.123) = ~0.17014117E39 +- (~0.17014117E39, ~0.123) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123) = inf +nextAfter (~0.17014117E39, ~0.123) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123) = inf +* (~0.17014117E39, ~0.123E~2) = 0.20927364E36 ++ (~0.17014117E39, ~0.123E~2) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E~2) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E~2) = inf +nextAfter (~0.17014117E39, ~0.123E~2) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E~2) = inf +* (~0.17014117E39, ~0.11754944E~37) = 0.19999999E1 ++ (~0.17014117E39, ~0.11754944E~37) = ~0.17014117E39 +- (~0.17014117E39, ~0.11754944E~37) = ~0.17014117E39 +/ (~0.17014117E39, ~0.11754944E~37) = inf +nextAfter (~0.17014117E39, ~0.11754944E~37) = ~0.17014116E39 +rem (~0.17014117E39, ~0.11754944E~37) = inf +* (~0.17014117E39, ~0.5877472E~38) = 0.99999994 ++ (~0.17014117E39, ~0.5877472E~38) = ~0.17014117E39 +- (~0.17014117E39, ~0.5877472E~38) = ~0.17014117E39 +/ (~0.17014117E39, ~0.5877472E~38) = inf +nextAfter (~0.17014117E39, ~0.5877472E~38) = ~0.17014116E39 +rem (~0.17014117E39, ~0.5877472E~38) = inf +* (~0.17014117E39, ~0.1E~44) = 0.23841856E~6 ++ (~0.17014117E39, ~0.1E~44) = ~0.17014117E39 +- (~0.17014117E39, ~0.1E~44) = ~0.17014117E39 +/ (~0.17014117E39, ~0.1E~44) = inf +nextAfter (~0.17014117E39, ~0.1E~44) = ~0.17014116E39 +rem (~0.17014117E39, ~0.1E~44) = inf +* (~0.17014117E39, ~0.0) = 0.0 ++ (~0.17014117E39, ~0.0) = ~0.17014117E39 +- (~0.17014117E39, ~0.0) = ~0.17014117E39 +/ (~0.17014117E39, ~0.0) = inf +nextAfter (~0.17014117E39, ~0.0) = ~0.17014116E39 +rem (~0.17014117E39, ~0.0) = nan +* (~0.17014117E39, inf) = ~inf ++ (~0.17014117E39, inf) = inf +- (~0.17014117E39, inf) = ~inf +/ (~0.17014117E39, inf) = ~0.0 +nextAfter (~0.17014117E39, inf) = ~0.17014116E39 +rem (~0.17014117E39, inf) = ~0.17014117E39 +* (~0.17014117E39, ~inf) = inf ++ (~0.17014117E39, ~inf) = ~inf +- (~0.17014117E39, ~inf) = inf +/ (~0.17014117E39, ~inf) = 0.0 +nextAfter (~0.17014117E39, ~inf) = ~0.17014118E39 +rem (~0.17014117E39, ~inf) = ~0.17014117E39 +* (~0.17014117E39, nan) = nan ++ (~0.17014117E39, nan) = nan +- (~0.17014117E39, nan) = nan +/ (~0.17014117E39, nan) = nan +nextAfter (~0.17014117E39, nan) = nan +rem (~0.17014117E39, nan) = nan +* (~0.17014117E39, inf) = ~inf ++ (~0.17014117E39, inf) = inf +- (~0.17014117E39, inf) = ~inf +/ (~0.17014117E39, inf) = ~0.0 +nextAfter (~0.17014117E39, inf) = ~0.17014116E39 +rem (~0.17014117E39, inf) = ~0.17014117E39 +* (~0.123E4, 0.34028235E39) = ~inf ++ (~0.123E4, 0.34028235E39) = 0.34028235E39 +- (~0.123E4, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E4, 0.34028235E39) = ~0.36146455E~35 +nextAfter (~0.123E4, 0.34028235E39) = ~0.12299999E4 +rem (~0.123E4, 0.34028235E39) = ~0.123E4 +* (~0.123E4, 0.17014117E39) = ~inf ++ (~0.123E4, 0.17014117E39) = 0.17014117E39 +- (~0.123E4, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E4, 0.17014117E39) = ~0.7229291E~35 +nextAfter (~0.123E4, 0.17014117E39) = ~0.12299999E4 +rem (~0.123E4, 0.17014117E39) = ~0.123E4 +* (~0.123E4, 0.123E4) = ~0.15129E7 ++ (~0.123E4, 0.123E4) = 0.0 +- (~0.123E4, 0.123E4) = ~0.246E4 +/ (~0.123E4, 0.123E4) = ~0.1E1 +nextAfter (~0.123E4, 0.123E4) = ~0.12299999E4 +rem (~0.123E4, 0.123E4) = 0.0 +* (~0.123E4, 0.123E2) = ~0.15129E5 ++ (~0.123E4, 0.123E2) = ~0.12177E4 +- (~0.123E4, 0.123E2) = ~0.12423E4 +/ (~0.123E4, 0.123E2) = ~0.1E3 +nextAfter (~0.123E4, 0.123E2) = ~0.12299999E4 +rem (~0.123E4, 0.123E2) = 0.0 +* (~0.123E4, 0.31415927E1) = ~0.38641592E4 ++ (~0.123E4, 0.31415927E1) = ~0.12268584E4 +- (~0.123E4, 0.31415927E1) = ~0.12331416E4 +/ (~0.123E4, 0.31415927E1) = ~0.39152115E3 +nextAfter (~0.123E4, 0.31415927E1) = ~0.12299999E4 +rem (~0.123E4, 0.31415927E1) = ~0.1637207E1 +* (~0.123E4, 0.27182817E1) = ~0.33434866E4 ++ (~0.123E4, 0.27182817E1) = ~0.12272817E4 +- (~0.123E4, 0.27182817E1) = ~0.12327183E4 +/ (~0.123E4, 0.27182817E1) = ~0.45249173E3 +nextAfter (~0.123E4, 0.27182817E1) = ~0.12299999E4 +rem (~0.123E4, 0.27182817E1) = ~0.13366699E1 +* (~0.123E4, 0.123E1) = ~0.15129E4 ++ (~0.123E4, 0.123E1) = ~0.122877E4 +- (~0.123E4, 0.123E1) = ~0.123123E4 +/ (~0.123E4, 0.123E1) = ~0.1E4 +nextAfter (~0.123E4, 0.123E1) = ~0.12299999E4 +rem (~0.123E4, 0.123E1) = 0.0 +* (~0.123E4, 0.123) = ~0.15129001E3 ++ (~0.123E4, 0.123) = ~0.1229877E4 +- (~0.123E4, 0.123) = ~0.1230123E4 +/ (~0.123E4, 0.123) = ~0.1E5 +nextAfter (~0.123E4, 0.123) = ~0.12299999E4 +rem (~0.123E4, 0.123) = 0.0 +* (~0.123E4, 0.123E~2) = ~0.15129001E1 ++ (~0.123E4, 0.123E~2) = ~0.12299988E4 +- (~0.123E4, 0.123E~2) = ~0.12300012E4 +/ (~0.123E4, 0.123E~2) = ~0.99999994E6 +nextAfter (~0.123E4, 0.123E~2) = ~0.12299999E4 +rem (~0.123E4, 0.123E~2) = ~0.12207031E~2 +* (~0.123E4, 0.11754944E~37) = ~0.1445858E~34 ++ (~0.123E4, 0.11754944E~37) = ~0.123E4 +- (~0.123E4, 0.11754944E~37) = ~0.123E4 +/ (~0.123E4, 0.11754944E~37) = ~inf +nextAfter (~0.123E4, 0.11754944E~37) = ~0.12299999E4 +rem (~0.123E4, 0.11754944E~37) = inf +* (~0.123E4, 0.5877472E~38) = ~0.722929E~35 ++ (~0.123E4, 0.5877472E~38) = ~0.123E4 +- (~0.123E4, 0.5877472E~38) = ~0.123E4 +/ (~0.123E4, 0.5877472E~38) = ~inf +nextAfter (~0.123E4, 0.5877472E~38) = ~0.12299999E4 +rem (~0.123E4, 0.5877472E~38) = inf +* (~0.123E4, 0.1E~44) = ~0.1724E~41 ++ (~0.123E4, 0.1E~44) = ~0.123E4 +- (~0.123E4, 0.1E~44) = ~0.123E4 +/ (~0.123E4, 0.1E~44) = ~inf +nextAfter (~0.123E4, 0.1E~44) = ~0.12299999E4 +rem (~0.123E4, 0.1E~44) = inf +* (~0.123E4, 0.0) = ~0.0 ++ (~0.123E4, 0.0) = ~0.123E4 +- (~0.123E4, 0.0) = ~0.123E4 +/ (~0.123E4, 0.0) = ~inf +nextAfter (~0.123E4, 0.0) = ~0.12299999E4 +rem (~0.123E4, 0.0) = nan +* (~0.123E4, ~0.34028235E39) = inf ++ (~0.123E4, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E4, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E4, ~0.34028235E39) = 0.36146455E~35 +nextAfter (~0.123E4, ~0.34028235E39) = ~0.12300001E4 +rem (~0.123E4, ~0.34028235E39) = ~0.123E4 +* (~0.123E4, ~0.17014117E39) = inf ++ (~0.123E4, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E4, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E4, ~0.17014117E39) = 0.7229291E~35 +nextAfter (~0.123E4, ~0.17014117E39) = ~0.12300001E4 +rem (~0.123E4, ~0.17014117E39) = ~0.123E4 +* (~0.123E4, ~0.123E4) = 0.15129E7 ++ (~0.123E4, ~0.123E4) = ~0.246E4 +- (~0.123E4, ~0.123E4) = 0.0 +/ (~0.123E4, ~0.123E4) = 0.1E1 +nextAfter (~0.123E4, ~0.123E4) = ~0.123E4 +rem (~0.123E4, ~0.123E4) = 0.0 +* (~0.123E4, ~0.123E2) = 0.15129E5 ++ (~0.123E4, ~0.123E2) = ~0.12423E4 +- (~0.123E4, ~0.123E2) = ~0.12177E4 +/ (~0.123E4, ~0.123E2) = 0.1E3 +nextAfter (~0.123E4, ~0.123E2) = ~0.12299999E4 +rem (~0.123E4, ~0.123E2) = 0.0 +* (~0.123E4, ~0.31415927E1) = 0.38641592E4 ++ (~0.123E4, ~0.31415927E1) = ~0.12331416E4 +- (~0.123E4, ~0.31415927E1) = ~0.12268584E4 +/ (~0.123E4, ~0.31415927E1) = 0.39152115E3 +nextAfter (~0.123E4, ~0.31415927E1) = ~0.12299999E4 +rem (~0.123E4, ~0.31415927E1) = ~0.1637207E1 +* (~0.123E4, ~0.27182817E1) = 0.33434866E4 ++ (~0.123E4, ~0.27182817E1) = ~0.12327183E4 +- (~0.123E4, ~0.27182817E1) = ~0.12272817E4 +/ (~0.123E4, ~0.27182817E1) = 0.45249173E3 +nextAfter (~0.123E4, ~0.27182817E1) = ~0.12299999E4 +rem (~0.123E4, ~0.27182817E1) = ~0.13366699E1 +* (~0.123E4, ~0.123E1) = 0.15129E4 ++ (~0.123E4, ~0.123E1) = ~0.123123E4 +- (~0.123E4, ~0.123E1) = ~0.122877E4 +/ (~0.123E4, ~0.123E1) = 0.1E4 +nextAfter (~0.123E4, ~0.123E1) = ~0.12299999E4 +rem (~0.123E4, ~0.123E1) = 0.0 +* (~0.123E4, ~0.123) = 0.15129001E3 ++ (~0.123E4, ~0.123) = ~0.1230123E4 +- (~0.123E4, ~0.123) = ~0.1229877E4 +/ (~0.123E4, ~0.123) = 0.1E5 +nextAfter (~0.123E4, ~0.123) = ~0.12299999E4 +rem (~0.123E4, ~0.123) = 0.0 +* (~0.123E4, ~0.123E~2) = 0.15129001E1 ++ (~0.123E4, ~0.123E~2) = ~0.12300012E4 +- (~0.123E4, ~0.123E~2) = ~0.12299988E4 +/ (~0.123E4, ~0.123E~2) = 0.99999994E6 +nextAfter (~0.123E4, ~0.123E~2) = ~0.12299999E4 +rem (~0.123E4, ~0.123E~2) = ~0.12207031E~2 +* (~0.123E4, ~0.11754944E~37) = 0.1445858E~34 ++ (~0.123E4, ~0.11754944E~37) = ~0.123E4 +- (~0.123E4, ~0.11754944E~37) = ~0.123E4 +/ (~0.123E4, ~0.11754944E~37) = inf +nextAfter (~0.123E4, ~0.11754944E~37) = ~0.12299999E4 +rem (~0.123E4, ~0.11754944E~37) = inf +* (~0.123E4, ~0.5877472E~38) = 0.722929E~35 ++ (~0.123E4, ~0.5877472E~38) = ~0.123E4 +- (~0.123E4, ~0.5877472E~38) = ~0.123E4 +/ (~0.123E4, ~0.5877472E~38) = inf +nextAfter (~0.123E4, ~0.5877472E~38) = ~0.12299999E4 +rem (~0.123E4, ~0.5877472E~38) = inf +* (~0.123E4, ~0.1E~44) = 0.1724E~41 ++ (~0.123E4, ~0.1E~44) = ~0.123E4 +- (~0.123E4, ~0.1E~44) = ~0.123E4 +/ (~0.123E4, ~0.1E~44) = inf +nextAfter (~0.123E4, ~0.1E~44) = ~0.12299999E4 +rem (~0.123E4, ~0.1E~44) = inf +* (~0.123E4, ~0.0) = 0.0 ++ (~0.123E4, ~0.0) = ~0.123E4 +- (~0.123E4, ~0.0) = ~0.123E4 +/ (~0.123E4, ~0.0) = inf +nextAfter (~0.123E4, ~0.0) = ~0.12299999E4 +rem (~0.123E4, ~0.0) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E4, ~inf) = inf ++ (~0.123E4, ~inf) = ~inf +- (~0.123E4, ~inf) = inf +/ (~0.123E4, ~inf) = 0.0 +nextAfter (~0.123E4, ~inf) = ~0.12300001E4 +rem (~0.123E4, ~inf) = ~0.123E4 +* (~0.123E4, nan) = nan ++ (~0.123E4, nan) = nan +- (~0.123E4, nan) = nan +/ (~0.123E4, nan) = nan +nextAfter (~0.123E4, nan) = nan +rem (~0.123E4, nan) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E2, 0.34028235E39) = ~inf ++ (~0.123E2, 0.34028235E39) = 0.34028235E39 +- (~0.123E2, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E2, 0.34028235E39) = ~0.36146455E~37 +nextAfter (~0.123E2, 0.34028235E39) = ~0.12299999E2 +rem (~0.123E2, 0.34028235E39) = ~0.123E2 +* (~0.123E2, 0.17014117E39) = ~inf ++ (~0.123E2, 0.17014117E39) = 0.17014117E39 +- (~0.123E2, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E2, 0.17014117E39) = ~0.7229291E~37 +nextAfter (~0.123E2, 0.17014117E39) = ~0.12299999E2 +rem (~0.123E2, 0.17014117E39) = ~0.123E2 +* (~0.123E2, 0.123E4) = ~0.15129E5 ++ (~0.123E2, 0.123E4) = 0.12177E4 +- (~0.123E2, 0.123E4) = ~0.12423E4 +/ (~0.123E2, 0.123E4) = ~0.1E~1 +nextAfter (~0.123E2, 0.123E4) = ~0.12299999E2 +rem (~0.123E2, 0.123E4) = ~0.123E2 +* (~0.123E2, 0.123E2) = ~0.15129001E3 ++ (~0.123E2, 0.123E2) = 0.0 +- (~0.123E2, 0.123E2) = ~0.246E2 +/ (~0.123E2, 0.123E2) = ~0.1E1 +nextAfter (~0.123E2, 0.123E2) = ~0.12299999E2 +rem (~0.123E2, 0.123E2) = 0.0 +* (~0.123E2, 0.31415927E1) = ~0.3864159E2 ++ (~0.123E2, 0.31415927E1) = ~0.9158407E1 +- (~0.123E2, 0.31415927E1) = ~0.15441593E2 +/ (~0.123E2, 0.31415927E1) = ~0.39152114E1 +nextAfter (~0.123E2, 0.31415927E1) = ~0.12299999E2 +rem (~0.123E2, 0.31415927E1) = ~0.28752222E1 +* (~0.123E2, 0.27182817E1) = ~0.33434868E2 ++ (~0.123E2, 0.27182817E1) = ~0.9581718E1 +- (~0.123E2, 0.27182817E1) = ~0.15018282E2 +/ (~0.123E2, 0.27182817E1) = ~0.4524917E1 +nextAfter (~0.123E2, 0.27182817E1) = ~0.12299999E2 +rem (~0.123E2, 0.27182817E1) = ~0.14268732E1 +* (~0.123E2, 0.123E1) = ~0.15129001E2 ++ (~0.123E2, 0.123E1) = ~0.1107E2 +- (~0.123E2, 0.123E1) = ~0.13530001E2 +/ (~0.123E2, 0.123E1) = ~0.1E2 +nextAfter (~0.123E2, 0.123E1) = ~0.12299999E2 +rem (~0.123E2, 0.123E1) = 0.0 +* (~0.123E2, 0.123) = ~0.15129001E1 ++ (~0.123E2, 0.123) = ~0.12177E2 +- (~0.123E2, 0.123) = ~0.12423E2 +/ (~0.123E2, 0.123) = ~0.1E3 +nextAfter (~0.123E2, 0.123) = ~0.12299999E2 +rem (~0.123E2, 0.123) = 0.0 +* (~0.123E2, 0.123E~2) = ~0.15129001E~1 ++ (~0.123E2, 0.123E~2) = ~0.1229877E2 +- (~0.123E2, 0.123E~2) = ~0.1230123E2 +/ (~0.123E2, 0.123E~2) = ~0.1E5 +nextAfter (~0.123E2, 0.123E~2) = ~0.12299999E2 +rem (~0.123E2, 0.123E~2) = 0.0 +* (~0.123E2, 0.11754944E~37) = ~0.14458581E~36 ++ (~0.123E2, 0.11754944E~37) = ~0.123E2 +- (~0.123E2, 0.11754944E~37) = ~0.123E2 +/ (~0.123E2, 0.11754944E~37) = ~inf +nextAfter (~0.123E2, 0.11754944E~37) = ~0.12299999E2 +rem (~0.123E2, 0.11754944E~37) = inf +* (~0.123E2, 0.5877472E~38) = ~0.72292904E~37 ++ (~0.123E2, 0.5877472E~38) = ~0.123E2 +- (~0.123E2, 0.5877472E~38) = ~0.123E2 +/ (~0.123E2, 0.5877472E~38) = ~inf +nextAfter (~0.123E2, 0.5877472E~38) = ~0.12299999E2 +rem (~0.123E2, 0.5877472E~38) = inf +* (~0.123E2, 0.1E~44) = ~0.17E~43 ++ (~0.123E2, 0.1E~44) = ~0.123E2 +- (~0.123E2, 0.1E~44) = ~0.123E2 +/ (~0.123E2, 0.1E~44) = ~inf +nextAfter (~0.123E2, 0.1E~44) = ~0.12299999E2 +rem (~0.123E2, 0.1E~44) = inf +* (~0.123E2, 0.0) = ~0.0 ++ (~0.123E2, 0.0) = ~0.123E2 +- (~0.123E2, 0.0) = ~0.123E2 +/ (~0.123E2, 0.0) = ~inf +nextAfter (~0.123E2, 0.0) = ~0.12299999E2 +rem (~0.123E2, 0.0) = nan +* (~0.123E2, ~0.34028235E39) = inf ++ (~0.123E2, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E2, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E2, ~0.34028235E39) = 0.36146455E~37 +nextAfter (~0.123E2, ~0.34028235E39) = ~0.12300001E2 +rem (~0.123E2, ~0.34028235E39) = ~0.123E2 +* (~0.123E2, ~0.17014117E39) = inf ++ (~0.123E2, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E2, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E2, ~0.17014117E39) = 0.7229291E~37 +nextAfter (~0.123E2, ~0.17014117E39) = ~0.12300001E2 +rem (~0.123E2, ~0.17014117E39) = ~0.123E2 +* (~0.123E2, ~0.123E4) = 0.15129E5 ++ (~0.123E2, ~0.123E4) = ~0.12423E4 +- (~0.123E2, ~0.123E4) = 0.12177E4 +/ (~0.123E2, ~0.123E4) = 0.1E~1 +nextAfter (~0.123E2, ~0.123E4) = ~0.12300001E2 +rem (~0.123E2, ~0.123E4) = ~0.123E2 +* (~0.123E2, ~0.123E2) = 0.15129001E3 ++ (~0.123E2, ~0.123E2) = ~0.246E2 +- (~0.123E2, ~0.123E2) = 0.0 +/ (~0.123E2, ~0.123E2) = 0.1E1 +nextAfter (~0.123E2, ~0.123E2) = ~0.123E2 +rem (~0.123E2, ~0.123E2) = 0.0 +* (~0.123E2, ~0.31415927E1) = 0.3864159E2 ++ (~0.123E2, ~0.31415927E1) = ~0.15441593E2 +- (~0.123E2, ~0.31415927E1) = ~0.9158407E1 +/ (~0.123E2, ~0.31415927E1) = 0.39152114E1 +nextAfter (~0.123E2, ~0.31415927E1) = ~0.12299999E2 +rem (~0.123E2, ~0.31415927E1) = ~0.28752222E1 +* (~0.123E2, ~0.27182817E1) = 0.33434868E2 ++ (~0.123E2, ~0.27182817E1) = ~0.15018282E2 +- (~0.123E2, ~0.27182817E1) = ~0.9581718E1 +/ (~0.123E2, ~0.27182817E1) = 0.4524917E1 +nextAfter (~0.123E2, ~0.27182817E1) = ~0.12299999E2 +rem (~0.123E2, ~0.27182817E1) = ~0.14268732E1 +* (~0.123E2, ~0.123E1) = 0.15129001E2 ++ (~0.123E2, ~0.123E1) = ~0.13530001E2 +- (~0.123E2, ~0.123E1) = ~0.1107E2 +/ (~0.123E2, ~0.123E1) = 0.1E2 +nextAfter (~0.123E2, ~0.123E1) = ~0.12299999E2 +rem (~0.123E2, ~0.123E1) = 0.0 +* (~0.123E2, ~0.123) = 0.15129001E1 ++ (~0.123E2, ~0.123) = ~0.12423E2 +- (~0.123E2, ~0.123) = ~0.12177E2 +/ (~0.123E2, ~0.123) = 0.1E3 +nextAfter (~0.123E2, ~0.123) = ~0.12299999E2 +rem (~0.123E2, ~0.123) = 0.0 +* (~0.123E2, ~0.123E~2) = 0.15129001E~1 ++ (~0.123E2, ~0.123E~2) = ~0.1230123E2 +- (~0.123E2, ~0.123E~2) = ~0.1229877E2 +/ (~0.123E2, ~0.123E~2) = 0.1E5 +nextAfter (~0.123E2, ~0.123E~2) = ~0.12299999E2 +rem (~0.123E2, ~0.123E~2) = 0.0 +* (~0.123E2, ~0.11754944E~37) = 0.14458581E~36 ++ (~0.123E2, ~0.11754944E~37) = ~0.123E2 +- (~0.123E2, ~0.11754944E~37) = ~0.123E2 +/ (~0.123E2, ~0.11754944E~37) = inf +nextAfter (~0.123E2, ~0.11754944E~37) = ~0.12299999E2 +rem (~0.123E2, ~0.11754944E~37) = inf +* (~0.123E2, ~0.5877472E~38) = 0.72292904E~37 ++ (~0.123E2, ~0.5877472E~38) = ~0.123E2 +- (~0.123E2, ~0.5877472E~38) = ~0.123E2 +/ (~0.123E2, ~0.5877472E~38) = inf +nextAfter (~0.123E2, ~0.5877472E~38) = ~0.12299999E2 +rem (~0.123E2, ~0.5877472E~38) = inf +* (~0.123E2, ~0.1E~44) = 0.17E~43 ++ (~0.123E2, ~0.1E~44) = ~0.123E2 +- (~0.123E2, ~0.1E~44) = ~0.123E2 +/ (~0.123E2, ~0.1E~44) = inf +nextAfter (~0.123E2, ~0.1E~44) = ~0.12299999E2 +rem (~0.123E2, ~0.1E~44) = inf +* (~0.123E2, ~0.0) = 0.0 ++ (~0.123E2, ~0.0) = ~0.123E2 +- (~0.123E2, ~0.0) = ~0.123E2 +/ (~0.123E2, ~0.0) = inf +nextAfter (~0.123E2, ~0.0) = ~0.12299999E2 +rem (~0.123E2, ~0.0) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.123E2, ~inf) = inf ++ (~0.123E2, ~inf) = ~inf +- (~0.123E2, ~inf) = inf +/ (~0.123E2, ~inf) = 0.0 +nextAfter (~0.123E2, ~inf) = ~0.12300001E2 +rem (~0.123E2, ~inf) = ~0.123E2 +* (~0.123E2, nan) = nan ++ (~0.123E2, nan) = nan +- (~0.123E2, nan) = nan +/ (~0.123E2, nan) = nan +nextAfter (~0.123E2, nan) = nan +rem (~0.123E2, nan) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.31415927E1, 0.34028235E39) = ~inf ++ (~0.31415927E1, 0.34028235E39) = 0.34028235E39 +- (~0.31415927E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.31415927E1, 0.34028235E39) = ~0.9232312E~38 +nextAfter (~0.31415927E1, 0.34028235E39) = ~0.31415925E1 +rem (~0.31415927E1, 0.34028235E39) = ~0.31415927E1 +* (~0.31415927E1, 0.17014117E39) = ~inf ++ (~0.31415927E1, 0.17014117E39) = 0.17014117E39 +- (~0.31415927E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.31415927E1, 0.17014117E39) = ~0.18464624E~37 +nextAfter (~0.31415927E1, 0.17014117E39) = ~0.31415925E1 +rem (~0.31415927E1, 0.17014117E39) = ~0.31415927E1 +* (~0.31415927E1, 0.123E4) = ~0.38641592E4 ++ (~0.31415927E1, 0.123E4) = 0.12268584E4 +- (~0.31415927E1, 0.123E4) = ~0.12331416E4 +/ (~0.31415927E1, 0.123E4) = ~0.25541405E~2 +nextAfter (~0.31415927E1, 0.123E4) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E4) = ~0.31415927E1 +* (~0.31415927E1, 0.123E2) = ~0.3864159E2 ++ (~0.31415927E1, 0.123E2) = 0.9158407E1 +- (~0.31415927E1, 0.123E2) = ~0.15441593E2 +/ (~0.31415927E1, 0.123E2) = ~0.25541404 +nextAfter (~0.31415927E1, 0.123E2) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E2) = ~0.31415927E1 +* (~0.31415927E1, 0.31415927E1) = ~0.9869605E1 ++ (~0.31415927E1, 0.31415927E1) = 0.0 +- (~0.31415927E1, 0.31415927E1) = ~0.62831855E1 +/ (~0.31415927E1, 0.31415927E1) = ~0.1E1 +nextAfter (~0.31415927E1, 0.31415927E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.31415927E1) = 0.0 +* (~0.31415927E1, 0.27182817E1) = ~0.8539734E1 ++ (~0.31415927E1, 0.27182817E1) = ~0.423311 +- (~0.31415927E1, 0.27182817E1) = ~0.58598747E1 +/ (~0.31415927E1, 0.27182817E1) = ~0.11557274E1 +nextAfter (~0.31415927E1, 0.27182817E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.27182817E1) = ~0.423311 +* (~0.31415927E1, 0.123E1) = ~0.3864159E1 ++ (~0.31415927E1, 0.123E1) = ~0.19115927E1 +- (~0.31415927E1, 0.123E1) = ~0.43715925E1 +/ (~0.31415927E1, 0.123E1) = ~0.25541403E1 +nextAfter (~0.31415927E1, 0.123E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E1) = ~0.6815927 +* (~0.31415927E1, 0.123) = ~0.38641593 ++ (~0.31415927E1, 0.123) = ~0.30185928E1 +- (~0.31415927E1, 0.123) = ~0.32645926E1 +/ (~0.31415927E1, 0.123) = ~0.25541403E2 +nextAfter (~0.31415927E1, 0.123) = ~0.31415925E1 +rem (~0.31415927E1, 0.123) = ~0.6659269E~1 +* (~0.31415927E1, 0.123E~2) = ~0.38641593E~2 ++ (~0.31415927E1, 0.123E~2) = ~0.31403627E1 +- (~0.31415927E1, 0.123E~2) = ~0.31428227E1 +/ (~0.31415927E1, 0.123E~2) = ~0.25541404E4 +nextAfter (~0.31415927E1, 0.123E~2) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E~2) = ~0.17261505E~3 +* (~0.31415927E1, 0.11754944E~37) = ~0.36929245E~37 ++ (~0.31415927E1, 0.11754944E~37) = ~0.31415927E1 +- (~0.31415927E1, 0.11754944E~37) = ~0.31415927E1 +/ (~0.31415927E1, 0.11754944E~37) = ~0.26725715E39 +nextAfter (~0.31415927E1, 0.11754944E~37) = ~0.31415925E1 +rem (~0.31415927E1, 0.11754944E~37) = 0.0 +* (~0.31415927E1, 0.5877472E~38) = ~0.18464623E~37 ++ (~0.31415927E1, 0.5877472E~38) = ~0.31415927E1 +- (~0.31415927E1, 0.5877472E~38) = ~0.31415927E1 +/ (~0.31415927E1, 0.5877472E~38) = ~inf +nextAfter (~0.31415927E1, 0.5877472E~38) = ~0.31415925E1 +rem (~0.31415927E1, 0.5877472E~38) = inf +* (~0.31415927E1, 0.1E~44) = ~0.4E~44 ++ (~0.31415927E1, 0.1E~44) = ~0.31415927E1 +- (~0.31415927E1, 0.1E~44) = ~0.31415927E1 +/ (~0.31415927E1, 0.1E~44) = ~inf +nextAfter (~0.31415927E1, 0.1E~44) = ~0.31415925E1 +rem (~0.31415927E1, 0.1E~44) = inf +* (~0.31415927E1, 0.0) = ~0.0 ++ (~0.31415927E1, 0.0) = ~0.31415927E1 +- (~0.31415927E1, 0.0) = ~0.31415927E1 +/ (~0.31415927E1, 0.0) = ~inf +nextAfter (~0.31415927E1, 0.0) = ~0.31415925E1 +rem (~0.31415927E1, 0.0) = nan +* (~0.31415927E1, ~0.34028235E39) = inf ++ (~0.31415927E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.31415927E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.31415927E1, ~0.34028235E39) = 0.9232312E~38 +nextAfter (~0.31415927E1, ~0.34028235E39) = ~0.3141593E1 +rem (~0.31415927E1, ~0.34028235E39) = ~0.31415927E1 +* (~0.31415927E1, ~0.17014117E39) = inf ++ (~0.31415927E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.31415927E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.31415927E1, ~0.17014117E39) = 0.18464624E~37 +nextAfter (~0.31415927E1, ~0.17014117E39) = ~0.3141593E1 +rem (~0.31415927E1, ~0.17014117E39) = ~0.31415927E1 +* (~0.31415927E1, ~0.123E4) = 0.38641592E4 ++ (~0.31415927E1, ~0.123E4) = ~0.12331416E4 +- (~0.31415927E1, ~0.123E4) = 0.12268584E4 +/ (~0.31415927E1, ~0.123E4) = 0.25541405E~2 +nextAfter (~0.31415927E1, ~0.123E4) = ~0.3141593E1 +rem (~0.31415927E1, ~0.123E4) = ~0.31415927E1 +* (~0.31415927E1, ~0.123E2) = 0.3864159E2 ++ (~0.31415927E1, ~0.123E2) = ~0.15441593E2 +- (~0.31415927E1, ~0.123E2) = 0.9158407E1 +/ (~0.31415927E1, ~0.123E2) = 0.25541404 +nextAfter (~0.31415927E1, ~0.123E2) = ~0.3141593E1 +rem (~0.31415927E1, ~0.123E2) = ~0.31415927E1 +* (~0.31415927E1, ~0.31415927E1) = 0.9869605E1 ++ (~0.31415927E1, ~0.31415927E1) = ~0.62831855E1 +- (~0.31415927E1, ~0.31415927E1) = 0.0 +/ (~0.31415927E1, ~0.31415927E1) = 0.1E1 +nextAfter (~0.31415927E1, ~0.31415927E1) = ~0.31415927E1 +rem (~0.31415927E1, ~0.31415927E1) = 0.0 +* (~0.31415927E1, ~0.27182817E1) = 0.8539734E1 ++ (~0.31415927E1, ~0.27182817E1) = ~0.58598747E1 +- (~0.31415927E1, ~0.27182817E1) = ~0.423311 +/ (~0.31415927E1, ~0.27182817E1) = 0.11557274E1 +nextAfter (~0.31415927E1, ~0.27182817E1) = ~0.31415925E1 +rem (~0.31415927E1, ~0.27182817E1) = ~0.423311 +* (~0.31415927E1, ~0.123E1) = 0.3864159E1 ++ (~0.31415927E1, ~0.123E1) = ~0.43715925E1 +- (~0.31415927E1, ~0.123E1) = ~0.19115927E1 +/ (~0.31415927E1, ~0.123E1) = 0.25541403E1 +nextAfter (~0.31415927E1, ~0.123E1) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123E1) = ~0.6815927 +* (~0.31415927E1, ~0.123) = 0.38641593 ++ (~0.31415927E1, ~0.123) = ~0.32645926E1 +- (~0.31415927E1, ~0.123) = ~0.30185928E1 +/ (~0.31415927E1, ~0.123) = 0.25541403E2 +nextAfter (~0.31415927E1, ~0.123) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123) = ~0.6659269E~1 +* (~0.31415927E1, ~0.123E~2) = 0.38641593E~2 ++ (~0.31415927E1, ~0.123E~2) = ~0.31428227E1 +- (~0.31415927E1, ~0.123E~2) = ~0.31403627E1 +/ (~0.31415927E1, ~0.123E~2) = 0.25541404E4 +nextAfter (~0.31415927E1, ~0.123E~2) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123E~2) = ~0.17261505E~3 +* (~0.31415927E1, ~0.11754944E~37) = 0.36929245E~37 ++ (~0.31415927E1, ~0.11754944E~37) = ~0.31415927E1 +- (~0.31415927E1, ~0.11754944E~37) = ~0.31415927E1 +/ (~0.31415927E1, ~0.11754944E~37) = 0.26725715E39 +nextAfter (~0.31415927E1, ~0.11754944E~37) = ~0.31415925E1 +rem (~0.31415927E1, ~0.11754944E~37) = 0.0 +* (~0.31415927E1, ~0.5877472E~38) = 0.18464623E~37 ++ (~0.31415927E1, ~0.5877472E~38) = ~0.31415927E1 +- (~0.31415927E1, ~0.5877472E~38) = ~0.31415927E1 +/ (~0.31415927E1, ~0.5877472E~38) = inf +nextAfter (~0.31415927E1, ~0.5877472E~38) = ~0.31415925E1 +rem (~0.31415927E1, ~0.5877472E~38) = inf +* (~0.31415927E1, ~0.1E~44) = 0.4E~44 ++ (~0.31415927E1, ~0.1E~44) = ~0.31415927E1 +- (~0.31415927E1, ~0.1E~44) = ~0.31415927E1 +/ (~0.31415927E1, ~0.1E~44) = inf +nextAfter (~0.31415927E1, ~0.1E~44) = ~0.31415925E1 +rem (~0.31415927E1, ~0.1E~44) = inf +* (~0.31415927E1, ~0.0) = 0.0 ++ (~0.31415927E1, ~0.0) = ~0.31415927E1 +- (~0.31415927E1, ~0.0) = ~0.31415927E1 +/ (~0.31415927E1, ~0.0) = inf +nextAfter (~0.31415927E1, ~0.0) = ~0.31415925E1 +rem (~0.31415927E1, ~0.0) = nan +* (~0.31415927E1, inf) = ~inf ++ (~0.31415927E1, inf) = inf +- (~0.31415927E1, inf) = ~inf +/ (~0.31415927E1, inf) = ~0.0 +nextAfter (~0.31415927E1, inf) = ~0.31415925E1 +rem (~0.31415927E1, inf) = ~0.31415927E1 +* (~0.31415927E1, ~inf) = inf ++ (~0.31415927E1, ~inf) = ~inf +- (~0.31415927E1, ~inf) = inf +/ (~0.31415927E1, ~inf) = 0.0 +nextAfter (~0.31415927E1, ~inf) = ~0.3141593E1 +rem (~0.31415927E1, ~inf) = ~0.31415927E1 +* (~0.31415927E1, nan) = nan ++ (~0.31415927E1, nan) = nan +- (~0.31415927E1, nan) = nan +/ (~0.31415927E1, nan) = nan +nextAfter (~0.31415927E1, nan) = nan +rem (~0.31415927E1, nan) = nan +* (~0.31415927E1, inf) = ~inf ++ (~0.31415927E1, inf) = inf +- (~0.31415927E1, inf) = ~inf +/ (~0.31415927E1, inf) = ~0.0 +nextAfter (~0.31415927E1, inf) = ~0.31415925E1 +rem (~0.31415927E1, inf) = ~0.31415927E1 +* (~0.27182817E1, 0.34028235E39) = ~inf ++ (~0.27182817E1, 0.34028235E39) = 0.34028235E39 +- (~0.27182817E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.27182817E1, 0.34028235E39) = ~0.7988312E~38 +nextAfter (~0.27182817E1, 0.34028235E39) = ~0.27182815E1 +rem (~0.27182817E1, 0.34028235E39) = ~0.27182817E1 +* (~0.27182817E1, 0.17014117E39) = ~inf ++ (~0.27182817E1, 0.17014117E39) = 0.17014117E39 +- (~0.27182817E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.27182817E1, 0.17014117E39) = ~0.15976626E~37 +nextAfter (~0.27182817E1, 0.17014117E39) = ~0.27182815E1 +rem (~0.27182817E1, 0.17014117E39) = ~0.27182817E1 +* (~0.27182817E1, 0.123E4) = ~0.33434866E4 ++ (~0.27182817E1, 0.123E4) = 0.12272817E4 +- (~0.27182817E1, 0.123E4) = ~0.12327183E4 +/ (~0.27182817E1, 0.123E4) = ~0.22099852E~2 +nextAfter (~0.27182817E1, 0.123E4) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E4) = ~0.27182817E1 +* (~0.27182817E1, 0.123E2) = ~0.33434868E2 ++ (~0.27182817E1, 0.123E2) = 0.9581718E1 +- (~0.27182817E1, 0.123E2) = ~0.15018282E2 +/ (~0.27182817E1, 0.123E2) = ~0.22099851 +nextAfter (~0.27182817E1, 0.123E2) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E2) = ~0.27182817E1 +* (~0.27182817E1, 0.31415927E1) = ~0.8539734E1 ++ (~0.27182817E1, 0.31415927E1) = 0.423311 +- (~0.27182817E1, 0.31415927E1) = ~0.58598747E1 +/ (~0.27182817E1, 0.31415927E1) = ~0.86525595 +nextAfter (~0.27182817E1, 0.31415927E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.31415927E1) = ~0.27182817E1 +* (~0.27182817E1, 0.27182817E1) = ~0.73890557E1 ++ (~0.27182817E1, 0.27182817E1) = 0.0 +- (~0.27182817E1, 0.27182817E1) = ~0.54365635E1 +/ (~0.27182817E1, 0.27182817E1) = ~0.1E1 +nextAfter (~0.27182817E1, 0.27182817E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.27182817E1) = 0.0 +* (~0.27182817E1, 0.123E1) = ~0.33434865E1 ++ (~0.27182817E1, 0.123E1) = ~0.14882817E1 +- (~0.27182817E1, 0.123E1) = ~0.39482818E1 +/ (~0.27182817E1, 0.123E1) = ~0.2209985E1 +nextAfter (~0.27182817E1, 0.123E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E1) = ~0.2582817 +* (~0.27182817E1, 0.123) = ~0.33434868 ++ (~0.27182817E1, 0.123) = ~0.25952818E1 +- (~0.27182817E1, 0.123) = ~0.28412817E1 +/ (~0.27182817E1, 0.123) = ~0.22099852E2 +nextAfter (~0.27182817E1, 0.123) = ~0.27182815E1 +rem (~0.27182817E1, 0.123) = ~0.12281656E~1 +* (~0.27182817E1, 0.123E~2) = ~0.33434867E~2 ++ (~0.27182817E1, 0.123E~2) = ~0.27170517E1 +- (~0.27182817E1, 0.123E~2) = ~0.27195117E1 +/ (~0.27182817E1, 0.123E~2) = ~0.2209985E4 +nextAfter (~0.27182817E1, 0.123E~2) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E~2) = ~0.12116432E~2 +* (~0.27182817E1, 0.11754944E~37) = ~0.31953248E~37 ++ (~0.27182817E1, 0.11754944E~37) = ~0.27182817E1 +- (~0.27182817E1, 0.11754944E~37) = ~0.27182817E1 +/ (~0.27182817E1, 0.11754944E~37) = ~0.23124584E39 +nextAfter (~0.27182817E1, 0.11754944E~37) = ~0.27182815E1 +rem (~0.27182817E1, 0.11754944E~37) = 0.0 +* (~0.27182817E1, 0.5877472E~38) = ~0.15976624E~37 ++ (~0.27182817E1, 0.5877472E~38) = ~0.27182817E1 +- (~0.27182817E1, 0.5877472E~38) = ~0.27182817E1 +/ (~0.27182817E1, 0.5877472E~38) = ~inf +nextAfter (~0.27182817E1, 0.5877472E~38) = ~0.27182815E1 +rem (~0.27182817E1, 0.5877472E~38) = inf +* (~0.27182817E1, 0.1E~44) = ~0.4E~44 ++ (~0.27182817E1, 0.1E~44) = ~0.27182817E1 +- (~0.27182817E1, 0.1E~44) = ~0.27182817E1 +/ (~0.27182817E1, 0.1E~44) = ~inf +nextAfter (~0.27182817E1, 0.1E~44) = ~0.27182815E1 +rem (~0.27182817E1, 0.1E~44) = inf +* (~0.27182817E1, 0.0) = ~0.0 ++ (~0.27182817E1, 0.0) = ~0.27182817E1 +- (~0.27182817E1, 0.0) = ~0.27182817E1 +/ (~0.27182817E1, 0.0) = ~inf +nextAfter (~0.27182817E1, 0.0) = ~0.27182815E1 +rem (~0.27182817E1, 0.0) = nan +* (~0.27182817E1, ~0.34028235E39) = inf ++ (~0.27182817E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.27182817E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.27182817E1, ~0.34028235E39) = 0.7988312E~38 +nextAfter (~0.27182817E1, ~0.34028235E39) = ~0.2718282E1 +rem (~0.27182817E1, ~0.34028235E39) = ~0.27182817E1 +* (~0.27182817E1, ~0.17014117E39) = inf ++ (~0.27182817E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.27182817E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.27182817E1, ~0.17014117E39) = 0.15976626E~37 +nextAfter (~0.27182817E1, ~0.17014117E39) = ~0.2718282E1 +rem (~0.27182817E1, ~0.17014117E39) = ~0.27182817E1 +* (~0.27182817E1, ~0.123E4) = 0.33434866E4 ++ (~0.27182817E1, ~0.123E4) = ~0.12327183E4 +- (~0.27182817E1, ~0.123E4) = 0.12272817E4 +/ (~0.27182817E1, ~0.123E4) = 0.22099852E~2 +nextAfter (~0.27182817E1, ~0.123E4) = ~0.2718282E1 +rem (~0.27182817E1, ~0.123E4) = ~0.27182817E1 +* (~0.27182817E1, ~0.123E2) = 0.33434868E2 ++ (~0.27182817E1, ~0.123E2) = ~0.15018282E2 +- (~0.27182817E1, ~0.123E2) = 0.9581718E1 +/ (~0.27182817E1, ~0.123E2) = 0.22099851 +nextAfter (~0.27182817E1, ~0.123E2) = ~0.2718282E1 +rem (~0.27182817E1, ~0.123E2) = ~0.27182817E1 +* (~0.27182817E1, ~0.31415927E1) = 0.8539734E1 ++ (~0.27182817E1, ~0.31415927E1) = ~0.58598747E1 +- (~0.27182817E1, ~0.31415927E1) = 0.423311 +/ (~0.27182817E1, ~0.31415927E1) = 0.86525595 +nextAfter (~0.27182817E1, ~0.31415927E1) = ~0.2718282E1 +rem (~0.27182817E1, ~0.31415927E1) = ~0.27182817E1 +* (~0.27182817E1, ~0.27182817E1) = 0.73890557E1 ++ (~0.27182817E1, ~0.27182817E1) = ~0.54365635E1 +- (~0.27182817E1, ~0.27182817E1) = 0.0 +/ (~0.27182817E1, ~0.27182817E1) = 0.1E1 +nextAfter (~0.27182817E1, ~0.27182817E1) = ~0.27182817E1 +rem (~0.27182817E1, ~0.27182817E1) = 0.0 +* (~0.27182817E1, ~0.123E1) = 0.33434865E1 ++ (~0.27182817E1, ~0.123E1) = ~0.39482818E1 +- (~0.27182817E1, ~0.123E1) = ~0.14882817E1 +/ (~0.27182817E1, ~0.123E1) = 0.2209985E1 +nextAfter (~0.27182817E1, ~0.123E1) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123E1) = ~0.2582817 +* (~0.27182817E1, ~0.123) = 0.33434868 ++ (~0.27182817E1, ~0.123) = ~0.28412817E1 +- (~0.27182817E1, ~0.123) = ~0.25952818E1 +/ (~0.27182817E1, ~0.123) = 0.22099852E2 +nextAfter (~0.27182817E1, ~0.123) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123) = ~0.12281656E~1 +* (~0.27182817E1, ~0.123E~2) = 0.33434867E~2 ++ (~0.27182817E1, ~0.123E~2) = ~0.27195117E1 +- (~0.27182817E1, ~0.123E~2) = ~0.27170517E1 +/ (~0.27182817E1, ~0.123E~2) = 0.2209985E4 +nextAfter (~0.27182817E1, ~0.123E~2) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123E~2) = ~0.12116432E~2 +* (~0.27182817E1, ~0.11754944E~37) = 0.31953248E~37 ++ (~0.27182817E1, ~0.11754944E~37) = ~0.27182817E1 +- (~0.27182817E1, ~0.11754944E~37) = ~0.27182817E1 +/ (~0.27182817E1, ~0.11754944E~37) = 0.23124584E39 +nextAfter (~0.27182817E1, ~0.11754944E~37) = ~0.27182815E1 +rem (~0.27182817E1, ~0.11754944E~37) = 0.0 +* (~0.27182817E1, ~0.5877472E~38) = 0.15976624E~37 ++ (~0.27182817E1, ~0.5877472E~38) = ~0.27182817E1 +- (~0.27182817E1, ~0.5877472E~38) = ~0.27182817E1 +/ (~0.27182817E1, ~0.5877472E~38) = inf +nextAfter (~0.27182817E1, ~0.5877472E~38) = ~0.27182815E1 +rem (~0.27182817E1, ~0.5877472E~38) = inf +* (~0.27182817E1, ~0.1E~44) = 0.4E~44 ++ (~0.27182817E1, ~0.1E~44) = ~0.27182817E1 +- (~0.27182817E1, ~0.1E~44) = ~0.27182817E1 +/ (~0.27182817E1, ~0.1E~44) = inf +nextAfter (~0.27182817E1, ~0.1E~44) = ~0.27182815E1 +rem (~0.27182817E1, ~0.1E~44) = inf +* (~0.27182817E1, ~0.0) = 0.0 ++ (~0.27182817E1, ~0.0) = ~0.27182817E1 +- (~0.27182817E1, ~0.0) = ~0.27182817E1 +/ (~0.27182817E1, ~0.0) = inf +nextAfter (~0.27182817E1, ~0.0) = ~0.27182815E1 +rem (~0.27182817E1, ~0.0) = nan +* (~0.27182817E1, inf) = ~inf ++ (~0.27182817E1, inf) = inf +- (~0.27182817E1, inf) = ~inf +/ (~0.27182817E1, inf) = ~0.0 +nextAfter (~0.27182817E1, inf) = ~0.27182815E1 +rem (~0.27182817E1, inf) = ~0.27182817E1 +* (~0.27182817E1, ~inf) = inf ++ (~0.27182817E1, ~inf) = ~inf +- (~0.27182817E1, ~inf) = inf +/ (~0.27182817E1, ~inf) = 0.0 +nextAfter (~0.27182817E1, ~inf) = ~0.2718282E1 +rem (~0.27182817E1, ~inf) = ~0.27182817E1 +* (~0.27182817E1, nan) = nan ++ (~0.27182817E1, nan) = nan +- (~0.27182817E1, nan) = nan +/ (~0.27182817E1, nan) = nan +nextAfter (~0.27182817E1, nan) = nan +rem (~0.27182817E1, nan) = nan +* (~0.27182817E1, inf) = ~inf ++ (~0.27182817E1, inf) = inf +- (~0.27182817E1, inf) = ~inf +/ (~0.27182817E1, inf) = ~0.0 +nextAfter (~0.27182817E1, inf) = ~0.27182815E1 +rem (~0.27182817E1, inf) = ~0.27182817E1 +* (~0.123E1, 0.34028235E39) = ~inf ++ (~0.123E1, 0.34028235E39) = 0.34028235E39 +- (~0.123E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E1, 0.34028235E39) = ~0.3614645E~38 +nextAfter (~0.123E1, 0.34028235E39) = ~0.12299999E1 +rem (~0.123E1, 0.34028235E39) = ~0.123E1 +* (~0.123E1, 0.17014117E39) = ~0.20927364E39 ++ (~0.123E1, 0.17014117E39) = 0.17014117E39 +- (~0.123E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E1, 0.17014117E39) = ~0.722929E~38 +nextAfter (~0.123E1, 0.17014117E39) = ~0.12299999E1 +rem (~0.123E1, 0.17014117E39) = ~0.123E1 +* (~0.123E1, 0.123E4) = ~0.15129E4 ++ (~0.123E1, 0.123E4) = 0.122877E4 +- (~0.123E1, 0.123E4) = ~0.123123E4 +/ (~0.123E1, 0.123E4) = ~0.1E~2 +nextAfter (~0.123E1, 0.123E4) = ~0.12299999E1 +rem (~0.123E1, 0.123E4) = ~0.123E1 +* (~0.123E1, 0.123E2) = ~0.15129001E2 ++ (~0.123E1, 0.123E2) = 0.1107E2 +- (~0.123E1, 0.123E2) = ~0.13530001E2 +/ (~0.123E1, 0.123E2) = ~0.1 +nextAfter (~0.123E1, 0.123E2) = ~0.12299999E1 +rem (~0.123E1, 0.123E2) = ~0.123E1 +* (~0.123E1, 0.31415927E1) = ~0.3864159E1 ++ (~0.123E1, 0.31415927E1) = 0.19115927E1 +- (~0.123E1, 0.31415927E1) = ~0.43715925E1 +/ (~0.123E1, 0.31415927E1) = ~0.39152116 +nextAfter (~0.123E1, 0.31415927E1) = ~0.12299999E1 +rem (~0.123E1, 0.31415927E1) = ~0.123E1 +* (~0.123E1, 0.27182817E1) = ~0.33434865E1 ++ (~0.123E1, 0.27182817E1) = 0.14882817E1 +- (~0.123E1, 0.27182817E1) = ~0.39482818E1 +/ (~0.123E1, 0.27182817E1) = ~0.45249173 +nextAfter (~0.123E1, 0.27182817E1) = ~0.12299999E1 +rem (~0.123E1, 0.27182817E1) = ~0.123E1 +* (~0.123E1, 0.123E1) = ~0.15129E1 ++ (~0.123E1, 0.123E1) = 0.0 +- (~0.123E1, 0.123E1) = ~0.246E1 +/ (~0.123E1, 0.123E1) = ~0.1E1 +nextAfter (~0.123E1, 0.123E1) = ~0.12299999E1 +rem (~0.123E1, 0.123E1) = 0.0 +* (~0.123E1, 0.123) = ~0.15129 ++ (~0.123E1, 0.123) = ~0.1107E1 +- (~0.123E1, 0.123) = ~0.1353E1 +/ (~0.123E1, 0.123) = ~0.1E2 +nextAfter (~0.123E1, 0.123) = ~0.12299999E1 +rem (~0.123E1, 0.123) = 0.0 +* (~0.123E1, 0.123E~2) = ~0.15129001E~2 ++ (~0.123E1, 0.123E~2) = ~0.122877E1 +- (~0.123E1, 0.123E~2) = ~0.123123E1 +/ (~0.123E1, 0.123E~2) = ~0.1E4 +nextAfter (~0.123E1, 0.123E~2) = ~0.12299999E1 +rem (~0.123E1, 0.123E~2) = 0.0 +* (~0.123E1, 0.11754944E~37) = ~0.14458581E~37 ++ (~0.123E1, 0.11754944E~37) = ~0.123E1 +- (~0.123E1, 0.11754944E~37) = ~0.123E1 +/ (~0.123E1, 0.11754944E~37) = ~0.10463683E39 +nextAfter (~0.123E1, 0.11754944E~37) = ~0.12299999E1 +rem (~0.123E1, 0.11754944E~37) = 0.0 +* (~0.123E1, 0.5877472E~38) = ~0.722929E~38 ++ (~0.123E1, 0.5877472E~38) = ~0.123E1 +- (~0.123E1, 0.5877472E~38) = ~0.123E1 +/ (~0.123E1, 0.5877472E~38) = ~0.20927366E39 +nextAfter (~0.123E1, 0.5877472E~38) = ~0.12299999E1 +rem (~0.123E1, 0.5877472E~38) = 0.0 +* (~0.123E1, 0.1E~44) = ~0.1E~44 ++ (~0.123E1, 0.1E~44) = ~0.123E1 +- (~0.123E1, 0.1E~44) = ~0.123E1 +/ (~0.123E1, 0.1E~44) = ~inf +nextAfter (~0.123E1, 0.1E~44) = ~0.12299999E1 +rem (~0.123E1, 0.1E~44) = inf +* (~0.123E1, 0.0) = ~0.0 ++ (~0.123E1, 0.0) = ~0.123E1 +- (~0.123E1, 0.0) = ~0.123E1 +/ (~0.123E1, 0.0) = ~inf +nextAfter (~0.123E1, 0.0) = ~0.12299999E1 +rem (~0.123E1, 0.0) = nan +* (~0.123E1, ~0.34028235E39) = inf ++ (~0.123E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E1, ~0.34028235E39) = 0.3614645E~38 +nextAfter (~0.123E1, ~0.34028235E39) = ~0.12300001E1 +rem (~0.123E1, ~0.34028235E39) = ~0.123E1 +* (~0.123E1, ~0.17014117E39) = 0.20927364E39 ++ (~0.123E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E1, ~0.17014117E39) = 0.722929E~38 +nextAfter (~0.123E1, ~0.17014117E39) = ~0.12300001E1 +rem (~0.123E1, ~0.17014117E39) = ~0.123E1 +* (~0.123E1, ~0.123E4) = 0.15129E4 ++ (~0.123E1, ~0.123E4) = ~0.123123E4 +- (~0.123E1, ~0.123E4) = 0.122877E4 +/ (~0.123E1, ~0.123E4) = 0.1E~2 +nextAfter (~0.123E1, ~0.123E4) = ~0.12300001E1 +rem (~0.123E1, ~0.123E4) = ~0.123E1 +* (~0.123E1, ~0.123E2) = 0.15129001E2 ++ (~0.123E1, ~0.123E2) = ~0.13530001E2 +- (~0.123E1, ~0.123E2) = 0.1107E2 +/ (~0.123E1, ~0.123E2) = 0.1 +nextAfter (~0.123E1, ~0.123E2) = ~0.12300001E1 +rem (~0.123E1, ~0.123E2) = ~0.123E1 +* (~0.123E1, ~0.31415927E1) = 0.3864159E1 ++ (~0.123E1, ~0.31415927E1) = ~0.43715925E1 +- (~0.123E1, ~0.31415927E1) = 0.19115927E1 +/ (~0.123E1, ~0.31415927E1) = 0.39152116 +nextAfter (~0.123E1, ~0.31415927E1) = ~0.12300001E1 +rem (~0.123E1, ~0.31415927E1) = ~0.123E1 +* (~0.123E1, ~0.27182817E1) = 0.33434865E1 ++ (~0.123E1, ~0.27182817E1) = ~0.39482818E1 +- (~0.123E1, ~0.27182817E1) = 0.14882817E1 +/ (~0.123E1, ~0.27182817E1) = 0.45249173 +nextAfter (~0.123E1, ~0.27182817E1) = ~0.12300001E1 +rem (~0.123E1, ~0.27182817E1) = ~0.123E1 +* (~0.123E1, ~0.123E1) = 0.15129E1 ++ (~0.123E1, ~0.123E1) = ~0.246E1 +- (~0.123E1, ~0.123E1) = 0.0 +/ (~0.123E1, ~0.123E1) = 0.1E1 +nextAfter (~0.123E1, ~0.123E1) = ~0.123E1 +rem (~0.123E1, ~0.123E1) = 0.0 +* (~0.123E1, ~0.123) = 0.15129 ++ (~0.123E1, ~0.123) = ~0.1353E1 +- (~0.123E1, ~0.123) = ~0.1107E1 +/ (~0.123E1, ~0.123) = 0.1E2 +nextAfter (~0.123E1, ~0.123) = ~0.12299999E1 +rem (~0.123E1, ~0.123) = 0.0 +* (~0.123E1, ~0.123E~2) = 0.15129001E~2 ++ (~0.123E1, ~0.123E~2) = ~0.123123E1 +- (~0.123E1, ~0.123E~2) = ~0.122877E1 +/ (~0.123E1, ~0.123E~2) = 0.1E4 +nextAfter (~0.123E1, ~0.123E~2) = ~0.12299999E1 +rem (~0.123E1, ~0.123E~2) = 0.0 +* (~0.123E1, ~0.11754944E~37) = 0.14458581E~37 ++ (~0.123E1, ~0.11754944E~37) = ~0.123E1 +- (~0.123E1, ~0.11754944E~37) = ~0.123E1 +/ (~0.123E1, ~0.11754944E~37) = 0.10463683E39 +nextAfter (~0.123E1, ~0.11754944E~37) = ~0.12299999E1 +rem (~0.123E1, ~0.11754944E~37) = 0.0 +* (~0.123E1, ~0.5877472E~38) = 0.722929E~38 ++ (~0.123E1, ~0.5877472E~38) = ~0.123E1 +- (~0.123E1, ~0.5877472E~38) = ~0.123E1 +/ (~0.123E1, ~0.5877472E~38) = 0.20927366E39 +nextAfter (~0.123E1, ~0.5877472E~38) = ~0.12299999E1 +rem (~0.123E1, ~0.5877472E~38) = 0.0 +* (~0.123E1, ~0.1E~44) = 0.1E~44 ++ (~0.123E1, ~0.1E~44) = ~0.123E1 +- (~0.123E1, ~0.1E~44) = ~0.123E1 +/ (~0.123E1, ~0.1E~44) = inf +nextAfter (~0.123E1, ~0.1E~44) = ~0.12299999E1 +rem (~0.123E1, ~0.1E~44) = inf +* (~0.123E1, ~0.0) = 0.0 ++ (~0.123E1, ~0.0) = ~0.123E1 +- (~0.123E1, ~0.0) = ~0.123E1 +/ (~0.123E1, ~0.0) = inf +nextAfter (~0.123E1, ~0.0) = ~0.12299999E1 +rem (~0.123E1, ~0.0) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123E1, ~inf) = inf ++ (~0.123E1, ~inf) = ~inf +- (~0.123E1, ~inf) = inf +/ (~0.123E1, ~inf) = 0.0 +nextAfter (~0.123E1, ~inf) = ~0.12300001E1 +rem (~0.123E1, ~inf) = ~0.123E1 +* (~0.123E1, nan) = nan ++ (~0.123E1, nan) = nan +- (~0.123E1, nan) = nan +/ (~0.123E1, nan) = nan +nextAfter (~0.123E1, nan) = nan +rem (~0.123E1, nan) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123, 0.34028235E39) = ~0.4185473E38 ++ (~0.123, 0.34028235E39) = 0.34028235E39 +- (~0.123, 0.34028235E39) = ~0.34028235E39 +/ (~0.123, 0.34028235E39) = ~0.361465E~39 +nextAfter (~0.123, 0.34028235E39) = ~0.122999996 +rem (~0.123, 0.34028235E39) = ~0.123 +* (~0.123, 0.17014117E39) = ~0.20927365E38 ++ (~0.123, 0.17014117E39) = 0.17014117E39 +- (~0.123, 0.17014117E39) = ~0.17014117E39 +/ (~0.123, 0.17014117E39) = ~0.722928E~39 +nextAfter (~0.123, 0.17014117E39) = ~0.122999996 +rem (~0.123, 0.17014117E39) = ~0.123 +* (~0.123, 0.123E4) = ~0.15129001E3 ++ (~0.123, 0.123E4) = 0.1229877E4 +- (~0.123, 0.123E4) = ~0.1230123E4 +/ (~0.123, 0.123E4) = ~0.100000005E~3 +nextAfter (~0.123, 0.123E4) = ~0.122999996 +rem (~0.123, 0.123E4) = ~0.123 +* (~0.123, 0.123E2) = ~0.15129001E1 ++ (~0.123, 0.123E2) = 0.12177E2 +- (~0.123, 0.123E2) = ~0.12423E2 +/ (~0.123, 0.123E2) = ~0.1E~1 +nextAfter (~0.123, 0.123E2) = ~0.122999996 +rem (~0.123, 0.123E2) = ~0.123 +* (~0.123, 0.31415927E1) = ~0.38641593 ++ (~0.123, 0.31415927E1) = 0.30185928E1 +- (~0.123, 0.31415927E1) = ~0.32645926E1 +/ (~0.123, 0.31415927E1) = ~0.39152116E~1 +nextAfter (~0.123, 0.31415927E1) = ~0.122999996 +rem (~0.123, 0.31415927E1) = ~0.123 +* (~0.123, 0.27182817E1) = ~0.33434868 ++ (~0.123, 0.27182817E1) = 0.25952818E1 +- (~0.123, 0.27182817E1) = ~0.28412817E1 +/ (~0.123, 0.27182817E1) = ~0.45249175E~1 +nextAfter (~0.123, 0.27182817E1) = ~0.122999996 +rem (~0.123, 0.27182817E1) = ~0.123 +* (~0.123, 0.123E1) = ~0.15129 ++ (~0.123, 0.123E1) = 0.1107E1 +- (~0.123, 0.123E1) = ~0.1353E1 +/ (~0.123, 0.123E1) = ~0.1 +nextAfter (~0.123, 0.123E1) = ~0.122999996 +rem (~0.123, 0.123E1) = ~0.123 +* (~0.123, 0.123) = ~0.15129001E~1 ++ (~0.123, 0.123) = 0.0 +- (~0.123, 0.123) = ~0.246 +/ (~0.123, 0.123) = ~0.1E1 +nextAfter (~0.123, 0.123) = ~0.122999996 +rem (~0.123, 0.123) = 0.0 +* (~0.123, 0.123E~2) = ~0.15129E~3 ++ (~0.123, 0.123E~2) = ~0.12177 +- (~0.123, 0.123E~2) = ~0.124230005 +/ (~0.123, 0.123E~2) = ~0.1E3 +nextAfter (~0.123, 0.123E~2) = ~0.122999996 +rem (~0.123, 0.123E~2) = 0.0 +* (~0.123, 0.11754944E~37) = ~0.1445858E~38 ++ (~0.123, 0.11754944E~37) = ~0.123 +- (~0.123, 0.11754944E~37) = ~0.123 +/ (~0.123, 0.11754944E~37) = ~0.10463683E38 +nextAfter (~0.123, 0.11754944E~37) = ~0.122999996 +rem (~0.123, 0.11754944E~37) = 0.0 +* (~0.123, 0.5877472E~38) = ~0.722928E~39 ++ (~0.123, 0.5877472E~38) = ~0.123 +- (~0.123, 0.5877472E~38) = ~0.123 +/ (~0.123, 0.5877472E~38) = ~0.20927366E38 +nextAfter (~0.123, 0.5877472E~38) = ~0.122999996 +rem (~0.123, 0.5877472E~38) = 0.0 +* (~0.123, 0.1E~44) = ~0.0 ++ (~0.123, 0.1E~44) = ~0.123 +- (~0.123, 0.1E~44) = ~0.123 +/ (~0.123, 0.1E~44) = ~inf +nextAfter (~0.123, 0.1E~44) = ~0.122999996 +rem (~0.123, 0.1E~44) = inf +* (~0.123, 0.0) = ~0.0 ++ (~0.123, 0.0) = ~0.123 +- (~0.123, 0.0) = ~0.123 +/ (~0.123, 0.0) = ~inf +nextAfter (~0.123, 0.0) = ~0.122999996 +rem (~0.123, 0.0) = nan +* (~0.123, ~0.34028235E39) = 0.4185473E38 ++ (~0.123, ~0.34028235E39) = ~0.34028235E39 +- (~0.123, ~0.34028235E39) = 0.34028235E39 +/ (~0.123, ~0.34028235E39) = 0.361465E~39 +nextAfter (~0.123, ~0.34028235E39) = ~0.12300001 +rem (~0.123, ~0.34028235E39) = ~0.123 +* (~0.123, ~0.17014117E39) = 0.20927365E38 ++ (~0.123, ~0.17014117E39) = ~0.17014117E39 +- (~0.123, ~0.17014117E39) = 0.17014117E39 +/ (~0.123, ~0.17014117E39) = 0.722928E~39 +nextAfter (~0.123, ~0.17014117E39) = ~0.12300001 +rem (~0.123, ~0.17014117E39) = ~0.123 +* (~0.123, ~0.123E4) = 0.15129001E3 ++ (~0.123, ~0.123E4) = ~0.1230123E4 +- (~0.123, ~0.123E4) = 0.1229877E4 +/ (~0.123, ~0.123E4) = 0.100000005E~3 +nextAfter (~0.123, ~0.123E4) = ~0.12300001 +rem (~0.123, ~0.123E4) = ~0.123 +* (~0.123, ~0.123E2) = 0.15129001E1 ++ (~0.123, ~0.123E2) = ~0.12423E2 +- (~0.123, ~0.123E2) = 0.12177E2 +/ (~0.123, ~0.123E2) = 0.1E~1 +nextAfter (~0.123, ~0.123E2) = ~0.12300001 +rem (~0.123, ~0.123E2) = ~0.123 +* (~0.123, ~0.31415927E1) = 0.38641593 ++ (~0.123, ~0.31415927E1) = ~0.32645926E1 +- (~0.123, ~0.31415927E1) = 0.30185928E1 +/ (~0.123, ~0.31415927E1) = 0.39152116E~1 +nextAfter (~0.123, ~0.31415927E1) = ~0.12300001 +rem (~0.123, ~0.31415927E1) = ~0.123 +* (~0.123, ~0.27182817E1) = 0.33434868 ++ (~0.123, ~0.27182817E1) = ~0.28412817E1 +- (~0.123, ~0.27182817E1) = 0.25952818E1 +/ (~0.123, ~0.27182817E1) = 0.45249175E~1 +nextAfter (~0.123, ~0.27182817E1) = ~0.12300001 +rem (~0.123, ~0.27182817E1) = ~0.123 +* (~0.123, ~0.123E1) = 0.15129 ++ (~0.123, ~0.123E1) = ~0.1353E1 +- (~0.123, ~0.123E1) = 0.1107E1 +/ (~0.123, ~0.123E1) = 0.1 +nextAfter (~0.123, ~0.123E1) = ~0.12300001 +rem (~0.123, ~0.123E1) = ~0.123 +* (~0.123, ~0.123) = 0.15129001E~1 ++ (~0.123, ~0.123) = ~0.246 +- (~0.123, ~0.123) = 0.0 +/ (~0.123, ~0.123) = 0.1E1 +nextAfter (~0.123, ~0.123) = ~0.123 +rem (~0.123, ~0.123) = 0.0 +* (~0.123, ~0.123E~2) = 0.15129E~3 ++ (~0.123, ~0.123E~2) = ~0.124230005 +- (~0.123, ~0.123E~2) = ~0.12177 +/ (~0.123, ~0.123E~2) = 0.1E3 +nextAfter (~0.123, ~0.123E~2) = ~0.122999996 +rem (~0.123, ~0.123E~2) = 0.0 +* (~0.123, ~0.11754944E~37) = 0.1445858E~38 ++ (~0.123, ~0.11754944E~37) = ~0.123 +- (~0.123, ~0.11754944E~37) = ~0.123 +/ (~0.123, ~0.11754944E~37) = 0.10463683E38 +nextAfter (~0.123, ~0.11754944E~37) = ~0.122999996 +rem (~0.123, ~0.11754944E~37) = 0.0 +* (~0.123, ~0.5877472E~38) = 0.722928E~39 ++ (~0.123, ~0.5877472E~38) = ~0.123 +- (~0.123, ~0.5877472E~38) = ~0.123 +/ (~0.123, ~0.5877472E~38) = 0.20927366E38 +nextAfter (~0.123, ~0.5877472E~38) = ~0.122999996 +rem (~0.123, ~0.5877472E~38) = 0.0 +* (~0.123, ~0.1E~44) = 0.0 ++ (~0.123, ~0.1E~44) = ~0.123 +- (~0.123, ~0.1E~44) = ~0.123 +/ (~0.123, ~0.1E~44) = inf +nextAfter (~0.123, ~0.1E~44) = ~0.122999996 +rem (~0.123, ~0.1E~44) = inf +* (~0.123, ~0.0) = 0.0 ++ (~0.123, ~0.0) = ~0.123 +- (~0.123, ~0.0) = ~0.123 +/ (~0.123, ~0.0) = inf +nextAfter (~0.123, ~0.0) = ~0.122999996 +rem (~0.123, ~0.0) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.122999996 +rem (~0.123, inf) = ~0.123 +* (~0.123, ~inf) = inf ++ (~0.123, ~inf) = ~inf +- (~0.123, ~inf) = inf +/ (~0.123, ~inf) = 0.0 +nextAfter (~0.123, ~inf) = ~0.12300001 +rem (~0.123, ~inf) = ~0.123 +* (~0.123, nan) = nan ++ (~0.123, nan) = nan +- (~0.123, nan) = nan +/ (~0.123, nan) = nan +nextAfter (~0.123, nan) = nan +rem (~0.123, nan) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.122999996 +rem (~0.123, inf) = ~0.123 +* (~0.123E~2, 0.34028235E39) = ~0.4185473E36 ++ (~0.123E~2, 0.34028235E39) = 0.34028235E39 +- (~0.123E~2, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E~2, 0.34028235E39) = ~0.3614E~41 +nextAfter (~0.123E~2, 0.34028235E39) = ~0.12299999E~2 +rem (~0.123E~2, 0.34028235E39) = ~0.123E~2 +* (~0.123E~2, 0.17014117E39) = ~0.20927364E36 ++ (~0.123E~2, 0.17014117E39) = 0.17014117E39 +- (~0.123E~2, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E~2, 0.17014117E39) = ~0.7229E~41 +nextAfter (~0.123E~2, 0.17014117E39) = ~0.12299999E~2 +rem (~0.123E~2, 0.17014117E39) = ~0.123E~2 +* (~0.123E~2, 0.123E4) = ~0.15129001E1 ++ (~0.123E~2, 0.123E4) = 0.12299988E4 +- (~0.123E~2, 0.123E4) = ~0.12300012E4 +/ (~0.123E~2, 0.123E4) = ~0.1E~5 +nextAfter (~0.123E~2, 0.123E4) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E4) = ~0.123E~2 +* (~0.123E~2, 0.123E2) = ~0.15129001E~1 ++ (~0.123E~2, 0.123E2) = 0.1229877E2 +- (~0.123E~2, 0.123E2) = ~0.1230123E2 +/ (~0.123E~2, 0.123E2) = ~0.100000005E~3 +nextAfter (~0.123E~2, 0.123E2) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E2) = ~0.123E~2 +* (~0.123E~2, 0.31415927E1) = ~0.38641593E~2 ++ (~0.123E~2, 0.31415927E1) = 0.31403627E1 +- (~0.123E~2, 0.31415927E1) = ~0.31428227E1 +/ (~0.123E~2, 0.31415927E1) = ~0.39152117E~3 +nextAfter (~0.123E~2, 0.31415927E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.31415927E1) = ~0.123E~2 +* (~0.123E~2, 0.27182817E1) = ~0.33434867E~2 ++ (~0.123E~2, 0.27182817E1) = 0.27170517E1 +- (~0.123E~2, 0.27182817E1) = ~0.27195117E1 +/ (~0.123E~2, 0.27182817E1) = ~0.45249175E~3 +nextAfter (~0.123E~2, 0.27182817E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.27182817E1) = ~0.123E~2 +* (~0.123E~2, 0.123E1) = ~0.15129001E~2 ++ (~0.123E~2, 0.123E1) = 0.122877E1 +- (~0.123E~2, 0.123E1) = ~0.123123E1 +/ (~0.123E~2, 0.123E1) = ~0.1E~2 +nextAfter (~0.123E~2, 0.123E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E1) = ~0.123E~2 +* (~0.123E~2, 0.123) = ~0.15129E~3 ++ (~0.123E~2, 0.123) = 0.12177 +- (~0.123E~2, 0.123) = ~0.124230005 +/ (~0.123E~2, 0.123) = ~0.1E~1 +nextAfter (~0.123E~2, 0.123) = ~0.12299999E~2 +rem (~0.123E~2, 0.123) = ~0.123E~2 +* (~0.123E~2, 0.123E~2) = ~0.15129001E~5 ++ (~0.123E~2, 0.123E~2) = 0.0 +- (~0.123E~2, 0.123E~2) = ~0.246E~2 +/ (~0.123E~2, 0.123E~2) = ~0.1E1 +nextAfter (~0.123E~2, 0.123E~2) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E~2) = 0.0 +* (~0.123E~2, 0.11754944E~37) = ~0.14459E~40 ++ (~0.123E~2, 0.11754944E~37) = ~0.123E~2 +- (~0.123E~2, 0.11754944E~37) = ~0.123E~2 +/ (~0.123E~2, 0.11754944E~37) = ~0.10463683E36 +nextAfter (~0.123E~2, 0.11754944E~37) = ~0.12299999E~2 +rem (~0.123E~2, 0.11754944E~37) = 0.0 +* (~0.123E~2, 0.5877472E~38) = ~0.7229E~41 ++ (~0.123E~2, 0.5877472E~38) = ~0.123E~2 +- (~0.123E~2, 0.5877472E~38) = ~0.123E~2 +/ (~0.123E~2, 0.5877472E~38) = ~0.20927366E36 +nextAfter (~0.123E~2, 0.5877472E~38) = ~0.12299999E~2 +rem (~0.123E~2, 0.5877472E~38) = 0.0 +* (~0.123E~2, 0.1E~44) = ~0.0 ++ (~0.123E~2, 0.1E~44) = ~0.123E~2 +- (~0.123E~2, 0.1E~44) = ~0.123E~2 +/ (~0.123E~2, 0.1E~44) = ~inf +nextAfter (~0.123E~2, 0.1E~44) = ~0.12299999E~2 +rem (~0.123E~2, 0.1E~44) = inf +* (~0.123E~2, 0.0) = ~0.0 ++ (~0.123E~2, 0.0) = ~0.123E~2 +- (~0.123E~2, 0.0) = ~0.123E~2 +/ (~0.123E~2, 0.0) = ~inf +nextAfter (~0.123E~2, 0.0) = ~0.12299999E~2 +rem (~0.123E~2, 0.0) = nan +* (~0.123E~2, ~0.34028235E39) = 0.4185473E36 ++ (~0.123E~2, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E~2, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E~2, ~0.34028235E39) = 0.3614E~41 +nextAfter (~0.123E~2, ~0.34028235E39) = ~0.12300002E~2 +rem (~0.123E~2, ~0.34028235E39) = ~0.123E~2 +* (~0.123E~2, ~0.17014117E39) = 0.20927364E36 ++ (~0.123E~2, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E~2, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E~2, ~0.17014117E39) = 0.7229E~41 +nextAfter (~0.123E~2, ~0.17014117E39) = ~0.12300002E~2 +rem (~0.123E~2, ~0.17014117E39) = ~0.123E~2 +* (~0.123E~2, ~0.123E4) = 0.15129001E1 ++ (~0.123E~2, ~0.123E4) = ~0.12300012E4 +- (~0.123E~2, ~0.123E4) = 0.12299988E4 +/ (~0.123E~2, ~0.123E4) = 0.1E~5 +nextAfter (~0.123E~2, ~0.123E4) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E4) = ~0.123E~2 +* (~0.123E~2, ~0.123E2) = 0.15129001E~1 ++ (~0.123E~2, ~0.123E2) = ~0.1230123E2 +- (~0.123E~2, ~0.123E2) = 0.1229877E2 +/ (~0.123E~2, ~0.123E2) = 0.100000005E~3 +nextAfter (~0.123E~2, ~0.123E2) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E2) = ~0.123E~2 +* (~0.123E~2, ~0.31415927E1) = 0.38641593E~2 ++ (~0.123E~2, ~0.31415927E1) = ~0.31428227E1 +- (~0.123E~2, ~0.31415927E1) = 0.31403627E1 +/ (~0.123E~2, ~0.31415927E1) = 0.39152117E~3 +nextAfter (~0.123E~2, ~0.31415927E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.31415927E1) = ~0.123E~2 +* (~0.123E~2, ~0.27182817E1) = 0.33434867E~2 ++ (~0.123E~2, ~0.27182817E1) = ~0.27195117E1 +- (~0.123E~2, ~0.27182817E1) = 0.27170517E1 +/ (~0.123E~2, ~0.27182817E1) = 0.45249175E~3 +nextAfter (~0.123E~2, ~0.27182817E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.27182817E1) = ~0.123E~2 +* (~0.123E~2, ~0.123E1) = 0.15129001E~2 ++ (~0.123E~2, ~0.123E1) = ~0.123123E1 +- (~0.123E~2, ~0.123E1) = 0.122877E1 +/ (~0.123E~2, ~0.123E1) = 0.1E~2 +nextAfter (~0.123E~2, ~0.123E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E1) = ~0.123E~2 +* (~0.123E~2, ~0.123) = 0.15129E~3 ++ (~0.123E~2, ~0.123) = ~0.124230005 +- (~0.123E~2, ~0.123) = 0.12177 +/ (~0.123E~2, ~0.123) = 0.1E~1 +nextAfter (~0.123E~2, ~0.123) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123) = ~0.123E~2 +* (~0.123E~2, ~0.123E~2) = 0.15129001E~5 ++ (~0.123E~2, ~0.123E~2) = ~0.246E~2 +- (~0.123E~2, ~0.123E~2) = 0.0 +/ (~0.123E~2, ~0.123E~2) = 0.1E1 +nextAfter (~0.123E~2, ~0.123E~2) = ~0.123E~2 +rem (~0.123E~2, ~0.123E~2) = 0.0 +* (~0.123E~2, ~0.11754944E~37) = 0.14459E~40 ++ (~0.123E~2, ~0.11754944E~37) = ~0.123E~2 +- (~0.123E~2, ~0.11754944E~37) = ~0.123E~2 +/ (~0.123E~2, ~0.11754944E~37) = 0.10463683E36 +nextAfter (~0.123E~2, ~0.11754944E~37) = ~0.12299999E~2 +rem (~0.123E~2, ~0.11754944E~37) = 0.0 +* (~0.123E~2, ~0.5877472E~38) = 0.7229E~41 ++ (~0.123E~2, ~0.5877472E~38) = ~0.123E~2 +- (~0.123E~2, ~0.5877472E~38) = ~0.123E~2 +/ (~0.123E~2, ~0.5877472E~38) = 0.20927366E36 +nextAfter (~0.123E~2, ~0.5877472E~38) = ~0.12299999E~2 +rem (~0.123E~2, ~0.5877472E~38) = 0.0 +* (~0.123E~2, ~0.1E~44) = 0.0 ++ (~0.123E~2, ~0.1E~44) = ~0.123E~2 +- (~0.123E~2, ~0.1E~44) = ~0.123E~2 +/ (~0.123E~2, ~0.1E~44) = inf +nextAfter (~0.123E~2, ~0.1E~44) = ~0.12299999E~2 +rem (~0.123E~2, ~0.1E~44) = inf +* (~0.123E~2, ~0.0) = 0.0 ++ (~0.123E~2, ~0.0) = ~0.123E~2 +- (~0.123E~2, ~0.0) = ~0.123E~2 +/ (~0.123E~2, ~0.0) = inf +nextAfter (~0.123E~2, ~0.0) = ~0.12299999E~2 +rem (~0.123E~2, ~0.0) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.123E~2, ~inf) = inf ++ (~0.123E~2, ~inf) = ~inf +- (~0.123E~2, ~inf) = inf +/ (~0.123E~2, ~inf) = 0.0 +nextAfter (~0.123E~2, ~inf) = ~0.12300002E~2 +rem (~0.123E~2, ~inf) = ~0.123E~2 +* (~0.123E~2, nan) = nan ++ (~0.123E~2, nan) = nan +- (~0.123E~2, nan) = nan +/ (~0.123E~2, nan) = nan +nextAfter (~0.123E~2, nan) = nan +rem (~0.123E~2, nan) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.11754944E~37, 0.34028235E39) = ~0.39999998E1 ++ (~0.11754944E~37, 0.34028235E39) = 0.34028235E39 +- (~0.11754944E~37, 0.34028235E39) = ~0.34028235E39 +/ (~0.11754944E~37, 0.34028235E39) = ~0.0 +nextAfter (~0.11754944E~37, 0.34028235E39) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.34028235E39) = ~0.11754944E~37 +* (~0.11754944E~37, 0.17014117E39) = ~0.19999999E1 ++ (~0.11754944E~37, 0.17014117E39) = 0.17014117E39 +- (~0.11754944E~37, 0.17014117E39) = ~0.17014117E39 +/ (~0.11754944E~37, 0.17014117E39) = ~0.0 +nextAfter (~0.11754944E~37, 0.17014117E39) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.17014117E39) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E4) = ~0.1445858E~34 ++ (~0.11754944E~37, 0.123E4) = 0.123E4 +- (~0.11754944E~37, 0.123E4) = ~0.123E4 +/ (~0.11754944E~37, 0.123E4) = ~0.9557E~41 +nextAfter (~0.11754944E~37, 0.123E4) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E4) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E2) = ~0.14458581E~36 ++ (~0.11754944E~37, 0.123E2) = 0.123E2 +- (~0.11754944E~37, 0.123E2) = ~0.123E2 +/ (~0.11754944E~37, 0.123E2) = ~0.955687E~39 +nextAfter (~0.11754944E~37, 0.123E2) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E2) = ~0.11754944E~37 +* (~0.11754944E~37, 0.31415927E1) = ~0.36929245E~37 ++ (~0.11754944E~37, 0.31415927E1) = 0.31415927E1 +- (~0.11754944E~37, 0.31415927E1) = ~0.31415927E1 +/ (~0.11754944E~37, 0.31415927E1) = ~0.3741715E~38 +nextAfter (~0.11754944E~37, 0.31415927E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.31415927E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.27182817E1) = ~0.31953248E~37 ++ (~0.11754944E~37, 0.27182817E1) = 0.27182817E1 +- (~0.11754944E~37, 0.27182817E1) = ~0.27182817E1 +/ (~0.11754944E~37, 0.27182817E1) = ~0.4324403E~38 +nextAfter (~0.11754944E~37, 0.27182817E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.27182817E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E1) = ~0.14458581E~37 ++ (~0.11754944E~37, 0.123E1) = 0.123E1 +- (~0.11754944E~37, 0.123E1) = ~0.123E1 +/ (~0.11754944E~37, 0.123E1) = ~0.9556864E~38 +nextAfter (~0.11754944E~37, 0.123E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123) = ~0.1445858E~38 ++ (~0.11754944E~37, 0.123) = 0.123 +- (~0.11754944E~37, 0.123) = ~0.123 +/ (~0.11754944E~37, 0.123) = ~0.9556864E~37 +nextAfter (~0.11754944E~37, 0.123) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E~2) = ~0.14459E~40 ++ (~0.11754944E~37, 0.123E~2) = 0.123E~2 +- (~0.11754944E~37, 0.123E~2) = ~0.123E~2 +/ (~0.11754944E~37, 0.123E~2) = ~0.95568645E~35 +nextAfter (~0.11754944E~37, 0.123E~2) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E~2) = ~0.11754944E~37 +* (~0.11754944E~37, 0.11754944E~37) = ~0.0 ++ (~0.11754944E~37, 0.11754944E~37) = 0.0 +- (~0.11754944E~37, 0.11754944E~37) = ~0.23509887E~37 +/ (~0.11754944E~37, 0.11754944E~37) = ~0.1E1 +nextAfter (~0.11754944E~37, 0.11754944E~37) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.11754944E~37) = 0.0 +* (~0.11754944E~37, 0.5877472E~38) = ~0.0 ++ (~0.11754944E~37, 0.5877472E~38) = ~0.5877472E~38 +- (~0.11754944E~37, 0.5877472E~38) = ~0.17632415E~37 +/ (~0.11754944E~37, 0.5877472E~38) = ~0.2E1 +nextAfter (~0.11754944E~37, 0.5877472E~38) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.5877472E~38) = 0.0 +* (~0.11754944E~37, 0.1E~44) = ~0.0 ++ (~0.11754944E~37, 0.1E~44) = ~0.11754942E~37 +- (~0.11754944E~37, 0.1E~44) = ~0.11754945E~37 +/ (~0.11754944E~37, 0.1E~44) = ~0.8388608E7 +nextAfter (~0.11754944E~37, 0.1E~44) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.1E~44) = 0.0 +* (~0.11754944E~37, 0.0) = ~0.0 ++ (~0.11754944E~37, 0.0) = ~0.11754944E~37 +- (~0.11754944E~37, 0.0) = ~0.11754944E~37 +/ (~0.11754944E~37, 0.0) = ~inf +nextAfter (~0.11754944E~37, 0.0) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.0) = nan +* (~0.11754944E~37, ~0.34028235E39) = 0.39999998E1 ++ (~0.11754944E~37, ~0.34028235E39) = ~0.34028235E39 +- (~0.11754944E~37, ~0.34028235E39) = 0.34028235E39 +/ (~0.11754944E~37, ~0.34028235E39) = 0.0 +nextAfter (~0.11754944E~37, ~0.34028235E39) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.34028235E39) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.17014117E39) = 0.19999999E1 ++ (~0.11754944E~37, ~0.17014117E39) = ~0.17014117E39 +- (~0.11754944E~37, ~0.17014117E39) = 0.17014117E39 +/ (~0.11754944E~37, ~0.17014117E39) = 0.0 +nextAfter (~0.11754944E~37, ~0.17014117E39) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.17014117E39) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E4) = 0.1445858E~34 ++ (~0.11754944E~37, ~0.123E4) = ~0.123E4 +- (~0.11754944E~37, ~0.123E4) = 0.123E4 +/ (~0.11754944E~37, ~0.123E4) = 0.9557E~41 +nextAfter (~0.11754944E~37, ~0.123E4) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E4) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E2) = 0.14458581E~36 ++ (~0.11754944E~37, ~0.123E2) = ~0.123E2 +- (~0.11754944E~37, ~0.123E2) = 0.123E2 +/ (~0.11754944E~37, ~0.123E2) = 0.955687E~39 +nextAfter (~0.11754944E~37, ~0.123E2) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E2) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.31415927E1) = 0.36929245E~37 ++ (~0.11754944E~37, ~0.31415927E1) = ~0.31415927E1 +- (~0.11754944E~37, ~0.31415927E1) = 0.31415927E1 +/ (~0.11754944E~37, ~0.31415927E1) = 0.3741715E~38 +nextAfter (~0.11754944E~37, ~0.31415927E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.31415927E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.27182817E1) = 0.31953248E~37 ++ (~0.11754944E~37, ~0.27182817E1) = ~0.27182817E1 +- (~0.11754944E~37, ~0.27182817E1) = 0.27182817E1 +/ (~0.11754944E~37, ~0.27182817E1) = 0.4324403E~38 +nextAfter (~0.11754944E~37, ~0.27182817E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.27182817E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E1) = 0.14458581E~37 ++ (~0.11754944E~37, ~0.123E1) = ~0.123E1 +- (~0.11754944E~37, ~0.123E1) = 0.123E1 +/ (~0.11754944E~37, ~0.123E1) = 0.9556864E~38 +nextAfter (~0.11754944E~37, ~0.123E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123) = 0.1445858E~38 ++ (~0.11754944E~37, ~0.123) = ~0.123 +- (~0.11754944E~37, ~0.123) = 0.123 +/ (~0.11754944E~37, ~0.123) = 0.9556864E~37 +nextAfter (~0.11754944E~37, ~0.123) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E~2) = 0.14459E~40 ++ (~0.11754944E~37, ~0.123E~2) = ~0.123E~2 +- (~0.11754944E~37, ~0.123E~2) = 0.123E~2 +/ (~0.11754944E~37, ~0.123E~2) = 0.95568645E~35 +nextAfter (~0.11754944E~37, ~0.123E~2) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E~2) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.11754944E~37) = 0.0 ++ (~0.11754944E~37, ~0.11754944E~37) = ~0.23509887E~37 +- (~0.11754944E~37, ~0.11754944E~37) = 0.0 +/ (~0.11754944E~37, ~0.11754944E~37) = 0.1E1 +nextAfter (~0.11754944E~37, ~0.11754944E~37) = ~0.11754944E~37 +rem (~0.11754944E~37, ~0.11754944E~37) = 0.0 +* (~0.11754944E~37, ~0.5877472E~38) = 0.0 ++ (~0.11754944E~37, ~0.5877472E~38) = ~0.17632415E~37 +- (~0.11754944E~37, ~0.5877472E~38) = ~0.5877472E~38 +/ (~0.11754944E~37, ~0.5877472E~38) = 0.2E1 +nextAfter (~0.11754944E~37, ~0.5877472E~38) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.5877472E~38) = 0.0 +* (~0.11754944E~37, ~0.1E~44) = 0.0 ++ (~0.11754944E~37, ~0.1E~44) = ~0.11754945E~37 +- (~0.11754944E~37, ~0.1E~44) = ~0.11754942E~37 +/ (~0.11754944E~37, ~0.1E~44) = 0.8388608E7 +nextAfter (~0.11754944E~37, ~0.1E~44) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.1E~44) = 0.0 +* (~0.11754944E~37, ~0.0) = 0.0 ++ (~0.11754944E~37, ~0.0) = ~0.11754944E~37 +- (~0.11754944E~37, ~0.0) = ~0.11754944E~37 +/ (~0.11754944E~37, ~0.0) = inf +nextAfter (~0.11754944E~37, ~0.0) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.0) = nan +* (~0.11754944E~37, inf) = ~inf ++ (~0.11754944E~37, inf) = inf +- (~0.11754944E~37, inf) = ~inf +/ (~0.11754944E~37, inf) = ~0.0 +nextAfter (~0.11754944E~37, inf) = ~0.11754942E~37 +rem (~0.11754944E~37, inf) = ~0.11754944E~37 +* (~0.11754944E~37, ~inf) = inf ++ (~0.11754944E~37, ~inf) = ~inf +- (~0.11754944E~37, ~inf) = inf +/ (~0.11754944E~37, ~inf) = 0.0 +nextAfter (~0.11754944E~37, ~inf) = ~0.11754945E~37 +rem (~0.11754944E~37, ~inf) = ~0.11754944E~37 +* (~0.11754944E~37, nan) = nan ++ (~0.11754944E~37, nan) = nan +- (~0.11754944E~37, nan) = nan +/ (~0.11754944E~37, nan) = nan +nextAfter (~0.11754944E~37, nan) = nan +rem (~0.11754944E~37, nan) = nan +* (~0.11754944E~37, inf) = ~inf ++ (~0.11754944E~37, inf) = inf +- (~0.11754944E~37, inf) = ~inf +/ (~0.11754944E~37, inf) = ~0.0 +nextAfter (~0.11754944E~37, inf) = ~0.11754942E~37 +rem (~0.11754944E~37, inf) = ~0.11754944E~37 +* (~0.5877472E~38, 0.34028235E39) = ~0.19999999E1 ++ (~0.5877472E~38, 0.34028235E39) = 0.34028235E39 +- (~0.5877472E~38, 0.34028235E39) = ~0.34028235E39 +/ (~0.5877472E~38, 0.34028235E39) = ~0.0 +nextAfter (~0.5877472E~38, 0.34028235E39) = ~0.587747E~38 +rem (~0.5877472E~38, 0.34028235E39) = ~0.5877472E~38 +* (~0.5877472E~38, 0.17014117E39) = ~0.99999994 ++ (~0.5877472E~38, 0.17014117E39) = 0.17014117E39 +- (~0.5877472E~38, 0.17014117E39) = ~0.17014117E39 +/ (~0.5877472E~38, 0.17014117E39) = ~0.0 +nextAfter (~0.5877472E~38, 0.17014117E39) = ~0.587747E~38 +rem (~0.5877472E~38, 0.17014117E39) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E4) = ~0.722929E~35 ++ (~0.5877472E~38, 0.123E4) = 0.123E4 +- (~0.5877472E~38, 0.123E4) = ~0.123E4 +/ (~0.5877472E~38, 0.123E4) = ~0.4778E~41 +nextAfter (~0.5877472E~38, 0.123E4) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E4) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E2) = ~0.72292904E~37 ++ (~0.5877472E~38, 0.123E2) = 0.123E2 +- (~0.5877472E~38, 0.123E2) = ~0.123E2 +/ (~0.5877472E~38, 0.123E2) = ~0.477843E~39 +nextAfter (~0.5877472E~38, 0.123E2) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E2) = ~0.5877472E~38 +* (~0.5877472E~38, 0.31415927E1) = ~0.18464623E~37 ++ (~0.5877472E~38, 0.31415927E1) = 0.31415927E1 +- (~0.5877472E~38, 0.31415927E1) = ~0.31415927E1 +/ (~0.5877472E~38, 0.31415927E1) = ~0.1870857E~38 +nextAfter (~0.5877472E~38, 0.31415927E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.31415927E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.27182817E1) = ~0.15976624E~37 ++ (~0.5877472E~38, 0.27182817E1) = 0.27182817E1 +- (~0.5877472E~38, 0.27182817E1) = ~0.27182817E1 +/ (~0.5877472E~38, 0.27182817E1) = ~0.2162201E~38 +nextAfter (~0.5877472E~38, 0.27182817E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.27182817E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E1) = ~0.722929E~38 ++ (~0.5877472E~38, 0.123E1) = 0.123E1 +- (~0.5877472E~38, 0.123E1) = ~0.123E1 +/ (~0.5877472E~38, 0.123E1) = ~0.4778432E~38 +nextAfter (~0.5877472E~38, 0.123E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123) = ~0.722928E~39 ++ (~0.5877472E~38, 0.123) = 0.123 +- (~0.5877472E~38, 0.123) = ~0.123 +/ (~0.5877472E~38, 0.123) = ~0.4778432E~37 +nextAfter (~0.5877472E~38, 0.123) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E~2) = ~0.7229E~41 ++ (~0.5877472E~38, 0.123E~2) = 0.123E~2 +- (~0.5877472E~38, 0.123E~2) = ~0.123E~2 +/ (~0.5877472E~38, 0.123E~2) = ~0.47784322E~35 +nextAfter (~0.5877472E~38, 0.123E~2) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E~2) = ~0.5877472E~38 +* (~0.5877472E~38, 0.11754944E~37) = ~0.0 ++ (~0.5877472E~38, 0.11754944E~37) = 0.5877472E~38 +- (~0.5877472E~38, 0.11754944E~37) = ~0.17632415E~37 +/ (~0.5877472E~38, 0.11754944E~37) = ~0.5 +nextAfter (~0.5877472E~38, 0.11754944E~37) = ~0.587747E~38 +rem (~0.5877472E~38, 0.11754944E~37) = ~0.5877472E~38 +* (~0.5877472E~38, 0.5877472E~38) = ~0.0 ++ (~0.5877472E~38, 0.5877472E~38) = 0.0 +- (~0.5877472E~38, 0.5877472E~38) = ~0.11754944E~37 +/ (~0.5877472E~38, 0.5877472E~38) = ~0.1E1 +nextAfter (~0.5877472E~38, 0.5877472E~38) = ~0.587747E~38 +rem (~0.5877472E~38, 0.5877472E~38) = 0.0 +* (~0.5877472E~38, 0.1E~44) = ~0.0 ++ (~0.5877472E~38, 0.1E~44) = ~0.587747E~38 +- (~0.5877472E~38, 0.1E~44) = ~0.5877473E~38 +/ (~0.5877472E~38, 0.1E~44) = ~0.4194304E7 +nextAfter (~0.5877472E~38, 0.1E~44) = ~0.587747E~38 +rem (~0.5877472E~38, 0.1E~44) = 0.0 +* (~0.5877472E~38, 0.0) = ~0.0 ++ (~0.5877472E~38, 0.0) = ~0.5877472E~38 +- (~0.5877472E~38, 0.0) = ~0.5877472E~38 +/ (~0.5877472E~38, 0.0) = ~inf +nextAfter (~0.5877472E~38, 0.0) = ~0.587747E~38 +rem (~0.5877472E~38, 0.0) = nan +* (~0.5877472E~38, ~0.34028235E39) = 0.19999999E1 ++ (~0.5877472E~38, ~0.34028235E39) = ~0.34028235E39 +- (~0.5877472E~38, ~0.34028235E39) = 0.34028235E39 +/ (~0.5877472E~38, ~0.34028235E39) = 0.0 +nextAfter (~0.5877472E~38, ~0.34028235E39) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.34028235E39) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.17014117E39) = 0.99999994 ++ (~0.5877472E~38, ~0.17014117E39) = ~0.17014117E39 +- (~0.5877472E~38, ~0.17014117E39) = 0.17014117E39 +/ (~0.5877472E~38, ~0.17014117E39) = 0.0 +nextAfter (~0.5877472E~38, ~0.17014117E39) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.17014117E39) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E4) = 0.722929E~35 ++ (~0.5877472E~38, ~0.123E4) = ~0.123E4 +- (~0.5877472E~38, ~0.123E4) = 0.123E4 +/ (~0.5877472E~38, ~0.123E4) = 0.4778E~41 +nextAfter (~0.5877472E~38, ~0.123E4) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E4) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E2) = 0.72292904E~37 ++ (~0.5877472E~38, ~0.123E2) = ~0.123E2 +- (~0.5877472E~38, ~0.123E2) = 0.123E2 +/ (~0.5877472E~38, ~0.123E2) = 0.477843E~39 +nextAfter (~0.5877472E~38, ~0.123E2) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E2) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.31415927E1) = 0.18464623E~37 ++ (~0.5877472E~38, ~0.31415927E1) = ~0.31415927E1 +- (~0.5877472E~38, ~0.31415927E1) = 0.31415927E1 +/ (~0.5877472E~38, ~0.31415927E1) = 0.1870857E~38 +nextAfter (~0.5877472E~38, ~0.31415927E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.31415927E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.27182817E1) = 0.15976624E~37 ++ (~0.5877472E~38, ~0.27182817E1) = ~0.27182817E1 +- (~0.5877472E~38, ~0.27182817E1) = 0.27182817E1 +/ (~0.5877472E~38, ~0.27182817E1) = 0.2162201E~38 +nextAfter (~0.5877472E~38, ~0.27182817E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.27182817E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E1) = 0.722929E~38 ++ (~0.5877472E~38, ~0.123E1) = ~0.123E1 +- (~0.5877472E~38, ~0.123E1) = 0.123E1 +/ (~0.5877472E~38, ~0.123E1) = 0.4778432E~38 +nextAfter (~0.5877472E~38, ~0.123E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123) = 0.722928E~39 ++ (~0.5877472E~38, ~0.123) = ~0.123 +- (~0.5877472E~38, ~0.123) = 0.123 +/ (~0.5877472E~38, ~0.123) = 0.4778432E~37 +nextAfter (~0.5877472E~38, ~0.123) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E~2) = 0.7229E~41 ++ (~0.5877472E~38, ~0.123E~2) = ~0.123E~2 +- (~0.5877472E~38, ~0.123E~2) = 0.123E~2 +/ (~0.5877472E~38, ~0.123E~2) = 0.47784322E~35 +nextAfter (~0.5877472E~38, ~0.123E~2) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E~2) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.11754944E~37) = 0.0 ++ (~0.5877472E~38, ~0.11754944E~37) = ~0.17632415E~37 +- (~0.5877472E~38, ~0.11754944E~37) = 0.5877472E~38 +/ (~0.5877472E~38, ~0.11754944E~37) = 0.5 +nextAfter (~0.5877472E~38, ~0.11754944E~37) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.11754944E~37) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.5877472E~38) = 0.0 ++ (~0.5877472E~38, ~0.5877472E~38) = ~0.11754944E~37 +- (~0.5877472E~38, ~0.5877472E~38) = 0.0 +/ (~0.5877472E~38, ~0.5877472E~38) = 0.1E1 +nextAfter (~0.5877472E~38, ~0.5877472E~38) = ~0.5877472E~38 +rem (~0.5877472E~38, ~0.5877472E~38) = 0.0 +* (~0.5877472E~38, ~0.1E~44) = 0.0 ++ (~0.5877472E~38, ~0.1E~44) = ~0.5877473E~38 +- (~0.5877472E~38, ~0.1E~44) = ~0.587747E~38 +/ (~0.5877472E~38, ~0.1E~44) = 0.4194304E7 +nextAfter (~0.5877472E~38, ~0.1E~44) = ~0.587747E~38 +rem (~0.5877472E~38, ~0.1E~44) = 0.0 +* (~0.5877472E~38, ~0.0) = 0.0 ++ (~0.5877472E~38, ~0.0) = ~0.5877472E~38 +- (~0.5877472E~38, ~0.0) = ~0.5877472E~38 +/ (~0.5877472E~38, ~0.0) = inf +nextAfter (~0.5877472E~38, ~0.0) = ~0.587747E~38 +rem (~0.5877472E~38, ~0.0) = nan +* (~0.5877472E~38, inf) = ~inf ++ (~0.5877472E~38, inf) = inf +- (~0.5877472E~38, inf) = ~inf +/ (~0.5877472E~38, inf) = ~0.0 +nextAfter (~0.5877472E~38, inf) = ~0.587747E~38 +rem (~0.5877472E~38, inf) = ~0.5877472E~38 +* (~0.5877472E~38, ~inf) = inf ++ (~0.5877472E~38, ~inf) = ~inf +- (~0.5877472E~38, ~inf) = inf +/ (~0.5877472E~38, ~inf) = 0.0 +nextAfter (~0.5877472E~38, ~inf) = ~0.5877473E~38 +rem (~0.5877472E~38, ~inf) = ~0.5877472E~38 +* (~0.5877472E~38, nan) = nan ++ (~0.5877472E~38, nan) = nan +- (~0.5877472E~38, nan) = nan +/ (~0.5877472E~38, nan) = nan +nextAfter (~0.5877472E~38, nan) = nan +rem (~0.5877472E~38, nan) = nan +* (~0.5877472E~38, inf) = ~inf ++ (~0.5877472E~38, inf) = inf +- (~0.5877472E~38, inf) = ~inf +/ (~0.5877472E~38, inf) = ~0.0 +nextAfter (~0.5877472E~38, inf) = ~0.587747E~38 +rem (~0.5877472E~38, inf) = ~0.5877472E~38 +* (~0.1E~44, 0.34028235E39) = ~0.47683713E~6 ++ (~0.1E~44, 0.34028235E39) = 0.34028235E39 +- (~0.1E~44, 0.34028235E39) = ~0.34028235E39 +/ (~0.1E~44, 0.34028235E39) = ~0.0 +nextAfter (~0.1E~44, 0.34028235E39) = ~0.0 +rem (~0.1E~44, 0.34028235E39) = ~0.1E~44 +* (~0.1E~44, 0.17014117E39) = ~0.23841856E~6 ++ (~0.1E~44, 0.17014117E39) = 0.17014117E39 +- (~0.1E~44, 0.17014117E39) = ~0.17014117E39 +/ (~0.1E~44, 0.17014117E39) = ~0.0 +nextAfter (~0.1E~44, 0.17014117E39) = ~0.0 +rem (~0.1E~44, 0.17014117E39) = ~0.1E~44 +* (~0.1E~44, 0.123E4) = ~0.1724E~41 ++ (~0.1E~44, 0.123E4) = 0.123E4 +- (~0.1E~44, 0.123E4) = ~0.123E4 +/ (~0.1E~44, 0.123E4) = ~0.0 +nextAfter (~0.1E~44, 0.123E4) = ~0.0 +rem (~0.1E~44, 0.123E4) = ~0.1E~44 +* (~0.1E~44, 0.123E2) = ~0.17E~43 ++ (~0.1E~44, 0.123E2) = 0.123E2 +- (~0.1E~44, 0.123E2) = ~0.123E2 +/ (~0.1E~44, 0.123E2) = ~0.0 +nextAfter (~0.1E~44, 0.123E2) = ~0.0 +rem (~0.1E~44, 0.123E2) = ~0.1E~44 +* (~0.1E~44, 0.31415927E1) = ~0.4E~44 ++ (~0.1E~44, 0.31415927E1) = 0.31415927E1 +- (~0.1E~44, 0.31415927E1) = ~0.31415927E1 +/ (~0.1E~44, 0.31415927E1) = ~0.0 +nextAfter (~0.1E~44, 0.31415927E1) = ~0.0 +rem (~0.1E~44, 0.31415927E1) = ~0.1E~44 +* (~0.1E~44, 0.27182817E1) = ~0.4E~44 ++ (~0.1E~44, 0.27182817E1) = 0.27182817E1 +- (~0.1E~44, 0.27182817E1) = ~0.27182817E1 +/ (~0.1E~44, 0.27182817E1) = ~0.0 +nextAfter (~0.1E~44, 0.27182817E1) = ~0.0 +rem (~0.1E~44, 0.27182817E1) = ~0.1E~44 +* (~0.1E~44, 0.123E1) = ~0.1E~44 ++ (~0.1E~44, 0.123E1) = 0.123E1 +- (~0.1E~44, 0.123E1) = ~0.123E1 +/ (~0.1E~44, 0.123E1) = ~0.1E~44 +nextAfter (~0.1E~44, 0.123E1) = ~0.0 +rem (~0.1E~44, 0.123E1) = ~0.1E~44 +* (~0.1E~44, 0.123) = ~0.0 ++ (~0.1E~44, 0.123) = 0.123 +- (~0.1E~44, 0.123) = ~0.123 +/ (~0.1E~44, 0.123) = ~0.11E~43 +nextAfter (~0.1E~44, 0.123) = ~0.0 +rem (~0.1E~44, 0.123) = ~0.1E~44 +* (~0.1E~44, 0.123E~2) = ~0.0 ++ (~0.1E~44, 0.123E~2) = 0.123E~2 +- (~0.1E~44, 0.123E~2) = ~0.123E~2 +/ (~0.1E~44, 0.123E~2) = ~0.1139E~41 +nextAfter (~0.1E~44, 0.123E~2) = ~0.0 +rem (~0.1E~44, 0.123E~2) = ~0.1E~44 +* (~0.1E~44, 0.11754944E~37) = ~0.0 ++ (~0.1E~44, 0.11754944E~37) = 0.11754942E~37 +- (~0.1E~44, 0.11754944E~37) = ~0.11754945E~37 +/ (~0.1E~44, 0.11754944E~37) = ~0.11920929E~6 +nextAfter (~0.1E~44, 0.11754944E~37) = ~0.0 +rem (~0.1E~44, 0.11754944E~37) = ~0.1E~44 +* (~0.1E~44, 0.5877472E~38) = ~0.0 ++ (~0.1E~44, 0.5877472E~38) = 0.587747E~38 +- (~0.1E~44, 0.5877472E~38) = ~0.5877473E~38 +/ (~0.1E~44, 0.5877472E~38) = ~0.23841858E~6 +nextAfter (~0.1E~44, 0.5877472E~38) = ~0.0 +rem (~0.1E~44, 0.5877472E~38) = ~0.1E~44 +* (~0.1E~44, 0.1E~44) = ~0.0 ++ (~0.1E~44, 0.1E~44) = 0.0 +- (~0.1E~44, 0.1E~44) = ~0.3E~44 +/ (~0.1E~44, 0.1E~44) = ~0.1E1 +nextAfter (~0.1E~44, 0.1E~44) = ~0.0 +rem (~0.1E~44, 0.1E~44) = 0.0 +* (~0.1E~44, 0.0) = ~0.0 ++ (~0.1E~44, 0.0) = ~0.1E~44 +- (~0.1E~44, 0.0) = ~0.1E~44 +/ (~0.1E~44, 0.0) = ~inf +nextAfter (~0.1E~44, 0.0) = ~0.0 +rem (~0.1E~44, 0.0) = nan +* (~0.1E~44, ~0.34028235E39) = 0.47683713E~6 ++ (~0.1E~44, ~0.34028235E39) = ~0.34028235E39 +- (~0.1E~44, ~0.34028235E39) = 0.34028235E39 +/ (~0.1E~44, ~0.34028235E39) = 0.0 +nextAfter (~0.1E~44, ~0.34028235E39) = ~0.3E~44 +rem (~0.1E~44, ~0.34028235E39) = ~0.1E~44 +* (~0.1E~44, ~0.17014117E39) = 0.23841856E~6 ++ (~0.1E~44, ~0.17014117E39) = ~0.17014117E39 +- (~0.1E~44, ~0.17014117E39) = 0.17014117E39 +/ (~0.1E~44, ~0.17014117E39) = 0.0 +nextAfter (~0.1E~44, ~0.17014117E39) = ~0.3E~44 +rem (~0.1E~44, ~0.17014117E39) = ~0.1E~44 +* (~0.1E~44, ~0.123E4) = 0.1724E~41 ++ (~0.1E~44, ~0.123E4) = ~0.123E4 +- (~0.1E~44, ~0.123E4) = 0.123E4 +/ (~0.1E~44, ~0.123E4) = 0.0 +nextAfter (~0.1E~44, ~0.123E4) = ~0.3E~44 +rem (~0.1E~44, ~0.123E4) = ~0.1E~44 +* (~0.1E~44, ~0.123E2) = 0.17E~43 ++ (~0.1E~44, ~0.123E2) = ~0.123E2 +- (~0.1E~44, ~0.123E2) = 0.123E2 +/ (~0.1E~44, ~0.123E2) = 0.0 +nextAfter (~0.1E~44, ~0.123E2) = ~0.3E~44 +rem (~0.1E~44, ~0.123E2) = ~0.1E~44 +* (~0.1E~44, ~0.31415927E1) = 0.4E~44 ++ (~0.1E~44, ~0.31415927E1) = ~0.31415927E1 +- (~0.1E~44, ~0.31415927E1) = 0.31415927E1 +/ (~0.1E~44, ~0.31415927E1) = 0.0 +nextAfter (~0.1E~44, ~0.31415927E1) = ~0.3E~44 +rem (~0.1E~44, ~0.31415927E1) = ~0.1E~44 +* (~0.1E~44, ~0.27182817E1) = 0.4E~44 ++ (~0.1E~44, ~0.27182817E1) = ~0.27182817E1 +- (~0.1E~44, ~0.27182817E1) = 0.27182817E1 +/ (~0.1E~44, ~0.27182817E1) = 0.0 +nextAfter (~0.1E~44, ~0.27182817E1) = ~0.3E~44 +rem (~0.1E~44, ~0.27182817E1) = ~0.1E~44 +* (~0.1E~44, ~0.123E1) = 0.1E~44 ++ (~0.1E~44, ~0.123E1) = ~0.123E1 +- (~0.1E~44, ~0.123E1) = 0.123E1 +/ (~0.1E~44, ~0.123E1) = 0.1E~44 +nextAfter (~0.1E~44, ~0.123E1) = ~0.3E~44 +rem (~0.1E~44, ~0.123E1) = ~0.1E~44 +* (~0.1E~44, ~0.123) = 0.0 ++ (~0.1E~44, ~0.123) = ~0.123 +- (~0.1E~44, ~0.123) = 0.123 +/ (~0.1E~44, ~0.123) = 0.11E~43 +nextAfter (~0.1E~44, ~0.123) = ~0.3E~44 +rem (~0.1E~44, ~0.123) = ~0.1E~44 +* (~0.1E~44, ~0.123E~2) = 0.0 ++ (~0.1E~44, ~0.123E~2) = ~0.123E~2 +- (~0.1E~44, ~0.123E~2) = 0.123E~2 +/ (~0.1E~44, ~0.123E~2) = 0.1139E~41 +nextAfter (~0.1E~44, ~0.123E~2) = ~0.3E~44 +rem (~0.1E~44, ~0.123E~2) = ~0.1E~44 +* (~0.1E~44, ~0.11754944E~37) = 0.0 ++ (~0.1E~44, ~0.11754944E~37) = ~0.11754945E~37 +- (~0.1E~44, ~0.11754944E~37) = 0.11754942E~37 +/ (~0.1E~44, ~0.11754944E~37) = 0.11920929E~6 +nextAfter (~0.1E~44, ~0.11754944E~37) = ~0.3E~44 +rem (~0.1E~44, ~0.11754944E~37) = ~0.1E~44 +* (~0.1E~44, ~0.5877472E~38) = 0.0 ++ (~0.1E~44, ~0.5877472E~38) = ~0.5877473E~38 +- (~0.1E~44, ~0.5877472E~38) = 0.587747E~38 +/ (~0.1E~44, ~0.5877472E~38) = 0.23841858E~6 +nextAfter (~0.1E~44, ~0.5877472E~38) = ~0.3E~44 +rem (~0.1E~44, ~0.5877472E~38) = ~0.1E~44 +* (~0.1E~44, ~0.1E~44) = 0.0 ++ (~0.1E~44, ~0.1E~44) = ~0.3E~44 +- (~0.1E~44, ~0.1E~44) = 0.0 +/ (~0.1E~44, ~0.1E~44) = 0.1E1 +nextAfter (~0.1E~44, ~0.1E~44) = ~0.1E~44 +rem (~0.1E~44, ~0.1E~44) = 0.0 +* (~0.1E~44, ~0.0) = 0.0 ++ (~0.1E~44, ~0.0) = ~0.1E~44 +- (~0.1E~44, ~0.0) = ~0.1E~44 +/ (~0.1E~44, ~0.0) = inf +nextAfter (~0.1E~44, ~0.0) = ~0.0 +rem (~0.1E~44, ~0.0) = nan +* (~0.1E~44, inf) = ~inf ++ (~0.1E~44, inf) = inf +- (~0.1E~44, inf) = ~inf +/ (~0.1E~44, inf) = ~0.0 +nextAfter (~0.1E~44, inf) = ~0.0 +rem (~0.1E~44, inf) = ~0.1E~44 +* (~0.1E~44, ~inf) = inf ++ (~0.1E~44, ~inf) = ~inf +- (~0.1E~44, ~inf) = inf +/ (~0.1E~44, ~inf) = 0.0 +nextAfter (~0.1E~44, ~inf) = ~0.3E~44 +rem (~0.1E~44, ~inf) = ~0.1E~44 +* (~0.1E~44, nan) = nan ++ (~0.1E~44, nan) = nan +- (~0.1E~44, nan) = nan +/ (~0.1E~44, nan) = nan +nextAfter (~0.1E~44, nan) = nan +rem (~0.1E~44, nan) = nan +* (~0.1E~44, inf) = ~inf ++ (~0.1E~44, inf) = inf +- (~0.1E~44, inf) = ~inf +/ (~0.1E~44, inf) = ~0.0 +nextAfter (~0.1E~44, inf) = ~0.0 +rem (~0.1E~44, inf) = ~0.1E~44 +* (~0.0, 0.34028235E39) = ~0.0 ++ (~0.0, 0.34028235E39) = 0.34028235E39 +- (~0.0, 0.34028235E39) = ~0.34028235E39 +/ (~0.0, 0.34028235E39) = ~0.0 +nextAfter (~0.0, 0.34028235E39) = 0.1E~44 +rem (~0.0, 0.34028235E39) = 0.0 +* (~0.0, 0.17014117E39) = ~0.0 ++ (~0.0, 0.17014117E39) = 0.17014117E39 +- (~0.0, 0.17014117E39) = ~0.17014117E39 +/ (~0.0, 0.17014117E39) = ~0.0 +nextAfter (~0.0, 0.17014117E39) = 0.1E~44 +rem (~0.0, 0.17014117E39) = 0.0 +* (~0.0, 0.123E4) = ~0.0 ++ (~0.0, 0.123E4) = 0.123E4 +- (~0.0, 0.123E4) = ~0.123E4 +/ (~0.0, 0.123E4) = ~0.0 +nextAfter (~0.0, 0.123E4) = 0.1E~44 +rem (~0.0, 0.123E4) = 0.0 +* (~0.0, 0.123E2) = ~0.0 ++ (~0.0, 0.123E2) = 0.123E2 +- (~0.0, 0.123E2) = ~0.123E2 +/ (~0.0, 0.123E2) = ~0.0 +nextAfter (~0.0, 0.123E2) = 0.1E~44 +rem (~0.0, 0.123E2) = 0.0 +* (~0.0, 0.31415927E1) = ~0.0 ++ (~0.0, 0.31415927E1) = 0.31415927E1 +- (~0.0, 0.31415927E1) = ~0.31415927E1 +/ (~0.0, 0.31415927E1) = ~0.0 +nextAfter (~0.0, 0.31415927E1) = 0.1E~44 +rem (~0.0, 0.31415927E1) = 0.0 +* (~0.0, 0.27182817E1) = ~0.0 ++ (~0.0, 0.27182817E1) = 0.27182817E1 +- (~0.0, 0.27182817E1) = ~0.27182817E1 +/ (~0.0, 0.27182817E1) = ~0.0 +nextAfter (~0.0, 0.27182817E1) = 0.1E~44 +rem (~0.0, 0.27182817E1) = 0.0 +* (~0.0, 0.123E1) = ~0.0 ++ (~0.0, 0.123E1) = 0.123E1 +- (~0.0, 0.123E1) = ~0.123E1 +/ (~0.0, 0.123E1) = ~0.0 +nextAfter (~0.0, 0.123E1) = 0.1E~44 +rem (~0.0, 0.123E1) = 0.0 +* (~0.0, 0.123) = ~0.0 ++ (~0.0, 0.123) = 0.123 +- (~0.0, 0.123) = ~0.123 +/ (~0.0, 0.123) = ~0.0 +nextAfter (~0.0, 0.123) = 0.1E~44 +rem (~0.0, 0.123) = 0.0 +* (~0.0, 0.123E~2) = ~0.0 ++ (~0.0, 0.123E~2) = 0.123E~2 +- (~0.0, 0.123E~2) = ~0.123E~2 +/ (~0.0, 0.123E~2) = ~0.0 +nextAfter (~0.0, 0.123E~2) = 0.1E~44 +rem (~0.0, 0.123E~2) = 0.0 +* (~0.0, 0.11754944E~37) = ~0.0 ++ (~0.0, 0.11754944E~37) = 0.11754944E~37 +- (~0.0, 0.11754944E~37) = ~0.11754944E~37 +/ (~0.0, 0.11754944E~37) = ~0.0 +nextAfter (~0.0, 0.11754944E~37) = 0.1E~44 +rem (~0.0, 0.11754944E~37) = 0.0 +* (~0.0, 0.5877472E~38) = ~0.0 ++ (~0.0, 0.5877472E~38) = 0.5877472E~38 +- (~0.0, 0.5877472E~38) = ~0.5877472E~38 +/ (~0.0, 0.5877472E~38) = ~0.0 +nextAfter (~0.0, 0.5877472E~38) = 0.1E~44 +rem (~0.0, 0.5877472E~38) = 0.0 +* (~0.0, 0.1E~44) = ~0.0 ++ (~0.0, 0.1E~44) = 0.1E~44 +- (~0.0, 0.1E~44) = ~0.1E~44 +/ (~0.0, 0.1E~44) = ~0.0 +nextAfter (~0.0, 0.1E~44) = 0.1E~44 +rem (~0.0, 0.1E~44) = 0.0 +* (~0.0, 0.0) = ~0.0 ++ (~0.0, 0.0) = 0.0 +- (~0.0, 0.0) = ~0.0 +/ (~0.0, 0.0) = nan +nextAfter (~0.0, 0.0) = 0.0 +rem (~0.0, 0.0) = 0.0 +* (~0.0, ~0.34028235E39) = 0.0 ++ (~0.0, ~0.34028235E39) = ~0.34028235E39 +- (~0.0, ~0.34028235E39) = 0.34028235E39 +/ (~0.0, ~0.34028235E39) = 0.0 +nextAfter (~0.0, ~0.34028235E39) = ~0.1E~44 +rem (~0.0, ~0.34028235E39) = 0.0 +* (~0.0, ~0.17014117E39) = 0.0 ++ (~0.0, ~0.17014117E39) = ~0.17014117E39 +- (~0.0, ~0.17014117E39) = 0.17014117E39 +/ (~0.0, ~0.17014117E39) = 0.0 +nextAfter (~0.0, ~0.17014117E39) = ~0.1E~44 +rem (~0.0, ~0.17014117E39) = 0.0 +* (~0.0, ~0.123E4) = 0.0 ++ (~0.0, ~0.123E4) = ~0.123E4 +- (~0.0, ~0.123E4) = 0.123E4 +/ (~0.0, ~0.123E4) = 0.0 +nextAfter (~0.0, ~0.123E4) = ~0.1E~44 +rem (~0.0, ~0.123E4) = 0.0 +* (~0.0, ~0.123E2) = 0.0 ++ (~0.0, ~0.123E2) = ~0.123E2 +- (~0.0, ~0.123E2) = 0.123E2 +/ (~0.0, ~0.123E2) = 0.0 +nextAfter (~0.0, ~0.123E2) = ~0.1E~44 +rem (~0.0, ~0.123E2) = 0.0 +* (~0.0, ~0.31415927E1) = 0.0 ++ (~0.0, ~0.31415927E1) = ~0.31415927E1 +- (~0.0, ~0.31415927E1) = 0.31415927E1 +/ (~0.0, ~0.31415927E1) = 0.0 +nextAfter (~0.0, ~0.31415927E1) = ~0.1E~44 +rem (~0.0, ~0.31415927E1) = 0.0 +* (~0.0, ~0.27182817E1) = 0.0 ++ (~0.0, ~0.27182817E1) = ~0.27182817E1 +- (~0.0, ~0.27182817E1) = 0.27182817E1 +/ (~0.0, ~0.27182817E1) = 0.0 +nextAfter (~0.0, ~0.27182817E1) = ~0.1E~44 +rem (~0.0, ~0.27182817E1) = 0.0 +* (~0.0, ~0.123E1) = 0.0 ++ (~0.0, ~0.123E1) = ~0.123E1 +- (~0.0, ~0.123E1) = 0.123E1 +/ (~0.0, ~0.123E1) = 0.0 +nextAfter (~0.0, ~0.123E1) = ~0.1E~44 +rem (~0.0, ~0.123E1) = 0.0 +* (~0.0, ~0.123) = 0.0 ++ (~0.0, ~0.123) = ~0.123 +- (~0.0, ~0.123) = 0.123 +/ (~0.0, ~0.123) = 0.0 +nextAfter (~0.0, ~0.123) = ~0.1E~44 +rem (~0.0, ~0.123) = 0.0 +* (~0.0, ~0.123E~2) = 0.0 ++ (~0.0, ~0.123E~2) = ~0.123E~2 +- (~0.0, ~0.123E~2) = 0.123E~2 +/ (~0.0, ~0.123E~2) = 0.0 +nextAfter (~0.0, ~0.123E~2) = ~0.1E~44 +rem (~0.0, ~0.123E~2) = 0.0 +* (~0.0, ~0.11754944E~37) = 0.0 ++ (~0.0, ~0.11754944E~37) = ~0.11754944E~37 +- (~0.0, ~0.11754944E~37) = 0.11754944E~37 +/ (~0.0, ~0.11754944E~37) = 0.0 +nextAfter (~0.0, ~0.11754944E~37) = ~0.1E~44 +rem (~0.0, ~0.11754944E~37) = 0.0 +* (~0.0, ~0.5877472E~38) = 0.0 ++ (~0.0, ~0.5877472E~38) = ~0.5877472E~38 +- (~0.0, ~0.5877472E~38) = 0.5877472E~38 +/ (~0.0, ~0.5877472E~38) = 0.0 +nextAfter (~0.0, ~0.5877472E~38) = ~0.1E~44 +rem (~0.0, ~0.5877472E~38) = 0.0 +* (~0.0, ~0.1E~44) = 0.0 ++ (~0.0, ~0.1E~44) = ~0.1E~44 +- (~0.0, ~0.1E~44) = 0.1E~44 +/ (~0.0, ~0.1E~44) = 0.0 +nextAfter (~0.0, ~0.1E~44) = ~0.1E~44 +rem (~0.0, ~0.1E~44) = 0.0 +* (~0.0, ~0.0) = 0.0 ++ (~0.0, ~0.0) = ~0.0 +- (~0.0, ~0.0) = 0.0 +/ (~0.0, ~0.0) = nan +nextAfter (~0.0, ~0.0) = ~0.0 +rem (~0.0, ~0.0) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.1E~44 +rem (~0.0, inf) = 0.0 +* (~0.0, ~inf) = nan ++ (~0.0, ~inf) = ~inf +- (~0.0, ~inf) = inf +/ (~0.0, ~inf) = 0.0 +nextAfter (~0.0, ~inf) = ~0.1E~44 +rem (~0.0, ~inf) = 0.0 +* (~0.0, nan) = nan ++ (~0.0, nan) = nan +- (~0.0, nan) = nan +/ (~0.0, nan) = nan +nextAfter (~0.0, nan) = nan +rem (~0.0, nan) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.1E~44 +rem (~0.0, inf) = 0.0 +* (inf, 0.34028235E39) = inf ++ (inf, 0.34028235E39) = inf +- (inf, 0.34028235E39) = inf +/ (inf, 0.34028235E39) = inf +nextAfter (inf, 0.34028235E39) = inf +rem (inf, 0.34028235E39) = nan +* (inf, 0.17014117E39) = inf ++ (inf, 0.17014117E39) = inf +- (inf, 0.17014117E39) = inf +/ (inf, 0.17014117E39) = inf +nextAfter (inf, 0.17014117E39) = inf +rem (inf, 0.17014117E39) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.31415927E1) = inf ++ (inf, 0.31415927E1) = inf +- (inf, 0.31415927E1) = inf +/ (inf, 0.31415927E1) = inf +nextAfter (inf, 0.31415927E1) = inf +rem (inf, 0.31415927E1) = nan +* (inf, 0.27182817E1) = inf ++ (inf, 0.27182817E1) = inf +- (inf, 0.27182817E1) = inf +/ (inf, 0.27182817E1) = inf +nextAfter (inf, 0.27182817E1) = inf +rem (inf, 0.27182817E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.11754944E~37) = inf ++ (inf, 0.11754944E~37) = inf +- (inf, 0.11754944E~37) = inf +/ (inf, 0.11754944E~37) = inf +nextAfter (inf, 0.11754944E~37) = inf +rem (inf, 0.11754944E~37) = nan +* (inf, 0.5877472E~38) = inf ++ (inf, 0.5877472E~38) = inf +- (inf, 0.5877472E~38) = inf +/ (inf, 0.5877472E~38) = inf +nextAfter (inf, 0.5877472E~38) = inf +rem (inf, 0.5877472E~38) = nan +* (inf, 0.1E~44) = inf ++ (inf, 0.1E~44) = inf +- (inf, 0.1E~44) = inf +/ (inf, 0.1E~44) = inf +nextAfter (inf, 0.1E~44) = inf +rem (inf, 0.1E~44) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.34028235E39) = ~inf ++ (inf, ~0.34028235E39) = inf +- (inf, ~0.34028235E39) = inf +/ (inf, ~0.34028235E39) = ~inf +nextAfter (inf, ~0.34028235E39) = inf +rem (inf, ~0.34028235E39) = nan +* (inf, ~0.17014117E39) = ~inf ++ (inf, ~0.17014117E39) = inf +- (inf, ~0.17014117E39) = inf +/ (inf, ~0.17014117E39) = ~inf +nextAfter (inf, ~0.17014117E39) = inf +rem (inf, ~0.17014117E39) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.31415927E1) = ~inf ++ (inf, ~0.31415927E1) = inf +- (inf, ~0.31415927E1) = inf +/ (inf, ~0.31415927E1) = ~inf +nextAfter (inf, ~0.31415927E1) = inf +rem (inf, ~0.31415927E1) = nan +* (inf, ~0.27182817E1) = ~inf ++ (inf, ~0.27182817E1) = inf +- (inf, ~0.27182817E1) = inf +/ (inf, ~0.27182817E1) = ~inf +nextAfter (inf, ~0.27182817E1) = inf +rem (inf, ~0.27182817E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.11754944E~37) = ~inf ++ (inf, ~0.11754944E~37) = inf +- (inf, ~0.11754944E~37) = inf +/ (inf, ~0.11754944E~37) = ~inf +nextAfter (inf, ~0.11754944E~37) = inf +rem (inf, ~0.11754944E~37) = nan +* (inf, ~0.5877472E~38) = ~inf ++ (inf, ~0.5877472E~38) = inf +- (inf, ~0.5877472E~38) = inf +/ (inf, ~0.5877472E~38) = ~inf +nextAfter (inf, ~0.5877472E~38) = inf +rem (inf, ~0.5877472E~38) = nan +* (inf, ~0.1E~44) = ~inf ++ (inf, ~0.1E~44) = inf +- (inf, ~0.1E~44) = inf +/ (inf, ~0.1E~44) = ~inf +nextAfter (inf, ~0.1E~44) = inf +rem (inf, ~0.1E~44) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (~inf, 0.34028235E39) = ~inf ++ (~inf, 0.34028235E39) = ~inf +- (~inf, 0.34028235E39) = ~inf +/ (~inf, 0.34028235E39) = ~inf +nextAfter (~inf, 0.34028235E39) = ~inf +rem (~inf, 0.34028235E39) = nan +* (~inf, 0.17014117E39) = ~inf ++ (~inf, 0.17014117E39) = ~inf +- (~inf, 0.17014117E39) = ~inf +/ (~inf, 0.17014117E39) = ~inf +nextAfter (~inf, 0.17014117E39) = ~inf +rem (~inf, 0.17014117E39) = nan +* (~inf, 0.123E4) = ~inf ++ (~inf, 0.123E4) = ~inf +- (~inf, 0.123E4) = ~inf +/ (~inf, 0.123E4) = ~inf +nextAfter (~inf, 0.123E4) = ~inf +rem (~inf, 0.123E4) = nan +* (~inf, 0.123E2) = ~inf ++ (~inf, 0.123E2) = ~inf +- (~inf, 0.123E2) = ~inf +/ (~inf, 0.123E2) = ~inf +nextAfter (~inf, 0.123E2) = ~inf +rem (~inf, 0.123E2) = nan +* (~inf, 0.31415927E1) = ~inf ++ (~inf, 0.31415927E1) = ~inf +- (~inf, 0.31415927E1) = ~inf +/ (~inf, 0.31415927E1) = ~inf +nextAfter (~inf, 0.31415927E1) = ~inf +rem (~inf, 0.31415927E1) = nan +* (~inf, 0.27182817E1) = ~inf ++ (~inf, 0.27182817E1) = ~inf +- (~inf, 0.27182817E1) = ~inf +/ (~inf, 0.27182817E1) = ~inf +nextAfter (~inf, 0.27182817E1) = ~inf +rem (~inf, 0.27182817E1) = nan +* (~inf, 0.123E1) = ~inf ++ (~inf, 0.123E1) = ~inf +- (~inf, 0.123E1) = ~inf +/ (~inf, 0.123E1) = ~inf +nextAfter (~inf, 0.123E1) = ~inf +rem (~inf, 0.123E1) = nan +* (~inf, 0.123) = ~inf ++ (~inf, 0.123) = ~inf +- (~inf, 0.123) = ~inf +/ (~inf, 0.123) = ~inf +nextAfter (~inf, 0.123) = ~inf +rem (~inf, 0.123) = nan +* (~inf, 0.123E~2) = ~inf ++ (~inf, 0.123E~2) = ~inf +- (~inf, 0.123E~2) = ~inf +/ (~inf, 0.123E~2) = ~inf +nextAfter (~inf, 0.123E~2) = ~inf +rem (~inf, 0.123E~2) = nan +* (~inf, 0.11754944E~37) = ~inf ++ (~inf, 0.11754944E~37) = ~inf +- (~inf, 0.11754944E~37) = ~inf +/ (~inf, 0.11754944E~37) = ~inf +nextAfter (~inf, 0.11754944E~37) = ~inf +rem (~inf, 0.11754944E~37) = nan +* (~inf, 0.5877472E~38) = ~inf ++ (~inf, 0.5877472E~38) = ~inf +- (~inf, 0.5877472E~38) = ~inf +/ (~inf, 0.5877472E~38) = ~inf +nextAfter (~inf, 0.5877472E~38) = ~inf +rem (~inf, 0.5877472E~38) = nan +* (~inf, 0.1E~44) = ~inf ++ (~inf, 0.1E~44) = ~inf +- (~inf, 0.1E~44) = ~inf +/ (~inf, 0.1E~44) = ~inf +nextAfter (~inf, 0.1E~44) = ~inf +rem (~inf, 0.1E~44) = nan +* (~inf, 0.0) = nan ++ (~inf, 0.0) = ~inf +- (~inf, 0.0) = ~inf +/ (~inf, 0.0) = ~inf +nextAfter (~inf, 0.0) = ~inf +rem (~inf, 0.0) = nan +* (~inf, ~0.34028235E39) = inf ++ (~inf, ~0.34028235E39) = ~inf +- (~inf, ~0.34028235E39) = ~inf +/ (~inf, ~0.34028235E39) = inf +nextAfter (~inf, ~0.34028235E39) = ~inf +rem (~inf, ~0.34028235E39) = nan +* (~inf, ~0.17014117E39) = inf ++ (~inf, ~0.17014117E39) = ~inf +- (~inf, ~0.17014117E39) = ~inf +/ (~inf, ~0.17014117E39) = inf +nextAfter (~inf, ~0.17014117E39) = ~inf +rem (~inf, ~0.17014117E39) = nan +* (~inf, ~0.123E4) = inf ++ (~inf, ~0.123E4) = ~inf +- (~inf, ~0.123E4) = ~inf +/ (~inf, ~0.123E4) = inf +nextAfter (~inf, ~0.123E4) = ~inf +rem (~inf, ~0.123E4) = nan +* (~inf, ~0.123E2) = inf ++ (~inf, ~0.123E2) = ~inf +- (~inf, ~0.123E2) = ~inf +/ (~inf, ~0.123E2) = inf +nextAfter (~inf, ~0.123E2) = ~inf +rem (~inf, ~0.123E2) = nan +* (~inf, ~0.31415927E1) = inf ++ (~inf, ~0.31415927E1) = ~inf +- (~inf, ~0.31415927E1) = ~inf +/ (~inf, ~0.31415927E1) = inf +nextAfter (~inf, ~0.31415927E1) = ~inf +rem (~inf, ~0.31415927E1) = nan +* (~inf, ~0.27182817E1) = inf ++ (~inf, ~0.27182817E1) = ~inf +- (~inf, ~0.27182817E1) = ~inf +/ (~inf, ~0.27182817E1) = inf +nextAfter (~inf, ~0.27182817E1) = ~inf +rem (~inf, ~0.27182817E1) = nan +* (~inf, ~0.123E1) = inf ++ (~inf, ~0.123E1) = ~inf +- (~inf, ~0.123E1) = ~inf +/ (~inf, ~0.123E1) = inf +nextAfter (~inf, ~0.123E1) = ~inf +rem (~inf, ~0.123E1) = nan +* (~inf, ~0.123) = inf ++ (~inf, ~0.123) = ~inf +- (~inf, ~0.123) = ~inf +/ (~inf, ~0.123) = inf +nextAfter (~inf, ~0.123) = ~inf +rem (~inf, ~0.123) = nan +* (~inf, ~0.123E~2) = inf ++ (~inf, ~0.123E~2) = ~inf +- (~inf, ~0.123E~2) = ~inf +/ (~inf, ~0.123E~2) = inf +nextAfter (~inf, ~0.123E~2) = ~inf +rem (~inf, ~0.123E~2) = nan +* (~inf, ~0.11754944E~37) = inf ++ (~inf, ~0.11754944E~37) = ~inf +- (~inf, ~0.11754944E~37) = ~inf +/ (~inf, ~0.11754944E~37) = inf +nextAfter (~inf, ~0.11754944E~37) = ~inf +rem (~inf, ~0.11754944E~37) = nan +* (~inf, ~0.5877472E~38) = inf ++ (~inf, ~0.5877472E~38) = ~inf +- (~inf, ~0.5877472E~38) = ~inf +/ (~inf, ~0.5877472E~38) = inf +nextAfter (~inf, ~0.5877472E~38) = ~inf +rem (~inf, ~0.5877472E~38) = nan +* (~inf, ~0.1E~44) = inf ++ (~inf, ~0.1E~44) = ~inf +- (~inf, ~0.1E~44) = ~inf +/ (~inf, ~0.1E~44) = inf +nextAfter (~inf, ~0.1E~44) = ~inf +rem (~inf, ~0.1E~44) = nan +* (~inf, ~0.0) = nan ++ (~inf, ~0.0) = ~inf +- (~inf, ~0.0) = ~inf +/ (~inf, ~0.0) = inf +nextAfter (~inf, ~0.0) = ~inf +rem (~inf, ~0.0) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (~inf, ~inf) = inf ++ (~inf, ~inf) = ~inf +- (~inf, ~inf) = nan +/ (~inf, ~inf) = nan +nextAfter (~inf, ~inf) = ~inf +rem (~inf, ~inf) = nan +* (~inf, nan) = nan ++ (~inf, nan) = nan +- (~inf, nan) = nan +/ (~inf, nan) = nan +nextAfter (~inf, nan) = nan +rem (~inf, nan) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (nan, 0.34028235E39) = nan ++ (nan, 0.34028235E39) = nan +- (nan, 0.34028235E39) = nan +/ (nan, 0.34028235E39) = nan +nextAfter (nan, 0.34028235E39) = nan +rem (nan, 0.34028235E39) = nan +* (nan, 0.17014117E39) = nan ++ (nan, 0.17014117E39) = nan +- (nan, 0.17014117E39) = nan +/ (nan, 0.17014117E39) = nan +nextAfter (nan, 0.17014117E39) = nan +rem (nan, 0.17014117E39) = nan +* (nan, 0.123E4) = nan ++ (nan, 0.123E4) = nan +- (nan, 0.123E4) = nan +/ (nan, 0.123E4) = nan +nextAfter (nan, 0.123E4) = nan +rem (nan, 0.123E4) = nan +* (nan, 0.123E2) = nan ++ (nan, 0.123E2) = nan +- (nan, 0.123E2) = nan +/ (nan, 0.123E2) = nan +nextAfter (nan, 0.123E2) = nan +rem (nan, 0.123E2) = nan +* (nan, 0.31415927E1) = nan ++ (nan, 0.31415927E1) = nan +- (nan, 0.31415927E1) = nan +/ (nan, 0.31415927E1) = nan +nextAfter (nan, 0.31415927E1) = nan +rem (nan, 0.31415927E1) = nan +* (nan, 0.27182817E1) = nan ++ (nan, 0.27182817E1) = nan +- (nan, 0.27182817E1) = nan +/ (nan, 0.27182817E1) = nan +nextAfter (nan, 0.27182817E1) = nan +rem (nan, 0.27182817E1) = nan +* (nan, 0.123E1) = nan ++ (nan, 0.123E1) = nan +- (nan, 0.123E1) = nan +/ (nan, 0.123E1) = nan +nextAfter (nan, 0.123E1) = nan +rem (nan, 0.123E1) = nan +* (nan, 0.123) = nan ++ (nan, 0.123) = nan +- (nan, 0.123) = nan +/ (nan, 0.123) = nan +nextAfter (nan, 0.123) = nan +rem (nan, 0.123) = nan +* (nan, 0.123E~2) = nan ++ (nan, 0.123E~2) = nan +- (nan, 0.123E~2) = nan +/ (nan, 0.123E~2) = nan +nextAfter (nan, 0.123E~2) = nan +rem (nan, 0.123E~2) = nan +* (nan, 0.11754944E~37) = nan ++ (nan, 0.11754944E~37) = nan +- (nan, 0.11754944E~37) = nan +/ (nan, 0.11754944E~37) = nan +nextAfter (nan, 0.11754944E~37) = nan +rem (nan, 0.11754944E~37) = nan +* (nan, 0.5877472E~38) = nan ++ (nan, 0.5877472E~38) = nan +- (nan, 0.5877472E~38) = nan +/ (nan, 0.5877472E~38) = nan +nextAfter (nan, 0.5877472E~38) = nan +rem (nan, 0.5877472E~38) = nan +* (nan, 0.1E~44) = nan ++ (nan, 0.1E~44) = nan +- (nan, 0.1E~44) = nan +/ (nan, 0.1E~44) = nan +nextAfter (nan, 0.1E~44) = nan +rem (nan, 0.1E~44) = nan +* (nan, 0.0) = nan ++ (nan, 0.0) = nan +- (nan, 0.0) = nan +/ (nan, 0.0) = nan +nextAfter (nan, 0.0) = nan +rem (nan, 0.0) = nan +* (nan, ~0.34028235E39) = nan ++ (nan, ~0.34028235E39) = nan +- (nan, ~0.34028235E39) = nan +/ (nan, ~0.34028235E39) = nan +nextAfter (nan, ~0.34028235E39) = nan +rem (nan, ~0.34028235E39) = nan +* (nan, ~0.17014117E39) = nan ++ (nan, ~0.17014117E39) = nan +- (nan, ~0.17014117E39) = nan +/ (nan, ~0.17014117E39) = nan +nextAfter (nan, ~0.17014117E39) = nan +rem (nan, ~0.17014117E39) = nan +* (nan, ~0.123E4) = nan ++ (nan, ~0.123E4) = nan +- (nan, ~0.123E4) = nan +/ (nan, ~0.123E4) = nan +nextAfter (nan, ~0.123E4) = nan +rem (nan, ~0.123E4) = nan +* (nan, ~0.123E2) = nan ++ (nan, ~0.123E2) = nan +- (nan, ~0.123E2) = nan +/ (nan, ~0.123E2) = nan +nextAfter (nan, ~0.123E2) = nan +rem (nan, ~0.123E2) = nan +* (nan, ~0.31415927E1) = nan ++ (nan, ~0.31415927E1) = nan +- (nan, ~0.31415927E1) = nan +/ (nan, ~0.31415927E1) = nan +nextAfter (nan, ~0.31415927E1) = nan +rem (nan, ~0.31415927E1) = nan +* (nan, ~0.27182817E1) = nan ++ (nan, ~0.27182817E1) = nan +- (nan, ~0.27182817E1) = nan +/ (nan, ~0.27182817E1) = nan +nextAfter (nan, ~0.27182817E1) = nan +rem (nan, ~0.27182817E1) = nan +* (nan, ~0.123E1) = nan ++ (nan, ~0.123E1) = nan +- (nan, ~0.123E1) = nan +/ (nan, ~0.123E1) = nan +nextAfter (nan, ~0.123E1) = nan +rem (nan, ~0.123E1) = nan +* (nan, ~0.123) = nan ++ (nan, ~0.123) = nan +- (nan, ~0.123) = nan +/ (nan, ~0.123) = nan +nextAfter (nan, ~0.123) = nan +rem (nan, ~0.123) = nan +* (nan, ~0.123E~2) = nan ++ (nan, ~0.123E~2) = nan +- (nan, ~0.123E~2) = nan +/ (nan, ~0.123E~2) = nan +nextAfter (nan, ~0.123E~2) = nan +rem (nan, ~0.123E~2) = nan +* (nan, ~0.11754944E~37) = nan ++ (nan, ~0.11754944E~37) = nan +- (nan, ~0.11754944E~37) = nan +/ (nan, ~0.11754944E~37) = nan +nextAfter (nan, ~0.11754944E~37) = nan +rem (nan, ~0.11754944E~37) = nan +* (nan, ~0.5877472E~38) = nan ++ (nan, ~0.5877472E~38) = nan +- (nan, ~0.5877472E~38) = nan +/ (nan, ~0.5877472E~38) = nan +nextAfter (nan, ~0.5877472E~38) = nan +rem (nan, ~0.5877472E~38) = nan +* (nan, ~0.1E~44) = nan ++ (nan, ~0.1E~44) = nan +- (nan, ~0.1E~44) = nan +/ (nan, ~0.1E~44) = nan +nextAfter (nan, ~0.1E~44) = nan +rem (nan, ~0.1E~44) = nan +* (nan, ~0.0) = nan ++ (nan, ~0.0) = nan +- (nan, ~0.0) = nan +/ (nan, ~0.0) = nan +nextAfter (nan, ~0.0) = nan +rem (nan, ~0.0) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (nan, ~inf) = nan ++ (nan, ~inf) = nan +- (nan, ~inf) = nan +/ (nan, ~inf) = nan +nextAfter (nan, ~inf) = nan +rem (nan, ~inf) = nan +* (nan, nan) = nan ++ (nan, nan) = nan +- (nan, nan) = nan +/ (nan, nan) = nan +nextAfter (nan, nan) = nan +rem (nan, nan) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (inf, 0.34028235E39) = inf ++ (inf, 0.34028235E39) = inf +- (inf, 0.34028235E39) = inf +/ (inf, 0.34028235E39) = inf +nextAfter (inf, 0.34028235E39) = inf +rem (inf, 0.34028235E39) = nan +* (inf, 0.17014117E39) = inf ++ (inf, 0.17014117E39) = inf +- (inf, 0.17014117E39) = inf +/ (inf, 0.17014117E39) = inf +nextAfter (inf, 0.17014117E39) = inf +rem (inf, 0.17014117E39) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.31415927E1) = inf ++ (inf, 0.31415927E1) = inf +- (inf, 0.31415927E1) = inf +/ (inf, 0.31415927E1) = inf +nextAfter (inf, 0.31415927E1) = inf +rem (inf, 0.31415927E1) = nan +* (inf, 0.27182817E1) = inf ++ (inf, 0.27182817E1) = inf +- (inf, 0.27182817E1) = inf +/ (inf, 0.27182817E1) = inf +nextAfter (inf, 0.27182817E1) = inf +rem (inf, 0.27182817E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.11754944E~37) = inf ++ (inf, 0.11754944E~37) = inf +- (inf, 0.11754944E~37) = inf +/ (inf, 0.11754944E~37) = inf +nextAfter (inf, 0.11754944E~37) = inf +rem (inf, 0.11754944E~37) = nan +* (inf, 0.5877472E~38) = inf ++ (inf, 0.5877472E~38) = inf +- (inf, 0.5877472E~38) = inf +/ (inf, 0.5877472E~38) = inf +nextAfter (inf, 0.5877472E~38) = inf +rem (inf, 0.5877472E~38) = nan +* (inf, 0.1E~44) = inf ++ (inf, 0.1E~44) = inf +- (inf, 0.1E~44) = inf +/ (inf, 0.1E~44) = inf +nextAfter (inf, 0.1E~44) = inf +rem (inf, 0.1E~44) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.34028235E39) = ~inf ++ (inf, ~0.34028235E39) = inf +- (inf, ~0.34028235E39) = inf +/ (inf, ~0.34028235E39) = ~inf +nextAfter (inf, ~0.34028235E39) = inf +rem (inf, ~0.34028235E39) = nan +* (inf, ~0.17014117E39) = ~inf ++ (inf, ~0.17014117E39) = inf +- (inf, ~0.17014117E39) = inf +/ (inf, ~0.17014117E39) = ~inf +nextAfter (inf, ~0.17014117E39) = inf +rem (inf, ~0.17014117E39) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.31415927E1) = ~inf ++ (inf, ~0.31415927E1) = inf +- (inf, ~0.31415927E1) = inf +/ (inf, ~0.31415927E1) = ~inf +nextAfter (inf, ~0.31415927E1) = inf +rem (inf, ~0.31415927E1) = nan +* (inf, ~0.27182817E1) = ~inf ++ (inf, ~0.27182817E1) = inf +- (inf, ~0.27182817E1) = inf +/ (inf, ~0.27182817E1) = ~inf +nextAfter (inf, ~0.27182817E1) = inf +rem (inf, ~0.27182817E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.11754944E~37) = ~inf ++ (inf, ~0.11754944E~37) = inf +- (inf, ~0.11754944E~37) = inf +/ (inf, ~0.11754944E~37) = ~inf +nextAfter (inf, ~0.11754944E~37) = inf +rem (inf, ~0.11754944E~37) = nan +* (inf, ~0.5877472E~38) = ~inf ++ (inf, ~0.5877472E~38) = inf +- (inf, ~0.5877472E~38) = inf +/ (inf, ~0.5877472E~38) = ~inf +nextAfter (inf, ~0.5877472E~38) = inf +rem (inf, ~0.5877472E~38) = nan +* (inf, ~0.1E~44) = ~inf ++ (inf, ~0.1E~44) = inf +- (inf, ~0.1E~44) = inf +/ (inf, ~0.1E~44) = ~inf +nextAfter (inf, ~0.1E~44) = inf +rem (inf, ~0.1E~44) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan + +Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh,atan2,pow} +acos (0.34028235E39) = nan +asin (0.34028235E39) = nan +atan (0.34028235E39) = 1.570796371 +cos (0.34028235E39) = 0.8530210257 +cosh (0.34028235E39) = inf +exp (0.34028235E39) = inf +ln (0.34028235E39) = 88.72283936 +log10 (0.34028235E39) = 38.53184128 +sin (0.34028235E39) = ~0.521876514 +sinh (0.34028235E39) = inf +sqrt (0.34028235E39) = 1.844674297E19 +tan (0.34028235E39) = ~0.6117979288 +tanh (0.34028235E39) = 1 +acos (0.17014117E39) = nan +asin (0.17014117E39) = nan +atan (0.17014117E39) = 1.570796371 +cos (0.17014117E39) = ~0.9625541568 +cosh (0.17014117E39) = inf +exp (0.17014117E39) = inf +ln (0.17014117E39) = 88.0296936 +log10 (0.17014117E39) = 38.23080826 +sin (0.17014117E39) = 0.2710894346 +sinh (0.17014117E39) = inf +sqrt (0.17014117E39) = 1.30438176E19 +tan (0.17014117E39) = ~0.2816355228 +tanh (0.17014117E39) = 1 +acos (0.123E4) = nan +asin (0.123E4) = nan +atan (0.123E4) = 1.569983363 +cos (0.123E4) = 0.06642717123 +cosh (0.123E4) = inf +exp (0.123E4) = inf +ln (0.123E4) = 7.114769459 +log10 (0.123E4) = 3.089905024 +sin (0.123E4) = ~0.9977912903 +sinh (0.123E4) = inf +sqrt (0.123E4) = 35.07135773 +tan (0.123E4) = ~15.02083111 +tanh (0.123E4) = 1 +acos (0.123E2) = nan +asin (0.123E2) = nan +atan (0.123E2) = 1.489673972 +cos (0.123E2) = 0.9647326469 +cosh (0.123E2) = 109848.0156 +exp (0.123E2) = 219696.0312 +ln (0.123E2) = 2.509599209 +log10 (0.123E2) = 1.089905143 +sin (0.123E2) = ~0.2632316053 +sinh (0.123E2) = 109848.0156 +sqrt (0.123E2) = 3.50713563 +tan (0.123E2) = ~0.2728544474 +tanh (0.123E2) = 1 +acos (0.31415927E1) = nan +asin (0.31415927E1) = nan +atan (0.31415927E1) = 1.262627244 +cos (0.31415927E1) = ~1 +cosh (0.31415927E1) = 11.59195518 +exp (0.31415927E1) = 23.14069557 +ln (0.31415927E1) = 1.144729972 +log10 (0.31415927E1) = 0.4971498847 +sin (0.31415927E1) = ~8.742277657E~8 +sinh (0.31415927E1) = 11.54873943 +sqrt (0.31415927E1) = 1.772453904 +tan (0.31415927E1) = 8.742277657E~8 +tanh (0.31415927E1) = 0.9962720871 +acos (0.27182817E1) = nan +asin (0.27182817E1) = nan +atan (0.27182817E1) = 1.218282938 +cos (0.27182817E1) = ~0.9117338657 +cosh (0.27182817E1) = 7.610124111 +exp (0.27182817E1) = 15.15426064 +ln (0.27182817E1) = 0.9999999404 +log10 (0.27182817E1) = 0.4342944622 +sin (0.27182817E1) = 0.4107813537 +sinh (0.27182817E1) = 7.544136047 +sqrt (0.27182817E1) = 1.648721218 +tan (0.27182817E1) = ~0.4505496323 +tanh (0.27182817E1) = 0.9913288951 +acos (0.123E1) = nan +asin (0.123E1) = nan +atan (0.123E1) = 0.888173759 +cos (0.123E1) = 0.3342376947 +cosh (0.123E1) = 1.856761098 +exp (0.123E1) = 3.421229601 +ln (0.123E1) = 0.2070141882 +log10 (0.123E1) = 0.08990512043 +sin (0.123E1) = 0.9424887896 +sinh (0.123E1) = 1.564468503 +sqrt (0.123E1) = 1.109053612 +tan (0.123E1) = 2.819815874 +tanh (0.123E1) = 0.8425793648 +acos (0.123) = 1.447484016 +asin (0.123) = 0.1233122796 +atan (0.123) = 0.1223852858 +cos (0.123) = 0.9924450517 +cosh (0.123) = 1.007574081 +exp (0.123) = 1.130884409 +ln (0.123) = ~2.095570803 +log10 (0.123) = ~0.9100948572 +sin (0.123) = 0.1226900965 +sinh (0.123) = 0.1233103797 +sqrt (0.123) = 0.350713551 +tan (0.123) = 0.1236240715 +tanh (0.123) = 0.1223834455 +acos (0.123E~2) = 1.569566369 +asin (0.123E~2) = 0.001230000402 +atan (0.123E~2) = 0.001229999471 +cos (0.123E~2) = 0.9999992251 +cosh (0.123E~2) = 1.000000715 +exp (0.123E~2) = 1.001230717 +ln (0.123E~2) = ~6.700741291 +log10 (0.123E~2) = ~2.910094976 +sin (0.123E~2) = 0.001229999703 +sinh (0.123E~2) = 0.001230000402 +sqrt (0.123E~2) = 0.03507135808 +tan (0.123E~2) = 0.001230000635 +tanh (0.123E~2) = 0.001229999471 +acos (0.11754944E~37) = 1.570796371 +asin (0.11754944E~37) = 1.175494351E~38 +atan (0.11754944E~37) = 1.175494351E~38 +cos (0.11754944E~37) = 1 +cosh (0.11754944E~37) = 1 +exp (0.11754944E~37) = 1 +ln (0.11754944E~37) = ~87.33654785 +log10 (0.11754944E~37) = ~37.92977905 +sin (0.11754944E~37) = 1.175494351E~38 +sinh (0.11754944E~37) = 1.175494351E~38 +sqrt (0.11754944E~37) = 1.084202172E~19 +tan (0.11754944E~37) = 1.175494351E~38 +tanh (0.11754944E~37) = 1.175494351E~38 +acos (0.5877472E~38) = 1.570796371 +asin (0.5877472E~38) = 5.877471754E~39 +atan (0.5877472E~38) = 5.877471754E~39 +cos (0.5877472E~38) = 1 +cosh (0.5877472E~38) = 1 +exp (0.5877472E~38) = 1 +ln (0.5877472E~38) = ~88.0296936 +log10 (0.5877472E~38) = ~38.23080826 +sin (0.5877472E~38) = 5.877471754E~39 +sinh (0.5877472E~38) = 5.877471754E~39 +sqrt (0.5877472E~38) = 7.666466952E~20 +tan (0.5877472E~38) = 5.877471754E~39 +tanh (0.5877472E~38) = 5.877471754E~39 +acos (0.1E~44) = 1.570796371 +asin (0.1E~44) = 1.401298464E~45 +atan (0.1E~44) = 1.401298464E~45 +cos (0.1E~44) = 1 +cosh (0.1E~44) = 1 +exp (0.1E~44) = 1 +ln (0.1E~44) = ~103.2789307 +log10 (0.1E~44) = ~44.85346985 +sin (0.1E~44) = 1.401298464E~45 +sinh (0.1E~44) = 1.401298464E~45 +sqrt (0.1E~44) = 3.743392067E~23 +tan (0.1E~44) = 1.401298464E~45 +tanh (0.1E~44) = 1.401298464E~45 +acos (0.0) = 1.570796371 +asin (0.0) = 0 +atan (0.0) = 0 +cos (0.0) = 1 +cosh (0.0) = 1 +exp (0.0) = 1 +ln (0.0) = ~inf +log10 (0.0) = ~inf +sin (0.0) = 0 +sinh (0.0) = 0 +sqrt (0.0) = 0 +tan (0.0) = 0 +tanh (0.0) = 0 +acos (~0.34028235E39) = nan +asin (~0.34028235E39) = nan +atan (~0.34028235E39) = ~1.570796371 +cos (~0.34028235E39) = 0.8530210257 +cosh (~0.34028235E39) = inf +exp (~0.34028235E39) = 0 +ln (~0.34028235E39) = nan +log10 (~0.34028235E39) = nan +sin (~0.34028235E39) = 0.521876514 +sinh (~0.34028235E39) = ~inf +sqrt (~0.34028235E39) = nan +tan (~0.34028235E39) = 0.6117979288 +tanh (~0.34028235E39) = ~1 +acos (~0.17014117E39) = nan +asin (~0.17014117E39) = nan +atan (~0.17014117E39) = ~1.570796371 +cos (~0.17014117E39) = ~0.9625541568 +cosh (~0.17014117E39) = inf +exp (~0.17014117E39) = 0 +ln (~0.17014117E39) = nan +log10 (~0.17014117E39) = nan +sin (~0.17014117E39) = ~0.2710894346 +sinh (~0.17014117E39) = ~inf +sqrt (~0.17014117E39) = nan +tan (~0.17014117E39) = 0.2816355228 +tanh (~0.17014117E39) = ~1 +acos (~0.123E4) = nan +asin (~0.123E4) = nan +atan (~0.123E4) = ~1.569983363 +cos (~0.123E4) = 0.06642717123 +cosh (~0.123E4) = inf +exp (~0.123E4) = 0 +ln (~0.123E4) = nan +log10 (~0.123E4) = nan +sin (~0.123E4) = 0.9977912903 +sinh (~0.123E4) = ~inf +sqrt (~0.123E4) = nan +tan (~0.123E4) = 15.02083111 +tanh (~0.123E4) = ~1 +acos (~0.123E2) = nan +asin (~0.123E2) = nan +atan (~0.123E2) = ~1.489673972 +cos (~0.123E2) = 0.9647326469 +cosh (~0.123E2) = 109848.0156 +exp (~0.123E2) = 4.551743586E~6 +ln (~0.123E2) = nan +log10 (~0.123E2) = nan +sin (~0.123E2) = 0.2632316053 +sinh (~0.123E2) = ~109848.0156 +sqrt (~0.123E2) = nan +tan (~0.123E2) = 0.2728544474 +tanh (~0.123E2) = ~1 +acos (~0.31415927E1) = nan +asin (~0.31415927E1) = nan +atan (~0.31415927E1) = ~1.262627244 +cos (~0.31415927E1) = ~1 +cosh (~0.31415927E1) = 11.59195518 +exp (~0.31415927E1) = 0.04321391508 +ln (~0.31415927E1) = nan +log10 (~0.31415927E1) = nan +sin (~0.31415927E1) = 8.742277657E~8 +sinh (~0.31415927E1) = ~11.54873943 +sqrt (~0.31415927E1) = nan +tan (~0.31415927E1) = ~8.742277657E~8 +tanh (~0.31415927E1) = ~0.9962720871 +acos (~0.27182817E1) = nan +asin (~0.27182817E1) = nan +atan (~0.27182817E1) = ~1.218282938 +cos (~0.27182817E1) = ~0.9117338657 +cosh (~0.27182817E1) = 7.610124111 +exp (~0.27182817E1) = 0.06598804146 +ln (~0.27182817E1) = nan +log10 (~0.27182817E1) = nan +sin (~0.27182817E1) = ~0.4107813537 +sinh (~0.27182817E1) = ~7.544136047 +sqrt (~0.27182817E1) = nan +tan (~0.27182817E1) = 0.4505496323 +tanh (~0.27182817E1) = ~0.9913288951 +acos (~0.123E1) = nan +asin (~0.123E1) = nan +atan (~0.123E1) = ~0.888173759 +cos (~0.123E1) = 0.3342376947 +cosh (~0.123E1) = 1.856761098 +exp (~0.123E1) = 0.2922925651 +ln (~0.123E1) = nan +log10 (~0.123E1) = nan +sin (~0.123E1) = ~0.9424887896 +sinh (~0.123E1) = ~1.564468503 +sqrt (~0.123E1) = nan +tan (~0.123E1) = ~2.819815874 +tanh (~0.123E1) = ~0.8425793648 +acos (~0.123) = 1.694108605 +asin (~0.123) = ~0.1233122796 +atan (~0.123) = ~0.1223852858 +cos (~0.123) = 0.9924450517 +cosh (~0.123) = 1.007574081 +exp (~0.123) = 0.8842636347 +ln (~0.123) = nan +log10 (~0.123) = nan +sin (~0.123) = ~0.1226900965 +sinh (~0.123) = ~0.1233103797 +sqrt (~0.123) = nan +tan (~0.123) = ~0.1236240715 +tanh (~0.123) = ~0.1223834455 +acos (~0.123E~2) = 1.572026372 +asin (~0.123E~2) = ~0.001230000402 +atan (~0.123E~2) = ~0.001229999471 +cos (~0.123E~2) = 0.9999992251 +cosh (~0.123E~2) = 1.000000715 +exp (~0.123E~2) = 0.9987707734 +ln (~0.123E~2) = nan +log10 (~0.123E~2) = nan +sin (~0.123E~2) = ~0.001229999703 +sinh (~0.123E~2) = ~0.001230000402 +sqrt (~0.123E~2) = nan +tan (~0.123E~2) = ~0.001230000635 +tanh (~0.123E~2) = ~0.001229999471 +acos (~0.11754944E~37) = 1.570796371 +asin (~0.11754944E~37) = ~1.175494351E~38 +atan (~0.11754944E~37) = ~1.175494351E~38 +cos (~0.11754944E~37) = 1 +cosh (~0.11754944E~37) = 1 +exp (~0.11754944E~37) = 1 +ln (~0.11754944E~37) = nan +log10 (~0.11754944E~37) = nan +sin (~0.11754944E~37) = ~1.175494351E~38 +sinh (~0.11754944E~37) = ~1.175494351E~38 +sqrt (~0.11754944E~37) = nan +tan (~0.11754944E~37) = ~1.175494351E~38 +tanh (~0.11754944E~37) = ~1.175494351E~38 +acos (~0.5877472E~38) = 1.570796371 +asin (~0.5877472E~38) = ~5.877471754E~39 +atan (~0.5877472E~38) = ~5.877471754E~39 +cos (~0.5877472E~38) = 1 +cosh (~0.5877472E~38) = 1 +exp (~0.5877472E~38) = 1 +ln (~0.5877472E~38) = nan +log10 (~0.5877472E~38) = nan +sin (~0.5877472E~38) = ~5.877471754E~39 +sinh (~0.5877472E~38) = ~5.877471754E~39 +sqrt (~0.5877472E~38) = nan +tan (~0.5877472E~38) = ~5.877471754E~39 +tanh (~0.5877472E~38) = ~5.877471754E~39 +acos (~0.1E~44) = 1.570796371 +asin (~0.1E~44) = ~1.401298464E~45 +atan (~0.1E~44) = ~1.401298464E~45 +cos (~0.1E~44) = 1 +cosh (~0.1E~44) = 1 +exp (~0.1E~44) = 1 +ln (~0.1E~44) = nan +log10 (~0.1E~44) = nan +sin (~0.1E~44) = ~1.401298464E~45 +sinh (~0.1E~44) = ~1.401298464E~45 +sqrt (~0.1E~44) = nan +tan (~0.1E~44) = ~1.401298464E~45 +tanh (~0.1E~44) = ~1.401298464E~45 +acos (~0.0) = 1.570796371 +asin (~0.0) = 0 +atan (~0.0) = 0 +cos (~0.0) = 1 +cosh (~0.0) = 1 +exp (~0.0) = 1 +ln (~0.0) = ~inf +log10 (~0.0) = ~inf +sin (~0.0) = 0 +sinh (~0.0) = 0 +sqrt (~0.0) = 0 +tan (~0.0) = 0 +tanh (~0.0) = 0 +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796371 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +acos (~inf) = nan +asin (~inf) = nan +atan (~inf) = ~1.570796371 +cos (~inf) = nan +cosh (~inf) = ~inf +exp (~inf) = 0 +ln (~inf) = nan +log10 (~inf) = nan +sin (~inf) = nan +sinh (~inf) = ~inf +sqrt (~inf) = nan +tan (~inf) = nan +tanh (~inf) = ~1 +acos (nan) = nan +asin (nan) = nan +atan (nan) = nan +cos (nan) = nan +cosh (nan) = nan +exp (nan) = nan +ln (nan) = nan +log10 (nan) = nan +sin (nan) = nan +sinh (nan) = nan +sqrt (nan) = nan +tan (nan) = nan +tanh (nan) = nan +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796371 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +atan2 (0.34028235E39, 0.34028235E39) = 0.7853981853 +pow (0.34028235E39, 0.34028235E39) = inf +atan2 (0.34028235E39, 0.17014117E39) = 1.107148767 +pow (0.34028235E39, 0.17014117E39) = inf +atan2 (0.34028235E39, 0.123E4) = 1.570796371 +pow (0.34028235E39, 0.123E4) = inf +atan2 (0.34028235E39, 0.123E2) = 1.570796371 +pow (0.34028235E39, 0.123E2) = inf +atan2 (0.34028235E39, 0.31415927E1) = 1.570796371 +pow (0.34028235E39, 0.31415927E1) = inf +atan2 (0.34028235E39, 0.27182817E1) = 1.570796371 +pow (0.34028235E39, 0.27182817E1) = inf +atan2 (0.34028235E39, 0.123E1) = 1.570796371 +pow (0.34028235E39, 0.123E1) = inf +atan2 (0.34028235E39, 0.123) = 1.570796371 +pow (0.34028235E39, 0.123) = 54880.28906 +atan2 (0.34028235E39, 0.123E~2) = 1.570796371 +pow (0.34028235E39, 0.123E~2) = 1.115306377 +atan2 (0.34028235E39, 0.11754944E~37) = 1.570796371 +pow (0.34028235E39, 0.11754944E~37) = 1 +atan2 (0.34028235E39, 0.5877472E~38) = 1.570796371 +pow (0.34028235E39, 0.5877472E~38) = 1 +atan2 (0.34028235E39, 0.1E~44) = 1.570796371 +pow (0.34028235E39, 0.1E~44) = 1 +atan2 (0.34028235E39, 0.0) = 1.570796371 +pow (0.34028235E39, 0.0) = 1 +atan2 (0.34028235E39, ~0.34028235E39) = 2.356194496 +pow (0.34028235E39, ~0.34028235E39) = 0 +atan2 (0.34028235E39, ~0.17014117E39) = 2.034443855 +pow (0.34028235E39, ~0.17014117E39) = 0 +atan2 (0.34028235E39, ~0.123E4) = 1.570796251 +pow (0.34028235E39, ~0.123E4) = 0 +atan2 (0.34028235E39, ~0.123E2) = 1.570796251 +pow (0.34028235E39, ~0.123E2) = 0 +atan2 (0.34028235E39, ~0.31415927E1) = 1.570796251 +pow (0.34028235E39, ~0.31415927E1) = 0 +atan2 (0.34028235E39, ~0.27182817E1) = 1.570796251 +pow (0.34028235E39, ~0.27182817E1) = 0 +atan2 (0.34028235E39, ~0.123E1) = 1.570796251 +pow (0.34028235E39, ~0.123E1) = 0 +atan2 (0.34028235E39, ~0.123) = 1.570796251 +pow (0.34028235E39, ~0.123) = 1.822147897E~5 +atan2 (0.34028235E39, ~0.123E~2) = 1.570796251 +pow (0.34028235E39, ~0.123E~2) = 0.8966146708 +atan2 (0.34028235E39, ~0.11754944E~37) = 1.570796251 +pow (0.34028235E39, ~0.11754944E~37) = 1 +atan2 (0.34028235E39, ~0.5877472E~38) = 1.570796251 +pow (0.34028235E39, ~0.5877472E~38) = 1 +atan2 (0.34028235E39, ~0.1E~44) = 1.570796251 +pow (0.34028235E39, ~0.1E~44) = 1 +atan2 (0.34028235E39, ~0.0) = 1.570796371 +pow (0.34028235E39, ~0.0) = 1 +atan2 (0.34028235E39, inf) = 0 +pow (0.34028235E39, inf) = inf +atan2 (0.34028235E39, ~inf) = 3.141592741 +pow (0.34028235E39, ~inf) = 0 +atan2 (0.34028235E39, nan) = nan +pow (0.34028235E39, nan) = nan +atan2 (0.34028235E39, inf) = 0 +pow (0.34028235E39, inf) = inf +atan2 (0.17014117E39, 0.34028235E39) = 0.463647604 +pow (0.17014117E39, 0.34028235E39) = inf +atan2 (0.17014117E39, 0.17014117E39) = 0.7853981853 +pow (0.17014117E39, 0.17014117E39) = inf +atan2 (0.17014117E39, 0.123E4) = 1.570796371 +pow (0.17014117E39, 0.123E4) = inf +atan2 (0.17014117E39, 0.123E2) = 1.570796371 +pow (0.17014117E39, 0.123E2) = inf +atan2 (0.17014117E39, 0.31415927E1) = 1.570796371 +pow (0.17014117E39, 0.31415927E1) = inf +atan2 (0.17014117E39, 0.27182817E1) = 1.570796371 +pow (0.17014117E39, 0.27182817E1) = inf +atan2 (0.17014117E39, 0.123E1) = 1.570796371 +pow (0.17014117E39, 0.123E1) = inf +atan2 (0.17014117E39, 0.123) = 1.570796371 +pow (0.17014117E39, 0.123) = 50395.26172 +atan2 (0.17014117E39, 0.123E~2) = 1.570796371 +pow (0.17014117E39, 0.123E~2) = 1.114355803 +atan2 (0.17014117E39, 0.11754944E~37) = 1.570796371 +pow (0.17014117E39, 0.11754944E~37) = 1 +atan2 (0.17014117E39, 0.5877472E~38) = 1.570796371 +pow (0.17014117E39, 0.5877472E~38) = 1 +atan2 (0.17014117E39, 0.1E~44) = 1.570796371 +pow (0.17014117E39, 0.1E~44) = 1 +atan2 (0.17014117E39, 0.0) = 1.570796371 +pow (0.17014117E39, 0.0) = 1 +atan2 (0.17014117E39, ~0.34028235E39) = 2.677945137 +pow (0.17014117E39, ~0.34028235E39) = 0 +atan2 (0.17014117E39, ~0.17014117E39) = 2.356194496 +pow (0.17014117E39, ~0.17014117E39) = 0 +atan2 (0.17014117E39, ~0.123E4) = 1.570796251 +pow (0.17014117E39, ~0.123E4) = 0 +atan2 (0.17014117E39, ~0.123E2) = 1.570796251 +pow (0.17014117E39, ~0.123E2) = 0 +atan2 (0.17014117E39, ~0.31415927E1) = 1.570796251 +pow (0.17014117E39, ~0.31415927E1) = 0 +atan2 (0.17014117E39, ~0.27182817E1) = 1.570796251 +pow (0.17014117E39, ~0.27182817E1) = 0 +atan2 (0.17014117E39, ~0.123E1) = 1.570796251 +pow (0.17014117E39, ~0.123E1) = 0 +atan2 (0.17014117E39, ~0.123) = 1.570796251 +pow (0.17014117E39, ~0.123) = 1.984313531E~5 +atan2 (0.17014117E39, ~0.123E~2) = 1.570796251 +pow (0.17014117E39, ~0.123E~2) = 0.8973793983 +atan2 (0.17014117E39, ~0.11754944E~37) = 1.570796251 +pow (0.17014117E39, ~0.11754944E~37) = 1 +atan2 (0.17014117E39, ~0.5877472E~38) = 1.570796251 +pow (0.17014117E39, ~0.5877472E~38) = 1 +atan2 (0.17014117E39, ~0.1E~44) = 1.570796251 +pow (0.17014117E39, ~0.1E~44) = 1 +atan2 (0.17014117E39, ~0.0) = 1.570796371 +pow (0.17014117E39, ~0.0) = 1 +atan2 (0.17014117E39, inf) = 0 +pow (0.17014117E39, inf) = inf +atan2 (0.17014117E39, ~inf) = 3.141592741 +pow (0.17014117E39, ~inf) = 0 +atan2 (0.17014117E39, nan) = nan +pow (0.17014117E39, nan) = nan +atan2 (0.17014117E39, inf) = 0 +pow (0.17014117E39, inf) = inf +atan2 (0.123E4, 0.34028235E39) = 3.614645488E~36 +pow (0.123E4, 0.34028235E39) = inf +atan2 (0.123E4, 0.17014117E39) = 7.229290975E~36 +pow (0.123E4, 0.17014117E39) = inf +atan2 (0.123E4, 0.123E4) = 0.7853981853 +pow (0.123E4, 0.123E4) = inf +atan2 (0.123E4, 0.123E2) = 1.560796618 +pow (0.123E4, 0.123E2) = 1.013522656E38 +atan2 (0.123E4, 0.31415927E1) = 1.568242192 +pow (0.123E4, 0.31415927E1) = 5095930368 +atan2 (0.123E4, 0.27182817E1) = 1.568586349 +pow (0.123E4, 0.27182817E1) = 250745216 +atan2 (0.123E4, 0.123E1) = 1.569796324 +pow (0.123E4, 0.123E1) = 6318.054199 +atan2 (0.123E4, 0.123) = 1.570696354 +pow (0.123E4, 0.123) = 2.39915514 +atan2 (0.123E4, 0.123E~2) = 1.570795298 +pow (0.123E4, 0.123E~2) = 1.008789539 +atan2 (0.123E4, 0.11754944E~37) = 1.570796371 +pow (0.123E4, 0.11754944E~37) = 1 +atan2 (0.123E4, 0.5877472E~38) = 1.570796371 +pow (0.123E4, 0.5877472E~38) = 1 +atan2 (0.123E4, 0.1E~44) = 1.570796371 +pow (0.123E4, 0.1E~44) = 1 +atan2 (0.123E4, 0.0) = 1.570796371 +pow (0.123E4, 0.0) = 1 +atan2 (0.123E4, ~0.34028235E39) = 3.141592741 +pow (0.123E4, ~0.34028235E39) = 0 +atan2 (0.123E4, ~0.17014117E39) = 3.141592741 +pow (0.123E4, ~0.17014117E39) = 0 +atan2 (0.123E4, ~0.123E4) = 2.356194496 +pow (0.123E4, ~0.123E4) = 0 +atan2 (0.123E4, ~0.123E2) = 1.580796003 +pow (0.123E4, ~0.123E2) = 9.86657752E~39 +atan2 (0.123E4, ~0.31415927E1) = 1.57335043 +pow (0.123E4, ~0.31415927E1) = 1.962350282E~10 +atan2 (0.123E4, ~0.27182817E1) = 1.573006272 +pow (0.123E4, ~0.27182817E1) = 3.988112063E~9 +atan2 (0.123E4, ~0.123E1) = 1.571796298 +pow (0.123E4, ~0.123E1) = 1.582765835E~4 +atan2 (0.123E4, ~0.123) = 1.570896268 +pow (0.123E4, ~0.123) = 0.4168134034 +atan2 (0.123E4, ~0.123E~2) = 1.570797324 +pow (0.123E4, ~0.123E~2) = 0.991286993 +atan2 (0.123E4, ~0.11754944E~37) = 1.570796251 +pow (0.123E4, ~0.11754944E~37) = 1 +atan2 (0.123E4, ~0.5877472E~38) = 1.570796251 +pow (0.123E4, ~0.5877472E~38) = 1 +atan2 (0.123E4, ~0.1E~44) = 1.570796251 +pow (0.123E4, ~0.1E~44) = 1 +atan2 (0.123E4, ~0.0) = 1.570796371 +pow (0.123E4, ~0.0) = 1 +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E4, ~inf) = 3.141592741 +pow (0.123E4, ~inf) = 0 +atan2 (0.123E4, nan) = nan +pow (0.123E4, nan) = nan +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E2, 0.34028235E39) = 3.614645465E~38 +pow (0.123E2, 0.34028235E39) = inf +atan2 (0.123E2, 0.17014117E39) = 7.22929093E~38 +pow (0.123E2, 0.17014117E39) = inf +atan2 (0.123E2, 0.123E4) = 0.009999666363 +pow (0.123E2, 0.123E4) = inf +atan2 (0.123E2, 0.123E2) = 0.7853981853 +pow (0.123E2, 0.123E2) = 2.545852141E13 +atan2 (0.123E2, 0.31415927E1) = 1.32072866 +pow (0.123E2, 0.31415927E1) = 2654.837891 +atan2 (0.123E2, 0.27182817E1) = 1.353293777 +pow (0.123E2, 0.27182817E1) = 917.6333618 +atan2 (0.123E2, 0.123E1) = 1.471127629 +pow (0.123E2, 0.123E1) = 21.90702057 +atan2 (0.123E2, 0.123) = 1.560796618 +pow (0.123E2, 0.123) = 1.361627579 +atan2 (0.123E2, 0.123E~2) = 1.570696354 +pow (0.123E2, 0.123E~2) = 1.003091574 +atan2 (0.123E2, 0.11754944E~37) = 1.570796371 +pow (0.123E2, 0.11754944E~37) = 1 +atan2 (0.123E2, 0.5877472E~38) = 1.570796371 +pow (0.123E2, 0.5877472E~38) = 1 +atan2 (0.123E2, 0.1E~44) = 1.570796371 +pow (0.123E2, 0.1E~44) = 1 +atan2 (0.123E2, 0.0) = 1.570796371 +pow (0.123E2, 0.0) = 1 +atan2 (0.123E2, ~0.34028235E39) = 3.141592741 +pow (0.123E2, ~0.34028235E39) = 0 +atan2 (0.123E2, ~0.17014117E39) = 3.141592741 +pow (0.123E2, ~0.17014117E39) = 0 +atan2 (0.123E2, ~0.123E4) = 3.131592989 +pow (0.123E2, ~0.123E4) = 0 +atan2 (0.123E2, ~0.123E2) = 2.356194496 +pow (0.123E2, ~0.123E2) = 3.927958084E~14 +atan2 (0.123E2, ~0.31415927E1) = 1.820863962 +pow (0.123E2, ~0.31415927E1) = 3.766708251E~4 +atan2 (0.123E2, ~0.27182817E1) = 1.788298845 +pow (0.123E2, ~0.27182817E1) = 0.00108975987 +atan2 (0.123E2, ~0.123E1) = 1.670464993 +pow (0.123E2, ~0.123E1) = 0.04564746842 +atan2 (0.123E2, ~0.123) = 1.580796003 +pow (0.123E2, ~0.123) = 0.7344152331 +atan2 (0.123E2, ~0.123E~2) = 1.570896268 +pow (0.123E2, ~0.123E~2) = 0.996917963 +atan2 (0.123E2, ~0.11754944E~37) = 1.570796251 +pow (0.123E2, ~0.11754944E~37) = 1 +atan2 (0.123E2, ~0.5877472E~38) = 1.570796251 +pow (0.123E2, ~0.5877472E~38) = 1 +atan2 (0.123E2, ~0.1E~44) = 1.570796251 +pow (0.123E2, ~0.1E~44) = 1 +atan2 (0.123E2, ~0.0) = 1.570796371 +pow (0.123E2, ~0.0) = 1 +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.123E2, ~inf) = 3.141592741 +pow (0.123E2, ~inf) = 0 +atan2 (0.123E2, nan) = nan +pow (0.123E2, nan) = nan +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.31415927E1, 0.34028235E39) = 9.232312E~39 +pow (0.31415927E1, 0.34028235E39) = inf +atan2 (0.31415927E1, 0.17014117E39) = 1.8464624E~38 +pow (0.31415927E1, 0.17014117E39) = inf +atan2 (0.31415927E1, 0.123E4) = 0.002554134931 +pow (0.31415927E1, 0.123E4) = inf +atan2 (0.31415927E1, 0.123E2) = 0.2500677109 +pow (0.31415927E1, 0.123E2) = 1302997.75 +atan2 (0.31415927E1, 0.31415927E1) = 0.7853981853 +pow (0.31415927E1, 0.31415927E1) = 36.46216583 +atan2 (0.31415927E1, 0.27182817E1) = 0.8575118184 +pow (0.31415927E1, 0.27182817E1) = 22.45915794 +atan2 (0.31415927E1, 0.123E1) = 1.19762063 +pow (0.31415927E1, 0.123E1) = 4.087844372 +atan2 (0.31415927E1, 0.123) = 1.531664252 +pow (0.31415927E1, 0.123) = 1.15119648 +atan2 (0.31415927E1, 0.123E~2) = 1.570404768 +pow (0.31415927E1, 0.123E~2) = 1.001409054 +atan2 (0.31415927E1, 0.11754944E~37) = 1.570796371 +pow (0.31415927E1, 0.11754944E~37) = 1 +atan2 (0.31415927E1, 0.5877472E~38) = 1.570796371 +pow (0.31415927E1, 0.5877472E~38) = 1 +atan2 (0.31415927E1, 0.1E~44) = 1.570796371 +pow (0.31415927E1, 0.1E~44) = 1 +atan2 (0.31415927E1, 0.0) = 1.570796371 +pow (0.31415927E1, 0.0) = 1 +atan2 (0.31415927E1, ~0.34028235E39) = 3.141592741 +pow (0.31415927E1, ~0.34028235E39) = 0 +atan2 (0.31415927E1, ~0.17014117E39) = 3.141592741 +pow (0.31415927E1, ~0.17014117E39) = 0 +atan2 (0.31415927E1, ~0.123E4) = 3.139038563 +pow (0.31415927E1, ~0.123E4) = 0 +atan2 (0.31415927E1, ~0.123E2) = 2.89152503 +pow (0.31415927E1, ~0.123E2) = 7.674610174E~7 +atan2 (0.31415927E1, ~0.31415927E1) = 2.356194496 +pow (0.31415927E1, ~0.31415927E1) = 0.02742568776 +atan2 (0.31415927E1, ~0.27182817E1) = 2.284080982 +pow (0.31415927E1, ~0.27182817E1) = 0.04452526942 +atan2 (0.31415927E1, ~0.123E1) = 1.943971992 +pow (0.31415927E1, ~0.123E1) = 0.2446276993 +atan2 (0.31415927E1, ~0.123) = 1.60992837 +pow (0.31415927E1, ~0.123) = 0.8686614633 +atan2 (0.31415927E1, ~0.123E~2) = 1.571187854 +pow (0.31415927E1, ~0.123E~2) = 0.9985929728 +atan2 (0.31415927E1, ~0.11754944E~37) = 1.570796251 +pow (0.31415927E1, ~0.11754944E~37) = 1 +atan2 (0.31415927E1, ~0.5877472E~38) = 1.570796251 +pow (0.31415927E1, ~0.5877472E~38) = 1 +atan2 (0.31415927E1, ~0.1E~44) = 1.570796251 +pow (0.31415927E1, ~0.1E~44) = 1 +atan2 (0.31415927E1, ~0.0) = 1.570796371 +pow (0.31415927E1, ~0.0) = 1 +atan2 (0.31415927E1, inf) = 0 +pow (0.31415927E1, inf) = inf +atan2 (0.31415927E1, ~inf) = 3.141592741 +pow (0.31415927E1, ~inf) = 0 +atan2 (0.31415927E1, nan) = nan +pow (0.31415927E1, nan) = nan +atan2 (0.31415927E1, inf) = 0 +pow (0.31415927E1, inf) = inf +atan2 (0.27182817E1, 0.34028235E39) = 7.988312091E~39 +pow (0.27182817E1, 0.34028235E39) = inf +atan2 (0.27182817E1, 0.17014117E39) = 1.597662558E~38 +pow (0.27182817E1, 0.17014117E39) = inf +atan2 (0.27182817E1, 0.123E4) = 0.002209981671 +pow (0.27182817E1, 0.123E4) = inf +atan2 (0.27182817E1, 0.123E2) = 0.2175025195 +pow (0.27182817E1, 0.123E2) = 219695.9531 +atan2 (0.27182817E1, 0.31415927E1) = 0.7132844925 +pow (0.27182817E1, 0.31415927E1) = 23.14069176 +atan2 (0.27182817E1, 0.27182817E1) = 0.7853981853 +pow (0.27182817E1, 0.27182817E1) = 15.15425968 +atan2 (0.27182817E1, 0.123E1) = 1.145872235 +pow (0.27182817E1, 0.123E1) = 3.421229362 +atan2 (0.27182817E1, 0.123) = 1.525578022 +pow (0.27182817E1, 0.123) = 1.130884409 +atan2 (0.27182817E1, 0.123E~2) = 1.570343852 +pow (0.27182817E1, 0.123E~2) = 1.001230717 +atan2 (0.27182817E1, 0.11754944E~37) = 1.570796371 +pow (0.27182817E1, 0.11754944E~37) = 1 +atan2 (0.27182817E1, 0.5877472E~38) = 1.570796371 +pow (0.27182817E1, 0.5877472E~38) = 1 +atan2 (0.27182817E1, 0.1E~44) = 1.570796371 +pow (0.27182817E1, 0.1E~44) = 1 +atan2 (0.27182817E1, 0.0) = 1.570796371 +pow (0.27182817E1, 0.0) = 1 +atan2 (0.27182817E1, ~0.34028235E39) = 3.141592741 +pow (0.27182817E1, ~0.34028235E39) = 0 +atan2 (0.27182817E1, ~0.17014117E39) = 3.141592741 +pow (0.27182817E1, ~0.17014117E39) = 0 +atan2 (0.27182817E1, ~0.123E4) = 3.139382601 +pow (0.27182817E1, ~0.123E4) = 0 +atan2 (0.27182817E1, ~0.123E2) = 2.924090147 +pow (0.27182817E1, ~0.123E2) = 4.551745405E~6 +atan2 (0.27182817E1, ~0.31415927E1) = 2.428308249 +pow (0.27182817E1, ~0.31415927E1) = 0.04321391881 +atan2 (0.27182817E1, ~0.27182817E1) = 2.356194496 +pow (0.27182817E1, ~0.27182817E1) = 0.06598804891 +atan2 (0.27182817E1, ~0.123E1) = 1.995720387 +pow (0.27182817E1, ~0.123E1) = 0.2922925949 +atan2 (0.27182817E1, ~0.123) = 1.6160146 +pow (0.27182817E1, ~0.123) = 0.8842636347 +atan2 (0.27182817E1, ~0.123E~2) = 1.57124877 +pow (0.27182817E1, ~0.123E~2) = 0.9987707734 +atan2 (0.27182817E1, ~0.11754944E~37) = 1.570796251 +pow (0.27182817E1, ~0.11754944E~37) = 1 +atan2 (0.27182817E1, ~0.5877472E~38) = 1.570796251 +pow (0.27182817E1, ~0.5877472E~38) = 1 +atan2 (0.27182817E1, ~0.1E~44) = 1.570796251 +pow (0.27182817E1, ~0.1E~44) = 1 +atan2 (0.27182817E1, ~0.0) = 1.570796371 +pow (0.27182817E1, ~0.0) = 1 +atan2 (0.27182817E1, inf) = 0 +pow (0.27182817E1, inf) = inf +atan2 (0.27182817E1, ~inf) = 3.141592741 +pow (0.27182817E1, ~inf) = 0 +atan2 (0.27182817E1, nan) = nan +pow (0.27182817E1, nan) = nan +atan2 (0.27182817E1, inf) = 0 +pow (0.27182817E1, inf) = inf +atan2 (0.123E1, 0.34028235E39) = 3.614645185E~39 +pow (0.123E1, 0.34028235E39) = inf +atan2 (0.123E1, 0.17014117E39) = 7.22929037E~39 +pow (0.123E1, 0.17014117E39) = inf +atan2 (0.123E1, 0.123E4) = 9.999996983E~4 +pow (0.123E1, 0.123E4) = inf +atan2 (0.123E1, 0.123E2) = 0.09966865182 +pow (0.123E1, 0.123E2) = 12.75947952 +atan2 (0.123E1, 0.31415927E1) = 0.3731757402 +pow (0.123E1, 0.31415927E1) = 1.916219592 +atan2 (0.123E1, 0.27182817E1) = 0.4249241054 +pow (0.123E1, 0.27182817E1) = 1.755445838 +atan2 (0.123E1, 0.123E1) = 0.7853981853 +pow (0.123E1, 0.123E1) = 1.289981008 +atan2 (0.123E1, 0.123) = 1.471127629 +pow (0.123E1, 0.123) = 1.025789738 +atan2 (0.123E1, 0.123E~2) = 1.569796324 +pow (0.123E1, 0.123E~2) = 1.000254631 +atan2 (0.123E1, 0.11754944E~37) = 1.570796371 +pow (0.123E1, 0.11754944E~37) = 1 +atan2 (0.123E1, 0.5877472E~38) = 1.570796371 +pow (0.123E1, 0.5877472E~38) = 1 +atan2 (0.123E1, 0.1E~44) = 1.570796371 +pow (0.123E1, 0.1E~44) = 1 +atan2 (0.123E1, 0.0) = 1.570796371 +pow (0.123E1, 0.0) = 1 +atan2 (0.123E1, ~0.34028235E39) = 3.141592741 +pow (0.123E1, ~0.34028235E39) = 0 +atan2 (0.123E1, ~0.17014117E39) = 3.141592741 +pow (0.123E1, ~0.17014117E39) = 0 +atan2 (0.123E1, ~0.123E4) = 3.140592575 +pow (0.123E1, ~0.123E4) = 0 +atan2 (0.123E1, ~0.123E2) = 3.041924 +pow (0.123E1, ~0.123E2) = 0.07837310433 +atan2 (0.123E1, ~0.31415927E1) = 2.768416882 +pow (0.123E1, ~0.31415927E1) = 0.5218608975 +atan2 (0.123E1, ~0.27182817E1) = 2.716668606 +pow (0.123E1, ~0.27182817E1) = 0.5696558356 +atan2 (0.123E1, ~0.123E1) = 2.356194496 +pow (0.123E1, ~0.123E1) = 0.7752052546 +atan2 (0.123E1, ~0.123) = 1.670464993 +pow (0.123E1, ~0.123) = 0.9748587012 +atan2 (0.123E1, ~0.123E~2) = 1.571796298 +pow (0.123E1, ~0.123E~2) = 0.9997454286 +atan2 (0.123E1, ~0.11754944E~37) = 1.570796251 +pow (0.123E1, ~0.11754944E~37) = 1 +atan2 (0.123E1, ~0.5877472E~38) = 1.570796251 +pow (0.123E1, ~0.5877472E~38) = 1 +atan2 (0.123E1, ~0.1E~44) = 1.570796251 +pow (0.123E1, ~0.1E~44) = 1 +atan2 (0.123E1, ~0.0) = 1.570796371 +pow (0.123E1, ~0.0) = 1 +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123E1, ~inf) = 3.141592741 +pow (0.123E1, ~inf) = 0 +atan2 (0.123E1, nan) = nan +pow (0.123E1, nan) = nan +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123, 0.34028235E39) = 3.614649389E~40 +pow (0.123, 0.34028235E39) = 0 +atan2 (0.123, 0.17014117E39) = 7.229284764E~40 +pow (0.123, 0.17014117E39) = 0 +atan2 (0.123, 0.123E4) = 1.000000047E~4 +pow (0.123, 0.123E4) = 0 +atan2 (0.123, 0.123E2) = 0.009999666363 +pow (0.123, 0.123E2) = 6.394886357E~12 +atan2 (0.123, 0.31415927E1) = 0.0391321294 +pow (0.123, 0.31415927E1) = 0.001383096678 +atan2 (0.123, 0.27182817E1) = 0.04521832988 +pow (0.123, 0.27182817E1) = 0.00335819344 +atan2 (0.123, 0.123E1) = 0.09966865182 +pow (0.123, 0.123E1) = 0.07595970482 +atan2 (0.123, 0.123) = 0.7853981853 +pow (0.123, 0.123) = 0.7727843523 +atan2 (0.123, 0.123E~2) = 1.560796618 +pow (0.123, 0.123E~2) = 0.9974257946 +atan2 (0.123, 0.11754944E~37) = 1.570796371 +pow (0.123, 0.11754944E~37) = 1 +atan2 (0.123, 0.5877472E~38) = 1.570796371 +pow (0.123, 0.5877472E~38) = 1 +atan2 (0.123, 0.1E~44) = 1.570796371 +pow (0.123, 0.1E~44) = 1 +atan2 (0.123, 0.0) = 1.570796371 +pow (0.123, 0.0) = 1 +atan2 (0.123, ~0.34028235E39) = 3.141592741 +pow (0.123, ~0.34028235E39) = inf +atan2 (0.123, ~0.17014117E39) = 3.141592741 +pow (0.123, ~0.17014117E39) = inf +atan2 (0.123, ~0.123E4) = 3.141492605 +pow (0.123, ~0.123E4) = inf +atan2 (0.123, ~0.123E2) = 3.131592989 +pow (0.123, ~0.123E2) = 156374941700 +atan2 (0.123, ~0.31415927E1) = 3.102460623 +pow (0.123, ~0.31415927E1) = 723.0152588 +atan2 (0.123, ~0.27182817E1) = 3.096374273 +pow (0.123, ~0.27182817E1) = 297.7791443 +atan2 (0.123, ~0.123E1) = 3.041924 +pow (0.123, ~0.123E1) = 13.16487408 +atan2 (0.123, ~0.123) = 2.356194496 +pow (0.123, ~0.123) = 1.294022083 +atan2 (0.123, ~0.123E~2) = 1.580796003 +pow (0.123, ~0.123E~2) = 1.002580881 +atan2 (0.123, ~0.11754944E~37) = 1.570796251 +pow (0.123, ~0.11754944E~37) = 1 +atan2 (0.123, ~0.5877472E~38) = 1.570796251 +pow (0.123, ~0.5877472E~38) = 1 +atan2 (0.123, ~0.1E~44) = 1.570796251 +pow (0.123, ~0.1E~44) = 1 +atan2 (0.123, ~0.0) = 1.570796371 +pow (0.123, ~0.0) = 1 +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123, ~inf) = 3.141592741 +pow (0.123, ~inf) = inf +atan2 (0.123, nan) = nan +pow (0.123, nan) = nan +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123E~2, 0.34028235E39) = 3.613948739E~42 +pow (0.123E~2, 0.34028235E39) = 0 +atan2 (0.123E~2, 0.17014117E39) = 7.229298777E~42 +pow (0.123E~2, 0.17014117E39) = 0 +atan2 (0.123E~2, 0.123E4) = 9.999999975E~7 +pow (0.123E~2, 0.123E4) = 0 +atan2 (0.123E~2, 0.123E2) = 1.000000047E~4 +pow (0.123E~2, 0.123E2) = 1.606321748E~36 +atan2 (0.123E~2, 0.31415927E1) = 3.915211419E~4 +pow (0.123E~2, 0.31415927E1) = 7.205548935E~10 +atan2 (0.123E~2, 0.27182817E1) = 4.524917167E~4 +pow (0.123E~2, 0.27182817E1) = 1.228972657E~8 +atan2 (0.123E~2, 0.123E1) = 9.999996983E~4 +pow (0.123E~2, 0.123E1) = 2.633802651E~4 +atan2 (0.123E~2, 0.123) = 0.009999666363 +pow (0.123E~2, 0.123) = 0.4385896027 +atan2 (0.123E~2, 0.123E~2) = 0.7853981853 +pow (0.123E~2, 0.123E~2) = 0.9917919636 +atan2 (0.123E~2, 0.11754944E~37) = 1.570796371 +pow (0.123E~2, 0.11754944E~37) = 1 +atan2 (0.123E~2, 0.5877472E~38) = 1.570796371 +pow (0.123E~2, 0.5877472E~38) = 1 +atan2 (0.123E~2, 0.1E~44) = 1.570796371 +pow (0.123E~2, 0.1E~44) = 1 +atan2 (0.123E~2, 0.0) = 1.570796371 +pow (0.123E~2, 0.0) = 1 +atan2 (0.123E~2, ~0.34028235E39) = 3.141592741 +pow (0.123E~2, ~0.34028235E39) = inf +atan2 (0.123E~2, ~0.17014117E39) = 3.141592741 +pow (0.123E~2, ~0.17014117E39) = inf +atan2 (0.123E~2, ~0.123E4) = 3.141591549 +pow (0.123E~2, ~0.123E4) = inf +atan2 (0.123E~2, ~0.123E2) = 3.141492605 +pow (0.123E~2, ~0.123E2) = 6.225402783E35 +atan2 (0.123E~2, ~0.31415927E1) = 3.141201019 +pow (0.123E~2, ~0.31415927E1) = 1387819264 +atan2 (0.123E~2, ~0.27182817E1) = 3.141140223 +pow (0.123E~2, ~0.27182817E1) = 81368776 +atan2 (0.123E~2, ~0.123E1) = 3.140592575 +pow (0.123E~2, ~0.123E1) = 3796.791504 +atan2 (0.123E~2, ~0.123) = 3.131592989 +pow (0.123E~2, ~0.123) = 2.280035973 +atan2 (0.123E~2, ~0.123E~2) = 2.356194496 +pow (0.123E~2, ~0.123E~2) = 1.008275986 +atan2 (0.123E~2, ~0.11754944E~37) = 1.570796251 +pow (0.123E~2, ~0.11754944E~37) = 1 +atan2 (0.123E~2, ~0.5877472E~38) = 1.570796251 +pow (0.123E~2, ~0.5877472E~38) = 1 +atan2 (0.123E~2, ~0.1E~44) = 1.570796251 +pow (0.123E~2, ~0.1E~44) = 1 +atan2 (0.123E~2, ~0.0) = 1.570796371 +pow (0.123E~2, ~0.0) = 1 +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.123E~2, ~inf) = 3.141592741 +pow (0.123E~2, ~inf) = inf +atan2 (0.123E~2, nan) = nan +pow (0.123E~2, nan) = nan +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.11754944E~37, 0.34028235E39) = 0 +pow (0.11754944E~37, 0.34028235E39) = 0 +atan2 (0.11754944E~37, 0.17014117E39) = 0 +pow (0.11754944E~37, 0.17014117E39) = 0 +atan2 (0.11754944E~37, 0.123E4) = 9.556855527E~42 +pow (0.11754944E~37, 0.123E4) = 0 +atan2 (0.11754944E~37, 0.123E2) = 9.55686954E~40 +pow (0.11754944E~37, 0.123E2) = 0 +atan2 (0.11754944E~37, 0.31415927E1) = 3.74171493E~39 +pow (0.11754944E~37, 0.31415927E1) = 0 +atan2 (0.11754944E~37, 0.27182817E1) = 4.324402857E~39 +pow (0.11754944E~37, 0.27182817E1) = 0 +atan2 (0.11754944E~37, 0.123E1) = 9.556863934E~39 +pow (0.11754944E~37, 0.123E1) = 0 +atan2 (0.11754944E~37, 0.123) = 9.556864495E~38 +pow (0.11754944E~37, 0.123) = 2.160911572E~5 +atan2 (0.11754944E~37, 0.123E~2) = 9.556864495E~36 +pow (0.11754944E~37, 0.123E~2) = 0.8981448412 +atan2 (0.11754944E~37, 0.11754944E~37) = 0.7853981853 +pow (0.11754944E~37, 0.11754944E~37) = 1 +atan2 (0.11754944E~37, 0.5877472E~38) = 1.107148767 +pow (0.11754944E~37, 0.5877472E~38) = 1 +atan2 (0.11754944E~37, 0.1E~44) = 1.570796251 +pow (0.11754944E~37, 0.1E~44) = 1 +atan2 (0.11754944E~37, 0.0) = 1.570796371 +pow (0.11754944E~37, 0.0) = 1 +atan2 (0.11754944E~37, ~0.34028235E39) = 3.141592741 +pow (0.11754944E~37, ~0.34028235E39) = inf +atan2 (0.11754944E~37, ~0.17014117E39) = 3.141592741 +pow (0.11754944E~37, ~0.17014117E39) = inf +atan2 (0.11754944E~37, ~0.123E4) = 3.141592741 +pow (0.11754944E~37, ~0.123E4) = inf +atan2 (0.11754944E~37, ~0.123E2) = 3.141592741 +pow (0.11754944E~37, ~0.123E2) = inf +atan2 (0.11754944E~37, ~0.31415927E1) = 3.141592741 +pow (0.11754944E~37, ~0.31415927E1) = inf +atan2 (0.11754944E~37, ~0.27182817E1) = 3.141592741 +pow (0.11754944E~37, ~0.27182817E1) = inf +atan2 (0.11754944E~37, ~0.123E1) = 3.141592741 +pow (0.11754944E~37, ~0.123E1) = inf +atan2 (0.11754944E~37, ~0.123) = 3.141592741 +pow (0.11754944E~37, ~0.123) = 46276.76562 +atan2 (0.11754944E~37, ~0.123E~2) = 3.141592741 +pow (0.11754944E~37, ~0.123E~2) = 1.113406181 +atan2 (0.11754944E~37, ~0.11754944E~37) = 2.356194496 +pow (0.11754944E~37, ~0.11754944E~37) = 1 +atan2 (0.11754944E~37, ~0.5877472E~38) = 2.034443855 +pow (0.11754944E~37, ~0.5877472E~38) = 1 +atan2 (0.11754944E~37, ~0.1E~44) = 1.570796371 +pow (0.11754944E~37, ~0.1E~44) = 1 +atan2 (0.11754944E~37, ~0.0) = 1.570796371 +pow (0.11754944E~37, ~0.0) = 1 +atan2 (0.11754944E~37, inf) = 0 +pow (0.11754944E~37, inf) = 0 +atan2 (0.11754944E~37, ~inf) = 3.141592741 +pow (0.11754944E~37, ~inf) = inf +atan2 (0.11754944E~37, nan) = nan +pow (0.11754944E~37, nan) = nan +atan2 (0.11754944E~37, inf) = 0 +pow (0.11754944E~37, inf) = 0 +atan2 (0.5877472E~38, 0.34028235E39) = 0 +pow (0.5877472E~38, 0.34028235E39) = 0 +atan2 (0.5877472E~38, 0.17014117E39) = 0 +pow (0.5877472E~38, 0.17014117E39) = 0 +atan2 (0.5877472E~38, 0.123E4) = 4.778427763E~42 +pow (0.5877472E~38, 0.123E4) = 0 +atan2 (0.5877472E~38, 0.123E2) = 4.778427763E~40 +pow (0.5877472E~38, 0.123E2) = 0 +atan2 (0.5877472E~38, 0.31415927E1) = 1.870856764E~39 +pow (0.5877472E~38, 0.31415927E1) = 0 +atan2 (0.5877472E~38, 0.27182817E1) = 2.162200728E~39 +pow (0.5877472E~38, 0.27182817E1) = 0 +atan2 (0.5877472E~38, 0.123E1) = 4.778431967E~39 +pow (0.5877472E~38, 0.123E1) = 0 +atan2 (0.5877472E~38, 0.123) = 4.778432248E~38 +pow (0.5877472E~38, 0.123) = 1.984313531E~5 +atan2 (0.5877472E~38, 0.123E~2) = 4.778432248E~36 +pow (0.5877472E~38, 0.123E~2) = 0.8973793983 +atan2 (0.5877472E~38, 0.11754944E~37) = 0.463647604 +pow (0.5877472E~38, 0.11754944E~37) = 1 +atan2 (0.5877472E~38, 0.5877472E~38) = 0.7853981853 +pow (0.5877472E~38, 0.5877472E~38) = 1 +atan2 (0.5877472E~38, 0.1E~44) = 1.570796132 +pow (0.5877472E~38, 0.1E~44) = 1 +atan2 (0.5877472E~38, 0.0) = 1.570796371 +pow (0.5877472E~38, 0.0) = 1 +atan2 (0.5877472E~38, ~0.34028235E39) = 3.141592741 +pow (0.5877472E~38, ~0.34028235E39) = inf +atan2 (0.5877472E~38, ~0.17014117E39) = 3.141592741 +pow (0.5877472E~38, ~0.17014117E39) = inf +atan2 (0.5877472E~38, ~0.123E4) = 3.141592741 +pow (0.5877472E~38, ~0.123E4) = inf +atan2 (0.5877472E~38, ~0.123E2) = 3.141592741 +pow (0.5877472E~38, ~0.123E2) = inf +atan2 (0.5877472E~38, ~0.31415927E1) = 3.141592741 +pow (0.5877472E~38, ~0.31415927E1) = inf +atan2 (0.5877472E~38, ~0.27182817E1) = 3.141592741 +pow (0.5877472E~38, ~0.27182817E1) = inf +atan2 (0.5877472E~38, ~0.123E1) = 3.141592741 +pow (0.5877472E~38, ~0.123E1) = inf +atan2 (0.5877472E~38, ~0.123) = 3.141592741 +pow (0.5877472E~38, ~0.123) = 50395.26172 +atan2 (0.5877472E~38, ~0.123E~2) = 3.141592741 +pow (0.5877472E~38, ~0.123E~2) = 1.114355803 +atan2 (0.5877472E~38, ~0.11754944E~37) = 2.677945137 +pow (0.5877472E~38, ~0.11754944E~37) = 1 +atan2 (0.5877472E~38, ~0.5877472E~38) = 2.356194496 +pow (0.5877472E~38, ~0.5877472E~38) = 1 +atan2 (0.5877472E~38, ~0.1E~44) = 1.57079649 +pow (0.5877472E~38, ~0.1E~44) = 1 +atan2 (0.5877472E~38, ~0.0) = 1.570796371 +pow (0.5877472E~38, ~0.0) = 1 +atan2 (0.5877472E~38, inf) = 0 +pow (0.5877472E~38, inf) = 0 +atan2 (0.5877472E~38, ~inf) = 3.141592741 +pow (0.5877472E~38, ~inf) = inf +atan2 (0.5877472E~38, nan) = nan +pow (0.5877472E~38, nan) = nan +atan2 (0.5877472E~38, inf) = 0 +pow (0.5877472E~38, inf) = 0 +atan2 (0.1E~44, 0.34028235E39) = 0 +pow (0.1E~44, 0.34028235E39) = 0 +atan2 (0.1E~44, 0.17014117E39) = 0 +pow (0.1E~44, 0.17014117E39) = 0 +atan2 (0.1E~44, 0.123E4) = 0 +pow (0.1E~44, 0.123E4) = 0 +atan2 (0.1E~44, 0.123E2) = 0 +pow (0.1E~44, 0.123E2) = 0 +atan2 (0.1E~44, 0.31415927E1) = 0 +pow (0.1E~44, 0.31415927E1) = 0 +atan2 (0.1E~44, 0.27182817E1) = 0 +pow (0.1E~44, 0.27182817E1) = 0 +atan2 (0.1E~44, 0.123E1) = 1.401298464E~45 +pow (0.1E~44, 0.123E1) = 0 +atan2 (0.1E~44, 0.123) = 1.121038771E~44 +pow (0.1E~44, 0.123) = 3.041046966E~6 +atan2 (0.1E~44, 0.123E~2) = 1.139255651E~42 +pow (0.1E~44, 0.123E~2) = 0.8807045221 +atan2 (0.1E~44, 0.11754944E~37) = 1.192092896E~7 +pow (0.1E~44, 0.11754944E~37) = 1 +atan2 (0.1E~44, 0.5877472E~38) = 2.384185791E~7 +pow (0.1E~44, 0.5877472E~38) = 1 +atan2 (0.1E~44, 0.1E~44) = 0.7853981853 +pow (0.1E~44, 0.1E~44) = 1 +atan2 (0.1E~44, 0.0) = 1.570796371 +pow (0.1E~44, 0.0) = 1 +atan2 (0.1E~44, ~0.34028235E39) = 3.141592741 +pow (0.1E~44, ~0.34028235E39) = inf +atan2 (0.1E~44, ~0.17014117E39) = 3.141592741 +pow (0.1E~44, ~0.17014117E39) = inf +atan2 (0.1E~44, ~0.123E4) = 3.141592741 +pow (0.1E~44, ~0.123E4) = inf +atan2 (0.1E~44, ~0.123E2) = 3.141592741 +pow (0.1E~44, ~0.123E2) = inf +atan2 (0.1E~44, ~0.31415927E1) = 3.141592741 +pow (0.1E~44, ~0.31415927E1) = inf +atan2 (0.1E~44, ~0.27182817E1) = 3.141592741 +pow (0.1E~44, ~0.27182817E1) = inf +atan2 (0.1E~44, ~0.123E1) = 3.141592741 +pow (0.1E~44, ~0.123E1) = inf +atan2 (0.1E~44, ~0.123) = 3.141592741 +pow (0.1E~44, ~0.123) = 328834.125 +atan2 (0.1E~44, ~0.123E~2) = 3.141592741 +pow (0.1E~44, ~0.123E~2) = 1.135454535 +atan2 (0.1E~44, ~0.11754944E~37) = 3.141592503 +pow (0.1E~44, ~0.11754944E~37) = 1 +atan2 (0.1E~44, ~0.5877472E~38) = 3.141592503 +pow (0.1E~44, ~0.5877472E~38) = 1 +atan2 (0.1E~44, ~0.1E~44) = 2.356194496 +pow (0.1E~44, ~0.1E~44) = 1 +atan2 (0.1E~44, ~0.0) = 1.570796371 +pow (0.1E~44, ~0.0) = 1 +atan2 (0.1E~44, inf) = 0 +pow (0.1E~44, inf) = 0 +atan2 (0.1E~44, ~inf) = 3.141592741 +pow (0.1E~44, ~inf) = inf +atan2 (0.1E~44, nan) = nan +pow (0.1E~44, nan) = nan +atan2 (0.1E~44, inf) = 0 +pow (0.1E~44, inf) = 0 +atan2 (0.0, 0.34028235E39) = 0 +pow (0.0, 0.34028235E39) = 0 +atan2 (0.0, 0.17014117E39) = 0 +pow (0.0, 0.17014117E39) = 0 +atan2 (0.0, 0.123E4) = 0 +pow (0.0, 0.123E4) = 0 +atan2 (0.0, 0.123E2) = 0 +pow (0.0, 0.123E2) = 0 +atan2 (0.0, 0.31415927E1) = 0 +pow (0.0, 0.31415927E1) = 0 +atan2 (0.0, 0.27182817E1) = 0 +pow (0.0, 0.27182817E1) = 0 +atan2 (0.0, 0.123E1) = 0 +pow (0.0, 0.123E1) = 0 +atan2 (0.0, 0.123) = 0 +pow (0.0, 0.123) = 0 +atan2 (0.0, 0.123E~2) = 0 +pow (0.0, 0.123E~2) = 0 +atan2 (0.0, 0.11754944E~37) = 0 +pow (0.0, 0.11754944E~37) = 0 +atan2 (0.0, 0.5877472E~38) = 0 +pow (0.0, 0.5877472E~38) = 0 +atan2 (0.0, 0.1E~44) = 0 +pow (0.0, 0.1E~44) = 0 +atan2 (0.0, 0.0) = 0 +pow (0.0, 0.0) = 1 +atan2 (0.0, ~0.34028235E39) = 3.141592741 +pow (0.0, ~0.34028235E39) = inf +atan2 (0.0, ~0.17014117E39) = 3.141592741 +pow (0.0, ~0.17014117E39) = inf +atan2 (0.0, ~0.123E4) = 3.141592741 +pow (0.0, ~0.123E4) = inf +atan2 (0.0, ~0.123E2) = 3.141592741 +pow (0.0, ~0.123E2) = inf +atan2 (0.0, ~0.31415927E1) = 3.141592741 +pow (0.0, ~0.31415927E1) = inf +atan2 (0.0, ~0.27182817E1) = 3.141592741 +pow (0.0, ~0.27182817E1) = inf +atan2 (0.0, ~0.123E1) = 3.141592741 +pow (0.0, ~0.123E1) = inf +atan2 (0.0, ~0.123) = 3.141592741 +pow (0.0, ~0.123) = inf +atan2 (0.0, ~0.123E~2) = 3.141592741 +pow (0.0, ~0.123E~2) = inf +atan2 (0.0, ~0.11754944E~37) = 3.141592741 +pow (0.0, ~0.11754944E~37) = inf +atan2 (0.0, ~0.5877472E~38) = 3.141592741 +pow (0.0, ~0.5877472E~38) = inf +atan2 (0.0, ~0.1E~44) = 3.141592741 +pow (0.0, ~0.1E~44) = inf +atan2 (0.0, ~0.0) = 3.141592741 +pow (0.0, ~0.0) = 1 +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (0.0, ~inf) = 3.141592741 +pow (0.0, ~inf) = inf +atan2 (0.0, nan) = nan +pow (0.0, nan) = nan +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (~0.34028235E39, 0.34028235E39) = ~0.7853981853 +pow (~0.34028235E39, 0.34028235E39) = inf +atan2 (~0.34028235E39, 0.17014117E39) = ~1.107148767 +pow (~0.34028235E39, 0.17014117E39) = inf +atan2 (~0.34028235E39, 0.123E4) = ~1.570796371 +pow (~0.34028235E39, 0.123E4) = inf +atan2 (~0.34028235E39, 0.123E2) = ~1.570796371 +pow (~0.34028235E39, 0.123E2) = nan +atan2 (~0.34028235E39, 0.31415927E1) = ~1.570796371 +pow (~0.34028235E39, 0.31415927E1) = nan +atan2 (~0.34028235E39, 0.27182817E1) = ~1.570796371 +pow (~0.34028235E39, 0.27182817E1) = nan +atan2 (~0.34028235E39, 0.123E1) = ~1.570796371 +pow (~0.34028235E39, 0.123E1) = nan +atan2 (~0.34028235E39, 0.123) = ~1.570796371 +pow (~0.34028235E39, 0.123) = nan +atan2 (~0.34028235E39, 0.123E~2) = ~1.570796371 +pow (~0.34028235E39, 0.123E~2) = nan +atan2 (~0.34028235E39, 0.11754944E~37) = ~1.570796371 +pow (~0.34028235E39, 0.11754944E~37) = nan +atan2 (~0.34028235E39, 0.5877472E~38) = ~1.570796371 +pow (~0.34028235E39, 0.5877472E~38) = nan +atan2 (~0.34028235E39, 0.1E~44) = ~1.570796371 +pow (~0.34028235E39, 0.1E~44) = nan +atan2 (~0.34028235E39, 0.0) = ~1.570796371 +pow (~0.34028235E39, 0.0) = 1 +atan2 (~0.34028235E39, ~0.34028235E39) = ~2.356194496 +pow (~0.34028235E39, ~0.34028235E39) = 0 +atan2 (~0.34028235E39, ~0.17014117E39) = ~2.034443855 +pow (~0.34028235E39, ~0.17014117E39) = 0 +atan2 (~0.34028235E39, ~0.123E4) = ~1.570796251 +pow (~0.34028235E39, ~0.123E4) = 0 +atan2 (~0.34028235E39, ~0.123E2) = ~1.570796251 +pow (~0.34028235E39, ~0.123E2) = nan +atan2 (~0.34028235E39, ~0.31415927E1) = ~1.570796251 +pow (~0.34028235E39, ~0.31415927E1) = nan +atan2 (~0.34028235E39, ~0.27182817E1) = ~1.570796251 +pow (~0.34028235E39, ~0.27182817E1) = nan +atan2 (~0.34028235E39, ~0.123E1) = ~1.570796251 +pow (~0.34028235E39, ~0.123E1) = nan +atan2 (~0.34028235E39, ~0.123) = ~1.570796251 +pow (~0.34028235E39, ~0.123) = nan +atan2 (~0.34028235E39, ~0.123E~2) = ~1.570796251 +pow (~0.34028235E39, ~0.123E~2) = nan +atan2 (~0.34028235E39, ~0.11754944E~37) = ~1.570796251 +pow (~0.34028235E39, ~0.11754944E~37) = nan +atan2 (~0.34028235E39, ~0.5877472E~38) = ~1.570796251 +pow (~0.34028235E39, ~0.5877472E~38) = nan +atan2 (~0.34028235E39, ~0.1E~44) = ~1.570796251 +pow (~0.34028235E39, ~0.1E~44) = nan +atan2 (~0.34028235E39, ~0.0) = ~1.570796371 +pow (~0.34028235E39, ~0.0) = 1 +atan2 (~0.34028235E39, inf) = 0 +pow (~0.34028235E39, inf) = inf +atan2 (~0.34028235E39, ~inf) = ~3.141592741 +pow (~0.34028235E39, ~inf) = 0 +atan2 (~0.34028235E39, nan) = nan +pow (~0.34028235E39, nan) = nan +atan2 (~0.34028235E39, inf) = 0 +pow (~0.34028235E39, inf) = inf +atan2 (~0.17014117E39, 0.34028235E39) = ~0.463647604 +pow (~0.17014117E39, 0.34028235E39) = inf +atan2 (~0.17014117E39, 0.17014117E39) = ~0.7853981853 +pow (~0.17014117E39, 0.17014117E39) = inf +atan2 (~0.17014117E39, 0.123E4) = ~1.570796371 +pow (~0.17014117E39, 0.123E4) = inf +atan2 (~0.17014117E39, 0.123E2) = ~1.570796371 +pow (~0.17014117E39, 0.123E2) = nan +atan2 (~0.17014117E39, 0.31415927E1) = ~1.570796371 +pow (~0.17014117E39, 0.31415927E1) = nan +atan2 (~0.17014117E39, 0.27182817E1) = ~1.570796371 +pow (~0.17014117E39, 0.27182817E1) = nan +atan2 (~0.17014117E39, 0.123E1) = ~1.570796371 +pow (~0.17014117E39, 0.123E1) = nan +atan2 (~0.17014117E39, 0.123) = ~1.570796371 +pow (~0.17014117E39, 0.123) = nan +atan2 (~0.17014117E39, 0.123E~2) = ~1.570796371 +pow (~0.17014117E39, 0.123E~2) = nan +atan2 (~0.17014117E39, 0.11754944E~37) = ~1.570796371 +pow (~0.17014117E39, 0.11754944E~37) = nan +atan2 (~0.17014117E39, 0.5877472E~38) = ~1.570796371 +pow (~0.17014117E39, 0.5877472E~38) = nan +atan2 (~0.17014117E39, 0.1E~44) = ~1.570796371 +pow (~0.17014117E39, 0.1E~44) = nan +atan2 (~0.17014117E39, 0.0) = ~1.570796371 +pow (~0.17014117E39, 0.0) = 1 +atan2 (~0.17014117E39, ~0.34028235E39) = ~2.677945137 +pow (~0.17014117E39, ~0.34028235E39) = 0 +atan2 (~0.17014117E39, ~0.17014117E39) = ~2.356194496 +pow (~0.17014117E39, ~0.17014117E39) = 0 +atan2 (~0.17014117E39, ~0.123E4) = ~1.570796251 +pow (~0.17014117E39, ~0.123E4) = 0 +atan2 (~0.17014117E39, ~0.123E2) = ~1.570796251 +pow (~0.17014117E39, ~0.123E2) = nan +atan2 (~0.17014117E39, ~0.31415927E1) = ~1.570796251 +pow (~0.17014117E39, ~0.31415927E1) = nan +atan2 (~0.17014117E39, ~0.27182817E1) = ~1.570796251 +pow (~0.17014117E39, ~0.27182817E1) = nan +atan2 (~0.17014117E39, ~0.123E1) = ~1.570796251 +pow (~0.17014117E39, ~0.123E1) = nan +atan2 (~0.17014117E39, ~0.123) = ~1.570796251 +pow (~0.17014117E39, ~0.123) = nan +atan2 (~0.17014117E39, ~0.123E~2) = ~1.570796251 +pow (~0.17014117E39, ~0.123E~2) = nan +atan2 (~0.17014117E39, ~0.11754944E~37) = ~1.570796251 +pow (~0.17014117E39, ~0.11754944E~37) = nan +atan2 (~0.17014117E39, ~0.5877472E~38) = ~1.570796251 +pow (~0.17014117E39, ~0.5877472E~38) = nan +atan2 (~0.17014117E39, ~0.1E~44) = ~1.570796251 +pow (~0.17014117E39, ~0.1E~44) = nan +atan2 (~0.17014117E39, ~0.0) = ~1.570796371 +pow (~0.17014117E39, ~0.0) = 1 +atan2 (~0.17014117E39, inf) = 0 +pow (~0.17014117E39, inf) = inf +atan2 (~0.17014117E39, ~inf) = ~3.141592741 +pow (~0.17014117E39, ~inf) = 0 +atan2 (~0.17014117E39, nan) = nan +pow (~0.17014117E39, nan) = nan +atan2 (~0.17014117E39, inf) = 0 +pow (~0.17014117E39, inf) = inf +atan2 (~0.123E4, 0.34028235E39) = ~3.614645488E~36 +pow (~0.123E4, 0.34028235E39) = inf +atan2 (~0.123E4, 0.17014117E39) = ~7.229290975E~36 +pow (~0.123E4, 0.17014117E39) = inf +atan2 (~0.123E4, 0.123E4) = ~0.7853981853 +pow (~0.123E4, 0.123E4) = inf +atan2 (~0.123E4, 0.123E2) = ~1.560796618 +pow (~0.123E4, 0.123E2) = nan +atan2 (~0.123E4, 0.31415927E1) = ~1.568242192 +pow (~0.123E4, 0.31415927E1) = nan +atan2 (~0.123E4, 0.27182817E1) = ~1.568586349 +pow (~0.123E4, 0.27182817E1) = nan +atan2 (~0.123E4, 0.123E1) = ~1.569796324 +pow (~0.123E4, 0.123E1) = nan +atan2 (~0.123E4, 0.123) = ~1.570696354 +pow (~0.123E4, 0.123) = nan +atan2 (~0.123E4, 0.123E~2) = ~1.570795298 +pow (~0.123E4, 0.123E~2) = nan +atan2 (~0.123E4, 0.11754944E~37) = ~1.570796371 +pow (~0.123E4, 0.11754944E~37) = nan +atan2 (~0.123E4, 0.5877472E~38) = ~1.570796371 +pow (~0.123E4, 0.5877472E~38) = nan +atan2 (~0.123E4, 0.1E~44) = ~1.570796371 +pow (~0.123E4, 0.1E~44) = nan +atan2 (~0.123E4, 0.0) = ~1.570796371 +pow (~0.123E4, 0.0) = 1 +atan2 (~0.123E4, ~0.34028235E39) = ~3.141592741 +pow (~0.123E4, ~0.34028235E39) = 0 +atan2 (~0.123E4, ~0.17014117E39) = ~3.141592741 +pow (~0.123E4, ~0.17014117E39) = 0 +atan2 (~0.123E4, ~0.123E4) = ~2.356194496 +pow (~0.123E4, ~0.123E4) = 0 +atan2 (~0.123E4, ~0.123E2) = ~1.580796003 +pow (~0.123E4, ~0.123E2) = nan +atan2 (~0.123E4, ~0.31415927E1) = ~1.57335043 +pow (~0.123E4, ~0.31415927E1) = nan +atan2 (~0.123E4, ~0.27182817E1) = ~1.573006272 +pow (~0.123E4, ~0.27182817E1) = nan +atan2 (~0.123E4, ~0.123E1) = ~1.571796298 +pow (~0.123E4, ~0.123E1) = nan +atan2 (~0.123E4, ~0.123) = ~1.570896268 +pow (~0.123E4, ~0.123) = nan +atan2 (~0.123E4, ~0.123E~2) = ~1.570797324 +pow (~0.123E4, ~0.123E~2) = nan +atan2 (~0.123E4, ~0.11754944E~37) = ~1.570796251 +pow (~0.123E4, ~0.11754944E~37) = nan +atan2 (~0.123E4, ~0.5877472E~38) = ~1.570796251 +pow (~0.123E4, ~0.5877472E~38) = nan +atan2 (~0.123E4, ~0.1E~44) = ~1.570796251 +pow (~0.123E4, ~0.1E~44) = nan +atan2 (~0.123E4, ~0.0) = ~1.570796371 +pow (~0.123E4, ~0.0) = 1 +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E4, ~inf) = ~3.141592741 +pow (~0.123E4, ~inf) = 0 +atan2 (~0.123E4, nan) = nan +pow (~0.123E4, nan) = nan +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E2, 0.34028235E39) = ~3.614645465E~38 +pow (~0.123E2, 0.34028235E39) = inf +atan2 (~0.123E2, 0.17014117E39) = ~7.22929093E~38 +pow (~0.123E2, 0.17014117E39) = inf +atan2 (~0.123E2, 0.123E4) = ~0.009999666363 +pow (~0.123E2, 0.123E4) = inf +atan2 (~0.123E2, 0.123E2) = ~0.7853981853 +pow (~0.123E2, 0.123E2) = nan +atan2 (~0.123E2, 0.31415927E1) = ~1.32072866 +pow (~0.123E2, 0.31415927E1) = nan +atan2 (~0.123E2, 0.27182817E1) = ~1.353293777 +pow (~0.123E2, 0.27182817E1) = nan +atan2 (~0.123E2, 0.123E1) = ~1.471127629 +pow (~0.123E2, 0.123E1) = nan +atan2 (~0.123E2, 0.123) = ~1.560796618 +pow (~0.123E2, 0.123) = nan +atan2 (~0.123E2, 0.123E~2) = ~1.570696354 +pow (~0.123E2, 0.123E~2) = nan +atan2 (~0.123E2, 0.11754944E~37) = ~1.570796371 +pow (~0.123E2, 0.11754944E~37) = nan +atan2 (~0.123E2, 0.5877472E~38) = ~1.570796371 +pow (~0.123E2, 0.5877472E~38) = nan +atan2 (~0.123E2, 0.1E~44) = ~1.570796371 +pow (~0.123E2, 0.1E~44) = nan +atan2 (~0.123E2, 0.0) = ~1.570796371 +pow (~0.123E2, 0.0) = 1 +atan2 (~0.123E2, ~0.34028235E39) = ~3.141592741 +pow (~0.123E2, ~0.34028235E39) = 0 +atan2 (~0.123E2, ~0.17014117E39) = ~3.141592741 +pow (~0.123E2, ~0.17014117E39) = 0 +atan2 (~0.123E2, ~0.123E4) = ~3.131592989 +pow (~0.123E2, ~0.123E4) = 0 +atan2 (~0.123E2, ~0.123E2) = ~2.356194496 +pow (~0.123E2, ~0.123E2) = nan +atan2 (~0.123E2, ~0.31415927E1) = ~1.820863962 +pow (~0.123E2, ~0.31415927E1) = nan +atan2 (~0.123E2, ~0.27182817E1) = ~1.788298845 +pow (~0.123E2, ~0.27182817E1) = nan +atan2 (~0.123E2, ~0.123E1) = ~1.670464993 +pow (~0.123E2, ~0.123E1) = nan +atan2 (~0.123E2, ~0.123) = ~1.580796003 +pow (~0.123E2, ~0.123) = nan +atan2 (~0.123E2, ~0.123E~2) = ~1.570896268 +pow (~0.123E2, ~0.123E~2) = nan +atan2 (~0.123E2, ~0.11754944E~37) = ~1.570796251 +pow (~0.123E2, ~0.11754944E~37) = nan +atan2 (~0.123E2, ~0.5877472E~38) = ~1.570796251 +pow (~0.123E2, ~0.5877472E~38) = nan +atan2 (~0.123E2, ~0.1E~44) = ~1.570796251 +pow (~0.123E2, ~0.1E~44) = nan +atan2 (~0.123E2, ~0.0) = ~1.570796371 +pow (~0.123E2, ~0.0) = 1 +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.123E2, ~inf) = ~3.141592741 +pow (~0.123E2, ~inf) = 0 +atan2 (~0.123E2, nan) = nan +pow (~0.123E2, nan) = nan +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.31415927E1, 0.34028235E39) = ~9.232312E~39 +pow (~0.31415927E1, 0.34028235E39) = inf +atan2 (~0.31415927E1, 0.17014117E39) = ~1.8464624E~38 +pow (~0.31415927E1, 0.17014117E39) = inf +atan2 (~0.31415927E1, 0.123E4) = ~0.002554134931 +pow (~0.31415927E1, 0.123E4) = inf +atan2 (~0.31415927E1, 0.123E2) = ~0.2500677109 +pow (~0.31415927E1, 0.123E2) = nan +atan2 (~0.31415927E1, 0.31415927E1) = ~0.7853981853 +pow (~0.31415927E1, 0.31415927E1) = nan +atan2 (~0.31415927E1, 0.27182817E1) = ~0.8575118184 +pow (~0.31415927E1, 0.27182817E1) = nan +atan2 (~0.31415927E1, 0.123E1) = ~1.19762063 +pow (~0.31415927E1, 0.123E1) = nan +atan2 (~0.31415927E1, 0.123) = ~1.531664252 +pow (~0.31415927E1, 0.123) = nan +atan2 (~0.31415927E1, 0.123E~2) = ~1.570404768 +pow (~0.31415927E1, 0.123E~2) = nan +atan2 (~0.31415927E1, 0.11754944E~37) = ~1.570796371 +pow (~0.31415927E1, 0.11754944E~37) = nan +atan2 (~0.31415927E1, 0.5877472E~38) = ~1.570796371 +pow (~0.31415927E1, 0.5877472E~38) = nan +atan2 (~0.31415927E1, 0.1E~44) = ~1.570796371 +pow (~0.31415927E1, 0.1E~44) = nan +atan2 (~0.31415927E1, 0.0) = ~1.570796371 +pow (~0.31415927E1, 0.0) = 1 +atan2 (~0.31415927E1, ~0.34028235E39) = ~3.141592741 +pow (~0.31415927E1, ~0.34028235E39) = 0 +atan2 (~0.31415927E1, ~0.17014117E39) = ~3.141592741 +pow (~0.31415927E1, ~0.17014117E39) = 0 +atan2 (~0.31415927E1, ~0.123E4) = ~3.139038563 +pow (~0.31415927E1, ~0.123E4) = 0 +atan2 (~0.31415927E1, ~0.123E2) = ~2.89152503 +pow (~0.31415927E1, ~0.123E2) = nan +atan2 (~0.31415927E1, ~0.31415927E1) = ~2.356194496 +pow (~0.31415927E1, ~0.31415927E1) = nan +atan2 (~0.31415927E1, ~0.27182817E1) = ~2.284080982 +pow (~0.31415927E1, ~0.27182817E1) = nan +atan2 (~0.31415927E1, ~0.123E1) = ~1.943971992 +pow (~0.31415927E1, ~0.123E1) = nan +atan2 (~0.31415927E1, ~0.123) = ~1.60992837 +pow (~0.31415927E1, ~0.123) = nan +atan2 (~0.31415927E1, ~0.123E~2) = ~1.571187854 +pow (~0.31415927E1, ~0.123E~2) = nan +atan2 (~0.31415927E1, ~0.11754944E~37) = ~1.570796251 +pow (~0.31415927E1, ~0.11754944E~37) = nan +atan2 (~0.31415927E1, ~0.5877472E~38) = ~1.570796251 +pow (~0.31415927E1, ~0.5877472E~38) = nan +atan2 (~0.31415927E1, ~0.1E~44) = ~1.570796251 +pow (~0.31415927E1, ~0.1E~44) = nan +atan2 (~0.31415927E1, ~0.0) = ~1.570796371 +pow (~0.31415927E1, ~0.0) = 1 +atan2 (~0.31415927E1, inf) = 0 +pow (~0.31415927E1, inf) = inf +atan2 (~0.31415927E1, ~inf) = ~3.141592741 +pow (~0.31415927E1, ~inf) = 0 +atan2 (~0.31415927E1, nan) = nan +pow (~0.31415927E1, nan) = nan +atan2 (~0.31415927E1, inf) = 0 +pow (~0.31415927E1, inf) = inf +atan2 (~0.27182817E1, 0.34028235E39) = ~7.988312091E~39 +pow (~0.27182817E1, 0.34028235E39) = inf +atan2 (~0.27182817E1, 0.17014117E39) = ~1.597662558E~38 +pow (~0.27182817E1, 0.17014117E39) = inf +atan2 (~0.27182817E1, 0.123E4) = ~0.002209981671 +pow (~0.27182817E1, 0.123E4) = inf +atan2 (~0.27182817E1, 0.123E2) = ~0.2175025195 +pow (~0.27182817E1, 0.123E2) = nan +atan2 (~0.27182817E1, 0.31415927E1) = ~0.7132844925 +pow (~0.27182817E1, 0.31415927E1) = nan +atan2 (~0.27182817E1, 0.27182817E1) = ~0.7853981853 +pow (~0.27182817E1, 0.27182817E1) = nan +atan2 (~0.27182817E1, 0.123E1) = ~1.145872235 +pow (~0.27182817E1, 0.123E1) = nan +atan2 (~0.27182817E1, 0.123) = ~1.525578022 +pow (~0.27182817E1, 0.123) = nan +atan2 (~0.27182817E1, 0.123E~2) = ~1.570343852 +pow (~0.27182817E1, 0.123E~2) = nan +atan2 (~0.27182817E1, 0.11754944E~37) = ~1.570796371 +pow (~0.27182817E1, 0.11754944E~37) = nan +atan2 (~0.27182817E1, 0.5877472E~38) = ~1.570796371 +pow (~0.27182817E1, 0.5877472E~38) = nan +atan2 (~0.27182817E1, 0.1E~44) = ~1.570796371 +pow (~0.27182817E1, 0.1E~44) = nan +atan2 (~0.27182817E1, 0.0) = ~1.570796371 +pow (~0.27182817E1, 0.0) = 1 +atan2 (~0.27182817E1, ~0.34028235E39) = ~3.141592741 +pow (~0.27182817E1, ~0.34028235E39) = 0 +atan2 (~0.27182817E1, ~0.17014117E39) = ~3.141592741 +pow (~0.27182817E1, ~0.17014117E39) = 0 +atan2 (~0.27182817E1, ~0.123E4) = ~3.139382601 +pow (~0.27182817E1, ~0.123E4) = 0 +atan2 (~0.27182817E1, ~0.123E2) = ~2.924090147 +pow (~0.27182817E1, ~0.123E2) = nan +atan2 (~0.27182817E1, ~0.31415927E1) = ~2.428308249 +pow (~0.27182817E1, ~0.31415927E1) = nan +atan2 (~0.27182817E1, ~0.27182817E1) = ~2.356194496 +pow (~0.27182817E1, ~0.27182817E1) = nan +atan2 (~0.27182817E1, ~0.123E1) = ~1.995720387 +pow (~0.27182817E1, ~0.123E1) = nan +atan2 (~0.27182817E1, ~0.123) = ~1.6160146 +pow (~0.27182817E1, ~0.123) = nan +atan2 (~0.27182817E1, ~0.123E~2) = ~1.57124877 +pow (~0.27182817E1, ~0.123E~2) = nan +atan2 (~0.27182817E1, ~0.11754944E~37) = ~1.570796251 +pow (~0.27182817E1, ~0.11754944E~37) = nan +atan2 (~0.27182817E1, ~0.5877472E~38) = ~1.570796251 +pow (~0.27182817E1, ~0.5877472E~38) = nan +atan2 (~0.27182817E1, ~0.1E~44) = ~1.570796251 +pow (~0.27182817E1, ~0.1E~44) = nan +atan2 (~0.27182817E1, ~0.0) = ~1.570796371 +pow (~0.27182817E1, ~0.0) = 1 +atan2 (~0.27182817E1, inf) = 0 +pow (~0.27182817E1, inf) = inf +atan2 (~0.27182817E1, ~inf) = ~3.141592741 +pow (~0.27182817E1, ~inf) = 0 +atan2 (~0.27182817E1, nan) = nan +pow (~0.27182817E1, nan) = nan +atan2 (~0.27182817E1, inf) = 0 +pow (~0.27182817E1, inf) = inf +atan2 (~0.123E1, 0.34028235E39) = ~3.614645185E~39 +pow (~0.123E1, 0.34028235E39) = inf +atan2 (~0.123E1, 0.17014117E39) = ~7.22929037E~39 +pow (~0.123E1, 0.17014117E39) = inf +atan2 (~0.123E1, 0.123E4) = ~9.999996983E~4 +pow (~0.123E1, 0.123E4) = inf +atan2 (~0.123E1, 0.123E2) = ~0.09966865182 +pow (~0.123E1, 0.123E2) = nan +atan2 (~0.123E1, 0.31415927E1) = ~0.3731757402 +pow (~0.123E1, 0.31415927E1) = nan +atan2 (~0.123E1, 0.27182817E1) = ~0.4249241054 +pow (~0.123E1, 0.27182817E1) = nan +atan2 (~0.123E1, 0.123E1) = ~0.7853981853 +pow (~0.123E1, 0.123E1) = nan +atan2 (~0.123E1, 0.123) = ~1.471127629 +pow (~0.123E1, 0.123) = nan +atan2 (~0.123E1, 0.123E~2) = ~1.569796324 +pow (~0.123E1, 0.123E~2) = nan +atan2 (~0.123E1, 0.11754944E~37) = ~1.570796371 +pow (~0.123E1, 0.11754944E~37) = nan +atan2 (~0.123E1, 0.5877472E~38) = ~1.570796371 +pow (~0.123E1, 0.5877472E~38) = nan +atan2 (~0.123E1, 0.1E~44) = ~1.570796371 +pow (~0.123E1, 0.1E~44) = nan +atan2 (~0.123E1, 0.0) = ~1.570796371 +pow (~0.123E1, 0.0) = 1 +atan2 (~0.123E1, ~0.34028235E39) = ~3.141592741 +pow (~0.123E1, ~0.34028235E39) = 0 +atan2 (~0.123E1, ~0.17014117E39) = ~3.141592741 +pow (~0.123E1, ~0.17014117E39) = 0 +atan2 (~0.123E1, ~0.123E4) = ~3.140592575 +pow (~0.123E1, ~0.123E4) = 0 +atan2 (~0.123E1, ~0.123E2) = ~3.041924 +pow (~0.123E1, ~0.123E2) = nan +atan2 (~0.123E1, ~0.31415927E1) = ~2.768416882 +pow (~0.123E1, ~0.31415927E1) = nan +atan2 (~0.123E1, ~0.27182817E1) = ~2.716668606 +pow (~0.123E1, ~0.27182817E1) = nan +atan2 (~0.123E1, ~0.123E1) = ~2.356194496 +pow (~0.123E1, ~0.123E1) = nan +atan2 (~0.123E1, ~0.123) = ~1.670464993 +pow (~0.123E1, ~0.123) = nan +atan2 (~0.123E1, ~0.123E~2) = ~1.571796298 +pow (~0.123E1, ~0.123E~2) = nan +atan2 (~0.123E1, ~0.11754944E~37) = ~1.570796251 +pow (~0.123E1, ~0.11754944E~37) = nan +atan2 (~0.123E1, ~0.5877472E~38) = ~1.570796251 +pow (~0.123E1, ~0.5877472E~38) = nan +atan2 (~0.123E1, ~0.1E~44) = ~1.570796251 +pow (~0.123E1, ~0.1E~44) = nan +atan2 (~0.123E1, ~0.0) = ~1.570796371 +pow (~0.123E1, ~0.0) = 1 +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123E1, ~inf) = ~3.141592741 +pow (~0.123E1, ~inf) = 0 +atan2 (~0.123E1, nan) = nan +pow (~0.123E1, nan) = nan +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123, 0.34028235E39) = ~3.614649389E~40 +pow (~0.123, 0.34028235E39) = 0 +atan2 (~0.123, 0.17014117E39) = ~7.229284764E~40 +pow (~0.123, 0.17014117E39) = 0 +atan2 (~0.123, 0.123E4) = ~1.000000047E~4 +pow (~0.123, 0.123E4) = 0 +atan2 (~0.123, 0.123E2) = ~0.009999666363 +pow (~0.123, 0.123E2) = nan +atan2 (~0.123, 0.31415927E1) = ~0.0391321294 +pow (~0.123, 0.31415927E1) = nan +atan2 (~0.123, 0.27182817E1) = ~0.04521832988 +pow (~0.123, 0.27182817E1) = nan +atan2 (~0.123, 0.123E1) = ~0.09966865182 +pow (~0.123, 0.123E1) = nan +atan2 (~0.123, 0.123) = ~0.7853981853 +pow (~0.123, 0.123) = nan +atan2 (~0.123, 0.123E~2) = ~1.560796618 +pow (~0.123, 0.123E~2) = nan +atan2 (~0.123, 0.11754944E~37) = ~1.570796371 +pow (~0.123, 0.11754944E~37) = nan +atan2 (~0.123, 0.5877472E~38) = ~1.570796371 +pow (~0.123, 0.5877472E~38) = nan +atan2 (~0.123, 0.1E~44) = ~1.570796371 +pow (~0.123, 0.1E~44) = nan +atan2 (~0.123, 0.0) = ~1.570796371 +pow (~0.123, 0.0) = 1 +atan2 (~0.123, ~0.34028235E39) = ~3.141592741 +pow (~0.123, ~0.34028235E39) = inf +atan2 (~0.123, ~0.17014117E39) = ~3.141592741 +pow (~0.123, ~0.17014117E39) = inf +atan2 (~0.123, ~0.123E4) = ~3.141492605 +pow (~0.123, ~0.123E4) = inf +atan2 (~0.123, ~0.123E2) = ~3.131592989 +pow (~0.123, ~0.123E2) = nan +atan2 (~0.123, ~0.31415927E1) = ~3.102460623 +pow (~0.123, ~0.31415927E1) = nan +atan2 (~0.123, ~0.27182817E1) = ~3.096374273 +pow (~0.123, ~0.27182817E1) = nan +atan2 (~0.123, ~0.123E1) = ~3.041924 +pow (~0.123, ~0.123E1) = nan +atan2 (~0.123, ~0.123) = ~2.356194496 +pow (~0.123, ~0.123) = nan +atan2 (~0.123, ~0.123E~2) = ~1.580796003 +pow (~0.123, ~0.123E~2) = nan +atan2 (~0.123, ~0.11754944E~37) = ~1.570796251 +pow (~0.123, ~0.11754944E~37) = nan +atan2 (~0.123, ~0.5877472E~38) = ~1.570796251 +pow (~0.123, ~0.5877472E~38) = nan +atan2 (~0.123, ~0.1E~44) = ~1.570796251 +pow (~0.123, ~0.1E~44) = nan +atan2 (~0.123, ~0.0) = ~1.570796371 +pow (~0.123, ~0.0) = 1 +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123, ~inf) = ~3.141592741 +pow (~0.123, ~inf) = inf +atan2 (~0.123, nan) = nan +pow (~0.123, nan) = nan +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123E~2, 0.34028235E39) = ~3.613948739E~42 +pow (~0.123E~2, 0.34028235E39) = 0 +atan2 (~0.123E~2, 0.17014117E39) = ~7.229298777E~42 +pow (~0.123E~2, 0.17014117E39) = 0 +atan2 (~0.123E~2, 0.123E4) = ~9.999999975E~7 +pow (~0.123E~2, 0.123E4) = 0 +atan2 (~0.123E~2, 0.123E2) = ~1.000000047E~4 +pow (~0.123E~2, 0.123E2) = nan +atan2 (~0.123E~2, 0.31415927E1) = ~3.915211419E~4 +pow (~0.123E~2, 0.31415927E1) = nan +atan2 (~0.123E~2, 0.27182817E1) = ~4.524917167E~4 +pow (~0.123E~2, 0.27182817E1) = nan +atan2 (~0.123E~2, 0.123E1) = ~9.999996983E~4 +pow (~0.123E~2, 0.123E1) = nan +atan2 (~0.123E~2, 0.123) = ~0.009999666363 +pow (~0.123E~2, 0.123) = nan +atan2 (~0.123E~2, 0.123E~2) = ~0.7853981853 +pow (~0.123E~2, 0.123E~2) = nan +atan2 (~0.123E~2, 0.11754944E~37) = ~1.570796371 +pow (~0.123E~2, 0.11754944E~37) = nan +atan2 (~0.123E~2, 0.5877472E~38) = ~1.570796371 +pow (~0.123E~2, 0.5877472E~38) = nan +atan2 (~0.123E~2, 0.1E~44) = ~1.570796371 +pow (~0.123E~2, 0.1E~44) = nan +atan2 (~0.123E~2, 0.0) = ~1.570796371 +pow (~0.123E~2, 0.0) = 1 +atan2 (~0.123E~2, ~0.34028235E39) = ~3.141592741 +pow (~0.123E~2, ~0.34028235E39) = inf +atan2 (~0.123E~2, ~0.17014117E39) = ~3.141592741 +pow (~0.123E~2, ~0.17014117E39) = inf +atan2 (~0.123E~2, ~0.123E4) = ~3.141591549 +pow (~0.123E~2, ~0.123E4) = inf +atan2 (~0.123E~2, ~0.123E2) = ~3.141492605 +pow (~0.123E~2, ~0.123E2) = nan +atan2 (~0.123E~2, ~0.31415927E1) = ~3.141201019 +pow (~0.123E~2, ~0.31415927E1) = nan +atan2 (~0.123E~2, ~0.27182817E1) = ~3.141140223 +pow (~0.123E~2, ~0.27182817E1) = nan +atan2 (~0.123E~2, ~0.123E1) = ~3.140592575 +pow (~0.123E~2, ~0.123E1) = nan +atan2 (~0.123E~2, ~0.123) = ~3.131592989 +pow (~0.123E~2, ~0.123) = nan +atan2 (~0.123E~2, ~0.123E~2) = ~2.356194496 +pow (~0.123E~2, ~0.123E~2) = nan +atan2 (~0.123E~2, ~0.11754944E~37) = ~1.570796251 +pow (~0.123E~2, ~0.11754944E~37) = nan +atan2 (~0.123E~2, ~0.5877472E~38) = ~1.570796251 +pow (~0.123E~2, ~0.5877472E~38) = nan +atan2 (~0.123E~2, ~0.1E~44) = ~1.570796251 +pow (~0.123E~2, ~0.1E~44) = nan +atan2 (~0.123E~2, ~0.0) = ~1.570796371 +pow (~0.123E~2, ~0.0) = 1 +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.123E~2, ~inf) = ~3.141592741 +pow (~0.123E~2, ~inf) = inf +atan2 (~0.123E~2, nan) = nan +pow (~0.123E~2, nan) = nan +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.11754944E~37, 0.34028235E39) = 0 +pow (~0.11754944E~37, 0.34028235E39) = 0 +atan2 (~0.11754944E~37, 0.17014117E39) = 0 +pow (~0.11754944E~37, 0.17014117E39) = 0 +atan2 (~0.11754944E~37, 0.123E4) = ~9.556855527E~42 +pow (~0.11754944E~37, 0.123E4) = 0 +atan2 (~0.11754944E~37, 0.123E2) = ~9.55686954E~40 +pow (~0.11754944E~37, 0.123E2) = nan +atan2 (~0.11754944E~37, 0.31415927E1) = ~3.74171493E~39 +pow (~0.11754944E~37, 0.31415927E1) = nan +atan2 (~0.11754944E~37, 0.27182817E1) = ~4.324402857E~39 +pow (~0.11754944E~37, 0.27182817E1) = nan +atan2 (~0.11754944E~37, 0.123E1) = ~9.556863934E~39 +pow (~0.11754944E~37, 0.123E1) = nan +atan2 (~0.11754944E~37, 0.123) = ~9.556864495E~38 +pow (~0.11754944E~37, 0.123) = nan +atan2 (~0.11754944E~37, 0.123E~2) = ~9.556864495E~36 +pow (~0.11754944E~37, 0.123E~2) = nan +atan2 (~0.11754944E~37, 0.11754944E~37) = ~0.7853981853 +pow (~0.11754944E~37, 0.11754944E~37) = nan +atan2 (~0.11754944E~37, 0.5877472E~38) = ~1.107148767 +pow (~0.11754944E~37, 0.5877472E~38) = nan +atan2 (~0.11754944E~37, 0.1E~44) = ~1.570796251 +pow (~0.11754944E~37, 0.1E~44) = nan +atan2 (~0.11754944E~37, 0.0) = ~1.570796371 +pow (~0.11754944E~37, 0.0) = 1 +atan2 (~0.11754944E~37, ~0.34028235E39) = ~3.141592741 +pow (~0.11754944E~37, ~0.34028235E39) = inf +atan2 (~0.11754944E~37, ~0.17014117E39) = ~3.141592741 +pow (~0.11754944E~37, ~0.17014117E39) = inf +atan2 (~0.11754944E~37, ~0.123E4) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E4) = inf +atan2 (~0.11754944E~37, ~0.123E2) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E2) = nan +atan2 (~0.11754944E~37, ~0.31415927E1) = ~3.141592741 +pow (~0.11754944E~37, ~0.31415927E1) = nan +atan2 (~0.11754944E~37, ~0.27182817E1) = ~3.141592741 +pow (~0.11754944E~37, ~0.27182817E1) = nan +atan2 (~0.11754944E~37, ~0.123E1) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E1) = nan +atan2 (~0.11754944E~37, ~0.123) = ~3.141592741 +pow (~0.11754944E~37, ~0.123) = nan +atan2 (~0.11754944E~37, ~0.123E~2) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E~2) = nan +atan2 (~0.11754944E~37, ~0.11754944E~37) = ~2.356194496 +pow (~0.11754944E~37, ~0.11754944E~37) = nan +atan2 (~0.11754944E~37, ~0.5877472E~38) = ~2.034443855 +pow (~0.11754944E~37, ~0.5877472E~38) = nan +atan2 (~0.11754944E~37, ~0.1E~44) = ~1.570796371 +pow (~0.11754944E~37, ~0.1E~44) = nan +atan2 (~0.11754944E~37, ~0.0) = ~1.570796371 +pow (~0.11754944E~37, ~0.0) = 1 +atan2 (~0.11754944E~37, inf) = 0 +pow (~0.11754944E~37, inf) = 0 +atan2 (~0.11754944E~37, ~inf) = ~3.141592741 +pow (~0.11754944E~37, ~inf) = inf +atan2 (~0.11754944E~37, nan) = nan +pow (~0.11754944E~37, nan) = nan +atan2 (~0.11754944E~37, inf) = 0 +pow (~0.11754944E~37, inf) = 0 +atan2 (~0.5877472E~38, 0.34028235E39) = 0 +pow (~0.5877472E~38, 0.34028235E39) = 0 +atan2 (~0.5877472E~38, 0.17014117E39) = 0 +pow (~0.5877472E~38, 0.17014117E39) = 0 +atan2 (~0.5877472E~38, 0.123E4) = ~4.778427763E~42 +pow (~0.5877472E~38, 0.123E4) = 0 +atan2 (~0.5877472E~38, 0.123E2) = ~4.778427763E~40 +pow (~0.5877472E~38, 0.123E2) = nan +atan2 (~0.5877472E~38, 0.31415927E1) = ~1.870856764E~39 +pow (~0.5877472E~38, 0.31415927E1) = nan +atan2 (~0.5877472E~38, 0.27182817E1) = ~2.162200728E~39 +pow (~0.5877472E~38, 0.27182817E1) = nan +atan2 (~0.5877472E~38, 0.123E1) = ~4.778431967E~39 +pow (~0.5877472E~38, 0.123E1) = nan +atan2 (~0.5877472E~38, 0.123) = ~4.778432248E~38 +pow (~0.5877472E~38, 0.123) = nan +atan2 (~0.5877472E~38, 0.123E~2) = ~4.778432248E~36 +pow (~0.5877472E~38, 0.123E~2) = nan +atan2 (~0.5877472E~38, 0.11754944E~37) = ~0.463647604 +pow (~0.5877472E~38, 0.11754944E~37) = nan +atan2 (~0.5877472E~38, 0.5877472E~38) = ~0.7853981853 +pow (~0.5877472E~38, 0.5877472E~38) = nan +atan2 (~0.5877472E~38, 0.1E~44) = ~1.570796132 +pow (~0.5877472E~38, 0.1E~44) = nan +atan2 (~0.5877472E~38, 0.0) = ~1.570796371 +pow (~0.5877472E~38, 0.0) = 1 +atan2 (~0.5877472E~38, ~0.34028235E39) = ~3.141592741 +pow (~0.5877472E~38, ~0.34028235E39) = inf +atan2 (~0.5877472E~38, ~0.17014117E39) = ~3.141592741 +pow (~0.5877472E~38, ~0.17014117E39) = inf +atan2 (~0.5877472E~38, ~0.123E4) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E4) = inf +atan2 (~0.5877472E~38, ~0.123E2) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E2) = nan +atan2 (~0.5877472E~38, ~0.31415927E1) = ~3.141592741 +pow (~0.5877472E~38, ~0.31415927E1) = nan +atan2 (~0.5877472E~38, ~0.27182817E1) = ~3.141592741 +pow (~0.5877472E~38, ~0.27182817E1) = nan +atan2 (~0.5877472E~38, ~0.123E1) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E1) = nan +atan2 (~0.5877472E~38, ~0.123) = ~3.141592741 +pow (~0.5877472E~38, ~0.123) = nan +atan2 (~0.5877472E~38, ~0.123E~2) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E~2) = nan +atan2 (~0.5877472E~38, ~0.11754944E~37) = ~2.677945137 +pow (~0.5877472E~38, ~0.11754944E~37) = nan +atan2 (~0.5877472E~38, ~0.5877472E~38) = ~2.356194496 +pow (~0.5877472E~38, ~0.5877472E~38) = nan +atan2 (~0.5877472E~38, ~0.1E~44) = ~1.57079649 +pow (~0.5877472E~38, ~0.1E~44) = nan +atan2 (~0.5877472E~38, ~0.0) = ~1.570796371 +pow (~0.5877472E~38, ~0.0) = 1 +atan2 (~0.5877472E~38, inf) = 0 +pow (~0.5877472E~38, inf) = 0 +atan2 (~0.5877472E~38, ~inf) = ~3.141592741 +pow (~0.5877472E~38, ~inf) = inf +atan2 (~0.5877472E~38, nan) = nan +pow (~0.5877472E~38, nan) = nan +atan2 (~0.5877472E~38, inf) = 0 +pow (~0.5877472E~38, inf) = 0 +atan2 (~0.1E~44, 0.34028235E39) = 0 +pow (~0.1E~44, 0.34028235E39) = 0 +atan2 (~0.1E~44, 0.17014117E39) = 0 +pow (~0.1E~44, 0.17014117E39) = 0 +atan2 (~0.1E~44, 0.123E4) = 0 +pow (~0.1E~44, 0.123E4) = 0 +atan2 (~0.1E~44, 0.123E2) = 0 +pow (~0.1E~44, 0.123E2) = nan +atan2 (~0.1E~44, 0.31415927E1) = 0 +pow (~0.1E~44, 0.31415927E1) = nan +atan2 (~0.1E~44, 0.27182817E1) = 0 +pow (~0.1E~44, 0.27182817E1) = nan +atan2 (~0.1E~44, 0.123E1) = ~1.401298464E~45 +pow (~0.1E~44, 0.123E1) = nan +atan2 (~0.1E~44, 0.123) = ~1.121038771E~44 +pow (~0.1E~44, 0.123) = nan +atan2 (~0.1E~44, 0.123E~2) = ~1.139255651E~42 +pow (~0.1E~44, 0.123E~2) = nan +atan2 (~0.1E~44, 0.11754944E~37) = ~1.192092896E~7 +pow (~0.1E~44, 0.11754944E~37) = nan +atan2 (~0.1E~44, 0.5877472E~38) = ~2.384185791E~7 +pow (~0.1E~44, 0.5877472E~38) = nan +atan2 (~0.1E~44, 0.1E~44) = ~0.7853981853 +pow (~0.1E~44, 0.1E~44) = nan +atan2 (~0.1E~44, 0.0) = ~1.570796371 +pow (~0.1E~44, 0.0) = 1 +atan2 (~0.1E~44, ~0.34028235E39) = ~3.141592741 +pow (~0.1E~44, ~0.34028235E39) = inf +atan2 (~0.1E~44, ~0.17014117E39) = ~3.141592741 +pow (~0.1E~44, ~0.17014117E39) = inf +atan2 (~0.1E~44, ~0.123E4) = ~3.141592741 +pow (~0.1E~44, ~0.123E4) = inf +atan2 (~0.1E~44, ~0.123E2) = ~3.141592741 +pow (~0.1E~44, ~0.123E2) = nan +atan2 (~0.1E~44, ~0.31415927E1) = ~3.141592741 +pow (~0.1E~44, ~0.31415927E1) = nan +atan2 (~0.1E~44, ~0.27182817E1) = ~3.141592741 +pow (~0.1E~44, ~0.27182817E1) = nan +atan2 (~0.1E~44, ~0.123E1) = ~3.141592741 +pow (~0.1E~44, ~0.123E1) = nan +atan2 (~0.1E~44, ~0.123) = ~3.141592741 +pow (~0.1E~44, ~0.123) = nan +atan2 (~0.1E~44, ~0.123E~2) = ~3.141592741 +pow (~0.1E~44, ~0.123E~2) = nan +atan2 (~0.1E~44, ~0.11754944E~37) = ~3.141592503 +pow (~0.1E~44, ~0.11754944E~37) = nan +atan2 (~0.1E~44, ~0.5877472E~38) = ~3.141592503 +pow (~0.1E~44, ~0.5877472E~38) = nan +atan2 (~0.1E~44, ~0.1E~44) = ~2.356194496 +pow (~0.1E~44, ~0.1E~44) = nan +atan2 (~0.1E~44, ~0.0) = ~1.570796371 +pow (~0.1E~44, ~0.0) = 1 +atan2 (~0.1E~44, inf) = 0 +pow (~0.1E~44, inf) = 0 +atan2 (~0.1E~44, ~inf) = ~3.141592741 +pow (~0.1E~44, ~inf) = inf +atan2 (~0.1E~44, nan) = nan +pow (~0.1E~44, nan) = nan +atan2 (~0.1E~44, inf) = 0 +pow (~0.1E~44, inf) = 0 +atan2 (~0.0, 0.34028235E39) = 0 +pow (~0.0, 0.34028235E39) = 0 +atan2 (~0.0, 0.17014117E39) = 0 +pow (~0.0, 0.17014117E39) = 0 +atan2 (~0.0, 0.123E4) = 0 +pow (~0.0, 0.123E4) = 0 +atan2 (~0.0, 0.123E2) = 0 +pow (~0.0, 0.123E2) = 0 +atan2 (~0.0, 0.31415927E1) = 0 +pow (~0.0, 0.31415927E1) = 0 +atan2 (~0.0, 0.27182817E1) = 0 +pow (~0.0, 0.27182817E1) = 0 +atan2 (~0.0, 0.123E1) = 0 +pow (~0.0, 0.123E1) = 0 +atan2 (~0.0, 0.123) = 0 +pow (~0.0, 0.123) = 0 +atan2 (~0.0, 0.123E~2) = 0 +pow (~0.0, 0.123E~2) = 0 +atan2 (~0.0, 0.11754944E~37) = 0 +pow (~0.0, 0.11754944E~37) = 0 +atan2 (~0.0, 0.5877472E~38) = 0 +pow (~0.0, 0.5877472E~38) = 0 +atan2 (~0.0, 0.1E~44) = 0 +pow (~0.0, 0.1E~44) = 0 +atan2 (~0.0, 0.0) = 0 +pow (~0.0, 0.0) = 1 +atan2 (~0.0, ~0.34028235E39) = ~3.141592741 +pow (~0.0, ~0.34028235E39) = inf +atan2 (~0.0, ~0.17014117E39) = ~3.141592741 +pow (~0.0, ~0.17014117E39) = inf +atan2 (~0.0, ~0.123E4) = ~3.141592741 +pow (~0.0, ~0.123E4) = inf +atan2 (~0.0, ~0.123E2) = ~3.141592741 +pow (~0.0, ~0.123E2) = inf +atan2 (~0.0, ~0.31415927E1) = ~3.141592741 +pow (~0.0, ~0.31415927E1) = inf +atan2 (~0.0, ~0.27182817E1) = ~3.141592741 +pow (~0.0, ~0.27182817E1) = inf +atan2 (~0.0, ~0.123E1) = ~3.141592741 +pow (~0.0, ~0.123E1) = inf +atan2 (~0.0, ~0.123) = ~3.141592741 +pow (~0.0, ~0.123) = inf +atan2 (~0.0, ~0.123E~2) = ~3.141592741 +pow (~0.0, ~0.123E~2) = inf +atan2 (~0.0, ~0.11754944E~37) = ~3.141592741 +pow (~0.0, ~0.11754944E~37) = inf +atan2 (~0.0, ~0.5877472E~38) = ~3.141592741 +pow (~0.0, ~0.5877472E~38) = inf +atan2 (~0.0, ~0.1E~44) = ~3.141592741 +pow (~0.0, ~0.1E~44) = inf +atan2 (~0.0, ~0.0) = ~3.141592741 +pow (~0.0, ~0.0) = 1 +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (~0.0, ~inf) = ~3.141592741 +pow (~0.0, ~inf) = inf +atan2 (~0.0, nan) = nan +pow (~0.0, nan) = nan +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (inf, 0.34028235E39) = 1.570796371 +pow (inf, 0.34028235E39) = inf +atan2 (inf, 0.17014117E39) = 1.570796371 +pow (inf, 0.17014117E39) = inf +atan2 (inf, 0.123E4) = 1.570796371 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796371 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.31415927E1) = 1.570796371 +pow (inf, 0.31415927E1) = inf +atan2 (inf, 0.27182817E1) = 1.570796371 +pow (inf, 0.27182817E1) = inf +atan2 (inf, 0.123E1) = 1.570796371 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796371 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796371 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.11754944E~37) = 1.570796371 +pow (inf, 0.11754944E~37) = inf +atan2 (inf, 0.5877472E~38) = 1.570796371 +pow (inf, 0.5877472E~38) = inf +atan2 (inf, 0.1E~44) = 1.570796371 +pow (inf, 0.1E~44) = inf +atan2 (inf, 0.0) = 1.570796371 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.34028235E39) = 1.570796371 +pow (inf, ~0.34028235E39) = 0 +atan2 (inf, ~0.17014117E39) = 1.570796371 +pow (inf, ~0.17014117E39) = 0 +atan2 (inf, ~0.123E4) = 1.570796371 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796371 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.31415927E1) = 1.570796371 +pow (inf, ~0.31415927E1) = 0 +atan2 (inf, ~0.27182817E1) = 1.570796371 +pow (inf, ~0.27182817E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796371 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796371 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796371 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.11754944E~37) = 1.570796371 +pow (inf, ~0.11754944E~37) = 0 +atan2 (inf, ~0.5877472E~38) = 1.570796371 +pow (inf, ~0.5877472E~38) = 0 +atan2 (inf, ~0.1E~44) = 1.570796371 +pow (inf, ~0.1E~44) = 0 +atan2 (inf, ~0.0) = 1.570796371 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.356194496 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (~inf, 0.34028235E39) = ~1.570796371 +pow (~inf, 0.34028235E39) = inf +atan2 (~inf, 0.17014117E39) = ~1.570796371 +pow (~inf, 0.17014117E39) = inf +atan2 (~inf, 0.123E4) = ~1.570796371 +pow (~inf, 0.123E4) = inf +atan2 (~inf, 0.123E2) = ~1.570796371 +pow (~inf, 0.123E2) = inf +atan2 (~inf, 0.31415927E1) = ~1.570796371 +pow (~inf, 0.31415927E1) = inf +atan2 (~inf, 0.27182817E1) = ~1.570796371 +pow (~inf, 0.27182817E1) = inf +atan2 (~inf, 0.123E1) = ~1.570796371 +pow (~inf, 0.123E1) = inf +atan2 (~inf, 0.123) = ~1.570796371 +pow (~inf, 0.123) = inf +atan2 (~inf, 0.123E~2) = ~1.570796371 +pow (~inf, 0.123E~2) = inf +atan2 (~inf, 0.11754944E~37) = ~1.570796371 +pow (~inf, 0.11754944E~37) = inf +atan2 (~inf, 0.5877472E~38) = ~1.570796371 +pow (~inf, 0.5877472E~38) = inf +atan2 (~inf, 0.1E~44) = ~1.570796371 +pow (~inf, 0.1E~44) = inf +atan2 (~inf, 0.0) = ~1.570796371 +pow (~inf, 0.0) = 1 +atan2 (~inf, ~0.34028235E39) = ~1.570796371 +pow (~inf, ~0.34028235E39) = 0 +atan2 (~inf, ~0.17014117E39) = ~1.570796371 +pow (~inf, ~0.17014117E39) = 0 +atan2 (~inf, ~0.123E4) = ~1.570796371 +pow (~inf, ~0.123E4) = 0 +atan2 (~inf, ~0.123E2) = ~1.570796371 +pow (~inf, ~0.123E2) = 0 +atan2 (~inf, ~0.31415927E1) = ~1.570796371 +pow (~inf, ~0.31415927E1) = 0 +atan2 (~inf, ~0.27182817E1) = ~1.570796371 +pow (~inf, ~0.27182817E1) = 0 +atan2 (~inf, ~0.123E1) = ~1.570796371 +pow (~inf, ~0.123E1) = 0 +atan2 (~inf, ~0.123) = ~1.570796371 +pow (~inf, ~0.123) = 0 +atan2 (~inf, ~0.123E~2) = ~1.570796371 +pow (~inf, ~0.123E~2) = 0 +atan2 (~inf, ~0.11754944E~37) = ~1.570796371 +pow (~inf, ~0.11754944E~37) = 0 +atan2 (~inf, ~0.5877472E~38) = ~1.570796371 +pow (~inf, ~0.5877472E~38) = 0 +atan2 (~inf, ~0.1E~44) = ~1.570796371 +pow (~inf, ~0.1E~44) = 0 +atan2 (~inf, ~0.0) = ~1.570796371 +pow (~inf, ~0.0) = 1 +atan2 (~inf, inf) = ~0.7853981853 +pow (~inf, inf) = inf +atan2 (~inf, ~inf) = ~2.356194496 +pow (~inf, ~inf) = 0 +atan2 (~inf, nan) = nan +pow (~inf, nan) = nan +atan2 (~inf, inf) = ~0.7853981853 +pow (~inf, inf) = inf +atan2 (nan, 0.34028235E39) = nan +pow (nan, 0.34028235E39) = nan +atan2 (nan, 0.17014117E39) = nan +pow (nan, 0.17014117E39) = nan +atan2 (nan, 0.123E4) = nan +pow (nan, 0.123E4) = nan +atan2 (nan, 0.123E2) = nan +pow (nan, 0.123E2) = nan +atan2 (nan, 0.31415927E1) = nan +pow (nan, 0.31415927E1) = nan +atan2 (nan, 0.27182817E1) = nan +pow (nan, 0.27182817E1) = nan +atan2 (nan, 0.123E1) = nan +pow (nan, 0.123E1) = nan +atan2 (nan, 0.123) = nan +pow (nan, 0.123) = nan +atan2 (nan, 0.123E~2) = nan +pow (nan, 0.123E~2) = nan +atan2 (nan, 0.11754944E~37) = nan +pow (nan, 0.11754944E~37) = nan +atan2 (nan, 0.5877472E~38) = nan +pow (nan, 0.5877472E~38) = nan +atan2 (nan, 0.1E~44) = nan +pow (nan, 0.1E~44) = nan +atan2 (nan, 0.0) = nan +pow (nan, 0.0) = 1 +atan2 (nan, ~0.34028235E39) = nan +pow (nan, ~0.34028235E39) = nan +atan2 (nan, ~0.17014117E39) = nan +pow (nan, ~0.17014117E39) = nan +atan2 (nan, ~0.123E4) = nan +pow (nan, ~0.123E4) = nan +atan2 (nan, ~0.123E2) = nan +pow (nan, ~0.123E2) = nan +atan2 (nan, ~0.31415927E1) = nan +pow (nan, ~0.31415927E1) = nan +atan2 (nan, ~0.27182817E1) = nan +pow (nan, ~0.27182817E1) = nan +atan2 (nan, ~0.123E1) = nan +pow (nan, ~0.123E1) = nan +atan2 (nan, ~0.123) = nan +pow (nan, ~0.123) = nan +atan2 (nan, ~0.123E~2) = nan +pow (nan, ~0.123E~2) = nan +atan2 (nan, ~0.11754944E~37) = nan +pow (nan, ~0.11754944E~37) = nan +atan2 (nan, ~0.5877472E~38) = nan +pow (nan, ~0.5877472E~38) = nan +atan2 (nan, ~0.1E~44) = nan +pow (nan, ~0.1E~44) = nan +atan2 (nan, ~0.0) = nan +pow (nan, ~0.0) = 1 +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (nan, ~inf) = nan +pow (nan, ~inf) = nan +atan2 (nan, nan) = nan +pow (nan, nan) = nan +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (inf, 0.34028235E39) = 1.570796371 +pow (inf, 0.34028235E39) = inf +atan2 (inf, 0.17014117E39) = 1.570796371 +pow (inf, 0.17014117E39) = inf +atan2 (inf, 0.123E4) = 1.570796371 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796371 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.31415927E1) = 1.570796371 +pow (inf, 0.31415927E1) = inf +atan2 (inf, 0.27182817E1) = 1.570796371 +pow (inf, 0.27182817E1) = inf +atan2 (inf, 0.123E1) = 1.570796371 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796371 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796371 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.11754944E~37) = 1.570796371 +pow (inf, 0.11754944E~37) = inf +atan2 (inf, 0.5877472E~38) = 1.570796371 +pow (inf, 0.5877472E~38) = inf +atan2 (inf, 0.1E~44) = 1.570796371 +pow (inf, 0.1E~44) = inf +atan2 (inf, 0.0) = 1.570796371 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.34028235E39) = 1.570796371 +pow (inf, ~0.34028235E39) = 0 +atan2 (inf, ~0.17014117E39) = 1.570796371 +pow (inf, ~0.17014117E39) = 0 +atan2 (inf, ~0.123E4) = 1.570796371 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796371 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.31415927E1) = 1.570796371 +pow (inf, ~0.31415927E1) = 0 +atan2 (inf, ~0.27182817E1) = 1.570796371 +pow (inf, ~0.27182817E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796371 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796371 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796371 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.11754944E~37) = 1.570796371 +pow (inf, ~0.11754944E~37) = 0 +atan2 (inf, ~0.5877472E~38) = 1.570796371 +pow (inf, ~0.5877472E~38) = 0 +atan2 (inf, ~0.1E~44) = 1.570796371 +pow (inf, ~0.1E~44) = 0 +atan2 (inf, ~0.0) = 1.570796371 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.356194496 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf + +Testing *+, *- +SOME *+ AND STANDARD RESULTS DIFFER +(r1, r2, r3): *+(r1, r2, r3) (r1 * r2 + r3) +-------------------------------------------- +(0.34028235E39, 0.123E1, ~0.34028235E39): 0.78264946E38 inf +(0.34028235E39, 0.123E1, ~0.17014117E39): 0.24840611E39 inf +(0.34028235E39, 0.123, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(0.34028235E39, ~0.123E1, 0.34028235E39): ~0.78264946E38 ~inf +(0.34028235E39, ~0.123E1, 0.17014117E39): ~0.24840611E39 ~inf +(0.34028235E39, ~0.123, 0.34028235E39): 0.2984276E39 0.29842763E39 +(0.17014117E39, 0.31415927E1, ~0.34028235E39): 0.19423192E39 inf +(0.17014117E39, 0.27182817E1, ~0.34028235E39): 0.1222093E39 inf +(0.17014117E39, 0.27182817E1, ~0.17014117E39): 0.29235047E39 inf +(0.17014117E39, 0.123E1, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(0.17014117E39, 0.123E1, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(0.17014117E39, 0.123, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(0.17014117E39, ~0.31415927E1, 0.34028235E39): ~0.19423192E39 ~inf +(0.17014117E39, ~0.27182817E1, 0.34028235E39): ~0.1222093E39 ~inf +(0.17014117E39, ~0.27182817E1, 0.17014117E39): ~0.29235047E39 ~inf +(0.17014117E39, ~0.123E1, 0.34028235E39): 0.1310087E39 0.13100871E39 +(0.17014117E39, ~0.123E1, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(0.17014117E39, ~0.123, 0.17014117E39): 0.1492138E39 0.14921381E39 +(0.123E4, 0.123E2, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(0.123E4, 0.123E2, ~0.123E1): 0.151277705E5 0.1512777E5 +(0.123E4, 0.31415927E1, 0.123E2): 0.3876459E4 0.38764592E4 +(0.123E4, 0.31415927E1, 0.123): 0.3864282E4 0.38642822E4 +(0.123E4, 0.31415927E1, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(0.123E4, 0.31415927E1, ~0.123E1): 0.3862929E4 0.38629292E4 +(0.123E4, 0.123, 0.123E~2): 0.15129123E3 0.15129124E3 +(0.123E4, 0.123, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(0.123E4, 0.123, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(0.123E4, 0.123, ~0.123E1): 0.15006E3 0.15006001E3 +(0.123E4, 0.123E~2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123E4, 0.123E~2, 0.123): 0.16359E1 0.16359001E1 +(0.123E4, 0.123E~2, ~0.123E1): 0.28290004 0.2829001 +(0.123E4, ~0.123E2, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(0.123E4, ~0.123E2, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(0.123E4, ~0.31415927E1, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(0.123E4, ~0.31415927E1, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(0.123E4, ~0.31415927E1, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(0.123E4, ~0.31415927E1, ~0.123): ~0.3864282E4 ~0.38642822E4 +(0.123E4, ~0.123, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(0.123E4, ~0.123, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(0.123E4, ~0.123, 0.123E1): ~0.15006E3 ~0.15006001E3 +(0.123E4, ~0.123, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(0.123E4, ~0.123E~2, 0.123E1): ~0.28290004 ~0.2829001 +(0.123E4, ~0.123E~2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123E4, ~0.123E~2, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123E2, 0.123E4, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(0.123E2, 0.123E4, ~0.123E1): 0.151277705E5 0.1512777E5 +(0.123E2, 0.123E2, 0.123E~2): 0.15129123E3 0.15129124E3 +(0.123E2, 0.123E2, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(0.123E2, 0.123E2, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(0.123E2, 0.123E2, ~0.123E1): 0.15006E3 0.15006001E3 +(0.123E2, 0.31415927E1, 0.123E2): 0.50941593E2 0.5094159E2 +(0.123E2, 0.31415927E1, 0.27182817E1): 0.41359875E2 0.4135987E2 +(0.123E2, 0.31415927E1, 0.123E~2): 0.38642822E2 0.3864282E2 +(0.123E2, 0.31415927E1, ~0.31415927E1): 0.355E2 0.35499996E2 +(0.123E2, 0.31415927E1, ~0.123): 0.38518593E2 0.3851859E2 +(0.123E2, 0.27182817E1, 0.31415927E1): 0.36576458E2 0.3657646E2 +(0.123E2, 0.27182817E1, 0.123): 0.33557865E2 0.3355787E2 +(0.123E2, 0.27182817E1, ~0.123E2): 0.21134867E2 0.21134869E2 +(0.123E2, 0.27182817E1, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(0.123E2, 0.27182817E1, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(0.123E2, 0.27182817E1, ~0.123E1): 0.32204865E2 0.3220487E2 +(0.123E2, 0.27182817E1, ~0.123E~2): 0.33433636E2 0.3343364E2 +(0.123E2, 0.123E1, ~0.123E2): 0.28290002E1 0.28290005E1 +(0.123E2, 0.123, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123E2, 0.123, 0.123): 0.16359E1 0.16359001E1 +(0.123E2, 0.123, ~0.123E1): 0.28290004 0.2829001 +(0.123E2, 0.123E~2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(0.123E2, ~0.123E4, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(0.123E2, ~0.123E4, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(0.123E2, ~0.123E2, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(0.123E2, ~0.123E2, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(0.123E2, ~0.123E2, 0.123E1): ~0.15006E3 ~0.15006001E3 +(0.123E2, ~0.123E2, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(0.123E2, ~0.31415927E1, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(0.123E2, ~0.31415927E1, 0.123): ~0.38518593E2 ~0.3851859E2 +(0.123E2, ~0.31415927E1, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(0.123E2, ~0.31415927E1, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(0.123E2, ~0.31415927E1, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(0.123E2, ~0.27182817E1, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(0.123E2, ~0.27182817E1, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(0.123E2, ~0.27182817E1, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(0.123E2, ~0.27182817E1, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(0.123E2, ~0.27182817E1, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(0.123E2, ~0.27182817E1, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(0.123E2, ~0.27182817E1, ~0.123): ~0.33557865E2 ~0.3355787E2 +(0.123E2, ~0.123E1, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(0.123E2, ~0.123, 0.123E1): ~0.28290004 ~0.2829001 +(0.123E2, ~0.123, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123E2, ~0.123, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123E2, ~0.123E~2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(0.31415927E1, 0.17014117E39, ~0.34028235E39): 0.19423192E39 inf +(0.31415927E1, 0.123E4, 0.123E2): 0.3876459E4 0.38764592E4 +(0.31415927E1, 0.123E4, 0.123): 0.3864282E4 0.38642822E4 +(0.31415927E1, 0.123E4, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(0.31415927E1, 0.123E4, ~0.123E1): 0.3862929E4 0.38629292E4 +(0.31415927E1, 0.123E2, 0.123E2): 0.50941593E2 0.5094159E2 +(0.31415927E1, 0.123E2, 0.27182817E1): 0.41359875E2 0.4135987E2 +(0.31415927E1, 0.123E2, 0.123E~2): 0.38642822E2 0.3864282E2 +(0.31415927E1, 0.123E2, ~0.31415927E1): 0.355E2 0.35499996E2 +(0.31415927E1, 0.123E2, ~0.123): 0.38518593E2 0.3851859E2 +(0.31415927E1, 0.31415927E1, 0.123E1): 0.11099605E2 0.11099606E2 +(0.31415927E1, 0.27182817E1, 0.123E2): 0.20839735E2 0.20839733E2 +(0.31415927E1, 0.27182817E1, 0.123E1): 0.9769734E1 0.9769733E1 +(0.31415927E1, 0.27182817E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(0.31415927E1, 0.27182817E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(0.31415927E1, 0.27182817E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(0.31415927E1, 0.27182817E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(0.31415927E1, 0.27182817E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(0.31415927E1, 0.123E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(0.31415927E1, 0.123E1, 0.123): 0.39871593E1 0.3987159E1 +(0.31415927E1, 0.123, ~0.123E1): ~0.8435841 ~0.84358406 +(0.31415927E1, 0.123, ~0.123): 0.2634159 0.26341593 +(0.31415927E1, ~0.17014117E39, 0.34028235E39): ~0.19423192E39 ~inf +(0.31415927E1, ~0.123E4, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(0.31415927E1, ~0.123E4, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(0.31415927E1, ~0.123E4, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(0.31415927E1, ~0.123E4, ~0.123): ~0.3864282E4 ~0.38642822E4 +(0.31415927E1, ~0.123E2, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(0.31415927E1, ~0.123E2, 0.123): ~0.38518593E2 ~0.3851859E2 +(0.31415927E1, ~0.123E2, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(0.31415927E1, ~0.123E2, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(0.31415927E1, ~0.123E2, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(0.31415927E1, ~0.31415927E1, ~0.123E1): ~0.11099605E2 ~0.11099606E2 +(0.31415927E1, ~0.27182817E1, 0.123E2): 0.3760266E1 0.37602663E1 +(0.31415927E1, ~0.27182817E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(0.31415927E1, ~0.27182817E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(0.31415927E1, ~0.27182817E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(0.31415927E1, ~0.27182817E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(0.31415927E1, ~0.27182817E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(0.31415927E1, ~0.27182817E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(0.31415927E1, ~0.123E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(0.31415927E1, ~0.123E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(0.31415927E1, ~0.123, 0.123E1): 0.8435841 0.84358406 +(0.31415927E1, ~0.123, 0.123): ~0.2634159 ~0.26341593 +(0.27182817E1, 0.17014117E39, ~0.34028235E39): 0.1222093E39 inf +(0.27182817E1, 0.17014117E39, ~0.17014117E39): 0.29235047E39 inf +(0.27182817E1, 0.123E2, 0.31415927E1): 0.36576458E2 0.3657646E2 +(0.27182817E1, 0.123E2, 0.123): 0.33557865E2 0.3355787E2 +(0.27182817E1, 0.123E2, ~0.123E2): 0.21134867E2 0.21134869E2 +(0.27182817E1, 0.123E2, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(0.27182817E1, 0.123E2, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(0.27182817E1, 0.123E2, ~0.123E1): 0.32204865E2 0.3220487E2 +(0.27182817E1, 0.123E2, ~0.123E~2): 0.33433636E2 0.3343364E2 +(0.27182817E1, 0.31415927E1, 0.123E2): 0.20839735E2 0.20839733E2 +(0.27182817E1, 0.31415927E1, 0.123E1): 0.9769734E1 0.9769733E1 +(0.27182817E1, 0.31415927E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(0.27182817E1, 0.31415927E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(0.27182817E1, 0.31415927E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(0.27182817E1, 0.31415927E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(0.27182817E1, 0.31415927E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(0.27182817E1, 0.27182817E1, 0.27182817E1): 0.10107337E2 0.10107338E2 +(0.27182817E1, 0.27182817E1, ~0.31415927E1): 0.42474627E1 0.4247463E1 +(0.27182817E1, 0.27182817E1, ~0.123E~2): 0.73878255E1 0.7387826E1 +(0.27182817E1, 0.123E1, 0.123E1): 0.4573487E1 0.45734863E1 +(0.27182817E1, 0.123E1, 0.123): 0.34664867E1 0.34664865E1 +(0.27182817E1, 0.123E1, ~0.31415927E1): 0.20189385 0.2018938 +(0.27182817E1, 0.123E1, ~0.27182817E1): 0.62520486 0.6252048 +(0.27182817E1, 0.123, 0.123E~2): 0.33557865 0.33557868 +(0.27182817E1, 0.123, ~0.123): 0.21134867 0.21134868 +(0.27182817E1, ~0.17014117E39, 0.34028235E39): ~0.1222093E39 ~inf +(0.27182817E1, ~0.17014117E39, 0.17014117E39): ~0.29235047E39 ~inf +(0.27182817E1, ~0.123E2, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(0.27182817E1, ~0.123E2, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(0.27182817E1, ~0.123E2, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(0.27182817E1, ~0.123E2, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(0.27182817E1, ~0.123E2, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(0.27182817E1, ~0.123E2, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(0.27182817E1, ~0.123E2, ~0.123): ~0.33557865E2 ~0.3355787E2 +(0.27182817E1, ~0.31415927E1, 0.123E2): 0.3760266E1 0.37602663E1 +(0.27182817E1, ~0.31415927E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(0.27182817E1, ~0.31415927E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(0.27182817E1, ~0.31415927E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(0.27182817E1, ~0.31415927E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(0.27182817E1, ~0.31415927E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(0.27182817E1, ~0.31415927E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(0.27182817E1, ~0.27182817E1, 0.31415927E1): ~0.42474627E1 ~0.4247463E1 +(0.27182817E1, ~0.27182817E1, 0.123E~2): ~0.73878255E1 ~0.7387826E1 +(0.27182817E1, ~0.27182817E1, ~0.27182817E1): ~0.10107337E2 ~0.10107338E2 +(0.27182817E1, ~0.123E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(0.27182817E1, ~0.123E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(0.27182817E1, ~0.123E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(0.27182817E1, ~0.123E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(0.27182817E1, ~0.123, 0.123): ~0.21134867 ~0.21134868 +(0.27182817E1, ~0.123, ~0.123E~2): ~0.33557865 ~0.33557868 +(0.123E1, 0.34028235E39, ~0.34028235E39): 0.78264946E38 inf +(0.123E1, 0.34028235E39, ~0.17014117E39): 0.24840611E39 inf +(0.123E1, 0.17014117E39, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(0.123E1, 0.17014117E39, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(0.123E1, 0.123E2, ~0.123E2): 0.28290002E1 0.28290005E1 +(0.123E1, 0.31415927E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(0.123E1, 0.31415927E1, 0.123): 0.39871593E1 0.3987159E1 +(0.123E1, 0.27182817E1, 0.123E1): 0.4573487E1 0.45734863E1 +(0.123E1, 0.27182817E1, 0.123): 0.34664867E1 0.34664865E1 +(0.123E1, 0.27182817E1, ~0.31415927E1): 0.20189385 0.2018938 +(0.123E1, 0.27182817E1, ~0.27182817E1): 0.62520486 0.6252048 +(0.123E1, 0.123E1, 0.123E1): 0.27429001E1 0.27429E1 +(0.123E1, 0.123E1, ~0.123E1): 0.28290004 0.28289998 +(0.123E1, 0.123E1, ~0.123): 0.13899001E1 0.13899E1 +(0.123E1, 0.123, 0.123E1): 0.13812901E1 0.138129E1 +(0.123E1, 0.123, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(0.123E1, 0.123, ~0.123): 0.28290004E~1 0.28289996E~1 +(0.123E1, 0.123, ~0.123E~2): 0.15006001 0.15006 +(0.123E1, 0.123E~2, ~0.123E~2): 0.28290003E~3 0.28290006E~3 +(0.123E1, ~0.34028235E39, 0.34028235E39): ~0.78264946E38 ~inf +(0.123E1, ~0.34028235E39, 0.17014117E39): ~0.24840611E39 ~inf +(0.123E1, ~0.17014117E39, 0.34028235E39): 0.1310087E39 0.13100871E39 +(0.123E1, ~0.17014117E39, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(0.123E1, ~0.123E2, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(0.123E1, ~0.31415927E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(0.123E1, ~0.31415927E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(0.123E1, ~0.27182817E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(0.123E1, ~0.27182817E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(0.123E1, ~0.27182817E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(0.123E1, ~0.27182817E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(0.123E1, ~0.123E1, 0.123E1): ~0.28290004 ~0.28289998 +(0.123E1, ~0.123E1, 0.123): ~0.13899001E1 ~0.13899E1 +(0.123E1, ~0.123E1, ~0.123E1): ~0.27429001E1 ~0.27429E1 +(0.123E1, ~0.123, 0.123E1): 0.107871E1 0.10787101E1 +(0.123E1, ~0.123, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(0.123E1, ~0.123, 0.123E~2): ~0.15006001 ~0.15006 +(0.123E1, ~0.123, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(0.123E1, ~0.123E~2, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(0.123, 0.34028235E39, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(0.123, 0.17014117E39, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(0.123, 0.123E4, 0.123E~2): 0.15129123E3 0.15129124E3 +(0.123, 0.123E4, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(0.123, 0.123E4, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(0.123, 0.123E4, ~0.123E1): 0.15006E3 0.15006001E3 +(0.123, 0.123E2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123, 0.123E2, 0.123): 0.16359E1 0.16359001E1 +(0.123, 0.123E2, ~0.123E1): 0.28290004 0.2829001 +(0.123, 0.31415927E1, ~0.123E1): ~0.8435841 ~0.84358406 +(0.123, 0.31415927E1, ~0.123): 0.2634159 0.26341593 +(0.123, 0.27182817E1, 0.123E~2): 0.33557865 0.33557868 +(0.123, 0.27182817E1, ~0.123): 0.21134867 0.21134868 +(0.123, 0.123E1, 0.123E1): 0.13812901E1 0.138129E1 +(0.123, 0.123E1, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(0.123, 0.123E1, ~0.123): 0.28290004E~1 0.28289996E~1 +(0.123, 0.123E1, ~0.123E~2): 0.15006001 0.15006 +(0.123, ~0.34028235E39, 0.34028235E39): 0.2984276E39 0.29842763E39 +(0.123, ~0.17014117E39, 0.17014117E39): 0.1492138E39 0.14921381E39 +(0.123, ~0.123E4, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(0.123, ~0.123E4, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(0.123, ~0.123E4, 0.123E1): ~0.15006E3 ~0.15006001E3 +(0.123, ~0.123E4, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(0.123, ~0.123E2, 0.123E1): ~0.28290004 ~0.2829001 +(0.123, ~0.123E2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123, ~0.123E2, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123, ~0.31415927E1, 0.123E1): 0.8435841 0.84358406 +(0.123, ~0.31415927E1, 0.123): ~0.2634159 ~0.26341593 +(0.123, ~0.27182817E1, 0.123): ~0.21134867 ~0.21134868 +(0.123, ~0.27182817E1, ~0.123E~2): ~0.33557865 ~0.33557868 +(0.123, ~0.123E1, 0.123E1): 0.107871E1 0.10787101E1 +(0.123, ~0.123E1, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(0.123, ~0.123E1, 0.123E~2): ~0.15006001 ~0.15006 +(0.123, ~0.123E1, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(0.123E~2, 0.123E4, 0.27182817E1): 0.42311816E1 0.4231182E1 +(0.123E~2, 0.123E4, 0.123): 0.16359E1 0.16359001E1 +(0.123E~2, 0.123E4, ~0.123E1): 0.28290004 0.2829001 +(0.123E~2, 0.123E2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(0.123E~2, 0.123E1, ~0.123E~2): 0.28290003E~3 0.28290006E~3 +(0.123E~2, ~0.123E4, 0.123E1): ~0.28290004 ~0.2829001 +(0.123E~2, ~0.123E4, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(0.123E~2, ~0.123E4, ~0.123): ~0.16359E1 ~0.16359001E1 +(0.123E~2, ~0.123E2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(0.123E~2, ~0.123E1, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(~0.34028235E39, 0.123E1, 0.34028235E39): ~0.78264946E38 ~inf +(~0.34028235E39, 0.123E1, 0.17014117E39): ~0.24840611E39 ~inf +(~0.34028235E39, 0.123, 0.34028235E39): 0.2984276E39 0.29842763E39 +(~0.34028235E39, ~0.123E1, ~0.34028235E39): 0.78264946E38 inf +(~0.34028235E39, ~0.123E1, ~0.17014117E39): 0.24840611E39 inf +(~0.34028235E39, ~0.123, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(~0.17014117E39, 0.31415927E1, 0.34028235E39): ~0.19423192E39 ~inf +(~0.17014117E39, 0.27182817E1, 0.34028235E39): ~0.1222093E39 ~inf +(~0.17014117E39, 0.27182817E1, 0.17014117E39): ~0.29235047E39 ~inf +(~0.17014117E39, 0.123E1, 0.34028235E39): 0.1310087E39 0.13100871E39 +(~0.17014117E39, 0.123E1, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(~0.17014117E39, 0.123, 0.17014117E39): 0.1492138E39 0.14921381E39 +(~0.17014117E39, ~0.31415927E1, ~0.34028235E39): 0.19423192E39 inf +(~0.17014117E39, ~0.27182817E1, ~0.34028235E39): 0.1222093E39 inf +(~0.17014117E39, ~0.27182817E1, ~0.17014117E39): 0.29235047E39 inf +(~0.17014117E39, ~0.123E1, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(~0.17014117E39, ~0.123E1, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(~0.17014117E39, ~0.123, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(~0.123E4, 0.123E2, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(~0.123E4, 0.123E2, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(~0.123E4, 0.31415927E1, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(~0.123E4, 0.31415927E1, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(~0.123E4, 0.31415927E1, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(~0.123E4, 0.31415927E1, ~0.123): ~0.3864282E4 ~0.38642822E4 +(~0.123E4, 0.123, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(~0.123E4, 0.123, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(~0.123E4, 0.123, 0.123E1): ~0.15006E3 ~0.15006001E3 +(~0.123E4, 0.123, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(~0.123E4, 0.123E~2, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123E4, 0.123E~2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123E4, 0.123E~2, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123E4, ~0.123E2, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(~0.123E4, ~0.123E2, ~0.123E1): 0.151277705E5 0.1512777E5 +(~0.123E4, ~0.31415927E1, 0.123E2): 0.3876459E4 0.38764592E4 +(~0.123E4, ~0.31415927E1, 0.123): 0.3864282E4 0.38642822E4 +(~0.123E4, ~0.31415927E1, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(~0.123E4, ~0.31415927E1, ~0.123E1): 0.3862929E4 0.38629292E4 +(~0.123E4, ~0.123, 0.123E~2): 0.15129123E3 0.15129124E3 +(~0.123E4, ~0.123, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(~0.123E4, ~0.123, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(~0.123E4, ~0.123, ~0.123E1): 0.15006E3 0.15006001E3 +(~0.123E4, ~0.123E~2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123E4, ~0.123E~2, 0.123): 0.16359E1 0.16359001E1 +(~0.123E4, ~0.123E~2, ~0.123E1): 0.28290004 0.2829001 +(~0.123E2, 0.123E4, 0.27182817E1): ~0.15126282E5 ~0.15126281E5 +(~0.123E2, 0.123E4, 0.123E1): ~0.151277705E5 ~0.1512777E5 +(~0.123E2, 0.123E2, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(~0.123E2, 0.123E2, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(~0.123E2, 0.123E2, 0.123E1): ~0.15006E3 ~0.15006001E3 +(~0.123E2, 0.123E2, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(~0.123E2, 0.31415927E1, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(~0.123E2, 0.31415927E1, 0.123): ~0.38518593E2 ~0.3851859E2 +(~0.123E2, 0.31415927E1, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(~0.123E2, 0.31415927E1, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(~0.123E2, 0.31415927E1, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(~0.123E2, 0.27182817E1, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(~0.123E2, 0.27182817E1, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(~0.123E2, 0.27182817E1, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(~0.123E2, 0.27182817E1, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(~0.123E2, 0.27182817E1, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(~0.123E2, 0.27182817E1, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(~0.123E2, 0.27182817E1, ~0.123): ~0.33557865E2 ~0.3355787E2 +(~0.123E2, 0.123E1, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(~0.123E2, 0.123, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123E2, 0.123, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123E2, 0.123, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123E2, 0.123E~2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(~0.123E2, ~0.123E4, ~0.27182817E1): 0.15126282E5 0.15126281E5 +(~0.123E2, ~0.123E4, ~0.123E1): 0.151277705E5 0.1512777E5 +(~0.123E2, ~0.123E2, 0.123E~2): 0.15129123E3 0.15129124E3 +(~0.123E2, ~0.123E2, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(~0.123E2, ~0.123E2, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(~0.123E2, ~0.123E2, ~0.123E1): 0.15006E3 0.15006001E3 +(~0.123E2, ~0.31415927E1, 0.123E2): 0.50941593E2 0.5094159E2 +(~0.123E2, ~0.31415927E1, 0.27182817E1): 0.41359875E2 0.4135987E2 +(~0.123E2, ~0.31415927E1, 0.123E~2): 0.38642822E2 0.3864282E2 +(~0.123E2, ~0.31415927E1, ~0.31415927E1): 0.355E2 0.35499996E2 +(~0.123E2, ~0.31415927E1, ~0.123): 0.38518593E2 0.3851859E2 +(~0.123E2, ~0.27182817E1, 0.31415927E1): 0.36576458E2 0.3657646E2 +(~0.123E2, ~0.27182817E1, 0.123): 0.33557865E2 0.3355787E2 +(~0.123E2, ~0.27182817E1, ~0.123E2): 0.21134867E2 0.21134869E2 +(~0.123E2, ~0.27182817E1, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(~0.123E2, ~0.27182817E1, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(~0.123E2, ~0.27182817E1, ~0.123E1): 0.32204865E2 0.3220487E2 +(~0.123E2, ~0.27182817E1, ~0.123E~2): 0.33433636E2 0.3343364E2 +(~0.123E2, ~0.123E1, ~0.123E2): 0.28290002E1 0.28290005E1 +(~0.123E2, ~0.123, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123E2, ~0.123, 0.123): 0.16359E1 0.16359001E1 +(~0.123E2, ~0.123, ~0.123E1): 0.28290004 0.2829001 +(~0.123E2, ~0.123E~2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(~0.31415927E1, 0.17014117E39, 0.34028235E39): ~0.19423192E39 ~inf +(~0.31415927E1, 0.123E4, 0.27182817E1): ~0.38614407E4 ~0.3861441E4 +(~0.31415927E1, 0.123E4, 0.123E1): ~0.3862929E4 ~0.38629292E4 +(~0.31415927E1, 0.123E4, ~0.123E2): ~0.3876459E4 ~0.38764592E4 +(~0.31415927E1, 0.123E4, ~0.123): ~0.3864282E4 ~0.38642822E4 +(~0.31415927E1, 0.123E2, 0.31415927E1): ~0.355E2 ~0.35499996E2 +(~0.31415927E1, 0.123E2, 0.123): ~0.38518593E2 ~0.3851859E2 +(~0.31415927E1, 0.123E2, ~0.123E2): ~0.50941593E2 ~0.5094159E2 +(~0.31415927E1, 0.123E2, ~0.27182817E1): ~0.41359875E2 ~0.4135987E2 +(~0.31415927E1, 0.123E2, ~0.123E~2): ~0.38642822E2 ~0.3864282E2 +(~0.31415927E1, 0.31415927E1, ~0.123E1): ~0.11099605E2 ~0.11099606E2 +(~0.31415927E1, 0.27182817E1, 0.123E2): 0.3760266E1 0.37602663E1 +(~0.31415927E1, 0.27182817E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(~0.31415927E1, 0.27182817E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(~0.31415927E1, 0.27182817E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(~0.31415927E1, 0.27182817E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(~0.31415927E1, 0.27182817E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(~0.31415927E1, 0.27182817E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(~0.31415927E1, 0.123E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(~0.31415927E1, 0.123E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(~0.31415927E1, 0.123, 0.123E1): 0.8435841 0.84358406 +(~0.31415927E1, 0.123, 0.123): ~0.2634159 ~0.26341593 +(~0.31415927E1, ~0.17014117E39, ~0.34028235E39): 0.19423192E39 inf +(~0.31415927E1, ~0.123E4, 0.123E2): 0.3876459E4 0.38764592E4 +(~0.31415927E1, ~0.123E4, 0.123): 0.3864282E4 0.38642822E4 +(~0.31415927E1, ~0.123E4, ~0.27182817E1): 0.38614407E4 0.3861441E4 +(~0.31415927E1, ~0.123E4, ~0.123E1): 0.3862929E4 0.38629292E4 +(~0.31415927E1, ~0.123E2, 0.123E2): 0.50941593E2 0.5094159E2 +(~0.31415927E1, ~0.123E2, 0.27182817E1): 0.41359875E2 0.4135987E2 +(~0.31415927E1, ~0.123E2, 0.123E~2): 0.38642822E2 0.3864282E2 +(~0.31415927E1, ~0.123E2, ~0.31415927E1): 0.355E2 0.35499996E2 +(~0.31415927E1, ~0.123E2, ~0.123): 0.38518593E2 0.3851859E2 +(~0.31415927E1, ~0.31415927E1, 0.123E1): 0.11099605E2 0.11099606E2 +(~0.31415927E1, ~0.27182817E1, 0.123E2): 0.20839735E2 0.20839733E2 +(~0.31415927E1, ~0.27182817E1, 0.123E1): 0.9769734E1 0.9769733E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(~0.31415927E1, ~0.27182817E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(~0.31415927E1, ~0.27182817E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(~0.31415927E1, ~0.123E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(~0.31415927E1, ~0.123E1, 0.123): 0.39871593E1 0.3987159E1 +(~0.31415927E1, ~0.123, ~0.123E1): ~0.8435841 ~0.84358406 +(~0.31415927E1, ~0.123, ~0.123): 0.2634159 0.26341593 +(~0.27182817E1, 0.17014117E39, 0.34028235E39): ~0.1222093E39 ~inf +(~0.27182817E1, 0.17014117E39, 0.17014117E39): ~0.29235047E39 ~inf +(~0.27182817E1, 0.123E2, 0.123E2): ~0.21134867E2 ~0.21134869E2 +(~0.27182817E1, 0.123E2, 0.31415927E1): ~0.30293274E2 ~0.30293276E2 +(~0.27182817E1, 0.123E2, 0.27182817E1): ~0.30716585E2 ~0.30716587E2 +(~0.27182817E1, 0.123E2, 0.123E1): ~0.32204865E2 ~0.3220487E2 +(~0.27182817E1, 0.123E2, 0.123E~2): ~0.33433636E2 ~0.3343364E2 +(~0.27182817E1, 0.123E2, ~0.31415927E1): ~0.36576458E2 ~0.3657646E2 +(~0.27182817E1, 0.123E2, ~0.123): ~0.33557865E2 ~0.3355787E2 +(~0.27182817E1, 0.31415927E1, 0.123E2): 0.3760266E1 0.37602663E1 +(~0.27182817E1, 0.31415927E1, 0.31415927E1): ~0.53981414E1 ~0.5398141E1 +(~0.27182817E1, 0.31415927E1, 0.27182817E1): ~0.58214526E1 ~0.5821452E1 +(~0.27182817E1, 0.31415927E1, 0.123E1): ~0.73097343E1 ~0.7309734E1 +(~0.27182817E1, 0.31415927E1, 0.123E~2): ~0.8538505E1 ~0.8538504E1 +(~0.27182817E1, 0.31415927E1, ~0.123E2): ~0.20839735E2 ~0.20839733E2 +(~0.27182817E1, 0.31415927E1, ~0.123E1): ~0.9769734E1 ~0.9769733E1 +(~0.27182817E1, 0.27182817E1, 0.31415927E1): ~0.42474627E1 ~0.4247463E1 +(~0.27182817E1, 0.27182817E1, 0.123E~2): ~0.73878255E1 ~0.7387826E1 +(~0.27182817E1, 0.27182817E1, ~0.27182817E1): ~0.10107337E2 ~0.10107338E2 +(~0.27182817E1, 0.123E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(~0.27182817E1, 0.123E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(~0.27182817E1, 0.123E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(~0.27182817E1, 0.123E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(~0.27182817E1, 0.123, 0.123): ~0.21134867 ~0.21134868 +(~0.27182817E1, 0.123, ~0.123E~2): ~0.33557865 ~0.33557868 +(~0.27182817E1, ~0.17014117E39, ~0.34028235E39): 0.1222093E39 inf +(~0.27182817E1, ~0.17014117E39, ~0.17014117E39): 0.29235047E39 inf +(~0.27182817E1, ~0.123E2, 0.31415927E1): 0.36576458E2 0.3657646E2 +(~0.27182817E1, ~0.123E2, 0.123): 0.33557865E2 0.3355787E2 +(~0.27182817E1, ~0.123E2, ~0.123E2): 0.21134867E2 0.21134869E2 +(~0.27182817E1, ~0.123E2, ~0.31415927E1): 0.30293274E2 0.30293276E2 +(~0.27182817E1, ~0.123E2, ~0.27182817E1): 0.30716585E2 0.30716587E2 +(~0.27182817E1, ~0.123E2, ~0.123E1): 0.32204865E2 0.3220487E2 +(~0.27182817E1, ~0.123E2, ~0.123E~2): 0.33433636E2 0.3343364E2 +(~0.27182817E1, ~0.31415927E1, 0.123E2): 0.20839735E2 0.20839733E2 +(~0.27182817E1, ~0.31415927E1, 0.123E1): 0.9769734E1 0.9769733E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E2): ~0.3760266E1 ~0.37602663E1 +(~0.27182817E1, ~0.31415927E1, ~0.31415927E1): 0.53981414E1 0.5398141E1 +(~0.27182817E1, ~0.31415927E1, ~0.27182817E1): 0.58214526E1 0.5821452E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E1): 0.73097343E1 0.7309734E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E~2): 0.8538505E1 0.8538504E1 +(~0.27182817E1, ~0.27182817E1, 0.27182817E1): 0.10107337E2 0.10107338E2 +(~0.27182817E1, ~0.27182817E1, ~0.31415927E1): 0.42474627E1 0.4247463E1 +(~0.27182817E1, ~0.27182817E1, ~0.123E~2): 0.73878255E1 0.7387826E1 +(~0.27182817E1, ~0.123E1, 0.123E1): 0.4573487E1 0.45734863E1 +(~0.27182817E1, ~0.123E1, 0.123): 0.34664867E1 0.34664865E1 +(~0.27182817E1, ~0.123E1, ~0.31415927E1): 0.20189385 0.2018938 +(~0.27182817E1, ~0.123E1, ~0.27182817E1): 0.62520486 0.6252048 +(~0.27182817E1, ~0.123, 0.123E~2): 0.33557865 0.33557868 +(~0.27182817E1, ~0.123, ~0.123): 0.21134867 0.21134868 +(~0.123E1, 0.34028235E39, 0.34028235E39): ~0.78264946E38 ~inf +(~0.123E1, 0.34028235E39, 0.17014117E39): ~0.24840611E39 ~inf +(~0.123E1, 0.17014117E39, 0.34028235E39): 0.1310087E39 0.13100871E39 +(~0.123E1, 0.17014117E39, 0.17014117E39): ~0.39132473E38 ~0.39132465E38 +(~0.123E1, 0.123E2, 0.123E2): ~0.28290002E1 ~0.28290005E1 +(~0.123E1, 0.31415927E1, ~0.31415927E1): ~0.7005752E1 ~0.70057516E1 +(~0.123E1, 0.31415927E1, ~0.123): ~0.39871593E1 ~0.3987159E1 +(~0.123E1, 0.27182817E1, 0.31415927E1): ~0.20189385 ~0.2018938 +(~0.123E1, 0.27182817E1, 0.27182817E1): ~0.62520486 ~0.6252048 +(~0.123E1, 0.27182817E1, ~0.123E1): ~0.4573487E1 ~0.45734863E1 +(~0.123E1, 0.27182817E1, ~0.123): ~0.34664867E1 ~0.34664865E1 +(~0.123E1, 0.123E1, 0.123E1): ~0.28290004 ~0.28289998 +(~0.123E1, 0.123E1, 0.123): ~0.13899001E1 ~0.13899E1 +(~0.123E1, 0.123E1, ~0.123E1): ~0.27429001E1 ~0.27429E1 +(~0.123E1, 0.123, 0.123E1): 0.107871E1 0.10787101E1 +(~0.123E1, 0.123, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(~0.123E1, 0.123, 0.123E~2): ~0.15006001 ~0.15006 +(~0.123E1, 0.123, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(~0.123E1, 0.123E~2, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(~0.123E1, ~0.34028235E39, ~0.34028235E39): 0.78264946E38 inf +(~0.123E1, ~0.34028235E39, ~0.17014117E39): 0.24840611E39 inf +(~0.123E1, ~0.17014117E39, ~0.34028235E39): ~0.1310087E39 ~0.13100871E39 +(~0.123E1, ~0.17014117E39, ~0.17014117E39): 0.39132473E38 0.39132465E38 +(~0.123E1, ~0.123E2, ~0.123E2): 0.28290002E1 0.28290005E1 +(~0.123E1, ~0.31415927E1, 0.31415927E1): 0.7005752E1 0.70057516E1 +(~0.123E1, ~0.31415927E1, 0.123): 0.39871593E1 0.3987159E1 +(~0.123E1, ~0.27182817E1, 0.123E1): 0.4573487E1 0.45734863E1 +(~0.123E1, ~0.27182817E1, 0.123): 0.34664867E1 0.34664865E1 +(~0.123E1, ~0.27182817E1, ~0.31415927E1): 0.20189385 0.2018938 +(~0.123E1, ~0.27182817E1, ~0.27182817E1): 0.62520486 0.6252048 +(~0.123E1, ~0.123E1, 0.123E1): 0.27429001E1 0.27429E1 +(~0.123E1, ~0.123E1, ~0.123E1): 0.28290004 0.28289998 +(~0.123E1, ~0.123E1, ~0.123): 0.13899001E1 0.13899E1 +(~0.123E1, ~0.123, 0.123E1): 0.13812901E1 0.138129E1 +(~0.123E1, ~0.123, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(~0.123E1, ~0.123, ~0.123): 0.28290004E~1 0.28289996E~1 +(~0.123E1, ~0.123, ~0.123E~2): 0.15006001 0.15006 +(~0.123E1, ~0.123E~2, ~0.123E~2): 0.28290003E~3 0.28290006E~3 +(~0.123, 0.34028235E39, 0.34028235E39): 0.2984276E39 0.29842763E39 +(~0.123, 0.17014117E39, 0.17014117E39): 0.1492138E39 0.14921381E39 +(~0.123, 0.123E4, 0.31415927E1): ~0.1481484E3 ~0.14814842E3 +(~0.123, 0.123E4, 0.27182817E1): ~0.14857172E3 ~0.14857173E3 +(~0.123, 0.123E4, 0.123E1): ~0.15006E3 ~0.15006001E3 +(~0.123, 0.123E4, ~0.123E~2): ~0.15129123E3 ~0.15129124E3 +(~0.123, 0.123E2, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123, 0.123E2, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123, 0.123E2, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123, 0.31415927E1, 0.123E1): 0.8435841 0.84358406 +(~0.123, 0.31415927E1, 0.123): ~0.2634159 ~0.26341593 +(~0.123, 0.27182817E1, 0.123): ~0.21134867 ~0.21134868 +(~0.123, 0.27182817E1, ~0.123E~2): ~0.33557865 ~0.33557868 +(~0.123, 0.123E1, 0.123E1): 0.107871E1 0.10787101E1 +(~0.123, 0.123E1, 0.123): ~0.28290004E~1 ~0.28289996E~1 +(~0.123, 0.123E1, 0.123E~2): ~0.15006001 ~0.15006 +(~0.123, 0.123E1, ~0.123E1): ~0.13812901E1 ~0.138129E1 +(~0.123, ~0.34028235E39, ~0.34028235E39): ~0.2984276E39 ~0.29842763E39 +(~0.123, ~0.17014117E39, ~0.17014117E39): ~0.1492138E39 ~0.14921381E39 +(~0.123, ~0.123E4, 0.123E~2): 0.15129123E3 0.15129124E3 +(~0.123, ~0.123E4, ~0.31415927E1): 0.1481484E3 0.14814842E3 +(~0.123, ~0.123E4, ~0.27182817E1): 0.14857172E3 0.14857173E3 +(~0.123, ~0.123E4, ~0.123E1): 0.15006E3 0.15006001E3 +(~0.123, ~0.123E2, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123, ~0.123E2, 0.123): 0.16359E1 0.16359001E1 +(~0.123, ~0.123E2, ~0.123E1): 0.28290004 0.2829001 +(~0.123, ~0.31415927E1, ~0.123E1): ~0.8435841 ~0.84358406 +(~0.123, ~0.31415927E1, ~0.123): 0.2634159 0.26341593 +(~0.123, ~0.27182817E1, 0.123E~2): 0.33557865 0.33557868 +(~0.123, ~0.27182817E1, ~0.123): 0.21134867 0.21134868 +(~0.123, ~0.123E1, 0.123E1): 0.13812901E1 0.138129E1 +(~0.123, ~0.123E1, ~0.123E1): ~0.107871E1 ~0.10787101E1 +(~0.123, ~0.123E1, ~0.123): 0.28290004E~1 0.28289996E~1 +(~0.123, ~0.123E1, ~0.123E~2): 0.15006001 0.15006 +(~0.123E~2, 0.123E4, 0.123E1): ~0.28290004 ~0.2829001 +(~0.123E~2, 0.123E4, ~0.27182817E1): ~0.42311816E1 ~0.4231182E1 +(~0.123E~2, 0.123E4, ~0.123): ~0.16359E1 ~0.16359001E1 +(~0.123E~2, 0.123E2, 0.123E~2): ~0.13899001E~1 ~0.13899E~1 +(~0.123E~2, 0.123E1, 0.123E~2): ~0.28290003E~3 ~0.28290006E~3 +(~0.123E~2, ~0.123E4, 0.27182817E1): 0.42311816E1 0.4231182E1 +(~0.123E~2, ~0.123E4, 0.123): 0.16359E1 0.16359001E1 +(~0.123E~2, ~0.123E4, ~0.123E1): 0.28290004 0.2829001 +(~0.123E~2, ~0.123E2, ~0.123E~2): 0.13899001E~1 0.13899E~1 +(~0.123E~2, ~0.123E1, ~0.123E~2): 0.28290003E~3 0.28290006E~3 + +Testing Real.{realCeil,realFloor,realTrunc} +0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 +0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 +0.123E4 0.123E4 0.123E4 0.123E4 +0.123E2 0.13E2 0.12E2 0.12E2 +0.31415927E1 0.4E1 0.3E1 0.3E1 +0.27182817E1 0.3E1 0.2E1 0.2E1 +0.123E1 0.2E1 0.1E1 0.1E1 +0.123 0.1E1 0.0 0.0 +0.123E~2 0.1E1 0.0 0.0 +0.11754944E~37 0.1E1 0.0 0.0 +0.5877472E~38 0.1E1 0.0 0.0 +0.1E~44 0.1E1 0.0 0.0 +0.0 0.0 0.0 0.0 +~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 +~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 +~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 +~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 +~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 +~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 +~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 +~0.123 ~0.0 ~0.1E1 ~0.0 +~0.123E~2 ~0.0 ~0.1E1 ~0.0 +~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 +~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 +~0.1E~44 ~0.0 ~0.1E1 ~0.0 +~0.0 ~0.0 ~0.0 ~0.0 + +Testing Real.{<,<=,>,>=,==,!=,?=,unordered} +< (0.34028235E39, 0.34028235E39) = false +> (0.34028235E39, 0.34028235E39) = false +== (0.34028235E39, 0.34028235E39) = true +?= (0.34028235E39, 0.34028235E39) = true +< (0.34028235E39, 0.17014117E39) = false +> (0.34028235E39, 0.17014117E39) = true +== (0.34028235E39, 0.17014117E39) = false +?= (0.34028235E39, 0.17014117E39) = false +< (0.34028235E39, 0.123E4) = false +> (0.34028235E39, 0.123E4) = true +== (0.34028235E39, 0.123E4) = false +?= (0.34028235E39, 0.123E4) = false +< (0.34028235E39, 0.123E2) = false +> (0.34028235E39, 0.123E2) = true +== (0.34028235E39, 0.123E2) = false +?= (0.34028235E39, 0.123E2) = false +< (0.34028235E39, 0.31415927E1) = false +> (0.34028235E39, 0.31415927E1) = true +== (0.34028235E39, 0.31415927E1) = false +?= (0.34028235E39, 0.31415927E1) = false +< (0.34028235E39, 0.27182817E1) = false +> (0.34028235E39, 0.27182817E1) = true +== (0.34028235E39, 0.27182817E1) = false +?= (0.34028235E39, 0.27182817E1) = false +< (0.34028235E39, 0.123E1) = false +> (0.34028235E39, 0.123E1) = true +== (0.34028235E39, 0.123E1) = false +?= (0.34028235E39, 0.123E1) = false +< (0.34028235E39, 0.123) = false +> (0.34028235E39, 0.123) = true +== (0.34028235E39, 0.123) = false +?= (0.34028235E39, 0.123) = false +< (0.34028235E39, 0.123E~2) = false +> (0.34028235E39, 0.123E~2) = true +== (0.34028235E39, 0.123E~2) = false +?= (0.34028235E39, 0.123E~2) = false +< (0.34028235E39, 0.11754944E~37) = false +> (0.34028235E39, 0.11754944E~37) = true +== (0.34028235E39, 0.11754944E~37) = false +?= (0.34028235E39, 0.11754944E~37) = false +< (0.34028235E39, 0.5877472E~38) = false +> (0.34028235E39, 0.5877472E~38) = true +== (0.34028235E39, 0.5877472E~38) = false +?= (0.34028235E39, 0.5877472E~38) = false +< (0.34028235E39, 0.1E~44) = false +> (0.34028235E39, 0.1E~44) = true +== (0.34028235E39, 0.1E~44) = false +?= (0.34028235E39, 0.1E~44) = false +< (0.34028235E39, 0.0) = false +> (0.34028235E39, 0.0) = true +== (0.34028235E39, 0.0) = false +?= (0.34028235E39, 0.0) = false +< (0.34028235E39, ~0.34028235E39) = false +> (0.34028235E39, ~0.34028235E39) = true +== (0.34028235E39, ~0.34028235E39) = false +?= (0.34028235E39, ~0.34028235E39) = false +< (0.34028235E39, ~0.17014117E39) = false +> (0.34028235E39, ~0.17014117E39) = true +== (0.34028235E39, ~0.17014117E39) = false +?= (0.34028235E39, ~0.17014117E39) = false +< (0.34028235E39, ~0.123E4) = false +> (0.34028235E39, ~0.123E4) = true +== (0.34028235E39, ~0.123E4) = false +?= (0.34028235E39, ~0.123E4) = false +< (0.34028235E39, ~0.123E2) = false +> (0.34028235E39, ~0.123E2) = true +== (0.34028235E39, ~0.123E2) = false +?= (0.34028235E39, ~0.123E2) = false +< (0.34028235E39, ~0.31415927E1) = false +> (0.34028235E39, ~0.31415927E1) = true +== (0.34028235E39, ~0.31415927E1) = false +?= (0.34028235E39, ~0.31415927E1) = false +< (0.34028235E39, ~0.27182817E1) = false +> (0.34028235E39, ~0.27182817E1) = true +== (0.34028235E39, ~0.27182817E1) = false +?= (0.34028235E39, ~0.27182817E1) = false +< (0.34028235E39, ~0.123E1) = false +> (0.34028235E39, ~0.123E1) = true +== (0.34028235E39, ~0.123E1) = false +?= (0.34028235E39, ~0.123E1) = false +< (0.34028235E39, ~0.123) = false +> (0.34028235E39, ~0.123) = true +== (0.34028235E39, ~0.123) = false +?= (0.34028235E39, ~0.123) = false +< (0.34028235E39, ~0.123E~2) = false +> (0.34028235E39, ~0.123E~2) = true +== (0.34028235E39, ~0.123E~2) = false +?= (0.34028235E39, ~0.123E~2) = false +< (0.34028235E39, ~0.11754944E~37) = false +> (0.34028235E39, ~0.11754944E~37) = true +== (0.34028235E39, ~0.11754944E~37) = false +?= (0.34028235E39, ~0.11754944E~37) = false +< (0.34028235E39, ~0.5877472E~38) = false +> (0.34028235E39, ~0.5877472E~38) = true +== (0.34028235E39, ~0.5877472E~38) = false +?= (0.34028235E39, ~0.5877472E~38) = false +< (0.34028235E39, ~0.1E~44) = false +> (0.34028235E39, ~0.1E~44) = true +== (0.34028235E39, ~0.1E~44) = false +?= (0.34028235E39, ~0.1E~44) = false +< (0.34028235E39, ~0.0) = false +> (0.34028235E39, ~0.0) = true +== (0.34028235E39, ~0.0) = false +?= (0.34028235E39, ~0.0) = false +< (0.17014117E39, 0.34028235E39) = true +> (0.17014117E39, 0.34028235E39) = false +== (0.17014117E39, 0.34028235E39) = false +?= (0.17014117E39, 0.34028235E39) = false +< (0.17014117E39, 0.17014117E39) = false +> (0.17014117E39, 0.17014117E39) = false +== (0.17014117E39, 0.17014117E39) = true +?= (0.17014117E39, 0.17014117E39) = true +< (0.17014117E39, 0.123E4) = false +> (0.17014117E39, 0.123E4) = true +== (0.17014117E39, 0.123E4) = false +?= (0.17014117E39, 0.123E4) = false +< (0.17014117E39, 0.123E2) = false +> (0.17014117E39, 0.123E2) = true +== (0.17014117E39, 0.123E2) = false +?= (0.17014117E39, 0.123E2) = false +< (0.17014117E39, 0.31415927E1) = false +> (0.17014117E39, 0.31415927E1) = true +== (0.17014117E39, 0.31415927E1) = false +?= (0.17014117E39, 0.31415927E1) = false +< (0.17014117E39, 0.27182817E1) = false +> (0.17014117E39, 0.27182817E1) = true +== (0.17014117E39, 0.27182817E1) = false +?= (0.17014117E39, 0.27182817E1) = false +< (0.17014117E39, 0.123E1) = false +> (0.17014117E39, 0.123E1) = true +== (0.17014117E39, 0.123E1) = false +?= (0.17014117E39, 0.123E1) = false +< (0.17014117E39, 0.123) = false +> (0.17014117E39, 0.123) = true +== (0.17014117E39, 0.123) = false +?= (0.17014117E39, 0.123) = false +< (0.17014117E39, 0.123E~2) = false +> (0.17014117E39, 0.123E~2) = true +== (0.17014117E39, 0.123E~2) = false +?= (0.17014117E39, 0.123E~2) = false +< (0.17014117E39, 0.11754944E~37) = false +> (0.17014117E39, 0.11754944E~37) = true +== (0.17014117E39, 0.11754944E~37) = false +?= (0.17014117E39, 0.11754944E~37) = false +< (0.17014117E39, 0.5877472E~38) = false +> (0.17014117E39, 0.5877472E~38) = true +== (0.17014117E39, 0.5877472E~38) = false +?= (0.17014117E39, 0.5877472E~38) = false +< (0.17014117E39, 0.1E~44) = false +> (0.17014117E39, 0.1E~44) = true +== (0.17014117E39, 0.1E~44) = false +?= (0.17014117E39, 0.1E~44) = false +< (0.17014117E39, 0.0) = false +> (0.17014117E39, 0.0) = true +== (0.17014117E39, 0.0) = false +?= (0.17014117E39, 0.0) = false +< (0.17014117E39, ~0.34028235E39) = false +> (0.17014117E39, ~0.34028235E39) = true +== (0.17014117E39, ~0.34028235E39) = false +?= (0.17014117E39, ~0.34028235E39) = false +< (0.17014117E39, ~0.17014117E39) = false +> (0.17014117E39, ~0.17014117E39) = true +== (0.17014117E39, ~0.17014117E39) = false +?= (0.17014117E39, ~0.17014117E39) = false +< (0.17014117E39, ~0.123E4) = false +> (0.17014117E39, ~0.123E4) = true +== (0.17014117E39, ~0.123E4) = false +?= (0.17014117E39, ~0.123E4) = false +< (0.17014117E39, ~0.123E2) = false +> (0.17014117E39, ~0.123E2) = true +== (0.17014117E39, ~0.123E2) = false +?= (0.17014117E39, ~0.123E2) = false +< (0.17014117E39, ~0.31415927E1) = false +> (0.17014117E39, ~0.31415927E1) = true +== (0.17014117E39, ~0.31415927E1) = false +?= (0.17014117E39, ~0.31415927E1) = false +< (0.17014117E39, ~0.27182817E1) = false +> (0.17014117E39, ~0.27182817E1) = true +== (0.17014117E39, ~0.27182817E1) = false +?= (0.17014117E39, ~0.27182817E1) = false +< (0.17014117E39, ~0.123E1) = false +> (0.17014117E39, ~0.123E1) = true +== (0.17014117E39, ~0.123E1) = false +?= (0.17014117E39, ~0.123E1) = false +< (0.17014117E39, ~0.123) = false +> (0.17014117E39, ~0.123) = true +== (0.17014117E39, ~0.123) = false +?= (0.17014117E39, ~0.123) = false +< (0.17014117E39, ~0.123E~2) = false +> (0.17014117E39, ~0.123E~2) = true +== (0.17014117E39, ~0.123E~2) = false +?= (0.17014117E39, ~0.123E~2) = false +< (0.17014117E39, ~0.11754944E~37) = false +> (0.17014117E39, ~0.11754944E~37) = true +== (0.17014117E39, ~0.11754944E~37) = false +?= (0.17014117E39, ~0.11754944E~37) = false +< (0.17014117E39, ~0.5877472E~38) = false +> (0.17014117E39, ~0.5877472E~38) = true +== (0.17014117E39, ~0.5877472E~38) = false +?= (0.17014117E39, ~0.5877472E~38) = false +< (0.17014117E39, ~0.1E~44) = false +> (0.17014117E39, ~0.1E~44) = true +== (0.17014117E39, ~0.1E~44) = false +?= (0.17014117E39, ~0.1E~44) = false +< (0.17014117E39, ~0.0) = false +> (0.17014117E39, ~0.0) = true +== (0.17014117E39, ~0.0) = false +?= (0.17014117E39, ~0.0) = false +< (0.123E4, 0.34028235E39) = true +> (0.123E4, 0.34028235E39) = false +== (0.123E4, 0.34028235E39) = false +?= (0.123E4, 0.34028235E39) = false +< (0.123E4, 0.17014117E39) = true +> (0.123E4, 0.17014117E39) = false +== (0.123E4, 0.17014117E39) = false +?= (0.123E4, 0.17014117E39) = false +< (0.123E4, 0.123E4) = false +> (0.123E4, 0.123E4) = false +== (0.123E4, 0.123E4) = true +?= (0.123E4, 0.123E4) = true +< (0.123E4, 0.123E2) = false +> (0.123E4, 0.123E2) = true +== (0.123E4, 0.123E2) = false +?= (0.123E4, 0.123E2) = false +< (0.123E4, 0.31415927E1) = false +> (0.123E4, 0.31415927E1) = true +== (0.123E4, 0.31415927E1) = false +?= (0.123E4, 0.31415927E1) = false +< (0.123E4, 0.27182817E1) = false +> (0.123E4, 0.27182817E1) = true +== (0.123E4, 0.27182817E1) = false +?= (0.123E4, 0.27182817E1) = false +< (0.123E4, 0.123E1) = false +> (0.123E4, 0.123E1) = true +== (0.123E4, 0.123E1) = false +?= (0.123E4, 0.123E1) = false +< (0.123E4, 0.123) = false +> (0.123E4, 0.123) = true +== (0.123E4, 0.123) = false +?= (0.123E4, 0.123) = false +< (0.123E4, 0.123E~2) = false +> (0.123E4, 0.123E~2) = true +== (0.123E4, 0.123E~2) = false +?= (0.123E4, 0.123E~2) = false +< (0.123E4, 0.11754944E~37) = false +> (0.123E4, 0.11754944E~37) = true +== (0.123E4, 0.11754944E~37) = false +?= (0.123E4, 0.11754944E~37) = false +< (0.123E4, 0.5877472E~38) = false +> (0.123E4, 0.5877472E~38) = true +== (0.123E4, 0.5877472E~38) = false +?= (0.123E4, 0.5877472E~38) = false +< (0.123E4, 0.1E~44) = false +> (0.123E4, 0.1E~44) = true +== (0.123E4, 0.1E~44) = false +?= (0.123E4, 0.1E~44) = false +< (0.123E4, 0.0) = false +> (0.123E4, 0.0) = true +== (0.123E4, 0.0) = false +?= (0.123E4, 0.0) = false +< (0.123E4, ~0.34028235E39) = false +> (0.123E4, ~0.34028235E39) = true +== (0.123E4, ~0.34028235E39) = false +?= (0.123E4, ~0.34028235E39) = false +< (0.123E4, ~0.17014117E39) = false +> (0.123E4, ~0.17014117E39) = true +== (0.123E4, ~0.17014117E39) = false +?= (0.123E4, ~0.17014117E39) = false +< (0.123E4, ~0.123E4) = false +> (0.123E4, ~0.123E4) = true +== (0.123E4, ~0.123E4) = false +?= (0.123E4, ~0.123E4) = false +< (0.123E4, ~0.123E2) = false +> (0.123E4, ~0.123E2) = true +== (0.123E4, ~0.123E2) = false +?= (0.123E4, ~0.123E2) = false +< (0.123E4, ~0.31415927E1) = false +> (0.123E4, ~0.31415927E1) = true +== (0.123E4, ~0.31415927E1) = false +?= (0.123E4, ~0.31415927E1) = false +< (0.123E4, ~0.27182817E1) = false +> (0.123E4, ~0.27182817E1) = true +== (0.123E4, ~0.27182817E1) = false +?= (0.123E4, ~0.27182817E1) = false +< (0.123E4, ~0.123E1) = false +> (0.123E4, ~0.123E1) = true +== (0.123E4, ~0.123E1) = false +?= (0.123E4, ~0.123E1) = false +< (0.123E4, ~0.123) = false +> (0.123E4, ~0.123) = true +== (0.123E4, ~0.123) = false +?= (0.123E4, ~0.123) = false +< (0.123E4, ~0.123E~2) = false +> (0.123E4, ~0.123E~2) = true +== (0.123E4, ~0.123E~2) = false +?= (0.123E4, ~0.123E~2) = false +< (0.123E4, ~0.11754944E~37) = false +> (0.123E4, ~0.11754944E~37) = true +== (0.123E4, ~0.11754944E~37) = false +?= (0.123E4, ~0.11754944E~37) = false +< (0.123E4, ~0.5877472E~38) = false +> (0.123E4, ~0.5877472E~38) = true +== (0.123E4, ~0.5877472E~38) = false +?= (0.123E4, ~0.5877472E~38) = false +< (0.123E4, ~0.1E~44) = false +> (0.123E4, ~0.1E~44) = true +== (0.123E4, ~0.1E~44) = false +?= (0.123E4, ~0.1E~44) = false +< (0.123E4, ~0.0) = false +> (0.123E4, ~0.0) = true +== (0.123E4, ~0.0) = false +?= (0.123E4, ~0.0) = false +< (0.123E2, 0.34028235E39) = true +> (0.123E2, 0.34028235E39) = false +== (0.123E2, 0.34028235E39) = false +?= (0.123E2, 0.34028235E39) = false +< (0.123E2, 0.17014117E39) = true +> (0.123E2, 0.17014117E39) = false +== (0.123E2, 0.17014117E39) = false +?= (0.123E2, 0.17014117E39) = false +< (0.123E2, 0.123E4) = true +> (0.123E2, 0.123E4) = false +== (0.123E2, 0.123E4) = false +?= (0.123E2, 0.123E4) = false +< (0.123E2, 0.123E2) = false +> (0.123E2, 0.123E2) = false +== (0.123E2, 0.123E2) = true +?= (0.123E2, 0.123E2) = true +< (0.123E2, 0.31415927E1) = false +> (0.123E2, 0.31415927E1) = true +== (0.123E2, 0.31415927E1) = false +?= (0.123E2, 0.31415927E1) = false +< (0.123E2, 0.27182817E1) = false +> (0.123E2, 0.27182817E1) = true +== (0.123E2, 0.27182817E1) = false +?= (0.123E2, 0.27182817E1) = false +< (0.123E2, 0.123E1) = false +> (0.123E2, 0.123E1) = true +== (0.123E2, 0.123E1) = false +?= (0.123E2, 0.123E1) = false +< (0.123E2, 0.123) = false +> (0.123E2, 0.123) = true +== (0.123E2, 0.123) = false +?= (0.123E2, 0.123) = false +< (0.123E2, 0.123E~2) = false +> (0.123E2, 0.123E~2) = true +== (0.123E2, 0.123E~2) = false +?= (0.123E2, 0.123E~2) = false +< (0.123E2, 0.11754944E~37) = false +> (0.123E2, 0.11754944E~37) = true +== (0.123E2, 0.11754944E~37) = false +?= (0.123E2, 0.11754944E~37) = false +< (0.123E2, 0.5877472E~38) = false +> (0.123E2, 0.5877472E~38) = true +== (0.123E2, 0.5877472E~38) = false +?= (0.123E2, 0.5877472E~38) = false +< (0.123E2, 0.1E~44) = false +> (0.123E2, 0.1E~44) = true +== (0.123E2, 0.1E~44) = false +?= (0.123E2, 0.1E~44) = false +< (0.123E2, 0.0) = false +> (0.123E2, 0.0) = true +== (0.123E2, 0.0) = false +?= (0.123E2, 0.0) = false +< (0.123E2, ~0.34028235E39) = false +> (0.123E2, ~0.34028235E39) = true +== (0.123E2, ~0.34028235E39) = false +?= (0.123E2, ~0.34028235E39) = false +< (0.123E2, ~0.17014117E39) = false +> (0.123E2, ~0.17014117E39) = true +== (0.123E2, ~0.17014117E39) = false +?= (0.123E2, ~0.17014117E39) = false +< (0.123E2, ~0.123E4) = false +> (0.123E2, ~0.123E4) = true +== (0.123E2, ~0.123E4) = false +?= (0.123E2, ~0.123E4) = false +< (0.123E2, ~0.123E2) = false +> (0.123E2, ~0.123E2) = true +== (0.123E2, ~0.123E2) = false +?= (0.123E2, ~0.123E2) = false +< (0.123E2, ~0.31415927E1) = false +> (0.123E2, ~0.31415927E1) = true +== (0.123E2, ~0.31415927E1) = false +?= (0.123E2, ~0.31415927E1) = false +< (0.123E2, ~0.27182817E1) = false +> (0.123E2, ~0.27182817E1) = true +== (0.123E2, ~0.27182817E1) = false +?= (0.123E2, ~0.27182817E1) = false +< (0.123E2, ~0.123E1) = false +> (0.123E2, ~0.123E1) = true +== (0.123E2, ~0.123E1) = false +?= (0.123E2, ~0.123E1) = false +< (0.123E2, ~0.123) = false +> (0.123E2, ~0.123) = true +== (0.123E2, ~0.123) = false +?= (0.123E2, ~0.123) = false +< (0.123E2, ~0.123E~2) = false +> (0.123E2, ~0.123E~2) = true +== (0.123E2, ~0.123E~2) = false +?= (0.123E2, ~0.123E~2) = false +< (0.123E2, ~0.11754944E~37) = false +> (0.123E2, ~0.11754944E~37) = true +== (0.123E2, ~0.11754944E~37) = false +?= (0.123E2, ~0.11754944E~37) = false +< (0.123E2, ~0.5877472E~38) = false +> (0.123E2, ~0.5877472E~38) = true +== (0.123E2, ~0.5877472E~38) = false +?= (0.123E2, ~0.5877472E~38) = false +< (0.123E2, ~0.1E~44) = false +> (0.123E2, ~0.1E~44) = true +== (0.123E2, ~0.1E~44) = false +?= (0.123E2, ~0.1E~44) = false +< (0.123E2, ~0.0) = false +> (0.123E2, ~0.0) = true +== (0.123E2, ~0.0) = false +?= (0.123E2, ~0.0) = false +< (0.31415927E1, 0.34028235E39) = true +> (0.31415927E1, 0.34028235E39) = false +== (0.31415927E1, 0.34028235E39) = false +?= (0.31415927E1, 0.34028235E39) = false +< (0.31415927E1, 0.17014117E39) = true +> (0.31415927E1, 0.17014117E39) = false +== (0.31415927E1, 0.17014117E39) = false +?= (0.31415927E1, 0.17014117E39) = false +< (0.31415927E1, 0.123E4) = true +> (0.31415927E1, 0.123E4) = false +== (0.31415927E1, 0.123E4) = false +?= (0.31415927E1, 0.123E4) = false +< (0.31415927E1, 0.123E2) = true +> (0.31415927E1, 0.123E2) = false +== (0.31415927E1, 0.123E2) = false +?= (0.31415927E1, 0.123E2) = false +< (0.31415927E1, 0.31415927E1) = false +> (0.31415927E1, 0.31415927E1) = false +== (0.31415927E1, 0.31415927E1) = true +?= (0.31415927E1, 0.31415927E1) = true +< (0.31415927E1, 0.27182817E1) = false +> (0.31415927E1, 0.27182817E1) = true +== (0.31415927E1, 0.27182817E1) = false +?= (0.31415927E1, 0.27182817E1) = false +< (0.31415927E1, 0.123E1) = false +> (0.31415927E1, 0.123E1) = true +== (0.31415927E1, 0.123E1) = false +?= (0.31415927E1, 0.123E1) = false +< (0.31415927E1, 0.123) = false +> (0.31415927E1, 0.123) = true +== (0.31415927E1, 0.123) = false +?= (0.31415927E1, 0.123) = false +< (0.31415927E1, 0.123E~2) = false +> (0.31415927E1, 0.123E~2) = true +== (0.31415927E1, 0.123E~2) = false +?= (0.31415927E1, 0.123E~2) = false +< (0.31415927E1, 0.11754944E~37) = false +> (0.31415927E1, 0.11754944E~37) = true +== (0.31415927E1, 0.11754944E~37) = false +?= (0.31415927E1, 0.11754944E~37) = false +< (0.31415927E1, 0.5877472E~38) = false +> (0.31415927E1, 0.5877472E~38) = true +== (0.31415927E1, 0.5877472E~38) = false +?= (0.31415927E1, 0.5877472E~38) = false +< (0.31415927E1, 0.1E~44) = false +> (0.31415927E1, 0.1E~44) = true +== (0.31415927E1, 0.1E~44) = false +?= (0.31415927E1, 0.1E~44) = false +< (0.31415927E1, 0.0) = false +> (0.31415927E1, 0.0) = true +== (0.31415927E1, 0.0) = false +?= (0.31415927E1, 0.0) = false +< (0.31415927E1, ~0.34028235E39) = false +> (0.31415927E1, ~0.34028235E39) = true +== (0.31415927E1, ~0.34028235E39) = false +?= (0.31415927E1, ~0.34028235E39) = false +< (0.31415927E1, ~0.17014117E39) = false +> (0.31415927E1, ~0.17014117E39) = true +== (0.31415927E1, ~0.17014117E39) = false +?= (0.31415927E1, ~0.17014117E39) = false +< (0.31415927E1, ~0.123E4) = false +> (0.31415927E1, ~0.123E4) = true +== (0.31415927E1, ~0.123E4) = false +?= (0.31415927E1, ~0.123E4) = false +< (0.31415927E1, ~0.123E2) = false +> (0.31415927E1, ~0.123E2) = true +== (0.31415927E1, ~0.123E2) = false +?= (0.31415927E1, ~0.123E2) = false +< (0.31415927E1, ~0.31415927E1) = false +> (0.31415927E1, ~0.31415927E1) = true +== (0.31415927E1, ~0.31415927E1) = false +?= (0.31415927E1, ~0.31415927E1) = false +< (0.31415927E1, ~0.27182817E1) = false +> (0.31415927E1, ~0.27182817E1) = true +== (0.31415927E1, ~0.27182817E1) = false +?= (0.31415927E1, ~0.27182817E1) = false +< (0.31415927E1, ~0.123E1) = false +> (0.31415927E1, ~0.123E1) = true +== (0.31415927E1, ~0.123E1) = false +?= (0.31415927E1, ~0.123E1) = false +< (0.31415927E1, ~0.123) = false +> (0.31415927E1, ~0.123) = true +== (0.31415927E1, ~0.123) = false +?= (0.31415927E1, ~0.123) = false +< (0.31415927E1, ~0.123E~2) = false +> (0.31415927E1, ~0.123E~2) = true +== (0.31415927E1, ~0.123E~2) = false +?= (0.31415927E1, ~0.123E~2) = false +< (0.31415927E1, ~0.11754944E~37) = false +> (0.31415927E1, ~0.11754944E~37) = true +== (0.31415927E1, ~0.11754944E~37) = false +?= (0.31415927E1, ~0.11754944E~37) = false +< (0.31415927E1, ~0.5877472E~38) = false +> (0.31415927E1, ~0.5877472E~38) = true +== (0.31415927E1, ~0.5877472E~38) = false +?= (0.31415927E1, ~0.5877472E~38) = false +< (0.31415927E1, ~0.1E~44) = false +> (0.31415927E1, ~0.1E~44) = true +== (0.31415927E1, ~0.1E~44) = false +?= (0.31415927E1, ~0.1E~44) = false +< (0.31415927E1, ~0.0) = false +> (0.31415927E1, ~0.0) = true +== (0.31415927E1, ~0.0) = false +?= (0.31415927E1, ~0.0) = false +< (0.27182817E1, 0.34028235E39) = true +> (0.27182817E1, 0.34028235E39) = false +== (0.27182817E1, 0.34028235E39) = false +?= (0.27182817E1, 0.34028235E39) = false +< (0.27182817E1, 0.17014117E39) = true +> (0.27182817E1, 0.17014117E39) = false +== (0.27182817E1, 0.17014117E39) = false +?= (0.27182817E1, 0.17014117E39) = false +< (0.27182817E1, 0.123E4) = true +> (0.27182817E1, 0.123E4) = false +== (0.27182817E1, 0.123E4) = false +?= (0.27182817E1, 0.123E4) = false +< (0.27182817E1, 0.123E2) = true +> (0.27182817E1, 0.123E2) = false +== (0.27182817E1, 0.123E2) = false +?= (0.27182817E1, 0.123E2) = false +< (0.27182817E1, 0.31415927E1) = true +> (0.27182817E1, 0.31415927E1) = false +== (0.27182817E1, 0.31415927E1) = false +?= (0.27182817E1, 0.31415927E1) = false +< (0.27182817E1, 0.27182817E1) = false +> (0.27182817E1, 0.27182817E1) = false +== (0.27182817E1, 0.27182817E1) = true +?= (0.27182817E1, 0.27182817E1) = true +< (0.27182817E1, 0.123E1) = false +> (0.27182817E1, 0.123E1) = true +== (0.27182817E1, 0.123E1) = false +?= (0.27182817E1, 0.123E1) = false +< (0.27182817E1, 0.123) = false +> (0.27182817E1, 0.123) = true +== (0.27182817E1, 0.123) = false +?= (0.27182817E1, 0.123) = false +< (0.27182817E1, 0.123E~2) = false +> (0.27182817E1, 0.123E~2) = true +== (0.27182817E1, 0.123E~2) = false +?= (0.27182817E1, 0.123E~2) = false +< (0.27182817E1, 0.11754944E~37) = false +> (0.27182817E1, 0.11754944E~37) = true +== (0.27182817E1, 0.11754944E~37) = false +?= (0.27182817E1, 0.11754944E~37) = false +< (0.27182817E1, 0.5877472E~38) = false +> (0.27182817E1, 0.5877472E~38) = true +== (0.27182817E1, 0.5877472E~38) = false +?= (0.27182817E1, 0.5877472E~38) = false +< (0.27182817E1, 0.1E~44) = false +> (0.27182817E1, 0.1E~44) = true +== (0.27182817E1, 0.1E~44) = false +?= (0.27182817E1, 0.1E~44) = false +< (0.27182817E1, 0.0) = false +> (0.27182817E1, 0.0) = true +== (0.27182817E1, 0.0) = false +?= (0.27182817E1, 0.0) = false +< (0.27182817E1, ~0.34028235E39) = false +> (0.27182817E1, ~0.34028235E39) = true +== (0.27182817E1, ~0.34028235E39) = false +?= (0.27182817E1, ~0.34028235E39) = false +< (0.27182817E1, ~0.17014117E39) = false +> (0.27182817E1, ~0.17014117E39) = true +== (0.27182817E1, ~0.17014117E39) = false +?= (0.27182817E1, ~0.17014117E39) = false +< (0.27182817E1, ~0.123E4) = false +> (0.27182817E1, ~0.123E4) = true +== (0.27182817E1, ~0.123E4) = false +?= (0.27182817E1, ~0.123E4) = false +< (0.27182817E1, ~0.123E2) = false +> (0.27182817E1, ~0.123E2) = true +== (0.27182817E1, ~0.123E2) = false +?= (0.27182817E1, ~0.123E2) = false +< (0.27182817E1, ~0.31415927E1) = false +> (0.27182817E1, ~0.31415927E1) = true +== (0.27182817E1, ~0.31415927E1) = false +?= (0.27182817E1, ~0.31415927E1) = false +< (0.27182817E1, ~0.27182817E1) = false +> (0.27182817E1, ~0.27182817E1) = true +== (0.27182817E1, ~0.27182817E1) = false +?= (0.27182817E1, ~0.27182817E1) = false +< (0.27182817E1, ~0.123E1) = false +> (0.27182817E1, ~0.123E1) = true +== (0.27182817E1, ~0.123E1) = false +?= (0.27182817E1, ~0.123E1) = false +< (0.27182817E1, ~0.123) = false +> (0.27182817E1, ~0.123) = true +== (0.27182817E1, ~0.123) = false +?= (0.27182817E1, ~0.123) = false +< (0.27182817E1, ~0.123E~2) = false +> (0.27182817E1, ~0.123E~2) = true +== (0.27182817E1, ~0.123E~2) = false +?= (0.27182817E1, ~0.123E~2) = false +< (0.27182817E1, ~0.11754944E~37) = false +> (0.27182817E1, ~0.11754944E~37) = true +== (0.27182817E1, ~0.11754944E~37) = false +?= (0.27182817E1, ~0.11754944E~37) = false +< (0.27182817E1, ~0.5877472E~38) = false +> (0.27182817E1, ~0.5877472E~38) = true +== (0.27182817E1, ~0.5877472E~38) = false +?= (0.27182817E1, ~0.5877472E~38) = false +< (0.27182817E1, ~0.1E~44) = false +> (0.27182817E1, ~0.1E~44) = true +== (0.27182817E1, ~0.1E~44) = false +?= (0.27182817E1, ~0.1E~44) = false +< (0.27182817E1, ~0.0) = false +> (0.27182817E1, ~0.0) = true +== (0.27182817E1, ~0.0) = false +?= (0.27182817E1, ~0.0) = false +< (0.123E1, 0.34028235E39) = true +> (0.123E1, 0.34028235E39) = false +== (0.123E1, 0.34028235E39) = false +?= (0.123E1, 0.34028235E39) = false +< (0.123E1, 0.17014117E39) = true +> (0.123E1, 0.17014117E39) = false +== (0.123E1, 0.17014117E39) = false +?= (0.123E1, 0.17014117E39) = false +< (0.123E1, 0.123E4) = true +> (0.123E1, 0.123E4) = false +== (0.123E1, 0.123E4) = false +?= (0.123E1, 0.123E4) = false +< (0.123E1, 0.123E2) = true +> (0.123E1, 0.123E2) = false +== (0.123E1, 0.123E2) = false +?= (0.123E1, 0.123E2) = false +< (0.123E1, 0.31415927E1) = true +> (0.123E1, 0.31415927E1) = false +== (0.123E1, 0.31415927E1) = false +?= (0.123E1, 0.31415927E1) = false +< (0.123E1, 0.27182817E1) = true +> (0.123E1, 0.27182817E1) = false +== (0.123E1, 0.27182817E1) = false +?= (0.123E1, 0.27182817E1) = false +< (0.123E1, 0.123E1) = false +> (0.123E1, 0.123E1) = false +== (0.123E1, 0.123E1) = true +?= (0.123E1, 0.123E1) = true +< (0.123E1, 0.123) = false +> (0.123E1, 0.123) = true +== (0.123E1, 0.123) = false +?= (0.123E1, 0.123) = false +< (0.123E1, 0.123E~2) = false +> (0.123E1, 0.123E~2) = true +== (0.123E1, 0.123E~2) = false +?= (0.123E1, 0.123E~2) = false +< (0.123E1, 0.11754944E~37) = false +> (0.123E1, 0.11754944E~37) = true +== (0.123E1, 0.11754944E~37) = false +?= (0.123E1, 0.11754944E~37) = false +< (0.123E1, 0.5877472E~38) = false +> (0.123E1, 0.5877472E~38) = true +== (0.123E1, 0.5877472E~38) = false +?= (0.123E1, 0.5877472E~38) = false +< (0.123E1, 0.1E~44) = false +> (0.123E1, 0.1E~44) = true +== (0.123E1, 0.1E~44) = false +?= (0.123E1, 0.1E~44) = false +< (0.123E1, 0.0) = false +> (0.123E1, 0.0) = true +== (0.123E1, 0.0) = false +?= (0.123E1, 0.0) = false +< (0.123E1, ~0.34028235E39) = false +> (0.123E1, ~0.34028235E39) = true +== (0.123E1, ~0.34028235E39) = false +?= (0.123E1, ~0.34028235E39) = false +< (0.123E1, ~0.17014117E39) = false +> (0.123E1, ~0.17014117E39) = true +== (0.123E1, ~0.17014117E39) = false +?= (0.123E1, ~0.17014117E39) = false +< (0.123E1, ~0.123E4) = false +> (0.123E1, ~0.123E4) = true +== (0.123E1, ~0.123E4) = false +?= (0.123E1, ~0.123E4) = false +< (0.123E1, ~0.123E2) = false +> (0.123E1, ~0.123E2) = true +== (0.123E1, ~0.123E2) = false +?= (0.123E1, ~0.123E2) = false +< (0.123E1, ~0.31415927E1) = false +> (0.123E1, ~0.31415927E1) = true +== (0.123E1, ~0.31415927E1) = false +?= (0.123E1, ~0.31415927E1) = false +< (0.123E1, ~0.27182817E1) = false +> (0.123E1, ~0.27182817E1) = true +== (0.123E1, ~0.27182817E1) = false +?= (0.123E1, ~0.27182817E1) = false +< (0.123E1, ~0.123E1) = false +> (0.123E1, ~0.123E1) = true +== (0.123E1, ~0.123E1) = false +?= (0.123E1, ~0.123E1) = false +< (0.123E1, ~0.123) = false +> (0.123E1, ~0.123) = true +== (0.123E1, ~0.123) = false +?= (0.123E1, ~0.123) = false +< (0.123E1, ~0.123E~2) = false +> (0.123E1, ~0.123E~2) = true +== (0.123E1, ~0.123E~2) = false +?= (0.123E1, ~0.123E~2) = false +< (0.123E1, ~0.11754944E~37) = false +> (0.123E1, ~0.11754944E~37) = true +== (0.123E1, ~0.11754944E~37) = false +?= (0.123E1, ~0.11754944E~37) = false +< (0.123E1, ~0.5877472E~38) = false +> (0.123E1, ~0.5877472E~38) = true +== (0.123E1, ~0.5877472E~38) = false +?= (0.123E1, ~0.5877472E~38) = false +< (0.123E1, ~0.1E~44) = false +> (0.123E1, ~0.1E~44) = true +== (0.123E1, ~0.1E~44) = false +?= (0.123E1, ~0.1E~44) = false +< (0.123E1, ~0.0) = false +> (0.123E1, ~0.0) = true +== (0.123E1, ~0.0) = false +?= (0.123E1, ~0.0) = false +< (0.123, 0.34028235E39) = true +> (0.123, 0.34028235E39) = false +== (0.123, 0.34028235E39) = false +?= (0.123, 0.34028235E39) = false +< (0.123, 0.17014117E39) = true +> (0.123, 0.17014117E39) = false +== (0.123, 0.17014117E39) = false +?= (0.123, 0.17014117E39) = false +< (0.123, 0.123E4) = true +> (0.123, 0.123E4) = false +== (0.123, 0.123E4) = false +?= (0.123, 0.123E4) = false +< (0.123, 0.123E2) = true +> (0.123, 0.123E2) = false +== (0.123, 0.123E2) = false +?= (0.123, 0.123E2) = false +< (0.123, 0.31415927E1) = true +> (0.123, 0.31415927E1) = false +== (0.123, 0.31415927E1) = false +?= (0.123, 0.31415927E1) = false +< (0.123, 0.27182817E1) = true +> (0.123, 0.27182817E1) = false +== (0.123, 0.27182817E1) = false +?= (0.123, 0.27182817E1) = false +< (0.123, 0.123E1) = true +> (0.123, 0.123E1) = false +== (0.123, 0.123E1) = false +?= (0.123, 0.123E1) = false +< (0.123, 0.123) = false +> (0.123, 0.123) = false +== (0.123, 0.123) = true +?= (0.123, 0.123) = true +< (0.123, 0.123E~2) = false +> (0.123, 0.123E~2) = true +== (0.123, 0.123E~2) = false +?= (0.123, 0.123E~2) = false +< (0.123, 0.11754944E~37) = false +> (0.123, 0.11754944E~37) = true +== (0.123, 0.11754944E~37) = false +?= (0.123, 0.11754944E~37) = false +< (0.123, 0.5877472E~38) = false +> (0.123, 0.5877472E~38) = true +== (0.123, 0.5877472E~38) = false +?= (0.123, 0.5877472E~38) = false +< (0.123, 0.1E~44) = false +> (0.123, 0.1E~44) = true +== (0.123, 0.1E~44) = false +?= (0.123, 0.1E~44) = false +< (0.123, 0.0) = false +> (0.123, 0.0) = true +== (0.123, 0.0) = false +?= (0.123, 0.0) = false +< (0.123, ~0.34028235E39) = false +> (0.123, ~0.34028235E39) = true +== (0.123, ~0.34028235E39) = false +?= (0.123, ~0.34028235E39) = false +< (0.123, ~0.17014117E39) = false +> (0.123, ~0.17014117E39) = true +== (0.123, ~0.17014117E39) = false +?= (0.123, ~0.17014117E39) = false +< (0.123, ~0.123E4) = false +> (0.123, ~0.123E4) = true +== (0.123, ~0.123E4) = false +?= (0.123, ~0.123E4) = false +< (0.123, ~0.123E2) = false +> (0.123, ~0.123E2) = true +== (0.123, ~0.123E2) = false +?= (0.123, ~0.123E2) = false +< (0.123, ~0.31415927E1) = false +> (0.123, ~0.31415927E1) = true +== (0.123, ~0.31415927E1) = false +?= (0.123, ~0.31415927E1) = false +< (0.123, ~0.27182817E1) = false +> (0.123, ~0.27182817E1) = true +== (0.123, ~0.27182817E1) = false +?= (0.123, ~0.27182817E1) = false +< (0.123, ~0.123E1) = false +> (0.123, ~0.123E1) = true +== (0.123, ~0.123E1) = false +?= (0.123, ~0.123E1) = false +< (0.123, ~0.123) = false +> (0.123, ~0.123) = true +== (0.123, ~0.123) = false +?= (0.123, ~0.123) = false +< (0.123, ~0.123E~2) = false +> (0.123, ~0.123E~2) = true +== (0.123, ~0.123E~2) = false +?= (0.123, ~0.123E~2) = false +< (0.123, ~0.11754944E~37) = false +> (0.123, ~0.11754944E~37) = true +== (0.123, ~0.11754944E~37) = false +?= (0.123, ~0.11754944E~37) = false +< (0.123, ~0.5877472E~38) = false +> (0.123, ~0.5877472E~38) = true +== (0.123, ~0.5877472E~38) = false +?= (0.123, ~0.5877472E~38) = false +< (0.123, ~0.1E~44) = false +> (0.123, ~0.1E~44) = true +== (0.123, ~0.1E~44) = false +?= (0.123, ~0.1E~44) = false +< (0.123, ~0.0) = false +> (0.123, ~0.0) = true +== (0.123, ~0.0) = false +?= (0.123, ~0.0) = false +< (0.123E~2, 0.34028235E39) = true +> (0.123E~2, 0.34028235E39) = false +== (0.123E~2, 0.34028235E39) = false +?= (0.123E~2, 0.34028235E39) = false +< (0.123E~2, 0.17014117E39) = true +> (0.123E~2, 0.17014117E39) = false +== (0.123E~2, 0.17014117E39) = false +?= (0.123E~2, 0.17014117E39) = false +< (0.123E~2, 0.123E4) = true +> (0.123E~2, 0.123E4) = false +== (0.123E~2, 0.123E4) = false +?= (0.123E~2, 0.123E4) = false +< (0.123E~2, 0.123E2) = true +> (0.123E~2, 0.123E2) = false +== (0.123E~2, 0.123E2) = false +?= (0.123E~2, 0.123E2) = false +< (0.123E~2, 0.31415927E1) = true +> (0.123E~2, 0.31415927E1) = false +== (0.123E~2, 0.31415927E1) = false +?= (0.123E~2, 0.31415927E1) = false +< (0.123E~2, 0.27182817E1) = true +> (0.123E~2, 0.27182817E1) = false +== (0.123E~2, 0.27182817E1) = false +?= (0.123E~2, 0.27182817E1) = false +< (0.123E~2, 0.123E1) = true +> (0.123E~2, 0.123E1) = false +== (0.123E~2, 0.123E1) = false +?= (0.123E~2, 0.123E1) = false +< (0.123E~2, 0.123) = true +> (0.123E~2, 0.123) = false +== (0.123E~2, 0.123) = false +?= (0.123E~2, 0.123) = false +< (0.123E~2, 0.123E~2) = false +> (0.123E~2, 0.123E~2) = false +== (0.123E~2, 0.123E~2) = true +?= (0.123E~2, 0.123E~2) = true +< (0.123E~2, 0.11754944E~37) = false +> (0.123E~2, 0.11754944E~37) = true +== (0.123E~2, 0.11754944E~37) = false +?= (0.123E~2, 0.11754944E~37) = false +< (0.123E~2, 0.5877472E~38) = false +> (0.123E~2, 0.5877472E~38) = true +== (0.123E~2, 0.5877472E~38) = false +?= (0.123E~2, 0.5877472E~38) = false +< (0.123E~2, 0.1E~44) = false +> (0.123E~2, 0.1E~44) = true +== (0.123E~2, 0.1E~44) = false +?= (0.123E~2, 0.1E~44) = false +< (0.123E~2, 0.0) = false +> (0.123E~2, 0.0) = true +== (0.123E~2, 0.0) = false +?= (0.123E~2, 0.0) = false +< (0.123E~2, ~0.34028235E39) = false +> (0.123E~2, ~0.34028235E39) = true +== (0.123E~2, ~0.34028235E39) = false +?= (0.123E~2, ~0.34028235E39) = false +< (0.123E~2, ~0.17014117E39) = false +> (0.123E~2, ~0.17014117E39) = true +== (0.123E~2, ~0.17014117E39) = false +?= (0.123E~2, ~0.17014117E39) = false +< (0.123E~2, ~0.123E4) = false +> (0.123E~2, ~0.123E4) = true +== (0.123E~2, ~0.123E4) = false +?= (0.123E~2, ~0.123E4) = false +< (0.123E~2, ~0.123E2) = false +> (0.123E~2, ~0.123E2) = true +== (0.123E~2, ~0.123E2) = false +?= (0.123E~2, ~0.123E2) = false +< (0.123E~2, ~0.31415927E1) = false +> (0.123E~2, ~0.31415927E1) = true +== (0.123E~2, ~0.31415927E1) = false +?= (0.123E~2, ~0.31415927E1) = false +< (0.123E~2, ~0.27182817E1) = false +> (0.123E~2, ~0.27182817E1) = true +== (0.123E~2, ~0.27182817E1) = false +?= (0.123E~2, ~0.27182817E1) = false +< (0.123E~2, ~0.123E1) = false +> (0.123E~2, ~0.123E1) = true +== (0.123E~2, ~0.123E1) = false +?= (0.123E~2, ~0.123E1) = false +< (0.123E~2, ~0.123) = false +> (0.123E~2, ~0.123) = true +== (0.123E~2, ~0.123) = false +?= (0.123E~2, ~0.123) = false +< (0.123E~2, ~0.123E~2) = false +> (0.123E~2, ~0.123E~2) = true +== (0.123E~2, ~0.123E~2) = false +?= (0.123E~2, ~0.123E~2) = false +< (0.123E~2, ~0.11754944E~37) = false +> (0.123E~2, ~0.11754944E~37) = true +== (0.123E~2, ~0.11754944E~37) = false +?= (0.123E~2, ~0.11754944E~37) = false +< (0.123E~2, ~0.5877472E~38) = false +> (0.123E~2, ~0.5877472E~38) = true +== (0.123E~2, ~0.5877472E~38) = false +?= (0.123E~2, ~0.5877472E~38) = false +< (0.123E~2, ~0.1E~44) = false +> (0.123E~2, ~0.1E~44) = true +== (0.123E~2, ~0.1E~44) = false +?= (0.123E~2, ~0.1E~44) = false +< (0.123E~2, ~0.0) = false +> (0.123E~2, ~0.0) = true +== (0.123E~2, ~0.0) = false +?= (0.123E~2, ~0.0) = false +< (0.11754944E~37, 0.34028235E39) = true +> (0.11754944E~37, 0.34028235E39) = false +== (0.11754944E~37, 0.34028235E39) = false +?= (0.11754944E~37, 0.34028235E39) = false +< (0.11754944E~37, 0.17014117E39) = true +> (0.11754944E~37, 0.17014117E39) = false +== (0.11754944E~37, 0.17014117E39) = false +?= (0.11754944E~37, 0.17014117E39) = false +< (0.11754944E~37, 0.123E4) = true +> (0.11754944E~37, 0.123E4) = false +== (0.11754944E~37, 0.123E4) = false +?= (0.11754944E~37, 0.123E4) = false +< (0.11754944E~37, 0.123E2) = true +> (0.11754944E~37, 0.123E2) = false +== (0.11754944E~37, 0.123E2) = false +?= (0.11754944E~37, 0.123E2) = false +< (0.11754944E~37, 0.31415927E1) = true +> (0.11754944E~37, 0.31415927E1) = false +== (0.11754944E~37, 0.31415927E1) = false +?= (0.11754944E~37, 0.31415927E1) = false +< (0.11754944E~37, 0.27182817E1) = true +> (0.11754944E~37, 0.27182817E1) = false +== (0.11754944E~37, 0.27182817E1) = false +?= (0.11754944E~37, 0.27182817E1) = false +< (0.11754944E~37, 0.123E1) = true +> (0.11754944E~37, 0.123E1) = false +== (0.11754944E~37, 0.123E1) = false +?= (0.11754944E~37, 0.123E1) = false +< (0.11754944E~37, 0.123) = true +> (0.11754944E~37, 0.123) = false +== (0.11754944E~37, 0.123) = false +?= (0.11754944E~37, 0.123) = false +< (0.11754944E~37, 0.123E~2) = true +> (0.11754944E~37, 0.123E~2) = false +== (0.11754944E~37, 0.123E~2) = false +?= (0.11754944E~37, 0.123E~2) = false +< (0.11754944E~37, 0.11754944E~37) = false +> (0.11754944E~37, 0.11754944E~37) = false +== (0.11754944E~37, 0.11754944E~37) = true +?= (0.11754944E~37, 0.11754944E~37) = true +< (0.11754944E~37, 0.5877472E~38) = false +> (0.11754944E~37, 0.5877472E~38) = true +== (0.11754944E~37, 0.5877472E~38) = false +?= (0.11754944E~37, 0.5877472E~38) = false +< (0.11754944E~37, 0.1E~44) = false +> (0.11754944E~37, 0.1E~44) = true +== (0.11754944E~37, 0.1E~44) = false +?= (0.11754944E~37, 0.1E~44) = false +< (0.11754944E~37, 0.0) = false +> (0.11754944E~37, 0.0) = true +== (0.11754944E~37, 0.0) = false +?= (0.11754944E~37, 0.0) = false +< (0.11754944E~37, ~0.34028235E39) = false +> (0.11754944E~37, ~0.34028235E39) = true +== (0.11754944E~37, ~0.34028235E39) = false +?= (0.11754944E~37, ~0.34028235E39) = false +< (0.11754944E~37, ~0.17014117E39) = false +> (0.11754944E~37, ~0.17014117E39) = true +== (0.11754944E~37, ~0.17014117E39) = false +?= (0.11754944E~37, ~0.17014117E39) = false +< (0.11754944E~37, ~0.123E4) = false +> (0.11754944E~37, ~0.123E4) = true +== (0.11754944E~37, ~0.123E4) = false +?= (0.11754944E~37, ~0.123E4) = false +< (0.11754944E~37, ~0.123E2) = false +> (0.11754944E~37, ~0.123E2) = true +== (0.11754944E~37, ~0.123E2) = false +?= (0.11754944E~37, ~0.123E2) = false +< (0.11754944E~37, ~0.31415927E1) = false +> (0.11754944E~37, ~0.31415927E1) = true +== (0.11754944E~37, ~0.31415927E1) = false +?= (0.11754944E~37, ~0.31415927E1) = false +< (0.11754944E~37, ~0.27182817E1) = false +> (0.11754944E~37, ~0.27182817E1) = true +== (0.11754944E~37, ~0.27182817E1) = false +?= (0.11754944E~37, ~0.27182817E1) = false +< (0.11754944E~37, ~0.123E1) = false +> (0.11754944E~37, ~0.123E1) = true +== (0.11754944E~37, ~0.123E1) = false +?= (0.11754944E~37, ~0.123E1) = false +< (0.11754944E~37, ~0.123) = false +> (0.11754944E~37, ~0.123) = true +== (0.11754944E~37, ~0.123) = false +?= (0.11754944E~37, ~0.123) = false +< (0.11754944E~37, ~0.123E~2) = false +> (0.11754944E~37, ~0.123E~2) = true +== (0.11754944E~37, ~0.123E~2) = false +?= (0.11754944E~37, ~0.123E~2) = false +< (0.11754944E~37, ~0.11754944E~37) = false +> (0.11754944E~37, ~0.11754944E~37) = true +== (0.11754944E~37, ~0.11754944E~37) = false +?= (0.11754944E~37, ~0.11754944E~37) = false +< (0.11754944E~37, ~0.5877472E~38) = false +> (0.11754944E~37, ~0.5877472E~38) = true +== (0.11754944E~37, ~0.5877472E~38) = false +?= (0.11754944E~37, ~0.5877472E~38) = false +< (0.11754944E~37, ~0.1E~44) = false +> (0.11754944E~37, ~0.1E~44) = true +== (0.11754944E~37, ~0.1E~44) = false +?= (0.11754944E~37, ~0.1E~44) = false +< (0.11754944E~37, ~0.0) = false +> (0.11754944E~37, ~0.0) = true +== (0.11754944E~37, ~0.0) = false +?= (0.11754944E~37, ~0.0) = false +< (0.5877472E~38, 0.34028235E39) = true +> (0.5877472E~38, 0.34028235E39) = false +== (0.5877472E~38, 0.34028235E39) = false +?= (0.5877472E~38, 0.34028235E39) = false +< (0.5877472E~38, 0.17014117E39) = true +> (0.5877472E~38, 0.17014117E39) = false +== (0.5877472E~38, 0.17014117E39) = false +?= (0.5877472E~38, 0.17014117E39) = false +< (0.5877472E~38, 0.123E4) = true +> (0.5877472E~38, 0.123E4) = false +== (0.5877472E~38, 0.123E4) = false +?= (0.5877472E~38, 0.123E4) = false +< (0.5877472E~38, 0.123E2) = true +> (0.5877472E~38, 0.123E2) = false +== (0.5877472E~38, 0.123E2) = false +?= (0.5877472E~38, 0.123E2) = false +< (0.5877472E~38, 0.31415927E1) = true +> (0.5877472E~38, 0.31415927E1) = false +== (0.5877472E~38, 0.31415927E1) = false +?= (0.5877472E~38, 0.31415927E1) = false +< (0.5877472E~38, 0.27182817E1) = true +> (0.5877472E~38, 0.27182817E1) = false +== (0.5877472E~38, 0.27182817E1) = false +?= (0.5877472E~38, 0.27182817E1) = false +< (0.5877472E~38, 0.123E1) = true +> (0.5877472E~38, 0.123E1) = false +== (0.5877472E~38, 0.123E1) = false +?= (0.5877472E~38, 0.123E1) = false +< (0.5877472E~38, 0.123) = true +> (0.5877472E~38, 0.123) = false +== (0.5877472E~38, 0.123) = false +?= (0.5877472E~38, 0.123) = false +< (0.5877472E~38, 0.123E~2) = true +> (0.5877472E~38, 0.123E~2) = false +== (0.5877472E~38, 0.123E~2) = false +?= (0.5877472E~38, 0.123E~2) = false +< (0.5877472E~38, 0.11754944E~37) = true +> (0.5877472E~38, 0.11754944E~37) = false +== (0.5877472E~38, 0.11754944E~37) = false +?= (0.5877472E~38, 0.11754944E~37) = false +< (0.5877472E~38, 0.5877472E~38) = false +> (0.5877472E~38, 0.5877472E~38) = false +== (0.5877472E~38, 0.5877472E~38) = true +?= (0.5877472E~38, 0.5877472E~38) = true +< (0.5877472E~38, 0.1E~44) = false +> (0.5877472E~38, 0.1E~44) = true +== (0.5877472E~38, 0.1E~44) = false +?= (0.5877472E~38, 0.1E~44) = false +< (0.5877472E~38, 0.0) = false +> (0.5877472E~38, 0.0) = true +== (0.5877472E~38, 0.0) = false +?= (0.5877472E~38, 0.0) = false +< (0.5877472E~38, ~0.34028235E39) = false +> (0.5877472E~38, ~0.34028235E39) = true +== (0.5877472E~38, ~0.34028235E39) = false +?= (0.5877472E~38, ~0.34028235E39) = false +< (0.5877472E~38, ~0.17014117E39) = false +> (0.5877472E~38, ~0.17014117E39) = true +== (0.5877472E~38, ~0.17014117E39) = false +?= (0.5877472E~38, ~0.17014117E39) = false +< (0.5877472E~38, ~0.123E4) = false +> (0.5877472E~38, ~0.123E4) = true +== (0.5877472E~38, ~0.123E4) = false +?= (0.5877472E~38, ~0.123E4) = false +< (0.5877472E~38, ~0.123E2) = false +> (0.5877472E~38, ~0.123E2) = true +== (0.5877472E~38, ~0.123E2) = false +?= (0.5877472E~38, ~0.123E2) = false +< (0.5877472E~38, ~0.31415927E1) = false +> (0.5877472E~38, ~0.31415927E1) = true +== (0.5877472E~38, ~0.31415927E1) = false +?= (0.5877472E~38, ~0.31415927E1) = false +< (0.5877472E~38, ~0.27182817E1) = false +> (0.5877472E~38, ~0.27182817E1) = true +== (0.5877472E~38, ~0.27182817E1) = false +?= (0.5877472E~38, ~0.27182817E1) = false +< (0.5877472E~38, ~0.123E1) = false +> (0.5877472E~38, ~0.123E1) = true +== (0.5877472E~38, ~0.123E1) = false +?= (0.5877472E~38, ~0.123E1) = false +< (0.5877472E~38, ~0.123) = false +> (0.5877472E~38, ~0.123) = true +== (0.5877472E~38, ~0.123) = false +?= (0.5877472E~38, ~0.123) = false +< (0.5877472E~38, ~0.123E~2) = false +> (0.5877472E~38, ~0.123E~2) = true +== (0.5877472E~38, ~0.123E~2) = false +?= (0.5877472E~38, ~0.123E~2) = false +< (0.5877472E~38, ~0.11754944E~37) = false +> (0.5877472E~38, ~0.11754944E~37) = true +== (0.5877472E~38, ~0.11754944E~37) = false +?= (0.5877472E~38, ~0.11754944E~37) = false +< (0.5877472E~38, ~0.5877472E~38) = false +> (0.5877472E~38, ~0.5877472E~38) = true +== (0.5877472E~38, ~0.5877472E~38) = false +?= (0.5877472E~38, ~0.5877472E~38) = false +< (0.5877472E~38, ~0.1E~44) = false +> (0.5877472E~38, ~0.1E~44) = true +== (0.5877472E~38, ~0.1E~44) = false +?= (0.5877472E~38, ~0.1E~44) = false +< (0.5877472E~38, ~0.0) = false +> (0.5877472E~38, ~0.0) = true +== (0.5877472E~38, ~0.0) = false +?= (0.5877472E~38, ~0.0) = false +< (0.1E~44, 0.34028235E39) = true +> (0.1E~44, 0.34028235E39) = false +== (0.1E~44, 0.34028235E39) = false +?= (0.1E~44, 0.34028235E39) = false +< (0.1E~44, 0.17014117E39) = true +> (0.1E~44, 0.17014117E39) = false +== (0.1E~44, 0.17014117E39) = false +?= (0.1E~44, 0.17014117E39) = false +< (0.1E~44, 0.123E4) = true +> (0.1E~44, 0.123E4) = false +== (0.1E~44, 0.123E4) = false +?= (0.1E~44, 0.123E4) = false +< (0.1E~44, 0.123E2) = true +> (0.1E~44, 0.123E2) = false +== (0.1E~44, 0.123E2) = false +?= (0.1E~44, 0.123E2) = false +< (0.1E~44, 0.31415927E1) = true +> (0.1E~44, 0.31415927E1) = false +== (0.1E~44, 0.31415927E1) = false +?= (0.1E~44, 0.31415927E1) = false +< (0.1E~44, 0.27182817E1) = true +> (0.1E~44, 0.27182817E1) = false +== (0.1E~44, 0.27182817E1) = false +?= (0.1E~44, 0.27182817E1) = false +< (0.1E~44, 0.123E1) = true +> (0.1E~44, 0.123E1) = false +== (0.1E~44, 0.123E1) = false +?= (0.1E~44, 0.123E1) = false +< (0.1E~44, 0.123) = true +> (0.1E~44, 0.123) = false +== (0.1E~44, 0.123) = false +?= (0.1E~44, 0.123) = false +< (0.1E~44, 0.123E~2) = true +> (0.1E~44, 0.123E~2) = false +== (0.1E~44, 0.123E~2) = false +?= (0.1E~44, 0.123E~2) = false +< (0.1E~44, 0.11754944E~37) = true +> (0.1E~44, 0.11754944E~37) = false +== (0.1E~44, 0.11754944E~37) = false +?= (0.1E~44, 0.11754944E~37) = false +< (0.1E~44, 0.5877472E~38) = true +> (0.1E~44, 0.5877472E~38) = false +== (0.1E~44, 0.5877472E~38) = false +?= (0.1E~44, 0.5877472E~38) = false +< (0.1E~44, 0.1E~44) = false +> (0.1E~44, 0.1E~44) = false +== (0.1E~44, 0.1E~44) = true +?= (0.1E~44, 0.1E~44) = true +< (0.1E~44, 0.0) = false +> (0.1E~44, 0.0) = true +== (0.1E~44, 0.0) = false +?= (0.1E~44, 0.0) = false +< (0.1E~44, ~0.34028235E39) = false +> (0.1E~44, ~0.34028235E39) = true +== (0.1E~44, ~0.34028235E39) = false +?= (0.1E~44, ~0.34028235E39) = false +< (0.1E~44, ~0.17014117E39) = false +> (0.1E~44, ~0.17014117E39) = true +== (0.1E~44, ~0.17014117E39) = false +?= (0.1E~44, ~0.17014117E39) = false +< (0.1E~44, ~0.123E4) = false +> (0.1E~44, ~0.123E4) = true +== (0.1E~44, ~0.123E4) = false +?= (0.1E~44, ~0.123E4) = false +< (0.1E~44, ~0.123E2) = false +> (0.1E~44, ~0.123E2) = true +== (0.1E~44, ~0.123E2) = false +?= (0.1E~44, ~0.123E2) = false +< (0.1E~44, ~0.31415927E1) = false +> (0.1E~44, ~0.31415927E1) = true +== (0.1E~44, ~0.31415927E1) = false +?= (0.1E~44, ~0.31415927E1) = false +< (0.1E~44, ~0.27182817E1) = false +> (0.1E~44, ~0.27182817E1) = true +== (0.1E~44, ~0.27182817E1) = false +?= (0.1E~44, ~0.27182817E1) = false +< (0.1E~44, ~0.123E1) = false +> (0.1E~44, ~0.123E1) = true +== (0.1E~44, ~0.123E1) = false +?= (0.1E~44, ~0.123E1) = false +< (0.1E~44, ~0.123) = false +> (0.1E~44, ~0.123) = true +== (0.1E~44, ~0.123) = false +?= (0.1E~44, ~0.123) = false +< (0.1E~44, ~0.123E~2) = false +> (0.1E~44, ~0.123E~2) = true +== (0.1E~44, ~0.123E~2) = false +?= (0.1E~44, ~0.123E~2) = false +< (0.1E~44, ~0.11754944E~37) = false +> (0.1E~44, ~0.11754944E~37) = true +== (0.1E~44, ~0.11754944E~37) = false +?= (0.1E~44, ~0.11754944E~37) = false +< (0.1E~44, ~0.5877472E~38) = false +> (0.1E~44, ~0.5877472E~38) = true +== (0.1E~44, ~0.5877472E~38) = false +?= (0.1E~44, ~0.5877472E~38) = false +< (0.1E~44, ~0.1E~44) = false +> (0.1E~44, ~0.1E~44) = true +== (0.1E~44, ~0.1E~44) = false +?= (0.1E~44, ~0.1E~44) = false +< (0.1E~44, ~0.0) = false +> (0.1E~44, ~0.0) = true +== (0.1E~44, ~0.0) = false +?= (0.1E~44, ~0.0) = false +< (0.0, 0.34028235E39) = true +> (0.0, 0.34028235E39) = false +== (0.0, 0.34028235E39) = false +?= (0.0, 0.34028235E39) = false +< (0.0, 0.17014117E39) = true +> (0.0, 0.17014117E39) = false +== (0.0, 0.17014117E39) = false +?= (0.0, 0.17014117E39) = false +< (0.0, 0.123E4) = true +> (0.0, 0.123E4) = false +== (0.0, 0.123E4) = false +?= (0.0, 0.123E4) = false +< (0.0, 0.123E2) = true +> (0.0, 0.123E2) = false +== (0.0, 0.123E2) = false +?= (0.0, 0.123E2) = false +< (0.0, 0.31415927E1) = true +> (0.0, 0.31415927E1) = false +== (0.0, 0.31415927E1) = false +?= (0.0, 0.31415927E1) = false +< (0.0, 0.27182817E1) = true +> (0.0, 0.27182817E1) = false +== (0.0, 0.27182817E1) = false +?= (0.0, 0.27182817E1) = false +< (0.0, 0.123E1) = true +> (0.0, 0.123E1) = false +== (0.0, 0.123E1) = false +?= (0.0, 0.123E1) = false +< (0.0, 0.123) = true +> (0.0, 0.123) = false +== (0.0, 0.123) = false +?= (0.0, 0.123) = false +< (0.0, 0.123E~2) = true +> (0.0, 0.123E~2) = false +== (0.0, 0.123E~2) = false +?= (0.0, 0.123E~2) = false +< (0.0, 0.11754944E~37) = true +> (0.0, 0.11754944E~37) = false +== (0.0, 0.11754944E~37) = false +?= (0.0, 0.11754944E~37) = false +< (0.0, 0.5877472E~38) = true +> (0.0, 0.5877472E~38) = false +== (0.0, 0.5877472E~38) = false +?= (0.0, 0.5877472E~38) = false +< (0.0, 0.1E~44) = true +> (0.0, 0.1E~44) = false +== (0.0, 0.1E~44) = false +?= (0.0, 0.1E~44) = false +< (0.0, 0.0) = false +> (0.0, 0.0) = false +== (0.0, 0.0) = true +?= (0.0, 0.0) = true +< (0.0, ~0.34028235E39) = false +> (0.0, ~0.34028235E39) = true +== (0.0, ~0.34028235E39) = false +?= (0.0, ~0.34028235E39) = false +< (0.0, ~0.17014117E39) = false +> (0.0, ~0.17014117E39) = true +== (0.0, ~0.17014117E39) = false +?= (0.0, ~0.17014117E39) = false +< (0.0, ~0.123E4) = false +> (0.0, ~0.123E4) = true +== (0.0, ~0.123E4) = false +?= (0.0, ~0.123E4) = false +< (0.0, ~0.123E2) = false +> (0.0, ~0.123E2) = true +== (0.0, ~0.123E2) = false +?= (0.0, ~0.123E2) = false +< (0.0, ~0.31415927E1) = false +> (0.0, ~0.31415927E1) = true +== (0.0, ~0.31415927E1) = false +?= (0.0, ~0.31415927E1) = false +< (0.0, ~0.27182817E1) = false +> (0.0, ~0.27182817E1) = true +== (0.0, ~0.27182817E1) = false +?= (0.0, ~0.27182817E1) = false +< (0.0, ~0.123E1) = false +> (0.0, ~0.123E1) = true +== (0.0, ~0.123E1) = false +?= (0.0, ~0.123E1) = false +< (0.0, ~0.123) = false +> (0.0, ~0.123) = true +== (0.0, ~0.123) = false +?= (0.0, ~0.123) = false +< (0.0, ~0.123E~2) = false +> (0.0, ~0.123E~2) = true +== (0.0, ~0.123E~2) = false +?= (0.0, ~0.123E~2) = false +< (0.0, ~0.11754944E~37) = false +> (0.0, ~0.11754944E~37) = true +== (0.0, ~0.11754944E~37) = false +?= (0.0, ~0.11754944E~37) = false +< (0.0, ~0.5877472E~38) = false +> (0.0, ~0.5877472E~38) = true +== (0.0, ~0.5877472E~38) = false +?= (0.0, ~0.5877472E~38) = false +< (0.0, ~0.1E~44) = false +> (0.0, ~0.1E~44) = true +== (0.0, ~0.1E~44) = false +?= (0.0, ~0.1E~44) = false +< (0.0, ~0.0) = false +> (0.0, ~0.0) = false +== (0.0, ~0.0) = true +?= (0.0, ~0.0) = true +< (~0.34028235E39, 0.34028235E39) = true +> (~0.34028235E39, 0.34028235E39) = false +== (~0.34028235E39, 0.34028235E39) = false +?= (~0.34028235E39, 0.34028235E39) = false +< (~0.34028235E39, 0.17014117E39) = true +> (~0.34028235E39, 0.17014117E39) = false +== (~0.34028235E39, 0.17014117E39) = false +?= (~0.34028235E39, 0.17014117E39) = false +< (~0.34028235E39, 0.123E4) = true +> (~0.34028235E39, 0.123E4) = false +== (~0.34028235E39, 0.123E4) = false +?= (~0.34028235E39, 0.123E4) = false +< (~0.34028235E39, 0.123E2) = true +> (~0.34028235E39, 0.123E2) = false +== (~0.34028235E39, 0.123E2) = false +?= (~0.34028235E39, 0.123E2) = false +< (~0.34028235E39, 0.31415927E1) = true +> (~0.34028235E39, 0.31415927E1) = false +== (~0.34028235E39, 0.31415927E1) = false +?= (~0.34028235E39, 0.31415927E1) = false +< (~0.34028235E39, 0.27182817E1) = true +> (~0.34028235E39, 0.27182817E1) = false +== (~0.34028235E39, 0.27182817E1) = false +?= (~0.34028235E39, 0.27182817E1) = false +< (~0.34028235E39, 0.123E1) = true +> (~0.34028235E39, 0.123E1) = false +== (~0.34028235E39, 0.123E1) = false +?= (~0.34028235E39, 0.123E1) = false +< (~0.34028235E39, 0.123) = true +> (~0.34028235E39, 0.123) = false +== (~0.34028235E39, 0.123) = false +?= (~0.34028235E39, 0.123) = false +< (~0.34028235E39, 0.123E~2) = true +> (~0.34028235E39, 0.123E~2) = false +== (~0.34028235E39, 0.123E~2) = false +?= (~0.34028235E39, 0.123E~2) = false +< (~0.34028235E39, 0.11754944E~37) = true +> (~0.34028235E39, 0.11754944E~37) = false +== (~0.34028235E39, 0.11754944E~37) = false +?= (~0.34028235E39, 0.11754944E~37) = false +< (~0.34028235E39, 0.5877472E~38) = true +> (~0.34028235E39, 0.5877472E~38) = false +== (~0.34028235E39, 0.5877472E~38) = false +?= (~0.34028235E39, 0.5877472E~38) = false +< (~0.34028235E39, 0.1E~44) = true +> (~0.34028235E39, 0.1E~44) = false +== (~0.34028235E39, 0.1E~44) = false +?= (~0.34028235E39, 0.1E~44) = false +< (~0.34028235E39, 0.0) = true +> (~0.34028235E39, 0.0) = false +== (~0.34028235E39, 0.0) = false +?= (~0.34028235E39, 0.0) = false +< (~0.34028235E39, ~0.34028235E39) = false +> (~0.34028235E39, ~0.34028235E39) = false +== (~0.34028235E39, ~0.34028235E39) = true +?= (~0.34028235E39, ~0.34028235E39) = true +< (~0.34028235E39, ~0.17014117E39) = true +> (~0.34028235E39, ~0.17014117E39) = false +== (~0.34028235E39, ~0.17014117E39) = false +?= (~0.34028235E39, ~0.17014117E39) = false +< (~0.34028235E39, ~0.123E4) = true +> (~0.34028235E39, ~0.123E4) = false +== (~0.34028235E39, ~0.123E4) = false +?= (~0.34028235E39, ~0.123E4) = false +< (~0.34028235E39, ~0.123E2) = true +> (~0.34028235E39, ~0.123E2) = false +== (~0.34028235E39, ~0.123E2) = false +?= (~0.34028235E39, ~0.123E2) = false +< (~0.34028235E39, ~0.31415927E1) = true +> (~0.34028235E39, ~0.31415927E1) = false +== (~0.34028235E39, ~0.31415927E1) = false +?= (~0.34028235E39, ~0.31415927E1) = false +< (~0.34028235E39, ~0.27182817E1) = true +> (~0.34028235E39, ~0.27182817E1) = false +== (~0.34028235E39, ~0.27182817E1) = false +?= (~0.34028235E39, ~0.27182817E1) = false +< (~0.34028235E39, ~0.123E1) = true +> (~0.34028235E39, ~0.123E1) = false +== (~0.34028235E39, ~0.123E1) = false +?= (~0.34028235E39, ~0.123E1) = false +< (~0.34028235E39, ~0.123) = true +> (~0.34028235E39, ~0.123) = false +== (~0.34028235E39, ~0.123) = false +?= (~0.34028235E39, ~0.123) = false +< (~0.34028235E39, ~0.123E~2) = true +> (~0.34028235E39, ~0.123E~2) = false +== (~0.34028235E39, ~0.123E~2) = false +?= (~0.34028235E39, ~0.123E~2) = false +< (~0.34028235E39, ~0.11754944E~37) = true +> (~0.34028235E39, ~0.11754944E~37) = false +== (~0.34028235E39, ~0.11754944E~37) = false +?= (~0.34028235E39, ~0.11754944E~37) = false +< (~0.34028235E39, ~0.5877472E~38) = true +> (~0.34028235E39, ~0.5877472E~38) = false +== (~0.34028235E39, ~0.5877472E~38) = false +?= (~0.34028235E39, ~0.5877472E~38) = false +< (~0.34028235E39, ~0.1E~44) = true +> (~0.34028235E39, ~0.1E~44) = false +== (~0.34028235E39, ~0.1E~44) = false +?= (~0.34028235E39, ~0.1E~44) = false +< (~0.34028235E39, ~0.0) = true +> (~0.34028235E39, ~0.0) = false +== (~0.34028235E39, ~0.0) = false +?= (~0.34028235E39, ~0.0) = false +< (~0.17014117E39, 0.34028235E39) = true +> (~0.17014117E39, 0.34028235E39) = false +== (~0.17014117E39, 0.34028235E39) = false +?= (~0.17014117E39, 0.34028235E39) = false +< (~0.17014117E39, 0.17014117E39) = true +> (~0.17014117E39, 0.17014117E39) = false +== (~0.17014117E39, 0.17014117E39) = false +?= (~0.17014117E39, 0.17014117E39) = false +< (~0.17014117E39, 0.123E4) = true +> (~0.17014117E39, 0.123E4) = false +== (~0.17014117E39, 0.123E4) = false +?= (~0.17014117E39, 0.123E4) = false +< (~0.17014117E39, 0.123E2) = true +> (~0.17014117E39, 0.123E2) = false +== (~0.17014117E39, 0.123E2) = false +?= (~0.17014117E39, 0.123E2) = false +< (~0.17014117E39, 0.31415927E1) = true +> (~0.17014117E39, 0.31415927E1) = false +== (~0.17014117E39, 0.31415927E1) = false +?= (~0.17014117E39, 0.31415927E1) = false +< (~0.17014117E39, 0.27182817E1) = true +> (~0.17014117E39, 0.27182817E1) = false +== (~0.17014117E39, 0.27182817E1) = false +?= (~0.17014117E39, 0.27182817E1) = false +< (~0.17014117E39, 0.123E1) = true +> (~0.17014117E39, 0.123E1) = false +== (~0.17014117E39, 0.123E1) = false +?= (~0.17014117E39, 0.123E1) = false +< (~0.17014117E39, 0.123) = true +> (~0.17014117E39, 0.123) = false +== (~0.17014117E39, 0.123) = false +?= (~0.17014117E39, 0.123) = false +< (~0.17014117E39, 0.123E~2) = true +> (~0.17014117E39, 0.123E~2) = false +== (~0.17014117E39, 0.123E~2) = false +?= (~0.17014117E39, 0.123E~2) = false +< (~0.17014117E39, 0.11754944E~37) = true +> (~0.17014117E39, 0.11754944E~37) = false +== (~0.17014117E39, 0.11754944E~37) = false +?= (~0.17014117E39, 0.11754944E~37) = false +< (~0.17014117E39, 0.5877472E~38) = true +> (~0.17014117E39, 0.5877472E~38) = false +== (~0.17014117E39, 0.5877472E~38) = false +?= (~0.17014117E39, 0.5877472E~38) = false +< (~0.17014117E39, 0.1E~44) = true +> (~0.17014117E39, 0.1E~44) = false +== (~0.17014117E39, 0.1E~44) = false +?= (~0.17014117E39, 0.1E~44) = false +< (~0.17014117E39, 0.0) = true +> (~0.17014117E39, 0.0) = false +== (~0.17014117E39, 0.0) = false +?= (~0.17014117E39, 0.0) = false +< (~0.17014117E39, ~0.34028235E39) = false +> (~0.17014117E39, ~0.34028235E39) = true +== (~0.17014117E39, ~0.34028235E39) = false +?= (~0.17014117E39, ~0.34028235E39) = false +< (~0.17014117E39, ~0.17014117E39) = false +> (~0.17014117E39, ~0.17014117E39) = false +== (~0.17014117E39, ~0.17014117E39) = true +?= (~0.17014117E39, ~0.17014117E39) = true +< (~0.17014117E39, ~0.123E4) = true +> (~0.17014117E39, ~0.123E4) = false +== (~0.17014117E39, ~0.123E4) = false +?= (~0.17014117E39, ~0.123E4) = false +< (~0.17014117E39, ~0.123E2) = true +> (~0.17014117E39, ~0.123E2) = false +== (~0.17014117E39, ~0.123E2) = false +?= (~0.17014117E39, ~0.123E2) = false +< (~0.17014117E39, ~0.31415927E1) = true +> (~0.17014117E39, ~0.31415927E1) = false +== (~0.17014117E39, ~0.31415927E1) = false +?= (~0.17014117E39, ~0.31415927E1) = false +< (~0.17014117E39, ~0.27182817E1) = true +> (~0.17014117E39, ~0.27182817E1) = false +== (~0.17014117E39, ~0.27182817E1) = false +?= (~0.17014117E39, ~0.27182817E1) = false +< (~0.17014117E39, ~0.123E1) = true +> (~0.17014117E39, ~0.123E1) = false +== (~0.17014117E39, ~0.123E1) = false +?= (~0.17014117E39, ~0.123E1) = false +< (~0.17014117E39, ~0.123) = true +> (~0.17014117E39, ~0.123) = false +== (~0.17014117E39, ~0.123) = false +?= (~0.17014117E39, ~0.123) = false +< (~0.17014117E39, ~0.123E~2) = true +> (~0.17014117E39, ~0.123E~2) = false +== (~0.17014117E39, ~0.123E~2) = false +?= (~0.17014117E39, ~0.123E~2) = false +< (~0.17014117E39, ~0.11754944E~37) = true +> (~0.17014117E39, ~0.11754944E~37) = false +== (~0.17014117E39, ~0.11754944E~37) = false +?= (~0.17014117E39, ~0.11754944E~37) = false +< (~0.17014117E39, ~0.5877472E~38) = true +> (~0.17014117E39, ~0.5877472E~38) = false +== (~0.17014117E39, ~0.5877472E~38) = false +?= (~0.17014117E39, ~0.5877472E~38) = false +< (~0.17014117E39, ~0.1E~44) = true +> (~0.17014117E39, ~0.1E~44) = false +== (~0.17014117E39, ~0.1E~44) = false +?= (~0.17014117E39, ~0.1E~44) = false +< (~0.17014117E39, ~0.0) = true +> (~0.17014117E39, ~0.0) = false +== (~0.17014117E39, ~0.0) = false +?= (~0.17014117E39, ~0.0) = false +< (~0.123E4, 0.34028235E39) = true +> (~0.123E4, 0.34028235E39) = false +== (~0.123E4, 0.34028235E39) = false +?= (~0.123E4, 0.34028235E39) = false +< (~0.123E4, 0.17014117E39) = true +> (~0.123E4, 0.17014117E39) = false +== (~0.123E4, 0.17014117E39) = false +?= (~0.123E4, 0.17014117E39) = false +< (~0.123E4, 0.123E4) = true +> (~0.123E4, 0.123E4) = false +== (~0.123E4, 0.123E4) = false +?= (~0.123E4, 0.123E4) = false +< (~0.123E4, 0.123E2) = true +> (~0.123E4, 0.123E2) = false +== (~0.123E4, 0.123E2) = false +?= (~0.123E4, 0.123E2) = false +< (~0.123E4, 0.31415927E1) = true +> (~0.123E4, 0.31415927E1) = false +== (~0.123E4, 0.31415927E1) = false +?= (~0.123E4, 0.31415927E1) = false +< (~0.123E4, 0.27182817E1) = true +> (~0.123E4, 0.27182817E1) = false +== (~0.123E4, 0.27182817E1) = false +?= (~0.123E4, 0.27182817E1) = false +< (~0.123E4, 0.123E1) = true +> (~0.123E4, 0.123E1) = false +== (~0.123E4, 0.123E1) = false +?= (~0.123E4, 0.123E1) = false +< (~0.123E4, 0.123) = true +> (~0.123E4, 0.123) = false +== (~0.123E4, 0.123) = false +?= (~0.123E4, 0.123) = false +< (~0.123E4, 0.123E~2) = true +> (~0.123E4, 0.123E~2) = false +== (~0.123E4, 0.123E~2) = false +?= (~0.123E4, 0.123E~2) = false +< (~0.123E4, 0.11754944E~37) = true +> (~0.123E4, 0.11754944E~37) = false +== (~0.123E4, 0.11754944E~37) = false +?= (~0.123E4, 0.11754944E~37) = false +< (~0.123E4, 0.5877472E~38) = true +> (~0.123E4, 0.5877472E~38) = false +== (~0.123E4, 0.5877472E~38) = false +?= (~0.123E4, 0.5877472E~38) = false +< (~0.123E4, 0.1E~44) = true +> (~0.123E4, 0.1E~44) = false +== (~0.123E4, 0.1E~44) = false +?= (~0.123E4, 0.1E~44) = false +< (~0.123E4, 0.0) = true +> (~0.123E4, 0.0) = false +== (~0.123E4, 0.0) = false +?= (~0.123E4, 0.0) = false +< (~0.123E4, ~0.34028235E39) = false +> (~0.123E4, ~0.34028235E39) = true +== (~0.123E4, ~0.34028235E39) = false +?= (~0.123E4, ~0.34028235E39) = false +< (~0.123E4, ~0.17014117E39) = false +> (~0.123E4, ~0.17014117E39) = true +== (~0.123E4, ~0.17014117E39) = false +?= (~0.123E4, ~0.17014117E39) = false +< (~0.123E4, ~0.123E4) = false +> (~0.123E4, ~0.123E4) = false +== (~0.123E4, ~0.123E4) = true +?= (~0.123E4, ~0.123E4) = true +< (~0.123E4, ~0.123E2) = true +> (~0.123E4, ~0.123E2) = false +== (~0.123E4, ~0.123E2) = false +?= (~0.123E4, ~0.123E2) = false +< (~0.123E4, ~0.31415927E1) = true +> (~0.123E4, ~0.31415927E1) = false +== (~0.123E4, ~0.31415927E1) = false +?= (~0.123E4, ~0.31415927E1) = false +< (~0.123E4, ~0.27182817E1) = true +> (~0.123E4, ~0.27182817E1) = false +== (~0.123E4, ~0.27182817E1) = false +?= (~0.123E4, ~0.27182817E1) = false +< (~0.123E4, ~0.123E1) = true +> (~0.123E4, ~0.123E1) = false +== (~0.123E4, ~0.123E1) = false +?= (~0.123E4, ~0.123E1) = false +< (~0.123E4, ~0.123) = true +> (~0.123E4, ~0.123) = false +== (~0.123E4, ~0.123) = false +?= (~0.123E4, ~0.123) = false +< (~0.123E4, ~0.123E~2) = true +> (~0.123E4, ~0.123E~2) = false +== (~0.123E4, ~0.123E~2) = false +?= (~0.123E4, ~0.123E~2) = false +< (~0.123E4, ~0.11754944E~37) = true +> (~0.123E4, ~0.11754944E~37) = false +== (~0.123E4, ~0.11754944E~37) = false +?= (~0.123E4, ~0.11754944E~37) = false +< (~0.123E4, ~0.5877472E~38) = true +> (~0.123E4, ~0.5877472E~38) = false +== (~0.123E4, ~0.5877472E~38) = false +?= (~0.123E4, ~0.5877472E~38) = false +< (~0.123E4, ~0.1E~44) = true +> (~0.123E4, ~0.1E~44) = false +== (~0.123E4, ~0.1E~44) = false +?= (~0.123E4, ~0.1E~44) = false +< (~0.123E4, ~0.0) = true +> (~0.123E4, ~0.0) = false +== (~0.123E4, ~0.0) = false +?= (~0.123E4, ~0.0) = false +< (~0.123E2, 0.34028235E39) = true +> (~0.123E2, 0.34028235E39) = false +== (~0.123E2, 0.34028235E39) = false +?= (~0.123E2, 0.34028235E39) = false +< (~0.123E2, 0.17014117E39) = true +> (~0.123E2, 0.17014117E39) = false +== (~0.123E2, 0.17014117E39) = false +?= (~0.123E2, 0.17014117E39) = false +< (~0.123E2, 0.123E4) = true +> (~0.123E2, 0.123E4) = false +== (~0.123E2, 0.123E4) = false +?= (~0.123E2, 0.123E4) = false +< (~0.123E2, 0.123E2) = true +> (~0.123E2, 0.123E2) = false +== (~0.123E2, 0.123E2) = false +?= (~0.123E2, 0.123E2) = false +< (~0.123E2, 0.31415927E1) = true +> (~0.123E2, 0.31415927E1) = false +== (~0.123E2, 0.31415927E1) = false +?= (~0.123E2, 0.31415927E1) = false +< (~0.123E2, 0.27182817E1) = true +> (~0.123E2, 0.27182817E1) = false +== (~0.123E2, 0.27182817E1) = false +?= (~0.123E2, 0.27182817E1) = false +< (~0.123E2, 0.123E1) = true +> (~0.123E2, 0.123E1) = false +== (~0.123E2, 0.123E1) = false +?= (~0.123E2, 0.123E1) = false +< (~0.123E2, 0.123) = true +> (~0.123E2, 0.123) = false +== (~0.123E2, 0.123) = false +?= (~0.123E2, 0.123) = false +< (~0.123E2, 0.123E~2) = true +> (~0.123E2, 0.123E~2) = false +== (~0.123E2, 0.123E~2) = false +?= (~0.123E2, 0.123E~2) = false +< (~0.123E2, 0.11754944E~37) = true +> (~0.123E2, 0.11754944E~37) = false +== (~0.123E2, 0.11754944E~37) = false +?= (~0.123E2, 0.11754944E~37) = false +< (~0.123E2, 0.5877472E~38) = true +> (~0.123E2, 0.5877472E~38) = false +== (~0.123E2, 0.5877472E~38) = false +?= (~0.123E2, 0.5877472E~38) = false +< (~0.123E2, 0.1E~44) = true +> (~0.123E2, 0.1E~44) = false +== (~0.123E2, 0.1E~44) = false +?= (~0.123E2, 0.1E~44) = false +< (~0.123E2, 0.0) = true +> (~0.123E2, 0.0) = false +== (~0.123E2, 0.0) = false +?= (~0.123E2, 0.0) = false +< (~0.123E2, ~0.34028235E39) = false +> (~0.123E2, ~0.34028235E39) = true +== (~0.123E2, ~0.34028235E39) = false +?= (~0.123E2, ~0.34028235E39) = false +< (~0.123E2, ~0.17014117E39) = false +> (~0.123E2, ~0.17014117E39) = true +== (~0.123E2, ~0.17014117E39) = false +?= (~0.123E2, ~0.17014117E39) = false +< (~0.123E2, ~0.123E4) = false +> (~0.123E2, ~0.123E4) = true +== (~0.123E2, ~0.123E4) = false +?= (~0.123E2, ~0.123E4) = false +< (~0.123E2, ~0.123E2) = false +> (~0.123E2, ~0.123E2) = false +== (~0.123E2, ~0.123E2) = true +?= (~0.123E2, ~0.123E2) = true +< (~0.123E2, ~0.31415927E1) = true +> (~0.123E2, ~0.31415927E1) = false +== (~0.123E2, ~0.31415927E1) = false +?= (~0.123E2, ~0.31415927E1) = false +< (~0.123E2, ~0.27182817E1) = true +> (~0.123E2, ~0.27182817E1) = false +== (~0.123E2, ~0.27182817E1) = false +?= (~0.123E2, ~0.27182817E1) = false +< (~0.123E2, ~0.123E1) = true +> (~0.123E2, ~0.123E1) = false +== (~0.123E2, ~0.123E1) = false +?= (~0.123E2, ~0.123E1) = false +< (~0.123E2, ~0.123) = true +> (~0.123E2, ~0.123) = false +== (~0.123E2, ~0.123) = false +?= (~0.123E2, ~0.123) = false +< (~0.123E2, ~0.123E~2) = true +> (~0.123E2, ~0.123E~2) = false +== (~0.123E2, ~0.123E~2) = false +?= (~0.123E2, ~0.123E~2) = false +< (~0.123E2, ~0.11754944E~37) = true +> (~0.123E2, ~0.11754944E~37) = false +== (~0.123E2, ~0.11754944E~37) = false +?= (~0.123E2, ~0.11754944E~37) = false +< (~0.123E2, ~0.5877472E~38) = true +> (~0.123E2, ~0.5877472E~38) = false +== (~0.123E2, ~0.5877472E~38) = false +?= (~0.123E2, ~0.5877472E~38) = false +< (~0.123E2, ~0.1E~44) = true +> (~0.123E2, ~0.1E~44) = false +== (~0.123E2, ~0.1E~44) = false +?= (~0.123E2, ~0.1E~44) = false +< (~0.123E2, ~0.0) = true +> (~0.123E2, ~0.0) = false +== (~0.123E2, ~0.0) = false +?= (~0.123E2, ~0.0) = false +< (~0.31415927E1, 0.34028235E39) = true +> (~0.31415927E1, 0.34028235E39) = false +== (~0.31415927E1, 0.34028235E39) = false +?= (~0.31415927E1, 0.34028235E39) = false +< (~0.31415927E1, 0.17014117E39) = true +> (~0.31415927E1, 0.17014117E39) = false +== (~0.31415927E1, 0.17014117E39) = false +?= (~0.31415927E1, 0.17014117E39) = false +< (~0.31415927E1, 0.123E4) = true +> (~0.31415927E1, 0.123E4) = false +== (~0.31415927E1, 0.123E4) = false +?= (~0.31415927E1, 0.123E4) = false +< (~0.31415927E1, 0.123E2) = true +> (~0.31415927E1, 0.123E2) = false +== (~0.31415927E1, 0.123E2) = false +?= (~0.31415927E1, 0.123E2) = false +< (~0.31415927E1, 0.31415927E1) = true +> (~0.31415927E1, 0.31415927E1) = false +== (~0.31415927E1, 0.31415927E1) = false +?= (~0.31415927E1, 0.31415927E1) = false +< (~0.31415927E1, 0.27182817E1) = true +> (~0.31415927E1, 0.27182817E1) = false +== (~0.31415927E1, 0.27182817E1) = false +?= (~0.31415927E1, 0.27182817E1) = false +< (~0.31415927E1, 0.123E1) = true +> (~0.31415927E1, 0.123E1) = false +== (~0.31415927E1, 0.123E1) = false +?= (~0.31415927E1, 0.123E1) = false +< (~0.31415927E1, 0.123) = true +> (~0.31415927E1, 0.123) = false +== (~0.31415927E1, 0.123) = false +?= (~0.31415927E1, 0.123) = false +< (~0.31415927E1, 0.123E~2) = true +> (~0.31415927E1, 0.123E~2) = false +== (~0.31415927E1, 0.123E~2) = false +?= (~0.31415927E1, 0.123E~2) = false +< (~0.31415927E1, 0.11754944E~37) = true +> (~0.31415927E1, 0.11754944E~37) = false +== (~0.31415927E1, 0.11754944E~37) = false +?= (~0.31415927E1, 0.11754944E~37) = false +< (~0.31415927E1, 0.5877472E~38) = true +> (~0.31415927E1, 0.5877472E~38) = false +== (~0.31415927E1, 0.5877472E~38) = false +?= (~0.31415927E1, 0.5877472E~38) = false +< (~0.31415927E1, 0.1E~44) = true +> (~0.31415927E1, 0.1E~44) = false +== (~0.31415927E1, 0.1E~44) = false +?= (~0.31415927E1, 0.1E~44) = false +< (~0.31415927E1, 0.0) = true +> (~0.31415927E1, 0.0) = false +== (~0.31415927E1, 0.0) = false +?= (~0.31415927E1, 0.0) = false +< (~0.31415927E1, ~0.34028235E39) = false +> (~0.31415927E1, ~0.34028235E39) = true +== (~0.31415927E1, ~0.34028235E39) = false +?= (~0.31415927E1, ~0.34028235E39) = false +< (~0.31415927E1, ~0.17014117E39) = false +> (~0.31415927E1, ~0.17014117E39) = true +== (~0.31415927E1, ~0.17014117E39) = false +?= (~0.31415927E1, ~0.17014117E39) = false +< (~0.31415927E1, ~0.123E4) = false +> (~0.31415927E1, ~0.123E4) = true +== (~0.31415927E1, ~0.123E4) = false +?= (~0.31415927E1, ~0.123E4) = false +< (~0.31415927E1, ~0.123E2) = false +> (~0.31415927E1, ~0.123E2) = true +== (~0.31415927E1, ~0.123E2) = false +?= (~0.31415927E1, ~0.123E2) = false +< (~0.31415927E1, ~0.31415927E1) = false +> (~0.31415927E1, ~0.31415927E1) = false +== (~0.31415927E1, ~0.31415927E1) = true +?= (~0.31415927E1, ~0.31415927E1) = true +< (~0.31415927E1, ~0.27182817E1) = true +> (~0.31415927E1, ~0.27182817E1) = false +== (~0.31415927E1, ~0.27182817E1) = false +?= (~0.31415927E1, ~0.27182817E1) = false +< (~0.31415927E1, ~0.123E1) = true +> (~0.31415927E1, ~0.123E1) = false +== (~0.31415927E1, ~0.123E1) = false +?= (~0.31415927E1, ~0.123E1) = false +< (~0.31415927E1, ~0.123) = true +> (~0.31415927E1, ~0.123) = false +== (~0.31415927E1, ~0.123) = false +?= (~0.31415927E1, ~0.123) = false +< (~0.31415927E1, ~0.123E~2) = true +> (~0.31415927E1, ~0.123E~2) = false +== (~0.31415927E1, ~0.123E~2) = false +?= (~0.31415927E1, ~0.123E~2) = false +< (~0.31415927E1, ~0.11754944E~37) = true +> (~0.31415927E1, ~0.11754944E~37) = false +== (~0.31415927E1, ~0.11754944E~37) = false +?= (~0.31415927E1, ~0.11754944E~37) = false +< (~0.31415927E1, ~0.5877472E~38) = true +> (~0.31415927E1, ~0.5877472E~38) = false +== (~0.31415927E1, ~0.5877472E~38) = false +?= (~0.31415927E1, ~0.5877472E~38) = false +< (~0.31415927E1, ~0.1E~44) = true +> (~0.31415927E1, ~0.1E~44) = false +== (~0.31415927E1, ~0.1E~44) = false +?= (~0.31415927E1, ~0.1E~44) = false +< (~0.31415927E1, ~0.0) = true +> (~0.31415927E1, ~0.0) = false +== (~0.31415927E1, ~0.0) = false +?= (~0.31415927E1, ~0.0) = false +< (~0.27182817E1, 0.34028235E39) = true +> (~0.27182817E1, 0.34028235E39) = false +== (~0.27182817E1, 0.34028235E39) = false +?= (~0.27182817E1, 0.34028235E39) = false +< (~0.27182817E1, 0.17014117E39) = true +> (~0.27182817E1, 0.17014117E39) = false +== (~0.27182817E1, 0.17014117E39) = false +?= (~0.27182817E1, 0.17014117E39) = false +< (~0.27182817E1, 0.123E4) = true +> (~0.27182817E1, 0.123E4) = false +== (~0.27182817E1, 0.123E4) = false +?= (~0.27182817E1, 0.123E4) = false +< (~0.27182817E1, 0.123E2) = true +> (~0.27182817E1, 0.123E2) = false +== (~0.27182817E1, 0.123E2) = false +?= (~0.27182817E1, 0.123E2) = false +< (~0.27182817E1, 0.31415927E1) = true +> (~0.27182817E1, 0.31415927E1) = false +== (~0.27182817E1, 0.31415927E1) = false +?= (~0.27182817E1, 0.31415927E1) = false +< (~0.27182817E1, 0.27182817E1) = true +> (~0.27182817E1, 0.27182817E1) = false +== (~0.27182817E1, 0.27182817E1) = false +?= (~0.27182817E1, 0.27182817E1) = false +< (~0.27182817E1, 0.123E1) = true +> (~0.27182817E1, 0.123E1) = false +== (~0.27182817E1, 0.123E1) = false +?= (~0.27182817E1, 0.123E1) = false +< (~0.27182817E1, 0.123) = true +> (~0.27182817E1, 0.123) = false +== (~0.27182817E1, 0.123) = false +?= (~0.27182817E1, 0.123) = false +< (~0.27182817E1, 0.123E~2) = true +> (~0.27182817E1, 0.123E~2) = false +== (~0.27182817E1, 0.123E~2) = false +?= (~0.27182817E1, 0.123E~2) = false +< (~0.27182817E1, 0.11754944E~37) = true +> (~0.27182817E1, 0.11754944E~37) = false +== (~0.27182817E1, 0.11754944E~37) = false +?= (~0.27182817E1, 0.11754944E~37) = false +< (~0.27182817E1, 0.5877472E~38) = true +> (~0.27182817E1, 0.5877472E~38) = false +== (~0.27182817E1, 0.5877472E~38) = false +?= (~0.27182817E1, 0.5877472E~38) = false +< (~0.27182817E1, 0.1E~44) = true +> (~0.27182817E1, 0.1E~44) = false +== (~0.27182817E1, 0.1E~44) = false +?= (~0.27182817E1, 0.1E~44) = false +< (~0.27182817E1, 0.0) = true +> (~0.27182817E1, 0.0) = false +== (~0.27182817E1, 0.0) = false +?= (~0.27182817E1, 0.0) = false +< (~0.27182817E1, ~0.34028235E39) = false +> (~0.27182817E1, ~0.34028235E39) = true +== (~0.27182817E1, ~0.34028235E39) = false +?= (~0.27182817E1, ~0.34028235E39) = false +< (~0.27182817E1, ~0.17014117E39) = false +> (~0.27182817E1, ~0.17014117E39) = true +== (~0.27182817E1, ~0.17014117E39) = false +?= (~0.27182817E1, ~0.17014117E39) = false +< (~0.27182817E1, ~0.123E4) = false +> (~0.27182817E1, ~0.123E4) = true +== (~0.27182817E1, ~0.123E4) = false +?= (~0.27182817E1, ~0.123E4) = false +< (~0.27182817E1, ~0.123E2) = false +> (~0.27182817E1, ~0.123E2) = true +== (~0.27182817E1, ~0.123E2) = false +?= (~0.27182817E1, ~0.123E2) = false +< (~0.27182817E1, ~0.31415927E1) = false +> (~0.27182817E1, ~0.31415927E1) = true +== (~0.27182817E1, ~0.31415927E1) = false +?= (~0.27182817E1, ~0.31415927E1) = false +< (~0.27182817E1, ~0.27182817E1) = false +> (~0.27182817E1, ~0.27182817E1) = false +== (~0.27182817E1, ~0.27182817E1) = true +?= (~0.27182817E1, ~0.27182817E1) = true +< (~0.27182817E1, ~0.123E1) = true +> (~0.27182817E1, ~0.123E1) = false +== (~0.27182817E1, ~0.123E1) = false +?= (~0.27182817E1, ~0.123E1) = false +< (~0.27182817E1, ~0.123) = true +> (~0.27182817E1, ~0.123) = false +== (~0.27182817E1, ~0.123) = false +?= (~0.27182817E1, ~0.123) = false +< (~0.27182817E1, ~0.123E~2) = true +> (~0.27182817E1, ~0.123E~2) = false +== (~0.27182817E1, ~0.123E~2) = false +?= (~0.27182817E1, ~0.123E~2) = false +< (~0.27182817E1, ~0.11754944E~37) = true +> (~0.27182817E1, ~0.11754944E~37) = false +== (~0.27182817E1, ~0.11754944E~37) = false +?= (~0.27182817E1, ~0.11754944E~37) = false +< (~0.27182817E1, ~0.5877472E~38) = true +> (~0.27182817E1, ~0.5877472E~38) = false +== (~0.27182817E1, ~0.5877472E~38) = false +?= (~0.27182817E1, ~0.5877472E~38) = false +< (~0.27182817E1, ~0.1E~44) = true +> (~0.27182817E1, ~0.1E~44) = false +== (~0.27182817E1, ~0.1E~44) = false +?= (~0.27182817E1, ~0.1E~44) = false +< (~0.27182817E1, ~0.0) = true +> (~0.27182817E1, ~0.0) = false +== (~0.27182817E1, ~0.0) = false +?= (~0.27182817E1, ~0.0) = false +< (~0.123E1, 0.34028235E39) = true +> (~0.123E1, 0.34028235E39) = false +== (~0.123E1, 0.34028235E39) = false +?= (~0.123E1, 0.34028235E39) = false +< (~0.123E1, 0.17014117E39) = true +> (~0.123E1, 0.17014117E39) = false +== (~0.123E1, 0.17014117E39) = false +?= (~0.123E1, 0.17014117E39) = false +< (~0.123E1, 0.123E4) = true +> (~0.123E1, 0.123E4) = false +== (~0.123E1, 0.123E4) = false +?= (~0.123E1, 0.123E4) = false +< (~0.123E1, 0.123E2) = true +> (~0.123E1, 0.123E2) = false +== (~0.123E1, 0.123E2) = false +?= (~0.123E1, 0.123E2) = false +< (~0.123E1, 0.31415927E1) = true +> (~0.123E1, 0.31415927E1) = false +== (~0.123E1, 0.31415927E1) = false +?= (~0.123E1, 0.31415927E1) = false +< (~0.123E1, 0.27182817E1) = true +> (~0.123E1, 0.27182817E1) = false +== (~0.123E1, 0.27182817E1) = false +?= (~0.123E1, 0.27182817E1) = false +< (~0.123E1, 0.123E1) = true +> (~0.123E1, 0.123E1) = false +== (~0.123E1, 0.123E1) = false +?= (~0.123E1, 0.123E1) = false +< (~0.123E1, 0.123) = true +> (~0.123E1, 0.123) = false +== (~0.123E1, 0.123) = false +?= (~0.123E1, 0.123) = false +< (~0.123E1, 0.123E~2) = true +> (~0.123E1, 0.123E~2) = false +== (~0.123E1, 0.123E~2) = false +?= (~0.123E1, 0.123E~2) = false +< (~0.123E1, 0.11754944E~37) = true +> (~0.123E1, 0.11754944E~37) = false +== (~0.123E1, 0.11754944E~37) = false +?= (~0.123E1, 0.11754944E~37) = false +< (~0.123E1, 0.5877472E~38) = true +> (~0.123E1, 0.5877472E~38) = false +== (~0.123E1, 0.5877472E~38) = false +?= (~0.123E1, 0.5877472E~38) = false +< (~0.123E1, 0.1E~44) = true +> (~0.123E1, 0.1E~44) = false +== (~0.123E1, 0.1E~44) = false +?= (~0.123E1, 0.1E~44) = false +< (~0.123E1, 0.0) = true +> (~0.123E1, 0.0) = false +== (~0.123E1, 0.0) = false +?= (~0.123E1, 0.0) = false +< (~0.123E1, ~0.34028235E39) = false +> (~0.123E1, ~0.34028235E39) = true +== (~0.123E1, ~0.34028235E39) = false +?= (~0.123E1, ~0.34028235E39) = false +< (~0.123E1, ~0.17014117E39) = false +> (~0.123E1, ~0.17014117E39) = true +== (~0.123E1, ~0.17014117E39) = false +?= (~0.123E1, ~0.17014117E39) = false +< (~0.123E1, ~0.123E4) = false +> (~0.123E1, ~0.123E4) = true +== (~0.123E1, ~0.123E4) = false +?= (~0.123E1, ~0.123E4) = false +< (~0.123E1, ~0.123E2) = false +> (~0.123E1, ~0.123E2) = true +== (~0.123E1, ~0.123E2) = false +?= (~0.123E1, ~0.123E2) = false +< (~0.123E1, ~0.31415927E1) = false +> (~0.123E1, ~0.31415927E1) = true +== (~0.123E1, ~0.31415927E1) = false +?= (~0.123E1, ~0.31415927E1) = false +< (~0.123E1, ~0.27182817E1) = false +> (~0.123E1, ~0.27182817E1) = true +== (~0.123E1, ~0.27182817E1) = false +?= (~0.123E1, ~0.27182817E1) = false +< (~0.123E1, ~0.123E1) = false +> (~0.123E1, ~0.123E1) = false +== (~0.123E1, ~0.123E1) = true +?= (~0.123E1, ~0.123E1) = true +< (~0.123E1, ~0.123) = true +> (~0.123E1, ~0.123) = false +== (~0.123E1, ~0.123) = false +?= (~0.123E1, ~0.123) = false +< (~0.123E1, ~0.123E~2) = true +> (~0.123E1, ~0.123E~2) = false +== (~0.123E1, ~0.123E~2) = false +?= (~0.123E1, ~0.123E~2) = false +< (~0.123E1, ~0.11754944E~37) = true +> (~0.123E1, ~0.11754944E~37) = false +== (~0.123E1, ~0.11754944E~37) = false +?= (~0.123E1, ~0.11754944E~37) = false +< (~0.123E1, ~0.5877472E~38) = true +> (~0.123E1, ~0.5877472E~38) = false +== (~0.123E1, ~0.5877472E~38) = false +?= (~0.123E1, ~0.5877472E~38) = false +< (~0.123E1, ~0.1E~44) = true +> (~0.123E1, ~0.1E~44) = false +== (~0.123E1, ~0.1E~44) = false +?= (~0.123E1, ~0.1E~44) = false +< (~0.123E1, ~0.0) = true +> (~0.123E1, ~0.0) = false +== (~0.123E1, ~0.0) = false +?= (~0.123E1, ~0.0) = false +< (~0.123, 0.34028235E39) = true +> (~0.123, 0.34028235E39) = false +== (~0.123, 0.34028235E39) = false +?= (~0.123, 0.34028235E39) = false +< (~0.123, 0.17014117E39) = true +> (~0.123, 0.17014117E39) = false +== (~0.123, 0.17014117E39) = false +?= (~0.123, 0.17014117E39) = false +< (~0.123, 0.123E4) = true +> (~0.123, 0.123E4) = false +== (~0.123, 0.123E4) = false +?= (~0.123, 0.123E4) = false +< (~0.123, 0.123E2) = true +> (~0.123, 0.123E2) = false +== (~0.123, 0.123E2) = false +?= (~0.123, 0.123E2) = false +< (~0.123, 0.31415927E1) = true +> (~0.123, 0.31415927E1) = false +== (~0.123, 0.31415927E1) = false +?= (~0.123, 0.31415927E1) = false +< (~0.123, 0.27182817E1) = true +> (~0.123, 0.27182817E1) = false +== (~0.123, 0.27182817E1) = false +?= (~0.123, 0.27182817E1) = false +< (~0.123, 0.123E1) = true +> (~0.123, 0.123E1) = false +== (~0.123, 0.123E1) = false +?= (~0.123, 0.123E1) = false +< (~0.123, 0.123) = true +> (~0.123, 0.123) = false +== (~0.123, 0.123) = false +?= (~0.123, 0.123) = false +< (~0.123, 0.123E~2) = true +> (~0.123, 0.123E~2) = false +== (~0.123, 0.123E~2) = false +?= (~0.123, 0.123E~2) = false +< (~0.123, 0.11754944E~37) = true +> (~0.123, 0.11754944E~37) = false +== (~0.123, 0.11754944E~37) = false +?= (~0.123, 0.11754944E~37) = false +< (~0.123, 0.5877472E~38) = true +> (~0.123, 0.5877472E~38) = false +== (~0.123, 0.5877472E~38) = false +?= (~0.123, 0.5877472E~38) = false +< (~0.123, 0.1E~44) = true +> (~0.123, 0.1E~44) = false +== (~0.123, 0.1E~44) = false +?= (~0.123, 0.1E~44) = false +< (~0.123, 0.0) = true +> (~0.123, 0.0) = false +== (~0.123, 0.0) = false +?= (~0.123, 0.0) = false +< (~0.123, ~0.34028235E39) = false +> (~0.123, ~0.34028235E39) = true +== (~0.123, ~0.34028235E39) = false +?= (~0.123, ~0.34028235E39) = false +< (~0.123, ~0.17014117E39) = false +> (~0.123, ~0.17014117E39) = true +== (~0.123, ~0.17014117E39) = false +?= (~0.123, ~0.17014117E39) = false +< (~0.123, ~0.123E4) = false +> (~0.123, ~0.123E4) = true +== (~0.123, ~0.123E4) = false +?= (~0.123, ~0.123E4) = false +< (~0.123, ~0.123E2) = false +> (~0.123, ~0.123E2) = true +== (~0.123, ~0.123E2) = false +?= (~0.123, ~0.123E2) = false +< (~0.123, ~0.31415927E1) = false +> (~0.123, ~0.31415927E1) = true +== (~0.123, ~0.31415927E1) = false +?= (~0.123, ~0.31415927E1) = false +< (~0.123, ~0.27182817E1) = false +> (~0.123, ~0.27182817E1) = true +== (~0.123, ~0.27182817E1) = false +?= (~0.123, ~0.27182817E1) = false +< (~0.123, ~0.123E1) = false +> (~0.123, ~0.123E1) = true +== (~0.123, ~0.123E1) = false +?= (~0.123, ~0.123E1) = false +< (~0.123, ~0.123) = false +> (~0.123, ~0.123) = false +== (~0.123, ~0.123) = true +?= (~0.123, ~0.123) = true +< (~0.123, ~0.123E~2) = true +> (~0.123, ~0.123E~2) = false +== (~0.123, ~0.123E~2) = false +?= (~0.123, ~0.123E~2) = false +< (~0.123, ~0.11754944E~37) = true +> (~0.123, ~0.11754944E~37) = false +== (~0.123, ~0.11754944E~37) = false +?= (~0.123, ~0.11754944E~37) = false +< (~0.123, ~0.5877472E~38) = true +> (~0.123, ~0.5877472E~38) = false +== (~0.123, ~0.5877472E~38) = false +?= (~0.123, ~0.5877472E~38) = false +< (~0.123, ~0.1E~44) = true +> (~0.123, ~0.1E~44) = false +== (~0.123, ~0.1E~44) = false +?= (~0.123, ~0.1E~44) = false +< (~0.123, ~0.0) = true +> (~0.123, ~0.0) = false +== (~0.123, ~0.0) = false +?= (~0.123, ~0.0) = false +< (~0.123E~2, 0.34028235E39) = true +> (~0.123E~2, 0.34028235E39) = false +== (~0.123E~2, 0.34028235E39) = false +?= (~0.123E~2, 0.34028235E39) = false +< (~0.123E~2, 0.17014117E39) = true +> (~0.123E~2, 0.17014117E39) = false +== (~0.123E~2, 0.17014117E39) = false +?= (~0.123E~2, 0.17014117E39) = false +< (~0.123E~2, 0.123E4) = true +> (~0.123E~2, 0.123E4) = false +== (~0.123E~2, 0.123E4) = false +?= (~0.123E~2, 0.123E4) = false +< (~0.123E~2, 0.123E2) = true +> (~0.123E~2, 0.123E2) = false +== (~0.123E~2, 0.123E2) = false +?= (~0.123E~2, 0.123E2) = false +< (~0.123E~2, 0.31415927E1) = true +> (~0.123E~2, 0.31415927E1) = false +== (~0.123E~2, 0.31415927E1) = false +?= (~0.123E~2, 0.31415927E1) = false +< (~0.123E~2, 0.27182817E1) = true +> (~0.123E~2, 0.27182817E1) = false +== (~0.123E~2, 0.27182817E1) = false +?= (~0.123E~2, 0.27182817E1) = false +< (~0.123E~2, 0.123E1) = true +> (~0.123E~2, 0.123E1) = false +== (~0.123E~2, 0.123E1) = false +?= (~0.123E~2, 0.123E1) = false +< (~0.123E~2, 0.123) = true +> (~0.123E~2, 0.123) = false +== (~0.123E~2, 0.123) = false +?= (~0.123E~2, 0.123) = false +< (~0.123E~2, 0.123E~2) = true +> (~0.123E~2, 0.123E~2) = false +== (~0.123E~2, 0.123E~2) = false +?= (~0.123E~2, 0.123E~2) = false +< (~0.123E~2, 0.11754944E~37) = true +> (~0.123E~2, 0.11754944E~37) = false +== (~0.123E~2, 0.11754944E~37) = false +?= (~0.123E~2, 0.11754944E~37) = false +< (~0.123E~2, 0.5877472E~38) = true +> (~0.123E~2, 0.5877472E~38) = false +== (~0.123E~2, 0.5877472E~38) = false +?= (~0.123E~2, 0.5877472E~38) = false +< (~0.123E~2, 0.1E~44) = true +> (~0.123E~2, 0.1E~44) = false +== (~0.123E~2, 0.1E~44) = false +?= (~0.123E~2, 0.1E~44) = false +< (~0.123E~2, 0.0) = true +> (~0.123E~2, 0.0) = false +== (~0.123E~2, 0.0) = false +?= (~0.123E~2, 0.0) = false +< (~0.123E~2, ~0.34028235E39) = false +> (~0.123E~2, ~0.34028235E39) = true +== (~0.123E~2, ~0.34028235E39) = false +?= (~0.123E~2, ~0.34028235E39) = false +< (~0.123E~2, ~0.17014117E39) = false +> (~0.123E~2, ~0.17014117E39) = true +== (~0.123E~2, ~0.17014117E39) = false +?= (~0.123E~2, ~0.17014117E39) = false +< (~0.123E~2, ~0.123E4) = false +> (~0.123E~2, ~0.123E4) = true +== (~0.123E~2, ~0.123E4) = false +?= (~0.123E~2, ~0.123E4) = false +< (~0.123E~2, ~0.123E2) = false +> (~0.123E~2, ~0.123E2) = true +== (~0.123E~2, ~0.123E2) = false +?= (~0.123E~2, ~0.123E2) = false +< (~0.123E~2, ~0.31415927E1) = false +> (~0.123E~2, ~0.31415927E1) = true +== (~0.123E~2, ~0.31415927E1) = false +?= (~0.123E~2, ~0.31415927E1) = false +< (~0.123E~2, ~0.27182817E1) = false +> (~0.123E~2, ~0.27182817E1) = true +== (~0.123E~2, ~0.27182817E1) = false +?= (~0.123E~2, ~0.27182817E1) = false +< (~0.123E~2, ~0.123E1) = false +> (~0.123E~2, ~0.123E1) = true +== (~0.123E~2, ~0.123E1) = false +?= (~0.123E~2, ~0.123E1) = false +< (~0.123E~2, ~0.123) = false +> (~0.123E~2, ~0.123) = true +== (~0.123E~2, ~0.123) = false +?= (~0.123E~2, ~0.123) = false +< (~0.123E~2, ~0.123E~2) = false +> (~0.123E~2, ~0.123E~2) = false +== (~0.123E~2, ~0.123E~2) = true +?= (~0.123E~2, ~0.123E~2) = true +< (~0.123E~2, ~0.11754944E~37) = true +> (~0.123E~2, ~0.11754944E~37) = false +== (~0.123E~2, ~0.11754944E~37) = false +?= (~0.123E~2, ~0.11754944E~37) = false +< (~0.123E~2, ~0.5877472E~38) = true +> (~0.123E~2, ~0.5877472E~38) = false +== (~0.123E~2, ~0.5877472E~38) = false +?= (~0.123E~2, ~0.5877472E~38) = false +< (~0.123E~2, ~0.1E~44) = true +> (~0.123E~2, ~0.1E~44) = false +== (~0.123E~2, ~0.1E~44) = false +?= (~0.123E~2, ~0.1E~44) = false +< (~0.123E~2, ~0.0) = true +> (~0.123E~2, ~0.0) = false +== (~0.123E~2, ~0.0) = false +?= (~0.123E~2, ~0.0) = false +< (~0.11754944E~37, 0.34028235E39) = true +> (~0.11754944E~37, 0.34028235E39) = false +== (~0.11754944E~37, 0.34028235E39) = false +?= (~0.11754944E~37, 0.34028235E39) = false +< (~0.11754944E~37, 0.17014117E39) = true +> (~0.11754944E~37, 0.17014117E39) = false +== (~0.11754944E~37, 0.17014117E39) = false +?= (~0.11754944E~37, 0.17014117E39) = false +< (~0.11754944E~37, 0.123E4) = true +> (~0.11754944E~37, 0.123E4) = false +== (~0.11754944E~37, 0.123E4) = false +?= (~0.11754944E~37, 0.123E4) = false +< (~0.11754944E~37, 0.123E2) = true +> (~0.11754944E~37, 0.123E2) = false +== (~0.11754944E~37, 0.123E2) = false +?= (~0.11754944E~37, 0.123E2) = false +< (~0.11754944E~37, 0.31415927E1) = true +> (~0.11754944E~37, 0.31415927E1) = false +== (~0.11754944E~37, 0.31415927E1) = false +?= (~0.11754944E~37, 0.31415927E1) = false +< (~0.11754944E~37, 0.27182817E1) = true +> (~0.11754944E~37, 0.27182817E1) = false +== (~0.11754944E~37, 0.27182817E1) = false +?= (~0.11754944E~37, 0.27182817E1) = false +< (~0.11754944E~37, 0.123E1) = true +> (~0.11754944E~37, 0.123E1) = false +== (~0.11754944E~37, 0.123E1) = false +?= (~0.11754944E~37, 0.123E1) = false +< (~0.11754944E~37, 0.123) = true +> (~0.11754944E~37, 0.123) = false +== (~0.11754944E~37, 0.123) = false +?= (~0.11754944E~37, 0.123) = false +< (~0.11754944E~37, 0.123E~2) = true +> (~0.11754944E~37, 0.123E~2) = false +== (~0.11754944E~37, 0.123E~2) = false +?= (~0.11754944E~37, 0.123E~2) = false +< (~0.11754944E~37, 0.11754944E~37) = true +> (~0.11754944E~37, 0.11754944E~37) = false +== (~0.11754944E~37, 0.11754944E~37) = false +?= (~0.11754944E~37, 0.11754944E~37) = false +< (~0.11754944E~37, 0.5877472E~38) = true +> (~0.11754944E~37, 0.5877472E~38) = false +== (~0.11754944E~37, 0.5877472E~38) = false +?= (~0.11754944E~37, 0.5877472E~38) = false +< (~0.11754944E~37, 0.1E~44) = true +> (~0.11754944E~37, 0.1E~44) = false +== (~0.11754944E~37, 0.1E~44) = false +?= (~0.11754944E~37, 0.1E~44) = false +< (~0.11754944E~37, 0.0) = true +> (~0.11754944E~37, 0.0) = false +== (~0.11754944E~37, 0.0) = false +?= (~0.11754944E~37, 0.0) = false +< (~0.11754944E~37, ~0.34028235E39) = false +> (~0.11754944E~37, ~0.34028235E39) = true +== (~0.11754944E~37, ~0.34028235E39) = false +?= (~0.11754944E~37, ~0.34028235E39) = false +< (~0.11754944E~37, ~0.17014117E39) = false +> (~0.11754944E~37, ~0.17014117E39) = true +== (~0.11754944E~37, ~0.17014117E39) = false +?= (~0.11754944E~37, ~0.17014117E39) = false +< (~0.11754944E~37, ~0.123E4) = false +> (~0.11754944E~37, ~0.123E4) = true +== (~0.11754944E~37, ~0.123E4) = false +?= (~0.11754944E~37, ~0.123E4) = false +< (~0.11754944E~37, ~0.123E2) = false +> (~0.11754944E~37, ~0.123E2) = true +== (~0.11754944E~37, ~0.123E2) = false +?= (~0.11754944E~37, ~0.123E2) = false +< (~0.11754944E~37, ~0.31415927E1) = false +> (~0.11754944E~37, ~0.31415927E1) = true +== (~0.11754944E~37, ~0.31415927E1) = false +?= (~0.11754944E~37, ~0.31415927E1) = false +< (~0.11754944E~37, ~0.27182817E1) = false +> (~0.11754944E~37, ~0.27182817E1) = true +== (~0.11754944E~37, ~0.27182817E1) = false +?= (~0.11754944E~37, ~0.27182817E1) = false +< (~0.11754944E~37, ~0.123E1) = false +> (~0.11754944E~37, ~0.123E1) = true +== (~0.11754944E~37, ~0.123E1) = false +?= (~0.11754944E~37, ~0.123E1) = false +< (~0.11754944E~37, ~0.123) = false +> (~0.11754944E~37, ~0.123) = true +== (~0.11754944E~37, ~0.123) = false +?= (~0.11754944E~37, ~0.123) = false +< (~0.11754944E~37, ~0.123E~2) = false +> (~0.11754944E~37, ~0.123E~2) = true +== (~0.11754944E~37, ~0.123E~2) = false +?= (~0.11754944E~37, ~0.123E~2) = false +< (~0.11754944E~37, ~0.11754944E~37) = false +> (~0.11754944E~37, ~0.11754944E~37) = false +== (~0.11754944E~37, ~0.11754944E~37) = true +?= (~0.11754944E~37, ~0.11754944E~37) = true +< (~0.11754944E~37, ~0.5877472E~38) = true +> (~0.11754944E~37, ~0.5877472E~38) = false +== (~0.11754944E~37, ~0.5877472E~38) = false +?= (~0.11754944E~37, ~0.5877472E~38) = false +< (~0.11754944E~37, ~0.1E~44) = true +> (~0.11754944E~37, ~0.1E~44) = false +== (~0.11754944E~37, ~0.1E~44) = false +?= (~0.11754944E~37, ~0.1E~44) = false +< (~0.11754944E~37, ~0.0) = true +> (~0.11754944E~37, ~0.0) = false +== (~0.11754944E~37, ~0.0) = false +?= (~0.11754944E~37, ~0.0) = false +< (~0.5877472E~38, 0.34028235E39) = true +> (~0.5877472E~38, 0.34028235E39) = false +== (~0.5877472E~38, 0.34028235E39) = false +?= (~0.5877472E~38, 0.34028235E39) = false +< (~0.5877472E~38, 0.17014117E39) = true +> (~0.5877472E~38, 0.17014117E39) = false +== (~0.5877472E~38, 0.17014117E39) = false +?= (~0.5877472E~38, 0.17014117E39) = false +< (~0.5877472E~38, 0.123E4) = true +> (~0.5877472E~38, 0.123E4) = false +== (~0.5877472E~38, 0.123E4) = false +?= (~0.5877472E~38, 0.123E4) = false +< (~0.5877472E~38, 0.123E2) = true +> (~0.5877472E~38, 0.123E2) = false +== (~0.5877472E~38, 0.123E2) = false +?= (~0.5877472E~38, 0.123E2) = false +< (~0.5877472E~38, 0.31415927E1) = true +> (~0.5877472E~38, 0.31415927E1) = false +== (~0.5877472E~38, 0.31415927E1) = false +?= (~0.5877472E~38, 0.31415927E1) = false +< (~0.5877472E~38, 0.27182817E1) = true +> (~0.5877472E~38, 0.27182817E1) = false +== (~0.5877472E~38, 0.27182817E1) = false +?= (~0.5877472E~38, 0.27182817E1) = false +< (~0.5877472E~38, 0.123E1) = true +> (~0.5877472E~38, 0.123E1) = false +== (~0.5877472E~38, 0.123E1) = false +?= (~0.5877472E~38, 0.123E1) = false +< (~0.5877472E~38, 0.123) = true +> (~0.5877472E~38, 0.123) = false +== (~0.5877472E~38, 0.123) = false +?= (~0.5877472E~38, 0.123) = false +< (~0.5877472E~38, 0.123E~2) = true +> (~0.5877472E~38, 0.123E~2) = false +== (~0.5877472E~38, 0.123E~2) = false +?= (~0.5877472E~38, 0.123E~2) = false +< (~0.5877472E~38, 0.11754944E~37) = true +> (~0.5877472E~38, 0.11754944E~37) = false +== (~0.5877472E~38, 0.11754944E~37) = false +?= (~0.5877472E~38, 0.11754944E~37) = false +< (~0.5877472E~38, 0.5877472E~38) = true +> (~0.5877472E~38, 0.5877472E~38) = false +== (~0.5877472E~38, 0.5877472E~38) = false +?= (~0.5877472E~38, 0.5877472E~38) = false +< (~0.5877472E~38, 0.1E~44) = true +> (~0.5877472E~38, 0.1E~44) = false +== (~0.5877472E~38, 0.1E~44) = false +?= (~0.5877472E~38, 0.1E~44) = false +< (~0.5877472E~38, 0.0) = true +> (~0.5877472E~38, 0.0) = false +== (~0.5877472E~38, 0.0) = false +?= (~0.5877472E~38, 0.0) = false +< (~0.5877472E~38, ~0.34028235E39) = false +> (~0.5877472E~38, ~0.34028235E39) = true +== (~0.5877472E~38, ~0.34028235E39) = false +?= (~0.5877472E~38, ~0.34028235E39) = false +< (~0.5877472E~38, ~0.17014117E39) = false +> (~0.5877472E~38, ~0.17014117E39) = true +== (~0.5877472E~38, ~0.17014117E39) = false +?= (~0.5877472E~38, ~0.17014117E39) = false +< (~0.5877472E~38, ~0.123E4) = false +> (~0.5877472E~38, ~0.123E4) = true +== (~0.5877472E~38, ~0.123E4) = false +?= (~0.5877472E~38, ~0.123E4) = false +< (~0.5877472E~38, ~0.123E2) = false +> (~0.5877472E~38, ~0.123E2) = true +== (~0.5877472E~38, ~0.123E2) = false +?= (~0.5877472E~38, ~0.123E2) = false +< (~0.5877472E~38, ~0.31415927E1) = false +> (~0.5877472E~38, ~0.31415927E1) = true +== (~0.5877472E~38, ~0.31415927E1) = false +?= (~0.5877472E~38, ~0.31415927E1) = false +< (~0.5877472E~38, ~0.27182817E1) = false +> (~0.5877472E~38, ~0.27182817E1) = true +== (~0.5877472E~38, ~0.27182817E1) = false +?= (~0.5877472E~38, ~0.27182817E1) = false +< (~0.5877472E~38, ~0.123E1) = false +> (~0.5877472E~38, ~0.123E1) = true +== (~0.5877472E~38, ~0.123E1) = false +?= (~0.5877472E~38, ~0.123E1) = false +< (~0.5877472E~38, ~0.123) = false +> (~0.5877472E~38, ~0.123) = true +== (~0.5877472E~38, ~0.123) = false +?= (~0.5877472E~38, ~0.123) = false +< (~0.5877472E~38, ~0.123E~2) = false +> (~0.5877472E~38, ~0.123E~2) = true +== (~0.5877472E~38, ~0.123E~2) = false +?= (~0.5877472E~38, ~0.123E~2) = false +< (~0.5877472E~38, ~0.11754944E~37) = false +> (~0.5877472E~38, ~0.11754944E~37) = true +== (~0.5877472E~38, ~0.11754944E~37) = false +?= (~0.5877472E~38, ~0.11754944E~37) = false +< (~0.5877472E~38, ~0.5877472E~38) = false +> (~0.5877472E~38, ~0.5877472E~38) = false +== (~0.5877472E~38, ~0.5877472E~38) = true +?= (~0.5877472E~38, ~0.5877472E~38) = true +< (~0.5877472E~38, ~0.1E~44) = true +> (~0.5877472E~38, ~0.1E~44) = false +== (~0.5877472E~38, ~0.1E~44) = false +?= (~0.5877472E~38, ~0.1E~44) = false +< (~0.5877472E~38, ~0.0) = true +> (~0.5877472E~38, ~0.0) = false +== (~0.5877472E~38, ~0.0) = false +?= (~0.5877472E~38, ~0.0) = false +< (~0.1E~44, 0.34028235E39) = true +> (~0.1E~44, 0.34028235E39) = false +== (~0.1E~44, 0.34028235E39) = false +?= (~0.1E~44, 0.34028235E39) = false +< (~0.1E~44, 0.17014117E39) = true +> (~0.1E~44, 0.17014117E39) = false +== (~0.1E~44, 0.17014117E39) = false +?= (~0.1E~44, 0.17014117E39) = false +< (~0.1E~44, 0.123E4) = true +> (~0.1E~44, 0.123E4) = false +== (~0.1E~44, 0.123E4) = false +?= (~0.1E~44, 0.123E4) = false +< (~0.1E~44, 0.123E2) = true +> (~0.1E~44, 0.123E2) = false +== (~0.1E~44, 0.123E2) = false +?= (~0.1E~44, 0.123E2) = false +< (~0.1E~44, 0.31415927E1) = true +> (~0.1E~44, 0.31415927E1) = false +== (~0.1E~44, 0.31415927E1) = false +?= (~0.1E~44, 0.31415927E1) = false +< (~0.1E~44, 0.27182817E1) = true +> (~0.1E~44, 0.27182817E1) = false +== (~0.1E~44, 0.27182817E1) = false +?= (~0.1E~44, 0.27182817E1) = false +< (~0.1E~44, 0.123E1) = true +> (~0.1E~44, 0.123E1) = false +== (~0.1E~44, 0.123E1) = false +?= (~0.1E~44, 0.123E1) = false +< (~0.1E~44, 0.123) = true +> (~0.1E~44, 0.123) = false +== (~0.1E~44, 0.123) = false +?= (~0.1E~44, 0.123) = false +< (~0.1E~44, 0.123E~2) = true +> (~0.1E~44, 0.123E~2) = false +== (~0.1E~44, 0.123E~2) = false +?= (~0.1E~44, 0.123E~2) = false +< (~0.1E~44, 0.11754944E~37) = true +> (~0.1E~44, 0.11754944E~37) = false +== (~0.1E~44, 0.11754944E~37) = false +?= (~0.1E~44, 0.11754944E~37) = false +< (~0.1E~44, 0.5877472E~38) = true +> (~0.1E~44, 0.5877472E~38) = false +== (~0.1E~44, 0.5877472E~38) = false +?= (~0.1E~44, 0.5877472E~38) = false +< (~0.1E~44, 0.1E~44) = true +> (~0.1E~44, 0.1E~44) = false +== (~0.1E~44, 0.1E~44) = false +?= (~0.1E~44, 0.1E~44) = false +< (~0.1E~44, 0.0) = true +> (~0.1E~44, 0.0) = false +== (~0.1E~44, 0.0) = false +?= (~0.1E~44, 0.0) = false +< (~0.1E~44, ~0.34028235E39) = false +> (~0.1E~44, ~0.34028235E39) = true +== (~0.1E~44, ~0.34028235E39) = false +?= (~0.1E~44, ~0.34028235E39) = false +< (~0.1E~44, ~0.17014117E39) = false +> (~0.1E~44, ~0.17014117E39) = true +== (~0.1E~44, ~0.17014117E39) = false +?= (~0.1E~44, ~0.17014117E39) = false +< (~0.1E~44, ~0.123E4) = false +> (~0.1E~44, ~0.123E4) = true +== (~0.1E~44, ~0.123E4) = false +?= (~0.1E~44, ~0.123E4) = false +< (~0.1E~44, ~0.123E2) = false +> (~0.1E~44, ~0.123E2) = true +== (~0.1E~44, ~0.123E2) = false +?= (~0.1E~44, ~0.123E2) = false +< (~0.1E~44, ~0.31415927E1) = false +> (~0.1E~44, ~0.31415927E1) = true +== (~0.1E~44, ~0.31415927E1) = false +?= (~0.1E~44, ~0.31415927E1) = false +< (~0.1E~44, ~0.27182817E1) = false +> (~0.1E~44, ~0.27182817E1) = true +== (~0.1E~44, ~0.27182817E1) = false +?= (~0.1E~44, ~0.27182817E1) = false +< (~0.1E~44, ~0.123E1) = false +> (~0.1E~44, ~0.123E1) = true +== (~0.1E~44, ~0.123E1) = false +?= (~0.1E~44, ~0.123E1) = false +< (~0.1E~44, ~0.123) = false +> (~0.1E~44, ~0.123) = true +== (~0.1E~44, ~0.123) = false +?= (~0.1E~44, ~0.123) = false +< (~0.1E~44, ~0.123E~2) = false +> (~0.1E~44, ~0.123E~2) = true +== (~0.1E~44, ~0.123E~2) = false +?= (~0.1E~44, ~0.123E~2) = false +< (~0.1E~44, ~0.11754944E~37) = false +> (~0.1E~44, ~0.11754944E~37) = true +== (~0.1E~44, ~0.11754944E~37) = false +?= (~0.1E~44, ~0.11754944E~37) = false +< (~0.1E~44, ~0.5877472E~38) = false +> (~0.1E~44, ~0.5877472E~38) = true +== (~0.1E~44, ~0.5877472E~38) = false +?= (~0.1E~44, ~0.5877472E~38) = false +< (~0.1E~44, ~0.1E~44) = false +> (~0.1E~44, ~0.1E~44) = false +== (~0.1E~44, ~0.1E~44) = true +?= (~0.1E~44, ~0.1E~44) = true +< (~0.1E~44, ~0.0) = true +> (~0.1E~44, ~0.0) = false +== (~0.1E~44, ~0.0) = false +?= (~0.1E~44, ~0.0) = false +< (~0.0, 0.34028235E39) = true +> (~0.0, 0.34028235E39) = false +== (~0.0, 0.34028235E39) = false +?= (~0.0, 0.34028235E39) = false +< (~0.0, 0.17014117E39) = true +> (~0.0, 0.17014117E39) = false +== (~0.0, 0.17014117E39) = false +?= (~0.0, 0.17014117E39) = false +< (~0.0, 0.123E4) = true +> (~0.0, 0.123E4) = false +== (~0.0, 0.123E4) = false +?= (~0.0, 0.123E4) = false +< (~0.0, 0.123E2) = true +> (~0.0, 0.123E2) = false +== (~0.0, 0.123E2) = false +?= (~0.0, 0.123E2) = false +< (~0.0, 0.31415927E1) = true +> (~0.0, 0.31415927E1) = false +== (~0.0, 0.31415927E1) = false +?= (~0.0, 0.31415927E1) = false +< (~0.0, 0.27182817E1) = true +> (~0.0, 0.27182817E1) = false +== (~0.0, 0.27182817E1) = false +?= (~0.0, 0.27182817E1) = false +< (~0.0, 0.123E1) = true +> (~0.0, 0.123E1) = false +== (~0.0, 0.123E1) = false +?= (~0.0, 0.123E1) = false +< (~0.0, 0.123) = true +> (~0.0, 0.123) = false +== (~0.0, 0.123) = false +?= (~0.0, 0.123) = false +< (~0.0, 0.123E~2) = true +> (~0.0, 0.123E~2) = false +== (~0.0, 0.123E~2) = false +?= (~0.0, 0.123E~2) = false +< (~0.0, 0.11754944E~37) = true +> (~0.0, 0.11754944E~37) = false +== (~0.0, 0.11754944E~37) = false +?= (~0.0, 0.11754944E~37) = false +< (~0.0, 0.5877472E~38) = true +> (~0.0, 0.5877472E~38) = false +== (~0.0, 0.5877472E~38) = false +?= (~0.0, 0.5877472E~38) = false +< (~0.0, 0.1E~44) = true +> (~0.0, 0.1E~44) = false +== (~0.0, 0.1E~44) = false +?= (~0.0, 0.1E~44) = false +< (~0.0, 0.0) = false +> (~0.0, 0.0) = false +== (~0.0, 0.0) = true +?= (~0.0, 0.0) = true +< (~0.0, ~0.34028235E39) = false +> (~0.0, ~0.34028235E39) = true +== (~0.0, ~0.34028235E39) = false +?= (~0.0, ~0.34028235E39) = false +< (~0.0, ~0.17014117E39) = false +> (~0.0, ~0.17014117E39) = true +== (~0.0, ~0.17014117E39) = false +?= (~0.0, ~0.17014117E39) = false +< (~0.0, ~0.123E4) = false +> (~0.0, ~0.123E4) = true +== (~0.0, ~0.123E4) = false +?= (~0.0, ~0.123E4) = false +< (~0.0, ~0.123E2) = false +> (~0.0, ~0.123E2) = true +== (~0.0, ~0.123E2) = false +?= (~0.0, ~0.123E2) = false +< (~0.0, ~0.31415927E1) = false +> (~0.0, ~0.31415927E1) = true +== (~0.0, ~0.31415927E1) = false +?= (~0.0, ~0.31415927E1) = false +< (~0.0, ~0.27182817E1) = false +> (~0.0, ~0.27182817E1) = true +== (~0.0, ~0.27182817E1) = false +?= (~0.0, ~0.27182817E1) = false +< (~0.0, ~0.123E1) = false +> (~0.0, ~0.123E1) = true +== (~0.0, ~0.123E1) = false +?= (~0.0, ~0.123E1) = false +< (~0.0, ~0.123) = false +> (~0.0, ~0.123) = true +== (~0.0, ~0.123) = false +?= (~0.0, ~0.123) = false +< (~0.0, ~0.123E~2) = false +> (~0.0, ~0.123E~2) = true +== (~0.0, ~0.123E~2) = false +?= (~0.0, ~0.123E~2) = false +< (~0.0, ~0.11754944E~37) = false +> (~0.0, ~0.11754944E~37) = true +== (~0.0, ~0.11754944E~37) = false +?= (~0.0, ~0.11754944E~37) = false +< (~0.0, ~0.5877472E~38) = false +> (~0.0, ~0.5877472E~38) = true +== (~0.0, ~0.5877472E~38) = false +?= (~0.0, ~0.5877472E~38) = false +< (~0.0, ~0.1E~44) = false +> (~0.0, ~0.1E~44) = true +== (~0.0, ~0.1E~44) = false +?= (~0.0, ~0.1E~44) = false +< (~0.0, ~0.0) = false +> (~0.0, ~0.0) = false +== (~0.0, ~0.0) = true +?= (~0.0, ~0.0) = true + +Testing compare, compareReal +compare (0.34028235E39, 0.34028235E39) = EQUAL +compareReal (0.34028235E39, 0.34028235E39) = EQUAL +compare (0.34028235E39, 0.17014117E39) = GREATER +compareReal (0.34028235E39, 0.17014117E39) = GREATER +compare (0.34028235E39, 0.123E4) = GREATER +compareReal (0.34028235E39, 0.123E4) = GREATER +compare (0.34028235E39, 0.123E2) = GREATER +compareReal (0.34028235E39, 0.123E2) = GREATER +compare (0.34028235E39, 0.31415927E1) = GREATER +compareReal (0.34028235E39, 0.31415927E1) = GREATER +compare (0.34028235E39, 0.27182817E1) = GREATER +compareReal (0.34028235E39, 0.27182817E1) = GREATER +compare (0.34028235E39, 0.123E1) = GREATER +compareReal (0.34028235E39, 0.123E1) = GREATER +compare (0.34028235E39, 0.123) = GREATER +compareReal (0.34028235E39, 0.123) = GREATER +compare (0.34028235E39, 0.123E~2) = GREATER +compareReal (0.34028235E39, 0.123E~2) = GREATER +compare (0.34028235E39, 0.11754944E~37) = GREATER +compareReal (0.34028235E39, 0.11754944E~37) = GREATER +compare (0.34028235E39, 0.5877472E~38) = GREATER +compareReal (0.34028235E39, 0.5877472E~38) = GREATER +compare (0.34028235E39, 0.1E~44) = GREATER +compareReal (0.34028235E39, 0.1E~44) = GREATER +compare (0.34028235E39, 0.0) = GREATER +compareReal (0.34028235E39, 0.0) = GREATER +compare (0.34028235E39, ~0.34028235E39) = GREATER +compareReal (0.34028235E39, ~0.34028235E39) = GREATER +compare (0.34028235E39, ~0.17014117E39) = GREATER +compareReal (0.34028235E39, ~0.17014117E39) = GREATER +compare (0.34028235E39, ~0.123E4) = GREATER +compareReal (0.34028235E39, ~0.123E4) = GREATER +compare (0.34028235E39, ~0.123E2) = GREATER +compareReal (0.34028235E39, ~0.123E2) = GREATER +compare (0.34028235E39, ~0.31415927E1) = GREATER +compareReal (0.34028235E39, ~0.31415927E1) = GREATER +compare (0.34028235E39, ~0.27182817E1) = GREATER +compareReal (0.34028235E39, ~0.27182817E1) = GREATER +compare (0.34028235E39, ~0.123E1) = GREATER +compareReal (0.34028235E39, ~0.123E1) = GREATER +compare (0.34028235E39, ~0.123) = GREATER +compareReal (0.34028235E39, ~0.123) = GREATER +compare (0.34028235E39, ~0.123E~2) = GREATER +compareReal (0.34028235E39, ~0.123E~2) = GREATER +compare (0.34028235E39, ~0.11754944E~37) = GREATER +compareReal (0.34028235E39, ~0.11754944E~37) = GREATER +compare (0.34028235E39, ~0.5877472E~38) = GREATER +compareReal (0.34028235E39, ~0.5877472E~38) = GREATER +compare (0.34028235E39, ~0.1E~44) = GREATER +compareReal (0.34028235E39, ~0.1E~44) = GREATER +compare (0.34028235E39, ~0.0) = GREATER +compareReal (0.34028235E39, ~0.0) = GREATER +compare (0.17014117E39, 0.34028235E39) = LESS +compareReal (0.17014117E39, 0.34028235E39) = LESS +compare (0.17014117E39, 0.17014117E39) = EQUAL +compareReal (0.17014117E39, 0.17014117E39) = EQUAL +compare (0.17014117E39, 0.123E4) = GREATER +compareReal (0.17014117E39, 0.123E4) = GREATER +compare (0.17014117E39, 0.123E2) = GREATER +compareReal (0.17014117E39, 0.123E2) = GREATER +compare (0.17014117E39, 0.31415927E1) = GREATER +compareReal (0.17014117E39, 0.31415927E1) = GREATER +compare (0.17014117E39, 0.27182817E1) = GREATER +compareReal (0.17014117E39, 0.27182817E1) = GREATER +compare (0.17014117E39, 0.123E1) = GREATER +compareReal (0.17014117E39, 0.123E1) = GREATER +compare (0.17014117E39, 0.123) = GREATER +compareReal (0.17014117E39, 0.123) = GREATER +compare (0.17014117E39, 0.123E~2) = GREATER +compareReal (0.17014117E39, 0.123E~2) = GREATER +compare (0.17014117E39, 0.11754944E~37) = GREATER +compareReal (0.17014117E39, 0.11754944E~37) = GREATER +compare (0.17014117E39, 0.5877472E~38) = GREATER +compareReal (0.17014117E39, 0.5877472E~38) = GREATER +compare (0.17014117E39, 0.1E~44) = GREATER +compareReal (0.17014117E39, 0.1E~44) = GREATER +compare (0.17014117E39, 0.0) = GREATER +compareReal (0.17014117E39, 0.0) = GREATER +compare (0.17014117E39, ~0.34028235E39) = GREATER +compareReal (0.17014117E39, ~0.34028235E39) = GREATER +compare (0.17014117E39, ~0.17014117E39) = GREATER +compareReal (0.17014117E39, ~0.17014117E39) = GREATER +compare (0.17014117E39, ~0.123E4) = GREATER +compareReal (0.17014117E39, ~0.123E4) = GREATER +compare (0.17014117E39, ~0.123E2) = GREATER +compareReal (0.17014117E39, ~0.123E2) = GREATER +compare (0.17014117E39, ~0.31415927E1) = GREATER +compareReal (0.17014117E39, ~0.31415927E1) = GREATER +compare (0.17014117E39, ~0.27182817E1) = GREATER +compareReal (0.17014117E39, ~0.27182817E1) = GREATER +compare (0.17014117E39, ~0.123E1) = GREATER +compareReal (0.17014117E39, ~0.123E1) = GREATER +compare (0.17014117E39, ~0.123) = GREATER +compareReal (0.17014117E39, ~0.123) = GREATER +compare (0.17014117E39, ~0.123E~2) = GREATER +compareReal (0.17014117E39, ~0.123E~2) = GREATER +compare (0.17014117E39, ~0.11754944E~37) = GREATER +compareReal (0.17014117E39, ~0.11754944E~37) = GREATER +compare (0.17014117E39, ~0.5877472E~38) = GREATER +compareReal (0.17014117E39, ~0.5877472E~38) = GREATER +compare (0.17014117E39, ~0.1E~44) = GREATER +compareReal (0.17014117E39, ~0.1E~44) = GREATER +compare (0.17014117E39, ~0.0) = GREATER +compareReal (0.17014117E39, ~0.0) = GREATER +compare (0.123E4, 0.34028235E39) = LESS +compareReal (0.123E4, 0.34028235E39) = LESS +compare (0.123E4, 0.17014117E39) = LESS +compareReal (0.123E4, 0.17014117E39) = LESS +compare (0.123E4, 0.123E4) = EQUAL +compareReal (0.123E4, 0.123E4) = EQUAL +compare (0.123E4, 0.123E2) = GREATER +compareReal (0.123E4, 0.123E2) = GREATER +compare (0.123E4, 0.31415927E1) = GREATER +compareReal (0.123E4, 0.31415927E1) = GREATER +compare (0.123E4, 0.27182817E1) = GREATER +compareReal (0.123E4, 0.27182817E1) = GREATER +compare (0.123E4, 0.123E1) = GREATER +compareReal (0.123E4, 0.123E1) = GREATER +compare (0.123E4, 0.123) = GREATER +compareReal (0.123E4, 0.123) = GREATER +compare (0.123E4, 0.123E~2) = GREATER +compareReal (0.123E4, 0.123E~2) = GREATER +compare (0.123E4, 0.11754944E~37) = GREATER +compareReal (0.123E4, 0.11754944E~37) = GREATER +compare (0.123E4, 0.5877472E~38) = GREATER +compareReal (0.123E4, 0.5877472E~38) = GREATER +compare (0.123E4, 0.1E~44) = GREATER +compareReal (0.123E4, 0.1E~44) = GREATER +compare (0.123E4, 0.0) = GREATER +compareReal (0.123E4, 0.0) = GREATER +compare (0.123E4, ~0.34028235E39) = GREATER +compareReal (0.123E4, ~0.34028235E39) = GREATER +compare (0.123E4, ~0.17014117E39) = GREATER +compareReal (0.123E4, ~0.17014117E39) = GREATER +compare (0.123E4, ~0.123E4) = GREATER +compareReal (0.123E4, ~0.123E4) = GREATER +compare (0.123E4, ~0.123E2) = GREATER +compareReal (0.123E4, ~0.123E2) = GREATER +compare (0.123E4, ~0.31415927E1) = GREATER +compareReal (0.123E4, ~0.31415927E1) = GREATER +compare (0.123E4, ~0.27182817E1) = GREATER +compareReal (0.123E4, ~0.27182817E1) = GREATER +compare (0.123E4, ~0.123E1) = GREATER +compareReal (0.123E4, ~0.123E1) = GREATER +compare (0.123E4, ~0.123) = GREATER +compareReal (0.123E4, ~0.123) = GREATER +compare (0.123E4, ~0.123E~2) = GREATER +compareReal (0.123E4, ~0.123E~2) = GREATER +compare (0.123E4, ~0.11754944E~37) = GREATER +compareReal (0.123E4, ~0.11754944E~37) = GREATER +compare (0.123E4, ~0.5877472E~38) = GREATER +compareReal (0.123E4, ~0.5877472E~38) = GREATER +compare (0.123E4, ~0.1E~44) = GREATER +compareReal (0.123E4, ~0.1E~44) = GREATER +compare (0.123E4, ~0.0) = GREATER +compareReal (0.123E4, ~0.0) = GREATER +compare (0.123E2, 0.34028235E39) = LESS +compareReal (0.123E2, 0.34028235E39) = LESS +compare (0.123E2, 0.17014117E39) = LESS +compareReal (0.123E2, 0.17014117E39) = LESS +compare (0.123E2, 0.123E4) = LESS +compareReal (0.123E2, 0.123E4) = LESS +compare (0.123E2, 0.123E2) = EQUAL +compareReal (0.123E2, 0.123E2) = EQUAL +compare (0.123E2, 0.31415927E1) = GREATER +compareReal (0.123E2, 0.31415927E1) = GREATER +compare (0.123E2, 0.27182817E1) = GREATER +compareReal (0.123E2, 0.27182817E1) = GREATER +compare (0.123E2, 0.123E1) = GREATER +compareReal (0.123E2, 0.123E1) = GREATER +compare (0.123E2, 0.123) = GREATER +compareReal (0.123E2, 0.123) = GREATER +compare (0.123E2, 0.123E~2) = GREATER +compareReal (0.123E2, 0.123E~2) = GREATER +compare (0.123E2, 0.11754944E~37) = GREATER +compareReal (0.123E2, 0.11754944E~37) = GREATER +compare (0.123E2, 0.5877472E~38) = GREATER +compareReal (0.123E2, 0.5877472E~38) = GREATER +compare (0.123E2, 0.1E~44) = GREATER +compareReal (0.123E2, 0.1E~44) = GREATER +compare (0.123E2, 0.0) = GREATER +compareReal (0.123E2, 0.0) = GREATER +compare (0.123E2, ~0.34028235E39) = GREATER +compareReal (0.123E2, ~0.34028235E39) = GREATER +compare (0.123E2, ~0.17014117E39) = GREATER +compareReal (0.123E2, ~0.17014117E39) = GREATER +compare (0.123E2, ~0.123E4) = GREATER +compareReal (0.123E2, ~0.123E4) = GREATER +compare (0.123E2, ~0.123E2) = GREATER +compareReal (0.123E2, ~0.123E2) = GREATER +compare (0.123E2, ~0.31415927E1) = GREATER +compareReal (0.123E2, ~0.31415927E1) = GREATER +compare (0.123E2, ~0.27182817E1) = GREATER +compareReal (0.123E2, ~0.27182817E1) = GREATER +compare (0.123E2, ~0.123E1) = GREATER +compareReal (0.123E2, ~0.123E1) = GREATER +compare (0.123E2, ~0.123) = GREATER +compareReal (0.123E2, ~0.123) = GREATER +compare (0.123E2, ~0.123E~2) = GREATER +compareReal (0.123E2, ~0.123E~2) = GREATER +compare (0.123E2, ~0.11754944E~37) = GREATER +compareReal (0.123E2, ~0.11754944E~37) = GREATER +compare (0.123E2, ~0.5877472E~38) = GREATER +compareReal (0.123E2, ~0.5877472E~38) = GREATER +compare (0.123E2, ~0.1E~44) = GREATER +compareReal (0.123E2, ~0.1E~44) = GREATER +compare (0.123E2, ~0.0) = GREATER +compareReal (0.123E2, ~0.0) = GREATER +compare (0.31415927E1, 0.34028235E39) = LESS +compareReal (0.31415927E1, 0.34028235E39) = LESS +compare (0.31415927E1, 0.17014117E39) = LESS +compareReal (0.31415927E1, 0.17014117E39) = LESS +compare (0.31415927E1, 0.123E4) = LESS +compareReal (0.31415927E1, 0.123E4) = LESS +compare (0.31415927E1, 0.123E2) = LESS +compareReal (0.31415927E1, 0.123E2) = LESS +compare (0.31415927E1, 0.31415927E1) = EQUAL +compareReal (0.31415927E1, 0.31415927E1) = EQUAL +compare (0.31415927E1, 0.27182817E1) = GREATER +compareReal (0.31415927E1, 0.27182817E1) = GREATER +compare (0.31415927E1, 0.123E1) = GREATER +compareReal (0.31415927E1, 0.123E1) = GREATER +compare (0.31415927E1, 0.123) = GREATER +compareReal (0.31415927E1, 0.123) = GREATER +compare (0.31415927E1, 0.123E~2) = GREATER +compareReal (0.31415927E1, 0.123E~2) = GREATER +compare (0.31415927E1, 0.11754944E~37) = GREATER +compareReal (0.31415927E1, 0.11754944E~37) = GREATER +compare (0.31415927E1, 0.5877472E~38) = GREATER +compareReal (0.31415927E1, 0.5877472E~38) = GREATER +compare (0.31415927E1, 0.1E~44) = GREATER +compareReal (0.31415927E1, 0.1E~44) = GREATER +compare (0.31415927E1, 0.0) = GREATER +compareReal (0.31415927E1, 0.0) = GREATER +compare (0.31415927E1, ~0.34028235E39) = GREATER +compareReal (0.31415927E1, ~0.34028235E39) = GREATER +compare (0.31415927E1, ~0.17014117E39) = GREATER +compareReal (0.31415927E1, ~0.17014117E39) = GREATER +compare (0.31415927E1, ~0.123E4) = GREATER +compareReal (0.31415927E1, ~0.123E4) = GREATER +compare (0.31415927E1, ~0.123E2) = GREATER +compareReal (0.31415927E1, ~0.123E2) = GREATER +compare (0.31415927E1, ~0.31415927E1) = GREATER +compareReal (0.31415927E1, ~0.31415927E1) = GREATER +compare (0.31415927E1, ~0.27182817E1) = GREATER +compareReal (0.31415927E1, ~0.27182817E1) = GREATER +compare (0.31415927E1, ~0.123E1) = GREATER +compareReal (0.31415927E1, ~0.123E1) = GREATER +compare (0.31415927E1, ~0.123) = GREATER +compareReal (0.31415927E1, ~0.123) = GREATER +compare (0.31415927E1, ~0.123E~2) = GREATER +compareReal (0.31415927E1, ~0.123E~2) = GREATER +compare (0.31415927E1, ~0.11754944E~37) = GREATER +compareReal (0.31415927E1, ~0.11754944E~37) = GREATER +compare (0.31415927E1, ~0.5877472E~38) = GREATER +compareReal (0.31415927E1, ~0.5877472E~38) = GREATER +compare (0.31415927E1, ~0.1E~44) = GREATER +compareReal (0.31415927E1, ~0.1E~44) = GREATER +compare (0.31415927E1, ~0.0) = GREATER +compareReal (0.31415927E1, ~0.0) = GREATER +compare (0.27182817E1, 0.34028235E39) = LESS +compareReal (0.27182817E1, 0.34028235E39) = LESS +compare (0.27182817E1, 0.17014117E39) = LESS +compareReal (0.27182817E1, 0.17014117E39) = LESS +compare (0.27182817E1, 0.123E4) = LESS +compareReal (0.27182817E1, 0.123E4) = LESS +compare (0.27182817E1, 0.123E2) = LESS +compareReal (0.27182817E1, 0.123E2) = LESS +compare (0.27182817E1, 0.31415927E1) = LESS +compareReal (0.27182817E1, 0.31415927E1) = LESS +compare (0.27182817E1, 0.27182817E1) = EQUAL +compareReal (0.27182817E1, 0.27182817E1) = EQUAL +compare (0.27182817E1, 0.123E1) = GREATER +compareReal (0.27182817E1, 0.123E1) = GREATER +compare (0.27182817E1, 0.123) = GREATER +compareReal (0.27182817E1, 0.123) = GREATER +compare (0.27182817E1, 0.123E~2) = GREATER +compareReal (0.27182817E1, 0.123E~2) = GREATER +compare (0.27182817E1, 0.11754944E~37) = GREATER +compareReal (0.27182817E1, 0.11754944E~37) = GREATER +compare (0.27182817E1, 0.5877472E~38) = GREATER +compareReal (0.27182817E1, 0.5877472E~38) = GREATER +compare (0.27182817E1, 0.1E~44) = GREATER +compareReal (0.27182817E1, 0.1E~44) = GREATER +compare (0.27182817E1, 0.0) = GREATER +compareReal (0.27182817E1, 0.0) = GREATER +compare (0.27182817E1, ~0.34028235E39) = GREATER +compareReal (0.27182817E1, ~0.34028235E39) = GREATER +compare (0.27182817E1, ~0.17014117E39) = GREATER +compareReal (0.27182817E1, ~0.17014117E39) = GREATER +compare (0.27182817E1, ~0.123E4) = GREATER +compareReal (0.27182817E1, ~0.123E4) = GREATER +compare (0.27182817E1, ~0.123E2) = GREATER +compareReal (0.27182817E1, ~0.123E2) = GREATER +compare (0.27182817E1, ~0.31415927E1) = GREATER +compareReal (0.27182817E1, ~0.31415927E1) = GREATER +compare (0.27182817E1, ~0.27182817E1) = GREATER +compareReal (0.27182817E1, ~0.27182817E1) = GREATER +compare (0.27182817E1, ~0.123E1) = GREATER +compareReal (0.27182817E1, ~0.123E1) = GREATER +compare (0.27182817E1, ~0.123) = GREATER +compareReal (0.27182817E1, ~0.123) = GREATER +compare (0.27182817E1, ~0.123E~2) = GREATER +compareReal (0.27182817E1, ~0.123E~2) = GREATER +compare (0.27182817E1, ~0.11754944E~37) = GREATER +compareReal (0.27182817E1, ~0.11754944E~37) = GREATER +compare (0.27182817E1, ~0.5877472E~38) = GREATER +compareReal (0.27182817E1, ~0.5877472E~38) = GREATER +compare (0.27182817E1, ~0.1E~44) = GREATER +compareReal (0.27182817E1, ~0.1E~44) = GREATER +compare (0.27182817E1, ~0.0) = GREATER +compareReal (0.27182817E1, ~0.0) = GREATER +compare (0.123E1, 0.34028235E39) = LESS +compareReal (0.123E1, 0.34028235E39) = LESS +compare (0.123E1, 0.17014117E39) = LESS +compareReal (0.123E1, 0.17014117E39) = LESS +compare (0.123E1, 0.123E4) = LESS +compareReal (0.123E1, 0.123E4) = LESS +compare (0.123E1, 0.123E2) = LESS +compareReal (0.123E1, 0.123E2) = LESS +compare (0.123E1, 0.31415927E1) = LESS +compareReal (0.123E1, 0.31415927E1) = LESS +compare (0.123E1, 0.27182817E1) = LESS +compareReal (0.123E1, 0.27182817E1) = LESS +compare (0.123E1, 0.123E1) = EQUAL +compareReal (0.123E1, 0.123E1) = EQUAL +compare (0.123E1, 0.123) = GREATER +compareReal (0.123E1, 0.123) = GREATER +compare (0.123E1, 0.123E~2) = GREATER +compareReal (0.123E1, 0.123E~2) = GREATER +compare (0.123E1, 0.11754944E~37) = GREATER +compareReal (0.123E1, 0.11754944E~37) = GREATER +compare (0.123E1, 0.5877472E~38) = GREATER +compareReal (0.123E1, 0.5877472E~38) = GREATER +compare (0.123E1, 0.1E~44) = GREATER +compareReal (0.123E1, 0.1E~44) = GREATER +compare (0.123E1, 0.0) = GREATER +compareReal (0.123E1, 0.0) = GREATER +compare (0.123E1, ~0.34028235E39) = GREATER +compareReal (0.123E1, ~0.34028235E39) = GREATER +compare (0.123E1, ~0.17014117E39) = GREATER +compareReal (0.123E1, ~0.17014117E39) = GREATER +compare (0.123E1, ~0.123E4) = GREATER +compareReal (0.123E1, ~0.123E4) = GREATER +compare (0.123E1, ~0.123E2) = GREATER +compareReal (0.123E1, ~0.123E2) = GREATER +compare (0.123E1, ~0.31415927E1) = GREATER +compareReal (0.123E1, ~0.31415927E1) = GREATER +compare (0.123E1, ~0.27182817E1) = GREATER +compareReal (0.123E1, ~0.27182817E1) = GREATER +compare (0.123E1, ~0.123E1) = GREATER +compareReal (0.123E1, ~0.123E1) = GREATER +compare (0.123E1, ~0.123) = GREATER +compareReal (0.123E1, ~0.123) = GREATER +compare (0.123E1, ~0.123E~2) = GREATER +compareReal (0.123E1, ~0.123E~2) = GREATER +compare (0.123E1, ~0.11754944E~37) = GREATER +compareReal (0.123E1, ~0.11754944E~37) = GREATER +compare (0.123E1, ~0.5877472E~38) = GREATER +compareReal (0.123E1, ~0.5877472E~38) = GREATER +compare (0.123E1, ~0.1E~44) = GREATER +compareReal (0.123E1, ~0.1E~44) = GREATER +compare (0.123E1, ~0.0) = GREATER +compareReal (0.123E1, ~0.0) = GREATER +compare (0.123, 0.34028235E39) = LESS +compareReal (0.123, 0.34028235E39) = LESS +compare (0.123, 0.17014117E39) = LESS +compareReal (0.123, 0.17014117E39) = LESS +compare (0.123, 0.123E4) = LESS +compareReal (0.123, 0.123E4) = LESS +compare (0.123, 0.123E2) = LESS +compareReal (0.123, 0.123E2) = LESS +compare (0.123, 0.31415927E1) = LESS +compareReal (0.123, 0.31415927E1) = LESS +compare (0.123, 0.27182817E1) = LESS +compareReal (0.123, 0.27182817E1) = LESS +compare (0.123, 0.123E1) = LESS +compareReal (0.123, 0.123E1) = LESS +compare (0.123, 0.123) = EQUAL +compareReal (0.123, 0.123) = EQUAL +compare (0.123, 0.123E~2) = GREATER +compareReal (0.123, 0.123E~2) = GREATER +compare (0.123, 0.11754944E~37) = GREATER +compareReal (0.123, 0.11754944E~37) = GREATER +compare (0.123, 0.5877472E~38) = GREATER +compareReal (0.123, 0.5877472E~38) = GREATER +compare (0.123, 0.1E~44) = GREATER +compareReal (0.123, 0.1E~44) = GREATER +compare (0.123, 0.0) = GREATER +compareReal (0.123, 0.0) = GREATER +compare (0.123, ~0.34028235E39) = GREATER +compareReal (0.123, ~0.34028235E39) = GREATER +compare (0.123, ~0.17014117E39) = GREATER +compareReal (0.123, ~0.17014117E39) = GREATER +compare (0.123, ~0.123E4) = GREATER +compareReal (0.123, ~0.123E4) = GREATER +compare (0.123, ~0.123E2) = GREATER +compareReal (0.123, ~0.123E2) = GREATER +compare (0.123, ~0.31415927E1) = GREATER +compareReal (0.123, ~0.31415927E1) = GREATER +compare (0.123, ~0.27182817E1) = GREATER +compareReal (0.123, ~0.27182817E1) = GREATER +compare (0.123, ~0.123E1) = GREATER +compareReal (0.123, ~0.123E1) = GREATER +compare (0.123, ~0.123) = GREATER +compareReal (0.123, ~0.123) = GREATER +compare (0.123, ~0.123E~2) = GREATER +compareReal (0.123, ~0.123E~2) = GREATER +compare (0.123, ~0.11754944E~37) = GREATER +compareReal (0.123, ~0.11754944E~37) = GREATER +compare (0.123, ~0.5877472E~38) = GREATER +compareReal (0.123, ~0.5877472E~38) = GREATER +compare (0.123, ~0.1E~44) = GREATER +compareReal (0.123, ~0.1E~44) = GREATER +compare (0.123, ~0.0) = GREATER +compareReal (0.123, ~0.0) = GREATER +compare (0.123E~2, 0.34028235E39) = LESS +compareReal (0.123E~2, 0.34028235E39) = LESS +compare (0.123E~2, 0.17014117E39) = LESS +compareReal (0.123E~2, 0.17014117E39) = LESS +compare (0.123E~2, 0.123E4) = LESS +compareReal (0.123E~2, 0.123E4) = LESS +compare (0.123E~2, 0.123E2) = LESS +compareReal (0.123E~2, 0.123E2) = LESS +compare (0.123E~2, 0.31415927E1) = LESS +compareReal (0.123E~2, 0.31415927E1) = LESS +compare (0.123E~2, 0.27182817E1) = LESS +compareReal (0.123E~2, 0.27182817E1) = LESS +compare (0.123E~2, 0.123E1) = LESS +compareReal (0.123E~2, 0.123E1) = LESS +compare (0.123E~2, 0.123) = LESS +compareReal (0.123E~2, 0.123) = LESS +compare (0.123E~2, 0.123E~2) = EQUAL +compareReal (0.123E~2, 0.123E~2) = EQUAL +compare (0.123E~2, 0.11754944E~37) = GREATER +compareReal (0.123E~2, 0.11754944E~37) = GREATER +compare (0.123E~2, 0.5877472E~38) = GREATER +compareReal (0.123E~2, 0.5877472E~38) = GREATER +compare (0.123E~2, 0.1E~44) = GREATER +compareReal (0.123E~2, 0.1E~44) = GREATER +compare (0.123E~2, 0.0) = GREATER +compareReal (0.123E~2, 0.0) = GREATER +compare (0.123E~2, ~0.34028235E39) = GREATER +compareReal (0.123E~2, ~0.34028235E39) = GREATER +compare (0.123E~2, ~0.17014117E39) = GREATER +compareReal (0.123E~2, ~0.17014117E39) = GREATER +compare (0.123E~2, ~0.123E4) = GREATER +compareReal (0.123E~2, ~0.123E4) = GREATER +compare (0.123E~2, ~0.123E2) = GREATER +compareReal (0.123E~2, ~0.123E2) = GREATER +compare (0.123E~2, ~0.31415927E1) = GREATER +compareReal (0.123E~2, ~0.31415927E1) = GREATER +compare (0.123E~2, ~0.27182817E1) = GREATER +compareReal (0.123E~2, ~0.27182817E1) = GREATER +compare (0.123E~2, ~0.123E1) = GREATER +compareReal (0.123E~2, ~0.123E1) = GREATER +compare (0.123E~2, ~0.123) = GREATER +compareReal (0.123E~2, ~0.123) = GREATER +compare (0.123E~2, ~0.123E~2) = GREATER +compareReal (0.123E~2, ~0.123E~2) = GREATER +compare (0.123E~2, ~0.11754944E~37) = GREATER +compareReal (0.123E~2, ~0.11754944E~37) = GREATER +compare (0.123E~2, ~0.5877472E~38) = GREATER +compareReal (0.123E~2, ~0.5877472E~38) = GREATER +compare (0.123E~2, ~0.1E~44) = GREATER +compareReal (0.123E~2, ~0.1E~44) = GREATER +compare (0.123E~2, ~0.0) = GREATER +compareReal (0.123E~2, ~0.0) = GREATER +compare (0.11754944E~37, 0.34028235E39) = LESS +compareReal (0.11754944E~37, 0.34028235E39) = LESS +compare (0.11754944E~37, 0.17014117E39) = LESS +compareReal (0.11754944E~37, 0.17014117E39) = LESS +compare (0.11754944E~37, 0.123E4) = LESS +compareReal (0.11754944E~37, 0.123E4) = LESS +compare (0.11754944E~37, 0.123E2) = LESS +compareReal (0.11754944E~37, 0.123E2) = LESS +compare (0.11754944E~37, 0.31415927E1) = LESS +compareReal (0.11754944E~37, 0.31415927E1) = LESS +compare (0.11754944E~37, 0.27182817E1) = LESS +compareReal (0.11754944E~37, 0.27182817E1) = LESS +compare (0.11754944E~37, 0.123E1) = LESS +compareReal (0.11754944E~37, 0.123E1) = LESS +compare (0.11754944E~37, 0.123) = LESS +compareReal (0.11754944E~37, 0.123) = LESS +compare (0.11754944E~37, 0.123E~2) = LESS +compareReal (0.11754944E~37, 0.123E~2) = LESS +compare (0.11754944E~37, 0.11754944E~37) = EQUAL +compareReal (0.11754944E~37, 0.11754944E~37) = EQUAL +compare (0.11754944E~37, 0.5877472E~38) = GREATER +compareReal (0.11754944E~37, 0.5877472E~38) = GREATER +compare (0.11754944E~37, 0.1E~44) = GREATER +compareReal (0.11754944E~37, 0.1E~44) = GREATER +compare (0.11754944E~37, 0.0) = GREATER +compareReal (0.11754944E~37, 0.0) = GREATER +compare (0.11754944E~37, ~0.34028235E39) = GREATER +compareReal (0.11754944E~37, ~0.34028235E39) = GREATER +compare (0.11754944E~37, ~0.17014117E39) = GREATER +compareReal (0.11754944E~37, ~0.17014117E39) = GREATER +compare (0.11754944E~37, ~0.123E4) = GREATER +compareReal (0.11754944E~37, ~0.123E4) = GREATER +compare (0.11754944E~37, ~0.123E2) = GREATER +compareReal (0.11754944E~37, ~0.123E2) = GREATER +compare (0.11754944E~37, ~0.31415927E1) = GREATER +compareReal (0.11754944E~37, ~0.31415927E1) = GREATER +compare (0.11754944E~37, ~0.27182817E1) = GREATER +compareReal (0.11754944E~37, ~0.27182817E1) = GREATER +compare (0.11754944E~37, ~0.123E1) = GREATER +compareReal (0.11754944E~37, ~0.123E1) = GREATER +compare (0.11754944E~37, ~0.123) = GREATER +compareReal (0.11754944E~37, ~0.123) = GREATER +compare (0.11754944E~37, ~0.123E~2) = GREATER +compareReal (0.11754944E~37, ~0.123E~2) = GREATER +compare (0.11754944E~37, ~0.11754944E~37) = GREATER +compareReal (0.11754944E~37, ~0.11754944E~37) = GREATER +compare (0.11754944E~37, ~0.5877472E~38) = GREATER +compareReal (0.11754944E~37, ~0.5877472E~38) = GREATER +compare (0.11754944E~37, ~0.1E~44) = GREATER +compareReal (0.11754944E~37, ~0.1E~44) = GREATER +compare (0.11754944E~37, ~0.0) = GREATER +compareReal (0.11754944E~37, ~0.0) = GREATER +compare (0.5877472E~38, 0.34028235E39) = LESS +compareReal (0.5877472E~38, 0.34028235E39) = LESS +compare (0.5877472E~38, 0.17014117E39) = LESS +compareReal (0.5877472E~38, 0.17014117E39) = LESS +compare (0.5877472E~38, 0.123E4) = LESS +compareReal (0.5877472E~38, 0.123E4) = LESS +compare (0.5877472E~38, 0.123E2) = LESS +compareReal (0.5877472E~38, 0.123E2) = LESS +compare (0.5877472E~38, 0.31415927E1) = LESS +compareReal (0.5877472E~38, 0.31415927E1) = LESS +compare (0.5877472E~38, 0.27182817E1) = LESS +compareReal (0.5877472E~38, 0.27182817E1) = LESS +compare (0.5877472E~38, 0.123E1) = LESS +compareReal (0.5877472E~38, 0.123E1) = LESS +compare (0.5877472E~38, 0.123) = LESS +compareReal (0.5877472E~38, 0.123) = LESS +compare (0.5877472E~38, 0.123E~2) = LESS +compareReal (0.5877472E~38, 0.123E~2) = LESS +compare (0.5877472E~38, 0.11754944E~37) = LESS +compareReal (0.5877472E~38, 0.11754944E~37) = LESS +compare (0.5877472E~38, 0.5877472E~38) = EQUAL +compareReal (0.5877472E~38, 0.5877472E~38) = EQUAL +compare (0.5877472E~38, 0.1E~44) = GREATER +compareReal (0.5877472E~38, 0.1E~44) = GREATER +compare (0.5877472E~38, 0.0) = GREATER +compareReal (0.5877472E~38, 0.0) = GREATER +compare (0.5877472E~38, ~0.34028235E39) = GREATER +compareReal (0.5877472E~38, ~0.34028235E39) = GREATER +compare (0.5877472E~38, ~0.17014117E39) = GREATER +compareReal (0.5877472E~38, ~0.17014117E39) = GREATER +compare (0.5877472E~38, ~0.123E4) = GREATER +compareReal (0.5877472E~38, ~0.123E4) = GREATER +compare (0.5877472E~38, ~0.123E2) = GREATER +compareReal (0.5877472E~38, ~0.123E2) = GREATER +compare (0.5877472E~38, ~0.31415927E1) = GREATER +compareReal (0.5877472E~38, ~0.31415927E1) = GREATER +compare (0.5877472E~38, ~0.27182817E1) = GREATER +compareReal (0.5877472E~38, ~0.27182817E1) = GREATER +compare (0.5877472E~38, ~0.123E1) = GREATER +compareReal (0.5877472E~38, ~0.123E1) = GREATER +compare (0.5877472E~38, ~0.123) = GREATER +compareReal (0.5877472E~38, ~0.123) = GREATER +compare (0.5877472E~38, ~0.123E~2) = GREATER +compareReal (0.5877472E~38, ~0.123E~2) = GREATER +compare (0.5877472E~38, ~0.11754944E~37) = GREATER +compareReal (0.5877472E~38, ~0.11754944E~37) = GREATER +compare (0.5877472E~38, ~0.5877472E~38) = GREATER +compareReal (0.5877472E~38, ~0.5877472E~38) = GREATER +compare (0.5877472E~38, ~0.1E~44) = GREATER +compareReal (0.5877472E~38, ~0.1E~44) = GREATER +compare (0.5877472E~38, ~0.0) = GREATER +compareReal (0.5877472E~38, ~0.0) = GREATER +compare (0.1E~44, 0.34028235E39) = LESS +compareReal (0.1E~44, 0.34028235E39) = LESS +compare (0.1E~44, 0.17014117E39) = LESS +compareReal (0.1E~44, 0.17014117E39) = LESS +compare (0.1E~44, 0.123E4) = LESS +compareReal (0.1E~44, 0.123E4) = LESS +compare (0.1E~44, 0.123E2) = LESS +compareReal (0.1E~44, 0.123E2) = LESS +compare (0.1E~44, 0.31415927E1) = LESS +compareReal (0.1E~44, 0.31415927E1) = LESS +compare (0.1E~44, 0.27182817E1) = LESS +compareReal (0.1E~44, 0.27182817E1) = LESS +compare (0.1E~44, 0.123E1) = LESS +compareReal (0.1E~44, 0.123E1) = LESS +compare (0.1E~44, 0.123) = LESS +compareReal (0.1E~44, 0.123) = LESS +compare (0.1E~44, 0.123E~2) = LESS +compareReal (0.1E~44, 0.123E~2) = LESS +compare (0.1E~44, 0.11754944E~37) = LESS +compareReal (0.1E~44, 0.11754944E~37) = LESS +compare (0.1E~44, 0.5877472E~38) = LESS +compareReal (0.1E~44, 0.5877472E~38) = LESS +compare (0.1E~44, 0.1E~44) = EQUAL +compareReal (0.1E~44, 0.1E~44) = EQUAL +compare (0.1E~44, 0.0) = GREATER +compareReal (0.1E~44, 0.0) = GREATER +compare (0.1E~44, ~0.34028235E39) = GREATER +compareReal (0.1E~44, ~0.34028235E39) = GREATER +compare (0.1E~44, ~0.17014117E39) = GREATER +compareReal (0.1E~44, ~0.17014117E39) = GREATER +compare (0.1E~44, ~0.123E4) = GREATER +compareReal (0.1E~44, ~0.123E4) = GREATER +compare (0.1E~44, ~0.123E2) = GREATER +compareReal (0.1E~44, ~0.123E2) = GREATER +compare (0.1E~44, ~0.31415927E1) = GREATER +compareReal (0.1E~44, ~0.31415927E1) = GREATER +compare (0.1E~44, ~0.27182817E1) = GREATER +compareReal (0.1E~44, ~0.27182817E1) = GREATER +compare (0.1E~44, ~0.123E1) = GREATER +compareReal (0.1E~44, ~0.123E1) = GREATER +compare (0.1E~44, ~0.123) = GREATER +compareReal (0.1E~44, ~0.123) = GREATER +compare (0.1E~44, ~0.123E~2) = GREATER +compareReal (0.1E~44, ~0.123E~2) = GREATER +compare (0.1E~44, ~0.11754944E~37) = GREATER +compareReal (0.1E~44, ~0.11754944E~37) = GREATER +compare (0.1E~44, ~0.5877472E~38) = GREATER +compareReal (0.1E~44, ~0.5877472E~38) = GREATER +compare (0.1E~44, ~0.1E~44) = GREATER +compareReal (0.1E~44, ~0.1E~44) = GREATER +compare (0.1E~44, ~0.0) = GREATER +compareReal (0.1E~44, ~0.0) = GREATER +compare (0.0, 0.34028235E39) = LESS +compareReal (0.0, 0.34028235E39) = LESS +compare (0.0, 0.17014117E39) = LESS +compareReal (0.0, 0.17014117E39) = LESS +compare (0.0, 0.123E4) = LESS +compareReal (0.0, 0.123E4) = LESS +compare (0.0, 0.123E2) = LESS +compareReal (0.0, 0.123E2) = LESS +compare (0.0, 0.31415927E1) = LESS +compareReal (0.0, 0.31415927E1) = LESS +compare (0.0, 0.27182817E1) = LESS +compareReal (0.0, 0.27182817E1) = LESS +compare (0.0, 0.123E1) = LESS +compareReal (0.0, 0.123E1) = LESS +compare (0.0, 0.123) = LESS +compareReal (0.0, 0.123) = LESS +compare (0.0, 0.123E~2) = LESS +compareReal (0.0, 0.123E~2) = LESS +compare (0.0, 0.11754944E~37) = LESS +compareReal (0.0, 0.11754944E~37) = LESS +compare (0.0, 0.5877472E~38) = LESS +compareReal (0.0, 0.5877472E~38) = LESS +compare (0.0, 0.1E~44) = LESS +compareReal (0.0, 0.1E~44) = LESS +compare (0.0, 0.0) = EQUAL +compareReal (0.0, 0.0) = EQUAL +compare (0.0, ~0.34028235E39) = GREATER +compareReal (0.0, ~0.34028235E39) = GREATER +compare (0.0, ~0.17014117E39) = GREATER +compareReal (0.0, ~0.17014117E39) = GREATER +compare (0.0, ~0.123E4) = GREATER +compareReal (0.0, ~0.123E4) = GREATER +compare (0.0, ~0.123E2) = GREATER +compareReal (0.0, ~0.123E2) = GREATER +compare (0.0, ~0.31415927E1) = GREATER +compareReal (0.0, ~0.31415927E1) = GREATER +compare (0.0, ~0.27182817E1) = GREATER +compareReal (0.0, ~0.27182817E1) = GREATER +compare (0.0, ~0.123E1) = GREATER +compareReal (0.0, ~0.123E1) = GREATER +compare (0.0, ~0.123) = GREATER +compareReal (0.0, ~0.123) = GREATER +compare (0.0, ~0.123E~2) = GREATER +compareReal (0.0, ~0.123E~2) = GREATER +compare (0.0, ~0.11754944E~37) = GREATER +compareReal (0.0, ~0.11754944E~37) = GREATER +compare (0.0, ~0.5877472E~38) = GREATER +compareReal (0.0, ~0.5877472E~38) = GREATER +compare (0.0, ~0.1E~44) = GREATER +compareReal (0.0, ~0.1E~44) = GREATER +compare (0.0, ~0.0) = EQUAL +compareReal (0.0, ~0.0) = EQUAL +compare (~0.34028235E39, 0.34028235E39) = LESS +compareReal (~0.34028235E39, 0.34028235E39) = LESS +compare (~0.34028235E39, 0.17014117E39) = LESS +compareReal (~0.34028235E39, 0.17014117E39) = LESS +compare (~0.34028235E39, 0.123E4) = LESS +compareReal (~0.34028235E39, 0.123E4) = LESS +compare (~0.34028235E39, 0.123E2) = LESS +compareReal (~0.34028235E39, 0.123E2) = LESS +compare (~0.34028235E39, 0.31415927E1) = LESS +compareReal (~0.34028235E39, 0.31415927E1) = LESS +compare (~0.34028235E39, 0.27182817E1) = LESS +compareReal (~0.34028235E39, 0.27182817E1) = LESS +compare (~0.34028235E39, 0.123E1) = LESS +compareReal (~0.34028235E39, 0.123E1) = LESS +compare (~0.34028235E39, 0.123) = LESS +compareReal (~0.34028235E39, 0.123) = LESS +compare (~0.34028235E39, 0.123E~2) = LESS +compareReal (~0.34028235E39, 0.123E~2) = LESS +compare (~0.34028235E39, 0.11754944E~37) = LESS +compareReal (~0.34028235E39, 0.11754944E~37) = LESS +compare (~0.34028235E39, 0.5877472E~38) = LESS +compareReal (~0.34028235E39, 0.5877472E~38) = LESS +compare (~0.34028235E39, 0.1E~44) = LESS +compareReal (~0.34028235E39, 0.1E~44) = LESS +compare (~0.34028235E39, 0.0) = LESS +compareReal (~0.34028235E39, 0.0) = LESS +compare (~0.34028235E39, ~0.34028235E39) = EQUAL +compareReal (~0.34028235E39, ~0.34028235E39) = EQUAL +compare (~0.34028235E39, ~0.17014117E39) = LESS +compareReal (~0.34028235E39, ~0.17014117E39) = LESS +compare (~0.34028235E39, ~0.123E4) = LESS +compareReal (~0.34028235E39, ~0.123E4) = LESS +compare (~0.34028235E39, ~0.123E2) = LESS +compareReal (~0.34028235E39, ~0.123E2) = LESS +compare (~0.34028235E39, ~0.31415927E1) = LESS +compareReal (~0.34028235E39, ~0.31415927E1) = LESS +compare (~0.34028235E39, ~0.27182817E1) = LESS +compareReal (~0.34028235E39, ~0.27182817E1) = LESS +compare (~0.34028235E39, ~0.123E1) = LESS +compareReal (~0.34028235E39, ~0.123E1) = LESS +compare (~0.34028235E39, ~0.123) = LESS +compareReal (~0.34028235E39, ~0.123) = LESS +compare (~0.34028235E39, ~0.123E~2) = LESS +compareReal (~0.34028235E39, ~0.123E~2) = LESS +compare (~0.34028235E39, ~0.11754944E~37) = LESS +compareReal (~0.34028235E39, ~0.11754944E~37) = LESS +compare (~0.34028235E39, ~0.5877472E~38) = LESS +compareReal (~0.34028235E39, ~0.5877472E~38) = LESS +compare (~0.34028235E39, ~0.1E~44) = LESS +compareReal (~0.34028235E39, ~0.1E~44) = LESS +compare (~0.34028235E39, ~0.0) = LESS +compareReal (~0.34028235E39, ~0.0) = LESS +compare (~0.17014117E39, 0.34028235E39) = LESS +compareReal (~0.17014117E39, 0.34028235E39) = LESS +compare (~0.17014117E39, 0.17014117E39) = LESS +compareReal (~0.17014117E39, 0.17014117E39) = LESS +compare (~0.17014117E39, 0.123E4) = LESS +compareReal (~0.17014117E39, 0.123E4) = LESS +compare (~0.17014117E39, 0.123E2) = LESS +compareReal (~0.17014117E39, 0.123E2) = LESS +compare (~0.17014117E39, 0.31415927E1) = LESS +compareReal (~0.17014117E39, 0.31415927E1) = LESS +compare (~0.17014117E39, 0.27182817E1) = LESS +compareReal (~0.17014117E39, 0.27182817E1) = LESS +compare (~0.17014117E39, 0.123E1) = LESS +compareReal (~0.17014117E39, 0.123E1) = LESS +compare (~0.17014117E39, 0.123) = LESS +compareReal (~0.17014117E39, 0.123) = LESS +compare (~0.17014117E39, 0.123E~2) = LESS +compareReal (~0.17014117E39, 0.123E~2) = LESS +compare (~0.17014117E39, 0.11754944E~37) = LESS +compareReal (~0.17014117E39, 0.11754944E~37) = LESS +compare (~0.17014117E39, 0.5877472E~38) = LESS +compareReal (~0.17014117E39, 0.5877472E~38) = LESS +compare (~0.17014117E39, 0.1E~44) = LESS +compareReal (~0.17014117E39, 0.1E~44) = LESS +compare (~0.17014117E39, 0.0) = LESS +compareReal (~0.17014117E39, 0.0) = LESS +compare (~0.17014117E39, ~0.34028235E39) = GREATER +compareReal (~0.17014117E39, ~0.34028235E39) = GREATER +compare (~0.17014117E39, ~0.17014117E39) = EQUAL +compareReal (~0.17014117E39, ~0.17014117E39) = EQUAL +compare (~0.17014117E39, ~0.123E4) = LESS +compareReal (~0.17014117E39, ~0.123E4) = LESS +compare (~0.17014117E39, ~0.123E2) = LESS +compareReal (~0.17014117E39, ~0.123E2) = LESS +compare (~0.17014117E39, ~0.31415927E1) = LESS +compareReal (~0.17014117E39, ~0.31415927E1) = LESS +compare (~0.17014117E39, ~0.27182817E1) = LESS +compareReal (~0.17014117E39, ~0.27182817E1) = LESS +compare (~0.17014117E39, ~0.123E1) = LESS +compareReal (~0.17014117E39, ~0.123E1) = LESS +compare (~0.17014117E39, ~0.123) = LESS +compareReal (~0.17014117E39, ~0.123) = LESS +compare (~0.17014117E39, ~0.123E~2) = LESS +compareReal (~0.17014117E39, ~0.123E~2) = LESS +compare (~0.17014117E39, ~0.11754944E~37) = LESS +compareReal (~0.17014117E39, ~0.11754944E~37) = LESS +compare (~0.17014117E39, ~0.5877472E~38) = LESS +compareReal (~0.17014117E39, ~0.5877472E~38) = LESS +compare (~0.17014117E39, ~0.1E~44) = LESS +compareReal (~0.17014117E39, ~0.1E~44) = LESS +compare (~0.17014117E39, ~0.0) = LESS +compareReal (~0.17014117E39, ~0.0) = LESS +compare (~0.123E4, 0.34028235E39) = LESS +compareReal (~0.123E4, 0.34028235E39) = LESS +compare (~0.123E4, 0.17014117E39) = LESS +compareReal (~0.123E4, 0.17014117E39) = LESS +compare (~0.123E4, 0.123E4) = LESS +compareReal (~0.123E4, 0.123E4) = LESS +compare (~0.123E4, 0.123E2) = LESS +compareReal (~0.123E4, 0.123E2) = LESS +compare (~0.123E4, 0.31415927E1) = LESS +compareReal (~0.123E4, 0.31415927E1) = LESS +compare (~0.123E4, 0.27182817E1) = LESS +compareReal (~0.123E4, 0.27182817E1) = LESS +compare (~0.123E4, 0.123E1) = LESS +compareReal (~0.123E4, 0.123E1) = LESS +compare (~0.123E4, 0.123) = LESS +compareReal (~0.123E4, 0.123) = LESS +compare (~0.123E4, 0.123E~2) = LESS +compareReal (~0.123E4, 0.123E~2) = LESS +compare (~0.123E4, 0.11754944E~37) = LESS +compareReal (~0.123E4, 0.11754944E~37) = LESS +compare (~0.123E4, 0.5877472E~38) = LESS +compareReal (~0.123E4, 0.5877472E~38) = LESS +compare (~0.123E4, 0.1E~44) = LESS +compareReal (~0.123E4, 0.1E~44) = LESS +compare (~0.123E4, 0.0) = LESS +compareReal (~0.123E4, 0.0) = LESS +compare (~0.123E4, ~0.34028235E39) = GREATER +compareReal (~0.123E4, ~0.34028235E39) = GREATER +compare (~0.123E4, ~0.17014117E39) = GREATER +compareReal (~0.123E4, ~0.17014117E39) = GREATER +compare (~0.123E4, ~0.123E4) = EQUAL +compareReal (~0.123E4, ~0.123E4) = EQUAL +compare (~0.123E4, ~0.123E2) = LESS +compareReal (~0.123E4, ~0.123E2) = LESS +compare (~0.123E4, ~0.31415927E1) = LESS +compareReal (~0.123E4, ~0.31415927E1) = LESS +compare (~0.123E4, ~0.27182817E1) = LESS +compareReal (~0.123E4, ~0.27182817E1) = LESS +compare (~0.123E4, ~0.123E1) = LESS +compareReal (~0.123E4, ~0.123E1) = LESS +compare (~0.123E4, ~0.123) = LESS +compareReal (~0.123E4, ~0.123) = LESS +compare (~0.123E4, ~0.123E~2) = LESS +compareReal (~0.123E4, ~0.123E~2) = LESS +compare (~0.123E4, ~0.11754944E~37) = LESS +compareReal (~0.123E4, ~0.11754944E~37) = LESS +compare (~0.123E4, ~0.5877472E~38) = LESS +compareReal (~0.123E4, ~0.5877472E~38) = LESS +compare (~0.123E4, ~0.1E~44) = LESS +compareReal (~0.123E4, ~0.1E~44) = LESS +compare (~0.123E4, ~0.0) = LESS +compareReal (~0.123E4, ~0.0) = LESS +compare (~0.123E2, 0.34028235E39) = LESS +compareReal (~0.123E2, 0.34028235E39) = LESS +compare (~0.123E2, 0.17014117E39) = LESS +compareReal (~0.123E2, 0.17014117E39) = LESS +compare (~0.123E2, 0.123E4) = LESS +compareReal (~0.123E2, 0.123E4) = LESS +compare (~0.123E2, 0.123E2) = LESS +compareReal (~0.123E2, 0.123E2) = LESS +compare (~0.123E2, 0.31415927E1) = LESS +compareReal (~0.123E2, 0.31415927E1) = LESS +compare (~0.123E2, 0.27182817E1) = LESS +compareReal (~0.123E2, 0.27182817E1) = LESS +compare (~0.123E2, 0.123E1) = LESS +compareReal (~0.123E2, 0.123E1) = LESS +compare (~0.123E2, 0.123) = LESS +compareReal (~0.123E2, 0.123) = LESS +compare (~0.123E2, 0.123E~2) = LESS +compareReal (~0.123E2, 0.123E~2) = LESS +compare (~0.123E2, 0.11754944E~37) = LESS +compareReal (~0.123E2, 0.11754944E~37) = LESS +compare (~0.123E2, 0.5877472E~38) = LESS +compareReal (~0.123E2, 0.5877472E~38) = LESS +compare (~0.123E2, 0.1E~44) = LESS +compareReal (~0.123E2, 0.1E~44) = LESS +compare (~0.123E2, 0.0) = LESS +compareReal (~0.123E2, 0.0) = LESS +compare (~0.123E2, ~0.34028235E39) = GREATER +compareReal (~0.123E2, ~0.34028235E39) = GREATER +compare (~0.123E2, ~0.17014117E39) = GREATER +compareReal (~0.123E2, ~0.17014117E39) = GREATER +compare (~0.123E2, ~0.123E4) = GREATER +compareReal (~0.123E2, ~0.123E4) = GREATER +compare (~0.123E2, ~0.123E2) = EQUAL +compareReal (~0.123E2, ~0.123E2) = EQUAL +compare (~0.123E2, ~0.31415927E1) = LESS +compareReal (~0.123E2, ~0.31415927E1) = LESS +compare (~0.123E2, ~0.27182817E1) = LESS +compareReal (~0.123E2, ~0.27182817E1) = LESS +compare (~0.123E2, ~0.123E1) = LESS +compareReal (~0.123E2, ~0.123E1) = LESS +compare (~0.123E2, ~0.123) = LESS +compareReal (~0.123E2, ~0.123) = LESS +compare (~0.123E2, ~0.123E~2) = LESS +compareReal (~0.123E2, ~0.123E~2) = LESS +compare (~0.123E2, ~0.11754944E~37) = LESS +compareReal (~0.123E2, ~0.11754944E~37) = LESS +compare (~0.123E2, ~0.5877472E~38) = LESS +compareReal (~0.123E2, ~0.5877472E~38) = LESS +compare (~0.123E2, ~0.1E~44) = LESS +compareReal (~0.123E2, ~0.1E~44) = LESS +compare (~0.123E2, ~0.0) = LESS +compareReal (~0.123E2, ~0.0) = LESS +compare (~0.31415927E1, 0.34028235E39) = LESS +compareReal (~0.31415927E1, 0.34028235E39) = LESS +compare (~0.31415927E1, 0.17014117E39) = LESS +compareReal (~0.31415927E1, 0.17014117E39) = LESS +compare (~0.31415927E1, 0.123E4) = LESS +compareReal (~0.31415927E1, 0.123E4) = LESS +compare (~0.31415927E1, 0.123E2) = LESS +compareReal (~0.31415927E1, 0.123E2) = LESS +compare (~0.31415927E1, 0.31415927E1) = LESS +compareReal (~0.31415927E1, 0.31415927E1) = LESS +compare (~0.31415927E1, 0.27182817E1) = LESS +compareReal (~0.31415927E1, 0.27182817E1) = LESS +compare (~0.31415927E1, 0.123E1) = LESS +compareReal (~0.31415927E1, 0.123E1) = LESS +compare (~0.31415927E1, 0.123) = LESS +compareReal (~0.31415927E1, 0.123) = LESS +compare (~0.31415927E1, 0.123E~2) = LESS +compareReal (~0.31415927E1, 0.123E~2) = LESS +compare (~0.31415927E1, 0.11754944E~37) = LESS +compareReal (~0.31415927E1, 0.11754944E~37) = LESS +compare (~0.31415927E1, 0.5877472E~38) = LESS +compareReal (~0.31415927E1, 0.5877472E~38) = LESS +compare (~0.31415927E1, 0.1E~44) = LESS +compareReal (~0.31415927E1, 0.1E~44) = LESS +compare (~0.31415927E1, 0.0) = LESS +compareReal (~0.31415927E1, 0.0) = LESS +compare (~0.31415927E1, ~0.34028235E39) = GREATER +compareReal (~0.31415927E1, ~0.34028235E39) = GREATER +compare (~0.31415927E1, ~0.17014117E39) = GREATER +compareReal (~0.31415927E1, ~0.17014117E39) = GREATER +compare (~0.31415927E1, ~0.123E4) = GREATER +compareReal (~0.31415927E1, ~0.123E4) = GREATER +compare (~0.31415927E1, ~0.123E2) = GREATER +compareReal (~0.31415927E1, ~0.123E2) = GREATER +compare (~0.31415927E1, ~0.31415927E1) = EQUAL +compareReal (~0.31415927E1, ~0.31415927E1) = EQUAL +compare (~0.31415927E1, ~0.27182817E1) = LESS +compareReal (~0.31415927E1, ~0.27182817E1) = LESS +compare (~0.31415927E1, ~0.123E1) = LESS +compareReal (~0.31415927E1, ~0.123E1) = LESS +compare (~0.31415927E1, ~0.123) = LESS +compareReal (~0.31415927E1, ~0.123) = LESS +compare (~0.31415927E1, ~0.123E~2) = LESS +compareReal (~0.31415927E1, ~0.123E~2) = LESS +compare (~0.31415927E1, ~0.11754944E~37) = LESS +compareReal (~0.31415927E1, ~0.11754944E~37) = LESS +compare (~0.31415927E1, ~0.5877472E~38) = LESS +compareReal (~0.31415927E1, ~0.5877472E~38) = LESS +compare (~0.31415927E1, ~0.1E~44) = LESS +compareReal (~0.31415927E1, ~0.1E~44) = LESS +compare (~0.31415927E1, ~0.0) = LESS +compareReal (~0.31415927E1, ~0.0) = LESS +compare (~0.27182817E1, 0.34028235E39) = LESS +compareReal (~0.27182817E1, 0.34028235E39) = LESS +compare (~0.27182817E1, 0.17014117E39) = LESS +compareReal (~0.27182817E1, 0.17014117E39) = LESS +compare (~0.27182817E1, 0.123E4) = LESS +compareReal (~0.27182817E1, 0.123E4) = LESS +compare (~0.27182817E1, 0.123E2) = LESS +compareReal (~0.27182817E1, 0.123E2) = LESS +compare (~0.27182817E1, 0.31415927E1) = LESS +compareReal (~0.27182817E1, 0.31415927E1) = LESS +compare (~0.27182817E1, 0.27182817E1) = LESS +compareReal (~0.27182817E1, 0.27182817E1) = LESS +compare (~0.27182817E1, 0.123E1) = LESS +compareReal (~0.27182817E1, 0.123E1) = LESS +compare (~0.27182817E1, 0.123) = LESS +compareReal (~0.27182817E1, 0.123) = LESS +compare (~0.27182817E1, 0.123E~2) = LESS +compareReal (~0.27182817E1, 0.123E~2) = LESS +compare (~0.27182817E1, 0.11754944E~37) = LESS +compareReal (~0.27182817E1, 0.11754944E~37) = LESS +compare (~0.27182817E1, 0.5877472E~38) = LESS +compareReal (~0.27182817E1, 0.5877472E~38) = LESS +compare (~0.27182817E1, 0.1E~44) = LESS +compareReal (~0.27182817E1, 0.1E~44) = LESS +compare (~0.27182817E1, 0.0) = LESS +compareReal (~0.27182817E1, 0.0) = LESS +compare (~0.27182817E1, ~0.34028235E39) = GREATER +compareReal (~0.27182817E1, ~0.34028235E39) = GREATER +compare (~0.27182817E1, ~0.17014117E39) = GREATER +compareReal (~0.27182817E1, ~0.17014117E39) = GREATER +compare (~0.27182817E1, ~0.123E4) = GREATER +compareReal (~0.27182817E1, ~0.123E4) = GREATER +compare (~0.27182817E1, ~0.123E2) = GREATER +compareReal (~0.27182817E1, ~0.123E2) = GREATER +compare (~0.27182817E1, ~0.31415927E1) = GREATER +compareReal (~0.27182817E1, ~0.31415927E1) = GREATER +compare (~0.27182817E1, ~0.27182817E1) = EQUAL +compareReal (~0.27182817E1, ~0.27182817E1) = EQUAL +compare (~0.27182817E1, ~0.123E1) = LESS +compareReal (~0.27182817E1, ~0.123E1) = LESS +compare (~0.27182817E1, ~0.123) = LESS +compareReal (~0.27182817E1, ~0.123) = LESS +compare (~0.27182817E1, ~0.123E~2) = LESS +compareReal (~0.27182817E1, ~0.123E~2) = LESS +compare (~0.27182817E1, ~0.11754944E~37) = LESS +compareReal (~0.27182817E1, ~0.11754944E~37) = LESS +compare (~0.27182817E1, ~0.5877472E~38) = LESS +compareReal (~0.27182817E1, ~0.5877472E~38) = LESS +compare (~0.27182817E1, ~0.1E~44) = LESS +compareReal (~0.27182817E1, ~0.1E~44) = LESS +compare (~0.27182817E1, ~0.0) = LESS +compareReal (~0.27182817E1, ~0.0) = LESS +compare (~0.123E1, 0.34028235E39) = LESS +compareReal (~0.123E1, 0.34028235E39) = LESS +compare (~0.123E1, 0.17014117E39) = LESS +compareReal (~0.123E1, 0.17014117E39) = LESS +compare (~0.123E1, 0.123E4) = LESS +compareReal (~0.123E1, 0.123E4) = LESS +compare (~0.123E1, 0.123E2) = LESS +compareReal (~0.123E1, 0.123E2) = LESS +compare (~0.123E1, 0.31415927E1) = LESS +compareReal (~0.123E1, 0.31415927E1) = LESS +compare (~0.123E1, 0.27182817E1) = LESS +compareReal (~0.123E1, 0.27182817E1) = LESS +compare (~0.123E1, 0.123E1) = LESS +compareReal (~0.123E1, 0.123E1) = LESS +compare (~0.123E1, 0.123) = LESS +compareReal (~0.123E1, 0.123) = LESS +compare (~0.123E1, 0.123E~2) = LESS +compareReal (~0.123E1, 0.123E~2) = LESS +compare (~0.123E1, 0.11754944E~37) = LESS +compareReal (~0.123E1, 0.11754944E~37) = LESS +compare (~0.123E1, 0.5877472E~38) = LESS +compareReal (~0.123E1, 0.5877472E~38) = LESS +compare (~0.123E1, 0.1E~44) = LESS +compareReal (~0.123E1, 0.1E~44) = LESS +compare (~0.123E1, 0.0) = LESS +compareReal (~0.123E1, 0.0) = LESS +compare (~0.123E1, ~0.34028235E39) = GREATER +compareReal (~0.123E1, ~0.34028235E39) = GREATER +compare (~0.123E1, ~0.17014117E39) = GREATER +compareReal (~0.123E1, ~0.17014117E39) = GREATER +compare (~0.123E1, ~0.123E4) = GREATER +compareReal (~0.123E1, ~0.123E4) = GREATER +compare (~0.123E1, ~0.123E2) = GREATER +compareReal (~0.123E1, ~0.123E2) = GREATER +compare (~0.123E1, ~0.31415927E1) = GREATER +compareReal (~0.123E1, ~0.31415927E1) = GREATER +compare (~0.123E1, ~0.27182817E1) = GREATER +compareReal (~0.123E1, ~0.27182817E1) = GREATER +compare (~0.123E1, ~0.123E1) = EQUAL +compareReal (~0.123E1, ~0.123E1) = EQUAL +compare (~0.123E1, ~0.123) = LESS +compareReal (~0.123E1, ~0.123) = LESS +compare (~0.123E1, ~0.123E~2) = LESS +compareReal (~0.123E1, ~0.123E~2) = LESS +compare (~0.123E1, ~0.11754944E~37) = LESS +compareReal (~0.123E1, ~0.11754944E~37) = LESS +compare (~0.123E1, ~0.5877472E~38) = LESS +compareReal (~0.123E1, ~0.5877472E~38) = LESS +compare (~0.123E1, ~0.1E~44) = LESS +compareReal (~0.123E1, ~0.1E~44) = LESS +compare (~0.123E1, ~0.0) = LESS +compareReal (~0.123E1, ~0.0) = LESS +compare (~0.123, 0.34028235E39) = LESS +compareReal (~0.123, 0.34028235E39) = LESS +compare (~0.123, 0.17014117E39) = LESS +compareReal (~0.123, 0.17014117E39) = LESS +compare (~0.123, 0.123E4) = LESS +compareReal (~0.123, 0.123E4) = LESS +compare (~0.123, 0.123E2) = LESS +compareReal (~0.123, 0.123E2) = LESS +compare (~0.123, 0.31415927E1) = LESS +compareReal (~0.123, 0.31415927E1) = LESS +compare (~0.123, 0.27182817E1) = LESS +compareReal (~0.123, 0.27182817E1) = LESS +compare (~0.123, 0.123E1) = LESS +compareReal (~0.123, 0.123E1) = LESS +compare (~0.123, 0.123) = LESS +compareReal (~0.123, 0.123) = LESS +compare (~0.123, 0.123E~2) = LESS +compareReal (~0.123, 0.123E~2) = LESS +compare (~0.123, 0.11754944E~37) = LESS +compareReal (~0.123, 0.11754944E~37) = LESS +compare (~0.123, 0.5877472E~38) = LESS +compareReal (~0.123, 0.5877472E~38) = LESS +compare (~0.123, 0.1E~44) = LESS +compareReal (~0.123, 0.1E~44) = LESS +compare (~0.123, 0.0) = LESS +compareReal (~0.123, 0.0) = LESS +compare (~0.123, ~0.34028235E39) = GREATER +compareReal (~0.123, ~0.34028235E39) = GREATER +compare (~0.123, ~0.17014117E39) = GREATER +compareReal (~0.123, ~0.17014117E39) = GREATER +compare (~0.123, ~0.123E4) = GREATER +compareReal (~0.123, ~0.123E4) = GREATER +compare (~0.123, ~0.123E2) = GREATER +compareReal (~0.123, ~0.123E2) = GREATER +compare (~0.123, ~0.31415927E1) = GREATER +compareReal (~0.123, ~0.31415927E1) = GREATER +compare (~0.123, ~0.27182817E1) = GREATER +compareReal (~0.123, ~0.27182817E1) = GREATER +compare (~0.123, ~0.123E1) = GREATER +compareReal (~0.123, ~0.123E1) = GREATER +compare (~0.123, ~0.123) = EQUAL +compareReal (~0.123, ~0.123) = EQUAL +compare (~0.123, ~0.123E~2) = LESS +compareReal (~0.123, ~0.123E~2) = LESS +compare (~0.123, ~0.11754944E~37) = LESS +compareReal (~0.123, ~0.11754944E~37) = LESS +compare (~0.123, ~0.5877472E~38) = LESS +compareReal (~0.123, ~0.5877472E~38) = LESS +compare (~0.123, ~0.1E~44) = LESS +compareReal (~0.123, ~0.1E~44) = LESS +compare (~0.123, ~0.0) = LESS +compareReal (~0.123, ~0.0) = LESS +compare (~0.123E~2, 0.34028235E39) = LESS +compareReal (~0.123E~2, 0.34028235E39) = LESS +compare (~0.123E~2, 0.17014117E39) = LESS +compareReal (~0.123E~2, 0.17014117E39) = LESS +compare (~0.123E~2, 0.123E4) = LESS +compareReal (~0.123E~2, 0.123E4) = LESS +compare (~0.123E~2, 0.123E2) = LESS +compareReal (~0.123E~2, 0.123E2) = LESS +compare (~0.123E~2, 0.31415927E1) = LESS +compareReal (~0.123E~2, 0.31415927E1) = LESS +compare (~0.123E~2, 0.27182817E1) = LESS +compareReal (~0.123E~2, 0.27182817E1) = LESS +compare (~0.123E~2, 0.123E1) = LESS +compareReal (~0.123E~2, 0.123E1) = LESS +compare (~0.123E~2, 0.123) = LESS +compareReal (~0.123E~2, 0.123) = LESS +compare (~0.123E~2, 0.123E~2) = LESS +compareReal (~0.123E~2, 0.123E~2) = LESS +compare (~0.123E~2, 0.11754944E~37) = LESS +compareReal (~0.123E~2, 0.11754944E~37) = LESS +compare (~0.123E~2, 0.5877472E~38) = LESS +compareReal (~0.123E~2, 0.5877472E~38) = LESS +compare (~0.123E~2, 0.1E~44) = LESS +compareReal (~0.123E~2, 0.1E~44) = LESS +compare (~0.123E~2, 0.0) = LESS +compareReal (~0.123E~2, 0.0) = LESS +compare (~0.123E~2, ~0.34028235E39) = GREATER +compareReal (~0.123E~2, ~0.34028235E39) = GREATER +compare (~0.123E~2, ~0.17014117E39) = GREATER +compareReal (~0.123E~2, ~0.17014117E39) = GREATER +compare (~0.123E~2, ~0.123E4) = GREATER +compareReal (~0.123E~2, ~0.123E4) = GREATER +compare (~0.123E~2, ~0.123E2) = GREATER +compareReal (~0.123E~2, ~0.123E2) = GREATER +compare (~0.123E~2, ~0.31415927E1) = GREATER +compareReal (~0.123E~2, ~0.31415927E1) = GREATER +compare (~0.123E~2, ~0.27182817E1) = GREATER +compareReal (~0.123E~2, ~0.27182817E1) = GREATER +compare (~0.123E~2, ~0.123E1) = GREATER +compareReal (~0.123E~2, ~0.123E1) = GREATER +compare (~0.123E~2, ~0.123) = GREATER +compareReal (~0.123E~2, ~0.123) = GREATER +compare (~0.123E~2, ~0.123E~2) = EQUAL +compareReal (~0.123E~2, ~0.123E~2) = EQUAL +compare (~0.123E~2, ~0.11754944E~37) = LESS +compareReal (~0.123E~2, ~0.11754944E~37) = LESS +compare (~0.123E~2, ~0.5877472E~38) = LESS +compareReal (~0.123E~2, ~0.5877472E~38) = LESS +compare (~0.123E~2, ~0.1E~44) = LESS +compareReal (~0.123E~2, ~0.1E~44) = LESS +compare (~0.123E~2, ~0.0) = LESS +compareReal (~0.123E~2, ~0.0) = LESS +compare (~0.11754944E~37, 0.34028235E39) = LESS +compareReal (~0.11754944E~37, 0.34028235E39) = LESS +compare (~0.11754944E~37, 0.17014117E39) = LESS +compareReal (~0.11754944E~37, 0.17014117E39) = LESS +compare (~0.11754944E~37, 0.123E4) = LESS +compareReal (~0.11754944E~37, 0.123E4) = LESS +compare (~0.11754944E~37, 0.123E2) = LESS +compareReal (~0.11754944E~37, 0.123E2) = LESS +compare (~0.11754944E~37, 0.31415927E1) = LESS +compareReal (~0.11754944E~37, 0.31415927E1) = LESS +compare (~0.11754944E~37, 0.27182817E1) = LESS +compareReal (~0.11754944E~37, 0.27182817E1) = LESS +compare (~0.11754944E~37, 0.123E1) = LESS +compareReal (~0.11754944E~37, 0.123E1) = LESS +compare (~0.11754944E~37, 0.123) = LESS +compareReal (~0.11754944E~37, 0.123) = LESS +compare (~0.11754944E~37, 0.123E~2) = LESS +compareReal (~0.11754944E~37, 0.123E~2) = LESS +compare (~0.11754944E~37, 0.11754944E~37) = LESS +compareReal (~0.11754944E~37, 0.11754944E~37) = LESS +compare (~0.11754944E~37, 0.5877472E~38) = LESS +compareReal (~0.11754944E~37, 0.5877472E~38) = LESS +compare (~0.11754944E~37, 0.1E~44) = LESS +compareReal (~0.11754944E~37, 0.1E~44) = LESS +compare (~0.11754944E~37, 0.0) = LESS +compareReal (~0.11754944E~37, 0.0) = LESS +compare (~0.11754944E~37, ~0.34028235E39) = GREATER +compareReal (~0.11754944E~37, ~0.34028235E39) = GREATER +compare (~0.11754944E~37, ~0.17014117E39) = GREATER +compareReal (~0.11754944E~37, ~0.17014117E39) = GREATER +compare (~0.11754944E~37, ~0.123E4) = GREATER +compareReal (~0.11754944E~37, ~0.123E4) = GREATER +compare (~0.11754944E~37, ~0.123E2) = GREATER +compareReal (~0.11754944E~37, ~0.123E2) = GREATER +compare (~0.11754944E~37, ~0.31415927E1) = GREATER +compareReal (~0.11754944E~37, ~0.31415927E1) = GREATER +compare (~0.11754944E~37, ~0.27182817E1) = GREATER +compareReal (~0.11754944E~37, ~0.27182817E1) = GREATER +compare (~0.11754944E~37, ~0.123E1) = GREATER +compareReal (~0.11754944E~37, ~0.123E1) = GREATER +compare (~0.11754944E~37, ~0.123) = GREATER +compareReal (~0.11754944E~37, ~0.123) = GREATER +compare (~0.11754944E~37, ~0.123E~2) = GREATER +compareReal (~0.11754944E~37, ~0.123E~2) = GREATER +compare (~0.11754944E~37, ~0.11754944E~37) = EQUAL +compareReal (~0.11754944E~37, ~0.11754944E~37) = EQUAL +compare (~0.11754944E~37, ~0.5877472E~38) = LESS +compareReal (~0.11754944E~37, ~0.5877472E~38) = LESS +compare (~0.11754944E~37, ~0.1E~44) = LESS +compareReal (~0.11754944E~37, ~0.1E~44) = LESS +compare (~0.11754944E~37, ~0.0) = LESS +compareReal (~0.11754944E~37, ~0.0) = LESS +compare (~0.5877472E~38, 0.34028235E39) = LESS +compareReal (~0.5877472E~38, 0.34028235E39) = LESS +compare (~0.5877472E~38, 0.17014117E39) = LESS +compareReal (~0.5877472E~38, 0.17014117E39) = LESS +compare (~0.5877472E~38, 0.123E4) = LESS +compareReal (~0.5877472E~38, 0.123E4) = LESS +compare (~0.5877472E~38, 0.123E2) = LESS +compareReal (~0.5877472E~38, 0.123E2) = LESS +compare (~0.5877472E~38, 0.31415927E1) = LESS +compareReal (~0.5877472E~38, 0.31415927E1) = LESS +compare (~0.5877472E~38, 0.27182817E1) = LESS +compareReal (~0.5877472E~38, 0.27182817E1) = LESS +compare (~0.5877472E~38, 0.123E1) = LESS +compareReal (~0.5877472E~38, 0.123E1) = LESS +compare (~0.5877472E~38, 0.123) = LESS +compareReal (~0.5877472E~38, 0.123) = LESS +compare (~0.5877472E~38, 0.123E~2) = LESS +compareReal (~0.5877472E~38, 0.123E~2) = LESS +compare (~0.5877472E~38, 0.11754944E~37) = LESS +compareReal (~0.5877472E~38, 0.11754944E~37) = LESS +compare (~0.5877472E~38, 0.5877472E~38) = LESS +compareReal (~0.5877472E~38, 0.5877472E~38) = LESS +compare (~0.5877472E~38, 0.1E~44) = LESS +compareReal (~0.5877472E~38, 0.1E~44) = LESS +compare (~0.5877472E~38, 0.0) = LESS +compareReal (~0.5877472E~38, 0.0) = LESS +compare (~0.5877472E~38, ~0.34028235E39) = GREATER +compareReal (~0.5877472E~38, ~0.34028235E39) = GREATER +compare (~0.5877472E~38, ~0.17014117E39) = GREATER +compareReal (~0.5877472E~38, ~0.17014117E39) = GREATER +compare (~0.5877472E~38, ~0.123E4) = GREATER +compareReal (~0.5877472E~38, ~0.123E4) = GREATER +compare (~0.5877472E~38, ~0.123E2) = GREATER +compareReal (~0.5877472E~38, ~0.123E2) = GREATER +compare (~0.5877472E~38, ~0.31415927E1) = GREATER +compareReal (~0.5877472E~38, ~0.31415927E1) = GREATER +compare (~0.5877472E~38, ~0.27182817E1) = GREATER +compareReal (~0.5877472E~38, ~0.27182817E1) = GREATER +compare (~0.5877472E~38, ~0.123E1) = GREATER +compareReal (~0.5877472E~38, ~0.123E1) = GREATER +compare (~0.5877472E~38, ~0.123) = GREATER +compareReal (~0.5877472E~38, ~0.123) = GREATER +compare (~0.5877472E~38, ~0.123E~2) = GREATER +compareReal (~0.5877472E~38, ~0.123E~2) = GREATER +compare (~0.5877472E~38, ~0.11754944E~37) = GREATER +compareReal (~0.5877472E~38, ~0.11754944E~37) = GREATER +compare (~0.5877472E~38, ~0.5877472E~38) = EQUAL +compareReal (~0.5877472E~38, ~0.5877472E~38) = EQUAL +compare (~0.5877472E~38, ~0.1E~44) = LESS +compareReal (~0.5877472E~38, ~0.1E~44) = LESS +compare (~0.5877472E~38, ~0.0) = LESS +compareReal (~0.5877472E~38, ~0.0) = LESS +compare (~0.1E~44, 0.34028235E39) = LESS +compareReal (~0.1E~44, 0.34028235E39) = LESS +compare (~0.1E~44, 0.17014117E39) = LESS +compareReal (~0.1E~44, 0.17014117E39) = LESS +compare (~0.1E~44, 0.123E4) = LESS +compareReal (~0.1E~44, 0.123E4) = LESS +compare (~0.1E~44, 0.123E2) = LESS +compareReal (~0.1E~44, 0.123E2) = LESS +compare (~0.1E~44, 0.31415927E1) = LESS +compareReal (~0.1E~44, 0.31415927E1) = LESS +compare (~0.1E~44, 0.27182817E1) = LESS +compareReal (~0.1E~44, 0.27182817E1) = LESS +compare (~0.1E~44, 0.123E1) = LESS +compareReal (~0.1E~44, 0.123E1) = LESS +compare (~0.1E~44, 0.123) = LESS +compareReal (~0.1E~44, 0.123) = LESS +compare (~0.1E~44, 0.123E~2) = LESS +compareReal (~0.1E~44, 0.123E~2) = LESS +compare (~0.1E~44, 0.11754944E~37) = LESS +compareReal (~0.1E~44, 0.11754944E~37) = LESS +compare (~0.1E~44, 0.5877472E~38) = LESS +compareReal (~0.1E~44, 0.5877472E~38) = LESS +compare (~0.1E~44, 0.1E~44) = LESS +compareReal (~0.1E~44, 0.1E~44) = LESS +compare (~0.1E~44, 0.0) = LESS +compareReal (~0.1E~44, 0.0) = LESS +compare (~0.1E~44, ~0.34028235E39) = GREATER +compareReal (~0.1E~44, ~0.34028235E39) = GREATER +compare (~0.1E~44, ~0.17014117E39) = GREATER +compareReal (~0.1E~44, ~0.17014117E39) = GREATER +compare (~0.1E~44, ~0.123E4) = GREATER +compareReal (~0.1E~44, ~0.123E4) = GREATER +compare (~0.1E~44, ~0.123E2) = GREATER +compareReal (~0.1E~44, ~0.123E2) = GREATER +compare (~0.1E~44, ~0.31415927E1) = GREATER +compareReal (~0.1E~44, ~0.31415927E1) = GREATER +compare (~0.1E~44, ~0.27182817E1) = GREATER +compareReal (~0.1E~44, ~0.27182817E1) = GREATER +compare (~0.1E~44, ~0.123E1) = GREATER +compareReal (~0.1E~44, ~0.123E1) = GREATER +compare (~0.1E~44, ~0.123) = GREATER +compareReal (~0.1E~44, ~0.123) = GREATER +compare (~0.1E~44, ~0.123E~2) = GREATER +compareReal (~0.1E~44, ~0.123E~2) = GREATER +compare (~0.1E~44, ~0.11754944E~37) = GREATER +compareReal (~0.1E~44, ~0.11754944E~37) = GREATER +compare (~0.1E~44, ~0.5877472E~38) = GREATER +compareReal (~0.1E~44, ~0.5877472E~38) = GREATER +compare (~0.1E~44, ~0.1E~44) = EQUAL +compareReal (~0.1E~44, ~0.1E~44) = EQUAL +compare (~0.1E~44, ~0.0) = LESS +compareReal (~0.1E~44, ~0.0) = LESS +compare (~0.0, 0.34028235E39) = LESS +compareReal (~0.0, 0.34028235E39) = LESS +compare (~0.0, 0.17014117E39) = LESS +compareReal (~0.0, 0.17014117E39) = LESS +compare (~0.0, 0.123E4) = LESS +compareReal (~0.0, 0.123E4) = LESS +compare (~0.0, 0.123E2) = LESS +compareReal (~0.0, 0.123E2) = LESS +compare (~0.0, 0.31415927E1) = LESS +compareReal (~0.0, 0.31415927E1) = LESS +compare (~0.0, 0.27182817E1) = LESS +compareReal (~0.0, 0.27182817E1) = LESS +compare (~0.0, 0.123E1) = LESS +compareReal (~0.0, 0.123E1) = LESS +compare (~0.0, 0.123) = LESS +compareReal (~0.0, 0.123) = LESS +compare (~0.0, 0.123E~2) = LESS +compareReal (~0.0, 0.123E~2) = LESS +compare (~0.0, 0.11754944E~37) = LESS +compareReal (~0.0, 0.11754944E~37) = LESS +compare (~0.0, 0.5877472E~38) = LESS +compareReal (~0.0, 0.5877472E~38) = LESS +compare (~0.0, 0.1E~44) = LESS +compareReal (~0.0, 0.1E~44) = LESS +compare (~0.0, 0.0) = EQUAL +compareReal (~0.0, 0.0) = EQUAL +compare (~0.0, ~0.34028235E39) = GREATER +compareReal (~0.0, ~0.34028235E39) = GREATER +compare (~0.0, ~0.17014117E39) = GREATER +compareReal (~0.0, ~0.17014117E39) = GREATER +compare (~0.0, ~0.123E4) = GREATER +compareReal (~0.0, ~0.123E4) = GREATER +compare (~0.0, ~0.123E2) = GREATER +compareReal (~0.0, ~0.123E2) = GREATER +compare (~0.0, ~0.31415927E1) = GREATER +compareReal (~0.0, ~0.31415927E1) = GREATER +compare (~0.0, ~0.27182817E1) = GREATER +compareReal (~0.0, ~0.27182817E1) = GREATER +compare (~0.0, ~0.123E1) = GREATER +compareReal (~0.0, ~0.123E1) = GREATER +compare (~0.0, ~0.123) = GREATER +compareReal (~0.0, ~0.123) = GREATER +compare (~0.0, ~0.123E~2) = GREATER +compareReal (~0.0, ~0.123E~2) = GREATER +compare (~0.0, ~0.11754944E~37) = GREATER +compareReal (~0.0, ~0.11754944E~37) = GREATER +compare (~0.0, ~0.5877472E~38) = GREATER +compareReal (~0.0, ~0.5877472E~38) = GREATER +compare (~0.0, ~0.1E~44) = GREATER +compareReal (~0.0, ~0.1E~44) = GREATER +compare (~0.0, ~0.0) = EQUAL +compareReal (~0.0, ~0.0) = EQUAL + +Testing abs + +Testing {from,to}ManExp +0.34028235E39 = 0.99999994 * 2^128 + = 0.34028235E39 +0.17014117E39 = 0.99999994 * 2^127 + = 0.17014117E39 +0.123E4 = 0.60058594 * 2^11 + = 0.123E4 +0.123E2 = 0.76875 * 2^4 + = 0.123E2 +0.31415927E1 = 0.7853982 * 2^2 + = 0.31415927E1 +0.27182817E1 = 0.67957044 * 2^2 + = 0.27182817E1 +0.123E1 = 0.615 * 2^1 + = 0.123E1 +0.123 = 0.984 * 2^~3 + = 0.123 +0.123E~2 = 0.62976 * 2^~9 + = 0.123E~2 +0.11754944E~37 = 0.5 * 2^~125 + = 0.11754944E~37 +0.0 = 0.0 * 2^0 + = 0.0 +~0.34028235E39 = ~0.99999994 * 2^128 + = ~0.34028235E39 +~0.17014117E39 = ~0.99999994 * 2^127 + = ~0.17014117E39 +~0.123E4 = ~0.60058594 * 2^11 + = ~0.123E4 +~0.123E2 = ~0.76875 * 2^4 + = ~0.123E2 +~0.31415927E1 = ~0.7853982 * 2^2 + = ~0.31415927E1 +~0.27182817E1 = ~0.67957044 * 2^2 + = ~0.27182817E1 +~0.123E1 = ~0.615 * 2^1 + = ~0.123E1 +~0.123 = ~0.984 * 2^~3 + = ~0.123 +~0.123E~2 = ~0.62976 * 2^~9 + = ~0.123E~2 +~0.11754944E~37 = ~0.5 * 2^~125 + = ~0.11754944E~37 +~0.0 = ~0.0 * 2^0 + = ~0.0 + +Testing split + +Testing {from,to}Large + +Testing Real64 + +Testing fmt +0.17976931348623157E309 +1.797693E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 +1.79769313486E308 +2E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 +2E308 +1.7976931349E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 +1.797693135E308 +0.8988465674311579E308 +8.988466E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +8.98846567431E307 +9E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 +9E307 +8.9884656743E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 +8.988465674E307 +0.123E4 +1.230000E3 +1230.000000 +1230 +1E3 +1230 +1E3 +1.2300000000E3 +1230.0000000000 +1230 +0.123E2 +1.230000E1 +12.300000 +12.3 +1E1 +12 +10 +1.2300000000E1 +12.3000000000 +12.3 +0.3141592653589793E1 +3.141593E0 +3.141593 +3.14159265359 +3E0 +3 +3 +3.1415926536E0 +3.1415926536 +3.141592654 +0.2718281828459045E1 +2.718282E0 +2.718282 +2.71828182846 +3E0 +3 +3 +2.7182818285E0 +2.7182818285 +2.718281828 +0.123E1 +1.230000E0 +1.230000 +1.23 +1E0 1 1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf +1.2300000000E0 +1.2300000000 +1.23 +0.123 +1.230000E~1 +0.123000 +0.123 +1E~1 0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195423 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136524 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342376947 -1.856761098 -nan -nan -~0.9424887896 -~1.564468503 -nan -~2.819815874 -~0.8425793052 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240715 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 +0.1 +1.2300000000E~1 +0.1230000000 +0.123 +0.123E~2 +1.230000E~3 +0.001230 +0.00123 +1E~3 0 +1E~3 +1.2300000000E~3 +0.0012300000 +0.00123 +0.22250738585072014E~307 +2.225074E~308 +0.000000 +2.22507385851E~308 +2E~308 0 -1 -1 -1 -~inf -~inf +2E~308 +2.2250738585E~308 +0.0000000000 +2.225073859E~308 +0.11125369292536007E~307 +1.112537E~308 +0.000000 +1.11253692925E~308 +1E~308 0 +1E~308 +1.1125369293E~308 +0.0000000000 +1.112536929E~308 +0.5E~323 +4.940656E~324 +0.000000 +4.94065645841E~324 +5E~324 0 +5E~324 +4.9406564584E~324 +0.0000000000 +4.940656458E~324 +0.0 +0.000000E0 +0.000000 0 +0E0 0 0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf +0.0000000000E0 +0.0000000000 0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 +~0.17976931348623157E309 +~1.797693E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 +~1.79769313486E308 +~2E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 +~2E308 +~1.7976931349E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 +~1.797693135E308 +~0.8988465674311579E308 +~8.988466E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +~8.98846567431E307 +~9E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 +~9E307 +~8.9884656743E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 +~8.988465674E307 ~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 +~1.230000E3 +~1230.000000 +~1230 +~1E3 +~1230 +~1E3 +~1.2300000000E3 +~1230.0000000000 +~1230 ~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 +~1.230000E1 +~12.300000 +~12.3 +~1E1 +~12 +~10 +~1.2300000000E1 +~12.3000000000 +~12.3 +~0.3141592653589793E1 +~3.141593E0 +~3.141593 +~3.14159265359 +~3E0 +~3 +~3 +~3.1415926536E0 +~3.1415926536 +~3.141592654 +~0.2718281828459045E1 +~2.718282E0 +~2.718282 +~2.71828182846 +~3E0 +~3 +~3 +~2.7182818285E0 +~2.7182818285 +~2.718281828 ~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 +~1.230000E0 +~1.230000 +~1.23 +~1E0 +~1 +~1 +~1.2300000000E0 +~1.2300000000 +~1.23 ~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.5877472E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754942E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 +~1.230000E~1 +~0.123000 +~0.123 +~1E~1 +~0 +~0.1 +~1.2300000000E~1 +~0.1230000000 ~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 ~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.5877472E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754942E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.5877472E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.5877472E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754942E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754942E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 +~1.230000E~3 +~0.001230 +~0.00123 +~1E~3 +~0 +~1E~3 +~1.2300000000E~3 +~0.0012300000 +~0.00123 +~0.22250738585072014E~307 +~2.225074E~308 +~0.000000 +~2.22507385851E~308 +~2E~308 +~0 +~2E~308 +~2.2250738585E~308 +~0.0000000000 +~2.225073859E~308 +~0.11125369292536007E~307 +~1.112537E~308 +~0.000000 +~1.11253692925E~308 +~1E~308 +~0 +~1E~308 +~1.1125369293E~308 +~0.0000000000 +~1.112536929E~308 +~0.5E~323 +~4.940656E~324 +~0.000000 +~4.94065645841E~324 +~5E~324 +~0 +~5E~324 +~4.9406564584E~324 +~0.0000000000 +~4.940656458E~324 ~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.5877472E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754942E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.5877472E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754942E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.5877472E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.5877472E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754942E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754942E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false +0.000000E0 +0.000000 +0 +0E0 +0 +0 +0.0000000000E0 +0.0000000000 +0 + +Testing scan +0.17976931348623157E309 0.17976931348623157E309 +0.8988465674311579E308 0.8988465674311579E308 +0.123E4 0.123E4 +0.123E2 0.123E2 +0.3141592653589793E1 0.3141592653589793E1 +0.2718281828459045E1 0.2718281828459045E1 +0.123E1 0.123E1 +0.123 0.123 +0.123E~2 0.123E~2 +0.22250738585072014E~307 0.22250738585072014E~307 +0.11125369292536007E~307 0.11125369292536007E~307 +0.5E~323 0.5E~323 +0.0 0.0 +~0.17976931348623157E309 ~0.17976931348623157E309 +~0.8988465674311579E308 ~0.8988465674311579E308 +~0.123E4 ~0.123E4 +~0.123E2 ~0.123E2 +~0.3141592653589793E1 ~0.3141592653589793E1 +~0.2718281828459045E1 ~0.2718281828459045E1 +~0.123E1 ~0.123E1 +~0.123 ~0.123 +~0.123E~2 ~0.123E~2 +~0.22250738585072014E~307 ~0.22250738585072014E~307 +~0.11125369292536007E~307 ~0.11125369292536007E~307 +~0.5E~323 ~0.5E~323 +~0.0 ~0.0 +inf inf +~inf ~inf +nan nan +inf inf + +Testing checkFloat + +Testing class, isFinite, isNan, isNormal +0.17976931348623157E309 normal + isFinite = true isNan = false isNormal = true +0.8988465674311579E308 normal + isFinite = true isNan = false isNormal = true +0.123E4 normal + isFinite = true isNan = false isNormal = true +0.123E2 normal + isFinite = true isNan = false isNormal = true +0.3141592653589793E1 normal + isFinite = true isNan = false isNormal = true +0.2718281828459045E1 normal + isFinite = true isNan = false isNormal = true +0.123E1 normal + isFinite = true isNan = false isNormal = true +0.123 normal + isFinite = true isNan = false isNormal = true +0.123E~2 normal + isFinite = true isNan = false isNormal = true +0.22250738585072014E~307 normal + isFinite = true isNan = false isNormal = true +0.11125369292536007E~307 subnormal + isFinite = true isNan = false isNormal = false +0.5E~323 subnormal + isFinite = true isNan = false isNormal = false +0.0 zero + isFinite = true isNan = false isNormal = false +~0.17976931348623157E309 normal + isFinite = true isNan = false isNormal = true +~0.8988465674311579E308 normal + isFinite = true isNan = false isNormal = true +~0.123E4 normal + isFinite = true isNan = false isNormal = true +~0.123E2 normal + isFinite = true isNan = false isNormal = true +~0.3141592653589793E1 normal + isFinite = true isNan = false isNormal = true +~0.2718281828459045E1 normal + isFinite = true isNan = false isNormal = true +~0.123E1 normal + isFinite = true isNan = false isNormal = true +~0.123 normal + isFinite = true isNan = false isNormal = true +~0.123E~2 normal + isFinite = true isNan = false isNormal = true +~0.22250738585072014E~307 normal + isFinite = true isNan = false isNormal = true +~0.11125369292536007E~307 subnormal + isFinite = true isNan = false isNormal = false +~0.5E~323 subnormal + isFinite = true isNan = false isNormal = false +~0.0 zero + isFinite = true isNan = false isNormal = false +inf inf + isFinite = false isNan = false isNormal = false +~inf inf + isFinite = false isNan = false isNormal = false +nan nan + isFinite = false isNan = true isNormal = false +inf inf + isFinite = false isNan = false isNormal = false + +Testing maxFinite, minPos, minNormalPos +1.79769313486E308 +1.79769313486E308 true -false -false -false -false +4.94065645841E~324 +4.94065645841E~324 true +2.22507385851E~308 +2.22507385851E~308 true +Testring fromString + +Testing {from,to}Decimal +inf inf true +inf inf true +~inf ~inf true +~inf ~inf true +inf inf true +inf inf true +~inf ~inf true +~inf ~inf true +nan nan true +nan nan true +~nan nan true +~nan nan true +0.0 0.0 true +0.0 0.0 true +0.0 0.0 true +~0.0 ~0.0 true +0.15E2 0.15E2 true +0.15E1 0.15E1 true +~0.15E2 ~0.15E2 true +0.15E2 0.15E2 true +0.15E~2 0.15E~2 true +0.15E~2 0.15E~2 true +0.15E~2 0.15E~2 true +0.12E1000 inf false +~0.12E1000 ~inf false +0.1E~998 0.0 false +~0.1E~998 ~0.0 false +inf inf true + +Testing {from,to}LargeInt +0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 +0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 +0.123E4 1230 0.123E4 +0.123E2 12 0.12E2 +0.3141592653589793E1 3 0.3E1 +0.2718281828459045E1 2 0.2E1 +0.123E1 1 0.1E1 +0.123 0 0.0 +0.123E~2 0 0.0 +0.22250738585072014E~307 0 0.0 +0.11125369292536007E~307 0 0.0 +0.5E~323 0 0.0 +0.0 0 0.0 +~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 +~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 +~0.123E4 ~1230 ~0.123E4 +~0.123E2 ~13 ~0.13E2 +~0.3141592653589793E1 ~4 ~0.4E1 +~0.2718281828459045E1 ~3 ~0.3E1 +~0.123E1 ~2 ~0.2E1 +~0.123 ~1 ~0.1E1 +~0.123E~2 ~1 ~0.1E1 +~0.22250738585072014E~307 ~1 ~0.1E1 +~0.11125369292536007E~307 ~1 ~0.1E1 +~0.5E~323 ~1 ~0.1E1 +~0.0 0 0.0 +nearest 0.0 0 +nearest ~0.0 0 +nearest 0.1E13 1000000000000 +nearest ~0.1E13 ~1000000000000 +nearest 0.25 0 +nearest ~0.25 0 +nearest 0.100000000000025E13 1000000000000 +nearest ~0.99999999999975E12 ~1000000000000 +nearest 0.5 0 +nearest ~0.5 0 +nearest 0.10000000000005E13 1000000000000 +nearest ~0.9999999999995E12 ~1000000000000 +nearest 0.75 1 +nearest ~0.75 ~1 +nearest 0.100000000000075E13 1000000000001 +nearest ~0.99999999999925E12 ~999999999999 +nearest 0.1E1 1 +nearest ~0.1E1 ~1 +nearest 0.1000000000001E13 1000000000001 +nearest ~0.999999999999E12 ~999999999999 +nearest 0.125E1 1 +nearest ~0.125E1 ~1 +nearest 0.100000000000125E13 1000000000001 +nearest ~0.99999999999875E12 ~999999999999 +nearest 0.15E1 2 +nearest ~0.15E1 ~2 +nearest 0.10000000000015E13 1000000000002 +nearest ~0.9999999999985E12 ~999999999998 +nearest 0.175E1 2 +nearest ~0.175E1 ~2 +nearest 0.100000000000175E13 1000000000002 +nearest ~0.99999999999825E12 ~999999999998 +nearest 0.2E1 2 +nearest ~0.2E1 ~2 +nearest 0.1000000000002E13 1000000000002 +nearest ~0.999999999998E12 ~999999999998 +nearest 0.25E1 2 +nearest ~0.25E1 ~2 +nearest 0.10000000000025E13 1000000000002 +nearest ~0.9999999999975E12 ~999999999998 +nearest 0.3E1 3 +nearest ~0.3E1 ~3 +nearest 0.1000000000003E13 1000000000003 +nearest ~0.999999999997E12 ~999999999997 +neginf 0.0 0 +neginf ~0.0 0 +neginf 0.1E13 1000000000000 +neginf ~0.1E13 ~1000000000000 +neginf 0.25 0 +neginf ~0.25 ~1 +neginf 0.100000000000025E13 1000000000000 +neginf ~0.99999999999975E12 ~1000000000000 +neginf 0.5 0 +neginf ~0.5 ~1 +neginf 0.10000000000005E13 1000000000000 +neginf ~0.9999999999995E12 ~1000000000000 +neginf 0.75 0 +neginf ~0.75 ~1 +neginf 0.100000000000075E13 1000000000000 +neginf ~0.99999999999925E12 ~1000000000000 +neginf 0.1E1 1 +neginf ~0.1E1 ~1 +neginf 0.1000000000001E13 1000000000001 +neginf ~0.999999999999E12 ~999999999999 +neginf 0.125E1 1 +neginf ~0.125E1 ~2 +neginf 0.100000000000125E13 1000000000001 +neginf ~0.99999999999875E12 ~999999999999 +neginf 0.15E1 1 +neginf ~0.15E1 ~2 +neginf 0.10000000000015E13 1000000000001 +neginf ~0.9999999999985E12 ~999999999999 +neginf 0.175E1 1 +neginf ~0.175E1 ~2 +neginf 0.100000000000175E13 1000000000001 +neginf ~0.99999999999825E12 ~999999999999 +neginf 0.2E1 2 +neginf ~0.2E1 ~2 +neginf 0.1000000000002E13 1000000000002 +neginf ~0.999999999998E12 ~999999999998 +neginf 0.25E1 2 +neginf ~0.25E1 ~3 +neginf 0.10000000000025E13 1000000000002 +neginf ~0.9999999999975E12 ~999999999998 +neginf 0.3E1 3 +neginf ~0.3E1 ~3 +neginf 0.1000000000003E13 1000000000003 +neginf ~0.999999999997E12 ~999999999997 +posinf 0.0 0 +posinf ~0.0 0 +posinf 0.1E13 1000000000000 +posinf ~0.1E13 ~1000000000000 +posinf 0.25 1 +posinf ~0.25 0 +posinf 0.100000000000025E13 1000000000001 +posinf ~0.99999999999975E12 ~999999999999 +posinf 0.5 1 +posinf ~0.5 0 +posinf 0.10000000000005E13 1000000000001 +posinf ~0.9999999999995E12 ~999999999999 +posinf 0.75 1 +posinf ~0.75 0 +posinf 0.100000000000075E13 1000000000001 +posinf ~0.99999999999925E12 ~999999999999 +posinf 0.1E1 1 +posinf ~0.1E1 ~1 +posinf 0.1000000000001E13 1000000000001 +posinf ~0.999999999999E12 ~999999999999 +posinf 0.125E1 2 +posinf ~0.125E1 ~1 +posinf 0.100000000000125E13 1000000000002 +posinf ~0.99999999999875E12 ~999999999998 +posinf 0.15E1 2 +posinf ~0.15E1 ~1 +posinf 0.10000000000015E13 1000000000002 +posinf ~0.9999999999985E12 ~999999999998 +posinf 0.175E1 2 +posinf ~0.175E1 ~1 +posinf 0.100000000000175E13 1000000000002 +posinf ~0.99999999999825E12 ~999999999998 +posinf 0.2E1 2 +posinf ~0.2E1 ~2 +posinf 0.1000000000002E13 1000000000002 +posinf ~0.999999999998E12 ~999999999998 +posinf 0.25E1 3 +posinf ~0.25E1 ~2 +posinf 0.10000000000025E13 1000000000003 +posinf ~0.9999999999975E12 ~999999999997 +posinf 0.3E1 3 +posinf ~0.3E1 ~3 +posinf 0.1000000000003E13 1000000000003 +posinf ~0.999999999997E12 ~999999999997 +zero 0.0 0 +zero ~0.0 0 +zero 0.1E13 1000000000000 +zero ~0.1E13 ~1000000000000 +zero 0.25 0 +zero ~0.25 0 +zero 0.100000000000025E13 1000000000000 +zero ~0.99999999999975E12 ~999999999999 +zero 0.5 0 +zero ~0.5 0 +zero 0.10000000000005E13 1000000000000 +zero ~0.9999999999995E12 ~999999999999 +zero 0.75 0 +zero ~0.75 0 +zero 0.100000000000075E13 1000000000000 +zero ~0.99999999999925E12 ~999999999999 +zero 0.1E1 1 +zero ~0.1E1 ~1 +zero 0.1000000000001E13 1000000000001 +zero ~0.999999999999E12 ~999999999999 +zero 0.125E1 1 +zero ~0.125E1 ~1 +zero 0.100000000000125E13 1000000000001 +zero ~0.99999999999875E12 ~999999999998 +zero 0.15E1 1 +zero ~0.15E1 ~1 +zero 0.10000000000015E13 1000000000001 +zero ~0.9999999999985E12 ~999999999998 +zero 0.175E1 1 +zero ~0.175E1 ~1 +zero 0.100000000000175E13 1000000000001 +zero ~0.99999999999825E12 ~999999999998 +zero 0.2E1 2 +zero ~0.2E1 ~2 +zero 0.1000000000002E13 1000000000002 +zero ~0.999999999998E12 ~999999999998 +zero 0.25E1 2 +zero ~0.25E1 ~2 +zero 0.10000000000025E13 1000000000002 +zero ~0.9999999999975E12 ~999999999997 +zero 0.3E1 3 +zero ~0.3E1 ~3 +zero 0.1000000000003E13 1000000000003 +zero ~0.999999999997E12 ~999999999997 + +Testing fromInt + +Testing toInt + +Testing ceil,floor,round,trunc + +Testing copySign, sameSign, sign, signBit + +Testing max, min + +Testing Real.{~,*,+,-,/,nextAfter,rem} +~ (0.17976931348623157E309) = ~0.17976931348623157E309 +~ (0.8988465674311579E308) = ~0.8988465674311579E308 +~ (0.123E4) = ~0.123E4 +~ (0.123E2) = ~0.123E2 +~ (0.3141592653589793E1) = ~0.3141592653589793E1 +~ (0.2718281828459045E1) = ~0.2718281828459045E1 +~ (0.123E1) = ~0.123E1 +~ (0.123) = ~0.123 +~ (0.123E~2) = ~0.123E~2 +~ (0.22250738585072014E~307) = ~0.22250738585072014E~307 +~ (0.11125369292536007E~307) = ~0.11125369292536007E~307 +~ (0.5E~323) = ~0.5E~323 +~ (0.0) = ~0.0 +~ (~0.17976931348623157E309) = 0.17976931348623157E309 +~ (~0.8988465674311579E308) = 0.8988465674311579E308 +~ (~0.123E4) = 0.123E4 +~ (~0.123E2) = 0.123E2 +~ (~0.3141592653589793E1) = 0.3141592653589793E1 +~ (~0.2718281828459045E1) = 0.2718281828459045E1 +~ (~0.123E1) = 0.123E1 +~ (~0.123) = 0.123 +~ (~0.123E~2) = 0.123E~2 +~ (~0.22250738585072014E~307) = 0.22250738585072014E~307 +~ (~0.11125369292536007E~307) = 0.11125369292536007E~307 +~ (~0.5E~323) = 0.5E~323 +~ (~0.0) = 0.0 +~ (inf) = ~inf +~ (~inf) = inf +~ (nan) = nan +~ (inf) = ~inf +* (0.17976931348623157E309, 0.17976931348623157E309) = inf ++ (0.17976931348623157E309, 0.17976931348623157E309) = inf +- (0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +/ (0.17976931348623157E309, 0.17976931348623157E309) = 0.1E1 +nextAfter (0.17976931348623157E309, 0.17976931348623157E309) = 0.17976931348623157E309 +rem (0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +* (0.17976931348623157E309, 0.8988465674311579E308) = inf ++ (0.17976931348623157E309, 0.8988465674311579E308) = inf +- (0.17976931348623157E309, 0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.17976931348623157E309, 0.8988465674311579E308) = 0.2E1 +nextAfter (0.17976931348623157E309, 0.8988465674311579E308) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.8988465674311579E308) = 0.0 +* (0.17976931348623157E309, 0.123E4) = inf ++ (0.17976931348623157E309, 0.123E4) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E4) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E4) = 0.1461539134034403E306 +nextAfter (0.17976931348623157E309, 0.123E4) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E4) = 0.0 +* (0.17976931348623157E309, 0.123E2) = inf ++ (0.17976931348623157E309, 0.123E2) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E2) = 0.1461539134034403E308 +nextAfter (0.17976931348623157E309, 0.123E2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E2) = 0.0 +* (0.17976931348623157E309, 0.3141592653589793E1) = inf ++ (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.3141592653589793E1) = 0.5722234971514056E308 +nextAfter (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.3141592653589793E1) = 0.0 +* (0.17976931348623157E309, 0.2718281828459045E1) = inf ++ (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.2718281828459045E1) = 0.661334345850887E308 +nextAfter (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.2718281828459045E1) = 0.199584030953472E293 +* (0.17976931348623157E309, 0.123E1) = inf ++ (0.17976931348623157E309, 0.123E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E1) = 0.1461539134034403E309 +nextAfter (0.17976931348623157E309, 0.123E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E1) = 0.199584030953472E293 +* (0.17976931348623157E309, 0.123) = 0.22111625558806483E308 ++ (0.17976931348623157E309, 0.123) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123) = inf +nextAfter (0.17976931348623157E309, 0.123) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123) = ~inf +* (0.17976931348623157E309, 0.123E~2) = 0.2211162555880648E306 ++ (0.17976931348623157E309, 0.123E~2) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E~2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E~2) = inf +nextAfter (0.17976931348623157E309, 0.123E~2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E~2) = ~inf +* (0.17976931348623157E309, 0.22250738585072014E~307) = 0.39999999999999996E1 ++ (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.22250738585072014E~307) = inf +nextAfter (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.22250738585072014E~307) = ~inf +* (0.17976931348623157E309, 0.11125369292536007E~307) = 0.19999999999999998E1 ++ (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.11125369292536007E~307) = inf +nextAfter (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.11125369292536007E~307) = ~inf +* (0.17976931348623157E309, 0.5E~323) = 0.8881784197001251E~15 ++ (0.17976931348623157E309, 0.5E~323) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.5E~323) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.5E~323) = inf +nextAfter (0.17976931348623157E309, 0.5E~323) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.5E~323) = ~inf +* (0.17976931348623157E309, 0.0) = 0.0 ++ (0.17976931348623157E309, 0.0) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.0) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.0) = inf +nextAfter (0.17976931348623157E309, 0.0) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.0) = nan +* (0.17976931348623157E309, ~0.17976931348623157E309) = ~inf ++ (0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +- (0.17976931348623157E309, ~0.17976931348623157E309) = inf +/ (0.17976931348623157E309, ~0.17976931348623157E309) = ~0.1E1 +nextAfter (0.17976931348623157E309, ~0.17976931348623157E309) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +* (0.17976931348623157E309, ~0.8988465674311579E308) = ~inf ++ (0.17976931348623157E309, ~0.8988465674311579E308) = 0.8988465674311579E308 +- (0.17976931348623157E309, ~0.8988465674311579E308) = inf +/ (0.17976931348623157E309, ~0.8988465674311579E308) = ~0.2E1 +nextAfter (0.17976931348623157E309, ~0.8988465674311579E308) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.8988465674311579E308) = 0.0 +* (0.17976931348623157E309, ~0.123E4) = ~inf ++ (0.17976931348623157E309, ~0.123E4) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E4) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E4) = ~0.1461539134034403E306 +nextAfter (0.17976931348623157E309, ~0.123E4) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E4) = 0.0 +* (0.17976931348623157E309, ~0.123E2) = ~inf ++ (0.17976931348623157E309, ~0.123E2) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E2) = ~0.1461539134034403E308 +nextAfter (0.17976931348623157E309, ~0.123E2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E2) = 0.0 +* (0.17976931348623157E309, ~0.3141592653589793E1) = ~inf ++ (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.3141592653589793E1) = ~0.5722234971514056E308 +nextAfter (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.3141592653589793E1) = 0.0 +* (0.17976931348623157E309, ~0.2718281828459045E1) = ~inf ++ (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.2718281828459045E1) = ~0.661334345850887E308 +nextAfter (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.2718281828459045E1) = 0.199584030953472E293 +* (0.17976931348623157E309, ~0.123E1) = ~inf ++ (0.17976931348623157E309, ~0.123E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E1) = ~0.1461539134034403E309 +nextAfter (0.17976931348623157E309, ~0.123E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E1) = 0.199584030953472E293 +* (0.17976931348623157E309, ~0.123) = ~0.22111625558806483E308 ++ (0.17976931348623157E309, ~0.123) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123) = ~inf +nextAfter (0.17976931348623157E309, ~0.123) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123) = ~inf +* (0.17976931348623157E309, ~0.123E~2) = ~0.2211162555880648E306 ++ (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E~2) = ~inf +nextAfter (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E~2) = ~inf +* (0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.39999999999999996E1 ++ (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.22250738585072014E~307) = ~inf +nextAfter (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.22250738585072014E~307) = ~inf +* (0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.19999999999999998E1 ++ (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.11125369292536007E~307) = ~inf +nextAfter (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.11125369292536007E~307) = ~inf +* (0.17976931348623157E309, ~0.5E~323) = ~0.8881784197001251E~15 ++ (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.5E~323) = ~inf +nextAfter (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.5E~323) = ~inf +* (0.17976931348623157E309, ~0.0) = ~0.0 ++ (0.17976931348623157E309, ~0.0) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.0) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.0) = ~inf +nextAfter (0.17976931348623157E309, ~0.0) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.0) = nan +* (0.17976931348623157E309, inf) = inf ++ (0.17976931348623157E309, inf) = inf +- (0.17976931348623157E309, inf) = ~inf +/ (0.17976931348623157E309, inf) = 0.0 +nextAfter (0.17976931348623157E309, inf) = inf +rem (0.17976931348623157E309, inf) = 0.17976931348623157E309 +* (0.17976931348623157E309, ~inf) = ~inf ++ (0.17976931348623157E309, ~inf) = ~inf +- (0.17976931348623157E309, ~inf) = inf +/ (0.17976931348623157E309, ~inf) = ~0.0 +nextAfter (0.17976931348623157E309, ~inf) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~inf) = 0.17976931348623157E309 +* (0.17976931348623157E309, nan) = nan ++ (0.17976931348623157E309, nan) = nan +- (0.17976931348623157E309, nan) = nan +/ (0.17976931348623157E309, nan) = nan +nextAfter (0.17976931348623157E309, nan) = nan +rem (0.17976931348623157E309, nan) = nan +* (0.17976931348623157E309, inf) = inf ++ (0.17976931348623157E309, inf) = inf +- (0.17976931348623157E309, inf) = ~inf +/ (0.17976931348623157E309, inf) = 0.0 +nextAfter (0.17976931348623157E309, inf) = inf +rem (0.17976931348623157E309, inf) = 0.17976931348623157E309 +* (0.8988465674311579E308, 0.17976931348623157E309) = inf ++ (0.8988465674311579E308, 0.17976931348623157E309) = inf +- (0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311579E308 +/ (0.8988465674311579E308, 0.17976931348623157E309) = 0.5 +nextAfter (0.8988465674311579E308, 0.17976931348623157E309) = 0.898846567431158E308 +rem (0.8988465674311579E308, 0.17976931348623157E309) = 0.8988465674311579E308 +* (0.8988465674311579E308, 0.8988465674311579E308) = inf ++ (0.8988465674311579E308, 0.8988465674311579E308) = 0.17976931348623157E309 +- (0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +/ (0.8988465674311579E308, 0.8988465674311579E308) = 0.1E1 +nextAfter (0.8988465674311579E308, 0.8988465674311579E308) = 0.8988465674311579E308 +rem (0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +* (0.8988465674311579E308, 0.123E4) = inf ++ (0.8988465674311579E308, 0.123E4) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E4) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E4) = 0.7307695670172015E305 +nextAfter (0.8988465674311579E308, 0.123E4) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E4) = 0.0 +* (0.8988465674311579E308, 0.123E2) = inf ++ (0.8988465674311579E308, 0.123E2) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E2) = 0.7307695670172014E307 +nextAfter (0.8988465674311579E308, 0.123E2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E2) = 0.0 +* (0.8988465674311579E308, 0.3141592653589793E1) = inf ++ (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.3141592653589793E1) = 0.2861117485757028E308 +nextAfter (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.3141592653589793E1) = 0.0 +* (0.8988465674311579E308, 0.2718281828459045E1) = inf ++ (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.2718281828459045E1) = 0.3306671729254435E308 +nextAfter (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.2718281828459045E1) = 0.99792015476736E292 +* (0.8988465674311579E308, 0.123E1) = 0.1105581277940324E309 ++ (0.8988465674311579E308, 0.123E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E1) = 0.7307695670172015E308 +nextAfter (0.8988465674311579E308, 0.123E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E1) = 0.99792015476736E292 +* (0.8988465674311579E308, 0.123) = 0.11055812779403241E308 ++ (0.8988465674311579E308, 0.123) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123) = inf +nextAfter (0.8988465674311579E308, 0.123) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123) = ~inf +* (0.8988465674311579E308, 0.123E~2) = 0.1105581277940324E306 ++ (0.8988465674311579E308, 0.123E~2) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E~2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E~2) = inf +nextAfter (0.8988465674311579E308, 0.123E~2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E~2) = ~inf +* (0.8988465674311579E308, 0.22250738585072014E~307) = 0.19999999999999998E1 ++ (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.22250738585072014E~307) = inf +nextAfter (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.22250738585072014E~307) = ~inf +* (0.8988465674311579E308, 0.11125369292536007E~307) = 0.9999999999999999 ++ (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.11125369292536007E~307) = inf +nextAfter (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.11125369292536007E~307) = ~inf +* (0.8988465674311579E308, 0.5E~323) = 0.44408920985006257E~15 ++ (0.8988465674311579E308, 0.5E~323) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.5E~323) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.5E~323) = inf +nextAfter (0.8988465674311579E308, 0.5E~323) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.5E~323) = ~inf +* (0.8988465674311579E308, 0.0) = 0.0 ++ (0.8988465674311579E308, 0.0) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.0) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.0) = inf +nextAfter (0.8988465674311579E308, 0.0) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.0) = nan +* (0.8988465674311579E308, ~0.17976931348623157E309) = ~inf ++ (0.8988465674311579E308, ~0.17976931348623157E309) = ~0.8988465674311579E308 +- (0.8988465674311579E308, ~0.17976931348623157E309) = inf +/ (0.8988465674311579E308, ~0.17976931348623157E309) = ~0.5 +nextAfter (0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311579E308 +* (0.8988465674311579E308, ~0.8988465674311579E308) = ~inf ++ (0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +- (0.8988465674311579E308, ~0.8988465674311579E308) = 0.17976931348623157E309 +/ (0.8988465674311579E308, ~0.8988465674311579E308) = ~0.1E1 +nextAfter (0.8988465674311579E308, ~0.8988465674311579E308) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +* (0.8988465674311579E308, ~0.123E4) = ~inf ++ (0.8988465674311579E308, ~0.123E4) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E4) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E4) = ~0.7307695670172015E305 +nextAfter (0.8988465674311579E308, ~0.123E4) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E4) = 0.0 +* (0.8988465674311579E308, ~0.123E2) = ~inf ++ (0.8988465674311579E308, ~0.123E2) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E2) = ~0.7307695670172014E307 +nextAfter (0.8988465674311579E308, ~0.123E2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E2) = 0.0 +* (0.8988465674311579E308, ~0.3141592653589793E1) = ~inf ++ (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.3141592653589793E1) = ~0.2861117485757028E308 +nextAfter (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.3141592653589793E1) = 0.0 +* (0.8988465674311579E308, ~0.2718281828459045E1) = ~inf ++ (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.2718281828459045E1) = ~0.3306671729254435E308 +nextAfter (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.2718281828459045E1) = 0.99792015476736E292 +* (0.8988465674311579E308, ~0.123E1) = ~0.1105581277940324E309 ++ (0.8988465674311579E308, ~0.123E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E1) = ~0.7307695670172015E308 +nextAfter (0.8988465674311579E308, ~0.123E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E1) = 0.99792015476736E292 +* (0.8988465674311579E308, ~0.123) = ~0.11055812779403241E308 ++ (0.8988465674311579E308, ~0.123) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123) = ~inf +nextAfter (0.8988465674311579E308, ~0.123) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123) = ~inf +* (0.8988465674311579E308, ~0.123E~2) = ~0.1105581277940324E306 ++ (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E~2) = ~inf +nextAfter (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E~2) = ~inf +* (0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.19999999999999998E1 ++ (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.22250738585072014E~307) = ~inf +nextAfter (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.22250738585072014E~307) = ~inf +* (0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.9999999999999999 ++ (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.11125369292536007E~307) = ~inf +nextAfter (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.11125369292536007E~307) = ~inf +* (0.8988465674311579E308, ~0.5E~323) = ~0.44408920985006257E~15 ++ (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.5E~323) = ~inf +nextAfter (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.5E~323) = ~inf +* (0.8988465674311579E308, ~0.0) = ~0.0 ++ (0.8988465674311579E308, ~0.0) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.0) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.0) = ~inf +nextAfter (0.8988465674311579E308, ~0.0) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.0) = nan +* (0.8988465674311579E308, inf) = inf ++ (0.8988465674311579E308, inf) = inf +- (0.8988465674311579E308, inf) = ~inf +/ (0.8988465674311579E308, inf) = 0.0 +nextAfter (0.8988465674311579E308, inf) = 0.898846567431158E308 +rem (0.8988465674311579E308, inf) = 0.8988465674311579E308 +* (0.8988465674311579E308, ~inf) = ~inf ++ (0.8988465674311579E308, ~inf) = ~inf +- (0.8988465674311579E308, ~inf) = inf +/ (0.8988465674311579E308, ~inf) = ~0.0 +nextAfter (0.8988465674311579E308, ~inf) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~inf) = 0.8988465674311579E308 +* (0.8988465674311579E308, nan) = nan ++ (0.8988465674311579E308, nan) = nan +- (0.8988465674311579E308, nan) = nan +/ (0.8988465674311579E308, nan) = nan +nextAfter (0.8988465674311579E308, nan) = nan +rem (0.8988465674311579E308, nan) = nan +* (0.8988465674311579E308, inf) = inf ++ (0.8988465674311579E308, inf) = inf +- (0.8988465674311579E308, inf) = ~inf +/ (0.8988465674311579E308, inf) = 0.0 +nextAfter (0.8988465674311579E308, inf) = 0.898846567431158E308 +rem (0.8988465674311579E308, inf) = 0.8988465674311579E308 +* (0.123E4, 0.17976931348623157E309) = inf ++ (0.123E4, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E4, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E4, 0.17976931348623157E309) = 0.6842102114909646E~305 +nextAfter (0.123E4, 0.17976931348623157E309) = 0.12300000000000002E4 +rem (0.123E4, 0.17976931348623157E309) = 0.123E4 +* (0.123E4, 0.8988465674311579E308) = inf ++ (0.123E4, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E4, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E4, 0.8988465674311579E308) = 0.1368420422981929E~304 +nextAfter (0.123E4, 0.8988465674311579E308) = 0.12300000000000002E4 +rem (0.123E4, 0.8988465674311579E308) = 0.123E4 +* (0.123E4, 0.123E4) = 0.15129E7 ++ (0.123E4, 0.123E4) = 0.246E4 +- (0.123E4, 0.123E4) = 0.0 +/ (0.123E4, 0.123E4) = 0.1E1 +nextAfter (0.123E4, 0.123E4) = 0.123E4 +rem (0.123E4, 0.123E4) = 0.0 +* (0.123E4, 0.123E2) = 0.15129E5 ++ (0.123E4, 0.123E2) = 0.12423E4 +- (0.123E4, 0.123E2) = 0.12177E4 +/ (0.123E4, 0.123E2) = 0.1E3 +nextAfter (0.123E4, 0.123E2) = 0.12299999999999998E4 +rem (0.123E4, 0.123E2) = 0.0 +* (0.123E4, 0.3141592653589793E1) = 0.38641589639154454E4 ++ (0.123E4, 0.3141592653589793E1) = 0.123314159265359E4 +- (0.123E4, 0.3141592653589793E1) = 0.122685840734641E4 +/ (0.123E4, 0.3141592653589793E1) = 0.39152116000606253E3 +nextAfter (0.123E4, 0.3141592653589793E1) = 0.12299999999999998E4 +rem (0.123E4, 0.3141592653589793E1) = 0.16372724463908526E1 +* (0.123E4, 0.2718281828459045E1) = 0.33434866490046256E4 ++ (0.123E4, 0.2718281828459045E1) = 0.1232718281828459E4 +- (0.123E4, 0.2718281828459045E1) = 0.1227281718171541E4 +/ (0.123E4, 0.2718281828459045E1) = 0.4524917126408741E3 +nextAfter (0.123E4, 0.2718281828459045E1) = 0.12299999999999998E4 +rem (0.123E4, 0.2718281828459045E1) = 0.13366135365115497E1 +* (0.123E4, 0.123E1) = 0.15129E4 ++ (0.123E4, 0.123E1) = 0.123123E4 +- (0.123E4, 0.123E1) = 0.122877E4 +/ (0.123E4, 0.123E1) = 0.1E4 +nextAfter (0.123E4, 0.123E1) = 0.12299999999999998E4 +rem (0.123E4, 0.123E1) = 0.0 +* (0.123E4, 0.123) = 0.15129E3 ++ (0.123E4, 0.123) = 0.1230123E4 +- (0.123E4, 0.123) = 0.1229877E4 +/ (0.123E4, 0.123) = 0.1E5 +nextAfter (0.123E4, 0.123) = 0.12299999999999998E4 +rem (0.123E4, 0.123) = 0.0 +* (0.123E4, 0.123E~2) = 0.15129E1 ++ (0.123E4, 0.123E~2) = 0.123000123E4 +- (0.123E4, 0.123E~2) = 0.122999877E4 +/ (0.123E4, 0.123E~2) = 0.1E7 +nextAfter (0.123E4, 0.123E~2) = 0.12299999999999998E4 +rem (0.123E4, 0.123E~2) = 0.0 +* (0.123E4, 0.22250738585072014E~307) = 0.27368408459638577E~304 ++ (0.123E4, 0.22250738585072014E~307) = 0.123E4 +- (0.123E4, 0.22250738585072014E~307) = 0.123E4 +/ (0.123E4, 0.22250738585072014E~307) = inf +nextAfter (0.123E4, 0.22250738585072014E~307) = 0.12299999999999998E4 +rem (0.123E4, 0.22250738585072014E~307) = ~inf +* (0.123E4, 0.11125369292536007E~307) = 0.13684204229819289E~304 ++ (0.123E4, 0.11125369292536007E~307) = 0.123E4 +- (0.123E4, 0.11125369292536007E~307) = 0.123E4 +/ (0.123E4, 0.11125369292536007E~307) = inf +nextAfter (0.123E4, 0.11125369292536007E~307) = 0.12299999999999998E4 +rem (0.123E4, 0.11125369292536007E~307) = ~inf +* (0.123E4, 0.5E~323) = 0.6077E~320 ++ (0.123E4, 0.5E~323) = 0.123E4 +- (0.123E4, 0.5E~323) = 0.123E4 +/ (0.123E4, 0.5E~323) = inf +nextAfter (0.123E4, 0.5E~323) = 0.12299999999999998E4 +rem (0.123E4, 0.5E~323) = ~inf +* (0.123E4, 0.0) = 0.0 ++ (0.123E4, 0.0) = 0.123E4 +- (0.123E4, 0.0) = 0.123E4 +/ (0.123E4, 0.0) = inf +nextAfter (0.123E4, 0.0) = 0.12299999999999998E4 +rem (0.123E4, 0.0) = nan +* (0.123E4, ~0.17976931348623157E309) = ~inf ++ (0.123E4, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E4, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E4, ~0.17976931348623157E309) = ~0.6842102114909646E~305 +nextAfter (0.123E4, ~0.17976931348623157E309) = 0.12299999999999998E4 +rem (0.123E4, ~0.17976931348623157E309) = 0.123E4 +* (0.123E4, ~0.8988465674311579E308) = ~inf ++ (0.123E4, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E4, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E4, ~0.8988465674311579E308) = ~0.1368420422981929E~304 +nextAfter (0.123E4, ~0.8988465674311579E308) = 0.12299999999999998E4 +rem (0.123E4, ~0.8988465674311579E308) = 0.123E4 +* (0.123E4, ~0.123E4) = ~0.15129E7 ++ (0.123E4, ~0.123E4) = 0.0 +- (0.123E4, ~0.123E4) = 0.246E4 +/ (0.123E4, ~0.123E4) = ~0.1E1 +nextAfter (0.123E4, ~0.123E4) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E4) = 0.0 +* (0.123E4, ~0.123E2) = ~0.15129E5 ++ (0.123E4, ~0.123E2) = 0.12177E4 +- (0.123E4, ~0.123E2) = 0.12423E4 +/ (0.123E4, ~0.123E2) = ~0.1E3 +nextAfter (0.123E4, ~0.123E2) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E2) = 0.0 +* (0.123E4, ~0.3141592653589793E1) = ~0.38641589639154454E4 ++ (0.123E4, ~0.3141592653589793E1) = 0.122685840734641E4 +- (0.123E4, ~0.3141592653589793E1) = 0.123314159265359E4 +/ (0.123E4, ~0.3141592653589793E1) = ~0.39152116000606253E3 +nextAfter (0.123E4, ~0.3141592653589793E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.3141592653589793E1) = 0.16372724463908526E1 +* (0.123E4, ~0.2718281828459045E1) = ~0.33434866490046256E4 ++ (0.123E4, ~0.2718281828459045E1) = 0.1227281718171541E4 +- (0.123E4, ~0.2718281828459045E1) = 0.1232718281828459E4 +/ (0.123E4, ~0.2718281828459045E1) = ~0.4524917126408741E3 +nextAfter (0.123E4, ~0.2718281828459045E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.2718281828459045E1) = 0.13366135365115497E1 +* (0.123E4, ~0.123E1) = ~0.15129E4 ++ (0.123E4, ~0.123E1) = 0.122877E4 +- (0.123E4, ~0.123E1) = 0.123123E4 +/ (0.123E4, ~0.123E1) = ~0.1E4 +nextAfter (0.123E4, ~0.123E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E1) = 0.0 +* (0.123E4, ~0.123) = ~0.15129E3 ++ (0.123E4, ~0.123) = 0.1229877E4 +- (0.123E4, ~0.123) = 0.1230123E4 +/ (0.123E4, ~0.123) = ~0.1E5 +nextAfter (0.123E4, ~0.123) = 0.12299999999999998E4 +rem (0.123E4, ~0.123) = 0.0 +* (0.123E4, ~0.123E~2) = ~0.15129E1 ++ (0.123E4, ~0.123E~2) = 0.122999877E4 +- (0.123E4, ~0.123E~2) = 0.123000123E4 +/ (0.123E4, ~0.123E~2) = ~0.1E7 +nextAfter (0.123E4, ~0.123E~2) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E~2) = 0.0 +* (0.123E4, ~0.22250738585072014E~307) = ~0.27368408459638577E~304 ++ (0.123E4, ~0.22250738585072014E~307) = 0.123E4 +- (0.123E4, ~0.22250738585072014E~307) = 0.123E4 +/ (0.123E4, ~0.22250738585072014E~307) = ~inf +nextAfter (0.123E4, ~0.22250738585072014E~307) = 0.12299999999999998E4 +rem (0.123E4, ~0.22250738585072014E~307) = ~inf +* (0.123E4, ~0.11125369292536007E~307) = ~0.13684204229819289E~304 ++ (0.123E4, ~0.11125369292536007E~307) = 0.123E4 +- (0.123E4, ~0.11125369292536007E~307) = 0.123E4 +/ (0.123E4, ~0.11125369292536007E~307) = ~inf +nextAfter (0.123E4, ~0.11125369292536007E~307) = 0.12299999999999998E4 +rem (0.123E4, ~0.11125369292536007E~307) = ~inf +* (0.123E4, ~0.5E~323) = ~0.6077E~320 ++ (0.123E4, ~0.5E~323) = 0.123E4 +- (0.123E4, ~0.5E~323) = 0.123E4 +/ (0.123E4, ~0.5E~323) = ~inf +nextAfter (0.123E4, ~0.5E~323) = 0.12299999999999998E4 +rem (0.123E4, ~0.5E~323) = ~inf +* (0.123E4, ~0.0) = ~0.0 ++ (0.123E4, ~0.0) = 0.123E4 +- (0.123E4, ~0.0) = 0.123E4 +/ (0.123E4, ~0.0) = ~inf +nextAfter (0.123E4, ~0.0) = 0.12299999999999998E4 +rem (0.123E4, ~0.0) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300000000000002E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E4, ~inf) = ~inf ++ (0.123E4, ~inf) = ~inf +- (0.123E4, ~inf) = inf +/ (0.123E4, ~inf) = ~0.0 +nextAfter (0.123E4, ~inf) = 0.12299999999999998E4 +rem (0.123E4, ~inf) = 0.123E4 +* (0.123E4, nan) = nan ++ (0.123E4, nan) = nan +- (0.123E4, nan) = nan +/ (0.123E4, nan) = nan +nextAfter (0.123E4, nan) = nan +rem (0.123E4, nan) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300000000000002E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E2, 0.17976931348623157E309) = inf ++ (0.123E2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E2, 0.17976931348623157E309) = 0.6842102114909646E~307 +nextAfter (0.123E2, 0.17976931348623157E309) = 0.12300000000000002E2 +rem (0.123E2, 0.17976931348623157E309) = 0.123E2 +* (0.123E2, 0.8988465674311579E308) = inf ++ (0.123E2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E2, 0.8988465674311579E308) = 0.13684204229819291E~306 +nextAfter (0.123E2, 0.8988465674311579E308) = 0.12300000000000002E2 +rem (0.123E2, 0.8988465674311579E308) = 0.123E2 +* (0.123E2, 0.123E4) = 0.15129E5 ++ (0.123E2, 0.123E4) = 0.12423E4 +- (0.123E2, 0.123E4) = ~0.12177E4 +/ (0.123E2, 0.123E4) = 0.1E~1 +nextAfter (0.123E2, 0.123E4) = 0.12300000000000002E2 +rem (0.123E2, 0.123E4) = 0.123E2 +* (0.123E2, 0.123E2) = 0.15129000000000002E3 ++ (0.123E2, 0.123E2) = 0.246E2 +- (0.123E2, 0.123E2) = 0.0 +/ (0.123E2, 0.123E2) = 0.1E1 +nextAfter (0.123E2, 0.123E2) = 0.123E2 +rem (0.123E2, 0.123E2) = 0.0 +* (0.123E2, 0.3141592653589793E1) = 0.3864158963915446E2 ++ (0.123E2, 0.3141592653589793E1) = 0.15441592653589794E2 +- (0.123E2, 0.3141592653589793E1) = 0.9158407346410208E1 +/ (0.123E2, 0.3141592653589793E1) = 0.3915211600060626E1 +nextAfter (0.123E2, 0.3141592653589793E1) = 0.12299999999999999E2 +rem (0.123E2, 0.3141592653589793E1) = 0.28752220392306214E1 +* (0.123E2, 0.2718281828459045E1) = 0.33434866490046254E2 ++ (0.123E2, 0.2718281828459045E1) = 0.15018281828459045E2 +- (0.123E2, 0.2718281828459045E1) = 0.9581718171540956E1 +/ (0.123E2, 0.2718281828459045E1) = 0.4524917126408741E1 +nextAfter (0.123E2, 0.2718281828459045E1) = 0.12299999999999999E2 +rem (0.123E2, 0.2718281828459045E1) = 0.14268726861638203E1 +* (0.123E2, 0.123E1) = 0.15129000000000001E2 ++ (0.123E2, 0.123E1) = 0.13530000000000001E2 +- (0.123E2, 0.123E1) = 0.1107E2 +/ (0.123E2, 0.123E1) = 0.1E2 +nextAfter (0.123E2, 0.123E1) = 0.12299999999999999E2 +rem (0.123E2, 0.123E1) = 0.0 +* (0.123E2, 0.123) = 0.15129000000000001E1 ++ (0.123E2, 0.123) = 0.12423E2 +- (0.123E2, 0.123) = 0.12177000000000001E2 +/ (0.123E2, 0.123) = 0.10000000000000001E3 +nextAfter (0.123E2, 0.123) = 0.12299999999999999E2 +rem (0.123E2, 0.123) = 0.0 +* (0.123E2, 0.123E~2) = 0.15129E~1 ++ (0.123E2, 0.123E~2) = 0.1230123E2 +- (0.123E2, 0.123E~2) = 0.12298770000000001E2 +/ (0.123E2, 0.123E~2) = 0.1E5 +nextAfter (0.123E2, 0.123E~2) = 0.12299999999999999E2 +rem (0.123E2, 0.123E~2) = 0.17763568394002505E~14 +* (0.123E2, 0.22250738585072014E~307) = 0.2736840845963858E~306 ++ (0.123E2, 0.22250738585072014E~307) = 0.123E2 +- (0.123E2, 0.22250738585072014E~307) = 0.123E2 +/ (0.123E2, 0.22250738585072014E~307) = inf +nextAfter (0.123E2, 0.22250738585072014E~307) = 0.12299999999999999E2 +rem (0.123E2, 0.22250738585072014E~307) = ~inf +* (0.123E2, 0.11125369292536007E~307) = 0.1368420422981929E~306 ++ (0.123E2, 0.11125369292536007E~307) = 0.123E2 +- (0.123E2, 0.11125369292536007E~307) = 0.123E2 +/ (0.123E2, 0.11125369292536007E~307) = inf +nextAfter (0.123E2, 0.11125369292536007E~307) = 0.12299999999999999E2 +rem (0.123E2, 0.11125369292536007E~307) = ~inf +* (0.123E2, 0.5E~323) = 0.6E~322 ++ (0.123E2, 0.5E~323) = 0.123E2 +- (0.123E2, 0.5E~323) = 0.123E2 +/ (0.123E2, 0.5E~323) = inf +nextAfter (0.123E2, 0.5E~323) = 0.12299999999999999E2 +rem (0.123E2, 0.5E~323) = ~inf +* (0.123E2, 0.0) = 0.0 ++ (0.123E2, 0.0) = 0.123E2 +- (0.123E2, 0.0) = 0.123E2 +/ (0.123E2, 0.0) = inf +nextAfter (0.123E2, 0.0) = 0.12299999999999999E2 +rem (0.123E2, 0.0) = nan +* (0.123E2, ~0.17976931348623157E309) = ~inf ++ (0.123E2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E2, ~0.17976931348623157E309) = ~0.6842102114909646E~307 +nextAfter (0.123E2, ~0.17976931348623157E309) = 0.12299999999999999E2 +rem (0.123E2, ~0.17976931348623157E309) = 0.123E2 +* (0.123E2, ~0.8988465674311579E308) = ~inf ++ (0.123E2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E2, ~0.8988465674311579E308) = ~0.13684204229819291E~306 +nextAfter (0.123E2, ~0.8988465674311579E308) = 0.12299999999999999E2 +rem (0.123E2, ~0.8988465674311579E308) = 0.123E2 +* (0.123E2, ~0.123E4) = ~0.15129E5 ++ (0.123E2, ~0.123E4) = ~0.12177E4 +- (0.123E2, ~0.123E4) = 0.12423E4 +/ (0.123E2, ~0.123E4) = ~0.1E~1 +nextAfter (0.123E2, ~0.123E4) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E4) = 0.123E2 +* (0.123E2, ~0.123E2) = ~0.15129000000000002E3 ++ (0.123E2, ~0.123E2) = 0.0 +- (0.123E2, ~0.123E2) = 0.246E2 +/ (0.123E2, ~0.123E2) = ~0.1E1 +nextAfter (0.123E2, ~0.123E2) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E2) = 0.0 +* (0.123E2, ~0.3141592653589793E1) = ~0.3864158963915446E2 ++ (0.123E2, ~0.3141592653589793E1) = 0.9158407346410208E1 +- (0.123E2, ~0.3141592653589793E1) = 0.15441592653589794E2 +/ (0.123E2, ~0.3141592653589793E1) = ~0.3915211600060626E1 +nextAfter (0.123E2, ~0.3141592653589793E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.3141592653589793E1) = 0.28752220392306214E1 +* (0.123E2, ~0.2718281828459045E1) = ~0.33434866490046254E2 ++ (0.123E2, ~0.2718281828459045E1) = 0.9581718171540956E1 +- (0.123E2, ~0.2718281828459045E1) = 0.15018281828459045E2 +/ (0.123E2, ~0.2718281828459045E1) = ~0.4524917126408741E1 +nextAfter (0.123E2, ~0.2718281828459045E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.2718281828459045E1) = 0.14268726861638203E1 +* (0.123E2, ~0.123E1) = ~0.15129000000000001E2 ++ (0.123E2, ~0.123E1) = 0.1107E2 +- (0.123E2, ~0.123E1) = 0.13530000000000001E2 +/ (0.123E2, ~0.123E1) = ~0.1E2 +nextAfter (0.123E2, ~0.123E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E1) = 0.0 +* (0.123E2, ~0.123) = ~0.15129000000000001E1 ++ (0.123E2, ~0.123) = 0.12177000000000001E2 +- (0.123E2, ~0.123) = 0.12423E2 +/ (0.123E2, ~0.123) = ~0.10000000000000001E3 +nextAfter (0.123E2, ~0.123) = 0.12299999999999999E2 +rem (0.123E2, ~0.123) = 0.0 +* (0.123E2, ~0.123E~2) = ~0.15129E~1 ++ (0.123E2, ~0.123E~2) = 0.12298770000000001E2 +- (0.123E2, ~0.123E~2) = 0.1230123E2 +/ (0.123E2, ~0.123E~2) = ~0.1E5 +nextAfter (0.123E2, ~0.123E~2) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E~2) = 0.17763568394002505E~14 +* (0.123E2, ~0.22250738585072014E~307) = ~0.2736840845963858E~306 ++ (0.123E2, ~0.22250738585072014E~307) = 0.123E2 +- (0.123E2, ~0.22250738585072014E~307) = 0.123E2 +/ (0.123E2, ~0.22250738585072014E~307) = ~inf +nextAfter (0.123E2, ~0.22250738585072014E~307) = 0.12299999999999999E2 +rem (0.123E2, ~0.22250738585072014E~307) = ~inf +* (0.123E2, ~0.11125369292536007E~307) = ~0.1368420422981929E~306 ++ (0.123E2, ~0.11125369292536007E~307) = 0.123E2 +- (0.123E2, ~0.11125369292536007E~307) = 0.123E2 +/ (0.123E2, ~0.11125369292536007E~307) = ~inf +nextAfter (0.123E2, ~0.11125369292536007E~307) = 0.12299999999999999E2 +rem (0.123E2, ~0.11125369292536007E~307) = ~inf +* (0.123E2, ~0.5E~323) = ~0.6E~322 ++ (0.123E2, ~0.5E~323) = 0.123E2 +- (0.123E2, ~0.5E~323) = 0.123E2 +/ (0.123E2, ~0.5E~323) = ~inf +nextAfter (0.123E2, ~0.5E~323) = 0.12299999999999999E2 +rem (0.123E2, ~0.5E~323) = ~inf +* (0.123E2, ~0.0) = ~0.0 ++ (0.123E2, ~0.0) = 0.123E2 +- (0.123E2, ~0.0) = 0.123E2 +/ (0.123E2, ~0.0) = ~inf +nextAfter (0.123E2, ~0.0) = 0.12299999999999999E2 +rem (0.123E2, ~0.0) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300000000000002E2 +rem (0.123E2, inf) = 0.123E2 +* (0.123E2, ~inf) = ~inf ++ (0.123E2, ~inf) = ~inf +- (0.123E2, ~inf) = inf +/ (0.123E2, ~inf) = ~0.0 +nextAfter (0.123E2, ~inf) = 0.12299999999999999E2 +rem (0.123E2, ~inf) = 0.123E2 +* (0.123E2, nan) = nan ++ (0.123E2, nan) = nan +- (0.123E2, nan) = nan +/ (0.123E2, nan) = nan +nextAfter (0.123E2, nan) = nan +rem (0.123E2, nan) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300000000000002E2 +rem (0.123E2, inf) = 0.123E2 +* (0.3141592653589793E1, 0.17976931348623157E309) = inf ++ (0.3141592653589793E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.3141592653589793E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.3141592653589793E1, 0.17976931348623157E309) = 0.17475689218952297E~307 +nextAfter (0.3141592653589793E1, 0.17976931348623157E309) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.17976931348623157E309) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.8988465674311579E308) = inf ++ (0.3141592653589793E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.3141592653589793E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.3141592653589793E1, 0.8988465674311579E308) = 0.349513784379046E~307 +nextAfter (0.3141592653589793E1, 0.8988465674311579E308) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.8988465674311579E308) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.123E4) = 0.38641589639154454E4 ++ (0.3141592653589793E1, 0.123E4) = 0.123314159265359E4 +- (0.3141592653589793E1, 0.123E4) = ~0.122685840734641E4 +/ (0.3141592653589793E1, 0.123E4) = 0.25541403687721893E~2 +nextAfter (0.3141592653589793E1, 0.123E4) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.123E4) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.123E2) = 0.3864158963915446E2 ++ (0.3141592653589793E1, 0.123E2) = 0.15441592653589794E2 +- (0.3141592653589793E1, 0.123E2) = ~0.9158407346410208E1 +/ (0.3141592653589793E1, 0.123E2) = 0.2554140368772189 +nextAfter (0.3141592653589793E1, 0.123E2) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.123E2) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.3141592653589793E1) = 0.9869604401089358E1 ++ (0.3141592653589793E1, 0.3141592653589793E1) = 0.6283185307179586E1 +- (0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +/ (0.3141592653589793E1, 0.3141592653589793E1) = 0.1E1 +nextAfter (0.3141592653589793E1, 0.3141592653589793E1) = 0.3141592653589793E1 +rem (0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +* (0.3141592653589793E1, 0.2718281828459045E1) = 0.8539734222673566E1 ++ (0.3141592653589793E1, 0.2718281828459045E1) = 0.5859874482048838E1 +- (0.3141592653589793E1, 0.2718281828459045E1) = 0.423310825130748 +/ (0.3141592653589793E1, 0.2718281828459045E1) = 0.11557273497909217E1 +nextAfter (0.3141592653589793E1, 0.2718281828459045E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.2718281828459045E1) = 0.423310825130748 +* (0.3141592653589793E1, 0.123E1) = 0.38641589639154454E1 ++ (0.3141592653589793E1, 0.123E1) = 0.43715926535897935E1 +- (0.3141592653589793E1, 0.123E1) = 0.19115926535897931E1 +/ (0.3141592653589793E1, 0.123E1) = 0.25541403687721895E1 +nextAfter (0.3141592653589793E1, 0.123E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123E1) = 0.6815926535897932 +* (0.3141592653589793E1, 0.123) = 0.38641589639154456 ++ (0.3141592653589793E1, 0.123) = 0.32645926535897933E1 +- (0.3141592653589793E1, 0.123) = 0.3018592653589793E1 +/ (0.3141592653589793E1, 0.123) = 0.25541403687721896E2 +nextAfter (0.3141592653589793E1, 0.123) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123) = 0.6659265358979294E~1 +* (0.3141592653589793E1, 0.123E~2) = 0.38641589639154456E~2 ++ (0.3141592653589793E1, 0.123E~2) = 0.3142822653589793E1 +- (0.3141592653589793E1, 0.123E~2) = 0.3140362653589793E1 +/ (0.3141592653589793E1, 0.123E~2) = 0.25541403687721895E4 +nextAfter (0.3141592653589793E1, 0.123E~2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123E~2) = 0.17265358979301482E~3 +* (0.3141592653589793E1, 0.22250738585072014E~307) = 0.6990275687580919E~307 ++ (0.3141592653589793E1, 0.22250738585072014E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.22250738585072014E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.22250738585072014E~307) = 0.14119048864730642E309 +nextAfter (0.3141592653589793E1, 0.22250738585072014E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.22250738585072014E~307) = 0.0 +* (0.3141592653589793E1, 0.11125369292536007E~307) = 0.34951378437904593E~307 ++ (0.3141592653589793E1, 0.11125369292536007E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.11125369292536007E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.11125369292536007E~307) = inf +nextAfter (0.3141592653589793E1, 0.11125369292536007E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.11125369292536007E~307) = ~inf +* (0.3141592653589793E1, 0.5E~323) = 0.15E~322 ++ (0.3141592653589793E1, 0.5E~323) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.5E~323) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.5E~323) = inf +nextAfter (0.3141592653589793E1, 0.5E~323) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.5E~323) = ~inf +* (0.3141592653589793E1, 0.0) = 0.0 ++ (0.3141592653589793E1, 0.0) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.0) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.0) = inf +nextAfter (0.3141592653589793E1, 0.0) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.0) = nan +* (0.3141592653589793E1, ~0.17976931348623157E309) = ~inf ++ (0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.3141592653589793E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17475689218952297E~307 +nextAfter (0.3141592653589793E1, ~0.17976931348623157E309) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.17976931348623157E309) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.8988465674311579E308) = ~inf ++ (0.3141592653589793E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.3141592653589793E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.3141592653589793E1, ~0.8988465674311579E308) = ~0.349513784379046E~307 +nextAfter (0.3141592653589793E1, ~0.8988465674311579E308) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.8988465674311579E308) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.123E4) = ~0.38641589639154454E4 ++ (0.3141592653589793E1, ~0.123E4) = ~0.122685840734641E4 +- (0.3141592653589793E1, ~0.123E4) = 0.123314159265359E4 +/ (0.3141592653589793E1, ~0.123E4) = ~0.25541403687721893E~2 +nextAfter (0.3141592653589793E1, ~0.123E4) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E4) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.123E2) = ~0.3864158963915446E2 ++ (0.3141592653589793E1, ~0.123E2) = ~0.9158407346410208E1 +- (0.3141592653589793E1, ~0.123E2) = 0.15441592653589794E2 +/ (0.3141592653589793E1, ~0.123E2) = ~0.2554140368772189 +nextAfter (0.3141592653589793E1, ~0.123E2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E2) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.3141592653589793E1) = ~0.9869604401089358E1 ++ (0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +- (0.3141592653589793E1, ~0.3141592653589793E1) = 0.6283185307179586E1 +/ (0.3141592653589793E1, ~0.3141592653589793E1) = ~0.1E1 +nextAfter (0.3141592653589793E1, ~0.3141592653589793E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +* (0.3141592653589793E1, ~0.2718281828459045E1) = ~0.8539734222673566E1 ++ (0.3141592653589793E1, ~0.2718281828459045E1) = 0.423310825130748 +- (0.3141592653589793E1, ~0.2718281828459045E1) = 0.5859874482048838E1 +/ (0.3141592653589793E1, ~0.2718281828459045E1) = ~0.11557273497909217E1 +nextAfter (0.3141592653589793E1, ~0.2718281828459045E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.2718281828459045E1) = 0.423310825130748 +* (0.3141592653589793E1, ~0.123E1) = ~0.38641589639154454E1 ++ (0.3141592653589793E1, ~0.123E1) = 0.19115926535897931E1 +- (0.3141592653589793E1, ~0.123E1) = 0.43715926535897935E1 +/ (0.3141592653589793E1, ~0.123E1) = ~0.25541403687721895E1 +nextAfter (0.3141592653589793E1, ~0.123E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E1) = 0.6815926535897932 +* (0.3141592653589793E1, ~0.123) = ~0.38641589639154456 ++ (0.3141592653589793E1, ~0.123) = 0.3018592653589793E1 +- (0.3141592653589793E1, ~0.123) = 0.32645926535897933E1 +/ (0.3141592653589793E1, ~0.123) = ~0.25541403687721896E2 +nextAfter (0.3141592653589793E1, ~0.123) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123) = 0.6659265358979294E~1 +* (0.3141592653589793E1, ~0.123E~2) = ~0.38641589639154456E~2 ++ (0.3141592653589793E1, ~0.123E~2) = 0.3140362653589793E1 +- (0.3141592653589793E1, ~0.123E~2) = 0.3142822653589793E1 +/ (0.3141592653589793E1, ~0.123E~2) = ~0.25541403687721895E4 +nextAfter (0.3141592653589793E1, ~0.123E~2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E~2) = 0.17265358979301482E~3 +* (0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.6990275687580919E~307 ++ (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.14119048864730642E309 +nextAfter (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.0 +* (0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.34951378437904593E~307 ++ (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.11125369292536007E~307) = ~inf +nextAfter (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.11125369292536007E~307) = ~inf +* (0.3141592653589793E1, ~0.5E~323) = ~0.15E~322 ++ (0.3141592653589793E1, ~0.5E~323) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.5E~323) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.5E~323) = ~inf +nextAfter (0.3141592653589793E1, ~0.5E~323) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.5E~323) = ~inf +* (0.3141592653589793E1, ~0.0) = ~0.0 ++ (0.3141592653589793E1, ~0.0) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.0) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.0) = ~inf +nextAfter (0.3141592653589793E1, ~0.0) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.0) = nan +* (0.3141592653589793E1, inf) = inf ++ (0.3141592653589793E1, inf) = inf +- (0.3141592653589793E1, inf) = ~inf +/ (0.3141592653589793E1, inf) = 0.0 +nextAfter (0.3141592653589793E1, inf) = 0.31415926535897936E1 +rem (0.3141592653589793E1, inf) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~inf) = ~inf ++ (0.3141592653589793E1, ~inf) = ~inf +- (0.3141592653589793E1, ~inf) = inf +/ (0.3141592653589793E1, ~inf) = ~0.0 +nextAfter (0.3141592653589793E1, ~inf) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~inf) = 0.3141592653589793E1 +* (0.3141592653589793E1, nan) = nan ++ (0.3141592653589793E1, nan) = nan +- (0.3141592653589793E1, nan) = nan +/ (0.3141592653589793E1, nan) = nan +nextAfter (0.3141592653589793E1, nan) = nan +rem (0.3141592653589793E1, nan) = nan +* (0.3141592653589793E1, inf) = inf ++ (0.3141592653589793E1, inf) = inf +- (0.3141592653589793E1, inf) = ~inf +/ (0.3141592653589793E1, inf) = 0.0 +nextAfter (0.3141592653589793E1, inf) = 0.31415926535897936E1 +rem (0.3141592653589793E1, inf) = 0.3141592653589793E1 +* (0.2718281828459045E1, 0.17976931348623157E309) = inf ++ (0.2718281828459045E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.2718281828459045E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.2718281828459045E1, 0.17976931348623157E309) = 0.15120944591398447E~307 +nextAfter (0.2718281828459045E1, 0.17976931348623157E309) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.17976931348623157E309) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.8988465674311579E308) = inf ++ (0.2718281828459045E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.2718281828459045E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.2718281828459045E1, 0.8988465674311579E308) = 0.30241889182796895E~307 +nextAfter (0.2718281828459045E1, 0.8988465674311579E308) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.8988465674311579E308) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.123E4) = 0.33434866490046256E4 ++ (0.2718281828459045E1, 0.123E4) = 0.1232718281828459E4 +- (0.2718281828459045E1, 0.123E4) = ~0.1227281718171541E4 +/ (0.2718281828459045E1, 0.123E4) = 0.22099852263894678E~2 +nextAfter (0.2718281828459045E1, 0.123E4) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.123E4) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.123E2) = 0.33434866490046254E2 ++ (0.2718281828459045E1, 0.123E2) = 0.15018281828459045E2 +- (0.2718281828459045E1, 0.123E2) = ~0.9581718171540956E1 +/ (0.2718281828459045E1, 0.123E2) = 0.22099852263894673 +nextAfter (0.2718281828459045E1, 0.123E2) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.123E2) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.3141592653589793E1) = 0.8539734222673566E1 ++ (0.2718281828459045E1, 0.3141592653589793E1) = 0.5859874482048838E1 +- (0.2718281828459045E1, 0.3141592653589793E1) = ~0.423310825130748 +/ (0.2718281828459045E1, 0.3141592653589793E1) = 0.8652559794322651 +nextAfter (0.2718281828459045E1, 0.3141592653589793E1) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.3141592653589793E1) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.2718281828459045E1) = 0.73890560989306495E1 ++ (0.2718281828459045E1, 0.2718281828459045E1) = 0.543656365691809E1 +- (0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +/ (0.2718281828459045E1, 0.2718281828459045E1) = 0.1E1 +nextAfter (0.2718281828459045E1, 0.2718281828459045E1) = 0.2718281828459045E1 +rem (0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +* (0.2718281828459045E1, 0.123E1) = 0.33434866490046256E1 ++ (0.2718281828459045E1, 0.123E1) = 0.3948281828459045E1 +- (0.2718281828459045E1, 0.123E1) = 0.1488281828459045E1 +/ (0.2718281828459045E1, 0.123E1) = 0.22099852263894677E1 +nextAfter (0.2718281828459045E1, 0.123E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123E1) = 0.2582818284590451 +* (0.2718281828459045E1, 0.123) = 0.33434866490046256 ++ (0.2718281828459045E1, 0.123) = 0.2841281828459045E1 +- (0.2718281828459045E1, 0.123) = 0.25952818284590453E1 +/ (0.2718281828459045E1, 0.123) = 0.22099852263894675E2 +nextAfter (0.2718281828459045E1, 0.123) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123) = 0.1228182845904513E~1 +* (0.2718281828459045E1, 0.123E~2) = 0.33434866490046253E~2 ++ (0.2718281828459045E1, 0.123E~2) = 0.2719511828459045E1 +- (0.2718281828459045E1, 0.123E~2) = 0.2717051828459045E1 +/ (0.2718281828459045E1, 0.123E~2) = 0.22099852263894677E4 +nextAfter (0.2718281828459045E1, 0.123E~2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123E~2) = 0.12118284590449946E~2 +* (0.2718281828459045E1, 0.22250738585072014E~307) = 0.6048377836559378E~307 ++ (0.2718281828459045E1, 0.22250738585072014E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.22250738585072014E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.22250738585072014E~307) = 0.12216591454104522E309 +nextAfter (0.2718281828459045E1, 0.22250738585072014E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.22250738585072014E~307) = 0.0 +* (0.2718281828459045E1, 0.11125369292536007E~307) = 0.3024188918279689E~307 ++ (0.2718281828459045E1, 0.11125369292536007E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.11125369292536007E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.11125369292536007E~307) = inf +nextAfter (0.2718281828459045E1, 0.11125369292536007E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.11125369292536007E~307) = ~inf +* (0.2718281828459045E1, 0.5E~323) = 0.15E~322 ++ (0.2718281828459045E1, 0.5E~323) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.5E~323) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.5E~323) = inf +nextAfter (0.2718281828459045E1, 0.5E~323) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.5E~323) = ~inf +* (0.2718281828459045E1, 0.0) = 0.0 ++ (0.2718281828459045E1, 0.0) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.0) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.0) = inf +nextAfter (0.2718281828459045E1, 0.0) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.0) = nan +* (0.2718281828459045E1, ~0.17976931348623157E309) = ~inf ++ (0.2718281828459045E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.2718281828459045E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.2718281828459045E1, ~0.17976931348623157E309) = ~0.15120944591398447E~307 +nextAfter (0.2718281828459045E1, ~0.17976931348623157E309) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.17976931348623157E309) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.8988465674311579E308) = ~inf ++ (0.2718281828459045E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.2718281828459045E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.2718281828459045E1, ~0.8988465674311579E308) = ~0.30241889182796895E~307 +nextAfter (0.2718281828459045E1, ~0.8988465674311579E308) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.8988465674311579E308) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.123E4) = ~0.33434866490046256E4 ++ (0.2718281828459045E1, ~0.123E4) = ~0.1227281718171541E4 +- (0.2718281828459045E1, ~0.123E4) = 0.1232718281828459E4 +/ (0.2718281828459045E1, ~0.123E4) = ~0.22099852263894678E~2 +nextAfter (0.2718281828459045E1, ~0.123E4) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E4) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.123E2) = ~0.33434866490046254E2 ++ (0.2718281828459045E1, ~0.123E2) = ~0.9581718171540956E1 +- (0.2718281828459045E1, ~0.123E2) = 0.15018281828459045E2 +/ (0.2718281828459045E1, ~0.123E2) = ~0.22099852263894673 +nextAfter (0.2718281828459045E1, ~0.123E2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E2) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.8539734222673566E1 ++ (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.423310825130748 +- (0.2718281828459045E1, ~0.3141592653589793E1) = 0.5859874482048838E1 +/ (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.8652559794322651 +nextAfter (0.2718281828459045E1, ~0.3141592653589793E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.3141592653589793E1) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.2718281828459045E1) = ~0.73890560989306495E1 ++ (0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +- (0.2718281828459045E1, ~0.2718281828459045E1) = 0.543656365691809E1 +/ (0.2718281828459045E1, ~0.2718281828459045E1) = ~0.1E1 +nextAfter (0.2718281828459045E1, ~0.2718281828459045E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +* (0.2718281828459045E1, ~0.123E1) = ~0.33434866490046256E1 ++ (0.2718281828459045E1, ~0.123E1) = 0.1488281828459045E1 +- (0.2718281828459045E1, ~0.123E1) = 0.3948281828459045E1 +/ (0.2718281828459045E1, ~0.123E1) = ~0.22099852263894677E1 +nextAfter (0.2718281828459045E1, ~0.123E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E1) = 0.2582818284590451 +* (0.2718281828459045E1, ~0.123) = ~0.33434866490046256 ++ (0.2718281828459045E1, ~0.123) = 0.25952818284590453E1 +- (0.2718281828459045E1, ~0.123) = 0.2841281828459045E1 +/ (0.2718281828459045E1, ~0.123) = ~0.22099852263894675E2 +nextAfter (0.2718281828459045E1, ~0.123) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123) = 0.1228182845904513E~1 +* (0.2718281828459045E1, ~0.123E~2) = ~0.33434866490046253E~2 ++ (0.2718281828459045E1, ~0.123E~2) = 0.2717051828459045E1 +- (0.2718281828459045E1, ~0.123E~2) = 0.2719511828459045E1 +/ (0.2718281828459045E1, ~0.123E~2) = ~0.22099852263894677E4 +nextAfter (0.2718281828459045E1, ~0.123E~2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E~2) = 0.12118284590449946E~2 +* (0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.6048377836559378E~307 ++ (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.12216591454104522E309 +nextAfter (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.0 +* (0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.3024188918279689E~307 ++ (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.11125369292536007E~307) = ~inf +nextAfter (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.11125369292536007E~307) = ~inf +* (0.2718281828459045E1, ~0.5E~323) = ~0.15E~322 ++ (0.2718281828459045E1, ~0.5E~323) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.5E~323) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.5E~323) = ~inf +nextAfter (0.2718281828459045E1, ~0.5E~323) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.5E~323) = ~inf +* (0.2718281828459045E1, ~0.0) = ~0.0 ++ (0.2718281828459045E1, ~0.0) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.0) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.0) = ~inf +nextAfter (0.2718281828459045E1, ~0.0) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.0) = nan +* (0.2718281828459045E1, inf) = inf ++ (0.2718281828459045E1, inf) = inf +- (0.2718281828459045E1, inf) = ~inf +/ (0.2718281828459045E1, inf) = 0.0 +nextAfter (0.2718281828459045E1, inf) = 0.27182818284590455E1 +rem (0.2718281828459045E1, inf) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~inf) = ~inf ++ (0.2718281828459045E1, ~inf) = ~inf +- (0.2718281828459045E1, ~inf) = inf +/ (0.2718281828459045E1, ~inf) = ~0.0 +nextAfter (0.2718281828459045E1, ~inf) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~inf) = 0.2718281828459045E1 +* (0.2718281828459045E1, nan) = nan ++ (0.2718281828459045E1, nan) = nan +- (0.2718281828459045E1, nan) = nan +/ (0.2718281828459045E1, nan) = nan +nextAfter (0.2718281828459045E1, nan) = nan +rem (0.2718281828459045E1, nan) = nan +* (0.2718281828459045E1, inf) = inf ++ (0.2718281828459045E1, inf) = inf +- (0.2718281828459045E1, inf) = ~inf +/ (0.2718281828459045E1, inf) = 0.0 +nextAfter (0.2718281828459045E1, inf) = 0.27182818284590455E1 +rem (0.2718281828459045E1, inf) = 0.2718281828459045E1 +* (0.123E1, 0.17976931348623157E309) = inf ++ (0.123E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E1, 0.17976931348623157E309) = 0.6842102114909647E~308 +nextAfter (0.123E1, 0.17976931348623157E309) = 0.12300000000000002E1 +rem (0.123E1, 0.17976931348623157E309) = 0.123E1 +* (0.123E1, 0.8988465674311579E308) = 0.1105581277940324E309 ++ (0.123E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E1, 0.8988465674311579E308) = 0.1368420422981929E~307 +nextAfter (0.123E1, 0.8988465674311579E308) = 0.12300000000000002E1 +rem (0.123E1, 0.8988465674311579E308) = 0.123E1 +* (0.123E1, 0.123E4) = 0.15129E4 ++ (0.123E1, 0.123E4) = 0.123123E4 +- (0.123E1, 0.123E4) = ~0.122877E4 +/ (0.123E1, 0.123E4) = 0.1E~2 +nextAfter (0.123E1, 0.123E4) = 0.12300000000000002E1 +rem (0.123E1, 0.123E4) = 0.123E1 +* (0.123E1, 0.123E2) = 0.15129000000000001E2 ++ (0.123E1, 0.123E2) = 0.13530000000000001E2 +- (0.123E1, 0.123E2) = ~0.1107E2 +/ (0.123E1, 0.123E2) = 0.9999999999999999E~1 +nextAfter (0.123E1, 0.123E2) = 0.12300000000000002E1 +rem (0.123E1, 0.123E2) = 0.123E1 +* (0.123E1, 0.3141592653589793E1) = 0.38641589639154454E1 ++ (0.123E1, 0.3141592653589793E1) = 0.43715926535897935E1 +- (0.123E1, 0.3141592653589793E1) = ~0.19115926535897931E1 +/ (0.123E1, 0.3141592653589793E1) = 0.3915211600060625 +nextAfter (0.123E1, 0.3141592653589793E1) = 0.12300000000000002E1 +rem (0.123E1, 0.3141592653589793E1) = 0.123E1 +* (0.123E1, 0.2718281828459045E1) = 0.33434866490046256E1 ++ (0.123E1, 0.2718281828459045E1) = 0.3948281828459045E1 +- (0.123E1, 0.2718281828459045E1) = ~0.1488281828459045E1 +/ (0.123E1, 0.2718281828459045E1) = 0.45249171264087407 +nextAfter (0.123E1, 0.2718281828459045E1) = 0.12300000000000002E1 +rem (0.123E1, 0.2718281828459045E1) = 0.123E1 +* (0.123E1, 0.123E1) = 0.15129E1 ++ (0.123E1, 0.123E1) = 0.246E1 +- (0.123E1, 0.123E1) = 0.0 +/ (0.123E1, 0.123E1) = 0.1E1 +nextAfter (0.123E1, 0.123E1) = 0.123E1 +rem (0.123E1, 0.123E1) = 0.0 +* (0.123E1, 0.123) = 0.15129 ++ (0.123E1, 0.123) = 0.1353E1 +- (0.123E1, 0.123) = 0.1107E1 +/ (0.123E1, 0.123) = 0.1E2 +nextAfter (0.123E1, 0.123) = 0.12299999999999998E1 +rem (0.123E1, 0.123) = 0.0 +* (0.123E1, 0.123E~2) = 0.15129E~2 ++ (0.123E1, 0.123E~2) = 0.123123E1 +- (0.123E1, 0.123E~2) = 0.122877E1 +/ (0.123E1, 0.123E~2) = 0.1E4 +nextAfter (0.123E1, 0.123E~2) = 0.12299999999999998E1 +rem (0.123E1, 0.123E~2) = 0.0 +* (0.123E1, 0.22250738585072014E~307) = 0.27368408459638577E~307 ++ (0.123E1, 0.22250738585072014E~307) = 0.123E1 +- (0.123E1, 0.22250738585072014E~307) = 0.123E1 +/ (0.123E1, 0.22250738585072014E~307) = 0.5527906389701621E308 +nextAfter (0.123E1, 0.22250738585072014E~307) = 0.12299999999999998E1 +rem (0.123E1, 0.22250738585072014E~307) = 0.0 +* (0.123E1, 0.11125369292536007E~307) = 0.1368420422981929E~307 ++ (0.123E1, 0.11125369292536007E~307) = 0.123E1 +- (0.123E1, 0.11125369292536007E~307) = 0.123E1 +/ (0.123E1, 0.11125369292536007E~307) = 0.11055812779403243E309 +nextAfter (0.123E1, 0.11125369292536007E~307) = 0.12299999999999998E1 +rem (0.123E1, 0.11125369292536007E~307) = 0.0 +* (0.123E1, 0.5E~323) = 0.5E~323 ++ (0.123E1, 0.5E~323) = 0.123E1 +- (0.123E1, 0.5E~323) = 0.123E1 +/ (0.123E1, 0.5E~323) = inf +nextAfter (0.123E1, 0.5E~323) = 0.12299999999999998E1 +rem (0.123E1, 0.5E~323) = ~inf +* (0.123E1, 0.0) = 0.0 ++ (0.123E1, 0.0) = 0.123E1 +- (0.123E1, 0.0) = 0.123E1 +/ (0.123E1, 0.0) = inf +nextAfter (0.123E1, 0.0) = 0.12299999999999998E1 +rem (0.123E1, 0.0) = nan +* (0.123E1, ~0.17976931348623157E309) = ~inf ++ (0.123E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E1, ~0.17976931348623157E309) = ~0.6842102114909647E~308 +nextAfter (0.123E1, ~0.17976931348623157E309) = 0.12299999999999998E1 +rem (0.123E1, ~0.17976931348623157E309) = 0.123E1 +* (0.123E1, ~0.8988465674311579E308) = ~0.1105581277940324E309 ++ (0.123E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E1, ~0.8988465674311579E308) = ~0.1368420422981929E~307 +nextAfter (0.123E1, ~0.8988465674311579E308) = 0.12299999999999998E1 +rem (0.123E1, ~0.8988465674311579E308) = 0.123E1 +* (0.123E1, ~0.123E4) = ~0.15129E4 ++ (0.123E1, ~0.123E4) = ~0.122877E4 +- (0.123E1, ~0.123E4) = 0.123123E4 +/ (0.123E1, ~0.123E4) = ~0.1E~2 +nextAfter (0.123E1, ~0.123E4) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E4) = 0.123E1 +* (0.123E1, ~0.123E2) = ~0.15129000000000001E2 ++ (0.123E1, ~0.123E2) = ~0.1107E2 +- (0.123E1, ~0.123E2) = 0.13530000000000001E2 +/ (0.123E1, ~0.123E2) = ~0.9999999999999999E~1 +nextAfter (0.123E1, ~0.123E2) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E2) = 0.123E1 +* (0.123E1, ~0.3141592653589793E1) = ~0.38641589639154454E1 ++ (0.123E1, ~0.3141592653589793E1) = ~0.19115926535897931E1 +- (0.123E1, ~0.3141592653589793E1) = 0.43715926535897935E1 +/ (0.123E1, ~0.3141592653589793E1) = ~0.3915211600060625 +nextAfter (0.123E1, ~0.3141592653589793E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.3141592653589793E1) = 0.123E1 +* (0.123E1, ~0.2718281828459045E1) = ~0.33434866490046256E1 ++ (0.123E1, ~0.2718281828459045E1) = ~0.1488281828459045E1 +- (0.123E1, ~0.2718281828459045E1) = 0.3948281828459045E1 +/ (0.123E1, ~0.2718281828459045E1) = ~0.45249171264087407 +nextAfter (0.123E1, ~0.2718281828459045E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.2718281828459045E1) = 0.123E1 +* (0.123E1, ~0.123E1) = ~0.15129E1 ++ (0.123E1, ~0.123E1) = 0.0 +- (0.123E1, ~0.123E1) = 0.246E1 +/ (0.123E1, ~0.123E1) = ~0.1E1 +nextAfter (0.123E1, ~0.123E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E1) = 0.0 +* (0.123E1, ~0.123) = ~0.15129 ++ (0.123E1, ~0.123) = 0.1107E1 +- (0.123E1, ~0.123) = 0.1353E1 +/ (0.123E1, ~0.123) = ~0.1E2 +nextAfter (0.123E1, ~0.123) = 0.12299999999999998E1 +rem (0.123E1, ~0.123) = 0.0 +* (0.123E1, ~0.123E~2) = ~0.15129E~2 ++ (0.123E1, ~0.123E~2) = 0.122877E1 +- (0.123E1, ~0.123E~2) = 0.123123E1 +/ (0.123E1, ~0.123E~2) = ~0.1E4 +nextAfter (0.123E1, ~0.123E~2) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E~2) = 0.0 +* (0.123E1, ~0.22250738585072014E~307) = ~0.27368408459638577E~307 ++ (0.123E1, ~0.22250738585072014E~307) = 0.123E1 +- (0.123E1, ~0.22250738585072014E~307) = 0.123E1 +/ (0.123E1, ~0.22250738585072014E~307) = ~0.5527906389701621E308 +nextAfter (0.123E1, ~0.22250738585072014E~307) = 0.12299999999999998E1 +rem (0.123E1, ~0.22250738585072014E~307) = 0.0 +* (0.123E1, ~0.11125369292536007E~307) = ~0.1368420422981929E~307 ++ (0.123E1, ~0.11125369292536007E~307) = 0.123E1 +- (0.123E1, ~0.11125369292536007E~307) = 0.123E1 +/ (0.123E1, ~0.11125369292536007E~307) = ~0.11055812779403243E309 +nextAfter (0.123E1, ~0.11125369292536007E~307) = 0.12299999999999998E1 +rem (0.123E1, ~0.11125369292536007E~307) = 0.0 +* (0.123E1, ~0.5E~323) = ~0.5E~323 ++ (0.123E1, ~0.5E~323) = 0.123E1 +- (0.123E1, ~0.5E~323) = 0.123E1 +/ (0.123E1, ~0.5E~323) = ~inf +nextAfter (0.123E1, ~0.5E~323) = 0.12299999999999998E1 +rem (0.123E1, ~0.5E~323) = ~inf +* (0.123E1, ~0.0) = ~0.0 ++ (0.123E1, ~0.0) = 0.123E1 +- (0.123E1, ~0.0) = 0.123E1 +/ (0.123E1, ~0.0) = ~inf +nextAfter (0.123E1, ~0.0) = 0.12299999999999998E1 +rem (0.123E1, ~0.0) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300000000000002E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123E1, ~inf) = ~inf ++ (0.123E1, ~inf) = ~inf +- (0.123E1, ~inf) = inf +/ (0.123E1, ~inf) = ~0.0 +nextAfter (0.123E1, ~inf) = 0.12299999999999998E1 +rem (0.123E1, ~inf) = 0.123E1 +* (0.123E1, nan) = nan ++ (0.123E1, nan) = nan +- (0.123E1, nan) = nan +/ (0.123E1, nan) = nan +nextAfter (0.123E1, nan) = nan +rem (0.123E1, nan) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300000000000002E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123, 0.17976931348623157E309) = 0.22111625558806483E308 ++ (0.123, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123, 0.17976931348623157E309) = 0.684210211490966E~309 +nextAfter (0.123, 0.17976931348623157E309) = 0.12300000000000001 +rem (0.123, 0.17976931348623157E309) = 0.123 +* (0.123, 0.8988465674311579E308) = 0.11055812779403241E308 ++ (0.123, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123, 0.8988465674311579E308) = 0.136842042298193E~308 +nextAfter (0.123, 0.8988465674311579E308) = 0.12300000000000001 +rem (0.123, 0.8988465674311579E308) = 0.123 +* (0.123, 0.123E4) = 0.15129E3 ++ (0.123, 0.123E4) = 0.1230123E4 +- (0.123, 0.123E4) = ~0.1229877E4 +/ (0.123, 0.123E4) = 0.1E~3 +nextAfter (0.123, 0.123E4) = 0.12300000000000001 +rem (0.123, 0.123E4) = 0.123 +* (0.123, 0.123E2) = 0.15129000000000001E1 ++ (0.123, 0.123E2) = 0.12423E2 +- (0.123, 0.123E2) = ~0.12177000000000001E2 +/ (0.123, 0.123E2) = 0.9999999999999998E~2 +nextAfter (0.123, 0.123E2) = 0.12300000000000001 +rem (0.123, 0.123E2) = 0.123 +* (0.123, 0.3141592653589793E1) = 0.38641589639154456 ++ (0.123, 0.3141592653589793E1) = 0.32645926535897933E1 +- (0.123, 0.3141592653589793E1) = ~0.3018592653589793E1 +/ (0.123, 0.3141592653589793E1) = 0.3915211600060625E~1 +nextAfter (0.123, 0.3141592653589793E1) = 0.12300000000000001 +rem (0.123, 0.3141592653589793E1) = 0.123 +* (0.123, 0.2718281828459045E1) = 0.33434866490046256 ++ (0.123, 0.2718281828459045E1) = 0.2841281828459045E1 +- (0.123, 0.2718281828459045E1) = ~0.25952818284590453E1 +/ (0.123, 0.2718281828459045E1) = 0.4524917126408741E~1 +nextAfter (0.123, 0.2718281828459045E1) = 0.12300000000000001 +rem (0.123, 0.2718281828459045E1) = 0.123 +* (0.123, 0.123E1) = 0.15129 ++ (0.123, 0.123E1) = 0.1353E1 +- (0.123, 0.123E1) = ~0.1107E1 +/ (0.123, 0.123E1) = 0.1 +nextAfter (0.123, 0.123E1) = 0.12300000000000001 +rem (0.123, 0.123E1) = 0.123 +* (0.123, 0.123) = 0.15129E~1 ++ (0.123, 0.123) = 0.246 +- (0.123, 0.123) = 0.0 +/ (0.123, 0.123) = 0.1E1 +nextAfter (0.123, 0.123) = 0.123 +rem (0.123, 0.123) = 0.0 +* (0.123, 0.123E~2) = 0.15129E~3 ++ (0.123, 0.123E~2) = 0.12423 +- (0.123, 0.123E~2) = 0.12177 +/ (0.123, 0.123E~2) = 0.1E3 +nextAfter (0.123, 0.123E~2) = 0.12299999999999998 +rem (0.123, 0.123E~2) = 0.0 +* (0.123, 0.22250738585072014E~307) = 0.273684084596386E~308 ++ (0.123, 0.22250738585072014E~307) = 0.123 +- (0.123, 0.22250738585072014E~307) = 0.123 +/ (0.123, 0.22250738585072014E~307) = 0.55279063897016213E307 +nextAfter (0.123, 0.22250738585072014E~307) = 0.12299999999999998 +rem (0.123, 0.22250738585072014E~307) = 0.0 +* (0.123, 0.11125369292536007E~307) = 0.136842042298193E~308 ++ (0.123, 0.11125369292536007E~307) = 0.123 +- (0.123, 0.11125369292536007E~307) = 0.123 +/ (0.123, 0.11125369292536007E~307) = 0.11055812779403243E308 +nextAfter (0.123, 0.11125369292536007E~307) = 0.12299999999999998 +rem (0.123, 0.11125369292536007E~307) = 0.0 +* (0.123, 0.5E~323) = 0.0 ++ (0.123, 0.5E~323) = 0.123 +- (0.123, 0.5E~323) = 0.123 +/ (0.123, 0.5E~323) = inf +nextAfter (0.123, 0.5E~323) = 0.12299999999999998 +rem (0.123, 0.5E~323) = ~inf +* (0.123, 0.0) = 0.0 ++ (0.123, 0.0) = 0.123 +- (0.123, 0.0) = 0.123 +/ (0.123, 0.0) = inf +nextAfter (0.123, 0.0) = 0.12299999999999998 +rem (0.123, 0.0) = nan +* (0.123, ~0.17976931348623157E309) = ~0.22111625558806483E308 ++ (0.123, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123, ~0.17976931348623157E309) = ~0.684210211490966E~309 +nextAfter (0.123, ~0.17976931348623157E309) = 0.12299999999999998 +rem (0.123, ~0.17976931348623157E309) = 0.123 +* (0.123, ~0.8988465674311579E308) = ~0.11055812779403241E308 ++ (0.123, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123, ~0.8988465674311579E308) = ~0.136842042298193E~308 +nextAfter (0.123, ~0.8988465674311579E308) = 0.12299999999999998 +rem (0.123, ~0.8988465674311579E308) = 0.123 +* (0.123, ~0.123E4) = ~0.15129E3 ++ (0.123, ~0.123E4) = ~0.1229877E4 +- (0.123, ~0.123E4) = 0.1230123E4 +/ (0.123, ~0.123E4) = ~0.1E~3 +nextAfter (0.123, ~0.123E4) = 0.12299999999999998 +rem (0.123, ~0.123E4) = 0.123 +* (0.123, ~0.123E2) = ~0.15129000000000001E1 ++ (0.123, ~0.123E2) = ~0.12177000000000001E2 +- (0.123, ~0.123E2) = 0.12423E2 +/ (0.123, ~0.123E2) = ~0.9999999999999998E~2 +nextAfter (0.123, ~0.123E2) = 0.12299999999999998 +rem (0.123, ~0.123E2) = 0.123 +* (0.123, ~0.3141592653589793E1) = ~0.38641589639154456 ++ (0.123, ~0.3141592653589793E1) = ~0.3018592653589793E1 +- (0.123, ~0.3141592653589793E1) = 0.32645926535897933E1 +/ (0.123, ~0.3141592653589793E1) = ~0.3915211600060625E~1 +nextAfter (0.123, ~0.3141592653589793E1) = 0.12299999999999998 +rem (0.123, ~0.3141592653589793E1) = 0.123 +* (0.123, ~0.2718281828459045E1) = ~0.33434866490046256 ++ (0.123, ~0.2718281828459045E1) = ~0.25952818284590453E1 +- (0.123, ~0.2718281828459045E1) = 0.2841281828459045E1 +/ (0.123, ~0.2718281828459045E1) = ~0.4524917126408741E~1 +nextAfter (0.123, ~0.2718281828459045E1) = 0.12299999999999998 +rem (0.123, ~0.2718281828459045E1) = 0.123 +* (0.123, ~0.123E1) = ~0.15129 ++ (0.123, ~0.123E1) = ~0.1107E1 +- (0.123, ~0.123E1) = 0.1353E1 +/ (0.123, ~0.123E1) = ~0.1 +nextAfter (0.123, ~0.123E1) = 0.12299999999999998 +rem (0.123, ~0.123E1) = 0.123 +* (0.123, ~0.123) = ~0.15129E~1 ++ (0.123, ~0.123) = 0.0 +- (0.123, ~0.123) = 0.246 +/ (0.123, ~0.123) = ~0.1E1 +nextAfter (0.123, ~0.123) = 0.12299999999999998 +rem (0.123, ~0.123) = 0.0 +* (0.123, ~0.123E~2) = ~0.15129E~3 ++ (0.123, ~0.123E~2) = 0.12177 +- (0.123, ~0.123E~2) = 0.12423 +/ (0.123, ~0.123E~2) = ~0.1E3 +nextAfter (0.123, ~0.123E~2) = 0.12299999999999998 +rem (0.123, ~0.123E~2) = 0.0 +* (0.123, ~0.22250738585072014E~307) = ~0.273684084596386E~308 ++ (0.123, ~0.22250738585072014E~307) = 0.123 +- (0.123, ~0.22250738585072014E~307) = 0.123 +/ (0.123, ~0.22250738585072014E~307) = ~0.55279063897016213E307 +nextAfter (0.123, ~0.22250738585072014E~307) = 0.12299999999999998 +rem (0.123, ~0.22250738585072014E~307) = 0.0 +* (0.123, ~0.11125369292536007E~307) = ~0.136842042298193E~308 ++ (0.123, ~0.11125369292536007E~307) = 0.123 +- (0.123, ~0.11125369292536007E~307) = 0.123 +/ (0.123, ~0.11125369292536007E~307) = ~0.11055812779403243E308 +nextAfter (0.123, ~0.11125369292536007E~307) = 0.12299999999999998 +rem (0.123, ~0.11125369292536007E~307) = 0.0 +* (0.123, ~0.5E~323) = ~0.0 ++ (0.123, ~0.5E~323) = 0.123 +- (0.123, ~0.5E~323) = 0.123 +/ (0.123, ~0.5E~323) = ~inf +nextAfter (0.123, ~0.5E~323) = 0.12299999999999998 +rem (0.123, ~0.5E~323) = ~inf +* (0.123, ~0.0) = ~0.0 ++ (0.123, ~0.0) = 0.123 +- (0.123, ~0.0) = 0.123 +/ (0.123, ~0.0) = ~inf +nextAfter (0.123, ~0.0) = 0.12299999999999998 +rem (0.123, ~0.0) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300000000000001 +rem (0.123, inf) = 0.123 +* (0.123, ~inf) = ~inf ++ (0.123, ~inf) = ~inf +- (0.123, ~inf) = inf +/ (0.123, ~inf) = ~0.0 +nextAfter (0.123, ~inf) = 0.12299999999999998 +rem (0.123, ~inf) = 0.123 +* (0.123, nan) = nan ++ (0.123, nan) = nan +- (0.123, nan) = nan +/ (0.123, nan) = nan +nextAfter (0.123, nan) = nan +rem (0.123, nan) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300000000000001 +rem (0.123, inf) = 0.123 +* (0.123E~2, 0.17976931348623157E309) = 0.2211162555880648E306 ++ (0.123E~2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E~2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E~2, 0.17976931348623157E309) = 0.684210211491E~311 +nextAfter (0.123E~2, 0.17976931348623157E309) = 0.12300000000000002E~2 +rem (0.123E~2, 0.17976931348623157E309) = 0.123E~2 +* (0.123E~2, 0.8988465674311579E308) = 0.1105581277940324E306 ++ (0.123E~2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E~2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E~2, 0.8988465674311579E308) = 0.1368420422982E~310 +nextAfter (0.123E~2, 0.8988465674311579E308) = 0.12300000000000002E~2 +rem (0.123E~2, 0.8988465674311579E308) = 0.123E~2 +* (0.123E~2, 0.123E4) = 0.15129E1 ++ (0.123E~2, 0.123E4) = 0.123000123E4 +- (0.123E~2, 0.123E4) = ~0.122999877E4 +/ (0.123E~2, 0.123E4) = 0.1E~5 +nextAfter (0.123E~2, 0.123E4) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E4) = 0.123E~2 +* (0.123E~2, 0.123E2) = 0.15129E~1 ++ (0.123E~2, 0.123E2) = 0.1230123E2 +- (0.123E~2, 0.123E2) = ~0.12298770000000001E2 +/ (0.123E~2, 0.123E2) = 0.9999999999999999E~4 +nextAfter (0.123E~2, 0.123E2) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E2) = 0.123E~2 +* (0.123E~2, 0.3141592653589793E1) = 0.38641589639154456E~2 ++ (0.123E~2, 0.3141592653589793E1) = 0.3142822653589793E1 +- (0.123E~2, 0.3141592653589793E1) = ~0.3140362653589793E1 +/ (0.123E~2, 0.3141592653589793E1) = 0.3915211600060625E~3 +nextAfter (0.123E~2, 0.3141592653589793E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.3141592653589793E1) = 0.123E~2 +* (0.123E~2, 0.2718281828459045E1) = 0.33434866490046253E~2 ++ (0.123E~2, 0.2718281828459045E1) = 0.2719511828459045E1 +- (0.123E~2, 0.2718281828459045E1) = ~0.2717051828459045E1 +/ (0.123E~2, 0.2718281828459045E1) = 0.45249171264087406E~3 +nextAfter (0.123E~2, 0.2718281828459045E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.2718281828459045E1) = 0.123E~2 +* (0.123E~2, 0.123E1) = 0.15129E~2 ++ (0.123E~2, 0.123E1) = 0.123123E1 +- (0.123E~2, 0.123E1) = ~0.122877E1 +/ (0.123E~2, 0.123E1) = 0.1E~2 +nextAfter (0.123E~2, 0.123E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E1) = 0.123E~2 +* (0.123E~2, 0.123) = 0.15129E~3 ++ (0.123E~2, 0.123) = 0.12423 +- (0.123E~2, 0.123) = ~0.12177 +/ (0.123E~2, 0.123) = 0.1E~1 +nextAfter (0.123E~2, 0.123) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123) = 0.123E~2 +* (0.123E~2, 0.123E~2) = 0.15129E~5 ++ (0.123E~2, 0.123E~2) = 0.246E~2 +- (0.123E~2, 0.123E~2) = 0.0 +/ (0.123E~2, 0.123E~2) = 0.1E1 +nextAfter (0.123E~2, 0.123E~2) = 0.123E~2 +rem (0.123E~2, 0.123E~2) = 0.0 +* (0.123E~2, 0.22250738585072014E~307) = 0.2736840845964E~310 ++ (0.123E~2, 0.22250738585072014E~307) = 0.123E~2 +- (0.123E~2, 0.22250738585072014E~307) = 0.123E~2 +/ (0.123E~2, 0.22250738585072014E~307) = 0.5527906389701621E305 +nextAfter (0.123E~2, 0.22250738585072014E~307) = 0.12299999999999998E~2 +rem (0.123E~2, 0.22250738585072014E~307) = 0.0 +* (0.123E~2, 0.11125369292536007E~307) = 0.1368420422982E~310 ++ (0.123E~2, 0.11125369292536007E~307) = 0.123E~2 +- (0.123E~2, 0.11125369292536007E~307) = 0.123E~2 +/ (0.123E~2, 0.11125369292536007E~307) = 0.11055812779403243E306 +nextAfter (0.123E~2, 0.11125369292536007E~307) = 0.12299999999999998E~2 +rem (0.123E~2, 0.11125369292536007E~307) = 0.0 +* (0.123E~2, 0.5E~323) = 0.0 ++ (0.123E~2, 0.5E~323) = 0.123E~2 +- (0.123E~2, 0.5E~323) = 0.123E~2 +/ (0.123E~2, 0.5E~323) = inf +nextAfter (0.123E~2, 0.5E~323) = 0.12299999999999998E~2 +rem (0.123E~2, 0.5E~323) = ~inf +* (0.123E~2, 0.0) = 0.0 ++ (0.123E~2, 0.0) = 0.123E~2 +- (0.123E~2, 0.0) = 0.123E~2 +/ (0.123E~2, 0.0) = inf +nextAfter (0.123E~2, 0.0) = 0.12299999999999998E~2 +rem (0.123E~2, 0.0) = nan +* (0.123E~2, ~0.17976931348623157E309) = ~0.2211162555880648E306 ++ (0.123E~2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E~2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E~2, ~0.17976931348623157E309) = ~0.684210211491E~311 +nextAfter (0.123E~2, ~0.17976931348623157E309) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.17976931348623157E309) = 0.123E~2 +* (0.123E~2, ~0.8988465674311579E308) = ~0.1105581277940324E306 ++ (0.123E~2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E~2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E~2, ~0.8988465674311579E308) = ~0.1368420422982E~310 +nextAfter (0.123E~2, ~0.8988465674311579E308) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.8988465674311579E308) = 0.123E~2 +* (0.123E~2, ~0.123E4) = ~0.15129E1 ++ (0.123E~2, ~0.123E4) = ~0.122999877E4 +- (0.123E~2, ~0.123E4) = 0.123000123E4 +/ (0.123E~2, ~0.123E4) = ~0.1E~5 +nextAfter (0.123E~2, ~0.123E4) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E4) = 0.123E~2 +* (0.123E~2, ~0.123E2) = ~0.15129E~1 ++ (0.123E~2, ~0.123E2) = ~0.12298770000000001E2 +- (0.123E~2, ~0.123E2) = 0.1230123E2 +/ (0.123E~2, ~0.123E2) = ~0.9999999999999999E~4 +nextAfter (0.123E~2, ~0.123E2) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E2) = 0.123E~2 +* (0.123E~2, ~0.3141592653589793E1) = ~0.38641589639154456E~2 ++ (0.123E~2, ~0.3141592653589793E1) = ~0.3140362653589793E1 +- (0.123E~2, ~0.3141592653589793E1) = 0.3142822653589793E1 +/ (0.123E~2, ~0.3141592653589793E1) = ~0.3915211600060625E~3 +nextAfter (0.123E~2, ~0.3141592653589793E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.3141592653589793E1) = 0.123E~2 +* (0.123E~2, ~0.2718281828459045E1) = ~0.33434866490046253E~2 ++ (0.123E~2, ~0.2718281828459045E1) = ~0.2717051828459045E1 +- (0.123E~2, ~0.2718281828459045E1) = 0.2719511828459045E1 +/ (0.123E~2, ~0.2718281828459045E1) = ~0.45249171264087406E~3 +nextAfter (0.123E~2, ~0.2718281828459045E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.2718281828459045E1) = 0.123E~2 +* (0.123E~2, ~0.123E1) = ~0.15129E~2 ++ (0.123E~2, ~0.123E1) = ~0.122877E1 +- (0.123E~2, ~0.123E1) = 0.123123E1 +/ (0.123E~2, ~0.123E1) = ~0.1E~2 +nextAfter (0.123E~2, ~0.123E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E1) = 0.123E~2 +* (0.123E~2, ~0.123) = ~0.15129E~3 ++ (0.123E~2, ~0.123) = ~0.12177 +- (0.123E~2, ~0.123) = 0.12423 +/ (0.123E~2, ~0.123) = ~0.1E~1 +nextAfter (0.123E~2, ~0.123) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123) = 0.123E~2 +* (0.123E~2, ~0.123E~2) = ~0.15129E~5 ++ (0.123E~2, ~0.123E~2) = 0.0 +- (0.123E~2, ~0.123E~2) = 0.246E~2 +/ (0.123E~2, ~0.123E~2) = ~0.1E1 +nextAfter (0.123E~2, ~0.123E~2) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E~2) = 0.0 +* (0.123E~2, ~0.22250738585072014E~307) = ~0.2736840845964E~310 ++ (0.123E~2, ~0.22250738585072014E~307) = 0.123E~2 +- (0.123E~2, ~0.22250738585072014E~307) = 0.123E~2 +/ (0.123E~2, ~0.22250738585072014E~307) = ~0.5527906389701621E305 +nextAfter (0.123E~2, ~0.22250738585072014E~307) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.22250738585072014E~307) = 0.0 +* (0.123E~2, ~0.11125369292536007E~307) = ~0.1368420422982E~310 ++ (0.123E~2, ~0.11125369292536007E~307) = 0.123E~2 +- (0.123E~2, ~0.11125369292536007E~307) = 0.123E~2 +/ (0.123E~2, ~0.11125369292536007E~307) = ~0.11055812779403243E306 +nextAfter (0.123E~2, ~0.11125369292536007E~307) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.11125369292536007E~307) = 0.0 +* (0.123E~2, ~0.5E~323) = ~0.0 ++ (0.123E~2, ~0.5E~323) = 0.123E~2 +- (0.123E~2, ~0.5E~323) = 0.123E~2 +/ (0.123E~2, ~0.5E~323) = ~inf +nextAfter (0.123E~2, ~0.5E~323) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.5E~323) = ~inf +* (0.123E~2, ~0.0) = ~0.0 ++ (0.123E~2, ~0.0) = 0.123E~2 +- (0.123E~2, ~0.0) = 0.123E~2 +/ (0.123E~2, ~0.0) = ~inf +nextAfter (0.123E~2, ~0.0) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.0) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300000000000002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.123E~2, ~inf) = ~inf ++ (0.123E~2, ~inf) = ~inf +- (0.123E~2, ~inf) = inf +/ (0.123E~2, ~inf) = ~0.0 +nextAfter (0.123E~2, ~inf) = 0.12299999999999998E~2 +rem (0.123E~2, ~inf) = 0.123E~2 +* (0.123E~2, nan) = nan ++ (0.123E~2, nan) = nan +- (0.123E~2, nan) = nan +/ (0.123E~2, nan) = nan +nextAfter (0.123E~2, nan) = nan +rem (0.123E~2, nan) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300000000000002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.22250738585072014E~307, 0.17976931348623157E309) = 0.39999999999999996E1 ++ (0.22250738585072014E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.22250738585072014E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.22250738585072014E~307, 0.17976931348623157E309) = 0.0 +nextAfter (0.22250738585072014E~307, 0.17976931348623157E309) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.17976931348623157E309) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.8988465674311579E308) = 0.19999999999999998E1 ++ (0.22250738585072014E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.22250738585072014E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.22250738585072014E~307, 0.8988465674311579E308) = 0.0 +nextAfter (0.22250738585072014E~307, 0.8988465674311579E308) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.8988465674311579E308) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E4) = 0.27368408459638577E~304 ++ (0.22250738585072014E~307, 0.123E4) = 0.123E4 +- (0.22250738585072014E~307, 0.123E4) = ~0.123E4 +/ (0.22250738585072014E~307, 0.123E4) = 0.18090031369976E~310 +nextAfter (0.22250738585072014E~307, 0.123E4) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E4) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E2) = 0.2736840845963858E~306 ++ (0.22250738585072014E~307, 0.123E2) = 0.123E2 +- (0.22250738585072014E~307, 0.123E2) = ~0.123E2 +/ (0.22250738585072014E~307, 0.123E2) = 0.1809003136997725E~308 +nextAfter (0.22250738585072014E~307, 0.123E2) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.3141592653589793E1) = 0.6990275687580919E~307 ++ (0.22250738585072014E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.22250738585072014E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.22250738585072014E~307, 0.3141592653589793E1) = 0.7082630066519554E~308 +nextAfter (0.22250738585072014E~307, 0.3141592653589793E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.3141592653589793E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.2718281828459045E1) = 0.6048377836559378E~307 ++ (0.22250738585072014E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.22250738585072014E~307, 0.2718281828459045E1) = 0.818558927632814E~308 +nextAfter (0.22250738585072014E~307, 0.2718281828459045E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.2718281828459045E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E1) = 0.27368408459638577E~307 ++ (0.22250738585072014E~307, 0.123E1) = 0.123E1 +- (0.22250738585072014E~307, 0.123E1) = ~0.123E1 +/ (0.22250738585072014E~307, 0.123E1) = 0.18090031369977247E~307 +nextAfter (0.22250738585072014E~307, 0.123E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123) = 0.273684084596386E~308 ++ (0.22250738585072014E~307, 0.123) = 0.123 +- (0.22250738585072014E~307, 0.123) = ~0.123 +/ (0.22250738585072014E~307, 0.123) = 0.1809003136997725E~306 +nextAfter (0.22250738585072014E~307, 0.123) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E~2) = 0.2736840845964E~310 ++ (0.22250738585072014E~307, 0.123E~2) = 0.123E~2 +- (0.22250738585072014E~307, 0.123E~2) = ~0.123E~2 +/ (0.22250738585072014E~307, 0.123E~2) = 0.18090031369977247E~304 +nextAfter (0.22250738585072014E~307, 0.123E~2) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E~2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 ++ (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.4450147717014403E~307 +- (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +/ (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.1E1 +nextAfter (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.22250738585072014E~307 +rem (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +* (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 ++ (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.3337610787760802E~307 +- (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.2E1 +nextAfter (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 +* (0.22250738585072014E~307, 0.5E~323) = 0.0 ++ (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507202E~307 +- (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507201E~307 +/ (0.22250738585072014E~307, 0.5E~323) = 0.4503599627370496E16 +nextAfter (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.5E~323) = 0.0 +* (0.22250738585072014E~307, 0.0) = 0.0 ++ (0.22250738585072014E~307, 0.0) = 0.22250738585072014E~307 +- (0.22250738585072014E~307, 0.0) = 0.22250738585072014E~307 +/ (0.22250738585072014E~307, 0.0) = inf +nextAfter (0.22250738585072014E~307, 0.0) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.0) = nan +* (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.39999999999999996E1 ++ (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.19999999999999998E1 ++ (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E4) = ~0.27368408459638577E~304 ++ (0.22250738585072014E~307, ~0.123E4) = ~0.123E4 +- (0.22250738585072014E~307, ~0.123E4) = 0.123E4 +/ (0.22250738585072014E~307, ~0.123E4) = ~0.18090031369976E~310 +nextAfter (0.22250738585072014E~307, ~0.123E4) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E4) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E2) = ~0.2736840845963858E~306 ++ (0.22250738585072014E~307, ~0.123E2) = ~0.123E2 +- (0.22250738585072014E~307, ~0.123E2) = 0.123E2 +/ (0.22250738585072014E~307, ~0.123E2) = ~0.1809003136997725E~308 +nextAfter (0.22250738585072014E~307, ~0.123E2) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.6990275687580919E~307 ++ (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.7082630066519554E~308 +nextAfter (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.6048377836559378E~307 ++ (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.818558927632814E~308 +nextAfter (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E1) = ~0.27368408459638577E~307 ++ (0.22250738585072014E~307, ~0.123E1) = ~0.123E1 +- (0.22250738585072014E~307, ~0.123E1) = 0.123E1 +/ (0.22250738585072014E~307, ~0.123E1) = ~0.18090031369977247E~307 +nextAfter (0.22250738585072014E~307, ~0.123E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123) = ~0.273684084596386E~308 ++ (0.22250738585072014E~307, ~0.123) = ~0.123 +- (0.22250738585072014E~307, ~0.123) = 0.123 +/ (0.22250738585072014E~307, ~0.123) = ~0.1809003136997725E~306 +nextAfter (0.22250738585072014E~307, ~0.123) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E~2) = ~0.2736840845964E~310 ++ (0.22250738585072014E~307, ~0.123E~2) = ~0.123E~2 +- (0.22250738585072014E~307, ~0.123E~2) = 0.123E~2 +/ (0.22250738585072014E~307, ~0.123E~2) = ~0.18090031369977247E~304 +nextAfter (0.22250738585072014E~307, ~0.123E~2) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E~2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.0 ++ (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +- (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.4450147717014403E~307 +/ (0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.1E1 +nextAfter (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +* (0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.0 ++ (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +- (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.3337610787760802E~307 +/ (0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.2E1 +nextAfter (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 +* (0.22250738585072014E~307, ~0.5E~323) = ~0.0 ++ (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507201E~307 +- (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507202E~307 +/ (0.22250738585072014E~307, ~0.5E~323) = ~0.4503599627370496E16 +nextAfter (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.5E~323) = 0.0 +* (0.22250738585072014E~307, ~0.0) = ~0.0 ++ (0.22250738585072014E~307, ~0.0) = 0.22250738585072014E~307 +- (0.22250738585072014E~307, ~0.0) = 0.22250738585072014E~307 +/ (0.22250738585072014E~307, ~0.0) = ~inf +nextAfter (0.22250738585072014E~307, ~0.0) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.0) = nan +* (0.22250738585072014E~307, inf) = inf ++ (0.22250738585072014E~307, inf) = inf +- (0.22250738585072014E~307, inf) = ~inf +/ (0.22250738585072014E~307, inf) = 0.0 +nextAfter (0.22250738585072014E~307, inf) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, inf) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~inf) = ~inf ++ (0.22250738585072014E~307, ~inf) = ~inf +- (0.22250738585072014E~307, ~inf) = inf +/ (0.22250738585072014E~307, ~inf) = ~0.0 +nextAfter (0.22250738585072014E~307, ~inf) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~inf) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, nan) = nan ++ (0.22250738585072014E~307, nan) = nan +- (0.22250738585072014E~307, nan) = nan +/ (0.22250738585072014E~307, nan) = nan +nextAfter (0.22250738585072014E~307, nan) = nan +rem (0.22250738585072014E~307, nan) = nan +* (0.22250738585072014E~307, inf) = inf ++ (0.22250738585072014E~307, inf) = inf +- (0.22250738585072014E~307, inf) = ~inf +/ (0.22250738585072014E~307, inf) = 0.0 +nextAfter (0.22250738585072014E~307, inf) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, inf) = 0.22250738585072014E~307 +* (0.11125369292536007E~307, 0.17976931348623157E309) = 0.19999999999999998E1 ++ (0.11125369292536007E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.11125369292536007E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.11125369292536007E~307, 0.17976931348623157E309) = 0.0 +nextAfter (0.11125369292536007E~307, 0.17976931348623157E309) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.17976931348623157E309) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.8988465674311579E308) = 0.9999999999999999 ++ (0.11125369292536007E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.11125369292536007E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.11125369292536007E~307, 0.8988465674311579E308) = 0.0 +nextAfter (0.11125369292536007E~307, 0.8988465674311579E308) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.8988465674311579E308) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E4) = 0.13684204229819289E~304 ++ (0.11125369292536007E~307, 0.123E4) = 0.123E4 +- (0.11125369292536007E~307, 0.123E4) = ~0.123E4 +/ (0.11125369292536007E~307, 0.123E4) = 0.904501568499E~311 +nextAfter (0.11125369292536007E~307, 0.123E4) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E4) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E2) = 0.1368420422981929E~306 ++ (0.11125369292536007E~307, 0.123E2) = 0.123E2 +- (0.11125369292536007E~307, 0.123E2) = ~0.123E2 +/ (0.11125369292536007E~307, 0.123E2) = 0.90450156849886E~309 +nextAfter (0.11125369292536007E~307, 0.123E2) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.3141592653589793E1) = 0.34951378437904593E~307 ++ (0.11125369292536007E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.11125369292536007E~307, 0.3141592653589793E1) = 0.3541315033259774E~308 +nextAfter (0.11125369292536007E~307, 0.3141592653589793E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.3141592653589793E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.2718281828459045E1) = 0.3024188918279689E~307 ++ (0.11125369292536007E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.11125369292536007E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.11125369292536007E~307, 0.2718281828459045E1) = 0.409279463816407E~308 +nextAfter (0.11125369292536007E~307, 0.2718281828459045E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.2718281828459045E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E1) = 0.1368420422981929E~307 ++ (0.11125369292536007E~307, 0.123E1) = 0.123E1 +- (0.11125369292536007E~307, 0.123E1) = ~0.123E1 +/ (0.11125369292536007E~307, 0.123E1) = 0.9045015684988623E~308 +nextAfter (0.11125369292536007E~307, 0.123E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123) = 0.136842042298193E~308 ++ (0.11125369292536007E~307, 0.123) = 0.123 +- (0.11125369292536007E~307, 0.123) = ~0.123 +/ (0.11125369292536007E~307, 0.123) = 0.9045015684988624E~307 +nextAfter (0.11125369292536007E~307, 0.123) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E~2) = 0.1368420422982E~310 ++ (0.11125369292536007E~307, 0.123E~2) = 0.123E~2 +- (0.11125369292536007E~307, 0.123E~2) = ~0.123E~2 +/ (0.11125369292536007E~307, 0.123E~2) = 0.9045015684988623E~305 +nextAfter (0.11125369292536007E~307, 0.123E~2) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E~2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.0 ++ (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.3337610787760802E~307 +- (0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536007E~307 +/ (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.5 +nextAfter (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 ++ (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.22250738585072014E~307 +- (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +/ (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.1E1 +nextAfter (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.11125369292536007E~307 +rem (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +* (0.11125369292536007E~307, 0.5E~323) = 0.0 ++ (0.11125369292536007E~307, 0.5E~323) = 0.1112536929253601E~307 +- (0.11125369292536007E~307, 0.5E~323) = 0.11125369292536E~307 +/ (0.11125369292536007E~307, 0.5E~323) = 0.2251799813685248E16 +nextAfter (0.11125369292536007E~307, 0.5E~323) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, 0.5E~323) = 0.0 +* (0.11125369292536007E~307, 0.0) = 0.0 ++ (0.11125369292536007E~307, 0.0) = 0.11125369292536007E~307 +- (0.11125369292536007E~307, 0.0) = 0.11125369292536007E~307 +/ (0.11125369292536007E~307, 0.0) = inf +nextAfter (0.11125369292536007E~307, 0.0) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, 0.0) = nan +* (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.19999999999999998E1 ++ (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.9999999999999999 ++ (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E4) = ~0.13684204229819289E~304 ++ (0.11125369292536007E~307, ~0.123E4) = ~0.123E4 +- (0.11125369292536007E~307, ~0.123E4) = 0.123E4 +/ (0.11125369292536007E~307, ~0.123E4) = ~0.904501568499E~311 +nextAfter (0.11125369292536007E~307, ~0.123E4) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E4) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E2) = ~0.1368420422981929E~306 ++ (0.11125369292536007E~307, ~0.123E2) = ~0.123E2 +- (0.11125369292536007E~307, ~0.123E2) = 0.123E2 +/ (0.11125369292536007E~307, ~0.123E2) = ~0.90450156849886E~309 +nextAfter (0.11125369292536007E~307, ~0.123E2) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.34951378437904593E~307 ++ (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3541315033259774E~308 +nextAfter (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.3024188918279689E~307 ++ (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.409279463816407E~308 +nextAfter (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E1) = ~0.1368420422981929E~307 ++ (0.11125369292536007E~307, ~0.123E1) = ~0.123E1 +- (0.11125369292536007E~307, ~0.123E1) = 0.123E1 +/ (0.11125369292536007E~307, ~0.123E1) = ~0.9045015684988623E~308 +nextAfter (0.11125369292536007E~307, ~0.123E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123) = ~0.136842042298193E~308 ++ (0.11125369292536007E~307, ~0.123) = ~0.123 +- (0.11125369292536007E~307, ~0.123) = 0.123 +/ (0.11125369292536007E~307, ~0.123) = ~0.9045015684988624E~307 +nextAfter (0.11125369292536007E~307, ~0.123) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E~2) = ~0.1368420422982E~310 ++ (0.11125369292536007E~307, ~0.123E~2) = ~0.123E~2 +- (0.11125369292536007E~307, ~0.123E~2) = 0.123E~2 +/ (0.11125369292536007E~307, ~0.123E~2) = ~0.9045015684988623E~305 +nextAfter (0.11125369292536007E~307, ~0.123E~2) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E~2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.0 ++ (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.11125369292536007E~307 +- (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.3337610787760802E~307 +/ (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.5 +nextAfter (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.0 ++ (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +- (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.22250738585072014E~307 +/ (0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.1E1 +nextAfter (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +* (0.11125369292536007E~307, ~0.5E~323) = ~0.0 ++ (0.11125369292536007E~307, ~0.5E~323) = 0.11125369292536E~307 +- (0.11125369292536007E~307, ~0.5E~323) = 0.1112536929253601E~307 +/ (0.11125369292536007E~307, ~0.5E~323) = ~0.2251799813685248E16 +nextAfter (0.11125369292536007E~307, ~0.5E~323) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.5E~323) = 0.0 +* (0.11125369292536007E~307, ~0.0) = ~0.0 ++ (0.11125369292536007E~307, ~0.0) = 0.11125369292536007E~307 +- (0.11125369292536007E~307, ~0.0) = 0.11125369292536007E~307 +/ (0.11125369292536007E~307, ~0.0) = ~inf +nextAfter (0.11125369292536007E~307, ~0.0) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.0) = nan +* (0.11125369292536007E~307, inf) = inf ++ (0.11125369292536007E~307, inf) = inf +- (0.11125369292536007E~307, inf) = ~inf +/ (0.11125369292536007E~307, inf) = 0.0 +nextAfter (0.11125369292536007E~307, inf) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, inf) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~inf) = ~inf ++ (0.11125369292536007E~307, ~inf) = ~inf +- (0.11125369292536007E~307, ~inf) = inf +/ (0.11125369292536007E~307, ~inf) = ~0.0 +nextAfter (0.11125369292536007E~307, ~inf) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~inf) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, nan) = nan ++ (0.11125369292536007E~307, nan) = nan +- (0.11125369292536007E~307, nan) = nan +/ (0.11125369292536007E~307, nan) = nan +nextAfter (0.11125369292536007E~307, nan) = nan +rem (0.11125369292536007E~307, nan) = nan +* (0.11125369292536007E~307, inf) = inf ++ (0.11125369292536007E~307, inf) = inf +- (0.11125369292536007E~307, inf) = ~inf +/ (0.11125369292536007E~307, inf) = 0.0 +nextAfter (0.11125369292536007E~307, inf) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, inf) = 0.11125369292536007E~307 +* (0.5E~323, 0.17976931348623157E309) = 0.8881784197001251E~15 ++ (0.5E~323, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.5E~323, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.5E~323, 0.17976931348623157E309) = 0.0 +nextAfter (0.5E~323, 0.17976931348623157E309) = 0.1E~322 +rem (0.5E~323, 0.17976931348623157E309) = 0.5E~323 +* (0.5E~323, 0.8988465674311579E308) = 0.44408920985006257E~15 ++ (0.5E~323, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.5E~323, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.5E~323, 0.8988465674311579E308) = 0.0 +nextAfter (0.5E~323, 0.8988465674311579E308) = 0.1E~322 +rem (0.5E~323, 0.8988465674311579E308) = 0.5E~323 +* (0.5E~323, 0.123E4) = 0.6077E~320 ++ (0.5E~323, 0.123E4) = 0.123E4 +- (0.5E~323, 0.123E4) = ~0.123E4 +/ (0.5E~323, 0.123E4) = 0.0 +nextAfter (0.5E~323, 0.123E4) = 0.1E~322 +rem (0.5E~323, 0.123E4) = 0.5E~323 +* (0.5E~323, 0.123E2) = 0.6E~322 ++ (0.5E~323, 0.123E2) = 0.123E2 +- (0.5E~323, 0.123E2) = ~0.123E2 +/ (0.5E~323, 0.123E2) = 0.0 +nextAfter (0.5E~323, 0.123E2) = 0.1E~322 +rem (0.5E~323, 0.123E2) = 0.5E~323 +* (0.5E~323, 0.3141592653589793E1) = 0.15E~322 ++ (0.5E~323, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.5E~323, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.5E~323, 0.3141592653589793E1) = 0.0 +nextAfter (0.5E~323, 0.3141592653589793E1) = 0.1E~322 +rem (0.5E~323, 0.3141592653589793E1) = 0.5E~323 +* (0.5E~323, 0.2718281828459045E1) = 0.15E~322 ++ (0.5E~323, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.5E~323, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.5E~323, 0.2718281828459045E1) = 0.0 +nextAfter (0.5E~323, 0.2718281828459045E1) = 0.1E~322 +rem (0.5E~323, 0.2718281828459045E1) = 0.5E~323 +* (0.5E~323, 0.123E1) = 0.5E~323 ++ (0.5E~323, 0.123E1) = 0.123E1 +- (0.5E~323, 0.123E1) = ~0.123E1 +/ (0.5E~323, 0.123E1) = 0.5E~323 +nextAfter (0.5E~323, 0.123E1) = 0.1E~322 +rem (0.5E~323, 0.123E1) = 0.5E~323 +* (0.5E~323, 0.123) = 0.0 ++ (0.5E~323, 0.123) = 0.123 +- (0.5E~323, 0.123) = ~0.123 +/ (0.5E~323, 0.123) = 0.4E~322 +nextAfter (0.5E~323, 0.123) = 0.1E~322 +rem (0.5E~323, 0.123) = 0.5E~323 +* (0.5E~323, 0.123E~2) = 0.0 ++ (0.5E~323, 0.123E~2) = 0.123E~2 +- (0.5E~323, 0.123E~2) = ~0.123E~2 +/ (0.5E~323, 0.123E~2) = 0.4017E~320 +nextAfter (0.5E~323, 0.123E~2) = 0.1E~322 +rem (0.5E~323, 0.123E~2) = 0.5E~323 +* (0.5E~323, 0.22250738585072014E~307) = 0.0 ++ (0.5E~323, 0.22250738585072014E~307) = 0.2225073858507202E~307 +- (0.5E~323, 0.22250738585072014E~307) = ~0.2225073858507201E~307 +/ (0.5E~323, 0.22250738585072014E~307) = 0.2220446049250313E~15 +nextAfter (0.5E~323, 0.22250738585072014E~307) = 0.1E~322 +rem (0.5E~323, 0.22250738585072014E~307) = 0.5E~323 +* (0.5E~323, 0.11125369292536007E~307) = 0.0 ++ (0.5E~323, 0.11125369292536007E~307) = 0.1112536929253601E~307 +- (0.5E~323, 0.11125369292536007E~307) = ~0.11125369292536E~307 +/ (0.5E~323, 0.11125369292536007E~307) = 0.4440892098500626E~15 +nextAfter (0.5E~323, 0.11125369292536007E~307) = 0.1E~322 +rem (0.5E~323, 0.11125369292536007E~307) = 0.5E~323 +* (0.5E~323, 0.5E~323) = 0.0 ++ (0.5E~323, 0.5E~323) = 0.1E~322 +- (0.5E~323, 0.5E~323) = 0.0 +/ (0.5E~323, 0.5E~323) = 0.1E1 +nextAfter (0.5E~323, 0.5E~323) = 0.5E~323 +rem (0.5E~323, 0.5E~323) = 0.0 +* (0.5E~323, 0.0) = 0.0 ++ (0.5E~323, 0.0) = 0.5E~323 +- (0.5E~323, 0.0) = 0.5E~323 +/ (0.5E~323, 0.0) = inf +nextAfter (0.5E~323, 0.0) = 0.0 +rem (0.5E~323, 0.0) = nan +* (0.5E~323, ~0.17976931348623157E309) = ~0.8881784197001251E~15 ++ (0.5E~323, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.5E~323, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.5E~323, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.5E~323, ~0.17976931348623157E309) = 0.0 +rem (0.5E~323, ~0.17976931348623157E309) = 0.5E~323 +* (0.5E~323, ~0.8988465674311579E308) = ~0.44408920985006257E~15 ++ (0.5E~323, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.5E~323, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.5E~323, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.5E~323, ~0.8988465674311579E308) = 0.0 +rem (0.5E~323, ~0.8988465674311579E308) = 0.5E~323 +* (0.5E~323, ~0.123E4) = ~0.6077E~320 ++ (0.5E~323, ~0.123E4) = ~0.123E4 +- (0.5E~323, ~0.123E4) = 0.123E4 +/ (0.5E~323, ~0.123E4) = ~0.0 +nextAfter (0.5E~323, ~0.123E4) = 0.0 +rem (0.5E~323, ~0.123E4) = 0.5E~323 +* (0.5E~323, ~0.123E2) = ~0.6E~322 ++ (0.5E~323, ~0.123E2) = ~0.123E2 +- (0.5E~323, ~0.123E2) = 0.123E2 +/ (0.5E~323, ~0.123E2) = ~0.0 +nextAfter (0.5E~323, ~0.123E2) = 0.0 +rem (0.5E~323, ~0.123E2) = 0.5E~323 +* (0.5E~323, ~0.3141592653589793E1) = ~0.15E~322 ++ (0.5E~323, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.5E~323, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.5E~323, ~0.3141592653589793E1) = ~0.0 +nextAfter (0.5E~323, ~0.3141592653589793E1) = 0.0 +rem (0.5E~323, ~0.3141592653589793E1) = 0.5E~323 +* (0.5E~323, ~0.2718281828459045E1) = ~0.15E~322 ++ (0.5E~323, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.5E~323, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.5E~323, ~0.2718281828459045E1) = ~0.0 +nextAfter (0.5E~323, ~0.2718281828459045E1) = 0.0 +rem (0.5E~323, ~0.2718281828459045E1) = 0.5E~323 +* (0.5E~323, ~0.123E1) = ~0.5E~323 ++ (0.5E~323, ~0.123E1) = ~0.123E1 +- (0.5E~323, ~0.123E1) = 0.123E1 +/ (0.5E~323, ~0.123E1) = ~0.5E~323 +nextAfter (0.5E~323, ~0.123E1) = 0.0 +rem (0.5E~323, ~0.123E1) = 0.5E~323 +* (0.5E~323, ~0.123) = ~0.0 ++ (0.5E~323, ~0.123) = ~0.123 +- (0.5E~323, ~0.123) = 0.123 +/ (0.5E~323, ~0.123) = ~0.4E~322 +nextAfter (0.5E~323, ~0.123) = 0.0 +rem (0.5E~323, ~0.123) = 0.5E~323 +* (0.5E~323, ~0.123E~2) = ~0.0 ++ (0.5E~323, ~0.123E~2) = ~0.123E~2 +- (0.5E~323, ~0.123E~2) = 0.123E~2 +/ (0.5E~323, ~0.123E~2) = ~0.4017E~320 +nextAfter (0.5E~323, ~0.123E~2) = 0.0 +rem (0.5E~323, ~0.123E~2) = 0.5E~323 +* (0.5E~323, ~0.22250738585072014E~307) = ~0.0 ++ (0.5E~323, ~0.22250738585072014E~307) = ~0.2225073858507201E~307 +- (0.5E~323, ~0.22250738585072014E~307) = 0.2225073858507202E~307 +/ (0.5E~323, ~0.22250738585072014E~307) = ~0.2220446049250313E~15 +nextAfter (0.5E~323, ~0.22250738585072014E~307) = 0.0 +rem (0.5E~323, ~0.22250738585072014E~307) = 0.5E~323 +* (0.5E~323, ~0.11125369292536007E~307) = ~0.0 ++ (0.5E~323, ~0.11125369292536007E~307) = ~0.11125369292536E~307 +- (0.5E~323, ~0.11125369292536007E~307) = 0.1112536929253601E~307 +/ (0.5E~323, ~0.11125369292536007E~307) = ~0.4440892098500626E~15 +nextAfter (0.5E~323, ~0.11125369292536007E~307) = 0.0 +rem (0.5E~323, ~0.11125369292536007E~307) = 0.5E~323 +* (0.5E~323, ~0.5E~323) = ~0.0 ++ (0.5E~323, ~0.5E~323) = 0.0 +- (0.5E~323, ~0.5E~323) = 0.1E~322 +/ (0.5E~323, ~0.5E~323) = ~0.1E1 +nextAfter (0.5E~323, ~0.5E~323) = 0.0 +rem (0.5E~323, ~0.5E~323) = 0.0 +* (0.5E~323, ~0.0) = ~0.0 ++ (0.5E~323, ~0.0) = 0.5E~323 +- (0.5E~323, ~0.0) = 0.5E~323 +/ (0.5E~323, ~0.0) = ~inf +nextAfter (0.5E~323, ~0.0) = 0.0 +rem (0.5E~323, ~0.0) = nan +* (0.5E~323, inf) = inf ++ (0.5E~323, inf) = inf +- (0.5E~323, inf) = ~inf +/ (0.5E~323, inf) = 0.0 +nextAfter (0.5E~323, inf) = 0.1E~322 +rem (0.5E~323, inf) = 0.5E~323 +* (0.5E~323, ~inf) = ~inf ++ (0.5E~323, ~inf) = ~inf +- (0.5E~323, ~inf) = inf +/ (0.5E~323, ~inf) = ~0.0 +nextAfter (0.5E~323, ~inf) = 0.0 +rem (0.5E~323, ~inf) = 0.5E~323 +* (0.5E~323, nan) = nan ++ (0.5E~323, nan) = nan +- (0.5E~323, nan) = nan +/ (0.5E~323, nan) = nan +nextAfter (0.5E~323, nan) = nan +rem (0.5E~323, nan) = nan +* (0.5E~323, inf) = inf ++ (0.5E~323, inf) = inf +- (0.5E~323, inf) = ~inf +/ (0.5E~323, inf) = 0.0 +nextAfter (0.5E~323, inf) = 0.1E~322 +rem (0.5E~323, inf) = 0.5E~323 +* (0.0, 0.17976931348623157E309) = 0.0 ++ (0.0, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.0, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.0, 0.17976931348623157E309) = 0.0 +nextAfter (0.0, 0.17976931348623157E309) = 0.5E~323 +rem (0.0, 0.17976931348623157E309) = 0.0 +* (0.0, 0.8988465674311579E308) = 0.0 ++ (0.0, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.0, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.0, 0.8988465674311579E308) = 0.0 +nextAfter (0.0, 0.8988465674311579E308) = 0.5E~323 +rem (0.0, 0.8988465674311579E308) = 0.0 +* (0.0, 0.123E4) = 0.0 ++ (0.0, 0.123E4) = 0.123E4 +- (0.0, 0.123E4) = ~0.123E4 +/ (0.0, 0.123E4) = 0.0 +nextAfter (0.0, 0.123E4) = 0.5E~323 +rem (0.0, 0.123E4) = 0.0 +* (0.0, 0.123E2) = 0.0 ++ (0.0, 0.123E2) = 0.123E2 +- (0.0, 0.123E2) = ~0.123E2 +/ (0.0, 0.123E2) = 0.0 +nextAfter (0.0, 0.123E2) = 0.5E~323 +rem (0.0, 0.123E2) = 0.0 +* (0.0, 0.3141592653589793E1) = 0.0 ++ (0.0, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.0, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.0, 0.3141592653589793E1) = 0.0 +nextAfter (0.0, 0.3141592653589793E1) = 0.5E~323 +rem (0.0, 0.3141592653589793E1) = 0.0 +* (0.0, 0.2718281828459045E1) = 0.0 ++ (0.0, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.0, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.0, 0.2718281828459045E1) = 0.0 +nextAfter (0.0, 0.2718281828459045E1) = 0.5E~323 +rem (0.0, 0.2718281828459045E1) = 0.0 +* (0.0, 0.123E1) = 0.0 ++ (0.0, 0.123E1) = 0.123E1 +- (0.0, 0.123E1) = ~0.123E1 +/ (0.0, 0.123E1) = 0.0 +nextAfter (0.0, 0.123E1) = 0.5E~323 +rem (0.0, 0.123E1) = 0.0 +* (0.0, 0.123) = 0.0 ++ (0.0, 0.123) = 0.123 +- (0.0, 0.123) = ~0.123 +/ (0.0, 0.123) = 0.0 +nextAfter (0.0, 0.123) = 0.5E~323 +rem (0.0, 0.123) = 0.0 +* (0.0, 0.123E~2) = 0.0 ++ (0.0, 0.123E~2) = 0.123E~2 +- (0.0, 0.123E~2) = ~0.123E~2 +/ (0.0, 0.123E~2) = 0.0 +nextAfter (0.0, 0.123E~2) = 0.5E~323 +rem (0.0, 0.123E~2) = 0.0 +* (0.0, 0.22250738585072014E~307) = 0.0 ++ (0.0, 0.22250738585072014E~307) = 0.22250738585072014E~307 +- (0.0, 0.22250738585072014E~307) = ~0.22250738585072014E~307 +/ (0.0, 0.22250738585072014E~307) = 0.0 +nextAfter (0.0, 0.22250738585072014E~307) = 0.5E~323 +rem (0.0, 0.22250738585072014E~307) = 0.0 +* (0.0, 0.11125369292536007E~307) = 0.0 ++ (0.0, 0.11125369292536007E~307) = 0.11125369292536007E~307 +- (0.0, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (0.0, 0.11125369292536007E~307) = 0.0 +nextAfter (0.0, 0.11125369292536007E~307) = 0.5E~323 +rem (0.0, 0.11125369292536007E~307) = 0.0 +* (0.0, 0.5E~323) = 0.0 ++ (0.0, 0.5E~323) = 0.5E~323 +- (0.0, 0.5E~323) = ~0.5E~323 +/ (0.0, 0.5E~323) = 0.0 +nextAfter (0.0, 0.5E~323) = 0.5E~323 +rem (0.0, 0.5E~323) = 0.0 +* (0.0, 0.0) = 0.0 ++ (0.0, 0.0) = 0.0 +- (0.0, 0.0) = 0.0 +/ (0.0, 0.0) = nan +nextAfter (0.0, 0.0) = 0.0 +rem (0.0, 0.0) = 0.0 +* (0.0, ~0.17976931348623157E309) = ~0.0 ++ (0.0, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.0, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.0, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.0, ~0.17976931348623157E309) = ~0.5E~323 +rem (0.0, ~0.17976931348623157E309) = 0.0 +* (0.0, ~0.8988465674311579E308) = ~0.0 ++ (0.0, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.0, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.0, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.0, ~0.8988465674311579E308) = ~0.5E~323 +rem (0.0, ~0.8988465674311579E308) = 0.0 +* (0.0, ~0.123E4) = ~0.0 ++ (0.0, ~0.123E4) = ~0.123E4 +- (0.0, ~0.123E4) = 0.123E4 +/ (0.0, ~0.123E4) = ~0.0 +nextAfter (0.0, ~0.123E4) = ~0.5E~323 +rem (0.0, ~0.123E4) = 0.0 +* (0.0, ~0.123E2) = ~0.0 ++ (0.0, ~0.123E2) = ~0.123E2 +- (0.0, ~0.123E2) = 0.123E2 +/ (0.0, ~0.123E2) = ~0.0 +nextAfter (0.0, ~0.123E2) = ~0.5E~323 +rem (0.0, ~0.123E2) = 0.0 +* (0.0, ~0.3141592653589793E1) = ~0.0 ++ (0.0, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.0, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.0, ~0.3141592653589793E1) = ~0.0 +nextAfter (0.0, ~0.3141592653589793E1) = ~0.5E~323 +rem (0.0, ~0.3141592653589793E1) = 0.0 +* (0.0, ~0.2718281828459045E1) = ~0.0 ++ (0.0, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.0, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.0, ~0.2718281828459045E1) = ~0.0 +nextAfter (0.0, ~0.2718281828459045E1) = ~0.5E~323 +rem (0.0, ~0.2718281828459045E1) = 0.0 +* (0.0, ~0.123E1) = ~0.0 ++ (0.0, ~0.123E1) = ~0.123E1 +- (0.0, ~0.123E1) = 0.123E1 +/ (0.0, ~0.123E1) = ~0.0 +nextAfter (0.0, ~0.123E1) = ~0.5E~323 +rem (0.0, ~0.123E1) = 0.0 +* (0.0, ~0.123) = ~0.0 ++ (0.0, ~0.123) = ~0.123 +- (0.0, ~0.123) = 0.123 +/ (0.0, ~0.123) = ~0.0 +nextAfter (0.0, ~0.123) = ~0.5E~323 +rem (0.0, ~0.123) = 0.0 +* (0.0, ~0.123E~2) = ~0.0 ++ (0.0, ~0.123E~2) = ~0.123E~2 +- (0.0, ~0.123E~2) = 0.123E~2 +/ (0.0, ~0.123E~2) = ~0.0 +nextAfter (0.0, ~0.123E~2) = ~0.5E~323 +rem (0.0, ~0.123E~2) = 0.0 +* (0.0, ~0.22250738585072014E~307) = ~0.0 ++ (0.0, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +- (0.0, ~0.22250738585072014E~307) = 0.22250738585072014E~307 +/ (0.0, ~0.22250738585072014E~307) = ~0.0 +nextAfter (0.0, ~0.22250738585072014E~307) = ~0.5E~323 +rem (0.0, ~0.22250738585072014E~307) = 0.0 +* (0.0, ~0.11125369292536007E~307) = ~0.0 ++ (0.0, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (0.0, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (0.0, ~0.11125369292536007E~307) = ~0.0 +nextAfter (0.0, ~0.11125369292536007E~307) = ~0.5E~323 +rem (0.0, ~0.11125369292536007E~307) = 0.0 +* (0.0, ~0.5E~323) = ~0.0 ++ (0.0, ~0.5E~323) = ~0.5E~323 +- (0.0, ~0.5E~323) = 0.5E~323 +/ (0.0, ~0.5E~323) = ~0.0 +nextAfter (0.0, ~0.5E~323) = ~0.5E~323 +rem (0.0, ~0.5E~323) = 0.0 +* (0.0, ~0.0) = ~0.0 ++ (0.0, ~0.0) = 0.0 +- (0.0, ~0.0) = 0.0 +/ (0.0, ~0.0) = nan +nextAfter (0.0, ~0.0) = ~0.0 +rem (0.0, ~0.0) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.5E~323 +rem (0.0, inf) = 0.0 +* (0.0, ~inf) = nan ++ (0.0, ~inf) = ~inf +- (0.0, ~inf) = inf +/ (0.0, ~inf) = ~0.0 +nextAfter (0.0, ~inf) = ~0.5E~323 +rem (0.0, ~inf) = 0.0 +* (0.0, nan) = nan ++ (0.0, nan) = nan +- (0.0, nan) = nan +/ (0.0, nan) = nan +nextAfter (0.0, nan) = nan +rem (0.0, nan) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.5E~323 +rem (0.0, inf) = 0.0 +* (~0.17976931348623157E309, 0.17976931348623157E309) = ~inf ++ (~0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +- (~0.17976931348623157E309, 0.17976931348623157E309) = ~inf +/ (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.1E1 +nextAfter (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +* (~0.17976931348623157E309, 0.8988465674311579E308) = ~inf ++ (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.17976931348623157E309, 0.8988465674311579E308) = ~inf +/ (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.2E1 +nextAfter (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.8988465674311579E308) = 0.0 +* (~0.17976931348623157E309, 0.123E4) = ~inf ++ (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E4) = ~0.1461539134034403E306 +nextAfter (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E4) = 0.0 +* (~0.17976931348623157E309, 0.123E2) = ~inf ++ (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E2) = ~0.1461539134034403E308 +nextAfter (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E2) = 0.0 +* (~0.17976931348623157E309, 0.3141592653589793E1) = ~inf ++ (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.5722234971514056E308 +nextAfter (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.3141592653589793E1) = 0.0 +* (~0.17976931348623157E309, 0.2718281828459045E1) = ~inf ++ (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.661334345850887E308 +nextAfter (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, 0.123E1) = ~inf ++ (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E1) = ~0.1461539134034403E309 +nextAfter (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, 0.123) = ~0.22111625558806483E308 ++ (~0.17976931348623157E309, 0.123) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123) = ~inf +nextAfter (~0.17976931348623157E309, 0.123) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123) = inf +* (~0.17976931348623157E309, 0.123E~2) = ~0.2211162555880648E306 ++ (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E~2) = ~inf +nextAfter (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E~2) = inf +* (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.39999999999999996E1 ++ (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.22250738585072014E~307) = ~inf +nextAfter (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.22250738585072014E~307) = inf +* (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.19999999999999998E1 ++ (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.11125369292536007E~307) = ~inf +nextAfter (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.11125369292536007E~307) = inf +* (~0.17976931348623157E309, 0.5E~323) = ~0.8881784197001251E~15 ++ (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.5E~323) = ~inf +nextAfter (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.5E~323) = inf +* (~0.17976931348623157E309, 0.0) = ~0.0 ++ (~0.17976931348623157E309, 0.0) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.0) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.0) = ~inf +nextAfter (~0.17976931348623157E309, 0.0) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.0) = nan +* (~0.17976931348623157E309, ~0.17976931348623157E309) = inf ++ (~0.17976931348623157E309, ~0.17976931348623157E309) = ~inf +- (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +/ (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.1E1 +nextAfter (~0.17976931348623157E309, ~0.17976931348623157E309) = ~0.17976931348623157E309 +rem (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +* (~0.17976931348623157E309, ~0.8988465674311579E308) = inf ++ (~0.17976931348623157E309, ~0.8988465674311579E308) = ~inf +- (~0.17976931348623157E309, ~0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.17976931348623157E309, ~0.8988465674311579E308) = 0.2E1 +nextAfter (~0.17976931348623157E309, ~0.8988465674311579E308) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.8988465674311579E308) = 0.0 +* (~0.17976931348623157E309, ~0.123E4) = inf ++ (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E4) = 0.1461539134034403E306 +nextAfter (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E4) = 0.0 +* (~0.17976931348623157E309, ~0.123E2) = inf ++ (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E2) = 0.1461539134034403E308 +nextAfter (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E2) = 0.0 +* (~0.17976931348623157E309, ~0.3141592653589793E1) = inf ++ (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.3141592653589793E1) = 0.5722234971514056E308 +nextAfter (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.3141592653589793E1) = 0.0 +* (~0.17976931348623157E309, ~0.2718281828459045E1) = inf ++ (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.2718281828459045E1) = 0.661334345850887E308 +nextAfter (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, ~0.123E1) = inf ++ (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E1) = 0.1461539134034403E309 +nextAfter (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E1) = ~0.199584030953472E293 +* (~0.17976931348623157E309, ~0.123) = 0.22111625558806483E308 ++ (~0.17976931348623157E309, ~0.123) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123) = inf +nextAfter (~0.17976931348623157E309, ~0.123) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123) = inf +* (~0.17976931348623157E309, ~0.123E~2) = 0.2211162555880648E306 ++ (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E~2) = inf +nextAfter (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E~2) = inf +* (~0.17976931348623157E309, ~0.22250738585072014E~307) = 0.39999999999999996E1 ++ (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.22250738585072014E~307) = inf +nextAfter (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.22250738585072014E~307) = inf +* (~0.17976931348623157E309, ~0.11125369292536007E~307) = 0.19999999999999998E1 ++ (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.11125369292536007E~307) = inf +nextAfter (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.11125369292536007E~307) = inf +* (~0.17976931348623157E309, ~0.5E~323) = 0.8881784197001251E~15 ++ (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.5E~323) = inf +nextAfter (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.5E~323) = inf +* (~0.17976931348623157E309, ~0.0) = 0.0 ++ (~0.17976931348623157E309, ~0.0) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.0) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.0) = inf +nextAfter (~0.17976931348623157E309, ~0.0) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.0) = nan +* (~0.17976931348623157E309, inf) = ~inf ++ (~0.17976931348623157E309, inf) = inf +- (~0.17976931348623157E309, inf) = ~inf +/ (~0.17976931348623157E309, inf) = ~0.0 +nextAfter (~0.17976931348623157E309, inf) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, inf) = ~0.17976931348623157E309 +* (~0.17976931348623157E309, ~inf) = inf ++ (~0.17976931348623157E309, ~inf) = ~inf +- (~0.17976931348623157E309, ~inf) = inf +/ (~0.17976931348623157E309, ~inf) = 0.0 +nextAfter (~0.17976931348623157E309, ~inf) = ~inf +rem (~0.17976931348623157E309, ~inf) = ~0.17976931348623157E309 +* (~0.17976931348623157E309, nan) = nan ++ (~0.17976931348623157E309, nan) = nan +- (~0.17976931348623157E309, nan) = nan +/ (~0.17976931348623157E309, nan) = nan +nextAfter (~0.17976931348623157E309, nan) = nan +rem (~0.17976931348623157E309, nan) = nan +* (~0.17976931348623157E309, inf) = ~inf ++ (~0.17976931348623157E309, inf) = inf +- (~0.17976931348623157E309, inf) = ~inf +/ (~0.17976931348623157E309, inf) = ~0.0 +nextAfter (~0.17976931348623157E309, inf) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, inf) = ~0.17976931348623157E309 +* (~0.8988465674311579E308, 0.17976931348623157E309) = ~inf ++ (~0.8988465674311579E308, 0.17976931348623157E309) = 0.8988465674311579E308 +- (~0.8988465674311579E308, 0.17976931348623157E309) = ~inf +/ (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.5 +nextAfter (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, 0.8988465674311579E308) = ~inf ++ (~0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +- (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.17976931348623157E309 +/ (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.1E1 +nextAfter (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +* (~0.8988465674311579E308, 0.123E4) = ~inf ++ (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E4) = ~0.7307695670172015E305 +nextAfter (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E4) = 0.0 +* (~0.8988465674311579E308, 0.123E2) = ~inf ++ (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E2) = ~0.7307695670172014E307 +nextAfter (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E2) = 0.0 +* (~0.8988465674311579E308, 0.3141592653589793E1) = ~inf ++ (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.2861117485757028E308 +nextAfter (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.3141592653589793E1) = 0.0 +* (~0.8988465674311579E308, 0.2718281828459045E1) = ~inf ++ (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.3306671729254435E308 +nextAfter (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, 0.123E1) = ~0.1105581277940324E309 ++ (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E1) = ~0.7307695670172015E308 +nextAfter (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, 0.123) = ~0.11055812779403241E308 ++ (~0.8988465674311579E308, 0.123) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123) = ~inf +nextAfter (~0.8988465674311579E308, 0.123) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123) = inf +* (~0.8988465674311579E308, 0.123E~2) = ~0.1105581277940324E306 ++ (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E~2) = ~inf +nextAfter (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E~2) = inf +* (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.19999999999999998E1 ++ (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.22250738585072014E~307) = ~inf +nextAfter (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.22250738585072014E~307) = inf +* (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.9999999999999999 ++ (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.11125369292536007E~307) = ~inf +nextAfter (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.11125369292536007E~307) = inf +* (~0.8988465674311579E308, 0.5E~323) = ~0.44408920985006257E~15 ++ (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.5E~323) = ~inf +nextAfter (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.5E~323) = inf +* (~0.8988465674311579E308, 0.0) = ~0.0 ++ (~0.8988465674311579E308, 0.0) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.0) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.0) = ~inf +nextAfter (~0.8988465674311579E308, 0.0) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.0) = nan +* (~0.8988465674311579E308, ~0.17976931348623157E309) = inf ++ (~0.8988465674311579E308, ~0.17976931348623157E309) = ~inf +- (~0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.17976931348623157E309) = 0.5 +nextAfter (~0.8988465674311579E308, ~0.17976931348623157E309) = ~0.898846567431158E308 +rem (~0.8988465674311579E308, ~0.17976931348623157E309) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, ~0.8988465674311579E308) = inf ++ (~0.8988465674311579E308, ~0.8988465674311579E308) = ~0.17976931348623157E309 +- (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +/ (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.1E1 +nextAfter (~0.8988465674311579E308, ~0.8988465674311579E308) = ~0.8988465674311579E308 +rem (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +* (~0.8988465674311579E308, ~0.123E4) = inf ++ (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E4) = 0.7307695670172015E305 +nextAfter (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E4) = 0.0 +* (~0.8988465674311579E308, ~0.123E2) = inf ++ (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E2) = 0.7307695670172014E307 +nextAfter (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E2) = 0.0 +* (~0.8988465674311579E308, ~0.3141592653589793E1) = inf ++ (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.3141592653589793E1) = 0.2861117485757028E308 +nextAfter (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.3141592653589793E1) = 0.0 +* (~0.8988465674311579E308, ~0.2718281828459045E1) = inf ++ (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.2718281828459045E1) = 0.3306671729254435E308 +nextAfter (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, ~0.123E1) = 0.1105581277940324E309 ++ (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E1) = 0.7307695670172015E308 +nextAfter (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E1) = ~0.99792015476736E292 +* (~0.8988465674311579E308, ~0.123) = 0.11055812779403241E308 ++ (~0.8988465674311579E308, ~0.123) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123) = inf +nextAfter (~0.8988465674311579E308, ~0.123) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123) = inf +* (~0.8988465674311579E308, ~0.123E~2) = 0.1105581277940324E306 ++ (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E~2) = inf +nextAfter (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E~2) = inf +* (~0.8988465674311579E308, ~0.22250738585072014E~307) = 0.19999999999999998E1 ++ (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.22250738585072014E~307) = inf +nextAfter (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.22250738585072014E~307) = inf +* (~0.8988465674311579E308, ~0.11125369292536007E~307) = 0.9999999999999999 ++ (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.11125369292536007E~307) = inf +nextAfter (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.11125369292536007E~307) = inf +* (~0.8988465674311579E308, ~0.5E~323) = 0.44408920985006257E~15 ++ (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.5E~323) = inf +nextAfter (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.5E~323) = inf +* (~0.8988465674311579E308, ~0.0) = 0.0 ++ (~0.8988465674311579E308, ~0.0) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.0) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.0) = inf +nextAfter (~0.8988465674311579E308, ~0.0) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.0) = nan +* (~0.8988465674311579E308, inf) = ~inf ++ (~0.8988465674311579E308, inf) = inf +- (~0.8988465674311579E308, inf) = ~inf +/ (~0.8988465674311579E308, inf) = ~0.0 +nextAfter (~0.8988465674311579E308, inf) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, inf) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, ~inf) = inf ++ (~0.8988465674311579E308, ~inf) = ~inf +- (~0.8988465674311579E308, ~inf) = inf +/ (~0.8988465674311579E308, ~inf) = 0.0 +nextAfter (~0.8988465674311579E308, ~inf) = ~0.898846567431158E308 +rem (~0.8988465674311579E308, ~inf) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, nan) = nan ++ (~0.8988465674311579E308, nan) = nan +- (~0.8988465674311579E308, nan) = nan +/ (~0.8988465674311579E308, nan) = nan +nextAfter (~0.8988465674311579E308, nan) = nan +rem (~0.8988465674311579E308, nan) = nan +* (~0.8988465674311579E308, inf) = ~inf ++ (~0.8988465674311579E308, inf) = inf +- (~0.8988465674311579E308, inf) = ~inf +/ (~0.8988465674311579E308, inf) = ~0.0 +nextAfter (~0.8988465674311579E308, inf) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, inf) = ~0.8988465674311579E308 +* (~0.123E4, 0.17976931348623157E309) = ~inf ++ (~0.123E4, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E4, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E4, 0.17976931348623157E309) = ~0.6842102114909646E~305 +nextAfter (~0.123E4, 0.17976931348623157E309) = ~0.12299999999999998E4 +rem (~0.123E4, 0.17976931348623157E309) = ~0.123E4 +* (~0.123E4, 0.8988465674311579E308) = ~inf ++ (~0.123E4, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E4, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E4, 0.8988465674311579E308) = ~0.1368420422981929E~304 +nextAfter (~0.123E4, 0.8988465674311579E308) = ~0.12299999999999998E4 +rem (~0.123E4, 0.8988465674311579E308) = ~0.123E4 +* (~0.123E4, 0.123E4) = ~0.15129E7 ++ (~0.123E4, 0.123E4) = 0.0 +- (~0.123E4, 0.123E4) = ~0.246E4 +/ (~0.123E4, 0.123E4) = ~0.1E1 +nextAfter (~0.123E4, 0.123E4) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E4) = 0.0 +* (~0.123E4, 0.123E2) = ~0.15129E5 ++ (~0.123E4, 0.123E2) = ~0.12177E4 +- (~0.123E4, 0.123E2) = ~0.12423E4 +/ (~0.123E4, 0.123E2) = ~0.1E3 +nextAfter (~0.123E4, 0.123E2) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E2) = 0.0 +* (~0.123E4, 0.3141592653589793E1) = ~0.38641589639154454E4 ++ (~0.123E4, 0.3141592653589793E1) = ~0.122685840734641E4 +- (~0.123E4, 0.3141592653589793E1) = ~0.123314159265359E4 +/ (~0.123E4, 0.3141592653589793E1) = ~0.39152116000606253E3 +nextAfter (~0.123E4, 0.3141592653589793E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.3141592653589793E1) = ~0.16372724463908526E1 +* (~0.123E4, 0.2718281828459045E1) = ~0.33434866490046256E4 ++ (~0.123E4, 0.2718281828459045E1) = ~0.1227281718171541E4 +- (~0.123E4, 0.2718281828459045E1) = ~0.1232718281828459E4 +/ (~0.123E4, 0.2718281828459045E1) = ~0.4524917126408741E3 +nextAfter (~0.123E4, 0.2718281828459045E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.2718281828459045E1) = ~0.13366135365115497E1 +* (~0.123E4, 0.123E1) = ~0.15129E4 ++ (~0.123E4, 0.123E1) = ~0.122877E4 +- (~0.123E4, 0.123E1) = ~0.123123E4 +/ (~0.123E4, 0.123E1) = ~0.1E4 +nextAfter (~0.123E4, 0.123E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E1) = 0.0 +* (~0.123E4, 0.123) = ~0.15129E3 ++ (~0.123E4, 0.123) = ~0.1229877E4 +- (~0.123E4, 0.123) = ~0.1230123E4 +/ (~0.123E4, 0.123) = ~0.1E5 +nextAfter (~0.123E4, 0.123) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123) = 0.0 +* (~0.123E4, 0.123E~2) = ~0.15129E1 ++ (~0.123E4, 0.123E~2) = ~0.122999877E4 +- (~0.123E4, 0.123E~2) = ~0.123000123E4 +/ (~0.123E4, 0.123E~2) = ~0.1E7 +nextAfter (~0.123E4, 0.123E~2) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E~2) = 0.0 +* (~0.123E4, 0.22250738585072014E~307) = ~0.27368408459638577E~304 ++ (~0.123E4, 0.22250738585072014E~307) = ~0.123E4 +- (~0.123E4, 0.22250738585072014E~307) = ~0.123E4 +/ (~0.123E4, 0.22250738585072014E~307) = ~inf +nextAfter (~0.123E4, 0.22250738585072014E~307) = ~0.12299999999999998E4 +rem (~0.123E4, 0.22250738585072014E~307) = inf +* (~0.123E4, 0.11125369292536007E~307) = ~0.13684204229819289E~304 ++ (~0.123E4, 0.11125369292536007E~307) = ~0.123E4 +- (~0.123E4, 0.11125369292536007E~307) = ~0.123E4 +/ (~0.123E4, 0.11125369292536007E~307) = ~inf +nextAfter (~0.123E4, 0.11125369292536007E~307) = ~0.12299999999999998E4 +rem (~0.123E4, 0.11125369292536007E~307) = inf +* (~0.123E4, 0.5E~323) = ~0.6077E~320 ++ (~0.123E4, 0.5E~323) = ~0.123E4 +- (~0.123E4, 0.5E~323) = ~0.123E4 +/ (~0.123E4, 0.5E~323) = ~inf +nextAfter (~0.123E4, 0.5E~323) = ~0.12299999999999998E4 +rem (~0.123E4, 0.5E~323) = inf +* (~0.123E4, 0.0) = ~0.0 ++ (~0.123E4, 0.0) = ~0.123E4 +- (~0.123E4, 0.0) = ~0.123E4 +/ (~0.123E4, 0.0) = ~inf +nextAfter (~0.123E4, 0.0) = ~0.12299999999999998E4 +rem (~0.123E4, 0.0) = nan +* (~0.123E4, ~0.17976931348623157E309) = inf ++ (~0.123E4, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E4, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E4, ~0.17976931348623157E309) = 0.6842102114909646E~305 +nextAfter (~0.123E4, ~0.17976931348623157E309) = ~0.12300000000000002E4 +rem (~0.123E4, ~0.17976931348623157E309) = ~0.123E4 +* (~0.123E4, ~0.8988465674311579E308) = inf ++ (~0.123E4, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E4, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E4, ~0.8988465674311579E308) = 0.1368420422981929E~304 +nextAfter (~0.123E4, ~0.8988465674311579E308) = ~0.12300000000000002E4 +rem (~0.123E4, ~0.8988465674311579E308) = ~0.123E4 +* (~0.123E4, ~0.123E4) = 0.15129E7 ++ (~0.123E4, ~0.123E4) = ~0.246E4 +- (~0.123E4, ~0.123E4) = 0.0 +/ (~0.123E4, ~0.123E4) = 0.1E1 +nextAfter (~0.123E4, ~0.123E4) = ~0.123E4 +rem (~0.123E4, ~0.123E4) = 0.0 +* (~0.123E4, ~0.123E2) = 0.15129E5 ++ (~0.123E4, ~0.123E2) = ~0.12423E4 +- (~0.123E4, ~0.123E2) = ~0.12177E4 +/ (~0.123E4, ~0.123E2) = 0.1E3 +nextAfter (~0.123E4, ~0.123E2) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E2) = 0.0 +* (~0.123E4, ~0.3141592653589793E1) = 0.38641589639154454E4 ++ (~0.123E4, ~0.3141592653589793E1) = ~0.123314159265359E4 +- (~0.123E4, ~0.3141592653589793E1) = ~0.122685840734641E4 +/ (~0.123E4, ~0.3141592653589793E1) = 0.39152116000606253E3 +nextAfter (~0.123E4, ~0.3141592653589793E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.3141592653589793E1) = ~0.16372724463908526E1 +* (~0.123E4, ~0.2718281828459045E1) = 0.33434866490046256E4 ++ (~0.123E4, ~0.2718281828459045E1) = ~0.1232718281828459E4 +- (~0.123E4, ~0.2718281828459045E1) = ~0.1227281718171541E4 +/ (~0.123E4, ~0.2718281828459045E1) = 0.4524917126408741E3 +nextAfter (~0.123E4, ~0.2718281828459045E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.2718281828459045E1) = ~0.13366135365115497E1 +* (~0.123E4, ~0.123E1) = 0.15129E4 ++ (~0.123E4, ~0.123E1) = ~0.123123E4 +- (~0.123E4, ~0.123E1) = ~0.122877E4 +/ (~0.123E4, ~0.123E1) = 0.1E4 +nextAfter (~0.123E4, ~0.123E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E1) = 0.0 +* (~0.123E4, ~0.123) = 0.15129E3 ++ (~0.123E4, ~0.123) = ~0.1230123E4 +- (~0.123E4, ~0.123) = ~0.1229877E4 +/ (~0.123E4, ~0.123) = 0.1E5 +nextAfter (~0.123E4, ~0.123) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123) = 0.0 +* (~0.123E4, ~0.123E~2) = 0.15129E1 ++ (~0.123E4, ~0.123E~2) = ~0.123000123E4 +- (~0.123E4, ~0.123E~2) = ~0.122999877E4 +/ (~0.123E4, ~0.123E~2) = 0.1E7 +nextAfter (~0.123E4, ~0.123E~2) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E~2) = 0.0 +* (~0.123E4, ~0.22250738585072014E~307) = 0.27368408459638577E~304 ++ (~0.123E4, ~0.22250738585072014E~307) = ~0.123E4 +- (~0.123E4, ~0.22250738585072014E~307) = ~0.123E4 +/ (~0.123E4, ~0.22250738585072014E~307) = inf +nextAfter (~0.123E4, ~0.22250738585072014E~307) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.22250738585072014E~307) = inf +* (~0.123E4, ~0.11125369292536007E~307) = 0.13684204229819289E~304 ++ (~0.123E4, ~0.11125369292536007E~307) = ~0.123E4 +- (~0.123E4, ~0.11125369292536007E~307) = ~0.123E4 +/ (~0.123E4, ~0.11125369292536007E~307) = inf +nextAfter (~0.123E4, ~0.11125369292536007E~307) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.11125369292536007E~307) = inf +* (~0.123E4, ~0.5E~323) = 0.6077E~320 ++ (~0.123E4, ~0.5E~323) = ~0.123E4 +- (~0.123E4, ~0.5E~323) = ~0.123E4 +/ (~0.123E4, ~0.5E~323) = inf +nextAfter (~0.123E4, ~0.5E~323) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.5E~323) = inf +* (~0.123E4, ~0.0) = 0.0 ++ (~0.123E4, ~0.0) = ~0.123E4 +- (~0.123E4, ~0.0) = ~0.123E4 +/ (~0.123E4, ~0.0) = inf +nextAfter (~0.123E4, ~0.0) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.0) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999999999998E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E4, ~inf) = inf ++ (~0.123E4, ~inf) = ~inf +- (~0.123E4, ~inf) = inf +/ (~0.123E4, ~inf) = 0.0 +nextAfter (~0.123E4, ~inf) = ~0.12300000000000002E4 +rem (~0.123E4, ~inf) = ~0.123E4 +* (~0.123E4, nan) = nan ++ (~0.123E4, nan) = nan +- (~0.123E4, nan) = nan +/ (~0.123E4, nan) = nan +nextAfter (~0.123E4, nan) = nan +rem (~0.123E4, nan) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999999999998E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E2, 0.17976931348623157E309) = ~inf ++ (~0.123E2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E2, 0.17976931348623157E309) = ~0.6842102114909646E~307 +nextAfter (~0.123E2, 0.17976931348623157E309) = ~0.12299999999999999E2 +rem (~0.123E2, 0.17976931348623157E309) = ~0.123E2 +* (~0.123E2, 0.8988465674311579E308) = ~inf ++ (~0.123E2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E2, 0.8988465674311579E308) = ~0.13684204229819291E~306 +nextAfter (~0.123E2, 0.8988465674311579E308) = ~0.12299999999999999E2 +rem (~0.123E2, 0.8988465674311579E308) = ~0.123E2 +* (~0.123E2, 0.123E4) = ~0.15129E5 ++ (~0.123E2, 0.123E4) = 0.12177E4 +- (~0.123E2, 0.123E4) = ~0.12423E4 +/ (~0.123E2, 0.123E4) = ~0.1E~1 +nextAfter (~0.123E2, 0.123E4) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E4) = ~0.123E2 +* (~0.123E2, 0.123E2) = ~0.15129000000000002E3 ++ (~0.123E2, 0.123E2) = 0.0 +- (~0.123E2, 0.123E2) = ~0.246E2 +/ (~0.123E2, 0.123E2) = ~0.1E1 +nextAfter (~0.123E2, 0.123E2) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E2) = 0.0 +* (~0.123E2, 0.3141592653589793E1) = ~0.3864158963915446E2 ++ (~0.123E2, 0.3141592653589793E1) = ~0.9158407346410208E1 +- (~0.123E2, 0.3141592653589793E1) = ~0.15441592653589794E2 +/ (~0.123E2, 0.3141592653589793E1) = ~0.3915211600060626E1 +nextAfter (~0.123E2, 0.3141592653589793E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.3141592653589793E1) = ~0.28752220392306214E1 +* (~0.123E2, 0.2718281828459045E1) = ~0.33434866490046254E2 ++ (~0.123E2, 0.2718281828459045E1) = ~0.9581718171540956E1 +- (~0.123E2, 0.2718281828459045E1) = ~0.15018281828459045E2 +/ (~0.123E2, 0.2718281828459045E1) = ~0.4524917126408741E1 +nextAfter (~0.123E2, 0.2718281828459045E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.2718281828459045E1) = ~0.14268726861638203E1 +* (~0.123E2, 0.123E1) = ~0.15129000000000001E2 ++ (~0.123E2, 0.123E1) = ~0.1107E2 +- (~0.123E2, 0.123E1) = ~0.13530000000000001E2 +/ (~0.123E2, 0.123E1) = ~0.1E2 +nextAfter (~0.123E2, 0.123E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E1) = 0.0 +* (~0.123E2, 0.123) = ~0.15129000000000001E1 ++ (~0.123E2, 0.123) = ~0.12177000000000001E2 +- (~0.123E2, 0.123) = ~0.12423E2 +/ (~0.123E2, 0.123) = ~0.10000000000000001E3 +nextAfter (~0.123E2, 0.123) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123) = 0.0 +* (~0.123E2, 0.123E~2) = ~0.15129E~1 ++ (~0.123E2, 0.123E~2) = ~0.12298770000000001E2 +- (~0.123E2, 0.123E~2) = ~0.1230123E2 +/ (~0.123E2, 0.123E~2) = ~0.1E5 +nextAfter (~0.123E2, 0.123E~2) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E~2) = ~0.17763568394002505E~14 +* (~0.123E2, 0.22250738585072014E~307) = ~0.2736840845963858E~306 ++ (~0.123E2, 0.22250738585072014E~307) = ~0.123E2 +- (~0.123E2, 0.22250738585072014E~307) = ~0.123E2 +/ (~0.123E2, 0.22250738585072014E~307) = ~inf +nextAfter (~0.123E2, 0.22250738585072014E~307) = ~0.12299999999999999E2 +rem (~0.123E2, 0.22250738585072014E~307) = inf +* (~0.123E2, 0.11125369292536007E~307) = ~0.1368420422981929E~306 ++ (~0.123E2, 0.11125369292536007E~307) = ~0.123E2 +- (~0.123E2, 0.11125369292536007E~307) = ~0.123E2 +/ (~0.123E2, 0.11125369292536007E~307) = ~inf +nextAfter (~0.123E2, 0.11125369292536007E~307) = ~0.12299999999999999E2 +rem (~0.123E2, 0.11125369292536007E~307) = inf +* (~0.123E2, 0.5E~323) = ~0.6E~322 ++ (~0.123E2, 0.5E~323) = ~0.123E2 +- (~0.123E2, 0.5E~323) = ~0.123E2 +/ (~0.123E2, 0.5E~323) = ~inf +nextAfter (~0.123E2, 0.5E~323) = ~0.12299999999999999E2 +rem (~0.123E2, 0.5E~323) = inf +* (~0.123E2, 0.0) = ~0.0 ++ (~0.123E2, 0.0) = ~0.123E2 +- (~0.123E2, 0.0) = ~0.123E2 +/ (~0.123E2, 0.0) = ~inf +nextAfter (~0.123E2, 0.0) = ~0.12299999999999999E2 +rem (~0.123E2, 0.0) = nan +* (~0.123E2, ~0.17976931348623157E309) = inf ++ (~0.123E2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E2, ~0.17976931348623157E309) = 0.6842102114909646E~307 +nextAfter (~0.123E2, ~0.17976931348623157E309) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.17976931348623157E309) = ~0.123E2 +* (~0.123E2, ~0.8988465674311579E308) = inf ++ (~0.123E2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E2, ~0.8988465674311579E308) = 0.13684204229819291E~306 +nextAfter (~0.123E2, ~0.8988465674311579E308) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.8988465674311579E308) = ~0.123E2 +* (~0.123E2, ~0.123E4) = 0.15129E5 ++ (~0.123E2, ~0.123E4) = ~0.12423E4 +- (~0.123E2, ~0.123E4) = 0.12177E4 +/ (~0.123E2, ~0.123E4) = 0.1E~1 +nextAfter (~0.123E2, ~0.123E4) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.123E4) = ~0.123E2 +* (~0.123E2, ~0.123E2) = 0.15129000000000002E3 ++ (~0.123E2, ~0.123E2) = ~0.246E2 +- (~0.123E2, ~0.123E2) = 0.0 +/ (~0.123E2, ~0.123E2) = 0.1E1 +nextAfter (~0.123E2, ~0.123E2) = ~0.123E2 +rem (~0.123E2, ~0.123E2) = 0.0 +* (~0.123E2, ~0.3141592653589793E1) = 0.3864158963915446E2 ++ (~0.123E2, ~0.3141592653589793E1) = ~0.15441592653589794E2 +- (~0.123E2, ~0.3141592653589793E1) = ~0.9158407346410208E1 +/ (~0.123E2, ~0.3141592653589793E1) = 0.3915211600060626E1 +nextAfter (~0.123E2, ~0.3141592653589793E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.3141592653589793E1) = ~0.28752220392306214E1 +* (~0.123E2, ~0.2718281828459045E1) = 0.33434866490046254E2 ++ (~0.123E2, ~0.2718281828459045E1) = ~0.15018281828459045E2 +- (~0.123E2, ~0.2718281828459045E1) = ~0.9581718171540956E1 +/ (~0.123E2, ~0.2718281828459045E1) = 0.4524917126408741E1 +nextAfter (~0.123E2, ~0.2718281828459045E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.2718281828459045E1) = ~0.14268726861638203E1 +* (~0.123E2, ~0.123E1) = 0.15129000000000001E2 ++ (~0.123E2, ~0.123E1) = ~0.13530000000000001E2 +- (~0.123E2, ~0.123E1) = ~0.1107E2 +/ (~0.123E2, ~0.123E1) = 0.1E2 +nextAfter (~0.123E2, ~0.123E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123E1) = 0.0 +* (~0.123E2, ~0.123) = 0.15129000000000001E1 ++ (~0.123E2, ~0.123) = ~0.12423E2 +- (~0.123E2, ~0.123) = ~0.12177000000000001E2 +/ (~0.123E2, ~0.123) = 0.10000000000000001E3 +nextAfter (~0.123E2, ~0.123) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123) = 0.0 +* (~0.123E2, ~0.123E~2) = 0.15129E~1 ++ (~0.123E2, ~0.123E~2) = ~0.1230123E2 +- (~0.123E2, ~0.123E~2) = ~0.12298770000000001E2 +/ (~0.123E2, ~0.123E~2) = 0.1E5 +nextAfter (~0.123E2, ~0.123E~2) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123E~2) = ~0.17763568394002505E~14 +* (~0.123E2, ~0.22250738585072014E~307) = 0.2736840845963858E~306 ++ (~0.123E2, ~0.22250738585072014E~307) = ~0.123E2 +- (~0.123E2, ~0.22250738585072014E~307) = ~0.123E2 +/ (~0.123E2, ~0.22250738585072014E~307) = inf +nextAfter (~0.123E2, ~0.22250738585072014E~307) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.22250738585072014E~307) = inf +* (~0.123E2, ~0.11125369292536007E~307) = 0.1368420422981929E~306 ++ (~0.123E2, ~0.11125369292536007E~307) = ~0.123E2 +- (~0.123E2, ~0.11125369292536007E~307) = ~0.123E2 +/ (~0.123E2, ~0.11125369292536007E~307) = inf +nextAfter (~0.123E2, ~0.11125369292536007E~307) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.11125369292536007E~307) = inf +* (~0.123E2, ~0.5E~323) = 0.6E~322 ++ (~0.123E2, ~0.5E~323) = ~0.123E2 +- (~0.123E2, ~0.5E~323) = ~0.123E2 +/ (~0.123E2, ~0.5E~323) = inf +nextAfter (~0.123E2, ~0.5E~323) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.5E~323) = inf +* (~0.123E2, ~0.0) = 0.0 ++ (~0.123E2, ~0.0) = ~0.123E2 +- (~0.123E2, ~0.0) = ~0.123E2 +/ (~0.123E2, ~0.0) = inf +nextAfter (~0.123E2, ~0.0) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.0) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999999999999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.123E2, ~inf) = inf ++ (~0.123E2, ~inf) = ~inf +- (~0.123E2, ~inf) = inf +/ (~0.123E2, ~inf) = 0.0 +nextAfter (~0.123E2, ~inf) = ~0.12300000000000002E2 +rem (~0.123E2, ~inf) = ~0.123E2 +* (~0.123E2, nan) = nan ++ (~0.123E2, nan) = nan +- (~0.123E2, nan) = nan +/ (~0.123E2, nan) = nan +nextAfter (~0.123E2, nan) = nan +rem (~0.123E2, nan) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999999999999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.3141592653589793E1, 0.17976931348623157E309) = ~inf ++ (~0.3141592653589793E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.17475689218952297E~307 +nextAfter (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.8988465674311579E308) = ~inf ++ (~0.3141592653589793E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.349513784379046E~307 +nextAfter (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.123E4) = ~0.38641589639154454E4 ++ (~0.3141592653589793E1, 0.123E4) = 0.122685840734641E4 +- (~0.3141592653589793E1, 0.123E4) = ~0.123314159265359E4 +/ (~0.3141592653589793E1, 0.123E4) = ~0.25541403687721893E~2 +nextAfter (~0.3141592653589793E1, 0.123E4) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E4) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.123E2) = ~0.3864158963915446E2 ++ (~0.3141592653589793E1, 0.123E2) = 0.9158407346410208E1 +- (~0.3141592653589793E1, 0.123E2) = ~0.15441592653589794E2 +/ (~0.3141592653589793E1, 0.123E2) = ~0.2554140368772189 +nextAfter (~0.3141592653589793E1, 0.123E2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E2) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.9869604401089358E1 ++ (~0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +- (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.6283185307179586E1 +/ (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.1E1 +nextAfter (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +* (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.8539734222673566E1 ++ (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.423310825130748 +- (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.5859874482048838E1 +/ (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.11557273497909217E1 +nextAfter (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.423310825130748 +* (~0.3141592653589793E1, 0.123E1) = ~0.38641589639154454E1 ++ (~0.3141592653589793E1, 0.123E1) = ~0.19115926535897931E1 +- (~0.3141592653589793E1, 0.123E1) = ~0.43715926535897935E1 +/ (~0.3141592653589793E1, 0.123E1) = ~0.25541403687721895E1 +nextAfter (~0.3141592653589793E1, 0.123E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E1) = ~0.6815926535897932 +* (~0.3141592653589793E1, 0.123) = ~0.38641589639154456 ++ (~0.3141592653589793E1, 0.123) = ~0.3018592653589793E1 +- (~0.3141592653589793E1, 0.123) = ~0.32645926535897933E1 +/ (~0.3141592653589793E1, 0.123) = ~0.25541403687721896E2 +nextAfter (~0.3141592653589793E1, 0.123) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123) = ~0.6659265358979294E~1 +* (~0.3141592653589793E1, 0.123E~2) = ~0.38641589639154456E~2 ++ (~0.3141592653589793E1, 0.123E~2) = ~0.3140362653589793E1 +- (~0.3141592653589793E1, 0.123E~2) = ~0.3142822653589793E1 +/ (~0.3141592653589793E1, 0.123E~2) = ~0.25541403687721895E4 +nextAfter (~0.3141592653589793E1, 0.123E~2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E~2) = ~0.17265358979301482E~3 +* (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.6990275687580919E~307 ++ (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.14119048864730642E309 +nextAfter (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.22250738585072014E~307) = 0.0 +* (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.34951378437904593E~307 ++ (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.11125369292536007E~307) = ~inf +nextAfter (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.11125369292536007E~307) = inf +* (~0.3141592653589793E1, 0.5E~323) = ~0.15E~322 ++ (~0.3141592653589793E1, 0.5E~323) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.5E~323) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.5E~323) = ~inf +nextAfter (~0.3141592653589793E1, 0.5E~323) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.5E~323) = inf +* (~0.3141592653589793E1, 0.0) = ~0.0 ++ (~0.3141592653589793E1, 0.0) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.0) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.0) = ~inf +nextAfter (~0.3141592653589793E1, 0.0) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.0) = nan +* (~0.3141592653589793E1, ~0.17976931348623157E309) = inf ++ (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.3141592653589793E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.3141592653589793E1, ~0.17976931348623157E309) = 0.17475689218952297E~307 +nextAfter (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.8988465674311579E308) = inf ++ (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.3141592653589793E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.3141592653589793E1, ~0.8988465674311579E308) = 0.349513784379046E~307 +nextAfter (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.123E4) = 0.38641589639154454E4 ++ (~0.3141592653589793E1, ~0.123E4) = ~0.123314159265359E4 +- (~0.3141592653589793E1, ~0.123E4) = 0.122685840734641E4 +/ (~0.3141592653589793E1, ~0.123E4) = 0.25541403687721893E~2 +nextAfter (~0.3141592653589793E1, ~0.123E4) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.123E4) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.123E2) = 0.3864158963915446E2 ++ (~0.3141592653589793E1, ~0.123E2) = ~0.15441592653589794E2 +- (~0.3141592653589793E1, ~0.123E2) = 0.9158407346410208E1 +/ (~0.3141592653589793E1, ~0.123E2) = 0.2554140368772189 +nextAfter (~0.3141592653589793E1, ~0.123E2) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.123E2) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.9869604401089358E1 ++ (~0.3141592653589793E1, ~0.3141592653589793E1) = ~0.6283185307179586E1 +- (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +/ (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.1E1 +nextAfter (~0.3141592653589793E1, ~0.3141592653589793E1) = ~0.3141592653589793E1 +rem (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +* (~0.3141592653589793E1, ~0.2718281828459045E1) = 0.8539734222673566E1 ++ (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.5859874482048838E1 +- (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.423310825130748 +/ (~0.3141592653589793E1, ~0.2718281828459045E1) = 0.11557273497909217E1 +nextAfter (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.423310825130748 +* (~0.3141592653589793E1, ~0.123E1) = 0.38641589639154454E1 ++ (~0.3141592653589793E1, ~0.123E1) = ~0.43715926535897935E1 +- (~0.3141592653589793E1, ~0.123E1) = ~0.19115926535897931E1 +/ (~0.3141592653589793E1, ~0.123E1) = 0.25541403687721895E1 +nextAfter (~0.3141592653589793E1, ~0.123E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123E1) = ~0.6815926535897932 +* (~0.3141592653589793E1, ~0.123) = 0.38641589639154456 ++ (~0.3141592653589793E1, ~0.123) = ~0.32645926535897933E1 +- (~0.3141592653589793E1, ~0.123) = ~0.3018592653589793E1 +/ (~0.3141592653589793E1, ~0.123) = 0.25541403687721896E2 +nextAfter (~0.3141592653589793E1, ~0.123) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123) = ~0.6659265358979294E~1 +* (~0.3141592653589793E1, ~0.123E~2) = 0.38641589639154456E~2 ++ (~0.3141592653589793E1, ~0.123E~2) = ~0.3142822653589793E1 +- (~0.3141592653589793E1, ~0.123E~2) = ~0.3140362653589793E1 +/ (~0.3141592653589793E1, ~0.123E~2) = 0.25541403687721895E4 +nextAfter (~0.3141592653589793E1, ~0.123E~2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123E~2) = ~0.17265358979301482E~3 +* (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.6990275687580919E~307 ++ (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.14119048864730642E309 +nextAfter (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.0 +* (~0.3141592653589793E1, ~0.11125369292536007E~307) = 0.34951378437904593E~307 ++ (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.11125369292536007E~307) = inf +nextAfter (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.11125369292536007E~307) = inf +* (~0.3141592653589793E1, ~0.5E~323) = 0.15E~322 ++ (~0.3141592653589793E1, ~0.5E~323) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.5E~323) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.5E~323) = inf +nextAfter (~0.3141592653589793E1, ~0.5E~323) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.5E~323) = inf +* (~0.3141592653589793E1, ~0.0) = 0.0 ++ (~0.3141592653589793E1, ~0.0) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.0) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.0) = inf +nextAfter (~0.3141592653589793E1, ~0.0) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.0) = nan +* (~0.3141592653589793E1, inf) = ~inf ++ (~0.3141592653589793E1, inf) = inf +- (~0.3141592653589793E1, inf) = ~inf +/ (~0.3141592653589793E1, inf) = ~0.0 +nextAfter (~0.3141592653589793E1, inf) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, inf) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~inf) = inf ++ (~0.3141592653589793E1, ~inf) = ~inf +- (~0.3141592653589793E1, ~inf) = inf +/ (~0.3141592653589793E1, ~inf) = 0.0 +nextAfter (~0.3141592653589793E1, ~inf) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~inf) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, nan) = nan ++ (~0.3141592653589793E1, nan) = nan +- (~0.3141592653589793E1, nan) = nan +/ (~0.3141592653589793E1, nan) = nan +nextAfter (~0.3141592653589793E1, nan) = nan +rem (~0.3141592653589793E1, nan) = nan +* (~0.3141592653589793E1, inf) = ~inf ++ (~0.3141592653589793E1, inf) = inf +- (~0.3141592653589793E1, inf) = ~inf +/ (~0.3141592653589793E1, inf) = ~0.0 +nextAfter (~0.3141592653589793E1, inf) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, inf) = ~0.3141592653589793E1 +* (~0.2718281828459045E1, 0.17976931348623157E309) = ~inf ++ (~0.2718281828459045E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.15120944591398447E~307 +nextAfter (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.8988465674311579E308) = ~inf ++ (~0.2718281828459045E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.30241889182796895E~307 +nextAfter (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.123E4) = ~0.33434866490046256E4 ++ (~0.2718281828459045E1, 0.123E4) = 0.1227281718171541E4 +- (~0.2718281828459045E1, 0.123E4) = ~0.1232718281828459E4 +/ (~0.2718281828459045E1, 0.123E4) = ~0.22099852263894678E~2 +nextAfter (~0.2718281828459045E1, 0.123E4) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E4) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.123E2) = ~0.33434866490046254E2 ++ (~0.2718281828459045E1, 0.123E2) = 0.9581718171540956E1 +- (~0.2718281828459045E1, 0.123E2) = ~0.15018281828459045E2 +/ (~0.2718281828459045E1, 0.123E2) = ~0.22099852263894673 +nextAfter (~0.2718281828459045E1, 0.123E2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E2) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.8539734222673566E1 ++ (~0.2718281828459045E1, 0.3141592653589793E1) = 0.423310825130748 +- (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.5859874482048838E1 +/ (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.8652559794322651 +nextAfter (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.73890560989306495E1 ++ (~0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +- (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.543656365691809E1 +/ (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.1E1 +nextAfter (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +* (~0.2718281828459045E1, 0.123E1) = ~0.33434866490046256E1 ++ (~0.2718281828459045E1, 0.123E1) = ~0.1488281828459045E1 +- (~0.2718281828459045E1, 0.123E1) = ~0.3948281828459045E1 +/ (~0.2718281828459045E1, 0.123E1) = ~0.22099852263894677E1 +nextAfter (~0.2718281828459045E1, 0.123E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E1) = ~0.2582818284590451 +* (~0.2718281828459045E1, 0.123) = ~0.33434866490046256 ++ (~0.2718281828459045E1, 0.123) = ~0.25952818284590453E1 +- (~0.2718281828459045E1, 0.123) = ~0.2841281828459045E1 +/ (~0.2718281828459045E1, 0.123) = ~0.22099852263894675E2 +nextAfter (~0.2718281828459045E1, 0.123) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123) = ~0.1228182845904513E~1 +* (~0.2718281828459045E1, 0.123E~2) = ~0.33434866490046253E~2 ++ (~0.2718281828459045E1, 0.123E~2) = ~0.2717051828459045E1 +- (~0.2718281828459045E1, 0.123E~2) = ~0.2719511828459045E1 +/ (~0.2718281828459045E1, 0.123E~2) = ~0.22099852263894677E4 +nextAfter (~0.2718281828459045E1, 0.123E~2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E~2) = ~0.12118284590449946E~2 +* (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.6048377836559378E~307 ++ (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.12216591454104522E309 +nextAfter (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.22250738585072014E~307) = 0.0 +* (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.3024188918279689E~307 ++ (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.11125369292536007E~307) = ~inf +nextAfter (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.11125369292536007E~307) = inf +* (~0.2718281828459045E1, 0.5E~323) = ~0.15E~322 ++ (~0.2718281828459045E1, 0.5E~323) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.5E~323) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.5E~323) = ~inf +nextAfter (~0.2718281828459045E1, 0.5E~323) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.5E~323) = inf +* (~0.2718281828459045E1, 0.0) = ~0.0 ++ (~0.2718281828459045E1, 0.0) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.0) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.0) = ~inf +nextAfter (~0.2718281828459045E1, 0.0) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.0) = nan +* (~0.2718281828459045E1, ~0.17976931348623157E309) = inf ++ (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.2718281828459045E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.2718281828459045E1, ~0.17976931348623157E309) = 0.15120944591398447E~307 +nextAfter (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.8988465674311579E308) = inf ++ (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.2718281828459045E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.2718281828459045E1, ~0.8988465674311579E308) = 0.30241889182796895E~307 +nextAfter (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.123E4) = 0.33434866490046256E4 ++ (~0.2718281828459045E1, ~0.123E4) = ~0.1232718281828459E4 +- (~0.2718281828459045E1, ~0.123E4) = 0.1227281718171541E4 +/ (~0.2718281828459045E1, ~0.123E4) = 0.22099852263894678E~2 +nextAfter (~0.2718281828459045E1, ~0.123E4) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.123E4) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.123E2) = 0.33434866490046254E2 ++ (~0.2718281828459045E1, ~0.123E2) = ~0.15018281828459045E2 +- (~0.2718281828459045E1, ~0.123E2) = 0.9581718171540956E1 +/ (~0.2718281828459045E1, ~0.123E2) = 0.22099852263894673 +nextAfter (~0.2718281828459045E1, ~0.123E2) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.123E2) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.8539734222673566E1 ++ (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.5859874482048838E1 +- (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.423310825130748 +/ (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.8652559794322651 +nextAfter (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.73890560989306495E1 ++ (~0.2718281828459045E1, ~0.2718281828459045E1) = ~0.543656365691809E1 +- (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +/ (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.1E1 +nextAfter (~0.2718281828459045E1, ~0.2718281828459045E1) = ~0.2718281828459045E1 +rem (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +* (~0.2718281828459045E1, ~0.123E1) = 0.33434866490046256E1 ++ (~0.2718281828459045E1, ~0.123E1) = ~0.3948281828459045E1 +- (~0.2718281828459045E1, ~0.123E1) = ~0.1488281828459045E1 +/ (~0.2718281828459045E1, ~0.123E1) = 0.22099852263894677E1 +nextAfter (~0.2718281828459045E1, ~0.123E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123E1) = ~0.2582818284590451 +* (~0.2718281828459045E1, ~0.123) = 0.33434866490046256 ++ (~0.2718281828459045E1, ~0.123) = ~0.2841281828459045E1 +- (~0.2718281828459045E1, ~0.123) = ~0.25952818284590453E1 +/ (~0.2718281828459045E1, ~0.123) = 0.22099852263894675E2 +nextAfter (~0.2718281828459045E1, ~0.123) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123) = ~0.1228182845904513E~1 +* (~0.2718281828459045E1, ~0.123E~2) = 0.33434866490046253E~2 ++ (~0.2718281828459045E1, ~0.123E~2) = ~0.2719511828459045E1 +- (~0.2718281828459045E1, ~0.123E~2) = ~0.2717051828459045E1 +/ (~0.2718281828459045E1, ~0.123E~2) = 0.22099852263894677E4 +nextAfter (~0.2718281828459045E1, ~0.123E~2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123E~2) = ~0.12118284590449946E~2 +* (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.6048377836559378E~307 ++ (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.12216591454104522E309 +nextAfter (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.0 +* (~0.2718281828459045E1, ~0.11125369292536007E~307) = 0.3024188918279689E~307 ++ (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.11125369292536007E~307) = inf +nextAfter (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.11125369292536007E~307) = inf +* (~0.2718281828459045E1, ~0.5E~323) = 0.15E~322 ++ (~0.2718281828459045E1, ~0.5E~323) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.5E~323) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.5E~323) = inf +nextAfter (~0.2718281828459045E1, ~0.5E~323) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.5E~323) = inf +* (~0.2718281828459045E1, ~0.0) = 0.0 ++ (~0.2718281828459045E1, ~0.0) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.0) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.0) = inf +nextAfter (~0.2718281828459045E1, ~0.0) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.0) = nan +* (~0.2718281828459045E1, inf) = ~inf ++ (~0.2718281828459045E1, inf) = inf +- (~0.2718281828459045E1, inf) = ~inf +/ (~0.2718281828459045E1, inf) = ~0.0 +nextAfter (~0.2718281828459045E1, inf) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, inf) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~inf) = inf ++ (~0.2718281828459045E1, ~inf) = ~inf +- (~0.2718281828459045E1, ~inf) = inf +/ (~0.2718281828459045E1, ~inf) = 0.0 +nextAfter (~0.2718281828459045E1, ~inf) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~inf) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, nan) = nan ++ (~0.2718281828459045E1, nan) = nan +- (~0.2718281828459045E1, nan) = nan +/ (~0.2718281828459045E1, nan) = nan +nextAfter (~0.2718281828459045E1, nan) = nan +rem (~0.2718281828459045E1, nan) = nan +* (~0.2718281828459045E1, inf) = ~inf ++ (~0.2718281828459045E1, inf) = inf +- (~0.2718281828459045E1, inf) = ~inf +/ (~0.2718281828459045E1, inf) = ~0.0 +nextAfter (~0.2718281828459045E1, inf) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, inf) = ~0.2718281828459045E1 +* (~0.123E1, 0.17976931348623157E309) = ~inf ++ (~0.123E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E1, 0.17976931348623157E309) = ~0.6842102114909647E~308 +nextAfter (~0.123E1, 0.17976931348623157E309) = ~0.12299999999999998E1 +rem (~0.123E1, 0.17976931348623157E309) = ~0.123E1 +* (~0.123E1, 0.8988465674311579E308) = ~0.1105581277940324E309 ++ (~0.123E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E1, 0.8988465674311579E308) = ~0.1368420422981929E~307 +nextAfter (~0.123E1, 0.8988465674311579E308) = ~0.12299999999999998E1 +rem (~0.123E1, 0.8988465674311579E308) = ~0.123E1 +* (~0.123E1, 0.123E4) = ~0.15129E4 ++ (~0.123E1, 0.123E4) = 0.122877E4 +- (~0.123E1, 0.123E4) = ~0.123123E4 +/ (~0.123E1, 0.123E4) = ~0.1E~2 +nextAfter (~0.123E1, 0.123E4) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E4) = ~0.123E1 +* (~0.123E1, 0.123E2) = ~0.15129000000000001E2 ++ (~0.123E1, 0.123E2) = 0.1107E2 +- (~0.123E1, 0.123E2) = ~0.13530000000000001E2 +/ (~0.123E1, 0.123E2) = ~0.9999999999999999E~1 +nextAfter (~0.123E1, 0.123E2) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E2) = ~0.123E1 +* (~0.123E1, 0.3141592653589793E1) = ~0.38641589639154454E1 ++ (~0.123E1, 0.3141592653589793E1) = 0.19115926535897931E1 +- (~0.123E1, 0.3141592653589793E1) = ~0.43715926535897935E1 +/ (~0.123E1, 0.3141592653589793E1) = ~0.3915211600060625 +nextAfter (~0.123E1, 0.3141592653589793E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.3141592653589793E1) = ~0.123E1 +* (~0.123E1, 0.2718281828459045E1) = ~0.33434866490046256E1 ++ (~0.123E1, 0.2718281828459045E1) = 0.1488281828459045E1 +- (~0.123E1, 0.2718281828459045E1) = ~0.3948281828459045E1 +/ (~0.123E1, 0.2718281828459045E1) = ~0.45249171264087407 +nextAfter (~0.123E1, 0.2718281828459045E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.2718281828459045E1) = ~0.123E1 +* (~0.123E1, 0.123E1) = ~0.15129E1 ++ (~0.123E1, 0.123E1) = 0.0 +- (~0.123E1, 0.123E1) = ~0.246E1 +/ (~0.123E1, 0.123E1) = ~0.1E1 +nextAfter (~0.123E1, 0.123E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E1) = 0.0 +* (~0.123E1, 0.123) = ~0.15129 ++ (~0.123E1, 0.123) = ~0.1107E1 +- (~0.123E1, 0.123) = ~0.1353E1 +/ (~0.123E1, 0.123) = ~0.1E2 +nextAfter (~0.123E1, 0.123) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123) = 0.0 +* (~0.123E1, 0.123E~2) = ~0.15129E~2 ++ (~0.123E1, 0.123E~2) = ~0.122877E1 +- (~0.123E1, 0.123E~2) = ~0.123123E1 +/ (~0.123E1, 0.123E~2) = ~0.1E4 +nextAfter (~0.123E1, 0.123E~2) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E~2) = 0.0 +* (~0.123E1, 0.22250738585072014E~307) = ~0.27368408459638577E~307 ++ (~0.123E1, 0.22250738585072014E~307) = ~0.123E1 +- (~0.123E1, 0.22250738585072014E~307) = ~0.123E1 +/ (~0.123E1, 0.22250738585072014E~307) = ~0.5527906389701621E308 +nextAfter (~0.123E1, 0.22250738585072014E~307) = ~0.12299999999999998E1 +rem (~0.123E1, 0.22250738585072014E~307) = 0.0 +* (~0.123E1, 0.11125369292536007E~307) = ~0.1368420422981929E~307 ++ (~0.123E1, 0.11125369292536007E~307) = ~0.123E1 +- (~0.123E1, 0.11125369292536007E~307) = ~0.123E1 +/ (~0.123E1, 0.11125369292536007E~307) = ~0.11055812779403243E309 +nextAfter (~0.123E1, 0.11125369292536007E~307) = ~0.12299999999999998E1 +rem (~0.123E1, 0.11125369292536007E~307) = 0.0 +* (~0.123E1, 0.5E~323) = ~0.5E~323 ++ (~0.123E1, 0.5E~323) = ~0.123E1 +- (~0.123E1, 0.5E~323) = ~0.123E1 +/ (~0.123E1, 0.5E~323) = ~inf +nextAfter (~0.123E1, 0.5E~323) = ~0.12299999999999998E1 +rem (~0.123E1, 0.5E~323) = inf +* (~0.123E1, 0.0) = ~0.0 ++ (~0.123E1, 0.0) = ~0.123E1 +- (~0.123E1, 0.0) = ~0.123E1 +/ (~0.123E1, 0.0) = ~inf +nextAfter (~0.123E1, 0.0) = ~0.12299999999999998E1 +rem (~0.123E1, 0.0) = nan +* (~0.123E1, ~0.17976931348623157E309) = inf ++ (~0.123E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E1, ~0.17976931348623157E309) = 0.6842102114909647E~308 +nextAfter (~0.123E1, ~0.17976931348623157E309) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.17976931348623157E309) = ~0.123E1 +* (~0.123E1, ~0.8988465674311579E308) = 0.1105581277940324E309 ++ (~0.123E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E1, ~0.8988465674311579E308) = 0.1368420422981929E~307 +nextAfter (~0.123E1, ~0.8988465674311579E308) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.8988465674311579E308) = ~0.123E1 +* (~0.123E1, ~0.123E4) = 0.15129E4 ++ (~0.123E1, ~0.123E4) = ~0.123123E4 +- (~0.123E1, ~0.123E4) = 0.122877E4 +/ (~0.123E1, ~0.123E4) = 0.1E~2 +nextAfter (~0.123E1, ~0.123E4) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.123E4) = ~0.123E1 +* (~0.123E1, ~0.123E2) = 0.15129000000000001E2 ++ (~0.123E1, ~0.123E2) = ~0.13530000000000001E2 +- (~0.123E1, ~0.123E2) = 0.1107E2 +/ (~0.123E1, ~0.123E2) = 0.9999999999999999E~1 +nextAfter (~0.123E1, ~0.123E2) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.123E2) = ~0.123E1 +* (~0.123E1, ~0.3141592653589793E1) = 0.38641589639154454E1 ++ (~0.123E1, ~0.3141592653589793E1) = ~0.43715926535897935E1 +- (~0.123E1, ~0.3141592653589793E1) = 0.19115926535897931E1 +/ (~0.123E1, ~0.3141592653589793E1) = 0.3915211600060625 +nextAfter (~0.123E1, ~0.3141592653589793E1) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.3141592653589793E1) = ~0.123E1 +* (~0.123E1, ~0.2718281828459045E1) = 0.33434866490046256E1 ++ (~0.123E1, ~0.2718281828459045E1) = ~0.3948281828459045E1 +- (~0.123E1, ~0.2718281828459045E1) = 0.1488281828459045E1 +/ (~0.123E1, ~0.2718281828459045E1) = 0.45249171264087407 +nextAfter (~0.123E1, ~0.2718281828459045E1) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.2718281828459045E1) = ~0.123E1 +* (~0.123E1, ~0.123E1) = 0.15129E1 ++ (~0.123E1, ~0.123E1) = ~0.246E1 +- (~0.123E1, ~0.123E1) = 0.0 +/ (~0.123E1, ~0.123E1) = 0.1E1 +nextAfter (~0.123E1, ~0.123E1) = ~0.123E1 +rem (~0.123E1, ~0.123E1) = 0.0 +* (~0.123E1, ~0.123) = 0.15129 ++ (~0.123E1, ~0.123) = ~0.1353E1 +- (~0.123E1, ~0.123) = ~0.1107E1 +/ (~0.123E1, ~0.123) = 0.1E2 +nextAfter (~0.123E1, ~0.123) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.123) = 0.0 +* (~0.123E1, ~0.123E~2) = 0.15129E~2 ++ (~0.123E1, ~0.123E~2) = ~0.123123E1 +- (~0.123E1, ~0.123E~2) = ~0.122877E1 +/ (~0.123E1, ~0.123E~2) = 0.1E4 +nextAfter (~0.123E1, ~0.123E~2) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.123E~2) = 0.0 +* (~0.123E1, ~0.22250738585072014E~307) = 0.27368408459638577E~307 ++ (~0.123E1, ~0.22250738585072014E~307) = ~0.123E1 +- (~0.123E1, ~0.22250738585072014E~307) = ~0.123E1 +/ (~0.123E1, ~0.22250738585072014E~307) = 0.5527906389701621E308 +nextAfter (~0.123E1, ~0.22250738585072014E~307) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.22250738585072014E~307) = 0.0 +* (~0.123E1, ~0.11125369292536007E~307) = 0.1368420422981929E~307 ++ (~0.123E1, ~0.11125369292536007E~307) = ~0.123E1 +- (~0.123E1, ~0.11125369292536007E~307) = ~0.123E1 +/ (~0.123E1, ~0.11125369292536007E~307) = 0.11055812779403243E309 +nextAfter (~0.123E1, ~0.11125369292536007E~307) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.11125369292536007E~307) = 0.0 +* (~0.123E1, ~0.5E~323) = 0.5E~323 ++ (~0.123E1, ~0.5E~323) = ~0.123E1 +- (~0.123E1, ~0.5E~323) = ~0.123E1 +/ (~0.123E1, ~0.5E~323) = inf +nextAfter (~0.123E1, ~0.5E~323) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.5E~323) = inf +* (~0.123E1, ~0.0) = 0.0 ++ (~0.123E1, ~0.0) = ~0.123E1 +- (~0.123E1, ~0.0) = ~0.123E1 +/ (~0.123E1, ~0.0) = inf +nextAfter (~0.123E1, ~0.0) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.0) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999999999998E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123E1, ~inf) = inf ++ (~0.123E1, ~inf) = ~inf +- (~0.123E1, ~inf) = inf +/ (~0.123E1, ~inf) = 0.0 +nextAfter (~0.123E1, ~inf) = ~0.12300000000000002E1 +rem (~0.123E1, ~inf) = ~0.123E1 +* (~0.123E1, nan) = nan ++ (~0.123E1, nan) = nan +- (~0.123E1, nan) = nan +/ (~0.123E1, nan) = nan +nextAfter (~0.123E1, nan) = nan +rem (~0.123E1, nan) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999999999998E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123, 0.17976931348623157E309) = ~0.22111625558806483E308 ++ (~0.123, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123, 0.17976931348623157E309) = ~0.684210211490966E~309 +nextAfter (~0.123, 0.17976931348623157E309) = ~0.12299999999999998 +rem (~0.123, 0.17976931348623157E309) = ~0.123 +* (~0.123, 0.8988465674311579E308) = ~0.11055812779403241E308 ++ (~0.123, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123, 0.8988465674311579E308) = ~0.136842042298193E~308 +nextAfter (~0.123, 0.8988465674311579E308) = ~0.12299999999999998 +rem (~0.123, 0.8988465674311579E308) = ~0.123 +* (~0.123, 0.123E4) = ~0.15129E3 ++ (~0.123, 0.123E4) = 0.1229877E4 +- (~0.123, 0.123E4) = ~0.1230123E4 +/ (~0.123, 0.123E4) = ~0.1E~3 +nextAfter (~0.123, 0.123E4) = ~0.12299999999999998 +rem (~0.123, 0.123E4) = ~0.123 +* (~0.123, 0.123E2) = ~0.15129000000000001E1 ++ (~0.123, 0.123E2) = 0.12177000000000001E2 +- (~0.123, 0.123E2) = ~0.12423E2 +/ (~0.123, 0.123E2) = ~0.9999999999999998E~2 +nextAfter (~0.123, 0.123E2) = ~0.12299999999999998 +rem (~0.123, 0.123E2) = ~0.123 +* (~0.123, 0.3141592653589793E1) = ~0.38641589639154456 ++ (~0.123, 0.3141592653589793E1) = 0.3018592653589793E1 +- (~0.123, 0.3141592653589793E1) = ~0.32645926535897933E1 +/ (~0.123, 0.3141592653589793E1) = ~0.3915211600060625E~1 +nextAfter (~0.123, 0.3141592653589793E1) = ~0.12299999999999998 +rem (~0.123, 0.3141592653589793E1) = ~0.123 +* (~0.123, 0.2718281828459045E1) = ~0.33434866490046256 ++ (~0.123, 0.2718281828459045E1) = 0.25952818284590453E1 +- (~0.123, 0.2718281828459045E1) = ~0.2841281828459045E1 +/ (~0.123, 0.2718281828459045E1) = ~0.4524917126408741E~1 +nextAfter (~0.123, 0.2718281828459045E1) = ~0.12299999999999998 +rem (~0.123, 0.2718281828459045E1) = ~0.123 +* (~0.123, 0.123E1) = ~0.15129 ++ (~0.123, 0.123E1) = 0.1107E1 +- (~0.123, 0.123E1) = ~0.1353E1 +/ (~0.123, 0.123E1) = ~0.1 +nextAfter (~0.123, 0.123E1) = ~0.12299999999999998 +rem (~0.123, 0.123E1) = ~0.123 +* (~0.123, 0.123) = ~0.15129E~1 ++ (~0.123, 0.123) = 0.0 +- (~0.123, 0.123) = ~0.246 +/ (~0.123, 0.123) = ~0.1E1 +nextAfter (~0.123, 0.123) = ~0.12299999999999998 +rem (~0.123, 0.123) = 0.0 +* (~0.123, 0.123E~2) = ~0.15129E~3 ++ (~0.123, 0.123E~2) = ~0.12177 +- (~0.123, 0.123E~2) = ~0.12423 +/ (~0.123, 0.123E~2) = ~0.1E3 +nextAfter (~0.123, 0.123E~2) = ~0.12299999999999998 +rem (~0.123, 0.123E~2) = 0.0 +* (~0.123, 0.22250738585072014E~307) = ~0.273684084596386E~308 ++ (~0.123, 0.22250738585072014E~307) = ~0.123 +- (~0.123, 0.22250738585072014E~307) = ~0.123 +/ (~0.123, 0.22250738585072014E~307) = ~0.55279063897016213E307 +nextAfter (~0.123, 0.22250738585072014E~307) = ~0.12299999999999998 +rem (~0.123, 0.22250738585072014E~307) = 0.0 +* (~0.123, 0.11125369292536007E~307) = ~0.136842042298193E~308 ++ (~0.123, 0.11125369292536007E~307) = ~0.123 +- (~0.123, 0.11125369292536007E~307) = ~0.123 +/ (~0.123, 0.11125369292536007E~307) = ~0.11055812779403243E308 +nextAfter (~0.123, 0.11125369292536007E~307) = ~0.12299999999999998 +rem (~0.123, 0.11125369292536007E~307) = 0.0 +* (~0.123, 0.5E~323) = ~0.0 ++ (~0.123, 0.5E~323) = ~0.123 +- (~0.123, 0.5E~323) = ~0.123 +/ (~0.123, 0.5E~323) = ~inf +nextAfter (~0.123, 0.5E~323) = ~0.12299999999999998 +rem (~0.123, 0.5E~323) = inf +* (~0.123, 0.0) = ~0.0 ++ (~0.123, 0.0) = ~0.123 +- (~0.123, 0.0) = ~0.123 +/ (~0.123, 0.0) = ~inf +nextAfter (~0.123, 0.0) = ~0.12299999999999998 +rem (~0.123, 0.0) = nan +* (~0.123, ~0.17976931348623157E309) = 0.22111625558806483E308 ++ (~0.123, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123, ~0.17976931348623157E309) = 0.684210211490966E~309 +nextAfter (~0.123, ~0.17976931348623157E309) = ~0.12300000000000001 +rem (~0.123, ~0.17976931348623157E309) = ~0.123 +* (~0.123, ~0.8988465674311579E308) = 0.11055812779403241E308 ++ (~0.123, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123, ~0.8988465674311579E308) = 0.136842042298193E~308 +nextAfter (~0.123, ~0.8988465674311579E308) = ~0.12300000000000001 +rem (~0.123, ~0.8988465674311579E308) = ~0.123 +* (~0.123, ~0.123E4) = 0.15129E3 ++ (~0.123, ~0.123E4) = ~0.1230123E4 +- (~0.123, ~0.123E4) = 0.1229877E4 +/ (~0.123, ~0.123E4) = 0.1E~3 +nextAfter (~0.123, ~0.123E4) = ~0.12300000000000001 +rem (~0.123, ~0.123E4) = ~0.123 +* (~0.123, ~0.123E2) = 0.15129000000000001E1 ++ (~0.123, ~0.123E2) = ~0.12423E2 +- (~0.123, ~0.123E2) = 0.12177000000000001E2 +/ (~0.123, ~0.123E2) = 0.9999999999999998E~2 +nextAfter (~0.123, ~0.123E2) = ~0.12300000000000001 +rem (~0.123, ~0.123E2) = ~0.123 +* (~0.123, ~0.3141592653589793E1) = 0.38641589639154456 ++ (~0.123, ~0.3141592653589793E1) = ~0.32645926535897933E1 +- (~0.123, ~0.3141592653589793E1) = 0.3018592653589793E1 +/ (~0.123, ~0.3141592653589793E1) = 0.3915211600060625E~1 +nextAfter (~0.123, ~0.3141592653589793E1) = ~0.12300000000000001 +rem (~0.123, ~0.3141592653589793E1) = ~0.123 +* (~0.123, ~0.2718281828459045E1) = 0.33434866490046256 ++ (~0.123, ~0.2718281828459045E1) = ~0.2841281828459045E1 +- (~0.123, ~0.2718281828459045E1) = 0.25952818284590453E1 +/ (~0.123, ~0.2718281828459045E1) = 0.4524917126408741E~1 +nextAfter (~0.123, ~0.2718281828459045E1) = ~0.12300000000000001 +rem (~0.123, ~0.2718281828459045E1) = ~0.123 +* (~0.123, ~0.123E1) = 0.15129 ++ (~0.123, ~0.123E1) = ~0.1353E1 +- (~0.123, ~0.123E1) = 0.1107E1 +/ (~0.123, ~0.123E1) = 0.1 +nextAfter (~0.123, ~0.123E1) = ~0.12300000000000001 +rem (~0.123, ~0.123E1) = ~0.123 +* (~0.123, ~0.123) = 0.15129E~1 ++ (~0.123, ~0.123) = ~0.246 +- (~0.123, ~0.123) = 0.0 +/ (~0.123, ~0.123) = 0.1E1 +nextAfter (~0.123, ~0.123) = ~0.123 +rem (~0.123, ~0.123) = 0.0 +* (~0.123, ~0.123E~2) = 0.15129E~3 ++ (~0.123, ~0.123E~2) = ~0.12423 +- (~0.123, ~0.123E~2) = ~0.12177 +/ (~0.123, ~0.123E~2) = 0.1E3 +nextAfter (~0.123, ~0.123E~2) = ~0.12299999999999998 +rem (~0.123, ~0.123E~2) = 0.0 +* (~0.123, ~0.22250738585072014E~307) = 0.273684084596386E~308 ++ (~0.123, ~0.22250738585072014E~307) = ~0.123 +- (~0.123, ~0.22250738585072014E~307) = ~0.123 +/ (~0.123, ~0.22250738585072014E~307) = 0.55279063897016213E307 +nextAfter (~0.123, ~0.22250738585072014E~307) = ~0.12299999999999998 +rem (~0.123, ~0.22250738585072014E~307) = 0.0 +* (~0.123, ~0.11125369292536007E~307) = 0.136842042298193E~308 ++ (~0.123, ~0.11125369292536007E~307) = ~0.123 +- (~0.123, ~0.11125369292536007E~307) = ~0.123 +/ (~0.123, ~0.11125369292536007E~307) = 0.11055812779403243E308 +nextAfter (~0.123, ~0.11125369292536007E~307) = ~0.12299999999999998 +rem (~0.123, ~0.11125369292536007E~307) = 0.0 +* (~0.123, ~0.5E~323) = 0.0 ++ (~0.123, ~0.5E~323) = ~0.123 +- (~0.123, ~0.5E~323) = ~0.123 +/ (~0.123, ~0.5E~323) = inf +nextAfter (~0.123, ~0.5E~323) = ~0.12299999999999998 +rem (~0.123, ~0.5E~323) = inf +* (~0.123, ~0.0) = 0.0 ++ (~0.123, ~0.0) = ~0.123 +- (~0.123, ~0.0) = ~0.123 +/ (~0.123, ~0.0) = inf +nextAfter (~0.123, ~0.0) = ~0.12299999999999998 +rem (~0.123, ~0.0) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.12299999999999998 +rem (~0.123, inf) = ~0.123 +* (~0.123, ~inf) = inf ++ (~0.123, ~inf) = ~inf +- (~0.123, ~inf) = inf +/ (~0.123, ~inf) = 0.0 +nextAfter (~0.123, ~inf) = ~0.12300000000000001 +rem (~0.123, ~inf) = ~0.123 +* (~0.123, nan) = nan ++ (~0.123, nan) = nan +- (~0.123, nan) = nan +/ (~0.123, nan) = nan +nextAfter (~0.123, nan) = nan +rem (~0.123, nan) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.12299999999999998 +rem (~0.123, inf) = ~0.123 +* (~0.123E~2, 0.17976931348623157E309) = ~0.2211162555880648E306 ++ (~0.123E~2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E~2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E~2, 0.17976931348623157E309) = ~0.684210211491E~311 +nextAfter (~0.123E~2, 0.17976931348623157E309) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.17976931348623157E309) = ~0.123E~2 +* (~0.123E~2, 0.8988465674311579E308) = ~0.1105581277940324E306 ++ (~0.123E~2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E~2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E~2, 0.8988465674311579E308) = ~0.1368420422982E~310 +nextAfter (~0.123E~2, 0.8988465674311579E308) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.8988465674311579E308) = ~0.123E~2 +* (~0.123E~2, 0.123E4) = ~0.15129E1 ++ (~0.123E~2, 0.123E4) = 0.122999877E4 +- (~0.123E~2, 0.123E4) = ~0.123000123E4 +/ (~0.123E~2, 0.123E4) = ~0.1E~5 +nextAfter (~0.123E~2, 0.123E4) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E4) = ~0.123E~2 +* (~0.123E~2, 0.123E2) = ~0.15129E~1 ++ (~0.123E~2, 0.123E2) = 0.12298770000000001E2 +- (~0.123E~2, 0.123E2) = ~0.1230123E2 +/ (~0.123E~2, 0.123E2) = ~0.9999999999999999E~4 +nextAfter (~0.123E~2, 0.123E2) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E2) = ~0.123E~2 +* (~0.123E~2, 0.3141592653589793E1) = ~0.38641589639154456E~2 ++ (~0.123E~2, 0.3141592653589793E1) = 0.3140362653589793E1 +- (~0.123E~2, 0.3141592653589793E1) = ~0.3142822653589793E1 +/ (~0.123E~2, 0.3141592653589793E1) = ~0.3915211600060625E~3 +nextAfter (~0.123E~2, 0.3141592653589793E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.3141592653589793E1) = ~0.123E~2 +* (~0.123E~2, 0.2718281828459045E1) = ~0.33434866490046253E~2 ++ (~0.123E~2, 0.2718281828459045E1) = 0.2717051828459045E1 +- (~0.123E~2, 0.2718281828459045E1) = ~0.2719511828459045E1 +/ (~0.123E~2, 0.2718281828459045E1) = ~0.45249171264087406E~3 +nextAfter (~0.123E~2, 0.2718281828459045E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.2718281828459045E1) = ~0.123E~2 +* (~0.123E~2, 0.123E1) = ~0.15129E~2 ++ (~0.123E~2, 0.123E1) = 0.122877E1 +- (~0.123E~2, 0.123E1) = ~0.123123E1 +/ (~0.123E~2, 0.123E1) = ~0.1E~2 +nextAfter (~0.123E~2, 0.123E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E1) = ~0.123E~2 +* (~0.123E~2, 0.123) = ~0.15129E~3 ++ (~0.123E~2, 0.123) = 0.12177 +- (~0.123E~2, 0.123) = ~0.12423 +/ (~0.123E~2, 0.123) = ~0.1E~1 +nextAfter (~0.123E~2, 0.123) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123) = ~0.123E~2 +* (~0.123E~2, 0.123E~2) = ~0.15129E~5 ++ (~0.123E~2, 0.123E~2) = 0.0 +- (~0.123E~2, 0.123E~2) = ~0.246E~2 +/ (~0.123E~2, 0.123E~2) = ~0.1E1 +nextAfter (~0.123E~2, 0.123E~2) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E~2) = 0.0 +* (~0.123E~2, 0.22250738585072014E~307) = ~0.2736840845964E~310 ++ (~0.123E~2, 0.22250738585072014E~307) = ~0.123E~2 +- (~0.123E~2, 0.22250738585072014E~307) = ~0.123E~2 +/ (~0.123E~2, 0.22250738585072014E~307) = ~0.5527906389701621E305 +nextAfter (~0.123E~2, 0.22250738585072014E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.22250738585072014E~307) = 0.0 +* (~0.123E~2, 0.11125369292536007E~307) = ~0.1368420422982E~310 ++ (~0.123E~2, 0.11125369292536007E~307) = ~0.123E~2 +- (~0.123E~2, 0.11125369292536007E~307) = ~0.123E~2 +/ (~0.123E~2, 0.11125369292536007E~307) = ~0.11055812779403243E306 +nextAfter (~0.123E~2, 0.11125369292536007E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.11125369292536007E~307) = 0.0 +* (~0.123E~2, 0.5E~323) = ~0.0 ++ (~0.123E~2, 0.5E~323) = ~0.123E~2 +- (~0.123E~2, 0.5E~323) = ~0.123E~2 +/ (~0.123E~2, 0.5E~323) = ~inf +nextAfter (~0.123E~2, 0.5E~323) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.5E~323) = inf +* (~0.123E~2, 0.0) = ~0.0 ++ (~0.123E~2, 0.0) = ~0.123E~2 +- (~0.123E~2, 0.0) = ~0.123E~2 +/ (~0.123E~2, 0.0) = ~inf +nextAfter (~0.123E~2, 0.0) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.0) = nan +* (~0.123E~2, ~0.17976931348623157E309) = 0.2211162555880648E306 ++ (~0.123E~2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E~2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E~2, ~0.17976931348623157E309) = 0.684210211491E~311 +nextAfter (~0.123E~2, ~0.17976931348623157E309) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.17976931348623157E309) = ~0.123E~2 +* (~0.123E~2, ~0.8988465674311579E308) = 0.1105581277940324E306 ++ (~0.123E~2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E~2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E~2, ~0.8988465674311579E308) = 0.1368420422982E~310 +nextAfter (~0.123E~2, ~0.8988465674311579E308) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.8988465674311579E308) = ~0.123E~2 +* (~0.123E~2, ~0.123E4) = 0.15129E1 ++ (~0.123E~2, ~0.123E4) = ~0.123000123E4 +- (~0.123E~2, ~0.123E4) = 0.122999877E4 +/ (~0.123E~2, ~0.123E4) = 0.1E~5 +nextAfter (~0.123E~2, ~0.123E4) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E4) = ~0.123E~2 +* (~0.123E~2, ~0.123E2) = 0.15129E~1 ++ (~0.123E~2, ~0.123E2) = ~0.1230123E2 +- (~0.123E~2, ~0.123E2) = 0.12298770000000001E2 +/ (~0.123E~2, ~0.123E2) = 0.9999999999999999E~4 +nextAfter (~0.123E~2, ~0.123E2) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E2) = ~0.123E~2 +* (~0.123E~2, ~0.3141592653589793E1) = 0.38641589639154456E~2 ++ (~0.123E~2, ~0.3141592653589793E1) = ~0.3142822653589793E1 +- (~0.123E~2, ~0.3141592653589793E1) = 0.3140362653589793E1 +/ (~0.123E~2, ~0.3141592653589793E1) = 0.3915211600060625E~3 +nextAfter (~0.123E~2, ~0.3141592653589793E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.3141592653589793E1) = ~0.123E~2 +* (~0.123E~2, ~0.2718281828459045E1) = 0.33434866490046253E~2 ++ (~0.123E~2, ~0.2718281828459045E1) = ~0.2719511828459045E1 +- (~0.123E~2, ~0.2718281828459045E1) = 0.2717051828459045E1 +/ (~0.123E~2, ~0.2718281828459045E1) = 0.45249171264087406E~3 +nextAfter (~0.123E~2, ~0.2718281828459045E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.2718281828459045E1) = ~0.123E~2 +* (~0.123E~2, ~0.123E1) = 0.15129E~2 ++ (~0.123E~2, ~0.123E1) = ~0.123123E1 +- (~0.123E~2, ~0.123E1) = 0.122877E1 +/ (~0.123E~2, ~0.123E1) = 0.1E~2 +nextAfter (~0.123E~2, ~0.123E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E1) = ~0.123E~2 +* (~0.123E~2, ~0.123) = 0.15129E~3 ++ (~0.123E~2, ~0.123) = ~0.12423 +- (~0.123E~2, ~0.123) = 0.12177 +/ (~0.123E~2, ~0.123) = 0.1E~1 +nextAfter (~0.123E~2, ~0.123) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123) = ~0.123E~2 +* (~0.123E~2, ~0.123E~2) = 0.15129E~5 ++ (~0.123E~2, ~0.123E~2) = ~0.246E~2 +- (~0.123E~2, ~0.123E~2) = 0.0 +/ (~0.123E~2, ~0.123E~2) = 0.1E1 +nextAfter (~0.123E~2, ~0.123E~2) = ~0.123E~2 +rem (~0.123E~2, ~0.123E~2) = 0.0 +* (~0.123E~2, ~0.22250738585072014E~307) = 0.2736840845964E~310 ++ (~0.123E~2, ~0.22250738585072014E~307) = ~0.123E~2 +- (~0.123E~2, ~0.22250738585072014E~307) = ~0.123E~2 +/ (~0.123E~2, ~0.22250738585072014E~307) = 0.5527906389701621E305 +nextAfter (~0.123E~2, ~0.22250738585072014E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.22250738585072014E~307) = 0.0 +* (~0.123E~2, ~0.11125369292536007E~307) = 0.1368420422982E~310 ++ (~0.123E~2, ~0.11125369292536007E~307) = ~0.123E~2 +- (~0.123E~2, ~0.11125369292536007E~307) = ~0.123E~2 +/ (~0.123E~2, ~0.11125369292536007E~307) = 0.11055812779403243E306 +nextAfter (~0.123E~2, ~0.11125369292536007E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.11125369292536007E~307) = 0.0 +* (~0.123E~2, ~0.5E~323) = 0.0 ++ (~0.123E~2, ~0.5E~323) = ~0.123E~2 +- (~0.123E~2, ~0.5E~323) = ~0.123E~2 +/ (~0.123E~2, ~0.5E~323) = inf +nextAfter (~0.123E~2, ~0.5E~323) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.5E~323) = inf +* (~0.123E~2, ~0.0) = 0.0 ++ (~0.123E~2, ~0.0) = ~0.123E~2 +- (~0.123E~2, ~0.0) = ~0.123E~2 +/ (~0.123E~2, ~0.0) = inf +nextAfter (~0.123E~2, ~0.0) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.0) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999999999998E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.123E~2, ~inf) = inf ++ (~0.123E~2, ~inf) = ~inf +- (~0.123E~2, ~inf) = inf +/ (~0.123E~2, ~inf) = 0.0 +nextAfter (~0.123E~2, ~inf) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~inf) = ~0.123E~2 +* (~0.123E~2, nan) = nan ++ (~0.123E~2, nan) = nan +- (~0.123E~2, nan) = nan +/ (~0.123E~2, nan) = nan +nextAfter (~0.123E~2, nan) = nan +rem (~0.123E~2, nan) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999999999998E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.39999999999999996E1 ++ (~0.22250738585072014E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.19999999999999998E1 ++ (~0.22250738585072014E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E4) = ~0.27368408459638577E~304 ++ (~0.22250738585072014E~307, 0.123E4) = 0.123E4 +- (~0.22250738585072014E~307, 0.123E4) = ~0.123E4 +/ (~0.22250738585072014E~307, 0.123E4) = ~0.18090031369976E~310 +nextAfter (~0.22250738585072014E~307, 0.123E4) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E4) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E2) = ~0.2736840845963858E~306 ++ (~0.22250738585072014E~307, 0.123E2) = 0.123E2 +- (~0.22250738585072014E~307, 0.123E2) = ~0.123E2 +/ (~0.22250738585072014E~307, 0.123E2) = ~0.1809003136997725E~308 +nextAfter (~0.22250738585072014E~307, 0.123E2) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.6990275687580919E~307 ++ (~0.22250738585072014E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.7082630066519554E~308 +nextAfter (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.6048377836559378E~307 ++ (~0.22250738585072014E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.818558927632814E~308 +nextAfter (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E1) = ~0.27368408459638577E~307 ++ (~0.22250738585072014E~307, 0.123E1) = 0.123E1 +- (~0.22250738585072014E~307, 0.123E1) = ~0.123E1 +/ (~0.22250738585072014E~307, 0.123E1) = ~0.18090031369977247E~307 +nextAfter (~0.22250738585072014E~307, 0.123E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123) = ~0.273684084596386E~308 ++ (~0.22250738585072014E~307, 0.123) = 0.123 +- (~0.22250738585072014E~307, 0.123) = ~0.123 +/ (~0.22250738585072014E~307, 0.123) = ~0.1809003136997725E~306 +nextAfter (~0.22250738585072014E~307, 0.123) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E~2) = ~0.2736840845964E~310 ++ (~0.22250738585072014E~307, 0.123E~2) = 0.123E~2 +- (~0.22250738585072014E~307, 0.123E~2) = ~0.123E~2 +/ (~0.22250738585072014E~307, 0.123E~2) = ~0.18090031369977247E~304 +nextAfter (~0.22250738585072014E~307, 0.123E~2) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E~2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.0 ++ (~0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +- (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.4450147717014403E~307 +/ (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.1E1 +nextAfter (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +* (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.0 ++ (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.3337610787760802E~307 +/ (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.2E1 +nextAfter (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 +* (~0.22250738585072014E~307, 0.5E~323) = ~0.0 ++ (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507201E~307 +- (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507202E~307 +/ (~0.22250738585072014E~307, 0.5E~323) = ~0.4503599627370496E16 +nextAfter (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.5E~323) = 0.0 +* (~0.22250738585072014E~307, 0.0) = ~0.0 ++ (~0.22250738585072014E~307, 0.0) = ~0.22250738585072014E~307 +- (~0.22250738585072014E~307, 0.0) = ~0.22250738585072014E~307 +/ (~0.22250738585072014E~307, 0.0) = ~inf +nextAfter (~0.22250738585072014E~307, 0.0) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.0) = nan +* (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.39999999999999996E1 ++ (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.19999999999999998E1 ++ (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E4) = 0.27368408459638577E~304 ++ (~0.22250738585072014E~307, ~0.123E4) = ~0.123E4 +- (~0.22250738585072014E~307, ~0.123E4) = 0.123E4 +/ (~0.22250738585072014E~307, ~0.123E4) = 0.18090031369976E~310 +nextAfter (~0.22250738585072014E~307, ~0.123E4) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E4) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E2) = 0.2736840845963858E~306 ++ (~0.22250738585072014E~307, ~0.123E2) = ~0.123E2 +- (~0.22250738585072014E~307, ~0.123E2) = 0.123E2 +/ (~0.22250738585072014E~307, ~0.123E2) = 0.1809003136997725E~308 +nextAfter (~0.22250738585072014E~307, ~0.123E2) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.6990275687580919E~307 ++ (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.7082630066519554E~308 +nextAfter (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.6048377836559378E~307 ++ (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.818558927632814E~308 +nextAfter (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E1) = 0.27368408459638577E~307 ++ (~0.22250738585072014E~307, ~0.123E1) = ~0.123E1 +- (~0.22250738585072014E~307, ~0.123E1) = 0.123E1 +/ (~0.22250738585072014E~307, ~0.123E1) = 0.18090031369977247E~307 +nextAfter (~0.22250738585072014E~307, ~0.123E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123) = 0.273684084596386E~308 ++ (~0.22250738585072014E~307, ~0.123) = ~0.123 +- (~0.22250738585072014E~307, ~0.123) = 0.123 +/ (~0.22250738585072014E~307, ~0.123) = 0.1809003136997725E~306 +nextAfter (~0.22250738585072014E~307, ~0.123) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E~2) = 0.2736840845964E~310 ++ (~0.22250738585072014E~307, ~0.123E~2) = ~0.123E~2 +- (~0.22250738585072014E~307, ~0.123E~2) = 0.123E~2 +/ (~0.22250738585072014E~307, ~0.123E~2) = 0.18090031369977247E~304 +nextAfter (~0.22250738585072014E~307, ~0.123E~2) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E~2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 ++ (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.4450147717014403E~307 +- (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +/ (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.1E1 +nextAfter (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +rem (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +* (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 ++ (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.3337610787760802E~307 +- (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.2E1 +nextAfter (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 +* (~0.22250738585072014E~307, ~0.5E~323) = 0.0 ++ (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507202E~307 +- (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507201E~307 +/ (~0.22250738585072014E~307, ~0.5E~323) = 0.4503599627370496E16 +nextAfter (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.5E~323) = 0.0 +* (~0.22250738585072014E~307, ~0.0) = 0.0 ++ (~0.22250738585072014E~307, ~0.0) = ~0.22250738585072014E~307 +- (~0.22250738585072014E~307, ~0.0) = ~0.22250738585072014E~307 +/ (~0.22250738585072014E~307, ~0.0) = inf +nextAfter (~0.22250738585072014E~307, ~0.0) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.0) = nan +* (~0.22250738585072014E~307, inf) = ~inf ++ (~0.22250738585072014E~307, inf) = inf +- (~0.22250738585072014E~307, inf) = ~inf +/ (~0.22250738585072014E~307, inf) = ~0.0 +nextAfter (~0.22250738585072014E~307, inf) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, inf) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~inf) = inf ++ (~0.22250738585072014E~307, ~inf) = ~inf +- (~0.22250738585072014E~307, ~inf) = inf +/ (~0.22250738585072014E~307, ~inf) = 0.0 +nextAfter (~0.22250738585072014E~307, ~inf) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~inf) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, nan) = nan ++ (~0.22250738585072014E~307, nan) = nan +- (~0.22250738585072014E~307, nan) = nan +/ (~0.22250738585072014E~307, nan) = nan +nextAfter (~0.22250738585072014E~307, nan) = nan +rem (~0.22250738585072014E~307, nan) = nan +* (~0.22250738585072014E~307, inf) = ~inf ++ (~0.22250738585072014E~307, inf) = inf +- (~0.22250738585072014E~307, inf) = ~inf +/ (~0.22250738585072014E~307, inf) = ~0.0 +nextAfter (~0.22250738585072014E~307, inf) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, inf) = ~0.22250738585072014E~307 +* (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.19999999999999998E1 ++ (~0.11125369292536007E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.9999999999999999 ++ (~0.11125369292536007E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E4) = ~0.13684204229819289E~304 ++ (~0.11125369292536007E~307, 0.123E4) = 0.123E4 +- (~0.11125369292536007E~307, 0.123E4) = ~0.123E4 +/ (~0.11125369292536007E~307, 0.123E4) = ~0.904501568499E~311 +nextAfter (~0.11125369292536007E~307, 0.123E4) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E4) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E2) = ~0.1368420422981929E~306 ++ (~0.11125369292536007E~307, 0.123E2) = 0.123E2 +- (~0.11125369292536007E~307, 0.123E2) = ~0.123E2 +/ (~0.11125369292536007E~307, 0.123E2) = ~0.90450156849886E~309 +nextAfter (~0.11125369292536007E~307, 0.123E2) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.34951378437904593E~307 ++ (~0.11125369292536007E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3541315033259774E~308 +nextAfter (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.3024188918279689E~307 ++ (~0.11125369292536007E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.409279463816407E~308 +nextAfter (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E1) = ~0.1368420422981929E~307 ++ (~0.11125369292536007E~307, 0.123E1) = 0.123E1 +- (~0.11125369292536007E~307, 0.123E1) = ~0.123E1 +/ (~0.11125369292536007E~307, 0.123E1) = ~0.9045015684988623E~308 +nextAfter (~0.11125369292536007E~307, 0.123E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123) = ~0.136842042298193E~308 ++ (~0.11125369292536007E~307, 0.123) = 0.123 +- (~0.11125369292536007E~307, 0.123) = ~0.123 +/ (~0.11125369292536007E~307, 0.123) = ~0.9045015684988624E~307 +nextAfter (~0.11125369292536007E~307, 0.123) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E~2) = ~0.1368420422982E~310 ++ (~0.11125369292536007E~307, 0.123E~2) = 0.123E~2 +- (~0.11125369292536007E~307, 0.123E~2) = ~0.123E~2 +/ (~0.11125369292536007E~307, 0.123E~2) = ~0.9045015684988623E~305 +nextAfter (~0.11125369292536007E~307, 0.123E~2) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E~2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.0 ++ (~0.11125369292536007E~307, 0.22250738585072014E~307) = 0.11125369292536007E~307 +- (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.3337610787760802E~307 +/ (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.5 +nextAfter (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.0 ++ (~0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +- (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.22250738585072014E~307 +/ (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.1E1 +nextAfter (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +* (~0.11125369292536007E~307, 0.5E~323) = ~0.0 ++ (~0.11125369292536007E~307, 0.5E~323) = ~0.11125369292536E~307 +- (~0.11125369292536007E~307, 0.5E~323) = ~0.1112536929253601E~307 +/ (~0.11125369292536007E~307, 0.5E~323) = ~0.2251799813685248E16 +nextAfter (~0.11125369292536007E~307, 0.5E~323) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.5E~323) = 0.0 +* (~0.11125369292536007E~307, 0.0) = ~0.0 ++ (~0.11125369292536007E~307, 0.0) = ~0.11125369292536007E~307 +- (~0.11125369292536007E~307, 0.0) = ~0.11125369292536007E~307 +/ (~0.11125369292536007E~307, 0.0) = ~inf +nextAfter (~0.11125369292536007E~307, 0.0) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.0) = nan +* (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.19999999999999998E1 ++ (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.9999999999999999 ++ (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E4) = 0.13684204229819289E~304 ++ (~0.11125369292536007E~307, ~0.123E4) = ~0.123E4 +- (~0.11125369292536007E~307, ~0.123E4) = 0.123E4 +/ (~0.11125369292536007E~307, ~0.123E4) = 0.904501568499E~311 +nextAfter (~0.11125369292536007E~307, ~0.123E4) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E4) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E2) = 0.1368420422981929E~306 ++ (~0.11125369292536007E~307, ~0.123E2) = ~0.123E2 +- (~0.11125369292536007E~307, ~0.123E2) = 0.123E2 +/ (~0.11125369292536007E~307, ~0.123E2) = 0.90450156849886E~309 +nextAfter (~0.11125369292536007E~307, ~0.123E2) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.34951378437904593E~307 ++ (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3541315033259774E~308 +nextAfter (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.3024188918279689E~307 ++ (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.409279463816407E~308 +nextAfter (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E1) = 0.1368420422981929E~307 ++ (~0.11125369292536007E~307, ~0.123E1) = ~0.123E1 +- (~0.11125369292536007E~307, ~0.123E1) = 0.123E1 +/ (~0.11125369292536007E~307, ~0.123E1) = 0.9045015684988623E~308 +nextAfter (~0.11125369292536007E~307, ~0.123E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123) = 0.136842042298193E~308 ++ (~0.11125369292536007E~307, ~0.123) = ~0.123 +- (~0.11125369292536007E~307, ~0.123) = 0.123 +/ (~0.11125369292536007E~307, ~0.123) = 0.9045015684988624E~307 +nextAfter (~0.11125369292536007E~307, ~0.123) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E~2) = 0.1368420422982E~310 ++ (~0.11125369292536007E~307, ~0.123E~2) = ~0.123E~2 +- (~0.11125369292536007E~307, ~0.123E~2) = 0.123E~2 +/ (~0.11125369292536007E~307, ~0.123E~2) = 0.9045015684988623E~305 +nextAfter (~0.11125369292536007E~307, ~0.123E~2) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E~2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.0 ++ (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.3337610787760802E~307 +- (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536007E~307 +/ (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.5 +nextAfter (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 ++ (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.22250738585072014E~307 +- (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +/ (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.1E1 +nextAfter (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +rem (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +* (~0.11125369292536007E~307, ~0.5E~323) = 0.0 ++ (~0.11125369292536007E~307, ~0.5E~323) = ~0.1112536929253601E~307 +- (~0.11125369292536007E~307, ~0.5E~323) = ~0.11125369292536E~307 +/ (~0.11125369292536007E~307, ~0.5E~323) = 0.2251799813685248E16 +nextAfter (~0.11125369292536007E~307, ~0.5E~323) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, ~0.5E~323) = 0.0 +* (~0.11125369292536007E~307, ~0.0) = 0.0 ++ (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536007E~307 +- (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536007E~307 +/ (~0.11125369292536007E~307, ~0.0) = inf +nextAfter (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, ~0.0) = nan +* (~0.11125369292536007E~307, inf) = ~inf ++ (~0.11125369292536007E~307, inf) = inf +- (~0.11125369292536007E~307, inf) = ~inf +/ (~0.11125369292536007E~307, inf) = ~0.0 +nextAfter (~0.11125369292536007E~307, inf) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, inf) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~inf) = inf ++ (~0.11125369292536007E~307, ~inf) = ~inf +- (~0.11125369292536007E~307, ~inf) = inf +/ (~0.11125369292536007E~307, ~inf) = 0.0 +nextAfter (~0.11125369292536007E~307, ~inf) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~inf) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, nan) = nan ++ (~0.11125369292536007E~307, nan) = nan +- (~0.11125369292536007E~307, nan) = nan +/ (~0.11125369292536007E~307, nan) = nan +nextAfter (~0.11125369292536007E~307, nan) = nan +rem (~0.11125369292536007E~307, nan) = nan +* (~0.11125369292536007E~307, inf) = ~inf ++ (~0.11125369292536007E~307, inf) = inf +- (~0.11125369292536007E~307, inf) = ~inf +/ (~0.11125369292536007E~307, inf) = ~0.0 +nextAfter (~0.11125369292536007E~307, inf) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, inf) = ~0.11125369292536007E~307 +* (~0.5E~323, 0.17976931348623157E309) = ~0.8881784197001251E~15 ++ (~0.5E~323, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.5E~323, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.5E~323, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.5E~323, 0.17976931348623157E309) = ~0.0 +rem (~0.5E~323, 0.17976931348623157E309) = ~0.5E~323 +* (~0.5E~323, 0.8988465674311579E308) = ~0.44408920985006257E~15 ++ (~0.5E~323, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.5E~323, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.5E~323, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.5E~323, 0.8988465674311579E308) = ~0.0 +rem (~0.5E~323, 0.8988465674311579E308) = ~0.5E~323 +* (~0.5E~323, 0.123E4) = ~0.6077E~320 ++ (~0.5E~323, 0.123E4) = 0.123E4 +- (~0.5E~323, 0.123E4) = ~0.123E4 +/ (~0.5E~323, 0.123E4) = ~0.0 +nextAfter (~0.5E~323, 0.123E4) = ~0.0 +rem (~0.5E~323, 0.123E4) = ~0.5E~323 +* (~0.5E~323, 0.123E2) = ~0.6E~322 ++ (~0.5E~323, 0.123E2) = 0.123E2 +- (~0.5E~323, 0.123E2) = ~0.123E2 +/ (~0.5E~323, 0.123E2) = ~0.0 +nextAfter (~0.5E~323, 0.123E2) = ~0.0 +rem (~0.5E~323, 0.123E2) = ~0.5E~323 +* (~0.5E~323, 0.3141592653589793E1) = ~0.15E~322 ++ (~0.5E~323, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.5E~323, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.5E~323, 0.3141592653589793E1) = ~0.0 +nextAfter (~0.5E~323, 0.3141592653589793E1) = ~0.0 +rem (~0.5E~323, 0.3141592653589793E1) = ~0.5E~323 +* (~0.5E~323, 0.2718281828459045E1) = ~0.15E~322 ++ (~0.5E~323, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.5E~323, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.5E~323, 0.2718281828459045E1) = ~0.0 +nextAfter (~0.5E~323, 0.2718281828459045E1) = ~0.0 +rem (~0.5E~323, 0.2718281828459045E1) = ~0.5E~323 +* (~0.5E~323, 0.123E1) = ~0.5E~323 ++ (~0.5E~323, 0.123E1) = 0.123E1 +- (~0.5E~323, 0.123E1) = ~0.123E1 +/ (~0.5E~323, 0.123E1) = ~0.5E~323 +nextAfter (~0.5E~323, 0.123E1) = ~0.0 +rem (~0.5E~323, 0.123E1) = ~0.5E~323 +* (~0.5E~323, 0.123) = ~0.0 ++ (~0.5E~323, 0.123) = 0.123 +- (~0.5E~323, 0.123) = ~0.123 +/ (~0.5E~323, 0.123) = ~0.4E~322 +nextAfter (~0.5E~323, 0.123) = ~0.0 +rem (~0.5E~323, 0.123) = ~0.5E~323 +* (~0.5E~323, 0.123E~2) = ~0.0 ++ (~0.5E~323, 0.123E~2) = 0.123E~2 +- (~0.5E~323, 0.123E~2) = ~0.123E~2 +/ (~0.5E~323, 0.123E~2) = ~0.4017E~320 +nextAfter (~0.5E~323, 0.123E~2) = ~0.0 +rem (~0.5E~323, 0.123E~2) = ~0.5E~323 +* (~0.5E~323, 0.22250738585072014E~307) = ~0.0 ++ (~0.5E~323, 0.22250738585072014E~307) = 0.2225073858507201E~307 +- (~0.5E~323, 0.22250738585072014E~307) = ~0.2225073858507202E~307 +/ (~0.5E~323, 0.22250738585072014E~307) = ~0.2220446049250313E~15 +nextAfter (~0.5E~323, 0.22250738585072014E~307) = ~0.0 +rem (~0.5E~323, 0.22250738585072014E~307) = ~0.5E~323 +* (~0.5E~323, 0.11125369292536007E~307) = ~0.0 ++ (~0.5E~323, 0.11125369292536007E~307) = 0.11125369292536E~307 +- (~0.5E~323, 0.11125369292536007E~307) = ~0.1112536929253601E~307 +/ (~0.5E~323, 0.11125369292536007E~307) = ~0.4440892098500626E~15 +nextAfter (~0.5E~323, 0.11125369292536007E~307) = ~0.0 +rem (~0.5E~323, 0.11125369292536007E~307) = ~0.5E~323 +* (~0.5E~323, 0.5E~323) = ~0.0 ++ (~0.5E~323, 0.5E~323) = 0.0 +- (~0.5E~323, 0.5E~323) = ~0.1E~322 +/ (~0.5E~323, 0.5E~323) = ~0.1E1 +nextAfter (~0.5E~323, 0.5E~323) = ~0.0 +rem (~0.5E~323, 0.5E~323) = 0.0 +* (~0.5E~323, 0.0) = ~0.0 ++ (~0.5E~323, 0.0) = ~0.5E~323 +- (~0.5E~323, 0.0) = ~0.5E~323 +/ (~0.5E~323, 0.0) = ~inf +nextAfter (~0.5E~323, 0.0) = ~0.0 +rem (~0.5E~323, 0.0) = nan +* (~0.5E~323, ~0.17976931348623157E309) = 0.8881784197001251E~15 ++ (~0.5E~323, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.5E~323, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.5E~323, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.5E~323, ~0.17976931348623157E309) = ~0.1E~322 +rem (~0.5E~323, ~0.17976931348623157E309) = ~0.5E~323 +* (~0.5E~323, ~0.8988465674311579E308) = 0.44408920985006257E~15 ++ (~0.5E~323, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.5E~323, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.5E~323, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.5E~323, ~0.8988465674311579E308) = ~0.1E~322 +rem (~0.5E~323, ~0.8988465674311579E308) = ~0.5E~323 +* (~0.5E~323, ~0.123E4) = 0.6077E~320 ++ (~0.5E~323, ~0.123E4) = ~0.123E4 +- (~0.5E~323, ~0.123E4) = 0.123E4 +/ (~0.5E~323, ~0.123E4) = 0.0 +nextAfter (~0.5E~323, ~0.123E4) = ~0.1E~322 +rem (~0.5E~323, ~0.123E4) = ~0.5E~323 +* (~0.5E~323, ~0.123E2) = 0.6E~322 ++ (~0.5E~323, ~0.123E2) = ~0.123E2 +- (~0.5E~323, ~0.123E2) = 0.123E2 +/ (~0.5E~323, ~0.123E2) = 0.0 +nextAfter (~0.5E~323, ~0.123E2) = ~0.1E~322 +rem (~0.5E~323, ~0.123E2) = ~0.5E~323 +* (~0.5E~323, ~0.3141592653589793E1) = 0.15E~322 ++ (~0.5E~323, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.5E~323, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.5E~323, ~0.3141592653589793E1) = 0.0 +nextAfter (~0.5E~323, ~0.3141592653589793E1) = ~0.1E~322 +rem (~0.5E~323, ~0.3141592653589793E1) = ~0.5E~323 +* (~0.5E~323, ~0.2718281828459045E1) = 0.15E~322 ++ (~0.5E~323, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.5E~323, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.5E~323, ~0.2718281828459045E1) = 0.0 +nextAfter (~0.5E~323, ~0.2718281828459045E1) = ~0.1E~322 +rem (~0.5E~323, ~0.2718281828459045E1) = ~0.5E~323 +* (~0.5E~323, ~0.123E1) = 0.5E~323 ++ (~0.5E~323, ~0.123E1) = ~0.123E1 +- (~0.5E~323, ~0.123E1) = 0.123E1 +/ (~0.5E~323, ~0.123E1) = 0.5E~323 +nextAfter (~0.5E~323, ~0.123E1) = ~0.1E~322 +rem (~0.5E~323, ~0.123E1) = ~0.5E~323 +* (~0.5E~323, ~0.123) = 0.0 ++ (~0.5E~323, ~0.123) = ~0.123 +- (~0.5E~323, ~0.123) = 0.123 +/ (~0.5E~323, ~0.123) = 0.4E~322 +nextAfter (~0.5E~323, ~0.123) = ~0.1E~322 +rem (~0.5E~323, ~0.123) = ~0.5E~323 +* (~0.5E~323, ~0.123E~2) = 0.0 ++ (~0.5E~323, ~0.123E~2) = ~0.123E~2 +- (~0.5E~323, ~0.123E~2) = 0.123E~2 +/ (~0.5E~323, ~0.123E~2) = 0.4017E~320 +nextAfter (~0.5E~323, ~0.123E~2) = ~0.1E~322 +rem (~0.5E~323, ~0.123E~2) = ~0.5E~323 +* (~0.5E~323, ~0.22250738585072014E~307) = 0.0 ++ (~0.5E~323, ~0.22250738585072014E~307) = ~0.2225073858507202E~307 +- (~0.5E~323, ~0.22250738585072014E~307) = 0.2225073858507201E~307 +/ (~0.5E~323, ~0.22250738585072014E~307) = 0.2220446049250313E~15 +nextAfter (~0.5E~323, ~0.22250738585072014E~307) = ~0.1E~322 +rem (~0.5E~323, ~0.22250738585072014E~307) = ~0.5E~323 +* (~0.5E~323, ~0.11125369292536007E~307) = 0.0 ++ (~0.5E~323, ~0.11125369292536007E~307) = ~0.1112536929253601E~307 +- (~0.5E~323, ~0.11125369292536007E~307) = 0.11125369292536E~307 +/ (~0.5E~323, ~0.11125369292536007E~307) = 0.4440892098500626E~15 +nextAfter (~0.5E~323, ~0.11125369292536007E~307) = ~0.1E~322 +rem (~0.5E~323, ~0.11125369292536007E~307) = ~0.5E~323 +* (~0.5E~323, ~0.5E~323) = 0.0 ++ (~0.5E~323, ~0.5E~323) = ~0.1E~322 +- (~0.5E~323, ~0.5E~323) = 0.0 +/ (~0.5E~323, ~0.5E~323) = 0.1E1 +nextAfter (~0.5E~323, ~0.5E~323) = ~0.5E~323 +rem (~0.5E~323, ~0.5E~323) = 0.0 +* (~0.5E~323, ~0.0) = 0.0 ++ (~0.5E~323, ~0.0) = ~0.5E~323 +- (~0.5E~323, ~0.0) = ~0.5E~323 +/ (~0.5E~323, ~0.0) = inf +nextAfter (~0.5E~323, ~0.0) = ~0.0 +rem (~0.5E~323, ~0.0) = nan +* (~0.5E~323, inf) = ~inf ++ (~0.5E~323, inf) = inf +- (~0.5E~323, inf) = ~inf +/ (~0.5E~323, inf) = ~0.0 +nextAfter (~0.5E~323, inf) = ~0.0 +rem (~0.5E~323, inf) = ~0.5E~323 +* (~0.5E~323, ~inf) = inf ++ (~0.5E~323, ~inf) = ~inf +- (~0.5E~323, ~inf) = inf +/ (~0.5E~323, ~inf) = 0.0 +nextAfter (~0.5E~323, ~inf) = ~0.1E~322 +rem (~0.5E~323, ~inf) = ~0.5E~323 +* (~0.5E~323, nan) = nan ++ (~0.5E~323, nan) = nan +- (~0.5E~323, nan) = nan +/ (~0.5E~323, nan) = nan +nextAfter (~0.5E~323, nan) = nan +rem (~0.5E~323, nan) = nan +* (~0.5E~323, inf) = ~inf ++ (~0.5E~323, inf) = inf +- (~0.5E~323, inf) = ~inf +/ (~0.5E~323, inf) = ~0.0 +nextAfter (~0.5E~323, inf) = ~0.0 +rem (~0.5E~323, inf) = ~0.5E~323 +* (~0.0, 0.17976931348623157E309) = ~0.0 ++ (~0.0, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.0, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.0, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.0, 0.17976931348623157E309) = 0.5E~323 +rem (~0.0, 0.17976931348623157E309) = 0.0 +* (~0.0, 0.8988465674311579E308) = ~0.0 ++ (~0.0, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.0, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.0, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.0, 0.8988465674311579E308) = 0.5E~323 +rem (~0.0, 0.8988465674311579E308) = 0.0 +* (~0.0, 0.123E4) = ~0.0 ++ (~0.0, 0.123E4) = 0.123E4 +- (~0.0, 0.123E4) = ~0.123E4 +/ (~0.0, 0.123E4) = ~0.0 +nextAfter (~0.0, 0.123E4) = 0.5E~323 +rem (~0.0, 0.123E4) = 0.0 +* (~0.0, 0.123E2) = ~0.0 ++ (~0.0, 0.123E2) = 0.123E2 +- (~0.0, 0.123E2) = ~0.123E2 +/ (~0.0, 0.123E2) = ~0.0 +nextAfter (~0.0, 0.123E2) = 0.5E~323 +rem (~0.0, 0.123E2) = 0.0 +* (~0.0, 0.3141592653589793E1) = ~0.0 ++ (~0.0, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.0, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.0, 0.3141592653589793E1) = ~0.0 +nextAfter (~0.0, 0.3141592653589793E1) = 0.5E~323 +rem (~0.0, 0.3141592653589793E1) = 0.0 +* (~0.0, 0.2718281828459045E1) = ~0.0 ++ (~0.0, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.0, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.0, 0.2718281828459045E1) = ~0.0 +nextAfter (~0.0, 0.2718281828459045E1) = 0.5E~323 +rem (~0.0, 0.2718281828459045E1) = 0.0 +* (~0.0, 0.123E1) = ~0.0 ++ (~0.0, 0.123E1) = 0.123E1 +- (~0.0, 0.123E1) = ~0.123E1 +/ (~0.0, 0.123E1) = ~0.0 +nextAfter (~0.0, 0.123E1) = 0.5E~323 +rem (~0.0, 0.123E1) = 0.0 +* (~0.0, 0.123) = ~0.0 ++ (~0.0, 0.123) = 0.123 +- (~0.0, 0.123) = ~0.123 +/ (~0.0, 0.123) = ~0.0 +nextAfter (~0.0, 0.123) = 0.5E~323 +rem (~0.0, 0.123) = 0.0 +* (~0.0, 0.123E~2) = ~0.0 ++ (~0.0, 0.123E~2) = 0.123E~2 +- (~0.0, 0.123E~2) = ~0.123E~2 +/ (~0.0, 0.123E~2) = ~0.0 +nextAfter (~0.0, 0.123E~2) = 0.5E~323 +rem (~0.0, 0.123E~2) = 0.0 +* (~0.0, 0.22250738585072014E~307) = ~0.0 ++ (~0.0, 0.22250738585072014E~307) = 0.22250738585072014E~307 +- (~0.0, 0.22250738585072014E~307) = ~0.22250738585072014E~307 +/ (~0.0, 0.22250738585072014E~307) = ~0.0 +nextAfter (~0.0, 0.22250738585072014E~307) = 0.5E~323 +rem (~0.0, 0.22250738585072014E~307) = 0.0 +* (~0.0, 0.11125369292536007E~307) = ~0.0 ++ (~0.0, 0.11125369292536007E~307) = 0.11125369292536007E~307 +- (~0.0, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (~0.0, 0.11125369292536007E~307) = ~0.0 +nextAfter (~0.0, 0.11125369292536007E~307) = 0.5E~323 +rem (~0.0, 0.11125369292536007E~307) = 0.0 +* (~0.0, 0.5E~323) = ~0.0 ++ (~0.0, 0.5E~323) = 0.5E~323 +- (~0.0, 0.5E~323) = ~0.5E~323 +/ (~0.0, 0.5E~323) = ~0.0 +nextAfter (~0.0, 0.5E~323) = 0.5E~323 +rem (~0.0, 0.5E~323) = 0.0 +* (~0.0, 0.0) = ~0.0 ++ (~0.0, 0.0) = 0.0 +- (~0.0, 0.0) = ~0.0 +/ (~0.0, 0.0) = nan +nextAfter (~0.0, 0.0) = 0.0 +rem (~0.0, 0.0) = 0.0 +* (~0.0, ~0.17976931348623157E309) = 0.0 ++ (~0.0, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.0, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.0, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.0, ~0.17976931348623157E309) = ~0.5E~323 +rem (~0.0, ~0.17976931348623157E309) = 0.0 +* (~0.0, ~0.8988465674311579E308) = 0.0 ++ (~0.0, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.0, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.0, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.0, ~0.8988465674311579E308) = ~0.5E~323 +rem (~0.0, ~0.8988465674311579E308) = 0.0 +* (~0.0, ~0.123E4) = 0.0 ++ (~0.0, ~0.123E4) = ~0.123E4 +- (~0.0, ~0.123E4) = 0.123E4 +/ (~0.0, ~0.123E4) = 0.0 +nextAfter (~0.0, ~0.123E4) = ~0.5E~323 +rem (~0.0, ~0.123E4) = 0.0 +* (~0.0, ~0.123E2) = 0.0 ++ (~0.0, ~0.123E2) = ~0.123E2 +- (~0.0, ~0.123E2) = 0.123E2 +/ (~0.0, ~0.123E2) = 0.0 +nextAfter (~0.0, ~0.123E2) = ~0.5E~323 +rem (~0.0, ~0.123E2) = 0.0 +* (~0.0, ~0.3141592653589793E1) = 0.0 ++ (~0.0, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.0, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.0, ~0.3141592653589793E1) = 0.0 +nextAfter (~0.0, ~0.3141592653589793E1) = ~0.5E~323 +rem (~0.0, ~0.3141592653589793E1) = 0.0 +* (~0.0, ~0.2718281828459045E1) = 0.0 ++ (~0.0, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.0, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.0, ~0.2718281828459045E1) = 0.0 +nextAfter (~0.0, ~0.2718281828459045E1) = ~0.5E~323 +rem (~0.0, ~0.2718281828459045E1) = 0.0 +* (~0.0, ~0.123E1) = 0.0 ++ (~0.0, ~0.123E1) = ~0.123E1 +- (~0.0, ~0.123E1) = 0.123E1 +/ (~0.0, ~0.123E1) = 0.0 +nextAfter (~0.0, ~0.123E1) = ~0.5E~323 +rem (~0.0, ~0.123E1) = 0.0 +* (~0.0, ~0.123) = 0.0 ++ (~0.0, ~0.123) = ~0.123 +- (~0.0, ~0.123) = 0.123 +/ (~0.0, ~0.123) = 0.0 +nextAfter (~0.0, ~0.123) = ~0.5E~323 +rem (~0.0, ~0.123) = 0.0 +* (~0.0, ~0.123E~2) = 0.0 ++ (~0.0, ~0.123E~2) = ~0.123E~2 +- (~0.0, ~0.123E~2) = 0.123E~2 +/ (~0.0, ~0.123E~2) = 0.0 +nextAfter (~0.0, ~0.123E~2) = ~0.5E~323 +rem (~0.0, ~0.123E~2) = 0.0 +* (~0.0, ~0.22250738585072014E~307) = 0.0 ++ (~0.0, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +- (~0.0, ~0.22250738585072014E~307) = 0.22250738585072014E~307 +/ (~0.0, ~0.22250738585072014E~307) = 0.0 +nextAfter (~0.0, ~0.22250738585072014E~307) = ~0.5E~323 +rem (~0.0, ~0.22250738585072014E~307) = 0.0 +* (~0.0, ~0.11125369292536007E~307) = 0.0 ++ (~0.0, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (~0.0, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (~0.0, ~0.11125369292536007E~307) = 0.0 +nextAfter (~0.0, ~0.11125369292536007E~307) = ~0.5E~323 +rem (~0.0, ~0.11125369292536007E~307) = 0.0 +* (~0.0, ~0.5E~323) = 0.0 ++ (~0.0, ~0.5E~323) = ~0.5E~323 +- (~0.0, ~0.5E~323) = 0.5E~323 +/ (~0.0, ~0.5E~323) = 0.0 +nextAfter (~0.0, ~0.5E~323) = ~0.5E~323 +rem (~0.0, ~0.5E~323) = 0.0 +* (~0.0, ~0.0) = 0.0 ++ (~0.0, ~0.0) = ~0.0 +- (~0.0, ~0.0) = 0.0 +/ (~0.0, ~0.0) = nan +nextAfter (~0.0, ~0.0) = ~0.0 +rem (~0.0, ~0.0) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.5E~323 +rem (~0.0, inf) = 0.0 +* (~0.0, ~inf) = nan ++ (~0.0, ~inf) = ~inf +- (~0.0, ~inf) = inf +/ (~0.0, ~inf) = 0.0 +nextAfter (~0.0, ~inf) = ~0.5E~323 +rem (~0.0, ~inf) = 0.0 +* (~0.0, nan) = nan ++ (~0.0, nan) = nan +- (~0.0, nan) = nan +/ (~0.0, nan) = nan +nextAfter (~0.0, nan) = nan +rem (~0.0, nan) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.5E~323 +rem (~0.0, inf) = 0.0 +* (inf, 0.17976931348623157E309) = inf ++ (inf, 0.17976931348623157E309) = inf +- (inf, 0.17976931348623157E309) = inf +/ (inf, 0.17976931348623157E309) = inf +nextAfter (inf, 0.17976931348623157E309) = inf +rem (inf, 0.17976931348623157E309) = nan +* (inf, 0.8988465674311579E308) = inf ++ (inf, 0.8988465674311579E308) = inf +- (inf, 0.8988465674311579E308) = inf +/ (inf, 0.8988465674311579E308) = inf +nextAfter (inf, 0.8988465674311579E308) = inf +rem (inf, 0.8988465674311579E308) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.3141592653589793E1) = inf ++ (inf, 0.3141592653589793E1) = inf +- (inf, 0.3141592653589793E1) = inf +/ (inf, 0.3141592653589793E1) = inf +nextAfter (inf, 0.3141592653589793E1) = inf +rem (inf, 0.3141592653589793E1) = nan +* (inf, 0.2718281828459045E1) = inf ++ (inf, 0.2718281828459045E1) = inf +- (inf, 0.2718281828459045E1) = inf +/ (inf, 0.2718281828459045E1) = inf +nextAfter (inf, 0.2718281828459045E1) = inf +rem (inf, 0.2718281828459045E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.22250738585072014E~307) = inf ++ (inf, 0.22250738585072014E~307) = inf +- (inf, 0.22250738585072014E~307) = inf +/ (inf, 0.22250738585072014E~307) = inf +nextAfter (inf, 0.22250738585072014E~307) = inf +rem (inf, 0.22250738585072014E~307) = nan +* (inf, 0.11125369292536007E~307) = inf ++ (inf, 0.11125369292536007E~307) = inf +- (inf, 0.11125369292536007E~307) = inf +/ (inf, 0.11125369292536007E~307) = inf +nextAfter (inf, 0.11125369292536007E~307) = inf +rem (inf, 0.11125369292536007E~307) = nan +* (inf, 0.5E~323) = inf ++ (inf, 0.5E~323) = inf +- (inf, 0.5E~323) = inf +/ (inf, 0.5E~323) = inf +nextAfter (inf, 0.5E~323) = inf +rem (inf, 0.5E~323) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.17976931348623157E309) = ~inf ++ (inf, ~0.17976931348623157E309) = inf +- (inf, ~0.17976931348623157E309) = inf +/ (inf, ~0.17976931348623157E309) = ~inf +nextAfter (inf, ~0.17976931348623157E309) = inf +rem (inf, ~0.17976931348623157E309) = nan +* (inf, ~0.8988465674311579E308) = ~inf ++ (inf, ~0.8988465674311579E308) = inf +- (inf, ~0.8988465674311579E308) = inf +/ (inf, ~0.8988465674311579E308) = ~inf +nextAfter (inf, ~0.8988465674311579E308) = inf +rem (inf, ~0.8988465674311579E308) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.3141592653589793E1) = ~inf ++ (inf, ~0.3141592653589793E1) = inf +- (inf, ~0.3141592653589793E1) = inf +/ (inf, ~0.3141592653589793E1) = ~inf +nextAfter (inf, ~0.3141592653589793E1) = inf +rem (inf, ~0.3141592653589793E1) = nan +* (inf, ~0.2718281828459045E1) = ~inf ++ (inf, ~0.2718281828459045E1) = inf +- (inf, ~0.2718281828459045E1) = inf +/ (inf, ~0.2718281828459045E1) = ~inf +nextAfter (inf, ~0.2718281828459045E1) = inf +rem (inf, ~0.2718281828459045E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.22250738585072014E~307) = ~inf ++ (inf, ~0.22250738585072014E~307) = inf +- (inf, ~0.22250738585072014E~307) = inf +/ (inf, ~0.22250738585072014E~307) = ~inf +nextAfter (inf, ~0.22250738585072014E~307) = inf +rem (inf, ~0.22250738585072014E~307) = nan +* (inf, ~0.11125369292536007E~307) = ~inf ++ (inf, ~0.11125369292536007E~307) = inf +- (inf, ~0.11125369292536007E~307) = inf +/ (inf, ~0.11125369292536007E~307) = ~inf +nextAfter (inf, ~0.11125369292536007E~307) = inf +rem (inf, ~0.11125369292536007E~307) = nan +* (inf, ~0.5E~323) = ~inf ++ (inf, ~0.5E~323) = inf +- (inf, ~0.5E~323) = inf +/ (inf, ~0.5E~323) = ~inf +nextAfter (inf, ~0.5E~323) = inf +rem (inf, ~0.5E~323) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (~inf, 0.17976931348623157E309) = ~inf ++ (~inf, 0.17976931348623157E309) = ~inf +- (~inf, 0.17976931348623157E309) = ~inf +/ (~inf, 0.17976931348623157E309) = ~inf +nextAfter (~inf, 0.17976931348623157E309) = ~inf +rem (~inf, 0.17976931348623157E309) = nan +* (~inf, 0.8988465674311579E308) = ~inf ++ (~inf, 0.8988465674311579E308) = ~inf +- (~inf, 0.8988465674311579E308) = ~inf +/ (~inf, 0.8988465674311579E308) = ~inf +nextAfter (~inf, 0.8988465674311579E308) = ~inf +rem (~inf, 0.8988465674311579E308) = nan +* (~inf, 0.123E4) = ~inf ++ (~inf, 0.123E4) = ~inf +- (~inf, 0.123E4) = ~inf +/ (~inf, 0.123E4) = ~inf +nextAfter (~inf, 0.123E4) = ~inf +rem (~inf, 0.123E4) = nan +* (~inf, 0.123E2) = ~inf ++ (~inf, 0.123E2) = ~inf +- (~inf, 0.123E2) = ~inf +/ (~inf, 0.123E2) = ~inf +nextAfter (~inf, 0.123E2) = ~inf +rem (~inf, 0.123E2) = nan +* (~inf, 0.3141592653589793E1) = ~inf ++ (~inf, 0.3141592653589793E1) = ~inf +- (~inf, 0.3141592653589793E1) = ~inf +/ (~inf, 0.3141592653589793E1) = ~inf +nextAfter (~inf, 0.3141592653589793E1) = ~inf +rem (~inf, 0.3141592653589793E1) = nan +* (~inf, 0.2718281828459045E1) = ~inf ++ (~inf, 0.2718281828459045E1) = ~inf +- (~inf, 0.2718281828459045E1) = ~inf +/ (~inf, 0.2718281828459045E1) = ~inf +nextAfter (~inf, 0.2718281828459045E1) = ~inf +rem (~inf, 0.2718281828459045E1) = nan +* (~inf, 0.123E1) = ~inf ++ (~inf, 0.123E1) = ~inf +- (~inf, 0.123E1) = ~inf +/ (~inf, 0.123E1) = ~inf +nextAfter (~inf, 0.123E1) = ~inf +rem (~inf, 0.123E1) = nan +* (~inf, 0.123) = ~inf ++ (~inf, 0.123) = ~inf +- (~inf, 0.123) = ~inf +/ (~inf, 0.123) = ~inf +nextAfter (~inf, 0.123) = ~inf +rem (~inf, 0.123) = nan +* (~inf, 0.123E~2) = ~inf ++ (~inf, 0.123E~2) = ~inf +- (~inf, 0.123E~2) = ~inf +/ (~inf, 0.123E~2) = ~inf +nextAfter (~inf, 0.123E~2) = ~inf +rem (~inf, 0.123E~2) = nan +* (~inf, 0.22250738585072014E~307) = ~inf ++ (~inf, 0.22250738585072014E~307) = ~inf +- (~inf, 0.22250738585072014E~307) = ~inf +/ (~inf, 0.22250738585072014E~307) = ~inf +nextAfter (~inf, 0.22250738585072014E~307) = ~inf +rem (~inf, 0.22250738585072014E~307) = nan +* (~inf, 0.11125369292536007E~307) = ~inf ++ (~inf, 0.11125369292536007E~307) = ~inf +- (~inf, 0.11125369292536007E~307) = ~inf +/ (~inf, 0.11125369292536007E~307) = ~inf +nextAfter (~inf, 0.11125369292536007E~307) = ~inf +rem (~inf, 0.11125369292536007E~307) = nan +* (~inf, 0.5E~323) = ~inf ++ (~inf, 0.5E~323) = ~inf +- (~inf, 0.5E~323) = ~inf +/ (~inf, 0.5E~323) = ~inf +nextAfter (~inf, 0.5E~323) = ~inf +rem (~inf, 0.5E~323) = nan +* (~inf, 0.0) = nan ++ (~inf, 0.0) = ~inf +- (~inf, 0.0) = ~inf +/ (~inf, 0.0) = ~inf +nextAfter (~inf, 0.0) = ~inf +rem (~inf, 0.0) = nan +* (~inf, ~0.17976931348623157E309) = inf ++ (~inf, ~0.17976931348623157E309) = ~inf +- (~inf, ~0.17976931348623157E309) = ~inf +/ (~inf, ~0.17976931348623157E309) = inf +nextAfter (~inf, ~0.17976931348623157E309) = ~inf +rem (~inf, ~0.17976931348623157E309) = nan +* (~inf, ~0.8988465674311579E308) = inf ++ (~inf, ~0.8988465674311579E308) = ~inf +- (~inf, ~0.8988465674311579E308) = ~inf +/ (~inf, ~0.8988465674311579E308) = inf +nextAfter (~inf, ~0.8988465674311579E308) = ~inf +rem (~inf, ~0.8988465674311579E308) = nan +* (~inf, ~0.123E4) = inf ++ (~inf, ~0.123E4) = ~inf +- (~inf, ~0.123E4) = ~inf +/ (~inf, ~0.123E4) = inf +nextAfter (~inf, ~0.123E4) = ~inf +rem (~inf, ~0.123E4) = nan +* (~inf, ~0.123E2) = inf ++ (~inf, ~0.123E2) = ~inf +- (~inf, ~0.123E2) = ~inf +/ (~inf, ~0.123E2) = inf +nextAfter (~inf, ~0.123E2) = ~inf +rem (~inf, ~0.123E2) = nan +* (~inf, ~0.3141592653589793E1) = inf ++ (~inf, ~0.3141592653589793E1) = ~inf +- (~inf, ~0.3141592653589793E1) = ~inf +/ (~inf, ~0.3141592653589793E1) = inf +nextAfter (~inf, ~0.3141592653589793E1) = ~inf +rem (~inf, ~0.3141592653589793E1) = nan +* (~inf, ~0.2718281828459045E1) = inf ++ (~inf, ~0.2718281828459045E1) = ~inf +- (~inf, ~0.2718281828459045E1) = ~inf +/ (~inf, ~0.2718281828459045E1) = inf +nextAfter (~inf, ~0.2718281828459045E1) = ~inf +rem (~inf, ~0.2718281828459045E1) = nan +* (~inf, ~0.123E1) = inf ++ (~inf, ~0.123E1) = ~inf +- (~inf, ~0.123E1) = ~inf +/ (~inf, ~0.123E1) = inf +nextAfter (~inf, ~0.123E1) = ~inf +rem (~inf, ~0.123E1) = nan +* (~inf, ~0.123) = inf ++ (~inf, ~0.123) = ~inf +- (~inf, ~0.123) = ~inf +/ (~inf, ~0.123) = inf +nextAfter (~inf, ~0.123) = ~inf +rem (~inf, ~0.123) = nan +* (~inf, ~0.123E~2) = inf ++ (~inf, ~0.123E~2) = ~inf +- (~inf, ~0.123E~2) = ~inf +/ (~inf, ~0.123E~2) = inf +nextAfter (~inf, ~0.123E~2) = ~inf +rem (~inf, ~0.123E~2) = nan +* (~inf, ~0.22250738585072014E~307) = inf ++ (~inf, ~0.22250738585072014E~307) = ~inf +- (~inf, ~0.22250738585072014E~307) = ~inf +/ (~inf, ~0.22250738585072014E~307) = inf +nextAfter (~inf, ~0.22250738585072014E~307) = ~inf +rem (~inf, ~0.22250738585072014E~307) = nan +* (~inf, ~0.11125369292536007E~307) = inf ++ (~inf, ~0.11125369292536007E~307) = ~inf +- (~inf, ~0.11125369292536007E~307) = ~inf +/ (~inf, ~0.11125369292536007E~307) = inf +nextAfter (~inf, ~0.11125369292536007E~307) = ~inf +rem (~inf, ~0.11125369292536007E~307) = nan +* (~inf, ~0.5E~323) = inf ++ (~inf, ~0.5E~323) = ~inf +- (~inf, ~0.5E~323) = ~inf +/ (~inf, ~0.5E~323) = inf +nextAfter (~inf, ~0.5E~323) = ~inf +rem (~inf, ~0.5E~323) = nan +* (~inf, ~0.0) = nan ++ (~inf, ~0.0) = ~inf +- (~inf, ~0.0) = ~inf +/ (~inf, ~0.0) = inf +nextAfter (~inf, ~0.0) = ~inf +rem (~inf, ~0.0) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (~inf, ~inf) = inf ++ (~inf, ~inf) = ~inf +- (~inf, ~inf) = nan +/ (~inf, ~inf) = nan +nextAfter (~inf, ~inf) = ~inf +rem (~inf, ~inf) = nan +* (~inf, nan) = nan ++ (~inf, nan) = nan +- (~inf, nan) = nan +/ (~inf, nan) = nan +nextAfter (~inf, nan) = nan +rem (~inf, nan) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (nan, 0.17976931348623157E309) = nan ++ (nan, 0.17976931348623157E309) = nan +- (nan, 0.17976931348623157E309) = nan +/ (nan, 0.17976931348623157E309) = nan +nextAfter (nan, 0.17976931348623157E309) = nan +rem (nan, 0.17976931348623157E309) = nan +* (nan, 0.8988465674311579E308) = nan ++ (nan, 0.8988465674311579E308) = nan +- (nan, 0.8988465674311579E308) = nan +/ (nan, 0.8988465674311579E308) = nan +nextAfter (nan, 0.8988465674311579E308) = nan +rem (nan, 0.8988465674311579E308) = nan +* (nan, 0.123E4) = nan ++ (nan, 0.123E4) = nan +- (nan, 0.123E4) = nan +/ (nan, 0.123E4) = nan +nextAfter (nan, 0.123E4) = nan +rem (nan, 0.123E4) = nan +* (nan, 0.123E2) = nan ++ (nan, 0.123E2) = nan +- (nan, 0.123E2) = nan +/ (nan, 0.123E2) = nan +nextAfter (nan, 0.123E2) = nan +rem (nan, 0.123E2) = nan +* (nan, 0.3141592653589793E1) = nan ++ (nan, 0.3141592653589793E1) = nan +- (nan, 0.3141592653589793E1) = nan +/ (nan, 0.3141592653589793E1) = nan +nextAfter (nan, 0.3141592653589793E1) = nan +rem (nan, 0.3141592653589793E1) = nan +* (nan, 0.2718281828459045E1) = nan ++ (nan, 0.2718281828459045E1) = nan +- (nan, 0.2718281828459045E1) = nan +/ (nan, 0.2718281828459045E1) = nan +nextAfter (nan, 0.2718281828459045E1) = nan +rem (nan, 0.2718281828459045E1) = nan +* (nan, 0.123E1) = nan ++ (nan, 0.123E1) = nan +- (nan, 0.123E1) = nan +/ (nan, 0.123E1) = nan +nextAfter (nan, 0.123E1) = nan +rem (nan, 0.123E1) = nan +* (nan, 0.123) = nan ++ (nan, 0.123) = nan +- (nan, 0.123) = nan +/ (nan, 0.123) = nan +nextAfter (nan, 0.123) = nan +rem (nan, 0.123) = nan +* (nan, 0.123E~2) = nan ++ (nan, 0.123E~2) = nan +- (nan, 0.123E~2) = nan +/ (nan, 0.123E~2) = nan +nextAfter (nan, 0.123E~2) = nan +rem (nan, 0.123E~2) = nan +* (nan, 0.22250738585072014E~307) = nan ++ (nan, 0.22250738585072014E~307) = nan +- (nan, 0.22250738585072014E~307) = nan +/ (nan, 0.22250738585072014E~307) = nan +nextAfter (nan, 0.22250738585072014E~307) = nan +rem (nan, 0.22250738585072014E~307) = nan +* (nan, 0.11125369292536007E~307) = nan ++ (nan, 0.11125369292536007E~307) = nan +- (nan, 0.11125369292536007E~307) = nan +/ (nan, 0.11125369292536007E~307) = nan +nextAfter (nan, 0.11125369292536007E~307) = nan +rem (nan, 0.11125369292536007E~307) = nan +* (nan, 0.5E~323) = nan ++ (nan, 0.5E~323) = nan +- (nan, 0.5E~323) = nan +/ (nan, 0.5E~323) = nan +nextAfter (nan, 0.5E~323) = nan +rem (nan, 0.5E~323) = nan +* (nan, 0.0) = nan ++ (nan, 0.0) = nan +- (nan, 0.0) = nan +/ (nan, 0.0) = nan +nextAfter (nan, 0.0) = nan +rem (nan, 0.0) = nan +* (nan, ~0.17976931348623157E309) = nan ++ (nan, ~0.17976931348623157E309) = nan +- (nan, ~0.17976931348623157E309) = nan +/ (nan, ~0.17976931348623157E309) = nan +nextAfter (nan, ~0.17976931348623157E309) = nan +rem (nan, ~0.17976931348623157E309) = nan +* (nan, ~0.8988465674311579E308) = nan ++ (nan, ~0.8988465674311579E308) = nan +- (nan, ~0.8988465674311579E308) = nan +/ (nan, ~0.8988465674311579E308) = nan +nextAfter (nan, ~0.8988465674311579E308) = nan +rem (nan, ~0.8988465674311579E308) = nan +* (nan, ~0.123E4) = nan ++ (nan, ~0.123E4) = nan +- (nan, ~0.123E4) = nan +/ (nan, ~0.123E4) = nan +nextAfter (nan, ~0.123E4) = nan +rem (nan, ~0.123E4) = nan +* (nan, ~0.123E2) = nan ++ (nan, ~0.123E2) = nan +- (nan, ~0.123E2) = nan +/ (nan, ~0.123E2) = nan +nextAfter (nan, ~0.123E2) = nan +rem (nan, ~0.123E2) = nan +* (nan, ~0.3141592653589793E1) = nan ++ (nan, ~0.3141592653589793E1) = nan +- (nan, ~0.3141592653589793E1) = nan +/ (nan, ~0.3141592653589793E1) = nan +nextAfter (nan, ~0.3141592653589793E1) = nan +rem (nan, ~0.3141592653589793E1) = nan +* (nan, ~0.2718281828459045E1) = nan ++ (nan, ~0.2718281828459045E1) = nan +- (nan, ~0.2718281828459045E1) = nan +/ (nan, ~0.2718281828459045E1) = nan +nextAfter (nan, ~0.2718281828459045E1) = nan +rem (nan, ~0.2718281828459045E1) = nan +* (nan, ~0.123E1) = nan ++ (nan, ~0.123E1) = nan +- (nan, ~0.123E1) = nan +/ (nan, ~0.123E1) = nan +nextAfter (nan, ~0.123E1) = nan +rem (nan, ~0.123E1) = nan +* (nan, ~0.123) = nan ++ (nan, ~0.123) = nan +- (nan, ~0.123) = nan +/ (nan, ~0.123) = nan +nextAfter (nan, ~0.123) = nan +rem (nan, ~0.123) = nan +* (nan, ~0.123E~2) = nan ++ (nan, ~0.123E~2) = nan +- (nan, ~0.123E~2) = nan +/ (nan, ~0.123E~2) = nan +nextAfter (nan, ~0.123E~2) = nan +rem (nan, ~0.123E~2) = nan +* (nan, ~0.22250738585072014E~307) = nan ++ (nan, ~0.22250738585072014E~307) = nan +- (nan, ~0.22250738585072014E~307) = nan +/ (nan, ~0.22250738585072014E~307) = nan +nextAfter (nan, ~0.22250738585072014E~307) = nan +rem (nan, ~0.22250738585072014E~307) = nan +* (nan, ~0.11125369292536007E~307) = nan ++ (nan, ~0.11125369292536007E~307) = nan +- (nan, ~0.11125369292536007E~307) = nan +/ (nan, ~0.11125369292536007E~307) = nan +nextAfter (nan, ~0.11125369292536007E~307) = nan +rem (nan, ~0.11125369292536007E~307) = nan +* (nan, ~0.5E~323) = nan ++ (nan, ~0.5E~323) = nan +- (nan, ~0.5E~323) = nan +/ (nan, ~0.5E~323) = nan +nextAfter (nan, ~0.5E~323) = nan +rem (nan, ~0.5E~323) = nan +* (nan, ~0.0) = nan ++ (nan, ~0.0) = nan +- (nan, ~0.0) = nan +/ (nan, ~0.0) = nan +nextAfter (nan, ~0.0) = nan +rem (nan, ~0.0) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (nan, ~inf) = nan ++ (nan, ~inf) = nan +- (nan, ~inf) = nan +/ (nan, ~inf) = nan +nextAfter (nan, ~inf) = nan +rem (nan, ~inf) = nan +* (nan, nan) = nan ++ (nan, nan) = nan +- (nan, nan) = nan +/ (nan, nan) = nan +nextAfter (nan, nan) = nan +rem (nan, nan) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (inf, 0.17976931348623157E309) = inf ++ (inf, 0.17976931348623157E309) = inf +- (inf, 0.17976931348623157E309) = inf +/ (inf, 0.17976931348623157E309) = inf +nextAfter (inf, 0.17976931348623157E309) = inf +rem (inf, 0.17976931348623157E309) = nan +* (inf, 0.8988465674311579E308) = inf ++ (inf, 0.8988465674311579E308) = inf +- (inf, 0.8988465674311579E308) = inf +/ (inf, 0.8988465674311579E308) = inf +nextAfter (inf, 0.8988465674311579E308) = inf +rem (inf, 0.8988465674311579E308) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.3141592653589793E1) = inf ++ (inf, 0.3141592653589793E1) = inf +- (inf, 0.3141592653589793E1) = inf +/ (inf, 0.3141592653589793E1) = inf +nextAfter (inf, 0.3141592653589793E1) = inf +rem (inf, 0.3141592653589793E1) = nan +* (inf, 0.2718281828459045E1) = inf ++ (inf, 0.2718281828459045E1) = inf +- (inf, 0.2718281828459045E1) = inf +/ (inf, 0.2718281828459045E1) = inf +nextAfter (inf, 0.2718281828459045E1) = inf +rem (inf, 0.2718281828459045E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.22250738585072014E~307) = inf ++ (inf, 0.22250738585072014E~307) = inf +- (inf, 0.22250738585072014E~307) = inf +/ (inf, 0.22250738585072014E~307) = inf +nextAfter (inf, 0.22250738585072014E~307) = inf +rem (inf, 0.22250738585072014E~307) = nan +* (inf, 0.11125369292536007E~307) = inf ++ (inf, 0.11125369292536007E~307) = inf +- (inf, 0.11125369292536007E~307) = inf +/ (inf, 0.11125369292536007E~307) = inf +nextAfter (inf, 0.11125369292536007E~307) = inf +rem (inf, 0.11125369292536007E~307) = nan +* (inf, 0.5E~323) = inf ++ (inf, 0.5E~323) = inf +- (inf, 0.5E~323) = inf +/ (inf, 0.5E~323) = inf +nextAfter (inf, 0.5E~323) = inf +rem (inf, 0.5E~323) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.17976931348623157E309) = ~inf ++ (inf, ~0.17976931348623157E309) = inf +- (inf, ~0.17976931348623157E309) = inf +/ (inf, ~0.17976931348623157E309) = ~inf +nextAfter (inf, ~0.17976931348623157E309) = inf +rem (inf, ~0.17976931348623157E309) = nan +* (inf, ~0.8988465674311579E308) = ~inf ++ (inf, ~0.8988465674311579E308) = inf +- (inf, ~0.8988465674311579E308) = inf +/ (inf, ~0.8988465674311579E308) = ~inf +nextAfter (inf, ~0.8988465674311579E308) = inf +rem (inf, ~0.8988465674311579E308) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.3141592653589793E1) = ~inf ++ (inf, ~0.3141592653589793E1) = inf +- (inf, ~0.3141592653589793E1) = inf +/ (inf, ~0.3141592653589793E1) = ~inf +nextAfter (inf, ~0.3141592653589793E1) = inf +rem (inf, ~0.3141592653589793E1) = nan +* (inf, ~0.2718281828459045E1) = ~inf ++ (inf, ~0.2718281828459045E1) = inf +- (inf, ~0.2718281828459045E1) = inf +/ (inf, ~0.2718281828459045E1) = ~inf +nextAfter (inf, ~0.2718281828459045E1) = inf +rem (inf, ~0.2718281828459045E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.22250738585072014E~307) = ~inf ++ (inf, ~0.22250738585072014E~307) = inf +- (inf, ~0.22250738585072014E~307) = inf +/ (inf, ~0.22250738585072014E~307) = ~inf +nextAfter (inf, ~0.22250738585072014E~307) = inf +rem (inf, ~0.22250738585072014E~307) = nan +* (inf, ~0.11125369292536007E~307) = ~inf ++ (inf, ~0.11125369292536007E~307) = inf +- (inf, ~0.11125369292536007E~307) = inf +/ (inf, ~0.11125369292536007E~307) = ~inf +nextAfter (inf, ~0.11125369292536007E~307) = inf +rem (inf, ~0.11125369292536007E~307) = nan +* (inf, ~0.5E~323) = ~inf ++ (inf, ~0.5E~323) = inf +- (inf, ~0.5E~323) = inf +/ (inf, ~0.5E~323) = ~inf +nextAfter (inf, ~0.5E~323) = inf +rem (inf, ~0.5E~323) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan + +Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh,atan2,pow} +acos (0.17976931348623157E309) = nan +asin (0.17976931348623157E309) = nan +atan (0.17976931348623157E309) = 1.570796327 +cos (0.17976931348623157E309) = ~0.9999876894 +cosh (0.17976931348623157E309) = inf +exp (0.17976931348623157E309) = inf +ln (0.17976931348623157E309) = 709.7827129 +log10 (0.17976931348623157E309) = 308.2547156 +sin (0.17976931348623157E309) = 0.004961954789 +sinh (0.17976931348623157E309) = inf +sqrt (0.17976931348623157E309) = 1.340780793E154 +tan (0.17976931348623157E309) = ~0.004962015874 +tanh (0.17976931348623157E309) = 1 +acos (0.8988465674311579E308) = nan +asin (0.8988465674311579E308) = nan +atan (0.8988465674311579E308) = 1.570796327 +cos (0.8988465674311579E308) = 0.00248098503 +cosh (0.8988465674311579E308) = inf +exp (0.8988465674311579E308) = inf +ln (0.8988465674311579E308) = 709.0895657 +log10 (0.8988465674311579E308) = 307.9536856 +sin (0.8988465674311579E308) = 0.9999969224 +sinh (0.8988465674311579E308) = inf +sqrt (0.8988465674311579E308) = 9.480751908E153 +tan (0.8988465674311579E308) = 403.0644725 +tanh (0.8988465674311579E308) = 1 +acos (0.123E4) = nan +asin (0.123E4) = nan +atan (0.123E4) = 1.569983319 +cos (0.123E4) = 0.06642716993 +cosh (0.123E4) = inf +exp (0.123E4) = inf +ln (0.123E4) = 7.114769448 +log10 (0.123E4) = 3.089905111 +sin (0.123E4) = ~0.9977912763 +sinh (0.123E4) = inf +sqrt (0.123E4) = 35.07135583 +tan (0.123E4) = ~15.02083074 +tanh (0.123E4) = 1 +acos (0.123E2) = nan +asin (0.123E2) = nan +atan (0.123E2) = 1.489673935 +cos (0.123E2) = 0.9647326179 +cosh (0.123E2) = 109847.9943 +exp (0.123E2) = 219695.9887 +ln (0.123E2) = 2.509599262 +log10 (0.123E2) = 1.089905111 +sin (0.123E2) = ~0.2632317914 +sinh (0.123E2) = 109847.9943 +sqrt (0.123E2) = 3.507135583 +tan (0.123E2) = ~0.272854661 +tanh (0.123E2) = 1 +acos (0.3141592653589793E1) = nan +asin (0.3141592653589793E1) = nan +atan (0.3141592653589793E1) = 1.262627256 +cos (0.3141592653589793E1) = ~1 +cosh (0.3141592653589793E1) = 11.59195328 +exp (0.3141592653589793E1) = 23.14069263 +ln (0.3141592653589793E1) = 1.144729886 +log10 (0.3141592653589793E1) = 0.4971498727 +sin (0.3141592653589793E1) = 1.224646799E~16 +sinh (0.3141592653589793E1) = 11.54873936 +sqrt (0.3141592653589793E1) = 1.772453851 +tan (0.3141592653589793E1) = ~1.224646799E~16 +tanh (0.3141592653589793E1) = 0.9962720762 +acos (0.2718281828459045E1) = nan +asin (0.2718281828459045E1) = nan +atan (0.2718281828459045E1) = 1.218282905 +cos (0.2718281828459045E1) = ~0.9117339148 +cosh (0.2718281828459045E1) = 7.610125139 +exp (0.2718281828459045E1) = 15.15426224 +ln (0.2718281828459045E1) = 1 +log10 (0.2718281828459045E1) = 0.4342944819 +sin (0.2718281828459045E1) = 0.4107812905 +sinh (0.2718281828459045E1) = 7.544137103 +sqrt (0.2718281828459045E1) = 1.648721271 +tan (0.2718281828459045E1) = ~0.4505495341 +tanh (0.2718281828459045E1) = 0.9913289158 +acos (0.123E1) = nan +asin (0.123E1) = nan +atan (0.123E1) = 0.8881737744 +cos (0.123E1) = 0.3342377271 +cosh (0.123E1) = 1.856761057 +exp (0.123E1) = 3.421229536 +ln (0.123E1) = 0.2070141694 +log10 (0.123E1) = 0.08990511144 +sin (0.123E1) = 0.9424888019 +sinh (0.123E1) = 1.564468479 +sqrt (0.123E1) = 1.109053651 +tan (0.123E1) = 2.819815734 +tanh (0.123E1) = 0.8425793257 +acos (0.123) = 1.447484052 +asin (0.123) = 0.1233122752 +atan (0.123) = 0.1223852815 +cos (0.123) = 0.9924450321 +cosh (0.123) = 1.007574042 +exp (0.123) = 1.130884421 +ln (0.123) = ~2.095570924 +log10 (0.123) = ~0.9100948886 +sin (0.123) = 0.12269009 +sinh (0.123) = 0.1233103792 +sqrt (0.123) = 0.3507135583 +tan (0.123) = 0.1236240659 +tanh (0.123) = 0.1223834419 +acos (0.123E~2) = 1.569566326 +asin (0.123E~2) = 0.00123000031 +atan (0.123E~2) = 0.00122999938 +cos (0.123E~2) = 0.9999992436 +cosh (0.123E~2) = 1.000000756 +exp (0.123E~2) = 1.001230757 +ln (0.123E~2) = ~6.70074111 +log10 (0.123E~2) = ~2.910094889 +sin (0.123E~2) = 0.00122999969 +sinh (0.123E~2) = 0.00123000031 +sqrt (0.123E~2) = 0.03507135583 +tan (0.123E~2) = 0.00123000062 +tanh (0.123E~2) = 0.00122999938 +acos (0.22250738585072014E~307) = 1.570796327 +asin (0.22250738585072014E~307) = 2.225073859E~308 +atan (0.22250738585072014E~307) = 2.225073859E~308 +cos (0.22250738585072014E~307) = 1 +cosh (0.22250738585072014E~307) = 1 +exp (0.22250738585072014E~307) = 1 +ln (0.22250738585072014E~307) = ~708.3964185 +log10 (0.22250738585072014E~307) = ~307.6526556 +sin (0.22250738585072014E~307) = 2.225073859E~308 +sinh (0.22250738585072014E~307) = 2.225073859E~308 +sqrt (0.22250738585072014E~307) = 1.491668146E~154 +tan (0.22250738585072014E~307) = 2.225073859E~308 +tanh (0.22250738585072014E~307) = 2.225073859E~308 +acos (0.11125369292536007E~307) = 1.570796327 +asin (0.11125369292536007E~307) = 1.112536929E~308 +atan (0.11125369292536007E~307) = 1.112536929E~308 +cos (0.11125369292536007E~307) = 1 +cosh (0.11125369292536007E~307) = 1 +exp (0.11125369292536007E~307) = 1 +ln (0.11125369292536007E~307) = ~709.0895657 +log10 (0.11125369292536007E~307) = ~307.9536856 +sin (0.11125369292536007E~307) = 1.112536929E~308 +sinh (0.11125369292536007E~307) = 1.112536929E~308 +sqrt (0.11125369292536007E~307) = 1.054768661E~154 +tan (0.11125369292536007E~307) = 1.112536929E~308 +tanh (0.11125369292536007E~307) = 1.112536929E~308 +acos (0.5E~323) = 1.570796327 +asin (0.5E~323) = 4.940656458E~324 +atan (0.5E~323) = 4.940656458E~324 +cos (0.5E~323) = 1 +cosh (0.5E~323) = 1 +exp (0.5E~323) = 1 +ln (0.5E~323) = ~744.4400719 +log10 (0.5E~323) = ~323.3062153 +sin (0.5E~323) = 4.940656458E~324 +sinh (0.5E~323) = 4.940656458E~324 +sqrt (0.5E~323) = 2.222758749E~162 +tan (0.5E~323) = 4.940656458E~324 +tanh (0.5E~323) = 4.940656458E~324 +acos (0.0) = 1.570796327 +asin (0.0) = 0 +atan (0.0) = 0 +cos (0.0) = 1 +cosh (0.0) = 1 +exp (0.0) = 1 +ln (0.0) = ~inf +log10 (0.0) = ~inf +sin (0.0) = 0 +sinh (0.0) = 0 +sqrt (0.0) = 0 +tan (0.0) = 0 +tanh (0.0) = 0 +acos (~0.17976931348623157E309) = nan +asin (~0.17976931348623157E309) = nan +atan (~0.17976931348623157E309) = ~1.570796327 +cos (~0.17976931348623157E309) = ~0.9999876894 +cosh (~0.17976931348623157E309) = inf +exp (~0.17976931348623157E309) = 0 +ln (~0.17976931348623157E309) = nan +log10 (~0.17976931348623157E309) = nan +sin (~0.17976931348623157E309) = ~0.004961954789 +sinh (~0.17976931348623157E309) = ~inf +sqrt (~0.17976931348623157E309) = nan +tan (~0.17976931348623157E309) = 0.004962015874 +tanh (~0.17976931348623157E309) = ~1 +acos (~0.8988465674311579E308) = nan +asin (~0.8988465674311579E308) = nan +atan (~0.8988465674311579E308) = ~1.570796327 +cos (~0.8988465674311579E308) = 0.00248098503 +cosh (~0.8988465674311579E308) = inf +exp (~0.8988465674311579E308) = 0 +ln (~0.8988465674311579E308) = nan +log10 (~0.8988465674311579E308) = nan +sin (~0.8988465674311579E308) = ~0.9999969224 +sinh (~0.8988465674311579E308) = ~inf +sqrt (~0.8988465674311579E308) = nan +tan (~0.8988465674311579E308) = ~403.0644725 +tanh (~0.8988465674311579E308) = ~1 +acos (~0.123E4) = nan +asin (~0.123E4) = nan +atan (~0.123E4) = ~1.569983319 +cos (~0.123E4) = 0.06642716993 +cosh (~0.123E4) = inf +exp (~0.123E4) = 0 +ln (~0.123E4) = nan +log10 (~0.123E4) = nan +sin (~0.123E4) = 0.9977912763 +sinh (~0.123E4) = ~inf +sqrt (~0.123E4) = nan +tan (~0.123E4) = 15.02083074 +tanh (~0.123E4) = ~1 +acos (~0.123E2) = nan +asin (~0.123E2) = nan +atan (~0.123E2) = ~1.489673935 +cos (~0.123E2) = 0.9647326179 +cosh (~0.123E2) = 109847.9943 +exp (~0.123E2) = 4.551744463E~6 +ln (~0.123E2) = nan +log10 (~0.123E2) = nan +sin (~0.123E2) = 0.2632317914 +sinh (~0.123E2) = ~109847.9943 +sqrt (~0.123E2) = nan +tan (~0.123E2) = 0.272854661 +tanh (~0.123E2) = ~1 +acos (~0.3141592653589793E1) = nan +asin (~0.3141592653589793E1) = nan +atan (~0.3141592653589793E1) = ~1.262627256 +cos (~0.3141592653589793E1) = ~1 +cosh (~0.3141592653589793E1) = 11.59195328 +exp (~0.3141592653589793E1) = 0.04321391826 +ln (~0.3141592653589793E1) = nan +log10 (~0.3141592653589793E1) = nan +sin (~0.3141592653589793E1) = ~1.224646799E~16 +sinh (~0.3141592653589793E1) = ~11.54873936 +sqrt (~0.3141592653589793E1) = nan +tan (~0.3141592653589793E1) = 1.224646799E~16 +tanh (~0.3141592653589793E1) = ~0.9962720762 +acos (~0.2718281828459045E1) = nan +asin (~0.2718281828459045E1) = nan +atan (~0.2718281828459045E1) = ~1.218282905 +cos (~0.2718281828459045E1) = ~0.9117339148 +cosh (~0.2718281828459045E1) = 7.610125139 +exp (~0.2718281828459045E1) = 0.06598803585 +ln (~0.2718281828459045E1) = nan +log10 (~0.2718281828459045E1) = nan +sin (~0.2718281828459045E1) = ~0.4107812905 +sinh (~0.2718281828459045E1) = ~7.544137103 +sqrt (~0.2718281828459045E1) = nan +tan (~0.2718281828459045E1) = 0.4505495341 +tanh (~0.2718281828459045E1) = ~0.9913289158 +acos (~0.123E1) = nan +asin (~0.123E1) = nan +atan (~0.123E1) = ~0.8881737744 +cos (~0.123E1) = 0.3342377271 +cosh (~0.123E1) = 1.856761057 +exp (~0.123E1) = 0.2922925777 +ln (~0.123E1) = nan +log10 (~0.123E1) = nan +sin (~0.123E1) = ~0.9424888019 +sinh (~0.123E1) = ~1.564468479 +sqrt (~0.123E1) = nan +tan (~0.123E1) = ~2.819815734 +tanh (~0.123E1) = ~0.8425793257 +acos (~0.123) = 1.694108602 +asin (~0.123) = ~0.1233122752 +atan (~0.123) = ~0.1223852815 +cos (~0.123) = 0.9924450321 +cosh (~0.123) = 1.007574042 +exp (~0.123) = 0.8842636626 +ln (~0.123) = nan +log10 (~0.123) = nan +sin (~0.123) = ~0.12269009 +sinh (~0.123) = ~0.1233103792 +sqrt (~0.123) = nan +tan (~0.123) = ~0.1236240659 +tanh (~0.123) = ~0.1223834419 +acos (~0.123E~2) = 1.572026327 +asin (~0.123E~2) = ~0.00123000031 +atan (~0.123E~2) = ~0.00122999938 +cos (~0.123E~2) = 0.9999992436 +cosh (~0.123E~2) = 1.000000756 +exp (~0.123E~2) = 0.9987707561 +ln (~0.123E~2) = nan +log10 (~0.123E~2) = nan +sin (~0.123E~2) = ~0.00122999969 +sinh (~0.123E~2) = ~0.00123000031 +sqrt (~0.123E~2) = nan +tan (~0.123E~2) = ~0.00123000062 +tanh (~0.123E~2) = ~0.00122999938 +acos (~0.22250738585072014E~307) = 1.570796327 +asin (~0.22250738585072014E~307) = ~2.225073859E~308 +atan (~0.22250738585072014E~307) = ~2.225073859E~308 +cos (~0.22250738585072014E~307) = 1 +cosh (~0.22250738585072014E~307) = 1 +exp (~0.22250738585072014E~307) = 1 +ln (~0.22250738585072014E~307) = nan +log10 (~0.22250738585072014E~307) = nan +sin (~0.22250738585072014E~307) = ~2.225073859E~308 +sinh (~0.22250738585072014E~307) = ~2.225073859E~308 +sqrt (~0.22250738585072014E~307) = nan +tan (~0.22250738585072014E~307) = ~2.225073859E~308 +tanh (~0.22250738585072014E~307) = ~2.225073859E~308 +acos (~0.11125369292536007E~307) = 1.570796327 +asin (~0.11125369292536007E~307) = ~1.112536929E~308 +atan (~0.11125369292536007E~307) = ~1.112536929E~308 +cos (~0.11125369292536007E~307) = 1 +cosh (~0.11125369292536007E~307) = 1 +exp (~0.11125369292536007E~307) = 1 +ln (~0.11125369292536007E~307) = nan +log10 (~0.11125369292536007E~307) = nan +sin (~0.11125369292536007E~307) = ~1.112536929E~308 +sinh (~0.11125369292536007E~307) = ~1.112536929E~308 +sqrt (~0.11125369292536007E~307) = nan +tan (~0.11125369292536007E~307) = ~1.112536929E~308 +tanh (~0.11125369292536007E~307) = ~1.112536929E~308 +acos (~0.5E~323) = 1.570796327 +asin (~0.5E~323) = ~4.940656458E~324 +atan (~0.5E~323) = ~4.940656458E~324 +cos (~0.5E~323) = 1 +cosh (~0.5E~323) = 1 +exp (~0.5E~323) = 1 +ln (~0.5E~323) = nan +log10 (~0.5E~323) = nan +sin (~0.5E~323) = ~4.940656458E~324 +sinh (~0.5E~323) = ~4.940656458E~324 +sqrt (~0.5E~323) = nan +tan (~0.5E~323) = ~4.940656458E~324 +tanh (~0.5E~323) = ~4.940656458E~324 +acos (~0.0) = 1.570796327 +asin (~0.0) = 0 +atan (~0.0) = 0 +cos (~0.0) = 1 +cosh (~0.0) = 1 +exp (~0.0) = 1 +ln (~0.0) = ~inf +log10 (~0.0) = ~inf +sin (~0.0) = 0 +sinh (~0.0) = 0 +sqrt (~0.0) = 0 +tan (~0.0) = 0 +tanh (~0.0) = 0 +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796327 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +acos (~inf) = nan +asin (~inf) = nan +atan (~inf) = ~1.570796327 +cos (~inf) = nan +cosh (~inf) = ~inf +exp (~inf) = 0 +ln (~inf) = nan +log10 (~inf) = nan +sin (~inf) = nan +sinh (~inf) = ~inf +sqrt (~inf) = nan +tan (~inf) = nan +tanh (~inf) = ~1 +acos (nan) = nan +asin (nan) = nan +atan (nan) = nan +cos (nan) = nan +cosh (nan) = nan +exp (nan) = nan +ln (nan) = nan +log10 (nan) = nan +sin (nan) = nan +sinh (nan) = nan +sqrt (nan) = nan +tan (nan) = nan +tanh (nan) = nan +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796327 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +atan2 (0.17976931348623157E309, 0.17976931348623157E309) = 0.7853981634 +pow (0.17976931348623157E309, 0.17976931348623157E309) = inf +atan2 (0.17976931348623157E309, 0.8988465674311579E308) = 1.107148718 +pow (0.17976931348623157E309, 0.8988465674311579E308) = inf +atan2 (0.17976931348623157E309, 0.123E4) = 1.570796327 +pow (0.17976931348623157E309, 0.123E4) = inf +atan2 (0.17976931348623157E309, 0.123E2) = 1.570796327 +pow (0.17976931348623157E309, 0.123E2) = inf +atan2 (0.17976931348623157E309, 0.3141592653589793E1) = 1.570796327 +pow (0.17976931348623157E309, 0.3141592653589793E1) = inf +atan2 (0.17976931348623157E309, 0.2718281828459045E1) = 1.570796327 +pow (0.17976931348623157E309, 0.2718281828459045E1) = inf +atan2 (0.17976931348623157E309, 0.123E1) = 1.570796327 +pow (0.17976931348623157E309, 0.123E1) = inf +atan2 (0.17976931348623157E309, 0.123) = 1.570796327 +pow (0.17976931348623157E309, 0.123) = 8.228676973E37 +atan2 (0.17976931348623157E309, 0.123E~2) = 1.570796327 +pow (0.17976931348623157E309, 0.123E~2) = 2.394160714 +atan2 (0.17976931348623157E309, 0.22250738585072014E~307) = 1.570796327 +pow (0.17976931348623157E309, 0.22250738585072014E~307) = 1 +atan2 (0.17976931348623157E309, 0.11125369292536007E~307) = 1.570796327 +pow (0.17976931348623157E309, 0.11125369292536007E~307) = 1 +atan2 (0.17976931348623157E309, 0.5E~323) = 1.570796327 +pow (0.17976931348623157E309, 0.5E~323) = 1 +atan2 (0.17976931348623157E309, 0.0) = 1.570796327 +pow (0.17976931348623157E309, 0.0) = 1 +atan2 (0.17976931348623157E309, ~0.17976931348623157E309) = 2.35619449 +pow (0.17976931348623157E309, ~0.17976931348623157E309) = 0 +atan2 (0.17976931348623157E309, ~0.8988465674311579E308) = 2.034443936 +pow (0.17976931348623157E309, ~0.8988465674311579E308) = 0 +atan2 (0.17976931348623157E309, ~0.123E4) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E4) = 0 +atan2 (0.17976931348623157E309, ~0.123E2) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E2) = 0 +atan2 (0.17976931348623157E309, ~0.3141592653589793E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.3141592653589793E1) = 0 +atan2 (0.17976931348623157E309, ~0.2718281828459045E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.2718281828459045E1) = 0 +atan2 (0.17976931348623157E309, ~0.123E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E1) = 0 +atan2 (0.17976931348623157E309, ~0.123) = 1.570796327 +pow (0.17976931348623157E309, ~0.123) = 1.21526219E~38 +atan2 (0.17976931348623157E309, ~0.123E~2) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E~2) = 0.4176829041 +atan2 (0.17976931348623157E309, ~0.22250738585072014E~307) = 1.570796327 +pow (0.17976931348623157E309, ~0.22250738585072014E~307) = 1 +atan2 (0.17976931348623157E309, ~0.11125369292536007E~307) = 1.570796327 +pow (0.17976931348623157E309, ~0.11125369292536007E~307) = 1 +atan2 (0.17976931348623157E309, ~0.5E~323) = 1.570796327 +pow (0.17976931348623157E309, ~0.5E~323) = 1 +atan2 (0.17976931348623157E309, ~0.0) = 1.570796327 +pow (0.17976931348623157E309, ~0.0) = 1 +atan2 (0.17976931348623157E309, inf) = 0 +pow (0.17976931348623157E309, inf) = inf +atan2 (0.17976931348623157E309, ~inf) = 3.141592654 +pow (0.17976931348623157E309, ~inf) = 0 +atan2 (0.17976931348623157E309, nan) = nan +pow (0.17976931348623157E309, nan) = nan +atan2 (0.17976931348623157E309, inf) = 0 +pow (0.17976931348623157E309, inf) = inf +atan2 (0.8988465674311579E308, 0.17976931348623157E309) = 0.463647609 +pow (0.8988465674311579E308, 0.17976931348623157E309) = inf +atan2 (0.8988465674311579E308, 0.8988465674311579E308) = 0.7853981634 +pow (0.8988465674311579E308, 0.8988465674311579E308) = inf +atan2 (0.8988465674311579E308, 0.123E4) = 1.570796327 +pow (0.8988465674311579E308, 0.123E4) = inf +atan2 (0.8988465674311579E308, 0.123E2) = 1.570796327 +pow (0.8988465674311579E308, 0.123E2) = inf +atan2 (0.8988465674311579E308, 0.3141592653589793E1) = 1.570796327 +pow (0.8988465674311579E308, 0.3141592653589793E1) = inf +atan2 (0.8988465674311579E308, 0.2718281828459045E1) = 1.570796327 +pow (0.8988465674311579E308, 0.2718281828459045E1) = inf +atan2 (0.8988465674311579E308, 0.123E1) = 1.570796327 +pow (0.8988465674311579E308, 0.123E1) = inf +atan2 (0.8988465674311579E308, 0.123) = 1.570796327 +pow (0.8988465674311579E308, 0.123) = 7.556197911E37 +atan2 (0.8988465674311579E308, 0.123E~2) = 1.570796327 +pow (0.8988465674311579E308, 0.123E~2) = 2.392120392 +atan2 (0.8988465674311579E308, 0.22250738585072014E~307) = 1.570796327 +pow (0.8988465674311579E308, 0.22250738585072014E~307) = 1 +atan2 (0.8988465674311579E308, 0.11125369292536007E~307) = 1.570796327 +pow (0.8988465674311579E308, 0.11125369292536007E~307) = 1 +atan2 (0.8988465674311579E308, 0.5E~323) = 1.570796327 +pow (0.8988465674311579E308, 0.5E~323) = 1 +atan2 (0.8988465674311579E308, 0.0) = 1.570796327 +pow (0.8988465674311579E308, 0.0) = 1 +atan2 (0.8988465674311579E308, ~0.17976931348623157E309) = 2.677945045 +pow (0.8988465674311579E308, ~0.17976931348623157E309) = 0 +atan2 (0.8988465674311579E308, ~0.8988465674311579E308) = 2.35619449 +pow (0.8988465674311579E308, ~0.8988465674311579E308) = 0 +atan2 (0.8988465674311579E308, ~0.123E4) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E4) = 0 +atan2 (0.8988465674311579E308, ~0.123E2) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E2) = 0 +atan2 (0.8988465674311579E308, ~0.3141592653589793E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.3141592653589793E1) = 0 +atan2 (0.8988465674311579E308, ~0.2718281828459045E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.2718281828459045E1) = 0 +atan2 (0.8988465674311579E308, ~0.123E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E1) = 0 +atan2 (0.8988465674311579E308, ~0.123) = 1.570796327 +pow (0.8988465674311579E308, ~0.123) = 1.323416898E~38 +atan2 (0.8988465674311579E308, ~0.123E~2) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E~2) = 0.4180391603 +atan2 (0.8988465674311579E308, ~0.22250738585072014E~307) = 1.570796327 +pow (0.8988465674311579E308, ~0.22250738585072014E~307) = 1 +atan2 (0.8988465674311579E308, ~0.11125369292536007E~307) = 1.570796327 +pow (0.8988465674311579E308, ~0.11125369292536007E~307) = 1 +atan2 (0.8988465674311579E308, ~0.5E~323) = 1.570796327 +pow (0.8988465674311579E308, ~0.5E~323) = 1 +atan2 (0.8988465674311579E308, ~0.0) = 1.570796327 +pow (0.8988465674311579E308, ~0.0) = 1 +atan2 (0.8988465674311579E308, inf) = 0 +pow (0.8988465674311579E308, inf) = inf +atan2 (0.8988465674311579E308, ~inf) = 3.141592654 +pow (0.8988465674311579E308, ~inf) = 0 +atan2 (0.8988465674311579E308, nan) = nan +pow (0.8988465674311579E308, nan) = nan +atan2 (0.8988465674311579E308, inf) = 0 +pow (0.8988465674311579E308, inf) = inf +atan2 (0.123E4, 0.17976931348623157E309) = 6.842102115E~306 +pow (0.123E4, 0.17976931348623157E309) = inf +atan2 (0.123E4, 0.8988465674311579E308) = 1.368420423E~305 +pow (0.123E4, 0.8988465674311579E308) = inf +atan2 (0.123E4, 0.123E4) = 0.7853981634 +pow (0.123E4, 0.123E4) = inf +atan2 (0.123E4, 0.123E2) = 1.56079666 +pow (0.123E4, 0.123E2) = 1.013521278E38 +atan2 (0.123E4, 0.3141592653589793E1) = 1.568242192 +pow (0.123E4, 0.3141592653589793E1) = 5095927004 +atan2 (0.123E4, 0.2718281828459045E1) = 1.568586345 +pow (0.123E4, 0.2718281828459045E1) = 250745366.3 +atan2 (0.123E4, 0.123E1) = 1.569796327 +pow (0.123E4, 0.123E1) = 6318.053325 +atan2 (0.123E4, 0.123) = 1.570696327 +pow (0.123E4, 0.123) = 2.39915512 +atan2 (0.123E4, 0.123E~2) = 1.570795327 +pow (0.123E4, 0.123E~2) = 1.00878957 +atan2 (0.123E4, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E4, 0.22250738585072014E~307) = 1 +atan2 (0.123E4, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E4, 0.11125369292536007E~307) = 1 +atan2 (0.123E4, 0.5E~323) = 1.570796327 +pow (0.123E4, 0.5E~323) = 1 +atan2 (0.123E4, 0.0) = 1.570796327 +pow (0.123E4, 0.0) = 1 +atan2 (0.123E4, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E4, ~0.17976931348623157E309) = 0 +atan2 (0.123E4, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E4, ~0.8988465674311579E308) = 0 +atan2 (0.123E4, ~0.123E4) = 2.35619449 +pow (0.123E4, ~0.123E4) = 0 +atan2 (0.123E4, ~0.123E2) = 1.580795993 +pow (0.123E4, ~0.123E2) = 9.86659108E~39 +atan2 (0.123E4, ~0.3141592653589793E1) = 1.573350462 +pow (0.123E4, ~0.3141592653589793E1) = 1.9623515E~10 +atan2 (0.123E4, ~0.2718281828459045E1) = 1.573006308 +pow (0.123E4, ~0.2718281828459045E1) = 3.98810959E~9 +atan2 (0.123E4, ~0.123E1) = 1.571796326 +pow (0.123E4, ~0.123E1) = 1.582766002E~4 +atan2 (0.123E4, ~0.123) = 1.570896327 +pow (0.123E4, ~0.123) = 0.4168133988 +atan2 (0.123E4, ~0.123E~2) = 1.570797327 +pow (0.123E4, ~0.123E~2) = 0.9912870136 +atan2 (0.123E4, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E4, ~0.22250738585072014E~307) = 1 +atan2 (0.123E4, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E4, ~0.11125369292536007E~307) = 1 +atan2 (0.123E4, ~0.5E~323) = 1.570796327 +pow (0.123E4, ~0.5E~323) = 1 +atan2 (0.123E4, ~0.0) = 1.570796327 +pow (0.123E4, ~0.0) = 1 +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E4, ~inf) = 3.141592654 +pow (0.123E4, ~inf) = 0 +atan2 (0.123E4, nan) = nan +pow (0.123E4, nan) = nan +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E2, 0.17976931348623157E309) = 6.842102115E~308 +pow (0.123E2, 0.17976931348623157E309) = inf +atan2 (0.123E2, 0.8988465674311579E308) = 1.368420423E~307 +pow (0.123E2, 0.8988465674311579E308) = inf +atan2 (0.123E2, 0.123E4) = 0.009999666687 +pow (0.123E2, 0.123E4) = inf +atan2 (0.123E2, 0.123E2) = 0.7853981634 +pow (0.123E2, 0.123E2) = 2.545850346E13 +atan2 (0.123E2, 0.3141592653589793E1) = 1.320728626 +pow (0.123E2, 0.3141592653589793E1) = 2654.83718 +atan2 (0.123E2, 0.2718281828459045E1) = 1.353293796 +pow (0.123E2, 0.2718281828459045E1) = 917.6334984 +atan2 (0.123E2, 0.123E1) = 1.471127674 +pow (0.123E2, 0.123E1) = 21.90701911 +atan2 (0.123E2, 0.123) = 1.56079666 +pow (0.123E2, 0.123) = 1.361627546 +atan2 (0.123E2, 0.123E~2) = 1.570696327 +pow (0.123E2, 0.123E~2) = 1.003091576 +atan2 (0.123E2, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E2, 0.22250738585072014E~307) = 1 +atan2 (0.123E2, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E2, 0.11125369292536007E~307) = 1 +atan2 (0.123E2, 0.5E~323) = 1.570796327 +pow (0.123E2, 0.5E~323) = 1 +atan2 (0.123E2, 0.0) = 1.570796327 +pow (0.123E2, 0.0) = 1 +atan2 (0.123E2, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E2, ~0.17976931348623157E309) = 0 +atan2 (0.123E2, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E2, ~0.8988465674311579E308) = 0 +atan2 (0.123E2, ~0.123E4) = 3.131592987 +pow (0.123E2, ~0.123E4) = 0 +atan2 (0.123E2, ~0.123E2) = 2.35619449 +pow (0.123E2, ~0.123E2) = 3.927960658E~14 +atan2 (0.123E2, ~0.3141592653589793E1) = 1.820864027 +pow (0.123E2, ~0.3141592653589793E1) = 3.766709339E~4 +atan2 (0.123E2, ~0.2718281828459045E1) = 1.788298857 +pow (0.123E2, ~0.2718281828459045E1) = 0.001089759694 +atan2 (0.123E2, ~0.123E1) = 1.670464979 +pow (0.123E2, ~0.123E1) = 0.04564747011 +atan2 (0.123E2, ~0.123) = 1.580795993 +pow (0.123E2, ~0.123) = 0.7344152246 +atan2 (0.123E2, ~0.123E~2) = 1.570896327 +pow (0.123E2, ~0.123E~2) = 0.9969179522 +atan2 (0.123E2, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E2, ~0.22250738585072014E~307) = 1 +atan2 (0.123E2, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E2, ~0.11125369292536007E~307) = 1 +atan2 (0.123E2, ~0.5E~323) = 1.570796327 +pow (0.123E2, ~0.5E~323) = 1 +atan2 (0.123E2, ~0.0) = 1.570796327 +pow (0.123E2, ~0.0) = 1 +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.123E2, ~inf) = 3.141592654 +pow (0.123E2, ~inf) = 0 +atan2 (0.123E2, nan) = nan +pow (0.123E2, nan) = nan +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.3141592653589793E1, 0.17976931348623157E309) = 1.747568922E~308 +pow (0.3141592653589793E1, 0.17976931348623157E309) = inf +atan2 (0.3141592653589793E1, 0.8988465674311579E308) = 3.495137844E~308 +pow (0.3141592653589793E1, 0.8988465674311579E308) = inf +atan2 (0.3141592653589793E1, 0.123E4) = 0.002554134815 +pow (0.3141592653589793E1, 0.123E4) = inf +atan2 (0.3141592653589793E1, 0.123E2) = 0.2500677004 +pow (0.3141592653589793E1, 0.123E2) = 1302997.055 +atan2 (0.3141592653589793E1, 0.3141592653589793E1) = 0.7853981634 +pow (0.3141592653589793E1, 0.3141592653589793E1) = 36.46215961 +atan2 (0.3141592653589793E1, 0.2718281828459045E1) = 0.8575117864 +pow (0.3141592653589793E1, 0.2718281828459045E1) = 22.45915772 +atan2 (0.3141592653589793E1, 0.123E1) = 1.197620596 +pow (0.3141592653589793E1, 0.123E1) = 4.087844278 +atan2 (0.3141592653589793E1, 0.123) = 1.531664198 +pow (0.3141592653589793E1, 0.123) = 1.151196431 +atan2 (0.3141592653589793E1, 0.123E~2) = 1.570404806 +pow (0.3141592653589793E1, 0.123E~2) = 1.001409009 +atan2 (0.3141592653589793E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.3141592653589793E1, 0.22250738585072014E~307) = 1 +atan2 (0.3141592653589793E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.3141592653589793E1, 0.11125369292536007E~307) = 1 +atan2 (0.3141592653589793E1, 0.5E~323) = 1.570796327 +pow (0.3141592653589793E1, 0.5E~323) = 1 +atan2 (0.3141592653589793E1, 0.0) = 1.570796327 +pow (0.3141592653589793E1, 0.0) = 1 +atan2 (0.3141592653589793E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.3141592653589793E1, ~0.17976931348623157E309) = 0 +atan2 (0.3141592653589793E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.3141592653589793E1, ~0.8988465674311579E308) = 0 +atan2 (0.3141592653589793E1, ~0.123E4) = 3.139038519 +pow (0.3141592653589793E1, ~0.123E4) = 0 +atan2 (0.3141592653589793E1, ~0.123E2) = 2.891524953 +pow (0.3141592653589793E1, ~0.123E2) = 7.674614429E~7 +atan2 (0.3141592653589793E1, ~0.3141592653589793E1) = 2.35619449 +pow (0.3141592653589793E1, ~0.3141592653589793E1) = 0.02742569312 +atan2 (0.3141592653589793E1, ~0.2718281828459045E1) = 2.284080867 +pow (0.3141592653589793E1, ~0.2718281828459045E1) = 0.04452526727 +atan2 (0.3141592653589793E1, ~0.123E1) = 1.943972057 +pow (0.3141592653589793E1, ~0.123E1) = 0.2446277138 +atan2 (0.3141592653589793E1, ~0.123) = 1.609928456 +pow (0.3141592653589793E1, ~0.123) = 0.8686614842 +atan2 (0.3141592653589793E1, ~0.123E~2) = 1.571187848 +pow (0.3141592653589793E1, ~0.123E~2) = 0.998592973 +atan2 (0.3141592653589793E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.3141592653589793E1, ~0.22250738585072014E~307) = 1 +atan2 (0.3141592653589793E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.3141592653589793E1, ~0.11125369292536007E~307) = 1 +atan2 (0.3141592653589793E1, ~0.5E~323) = 1.570796327 +pow (0.3141592653589793E1, ~0.5E~323) = 1 +atan2 (0.3141592653589793E1, ~0.0) = 1.570796327 +pow (0.3141592653589793E1, ~0.0) = 1 +atan2 (0.3141592653589793E1, inf) = 0 +pow (0.3141592653589793E1, inf) = inf +atan2 (0.3141592653589793E1, ~inf) = 3.141592654 +pow (0.3141592653589793E1, ~inf) = 0 +atan2 (0.3141592653589793E1, nan) = nan +pow (0.3141592653589793E1, nan) = nan +atan2 (0.3141592653589793E1, inf) = 0 +pow (0.3141592653589793E1, inf) = inf +atan2 (0.2718281828459045E1, 0.17976931348623157E309) = 1.512094459E~308 +pow (0.2718281828459045E1, 0.17976931348623157E309) = inf +atan2 (0.2718281828459045E1, 0.8988465674311579E308) = 3.024188918E~308 +pow (0.2718281828459045E1, 0.8988465674311579E308) = inf +atan2 (0.2718281828459045E1, 0.123E4) = 0.002209981629 +pow (0.2718281828459045E1, 0.123E4) = inf +atan2 (0.2718281828459045E1, 0.123E2) = 0.2175025304 +pow (0.2718281828459045E1, 0.123E2) = 219695.9887 +atan2 (0.2718281828459045E1, 0.3141592653589793E1) = 0.7132845404 +pow (0.2718281828459045E1, 0.3141592653589793E1) = 23.14069263 +atan2 (0.2718281828459045E1, 0.2718281828459045E1) = 0.7853981634 +pow (0.2718281828459045E1, 0.2718281828459045E1) = 15.15426224 +atan2 (0.2718281828459045E1, 0.123E1) = 1.145872224 +pow (0.2718281828459045E1, 0.123E1) = 3.421229536 +atan2 (0.2718281828459045E1, 0.123) = 1.525578 +pow (0.2718281828459045E1, 0.123) = 1.130884421 +atan2 (0.2718281828459045E1, 0.123E~2) = 1.570343835 +pow (0.2718281828459045E1, 0.123E~2) = 1.001230757 +atan2 (0.2718281828459045E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.2718281828459045E1, 0.22250738585072014E~307) = 1 +atan2 (0.2718281828459045E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.2718281828459045E1, 0.11125369292536007E~307) = 1 +atan2 (0.2718281828459045E1, 0.5E~323) = 1.570796327 +pow (0.2718281828459045E1, 0.5E~323) = 1 +atan2 (0.2718281828459045E1, 0.0) = 1.570796327 +pow (0.2718281828459045E1, 0.0) = 1 +atan2 (0.2718281828459045E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.2718281828459045E1, ~0.17976931348623157E309) = 0 +atan2 (0.2718281828459045E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.2718281828459045E1, ~0.8988465674311579E308) = 0 +atan2 (0.2718281828459045E1, ~0.123E4) = 3.139382672 +pow (0.2718281828459045E1, ~0.123E4) = 0 +atan2 (0.2718281828459045E1, ~0.123E2) = 2.924090123 +pow (0.2718281828459045E1, ~0.123E2) = 4.551744463E~6 +atan2 (0.2718281828459045E1, ~0.3141592653589793E1) = 2.428308113 +pow (0.2718281828459045E1, ~0.3141592653589793E1) = 0.04321391826 +atan2 (0.2718281828459045E1, ~0.2718281828459045E1) = 2.35619449 +pow (0.2718281828459045E1, ~0.2718281828459045E1) = 0.06598803585 +atan2 (0.2718281828459045E1, ~0.123E1) = 1.99572043 +pow (0.2718281828459045E1, ~0.123E1) = 0.2922925777 +atan2 (0.2718281828459045E1, ~0.123) = 1.616014654 +pow (0.2718281828459045E1, ~0.123) = 0.8842636626 +atan2 (0.2718281828459045E1, ~0.123E~2) = 1.571248818 +pow (0.2718281828459045E1, ~0.123E~2) = 0.9987707561 +atan2 (0.2718281828459045E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.2718281828459045E1, ~0.22250738585072014E~307) = 1 +atan2 (0.2718281828459045E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.2718281828459045E1, ~0.11125369292536007E~307) = 1 +atan2 (0.2718281828459045E1, ~0.5E~323) = 1.570796327 +pow (0.2718281828459045E1, ~0.5E~323) = 1 +atan2 (0.2718281828459045E1, ~0.0) = 1.570796327 +pow (0.2718281828459045E1, ~0.0) = 1 +atan2 (0.2718281828459045E1, inf) = 0 +pow (0.2718281828459045E1, inf) = inf +atan2 (0.2718281828459045E1, ~inf) = 3.141592654 +pow (0.2718281828459045E1, ~inf) = 0 +atan2 (0.2718281828459045E1, nan) = nan +pow (0.2718281828459045E1, nan) = nan +atan2 (0.2718281828459045E1, inf) = 0 +pow (0.2718281828459045E1, inf) = inf +atan2 (0.123E1, 0.17976931348623157E309) = 6.842102115E~309 +pow (0.123E1, 0.17976931348623157E309) = inf +atan2 (0.123E1, 0.8988465674311579E308) = 1.368420423E~308 +pow (0.123E1, 0.8988465674311579E308) = inf +atan2 (0.123E1, 0.123E4) = 9.999996667E~4 +pow (0.123E1, 0.123E4) = 3.830778757E110 +atan2 (0.123E1, 0.123E2) = 0.09966865249 +pow (0.123E1, 0.123E2) = 12.75947692 +atan2 (0.123E1, 0.3141592653589793E1) = 0.3731757303 +pow (0.123E1, 0.3141592653589793E1) = 1.916219422 +atan2 (0.123E1, 0.2718281828459045E1) = 0.4249241031 +pow (0.123E1, 0.2718281828459045E1) = 1.755445823 +atan2 (0.123E1, 0.123E1) = 0.7853981634 +pow (0.123E1, 0.123E1) = 1.289980921 +atan2 (0.123E1, 0.123) = 1.471127674 +pow (0.123E1, 0.123) = 1.025789688 +atan2 (0.123E1, 0.123E~2) = 1.569796327 +pow (0.123E1, 0.123E~2) = 1.00025466 +atan2 (0.123E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E1, 0.22250738585072014E~307) = 1 +atan2 (0.123E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E1, 0.11125369292536007E~307) = 1 +atan2 (0.123E1, 0.5E~323) = 1.570796327 +pow (0.123E1, 0.5E~323) = 1 +atan2 (0.123E1, 0.0) = 1.570796327 +pow (0.123E1, 0.0) = 1 +atan2 (0.123E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E1, ~0.17976931348623157E309) = 0 +atan2 (0.123E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E1, ~0.8988465674311579E308) = 0 +atan2 (0.123E1, ~0.123E4) = 3.140592654 +pow (0.123E1, ~0.123E4) = 2.610435275E~111 +atan2 (0.123E1, ~0.123E2) = 3.041924001 +pow (0.123E1, ~0.123E2) = 0.07837311876 +atan2 (0.123E1, ~0.3141592653589793E1) = 2.768416923 +pow (0.123E1, ~0.3141592653589793E1) = 0.5218609042 +atan2 (0.123E1, ~0.2718281828459045E1) = 2.71666855 +pow (0.123E1, ~0.2718281828459045E1) = 0.56965586 +atan2 (0.123E1, ~0.123E1) = 2.35619449 +pow (0.123E1, ~0.123E1) = 0.7752052637 +atan2 (0.123E1, ~0.123) = 1.670464979 +pow (0.123E1, ~0.123) = 0.9748586988 +atan2 (0.123E1, ~0.123E~2) = 1.571796326 +pow (0.123E1, ~0.123E~2) = 0.999745405 +atan2 (0.123E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E1, ~0.22250738585072014E~307) = 1 +atan2 (0.123E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E1, ~0.11125369292536007E~307) = 1 +atan2 (0.123E1, ~0.5E~323) = 1.570796327 +pow (0.123E1, ~0.5E~323) = 1 +atan2 (0.123E1, ~0.0) = 1.570796327 +pow (0.123E1, ~0.0) = 1 +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123E1, ~inf) = 3.141592654 +pow (0.123E1, ~inf) = 0 +atan2 (0.123E1, nan) = nan +pow (0.123E1, nan) = nan +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123, 0.17976931348623157E309) = 6.842102115E~310 +pow (0.123, 0.17976931348623157E309) = 0 +atan2 (0.123, 0.8988465674311579E308) = 1.368420423E~309 +pow (0.123, 0.8988465674311579E308) = 0 +atan2 (0.123, 0.123E4) = 9.999999967E~5 +pow (0.123, 0.123E4) = 0 +atan2 (0.123, 0.123E2) = 0.009999666687 +pow (0.123, 0.123E2) = 6.394886941E~12 +atan2 (0.123, 0.3141592653589793E1) = 0.03913212911 +pow (0.123, 0.3141592653589793E1) = 0.001383096824 +atan2 (0.123, 0.2718281828459045E1) = 0.04521832678 +pow (0.123, 0.2718281828459045E1) = 0.003358192615 +atan2 (0.123, 0.123E1) = 0.09966865249 +pow (0.123, 0.123E1) = 0.07595970809 +atan2 (0.123, 0.123) = 0.7853981634 +pow (0.123, 0.123) = 0.7727843683 +atan2 (0.123, 0.123E~2) = 1.56079666 +pow (0.123, 0.123E~2) = 0.9974257668 +atan2 (0.123, 0.22250738585072014E~307) = 1.570796327 +pow (0.123, 0.22250738585072014E~307) = 1 +atan2 (0.123, 0.11125369292536007E~307) = 1.570796327 +pow (0.123, 0.11125369292536007E~307) = 1 +atan2 (0.123, 0.5E~323) = 1.570796327 +pow (0.123, 0.5E~323) = 1 +atan2 (0.123, 0.0) = 1.570796327 +pow (0.123, 0.0) = 1 +atan2 (0.123, ~0.17976931348623157E309) = 3.141592654 +pow (0.123, ~0.17976931348623157E309) = inf +atan2 (0.123, ~0.8988465674311579E308) = 3.141592654 +pow (0.123, ~0.8988465674311579E308) = inf +atan2 (0.123, ~0.123E4) = 3.141492654 +pow (0.123, ~0.123E4) = inf +atan2 (0.123, ~0.123E2) = 3.131592987 +pow (0.123, ~0.123E2) = 156374930400 +atan2 (0.123, ~0.3141592653589793E1) = 3.102460524 +pow (0.123, ~0.3141592653589793E1) = 723.0151807 +atan2 (0.123, ~0.2718281828459045E1) = 3.096374327 +pow (0.123, ~0.2718281828459045E1) = 297.7792267 +atan2 (0.123, ~0.123E1) = 3.041924001 +pow (0.123, ~0.123E1) = 13.16487418 +atan2 (0.123, ~0.123) = 2.35619449 +pow (0.123, ~0.123) = 1.294022034 +atan2 (0.123, ~0.123E~2) = 1.580795993 +pow (0.123, ~0.123E~2) = 1.002580877 +atan2 (0.123, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123, ~0.22250738585072014E~307) = 1 +atan2 (0.123, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123, ~0.11125369292536007E~307) = 1 +atan2 (0.123, ~0.5E~323) = 1.570796327 +pow (0.123, ~0.5E~323) = 1 +atan2 (0.123, ~0.0) = 1.570796327 +pow (0.123, ~0.0) = 1 +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123, ~inf) = 3.141592654 +pow (0.123, ~inf) = inf +atan2 (0.123, nan) = nan +pow (0.123, nan) = nan +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123E~2, 0.17976931348623157E309) = 6.842102115E~312 +pow (0.123E~2, 0.17976931348623157E309) = 0 +atan2 (0.123E~2, 0.8988465674311579E308) = 1.368420423E~311 +pow (0.123E~2, 0.8988465674311579E308) = 0 +atan2 (0.123E~2, 0.123E4) = 1E~6 +pow (0.123E~2, 0.123E4) = 0 +atan2 (0.123E~2, 0.123E2) = 9.999999967E~5 +pow (0.123E~2, 0.123E2) = 1.606322974E~36 +atan2 (0.123E~2, 0.3141592653589793E1) = 3.9152114E~4 +pow (0.123E~2, 0.3141592653589793E1) = 7.205552335E~10 +atan2 (0.123E~2, 0.2718281828459045E1) = 4.524916818E~4 +pow (0.123E~2, 0.2718281828459045E1) = 1.228971878E~8 +atan2 (0.123E~2, 0.123E1) = 9.999996667E~4 +pow (0.123E~2, 0.123E1) = 2.633802994E~4 +atan2 (0.123E~2, 0.123) = 0.009999666687 +pow (0.123E~2, 0.123) = 0.4385895994 +atan2 (0.123E~2, 0.123E~2) = 0.7853981634 +pow (0.123E~2, 0.123E~2) = 0.9917919599 +atan2 (0.123E~2, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E~2, 0.22250738585072014E~307) = 1 +atan2 (0.123E~2, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E~2, 0.11125369292536007E~307) = 1 +atan2 (0.123E~2, 0.5E~323) = 1.570796327 +pow (0.123E~2, 0.5E~323) = 1 +atan2 (0.123E~2, 0.0) = 1.570796327 +pow (0.123E~2, 0.0) = 1 +atan2 (0.123E~2, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E~2, ~0.17976931348623157E309) = inf +atan2 (0.123E~2, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E~2, ~0.8988465674311579E308) = inf +atan2 (0.123E~2, ~0.123E4) = 3.141591654 +pow (0.123E~2, ~0.123E4) = inf +atan2 (0.123E~2, ~0.123E2) = 3.141492654 +pow (0.123E~2, ~0.123E2) = 6.225398107E35 +atan2 (0.123E~2, ~0.3141592653589793E1) = 3.141201132 +pow (0.123E~2, ~0.3141592653589793E1) = 1387818662 +atan2 (0.123E~2, ~0.2718281828459045E1) = 3.141140162 +pow (0.123E~2, ~0.2718281828459045E1) = 81368826.88 +atan2 (0.123E~2, ~0.123E1) = 3.140592654 +pow (0.123E~2, ~0.123E1) = 3796.791188 +atan2 (0.123E~2, ~0.123) = 3.131592987 +pow (0.123E~2, ~0.123) = 2.280035827 +atan2 (0.123E~2, ~0.123E~2) = 2.35619449 +pow (0.123E~2, ~0.123E~2) = 1.00827597 +atan2 (0.123E~2, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E~2, ~0.22250738585072014E~307) = 1 +atan2 (0.123E~2, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E~2, ~0.11125369292536007E~307) = 1 +atan2 (0.123E~2, ~0.5E~323) = 1.570796327 +pow (0.123E~2, ~0.5E~323) = 1 +atan2 (0.123E~2, ~0.0) = 1.570796327 +pow (0.123E~2, ~0.0) = 1 +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.123E~2, ~inf) = 3.141592654 +pow (0.123E~2, ~inf) = inf +atan2 (0.123E~2, nan) = nan +pow (0.123E~2, nan) = nan +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.22250738585072014E~307, 0.17976931348623157E309) = 0 +pow (0.22250738585072014E~307, 0.17976931348623157E309) = 0 +atan2 (0.22250738585072014E~307, 0.8988465674311579E308) = 0 +pow (0.22250738585072014E~307, 0.8988465674311579E308) = 0 +atan2 (0.22250738585072014E~307, 0.123E4) = 1.809003137E~311 +pow (0.22250738585072014E~307, 0.123E4) = 0 +atan2 (0.22250738585072014E~307, 0.123E2) = 1.809003137E~309 +pow (0.22250738585072014E~307, 0.123E2) = 0 +atan2 (0.22250738585072014E~307, 0.3141592653589793E1) = 7.082630067E~309 +pow (0.22250738585072014E~307, 0.3141592653589793E1) = 0 +atan2 (0.22250738585072014E~307, 0.2718281828459045E1) = 8.185589276E~309 +pow (0.22250738585072014E~307, 0.2718281828459045E1) = 0 +atan2 (0.22250738585072014E~307, 0.123E1) = 1.809003137E~308 +pow (0.22250738585072014E~307, 0.123E1) = 0 +atan2 (0.22250738585072014E~307, 0.123) = 1.809003137E~307 +pow (0.22250738585072014E~307, 0.123) = 1.441197052E~38 +atan2 (0.22250738585072014E~307, 0.123E~2) = 1.809003137E~305 +pow (0.22250738585072014E~307, 0.123E~2) = 0.4183957204 +atan2 (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.7853981634 +pow (0.22250738585072014E~307, 0.22250738585072014E~307) = 1 +atan2 (0.22250738585072014E~307, 0.11125369292536007E~307) = 1.107148718 +pow (0.22250738585072014E~307, 0.11125369292536007E~307) = 1 +atan2 (0.22250738585072014E~307, 0.5E~323) = 1.570796327 +pow (0.22250738585072014E~307, 0.5E~323) = 1 +atan2 (0.22250738585072014E~307, 0.0) = 1.570796327 +pow (0.22250738585072014E~307, 0.0) = 1 +atan2 (0.22250738585072014E~307, ~0.17976931348623157E309) = 3.141592654 +pow (0.22250738585072014E~307, ~0.17976931348623157E309) = inf +atan2 (0.22250738585072014E~307, ~0.8988465674311579E308) = 3.141592654 +pow (0.22250738585072014E~307, ~0.8988465674311579E308) = inf +atan2 (0.22250738585072014E~307, ~0.123E4) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E4) = inf +atan2 (0.22250738585072014E~307, ~0.123E2) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E2) = inf +atan2 (0.22250738585072014E~307, ~0.3141592653589793E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.3141592653589793E1) = inf +atan2 (0.22250738585072014E~307, ~0.2718281828459045E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.2718281828459045E1) = inf +atan2 (0.22250738585072014E~307, ~0.123E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E1) = inf +atan2 (0.22250738585072014E~307, ~0.123) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123) = 6.93867642E37 +atan2 (0.22250738585072014E~307, ~0.123E~2) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E~2) = 2.390081808 +atan2 (0.22250738585072014E~307, ~0.22250738585072014E~307) = 2.35619449 +pow (0.22250738585072014E~307, ~0.22250738585072014E~307) = 1 +atan2 (0.22250738585072014E~307, ~0.11125369292536007E~307) = 2.034443936 +pow (0.22250738585072014E~307, ~0.11125369292536007E~307) = 1 +atan2 (0.22250738585072014E~307, ~0.5E~323) = 1.570796327 +pow (0.22250738585072014E~307, ~0.5E~323) = 1 +atan2 (0.22250738585072014E~307, ~0.0) = 1.570796327 +pow (0.22250738585072014E~307, ~0.0) = 1 +atan2 (0.22250738585072014E~307, inf) = 0 +pow (0.22250738585072014E~307, inf) = 0 +atan2 (0.22250738585072014E~307, ~inf) = 3.141592654 +pow (0.22250738585072014E~307, ~inf) = inf +atan2 (0.22250738585072014E~307, nan) = nan +pow (0.22250738585072014E~307, nan) = nan +atan2 (0.22250738585072014E~307, inf) = 0 +pow (0.22250738585072014E~307, inf) = 0 +atan2 (0.11125369292536007E~307, 0.17976931348623157E309) = 0 +pow (0.11125369292536007E~307, 0.17976931348623157E309) = 0 +atan2 (0.11125369292536007E~307, 0.8988465674311579E308) = 0 +pow (0.11125369292536007E~307, 0.8988465674311579E308) = 0 +atan2 (0.11125369292536007E~307, 0.123E4) = 9.045015685E~312 +pow (0.11125369292536007E~307, 0.123E4) = 0 +atan2 (0.11125369292536007E~307, 0.123E2) = 9.045015685E~310 +pow (0.11125369292536007E~307, 0.123E2) = 0 +atan2 (0.11125369292536007E~307, 0.3141592653589793E1) = 3.541315033E~309 +pow (0.11125369292536007E~307, 0.3141592653589793E1) = 0 +atan2 (0.11125369292536007E~307, 0.2718281828459045E1) = 4.092794638E~309 +pow (0.11125369292536007E~307, 0.2718281828459045E1) = 0 +atan2 (0.11125369292536007E~307, 0.123E1) = 9.045015685E~309 +pow (0.11125369292536007E~307, 0.123E1) = 0 +atan2 (0.11125369292536007E~307, 0.123) = 9.045015685E~308 +pow (0.11125369292536007E~307, 0.123) = 1.323416898E~38 +atan2 (0.11125369292536007E~307, 0.123E~2) = 9.045015685E~306 +pow (0.11125369292536007E~307, 0.123E~2) = 0.4180391603 +atan2 (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.463647609 +pow (0.11125369292536007E~307, 0.22250738585072014E~307) = 1 +atan2 (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.7853981634 +pow (0.11125369292536007E~307, 0.11125369292536007E~307) = 1 +atan2 (0.11125369292536007E~307, 0.5E~323) = 1.570796327 +pow (0.11125369292536007E~307, 0.5E~323) = 1 +atan2 (0.11125369292536007E~307, 0.0) = 1.570796327 +pow (0.11125369292536007E~307, 0.0) = 1 +atan2 (0.11125369292536007E~307, ~0.17976931348623157E309) = 3.141592654 +pow (0.11125369292536007E~307, ~0.17976931348623157E309) = inf +atan2 (0.11125369292536007E~307, ~0.8988465674311579E308) = 3.141592654 +pow (0.11125369292536007E~307, ~0.8988465674311579E308) = inf +atan2 (0.11125369292536007E~307, ~0.123E4) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E4) = inf +atan2 (0.11125369292536007E~307, ~0.123E2) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E2) = inf +atan2 (0.11125369292536007E~307, ~0.3141592653589793E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.3141592653589793E1) = inf +atan2 (0.11125369292536007E~307, ~0.2718281828459045E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.2718281828459045E1) = inf +atan2 (0.11125369292536007E~307, ~0.123E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E1) = inf +atan2 (0.11125369292536007E~307, ~0.123) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123) = 7.556197911E37 +atan2 (0.11125369292536007E~307, ~0.123E~2) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E~2) = 2.392120392 +atan2 (0.11125369292536007E~307, ~0.22250738585072014E~307) = 2.677945045 +pow (0.11125369292536007E~307, ~0.22250738585072014E~307) = 1 +atan2 (0.11125369292536007E~307, ~0.11125369292536007E~307) = 2.35619449 +pow (0.11125369292536007E~307, ~0.11125369292536007E~307) = 1 +atan2 (0.11125369292536007E~307, ~0.5E~323) = 1.570796327 +pow (0.11125369292536007E~307, ~0.5E~323) = 1 +atan2 (0.11125369292536007E~307, ~0.0) = 1.570796327 +pow (0.11125369292536007E~307, ~0.0) = 1 +atan2 (0.11125369292536007E~307, inf) = 0 +pow (0.11125369292536007E~307, inf) = 0 +atan2 (0.11125369292536007E~307, ~inf) = 3.141592654 +pow (0.11125369292536007E~307, ~inf) = inf +atan2 (0.11125369292536007E~307, nan) = nan +pow (0.11125369292536007E~307, nan) = nan +atan2 (0.11125369292536007E~307, inf) = 0 +pow (0.11125369292536007E~307, inf) = 0 +atan2 (0.5E~323, 0.17976931348623157E309) = 0 +pow (0.5E~323, 0.17976931348623157E309) = 0 +atan2 (0.5E~323, 0.8988465674311579E308) = 0 +pow (0.5E~323, 0.8988465674311579E308) = 0 +atan2 (0.5E~323, 0.123E4) = 0 +pow (0.5E~323, 0.123E4) = 0 +atan2 (0.5E~323, 0.123E2) = 0 +pow (0.5E~323, 0.123E2) = 0 +atan2 (0.5E~323, 0.3141592653589793E1) = 0 +pow (0.5E~323, 0.3141592653589793E1) = 0 +atan2 (0.5E~323, 0.2718281828459045E1) = 0 +pow (0.5E~323, 0.2718281828459045E1) = 0 +atan2 (0.5E~323, 0.123E1) = 4.940656458E~324 +pow (0.5E~323, 0.123E1) = 0 +atan2 (0.5E~323, 0.123) = 3.952525167E~323 +pow (0.5E~323, 0.123) = 1.711336892E~40 +atan2 (0.5E~323, 0.123E~2) = 4.016753701E~321 +pow (0.5E~323, 0.123E~2) = 0.4002518566 +atan2 (0.5E~323, 0.22250738585072014E~307) = 2.220446049E~16 +pow (0.5E~323, 0.22250738585072014E~307) = 1 +atan2 (0.5E~323, 0.11125369292536007E~307) = 4.440892099E~16 +pow (0.5E~323, 0.11125369292536007E~307) = 1 +atan2 (0.5E~323, 0.5E~323) = 0.7853981634 +pow (0.5E~323, 0.5E~323) = 1 +atan2 (0.5E~323, 0.0) = 1.570796327 +pow (0.5E~323, 0.0) = 1 +atan2 (0.5E~323, ~0.17976931348623157E309) = 3.141592654 +pow (0.5E~323, ~0.17976931348623157E309) = inf +atan2 (0.5E~323, ~0.8988465674311579E308) = 3.141592654 +pow (0.5E~323, ~0.8988465674311579E308) = inf +atan2 (0.5E~323, ~0.123E4) = 3.141592654 +pow (0.5E~323, ~0.123E4) = inf +atan2 (0.5E~323, ~0.123E2) = 3.141592654 +pow (0.5E~323, ~0.123E2) = inf +atan2 (0.5E~323, ~0.3141592653589793E1) = 3.141592654 +pow (0.5E~323, ~0.3141592653589793E1) = inf +atan2 (0.5E~323, ~0.2718281828459045E1) = 3.141592654 +pow (0.5E~323, ~0.2718281828459045E1) = inf +atan2 (0.5E~323, ~0.123E1) = 3.141592654 +pow (0.5E~323, ~0.123E1) = inf +atan2 (0.5E~323, ~0.123) = 3.141592654 +pow (0.5E~323, ~0.123) = 5.843384809E39 +atan2 (0.5E~323, ~0.123E~2) = 3.141592654 +pow (0.5E~323, ~0.123E~2) = 2.498426887 +atan2 (0.5E~323, ~0.22250738585072014E~307) = 3.141592654 +pow (0.5E~323, ~0.22250738585072014E~307) = 1 +atan2 (0.5E~323, ~0.11125369292536007E~307) = 3.141592654 +pow (0.5E~323, ~0.11125369292536007E~307) = 1 +atan2 (0.5E~323, ~0.5E~323) = 2.35619449 +pow (0.5E~323, ~0.5E~323) = 1 +atan2 (0.5E~323, ~0.0) = 1.570796327 +pow (0.5E~323, ~0.0) = 1 +atan2 (0.5E~323, inf) = 0 +pow (0.5E~323, inf) = 0 +atan2 (0.5E~323, ~inf) = 3.141592654 +pow (0.5E~323, ~inf) = inf +atan2 (0.5E~323, nan) = nan +pow (0.5E~323, nan) = nan +atan2 (0.5E~323, inf) = 0 +pow (0.5E~323, inf) = 0 +atan2 (0.0, 0.17976931348623157E309) = 0 +pow (0.0, 0.17976931348623157E309) = 0 +atan2 (0.0, 0.8988465674311579E308) = 0 +pow (0.0, 0.8988465674311579E308) = 0 +atan2 (0.0, 0.123E4) = 0 +pow (0.0, 0.123E4) = 0 +atan2 (0.0, 0.123E2) = 0 +pow (0.0, 0.123E2) = 0 +atan2 (0.0, 0.3141592653589793E1) = 0 +pow (0.0, 0.3141592653589793E1) = 0 +atan2 (0.0, 0.2718281828459045E1) = 0 +pow (0.0, 0.2718281828459045E1) = 0 +atan2 (0.0, 0.123E1) = 0 +pow (0.0, 0.123E1) = 0 +atan2 (0.0, 0.123) = 0 +pow (0.0, 0.123) = 0 +atan2 (0.0, 0.123E~2) = 0 +pow (0.0, 0.123E~2) = 0 +atan2 (0.0, 0.22250738585072014E~307) = 0 +pow (0.0, 0.22250738585072014E~307) = 0 +atan2 (0.0, 0.11125369292536007E~307) = 0 +pow (0.0, 0.11125369292536007E~307) = 0 +atan2 (0.0, 0.5E~323) = 0 +pow (0.0, 0.5E~323) = 0 +atan2 (0.0, 0.0) = 0 +pow (0.0, 0.0) = 1 +atan2 (0.0, ~0.17976931348623157E309) = 3.141592654 +pow (0.0, ~0.17976931348623157E309) = inf +atan2 (0.0, ~0.8988465674311579E308) = 3.141592654 +pow (0.0, ~0.8988465674311579E308) = inf +atan2 (0.0, ~0.123E4) = 3.141592654 +pow (0.0, ~0.123E4) = inf +atan2 (0.0, ~0.123E2) = 3.141592654 +pow (0.0, ~0.123E2) = inf +atan2 (0.0, ~0.3141592653589793E1) = 3.141592654 +pow (0.0, ~0.3141592653589793E1) = inf +atan2 (0.0, ~0.2718281828459045E1) = 3.141592654 +pow (0.0, ~0.2718281828459045E1) = inf +atan2 (0.0, ~0.123E1) = 3.141592654 +pow (0.0, ~0.123E1) = inf +atan2 (0.0, ~0.123) = 3.141592654 +pow (0.0, ~0.123) = inf +atan2 (0.0, ~0.123E~2) = 3.141592654 +pow (0.0, ~0.123E~2) = inf +atan2 (0.0, ~0.22250738585072014E~307) = 3.141592654 +pow (0.0, ~0.22250738585072014E~307) = inf +atan2 (0.0, ~0.11125369292536007E~307) = 3.141592654 +pow (0.0, ~0.11125369292536007E~307) = inf +atan2 (0.0, ~0.5E~323) = 3.141592654 +pow (0.0, ~0.5E~323) = inf +atan2 (0.0, ~0.0) = 3.141592654 +pow (0.0, ~0.0) = 1 +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (0.0, ~inf) = 3.141592654 +pow (0.0, ~inf) = inf +atan2 (0.0, nan) = nan +pow (0.0, nan) = nan +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.7853981634 +pow (~0.17976931348623157E309, 0.17976931348623157E309) = inf +atan2 (~0.17976931348623157E309, 0.8988465674311579E308) = ~1.107148718 +pow (~0.17976931348623157E309, 0.8988465674311579E308) = inf +atan2 (~0.17976931348623157E309, 0.123E4) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E4) = inf +atan2 (~0.17976931348623157E309, 0.123E2) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E2) = nan +atan2 (~0.17976931348623157E309, 0.3141592653589793E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.3141592653589793E1) = nan +atan2 (~0.17976931348623157E309, 0.2718281828459045E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.2718281828459045E1) = nan +atan2 (~0.17976931348623157E309, 0.123E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E1) = nan +atan2 (~0.17976931348623157E309, 0.123) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123) = nan +atan2 (~0.17976931348623157E309, 0.123E~2) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E~2) = nan +atan2 (~0.17976931348623157E309, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.17976931348623157E309, 0.22250738585072014E~307) = nan +atan2 (~0.17976931348623157E309, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.17976931348623157E309, 0.11125369292536007E~307) = nan +atan2 (~0.17976931348623157E309, 0.5E~323) = ~1.570796327 +pow (~0.17976931348623157E309, 0.5E~323) = nan +atan2 (~0.17976931348623157E309, 0.0) = ~1.570796327 +pow (~0.17976931348623157E309, 0.0) = 1 +atan2 (~0.17976931348623157E309, ~0.17976931348623157E309) = ~2.35619449 +pow (~0.17976931348623157E309, ~0.17976931348623157E309) = 0 +atan2 (~0.17976931348623157E309, ~0.8988465674311579E308) = ~2.034443936 +pow (~0.17976931348623157E309, ~0.8988465674311579E308) = 0 +atan2 (~0.17976931348623157E309, ~0.123E4) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E4) = 0 +atan2 (~0.17976931348623157E309, ~0.123E2) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E2) = nan +atan2 (~0.17976931348623157E309, ~0.3141592653589793E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.3141592653589793E1) = nan +atan2 (~0.17976931348623157E309, ~0.2718281828459045E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.2718281828459045E1) = nan +atan2 (~0.17976931348623157E309, ~0.123E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E1) = nan +atan2 (~0.17976931348623157E309, ~0.123) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123) = nan +atan2 (~0.17976931348623157E309, ~0.123E~2) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E~2) = nan +atan2 (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.22250738585072014E~307) = nan +atan2 (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.11125369292536007E~307) = nan +atan2 (~0.17976931348623157E309, ~0.5E~323) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.5E~323) = nan +atan2 (~0.17976931348623157E309, ~0.0) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.0) = 1 +atan2 (~0.17976931348623157E309, inf) = 0 +pow (~0.17976931348623157E309, inf) = inf +atan2 (~0.17976931348623157E309, ~inf) = ~3.141592654 +pow (~0.17976931348623157E309, ~inf) = 0 +atan2 (~0.17976931348623157E309, nan) = nan +pow (~0.17976931348623157E309, nan) = nan +atan2 (~0.17976931348623157E309, inf) = 0 +pow (~0.17976931348623157E309, inf) = inf +atan2 (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.463647609 +pow (~0.8988465674311579E308, 0.17976931348623157E309) = inf +atan2 (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.7853981634 +pow (~0.8988465674311579E308, 0.8988465674311579E308) = inf +atan2 (~0.8988465674311579E308, 0.123E4) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E4) = inf +atan2 (~0.8988465674311579E308, 0.123E2) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E2) = nan +atan2 (~0.8988465674311579E308, 0.3141592653589793E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.3141592653589793E1) = nan +atan2 (~0.8988465674311579E308, 0.2718281828459045E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.2718281828459045E1) = nan +atan2 (~0.8988465674311579E308, 0.123E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E1) = nan +atan2 (~0.8988465674311579E308, 0.123) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123) = nan +atan2 (~0.8988465674311579E308, 0.123E~2) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E~2) = nan +atan2 (~0.8988465674311579E308, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.8988465674311579E308, 0.22250738585072014E~307) = nan +atan2 (~0.8988465674311579E308, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.8988465674311579E308, 0.11125369292536007E~307) = nan +atan2 (~0.8988465674311579E308, 0.5E~323) = ~1.570796327 +pow (~0.8988465674311579E308, 0.5E~323) = nan +atan2 (~0.8988465674311579E308, 0.0) = ~1.570796327 +pow (~0.8988465674311579E308, 0.0) = 1 +atan2 (~0.8988465674311579E308, ~0.17976931348623157E309) = ~2.677945045 +pow (~0.8988465674311579E308, ~0.17976931348623157E309) = 0 +atan2 (~0.8988465674311579E308, ~0.8988465674311579E308) = ~2.35619449 +pow (~0.8988465674311579E308, ~0.8988465674311579E308) = 0 +atan2 (~0.8988465674311579E308, ~0.123E4) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E4) = 0 +atan2 (~0.8988465674311579E308, ~0.123E2) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E2) = nan +atan2 (~0.8988465674311579E308, ~0.3141592653589793E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.3141592653589793E1) = nan +atan2 (~0.8988465674311579E308, ~0.2718281828459045E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.2718281828459045E1) = nan +atan2 (~0.8988465674311579E308, ~0.123E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E1) = nan +atan2 (~0.8988465674311579E308, ~0.123) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123) = nan +atan2 (~0.8988465674311579E308, ~0.123E~2) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E~2) = nan +atan2 (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.22250738585072014E~307) = nan +atan2 (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.11125369292536007E~307) = nan +atan2 (~0.8988465674311579E308, ~0.5E~323) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.5E~323) = nan +atan2 (~0.8988465674311579E308, ~0.0) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.0) = 1 +atan2 (~0.8988465674311579E308, inf) = 0 +pow (~0.8988465674311579E308, inf) = inf +atan2 (~0.8988465674311579E308, ~inf) = ~3.141592654 +pow (~0.8988465674311579E308, ~inf) = 0 +atan2 (~0.8988465674311579E308, nan) = nan +pow (~0.8988465674311579E308, nan) = nan +atan2 (~0.8988465674311579E308, inf) = 0 +pow (~0.8988465674311579E308, inf) = inf +atan2 (~0.123E4, 0.17976931348623157E309) = ~6.842102115E~306 +pow (~0.123E4, 0.17976931348623157E309) = inf +atan2 (~0.123E4, 0.8988465674311579E308) = ~1.368420423E~305 +pow (~0.123E4, 0.8988465674311579E308) = inf +atan2 (~0.123E4, 0.123E4) = ~0.7853981634 +pow (~0.123E4, 0.123E4) = inf +atan2 (~0.123E4, 0.123E2) = ~1.56079666 +pow (~0.123E4, 0.123E2) = nan +atan2 (~0.123E4, 0.3141592653589793E1) = ~1.568242192 +pow (~0.123E4, 0.3141592653589793E1) = nan +atan2 (~0.123E4, 0.2718281828459045E1) = ~1.568586345 +pow (~0.123E4, 0.2718281828459045E1) = nan +atan2 (~0.123E4, 0.123E1) = ~1.569796327 +pow (~0.123E4, 0.123E1) = nan +atan2 (~0.123E4, 0.123) = ~1.570696327 +pow (~0.123E4, 0.123) = nan +atan2 (~0.123E4, 0.123E~2) = ~1.570795327 +pow (~0.123E4, 0.123E~2) = nan +atan2 (~0.123E4, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E4, 0.22250738585072014E~307) = nan +atan2 (~0.123E4, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E4, 0.11125369292536007E~307) = nan +atan2 (~0.123E4, 0.5E~323) = ~1.570796327 +pow (~0.123E4, 0.5E~323) = nan +atan2 (~0.123E4, 0.0) = ~1.570796327 +pow (~0.123E4, 0.0) = 1 +atan2 (~0.123E4, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E4, ~0.17976931348623157E309) = 0 +atan2 (~0.123E4, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E4, ~0.8988465674311579E308) = 0 +atan2 (~0.123E4, ~0.123E4) = ~2.35619449 +pow (~0.123E4, ~0.123E4) = 0 +atan2 (~0.123E4, ~0.123E2) = ~1.580795993 +pow (~0.123E4, ~0.123E2) = nan +atan2 (~0.123E4, ~0.3141592653589793E1) = ~1.573350462 +pow (~0.123E4, ~0.3141592653589793E1) = nan +atan2 (~0.123E4, ~0.2718281828459045E1) = ~1.573006308 +pow (~0.123E4, ~0.2718281828459045E1) = nan +atan2 (~0.123E4, ~0.123E1) = ~1.571796326 +pow (~0.123E4, ~0.123E1) = nan +atan2 (~0.123E4, ~0.123) = ~1.570896327 +pow (~0.123E4, ~0.123) = nan +atan2 (~0.123E4, ~0.123E~2) = ~1.570797327 +pow (~0.123E4, ~0.123E~2) = nan +atan2 (~0.123E4, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E4, ~0.22250738585072014E~307) = nan +atan2 (~0.123E4, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E4, ~0.11125369292536007E~307) = nan +atan2 (~0.123E4, ~0.5E~323) = ~1.570796327 +pow (~0.123E4, ~0.5E~323) = nan +atan2 (~0.123E4, ~0.0) = ~1.570796327 +pow (~0.123E4, ~0.0) = 1 +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E4, ~inf) = ~3.141592654 +pow (~0.123E4, ~inf) = 0 +atan2 (~0.123E4, nan) = nan +pow (~0.123E4, nan) = nan +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E2, 0.17976931348623157E309) = ~6.842102115E~308 +pow (~0.123E2, 0.17976931348623157E309) = inf +atan2 (~0.123E2, 0.8988465674311579E308) = ~1.368420423E~307 +pow (~0.123E2, 0.8988465674311579E308) = inf +atan2 (~0.123E2, 0.123E4) = ~0.009999666687 +pow (~0.123E2, 0.123E4) = inf +atan2 (~0.123E2, 0.123E2) = ~0.7853981634 +pow (~0.123E2, 0.123E2) = nan +atan2 (~0.123E2, 0.3141592653589793E1) = ~1.320728626 +pow (~0.123E2, 0.3141592653589793E1) = nan +atan2 (~0.123E2, 0.2718281828459045E1) = ~1.353293796 +pow (~0.123E2, 0.2718281828459045E1) = nan +atan2 (~0.123E2, 0.123E1) = ~1.471127674 +pow (~0.123E2, 0.123E1) = nan +atan2 (~0.123E2, 0.123) = ~1.56079666 +pow (~0.123E2, 0.123) = nan +atan2 (~0.123E2, 0.123E~2) = ~1.570696327 +pow (~0.123E2, 0.123E~2) = nan +atan2 (~0.123E2, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E2, 0.22250738585072014E~307) = nan +atan2 (~0.123E2, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E2, 0.11125369292536007E~307) = nan +atan2 (~0.123E2, 0.5E~323) = ~1.570796327 +pow (~0.123E2, 0.5E~323) = nan +atan2 (~0.123E2, 0.0) = ~1.570796327 +pow (~0.123E2, 0.0) = 1 +atan2 (~0.123E2, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E2, ~0.17976931348623157E309) = 0 +atan2 (~0.123E2, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E2, ~0.8988465674311579E308) = 0 +atan2 (~0.123E2, ~0.123E4) = ~3.131592987 +pow (~0.123E2, ~0.123E4) = 0 +atan2 (~0.123E2, ~0.123E2) = ~2.35619449 +pow (~0.123E2, ~0.123E2) = nan +atan2 (~0.123E2, ~0.3141592653589793E1) = ~1.820864027 +pow (~0.123E2, ~0.3141592653589793E1) = nan +atan2 (~0.123E2, ~0.2718281828459045E1) = ~1.788298857 +pow (~0.123E2, ~0.2718281828459045E1) = nan +atan2 (~0.123E2, ~0.123E1) = ~1.670464979 +pow (~0.123E2, ~0.123E1) = nan +atan2 (~0.123E2, ~0.123) = ~1.580795993 +pow (~0.123E2, ~0.123) = nan +atan2 (~0.123E2, ~0.123E~2) = ~1.570896327 +pow (~0.123E2, ~0.123E~2) = nan +atan2 (~0.123E2, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E2, ~0.22250738585072014E~307) = nan +atan2 (~0.123E2, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E2, ~0.11125369292536007E~307) = nan +atan2 (~0.123E2, ~0.5E~323) = ~1.570796327 +pow (~0.123E2, ~0.5E~323) = nan +atan2 (~0.123E2, ~0.0) = ~1.570796327 +pow (~0.123E2, ~0.0) = 1 +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.123E2, ~inf) = ~3.141592654 +pow (~0.123E2, ~inf) = 0 +atan2 (~0.123E2, nan) = nan +pow (~0.123E2, nan) = nan +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.3141592653589793E1, 0.17976931348623157E309) = ~1.747568922E~308 +pow (~0.3141592653589793E1, 0.17976931348623157E309) = inf +atan2 (~0.3141592653589793E1, 0.8988465674311579E308) = ~3.495137844E~308 +pow (~0.3141592653589793E1, 0.8988465674311579E308) = inf +atan2 (~0.3141592653589793E1, 0.123E4) = ~0.002554134815 +pow (~0.3141592653589793E1, 0.123E4) = inf +atan2 (~0.3141592653589793E1, 0.123E2) = ~0.2500677004 +pow (~0.3141592653589793E1, 0.123E2) = nan +atan2 (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.7853981634 +pow (~0.3141592653589793E1, 0.3141592653589793E1) = nan +atan2 (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.8575117864 +pow (~0.3141592653589793E1, 0.2718281828459045E1) = nan +atan2 (~0.3141592653589793E1, 0.123E1) = ~1.197620596 +pow (~0.3141592653589793E1, 0.123E1) = nan +atan2 (~0.3141592653589793E1, 0.123) = ~1.531664198 +pow (~0.3141592653589793E1, 0.123) = nan +atan2 (~0.3141592653589793E1, 0.123E~2) = ~1.570404806 +pow (~0.3141592653589793E1, 0.123E~2) = nan +atan2 (~0.3141592653589793E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.3141592653589793E1, 0.22250738585072014E~307) = nan +atan2 (~0.3141592653589793E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.3141592653589793E1, 0.11125369292536007E~307) = nan +atan2 (~0.3141592653589793E1, 0.5E~323) = ~1.570796327 +pow (~0.3141592653589793E1, 0.5E~323) = nan +atan2 (~0.3141592653589793E1, 0.0) = ~1.570796327 +pow (~0.3141592653589793E1, 0.0) = 1 +atan2 (~0.3141592653589793E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.3141592653589793E1, ~0.17976931348623157E309) = 0 +atan2 (~0.3141592653589793E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.3141592653589793E1, ~0.8988465674311579E308) = 0 +atan2 (~0.3141592653589793E1, ~0.123E4) = ~3.139038519 +pow (~0.3141592653589793E1, ~0.123E4) = 0 +atan2 (~0.3141592653589793E1, ~0.123E2) = ~2.891524953 +pow (~0.3141592653589793E1, ~0.123E2) = nan +atan2 (~0.3141592653589793E1, ~0.3141592653589793E1) = ~2.35619449 +pow (~0.3141592653589793E1, ~0.3141592653589793E1) = nan +atan2 (~0.3141592653589793E1, ~0.2718281828459045E1) = ~2.284080867 +pow (~0.3141592653589793E1, ~0.2718281828459045E1) = nan +atan2 (~0.3141592653589793E1, ~0.123E1) = ~1.943972057 +pow (~0.3141592653589793E1, ~0.123E1) = nan +atan2 (~0.3141592653589793E1, ~0.123) = ~1.609928456 +pow (~0.3141592653589793E1, ~0.123) = nan +atan2 (~0.3141592653589793E1, ~0.123E~2) = ~1.571187848 +pow (~0.3141592653589793E1, ~0.123E~2) = nan +atan2 (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.22250738585072014E~307) = nan +atan2 (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.11125369292536007E~307) = nan +atan2 (~0.3141592653589793E1, ~0.5E~323) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.5E~323) = nan +atan2 (~0.3141592653589793E1, ~0.0) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.0) = 1 +atan2 (~0.3141592653589793E1, inf) = 0 +pow (~0.3141592653589793E1, inf) = inf +atan2 (~0.3141592653589793E1, ~inf) = ~3.141592654 +pow (~0.3141592653589793E1, ~inf) = 0 +atan2 (~0.3141592653589793E1, nan) = nan +pow (~0.3141592653589793E1, nan) = nan +atan2 (~0.3141592653589793E1, inf) = 0 +pow (~0.3141592653589793E1, inf) = inf +atan2 (~0.2718281828459045E1, 0.17976931348623157E309) = ~1.512094459E~308 +pow (~0.2718281828459045E1, 0.17976931348623157E309) = inf +atan2 (~0.2718281828459045E1, 0.8988465674311579E308) = ~3.024188918E~308 +pow (~0.2718281828459045E1, 0.8988465674311579E308) = inf +atan2 (~0.2718281828459045E1, 0.123E4) = ~0.002209981629 +pow (~0.2718281828459045E1, 0.123E4) = inf +atan2 (~0.2718281828459045E1, 0.123E2) = ~0.2175025304 +pow (~0.2718281828459045E1, 0.123E2) = nan +atan2 (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.7132845404 +pow (~0.2718281828459045E1, 0.3141592653589793E1) = nan +atan2 (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.7853981634 +pow (~0.2718281828459045E1, 0.2718281828459045E1) = nan +atan2 (~0.2718281828459045E1, 0.123E1) = ~1.145872224 +pow (~0.2718281828459045E1, 0.123E1) = nan +atan2 (~0.2718281828459045E1, 0.123) = ~1.525578 +pow (~0.2718281828459045E1, 0.123) = nan +atan2 (~0.2718281828459045E1, 0.123E~2) = ~1.570343835 +pow (~0.2718281828459045E1, 0.123E~2) = nan +atan2 (~0.2718281828459045E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.2718281828459045E1, 0.22250738585072014E~307) = nan +atan2 (~0.2718281828459045E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.2718281828459045E1, 0.11125369292536007E~307) = nan +atan2 (~0.2718281828459045E1, 0.5E~323) = ~1.570796327 +pow (~0.2718281828459045E1, 0.5E~323) = nan +atan2 (~0.2718281828459045E1, 0.0) = ~1.570796327 +pow (~0.2718281828459045E1, 0.0) = 1 +atan2 (~0.2718281828459045E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.2718281828459045E1, ~0.17976931348623157E309) = 0 +atan2 (~0.2718281828459045E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.2718281828459045E1, ~0.8988465674311579E308) = 0 +atan2 (~0.2718281828459045E1, ~0.123E4) = ~3.139382672 +pow (~0.2718281828459045E1, ~0.123E4) = 0 +atan2 (~0.2718281828459045E1, ~0.123E2) = ~2.924090123 +pow (~0.2718281828459045E1, ~0.123E2) = nan +atan2 (~0.2718281828459045E1, ~0.3141592653589793E1) = ~2.428308113 +pow (~0.2718281828459045E1, ~0.3141592653589793E1) = nan +atan2 (~0.2718281828459045E1, ~0.2718281828459045E1) = ~2.35619449 +pow (~0.2718281828459045E1, ~0.2718281828459045E1) = nan +atan2 (~0.2718281828459045E1, ~0.123E1) = ~1.99572043 +pow (~0.2718281828459045E1, ~0.123E1) = nan +atan2 (~0.2718281828459045E1, ~0.123) = ~1.616014654 +pow (~0.2718281828459045E1, ~0.123) = nan +atan2 (~0.2718281828459045E1, ~0.123E~2) = ~1.571248818 +pow (~0.2718281828459045E1, ~0.123E~2) = nan +atan2 (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.22250738585072014E~307) = nan +atan2 (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.11125369292536007E~307) = nan +atan2 (~0.2718281828459045E1, ~0.5E~323) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.5E~323) = nan +atan2 (~0.2718281828459045E1, ~0.0) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.0) = 1 +atan2 (~0.2718281828459045E1, inf) = 0 +pow (~0.2718281828459045E1, inf) = inf +atan2 (~0.2718281828459045E1, ~inf) = ~3.141592654 +pow (~0.2718281828459045E1, ~inf) = 0 +atan2 (~0.2718281828459045E1, nan) = nan +pow (~0.2718281828459045E1, nan) = nan +atan2 (~0.2718281828459045E1, inf) = 0 +pow (~0.2718281828459045E1, inf) = inf +atan2 (~0.123E1, 0.17976931348623157E309) = ~6.842102115E~309 +pow (~0.123E1, 0.17976931348623157E309) = inf +atan2 (~0.123E1, 0.8988465674311579E308) = ~1.368420423E~308 +pow (~0.123E1, 0.8988465674311579E308) = inf +atan2 (~0.123E1, 0.123E4) = ~9.999996667E~4 +pow (~0.123E1, 0.123E4) = 3.830778757E110 +atan2 (~0.123E1, 0.123E2) = ~0.09966865249 +pow (~0.123E1, 0.123E2) = nan +atan2 (~0.123E1, 0.3141592653589793E1) = ~0.3731757303 +pow (~0.123E1, 0.3141592653589793E1) = nan +atan2 (~0.123E1, 0.2718281828459045E1) = ~0.4249241031 +pow (~0.123E1, 0.2718281828459045E1) = nan +atan2 (~0.123E1, 0.123E1) = ~0.7853981634 +pow (~0.123E1, 0.123E1) = nan +atan2 (~0.123E1, 0.123) = ~1.471127674 +pow (~0.123E1, 0.123) = nan +atan2 (~0.123E1, 0.123E~2) = ~1.569796327 +pow (~0.123E1, 0.123E~2) = nan +atan2 (~0.123E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E1, 0.22250738585072014E~307) = nan +atan2 (~0.123E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E1, 0.11125369292536007E~307) = nan +atan2 (~0.123E1, 0.5E~323) = ~1.570796327 +pow (~0.123E1, 0.5E~323) = nan +atan2 (~0.123E1, 0.0) = ~1.570796327 +pow (~0.123E1, 0.0) = 1 +atan2 (~0.123E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E1, ~0.17976931348623157E309) = 0 +atan2 (~0.123E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E1, ~0.8988465674311579E308) = 0 +atan2 (~0.123E1, ~0.123E4) = ~3.140592654 +pow (~0.123E1, ~0.123E4) = 2.610435275E~111 +atan2 (~0.123E1, ~0.123E2) = ~3.041924001 +pow (~0.123E1, ~0.123E2) = nan +atan2 (~0.123E1, ~0.3141592653589793E1) = ~2.768416923 +pow (~0.123E1, ~0.3141592653589793E1) = nan +atan2 (~0.123E1, ~0.2718281828459045E1) = ~2.71666855 +pow (~0.123E1, ~0.2718281828459045E1) = nan +atan2 (~0.123E1, ~0.123E1) = ~2.35619449 +pow (~0.123E1, ~0.123E1) = nan +atan2 (~0.123E1, ~0.123) = ~1.670464979 +pow (~0.123E1, ~0.123) = nan +atan2 (~0.123E1, ~0.123E~2) = ~1.571796326 +pow (~0.123E1, ~0.123E~2) = nan +atan2 (~0.123E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E1, ~0.22250738585072014E~307) = nan +atan2 (~0.123E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E1, ~0.11125369292536007E~307) = nan +atan2 (~0.123E1, ~0.5E~323) = ~1.570796327 +pow (~0.123E1, ~0.5E~323) = nan +atan2 (~0.123E1, ~0.0) = ~1.570796327 +pow (~0.123E1, ~0.0) = 1 +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123E1, ~inf) = ~3.141592654 +pow (~0.123E1, ~inf) = 0 +atan2 (~0.123E1, nan) = nan +pow (~0.123E1, nan) = nan +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123, 0.17976931348623157E309) = ~6.842102115E~310 +pow (~0.123, 0.17976931348623157E309) = 0 +atan2 (~0.123, 0.8988465674311579E308) = ~1.368420423E~309 +pow (~0.123, 0.8988465674311579E308) = 0 +atan2 (~0.123, 0.123E4) = ~9.999999967E~5 +pow (~0.123, 0.123E4) = 0 +atan2 (~0.123, 0.123E2) = ~0.009999666687 +pow (~0.123, 0.123E2) = nan +atan2 (~0.123, 0.3141592653589793E1) = ~0.03913212911 +pow (~0.123, 0.3141592653589793E1) = nan +atan2 (~0.123, 0.2718281828459045E1) = ~0.04521832678 +pow (~0.123, 0.2718281828459045E1) = nan +atan2 (~0.123, 0.123E1) = ~0.09966865249 +pow (~0.123, 0.123E1) = nan +atan2 (~0.123, 0.123) = ~0.7853981634 +pow (~0.123, 0.123) = nan +atan2 (~0.123, 0.123E~2) = ~1.56079666 +pow (~0.123, 0.123E~2) = nan +atan2 (~0.123, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123, 0.22250738585072014E~307) = nan +atan2 (~0.123, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123, 0.11125369292536007E~307) = nan +atan2 (~0.123, 0.5E~323) = ~1.570796327 +pow (~0.123, 0.5E~323) = nan +atan2 (~0.123, 0.0) = ~1.570796327 +pow (~0.123, 0.0) = 1 +atan2 (~0.123, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123, ~0.17976931348623157E309) = inf +atan2 (~0.123, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123, ~0.8988465674311579E308) = inf +atan2 (~0.123, ~0.123E4) = ~3.141492654 +pow (~0.123, ~0.123E4) = inf +atan2 (~0.123, ~0.123E2) = ~3.131592987 +pow (~0.123, ~0.123E2) = nan +atan2 (~0.123, ~0.3141592653589793E1) = ~3.102460524 +pow (~0.123, ~0.3141592653589793E1) = nan +atan2 (~0.123, ~0.2718281828459045E1) = ~3.096374327 +pow (~0.123, ~0.2718281828459045E1) = nan +atan2 (~0.123, ~0.123E1) = ~3.041924001 +pow (~0.123, ~0.123E1) = nan +atan2 (~0.123, ~0.123) = ~2.35619449 +pow (~0.123, ~0.123) = nan +atan2 (~0.123, ~0.123E~2) = ~1.580795993 +pow (~0.123, ~0.123E~2) = nan +atan2 (~0.123, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123, ~0.22250738585072014E~307) = nan +atan2 (~0.123, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123, ~0.11125369292536007E~307) = nan +atan2 (~0.123, ~0.5E~323) = ~1.570796327 +pow (~0.123, ~0.5E~323) = nan +atan2 (~0.123, ~0.0) = ~1.570796327 +pow (~0.123, ~0.0) = 1 +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123, ~inf) = ~3.141592654 +pow (~0.123, ~inf) = inf +atan2 (~0.123, nan) = nan +pow (~0.123, nan) = nan +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123E~2, 0.17976931348623157E309) = ~6.842102115E~312 +pow (~0.123E~2, 0.17976931348623157E309) = 0 +atan2 (~0.123E~2, 0.8988465674311579E308) = ~1.368420423E~311 +pow (~0.123E~2, 0.8988465674311579E308) = 0 +atan2 (~0.123E~2, 0.123E4) = ~1E~6 +pow (~0.123E~2, 0.123E4) = 0 +atan2 (~0.123E~2, 0.123E2) = ~9.999999967E~5 +pow (~0.123E~2, 0.123E2) = nan +atan2 (~0.123E~2, 0.3141592653589793E1) = ~3.9152114E~4 +pow (~0.123E~2, 0.3141592653589793E1) = nan +atan2 (~0.123E~2, 0.2718281828459045E1) = ~4.524916818E~4 +pow (~0.123E~2, 0.2718281828459045E1) = nan +atan2 (~0.123E~2, 0.123E1) = ~9.999996667E~4 +pow (~0.123E~2, 0.123E1) = nan +atan2 (~0.123E~2, 0.123) = ~0.009999666687 +pow (~0.123E~2, 0.123) = nan +atan2 (~0.123E~2, 0.123E~2) = ~0.7853981634 +pow (~0.123E~2, 0.123E~2) = nan +atan2 (~0.123E~2, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E~2, 0.22250738585072014E~307) = nan +atan2 (~0.123E~2, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E~2, 0.11125369292536007E~307) = nan +atan2 (~0.123E~2, 0.5E~323) = ~1.570796327 +pow (~0.123E~2, 0.5E~323) = nan +atan2 (~0.123E~2, 0.0) = ~1.570796327 +pow (~0.123E~2, 0.0) = 1 +atan2 (~0.123E~2, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E~2, ~0.17976931348623157E309) = inf +atan2 (~0.123E~2, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E~2, ~0.8988465674311579E308) = inf +atan2 (~0.123E~2, ~0.123E4) = ~3.141591654 +pow (~0.123E~2, ~0.123E4) = inf +atan2 (~0.123E~2, ~0.123E2) = ~3.141492654 +pow (~0.123E~2, ~0.123E2) = nan +atan2 (~0.123E~2, ~0.3141592653589793E1) = ~3.141201132 +pow (~0.123E~2, ~0.3141592653589793E1) = nan +atan2 (~0.123E~2, ~0.2718281828459045E1) = ~3.141140162 +pow (~0.123E~2, ~0.2718281828459045E1) = nan +atan2 (~0.123E~2, ~0.123E1) = ~3.140592654 +pow (~0.123E~2, ~0.123E1) = nan +atan2 (~0.123E~2, ~0.123) = ~3.131592987 +pow (~0.123E~2, ~0.123) = nan +atan2 (~0.123E~2, ~0.123E~2) = ~2.35619449 +pow (~0.123E~2, ~0.123E~2) = nan +atan2 (~0.123E~2, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E~2, ~0.22250738585072014E~307) = nan +atan2 (~0.123E~2, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E~2, ~0.11125369292536007E~307) = nan +atan2 (~0.123E~2, ~0.5E~323) = ~1.570796327 +pow (~0.123E~2, ~0.5E~323) = nan +atan2 (~0.123E~2, ~0.0) = ~1.570796327 +pow (~0.123E~2, ~0.0) = 1 +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.123E~2, ~inf) = ~3.141592654 +pow (~0.123E~2, ~inf) = inf +atan2 (~0.123E~2, nan) = nan +pow (~0.123E~2, nan) = nan +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.22250738585072014E~307, 0.17976931348623157E309) = 0 +pow (~0.22250738585072014E~307, 0.17976931348623157E309) = 0 +atan2 (~0.22250738585072014E~307, 0.8988465674311579E308) = 0 +pow (~0.22250738585072014E~307, 0.8988465674311579E308) = 0 +atan2 (~0.22250738585072014E~307, 0.123E4) = ~1.809003137E~311 +pow (~0.22250738585072014E~307, 0.123E4) = 0 +atan2 (~0.22250738585072014E~307, 0.123E2) = ~1.809003137E~309 +pow (~0.22250738585072014E~307, 0.123E2) = nan +atan2 (~0.22250738585072014E~307, 0.3141592653589793E1) = ~7.082630067E~309 +pow (~0.22250738585072014E~307, 0.3141592653589793E1) = nan +atan2 (~0.22250738585072014E~307, 0.2718281828459045E1) = ~8.185589276E~309 +pow (~0.22250738585072014E~307, 0.2718281828459045E1) = nan +atan2 (~0.22250738585072014E~307, 0.123E1) = ~1.809003137E~308 +pow (~0.22250738585072014E~307, 0.123E1) = nan +atan2 (~0.22250738585072014E~307, 0.123) = ~1.809003137E~307 +pow (~0.22250738585072014E~307, 0.123) = nan +atan2 (~0.22250738585072014E~307, 0.123E~2) = ~1.809003137E~305 +pow (~0.22250738585072014E~307, 0.123E~2) = nan +atan2 (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.7853981634 +pow (~0.22250738585072014E~307, 0.22250738585072014E~307) = nan +atan2 (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~1.107148718 +pow (~0.22250738585072014E~307, 0.11125369292536007E~307) = nan +atan2 (~0.22250738585072014E~307, 0.5E~323) = ~1.570796327 +pow (~0.22250738585072014E~307, 0.5E~323) = nan +atan2 (~0.22250738585072014E~307, 0.0) = ~1.570796327 +pow (~0.22250738585072014E~307, 0.0) = 1 +atan2 (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.17976931348623157E309) = inf +atan2 (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.8988465674311579E308) = inf +atan2 (~0.22250738585072014E~307, ~0.123E4) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E4) = inf +atan2 (~0.22250738585072014E~307, ~0.123E2) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E2) = nan +atan2 (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.3141592653589793E1) = nan +atan2 (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.2718281828459045E1) = nan +atan2 (~0.22250738585072014E~307, ~0.123E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E1) = nan +atan2 (~0.22250738585072014E~307, ~0.123) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123) = nan +atan2 (~0.22250738585072014E~307, ~0.123E~2) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E~2) = nan +atan2 (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~2.35619449 +pow (~0.22250738585072014E~307, ~0.22250738585072014E~307) = nan +atan2 (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~2.034443936 +pow (~0.22250738585072014E~307, ~0.11125369292536007E~307) = nan +atan2 (~0.22250738585072014E~307, ~0.5E~323) = ~1.570796327 +pow (~0.22250738585072014E~307, ~0.5E~323) = nan +atan2 (~0.22250738585072014E~307, ~0.0) = ~1.570796327 +pow (~0.22250738585072014E~307, ~0.0) = 1 +atan2 (~0.22250738585072014E~307, inf) = 0 +pow (~0.22250738585072014E~307, inf) = 0 +atan2 (~0.22250738585072014E~307, ~inf) = ~3.141592654 +pow (~0.22250738585072014E~307, ~inf) = inf +atan2 (~0.22250738585072014E~307, nan) = nan +pow (~0.22250738585072014E~307, nan) = nan +atan2 (~0.22250738585072014E~307, inf) = 0 +pow (~0.22250738585072014E~307, inf) = 0 +atan2 (~0.11125369292536007E~307, 0.17976931348623157E309) = 0 +pow (~0.11125369292536007E~307, 0.17976931348623157E309) = 0 +atan2 (~0.11125369292536007E~307, 0.8988465674311579E308) = 0 +pow (~0.11125369292536007E~307, 0.8988465674311579E308) = 0 +atan2 (~0.11125369292536007E~307, 0.123E4) = ~9.045015685E~312 +pow (~0.11125369292536007E~307, 0.123E4) = 0 +atan2 (~0.11125369292536007E~307, 0.123E2) = ~9.045015685E~310 +pow (~0.11125369292536007E~307, 0.123E2) = nan +atan2 (~0.11125369292536007E~307, 0.3141592653589793E1) = ~3.541315033E~309 +pow (~0.11125369292536007E~307, 0.3141592653589793E1) = nan +atan2 (~0.11125369292536007E~307, 0.2718281828459045E1) = ~4.092794638E~309 +pow (~0.11125369292536007E~307, 0.2718281828459045E1) = nan +atan2 (~0.11125369292536007E~307, 0.123E1) = ~9.045015685E~309 +pow (~0.11125369292536007E~307, 0.123E1) = nan +atan2 (~0.11125369292536007E~307, 0.123) = ~9.045015685E~308 +pow (~0.11125369292536007E~307, 0.123) = nan +atan2 (~0.11125369292536007E~307, 0.123E~2) = ~9.045015685E~306 +pow (~0.11125369292536007E~307, 0.123E~2) = nan +atan2 (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.463647609 +pow (~0.11125369292536007E~307, 0.22250738585072014E~307) = nan +atan2 (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.7853981634 +pow (~0.11125369292536007E~307, 0.11125369292536007E~307) = nan +atan2 (~0.11125369292536007E~307, 0.5E~323) = ~1.570796327 +pow (~0.11125369292536007E~307, 0.5E~323) = nan +atan2 (~0.11125369292536007E~307, 0.0) = ~1.570796327 +pow (~0.11125369292536007E~307, 0.0) = 1 +atan2 (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.17976931348623157E309) = inf +atan2 (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.8988465674311579E308) = inf +atan2 (~0.11125369292536007E~307, ~0.123E4) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E4) = inf +atan2 (~0.11125369292536007E~307, ~0.123E2) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E2) = nan +atan2 (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.3141592653589793E1) = nan +atan2 (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.2718281828459045E1) = nan +atan2 (~0.11125369292536007E~307, ~0.123E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E1) = nan +atan2 (~0.11125369292536007E~307, ~0.123) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123) = nan +atan2 (~0.11125369292536007E~307, ~0.123E~2) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E~2) = nan +atan2 (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~2.677945045 +pow (~0.11125369292536007E~307, ~0.22250738585072014E~307) = nan +atan2 (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~2.35619449 +pow (~0.11125369292536007E~307, ~0.11125369292536007E~307) = nan +atan2 (~0.11125369292536007E~307, ~0.5E~323) = ~1.570796327 +pow (~0.11125369292536007E~307, ~0.5E~323) = nan +atan2 (~0.11125369292536007E~307, ~0.0) = ~1.570796327 +pow (~0.11125369292536007E~307, ~0.0) = 1 +atan2 (~0.11125369292536007E~307, inf) = 0 +pow (~0.11125369292536007E~307, inf) = 0 +atan2 (~0.11125369292536007E~307, ~inf) = ~3.141592654 +pow (~0.11125369292536007E~307, ~inf) = inf +atan2 (~0.11125369292536007E~307, nan) = nan +pow (~0.11125369292536007E~307, nan) = nan +atan2 (~0.11125369292536007E~307, inf) = 0 +pow (~0.11125369292536007E~307, inf) = 0 +atan2 (~0.5E~323, 0.17976931348623157E309) = 0 +pow (~0.5E~323, 0.17976931348623157E309) = 0 +atan2 (~0.5E~323, 0.8988465674311579E308) = 0 +pow (~0.5E~323, 0.8988465674311579E308) = 0 +atan2 (~0.5E~323, 0.123E4) = 0 +pow (~0.5E~323, 0.123E4) = 0 +atan2 (~0.5E~323, 0.123E2) = 0 +pow (~0.5E~323, 0.123E2) = nan +atan2 (~0.5E~323, 0.3141592653589793E1) = 0 +pow (~0.5E~323, 0.3141592653589793E1) = nan +atan2 (~0.5E~323, 0.2718281828459045E1) = 0 +pow (~0.5E~323, 0.2718281828459045E1) = nan +atan2 (~0.5E~323, 0.123E1) = ~4.940656458E~324 +pow (~0.5E~323, 0.123E1) = nan +atan2 (~0.5E~323, 0.123) = ~3.952525167E~323 +pow (~0.5E~323, 0.123) = nan +atan2 (~0.5E~323, 0.123E~2) = ~4.016753701E~321 +pow (~0.5E~323, 0.123E~2) = nan +atan2 (~0.5E~323, 0.22250738585072014E~307) = ~2.220446049E~16 +pow (~0.5E~323, 0.22250738585072014E~307) = nan +atan2 (~0.5E~323, 0.11125369292536007E~307) = ~4.440892099E~16 +pow (~0.5E~323, 0.11125369292536007E~307) = nan +atan2 (~0.5E~323, 0.5E~323) = ~0.7853981634 +pow (~0.5E~323, 0.5E~323) = nan +atan2 (~0.5E~323, 0.0) = ~1.570796327 +pow (~0.5E~323, 0.0) = 1 +atan2 (~0.5E~323, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.5E~323, ~0.17976931348623157E309) = inf +atan2 (~0.5E~323, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.5E~323, ~0.8988465674311579E308) = inf +atan2 (~0.5E~323, ~0.123E4) = ~3.141592654 +pow (~0.5E~323, ~0.123E4) = inf +atan2 (~0.5E~323, ~0.123E2) = ~3.141592654 +pow (~0.5E~323, ~0.123E2) = nan +atan2 (~0.5E~323, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.5E~323, ~0.3141592653589793E1) = nan +atan2 (~0.5E~323, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.5E~323, ~0.2718281828459045E1) = nan +atan2 (~0.5E~323, ~0.123E1) = ~3.141592654 +pow (~0.5E~323, ~0.123E1) = nan +atan2 (~0.5E~323, ~0.123) = ~3.141592654 +pow (~0.5E~323, ~0.123) = nan +atan2 (~0.5E~323, ~0.123E~2) = ~3.141592654 +pow (~0.5E~323, ~0.123E~2) = nan +atan2 (~0.5E~323, ~0.22250738585072014E~307) = ~3.141592654 +pow (~0.5E~323, ~0.22250738585072014E~307) = nan +atan2 (~0.5E~323, ~0.11125369292536007E~307) = ~3.141592654 +pow (~0.5E~323, ~0.11125369292536007E~307) = nan +atan2 (~0.5E~323, ~0.5E~323) = ~2.35619449 +pow (~0.5E~323, ~0.5E~323) = nan +atan2 (~0.5E~323, ~0.0) = ~1.570796327 +pow (~0.5E~323, ~0.0) = 1 +atan2 (~0.5E~323, inf) = 0 +pow (~0.5E~323, inf) = 0 +atan2 (~0.5E~323, ~inf) = ~3.141592654 +pow (~0.5E~323, ~inf) = inf +atan2 (~0.5E~323, nan) = nan +pow (~0.5E~323, nan) = nan +atan2 (~0.5E~323, inf) = 0 +pow (~0.5E~323, inf) = 0 +atan2 (~0.0, 0.17976931348623157E309) = 0 +pow (~0.0, 0.17976931348623157E309) = 0 +atan2 (~0.0, 0.8988465674311579E308) = 0 +pow (~0.0, 0.8988465674311579E308) = 0 +atan2 (~0.0, 0.123E4) = 0 +pow (~0.0, 0.123E4) = 0 +atan2 (~0.0, 0.123E2) = 0 +pow (~0.0, 0.123E2) = 0 +atan2 (~0.0, 0.3141592653589793E1) = 0 +pow (~0.0, 0.3141592653589793E1) = 0 +atan2 (~0.0, 0.2718281828459045E1) = 0 +pow (~0.0, 0.2718281828459045E1) = 0 +atan2 (~0.0, 0.123E1) = 0 +pow (~0.0, 0.123E1) = 0 +atan2 (~0.0, 0.123) = 0 +pow (~0.0, 0.123) = 0 +atan2 (~0.0, 0.123E~2) = 0 +pow (~0.0, 0.123E~2) = 0 +atan2 (~0.0, 0.22250738585072014E~307) = 0 +pow (~0.0, 0.22250738585072014E~307) = 0 +atan2 (~0.0, 0.11125369292536007E~307) = 0 +pow (~0.0, 0.11125369292536007E~307) = 0 +atan2 (~0.0, 0.5E~323) = 0 +pow (~0.0, 0.5E~323) = 0 +atan2 (~0.0, 0.0) = 0 +pow (~0.0, 0.0) = 1 +atan2 (~0.0, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.0, ~0.17976931348623157E309) = inf +atan2 (~0.0, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.0, ~0.8988465674311579E308) = inf +atan2 (~0.0, ~0.123E4) = ~3.141592654 +pow (~0.0, ~0.123E4) = inf +atan2 (~0.0, ~0.123E2) = ~3.141592654 +pow (~0.0, ~0.123E2) = inf +atan2 (~0.0, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.0, ~0.3141592653589793E1) = inf +atan2 (~0.0, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.0, ~0.2718281828459045E1) = inf +atan2 (~0.0, ~0.123E1) = ~3.141592654 +pow (~0.0, ~0.123E1) = inf +atan2 (~0.0, ~0.123) = ~3.141592654 +pow (~0.0, ~0.123) = inf +atan2 (~0.0, ~0.123E~2) = ~3.141592654 +pow (~0.0, ~0.123E~2) = inf +atan2 (~0.0, ~0.22250738585072014E~307) = ~3.141592654 +pow (~0.0, ~0.22250738585072014E~307) = inf +atan2 (~0.0, ~0.11125369292536007E~307) = ~3.141592654 +pow (~0.0, ~0.11125369292536007E~307) = inf +atan2 (~0.0, ~0.5E~323) = ~3.141592654 +pow (~0.0, ~0.5E~323) = inf +atan2 (~0.0, ~0.0) = ~3.141592654 +pow (~0.0, ~0.0) = 1 +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (~0.0, ~inf) = ~3.141592654 +pow (~0.0, ~inf) = inf +atan2 (~0.0, nan) = nan +pow (~0.0, nan) = nan +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (inf, 0.17976931348623157E309) = 1.570796327 +pow (inf, 0.17976931348623157E309) = inf +atan2 (inf, 0.8988465674311579E308) = 1.570796327 +pow (inf, 0.8988465674311579E308) = inf +atan2 (inf, 0.123E4) = 1.570796327 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796327 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.3141592653589793E1) = 1.570796327 +pow (inf, 0.3141592653589793E1) = inf +atan2 (inf, 0.2718281828459045E1) = 1.570796327 +pow (inf, 0.2718281828459045E1) = inf +atan2 (inf, 0.123E1) = 1.570796327 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796327 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796327 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.22250738585072014E~307) = 1.570796327 +pow (inf, 0.22250738585072014E~307) = inf +atan2 (inf, 0.11125369292536007E~307) = 1.570796327 +pow (inf, 0.11125369292536007E~307) = inf +atan2 (inf, 0.5E~323) = 1.570796327 +pow (inf, 0.5E~323) = inf +atan2 (inf, 0.0) = 1.570796327 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.17976931348623157E309) = 1.570796327 +pow (inf, ~0.17976931348623157E309) = 0 +atan2 (inf, ~0.8988465674311579E308) = 1.570796327 +pow (inf, ~0.8988465674311579E308) = 0 +atan2 (inf, ~0.123E4) = 1.570796327 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796327 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.3141592653589793E1) = 1.570796327 +pow (inf, ~0.3141592653589793E1) = 0 +atan2 (inf, ~0.2718281828459045E1) = 1.570796327 +pow (inf, ~0.2718281828459045E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796327 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796327 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796327 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.22250738585072014E~307) = 1.570796327 +pow (inf, ~0.22250738585072014E~307) = 0 +atan2 (inf, ~0.11125369292536007E~307) = 1.570796327 +pow (inf, ~0.11125369292536007E~307) = 0 +atan2 (inf, ~0.5E~323) = 1.570796327 +pow (inf, ~0.5E~323) = 0 +atan2 (inf, ~0.0) = 1.570796327 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.35619449 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (~inf, 0.17976931348623157E309) = ~1.570796327 +pow (~inf, 0.17976931348623157E309) = inf +atan2 (~inf, 0.8988465674311579E308) = ~1.570796327 +pow (~inf, 0.8988465674311579E308) = inf +atan2 (~inf, 0.123E4) = ~1.570796327 +pow (~inf, 0.123E4) = inf +atan2 (~inf, 0.123E2) = ~1.570796327 +pow (~inf, 0.123E2) = inf +atan2 (~inf, 0.3141592653589793E1) = ~1.570796327 +pow (~inf, 0.3141592653589793E1) = inf +atan2 (~inf, 0.2718281828459045E1) = ~1.570796327 +pow (~inf, 0.2718281828459045E1) = inf +atan2 (~inf, 0.123E1) = ~1.570796327 +pow (~inf, 0.123E1) = inf +atan2 (~inf, 0.123) = ~1.570796327 +pow (~inf, 0.123) = inf +atan2 (~inf, 0.123E~2) = ~1.570796327 +pow (~inf, 0.123E~2) = inf +atan2 (~inf, 0.22250738585072014E~307) = ~1.570796327 +pow (~inf, 0.22250738585072014E~307) = inf +atan2 (~inf, 0.11125369292536007E~307) = ~1.570796327 +pow (~inf, 0.11125369292536007E~307) = inf +atan2 (~inf, 0.5E~323) = ~1.570796327 +pow (~inf, 0.5E~323) = inf +atan2 (~inf, 0.0) = ~1.570796327 +pow (~inf, 0.0) = 1 +atan2 (~inf, ~0.17976931348623157E309) = ~1.570796327 +pow (~inf, ~0.17976931348623157E309) = 0 +atan2 (~inf, ~0.8988465674311579E308) = ~1.570796327 +pow (~inf, ~0.8988465674311579E308) = 0 +atan2 (~inf, ~0.123E4) = ~1.570796327 +pow (~inf, ~0.123E4) = 0 +atan2 (~inf, ~0.123E2) = ~1.570796327 +pow (~inf, ~0.123E2) = 0 +atan2 (~inf, ~0.3141592653589793E1) = ~1.570796327 +pow (~inf, ~0.3141592653589793E1) = 0 +atan2 (~inf, ~0.2718281828459045E1) = ~1.570796327 +pow (~inf, ~0.2718281828459045E1) = 0 +atan2 (~inf, ~0.123E1) = ~1.570796327 +pow (~inf, ~0.123E1) = 0 +atan2 (~inf, ~0.123) = ~1.570796327 +pow (~inf, ~0.123) = 0 +atan2 (~inf, ~0.123E~2) = ~1.570796327 +pow (~inf, ~0.123E~2) = 0 +atan2 (~inf, ~0.22250738585072014E~307) = ~1.570796327 +pow (~inf, ~0.22250738585072014E~307) = 0 +atan2 (~inf, ~0.11125369292536007E~307) = ~1.570796327 +pow (~inf, ~0.11125369292536007E~307) = 0 +atan2 (~inf, ~0.5E~323) = ~1.570796327 +pow (~inf, ~0.5E~323) = 0 +atan2 (~inf, ~0.0) = ~1.570796327 +pow (~inf, ~0.0) = 1 +atan2 (~inf, inf) = ~0.7853981634 +pow (~inf, inf) = inf +atan2 (~inf, ~inf) = ~2.35619449 +pow (~inf, ~inf) = 0 +atan2 (~inf, nan) = nan +pow (~inf, nan) = nan +atan2 (~inf, inf) = ~0.7853981634 +pow (~inf, inf) = inf +atan2 (nan, 0.17976931348623157E309) = nan +pow (nan, 0.17976931348623157E309) = nan +atan2 (nan, 0.8988465674311579E308) = nan +pow (nan, 0.8988465674311579E308) = nan +atan2 (nan, 0.123E4) = nan +pow (nan, 0.123E4) = nan +atan2 (nan, 0.123E2) = nan +pow (nan, 0.123E2) = nan +atan2 (nan, 0.3141592653589793E1) = nan +pow (nan, 0.3141592653589793E1) = nan +atan2 (nan, 0.2718281828459045E1) = nan +pow (nan, 0.2718281828459045E1) = nan +atan2 (nan, 0.123E1) = nan +pow (nan, 0.123E1) = nan +atan2 (nan, 0.123) = nan +pow (nan, 0.123) = nan +atan2 (nan, 0.123E~2) = nan +pow (nan, 0.123E~2) = nan +atan2 (nan, 0.22250738585072014E~307) = nan +pow (nan, 0.22250738585072014E~307) = nan +atan2 (nan, 0.11125369292536007E~307) = nan +pow (nan, 0.11125369292536007E~307) = nan +atan2 (nan, 0.5E~323) = nan +pow (nan, 0.5E~323) = nan +atan2 (nan, 0.0) = nan +pow (nan, 0.0) = 1 +atan2 (nan, ~0.17976931348623157E309) = nan +pow (nan, ~0.17976931348623157E309) = nan +atan2 (nan, ~0.8988465674311579E308) = nan +pow (nan, ~0.8988465674311579E308) = nan +atan2 (nan, ~0.123E4) = nan +pow (nan, ~0.123E4) = nan +atan2 (nan, ~0.123E2) = nan +pow (nan, ~0.123E2) = nan +atan2 (nan, ~0.3141592653589793E1) = nan +pow (nan, ~0.3141592653589793E1) = nan +atan2 (nan, ~0.2718281828459045E1) = nan +pow (nan, ~0.2718281828459045E1) = nan +atan2 (nan, ~0.123E1) = nan +pow (nan, ~0.123E1) = nan +atan2 (nan, ~0.123) = nan +pow (nan, ~0.123) = nan +atan2 (nan, ~0.123E~2) = nan +pow (nan, ~0.123E~2) = nan +atan2 (nan, ~0.22250738585072014E~307) = nan +pow (nan, ~0.22250738585072014E~307) = nan +atan2 (nan, ~0.11125369292536007E~307) = nan +pow (nan, ~0.11125369292536007E~307) = nan +atan2 (nan, ~0.5E~323) = nan +pow (nan, ~0.5E~323) = nan +atan2 (nan, ~0.0) = nan +pow (nan, ~0.0) = 1 +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (nan, ~inf) = nan +pow (nan, ~inf) = nan +atan2 (nan, nan) = nan +pow (nan, nan) = nan +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (inf, 0.17976931348623157E309) = 1.570796327 +pow (inf, 0.17976931348623157E309) = inf +atan2 (inf, 0.8988465674311579E308) = 1.570796327 +pow (inf, 0.8988465674311579E308) = inf +atan2 (inf, 0.123E4) = 1.570796327 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796327 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.3141592653589793E1) = 1.570796327 +pow (inf, 0.3141592653589793E1) = inf +atan2 (inf, 0.2718281828459045E1) = 1.570796327 +pow (inf, 0.2718281828459045E1) = inf +atan2 (inf, 0.123E1) = 1.570796327 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796327 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796327 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.22250738585072014E~307) = 1.570796327 +pow (inf, 0.22250738585072014E~307) = inf +atan2 (inf, 0.11125369292536007E~307) = 1.570796327 +pow (inf, 0.11125369292536007E~307) = inf +atan2 (inf, 0.5E~323) = 1.570796327 +pow (inf, 0.5E~323) = inf +atan2 (inf, 0.0) = 1.570796327 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.17976931348623157E309) = 1.570796327 +pow (inf, ~0.17976931348623157E309) = 0 +atan2 (inf, ~0.8988465674311579E308) = 1.570796327 +pow (inf, ~0.8988465674311579E308) = 0 +atan2 (inf, ~0.123E4) = 1.570796327 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796327 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.3141592653589793E1) = 1.570796327 +pow (inf, ~0.3141592653589793E1) = 0 +atan2 (inf, ~0.2718281828459045E1) = 1.570796327 +pow (inf, ~0.2718281828459045E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796327 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796327 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796327 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.22250738585072014E~307) = 1.570796327 +pow (inf, ~0.22250738585072014E~307) = 0 +atan2 (inf, ~0.11125369292536007E~307) = 1.570796327 +pow (inf, ~0.11125369292536007E~307) = 0 +atan2 (inf, ~0.5E~323) = 1.570796327 +pow (inf, ~0.5E~323) = 0 +atan2 (inf, ~0.0) = 1.570796327 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.35619449 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf + +Testing *+, *- +SOME *+ AND STANDARD RESULTS DIFFER +(r1, r2, r3): *+(r1, r2, r3) (r1 * r2 + r3) +-------------------------------------------- +(0.17976931348623157E309, 0.123E1, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(0.17976931348623157E309, 0.123E1, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(0.17976931348623157E309, ~0.123E1, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(0.17976931348623157E309, ~0.123E1, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(0.8988465674311579E308, 0.123E1, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(0.8988465674311579E308, 0.123E1, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(0.8988465674311579E308, ~0.3141592653589793E1, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(0.8988465674311579E308, ~0.123E1, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(0.8988465674311579E308, ~0.123E1, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(0.123E4, 0.123E2, 0.123E2): 0.15141300000000001E5 0.151413E5 +(0.123E4, 0.123E2, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(0.123E4, 0.123E2, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(0.123E4, 0.123E2, 0.123): 0.15129123000000001E5 0.15129123E5 +(0.123E4, 0.123E2, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(0.123E4, 0.123E2, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(0.123E4, 0.3141592653589793E1, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(0.123E4, 0.3141592653589793E1, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(0.123E4, 0.3141592653589793E1, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(0.123E4, 0.2718281828459045E1, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(0.123E4, 0.2718281828459045E1, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(0.123E4, 0.2718281828459045E1, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(0.123E4, 0.2718281828459045E1, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(0.123E4, 0.2718281828459045E1, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(0.123E4, 0.123E1, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(0.123E4, 0.123E1, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(0.123E4, 0.123E1, 0.123E1): 0.15141299999999999E4 0.151413E4 +(0.123E4, 0.123E1, 0.123): 0.1513023E4 0.15130230000000001E4 +(0.123E4, 0.123E1, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(0.123E4, 0.123E1, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(0.123E4, 0.123E1, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(0.123E4, 0.123, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(0.123E4, 0.123, 0.123E1): 0.15252E3 0.15251999999999998E3 +(0.123E4, 0.123, 0.123): 0.151413E3 0.15141299999999998E3 +(0.123E4, 0.123, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(0.123E4, 0.123, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(0.123E4, 0.123E~2, 0.123E1): 0.27429E1 0.27428999999999997E1 +(0.123E4, 0.123E~2, ~0.123E1): 0.2829 0.28289999999999993 +(0.123E4, 0.123E~2, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(0.123E4, ~0.123E2, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(0.123E4, ~0.123E2, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(0.123E4, ~0.123E2, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(0.123E4, ~0.123E2, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(0.123E4, ~0.123E2, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(0.123E4, ~0.123E2, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(0.123E4, ~0.3141592653589793E1, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(0.123E4, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(0.123E4, ~0.3141592653589793E1, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(0.123E4, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(0.123E4, ~0.2718281828459045E1, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(0.123E4, ~0.2718281828459045E1, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(0.123E4, ~0.2718281828459045E1, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(0.123E4, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(0.123E4, ~0.123E1, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(0.123E4, ~0.123E1, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(0.123E4, ~0.123E1, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(0.123E4, ~0.123E1, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(0.123E4, ~0.123E1, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(0.123E4, ~0.123E1, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(0.123E4, ~0.123E1, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(0.123E4, ~0.123, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(0.123E4, ~0.123, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(0.123E4, ~0.123, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(0.123E4, ~0.123, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(0.123E4, ~0.123, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(0.123E4, ~0.123E~2, 0.123E1): ~0.2829 ~0.28289999999999993 +(0.123E4, ~0.123E~2, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(0.123E4, ~0.123E~2, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(0.123E2, 0.123E4, 0.123E2): 0.15141300000000001E5 0.151413E5 +(0.123E2, 0.123E4, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(0.123E2, 0.123E4, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(0.123E2, 0.123E4, 0.123): 0.15129123000000001E5 0.15129123E5 +(0.123E2, 0.123E4, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(0.123E2, 0.123E4, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(0.123E2, 0.3141592653589793E1, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(0.123E2, 0.3141592653589793E1, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(0.123E2, 0.3141592653589793E1, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(0.123E2, 0.3141592653589793E1, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(0.123E2, 0.3141592653589793E1, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(0.123E2, 0.2718281828459045E1, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(0.123E2, 0.2718281828459045E1, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(0.123E2, 0.2718281828459045E1, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(0.123E2, 0.2718281828459045E1, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(0.123E2, 0.2718281828459045E1, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(0.123E2, 0.2718281828459045E1, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(0.123E2, 0.123E1, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(0.123E2, 0.123E1, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(0.123E2, 0.123E1, ~0.123): 0.15006E2 0.15006000000000002E2 +(0.123E2, 0.123E1, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(0.123E2, 0.123, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(0.123E2, 0.123, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(0.123E2, 0.123E~2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(0.123E2, ~0.123E4, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(0.123E2, ~0.123E4, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(0.123E2, ~0.123E4, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(0.123E2, ~0.123E4, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(0.123E2, ~0.123E4, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(0.123E2, ~0.123E4, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(0.123E2, ~0.3141592653589793E1, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(0.123E2, ~0.3141592653589793E1, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(0.123E2, ~0.3141592653589793E1, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(0.123E2, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(0.123E2, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(0.123E2, ~0.2718281828459045E1, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(0.123E2, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(0.123E2, ~0.2718281828459045E1, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(0.123E2, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(0.123E2, ~0.2718281828459045E1, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(0.123E2, ~0.2718281828459045E1, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(0.123E2, ~0.123E1, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(0.123E2, ~0.123E1, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(0.123E2, ~0.123E1, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(0.123E2, ~0.123E1, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(0.123E2, ~0.123, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(0.123E2, ~0.123, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(0.123E2, ~0.123E~2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(0.3141592653589793E1, 0.8988465674311579E308, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(0.3141592653589793E1, 0.123E4, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(0.3141592653589793E1, 0.123E4, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(0.3141592653589793E1, 0.123E4, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(0.3141592653589793E1, 0.123E2, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(0.3141592653589793E1, 0.123E2, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(0.3141592653589793E1, 0.123E2, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(0.3141592653589793E1, 0.123E2, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(0.3141592653589793E1, 0.123E2, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.2718281828459045E1): 0.71513225726303125E1 0.7151322572630313E1 +(0.3141592653589793E1, 0.2718281828459045E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(0.3141592653589793E1, 0.123E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(0.3141592653589793E1, 0.123E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(0.3141592653589793E1, 0.123E~2, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(0.3141592653589793E1, ~0.8988465674311579E308, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(0.3141592653589793E1, ~0.123E4, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(0.3141592653589793E1, ~0.123E4, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(0.3141592653589793E1, ~0.123E4, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(0.3141592653589793E1, ~0.123E2, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(0.3141592653589793E1, ~0.123E2, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(0.3141592653589793E1, ~0.123E2, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(0.3141592653589793E1, ~0.123E2, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(0.3141592653589793E1, ~0.123E2, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.2718281828459045E1): ~0.71513225726303125E1 ~0.7151322572630313E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(0.3141592653589793E1, ~0.123E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(0.3141592653589793E1, ~0.123E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(0.3141592653589793E1, ~0.123E~2, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(0.2718281828459045E1, 0.8988465674311579E308, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(0.2718281828459045E1, 0.123E4, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(0.2718281828459045E1, 0.123E4, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(0.2718281828459045E1, 0.123E4, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(0.2718281828459045E1, 0.123E4, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(0.2718281828459045E1, 0.123E4, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(0.2718281828459045E1, 0.123E2, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(0.2718281828459045E1, 0.123E2, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(0.2718281828459045E1, 0.123E2, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(0.2718281828459045E1, 0.123E2, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(0.2718281828459045E1, 0.123E2, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(0.2718281828459045E1, 0.123E2, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(0.2718281828459045E1, 0.3141592653589793E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.123E1): 0.6159056098930649E1 0.615905609893065E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.123E~2): 0.7387826098930649E1 0.738782609893065E1 +(0.2718281828459045E1, 0.123E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(0.2718281828459045E1, 0.123E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(0.2718281828459045E1, 0.123E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(0.2718281828459045E1, 0.123E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(0.2718281828459045E1, 0.123, ~0.123): 0.21134866490046253 0.21134866490046256 +(0.2718281828459045E1, ~0.8988465674311579E308, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(0.2718281828459045E1, ~0.123E4, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(0.2718281828459045E1, ~0.123E4, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(0.2718281828459045E1, ~0.123E4, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(0.2718281828459045E1, ~0.123E4, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(0.2718281828459045E1, ~0.123E4, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(0.2718281828459045E1, ~0.123E2, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(0.2718281828459045E1, ~0.123E2, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(0.2718281828459045E1, ~0.123E2, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(0.2718281828459045E1, ~0.123E2, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(0.2718281828459045E1, ~0.123E2, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(0.2718281828459045E1, ~0.123E2, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.123E1): ~0.6159056098930649E1 ~0.615905609893065E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.123E~2): ~0.7387826098930649E1 ~0.738782609893065E1 +(0.2718281828459045E1, ~0.123E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(0.2718281828459045E1, ~0.123E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(0.2718281828459045E1, ~0.123E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(0.2718281828459045E1, ~0.123E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(0.2718281828459045E1, ~0.123, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(0.123E1, 0.17976931348623157E309, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(0.123E1, 0.17976931348623157E309, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(0.123E1, 0.8988465674311579E308, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(0.123E1, 0.8988465674311579E308, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(0.123E1, 0.123E4, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(0.123E1, 0.123E4, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(0.123E1, 0.123E4, 0.123E1): 0.15141299999999999E4 0.151413E4 +(0.123E1, 0.123E4, 0.123): 0.1513023E4 0.15130230000000001E4 +(0.123E1, 0.123E4, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(0.123E1, 0.123E4, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(0.123E1, 0.123E4, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(0.123E1, 0.123E2, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(0.123E1, 0.123E2, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(0.123E1, 0.123E2, ~0.123): 0.15006E2 0.15006000000000002E2 +(0.123E1, 0.123E2, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(0.123E1, 0.3141592653589793E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(0.123E1, 0.3141592653589793E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(0.123E1, 0.2718281828459045E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(0.123E1, 0.2718281828459045E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(0.123E1, 0.2718281828459045E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(0.123E1, 0.2718281828459045E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(0.123E1, 0.123E1, 0.123E1): 0.27429E1 0.27428999999999997E1 +(0.123E1, 0.123E1, ~0.123E1): 0.2829 0.28289999999999993 +(0.123E1, 0.123, 0.123): 0.27429 0.27429000000000003 +(0.123E1, 0.123, 0.123E~2): 0.15252 0.15252000000000002 +(0.123E1, 0.123, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(0.123E1, ~0.17976931348623157E309, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(0.123E1, ~0.17976931348623157E309, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(0.123E1, ~0.8988465674311579E308, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(0.123E1, ~0.8988465674311579E308, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(0.123E1, ~0.123E4, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(0.123E1, ~0.123E4, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(0.123E1, ~0.123E4, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(0.123E1, ~0.123E4, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(0.123E1, ~0.123E4, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(0.123E1, ~0.123E4, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(0.123E1, ~0.123E4, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(0.123E1, ~0.123E2, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(0.123E1, ~0.123E2, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(0.123E1, ~0.123E2, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(0.123E1, ~0.123E2, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(0.123E1, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(0.123E1, ~0.3141592653589793E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(0.123E1, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(0.123E1, ~0.2718281828459045E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(0.123E1, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(0.123E1, ~0.2718281828459045E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(0.123E1, ~0.123E1, 0.123E1): ~0.2829 ~0.28289999999999993 +(0.123E1, ~0.123E1, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(0.123E1, ~0.123, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(0.123E1, ~0.123, ~0.123): ~0.27429 ~0.27429000000000003 +(0.123E1, ~0.123, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(0.123, 0.123E4, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(0.123, 0.123E4, 0.123E1): 0.15252E3 0.15251999999999998E3 +(0.123, 0.123E4, 0.123): 0.151413E3 0.15141299999999998E3 +(0.123, 0.123E4, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(0.123, 0.123E4, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(0.123, 0.123E2, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(0.123, 0.123E2, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(0.123, 0.2718281828459045E1, ~0.123): 0.21134866490046253 0.21134866490046256 +(0.123, 0.123E1, 0.123): 0.27429 0.27429000000000003 +(0.123, 0.123E1, 0.123E~2): 0.15252 0.15252000000000002 +(0.123, 0.123E1, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(0.123, 0.11125369292536007E~307, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(0.123, 0.11125369292536007E~307, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 +(0.123, ~0.123E4, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(0.123, ~0.123E4, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(0.123, ~0.123E4, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(0.123, ~0.123E4, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(0.123, ~0.123E4, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(0.123, ~0.123E2, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(0.123, ~0.123E2, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(0.123, ~0.2718281828459045E1, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(0.123, ~0.123E1, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(0.123, ~0.123E1, ~0.123): ~0.27429 ~0.27429000000000003 +(0.123, ~0.123E1, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(0.123, ~0.11125369292536007E~307, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(0.123, ~0.11125369292536007E~307, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(0.123E~2, 0.123E4, 0.123E1): 0.27429E1 0.27428999999999997E1 +(0.123E~2, 0.123E4, ~0.123E1): 0.2829 0.28289999999999993 +(0.123E~2, 0.123E4, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(0.123E~2, 0.123E2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(0.123E~2, 0.3141592653589793E1, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(0.123E~2, ~0.123E4, 0.123E1): ~0.2829 ~0.28289999999999993 +(0.123E~2, ~0.123E4, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(0.123E~2, ~0.123E4, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(0.123E~2, ~0.123E2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(0.123E~2, ~0.3141592653589793E1, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(0.11125369292536007E~307, 0.123, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(0.11125369292536007E~307, 0.123, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 +(0.11125369292536007E~307, ~0.123, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(0.11125369292536007E~307, ~0.123, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(~0.17976931348623157E309, 0.123E1, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(~0.17976931348623157E309, 0.123E1, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(~0.17976931348623157E309, ~0.123E1, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(~0.17976931348623157E309, ~0.123E1, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(~0.8988465674311579E308, 0.123E1, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(~0.8988465674311579E308, 0.123E1, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(~0.8988465674311579E308, ~0.123E1, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(~0.8988465674311579E308, ~0.123E1, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(~0.123E4, 0.123E2, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(~0.123E4, 0.123E2, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(~0.123E4, 0.123E2, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(~0.123E4, 0.123E2, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(~0.123E4, 0.123E2, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(~0.123E4, 0.123E2, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(~0.123E4, 0.3141592653589793E1, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(~0.123E4, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(~0.123E4, 0.3141592653589793E1, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(~0.123E4, 0.2718281828459045E1, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(~0.123E4, 0.2718281828459045E1, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(~0.123E4, 0.2718281828459045E1, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(~0.123E4, 0.2718281828459045E1, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(~0.123E4, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(~0.123E4, 0.123E1, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(~0.123E4, 0.123E1, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(~0.123E4, 0.123E1, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(~0.123E4, 0.123E1, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(~0.123E4, 0.123E1, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(~0.123E4, 0.123E1, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(~0.123E4, 0.123E1, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(~0.123E4, 0.123, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(~0.123E4, 0.123, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(~0.123E4, 0.123, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(~0.123E4, 0.123, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(~0.123E4, 0.123, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(~0.123E4, 0.123E~2, 0.123E1): ~0.2829 ~0.28289999999999993 +(~0.123E4, 0.123E~2, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(~0.123E4, 0.123E~2, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(~0.123E4, ~0.123E2, 0.123E2): 0.15141300000000001E5 0.151413E5 +(~0.123E4, ~0.123E2, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(~0.123E4, ~0.123E2, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(~0.123E4, ~0.123E2, 0.123): 0.15129123000000001E5 0.15129123E5 +(~0.123E4, ~0.123E2, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(~0.123E4, ~0.123E2, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(~0.123E4, ~0.3141592653589793E1, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(~0.123E4, ~0.3141592653589793E1, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(~0.123E4, ~0.3141592653589793E1, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(~0.123E4, ~0.2718281828459045E1, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(~0.123E4, ~0.2718281828459045E1, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(~0.123E4, ~0.2718281828459045E1, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(~0.123E4, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(~0.123E4, ~0.2718281828459045E1, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(~0.123E4, ~0.123E1, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(~0.123E4, ~0.123E1, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(~0.123E4, ~0.123E1, 0.123E1): 0.15141299999999999E4 0.151413E4 +(~0.123E4, ~0.123E1, 0.123): 0.1513023E4 0.15130230000000001E4 +(~0.123E4, ~0.123E1, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(~0.123E4, ~0.123E1, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(~0.123E4, ~0.123E1, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(~0.123E4, ~0.123, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(~0.123E4, ~0.123, 0.123E1): 0.15252E3 0.15251999999999998E3 +(~0.123E4, ~0.123, 0.123): 0.151413E3 0.15141299999999998E3 +(~0.123E4, ~0.123, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(~0.123E4, ~0.123, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(~0.123E4, ~0.123E~2, 0.123E1): 0.27429E1 0.27428999999999997E1 +(~0.123E4, ~0.123E~2, ~0.123E1): 0.2829 0.28289999999999993 +(~0.123E4, ~0.123E~2, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(~0.123E2, 0.123E4, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.1512585840734641E5 +(~0.123E2, 0.123E4, ~0.123E2): ~0.15141300000000001E5 ~0.151413E5 +(~0.123E2, 0.123E4, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.15131718281828458E5 +(~0.123E2, 0.123E4, ~0.123E1): ~0.15130230000000001E5 ~0.1513023E5 +(~0.123E2, 0.123E4, ~0.123): ~0.15129123000000001E5 ~0.15129123E5 +(~0.123E2, 0.123E4, ~0.123E~2): ~0.15129001230000002E5 ~0.1512900123E5 +(~0.123E2, 0.3141592653589793E1, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(~0.123E2, 0.3141592653589793E1, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(~0.123E2, 0.3141592653589793E1, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(~0.123E2, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(~0.123E2, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(~0.123E2, 0.2718281828459045E1, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(~0.123E2, 0.2718281828459045E1, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(~0.123E2, 0.2718281828459045E1, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(~0.123E2, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(~0.123E2, 0.2718281828459045E1, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(~0.123E2, 0.2718281828459045E1, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(~0.123E2, 0.123E1, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(~0.123E2, 0.123E1, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(~0.123E2, 0.123E1, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(~0.123E2, 0.123E1, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(~0.123E2, 0.123, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(~0.123E2, 0.123, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(~0.123E2, 0.123E~2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(~0.123E2, ~0.123E4, 0.123E2): 0.15141300000000001E5 0.151413E5 +(~0.123E2, ~0.123E4, 0.2718281828459045E1): 0.1513171828182846E5 0.15131718281828458E5 +(~0.123E2, ~0.123E4, 0.123E1): 0.15130230000000001E5 0.1513023E5 +(~0.123E2, ~0.123E4, 0.123): 0.15129123000000001E5 0.15129123E5 +(~0.123E2, ~0.123E4, 0.123E~2): 0.15129001230000002E5 0.1512900123E5 +(~0.123E2, ~0.123E4, ~0.3141592653589793E1): 0.15125858407346412E5 0.1512585840734641E5 +(~0.123E2, ~0.3141592653589793E1, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(~0.123E2, ~0.3141592653589793E1, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(~0.123E2, ~0.2718281828459045E1, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(~0.123E2, ~0.2718281828459045E1, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(~0.123E2, ~0.2718281828459045E1, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(~0.123E2, ~0.2718281828459045E1, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(~0.123E2, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(~0.123E2, ~0.2718281828459045E1, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(~0.123E2, ~0.123E1, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(~0.123E2, ~0.123E1, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(~0.123E2, ~0.123E1, ~0.123): 0.15006E2 0.15006000000000002E2 +(~0.123E2, ~0.123E1, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(~0.123E2, ~0.123, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(~0.123E2, ~0.123, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(~0.123E2, ~0.123E~2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(~0.3141592653589793E1, 0.8988465674311579E308, 0.17976931348623157E309): ~0.10261166380838123E309 ~inf +(~0.3141592653589793E1, 0.123E4, 0.123E2): ~0.38518589639154457E4 ~0.3851858963915445E4 +(~0.3141592653589793E1, 0.123E4, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.3867300556569035E4 +(~0.3141592653589793E1, 0.123E4, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154452E4 +(~0.3141592653589793E1, 0.123E2, 0.123E2): ~0.26341589639154456E2 ~0.2634158963915446E2 +(~0.3141592653589793E1, 0.123E2, 0.123E1): ~0.3741158963915446E2 ~0.37411589639154464E2 +(~0.3141592653589793E1, 0.123E2, 0.123): ~0.38518589639154456E2 ~0.3851858963915446E2 +(~0.3141592653589793E1, 0.123E2, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274426E2 +(~0.3141592653589793E1, 0.123E2, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.4135987146761351E2 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.2718281828459045E1): ~0.71513225726303125E1 ~0.7151322572630313E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(~0.3141592653589793E1, 0.123E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(~0.3141592653589793E1, 0.123E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(~0.3141592653589793E1, 0.123E~2, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.17976931348623157E309): 0.10261166380838123E309 inf +(~0.3141592653589793E1, ~0.123E4, 0.3141592653589793E1): 0.38673005565690355E4 0.3867300556569035E4 +(~0.3141592653589793E1, ~0.123E4, 0.123E~2): 0.38641601939154457E4 0.38641601939154452E4 +(~0.3141592653589793E1, ~0.123E4, ~0.123E2): 0.38518589639154457E4 0.3851858963915445E4 +(~0.3141592653589793E1, ~0.123E2, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274426E2 +(~0.3141592653589793E1, ~0.123E2, 0.2718281828459045E1): 0.413598714676135E2 0.4135987146761351E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123E2): 0.26341589639154456E2 0.2634158963915446E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123E1): 0.3741158963915446E2 0.37411589639154464E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123): 0.38518589639154456E2 0.3851858963915446E2 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.2718281828459045E1): 0.71513225726303125E1 0.7151322572630313E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(~0.3141592653589793E1, ~0.123E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(~0.3141592653589793E1, ~0.123E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(~0.3141592653589793E1, ~0.123E~2, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(~0.2718281828459045E1, 0.8988465674311579E308, 0.17976931348623157E309): ~0.6456251559585884E308 ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.8988465674311579E308): ~0.15444717233897463E309 ~inf +(~0.2718281828459045E1, 0.123E4, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.3340345056351036E4 +(~0.2718281828459045E1, 0.123E4, 0.123E~2): ~0.33434854190046253E4 ~0.3343485419004626E4 +(~0.2718281828459045E1, 0.123E4, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004626E4 +(~0.2718281828459045E1, 0.123E4, ~0.123E2): ~0.33557866490046254E4 ~0.3355786649004626E4 +(~0.2718281828459045E1, 0.123E4, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330847E4 +(~0.2718281828459045E1, 0.123E2, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046253E2 +(~0.2718281828459045E1, 0.123E2, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.3029327383645646E2 +(~0.2718281828459045E1, 0.123E2, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.3071658466158721E2 +(~0.2718281828459045E1, 0.123E2, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363604E2 +(~0.2718281828459045E1, 0.123E2, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004625E2 +(~0.2718281828459045E1, 0.123E2, ~0.123): ~0.3355786649004626E2 ~0.3355786649004625E2 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.123E2): 0.37602657773264343E1 0.37602657773264347E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.123E1): ~0.7309734222673566E1 ~0.73097342226735655E1 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673565E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.123E1): ~0.6159056098930649E1 ~0.615905609893065E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.123E~2): ~0.7387826098930649E1 ~0.738782609893065E1 +(~0.2718281828459045E1, 0.123E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(~0.2718281828459045E1, 0.123E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(~0.2718281828459045E1, 0.123E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(~0.2718281828459045E1, 0.123E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(~0.2718281828459045E1, 0.123, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.17976931348623157E309): 0.6456251559585884E308 inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.8988465674311579E308): 0.15444717233897463E309 inf +(~0.2718281828459045E1, ~0.123E4, 0.123E4): 0.4573486649004625E4 0.4573486649004626E4 +(~0.2718281828459045E1, ~0.123E4, 0.123E2): 0.33557866490046254E4 0.3355786649004626E4 +(~0.2718281828459045E1, ~0.123E4, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330847E4 +(~0.2718281828459045E1, ~0.123E4, ~0.3141592653589793E1): 0.33403450563510355E4 0.3340345056351036E4 +(~0.2718281828459045E1, ~0.123E4, ~0.123E~2): 0.33434854190046253E4 0.3343485419004626E4 +(~0.2718281828459045E1, ~0.123E2, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363604E2 +(~0.2718281828459045E1, ~0.123E2, 0.123E1): 0.3466486649004626E2 0.3466486649004625E2 +(~0.2718281828459045E1, ~0.123E2, 0.123): 0.3355786649004626E2 0.3355786649004625E2 +(~0.2718281828459045E1, ~0.123E2, ~0.123E2): 0.21134866490046257E2 0.21134866490046253E2 +(~0.2718281828459045E1, ~0.123E2, ~0.3141592653589793E1): 0.30293273836456464E2 0.3029327383645646E2 +(~0.2718281828459045E1, ~0.123E2, ~0.2718281828459045E1): 0.30716584661587213E2 0.3071658466158721E2 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.123): 0.8662734222673567E1 0.8662734222673565E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264347E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E1): 0.7309734222673566E1 0.73097342226735655E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E1): 0.6159056098930649E1 0.615905609893065E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E~2): 0.7387826098930649E1 0.738782609893065E1 +(~0.2718281828459045E1, ~0.123E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(~0.2718281828459045E1, ~0.123E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(~0.2718281828459045E1, ~0.123E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(~0.2718281828459045E1, ~0.123E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(~0.2718281828459045E1, ~0.123, ~0.123): 0.21134866490046253 0.21134866490046256 +(~0.123E1, 0.17976931348623157E309, 0.17976931348623157E309): ~0.4134694210183326E308 ~inf +(~0.123E1, 0.17976931348623157E309, 0.8988465674311579E308): ~0.13123159884494904E309 ~inf +(~0.123E1, 0.8988465674311579E308, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219916E308 +(~0.123E1, 0.8988465674311579E308, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.20673471050916621E308 +(~0.123E1, 0.123E4, 0.123E4): ~0.2829E3 ~0.2829000000000001E3 +(~0.123E1, 0.123E4, 0.123E2): ~0.15006E4 ~0.15006000000000001E4 +(~0.123E1, 0.123E4, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.151604159265359E4 +(~0.123E1, 0.123E4, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.15156182818284592E4 +(~0.123E1, 0.123E4, ~0.123E1): ~0.15141299999999999E4 ~0.151413E4 +(~0.123E1, 0.123E4, ~0.123): ~0.1513023E4 ~0.15130230000000001E4 +(~0.123E1, 0.123E4, ~0.123E~2): ~0.151290123E4 ~0.15129012300000002E4 +(~0.123E1, 0.123E2, 0.123E2): ~0.28289999999999997E1 ~0.28290000000000006E1 +(~0.123E1, 0.123E2, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540957E2 +(~0.123E1, 0.123E2, 0.123): ~0.15006E2 ~0.15006000000000002E2 +(~0.123E1, 0.123E2, 0.123E~2): ~0.1512777E2 ~0.15127770000000002E2 +(~0.123E1, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505238E1 +(~0.123E1, 0.3141592653589793E1, ~0.123): ~0.39871589639154457E1 ~0.3987158963915445E1 +(~0.123E1, 0.2718281828459045E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.20189399541483244 +(~0.123E1, 0.2718281828459045E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455805 +(~0.123E1, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.6061768477463671E1 +(~0.123E1, 0.2718281828459045E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046258E1 +(~0.123E1, 0.123E1, 0.123E1): ~0.2829 ~0.28289999999999993 +(~0.123E1, 0.123E1, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(~0.123E1, 0.123, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(~0.123E1, 0.123, ~0.123): ~0.27429 ~0.27429000000000003 +(~0.123E1, 0.123, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(~0.123E1, ~0.17976931348623157E309, ~0.17976931348623157E309): 0.4134694210183326E308 inf +(~0.123E1, ~0.17976931348623157E309, ~0.8988465674311579E308): 0.13123159884494904E309 inf +(~0.123E1, ~0.8988465674311579E308, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219916E308 +(~0.123E1, ~0.8988465674311579E308, ~0.8988465674311579E308): 0.2067347105091663E308 0.20673471050916621E308 +(~0.123E1, ~0.123E4, 0.3141592653589793E1): 0.15160415926535898E4 0.151604159265359E4 +(~0.123E1, ~0.123E4, 0.2718281828459045E1): 0.1515618281828459E4 0.15156182818284592E4 +(~0.123E1, ~0.123E4, 0.123E1): 0.15141299999999999E4 0.151413E4 +(~0.123E1, ~0.123E4, 0.123): 0.1513023E4 0.15130230000000001E4 +(~0.123E1, ~0.123E4, 0.123E~2): 0.151290123E4 0.15129012300000002E4 +(~0.123E1, ~0.123E4, ~0.123E4): 0.2829E3 0.2829000000000001E3 +(~0.123E1, ~0.123E4, ~0.123E2): 0.15006E4 0.15006000000000001E4 +(~0.123E1, ~0.123E2, ~0.123E2): 0.28289999999999997E1 0.28290000000000006E1 +(~0.123E1, ~0.123E2, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540957E2 +(~0.123E1, ~0.123E2, ~0.123): 0.15006E2 0.15006000000000002E2 +(~0.123E1, ~0.123E2, ~0.123E~2): 0.1512777E2 0.15127770000000002E2 +(~0.123E1, ~0.3141592653589793E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505238E1 +(~0.123E1, ~0.3141592653589793E1, 0.123): 0.39871589639154457E1 0.3987158963915445E1 +(~0.123E1, ~0.2718281828459045E1, 0.2718281828459045E1): 0.606176847746367E1 0.6061768477463671E1 +(~0.123E1, ~0.2718281828459045E1, 0.123): 0.34664866490046253E1 0.34664866490046258E1 +(~0.123E1, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.2018939954148323 0.20189399541483244 +(~0.123E1, ~0.2718281828459045E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455805 +(~0.123E1, ~0.123E1, 0.123E1): 0.27429E1 0.27428999999999997E1 +(~0.123E1, ~0.123E1, ~0.123E1): 0.2829 0.28289999999999993 +(~0.123E1, ~0.123, 0.123): 0.27429 0.27429000000000003 +(~0.123E1, ~0.123, 0.123E~2): 0.15252 0.15252000000000002 +(~0.123E1, ~0.123, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(~0.123, 0.123E4, 0.123E2): ~0.13899E3 ~0.13898999999999998E3 +(~0.123, 0.123E4, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154094E3 +(~0.123, 0.123E4, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.15443159265358977E3 +(~0.123, 0.123E4, ~0.123E1): ~0.15252E3 ~0.15251999999999998E3 +(~0.123, 0.123E4, ~0.123): ~0.151413E3 ~0.15141299999999998E3 +(~0.123, 0.123E2, 0.123E1): ~0.2829000000000001 ~0.28290000000000015 +(~0.123, 0.123E2, ~0.123E~2): ~0.151413E1 ~0.15141300000000002E1 +(~0.123, 0.2718281828459045E1, 0.123): ~0.21134866490046253 ~0.21134866490046256 +(~0.123, 0.123E1, 0.123): ~0.28289999999999996E~1 ~0.2829000000000001E~1 +(~0.123, 0.123E1, ~0.123): ~0.27429 ~0.27429000000000003 +(~0.123, 0.123E1, ~0.123E~2): ~0.15252 ~0.15252000000000002 +(~0.123, 0.11125369292536007E~307, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(~0.123, 0.11125369292536007E~307, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(~0.123, ~0.123E4, 0.3141592653589793E1): 0.1544315926535898E3 0.15443159265358977E3 +(~0.123, ~0.123E4, 0.123E1): 0.15252E3 0.15251999999999998E3 +(~0.123, ~0.123E4, 0.123): 0.151413E3 0.15141299999999998E3 +(~0.123, ~0.123E4, ~0.123E2): 0.13899E3 0.13898999999999998E3 +(~0.123, ~0.123E4, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154094E3 +(~0.123, ~0.123E2, 0.123E~2): 0.151413E1 0.15141300000000002E1 +(~0.123, ~0.123E2, ~0.123E1): 0.2829000000000001 0.28290000000000015 +(~0.123, ~0.2718281828459045E1, ~0.123): 0.21134866490046253 0.21134866490046256 +(~0.123, ~0.123E1, 0.123): 0.27429 0.27429000000000003 +(~0.123, ~0.123E1, 0.123E~2): 0.15252 0.15252000000000002 +(~0.123, ~0.123E1, ~0.123): 0.28289999999999996E~1 0.2829000000000001E~1 +(~0.123, ~0.11125369292536007E~307, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(~0.123, ~0.11125369292536007E~307, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 +(~0.123E~2, 0.123E4, 0.123E1): ~0.2829 ~0.28289999999999993 +(~0.123E~2, 0.123E4, 0.123E~2): ~0.151167E1 ~0.15116699999999998E1 +(~0.123E~2, 0.123E4, ~0.123E1): ~0.27429E1 ~0.27428999999999997E1 +(~0.123E~2, 0.123E2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359E~1 +(~0.123E~2, 0.3141592653589793E1, 0.123E~2): ~0.26341589639154455E~2 ~0.2634158963915446E~2 +(~0.123E~2, ~0.123E4, 0.123E1): 0.27429E1 0.27428999999999997E1 +(~0.123E~2, ~0.123E4, ~0.123E1): 0.2829 0.28289999999999993 +(~0.123E~2, ~0.123E4, ~0.123E~2): 0.151167E1 0.15116699999999998E1 +(~0.123E~2, ~0.123E2, 0.123E~2): 0.16359000000000002E~1 0.16359E~1 +(~0.123E~2, ~0.3141592653589793E1, ~0.123E~2): 0.26341589639154455E~2 0.2634158963915446E~2 +(~0.11125369292536007E~307, 0.123, 0.5E~323): ~0.136842042298192E~308 ~0.1368420422981926E~308 +(~0.11125369292536007E~307, 0.123, ~0.5E~323): ~0.136842042298193E~308 ~0.1368420422981936E~308 +(~0.11125369292536007E~307, ~0.123, 0.5E~323): 0.136842042298193E~308 0.1368420422981936E~308 +(~0.11125369292536007E~307, ~0.123, ~0.5E~323): 0.136842042298192E~308 0.1368420422981926E~308 + +Testing Real.{realCeil,realFloor,realTrunc} +0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 +0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 +0.123E4 0.123E4 0.123E4 0.123E4 +0.123E2 0.13E2 0.12E2 0.12E2 +0.3141592653589793E1 0.4E1 0.3E1 0.3E1 +0.2718281828459045E1 0.3E1 0.2E1 0.2E1 +0.123E1 0.2E1 0.1E1 0.1E1 +0.123 0.1E1 0.0 0.0 +0.123E~2 0.1E1 0.0 0.0 +0.22250738585072014E~307 0.1E1 0.0 0.0 +0.11125369292536007E~307 0.1E1 0.0 0.0 +0.5E~323 0.1E1 0.0 0.0 +0.0 0.0 0.0 0.0 +~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 +~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 +~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 +~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 +~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 +~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 +~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 +~0.123 ~0.0 ~0.1E1 ~0.0 +~0.123E~2 ~0.0 ~0.1E1 ~0.0 +~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 +~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 +~0.5E~323 ~0.0 ~0.1E1 ~0.0 +~0.0 ~0.0 ~0.0 ~0.0 + +Testing Real.{<,<=,>,>=,==,!=,?=,unordered} +< (0.17976931348623157E309, 0.17976931348623157E309) = false +> (0.17976931348623157E309, 0.17976931348623157E309) = false +== (0.17976931348623157E309, 0.17976931348623157E309) = true +?= (0.17976931348623157E309, 0.17976931348623157E309) = true +< (0.17976931348623157E309, 0.8988465674311579E308) = false +> (0.17976931348623157E309, 0.8988465674311579E308) = true +== (0.17976931348623157E309, 0.8988465674311579E308) = false +?= (0.17976931348623157E309, 0.8988465674311579E308) = false +< (0.17976931348623157E309, 0.123E4) = false +> (0.17976931348623157E309, 0.123E4) = true +== (0.17976931348623157E309, 0.123E4) = false +?= (0.17976931348623157E309, 0.123E4) = false +< (0.17976931348623157E309, 0.123E2) = false +> (0.17976931348623157E309, 0.123E2) = true +== (0.17976931348623157E309, 0.123E2) = false +?= (0.17976931348623157E309, 0.123E2) = false +< (0.17976931348623157E309, 0.3141592653589793E1) = false +> (0.17976931348623157E309, 0.3141592653589793E1) = true +== (0.17976931348623157E309, 0.3141592653589793E1) = false +?= (0.17976931348623157E309, 0.3141592653589793E1) = false +< (0.17976931348623157E309, 0.2718281828459045E1) = false +> (0.17976931348623157E309, 0.2718281828459045E1) = true +== (0.17976931348623157E309, 0.2718281828459045E1) = false +?= (0.17976931348623157E309, 0.2718281828459045E1) = false +< (0.17976931348623157E309, 0.123E1) = false +> (0.17976931348623157E309, 0.123E1) = true +== (0.17976931348623157E309, 0.123E1) = false +?= (0.17976931348623157E309, 0.123E1) = false +< (0.17976931348623157E309, 0.123) = false +> (0.17976931348623157E309, 0.123) = true +== (0.17976931348623157E309, 0.123) = false +?= (0.17976931348623157E309, 0.123) = false +< (0.17976931348623157E309, 0.123E~2) = false +> (0.17976931348623157E309, 0.123E~2) = true +== (0.17976931348623157E309, 0.123E~2) = false +?= (0.17976931348623157E309, 0.123E~2) = false +< (0.17976931348623157E309, 0.22250738585072014E~307) = false +> (0.17976931348623157E309, 0.22250738585072014E~307) = true +== (0.17976931348623157E309, 0.22250738585072014E~307) = false +?= (0.17976931348623157E309, 0.22250738585072014E~307) = false +< (0.17976931348623157E309, 0.11125369292536007E~307) = false +> (0.17976931348623157E309, 0.11125369292536007E~307) = true +== (0.17976931348623157E309, 0.11125369292536007E~307) = false +?= (0.17976931348623157E309, 0.11125369292536007E~307) = false +< (0.17976931348623157E309, 0.5E~323) = false +> (0.17976931348623157E309, 0.5E~323) = true +== (0.17976931348623157E309, 0.5E~323) = false +?= (0.17976931348623157E309, 0.5E~323) = false +< (0.17976931348623157E309, 0.0) = false +> (0.17976931348623157E309, 0.0) = true +== (0.17976931348623157E309, 0.0) = false +?= (0.17976931348623157E309, 0.0) = false +< (0.17976931348623157E309, ~0.17976931348623157E309) = false +> (0.17976931348623157E309, ~0.17976931348623157E309) = true +== (0.17976931348623157E309, ~0.17976931348623157E309) = false +?= (0.17976931348623157E309, ~0.17976931348623157E309) = false +< (0.17976931348623157E309, ~0.8988465674311579E308) = false +> (0.17976931348623157E309, ~0.8988465674311579E308) = true +== (0.17976931348623157E309, ~0.8988465674311579E308) = false +?= (0.17976931348623157E309, ~0.8988465674311579E308) = false +< (0.17976931348623157E309, ~0.123E4) = false +> (0.17976931348623157E309, ~0.123E4) = true +== (0.17976931348623157E309, ~0.123E4) = false +?= (0.17976931348623157E309, ~0.123E4) = false +< (0.17976931348623157E309, ~0.123E2) = false +> (0.17976931348623157E309, ~0.123E2) = true +== (0.17976931348623157E309, ~0.123E2) = false +?= (0.17976931348623157E309, ~0.123E2) = false +< (0.17976931348623157E309, ~0.3141592653589793E1) = false +> (0.17976931348623157E309, ~0.3141592653589793E1) = true +== (0.17976931348623157E309, ~0.3141592653589793E1) = false +?= (0.17976931348623157E309, ~0.3141592653589793E1) = false +< (0.17976931348623157E309, ~0.2718281828459045E1) = false +> (0.17976931348623157E309, ~0.2718281828459045E1) = true +== (0.17976931348623157E309, ~0.2718281828459045E1) = false +?= (0.17976931348623157E309, ~0.2718281828459045E1) = false +< (0.17976931348623157E309, ~0.123E1) = false +> (0.17976931348623157E309, ~0.123E1) = true +== (0.17976931348623157E309, ~0.123E1) = false +?= (0.17976931348623157E309, ~0.123E1) = false +< (0.17976931348623157E309, ~0.123) = false +> (0.17976931348623157E309, ~0.123) = true +== (0.17976931348623157E309, ~0.123) = false +?= (0.17976931348623157E309, ~0.123) = false +< (0.17976931348623157E309, ~0.123E~2) = false +> (0.17976931348623157E309, ~0.123E~2) = true +== (0.17976931348623157E309, ~0.123E~2) = false +?= (0.17976931348623157E309, ~0.123E~2) = false +< (0.17976931348623157E309, ~0.22250738585072014E~307) = false +> (0.17976931348623157E309, ~0.22250738585072014E~307) = true +== (0.17976931348623157E309, ~0.22250738585072014E~307) = false +?= (0.17976931348623157E309, ~0.22250738585072014E~307) = false +< (0.17976931348623157E309, ~0.11125369292536007E~307) = false +> (0.17976931348623157E309, ~0.11125369292536007E~307) = true +== (0.17976931348623157E309, ~0.11125369292536007E~307) = false +?= (0.17976931348623157E309, ~0.11125369292536007E~307) = false +< (0.17976931348623157E309, ~0.5E~323) = false +> (0.17976931348623157E309, ~0.5E~323) = true +== (0.17976931348623157E309, ~0.5E~323) = false +?= (0.17976931348623157E309, ~0.5E~323) = false +< (0.17976931348623157E309, ~0.0) = false +> (0.17976931348623157E309, ~0.0) = true +== (0.17976931348623157E309, ~0.0) = false +?= (0.17976931348623157E309, ~0.0) = false +< (0.8988465674311579E308, 0.17976931348623157E309) = true +> (0.8988465674311579E308, 0.17976931348623157E309) = false +== (0.8988465674311579E308, 0.17976931348623157E309) = false +?= (0.8988465674311579E308, 0.17976931348623157E309) = false +< (0.8988465674311579E308, 0.8988465674311579E308) = false +> (0.8988465674311579E308, 0.8988465674311579E308) = false +== (0.8988465674311579E308, 0.8988465674311579E308) = true +?= (0.8988465674311579E308, 0.8988465674311579E308) = true +< (0.8988465674311579E308, 0.123E4) = false +> (0.8988465674311579E308, 0.123E4) = true +== (0.8988465674311579E308, 0.123E4) = false +?= (0.8988465674311579E308, 0.123E4) = false +< (0.8988465674311579E308, 0.123E2) = false +> (0.8988465674311579E308, 0.123E2) = true +== (0.8988465674311579E308, 0.123E2) = false +?= (0.8988465674311579E308, 0.123E2) = false +< (0.8988465674311579E308, 0.3141592653589793E1) = false +> (0.8988465674311579E308, 0.3141592653589793E1) = true +== (0.8988465674311579E308, 0.3141592653589793E1) = false +?= (0.8988465674311579E308, 0.3141592653589793E1) = false +< (0.8988465674311579E308, 0.2718281828459045E1) = false +> (0.8988465674311579E308, 0.2718281828459045E1) = true +== (0.8988465674311579E308, 0.2718281828459045E1) = false +?= (0.8988465674311579E308, 0.2718281828459045E1) = false +< (0.8988465674311579E308, 0.123E1) = false +> (0.8988465674311579E308, 0.123E1) = true +== (0.8988465674311579E308, 0.123E1) = false +?= (0.8988465674311579E308, 0.123E1) = false +< (0.8988465674311579E308, 0.123) = false +> (0.8988465674311579E308, 0.123) = true +== (0.8988465674311579E308, 0.123) = false +?= (0.8988465674311579E308, 0.123) = false +< (0.8988465674311579E308, 0.123E~2) = false +> (0.8988465674311579E308, 0.123E~2) = true +== (0.8988465674311579E308, 0.123E~2) = false +?= (0.8988465674311579E308, 0.123E~2) = false +< (0.8988465674311579E308, 0.22250738585072014E~307) = false +> (0.8988465674311579E308, 0.22250738585072014E~307) = true +== (0.8988465674311579E308, 0.22250738585072014E~307) = false +?= (0.8988465674311579E308, 0.22250738585072014E~307) = false +< (0.8988465674311579E308, 0.11125369292536007E~307) = false +> (0.8988465674311579E308, 0.11125369292536007E~307) = true +== (0.8988465674311579E308, 0.11125369292536007E~307) = false +?= (0.8988465674311579E308, 0.11125369292536007E~307) = false +< (0.8988465674311579E308, 0.5E~323) = false +> (0.8988465674311579E308, 0.5E~323) = true +== (0.8988465674311579E308, 0.5E~323) = false +?= (0.8988465674311579E308, 0.5E~323) = false +< (0.8988465674311579E308, 0.0) = false +> (0.8988465674311579E308, 0.0) = true +== (0.8988465674311579E308, 0.0) = false +?= (0.8988465674311579E308, 0.0) = false +< (0.8988465674311579E308, ~0.17976931348623157E309) = false +> (0.8988465674311579E308, ~0.17976931348623157E309) = true +== (0.8988465674311579E308, ~0.17976931348623157E309) = false +?= (0.8988465674311579E308, ~0.17976931348623157E309) = false +< (0.8988465674311579E308, ~0.8988465674311579E308) = false +> (0.8988465674311579E308, ~0.8988465674311579E308) = true +== (0.8988465674311579E308, ~0.8988465674311579E308) = false +?= (0.8988465674311579E308, ~0.8988465674311579E308) = false +< (0.8988465674311579E308, ~0.123E4) = false +> (0.8988465674311579E308, ~0.123E4) = true +== (0.8988465674311579E308, ~0.123E4) = false +?= (0.8988465674311579E308, ~0.123E4) = false +< (0.8988465674311579E308, ~0.123E2) = false +> (0.8988465674311579E308, ~0.123E2) = true +== (0.8988465674311579E308, ~0.123E2) = false +?= (0.8988465674311579E308, ~0.123E2) = false +< (0.8988465674311579E308, ~0.3141592653589793E1) = false +> (0.8988465674311579E308, ~0.3141592653589793E1) = true +== (0.8988465674311579E308, ~0.3141592653589793E1) = false +?= (0.8988465674311579E308, ~0.3141592653589793E1) = false +< (0.8988465674311579E308, ~0.2718281828459045E1) = false +> (0.8988465674311579E308, ~0.2718281828459045E1) = true +== (0.8988465674311579E308, ~0.2718281828459045E1) = false +?= (0.8988465674311579E308, ~0.2718281828459045E1) = false +< (0.8988465674311579E308, ~0.123E1) = false +> (0.8988465674311579E308, ~0.123E1) = true +== (0.8988465674311579E308, ~0.123E1) = false +?= (0.8988465674311579E308, ~0.123E1) = false +< (0.8988465674311579E308, ~0.123) = false +> (0.8988465674311579E308, ~0.123) = true +== (0.8988465674311579E308, ~0.123) = false +?= (0.8988465674311579E308, ~0.123) = false +< (0.8988465674311579E308, ~0.123E~2) = false +> (0.8988465674311579E308, ~0.123E~2) = true +== (0.8988465674311579E308, ~0.123E~2) = false +?= (0.8988465674311579E308, ~0.123E~2) = false +< (0.8988465674311579E308, ~0.22250738585072014E~307) = false +> (0.8988465674311579E308, ~0.22250738585072014E~307) = true +== (0.8988465674311579E308, ~0.22250738585072014E~307) = false +?= (0.8988465674311579E308, ~0.22250738585072014E~307) = false +< (0.8988465674311579E308, ~0.11125369292536007E~307) = false +> (0.8988465674311579E308, ~0.11125369292536007E~307) = true +== (0.8988465674311579E308, ~0.11125369292536007E~307) = false +?= (0.8988465674311579E308, ~0.11125369292536007E~307) = false +< (0.8988465674311579E308, ~0.5E~323) = false +> (0.8988465674311579E308, ~0.5E~323) = true +== (0.8988465674311579E308, ~0.5E~323) = false +?= (0.8988465674311579E308, ~0.5E~323) = false +< (0.8988465674311579E308, ~0.0) = false +> (0.8988465674311579E308, ~0.0) = true +== (0.8988465674311579E308, ~0.0) = false +?= (0.8988465674311579E308, ~0.0) = false +< (0.123E4, 0.17976931348623157E309) = true +> (0.123E4, 0.17976931348623157E309) = false +== (0.123E4, 0.17976931348623157E309) = false +?= (0.123E4, 0.17976931348623157E309) = false +< (0.123E4, 0.8988465674311579E308) = true +> (0.123E4, 0.8988465674311579E308) = false +== (0.123E4, 0.8988465674311579E308) = false +?= (0.123E4, 0.8988465674311579E308) = false +< (0.123E4, 0.123E4) = false +> (0.123E4, 0.123E4) = false +== (0.123E4, 0.123E4) = true +?= (0.123E4, 0.123E4) = true +< (0.123E4, 0.123E2) = false +> (0.123E4, 0.123E2) = true +== (0.123E4, 0.123E2) = false +?= (0.123E4, 0.123E2) = false +< (0.123E4, 0.3141592653589793E1) = false +> (0.123E4, 0.3141592653589793E1) = true +== (0.123E4, 0.3141592653589793E1) = false +?= (0.123E4, 0.3141592653589793E1) = false +< (0.123E4, 0.2718281828459045E1) = false +> (0.123E4, 0.2718281828459045E1) = true +== (0.123E4, 0.2718281828459045E1) = false +?= (0.123E4, 0.2718281828459045E1) = false +< (0.123E4, 0.123E1) = false +> (0.123E4, 0.123E1) = true +== (0.123E4, 0.123E1) = false +?= (0.123E4, 0.123E1) = false +< (0.123E4, 0.123) = false +> (0.123E4, 0.123) = true +== (0.123E4, 0.123) = false +?= (0.123E4, 0.123) = false +< (0.123E4, 0.123E~2) = false +> (0.123E4, 0.123E~2) = true +== (0.123E4, 0.123E~2) = false +?= (0.123E4, 0.123E~2) = false +< (0.123E4, 0.22250738585072014E~307) = false +> (0.123E4, 0.22250738585072014E~307) = true +== (0.123E4, 0.22250738585072014E~307) = false +?= (0.123E4, 0.22250738585072014E~307) = false +< (0.123E4, 0.11125369292536007E~307) = false +> (0.123E4, 0.11125369292536007E~307) = true +== (0.123E4, 0.11125369292536007E~307) = false +?= (0.123E4, 0.11125369292536007E~307) = false +< (0.123E4, 0.5E~323) = false +> (0.123E4, 0.5E~323) = true +== (0.123E4, 0.5E~323) = false +?= (0.123E4, 0.5E~323) = false +< (0.123E4, 0.0) = false +> (0.123E4, 0.0) = true +== (0.123E4, 0.0) = false +?= (0.123E4, 0.0) = false +< (0.123E4, ~0.17976931348623157E309) = false +> (0.123E4, ~0.17976931348623157E309) = true +== (0.123E4, ~0.17976931348623157E309) = false +?= (0.123E4, ~0.17976931348623157E309) = false +< (0.123E4, ~0.8988465674311579E308) = false +> (0.123E4, ~0.8988465674311579E308) = true +== (0.123E4, ~0.8988465674311579E308) = false +?= (0.123E4, ~0.8988465674311579E308) = false +< (0.123E4, ~0.123E4) = false +> (0.123E4, ~0.123E4) = true +== (0.123E4, ~0.123E4) = false +?= (0.123E4, ~0.123E4) = false +< (0.123E4, ~0.123E2) = false +> (0.123E4, ~0.123E2) = true +== (0.123E4, ~0.123E2) = false +?= (0.123E4, ~0.123E2) = false +< (0.123E4, ~0.3141592653589793E1) = false +> (0.123E4, ~0.3141592653589793E1) = true +== (0.123E4, ~0.3141592653589793E1) = false +?= (0.123E4, ~0.3141592653589793E1) = false +< (0.123E4, ~0.2718281828459045E1) = false +> (0.123E4, ~0.2718281828459045E1) = true +== (0.123E4, ~0.2718281828459045E1) = false +?= (0.123E4, ~0.2718281828459045E1) = false +< (0.123E4, ~0.123E1) = false +> (0.123E4, ~0.123E1) = true +== (0.123E4, ~0.123E1) = false +?= (0.123E4, ~0.123E1) = false +< (0.123E4, ~0.123) = false +> (0.123E4, ~0.123) = true +== (0.123E4, ~0.123) = false +?= (0.123E4, ~0.123) = false +< (0.123E4, ~0.123E~2) = false +> (0.123E4, ~0.123E~2) = true +== (0.123E4, ~0.123E~2) = false +?= (0.123E4, ~0.123E~2) = false +< (0.123E4, ~0.22250738585072014E~307) = false +> (0.123E4, ~0.22250738585072014E~307) = true +== (0.123E4, ~0.22250738585072014E~307) = false +?= (0.123E4, ~0.22250738585072014E~307) = false +< (0.123E4, ~0.11125369292536007E~307) = false +> (0.123E4, ~0.11125369292536007E~307) = true +== (0.123E4, ~0.11125369292536007E~307) = false +?= (0.123E4, ~0.11125369292536007E~307) = false +< (0.123E4, ~0.5E~323) = false +> (0.123E4, ~0.5E~323) = true +== (0.123E4, ~0.5E~323) = false +?= (0.123E4, ~0.5E~323) = false +< (0.123E4, ~0.0) = false +> (0.123E4, ~0.0) = true +== (0.123E4, ~0.0) = false +?= (0.123E4, ~0.0) = false +< (0.123E2, 0.17976931348623157E309) = true +> (0.123E2, 0.17976931348623157E309) = false +== (0.123E2, 0.17976931348623157E309) = false +?= (0.123E2, 0.17976931348623157E309) = false +< (0.123E2, 0.8988465674311579E308) = true +> (0.123E2, 0.8988465674311579E308) = false +== (0.123E2, 0.8988465674311579E308) = false +?= (0.123E2, 0.8988465674311579E308) = false +< (0.123E2, 0.123E4) = true +> (0.123E2, 0.123E4) = false +== (0.123E2, 0.123E4) = false +?= (0.123E2, 0.123E4) = false +< (0.123E2, 0.123E2) = false +> (0.123E2, 0.123E2) = false +== (0.123E2, 0.123E2) = true +?= (0.123E2, 0.123E2) = true +< (0.123E2, 0.3141592653589793E1) = false +> (0.123E2, 0.3141592653589793E1) = true +== (0.123E2, 0.3141592653589793E1) = false +?= (0.123E2, 0.3141592653589793E1) = false +< (0.123E2, 0.2718281828459045E1) = false +> (0.123E2, 0.2718281828459045E1) = true +== (0.123E2, 0.2718281828459045E1) = false +?= (0.123E2, 0.2718281828459045E1) = false +< (0.123E2, 0.123E1) = false +> (0.123E2, 0.123E1) = true +== (0.123E2, 0.123E1) = false +?= (0.123E2, 0.123E1) = false +< (0.123E2, 0.123) = false +> (0.123E2, 0.123) = true +== (0.123E2, 0.123) = false +?= (0.123E2, 0.123) = false +< (0.123E2, 0.123E~2) = false +> (0.123E2, 0.123E~2) = true +== (0.123E2, 0.123E~2) = false +?= (0.123E2, 0.123E~2) = false +< (0.123E2, 0.22250738585072014E~307) = false +> (0.123E2, 0.22250738585072014E~307) = true +== (0.123E2, 0.22250738585072014E~307) = false +?= (0.123E2, 0.22250738585072014E~307) = false +< (0.123E2, 0.11125369292536007E~307) = false +> (0.123E2, 0.11125369292536007E~307) = true +== (0.123E2, 0.11125369292536007E~307) = false +?= (0.123E2, 0.11125369292536007E~307) = false +< (0.123E2, 0.5E~323) = false +> (0.123E2, 0.5E~323) = true +== (0.123E2, 0.5E~323) = false +?= (0.123E2, 0.5E~323) = false +< (0.123E2, 0.0) = false +> (0.123E2, 0.0) = true +== (0.123E2, 0.0) = false +?= (0.123E2, 0.0) = false +< (0.123E2, ~0.17976931348623157E309) = false +> (0.123E2, ~0.17976931348623157E309) = true +== (0.123E2, ~0.17976931348623157E309) = false +?= (0.123E2, ~0.17976931348623157E309) = false +< (0.123E2, ~0.8988465674311579E308) = false +> (0.123E2, ~0.8988465674311579E308) = true +== (0.123E2, ~0.8988465674311579E308) = false +?= (0.123E2, ~0.8988465674311579E308) = false +< (0.123E2, ~0.123E4) = false +> (0.123E2, ~0.123E4) = true +== (0.123E2, ~0.123E4) = false +?= (0.123E2, ~0.123E4) = false +< (0.123E2, ~0.123E2) = false +> (0.123E2, ~0.123E2) = true +== (0.123E2, ~0.123E2) = false +?= (0.123E2, ~0.123E2) = false +< (0.123E2, ~0.3141592653589793E1) = false +> (0.123E2, ~0.3141592653589793E1) = true +== (0.123E2, ~0.3141592653589793E1) = false +?= (0.123E2, ~0.3141592653589793E1) = false +< (0.123E2, ~0.2718281828459045E1) = false +> (0.123E2, ~0.2718281828459045E1) = true +== (0.123E2, ~0.2718281828459045E1) = false +?= (0.123E2, ~0.2718281828459045E1) = false +< (0.123E2, ~0.123E1) = false +> (0.123E2, ~0.123E1) = true +== (0.123E2, ~0.123E1) = false +?= (0.123E2, ~0.123E1) = false +< (0.123E2, ~0.123) = false +> (0.123E2, ~0.123) = true +== (0.123E2, ~0.123) = false +?= (0.123E2, ~0.123) = false +< (0.123E2, ~0.123E~2) = false +> (0.123E2, ~0.123E~2) = true +== (0.123E2, ~0.123E~2) = false +?= (0.123E2, ~0.123E~2) = false +< (0.123E2, ~0.22250738585072014E~307) = false +> (0.123E2, ~0.22250738585072014E~307) = true +== (0.123E2, ~0.22250738585072014E~307) = false +?= (0.123E2, ~0.22250738585072014E~307) = false +< (0.123E2, ~0.11125369292536007E~307) = false +> (0.123E2, ~0.11125369292536007E~307) = true +== (0.123E2, ~0.11125369292536007E~307) = false +?= (0.123E2, ~0.11125369292536007E~307) = false +< (0.123E2, ~0.5E~323) = false +> (0.123E2, ~0.5E~323) = true +== (0.123E2, ~0.5E~323) = false +?= (0.123E2, ~0.5E~323) = false +< (0.123E2, ~0.0) = false +> (0.123E2, ~0.0) = true +== (0.123E2, ~0.0) = false +?= (0.123E2, ~0.0) = false +< (0.3141592653589793E1, 0.17976931348623157E309) = true +> (0.3141592653589793E1, 0.17976931348623157E309) = false +== (0.3141592653589793E1, 0.17976931348623157E309) = false +?= (0.3141592653589793E1, 0.17976931348623157E309) = false +< (0.3141592653589793E1, 0.8988465674311579E308) = true +> (0.3141592653589793E1, 0.8988465674311579E308) = false +== (0.3141592653589793E1, 0.8988465674311579E308) = false +?= (0.3141592653589793E1, 0.8988465674311579E308) = false +< (0.3141592653589793E1, 0.123E4) = true +> (0.3141592653589793E1, 0.123E4) = false +== (0.3141592653589793E1, 0.123E4) = false +?= (0.3141592653589793E1, 0.123E4) = false +< (0.3141592653589793E1, 0.123E2) = true +> (0.3141592653589793E1, 0.123E2) = false +== (0.3141592653589793E1, 0.123E2) = false +?= (0.3141592653589793E1, 0.123E2) = false +< (0.3141592653589793E1, 0.3141592653589793E1) = false +> (0.3141592653589793E1, 0.3141592653589793E1) = false +== (0.3141592653589793E1, 0.3141592653589793E1) = true +?= (0.3141592653589793E1, 0.3141592653589793E1) = true +< (0.3141592653589793E1, 0.2718281828459045E1) = false +> (0.3141592653589793E1, 0.2718281828459045E1) = true +== (0.3141592653589793E1, 0.2718281828459045E1) = false +?= (0.3141592653589793E1, 0.2718281828459045E1) = false +< (0.3141592653589793E1, 0.123E1) = false +> (0.3141592653589793E1, 0.123E1) = true +== (0.3141592653589793E1, 0.123E1) = false +?= (0.3141592653589793E1, 0.123E1) = false +< (0.3141592653589793E1, 0.123) = false +> (0.3141592653589793E1, 0.123) = true +== (0.3141592653589793E1, 0.123) = false +?= (0.3141592653589793E1, 0.123) = false +< (0.3141592653589793E1, 0.123E~2) = false +> (0.3141592653589793E1, 0.123E~2) = true +== (0.3141592653589793E1, 0.123E~2) = false +?= (0.3141592653589793E1, 0.123E~2) = false +< (0.3141592653589793E1, 0.22250738585072014E~307) = false +> (0.3141592653589793E1, 0.22250738585072014E~307) = true +== (0.3141592653589793E1, 0.22250738585072014E~307) = false +?= (0.3141592653589793E1, 0.22250738585072014E~307) = false +< (0.3141592653589793E1, 0.11125369292536007E~307) = false +> (0.3141592653589793E1, 0.11125369292536007E~307) = true +== (0.3141592653589793E1, 0.11125369292536007E~307) = false +?= (0.3141592653589793E1, 0.11125369292536007E~307) = false +< (0.3141592653589793E1, 0.5E~323) = false +> (0.3141592653589793E1, 0.5E~323) = true +== (0.3141592653589793E1, 0.5E~323) = false +?= (0.3141592653589793E1, 0.5E~323) = false +< (0.3141592653589793E1, 0.0) = false +> (0.3141592653589793E1, 0.0) = true +== (0.3141592653589793E1, 0.0) = false +?= (0.3141592653589793E1, 0.0) = false +< (0.3141592653589793E1, ~0.17976931348623157E309) = false +> (0.3141592653589793E1, ~0.17976931348623157E309) = true +== (0.3141592653589793E1, ~0.17976931348623157E309) = false +?= (0.3141592653589793E1, ~0.17976931348623157E309) = false +< (0.3141592653589793E1, ~0.8988465674311579E308) = false +> (0.3141592653589793E1, ~0.8988465674311579E308) = true +== (0.3141592653589793E1, ~0.8988465674311579E308) = false +?= (0.3141592653589793E1, ~0.8988465674311579E308) = false +< (0.3141592653589793E1, ~0.123E4) = false +> (0.3141592653589793E1, ~0.123E4) = true +== (0.3141592653589793E1, ~0.123E4) = false +?= (0.3141592653589793E1, ~0.123E4) = false +< (0.3141592653589793E1, ~0.123E2) = false +> (0.3141592653589793E1, ~0.123E2) = true +== (0.3141592653589793E1, ~0.123E2) = false +?= (0.3141592653589793E1, ~0.123E2) = false +< (0.3141592653589793E1, ~0.3141592653589793E1) = false +> (0.3141592653589793E1, ~0.3141592653589793E1) = true +== (0.3141592653589793E1, ~0.3141592653589793E1) = false +?= (0.3141592653589793E1, ~0.3141592653589793E1) = false +< (0.3141592653589793E1, ~0.2718281828459045E1) = false +> (0.3141592653589793E1, ~0.2718281828459045E1) = true +== (0.3141592653589793E1, ~0.2718281828459045E1) = false +?= (0.3141592653589793E1, ~0.2718281828459045E1) = false +< (0.3141592653589793E1, ~0.123E1) = false +> (0.3141592653589793E1, ~0.123E1) = true +== (0.3141592653589793E1, ~0.123E1) = false +?= (0.3141592653589793E1, ~0.123E1) = false +< (0.3141592653589793E1, ~0.123) = false +> (0.3141592653589793E1, ~0.123) = true +== (0.3141592653589793E1, ~0.123) = false +?= (0.3141592653589793E1, ~0.123) = false +< (0.3141592653589793E1, ~0.123E~2) = false +> (0.3141592653589793E1, ~0.123E~2) = true +== (0.3141592653589793E1, ~0.123E~2) = false +?= (0.3141592653589793E1, ~0.123E~2) = false +< (0.3141592653589793E1, ~0.22250738585072014E~307) = false +> (0.3141592653589793E1, ~0.22250738585072014E~307) = true +== (0.3141592653589793E1, ~0.22250738585072014E~307) = false +?= (0.3141592653589793E1, ~0.22250738585072014E~307) = false +< (0.3141592653589793E1, ~0.11125369292536007E~307) = false +> (0.3141592653589793E1, ~0.11125369292536007E~307) = true +== (0.3141592653589793E1, ~0.11125369292536007E~307) = false +?= (0.3141592653589793E1, ~0.11125369292536007E~307) = false +< (0.3141592653589793E1, ~0.5E~323) = false +> (0.3141592653589793E1, ~0.5E~323) = true +== (0.3141592653589793E1, ~0.5E~323) = false +?= (0.3141592653589793E1, ~0.5E~323) = false +< (0.3141592653589793E1, ~0.0) = false +> (0.3141592653589793E1, ~0.0) = true +== (0.3141592653589793E1, ~0.0) = false +?= (0.3141592653589793E1, ~0.0) = false +< (0.2718281828459045E1, 0.17976931348623157E309) = true +> (0.2718281828459045E1, 0.17976931348623157E309) = false +== (0.2718281828459045E1, 0.17976931348623157E309) = false +?= (0.2718281828459045E1, 0.17976931348623157E309) = false +< (0.2718281828459045E1, 0.8988465674311579E308) = true +> (0.2718281828459045E1, 0.8988465674311579E308) = false +== (0.2718281828459045E1, 0.8988465674311579E308) = false +?= (0.2718281828459045E1, 0.8988465674311579E308) = false +< (0.2718281828459045E1, 0.123E4) = true +> (0.2718281828459045E1, 0.123E4) = false +== (0.2718281828459045E1, 0.123E4) = false +?= (0.2718281828459045E1, 0.123E4) = false +< (0.2718281828459045E1, 0.123E2) = true +> (0.2718281828459045E1, 0.123E2) = false +== (0.2718281828459045E1, 0.123E2) = false +?= (0.2718281828459045E1, 0.123E2) = false +< (0.2718281828459045E1, 0.3141592653589793E1) = true +> (0.2718281828459045E1, 0.3141592653589793E1) = false +== (0.2718281828459045E1, 0.3141592653589793E1) = false +?= (0.2718281828459045E1, 0.3141592653589793E1) = false +< (0.2718281828459045E1, 0.2718281828459045E1) = false +> (0.2718281828459045E1, 0.2718281828459045E1) = false +== (0.2718281828459045E1, 0.2718281828459045E1) = true +?= (0.2718281828459045E1, 0.2718281828459045E1) = true +< (0.2718281828459045E1, 0.123E1) = false +> (0.2718281828459045E1, 0.123E1) = true +== (0.2718281828459045E1, 0.123E1) = false +?= (0.2718281828459045E1, 0.123E1) = false +< (0.2718281828459045E1, 0.123) = false +> (0.2718281828459045E1, 0.123) = true +== (0.2718281828459045E1, 0.123) = false +?= (0.2718281828459045E1, 0.123) = false +< (0.2718281828459045E1, 0.123E~2) = false +> (0.2718281828459045E1, 0.123E~2) = true +== (0.2718281828459045E1, 0.123E~2) = false +?= (0.2718281828459045E1, 0.123E~2) = false +< (0.2718281828459045E1, 0.22250738585072014E~307) = false +> (0.2718281828459045E1, 0.22250738585072014E~307) = true +== (0.2718281828459045E1, 0.22250738585072014E~307) = false +?= (0.2718281828459045E1, 0.22250738585072014E~307) = false +< (0.2718281828459045E1, 0.11125369292536007E~307) = false +> (0.2718281828459045E1, 0.11125369292536007E~307) = true +== (0.2718281828459045E1, 0.11125369292536007E~307) = false +?= (0.2718281828459045E1, 0.11125369292536007E~307) = false +< (0.2718281828459045E1, 0.5E~323) = false +> (0.2718281828459045E1, 0.5E~323) = true +== (0.2718281828459045E1, 0.5E~323) = false +?= (0.2718281828459045E1, 0.5E~323) = false +< (0.2718281828459045E1, 0.0) = false +> (0.2718281828459045E1, 0.0) = true +== (0.2718281828459045E1, 0.0) = false +?= (0.2718281828459045E1, 0.0) = false +< (0.2718281828459045E1, ~0.17976931348623157E309) = false +> (0.2718281828459045E1, ~0.17976931348623157E309) = true +== (0.2718281828459045E1, ~0.17976931348623157E309) = false +?= (0.2718281828459045E1, ~0.17976931348623157E309) = false +< (0.2718281828459045E1, ~0.8988465674311579E308) = false +> (0.2718281828459045E1, ~0.8988465674311579E308) = true +== (0.2718281828459045E1, ~0.8988465674311579E308) = false +?= (0.2718281828459045E1, ~0.8988465674311579E308) = false +< (0.2718281828459045E1, ~0.123E4) = false +> (0.2718281828459045E1, ~0.123E4) = true +== (0.2718281828459045E1, ~0.123E4) = false +?= (0.2718281828459045E1, ~0.123E4) = false +< (0.2718281828459045E1, ~0.123E2) = false +> (0.2718281828459045E1, ~0.123E2) = true +== (0.2718281828459045E1, ~0.123E2) = false +?= (0.2718281828459045E1, ~0.123E2) = false +< (0.2718281828459045E1, ~0.3141592653589793E1) = false +> (0.2718281828459045E1, ~0.3141592653589793E1) = true +== (0.2718281828459045E1, ~0.3141592653589793E1) = false +?= (0.2718281828459045E1, ~0.3141592653589793E1) = false +< (0.2718281828459045E1, ~0.2718281828459045E1) = false +> (0.2718281828459045E1, ~0.2718281828459045E1) = true +== (0.2718281828459045E1, ~0.2718281828459045E1) = false +?= (0.2718281828459045E1, ~0.2718281828459045E1) = false +< (0.2718281828459045E1, ~0.123E1) = false +> (0.2718281828459045E1, ~0.123E1) = true +== (0.2718281828459045E1, ~0.123E1) = false +?= (0.2718281828459045E1, ~0.123E1) = false +< (0.2718281828459045E1, ~0.123) = false +> (0.2718281828459045E1, ~0.123) = true +== (0.2718281828459045E1, ~0.123) = false +?= (0.2718281828459045E1, ~0.123) = false +< (0.2718281828459045E1, ~0.123E~2) = false +> (0.2718281828459045E1, ~0.123E~2) = true +== (0.2718281828459045E1, ~0.123E~2) = false +?= (0.2718281828459045E1, ~0.123E~2) = false +< (0.2718281828459045E1, ~0.22250738585072014E~307) = false +> (0.2718281828459045E1, ~0.22250738585072014E~307) = true +== (0.2718281828459045E1, ~0.22250738585072014E~307) = false +?= (0.2718281828459045E1, ~0.22250738585072014E~307) = false +< (0.2718281828459045E1, ~0.11125369292536007E~307) = false +> (0.2718281828459045E1, ~0.11125369292536007E~307) = true +== (0.2718281828459045E1, ~0.11125369292536007E~307) = false +?= (0.2718281828459045E1, ~0.11125369292536007E~307) = false +< (0.2718281828459045E1, ~0.5E~323) = false +> (0.2718281828459045E1, ~0.5E~323) = true +== (0.2718281828459045E1, ~0.5E~323) = false +?= (0.2718281828459045E1, ~0.5E~323) = false +< (0.2718281828459045E1, ~0.0) = false +> (0.2718281828459045E1, ~0.0) = true +== (0.2718281828459045E1, ~0.0) = false +?= (0.2718281828459045E1, ~0.0) = false +< (0.123E1, 0.17976931348623157E309) = true +> (0.123E1, 0.17976931348623157E309) = false +== (0.123E1, 0.17976931348623157E309) = false +?= (0.123E1, 0.17976931348623157E309) = false +< (0.123E1, 0.8988465674311579E308) = true +> (0.123E1, 0.8988465674311579E308) = false +== (0.123E1, 0.8988465674311579E308) = false +?= (0.123E1, 0.8988465674311579E308) = false +< (0.123E1, 0.123E4) = true +> (0.123E1, 0.123E4) = false +== (0.123E1, 0.123E4) = false +?= (0.123E1, 0.123E4) = false +< (0.123E1, 0.123E2) = true +> (0.123E1, 0.123E2) = false +== (0.123E1, 0.123E2) = false +?= (0.123E1, 0.123E2) = false +< (0.123E1, 0.3141592653589793E1) = true +> (0.123E1, 0.3141592653589793E1) = false +== (0.123E1, 0.3141592653589793E1) = false +?= (0.123E1, 0.3141592653589793E1) = false +< (0.123E1, 0.2718281828459045E1) = true +> (0.123E1, 0.2718281828459045E1) = false +== (0.123E1, 0.2718281828459045E1) = false +?= (0.123E1, 0.2718281828459045E1) = false +< (0.123E1, 0.123E1) = false +> (0.123E1, 0.123E1) = false +== (0.123E1, 0.123E1) = true +?= (0.123E1, 0.123E1) = true +< (0.123E1, 0.123) = false +> (0.123E1, 0.123) = true +== (0.123E1, 0.123) = false +?= (0.123E1, 0.123) = false +< (0.123E1, 0.123E~2) = false +> (0.123E1, 0.123E~2) = true +== (0.123E1, 0.123E~2) = false +?= (0.123E1, 0.123E~2) = false +< (0.123E1, 0.22250738585072014E~307) = false +> (0.123E1, 0.22250738585072014E~307) = true +== (0.123E1, 0.22250738585072014E~307) = false +?= (0.123E1, 0.22250738585072014E~307) = false +< (0.123E1, 0.11125369292536007E~307) = false +> (0.123E1, 0.11125369292536007E~307) = true +== (0.123E1, 0.11125369292536007E~307) = false +?= (0.123E1, 0.11125369292536007E~307) = false +< (0.123E1, 0.5E~323) = false +> (0.123E1, 0.5E~323) = true +== (0.123E1, 0.5E~323) = false +?= (0.123E1, 0.5E~323) = false +< (0.123E1, 0.0) = false +> (0.123E1, 0.0) = true +== (0.123E1, 0.0) = false +?= (0.123E1, 0.0) = false +< (0.123E1, ~0.17976931348623157E309) = false +> (0.123E1, ~0.17976931348623157E309) = true +== (0.123E1, ~0.17976931348623157E309) = false +?= (0.123E1, ~0.17976931348623157E309) = false +< (0.123E1, ~0.8988465674311579E308) = false +> (0.123E1, ~0.8988465674311579E308) = true +== (0.123E1, ~0.8988465674311579E308) = false +?= (0.123E1, ~0.8988465674311579E308) = false +< (0.123E1, ~0.123E4) = false +> (0.123E1, ~0.123E4) = true +== (0.123E1, ~0.123E4) = false +?= (0.123E1, ~0.123E4) = false +< (0.123E1, ~0.123E2) = false +> (0.123E1, ~0.123E2) = true +== (0.123E1, ~0.123E2) = false +?= (0.123E1, ~0.123E2) = false +< (0.123E1, ~0.3141592653589793E1) = false +> (0.123E1, ~0.3141592653589793E1) = true +== (0.123E1, ~0.3141592653589793E1) = false +?= (0.123E1, ~0.3141592653589793E1) = false +< (0.123E1, ~0.2718281828459045E1) = false +> (0.123E1, ~0.2718281828459045E1) = true +== (0.123E1, ~0.2718281828459045E1) = false +?= (0.123E1, ~0.2718281828459045E1) = false +< (0.123E1, ~0.123E1) = false +> (0.123E1, ~0.123E1) = true +== (0.123E1, ~0.123E1) = false +?= (0.123E1, ~0.123E1) = false +< (0.123E1, ~0.123) = false +> (0.123E1, ~0.123) = true +== (0.123E1, ~0.123) = false +?= (0.123E1, ~0.123) = false +< (0.123E1, ~0.123E~2) = false +> (0.123E1, ~0.123E~2) = true +== (0.123E1, ~0.123E~2) = false +?= (0.123E1, ~0.123E~2) = false +< (0.123E1, ~0.22250738585072014E~307) = false +> (0.123E1, ~0.22250738585072014E~307) = true +== (0.123E1, ~0.22250738585072014E~307) = false +?= (0.123E1, ~0.22250738585072014E~307) = false +< (0.123E1, ~0.11125369292536007E~307) = false +> (0.123E1, ~0.11125369292536007E~307) = true +== (0.123E1, ~0.11125369292536007E~307) = false +?= (0.123E1, ~0.11125369292536007E~307) = false +< (0.123E1, ~0.5E~323) = false +> (0.123E1, ~0.5E~323) = true +== (0.123E1, ~0.5E~323) = false +?= (0.123E1, ~0.5E~323) = false +< (0.123E1, ~0.0) = false +> (0.123E1, ~0.0) = true +== (0.123E1, ~0.0) = false +?= (0.123E1, ~0.0) = false +< (0.123, 0.17976931348623157E309) = true +> (0.123, 0.17976931348623157E309) = false +== (0.123, 0.17976931348623157E309) = false +?= (0.123, 0.17976931348623157E309) = false +< (0.123, 0.8988465674311579E308) = true +> (0.123, 0.8988465674311579E308) = false +== (0.123, 0.8988465674311579E308) = false +?= (0.123, 0.8988465674311579E308) = false +< (0.123, 0.123E4) = true +> (0.123, 0.123E4) = false +== (0.123, 0.123E4) = false +?= (0.123, 0.123E4) = false +< (0.123, 0.123E2) = true +> (0.123, 0.123E2) = false +== (0.123, 0.123E2) = false +?= (0.123, 0.123E2) = false +< (0.123, 0.3141592653589793E1) = true +> (0.123, 0.3141592653589793E1) = false +== (0.123, 0.3141592653589793E1) = false +?= (0.123, 0.3141592653589793E1) = false +< (0.123, 0.2718281828459045E1) = true +> (0.123, 0.2718281828459045E1) = false +== (0.123, 0.2718281828459045E1) = false +?= (0.123, 0.2718281828459045E1) = false +< (0.123, 0.123E1) = true +> (0.123, 0.123E1) = false +== (0.123, 0.123E1) = false +?= (0.123, 0.123E1) = false +< (0.123, 0.123) = false +> (0.123, 0.123) = false +== (0.123, 0.123) = true +?= (0.123, 0.123) = true +< (0.123, 0.123E~2) = false +> (0.123, 0.123E~2) = true +== (0.123, 0.123E~2) = false +?= (0.123, 0.123E~2) = false +< (0.123, 0.22250738585072014E~307) = false +> (0.123, 0.22250738585072014E~307) = true +== (0.123, 0.22250738585072014E~307) = false +?= (0.123, 0.22250738585072014E~307) = false +< (0.123, 0.11125369292536007E~307) = false +> (0.123, 0.11125369292536007E~307) = true +== (0.123, 0.11125369292536007E~307) = false +?= (0.123, 0.11125369292536007E~307) = false +< (0.123, 0.5E~323) = false +> (0.123, 0.5E~323) = true +== (0.123, 0.5E~323) = false +?= (0.123, 0.5E~323) = false +< (0.123, 0.0) = false +> (0.123, 0.0) = true +== (0.123, 0.0) = false +?= (0.123, 0.0) = false +< (0.123, ~0.17976931348623157E309) = false +> (0.123, ~0.17976931348623157E309) = true +== (0.123, ~0.17976931348623157E309) = false +?= (0.123, ~0.17976931348623157E309) = false +< (0.123, ~0.8988465674311579E308) = false +> (0.123, ~0.8988465674311579E308) = true +== (0.123, ~0.8988465674311579E308) = false +?= (0.123, ~0.8988465674311579E308) = false +< (0.123, ~0.123E4) = false +> (0.123, ~0.123E4) = true +== (0.123, ~0.123E4) = false +?= (0.123, ~0.123E4) = false +< (0.123, ~0.123E2) = false +> (0.123, ~0.123E2) = true +== (0.123, ~0.123E2) = false +?= (0.123, ~0.123E2) = false +< (0.123, ~0.3141592653589793E1) = false +> (0.123, ~0.3141592653589793E1) = true +== (0.123, ~0.3141592653589793E1) = false +?= (0.123, ~0.3141592653589793E1) = false +< (0.123, ~0.2718281828459045E1) = false +> (0.123, ~0.2718281828459045E1) = true +== (0.123, ~0.2718281828459045E1) = false +?= (0.123, ~0.2718281828459045E1) = false +< (0.123, ~0.123E1) = false +> (0.123, ~0.123E1) = true +== (0.123, ~0.123E1) = false +?= (0.123, ~0.123E1) = false +< (0.123, ~0.123) = false +> (0.123, ~0.123) = true +== (0.123, ~0.123) = false +?= (0.123, ~0.123) = false +< (0.123, ~0.123E~2) = false +> (0.123, ~0.123E~2) = true +== (0.123, ~0.123E~2) = false +?= (0.123, ~0.123E~2) = false +< (0.123, ~0.22250738585072014E~307) = false +> (0.123, ~0.22250738585072014E~307) = true +== (0.123, ~0.22250738585072014E~307) = false +?= (0.123, ~0.22250738585072014E~307) = false +< (0.123, ~0.11125369292536007E~307) = false +> (0.123, ~0.11125369292536007E~307) = true +== (0.123, ~0.11125369292536007E~307) = false +?= (0.123, ~0.11125369292536007E~307) = false +< (0.123, ~0.5E~323) = false +> (0.123, ~0.5E~323) = true +== (0.123, ~0.5E~323) = false +?= (0.123, ~0.5E~323) = false +< (0.123, ~0.0) = false +> (0.123, ~0.0) = true +== (0.123, ~0.0) = false +?= (0.123, ~0.0) = false +< (0.123E~2, 0.17976931348623157E309) = true +> (0.123E~2, 0.17976931348623157E309) = false +== (0.123E~2, 0.17976931348623157E309) = false +?= (0.123E~2, 0.17976931348623157E309) = false +< (0.123E~2, 0.8988465674311579E308) = true +> (0.123E~2, 0.8988465674311579E308) = false +== (0.123E~2, 0.8988465674311579E308) = false +?= (0.123E~2, 0.8988465674311579E308) = false +< (0.123E~2, 0.123E4) = true +> (0.123E~2, 0.123E4) = false +== (0.123E~2, 0.123E4) = false +?= (0.123E~2, 0.123E4) = false +< (0.123E~2, 0.123E2) = true +> (0.123E~2, 0.123E2) = false +== (0.123E~2, 0.123E2) = false +?= (0.123E~2, 0.123E2) = false +< (0.123E~2, 0.3141592653589793E1) = true +> (0.123E~2, 0.3141592653589793E1) = false +== (0.123E~2, 0.3141592653589793E1) = false +?= (0.123E~2, 0.3141592653589793E1) = false +< (0.123E~2, 0.2718281828459045E1) = true +> (0.123E~2, 0.2718281828459045E1) = false +== (0.123E~2, 0.2718281828459045E1) = false +?= (0.123E~2, 0.2718281828459045E1) = false +< (0.123E~2, 0.123E1) = true +> (0.123E~2, 0.123E1) = false +== (0.123E~2, 0.123E1) = false +?= (0.123E~2, 0.123E1) = false +< (0.123E~2, 0.123) = true +> (0.123E~2, 0.123) = false +== (0.123E~2, 0.123) = false +?= (0.123E~2, 0.123) = false +< (0.123E~2, 0.123E~2) = false +> (0.123E~2, 0.123E~2) = false +== (0.123E~2, 0.123E~2) = true +?= (0.123E~2, 0.123E~2) = true +< (0.123E~2, 0.22250738585072014E~307) = false +> (0.123E~2, 0.22250738585072014E~307) = true +== (0.123E~2, 0.22250738585072014E~307) = false +?= (0.123E~2, 0.22250738585072014E~307) = false +< (0.123E~2, 0.11125369292536007E~307) = false +> (0.123E~2, 0.11125369292536007E~307) = true +== (0.123E~2, 0.11125369292536007E~307) = false +?= (0.123E~2, 0.11125369292536007E~307) = false +< (0.123E~2, 0.5E~323) = false +> (0.123E~2, 0.5E~323) = true +== (0.123E~2, 0.5E~323) = false +?= (0.123E~2, 0.5E~323) = false +< (0.123E~2, 0.0) = false +> (0.123E~2, 0.0) = true +== (0.123E~2, 0.0) = false +?= (0.123E~2, 0.0) = false +< (0.123E~2, ~0.17976931348623157E309) = false +> (0.123E~2, ~0.17976931348623157E309) = true +== (0.123E~2, ~0.17976931348623157E309) = false +?= (0.123E~2, ~0.17976931348623157E309) = false +< (0.123E~2, ~0.8988465674311579E308) = false +> (0.123E~2, ~0.8988465674311579E308) = true +== (0.123E~2, ~0.8988465674311579E308) = false +?= (0.123E~2, ~0.8988465674311579E308) = false +< (0.123E~2, ~0.123E4) = false +> (0.123E~2, ~0.123E4) = true +== (0.123E~2, ~0.123E4) = false +?= (0.123E~2, ~0.123E4) = false +< (0.123E~2, ~0.123E2) = false +> (0.123E~2, ~0.123E2) = true +== (0.123E~2, ~0.123E2) = false +?= (0.123E~2, ~0.123E2) = false +< (0.123E~2, ~0.3141592653589793E1) = false +> (0.123E~2, ~0.3141592653589793E1) = true +== (0.123E~2, ~0.3141592653589793E1) = false +?= (0.123E~2, ~0.3141592653589793E1) = false +< (0.123E~2, ~0.2718281828459045E1) = false +> (0.123E~2, ~0.2718281828459045E1) = true +== (0.123E~2, ~0.2718281828459045E1) = false +?= (0.123E~2, ~0.2718281828459045E1) = false +< (0.123E~2, ~0.123E1) = false +> (0.123E~2, ~0.123E1) = true +== (0.123E~2, ~0.123E1) = false +?= (0.123E~2, ~0.123E1) = false +< (0.123E~2, ~0.123) = false +> (0.123E~2, ~0.123) = true +== (0.123E~2, ~0.123) = false +?= (0.123E~2, ~0.123) = false +< (0.123E~2, ~0.123E~2) = false +> (0.123E~2, ~0.123E~2) = true +== (0.123E~2, ~0.123E~2) = false +?= (0.123E~2, ~0.123E~2) = false +< (0.123E~2, ~0.22250738585072014E~307) = false +> (0.123E~2, ~0.22250738585072014E~307) = true +== (0.123E~2, ~0.22250738585072014E~307) = false +?= (0.123E~2, ~0.22250738585072014E~307) = false +< (0.123E~2, ~0.11125369292536007E~307) = false +> (0.123E~2, ~0.11125369292536007E~307) = true +== (0.123E~2, ~0.11125369292536007E~307) = false +?= (0.123E~2, ~0.11125369292536007E~307) = false +< (0.123E~2, ~0.5E~323) = false +> (0.123E~2, ~0.5E~323) = true +== (0.123E~2, ~0.5E~323) = false +?= (0.123E~2, ~0.5E~323) = false +< (0.123E~2, ~0.0) = false +> (0.123E~2, ~0.0) = true +== (0.123E~2, ~0.0) = false +?= (0.123E~2, ~0.0) = false +< (0.22250738585072014E~307, 0.17976931348623157E309) = true +> (0.22250738585072014E~307, 0.17976931348623157E309) = false +== (0.22250738585072014E~307, 0.17976931348623157E309) = false +?= (0.22250738585072014E~307, 0.17976931348623157E309) = false +< (0.22250738585072014E~307, 0.8988465674311579E308) = true +> (0.22250738585072014E~307, 0.8988465674311579E308) = false +== (0.22250738585072014E~307, 0.8988465674311579E308) = false +?= (0.22250738585072014E~307, 0.8988465674311579E308) = false +< (0.22250738585072014E~307, 0.123E4) = true +> (0.22250738585072014E~307, 0.123E4) = false +== (0.22250738585072014E~307, 0.123E4) = false +?= (0.22250738585072014E~307, 0.123E4) = false +< (0.22250738585072014E~307, 0.123E2) = true +> (0.22250738585072014E~307, 0.123E2) = false +== (0.22250738585072014E~307, 0.123E2) = false +?= (0.22250738585072014E~307, 0.123E2) = false +< (0.22250738585072014E~307, 0.3141592653589793E1) = true +> (0.22250738585072014E~307, 0.3141592653589793E1) = false +== (0.22250738585072014E~307, 0.3141592653589793E1) = false +?= (0.22250738585072014E~307, 0.3141592653589793E1) = false +< (0.22250738585072014E~307, 0.2718281828459045E1) = true +> (0.22250738585072014E~307, 0.2718281828459045E1) = false +== (0.22250738585072014E~307, 0.2718281828459045E1) = false +?= (0.22250738585072014E~307, 0.2718281828459045E1) = false +< (0.22250738585072014E~307, 0.123E1) = true +> (0.22250738585072014E~307, 0.123E1) = false +== (0.22250738585072014E~307, 0.123E1) = false +?= (0.22250738585072014E~307, 0.123E1) = false +< (0.22250738585072014E~307, 0.123) = true +> (0.22250738585072014E~307, 0.123) = false +== (0.22250738585072014E~307, 0.123) = false +?= (0.22250738585072014E~307, 0.123) = false +< (0.22250738585072014E~307, 0.123E~2) = true +> (0.22250738585072014E~307, 0.123E~2) = false +== (0.22250738585072014E~307, 0.123E~2) = false +?= (0.22250738585072014E~307, 0.123E~2) = false +< (0.22250738585072014E~307, 0.22250738585072014E~307) = false +> (0.22250738585072014E~307, 0.22250738585072014E~307) = false +== (0.22250738585072014E~307, 0.22250738585072014E~307) = true +?= (0.22250738585072014E~307, 0.22250738585072014E~307) = true +< (0.22250738585072014E~307, 0.11125369292536007E~307) = false +> (0.22250738585072014E~307, 0.11125369292536007E~307) = true +== (0.22250738585072014E~307, 0.11125369292536007E~307) = false +?= (0.22250738585072014E~307, 0.11125369292536007E~307) = false +< (0.22250738585072014E~307, 0.5E~323) = false +> (0.22250738585072014E~307, 0.5E~323) = true +== (0.22250738585072014E~307, 0.5E~323) = false +?= (0.22250738585072014E~307, 0.5E~323) = false +< (0.22250738585072014E~307, 0.0) = false +> (0.22250738585072014E~307, 0.0) = true +== (0.22250738585072014E~307, 0.0) = false +?= (0.22250738585072014E~307, 0.0) = false +< (0.22250738585072014E~307, ~0.17976931348623157E309) = false +> (0.22250738585072014E~307, ~0.17976931348623157E309) = true +== (0.22250738585072014E~307, ~0.17976931348623157E309) = false +?= (0.22250738585072014E~307, ~0.17976931348623157E309) = false +< (0.22250738585072014E~307, ~0.8988465674311579E308) = false +> (0.22250738585072014E~307, ~0.8988465674311579E308) = true +== (0.22250738585072014E~307, ~0.8988465674311579E308) = false +?= (0.22250738585072014E~307, ~0.8988465674311579E308) = false +< (0.22250738585072014E~307, ~0.123E4) = false +> (0.22250738585072014E~307, ~0.123E4) = true +== (0.22250738585072014E~307, ~0.123E4) = false +?= (0.22250738585072014E~307, ~0.123E4) = false +< (0.22250738585072014E~307, ~0.123E2) = false +> (0.22250738585072014E~307, ~0.123E2) = true +== (0.22250738585072014E~307, ~0.123E2) = false +?= (0.22250738585072014E~307, ~0.123E2) = false +< (0.22250738585072014E~307, ~0.3141592653589793E1) = false +> (0.22250738585072014E~307, ~0.3141592653589793E1) = true +== (0.22250738585072014E~307, ~0.3141592653589793E1) = false +?= (0.22250738585072014E~307, ~0.3141592653589793E1) = false +< (0.22250738585072014E~307, ~0.2718281828459045E1) = false +> (0.22250738585072014E~307, ~0.2718281828459045E1) = true +== (0.22250738585072014E~307, ~0.2718281828459045E1) = false +?= (0.22250738585072014E~307, ~0.2718281828459045E1) = false +< (0.22250738585072014E~307, ~0.123E1) = false +> (0.22250738585072014E~307, ~0.123E1) = true +== (0.22250738585072014E~307, ~0.123E1) = false +?= (0.22250738585072014E~307, ~0.123E1) = false +< (0.22250738585072014E~307, ~0.123) = false +> (0.22250738585072014E~307, ~0.123) = true +== (0.22250738585072014E~307, ~0.123) = false +?= (0.22250738585072014E~307, ~0.123) = false +< (0.22250738585072014E~307, ~0.123E~2) = false +> (0.22250738585072014E~307, ~0.123E~2) = true +== (0.22250738585072014E~307, ~0.123E~2) = false +?= (0.22250738585072014E~307, ~0.123E~2) = false +< (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +> (0.22250738585072014E~307, ~0.22250738585072014E~307) = true +== (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +?= (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +< (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +> (0.22250738585072014E~307, ~0.11125369292536007E~307) = true +== (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +?= (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +< (0.22250738585072014E~307, ~0.5E~323) = false +> (0.22250738585072014E~307, ~0.5E~323) = true +== (0.22250738585072014E~307, ~0.5E~323) = false +?= (0.22250738585072014E~307, ~0.5E~323) = false +< (0.22250738585072014E~307, ~0.0) = false +> (0.22250738585072014E~307, ~0.0) = true +== (0.22250738585072014E~307, ~0.0) = false +?= (0.22250738585072014E~307, ~0.0) = false +< (0.11125369292536007E~307, 0.17976931348623157E309) = true +> (0.11125369292536007E~307, 0.17976931348623157E309) = false +== (0.11125369292536007E~307, 0.17976931348623157E309) = false +?= (0.11125369292536007E~307, 0.17976931348623157E309) = false +< (0.11125369292536007E~307, 0.8988465674311579E308) = true +> (0.11125369292536007E~307, 0.8988465674311579E308) = false +== (0.11125369292536007E~307, 0.8988465674311579E308) = false +?= (0.11125369292536007E~307, 0.8988465674311579E308) = false +< (0.11125369292536007E~307, 0.123E4) = true +> (0.11125369292536007E~307, 0.123E4) = false +== (0.11125369292536007E~307, 0.123E4) = false +?= (0.11125369292536007E~307, 0.123E4) = false +< (0.11125369292536007E~307, 0.123E2) = true +> (0.11125369292536007E~307, 0.123E2) = false +== (0.11125369292536007E~307, 0.123E2) = false +?= (0.11125369292536007E~307, 0.123E2) = false +< (0.11125369292536007E~307, 0.3141592653589793E1) = true +> (0.11125369292536007E~307, 0.3141592653589793E1) = false +== (0.11125369292536007E~307, 0.3141592653589793E1) = false +?= (0.11125369292536007E~307, 0.3141592653589793E1) = false +< (0.11125369292536007E~307, 0.2718281828459045E1) = true +> (0.11125369292536007E~307, 0.2718281828459045E1) = false +== (0.11125369292536007E~307, 0.2718281828459045E1) = false +?= (0.11125369292536007E~307, 0.2718281828459045E1) = false +< (0.11125369292536007E~307, 0.123E1) = true +> (0.11125369292536007E~307, 0.123E1) = false +== (0.11125369292536007E~307, 0.123E1) = false +?= (0.11125369292536007E~307, 0.123E1) = false +< (0.11125369292536007E~307, 0.123) = true +> (0.11125369292536007E~307, 0.123) = false +== (0.11125369292536007E~307, 0.123) = false +?= (0.11125369292536007E~307, 0.123) = false +< (0.11125369292536007E~307, 0.123E~2) = true +> (0.11125369292536007E~307, 0.123E~2) = false +== (0.11125369292536007E~307, 0.123E~2) = false +?= (0.11125369292536007E~307, 0.123E~2) = false +< (0.11125369292536007E~307, 0.22250738585072014E~307) = true +> (0.11125369292536007E~307, 0.22250738585072014E~307) = false +== (0.11125369292536007E~307, 0.22250738585072014E~307) = false +?= (0.11125369292536007E~307, 0.22250738585072014E~307) = false +< (0.11125369292536007E~307, 0.11125369292536007E~307) = false +> (0.11125369292536007E~307, 0.11125369292536007E~307) = false +== (0.11125369292536007E~307, 0.11125369292536007E~307) = true +?= (0.11125369292536007E~307, 0.11125369292536007E~307) = true +< (0.11125369292536007E~307, 0.5E~323) = false +> (0.11125369292536007E~307, 0.5E~323) = true +== (0.11125369292536007E~307, 0.5E~323) = false +?= (0.11125369292536007E~307, 0.5E~323) = false +< (0.11125369292536007E~307, 0.0) = false +> (0.11125369292536007E~307, 0.0) = true +== (0.11125369292536007E~307, 0.0) = false +?= (0.11125369292536007E~307, 0.0) = false +< (0.11125369292536007E~307, ~0.17976931348623157E309) = false +> (0.11125369292536007E~307, ~0.17976931348623157E309) = true +== (0.11125369292536007E~307, ~0.17976931348623157E309) = false +?= (0.11125369292536007E~307, ~0.17976931348623157E309) = false +< (0.11125369292536007E~307, ~0.8988465674311579E308) = false +> (0.11125369292536007E~307, ~0.8988465674311579E308) = true +== (0.11125369292536007E~307, ~0.8988465674311579E308) = false +?= (0.11125369292536007E~307, ~0.8988465674311579E308) = false +< (0.11125369292536007E~307, ~0.123E4) = false +> (0.11125369292536007E~307, ~0.123E4) = true +== (0.11125369292536007E~307, ~0.123E4) = false +?= (0.11125369292536007E~307, ~0.123E4) = false +< (0.11125369292536007E~307, ~0.123E2) = false +> (0.11125369292536007E~307, ~0.123E2) = true +== (0.11125369292536007E~307, ~0.123E2) = false +?= (0.11125369292536007E~307, ~0.123E2) = false +< (0.11125369292536007E~307, ~0.3141592653589793E1) = false +> (0.11125369292536007E~307, ~0.3141592653589793E1) = true +== (0.11125369292536007E~307, ~0.3141592653589793E1) = false +?= (0.11125369292536007E~307, ~0.3141592653589793E1) = false +< (0.11125369292536007E~307, ~0.2718281828459045E1) = false +> (0.11125369292536007E~307, ~0.2718281828459045E1) = true +== (0.11125369292536007E~307, ~0.2718281828459045E1) = false +?= (0.11125369292536007E~307, ~0.2718281828459045E1) = false +< (0.11125369292536007E~307, ~0.123E1) = false +> (0.11125369292536007E~307, ~0.123E1) = true +== (0.11125369292536007E~307, ~0.123E1) = false +?= (0.11125369292536007E~307, ~0.123E1) = false +< (0.11125369292536007E~307, ~0.123) = false +> (0.11125369292536007E~307, ~0.123) = true +== (0.11125369292536007E~307, ~0.123) = false +?= (0.11125369292536007E~307, ~0.123) = false +< (0.11125369292536007E~307, ~0.123E~2) = false +> (0.11125369292536007E~307, ~0.123E~2) = true +== (0.11125369292536007E~307, ~0.123E~2) = false +?= (0.11125369292536007E~307, ~0.123E~2) = false +< (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +> (0.11125369292536007E~307, ~0.22250738585072014E~307) = true +== (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +?= (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +< (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +> (0.11125369292536007E~307, ~0.11125369292536007E~307) = true +== (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +?= (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +< (0.11125369292536007E~307, ~0.5E~323) = false +> (0.11125369292536007E~307, ~0.5E~323) = true +== (0.11125369292536007E~307, ~0.5E~323) = false +?= (0.11125369292536007E~307, ~0.5E~323) = false +< (0.11125369292536007E~307, ~0.0) = false +> (0.11125369292536007E~307, ~0.0) = true +== (0.11125369292536007E~307, ~0.0) = false +?= (0.11125369292536007E~307, ~0.0) = false +< (0.5E~323, 0.17976931348623157E309) = true +> (0.5E~323, 0.17976931348623157E309) = false +== (0.5E~323, 0.17976931348623157E309) = false +?= (0.5E~323, 0.17976931348623157E309) = false +< (0.5E~323, 0.8988465674311579E308) = true +> (0.5E~323, 0.8988465674311579E308) = false +== (0.5E~323, 0.8988465674311579E308) = false +?= (0.5E~323, 0.8988465674311579E308) = false +< (0.5E~323, 0.123E4) = true +> (0.5E~323, 0.123E4) = false +== (0.5E~323, 0.123E4) = false +?= (0.5E~323, 0.123E4) = false +< (0.5E~323, 0.123E2) = true +> (0.5E~323, 0.123E2) = false +== (0.5E~323, 0.123E2) = false +?= (0.5E~323, 0.123E2) = false +< (0.5E~323, 0.3141592653589793E1) = true +> (0.5E~323, 0.3141592653589793E1) = false +== (0.5E~323, 0.3141592653589793E1) = false +?= (0.5E~323, 0.3141592653589793E1) = false +< (0.5E~323, 0.2718281828459045E1) = true +> (0.5E~323, 0.2718281828459045E1) = false +== (0.5E~323, 0.2718281828459045E1) = false +?= (0.5E~323, 0.2718281828459045E1) = false +< (0.5E~323, 0.123E1) = true +> (0.5E~323, 0.123E1) = false +== (0.5E~323, 0.123E1) = false +?= (0.5E~323, 0.123E1) = false +< (0.5E~323, 0.123) = true +> (0.5E~323, 0.123) = false +== (0.5E~323, 0.123) = false +?= (0.5E~323, 0.123) = false +< (0.5E~323, 0.123E~2) = true +> (0.5E~323, 0.123E~2) = false +== (0.5E~323, 0.123E~2) = false +?= (0.5E~323, 0.123E~2) = false +< (0.5E~323, 0.22250738585072014E~307) = true +> (0.5E~323, 0.22250738585072014E~307) = false +== (0.5E~323, 0.22250738585072014E~307) = false +?= (0.5E~323, 0.22250738585072014E~307) = false +< (0.5E~323, 0.11125369292536007E~307) = true +> (0.5E~323, 0.11125369292536007E~307) = false +== (0.5E~323, 0.11125369292536007E~307) = false +?= (0.5E~323, 0.11125369292536007E~307) = false +< (0.5E~323, 0.5E~323) = false +> (0.5E~323, 0.5E~323) = false +== (0.5E~323, 0.5E~323) = true +?= (0.5E~323, 0.5E~323) = true +< (0.5E~323, 0.0) = false +> (0.5E~323, 0.0) = true +== (0.5E~323, 0.0) = false +?= (0.5E~323, 0.0) = false +< (0.5E~323, ~0.17976931348623157E309) = false +> (0.5E~323, ~0.17976931348623157E309) = true +== (0.5E~323, ~0.17976931348623157E309) = false +?= (0.5E~323, ~0.17976931348623157E309) = false +< (0.5E~323, ~0.8988465674311579E308) = false +> (0.5E~323, ~0.8988465674311579E308) = true +== (0.5E~323, ~0.8988465674311579E308) = false +?= (0.5E~323, ~0.8988465674311579E308) = false +< (0.5E~323, ~0.123E4) = false +> (0.5E~323, ~0.123E4) = true +== (0.5E~323, ~0.123E4) = false +?= (0.5E~323, ~0.123E4) = false +< (0.5E~323, ~0.123E2) = false +> (0.5E~323, ~0.123E2) = true +== (0.5E~323, ~0.123E2) = false +?= (0.5E~323, ~0.123E2) = false +< (0.5E~323, ~0.3141592653589793E1) = false +> (0.5E~323, ~0.3141592653589793E1) = true +== (0.5E~323, ~0.3141592653589793E1) = false +?= (0.5E~323, ~0.3141592653589793E1) = false +< (0.5E~323, ~0.2718281828459045E1) = false +> (0.5E~323, ~0.2718281828459045E1) = true +== (0.5E~323, ~0.2718281828459045E1) = false +?= (0.5E~323, ~0.2718281828459045E1) = false +< (0.5E~323, ~0.123E1) = false +> (0.5E~323, ~0.123E1) = true +== (0.5E~323, ~0.123E1) = false +?= (0.5E~323, ~0.123E1) = false +< (0.5E~323, ~0.123) = false +> (0.5E~323, ~0.123) = true +== (0.5E~323, ~0.123) = false +?= (0.5E~323, ~0.123) = false +< (0.5E~323, ~0.123E~2) = false +> (0.5E~323, ~0.123E~2) = true +== (0.5E~323, ~0.123E~2) = false +?= (0.5E~323, ~0.123E~2) = false +< (0.5E~323, ~0.22250738585072014E~307) = false +> (0.5E~323, ~0.22250738585072014E~307) = true +== (0.5E~323, ~0.22250738585072014E~307) = false +?= (0.5E~323, ~0.22250738585072014E~307) = false +< (0.5E~323, ~0.11125369292536007E~307) = false +> (0.5E~323, ~0.11125369292536007E~307) = true +== (0.5E~323, ~0.11125369292536007E~307) = false +?= (0.5E~323, ~0.11125369292536007E~307) = false +< (0.5E~323, ~0.5E~323) = false +> (0.5E~323, ~0.5E~323) = true +== (0.5E~323, ~0.5E~323) = false +?= (0.5E~323, ~0.5E~323) = false +< (0.5E~323, ~0.0) = false +> (0.5E~323, ~0.0) = true +== (0.5E~323, ~0.0) = false +?= (0.5E~323, ~0.0) = false +< (0.0, 0.17976931348623157E309) = true +> (0.0, 0.17976931348623157E309) = false +== (0.0, 0.17976931348623157E309) = false +?= (0.0, 0.17976931348623157E309) = false +< (0.0, 0.8988465674311579E308) = true +> (0.0, 0.8988465674311579E308) = false +== (0.0, 0.8988465674311579E308) = false +?= (0.0, 0.8988465674311579E308) = false +< (0.0, 0.123E4) = true +> (0.0, 0.123E4) = false +== (0.0, 0.123E4) = false +?= (0.0, 0.123E4) = false +< (0.0, 0.123E2) = true +> (0.0, 0.123E2) = false +== (0.0, 0.123E2) = false +?= (0.0, 0.123E2) = false +< (0.0, 0.3141592653589793E1) = true +> (0.0, 0.3141592653589793E1) = false +== (0.0, 0.3141592653589793E1) = false +?= (0.0, 0.3141592653589793E1) = false +< (0.0, 0.2718281828459045E1) = true +> (0.0, 0.2718281828459045E1) = false +== (0.0, 0.2718281828459045E1) = false +?= (0.0, 0.2718281828459045E1) = false +< (0.0, 0.123E1) = true +> (0.0, 0.123E1) = false +== (0.0, 0.123E1) = false +?= (0.0, 0.123E1) = false +< (0.0, 0.123) = true +> (0.0, 0.123) = false +== (0.0, 0.123) = false +?= (0.0, 0.123) = false +< (0.0, 0.123E~2) = true +> (0.0, 0.123E~2) = false +== (0.0, 0.123E~2) = false +?= (0.0, 0.123E~2) = false +< (0.0, 0.22250738585072014E~307) = true +> (0.0, 0.22250738585072014E~307) = false +== (0.0, 0.22250738585072014E~307) = false +?= (0.0, 0.22250738585072014E~307) = false +< (0.0, 0.11125369292536007E~307) = true +> (0.0, 0.11125369292536007E~307) = false +== (0.0, 0.11125369292536007E~307) = false +?= (0.0, 0.11125369292536007E~307) = false +< (0.0, 0.5E~323) = true +> (0.0, 0.5E~323) = false +== (0.0, 0.5E~323) = false +?= (0.0, 0.5E~323) = false +< (0.0, 0.0) = false +> (0.0, 0.0) = false +== (0.0, 0.0) = true +?= (0.0, 0.0) = true +< (0.0, ~0.17976931348623157E309) = false +> (0.0, ~0.17976931348623157E309) = true +== (0.0, ~0.17976931348623157E309) = false +?= (0.0, ~0.17976931348623157E309) = false +< (0.0, ~0.8988465674311579E308) = false +> (0.0, ~0.8988465674311579E308) = true +== (0.0, ~0.8988465674311579E308) = false +?= (0.0, ~0.8988465674311579E308) = false +< (0.0, ~0.123E4) = false +> (0.0, ~0.123E4) = true +== (0.0, ~0.123E4) = false +?= (0.0, ~0.123E4) = false +< (0.0, ~0.123E2) = false +> (0.0, ~0.123E2) = true +== (0.0, ~0.123E2) = false +?= (0.0, ~0.123E2) = false +< (0.0, ~0.3141592653589793E1) = false +> (0.0, ~0.3141592653589793E1) = true +== (0.0, ~0.3141592653589793E1) = false +?= (0.0, ~0.3141592653589793E1) = false +< (0.0, ~0.2718281828459045E1) = false +> (0.0, ~0.2718281828459045E1) = true +== (0.0, ~0.2718281828459045E1) = false +?= (0.0, ~0.2718281828459045E1) = false +< (0.0, ~0.123E1) = false +> (0.0, ~0.123E1) = true +== (0.0, ~0.123E1) = false +?= (0.0, ~0.123E1) = false +< (0.0, ~0.123) = false +> (0.0, ~0.123) = true +== (0.0, ~0.123) = false +?= (0.0, ~0.123) = false +< (0.0, ~0.123E~2) = false +> (0.0, ~0.123E~2) = true +== (0.0, ~0.123E~2) = false +?= (0.0, ~0.123E~2) = false +< (0.0, ~0.22250738585072014E~307) = false +> (0.0, ~0.22250738585072014E~307) = true +== (0.0, ~0.22250738585072014E~307) = false +?= (0.0, ~0.22250738585072014E~307) = false +< (0.0, ~0.11125369292536007E~307) = false +> (0.0, ~0.11125369292536007E~307) = true +== (0.0, ~0.11125369292536007E~307) = false +?= (0.0, ~0.11125369292536007E~307) = false +< (0.0, ~0.5E~323) = false +> (0.0, ~0.5E~323) = true +== (0.0, ~0.5E~323) = false +?= (0.0, ~0.5E~323) = false +< (0.0, ~0.0) = false +> (0.0, ~0.0) = false +== (0.0, ~0.0) = true +?= (0.0, ~0.0) = true +< (~0.17976931348623157E309, 0.17976931348623157E309) = true +> (~0.17976931348623157E309, 0.17976931348623157E309) = false +== (~0.17976931348623157E309, 0.17976931348623157E309) = false +?= (~0.17976931348623157E309, 0.17976931348623157E309) = false +< (~0.17976931348623157E309, 0.8988465674311579E308) = true +> (~0.17976931348623157E309, 0.8988465674311579E308) = false +== (~0.17976931348623157E309, 0.8988465674311579E308) = false +?= (~0.17976931348623157E309, 0.8988465674311579E308) = false +< (~0.17976931348623157E309, 0.123E4) = true +> (~0.17976931348623157E309, 0.123E4) = false +== (~0.17976931348623157E309, 0.123E4) = false +?= (~0.17976931348623157E309, 0.123E4) = false +< (~0.17976931348623157E309, 0.123E2) = true +> (~0.17976931348623157E309, 0.123E2) = false +== (~0.17976931348623157E309, 0.123E2) = false +?= (~0.17976931348623157E309, 0.123E2) = false +< (~0.17976931348623157E309, 0.3141592653589793E1) = true +> (~0.17976931348623157E309, 0.3141592653589793E1) = false +== (~0.17976931348623157E309, 0.3141592653589793E1) = false +?= (~0.17976931348623157E309, 0.3141592653589793E1) = false +< (~0.17976931348623157E309, 0.2718281828459045E1) = true +> (~0.17976931348623157E309, 0.2718281828459045E1) = false +== (~0.17976931348623157E309, 0.2718281828459045E1) = false +?= (~0.17976931348623157E309, 0.2718281828459045E1) = false +< (~0.17976931348623157E309, 0.123E1) = true +> (~0.17976931348623157E309, 0.123E1) = false +== (~0.17976931348623157E309, 0.123E1) = false +?= (~0.17976931348623157E309, 0.123E1) = false +< (~0.17976931348623157E309, 0.123) = true +> (~0.17976931348623157E309, 0.123) = false +== (~0.17976931348623157E309, 0.123) = false +?= (~0.17976931348623157E309, 0.123) = false +< (~0.17976931348623157E309, 0.123E~2) = true +> (~0.17976931348623157E309, 0.123E~2) = false +== (~0.17976931348623157E309, 0.123E~2) = false +?= (~0.17976931348623157E309, 0.123E~2) = false +< (~0.17976931348623157E309, 0.22250738585072014E~307) = true +> (~0.17976931348623157E309, 0.22250738585072014E~307) = false +== (~0.17976931348623157E309, 0.22250738585072014E~307) = false +?= (~0.17976931348623157E309, 0.22250738585072014E~307) = false +< (~0.17976931348623157E309, 0.11125369292536007E~307) = true +> (~0.17976931348623157E309, 0.11125369292536007E~307) = false +== (~0.17976931348623157E309, 0.11125369292536007E~307) = false +?= (~0.17976931348623157E309, 0.11125369292536007E~307) = false +< (~0.17976931348623157E309, 0.5E~323) = true +> (~0.17976931348623157E309, 0.5E~323) = false +== (~0.17976931348623157E309, 0.5E~323) = false +?= (~0.17976931348623157E309, 0.5E~323) = false +< (~0.17976931348623157E309, 0.0) = true +> (~0.17976931348623157E309, 0.0) = false +== (~0.17976931348623157E309, 0.0) = false +?= (~0.17976931348623157E309, 0.0) = false +< (~0.17976931348623157E309, ~0.17976931348623157E309) = false +> (~0.17976931348623157E309, ~0.17976931348623157E309) = false +== (~0.17976931348623157E309, ~0.17976931348623157E309) = true +?= (~0.17976931348623157E309, ~0.17976931348623157E309) = true +< (~0.17976931348623157E309, ~0.8988465674311579E308) = true +> (~0.17976931348623157E309, ~0.8988465674311579E308) = false +== (~0.17976931348623157E309, ~0.8988465674311579E308) = false +?= (~0.17976931348623157E309, ~0.8988465674311579E308) = false +< (~0.17976931348623157E309, ~0.123E4) = true +> (~0.17976931348623157E309, ~0.123E4) = false +== (~0.17976931348623157E309, ~0.123E4) = false +?= (~0.17976931348623157E309, ~0.123E4) = false +< (~0.17976931348623157E309, ~0.123E2) = true +> (~0.17976931348623157E309, ~0.123E2) = false +== (~0.17976931348623157E309, ~0.123E2) = false +?= (~0.17976931348623157E309, ~0.123E2) = false +< (~0.17976931348623157E309, ~0.3141592653589793E1) = true +> (~0.17976931348623157E309, ~0.3141592653589793E1) = false +== (~0.17976931348623157E309, ~0.3141592653589793E1) = false +?= (~0.17976931348623157E309, ~0.3141592653589793E1) = false +< (~0.17976931348623157E309, ~0.2718281828459045E1) = true +> (~0.17976931348623157E309, ~0.2718281828459045E1) = false +== (~0.17976931348623157E309, ~0.2718281828459045E1) = false +?= (~0.17976931348623157E309, ~0.2718281828459045E1) = false +< (~0.17976931348623157E309, ~0.123E1) = true +> (~0.17976931348623157E309, ~0.123E1) = false +== (~0.17976931348623157E309, ~0.123E1) = false +?= (~0.17976931348623157E309, ~0.123E1) = false +< (~0.17976931348623157E309, ~0.123) = true +> (~0.17976931348623157E309, ~0.123) = false +== (~0.17976931348623157E309, ~0.123) = false +?= (~0.17976931348623157E309, ~0.123) = false +< (~0.17976931348623157E309, ~0.123E~2) = true +> (~0.17976931348623157E309, ~0.123E~2) = false +== (~0.17976931348623157E309, ~0.123E~2) = false +?= (~0.17976931348623157E309, ~0.123E~2) = false +< (~0.17976931348623157E309, ~0.22250738585072014E~307) = true +> (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +== (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +?= (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +< (~0.17976931348623157E309, ~0.11125369292536007E~307) = true +> (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +== (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +?= (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +< (~0.17976931348623157E309, ~0.5E~323) = true +> (~0.17976931348623157E309, ~0.5E~323) = false +== (~0.17976931348623157E309, ~0.5E~323) = false +?= (~0.17976931348623157E309, ~0.5E~323) = false +< (~0.17976931348623157E309, ~0.0) = true +> (~0.17976931348623157E309, ~0.0) = false +== (~0.17976931348623157E309, ~0.0) = false +?= (~0.17976931348623157E309, ~0.0) = false +< (~0.8988465674311579E308, 0.17976931348623157E309) = true +> (~0.8988465674311579E308, 0.17976931348623157E309) = false +== (~0.8988465674311579E308, 0.17976931348623157E309) = false +?= (~0.8988465674311579E308, 0.17976931348623157E309) = false +< (~0.8988465674311579E308, 0.8988465674311579E308) = true +> (~0.8988465674311579E308, 0.8988465674311579E308) = false +== (~0.8988465674311579E308, 0.8988465674311579E308) = false +?= (~0.8988465674311579E308, 0.8988465674311579E308) = false +< (~0.8988465674311579E308, 0.123E4) = true +> (~0.8988465674311579E308, 0.123E4) = false +== (~0.8988465674311579E308, 0.123E4) = false +?= (~0.8988465674311579E308, 0.123E4) = false +< (~0.8988465674311579E308, 0.123E2) = true +> (~0.8988465674311579E308, 0.123E2) = false +== (~0.8988465674311579E308, 0.123E2) = false +?= (~0.8988465674311579E308, 0.123E2) = false +< (~0.8988465674311579E308, 0.3141592653589793E1) = true +> (~0.8988465674311579E308, 0.3141592653589793E1) = false +== (~0.8988465674311579E308, 0.3141592653589793E1) = false +?= (~0.8988465674311579E308, 0.3141592653589793E1) = false +< (~0.8988465674311579E308, 0.2718281828459045E1) = true +> (~0.8988465674311579E308, 0.2718281828459045E1) = false +== (~0.8988465674311579E308, 0.2718281828459045E1) = false +?= (~0.8988465674311579E308, 0.2718281828459045E1) = false +< (~0.8988465674311579E308, 0.123E1) = true +> (~0.8988465674311579E308, 0.123E1) = false +== (~0.8988465674311579E308, 0.123E1) = false +?= (~0.8988465674311579E308, 0.123E1) = false +< (~0.8988465674311579E308, 0.123) = true +> (~0.8988465674311579E308, 0.123) = false +== (~0.8988465674311579E308, 0.123) = false +?= (~0.8988465674311579E308, 0.123) = false +< (~0.8988465674311579E308, 0.123E~2) = true +> (~0.8988465674311579E308, 0.123E~2) = false +== (~0.8988465674311579E308, 0.123E~2) = false +?= (~0.8988465674311579E308, 0.123E~2) = false +< (~0.8988465674311579E308, 0.22250738585072014E~307) = true +> (~0.8988465674311579E308, 0.22250738585072014E~307) = false +== (~0.8988465674311579E308, 0.22250738585072014E~307) = false +?= (~0.8988465674311579E308, 0.22250738585072014E~307) = false +< (~0.8988465674311579E308, 0.11125369292536007E~307) = true +> (~0.8988465674311579E308, 0.11125369292536007E~307) = false +== (~0.8988465674311579E308, 0.11125369292536007E~307) = false +?= (~0.8988465674311579E308, 0.11125369292536007E~307) = false +< (~0.8988465674311579E308, 0.5E~323) = true +> (~0.8988465674311579E308, 0.5E~323) = false +== (~0.8988465674311579E308, 0.5E~323) = false +?= (~0.8988465674311579E308, 0.5E~323) = false +< (~0.8988465674311579E308, 0.0) = true +> (~0.8988465674311579E308, 0.0) = false +== (~0.8988465674311579E308, 0.0) = false +?= (~0.8988465674311579E308, 0.0) = false +< (~0.8988465674311579E308, ~0.17976931348623157E309) = false +> (~0.8988465674311579E308, ~0.17976931348623157E309) = true +== (~0.8988465674311579E308, ~0.17976931348623157E309) = false +?= (~0.8988465674311579E308, ~0.17976931348623157E309) = false +< (~0.8988465674311579E308, ~0.8988465674311579E308) = false +> (~0.8988465674311579E308, ~0.8988465674311579E308) = false +== (~0.8988465674311579E308, ~0.8988465674311579E308) = true +?= (~0.8988465674311579E308, ~0.8988465674311579E308) = true +< (~0.8988465674311579E308, ~0.123E4) = true +> (~0.8988465674311579E308, ~0.123E4) = false +== (~0.8988465674311579E308, ~0.123E4) = false +?= (~0.8988465674311579E308, ~0.123E4) = false +< (~0.8988465674311579E308, ~0.123E2) = true +> (~0.8988465674311579E308, ~0.123E2) = false +== (~0.8988465674311579E308, ~0.123E2) = false +?= (~0.8988465674311579E308, ~0.123E2) = false +< (~0.8988465674311579E308, ~0.3141592653589793E1) = true +> (~0.8988465674311579E308, ~0.3141592653589793E1) = false +== (~0.8988465674311579E308, ~0.3141592653589793E1) = false +?= (~0.8988465674311579E308, ~0.3141592653589793E1) = false +< (~0.8988465674311579E308, ~0.2718281828459045E1) = true +> (~0.8988465674311579E308, ~0.2718281828459045E1) = false +== (~0.8988465674311579E308, ~0.2718281828459045E1) = false +?= (~0.8988465674311579E308, ~0.2718281828459045E1) = false +< (~0.8988465674311579E308, ~0.123E1) = true +> (~0.8988465674311579E308, ~0.123E1) = false +== (~0.8988465674311579E308, ~0.123E1) = false +?= (~0.8988465674311579E308, ~0.123E1) = false +< (~0.8988465674311579E308, ~0.123) = true +> (~0.8988465674311579E308, ~0.123) = false +== (~0.8988465674311579E308, ~0.123) = false +?= (~0.8988465674311579E308, ~0.123) = false +< (~0.8988465674311579E308, ~0.123E~2) = true +> (~0.8988465674311579E308, ~0.123E~2) = false +== (~0.8988465674311579E308, ~0.123E~2) = false +?= (~0.8988465674311579E308, ~0.123E~2) = false +< (~0.8988465674311579E308, ~0.22250738585072014E~307) = true +> (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +== (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +?= (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +< (~0.8988465674311579E308, ~0.11125369292536007E~307) = true +> (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +== (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +?= (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +< (~0.8988465674311579E308, ~0.5E~323) = true +> (~0.8988465674311579E308, ~0.5E~323) = false +== (~0.8988465674311579E308, ~0.5E~323) = false +?= (~0.8988465674311579E308, ~0.5E~323) = false +< (~0.8988465674311579E308, ~0.0) = true +> (~0.8988465674311579E308, ~0.0) = false +== (~0.8988465674311579E308, ~0.0) = false +?= (~0.8988465674311579E308, ~0.0) = false +< (~0.123E4, 0.17976931348623157E309) = true +> (~0.123E4, 0.17976931348623157E309) = false +== (~0.123E4, 0.17976931348623157E309) = false +?= (~0.123E4, 0.17976931348623157E309) = false +< (~0.123E4, 0.8988465674311579E308) = true +> (~0.123E4, 0.8988465674311579E308) = false +== (~0.123E4, 0.8988465674311579E308) = false +?= (~0.123E4, 0.8988465674311579E308) = false +< (~0.123E4, 0.123E4) = true +> (~0.123E4, 0.123E4) = false +== (~0.123E4, 0.123E4) = false +?= (~0.123E4, 0.123E4) = false +< (~0.123E4, 0.123E2) = true +> (~0.123E4, 0.123E2) = false +== (~0.123E4, 0.123E2) = false +?= (~0.123E4, 0.123E2) = false +< (~0.123E4, 0.3141592653589793E1) = true +> (~0.123E4, 0.3141592653589793E1) = false +== (~0.123E4, 0.3141592653589793E1) = false +?= (~0.123E4, 0.3141592653589793E1) = false +< (~0.123E4, 0.2718281828459045E1) = true +> (~0.123E4, 0.2718281828459045E1) = false +== (~0.123E4, 0.2718281828459045E1) = false +?= (~0.123E4, 0.2718281828459045E1) = false +< (~0.123E4, 0.123E1) = true +> (~0.123E4, 0.123E1) = false +== (~0.123E4, 0.123E1) = false +?= (~0.123E4, 0.123E1) = false +< (~0.123E4, 0.123) = true +> (~0.123E4, 0.123) = false +== (~0.123E4, 0.123) = false +?= (~0.123E4, 0.123) = false +< (~0.123E4, 0.123E~2) = true +> (~0.123E4, 0.123E~2) = false +== (~0.123E4, 0.123E~2) = false +?= (~0.123E4, 0.123E~2) = false +< (~0.123E4, 0.22250738585072014E~307) = true +> (~0.123E4, 0.22250738585072014E~307) = false +== (~0.123E4, 0.22250738585072014E~307) = false +?= (~0.123E4, 0.22250738585072014E~307) = false +< (~0.123E4, 0.11125369292536007E~307) = true +> (~0.123E4, 0.11125369292536007E~307) = false +== (~0.123E4, 0.11125369292536007E~307) = false +?= (~0.123E4, 0.11125369292536007E~307) = false +< (~0.123E4, 0.5E~323) = true +> (~0.123E4, 0.5E~323) = false +== (~0.123E4, 0.5E~323) = false +?= (~0.123E4, 0.5E~323) = false +< (~0.123E4, 0.0) = true +> (~0.123E4, 0.0) = false +== (~0.123E4, 0.0) = false +?= (~0.123E4, 0.0) = false +< (~0.123E4, ~0.17976931348623157E309) = false +> (~0.123E4, ~0.17976931348623157E309) = true +== (~0.123E4, ~0.17976931348623157E309) = false +?= (~0.123E4, ~0.17976931348623157E309) = false +< (~0.123E4, ~0.8988465674311579E308) = false +> (~0.123E4, ~0.8988465674311579E308) = true +== (~0.123E4, ~0.8988465674311579E308) = false +?= (~0.123E4, ~0.8988465674311579E308) = false +< (~0.123E4, ~0.123E4) = false +> (~0.123E4, ~0.123E4) = false +== (~0.123E4, ~0.123E4) = true +?= (~0.123E4, ~0.123E4) = true +< (~0.123E4, ~0.123E2) = true +> (~0.123E4, ~0.123E2) = false +== (~0.123E4, ~0.123E2) = false +?= (~0.123E4, ~0.123E2) = false +< (~0.123E4, ~0.3141592653589793E1) = true +> (~0.123E4, ~0.3141592653589793E1) = false +== (~0.123E4, ~0.3141592653589793E1) = false +?= (~0.123E4, ~0.3141592653589793E1) = false +< (~0.123E4, ~0.2718281828459045E1) = true +> (~0.123E4, ~0.2718281828459045E1) = false +== (~0.123E4, ~0.2718281828459045E1) = false +?= (~0.123E4, ~0.2718281828459045E1) = false +< (~0.123E4, ~0.123E1) = true +> (~0.123E4, ~0.123E1) = false +== (~0.123E4, ~0.123E1) = false +?= (~0.123E4, ~0.123E1) = false +< (~0.123E4, ~0.123) = true +> (~0.123E4, ~0.123) = false +== (~0.123E4, ~0.123) = false +?= (~0.123E4, ~0.123) = false +< (~0.123E4, ~0.123E~2) = true +> (~0.123E4, ~0.123E~2) = false +== (~0.123E4, ~0.123E~2) = false +?= (~0.123E4, ~0.123E~2) = false +< (~0.123E4, ~0.22250738585072014E~307) = true +> (~0.123E4, ~0.22250738585072014E~307) = false +== (~0.123E4, ~0.22250738585072014E~307) = false +?= (~0.123E4, ~0.22250738585072014E~307) = false +< (~0.123E4, ~0.11125369292536007E~307) = true +> (~0.123E4, ~0.11125369292536007E~307) = false +== (~0.123E4, ~0.11125369292536007E~307) = false +?= (~0.123E4, ~0.11125369292536007E~307) = false +< (~0.123E4, ~0.5E~323) = true +> (~0.123E4, ~0.5E~323) = false +== (~0.123E4, ~0.5E~323) = false +?= (~0.123E4, ~0.5E~323) = false +< (~0.123E4, ~0.0) = true +> (~0.123E4, ~0.0) = false +== (~0.123E4, ~0.0) = false +?= (~0.123E4, ~0.0) = false +< (~0.123E2, 0.17976931348623157E309) = true +> (~0.123E2, 0.17976931348623157E309) = false +== (~0.123E2, 0.17976931348623157E309) = false +?= (~0.123E2, 0.17976931348623157E309) = false +< (~0.123E2, 0.8988465674311579E308) = true +> (~0.123E2, 0.8988465674311579E308) = false +== (~0.123E2, 0.8988465674311579E308) = false +?= (~0.123E2, 0.8988465674311579E308) = false +< (~0.123E2, 0.123E4) = true +> (~0.123E2, 0.123E4) = false +== (~0.123E2, 0.123E4) = false +?= (~0.123E2, 0.123E4) = false +< (~0.123E2, 0.123E2) = true +> (~0.123E2, 0.123E2) = false +== (~0.123E2, 0.123E2) = false +?= (~0.123E2, 0.123E2) = false +< (~0.123E2, 0.3141592653589793E1) = true +> (~0.123E2, 0.3141592653589793E1) = false +== (~0.123E2, 0.3141592653589793E1) = false +?= (~0.123E2, 0.3141592653589793E1) = false +< (~0.123E2, 0.2718281828459045E1) = true +> (~0.123E2, 0.2718281828459045E1) = false +== (~0.123E2, 0.2718281828459045E1) = false +?= (~0.123E2, 0.2718281828459045E1) = false +< (~0.123E2, 0.123E1) = true +> (~0.123E2, 0.123E1) = false +== (~0.123E2, 0.123E1) = false +?= (~0.123E2, 0.123E1) = false +< (~0.123E2, 0.123) = true +> (~0.123E2, 0.123) = false +== (~0.123E2, 0.123) = false +?= (~0.123E2, 0.123) = false +< (~0.123E2, 0.123E~2) = true +> (~0.123E2, 0.123E~2) = false +== (~0.123E2, 0.123E~2) = false +?= (~0.123E2, 0.123E~2) = false +< (~0.123E2, 0.22250738585072014E~307) = true +> (~0.123E2, 0.22250738585072014E~307) = false +== (~0.123E2, 0.22250738585072014E~307) = false +?= (~0.123E2, 0.22250738585072014E~307) = false +< (~0.123E2, 0.11125369292536007E~307) = true +> (~0.123E2, 0.11125369292536007E~307) = false +== (~0.123E2, 0.11125369292536007E~307) = false +?= (~0.123E2, 0.11125369292536007E~307) = false +< (~0.123E2, 0.5E~323) = true +> (~0.123E2, 0.5E~323) = false +== (~0.123E2, 0.5E~323) = false +?= (~0.123E2, 0.5E~323) = false +< (~0.123E2, 0.0) = true +> (~0.123E2, 0.0) = false +== (~0.123E2, 0.0) = false +?= (~0.123E2, 0.0) = false +< (~0.123E2, ~0.17976931348623157E309) = false +> (~0.123E2, ~0.17976931348623157E309) = true +== (~0.123E2, ~0.17976931348623157E309) = false +?= (~0.123E2, ~0.17976931348623157E309) = false +< (~0.123E2, ~0.8988465674311579E308) = false +> (~0.123E2, ~0.8988465674311579E308) = true +== (~0.123E2, ~0.8988465674311579E308) = false +?= (~0.123E2, ~0.8988465674311579E308) = false +< (~0.123E2, ~0.123E4) = false +> (~0.123E2, ~0.123E4) = true +== (~0.123E2, ~0.123E4) = false +?= (~0.123E2, ~0.123E4) = false +< (~0.123E2, ~0.123E2) = false +> (~0.123E2, ~0.123E2) = false +== (~0.123E2, ~0.123E2) = true +?= (~0.123E2, ~0.123E2) = true +< (~0.123E2, ~0.3141592653589793E1) = true +> (~0.123E2, ~0.3141592653589793E1) = false +== (~0.123E2, ~0.3141592653589793E1) = false +?= (~0.123E2, ~0.3141592653589793E1) = false +< (~0.123E2, ~0.2718281828459045E1) = true +> (~0.123E2, ~0.2718281828459045E1) = false +== (~0.123E2, ~0.2718281828459045E1) = false +?= (~0.123E2, ~0.2718281828459045E1) = false +< (~0.123E2, ~0.123E1) = true +> (~0.123E2, ~0.123E1) = false +== (~0.123E2, ~0.123E1) = false +?= (~0.123E2, ~0.123E1) = false +< (~0.123E2, ~0.123) = true +> (~0.123E2, ~0.123) = false +== (~0.123E2, ~0.123) = false +?= (~0.123E2, ~0.123) = false +< (~0.123E2, ~0.123E~2) = true +> (~0.123E2, ~0.123E~2) = false +== (~0.123E2, ~0.123E~2) = false +?= (~0.123E2, ~0.123E~2) = false +< (~0.123E2, ~0.22250738585072014E~307) = true +> (~0.123E2, ~0.22250738585072014E~307) = false +== (~0.123E2, ~0.22250738585072014E~307) = false +?= (~0.123E2, ~0.22250738585072014E~307) = false +< (~0.123E2, ~0.11125369292536007E~307) = true +> (~0.123E2, ~0.11125369292536007E~307) = false +== (~0.123E2, ~0.11125369292536007E~307) = false +?= (~0.123E2, ~0.11125369292536007E~307) = false +< (~0.123E2, ~0.5E~323) = true +> (~0.123E2, ~0.5E~323) = false +== (~0.123E2, ~0.5E~323) = false +?= (~0.123E2, ~0.5E~323) = false +< (~0.123E2, ~0.0) = true +> (~0.123E2, ~0.0) = false +== (~0.123E2, ~0.0) = false +?= (~0.123E2, ~0.0) = false +< (~0.3141592653589793E1, 0.17976931348623157E309) = true +> (~0.3141592653589793E1, 0.17976931348623157E309) = false +== (~0.3141592653589793E1, 0.17976931348623157E309) = false +?= (~0.3141592653589793E1, 0.17976931348623157E309) = false +< (~0.3141592653589793E1, 0.8988465674311579E308) = true +> (~0.3141592653589793E1, 0.8988465674311579E308) = false +== (~0.3141592653589793E1, 0.8988465674311579E308) = false +?= (~0.3141592653589793E1, 0.8988465674311579E308) = false +< (~0.3141592653589793E1, 0.123E4) = true +> (~0.3141592653589793E1, 0.123E4) = false +== (~0.3141592653589793E1, 0.123E4) = false +?= (~0.3141592653589793E1, 0.123E4) = false +< (~0.3141592653589793E1, 0.123E2) = true +> (~0.3141592653589793E1, 0.123E2) = false +== (~0.3141592653589793E1, 0.123E2) = false +?= (~0.3141592653589793E1, 0.123E2) = false +< (~0.3141592653589793E1, 0.3141592653589793E1) = true +> (~0.3141592653589793E1, 0.3141592653589793E1) = false +== (~0.3141592653589793E1, 0.3141592653589793E1) = false +?= (~0.3141592653589793E1, 0.3141592653589793E1) = false +< (~0.3141592653589793E1, 0.2718281828459045E1) = true +> (~0.3141592653589793E1, 0.2718281828459045E1) = false +== (~0.3141592653589793E1, 0.2718281828459045E1) = false +?= (~0.3141592653589793E1, 0.2718281828459045E1) = false +< (~0.3141592653589793E1, 0.123E1) = true +> (~0.3141592653589793E1, 0.123E1) = false +== (~0.3141592653589793E1, 0.123E1) = false +?= (~0.3141592653589793E1, 0.123E1) = false +< (~0.3141592653589793E1, 0.123) = true +> (~0.3141592653589793E1, 0.123) = false +== (~0.3141592653589793E1, 0.123) = false +?= (~0.3141592653589793E1, 0.123) = false +< (~0.3141592653589793E1, 0.123E~2) = true +> (~0.3141592653589793E1, 0.123E~2) = false +== (~0.3141592653589793E1, 0.123E~2) = false +?= (~0.3141592653589793E1, 0.123E~2) = false +< (~0.3141592653589793E1, 0.22250738585072014E~307) = true +> (~0.3141592653589793E1, 0.22250738585072014E~307) = false +== (~0.3141592653589793E1, 0.22250738585072014E~307) = false +?= (~0.3141592653589793E1, 0.22250738585072014E~307) = false +< (~0.3141592653589793E1, 0.11125369292536007E~307) = true +> (~0.3141592653589793E1, 0.11125369292536007E~307) = false +== (~0.3141592653589793E1, 0.11125369292536007E~307) = false +?= (~0.3141592653589793E1, 0.11125369292536007E~307) = false +< (~0.3141592653589793E1, 0.5E~323) = true +> (~0.3141592653589793E1, 0.5E~323) = false +== (~0.3141592653589793E1, 0.5E~323) = false +?= (~0.3141592653589793E1, 0.5E~323) = false +< (~0.3141592653589793E1, 0.0) = true +> (~0.3141592653589793E1, 0.0) = false +== (~0.3141592653589793E1, 0.0) = false +?= (~0.3141592653589793E1, 0.0) = false +< (~0.3141592653589793E1, ~0.17976931348623157E309) = false +> (~0.3141592653589793E1, ~0.17976931348623157E309) = true +== (~0.3141592653589793E1, ~0.17976931348623157E309) = false +?= (~0.3141592653589793E1, ~0.17976931348623157E309) = false +< (~0.3141592653589793E1, ~0.8988465674311579E308) = false +> (~0.3141592653589793E1, ~0.8988465674311579E308) = true +== (~0.3141592653589793E1, ~0.8988465674311579E308) = false +?= (~0.3141592653589793E1, ~0.8988465674311579E308) = false +< (~0.3141592653589793E1, ~0.123E4) = false +> (~0.3141592653589793E1, ~0.123E4) = true +== (~0.3141592653589793E1, ~0.123E4) = false +?= (~0.3141592653589793E1, ~0.123E4) = false +< (~0.3141592653589793E1, ~0.123E2) = false +> (~0.3141592653589793E1, ~0.123E2) = true +== (~0.3141592653589793E1, ~0.123E2) = false +?= (~0.3141592653589793E1, ~0.123E2) = false +< (~0.3141592653589793E1, ~0.3141592653589793E1) = false +> (~0.3141592653589793E1, ~0.3141592653589793E1) = false +== (~0.3141592653589793E1, ~0.3141592653589793E1) = true +?= (~0.3141592653589793E1, ~0.3141592653589793E1) = true +< (~0.3141592653589793E1, ~0.2718281828459045E1) = true +> (~0.3141592653589793E1, ~0.2718281828459045E1) = false +== (~0.3141592653589793E1, ~0.2718281828459045E1) = false +?= (~0.3141592653589793E1, ~0.2718281828459045E1) = false +< (~0.3141592653589793E1, ~0.123E1) = true +> (~0.3141592653589793E1, ~0.123E1) = false +== (~0.3141592653589793E1, ~0.123E1) = false +?= (~0.3141592653589793E1, ~0.123E1) = false +< (~0.3141592653589793E1, ~0.123) = true +> (~0.3141592653589793E1, ~0.123) = false +== (~0.3141592653589793E1, ~0.123) = false +?= (~0.3141592653589793E1, ~0.123) = false +< (~0.3141592653589793E1, ~0.123E~2) = true +> (~0.3141592653589793E1, ~0.123E~2) = false +== (~0.3141592653589793E1, ~0.123E~2) = false +?= (~0.3141592653589793E1, ~0.123E~2) = false +< (~0.3141592653589793E1, ~0.22250738585072014E~307) = true +> (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +== (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +?= (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +< (~0.3141592653589793E1, ~0.11125369292536007E~307) = true +> (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +== (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +?= (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +< (~0.3141592653589793E1, ~0.5E~323) = true +> (~0.3141592653589793E1, ~0.5E~323) = false +== (~0.3141592653589793E1, ~0.5E~323) = false +?= (~0.3141592653589793E1, ~0.5E~323) = false +< (~0.3141592653589793E1, ~0.0) = true +> (~0.3141592653589793E1, ~0.0) = false +== (~0.3141592653589793E1, ~0.0) = false +?= (~0.3141592653589793E1, ~0.0) = false +< (~0.2718281828459045E1, 0.17976931348623157E309) = true +> (~0.2718281828459045E1, 0.17976931348623157E309) = false +== (~0.2718281828459045E1, 0.17976931348623157E309) = false +?= (~0.2718281828459045E1, 0.17976931348623157E309) = false +< (~0.2718281828459045E1, 0.8988465674311579E308) = true +> (~0.2718281828459045E1, 0.8988465674311579E308) = false +== (~0.2718281828459045E1, 0.8988465674311579E308) = false +?= (~0.2718281828459045E1, 0.8988465674311579E308) = false +< (~0.2718281828459045E1, 0.123E4) = true +> (~0.2718281828459045E1, 0.123E4) = false +== (~0.2718281828459045E1, 0.123E4) = false +?= (~0.2718281828459045E1, 0.123E4) = false +< (~0.2718281828459045E1, 0.123E2) = true +> (~0.2718281828459045E1, 0.123E2) = false +== (~0.2718281828459045E1, 0.123E2) = false +?= (~0.2718281828459045E1, 0.123E2) = false +< (~0.2718281828459045E1, 0.3141592653589793E1) = true +> (~0.2718281828459045E1, 0.3141592653589793E1) = false +== (~0.2718281828459045E1, 0.3141592653589793E1) = false +?= (~0.2718281828459045E1, 0.3141592653589793E1) = false +< (~0.2718281828459045E1, 0.2718281828459045E1) = true +> (~0.2718281828459045E1, 0.2718281828459045E1) = false +== (~0.2718281828459045E1, 0.2718281828459045E1) = false +?= (~0.2718281828459045E1, 0.2718281828459045E1) = false +< (~0.2718281828459045E1, 0.123E1) = true +> (~0.2718281828459045E1, 0.123E1) = false +== (~0.2718281828459045E1, 0.123E1) = false +?= (~0.2718281828459045E1, 0.123E1) = false +< (~0.2718281828459045E1, 0.123) = true +> (~0.2718281828459045E1, 0.123) = false +== (~0.2718281828459045E1, 0.123) = false +?= (~0.2718281828459045E1, 0.123) = false +< (~0.2718281828459045E1, 0.123E~2) = true +> (~0.2718281828459045E1, 0.123E~2) = false +== (~0.2718281828459045E1, 0.123E~2) = false +?= (~0.2718281828459045E1, 0.123E~2) = false +< (~0.2718281828459045E1, 0.22250738585072014E~307) = true +> (~0.2718281828459045E1, 0.22250738585072014E~307) = false +== (~0.2718281828459045E1, 0.22250738585072014E~307) = false +?= (~0.2718281828459045E1, 0.22250738585072014E~307) = false +< (~0.2718281828459045E1, 0.11125369292536007E~307) = true +> (~0.2718281828459045E1, 0.11125369292536007E~307) = false +== (~0.2718281828459045E1, 0.11125369292536007E~307) = false +?= (~0.2718281828459045E1, 0.11125369292536007E~307) = false +< (~0.2718281828459045E1, 0.5E~323) = true +> (~0.2718281828459045E1, 0.5E~323) = false +== (~0.2718281828459045E1, 0.5E~323) = false +?= (~0.2718281828459045E1, 0.5E~323) = false +< (~0.2718281828459045E1, 0.0) = true +> (~0.2718281828459045E1, 0.0) = false +== (~0.2718281828459045E1, 0.0) = false +?= (~0.2718281828459045E1, 0.0) = false +< (~0.2718281828459045E1, ~0.17976931348623157E309) = false +> (~0.2718281828459045E1, ~0.17976931348623157E309) = true +== (~0.2718281828459045E1, ~0.17976931348623157E309) = false +?= (~0.2718281828459045E1, ~0.17976931348623157E309) = false +< (~0.2718281828459045E1, ~0.8988465674311579E308) = false +> (~0.2718281828459045E1, ~0.8988465674311579E308) = true +== (~0.2718281828459045E1, ~0.8988465674311579E308) = false +?= (~0.2718281828459045E1, ~0.8988465674311579E308) = false +< (~0.2718281828459045E1, ~0.123E4) = false +> (~0.2718281828459045E1, ~0.123E4) = true +== (~0.2718281828459045E1, ~0.123E4) = false +?= (~0.2718281828459045E1, ~0.123E4) = false +< (~0.2718281828459045E1, ~0.123E2) = false +> (~0.2718281828459045E1, ~0.123E2) = true +== (~0.2718281828459045E1, ~0.123E2) = false +?= (~0.2718281828459045E1, ~0.123E2) = false +< (~0.2718281828459045E1, ~0.3141592653589793E1) = false +> (~0.2718281828459045E1, ~0.3141592653589793E1) = true +== (~0.2718281828459045E1, ~0.3141592653589793E1) = false +?= (~0.2718281828459045E1, ~0.3141592653589793E1) = false +< (~0.2718281828459045E1, ~0.2718281828459045E1) = false +> (~0.2718281828459045E1, ~0.2718281828459045E1) = false +== (~0.2718281828459045E1, ~0.2718281828459045E1) = true +?= (~0.2718281828459045E1, ~0.2718281828459045E1) = true +< (~0.2718281828459045E1, ~0.123E1) = true +> (~0.2718281828459045E1, ~0.123E1) = false +== (~0.2718281828459045E1, ~0.123E1) = false +?= (~0.2718281828459045E1, ~0.123E1) = false +< (~0.2718281828459045E1, ~0.123) = true +> (~0.2718281828459045E1, ~0.123) = false +== (~0.2718281828459045E1, ~0.123) = false +?= (~0.2718281828459045E1, ~0.123) = false +< (~0.2718281828459045E1, ~0.123E~2) = true +> (~0.2718281828459045E1, ~0.123E~2) = false +== (~0.2718281828459045E1, ~0.123E~2) = false +?= (~0.2718281828459045E1, ~0.123E~2) = false +< (~0.2718281828459045E1, ~0.22250738585072014E~307) = true +> (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +== (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +?= (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +< (~0.2718281828459045E1, ~0.11125369292536007E~307) = true +> (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +== (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +?= (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +< (~0.2718281828459045E1, ~0.5E~323) = true +> (~0.2718281828459045E1, ~0.5E~323) = false +== (~0.2718281828459045E1, ~0.5E~323) = false +?= (~0.2718281828459045E1, ~0.5E~323) = false +< (~0.2718281828459045E1, ~0.0) = true +> (~0.2718281828459045E1, ~0.0) = false +== (~0.2718281828459045E1, ~0.0) = false +?= (~0.2718281828459045E1, ~0.0) = false +< (~0.123E1, 0.17976931348623157E309) = true +> (~0.123E1, 0.17976931348623157E309) = false +== (~0.123E1, 0.17976931348623157E309) = false +?= (~0.123E1, 0.17976931348623157E309) = false +< (~0.123E1, 0.8988465674311579E308) = true +> (~0.123E1, 0.8988465674311579E308) = false +== (~0.123E1, 0.8988465674311579E308) = false +?= (~0.123E1, 0.8988465674311579E308) = false +< (~0.123E1, 0.123E4) = true +> (~0.123E1, 0.123E4) = false +== (~0.123E1, 0.123E4) = false +?= (~0.123E1, 0.123E4) = false +< (~0.123E1, 0.123E2) = true +> (~0.123E1, 0.123E2) = false +== (~0.123E1, 0.123E2) = false +?= (~0.123E1, 0.123E2) = false +< (~0.123E1, 0.3141592653589793E1) = true +> (~0.123E1, 0.3141592653589793E1) = false +== (~0.123E1, 0.3141592653589793E1) = false +?= (~0.123E1, 0.3141592653589793E1) = false +< (~0.123E1, 0.2718281828459045E1) = true +> (~0.123E1, 0.2718281828459045E1) = false +== (~0.123E1, 0.2718281828459045E1) = false +?= (~0.123E1, 0.2718281828459045E1) = false +< (~0.123E1, 0.123E1) = true +> (~0.123E1, 0.123E1) = false +== (~0.123E1, 0.123E1) = false +?= (~0.123E1, 0.123E1) = false +< (~0.123E1, 0.123) = true +> (~0.123E1, 0.123) = false +== (~0.123E1, 0.123) = false +?= (~0.123E1, 0.123) = false +< (~0.123E1, 0.123E~2) = true +> (~0.123E1, 0.123E~2) = false +== (~0.123E1, 0.123E~2) = false +?= (~0.123E1, 0.123E~2) = false +< (~0.123E1, 0.22250738585072014E~307) = true +> (~0.123E1, 0.22250738585072014E~307) = false +== (~0.123E1, 0.22250738585072014E~307) = false +?= (~0.123E1, 0.22250738585072014E~307) = false +< (~0.123E1, 0.11125369292536007E~307) = true +> (~0.123E1, 0.11125369292536007E~307) = false +== (~0.123E1, 0.11125369292536007E~307) = false +?= (~0.123E1, 0.11125369292536007E~307) = false +< (~0.123E1, 0.5E~323) = true +> (~0.123E1, 0.5E~323) = false +== (~0.123E1, 0.5E~323) = false +?= (~0.123E1, 0.5E~323) = false +< (~0.123E1, 0.0) = true +> (~0.123E1, 0.0) = false +== (~0.123E1, 0.0) = false +?= (~0.123E1, 0.0) = false +< (~0.123E1, ~0.17976931348623157E309) = false +> (~0.123E1, ~0.17976931348623157E309) = true +== (~0.123E1, ~0.17976931348623157E309) = false +?= (~0.123E1, ~0.17976931348623157E309) = false +< (~0.123E1, ~0.8988465674311579E308) = false +> (~0.123E1, ~0.8988465674311579E308) = true +== (~0.123E1, ~0.8988465674311579E308) = false +?= (~0.123E1, ~0.8988465674311579E308) = false +< (~0.123E1, ~0.123E4) = false +> (~0.123E1, ~0.123E4) = true +== (~0.123E1, ~0.123E4) = false +?= (~0.123E1, ~0.123E4) = false +< (~0.123E1, ~0.123E2) = false +> (~0.123E1, ~0.123E2) = true +== (~0.123E1, ~0.123E2) = false +?= (~0.123E1, ~0.123E2) = false +< (~0.123E1, ~0.3141592653589793E1) = false +> (~0.123E1, ~0.3141592653589793E1) = true +== (~0.123E1, ~0.3141592653589793E1) = false +?= (~0.123E1, ~0.3141592653589793E1) = false +< (~0.123E1, ~0.2718281828459045E1) = false +> (~0.123E1, ~0.2718281828459045E1) = true +== (~0.123E1, ~0.2718281828459045E1) = false +?= (~0.123E1, ~0.2718281828459045E1) = false +< (~0.123E1, ~0.123E1) = false +> (~0.123E1, ~0.123E1) = false +== (~0.123E1, ~0.123E1) = true +?= (~0.123E1, ~0.123E1) = true +< (~0.123E1, ~0.123) = true +> (~0.123E1, ~0.123) = false +== (~0.123E1, ~0.123) = false +?= (~0.123E1, ~0.123) = false +< (~0.123E1, ~0.123E~2) = true +> (~0.123E1, ~0.123E~2) = false +== (~0.123E1, ~0.123E~2) = false +?= (~0.123E1, ~0.123E~2) = false +< (~0.123E1, ~0.22250738585072014E~307) = true +> (~0.123E1, ~0.22250738585072014E~307) = false +== (~0.123E1, ~0.22250738585072014E~307) = false +?= (~0.123E1, ~0.22250738585072014E~307) = false +< (~0.123E1, ~0.11125369292536007E~307) = true +> (~0.123E1, ~0.11125369292536007E~307) = false +== (~0.123E1, ~0.11125369292536007E~307) = false +?= (~0.123E1, ~0.11125369292536007E~307) = false +< (~0.123E1, ~0.5E~323) = true +> (~0.123E1, ~0.5E~323) = false +== (~0.123E1, ~0.5E~323) = false +?= (~0.123E1, ~0.5E~323) = false +< (~0.123E1, ~0.0) = true +> (~0.123E1, ~0.0) = false +== (~0.123E1, ~0.0) = false +?= (~0.123E1, ~0.0) = false +< (~0.123, 0.17976931348623157E309) = true +> (~0.123, 0.17976931348623157E309) = false +== (~0.123, 0.17976931348623157E309) = false +?= (~0.123, 0.17976931348623157E309) = false +< (~0.123, 0.8988465674311579E308) = true +> (~0.123, 0.8988465674311579E308) = false +== (~0.123, 0.8988465674311579E308) = false +?= (~0.123, 0.8988465674311579E308) = false +< (~0.123, 0.123E4) = true +> (~0.123, 0.123E4) = false +== (~0.123, 0.123E4) = false +?= (~0.123, 0.123E4) = false +< (~0.123, 0.123E2) = true +> (~0.123, 0.123E2) = false +== (~0.123, 0.123E2) = false +?= (~0.123, 0.123E2) = false +< (~0.123, 0.3141592653589793E1) = true +> (~0.123, 0.3141592653589793E1) = false +== (~0.123, 0.3141592653589793E1) = false +?= (~0.123, 0.3141592653589793E1) = false +< (~0.123, 0.2718281828459045E1) = true +> (~0.123, 0.2718281828459045E1) = false +== (~0.123, 0.2718281828459045E1) = false +?= (~0.123, 0.2718281828459045E1) = false +< (~0.123, 0.123E1) = true +> (~0.123, 0.123E1) = false +== (~0.123, 0.123E1) = false +?= (~0.123, 0.123E1) = false +< (~0.123, 0.123) = true +> (~0.123, 0.123) = false +== (~0.123, 0.123) = false +?= (~0.123, 0.123) = false +< (~0.123, 0.123E~2) = true +> (~0.123, 0.123E~2) = false +== (~0.123, 0.123E~2) = false +?= (~0.123, 0.123E~2) = false +< (~0.123, 0.22250738585072014E~307) = true +> (~0.123, 0.22250738585072014E~307) = false +== (~0.123, 0.22250738585072014E~307) = false +?= (~0.123, 0.22250738585072014E~307) = false +< (~0.123, 0.11125369292536007E~307) = true +> (~0.123, 0.11125369292536007E~307) = false +== (~0.123, 0.11125369292536007E~307) = false +?= (~0.123, 0.11125369292536007E~307) = false +< (~0.123, 0.5E~323) = true +> (~0.123, 0.5E~323) = false +== (~0.123, 0.5E~323) = false +?= (~0.123, 0.5E~323) = false +< (~0.123, 0.0) = true +> (~0.123, 0.0) = false +== (~0.123, 0.0) = false +?= (~0.123, 0.0) = false +< (~0.123, ~0.17976931348623157E309) = false +> (~0.123, ~0.17976931348623157E309) = true +== (~0.123, ~0.17976931348623157E309) = false +?= (~0.123, ~0.17976931348623157E309) = false +< (~0.123, ~0.8988465674311579E308) = false +> (~0.123, ~0.8988465674311579E308) = true +== (~0.123, ~0.8988465674311579E308) = false +?= (~0.123, ~0.8988465674311579E308) = false +< (~0.123, ~0.123E4) = false +> (~0.123, ~0.123E4) = true +== (~0.123, ~0.123E4) = false +?= (~0.123, ~0.123E4) = false +< (~0.123, ~0.123E2) = false +> (~0.123, ~0.123E2) = true +== (~0.123, ~0.123E2) = false +?= (~0.123, ~0.123E2) = false +< (~0.123, ~0.3141592653589793E1) = false +> (~0.123, ~0.3141592653589793E1) = true +== (~0.123, ~0.3141592653589793E1) = false +?= (~0.123, ~0.3141592653589793E1) = false +< (~0.123, ~0.2718281828459045E1) = false +> (~0.123, ~0.2718281828459045E1) = true +== (~0.123, ~0.2718281828459045E1) = false +?= (~0.123, ~0.2718281828459045E1) = false +< (~0.123, ~0.123E1) = false +> (~0.123, ~0.123E1) = true +== (~0.123, ~0.123E1) = false +?= (~0.123, ~0.123E1) = false +< (~0.123, ~0.123) = false +> (~0.123, ~0.123) = false +== (~0.123, ~0.123) = true +?= (~0.123, ~0.123) = true +< (~0.123, ~0.123E~2) = true +> (~0.123, ~0.123E~2) = false +== (~0.123, ~0.123E~2) = false +?= (~0.123, ~0.123E~2) = false +< (~0.123, ~0.22250738585072014E~307) = true +> (~0.123, ~0.22250738585072014E~307) = false +== (~0.123, ~0.22250738585072014E~307) = false +?= (~0.123, ~0.22250738585072014E~307) = false +< (~0.123, ~0.11125369292536007E~307) = true +> (~0.123, ~0.11125369292536007E~307) = false +== (~0.123, ~0.11125369292536007E~307) = false +?= (~0.123, ~0.11125369292536007E~307) = false +< (~0.123, ~0.5E~323) = true +> (~0.123, ~0.5E~323) = false +== (~0.123, ~0.5E~323) = false +?= (~0.123, ~0.5E~323) = false +< (~0.123, ~0.0) = true +> (~0.123, ~0.0) = false +== (~0.123, ~0.0) = false +?= (~0.123, ~0.0) = false +< (~0.123E~2, 0.17976931348623157E309) = true +> (~0.123E~2, 0.17976931348623157E309) = false +== (~0.123E~2, 0.17976931348623157E309) = false +?= (~0.123E~2, 0.17976931348623157E309) = false +< (~0.123E~2, 0.8988465674311579E308) = true +> (~0.123E~2, 0.8988465674311579E308) = false +== (~0.123E~2, 0.8988465674311579E308) = false +?= (~0.123E~2, 0.8988465674311579E308) = false +< (~0.123E~2, 0.123E4) = true +> (~0.123E~2, 0.123E4) = false +== (~0.123E~2, 0.123E4) = false +?= (~0.123E~2, 0.123E4) = false +< (~0.123E~2, 0.123E2) = true +> (~0.123E~2, 0.123E2) = false +== (~0.123E~2, 0.123E2) = false +?= (~0.123E~2, 0.123E2) = false +< (~0.123E~2, 0.3141592653589793E1) = true +> (~0.123E~2, 0.3141592653589793E1) = false +== (~0.123E~2, 0.3141592653589793E1) = false +?= (~0.123E~2, 0.3141592653589793E1) = false +< (~0.123E~2, 0.2718281828459045E1) = true +> (~0.123E~2, 0.2718281828459045E1) = false +== (~0.123E~2, 0.2718281828459045E1) = false +?= (~0.123E~2, 0.2718281828459045E1) = false +< (~0.123E~2, 0.123E1) = true +> (~0.123E~2, 0.123E1) = false +== (~0.123E~2, 0.123E1) = false +?= (~0.123E~2, 0.123E1) = false +< (~0.123E~2, 0.123) = true +> (~0.123E~2, 0.123) = false +== (~0.123E~2, 0.123) = false +?= (~0.123E~2, 0.123) = false +< (~0.123E~2, 0.123E~2) = true +> (~0.123E~2, 0.123E~2) = false +== (~0.123E~2, 0.123E~2) = false +?= (~0.123E~2, 0.123E~2) = false +< (~0.123E~2, 0.22250738585072014E~307) = true +> (~0.123E~2, 0.22250738585072014E~307) = false +== (~0.123E~2, 0.22250738585072014E~307) = false +?= (~0.123E~2, 0.22250738585072014E~307) = false +< (~0.123E~2, 0.11125369292536007E~307) = true +> (~0.123E~2, 0.11125369292536007E~307) = false +== (~0.123E~2, 0.11125369292536007E~307) = false +?= (~0.123E~2, 0.11125369292536007E~307) = false +< (~0.123E~2, 0.5E~323) = true +> (~0.123E~2, 0.5E~323) = false +== (~0.123E~2, 0.5E~323) = false +?= (~0.123E~2, 0.5E~323) = false +< (~0.123E~2, 0.0) = true +> (~0.123E~2, 0.0) = false +== (~0.123E~2, 0.0) = false +?= (~0.123E~2, 0.0) = false +< (~0.123E~2, ~0.17976931348623157E309) = false +> (~0.123E~2, ~0.17976931348623157E309) = true +== (~0.123E~2, ~0.17976931348623157E309) = false +?= (~0.123E~2, ~0.17976931348623157E309) = false +< (~0.123E~2, ~0.8988465674311579E308) = false +> (~0.123E~2, ~0.8988465674311579E308) = true +== (~0.123E~2, ~0.8988465674311579E308) = false +?= (~0.123E~2, ~0.8988465674311579E308) = false +< (~0.123E~2, ~0.123E4) = false +> (~0.123E~2, ~0.123E4) = true +== (~0.123E~2, ~0.123E4) = false +?= (~0.123E~2, ~0.123E4) = false +< (~0.123E~2, ~0.123E2) = false +> (~0.123E~2, ~0.123E2) = true +== (~0.123E~2, ~0.123E2) = false +?= (~0.123E~2, ~0.123E2) = false +< (~0.123E~2, ~0.3141592653589793E1) = false +> (~0.123E~2, ~0.3141592653589793E1) = true +== (~0.123E~2, ~0.3141592653589793E1) = false +?= (~0.123E~2, ~0.3141592653589793E1) = false +< (~0.123E~2, ~0.2718281828459045E1) = false +> (~0.123E~2, ~0.2718281828459045E1) = true +== (~0.123E~2, ~0.2718281828459045E1) = false +?= (~0.123E~2, ~0.2718281828459045E1) = false +< (~0.123E~2, ~0.123E1) = false +> (~0.123E~2, ~0.123E1) = true +== (~0.123E~2, ~0.123E1) = false +?= (~0.123E~2, ~0.123E1) = false +< (~0.123E~2, ~0.123) = false +> (~0.123E~2, ~0.123) = true +== (~0.123E~2, ~0.123) = false +?= (~0.123E~2, ~0.123) = false +< (~0.123E~2, ~0.123E~2) = false +> (~0.123E~2, ~0.123E~2) = false +== (~0.123E~2, ~0.123E~2) = true +?= (~0.123E~2, ~0.123E~2) = true +< (~0.123E~2, ~0.22250738585072014E~307) = true +> (~0.123E~2, ~0.22250738585072014E~307) = false +== (~0.123E~2, ~0.22250738585072014E~307) = false +?= (~0.123E~2, ~0.22250738585072014E~307) = false +< (~0.123E~2, ~0.11125369292536007E~307) = true +> (~0.123E~2, ~0.11125369292536007E~307) = false +== (~0.123E~2, ~0.11125369292536007E~307) = false +?= (~0.123E~2, ~0.11125369292536007E~307) = false +< (~0.123E~2, ~0.5E~323) = true +> (~0.123E~2, ~0.5E~323) = false +== (~0.123E~2, ~0.5E~323) = false +?= (~0.123E~2, ~0.5E~323) = false +< (~0.123E~2, ~0.0) = true +> (~0.123E~2, ~0.0) = false +== (~0.123E~2, ~0.0) = false +?= (~0.123E~2, ~0.0) = false +< (~0.22250738585072014E~307, 0.17976931348623157E309) = true +> (~0.22250738585072014E~307, 0.17976931348623157E309) = false +== (~0.22250738585072014E~307, 0.17976931348623157E309) = false +?= (~0.22250738585072014E~307, 0.17976931348623157E309) = false +< (~0.22250738585072014E~307, 0.8988465674311579E308) = true +> (~0.22250738585072014E~307, 0.8988465674311579E308) = false +== (~0.22250738585072014E~307, 0.8988465674311579E308) = false +?= (~0.22250738585072014E~307, 0.8988465674311579E308) = false +< (~0.22250738585072014E~307, 0.123E4) = true +> (~0.22250738585072014E~307, 0.123E4) = false +== (~0.22250738585072014E~307, 0.123E4) = false +?= (~0.22250738585072014E~307, 0.123E4) = false +< (~0.22250738585072014E~307, 0.123E2) = true +> (~0.22250738585072014E~307, 0.123E2) = false +== (~0.22250738585072014E~307, 0.123E2) = false +?= (~0.22250738585072014E~307, 0.123E2) = false +< (~0.22250738585072014E~307, 0.3141592653589793E1) = true +> (~0.22250738585072014E~307, 0.3141592653589793E1) = false +== (~0.22250738585072014E~307, 0.3141592653589793E1) = false +?= (~0.22250738585072014E~307, 0.3141592653589793E1) = false +< (~0.22250738585072014E~307, 0.2718281828459045E1) = true +> (~0.22250738585072014E~307, 0.2718281828459045E1) = false +== (~0.22250738585072014E~307, 0.2718281828459045E1) = false +?= (~0.22250738585072014E~307, 0.2718281828459045E1) = false +< (~0.22250738585072014E~307, 0.123E1) = true +> (~0.22250738585072014E~307, 0.123E1) = false +== (~0.22250738585072014E~307, 0.123E1) = false +?= (~0.22250738585072014E~307, 0.123E1) = false +< (~0.22250738585072014E~307, 0.123) = true +> (~0.22250738585072014E~307, 0.123) = false +== (~0.22250738585072014E~307, 0.123) = false +?= (~0.22250738585072014E~307, 0.123) = false +< (~0.22250738585072014E~307, 0.123E~2) = true +> (~0.22250738585072014E~307, 0.123E~2) = false +== (~0.22250738585072014E~307, 0.123E~2) = false +?= (~0.22250738585072014E~307, 0.123E~2) = false +< (~0.22250738585072014E~307, 0.22250738585072014E~307) = true +> (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +== (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +?= (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +< (~0.22250738585072014E~307, 0.11125369292536007E~307) = true +> (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +== (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +?= (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +< (~0.22250738585072014E~307, 0.5E~323) = true +> (~0.22250738585072014E~307, 0.5E~323) = false +== (~0.22250738585072014E~307, 0.5E~323) = false +?= (~0.22250738585072014E~307, 0.5E~323) = false +< (~0.22250738585072014E~307, 0.0) = true +> (~0.22250738585072014E~307, 0.0) = false +== (~0.22250738585072014E~307, 0.0) = false +?= (~0.22250738585072014E~307, 0.0) = false +< (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +> (~0.22250738585072014E~307, ~0.17976931348623157E309) = true +== (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +?= (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +< (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +> (~0.22250738585072014E~307, ~0.8988465674311579E308) = true +== (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +?= (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +< (~0.22250738585072014E~307, ~0.123E4) = false +> (~0.22250738585072014E~307, ~0.123E4) = true +== (~0.22250738585072014E~307, ~0.123E4) = false +?= (~0.22250738585072014E~307, ~0.123E4) = false +< (~0.22250738585072014E~307, ~0.123E2) = false +> (~0.22250738585072014E~307, ~0.123E2) = true +== (~0.22250738585072014E~307, ~0.123E2) = false +?= (~0.22250738585072014E~307, ~0.123E2) = false +< (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +> (~0.22250738585072014E~307, ~0.3141592653589793E1) = true +== (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +?= (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +< (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +> (~0.22250738585072014E~307, ~0.2718281828459045E1) = true +== (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +?= (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +< (~0.22250738585072014E~307, ~0.123E1) = false +> (~0.22250738585072014E~307, ~0.123E1) = true +== (~0.22250738585072014E~307, ~0.123E1) = false +?= (~0.22250738585072014E~307, ~0.123E1) = false +< (~0.22250738585072014E~307, ~0.123) = false +> (~0.22250738585072014E~307, ~0.123) = true +== (~0.22250738585072014E~307, ~0.123) = false +?= (~0.22250738585072014E~307, ~0.123) = false +< (~0.22250738585072014E~307, ~0.123E~2) = false +> (~0.22250738585072014E~307, ~0.123E~2) = true +== (~0.22250738585072014E~307, ~0.123E~2) = false +?= (~0.22250738585072014E~307, ~0.123E~2) = false +< (~0.22250738585072014E~307, ~0.22250738585072014E~307) = false +> (~0.22250738585072014E~307, ~0.22250738585072014E~307) = false +== (~0.22250738585072014E~307, ~0.22250738585072014E~307) = true +?= (~0.22250738585072014E~307, ~0.22250738585072014E~307) = true +< (~0.22250738585072014E~307, ~0.11125369292536007E~307) = true +> (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +== (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +?= (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +< (~0.22250738585072014E~307, ~0.5E~323) = true +> (~0.22250738585072014E~307, ~0.5E~323) = false +== (~0.22250738585072014E~307, ~0.5E~323) = false +?= (~0.22250738585072014E~307, ~0.5E~323) = false +< (~0.22250738585072014E~307, ~0.0) = true +> (~0.22250738585072014E~307, ~0.0) = false +== (~0.22250738585072014E~307, ~0.0) = false +?= (~0.22250738585072014E~307, ~0.0) = false +< (~0.11125369292536007E~307, 0.17976931348623157E309) = true +> (~0.11125369292536007E~307, 0.17976931348623157E309) = false +== (~0.11125369292536007E~307, 0.17976931348623157E309) = false +?= (~0.11125369292536007E~307, 0.17976931348623157E309) = false +< (~0.11125369292536007E~307, 0.8988465674311579E308) = true +> (~0.11125369292536007E~307, 0.8988465674311579E308) = false +== (~0.11125369292536007E~307, 0.8988465674311579E308) = false +?= (~0.11125369292536007E~307, 0.8988465674311579E308) = false +< (~0.11125369292536007E~307, 0.123E4) = true +> (~0.11125369292536007E~307, 0.123E4) = false +== (~0.11125369292536007E~307, 0.123E4) = false +?= (~0.11125369292536007E~307, 0.123E4) = false +< (~0.11125369292536007E~307, 0.123E2) = true +> (~0.11125369292536007E~307, 0.123E2) = false +== (~0.11125369292536007E~307, 0.123E2) = false +?= (~0.11125369292536007E~307, 0.123E2) = false +< (~0.11125369292536007E~307, 0.3141592653589793E1) = true +> (~0.11125369292536007E~307, 0.3141592653589793E1) = false +== (~0.11125369292536007E~307, 0.3141592653589793E1) = false +?= (~0.11125369292536007E~307, 0.3141592653589793E1) = false +< (~0.11125369292536007E~307, 0.2718281828459045E1) = true +> (~0.11125369292536007E~307, 0.2718281828459045E1) = false +== (~0.11125369292536007E~307, 0.2718281828459045E1) = false +?= (~0.11125369292536007E~307, 0.2718281828459045E1) = false +< (~0.11125369292536007E~307, 0.123E1) = true +> (~0.11125369292536007E~307, 0.123E1) = false +== (~0.11125369292536007E~307, 0.123E1) = false +?= (~0.11125369292536007E~307, 0.123E1) = false +< (~0.11125369292536007E~307, 0.123) = true +> (~0.11125369292536007E~307, 0.123) = false +== (~0.11125369292536007E~307, 0.123) = false +?= (~0.11125369292536007E~307, 0.123) = false +< (~0.11125369292536007E~307, 0.123E~2) = true +> (~0.11125369292536007E~307, 0.123E~2) = false +== (~0.11125369292536007E~307, 0.123E~2) = false +?= (~0.11125369292536007E~307, 0.123E~2) = false +< (~0.11125369292536007E~307, 0.22250738585072014E~307) = true +> (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +== (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +?= (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +< (~0.11125369292536007E~307, 0.11125369292536007E~307) = true +> (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +== (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +?= (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +< (~0.11125369292536007E~307, 0.5E~323) = true +> (~0.11125369292536007E~307, 0.5E~323) = false +== (~0.11125369292536007E~307, 0.5E~323) = false +?= (~0.11125369292536007E~307, 0.5E~323) = false +< (~0.11125369292536007E~307, 0.0) = true +> (~0.11125369292536007E~307, 0.0) = false +== (~0.11125369292536007E~307, 0.0) = false +?= (~0.11125369292536007E~307, 0.0) = false +< (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +> (~0.11125369292536007E~307, ~0.17976931348623157E309) = true +== (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +?= (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +< (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +> (~0.11125369292536007E~307, ~0.8988465674311579E308) = true +== (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +?= (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +< (~0.11125369292536007E~307, ~0.123E4) = false +> (~0.11125369292536007E~307, ~0.123E4) = true +== (~0.11125369292536007E~307, ~0.123E4) = false +?= (~0.11125369292536007E~307, ~0.123E4) = false +< (~0.11125369292536007E~307, ~0.123E2) = false +> (~0.11125369292536007E~307, ~0.123E2) = true +== (~0.11125369292536007E~307, ~0.123E2) = false +?= (~0.11125369292536007E~307, ~0.123E2) = false +< (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +> (~0.11125369292536007E~307, ~0.3141592653589793E1) = true +== (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +?= (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +< (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +> (~0.11125369292536007E~307, ~0.2718281828459045E1) = true +== (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +?= (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +< (~0.11125369292536007E~307, ~0.123E1) = false +> (~0.11125369292536007E~307, ~0.123E1) = true +== (~0.11125369292536007E~307, ~0.123E1) = false +?= (~0.11125369292536007E~307, ~0.123E1) = false +< (~0.11125369292536007E~307, ~0.123) = false +> (~0.11125369292536007E~307, ~0.123) = true +== (~0.11125369292536007E~307, ~0.123) = false +?= (~0.11125369292536007E~307, ~0.123) = false +< (~0.11125369292536007E~307, ~0.123E~2) = false +> (~0.11125369292536007E~307, ~0.123E~2) = true +== (~0.11125369292536007E~307, ~0.123E~2) = false +?= (~0.11125369292536007E~307, ~0.123E~2) = false +< (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +> (~0.11125369292536007E~307, ~0.22250738585072014E~307) = true +== (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +?= (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +< (~0.11125369292536007E~307, ~0.11125369292536007E~307) = false +> (~0.11125369292536007E~307, ~0.11125369292536007E~307) = false +== (~0.11125369292536007E~307, ~0.11125369292536007E~307) = true +?= (~0.11125369292536007E~307, ~0.11125369292536007E~307) = true +< (~0.11125369292536007E~307, ~0.5E~323) = true +> (~0.11125369292536007E~307, ~0.5E~323) = false +== (~0.11125369292536007E~307, ~0.5E~323) = false +?= (~0.11125369292536007E~307, ~0.5E~323) = false +< (~0.11125369292536007E~307, ~0.0) = true +> (~0.11125369292536007E~307, ~0.0) = false +== (~0.11125369292536007E~307, ~0.0) = false +?= (~0.11125369292536007E~307, ~0.0) = false +< (~0.5E~323, 0.17976931348623157E309) = true +> (~0.5E~323, 0.17976931348623157E309) = false +== (~0.5E~323, 0.17976931348623157E309) = false +?= (~0.5E~323, 0.17976931348623157E309) = false +< (~0.5E~323, 0.8988465674311579E308) = true +> (~0.5E~323, 0.8988465674311579E308) = false +== (~0.5E~323, 0.8988465674311579E308) = false +?= (~0.5E~323, 0.8988465674311579E308) = false +< (~0.5E~323, 0.123E4) = true +> (~0.5E~323, 0.123E4) = false +== (~0.5E~323, 0.123E4) = false +?= (~0.5E~323, 0.123E4) = false +< (~0.5E~323, 0.123E2) = true +> (~0.5E~323, 0.123E2) = false +== (~0.5E~323, 0.123E2) = false +?= (~0.5E~323, 0.123E2) = false +< (~0.5E~323, 0.3141592653589793E1) = true +> (~0.5E~323, 0.3141592653589793E1) = false +== (~0.5E~323, 0.3141592653589793E1) = false +?= (~0.5E~323, 0.3141592653589793E1) = false +< (~0.5E~323, 0.2718281828459045E1) = true +> (~0.5E~323, 0.2718281828459045E1) = false +== (~0.5E~323, 0.2718281828459045E1) = false +?= (~0.5E~323, 0.2718281828459045E1) = false +< (~0.5E~323, 0.123E1) = true +> (~0.5E~323, 0.123E1) = false +== (~0.5E~323, 0.123E1) = false +?= (~0.5E~323, 0.123E1) = false +< (~0.5E~323, 0.123) = true +> (~0.5E~323, 0.123) = false +== (~0.5E~323, 0.123) = false +?= (~0.5E~323, 0.123) = false +< (~0.5E~323, 0.123E~2) = true +> (~0.5E~323, 0.123E~2) = false +== (~0.5E~323, 0.123E~2) = false +?= (~0.5E~323, 0.123E~2) = false +< (~0.5E~323, 0.22250738585072014E~307) = true +> (~0.5E~323, 0.22250738585072014E~307) = false +== (~0.5E~323, 0.22250738585072014E~307) = false +?= (~0.5E~323, 0.22250738585072014E~307) = false +< (~0.5E~323, 0.11125369292536007E~307) = true +> (~0.5E~323, 0.11125369292536007E~307) = false +== (~0.5E~323, 0.11125369292536007E~307) = false +?= (~0.5E~323, 0.11125369292536007E~307) = false +< (~0.5E~323, 0.5E~323) = true +> (~0.5E~323, 0.5E~323) = false +== (~0.5E~323, 0.5E~323) = false +?= (~0.5E~323, 0.5E~323) = false +< (~0.5E~323, 0.0) = true +> (~0.5E~323, 0.0) = false +== (~0.5E~323, 0.0) = false +?= (~0.5E~323, 0.0) = false +< (~0.5E~323, ~0.17976931348623157E309) = false +> (~0.5E~323, ~0.17976931348623157E309) = true +== (~0.5E~323, ~0.17976931348623157E309) = false +?= (~0.5E~323, ~0.17976931348623157E309) = false +< (~0.5E~323, ~0.8988465674311579E308) = false +> (~0.5E~323, ~0.8988465674311579E308) = true +== (~0.5E~323, ~0.8988465674311579E308) = false +?= (~0.5E~323, ~0.8988465674311579E308) = false +< (~0.5E~323, ~0.123E4) = false +> (~0.5E~323, ~0.123E4) = true +== (~0.5E~323, ~0.123E4) = false +?= (~0.5E~323, ~0.123E4) = false +< (~0.5E~323, ~0.123E2) = false +> (~0.5E~323, ~0.123E2) = true +== (~0.5E~323, ~0.123E2) = false +?= (~0.5E~323, ~0.123E2) = false +< (~0.5E~323, ~0.3141592653589793E1) = false +> (~0.5E~323, ~0.3141592653589793E1) = true +== (~0.5E~323, ~0.3141592653589793E1) = false +?= (~0.5E~323, ~0.3141592653589793E1) = false +< (~0.5E~323, ~0.2718281828459045E1) = false +> (~0.5E~323, ~0.2718281828459045E1) = true +== (~0.5E~323, ~0.2718281828459045E1) = false +?= (~0.5E~323, ~0.2718281828459045E1) = false +< (~0.5E~323, ~0.123E1) = false +> (~0.5E~323, ~0.123E1) = true +== (~0.5E~323, ~0.123E1) = false +?= (~0.5E~323, ~0.123E1) = false +< (~0.5E~323, ~0.123) = false +> (~0.5E~323, ~0.123) = true +== (~0.5E~323, ~0.123) = false +?= (~0.5E~323, ~0.123) = false +< (~0.5E~323, ~0.123E~2) = false +> (~0.5E~323, ~0.123E~2) = true +== (~0.5E~323, ~0.123E~2) = false +?= (~0.5E~323, ~0.123E~2) = false +< (~0.5E~323, ~0.22250738585072014E~307) = false +> (~0.5E~323, ~0.22250738585072014E~307) = true +== (~0.5E~323, ~0.22250738585072014E~307) = false +?= (~0.5E~323, ~0.22250738585072014E~307) = false +< (~0.5E~323, ~0.11125369292536007E~307) = false +> (~0.5E~323, ~0.11125369292536007E~307) = true +== (~0.5E~323, ~0.11125369292536007E~307) = false +?= (~0.5E~323, ~0.11125369292536007E~307) = false +< (~0.5E~323, ~0.5E~323) = false +> (~0.5E~323, ~0.5E~323) = false +== (~0.5E~323, ~0.5E~323) = true +?= (~0.5E~323, ~0.5E~323) = true +< (~0.5E~323, ~0.0) = true +> (~0.5E~323, ~0.0) = false +== (~0.5E~323, ~0.0) = false +?= (~0.5E~323, ~0.0) = false +< (~0.0, 0.17976931348623157E309) = true +> (~0.0, 0.17976931348623157E309) = false +== (~0.0, 0.17976931348623157E309) = false +?= (~0.0, 0.17976931348623157E309) = false +< (~0.0, 0.8988465674311579E308) = true +> (~0.0, 0.8988465674311579E308) = false +== (~0.0, 0.8988465674311579E308) = false +?= (~0.0, 0.8988465674311579E308) = false +< (~0.0, 0.123E4) = true +> (~0.0, 0.123E4) = false +== (~0.0, 0.123E4) = false +?= (~0.0, 0.123E4) = false +< (~0.0, 0.123E2) = true +> (~0.0, 0.123E2) = false +== (~0.0, 0.123E2) = false +?= (~0.0, 0.123E2) = false +< (~0.0, 0.3141592653589793E1) = true +> (~0.0, 0.3141592653589793E1) = false +== (~0.0, 0.3141592653589793E1) = false +?= (~0.0, 0.3141592653589793E1) = false +< (~0.0, 0.2718281828459045E1) = true +> (~0.0, 0.2718281828459045E1) = false +== (~0.0, 0.2718281828459045E1) = false +?= (~0.0, 0.2718281828459045E1) = false +< (~0.0, 0.123E1) = true +> (~0.0, 0.123E1) = false +== (~0.0, 0.123E1) = false +?= (~0.0, 0.123E1) = false +< (~0.0, 0.123) = true +> (~0.0, 0.123) = false +== (~0.0, 0.123) = false +?= (~0.0, 0.123) = false +< (~0.0, 0.123E~2) = true +> (~0.0, 0.123E~2) = false +== (~0.0, 0.123E~2) = false +?= (~0.0, 0.123E~2) = false +< (~0.0, 0.22250738585072014E~307) = true +> (~0.0, 0.22250738585072014E~307) = false +== (~0.0, 0.22250738585072014E~307) = false +?= (~0.0, 0.22250738585072014E~307) = false +< (~0.0, 0.11125369292536007E~307) = true +> (~0.0, 0.11125369292536007E~307) = false +== (~0.0, 0.11125369292536007E~307) = false +?= (~0.0, 0.11125369292536007E~307) = false +< (~0.0, 0.5E~323) = true +> (~0.0, 0.5E~323) = false +== (~0.0, 0.5E~323) = false +?= (~0.0, 0.5E~323) = false +< (~0.0, 0.0) = false +> (~0.0, 0.0) = false +== (~0.0, 0.0) = true +?= (~0.0, 0.0) = true +< (~0.0, ~0.17976931348623157E309) = false +> (~0.0, ~0.17976931348623157E309) = true +== (~0.0, ~0.17976931348623157E309) = false +?= (~0.0, ~0.17976931348623157E309) = false +< (~0.0, ~0.8988465674311579E308) = false +> (~0.0, ~0.8988465674311579E308) = true +== (~0.0, ~0.8988465674311579E308) = false +?= (~0.0, ~0.8988465674311579E308) = false +< (~0.0, ~0.123E4) = false +> (~0.0, ~0.123E4) = true +== (~0.0, ~0.123E4) = false +?= (~0.0, ~0.123E4) = false +< (~0.0, ~0.123E2) = false +> (~0.0, ~0.123E2) = true +== (~0.0, ~0.123E2) = false +?= (~0.0, ~0.123E2) = false +< (~0.0, ~0.3141592653589793E1) = false +> (~0.0, ~0.3141592653589793E1) = true +== (~0.0, ~0.3141592653589793E1) = false +?= (~0.0, ~0.3141592653589793E1) = false +< (~0.0, ~0.2718281828459045E1) = false +> (~0.0, ~0.2718281828459045E1) = true +== (~0.0, ~0.2718281828459045E1) = false +?= (~0.0, ~0.2718281828459045E1) = false +< (~0.0, ~0.123E1) = false +> (~0.0, ~0.123E1) = true +== (~0.0, ~0.123E1) = false +?= (~0.0, ~0.123E1) = false +< (~0.0, ~0.123) = false +> (~0.0, ~0.123) = true +== (~0.0, ~0.123) = false +?= (~0.0, ~0.123) = false +< (~0.0, ~0.123E~2) = false +> (~0.0, ~0.123E~2) = true +== (~0.0, ~0.123E~2) = false +?= (~0.0, ~0.123E~2) = false +< (~0.0, ~0.22250738585072014E~307) = false +> (~0.0, ~0.22250738585072014E~307) = true +== (~0.0, ~0.22250738585072014E~307) = false +?= (~0.0, ~0.22250738585072014E~307) = false +< (~0.0, ~0.11125369292536007E~307) = false +> (~0.0, ~0.11125369292536007E~307) = true +== (~0.0, ~0.11125369292536007E~307) = false +?= (~0.0, ~0.11125369292536007E~307) = false +< (~0.0, ~0.5E~323) = false +> (~0.0, ~0.5E~323) = true +== (~0.0, ~0.5E~323) = false +?= (~0.0, ~0.5E~323) = false +< (~0.0, ~0.0) = false +> (~0.0, ~0.0) = false +== (~0.0, ~0.0) = true +?= (~0.0, ~0.0) = true + Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL +compare (0.17976931348623157E309, 0.17976931348623157E309) = EQUAL +compareReal (0.17976931348623157E309, 0.17976931348623157E309) = EQUAL +compare (0.17976931348623157E309, 0.8988465674311579E308) = GREATER +compareReal (0.17976931348623157E309, 0.8988465674311579E308) = GREATER +compare (0.17976931348623157E309, 0.123E4) = GREATER +compareReal (0.17976931348623157E309, 0.123E4) = GREATER +compare (0.17976931348623157E309, 0.123E2) = GREATER +compareReal (0.17976931348623157E309, 0.123E2) = GREATER +compare (0.17976931348623157E309, 0.3141592653589793E1) = GREATER +compareReal (0.17976931348623157E309, 0.3141592653589793E1) = GREATER +compare (0.17976931348623157E309, 0.2718281828459045E1) = GREATER +compareReal (0.17976931348623157E309, 0.2718281828459045E1) = GREATER +compare (0.17976931348623157E309, 0.123E1) = GREATER +compareReal (0.17976931348623157E309, 0.123E1) = GREATER +compare (0.17976931348623157E309, 0.123) = GREATER +compareReal (0.17976931348623157E309, 0.123) = GREATER +compare (0.17976931348623157E309, 0.123E~2) = GREATER +compareReal (0.17976931348623157E309, 0.123E~2) = GREATER +compare (0.17976931348623157E309, 0.22250738585072014E~307) = GREATER +compareReal (0.17976931348623157E309, 0.22250738585072014E~307) = GREATER +compare (0.17976931348623157E309, 0.11125369292536007E~307) = GREATER +compareReal (0.17976931348623157E309, 0.11125369292536007E~307) = GREATER +compare (0.17976931348623157E309, 0.5E~323) = GREATER +compareReal (0.17976931348623157E309, 0.5E~323) = GREATER +compare (0.17976931348623157E309, 0.0) = GREATER +compareReal (0.17976931348623157E309, 0.0) = GREATER +compare (0.17976931348623157E309, ~0.17976931348623157E309) = GREATER +compareReal (0.17976931348623157E309, ~0.17976931348623157E309) = GREATER +compare (0.17976931348623157E309, ~0.8988465674311579E308) = GREATER +compareReal (0.17976931348623157E309, ~0.8988465674311579E308) = GREATER +compare (0.17976931348623157E309, ~0.123E4) = GREATER +compareReal (0.17976931348623157E309, ~0.123E4) = GREATER +compare (0.17976931348623157E309, ~0.123E2) = GREATER +compareReal (0.17976931348623157E309, ~0.123E2) = GREATER +compare (0.17976931348623157E309, ~0.3141592653589793E1) = GREATER +compareReal (0.17976931348623157E309, ~0.3141592653589793E1) = GREATER +compare (0.17976931348623157E309, ~0.2718281828459045E1) = GREATER +compareReal (0.17976931348623157E309, ~0.2718281828459045E1) = GREATER +compare (0.17976931348623157E309, ~0.123E1) = GREATER +compareReal (0.17976931348623157E309, ~0.123E1) = GREATER +compare (0.17976931348623157E309, ~0.123) = GREATER +compareReal (0.17976931348623157E309, ~0.123) = GREATER +compare (0.17976931348623157E309, ~0.123E~2) = GREATER +compareReal (0.17976931348623157E309, ~0.123E~2) = GREATER +compare (0.17976931348623157E309, ~0.22250738585072014E~307) = GREATER +compareReal (0.17976931348623157E309, ~0.22250738585072014E~307) = GREATER +compare (0.17976931348623157E309, ~0.11125369292536007E~307) = GREATER +compareReal (0.17976931348623157E309, ~0.11125369292536007E~307) = GREATER +compare (0.17976931348623157E309, ~0.5E~323) = GREATER +compareReal (0.17976931348623157E309, ~0.5E~323) = GREATER +compare (0.17976931348623157E309, ~0.0) = GREATER +compareReal (0.17976931348623157E309, ~0.0) = GREATER +compare (0.8988465674311579E308, 0.17976931348623157E309) = LESS +compareReal (0.8988465674311579E308, 0.17976931348623157E309) = LESS +compare (0.8988465674311579E308, 0.8988465674311579E308) = EQUAL +compareReal (0.8988465674311579E308, 0.8988465674311579E308) = EQUAL +compare (0.8988465674311579E308, 0.123E4) = GREATER +compareReal (0.8988465674311579E308, 0.123E4) = GREATER +compare (0.8988465674311579E308, 0.123E2) = GREATER +compareReal (0.8988465674311579E308, 0.123E2) = GREATER +compare (0.8988465674311579E308, 0.3141592653589793E1) = GREATER +compareReal (0.8988465674311579E308, 0.3141592653589793E1) = GREATER +compare (0.8988465674311579E308, 0.2718281828459045E1) = GREATER +compareReal (0.8988465674311579E308, 0.2718281828459045E1) = GREATER +compare (0.8988465674311579E308, 0.123E1) = GREATER +compareReal (0.8988465674311579E308, 0.123E1) = GREATER +compare (0.8988465674311579E308, 0.123) = GREATER +compareReal (0.8988465674311579E308, 0.123) = GREATER +compare (0.8988465674311579E308, 0.123E~2) = GREATER +compareReal (0.8988465674311579E308, 0.123E~2) = GREATER +compare (0.8988465674311579E308, 0.22250738585072014E~307) = GREATER +compareReal (0.8988465674311579E308, 0.22250738585072014E~307) = GREATER +compare (0.8988465674311579E308, 0.11125369292536007E~307) = GREATER +compareReal (0.8988465674311579E308, 0.11125369292536007E~307) = GREATER +compare (0.8988465674311579E308, 0.5E~323) = GREATER +compareReal (0.8988465674311579E308, 0.5E~323) = GREATER +compare (0.8988465674311579E308, 0.0) = GREATER +compareReal (0.8988465674311579E308, 0.0) = GREATER +compare (0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compareReal (0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compare (0.8988465674311579E308, ~0.8988465674311579E308) = GREATER +compareReal (0.8988465674311579E308, ~0.8988465674311579E308) = GREATER +compare (0.8988465674311579E308, ~0.123E4) = GREATER +compareReal (0.8988465674311579E308, ~0.123E4) = GREATER +compare (0.8988465674311579E308, ~0.123E2) = GREATER +compareReal (0.8988465674311579E308, ~0.123E2) = GREATER +compare (0.8988465674311579E308, ~0.3141592653589793E1) = GREATER +compareReal (0.8988465674311579E308, ~0.3141592653589793E1) = GREATER +compare (0.8988465674311579E308, ~0.2718281828459045E1) = GREATER +compareReal (0.8988465674311579E308, ~0.2718281828459045E1) = GREATER +compare (0.8988465674311579E308, ~0.123E1) = GREATER +compareReal (0.8988465674311579E308, ~0.123E1) = GREATER +compare (0.8988465674311579E308, ~0.123) = GREATER +compareReal (0.8988465674311579E308, ~0.123) = GREATER +compare (0.8988465674311579E308, ~0.123E~2) = GREATER +compareReal (0.8988465674311579E308, ~0.123E~2) = GREATER +compare (0.8988465674311579E308, ~0.22250738585072014E~307) = GREATER +compareReal (0.8988465674311579E308, ~0.22250738585072014E~307) = GREATER +compare (0.8988465674311579E308, ~0.11125369292536007E~307) = GREATER +compareReal (0.8988465674311579E308, ~0.11125369292536007E~307) = GREATER +compare (0.8988465674311579E308, ~0.5E~323) = GREATER +compareReal (0.8988465674311579E308, ~0.5E~323) = GREATER +compare (0.8988465674311579E308, ~0.0) = GREATER +compareReal (0.8988465674311579E308, ~0.0) = GREATER +compare (0.123E4, 0.17976931348623157E309) = LESS +compareReal (0.123E4, 0.17976931348623157E309) = LESS +compare (0.123E4, 0.8988465674311579E308) = LESS +compareReal (0.123E4, 0.8988465674311579E308) = LESS +compare (0.123E4, 0.123E4) = EQUAL +compareReal (0.123E4, 0.123E4) = EQUAL +compare (0.123E4, 0.123E2) = GREATER +compareReal (0.123E4, 0.123E2) = GREATER +compare (0.123E4, 0.3141592653589793E1) = GREATER +compareReal (0.123E4, 0.3141592653589793E1) = GREATER +compare (0.123E4, 0.2718281828459045E1) = GREATER +compareReal (0.123E4, 0.2718281828459045E1) = GREATER +compare (0.123E4, 0.123E1) = GREATER +compareReal (0.123E4, 0.123E1) = GREATER +compare (0.123E4, 0.123) = GREATER +compareReal (0.123E4, 0.123) = GREATER +compare (0.123E4, 0.123E~2) = GREATER +compareReal (0.123E4, 0.123E~2) = GREATER +compare (0.123E4, 0.22250738585072014E~307) = GREATER +compareReal (0.123E4, 0.22250738585072014E~307) = GREATER +compare (0.123E4, 0.11125369292536007E~307) = GREATER +compareReal (0.123E4, 0.11125369292536007E~307) = GREATER +compare (0.123E4, 0.5E~323) = GREATER +compareReal (0.123E4, 0.5E~323) = GREATER +compare (0.123E4, 0.0) = GREATER +compareReal (0.123E4, 0.0) = GREATER +compare (0.123E4, ~0.17976931348623157E309) = GREATER +compareReal (0.123E4, ~0.17976931348623157E309) = GREATER +compare (0.123E4, ~0.8988465674311579E308) = GREATER +compareReal (0.123E4, ~0.8988465674311579E308) = GREATER +compare (0.123E4, ~0.123E4) = GREATER +compareReal (0.123E4, ~0.123E4) = GREATER +compare (0.123E4, ~0.123E2) = GREATER +compareReal (0.123E4, ~0.123E2) = GREATER +compare (0.123E4, ~0.3141592653589793E1) = GREATER +compareReal (0.123E4, ~0.3141592653589793E1) = GREATER +compare (0.123E4, ~0.2718281828459045E1) = GREATER +compareReal (0.123E4, ~0.2718281828459045E1) = GREATER +compare (0.123E4, ~0.123E1) = GREATER +compareReal (0.123E4, ~0.123E1) = GREATER +compare (0.123E4, ~0.123) = GREATER +compareReal (0.123E4, ~0.123) = GREATER +compare (0.123E4, ~0.123E~2) = GREATER +compareReal (0.123E4, ~0.123E~2) = GREATER +compare (0.123E4, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E4, ~0.22250738585072014E~307) = GREATER +compare (0.123E4, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E4, ~0.11125369292536007E~307) = GREATER +compare (0.123E4, ~0.5E~323) = GREATER +compareReal (0.123E4, ~0.5E~323) = GREATER +compare (0.123E4, ~0.0) = GREATER +compareReal (0.123E4, ~0.0) = GREATER +compare (0.123E2, 0.17976931348623157E309) = LESS +compareReal (0.123E2, 0.17976931348623157E309) = LESS +compare (0.123E2, 0.8988465674311579E308) = LESS +compareReal (0.123E2, 0.8988465674311579E308) = LESS +compare (0.123E2, 0.123E4) = LESS +compareReal (0.123E2, 0.123E4) = LESS +compare (0.123E2, 0.123E2) = EQUAL +compareReal (0.123E2, 0.123E2) = EQUAL +compare (0.123E2, 0.3141592653589793E1) = GREATER +compareReal (0.123E2, 0.3141592653589793E1) = GREATER +compare (0.123E2, 0.2718281828459045E1) = GREATER +compareReal (0.123E2, 0.2718281828459045E1) = GREATER +compare (0.123E2, 0.123E1) = GREATER +compareReal (0.123E2, 0.123E1) = GREATER +compare (0.123E2, 0.123) = GREATER +compareReal (0.123E2, 0.123) = GREATER +compare (0.123E2, 0.123E~2) = GREATER +compareReal (0.123E2, 0.123E~2) = GREATER +compare (0.123E2, 0.22250738585072014E~307) = GREATER +compareReal (0.123E2, 0.22250738585072014E~307) = GREATER +compare (0.123E2, 0.11125369292536007E~307) = GREATER +compareReal (0.123E2, 0.11125369292536007E~307) = GREATER +compare (0.123E2, 0.5E~323) = GREATER +compareReal (0.123E2, 0.5E~323) = GREATER +compare (0.123E2, 0.0) = GREATER +compareReal (0.123E2, 0.0) = GREATER +compare (0.123E2, ~0.17976931348623157E309) = GREATER +compareReal (0.123E2, ~0.17976931348623157E309) = GREATER +compare (0.123E2, ~0.8988465674311579E308) = GREATER +compareReal (0.123E2, ~0.8988465674311579E308) = GREATER +compare (0.123E2, ~0.123E4) = GREATER +compareReal (0.123E2, ~0.123E4) = GREATER +compare (0.123E2, ~0.123E2) = GREATER +compareReal (0.123E2, ~0.123E2) = GREATER +compare (0.123E2, ~0.3141592653589793E1) = GREATER +compareReal (0.123E2, ~0.3141592653589793E1) = GREATER +compare (0.123E2, ~0.2718281828459045E1) = GREATER +compareReal (0.123E2, ~0.2718281828459045E1) = GREATER +compare (0.123E2, ~0.123E1) = GREATER +compareReal (0.123E2, ~0.123E1) = GREATER +compare (0.123E2, ~0.123) = GREATER +compareReal (0.123E2, ~0.123) = GREATER +compare (0.123E2, ~0.123E~2) = GREATER +compareReal (0.123E2, ~0.123E~2) = GREATER +compare (0.123E2, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E2, ~0.22250738585072014E~307) = GREATER +compare (0.123E2, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E2, ~0.11125369292536007E~307) = GREATER +compare (0.123E2, ~0.5E~323) = GREATER +compareReal (0.123E2, ~0.5E~323) = GREATER +compare (0.123E2, ~0.0) = GREATER +compareReal (0.123E2, ~0.0) = GREATER +compare (0.3141592653589793E1, 0.17976931348623157E309) = LESS +compareReal (0.3141592653589793E1, 0.17976931348623157E309) = LESS +compare (0.3141592653589793E1, 0.8988465674311579E308) = LESS +compareReal (0.3141592653589793E1, 0.8988465674311579E308) = LESS +compare (0.3141592653589793E1, 0.123E4) = LESS +compareReal (0.3141592653589793E1, 0.123E4) = LESS +compare (0.3141592653589793E1, 0.123E2) = LESS +compareReal (0.3141592653589793E1, 0.123E2) = LESS +compare (0.3141592653589793E1, 0.3141592653589793E1) = EQUAL +compareReal (0.3141592653589793E1, 0.3141592653589793E1) = EQUAL +compare (0.3141592653589793E1, 0.2718281828459045E1) = GREATER +compareReal (0.3141592653589793E1, 0.2718281828459045E1) = GREATER +compare (0.3141592653589793E1, 0.123E1) = GREATER +compareReal (0.3141592653589793E1, 0.123E1) = GREATER +compare (0.3141592653589793E1, 0.123) = GREATER +compareReal (0.3141592653589793E1, 0.123) = GREATER +compare (0.3141592653589793E1, 0.123E~2) = GREATER +compareReal (0.3141592653589793E1, 0.123E~2) = GREATER +compare (0.3141592653589793E1, 0.22250738585072014E~307) = GREATER +compareReal (0.3141592653589793E1, 0.22250738585072014E~307) = GREATER +compare (0.3141592653589793E1, 0.11125369292536007E~307) = GREATER +compareReal (0.3141592653589793E1, 0.11125369292536007E~307) = GREATER +compare (0.3141592653589793E1, 0.5E~323) = GREATER +compareReal (0.3141592653589793E1, 0.5E~323) = GREATER +compare (0.3141592653589793E1, 0.0) = GREATER +compareReal (0.3141592653589793E1, 0.0) = GREATER +compare (0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compareReal (0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compare (0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compareReal (0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compare (0.3141592653589793E1, ~0.123E4) = GREATER +compareReal (0.3141592653589793E1, ~0.123E4) = GREATER +compare (0.3141592653589793E1, ~0.123E2) = GREATER +compareReal (0.3141592653589793E1, ~0.123E2) = GREATER +compare (0.3141592653589793E1, ~0.3141592653589793E1) = GREATER +compareReal (0.3141592653589793E1, ~0.3141592653589793E1) = GREATER +compare (0.3141592653589793E1, ~0.2718281828459045E1) = GREATER +compareReal (0.3141592653589793E1, ~0.2718281828459045E1) = GREATER +compare (0.3141592653589793E1, ~0.123E1) = GREATER +compareReal (0.3141592653589793E1, ~0.123E1) = GREATER +compare (0.3141592653589793E1, ~0.123) = GREATER +compareReal (0.3141592653589793E1, ~0.123) = GREATER +compare (0.3141592653589793E1, ~0.123E~2) = GREATER +compareReal (0.3141592653589793E1, ~0.123E~2) = GREATER +compare (0.3141592653589793E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.3141592653589793E1, ~0.22250738585072014E~307) = GREATER +compare (0.3141592653589793E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.3141592653589793E1, ~0.11125369292536007E~307) = GREATER +compare (0.3141592653589793E1, ~0.5E~323) = GREATER +compareReal (0.3141592653589793E1, ~0.5E~323) = GREATER +compare (0.3141592653589793E1, ~0.0) = GREATER +compareReal (0.3141592653589793E1, ~0.0) = GREATER +compare (0.2718281828459045E1, 0.17976931348623157E309) = LESS +compareReal (0.2718281828459045E1, 0.17976931348623157E309) = LESS +compare (0.2718281828459045E1, 0.8988465674311579E308) = LESS +compareReal (0.2718281828459045E1, 0.8988465674311579E308) = LESS +compare (0.2718281828459045E1, 0.123E4) = LESS +compareReal (0.2718281828459045E1, 0.123E4) = LESS +compare (0.2718281828459045E1, 0.123E2) = LESS +compareReal (0.2718281828459045E1, 0.123E2) = LESS +compare (0.2718281828459045E1, 0.3141592653589793E1) = LESS +compareReal (0.2718281828459045E1, 0.3141592653589793E1) = LESS +compare (0.2718281828459045E1, 0.2718281828459045E1) = EQUAL +compareReal (0.2718281828459045E1, 0.2718281828459045E1) = EQUAL +compare (0.2718281828459045E1, 0.123E1) = GREATER +compareReal (0.2718281828459045E1, 0.123E1) = GREATER +compare (0.2718281828459045E1, 0.123) = GREATER +compareReal (0.2718281828459045E1, 0.123) = GREATER +compare (0.2718281828459045E1, 0.123E~2) = GREATER +compareReal (0.2718281828459045E1, 0.123E~2) = GREATER +compare (0.2718281828459045E1, 0.22250738585072014E~307) = GREATER +compareReal (0.2718281828459045E1, 0.22250738585072014E~307) = GREATER +compare (0.2718281828459045E1, 0.11125369292536007E~307) = GREATER +compareReal (0.2718281828459045E1, 0.11125369292536007E~307) = GREATER +compare (0.2718281828459045E1, 0.5E~323) = GREATER +compareReal (0.2718281828459045E1, 0.5E~323) = GREATER +compare (0.2718281828459045E1, 0.0) = GREATER +compareReal (0.2718281828459045E1, 0.0) = GREATER +compare (0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compareReal (0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compare (0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compareReal (0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compare (0.2718281828459045E1, ~0.123E4) = GREATER +compareReal (0.2718281828459045E1, ~0.123E4) = GREATER +compare (0.2718281828459045E1, ~0.123E2) = GREATER +compareReal (0.2718281828459045E1, ~0.123E2) = GREATER +compare (0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compareReal (0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compare (0.2718281828459045E1, ~0.2718281828459045E1) = GREATER +compareReal (0.2718281828459045E1, ~0.2718281828459045E1) = GREATER +compare (0.2718281828459045E1, ~0.123E1) = GREATER +compareReal (0.2718281828459045E1, ~0.123E1) = GREATER +compare (0.2718281828459045E1, ~0.123) = GREATER +compareReal (0.2718281828459045E1, ~0.123) = GREATER +compare (0.2718281828459045E1, ~0.123E~2) = GREATER +compareReal (0.2718281828459045E1, ~0.123E~2) = GREATER +compare (0.2718281828459045E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.2718281828459045E1, ~0.22250738585072014E~307) = GREATER +compare (0.2718281828459045E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.2718281828459045E1, ~0.11125369292536007E~307) = GREATER +compare (0.2718281828459045E1, ~0.5E~323) = GREATER +compareReal (0.2718281828459045E1, ~0.5E~323) = GREATER +compare (0.2718281828459045E1, ~0.0) = GREATER +compareReal (0.2718281828459045E1, ~0.0) = GREATER +compare (0.123E1, 0.17976931348623157E309) = LESS +compareReal (0.123E1, 0.17976931348623157E309) = LESS +compare (0.123E1, 0.8988465674311579E308) = LESS +compareReal (0.123E1, 0.8988465674311579E308) = LESS +compare (0.123E1, 0.123E4) = LESS +compareReal (0.123E1, 0.123E4) = LESS +compare (0.123E1, 0.123E2) = LESS +compareReal (0.123E1, 0.123E2) = LESS +compare (0.123E1, 0.3141592653589793E1) = LESS +compareReal (0.123E1, 0.3141592653589793E1) = LESS +compare (0.123E1, 0.2718281828459045E1) = LESS +compareReal (0.123E1, 0.2718281828459045E1) = LESS +compare (0.123E1, 0.123E1) = EQUAL +compareReal (0.123E1, 0.123E1) = EQUAL +compare (0.123E1, 0.123) = GREATER +compareReal (0.123E1, 0.123) = GREATER +compare (0.123E1, 0.123E~2) = GREATER +compareReal (0.123E1, 0.123E~2) = GREATER +compare (0.123E1, 0.22250738585072014E~307) = GREATER +compareReal (0.123E1, 0.22250738585072014E~307) = GREATER +compare (0.123E1, 0.11125369292536007E~307) = GREATER +compareReal (0.123E1, 0.11125369292536007E~307) = GREATER +compare (0.123E1, 0.5E~323) = GREATER +compareReal (0.123E1, 0.5E~323) = GREATER +compare (0.123E1, 0.0) = GREATER +compareReal (0.123E1, 0.0) = GREATER +compare (0.123E1, ~0.17976931348623157E309) = GREATER +compareReal (0.123E1, ~0.17976931348623157E309) = GREATER +compare (0.123E1, ~0.8988465674311579E308) = GREATER +compareReal (0.123E1, ~0.8988465674311579E308) = GREATER +compare (0.123E1, ~0.123E4) = GREATER +compareReal (0.123E1, ~0.123E4) = GREATER +compare (0.123E1, ~0.123E2) = GREATER +compareReal (0.123E1, ~0.123E2) = GREATER +compare (0.123E1, ~0.3141592653589793E1) = GREATER +compareReal (0.123E1, ~0.3141592653589793E1) = GREATER +compare (0.123E1, ~0.2718281828459045E1) = GREATER +compareReal (0.123E1, ~0.2718281828459045E1) = GREATER +compare (0.123E1, ~0.123E1) = GREATER +compareReal (0.123E1, ~0.123E1) = GREATER +compare (0.123E1, ~0.123) = GREATER +compareReal (0.123E1, ~0.123) = GREATER +compare (0.123E1, ~0.123E~2) = GREATER +compareReal (0.123E1, ~0.123E~2) = GREATER +compare (0.123E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E1, ~0.22250738585072014E~307) = GREATER +compare (0.123E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E1, ~0.11125369292536007E~307) = GREATER +compare (0.123E1, ~0.5E~323) = GREATER +compareReal (0.123E1, ~0.5E~323) = GREATER +compare (0.123E1, ~0.0) = GREATER +compareReal (0.123E1, ~0.0) = GREATER +compare (0.123, 0.17976931348623157E309) = LESS +compareReal (0.123, 0.17976931348623157E309) = LESS +compare (0.123, 0.8988465674311579E308) = LESS +compareReal (0.123, 0.8988465674311579E308) = LESS +compare (0.123, 0.123E4) = LESS +compareReal (0.123, 0.123E4) = LESS +compare (0.123, 0.123E2) = LESS +compareReal (0.123, 0.123E2) = LESS +compare (0.123, 0.3141592653589793E1) = LESS +compareReal (0.123, 0.3141592653589793E1) = LESS +compare (0.123, 0.2718281828459045E1) = LESS +compareReal (0.123, 0.2718281828459045E1) = LESS +compare (0.123, 0.123E1) = LESS +compareReal (0.123, 0.123E1) = LESS +compare (0.123, 0.123) = EQUAL +compareReal (0.123, 0.123) = EQUAL +compare (0.123, 0.123E~2) = GREATER +compareReal (0.123, 0.123E~2) = GREATER +compare (0.123, 0.22250738585072014E~307) = GREATER +compareReal (0.123, 0.22250738585072014E~307) = GREATER +compare (0.123, 0.11125369292536007E~307) = GREATER +compareReal (0.123, 0.11125369292536007E~307) = GREATER +compare (0.123, 0.5E~323) = GREATER +compareReal (0.123, 0.5E~323) = GREATER +compare (0.123, 0.0) = GREATER +compareReal (0.123, 0.0) = GREATER +compare (0.123, ~0.17976931348623157E309) = GREATER +compareReal (0.123, ~0.17976931348623157E309) = GREATER +compare (0.123, ~0.8988465674311579E308) = GREATER +compareReal (0.123, ~0.8988465674311579E308) = GREATER +compare (0.123, ~0.123E4) = GREATER +compareReal (0.123, ~0.123E4) = GREATER +compare (0.123, ~0.123E2) = GREATER +compareReal (0.123, ~0.123E2) = GREATER +compare (0.123, ~0.3141592653589793E1) = GREATER +compareReal (0.123, ~0.3141592653589793E1) = GREATER +compare (0.123, ~0.2718281828459045E1) = GREATER +compareReal (0.123, ~0.2718281828459045E1) = GREATER +compare (0.123, ~0.123E1) = GREATER +compareReal (0.123, ~0.123E1) = GREATER +compare (0.123, ~0.123) = GREATER +compareReal (0.123, ~0.123) = GREATER +compare (0.123, ~0.123E~2) = GREATER +compareReal (0.123, ~0.123E~2) = GREATER +compare (0.123, ~0.22250738585072014E~307) = GREATER +compareReal (0.123, ~0.22250738585072014E~307) = GREATER +compare (0.123, ~0.11125369292536007E~307) = GREATER +compareReal (0.123, ~0.11125369292536007E~307) = GREATER +compare (0.123, ~0.5E~323) = GREATER +compareReal (0.123, ~0.5E~323) = GREATER +compare (0.123, ~0.0) = GREATER +compareReal (0.123, ~0.0) = GREATER +compare (0.123E~2, 0.17976931348623157E309) = LESS +compareReal (0.123E~2, 0.17976931348623157E309) = LESS +compare (0.123E~2, 0.8988465674311579E308) = LESS +compareReal (0.123E~2, 0.8988465674311579E308) = LESS +compare (0.123E~2, 0.123E4) = LESS +compareReal (0.123E~2, 0.123E4) = LESS +compare (0.123E~2, 0.123E2) = LESS +compareReal (0.123E~2, 0.123E2) = LESS +compare (0.123E~2, 0.3141592653589793E1) = LESS +compareReal (0.123E~2, 0.3141592653589793E1) = LESS +compare (0.123E~2, 0.2718281828459045E1) = LESS +compareReal (0.123E~2, 0.2718281828459045E1) = LESS +compare (0.123E~2, 0.123E1) = LESS +compareReal (0.123E~2, 0.123E1) = LESS +compare (0.123E~2, 0.123) = LESS +compareReal (0.123E~2, 0.123) = LESS +compare (0.123E~2, 0.123E~2) = EQUAL +compareReal (0.123E~2, 0.123E~2) = EQUAL +compare (0.123E~2, 0.22250738585072014E~307) = GREATER +compareReal (0.123E~2, 0.22250738585072014E~307) = GREATER +compare (0.123E~2, 0.11125369292536007E~307) = GREATER +compareReal (0.123E~2, 0.11125369292536007E~307) = GREATER +compare (0.123E~2, 0.5E~323) = GREATER +compareReal (0.123E~2, 0.5E~323) = GREATER +compare (0.123E~2, 0.0) = GREATER +compareReal (0.123E~2, 0.0) = GREATER +compare (0.123E~2, ~0.17976931348623157E309) = GREATER +compareReal (0.123E~2, ~0.17976931348623157E309) = GREATER +compare (0.123E~2, ~0.8988465674311579E308) = GREATER +compareReal (0.123E~2, ~0.8988465674311579E308) = GREATER +compare (0.123E~2, ~0.123E4) = GREATER +compareReal (0.123E~2, ~0.123E4) = GREATER +compare (0.123E~2, ~0.123E2) = GREATER +compareReal (0.123E~2, ~0.123E2) = GREATER +compare (0.123E~2, ~0.3141592653589793E1) = GREATER +compareReal (0.123E~2, ~0.3141592653589793E1) = GREATER +compare (0.123E~2, ~0.2718281828459045E1) = GREATER +compareReal (0.123E~2, ~0.2718281828459045E1) = GREATER +compare (0.123E~2, ~0.123E1) = GREATER +compareReal (0.123E~2, ~0.123E1) = GREATER +compare (0.123E~2, ~0.123) = GREATER +compareReal (0.123E~2, ~0.123) = GREATER +compare (0.123E~2, ~0.123E~2) = GREATER +compareReal (0.123E~2, ~0.123E~2) = GREATER +compare (0.123E~2, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E~2, ~0.22250738585072014E~307) = GREATER +compare (0.123E~2, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E~2, ~0.11125369292536007E~307) = GREATER +compare (0.123E~2, ~0.5E~323) = GREATER +compareReal (0.123E~2, ~0.5E~323) = GREATER +compare (0.123E~2, ~0.0) = GREATER +compareReal (0.123E~2, ~0.0) = GREATER +compare (0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compareReal (0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compare (0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compareReal (0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compare (0.22250738585072014E~307, 0.123E4) = LESS +compareReal (0.22250738585072014E~307, 0.123E4) = LESS +compare (0.22250738585072014E~307, 0.123E2) = LESS +compareReal (0.22250738585072014E~307, 0.123E2) = LESS +compare (0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compareReal (0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compare (0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compareReal (0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compare (0.22250738585072014E~307, 0.123E1) = LESS +compareReal (0.22250738585072014E~307, 0.123E1) = LESS +compare (0.22250738585072014E~307, 0.123) = LESS +compareReal (0.22250738585072014E~307, 0.123) = LESS +compare (0.22250738585072014E~307, 0.123E~2) = LESS +compareReal (0.22250738585072014E~307, 0.123E~2) = LESS +compare (0.22250738585072014E~307, 0.22250738585072014E~307) = EQUAL +compareReal (0.22250738585072014E~307, 0.22250738585072014E~307) = EQUAL +compare (0.22250738585072014E~307, 0.11125369292536007E~307) = GREATER +compareReal (0.22250738585072014E~307, 0.11125369292536007E~307) = GREATER +compare (0.22250738585072014E~307, 0.5E~323) = GREATER +compareReal (0.22250738585072014E~307, 0.5E~323) = GREATER +compare (0.22250738585072014E~307, 0.0) = GREATER +compareReal (0.22250738585072014E~307, 0.0) = GREATER +compare (0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compareReal (0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compare (0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compareReal (0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compare (0.22250738585072014E~307, ~0.123E4) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E4) = GREATER +compare (0.22250738585072014E~307, ~0.123E2) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E2) = GREATER +compare (0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compare (0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compare (0.22250738585072014E~307, ~0.123E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E1) = GREATER +compare (0.22250738585072014E~307, ~0.123) = GREATER +compareReal (0.22250738585072014E~307, ~0.123) = GREATER +compare (0.22250738585072014E~307, ~0.123E~2) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E~2) = GREATER +compare (0.22250738585072014E~307, ~0.22250738585072014E~307) = GREATER +compareReal (0.22250738585072014E~307, ~0.22250738585072014E~307) = GREATER +compare (0.22250738585072014E~307, ~0.11125369292536007E~307) = GREATER +compareReal (0.22250738585072014E~307, ~0.11125369292536007E~307) = GREATER +compare (0.22250738585072014E~307, ~0.5E~323) = GREATER +compareReal (0.22250738585072014E~307, ~0.5E~323) = GREATER +compare (0.22250738585072014E~307, ~0.0) = GREATER +compareReal (0.22250738585072014E~307, ~0.0) = GREATER +compare (0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compareReal (0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compare (0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compareReal (0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compare (0.11125369292536007E~307, 0.123E4) = LESS +compareReal (0.11125369292536007E~307, 0.123E4) = LESS +compare (0.11125369292536007E~307, 0.123E2) = LESS +compareReal (0.11125369292536007E~307, 0.123E2) = LESS +compare (0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compareReal (0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compare (0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compareReal (0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compare (0.11125369292536007E~307, 0.123E1) = LESS +compareReal (0.11125369292536007E~307, 0.123E1) = LESS +compare (0.11125369292536007E~307, 0.123) = LESS +compareReal (0.11125369292536007E~307, 0.123) = LESS +compare (0.11125369292536007E~307, 0.123E~2) = LESS +compareReal (0.11125369292536007E~307, 0.123E~2) = LESS +compare (0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compareReal (0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compare (0.11125369292536007E~307, 0.11125369292536007E~307) = EQUAL +compareReal (0.11125369292536007E~307, 0.11125369292536007E~307) = EQUAL +compare (0.11125369292536007E~307, 0.5E~323) = GREATER +compareReal (0.11125369292536007E~307, 0.5E~323) = GREATER +compare (0.11125369292536007E~307, 0.0) = GREATER +compareReal (0.11125369292536007E~307, 0.0) = GREATER +compare (0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compareReal (0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compare (0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compareReal (0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compare (0.11125369292536007E~307, ~0.123E4) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E4) = GREATER +compare (0.11125369292536007E~307, ~0.123E2) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E2) = GREATER +compare (0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compare (0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compare (0.11125369292536007E~307, ~0.123E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E1) = GREATER +compare (0.11125369292536007E~307, ~0.123) = GREATER +compareReal (0.11125369292536007E~307, ~0.123) = GREATER +compare (0.11125369292536007E~307, ~0.123E~2) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E~2) = GREATER +compare (0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compareReal (0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compare (0.11125369292536007E~307, ~0.11125369292536007E~307) = GREATER +compareReal (0.11125369292536007E~307, ~0.11125369292536007E~307) = GREATER +compare (0.11125369292536007E~307, ~0.5E~323) = GREATER +compareReal (0.11125369292536007E~307, ~0.5E~323) = GREATER +compare (0.11125369292536007E~307, ~0.0) = GREATER +compareReal (0.11125369292536007E~307, ~0.0) = GREATER +compare (0.5E~323, 0.17976931348623157E309) = LESS +compareReal (0.5E~323, 0.17976931348623157E309) = LESS +compare (0.5E~323, 0.8988465674311579E308) = LESS +compareReal (0.5E~323, 0.8988465674311579E308) = LESS +compare (0.5E~323, 0.123E4) = LESS +compareReal (0.5E~323, 0.123E4) = LESS +compare (0.5E~323, 0.123E2) = LESS +compareReal (0.5E~323, 0.123E2) = LESS +compare (0.5E~323, 0.3141592653589793E1) = LESS +compareReal (0.5E~323, 0.3141592653589793E1) = LESS +compare (0.5E~323, 0.2718281828459045E1) = LESS +compareReal (0.5E~323, 0.2718281828459045E1) = LESS +compare (0.5E~323, 0.123E1) = LESS +compareReal (0.5E~323, 0.123E1) = LESS +compare (0.5E~323, 0.123) = LESS +compareReal (0.5E~323, 0.123) = LESS +compare (0.5E~323, 0.123E~2) = LESS +compareReal (0.5E~323, 0.123E~2) = LESS +compare (0.5E~323, 0.22250738585072014E~307) = LESS +compareReal (0.5E~323, 0.22250738585072014E~307) = LESS +compare (0.5E~323, 0.11125369292536007E~307) = LESS +compareReal (0.5E~323, 0.11125369292536007E~307) = LESS +compare (0.5E~323, 0.5E~323) = EQUAL +compareReal (0.5E~323, 0.5E~323) = EQUAL +compare (0.5E~323, 0.0) = GREATER +compareReal (0.5E~323, 0.0) = GREATER +compare (0.5E~323, ~0.17976931348623157E309) = GREATER +compareReal (0.5E~323, ~0.17976931348623157E309) = GREATER +compare (0.5E~323, ~0.8988465674311579E308) = GREATER +compareReal (0.5E~323, ~0.8988465674311579E308) = GREATER +compare (0.5E~323, ~0.123E4) = GREATER +compareReal (0.5E~323, ~0.123E4) = GREATER +compare (0.5E~323, ~0.123E2) = GREATER +compareReal (0.5E~323, ~0.123E2) = GREATER +compare (0.5E~323, ~0.3141592653589793E1) = GREATER +compareReal (0.5E~323, ~0.3141592653589793E1) = GREATER +compare (0.5E~323, ~0.2718281828459045E1) = GREATER +compareReal (0.5E~323, ~0.2718281828459045E1) = GREATER +compare (0.5E~323, ~0.123E1) = GREATER +compareReal (0.5E~323, ~0.123E1) = GREATER +compare (0.5E~323, ~0.123) = GREATER +compareReal (0.5E~323, ~0.123) = GREATER +compare (0.5E~323, ~0.123E~2) = GREATER +compareReal (0.5E~323, ~0.123E~2) = GREATER +compare (0.5E~323, ~0.22250738585072014E~307) = GREATER +compareReal (0.5E~323, ~0.22250738585072014E~307) = GREATER +compare (0.5E~323, ~0.11125369292536007E~307) = GREATER +compareReal (0.5E~323, ~0.11125369292536007E~307) = GREATER +compare (0.5E~323, ~0.5E~323) = GREATER +compareReal (0.5E~323, ~0.5E~323) = GREATER +compare (0.5E~323, ~0.0) = GREATER +compareReal (0.5E~323, ~0.0) = GREATER +compare (0.0, 0.17976931348623157E309) = LESS +compareReal (0.0, 0.17976931348623157E309) = LESS +compare (0.0, 0.8988465674311579E308) = LESS +compareReal (0.0, 0.8988465674311579E308) = LESS +compare (0.0, 0.123E4) = LESS +compareReal (0.0, 0.123E4) = LESS +compare (0.0, 0.123E2) = LESS +compareReal (0.0, 0.123E2) = LESS +compare (0.0, 0.3141592653589793E1) = LESS +compareReal (0.0, 0.3141592653589793E1) = LESS +compare (0.0, 0.2718281828459045E1) = LESS +compareReal (0.0, 0.2718281828459045E1) = LESS +compare (0.0, 0.123E1) = LESS +compareReal (0.0, 0.123E1) = LESS +compare (0.0, 0.123) = LESS +compareReal (0.0, 0.123) = LESS +compare (0.0, 0.123E~2) = LESS +compareReal (0.0, 0.123E~2) = LESS +compare (0.0, 0.22250738585072014E~307) = LESS +compareReal (0.0, 0.22250738585072014E~307) = LESS +compare (0.0, 0.11125369292536007E~307) = LESS +compareReal (0.0, 0.11125369292536007E~307) = LESS +compare (0.0, 0.5E~323) = LESS +compareReal (0.0, 0.5E~323) = LESS +compare (0.0, 0.0) = EQUAL +compareReal (0.0, 0.0) = EQUAL +compare (0.0, ~0.17976931348623157E309) = GREATER +compareReal (0.0, ~0.17976931348623157E309) = GREATER +compare (0.0, ~0.8988465674311579E308) = GREATER +compareReal (0.0, ~0.8988465674311579E308) = GREATER +compare (0.0, ~0.123E4) = GREATER +compareReal (0.0, ~0.123E4) = GREATER +compare (0.0, ~0.123E2) = GREATER +compareReal (0.0, ~0.123E2) = GREATER +compare (0.0, ~0.3141592653589793E1) = GREATER +compareReal (0.0, ~0.3141592653589793E1) = GREATER +compare (0.0, ~0.2718281828459045E1) = GREATER +compareReal (0.0, ~0.2718281828459045E1) = GREATER +compare (0.0, ~0.123E1) = GREATER +compareReal (0.0, ~0.123E1) = GREATER +compare (0.0, ~0.123) = GREATER +compareReal (0.0, ~0.123) = GREATER +compare (0.0, ~0.123E~2) = GREATER +compareReal (0.0, ~0.123E~2) = GREATER +compare (0.0, ~0.22250738585072014E~307) = GREATER +compareReal (0.0, ~0.22250738585072014E~307) = GREATER +compare (0.0, ~0.11125369292536007E~307) = GREATER +compareReal (0.0, ~0.11125369292536007E~307) = GREATER +compare (0.0, ~0.5E~323) = GREATER +compareReal (0.0, ~0.5E~323) = GREATER +compare (0.0, ~0.0) = EQUAL +compareReal (0.0, ~0.0) = EQUAL +compare (~0.17976931348623157E309, 0.17976931348623157E309) = LESS +compareReal (~0.17976931348623157E309, 0.17976931348623157E309) = LESS +compare (~0.17976931348623157E309, 0.8988465674311579E308) = LESS +compareReal (~0.17976931348623157E309, 0.8988465674311579E308) = LESS +compare (~0.17976931348623157E309, 0.123E4) = LESS +compareReal (~0.17976931348623157E309, 0.123E4) = LESS +compare (~0.17976931348623157E309, 0.123E2) = LESS +compareReal (~0.17976931348623157E309, 0.123E2) = LESS +compare (~0.17976931348623157E309, 0.3141592653589793E1) = LESS +compareReal (~0.17976931348623157E309, 0.3141592653589793E1) = LESS +compare (~0.17976931348623157E309, 0.2718281828459045E1) = LESS +compareReal (~0.17976931348623157E309, 0.2718281828459045E1) = LESS +compare (~0.17976931348623157E309, 0.123E1) = LESS +compareReal (~0.17976931348623157E309, 0.123E1) = LESS +compare (~0.17976931348623157E309, 0.123) = LESS +compareReal (~0.17976931348623157E309, 0.123) = LESS +compare (~0.17976931348623157E309, 0.123E~2) = LESS +compareReal (~0.17976931348623157E309, 0.123E~2) = LESS +compare (~0.17976931348623157E309, 0.22250738585072014E~307) = LESS +compareReal (~0.17976931348623157E309, 0.22250738585072014E~307) = LESS +compare (~0.17976931348623157E309, 0.11125369292536007E~307) = LESS +compareReal (~0.17976931348623157E309, 0.11125369292536007E~307) = LESS +compare (~0.17976931348623157E309, 0.5E~323) = LESS +compareReal (~0.17976931348623157E309, 0.5E~323) = LESS +compare (~0.17976931348623157E309, 0.0) = LESS +compareReal (~0.17976931348623157E309, 0.0) = LESS +compare (~0.17976931348623157E309, ~0.17976931348623157E309) = EQUAL +compareReal (~0.17976931348623157E309, ~0.17976931348623157E309) = EQUAL +compare (~0.17976931348623157E309, ~0.8988465674311579E308) = LESS +compareReal (~0.17976931348623157E309, ~0.8988465674311579E308) = LESS +compare (~0.17976931348623157E309, ~0.123E4) = LESS +compareReal (~0.17976931348623157E309, ~0.123E4) = LESS +compare (~0.17976931348623157E309, ~0.123E2) = LESS +compareReal (~0.17976931348623157E309, ~0.123E2) = LESS +compare (~0.17976931348623157E309, ~0.3141592653589793E1) = LESS +compareReal (~0.17976931348623157E309, ~0.3141592653589793E1) = LESS +compare (~0.17976931348623157E309, ~0.2718281828459045E1) = LESS +compareReal (~0.17976931348623157E309, ~0.2718281828459045E1) = LESS +compare (~0.17976931348623157E309, ~0.123E1) = LESS +compareReal (~0.17976931348623157E309, ~0.123E1) = LESS +compare (~0.17976931348623157E309, ~0.123) = LESS +compareReal (~0.17976931348623157E309, ~0.123) = LESS +compare (~0.17976931348623157E309, ~0.123E~2) = LESS +compareReal (~0.17976931348623157E309, ~0.123E~2) = LESS +compare (~0.17976931348623157E309, ~0.22250738585072014E~307) = LESS +compareReal (~0.17976931348623157E309, ~0.22250738585072014E~307) = LESS +compare (~0.17976931348623157E309, ~0.11125369292536007E~307) = LESS +compareReal (~0.17976931348623157E309, ~0.11125369292536007E~307) = LESS +compare (~0.17976931348623157E309, ~0.5E~323) = LESS +compareReal (~0.17976931348623157E309, ~0.5E~323) = LESS +compare (~0.17976931348623157E309, ~0.0) = LESS +compareReal (~0.17976931348623157E309, ~0.0) = LESS +compare (~0.8988465674311579E308, 0.17976931348623157E309) = LESS +compareReal (~0.8988465674311579E308, 0.17976931348623157E309) = LESS +compare (~0.8988465674311579E308, 0.8988465674311579E308) = LESS +compareReal (~0.8988465674311579E308, 0.8988465674311579E308) = LESS +compare (~0.8988465674311579E308, 0.123E4) = LESS +compareReal (~0.8988465674311579E308, 0.123E4) = LESS +compare (~0.8988465674311579E308, 0.123E2) = LESS +compareReal (~0.8988465674311579E308, 0.123E2) = LESS +compare (~0.8988465674311579E308, 0.3141592653589793E1) = LESS +compareReal (~0.8988465674311579E308, 0.3141592653589793E1) = LESS +compare (~0.8988465674311579E308, 0.2718281828459045E1) = LESS +compareReal (~0.8988465674311579E308, 0.2718281828459045E1) = LESS +compare (~0.8988465674311579E308, 0.123E1) = LESS +compareReal (~0.8988465674311579E308, 0.123E1) = LESS +compare (~0.8988465674311579E308, 0.123) = LESS +compareReal (~0.8988465674311579E308, 0.123) = LESS +compare (~0.8988465674311579E308, 0.123E~2) = LESS +compareReal (~0.8988465674311579E308, 0.123E~2) = LESS +compare (~0.8988465674311579E308, 0.22250738585072014E~307) = LESS +compareReal (~0.8988465674311579E308, 0.22250738585072014E~307) = LESS +compare (~0.8988465674311579E308, 0.11125369292536007E~307) = LESS +compareReal (~0.8988465674311579E308, 0.11125369292536007E~307) = LESS +compare (~0.8988465674311579E308, 0.5E~323) = LESS +compareReal (~0.8988465674311579E308, 0.5E~323) = LESS +compare (~0.8988465674311579E308, 0.0) = LESS +compareReal (~0.8988465674311579E308, 0.0) = LESS +compare (~0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compareReal (~0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compare (~0.8988465674311579E308, ~0.8988465674311579E308) = EQUAL +compareReal (~0.8988465674311579E308, ~0.8988465674311579E308) = EQUAL +compare (~0.8988465674311579E308, ~0.123E4) = LESS +compareReal (~0.8988465674311579E308, ~0.123E4) = LESS +compare (~0.8988465674311579E308, ~0.123E2) = LESS +compareReal (~0.8988465674311579E308, ~0.123E2) = LESS +compare (~0.8988465674311579E308, ~0.3141592653589793E1) = LESS +compareReal (~0.8988465674311579E308, ~0.3141592653589793E1) = LESS +compare (~0.8988465674311579E308, ~0.2718281828459045E1) = LESS +compareReal (~0.8988465674311579E308, ~0.2718281828459045E1) = LESS +compare (~0.8988465674311579E308, ~0.123E1) = LESS +compareReal (~0.8988465674311579E308, ~0.123E1) = LESS +compare (~0.8988465674311579E308, ~0.123) = LESS +compareReal (~0.8988465674311579E308, ~0.123) = LESS +compare (~0.8988465674311579E308, ~0.123E~2) = LESS +compareReal (~0.8988465674311579E308, ~0.123E~2) = LESS +compare (~0.8988465674311579E308, ~0.22250738585072014E~307) = LESS +compareReal (~0.8988465674311579E308, ~0.22250738585072014E~307) = LESS +compare (~0.8988465674311579E308, ~0.11125369292536007E~307) = LESS +compareReal (~0.8988465674311579E308, ~0.11125369292536007E~307) = LESS +compare (~0.8988465674311579E308, ~0.5E~323) = LESS +compareReal (~0.8988465674311579E308, ~0.5E~323) = LESS +compare (~0.8988465674311579E308, ~0.0) = LESS +compareReal (~0.8988465674311579E308, ~0.0) = LESS +compare (~0.123E4, 0.17976931348623157E309) = LESS +compareReal (~0.123E4, 0.17976931348623157E309) = LESS +compare (~0.123E4, 0.8988465674311579E308) = LESS +compareReal (~0.123E4, 0.8988465674311579E308) = LESS +compare (~0.123E4, 0.123E4) = LESS +compareReal (~0.123E4, 0.123E4) = LESS +compare (~0.123E4, 0.123E2) = LESS +compareReal (~0.123E4, 0.123E2) = LESS +compare (~0.123E4, 0.3141592653589793E1) = LESS +compareReal (~0.123E4, 0.3141592653589793E1) = LESS +compare (~0.123E4, 0.2718281828459045E1) = LESS +compareReal (~0.123E4, 0.2718281828459045E1) = LESS +compare (~0.123E4, 0.123E1) = LESS +compareReal (~0.123E4, 0.123E1) = LESS +compare (~0.123E4, 0.123) = LESS +compareReal (~0.123E4, 0.123) = LESS +compare (~0.123E4, 0.123E~2) = LESS +compareReal (~0.123E4, 0.123E~2) = LESS +compare (~0.123E4, 0.22250738585072014E~307) = LESS +compareReal (~0.123E4, 0.22250738585072014E~307) = LESS +compare (~0.123E4, 0.11125369292536007E~307) = LESS +compareReal (~0.123E4, 0.11125369292536007E~307) = LESS +compare (~0.123E4, 0.5E~323) = LESS +compareReal (~0.123E4, 0.5E~323) = LESS +compare (~0.123E4, 0.0) = LESS +compareReal (~0.123E4, 0.0) = LESS +compare (~0.123E4, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E4, ~0.17976931348623157E309) = GREATER +compare (~0.123E4, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E4, ~0.8988465674311579E308) = GREATER +compare (~0.123E4, ~0.123E4) = EQUAL +compareReal (~0.123E4, ~0.123E4) = EQUAL +compare (~0.123E4, ~0.123E2) = LESS +compareReal (~0.123E4, ~0.123E2) = LESS +compare (~0.123E4, ~0.3141592653589793E1) = LESS +compareReal (~0.123E4, ~0.3141592653589793E1) = LESS +compare (~0.123E4, ~0.2718281828459045E1) = LESS +compareReal (~0.123E4, ~0.2718281828459045E1) = LESS +compare (~0.123E4, ~0.123E1) = LESS +compareReal (~0.123E4, ~0.123E1) = LESS +compare (~0.123E4, ~0.123) = LESS +compareReal (~0.123E4, ~0.123) = LESS +compare (~0.123E4, ~0.123E~2) = LESS +compareReal (~0.123E4, ~0.123E~2) = LESS +compare (~0.123E4, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E4, ~0.22250738585072014E~307) = LESS +compare (~0.123E4, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E4, ~0.11125369292536007E~307) = LESS +compare (~0.123E4, ~0.5E~323) = LESS +compareReal (~0.123E4, ~0.5E~323) = LESS +compare (~0.123E4, ~0.0) = LESS +compareReal (~0.123E4, ~0.0) = LESS +compare (~0.123E2, 0.17976931348623157E309) = LESS +compareReal (~0.123E2, 0.17976931348623157E309) = LESS +compare (~0.123E2, 0.8988465674311579E308) = LESS +compareReal (~0.123E2, 0.8988465674311579E308) = LESS +compare (~0.123E2, 0.123E4) = LESS +compareReal (~0.123E2, 0.123E4) = LESS +compare (~0.123E2, 0.123E2) = LESS +compareReal (~0.123E2, 0.123E2) = LESS +compare (~0.123E2, 0.3141592653589793E1) = LESS +compareReal (~0.123E2, 0.3141592653589793E1) = LESS +compare (~0.123E2, 0.2718281828459045E1) = LESS +compareReal (~0.123E2, 0.2718281828459045E1) = LESS +compare (~0.123E2, 0.123E1) = LESS +compareReal (~0.123E2, 0.123E1) = LESS +compare (~0.123E2, 0.123) = LESS +compareReal (~0.123E2, 0.123) = LESS +compare (~0.123E2, 0.123E~2) = LESS +compareReal (~0.123E2, 0.123E~2) = LESS +compare (~0.123E2, 0.22250738585072014E~307) = LESS +compareReal (~0.123E2, 0.22250738585072014E~307) = LESS +compare (~0.123E2, 0.11125369292536007E~307) = LESS +compareReal (~0.123E2, 0.11125369292536007E~307) = LESS +compare (~0.123E2, 0.5E~323) = LESS +compareReal (~0.123E2, 0.5E~323) = LESS +compare (~0.123E2, 0.0) = LESS +compareReal (~0.123E2, 0.0) = LESS +compare (~0.123E2, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E2, ~0.17976931348623157E309) = GREATER +compare (~0.123E2, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E2, ~0.8988465674311579E308) = GREATER +compare (~0.123E2, ~0.123E4) = GREATER +compareReal (~0.123E2, ~0.123E4) = GREATER +compare (~0.123E2, ~0.123E2) = EQUAL +compareReal (~0.123E2, ~0.123E2) = EQUAL +compare (~0.123E2, ~0.3141592653589793E1) = LESS +compareReal (~0.123E2, ~0.3141592653589793E1) = LESS +compare (~0.123E2, ~0.2718281828459045E1) = LESS +compareReal (~0.123E2, ~0.2718281828459045E1) = LESS +compare (~0.123E2, ~0.123E1) = LESS +compareReal (~0.123E2, ~0.123E1) = LESS +compare (~0.123E2, ~0.123) = LESS +compareReal (~0.123E2, ~0.123) = LESS +compare (~0.123E2, ~0.123E~2) = LESS +compareReal (~0.123E2, ~0.123E~2) = LESS +compare (~0.123E2, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E2, ~0.22250738585072014E~307) = LESS +compare (~0.123E2, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E2, ~0.11125369292536007E~307) = LESS +compare (~0.123E2, ~0.5E~323) = LESS +compareReal (~0.123E2, ~0.5E~323) = LESS +compare (~0.123E2, ~0.0) = LESS +compareReal (~0.123E2, ~0.0) = LESS +compare (~0.3141592653589793E1, 0.17976931348623157E309) = LESS +compareReal (~0.3141592653589793E1, 0.17976931348623157E309) = LESS +compare (~0.3141592653589793E1, 0.8988465674311579E308) = LESS +compareReal (~0.3141592653589793E1, 0.8988465674311579E308) = LESS +compare (~0.3141592653589793E1, 0.123E4) = LESS +compareReal (~0.3141592653589793E1, 0.123E4) = LESS +compare (~0.3141592653589793E1, 0.123E2) = LESS +compareReal (~0.3141592653589793E1, 0.123E2) = LESS +compare (~0.3141592653589793E1, 0.3141592653589793E1) = LESS +compareReal (~0.3141592653589793E1, 0.3141592653589793E1) = LESS +compare (~0.3141592653589793E1, 0.2718281828459045E1) = LESS +compareReal (~0.3141592653589793E1, 0.2718281828459045E1) = LESS +compare (~0.3141592653589793E1, 0.123E1) = LESS +compareReal (~0.3141592653589793E1, 0.123E1) = LESS +compare (~0.3141592653589793E1, 0.123) = LESS +compareReal (~0.3141592653589793E1, 0.123) = LESS +compare (~0.3141592653589793E1, 0.123E~2) = LESS +compareReal (~0.3141592653589793E1, 0.123E~2) = LESS +compare (~0.3141592653589793E1, 0.22250738585072014E~307) = LESS +compareReal (~0.3141592653589793E1, 0.22250738585072014E~307) = LESS +compare (~0.3141592653589793E1, 0.11125369292536007E~307) = LESS +compareReal (~0.3141592653589793E1, 0.11125369292536007E~307) = LESS +compare (~0.3141592653589793E1, 0.5E~323) = LESS +compareReal (~0.3141592653589793E1, 0.5E~323) = LESS +compare (~0.3141592653589793E1, 0.0) = LESS +compareReal (~0.3141592653589793E1, 0.0) = LESS +compare (~0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compare (~0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compare (~0.3141592653589793E1, ~0.123E4) = GREATER +compareReal (~0.3141592653589793E1, ~0.123E4) = GREATER +compare (~0.3141592653589793E1, ~0.123E2) = GREATER +compareReal (~0.3141592653589793E1, ~0.123E2) = GREATER +compare (~0.3141592653589793E1, ~0.3141592653589793E1) = EQUAL +compareReal (~0.3141592653589793E1, ~0.3141592653589793E1) = EQUAL +compare (~0.3141592653589793E1, ~0.2718281828459045E1) = LESS +compareReal (~0.3141592653589793E1, ~0.2718281828459045E1) = LESS +compare (~0.3141592653589793E1, ~0.123E1) = LESS +compareReal (~0.3141592653589793E1, ~0.123E1) = LESS +compare (~0.3141592653589793E1, ~0.123) = LESS +compareReal (~0.3141592653589793E1, ~0.123) = LESS +compare (~0.3141592653589793E1, ~0.123E~2) = LESS +compareReal (~0.3141592653589793E1, ~0.123E~2) = LESS +compare (~0.3141592653589793E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.3141592653589793E1, ~0.22250738585072014E~307) = LESS +compare (~0.3141592653589793E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.3141592653589793E1, ~0.11125369292536007E~307) = LESS +compare (~0.3141592653589793E1, ~0.5E~323) = LESS +compareReal (~0.3141592653589793E1, ~0.5E~323) = LESS +compare (~0.3141592653589793E1, ~0.0) = LESS +compareReal (~0.3141592653589793E1, ~0.0) = LESS +compare (~0.2718281828459045E1, 0.17976931348623157E309) = LESS +compareReal (~0.2718281828459045E1, 0.17976931348623157E309) = LESS +compare (~0.2718281828459045E1, 0.8988465674311579E308) = LESS +compareReal (~0.2718281828459045E1, 0.8988465674311579E308) = LESS +compare (~0.2718281828459045E1, 0.123E4) = LESS +compareReal (~0.2718281828459045E1, 0.123E4) = LESS +compare (~0.2718281828459045E1, 0.123E2) = LESS +compareReal (~0.2718281828459045E1, 0.123E2) = LESS +compare (~0.2718281828459045E1, 0.3141592653589793E1) = LESS +compareReal (~0.2718281828459045E1, 0.3141592653589793E1) = LESS +compare (~0.2718281828459045E1, 0.2718281828459045E1) = LESS +compareReal (~0.2718281828459045E1, 0.2718281828459045E1) = LESS +compare (~0.2718281828459045E1, 0.123E1) = LESS +compareReal (~0.2718281828459045E1, 0.123E1) = LESS +compare (~0.2718281828459045E1, 0.123) = LESS +compareReal (~0.2718281828459045E1, 0.123) = LESS +compare (~0.2718281828459045E1, 0.123E~2) = LESS +compareReal (~0.2718281828459045E1, 0.123E~2) = LESS +compare (~0.2718281828459045E1, 0.22250738585072014E~307) = LESS +compareReal (~0.2718281828459045E1, 0.22250738585072014E~307) = LESS +compare (~0.2718281828459045E1, 0.11125369292536007E~307) = LESS +compareReal (~0.2718281828459045E1, 0.11125369292536007E~307) = LESS +compare (~0.2718281828459045E1, 0.5E~323) = LESS +compareReal (~0.2718281828459045E1, 0.5E~323) = LESS +compare (~0.2718281828459045E1, 0.0) = LESS +compareReal (~0.2718281828459045E1, 0.0) = LESS +compare (~0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compare (~0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compare (~0.2718281828459045E1, ~0.123E4) = GREATER +compareReal (~0.2718281828459045E1, ~0.123E4) = GREATER +compare (~0.2718281828459045E1, ~0.123E2) = GREATER +compareReal (~0.2718281828459045E1, ~0.123E2) = GREATER +compare (~0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compareReal (~0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compare (~0.2718281828459045E1, ~0.2718281828459045E1) = EQUAL +compareReal (~0.2718281828459045E1, ~0.2718281828459045E1) = EQUAL +compare (~0.2718281828459045E1, ~0.123E1) = LESS +compareReal (~0.2718281828459045E1, ~0.123E1) = LESS +compare (~0.2718281828459045E1, ~0.123) = LESS +compareReal (~0.2718281828459045E1, ~0.123) = LESS +compare (~0.2718281828459045E1, ~0.123E~2) = LESS +compareReal (~0.2718281828459045E1, ~0.123E~2) = LESS +compare (~0.2718281828459045E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.2718281828459045E1, ~0.22250738585072014E~307) = LESS +compare (~0.2718281828459045E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.2718281828459045E1, ~0.11125369292536007E~307) = LESS +compare (~0.2718281828459045E1, ~0.5E~323) = LESS +compareReal (~0.2718281828459045E1, ~0.5E~323) = LESS +compare (~0.2718281828459045E1, ~0.0) = LESS +compareReal (~0.2718281828459045E1, ~0.0) = LESS +compare (~0.123E1, 0.17976931348623157E309) = LESS +compareReal (~0.123E1, 0.17976931348623157E309) = LESS +compare (~0.123E1, 0.8988465674311579E308) = LESS +compareReal (~0.123E1, 0.8988465674311579E308) = LESS +compare (~0.123E1, 0.123E4) = LESS +compareReal (~0.123E1, 0.123E4) = LESS +compare (~0.123E1, 0.123E2) = LESS +compareReal (~0.123E1, 0.123E2) = LESS +compare (~0.123E1, 0.3141592653589793E1) = LESS +compareReal (~0.123E1, 0.3141592653589793E1) = LESS +compare (~0.123E1, 0.2718281828459045E1) = LESS +compareReal (~0.123E1, 0.2718281828459045E1) = LESS +compare (~0.123E1, 0.123E1) = LESS +compareReal (~0.123E1, 0.123E1) = LESS +compare (~0.123E1, 0.123) = LESS +compareReal (~0.123E1, 0.123) = LESS +compare (~0.123E1, 0.123E~2) = LESS +compareReal (~0.123E1, 0.123E~2) = LESS +compare (~0.123E1, 0.22250738585072014E~307) = LESS +compareReal (~0.123E1, 0.22250738585072014E~307) = LESS +compare (~0.123E1, 0.11125369292536007E~307) = LESS +compareReal (~0.123E1, 0.11125369292536007E~307) = LESS +compare (~0.123E1, 0.5E~323) = LESS +compareReal (~0.123E1, 0.5E~323) = LESS +compare (~0.123E1, 0.0) = LESS +compareReal (~0.123E1, 0.0) = LESS +compare (~0.123E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E1, ~0.17976931348623157E309) = GREATER +compare (~0.123E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E1, ~0.8988465674311579E308) = GREATER +compare (~0.123E1, ~0.123E4) = GREATER +compareReal (~0.123E1, ~0.123E4) = GREATER +compare (~0.123E1, ~0.123E2) = GREATER +compareReal (~0.123E1, ~0.123E2) = GREATER +compare (~0.123E1, ~0.3141592653589793E1) = GREATER +compareReal (~0.123E1, ~0.3141592653589793E1) = GREATER +compare (~0.123E1, ~0.2718281828459045E1) = GREATER +compareReal (~0.123E1, ~0.2718281828459045E1) = GREATER +compare (~0.123E1, ~0.123E1) = EQUAL +compareReal (~0.123E1, ~0.123E1) = EQUAL +compare (~0.123E1, ~0.123) = LESS +compareReal (~0.123E1, ~0.123) = LESS +compare (~0.123E1, ~0.123E~2) = LESS +compareReal (~0.123E1, ~0.123E~2) = LESS +compare (~0.123E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E1, ~0.22250738585072014E~307) = LESS +compare (~0.123E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E1, ~0.11125369292536007E~307) = LESS +compare (~0.123E1, ~0.5E~323) = LESS +compareReal (~0.123E1, ~0.5E~323) = LESS +compare (~0.123E1, ~0.0) = LESS +compareReal (~0.123E1, ~0.0) = LESS +compare (~0.123, 0.17976931348623157E309) = LESS +compareReal (~0.123, 0.17976931348623157E309) = LESS +compare (~0.123, 0.8988465674311579E308) = LESS +compareReal (~0.123, 0.8988465674311579E308) = LESS +compare (~0.123, 0.123E4) = LESS +compareReal (~0.123, 0.123E4) = LESS +compare (~0.123, 0.123E2) = LESS +compareReal (~0.123, 0.123E2) = LESS +compare (~0.123, 0.3141592653589793E1) = LESS +compareReal (~0.123, 0.3141592653589793E1) = LESS +compare (~0.123, 0.2718281828459045E1) = LESS +compareReal (~0.123, 0.2718281828459045E1) = LESS +compare (~0.123, 0.123E1) = LESS +compareReal (~0.123, 0.123E1) = LESS +compare (~0.123, 0.123) = LESS +compareReal (~0.123, 0.123) = LESS +compare (~0.123, 0.123E~2) = LESS +compareReal (~0.123, 0.123E~2) = LESS +compare (~0.123, 0.22250738585072014E~307) = LESS +compareReal (~0.123, 0.22250738585072014E~307) = LESS +compare (~0.123, 0.11125369292536007E~307) = LESS +compareReal (~0.123, 0.11125369292536007E~307) = LESS +compare (~0.123, 0.5E~323) = LESS +compareReal (~0.123, 0.5E~323) = LESS +compare (~0.123, 0.0) = LESS +compareReal (~0.123, 0.0) = LESS +compare (~0.123, ~0.17976931348623157E309) = GREATER +compareReal (~0.123, ~0.17976931348623157E309) = GREATER +compare (~0.123, ~0.8988465674311579E308) = GREATER +compareReal (~0.123, ~0.8988465674311579E308) = GREATER +compare (~0.123, ~0.123E4) = GREATER +compareReal (~0.123, ~0.123E4) = GREATER +compare (~0.123, ~0.123E2) = GREATER +compareReal (~0.123, ~0.123E2) = GREATER +compare (~0.123, ~0.3141592653589793E1) = GREATER +compareReal (~0.123, ~0.3141592653589793E1) = GREATER +compare (~0.123, ~0.2718281828459045E1) = GREATER +compareReal (~0.123, ~0.2718281828459045E1) = GREATER +compare (~0.123, ~0.123E1) = GREATER +compareReal (~0.123, ~0.123E1) = GREATER +compare (~0.123, ~0.123) = EQUAL +compareReal (~0.123, ~0.123) = EQUAL +compare (~0.123, ~0.123E~2) = LESS +compareReal (~0.123, ~0.123E~2) = LESS +compare (~0.123, ~0.22250738585072014E~307) = LESS +compareReal (~0.123, ~0.22250738585072014E~307) = LESS +compare (~0.123, ~0.11125369292536007E~307) = LESS +compareReal (~0.123, ~0.11125369292536007E~307) = LESS +compare (~0.123, ~0.5E~323) = LESS +compareReal (~0.123, ~0.5E~323) = LESS +compare (~0.123, ~0.0) = LESS +compareReal (~0.123, ~0.0) = LESS +compare (~0.123E~2, 0.17976931348623157E309) = LESS +compareReal (~0.123E~2, 0.17976931348623157E309) = LESS +compare (~0.123E~2, 0.8988465674311579E308) = LESS +compareReal (~0.123E~2, 0.8988465674311579E308) = LESS +compare (~0.123E~2, 0.123E4) = LESS +compareReal (~0.123E~2, 0.123E4) = LESS +compare (~0.123E~2, 0.123E2) = LESS +compareReal (~0.123E~2, 0.123E2) = LESS +compare (~0.123E~2, 0.3141592653589793E1) = LESS +compareReal (~0.123E~2, 0.3141592653589793E1) = LESS +compare (~0.123E~2, 0.2718281828459045E1) = LESS +compareReal (~0.123E~2, 0.2718281828459045E1) = LESS +compare (~0.123E~2, 0.123E1) = LESS +compareReal (~0.123E~2, 0.123E1) = LESS +compare (~0.123E~2, 0.123) = LESS +compareReal (~0.123E~2, 0.123) = LESS +compare (~0.123E~2, 0.123E~2) = LESS +compareReal (~0.123E~2, 0.123E~2) = LESS +compare (~0.123E~2, 0.22250738585072014E~307) = LESS +compareReal (~0.123E~2, 0.22250738585072014E~307) = LESS +compare (~0.123E~2, 0.11125369292536007E~307) = LESS +compareReal (~0.123E~2, 0.11125369292536007E~307) = LESS +compare (~0.123E~2, 0.5E~323) = LESS +compareReal (~0.123E~2, 0.5E~323) = LESS +compare (~0.123E~2, 0.0) = LESS +compareReal (~0.123E~2, 0.0) = LESS +compare (~0.123E~2, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E~2, ~0.17976931348623157E309) = GREATER +compare (~0.123E~2, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E~2, ~0.8988465674311579E308) = GREATER +compare (~0.123E~2, ~0.123E4) = GREATER +compareReal (~0.123E~2, ~0.123E4) = GREATER +compare (~0.123E~2, ~0.123E2) = GREATER +compareReal (~0.123E~2, ~0.123E2) = GREATER +compare (~0.123E~2, ~0.3141592653589793E1) = GREATER +compareReal (~0.123E~2, ~0.3141592653589793E1) = GREATER +compare (~0.123E~2, ~0.2718281828459045E1) = GREATER +compareReal (~0.123E~2, ~0.2718281828459045E1) = GREATER +compare (~0.123E~2, ~0.123E1) = GREATER +compareReal (~0.123E~2, ~0.123E1) = GREATER +compare (~0.123E~2, ~0.123) = GREATER +compareReal (~0.123E~2, ~0.123) = GREATER +compare (~0.123E~2, ~0.123E~2) = EQUAL +compareReal (~0.123E~2, ~0.123E~2) = EQUAL +compare (~0.123E~2, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E~2, ~0.22250738585072014E~307) = LESS +compare (~0.123E~2, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E~2, ~0.11125369292536007E~307) = LESS +compare (~0.123E~2, ~0.5E~323) = LESS +compareReal (~0.123E~2, ~0.5E~323) = LESS +compare (~0.123E~2, ~0.0) = LESS +compareReal (~0.123E~2, ~0.0) = LESS +compare (~0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compareReal (~0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compare (~0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compareReal (~0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compare (~0.22250738585072014E~307, 0.123E4) = LESS +compareReal (~0.22250738585072014E~307, 0.123E4) = LESS +compare (~0.22250738585072014E~307, 0.123E2) = LESS +compareReal (~0.22250738585072014E~307, 0.123E2) = LESS +compare (~0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compareReal (~0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compare (~0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compareReal (~0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compare (~0.22250738585072014E~307, 0.123E1) = LESS +compareReal (~0.22250738585072014E~307, 0.123E1) = LESS +compare (~0.22250738585072014E~307, 0.123) = LESS +compareReal (~0.22250738585072014E~307, 0.123) = LESS +compare (~0.22250738585072014E~307, 0.123E~2) = LESS +compareReal (~0.22250738585072014E~307, 0.123E~2) = LESS +compare (~0.22250738585072014E~307, 0.22250738585072014E~307) = LESS +compareReal (~0.22250738585072014E~307, 0.22250738585072014E~307) = LESS +compare (~0.22250738585072014E~307, 0.11125369292536007E~307) = LESS +compareReal (~0.22250738585072014E~307, 0.11125369292536007E~307) = LESS +compare (~0.22250738585072014E~307, 0.5E~323) = LESS +compareReal (~0.22250738585072014E~307, 0.5E~323) = LESS +compare (~0.22250738585072014E~307, 0.0) = LESS +compareReal (~0.22250738585072014E~307, 0.0) = LESS +compare (~0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compareReal (~0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compare (~0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compareReal (~0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compare (~0.22250738585072014E~307, ~0.123E4) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E4) = GREATER +compare (~0.22250738585072014E~307, ~0.123E2) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E2) = GREATER +compare (~0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compare (~0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compare (~0.22250738585072014E~307, ~0.123E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E1) = GREATER +compare (~0.22250738585072014E~307, ~0.123) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123) = GREATER +compare (~0.22250738585072014E~307, ~0.123E~2) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E~2) = GREATER +compare (~0.22250738585072014E~307, ~0.22250738585072014E~307) = EQUAL +compareReal (~0.22250738585072014E~307, ~0.22250738585072014E~307) = EQUAL +compare (~0.22250738585072014E~307, ~0.11125369292536007E~307) = LESS +compareReal (~0.22250738585072014E~307, ~0.11125369292536007E~307) = LESS +compare (~0.22250738585072014E~307, ~0.5E~323) = LESS +compareReal (~0.22250738585072014E~307, ~0.5E~323) = LESS +compare (~0.22250738585072014E~307, ~0.0) = LESS +compareReal (~0.22250738585072014E~307, ~0.0) = LESS +compare (~0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compareReal (~0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compare (~0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compareReal (~0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compare (~0.11125369292536007E~307, 0.123E4) = LESS +compareReal (~0.11125369292536007E~307, 0.123E4) = LESS +compare (~0.11125369292536007E~307, 0.123E2) = LESS +compareReal (~0.11125369292536007E~307, 0.123E2) = LESS +compare (~0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compareReal (~0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compare (~0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compareReal (~0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compare (~0.11125369292536007E~307, 0.123E1) = LESS +compareReal (~0.11125369292536007E~307, 0.123E1) = LESS +compare (~0.11125369292536007E~307, 0.123) = LESS +compareReal (~0.11125369292536007E~307, 0.123) = LESS +compare (~0.11125369292536007E~307, 0.123E~2) = LESS +compareReal (~0.11125369292536007E~307, 0.123E~2) = LESS +compare (~0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compareReal (~0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compare (~0.11125369292536007E~307, 0.11125369292536007E~307) = LESS +compareReal (~0.11125369292536007E~307, 0.11125369292536007E~307) = LESS +compare (~0.11125369292536007E~307, 0.5E~323) = LESS +compareReal (~0.11125369292536007E~307, 0.5E~323) = LESS +compare (~0.11125369292536007E~307, 0.0) = LESS +compareReal (~0.11125369292536007E~307, 0.0) = LESS +compare (~0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compareReal (~0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compare (~0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compareReal (~0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compare (~0.11125369292536007E~307, ~0.123E4) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E4) = GREATER +compare (~0.11125369292536007E~307, ~0.123E2) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E2) = GREATER +compare (~0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compare (~0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compare (~0.11125369292536007E~307, ~0.123E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E1) = GREATER +compare (~0.11125369292536007E~307, ~0.123) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123) = GREATER +compare (~0.11125369292536007E~307, ~0.123E~2) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E~2) = GREATER +compare (~0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compareReal (~0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compare (~0.11125369292536007E~307, ~0.11125369292536007E~307) = EQUAL +compareReal (~0.11125369292536007E~307, ~0.11125369292536007E~307) = EQUAL +compare (~0.11125369292536007E~307, ~0.5E~323) = LESS +compareReal (~0.11125369292536007E~307, ~0.5E~323) = LESS +compare (~0.11125369292536007E~307, ~0.0) = LESS +compareReal (~0.11125369292536007E~307, ~0.0) = LESS +compare (~0.5E~323, 0.17976931348623157E309) = LESS +compareReal (~0.5E~323, 0.17976931348623157E309) = LESS +compare (~0.5E~323, 0.8988465674311579E308) = LESS +compareReal (~0.5E~323, 0.8988465674311579E308) = LESS +compare (~0.5E~323, 0.123E4) = LESS +compareReal (~0.5E~323, 0.123E4) = LESS +compare (~0.5E~323, 0.123E2) = LESS +compareReal (~0.5E~323, 0.123E2) = LESS +compare (~0.5E~323, 0.3141592653589793E1) = LESS +compareReal (~0.5E~323, 0.3141592653589793E1) = LESS +compare (~0.5E~323, 0.2718281828459045E1) = LESS +compareReal (~0.5E~323, 0.2718281828459045E1) = LESS +compare (~0.5E~323, 0.123E1) = LESS +compareReal (~0.5E~323, 0.123E1) = LESS +compare (~0.5E~323, 0.123) = LESS +compareReal (~0.5E~323, 0.123) = LESS +compare (~0.5E~323, 0.123E~2) = LESS +compareReal (~0.5E~323, 0.123E~2) = LESS +compare (~0.5E~323, 0.22250738585072014E~307) = LESS +compareReal (~0.5E~323, 0.22250738585072014E~307) = LESS +compare (~0.5E~323, 0.11125369292536007E~307) = LESS +compareReal (~0.5E~323, 0.11125369292536007E~307) = LESS +compare (~0.5E~323, 0.5E~323) = LESS +compareReal (~0.5E~323, 0.5E~323) = LESS +compare (~0.5E~323, 0.0) = LESS +compareReal (~0.5E~323, 0.0) = LESS +compare (~0.5E~323, ~0.17976931348623157E309) = GREATER +compareReal (~0.5E~323, ~0.17976931348623157E309) = GREATER +compare (~0.5E~323, ~0.8988465674311579E308) = GREATER +compareReal (~0.5E~323, ~0.8988465674311579E308) = GREATER +compare (~0.5E~323, ~0.123E4) = GREATER +compareReal (~0.5E~323, ~0.123E4) = GREATER +compare (~0.5E~323, ~0.123E2) = GREATER +compareReal (~0.5E~323, ~0.123E2) = GREATER +compare (~0.5E~323, ~0.3141592653589793E1) = GREATER +compareReal (~0.5E~323, ~0.3141592653589793E1) = GREATER +compare (~0.5E~323, ~0.2718281828459045E1) = GREATER +compareReal (~0.5E~323, ~0.2718281828459045E1) = GREATER +compare (~0.5E~323, ~0.123E1) = GREATER +compareReal (~0.5E~323, ~0.123E1) = GREATER +compare (~0.5E~323, ~0.123) = GREATER +compareReal (~0.5E~323, ~0.123) = GREATER +compare (~0.5E~323, ~0.123E~2) = GREATER +compareReal (~0.5E~323, ~0.123E~2) = GREATER +compare (~0.5E~323, ~0.22250738585072014E~307) = GREATER +compareReal (~0.5E~323, ~0.22250738585072014E~307) = GREATER +compare (~0.5E~323, ~0.11125369292536007E~307) = GREATER +compareReal (~0.5E~323, ~0.11125369292536007E~307) = GREATER +compare (~0.5E~323, ~0.5E~323) = EQUAL +compareReal (~0.5E~323, ~0.5E~323) = EQUAL +compare (~0.5E~323, ~0.0) = LESS +compareReal (~0.5E~323, ~0.0) = LESS +compare (~0.0, 0.17976931348623157E309) = LESS +compareReal (~0.0, 0.17976931348623157E309) = LESS +compare (~0.0, 0.8988465674311579E308) = LESS +compareReal (~0.0, 0.8988465674311579E308) = LESS +compare (~0.0, 0.123E4) = LESS +compareReal (~0.0, 0.123E4) = LESS +compare (~0.0, 0.123E2) = LESS +compareReal (~0.0, 0.123E2) = LESS +compare (~0.0, 0.3141592653589793E1) = LESS +compareReal (~0.0, 0.3141592653589793E1) = LESS +compare (~0.0, 0.2718281828459045E1) = LESS +compareReal (~0.0, 0.2718281828459045E1) = LESS +compare (~0.0, 0.123E1) = LESS +compareReal (~0.0, 0.123E1) = LESS +compare (~0.0, 0.123) = LESS +compareReal (~0.0, 0.123) = LESS +compare (~0.0, 0.123E~2) = LESS +compareReal (~0.0, 0.123E~2) = LESS +compare (~0.0, 0.22250738585072014E~307) = LESS +compareReal (~0.0, 0.22250738585072014E~307) = LESS +compare (~0.0, 0.11125369292536007E~307) = LESS +compareReal (~0.0, 0.11125369292536007E~307) = LESS +compare (~0.0, 0.5E~323) = LESS +compareReal (~0.0, 0.5E~323) = LESS +compare (~0.0, 0.0) = EQUAL +compareReal (~0.0, 0.0) = EQUAL +compare (~0.0, ~0.17976931348623157E309) = GREATER +compareReal (~0.0, ~0.17976931348623157E309) = GREATER +compare (~0.0, ~0.8988465674311579E308) = GREATER +compareReal (~0.0, ~0.8988465674311579E308) = GREATER +compare (~0.0, ~0.123E4) = GREATER +compareReal (~0.0, ~0.123E4) = GREATER +compare (~0.0, ~0.123E2) = GREATER +compareReal (~0.0, ~0.123E2) = GREATER +compare (~0.0, ~0.3141592653589793E1) = GREATER +compareReal (~0.0, ~0.3141592653589793E1) = GREATER +compare (~0.0, ~0.2718281828459045E1) = GREATER +compareReal (~0.0, ~0.2718281828459045E1) = GREATER +compare (~0.0, ~0.123E1) = GREATER +compareReal (~0.0, ~0.123E1) = GREATER +compare (~0.0, ~0.123) = GREATER +compareReal (~0.0, ~0.123) = GREATER +compare (~0.0, ~0.123E~2) = GREATER +compareReal (~0.0, ~0.123E~2) = GREATER +compare (~0.0, ~0.22250738585072014E~307) = GREATER +compareReal (~0.0, ~0.22250738585072014E~307) = GREATER +compare (~0.0, ~0.11125369292536007E~307) = GREATER +compareReal (~0.0, ~0.11125369292536007E~307) = GREATER +compare (~0.0, ~0.5E~323) = GREATER +compareReal (~0.0, ~0.5E~323) = GREATER +compare (~0.0, ~0.0) = EQUAL +compareReal (~0.0, ~0.0) = EQUAL Testing abs diff -Nru mlton-20130715/regression/real.powerpc-linux.ok mlton-20210117+dfsg/regression/real.powerpc-linux.ok --- mlton-20130715/regression/real.powerpc-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.powerpc-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,17876 +0,0 @@ - -Testing Real32 - -Testing fmt -0.34028235E39 -3.402823E38 -340282346638528859811704183484516925440.000000 -3.40282346639E38 -3E38 -340282346638528859811704183484516925440 -3E38 -3.4028234664E38 -340282346638528859811704183484516925440.0000000000 -3.402823466E38 -0.17014117E39 -1.701412E38 -170141173319264429905852091742258462720.000000 -1.70141173319E38 -2E38 -170141173319264429905852091742258462720 -2E38 -1.7014117332E38 -170141173319264429905852091742258462720.0000000000 -1.701411733E38 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3000001907 -1E1 -12 -10 -1.2300000191E1 -12.3000001907 -12.30000019 -0.31415927E1 -3.141593E0 -3.141593 -3.14159274101 -3E0 -3 -3 -3.1415927410E0 -3.1415927410 -3.141592741 -0.27182817E1 -2.718282E0 -2.718282 -2.71828174591 -3E0 -3 -3 -2.7182817459E0 -2.7182817459 -2.718281746 -0.123E1 -1.230000E0 -1.230000 -1.23000001907 -1E0 -1 -1 -1.2300000191E0 -1.2300000191 -1.230000019 -0.123 -1.230000E~1 -0.123000 -0.123000003397 -1E~1 -0 -0.1 -1.2300000340E~1 -0.1230000034 -0.1230000034 -0.123E~2 -1.230000E~3 -0.001230 -0.0012300000526 -1E~3 -0 -1E~3 -1.2300000526E~3 -0.0012300001 -0.001230000053 -0.11754944E~37 -1.175494E~38 -0.000000 -1.17549435082E~38 -1E~38 -0 -1E~38 -1.1754943508E~38 -0.0000000000 -1.175494351E~38 -0.5877472E~38 -5.877472E~39 -0.000000 -5.87747175411E~39 -6E~39 -0 -6E~39 -5.8774717541E~39 -0.0000000000 -5.877471754E~39 -0.1E~44 -1.401298E~45 -0.000000 -1.40129846432E~45 -1E~45 -0 -1E~45 -1.4012984643E~45 -0.0000000000 -1.401298464E~45 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.34028235E39 -~3.402823E38 -~340282346638528859811704183484516925440.000000 -~3.40282346639E38 -~3E38 -~340282346638528859811704183484516925440 -~3E38 -~3.4028234664E38 -~340282346638528859811704183484516925440.0000000000 -~3.402823466E38 -~0.17014117E39 -~1.701412E38 -~170141173319264429905852091742258462720.000000 -~1.70141173319E38 -~2E38 -~170141173319264429905852091742258462720 -~2E38 -~1.7014117332E38 -~170141173319264429905852091742258462720.0000000000 -~1.701411733E38 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3000001907 -~1E1 -~12 -~10 -~1.2300000191E1 -~12.3000001907 -~12.30000019 -~0.31415927E1 -~3.141593E0 -~3.141593 -~3.14159274101 -~3E0 -~3 -~3 -~3.1415927410E0 -~3.1415927410 -~3.141592741 -~0.27182817E1 -~2.718282E0 -~2.718282 -~2.71828174591 -~3E0 -~3 -~3 -~2.7182817459E0 -~2.7182817459 -~2.718281746 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23000001907 -~1E0 -~1 -~1 -~1.2300000191E0 -~1.2300000191 -~1.230000019 -~0.123 -~1.230000E~1 -~0.123000 -~0.123000003397 -~1E~1 -~0 -~0.1 -~1.2300000340E~1 -~0.1230000034 -~0.1230000034 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.0012300000526 -~1E~3 -~0 -~1E~3 -~1.2300000526E~3 -~0.0012300001 -~0.001230000053 -~0.11754944E~37 -~1.175494E~38 -~0.000000 -~1.17549435082E~38 -~1E~38 -~0 -~1E~38 -~1.1754943508E~38 -~0.0000000000 -~1.175494351E~38 -~0.5877472E~38 -~5.877472E~39 -~0.000000 -~5.87747175411E~39 -~6E~39 -~0 -~6E~39 -~5.8774717541E~39 -~0.0000000000 -~5.877471754E~39 -~0.1E~44 -~1.401298E~45 -~0.000000 -~1.40129846432E~45 -~1E~45 -~0 -~1E~45 -~1.4012984643E~45 -~0.0000000000 -~1.401298464E~45 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.31415927E1 0.31415927E1 -0.27182817E1 0.27182817E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.11754944E~37 0.11754944E~37 -0.5877472E~38 0.5877472E~38 -0.1E~44 0.1E~44 -0.0 0.0 -~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.31415927E1 ~0.31415927E1 -~0.27182817E1 ~0.27182817E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.11754944E~37 ~0.11754944E~37 -~0.5877472E~38 ~0.5877472E~38 -~0.1E~44 ~0.1E~44 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.34028235E39 normal - isFinite = true isNan = false isNormal = true -0.17014117E39 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.31415927E1 normal - isFinite = true isNan = false isNormal = true -0.27182817E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.34028235E39 normal - isFinite = true isNan = false isNormal = true -~0.17014117E39 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.31415927E1 normal - isFinite = true isNan = false isNormal = true -~0.27182817E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -~0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -~0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -3.40282346639E38 -3.40282346639E38 -true -1.40129846432E~45 -1.40129846432E~45 -true -1.17549435082E~38 -1.17549435082E~38 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.34028235E39 340282346638528859811704183484516925440 0.34028235E39 -0.17014117E39 170141173319264429905852091742258462720 0.17014117E39 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.31415927E1 3 0.3E1 -0.27182817E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.11754944E~37 0 0.0 -0.5877472E~38 0 0.0 -0.1E~44 0 0.0 -0.0 0 0.0 -~0.34028235E39 ~340282346638528859811704183484516925440 ~0.34028235E39 -~0.17014117E39 ~170141173319264429905852091742258462720 ~0.17014117E39 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.31415927E1 ~4 ~0.4E1 -~0.27182817E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.11754944E~37 ~1 ~0.1E1 -~0.5877472E~38 ~1 ~0.1E1 -~0.1E~44 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25 0 -zero ~0.25 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.5 0 -zero ~0.5 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.75 0 -zero ~0.75 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195518 -1.144729853 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -1 -0.4342944622 -0.4107813537 -7.544136047 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342376947 -1.856761098 -0.2070141882 -0.9424888492 -1.564468503 -1.109053612 -2.819815874 -0.8425793648 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240715 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf -0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195518 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136047 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342376947 -1.856761098 -nan -nan -~0.9424888492 -~1.564468503 -nan -~2.819815874 -~0.8425793648 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240715 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 -~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 -~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 -~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 -~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.5877472E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754942E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 -~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 -~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.5877472E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754942E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.5877472E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.5877472E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754942E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754942E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.5877472E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754942E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.5877472E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754942E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.5877472E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.5877472E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754942E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754942E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.17976931348623157E309 = 0.9999999999999999 * 2^1024 - = 0.17976931348623157E309 -0.8988465674311579E308 = 0.9999999999999999 * 2^1023 - = 0.8988465674311579E308 -0.123E4 = 0.6005859375 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.3141592653589793E1 = 0.7853981633974483 * 2^2 - = 0.3141592653589793E1 -0.2718281828459045E1 = 0.6795704571147613 * 2^2 - = 0.2718281828459045E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.22250738585072014E~307 = 0.5 * 2^~1021 - = 0.22250738585072014E~307 -0.0 = 0.0 * 2^0 - = 0.0 -~0.17976931348623157E309 = ~0.9999999999999999 * 2^1024 - = ~0.17976931348623157E309 -~0.8988465674311579E308 = ~0.9999999999999999 * 2^1023 - = ~0.8988465674311579E308 -~0.123E4 = ~0.6005859375 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.3141592653589793E1 = ~0.7853981633974483 * 2^2 - = ~0.3141592653589793E1 -~0.2718281828459045E1 = ~0.6795704571147613 * 2^2 - = ~0.2718281828459045E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.22250738585072014E~307 = ~0.5 * 2^~1021 - = ~0.22250738585072014E~307 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large diff -Nru mlton-20130715/regression/real.s390-linux.ok mlton-20210117+dfsg/regression/real.s390-linux.ok --- mlton-20130715/regression/real.s390-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.s390-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,17876 +0,0 @@ - -Testing Real32 - -Testing fmt -0.34028235E39 -3.402823E38 -340282346638528859811704183484516925440.000000 -3.40282346639E38 -3E38 -340282346638528859811704183484516925440 -3E38 -3.4028234664E38 -340282346638528859811704183484516925440.0000000000 -3.402823466E38 -0.17014117E39 -1.701412E38 -170141173319264429905852091742258462720.000000 -1.70141173319E38 -2E38 -170141173319264429905852091742258462720 -2E38 -1.7014117332E38 -170141173319264429905852091742258462720.0000000000 -1.701411733E38 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3000001907 -1E1 -12 -10 -1.2300000191E1 -12.3000001907 -12.30000019 -0.31415927E1 -3.141593E0 -3.141593 -3.14159274101 -3E0 -3 -3 -3.1415927410E0 -3.1415927410 -3.141592741 -0.27182817E1 -2.718282E0 -2.718282 -2.71828174591 -3E0 -3 -3 -2.7182817459E0 -2.7182817459 -2.718281746 -0.123E1 -1.230000E0 -1.230000 -1.23000001907 -1E0 -1 -1 -1.2300000191E0 -1.2300000191 -1.230000019 -0.123 -1.230000E~1 -0.123000 -0.123000003397 -1E~1 -0 -0.1 -1.2300000340E~1 -0.1230000034 -0.1230000034 -0.123E~2 -1.230000E~3 -0.001230 -0.0012300000526 -1E~3 -0 -1E~3 -1.2300000526E~3 -0.0012300001 -0.001230000053 -0.11754944E~37 -1.175494E~38 -0.000000 -1.17549435082E~38 -1E~38 -0 -1E~38 -1.1754943508E~38 -0.0000000000 -1.175494351E~38 -0.5877472E~38 -5.877472E~39 -0.000000 -5.87747175411E~39 -6E~39 -0 -6E~39 -5.8774717541E~39 -0.0000000000 -5.877471754E~39 -0.1E~44 -1.401298E~45 -0.000000 -1.40129846432E~45 -1E~45 -0 -1E~45 -1.4012984643E~45 -0.0000000000 -1.401298464E~45 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.34028235E39 -~3.402823E38 -~340282346638528859811704183484516925440.000000 -~3.40282346639E38 -~3E38 -~340282346638528859811704183484516925440 -~3E38 -~3.4028234664E38 -~340282346638528859811704183484516925440.0000000000 -~3.402823466E38 -~0.17014117E39 -~1.701412E38 -~170141173319264429905852091742258462720.000000 -~1.70141173319E38 -~2E38 -~170141173319264429905852091742258462720 -~2E38 -~1.7014117332E38 -~170141173319264429905852091742258462720.0000000000 -~1.701411733E38 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3000001907 -~1E1 -~12 -~10 -~1.2300000191E1 -~12.3000001907 -~12.30000019 -~0.31415927E1 -~3.141593E0 -~3.141593 -~3.14159274101 -~3E0 -~3 -~3 -~3.1415927410E0 -~3.1415927410 -~3.141592741 -~0.27182817E1 -~2.718282E0 -~2.718282 -~2.71828174591 -~3E0 -~3 -~3 -~2.7182817459E0 -~2.7182817459 -~2.718281746 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23000001907 -~1E0 -~1 -~1 -~1.2300000191E0 -~1.2300000191 -~1.230000019 -~0.123 -~1.230000E~1 -~0.123000 -~0.123000003397 -~1E~1 -~0 -~0.1 -~1.2300000340E~1 -~0.1230000034 -~0.1230000034 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.0012300000526 -~1E~3 -~0 -~1E~3 -~1.2300000526E~3 -~0.0012300001 -~0.001230000053 -~0.11754944E~37 -~1.175494E~38 -~0.000000 -~1.17549435082E~38 -~1E~38 -~0 -~1E~38 -~1.1754943508E~38 -~0.0000000000 -~1.175494351E~38 -~0.5877472E~38 -~5.877472E~39 -~0.000000 -~5.87747175411E~39 -~6E~39 -~0 -~6E~39 -~5.8774717541E~39 -~0.0000000000 -~5.877471754E~39 -~0.1E~44 -~1.401298E~45 -~0.000000 -~1.40129846432E~45 -~1E~45 -~0 -~1E~45 -~1.4012984643E~45 -~0.0000000000 -~1.401298464E~45 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.31415927E1 0.31415927E1 -0.27182817E1 0.27182817E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.11754944E~37 0.11754944E~37 -0.5877472E~38 0.5877472E~38 -0.1E~44 0.1E~44 -0.0 0.0 -~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.31415927E1 ~0.31415927E1 -~0.27182817E1 ~0.27182817E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.11754944E~37 ~0.11754944E~37 -~0.5877472E~38 ~0.5877472E~38 -~0.1E~44 ~0.1E~44 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.34028235E39 normal - isFinite = true isNan = false isNormal = true -0.17014117E39 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.31415927E1 normal - isFinite = true isNan = false isNormal = true -0.27182817E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.34028235E39 normal - isFinite = true isNan = false isNormal = true -~0.17014117E39 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.31415927E1 normal - isFinite = true isNan = false isNormal = true -~0.27182817E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -~0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -~0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -3.40282346639E38 -3.40282346639E38 -true -1.40129846432E~45 -1.40129846432E~45 -true -1.17549435082E~38 -1.17549435082E~38 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.34028235E39 340282346638528859811704183484516925440 0.34028235E39 -0.17014117E39 170141173319264429905852091742258462720 0.17014117E39 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.31415927E1 3 0.3E1 -0.27182817E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.11754944E~37 0 0.0 -0.5877472E~38 0 0.0 -0.1E~44 0 0.0 -0.0 0 0.0 -~0.34028235E39 ~340282346638528859811704183484516925440 ~0.34028235E39 -~0.17014117E39 ~170141173319264429905852091742258462720 ~0.17014117E39 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.31415927E1 ~4 ~0.4E1 -~0.27182817E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.11754944E~37 ~1 ~0.1E1 -~0.5877472E~38 ~1 ~0.1E1 -~0.1E~44 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25 0 -zero ~0.25 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.5 0 -zero ~0.5 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.75 0 -zero ~0.75 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195518 -1.144729853 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -1 -0.4342944622 -0.4107813537 -7.544136047 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342376947 -1.856761098 -0.2070141882 -0.9424888492 -1.564468503 -1.109053612 -2.819815874 -0.8425793648 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240715 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf -0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195518 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136047 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342376947 -1.856761098 -nan -nan -~0.9424888492 -~1.564468503 -nan -~2.819815874 -~0.8425793648 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240715 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 -~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 -~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 -~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 -~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.5877472E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754942E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 -~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 -~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.5877472E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754942E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.5877472E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.5877472E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754942E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754942E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.5877472E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754942E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.5877472E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754942E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.5877472E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.5877472E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754942E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754942E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.17976931348623157E309 = 0.9999999999999999 * 2^1024 - = 0.17976931348623157E309 -0.8988465674311579E308 = 0.9999999999999999 * 2^1023 - = 0.8988465674311579E308 -0.123E4 = 0.6005859375 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.3141592653589793E1 = 0.7853981633974483 * 2^2 - = 0.3141592653589793E1 -0.2718281828459045E1 = 0.6795704571147613 * 2^2 - = 0.2718281828459045E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.22250738585072014E~307 = 0.5 * 2^~1021 - = 0.22250738585072014E~307 -0.0 = 0.0 * 2^0 - = 0.0 -~0.17976931348623157E309 = ~0.9999999999999999 * 2^1024 - = ~0.17976931348623157E309 -~0.8988465674311579E308 = ~0.9999999999999999 * 2^1023 - = ~0.8988465674311579E308 -~0.123E4 = ~0.6005859375 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.3141592653589793E1 = ~0.7853981633974483 * 2^2 - = ~0.3141592653589793E1 -~0.2718281828459045E1 = ~0.6795704571147613 * 2^2 - = ~0.2718281828459045E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.22250738585072014E~307 = ~0.5 * 2^~1021 - = ~0.22250738585072014E~307 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large diff -Nru mlton-20130715/regression/real.sml mlton-20210117+dfsg/regression/real.sml --- mlton-20130715/regression/real.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.sml 2021-12-28 17:19:36.000000000 +0000 @@ -68,47 +68,59 @@ val _ = let - fun doit (s,r, s0, s1, s2, s6) = + fun doit (r, s0, s1, s2, s6) = if (fmt (StringCvt.FIX (SOME 0)) r = s0 andalso fmt (StringCvt.FIX (SOME 1)) r = s1 andalso fmt (StringCvt.FIX (SOME 2)) r = s2 andalso fmt (StringCvt.FIX (SOME 6)) r = s6 andalso fmt (StringCvt.FIX NONE) r = s6) then () - else raise Fail (concat ["fmt bug: ", s, " ", exact r]) + else print (concat ["fmt FIX bug: ", exact r, "\n", + "\t", fmt (StringCvt.FIX (SOME 0)) r, " ", s0, "\n", + "\t", fmt (StringCvt.FIX (SOME 1)) r, " ", s1, "\n", + "\t", fmt (StringCvt.FIX (SOME 2)) r, " ", s2, "\n", + "\t", fmt (StringCvt.FIX (SOME 6)) r, " ", s6, "\n", + "\t", fmt (StringCvt.FIX NONE) r, " ", s6, "\n"]) in List.app - (fn (s,r, s0, s1, s2, s6) => - (doit (s,r, s0, s1, s2, s6) + (fn (r, s0, s1, s2, s6) => + (doit (r, s0, s1, s2, s6) ; if r == zero then () - else doit (s^"~",~r, "~"^s0, "~"^s1, "~"^s2, "~"^s6))) - [("a", s2r "0.0", "0", "0.0", "0.00", "0.000000"), - ("b", s2r "1.0", "1", "1.0", "1.00", "1.000000"), - ("c", s2r "1.4", "1", "1.4", "1.40", "1.400000"), - ("d", s2r "1.5", "2", "1.5", "1.50", "1.500000"), - ("e", s2r "2.5", "2", "2.5", "2.50", "2.500000"), - ("f", s2r "1.6", "2", "1.6", "1.60", "1.600000"), - ("h", s2r "3.141592653589", "3", "3.1", "3.14", "3.141593"), - ("j", s2r "91827365478400.0", "91827365478400", "91827365478400.0", + else doit (~r, "~"^s0, "~"^s1, "~"^s2, "~"^s6))) + [(s2r "0.0", "0", "0.0", "0.00", "0.000000"), + (s2r "1.0", "1", "1.0", "1.00", "1.000000"), + (s2r "1.4", "1", "1.4", "1.40", "1.400000"), + (s2r "1.5", "2", "1.5", "1.50", "1.500000"), + (s2r "2.5", "2", "2.5", "2.50", "2.500000"), + (s2r "1.6", "2", "1.6", "1.60", "1.600000"), + (s2r "3.141592653589", "3", "3.1", "3.14", "3.141593"), + (s2r "91827365478400.0", "91827365478400", "91827365478400.0", "91827365478400.00", "91827365478400.000000")] end val _ = let - fun chkSCI (r, s0, s1, s2, s6) = - fmt (StringCvt.SCI (SOME 0)) r = s0 - andalso fmt (StringCvt.SCI (SOME 1)) r = s1 - andalso fmt (StringCvt.SCI (SOME 2)) r = s2 - andalso fmt (StringCvt.SCI (SOME 6)) r = s6 - andalso fmt (StringCvt.SCI NONE) r = s6 + fun doit (r, s0, s1, s2, s6) = + if (fmt (StringCvt.SCI (SOME 0)) r = s0 + andalso fmt (StringCvt.SCI (SOME 1)) r = s1 + andalso fmt (StringCvt.SCI (SOME 2)) r = s2 + andalso fmt (StringCvt.SCI (SOME 6)) r = s6 + andalso fmt (StringCvt.SCI NONE) r = s6) + then () + else print (concat ["fmt SCI bug: ", exact r, "\n", + "\t", fmt (StringCvt.SCI (SOME 0)) r, " ", s0, "\n", + "\t", fmt (StringCvt.SCI (SOME 1)) r, " ", s1, "\n", + "\t", fmt (StringCvt.SCI (SOME 2)) r, " ", s2, "\n", + "\t", fmt (StringCvt.SCI (SOME 6)) r, " ", s6, "\n", + "\t", fmt (StringCvt.SCI NONE) r, " ", s6, "\n"]) in List.app (fn (r, s0, s1, s2, s6) => - if chkSCI(r, s0, s1, s2, s6) - andalso (r == zero orelse chkSCI(~r, "~"^s0, "~"^s1, "~"^s2, "~"^s6)) - then () - else raise Fail (concat ["fmt SCI bug: ", exact r])) + (doit (r, s0, s1, s2, s6) + ; if r == zero + then () + else doit (~r, "~"^s0, "~"^s1, "~"^s2, "~"^s6))) [(s2r "0.0", "0E0", "0.0E0", "0.00E0", "0.000000E0"), (s2r "0.0012345678", "1E~3", "1.2E~3", "1.23E~3", "1.234568E~3"), (s2r "1.0", "1E0", "1.0E0", "1.00E0", "1.000000E0"), @@ -121,21 +133,26 @@ val _ = let - fun chkGEN (r, s1, s2, s6, s12) = - fmt (StringCvt.GEN (SOME 1)) r = s1 - andalso fmt (StringCvt.GEN (SOME 2)) r = s2 - andalso fmt (StringCvt.GEN (SOME 6)) r = s6 - andalso fmt (StringCvt.GEN (SOME 12)) r = s12 - andalso fmt (StringCvt.GEN NONE) r = s12 - andalso toString r = s12; + fun doit (r, s1, s2, s6, s12) = + if (fmt (StringCvt.GEN (SOME 1)) r = s1 + andalso fmt (StringCvt.GEN (SOME 2)) r = s2 + andalso fmt (StringCvt.GEN (SOME 6)) r = s6 + andalso fmt (StringCvt.GEN (SOME 12)) r = s12 + andalso fmt (StringCvt.GEN NONE) r = s12) + then () + else print (concat ["fmt GEN bug: ", exact r, "\n", + "\t", fmt (StringCvt.GEN (SOME 1)) r, " ", s1, "\n", + "\t", fmt (StringCvt.GEN (SOME 2)) r, " ", s2, "\n", + "\t", fmt (StringCvt.GEN (SOME 6)) r, " ", s6, "\n", + "\t", fmt (StringCvt.GEN (SOME 12)) r, " ", s12, "\n", + "\t", fmt (StringCvt.GEN NONE) r, " ", s12, "\n"]) in List.app (fn (r, s1, s2, s6, s12) => - if chkGEN(r, s1, s2, s6, s12) - andalso (r == zero orelse - chkGEN(~r, "~"^s1, "~"^s2, "~"^s6, "~"^s12)) - then () - else raise Fail (concat ["fmt GEN bug: ", exact r])) + (doit (r, s1, s2, s6, s12) + ; if r == zero + then () + else doit (~r, "~"^s1, "~"^s2, "~"^s6, "~"^s12))) [(s2r "0.0", "0", "0", "0", "0"), (s2r "1.0", "1", "1", "1", "1"), (s2r "1.5", "2", "1.5", "1.5", "1.5"), @@ -152,7 +169,7 @@ in if r == r' orelse unordered (r, r') then () - else raise Fail "scan bug" + else print (concat ["scan bug ", exact r, "\n"]) end) val _ = print "\nTesting checkFloat\n" @@ -164,7 +181,7 @@ | NAN => ((checkFloat r; false) handle Div => true | _ => false) | _ => (checkFloat r; true) handle _ => false) then () - else raise Fail "checkFloat bug") + else print (concat ["checkFloat bug: ", exact r, "\n"])) val _ = print "\nTesting class, isFinite, isNan, isNormal\n" val _ = @@ -257,7 +274,9 @@ (fn (s1, s2) => if valOf (fromString s1) == valOf (fromString s2) then () - else raise Fail "fromString bug") + else print (concat ["fromString bug: ", + s1, " ", exact (valOf (fromString s1)), " ", + s2, " ", exact (valOf (fromString s2)), "\n"])) [("12.", "12.0"), ("12.E", "12.0"), ("12.E+", "12.0"), @@ -423,7 +442,7 @@ in if r' == realFloor r then () - else raise Fail "bug" + else print (concat ["{from,to}LargeInt bug: ", exact r, "\n"]) end) val roundingModes = @@ -470,7 +489,7 @@ in if r == fromInt (round r) then () - else raise Fail "fromInt bug" + else print (concat ["fromInt bug: ", exact r, "\n"]) end) val _ = print "\nTesting toInt\n" @@ -484,7 +503,7 @@ NONE => () | SOME i => if i = LargeInt.toInt (toLargeInt mode r) then () - else raise Fail "bug") + else print (concat ["toInt ", name, " bug: ", exact r, "\n"])) roundingModes) val _ = print "\nTesting ceil,floor,round,trunc\n" @@ -493,16 +512,16 @@ for (fn r => List.app - (fn (mode, f) => + (fn (mode, f, name) => case SOME (toInt mode r) handle Overflow => NONE of NONE => () | SOME i => if i = f r then () - else raise Fail "bug") - [(TO_NEAREST, round), - (TO_NEGINF, floor), - (TO_POSINF, ceil), - (TO_ZERO, trunc)]) + else print (concat [name, " bug: ", exact r, "\n"])) + [(TO_NEAREST, round, "round"), + (TO_NEGINF, floor, "floor"), + (TO_POSINF, ceil, "ceil"), + (TO_ZERO, trunc, "trunc")]) val _ = print "\nTesting copySign, sameSign, sign, signBit\n" val _ = @@ -523,7 +542,7 @@ andalso (sameSign (r1, r2)) = (signBit r1 = signBit r2) andalso sameSign (r2, copySign (r1, r2))) then () - else raise Fail "bug"))) + else print (concat ["copySign,sameSign,sign,signBit bug: ", exact r1, " ", exact r2, "\n"])))) val _ = print "\nTesting max, min\n" @@ -543,11 +562,65 @@ andalso (r1 == min orelse r2 == min orelse (isNan r1 andalso isNan r2)) then () - else raise Fail "bug" + else print (concat ["max,min bug: ", exact r1, " ", exact r2, "\n"]) end)) -val _ = print "\nTesting Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh}\n" - +val _ = print "\nTesting Real.{~,*,+,-,/,nextAfter,rem}\n" + +val _ = + for' + (fn r => + List.app + (fn (name, f, except) => + if List.exists (fn r' => r == r') except + then () + else + print (concat [name, " (", exact r, ") = ", + exact (f r), "\n"])) + [("~", ~, []) + ]) + +val _ = + for' + (fn r1 => + for' + (fn r2 => + List.app + (fn (name, f, except) => + if List.exists (fn (r1', r2') => r1 == r1' andalso r2 == r2') except + then () + else + print (concat [name, " (", exact r1, ", ", exact r2, ") = ", + exact (f (r1, r2)), "\n"])) + [("*", op *, []), + ("+", op +, []), + ("-", op -, []), + ("/", op /, []), + ("nextAfter", nextAfter, []), + ("rem", rem, []) + ])) + +val _ = + List.app + (fn (r1, r2, name, f, chk) => + if chk (f (r1, r2)) + then () + else print (concat [name, "(", exact r1, ",", exact r2, ") bug: ", exact (f (r1, r2)), "\n"])) + [(posInf, posInf, "+", op +, fn x => x == posInf), + (negInf, negInf, "+", op +, fn x => x == negInf), + (posInf, negInf, "-", op -, fn x => x == posInf), + (negInf, posInf, "-", op -, fn x => x == negInf), + (nan, one, "+", op +, isNan), + (nan, one, "-", op -, isNan), + (nan, one, "*", op *, isNan), + (nan, one, "/", op /, isNan), + (posInf, negInf, "+", op +, isNan), + (negInf, posInf, "+", op +, isNan), + (posInf, posInf, "-", op -, isNan), + (negInf, negInf, "-", op -, isNan)] + +val _ = print "\nTesting Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh,atan2,pow}\n" + val _ = for' (fn r => List.app @@ -555,7 +628,7 @@ if List.exists (fn r' => r == r') except then () else - print (concat [(*name, " ", exact r, " = ", *) + print (concat [name, " (", exact r, ") = ", fmt (StringCvt.GEN (SOME 10)) (f r), "\n"])) let open Real.Math @@ -563,23 +636,18 @@ [("acos", acos, []), ("asin", asin, []), ("atan", atan, []), - ("cos", cos, [maxFinite, halfMaxFinite, - ~maxFinite, ~halfMaxFinite]), - ("cosh", cosh, [s2r "12.3", s2r "~12.3", e, ~e]), - ("exp", exp, [s2r "12.3", pi, s2r "1.23", - s2r "~12.3", ~pi, s2r "~1.23"]), + ("cos", cos, []), + ("cosh", cosh, []), + ("exp", exp, []), ("ln", ln, []), - ("log10", log10, [s2r "1.23", pi]), - ("sin", sin, [maxFinite, halfMaxFinite, - ~maxFinite, ~halfMaxFinite, pi, ~pi]), - ("sinh", sinh, [pi, ~pi, s2r "0.123", s2r "~0.123"]), - ("sqrt", sqrt, [maxFinite]), - ("tan", tan, [maxFinite, halfMaxFinite, - ~maxFinite, ~halfMaxFinite, pi, ~pi]), - ("tanh", tanh, [s2r "0.123", s2r "~0.123"])] + ("log10", log10, []), + ("sin", sin, []), + ("sinh", sinh, []), + ("sqrt", sqrt, []), + ("tan", tan, []), + ("tanh", tanh, [])] end) -val _ = print "\nTesting Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow}\n" val _ = for' (fn r1 => @@ -590,34 +658,17 @@ if List.exists (fn (r1', r2') => r1 == r1' andalso r2 == r2') except then () else - print (concat [(*name, " (", exact r1, ", ", exact r2, ") = ", *) - exact (f (r1, r2)), "\n"])) - [("*", op *, []), - ("+", op +, []), - ("-", op -, []), - ("/", op /, [(s2r "1.23", halfMaxFinite), - (s2r "1.23", ~halfMaxFinite), - (s2r "~1.23", halfMaxFinite), - (s2r "~1.23", ~halfMaxFinite) - ]), - ("nextAfter", nextAfter, []) -(* ("rem", rem, []), *) -(* ("atan2", Math.atan2, []), *) -(* ("pow", Math.pow, [(halfMaxFinite, s2r "0.123"), (pi, e)]) *) - ])) - -val _ = - if List.all (op ==) [(posInf + posInf, posInf), - (negInf + negInf, negInf), - (posInf - negInf, posInf), - (negInf - posInf, negInf)] - andalso List.all isNan [nan, nan + one, nan - one, nan * one, nan / one] - andalso List.all isNan [posInf + negInf, negInf + posInf, posInf - posInf, - negInf - negInf] - then () - else raise Fail "bug" + print (concat [name, " (", exact r1, ", ", exact r2, ") = ", + fmt (StringCvt.GEN (SOME 10)) (f (r1, r2)), "\n"])) + let + open Real.Math + in + [("atan2", atan2, []), + ("pow", pow, [])] + end)) val _ = print "\nTesting *+, *-\n" +val fmaDiffs = ref false val _ = for (fn r1 => @@ -625,9 +676,35 @@ (fn r2 => for (fn r3 => - if *+ (r1, r2, r3) == r1 * r2 + r3 - then () - else raise Fail "*+ bug"))) + let + val fma = *+ (r1, r2, r3) + val std = r1 * r2 + r3 + in + if fma == std + then () + else (print o concat) + [(if !fmaDiffs then + "" + else + let + val _ = fmaDiffs := true + in + concat["SOME *+ AND STANDARD RESULTS DIFFER\n", + "(r1, r2, r3): *+(r1, r2, r3)\t(r1 * r2 + r3)\n", + "--------------------------------------------\n"] + end), + "(", + exact r1, + ", ", + exact r2, + ", ", + exact r3, + "): ", + exact fma, + "\t", + exact std, + "\n"] + end))) val _ = print "\nTesting Real.{realCeil,realFloor,realTrunc}\n" val _ = @@ -646,7 +723,7 @@ andalso r <= ceil andalso abs trunc <= abs r then () - else raise Fail "bug" + else print (concat ["Real.{realCeil,realFloor,realTrunc} bug ", exact r, "\n"]) end) val _ = print "\nTesting Real.{<,<=,>,>=,==,!=,?=,unordered}\n" @@ -660,7 +737,7 @@ val _ = List.app (fn (f, name) => - print (concat [(* name, " (", exact r1, ", ", exact r2, ") = ", *) + print (concat [name, " (", exact r1, ", ", exact r2, ") = ", b2s (f (r1, r2)), "\n"])) [(Real.<, "<"), (Real.>, ">"), @@ -681,7 +758,7 @@ else ((r1 < r2) = not (r1 >= r2) andalso (r1 > r2) = not (r1 <= r2)) then () - else raise Fail "bug" + else print (concat ["Real.{<,<=,>,>=,==,!=,?=,unordered} bug: ", exact r1, " ", exact r2, "\n"]) end)) val _ = print "\nTesting compare, compareReal\n" @@ -707,9 +784,8 @@ | GREATER => "GREATER" | LESS => "LESS" | UNORDERED => "UNORDERED" - val _ = - print (concat [(* exact r, " ", exact r', "\t", *) - c, "\t", cr, "\n"]) + val _ = print (concat ["compare (", exact r, ", ", exact r', ") = ", c, "\n"]) + val _ = print (concat ["compareReal (", exact r, ", ", exact r', ") = ", cr, "\n"]) in if compareReal (r, r') = (case compareReal (r', r) of EQUAL => EQUAL @@ -717,7 +793,7 @@ | LESS => GREATER | UNORDERED => UNORDERED) then () - else raise Fail "compareReal bug" + else print (concat ["compareReal bug: ", exact r, " ", exact r', "\n"]) end)) val _ = print "\nTesting abs\n" @@ -725,7 +801,7 @@ val _ = for (fn r => if abs r == abs (~ r) then () - else raise Fail "abs bug") + else print (concat ["abs bug: ", exact r, "\n"])) val _ = print "\nTesting {from,to}ManExp\n" @@ -753,7 +829,7 @@ in if x == x' then () - else raise Fail "bug" + else print (concat ["{from,to}ManExp bug: ", exact x, "\n"]) end) val _ = print "\nTesting split\n" @@ -783,7 +859,7 @@ | NAN => isNan whole andalso isNan frac | _ => r == whole + frac) then () - else raise Fail "bug" + else print (concat ["split bug: ", exact r, "\n"]) end) val _ = print "\nTesting {from,to}Large\n" @@ -793,7 +869,7 @@ (fn r => if r == fromLarge TO_NEAREST (toLarge r) then () - else raise Fail "{from,to}Large bug") + else print (concat ["{from,to}Large bug: ", exact r, "\n"])) end diff -Nru mlton-20130715/regression/real.sparc-linux.ok mlton-20210117+dfsg/regression/real.sparc-linux.ok --- mlton-20130715/regression/real.sparc-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.sparc-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,17876 +0,0 @@ - -Testing Real32 - -Testing fmt -0.34028235E39 -3.402823E38 -340282346638528859811704183484516925440.000000 -3.40282346639E38 -3E38 -340282346638528859811704183484516925440 -3E38 -3.4028234664E38 -340282346638528859811704183484516925440.0000000000 -3.402823466E38 -0.17014117E39 -1.701412E38 -170141173319264429905852091742258462720.000000 -1.70141173319E38 -2E38 -170141173319264429905852091742258462720 -2E38 -1.7014117332E38 -170141173319264429905852091742258462720.0000000000 -1.701411733E38 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3000001907 -1E1 -12 -10 -1.2300000191E1 -12.3000001907 -12.30000019 -0.31415927E1 -3.141593E0 -3.141593 -3.14159274101 -3E0 -3 -3 -3.1415927410E0 -3.1415927410 -3.141592741 -0.27182817E1 -2.718282E0 -2.718282 -2.71828174591 -3E0 -3 -3 -2.7182817459E0 -2.7182817459 -2.718281746 -0.123E1 -1.230000E0 -1.230000 -1.23000001907 -1E0 -1 -1 -1.2300000191E0 -1.2300000191 -1.230000019 -0.123 -1.230000E~1 -0.123000 -0.123000003397 -1E~1 -0 -0.1 -1.2300000340E~1 -0.1230000034 -0.1230000034 -0.123E~2 -1.230000E~3 -0.001230 -0.0012300000526 -1E~3 -0 -1E~3 -1.2300000526E~3 -0.0012300001 -0.001230000053 -0.11754944E~37 -1.175494E~38 -0.000000 -1.17549435082E~38 -1E~38 -0 -1E~38 -1.1754943508E~38 -0.0000000000 -1.175494351E~38 -0.5877472E~38 -5.877472E~39 -0.000000 -5.87747175411E~39 -6E~39 -0 -6E~39 -5.8774717541E~39 -0.0000000000 -5.877471754E~39 -0.1E~44 -1.401298E~45 -0.000000 -1.40129846432E~45 -1E~45 -0 -1E~45 -1.4012984643E~45 -0.0000000000 -1.401298464E~45 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.34028235E39 -~3.402823E38 -~340282346638528859811704183484516925440.000000 -~3.40282346639E38 -~3E38 -~340282346638528859811704183484516925440 -~3E38 -~3.4028234664E38 -~340282346638528859811704183484516925440.0000000000 -~3.402823466E38 -~0.17014117E39 -~1.701412E38 -~170141173319264429905852091742258462720.000000 -~1.70141173319E38 -~2E38 -~170141173319264429905852091742258462720 -~2E38 -~1.7014117332E38 -~170141173319264429905852091742258462720.0000000000 -~1.701411733E38 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3000001907 -~1E1 -~12 -~10 -~1.2300000191E1 -~12.3000001907 -~12.30000019 -~0.31415927E1 -~3.141593E0 -~3.141593 -~3.14159274101 -~3E0 -~3 -~3 -~3.1415927410E0 -~3.1415927410 -~3.141592741 -~0.27182817E1 -~2.718282E0 -~2.718282 -~2.71828174591 -~3E0 -~3 -~3 -~2.7182817459E0 -~2.7182817459 -~2.718281746 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23000001907 -~1E0 -~1 -~1 -~1.2300000191E0 -~1.2300000191 -~1.230000019 -~0.123 -~1.230000E~1 -~0.123000 -~0.123000003397 -~1E~1 -~0 -~0.1 -~1.2300000340E~1 -~0.1230000034 -~0.1230000034 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.0012300000526 -~1E~3 -~0 -~1E~3 -~1.2300000526E~3 -~0.0012300001 -~0.001230000053 -~0.11754944E~37 -~1.175494E~38 -~0.000000 -~1.17549435082E~38 -~1E~38 -~0 -~1E~38 -~1.1754943508E~38 -~0.0000000000 -~1.175494351E~38 -~0.5877472E~38 -~5.877472E~39 -~0.000000 -~5.87747175411E~39 -~6E~39 -~0 -~6E~39 -~5.8774717541E~39 -~0.0000000000 -~5.877471754E~39 -~0.1E~44 -~1.401298E~45 -~0.000000 -~1.40129846432E~45 -~1E~45 -~0 -~1E~45 -~1.4012984643E~45 -~0.0000000000 -~1.401298464E~45 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.31415927E1 0.31415927E1 -0.27182817E1 0.27182817E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.11754944E~37 0.11754944E~37 -0.5877472E~38 0.5877472E~38 -0.1E~44 0.1E~44 -0.0 0.0 -~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.31415927E1 ~0.31415927E1 -~0.27182817E1 ~0.27182817E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.11754944E~37 ~0.11754944E~37 -~0.5877472E~38 ~0.5877472E~38 -~0.1E~44 ~0.1E~44 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.34028235E39 normal - isFinite = true isNan = false isNormal = true -0.17014117E39 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.31415927E1 normal - isFinite = true isNan = false isNormal = true -0.27182817E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.34028235E39 normal - isFinite = true isNan = false isNormal = true -~0.17014117E39 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.31415927E1 normal - isFinite = true isNan = false isNormal = true -~0.27182817E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.11754944E~37 normal - isFinite = true isNan = false isNormal = true -~0.5877472E~38 subnormal - isFinite = true isNan = false isNormal = false -~0.1E~44 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -3.40282346639E38 -3.40282346639E38 -true -1.40129846432E~45 -1.40129846432E~45 -true -1.17549435082E~38 -1.17549435082E~38 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.34028235E39 340282346638528859811704183484516925440 0.34028235E39 -0.17014117E39 170141173319264429905852091742258462720 0.17014117E39 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.31415927E1 3 0.3E1 -0.27182817E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.11754944E~37 0 0.0 -0.5877472E~38 0 0.0 -0.1E~44 0 0.0 -0.0 0 0.0 -~0.34028235E39 ~340282346638528859811704183484516925440 ~0.34028235E39 -~0.17014117E39 ~170141173319264429905852091742258462720 ~0.17014117E39 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.31415927E1 ~4 ~0.4E1 -~0.27182817E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.11754944E~37 ~1 ~0.1E1 -~0.5877472E~38 ~1 ~0.1E1 -~0.1E~44 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1E13 999999995904 -nearest ~0.1E13 ~999999995904 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1E13 999999995904 -neginf ~0.1E13 ~999999995904 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1E13 999999995904 -posinf ~0.1E13 ~999999995904 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25 0 -zero ~0.25 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.5 0 -zero ~0.5 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.75 0 -zero ~0.75 0 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1E13 999999995904 -zero ~0.1E13 ~999999995904 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796371 -inf -inf -88.72283936 -38.53184128 -inf -1 -nan -nan -1.570796371 -inf -inf -88.0296936 -38.23080826 -inf -1.30438176E19 -1 -nan -nan -1.569983363 -0.06642717123 -inf -inf -7.114769459 -3.089905024 -~0.9977912903 -inf -35.07135773 -~15.02083111 -1 -nan -nan -1.489673972 -0.9647326469 -2.509599209 -1.089905143 -~0.2632316053 -109848.0156 -3.50713563 -~0.2728544474 -1 -nan -nan -1.262627244 -~1 -11.59195518 -1.144729853 -1.772453904 -0.9962720871 -nan -nan -1.218282938 -~0.9117338657 -15.15426064 -1 -0.4342944622 -0.4107813537 -7.544136047 -1.648721218 -~0.4505496323 -0.9913288951 -nan -nan -0.888173759 -0.3342376947 -1.856761098 -0.2070141882 -0.9424888492 -1.564468503 -1.109053612 -2.819815874 -0.8425793648 -1.447484016 -0.1233122796 -0.1223852858 -0.9924450517 -1.007574081 -1.130884409 -~2.095570803 -~0.9100948572 -0.1226900965 -0.350713551 -0.1236240715 -1.569566369 -0.001230000402 -0.001229999471 -0.9999992251 -1.000000715 -1.001230717 -~6.700741291 -~2.910094976 -0.001229999703 -0.001230000402 -0.03507135808 -0.001230000635 -0.001229999471 -1.570796371 -1.175494351E~38 -1.175494351E~38 -1 -1 -1 -~87.33654785 -~37.92977905 -1.175494351E~38 -1.175494351E~38 -1.084202172E~19 -1.175494351E~38 -1.175494351E~38 -1.570796371 -5.877471754E~39 -5.877471754E~39 -1 -1 -1 -~88.0296936 -~38.23080826 -5.877471754E~39 -5.877471754E~39 -7.666466952E~20 -5.877471754E~39 -5.877471754E~39 -1.570796371 -1.401298464E~45 -1.401298464E~45 -1 -1 -1 -~103.2789307 -~44.85346985 -1.401298464E~45 -1.401298464E~45 -3.743392067E~23 -1.401298464E~45 -1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796371 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983363 -0.06642717123 -inf -0 -nan -nan -0.9977912903 -~inf -nan -15.02083111 -~1 -nan -nan -~1.489673972 -0.9647326469 -nan -nan -0.2632316053 -~109848.0156 -nan -0.2728544474 -~1 -nan -nan -~1.262627244 -~1 -11.59195518 -nan -nan -nan -~0.9962720871 -nan -nan -~1.218282938 -~0.9117338657 -0.06598804146 -nan -nan -~0.4107813537 -~7.544136047 -nan -0.4505496323 -~0.9913288951 -nan -nan -~0.888173759 -0.3342376947 -1.856761098 -nan -nan -~0.9424888492 -~1.564468503 -nan -~2.819815874 -~0.8425793648 -1.694108605 -~0.1233122796 -~0.1223852858 -0.9924450517 -1.007574081 -0.8842636347 -nan -nan -~0.1226900965 -nan -~0.1236240715 -1.572026372 -~0.001230000402 -~0.001229999471 -0.9999992251 -1.000000715 -0.9987707734 -nan -nan -~0.001229999703 -~0.001230000402 -nan -~0.001230000635 -~0.001229999471 -1.570796371 -~1.175494351E~38 -~1.175494351E~38 -1 -1 -1 -nan -nan -~1.175494351E~38 -~1.175494351E~38 -nan -~1.175494351E~38 -~1.175494351E~38 -1.570796371 -~5.877471754E~39 -~5.877471754E~39 -1 -1 -1 -nan -nan -~5.877471754E~39 -~5.877471754E~39 -nan -~5.877471754E~39 -~5.877471754E~39 -1.570796371 -~1.401298464E~45 -~1.401298464E~45 -1 -1 -1 -nan -nan -~1.401298464E~45 -~1.401298464E~45 -nan -~1.401298464E~45 -~1.401298464E~45 -1.570796371 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796371 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796371 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.34028235E39 -inf -inf -0.17014117E39 -0.2E1 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.2766523E36 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665232E38 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.10831523E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.12518288E39 -0.34028233E39 -inf -0.34028235E39 -0.34028235E39 -0.27665231E39 -0.34028233E39 -0.4185473E38 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.4185473E36 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.39999998E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.19999999E1 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.47683713E~6 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -0.0 -0.34028235E39 -0.34028235E39 -inf -0.34028233E39 -~inf -0.0 -inf -~0.1E1 -0.34028233E39 -~inf -0.17014117E39 -inf -~0.2E1 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.2766523E36 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665232E38 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.10831523E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.12518288E39 -0.34028233E39 -~inf -0.34028235E39 -0.34028235E39 -~0.27665231E39 -0.34028233E39 -~0.4185473E38 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.4185473E36 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.39999998E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.19999999E1 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.47683713E~6 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -~0.0 -0.34028235E39 -0.34028235E39 -~inf -0.34028233E39 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.34028233E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.17014117E39 -0.5 -0.17014118E39 -inf -0.34028235E39 -0.0 -0.1E1 -0.17014117E39 -inf -0.17014117E39 -0.17014117E39 -0.13832615E36 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.13832616E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.54157613E38 -0.17014116E39 -inf -0.17014117E39 -0.17014117E39 -0.6259144E38 -0.17014116E39 -0.20927364E39 -0.17014117E39 -0.17014117E39 -0.13832616E39 -0.17014116E39 -0.20927365E38 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.20927364E36 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.19999999E1 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.99999994 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.23841856E~6 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -0.0 -0.17014117E39 -0.17014117E39 -inf -0.17014116E39 -~inf -~0.17014117E39 -inf -~0.5 -0.17014116E39 -~inf -0.0 -0.34028235E39 -~0.1E1 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832615E36 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.13832616E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.54157613E38 -0.17014116E39 -~inf -0.17014117E39 -0.17014117E39 -~0.6259144E38 -0.17014116E39 -~0.20927364E39 -0.17014117E39 -0.17014117E39 -~0.13832616E39 -0.17014116E39 -~0.20927365E38 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.20927364E36 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.19999999E1 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.99999994 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.23841856E~6 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -~0.0 -0.17014117E39 -0.17014117E39 -~inf -0.17014116E39 -inf -inf -~inf -0.0 -0.17014118E39 -~inf -~inf -inf -~0.0 -0.17014116E39 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.17014118E39 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~35 -0.12300001E4 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~35 -0.12300001E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999E4 -0.38641592E4 -0.12331416E4 -0.12268584E4 -0.39152115E3 -0.12299999E4 -0.33434866E4 -0.12327183E4 -0.12272817E4 -0.45249173E3 -0.12299999E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999E4 -0.15129001E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999E4 -0.15129001E1 -0.12300012E4 -0.12299988E4 -0.99999994E6 -0.12299999E4 -0.1445858E~34 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.722929E~35 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.1724E~41 -0.123E4 -0.123E4 -inf -0.12299999E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999E4 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~35 -0.12299999E4 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~35 -0.12299999E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999E4 -~0.38641592E4 -0.12268584E4 -0.12331416E4 -~0.39152115E3 -0.12299999E4 -~0.33434866E4 -0.12272817E4 -0.12327183E4 -~0.45249173E3 -0.12299999E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999E4 -~0.15129001E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999E4 -~0.15129001E1 -0.12299988E4 -0.12300012E4 -~0.99999994E6 -0.12299999E4 -~0.1445858E~34 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.722929E~35 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.1724E~41 -0.123E4 -0.123E4 -~inf -0.12299999E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999E4 -inf -inf -~inf -0.0 -0.12300001E4 -~inf -~inf -inf -~0.0 -0.12299999E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E4 -inf -0.34028235E39 -~0.34028235E39 -0.36146455E~37 -0.12300001E2 -inf -0.17014117E39 -~0.17014117E39 -0.7229291E~37 -0.12300001E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300001E2 -0.15129001E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864159E2 -0.15441593E2 -0.9158407E1 -0.39152114E1 -0.12299999E2 -0.33434868E2 -0.15018282E2 -0.9581718E1 -0.4524917E1 -0.12299999E2 -0.15129001E2 -0.13530001E2 -0.1107E2 -0.1E2 -0.12299999E2 -0.15129001E1 -0.12423E2 -0.12177E2 -0.1E3 -0.12299999E2 -0.15129001E~1 -0.1230123E2 -0.1229877E2 -0.1E5 -0.12299999E2 -0.14458581E~36 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.72292904E~37 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.17E~43 -0.123E2 -0.123E2 -inf -0.12299999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999E2 -~inf -~0.34028235E39 -0.34028235E39 -~0.36146455E~37 -0.12299999E2 -~inf -~0.17014117E39 -0.17014117E39 -~0.7229291E~37 -0.12299999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999E2 -~0.15129001E3 -0.0 -0.246E2 -~0.1E1 -0.12299999E2 -~0.3864159E2 -0.9158407E1 -0.15441593E2 -~0.39152114E1 -0.12299999E2 -~0.33434868E2 -0.9581718E1 -0.15018282E2 -~0.4524917E1 -0.12299999E2 -~0.15129001E2 -0.1107E2 -0.13530001E2 -~0.1E2 -0.12299999E2 -~0.15129001E1 -0.12177E2 -0.12423E2 -~0.1E3 -0.12299999E2 -~0.15129001E~1 -0.1229877E2 -0.1230123E2 -~0.1E5 -0.12299999E2 -~0.14458581E~36 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.72292904E~37 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.17E~43 -0.123E2 -0.123E2 -~inf -0.12299999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999E2 -inf -inf -~inf -0.0 -0.12300001E2 -~inf -~inf -inf -~0.0 -0.12299999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E2 -inf -0.34028235E39 -~0.34028235E39 -0.9232312E~38 -0.3141593E1 -inf -0.17014117E39 -~0.17014117E39 -0.18464624E~37 -0.3141593E1 -0.38641592E4 -0.12331416E4 -~0.12268584E4 -0.25541405E~2 -0.3141593E1 -0.3864159E2 -0.15441593E2 -~0.9158407E1 -0.25541404 -0.3141593E1 -0.9869605E1 -0.62831855E1 -0.0 -0.1E1 -0.31415927E1 -0.8539734E1 -0.58598747E1 -0.423311 -0.11557274E1 -0.31415925E1 -0.3864159E1 -0.43715925E1 -0.19115927E1 -0.25541403E1 -0.31415925E1 -0.38641593 -0.32645926E1 -0.30185928E1 -0.25541403E2 -0.31415925E1 -0.38641593E~2 -0.31428227E1 -0.31403627E1 -0.25541404E4 -0.31415925E1 -0.36929245E~37 -0.31415927E1 -0.31415927E1 -0.26725715E39 -0.31415925E1 -0.18464623E~37 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.4E~44 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -0.0 -0.31415927E1 -0.31415927E1 -inf -0.31415925E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.9232312E~38 -0.31415925E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.18464624E~37 -0.31415925E1 -~0.38641592E4 -~0.12268584E4 -0.12331416E4 -~0.25541405E~2 -0.31415925E1 -~0.3864159E2 -~0.9158407E1 -0.15441593E2 -~0.25541404 -0.31415925E1 -~0.9869605E1 -0.0 -0.62831855E1 -~0.1E1 -0.31415925E1 -~0.8539734E1 -0.423311 -0.58598747E1 -~0.11557274E1 -0.31415925E1 -~0.3864159E1 -0.19115927E1 -0.43715925E1 -~0.25541403E1 -0.31415925E1 -~0.38641593 -0.30185928E1 -0.32645926E1 -~0.25541403E2 -0.31415925E1 -~0.38641593E~2 -0.31403627E1 -0.31428227E1 -~0.25541404E4 -0.31415925E1 -~0.36929245E~37 -0.31415927E1 -0.31415927E1 -~0.26725715E39 -0.31415925E1 -~0.18464623E~37 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.4E~44 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -~0.0 -0.31415927E1 -0.31415927E1 -~inf -0.31415925E1 -inf -inf -~inf -0.0 -0.3141593E1 -~inf -~inf -inf -~0.0 -0.31415925E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3141593E1 -inf -0.34028235E39 -~0.34028235E39 -0.7988312E~38 -0.2718282E1 -inf -0.17014117E39 -~0.17014117E39 -0.15976626E~37 -0.2718282E1 -0.33434866E4 -0.12327183E4 -~0.12272817E4 -0.22099852E~2 -0.2718282E1 -0.33434868E2 -0.15018282E2 -~0.9581718E1 -0.22099851 -0.2718282E1 -0.8539734E1 -0.58598747E1 -~0.423311 -0.86525595 -0.2718282E1 -0.73890557E1 -0.54365635E1 -0.0 -0.1E1 -0.27182817E1 -0.33434865E1 -0.39482818E1 -0.14882817E1 -0.2209985E1 -0.27182815E1 -0.33434868 -0.28412817E1 -0.25952818E1 -0.22099852E2 -0.27182815E1 -0.33434867E~2 -0.27195117E1 -0.27170517E1 -0.2209985E4 -0.27182815E1 -0.31953248E~37 -0.27182817E1 -0.27182817E1 -0.23124584E39 -0.27182815E1 -0.15976624E~37 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.4E~44 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -0.0 -0.27182817E1 -0.27182817E1 -inf -0.27182815E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.7988312E~38 -0.27182815E1 -~inf -~0.17014117E39 -0.17014117E39 -~0.15976626E~37 -0.27182815E1 -~0.33434866E4 -~0.12272817E4 -0.12327183E4 -~0.22099852E~2 -0.27182815E1 -~0.33434868E2 -~0.9581718E1 -0.15018282E2 -~0.22099851 -0.27182815E1 -~0.8539734E1 -~0.423311 -0.58598747E1 -~0.86525595 -0.27182815E1 -~0.73890557E1 -0.0 -0.54365635E1 -~0.1E1 -0.27182815E1 -~0.33434865E1 -0.14882817E1 -0.39482818E1 -~0.2209985E1 -0.27182815E1 -~0.33434868 -0.25952818E1 -0.28412817E1 -~0.22099852E2 -0.27182815E1 -~0.33434867E~2 -0.27170517E1 -0.27195117E1 -~0.2209985E4 -0.27182815E1 -~0.31953248E~37 -0.27182817E1 -0.27182817E1 -~0.23124584E39 -0.27182815E1 -~0.15976624E~37 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.4E~44 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -~0.0 -0.27182817E1 -0.27182817E1 -~inf -0.27182815E1 -inf -inf -~inf -0.0 -0.2718282E1 -~inf -~inf -inf -~0.0 -0.27182815E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2718282E1 -inf -0.34028235E39 -~0.34028235E39 -0.3614645E~38 -0.12300001E1 -0.20927364E39 -0.17014117E39 -~0.17014117E39 -0.12300001E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300001E1 -0.15129001E2 -0.13530001E2 -~0.1107E2 -0.1 -0.12300001E1 -0.3864159E1 -0.43715925E1 -~0.19115927E1 -0.39152116 -0.12300001E1 -0.33434865E1 -0.39482818E1 -~0.14882817E1 -0.45249173 -0.12300001E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999E1 -0.15129001E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999E1 -0.14458581E~37 -0.123E1 -0.123E1 -0.10463683E39 -0.12299999E1 -0.722929E~38 -0.123E1 -0.123E1 -0.20927366E39 -0.12299999E1 -0.1E~44 -0.123E1 -0.123E1 -inf -0.12299999E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999E1 -~inf -~0.34028235E39 -0.34028235E39 -~0.3614645E~38 -0.12299999E1 -~0.20927364E39 -~0.17014117E39 -0.17014117E39 -0.12299999E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999E1 -~0.15129001E2 -~0.1107E2 -0.13530001E2 -~0.1 -0.12299999E1 -~0.3864159E1 -~0.19115927E1 -0.43715925E1 -~0.39152116 -0.12299999E1 -~0.33434865E1 -~0.14882817E1 -0.39482818E1 -~0.45249173 -0.12299999E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999E1 -~0.15129001E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999E1 -~0.14458581E~37 -0.123E1 -0.123E1 -~0.10463683E39 -0.12299999E1 -~0.722929E~38 -0.123E1 -0.123E1 -~0.20927366E39 -0.12299999E1 -~0.1E~44 -0.123E1 -0.123E1 -~inf -0.12299999E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999E1 -inf -inf -~inf -0.0 -0.12300001E1 -~inf -~inf -inf -~0.0 -0.12299999E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001E1 -0.4185473E38 -0.34028235E39 -~0.34028235E39 -0.361465E~39 -0.12300001 -0.20927365E38 -0.17014117E39 -~0.17014117E39 -0.722928E~39 -0.12300001 -0.15129001E3 -0.1230123E4 -~0.1229877E4 -0.100000005E~3 -0.12300001 -0.15129001E1 -0.12423E2 -~0.12177E2 -0.1E~1 -0.12300001 -0.38641593 -0.32645926E1 -~0.30185928E1 -0.39152116E~1 -0.12300001 -0.33434868 -0.28412817E1 -~0.25952818E1 -0.45249175E~1 -0.12300001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300001 -0.15129001E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.124230005 -0.12177 -0.1E3 -0.122999996 -0.1445858E~38 -0.123 -0.123 -0.10463683E38 -0.122999996 -0.722928E~39 -0.123 -0.123 -0.20927366E38 -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -0.0 -0.123 -0.123 -inf -0.122999996 -~0.4185473E38 -~0.34028235E39 -0.34028235E39 -~0.361465E~39 -0.122999996 -~0.20927365E38 -~0.17014117E39 -0.17014117E39 -~0.722928E~39 -0.122999996 -~0.15129001E3 -~0.1229877E4 -0.1230123E4 -~0.100000005E~3 -0.122999996 -~0.15129001E1 -~0.12177E2 -0.12423E2 -~0.1E~1 -0.122999996 -~0.38641593 -~0.30185928E1 -0.32645926E1 -~0.39152116E~1 -0.122999996 -~0.33434868 -~0.25952818E1 -0.28412817E1 -~0.45249175E~1 -0.122999996 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.122999996 -~0.15129001E~1 -0.0 -0.246 -~0.1E1 -0.122999996 -~0.15129E~3 -0.12177 -0.124230005 -~0.1E3 -0.122999996 -~0.1445858E~38 -0.123 -0.123 -~0.10463683E38 -0.122999996 -~0.722928E~39 -0.123 -0.123 -~0.20927366E38 -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -~0.0 -0.123 -0.123 -~inf -0.122999996 -inf -inf -~inf -0.0 -0.12300001 -~inf -~inf -inf -~0.0 -0.122999996 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300001 -0.4185473E36 -0.34028235E39 -~0.34028235E39 -0.3614E~41 -0.12300002E~2 -0.20927364E36 -0.17014117E39 -~0.17014117E39 -0.7229E~41 -0.12300002E~2 -0.15129001E1 -0.12300012E4 -~0.12299988E4 -0.1E~5 -0.12300002E~2 -0.15129001E~1 -0.1230123E2 -~0.1229877E2 -0.100000005E~3 -0.12300002E~2 -0.38641593E~2 -0.31428227E1 -~0.31403627E1 -0.39152117E~3 -0.12300002E~2 -0.33434867E~2 -0.27195117E1 -~0.27170517E1 -0.45249175E~3 -0.12300002E~2 -0.15129001E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300002E~2 -0.15129E~3 -0.124230005 -~0.12177 -0.1E~1 -0.12300002E~2 -0.15129001E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.14459E~40 -0.123E~2 -0.123E~2 -0.10463683E36 -0.12299999E~2 -0.7229E~41 -0.123E~2 -0.123E~2 -0.20927366E36 -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999E~2 -~0.4185473E36 -~0.34028235E39 -0.34028235E39 -~0.3614E~41 -0.12299999E~2 -~0.20927364E36 -~0.17014117E39 -0.17014117E39 -~0.7229E~41 -0.12299999E~2 -~0.15129001E1 -~0.12299988E4 -0.12300012E4 -~0.1E~5 -0.12299999E~2 -~0.15129001E~1 -~0.1229877E2 -0.1230123E2 -~0.100000005E~3 -0.12299999E~2 -~0.38641593E~2 -~0.31403627E1 -0.31428227E1 -~0.39152117E~3 -0.12299999E~2 -~0.33434867E~2 -~0.27170517E1 -0.27195117E1 -~0.45249175E~3 -0.12299999E~2 -~0.15129001E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999E~2 -~0.15129E~3 -~0.12177 -0.124230005 -~0.1E~1 -0.12299999E~2 -~0.15129001E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999E~2 -~0.14459E~40 -0.123E~2 -0.123E~2 -~0.10463683E36 -0.12299999E~2 -~0.7229E~41 -0.123E~2 -0.123E~2 -~0.20927366E36 -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999E~2 -inf -inf -~inf -0.0 -0.12300002E~2 -~inf -~inf -inf -~0.0 -0.12299999E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300002E~2 -0.39999998E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.11754945E~37 -0.19999999E1 -0.17014117E39 -~0.17014117E39 -0.0 -0.11754945E~37 -0.1445858E~34 -0.123E4 -~0.123E4 -0.9557E~41 -0.11754945E~37 -0.14458581E~36 -0.123E2 -~0.123E2 -0.955687E~39 -0.11754945E~37 -0.36929245E~37 -0.31415927E1 -~0.31415927E1 -0.3741715E~38 -0.11754945E~37 -0.31953248E~37 -0.27182817E1 -~0.27182817E1 -0.4324403E~38 -0.11754945E~37 -0.14458581E~37 -0.123E1 -~0.123E1 -0.9556864E~38 -0.11754945E~37 -0.1445858E~38 -0.123 -~0.123 -0.9556864E~37 -0.11754945E~37 -0.14459E~40 -0.123E~2 -~0.123E~2 -0.95568645E~35 -0.11754945E~37 -0.0 -0.23509887E~37 -0.0 -0.1E1 -0.11754944E~37 -0.0 -0.17632415E~37 -0.5877472E~38 -0.2E1 -0.11754942E~37 -0.0 -0.11754945E~37 -0.11754942E~37 -0.8388608E7 -0.11754942E~37 -0.0 -0.11754944E~37 -0.11754944E~37 -inf -0.11754942E~37 -~0.39999998E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.11754942E~37 -~0.19999999E1 -~0.17014117E39 -0.17014117E39 -~0.0 -0.11754942E~37 -~0.1445858E~34 -~0.123E4 -0.123E4 -~0.9557E~41 -0.11754942E~37 -~0.14458581E~36 -~0.123E2 -0.123E2 -~0.955687E~39 -0.11754942E~37 -~0.36929245E~37 -~0.31415927E1 -0.31415927E1 -~0.3741715E~38 -0.11754942E~37 -~0.31953248E~37 -~0.27182817E1 -0.27182817E1 -~0.4324403E~38 -0.11754942E~37 -~0.14458581E~37 -~0.123E1 -0.123E1 -~0.9556864E~38 -0.11754942E~37 -~0.1445858E~38 -~0.123 -0.123 -~0.9556864E~37 -0.11754942E~37 -~0.14459E~40 -~0.123E~2 -0.123E~2 -~0.95568645E~35 -0.11754942E~37 -~0.0 -0.0 -0.23509887E~37 -~0.1E1 -0.11754942E~37 -~0.0 -0.5877472E~38 -0.17632415E~37 -~0.2E1 -0.11754942E~37 -~0.0 -0.11754942E~37 -0.11754945E~37 -~0.8388608E7 -0.11754942E~37 -~0.0 -0.11754944E~37 -0.11754944E~37 -~inf -0.11754942E~37 -inf -inf -~inf -0.0 -0.11754945E~37 -~inf -~inf -inf -~0.0 -0.11754942E~37 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.11754945E~37 -0.19999999E1 -0.34028235E39 -~0.34028235E39 -0.0 -0.5877473E~38 -0.99999994 -0.17014117E39 -~0.17014117E39 -0.0 -0.5877473E~38 -0.722929E~35 -0.123E4 -~0.123E4 -0.4778E~41 -0.5877473E~38 -0.72292904E~37 -0.123E2 -~0.123E2 -0.477843E~39 -0.5877473E~38 -0.18464623E~37 -0.31415927E1 -~0.31415927E1 -0.1870857E~38 -0.5877473E~38 -0.15976624E~37 -0.27182817E1 -~0.27182817E1 -0.2162201E~38 -0.5877473E~38 -0.722929E~38 -0.123E1 -~0.123E1 -0.4778432E~38 -0.5877473E~38 -0.722928E~39 -0.123 -~0.123 -0.4778432E~37 -0.5877473E~38 -0.7229E~41 -0.123E~2 -~0.123E~2 -0.47784322E~35 -0.5877473E~38 -0.0 -0.17632415E~37 -~0.5877472E~38 -0.5 -0.5877473E~38 -0.0 -0.11754944E~37 -0.0 -0.1E1 -0.5877472E~38 -0.0 -0.5877473E~38 -0.587747E~38 -0.4194304E7 -0.587747E~38 -0.0 -0.5877472E~38 -0.5877472E~38 -inf -0.587747E~38 -~0.19999999E1 -~0.34028235E39 -0.34028235E39 -~0.0 -0.587747E~38 -~0.99999994 -~0.17014117E39 -0.17014117E39 -~0.0 -0.587747E~38 -~0.722929E~35 -~0.123E4 -0.123E4 -~0.4778E~41 -0.587747E~38 -~0.72292904E~37 -~0.123E2 -0.123E2 -~0.477843E~39 -0.587747E~38 -~0.18464623E~37 -~0.31415927E1 -0.31415927E1 -~0.1870857E~38 -0.587747E~38 -~0.15976624E~37 -~0.27182817E1 -0.27182817E1 -~0.2162201E~38 -0.587747E~38 -~0.722929E~38 -~0.123E1 -0.123E1 -~0.4778432E~38 -0.587747E~38 -~0.722928E~39 -~0.123 -0.123 -~0.4778432E~37 -0.587747E~38 -~0.7229E~41 -~0.123E~2 -0.123E~2 -~0.47784322E~35 -0.587747E~38 -~0.0 -~0.5877472E~38 -0.17632415E~37 -~0.5 -0.587747E~38 -~0.0 -0.0 -0.11754944E~37 -~0.1E1 -0.587747E~38 -~0.0 -0.587747E~38 -0.5877473E~38 -~0.4194304E7 -0.587747E~38 -~0.0 -0.5877472E~38 -0.5877472E~38 -~inf -0.587747E~38 -inf -inf -~inf -0.0 -0.5877473E~38 -~inf -~inf -inf -~0.0 -0.587747E~38 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.5877473E~38 -0.47683713E~6 -0.34028235E39 -~0.34028235E39 -0.0 -0.3E~44 -0.23841856E~6 -0.17014117E39 -~0.17014117E39 -0.0 -0.3E~44 -0.1724E~41 -0.123E4 -~0.123E4 -0.0 -0.3E~44 -0.17E~43 -0.123E2 -~0.123E2 -0.0 -0.3E~44 -0.4E~44 -0.31415927E1 -~0.31415927E1 -0.0 -0.3E~44 -0.4E~44 -0.27182817E1 -~0.27182817E1 -0.0 -0.3E~44 -0.1E~44 -0.123E1 -~0.123E1 -0.1E~44 -0.3E~44 -0.0 -0.123 -~0.123 -0.11E~43 -0.3E~44 -0.0 -0.123E~2 -~0.123E~2 -0.1139E~41 -0.3E~44 -0.0 -0.11754945E~37 -~0.11754942E~37 -0.11920929E~6 -0.3E~44 -0.0 -0.5877473E~38 -~0.587747E~38 -0.23841858E~6 -0.3E~44 -0.0 -0.3E~44 -0.0 -0.1E1 -0.1E~44 -0.0 -0.1E~44 -0.1E~44 -inf -0.0 -~0.47683713E~6 -~0.34028235E39 -0.34028235E39 -~0.0 -0.0 -~0.23841856E~6 -~0.17014117E39 -0.17014117E39 -~0.0 -0.0 -~0.1724E~41 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.17E~43 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.4E~44 -~0.31415927E1 -0.31415927E1 -~0.0 -0.0 -~0.4E~44 -~0.27182817E1 -0.27182817E1 -~0.0 -0.0 -~0.1E~44 -~0.123E1 -0.123E1 -~0.1E~44 -0.0 -~0.0 -~0.123 -0.123 -~0.11E~43 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.1139E~41 -0.0 -~0.0 -~0.11754942E~37 -0.11754945E~37 -~0.11920929E~6 -0.0 -~0.0 -~0.587747E~38 -0.5877473E~38 -~0.23841858E~6 -0.0 -~0.0 -0.0 -0.3E~44 -~0.1E1 -0.0 -~0.0 -0.1E~44 -0.1E~44 -~inf -0.0 -inf -inf -~inf -0.0 -0.3E~44 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.3E~44 -0.0 -0.34028235E39 -~0.34028235E39 -0.0 -0.1E~44 -0.0 -0.17014117E39 -~0.17014117E39 -0.0 -0.1E~44 -0.0 -0.123E4 -~0.123E4 -0.0 -0.1E~44 -0.0 -0.123E2 -~0.123E2 -0.0 -0.1E~44 -0.0 -0.31415927E1 -~0.31415927E1 -0.0 -0.1E~44 -0.0 -0.27182817E1 -~0.27182817E1 -0.0 -0.1E~44 -0.0 -0.123E1 -~0.123E1 -0.0 -0.1E~44 -0.0 -0.123 -~0.123 -0.0 -0.1E~44 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.1E~44 -0.0 -0.11754944E~37 -~0.11754944E~37 -0.0 -0.1E~44 -0.0 -0.5877472E~38 -~0.5877472E~38 -0.0 -0.1E~44 -0.0 -0.1E~44 -~0.1E~44 -0.0 -0.1E~44 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.34028235E39 -0.34028235E39 -~0.0 -~0.1E~44 -~0.0 -~0.17014117E39 -0.17014117E39 -~0.0 -~0.1E~44 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.1E~44 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.1E~44 -~0.0 -~0.31415927E1 -0.31415927E1 -~0.0 -~0.1E~44 -~0.0 -~0.27182817E1 -0.27182817E1 -~0.0 -~0.1E~44 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.1E~44 -~0.0 -~0.123 -0.123 -~0.0 -~0.1E~44 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.1E~44 -~0.0 -~0.11754944E~37 -0.11754944E~37 -~0.0 -~0.1E~44 -~0.0 -~0.5877472E~38 -0.5877472E~38 -~0.0 -~0.1E~44 -~0.0 -~0.1E~44 -0.1E~44 -~0.0 -~0.1E~44 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.1E~44 -nan -~inf -inf -~0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.1E~44 -~inf -0.0 -~inf -~0.1E1 -~0.34028233E39 -~inf -~0.17014117E39 -~inf -~0.2E1 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.2766523E36 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665232E38 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.10831523E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.12518288E39 -~0.34028233E39 -~inf -~0.34028235E39 -~0.34028235E39 -~0.27665231E39 -~0.34028233E39 -~0.4185473E38 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.4185473E36 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.39999998E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.19999999E1 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -~0.0 -~0.34028235E39 -~0.34028235E39 -~inf -~0.34028233E39 -inf -~inf -0.0 -0.1E1 -~0.34028235E39 -inf -~inf -~0.17014117E39 -0.2E1 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.2766523E36 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665232E38 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.10831523E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.12518288E39 -~0.34028233E39 -inf -~0.34028235E39 -~0.34028235E39 -0.27665231E39 -~0.34028233E39 -0.4185473E38 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.4185473E36 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.39999998E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.19999999E1 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.47683713E~6 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -0.0 -~0.34028235E39 -~0.34028235E39 -inf -~0.34028233E39 -~inf -inf -~inf -~0.0 -~0.34028233E39 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.34028233E39 -~inf -0.17014117E39 -~inf -~0.5 -~0.17014116E39 -~inf -0.0 -~0.34028235E39 -~0.1E1 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832615E36 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.13832616E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.54157613E38 -~0.17014116E39 -~inf -~0.17014117E39 -~0.17014117E39 -~0.6259144E38 -~0.17014116E39 -~0.20927364E39 -~0.17014117E39 -~0.17014117E39 -~0.13832616E39 -~0.17014116E39 -~0.20927365E38 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.20927364E36 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.19999999E1 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.99999994 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -~0.0 -~0.17014117E39 -~0.17014117E39 -~inf -~0.17014116E39 -inf -~inf -0.17014117E39 -0.5 -~0.17014118E39 -inf -~0.34028235E39 -0.0 -0.1E1 -~0.17014117E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832615E36 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.13832616E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.54157613E38 -~0.17014116E39 -inf -~0.17014117E39 -~0.17014117E39 -0.6259144E38 -~0.17014116E39 -0.20927364E39 -~0.17014117E39 -~0.17014117E39 -0.13832616E39 -~0.17014116E39 -0.20927365E38 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.20927364E36 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.19999999E1 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.99999994 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.23841856E~6 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -0.0 -~0.17014117E39 -~0.17014117E39 -inf -~0.17014116E39 -~inf -inf -~inf -~0.0 -~0.17014116E39 -inf -~inf -inf -0.0 -~0.17014118E39 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17014116E39 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~35 -~0.12299999E4 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~35 -~0.12299999E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999E4 -~0.38641592E4 -~0.12268584E4 -~0.12331416E4 -~0.39152115E3 -~0.12299999E4 -~0.33434866E4 -~0.12272817E4 -~0.12327183E4 -~0.45249173E3 -~0.12299999E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999E4 -~0.15129001E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999E4 -~0.15129001E1 -~0.12299988E4 -~0.12300012E4 -~0.99999994E6 -~0.12299999E4 -~0.1445858E~34 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.722929E~35 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.1724E~41 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999E4 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~35 -~0.12300001E4 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~35 -~0.12300001E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999E4 -0.38641592E4 -~0.12331416E4 -~0.12268584E4 -0.39152115E3 -~0.12299999E4 -0.33434866E4 -~0.12327183E4 -~0.12272817E4 -0.45249173E3 -~0.12299999E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999E4 -0.15129001E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999E4 -0.15129001E1 -~0.12300012E4 -~0.12299988E4 -0.99999994E6 -~0.12299999E4 -0.1445858E~34 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.722929E~35 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.1724E~41 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999E4 -~inf -inf -~inf -~0.0 -~0.12299999E4 -inf -~inf -inf -0.0 -~0.12300001E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E4 -~inf -0.34028235E39 -~0.34028235E39 -~0.36146455E~37 -~0.12299999E2 -~inf -0.17014117E39 -~0.17014117E39 -~0.7229291E~37 -~0.12299999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999E2 -~0.15129001E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999E2 -~0.3864159E2 -~0.9158407E1 -~0.15441593E2 -~0.39152114E1 -~0.12299999E2 -~0.33434868E2 -~0.9581718E1 -~0.15018282E2 -~0.4524917E1 -~0.12299999E2 -~0.15129001E2 -~0.1107E2 -~0.13530001E2 -~0.1E2 -~0.12299999E2 -~0.15129001E1 -~0.12177E2 -~0.12423E2 -~0.1E3 -~0.12299999E2 -~0.15129001E~1 -~0.1229877E2 -~0.1230123E2 -~0.1E5 -~0.12299999E2 -~0.14458581E~36 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.72292904E~37 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.17E~43 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999E2 -inf -~0.34028235E39 -0.34028235E39 -0.36146455E~37 -~0.12300001E2 -inf -~0.17014117E39 -0.17014117E39 -0.7229291E~37 -~0.12300001E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300001E2 -0.15129001E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864159E2 -~0.15441593E2 -~0.9158407E1 -0.39152114E1 -~0.12299999E2 -0.33434868E2 -~0.15018282E2 -~0.9581718E1 -0.4524917E1 -~0.12299999E2 -0.15129001E2 -~0.13530001E2 -~0.1107E2 -0.1E2 -~0.12299999E2 -0.15129001E1 -~0.12423E2 -~0.12177E2 -0.1E3 -~0.12299999E2 -0.15129001E~1 -~0.1230123E2 -~0.1229877E2 -0.1E5 -~0.12299999E2 -0.14458581E~36 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.72292904E~37 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.17E~43 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999E2 -~inf -inf -~inf -~0.0 -~0.12299999E2 -inf -~inf -inf -0.0 -~0.12300001E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E2 -~inf -0.34028235E39 -~0.34028235E39 -~0.9232312E~38 -~0.31415925E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.18464624E~37 -~0.31415925E1 -~0.38641592E4 -0.12268584E4 -~0.12331416E4 -~0.25541405E~2 -~0.31415925E1 -~0.3864159E2 -0.9158407E1 -~0.15441593E2 -~0.25541404 -~0.31415925E1 -~0.9869605E1 -0.0 -~0.62831855E1 -~0.1E1 -~0.31415925E1 -~0.8539734E1 -~0.423311 -~0.58598747E1 -~0.11557274E1 -~0.31415925E1 -~0.3864159E1 -~0.19115927E1 -~0.43715925E1 -~0.25541403E1 -~0.31415925E1 -~0.38641593 -~0.30185928E1 -~0.32645926E1 -~0.25541403E2 -~0.31415925E1 -~0.38641593E~2 -~0.31403627E1 -~0.31428227E1 -~0.25541404E4 -~0.31415925E1 -~0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -~0.26725715E39 -~0.31415925E1 -~0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.4E~44 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -~0.0 -~0.31415927E1 -~0.31415927E1 -~inf -~0.31415925E1 -inf -~0.34028235E39 -0.34028235E39 -0.9232312E~38 -~0.3141593E1 -inf -~0.17014117E39 -0.17014117E39 -0.18464624E~37 -~0.3141593E1 -0.38641592E4 -~0.12331416E4 -0.12268584E4 -0.25541405E~2 -~0.3141593E1 -0.3864159E2 -~0.15441593E2 -0.9158407E1 -0.25541404 -~0.3141593E1 -0.9869605E1 -~0.62831855E1 -0.0 -0.1E1 -~0.31415927E1 -0.8539734E1 -~0.58598747E1 -~0.423311 -0.11557274E1 -~0.31415925E1 -0.3864159E1 -~0.43715925E1 -~0.19115927E1 -0.25541403E1 -~0.31415925E1 -0.38641593 -~0.32645926E1 -~0.30185928E1 -0.25541403E2 -~0.31415925E1 -0.38641593E~2 -~0.31428227E1 -~0.31403627E1 -0.25541404E4 -~0.31415925E1 -0.36929245E~37 -~0.31415927E1 -~0.31415927E1 -0.26725715E39 -~0.31415925E1 -0.18464623E~37 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.4E~44 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -0.0 -~0.31415927E1 -~0.31415927E1 -inf -~0.31415925E1 -~inf -inf -~inf -~0.0 -~0.31415925E1 -inf -~inf -inf -0.0 -~0.3141593E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415925E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.7988312E~38 -~0.27182815E1 -~inf -0.17014117E39 -~0.17014117E39 -~0.15976626E~37 -~0.27182815E1 -~0.33434866E4 -0.12272817E4 -~0.12327183E4 -~0.22099852E~2 -~0.27182815E1 -~0.33434868E2 -0.9581718E1 -~0.15018282E2 -~0.22099851 -~0.27182815E1 -~0.8539734E1 -0.423311 -~0.58598747E1 -~0.86525595 -~0.27182815E1 -~0.73890557E1 -0.0 -~0.54365635E1 -~0.1E1 -~0.27182815E1 -~0.33434865E1 -~0.14882817E1 -~0.39482818E1 -~0.2209985E1 -~0.27182815E1 -~0.33434868 -~0.25952818E1 -~0.28412817E1 -~0.22099852E2 -~0.27182815E1 -~0.33434867E~2 -~0.27170517E1 -~0.27195117E1 -~0.2209985E4 -~0.27182815E1 -~0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -~0.23124584E39 -~0.27182815E1 -~0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.4E~44 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -~0.0 -~0.27182817E1 -~0.27182817E1 -~inf -~0.27182815E1 -inf -~0.34028235E39 -0.34028235E39 -0.7988312E~38 -~0.2718282E1 -inf -~0.17014117E39 -0.17014117E39 -0.15976626E~37 -~0.2718282E1 -0.33434866E4 -~0.12327183E4 -0.12272817E4 -0.22099852E~2 -~0.2718282E1 -0.33434868E2 -~0.15018282E2 -0.9581718E1 -0.22099851 -~0.2718282E1 -0.8539734E1 -~0.58598747E1 -0.423311 -0.86525595 -~0.2718282E1 -0.73890557E1 -~0.54365635E1 -0.0 -0.1E1 -~0.27182817E1 -0.33434865E1 -~0.39482818E1 -~0.14882817E1 -0.2209985E1 -~0.27182815E1 -0.33434868 -~0.28412817E1 -~0.25952818E1 -0.22099852E2 -~0.27182815E1 -0.33434867E~2 -~0.27195117E1 -~0.27170517E1 -0.2209985E4 -~0.27182815E1 -0.31953248E~37 -~0.27182817E1 -~0.27182817E1 -0.23124584E39 -~0.27182815E1 -0.15976624E~37 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.4E~44 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -0.0 -~0.27182817E1 -~0.27182817E1 -inf -~0.27182815E1 -~inf -inf -~inf -~0.0 -~0.27182815E1 -inf -~inf -inf -0.0 -~0.2718282E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182815E1 -~inf -0.34028235E39 -~0.34028235E39 -~0.3614645E~38 -~0.12299999E1 -~0.20927364E39 -0.17014117E39 -~0.17014117E39 -~0.12299999E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999E1 -~0.15129001E2 -0.1107E2 -~0.13530001E2 -~0.1 -~0.12299999E1 -~0.3864159E1 -0.19115927E1 -~0.43715925E1 -~0.39152116 -~0.12299999E1 -~0.33434865E1 -0.14882817E1 -~0.39482818E1 -~0.45249173 -~0.12299999E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999E1 -~0.15129001E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999E1 -~0.14458581E~37 -~0.123E1 -~0.123E1 -~0.10463683E39 -~0.12299999E1 -~0.722929E~38 -~0.123E1 -~0.123E1 -~0.20927366E39 -~0.12299999E1 -~0.1E~44 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999E1 -inf -~0.34028235E39 -0.34028235E39 -0.3614645E~38 -~0.12300001E1 -0.20927364E39 -~0.17014117E39 -0.17014117E39 -~0.12300001E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300001E1 -0.15129001E2 -~0.13530001E2 -0.1107E2 -0.1 -~0.12300001E1 -0.3864159E1 -~0.43715925E1 -0.19115927E1 -0.39152116 -~0.12300001E1 -0.33434865E1 -~0.39482818E1 -0.14882817E1 -0.45249173 -~0.12300001E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999E1 -0.15129001E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999E1 -0.14458581E~37 -~0.123E1 -~0.123E1 -0.10463683E39 -~0.12299999E1 -0.722929E~38 -~0.123E1 -~0.123E1 -0.20927366E39 -~0.12299999E1 -0.1E~44 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999E1 -~inf -inf -~inf -~0.0 -~0.12299999E1 -inf -~inf -inf -0.0 -~0.12300001E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E1 -~0.4185473E38 -0.34028235E39 -~0.34028235E39 -~0.361465E~39 -~0.122999996 -~0.20927365E38 -0.17014117E39 -~0.17014117E39 -~0.722928E~39 -~0.122999996 -~0.15129001E3 -0.1229877E4 -~0.1230123E4 -~0.100000005E~3 -~0.122999996 -~0.15129001E1 -0.12177E2 -~0.12423E2 -~0.1E~1 -~0.122999996 -~0.38641593 -0.30185928E1 -~0.32645926E1 -~0.39152116E~1 -~0.122999996 -~0.33434868 -0.25952818E1 -~0.28412817E1 -~0.45249175E~1 -~0.122999996 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.122999996 -~0.15129001E~1 -0.0 -~0.246 -~0.1E1 -~0.122999996 -~0.15129E~3 -~0.12177 -~0.124230005 -~0.1E3 -~0.122999996 -~0.1445858E~38 -~0.123 -~0.123 -~0.10463683E38 -~0.122999996 -~0.722928E~39 -~0.123 -~0.123 -~0.20927366E38 -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -~0.0 -~0.123 -~0.123 -~inf -~0.122999996 -0.4185473E38 -~0.34028235E39 -0.34028235E39 -0.361465E~39 -~0.12300001 -0.20927365E38 -~0.17014117E39 -0.17014117E39 -0.722928E~39 -~0.12300001 -0.15129001E3 -~0.1230123E4 -0.1229877E4 -0.100000005E~3 -~0.12300001 -0.15129001E1 -~0.12423E2 -0.12177E2 -0.1E~1 -~0.12300001 -0.38641593 -~0.32645926E1 -0.30185928E1 -0.39152116E~1 -~0.12300001 -0.33434868 -~0.28412817E1 -0.25952818E1 -0.45249175E~1 -~0.12300001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300001 -0.15129001E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.124230005 -~0.12177 -0.1E3 -~0.122999996 -0.1445858E~38 -~0.123 -~0.123 -0.10463683E38 -~0.122999996 -0.722928E~39 -~0.123 -~0.123 -0.20927366E38 -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -0.0 -~0.123 -~0.123 -inf -~0.122999996 -~inf -inf -~inf -~0.0 -~0.122999996 -inf -~inf -inf -0.0 -~0.12300001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.122999996 -~0.4185473E36 -0.34028235E39 -~0.34028235E39 -~0.3614E~41 -~0.12299999E~2 -~0.20927364E36 -0.17014117E39 -~0.17014117E39 -~0.7229E~41 -~0.12299999E~2 -~0.15129001E1 -0.12299988E4 -~0.12300012E4 -~0.1E~5 -~0.12299999E~2 -~0.15129001E~1 -0.1229877E2 -~0.1230123E2 -~0.100000005E~3 -~0.12299999E~2 -~0.38641593E~2 -0.31403627E1 -~0.31428227E1 -~0.39152117E~3 -~0.12299999E~2 -~0.33434867E~2 -0.27170517E1 -~0.27195117E1 -~0.45249175E~3 -~0.12299999E~2 -~0.15129001E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999E~2 -~0.15129E~3 -0.12177 -~0.124230005 -~0.1E~1 -~0.12299999E~2 -~0.15129001E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999E~2 -~0.14459E~40 -~0.123E~2 -~0.123E~2 -~0.10463683E36 -~0.12299999E~2 -~0.7229E~41 -~0.123E~2 -~0.123E~2 -~0.20927366E36 -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999E~2 -0.4185473E36 -~0.34028235E39 -0.34028235E39 -0.3614E~41 -~0.12300002E~2 -0.20927364E36 -~0.17014117E39 -0.17014117E39 -0.7229E~41 -~0.12300002E~2 -0.15129001E1 -~0.12300012E4 -0.12299988E4 -0.1E~5 -~0.12300002E~2 -0.15129001E~1 -~0.1230123E2 -0.1229877E2 -0.100000005E~3 -~0.12300002E~2 -0.38641593E~2 -~0.31428227E1 -0.31403627E1 -0.39152117E~3 -~0.12300002E~2 -0.33434867E~2 -~0.27195117E1 -0.27170517E1 -0.45249175E~3 -~0.12300002E~2 -0.15129001E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300002E~2 -0.15129E~3 -~0.124230005 -0.12177 -0.1E~1 -~0.12300002E~2 -0.15129001E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.14459E~40 -~0.123E~2 -~0.123E~2 -0.10463683E36 -~0.12299999E~2 -0.7229E~41 -~0.123E~2 -~0.123E~2 -0.20927366E36 -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999E~2 -~inf -inf -~inf -~0.0 -~0.12299999E~2 -inf -~inf -inf -0.0 -~0.12300002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999E~2 -~0.39999998E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.11754942E~37 -~0.1445858E~34 -0.123E4 -~0.123E4 -~0.9557E~41 -~0.11754942E~37 -~0.14458581E~36 -0.123E2 -~0.123E2 -~0.955687E~39 -~0.11754942E~37 -~0.36929245E~37 -0.31415927E1 -~0.31415927E1 -~0.3741715E~38 -~0.11754942E~37 -~0.31953248E~37 -0.27182817E1 -~0.27182817E1 -~0.4324403E~38 -~0.11754942E~37 -~0.14458581E~37 -0.123E1 -~0.123E1 -~0.9556864E~38 -~0.11754942E~37 -~0.1445858E~38 -0.123 -~0.123 -~0.9556864E~37 -~0.11754942E~37 -~0.14459E~40 -0.123E~2 -~0.123E~2 -~0.95568645E~35 -~0.11754942E~37 -~0.0 -0.0 -~0.23509887E~37 -~0.1E1 -~0.11754942E~37 -~0.0 -~0.5877472E~38 -~0.17632415E~37 -~0.2E1 -~0.11754942E~37 -~0.0 -~0.11754942E~37 -~0.11754945E~37 -~0.8388608E7 -~0.11754942E~37 -~0.0 -~0.11754944E~37 -~0.11754944E~37 -~inf -~0.11754942E~37 -0.39999998E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.11754945E~37 -0.19999999E1 -~0.17014117E39 -0.17014117E39 -0.0 -~0.11754945E~37 -0.1445858E~34 -~0.123E4 -0.123E4 -0.9557E~41 -~0.11754945E~37 -0.14458581E~36 -~0.123E2 -0.123E2 -0.955687E~39 -~0.11754945E~37 -0.36929245E~37 -~0.31415927E1 -0.31415927E1 -0.3741715E~38 -~0.11754945E~37 -0.31953248E~37 -~0.27182817E1 -0.27182817E1 -0.4324403E~38 -~0.11754945E~37 -0.14458581E~37 -~0.123E1 -0.123E1 -0.9556864E~38 -~0.11754945E~37 -0.1445858E~38 -~0.123 -0.123 -0.9556864E~37 -~0.11754945E~37 -0.14459E~40 -~0.123E~2 -0.123E~2 -0.95568645E~35 -~0.11754945E~37 -0.0 -~0.23509887E~37 -0.0 -0.1E1 -~0.11754944E~37 -0.0 -~0.17632415E~37 -~0.5877472E~38 -0.2E1 -~0.11754942E~37 -0.0 -~0.11754945E~37 -~0.11754942E~37 -0.8388608E7 -~0.11754942E~37 -0.0 -~0.11754944E~37 -~0.11754944E~37 -inf -~0.11754942E~37 -~inf -inf -~inf -~0.0 -~0.11754942E~37 -inf -~inf -inf -0.0 -~0.11754945E~37 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11754942E~37 -~0.19999999E1 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.587747E~38 -~0.99999994 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.587747E~38 -~0.722929E~35 -0.123E4 -~0.123E4 -~0.4778E~41 -~0.587747E~38 -~0.72292904E~37 -0.123E2 -~0.123E2 -~0.477843E~39 -~0.587747E~38 -~0.18464623E~37 -0.31415927E1 -~0.31415927E1 -~0.1870857E~38 -~0.587747E~38 -~0.15976624E~37 -0.27182817E1 -~0.27182817E1 -~0.2162201E~38 -~0.587747E~38 -~0.722929E~38 -0.123E1 -~0.123E1 -~0.4778432E~38 -~0.587747E~38 -~0.722928E~39 -0.123 -~0.123 -~0.4778432E~37 -~0.587747E~38 -~0.7229E~41 -0.123E~2 -~0.123E~2 -~0.47784322E~35 -~0.587747E~38 -~0.0 -0.5877472E~38 -~0.17632415E~37 -~0.5 -~0.587747E~38 -~0.0 -0.0 -~0.11754944E~37 -~0.1E1 -~0.587747E~38 -~0.0 -~0.587747E~38 -~0.5877473E~38 -~0.4194304E7 -~0.587747E~38 -~0.0 -~0.5877472E~38 -~0.5877472E~38 -~inf -~0.587747E~38 -0.19999999E1 -~0.34028235E39 -0.34028235E39 -0.0 -~0.5877473E~38 -0.99999994 -~0.17014117E39 -0.17014117E39 -0.0 -~0.5877473E~38 -0.722929E~35 -~0.123E4 -0.123E4 -0.4778E~41 -~0.5877473E~38 -0.72292904E~37 -~0.123E2 -0.123E2 -0.477843E~39 -~0.5877473E~38 -0.18464623E~37 -~0.31415927E1 -0.31415927E1 -0.1870857E~38 -~0.5877473E~38 -0.15976624E~37 -~0.27182817E1 -0.27182817E1 -0.2162201E~38 -~0.5877473E~38 -0.722929E~38 -~0.123E1 -0.123E1 -0.4778432E~38 -~0.5877473E~38 -0.722928E~39 -~0.123 -0.123 -0.4778432E~37 -~0.5877473E~38 -0.7229E~41 -~0.123E~2 -0.123E~2 -0.47784322E~35 -~0.5877473E~38 -0.0 -~0.17632415E~37 -0.5877472E~38 -0.5 -~0.5877473E~38 -0.0 -~0.11754944E~37 -0.0 -0.1E1 -~0.5877472E~38 -0.0 -~0.5877473E~38 -~0.587747E~38 -0.4194304E7 -~0.587747E~38 -0.0 -~0.5877472E~38 -~0.5877472E~38 -inf -~0.587747E~38 -~inf -inf -~inf -~0.0 -~0.587747E~38 -inf -~inf -inf -0.0 -~0.5877473E~38 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.587747E~38 -~0.47683713E~6 -0.34028235E39 -~0.34028235E39 -~0.0 -~0.0 -~0.23841856E~6 -0.17014117E39 -~0.17014117E39 -~0.0 -~0.0 -~0.1724E~41 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.17E~43 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.4E~44 -0.31415927E1 -~0.31415927E1 -~0.0 -~0.0 -~0.4E~44 -0.27182817E1 -~0.27182817E1 -~0.0 -~0.0 -~0.1E~44 -0.123E1 -~0.123E1 -~0.1E~44 -~0.0 -~0.0 -0.123 -~0.123 -~0.11E~43 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.1139E~41 -~0.0 -~0.0 -0.11754942E~37 -~0.11754945E~37 -~0.11920929E~6 -~0.0 -~0.0 -0.587747E~38 -~0.5877473E~38 -~0.23841858E~6 -~0.0 -~0.0 -0.0 -~0.3E~44 -~0.1E1 -~0.0 -~0.0 -~0.1E~44 -~0.1E~44 -~inf -~0.0 -0.47683713E~6 -~0.34028235E39 -0.34028235E39 -0.0 -~0.3E~44 -0.23841856E~6 -~0.17014117E39 -0.17014117E39 -0.0 -~0.3E~44 -0.1724E~41 -~0.123E4 -0.123E4 -0.0 -~0.3E~44 -0.17E~43 -~0.123E2 -0.123E2 -0.0 -~0.3E~44 -0.4E~44 -~0.31415927E1 -0.31415927E1 -0.0 -~0.3E~44 -0.4E~44 -~0.27182817E1 -0.27182817E1 -0.0 -~0.3E~44 -0.1E~44 -~0.123E1 -0.123E1 -0.1E~44 -~0.3E~44 -0.0 -~0.123 -0.123 -0.11E~43 -~0.3E~44 -0.0 -~0.123E~2 -0.123E~2 -0.1139E~41 -~0.3E~44 -0.0 -~0.11754945E~37 -0.11754942E~37 -0.11920929E~6 -~0.3E~44 -0.0 -~0.5877473E~38 -0.587747E~38 -0.23841858E~6 -~0.3E~44 -0.0 -~0.3E~44 -0.0 -0.1E1 -~0.1E~44 -0.0 -~0.1E~44 -~0.1E~44 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.3E~44 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.34028235E39 -~0.34028235E39 -~0.0 -0.1E~44 -~0.0 -0.17014117E39 -~0.17014117E39 -~0.0 -0.1E~44 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.1E~44 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.1E~44 -~0.0 -0.31415927E1 -~0.31415927E1 -~0.0 -0.1E~44 -~0.0 -0.27182817E1 -~0.27182817E1 -~0.0 -0.1E~44 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.1E~44 -~0.0 -0.123 -~0.123 -~0.0 -0.1E~44 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.1E~44 -~0.0 -0.11754944E~37 -~0.11754944E~37 -~0.0 -0.1E~44 -~0.0 -0.5877472E~38 -~0.5877472E~38 -~0.0 -0.1E~44 -~0.0 -0.1E~44 -~0.1E~44 -~0.0 -0.1E~44 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.34028235E39 -0.34028235E39 -0.0 -~0.1E~44 -0.0 -~0.17014117E39 -0.17014117E39 -0.0 -~0.1E~44 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.1E~44 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.1E~44 -0.0 -~0.31415927E1 -0.31415927E1 -0.0 -~0.1E~44 -0.0 -~0.27182817E1 -0.27182817E1 -0.0 -~0.1E~44 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.1E~44 -0.0 -~0.123 -0.123 -0.0 -~0.1E~44 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.1E~44 -0.0 -~0.11754944E~37 -0.11754944E~37 -0.0 -~0.1E~44 -0.0 -~0.5877472E~38 -0.5877472E~38 -0.0 -~0.1E~44 -0.0 -~0.1E~44 -0.1E~44 -0.0 -~0.1E~44 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.1E~44 -nan -~inf -inf -0.0 -~0.1E~44 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.1E~44 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 -0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.31415927E1 0.4E1 0.3E1 0.3E1 -0.27182817E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.11754944E~37 0.1E1 0.0 0.0 -0.5877472E~38 0.1E1 0.0 0.0 -0.1E~44 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 -~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 -~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 -~0.1E~44 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.34028235E39 = 0.99999994 * 2^128 - = 0.34028235E39 -0.17014117E39 = 0.99999994 * 2^127 - = 0.17014117E39 -0.123E4 = 0.60058594 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.31415927E1 = 0.7853982 * 2^2 - = 0.31415927E1 -0.27182817E1 = 0.67957044 * 2^2 - = 0.27182817E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.11754944E~37 = 0.5 * 2^~125 - = 0.11754944E~37 -0.0 = 0.0 * 2^0 - = 0.0 -~0.34028235E39 = ~0.99999994 * 2^128 - = ~0.34028235E39 -~0.17014117E39 = ~0.99999994 * 2^127 - = ~0.17014117E39 -~0.123E4 = ~0.60058594 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.31415927E1 = ~0.7853982 * 2^2 - = ~0.31415927E1 -~0.27182817E1 = ~0.67957044 * 2^2 - = ~0.27182817E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.11754944E~37 = ~0.5 * 2^~125 - = ~0.11754944E~37 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large - -Testing Real64 - -Testing fmt -0.17976931348623157E309 -1.797693E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -1.79769313486E308 -2E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -2E308 -1.7976931349E308 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -1.797693135E308 -0.8988465674311579E308 -8.988466E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -8.98846567431E307 -9E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -9E307 -8.9884656743E307 -89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -8.988465674E307 -0.123E4 -1.230000E3 -1230.000000 -1230 -1E3 -1230 -1E3 -1.2300000000E3 -1230.0000000000 -1230 -0.123E2 -1.230000E1 -12.300000 -12.3 -1E1 -12 -10 -1.2300000000E1 -12.3000000000 -12.3 -0.3141592653589793E1 -3.141593E0 -3.141593 -3.14159265359 -3E0 -3 -3 -3.1415926536E0 -3.1415926536 -3.141592654 -0.2718281828459045E1 -2.718282E0 -2.718282 -2.71828182846 -3E0 -3 -3 -2.7182818285E0 -2.7182818285 -2.718281828 -0.123E1 -1.230000E0 -1.230000 -1.23 -1E0 -1 -1 -1.2300000000E0 -1.2300000000 -1.23 -0.123 -1.230000E~1 -0.123000 -0.123 -1E~1 -0 -0.1 -1.2300000000E~1 -0.1230000000 -0.123 -0.123E~2 -1.230000E~3 -0.001230 -0.00123 -1E~3 -0 -1E~3 -1.2300000000E~3 -0.0012300000 -0.00123 -0.22250738585072014E~307 -2.225074E~308 -0.000000 -2.22507385851E~308 -2E~308 -0 -2E~308 -2.2250738585E~308 -0.0000000000 -2.225073859E~308 -0.11125369292536007E~307 -1.112537E~308 -0.000000 -1.11253692925E~308 -1E~308 -0 -1E~308 -1.1125369293E~308 -0.0000000000 -1.112536929E~308 -0.5E~323 -4.940656E~324 -0.000000 -4.94065645841E~324 -5E~324 -0 -5E~324 -4.9406564584E~324 -0.0000000000 -4.940656458E~324 -0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 -~0.17976931348623157E309 -~1.797693E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -~1.79769313486E308 -~2E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 -~2E308 -~1.7976931349E308 -~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 -~1.797693135E308 -~0.8988465674311579E308 -~8.988466E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 -~8.98846567431E307 -~9E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 -~9E307 -~8.9884656743E307 -~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 -~8.988465674E307 -~0.123E4 -~1.230000E3 -~1230.000000 -~1230 -~1E3 -~1230 -~1E3 -~1.2300000000E3 -~1230.0000000000 -~1230 -~0.123E2 -~1.230000E1 -~12.300000 -~12.3 -~1E1 -~12 -~10 -~1.2300000000E1 -~12.3000000000 -~12.3 -~0.3141592653589793E1 -~3.141593E0 -~3.141593 -~3.14159265359 -~3E0 -~3 -~3 -~3.1415926536E0 -~3.1415926536 -~3.141592654 -~0.2718281828459045E1 -~2.718282E0 -~2.718282 -~2.71828182846 -~3E0 -~3 -~3 -~2.7182818285E0 -~2.7182818285 -~2.718281828 -~0.123E1 -~1.230000E0 -~1.230000 -~1.23 -~1E0 -~1 -~1 -~1.2300000000E0 -~1.2300000000 -~1.23 -~0.123 -~1.230000E~1 -~0.123000 -~0.123 -~1E~1 -~0 -~0.1 -~1.2300000000E~1 -~0.1230000000 -~0.123 -~0.123E~2 -~1.230000E~3 -~0.001230 -~0.00123 -~1E~3 -~0 -~1E~3 -~1.2300000000E~3 -~0.0012300000 -~0.00123 -~0.22250738585072014E~307 -~2.225074E~308 -~0.000000 -~2.22507385851E~308 -~2E~308 -~0 -~2E~308 -~2.2250738585E~308 -~0.0000000000 -~2.225073859E~308 -~0.11125369292536007E~307 -~1.112537E~308 -~0.000000 -~1.11253692925E~308 -~1E~308 -~0 -~1E~308 -~1.1125369293E~308 -~0.0000000000 -~1.112536929E~308 -~0.5E~323 -~4.940656E~324 -~0.000000 -~4.94065645841E~324 -~5E~324 -~0 -~5E~324 -~4.9406564584E~324 -~0.0000000000 -~4.940656458E~324 -~0.0 -0.000000E0 -0.000000 -0 -0E0 -0 -0 -0.0000000000E0 -0.0000000000 -0 - -Testing scan -0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 -0.123E2 0.123E2 -0.3141592653589793E1 0.3141592653589793E1 -0.2718281828459045E1 0.2718281828459045E1 -0.123E1 0.123E1 -0.123 0.123 -0.123E~2 0.123E~2 -0.22250738585072014E~307 0.22250738585072014E~307 -0.11125369292536007E~307 0.11125369292536007E~307 -0.5E~323 0.5E~323 -0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 -~0.123E2 ~0.123E2 -~0.3141592653589793E1 ~0.3141592653589793E1 -~0.2718281828459045E1 ~0.2718281828459045E1 -~0.123E1 ~0.123E1 -~0.123 ~0.123 -~0.123E~2 ~0.123E~2 -~0.22250738585072014E~307 ~0.22250738585072014E~307 -~0.11125369292536007E~307 ~0.11125369292536007E~307 -~0.5E~323 ~0.5E~323 -~0.0 ~0.0 -inf inf -~inf ~inf -nan nan -inf inf - -Testing checkFloat - -Testing class, isFinite, isNan, isNormal -0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -0.123E4 normal - isFinite = true isNan = false isNormal = true -0.123E2 normal - isFinite = true isNan = false isNormal = true -0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -0.123E1 normal - isFinite = true isNan = false isNormal = true -0.123 normal - isFinite = true isNan = false isNormal = true -0.123E~2 normal - isFinite = true isNan = false isNormal = true -0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -0.0 zero - isFinite = true isNan = false isNormal = false -~0.17976931348623157E309 normal - isFinite = true isNan = false isNormal = true -~0.8988465674311579E308 normal - isFinite = true isNan = false isNormal = true -~0.123E4 normal - isFinite = true isNan = false isNormal = true -~0.123E2 normal - isFinite = true isNan = false isNormal = true -~0.3141592653589793E1 normal - isFinite = true isNan = false isNormal = true -~0.2718281828459045E1 normal - isFinite = true isNan = false isNormal = true -~0.123E1 normal - isFinite = true isNan = false isNormal = true -~0.123 normal - isFinite = true isNan = false isNormal = true -~0.123E~2 normal - isFinite = true isNan = false isNormal = true -~0.22250738585072014E~307 normal - isFinite = true isNan = false isNormal = true -~0.11125369292536007E~307 subnormal - isFinite = true isNan = false isNormal = false -~0.5E~323 subnormal - isFinite = true isNan = false isNormal = false -~0.0 zero - isFinite = true isNan = false isNormal = false -inf inf - isFinite = false isNan = false isNormal = false -~inf inf - isFinite = false isNan = false isNormal = false -nan nan - isFinite = false isNan = true isNormal = false -inf inf - isFinite = false isNan = false isNormal = false - -Testing maxFinite, minPos, minNormalPos -1.79769313486E308 -1.79769313486E308 -true -4.94065645841E~324 -4.94065645841E~324 -true -2.22507385851E~308 -2.22507385851E~308 -true - -Testring fromString - -Testing {from,to}Decimal -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -inf inf true -inf inf true -~inf ~inf true -~inf ~inf true -nan nan true -nan nan true -~nan nan true -~nan nan true -0.0 0.0 true -0.0 0.0 true -0.0 0.0 true -~0.0 ~0.0 true -0.15E2 0.15E2 true -0.15E1 0.15E1 true -~0.15E2 ~0.15E2 true -0.15E2 0.15E2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.15E~2 0.15E~2 true -0.12E1000 inf false -~0.12E1000 ~inf false -0.1E~998 0.0 false -~0.1E~998 ~0.0 false -inf inf true - -Testing {from,to}LargeInt -0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 -0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 -0.123E4 1230 0.123E4 -0.123E2 12 0.12E2 -0.3141592653589793E1 3 0.3E1 -0.2718281828459045E1 2 0.2E1 -0.123E1 1 0.1E1 -0.123 0 0.0 -0.123E~2 0 0.0 -0.22250738585072014E~307 0 0.0 -0.11125369292536007E~307 0 0.0 -0.5E~323 0 0.0 -0.0 0 0.0 -~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 -~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 -~0.123E4 ~1230 ~0.123E4 -~0.123E2 ~13 ~0.13E2 -~0.3141592653589793E1 ~4 ~0.4E1 -~0.2718281828459045E1 ~3 ~0.3E1 -~0.123E1 ~2 ~0.2E1 -~0.123 ~1 ~0.1E1 -~0.123E~2 ~1 ~0.1E1 -~0.22250738585072014E~307 ~1 ~0.1E1 -~0.11125369292536007E~307 ~1 ~0.1E1 -~0.5E~323 ~1 ~0.1E1 -~0.0 0 0.0 -nearest 0.0 0 -nearest ~0.0 0 -nearest 0.1E13 1000000000000 -nearest ~0.1E13 ~1000000000000 -nearest 0.25 0 -nearest ~0.25 0 -nearest 0.100000000000025E13 1000000000000 -nearest ~0.99999999999975E12 ~1000000000000 -nearest 0.5 0 -nearest ~0.5 0 -nearest 0.10000000000005E13 1000000000000 -nearest ~0.9999999999995E12 ~1000000000000 -nearest 0.75 1 -nearest ~0.75 ~1 -nearest 0.100000000000075E13 1000000000001 -nearest ~0.99999999999925E12 ~999999999999 -nearest 0.1E1 1 -nearest ~0.1E1 ~1 -nearest 0.1000000000001E13 1000000000001 -nearest ~0.999999999999E12 ~999999999999 -nearest 0.125E1 1 -nearest ~0.125E1 ~1 -nearest 0.100000000000125E13 1000000000001 -nearest ~0.99999999999875E12 ~999999999999 -nearest 0.15E1 2 -nearest ~0.15E1 ~2 -nearest 0.10000000000015E13 1000000000002 -nearest ~0.9999999999985E12 ~999999999998 -nearest 0.175E1 2 -nearest ~0.175E1 ~2 -nearest 0.100000000000175E13 1000000000002 -nearest ~0.99999999999825E12 ~999999999998 -nearest 0.2E1 2 -nearest ~0.2E1 ~2 -nearest 0.1000000000002E13 1000000000002 -nearest ~0.999999999998E12 ~999999999998 -nearest 0.25E1 2 -nearest ~0.25E1 ~2 -nearest 0.10000000000025E13 1000000000002 -nearest ~0.9999999999975E12 ~999999999998 -nearest 0.3E1 3 -nearest ~0.3E1 ~3 -nearest 0.1000000000003E13 1000000000003 -nearest ~0.999999999997E12 ~999999999997 -neginf 0.0 0 -neginf ~0.0 0 -neginf 0.1E13 1000000000000 -neginf ~0.1E13 ~1000000000000 -neginf 0.25 0 -neginf ~0.25 ~1 -neginf 0.100000000000025E13 1000000000000 -neginf ~0.99999999999975E12 ~1000000000000 -neginf 0.5 0 -neginf ~0.5 ~1 -neginf 0.10000000000005E13 1000000000000 -neginf ~0.9999999999995E12 ~1000000000000 -neginf 0.75 0 -neginf ~0.75 ~1 -neginf 0.100000000000075E13 1000000000000 -neginf ~0.99999999999925E12 ~1000000000000 -neginf 0.1E1 1 -neginf ~0.1E1 ~1 -neginf 0.1000000000001E13 1000000000001 -neginf ~0.999999999999E12 ~999999999999 -neginf 0.125E1 1 -neginf ~0.125E1 ~2 -neginf 0.100000000000125E13 1000000000001 -neginf ~0.99999999999875E12 ~999999999999 -neginf 0.15E1 1 -neginf ~0.15E1 ~2 -neginf 0.10000000000015E13 1000000000001 -neginf ~0.9999999999985E12 ~999999999999 -neginf 0.175E1 1 -neginf ~0.175E1 ~2 -neginf 0.100000000000175E13 1000000000001 -neginf ~0.99999999999825E12 ~999999999999 -neginf 0.2E1 2 -neginf ~0.2E1 ~2 -neginf 0.1000000000002E13 1000000000002 -neginf ~0.999999999998E12 ~999999999998 -neginf 0.25E1 2 -neginf ~0.25E1 ~3 -neginf 0.10000000000025E13 1000000000002 -neginf ~0.9999999999975E12 ~999999999998 -neginf 0.3E1 3 -neginf ~0.3E1 ~3 -neginf 0.1000000000003E13 1000000000003 -neginf ~0.999999999997E12 ~999999999997 -posinf 0.0 0 -posinf ~0.0 0 -posinf 0.1E13 1000000000000 -posinf ~0.1E13 ~1000000000000 -posinf 0.25 1 -posinf ~0.25 0 -posinf 0.100000000000025E13 1000000000001 -posinf ~0.99999999999975E12 ~999999999999 -posinf 0.5 1 -posinf ~0.5 0 -posinf 0.10000000000005E13 1000000000001 -posinf ~0.9999999999995E12 ~999999999999 -posinf 0.75 1 -posinf ~0.75 0 -posinf 0.100000000000075E13 1000000000001 -posinf ~0.99999999999925E12 ~999999999999 -posinf 0.1E1 1 -posinf ~0.1E1 ~1 -posinf 0.1000000000001E13 1000000000001 -posinf ~0.999999999999E12 ~999999999999 -posinf 0.125E1 2 -posinf ~0.125E1 ~1 -posinf 0.100000000000125E13 1000000000002 -posinf ~0.99999999999875E12 ~999999999998 -posinf 0.15E1 2 -posinf ~0.15E1 ~1 -posinf 0.10000000000015E13 1000000000002 -posinf ~0.9999999999985E12 ~999999999998 -posinf 0.175E1 2 -posinf ~0.175E1 ~1 -posinf 0.100000000000175E13 1000000000002 -posinf ~0.99999999999825E12 ~999999999998 -posinf 0.2E1 2 -posinf ~0.2E1 ~2 -posinf 0.1000000000002E13 1000000000002 -posinf ~0.999999999998E12 ~999999999998 -posinf 0.25E1 3 -posinf ~0.25E1 ~2 -posinf 0.10000000000025E13 1000000000003 -posinf ~0.9999999999975E12 ~999999999997 -posinf 0.3E1 3 -posinf ~0.3E1 ~3 -posinf 0.1000000000003E13 1000000000003 -posinf ~0.999999999997E12 ~999999999997 -zero 0.0 0 -zero ~0.0 0 -zero 0.1E13 1000000000000 -zero ~0.1E13 ~1000000000000 -zero 0.25 0 -zero ~0.25 0 -zero 0.100000000000025E13 1000000000000 -zero ~0.99999999999975E12 ~999999999999 -zero 0.5 0 -zero ~0.5 0 -zero 0.10000000000005E13 1000000000000 -zero ~0.9999999999995E12 ~999999999999 -zero 0.75 0 -zero ~0.75 0 -zero 0.100000000000075E13 1000000000000 -zero ~0.99999999999925E12 ~999999999999 -zero 0.1E1 1 -zero ~0.1E1 ~1 -zero 0.1000000000001E13 1000000000001 -zero ~0.999999999999E12 ~999999999999 -zero 0.125E1 1 -zero ~0.125E1 ~1 -zero 0.100000000000125E13 1000000000001 -zero ~0.99999999999875E12 ~999999999998 -zero 0.15E1 1 -zero ~0.15E1 ~1 -zero 0.10000000000015E13 1000000000001 -zero ~0.9999999999985E12 ~999999999998 -zero 0.175E1 1 -zero ~0.175E1 ~1 -zero 0.100000000000175E13 1000000000001 -zero ~0.99999999999825E12 ~999999999998 -zero 0.2E1 2 -zero ~0.2E1 ~2 -zero 0.1000000000002E13 1000000000002 -zero ~0.999999999998E12 ~999999999998 -zero 0.25E1 2 -zero ~0.25E1 ~2 -zero 0.10000000000025E13 1000000000002 -zero ~0.9999999999975E12 ~999999999997 -zero 0.3E1 3 -zero ~0.3E1 ~3 -zero 0.1000000000003E13 1000000000003 -zero ~0.999999999997E12 ~999999999997 - -Testing fromInt - -Testing toInt - -Testing ceil,floor,round,trunc - -Testing copySign, sameSign, sign, signBit - -Testing max, min - -Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh} -nan -nan -1.570796327 -inf -inf -709.7827129 -308.2547156 -inf -1 -nan -nan -1.570796327 -inf -inf -709.0895657 -307.9536856 -inf -9.480751908E153 -1 -nan -nan -1.569983319 -0.06642716993 -inf -inf -7.114769448 -3.089905111 -~0.9977912763 -inf -35.07135583 -~15.02083074 -1 -nan -nan -1.489673935 -0.9647326179 -2.509599262 -1.089905111 -~0.2632317914 -109847.9943 -3.507135583 -~0.272854661 -1 -nan -nan -1.262627256 -~1 -11.59195328 -1.144729886 -1.772453851 -0.9962720762 -nan -nan -1.218282905 -~0.9117339148 -15.15426224 -1 -0.4342944819 -0.4107812905 -7.544137103 -1.648721271 -~0.4505495341 -0.9913289158 -nan -nan -0.8881737744 -0.3342377271 -1.856761057 -0.2070141694 -0.9424888019 -1.564468479 -1.109053651 -2.819815734 -0.8425793257 -1.447484052 -0.1233122752 -0.1223852815 -0.9924450321 -1.007574042 -1.130884421 -~2.095570924 -~0.9100948886 -0.12269009 -0.3507135583 -0.1236240659 -1.569566326 -0.00123000031 -0.00122999938 -0.9999992436 -1.000000756 -1.001230757 -~6.70074111 -~2.910094889 -0.00122999969 -0.00123000031 -0.03507135583 -0.00123000062 -0.00122999938 -1.570796327 -2.225073859E~308 -2.225073859E~308 -1 -1 -1 -~708.3964185 -~307.6526556 -2.225073859E~308 -2.225073859E~308 -1.491668146E~154 -2.225073859E~308 -2.225073859E~308 -1.570796327 -1.112536929E~308 -1.112536929E~308 -1 -1 -1 -~709.0895657 -~307.9536856 -1.112536929E~308 -1.112536929E~308 -1.054768661E~154 -1.112536929E~308 -1.112536929E~308 -1.570796327 -4.940656458E~324 -4.940656458E~324 -1 -1 -1 -~744.4400719 -~323.3062153 -4.940656458E~324 -4.940656458E~324 -2.222758749E~162 -4.940656458E~324 -4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.570796327 -inf -0 -nan -nan -~inf -nan -~1 -nan -nan -~1.569983319 -0.06642716993 -inf -0 -nan -nan -0.9977912763 -~inf -nan -15.02083074 -~1 -nan -nan -~1.489673935 -0.9647326179 -nan -nan -0.2632317914 -~109847.9943 -nan -0.272854661 -~1 -nan -nan -~1.262627256 -~1 -11.59195328 -nan -nan -nan -~0.9962720762 -nan -nan -~1.218282905 -~0.9117339148 -0.06598803585 -nan -nan -~0.4107812905 -~7.544137103 -nan -0.4505495341 -~0.9913289158 -nan -nan -~0.8881737744 -0.3342377271 -1.856761057 -nan -nan -~0.9424888019 -~1.564468479 -nan -~2.819815734 -~0.8425793257 -1.694108602 -~0.1233122752 -~0.1223852815 -0.9924450321 -1.007574042 -0.8842636626 -nan -nan -~0.12269009 -nan -~0.1236240659 -1.572026327 -~0.00123000031 -~0.00122999938 -0.9999992436 -1.000000756 -0.9987707561 -nan -nan -~0.00122999969 -~0.00123000031 -nan -~0.00123000062 -~0.00122999938 -1.570796327 -~2.225073859E~308 -~2.225073859E~308 -1 -1 -1 -nan -nan -~2.225073859E~308 -~2.225073859E~308 -nan -~2.225073859E~308 -~2.225073859E~308 -1.570796327 -~1.112536929E~308 -~1.112536929E~308 -1 -1 -1 -nan -nan -~1.112536929E~308 -~1.112536929E~308 -nan -~1.112536929E~308 -~1.112536929E~308 -1.570796327 -~4.940656458E~324 -~4.940656458E~324 -1 -1 -1 -nan -nan -~4.940656458E~324 -~4.940656458E~324 -nan -~4.940656458E~324 -~4.940656458E~324 -1.570796327 -0 -0 -1 -1 -1 -~inf -~inf -0 -0 -0 -0 -0 -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 -nan -nan -~1.570796327 -nan -~inf -0 -nan -nan -nan -~inf -nan -nan -~1 -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -1.570796327 -nan -inf -inf -inf -inf -nan -inf -inf -nan -1 - -Testing Real.{*,+,-,/,nextAfter,rem} Real.Math.{atan2,pow} -inf -inf -0.0 -0.1E1 -0.17976931348623157E309 -inf -inf -0.8988465674311579E308 -0.2E1 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E306 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.5722234971514056E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.661334345850887E308 -0.17976931348623155E309 -inf -0.17976931348623157E309 -0.17976931348623157E309 -0.1461539134034403E309 -0.17976931348623155E309 -0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -0.0 -0.17976931348623157E309 -0.17976931348623157E309 -inf -0.17976931348623155E309 -~inf -0.0 -inf -~0.1E1 -0.17976931348623155E309 -~inf -0.8988465674311579E308 -inf -~0.2E1 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E306 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.5722234971514056E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.661334345850887E308 -0.17976931348623155E309 -~inf -0.17976931348623157E309 -0.17976931348623157E309 -~0.1461539134034403E309 -0.17976931348623155E309 -~0.22111625558806483E308 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.2211162555880648E306 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.39999999999999996E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.19999999999999998E1 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.8881784197001251E~15 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -~0.0 -0.17976931348623157E309 -0.17976931348623157E309 -~inf -0.17976931348623155E309 -inf -inf -~inf -0.0 -inf -~inf -~inf -inf -~0.0 -0.17976931348623155E309 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -inf -inf -inf -~0.8988465674311579E308 -0.5 -0.898846567431158E308 -inf -0.17976931348623157E309 -0.0 -0.1E1 -0.8988465674311579E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E305 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172014E307 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.2861117485757028E308 -0.8988465674311578E308 -inf -0.8988465674311579E308 -0.8988465674311579E308 -0.3306671729254435E308 -0.8988465674311578E308 -0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -0.7307695670172015E308 -0.8988465674311578E308 -0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -0.0 -0.8988465674311579E308 -0.8988465674311579E308 -inf -0.8988465674311578E308 -~inf -~0.8988465674311579E308 -inf -~0.5 -0.8988465674311578E308 -~inf -0.0 -0.17976931348623157E309 -~0.1E1 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E305 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172014E307 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.2861117485757028E308 -0.8988465674311578E308 -~inf -0.8988465674311579E308 -0.8988465674311579E308 -~0.3306671729254435E308 -0.8988465674311578E308 -~0.1105581277940324E309 -0.8988465674311579E308 -0.8988465674311579E308 -~0.7307695670172015E308 -0.8988465674311578E308 -~0.11055812779403241E308 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.1105581277940324E306 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.19999999999999998E1 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.9999999999999999 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.44408920985006257E~15 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -~0.0 -0.8988465674311579E308 -0.8988465674311579E308 -~inf -0.8988465674311578E308 -inf -inf -~inf -0.0 -0.898846567431158E308 -~inf -~inf -inf -~0.0 -0.8988465674311578E308 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.898846567431158E308 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~305 -0.12300000000000002E4 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422981929E~304 -0.12300000000000002E4 -0.15129E7 -0.246E4 -0.0 -0.1E1 -0.123E4 -0.15129E5 -0.12423E4 -0.12177E4 -0.1E3 -0.12299999999999998E4 -0.38641589639154454E4 -0.123314159265359E4 -0.122685840734641E4 -0.39152116000606253E3 -0.12299999999999998E4 -0.33434866490046256E4 -0.1232718281828459E4 -0.1227281718171541E4 -0.4524917126408741E3 -0.12299999999999998E4 -0.15129E4 -0.123123E4 -0.122877E4 -0.1E4 -0.12299999999999998E4 -0.15129E3 -0.1230123E4 -0.1229877E4 -0.1E5 -0.12299999999999998E4 -0.15129E1 -0.123000123E4 -0.122999877E4 -0.1E7 -0.12299999999999998E4 -0.27368408459638577E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.13684204229819289E~304 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.6077E~320 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -0.0 -0.123E4 -0.123E4 -inf -0.12299999999999998E4 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~305 -0.12299999999999998E4 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422981929E~304 -0.12299999999999998E4 -~0.15129E7 -0.0 -0.246E4 -~0.1E1 -0.12299999999999998E4 -~0.15129E5 -0.12177E4 -0.12423E4 -~0.1E3 -0.12299999999999998E4 -~0.38641589639154454E4 -0.122685840734641E4 -0.123314159265359E4 -~0.39152116000606253E3 -0.12299999999999998E4 -~0.33434866490046256E4 -0.1227281718171541E4 -0.1232718281828459E4 -~0.4524917126408741E3 -0.12299999999999998E4 -~0.15129E4 -0.122877E4 -0.123123E4 -~0.1E4 -0.12299999999999998E4 -~0.15129E3 -0.1229877E4 -0.1230123E4 -~0.1E5 -0.12299999999999998E4 -~0.15129E1 -0.122999877E4 -0.123000123E4 -~0.1E7 -0.12299999999999998E4 -~0.27368408459638577E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.13684204229819289E~304 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.6077E~320 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -~0.0 -0.123E4 -0.123E4 -~inf -0.12299999999999998E4 -inf -inf -~inf -0.0 -0.12300000000000002E4 -~inf -~inf -inf -~0.0 -0.12299999999999998E4 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E4 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909646E~307 -0.12300000000000002E2 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.13684204229819291E~306 -0.12300000000000002E2 -0.15129E5 -0.12423E4 -~0.12177E4 -0.1E~1 -0.12300000000000002E2 -0.15129000000000002E3 -0.246E2 -0.0 -0.1E1 -0.123E2 -0.3864158963915446E2 -0.15441592653589794E2 -0.9158407346410208E1 -0.3915211600060626E1 -0.12299999999999999E2 -0.33434866490046254E2 -0.15018281828459045E2 -0.9581718171540956E1 -0.4524917126408741E1 -0.12299999999999999E2 -0.15129000000000001E2 -0.13530000000000001E2 -0.1107E2 -0.1E2 -0.12299999999999999E2 -0.15129000000000001E1 -0.12423E2 -0.12177000000000001E2 -0.10000000000000001E3 -0.12299999999999999E2 -0.15129E~1 -0.1230123E2 -0.12298770000000001E2 -0.1E5 -0.12299999999999999E2 -0.2736840845963858E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.1368420422981929E~306 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.6E~322 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -0.0 -0.123E2 -0.123E2 -inf -0.12299999999999999E2 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909646E~307 -0.12299999999999999E2 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.13684204229819291E~306 -0.12299999999999999E2 -~0.15129E5 -~0.12177E4 -0.12423E4 -~0.1E~1 -0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -0.246E2 -~0.1E1 -0.12299999999999999E2 -~0.3864158963915446E2 -0.9158407346410208E1 -0.15441592653589794E2 -~0.3915211600060626E1 -0.12299999999999999E2 -~0.33434866490046254E2 -0.9581718171540956E1 -0.15018281828459045E2 -~0.4524917126408741E1 -0.12299999999999999E2 -~0.15129000000000001E2 -0.1107E2 -0.13530000000000001E2 -~0.1E2 -0.12299999999999999E2 -~0.15129000000000001E1 -0.12177000000000001E2 -0.12423E2 -~0.10000000000000001E3 -0.12299999999999999E2 -~0.15129E~1 -0.12298770000000001E2 -0.1230123E2 -~0.1E5 -0.12299999999999999E2 -~0.2736840845963858E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.1368420422981929E~306 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.6E~322 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -~0.0 -0.123E2 -0.123E2 -~inf -0.12299999999999999E2 -inf -inf -~inf -0.0 -0.12300000000000002E2 -~inf -~inf -inf -~0.0 -0.12299999999999999E2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E2 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.17475689218952297E~307 -0.31415926535897936E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.349513784379046E~307 -0.31415926535897936E1 -0.38641589639154454E4 -0.123314159265359E4 -~0.122685840734641E4 -0.25541403687721893E~2 -0.31415926535897936E1 -0.3864158963915446E2 -0.15441592653589794E2 -~0.9158407346410208E1 -0.2554140368772189 -0.31415926535897936E1 -0.9869604401089358E1 -0.6283185307179586E1 -0.0 -0.1E1 -0.3141592653589793E1 -0.8539734222673566E1 -0.5859874482048838E1 -0.423310825130748 -0.11557273497909217E1 -0.31415926535897927E1 -0.38641589639154454E1 -0.43715926535897935E1 -0.19115926535897931E1 -0.25541403687721895E1 -0.31415926535897927E1 -0.38641589639154456 -0.32645926535897933E1 -0.3018592653589793E1 -0.25541403687721896E2 -0.31415926535897927E1 -0.38641589639154456E~2 -0.3142822653589793E1 -0.3140362653589793E1 -0.25541403687721895E4 -0.31415926535897927E1 -0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -0.14119048864730642E309 -0.31415926535897927E1 -0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -0.0 -0.3141592653589793E1 -0.3141592653589793E1 -inf -0.31415926535897927E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.17475689218952297E~307 -0.31415926535897927E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.349513784379046E~307 -0.31415926535897927E1 -~0.38641589639154454E4 -~0.122685840734641E4 -0.123314159265359E4 -~0.25541403687721893E~2 -0.31415926535897927E1 -~0.3864158963915446E2 -~0.9158407346410208E1 -0.15441592653589794E2 -~0.2554140368772189 -0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -0.6283185307179586E1 -~0.1E1 -0.31415926535897927E1 -~0.8539734222673566E1 -0.423310825130748 -0.5859874482048838E1 -~0.11557273497909217E1 -0.31415926535897927E1 -~0.38641589639154454E1 -0.19115926535897931E1 -0.43715926535897935E1 -~0.25541403687721895E1 -0.31415926535897927E1 -~0.38641589639154456 -0.3018592653589793E1 -0.32645926535897933E1 -~0.25541403687721896E2 -0.31415926535897927E1 -~0.38641589639154456E~2 -0.3140362653589793E1 -0.3142822653589793E1 -~0.25541403687721895E4 -0.31415926535897927E1 -~0.6990275687580919E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~0.14119048864730642E309 -0.31415926535897927E1 -~0.34951378437904593E~307 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.15E~322 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -~0.0 -0.3141592653589793E1 -0.3141592653589793E1 -~inf -0.31415926535897927E1 -inf -inf -~inf -0.0 -0.31415926535897936E1 -~inf -~inf -inf -~0.0 -0.31415926535897927E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.31415926535897936E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.15120944591398447E~307 -0.27182818284590455E1 -inf -0.8988465674311579E308 -~0.8988465674311579E308 -0.30241889182796895E~307 -0.27182818284590455E1 -0.33434866490046256E4 -0.1232718281828459E4 -~0.1227281718171541E4 -0.22099852263894678E~2 -0.27182818284590455E1 -0.33434866490046254E2 -0.15018281828459045E2 -~0.9581718171540956E1 -0.22099852263894673 -0.27182818284590455E1 -0.8539734222673566E1 -0.5859874482048838E1 -~0.423310825130748 -0.8652559794322651 -0.27182818284590455E1 -0.73890560989306495E1 -0.543656365691809E1 -0.0 -0.1E1 -0.2718281828459045E1 -0.33434866490046256E1 -0.3948281828459045E1 -0.1488281828459045E1 -0.22099852263894677E1 -0.27182818284590446E1 -0.33434866490046256 -0.2841281828459045E1 -0.25952818284590453E1 -0.22099852263894675E2 -0.27182818284590446E1 -0.33434866490046253E~2 -0.2719511828459045E1 -0.2717051828459045E1 -0.22099852263894677E4 -0.27182818284590446E1 -0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -0.12216591454104522E309 -0.27182818284590446E1 -0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -0.0 -0.2718281828459045E1 -0.2718281828459045E1 -inf -0.27182818284590446E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.15120944591398447E~307 -0.27182818284590446E1 -~inf -~0.8988465674311579E308 -0.8988465674311579E308 -~0.30241889182796895E~307 -0.27182818284590446E1 -~0.33434866490046256E4 -~0.1227281718171541E4 -0.1232718281828459E4 -~0.22099852263894678E~2 -0.27182818284590446E1 -~0.33434866490046254E2 -~0.9581718171540956E1 -0.15018281828459045E2 -~0.22099852263894673 -0.27182818284590446E1 -~0.8539734222673566E1 -~0.423310825130748 -0.5859874482048838E1 -~0.8652559794322651 -0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -0.543656365691809E1 -~0.1E1 -0.27182818284590446E1 -~0.33434866490046256E1 -0.1488281828459045E1 -0.3948281828459045E1 -~0.22099852263894677E1 -0.27182818284590446E1 -~0.33434866490046256 -0.25952818284590453E1 -0.2841281828459045E1 -~0.22099852263894675E2 -0.27182818284590446E1 -~0.33434866490046253E~2 -0.2717051828459045E1 -0.2719511828459045E1 -~0.22099852263894677E4 -0.27182818284590446E1 -~0.6048377836559378E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~0.12216591454104522E309 -0.27182818284590446E1 -~0.3024188918279689E~307 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.15E~322 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -~0.0 -0.2718281828459045E1 -0.2718281828459045E1 -~inf -0.27182818284590446E1 -inf -inf -~inf -0.0 -0.27182818284590455E1 -~inf -~inf -inf -~0.0 -0.27182818284590446E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.27182818284590455E1 -inf -0.17976931348623157E309 -~0.17976931348623157E309 -0.6842102114909647E~308 -0.12300000000000002E1 -0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -0.12300000000000002E1 -0.15129E4 -0.123123E4 -~0.122877E4 -0.1E~2 -0.12300000000000002E1 -0.15129000000000001E2 -0.13530000000000001E2 -~0.1107E2 -0.9999999999999999E~1 -0.12300000000000002E1 -0.38641589639154454E1 -0.43715926535897935E1 -~0.19115926535897931E1 -0.3915211600060625 -0.12300000000000002E1 -0.33434866490046256E1 -0.3948281828459045E1 -~0.1488281828459045E1 -0.45249171264087407 -0.12300000000000002E1 -0.15129E1 -0.246E1 -0.0 -0.1E1 -0.123E1 -0.15129 -0.1353E1 -0.1107E1 -0.1E2 -0.12299999999999998E1 -0.15129E~2 -0.123123E1 -0.122877E1 -0.1E4 -0.12299999999999998E1 -0.27368408459638577E~307 -0.123E1 -0.123E1 -0.5527906389701621E308 -0.12299999999999998E1 -0.1368420422981929E~307 -0.123E1 -0.123E1 -0.11055812779403243E309 -0.12299999999999998E1 -0.5E~323 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -0.0 -0.123E1 -0.123E1 -inf -0.12299999999999998E1 -~inf -~0.17976931348623157E309 -0.17976931348623157E309 -~0.6842102114909647E~308 -0.12299999999999998E1 -~0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -0.12299999999999998E1 -~0.15129E4 -~0.122877E4 -0.123123E4 -~0.1E~2 -0.12299999999999998E1 -~0.15129000000000001E2 -~0.1107E2 -0.13530000000000001E2 -~0.9999999999999999E~1 -0.12299999999999998E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -0.43715926535897935E1 -~0.3915211600060625 -0.12299999999999998E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -0.3948281828459045E1 -~0.45249171264087407 -0.12299999999999998E1 -~0.15129E1 -0.0 -0.246E1 -~0.1E1 -0.12299999999999998E1 -~0.15129 -0.1107E1 -0.1353E1 -~0.1E2 -0.12299999999999998E1 -~0.15129E~2 -0.122877E1 -0.123123E1 -~0.1E4 -0.12299999999999998E1 -~0.27368408459638577E~307 -0.123E1 -0.123E1 -~0.5527906389701621E308 -0.12299999999999998E1 -~0.1368420422981929E~307 -0.123E1 -0.123E1 -~0.11055812779403243E309 -0.12299999999999998E1 -~0.5E~323 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -~0.0 -0.123E1 -0.123E1 -~inf -0.12299999999999998E1 -inf -inf -~inf -0.0 -0.12300000000000002E1 -~inf -~inf -inf -~0.0 -0.12299999999999998E1 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E1 -0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211490966E~309 -0.12300000000000001 -0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -0.136842042298193E~308 -0.12300000000000001 -0.15129E3 -0.1230123E4 -~0.1229877E4 -0.1E~3 -0.12300000000000001 -0.15129000000000001E1 -0.12423E2 -~0.12177000000000001E2 -0.9999999999999998E~2 -0.12300000000000001 -0.38641589639154456 -0.32645926535897933E1 -~0.3018592653589793E1 -0.3915211600060625E~1 -0.12300000000000001 -0.33434866490046256 -0.2841281828459045E1 -~0.25952818284590453E1 -0.4524917126408741E~1 -0.12300000000000001 -0.15129 -0.1353E1 -~0.1107E1 -0.1 -0.12300000000000001 -0.15129E~1 -0.246 -0.0 -0.1E1 -0.123 -0.15129E~3 -0.12423 -0.12177 -0.1E3 -0.12299999999999998 -0.273684084596386E~308 -0.123 -0.123 -0.55279063897016213E307 -0.12299999999999998 -0.136842042298193E~308 -0.123 -0.123 -0.11055812779403243E308 -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -0.0 -0.123 -0.123 -inf -0.12299999999999998 -~0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211490966E~309 -0.12299999999999998 -~0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.136842042298193E~308 -0.12299999999999998 -~0.15129E3 -~0.1229877E4 -0.1230123E4 -~0.1E~3 -0.12299999999999998 -~0.15129000000000001E1 -~0.12177000000000001E2 -0.12423E2 -~0.9999999999999998E~2 -0.12299999999999998 -~0.38641589639154456 -~0.3018592653589793E1 -0.32645926535897933E1 -~0.3915211600060625E~1 -0.12299999999999998 -~0.33434866490046256 -~0.25952818284590453E1 -0.2841281828459045E1 -~0.4524917126408741E~1 -0.12299999999999998 -~0.15129 -~0.1107E1 -0.1353E1 -~0.1 -0.12299999999999998 -~0.15129E~1 -0.0 -0.246 -~0.1E1 -0.12299999999999998 -~0.15129E~3 -0.12177 -0.12423 -~0.1E3 -0.12299999999999998 -~0.273684084596386E~308 -0.123 -0.123 -~0.55279063897016213E307 -0.12299999999999998 -~0.136842042298193E~308 -0.123 -0.123 -~0.11055812779403243E308 -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -~0.0 -0.123 -0.123 -~inf -0.12299999999999998 -inf -inf -~inf -0.0 -0.12300000000000001 -~inf -~inf -inf -~0.0 -0.12299999999999998 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000001 -0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -0.684210211491E~311 -0.12300000000000002E~2 -0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -0.1368420422982E~310 -0.12300000000000002E~2 -0.15129E1 -0.123000123E4 -~0.122999877E4 -0.1E~5 -0.12300000000000002E~2 -0.15129E~1 -0.1230123E2 -~0.12298770000000001E2 -0.9999999999999999E~4 -0.12300000000000002E~2 -0.38641589639154456E~2 -0.3142822653589793E1 -~0.3140362653589793E1 -0.3915211600060625E~3 -0.12300000000000002E~2 -0.33434866490046253E~2 -0.2719511828459045E1 -~0.2717051828459045E1 -0.45249171264087406E~3 -0.12300000000000002E~2 -0.15129E~2 -0.123123E1 -~0.122877E1 -0.1E~2 -0.12300000000000002E~2 -0.15129E~3 -0.12423 -~0.12177 -0.1E~1 -0.12300000000000002E~2 -0.15129E~5 -0.246E~2 -0.0 -0.1E1 -0.123E~2 -0.2736840845964E~310 -0.123E~2 -0.123E~2 -0.5527906389701621E305 -0.12299999999999998E~2 -0.1368420422982E~310 -0.123E~2 -0.123E~2 -0.11055812779403243E306 -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -0.0 -0.123E~2 -0.123E~2 -inf -0.12299999999999998E~2 -~0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.684210211491E~311 -0.12299999999999998E~2 -~0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.1368420422982E~310 -0.12299999999999998E~2 -~0.15129E1 -~0.122999877E4 -0.123000123E4 -~0.1E~5 -0.12299999999999998E~2 -~0.15129E~1 -~0.12298770000000001E2 -0.1230123E2 -~0.9999999999999999E~4 -0.12299999999999998E~2 -~0.38641589639154456E~2 -~0.3140362653589793E1 -0.3142822653589793E1 -~0.3915211600060625E~3 -0.12299999999999998E~2 -~0.33434866490046253E~2 -~0.2717051828459045E1 -0.2719511828459045E1 -~0.45249171264087406E~3 -0.12299999999999998E~2 -~0.15129E~2 -~0.122877E1 -0.123123E1 -~0.1E~2 -0.12299999999999998E~2 -~0.15129E~3 -~0.12177 -0.12423 -~0.1E~1 -0.12299999999999998E~2 -~0.15129E~5 -0.0 -0.246E~2 -~0.1E1 -0.12299999999999998E~2 -~0.2736840845964E~310 -0.123E~2 -0.123E~2 -~0.5527906389701621E305 -0.12299999999999998E~2 -~0.1368420422982E~310 -0.123E~2 -0.123E~2 -~0.11055812779403243E306 -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -~0.0 -0.123E~2 -0.123E~2 -~inf -0.12299999999999998E~2 -inf -inf -~inf -0.0 -0.12300000000000002E~2 -~inf -~inf -inf -~0.0 -0.12299999999999998E~2 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.12300000000000002E~2 -0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.2225073858507202E~307 -0.27368408459638577E~304 -0.123E4 -~0.123E4 -0.18090031369976E~310 -0.2225073858507202E~307 -0.2736840845963858E~306 -0.123E2 -~0.123E2 -0.1809003136997725E~308 -0.2225073858507202E~307 -0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.7082630066519554E~308 -0.2225073858507202E~307 -0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.818558927632814E~308 -0.2225073858507202E~307 -0.27368408459638577E~307 -0.123E1 -~0.123E1 -0.18090031369977247E~307 -0.2225073858507202E~307 -0.273684084596386E~308 -0.123 -~0.123 -0.1809003136997725E~306 -0.2225073858507202E~307 -0.2736840845964E~310 -0.123E~2 -~0.123E~2 -0.18090031369977247E~304 -0.2225073858507202E~307 -0.0 -0.4450147717014403E~307 -0.0 -0.1E1 -0.22250738585072014E~307 -0.0 -0.3337610787760802E~307 -0.11125369292536007E~307 -0.2E1 -0.2225073858507201E~307 -0.0 -0.2225073858507202E~307 -0.2225073858507201E~307 -0.4503599627370496E16 -0.2225073858507201E~307 -0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -inf -0.2225073858507201E~307 -~0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.2225073858507201E~307 -~0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.2225073858507201E~307 -~0.27368408459638577E~304 -~0.123E4 -0.123E4 -~0.18090031369976E~310 -0.2225073858507201E~307 -~0.2736840845963858E~306 -~0.123E2 -0.123E2 -~0.1809003136997725E~308 -0.2225073858507201E~307 -~0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.7082630066519554E~308 -0.2225073858507201E~307 -~0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.818558927632814E~308 -0.2225073858507201E~307 -~0.27368408459638577E~307 -~0.123E1 -0.123E1 -~0.18090031369977247E~307 -0.2225073858507201E~307 -~0.273684084596386E~308 -~0.123 -0.123 -~0.1809003136997725E~306 -0.2225073858507201E~307 -~0.2736840845964E~310 -~0.123E~2 -0.123E~2 -~0.18090031369977247E~304 -0.2225073858507201E~307 -~0.0 -0.0 -0.4450147717014403E~307 -~0.1E1 -0.2225073858507201E~307 -~0.0 -0.11125369292536007E~307 -0.3337610787760802E~307 -~0.2E1 -0.2225073858507201E~307 -~0.0 -0.2225073858507201E~307 -0.2225073858507202E~307 -~0.4503599627370496E16 -0.2225073858507201E~307 -~0.0 -0.22250738585072014E~307 -0.22250738585072014E~307 -~inf -0.2225073858507201E~307 -inf -inf -~inf -0.0 -0.2225073858507202E~307 -~inf -~inf -inf -~0.0 -0.2225073858507201E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.2225073858507202E~307 -0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1112536929253601E~307 -0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1112536929253601E~307 -0.13684204229819289E~304 -0.123E4 -~0.123E4 -0.904501568499E~311 -0.1112536929253601E~307 -0.1368420422981929E~306 -0.123E2 -~0.123E2 -0.90450156849886E~309 -0.1112536929253601E~307 -0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -0.3541315033259774E~308 -0.1112536929253601E~307 -0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -0.409279463816407E~308 -0.1112536929253601E~307 -0.1368420422981929E~307 -0.123E1 -~0.123E1 -0.9045015684988623E~308 -0.1112536929253601E~307 -0.136842042298193E~308 -0.123 -~0.123 -0.9045015684988624E~307 -0.1112536929253601E~307 -0.1368420422982E~310 -0.123E~2 -~0.123E~2 -0.9045015684988623E~305 -0.1112536929253601E~307 -0.0 -0.3337610787760802E~307 -~0.11125369292536007E~307 -0.5 -0.1112536929253601E~307 -0.0 -0.22250738585072014E~307 -0.0 -0.1E1 -0.11125369292536007E~307 -0.0 -0.1112536929253601E~307 -0.11125369292536E~307 -0.2251799813685248E16 -0.11125369292536E~307 -0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -inf -0.11125369292536E~307 -~0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.11125369292536E~307 -~0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.11125369292536E~307 -~0.13684204229819289E~304 -~0.123E4 -0.123E4 -~0.904501568499E~311 -0.11125369292536E~307 -~0.1368420422981929E~306 -~0.123E2 -0.123E2 -~0.90450156849886E~309 -0.11125369292536E~307 -~0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.3541315033259774E~308 -0.11125369292536E~307 -~0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.409279463816407E~308 -0.11125369292536E~307 -~0.1368420422981929E~307 -~0.123E1 -0.123E1 -~0.9045015684988623E~308 -0.11125369292536E~307 -~0.136842042298193E~308 -~0.123 -0.123 -~0.9045015684988624E~307 -0.11125369292536E~307 -~0.1368420422982E~310 -~0.123E~2 -0.123E~2 -~0.9045015684988623E~305 -0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -0.3337610787760802E~307 -~0.5 -0.11125369292536E~307 -~0.0 -0.0 -0.22250738585072014E~307 -~0.1E1 -0.11125369292536E~307 -~0.0 -0.11125369292536E~307 -0.1112536929253601E~307 -~0.2251799813685248E16 -0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -0.11125369292536007E~307 -~inf -0.11125369292536E~307 -inf -inf -~inf -0.0 -0.1112536929253601E~307 -~inf -~inf -inf -~0.0 -0.11125369292536E~307 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1112536929253601E~307 -0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.1E~322 -0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.1E~322 -0.6077E~320 -0.123E4 -~0.123E4 -0.0 -0.1E~322 -0.6E~322 -0.123E2 -~0.123E2 -0.0 -0.1E~322 -0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.1E~322 -0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.1E~322 -0.5E~323 -0.123E1 -~0.123E1 -0.5E~323 -0.1E~322 -0.0 -0.123 -~0.123 -0.4E~322 -0.1E~322 -0.0 -0.123E~2 -~0.123E~2 -0.4017E~320 -0.1E~322 -0.0 -0.2225073858507202E~307 -~0.2225073858507201E~307 -0.2220446049250313E~15 -0.1E~322 -0.0 -0.1112536929253601E~307 -~0.11125369292536E~307 -0.4440892098500626E~15 -0.1E~322 -0.0 -0.1E~322 -0.0 -0.1E1 -0.5E~323 -0.0 -0.5E~323 -0.5E~323 -inf -0.0 -~0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -0.0 -~0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -0.0 -~0.6077E~320 -~0.123E4 -0.123E4 -~0.0 -0.0 -~0.6E~322 -~0.123E2 -0.123E2 -~0.0 -0.0 -~0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -0.0 -~0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -0.0 -~0.5E~323 -~0.123E1 -0.123E1 -~0.5E~323 -0.0 -~0.0 -~0.123 -0.123 -~0.4E~322 -0.0 -~0.0 -~0.123E~2 -0.123E~2 -~0.4017E~320 -0.0 -~0.0 -~0.2225073858507201E~307 -0.2225073858507202E~307 -~0.2220446049250313E~15 -0.0 -~0.0 -~0.11125369292536E~307 -0.1112536929253601E~307 -~0.4440892098500626E~15 -0.0 -~0.0 -0.0 -0.1E~322 -~0.1E1 -0.0 -~0.0 -0.5E~323 -0.5E~323 -~inf -0.0 -inf -inf -~inf -0.0 -0.1E~322 -~inf -~inf -inf -~0.0 -0.0 -nan -nan -nan -nan -nan -inf -inf -~inf -0.0 -0.1E~322 -0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -0.0 -0.5E~323 -0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -0.0 -0.5E~323 -0.0 -0.123E4 -~0.123E4 -0.0 -0.5E~323 -0.0 -0.123E2 -~0.123E2 -0.0 -0.5E~323 -0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -0.0 -0.5E~323 -0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -0.0 -0.5E~323 -0.0 -0.123E1 -~0.123E1 -0.0 -0.5E~323 -0.0 -0.123 -~0.123 -0.0 -0.5E~323 -0.0 -0.123E~2 -~0.123E~2 -0.0 -0.5E~323 -0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -0.0 -0.5E~323 -0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -0.0 -0.5E~323 -0.0 -0.5E~323 -~0.5E~323 -0.0 -0.5E~323 -0.0 -0.0 -0.0 -nan -0.0 -~0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -~0.0 -~0.5E~323 -~0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.0 -~0.5E~323 -~0.0 -~0.123E4 -0.123E4 -~0.0 -~0.5E~323 -~0.0 -~0.123E2 -0.123E2 -~0.0 -~0.5E~323 -~0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -~0.0 -~0.5E~323 -~0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -~0.0 -~0.5E~323 -~0.0 -~0.123E1 -0.123E1 -~0.0 -~0.5E~323 -~0.0 -~0.123 -0.123 -~0.0 -~0.5E~323 -~0.0 -~0.123E~2 -0.123E~2 -~0.0 -~0.5E~323 -~0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -~0.0 -~0.5E~323 -~0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -~0.0 -~0.5E~323 -~0.0 -~0.5E~323 -0.5E~323 -~0.0 -~0.5E~323 -~0.0 -0.0 -0.0 -nan -~0.0 -nan -inf -~inf -0.0 -0.5E~323 -nan -~inf -inf -~0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -0.0 -0.5E~323 -~inf -0.0 -~inf -~0.1E1 -~0.17976931348623155E309 -~inf -~0.8988465674311579E308 -~inf -~0.2E1 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E306 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.5722234971514056E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.661334345850887E308 -~0.17976931348623155E309 -~inf -~0.17976931348623157E309 -~0.17976931348623157E309 -~0.1461539134034403E309 -~0.17976931348623155E309 -~0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -~0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -~inf -~0.17976931348623155E309 -inf -~inf -0.0 -0.1E1 -~0.17976931348623157E309 -inf -~inf -~0.8988465674311579E308 -0.2E1 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E306 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.5722234971514056E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.661334345850887E308 -~0.17976931348623155E309 -inf -~0.17976931348623157E309 -~0.17976931348623157E309 -0.1461539134034403E309 -~0.17976931348623155E309 -0.22111625558806483E308 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.2211162555880648E306 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.39999999999999996E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.19999999999999998E1 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.8881784197001251E~15 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -0.0 -~0.17976931348623157E309 -~0.17976931348623157E309 -inf -~0.17976931348623155E309 -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -inf -~inf -inf -0.0 -~inf -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.17976931348623155E309 -~inf -0.8988465674311579E308 -~inf -~0.5 -~0.8988465674311578E308 -~inf -0.0 -~0.17976931348623157E309 -~0.1E1 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E305 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172014E307 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.2861117485757028E308 -~0.8988465674311578E308 -~inf -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.3306671729254435E308 -~0.8988465674311578E308 -~0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -~0.7307695670172015E308 -~0.8988465674311578E308 -~0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -~0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -~inf -~0.8988465674311578E308 -inf -~inf -0.8988465674311579E308 -0.5 -~0.898846567431158E308 -inf -~0.17976931348623157E309 -0.0 -0.1E1 -~0.8988465674311579E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E305 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172014E307 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.2861117485757028E308 -~0.8988465674311578E308 -inf -~0.8988465674311579E308 -~0.8988465674311579E308 -0.3306671729254435E308 -~0.8988465674311578E308 -0.1105581277940324E309 -~0.8988465674311579E308 -~0.8988465674311579E308 -0.7307695670172015E308 -~0.8988465674311578E308 -0.11055812779403241E308 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.1105581277940324E306 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.19999999999999998E1 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.9999999999999999 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.44408920985006257E~15 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -0.0 -~0.8988465674311579E308 -~0.8988465674311579E308 -inf -~0.8988465674311578E308 -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -inf -~inf -inf -0.0 -~0.898846567431158E308 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.8988465674311578E308 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~305 -~0.12299999999999998E4 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422981929E~304 -~0.12299999999999998E4 -~0.15129E7 -0.0 -~0.246E4 -~0.1E1 -~0.12299999999999998E4 -~0.15129E5 -~0.12177E4 -~0.12423E4 -~0.1E3 -~0.12299999999999998E4 -~0.38641589639154454E4 -~0.122685840734641E4 -~0.123314159265359E4 -~0.39152116000606253E3 -~0.12299999999999998E4 -~0.33434866490046256E4 -~0.1227281718171541E4 -~0.1232718281828459E4 -~0.4524917126408741E3 -~0.12299999999999998E4 -~0.15129E4 -~0.122877E4 -~0.123123E4 -~0.1E4 -~0.12299999999999998E4 -~0.15129E3 -~0.1229877E4 -~0.1230123E4 -~0.1E5 -~0.12299999999999998E4 -~0.15129E1 -~0.122999877E4 -~0.123000123E4 -~0.1E7 -~0.12299999999999998E4 -~0.27368408459638577E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.13684204229819289E~304 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.6077E~320 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -~0.0 -~0.123E4 -~0.123E4 -~inf -~0.12299999999999998E4 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~305 -~0.12300000000000002E4 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422981929E~304 -~0.12300000000000002E4 -0.15129E7 -~0.246E4 -0.0 -0.1E1 -~0.123E4 -0.15129E5 -~0.12423E4 -~0.12177E4 -0.1E3 -~0.12299999999999998E4 -0.38641589639154454E4 -~0.123314159265359E4 -~0.122685840734641E4 -0.39152116000606253E3 -~0.12299999999999998E4 -0.33434866490046256E4 -~0.1232718281828459E4 -~0.1227281718171541E4 -0.4524917126408741E3 -~0.12299999999999998E4 -0.15129E4 -~0.123123E4 -~0.122877E4 -0.1E4 -~0.12299999999999998E4 -0.15129E3 -~0.1230123E4 -~0.1229877E4 -0.1E5 -~0.12299999999999998E4 -0.15129E1 -~0.123000123E4 -~0.122999877E4 -0.1E7 -~0.12299999999999998E4 -0.27368408459638577E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.13684204229819289E~304 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.6077E~320 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -0.0 -~0.123E4 -~0.123E4 -inf -~0.12299999999999998E4 -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -inf -~inf -inf -0.0 -~0.12300000000000002E4 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E4 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909646E~307 -~0.12299999999999999E2 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.13684204229819291E~306 -~0.12299999999999999E2 -~0.15129E5 -0.12177E4 -~0.12423E4 -~0.1E~1 -~0.12299999999999999E2 -~0.15129000000000002E3 -0.0 -~0.246E2 -~0.1E1 -~0.12299999999999999E2 -~0.3864158963915446E2 -~0.9158407346410208E1 -~0.15441592653589794E2 -~0.3915211600060626E1 -~0.12299999999999999E2 -~0.33434866490046254E2 -~0.9581718171540956E1 -~0.15018281828459045E2 -~0.4524917126408741E1 -~0.12299999999999999E2 -~0.15129000000000001E2 -~0.1107E2 -~0.13530000000000001E2 -~0.1E2 -~0.12299999999999999E2 -~0.15129000000000001E1 -~0.12177000000000001E2 -~0.12423E2 -~0.10000000000000001E3 -~0.12299999999999999E2 -~0.15129E~1 -~0.12298770000000001E2 -~0.1230123E2 -~0.1E5 -~0.12299999999999999E2 -~0.2736840845963858E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.1368420422981929E~306 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.6E~322 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -~0.0 -~0.123E2 -~0.123E2 -~inf -~0.12299999999999999E2 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909646E~307 -~0.12300000000000002E2 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.13684204229819291E~306 -~0.12300000000000002E2 -0.15129E5 -~0.12423E4 -0.12177E4 -0.1E~1 -~0.12300000000000002E2 -0.15129000000000002E3 -~0.246E2 -0.0 -0.1E1 -~0.123E2 -0.3864158963915446E2 -~0.15441592653589794E2 -~0.9158407346410208E1 -0.3915211600060626E1 -~0.12299999999999999E2 -0.33434866490046254E2 -~0.15018281828459045E2 -~0.9581718171540956E1 -0.4524917126408741E1 -~0.12299999999999999E2 -0.15129000000000001E2 -~0.13530000000000001E2 -~0.1107E2 -0.1E2 -~0.12299999999999999E2 -0.15129000000000001E1 -~0.12423E2 -~0.12177000000000001E2 -0.10000000000000001E3 -~0.12299999999999999E2 -0.15129E~1 -~0.1230123E2 -~0.12298770000000001E2 -0.1E5 -~0.12299999999999999E2 -0.2736840845963858E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.1368420422981929E~306 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.6E~322 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -0.0 -~0.123E2 -~0.123E2 -inf -~0.12299999999999999E2 -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -inf -~inf -inf -0.0 -~0.12300000000000002E2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999999E2 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.17475689218952297E~307 -~0.31415926535897927E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.349513784379046E~307 -~0.31415926535897927E1 -~0.38641589639154454E4 -0.122685840734641E4 -~0.123314159265359E4 -~0.25541403687721893E~2 -~0.31415926535897927E1 -~0.3864158963915446E2 -0.9158407346410208E1 -~0.15441592653589794E2 -~0.2554140368772189 -~0.31415926535897927E1 -~0.9869604401089358E1 -0.0 -~0.6283185307179586E1 -~0.1E1 -~0.31415926535897927E1 -~0.8539734222673566E1 -~0.423310825130748 -~0.5859874482048838E1 -~0.11557273497909217E1 -~0.31415926535897927E1 -~0.38641589639154454E1 -~0.19115926535897931E1 -~0.43715926535897935E1 -~0.25541403687721895E1 -~0.31415926535897927E1 -~0.38641589639154456 -~0.3018592653589793E1 -~0.32645926535897933E1 -~0.25541403687721896E2 -~0.31415926535897927E1 -~0.38641589639154456E~2 -~0.3140362653589793E1 -~0.3142822653589793E1 -~0.25541403687721895E4 -~0.31415926535897927E1 -~0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~0.14119048864730642E309 -~0.31415926535897927E1 -~0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -~0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -~inf -~0.31415926535897927E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.17475689218952297E~307 -~0.31415926535897936E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.349513784379046E~307 -~0.31415926535897936E1 -0.38641589639154454E4 -~0.123314159265359E4 -0.122685840734641E4 -0.25541403687721893E~2 -~0.31415926535897936E1 -0.3864158963915446E2 -~0.15441592653589794E2 -0.9158407346410208E1 -0.2554140368772189 -~0.31415926535897936E1 -0.9869604401089358E1 -~0.6283185307179586E1 -0.0 -0.1E1 -~0.3141592653589793E1 -0.8539734222673566E1 -~0.5859874482048838E1 -~0.423310825130748 -0.11557273497909217E1 -~0.31415926535897927E1 -0.38641589639154454E1 -~0.43715926535897935E1 -~0.19115926535897931E1 -0.25541403687721895E1 -~0.31415926535897927E1 -0.38641589639154456 -~0.32645926535897933E1 -~0.3018592653589793E1 -0.25541403687721896E2 -~0.31415926535897927E1 -0.38641589639154456E~2 -~0.3142822653589793E1 -~0.3140362653589793E1 -0.25541403687721895E4 -~0.31415926535897927E1 -0.6990275687580919E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -0.14119048864730642E309 -~0.31415926535897927E1 -0.34951378437904593E~307 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.15E~322 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -0.0 -~0.3141592653589793E1 -~0.3141592653589793E1 -inf -~0.31415926535897927E1 -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -inf -~inf -inf -0.0 -~0.31415926535897936E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.31415926535897927E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.15120944591398447E~307 -~0.27182818284590446E1 -~inf -0.8988465674311579E308 -~0.8988465674311579E308 -~0.30241889182796895E~307 -~0.27182818284590446E1 -~0.33434866490046256E4 -0.1227281718171541E4 -~0.1232718281828459E4 -~0.22099852263894678E~2 -~0.27182818284590446E1 -~0.33434866490046254E2 -0.9581718171540956E1 -~0.15018281828459045E2 -~0.22099852263894673 -~0.27182818284590446E1 -~0.8539734222673566E1 -0.423310825130748 -~0.5859874482048838E1 -~0.8652559794322651 -~0.27182818284590446E1 -~0.73890560989306495E1 -0.0 -~0.543656365691809E1 -~0.1E1 -~0.27182818284590446E1 -~0.33434866490046256E1 -~0.1488281828459045E1 -~0.3948281828459045E1 -~0.22099852263894677E1 -~0.27182818284590446E1 -~0.33434866490046256 -~0.25952818284590453E1 -~0.2841281828459045E1 -~0.22099852263894675E2 -~0.27182818284590446E1 -~0.33434866490046253E~2 -~0.2717051828459045E1 -~0.2719511828459045E1 -~0.22099852263894677E4 -~0.27182818284590446E1 -~0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~0.12216591454104522E309 -~0.27182818284590446E1 -~0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -~0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -~inf -~0.27182818284590446E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.15120944591398447E~307 -~0.27182818284590455E1 -inf -~0.8988465674311579E308 -0.8988465674311579E308 -0.30241889182796895E~307 -~0.27182818284590455E1 -0.33434866490046256E4 -~0.1232718281828459E4 -0.1227281718171541E4 -0.22099852263894678E~2 -~0.27182818284590455E1 -0.33434866490046254E2 -~0.15018281828459045E2 -0.9581718171540956E1 -0.22099852263894673 -~0.27182818284590455E1 -0.8539734222673566E1 -~0.5859874482048838E1 -0.423310825130748 -0.8652559794322651 -~0.27182818284590455E1 -0.73890560989306495E1 -~0.543656365691809E1 -0.0 -0.1E1 -~0.2718281828459045E1 -0.33434866490046256E1 -~0.3948281828459045E1 -~0.1488281828459045E1 -0.22099852263894677E1 -~0.27182818284590446E1 -0.33434866490046256 -~0.2841281828459045E1 -~0.25952818284590453E1 -0.22099852263894675E2 -~0.27182818284590446E1 -0.33434866490046253E~2 -~0.2719511828459045E1 -~0.2717051828459045E1 -0.22099852263894677E4 -~0.27182818284590446E1 -0.6048377836559378E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -0.12216591454104522E309 -~0.27182818284590446E1 -0.3024188918279689E~307 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.15E~322 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -0.0 -~0.2718281828459045E1 -~0.2718281828459045E1 -inf -~0.27182818284590446E1 -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -inf -~inf -inf -0.0 -~0.27182818284590455E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.27182818284590446E1 -~inf -0.17976931348623157E309 -~0.17976931348623157E309 -~0.6842102114909647E~308 -~0.12299999999999998E1 -~0.1105581277940324E309 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.12299999999999998E1 -~0.15129E4 -0.122877E4 -~0.123123E4 -~0.1E~2 -~0.12299999999999998E1 -~0.15129000000000001E2 -0.1107E2 -~0.13530000000000001E2 -~0.9999999999999999E~1 -~0.12299999999999998E1 -~0.38641589639154454E1 -0.19115926535897931E1 -~0.43715926535897935E1 -~0.3915211600060625 -~0.12299999999999998E1 -~0.33434866490046256E1 -0.1488281828459045E1 -~0.3948281828459045E1 -~0.45249171264087407 -~0.12299999999999998E1 -~0.15129E1 -0.0 -~0.246E1 -~0.1E1 -~0.12299999999999998E1 -~0.15129 -~0.1107E1 -~0.1353E1 -~0.1E2 -~0.12299999999999998E1 -~0.15129E~2 -~0.122877E1 -~0.123123E1 -~0.1E4 -~0.12299999999999998E1 -~0.27368408459638577E~307 -~0.123E1 -~0.123E1 -~0.5527906389701621E308 -~0.12299999999999998E1 -~0.1368420422981929E~307 -~0.123E1 -~0.123E1 -~0.11055812779403243E309 -~0.12299999999999998E1 -~0.5E~323 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -~0.0 -~0.123E1 -~0.123E1 -~inf -~0.12299999999999998E1 -inf -~0.17976931348623157E309 -0.17976931348623157E309 -0.6842102114909647E~308 -~0.12300000000000002E1 -0.1105581277940324E309 -~0.8988465674311579E308 -0.8988465674311579E308 -~0.12300000000000002E1 -0.15129E4 -~0.123123E4 -0.122877E4 -0.1E~2 -~0.12300000000000002E1 -0.15129000000000001E2 -~0.13530000000000001E2 -0.1107E2 -0.9999999999999999E~1 -~0.12300000000000002E1 -0.38641589639154454E1 -~0.43715926535897935E1 -0.19115926535897931E1 -0.3915211600060625 -~0.12300000000000002E1 -0.33434866490046256E1 -~0.3948281828459045E1 -0.1488281828459045E1 -0.45249171264087407 -~0.12300000000000002E1 -0.15129E1 -~0.246E1 -0.0 -0.1E1 -~0.123E1 -0.15129 -~0.1353E1 -~0.1107E1 -0.1E2 -~0.12299999999999998E1 -0.15129E~2 -~0.123123E1 -~0.122877E1 -0.1E4 -~0.12299999999999998E1 -0.27368408459638577E~307 -~0.123E1 -~0.123E1 -0.5527906389701621E308 -~0.12299999999999998E1 -0.1368420422981929E~307 -~0.123E1 -~0.123E1 -0.11055812779403243E309 -~0.12299999999999998E1 -0.5E~323 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -0.0 -~0.123E1 -~0.123E1 -inf -~0.12299999999999998E1 -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -inf -~inf -inf -0.0 -~0.12300000000000002E1 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E1 -~0.22111625558806483E308 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211490966E~309 -~0.12299999999999998 -~0.11055812779403241E308 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.136842042298193E~308 -~0.12299999999999998 -~0.15129E3 -0.1229877E4 -~0.1230123E4 -~0.1E~3 -~0.12299999999999998 -~0.15129000000000001E1 -0.12177000000000001E2 -~0.12423E2 -~0.9999999999999998E~2 -~0.12299999999999998 -~0.38641589639154456 -0.3018592653589793E1 -~0.32645926535897933E1 -~0.3915211600060625E~1 -~0.12299999999999998 -~0.33434866490046256 -0.25952818284590453E1 -~0.2841281828459045E1 -~0.4524917126408741E~1 -~0.12299999999999998 -~0.15129 -0.1107E1 -~0.1353E1 -~0.1 -~0.12299999999999998 -~0.15129E~1 -0.0 -~0.246 -~0.1E1 -~0.12299999999999998 -~0.15129E~3 -~0.12177 -~0.12423 -~0.1E3 -~0.12299999999999998 -~0.273684084596386E~308 -~0.123 -~0.123 -~0.55279063897016213E307 -~0.12299999999999998 -~0.136842042298193E~308 -~0.123 -~0.123 -~0.11055812779403243E308 -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -~0.0 -~0.123 -~0.123 -~inf -~0.12299999999999998 -0.22111625558806483E308 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211490966E~309 -~0.12300000000000001 -0.11055812779403241E308 -~0.8988465674311579E308 -0.8988465674311579E308 -0.136842042298193E~308 -~0.12300000000000001 -0.15129E3 -~0.1230123E4 -0.1229877E4 -0.1E~3 -~0.12300000000000001 -0.15129000000000001E1 -~0.12423E2 -0.12177000000000001E2 -0.9999999999999998E~2 -~0.12300000000000001 -0.38641589639154456 -~0.32645926535897933E1 -0.3018592653589793E1 -0.3915211600060625E~1 -~0.12300000000000001 -0.33434866490046256 -~0.2841281828459045E1 -0.25952818284590453E1 -0.4524917126408741E~1 -~0.12300000000000001 -0.15129 -~0.1353E1 -0.1107E1 -0.1 -~0.12300000000000001 -0.15129E~1 -~0.246 -0.0 -0.1E1 -~0.123 -0.15129E~3 -~0.12423 -~0.12177 -0.1E3 -~0.12299999999999998 -0.273684084596386E~308 -~0.123 -~0.123 -0.55279063897016213E307 -~0.12299999999999998 -0.136842042298193E~308 -~0.123 -~0.123 -0.11055812779403243E308 -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -0.0 -~0.123 -~0.123 -inf -~0.12299999999999998 -~inf -inf -~inf -~0.0 -~0.12299999999999998 -inf -~inf -inf -0.0 -~0.12300000000000001 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998 -~0.2211162555880648E306 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.684210211491E~311 -~0.12299999999999998E~2 -~0.1105581277940324E306 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.1368420422982E~310 -~0.12299999999999998E~2 -~0.15129E1 -0.122999877E4 -~0.123000123E4 -~0.1E~5 -~0.12299999999999998E~2 -~0.15129E~1 -0.12298770000000001E2 -~0.1230123E2 -~0.9999999999999999E~4 -~0.12299999999999998E~2 -~0.38641589639154456E~2 -0.3140362653589793E1 -~0.3142822653589793E1 -~0.3915211600060625E~3 -~0.12299999999999998E~2 -~0.33434866490046253E~2 -0.2717051828459045E1 -~0.2719511828459045E1 -~0.45249171264087406E~3 -~0.12299999999999998E~2 -~0.15129E~2 -0.122877E1 -~0.123123E1 -~0.1E~2 -~0.12299999999999998E~2 -~0.15129E~3 -0.12177 -~0.12423 -~0.1E~1 -~0.12299999999999998E~2 -~0.15129E~5 -0.0 -~0.246E~2 -~0.1E1 -~0.12299999999999998E~2 -~0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -~0.5527906389701621E305 -~0.12299999999999998E~2 -~0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -~0.11055812779403243E306 -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -~0.0 -~0.123E~2 -~0.123E~2 -~inf -~0.12299999999999998E~2 -0.2211162555880648E306 -~0.17976931348623157E309 -0.17976931348623157E309 -0.684210211491E~311 -~0.12300000000000002E~2 -0.1105581277940324E306 -~0.8988465674311579E308 -0.8988465674311579E308 -0.1368420422982E~310 -~0.12300000000000002E~2 -0.15129E1 -~0.123000123E4 -0.122999877E4 -0.1E~5 -~0.12300000000000002E~2 -0.15129E~1 -~0.1230123E2 -0.12298770000000001E2 -0.9999999999999999E~4 -~0.12300000000000002E~2 -0.38641589639154456E~2 -~0.3142822653589793E1 -0.3140362653589793E1 -0.3915211600060625E~3 -~0.12300000000000002E~2 -0.33434866490046253E~2 -~0.2719511828459045E1 -0.2717051828459045E1 -0.45249171264087406E~3 -~0.12300000000000002E~2 -0.15129E~2 -~0.123123E1 -0.122877E1 -0.1E~2 -~0.12300000000000002E~2 -0.15129E~3 -~0.12423 -0.12177 -0.1E~1 -~0.12300000000000002E~2 -0.15129E~5 -~0.246E~2 -0.0 -0.1E1 -~0.123E~2 -0.2736840845964E~310 -~0.123E~2 -~0.123E~2 -0.5527906389701621E305 -~0.12299999999999998E~2 -0.1368420422982E~310 -~0.123E~2 -~0.123E~2 -0.11055812779403243E306 -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -0.0 -~0.123E~2 -~0.123E~2 -inf -~0.12299999999999998E~2 -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -inf -~inf -inf -0.0 -~0.12300000000000002E~2 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.12299999999999998E~2 -~0.39999999999999996E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.2225073858507201E~307 -~0.27368408459638577E~304 -0.123E4 -~0.123E4 -~0.18090031369976E~310 -~0.2225073858507201E~307 -~0.2736840845963858E~306 -0.123E2 -~0.123E2 -~0.1809003136997725E~308 -~0.2225073858507201E~307 -~0.6990275687580919E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.7082630066519554E~308 -~0.2225073858507201E~307 -~0.6048377836559378E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.818558927632814E~308 -~0.2225073858507201E~307 -~0.27368408459638577E~307 -0.123E1 -~0.123E1 -~0.18090031369977247E~307 -~0.2225073858507201E~307 -~0.273684084596386E~308 -0.123 -~0.123 -~0.1809003136997725E~306 -~0.2225073858507201E~307 -~0.2736840845964E~310 -0.123E~2 -~0.123E~2 -~0.18090031369977247E~304 -~0.2225073858507201E~307 -~0.0 -0.0 -~0.4450147717014403E~307 -~0.1E1 -~0.2225073858507201E~307 -~0.0 -~0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.2E1 -~0.2225073858507201E~307 -~0.0 -~0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.4503599627370496E16 -~0.2225073858507201E~307 -~0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -~inf -~0.2225073858507201E~307 -0.39999999999999996E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.2225073858507202E~307 -0.19999999999999998E1 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.2225073858507202E~307 -0.27368408459638577E~304 -~0.123E4 -0.123E4 -0.18090031369976E~310 -~0.2225073858507202E~307 -0.2736840845963858E~306 -~0.123E2 -0.123E2 -0.1809003136997725E~308 -~0.2225073858507202E~307 -0.6990275687580919E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.7082630066519554E~308 -~0.2225073858507202E~307 -0.6048377836559378E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.818558927632814E~308 -~0.2225073858507202E~307 -0.27368408459638577E~307 -~0.123E1 -0.123E1 -0.18090031369977247E~307 -~0.2225073858507202E~307 -0.273684084596386E~308 -~0.123 -0.123 -0.1809003136997725E~306 -~0.2225073858507202E~307 -0.2736840845964E~310 -~0.123E~2 -0.123E~2 -0.18090031369977247E~304 -~0.2225073858507202E~307 -0.0 -~0.4450147717014403E~307 -0.0 -0.1E1 -~0.22250738585072014E~307 -0.0 -~0.3337610787760802E~307 -~0.11125369292536007E~307 -0.2E1 -~0.2225073858507201E~307 -0.0 -~0.2225073858507202E~307 -~0.2225073858507201E~307 -0.4503599627370496E16 -~0.2225073858507201E~307 -0.0 -~0.22250738585072014E~307 -~0.22250738585072014E~307 -inf -~0.2225073858507201E~307 -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -inf -~inf -inf -0.0 -~0.2225073858507202E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.2225073858507201E~307 -~0.19999999999999998E1 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.11125369292536E~307 -~0.9999999999999999 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.11125369292536E~307 -~0.13684204229819289E~304 -0.123E4 -~0.123E4 -~0.904501568499E~311 -~0.11125369292536E~307 -~0.1368420422981929E~306 -0.123E2 -~0.123E2 -~0.90450156849886E~309 -~0.11125369292536E~307 -~0.34951378437904593E~307 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.3541315033259774E~308 -~0.11125369292536E~307 -~0.3024188918279689E~307 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.409279463816407E~308 -~0.11125369292536E~307 -~0.1368420422981929E~307 -0.123E1 -~0.123E1 -~0.9045015684988623E~308 -~0.11125369292536E~307 -~0.136842042298193E~308 -0.123 -~0.123 -~0.9045015684988624E~307 -~0.11125369292536E~307 -~0.1368420422982E~310 -0.123E~2 -~0.123E~2 -~0.9045015684988623E~305 -~0.11125369292536E~307 -~0.0 -0.11125369292536007E~307 -~0.3337610787760802E~307 -~0.5 -~0.11125369292536E~307 -~0.0 -0.0 -~0.22250738585072014E~307 -~0.1E1 -~0.11125369292536E~307 -~0.0 -~0.11125369292536E~307 -~0.1112536929253601E~307 -~0.2251799813685248E16 -~0.11125369292536E~307 -~0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -~inf -~0.11125369292536E~307 -0.19999999999999998E1 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1112536929253601E~307 -0.9999999999999999 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1112536929253601E~307 -0.13684204229819289E~304 -~0.123E4 -0.123E4 -0.904501568499E~311 -~0.1112536929253601E~307 -0.1368420422981929E~306 -~0.123E2 -0.123E2 -0.90450156849886E~309 -~0.1112536929253601E~307 -0.34951378437904593E~307 -~0.3141592653589793E1 -0.3141592653589793E1 -0.3541315033259774E~308 -~0.1112536929253601E~307 -0.3024188918279689E~307 -~0.2718281828459045E1 -0.2718281828459045E1 -0.409279463816407E~308 -~0.1112536929253601E~307 -0.1368420422981929E~307 -~0.123E1 -0.123E1 -0.9045015684988623E~308 -~0.1112536929253601E~307 -0.136842042298193E~308 -~0.123 -0.123 -0.9045015684988624E~307 -~0.1112536929253601E~307 -0.1368420422982E~310 -~0.123E~2 -0.123E~2 -0.9045015684988623E~305 -~0.1112536929253601E~307 -0.0 -~0.3337610787760802E~307 -0.11125369292536007E~307 -0.5 -~0.1112536929253601E~307 -0.0 -~0.22250738585072014E~307 -0.0 -0.1E1 -~0.11125369292536007E~307 -0.0 -~0.1112536929253601E~307 -~0.11125369292536E~307 -0.2251799813685248E16 -~0.11125369292536E~307 -0.0 -~0.11125369292536007E~307 -~0.11125369292536007E~307 -inf -~0.11125369292536E~307 -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -inf -~inf -inf -0.0 -~0.1112536929253601E~307 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.11125369292536E~307 -~0.8881784197001251E~15 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -~0.0 -~0.44408920985006257E~15 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -~0.0 -~0.6077E~320 -0.123E4 -~0.123E4 -~0.0 -~0.0 -~0.6E~322 -0.123E2 -~0.123E2 -~0.0 -~0.0 -~0.15E~322 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -~0.0 -~0.15E~322 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -~0.0 -~0.5E~323 -0.123E1 -~0.123E1 -~0.5E~323 -~0.0 -~0.0 -0.123 -~0.123 -~0.4E~322 -~0.0 -~0.0 -0.123E~2 -~0.123E~2 -~0.4017E~320 -~0.0 -~0.0 -0.2225073858507201E~307 -~0.2225073858507202E~307 -~0.2220446049250313E~15 -~0.0 -~0.0 -0.11125369292536E~307 -~0.1112536929253601E~307 -~0.4440892098500626E~15 -~0.0 -~0.0 -0.0 -~0.1E~322 -~0.1E1 -~0.0 -~0.0 -~0.5E~323 -~0.5E~323 -~inf -~0.0 -0.8881784197001251E~15 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.1E~322 -0.44408920985006257E~15 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.1E~322 -0.6077E~320 -~0.123E4 -0.123E4 -0.0 -~0.1E~322 -0.6E~322 -~0.123E2 -0.123E2 -0.0 -~0.1E~322 -0.15E~322 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.1E~322 -0.15E~322 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.1E~322 -0.5E~323 -~0.123E1 -0.123E1 -0.5E~323 -~0.1E~322 -0.0 -~0.123 -0.123 -0.4E~322 -~0.1E~322 -0.0 -~0.123E~2 -0.123E~2 -0.4017E~320 -~0.1E~322 -0.0 -~0.2225073858507202E~307 -0.2225073858507201E~307 -0.2220446049250313E~15 -~0.1E~322 -0.0 -~0.1112536929253601E~307 -0.11125369292536E~307 -0.4440892098500626E~15 -~0.1E~322 -0.0 -~0.1E~322 -0.0 -0.1E1 -~0.5E~323 -0.0 -~0.5E~323 -~0.5E~323 -inf -~0.0 -~inf -inf -~inf -~0.0 -~0.0 -inf -~inf -inf -0.0 -~0.1E~322 -nan -nan -nan -nan -nan -~inf -inf -~inf -~0.0 -~0.0 -~0.0 -0.17976931348623157E309 -~0.17976931348623157E309 -~0.0 -0.5E~323 -~0.0 -0.8988465674311579E308 -~0.8988465674311579E308 -~0.0 -0.5E~323 -~0.0 -0.123E4 -~0.123E4 -~0.0 -0.5E~323 -~0.0 -0.123E2 -~0.123E2 -~0.0 -0.5E~323 -~0.0 -0.3141592653589793E1 -~0.3141592653589793E1 -~0.0 -0.5E~323 -~0.0 -0.2718281828459045E1 -~0.2718281828459045E1 -~0.0 -0.5E~323 -~0.0 -0.123E1 -~0.123E1 -~0.0 -0.5E~323 -~0.0 -0.123 -~0.123 -~0.0 -0.5E~323 -~0.0 -0.123E~2 -~0.123E~2 -~0.0 -0.5E~323 -~0.0 -0.22250738585072014E~307 -~0.22250738585072014E~307 -~0.0 -0.5E~323 -~0.0 -0.11125369292536007E~307 -~0.11125369292536007E~307 -~0.0 -0.5E~323 -~0.0 -0.5E~323 -~0.5E~323 -~0.0 -0.5E~323 -~0.0 -0.0 -~0.0 -nan -0.0 -0.0 -~0.17976931348623157E309 -0.17976931348623157E309 -0.0 -~0.5E~323 -0.0 -~0.8988465674311579E308 -0.8988465674311579E308 -0.0 -~0.5E~323 -0.0 -~0.123E4 -0.123E4 -0.0 -~0.5E~323 -0.0 -~0.123E2 -0.123E2 -0.0 -~0.5E~323 -0.0 -~0.3141592653589793E1 -0.3141592653589793E1 -0.0 -~0.5E~323 -0.0 -~0.2718281828459045E1 -0.2718281828459045E1 -0.0 -~0.5E~323 -0.0 -~0.123E1 -0.123E1 -0.0 -~0.5E~323 -0.0 -~0.123 -0.123 -0.0 -~0.5E~323 -0.0 -~0.123E~2 -0.123E~2 -0.0 -~0.5E~323 -0.0 -~0.22250738585072014E~307 -0.22250738585072014E~307 -0.0 -~0.5E~323 -0.0 -~0.11125369292536007E~307 -0.11125369292536007E~307 -0.0 -~0.5E~323 -0.0 -~0.5E~323 -0.5E~323 -0.0 -~0.5E~323 -0.0 -~0.0 -0.0 -nan -~0.0 -nan -inf -~inf -~0.0 -0.5E~323 -nan -~inf -inf -0.0 -~0.5E~323 -nan -nan -nan -nan -nan -nan -inf -~inf -~0.0 -0.5E~323 -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -~inf -nan -~inf -~inf -~inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -inf -~inf -~inf -inf -~inf -nan -~inf -~inf -inf -~inf -~inf -nan -~inf -nan -~inf -inf -~inf -nan -nan -~inf -nan -nan -nan -nan -nan -~inf -nan -~inf -nan -~inf -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -nan -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -nan -inf -inf -inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -~inf -inf -inf -~inf -inf -nan -inf -inf -~inf -inf -inf -inf -nan -nan -inf -~inf -nan -inf -nan -inf -nan -nan -nan -nan -nan -inf -inf -nan -nan -inf - -Testing *+, *- - -Testing Real.{realCeil,realFloor,realTrunc} -0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 -0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 -0.123E4 0.123E4 0.123E4 0.123E4 -0.123E2 0.13E2 0.12E2 0.12E2 -0.3141592653589793E1 0.4E1 0.3E1 0.3E1 -0.2718281828459045E1 0.3E1 0.2E1 0.2E1 -0.123E1 0.2E1 0.1E1 0.1E1 -0.123 0.1E1 0.0 0.0 -0.123E~2 0.1E1 0.0 0.0 -0.22250738585072014E~307 0.1E1 0.0 0.0 -0.11125369292536007E~307 0.1E1 0.0 0.0 -0.5E~323 0.1E1 0.0 0.0 -0.0 0.0 0.0 0.0 -~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 -~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 -~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 -~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 -~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 -~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 -~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 -~0.123 ~0.0 ~0.1E1 ~0.0 -~0.123E~2 ~0.0 ~0.1E1 ~0.0 -~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 -~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 -~0.5E~323 ~0.0 ~0.1E1 ~0.0 -~0.0 ~0.0 ~0.0 ~0.0 - -Testing Real.{<,<=,>,>=,==,!=,?=,unordered} -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -false -true -true -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -true -false -false -false -false -true -true - -Testing compare, compareReal -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -LESS LESS -EQUAL EQUAL -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -GREATER GREATER -EQUAL EQUAL - -Testing abs - -Testing {from,to}ManExp -0.17976931348623157E309 = 0.9999999999999999 * 2^1024 - = 0.17976931348623157E309 -0.8988465674311579E308 = 0.9999999999999999 * 2^1023 - = 0.8988465674311579E308 -0.123E4 = 0.6005859375 * 2^11 - = 0.123E4 -0.123E2 = 0.76875 * 2^4 - = 0.123E2 -0.3141592653589793E1 = 0.7853981633974483 * 2^2 - = 0.3141592653589793E1 -0.2718281828459045E1 = 0.6795704571147613 * 2^2 - = 0.2718281828459045E1 -0.123E1 = 0.615 * 2^1 - = 0.123E1 -0.123 = 0.984 * 2^~3 - = 0.123 -0.123E~2 = 0.62976 * 2^~9 - = 0.123E~2 -0.22250738585072014E~307 = 0.5 * 2^~1021 - = 0.22250738585072014E~307 -0.0 = 0.0 * 2^0 - = 0.0 -~0.17976931348623157E309 = ~0.9999999999999999 * 2^1024 - = ~0.17976931348623157E309 -~0.8988465674311579E308 = ~0.9999999999999999 * 2^1023 - = ~0.8988465674311579E308 -~0.123E4 = ~0.6005859375 * 2^11 - = ~0.123E4 -~0.123E2 = ~0.76875 * 2^4 - = ~0.123E2 -~0.3141592653589793E1 = ~0.7853981633974483 * 2^2 - = ~0.3141592653589793E1 -~0.2718281828459045E1 = ~0.6795704571147613 * 2^2 - = ~0.2718281828459045E1 -~0.123E1 = ~0.615 * 2^1 - = ~0.123E1 -~0.123 = ~0.984 * 2^~3 - = ~0.123 -~0.123E~2 = ~0.62976 * 2^~9 - = ~0.123E~2 -~0.22250738585072014E~307 = ~0.5 * 2^~1021 - = ~0.22250738585072014E~307 -~0.0 = ~0.0 * 2^0 - = ~0.0 - -Testing split - -Testing {from,to}Large diff -Nru mlton-20130715/regression/real.x86-linux.ok mlton-20210117+dfsg/regression/real.x86-linux.ok --- mlton-20130715/regression/real.x86-linux.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/real.x86-linux.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,42516 @@ + +Testing Real32 + +Testing fmt +0.34028235E39 +3.402823E38 +340282346638528859811704183484516925440.000000 +3.40282346639E38 +3E38 +340282346638528859811704183484516925440 +3E38 +3.4028234664E38 +340282346638528859811704183484516925440.0000000000 +3.402823466E38 +0.17014117E39 +1.701412E38 +170141173319264429905852091742258462720.000000 +1.70141173319E38 +2E38 +170141173319264429905852091742258462720 +2E38 +1.7014117332E38 +170141173319264429905852091742258462720.0000000000 +1.701411733E38 +0.123E4 +1.230000E3 +1230.000000 +1230 +1E3 +1230 +1E3 +1.2300000000E3 +1230.0000000000 +1230 +0.123E2 +1.230000E1 +12.300000 +12.3000001907 +1E1 +12 +10 +1.2300000191E1 +12.3000001907 +12.30000019 +0.31415927E1 +3.141593E0 +3.141593 +3.14159274101 +3E0 +3 +3 +3.1415927410E0 +3.1415927410 +3.141592741 +0.27182817E1 +2.718282E0 +2.718282 +2.71828174591 +3E0 +3 +3 +2.7182817459E0 +2.7182817459 +2.718281746 +0.123E1 +1.230000E0 +1.230000 +1.23000001907 +1E0 +1 +1 +1.2300000191E0 +1.2300000191 +1.230000019 +0.123 +1.230000E~1 +0.123000 +0.123000003397 +1E~1 +0 +0.1 +1.2300000340E~1 +0.1230000034 +0.1230000034 +0.123E~2 +1.230000E~3 +0.001230 +0.0012300000526 +1E~3 +0 +1E~3 +1.2300000526E~3 +0.0012300001 +0.001230000053 +0.11754944E~37 +1.175494E~38 +0.000000 +1.17549435082E~38 +1E~38 +0 +1E~38 +1.1754943508E~38 +0.0000000000 +1.175494351E~38 +0.5877472E~38 +5.877472E~39 +0.000000 +5.87747175411E~39 +6E~39 +0 +6E~39 +5.8774717541E~39 +0.0000000000 +5.877471754E~39 +0.1E~44 +1.401298E~45 +0.000000 +1.40129846432E~45 +1E~45 +0 +1E~45 +1.4012984643E~45 +0.0000000000 +1.401298464E~45 +0.0 +0.000000E0 +0.000000 +0 +0E0 +0 +0 +0.0000000000E0 +0.0000000000 +0 +~0.34028235E39 +~3.402823E38 +~340282346638528859811704183484516925440.000000 +~3.40282346639E38 +~3E38 +~340282346638528859811704183484516925440 +~3E38 +~3.4028234664E38 +~340282346638528859811704183484516925440.0000000000 +~3.402823466E38 +~0.17014117E39 +~1.701412E38 +~170141173319264429905852091742258462720.000000 +~1.70141173319E38 +~2E38 +~170141173319264429905852091742258462720 +~2E38 +~1.7014117332E38 +~170141173319264429905852091742258462720.0000000000 +~1.701411733E38 +~0.123E4 +~1.230000E3 +~1230.000000 +~1230 +~1E3 +~1230 +~1E3 +~1.2300000000E3 +~1230.0000000000 +~1230 +~0.123E2 +~1.230000E1 +~12.300000 +~12.3000001907 +~1E1 +~12 +~10 +~1.2300000191E1 +~12.3000001907 +~12.30000019 +~0.31415927E1 +~3.141593E0 +~3.141593 +~3.14159274101 +~3E0 +~3 +~3 +~3.1415927410E0 +~3.1415927410 +~3.141592741 +~0.27182817E1 +~2.718282E0 +~2.718282 +~2.71828174591 +~3E0 +~3 +~3 +~2.7182817459E0 +~2.7182817459 +~2.718281746 +~0.123E1 +~1.230000E0 +~1.230000 +~1.23000001907 +~1E0 +~1 +~1 +~1.2300000191E0 +~1.2300000191 +~1.230000019 +~0.123 +~1.230000E~1 +~0.123000 +~0.123000003397 +~1E~1 +~0 +~0.1 +~1.2300000340E~1 +~0.1230000034 +~0.1230000034 +~0.123E~2 +~1.230000E~3 +~0.001230 +~0.0012300000526 +~1E~3 +~0 +~1E~3 +~1.2300000526E~3 +~0.0012300001 +~0.001230000053 +~0.11754944E~37 +~1.175494E~38 +~0.000000 +~1.17549435082E~38 +~1E~38 +~0 +~1E~38 +~1.1754943508E~38 +~0.0000000000 +~1.175494351E~38 +~0.5877472E~38 +~5.877472E~39 +~0.000000 +~5.87747175411E~39 +~6E~39 +~0 +~6E~39 +~5.8774717541E~39 +~0.0000000000 +~5.877471754E~39 +~0.1E~44 +~1.401298E~45 +~0.000000 +~1.40129846432E~45 +~1E~45 +~0 +~1E~45 +~1.4012984643E~45 +~0.0000000000 +~1.401298464E~45 +~0.0 +0.000000E0 +0.000000 +0 +0E0 +0 +0 +0.0000000000E0 +0.0000000000 +0 + +Testing scan +0.34028235E39 0.34028235E39 +0.17014117E39 0.17014117E39 +0.123E4 0.123E4 +0.123E2 0.123E2 +0.31415927E1 0.31415927E1 +0.27182817E1 0.27182817E1 +0.123E1 0.123E1 +0.123 0.123 +0.123E~2 0.123E~2 +0.11754944E~37 0.11754944E~37 +0.5877472E~38 0.5877472E~38 +0.1E~44 0.1E~44 +0.0 0.0 +~0.34028235E39 ~0.34028235E39 +~0.17014117E39 ~0.17014117E39 +~0.123E4 ~0.123E4 +~0.123E2 ~0.123E2 +~0.31415927E1 ~0.31415927E1 +~0.27182817E1 ~0.27182817E1 +~0.123E1 ~0.123E1 +~0.123 ~0.123 +~0.123E~2 ~0.123E~2 +~0.11754944E~37 ~0.11754944E~37 +~0.5877472E~38 ~0.5877472E~38 +~0.1E~44 ~0.1E~44 +~0.0 ~0.0 +inf inf +~inf ~inf +nan nan +inf inf + +Testing checkFloat + +Testing class, isFinite, isNan, isNormal +0.34028235E39 normal + isFinite = true isNan = false isNormal = true +0.17014117E39 normal + isFinite = true isNan = false isNormal = true +0.123E4 normal + isFinite = true isNan = false isNormal = true +0.123E2 normal + isFinite = true isNan = false isNormal = true +0.31415927E1 normal + isFinite = true isNan = false isNormal = true +0.27182817E1 normal + isFinite = true isNan = false isNormal = true +0.123E1 normal + isFinite = true isNan = false isNormal = true +0.123 normal + isFinite = true isNan = false isNormal = true +0.123E~2 normal + isFinite = true isNan = false isNormal = true +0.11754944E~37 normal + isFinite = true isNan = false isNormal = true +0.5877472E~38 subnormal + isFinite = true isNan = false isNormal = false +0.1E~44 subnormal + isFinite = true isNan = false isNormal = false +0.0 zero + isFinite = true isNan = false isNormal = false +~0.34028235E39 normal + isFinite = true isNan = false isNormal = true +~0.17014117E39 normal + isFinite = true isNan = false isNormal = true +~0.123E4 normal + isFinite = true isNan = false isNormal = true +~0.123E2 normal + isFinite = true isNan = false isNormal = true +~0.31415927E1 normal + isFinite = true isNan = false isNormal = true +~0.27182817E1 normal + isFinite = true isNan = false isNormal = true +~0.123E1 normal + isFinite = true isNan = false isNormal = true +~0.123 normal + isFinite = true isNan = false isNormal = true +~0.123E~2 normal + isFinite = true isNan = false isNormal = true +~0.11754944E~37 normal + isFinite = true isNan = false isNormal = true +~0.5877472E~38 subnormal + isFinite = true isNan = false isNormal = false +~0.1E~44 subnormal + isFinite = true isNan = false isNormal = false +~0.0 zero + isFinite = true isNan = false isNormal = false +inf inf + isFinite = false isNan = false isNormal = false +~inf inf + isFinite = false isNan = false isNormal = false +nan nan + isFinite = false isNan = true isNormal = false +inf inf + isFinite = false isNan = false isNormal = false + +Testing maxFinite, minPos, minNormalPos +3.40282346639E38 +3.40282346639E38 +true +1.40129846432E~45 +1.40129846432E~45 +true +1.17549435082E~38 +1.17549435082E~38 +true + +Testring fromString + +Testing {from,to}Decimal +inf inf true +inf inf true +~inf ~inf true +~inf ~inf true +inf inf true +inf inf true +~inf ~inf true +~inf ~inf true +nan nan true +nan nan true +~nan nan true +~nan nan true +0.0 0.0 true +0.0 0.0 true +0.0 0.0 true +~0.0 ~0.0 true +0.15E2 0.15E2 true +0.15E1 0.15E1 true +~0.15E2 ~0.15E2 true +0.15E2 0.15E2 true +0.15E~2 0.15E~2 true +0.15E~2 0.15E~2 true +0.15E~2 0.15E~2 true +0.12E1000 inf false +~0.12E1000 ~inf false +0.1E~998 0.0 false +~0.1E~998 ~0.0 false +inf inf true + +Testing {from,to}LargeInt +0.34028235E39 340282346638528859811704183484516925440 0.34028235E39 +0.17014117E39 170141173319264429905852091742258462720 0.17014117E39 +0.123E4 1230 0.123E4 +0.123E2 12 0.12E2 +0.31415927E1 3 0.3E1 +0.27182817E1 2 0.2E1 +0.123E1 1 0.1E1 +0.123 0 0.0 +0.123E~2 0 0.0 +0.11754944E~37 0 0.0 +0.5877472E~38 0 0.0 +0.1E~44 0 0.0 +0.0 0 0.0 +~0.34028235E39 ~340282346638528859811704183484516925440 ~0.34028235E39 +~0.17014117E39 ~170141173319264429905852091742258462720 ~0.17014117E39 +~0.123E4 ~1230 ~0.123E4 +~0.123E2 ~13 ~0.13E2 +~0.31415927E1 ~4 ~0.4E1 +~0.27182817E1 ~3 ~0.3E1 +~0.123E1 ~2 ~0.2E1 +~0.123 ~1 ~0.1E1 +~0.123E~2 ~1 ~0.1E1 +~0.11754944E~37 ~1 ~0.1E1 +~0.5877472E~38 ~1 ~0.1E1 +~0.1E~44 ~1 ~0.1E1 +~0.0 0 0.0 +nearest 0.0 0 +nearest ~0.0 0 +nearest 0.1E13 999999995904 +nearest ~0.1E13 ~999999995904 +nearest 0.25 0 +nearest ~0.25 0 +nearest 0.1E13 999999995904 +nearest ~0.1E13 ~999999995904 +nearest 0.5 0 +nearest ~0.5 0 +nearest 0.1E13 999999995904 +nearest ~0.1E13 ~999999995904 +nearest 0.75 1 +nearest ~0.75 ~1 +nearest 0.1E13 999999995904 +nearest ~0.1E13 ~999999995904 +nearest 0.1E1 1 +nearest ~0.1E1 ~1 +nearest 0.1E13 999999995904 +nearest ~0.1E13 ~999999995904 +nearest 0.125E1 1 +nearest ~0.125E1 ~1 +nearest 0.1E13 999999995904 +nearest ~0.1E13 ~999999995904 +nearest 0.15E1 2 +nearest ~0.15E1 ~2 +nearest 0.1E13 999999995904 +nearest ~0.1E13 ~999999995904 +nearest 0.175E1 2 +nearest ~0.175E1 ~2 +nearest 0.1E13 999999995904 +nearest ~0.1E13 ~999999995904 +nearest 0.2E1 2 +nearest ~0.2E1 ~2 +nearest 0.1E13 999999995904 +nearest ~0.1E13 ~999999995904 +nearest 0.25E1 2 +nearest ~0.25E1 ~2 +nearest 0.1E13 999999995904 +nearest ~0.1E13 ~999999995904 +nearest 0.3E1 3 +nearest ~0.3E1 ~3 +nearest 0.1E13 999999995904 +nearest ~0.1E13 ~999999995904 +neginf 0.0 0 +neginf ~0.0 0 +neginf 0.1E13 999999995904 +neginf ~0.1E13 ~999999995904 +neginf 0.25 0 +neginf ~0.25 ~1 +neginf 0.1E13 999999995904 +neginf ~0.1E13 ~999999995904 +neginf 0.5 0 +neginf ~0.5 ~1 +neginf 0.1E13 999999995904 +neginf ~0.1E13 ~999999995904 +neginf 0.75 0 +neginf ~0.75 ~1 +neginf 0.1E13 999999995904 +neginf ~0.1E13 ~999999995904 +neginf 0.1E1 1 +neginf ~0.1E1 ~1 +neginf 0.1E13 999999995904 +neginf ~0.1E13 ~999999995904 +neginf 0.125E1 1 +neginf ~0.125E1 ~2 +neginf 0.1E13 999999995904 +neginf ~0.1E13 ~999999995904 +neginf 0.15E1 1 +neginf ~0.15E1 ~2 +neginf 0.1E13 999999995904 +neginf ~0.1E13 ~999999995904 +neginf 0.175E1 1 +neginf ~0.175E1 ~2 +neginf 0.1E13 999999995904 +neginf ~0.1E13 ~999999995904 +neginf 0.2E1 2 +neginf ~0.2E1 ~2 +neginf 0.1E13 999999995904 +neginf ~0.1E13 ~999999995904 +neginf 0.25E1 2 +neginf ~0.25E1 ~3 +neginf 0.1E13 999999995904 +neginf ~0.1E13 ~999999995904 +neginf 0.3E1 3 +neginf ~0.3E1 ~3 +neginf 0.1E13 999999995904 +neginf ~0.1E13 ~999999995904 +posinf 0.0 0 +posinf ~0.0 0 +posinf 0.1E13 999999995904 +posinf ~0.1E13 ~999999995904 +posinf 0.25 1 +posinf ~0.25 0 +posinf 0.1E13 999999995904 +posinf ~0.1E13 ~999999995904 +posinf 0.5 1 +posinf ~0.5 0 +posinf 0.1E13 999999995904 +posinf ~0.1E13 ~999999995904 +posinf 0.75 1 +posinf ~0.75 0 +posinf 0.1E13 999999995904 +posinf ~0.1E13 ~999999995904 +posinf 0.1E1 1 +posinf ~0.1E1 ~1 +posinf 0.1E13 999999995904 +posinf ~0.1E13 ~999999995904 +posinf 0.125E1 2 +posinf ~0.125E1 ~1 +posinf 0.1E13 999999995904 +posinf ~0.1E13 ~999999995904 +posinf 0.15E1 2 +posinf ~0.15E1 ~1 +posinf 0.1E13 999999995904 +posinf ~0.1E13 ~999999995904 +posinf 0.175E1 2 +posinf ~0.175E1 ~1 +posinf 0.1E13 999999995904 +posinf ~0.1E13 ~999999995904 +posinf 0.2E1 2 +posinf ~0.2E1 ~2 +posinf 0.1E13 999999995904 +posinf ~0.1E13 ~999999995904 +posinf 0.25E1 3 +posinf ~0.25E1 ~2 +posinf 0.1E13 999999995904 +posinf ~0.1E13 ~999999995904 +posinf 0.3E1 3 +posinf ~0.3E1 ~3 +posinf 0.1E13 999999995904 +posinf ~0.1E13 ~999999995904 +zero 0.0 0 +zero ~0.0 0 +zero 0.1E13 999999995904 +zero ~0.1E13 ~999999995904 +zero 0.25 0 +zero ~0.25 0 +zero 0.1E13 999999995904 +zero ~0.1E13 ~999999995904 +zero 0.5 0 +zero ~0.5 0 +zero 0.1E13 999999995904 +zero ~0.1E13 ~999999995904 +zero 0.75 0 +zero ~0.75 0 +zero 0.1E13 999999995904 +zero ~0.1E13 ~999999995904 +zero 0.1E1 1 +zero ~0.1E1 ~1 +zero 0.1E13 999999995904 +zero ~0.1E13 ~999999995904 +zero 0.125E1 1 +zero ~0.125E1 ~1 +zero 0.1E13 999999995904 +zero ~0.1E13 ~999999995904 +zero 0.15E1 1 +zero ~0.15E1 ~1 +zero 0.1E13 999999995904 +zero ~0.1E13 ~999999995904 +zero 0.175E1 1 +zero ~0.175E1 ~1 +zero 0.1E13 999999995904 +zero ~0.1E13 ~999999995904 +zero 0.2E1 2 +zero ~0.2E1 ~2 +zero 0.1E13 999999995904 +zero ~0.1E13 ~999999995904 +zero 0.25E1 2 +zero ~0.25E1 ~2 +zero 0.1E13 999999995904 +zero ~0.1E13 ~999999995904 +zero 0.3E1 3 +zero ~0.3E1 ~3 +zero 0.1E13 999999995904 +zero ~0.1E13 ~999999995904 + +Testing fromInt + +Testing toInt + +Testing ceil,floor,round,trunc + +Testing copySign, sameSign, sign, signBit + +Testing max, min + +Testing Real.{~,*,+,-,/,nextAfter,rem} +~ (0.34028235E39) = ~0.34028235E39 +~ (0.17014117E39) = ~0.17014117E39 +~ (0.123E4) = ~0.123E4 +~ (0.123E2) = ~0.123E2 +~ (0.31415927E1) = ~0.31415927E1 +~ (0.27182817E1) = ~0.27182817E1 +~ (0.123E1) = ~0.123E1 +~ (0.123) = ~0.123 +~ (0.123E~2) = ~0.123E~2 +~ (0.11754944E~37) = ~0.11754944E~37 +~ (0.5877472E~38) = ~0.5877472E~38 +~ (0.1E~44) = ~0.1E~44 +~ (0.0) = ~0.0 +~ (~0.34028235E39) = 0.34028235E39 +~ (~0.17014117E39) = 0.17014117E39 +~ (~0.123E4) = 0.123E4 +~ (~0.123E2) = 0.123E2 +~ (~0.31415927E1) = 0.31415927E1 +~ (~0.27182817E1) = 0.27182817E1 +~ (~0.123E1) = 0.123E1 +~ (~0.123) = 0.123 +~ (~0.123E~2) = 0.123E~2 +~ (~0.11754944E~37) = 0.11754944E~37 +~ (~0.5877472E~38) = 0.5877472E~38 +~ (~0.1E~44) = 0.1E~44 +~ (~0.0) = 0.0 +~ (inf) = ~inf +~ (~inf) = inf +~ (nan) = nan +~ (inf) = ~inf +* (0.34028235E39, 0.34028235E39) = inf ++ (0.34028235E39, 0.34028235E39) = inf +- (0.34028235E39, 0.34028235E39) = 0.0 +/ (0.34028235E39, 0.34028235E39) = 0.1E1 +nextAfter (0.34028235E39, 0.34028235E39) = 0.34028235E39 +rem (0.34028235E39, 0.34028235E39) = 0.0 +* (0.34028235E39, 0.17014117E39) = inf ++ (0.34028235E39, 0.17014117E39) = inf +- (0.34028235E39, 0.17014117E39) = 0.17014117E39 +/ (0.34028235E39, 0.17014117E39) = 0.2E1 +nextAfter (0.34028235E39, 0.17014117E39) = 0.34028233E39 +rem (0.34028235E39, 0.17014117E39) = 0.0 +* (0.34028235E39, 0.123E4) = inf ++ (0.34028235E39, 0.123E4) = 0.34028235E39 +- (0.34028235E39, 0.123E4) = 0.34028235E39 +/ (0.34028235E39, 0.123E4) = 0.2766523E36 +nextAfter (0.34028235E39, 0.123E4) = 0.34028233E39 +rem (0.34028235E39, 0.123E4) = 0.11884224E32 +* (0.34028235E39, 0.123E2) = inf ++ (0.34028235E39, 0.123E2) = 0.34028235E39 +- (0.34028235E39, 0.123E2) = 0.34028235E39 +/ (0.34028235E39, 0.123E2) = 0.27665232E38 +nextAfter (0.34028235E39, 0.123E2) = 0.34028233E39 +rem (0.34028235E39, 0.123E2) = ~0.12882628E32 +* (0.34028235E39, 0.31415927E1) = inf ++ (0.34028235E39, 0.31415927E1) = 0.34028235E39 +- (0.34028235E39, 0.31415927E1) = 0.34028235E39 +/ (0.34028235E39, 0.31415927E1) = 0.10831523E39 +nextAfter (0.34028235E39, 0.31415927E1) = 0.34028233E39 +rem (0.34028235E39, 0.31415927E1) = 0.15835598E32 +* (0.34028235E39, 0.27182817E1) = inf ++ (0.34028235E39, 0.27182817E1) = 0.34028235E39 +- (0.34028235E39, 0.27182817E1) = 0.34028235E39 +/ (0.34028235E39, 0.27182817E1) = 0.12518288E39 +nextAfter (0.34028235E39, 0.27182817E1) = 0.34028233E39 +rem (0.34028235E39, 0.27182817E1) = 0.9154518E31 +* (0.34028235E39, 0.123E1) = inf ++ (0.34028235E39, 0.123E1) = 0.34028235E39 +- (0.34028235E39, 0.123E1) = 0.34028235E39 +/ (0.34028235E39, 0.123E1) = 0.27665231E39 +nextAfter (0.34028235E39, 0.123E1) = 0.34028233E39 +rem (0.34028235E39, 0.123E1) = ~0.40894575E30 +* (0.34028235E39, 0.123) = 0.4185473E38 ++ (0.34028235E39, 0.123) = 0.34028235E39 +- (0.34028235E39, 0.123) = 0.34028235E39 +/ (0.34028235E39, 0.123) = inf +nextAfter (0.34028235E39, 0.123) = 0.34028233E39 +rem (0.34028235E39, 0.123) = ~inf +* (0.34028235E39, 0.123E~2) = 0.4185473E36 ++ (0.34028235E39, 0.123E~2) = 0.34028235E39 +- (0.34028235E39, 0.123E~2) = 0.34028235E39 +/ (0.34028235E39, 0.123E~2) = inf +nextAfter (0.34028235E39, 0.123E~2) = 0.34028233E39 +rem (0.34028235E39, 0.123E~2) = ~inf +* (0.34028235E39, 0.11754944E~37) = 0.39999998E1 ++ (0.34028235E39, 0.11754944E~37) = 0.34028235E39 +- (0.34028235E39, 0.11754944E~37) = 0.34028235E39 +/ (0.34028235E39, 0.11754944E~37) = inf +nextAfter (0.34028235E39, 0.11754944E~37) = 0.34028233E39 +rem (0.34028235E39, 0.11754944E~37) = ~inf +* (0.34028235E39, 0.5877472E~38) = 0.19999999E1 ++ (0.34028235E39, 0.5877472E~38) = 0.34028235E39 +- (0.34028235E39, 0.5877472E~38) = 0.34028235E39 +/ (0.34028235E39, 0.5877472E~38) = inf +nextAfter (0.34028235E39, 0.5877472E~38) = 0.34028233E39 +rem (0.34028235E39, 0.5877472E~38) = ~inf +* (0.34028235E39, 0.1E~44) = 0.47683713E~6 ++ (0.34028235E39, 0.1E~44) = 0.34028235E39 +- (0.34028235E39, 0.1E~44) = 0.34028235E39 +/ (0.34028235E39, 0.1E~44) = inf +nextAfter (0.34028235E39, 0.1E~44) = 0.34028233E39 +rem (0.34028235E39, 0.1E~44) = ~inf +* (0.34028235E39, 0.0) = 0.0 ++ (0.34028235E39, 0.0) = 0.34028235E39 +- (0.34028235E39, 0.0) = 0.34028235E39 +/ (0.34028235E39, 0.0) = inf +nextAfter (0.34028235E39, 0.0) = 0.34028233E39 +rem (0.34028235E39, 0.0) = nan +* (0.34028235E39, ~0.34028235E39) = ~inf ++ (0.34028235E39, ~0.34028235E39) = 0.0 +- (0.34028235E39, ~0.34028235E39) = inf +/ (0.34028235E39, ~0.34028235E39) = ~0.1E1 +nextAfter (0.34028235E39, ~0.34028235E39) = 0.34028233E39 +rem (0.34028235E39, ~0.34028235E39) = 0.0 +* (0.34028235E39, ~0.17014117E39) = ~inf ++ (0.34028235E39, ~0.17014117E39) = 0.17014117E39 +- (0.34028235E39, ~0.17014117E39) = inf +/ (0.34028235E39, ~0.17014117E39) = ~0.2E1 +nextAfter (0.34028235E39, ~0.17014117E39) = 0.34028233E39 +rem (0.34028235E39, ~0.17014117E39) = 0.0 +* (0.34028235E39, ~0.123E4) = ~inf ++ (0.34028235E39, ~0.123E4) = 0.34028235E39 +- (0.34028235E39, ~0.123E4) = 0.34028235E39 +/ (0.34028235E39, ~0.123E4) = ~0.2766523E36 +nextAfter (0.34028235E39, ~0.123E4) = 0.34028233E39 +rem (0.34028235E39, ~0.123E4) = 0.11884224E32 +* (0.34028235E39, ~0.123E2) = ~inf ++ (0.34028235E39, ~0.123E2) = 0.34028235E39 +- (0.34028235E39, ~0.123E2) = 0.34028235E39 +/ (0.34028235E39, ~0.123E2) = ~0.27665232E38 +nextAfter (0.34028235E39, ~0.123E2) = 0.34028233E39 +rem (0.34028235E39, ~0.123E2) = ~0.12882628E32 +* (0.34028235E39, ~0.31415927E1) = ~inf ++ (0.34028235E39, ~0.31415927E1) = 0.34028235E39 +- (0.34028235E39, ~0.31415927E1) = 0.34028235E39 +/ (0.34028235E39, ~0.31415927E1) = ~0.10831523E39 +nextAfter (0.34028235E39, ~0.31415927E1) = 0.34028233E39 +rem (0.34028235E39, ~0.31415927E1) = 0.15835598E32 +* (0.34028235E39, ~0.27182817E1) = ~inf ++ (0.34028235E39, ~0.27182817E1) = 0.34028235E39 +- (0.34028235E39, ~0.27182817E1) = 0.34028235E39 +/ (0.34028235E39, ~0.27182817E1) = ~0.12518288E39 +nextAfter (0.34028235E39, ~0.27182817E1) = 0.34028233E39 +rem (0.34028235E39, ~0.27182817E1) = 0.9154518E31 +* (0.34028235E39, ~0.123E1) = ~inf ++ (0.34028235E39, ~0.123E1) = 0.34028235E39 +- (0.34028235E39, ~0.123E1) = 0.34028235E39 +/ (0.34028235E39, ~0.123E1) = ~0.27665231E39 +nextAfter (0.34028235E39, ~0.123E1) = 0.34028233E39 +rem (0.34028235E39, ~0.123E1) = ~0.40894575E30 +* (0.34028235E39, ~0.123) = ~0.4185473E38 ++ (0.34028235E39, ~0.123) = 0.34028235E39 +- (0.34028235E39, ~0.123) = 0.34028235E39 +/ (0.34028235E39, ~0.123) = ~inf +nextAfter (0.34028235E39, ~0.123) = 0.34028233E39 +rem (0.34028235E39, ~0.123) = ~inf +* (0.34028235E39, ~0.123E~2) = ~0.4185473E36 ++ (0.34028235E39, ~0.123E~2) = 0.34028235E39 +- (0.34028235E39, ~0.123E~2) = 0.34028235E39 +/ (0.34028235E39, ~0.123E~2) = ~inf +nextAfter (0.34028235E39, ~0.123E~2) = 0.34028233E39 +rem (0.34028235E39, ~0.123E~2) = ~inf +* (0.34028235E39, ~0.11754944E~37) = ~0.39999998E1 ++ (0.34028235E39, ~0.11754944E~37) = 0.34028235E39 +- (0.34028235E39, ~0.11754944E~37) = 0.34028235E39 +/ (0.34028235E39, ~0.11754944E~37) = ~inf +nextAfter (0.34028235E39, ~0.11754944E~37) = 0.34028233E39 +rem (0.34028235E39, ~0.11754944E~37) = ~inf +* (0.34028235E39, ~0.5877472E~38) = ~0.19999999E1 ++ (0.34028235E39, ~0.5877472E~38) = 0.34028235E39 +- (0.34028235E39, ~0.5877472E~38) = 0.34028235E39 +/ (0.34028235E39, ~0.5877472E~38) = ~inf +nextAfter (0.34028235E39, ~0.5877472E~38) = 0.34028233E39 +rem (0.34028235E39, ~0.5877472E~38) = ~inf +* (0.34028235E39, ~0.1E~44) = ~0.47683713E~6 ++ (0.34028235E39, ~0.1E~44) = 0.34028235E39 +- (0.34028235E39, ~0.1E~44) = 0.34028235E39 +/ (0.34028235E39, ~0.1E~44) = ~inf +nextAfter (0.34028235E39, ~0.1E~44) = 0.34028233E39 +rem (0.34028235E39, ~0.1E~44) = ~inf +* (0.34028235E39, ~0.0) = ~0.0 ++ (0.34028235E39, ~0.0) = 0.34028235E39 +- (0.34028235E39, ~0.0) = 0.34028235E39 +/ (0.34028235E39, ~0.0) = ~inf +nextAfter (0.34028235E39, ~0.0) = 0.34028233E39 +rem (0.34028235E39, ~0.0) = nan +* (0.34028235E39, inf) = inf ++ (0.34028235E39, inf) = inf +- (0.34028235E39, inf) = ~inf +/ (0.34028235E39, inf) = 0.0 +nextAfter (0.34028235E39, inf) = inf +rem (0.34028235E39, inf) = 0.34028235E39 +* (0.34028235E39, ~inf) = ~inf ++ (0.34028235E39, ~inf) = ~inf +- (0.34028235E39, ~inf) = inf +/ (0.34028235E39, ~inf) = ~0.0 +nextAfter (0.34028235E39, ~inf) = 0.34028233E39 +rem (0.34028235E39, ~inf) = 0.34028235E39 +* (0.34028235E39, nan) = nan ++ (0.34028235E39, nan) = nan +- (0.34028235E39, nan) = nan +/ (0.34028235E39, nan) = nan +nextAfter (0.34028235E39, nan) = nan +rem (0.34028235E39, nan) = nan +* (0.34028235E39, inf) = inf ++ (0.34028235E39, inf) = inf +- (0.34028235E39, inf) = ~inf +/ (0.34028235E39, inf) = 0.0 +nextAfter (0.34028235E39, inf) = inf +rem (0.34028235E39, inf) = 0.34028235E39 +* (0.17014117E39, 0.34028235E39) = inf ++ (0.17014117E39, 0.34028235E39) = inf +- (0.17014117E39, 0.34028235E39) = ~0.17014117E39 +/ (0.17014117E39, 0.34028235E39) = 0.5 +nextAfter (0.17014117E39, 0.34028235E39) = 0.17014118E39 +rem (0.17014117E39, 0.34028235E39) = 0.17014117E39 +* (0.17014117E39, 0.17014117E39) = inf ++ (0.17014117E39, 0.17014117E39) = 0.34028235E39 +- (0.17014117E39, 0.17014117E39) = 0.0 +/ (0.17014117E39, 0.17014117E39) = 0.1E1 +nextAfter (0.17014117E39, 0.17014117E39) = 0.17014117E39 +rem (0.17014117E39, 0.17014117E39) = 0.0 +* (0.17014117E39, 0.123E4) = inf ++ (0.17014117E39, 0.123E4) = 0.17014117E39 +- (0.17014117E39, 0.123E4) = 0.17014117E39 +/ (0.17014117E39, 0.123E4) = 0.13832615E36 +nextAfter (0.17014117E39, 0.123E4) = 0.17014116E39 +rem (0.17014117E39, 0.123E4) = 0.5942112E31 +* (0.17014117E39, 0.123E2) = inf ++ (0.17014117E39, 0.123E2) = 0.17014117E39 +- (0.17014117E39, 0.123E2) = 0.17014117E39 +/ (0.17014117E39, 0.123E2) = 0.13832616E38 +nextAfter (0.17014117E39, 0.123E2) = 0.17014116E39 +rem (0.17014117E39, 0.123E2) = ~0.6441314E31 +* (0.17014117E39, 0.31415927E1) = inf ++ (0.17014117E39, 0.31415927E1) = 0.17014117E39 +- (0.17014117E39, 0.31415927E1) = 0.17014117E39 +/ (0.17014117E39, 0.31415927E1) = 0.54157613E38 +nextAfter (0.17014117E39, 0.31415927E1) = 0.17014116E39 +rem (0.17014117E39, 0.31415927E1) = 0.7917799E31 +* (0.17014117E39, 0.27182817E1) = inf ++ (0.17014117E39, 0.27182817E1) = 0.17014117E39 +- (0.17014117E39, 0.27182817E1) = 0.17014117E39 +/ (0.17014117E39, 0.27182817E1) = 0.6259144E38 +nextAfter (0.17014117E39, 0.27182817E1) = 0.17014116E39 +rem (0.17014117E39, 0.27182817E1) = 0.4577259E31 +* (0.17014117E39, 0.123E1) = 0.20927364E39 ++ (0.17014117E39, 0.123E1) = 0.17014117E39 +- (0.17014117E39, 0.123E1) = 0.17014117E39 +/ (0.17014117E39, 0.123E1) = 0.13832616E39 +nextAfter (0.17014117E39, 0.123E1) = 0.17014116E39 +rem (0.17014117E39, 0.123E1) = ~0.20447288E30 +* (0.17014117E39, 0.123) = 0.20927365E38 ++ (0.17014117E39, 0.123) = 0.17014117E39 +- (0.17014117E39, 0.123) = 0.17014117E39 +/ (0.17014117E39, 0.123) = inf +nextAfter (0.17014117E39, 0.123) = 0.17014116E39 +rem (0.17014117E39, 0.123) = ~inf +* (0.17014117E39, 0.123E~2) = 0.20927364E36 ++ (0.17014117E39, 0.123E~2) = 0.17014117E39 +- (0.17014117E39, 0.123E~2) = 0.17014117E39 +/ (0.17014117E39, 0.123E~2) = inf +nextAfter (0.17014117E39, 0.123E~2) = 0.17014116E39 +rem (0.17014117E39, 0.123E~2) = ~inf +* (0.17014117E39, 0.11754944E~37) = 0.19999999E1 ++ (0.17014117E39, 0.11754944E~37) = 0.17014117E39 +- (0.17014117E39, 0.11754944E~37) = 0.17014117E39 +/ (0.17014117E39, 0.11754944E~37) = inf +nextAfter (0.17014117E39, 0.11754944E~37) = 0.17014116E39 +rem (0.17014117E39, 0.11754944E~37) = ~inf +* (0.17014117E39, 0.5877472E~38) = 0.99999994 ++ (0.17014117E39, 0.5877472E~38) = 0.17014117E39 +- (0.17014117E39, 0.5877472E~38) = 0.17014117E39 +/ (0.17014117E39, 0.5877472E~38) = inf +nextAfter (0.17014117E39, 0.5877472E~38) = 0.17014116E39 +rem (0.17014117E39, 0.5877472E~38) = ~inf +* (0.17014117E39, 0.1E~44) = 0.23841856E~6 ++ (0.17014117E39, 0.1E~44) = 0.17014117E39 +- (0.17014117E39, 0.1E~44) = 0.17014117E39 +/ (0.17014117E39, 0.1E~44) = inf +nextAfter (0.17014117E39, 0.1E~44) = 0.17014116E39 +rem (0.17014117E39, 0.1E~44) = ~inf +* (0.17014117E39, 0.0) = 0.0 ++ (0.17014117E39, 0.0) = 0.17014117E39 +- (0.17014117E39, 0.0) = 0.17014117E39 +/ (0.17014117E39, 0.0) = inf +nextAfter (0.17014117E39, 0.0) = 0.17014116E39 +rem (0.17014117E39, 0.0) = nan +* (0.17014117E39, ~0.34028235E39) = ~inf ++ (0.17014117E39, ~0.34028235E39) = ~0.17014117E39 +- (0.17014117E39, ~0.34028235E39) = inf +/ (0.17014117E39, ~0.34028235E39) = ~0.5 +nextAfter (0.17014117E39, ~0.34028235E39) = 0.17014116E39 +rem (0.17014117E39, ~0.34028235E39) = 0.17014117E39 +* (0.17014117E39, ~0.17014117E39) = ~inf ++ (0.17014117E39, ~0.17014117E39) = 0.0 +- (0.17014117E39, ~0.17014117E39) = 0.34028235E39 +/ (0.17014117E39, ~0.17014117E39) = ~0.1E1 +nextAfter (0.17014117E39, ~0.17014117E39) = 0.17014116E39 +rem (0.17014117E39, ~0.17014117E39) = 0.0 +* (0.17014117E39, ~0.123E4) = ~inf ++ (0.17014117E39, ~0.123E4) = 0.17014117E39 +- (0.17014117E39, ~0.123E4) = 0.17014117E39 +/ (0.17014117E39, ~0.123E4) = ~0.13832615E36 +nextAfter (0.17014117E39, ~0.123E4) = 0.17014116E39 +rem (0.17014117E39, ~0.123E4) = 0.5942112E31 +* (0.17014117E39, ~0.123E2) = ~inf ++ (0.17014117E39, ~0.123E2) = 0.17014117E39 +- (0.17014117E39, ~0.123E2) = 0.17014117E39 +/ (0.17014117E39, ~0.123E2) = ~0.13832616E38 +nextAfter (0.17014117E39, ~0.123E2) = 0.17014116E39 +rem (0.17014117E39, ~0.123E2) = ~0.6441314E31 +* (0.17014117E39, ~0.31415927E1) = ~inf ++ (0.17014117E39, ~0.31415927E1) = 0.17014117E39 +- (0.17014117E39, ~0.31415927E1) = 0.17014117E39 +/ (0.17014117E39, ~0.31415927E1) = ~0.54157613E38 +nextAfter (0.17014117E39, ~0.31415927E1) = 0.17014116E39 +rem (0.17014117E39, ~0.31415927E1) = 0.7917799E31 +* (0.17014117E39, ~0.27182817E1) = ~inf ++ (0.17014117E39, ~0.27182817E1) = 0.17014117E39 +- (0.17014117E39, ~0.27182817E1) = 0.17014117E39 +/ (0.17014117E39, ~0.27182817E1) = ~0.6259144E38 +nextAfter (0.17014117E39, ~0.27182817E1) = 0.17014116E39 +rem (0.17014117E39, ~0.27182817E1) = 0.4577259E31 +* (0.17014117E39, ~0.123E1) = ~0.20927364E39 ++ (0.17014117E39, ~0.123E1) = 0.17014117E39 +- (0.17014117E39, ~0.123E1) = 0.17014117E39 +/ (0.17014117E39, ~0.123E1) = ~0.13832616E39 +nextAfter (0.17014117E39, ~0.123E1) = 0.17014116E39 +rem (0.17014117E39, ~0.123E1) = ~0.20447288E30 +* (0.17014117E39, ~0.123) = ~0.20927365E38 ++ (0.17014117E39, ~0.123) = 0.17014117E39 +- (0.17014117E39, ~0.123) = 0.17014117E39 +/ (0.17014117E39, ~0.123) = ~inf +nextAfter (0.17014117E39, ~0.123) = 0.17014116E39 +rem (0.17014117E39, ~0.123) = ~inf +* (0.17014117E39, ~0.123E~2) = ~0.20927364E36 ++ (0.17014117E39, ~0.123E~2) = 0.17014117E39 +- (0.17014117E39, ~0.123E~2) = 0.17014117E39 +/ (0.17014117E39, ~0.123E~2) = ~inf +nextAfter (0.17014117E39, ~0.123E~2) = 0.17014116E39 +rem (0.17014117E39, ~0.123E~2) = ~inf +* (0.17014117E39, ~0.11754944E~37) = ~0.19999999E1 ++ (0.17014117E39, ~0.11754944E~37) = 0.17014117E39 +- (0.17014117E39, ~0.11754944E~37) = 0.17014117E39 +/ (0.17014117E39, ~0.11754944E~37) = ~inf +nextAfter (0.17014117E39, ~0.11754944E~37) = 0.17014116E39 +rem (0.17014117E39, ~0.11754944E~37) = ~inf +* (0.17014117E39, ~0.5877472E~38) = ~0.99999994 ++ (0.17014117E39, ~0.5877472E~38) = 0.17014117E39 +- (0.17014117E39, ~0.5877472E~38) = 0.17014117E39 +/ (0.17014117E39, ~0.5877472E~38) = ~inf +nextAfter (0.17014117E39, ~0.5877472E~38) = 0.17014116E39 +rem (0.17014117E39, ~0.5877472E~38) = ~inf +* (0.17014117E39, ~0.1E~44) = ~0.23841856E~6 ++ (0.17014117E39, ~0.1E~44) = 0.17014117E39 +- (0.17014117E39, ~0.1E~44) = 0.17014117E39 +/ (0.17014117E39, ~0.1E~44) = ~inf +nextAfter (0.17014117E39, ~0.1E~44) = 0.17014116E39 +rem (0.17014117E39, ~0.1E~44) = ~inf +* (0.17014117E39, ~0.0) = ~0.0 ++ (0.17014117E39, ~0.0) = 0.17014117E39 +- (0.17014117E39, ~0.0) = 0.17014117E39 +/ (0.17014117E39, ~0.0) = ~inf +nextAfter (0.17014117E39, ~0.0) = 0.17014116E39 +rem (0.17014117E39, ~0.0) = nan +* (0.17014117E39, inf) = inf ++ (0.17014117E39, inf) = inf +- (0.17014117E39, inf) = ~inf +/ (0.17014117E39, inf) = 0.0 +nextAfter (0.17014117E39, inf) = 0.17014118E39 +rem (0.17014117E39, inf) = 0.17014117E39 +* (0.17014117E39, ~inf) = ~inf ++ (0.17014117E39, ~inf) = ~inf +- (0.17014117E39, ~inf) = inf +/ (0.17014117E39, ~inf) = ~0.0 +nextAfter (0.17014117E39, ~inf) = 0.17014116E39 +rem (0.17014117E39, ~inf) = 0.17014117E39 +* (0.17014117E39, nan) = nan ++ (0.17014117E39, nan) = nan +- (0.17014117E39, nan) = nan +/ (0.17014117E39, nan) = nan +nextAfter (0.17014117E39, nan) = nan +rem (0.17014117E39, nan) = nan +* (0.17014117E39, inf) = inf ++ (0.17014117E39, inf) = inf +- (0.17014117E39, inf) = ~inf +/ (0.17014117E39, inf) = 0.0 +nextAfter (0.17014117E39, inf) = 0.17014118E39 +rem (0.17014117E39, inf) = 0.17014117E39 +* (0.123E4, 0.34028235E39) = inf ++ (0.123E4, 0.34028235E39) = 0.34028235E39 +- (0.123E4, 0.34028235E39) = ~0.34028235E39 +/ (0.123E4, 0.34028235E39) = 0.36146455E~35 +nextAfter (0.123E4, 0.34028235E39) = 0.12300001E4 +rem (0.123E4, 0.34028235E39) = 0.123E4 +* (0.123E4, 0.17014117E39) = inf ++ (0.123E4, 0.17014117E39) = 0.17014117E39 +- (0.123E4, 0.17014117E39) = ~0.17014117E39 +/ (0.123E4, 0.17014117E39) = 0.7229291E~35 +nextAfter (0.123E4, 0.17014117E39) = 0.12300001E4 +rem (0.123E4, 0.17014117E39) = 0.123E4 +* (0.123E4, 0.123E4) = 0.15129E7 ++ (0.123E4, 0.123E4) = 0.246E4 +- (0.123E4, 0.123E4) = 0.0 +/ (0.123E4, 0.123E4) = 0.1E1 +nextAfter (0.123E4, 0.123E4) = 0.123E4 +rem (0.123E4, 0.123E4) = 0.0 +* (0.123E4, 0.123E2) = 0.15129E5 ++ (0.123E4, 0.123E2) = 0.12423E4 +- (0.123E4, 0.123E2) = 0.12177E4 +/ (0.123E4, 0.123E2) = 0.1E3 +nextAfter (0.123E4, 0.123E2) = 0.12299999E4 +rem (0.123E4, 0.123E2) = ~0.19073486E~4 +* (0.123E4, 0.31415927E1) = 0.38641592E4 ++ (0.123E4, 0.31415927E1) = 0.12331416E4 +- (0.123E4, 0.31415927E1) = 0.12268584E4 +/ (0.123E4, 0.31415927E1) = 0.39152115E3 +nextAfter (0.123E4, 0.31415927E1) = 0.12299999E4 +rem (0.123E4, 0.31415927E1) = 0.16372383E1 +* (0.123E4, 0.27182817E1) = 0.33434866E4 ++ (0.123E4, 0.27182817E1) = 0.12327183E4 +- (0.123E4, 0.27182817E1) = 0.12272817E4 +/ (0.123E4, 0.27182817E1) = 0.45249173E3 +nextAfter (0.123E4, 0.27182817E1) = 0.12299999E4 +rem (0.123E4, 0.27182817E1) = 0.13366508E1 +* (0.123E4, 0.123E1) = 0.15129E4 ++ (0.123E4, 0.123E1) = 0.123123E4 +- (0.123E4, 0.123E1) = 0.122877E4 +/ (0.123E4, 0.123E1) = 0.1E4 +nextAfter (0.123E4, 0.123E1) = 0.12299999E4 +rem (0.123E4, 0.123E1) = ~0.19073486E~4 +* (0.123E4, 0.123) = 0.15129001E3 ++ (0.123E4, 0.123) = 0.1230123E4 +- (0.123E4, 0.123) = 0.1229877E4 +/ (0.123E4, 0.123) = 0.1E5 +nextAfter (0.123E4, 0.123) = 0.12299999E4 +rem (0.123E4, 0.123) = ~0.33974648E~4 +* (0.123E4, 0.123E~2) = 0.15129001E1 ++ (0.123E4, 0.123E~2) = 0.12300012E4 +- (0.123E4, 0.123E~2) = 0.12299988E4 +/ (0.123E4, 0.123E~2) = 0.99999994E6 +nextAfter (0.123E4, 0.123E~2) = 0.12299999E4 +rem (0.123E4, 0.123E~2) = 0.1177399E~2 +* (0.123E4, 0.11754944E~37) = 0.1445858E~34 ++ (0.123E4, 0.11754944E~37) = 0.123E4 +- (0.123E4, 0.11754944E~37) = 0.123E4 +/ (0.123E4, 0.11754944E~37) = inf +nextAfter (0.123E4, 0.11754944E~37) = 0.12299999E4 +rem (0.123E4, 0.11754944E~37) = ~inf +* (0.123E4, 0.5877472E~38) = 0.722929E~35 ++ (0.123E4, 0.5877472E~38) = 0.123E4 +- (0.123E4, 0.5877472E~38) = 0.123E4 +/ (0.123E4, 0.5877472E~38) = inf +nextAfter (0.123E4, 0.5877472E~38) = 0.12299999E4 +rem (0.123E4, 0.5877472E~38) = ~inf +* (0.123E4, 0.1E~44) = 0.1724E~41 ++ (0.123E4, 0.1E~44) = 0.123E4 +- (0.123E4, 0.1E~44) = 0.123E4 +/ (0.123E4, 0.1E~44) = inf +nextAfter (0.123E4, 0.1E~44) = 0.12299999E4 +rem (0.123E4, 0.1E~44) = ~inf +* (0.123E4, 0.0) = 0.0 ++ (0.123E4, 0.0) = 0.123E4 +- (0.123E4, 0.0) = 0.123E4 +/ (0.123E4, 0.0) = inf +nextAfter (0.123E4, 0.0) = 0.12299999E4 +rem (0.123E4, 0.0) = nan +* (0.123E4, ~0.34028235E39) = ~inf ++ (0.123E4, ~0.34028235E39) = ~0.34028235E39 +- (0.123E4, ~0.34028235E39) = 0.34028235E39 +/ (0.123E4, ~0.34028235E39) = ~0.36146455E~35 +nextAfter (0.123E4, ~0.34028235E39) = 0.12299999E4 +rem (0.123E4, ~0.34028235E39) = 0.123E4 +* (0.123E4, ~0.17014117E39) = ~inf ++ (0.123E4, ~0.17014117E39) = ~0.17014117E39 +- (0.123E4, ~0.17014117E39) = 0.17014117E39 +/ (0.123E4, ~0.17014117E39) = ~0.7229291E~35 +nextAfter (0.123E4, ~0.17014117E39) = 0.12299999E4 +rem (0.123E4, ~0.17014117E39) = 0.123E4 +* (0.123E4, ~0.123E4) = ~0.15129E7 ++ (0.123E4, ~0.123E4) = 0.0 +- (0.123E4, ~0.123E4) = 0.246E4 +/ (0.123E4, ~0.123E4) = ~0.1E1 +nextAfter (0.123E4, ~0.123E4) = 0.12299999E4 +rem (0.123E4, ~0.123E4) = 0.0 +* (0.123E4, ~0.123E2) = ~0.15129E5 ++ (0.123E4, ~0.123E2) = 0.12177E4 +- (0.123E4, ~0.123E2) = 0.12423E4 +/ (0.123E4, ~0.123E2) = ~0.1E3 +nextAfter (0.123E4, ~0.123E2) = 0.12299999E4 +rem (0.123E4, ~0.123E2) = ~0.19073486E~4 +* (0.123E4, ~0.31415927E1) = ~0.38641592E4 ++ (0.123E4, ~0.31415927E1) = 0.12268584E4 +- (0.123E4, ~0.31415927E1) = 0.12331416E4 +/ (0.123E4, ~0.31415927E1) = ~0.39152115E3 +nextAfter (0.123E4, ~0.31415927E1) = 0.12299999E4 +rem (0.123E4, ~0.31415927E1) = 0.16372383E1 +* (0.123E4, ~0.27182817E1) = ~0.33434866E4 ++ (0.123E4, ~0.27182817E1) = 0.12272817E4 +- (0.123E4, ~0.27182817E1) = 0.12327183E4 +/ (0.123E4, ~0.27182817E1) = ~0.45249173E3 +nextAfter (0.123E4, ~0.27182817E1) = 0.12299999E4 +rem (0.123E4, ~0.27182817E1) = 0.13366508E1 +* (0.123E4, ~0.123E1) = ~0.15129E4 ++ (0.123E4, ~0.123E1) = 0.122877E4 +- (0.123E4, ~0.123E1) = 0.123123E4 +/ (0.123E4, ~0.123E1) = ~0.1E4 +nextAfter (0.123E4, ~0.123E1) = 0.12299999E4 +rem (0.123E4, ~0.123E1) = ~0.19073486E~4 +* (0.123E4, ~0.123) = ~0.15129001E3 ++ (0.123E4, ~0.123) = 0.1229877E4 +- (0.123E4, ~0.123) = 0.1230123E4 +/ (0.123E4, ~0.123) = ~0.1E5 +nextAfter (0.123E4, ~0.123) = 0.12299999E4 +rem (0.123E4, ~0.123) = ~0.33974648E~4 +* (0.123E4, ~0.123E~2) = ~0.15129001E1 ++ (0.123E4, ~0.123E~2) = 0.12299988E4 +- (0.123E4, ~0.123E~2) = 0.12300012E4 +/ (0.123E4, ~0.123E~2) = ~0.99999994E6 +nextAfter (0.123E4, ~0.123E~2) = 0.12299999E4 +rem (0.123E4, ~0.123E~2) = 0.1177399E~2 +* (0.123E4, ~0.11754944E~37) = ~0.1445858E~34 ++ (0.123E4, ~0.11754944E~37) = 0.123E4 +- (0.123E4, ~0.11754944E~37) = 0.123E4 +/ (0.123E4, ~0.11754944E~37) = ~inf +nextAfter (0.123E4, ~0.11754944E~37) = 0.12299999E4 +rem (0.123E4, ~0.11754944E~37) = ~inf +* (0.123E4, ~0.5877472E~38) = ~0.722929E~35 ++ (0.123E4, ~0.5877472E~38) = 0.123E4 +- (0.123E4, ~0.5877472E~38) = 0.123E4 +/ (0.123E4, ~0.5877472E~38) = ~inf +nextAfter (0.123E4, ~0.5877472E~38) = 0.12299999E4 +rem (0.123E4, ~0.5877472E~38) = ~inf +* (0.123E4, ~0.1E~44) = ~0.1724E~41 ++ (0.123E4, ~0.1E~44) = 0.123E4 +- (0.123E4, ~0.1E~44) = 0.123E4 +/ (0.123E4, ~0.1E~44) = ~inf +nextAfter (0.123E4, ~0.1E~44) = 0.12299999E4 +rem (0.123E4, ~0.1E~44) = ~inf +* (0.123E4, ~0.0) = ~0.0 ++ (0.123E4, ~0.0) = 0.123E4 +- (0.123E4, ~0.0) = 0.123E4 +/ (0.123E4, ~0.0) = ~inf +nextAfter (0.123E4, ~0.0) = 0.12299999E4 +rem (0.123E4, ~0.0) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300001E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E4, ~inf) = ~inf ++ (0.123E4, ~inf) = ~inf +- (0.123E4, ~inf) = inf +/ (0.123E4, ~inf) = ~0.0 +nextAfter (0.123E4, ~inf) = 0.12299999E4 +rem (0.123E4, ~inf) = 0.123E4 +* (0.123E4, nan) = nan ++ (0.123E4, nan) = nan +- (0.123E4, nan) = nan +/ (0.123E4, nan) = nan +nextAfter (0.123E4, nan) = nan +rem (0.123E4, nan) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300001E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E2, 0.34028235E39) = inf ++ (0.123E2, 0.34028235E39) = 0.34028235E39 +- (0.123E2, 0.34028235E39) = ~0.34028235E39 +/ (0.123E2, 0.34028235E39) = 0.36146455E~37 +nextAfter (0.123E2, 0.34028235E39) = 0.12300001E2 +rem (0.123E2, 0.34028235E39) = 0.123E2 +* (0.123E2, 0.17014117E39) = inf ++ (0.123E2, 0.17014117E39) = 0.17014117E39 +- (0.123E2, 0.17014117E39) = ~0.17014117E39 +/ (0.123E2, 0.17014117E39) = 0.7229291E~37 +nextAfter (0.123E2, 0.17014117E39) = 0.12300001E2 +rem (0.123E2, 0.17014117E39) = 0.123E2 +* (0.123E2, 0.123E4) = 0.15129E5 ++ (0.123E2, 0.123E4) = 0.12423E4 +- (0.123E2, 0.123E4) = ~0.12177E4 +/ (0.123E2, 0.123E4) = 0.1E~1 +nextAfter (0.123E2, 0.123E4) = 0.12300001E2 +rem (0.123E2, 0.123E4) = 0.123E2 +* (0.123E2, 0.123E2) = 0.15129001E3 ++ (0.123E2, 0.123E2) = 0.246E2 +- (0.123E2, 0.123E2) = 0.0 +/ (0.123E2, 0.123E2) = 0.1E1 +nextAfter (0.123E2, 0.123E2) = 0.123E2 +rem (0.123E2, 0.123E2) = 0.0 +* (0.123E2, 0.31415927E1) = 0.3864159E2 ++ (0.123E2, 0.31415927E1) = 0.15441593E2 +- (0.123E2, 0.31415927E1) = 0.9158407E1 +/ (0.123E2, 0.31415927E1) = 0.39152114E1 +nextAfter (0.123E2, 0.31415927E1) = 0.12299999E2 +rem (0.123E2, 0.31415927E1) = 0.2875222E1 +* (0.123E2, 0.27182817E1) = 0.33434868E2 ++ (0.123E2, 0.27182817E1) = 0.15018282E2 +- (0.123E2, 0.27182817E1) = 0.9581718E1 +/ (0.123E2, 0.27182817E1) = 0.4524917E1 +nextAfter (0.123E2, 0.27182817E1) = 0.12299999E2 +rem (0.123E2, 0.27182817E1) = 0.14268732E1 +* (0.123E2, 0.123E1) = 0.15129001E2 ++ (0.123E2, 0.123E1) = 0.13530001E2 +- (0.123E2, 0.123E1) = 0.1107E2 +/ (0.123E2, 0.123E1) = 0.1E2 +nextAfter (0.123E2, 0.123E1) = 0.12299999E2 +rem (0.123E2, 0.123E1) = 0.0 +* (0.123E2, 0.123) = 0.15129001E1 ++ (0.123E2, 0.123) = 0.12423E2 +- (0.123E2, 0.123) = 0.12177E2 +/ (0.123E2, 0.123) = 0.1E3 +nextAfter (0.123E2, 0.123) = 0.12299999E2 +rem (0.123E2, 0.123) = ~0.14901161E~6 +* (0.123E2, 0.123E~2) = 0.15129001E~1 ++ (0.123E2, 0.123E~2) = 0.1230123E2 +- (0.123E2, 0.123E~2) = 0.1229877E2 +/ (0.123E2, 0.123E~2) = 0.1E5 +nextAfter (0.123E2, 0.123E~2) = 0.12299999E2 +rem (0.123E2, 0.123E~2) = ~0.33527613E~6 +* (0.123E2, 0.11754944E~37) = 0.14458581E~36 ++ (0.123E2, 0.11754944E~37) = 0.123E2 +- (0.123E2, 0.11754944E~37) = 0.123E2 +/ (0.123E2, 0.11754944E~37) = inf +nextAfter (0.123E2, 0.11754944E~37) = 0.12299999E2 +rem (0.123E2, 0.11754944E~37) = ~inf +* (0.123E2, 0.5877472E~38) = 0.72292904E~37 ++ (0.123E2, 0.5877472E~38) = 0.123E2 +- (0.123E2, 0.5877472E~38) = 0.123E2 +/ (0.123E2, 0.5877472E~38) = inf +nextAfter (0.123E2, 0.5877472E~38) = 0.12299999E2 +rem (0.123E2, 0.5877472E~38) = ~inf +* (0.123E2, 0.1E~44) = 0.17E~43 ++ (0.123E2, 0.1E~44) = 0.123E2 +- (0.123E2, 0.1E~44) = 0.123E2 +/ (0.123E2, 0.1E~44) = inf +nextAfter (0.123E2, 0.1E~44) = 0.12299999E2 +rem (0.123E2, 0.1E~44) = ~inf +* (0.123E2, 0.0) = 0.0 ++ (0.123E2, 0.0) = 0.123E2 +- (0.123E2, 0.0) = 0.123E2 +/ (0.123E2, 0.0) = inf +nextAfter (0.123E2, 0.0) = 0.12299999E2 +rem (0.123E2, 0.0) = nan +* (0.123E2, ~0.34028235E39) = ~inf ++ (0.123E2, ~0.34028235E39) = ~0.34028235E39 +- (0.123E2, ~0.34028235E39) = 0.34028235E39 +/ (0.123E2, ~0.34028235E39) = ~0.36146455E~37 +nextAfter (0.123E2, ~0.34028235E39) = 0.12299999E2 +rem (0.123E2, ~0.34028235E39) = 0.123E2 +* (0.123E2, ~0.17014117E39) = ~inf ++ (0.123E2, ~0.17014117E39) = ~0.17014117E39 +- (0.123E2, ~0.17014117E39) = 0.17014117E39 +/ (0.123E2, ~0.17014117E39) = ~0.7229291E~37 +nextAfter (0.123E2, ~0.17014117E39) = 0.12299999E2 +rem (0.123E2, ~0.17014117E39) = 0.123E2 +* (0.123E2, ~0.123E4) = ~0.15129E5 ++ (0.123E2, ~0.123E4) = ~0.12177E4 +- (0.123E2, ~0.123E4) = 0.12423E4 +/ (0.123E2, ~0.123E4) = ~0.1E~1 +nextAfter (0.123E2, ~0.123E4) = 0.12299999E2 +rem (0.123E2, ~0.123E4) = 0.123E2 +* (0.123E2, ~0.123E2) = ~0.15129001E3 ++ (0.123E2, ~0.123E2) = 0.0 +- (0.123E2, ~0.123E2) = 0.246E2 +/ (0.123E2, ~0.123E2) = ~0.1E1 +nextAfter (0.123E2, ~0.123E2) = 0.12299999E2 +rem (0.123E2, ~0.123E2) = 0.0 +* (0.123E2, ~0.31415927E1) = ~0.3864159E2 ++ (0.123E2, ~0.31415927E1) = 0.9158407E1 +- (0.123E2, ~0.31415927E1) = 0.15441593E2 +/ (0.123E2, ~0.31415927E1) = ~0.39152114E1 +nextAfter (0.123E2, ~0.31415927E1) = 0.12299999E2 +rem (0.123E2, ~0.31415927E1) = 0.2875222E1 +* (0.123E2, ~0.27182817E1) = ~0.33434868E2 ++ (0.123E2, ~0.27182817E1) = 0.9581718E1 +- (0.123E2, ~0.27182817E1) = 0.15018282E2 +/ (0.123E2, ~0.27182817E1) = ~0.4524917E1 +nextAfter (0.123E2, ~0.27182817E1) = 0.12299999E2 +rem (0.123E2, ~0.27182817E1) = 0.14268732E1 +* (0.123E2, ~0.123E1) = ~0.15129001E2 ++ (0.123E2, ~0.123E1) = 0.1107E2 +- (0.123E2, ~0.123E1) = 0.13530001E2 +/ (0.123E2, ~0.123E1) = ~0.1E2 +nextAfter (0.123E2, ~0.123E1) = 0.12299999E2 +rem (0.123E2, ~0.123E1) = 0.0 +* (0.123E2, ~0.123) = ~0.15129001E1 ++ (0.123E2, ~0.123) = 0.12177E2 +- (0.123E2, ~0.123) = 0.12423E2 +/ (0.123E2, ~0.123) = ~0.1E3 +nextAfter (0.123E2, ~0.123) = 0.12299999E2 +rem (0.123E2, ~0.123) = ~0.14901161E~6 +* (0.123E2, ~0.123E~2) = ~0.15129001E~1 ++ (0.123E2, ~0.123E~2) = 0.1229877E2 +- (0.123E2, ~0.123E~2) = 0.1230123E2 +/ (0.123E2, ~0.123E~2) = ~0.1E5 +nextAfter (0.123E2, ~0.123E~2) = 0.12299999E2 +rem (0.123E2, ~0.123E~2) = ~0.33527613E~6 +* (0.123E2, ~0.11754944E~37) = ~0.14458581E~36 ++ (0.123E2, ~0.11754944E~37) = 0.123E2 +- (0.123E2, ~0.11754944E~37) = 0.123E2 +/ (0.123E2, ~0.11754944E~37) = ~inf +nextAfter (0.123E2, ~0.11754944E~37) = 0.12299999E2 +rem (0.123E2, ~0.11754944E~37) = ~inf +* (0.123E2, ~0.5877472E~38) = ~0.72292904E~37 ++ (0.123E2, ~0.5877472E~38) = 0.123E2 +- (0.123E2, ~0.5877472E~38) = 0.123E2 +/ (0.123E2, ~0.5877472E~38) = ~inf +nextAfter (0.123E2, ~0.5877472E~38) = 0.12299999E2 +rem (0.123E2, ~0.5877472E~38) = ~inf +* (0.123E2, ~0.1E~44) = ~0.17E~43 ++ (0.123E2, ~0.1E~44) = 0.123E2 +- (0.123E2, ~0.1E~44) = 0.123E2 +/ (0.123E2, ~0.1E~44) = ~inf +nextAfter (0.123E2, ~0.1E~44) = 0.12299999E2 +rem (0.123E2, ~0.1E~44) = ~inf +* (0.123E2, ~0.0) = ~0.0 ++ (0.123E2, ~0.0) = 0.123E2 +- (0.123E2, ~0.0) = 0.123E2 +/ (0.123E2, ~0.0) = ~inf +nextAfter (0.123E2, ~0.0) = 0.12299999E2 +rem (0.123E2, ~0.0) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300001E2 +rem (0.123E2, inf) = 0.123E2 +* (0.123E2, ~inf) = ~inf ++ (0.123E2, ~inf) = ~inf +- (0.123E2, ~inf) = inf +/ (0.123E2, ~inf) = ~0.0 +nextAfter (0.123E2, ~inf) = 0.12299999E2 +rem (0.123E2, ~inf) = 0.123E2 +* (0.123E2, nan) = nan ++ (0.123E2, nan) = nan +- (0.123E2, nan) = nan +/ (0.123E2, nan) = nan +nextAfter (0.123E2, nan) = nan +rem (0.123E2, nan) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300001E2 +rem (0.123E2, inf) = 0.123E2 +* (0.31415927E1, 0.34028235E39) = inf ++ (0.31415927E1, 0.34028235E39) = 0.34028235E39 +- (0.31415927E1, 0.34028235E39) = ~0.34028235E39 +/ (0.31415927E1, 0.34028235E39) = 0.9232312E~38 +nextAfter (0.31415927E1, 0.34028235E39) = 0.3141593E1 +rem (0.31415927E1, 0.34028235E39) = 0.31415927E1 +* (0.31415927E1, 0.17014117E39) = inf ++ (0.31415927E1, 0.17014117E39) = 0.17014117E39 +- (0.31415927E1, 0.17014117E39) = ~0.17014117E39 +/ (0.31415927E1, 0.17014117E39) = 0.18464624E~37 +nextAfter (0.31415927E1, 0.17014117E39) = 0.3141593E1 +rem (0.31415927E1, 0.17014117E39) = 0.31415927E1 +* (0.31415927E1, 0.123E4) = 0.38641592E4 ++ (0.31415927E1, 0.123E4) = 0.12331416E4 +- (0.31415927E1, 0.123E4) = ~0.12268584E4 +/ (0.31415927E1, 0.123E4) = 0.25541405E~2 +nextAfter (0.31415927E1, 0.123E4) = 0.3141593E1 +rem (0.31415927E1, 0.123E4) = 0.31415927E1 +* (0.31415927E1, 0.123E2) = 0.3864159E2 ++ (0.31415927E1, 0.123E2) = 0.15441593E2 +- (0.31415927E1, 0.123E2) = ~0.9158407E1 +/ (0.31415927E1, 0.123E2) = 0.25541404 +nextAfter (0.31415927E1, 0.123E2) = 0.3141593E1 +rem (0.31415927E1, 0.123E2) = 0.31415927E1 +* (0.31415927E1, 0.31415927E1) = 0.9869605E1 ++ (0.31415927E1, 0.31415927E1) = 0.62831855E1 +- (0.31415927E1, 0.31415927E1) = 0.0 +/ (0.31415927E1, 0.31415927E1) = 0.1E1 +nextAfter (0.31415927E1, 0.31415927E1) = 0.31415927E1 +rem (0.31415927E1, 0.31415927E1) = 0.0 +* (0.31415927E1, 0.27182817E1) = 0.8539734E1 ++ (0.31415927E1, 0.27182817E1) = 0.58598747E1 +- (0.31415927E1, 0.27182817E1) = 0.423311 +/ (0.31415927E1, 0.27182817E1) = 0.11557274E1 +nextAfter (0.31415927E1, 0.27182817E1) = 0.31415925E1 +rem (0.31415927E1, 0.27182817E1) = 0.423311 +* (0.31415927E1, 0.123E1) = 0.3864159E1 ++ (0.31415927E1, 0.123E1) = 0.43715925E1 +- (0.31415927E1, 0.123E1) = 0.19115927E1 +/ (0.31415927E1, 0.123E1) = 0.25541403E1 +nextAfter (0.31415927E1, 0.123E1) = 0.31415925E1 +rem (0.31415927E1, 0.123E1) = 0.6815927 +* (0.31415927E1, 0.123) = 0.38641593 ++ (0.31415927E1, 0.123) = 0.32645926E1 +- (0.31415927E1, 0.123) = 0.30185928E1 +/ (0.31415927E1, 0.123) = 0.25541403E2 +nextAfter (0.31415927E1, 0.123) = 0.31415925E1 +rem (0.31415927E1, 0.123) = 0.66592656E~1 +* (0.31415927E1, 0.123E~2) = 0.38641593E~2 ++ (0.31415927E1, 0.123E~2) = 0.31428227E1 +- (0.31415927E1, 0.123E~2) = 0.31403627E1 +/ (0.31415927E1, 0.123E~2) = 0.25541404E4 +nextAfter (0.31415927E1, 0.123E~2) = 0.31415925E1 +rem (0.31415927E1, 0.123E~2) = 0.17260667E~3 +* (0.31415927E1, 0.11754944E~37) = 0.36929245E~37 ++ (0.31415927E1, 0.11754944E~37) = 0.31415927E1 +- (0.31415927E1, 0.11754944E~37) = 0.31415927E1 +/ (0.31415927E1, 0.11754944E~37) = 0.26725715E39 +nextAfter (0.31415927E1, 0.11754944E~37) = 0.31415925E1 +rem (0.31415927E1, 0.11754944E~37) = 0.0 +* (0.31415927E1, 0.5877472E~38) = 0.18464623E~37 ++ (0.31415927E1, 0.5877472E~38) = 0.31415927E1 +- (0.31415927E1, 0.5877472E~38) = 0.31415927E1 +/ (0.31415927E1, 0.5877472E~38) = inf +nextAfter (0.31415927E1, 0.5877472E~38) = 0.31415925E1 +rem (0.31415927E1, 0.5877472E~38) = ~inf +* (0.31415927E1, 0.1E~44) = 0.4E~44 ++ (0.31415927E1, 0.1E~44) = 0.31415927E1 +- (0.31415927E1, 0.1E~44) = 0.31415927E1 +/ (0.31415927E1, 0.1E~44) = inf +nextAfter (0.31415927E1, 0.1E~44) = 0.31415925E1 +rem (0.31415927E1, 0.1E~44) = ~inf +* (0.31415927E1, 0.0) = 0.0 ++ (0.31415927E1, 0.0) = 0.31415927E1 +- (0.31415927E1, 0.0) = 0.31415927E1 +/ (0.31415927E1, 0.0) = inf +nextAfter (0.31415927E1, 0.0) = 0.31415925E1 +rem (0.31415927E1, 0.0) = nan +* (0.31415927E1, ~0.34028235E39) = ~inf ++ (0.31415927E1, ~0.34028235E39) = ~0.34028235E39 +- (0.31415927E1, ~0.34028235E39) = 0.34028235E39 +/ (0.31415927E1, ~0.34028235E39) = ~0.9232312E~38 +nextAfter (0.31415927E1, ~0.34028235E39) = 0.31415925E1 +rem (0.31415927E1, ~0.34028235E39) = 0.31415927E1 +* (0.31415927E1, ~0.17014117E39) = ~inf ++ (0.31415927E1, ~0.17014117E39) = ~0.17014117E39 +- (0.31415927E1, ~0.17014117E39) = 0.17014117E39 +/ (0.31415927E1, ~0.17014117E39) = ~0.18464624E~37 +nextAfter (0.31415927E1, ~0.17014117E39) = 0.31415925E1 +rem (0.31415927E1, ~0.17014117E39) = 0.31415927E1 +* (0.31415927E1, ~0.123E4) = ~0.38641592E4 ++ (0.31415927E1, ~0.123E4) = ~0.12268584E4 +- (0.31415927E1, ~0.123E4) = 0.12331416E4 +/ (0.31415927E1, ~0.123E4) = ~0.25541405E~2 +nextAfter (0.31415927E1, ~0.123E4) = 0.31415925E1 +rem (0.31415927E1, ~0.123E4) = 0.31415927E1 +* (0.31415927E1, ~0.123E2) = ~0.3864159E2 ++ (0.31415927E1, ~0.123E2) = ~0.9158407E1 +- (0.31415927E1, ~0.123E2) = 0.15441593E2 +/ (0.31415927E1, ~0.123E2) = ~0.25541404 +nextAfter (0.31415927E1, ~0.123E2) = 0.31415925E1 +rem (0.31415927E1, ~0.123E2) = 0.31415927E1 +* (0.31415927E1, ~0.31415927E1) = ~0.9869605E1 ++ (0.31415927E1, ~0.31415927E1) = 0.0 +- (0.31415927E1, ~0.31415927E1) = 0.62831855E1 +/ (0.31415927E1, ~0.31415927E1) = ~0.1E1 +nextAfter (0.31415927E1, ~0.31415927E1) = 0.31415925E1 +rem (0.31415927E1, ~0.31415927E1) = 0.0 +* (0.31415927E1, ~0.27182817E1) = ~0.8539734E1 ++ (0.31415927E1, ~0.27182817E1) = 0.423311 +- (0.31415927E1, ~0.27182817E1) = 0.58598747E1 +/ (0.31415927E1, ~0.27182817E1) = ~0.11557274E1 +nextAfter (0.31415927E1, ~0.27182817E1) = 0.31415925E1 +rem (0.31415927E1, ~0.27182817E1) = 0.423311 +* (0.31415927E1, ~0.123E1) = ~0.3864159E1 ++ (0.31415927E1, ~0.123E1) = 0.19115927E1 +- (0.31415927E1, ~0.123E1) = 0.43715925E1 +/ (0.31415927E1, ~0.123E1) = ~0.25541403E1 +nextAfter (0.31415927E1, ~0.123E1) = 0.31415925E1 +rem (0.31415927E1, ~0.123E1) = 0.6815927 +* (0.31415927E1, ~0.123) = ~0.38641593 ++ (0.31415927E1, ~0.123) = 0.30185928E1 +- (0.31415927E1, ~0.123) = 0.32645926E1 +/ (0.31415927E1, ~0.123) = ~0.25541403E2 +nextAfter (0.31415927E1, ~0.123) = 0.31415925E1 +rem (0.31415927E1, ~0.123) = 0.66592656E~1 +* (0.31415927E1, ~0.123E~2) = ~0.38641593E~2 ++ (0.31415927E1, ~0.123E~2) = 0.31403627E1 +- (0.31415927E1, ~0.123E~2) = 0.31428227E1 +/ (0.31415927E1, ~0.123E~2) = ~0.25541404E4 +nextAfter (0.31415927E1, ~0.123E~2) = 0.31415925E1 +rem (0.31415927E1, ~0.123E~2) = 0.17260667E~3 +* (0.31415927E1, ~0.11754944E~37) = ~0.36929245E~37 ++ (0.31415927E1, ~0.11754944E~37) = 0.31415927E1 +- (0.31415927E1, ~0.11754944E~37) = 0.31415927E1 +/ (0.31415927E1, ~0.11754944E~37) = ~0.26725715E39 +nextAfter (0.31415927E1, ~0.11754944E~37) = 0.31415925E1 +rem (0.31415927E1, ~0.11754944E~37) = 0.0 +* (0.31415927E1, ~0.5877472E~38) = ~0.18464623E~37 ++ (0.31415927E1, ~0.5877472E~38) = 0.31415927E1 +- (0.31415927E1, ~0.5877472E~38) = 0.31415927E1 +/ (0.31415927E1, ~0.5877472E~38) = ~inf +nextAfter (0.31415927E1, ~0.5877472E~38) = 0.31415925E1 +rem (0.31415927E1, ~0.5877472E~38) = ~inf +* (0.31415927E1, ~0.1E~44) = ~0.4E~44 ++ (0.31415927E1, ~0.1E~44) = 0.31415927E1 +- (0.31415927E1, ~0.1E~44) = 0.31415927E1 +/ (0.31415927E1, ~0.1E~44) = ~inf +nextAfter (0.31415927E1, ~0.1E~44) = 0.31415925E1 +rem (0.31415927E1, ~0.1E~44) = ~inf +* (0.31415927E1, ~0.0) = ~0.0 ++ (0.31415927E1, ~0.0) = 0.31415927E1 +- (0.31415927E1, ~0.0) = 0.31415927E1 +/ (0.31415927E1, ~0.0) = ~inf +nextAfter (0.31415927E1, ~0.0) = 0.31415925E1 +rem (0.31415927E1, ~0.0) = nan +* (0.31415927E1, inf) = inf ++ (0.31415927E1, inf) = inf +- (0.31415927E1, inf) = ~inf +/ (0.31415927E1, inf) = 0.0 +nextAfter (0.31415927E1, inf) = 0.3141593E1 +rem (0.31415927E1, inf) = 0.31415927E1 +* (0.31415927E1, ~inf) = ~inf ++ (0.31415927E1, ~inf) = ~inf +- (0.31415927E1, ~inf) = inf +/ (0.31415927E1, ~inf) = ~0.0 +nextAfter (0.31415927E1, ~inf) = 0.31415925E1 +rem (0.31415927E1, ~inf) = 0.31415927E1 +* (0.31415927E1, nan) = nan ++ (0.31415927E1, nan) = nan +- (0.31415927E1, nan) = nan +/ (0.31415927E1, nan) = nan +nextAfter (0.31415927E1, nan) = nan +rem (0.31415927E1, nan) = nan +* (0.31415927E1, inf) = inf ++ (0.31415927E1, inf) = inf +- (0.31415927E1, inf) = ~inf +/ (0.31415927E1, inf) = 0.0 +nextAfter (0.31415927E1, inf) = 0.3141593E1 +rem (0.31415927E1, inf) = 0.31415927E1 +* (0.27182817E1, 0.34028235E39) = inf ++ (0.27182817E1, 0.34028235E39) = 0.34028235E39 +- (0.27182817E1, 0.34028235E39) = ~0.34028235E39 +/ (0.27182817E1, 0.34028235E39) = 0.7988312E~38 +nextAfter (0.27182817E1, 0.34028235E39) = 0.2718282E1 +rem (0.27182817E1, 0.34028235E39) = 0.27182817E1 +* (0.27182817E1, 0.17014117E39) = inf ++ (0.27182817E1, 0.17014117E39) = 0.17014117E39 +- (0.27182817E1, 0.17014117E39) = ~0.17014117E39 +/ (0.27182817E1, 0.17014117E39) = 0.15976626E~37 +nextAfter (0.27182817E1, 0.17014117E39) = 0.2718282E1 +rem (0.27182817E1, 0.17014117E39) = 0.27182817E1 +* (0.27182817E1, 0.123E4) = 0.33434866E4 ++ (0.27182817E1, 0.123E4) = 0.12327183E4 +- (0.27182817E1, 0.123E4) = ~0.12272817E4 +/ (0.27182817E1, 0.123E4) = 0.22099852E~2 +nextAfter (0.27182817E1, 0.123E4) = 0.2718282E1 +rem (0.27182817E1, 0.123E4) = 0.27182817E1 +* (0.27182817E1, 0.123E2) = 0.33434868E2 ++ (0.27182817E1, 0.123E2) = 0.15018282E2 +- (0.27182817E1, 0.123E2) = ~0.9581718E1 +/ (0.27182817E1, 0.123E2) = 0.22099851 +nextAfter (0.27182817E1, 0.123E2) = 0.2718282E1 +rem (0.27182817E1, 0.123E2) = 0.27182817E1 +* (0.27182817E1, 0.31415927E1) = 0.8539734E1 ++ (0.27182817E1, 0.31415927E1) = 0.58598747E1 +- (0.27182817E1, 0.31415927E1) = ~0.423311 +/ (0.27182817E1, 0.31415927E1) = 0.86525595 +nextAfter (0.27182817E1, 0.31415927E1) = 0.2718282E1 +rem (0.27182817E1, 0.31415927E1) = 0.27182817E1 +* (0.27182817E1, 0.27182817E1) = 0.73890557E1 ++ (0.27182817E1, 0.27182817E1) = 0.54365635E1 +- (0.27182817E1, 0.27182817E1) = 0.0 +/ (0.27182817E1, 0.27182817E1) = 0.1E1 +nextAfter (0.27182817E1, 0.27182817E1) = 0.27182817E1 +rem (0.27182817E1, 0.27182817E1) = 0.0 +* (0.27182817E1, 0.123E1) = 0.33434865E1 ++ (0.27182817E1, 0.123E1) = 0.39482818E1 +- (0.27182817E1, 0.123E1) = 0.14882817E1 +/ (0.27182817E1, 0.123E1) = 0.2209985E1 +nextAfter (0.27182817E1, 0.123E1) = 0.27182815E1 +rem (0.27182817E1, 0.123E1) = 0.2582817 +* (0.27182817E1, 0.123) = 0.33434868 ++ (0.27182817E1, 0.123) = 0.28412817E1 +- (0.27182817E1, 0.123) = 0.25952818E1 +/ (0.27182817E1, 0.123) = 0.22099852E2 +nextAfter (0.27182817E1, 0.123) = 0.27182815E1 +rem (0.27182817E1, 0.123) = 0.12281671E~1 +* (0.27182817E1, 0.123E~2) = 0.33434867E~2 ++ (0.27182817E1, 0.123E~2) = 0.27195117E1 +- (0.27182817E1, 0.123E~2) = 0.27170517E1 +/ (0.27182817E1, 0.123E~2) = 0.2209985E4 +nextAfter (0.27182817E1, 0.123E~2) = 0.27182815E1 +rem (0.27182817E1, 0.123E~2) = 0.12116297E~2 +* (0.27182817E1, 0.11754944E~37) = 0.31953248E~37 ++ (0.27182817E1, 0.11754944E~37) = 0.27182817E1 +- (0.27182817E1, 0.11754944E~37) = 0.27182817E1 +/ (0.27182817E1, 0.11754944E~37) = 0.23124584E39 +nextAfter (0.27182817E1, 0.11754944E~37) = 0.27182815E1 +rem (0.27182817E1, 0.11754944E~37) = 0.0 +* (0.27182817E1, 0.5877472E~38) = 0.15976624E~37 ++ (0.27182817E1, 0.5877472E~38) = 0.27182817E1 +- (0.27182817E1, 0.5877472E~38) = 0.27182817E1 +/ (0.27182817E1, 0.5877472E~38) = inf +nextAfter (0.27182817E1, 0.5877472E~38) = 0.27182815E1 +rem (0.27182817E1, 0.5877472E~38) = ~inf +* (0.27182817E1, 0.1E~44) = 0.4E~44 ++ (0.27182817E1, 0.1E~44) = 0.27182817E1 +- (0.27182817E1, 0.1E~44) = 0.27182817E1 +/ (0.27182817E1, 0.1E~44) = inf +nextAfter (0.27182817E1, 0.1E~44) = 0.27182815E1 +rem (0.27182817E1, 0.1E~44) = ~inf +* (0.27182817E1, 0.0) = 0.0 ++ (0.27182817E1, 0.0) = 0.27182817E1 +- (0.27182817E1, 0.0) = 0.27182817E1 +/ (0.27182817E1, 0.0) = inf +nextAfter (0.27182817E1, 0.0) = 0.27182815E1 +rem (0.27182817E1, 0.0) = nan +* (0.27182817E1, ~0.34028235E39) = ~inf ++ (0.27182817E1, ~0.34028235E39) = ~0.34028235E39 +- (0.27182817E1, ~0.34028235E39) = 0.34028235E39 +/ (0.27182817E1, ~0.34028235E39) = ~0.7988312E~38 +nextAfter (0.27182817E1, ~0.34028235E39) = 0.27182815E1 +rem (0.27182817E1, ~0.34028235E39) = 0.27182817E1 +* (0.27182817E1, ~0.17014117E39) = ~inf ++ (0.27182817E1, ~0.17014117E39) = ~0.17014117E39 +- (0.27182817E1, ~0.17014117E39) = 0.17014117E39 +/ (0.27182817E1, ~0.17014117E39) = ~0.15976626E~37 +nextAfter (0.27182817E1, ~0.17014117E39) = 0.27182815E1 +rem (0.27182817E1, ~0.17014117E39) = 0.27182817E1 +* (0.27182817E1, ~0.123E4) = ~0.33434866E4 ++ (0.27182817E1, ~0.123E4) = ~0.12272817E4 +- (0.27182817E1, ~0.123E4) = 0.12327183E4 +/ (0.27182817E1, ~0.123E4) = ~0.22099852E~2 +nextAfter (0.27182817E1, ~0.123E4) = 0.27182815E1 +rem (0.27182817E1, ~0.123E4) = 0.27182817E1 +* (0.27182817E1, ~0.123E2) = ~0.33434868E2 ++ (0.27182817E1, ~0.123E2) = ~0.9581718E1 +- (0.27182817E1, ~0.123E2) = 0.15018282E2 +/ (0.27182817E1, ~0.123E2) = ~0.22099851 +nextAfter (0.27182817E1, ~0.123E2) = 0.27182815E1 +rem (0.27182817E1, ~0.123E2) = 0.27182817E1 +* (0.27182817E1, ~0.31415927E1) = ~0.8539734E1 ++ (0.27182817E1, ~0.31415927E1) = ~0.423311 +- (0.27182817E1, ~0.31415927E1) = 0.58598747E1 +/ (0.27182817E1, ~0.31415927E1) = ~0.86525595 +nextAfter (0.27182817E1, ~0.31415927E1) = 0.27182815E1 +rem (0.27182817E1, ~0.31415927E1) = 0.27182817E1 +* (0.27182817E1, ~0.27182817E1) = ~0.73890557E1 ++ (0.27182817E1, ~0.27182817E1) = 0.0 +- (0.27182817E1, ~0.27182817E1) = 0.54365635E1 +/ (0.27182817E1, ~0.27182817E1) = ~0.1E1 +nextAfter (0.27182817E1, ~0.27182817E1) = 0.27182815E1 +rem (0.27182817E1, ~0.27182817E1) = 0.0 +* (0.27182817E1, ~0.123E1) = ~0.33434865E1 ++ (0.27182817E1, ~0.123E1) = 0.14882817E1 +- (0.27182817E1, ~0.123E1) = 0.39482818E1 +/ (0.27182817E1, ~0.123E1) = ~0.2209985E1 +nextAfter (0.27182817E1, ~0.123E1) = 0.27182815E1 +rem (0.27182817E1, ~0.123E1) = 0.2582817 +* (0.27182817E1, ~0.123) = ~0.33434868 ++ (0.27182817E1, ~0.123) = 0.25952818E1 +- (0.27182817E1, ~0.123) = 0.28412817E1 +/ (0.27182817E1, ~0.123) = ~0.22099852E2 +nextAfter (0.27182817E1, ~0.123) = 0.27182815E1 +rem (0.27182817E1, ~0.123) = 0.12281671E~1 +* (0.27182817E1, ~0.123E~2) = ~0.33434867E~2 ++ (0.27182817E1, ~0.123E~2) = 0.27170517E1 +- (0.27182817E1, ~0.123E~2) = 0.27195117E1 +/ (0.27182817E1, ~0.123E~2) = ~0.2209985E4 +nextAfter (0.27182817E1, ~0.123E~2) = 0.27182815E1 +rem (0.27182817E1, ~0.123E~2) = 0.12116297E~2 +* (0.27182817E1, ~0.11754944E~37) = ~0.31953248E~37 ++ (0.27182817E1, ~0.11754944E~37) = 0.27182817E1 +- (0.27182817E1, ~0.11754944E~37) = 0.27182817E1 +/ (0.27182817E1, ~0.11754944E~37) = ~0.23124584E39 +nextAfter (0.27182817E1, ~0.11754944E~37) = 0.27182815E1 +rem (0.27182817E1, ~0.11754944E~37) = 0.0 +* (0.27182817E1, ~0.5877472E~38) = ~0.15976624E~37 ++ (0.27182817E1, ~0.5877472E~38) = 0.27182817E1 +- (0.27182817E1, ~0.5877472E~38) = 0.27182817E1 +/ (0.27182817E1, ~0.5877472E~38) = ~inf +nextAfter (0.27182817E1, ~0.5877472E~38) = 0.27182815E1 +rem (0.27182817E1, ~0.5877472E~38) = ~inf +* (0.27182817E1, ~0.1E~44) = ~0.4E~44 ++ (0.27182817E1, ~0.1E~44) = 0.27182817E1 +- (0.27182817E1, ~0.1E~44) = 0.27182817E1 +/ (0.27182817E1, ~0.1E~44) = ~inf +nextAfter (0.27182817E1, ~0.1E~44) = 0.27182815E1 +rem (0.27182817E1, ~0.1E~44) = ~inf +* (0.27182817E1, ~0.0) = ~0.0 ++ (0.27182817E1, ~0.0) = 0.27182817E1 +- (0.27182817E1, ~0.0) = 0.27182817E1 +/ (0.27182817E1, ~0.0) = ~inf +nextAfter (0.27182817E1, ~0.0) = 0.27182815E1 +rem (0.27182817E1, ~0.0) = nan +* (0.27182817E1, inf) = inf ++ (0.27182817E1, inf) = inf +- (0.27182817E1, inf) = ~inf +/ (0.27182817E1, inf) = 0.0 +nextAfter (0.27182817E1, inf) = 0.2718282E1 +rem (0.27182817E1, inf) = 0.27182817E1 +* (0.27182817E1, ~inf) = ~inf ++ (0.27182817E1, ~inf) = ~inf +- (0.27182817E1, ~inf) = inf +/ (0.27182817E1, ~inf) = ~0.0 +nextAfter (0.27182817E1, ~inf) = 0.27182815E1 +rem (0.27182817E1, ~inf) = 0.27182817E1 +* (0.27182817E1, nan) = nan ++ (0.27182817E1, nan) = nan +- (0.27182817E1, nan) = nan +/ (0.27182817E1, nan) = nan +nextAfter (0.27182817E1, nan) = nan +rem (0.27182817E1, nan) = nan +* (0.27182817E1, inf) = inf ++ (0.27182817E1, inf) = inf +- (0.27182817E1, inf) = ~inf +/ (0.27182817E1, inf) = 0.0 +nextAfter (0.27182817E1, inf) = 0.2718282E1 +rem (0.27182817E1, inf) = 0.27182817E1 +* (0.123E1, 0.34028235E39) = inf ++ (0.123E1, 0.34028235E39) = 0.34028235E39 +- (0.123E1, 0.34028235E39) = ~0.34028235E39 +/ (0.123E1, 0.34028235E39) = 0.3614645E~38 +nextAfter (0.123E1, 0.34028235E39) = 0.12300001E1 +rem (0.123E1, 0.34028235E39) = 0.123E1 +* (0.123E1, 0.17014117E39) = 0.20927364E39 ++ (0.123E1, 0.17014117E39) = 0.17014117E39 +- (0.123E1, 0.17014117E39) = ~0.17014117E39 +/ (0.123E1, 0.17014117E39) = 0.722929E~38 +nextAfter (0.123E1, 0.17014117E39) = 0.12300001E1 +rem (0.123E1, 0.17014117E39) = 0.123E1 +* (0.123E1, 0.123E4) = 0.15129E4 ++ (0.123E1, 0.123E4) = 0.123123E4 +- (0.123E1, 0.123E4) = ~0.122877E4 +/ (0.123E1, 0.123E4) = 0.1E~2 +nextAfter (0.123E1, 0.123E4) = 0.12300001E1 +rem (0.123E1, 0.123E4) = 0.123E1 +* (0.123E1, 0.123E2) = 0.15129001E2 ++ (0.123E1, 0.123E2) = 0.13530001E2 +- (0.123E1, 0.123E2) = ~0.1107E2 +/ (0.123E1, 0.123E2) = 0.1 +nextAfter (0.123E1, 0.123E2) = 0.12300001E1 +rem (0.123E1, 0.123E2) = 0.123E1 +* (0.123E1, 0.31415927E1) = 0.3864159E1 ++ (0.123E1, 0.31415927E1) = 0.43715925E1 +- (0.123E1, 0.31415927E1) = ~0.19115927E1 +/ (0.123E1, 0.31415927E1) = 0.39152116 +nextAfter (0.123E1, 0.31415927E1) = 0.12300001E1 +rem (0.123E1, 0.31415927E1) = 0.123E1 +* (0.123E1, 0.27182817E1) = 0.33434865E1 ++ (0.123E1, 0.27182817E1) = 0.39482818E1 +- (0.123E1, 0.27182817E1) = ~0.14882817E1 +/ (0.123E1, 0.27182817E1) = 0.45249173 +nextAfter (0.123E1, 0.27182817E1) = 0.12300001E1 +rem (0.123E1, 0.27182817E1) = 0.123E1 +* (0.123E1, 0.123E1) = 0.15129E1 ++ (0.123E1, 0.123E1) = 0.246E1 +- (0.123E1, 0.123E1) = 0.0 +/ (0.123E1, 0.123E1) = 0.1E1 +nextAfter (0.123E1, 0.123E1) = 0.123E1 +rem (0.123E1, 0.123E1) = 0.0 +* (0.123E1, 0.123) = 0.15129 ++ (0.123E1, 0.123) = 0.1353E1 +- (0.123E1, 0.123) = 0.1107E1 +/ (0.123E1, 0.123) = 0.1E2 +nextAfter (0.123E1, 0.123) = 0.12299999E1 +rem (0.123E1, 0.123) = ~0.14901161E~7 +* (0.123E1, 0.123E~2) = 0.15129001E~2 ++ (0.123E1, 0.123E~2) = 0.123123E1 +- (0.123E1, 0.123E~2) = 0.122877E1 +/ (0.123E1, 0.123E~2) = 0.1E4 +nextAfter (0.123E1, 0.123E~2) = 0.12299999E1 +rem (0.123E1, 0.123E~2) = ~0.33527613E~7 +* (0.123E1, 0.11754944E~37) = 0.14458581E~37 ++ (0.123E1, 0.11754944E~37) = 0.123E1 +- (0.123E1, 0.11754944E~37) = 0.123E1 +/ (0.123E1, 0.11754944E~37) = 0.10463683E39 +nextAfter (0.123E1, 0.11754944E~37) = 0.12299999E1 +rem (0.123E1, 0.11754944E~37) = 0.0 +* (0.123E1, 0.5877472E~38) = 0.722929E~38 ++ (0.123E1, 0.5877472E~38) = 0.123E1 +- (0.123E1, 0.5877472E~38) = 0.123E1 +/ (0.123E1, 0.5877472E~38) = 0.20927366E39 +nextAfter (0.123E1, 0.5877472E~38) = 0.12299999E1 +rem (0.123E1, 0.5877472E~38) = 0.0 +* (0.123E1, 0.1E~44) = 0.1E~44 ++ (0.123E1, 0.1E~44) = 0.123E1 +- (0.123E1, 0.1E~44) = 0.123E1 +/ (0.123E1, 0.1E~44) = inf +nextAfter (0.123E1, 0.1E~44) = 0.12299999E1 +rem (0.123E1, 0.1E~44) = ~inf +* (0.123E1, 0.0) = 0.0 ++ (0.123E1, 0.0) = 0.123E1 +- (0.123E1, 0.0) = 0.123E1 +/ (0.123E1, 0.0) = inf +nextAfter (0.123E1, 0.0) = 0.12299999E1 +rem (0.123E1, 0.0) = nan +* (0.123E1, ~0.34028235E39) = ~inf ++ (0.123E1, ~0.34028235E39) = ~0.34028235E39 +- (0.123E1, ~0.34028235E39) = 0.34028235E39 +/ (0.123E1, ~0.34028235E39) = ~0.3614645E~38 +nextAfter (0.123E1, ~0.34028235E39) = 0.12299999E1 +rem (0.123E1, ~0.34028235E39) = 0.123E1 +* (0.123E1, ~0.17014117E39) = ~0.20927364E39 ++ (0.123E1, ~0.17014117E39) = ~0.17014117E39 +- (0.123E1, ~0.17014117E39) = 0.17014117E39 +/ (0.123E1, ~0.17014117E39) = ~0.722929E~38 +nextAfter (0.123E1, ~0.17014117E39) = 0.12299999E1 +rem (0.123E1, ~0.17014117E39) = 0.123E1 +* (0.123E1, ~0.123E4) = ~0.15129E4 ++ (0.123E1, ~0.123E4) = ~0.122877E4 +- (0.123E1, ~0.123E4) = 0.123123E4 +/ (0.123E1, ~0.123E4) = ~0.1E~2 +nextAfter (0.123E1, ~0.123E4) = 0.12299999E1 +rem (0.123E1, ~0.123E4) = 0.123E1 +* (0.123E1, ~0.123E2) = ~0.15129001E2 ++ (0.123E1, ~0.123E2) = ~0.1107E2 +- (0.123E1, ~0.123E2) = 0.13530001E2 +/ (0.123E1, ~0.123E2) = ~0.1 +nextAfter (0.123E1, ~0.123E2) = 0.12299999E1 +rem (0.123E1, ~0.123E2) = 0.123E1 +* (0.123E1, ~0.31415927E1) = ~0.3864159E1 ++ (0.123E1, ~0.31415927E1) = ~0.19115927E1 +- (0.123E1, ~0.31415927E1) = 0.43715925E1 +/ (0.123E1, ~0.31415927E1) = ~0.39152116 +nextAfter (0.123E1, ~0.31415927E1) = 0.12299999E1 +rem (0.123E1, ~0.31415927E1) = 0.123E1 +* (0.123E1, ~0.27182817E1) = ~0.33434865E1 ++ (0.123E1, ~0.27182817E1) = ~0.14882817E1 +- (0.123E1, ~0.27182817E1) = 0.39482818E1 +/ (0.123E1, ~0.27182817E1) = ~0.45249173 +nextAfter (0.123E1, ~0.27182817E1) = 0.12299999E1 +rem (0.123E1, ~0.27182817E1) = 0.123E1 +* (0.123E1, ~0.123E1) = ~0.15129E1 ++ (0.123E1, ~0.123E1) = 0.0 +- (0.123E1, ~0.123E1) = 0.246E1 +/ (0.123E1, ~0.123E1) = ~0.1E1 +nextAfter (0.123E1, ~0.123E1) = 0.12299999E1 +rem (0.123E1, ~0.123E1) = 0.0 +* (0.123E1, ~0.123) = ~0.15129 ++ (0.123E1, ~0.123) = 0.1107E1 +- (0.123E1, ~0.123) = 0.1353E1 +/ (0.123E1, ~0.123) = ~0.1E2 +nextAfter (0.123E1, ~0.123) = 0.12299999E1 +rem (0.123E1, ~0.123) = ~0.14901161E~7 +* (0.123E1, ~0.123E~2) = ~0.15129001E~2 ++ (0.123E1, ~0.123E~2) = 0.122877E1 +- (0.123E1, ~0.123E~2) = 0.123123E1 +/ (0.123E1, ~0.123E~2) = ~0.1E4 +nextAfter (0.123E1, ~0.123E~2) = 0.12299999E1 +rem (0.123E1, ~0.123E~2) = ~0.33527613E~7 +* (0.123E1, ~0.11754944E~37) = ~0.14458581E~37 ++ (0.123E1, ~0.11754944E~37) = 0.123E1 +- (0.123E1, ~0.11754944E~37) = 0.123E1 +/ (0.123E1, ~0.11754944E~37) = ~0.10463683E39 +nextAfter (0.123E1, ~0.11754944E~37) = 0.12299999E1 +rem (0.123E1, ~0.11754944E~37) = 0.0 +* (0.123E1, ~0.5877472E~38) = ~0.722929E~38 ++ (0.123E1, ~0.5877472E~38) = 0.123E1 +- (0.123E1, ~0.5877472E~38) = 0.123E1 +/ (0.123E1, ~0.5877472E~38) = ~0.20927366E39 +nextAfter (0.123E1, ~0.5877472E~38) = 0.12299999E1 +rem (0.123E1, ~0.5877472E~38) = 0.0 +* (0.123E1, ~0.1E~44) = ~0.1E~44 ++ (0.123E1, ~0.1E~44) = 0.123E1 +- (0.123E1, ~0.1E~44) = 0.123E1 +/ (0.123E1, ~0.1E~44) = ~inf +nextAfter (0.123E1, ~0.1E~44) = 0.12299999E1 +rem (0.123E1, ~0.1E~44) = ~inf +* (0.123E1, ~0.0) = ~0.0 ++ (0.123E1, ~0.0) = 0.123E1 +- (0.123E1, ~0.0) = 0.123E1 +/ (0.123E1, ~0.0) = ~inf +nextAfter (0.123E1, ~0.0) = 0.12299999E1 +rem (0.123E1, ~0.0) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300001E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123E1, ~inf) = ~inf ++ (0.123E1, ~inf) = ~inf +- (0.123E1, ~inf) = inf +/ (0.123E1, ~inf) = ~0.0 +nextAfter (0.123E1, ~inf) = 0.12299999E1 +rem (0.123E1, ~inf) = 0.123E1 +* (0.123E1, nan) = nan ++ (0.123E1, nan) = nan +- (0.123E1, nan) = nan +/ (0.123E1, nan) = nan +nextAfter (0.123E1, nan) = nan +rem (0.123E1, nan) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300001E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123, 0.34028235E39) = 0.4185473E38 ++ (0.123, 0.34028235E39) = 0.34028235E39 +- (0.123, 0.34028235E39) = ~0.34028235E39 +/ (0.123, 0.34028235E39) = 0.361465E~39 +nextAfter (0.123, 0.34028235E39) = 0.12300001 +rem (0.123, 0.34028235E39) = 0.123 +* (0.123, 0.17014117E39) = 0.20927365E38 ++ (0.123, 0.17014117E39) = 0.17014117E39 +- (0.123, 0.17014117E39) = ~0.17014117E39 +/ (0.123, 0.17014117E39) = 0.722928E~39 +nextAfter (0.123, 0.17014117E39) = 0.12300001 +rem (0.123, 0.17014117E39) = 0.123 +* (0.123, 0.123E4) = 0.15129001E3 ++ (0.123, 0.123E4) = 0.1230123E4 +- (0.123, 0.123E4) = ~0.1229877E4 +/ (0.123, 0.123E4) = 0.100000005E~3 +nextAfter (0.123, 0.123E4) = 0.12300001 +rem (0.123, 0.123E4) = 0.123 +* (0.123, 0.123E2) = 0.15129001E1 ++ (0.123, 0.123E2) = 0.12423E2 +- (0.123, 0.123E2) = ~0.12177E2 +/ (0.123, 0.123E2) = 0.1E~1 +nextAfter (0.123, 0.123E2) = 0.12300001 +rem (0.123, 0.123E2) = 0.123 +* (0.123, 0.31415927E1) = 0.38641593 ++ (0.123, 0.31415927E1) = 0.32645926E1 +- (0.123, 0.31415927E1) = ~0.30185928E1 +/ (0.123, 0.31415927E1) = 0.39152116E~1 +nextAfter (0.123, 0.31415927E1) = 0.12300001 +rem (0.123, 0.31415927E1) = 0.123 +* (0.123, 0.27182817E1) = 0.33434868 ++ (0.123, 0.27182817E1) = 0.28412817E1 +- (0.123, 0.27182817E1) = ~0.25952818E1 +/ (0.123, 0.27182817E1) = 0.45249175E~1 +nextAfter (0.123, 0.27182817E1) = 0.12300001 +rem (0.123, 0.27182817E1) = 0.123 +* (0.123, 0.123E1) = 0.15129 ++ (0.123, 0.123E1) = 0.1353E1 +- (0.123, 0.123E1) = ~0.1107E1 +/ (0.123, 0.123E1) = 0.1 +nextAfter (0.123, 0.123E1) = 0.12300001 +rem (0.123, 0.123E1) = 0.123 +* (0.123, 0.123) = 0.15129001E~1 ++ (0.123, 0.123) = 0.246 +- (0.123, 0.123) = 0.0 +/ (0.123, 0.123) = 0.1E1 +nextAfter (0.123, 0.123) = 0.123 +rem (0.123, 0.123) = 0.0 +* (0.123, 0.123E~2) = 0.15129E~3 ++ (0.123, 0.123E~2) = 0.124230005 +- (0.123, 0.123E~2) = 0.12177 +/ (0.123, 0.123E~2) = 0.1E3 +nextAfter (0.123, 0.123E~2) = 0.122999996 +rem (0.123, 0.123E~2) = ~0.18626451E~8 +* (0.123, 0.11754944E~37) = 0.1445858E~38 ++ (0.123, 0.11754944E~37) = 0.123 +- (0.123, 0.11754944E~37) = 0.123 +/ (0.123, 0.11754944E~37) = 0.10463683E38 +nextAfter (0.123, 0.11754944E~37) = 0.122999996 +rem (0.123, 0.11754944E~37) = 0.0 +* (0.123, 0.5877472E~38) = 0.722928E~39 ++ (0.123, 0.5877472E~38) = 0.123 +- (0.123, 0.5877472E~38) = 0.123 +/ (0.123, 0.5877472E~38) = 0.20927366E38 +nextAfter (0.123, 0.5877472E~38) = 0.122999996 +rem (0.123, 0.5877472E~38) = 0.0 +* (0.123, 0.1E~44) = 0.0 ++ (0.123, 0.1E~44) = 0.123 +- (0.123, 0.1E~44) = 0.123 +/ (0.123, 0.1E~44) = inf +nextAfter (0.123, 0.1E~44) = 0.122999996 +rem (0.123, 0.1E~44) = ~inf +* (0.123, 0.0) = 0.0 ++ (0.123, 0.0) = 0.123 +- (0.123, 0.0) = 0.123 +/ (0.123, 0.0) = inf +nextAfter (0.123, 0.0) = 0.122999996 +rem (0.123, 0.0) = nan +* (0.123, ~0.34028235E39) = ~0.4185473E38 ++ (0.123, ~0.34028235E39) = ~0.34028235E39 +- (0.123, ~0.34028235E39) = 0.34028235E39 +/ (0.123, ~0.34028235E39) = ~0.361465E~39 +nextAfter (0.123, ~0.34028235E39) = 0.122999996 +rem (0.123, ~0.34028235E39) = 0.123 +* (0.123, ~0.17014117E39) = ~0.20927365E38 ++ (0.123, ~0.17014117E39) = ~0.17014117E39 +- (0.123, ~0.17014117E39) = 0.17014117E39 +/ (0.123, ~0.17014117E39) = ~0.722928E~39 +nextAfter (0.123, ~0.17014117E39) = 0.122999996 +rem (0.123, ~0.17014117E39) = 0.123 +* (0.123, ~0.123E4) = ~0.15129001E3 ++ (0.123, ~0.123E4) = ~0.1229877E4 +- (0.123, ~0.123E4) = 0.1230123E4 +/ (0.123, ~0.123E4) = ~0.100000005E~3 +nextAfter (0.123, ~0.123E4) = 0.122999996 +rem (0.123, ~0.123E4) = 0.123 +* (0.123, ~0.123E2) = ~0.15129001E1 ++ (0.123, ~0.123E2) = ~0.12177E2 +- (0.123, ~0.123E2) = 0.12423E2 +/ (0.123, ~0.123E2) = ~0.1E~1 +nextAfter (0.123, ~0.123E2) = 0.122999996 +rem (0.123, ~0.123E2) = 0.123 +* (0.123, ~0.31415927E1) = ~0.38641593 ++ (0.123, ~0.31415927E1) = ~0.30185928E1 +- (0.123, ~0.31415927E1) = 0.32645926E1 +/ (0.123, ~0.31415927E1) = ~0.39152116E~1 +nextAfter (0.123, ~0.31415927E1) = 0.122999996 +rem (0.123, ~0.31415927E1) = 0.123 +* (0.123, ~0.27182817E1) = ~0.33434868 ++ (0.123, ~0.27182817E1) = ~0.25952818E1 +- (0.123, ~0.27182817E1) = 0.28412817E1 +/ (0.123, ~0.27182817E1) = ~0.45249175E~1 +nextAfter (0.123, ~0.27182817E1) = 0.122999996 +rem (0.123, ~0.27182817E1) = 0.123 +* (0.123, ~0.123E1) = ~0.15129 ++ (0.123, ~0.123E1) = ~0.1107E1 +- (0.123, ~0.123E1) = 0.1353E1 +/ (0.123, ~0.123E1) = ~0.1 +nextAfter (0.123, ~0.123E1) = 0.122999996 +rem (0.123, ~0.123E1) = 0.123 +* (0.123, ~0.123) = ~0.15129001E~1 ++ (0.123, ~0.123) = 0.0 +- (0.123, ~0.123) = 0.246 +/ (0.123, ~0.123) = ~0.1E1 +nextAfter (0.123, ~0.123) = 0.122999996 +rem (0.123, ~0.123) = 0.0 +* (0.123, ~0.123E~2) = ~0.15129E~3 ++ (0.123, ~0.123E~2) = 0.12177 +- (0.123, ~0.123E~2) = 0.124230005 +/ (0.123, ~0.123E~2) = ~0.1E3 +nextAfter (0.123, ~0.123E~2) = 0.122999996 +rem (0.123, ~0.123E~2) = ~0.18626451E~8 +* (0.123, ~0.11754944E~37) = ~0.1445858E~38 ++ (0.123, ~0.11754944E~37) = 0.123 +- (0.123, ~0.11754944E~37) = 0.123 +/ (0.123, ~0.11754944E~37) = ~0.10463683E38 +nextAfter (0.123, ~0.11754944E~37) = 0.122999996 +rem (0.123, ~0.11754944E~37) = 0.0 +* (0.123, ~0.5877472E~38) = ~0.722928E~39 ++ (0.123, ~0.5877472E~38) = 0.123 +- (0.123, ~0.5877472E~38) = 0.123 +/ (0.123, ~0.5877472E~38) = ~0.20927366E38 +nextAfter (0.123, ~0.5877472E~38) = 0.122999996 +rem (0.123, ~0.5877472E~38) = 0.0 +* (0.123, ~0.1E~44) = ~0.0 ++ (0.123, ~0.1E~44) = 0.123 +- (0.123, ~0.1E~44) = 0.123 +/ (0.123, ~0.1E~44) = ~inf +nextAfter (0.123, ~0.1E~44) = 0.122999996 +rem (0.123, ~0.1E~44) = ~inf +* (0.123, ~0.0) = ~0.0 ++ (0.123, ~0.0) = 0.123 +- (0.123, ~0.0) = 0.123 +/ (0.123, ~0.0) = ~inf +nextAfter (0.123, ~0.0) = 0.122999996 +rem (0.123, ~0.0) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300001 +rem (0.123, inf) = 0.123 +* (0.123, ~inf) = ~inf ++ (0.123, ~inf) = ~inf +- (0.123, ~inf) = inf +/ (0.123, ~inf) = ~0.0 +nextAfter (0.123, ~inf) = 0.122999996 +rem (0.123, ~inf) = 0.123 +* (0.123, nan) = nan ++ (0.123, nan) = nan +- (0.123, nan) = nan +/ (0.123, nan) = nan +nextAfter (0.123, nan) = nan +rem (0.123, nan) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300001 +rem (0.123, inf) = 0.123 +* (0.123E~2, 0.34028235E39) = 0.4185473E36 ++ (0.123E~2, 0.34028235E39) = 0.34028235E39 +- (0.123E~2, 0.34028235E39) = ~0.34028235E39 +/ (0.123E~2, 0.34028235E39) = 0.3614E~41 +nextAfter (0.123E~2, 0.34028235E39) = 0.12300002E~2 +rem (0.123E~2, 0.34028235E39) = 0.123E~2 +* (0.123E~2, 0.17014117E39) = 0.20927364E36 ++ (0.123E~2, 0.17014117E39) = 0.17014117E39 +- (0.123E~2, 0.17014117E39) = ~0.17014117E39 +/ (0.123E~2, 0.17014117E39) = 0.7229E~41 +nextAfter (0.123E~2, 0.17014117E39) = 0.12300002E~2 +rem (0.123E~2, 0.17014117E39) = 0.123E~2 +* (0.123E~2, 0.123E4) = 0.15129001E1 ++ (0.123E~2, 0.123E4) = 0.12300012E4 +- (0.123E~2, 0.123E4) = ~0.12299988E4 +/ (0.123E~2, 0.123E4) = 0.1E~5 +nextAfter (0.123E~2, 0.123E4) = 0.12300002E~2 +rem (0.123E~2, 0.123E4) = 0.123E~2 +* (0.123E~2, 0.123E2) = 0.15129001E~1 ++ (0.123E~2, 0.123E2) = 0.1230123E2 +- (0.123E~2, 0.123E2) = ~0.1229877E2 +/ (0.123E~2, 0.123E2) = 0.100000005E~3 +nextAfter (0.123E~2, 0.123E2) = 0.12300002E~2 +rem (0.123E~2, 0.123E2) = 0.123E~2 +* (0.123E~2, 0.31415927E1) = 0.38641593E~2 ++ (0.123E~2, 0.31415927E1) = 0.31428227E1 +- (0.123E~2, 0.31415927E1) = ~0.31403627E1 +/ (0.123E~2, 0.31415927E1) = 0.39152117E~3 +nextAfter (0.123E~2, 0.31415927E1) = 0.12300002E~2 +rem (0.123E~2, 0.31415927E1) = 0.123E~2 +* (0.123E~2, 0.27182817E1) = 0.33434867E~2 ++ (0.123E~2, 0.27182817E1) = 0.27195117E1 +- (0.123E~2, 0.27182817E1) = ~0.27170517E1 +/ (0.123E~2, 0.27182817E1) = 0.45249175E~3 +nextAfter (0.123E~2, 0.27182817E1) = 0.12300002E~2 +rem (0.123E~2, 0.27182817E1) = 0.123E~2 +* (0.123E~2, 0.123E1) = 0.15129001E~2 ++ (0.123E~2, 0.123E1) = 0.123123E1 +- (0.123E~2, 0.123E1) = ~0.122877E1 +/ (0.123E~2, 0.123E1) = 0.1E~2 +nextAfter (0.123E~2, 0.123E1) = 0.12300002E~2 +rem (0.123E~2, 0.123E1) = 0.123E~2 +* (0.123E~2, 0.123) = 0.15129E~3 ++ (0.123E~2, 0.123) = 0.124230005 +- (0.123E~2, 0.123) = ~0.12177 +/ (0.123E~2, 0.123) = 0.1E~1 +nextAfter (0.123E~2, 0.123) = 0.12300002E~2 +rem (0.123E~2, 0.123) = 0.123E~2 +* (0.123E~2, 0.123E~2) = 0.15129001E~5 ++ (0.123E~2, 0.123E~2) = 0.246E~2 +- (0.123E~2, 0.123E~2) = 0.0 +/ (0.123E~2, 0.123E~2) = 0.1E1 +nextAfter (0.123E~2, 0.123E~2) = 0.123E~2 +rem (0.123E~2, 0.123E~2) = 0.0 +* (0.123E~2, 0.11754944E~37) = 0.14459E~40 ++ (0.123E~2, 0.11754944E~37) = 0.123E~2 +- (0.123E~2, 0.11754944E~37) = 0.123E~2 +/ (0.123E~2, 0.11754944E~37) = 0.10463683E36 +nextAfter (0.123E~2, 0.11754944E~37) = 0.12299999E~2 +rem (0.123E~2, 0.11754944E~37) = 0.0 +* (0.123E~2, 0.5877472E~38) = 0.7229E~41 ++ (0.123E~2, 0.5877472E~38) = 0.123E~2 +- (0.123E~2, 0.5877472E~38) = 0.123E~2 +/ (0.123E~2, 0.5877472E~38) = 0.20927366E36 +nextAfter (0.123E~2, 0.5877472E~38) = 0.12299999E~2 +rem (0.123E~2, 0.5877472E~38) = 0.0 +* (0.123E~2, 0.1E~44) = 0.0 ++ (0.123E~2, 0.1E~44) = 0.123E~2 +- (0.123E~2, 0.1E~44) = 0.123E~2 +/ (0.123E~2, 0.1E~44) = inf +nextAfter (0.123E~2, 0.1E~44) = 0.12299999E~2 +rem (0.123E~2, 0.1E~44) = ~inf +* (0.123E~2, 0.0) = 0.0 ++ (0.123E~2, 0.0) = 0.123E~2 +- (0.123E~2, 0.0) = 0.123E~2 +/ (0.123E~2, 0.0) = inf +nextAfter (0.123E~2, 0.0) = 0.12299999E~2 +rem (0.123E~2, 0.0) = nan +* (0.123E~2, ~0.34028235E39) = ~0.4185473E36 ++ (0.123E~2, ~0.34028235E39) = ~0.34028235E39 +- (0.123E~2, ~0.34028235E39) = 0.34028235E39 +/ (0.123E~2, ~0.34028235E39) = ~0.3614E~41 +nextAfter (0.123E~2, ~0.34028235E39) = 0.12299999E~2 +rem (0.123E~2, ~0.34028235E39) = 0.123E~2 +* (0.123E~2, ~0.17014117E39) = ~0.20927364E36 ++ (0.123E~2, ~0.17014117E39) = ~0.17014117E39 +- (0.123E~2, ~0.17014117E39) = 0.17014117E39 +/ (0.123E~2, ~0.17014117E39) = ~0.7229E~41 +nextAfter (0.123E~2, ~0.17014117E39) = 0.12299999E~2 +rem (0.123E~2, ~0.17014117E39) = 0.123E~2 +* (0.123E~2, ~0.123E4) = ~0.15129001E1 ++ (0.123E~2, ~0.123E4) = ~0.12299988E4 +- (0.123E~2, ~0.123E4) = 0.12300012E4 +/ (0.123E~2, ~0.123E4) = ~0.1E~5 +nextAfter (0.123E~2, ~0.123E4) = 0.12299999E~2 +rem (0.123E~2, ~0.123E4) = 0.123E~2 +* (0.123E~2, ~0.123E2) = ~0.15129001E~1 ++ (0.123E~2, ~0.123E2) = ~0.1229877E2 +- (0.123E~2, ~0.123E2) = 0.1230123E2 +/ (0.123E~2, ~0.123E2) = ~0.100000005E~3 +nextAfter (0.123E~2, ~0.123E2) = 0.12299999E~2 +rem (0.123E~2, ~0.123E2) = 0.123E~2 +* (0.123E~2, ~0.31415927E1) = ~0.38641593E~2 ++ (0.123E~2, ~0.31415927E1) = ~0.31403627E1 +- (0.123E~2, ~0.31415927E1) = 0.31428227E1 +/ (0.123E~2, ~0.31415927E1) = ~0.39152117E~3 +nextAfter (0.123E~2, ~0.31415927E1) = 0.12299999E~2 +rem (0.123E~2, ~0.31415927E1) = 0.123E~2 +* (0.123E~2, ~0.27182817E1) = ~0.33434867E~2 ++ (0.123E~2, ~0.27182817E1) = ~0.27170517E1 +- (0.123E~2, ~0.27182817E1) = 0.27195117E1 +/ (0.123E~2, ~0.27182817E1) = ~0.45249175E~3 +nextAfter (0.123E~2, ~0.27182817E1) = 0.12299999E~2 +rem (0.123E~2, ~0.27182817E1) = 0.123E~2 +* (0.123E~2, ~0.123E1) = ~0.15129001E~2 ++ (0.123E~2, ~0.123E1) = ~0.122877E1 +- (0.123E~2, ~0.123E1) = 0.123123E1 +/ (0.123E~2, ~0.123E1) = ~0.1E~2 +nextAfter (0.123E~2, ~0.123E1) = 0.12299999E~2 +rem (0.123E~2, ~0.123E1) = 0.123E~2 +* (0.123E~2, ~0.123) = ~0.15129E~3 ++ (0.123E~2, ~0.123) = ~0.12177 +- (0.123E~2, ~0.123) = 0.124230005 +/ (0.123E~2, ~0.123) = ~0.1E~1 +nextAfter (0.123E~2, ~0.123) = 0.12299999E~2 +rem (0.123E~2, ~0.123) = 0.123E~2 +* (0.123E~2, ~0.123E~2) = ~0.15129001E~5 ++ (0.123E~2, ~0.123E~2) = 0.0 +- (0.123E~2, ~0.123E~2) = 0.246E~2 +/ (0.123E~2, ~0.123E~2) = ~0.1E1 +nextAfter (0.123E~2, ~0.123E~2) = 0.12299999E~2 +rem (0.123E~2, ~0.123E~2) = 0.0 +* (0.123E~2, ~0.11754944E~37) = ~0.14459E~40 ++ (0.123E~2, ~0.11754944E~37) = 0.123E~2 +- (0.123E~2, ~0.11754944E~37) = 0.123E~2 +/ (0.123E~2, ~0.11754944E~37) = ~0.10463683E36 +nextAfter (0.123E~2, ~0.11754944E~37) = 0.12299999E~2 +rem (0.123E~2, ~0.11754944E~37) = 0.0 +* (0.123E~2, ~0.5877472E~38) = ~0.7229E~41 ++ (0.123E~2, ~0.5877472E~38) = 0.123E~2 +- (0.123E~2, ~0.5877472E~38) = 0.123E~2 +/ (0.123E~2, ~0.5877472E~38) = ~0.20927366E36 +nextAfter (0.123E~2, ~0.5877472E~38) = 0.12299999E~2 +rem (0.123E~2, ~0.5877472E~38) = 0.0 +* (0.123E~2, ~0.1E~44) = ~0.0 ++ (0.123E~2, ~0.1E~44) = 0.123E~2 +- (0.123E~2, ~0.1E~44) = 0.123E~2 +/ (0.123E~2, ~0.1E~44) = ~inf +nextAfter (0.123E~2, ~0.1E~44) = 0.12299999E~2 +rem (0.123E~2, ~0.1E~44) = ~inf +* (0.123E~2, ~0.0) = ~0.0 ++ (0.123E~2, ~0.0) = 0.123E~2 +- (0.123E~2, ~0.0) = 0.123E~2 +/ (0.123E~2, ~0.0) = ~inf +nextAfter (0.123E~2, ~0.0) = 0.12299999E~2 +rem (0.123E~2, ~0.0) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.123E~2, ~inf) = ~inf ++ (0.123E~2, ~inf) = ~inf +- (0.123E~2, ~inf) = inf +/ (0.123E~2, ~inf) = ~0.0 +nextAfter (0.123E~2, ~inf) = 0.12299999E~2 +rem (0.123E~2, ~inf) = 0.123E~2 +* (0.123E~2, nan) = nan ++ (0.123E~2, nan) = nan +- (0.123E~2, nan) = nan +/ (0.123E~2, nan) = nan +nextAfter (0.123E~2, nan) = nan +rem (0.123E~2, nan) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.11754944E~37, 0.34028235E39) = 0.39999998E1 ++ (0.11754944E~37, 0.34028235E39) = 0.34028235E39 +- (0.11754944E~37, 0.34028235E39) = ~0.34028235E39 +/ (0.11754944E~37, 0.34028235E39) = 0.0 +nextAfter (0.11754944E~37, 0.34028235E39) = 0.11754945E~37 +rem (0.11754944E~37, 0.34028235E39) = 0.11754944E~37 +* (0.11754944E~37, 0.17014117E39) = 0.19999999E1 ++ (0.11754944E~37, 0.17014117E39) = 0.17014117E39 +- (0.11754944E~37, 0.17014117E39) = ~0.17014117E39 +/ (0.11754944E~37, 0.17014117E39) = 0.0 +nextAfter (0.11754944E~37, 0.17014117E39) = 0.11754945E~37 +rem (0.11754944E~37, 0.17014117E39) = 0.11754944E~37 +* (0.11754944E~37, 0.123E4) = 0.1445858E~34 ++ (0.11754944E~37, 0.123E4) = 0.123E4 +- (0.11754944E~37, 0.123E4) = ~0.123E4 +/ (0.11754944E~37, 0.123E4) = 0.9557E~41 +nextAfter (0.11754944E~37, 0.123E4) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E4) = 0.11754944E~37 +* (0.11754944E~37, 0.123E2) = 0.14458581E~36 ++ (0.11754944E~37, 0.123E2) = 0.123E2 +- (0.11754944E~37, 0.123E2) = ~0.123E2 +/ (0.11754944E~37, 0.123E2) = 0.955687E~39 +nextAfter (0.11754944E~37, 0.123E2) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E2) = 0.11754944E~37 +* (0.11754944E~37, 0.31415927E1) = 0.36929245E~37 ++ (0.11754944E~37, 0.31415927E1) = 0.31415927E1 +- (0.11754944E~37, 0.31415927E1) = ~0.31415927E1 +/ (0.11754944E~37, 0.31415927E1) = 0.3741715E~38 +nextAfter (0.11754944E~37, 0.31415927E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.31415927E1) = 0.11754944E~37 +* (0.11754944E~37, 0.27182817E1) = 0.31953248E~37 ++ (0.11754944E~37, 0.27182817E1) = 0.27182817E1 +- (0.11754944E~37, 0.27182817E1) = ~0.27182817E1 +/ (0.11754944E~37, 0.27182817E1) = 0.4324403E~38 +nextAfter (0.11754944E~37, 0.27182817E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.27182817E1) = 0.11754944E~37 +* (0.11754944E~37, 0.123E1) = 0.14458581E~37 ++ (0.11754944E~37, 0.123E1) = 0.123E1 +- (0.11754944E~37, 0.123E1) = ~0.123E1 +/ (0.11754944E~37, 0.123E1) = 0.9556864E~38 +nextAfter (0.11754944E~37, 0.123E1) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E1) = 0.11754944E~37 +* (0.11754944E~37, 0.123) = 0.1445858E~38 ++ (0.11754944E~37, 0.123) = 0.123 +- (0.11754944E~37, 0.123) = ~0.123 +/ (0.11754944E~37, 0.123) = 0.9556864E~37 +nextAfter (0.11754944E~37, 0.123) = 0.11754945E~37 +rem (0.11754944E~37, 0.123) = 0.11754944E~37 +* (0.11754944E~37, 0.123E~2) = 0.14459E~40 ++ (0.11754944E~37, 0.123E~2) = 0.123E~2 +- (0.11754944E~37, 0.123E~2) = ~0.123E~2 +/ (0.11754944E~37, 0.123E~2) = 0.95568645E~35 +nextAfter (0.11754944E~37, 0.123E~2) = 0.11754945E~37 +rem (0.11754944E~37, 0.123E~2) = 0.11754944E~37 +* (0.11754944E~37, 0.11754944E~37) = 0.0 ++ (0.11754944E~37, 0.11754944E~37) = 0.23509887E~37 +- (0.11754944E~37, 0.11754944E~37) = 0.0 +/ (0.11754944E~37, 0.11754944E~37) = 0.1E1 +nextAfter (0.11754944E~37, 0.11754944E~37) = 0.11754944E~37 +rem (0.11754944E~37, 0.11754944E~37) = 0.0 +* (0.11754944E~37, 0.5877472E~38) = 0.0 ++ (0.11754944E~37, 0.5877472E~38) = 0.17632415E~37 +- (0.11754944E~37, 0.5877472E~38) = 0.5877472E~38 +/ (0.11754944E~37, 0.5877472E~38) = 0.2E1 +nextAfter (0.11754944E~37, 0.5877472E~38) = 0.11754942E~37 +rem (0.11754944E~37, 0.5877472E~38) = 0.0 +* (0.11754944E~37, 0.1E~44) = 0.0 ++ (0.11754944E~37, 0.1E~44) = 0.11754945E~37 +- (0.11754944E~37, 0.1E~44) = 0.11754942E~37 +/ (0.11754944E~37, 0.1E~44) = 0.8388608E7 +nextAfter (0.11754944E~37, 0.1E~44) = 0.11754942E~37 +rem (0.11754944E~37, 0.1E~44) = 0.0 +* (0.11754944E~37, 0.0) = 0.0 ++ (0.11754944E~37, 0.0) = 0.11754944E~37 +- (0.11754944E~37, 0.0) = 0.11754944E~37 +/ (0.11754944E~37, 0.0) = inf +nextAfter (0.11754944E~37, 0.0) = 0.11754942E~37 +rem (0.11754944E~37, 0.0) = nan +* (0.11754944E~37, ~0.34028235E39) = ~0.39999998E1 ++ (0.11754944E~37, ~0.34028235E39) = ~0.34028235E39 +- (0.11754944E~37, ~0.34028235E39) = 0.34028235E39 +/ (0.11754944E~37, ~0.34028235E39) = ~0.0 +nextAfter (0.11754944E~37, ~0.34028235E39) = 0.11754942E~37 +rem (0.11754944E~37, ~0.34028235E39) = 0.11754944E~37 +* (0.11754944E~37, ~0.17014117E39) = ~0.19999999E1 ++ (0.11754944E~37, ~0.17014117E39) = ~0.17014117E39 +- (0.11754944E~37, ~0.17014117E39) = 0.17014117E39 +/ (0.11754944E~37, ~0.17014117E39) = ~0.0 +nextAfter (0.11754944E~37, ~0.17014117E39) = 0.11754942E~37 +rem (0.11754944E~37, ~0.17014117E39) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E4) = ~0.1445858E~34 ++ (0.11754944E~37, ~0.123E4) = ~0.123E4 +- (0.11754944E~37, ~0.123E4) = 0.123E4 +/ (0.11754944E~37, ~0.123E4) = ~0.9557E~41 +nextAfter (0.11754944E~37, ~0.123E4) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E4) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E2) = ~0.14458581E~36 ++ (0.11754944E~37, ~0.123E2) = ~0.123E2 +- (0.11754944E~37, ~0.123E2) = 0.123E2 +/ (0.11754944E~37, ~0.123E2) = ~0.955687E~39 +nextAfter (0.11754944E~37, ~0.123E2) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E2) = 0.11754944E~37 +* (0.11754944E~37, ~0.31415927E1) = ~0.36929245E~37 ++ (0.11754944E~37, ~0.31415927E1) = ~0.31415927E1 +- (0.11754944E~37, ~0.31415927E1) = 0.31415927E1 +/ (0.11754944E~37, ~0.31415927E1) = ~0.3741715E~38 +nextAfter (0.11754944E~37, ~0.31415927E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.31415927E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.27182817E1) = ~0.31953248E~37 ++ (0.11754944E~37, ~0.27182817E1) = ~0.27182817E1 +- (0.11754944E~37, ~0.27182817E1) = 0.27182817E1 +/ (0.11754944E~37, ~0.27182817E1) = ~0.4324403E~38 +nextAfter (0.11754944E~37, ~0.27182817E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.27182817E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E1) = ~0.14458581E~37 ++ (0.11754944E~37, ~0.123E1) = ~0.123E1 +- (0.11754944E~37, ~0.123E1) = 0.123E1 +/ (0.11754944E~37, ~0.123E1) = ~0.9556864E~38 +nextAfter (0.11754944E~37, ~0.123E1) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E1) = 0.11754944E~37 +* (0.11754944E~37, ~0.123) = ~0.1445858E~38 ++ (0.11754944E~37, ~0.123) = ~0.123 +- (0.11754944E~37, ~0.123) = 0.123 +/ (0.11754944E~37, ~0.123) = ~0.9556864E~37 +nextAfter (0.11754944E~37, ~0.123) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123) = 0.11754944E~37 +* (0.11754944E~37, ~0.123E~2) = ~0.14459E~40 ++ (0.11754944E~37, ~0.123E~2) = ~0.123E~2 +- (0.11754944E~37, ~0.123E~2) = 0.123E~2 +/ (0.11754944E~37, ~0.123E~2) = ~0.95568645E~35 +nextAfter (0.11754944E~37, ~0.123E~2) = 0.11754942E~37 +rem (0.11754944E~37, ~0.123E~2) = 0.11754944E~37 +* (0.11754944E~37, ~0.11754944E~37) = ~0.0 ++ (0.11754944E~37, ~0.11754944E~37) = 0.0 +- (0.11754944E~37, ~0.11754944E~37) = 0.23509887E~37 +/ (0.11754944E~37, ~0.11754944E~37) = ~0.1E1 +nextAfter (0.11754944E~37, ~0.11754944E~37) = 0.11754942E~37 +rem (0.11754944E~37, ~0.11754944E~37) = 0.0 +* (0.11754944E~37, ~0.5877472E~38) = ~0.0 ++ (0.11754944E~37, ~0.5877472E~38) = 0.5877472E~38 +- (0.11754944E~37, ~0.5877472E~38) = 0.17632415E~37 +/ (0.11754944E~37, ~0.5877472E~38) = ~0.2E1 +nextAfter (0.11754944E~37, ~0.5877472E~38) = 0.11754942E~37 +rem (0.11754944E~37, ~0.5877472E~38) = 0.0 +* (0.11754944E~37, ~0.1E~44) = ~0.0 ++ (0.11754944E~37, ~0.1E~44) = 0.11754942E~37 +- (0.11754944E~37, ~0.1E~44) = 0.11754945E~37 +/ (0.11754944E~37, ~0.1E~44) = ~0.8388608E7 +nextAfter (0.11754944E~37, ~0.1E~44) = 0.11754942E~37 +rem (0.11754944E~37, ~0.1E~44) = 0.0 +* (0.11754944E~37, ~0.0) = ~0.0 ++ (0.11754944E~37, ~0.0) = 0.11754944E~37 +- (0.11754944E~37, ~0.0) = 0.11754944E~37 +/ (0.11754944E~37, ~0.0) = ~inf +nextAfter (0.11754944E~37, ~0.0) = 0.11754942E~37 +rem (0.11754944E~37, ~0.0) = nan +* (0.11754944E~37, inf) = inf ++ (0.11754944E~37, inf) = inf +- (0.11754944E~37, inf) = ~inf +/ (0.11754944E~37, inf) = 0.0 +nextAfter (0.11754944E~37, inf) = 0.11754945E~37 +rem (0.11754944E~37, inf) = 0.11754944E~37 +* (0.11754944E~37, ~inf) = ~inf ++ (0.11754944E~37, ~inf) = ~inf +- (0.11754944E~37, ~inf) = inf +/ (0.11754944E~37, ~inf) = ~0.0 +nextAfter (0.11754944E~37, ~inf) = 0.11754942E~37 +rem (0.11754944E~37, ~inf) = 0.11754944E~37 +* (0.11754944E~37, nan) = nan ++ (0.11754944E~37, nan) = nan +- (0.11754944E~37, nan) = nan +/ (0.11754944E~37, nan) = nan +nextAfter (0.11754944E~37, nan) = nan +rem (0.11754944E~37, nan) = nan +* (0.11754944E~37, inf) = inf ++ (0.11754944E~37, inf) = inf +- (0.11754944E~37, inf) = ~inf +/ (0.11754944E~37, inf) = 0.0 +nextAfter (0.11754944E~37, inf) = 0.11754945E~37 +rem (0.11754944E~37, inf) = 0.11754944E~37 +* (0.5877472E~38, 0.34028235E39) = 0.19999999E1 ++ (0.5877472E~38, 0.34028235E39) = 0.34028235E39 +- (0.5877472E~38, 0.34028235E39) = ~0.34028235E39 +/ (0.5877472E~38, 0.34028235E39) = 0.0 +nextAfter (0.5877472E~38, 0.34028235E39) = 0.5877473E~38 +rem (0.5877472E~38, 0.34028235E39) = 0.5877472E~38 +* (0.5877472E~38, 0.17014117E39) = 0.99999994 ++ (0.5877472E~38, 0.17014117E39) = 0.17014117E39 +- (0.5877472E~38, 0.17014117E39) = ~0.17014117E39 +/ (0.5877472E~38, 0.17014117E39) = 0.0 +nextAfter (0.5877472E~38, 0.17014117E39) = 0.5877473E~38 +rem (0.5877472E~38, 0.17014117E39) = 0.5877472E~38 +* (0.5877472E~38, 0.123E4) = 0.722929E~35 ++ (0.5877472E~38, 0.123E4) = 0.123E4 +- (0.5877472E~38, 0.123E4) = ~0.123E4 +/ (0.5877472E~38, 0.123E4) = 0.4778E~41 +nextAfter (0.5877472E~38, 0.123E4) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E4) = 0.5877472E~38 +* (0.5877472E~38, 0.123E2) = 0.72292904E~37 ++ (0.5877472E~38, 0.123E2) = 0.123E2 +- (0.5877472E~38, 0.123E2) = ~0.123E2 +/ (0.5877472E~38, 0.123E2) = 0.477843E~39 +nextAfter (0.5877472E~38, 0.123E2) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E2) = 0.5877472E~38 +* (0.5877472E~38, 0.31415927E1) = 0.18464623E~37 ++ (0.5877472E~38, 0.31415927E1) = 0.31415927E1 +- (0.5877472E~38, 0.31415927E1) = ~0.31415927E1 +/ (0.5877472E~38, 0.31415927E1) = 0.1870857E~38 +nextAfter (0.5877472E~38, 0.31415927E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.31415927E1) = 0.5877472E~38 +* (0.5877472E~38, 0.27182817E1) = 0.15976624E~37 ++ (0.5877472E~38, 0.27182817E1) = 0.27182817E1 +- (0.5877472E~38, 0.27182817E1) = ~0.27182817E1 +/ (0.5877472E~38, 0.27182817E1) = 0.2162201E~38 +nextAfter (0.5877472E~38, 0.27182817E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.27182817E1) = 0.5877472E~38 +* (0.5877472E~38, 0.123E1) = 0.722929E~38 ++ (0.5877472E~38, 0.123E1) = 0.123E1 +- (0.5877472E~38, 0.123E1) = ~0.123E1 +/ (0.5877472E~38, 0.123E1) = 0.4778432E~38 +nextAfter (0.5877472E~38, 0.123E1) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E1) = 0.5877472E~38 +* (0.5877472E~38, 0.123) = 0.722928E~39 ++ (0.5877472E~38, 0.123) = 0.123 +- (0.5877472E~38, 0.123) = ~0.123 +/ (0.5877472E~38, 0.123) = 0.4778432E~37 +nextAfter (0.5877472E~38, 0.123) = 0.5877473E~38 +rem (0.5877472E~38, 0.123) = 0.5877472E~38 +* (0.5877472E~38, 0.123E~2) = 0.7229E~41 ++ (0.5877472E~38, 0.123E~2) = 0.123E~2 +- (0.5877472E~38, 0.123E~2) = ~0.123E~2 +/ (0.5877472E~38, 0.123E~2) = 0.47784322E~35 +nextAfter (0.5877472E~38, 0.123E~2) = 0.5877473E~38 +rem (0.5877472E~38, 0.123E~2) = 0.5877472E~38 +* (0.5877472E~38, 0.11754944E~37) = 0.0 ++ (0.5877472E~38, 0.11754944E~37) = 0.17632415E~37 +- (0.5877472E~38, 0.11754944E~37) = ~0.5877472E~38 +/ (0.5877472E~38, 0.11754944E~37) = 0.5 +nextAfter (0.5877472E~38, 0.11754944E~37) = 0.5877473E~38 +rem (0.5877472E~38, 0.11754944E~37) = 0.5877472E~38 +* (0.5877472E~38, 0.5877472E~38) = 0.0 ++ (0.5877472E~38, 0.5877472E~38) = 0.11754944E~37 +- (0.5877472E~38, 0.5877472E~38) = 0.0 +/ (0.5877472E~38, 0.5877472E~38) = 0.1E1 +nextAfter (0.5877472E~38, 0.5877472E~38) = 0.5877472E~38 +rem (0.5877472E~38, 0.5877472E~38) = 0.0 +* (0.5877472E~38, 0.1E~44) = 0.0 ++ (0.5877472E~38, 0.1E~44) = 0.5877473E~38 +- (0.5877472E~38, 0.1E~44) = 0.587747E~38 +/ (0.5877472E~38, 0.1E~44) = 0.4194304E7 +nextAfter (0.5877472E~38, 0.1E~44) = 0.587747E~38 +rem (0.5877472E~38, 0.1E~44) = 0.0 +* (0.5877472E~38, 0.0) = 0.0 ++ (0.5877472E~38, 0.0) = 0.5877472E~38 +- (0.5877472E~38, 0.0) = 0.5877472E~38 +/ (0.5877472E~38, 0.0) = inf +nextAfter (0.5877472E~38, 0.0) = 0.587747E~38 +rem (0.5877472E~38, 0.0) = nan +* (0.5877472E~38, ~0.34028235E39) = ~0.19999999E1 ++ (0.5877472E~38, ~0.34028235E39) = ~0.34028235E39 +- (0.5877472E~38, ~0.34028235E39) = 0.34028235E39 +/ (0.5877472E~38, ~0.34028235E39) = ~0.0 +nextAfter (0.5877472E~38, ~0.34028235E39) = 0.587747E~38 +rem (0.5877472E~38, ~0.34028235E39) = 0.5877472E~38 +* (0.5877472E~38, ~0.17014117E39) = ~0.99999994 ++ (0.5877472E~38, ~0.17014117E39) = ~0.17014117E39 +- (0.5877472E~38, ~0.17014117E39) = 0.17014117E39 +/ (0.5877472E~38, ~0.17014117E39) = ~0.0 +nextAfter (0.5877472E~38, ~0.17014117E39) = 0.587747E~38 +rem (0.5877472E~38, ~0.17014117E39) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E4) = ~0.722929E~35 ++ (0.5877472E~38, ~0.123E4) = ~0.123E4 +- (0.5877472E~38, ~0.123E4) = 0.123E4 +/ (0.5877472E~38, ~0.123E4) = ~0.4778E~41 +nextAfter (0.5877472E~38, ~0.123E4) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E4) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E2) = ~0.72292904E~37 ++ (0.5877472E~38, ~0.123E2) = ~0.123E2 +- (0.5877472E~38, ~0.123E2) = 0.123E2 +/ (0.5877472E~38, ~0.123E2) = ~0.477843E~39 +nextAfter (0.5877472E~38, ~0.123E2) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E2) = 0.5877472E~38 +* (0.5877472E~38, ~0.31415927E1) = ~0.18464623E~37 ++ (0.5877472E~38, ~0.31415927E1) = ~0.31415927E1 +- (0.5877472E~38, ~0.31415927E1) = 0.31415927E1 +/ (0.5877472E~38, ~0.31415927E1) = ~0.1870857E~38 +nextAfter (0.5877472E~38, ~0.31415927E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.31415927E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.27182817E1) = ~0.15976624E~37 ++ (0.5877472E~38, ~0.27182817E1) = ~0.27182817E1 +- (0.5877472E~38, ~0.27182817E1) = 0.27182817E1 +/ (0.5877472E~38, ~0.27182817E1) = ~0.2162201E~38 +nextAfter (0.5877472E~38, ~0.27182817E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.27182817E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E1) = ~0.722929E~38 ++ (0.5877472E~38, ~0.123E1) = ~0.123E1 +- (0.5877472E~38, ~0.123E1) = 0.123E1 +/ (0.5877472E~38, ~0.123E1) = ~0.4778432E~38 +nextAfter (0.5877472E~38, ~0.123E1) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E1) = 0.5877472E~38 +* (0.5877472E~38, ~0.123) = ~0.722928E~39 ++ (0.5877472E~38, ~0.123) = ~0.123 +- (0.5877472E~38, ~0.123) = 0.123 +/ (0.5877472E~38, ~0.123) = ~0.4778432E~37 +nextAfter (0.5877472E~38, ~0.123) = 0.587747E~38 +rem (0.5877472E~38, ~0.123) = 0.5877472E~38 +* (0.5877472E~38, ~0.123E~2) = ~0.7229E~41 ++ (0.5877472E~38, ~0.123E~2) = ~0.123E~2 +- (0.5877472E~38, ~0.123E~2) = 0.123E~2 +/ (0.5877472E~38, ~0.123E~2) = ~0.47784322E~35 +nextAfter (0.5877472E~38, ~0.123E~2) = 0.587747E~38 +rem (0.5877472E~38, ~0.123E~2) = 0.5877472E~38 +* (0.5877472E~38, ~0.11754944E~37) = ~0.0 ++ (0.5877472E~38, ~0.11754944E~37) = ~0.5877472E~38 +- (0.5877472E~38, ~0.11754944E~37) = 0.17632415E~37 +/ (0.5877472E~38, ~0.11754944E~37) = ~0.5 +nextAfter (0.5877472E~38, ~0.11754944E~37) = 0.587747E~38 +rem (0.5877472E~38, ~0.11754944E~37) = 0.5877472E~38 +* (0.5877472E~38, ~0.5877472E~38) = ~0.0 ++ (0.5877472E~38, ~0.5877472E~38) = 0.0 +- (0.5877472E~38, ~0.5877472E~38) = 0.11754944E~37 +/ (0.5877472E~38, ~0.5877472E~38) = ~0.1E1 +nextAfter (0.5877472E~38, ~0.5877472E~38) = 0.587747E~38 +rem (0.5877472E~38, ~0.5877472E~38) = 0.0 +* (0.5877472E~38, ~0.1E~44) = ~0.0 ++ (0.5877472E~38, ~0.1E~44) = 0.587747E~38 +- (0.5877472E~38, ~0.1E~44) = 0.5877473E~38 +/ (0.5877472E~38, ~0.1E~44) = ~0.4194304E7 +nextAfter (0.5877472E~38, ~0.1E~44) = 0.587747E~38 +rem (0.5877472E~38, ~0.1E~44) = 0.0 +* (0.5877472E~38, ~0.0) = ~0.0 ++ (0.5877472E~38, ~0.0) = 0.5877472E~38 +- (0.5877472E~38, ~0.0) = 0.5877472E~38 +/ (0.5877472E~38, ~0.0) = ~inf +nextAfter (0.5877472E~38, ~0.0) = 0.587747E~38 +rem (0.5877472E~38, ~0.0) = nan +* (0.5877472E~38, inf) = inf ++ (0.5877472E~38, inf) = inf +- (0.5877472E~38, inf) = ~inf +/ (0.5877472E~38, inf) = 0.0 +nextAfter (0.5877472E~38, inf) = 0.5877473E~38 +rem (0.5877472E~38, inf) = 0.5877472E~38 +* (0.5877472E~38, ~inf) = ~inf ++ (0.5877472E~38, ~inf) = ~inf +- (0.5877472E~38, ~inf) = inf +/ (0.5877472E~38, ~inf) = ~0.0 +nextAfter (0.5877472E~38, ~inf) = 0.587747E~38 +rem (0.5877472E~38, ~inf) = 0.5877472E~38 +* (0.5877472E~38, nan) = nan ++ (0.5877472E~38, nan) = nan +- (0.5877472E~38, nan) = nan +/ (0.5877472E~38, nan) = nan +nextAfter (0.5877472E~38, nan) = nan +rem (0.5877472E~38, nan) = nan +* (0.5877472E~38, inf) = inf ++ (0.5877472E~38, inf) = inf +- (0.5877472E~38, inf) = ~inf +/ (0.5877472E~38, inf) = 0.0 +nextAfter (0.5877472E~38, inf) = 0.5877473E~38 +rem (0.5877472E~38, inf) = 0.5877472E~38 +* (0.1E~44, 0.34028235E39) = 0.47683713E~6 ++ (0.1E~44, 0.34028235E39) = 0.34028235E39 +- (0.1E~44, 0.34028235E39) = ~0.34028235E39 +/ (0.1E~44, 0.34028235E39) = 0.0 +nextAfter (0.1E~44, 0.34028235E39) = 0.3E~44 +rem (0.1E~44, 0.34028235E39) = 0.1E~44 +* (0.1E~44, 0.17014117E39) = 0.23841856E~6 ++ (0.1E~44, 0.17014117E39) = 0.17014117E39 +- (0.1E~44, 0.17014117E39) = ~0.17014117E39 +/ (0.1E~44, 0.17014117E39) = 0.0 +nextAfter (0.1E~44, 0.17014117E39) = 0.3E~44 +rem (0.1E~44, 0.17014117E39) = 0.1E~44 +* (0.1E~44, 0.123E4) = 0.1724E~41 ++ (0.1E~44, 0.123E4) = 0.123E4 +- (0.1E~44, 0.123E4) = ~0.123E4 +/ (0.1E~44, 0.123E4) = 0.0 +nextAfter (0.1E~44, 0.123E4) = 0.3E~44 +rem (0.1E~44, 0.123E4) = 0.1E~44 +* (0.1E~44, 0.123E2) = 0.17E~43 ++ (0.1E~44, 0.123E2) = 0.123E2 +- (0.1E~44, 0.123E2) = ~0.123E2 +/ (0.1E~44, 0.123E2) = 0.0 +nextAfter (0.1E~44, 0.123E2) = 0.3E~44 +rem (0.1E~44, 0.123E2) = 0.1E~44 +* (0.1E~44, 0.31415927E1) = 0.4E~44 ++ (0.1E~44, 0.31415927E1) = 0.31415927E1 +- (0.1E~44, 0.31415927E1) = ~0.31415927E1 +/ (0.1E~44, 0.31415927E1) = 0.0 +nextAfter (0.1E~44, 0.31415927E1) = 0.3E~44 +rem (0.1E~44, 0.31415927E1) = 0.1E~44 +* (0.1E~44, 0.27182817E1) = 0.4E~44 ++ (0.1E~44, 0.27182817E1) = 0.27182817E1 +- (0.1E~44, 0.27182817E1) = ~0.27182817E1 +/ (0.1E~44, 0.27182817E1) = 0.0 +nextAfter (0.1E~44, 0.27182817E1) = 0.3E~44 +rem (0.1E~44, 0.27182817E1) = 0.1E~44 +* (0.1E~44, 0.123E1) = 0.1E~44 ++ (0.1E~44, 0.123E1) = 0.123E1 +- (0.1E~44, 0.123E1) = ~0.123E1 +/ (0.1E~44, 0.123E1) = 0.1E~44 +nextAfter (0.1E~44, 0.123E1) = 0.3E~44 +rem (0.1E~44, 0.123E1) = 0.1E~44 +* (0.1E~44, 0.123) = 0.0 ++ (0.1E~44, 0.123) = 0.123 +- (0.1E~44, 0.123) = ~0.123 +/ (0.1E~44, 0.123) = 0.11E~43 +nextAfter (0.1E~44, 0.123) = 0.3E~44 +rem (0.1E~44, 0.123) = 0.1E~44 +* (0.1E~44, 0.123E~2) = 0.0 ++ (0.1E~44, 0.123E~2) = 0.123E~2 +- (0.1E~44, 0.123E~2) = ~0.123E~2 +/ (0.1E~44, 0.123E~2) = 0.1139E~41 +nextAfter (0.1E~44, 0.123E~2) = 0.3E~44 +rem (0.1E~44, 0.123E~2) = 0.1E~44 +* (0.1E~44, 0.11754944E~37) = 0.0 ++ (0.1E~44, 0.11754944E~37) = 0.11754945E~37 +- (0.1E~44, 0.11754944E~37) = ~0.11754942E~37 +/ (0.1E~44, 0.11754944E~37) = 0.11920929E~6 +nextAfter (0.1E~44, 0.11754944E~37) = 0.3E~44 +rem (0.1E~44, 0.11754944E~37) = 0.1E~44 +* (0.1E~44, 0.5877472E~38) = 0.0 ++ (0.1E~44, 0.5877472E~38) = 0.5877473E~38 +- (0.1E~44, 0.5877472E~38) = ~0.587747E~38 +/ (0.1E~44, 0.5877472E~38) = 0.23841858E~6 +nextAfter (0.1E~44, 0.5877472E~38) = 0.3E~44 +rem (0.1E~44, 0.5877472E~38) = 0.1E~44 +* (0.1E~44, 0.1E~44) = 0.0 ++ (0.1E~44, 0.1E~44) = 0.3E~44 +- (0.1E~44, 0.1E~44) = 0.0 +/ (0.1E~44, 0.1E~44) = 0.1E1 +nextAfter (0.1E~44, 0.1E~44) = 0.1E~44 +rem (0.1E~44, 0.1E~44) = 0.0 +* (0.1E~44, 0.0) = 0.0 ++ (0.1E~44, 0.0) = 0.1E~44 +- (0.1E~44, 0.0) = 0.1E~44 +/ (0.1E~44, 0.0) = inf +nextAfter (0.1E~44, 0.0) = 0.0 +rem (0.1E~44, 0.0) = nan +* (0.1E~44, ~0.34028235E39) = ~0.47683713E~6 ++ (0.1E~44, ~0.34028235E39) = ~0.34028235E39 +- (0.1E~44, ~0.34028235E39) = 0.34028235E39 +/ (0.1E~44, ~0.34028235E39) = ~0.0 +nextAfter (0.1E~44, ~0.34028235E39) = 0.0 +rem (0.1E~44, ~0.34028235E39) = 0.1E~44 +* (0.1E~44, ~0.17014117E39) = ~0.23841856E~6 ++ (0.1E~44, ~0.17014117E39) = ~0.17014117E39 +- (0.1E~44, ~0.17014117E39) = 0.17014117E39 +/ (0.1E~44, ~0.17014117E39) = ~0.0 +nextAfter (0.1E~44, ~0.17014117E39) = 0.0 +rem (0.1E~44, ~0.17014117E39) = 0.1E~44 +* (0.1E~44, ~0.123E4) = ~0.1724E~41 ++ (0.1E~44, ~0.123E4) = ~0.123E4 +- (0.1E~44, ~0.123E4) = 0.123E4 +/ (0.1E~44, ~0.123E4) = ~0.0 +nextAfter (0.1E~44, ~0.123E4) = 0.0 +rem (0.1E~44, ~0.123E4) = 0.1E~44 +* (0.1E~44, ~0.123E2) = ~0.17E~43 ++ (0.1E~44, ~0.123E2) = ~0.123E2 +- (0.1E~44, ~0.123E2) = 0.123E2 +/ (0.1E~44, ~0.123E2) = ~0.0 +nextAfter (0.1E~44, ~0.123E2) = 0.0 +rem (0.1E~44, ~0.123E2) = 0.1E~44 +* (0.1E~44, ~0.31415927E1) = ~0.4E~44 ++ (0.1E~44, ~0.31415927E1) = ~0.31415927E1 +- (0.1E~44, ~0.31415927E1) = 0.31415927E1 +/ (0.1E~44, ~0.31415927E1) = ~0.0 +nextAfter (0.1E~44, ~0.31415927E1) = 0.0 +rem (0.1E~44, ~0.31415927E1) = 0.1E~44 +* (0.1E~44, ~0.27182817E1) = ~0.4E~44 ++ (0.1E~44, ~0.27182817E1) = ~0.27182817E1 +- (0.1E~44, ~0.27182817E1) = 0.27182817E1 +/ (0.1E~44, ~0.27182817E1) = ~0.0 +nextAfter (0.1E~44, ~0.27182817E1) = 0.0 +rem (0.1E~44, ~0.27182817E1) = 0.1E~44 +* (0.1E~44, ~0.123E1) = ~0.1E~44 ++ (0.1E~44, ~0.123E1) = ~0.123E1 +- (0.1E~44, ~0.123E1) = 0.123E1 +/ (0.1E~44, ~0.123E1) = ~0.1E~44 +nextAfter (0.1E~44, ~0.123E1) = 0.0 +rem (0.1E~44, ~0.123E1) = 0.1E~44 +* (0.1E~44, ~0.123) = ~0.0 ++ (0.1E~44, ~0.123) = ~0.123 +- (0.1E~44, ~0.123) = 0.123 +/ (0.1E~44, ~0.123) = ~0.11E~43 +nextAfter (0.1E~44, ~0.123) = 0.0 +rem (0.1E~44, ~0.123) = 0.1E~44 +* (0.1E~44, ~0.123E~2) = ~0.0 ++ (0.1E~44, ~0.123E~2) = ~0.123E~2 +- (0.1E~44, ~0.123E~2) = 0.123E~2 +/ (0.1E~44, ~0.123E~2) = ~0.1139E~41 +nextAfter (0.1E~44, ~0.123E~2) = 0.0 +rem (0.1E~44, ~0.123E~2) = 0.1E~44 +* (0.1E~44, ~0.11754944E~37) = ~0.0 ++ (0.1E~44, ~0.11754944E~37) = ~0.11754942E~37 +- (0.1E~44, ~0.11754944E~37) = 0.11754945E~37 +/ (0.1E~44, ~0.11754944E~37) = ~0.11920929E~6 +nextAfter (0.1E~44, ~0.11754944E~37) = 0.0 +rem (0.1E~44, ~0.11754944E~37) = 0.1E~44 +* (0.1E~44, ~0.5877472E~38) = ~0.0 ++ (0.1E~44, ~0.5877472E~38) = ~0.587747E~38 +- (0.1E~44, ~0.5877472E~38) = 0.5877473E~38 +/ (0.1E~44, ~0.5877472E~38) = ~0.23841858E~6 +nextAfter (0.1E~44, ~0.5877472E~38) = 0.0 +rem (0.1E~44, ~0.5877472E~38) = 0.1E~44 +* (0.1E~44, ~0.1E~44) = ~0.0 ++ (0.1E~44, ~0.1E~44) = 0.0 +- (0.1E~44, ~0.1E~44) = 0.3E~44 +/ (0.1E~44, ~0.1E~44) = ~0.1E1 +nextAfter (0.1E~44, ~0.1E~44) = 0.0 +rem (0.1E~44, ~0.1E~44) = 0.0 +* (0.1E~44, ~0.0) = ~0.0 ++ (0.1E~44, ~0.0) = 0.1E~44 +- (0.1E~44, ~0.0) = 0.1E~44 +/ (0.1E~44, ~0.0) = ~inf +nextAfter (0.1E~44, ~0.0) = 0.0 +rem (0.1E~44, ~0.0) = nan +* (0.1E~44, inf) = inf ++ (0.1E~44, inf) = inf +- (0.1E~44, inf) = ~inf +/ (0.1E~44, inf) = 0.0 +nextAfter (0.1E~44, inf) = 0.3E~44 +rem (0.1E~44, inf) = 0.1E~44 +* (0.1E~44, ~inf) = ~inf ++ (0.1E~44, ~inf) = ~inf +- (0.1E~44, ~inf) = inf +/ (0.1E~44, ~inf) = ~0.0 +nextAfter (0.1E~44, ~inf) = 0.0 +rem (0.1E~44, ~inf) = 0.1E~44 +* (0.1E~44, nan) = nan ++ (0.1E~44, nan) = nan +- (0.1E~44, nan) = nan +/ (0.1E~44, nan) = nan +nextAfter (0.1E~44, nan) = nan +rem (0.1E~44, nan) = nan +* (0.1E~44, inf) = inf ++ (0.1E~44, inf) = inf +- (0.1E~44, inf) = ~inf +/ (0.1E~44, inf) = 0.0 +nextAfter (0.1E~44, inf) = 0.3E~44 +rem (0.1E~44, inf) = 0.1E~44 +* (0.0, 0.34028235E39) = 0.0 ++ (0.0, 0.34028235E39) = 0.34028235E39 +- (0.0, 0.34028235E39) = ~0.34028235E39 +/ (0.0, 0.34028235E39) = 0.0 +nextAfter (0.0, 0.34028235E39) = 0.1E~44 +rem (0.0, 0.34028235E39) = 0.0 +* (0.0, 0.17014117E39) = 0.0 ++ (0.0, 0.17014117E39) = 0.17014117E39 +- (0.0, 0.17014117E39) = ~0.17014117E39 +/ (0.0, 0.17014117E39) = 0.0 +nextAfter (0.0, 0.17014117E39) = 0.1E~44 +rem (0.0, 0.17014117E39) = 0.0 +* (0.0, 0.123E4) = 0.0 ++ (0.0, 0.123E4) = 0.123E4 +- (0.0, 0.123E4) = ~0.123E4 +/ (0.0, 0.123E4) = 0.0 +nextAfter (0.0, 0.123E4) = 0.1E~44 +rem (0.0, 0.123E4) = 0.0 +* (0.0, 0.123E2) = 0.0 ++ (0.0, 0.123E2) = 0.123E2 +- (0.0, 0.123E2) = ~0.123E2 +/ (0.0, 0.123E2) = 0.0 +nextAfter (0.0, 0.123E2) = 0.1E~44 +rem (0.0, 0.123E2) = 0.0 +* (0.0, 0.31415927E1) = 0.0 ++ (0.0, 0.31415927E1) = 0.31415927E1 +- (0.0, 0.31415927E1) = ~0.31415927E1 +/ (0.0, 0.31415927E1) = 0.0 +nextAfter (0.0, 0.31415927E1) = 0.1E~44 +rem (0.0, 0.31415927E1) = 0.0 +* (0.0, 0.27182817E1) = 0.0 ++ (0.0, 0.27182817E1) = 0.27182817E1 +- (0.0, 0.27182817E1) = ~0.27182817E1 +/ (0.0, 0.27182817E1) = 0.0 +nextAfter (0.0, 0.27182817E1) = 0.1E~44 +rem (0.0, 0.27182817E1) = 0.0 +* (0.0, 0.123E1) = 0.0 ++ (0.0, 0.123E1) = 0.123E1 +- (0.0, 0.123E1) = ~0.123E1 +/ (0.0, 0.123E1) = 0.0 +nextAfter (0.0, 0.123E1) = 0.1E~44 +rem (0.0, 0.123E1) = 0.0 +* (0.0, 0.123) = 0.0 ++ (0.0, 0.123) = 0.123 +- (0.0, 0.123) = ~0.123 +/ (0.0, 0.123) = 0.0 +nextAfter (0.0, 0.123) = 0.1E~44 +rem (0.0, 0.123) = 0.0 +* (0.0, 0.123E~2) = 0.0 ++ (0.0, 0.123E~2) = 0.123E~2 +- (0.0, 0.123E~2) = ~0.123E~2 +/ (0.0, 0.123E~2) = 0.0 +nextAfter (0.0, 0.123E~2) = 0.1E~44 +rem (0.0, 0.123E~2) = 0.0 +* (0.0, 0.11754944E~37) = 0.0 ++ (0.0, 0.11754944E~37) = 0.11754944E~37 +- (0.0, 0.11754944E~37) = ~0.11754944E~37 +/ (0.0, 0.11754944E~37) = 0.0 +nextAfter (0.0, 0.11754944E~37) = 0.1E~44 +rem (0.0, 0.11754944E~37) = 0.0 +* (0.0, 0.5877472E~38) = 0.0 ++ (0.0, 0.5877472E~38) = 0.5877472E~38 +- (0.0, 0.5877472E~38) = ~0.5877472E~38 +/ (0.0, 0.5877472E~38) = 0.0 +nextAfter (0.0, 0.5877472E~38) = 0.1E~44 +rem (0.0, 0.5877472E~38) = 0.0 +* (0.0, 0.1E~44) = 0.0 ++ (0.0, 0.1E~44) = 0.1E~44 +- (0.0, 0.1E~44) = ~0.1E~44 +/ (0.0, 0.1E~44) = 0.0 +nextAfter (0.0, 0.1E~44) = 0.1E~44 +rem (0.0, 0.1E~44) = 0.0 +* (0.0, 0.0) = 0.0 ++ (0.0, 0.0) = 0.0 +- (0.0, 0.0) = 0.0 +/ (0.0, 0.0) = nan +nextAfter (0.0, 0.0) = 0.0 +rem (0.0, 0.0) = 0.0 +* (0.0, ~0.34028235E39) = ~0.0 ++ (0.0, ~0.34028235E39) = ~0.34028235E39 +- (0.0, ~0.34028235E39) = 0.34028235E39 +/ (0.0, ~0.34028235E39) = ~0.0 +nextAfter (0.0, ~0.34028235E39) = ~0.1E~44 +rem (0.0, ~0.34028235E39) = 0.0 +* (0.0, ~0.17014117E39) = ~0.0 ++ (0.0, ~0.17014117E39) = ~0.17014117E39 +- (0.0, ~0.17014117E39) = 0.17014117E39 +/ (0.0, ~0.17014117E39) = ~0.0 +nextAfter (0.0, ~0.17014117E39) = ~0.1E~44 +rem (0.0, ~0.17014117E39) = 0.0 +* (0.0, ~0.123E4) = ~0.0 ++ (0.0, ~0.123E4) = ~0.123E4 +- (0.0, ~0.123E4) = 0.123E4 +/ (0.0, ~0.123E4) = ~0.0 +nextAfter (0.0, ~0.123E4) = ~0.1E~44 +rem (0.0, ~0.123E4) = 0.0 +* (0.0, ~0.123E2) = ~0.0 ++ (0.0, ~0.123E2) = ~0.123E2 +- (0.0, ~0.123E2) = 0.123E2 +/ (0.0, ~0.123E2) = ~0.0 +nextAfter (0.0, ~0.123E2) = ~0.1E~44 +rem (0.0, ~0.123E2) = 0.0 +* (0.0, ~0.31415927E1) = ~0.0 ++ (0.0, ~0.31415927E1) = ~0.31415927E1 +- (0.0, ~0.31415927E1) = 0.31415927E1 +/ (0.0, ~0.31415927E1) = ~0.0 +nextAfter (0.0, ~0.31415927E1) = ~0.1E~44 +rem (0.0, ~0.31415927E1) = 0.0 +* (0.0, ~0.27182817E1) = ~0.0 ++ (0.0, ~0.27182817E1) = ~0.27182817E1 +- (0.0, ~0.27182817E1) = 0.27182817E1 +/ (0.0, ~0.27182817E1) = ~0.0 +nextAfter (0.0, ~0.27182817E1) = ~0.1E~44 +rem (0.0, ~0.27182817E1) = 0.0 +* (0.0, ~0.123E1) = ~0.0 ++ (0.0, ~0.123E1) = ~0.123E1 +- (0.0, ~0.123E1) = 0.123E1 +/ (0.0, ~0.123E1) = ~0.0 +nextAfter (0.0, ~0.123E1) = ~0.1E~44 +rem (0.0, ~0.123E1) = 0.0 +* (0.0, ~0.123) = ~0.0 ++ (0.0, ~0.123) = ~0.123 +- (0.0, ~0.123) = 0.123 +/ (0.0, ~0.123) = ~0.0 +nextAfter (0.0, ~0.123) = ~0.1E~44 +rem (0.0, ~0.123) = 0.0 +* (0.0, ~0.123E~2) = ~0.0 ++ (0.0, ~0.123E~2) = ~0.123E~2 +- (0.0, ~0.123E~2) = 0.123E~2 +/ (0.0, ~0.123E~2) = ~0.0 +nextAfter (0.0, ~0.123E~2) = ~0.1E~44 +rem (0.0, ~0.123E~2) = 0.0 +* (0.0, ~0.11754944E~37) = ~0.0 ++ (0.0, ~0.11754944E~37) = ~0.11754944E~37 +- (0.0, ~0.11754944E~37) = 0.11754944E~37 +/ (0.0, ~0.11754944E~37) = ~0.0 +nextAfter (0.0, ~0.11754944E~37) = ~0.1E~44 +rem (0.0, ~0.11754944E~37) = 0.0 +* (0.0, ~0.5877472E~38) = ~0.0 ++ (0.0, ~0.5877472E~38) = ~0.5877472E~38 +- (0.0, ~0.5877472E~38) = 0.5877472E~38 +/ (0.0, ~0.5877472E~38) = ~0.0 +nextAfter (0.0, ~0.5877472E~38) = ~0.1E~44 +rem (0.0, ~0.5877472E~38) = 0.0 +* (0.0, ~0.1E~44) = ~0.0 ++ (0.0, ~0.1E~44) = ~0.1E~44 +- (0.0, ~0.1E~44) = 0.1E~44 +/ (0.0, ~0.1E~44) = ~0.0 +nextAfter (0.0, ~0.1E~44) = ~0.1E~44 +rem (0.0, ~0.1E~44) = 0.0 +* (0.0, ~0.0) = ~0.0 ++ (0.0, ~0.0) = 0.0 +- (0.0, ~0.0) = 0.0 +/ (0.0, ~0.0) = nan +nextAfter (0.0, ~0.0) = ~0.0 +rem (0.0, ~0.0) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.1E~44 +rem (0.0, inf) = 0.0 +* (0.0, ~inf) = nan ++ (0.0, ~inf) = ~inf +- (0.0, ~inf) = inf +/ (0.0, ~inf) = ~0.0 +nextAfter (0.0, ~inf) = ~0.1E~44 +rem (0.0, ~inf) = 0.0 +* (0.0, nan) = nan ++ (0.0, nan) = nan +- (0.0, nan) = nan +/ (0.0, nan) = nan +nextAfter (0.0, nan) = nan +rem (0.0, nan) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.1E~44 +rem (0.0, inf) = 0.0 +* (~0.34028235E39, 0.34028235E39) = ~inf ++ (~0.34028235E39, 0.34028235E39) = 0.0 +- (~0.34028235E39, 0.34028235E39) = ~inf +/ (~0.34028235E39, 0.34028235E39) = ~0.1E1 +nextAfter (~0.34028235E39, 0.34028235E39) = ~0.34028233E39 +rem (~0.34028235E39, 0.34028235E39) = 0.0 +* (~0.34028235E39, 0.17014117E39) = ~inf ++ (~0.34028235E39, 0.17014117E39) = ~0.17014117E39 +- (~0.34028235E39, 0.17014117E39) = ~inf +/ (~0.34028235E39, 0.17014117E39) = ~0.2E1 +nextAfter (~0.34028235E39, 0.17014117E39) = ~0.34028233E39 +rem (~0.34028235E39, 0.17014117E39) = 0.0 +* (~0.34028235E39, 0.123E4) = ~inf ++ (~0.34028235E39, 0.123E4) = ~0.34028235E39 +- (~0.34028235E39, 0.123E4) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E4) = ~0.2766523E36 +nextAfter (~0.34028235E39, 0.123E4) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E4) = ~0.11884224E32 +* (~0.34028235E39, 0.123E2) = ~inf ++ (~0.34028235E39, 0.123E2) = ~0.34028235E39 +- (~0.34028235E39, 0.123E2) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E2) = ~0.27665232E38 +nextAfter (~0.34028235E39, 0.123E2) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E2) = 0.12882628E32 +* (~0.34028235E39, 0.31415927E1) = ~inf ++ (~0.34028235E39, 0.31415927E1) = ~0.34028235E39 +- (~0.34028235E39, 0.31415927E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.31415927E1) = ~0.10831523E39 +nextAfter (~0.34028235E39, 0.31415927E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.31415927E1) = ~0.15835598E32 +* (~0.34028235E39, 0.27182817E1) = ~inf ++ (~0.34028235E39, 0.27182817E1) = ~0.34028235E39 +- (~0.34028235E39, 0.27182817E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.27182817E1) = ~0.12518288E39 +nextAfter (~0.34028235E39, 0.27182817E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.27182817E1) = ~0.9154518E31 +* (~0.34028235E39, 0.123E1) = ~inf ++ (~0.34028235E39, 0.123E1) = ~0.34028235E39 +- (~0.34028235E39, 0.123E1) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E1) = ~0.27665231E39 +nextAfter (~0.34028235E39, 0.123E1) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E1) = 0.40894575E30 +* (~0.34028235E39, 0.123) = ~0.4185473E38 ++ (~0.34028235E39, 0.123) = ~0.34028235E39 +- (~0.34028235E39, 0.123) = ~0.34028235E39 +/ (~0.34028235E39, 0.123) = ~inf +nextAfter (~0.34028235E39, 0.123) = ~0.34028233E39 +rem (~0.34028235E39, 0.123) = inf +* (~0.34028235E39, 0.123E~2) = ~0.4185473E36 ++ (~0.34028235E39, 0.123E~2) = ~0.34028235E39 +- (~0.34028235E39, 0.123E~2) = ~0.34028235E39 +/ (~0.34028235E39, 0.123E~2) = ~inf +nextAfter (~0.34028235E39, 0.123E~2) = ~0.34028233E39 +rem (~0.34028235E39, 0.123E~2) = inf +* (~0.34028235E39, 0.11754944E~37) = ~0.39999998E1 ++ (~0.34028235E39, 0.11754944E~37) = ~0.34028235E39 +- (~0.34028235E39, 0.11754944E~37) = ~0.34028235E39 +/ (~0.34028235E39, 0.11754944E~37) = ~inf +nextAfter (~0.34028235E39, 0.11754944E~37) = ~0.34028233E39 +rem (~0.34028235E39, 0.11754944E~37) = inf +* (~0.34028235E39, 0.5877472E~38) = ~0.19999999E1 ++ (~0.34028235E39, 0.5877472E~38) = ~0.34028235E39 +- (~0.34028235E39, 0.5877472E~38) = ~0.34028235E39 +/ (~0.34028235E39, 0.5877472E~38) = ~inf +nextAfter (~0.34028235E39, 0.5877472E~38) = ~0.34028233E39 +rem (~0.34028235E39, 0.5877472E~38) = inf +* (~0.34028235E39, 0.1E~44) = ~0.47683713E~6 ++ (~0.34028235E39, 0.1E~44) = ~0.34028235E39 +- (~0.34028235E39, 0.1E~44) = ~0.34028235E39 +/ (~0.34028235E39, 0.1E~44) = ~inf +nextAfter (~0.34028235E39, 0.1E~44) = ~0.34028233E39 +rem (~0.34028235E39, 0.1E~44) = inf +* (~0.34028235E39, 0.0) = ~0.0 ++ (~0.34028235E39, 0.0) = ~0.34028235E39 +- (~0.34028235E39, 0.0) = ~0.34028235E39 +/ (~0.34028235E39, 0.0) = ~inf +nextAfter (~0.34028235E39, 0.0) = ~0.34028233E39 +rem (~0.34028235E39, 0.0) = nan +* (~0.34028235E39, ~0.34028235E39) = inf ++ (~0.34028235E39, ~0.34028235E39) = ~inf +- (~0.34028235E39, ~0.34028235E39) = 0.0 +/ (~0.34028235E39, ~0.34028235E39) = 0.1E1 +nextAfter (~0.34028235E39, ~0.34028235E39) = ~0.34028235E39 +rem (~0.34028235E39, ~0.34028235E39) = 0.0 +* (~0.34028235E39, ~0.17014117E39) = inf ++ (~0.34028235E39, ~0.17014117E39) = ~inf +- (~0.34028235E39, ~0.17014117E39) = ~0.17014117E39 +/ (~0.34028235E39, ~0.17014117E39) = 0.2E1 +nextAfter (~0.34028235E39, ~0.17014117E39) = ~0.34028233E39 +rem (~0.34028235E39, ~0.17014117E39) = 0.0 +* (~0.34028235E39, ~0.123E4) = inf ++ (~0.34028235E39, ~0.123E4) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E4) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E4) = 0.2766523E36 +nextAfter (~0.34028235E39, ~0.123E4) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E4) = ~0.11884224E32 +* (~0.34028235E39, ~0.123E2) = inf ++ (~0.34028235E39, ~0.123E2) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E2) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E2) = 0.27665232E38 +nextAfter (~0.34028235E39, ~0.123E2) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E2) = 0.12882628E32 +* (~0.34028235E39, ~0.31415927E1) = inf ++ (~0.34028235E39, ~0.31415927E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.31415927E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.31415927E1) = 0.10831523E39 +nextAfter (~0.34028235E39, ~0.31415927E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.31415927E1) = ~0.15835598E32 +* (~0.34028235E39, ~0.27182817E1) = inf ++ (~0.34028235E39, ~0.27182817E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.27182817E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.27182817E1) = 0.12518288E39 +nextAfter (~0.34028235E39, ~0.27182817E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.27182817E1) = ~0.9154518E31 +* (~0.34028235E39, ~0.123E1) = inf ++ (~0.34028235E39, ~0.123E1) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E1) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E1) = 0.27665231E39 +nextAfter (~0.34028235E39, ~0.123E1) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E1) = 0.40894575E30 +* (~0.34028235E39, ~0.123) = 0.4185473E38 ++ (~0.34028235E39, ~0.123) = ~0.34028235E39 +- (~0.34028235E39, ~0.123) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123) = inf +nextAfter (~0.34028235E39, ~0.123) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123) = inf +* (~0.34028235E39, ~0.123E~2) = 0.4185473E36 ++ (~0.34028235E39, ~0.123E~2) = ~0.34028235E39 +- (~0.34028235E39, ~0.123E~2) = ~0.34028235E39 +/ (~0.34028235E39, ~0.123E~2) = inf +nextAfter (~0.34028235E39, ~0.123E~2) = ~0.34028233E39 +rem (~0.34028235E39, ~0.123E~2) = inf +* (~0.34028235E39, ~0.11754944E~37) = 0.39999998E1 ++ (~0.34028235E39, ~0.11754944E~37) = ~0.34028235E39 +- (~0.34028235E39, ~0.11754944E~37) = ~0.34028235E39 +/ (~0.34028235E39, ~0.11754944E~37) = inf +nextAfter (~0.34028235E39, ~0.11754944E~37) = ~0.34028233E39 +rem (~0.34028235E39, ~0.11754944E~37) = inf +* (~0.34028235E39, ~0.5877472E~38) = 0.19999999E1 ++ (~0.34028235E39, ~0.5877472E~38) = ~0.34028235E39 +- (~0.34028235E39, ~0.5877472E~38) = ~0.34028235E39 +/ (~0.34028235E39, ~0.5877472E~38) = inf +nextAfter (~0.34028235E39, ~0.5877472E~38) = ~0.34028233E39 +rem (~0.34028235E39, ~0.5877472E~38) = inf +* (~0.34028235E39, ~0.1E~44) = 0.47683713E~6 ++ (~0.34028235E39, ~0.1E~44) = ~0.34028235E39 +- (~0.34028235E39, ~0.1E~44) = ~0.34028235E39 +/ (~0.34028235E39, ~0.1E~44) = inf +nextAfter (~0.34028235E39, ~0.1E~44) = ~0.34028233E39 +rem (~0.34028235E39, ~0.1E~44) = inf +* (~0.34028235E39, ~0.0) = 0.0 ++ (~0.34028235E39, ~0.0) = ~0.34028235E39 +- (~0.34028235E39, ~0.0) = ~0.34028235E39 +/ (~0.34028235E39, ~0.0) = inf +nextAfter (~0.34028235E39, ~0.0) = ~0.34028233E39 +rem (~0.34028235E39, ~0.0) = nan +* (~0.34028235E39, inf) = ~inf ++ (~0.34028235E39, inf) = inf +- (~0.34028235E39, inf) = ~inf +/ (~0.34028235E39, inf) = ~0.0 +nextAfter (~0.34028235E39, inf) = ~0.34028233E39 +rem (~0.34028235E39, inf) = ~0.34028235E39 +* (~0.34028235E39, ~inf) = inf ++ (~0.34028235E39, ~inf) = ~inf +- (~0.34028235E39, ~inf) = inf +/ (~0.34028235E39, ~inf) = 0.0 +nextAfter (~0.34028235E39, ~inf) = ~inf +rem (~0.34028235E39, ~inf) = ~0.34028235E39 +* (~0.34028235E39, nan) = nan ++ (~0.34028235E39, nan) = nan +- (~0.34028235E39, nan) = nan +/ (~0.34028235E39, nan) = nan +nextAfter (~0.34028235E39, nan) = nan +rem (~0.34028235E39, nan) = nan +* (~0.34028235E39, inf) = ~inf ++ (~0.34028235E39, inf) = inf +- (~0.34028235E39, inf) = ~inf +/ (~0.34028235E39, inf) = ~0.0 +nextAfter (~0.34028235E39, inf) = ~0.34028233E39 +rem (~0.34028235E39, inf) = ~0.34028235E39 +* (~0.17014117E39, 0.34028235E39) = ~inf ++ (~0.17014117E39, 0.34028235E39) = 0.17014117E39 +- (~0.17014117E39, 0.34028235E39) = ~inf +/ (~0.17014117E39, 0.34028235E39) = ~0.5 +nextAfter (~0.17014117E39, 0.34028235E39) = ~0.17014116E39 +rem (~0.17014117E39, 0.34028235E39) = ~0.17014117E39 +* (~0.17014117E39, 0.17014117E39) = ~inf ++ (~0.17014117E39, 0.17014117E39) = 0.0 +- (~0.17014117E39, 0.17014117E39) = ~0.34028235E39 +/ (~0.17014117E39, 0.17014117E39) = ~0.1E1 +nextAfter (~0.17014117E39, 0.17014117E39) = ~0.17014116E39 +rem (~0.17014117E39, 0.17014117E39) = 0.0 +* (~0.17014117E39, 0.123E4) = ~inf ++ (~0.17014117E39, 0.123E4) = ~0.17014117E39 +- (~0.17014117E39, 0.123E4) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E4) = ~0.13832615E36 +nextAfter (~0.17014117E39, 0.123E4) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E4) = ~0.5942112E31 +* (~0.17014117E39, 0.123E2) = ~inf ++ (~0.17014117E39, 0.123E2) = ~0.17014117E39 +- (~0.17014117E39, 0.123E2) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E2) = ~0.13832616E38 +nextAfter (~0.17014117E39, 0.123E2) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E2) = 0.6441314E31 +* (~0.17014117E39, 0.31415927E1) = ~inf ++ (~0.17014117E39, 0.31415927E1) = ~0.17014117E39 +- (~0.17014117E39, 0.31415927E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.31415927E1) = ~0.54157613E38 +nextAfter (~0.17014117E39, 0.31415927E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.31415927E1) = ~0.7917799E31 +* (~0.17014117E39, 0.27182817E1) = ~inf ++ (~0.17014117E39, 0.27182817E1) = ~0.17014117E39 +- (~0.17014117E39, 0.27182817E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.27182817E1) = ~0.6259144E38 +nextAfter (~0.17014117E39, 0.27182817E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.27182817E1) = ~0.4577259E31 +* (~0.17014117E39, 0.123E1) = ~0.20927364E39 ++ (~0.17014117E39, 0.123E1) = ~0.17014117E39 +- (~0.17014117E39, 0.123E1) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E1) = ~0.13832616E39 +nextAfter (~0.17014117E39, 0.123E1) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E1) = 0.20447288E30 +* (~0.17014117E39, 0.123) = ~0.20927365E38 ++ (~0.17014117E39, 0.123) = ~0.17014117E39 +- (~0.17014117E39, 0.123) = ~0.17014117E39 +/ (~0.17014117E39, 0.123) = ~inf +nextAfter (~0.17014117E39, 0.123) = ~0.17014116E39 +rem (~0.17014117E39, 0.123) = inf +* (~0.17014117E39, 0.123E~2) = ~0.20927364E36 ++ (~0.17014117E39, 0.123E~2) = ~0.17014117E39 +- (~0.17014117E39, 0.123E~2) = ~0.17014117E39 +/ (~0.17014117E39, 0.123E~2) = ~inf +nextAfter (~0.17014117E39, 0.123E~2) = ~0.17014116E39 +rem (~0.17014117E39, 0.123E~2) = inf +* (~0.17014117E39, 0.11754944E~37) = ~0.19999999E1 ++ (~0.17014117E39, 0.11754944E~37) = ~0.17014117E39 +- (~0.17014117E39, 0.11754944E~37) = ~0.17014117E39 +/ (~0.17014117E39, 0.11754944E~37) = ~inf +nextAfter (~0.17014117E39, 0.11754944E~37) = ~0.17014116E39 +rem (~0.17014117E39, 0.11754944E~37) = inf +* (~0.17014117E39, 0.5877472E~38) = ~0.99999994 ++ (~0.17014117E39, 0.5877472E~38) = ~0.17014117E39 +- (~0.17014117E39, 0.5877472E~38) = ~0.17014117E39 +/ (~0.17014117E39, 0.5877472E~38) = ~inf +nextAfter (~0.17014117E39, 0.5877472E~38) = ~0.17014116E39 +rem (~0.17014117E39, 0.5877472E~38) = inf +* (~0.17014117E39, 0.1E~44) = ~0.23841856E~6 ++ (~0.17014117E39, 0.1E~44) = ~0.17014117E39 +- (~0.17014117E39, 0.1E~44) = ~0.17014117E39 +/ (~0.17014117E39, 0.1E~44) = ~inf +nextAfter (~0.17014117E39, 0.1E~44) = ~0.17014116E39 +rem (~0.17014117E39, 0.1E~44) = inf +* (~0.17014117E39, 0.0) = ~0.0 ++ (~0.17014117E39, 0.0) = ~0.17014117E39 +- (~0.17014117E39, 0.0) = ~0.17014117E39 +/ (~0.17014117E39, 0.0) = ~inf +nextAfter (~0.17014117E39, 0.0) = ~0.17014116E39 +rem (~0.17014117E39, 0.0) = nan +* (~0.17014117E39, ~0.34028235E39) = inf ++ (~0.17014117E39, ~0.34028235E39) = ~inf +- (~0.17014117E39, ~0.34028235E39) = 0.17014117E39 +/ (~0.17014117E39, ~0.34028235E39) = 0.5 +nextAfter (~0.17014117E39, ~0.34028235E39) = ~0.17014118E39 +rem (~0.17014117E39, ~0.34028235E39) = ~0.17014117E39 +* (~0.17014117E39, ~0.17014117E39) = inf ++ (~0.17014117E39, ~0.17014117E39) = ~0.34028235E39 +- (~0.17014117E39, ~0.17014117E39) = 0.0 +/ (~0.17014117E39, ~0.17014117E39) = 0.1E1 +nextAfter (~0.17014117E39, ~0.17014117E39) = ~0.17014117E39 +rem (~0.17014117E39, ~0.17014117E39) = 0.0 +* (~0.17014117E39, ~0.123E4) = inf ++ (~0.17014117E39, ~0.123E4) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E4) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E4) = 0.13832615E36 +nextAfter (~0.17014117E39, ~0.123E4) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E4) = ~0.5942112E31 +* (~0.17014117E39, ~0.123E2) = inf ++ (~0.17014117E39, ~0.123E2) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E2) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E2) = 0.13832616E38 +nextAfter (~0.17014117E39, ~0.123E2) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E2) = 0.6441314E31 +* (~0.17014117E39, ~0.31415927E1) = inf ++ (~0.17014117E39, ~0.31415927E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.31415927E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.31415927E1) = 0.54157613E38 +nextAfter (~0.17014117E39, ~0.31415927E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.31415927E1) = ~0.7917799E31 +* (~0.17014117E39, ~0.27182817E1) = inf ++ (~0.17014117E39, ~0.27182817E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.27182817E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.27182817E1) = 0.6259144E38 +nextAfter (~0.17014117E39, ~0.27182817E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.27182817E1) = ~0.4577259E31 +* (~0.17014117E39, ~0.123E1) = 0.20927364E39 ++ (~0.17014117E39, ~0.123E1) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E1) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E1) = 0.13832616E39 +nextAfter (~0.17014117E39, ~0.123E1) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E1) = 0.20447288E30 +* (~0.17014117E39, ~0.123) = 0.20927365E38 ++ (~0.17014117E39, ~0.123) = ~0.17014117E39 +- (~0.17014117E39, ~0.123) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123) = inf +nextAfter (~0.17014117E39, ~0.123) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123) = inf +* (~0.17014117E39, ~0.123E~2) = 0.20927364E36 ++ (~0.17014117E39, ~0.123E~2) = ~0.17014117E39 +- (~0.17014117E39, ~0.123E~2) = ~0.17014117E39 +/ (~0.17014117E39, ~0.123E~2) = inf +nextAfter (~0.17014117E39, ~0.123E~2) = ~0.17014116E39 +rem (~0.17014117E39, ~0.123E~2) = inf +* (~0.17014117E39, ~0.11754944E~37) = 0.19999999E1 ++ (~0.17014117E39, ~0.11754944E~37) = ~0.17014117E39 +- (~0.17014117E39, ~0.11754944E~37) = ~0.17014117E39 +/ (~0.17014117E39, ~0.11754944E~37) = inf +nextAfter (~0.17014117E39, ~0.11754944E~37) = ~0.17014116E39 +rem (~0.17014117E39, ~0.11754944E~37) = inf +* (~0.17014117E39, ~0.5877472E~38) = 0.99999994 ++ (~0.17014117E39, ~0.5877472E~38) = ~0.17014117E39 +- (~0.17014117E39, ~0.5877472E~38) = ~0.17014117E39 +/ (~0.17014117E39, ~0.5877472E~38) = inf +nextAfter (~0.17014117E39, ~0.5877472E~38) = ~0.17014116E39 +rem (~0.17014117E39, ~0.5877472E~38) = inf +* (~0.17014117E39, ~0.1E~44) = 0.23841856E~6 ++ (~0.17014117E39, ~0.1E~44) = ~0.17014117E39 +- (~0.17014117E39, ~0.1E~44) = ~0.17014117E39 +/ (~0.17014117E39, ~0.1E~44) = inf +nextAfter (~0.17014117E39, ~0.1E~44) = ~0.17014116E39 +rem (~0.17014117E39, ~0.1E~44) = inf +* (~0.17014117E39, ~0.0) = 0.0 ++ (~0.17014117E39, ~0.0) = ~0.17014117E39 +- (~0.17014117E39, ~0.0) = ~0.17014117E39 +/ (~0.17014117E39, ~0.0) = inf +nextAfter (~0.17014117E39, ~0.0) = ~0.17014116E39 +rem (~0.17014117E39, ~0.0) = nan +* (~0.17014117E39, inf) = ~inf ++ (~0.17014117E39, inf) = inf +- (~0.17014117E39, inf) = ~inf +/ (~0.17014117E39, inf) = ~0.0 +nextAfter (~0.17014117E39, inf) = ~0.17014116E39 +rem (~0.17014117E39, inf) = ~0.17014117E39 +* (~0.17014117E39, ~inf) = inf ++ (~0.17014117E39, ~inf) = ~inf +- (~0.17014117E39, ~inf) = inf +/ (~0.17014117E39, ~inf) = 0.0 +nextAfter (~0.17014117E39, ~inf) = ~0.17014118E39 +rem (~0.17014117E39, ~inf) = ~0.17014117E39 +* (~0.17014117E39, nan) = nan ++ (~0.17014117E39, nan) = nan +- (~0.17014117E39, nan) = nan +/ (~0.17014117E39, nan) = nan +nextAfter (~0.17014117E39, nan) = nan +rem (~0.17014117E39, nan) = nan +* (~0.17014117E39, inf) = ~inf ++ (~0.17014117E39, inf) = inf +- (~0.17014117E39, inf) = ~inf +/ (~0.17014117E39, inf) = ~0.0 +nextAfter (~0.17014117E39, inf) = ~0.17014116E39 +rem (~0.17014117E39, inf) = ~0.17014117E39 +* (~0.123E4, 0.34028235E39) = ~inf ++ (~0.123E4, 0.34028235E39) = 0.34028235E39 +- (~0.123E4, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E4, 0.34028235E39) = ~0.36146455E~35 +nextAfter (~0.123E4, 0.34028235E39) = ~0.12299999E4 +rem (~0.123E4, 0.34028235E39) = ~0.123E4 +* (~0.123E4, 0.17014117E39) = ~inf ++ (~0.123E4, 0.17014117E39) = 0.17014117E39 +- (~0.123E4, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E4, 0.17014117E39) = ~0.7229291E~35 +nextAfter (~0.123E4, 0.17014117E39) = ~0.12299999E4 +rem (~0.123E4, 0.17014117E39) = ~0.123E4 +* (~0.123E4, 0.123E4) = ~0.15129E7 ++ (~0.123E4, 0.123E4) = 0.0 +- (~0.123E4, 0.123E4) = ~0.246E4 +/ (~0.123E4, 0.123E4) = ~0.1E1 +nextAfter (~0.123E4, 0.123E4) = ~0.12299999E4 +rem (~0.123E4, 0.123E4) = 0.0 +* (~0.123E4, 0.123E2) = ~0.15129E5 ++ (~0.123E4, 0.123E2) = ~0.12177E4 +- (~0.123E4, 0.123E2) = ~0.12423E4 +/ (~0.123E4, 0.123E2) = ~0.1E3 +nextAfter (~0.123E4, 0.123E2) = ~0.12299999E4 +rem (~0.123E4, 0.123E2) = 0.19073486E~4 +* (~0.123E4, 0.31415927E1) = ~0.38641592E4 ++ (~0.123E4, 0.31415927E1) = ~0.12268584E4 +- (~0.123E4, 0.31415927E1) = ~0.12331416E4 +/ (~0.123E4, 0.31415927E1) = ~0.39152115E3 +nextAfter (~0.123E4, 0.31415927E1) = ~0.12299999E4 +rem (~0.123E4, 0.31415927E1) = ~0.16372383E1 +* (~0.123E4, 0.27182817E1) = ~0.33434866E4 ++ (~0.123E4, 0.27182817E1) = ~0.12272817E4 +- (~0.123E4, 0.27182817E1) = ~0.12327183E4 +/ (~0.123E4, 0.27182817E1) = ~0.45249173E3 +nextAfter (~0.123E4, 0.27182817E1) = ~0.12299999E4 +rem (~0.123E4, 0.27182817E1) = ~0.13366508E1 +* (~0.123E4, 0.123E1) = ~0.15129E4 ++ (~0.123E4, 0.123E1) = ~0.122877E4 +- (~0.123E4, 0.123E1) = ~0.123123E4 +/ (~0.123E4, 0.123E1) = ~0.1E4 +nextAfter (~0.123E4, 0.123E1) = ~0.12299999E4 +rem (~0.123E4, 0.123E1) = 0.19073486E~4 +* (~0.123E4, 0.123) = ~0.15129001E3 ++ (~0.123E4, 0.123) = ~0.1229877E4 +- (~0.123E4, 0.123) = ~0.1230123E4 +/ (~0.123E4, 0.123) = ~0.1E5 +nextAfter (~0.123E4, 0.123) = ~0.12299999E4 +rem (~0.123E4, 0.123) = 0.33974648E~4 +* (~0.123E4, 0.123E~2) = ~0.15129001E1 ++ (~0.123E4, 0.123E~2) = ~0.12299988E4 +- (~0.123E4, 0.123E~2) = ~0.12300012E4 +/ (~0.123E4, 0.123E~2) = ~0.99999994E6 +nextAfter (~0.123E4, 0.123E~2) = ~0.12299999E4 +rem (~0.123E4, 0.123E~2) = ~0.1177399E~2 +* (~0.123E4, 0.11754944E~37) = ~0.1445858E~34 ++ (~0.123E4, 0.11754944E~37) = ~0.123E4 +- (~0.123E4, 0.11754944E~37) = ~0.123E4 +/ (~0.123E4, 0.11754944E~37) = ~inf +nextAfter (~0.123E4, 0.11754944E~37) = ~0.12299999E4 +rem (~0.123E4, 0.11754944E~37) = inf +* (~0.123E4, 0.5877472E~38) = ~0.722929E~35 ++ (~0.123E4, 0.5877472E~38) = ~0.123E4 +- (~0.123E4, 0.5877472E~38) = ~0.123E4 +/ (~0.123E4, 0.5877472E~38) = ~inf +nextAfter (~0.123E4, 0.5877472E~38) = ~0.12299999E4 +rem (~0.123E4, 0.5877472E~38) = inf +* (~0.123E4, 0.1E~44) = ~0.1724E~41 ++ (~0.123E4, 0.1E~44) = ~0.123E4 +- (~0.123E4, 0.1E~44) = ~0.123E4 +/ (~0.123E4, 0.1E~44) = ~inf +nextAfter (~0.123E4, 0.1E~44) = ~0.12299999E4 +rem (~0.123E4, 0.1E~44) = inf +* (~0.123E4, 0.0) = ~0.0 ++ (~0.123E4, 0.0) = ~0.123E4 +- (~0.123E4, 0.0) = ~0.123E4 +/ (~0.123E4, 0.0) = ~inf +nextAfter (~0.123E4, 0.0) = ~0.12299999E4 +rem (~0.123E4, 0.0) = nan +* (~0.123E4, ~0.34028235E39) = inf ++ (~0.123E4, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E4, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E4, ~0.34028235E39) = 0.36146455E~35 +nextAfter (~0.123E4, ~0.34028235E39) = ~0.12300001E4 +rem (~0.123E4, ~0.34028235E39) = ~0.123E4 +* (~0.123E4, ~0.17014117E39) = inf ++ (~0.123E4, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E4, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E4, ~0.17014117E39) = 0.7229291E~35 +nextAfter (~0.123E4, ~0.17014117E39) = ~0.12300001E4 +rem (~0.123E4, ~0.17014117E39) = ~0.123E4 +* (~0.123E4, ~0.123E4) = 0.15129E7 ++ (~0.123E4, ~0.123E4) = ~0.246E4 +- (~0.123E4, ~0.123E4) = 0.0 +/ (~0.123E4, ~0.123E4) = 0.1E1 +nextAfter (~0.123E4, ~0.123E4) = ~0.123E4 +rem (~0.123E4, ~0.123E4) = 0.0 +* (~0.123E4, ~0.123E2) = 0.15129E5 ++ (~0.123E4, ~0.123E2) = ~0.12423E4 +- (~0.123E4, ~0.123E2) = ~0.12177E4 +/ (~0.123E4, ~0.123E2) = 0.1E3 +nextAfter (~0.123E4, ~0.123E2) = ~0.12299999E4 +rem (~0.123E4, ~0.123E2) = 0.19073486E~4 +* (~0.123E4, ~0.31415927E1) = 0.38641592E4 ++ (~0.123E4, ~0.31415927E1) = ~0.12331416E4 +- (~0.123E4, ~0.31415927E1) = ~0.12268584E4 +/ (~0.123E4, ~0.31415927E1) = 0.39152115E3 +nextAfter (~0.123E4, ~0.31415927E1) = ~0.12299999E4 +rem (~0.123E4, ~0.31415927E1) = ~0.16372383E1 +* (~0.123E4, ~0.27182817E1) = 0.33434866E4 ++ (~0.123E4, ~0.27182817E1) = ~0.12327183E4 +- (~0.123E4, ~0.27182817E1) = ~0.12272817E4 +/ (~0.123E4, ~0.27182817E1) = 0.45249173E3 +nextAfter (~0.123E4, ~0.27182817E1) = ~0.12299999E4 +rem (~0.123E4, ~0.27182817E1) = ~0.13366508E1 +* (~0.123E4, ~0.123E1) = 0.15129E4 ++ (~0.123E4, ~0.123E1) = ~0.123123E4 +- (~0.123E4, ~0.123E1) = ~0.122877E4 +/ (~0.123E4, ~0.123E1) = 0.1E4 +nextAfter (~0.123E4, ~0.123E1) = ~0.12299999E4 +rem (~0.123E4, ~0.123E1) = 0.19073486E~4 +* (~0.123E4, ~0.123) = 0.15129001E3 ++ (~0.123E4, ~0.123) = ~0.1230123E4 +- (~0.123E4, ~0.123) = ~0.1229877E4 +/ (~0.123E4, ~0.123) = 0.1E5 +nextAfter (~0.123E4, ~0.123) = ~0.12299999E4 +rem (~0.123E4, ~0.123) = 0.33974648E~4 +* (~0.123E4, ~0.123E~2) = 0.15129001E1 ++ (~0.123E4, ~0.123E~2) = ~0.12300012E4 +- (~0.123E4, ~0.123E~2) = ~0.12299988E4 +/ (~0.123E4, ~0.123E~2) = 0.99999994E6 +nextAfter (~0.123E4, ~0.123E~2) = ~0.12299999E4 +rem (~0.123E4, ~0.123E~2) = ~0.1177399E~2 +* (~0.123E4, ~0.11754944E~37) = 0.1445858E~34 ++ (~0.123E4, ~0.11754944E~37) = ~0.123E4 +- (~0.123E4, ~0.11754944E~37) = ~0.123E4 +/ (~0.123E4, ~0.11754944E~37) = inf +nextAfter (~0.123E4, ~0.11754944E~37) = ~0.12299999E4 +rem (~0.123E4, ~0.11754944E~37) = inf +* (~0.123E4, ~0.5877472E~38) = 0.722929E~35 ++ (~0.123E4, ~0.5877472E~38) = ~0.123E4 +- (~0.123E4, ~0.5877472E~38) = ~0.123E4 +/ (~0.123E4, ~0.5877472E~38) = inf +nextAfter (~0.123E4, ~0.5877472E~38) = ~0.12299999E4 +rem (~0.123E4, ~0.5877472E~38) = inf +* (~0.123E4, ~0.1E~44) = 0.1724E~41 ++ (~0.123E4, ~0.1E~44) = ~0.123E4 +- (~0.123E4, ~0.1E~44) = ~0.123E4 +/ (~0.123E4, ~0.1E~44) = inf +nextAfter (~0.123E4, ~0.1E~44) = ~0.12299999E4 +rem (~0.123E4, ~0.1E~44) = inf +* (~0.123E4, ~0.0) = 0.0 ++ (~0.123E4, ~0.0) = ~0.123E4 +- (~0.123E4, ~0.0) = ~0.123E4 +/ (~0.123E4, ~0.0) = inf +nextAfter (~0.123E4, ~0.0) = ~0.12299999E4 +rem (~0.123E4, ~0.0) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E4, ~inf) = inf ++ (~0.123E4, ~inf) = ~inf +- (~0.123E4, ~inf) = inf +/ (~0.123E4, ~inf) = 0.0 +nextAfter (~0.123E4, ~inf) = ~0.12300001E4 +rem (~0.123E4, ~inf) = ~0.123E4 +* (~0.123E4, nan) = nan ++ (~0.123E4, nan) = nan +- (~0.123E4, nan) = nan +/ (~0.123E4, nan) = nan +nextAfter (~0.123E4, nan) = nan +rem (~0.123E4, nan) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E2, 0.34028235E39) = ~inf ++ (~0.123E2, 0.34028235E39) = 0.34028235E39 +- (~0.123E2, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E2, 0.34028235E39) = ~0.36146455E~37 +nextAfter (~0.123E2, 0.34028235E39) = ~0.12299999E2 +rem (~0.123E2, 0.34028235E39) = ~0.123E2 +* (~0.123E2, 0.17014117E39) = ~inf ++ (~0.123E2, 0.17014117E39) = 0.17014117E39 +- (~0.123E2, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E2, 0.17014117E39) = ~0.7229291E~37 +nextAfter (~0.123E2, 0.17014117E39) = ~0.12299999E2 +rem (~0.123E2, 0.17014117E39) = ~0.123E2 +* (~0.123E2, 0.123E4) = ~0.15129E5 ++ (~0.123E2, 0.123E4) = 0.12177E4 +- (~0.123E2, 0.123E4) = ~0.12423E4 +/ (~0.123E2, 0.123E4) = ~0.1E~1 +nextAfter (~0.123E2, 0.123E4) = ~0.12299999E2 +rem (~0.123E2, 0.123E4) = ~0.123E2 +* (~0.123E2, 0.123E2) = ~0.15129001E3 ++ (~0.123E2, 0.123E2) = 0.0 +- (~0.123E2, 0.123E2) = ~0.246E2 +/ (~0.123E2, 0.123E2) = ~0.1E1 +nextAfter (~0.123E2, 0.123E2) = ~0.12299999E2 +rem (~0.123E2, 0.123E2) = 0.0 +* (~0.123E2, 0.31415927E1) = ~0.3864159E2 ++ (~0.123E2, 0.31415927E1) = ~0.9158407E1 +- (~0.123E2, 0.31415927E1) = ~0.15441593E2 +/ (~0.123E2, 0.31415927E1) = ~0.39152114E1 +nextAfter (~0.123E2, 0.31415927E1) = ~0.12299999E2 +rem (~0.123E2, 0.31415927E1) = ~0.2875222E1 +* (~0.123E2, 0.27182817E1) = ~0.33434868E2 ++ (~0.123E2, 0.27182817E1) = ~0.9581718E1 +- (~0.123E2, 0.27182817E1) = ~0.15018282E2 +/ (~0.123E2, 0.27182817E1) = ~0.4524917E1 +nextAfter (~0.123E2, 0.27182817E1) = ~0.12299999E2 +rem (~0.123E2, 0.27182817E1) = ~0.14268732E1 +* (~0.123E2, 0.123E1) = ~0.15129001E2 ++ (~0.123E2, 0.123E1) = ~0.1107E2 +- (~0.123E2, 0.123E1) = ~0.13530001E2 +/ (~0.123E2, 0.123E1) = ~0.1E2 +nextAfter (~0.123E2, 0.123E1) = ~0.12299999E2 +rem (~0.123E2, 0.123E1) = 0.0 +* (~0.123E2, 0.123) = ~0.15129001E1 ++ (~0.123E2, 0.123) = ~0.12177E2 +- (~0.123E2, 0.123) = ~0.12423E2 +/ (~0.123E2, 0.123) = ~0.1E3 +nextAfter (~0.123E2, 0.123) = ~0.12299999E2 +rem (~0.123E2, 0.123) = 0.14901161E~6 +* (~0.123E2, 0.123E~2) = ~0.15129001E~1 ++ (~0.123E2, 0.123E~2) = ~0.1229877E2 +- (~0.123E2, 0.123E~2) = ~0.1230123E2 +/ (~0.123E2, 0.123E~2) = ~0.1E5 +nextAfter (~0.123E2, 0.123E~2) = ~0.12299999E2 +rem (~0.123E2, 0.123E~2) = 0.33527613E~6 +* (~0.123E2, 0.11754944E~37) = ~0.14458581E~36 ++ (~0.123E2, 0.11754944E~37) = ~0.123E2 +- (~0.123E2, 0.11754944E~37) = ~0.123E2 +/ (~0.123E2, 0.11754944E~37) = ~inf +nextAfter (~0.123E2, 0.11754944E~37) = ~0.12299999E2 +rem (~0.123E2, 0.11754944E~37) = inf +* (~0.123E2, 0.5877472E~38) = ~0.72292904E~37 ++ (~0.123E2, 0.5877472E~38) = ~0.123E2 +- (~0.123E2, 0.5877472E~38) = ~0.123E2 +/ (~0.123E2, 0.5877472E~38) = ~inf +nextAfter (~0.123E2, 0.5877472E~38) = ~0.12299999E2 +rem (~0.123E2, 0.5877472E~38) = inf +* (~0.123E2, 0.1E~44) = ~0.17E~43 ++ (~0.123E2, 0.1E~44) = ~0.123E2 +- (~0.123E2, 0.1E~44) = ~0.123E2 +/ (~0.123E2, 0.1E~44) = ~inf +nextAfter (~0.123E2, 0.1E~44) = ~0.12299999E2 +rem (~0.123E2, 0.1E~44) = inf +* (~0.123E2, 0.0) = ~0.0 ++ (~0.123E2, 0.0) = ~0.123E2 +- (~0.123E2, 0.0) = ~0.123E2 +/ (~0.123E2, 0.0) = ~inf +nextAfter (~0.123E2, 0.0) = ~0.12299999E2 +rem (~0.123E2, 0.0) = nan +* (~0.123E2, ~0.34028235E39) = inf ++ (~0.123E2, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E2, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E2, ~0.34028235E39) = 0.36146455E~37 +nextAfter (~0.123E2, ~0.34028235E39) = ~0.12300001E2 +rem (~0.123E2, ~0.34028235E39) = ~0.123E2 +* (~0.123E2, ~0.17014117E39) = inf ++ (~0.123E2, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E2, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E2, ~0.17014117E39) = 0.7229291E~37 +nextAfter (~0.123E2, ~0.17014117E39) = ~0.12300001E2 +rem (~0.123E2, ~0.17014117E39) = ~0.123E2 +* (~0.123E2, ~0.123E4) = 0.15129E5 ++ (~0.123E2, ~0.123E4) = ~0.12423E4 +- (~0.123E2, ~0.123E4) = 0.12177E4 +/ (~0.123E2, ~0.123E4) = 0.1E~1 +nextAfter (~0.123E2, ~0.123E4) = ~0.12300001E2 +rem (~0.123E2, ~0.123E4) = ~0.123E2 +* (~0.123E2, ~0.123E2) = 0.15129001E3 ++ (~0.123E2, ~0.123E2) = ~0.246E2 +- (~0.123E2, ~0.123E2) = 0.0 +/ (~0.123E2, ~0.123E2) = 0.1E1 +nextAfter (~0.123E2, ~0.123E2) = ~0.123E2 +rem (~0.123E2, ~0.123E2) = 0.0 +* (~0.123E2, ~0.31415927E1) = 0.3864159E2 ++ (~0.123E2, ~0.31415927E1) = ~0.15441593E2 +- (~0.123E2, ~0.31415927E1) = ~0.9158407E1 +/ (~0.123E2, ~0.31415927E1) = 0.39152114E1 +nextAfter (~0.123E2, ~0.31415927E1) = ~0.12299999E2 +rem (~0.123E2, ~0.31415927E1) = ~0.2875222E1 +* (~0.123E2, ~0.27182817E1) = 0.33434868E2 ++ (~0.123E2, ~0.27182817E1) = ~0.15018282E2 +- (~0.123E2, ~0.27182817E1) = ~0.9581718E1 +/ (~0.123E2, ~0.27182817E1) = 0.4524917E1 +nextAfter (~0.123E2, ~0.27182817E1) = ~0.12299999E2 +rem (~0.123E2, ~0.27182817E1) = ~0.14268732E1 +* (~0.123E2, ~0.123E1) = 0.15129001E2 ++ (~0.123E2, ~0.123E1) = ~0.13530001E2 +- (~0.123E2, ~0.123E1) = ~0.1107E2 +/ (~0.123E2, ~0.123E1) = 0.1E2 +nextAfter (~0.123E2, ~0.123E1) = ~0.12299999E2 +rem (~0.123E2, ~0.123E1) = 0.0 +* (~0.123E2, ~0.123) = 0.15129001E1 ++ (~0.123E2, ~0.123) = ~0.12423E2 +- (~0.123E2, ~0.123) = ~0.12177E2 +/ (~0.123E2, ~0.123) = 0.1E3 +nextAfter (~0.123E2, ~0.123) = ~0.12299999E2 +rem (~0.123E2, ~0.123) = 0.14901161E~6 +* (~0.123E2, ~0.123E~2) = 0.15129001E~1 ++ (~0.123E2, ~0.123E~2) = ~0.1230123E2 +- (~0.123E2, ~0.123E~2) = ~0.1229877E2 +/ (~0.123E2, ~0.123E~2) = 0.1E5 +nextAfter (~0.123E2, ~0.123E~2) = ~0.12299999E2 +rem (~0.123E2, ~0.123E~2) = 0.33527613E~6 +* (~0.123E2, ~0.11754944E~37) = 0.14458581E~36 ++ (~0.123E2, ~0.11754944E~37) = ~0.123E2 +- (~0.123E2, ~0.11754944E~37) = ~0.123E2 +/ (~0.123E2, ~0.11754944E~37) = inf +nextAfter (~0.123E2, ~0.11754944E~37) = ~0.12299999E2 +rem (~0.123E2, ~0.11754944E~37) = inf +* (~0.123E2, ~0.5877472E~38) = 0.72292904E~37 ++ (~0.123E2, ~0.5877472E~38) = ~0.123E2 +- (~0.123E2, ~0.5877472E~38) = ~0.123E2 +/ (~0.123E2, ~0.5877472E~38) = inf +nextAfter (~0.123E2, ~0.5877472E~38) = ~0.12299999E2 +rem (~0.123E2, ~0.5877472E~38) = inf +* (~0.123E2, ~0.1E~44) = 0.17E~43 ++ (~0.123E2, ~0.1E~44) = ~0.123E2 +- (~0.123E2, ~0.1E~44) = ~0.123E2 +/ (~0.123E2, ~0.1E~44) = inf +nextAfter (~0.123E2, ~0.1E~44) = ~0.12299999E2 +rem (~0.123E2, ~0.1E~44) = inf +* (~0.123E2, ~0.0) = 0.0 ++ (~0.123E2, ~0.0) = ~0.123E2 +- (~0.123E2, ~0.0) = ~0.123E2 +/ (~0.123E2, ~0.0) = inf +nextAfter (~0.123E2, ~0.0) = ~0.12299999E2 +rem (~0.123E2, ~0.0) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.123E2, ~inf) = inf ++ (~0.123E2, ~inf) = ~inf +- (~0.123E2, ~inf) = inf +/ (~0.123E2, ~inf) = 0.0 +nextAfter (~0.123E2, ~inf) = ~0.12300001E2 +rem (~0.123E2, ~inf) = ~0.123E2 +* (~0.123E2, nan) = nan ++ (~0.123E2, nan) = nan +- (~0.123E2, nan) = nan +/ (~0.123E2, nan) = nan +nextAfter (~0.123E2, nan) = nan +rem (~0.123E2, nan) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.31415927E1, 0.34028235E39) = ~inf ++ (~0.31415927E1, 0.34028235E39) = 0.34028235E39 +- (~0.31415927E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.31415927E1, 0.34028235E39) = ~0.9232312E~38 +nextAfter (~0.31415927E1, 0.34028235E39) = ~0.31415925E1 +rem (~0.31415927E1, 0.34028235E39) = ~0.31415927E1 +* (~0.31415927E1, 0.17014117E39) = ~inf ++ (~0.31415927E1, 0.17014117E39) = 0.17014117E39 +- (~0.31415927E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.31415927E1, 0.17014117E39) = ~0.18464624E~37 +nextAfter (~0.31415927E1, 0.17014117E39) = ~0.31415925E1 +rem (~0.31415927E1, 0.17014117E39) = ~0.31415927E1 +* (~0.31415927E1, 0.123E4) = ~0.38641592E4 ++ (~0.31415927E1, 0.123E4) = 0.12268584E4 +- (~0.31415927E1, 0.123E4) = ~0.12331416E4 +/ (~0.31415927E1, 0.123E4) = ~0.25541405E~2 +nextAfter (~0.31415927E1, 0.123E4) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E4) = ~0.31415927E1 +* (~0.31415927E1, 0.123E2) = ~0.3864159E2 ++ (~0.31415927E1, 0.123E2) = 0.9158407E1 +- (~0.31415927E1, 0.123E2) = ~0.15441593E2 +/ (~0.31415927E1, 0.123E2) = ~0.25541404 +nextAfter (~0.31415927E1, 0.123E2) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E2) = ~0.31415927E1 +* (~0.31415927E1, 0.31415927E1) = ~0.9869605E1 ++ (~0.31415927E1, 0.31415927E1) = 0.0 +- (~0.31415927E1, 0.31415927E1) = ~0.62831855E1 +/ (~0.31415927E1, 0.31415927E1) = ~0.1E1 +nextAfter (~0.31415927E1, 0.31415927E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.31415927E1) = 0.0 +* (~0.31415927E1, 0.27182817E1) = ~0.8539734E1 ++ (~0.31415927E1, 0.27182817E1) = ~0.423311 +- (~0.31415927E1, 0.27182817E1) = ~0.58598747E1 +/ (~0.31415927E1, 0.27182817E1) = ~0.11557274E1 +nextAfter (~0.31415927E1, 0.27182817E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.27182817E1) = ~0.423311 +* (~0.31415927E1, 0.123E1) = ~0.3864159E1 ++ (~0.31415927E1, 0.123E1) = ~0.19115927E1 +- (~0.31415927E1, 0.123E1) = ~0.43715925E1 +/ (~0.31415927E1, 0.123E1) = ~0.25541403E1 +nextAfter (~0.31415927E1, 0.123E1) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E1) = ~0.6815927 +* (~0.31415927E1, 0.123) = ~0.38641593 ++ (~0.31415927E1, 0.123) = ~0.30185928E1 +- (~0.31415927E1, 0.123) = ~0.32645926E1 +/ (~0.31415927E1, 0.123) = ~0.25541403E2 +nextAfter (~0.31415927E1, 0.123) = ~0.31415925E1 +rem (~0.31415927E1, 0.123) = ~0.66592656E~1 +* (~0.31415927E1, 0.123E~2) = ~0.38641593E~2 ++ (~0.31415927E1, 0.123E~2) = ~0.31403627E1 +- (~0.31415927E1, 0.123E~2) = ~0.31428227E1 +/ (~0.31415927E1, 0.123E~2) = ~0.25541404E4 +nextAfter (~0.31415927E1, 0.123E~2) = ~0.31415925E1 +rem (~0.31415927E1, 0.123E~2) = ~0.17260667E~3 +* (~0.31415927E1, 0.11754944E~37) = ~0.36929245E~37 ++ (~0.31415927E1, 0.11754944E~37) = ~0.31415927E1 +- (~0.31415927E1, 0.11754944E~37) = ~0.31415927E1 +/ (~0.31415927E1, 0.11754944E~37) = ~0.26725715E39 +nextAfter (~0.31415927E1, 0.11754944E~37) = ~0.31415925E1 +rem (~0.31415927E1, 0.11754944E~37) = 0.0 +* (~0.31415927E1, 0.5877472E~38) = ~0.18464623E~37 ++ (~0.31415927E1, 0.5877472E~38) = ~0.31415927E1 +- (~0.31415927E1, 0.5877472E~38) = ~0.31415927E1 +/ (~0.31415927E1, 0.5877472E~38) = ~inf +nextAfter (~0.31415927E1, 0.5877472E~38) = ~0.31415925E1 +rem (~0.31415927E1, 0.5877472E~38) = inf +* (~0.31415927E1, 0.1E~44) = ~0.4E~44 ++ (~0.31415927E1, 0.1E~44) = ~0.31415927E1 +- (~0.31415927E1, 0.1E~44) = ~0.31415927E1 +/ (~0.31415927E1, 0.1E~44) = ~inf +nextAfter (~0.31415927E1, 0.1E~44) = ~0.31415925E1 +rem (~0.31415927E1, 0.1E~44) = inf +* (~0.31415927E1, 0.0) = ~0.0 ++ (~0.31415927E1, 0.0) = ~0.31415927E1 +- (~0.31415927E1, 0.0) = ~0.31415927E1 +/ (~0.31415927E1, 0.0) = ~inf +nextAfter (~0.31415927E1, 0.0) = ~0.31415925E1 +rem (~0.31415927E1, 0.0) = nan +* (~0.31415927E1, ~0.34028235E39) = inf ++ (~0.31415927E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.31415927E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.31415927E1, ~0.34028235E39) = 0.9232312E~38 +nextAfter (~0.31415927E1, ~0.34028235E39) = ~0.3141593E1 +rem (~0.31415927E1, ~0.34028235E39) = ~0.31415927E1 +* (~0.31415927E1, ~0.17014117E39) = inf ++ (~0.31415927E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.31415927E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.31415927E1, ~0.17014117E39) = 0.18464624E~37 +nextAfter (~0.31415927E1, ~0.17014117E39) = ~0.3141593E1 +rem (~0.31415927E1, ~0.17014117E39) = ~0.31415927E1 +* (~0.31415927E1, ~0.123E4) = 0.38641592E4 ++ (~0.31415927E1, ~0.123E4) = ~0.12331416E4 +- (~0.31415927E1, ~0.123E4) = 0.12268584E4 +/ (~0.31415927E1, ~0.123E4) = 0.25541405E~2 +nextAfter (~0.31415927E1, ~0.123E4) = ~0.3141593E1 +rem (~0.31415927E1, ~0.123E4) = ~0.31415927E1 +* (~0.31415927E1, ~0.123E2) = 0.3864159E2 ++ (~0.31415927E1, ~0.123E2) = ~0.15441593E2 +- (~0.31415927E1, ~0.123E2) = 0.9158407E1 +/ (~0.31415927E1, ~0.123E2) = 0.25541404 +nextAfter (~0.31415927E1, ~0.123E2) = ~0.3141593E1 +rem (~0.31415927E1, ~0.123E2) = ~0.31415927E1 +* (~0.31415927E1, ~0.31415927E1) = 0.9869605E1 ++ (~0.31415927E1, ~0.31415927E1) = ~0.62831855E1 +- (~0.31415927E1, ~0.31415927E1) = 0.0 +/ (~0.31415927E1, ~0.31415927E1) = 0.1E1 +nextAfter (~0.31415927E1, ~0.31415927E1) = ~0.31415927E1 +rem (~0.31415927E1, ~0.31415927E1) = 0.0 +* (~0.31415927E1, ~0.27182817E1) = 0.8539734E1 ++ (~0.31415927E1, ~0.27182817E1) = ~0.58598747E1 +- (~0.31415927E1, ~0.27182817E1) = ~0.423311 +/ (~0.31415927E1, ~0.27182817E1) = 0.11557274E1 +nextAfter (~0.31415927E1, ~0.27182817E1) = ~0.31415925E1 +rem (~0.31415927E1, ~0.27182817E1) = ~0.423311 +* (~0.31415927E1, ~0.123E1) = 0.3864159E1 ++ (~0.31415927E1, ~0.123E1) = ~0.43715925E1 +- (~0.31415927E1, ~0.123E1) = ~0.19115927E1 +/ (~0.31415927E1, ~0.123E1) = 0.25541403E1 +nextAfter (~0.31415927E1, ~0.123E1) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123E1) = ~0.6815927 +* (~0.31415927E1, ~0.123) = 0.38641593 ++ (~0.31415927E1, ~0.123) = ~0.32645926E1 +- (~0.31415927E1, ~0.123) = ~0.30185928E1 +/ (~0.31415927E1, ~0.123) = 0.25541403E2 +nextAfter (~0.31415927E1, ~0.123) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123) = ~0.66592656E~1 +* (~0.31415927E1, ~0.123E~2) = 0.38641593E~2 ++ (~0.31415927E1, ~0.123E~2) = ~0.31428227E1 +- (~0.31415927E1, ~0.123E~2) = ~0.31403627E1 +/ (~0.31415927E1, ~0.123E~2) = 0.25541404E4 +nextAfter (~0.31415927E1, ~0.123E~2) = ~0.31415925E1 +rem (~0.31415927E1, ~0.123E~2) = ~0.17260667E~3 +* (~0.31415927E1, ~0.11754944E~37) = 0.36929245E~37 ++ (~0.31415927E1, ~0.11754944E~37) = ~0.31415927E1 +- (~0.31415927E1, ~0.11754944E~37) = ~0.31415927E1 +/ (~0.31415927E1, ~0.11754944E~37) = 0.26725715E39 +nextAfter (~0.31415927E1, ~0.11754944E~37) = ~0.31415925E1 +rem (~0.31415927E1, ~0.11754944E~37) = 0.0 +* (~0.31415927E1, ~0.5877472E~38) = 0.18464623E~37 ++ (~0.31415927E1, ~0.5877472E~38) = ~0.31415927E1 +- (~0.31415927E1, ~0.5877472E~38) = ~0.31415927E1 +/ (~0.31415927E1, ~0.5877472E~38) = inf +nextAfter (~0.31415927E1, ~0.5877472E~38) = ~0.31415925E1 +rem (~0.31415927E1, ~0.5877472E~38) = inf +* (~0.31415927E1, ~0.1E~44) = 0.4E~44 ++ (~0.31415927E1, ~0.1E~44) = ~0.31415927E1 +- (~0.31415927E1, ~0.1E~44) = ~0.31415927E1 +/ (~0.31415927E1, ~0.1E~44) = inf +nextAfter (~0.31415927E1, ~0.1E~44) = ~0.31415925E1 +rem (~0.31415927E1, ~0.1E~44) = inf +* (~0.31415927E1, ~0.0) = 0.0 ++ (~0.31415927E1, ~0.0) = ~0.31415927E1 +- (~0.31415927E1, ~0.0) = ~0.31415927E1 +/ (~0.31415927E1, ~0.0) = inf +nextAfter (~0.31415927E1, ~0.0) = ~0.31415925E1 +rem (~0.31415927E1, ~0.0) = nan +* (~0.31415927E1, inf) = ~inf ++ (~0.31415927E1, inf) = inf +- (~0.31415927E1, inf) = ~inf +/ (~0.31415927E1, inf) = ~0.0 +nextAfter (~0.31415927E1, inf) = ~0.31415925E1 +rem (~0.31415927E1, inf) = ~0.31415927E1 +* (~0.31415927E1, ~inf) = inf ++ (~0.31415927E1, ~inf) = ~inf +- (~0.31415927E1, ~inf) = inf +/ (~0.31415927E1, ~inf) = 0.0 +nextAfter (~0.31415927E1, ~inf) = ~0.3141593E1 +rem (~0.31415927E1, ~inf) = ~0.31415927E1 +* (~0.31415927E1, nan) = nan ++ (~0.31415927E1, nan) = nan +- (~0.31415927E1, nan) = nan +/ (~0.31415927E1, nan) = nan +nextAfter (~0.31415927E1, nan) = nan +rem (~0.31415927E1, nan) = nan +* (~0.31415927E1, inf) = ~inf ++ (~0.31415927E1, inf) = inf +- (~0.31415927E1, inf) = ~inf +/ (~0.31415927E1, inf) = ~0.0 +nextAfter (~0.31415927E1, inf) = ~0.31415925E1 +rem (~0.31415927E1, inf) = ~0.31415927E1 +* (~0.27182817E1, 0.34028235E39) = ~inf ++ (~0.27182817E1, 0.34028235E39) = 0.34028235E39 +- (~0.27182817E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.27182817E1, 0.34028235E39) = ~0.7988312E~38 +nextAfter (~0.27182817E1, 0.34028235E39) = ~0.27182815E1 +rem (~0.27182817E1, 0.34028235E39) = ~0.27182817E1 +* (~0.27182817E1, 0.17014117E39) = ~inf ++ (~0.27182817E1, 0.17014117E39) = 0.17014117E39 +- (~0.27182817E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.27182817E1, 0.17014117E39) = ~0.15976626E~37 +nextAfter (~0.27182817E1, 0.17014117E39) = ~0.27182815E1 +rem (~0.27182817E1, 0.17014117E39) = ~0.27182817E1 +* (~0.27182817E1, 0.123E4) = ~0.33434866E4 ++ (~0.27182817E1, 0.123E4) = 0.12272817E4 +- (~0.27182817E1, 0.123E4) = ~0.12327183E4 +/ (~0.27182817E1, 0.123E4) = ~0.22099852E~2 +nextAfter (~0.27182817E1, 0.123E4) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E4) = ~0.27182817E1 +* (~0.27182817E1, 0.123E2) = ~0.33434868E2 ++ (~0.27182817E1, 0.123E2) = 0.9581718E1 +- (~0.27182817E1, 0.123E2) = ~0.15018282E2 +/ (~0.27182817E1, 0.123E2) = ~0.22099851 +nextAfter (~0.27182817E1, 0.123E2) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E2) = ~0.27182817E1 +* (~0.27182817E1, 0.31415927E1) = ~0.8539734E1 ++ (~0.27182817E1, 0.31415927E1) = 0.423311 +- (~0.27182817E1, 0.31415927E1) = ~0.58598747E1 +/ (~0.27182817E1, 0.31415927E1) = ~0.86525595 +nextAfter (~0.27182817E1, 0.31415927E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.31415927E1) = ~0.27182817E1 +* (~0.27182817E1, 0.27182817E1) = ~0.73890557E1 ++ (~0.27182817E1, 0.27182817E1) = 0.0 +- (~0.27182817E1, 0.27182817E1) = ~0.54365635E1 +/ (~0.27182817E1, 0.27182817E1) = ~0.1E1 +nextAfter (~0.27182817E1, 0.27182817E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.27182817E1) = 0.0 +* (~0.27182817E1, 0.123E1) = ~0.33434865E1 ++ (~0.27182817E1, 0.123E1) = ~0.14882817E1 +- (~0.27182817E1, 0.123E1) = ~0.39482818E1 +/ (~0.27182817E1, 0.123E1) = ~0.2209985E1 +nextAfter (~0.27182817E1, 0.123E1) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E1) = ~0.2582817 +* (~0.27182817E1, 0.123) = ~0.33434868 ++ (~0.27182817E1, 0.123) = ~0.25952818E1 +- (~0.27182817E1, 0.123) = ~0.28412817E1 +/ (~0.27182817E1, 0.123) = ~0.22099852E2 +nextAfter (~0.27182817E1, 0.123) = ~0.27182815E1 +rem (~0.27182817E1, 0.123) = ~0.12281671E~1 +* (~0.27182817E1, 0.123E~2) = ~0.33434867E~2 ++ (~0.27182817E1, 0.123E~2) = ~0.27170517E1 +- (~0.27182817E1, 0.123E~2) = ~0.27195117E1 +/ (~0.27182817E1, 0.123E~2) = ~0.2209985E4 +nextAfter (~0.27182817E1, 0.123E~2) = ~0.27182815E1 +rem (~0.27182817E1, 0.123E~2) = ~0.12116297E~2 +* (~0.27182817E1, 0.11754944E~37) = ~0.31953248E~37 ++ (~0.27182817E1, 0.11754944E~37) = ~0.27182817E1 +- (~0.27182817E1, 0.11754944E~37) = ~0.27182817E1 +/ (~0.27182817E1, 0.11754944E~37) = ~0.23124584E39 +nextAfter (~0.27182817E1, 0.11754944E~37) = ~0.27182815E1 +rem (~0.27182817E1, 0.11754944E~37) = 0.0 +* (~0.27182817E1, 0.5877472E~38) = ~0.15976624E~37 ++ (~0.27182817E1, 0.5877472E~38) = ~0.27182817E1 +- (~0.27182817E1, 0.5877472E~38) = ~0.27182817E1 +/ (~0.27182817E1, 0.5877472E~38) = ~inf +nextAfter (~0.27182817E1, 0.5877472E~38) = ~0.27182815E1 +rem (~0.27182817E1, 0.5877472E~38) = inf +* (~0.27182817E1, 0.1E~44) = ~0.4E~44 ++ (~0.27182817E1, 0.1E~44) = ~0.27182817E1 +- (~0.27182817E1, 0.1E~44) = ~0.27182817E1 +/ (~0.27182817E1, 0.1E~44) = ~inf +nextAfter (~0.27182817E1, 0.1E~44) = ~0.27182815E1 +rem (~0.27182817E1, 0.1E~44) = inf +* (~0.27182817E1, 0.0) = ~0.0 ++ (~0.27182817E1, 0.0) = ~0.27182817E1 +- (~0.27182817E1, 0.0) = ~0.27182817E1 +/ (~0.27182817E1, 0.0) = ~inf +nextAfter (~0.27182817E1, 0.0) = ~0.27182815E1 +rem (~0.27182817E1, 0.0) = nan +* (~0.27182817E1, ~0.34028235E39) = inf ++ (~0.27182817E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.27182817E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.27182817E1, ~0.34028235E39) = 0.7988312E~38 +nextAfter (~0.27182817E1, ~0.34028235E39) = ~0.2718282E1 +rem (~0.27182817E1, ~0.34028235E39) = ~0.27182817E1 +* (~0.27182817E1, ~0.17014117E39) = inf ++ (~0.27182817E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.27182817E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.27182817E1, ~0.17014117E39) = 0.15976626E~37 +nextAfter (~0.27182817E1, ~0.17014117E39) = ~0.2718282E1 +rem (~0.27182817E1, ~0.17014117E39) = ~0.27182817E1 +* (~0.27182817E1, ~0.123E4) = 0.33434866E4 ++ (~0.27182817E1, ~0.123E4) = ~0.12327183E4 +- (~0.27182817E1, ~0.123E4) = 0.12272817E4 +/ (~0.27182817E1, ~0.123E4) = 0.22099852E~2 +nextAfter (~0.27182817E1, ~0.123E4) = ~0.2718282E1 +rem (~0.27182817E1, ~0.123E4) = ~0.27182817E1 +* (~0.27182817E1, ~0.123E2) = 0.33434868E2 ++ (~0.27182817E1, ~0.123E2) = ~0.15018282E2 +- (~0.27182817E1, ~0.123E2) = 0.9581718E1 +/ (~0.27182817E1, ~0.123E2) = 0.22099851 +nextAfter (~0.27182817E1, ~0.123E2) = ~0.2718282E1 +rem (~0.27182817E1, ~0.123E2) = ~0.27182817E1 +* (~0.27182817E1, ~0.31415927E1) = 0.8539734E1 ++ (~0.27182817E1, ~0.31415927E1) = ~0.58598747E1 +- (~0.27182817E1, ~0.31415927E1) = 0.423311 +/ (~0.27182817E1, ~0.31415927E1) = 0.86525595 +nextAfter (~0.27182817E1, ~0.31415927E1) = ~0.2718282E1 +rem (~0.27182817E1, ~0.31415927E1) = ~0.27182817E1 +* (~0.27182817E1, ~0.27182817E1) = 0.73890557E1 ++ (~0.27182817E1, ~0.27182817E1) = ~0.54365635E1 +- (~0.27182817E1, ~0.27182817E1) = 0.0 +/ (~0.27182817E1, ~0.27182817E1) = 0.1E1 +nextAfter (~0.27182817E1, ~0.27182817E1) = ~0.27182817E1 +rem (~0.27182817E1, ~0.27182817E1) = 0.0 +* (~0.27182817E1, ~0.123E1) = 0.33434865E1 ++ (~0.27182817E1, ~0.123E1) = ~0.39482818E1 +- (~0.27182817E1, ~0.123E1) = ~0.14882817E1 +/ (~0.27182817E1, ~0.123E1) = 0.2209985E1 +nextAfter (~0.27182817E1, ~0.123E1) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123E1) = ~0.2582817 +* (~0.27182817E1, ~0.123) = 0.33434868 ++ (~0.27182817E1, ~0.123) = ~0.28412817E1 +- (~0.27182817E1, ~0.123) = ~0.25952818E1 +/ (~0.27182817E1, ~0.123) = 0.22099852E2 +nextAfter (~0.27182817E1, ~0.123) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123) = ~0.12281671E~1 +* (~0.27182817E1, ~0.123E~2) = 0.33434867E~2 ++ (~0.27182817E1, ~0.123E~2) = ~0.27195117E1 +- (~0.27182817E1, ~0.123E~2) = ~0.27170517E1 +/ (~0.27182817E1, ~0.123E~2) = 0.2209985E4 +nextAfter (~0.27182817E1, ~0.123E~2) = ~0.27182815E1 +rem (~0.27182817E1, ~0.123E~2) = ~0.12116297E~2 +* (~0.27182817E1, ~0.11754944E~37) = 0.31953248E~37 ++ (~0.27182817E1, ~0.11754944E~37) = ~0.27182817E1 +- (~0.27182817E1, ~0.11754944E~37) = ~0.27182817E1 +/ (~0.27182817E1, ~0.11754944E~37) = 0.23124584E39 +nextAfter (~0.27182817E1, ~0.11754944E~37) = ~0.27182815E1 +rem (~0.27182817E1, ~0.11754944E~37) = 0.0 +* (~0.27182817E1, ~0.5877472E~38) = 0.15976624E~37 ++ (~0.27182817E1, ~0.5877472E~38) = ~0.27182817E1 +- (~0.27182817E1, ~0.5877472E~38) = ~0.27182817E1 +/ (~0.27182817E1, ~0.5877472E~38) = inf +nextAfter (~0.27182817E1, ~0.5877472E~38) = ~0.27182815E1 +rem (~0.27182817E1, ~0.5877472E~38) = inf +* (~0.27182817E1, ~0.1E~44) = 0.4E~44 ++ (~0.27182817E1, ~0.1E~44) = ~0.27182817E1 +- (~0.27182817E1, ~0.1E~44) = ~0.27182817E1 +/ (~0.27182817E1, ~0.1E~44) = inf +nextAfter (~0.27182817E1, ~0.1E~44) = ~0.27182815E1 +rem (~0.27182817E1, ~0.1E~44) = inf +* (~0.27182817E1, ~0.0) = 0.0 ++ (~0.27182817E1, ~0.0) = ~0.27182817E1 +- (~0.27182817E1, ~0.0) = ~0.27182817E1 +/ (~0.27182817E1, ~0.0) = inf +nextAfter (~0.27182817E1, ~0.0) = ~0.27182815E1 +rem (~0.27182817E1, ~0.0) = nan +* (~0.27182817E1, inf) = ~inf ++ (~0.27182817E1, inf) = inf +- (~0.27182817E1, inf) = ~inf +/ (~0.27182817E1, inf) = ~0.0 +nextAfter (~0.27182817E1, inf) = ~0.27182815E1 +rem (~0.27182817E1, inf) = ~0.27182817E1 +* (~0.27182817E1, ~inf) = inf ++ (~0.27182817E1, ~inf) = ~inf +- (~0.27182817E1, ~inf) = inf +/ (~0.27182817E1, ~inf) = 0.0 +nextAfter (~0.27182817E1, ~inf) = ~0.2718282E1 +rem (~0.27182817E1, ~inf) = ~0.27182817E1 +* (~0.27182817E1, nan) = nan ++ (~0.27182817E1, nan) = nan +- (~0.27182817E1, nan) = nan +/ (~0.27182817E1, nan) = nan +nextAfter (~0.27182817E1, nan) = nan +rem (~0.27182817E1, nan) = nan +* (~0.27182817E1, inf) = ~inf ++ (~0.27182817E1, inf) = inf +- (~0.27182817E1, inf) = ~inf +/ (~0.27182817E1, inf) = ~0.0 +nextAfter (~0.27182817E1, inf) = ~0.27182815E1 +rem (~0.27182817E1, inf) = ~0.27182817E1 +* (~0.123E1, 0.34028235E39) = ~inf ++ (~0.123E1, 0.34028235E39) = 0.34028235E39 +- (~0.123E1, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E1, 0.34028235E39) = ~0.3614645E~38 +nextAfter (~0.123E1, 0.34028235E39) = ~0.12299999E1 +rem (~0.123E1, 0.34028235E39) = ~0.123E1 +* (~0.123E1, 0.17014117E39) = ~0.20927364E39 ++ (~0.123E1, 0.17014117E39) = 0.17014117E39 +- (~0.123E1, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E1, 0.17014117E39) = ~0.722929E~38 +nextAfter (~0.123E1, 0.17014117E39) = ~0.12299999E1 +rem (~0.123E1, 0.17014117E39) = ~0.123E1 +* (~0.123E1, 0.123E4) = ~0.15129E4 ++ (~0.123E1, 0.123E4) = 0.122877E4 +- (~0.123E1, 0.123E4) = ~0.123123E4 +/ (~0.123E1, 0.123E4) = ~0.1E~2 +nextAfter (~0.123E1, 0.123E4) = ~0.12299999E1 +rem (~0.123E1, 0.123E4) = ~0.123E1 +* (~0.123E1, 0.123E2) = ~0.15129001E2 ++ (~0.123E1, 0.123E2) = 0.1107E2 +- (~0.123E1, 0.123E2) = ~0.13530001E2 +/ (~0.123E1, 0.123E2) = ~0.1 +nextAfter (~0.123E1, 0.123E2) = ~0.12299999E1 +rem (~0.123E1, 0.123E2) = ~0.123E1 +* (~0.123E1, 0.31415927E1) = ~0.3864159E1 ++ (~0.123E1, 0.31415927E1) = 0.19115927E1 +- (~0.123E1, 0.31415927E1) = ~0.43715925E1 +/ (~0.123E1, 0.31415927E1) = ~0.39152116 +nextAfter (~0.123E1, 0.31415927E1) = ~0.12299999E1 +rem (~0.123E1, 0.31415927E1) = ~0.123E1 +* (~0.123E1, 0.27182817E1) = ~0.33434865E1 ++ (~0.123E1, 0.27182817E1) = 0.14882817E1 +- (~0.123E1, 0.27182817E1) = ~0.39482818E1 +/ (~0.123E1, 0.27182817E1) = ~0.45249173 +nextAfter (~0.123E1, 0.27182817E1) = ~0.12299999E1 +rem (~0.123E1, 0.27182817E1) = ~0.123E1 +* (~0.123E1, 0.123E1) = ~0.15129E1 ++ (~0.123E1, 0.123E1) = 0.0 +- (~0.123E1, 0.123E1) = ~0.246E1 +/ (~0.123E1, 0.123E1) = ~0.1E1 +nextAfter (~0.123E1, 0.123E1) = ~0.12299999E1 +rem (~0.123E1, 0.123E1) = 0.0 +* (~0.123E1, 0.123) = ~0.15129 ++ (~0.123E1, 0.123) = ~0.1107E1 +- (~0.123E1, 0.123) = ~0.1353E1 +/ (~0.123E1, 0.123) = ~0.1E2 +nextAfter (~0.123E1, 0.123) = ~0.12299999E1 +rem (~0.123E1, 0.123) = 0.14901161E~7 +* (~0.123E1, 0.123E~2) = ~0.15129001E~2 ++ (~0.123E1, 0.123E~2) = ~0.122877E1 +- (~0.123E1, 0.123E~2) = ~0.123123E1 +/ (~0.123E1, 0.123E~2) = ~0.1E4 +nextAfter (~0.123E1, 0.123E~2) = ~0.12299999E1 +rem (~0.123E1, 0.123E~2) = 0.33527613E~7 +* (~0.123E1, 0.11754944E~37) = ~0.14458581E~37 ++ (~0.123E1, 0.11754944E~37) = ~0.123E1 +- (~0.123E1, 0.11754944E~37) = ~0.123E1 +/ (~0.123E1, 0.11754944E~37) = ~0.10463683E39 +nextAfter (~0.123E1, 0.11754944E~37) = ~0.12299999E1 +rem (~0.123E1, 0.11754944E~37) = 0.0 +* (~0.123E1, 0.5877472E~38) = ~0.722929E~38 ++ (~0.123E1, 0.5877472E~38) = ~0.123E1 +- (~0.123E1, 0.5877472E~38) = ~0.123E1 +/ (~0.123E1, 0.5877472E~38) = ~0.20927366E39 +nextAfter (~0.123E1, 0.5877472E~38) = ~0.12299999E1 +rem (~0.123E1, 0.5877472E~38) = 0.0 +* (~0.123E1, 0.1E~44) = ~0.1E~44 ++ (~0.123E1, 0.1E~44) = ~0.123E1 +- (~0.123E1, 0.1E~44) = ~0.123E1 +/ (~0.123E1, 0.1E~44) = ~inf +nextAfter (~0.123E1, 0.1E~44) = ~0.12299999E1 +rem (~0.123E1, 0.1E~44) = inf +* (~0.123E1, 0.0) = ~0.0 ++ (~0.123E1, 0.0) = ~0.123E1 +- (~0.123E1, 0.0) = ~0.123E1 +/ (~0.123E1, 0.0) = ~inf +nextAfter (~0.123E1, 0.0) = ~0.12299999E1 +rem (~0.123E1, 0.0) = nan +* (~0.123E1, ~0.34028235E39) = inf ++ (~0.123E1, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E1, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E1, ~0.34028235E39) = 0.3614645E~38 +nextAfter (~0.123E1, ~0.34028235E39) = ~0.12300001E1 +rem (~0.123E1, ~0.34028235E39) = ~0.123E1 +* (~0.123E1, ~0.17014117E39) = 0.20927364E39 ++ (~0.123E1, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E1, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E1, ~0.17014117E39) = 0.722929E~38 +nextAfter (~0.123E1, ~0.17014117E39) = ~0.12300001E1 +rem (~0.123E1, ~0.17014117E39) = ~0.123E1 +* (~0.123E1, ~0.123E4) = 0.15129E4 ++ (~0.123E1, ~0.123E4) = ~0.123123E4 +- (~0.123E1, ~0.123E4) = 0.122877E4 +/ (~0.123E1, ~0.123E4) = 0.1E~2 +nextAfter (~0.123E1, ~0.123E4) = ~0.12300001E1 +rem (~0.123E1, ~0.123E4) = ~0.123E1 +* (~0.123E1, ~0.123E2) = 0.15129001E2 ++ (~0.123E1, ~0.123E2) = ~0.13530001E2 +- (~0.123E1, ~0.123E2) = 0.1107E2 +/ (~0.123E1, ~0.123E2) = 0.1 +nextAfter (~0.123E1, ~0.123E2) = ~0.12300001E1 +rem (~0.123E1, ~0.123E2) = ~0.123E1 +* (~0.123E1, ~0.31415927E1) = 0.3864159E1 ++ (~0.123E1, ~0.31415927E1) = ~0.43715925E1 +- (~0.123E1, ~0.31415927E1) = 0.19115927E1 +/ (~0.123E1, ~0.31415927E1) = 0.39152116 +nextAfter (~0.123E1, ~0.31415927E1) = ~0.12300001E1 +rem (~0.123E1, ~0.31415927E1) = ~0.123E1 +* (~0.123E1, ~0.27182817E1) = 0.33434865E1 ++ (~0.123E1, ~0.27182817E1) = ~0.39482818E1 +- (~0.123E1, ~0.27182817E1) = 0.14882817E1 +/ (~0.123E1, ~0.27182817E1) = 0.45249173 +nextAfter (~0.123E1, ~0.27182817E1) = ~0.12300001E1 +rem (~0.123E1, ~0.27182817E1) = ~0.123E1 +* (~0.123E1, ~0.123E1) = 0.15129E1 ++ (~0.123E1, ~0.123E1) = ~0.246E1 +- (~0.123E1, ~0.123E1) = 0.0 +/ (~0.123E1, ~0.123E1) = 0.1E1 +nextAfter (~0.123E1, ~0.123E1) = ~0.123E1 +rem (~0.123E1, ~0.123E1) = 0.0 +* (~0.123E1, ~0.123) = 0.15129 ++ (~0.123E1, ~0.123) = ~0.1353E1 +- (~0.123E1, ~0.123) = ~0.1107E1 +/ (~0.123E1, ~0.123) = 0.1E2 +nextAfter (~0.123E1, ~0.123) = ~0.12299999E1 +rem (~0.123E1, ~0.123) = 0.14901161E~7 +* (~0.123E1, ~0.123E~2) = 0.15129001E~2 ++ (~0.123E1, ~0.123E~2) = ~0.123123E1 +- (~0.123E1, ~0.123E~2) = ~0.122877E1 +/ (~0.123E1, ~0.123E~2) = 0.1E4 +nextAfter (~0.123E1, ~0.123E~2) = ~0.12299999E1 +rem (~0.123E1, ~0.123E~2) = 0.33527613E~7 +* (~0.123E1, ~0.11754944E~37) = 0.14458581E~37 ++ (~0.123E1, ~0.11754944E~37) = ~0.123E1 +- (~0.123E1, ~0.11754944E~37) = ~0.123E1 +/ (~0.123E1, ~0.11754944E~37) = 0.10463683E39 +nextAfter (~0.123E1, ~0.11754944E~37) = ~0.12299999E1 +rem (~0.123E1, ~0.11754944E~37) = 0.0 +* (~0.123E1, ~0.5877472E~38) = 0.722929E~38 ++ (~0.123E1, ~0.5877472E~38) = ~0.123E1 +- (~0.123E1, ~0.5877472E~38) = ~0.123E1 +/ (~0.123E1, ~0.5877472E~38) = 0.20927366E39 +nextAfter (~0.123E1, ~0.5877472E~38) = ~0.12299999E1 +rem (~0.123E1, ~0.5877472E~38) = 0.0 +* (~0.123E1, ~0.1E~44) = 0.1E~44 ++ (~0.123E1, ~0.1E~44) = ~0.123E1 +- (~0.123E1, ~0.1E~44) = ~0.123E1 +/ (~0.123E1, ~0.1E~44) = inf +nextAfter (~0.123E1, ~0.1E~44) = ~0.12299999E1 +rem (~0.123E1, ~0.1E~44) = inf +* (~0.123E1, ~0.0) = 0.0 ++ (~0.123E1, ~0.0) = ~0.123E1 +- (~0.123E1, ~0.0) = ~0.123E1 +/ (~0.123E1, ~0.0) = inf +nextAfter (~0.123E1, ~0.0) = ~0.12299999E1 +rem (~0.123E1, ~0.0) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123E1, ~inf) = inf ++ (~0.123E1, ~inf) = ~inf +- (~0.123E1, ~inf) = inf +/ (~0.123E1, ~inf) = 0.0 +nextAfter (~0.123E1, ~inf) = ~0.12300001E1 +rem (~0.123E1, ~inf) = ~0.123E1 +* (~0.123E1, nan) = nan ++ (~0.123E1, nan) = nan +- (~0.123E1, nan) = nan +/ (~0.123E1, nan) = nan +nextAfter (~0.123E1, nan) = nan +rem (~0.123E1, nan) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123, 0.34028235E39) = ~0.4185473E38 ++ (~0.123, 0.34028235E39) = 0.34028235E39 +- (~0.123, 0.34028235E39) = ~0.34028235E39 +/ (~0.123, 0.34028235E39) = ~0.361465E~39 +nextAfter (~0.123, 0.34028235E39) = ~0.122999996 +rem (~0.123, 0.34028235E39) = ~0.123 +* (~0.123, 0.17014117E39) = ~0.20927365E38 ++ (~0.123, 0.17014117E39) = 0.17014117E39 +- (~0.123, 0.17014117E39) = ~0.17014117E39 +/ (~0.123, 0.17014117E39) = ~0.722928E~39 +nextAfter (~0.123, 0.17014117E39) = ~0.122999996 +rem (~0.123, 0.17014117E39) = ~0.123 +* (~0.123, 0.123E4) = ~0.15129001E3 ++ (~0.123, 0.123E4) = 0.1229877E4 +- (~0.123, 0.123E4) = ~0.1230123E4 +/ (~0.123, 0.123E4) = ~0.100000005E~3 +nextAfter (~0.123, 0.123E4) = ~0.122999996 +rem (~0.123, 0.123E4) = ~0.123 +* (~0.123, 0.123E2) = ~0.15129001E1 ++ (~0.123, 0.123E2) = 0.12177E2 +- (~0.123, 0.123E2) = ~0.12423E2 +/ (~0.123, 0.123E2) = ~0.1E~1 +nextAfter (~0.123, 0.123E2) = ~0.122999996 +rem (~0.123, 0.123E2) = ~0.123 +* (~0.123, 0.31415927E1) = ~0.38641593 ++ (~0.123, 0.31415927E1) = 0.30185928E1 +- (~0.123, 0.31415927E1) = ~0.32645926E1 +/ (~0.123, 0.31415927E1) = ~0.39152116E~1 +nextAfter (~0.123, 0.31415927E1) = ~0.122999996 +rem (~0.123, 0.31415927E1) = ~0.123 +* (~0.123, 0.27182817E1) = ~0.33434868 ++ (~0.123, 0.27182817E1) = 0.25952818E1 +- (~0.123, 0.27182817E1) = ~0.28412817E1 +/ (~0.123, 0.27182817E1) = ~0.45249175E~1 +nextAfter (~0.123, 0.27182817E1) = ~0.122999996 +rem (~0.123, 0.27182817E1) = ~0.123 +* (~0.123, 0.123E1) = ~0.15129 ++ (~0.123, 0.123E1) = 0.1107E1 +- (~0.123, 0.123E1) = ~0.1353E1 +/ (~0.123, 0.123E1) = ~0.1 +nextAfter (~0.123, 0.123E1) = ~0.122999996 +rem (~0.123, 0.123E1) = ~0.123 +* (~0.123, 0.123) = ~0.15129001E~1 ++ (~0.123, 0.123) = 0.0 +- (~0.123, 0.123) = ~0.246 +/ (~0.123, 0.123) = ~0.1E1 +nextAfter (~0.123, 0.123) = ~0.122999996 +rem (~0.123, 0.123) = 0.0 +* (~0.123, 0.123E~2) = ~0.15129E~3 ++ (~0.123, 0.123E~2) = ~0.12177 +- (~0.123, 0.123E~2) = ~0.124230005 +/ (~0.123, 0.123E~2) = ~0.1E3 +nextAfter (~0.123, 0.123E~2) = ~0.122999996 +rem (~0.123, 0.123E~2) = 0.18626451E~8 +* (~0.123, 0.11754944E~37) = ~0.1445858E~38 ++ (~0.123, 0.11754944E~37) = ~0.123 +- (~0.123, 0.11754944E~37) = ~0.123 +/ (~0.123, 0.11754944E~37) = ~0.10463683E38 +nextAfter (~0.123, 0.11754944E~37) = ~0.122999996 +rem (~0.123, 0.11754944E~37) = 0.0 +* (~0.123, 0.5877472E~38) = ~0.722928E~39 ++ (~0.123, 0.5877472E~38) = ~0.123 +- (~0.123, 0.5877472E~38) = ~0.123 +/ (~0.123, 0.5877472E~38) = ~0.20927366E38 +nextAfter (~0.123, 0.5877472E~38) = ~0.122999996 +rem (~0.123, 0.5877472E~38) = 0.0 +* (~0.123, 0.1E~44) = ~0.0 ++ (~0.123, 0.1E~44) = ~0.123 +- (~0.123, 0.1E~44) = ~0.123 +/ (~0.123, 0.1E~44) = ~inf +nextAfter (~0.123, 0.1E~44) = ~0.122999996 +rem (~0.123, 0.1E~44) = inf +* (~0.123, 0.0) = ~0.0 ++ (~0.123, 0.0) = ~0.123 +- (~0.123, 0.0) = ~0.123 +/ (~0.123, 0.0) = ~inf +nextAfter (~0.123, 0.0) = ~0.122999996 +rem (~0.123, 0.0) = nan +* (~0.123, ~0.34028235E39) = 0.4185473E38 ++ (~0.123, ~0.34028235E39) = ~0.34028235E39 +- (~0.123, ~0.34028235E39) = 0.34028235E39 +/ (~0.123, ~0.34028235E39) = 0.361465E~39 +nextAfter (~0.123, ~0.34028235E39) = ~0.12300001 +rem (~0.123, ~0.34028235E39) = ~0.123 +* (~0.123, ~0.17014117E39) = 0.20927365E38 ++ (~0.123, ~0.17014117E39) = ~0.17014117E39 +- (~0.123, ~0.17014117E39) = 0.17014117E39 +/ (~0.123, ~0.17014117E39) = 0.722928E~39 +nextAfter (~0.123, ~0.17014117E39) = ~0.12300001 +rem (~0.123, ~0.17014117E39) = ~0.123 +* (~0.123, ~0.123E4) = 0.15129001E3 ++ (~0.123, ~0.123E4) = ~0.1230123E4 +- (~0.123, ~0.123E4) = 0.1229877E4 +/ (~0.123, ~0.123E4) = 0.100000005E~3 +nextAfter (~0.123, ~0.123E4) = ~0.12300001 +rem (~0.123, ~0.123E4) = ~0.123 +* (~0.123, ~0.123E2) = 0.15129001E1 ++ (~0.123, ~0.123E2) = ~0.12423E2 +- (~0.123, ~0.123E2) = 0.12177E2 +/ (~0.123, ~0.123E2) = 0.1E~1 +nextAfter (~0.123, ~0.123E2) = ~0.12300001 +rem (~0.123, ~0.123E2) = ~0.123 +* (~0.123, ~0.31415927E1) = 0.38641593 ++ (~0.123, ~0.31415927E1) = ~0.32645926E1 +- (~0.123, ~0.31415927E1) = 0.30185928E1 +/ (~0.123, ~0.31415927E1) = 0.39152116E~1 +nextAfter (~0.123, ~0.31415927E1) = ~0.12300001 +rem (~0.123, ~0.31415927E1) = ~0.123 +* (~0.123, ~0.27182817E1) = 0.33434868 ++ (~0.123, ~0.27182817E1) = ~0.28412817E1 +- (~0.123, ~0.27182817E1) = 0.25952818E1 +/ (~0.123, ~0.27182817E1) = 0.45249175E~1 +nextAfter (~0.123, ~0.27182817E1) = ~0.12300001 +rem (~0.123, ~0.27182817E1) = ~0.123 +* (~0.123, ~0.123E1) = 0.15129 ++ (~0.123, ~0.123E1) = ~0.1353E1 +- (~0.123, ~0.123E1) = 0.1107E1 +/ (~0.123, ~0.123E1) = 0.1 +nextAfter (~0.123, ~0.123E1) = ~0.12300001 +rem (~0.123, ~0.123E1) = ~0.123 +* (~0.123, ~0.123) = 0.15129001E~1 ++ (~0.123, ~0.123) = ~0.246 +- (~0.123, ~0.123) = 0.0 +/ (~0.123, ~0.123) = 0.1E1 +nextAfter (~0.123, ~0.123) = ~0.123 +rem (~0.123, ~0.123) = 0.0 +* (~0.123, ~0.123E~2) = 0.15129E~3 ++ (~0.123, ~0.123E~2) = ~0.124230005 +- (~0.123, ~0.123E~2) = ~0.12177 +/ (~0.123, ~0.123E~2) = 0.1E3 +nextAfter (~0.123, ~0.123E~2) = ~0.122999996 +rem (~0.123, ~0.123E~2) = 0.18626451E~8 +* (~0.123, ~0.11754944E~37) = 0.1445858E~38 ++ (~0.123, ~0.11754944E~37) = ~0.123 +- (~0.123, ~0.11754944E~37) = ~0.123 +/ (~0.123, ~0.11754944E~37) = 0.10463683E38 +nextAfter (~0.123, ~0.11754944E~37) = ~0.122999996 +rem (~0.123, ~0.11754944E~37) = 0.0 +* (~0.123, ~0.5877472E~38) = 0.722928E~39 ++ (~0.123, ~0.5877472E~38) = ~0.123 +- (~0.123, ~0.5877472E~38) = ~0.123 +/ (~0.123, ~0.5877472E~38) = 0.20927366E38 +nextAfter (~0.123, ~0.5877472E~38) = ~0.122999996 +rem (~0.123, ~0.5877472E~38) = 0.0 +* (~0.123, ~0.1E~44) = 0.0 ++ (~0.123, ~0.1E~44) = ~0.123 +- (~0.123, ~0.1E~44) = ~0.123 +/ (~0.123, ~0.1E~44) = inf +nextAfter (~0.123, ~0.1E~44) = ~0.122999996 +rem (~0.123, ~0.1E~44) = inf +* (~0.123, ~0.0) = 0.0 ++ (~0.123, ~0.0) = ~0.123 +- (~0.123, ~0.0) = ~0.123 +/ (~0.123, ~0.0) = inf +nextAfter (~0.123, ~0.0) = ~0.122999996 +rem (~0.123, ~0.0) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.122999996 +rem (~0.123, inf) = ~0.123 +* (~0.123, ~inf) = inf ++ (~0.123, ~inf) = ~inf +- (~0.123, ~inf) = inf +/ (~0.123, ~inf) = 0.0 +nextAfter (~0.123, ~inf) = ~0.12300001 +rem (~0.123, ~inf) = ~0.123 +* (~0.123, nan) = nan ++ (~0.123, nan) = nan +- (~0.123, nan) = nan +/ (~0.123, nan) = nan +nextAfter (~0.123, nan) = nan +rem (~0.123, nan) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.122999996 +rem (~0.123, inf) = ~0.123 +* (~0.123E~2, 0.34028235E39) = ~0.4185473E36 ++ (~0.123E~2, 0.34028235E39) = 0.34028235E39 +- (~0.123E~2, 0.34028235E39) = ~0.34028235E39 +/ (~0.123E~2, 0.34028235E39) = ~0.3614E~41 +nextAfter (~0.123E~2, 0.34028235E39) = ~0.12299999E~2 +rem (~0.123E~2, 0.34028235E39) = ~0.123E~2 +* (~0.123E~2, 0.17014117E39) = ~0.20927364E36 ++ (~0.123E~2, 0.17014117E39) = 0.17014117E39 +- (~0.123E~2, 0.17014117E39) = ~0.17014117E39 +/ (~0.123E~2, 0.17014117E39) = ~0.7229E~41 +nextAfter (~0.123E~2, 0.17014117E39) = ~0.12299999E~2 +rem (~0.123E~2, 0.17014117E39) = ~0.123E~2 +* (~0.123E~2, 0.123E4) = ~0.15129001E1 ++ (~0.123E~2, 0.123E4) = 0.12299988E4 +- (~0.123E~2, 0.123E4) = ~0.12300012E4 +/ (~0.123E~2, 0.123E4) = ~0.1E~5 +nextAfter (~0.123E~2, 0.123E4) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E4) = ~0.123E~2 +* (~0.123E~2, 0.123E2) = ~0.15129001E~1 ++ (~0.123E~2, 0.123E2) = 0.1229877E2 +- (~0.123E~2, 0.123E2) = ~0.1230123E2 +/ (~0.123E~2, 0.123E2) = ~0.100000005E~3 +nextAfter (~0.123E~2, 0.123E2) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E2) = ~0.123E~2 +* (~0.123E~2, 0.31415927E1) = ~0.38641593E~2 ++ (~0.123E~2, 0.31415927E1) = 0.31403627E1 +- (~0.123E~2, 0.31415927E1) = ~0.31428227E1 +/ (~0.123E~2, 0.31415927E1) = ~0.39152117E~3 +nextAfter (~0.123E~2, 0.31415927E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.31415927E1) = ~0.123E~2 +* (~0.123E~2, 0.27182817E1) = ~0.33434867E~2 ++ (~0.123E~2, 0.27182817E1) = 0.27170517E1 +- (~0.123E~2, 0.27182817E1) = ~0.27195117E1 +/ (~0.123E~2, 0.27182817E1) = ~0.45249175E~3 +nextAfter (~0.123E~2, 0.27182817E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.27182817E1) = ~0.123E~2 +* (~0.123E~2, 0.123E1) = ~0.15129001E~2 ++ (~0.123E~2, 0.123E1) = 0.122877E1 +- (~0.123E~2, 0.123E1) = ~0.123123E1 +/ (~0.123E~2, 0.123E1) = ~0.1E~2 +nextAfter (~0.123E~2, 0.123E1) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E1) = ~0.123E~2 +* (~0.123E~2, 0.123) = ~0.15129E~3 ++ (~0.123E~2, 0.123) = 0.12177 +- (~0.123E~2, 0.123) = ~0.124230005 +/ (~0.123E~2, 0.123) = ~0.1E~1 +nextAfter (~0.123E~2, 0.123) = ~0.12299999E~2 +rem (~0.123E~2, 0.123) = ~0.123E~2 +* (~0.123E~2, 0.123E~2) = ~0.15129001E~5 ++ (~0.123E~2, 0.123E~2) = 0.0 +- (~0.123E~2, 0.123E~2) = ~0.246E~2 +/ (~0.123E~2, 0.123E~2) = ~0.1E1 +nextAfter (~0.123E~2, 0.123E~2) = ~0.12299999E~2 +rem (~0.123E~2, 0.123E~2) = 0.0 +* (~0.123E~2, 0.11754944E~37) = ~0.14459E~40 ++ (~0.123E~2, 0.11754944E~37) = ~0.123E~2 +- (~0.123E~2, 0.11754944E~37) = ~0.123E~2 +/ (~0.123E~2, 0.11754944E~37) = ~0.10463683E36 +nextAfter (~0.123E~2, 0.11754944E~37) = ~0.12299999E~2 +rem (~0.123E~2, 0.11754944E~37) = 0.0 +* (~0.123E~2, 0.5877472E~38) = ~0.7229E~41 ++ (~0.123E~2, 0.5877472E~38) = ~0.123E~2 +- (~0.123E~2, 0.5877472E~38) = ~0.123E~2 +/ (~0.123E~2, 0.5877472E~38) = ~0.20927366E36 +nextAfter (~0.123E~2, 0.5877472E~38) = ~0.12299999E~2 +rem (~0.123E~2, 0.5877472E~38) = 0.0 +* (~0.123E~2, 0.1E~44) = ~0.0 ++ (~0.123E~2, 0.1E~44) = ~0.123E~2 +- (~0.123E~2, 0.1E~44) = ~0.123E~2 +/ (~0.123E~2, 0.1E~44) = ~inf +nextAfter (~0.123E~2, 0.1E~44) = ~0.12299999E~2 +rem (~0.123E~2, 0.1E~44) = inf +* (~0.123E~2, 0.0) = ~0.0 ++ (~0.123E~2, 0.0) = ~0.123E~2 +- (~0.123E~2, 0.0) = ~0.123E~2 +/ (~0.123E~2, 0.0) = ~inf +nextAfter (~0.123E~2, 0.0) = ~0.12299999E~2 +rem (~0.123E~2, 0.0) = nan +* (~0.123E~2, ~0.34028235E39) = 0.4185473E36 ++ (~0.123E~2, ~0.34028235E39) = ~0.34028235E39 +- (~0.123E~2, ~0.34028235E39) = 0.34028235E39 +/ (~0.123E~2, ~0.34028235E39) = 0.3614E~41 +nextAfter (~0.123E~2, ~0.34028235E39) = ~0.12300002E~2 +rem (~0.123E~2, ~0.34028235E39) = ~0.123E~2 +* (~0.123E~2, ~0.17014117E39) = 0.20927364E36 ++ (~0.123E~2, ~0.17014117E39) = ~0.17014117E39 +- (~0.123E~2, ~0.17014117E39) = 0.17014117E39 +/ (~0.123E~2, ~0.17014117E39) = 0.7229E~41 +nextAfter (~0.123E~2, ~0.17014117E39) = ~0.12300002E~2 +rem (~0.123E~2, ~0.17014117E39) = ~0.123E~2 +* (~0.123E~2, ~0.123E4) = 0.15129001E1 ++ (~0.123E~2, ~0.123E4) = ~0.12300012E4 +- (~0.123E~2, ~0.123E4) = 0.12299988E4 +/ (~0.123E~2, ~0.123E4) = 0.1E~5 +nextAfter (~0.123E~2, ~0.123E4) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E4) = ~0.123E~2 +* (~0.123E~2, ~0.123E2) = 0.15129001E~1 ++ (~0.123E~2, ~0.123E2) = ~0.1230123E2 +- (~0.123E~2, ~0.123E2) = 0.1229877E2 +/ (~0.123E~2, ~0.123E2) = 0.100000005E~3 +nextAfter (~0.123E~2, ~0.123E2) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E2) = ~0.123E~2 +* (~0.123E~2, ~0.31415927E1) = 0.38641593E~2 ++ (~0.123E~2, ~0.31415927E1) = ~0.31428227E1 +- (~0.123E~2, ~0.31415927E1) = 0.31403627E1 +/ (~0.123E~2, ~0.31415927E1) = 0.39152117E~3 +nextAfter (~0.123E~2, ~0.31415927E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.31415927E1) = ~0.123E~2 +* (~0.123E~2, ~0.27182817E1) = 0.33434867E~2 ++ (~0.123E~2, ~0.27182817E1) = ~0.27195117E1 +- (~0.123E~2, ~0.27182817E1) = 0.27170517E1 +/ (~0.123E~2, ~0.27182817E1) = 0.45249175E~3 +nextAfter (~0.123E~2, ~0.27182817E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.27182817E1) = ~0.123E~2 +* (~0.123E~2, ~0.123E1) = 0.15129001E~2 ++ (~0.123E~2, ~0.123E1) = ~0.123123E1 +- (~0.123E~2, ~0.123E1) = 0.122877E1 +/ (~0.123E~2, ~0.123E1) = 0.1E~2 +nextAfter (~0.123E~2, ~0.123E1) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123E1) = ~0.123E~2 +* (~0.123E~2, ~0.123) = 0.15129E~3 ++ (~0.123E~2, ~0.123) = ~0.124230005 +- (~0.123E~2, ~0.123) = 0.12177 +/ (~0.123E~2, ~0.123) = 0.1E~1 +nextAfter (~0.123E~2, ~0.123) = ~0.12300002E~2 +rem (~0.123E~2, ~0.123) = ~0.123E~2 +* (~0.123E~2, ~0.123E~2) = 0.15129001E~5 ++ (~0.123E~2, ~0.123E~2) = ~0.246E~2 +- (~0.123E~2, ~0.123E~2) = 0.0 +/ (~0.123E~2, ~0.123E~2) = 0.1E1 +nextAfter (~0.123E~2, ~0.123E~2) = ~0.123E~2 +rem (~0.123E~2, ~0.123E~2) = 0.0 +* (~0.123E~2, ~0.11754944E~37) = 0.14459E~40 ++ (~0.123E~2, ~0.11754944E~37) = ~0.123E~2 +- (~0.123E~2, ~0.11754944E~37) = ~0.123E~2 +/ (~0.123E~2, ~0.11754944E~37) = 0.10463683E36 +nextAfter (~0.123E~2, ~0.11754944E~37) = ~0.12299999E~2 +rem (~0.123E~2, ~0.11754944E~37) = 0.0 +* (~0.123E~2, ~0.5877472E~38) = 0.7229E~41 ++ (~0.123E~2, ~0.5877472E~38) = ~0.123E~2 +- (~0.123E~2, ~0.5877472E~38) = ~0.123E~2 +/ (~0.123E~2, ~0.5877472E~38) = 0.20927366E36 +nextAfter (~0.123E~2, ~0.5877472E~38) = ~0.12299999E~2 +rem (~0.123E~2, ~0.5877472E~38) = 0.0 +* (~0.123E~2, ~0.1E~44) = 0.0 ++ (~0.123E~2, ~0.1E~44) = ~0.123E~2 +- (~0.123E~2, ~0.1E~44) = ~0.123E~2 +/ (~0.123E~2, ~0.1E~44) = inf +nextAfter (~0.123E~2, ~0.1E~44) = ~0.12299999E~2 +rem (~0.123E~2, ~0.1E~44) = inf +* (~0.123E~2, ~0.0) = 0.0 ++ (~0.123E~2, ~0.0) = ~0.123E~2 +- (~0.123E~2, ~0.0) = ~0.123E~2 +/ (~0.123E~2, ~0.0) = inf +nextAfter (~0.123E~2, ~0.0) = ~0.12299999E~2 +rem (~0.123E~2, ~0.0) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.123E~2, ~inf) = inf ++ (~0.123E~2, ~inf) = ~inf +- (~0.123E~2, ~inf) = inf +/ (~0.123E~2, ~inf) = 0.0 +nextAfter (~0.123E~2, ~inf) = ~0.12300002E~2 +rem (~0.123E~2, ~inf) = ~0.123E~2 +* (~0.123E~2, nan) = nan ++ (~0.123E~2, nan) = nan +- (~0.123E~2, nan) = nan +/ (~0.123E~2, nan) = nan +nextAfter (~0.123E~2, nan) = nan +rem (~0.123E~2, nan) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.11754944E~37, 0.34028235E39) = ~0.39999998E1 ++ (~0.11754944E~37, 0.34028235E39) = 0.34028235E39 +- (~0.11754944E~37, 0.34028235E39) = ~0.34028235E39 +/ (~0.11754944E~37, 0.34028235E39) = ~0.0 +nextAfter (~0.11754944E~37, 0.34028235E39) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.34028235E39) = ~0.11754944E~37 +* (~0.11754944E~37, 0.17014117E39) = ~0.19999999E1 ++ (~0.11754944E~37, 0.17014117E39) = 0.17014117E39 +- (~0.11754944E~37, 0.17014117E39) = ~0.17014117E39 +/ (~0.11754944E~37, 0.17014117E39) = ~0.0 +nextAfter (~0.11754944E~37, 0.17014117E39) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.17014117E39) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E4) = ~0.1445858E~34 ++ (~0.11754944E~37, 0.123E4) = 0.123E4 +- (~0.11754944E~37, 0.123E4) = ~0.123E4 +/ (~0.11754944E~37, 0.123E4) = ~0.9557E~41 +nextAfter (~0.11754944E~37, 0.123E4) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E4) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E2) = ~0.14458581E~36 ++ (~0.11754944E~37, 0.123E2) = 0.123E2 +- (~0.11754944E~37, 0.123E2) = ~0.123E2 +/ (~0.11754944E~37, 0.123E2) = ~0.955687E~39 +nextAfter (~0.11754944E~37, 0.123E2) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E2) = ~0.11754944E~37 +* (~0.11754944E~37, 0.31415927E1) = ~0.36929245E~37 ++ (~0.11754944E~37, 0.31415927E1) = 0.31415927E1 +- (~0.11754944E~37, 0.31415927E1) = ~0.31415927E1 +/ (~0.11754944E~37, 0.31415927E1) = ~0.3741715E~38 +nextAfter (~0.11754944E~37, 0.31415927E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.31415927E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.27182817E1) = ~0.31953248E~37 ++ (~0.11754944E~37, 0.27182817E1) = 0.27182817E1 +- (~0.11754944E~37, 0.27182817E1) = ~0.27182817E1 +/ (~0.11754944E~37, 0.27182817E1) = ~0.4324403E~38 +nextAfter (~0.11754944E~37, 0.27182817E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.27182817E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E1) = ~0.14458581E~37 ++ (~0.11754944E~37, 0.123E1) = 0.123E1 +- (~0.11754944E~37, 0.123E1) = ~0.123E1 +/ (~0.11754944E~37, 0.123E1) = ~0.9556864E~38 +nextAfter (~0.11754944E~37, 0.123E1) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E1) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123) = ~0.1445858E~38 ++ (~0.11754944E~37, 0.123) = 0.123 +- (~0.11754944E~37, 0.123) = ~0.123 +/ (~0.11754944E~37, 0.123) = ~0.9556864E~37 +nextAfter (~0.11754944E~37, 0.123) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123) = ~0.11754944E~37 +* (~0.11754944E~37, 0.123E~2) = ~0.14459E~40 ++ (~0.11754944E~37, 0.123E~2) = 0.123E~2 +- (~0.11754944E~37, 0.123E~2) = ~0.123E~2 +/ (~0.11754944E~37, 0.123E~2) = ~0.95568645E~35 +nextAfter (~0.11754944E~37, 0.123E~2) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.123E~2) = ~0.11754944E~37 +* (~0.11754944E~37, 0.11754944E~37) = ~0.0 ++ (~0.11754944E~37, 0.11754944E~37) = 0.0 +- (~0.11754944E~37, 0.11754944E~37) = ~0.23509887E~37 +/ (~0.11754944E~37, 0.11754944E~37) = ~0.1E1 +nextAfter (~0.11754944E~37, 0.11754944E~37) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.11754944E~37) = 0.0 +* (~0.11754944E~37, 0.5877472E~38) = ~0.0 ++ (~0.11754944E~37, 0.5877472E~38) = ~0.5877472E~38 +- (~0.11754944E~37, 0.5877472E~38) = ~0.17632415E~37 +/ (~0.11754944E~37, 0.5877472E~38) = ~0.2E1 +nextAfter (~0.11754944E~37, 0.5877472E~38) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.5877472E~38) = 0.0 +* (~0.11754944E~37, 0.1E~44) = ~0.0 ++ (~0.11754944E~37, 0.1E~44) = ~0.11754942E~37 +- (~0.11754944E~37, 0.1E~44) = ~0.11754945E~37 +/ (~0.11754944E~37, 0.1E~44) = ~0.8388608E7 +nextAfter (~0.11754944E~37, 0.1E~44) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.1E~44) = 0.0 +* (~0.11754944E~37, 0.0) = ~0.0 ++ (~0.11754944E~37, 0.0) = ~0.11754944E~37 +- (~0.11754944E~37, 0.0) = ~0.11754944E~37 +/ (~0.11754944E~37, 0.0) = ~inf +nextAfter (~0.11754944E~37, 0.0) = ~0.11754942E~37 +rem (~0.11754944E~37, 0.0) = nan +* (~0.11754944E~37, ~0.34028235E39) = 0.39999998E1 ++ (~0.11754944E~37, ~0.34028235E39) = ~0.34028235E39 +- (~0.11754944E~37, ~0.34028235E39) = 0.34028235E39 +/ (~0.11754944E~37, ~0.34028235E39) = 0.0 +nextAfter (~0.11754944E~37, ~0.34028235E39) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.34028235E39) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.17014117E39) = 0.19999999E1 ++ (~0.11754944E~37, ~0.17014117E39) = ~0.17014117E39 +- (~0.11754944E~37, ~0.17014117E39) = 0.17014117E39 +/ (~0.11754944E~37, ~0.17014117E39) = 0.0 +nextAfter (~0.11754944E~37, ~0.17014117E39) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.17014117E39) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E4) = 0.1445858E~34 ++ (~0.11754944E~37, ~0.123E4) = ~0.123E4 +- (~0.11754944E~37, ~0.123E4) = 0.123E4 +/ (~0.11754944E~37, ~0.123E4) = 0.9557E~41 +nextAfter (~0.11754944E~37, ~0.123E4) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E4) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E2) = 0.14458581E~36 ++ (~0.11754944E~37, ~0.123E2) = ~0.123E2 +- (~0.11754944E~37, ~0.123E2) = 0.123E2 +/ (~0.11754944E~37, ~0.123E2) = 0.955687E~39 +nextAfter (~0.11754944E~37, ~0.123E2) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E2) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.31415927E1) = 0.36929245E~37 ++ (~0.11754944E~37, ~0.31415927E1) = ~0.31415927E1 +- (~0.11754944E~37, ~0.31415927E1) = 0.31415927E1 +/ (~0.11754944E~37, ~0.31415927E1) = 0.3741715E~38 +nextAfter (~0.11754944E~37, ~0.31415927E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.31415927E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.27182817E1) = 0.31953248E~37 ++ (~0.11754944E~37, ~0.27182817E1) = ~0.27182817E1 +- (~0.11754944E~37, ~0.27182817E1) = 0.27182817E1 +/ (~0.11754944E~37, ~0.27182817E1) = 0.4324403E~38 +nextAfter (~0.11754944E~37, ~0.27182817E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.27182817E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E1) = 0.14458581E~37 ++ (~0.11754944E~37, ~0.123E1) = ~0.123E1 +- (~0.11754944E~37, ~0.123E1) = 0.123E1 +/ (~0.11754944E~37, ~0.123E1) = 0.9556864E~38 +nextAfter (~0.11754944E~37, ~0.123E1) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E1) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123) = 0.1445858E~38 ++ (~0.11754944E~37, ~0.123) = ~0.123 +- (~0.11754944E~37, ~0.123) = 0.123 +/ (~0.11754944E~37, ~0.123) = 0.9556864E~37 +nextAfter (~0.11754944E~37, ~0.123) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.123E~2) = 0.14459E~40 ++ (~0.11754944E~37, ~0.123E~2) = ~0.123E~2 +- (~0.11754944E~37, ~0.123E~2) = 0.123E~2 +/ (~0.11754944E~37, ~0.123E~2) = 0.95568645E~35 +nextAfter (~0.11754944E~37, ~0.123E~2) = ~0.11754945E~37 +rem (~0.11754944E~37, ~0.123E~2) = ~0.11754944E~37 +* (~0.11754944E~37, ~0.11754944E~37) = 0.0 ++ (~0.11754944E~37, ~0.11754944E~37) = ~0.23509887E~37 +- (~0.11754944E~37, ~0.11754944E~37) = 0.0 +/ (~0.11754944E~37, ~0.11754944E~37) = 0.1E1 +nextAfter (~0.11754944E~37, ~0.11754944E~37) = ~0.11754944E~37 +rem (~0.11754944E~37, ~0.11754944E~37) = 0.0 +* (~0.11754944E~37, ~0.5877472E~38) = 0.0 ++ (~0.11754944E~37, ~0.5877472E~38) = ~0.17632415E~37 +- (~0.11754944E~37, ~0.5877472E~38) = ~0.5877472E~38 +/ (~0.11754944E~37, ~0.5877472E~38) = 0.2E1 +nextAfter (~0.11754944E~37, ~0.5877472E~38) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.5877472E~38) = 0.0 +* (~0.11754944E~37, ~0.1E~44) = 0.0 ++ (~0.11754944E~37, ~0.1E~44) = ~0.11754945E~37 +- (~0.11754944E~37, ~0.1E~44) = ~0.11754942E~37 +/ (~0.11754944E~37, ~0.1E~44) = 0.8388608E7 +nextAfter (~0.11754944E~37, ~0.1E~44) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.1E~44) = 0.0 +* (~0.11754944E~37, ~0.0) = 0.0 ++ (~0.11754944E~37, ~0.0) = ~0.11754944E~37 +- (~0.11754944E~37, ~0.0) = ~0.11754944E~37 +/ (~0.11754944E~37, ~0.0) = inf +nextAfter (~0.11754944E~37, ~0.0) = ~0.11754942E~37 +rem (~0.11754944E~37, ~0.0) = nan +* (~0.11754944E~37, inf) = ~inf ++ (~0.11754944E~37, inf) = inf +- (~0.11754944E~37, inf) = ~inf +/ (~0.11754944E~37, inf) = ~0.0 +nextAfter (~0.11754944E~37, inf) = ~0.11754942E~37 +rem (~0.11754944E~37, inf) = ~0.11754944E~37 +* (~0.11754944E~37, ~inf) = inf ++ (~0.11754944E~37, ~inf) = ~inf +- (~0.11754944E~37, ~inf) = inf +/ (~0.11754944E~37, ~inf) = 0.0 +nextAfter (~0.11754944E~37, ~inf) = ~0.11754945E~37 +rem (~0.11754944E~37, ~inf) = ~0.11754944E~37 +* (~0.11754944E~37, nan) = nan ++ (~0.11754944E~37, nan) = nan +- (~0.11754944E~37, nan) = nan +/ (~0.11754944E~37, nan) = nan +nextAfter (~0.11754944E~37, nan) = nan +rem (~0.11754944E~37, nan) = nan +* (~0.11754944E~37, inf) = ~inf ++ (~0.11754944E~37, inf) = inf +- (~0.11754944E~37, inf) = ~inf +/ (~0.11754944E~37, inf) = ~0.0 +nextAfter (~0.11754944E~37, inf) = ~0.11754942E~37 +rem (~0.11754944E~37, inf) = ~0.11754944E~37 +* (~0.5877472E~38, 0.34028235E39) = ~0.19999999E1 ++ (~0.5877472E~38, 0.34028235E39) = 0.34028235E39 +- (~0.5877472E~38, 0.34028235E39) = ~0.34028235E39 +/ (~0.5877472E~38, 0.34028235E39) = ~0.0 +nextAfter (~0.5877472E~38, 0.34028235E39) = ~0.587747E~38 +rem (~0.5877472E~38, 0.34028235E39) = ~0.5877472E~38 +* (~0.5877472E~38, 0.17014117E39) = ~0.99999994 ++ (~0.5877472E~38, 0.17014117E39) = 0.17014117E39 +- (~0.5877472E~38, 0.17014117E39) = ~0.17014117E39 +/ (~0.5877472E~38, 0.17014117E39) = ~0.0 +nextAfter (~0.5877472E~38, 0.17014117E39) = ~0.587747E~38 +rem (~0.5877472E~38, 0.17014117E39) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E4) = ~0.722929E~35 ++ (~0.5877472E~38, 0.123E4) = 0.123E4 +- (~0.5877472E~38, 0.123E4) = ~0.123E4 +/ (~0.5877472E~38, 0.123E4) = ~0.4778E~41 +nextAfter (~0.5877472E~38, 0.123E4) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E4) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E2) = ~0.72292904E~37 ++ (~0.5877472E~38, 0.123E2) = 0.123E2 +- (~0.5877472E~38, 0.123E2) = ~0.123E2 +/ (~0.5877472E~38, 0.123E2) = ~0.477843E~39 +nextAfter (~0.5877472E~38, 0.123E2) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E2) = ~0.5877472E~38 +* (~0.5877472E~38, 0.31415927E1) = ~0.18464623E~37 ++ (~0.5877472E~38, 0.31415927E1) = 0.31415927E1 +- (~0.5877472E~38, 0.31415927E1) = ~0.31415927E1 +/ (~0.5877472E~38, 0.31415927E1) = ~0.1870857E~38 +nextAfter (~0.5877472E~38, 0.31415927E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.31415927E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.27182817E1) = ~0.15976624E~37 ++ (~0.5877472E~38, 0.27182817E1) = 0.27182817E1 +- (~0.5877472E~38, 0.27182817E1) = ~0.27182817E1 +/ (~0.5877472E~38, 0.27182817E1) = ~0.2162201E~38 +nextAfter (~0.5877472E~38, 0.27182817E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.27182817E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E1) = ~0.722929E~38 ++ (~0.5877472E~38, 0.123E1) = 0.123E1 +- (~0.5877472E~38, 0.123E1) = ~0.123E1 +/ (~0.5877472E~38, 0.123E1) = ~0.4778432E~38 +nextAfter (~0.5877472E~38, 0.123E1) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E1) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123) = ~0.722928E~39 ++ (~0.5877472E~38, 0.123) = 0.123 +- (~0.5877472E~38, 0.123) = ~0.123 +/ (~0.5877472E~38, 0.123) = ~0.4778432E~37 +nextAfter (~0.5877472E~38, 0.123) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123) = ~0.5877472E~38 +* (~0.5877472E~38, 0.123E~2) = ~0.7229E~41 ++ (~0.5877472E~38, 0.123E~2) = 0.123E~2 +- (~0.5877472E~38, 0.123E~2) = ~0.123E~2 +/ (~0.5877472E~38, 0.123E~2) = ~0.47784322E~35 +nextAfter (~0.5877472E~38, 0.123E~2) = ~0.587747E~38 +rem (~0.5877472E~38, 0.123E~2) = ~0.5877472E~38 +* (~0.5877472E~38, 0.11754944E~37) = ~0.0 ++ (~0.5877472E~38, 0.11754944E~37) = 0.5877472E~38 +- (~0.5877472E~38, 0.11754944E~37) = ~0.17632415E~37 +/ (~0.5877472E~38, 0.11754944E~37) = ~0.5 +nextAfter (~0.5877472E~38, 0.11754944E~37) = ~0.587747E~38 +rem (~0.5877472E~38, 0.11754944E~37) = ~0.5877472E~38 +* (~0.5877472E~38, 0.5877472E~38) = ~0.0 ++ (~0.5877472E~38, 0.5877472E~38) = 0.0 +- (~0.5877472E~38, 0.5877472E~38) = ~0.11754944E~37 +/ (~0.5877472E~38, 0.5877472E~38) = ~0.1E1 +nextAfter (~0.5877472E~38, 0.5877472E~38) = ~0.587747E~38 +rem (~0.5877472E~38, 0.5877472E~38) = 0.0 +* (~0.5877472E~38, 0.1E~44) = ~0.0 ++ (~0.5877472E~38, 0.1E~44) = ~0.587747E~38 +- (~0.5877472E~38, 0.1E~44) = ~0.5877473E~38 +/ (~0.5877472E~38, 0.1E~44) = ~0.4194304E7 +nextAfter (~0.5877472E~38, 0.1E~44) = ~0.587747E~38 +rem (~0.5877472E~38, 0.1E~44) = 0.0 +* (~0.5877472E~38, 0.0) = ~0.0 ++ (~0.5877472E~38, 0.0) = ~0.5877472E~38 +- (~0.5877472E~38, 0.0) = ~0.5877472E~38 +/ (~0.5877472E~38, 0.0) = ~inf +nextAfter (~0.5877472E~38, 0.0) = ~0.587747E~38 +rem (~0.5877472E~38, 0.0) = nan +* (~0.5877472E~38, ~0.34028235E39) = 0.19999999E1 ++ (~0.5877472E~38, ~0.34028235E39) = ~0.34028235E39 +- (~0.5877472E~38, ~0.34028235E39) = 0.34028235E39 +/ (~0.5877472E~38, ~0.34028235E39) = 0.0 +nextAfter (~0.5877472E~38, ~0.34028235E39) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.34028235E39) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.17014117E39) = 0.99999994 ++ (~0.5877472E~38, ~0.17014117E39) = ~0.17014117E39 +- (~0.5877472E~38, ~0.17014117E39) = 0.17014117E39 +/ (~0.5877472E~38, ~0.17014117E39) = 0.0 +nextAfter (~0.5877472E~38, ~0.17014117E39) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.17014117E39) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E4) = 0.722929E~35 ++ (~0.5877472E~38, ~0.123E4) = ~0.123E4 +- (~0.5877472E~38, ~0.123E4) = 0.123E4 +/ (~0.5877472E~38, ~0.123E4) = 0.4778E~41 +nextAfter (~0.5877472E~38, ~0.123E4) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E4) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E2) = 0.72292904E~37 ++ (~0.5877472E~38, ~0.123E2) = ~0.123E2 +- (~0.5877472E~38, ~0.123E2) = 0.123E2 +/ (~0.5877472E~38, ~0.123E2) = 0.477843E~39 +nextAfter (~0.5877472E~38, ~0.123E2) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E2) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.31415927E1) = 0.18464623E~37 ++ (~0.5877472E~38, ~0.31415927E1) = ~0.31415927E1 +- (~0.5877472E~38, ~0.31415927E1) = 0.31415927E1 +/ (~0.5877472E~38, ~0.31415927E1) = 0.1870857E~38 +nextAfter (~0.5877472E~38, ~0.31415927E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.31415927E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.27182817E1) = 0.15976624E~37 ++ (~0.5877472E~38, ~0.27182817E1) = ~0.27182817E1 +- (~0.5877472E~38, ~0.27182817E1) = 0.27182817E1 +/ (~0.5877472E~38, ~0.27182817E1) = 0.2162201E~38 +nextAfter (~0.5877472E~38, ~0.27182817E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.27182817E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E1) = 0.722929E~38 ++ (~0.5877472E~38, ~0.123E1) = ~0.123E1 +- (~0.5877472E~38, ~0.123E1) = 0.123E1 +/ (~0.5877472E~38, ~0.123E1) = 0.4778432E~38 +nextAfter (~0.5877472E~38, ~0.123E1) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E1) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123) = 0.722928E~39 ++ (~0.5877472E~38, ~0.123) = ~0.123 +- (~0.5877472E~38, ~0.123) = 0.123 +/ (~0.5877472E~38, ~0.123) = 0.4778432E~37 +nextAfter (~0.5877472E~38, ~0.123) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.123E~2) = 0.7229E~41 ++ (~0.5877472E~38, ~0.123E~2) = ~0.123E~2 +- (~0.5877472E~38, ~0.123E~2) = 0.123E~2 +/ (~0.5877472E~38, ~0.123E~2) = 0.47784322E~35 +nextAfter (~0.5877472E~38, ~0.123E~2) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.123E~2) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.11754944E~37) = 0.0 ++ (~0.5877472E~38, ~0.11754944E~37) = ~0.17632415E~37 +- (~0.5877472E~38, ~0.11754944E~37) = 0.5877472E~38 +/ (~0.5877472E~38, ~0.11754944E~37) = 0.5 +nextAfter (~0.5877472E~38, ~0.11754944E~37) = ~0.5877473E~38 +rem (~0.5877472E~38, ~0.11754944E~37) = ~0.5877472E~38 +* (~0.5877472E~38, ~0.5877472E~38) = 0.0 ++ (~0.5877472E~38, ~0.5877472E~38) = ~0.11754944E~37 +- (~0.5877472E~38, ~0.5877472E~38) = 0.0 +/ (~0.5877472E~38, ~0.5877472E~38) = 0.1E1 +nextAfter (~0.5877472E~38, ~0.5877472E~38) = ~0.5877472E~38 +rem (~0.5877472E~38, ~0.5877472E~38) = 0.0 +* (~0.5877472E~38, ~0.1E~44) = 0.0 ++ (~0.5877472E~38, ~0.1E~44) = ~0.5877473E~38 +- (~0.5877472E~38, ~0.1E~44) = ~0.587747E~38 +/ (~0.5877472E~38, ~0.1E~44) = 0.4194304E7 +nextAfter (~0.5877472E~38, ~0.1E~44) = ~0.587747E~38 +rem (~0.5877472E~38, ~0.1E~44) = 0.0 +* (~0.5877472E~38, ~0.0) = 0.0 ++ (~0.5877472E~38, ~0.0) = ~0.5877472E~38 +- (~0.5877472E~38, ~0.0) = ~0.5877472E~38 +/ (~0.5877472E~38, ~0.0) = inf +nextAfter (~0.5877472E~38, ~0.0) = ~0.587747E~38 +rem (~0.5877472E~38, ~0.0) = nan +* (~0.5877472E~38, inf) = ~inf ++ (~0.5877472E~38, inf) = inf +- (~0.5877472E~38, inf) = ~inf +/ (~0.5877472E~38, inf) = ~0.0 +nextAfter (~0.5877472E~38, inf) = ~0.587747E~38 +rem (~0.5877472E~38, inf) = ~0.5877472E~38 +* (~0.5877472E~38, ~inf) = inf ++ (~0.5877472E~38, ~inf) = ~inf +- (~0.5877472E~38, ~inf) = inf +/ (~0.5877472E~38, ~inf) = 0.0 +nextAfter (~0.5877472E~38, ~inf) = ~0.5877473E~38 +rem (~0.5877472E~38, ~inf) = ~0.5877472E~38 +* (~0.5877472E~38, nan) = nan ++ (~0.5877472E~38, nan) = nan +- (~0.5877472E~38, nan) = nan +/ (~0.5877472E~38, nan) = nan +nextAfter (~0.5877472E~38, nan) = nan +rem (~0.5877472E~38, nan) = nan +* (~0.5877472E~38, inf) = ~inf ++ (~0.5877472E~38, inf) = inf +- (~0.5877472E~38, inf) = ~inf +/ (~0.5877472E~38, inf) = ~0.0 +nextAfter (~0.5877472E~38, inf) = ~0.587747E~38 +rem (~0.5877472E~38, inf) = ~0.5877472E~38 +* (~0.1E~44, 0.34028235E39) = ~0.47683713E~6 ++ (~0.1E~44, 0.34028235E39) = 0.34028235E39 +- (~0.1E~44, 0.34028235E39) = ~0.34028235E39 +/ (~0.1E~44, 0.34028235E39) = ~0.0 +nextAfter (~0.1E~44, 0.34028235E39) = ~0.0 +rem (~0.1E~44, 0.34028235E39) = ~0.1E~44 +* (~0.1E~44, 0.17014117E39) = ~0.23841856E~6 ++ (~0.1E~44, 0.17014117E39) = 0.17014117E39 +- (~0.1E~44, 0.17014117E39) = ~0.17014117E39 +/ (~0.1E~44, 0.17014117E39) = ~0.0 +nextAfter (~0.1E~44, 0.17014117E39) = ~0.0 +rem (~0.1E~44, 0.17014117E39) = ~0.1E~44 +* (~0.1E~44, 0.123E4) = ~0.1724E~41 ++ (~0.1E~44, 0.123E4) = 0.123E4 +- (~0.1E~44, 0.123E4) = ~0.123E4 +/ (~0.1E~44, 0.123E4) = ~0.0 +nextAfter (~0.1E~44, 0.123E4) = ~0.0 +rem (~0.1E~44, 0.123E4) = ~0.1E~44 +* (~0.1E~44, 0.123E2) = ~0.17E~43 ++ (~0.1E~44, 0.123E2) = 0.123E2 +- (~0.1E~44, 0.123E2) = ~0.123E2 +/ (~0.1E~44, 0.123E2) = ~0.0 +nextAfter (~0.1E~44, 0.123E2) = ~0.0 +rem (~0.1E~44, 0.123E2) = ~0.1E~44 +* (~0.1E~44, 0.31415927E1) = ~0.4E~44 ++ (~0.1E~44, 0.31415927E1) = 0.31415927E1 +- (~0.1E~44, 0.31415927E1) = ~0.31415927E1 +/ (~0.1E~44, 0.31415927E1) = ~0.0 +nextAfter (~0.1E~44, 0.31415927E1) = ~0.0 +rem (~0.1E~44, 0.31415927E1) = ~0.1E~44 +* (~0.1E~44, 0.27182817E1) = ~0.4E~44 ++ (~0.1E~44, 0.27182817E1) = 0.27182817E1 +- (~0.1E~44, 0.27182817E1) = ~0.27182817E1 +/ (~0.1E~44, 0.27182817E1) = ~0.0 +nextAfter (~0.1E~44, 0.27182817E1) = ~0.0 +rem (~0.1E~44, 0.27182817E1) = ~0.1E~44 +* (~0.1E~44, 0.123E1) = ~0.1E~44 ++ (~0.1E~44, 0.123E1) = 0.123E1 +- (~0.1E~44, 0.123E1) = ~0.123E1 +/ (~0.1E~44, 0.123E1) = ~0.1E~44 +nextAfter (~0.1E~44, 0.123E1) = ~0.0 +rem (~0.1E~44, 0.123E1) = ~0.1E~44 +* (~0.1E~44, 0.123) = ~0.0 ++ (~0.1E~44, 0.123) = 0.123 +- (~0.1E~44, 0.123) = ~0.123 +/ (~0.1E~44, 0.123) = ~0.11E~43 +nextAfter (~0.1E~44, 0.123) = ~0.0 +rem (~0.1E~44, 0.123) = ~0.1E~44 +* (~0.1E~44, 0.123E~2) = ~0.0 ++ (~0.1E~44, 0.123E~2) = 0.123E~2 +- (~0.1E~44, 0.123E~2) = ~0.123E~2 +/ (~0.1E~44, 0.123E~2) = ~0.1139E~41 +nextAfter (~0.1E~44, 0.123E~2) = ~0.0 +rem (~0.1E~44, 0.123E~2) = ~0.1E~44 +* (~0.1E~44, 0.11754944E~37) = ~0.0 ++ (~0.1E~44, 0.11754944E~37) = 0.11754942E~37 +- (~0.1E~44, 0.11754944E~37) = ~0.11754945E~37 +/ (~0.1E~44, 0.11754944E~37) = ~0.11920929E~6 +nextAfter (~0.1E~44, 0.11754944E~37) = ~0.0 +rem (~0.1E~44, 0.11754944E~37) = ~0.1E~44 +* (~0.1E~44, 0.5877472E~38) = ~0.0 ++ (~0.1E~44, 0.5877472E~38) = 0.587747E~38 +- (~0.1E~44, 0.5877472E~38) = ~0.5877473E~38 +/ (~0.1E~44, 0.5877472E~38) = ~0.23841858E~6 +nextAfter (~0.1E~44, 0.5877472E~38) = ~0.0 +rem (~0.1E~44, 0.5877472E~38) = ~0.1E~44 +* (~0.1E~44, 0.1E~44) = ~0.0 ++ (~0.1E~44, 0.1E~44) = 0.0 +- (~0.1E~44, 0.1E~44) = ~0.3E~44 +/ (~0.1E~44, 0.1E~44) = ~0.1E1 +nextAfter (~0.1E~44, 0.1E~44) = ~0.0 +rem (~0.1E~44, 0.1E~44) = 0.0 +* (~0.1E~44, 0.0) = ~0.0 ++ (~0.1E~44, 0.0) = ~0.1E~44 +- (~0.1E~44, 0.0) = ~0.1E~44 +/ (~0.1E~44, 0.0) = ~inf +nextAfter (~0.1E~44, 0.0) = ~0.0 +rem (~0.1E~44, 0.0) = nan +* (~0.1E~44, ~0.34028235E39) = 0.47683713E~6 ++ (~0.1E~44, ~0.34028235E39) = ~0.34028235E39 +- (~0.1E~44, ~0.34028235E39) = 0.34028235E39 +/ (~0.1E~44, ~0.34028235E39) = 0.0 +nextAfter (~0.1E~44, ~0.34028235E39) = ~0.3E~44 +rem (~0.1E~44, ~0.34028235E39) = ~0.1E~44 +* (~0.1E~44, ~0.17014117E39) = 0.23841856E~6 ++ (~0.1E~44, ~0.17014117E39) = ~0.17014117E39 +- (~0.1E~44, ~0.17014117E39) = 0.17014117E39 +/ (~0.1E~44, ~0.17014117E39) = 0.0 +nextAfter (~0.1E~44, ~0.17014117E39) = ~0.3E~44 +rem (~0.1E~44, ~0.17014117E39) = ~0.1E~44 +* (~0.1E~44, ~0.123E4) = 0.1724E~41 ++ (~0.1E~44, ~0.123E4) = ~0.123E4 +- (~0.1E~44, ~0.123E4) = 0.123E4 +/ (~0.1E~44, ~0.123E4) = 0.0 +nextAfter (~0.1E~44, ~0.123E4) = ~0.3E~44 +rem (~0.1E~44, ~0.123E4) = ~0.1E~44 +* (~0.1E~44, ~0.123E2) = 0.17E~43 ++ (~0.1E~44, ~0.123E2) = ~0.123E2 +- (~0.1E~44, ~0.123E2) = 0.123E2 +/ (~0.1E~44, ~0.123E2) = 0.0 +nextAfter (~0.1E~44, ~0.123E2) = ~0.3E~44 +rem (~0.1E~44, ~0.123E2) = ~0.1E~44 +* (~0.1E~44, ~0.31415927E1) = 0.4E~44 ++ (~0.1E~44, ~0.31415927E1) = ~0.31415927E1 +- (~0.1E~44, ~0.31415927E1) = 0.31415927E1 +/ (~0.1E~44, ~0.31415927E1) = 0.0 +nextAfter (~0.1E~44, ~0.31415927E1) = ~0.3E~44 +rem (~0.1E~44, ~0.31415927E1) = ~0.1E~44 +* (~0.1E~44, ~0.27182817E1) = 0.4E~44 ++ (~0.1E~44, ~0.27182817E1) = ~0.27182817E1 +- (~0.1E~44, ~0.27182817E1) = 0.27182817E1 +/ (~0.1E~44, ~0.27182817E1) = 0.0 +nextAfter (~0.1E~44, ~0.27182817E1) = ~0.3E~44 +rem (~0.1E~44, ~0.27182817E1) = ~0.1E~44 +* (~0.1E~44, ~0.123E1) = 0.1E~44 ++ (~0.1E~44, ~0.123E1) = ~0.123E1 +- (~0.1E~44, ~0.123E1) = 0.123E1 +/ (~0.1E~44, ~0.123E1) = 0.1E~44 +nextAfter (~0.1E~44, ~0.123E1) = ~0.3E~44 +rem (~0.1E~44, ~0.123E1) = ~0.1E~44 +* (~0.1E~44, ~0.123) = 0.0 ++ (~0.1E~44, ~0.123) = ~0.123 +- (~0.1E~44, ~0.123) = 0.123 +/ (~0.1E~44, ~0.123) = 0.11E~43 +nextAfter (~0.1E~44, ~0.123) = ~0.3E~44 +rem (~0.1E~44, ~0.123) = ~0.1E~44 +* (~0.1E~44, ~0.123E~2) = 0.0 ++ (~0.1E~44, ~0.123E~2) = ~0.123E~2 +- (~0.1E~44, ~0.123E~2) = 0.123E~2 +/ (~0.1E~44, ~0.123E~2) = 0.1139E~41 +nextAfter (~0.1E~44, ~0.123E~2) = ~0.3E~44 +rem (~0.1E~44, ~0.123E~2) = ~0.1E~44 +* (~0.1E~44, ~0.11754944E~37) = 0.0 ++ (~0.1E~44, ~0.11754944E~37) = ~0.11754945E~37 +- (~0.1E~44, ~0.11754944E~37) = 0.11754942E~37 +/ (~0.1E~44, ~0.11754944E~37) = 0.11920929E~6 +nextAfter (~0.1E~44, ~0.11754944E~37) = ~0.3E~44 +rem (~0.1E~44, ~0.11754944E~37) = ~0.1E~44 +* (~0.1E~44, ~0.5877472E~38) = 0.0 ++ (~0.1E~44, ~0.5877472E~38) = ~0.5877473E~38 +- (~0.1E~44, ~0.5877472E~38) = 0.587747E~38 +/ (~0.1E~44, ~0.5877472E~38) = 0.23841858E~6 +nextAfter (~0.1E~44, ~0.5877472E~38) = ~0.3E~44 +rem (~0.1E~44, ~0.5877472E~38) = ~0.1E~44 +* (~0.1E~44, ~0.1E~44) = 0.0 ++ (~0.1E~44, ~0.1E~44) = ~0.3E~44 +- (~0.1E~44, ~0.1E~44) = 0.0 +/ (~0.1E~44, ~0.1E~44) = 0.1E1 +nextAfter (~0.1E~44, ~0.1E~44) = ~0.1E~44 +rem (~0.1E~44, ~0.1E~44) = 0.0 +* (~0.1E~44, ~0.0) = 0.0 ++ (~0.1E~44, ~0.0) = ~0.1E~44 +- (~0.1E~44, ~0.0) = ~0.1E~44 +/ (~0.1E~44, ~0.0) = inf +nextAfter (~0.1E~44, ~0.0) = ~0.0 +rem (~0.1E~44, ~0.0) = nan +* (~0.1E~44, inf) = ~inf ++ (~0.1E~44, inf) = inf +- (~0.1E~44, inf) = ~inf +/ (~0.1E~44, inf) = ~0.0 +nextAfter (~0.1E~44, inf) = ~0.0 +rem (~0.1E~44, inf) = ~0.1E~44 +* (~0.1E~44, ~inf) = inf ++ (~0.1E~44, ~inf) = ~inf +- (~0.1E~44, ~inf) = inf +/ (~0.1E~44, ~inf) = 0.0 +nextAfter (~0.1E~44, ~inf) = ~0.3E~44 +rem (~0.1E~44, ~inf) = ~0.1E~44 +* (~0.1E~44, nan) = nan ++ (~0.1E~44, nan) = nan +- (~0.1E~44, nan) = nan +/ (~0.1E~44, nan) = nan +nextAfter (~0.1E~44, nan) = nan +rem (~0.1E~44, nan) = nan +* (~0.1E~44, inf) = ~inf ++ (~0.1E~44, inf) = inf +- (~0.1E~44, inf) = ~inf +/ (~0.1E~44, inf) = ~0.0 +nextAfter (~0.1E~44, inf) = ~0.0 +rem (~0.1E~44, inf) = ~0.1E~44 +* (~0.0, 0.34028235E39) = ~0.0 ++ (~0.0, 0.34028235E39) = 0.34028235E39 +- (~0.0, 0.34028235E39) = ~0.34028235E39 +/ (~0.0, 0.34028235E39) = ~0.0 +nextAfter (~0.0, 0.34028235E39) = 0.1E~44 +rem (~0.0, 0.34028235E39) = 0.0 +* (~0.0, 0.17014117E39) = ~0.0 ++ (~0.0, 0.17014117E39) = 0.17014117E39 +- (~0.0, 0.17014117E39) = ~0.17014117E39 +/ (~0.0, 0.17014117E39) = ~0.0 +nextAfter (~0.0, 0.17014117E39) = 0.1E~44 +rem (~0.0, 0.17014117E39) = 0.0 +* (~0.0, 0.123E4) = ~0.0 ++ (~0.0, 0.123E4) = 0.123E4 +- (~0.0, 0.123E4) = ~0.123E4 +/ (~0.0, 0.123E4) = ~0.0 +nextAfter (~0.0, 0.123E4) = 0.1E~44 +rem (~0.0, 0.123E4) = 0.0 +* (~0.0, 0.123E2) = ~0.0 ++ (~0.0, 0.123E2) = 0.123E2 +- (~0.0, 0.123E2) = ~0.123E2 +/ (~0.0, 0.123E2) = ~0.0 +nextAfter (~0.0, 0.123E2) = 0.1E~44 +rem (~0.0, 0.123E2) = 0.0 +* (~0.0, 0.31415927E1) = ~0.0 ++ (~0.0, 0.31415927E1) = 0.31415927E1 +- (~0.0, 0.31415927E1) = ~0.31415927E1 +/ (~0.0, 0.31415927E1) = ~0.0 +nextAfter (~0.0, 0.31415927E1) = 0.1E~44 +rem (~0.0, 0.31415927E1) = 0.0 +* (~0.0, 0.27182817E1) = ~0.0 ++ (~0.0, 0.27182817E1) = 0.27182817E1 +- (~0.0, 0.27182817E1) = ~0.27182817E1 +/ (~0.0, 0.27182817E1) = ~0.0 +nextAfter (~0.0, 0.27182817E1) = 0.1E~44 +rem (~0.0, 0.27182817E1) = 0.0 +* (~0.0, 0.123E1) = ~0.0 ++ (~0.0, 0.123E1) = 0.123E1 +- (~0.0, 0.123E1) = ~0.123E1 +/ (~0.0, 0.123E1) = ~0.0 +nextAfter (~0.0, 0.123E1) = 0.1E~44 +rem (~0.0, 0.123E1) = 0.0 +* (~0.0, 0.123) = ~0.0 ++ (~0.0, 0.123) = 0.123 +- (~0.0, 0.123) = ~0.123 +/ (~0.0, 0.123) = ~0.0 +nextAfter (~0.0, 0.123) = 0.1E~44 +rem (~0.0, 0.123) = 0.0 +* (~0.0, 0.123E~2) = ~0.0 ++ (~0.0, 0.123E~2) = 0.123E~2 +- (~0.0, 0.123E~2) = ~0.123E~2 +/ (~0.0, 0.123E~2) = ~0.0 +nextAfter (~0.0, 0.123E~2) = 0.1E~44 +rem (~0.0, 0.123E~2) = 0.0 +* (~0.0, 0.11754944E~37) = ~0.0 ++ (~0.0, 0.11754944E~37) = 0.11754944E~37 +- (~0.0, 0.11754944E~37) = ~0.11754944E~37 +/ (~0.0, 0.11754944E~37) = ~0.0 +nextAfter (~0.0, 0.11754944E~37) = 0.1E~44 +rem (~0.0, 0.11754944E~37) = 0.0 +* (~0.0, 0.5877472E~38) = ~0.0 ++ (~0.0, 0.5877472E~38) = 0.5877472E~38 +- (~0.0, 0.5877472E~38) = ~0.5877472E~38 +/ (~0.0, 0.5877472E~38) = ~0.0 +nextAfter (~0.0, 0.5877472E~38) = 0.1E~44 +rem (~0.0, 0.5877472E~38) = 0.0 +* (~0.0, 0.1E~44) = ~0.0 ++ (~0.0, 0.1E~44) = 0.1E~44 +- (~0.0, 0.1E~44) = ~0.1E~44 +/ (~0.0, 0.1E~44) = ~0.0 +nextAfter (~0.0, 0.1E~44) = 0.1E~44 +rem (~0.0, 0.1E~44) = 0.0 +* (~0.0, 0.0) = ~0.0 ++ (~0.0, 0.0) = 0.0 +- (~0.0, 0.0) = ~0.0 +/ (~0.0, 0.0) = nan +nextAfter (~0.0, 0.0) = 0.0 +rem (~0.0, 0.0) = 0.0 +* (~0.0, ~0.34028235E39) = 0.0 ++ (~0.0, ~0.34028235E39) = ~0.34028235E39 +- (~0.0, ~0.34028235E39) = 0.34028235E39 +/ (~0.0, ~0.34028235E39) = 0.0 +nextAfter (~0.0, ~0.34028235E39) = ~0.1E~44 +rem (~0.0, ~0.34028235E39) = 0.0 +* (~0.0, ~0.17014117E39) = 0.0 ++ (~0.0, ~0.17014117E39) = ~0.17014117E39 +- (~0.0, ~0.17014117E39) = 0.17014117E39 +/ (~0.0, ~0.17014117E39) = 0.0 +nextAfter (~0.0, ~0.17014117E39) = ~0.1E~44 +rem (~0.0, ~0.17014117E39) = 0.0 +* (~0.0, ~0.123E4) = 0.0 ++ (~0.0, ~0.123E4) = ~0.123E4 +- (~0.0, ~0.123E4) = 0.123E4 +/ (~0.0, ~0.123E4) = 0.0 +nextAfter (~0.0, ~0.123E4) = ~0.1E~44 +rem (~0.0, ~0.123E4) = 0.0 +* (~0.0, ~0.123E2) = 0.0 ++ (~0.0, ~0.123E2) = ~0.123E2 +- (~0.0, ~0.123E2) = 0.123E2 +/ (~0.0, ~0.123E2) = 0.0 +nextAfter (~0.0, ~0.123E2) = ~0.1E~44 +rem (~0.0, ~0.123E2) = 0.0 +* (~0.0, ~0.31415927E1) = 0.0 ++ (~0.0, ~0.31415927E1) = ~0.31415927E1 +- (~0.0, ~0.31415927E1) = 0.31415927E1 +/ (~0.0, ~0.31415927E1) = 0.0 +nextAfter (~0.0, ~0.31415927E1) = ~0.1E~44 +rem (~0.0, ~0.31415927E1) = 0.0 +* (~0.0, ~0.27182817E1) = 0.0 ++ (~0.0, ~0.27182817E1) = ~0.27182817E1 +- (~0.0, ~0.27182817E1) = 0.27182817E1 +/ (~0.0, ~0.27182817E1) = 0.0 +nextAfter (~0.0, ~0.27182817E1) = ~0.1E~44 +rem (~0.0, ~0.27182817E1) = 0.0 +* (~0.0, ~0.123E1) = 0.0 ++ (~0.0, ~0.123E1) = ~0.123E1 +- (~0.0, ~0.123E1) = 0.123E1 +/ (~0.0, ~0.123E1) = 0.0 +nextAfter (~0.0, ~0.123E1) = ~0.1E~44 +rem (~0.0, ~0.123E1) = 0.0 +* (~0.0, ~0.123) = 0.0 ++ (~0.0, ~0.123) = ~0.123 +- (~0.0, ~0.123) = 0.123 +/ (~0.0, ~0.123) = 0.0 +nextAfter (~0.0, ~0.123) = ~0.1E~44 +rem (~0.0, ~0.123) = 0.0 +* (~0.0, ~0.123E~2) = 0.0 ++ (~0.0, ~0.123E~2) = ~0.123E~2 +- (~0.0, ~0.123E~2) = 0.123E~2 +/ (~0.0, ~0.123E~2) = 0.0 +nextAfter (~0.0, ~0.123E~2) = ~0.1E~44 +rem (~0.0, ~0.123E~2) = 0.0 +* (~0.0, ~0.11754944E~37) = 0.0 ++ (~0.0, ~0.11754944E~37) = ~0.11754944E~37 +- (~0.0, ~0.11754944E~37) = 0.11754944E~37 +/ (~0.0, ~0.11754944E~37) = 0.0 +nextAfter (~0.0, ~0.11754944E~37) = ~0.1E~44 +rem (~0.0, ~0.11754944E~37) = 0.0 +* (~0.0, ~0.5877472E~38) = 0.0 ++ (~0.0, ~0.5877472E~38) = ~0.5877472E~38 +- (~0.0, ~0.5877472E~38) = 0.5877472E~38 +/ (~0.0, ~0.5877472E~38) = 0.0 +nextAfter (~0.0, ~0.5877472E~38) = ~0.1E~44 +rem (~0.0, ~0.5877472E~38) = 0.0 +* (~0.0, ~0.1E~44) = 0.0 ++ (~0.0, ~0.1E~44) = ~0.1E~44 +- (~0.0, ~0.1E~44) = 0.1E~44 +/ (~0.0, ~0.1E~44) = 0.0 +nextAfter (~0.0, ~0.1E~44) = ~0.1E~44 +rem (~0.0, ~0.1E~44) = 0.0 +* (~0.0, ~0.0) = 0.0 ++ (~0.0, ~0.0) = ~0.0 +- (~0.0, ~0.0) = 0.0 +/ (~0.0, ~0.0) = nan +nextAfter (~0.0, ~0.0) = ~0.0 +rem (~0.0, ~0.0) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.1E~44 +rem (~0.0, inf) = 0.0 +* (~0.0, ~inf) = nan ++ (~0.0, ~inf) = ~inf +- (~0.0, ~inf) = inf +/ (~0.0, ~inf) = 0.0 +nextAfter (~0.0, ~inf) = ~0.1E~44 +rem (~0.0, ~inf) = 0.0 +* (~0.0, nan) = nan ++ (~0.0, nan) = nan +- (~0.0, nan) = nan +/ (~0.0, nan) = nan +nextAfter (~0.0, nan) = nan +rem (~0.0, nan) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.1E~44 +rem (~0.0, inf) = 0.0 +* (inf, 0.34028235E39) = inf ++ (inf, 0.34028235E39) = inf +- (inf, 0.34028235E39) = inf +/ (inf, 0.34028235E39) = inf +nextAfter (inf, 0.34028235E39) = inf +rem (inf, 0.34028235E39) = nan +* (inf, 0.17014117E39) = inf ++ (inf, 0.17014117E39) = inf +- (inf, 0.17014117E39) = inf +/ (inf, 0.17014117E39) = inf +nextAfter (inf, 0.17014117E39) = inf +rem (inf, 0.17014117E39) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.31415927E1) = inf ++ (inf, 0.31415927E1) = inf +- (inf, 0.31415927E1) = inf +/ (inf, 0.31415927E1) = inf +nextAfter (inf, 0.31415927E1) = inf +rem (inf, 0.31415927E1) = nan +* (inf, 0.27182817E1) = inf ++ (inf, 0.27182817E1) = inf +- (inf, 0.27182817E1) = inf +/ (inf, 0.27182817E1) = inf +nextAfter (inf, 0.27182817E1) = inf +rem (inf, 0.27182817E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.11754944E~37) = inf ++ (inf, 0.11754944E~37) = inf +- (inf, 0.11754944E~37) = inf +/ (inf, 0.11754944E~37) = inf +nextAfter (inf, 0.11754944E~37) = inf +rem (inf, 0.11754944E~37) = nan +* (inf, 0.5877472E~38) = inf ++ (inf, 0.5877472E~38) = inf +- (inf, 0.5877472E~38) = inf +/ (inf, 0.5877472E~38) = inf +nextAfter (inf, 0.5877472E~38) = inf +rem (inf, 0.5877472E~38) = nan +* (inf, 0.1E~44) = inf ++ (inf, 0.1E~44) = inf +- (inf, 0.1E~44) = inf +/ (inf, 0.1E~44) = inf +nextAfter (inf, 0.1E~44) = inf +rem (inf, 0.1E~44) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.34028235E39) = ~inf ++ (inf, ~0.34028235E39) = inf +- (inf, ~0.34028235E39) = inf +/ (inf, ~0.34028235E39) = ~inf +nextAfter (inf, ~0.34028235E39) = inf +rem (inf, ~0.34028235E39) = nan +* (inf, ~0.17014117E39) = ~inf ++ (inf, ~0.17014117E39) = inf +- (inf, ~0.17014117E39) = inf +/ (inf, ~0.17014117E39) = ~inf +nextAfter (inf, ~0.17014117E39) = inf +rem (inf, ~0.17014117E39) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.31415927E1) = ~inf ++ (inf, ~0.31415927E1) = inf +- (inf, ~0.31415927E1) = inf +/ (inf, ~0.31415927E1) = ~inf +nextAfter (inf, ~0.31415927E1) = inf +rem (inf, ~0.31415927E1) = nan +* (inf, ~0.27182817E1) = ~inf ++ (inf, ~0.27182817E1) = inf +- (inf, ~0.27182817E1) = inf +/ (inf, ~0.27182817E1) = ~inf +nextAfter (inf, ~0.27182817E1) = inf +rem (inf, ~0.27182817E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.11754944E~37) = ~inf ++ (inf, ~0.11754944E~37) = inf +- (inf, ~0.11754944E~37) = inf +/ (inf, ~0.11754944E~37) = ~inf +nextAfter (inf, ~0.11754944E~37) = inf +rem (inf, ~0.11754944E~37) = nan +* (inf, ~0.5877472E~38) = ~inf ++ (inf, ~0.5877472E~38) = inf +- (inf, ~0.5877472E~38) = inf +/ (inf, ~0.5877472E~38) = ~inf +nextAfter (inf, ~0.5877472E~38) = inf +rem (inf, ~0.5877472E~38) = nan +* (inf, ~0.1E~44) = ~inf ++ (inf, ~0.1E~44) = inf +- (inf, ~0.1E~44) = inf +/ (inf, ~0.1E~44) = ~inf +nextAfter (inf, ~0.1E~44) = inf +rem (inf, ~0.1E~44) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (~inf, 0.34028235E39) = ~inf ++ (~inf, 0.34028235E39) = ~inf +- (~inf, 0.34028235E39) = ~inf +/ (~inf, 0.34028235E39) = ~inf +nextAfter (~inf, 0.34028235E39) = ~inf +rem (~inf, 0.34028235E39) = nan +* (~inf, 0.17014117E39) = ~inf ++ (~inf, 0.17014117E39) = ~inf +- (~inf, 0.17014117E39) = ~inf +/ (~inf, 0.17014117E39) = ~inf +nextAfter (~inf, 0.17014117E39) = ~inf +rem (~inf, 0.17014117E39) = nan +* (~inf, 0.123E4) = ~inf ++ (~inf, 0.123E4) = ~inf +- (~inf, 0.123E4) = ~inf +/ (~inf, 0.123E4) = ~inf +nextAfter (~inf, 0.123E4) = ~inf +rem (~inf, 0.123E4) = nan +* (~inf, 0.123E2) = ~inf ++ (~inf, 0.123E2) = ~inf +- (~inf, 0.123E2) = ~inf +/ (~inf, 0.123E2) = ~inf +nextAfter (~inf, 0.123E2) = ~inf +rem (~inf, 0.123E2) = nan +* (~inf, 0.31415927E1) = ~inf ++ (~inf, 0.31415927E1) = ~inf +- (~inf, 0.31415927E1) = ~inf +/ (~inf, 0.31415927E1) = ~inf +nextAfter (~inf, 0.31415927E1) = ~inf +rem (~inf, 0.31415927E1) = nan +* (~inf, 0.27182817E1) = ~inf ++ (~inf, 0.27182817E1) = ~inf +- (~inf, 0.27182817E1) = ~inf +/ (~inf, 0.27182817E1) = ~inf +nextAfter (~inf, 0.27182817E1) = ~inf +rem (~inf, 0.27182817E1) = nan +* (~inf, 0.123E1) = ~inf ++ (~inf, 0.123E1) = ~inf +- (~inf, 0.123E1) = ~inf +/ (~inf, 0.123E1) = ~inf +nextAfter (~inf, 0.123E1) = ~inf +rem (~inf, 0.123E1) = nan +* (~inf, 0.123) = ~inf ++ (~inf, 0.123) = ~inf +- (~inf, 0.123) = ~inf +/ (~inf, 0.123) = ~inf +nextAfter (~inf, 0.123) = ~inf +rem (~inf, 0.123) = nan +* (~inf, 0.123E~2) = ~inf ++ (~inf, 0.123E~2) = ~inf +- (~inf, 0.123E~2) = ~inf +/ (~inf, 0.123E~2) = ~inf +nextAfter (~inf, 0.123E~2) = ~inf +rem (~inf, 0.123E~2) = nan +* (~inf, 0.11754944E~37) = ~inf ++ (~inf, 0.11754944E~37) = ~inf +- (~inf, 0.11754944E~37) = ~inf +/ (~inf, 0.11754944E~37) = ~inf +nextAfter (~inf, 0.11754944E~37) = ~inf +rem (~inf, 0.11754944E~37) = nan +* (~inf, 0.5877472E~38) = ~inf ++ (~inf, 0.5877472E~38) = ~inf +- (~inf, 0.5877472E~38) = ~inf +/ (~inf, 0.5877472E~38) = ~inf +nextAfter (~inf, 0.5877472E~38) = ~inf +rem (~inf, 0.5877472E~38) = nan +* (~inf, 0.1E~44) = ~inf ++ (~inf, 0.1E~44) = ~inf +- (~inf, 0.1E~44) = ~inf +/ (~inf, 0.1E~44) = ~inf +nextAfter (~inf, 0.1E~44) = ~inf +rem (~inf, 0.1E~44) = nan +* (~inf, 0.0) = nan ++ (~inf, 0.0) = ~inf +- (~inf, 0.0) = ~inf +/ (~inf, 0.0) = ~inf +nextAfter (~inf, 0.0) = ~inf +rem (~inf, 0.0) = nan +* (~inf, ~0.34028235E39) = inf ++ (~inf, ~0.34028235E39) = ~inf +- (~inf, ~0.34028235E39) = ~inf +/ (~inf, ~0.34028235E39) = inf +nextAfter (~inf, ~0.34028235E39) = ~inf +rem (~inf, ~0.34028235E39) = nan +* (~inf, ~0.17014117E39) = inf ++ (~inf, ~0.17014117E39) = ~inf +- (~inf, ~0.17014117E39) = ~inf +/ (~inf, ~0.17014117E39) = inf +nextAfter (~inf, ~0.17014117E39) = ~inf +rem (~inf, ~0.17014117E39) = nan +* (~inf, ~0.123E4) = inf ++ (~inf, ~0.123E4) = ~inf +- (~inf, ~0.123E4) = ~inf +/ (~inf, ~0.123E4) = inf +nextAfter (~inf, ~0.123E4) = ~inf +rem (~inf, ~0.123E4) = nan +* (~inf, ~0.123E2) = inf ++ (~inf, ~0.123E2) = ~inf +- (~inf, ~0.123E2) = ~inf +/ (~inf, ~0.123E2) = inf +nextAfter (~inf, ~0.123E2) = ~inf +rem (~inf, ~0.123E2) = nan +* (~inf, ~0.31415927E1) = inf ++ (~inf, ~0.31415927E1) = ~inf +- (~inf, ~0.31415927E1) = ~inf +/ (~inf, ~0.31415927E1) = inf +nextAfter (~inf, ~0.31415927E1) = ~inf +rem (~inf, ~0.31415927E1) = nan +* (~inf, ~0.27182817E1) = inf ++ (~inf, ~0.27182817E1) = ~inf +- (~inf, ~0.27182817E1) = ~inf +/ (~inf, ~0.27182817E1) = inf +nextAfter (~inf, ~0.27182817E1) = ~inf +rem (~inf, ~0.27182817E1) = nan +* (~inf, ~0.123E1) = inf ++ (~inf, ~0.123E1) = ~inf +- (~inf, ~0.123E1) = ~inf +/ (~inf, ~0.123E1) = inf +nextAfter (~inf, ~0.123E1) = ~inf +rem (~inf, ~0.123E1) = nan +* (~inf, ~0.123) = inf ++ (~inf, ~0.123) = ~inf +- (~inf, ~0.123) = ~inf +/ (~inf, ~0.123) = inf +nextAfter (~inf, ~0.123) = ~inf +rem (~inf, ~0.123) = nan +* (~inf, ~0.123E~2) = inf ++ (~inf, ~0.123E~2) = ~inf +- (~inf, ~0.123E~2) = ~inf +/ (~inf, ~0.123E~2) = inf +nextAfter (~inf, ~0.123E~2) = ~inf +rem (~inf, ~0.123E~2) = nan +* (~inf, ~0.11754944E~37) = inf ++ (~inf, ~0.11754944E~37) = ~inf +- (~inf, ~0.11754944E~37) = ~inf +/ (~inf, ~0.11754944E~37) = inf +nextAfter (~inf, ~0.11754944E~37) = ~inf +rem (~inf, ~0.11754944E~37) = nan +* (~inf, ~0.5877472E~38) = inf ++ (~inf, ~0.5877472E~38) = ~inf +- (~inf, ~0.5877472E~38) = ~inf +/ (~inf, ~0.5877472E~38) = inf +nextAfter (~inf, ~0.5877472E~38) = ~inf +rem (~inf, ~0.5877472E~38) = nan +* (~inf, ~0.1E~44) = inf ++ (~inf, ~0.1E~44) = ~inf +- (~inf, ~0.1E~44) = ~inf +/ (~inf, ~0.1E~44) = inf +nextAfter (~inf, ~0.1E~44) = ~inf +rem (~inf, ~0.1E~44) = nan +* (~inf, ~0.0) = nan ++ (~inf, ~0.0) = ~inf +- (~inf, ~0.0) = ~inf +/ (~inf, ~0.0) = inf +nextAfter (~inf, ~0.0) = ~inf +rem (~inf, ~0.0) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (~inf, ~inf) = inf ++ (~inf, ~inf) = ~inf +- (~inf, ~inf) = nan +/ (~inf, ~inf) = nan +nextAfter (~inf, ~inf) = ~inf +rem (~inf, ~inf) = nan +* (~inf, nan) = nan ++ (~inf, nan) = nan +- (~inf, nan) = nan +/ (~inf, nan) = nan +nextAfter (~inf, nan) = nan +rem (~inf, nan) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (nan, 0.34028235E39) = nan ++ (nan, 0.34028235E39) = nan +- (nan, 0.34028235E39) = nan +/ (nan, 0.34028235E39) = nan +nextAfter (nan, 0.34028235E39) = nan +rem (nan, 0.34028235E39) = nan +* (nan, 0.17014117E39) = nan ++ (nan, 0.17014117E39) = nan +- (nan, 0.17014117E39) = nan +/ (nan, 0.17014117E39) = nan +nextAfter (nan, 0.17014117E39) = nan +rem (nan, 0.17014117E39) = nan +* (nan, 0.123E4) = nan ++ (nan, 0.123E4) = nan +- (nan, 0.123E4) = nan +/ (nan, 0.123E4) = nan +nextAfter (nan, 0.123E4) = nan +rem (nan, 0.123E4) = nan +* (nan, 0.123E2) = nan ++ (nan, 0.123E2) = nan +- (nan, 0.123E2) = nan +/ (nan, 0.123E2) = nan +nextAfter (nan, 0.123E2) = nan +rem (nan, 0.123E2) = nan +* (nan, 0.31415927E1) = nan ++ (nan, 0.31415927E1) = nan +- (nan, 0.31415927E1) = nan +/ (nan, 0.31415927E1) = nan +nextAfter (nan, 0.31415927E1) = nan +rem (nan, 0.31415927E1) = nan +* (nan, 0.27182817E1) = nan ++ (nan, 0.27182817E1) = nan +- (nan, 0.27182817E1) = nan +/ (nan, 0.27182817E1) = nan +nextAfter (nan, 0.27182817E1) = nan +rem (nan, 0.27182817E1) = nan +* (nan, 0.123E1) = nan ++ (nan, 0.123E1) = nan +- (nan, 0.123E1) = nan +/ (nan, 0.123E1) = nan +nextAfter (nan, 0.123E1) = nan +rem (nan, 0.123E1) = nan +* (nan, 0.123) = nan ++ (nan, 0.123) = nan +- (nan, 0.123) = nan +/ (nan, 0.123) = nan +nextAfter (nan, 0.123) = nan +rem (nan, 0.123) = nan +* (nan, 0.123E~2) = nan ++ (nan, 0.123E~2) = nan +- (nan, 0.123E~2) = nan +/ (nan, 0.123E~2) = nan +nextAfter (nan, 0.123E~2) = nan +rem (nan, 0.123E~2) = nan +* (nan, 0.11754944E~37) = nan ++ (nan, 0.11754944E~37) = nan +- (nan, 0.11754944E~37) = nan +/ (nan, 0.11754944E~37) = nan +nextAfter (nan, 0.11754944E~37) = nan +rem (nan, 0.11754944E~37) = nan +* (nan, 0.5877472E~38) = nan ++ (nan, 0.5877472E~38) = nan +- (nan, 0.5877472E~38) = nan +/ (nan, 0.5877472E~38) = nan +nextAfter (nan, 0.5877472E~38) = nan +rem (nan, 0.5877472E~38) = nan +* (nan, 0.1E~44) = nan ++ (nan, 0.1E~44) = nan +- (nan, 0.1E~44) = nan +/ (nan, 0.1E~44) = nan +nextAfter (nan, 0.1E~44) = nan +rem (nan, 0.1E~44) = nan +* (nan, 0.0) = nan ++ (nan, 0.0) = nan +- (nan, 0.0) = nan +/ (nan, 0.0) = nan +nextAfter (nan, 0.0) = nan +rem (nan, 0.0) = nan +* (nan, ~0.34028235E39) = nan ++ (nan, ~0.34028235E39) = nan +- (nan, ~0.34028235E39) = nan +/ (nan, ~0.34028235E39) = nan +nextAfter (nan, ~0.34028235E39) = nan +rem (nan, ~0.34028235E39) = nan +* (nan, ~0.17014117E39) = nan ++ (nan, ~0.17014117E39) = nan +- (nan, ~0.17014117E39) = nan +/ (nan, ~0.17014117E39) = nan +nextAfter (nan, ~0.17014117E39) = nan +rem (nan, ~0.17014117E39) = nan +* (nan, ~0.123E4) = nan ++ (nan, ~0.123E4) = nan +- (nan, ~0.123E4) = nan +/ (nan, ~0.123E4) = nan +nextAfter (nan, ~0.123E4) = nan +rem (nan, ~0.123E4) = nan +* (nan, ~0.123E2) = nan ++ (nan, ~0.123E2) = nan +- (nan, ~0.123E2) = nan +/ (nan, ~0.123E2) = nan +nextAfter (nan, ~0.123E2) = nan +rem (nan, ~0.123E2) = nan +* (nan, ~0.31415927E1) = nan ++ (nan, ~0.31415927E1) = nan +- (nan, ~0.31415927E1) = nan +/ (nan, ~0.31415927E1) = nan +nextAfter (nan, ~0.31415927E1) = nan +rem (nan, ~0.31415927E1) = nan +* (nan, ~0.27182817E1) = nan ++ (nan, ~0.27182817E1) = nan +- (nan, ~0.27182817E1) = nan +/ (nan, ~0.27182817E1) = nan +nextAfter (nan, ~0.27182817E1) = nan +rem (nan, ~0.27182817E1) = nan +* (nan, ~0.123E1) = nan ++ (nan, ~0.123E1) = nan +- (nan, ~0.123E1) = nan +/ (nan, ~0.123E1) = nan +nextAfter (nan, ~0.123E1) = nan +rem (nan, ~0.123E1) = nan +* (nan, ~0.123) = nan ++ (nan, ~0.123) = nan +- (nan, ~0.123) = nan +/ (nan, ~0.123) = nan +nextAfter (nan, ~0.123) = nan +rem (nan, ~0.123) = nan +* (nan, ~0.123E~2) = nan ++ (nan, ~0.123E~2) = nan +- (nan, ~0.123E~2) = nan +/ (nan, ~0.123E~2) = nan +nextAfter (nan, ~0.123E~2) = nan +rem (nan, ~0.123E~2) = nan +* (nan, ~0.11754944E~37) = nan ++ (nan, ~0.11754944E~37) = nan +- (nan, ~0.11754944E~37) = nan +/ (nan, ~0.11754944E~37) = nan +nextAfter (nan, ~0.11754944E~37) = nan +rem (nan, ~0.11754944E~37) = nan +* (nan, ~0.5877472E~38) = nan ++ (nan, ~0.5877472E~38) = nan +- (nan, ~0.5877472E~38) = nan +/ (nan, ~0.5877472E~38) = nan +nextAfter (nan, ~0.5877472E~38) = nan +rem (nan, ~0.5877472E~38) = nan +* (nan, ~0.1E~44) = nan ++ (nan, ~0.1E~44) = nan +- (nan, ~0.1E~44) = nan +/ (nan, ~0.1E~44) = nan +nextAfter (nan, ~0.1E~44) = nan +rem (nan, ~0.1E~44) = nan +* (nan, ~0.0) = nan ++ (nan, ~0.0) = nan +- (nan, ~0.0) = nan +/ (nan, ~0.0) = nan +nextAfter (nan, ~0.0) = nan +rem (nan, ~0.0) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (nan, ~inf) = nan ++ (nan, ~inf) = nan +- (nan, ~inf) = nan +/ (nan, ~inf) = nan +nextAfter (nan, ~inf) = nan +rem (nan, ~inf) = nan +* (nan, nan) = nan ++ (nan, nan) = nan +- (nan, nan) = nan +/ (nan, nan) = nan +nextAfter (nan, nan) = nan +rem (nan, nan) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (inf, 0.34028235E39) = inf ++ (inf, 0.34028235E39) = inf +- (inf, 0.34028235E39) = inf +/ (inf, 0.34028235E39) = inf +nextAfter (inf, 0.34028235E39) = inf +rem (inf, 0.34028235E39) = nan +* (inf, 0.17014117E39) = inf ++ (inf, 0.17014117E39) = inf +- (inf, 0.17014117E39) = inf +/ (inf, 0.17014117E39) = inf +nextAfter (inf, 0.17014117E39) = inf +rem (inf, 0.17014117E39) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.31415927E1) = inf ++ (inf, 0.31415927E1) = inf +- (inf, 0.31415927E1) = inf +/ (inf, 0.31415927E1) = inf +nextAfter (inf, 0.31415927E1) = inf +rem (inf, 0.31415927E1) = nan +* (inf, 0.27182817E1) = inf ++ (inf, 0.27182817E1) = inf +- (inf, 0.27182817E1) = inf +/ (inf, 0.27182817E1) = inf +nextAfter (inf, 0.27182817E1) = inf +rem (inf, 0.27182817E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.11754944E~37) = inf ++ (inf, 0.11754944E~37) = inf +- (inf, 0.11754944E~37) = inf +/ (inf, 0.11754944E~37) = inf +nextAfter (inf, 0.11754944E~37) = inf +rem (inf, 0.11754944E~37) = nan +* (inf, 0.5877472E~38) = inf ++ (inf, 0.5877472E~38) = inf +- (inf, 0.5877472E~38) = inf +/ (inf, 0.5877472E~38) = inf +nextAfter (inf, 0.5877472E~38) = inf +rem (inf, 0.5877472E~38) = nan +* (inf, 0.1E~44) = inf ++ (inf, 0.1E~44) = inf +- (inf, 0.1E~44) = inf +/ (inf, 0.1E~44) = inf +nextAfter (inf, 0.1E~44) = inf +rem (inf, 0.1E~44) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.34028235E39) = ~inf ++ (inf, ~0.34028235E39) = inf +- (inf, ~0.34028235E39) = inf +/ (inf, ~0.34028235E39) = ~inf +nextAfter (inf, ~0.34028235E39) = inf +rem (inf, ~0.34028235E39) = nan +* (inf, ~0.17014117E39) = ~inf ++ (inf, ~0.17014117E39) = inf +- (inf, ~0.17014117E39) = inf +/ (inf, ~0.17014117E39) = ~inf +nextAfter (inf, ~0.17014117E39) = inf +rem (inf, ~0.17014117E39) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.31415927E1) = ~inf ++ (inf, ~0.31415927E1) = inf +- (inf, ~0.31415927E1) = inf +/ (inf, ~0.31415927E1) = ~inf +nextAfter (inf, ~0.31415927E1) = inf +rem (inf, ~0.31415927E1) = nan +* (inf, ~0.27182817E1) = ~inf ++ (inf, ~0.27182817E1) = inf +- (inf, ~0.27182817E1) = inf +/ (inf, ~0.27182817E1) = ~inf +nextAfter (inf, ~0.27182817E1) = inf +rem (inf, ~0.27182817E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.11754944E~37) = ~inf ++ (inf, ~0.11754944E~37) = inf +- (inf, ~0.11754944E~37) = inf +/ (inf, ~0.11754944E~37) = ~inf +nextAfter (inf, ~0.11754944E~37) = inf +rem (inf, ~0.11754944E~37) = nan +* (inf, ~0.5877472E~38) = ~inf ++ (inf, ~0.5877472E~38) = inf +- (inf, ~0.5877472E~38) = inf +/ (inf, ~0.5877472E~38) = ~inf +nextAfter (inf, ~0.5877472E~38) = inf +rem (inf, ~0.5877472E~38) = nan +* (inf, ~0.1E~44) = ~inf ++ (inf, ~0.1E~44) = inf +- (inf, ~0.1E~44) = inf +/ (inf, ~0.1E~44) = ~inf +nextAfter (inf, ~0.1E~44) = inf +rem (inf, ~0.1E~44) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan + +Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh,atan2,pow} +acos (0.34028235E39) = nan +asin (0.34028235E39) = nan +atan (0.34028235E39) = 1.570796371 +cos (0.34028235E39) = 3.402823466E38 +cosh (0.34028235E39) = inf +exp (0.34028235E39) = inf +ln (0.34028235E39) = 88.72283936 +log10 (0.34028235E39) = 38.53184128 +sin (0.34028235E39) = 3.402823466E38 +sinh (0.34028235E39) = inf +sqrt (0.34028235E39) = 1.844674297E19 +tan (0.34028235E39) = nan +tanh (0.34028235E39) = 1 +acos (0.17014117E39) = nan +asin (0.17014117E39) = nan +atan (0.17014117E39) = 1.570796371 +cos (0.17014117E39) = 1.701411733E38 +cosh (0.17014117E39) = inf +exp (0.17014117E39) = inf +ln (0.17014117E39) = 88.0296936 +log10 (0.17014117E39) = 38.23080826 +sin (0.17014117E39) = 1.701411733E38 +sinh (0.17014117E39) = inf +sqrt (0.17014117E39) = 1.30438176E19 +tan (0.17014117E39) = nan +tanh (0.17014117E39) = 1 +acos (0.123E4) = nan +asin (0.123E4) = nan +atan (0.123E4) = 1.569983363 +cos (0.123E4) = 0.06642717123 +cosh (0.123E4) = inf +exp (0.123E4) = inf +ln (0.123E4) = 7.114769459 +log10 (0.123E4) = 3.089905024 +sin (0.123E4) = ~0.9977912903 +sinh (0.123E4) = inf +sqrt (0.123E4) = 35.07135773 +tan (0.123E4) = ~15.02083111 +tanh (0.123E4) = 1 +acos (0.123E2) = nan +asin (0.123E2) = nan +atan (0.123E2) = 1.489673972 +cos (0.123E2) = 0.9647326469 +cosh (0.123E2) = 109848.0156 +exp (0.123E2) = 219696.0312 +ln (0.123E2) = 2.509599209 +log10 (0.123E2) = 1.089905143 +sin (0.123E2) = ~0.2632316053 +sinh (0.123E2) = 109848.0156 +sqrt (0.123E2) = 3.50713563 +tan (0.123E2) = ~0.2728544474 +tanh (0.123E2) = 1 +acos (0.31415927E1) = nan +asin (0.31415927E1) = nan +atan (0.31415927E1) = 1.262627244 +cos (0.31415927E1) = ~1 +cosh (0.31415927E1) = 11.59195518 +exp (0.31415927E1) = 23.14069557 +ln (0.31415927E1) = 1.144729972 +log10 (0.31415927E1) = 0.4971498847 +sin (0.31415927E1) = ~8.742277657E~8 +sinh (0.31415927E1) = 11.54874039 +sqrt (0.31415927E1) = 1.772453904 +tan (0.31415927E1) = 8.742277657E~8 +tanh (0.31415927E1) = 0.9962720871 +acos (0.27182817E1) = nan +asin (0.27182817E1) = nan +atan (0.27182817E1) = 1.218282938 +cos (0.27182817E1) = ~0.9117338657 +cosh (0.27182817E1) = 7.610124111 +exp (0.27182817E1) = 15.15426064 +ln (0.27182817E1) = 0.9999999404 +log10 (0.27182817E1) = 0.4342944622 +sin (0.27182817E1) = 0.4107813537 +sinh (0.27182817E1) = 7.544136524 +sqrt (0.27182817E1) = 1.648721218 +tan (0.27182817E1) = ~0.4505496323 +tanh (0.27182817E1) = 0.9913288951 +acos (0.123E1) = nan +asin (0.123E1) = nan +atan (0.123E1) = 0.888173759 +cos (0.123E1) = 0.3342376947 +cosh (0.123E1) = 1.856761098 +exp (0.123E1) = 3.421229601 +ln (0.123E1) = 0.2070141882 +log10 (0.123E1) = 0.08990512043 +sin (0.123E1) = 0.9424887896 +sinh (0.123E1) = 1.564468503 +sqrt (0.123E1) = 1.109053612 +tan (0.123E1) = 2.819815874 +tanh (0.123E1) = 0.8425793052 +acos (0.123) = 1.447484016 +asin (0.123) = 0.1233122796 +atan (0.123) = 0.1223852858 +cos (0.123) = 0.9924450517 +cosh (0.123) = 1.007574081 +exp (0.123) = 1.130884409 +ln (0.123) = ~2.095570803 +log10 (0.123) = ~0.9100948572 +sin (0.123) = 0.1226900965 +sinh (0.123) = 0.1233103797 +sqrt (0.123) = 0.350713551 +tan (0.123) = 0.1236240715 +tanh (0.123) = 0.1223834455 +acos (0.123E~2) = 1.569566369 +asin (0.123E~2) = 0.001230000402 +atan (0.123E~2) = 0.001229999471 +cos (0.123E~2) = 0.9999992251 +cosh (0.123E~2) = 1.000000715 +exp (0.123E~2) = 1.001230717 +ln (0.123E~2) = ~6.700741291 +log10 (0.123E~2) = ~2.910094976 +sin (0.123E~2) = 0.001229999703 +sinh (0.123E~2) = 0.001230000402 +sqrt (0.123E~2) = 0.03507135808 +tan (0.123E~2) = 0.001230000635 +tanh (0.123E~2) = 0.001229999471 +acos (0.11754944E~37) = 1.570796371 +asin (0.11754944E~37) = 1.175494351E~38 +atan (0.11754944E~37) = 1.175494351E~38 +cos (0.11754944E~37) = 1 +cosh (0.11754944E~37) = 1 +exp (0.11754944E~37) = 1 +ln (0.11754944E~37) = ~87.33654785 +log10 (0.11754944E~37) = ~37.92977905 +sin (0.11754944E~37) = 1.175494351E~38 +sinh (0.11754944E~37) = 1.175494351E~38 +sqrt (0.11754944E~37) = 1.084202172E~19 +tan (0.11754944E~37) = 1.175494351E~38 +tanh (0.11754944E~37) = 1.175494351E~38 +acos (0.5877472E~38) = 1.570796371 +asin (0.5877472E~38) = 5.877471754E~39 +atan (0.5877472E~38) = 5.877471754E~39 +cos (0.5877472E~38) = 1 +cosh (0.5877472E~38) = 1 +exp (0.5877472E~38) = 1 +ln (0.5877472E~38) = ~88.0296936 +log10 (0.5877472E~38) = ~38.23080826 +sin (0.5877472E~38) = 5.877471754E~39 +sinh (0.5877472E~38) = 5.877471754E~39 +sqrt (0.5877472E~38) = 7.666466952E~20 +tan (0.5877472E~38) = 5.877471754E~39 +tanh (0.5877472E~38) = 5.877471754E~39 +acos (0.1E~44) = 1.570796371 +asin (0.1E~44) = 1.401298464E~45 +atan (0.1E~44) = 1.401298464E~45 +cos (0.1E~44) = 1 +cosh (0.1E~44) = 1 +exp (0.1E~44) = 1 +ln (0.1E~44) = ~103.2789307 +log10 (0.1E~44) = ~44.85346985 +sin (0.1E~44) = 1.401298464E~45 +sinh (0.1E~44) = 1.401298464E~45 +sqrt (0.1E~44) = 3.743392067E~23 +tan (0.1E~44) = 1.401298464E~45 +tanh (0.1E~44) = 1.401298464E~45 +acos (0.0) = 1.570796371 +asin (0.0) = 0 +atan (0.0) = 0 +cos (0.0) = 1 +cosh (0.0) = 1 +exp (0.0) = 1 +ln (0.0) = ~inf +log10 (0.0) = ~inf +sin (0.0) = 0 +sinh (0.0) = 0 +sqrt (0.0) = 0 +tan (0.0) = 0 +tanh (0.0) = 0 +acos (~0.34028235E39) = nan +asin (~0.34028235E39) = nan +atan (~0.34028235E39) = ~1.570796371 +cos (~0.34028235E39) = ~3.402823466E38 +cosh (~0.34028235E39) = inf +exp (~0.34028235E39) = 0 +ln (~0.34028235E39) = nan +log10 (~0.34028235E39) = nan +sin (~0.34028235E39) = ~3.402823466E38 +sinh (~0.34028235E39) = ~inf +sqrt (~0.34028235E39) = nan +tan (~0.34028235E39) = nan +tanh (~0.34028235E39) = ~1 +acos (~0.17014117E39) = nan +asin (~0.17014117E39) = nan +atan (~0.17014117E39) = ~1.570796371 +cos (~0.17014117E39) = ~1.701411733E38 +cosh (~0.17014117E39) = inf +exp (~0.17014117E39) = 0 +ln (~0.17014117E39) = nan +log10 (~0.17014117E39) = nan +sin (~0.17014117E39) = ~1.701411733E38 +sinh (~0.17014117E39) = ~inf +sqrt (~0.17014117E39) = nan +tan (~0.17014117E39) = nan +tanh (~0.17014117E39) = ~1 +acos (~0.123E4) = nan +asin (~0.123E4) = nan +atan (~0.123E4) = ~1.569983363 +cos (~0.123E4) = 0.06642717123 +cosh (~0.123E4) = inf +exp (~0.123E4) = 0 +ln (~0.123E4) = nan +log10 (~0.123E4) = nan +sin (~0.123E4) = 0.9977912903 +sinh (~0.123E4) = ~inf +sqrt (~0.123E4) = nan +tan (~0.123E4) = 15.02083111 +tanh (~0.123E4) = ~1 +acos (~0.123E2) = nan +asin (~0.123E2) = nan +atan (~0.123E2) = ~1.489673972 +cos (~0.123E2) = 0.9647326469 +cosh (~0.123E2) = 109848.0156 +exp (~0.123E2) = 4.551743586E~6 +ln (~0.123E2) = nan +log10 (~0.123E2) = nan +sin (~0.123E2) = 0.2632316053 +sinh (~0.123E2) = ~109848.0156 +sqrt (~0.123E2) = nan +tan (~0.123E2) = 0.2728544474 +tanh (~0.123E2) = ~1 +acos (~0.31415927E1) = nan +asin (~0.31415927E1) = nan +atan (~0.31415927E1) = ~1.262627244 +cos (~0.31415927E1) = ~1 +cosh (~0.31415927E1) = 11.59195518 +exp (~0.31415927E1) = 0.04321391508 +ln (~0.31415927E1) = nan +log10 (~0.31415927E1) = nan +sin (~0.31415927E1) = 8.742277657E~8 +sinh (~0.31415927E1) = ~11.54874039 +sqrt (~0.31415927E1) = nan +tan (~0.31415927E1) = ~8.742277657E~8 +tanh (~0.31415927E1) = ~0.9962720871 +acos (~0.27182817E1) = nan +asin (~0.27182817E1) = nan +atan (~0.27182817E1) = ~1.218282938 +cos (~0.27182817E1) = ~0.9117338657 +cosh (~0.27182817E1) = 7.610124111 +exp (~0.27182817E1) = 0.06598804146 +ln (~0.27182817E1) = nan +log10 (~0.27182817E1) = nan +sin (~0.27182817E1) = ~0.4107813537 +sinh (~0.27182817E1) = ~7.544136524 +sqrt (~0.27182817E1) = nan +tan (~0.27182817E1) = 0.4505496323 +tanh (~0.27182817E1) = ~0.9913288951 +acos (~0.123E1) = nan +asin (~0.123E1) = nan +atan (~0.123E1) = ~0.888173759 +cos (~0.123E1) = 0.3342376947 +cosh (~0.123E1) = 1.856761098 +exp (~0.123E1) = 0.2922925651 +ln (~0.123E1) = nan +log10 (~0.123E1) = nan +sin (~0.123E1) = ~0.9424887896 +sinh (~0.123E1) = ~1.564468503 +sqrt (~0.123E1) = nan +tan (~0.123E1) = ~2.819815874 +tanh (~0.123E1) = ~0.8425793052 +acos (~0.123) = 1.694108605 +asin (~0.123) = ~0.1233122796 +atan (~0.123) = ~0.1223852858 +cos (~0.123) = 0.9924450517 +cosh (~0.123) = 1.007574081 +exp (~0.123) = 0.8842636347 +ln (~0.123) = nan +log10 (~0.123) = nan +sin (~0.123) = ~0.1226900965 +sinh (~0.123) = ~0.1233103797 +sqrt (~0.123) = nan +tan (~0.123) = ~0.1236240715 +tanh (~0.123) = ~0.1223834455 +acos (~0.123E~2) = 1.572026372 +asin (~0.123E~2) = ~0.001230000402 +atan (~0.123E~2) = ~0.001229999471 +cos (~0.123E~2) = 0.9999992251 +cosh (~0.123E~2) = 1.000000715 +exp (~0.123E~2) = 0.9987707734 +ln (~0.123E~2) = nan +log10 (~0.123E~2) = nan +sin (~0.123E~2) = ~0.001229999703 +sinh (~0.123E~2) = ~0.001230000402 +sqrt (~0.123E~2) = nan +tan (~0.123E~2) = ~0.001230000635 +tanh (~0.123E~2) = ~0.001229999471 +acos (~0.11754944E~37) = 1.570796371 +asin (~0.11754944E~37) = ~1.175494351E~38 +atan (~0.11754944E~37) = ~1.175494351E~38 +cos (~0.11754944E~37) = 1 +cosh (~0.11754944E~37) = 1 +exp (~0.11754944E~37) = 1 +ln (~0.11754944E~37) = nan +log10 (~0.11754944E~37) = nan +sin (~0.11754944E~37) = ~1.175494351E~38 +sinh (~0.11754944E~37) = ~1.175494351E~38 +sqrt (~0.11754944E~37) = nan +tan (~0.11754944E~37) = ~1.175494351E~38 +tanh (~0.11754944E~37) = ~1.175494351E~38 +acos (~0.5877472E~38) = 1.570796371 +asin (~0.5877472E~38) = ~5.877471754E~39 +atan (~0.5877472E~38) = ~5.877471754E~39 +cos (~0.5877472E~38) = 1 +cosh (~0.5877472E~38) = 1 +exp (~0.5877472E~38) = 1 +ln (~0.5877472E~38) = nan +log10 (~0.5877472E~38) = nan +sin (~0.5877472E~38) = ~5.877471754E~39 +sinh (~0.5877472E~38) = ~5.877471754E~39 +sqrt (~0.5877472E~38) = nan +tan (~0.5877472E~38) = ~5.877471754E~39 +tanh (~0.5877472E~38) = ~5.877471754E~39 +acos (~0.1E~44) = 1.570796371 +asin (~0.1E~44) = ~1.401298464E~45 +atan (~0.1E~44) = ~1.401298464E~45 +cos (~0.1E~44) = 1 +cosh (~0.1E~44) = 1 +exp (~0.1E~44) = 1 +ln (~0.1E~44) = nan +log10 (~0.1E~44) = nan +sin (~0.1E~44) = ~1.401298464E~45 +sinh (~0.1E~44) = ~1.401298464E~45 +sqrt (~0.1E~44) = nan +tan (~0.1E~44) = ~1.401298464E~45 +tanh (~0.1E~44) = ~1.401298464E~45 +acos (~0.0) = 1.570796371 +asin (~0.0) = 0 +atan (~0.0) = 0 +cos (~0.0) = 1 +cosh (~0.0) = 1 +exp (~0.0) = 1 +ln (~0.0) = ~inf +log10 (~0.0) = ~inf +sin (~0.0) = 0 +sinh (~0.0) = 0 +sqrt (~0.0) = 0 +tan (~0.0) = 0 +tanh (~0.0) = 0 +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796371 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +acos (~inf) = nan +asin (~inf) = nan +atan (~inf) = ~1.570796371 +cos (~inf) = nan +cosh (~inf) = ~inf +exp (~inf) = 0 +ln (~inf) = nan +log10 (~inf) = nan +sin (~inf) = nan +sinh (~inf) = ~inf +sqrt (~inf) = nan +tan (~inf) = nan +tanh (~inf) = ~1 +acos (nan) = nan +asin (nan) = nan +atan (nan) = nan +cos (nan) = nan +cosh (nan) = nan +exp (nan) = nan +ln (nan) = nan +log10 (nan) = nan +sin (nan) = nan +sinh (nan) = nan +sqrt (nan) = nan +tan (nan) = nan +tanh (nan) = nan +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796371 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +atan2 (0.34028235E39, 0.34028235E39) = 0.7853981853 +pow (0.34028235E39, 0.34028235E39) = inf +atan2 (0.34028235E39, 0.17014117E39) = 1.107148767 +pow (0.34028235E39, 0.17014117E39) = inf +atan2 (0.34028235E39, 0.123E4) = 1.570796371 +pow (0.34028235E39, 0.123E4) = inf +atan2 (0.34028235E39, 0.123E2) = 1.570796371 +pow (0.34028235E39, 0.123E2) = inf +atan2 (0.34028235E39, 0.31415927E1) = 1.570796371 +pow (0.34028235E39, 0.31415927E1) = inf +atan2 (0.34028235E39, 0.27182817E1) = 1.570796371 +pow (0.34028235E39, 0.27182817E1) = inf +atan2 (0.34028235E39, 0.123E1) = 1.570796371 +pow (0.34028235E39, 0.123E1) = inf +atan2 (0.34028235E39, 0.123) = 1.570796371 +pow (0.34028235E39, 0.123) = 54880.28906 +atan2 (0.34028235E39, 0.123E~2) = 1.570796371 +pow (0.34028235E39, 0.123E~2) = 1.115306377 +atan2 (0.34028235E39, 0.11754944E~37) = 1.570796371 +pow (0.34028235E39, 0.11754944E~37) = 1 +atan2 (0.34028235E39, 0.5877472E~38) = 1.570796371 +pow (0.34028235E39, 0.5877472E~38) = 1 +atan2 (0.34028235E39, 0.1E~44) = 1.570796371 +pow (0.34028235E39, 0.1E~44) = 1 +atan2 (0.34028235E39, 0.0) = 1.570796371 +pow (0.34028235E39, 0.0) = 1 +atan2 (0.34028235E39, ~0.34028235E39) = 2.356194496 +pow (0.34028235E39, ~0.34028235E39) = 0 +atan2 (0.34028235E39, ~0.17014117E39) = 2.034443855 +pow (0.34028235E39, ~0.17014117E39) = 0 +atan2 (0.34028235E39, ~0.123E4) = 1.570796371 +pow (0.34028235E39, ~0.123E4) = 0 +atan2 (0.34028235E39, ~0.123E2) = 1.570796371 +pow (0.34028235E39, ~0.123E2) = 0 +atan2 (0.34028235E39, ~0.31415927E1) = 1.570796371 +pow (0.34028235E39, ~0.31415927E1) = 0 +atan2 (0.34028235E39, ~0.27182817E1) = 1.570796371 +pow (0.34028235E39, ~0.27182817E1) = 0 +atan2 (0.34028235E39, ~0.123E1) = 1.570796371 +pow (0.34028235E39, ~0.123E1) = 0 +atan2 (0.34028235E39, ~0.123) = 1.570796371 +pow (0.34028235E39, ~0.123) = 1.822147897E~5 +atan2 (0.34028235E39, ~0.123E~2) = 1.570796371 +pow (0.34028235E39, ~0.123E~2) = 0.8966146708 +atan2 (0.34028235E39, ~0.11754944E~37) = 1.570796371 +pow (0.34028235E39, ~0.11754944E~37) = 1 +atan2 (0.34028235E39, ~0.5877472E~38) = 1.570796371 +pow (0.34028235E39, ~0.5877472E~38) = 1 +atan2 (0.34028235E39, ~0.1E~44) = 1.570796371 +pow (0.34028235E39, ~0.1E~44) = 1 +atan2 (0.34028235E39, ~0.0) = 1.570796371 +pow (0.34028235E39, ~0.0) = 1 +atan2 (0.34028235E39, inf) = 0 +pow (0.34028235E39, inf) = inf +atan2 (0.34028235E39, ~inf) = 3.141592741 +pow (0.34028235E39, ~inf) = 0 +atan2 (0.34028235E39, nan) = nan +pow (0.34028235E39, nan) = nan +atan2 (0.34028235E39, inf) = 0 +pow (0.34028235E39, inf) = inf +atan2 (0.17014117E39, 0.34028235E39) = 0.463647604 +pow (0.17014117E39, 0.34028235E39) = inf +atan2 (0.17014117E39, 0.17014117E39) = 0.7853981853 +pow (0.17014117E39, 0.17014117E39) = inf +atan2 (0.17014117E39, 0.123E4) = 1.570796371 +pow (0.17014117E39, 0.123E4) = inf +atan2 (0.17014117E39, 0.123E2) = 1.570796371 +pow (0.17014117E39, 0.123E2) = inf +atan2 (0.17014117E39, 0.31415927E1) = 1.570796371 +pow (0.17014117E39, 0.31415927E1) = inf +atan2 (0.17014117E39, 0.27182817E1) = 1.570796371 +pow (0.17014117E39, 0.27182817E1) = inf +atan2 (0.17014117E39, 0.123E1) = 1.570796371 +pow (0.17014117E39, 0.123E1) = inf +atan2 (0.17014117E39, 0.123) = 1.570796371 +pow (0.17014117E39, 0.123) = 50395.26172 +atan2 (0.17014117E39, 0.123E~2) = 1.570796371 +pow (0.17014117E39, 0.123E~2) = 1.114355803 +atan2 (0.17014117E39, 0.11754944E~37) = 1.570796371 +pow (0.17014117E39, 0.11754944E~37) = 1 +atan2 (0.17014117E39, 0.5877472E~38) = 1.570796371 +pow (0.17014117E39, 0.5877472E~38) = 1 +atan2 (0.17014117E39, 0.1E~44) = 1.570796371 +pow (0.17014117E39, 0.1E~44) = 1 +atan2 (0.17014117E39, 0.0) = 1.570796371 +pow (0.17014117E39, 0.0) = 1 +atan2 (0.17014117E39, ~0.34028235E39) = 2.677945137 +pow (0.17014117E39, ~0.34028235E39) = 0 +atan2 (0.17014117E39, ~0.17014117E39) = 2.356194496 +pow (0.17014117E39, ~0.17014117E39) = 0 +atan2 (0.17014117E39, ~0.123E4) = 1.570796371 +pow (0.17014117E39, ~0.123E4) = 0 +atan2 (0.17014117E39, ~0.123E2) = 1.570796371 +pow (0.17014117E39, ~0.123E2) = 0 +atan2 (0.17014117E39, ~0.31415927E1) = 1.570796371 +pow (0.17014117E39, ~0.31415927E1) = 0 +atan2 (0.17014117E39, ~0.27182817E1) = 1.570796371 +pow (0.17014117E39, ~0.27182817E1) = 0 +atan2 (0.17014117E39, ~0.123E1) = 1.570796371 +pow (0.17014117E39, ~0.123E1) = 0 +atan2 (0.17014117E39, ~0.123) = 1.570796371 +pow (0.17014117E39, ~0.123) = 1.984313531E~5 +atan2 (0.17014117E39, ~0.123E~2) = 1.570796371 +pow (0.17014117E39, ~0.123E~2) = 0.8973793983 +atan2 (0.17014117E39, ~0.11754944E~37) = 1.570796371 +pow (0.17014117E39, ~0.11754944E~37) = 1 +atan2 (0.17014117E39, ~0.5877472E~38) = 1.570796371 +pow (0.17014117E39, ~0.5877472E~38) = 1 +atan2 (0.17014117E39, ~0.1E~44) = 1.570796371 +pow (0.17014117E39, ~0.1E~44) = 1 +atan2 (0.17014117E39, ~0.0) = 1.570796371 +pow (0.17014117E39, ~0.0) = 1 +atan2 (0.17014117E39, inf) = 0 +pow (0.17014117E39, inf) = inf +atan2 (0.17014117E39, ~inf) = 3.141592741 +pow (0.17014117E39, ~inf) = 0 +atan2 (0.17014117E39, nan) = nan +pow (0.17014117E39, nan) = nan +atan2 (0.17014117E39, inf) = 0 +pow (0.17014117E39, inf) = inf +atan2 (0.123E4, 0.34028235E39) = 3.614645488E~36 +pow (0.123E4, 0.34028235E39) = inf +atan2 (0.123E4, 0.17014117E39) = 7.229290975E~36 +pow (0.123E4, 0.17014117E39) = inf +atan2 (0.123E4, 0.123E4) = 0.7853981853 +pow (0.123E4, 0.123E4) = inf +atan2 (0.123E4, 0.123E2) = 1.560796618 +pow (0.123E4, 0.123E2) = 1.013522656E38 +atan2 (0.123E4, 0.31415927E1) = 1.568242192 +pow (0.123E4, 0.31415927E1) = 5095930368 +atan2 (0.123E4, 0.27182817E1) = 1.568586349 +pow (0.123E4, 0.27182817E1) = 250745216 +atan2 (0.123E4, 0.123E1) = 1.569796324 +pow (0.123E4, 0.123E1) = 6318.054199 +atan2 (0.123E4, 0.123) = 1.570696354 +pow (0.123E4, 0.123) = 2.39915514 +atan2 (0.123E4, 0.123E~2) = 1.570795298 +pow (0.123E4, 0.123E~2) = 1.008789539 +atan2 (0.123E4, 0.11754944E~37) = 1.570796371 +pow (0.123E4, 0.11754944E~37) = 1 +atan2 (0.123E4, 0.5877472E~38) = 1.570796371 +pow (0.123E4, 0.5877472E~38) = 1 +atan2 (0.123E4, 0.1E~44) = 1.570796371 +pow (0.123E4, 0.1E~44) = 1 +atan2 (0.123E4, 0.0) = 1.570796371 +pow (0.123E4, 0.0) = 1 +atan2 (0.123E4, ~0.34028235E39) = 3.141592741 +pow (0.123E4, ~0.34028235E39) = 0 +atan2 (0.123E4, ~0.17014117E39) = 3.141592741 +pow (0.123E4, ~0.17014117E39) = 0 +atan2 (0.123E4, ~0.123E4) = 2.356194496 +pow (0.123E4, ~0.123E4) = 0 +atan2 (0.123E4, ~0.123E2) = 1.580796003 +pow (0.123E4, ~0.123E2) = 9.86657752E~39 +atan2 (0.123E4, ~0.31415927E1) = 1.57335043 +pow (0.123E4, ~0.31415927E1) = 1.962350282E~10 +atan2 (0.123E4, ~0.27182817E1) = 1.573006272 +pow (0.123E4, ~0.27182817E1) = 3.988112063E~9 +atan2 (0.123E4, ~0.123E1) = 1.571796298 +pow (0.123E4, ~0.123E1) = 1.582765835E~4 +atan2 (0.123E4, ~0.123) = 1.570896268 +pow (0.123E4, ~0.123) = 0.4168134034 +atan2 (0.123E4, ~0.123E~2) = 1.570797324 +pow (0.123E4, ~0.123E~2) = 0.991286993 +atan2 (0.123E4, ~0.11754944E~37) = 1.570796371 +pow (0.123E4, ~0.11754944E~37) = 1 +atan2 (0.123E4, ~0.5877472E~38) = 1.570796371 +pow (0.123E4, ~0.5877472E~38) = 1 +atan2 (0.123E4, ~0.1E~44) = 1.570796371 +pow (0.123E4, ~0.1E~44) = 1 +atan2 (0.123E4, ~0.0) = 1.570796371 +pow (0.123E4, ~0.0) = 1 +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E4, ~inf) = 3.141592741 +pow (0.123E4, ~inf) = 0 +atan2 (0.123E4, nan) = nan +pow (0.123E4, nan) = nan +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E2, 0.34028235E39) = 3.614645465E~38 +pow (0.123E2, 0.34028235E39) = inf +atan2 (0.123E2, 0.17014117E39) = 7.22929093E~38 +pow (0.123E2, 0.17014117E39) = inf +atan2 (0.123E2, 0.123E4) = 0.009999667294 +pow (0.123E2, 0.123E4) = inf +atan2 (0.123E2, 0.123E2) = 0.7853981853 +pow (0.123E2, 0.123E2) = 2.545852141E13 +atan2 (0.123E2, 0.31415927E1) = 1.32072866 +pow (0.123E2, 0.31415927E1) = 2654.837891 +atan2 (0.123E2, 0.27182817E1) = 1.353293777 +pow (0.123E2, 0.27182817E1) = 917.6333618 +atan2 (0.123E2, 0.123E1) = 1.471127629 +pow (0.123E2, 0.123E1) = 21.90702057 +atan2 (0.123E2, 0.123) = 1.560796618 +pow (0.123E2, 0.123) = 1.361627579 +atan2 (0.123E2, 0.123E~2) = 1.570696354 +pow (0.123E2, 0.123E~2) = 1.003091574 +atan2 (0.123E2, 0.11754944E~37) = 1.570796371 +pow (0.123E2, 0.11754944E~37) = 1 +atan2 (0.123E2, 0.5877472E~38) = 1.570796371 +pow (0.123E2, 0.5877472E~38) = 1 +atan2 (0.123E2, 0.1E~44) = 1.570796371 +pow (0.123E2, 0.1E~44) = 1 +atan2 (0.123E2, 0.0) = 1.570796371 +pow (0.123E2, 0.0) = 1 +atan2 (0.123E2, ~0.34028235E39) = 3.141592741 +pow (0.123E2, ~0.34028235E39) = 0 +atan2 (0.123E2, ~0.17014117E39) = 3.141592741 +pow (0.123E2, ~0.17014117E39) = 0 +atan2 (0.123E2, ~0.123E4) = 3.131592989 +pow (0.123E2, ~0.123E4) = 0 +atan2 (0.123E2, ~0.123E2) = 2.356194496 +pow (0.123E2, ~0.123E2) = 3.927958084E~14 +atan2 (0.123E2, ~0.31415927E1) = 1.820864081 +pow (0.123E2, ~0.31415927E1) = 3.766708251E~4 +atan2 (0.123E2, ~0.27182817E1) = 1.788298845 +pow (0.123E2, ~0.27182817E1) = 0.00108975987 +atan2 (0.123E2, ~0.123E1) = 1.670464993 +pow (0.123E2, ~0.123E1) = 0.04564746842 +atan2 (0.123E2, ~0.123) = 1.580796003 +pow (0.123E2, ~0.123) = 0.7344152331 +atan2 (0.123E2, ~0.123E~2) = 1.570896268 +pow (0.123E2, ~0.123E~2) = 0.996917963 +atan2 (0.123E2, ~0.11754944E~37) = 1.570796371 +pow (0.123E2, ~0.11754944E~37) = 1 +atan2 (0.123E2, ~0.5877472E~38) = 1.570796371 +pow (0.123E2, ~0.5877472E~38) = 1 +atan2 (0.123E2, ~0.1E~44) = 1.570796371 +pow (0.123E2, ~0.1E~44) = 1 +atan2 (0.123E2, ~0.0) = 1.570796371 +pow (0.123E2, ~0.0) = 1 +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.123E2, ~inf) = 3.141592741 +pow (0.123E2, ~inf) = 0 +atan2 (0.123E2, nan) = nan +pow (0.123E2, nan) = nan +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.31415927E1, 0.34028235E39) = 9.232312E~39 +pow (0.31415927E1, 0.34028235E39) = inf +atan2 (0.31415927E1, 0.17014117E39) = 1.8464624E~38 +pow (0.31415927E1, 0.17014117E39) = inf +atan2 (0.31415927E1, 0.123E4) = 0.002554134931 +pow (0.31415927E1, 0.123E4) = inf +atan2 (0.31415927E1, 0.123E2) = 0.2500677109 +pow (0.31415927E1, 0.123E2) = 1302997.75 +atan2 (0.31415927E1, 0.31415927E1) = 0.7853981853 +pow (0.31415927E1, 0.31415927E1) = 36.46216583 +atan2 (0.31415927E1, 0.27182817E1) = 0.8575118184 +pow (0.31415927E1, 0.27182817E1) = 22.45915794 +atan2 (0.31415927E1, 0.123E1) = 1.19762063 +pow (0.31415927E1, 0.123E1) = 4.087844372 +atan2 (0.31415927E1, 0.123) = 1.531664252 +pow (0.31415927E1, 0.123) = 1.15119648 +atan2 (0.31415927E1, 0.123E~2) = 1.570404768 +pow (0.31415927E1, 0.123E~2) = 1.001409054 +atan2 (0.31415927E1, 0.11754944E~37) = 1.570796371 +pow (0.31415927E1, 0.11754944E~37) = 1 +atan2 (0.31415927E1, 0.5877472E~38) = 1.570796371 +pow (0.31415927E1, 0.5877472E~38) = 1 +atan2 (0.31415927E1, 0.1E~44) = 1.570796371 +pow (0.31415927E1, 0.1E~44) = 1 +atan2 (0.31415927E1, 0.0) = 1.570796371 +pow (0.31415927E1, 0.0) = 1 +atan2 (0.31415927E1, ~0.34028235E39) = 3.141592741 +pow (0.31415927E1, ~0.34028235E39) = 0 +atan2 (0.31415927E1, ~0.17014117E39) = 3.141592741 +pow (0.31415927E1, ~0.17014117E39) = 0 +atan2 (0.31415927E1, ~0.123E4) = 3.139038563 +pow (0.31415927E1, ~0.123E4) = 0 +atan2 (0.31415927E1, ~0.123E2) = 2.89152503 +pow (0.31415927E1, ~0.123E2) = 7.674610174E~7 +atan2 (0.31415927E1, ~0.31415927E1) = 2.356194496 +pow (0.31415927E1, ~0.31415927E1) = 0.02742568776 +atan2 (0.31415927E1, ~0.27182817E1) = 2.284080744 +pow (0.31415927E1, ~0.27182817E1) = 0.04452526942 +atan2 (0.31415927E1, ~0.123E1) = 1.943972111 +pow (0.31415927E1, ~0.123E1) = 0.2446276993 +atan2 (0.31415927E1, ~0.123) = 1.609928489 +pow (0.31415927E1, ~0.123) = 0.8686614633 +atan2 (0.31415927E1, ~0.123E~2) = 1.571187854 +pow (0.31415927E1, ~0.123E~2) = 0.9985929728 +atan2 (0.31415927E1, ~0.11754944E~37) = 1.570796371 +pow (0.31415927E1, ~0.11754944E~37) = 1 +atan2 (0.31415927E1, ~0.5877472E~38) = 1.570796371 +pow (0.31415927E1, ~0.5877472E~38) = 1 +atan2 (0.31415927E1, ~0.1E~44) = 1.570796371 +pow (0.31415927E1, ~0.1E~44) = 1 +atan2 (0.31415927E1, ~0.0) = 1.570796371 +pow (0.31415927E1, ~0.0) = 1 +atan2 (0.31415927E1, inf) = 0 +pow (0.31415927E1, inf) = inf +atan2 (0.31415927E1, ~inf) = 3.141592741 +pow (0.31415927E1, ~inf) = 0 +atan2 (0.31415927E1, nan) = nan +pow (0.31415927E1, nan) = nan +atan2 (0.31415927E1, inf) = 0 +pow (0.31415927E1, inf) = inf +atan2 (0.27182817E1, 0.34028235E39) = 7.988312091E~39 +pow (0.27182817E1, 0.34028235E39) = inf +atan2 (0.27182817E1, 0.17014117E39) = 1.597662558E~38 +pow (0.27182817E1, 0.17014117E39) = inf +atan2 (0.27182817E1, 0.123E4) = 0.002209981671 +pow (0.27182817E1, 0.123E4) = inf +atan2 (0.27182817E1, 0.123E2) = 0.2175025195 +pow (0.27182817E1, 0.123E2) = 219695.9531 +atan2 (0.27182817E1, 0.31415927E1) = 0.7132844925 +pow (0.27182817E1, 0.31415927E1) = 23.14069176 +atan2 (0.27182817E1, 0.27182817E1) = 0.7853981853 +pow (0.27182817E1, 0.27182817E1) = 15.15425968 +atan2 (0.27182817E1, 0.123E1) = 1.145872235 +pow (0.27182817E1, 0.123E1) = 3.421229362 +atan2 (0.27182817E1, 0.123) = 1.525578022 +pow (0.27182817E1, 0.123) = 1.130884409 +atan2 (0.27182817E1, 0.123E~2) = 1.570343852 +pow (0.27182817E1, 0.123E~2) = 1.001230717 +atan2 (0.27182817E1, 0.11754944E~37) = 1.570796371 +pow (0.27182817E1, 0.11754944E~37) = 1 +atan2 (0.27182817E1, 0.5877472E~38) = 1.570796371 +pow (0.27182817E1, 0.5877472E~38) = 1 +atan2 (0.27182817E1, 0.1E~44) = 1.570796371 +pow (0.27182817E1, 0.1E~44) = 1 +atan2 (0.27182817E1, 0.0) = 1.570796371 +pow (0.27182817E1, 0.0) = 1 +atan2 (0.27182817E1, ~0.34028235E39) = 3.141592741 +pow (0.27182817E1, ~0.34028235E39) = 0 +atan2 (0.27182817E1, ~0.17014117E39) = 3.141592741 +pow (0.27182817E1, ~0.17014117E39) = 0 +atan2 (0.27182817E1, ~0.123E4) = 3.139382601 +pow (0.27182817E1, ~0.123E4) = 0 +atan2 (0.27182817E1, ~0.123E2) = 2.924090147 +pow (0.27182817E1, ~0.123E2) = 4.551745405E~6 +atan2 (0.27182817E1, ~0.31415927E1) = 2.428308249 +pow (0.27182817E1, ~0.31415927E1) = 0.04321391881 +atan2 (0.27182817E1, ~0.27182817E1) = 2.356194496 +pow (0.27182817E1, ~0.27182817E1) = 0.06598804891 +atan2 (0.27182817E1, ~0.123E1) = 1.995720506 +pow (0.27182817E1, ~0.123E1) = 0.2922925949 +atan2 (0.27182817E1, ~0.123) = 1.6160146 +pow (0.27182817E1, ~0.123) = 0.8842636347 +atan2 (0.27182817E1, ~0.123E~2) = 1.57124877 +pow (0.27182817E1, ~0.123E~2) = 0.9987707734 +atan2 (0.27182817E1, ~0.11754944E~37) = 1.570796371 +pow (0.27182817E1, ~0.11754944E~37) = 1 +atan2 (0.27182817E1, ~0.5877472E~38) = 1.570796371 +pow (0.27182817E1, ~0.5877472E~38) = 1 +atan2 (0.27182817E1, ~0.1E~44) = 1.570796371 +pow (0.27182817E1, ~0.1E~44) = 1 +atan2 (0.27182817E1, ~0.0) = 1.570796371 +pow (0.27182817E1, ~0.0) = 1 +atan2 (0.27182817E1, inf) = 0 +pow (0.27182817E1, inf) = inf +atan2 (0.27182817E1, ~inf) = 3.141592741 +pow (0.27182817E1, ~inf) = 0 +atan2 (0.27182817E1, nan) = nan +pow (0.27182817E1, nan) = nan +atan2 (0.27182817E1, inf) = 0 +pow (0.27182817E1, inf) = inf +atan2 (0.123E1, 0.34028235E39) = 3.614645185E~39 +pow (0.123E1, 0.34028235E39) = inf +atan2 (0.123E1, 0.17014117E39) = 7.22929037E~39 +pow (0.123E1, 0.17014117E39) = inf +atan2 (0.123E1, 0.123E4) = 9.999996983E~4 +pow (0.123E1, 0.123E4) = inf +atan2 (0.123E1, 0.123E2) = 0.09966865182 +pow (0.123E1, 0.123E2) = 12.75947952 +atan2 (0.123E1, 0.31415927E1) = 0.3731757402 +pow (0.123E1, 0.31415927E1) = 1.916219592 +atan2 (0.123E1, 0.27182817E1) = 0.4249241352 +pow (0.123E1, 0.27182817E1) = 1.755445838 +atan2 (0.123E1, 0.123E1) = 0.7853981853 +pow (0.123E1, 0.123E1) = 1.289981008 +atan2 (0.123E1, 0.123) = 1.471127629 +pow (0.123E1, 0.123) = 1.025789738 +atan2 (0.123E1, 0.123E~2) = 1.569796324 +pow (0.123E1, 0.123E~2) = 1.000254631 +atan2 (0.123E1, 0.11754944E~37) = 1.570796371 +pow (0.123E1, 0.11754944E~37) = 1 +atan2 (0.123E1, 0.5877472E~38) = 1.570796371 +pow (0.123E1, 0.5877472E~38) = 1 +atan2 (0.123E1, 0.1E~44) = 1.570796371 +pow (0.123E1, 0.1E~44) = 1 +atan2 (0.123E1, 0.0) = 1.570796371 +pow (0.123E1, 0.0) = 1 +atan2 (0.123E1, ~0.34028235E39) = 3.141592741 +pow (0.123E1, ~0.34028235E39) = 0 +atan2 (0.123E1, ~0.17014117E39) = 3.141592741 +pow (0.123E1, ~0.17014117E39) = 0 +atan2 (0.123E1, ~0.123E4) = 3.140592575 +pow (0.123E1, ~0.123E4) = 0 +atan2 (0.123E1, ~0.123E2) = 3.041924 +pow (0.123E1, ~0.123E2) = 0.07837310433 +atan2 (0.123E1, ~0.31415927E1) = 2.768416882 +pow (0.123E1, ~0.31415927E1) = 0.5218608975 +atan2 (0.123E1, ~0.27182817E1) = 2.716668606 +pow (0.123E1, ~0.27182817E1) = 0.5696558356 +atan2 (0.123E1, ~0.123E1) = 2.356194496 +pow (0.123E1, ~0.123E1) = 0.7752052546 +atan2 (0.123E1, ~0.123) = 1.670464993 +pow (0.123E1, ~0.123) = 0.9748587012 +atan2 (0.123E1, ~0.123E~2) = 1.571796298 +pow (0.123E1, ~0.123E~2) = 0.9997454286 +atan2 (0.123E1, ~0.11754944E~37) = 1.570796371 +pow (0.123E1, ~0.11754944E~37) = 1 +atan2 (0.123E1, ~0.5877472E~38) = 1.570796371 +pow (0.123E1, ~0.5877472E~38) = 1 +atan2 (0.123E1, ~0.1E~44) = 1.570796371 +pow (0.123E1, ~0.1E~44) = 1 +atan2 (0.123E1, ~0.0) = 1.570796371 +pow (0.123E1, ~0.0) = 1 +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123E1, ~inf) = 3.141592741 +pow (0.123E1, ~inf) = 0 +atan2 (0.123E1, nan) = nan +pow (0.123E1, nan) = nan +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123, 0.34028235E39) = 3.614649389E~40 +pow (0.123, 0.34028235E39) = 0 +atan2 (0.123, 0.17014117E39) = 7.229284764E~40 +pow (0.123, 0.17014117E39) = 0 +atan2 (0.123, 0.123E4) = 1.000000047E~4 +pow (0.123, 0.123E4) = 0 +atan2 (0.123, 0.123E2) = 0.009999666363 +pow (0.123, 0.123E2) = 6.394886357E~12 +atan2 (0.123, 0.31415927E1) = 0.0391321294 +pow (0.123, 0.31415927E1) = 0.001383096678 +atan2 (0.123, 0.27182817E1) = 0.04521832988 +pow (0.123, 0.27182817E1) = 0.00335819344 +atan2 (0.123, 0.123E1) = 0.09966865182 +pow (0.123, 0.123E1) = 0.07595970482 +atan2 (0.123, 0.123) = 0.7853981853 +pow (0.123, 0.123) = 0.7727843523 +atan2 (0.123, 0.123E~2) = 1.560796618 +pow (0.123, 0.123E~2) = 0.9974257946 +atan2 (0.123, 0.11754944E~37) = 1.570796371 +pow (0.123, 0.11754944E~37) = 1 +atan2 (0.123, 0.5877472E~38) = 1.570796371 +pow (0.123, 0.5877472E~38) = 1 +atan2 (0.123, 0.1E~44) = 1.570796371 +pow (0.123, 0.1E~44) = 1 +atan2 (0.123, 0.0) = 1.570796371 +pow (0.123, 0.0) = 1 +atan2 (0.123, ~0.34028235E39) = 3.141592741 +pow (0.123, ~0.34028235E39) = inf +atan2 (0.123, ~0.17014117E39) = 3.141592741 +pow (0.123, ~0.17014117E39) = inf +atan2 (0.123, ~0.123E4) = 3.141492605 +pow (0.123, ~0.123E4) = inf +atan2 (0.123, ~0.123E2) = 3.131592989 +pow (0.123, ~0.123E2) = 156374941700 +atan2 (0.123, ~0.31415927E1) = 3.102460623 +pow (0.123, ~0.31415927E1) = 723.0152588 +atan2 (0.123, ~0.27182817E1) = 3.096374273 +pow (0.123, ~0.27182817E1) = 297.7791443 +atan2 (0.123, ~0.123E1) = 3.041924 +pow (0.123, ~0.123E1) = 13.16487408 +atan2 (0.123, ~0.123) = 2.356194496 +pow (0.123, ~0.123) = 1.294022083 +atan2 (0.123, ~0.123E~2) = 1.580796003 +pow (0.123, ~0.123E~2) = 1.002580881 +atan2 (0.123, ~0.11754944E~37) = 1.570796371 +pow (0.123, ~0.11754944E~37) = 1 +atan2 (0.123, ~0.5877472E~38) = 1.570796371 +pow (0.123, ~0.5877472E~38) = 1 +atan2 (0.123, ~0.1E~44) = 1.570796371 +pow (0.123, ~0.1E~44) = 1 +atan2 (0.123, ~0.0) = 1.570796371 +pow (0.123, ~0.0) = 1 +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123, ~inf) = 3.141592741 +pow (0.123, ~inf) = inf +atan2 (0.123, nan) = nan +pow (0.123, nan) = nan +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123E~2, 0.34028235E39) = 3.613948739E~42 +pow (0.123E~2, 0.34028235E39) = 0 +atan2 (0.123E~2, 0.17014117E39) = 7.229298777E~42 +pow (0.123E~2, 0.17014117E39) = 0 +atan2 (0.123E~2, 0.123E4) = 9.999999975E~7 +pow (0.123E~2, 0.123E4) = 0 +atan2 (0.123E~2, 0.123E2) = 1.000000047E~4 +pow (0.123E~2, 0.123E2) = 1.606321748E~36 +atan2 (0.123E~2, 0.31415927E1) = 3.915211419E~4 +pow (0.123E~2, 0.31415927E1) = 7.205548935E~10 +atan2 (0.123E~2, 0.27182817E1) = 4.524917167E~4 +pow (0.123E~2, 0.27182817E1) = 1.228972657E~8 +atan2 (0.123E~2, 0.123E1) = 9.999996983E~4 +pow (0.123E~2, 0.123E1) = 2.633802651E~4 +atan2 (0.123E~2, 0.123) = 0.009999667294 +pow (0.123E~2, 0.123) = 0.4385896027 +atan2 (0.123E~2, 0.123E~2) = 0.7853981853 +pow (0.123E~2, 0.123E~2) = 0.9917919636 +atan2 (0.123E~2, 0.11754944E~37) = 1.570796371 +pow (0.123E~2, 0.11754944E~37) = 1 +atan2 (0.123E~2, 0.5877472E~38) = 1.570796371 +pow (0.123E~2, 0.5877472E~38) = 1 +atan2 (0.123E~2, 0.1E~44) = 1.570796371 +pow (0.123E~2, 0.1E~44) = 1 +atan2 (0.123E~2, 0.0) = 1.570796371 +pow (0.123E~2, 0.0) = 1 +atan2 (0.123E~2, ~0.34028235E39) = 3.141592741 +pow (0.123E~2, ~0.34028235E39) = inf +atan2 (0.123E~2, ~0.17014117E39) = 3.141592741 +pow (0.123E~2, ~0.17014117E39) = inf +atan2 (0.123E~2, ~0.123E4) = 3.141591549 +pow (0.123E~2, ~0.123E4) = inf +atan2 (0.123E~2, ~0.123E2) = 3.141492605 +pow (0.123E~2, ~0.123E2) = 6.225402783E35 +atan2 (0.123E~2, ~0.31415927E1) = 3.141201019 +pow (0.123E~2, ~0.31415927E1) = 1387819264 +atan2 (0.123E~2, ~0.27182817E1) = 3.141140223 +pow (0.123E~2, ~0.27182817E1) = 81368776 +atan2 (0.123E~2, ~0.123E1) = 3.140592575 +pow (0.123E~2, ~0.123E1) = 3796.791504 +atan2 (0.123E~2, ~0.123) = 3.131592989 +pow (0.123E~2, ~0.123) = 2.280035973 +atan2 (0.123E~2, ~0.123E~2) = 2.356194496 +pow (0.123E~2, ~0.123E~2) = 1.008275986 +atan2 (0.123E~2, ~0.11754944E~37) = 1.570796371 +pow (0.123E~2, ~0.11754944E~37) = 1 +atan2 (0.123E~2, ~0.5877472E~38) = 1.570796371 +pow (0.123E~2, ~0.5877472E~38) = 1 +atan2 (0.123E~2, ~0.1E~44) = 1.570796371 +pow (0.123E~2, ~0.1E~44) = 1 +atan2 (0.123E~2, ~0.0) = 1.570796371 +pow (0.123E~2, ~0.0) = 1 +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.123E~2, ~inf) = 3.141592741 +pow (0.123E~2, ~inf) = inf +atan2 (0.123E~2, nan) = nan +pow (0.123E~2, nan) = nan +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.11754944E~37, 0.34028235E39) = 0 +pow (0.11754944E~37, 0.34028235E39) = 0 +atan2 (0.11754944E~37, 0.17014117E39) = 0 +pow (0.11754944E~37, 0.17014117E39) = 0 +atan2 (0.11754944E~37, 0.123E4) = 9.556855527E~42 +pow (0.11754944E~37, 0.123E4) = 0 +atan2 (0.11754944E~37, 0.123E2) = 9.55686954E~40 +pow (0.11754944E~37, 0.123E2) = 0 +atan2 (0.11754944E~37, 0.31415927E1) = 3.74171493E~39 +pow (0.11754944E~37, 0.31415927E1) = 0 +atan2 (0.11754944E~37, 0.27182817E1) = 4.324402857E~39 +pow (0.11754944E~37, 0.27182817E1) = 0 +atan2 (0.11754944E~37, 0.123E1) = 9.556863934E~39 +pow (0.11754944E~37, 0.123E1) = 0 +atan2 (0.11754944E~37, 0.123) = 9.556864495E~38 +pow (0.11754944E~37, 0.123) = 2.160911572E~5 +atan2 (0.11754944E~37, 0.123E~2) = 9.556864495E~36 +pow (0.11754944E~37, 0.123E~2) = 0.8981448412 +atan2 (0.11754944E~37, 0.11754944E~37) = 0.7853981853 +pow (0.11754944E~37, 0.11754944E~37) = 1 +atan2 (0.11754944E~37, 0.5877472E~38) = 1.107148767 +pow (0.11754944E~37, 0.5877472E~38) = 1 +atan2 (0.11754944E~37, 0.1E~44) = 1.570796251 +pow (0.11754944E~37, 0.1E~44) = 1 +atan2 (0.11754944E~37, 0.0) = 1.570796371 +pow (0.11754944E~37, 0.0) = 1 +atan2 (0.11754944E~37, ~0.34028235E39) = 3.141592741 +pow (0.11754944E~37, ~0.34028235E39) = inf +atan2 (0.11754944E~37, ~0.17014117E39) = 3.141592741 +pow (0.11754944E~37, ~0.17014117E39) = inf +atan2 (0.11754944E~37, ~0.123E4) = 3.141592741 +pow (0.11754944E~37, ~0.123E4) = inf +atan2 (0.11754944E~37, ~0.123E2) = 3.141592741 +pow (0.11754944E~37, ~0.123E2) = inf +atan2 (0.11754944E~37, ~0.31415927E1) = 3.141592741 +pow (0.11754944E~37, ~0.31415927E1) = inf +atan2 (0.11754944E~37, ~0.27182817E1) = 3.141592741 +pow (0.11754944E~37, ~0.27182817E1) = inf +atan2 (0.11754944E~37, ~0.123E1) = 3.141592741 +pow (0.11754944E~37, ~0.123E1) = inf +atan2 (0.11754944E~37, ~0.123) = 3.141592741 +pow (0.11754944E~37, ~0.123) = 46276.76562 +atan2 (0.11754944E~37, ~0.123E~2) = 3.141592741 +pow (0.11754944E~37, ~0.123E~2) = 1.113406181 +atan2 (0.11754944E~37, ~0.11754944E~37) = 2.356194496 +pow (0.11754944E~37, ~0.11754944E~37) = 1 +atan2 (0.11754944E~37, ~0.5877472E~38) = 2.034443855 +pow (0.11754944E~37, ~0.5877472E~38) = 1 +atan2 (0.11754944E~37, ~0.1E~44) = 1.57079649 +pow (0.11754944E~37, ~0.1E~44) = 1 +atan2 (0.11754944E~37, ~0.0) = 1.570796371 +pow (0.11754944E~37, ~0.0) = 1 +atan2 (0.11754944E~37, inf) = 0 +pow (0.11754944E~37, inf) = 0 +atan2 (0.11754944E~37, ~inf) = 3.141592741 +pow (0.11754944E~37, ~inf) = inf +atan2 (0.11754944E~37, nan) = nan +pow (0.11754944E~37, nan) = nan +atan2 (0.11754944E~37, inf) = 0 +pow (0.11754944E~37, inf) = 0 +atan2 (0.5877472E~38, 0.34028235E39) = 0 +pow (0.5877472E~38, 0.34028235E39) = 0 +atan2 (0.5877472E~38, 0.17014117E39) = 0 +pow (0.5877472E~38, 0.17014117E39) = 0 +atan2 (0.5877472E~38, 0.123E4) = 4.778427763E~42 +pow (0.5877472E~38, 0.123E4) = 0 +atan2 (0.5877472E~38, 0.123E2) = 4.778427763E~40 +pow (0.5877472E~38, 0.123E2) = 0 +atan2 (0.5877472E~38, 0.31415927E1) = 1.870856764E~39 +pow (0.5877472E~38, 0.31415927E1) = 0 +atan2 (0.5877472E~38, 0.27182817E1) = 2.162200728E~39 +pow (0.5877472E~38, 0.27182817E1) = 0 +atan2 (0.5877472E~38, 0.123E1) = 4.778431967E~39 +pow (0.5877472E~38, 0.123E1) = 0 +atan2 (0.5877472E~38, 0.123) = 4.778432248E~38 +pow (0.5877472E~38, 0.123) = 1.984313531E~5 +atan2 (0.5877472E~38, 0.123E~2) = 4.778432248E~36 +pow (0.5877472E~38, 0.123E~2) = 0.8973793983 +atan2 (0.5877472E~38, 0.11754944E~37) = 0.463647604 +pow (0.5877472E~38, 0.11754944E~37) = 1 +atan2 (0.5877472E~38, 0.5877472E~38) = 0.7853981853 +pow (0.5877472E~38, 0.5877472E~38) = 1 +atan2 (0.5877472E~38, 0.1E~44) = 1.570796132 +pow (0.5877472E~38, 0.1E~44) = 1 +atan2 (0.5877472E~38, 0.0) = 1.570796371 +pow (0.5877472E~38, 0.0) = 1 +atan2 (0.5877472E~38, ~0.34028235E39) = 3.141592741 +pow (0.5877472E~38, ~0.34028235E39) = inf +atan2 (0.5877472E~38, ~0.17014117E39) = 3.141592741 +pow (0.5877472E~38, ~0.17014117E39) = inf +atan2 (0.5877472E~38, ~0.123E4) = 3.141592741 +pow (0.5877472E~38, ~0.123E4) = inf +atan2 (0.5877472E~38, ~0.123E2) = 3.141592741 +pow (0.5877472E~38, ~0.123E2) = inf +atan2 (0.5877472E~38, ~0.31415927E1) = 3.141592741 +pow (0.5877472E~38, ~0.31415927E1) = inf +atan2 (0.5877472E~38, ~0.27182817E1) = 3.141592741 +pow (0.5877472E~38, ~0.27182817E1) = inf +atan2 (0.5877472E~38, ~0.123E1) = 3.141592741 +pow (0.5877472E~38, ~0.123E1) = inf +atan2 (0.5877472E~38, ~0.123) = 3.141592741 +pow (0.5877472E~38, ~0.123) = 50395.26172 +atan2 (0.5877472E~38, ~0.123E~2) = 3.141592741 +pow (0.5877472E~38, ~0.123E~2) = 1.114355803 +atan2 (0.5877472E~38, ~0.11754944E~37) = 2.677945137 +pow (0.5877472E~38, ~0.11754944E~37) = 1 +atan2 (0.5877472E~38, ~0.5877472E~38) = 2.356194496 +pow (0.5877472E~38, ~0.5877472E~38) = 1 +atan2 (0.5877472E~38, ~0.1E~44) = 1.570796609 +pow (0.5877472E~38, ~0.1E~44) = 1 +atan2 (0.5877472E~38, ~0.0) = 1.570796371 +pow (0.5877472E~38, ~0.0) = 1 +atan2 (0.5877472E~38, inf) = 0 +pow (0.5877472E~38, inf) = 0 +atan2 (0.5877472E~38, ~inf) = 3.141592741 +pow (0.5877472E~38, ~inf) = inf +atan2 (0.5877472E~38, nan) = nan +pow (0.5877472E~38, nan) = nan +atan2 (0.5877472E~38, inf) = 0 +pow (0.5877472E~38, inf) = 0 +atan2 (0.1E~44, 0.34028235E39) = 0 +pow (0.1E~44, 0.34028235E39) = 0 +atan2 (0.1E~44, 0.17014117E39) = 0 +pow (0.1E~44, 0.17014117E39) = 0 +atan2 (0.1E~44, 0.123E4) = 0 +pow (0.1E~44, 0.123E4) = 0 +atan2 (0.1E~44, 0.123E2) = 0 +pow (0.1E~44, 0.123E2) = 0 +atan2 (0.1E~44, 0.31415927E1) = 0 +pow (0.1E~44, 0.31415927E1) = 0 +atan2 (0.1E~44, 0.27182817E1) = 0 +pow (0.1E~44, 0.27182817E1) = 0 +atan2 (0.1E~44, 0.123E1) = 1.401298464E~45 +pow (0.1E~44, 0.123E1) = 0 +atan2 (0.1E~44, 0.123) = 1.121038771E~44 +pow (0.1E~44, 0.123) = 3.041046966E~6 +atan2 (0.1E~44, 0.123E~2) = 1.139255651E~42 +pow (0.1E~44, 0.123E~2) = 0.8807045221 +atan2 (0.1E~44, 0.11754944E~37) = 1.192092896E~7 +pow (0.1E~44, 0.11754944E~37) = 1 +atan2 (0.1E~44, 0.5877472E~38) = 2.384185791E~7 +pow (0.1E~44, 0.5877472E~38) = 1 +atan2 (0.1E~44, 0.1E~44) = 0.7853981853 +pow (0.1E~44, 0.1E~44) = 1 +atan2 (0.1E~44, 0.0) = 1.570796371 +pow (0.1E~44, 0.0) = 1 +atan2 (0.1E~44, ~0.34028235E39) = 3.141592741 +pow (0.1E~44, ~0.34028235E39) = inf +atan2 (0.1E~44, ~0.17014117E39) = 3.141592741 +pow (0.1E~44, ~0.17014117E39) = inf +atan2 (0.1E~44, ~0.123E4) = 3.141592741 +pow (0.1E~44, ~0.123E4) = inf +atan2 (0.1E~44, ~0.123E2) = 3.141592741 +pow (0.1E~44, ~0.123E2) = inf +atan2 (0.1E~44, ~0.31415927E1) = 3.141592741 +pow (0.1E~44, ~0.31415927E1) = inf +atan2 (0.1E~44, ~0.27182817E1) = 3.141592741 +pow (0.1E~44, ~0.27182817E1) = inf +atan2 (0.1E~44, ~0.123E1) = 3.141592741 +pow (0.1E~44, ~0.123E1) = inf +atan2 (0.1E~44, ~0.123) = 3.141592741 +pow (0.1E~44, ~0.123) = 328834.125 +atan2 (0.1E~44, ~0.123E~2) = 3.141592741 +pow (0.1E~44, ~0.123E~2) = 1.135454535 +atan2 (0.1E~44, ~0.11754944E~37) = 3.141592503 +pow (0.1E~44, ~0.11754944E~37) = 1 +atan2 (0.1E~44, ~0.5877472E~38) = 3.141592503 +pow (0.1E~44, ~0.5877472E~38) = 1 +atan2 (0.1E~44, ~0.1E~44) = 2.356194496 +pow (0.1E~44, ~0.1E~44) = 1 +atan2 (0.1E~44, ~0.0) = 1.570796371 +pow (0.1E~44, ~0.0) = 1 +atan2 (0.1E~44, inf) = 0 +pow (0.1E~44, inf) = 0 +atan2 (0.1E~44, ~inf) = 3.141592741 +pow (0.1E~44, ~inf) = inf +atan2 (0.1E~44, nan) = nan +pow (0.1E~44, nan) = nan +atan2 (0.1E~44, inf) = 0 +pow (0.1E~44, inf) = 0 +atan2 (0.0, 0.34028235E39) = 0 +pow (0.0, 0.34028235E39) = 0 +atan2 (0.0, 0.17014117E39) = 0 +pow (0.0, 0.17014117E39) = 0 +atan2 (0.0, 0.123E4) = 0 +pow (0.0, 0.123E4) = 0 +atan2 (0.0, 0.123E2) = 0 +pow (0.0, 0.123E2) = 0 +atan2 (0.0, 0.31415927E1) = 0 +pow (0.0, 0.31415927E1) = 0 +atan2 (0.0, 0.27182817E1) = 0 +pow (0.0, 0.27182817E1) = 0 +atan2 (0.0, 0.123E1) = 0 +pow (0.0, 0.123E1) = 0 +atan2 (0.0, 0.123) = 0 +pow (0.0, 0.123) = 0 +atan2 (0.0, 0.123E~2) = 0 +pow (0.0, 0.123E~2) = 0 +atan2 (0.0, 0.11754944E~37) = 0 +pow (0.0, 0.11754944E~37) = 0 +atan2 (0.0, 0.5877472E~38) = 0 +pow (0.0, 0.5877472E~38) = 0 +atan2 (0.0, 0.1E~44) = 0 +pow (0.0, 0.1E~44) = 0 +atan2 (0.0, 0.0) = 0 +pow (0.0, 0.0) = 1 +atan2 (0.0, ~0.34028235E39) = 3.141592741 +pow (0.0, ~0.34028235E39) = inf +atan2 (0.0, ~0.17014117E39) = 3.141592741 +pow (0.0, ~0.17014117E39) = inf +atan2 (0.0, ~0.123E4) = 3.141592741 +pow (0.0, ~0.123E4) = inf +atan2 (0.0, ~0.123E2) = 3.141592741 +pow (0.0, ~0.123E2) = inf +atan2 (0.0, ~0.31415927E1) = 3.141592741 +pow (0.0, ~0.31415927E1) = inf +atan2 (0.0, ~0.27182817E1) = 3.141592741 +pow (0.0, ~0.27182817E1) = inf +atan2 (0.0, ~0.123E1) = 3.141592741 +pow (0.0, ~0.123E1) = inf +atan2 (0.0, ~0.123) = 3.141592741 +pow (0.0, ~0.123) = inf +atan2 (0.0, ~0.123E~2) = 3.141592741 +pow (0.0, ~0.123E~2) = inf +atan2 (0.0, ~0.11754944E~37) = 3.141592741 +pow (0.0, ~0.11754944E~37) = inf +atan2 (0.0, ~0.5877472E~38) = 3.141592741 +pow (0.0, ~0.5877472E~38) = inf +atan2 (0.0, ~0.1E~44) = 3.141592741 +pow (0.0, ~0.1E~44) = inf +atan2 (0.0, ~0.0) = 3.141592741 +pow (0.0, ~0.0) = 1 +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (0.0, ~inf) = 3.141592741 +pow (0.0, ~inf) = inf +atan2 (0.0, nan) = nan +pow (0.0, nan) = nan +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (~0.34028235E39, 0.34028235E39) = ~0.7853981853 +pow (~0.34028235E39, 0.34028235E39) = inf +atan2 (~0.34028235E39, 0.17014117E39) = ~1.107148767 +pow (~0.34028235E39, 0.17014117E39) = inf +atan2 (~0.34028235E39, 0.123E4) = ~1.570796371 +pow (~0.34028235E39, 0.123E4) = inf +atan2 (~0.34028235E39, 0.123E2) = ~1.570796371 +pow (~0.34028235E39, 0.123E2) = nan +atan2 (~0.34028235E39, 0.31415927E1) = ~1.570796371 +pow (~0.34028235E39, 0.31415927E1) = nan +atan2 (~0.34028235E39, 0.27182817E1) = ~1.570796371 +pow (~0.34028235E39, 0.27182817E1) = nan +atan2 (~0.34028235E39, 0.123E1) = ~1.570796371 +pow (~0.34028235E39, 0.123E1) = nan +atan2 (~0.34028235E39, 0.123) = ~1.570796371 +pow (~0.34028235E39, 0.123) = nan +atan2 (~0.34028235E39, 0.123E~2) = ~1.570796371 +pow (~0.34028235E39, 0.123E~2) = nan +atan2 (~0.34028235E39, 0.11754944E~37) = ~1.570796371 +pow (~0.34028235E39, 0.11754944E~37) = nan +atan2 (~0.34028235E39, 0.5877472E~38) = ~1.570796371 +pow (~0.34028235E39, 0.5877472E~38) = nan +atan2 (~0.34028235E39, 0.1E~44) = ~1.570796371 +pow (~0.34028235E39, 0.1E~44) = nan +atan2 (~0.34028235E39, 0.0) = ~1.570796371 +pow (~0.34028235E39, 0.0) = 1 +atan2 (~0.34028235E39, ~0.34028235E39) = ~2.356194496 +pow (~0.34028235E39, ~0.34028235E39) = 0 +atan2 (~0.34028235E39, ~0.17014117E39) = ~2.034443855 +pow (~0.34028235E39, ~0.17014117E39) = 0 +atan2 (~0.34028235E39, ~0.123E4) = ~1.570796371 +pow (~0.34028235E39, ~0.123E4) = 0 +atan2 (~0.34028235E39, ~0.123E2) = ~1.570796371 +pow (~0.34028235E39, ~0.123E2) = nan +atan2 (~0.34028235E39, ~0.31415927E1) = ~1.570796371 +pow (~0.34028235E39, ~0.31415927E1) = nan +atan2 (~0.34028235E39, ~0.27182817E1) = ~1.570796371 +pow (~0.34028235E39, ~0.27182817E1) = nan +atan2 (~0.34028235E39, ~0.123E1) = ~1.570796371 +pow (~0.34028235E39, ~0.123E1) = nan +atan2 (~0.34028235E39, ~0.123) = ~1.570796371 +pow (~0.34028235E39, ~0.123) = nan +atan2 (~0.34028235E39, ~0.123E~2) = ~1.570796371 +pow (~0.34028235E39, ~0.123E~2) = nan +atan2 (~0.34028235E39, ~0.11754944E~37) = ~1.570796371 +pow (~0.34028235E39, ~0.11754944E~37) = nan +atan2 (~0.34028235E39, ~0.5877472E~38) = ~1.570796371 +pow (~0.34028235E39, ~0.5877472E~38) = nan +atan2 (~0.34028235E39, ~0.1E~44) = ~1.570796371 +pow (~0.34028235E39, ~0.1E~44) = nan +atan2 (~0.34028235E39, ~0.0) = ~1.570796371 +pow (~0.34028235E39, ~0.0) = 1 +atan2 (~0.34028235E39, inf) = 0 +pow (~0.34028235E39, inf) = inf +atan2 (~0.34028235E39, ~inf) = ~3.141592741 +pow (~0.34028235E39, ~inf) = 0 +atan2 (~0.34028235E39, nan) = nan +pow (~0.34028235E39, nan) = nan +atan2 (~0.34028235E39, inf) = 0 +pow (~0.34028235E39, inf) = inf +atan2 (~0.17014117E39, 0.34028235E39) = ~0.463647604 +pow (~0.17014117E39, 0.34028235E39) = inf +atan2 (~0.17014117E39, 0.17014117E39) = ~0.7853981853 +pow (~0.17014117E39, 0.17014117E39) = inf +atan2 (~0.17014117E39, 0.123E4) = ~1.570796371 +pow (~0.17014117E39, 0.123E4) = inf +atan2 (~0.17014117E39, 0.123E2) = ~1.570796371 +pow (~0.17014117E39, 0.123E2) = nan +atan2 (~0.17014117E39, 0.31415927E1) = ~1.570796371 +pow (~0.17014117E39, 0.31415927E1) = nan +atan2 (~0.17014117E39, 0.27182817E1) = ~1.570796371 +pow (~0.17014117E39, 0.27182817E1) = nan +atan2 (~0.17014117E39, 0.123E1) = ~1.570796371 +pow (~0.17014117E39, 0.123E1) = nan +atan2 (~0.17014117E39, 0.123) = ~1.570796371 +pow (~0.17014117E39, 0.123) = nan +atan2 (~0.17014117E39, 0.123E~2) = ~1.570796371 +pow (~0.17014117E39, 0.123E~2) = nan +atan2 (~0.17014117E39, 0.11754944E~37) = ~1.570796371 +pow (~0.17014117E39, 0.11754944E~37) = nan +atan2 (~0.17014117E39, 0.5877472E~38) = ~1.570796371 +pow (~0.17014117E39, 0.5877472E~38) = nan +atan2 (~0.17014117E39, 0.1E~44) = ~1.570796371 +pow (~0.17014117E39, 0.1E~44) = nan +atan2 (~0.17014117E39, 0.0) = ~1.570796371 +pow (~0.17014117E39, 0.0) = 1 +atan2 (~0.17014117E39, ~0.34028235E39) = ~2.677945137 +pow (~0.17014117E39, ~0.34028235E39) = 0 +atan2 (~0.17014117E39, ~0.17014117E39) = ~2.356194496 +pow (~0.17014117E39, ~0.17014117E39) = 0 +atan2 (~0.17014117E39, ~0.123E4) = ~1.570796371 +pow (~0.17014117E39, ~0.123E4) = 0 +atan2 (~0.17014117E39, ~0.123E2) = ~1.570796371 +pow (~0.17014117E39, ~0.123E2) = nan +atan2 (~0.17014117E39, ~0.31415927E1) = ~1.570796371 +pow (~0.17014117E39, ~0.31415927E1) = nan +atan2 (~0.17014117E39, ~0.27182817E1) = ~1.570796371 +pow (~0.17014117E39, ~0.27182817E1) = nan +atan2 (~0.17014117E39, ~0.123E1) = ~1.570796371 +pow (~0.17014117E39, ~0.123E1) = nan +atan2 (~0.17014117E39, ~0.123) = ~1.570796371 +pow (~0.17014117E39, ~0.123) = nan +atan2 (~0.17014117E39, ~0.123E~2) = ~1.570796371 +pow (~0.17014117E39, ~0.123E~2) = nan +atan2 (~0.17014117E39, ~0.11754944E~37) = ~1.570796371 +pow (~0.17014117E39, ~0.11754944E~37) = nan +atan2 (~0.17014117E39, ~0.5877472E~38) = ~1.570796371 +pow (~0.17014117E39, ~0.5877472E~38) = nan +atan2 (~0.17014117E39, ~0.1E~44) = ~1.570796371 +pow (~0.17014117E39, ~0.1E~44) = nan +atan2 (~0.17014117E39, ~0.0) = ~1.570796371 +pow (~0.17014117E39, ~0.0) = 1 +atan2 (~0.17014117E39, inf) = 0 +pow (~0.17014117E39, inf) = inf +atan2 (~0.17014117E39, ~inf) = ~3.141592741 +pow (~0.17014117E39, ~inf) = 0 +atan2 (~0.17014117E39, nan) = nan +pow (~0.17014117E39, nan) = nan +atan2 (~0.17014117E39, inf) = 0 +pow (~0.17014117E39, inf) = inf +atan2 (~0.123E4, 0.34028235E39) = ~3.614645488E~36 +pow (~0.123E4, 0.34028235E39) = inf +atan2 (~0.123E4, 0.17014117E39) = ~7.229290975E~36 +pow (~0.123E4, 0.17014117E39) = inf +atan2 (~0.123E4, 0.123E4) = ~0.7853981853 +pow (~0.123E4, 0.123E4) = inf +atan2 (~0.123E4, 0.123E2) = ~1.560796618 +pow (~0.123E4, 0.123E2) = nan +atan2 (~0.123E4, 0.31415927E1) = ~1.568242192 +pow (~0.123E4, 0.31415927E1) = nan +atan2 (~0.123E4, 0.27182817E1) = ~1.568586349 +pow (~0.123E4, 0.27182817E1) = nan +atan2 (~0.123E4, 0.123E1) = ~1.569796324 +pow (~0.123E4, 0.123E1) = nan +atan2 (~0.123E4, 0.123) = ~1.570696354 +pow (~0.123E4, 0.123) = nan +atan2 (~0.123E4, 0.123E~2) = ~1.570795298 +pow (~0.123E4, 0.123E~2) = nan +atan2 (~0.123E4, 0.11754944E~37) = ~1.570796371 +pow (~0.123E4, 0.11754944E~37) = nan +atan2 (~0.123E4, 0.5877472E~38) = ~1.570796371 +pow (~0.123E4, 0.5877472E~38) = nan +atan2 (~0.123E4, 0.1E~44) = ~1.570796371 +pow (~0.123E4, 0.1E~44) = nan +atan2 (~0.123E4, 0.0) = ~1.570796371 +pow (~0.123E4, 0.0) = 1 +atan2 (~0.123E4, ~0.34028235E39) = ~3.141592741 +pow (~0.123E4, ~0.34028235E39) = 0 +atan2 (~0.123E4, ~0.17014117E39) = ~3.141592741 +pow (~0.123E4, ~0.17014117E39) = 0 +atan2 (~0.123E4, ~0.123E4) = ~2.356194496 +pow (~0.123E4, ~0.123E4) = 0 +atan2 (~0.123E4, ~0.123E2) = ~1.580796003 +pow (~0.123E4, ~0.123E2) = nan +atan2 (~0.123E4, ~0.31415927E1) = ~1.57335043 +pow (~0.123E4, ~0.31415927E1) = nan +atan2 (~0.123E4, ~0.27182817E1) = ~1.573006272 +pow (~0.123E4, ~0.27182817E1) = nan +atan2 (~0.123E4, ~0.123E1) = ~1.571796298 +pow (~0.123E4, ~0.123E1) = nan +atan2 (~0.123E4, ~0.123) = ~1.570896268 +pow (~0.123E4, ~0.123) = nan +atan2 (~0.123E4, ~0.123E~2) = ~1.570797324 +pow (~0.123E4, ~0.123E~2) = nan +atan2 (~0.123E4, ~0.11754944E~37) = ~1.570796371 +pow (~0.123E4, ~0.11754944E~37) = nan +atan2 (~0.123E4, ~0.5877472E~38) = ~1.570796371 +pow (~0.123E4, ~0.5877472E~38) = nan +atan2 (~0.123E4, ~0.1E~44) = ~1.570796371 +pow (~0.123E4, ~0.1E~44) = nan +atan2 (~0.123E4, ~0.0) = ~1.570796371 +pow (~0.123E4, ~0.0) = 1 +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E4, ~inf) = ~3.141592741 +pow (~0.123E4, ~inf) = 0 +atan2 (~0.123E4, nan) = nan +pow (~0.123E4, nan) = nan +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E2, 0.34028235E39) = ~3.614645465E~38 +pow (~0.123E2, 0.34028235E39) = inf +atan2 (~0.123E2, 0.17014117E39) = ~7.22929093E~38 +pow (~0.123E2, 0.17014117E39) = inf +atan2 (~0.123E2, 0.123E4) = ~0.009999667294 +pow (~0.123E2, 0.123E4) = inf +atan2 (~0.123E2, 0.123E2) = ~0.7853981853 +pow (~0.123E2, 0.123E2) = nan +atan2 (~0.123E2, 0.31415927E1) = ~1.32072866 +pow (~0.123E2, 0.31415927E1) = nan +atan2 (~0.123E2, 0.27182817E1) = ~1.353293777 +pow (~0.123E2, 0.27182817E1) = nan +atan2 (~0.123E2, 0.123E1) = ~1.471127629 +pow (~0.123E2, 0.123E1) = nan +atan2 (~0.123E2, 0.123) = ~1.560796618 +pow (~0.123E2, 0.123) = nan +atan2 (~0.123E2, 0.123E~2) = ~1.570696354 +pow (~0.123E2, 0.123E~2) = nan +atan2 (~0.123E2, 0.11754944E~37) = ~1.570796371 +pow (~0.123E2, 0.11754944E~37) = nan +atan2 (~0.123E2, 0.5877472E~38) = ~1.570796371 +pow (~0.123E2, 0.5877472E~38) = nan +atan2 (~0.123E2, 0.1E~44) = ~1.570796371 +pow (~0.123E2, 0.1E~44) = nan +atan2 (~0.123E2, 0.0) = ~1.570796371 +pow (~0.123E2, 0.0) = 1 +atan2 (~0.123E2, ~0.34028235E39) = ~3.141592741 +pow (~0.123E2, ~0.34028235E39) = 0 +atan2 (~0.123E2, ~0.17014117E39) = ~3.141592741 +pow (~0.123E2, ~0.17014117E39) = 0 +atan2 (~0.123E2, ~0.123E4) = ~3.131592989 +pow (~0.123E2, ~0.123E4) = 0 +atan2 (~0.123E2, ~0.123E2) = ~2.356194496 +pow (~0.123E2, ~0.123E2) = nan +atan2 (~0.123E2, ~0.31415927E1) = ~1.820864081 +pow (~0.123E2, ~0.31415927E1) = nan +atan2 (~0.123E2, ~0.27182817E1) = ~1.788298845 +pow (~0.123E2, ~0.27182817E1) = nan +atan2 (~0.123E2, ~0.123E1) = ~1.670464993 +pow (~0.123E2, ~0.123E1) = nan +atan2 (~0.123E2, ~0.123) = ~1.580796003 +pow (~0.123E2, ~0.123) = nan +atan2 (~0.123E2, ~0.123E~2) = ~1.570896268 +pow (~0.123E2, ~0.123E~2) = nan +atan2 (~0.123E2, ~0.11754944E~37) = ~1.570796371 +pow (~0.123E2, ~0.11754944E~37) = nan +atan2 (~0.123E2, ~0.5877472E~38) = ~1.570796371 +pow (~0.123E2, ~0.5877472E~38) = nan +atan2 (~0.123E2, ~0.1E~44) = ~1.570796371 +pow (~0.123E2, ~0.1E~44) = nan +atan2 (~0.123E2, ~0.0) = ~1.570796371 +pow (~0.123E2, ~0.0) = 1 +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.123E2, ~inf) = ~3.141592741 +pow (~0.123E2, ~inf) = 0 +atan2 (~0.123E2, nan) = nan +pow (~0.123E2, nan) = nan +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.31415927E1, 0.34028235E39) = ~9.232312E~39 +pow (~0.31415927E1, 0.34028235E39) = inf +atan2 (~0.31415927E1, 0.17014117E39) = ~1.8464624E~38 +pow (~0.31415927E1, 0.17014117E39) = inf +atan2 (~0.31415927E1, 0.123E4) = ~0.002554134931 +pow (~0.31415927E1, 0.123E4) = inf +atan2 (~0.31415927E1, 0.123E2) = ~0.2500677109 +pow (~0.31415927E1, 0.123E2) = nan +atan2 (~0.31415927E1, 0.31415927E1) = ~0.7853981853 +pow (~0.31415927E1, 0.31415927E1) = nan +atan2 (~0.31415927E1, 0.27182817E1) = ~0.8575118184 +pow (~0.31415927E1, 0.27182817E1) = nan +atan2 (~0.31415927E1, 0.123E1) = ~1.19762063 +pow (~0.31415927E1, 0.123E1) = nan +atan2 (~0.31415927E1, 0.123) = ~1.531664252 +pow (~0.31415927E1, 0.123) = nan +atan2 (~0.31415927E1, 0.123E~2) = ~1.570404768 +pow (~0.31415927E1, 0.123E~2) = nan +atan2 (~0.31415927E1, 0.11754944E~37) = ~1.570796371 +pow (~0.31415927E1, 0.11754944E~37) = nan +atan2 (~0.31415927E1, 0.5877472E~38) = ~1.570796371 +pow (~0.31415927E1, 0.5877472E~38) = nan +atan2 (~0.31415927E1, 0.1E~44) = ~1.570796371 +pow (~0.31415927E1, 0.1E~44) = nan +atan2 (~0.31415927E1, 0.0) = ~1.570796371 +pow (~0.31415927E1, 0.0) = 1 +atan2 (~0.31415927E1, ~0.34028235E39) = ~3.141592741 +pow (~0.31415927E1, ~0.34028235E39) = 0 +atan2 (~0.31415927E1, ~0.17014117E39) = ~3.141592741 +pow (~0.31415927E1, ~0.17014117E39) = 0 +atan2 (~0.31415927E1, ~0.123E4) = ~3.139038563 +pow (~0.31415927E1, ~0.123E4) = 0 +atan2 (~0.31415927E1, ~0.123E2) = ~2.89152503 +pow (~0.31415927E1, ~0.123E2) = nan +atan2 (~0.31415927E1, ~0.31415927E1) = ~2.356194496 +pow (~0.31415927E1, ~0.31415927E1) = nan +atan2 (~0.31415927E1, ~0.27182817E1) = ~2.284080744 +pow (~0.31415927E1, ~0.27182817E1) = nan +atan2 (~0.31415927E1, ~0.123E1) = ~1.943972111 +pow (~0.31415927E1, ~0.123E1) = nan +atan2 (~0.31415927E1, ~0.123) = ~1.609928489 +pow (~0.31415927E1, ~0.123) = nan +atan2 (~0.31415927E1, ~0.123E~2) = ~1.571187854 +pow (~0.31415927E1, ~0.123E~2) = nan +atan2 (~0.31415927E1, ~0.11754944E~37) = ~1.570796371 +pow (~0.31415927E1, ~0.11754944E~37) = nan +atan2 (~0.31415927E1, ~0.5877472E~38) = ~1.570796371 +pow (~0.31415927E1, ~0.5877472E~38) = nan +atan2 (~0.31415927E1, ~0.1E~44) = ~1.570796371 +pow (~0.31415927E1, ~0.1E~44) = nan +atan2 (~0.31415927E1, ~0.0) = ~1.570796371 +pow (~0.31415927E1, ~0.0) = 1 +atan2 (~0.31415927E1, inf) = 0 +pow (~0.31415927E1, inf) = inf +atan2 (~0.31415927E1, ~inf) = ~3.141592741 +pow (~0.31415927E1, ~inf) = 0 +atan2 (~0.31415927E1, nan) = nan +pow (~0.31415927E1, nan) = nan +atan2 (~0.31415927E1, inf) = 0 +pow (~0.31415927E1, inf) = inf +atan2 (~0.27182817E1, 0.34028235E39) = ~7.988312091E~39 +pow (~0.27182817E1, 0.34028235E39) = inf +atan2 (~0.27182817E1, 0.17014117E39) = ~1.597662558E~38 +pow (~0.27182817E1, 0.17014117E39) = inf +atan2 (~0.27182817E1, 0.123E4) = ~0.002209981671 +pow (~0.27182817E1, 0.123E4) = inf +atan2 (~0.27182817E1, 0.123E2) = ~0.2175025195 +pow (~0.27182817E1, 0.123E2) = nan +atan2 (~0.27182817E1, 0.31415927E1) = ~0.7132844925 +pow (~0.27182817E1, 0.31415927E1) = nan +atan2 (~0.27182817E1, 0.27182817E1) = ~0.7853981853 +pow (~0.27182817E1, 0.27182817E1) = nan +atan2 (~0.27182817E1, 0.123E1) = ~1.145872235 +pow (~0.27182817E1, 0.123E1) = nan +atan2 (~0.27182817E1, 0.123) = ~1.525578022 +pow (~0.27182817E1, 0.123) = nan +atan2 (~0.27182817E1, 0.123E~2) = ~1.570343852 +pow (~0.27182817E1, 0.123E~2) = nan +atan2 (~0.27182817E1, 0.11754944E~37) = ~1.570796371 +pow (~0.27182817E1, 0.11754944E~37) = nan +atan2 (~0.27182817E1, 0.5877472E~38) = ~1.570796371 +pow (~0.27182817E1, 0.5877472E~38) = nan +atan2 (~0.27182817E1, 0.1E~44) = ~1.570796371 +pow (~0.27182817E1, 0.1E~44) = nan +atan2 (~0.27182817E1, 0.0) = ~1.570796371 +pow (~0.27182817E1, 0.0) = 1 +atan2 (~0.27182817E1, ~0.34028235E39) = ~3.141592741 +pow (~0.27182817E1, ~0.34028235E39) = 0 +atan2 (~0.27182817E1, ~0.17014117E39) = ~3.141592741 +pow (~0.27182817E1, ~0.17014117E39) = 0 +atan2 (~0.27182817E1, ~0.123E4) = ~3.139382601 +pow (~0.27182817E1, ~0.123E4) = 0 +atan2 (~0.27182817E1, ~0.123E2) = ~2.924090147 +pow (~0.27182817E1, ~0.123E2) = nan +atan2 (~0.27182817E1, ~0.31415927E1) = ~2.428308249 +pow (~0.27182817E1, ~0.31415927E1) = nan +atan2 (~0.27182817E1, ~0.27182817E1) = ~2.356194496 +pow (~0.27182817E1, ~0.27182817E1) = nan +atan2 (~0.27182817E1, ~0.123E1) = ~1.995720506 +pow (~0.27182817E1, ~0.123E1) = nan +atan2 (~0.27182817E1, ~0.123) = ~1.6160146 +pow (~0.27182817E1, ~0.123) = nan +atan2 (~0.27182817E1, ~0.123E~2) = ~1.57124877 +pow (~0.27182817E1, ~0.123E~2) = nan +atan2 (~0.27182817E1, ~0.11754944E~37) = ~1.570796371 +pow (~0.27182817E1, ~0.11754944E~37) = nan +atan2 (~0.27182817E1, ~0.5877472E~38) = ~1.570796371 +pow (~0.27182817E1, ~0.5877472E~38) = nan +atan2 (~0.27182817E1, ~0.1E~44) = ~1.570796371 +pow (~0.27182817E1, ~0.1E~44) = nan +atan2 (~0.27182817E1, ~0.0) = ~1.570796371 +pow (~0.27182817E1, ~0.0) = 1 +atan2 (~0.27182817E1, inf) = 0 +pow (~0.27182817E1, inf) = inf +atan2 (~0.27182817E1, ~inf) = ~3.141592741 +pow (~0.27182817E1, ~inf) = 0 +atan2 (~0.27182817E1, nan) = nan +pow (~0.27182817E1, nan) = nan +atan2 (~0.27182817E1, inf) = 0 +pow (~0.27182817E1, inf) = inf +atan2 (~0.123E1, 0.34028235E39) = ~3.614645185E~39 +pow (~0.123E1, 0.34028235E39) = inf +atan2 (~0.123E1, 0.17014117E39) = ~7.22929037E~39 +pow (~0.123E1, 0.17014117E39) = inf +atan2 (~0.123E1, 0.123E4) = ~9.999996983E~4 +pow (~0.123E1, 0.123E4) = inf +atan2 (~0.123E1, 0.123E2) = ~0.09966865182 +pow (~0.123E1, 0.123E2) = nan +atan2 (~0.123E1, 0.31415927E1) = ~0.3731757402 +pow (~0.123E1, 0.31415927E1) = nan +atan2 (~0.123E1, 0.27182817E1) = ~0.4249241352 +pow (~0.123E1, 0.27182817E1) = nan +atan2 (~0.123E1, 0.123E1) = ~0.7853981853 +pow (~0.123E1, 0.123E1) = nan +atan2 (~0.123E1, 0.123) = ~1.471127629 +pow (~0.123E1, 0.123) = nan +atan2 (~0.123E1, 0.123E~2) = ~1.569796324 +pow (~0.123E1, 0.123E~2) = nan +atan2 (~0.123E1, 0.11754944E~37) = ~1.570796371 +pow (~0.123E1, 0.11754944E~37) = nan +atan2 (~0.123E1, 0.5877472E~38) = ~1.570796371 +pow (~0.123E1, 0.5877472E~38) = nan +atan2 (~0.123E1, 0.1E~44) = ~1.570796371 +pow (~0.123E1, 0.1E~44) = nan +atan2 (~0.123E1, 0.0) = ~1.570796371 +pow (~0.123E1, 0.0) = 1 +atan2 (~0.123E1, ~0.34028235E39) = ~3.141592741 +pow (~0.123E1, ~0.34028235E39) = 0 +atan2 (~0.123E1, ~0.17014117E39) = ~3.141592741 +pow (~0.123E1, ~0.17014117E39) = 0 +atan2 (~0.123E1, ~0.123E4) = ~3.140592575 +pow (~0.123E1, ~0.123E4) = 0 +atan2 (~0.123E1, ~0.123E2) = ~3.041924 +pow (~0.123E1, ~0.123E2) = nan +atan2 (~0.123E1, ~0.31415927E1) = ~2.768416882 +pow (~0.123E1, ~0.31415927E1) = nan +atan2 (~0.123E1, ~0.27182817E1) = ~2.716668606 +pow (~0.123E1, ~0.27182817E1) = nan +atan2 (~0.123E1, ~0.123E1) = ~2.356194496 +pow (~0.123E1, ~0.123E1) = nan +atan2 (~0.123E1, ~0.123) = ~1.670464993 +pow (~0.123E1, ~0.123) = nan +atan2 (~0.123E1, ~0.123E~2) = ~1.571796298 +pow (~0.123E1, ~0.123E~2) = nan +atan2 (~0.123E1, ~0.11754944E~37) = ~1.570796371 +pow (~0.123E1, ~0.11754944E~37) = nan +atan2 (~0.123E1, ~0.5877472E~38) = ~1.570796371 +pow (~0.123E1, ~0.5877472E~38) = nan +atan2 (~0.123E1, ~0.1E~44) = ~1.570796371 +pow (~0.123E1, ~0.1E~44) = nan +atan2 (~0.123E1, ~0.0) = ~1.570796371 +pow (~0.123E1, ~0.0) = 1 +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123E1, ~inf) = ~3.141592741 +pow (~0.123E1, ~inf) = 0 +atan2 (~0.123E1, nan) = nan +pow (~0.123E1, nan) = nan +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123, 0.34028235E39) = ~3.614649389E~40 +pow (~0.123, 0.34028235E39) = 0 +atan2 (~0.123, 0.17014117E39) = ~7.229284764E~40 +pow (~0.123, 0.17014117E39) = 0 +atan2 (~0.123, 0.123E4) = ~1.000000047E~4 +pow (~0.123, 0.123E4) = 0 +atan2 (~0.123, 0.123E2) = ~0.009999666363 +pow (~0.123, 0.123E2) = nan +atan2 (~0.123, 0.31415927E1) = ~0.0391321294 +pow (~0.123, 0.31415927E1) = nan +atan2 (~0.123, 0.27182817E1) = ~0.04521832988 +pow (~0.123, 0.27182817E1) = nan +atan2 (~0.123, 0.123E1) = ~0.09966865182 +pow (~0.123, 0.123E1) = nan +atan2 (~0.123, 0.123) = ~0.7853981853 +pow (~0.123, 0.123) = nan +atan2 (~0.123, 0.123E~2) = ~1.560796618 +pow (~0.123, 0.123E~2) = nan +atan2 (~0.123, 0.11754944E~37) = ~1.570796371 +pow (~0.123, 0.11754944E~37) = nan +atan2 (~0.123, 0.5877472E~38) = ~1.570796371 +pow (~0.123, 0.5877472E~38) = nan +atan2 (~0.123, 0.1E~44) = ~1.570796371 +pow (~0.123, 0.1E~44) = nan +atan2 (~0.123, 0.0) = ~1.570796371 +pow (~0.123, 0.0) = 1 +atan2 (~0.123, ~0.34028235E39) = ~3.141592741 +pow (~0.123, ~0.34028235E39) = inf +atan2 (~0.123, ~0.17014117E39) = ~3.141592741 +pow (~0.123, ~0.17014117E39) = inf +atan2 (~0.123, ~0.123E4) = ~3.141492605 +pow (~0.123, ~0.123E4) = inf +atan2 (~0.123, ~0.123E2) = ~3.131592989 +pow (~0.123, ~0.123E2) = nan +atan2 (~0.123, ~0.31415927E1) = ~3.102460623 +pow (~0.123, ~0.31415927E1) = nan +atan2 (~0.123, ~0.27182817E1) = ~3.096374273 +pow (~0.123, ~0.27182817E1) = nan +atan2 (~0.123, ~0.123E1) = ~3.041924 +pow (~0.123, ~0.123E1) = nan +atan2 (~0.123, ~0.123) = ~2.356194496 +pow (~0.123, ~0.123) = nan +atan2 (~0.123, ~0.123E~2) = ~1.580796003 +pow (~0.123, ~0.123E~2) = nan +atan2 (~0.123, ~0.11754944E~37) = ~1.570796371 +pow (~0.123, ~0.11754944E~37) = nan +atan2 (~0.123, ~0.5877472E~38) = ~1.570796371 +pow (~0.123, ~0.5877472E~38) = nan +atan2 (~0.123, ~0.1E~44) = ~1.570796371 +pow (~0.123, ~0.1E~44) = nan +atan2 (~0.123, ~0.0) = ~1.570796371 +pow (~0.123, ~0.0) = 1 +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123, ~inf) = ~3.141592741 +pow (~0.123, ~inf) = inf +atan2 (~0.123, nan) = nan +pow (~0.123, nan) = nan +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123E~2, 0.34028235E39) = ~3.613948739E~42 +pow (~0.123E~2, 0.34028235E39) = 0 +atan2 (~0.123E~2, 0.17014117E39) = ~7.229298777E~42 +pow (~0.123E~2, 0.17014117E39) = 0 +atan2 (~0.123E~2, 0.123E4) = ~9.999999975E~7 +pow (~0.123E~2, 0.123E4) = 0 +atan2 (~0.123E~2, 0.123E2) = ~1.000000047E~4 +pow (~0.123E~2, 0.123E2) = nan +atan2 (~0.123E~2, 0.31415927E1) = ~3.915211419E~4 +pow (~0.123E~2, 0.31415927E1) = nan +atan2 (~0.123E~2, 0.27182817E1) = ~4.524917167E~4 +pow (~0.123E~2, 0.27182817E1) = nan +atan2 (~0.123E~2, 0.123E1) = ~9.999996983E~4 +pow (~0.123E~2, 0.123E1) = nan +atan2 (~0.123E~2, 0.123) = ~0.009999667294 +pow (~0.123E~2, 0.123) = nan +atan2 (~0.123E~2, 0.123E~2) = ~0.7853981853 +pow (~0.123E~2, 0.123E~2) = nan +atan2 (~0.123E~2, 0.11754944E~37) = ~1.570796371 +pow (~0.123E~2, 0.11754944E~37) = nan +atan2 (~0.123E~2, 0.5877472E~38) = ~1.570796371 +pow (~0.123E~2, 0.5877472E~38) = nan +atan2 (~0.123E~2, 0.1E~44) = ~1.570796371 +pow (~0.123E~2, 0.1E~44) = nan +atan2 (~0.123E~2, 0.0) = ~1.570796371 +pow (~0.123E~2, 0.0) = 1 +atan2 (~0.123E~2, ~0.34028235E39) = ~3.141592741 +pow (~0.123E~2, ~0.34028235E39) = inf +atan2 (~0.123E~2, ~0.17014117E39) = ~3.141592741 +pow (~0.123E~2, ~0.17014117E39) = inf +atan2 (~0.123E~2, ~0.123E4) = ~3.141591549 +pow (~0.123E~2, ~0.123E4) = inf +atan2 (~0.123E~2, ~0.123E2) = ~3.141492605 +pow (~0.123E~2, ~0.123E2) = nan +atan2 (~0.123E~2, ~0.31415927E1) = ~3.141201019 +pow (~0.123E~2, ~0.31415927E1) = nan +atan2 (~0.123E~2, ~0.27182817E1) = ~3.141140223 +pow (~0.123E~2, ~0.27182817E1) = nan +atan2 (~0.123E~2, ~0.123E1) = ~3.140592575 +pow (~0.123E~2, ~0.123E1) = nan +atan2 (~0.123E~2, ~0.123) = ~3.131592989 +pow (~0.123E~2, ~0.123) = nan +atan2 (~0.123E~2, ~0.123E~2) = ~2.356194496 +pow (~0.123E~2, ~0.123E~2) = nan +atan2 (~0.123E~2, ~0.11754944E~37) = ~1.570796371 +pow (~0.123E~2, ~0.11754944E~37) = nan +atan2 (~0.123E~2, ~0.5877472E~38) = ~1.570796371 +pow (~0.123E~2, ~0.5877472E~38) = nan +atan2 (~0.123E~2, ~0.1E~44) = ~1.570796371 +pow (~0.123E~2, ~0.1E~44) = nan +atan2 (~0.123E~2, ~0.0) = ~1.570796371 +pow (~0.123E~2, ~0.0) = 1 +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.123E~2, ~inf) = ~3.141592741 +pow (~0.123E~2, ~inf) = inf +atan2 (~0.123E~2, nan) = nan +pow (~0.123E~2, nan) = nan +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.11754944E~37, 0.34028235E39) = 0 +pow (~0.11754944E~37, 0.34028235E39) = 0 +atan2 (~0.11754944E~37, 0.17014117E39) = 0 +pow (~0.11754944E~37, 0.17014117E39) = 0 +atan2 (~0.11754944E~37, 0.123E4) = ~9.556855527E~42 +pow (~0.11754944E~37, 0.123E4) = 0 +atan2 (~0.11754944E~37, 0.123E2) = ~9.55686954E~40 +pow (~0.11754944E~37, 0.123E2) = nan +atan2 (~0.11754944E~37, 0.31415927E1) = ~3.74171493E~39 +pow (~0.11754944E~37, 0.31415927E1) = nan +atan2 (~0.11754944E~37, 0.27182817E1) = ~4.324402857E~39 +pow (~0.11754944E~37, 0.27182817E1) = nan +atan2 (~0.11754944E~37, 0.123E1) = ~9.556863934E~39 +pow (~0.11754944E~37, 0.123E1) = nan +atan2 (~0.11754944E~37, 0.123) = ~9.556864495E~38 +pow (~0.11754944E~37, 0.123) = nan +atan2 (~0.11754944E~37, 0.123E~2) = ~9.556864495E~36 +pow (~0.11754944E~37, 0.123E~2) = nan +atan2 (~0.11754944E~37, 0.11754944E~37) = ~0.7853981853 +pow (~0.11754944E~37, 0.11754944E~37) = nan +atan2 (~0.11754944E~37, 0.5877472E~38) = ~1.107148767 +pow (~0.11754944E~37, 0.5877472E~38) = nan +atan2 (~0.11754944E~37, 0.1E~44) = ~1.570796251 +pow (~0.11754944E~37, 0.1E~44) = nan +atan2 (~0.11754944E~37, 0.0) = ~1.570796371 +pow (~0.11754944E~37, 0.0) = 1 +atan2 (~0.11754944E~37, ~0.34028235E39) = ~3.141592741 +pow (~0.11754944E~37, ~0.34028235E39) = inf +atan2 (~0.11754944E~37, ~0.17014117E39) = ~3.141592741 +pow (~0.11754944E~37, ~0.17014117E39) = inf +atan2 (~0.11754944E~37, ~0.123E4) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E4) = inf +atan2 (~0.11754944E~37, ~0.123E2) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E2) = nan +atan2 (~0.11754944E~37, ~0.31415927E1) = ~3.141592741 +pow (~0.11754944E~37, ~0.31415927E1) = nan +atan2 (~0.11754944E~37, ~0.27182817E1) = ~3.141592741 +pow (~0.11754944E~37, ~0.27182817E1) = nan +atan2 (~0.11754944E~37, ~0.123E1) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E1) = nan +atan2 (~0.11754944E~37, ~0.123) = ~3.141592741 +pow (~0.11754944E~37, ~0.123) = nan +atan2 (~0.11754944E~37, ~0.123E~2) = ~3.141592741 +pow (~0.11754944E~37, ~0.123E~2) = nan +atan2 (~0.11754944E~37, ~0.11754944E~37) = ~2.356194496 +pow (~0.11754944E~37, ~0.11754944E~37) = nan +atan2 (~0.11754944E~37, ~0.5877472E~38) = ~2.034443855 +pow (~0.11754944E~37, ~0.5877472E~38) = nan +atan2 (~0.11754944E~37, ~0.1E~44) = ~1.57079649 +pow (~0.11754944E~37, ~0.1E~44) = nan +atan2 (~0.11754944E~37, ~0.0) = ~1.570796371 +pow (~0.11754944E~37, ~0.0) = 1 +atan2 (~0.11754944E~37, inf) = 0 +pow (~0.11754944E~37, inf) = 0 +atan2 (~0.11754944E~37, ~inf) = ~3.141592741 +pow (~0.11754944E~37, ~inf) = inf +atan2 (~0.11754944E~37, nan) = nan +pow (~0.11754944E~37, nan) = nan +atan2 (~0.11754944E~37, inf) = 0 +pow (~0.11754944E~37, inf) = 0 +atan2 (~0.5877472E~38, 0.34028235E39) = 0 +pow (~0.5877472E~38, 0.34028235E39) = 0 +atan2 (~0.5877472E~38, 0.17014117E39) = 0 +pow (~0.5877472E~38, 0.17014117E39) = 0 +atan2 (~0.5877472E~38, 0.123E4) = ~4.778427763E~42 +pow (~0.5877472E~38, 0.123E4) = 0 +atan2 (~0.5877472E~38, 0.123E2) = ~4.778427763E~40 +pow (~0.5877472E~38, 0.123E2) = nan +atan2 (~0.5877472E~38, 0.31415927E1) = ~1.870856764E~39 +pow (~0.5877472E~38, 0.31415927E1) = nan +atan2 (~0.5877472E~38, 0.27182817E1) = ~2.162200728E~39 +pow (~0.5877472E~38, 0.27182817E1) = nan +atan2 (~0.5877472E~38, 0.123E1) = ~4.778431967E~39 +pow (~0.5877472E~38, 0.123E1) = nan +atan2 (~0.5877472E~38, 0.123) = ~4.778432248E~38 +pow (~0.5877472E~38, 0.123) = nan +atan2 (~0.5877472E~38, 0.123E~2) = ~4.778432248E~36 +pow (~0.5877472E~38, 0.123E~2) = nan +atan2 (~0.5877472E~38, 0.11754944E~37) = ~0.463647604 +pow (~0.5877472E~38, 0.11754944E~37) = nan +atan2 (~0.5877472E~38, 0.5877472E~38) = ~0.7853981853 +pow (~0.5877472E~38, 0.5877472E~38) = nan +atan2 (~0.5877472E~38, 0.1E~44) = ~1.570796132 +pow (~0.5877472E~38, 0.1E~44) = nan +atan2 (~0.5877472E~38, 0.0) = ~1.570796371 +pow (~0.5877472E~38, 0.0) = 1 +atan2 (~0.5877472E~38, ~0.34028235E39) = ~3.141592741 +pow (~0.5877472E~38, ~0.34028235E39) = inf +atan2 (~0.5877472E~38, ~0.17014117E39) = ~3.141592741 +pow (~0.5877472E~38, ~0.17014117E39) = inf +atan2 (~0.5877472E~38, ~0.123E4) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E4) = inf +atan2 (~0.5877472E~38, ~0.123E2) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E2) = nan +atan2 (~0.5877472E~38, ~0.31415927E1) = ~3.141592741 +pow (~0.5877472E~38, ~0.31415927E1) = nan +atan2 (~0.5877472E~38, ~0.27182817E1) = ~3.141592741 +pow (~0.5877472E~38, ~0.27182817E1) = nan +atan2 (~0.5877472E~38, ~0.123E1) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E1) = nan +atan2 (~0.5877472E~38, ~0.123) = ~3.141592741 +pow (~0.5877472E~38, ~0.123) = nan +atan2 (~0.5877472E~38, ~0.123E~2) = ~3.141592741 +pow (~0.5877472E~38, ~0.123E~2) = nan +atan2 (~0.5877472E~38, ~0.11754944E~37) = ~2.677945137 +pow (~0.5877472E~38, ~0.11754944E~37) = nan +atan2 (~0.5877472E~38, ~0.5877472E~38) = ~2.356194496 +pow (~0.5877472E~38, ~0.5877472E~38) = nan +atan2 (~0.5877472E~38, ~0.1E~44) = ~1.570796609 +pow (~0.5877472E~38, ~0.1E~44) = nan +atan2 (~0.5877472E~38, ~0.0) = ~1.570796371 +pow (~0.5877472E~38, ~0.0) = 1 +atan2 (~0.5877472E~38, inf) = 0 +pow (~0.5877472E~38, inf) = 0 +atan2 (~0.5877472E~38, ~inf) = ~3.141592741 +pow (~0.5877472E~38, ~inf) = inf +atan2 (~0.5877472E~38, nan) = nan +pow (~0.5877472E~38, nan) = nan +atan2 (~0.5877472E~38, inf) = 0 +pow (~0.5877472E~38, inf) = 0 +atan2 (~0.1E~44, 0.34028235E39) = 0 +pow (~0.1E~44, 0.34028235E39) = 0 +atan2 (~0.1E~44, 0.17014117E39) = 0 +pow (~0.1E~44, 0.17014117E39) = 0 +atan2 (~0.1E~44, 0.123E4) = 0 +pow (~0.1E~44, 0.123E4) = 0 +atan2 (~0.1E~44, 0.123E2) = 0 +pow (~0.1E~44, 0.123E2) = nan +atan2 (~0.1E~44, 0.31415927E1) = 0 +pow (~0.1E~44, 0.31415927E1) = nan +atan2 (~0.1E~44, 0.27182817E1) = 0 +pow (~0.1E~44, 0.27182817E1) = nan +atan2 (~0.1E~44, 0.123E1) = ~1.401298464E~45 +pow (~0.1E~44, 0.123E1) = nan +atan2 (~0.1E~44, 0.123) = ~1.121038771E~44 +pow (~0.1E~44, 0.123) = nan +atan2 (~0.1E~44, 0.123E~2) = ~1.139255651E~42 +pow (~0.1E~44, 0.123E~2) = nan +atan2 (~0.1E~44, 0.11754944E~37) = ~1.192092896E~7 +pow (~0.1E~44, 0.11754944E~37) = nan +atan2 (~0.1E~44, 0.5877472E~38) = ~2.384185791E~7 +pow (~0.1E~44, 0.5877472E~38) = nan +atan2 (~0.1E~44, 0.1E~44) = ~0.7853981853 +pow (~0.1E~44, 0.1E~44) = nan +atan2 (~0.1E~44, 0.0) = ~1.570796371 +pow (~0.1E~44, 0.0) = 1 +atan2 (~0.1E~44, ~0.34028235E39) = ~3.141592741 +pow (~0.1E~44, ~0.34028235E39) = inf +atan2 (~0.1E~44, ~0.17014117E39) = ~3.141592741 +pow (~0.1E~44, ~0.17014117E39) = inf +atan2 (~0.1E~44, ~0.123E4) = ~3.141592741 +pow (~0.1E~44, ~0.123E4) = inf +atan2 (~0.1E~44, ~0.123E2) = ~3.141592741 +pow (~0.1E~44, ~0.123E2) = nan +atan2 (~0.1E~44, ~0.31415927E1) = ~3.141592741 +pow (~0.1E~44, ~0.31415927E1) = nan +atan2 (~0.1E~44, ~0.27182817E1) = ~3.141592741 +pow (~0.1E~44, ~0.27182817E1) = nan +atan2 (~0.1E~44, ~0.123E1) = ~3.141592741 +pow (~0.1E~44, ~0.123E1) = nan +atan2 (~0.1E~44, ~0.123) = ~3.141592741 +pow (~0.1E~44, ~0.123) = nan +atan2 (~0.1E~44, ~0.123E~2) = ~3.141592741 +pow (~0.1E~44, ~0.123E~2) = nan +atan2 (~0.1E~44, ~0.11754944E~37) = ~3.141592503 +pow (~0.1E~44, ~0.11754944E~37) = nan +atan2 (~0.1E~44, ~0.5877472E~38) = ~3.141592503 +pow (~0.1E~44, ~0.5877472E~38) = nan +atan2 (~0.1E~44, ~0.1E~44) = ~2.356194496 +pow (~0.1E~44, ~0.1E~44) = nan +atan2 (~0.1E~44, ~0.0) = ~1.570796371 +pow (~0.1E~44, ~0.0) = 1 +atan2 (~0.1E~44, inf) = 0 +pow (~0.1E~44, inf) = 0 +atan2 (~0.1E~44, ~inf) = ~3.141592741 +pow (~0.1E~44, ~inf) = inf +atan2 (~0.1E~44, nan) = nan +pow (~0.1E~44, nan) = nan +atan2 (~0.1E~44, inf) = 0 +pow (~0.1E~44, inf) = 0 +atan2 (~0.0, 0.34028235E39) = 0 +pow (~0.0, 0.34028235E39) = 0 +atan2 (~0.0, 0.17014117E39) = 0 +pow (~0.0, 0.17014117E39) = 0 +atan2 (~0.0, 0.123E4) = 0 +pow (~0.0, 0.123E4) = 0 +atan2 (~0.0, 0.123E2) = 0 +pow (~0.0, 0.123E2) = 0 +atan2 (~0.0, 0.31415927E1) = 0 +pow (~0.0, 0.31415927E1) = 0 +atan2 (~0.0, 0.27182817E1) = 0 +pow (~0.0, 0.27182817E1) = 0 +atan2 (~0.0, 0.123E1) = 0 +pow (~0.0, 0.123E1) = 0 +atan2 (~0.0, 0.123) = 0 +pow (~0.0, 0.123) = 0 +atan2 (~0.0, 0.123E~2) = 0 +pow (~0.0, 0.123E~2) = 0 +atan2 (~0.0, 0.11754944E~37) = 0 +pow (~0.0, 0.11754944E~37) = 0 +atan2 (~0.0, 0.5877472E~38) = 0 +pow (~0.0, 0.5877472E~38) = 0 +atan2 (~0.0, 0.1E~44) = 0 +pow (~0.0, 0.1E~44) = 0 +atan2 (~0.0, 0.0) = 0 +pow (~0.0, 0.0) = 1 +atan2 (~0.0, ~0.34028235E39) = ~3.141592741 +pow (~0.0, ~0.34028235E39) = inf +atan2 (~0.0, ~0.17014117E39) = ~3.141592741 +pow (~0.0, ~0.17014117E39) = inf +atan2 (~0.0, ~0.123E4) = ~3.141592741 +pow (~0.0, ~0.123E4) = inf +atan2 (~0.0, ~0.123E2) = ~3.141592741 +pow (~0.0, ~0.123E2) = inf +atan2 (~0.0, ~0.31415927E1) = ~3.141592741 +pow (~0.0, ~0.31415927E1) = inf +atan2 (~0.0, ~0.27182817E1) = ~3.141592741 +pow (~0.0, ~0.27182817E1) = inf +atan2 (~0.0, ~0.123E1) = ~3.141592741 +pow (~0.0, ~0.123E1) = inf +atan2 (~0.0, ~0.123) = ~3.141592741 +pow (~0.0, ~0.123) = inf +atan2 (~0.0, ~0.123E~2) = ~3.141592741 +pow (~0.0, ~0.123E~2) = inf +atan2 (~0.0, ~0.11754944E~37) = ~3.141592741 +pow (~0.0, ~0.11754944E~37) = inf +atan2 (~0.0, ~0.5877472E~38) = ~3.141592741 +pow (~0.0, ~0.5877472E~38) = inf +atan2 (~0.0, ~0.1E~44) = ~3.141592741 +pow (~0.0, ~0.1E~44) = inf +atan2 (~0.0, ~0.0) = ~3.141592741 +pow (~0.0, ~0.0) = 1 +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (~0.0, ~inf) = ~3.141592741 +pow (~0.0, ~inf) = inf +atan2 (~0.0, nan) = nan +pow (~0.0, nan) = nan +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (inf, 0.34028235E39) = 1.570796371 +pow (inf, 0.34028235E39) = inf +atan2 (inf, 0.17014117E39) = 1.570796371 +pow (inf, 0.17014117E39) = inf +atan2 (inf, 0.123E4) = 1.570796371 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796371 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.31415927E1) = 1.570796371 +pow (inf, 0.31415927E1) = inf +atan2 (inf, 0.27182817E1) = 1.570796371 +pow (inf, 0.27182817E1) = inf +atan2 (inf, 0.123E1) = 1.570796371 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796371 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796371 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.11754944E~37) = 1.570796371 +pow (inf, 0.11754944E~37) = inf +atan2 (inf, 0.5877472E~38) = 1.570796371 +pow (inf, 0.5877472E~38) = inf +atan2 (inf, 0.1E~44) = 1.570796371 +pow (inf, 0.1E~44) = inf +atan2 (inf, 0.0) = 1.570796371 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.34028235E39) = 1.570796371 +pow (inf, ~0.34028235E39) = 0 +atan2 (inf, ~0.17014117E39) = 1.570796371 +pow (inf, ~0.17014117E39) = 0 +atan2 (inf, ~0.123E4) = 1.570796371 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796371 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.31415927E1) = 1.570796371 +pow (inf, ~0.31415927E1) = 0 +atan2 (inf, ~0.27182817E1) = 1.570796371 +pow (inf, ~0.27182817E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796371 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796371 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796371 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.11754944E~37) = 1.570796371 +pow (inf, ~0.11754944E~37) = 0 +atan2 (inf, ~0.5877472E~38) = 1.570796371 +pow (inf, ~0.5877472E~38) = 0 +atan2 (inf, ~0.1E~44) = 1.570796371 +pow (inf, ~0.1E~44) = 0 +atan2 (inf, ~0.0) = 1.570796371 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.356194496 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (~inf, 0.34028235E39) = ~1.570796371 +pow (~inf, 0.34028235E39) = inf +atan2 (~inf, 0.17014117E39) = ~1.570796371 +pow (~inf, 0.17014117E39) = inf +atan2 (~inf, 0.123E4) = ~1.570796371 +pow (~inf, 0.123E4) = inf +atan2 (~inf, 0.123E2) = ~1.570796371 +pow (~inf, 0.123E2) = inf +atan2 (~inf, 0.31415927E1) = ~1.570796371 +pow (~inf, 0.31415927E1) = inf +atan2 (~inf, 0.27182817E1) = ~1.570796371 +pow (~inf, 0.27182817E1) = inf +atan2 (~inf, 0.123E1) = ~1.570796371 +pow (~inf, 0.123E1) = inf +atan2 (~inf, 0.123) = ~1.570796371 +pow (~inf, 0.123) = inf +atan2 (~inf, 0.123E~2) = ~1.570796371 +pow (~inf, 0.123E~2) = inf +atan2 (~inf, 0.11754944E~37) = ~1.570796371 +pow (~inf, 0.11754944E~37) = inf +atan2 (~inf, 0.5877472E~38) = ~1.570796371 +pow (~inf, 0.5877472E~38) = inf +atan2 (~inf, 0.1E~44) = ~1.570796371 +pow (~inf, 0.1E~44) = inf +atan2 (~inf, 0.0) = ~1.570796371 +pow (~inf, 0.0) = 1 +atan2 (~inf, ~0.34028235E39) = ~1.570796371 +pow (~inf, ~0.34028235E39) = 0 +atan2 (~inf, ~0.17014117E39) = ~1.570796371 +pow (~inf, ~0.17014117E39) = 0 +atan2 (~inf, ~0.123E4) = ~1.570796371 +pow (~inf, ~0.123E4) = 0 +atan2 (~inf, ~0.123E2) = ~1.570796371 +pow (~inf, ~0.123E2) = 0 +atan2 (~inf, ~0.31415927E1) = ~1.570796371 +pow (~inf, ~0.31415927E1) = 0 +atan2 (~inf, ~0.27182817E1) = ~1.570796371 +pow (~inf, ~0.27182817E1) = 0 +atan2 (~inf, ~0.123E1) = ~1.570796371 +pow (~inf, ~0.123E1) = 0 +atan2 (~inf, ~0.123) = ~1.570796371 +pow (~inf, ~0.123) = 0 +atan2 (~inf, ~0.123E~2) = ~1.570796371 +pow (~inf, ~0.123E~2) = 0 +atan2 (~inf, ~0.11754944E~37) = ~1.570796371 +pow (~inf, ~0.11754944E~37) = 0 +atan2 (~inf, ~0.5877472E~38) = ~1.570796371 +pow (~inf, ~0.5877472E~38) = 0 +atan2 (~inf, ~0.1E~44) = ~1.570796371 +pow (~inf, ~0.1E~44) = 0 +atan2 (~inf, ~0.0) = ~1.570796371 +pow (~inf, ~0.0) = 1 +atan2 (~inf, inf) = ~0.7853981853 +pow (~inf, inf) = inf +atan2 (~inf, ~inf) = ~2.356194496 +pow (~inf, ~inf) = 0 +atan2 (~inf, nan) = nan +pow (~inf, nan) = nan +atan2 (~inf, inf) = ~0.7853981853 +pow (~inf, inf) = inf +atan2 (nan, 0.34028235E39) = nan +pow (nan, 0.34028235E39) = nan +atan2 (nan, 0.17014117E39) = nan +pow (nan, 0.17014117E39) = nan +atan2 (nan, 0.123E4) = nan +pow (nan, 0.123E4) = nan +atan2 (nan, 0.123E2) = nan +pow (nan, 0.123E2) = nan +atan2 (nan, 0.31415927E1) = nan +pow (nan, 0.31415927E1) = nan +atan2 (nan, 0.27182817E1) = nan +pow (nan, 0.27182817E1) = nan +atan2 (nan, 0.123E1) = nan +pow (nan, 0.123E1) = nan +atan2 (nan, 0.123) = nan +pow (nan, 0.123) = nan +atan2 (nan, 0.123E~2) = nan +pow (nan, 0.123E~2) = nan +atan2 (nan, 0.11754944E~37) = nan +pow (nan, 0.11754944E~37) = nan +atan2 (nan, 0.5877472E~38) = nan +pow (nan, 0.5877472E~38) = nan +atan2 (nan, 0.1E~44) = nan +pow (nan, 0.1E~44) = nan +atan2 (nan, 0.0) = nan +pow (nan, 0.0) = 1 +atan2 (nan, ~0.34028235E39) = nan +pow (nan, ~0.34028235E39) = nan +atan2 (nan, ~0.17014117E39) = nan +pow (nan, ~0.17014117E39) = nan +atan2 (nan, ~0.123E4) = nan +pow (nan, ~0.123E4) = nan +atan2 (nan, ~0.123E2) = nan +pow (nan, ~0.123E2) = nan +atan2 (nan, ~0.31415927E1) = nan +pow (nan, ~0.31415927E1) = nan +atan2 (nan, ~0.27182817E1) = nan +pow (nan, ~0.27182817E1) = nan +atan2 (nan, ~0.123E1) = nan +pow (nan, ~0.123E1) = nan +atan2 (nan, ~0.123) = nan +pow (nan, ~0.123) = nan +atan2 (nan, ~0.123E~2) = nan +pow (nan, ~0.123E~2) = nan +atan2 (nan, ~0.11754944E~37) = nan +pow (nan, ~0.11754944E~37) = nan +atan2 (nan, ~0.5877472E~38) = nan +pow (nan, ~0.5877472E~38) = nan +atan2 (nan, ~0.1E~44) = nan +pow (nan, ~0.1E~44) = nan +atan2 (nan, ~0.0) = nan +pow (nan, ~0.0) = 1 +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (nan, ~inf) = nan +pow (nan, ~inf) = nan +atan2 (nan, nan) = nan +pow (nan, nan) = nan +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (inf, 0.34028235E39) = 1.570796371 +pow (inf, 0.34028235E39) = inf +atan2 (inf, 0.17014117E39) = 1.570796371 +pow (inf, 0.17014117E39) = inf +atan2 (inf, 0.123E4) = 1.570796371 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796371 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.31415927E1) = 1.570796371 +pow (inf, 0.31415927E1) = inf +atan2 (inf, 0.27182817E1) = 1.570796371 +pow (inf, 0.27182817E1) = inf +atan2 (inf, 0.123E1) = 1.570796371 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796371 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796371 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.11754944E~37) = 1.570796371 +pow (inf, 0.11754944E~37) = inf +atan2 (inf, 0.5877472E~38) = 1.570796371 +pow (inf, 0.5877472E~38) = inf +atan2 (inf, 0.1E~44) = 1.570796371 +pow (inf, 0.1E~44) = inf +atan2 (inf, 0.0) = 1.570796371 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.34028235E39) = 1.570796371 +pow (inf, ~0.34028235E39) = 0 +atan2 (inf, ~0.17014117E39) = 1.570796371 +pow (inf, ~0.17014117E39) = 0 +atan2 (inf, ~0.123E4) = 1.570796371 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796371 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.31415927E1) = 1.570796371 +pow (inf, ~0.31415927E1) = 0 +atan2 (inf, ~0.27182817E1) = 1.570796371 +pow (inf, ~0.27182817E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796371 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796371 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796371 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.11754944E~37) = 1.570796371 +pow (inf, ~0.11754944E~37) = 0 +atan2 (inf, ~0.5877472E~38) = 1.570796371 +pow (inf, ~0.5877472E~38) = 0 +atan2 (inf, ~0.1E~44) = 1.570796371 +pow (inf, ~0.1E~44) = 0 +atan2 (inf, ~0.0) = 1.570796371 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.356194496 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981853 +pow (inf, inf) = inf + +Testing *+, *- +SOME *+ AND STANDARD RESULTS DIFFER +(r1, r2, r3): *+(r1, r2, r3) (r1 * r2 + r3) +-------------------------------------------- +(0.34028235E39, 0.34028235E39, 0.34028235E39): inf inf +(0.34028235E39, 0.34028235E39, 0.17014117E39): inf inf +(0.34028235E39, 0.34028235E39, 0.123E4): inf inf +(0.34028235E39, 0.34028235E39, 0.123E2): inf inf +(0.34028235E39, 0.34028235E39, 0.31415927E1): inf inf +(0.34028235E39, 0.34028235E39, 0.27182817E1): inf inf +(0.34028235E39, 0.34028235E39, 0.123E1): inf inf +(0.34028235E39, 0.34028235E39, 0.123): inf inf +(0.34028235E39, 0.34028235E39, 0.123E~2): inf inf +(0.34028235E39, 0.34028235E39, 0.11754944E~37): inf inf +(0.34028235E39, 0.34028235E39, 0.5877472E~38): inf inf +(0.34028235E39, 0.34028235E39, 0.1E~44): inf inf +(0.34028235E39, 0.34028235E39, 0.0): inf inf +(0.34028235E39, 0.34028235E39, ~0.34028235E39): inf inf +(0.34028235E39, 0.34028235E39, ~0.17014117E39): inf inf +(0.34028235E39, 0.34028235E39, ~0.123E4): inf inf +(0.34028235E39, 0.34028235E39, ~0.123E2): inf inf +(0.34028235E39, 0.34028235E39, ~0.31415927E1): inf inf +(0.34028235E39, 0.34028235E39, ~0.27182817E1): inf inf +(0.34028235E39, 0.34028235E39, ~0.123E1): inf inf +(0.34028235E39, 0.34028235E39, ~0.123): inf inf +(0.34028235E39, 0.34028235E39, ~0.123E~2): inf inf +(0.34028235E39, 0.34028235E39, ~0.11754944E~37): inf inf +(0.34028235E39, 0.34028235E39, ~0.5877472E~38): inf inf +(0.34028235E39, 0.34028235E39, ~0.1E~44): inf inf +(0.34028235E39, 0.34028235E39, ~0.0): inf inf +(0.34028235E39, 0.17014117E39, 0.34028235E39): inf inf +(0.34028235E39, 0.17014117E39, 0.17014117E39): inf inf +(0.34028235E39, 0.17014117E39, 0.123E4): inf inf +(0.34028235E39, 0.17014117E39, 0.123E2): inf inf +(0.34028235E39, 0.17014117E39, 0.31415927E1): inf inf +(0.34028235E39, 0.17014117E39, 0.27182817E1): inf inf +(0.34028235E39, 0.17014117E39, 0.123E1): inf inf +(0.34028235E39, 0.17014117E39, 0.123): inf inf +(0.34028235E39, 0.17014117E39, 0.123E~2): inf inf +(0.34028235E39, 0.17014117E39, 0.11754944E~37): inf inf +(0.34028235E39, 0.17014117E39, 0.5877472E~38): inf inf +(0.34028235E39, 0.17014117E39, 0.1E~44): inf inf +(0.34028235E39, 0.17014117E39, 0.0): inf inf +(0.34028235E39, 0.17014117E39, ~0.34028235E39): inf inf +(0.34028235E39, 0.17014117E39, ~0.17014117E39): inf inf +(0.34028235E39, 0.17014117E39, ~0.123E4): inf inf +(0.34028235E39, 0.17014117E39, ~0.123E2): inf inf +(0.34028235E39, 0.17014117E39, ~0.31415927E1): inf inf +(0.34028235E39, 0.17014117E39, ~0.27182817E1): inf inf +(0.34028235E39, 0.17014117E39, ~0.123E1): inf inf +(0.34028235E39, 0.17014117E39, ~0.123): inf inf +(0.34028235E39, 0.17014117E39, ~0.123E~2): inf inf +(0.34028235E39, 0.17014117E39, ~0.11754944E~37): inf inf +(0.34028235E39, 0.17014117E39, ~0.5877472E~38): inf inf +(0.34028235E39, 0.17014117E39, ~0.1E~44): inf inf +(0.34028235E39, 0.17014117E39, ~0.0): inf inf +(0.34028235E39, 0.123E4, 0.34028235E39): inf inf +(0.34028235E39, 0.123E4, 0.17014117E39): inf inf +(0.34028235E39, 0.123E4, 0.123E4): inf inf +(0.34028235E39, 0.123E4, 0.123E2): inf inf +(0.34028235E39, 0.123E4, 0.31415927E1): inf inf +(0.34028235E39, 0.123E4, 0.27182817E1): inf inf +(0.34028235E39, 0.123E4, 0.123E1): inf inf +(0.34028235E39, 0.123E4, 0.123): inf inf +(0.34028235E39, 0.123E4, 0.123E~2): inf inf +(0.34028235E39, 0.123E4, 0.11754944E~37): inf inf +(0.34028235E39, 0.123E4, 0.5877472E~38): inf inf +(0.34028235E39, 0.123E4, 0.1E~44): inf inf +(0.34028235E39, 0.123E4, 0.0): inf inf +(0.34028235E39, 0.123E4, ~0.34028235E39): inf inf +(0.34028235E39, 0.123E4, ~0.17014117E39): inf inf +(0.34028235E39, 0.123E4, ~0.123E4): inf inf +(0.34028235E39, 0.123E4, ~0.123E2): inf inf +(0.34028235E39, 0.123E4, ~0.31415927E1): inf inf +(0.34028235E39, 0.123E4, ~0.27182817E1): inf inf +(0.34028235E39, 0.123E4, ~0.123E1): inf inf +(0.34028235E39, 0.123E4, ~0.123): inf inf +(0.34028235E39, 0.123E4, ~0.123E~2): inf inf +(0.34028235E39, 0.123E4, ~0.11754944E~37): inf inf +(0.34028235E39, 0.123E4, ~0.5877472E~38): inf inf +(0.34028235E39, 0.123E4, ~0.1E~44): inf inf +(0.34028235E39, 0.123E4, ~0.0): inf inf +(0.34028235E39, 0.123E2, 0.34028235E39): inf inf +(0.34028235E39, 0.123E2, 0.17014117E39): inf inf +(0.34028235E39, 0.123E2, 0.123E4): inf inf +(0.34028235E39, 0.123E2, 0.123E2): inf inf +(0.34028235E39, 0.123E2, 0.31415927E1): inf inf +(0.34028235E39, 0.123E2, 0.27182817E1): inf inf +(0.34028235E39, 0.123E2, 0.123E1): inf inf +(0.34028235E39, 0.123E2, 0.123): inf inf +(0.34028235E39, 0.123E2, 0.123E~2): inf inf +(0.34028235E39, 0.123E2, 0.11754944E~37): inf inf +(0.34028235E39, 0.123E2, 0.5877472E~38): inf inf +(0.34028235E39, 0.123E2, 0.1E~44): inf inf +(0.34028235E39, 0.123E2, 0.0): inf inf +(0.34028235E39, 0.123E2, ~0.34028235E39): inf inf +(0.34028235E39, 0.123E2, ~0.17014117E39): inf inf +(0.34028235E39, 0.123E2, ~0.123E4): inf inf +(0.34028235E39, 0.123E2, ~0.123E2): inf inf +(0.34028235E39, 0.123E2, ~0.31415927E1): inf inf +(0.34028235E39, 0.123E2, ~0.27182817E1): inf inf +(0.34028235E39, 0.123E2, ~0.123E1): inf inf +(0.34028235E39, 0.123E2, ~0.123): inf inf +(0.34028235E39, 0.123E2, ~0.123E~2): inf inf +(0.34028235E39, 0.123E2, ~0.11754944E~37): inf inf +(0.34028235E39, 0.123E2, ~0.5877472E~38): inf inf +(0.34028235E39, 0.123E2, ~0.1E~44): inf inf +(0.34028235E39, 0.123E2, ~0.0): inf inf +(0.34028235E39, 0.31415927E1, 0.34028235E39): inf inf +(0.34028235E39, 0.31415927E1, 0.17014117E39): inf inf +(0.34028235E39, 0.31415927E1, 0.123E4): inf inf +(0.34028235E39, 0.31415927E1, 0.123E2): inf inf +(0.34028235E39, 0.31415927E1, 0.31415927E1): inf inf +(0.34028235E39, 0.31415927E1, 0.27182817E1): inf inf +(0.34028235E39, 0.31415927E1, 0.123E1): inf inf +(0.34028235E39, 0.31415927E1, 0.123): inf inf +(0.34028235E39, 0.31415927E1, 0.123E~2): inf inf +(0.34028235E39, 0.31415927E1, 0.11754944E~37): inf inf +(0.34028235E39, 0.31415927E1, 0.5877472E~38): inf inf +(0.34028235E39, 0.31415927E1, 0.1E~44): inf inf +(0.34028235E39, 0.31415927E1, 0.0): inf inf +(0.34028235E39, 0.31415927E1, ~0.34028235E39): inf inf +(0.34028235E39, 0.31415927E1, ~0.17014117E39): inf inf +(0.34028235E39, 0.31415927E1, ~0.123E4): inf inf +(0.34028235E39, 0.31415927E1, ~0.123E2): inf inf +(0.34028235E39, 0.31415927E1, ~0.31415927E1): inf inf +(0.34028235E39, 0.31415927E1, ~0.27182817E1): inf inf +(0.34028235E39, 0.31415927E1, ~0.123E1): inf inf +(0.34028235E39, 0.31415927E1, ~0.123): inf inf +(0.34028235E39, 0.31415927E1, ~0.123E~2): inf inf +(0.34028235E39, 0.31415927E1, ~0.11754944E~37): inf inf +(0.34028235E39, 0.31415927E1, ~0.5877472E~38): inf inf +(0.34028235E39, 0.31415927E1, ~0.1E~44): inf inf +(0.34028235E39, 0.31415927E1, ~0.0): inf inf +(0.34028235E39, 0.27182817E1, 0.34028235E39): inf inf +(0.34028235E39, 0.27182817E1, 0.17014117E39): inf inf +(0.34028235E39, 0.27182817E1, 0.123E4): inf inf +(0.34028235E39, 0.27182817E1, 0.123E2): inf inf +(0.34028235E39, 0.27182817E1, 0.31415927E1): inf inf +(0.34028235E39, 0.27182817E1, 0.27182817E1): inf inf +(0.34028235E39, 0.27182817E1, 0.123E1): inf inf +(0.34028235E39, 0.27182817E1, 0.123): inf inf +(0.34028235E39, 0.27182817E1, 0.123E~2): inf inf +(0.34028235E39, 0.27182817E1, 0.11754944E~37): inf inf +(0.34028235E39, 0.27182817E1, 0.5877472E~38): inf inf +(0.34028235E39, 0.27182817E1, 0.1E~44): inf inf +(0.34028235E39, 0.27182817E1, 0.0): inf inf +(0.34028235E39, 0.27182817E1, ~0.34028235E39): inf inf +(0.34028235E39, 0.27182817E1, ~0.17014117E39): inf inf +(0.34028235E39, 0.27182817E1, ~0.123E4): inf inf +(0.34028235E39, 0.27182817E1, ~0.123E2): inf inf +(0.34028235E39, 0.27182817E1, ~0.31415927E1): inf inf +(0.34028235E39, 0.27182817E1, ~0.27182817E1): inf inf +(0.34028235E39, 0.27182817E1, ~0.123E1): inf inf +(0.34028235E39, 0.27182817E1, ~0.123): inf inf +(0.34028235E39, 0.27182817E1, ~0.123E~2): inf inf +(0.34028235E39, 0.27182817E1, ~0.11754944E~37): inf inf +(0.34028235E39, 0.27182817E1, ~0.5877472E~38): inf inf +(0.34028235E39, 0.27182817E1, ~0.1E~44): inf inf +(0.34028235E39, 0.27182817E1, ~0.0): inf inf +(0.34028235E39, 0.123E1, 0.34028235E39): inf inf +(0.34028235E39, 0.123E1, 0.17014117E39): inf inf +(0.34028235E39, 0.123E1, 0.123E4): inf inf +(0.34028235E39, 0.123E1, 0.123E2): inf inf +(0.34028235E39, 0.123E1, 0.31415927E1): inf inf +(0.34028235E39, 0.123E1, 0.27182817E1): inf inf +(0.34028235E39, 0.123E1, 0.123E1): inf inf +(0.34028235E39, 0.123E1, 0.123): inf inf +(0.34028235E39, 0.123E1, 0.123E~2): inf inf +(0.34028235E39, 0.123E1, 0.11754944E~37): inf inf +(0.34028235E39, 0.123E1, 0.5877472E~38): inf inf +(0.34028235E39, 0.123E1, 0.1E~44): inf inf +(0.34028235E39, 0.123E1, 0.0): inf inf +(0.34028235E39, 0.123E1, ~0.34028235E39): 0.78264946E38 0.78264946E38 +(0.34028235E39, 0.123E1, ~0.17014117E39): 0.24840611E39 0.24840611E39 +(0.34028235E39, 0.123E1, ~0.123E4): inf inf +(0.34028235E39, 0.123E1, ~0.123E2): inf inf +(0.34028235E39, 0.123E1, ~0.31415927E1): inf inf +(0.34028235E39, 0.123E1, ~0.27182817E1): inf inf +(0.34028235E39, 0.123E1, ~0.123E1): inf inf +(0.34028235E39, 0.123E1, ~0.123): inf inf +(0.34028235E39, 0.123E1, ~0.123E~2): inf inf +(0.34028235E39, 0.123E1, ~0.11754944E~37): inf inf +(0.34028235E39, 0.123E1, ~0.5877472E~38): inf inf +(0.34028235E39, 0.123E1, ~0.1E~44): inf inf +(0.34028235E39, 0.123E1, ~0.0): inf inf +(0.34028235E39, 0.123, 0.34028235E39): inf inf +(0.34028235E39, 0.123, 0.17014117E39): 0.2119959E39 0.2119959E39 +(0.34028235E39, 0.123, 0.123E4): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, 0.123E2): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, 0.31415927E1): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, 0.27182817E1): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, 0.123E1): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, 0.123): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, 0.123E~2): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, 0.11754944E~37): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, 0.5877472E~38): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, 0.1E~44): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, 0.0): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, ~0.34028235E39): ~0.2984276E39 ~0.2984276E39 +(0.34028235E39, 0.123, ~0.17014117E39): ~0.12828644E39 ~0.12828644E39 +(0.34028235E39, 0.123, ~0.123E4): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, ~0.123E2): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, ~0.31415927E1): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, ~0.27182817E1): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, ~0.123E1): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, ~0.123): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, ~0.123E~2): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, ~0.11754944E~37): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, ~0.5877472E~38): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, ~0.1E~44): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123, ~0.0): 0.4185473E38 0.4185473E38 +(0.34028235E39, 0.123E~2, 0.34028235E39): inf inf +(0.34028235E39, 0.123E~2, 0.17014117E39): 0.17055971E39 0.17055971E39 +(0.34028235E39, 0.123E~2, 0.123E4): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, 0.123E2): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, 0.31415927E1): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, 0.27182817E1): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, 0.123E1): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, 0.123): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, 0.123E~2): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, 0.11754944E~37): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, 0.5877472E~38): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, 0.1E~44): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, 0.0): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, ~0.34028235E39): ~0.3398638E39 ~0.3398638E39 +(0.34028235E39, 0.123E~2, ~0.17014117E39): ~0.16972263E39 ~0.16972263E39 +(0.34028235E39, 0.123E~2, ~0.123E4): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, ~0.123E2): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, ~0.31415927E1): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, ~0.27182817E1): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, ~0.123E1): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, ~0.123): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, ~0.123E~2): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, ~0.11754944E~37): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, ~0.5877472E~38): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, ~0.1E~44): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.123E~2, ~0.0): 0.4185473E36 0.4185473E36 +(0.34028235E39, 0.11754944E~37, 0.123E4): 0.1234E4 0.1234E4 +(0.34028235E39, 0.11754944E~37, 0.123E2): 0.163E2 0.163E2 +(0.34028235E39, 0.11754944E~37, 0.27182817E1): 0.67182817E1 0.67182817E1 +(0.34028235E39, 0.11754944E~37, 0.123E1): 0.52299995E1 0.52299995E1 +(0.34028235E39, 0.11754944E~37, 0.123): 0.41229997E1 0.41229997E1 +(0.34028235E39, 0.11754944E~37, 0.123E~2): 0.400123E1 0.400123E1 +(0.34028235E39, 0.11754944E~37, ~0.123E4): ~0.1226E4 ~0.1226E4 +(0.34028235E39, 0.11754944E~37, ~0.123E2): ~0.83E1 ~0.83E1 +(0.34028235E39, 0.11754944E~37, ~0.123): 0.38769999E1 0.38769999E1 +(0.34028235E39, 0.11754944E~37, ~0.123E~2): 0.39987698E1 0.39987698E1 +(0.34028235E39, 0.5877472E~38, 0.123E4): 0.1232E4 0.1232E4 +(0.34028235E39, 0.5877472E~38, 0.123E2): 0.143E2 0.143E2 +(0.34028235E39, 0.5877472E~38, 0.31415927E1): 0.51415925E1 0.51415925E1 +(0.34028235E39, 0.5877472E~38, 0.27182817E1): 0.47182817E1 0.47182817E1 +(0.34028235E39, 0.5877472E~38, 0.123E1): 0.323E1 0.323E1 +(0.34028235E39, 0.5877472E~38, 0.123): 0.2123E1 0.2123E1 +(0.34028235E39, 0.5877472E~38, 0.123E~2): 0.20012298E1 0.20012298E1 +(0.34028235E39, 0.5877472E~38, ~0.123E4): ~0.1228E4 ~0.1228E4 +(0.34028235E39, 0.5877472E~38, ~0.123E2): ~0.103E2 ~0.103E2 +(0.34028235E39, 0.5877472E~38, ~0.123): 0.18769999E1 0.18769999E1 +(0.34028235E39, 0.5877472E~38, ~0.123E~2): 0.19987699E1 0.19987699E1 +(0.34028235E39, 0.1E~44, 0.123E4): 0.123E4 0.123E4 +(0.34028235E39, 0.1E~44, 0.123E2): 0.123E2 0.123E2 +(0.34028235E39, 0.1E~44, 0.31415927E1): 0.31415932E1 0.31415932E1 +(0.34028235E39, 0.1E~44, 0.27182817E1): 0.27182822E1 0.27182822E1 +(0.34028235E39, 0.1E~44, 0.123E1): 0.12300005E1 0.12300005E1 +(0.34028235E39, 0.1E~44, 0.123): 0.12300048 0.12300048 +(0.34028235E39, 0.1E~44, 0.123E~2): 0.12304769E~2 0.12304769E~2 +(0.34028235E39, 0.1E~44, ~0.123E4): ~0.123E4 ~0.123E4 +(0.34028235E39, 0.1E~44, ~0.123E2): ~0.123E2 ~0.123E2 +(0.34028235E39, 0.1E~44, ~0.31415927E1): ~0.31415923E1 ~0.31415923E1 +(0.34028235E39, 0.1E~44, ~0.27182817E1): ~0.27182813E1 ~0.27182813E1 +(0.34028235E39, 0.1E~44, ~0.123E1): ~0.12299995E1 ~0.12299995E1 +(0.34028235E39, 0.1E~44, ~0.123): ~0.12299953 ~0.12299953 +(0.34028235E39, 0.1E~44, ~0.123E~2): ~0.12295232E~2 ~0.12295232E~2 +(0.34028235E39, ~0.34028235E39, 0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.123E4): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.123E2): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.123E1): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.123): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.123E~2): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.1E~44): ~inf ~inf +(0.34028235E39, ~0.34028235E39, 0.0): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.123E4): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.123E2): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.123E1): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.123): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.123E~2): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.1E~44): ~inf ~inf +(0.34028235E39, ~0.34028235E39, ~0.0): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.123E4): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.123E2): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.123E1): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.123): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.123E~2): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.1E~44): ~inf ~inf +(0.34028235E39, ~0.17014117E39, 0.0): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.123E4): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.123E2): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.123E1): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.123): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.123E~2): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.1E~44): ~inf ~inf +(0.34028235E39, ~0.17014117E39, ~0.0): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.123E4): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.123E2): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.123E1): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.123): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.123E~2): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.1E~44): ~inf ~inf +(0.34028235E39, ~0.123E4, 0.0): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.123E4): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.123E2): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.123E1): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.123): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.123E~2): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.1E~44): ~inf ~inf +(0.34028235E39, ~0.123E4, ~0.0): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.123E4): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.123E2): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.123E1): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.123): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.123E~2): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.1E~44): ~inf ~inf +(0.34028235E39, ~0.123E2, 0.0): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.123E4): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.123E2): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.123E1): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.123): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.123E~2): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.1E~44): ~inf ~inf +(0.34028235E39, ~0.123E2, ~0.0): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.123E4): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.123E2): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.123E1): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.123): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.123E~2): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.1E~44): ~inf ~inf +(0.34028235E39, ~0.31415927E1, 0.0): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.123E4): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.123E2): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.123E1): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.123): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.123E~2): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.1E~44): ~inf ~inf +(0.34028235E39, ~0.31415927E1, ~0.0): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.123E4): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.123E2): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.123E1): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.123): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.123E~2): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.1E~44): ~inf ~inf +(0.34028235E39, ~0.27182817E1, 0.0): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.123E4): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.123E2): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.123E1): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.123): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.123E~2): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.1E~44): ~inf ~inf +(0.34028235E39, ~0.27182817E1, ~0.0): ~inf ~inf +(0.34028235E39, ~0.123E1, 0.34028235E39): ~0.78264946E38 ~0.78264946E38 +(0.34028235E39, ~0.123E1, 0.17014117E39): ~0.24840611E39 ~0.24840611E39 +(0.34028235E39, ~0.123E1, 0.123E4): ~inf ~inf +(0.34028235E39, ~0.123E1, 0.123E2): ~inf ~inf +(0.34028235E39, ~0.123E1, 0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.123E1, 0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.123E1, 0.123E1): ~inf ~inf +(0.34028235E39, ~0.123E1, 0.123): ~inf ~inf +(0.34028235E39, ~0.123E1, 0.123E~2): ~inf ~inf +(0.34028235E39, ~0.123E1, 0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.123E1, 0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.123E1, 0.1E~44): ~inf ~inf +(0.34028235E39, ~0.123E1, 0.0): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.17014117E39): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.123E4): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.123E2): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.31415927E1): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.27182817E1): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.123E1): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.123): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.123E~2): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.11754944E~37): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.5877472E~38): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.1E~44): ~inf ~inf +(0.34028235E39, ~0.123E1, ~0.0): ~inf ~inf +(0.34028235E39, ~0.123, 0.34028235E39): 0.2984276E39 0.2984276E39 +(0.34028235E39, ~0.123, 0.17014117E39): 0.12828644E39 0.12828644E39 +(0.34028235E39, ~0.123, 0.123E4): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, 0.123E2): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, 0.31415927E1): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, 0.27182817E1): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, 0.123E1): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, 0.123): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, 0.123E~2): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, 0.11754944E~37): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, 0.5877472E~38): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, 0.1E~44): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, 0.0): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, ~0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.123, ~0.17014117E39): ~0.2119959E39 ~0.2119959E39 +(0.34028235E39, ~0.123, ~0.123E4): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, ~0.123E2): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, ~0.31415927E1): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, ~0.27182817E1): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, ~0.123E1): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, ~0.123): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, ~0.123E~2): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, ~0.11754944E~37): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, ~0.5877472E~38): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, ~0.1E~44): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123, ~0.0): ~0.4185473E38 ~0.4185473E38 +(0.34028235E39, ~0.123E~2, 0.34028235E39): 0.3398638E39 0.3398638E39 +(0.34028235E39, ~0.123E~2, 0.17014117E39): 0.16972263E39 0.16972263E39 +(0.34028235E39, ~0.123E~2, 0.123E4): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, 0.123E2): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, 0.31415927E1): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, 0.27182817E1): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, 0.123E1): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, 0.123): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, 0.123E~2): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, 0.11754944E~37): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, 0.5877472E~38): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, 0.1E~44): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, 0.0): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, ~0.34028235E39): ~inf ~inf +(0.34028235E39, ~0.123E~2, ~0.17014117E39): ~0.17055971E39 ~0.17055971E39 +(0.34028235E39, ~0.123E~2, ~0.123E4): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, ~0.123E2): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, ~0.31415927E1): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, ~0.27182817E1): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, ~0.123E1): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, ~0.123): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, ~0.123E~2): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, ~0.11754944E~37): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, ~0.5877472E~38): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, ~0.1E~44): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.123E~2, ~0.0): ~0.4185473E36 ~0.4185473E36 +(0.34028235E39, ~0.11754944E~37, 0.123E4): 0.1226E4 0.1226E4 +(0.34028235E39, ~0.11754944E~37, 0.123E2): 0.83E1 0.83E1 +(0.34028235E39, ~0.11754944E~37, 0.123): ~0.38769999E1 ~0.38769999E1 +(0.34028235E39, ~0.11754944E~37, 0.123E~2): ~0.39987698E1 ~0.39987698E1 +(0.34028235E39, ~0.11754944E~37, ~0.123E4): ~0.1234E4 ~0.1234E4 +(0.34028235E39, ~0.11754944E~37, ~0.123E2): ~0.163E2 ~0.163E2 +(0.34028235E39, ~0.11754944E~37, ~0.27182817E1): ~0.67182817E1 ~0.67182817E1 +(0.34028235E39, ~0.11754944E~37, ~0.123E1): ~0.52299995E1 ~0.52299995E1 +(0.34028235E39, ~0.11754944E~37, ~0.123): ~0.41229997E1 ~0.41229997E1 +(0.34028235E39, ~0.11754944E~37, ~0.123E~2): ~0.400123E1 ~0.400123E1 +(0.34028235E39, ~0.5877472E~38, 0.123E4): 0.1228E4 0.1228E4 +(0.34028235E39, ~0.5877472E~38, 0.123E2): 0.103E2 0.103E2 +(0.34028235E39, ~0.5877472E~38, 0.123): ~0.18769999E1 ~0.18769999E1 +(0.34028235E39, ~0.5877472E~38, 0.123E~2): ~0.19987699E1 ~0.19987699E1 +(0.34028235E39, ~0.5877472E~38, ~0.123E4): ~0.1232E4 ~0.1232E4 +(0.34028235E39, ~0.5877472E~38, ~0.123E2): ~0.143E2 ~0.143E2 +(0.34028235E39, ~0.5877472E~38, ~0.31415927E1): ~0.51415925E1 ~0.51415925E1 +(0.34028235E39, ~0.5877472E~38, ~0.27182817E1): ~0.47182817E1 ~0.47182817E1 +(0.34028235E39, ~0.5877472E~38, ~0.123E1): ~0.323E1 ~0.323E1 +(0.34028235E39, ~0.5877472E~38, ~0.123): ~0.2123E1 ~0.2123E1 +(0.34028235E39, ~0.5877472E~38, ~0.123E~2): ~0.20012298E1 ~0.20012298E1 +(0.34028235E39, ~0.1E~44, 0.123E4): 0.123E4 0.123E4 +(0.34028235E39, ~0.1E~44, 0.123E2): 0.123E2 0.123E2 +(0.34028235E39, ~0.1E~44, 0.31415927E1): 0.31415923E1 0.31415923E1 +(0.34028235E39, ~0.1E~44, 0.27182817E1): 0.27182813E1 0.27182813E1 +(0.34028235E39, ~0.1E~44, 0.123E1): 0.12299995E1 0.12299995E1 +(0.34028235E39, ~0.1E~44, 0.123): 0.12299953 0.12299953 +(0.34028235E39, ~0.1E~44, 0.123E~2): 0.12295232E~2 0.12295232E~2 +(0.34028235E39, ~0.1E~44, ~0.123E4): ~0.123E4 ~0.123E4 +(0.34028235E39, ~0.1E~44, ~0.123E2): ~0.123E2 ~0.123E2 +(0.34028235E39, ~0.1E~44, ~0.31415927E1): ~0.31415932E1 ~0.31415932E1 +(0.34028235E39, ~0.1E~44, ~0.27182817E1): ~0.27182822E1 ~0.27182822E1 +(0.34028235E39, ~0.1E~44, ~0.123E1): ~0.12300005E1 ~0.12300005E1 +(0.34028235E39, ~0.1E~44, ~0.123): ~0.12300048 ~0.12300048 +(0.34028235E39, ~0.1E~44, ~0.123E~2): ~0.12304769E~2 ~0.12304769E~2 +(0.17014117E39, 0.34028235E39, 0.34028235E39): inf inf +(0.17014117E39, 0.34028235E39, 0.17014117E39): inf inf +(0.17014117E39, 0.34028235E39, 0.123E4): inf inf +(0.17014117E39, 0.34028235E39, 0.123E2): inf inf +(0.17014117E39, 0.34028235E39, 0.31415927E1): inf inf +(0.17014117E39, 0.34028235E39, 0.27182817E1): inf inf +(0.17014117E39, 0.34028235E39, 0.123E1): inf inf +(0.17014117E39, 0.34028235E39, 0.123): inf inf +(0.17014117E39, 0.34028235E39, 0.123E~2): inf inf +(0.17014117E39, 0.34028235E39, 0.11754944E~37): inf inf +(0.17014117E39, 0.34028235E39, 0.5877472E~38): inf inf +(0.17014117E39, 0.34028235E39, 0.1E~44): inf inf +(0.17014117E39, 0.34028235E39, 0.0): inf inf +(0.17014117E39, 0.34028235E39, ~0.34028235E39): inf inf +(0.17014117E39, 0.34028235E39, ~0.17014117E39): inf inf +(0.17014117E39, 0.34028235E39, ~0.123E4): inf inf +(0.17014117E39, 0.34028235E39, ~0.123E2): inf inf +(0.17014117E39, 0.34028235E39, ~0.31415927E1): inf inf +(0.17014117E39, 0.34028235E39, ~0.27182817E1): inf inf +(0.17014117E39, 0.34028235E39, ~0.123E1): inf inf +(0.17014117E39, 0.34028235E39, ~0.123): inf inf +(0.17014117E39, 0.34028235E39, ~0.123E~2): inf inf +(0.17014117E39, 0.34028235E39, ~0.11754944E~37): inf inf +(0.17014117E39, 0.34028235E39, ~0.5877472E~38): inf inf +(0.17014117E39, 0.34028235E39, ~0.1E~44): inf inf +(0.17014117E39, 0.34028235E39, ~0.0): inf inf +(0.17014117E39, 0.17014117E39, 0.34028235E39): inf inf +(0.17014117E39, 0.17014117E39, 0.17014117E39): inf inf +(0.17014117E39, 0.17014117E39, 0.123E4): inf inf +(0.17014117E39, 0.17014117E39, 0.123E2): inf inf +(0.17014117E39, 0.17014117E39, 0.31415927E1): inf inf +(0.17014117E39, 0.17014117E39, 0.27182817E1): inf inf +(0.17014117E39, 0.17014117E39, 0.123E1): inf inf +(0.17014117E39, 0.17014117E39, 0.123): inf inf +(0.17014117E39, 0.17014117E39, 0.123E~2): inf inf +(0.17014117E39, 0.17014117E39, 0.11754944E~37): inf inf +(0.17014117E39, 0.17014117E39, 0.5877472E~38): inf inf +(0.17014117E39, 0.17014117E39, 0.1E~44): inf inf +(0.17014117E39, 0.17014117E39, 0.0): inf inf +(0.17014117E39, 0.17014117E39, ~0.34028235E39): inf inf +(0.17014117E39, 0.17014117E39, ~0.17014117E39): inf inf +(0.17014117E39, 0.17014117E39, ~0.123E4): inf inf +(0.17014117E39, 0.17014117E39, ~0.123E2): inf inf +(0.17014117E39, 0.17014117E39, ~0.31415927E1): inf inf +(0.17014117E39, 0.17014117E39, ~0.27182817E1): inf inf +(0.17014117E39, 0.17014117E39, ~0.123E1): inf inf +(0.17014117E39, 0.17014117E39, ~0.123): inf inf +(0.17014117E39, 0.17014117E39, ~0.123E~2): inf inf +(0.17014117E39, 0.17014117E39, ~0.11754944E~37): inf inf +(0.17014117E39, 0.17014117E39, ~0.5877472E~38): inf inf +(0.17014117E39, 0.17014117E39, ~0.1E~44): inf inf +(0.17014117E39, 0.17014117E39, ~0.0): inf inf +(0.17014117E39, 0.123E4, 0.34028235E39): inf inf +(0.17014117E39, 0.123E4, 0.17014117E39): inf inf +(0.17014117E39, 0.123E4, 0.123E4): inf inf +(0.17014117E39, 0.123E4, 0.123E2): inf inf +(0.17014117E39, 0.123E4, 0.31415927E1): inf inf +(0.17014117E39, 0.123E4, 0.27182817E1): inf inf +(0.17014117E39, 0.123E4, 0.123E1): inf inf +(0.17014117E39, 0.123E4, 0.123): inf inf +(0.17014117E39, 0.123E4, 0.123E~2): inf inf +(0.17014117E39, 0.123E4, 0.11754944E~37): inf inf +(0.17014117E39, 0.123E4, 0.5877472E~38): inf inf +(0.17014117E39, 0.123E4, 0.1E~44): inf inf +(0.17014117E39, 0.123E4, 0.0): inf inf +(0.17014117E39, 0.123E4, ~0.34028235E39): inf inf +(0.17014117E39, 0.123E4, ~0.17014117E39): inf inf +(0.17014117E39, 0.123E4, ~0.123E4): inf inf +(0.17014117E39, 0.123E4, ~0.123E2): inf inf +(0.17014117E39, 0.123E4, ~0.31415927E1): inf inf +(0.17014117E39, 0.123E4, ~0.27182817E1): inf inf +(0.17014117E39, 0.123E4, ~0.123E1): inf inf +(0.17014117E39, 0.123E4, ~0.123): inf inf +(0.17014117E39, 0.123E4, ~0.123E~2): inf inf +(0.17014117E39, 0.123E4, ~0.11754944E~37): inf inf +(0.17014117E39, 0.123E4, ~0.5877472E~38): inf inf +(0.17014117E39, 0.123E4, ~0.1E~44): inf inf +(0.17014117E39, 0.123E4, ~0.0): inf inf +(0.17014117E39, 0.123E2, 0.34028235E39): inf inf +(0.17014117E39, 0.123E2, 0.17014117E39): inf inf +(0.17014117E39, 0.123E2, 0.123E4): inf inf +(0.17014117E39, 0.123E2, 0.123E2): inf inf +(0.17014117E39, 0.123E2, 0.31415927E1): inf inf +(0.17014117E39, 0.123E2, 0.27182817E1): inf inf +(0.17014117E39, 0.123E2, 0.123E1): inf inf +(0.17014117E39, 0.123E2, 0.123): inf inf +(0.17014117E39, 0.123E2, 0.123E~2): inf inf +(0.17014117E39, 0.123E2, 0.11754944E~37): inf inf +(0.17014117E39, 0.123E2, 0.5877472E~38): inf inf +(0.17014117E39, 0.123E2, 0.1E~44): inf inf +(0.17014117E39, 0.123E2, 0.0): inf inf +(0.17014117E39, 0.123E2, ~0.34028235E39): inf inf +(0.17014117E39, 0.123E2, ~0.17014117E39): inf inf +(0.17014117E39, 0.123E2, ~0.123E4): inf inf +(0.17014117E39, 0.123E2, ~0.123E2): inf inf +(0.17014117E39, 0.123E2, ~0.31415927E1): inf inf +(0.17014117E39, 0.123E2, ~0.27182817E1): inf inf +(0.17014117E39, 0.123E2, ~0.123E1): inf inf +(0.17014117E39, 0.123E2, ~0.123): inf inf +(0.17014117E39, 0.123E2, ~0.123E~2): inf inf +(0.17014117E39, 0.123E2, ~0.11754944E~37): inf inf +(0.17014117E39, 0.123E2, ~0.5877472E~38): inf inf +(0.17014117E39, 0.123E2, ~0.1E~44): inf inf +(0.17014117E39, 0.123E2, ~0.0): inf inf +(0.17014117E39, 0.31415927E1, 0.34028235E39): inf inf +(0.17014117E39, 0.31415927E1, 0.17014117E39): inf inf +(0.17014117E39, 0.31415927E1, 0.123E4): inf inf +(0.17014117E39, 0.31415927E1, 0.123E2): inf inf +(0.17014117E39, 0.31415927E1, 0.31415927E1): inf inf +(0.17014117E39, 0.31415927E1, 0.27182817E1): inf inf +(0.17014117E39, 0.31415927E1, 0.123E1): inf inf +(0.17014117E39, 0.31415927E1, 0.123): inf inf +(0.17014117E39, 0.31415927E1, 0.123E~2): inf inf +(0.17014117E39, 0.31415927E1, 0.11754944E~37): inf inf +(0.17014117E39, 0.31415927E1, 0.5877472E~38): inf inf +(0.17014117E39, 0.31415927E1, 0.1E~44): inf inf +(0.17014117E39, 0.31415927E1, 0.0): inf inf +(0.17014117E39, 0.31415927E1, ~0.34028235E39): 0.19423192E39 0.19423192E39 +(0.17014117E39, 0.31415927E1, ~0.17014117E39): inf inf +(0.17014117E39, 0.31415927E1, ~0.123E4): inf inf +(0.17014117E39, 0.31415927E1, ~0.123E2): inf inf +(0.17014117E39, 0.31415927E1, ~0.31415927E1): inf inf +(0.17014117E39, 0.31415927E1, ~0.27182817E1): inf inf +(0.17014117E39, 0.31415927E1, ~0.123E1): inf inf +(0.17014117E39, 0.31415927E1, ~0.123): inf inf +(0.17014117E39, 0.31415927E1, ~0.123E~2): inf inf +(0.17014117E39, 0.31415927E1, ~0.11754944E~37): inf inf +(0.17014117E39, 0.31415927E1, ~0.5877472E~38): inf inf +(0.17014117E39, 0.31415927E1, ~0.1E~44): inf inf +(0.17014117E39, 0.31415927E1, ~0.0): inf inf +(0.17014117E39, 0.27182817E1, 0.34028235E39): inf inf +(0.17014117E39, 0.27182817E1, 0.17014117E39): inf inf +(0.17014117E39, 0.27182817E1, 0.123E4): inf inf +(0.17014117E39, 0.27182817E1, 0.123E2): inf inf +(0.17014117E39, 0.27182817E1, 0.31415927E1): inf inf +(0.17014117E39, 0.27182817E1, 0.27182817E1): inf inf +(0.17014117E39, 0.27182817E1, 0.123E1): inf inf +(0.17014117E39, 0.27182817E1, 0.123): inf inf +(0.17014117E39, 0.27182817E1, 0.123E~2): inf inf +(0.17014117E39, 0.27182817E1, 0.11754944E~37): inf inf +(0.17014117E39, 0.27182817E1, 0.5877472E~38): inf inf +(0.17014117E39, 0.27182817E1, 0.1E~44): inf inf +(0.17014117E39, 0.27182817E1, 0.0): inf inf +(0.17014117E39, 0.27182817E1, ~0.34028235E39): 0.1222093E39 0.1222093E39 +(0.17014117E39, 0.27182817E1, ~0.17014117E39): 0.29235047E39 0.29235047E39 +(0.17014117E39, 0.27182817E1, ~0.123E4): inf inf +(0.17014117E39, 0.27182817E1, ~0.123E2): inf inf +(0.17014117E39, 0.27182817E1, ~0.31415927E1): inf inf +(0.17014117E39, 0.27182817E1, ~0.27182817E1): inf inf +(0.17014117E39, 0.27182817E1, ~0.123E1): inf inf +(0.17014117E39, 0.27182817E1, ~0.123): inf inf +(0.17014117E39, 0.27182817E1, ~0.123E~2): inf inf +(0.17014117E39, 0.27182817E1, ~0.11754944E~37): inf inf +(0.17014117E39, 0.27182817E1, ~0.5877472E~38): inf inf +(0.17014117E39, 0.27182817E1, ~0.1E~44): inf inf +(0.17014117E39, 0.27182817E1, ~0.0): inf inf +(0.17014117E39, 0.123E1, 0.34028235E39): inf inf +(0.17014117E39, 0.123E1, 0.17014117E39): inf inf +(0.17014117E39, 0.123E1, 0.123E4): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, 0.123E2): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, 0.31415927E1): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, 0.27182817E1): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, 0.123E1): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, 0.123): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, 0.123E~2): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, 0.11754944E~37): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, 0.5877472E~38): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, 0.1E~44): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, 0.0): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, ~0.34028235E39): ~0.1310087E39 ~0.1310087E39 +(0.17014117E39, 0.123E1, ~0.17014117E39): 0.39132473E38 0.39132473E38 +(0.17014117E39, 0.123E1, ~0.123E4): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, ~0.123E2): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, ~0.31415927E1): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, ~0.27182817E1): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, ~0.123E1): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, ~0.123): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, ~0.123E~2): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, ~0.11754944E~37): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, ~0.5877472E~38): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, ~0.1E~44): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123E1, ~0.0): 0.20927364E39 0.20927364E39 +(0.17014117E39, 0.123, 0.34028235E39): inf inf +(0.17014117E39, 0.123, 0.17014117E39): 0.19106853E39 0.19106853E39 +(0.17014117E39, 0.123, 0.123E4): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, 0.123E2): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, 0.31415927E1): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, 0.27182817E1): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, 0.123E1): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, 0.123): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, 0.123E~2): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, 0.11754944E~37): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, 0.5877472E~38): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, 0.1E~44): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, 0.0): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, ~0.34028235E39): ~0.31935498E39 ~0.31935498E39 +(0.17014117E39, 0.123, ~0.17014117E39): ~0.1492138E39 ~0.1492138E39 +(0.17014117E39, 0.123, ~0.123E4): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, ~0.123E2): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, ~0.31415927E1): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, ~0.27182817E1): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, ~0.123E1): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, ~0.123): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, ~0.123E~2): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, ~0.11754944E~37): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, ~0.5877472E~38): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, ~0.1E~44): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123, ~0.0): 0.20927365E38 0.20927365E38 +(0.17014117E39, 0.123E~2, 0.34028235E39): inf inf +(0.17014117E39, 0.123E~2, 0.17014117E39): 0.17035044E39 0.17035044E39 +(0.17014117E39, 0.123E~2, 0.123E4): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, 0.123E2): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, 0.31415927E1): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, 0.27182817E1): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, 0.123E1): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, 0.123): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, 0.123E~2): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, 0.11754944E~37): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, 0.5877472E~38): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, 0.1E~44): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, 0.0): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, ~0.34028235E39): ~0.34007307E39 ~0.34007307E39 +(0.17014117E39, 0.123E~2, ~0.17014117E39): ~0.1699319E39 ~0.1699319E39 +(0.17014117E39, 0.123E~2, ~0.123E4): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, ~0.123E2): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, ~0.31415927E1): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, ~0.27182817E1): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, ~0.123E1): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, ~0.123): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, ~0.123E~2): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, ~0.11754944E~37): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, ~0.5877472E~38): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, ~0.1E~44): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.123E~2, ~0.0): 0.20927364E36 0.20927364E36 +(0.17014117E39, 0.11754944E~37, 0.123E4): 0.1232E4 0.1232E4 +(0.17014117E39, 0.11754944E~37, 0.123E2): 0.143E2 0.143E2 +(0.17014117E39, 0.11754944E~37, 0.31415927E1): 0.51415925E1 0.51415925E1 +(0.17014117E39, 0.11754944E~37, 0.27182817E1): 0.47182817E1 0.47182817E1 +(0.17014117E39, 0.11754944E~37, 0.123E1): 0.323E1 0.323E1 +(0.17014117E39, 0.11754944E~37, 0.123): 0.2123E1 0.2123E1 +(0.17014117E39, 0.11754944E~37, 0.123E~2): 0.20012298E1 0.20012298E1 +(0.17014117E39, 0.11754944E~37, ~0.123E4): ~0.1228E4 ~0.1228E4 +(0.17014117E39, 0.11754944E~37, ~0.123E2): ~0.103E2 ~0.103E2 +(0.17014117E39, 0.11754944E~37, ~0.123): 0.18769999E1 0.18769999E1 +(0.17014117E39, 0.11754944E~37, ~0.123E~2): 0.19987699E1 0.19987699E1 +(0.17014117E39, 0.5877472E~38, 0.123E4): 0.1231E4 0.1231E4 +(0.17014117E39, 0.5877472E~38, 0.123E2): 0.133E2 0.133E2 +(0.17014117E39, 0.5877472E~38, 0.31415927E1): 0.41415925E1 0.41415925E1 +(0.17014117E39, 0.5877472E~38, 0.27182817E1): 0.37182817E1 0.37182817E1 +(0.17014117E39, 0.5877472E~38, 0.123E1): 0.223E1 0.223E1 +(0.17014117E39, 0.5877472E~38, 0.123): 0.11229999E1 0.11229999E1 +(0.17014117E39, 0.5877472E~38, 0.123E~2): 0.10012299E1 0.10012299E1 +(0.17014117E39, 0.5877472E~38, ~0.123E4): ~0.1229E4 ~0.1229E4 +(0.17014117E39, 0.5877472E~38, ~0.123E2): ~0.113E2 ~0.113E2 +(0.17014117E39, 0.5877472E~38, ~0.31415927E1): ~0.21415927E1 ~0.21415927E1 +(0.17014117E39, 0.5877472E~38, ~0.27182817E1): ~0.17182817E1 ~0.17182817E1 +(0.17014117E39, 0.5877472E~38, ~0.123): 0.8769999 0.8769999 +(0.17014117E39, 0.5877472E~38, ~0.123E~2): 0.99876994 0.99876994 +(0.17014117E39, 0.1E~44, 0.123E4): 0.123E4 0.123E4 +(0.17014117E39, 0.1E~44, 0.123E2): 0.123E2 0.123E2 +(0.17014117E39, 0.1E~44, 0.31415927E1): 0.3141593E1 0.3141593E1 +(0.17014117E39, 0.1E~44, 0.27182817E1): 0.2718282E1 0.2718282E1 +(0.17014117E39, 0.1E~44, 0.123E1): 0.12300003E1 0.12300003E1 +(0.17014117E39, 0.1E~44, 0.123): 0.12300024 0.12300024 +(0.17014117E39, 0.1E~44, 0.123E~2): 0.12302385E~2 0.12302385E~2 +(0.17014117E39, 0.1E~44, ~0.123E4): ~0.123E4 ~0.123E4 +(0.17014117E39, 0.1E~44, ~0.123E2): ~0.123E2 ~0.123E2 +(0.17014117E39, 0.1E~44, ~0.31415927E1): ~0.31415925E1 ~0.31415925E1 +(0.17014117E39, 0.1E~44, ~0.27182817E1): ~0.27182815E1 ~0.27182815E1 +(0.17014117E39, 0.1E~44, ~0.123E1): ~0.12299998E1 ~0.12299998E1 +(0.17014117E39, 0.1E~44, ~0.123): ~0.122999765 ~0.122999765 +(0.17014117E39, 0.1E~44, ~0.123E~2): ~0.12297616E~2 ~0.12297616E~2 +(0.17014117E39, ~0.34028235E39, 0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.123E4): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.123E2): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.123E1): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.123): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.123E~2): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.1E~44): ~inf ~inf +(0.17014117E39, ~0.34028235E39, 0.0): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.123E4): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.123E2): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.123E1): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.123): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.123E~2): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.1E~44): ~inf ~inf +(0.17014117E39, ~0.34028235E39, ~0.0): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.123E4): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.123E2): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.123E1): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.123): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.123E~2): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.1E~44): ~inf ~inf +(0.17014117E39, ~0.17014117E39, 0.0): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.123E4): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.123E2): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.123E1): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.123): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.123E~2): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.1E~44): ~inf ~inf +(0.17014117E39, ~0.17014117E39, ~0.0): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.123E4): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.123E2): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.123E1): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.123): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.123E~2): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.1E~44): ~inf ~inf +(0.17014117E39, ~0.123E4, 0.0): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.123E4): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.123E2): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.123E1): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.123): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.123E~2): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.1E~44): ~inf ~inf +(0.17014117E39, ~0.123E4, ~0.0): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.123E4): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.123E2): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.123E1): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.123): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.123E~2): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.1E~44): ~inf ~inf +(0.17014117E39, ~0.123E2, 0.0): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.123E4): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.123E2): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.123E1): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.123): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.123E~2): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.1E~44): ~inf ~inf +(0.17014117E39, ~0.123E2, ~0.0): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.34028235E39): ~0.19423192E39 ~0.19423192E39 +(0.17014117E39, ~0.31415927E1, 0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.123E4): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.123E2): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.123E1): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.123): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.123E~2): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.1E~44): ~inf ~inf +(0.17014117E39, ~0.31415927E1, 0.0): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.123E4): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.123E2): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.123E1): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.123): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.123E~2): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.1E~44): ~inf ~inf +(0.17014117E39, ~0.31415927E1, ~0.0): ~inf ~inf +(0.17014117E39, ~0.27182817E1, 0.34028235E39): ~0.1222093E39 ~0.1222093E39 +(0.17014117E39, ~0.27182817E1, 0.17014117E39): ~0.29235047E39 ~0.29235047E39 +(0.17014117E39, ~0.27182817E1, 0.123E4): ~inf ~inf +(0.17014117E39, ~0.27182817E1, 0.123E2): ~inf ~inf +(0.17014117E39, ~0.27182817E1, 0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.27182817E1, 0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.27182817E1, 0.123E1): ~inf ~inf +(0.17014117E39, ~0.27182817E1, 0.123): ~inf ~inf +(0.17014117E39, ~0.27182817E1, 0.123E~2): ~inf ~inf +(0.17014117E39, ~0.27182817E1, 0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.27182817E1, 0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.27182817E1, 0.1E~44): ~inf ~inf +(0.17014117E39, ~0.27182817E1, 0.0): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.123E4): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.123E2): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.31415927E1): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.27182817E1): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.123E1): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.123): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.123E~2): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.11754944E~37): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.5877472E~38): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.1E~44): ~inf ~inf +(0.17014117E39, ~0.27182817E1, ~0.0): ~inf ~inf +(0.17014117E39, ~0.123E1, 0.34028235E39): 0.1310087E39 0.1310087E39 +(0.17014117E39, ~0.123E1, 0.17014117E39): ~0.39132473E38 ~0.39132473E38 +(0.17014117E39, ~0.123E1, 0.123E4): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, 0.123E2): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, 0.31415927E1): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, 0.27182817E1): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, 0.123E1): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, 0.123): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, 0.123E~2): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, 0.11754944E~37): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, 0.5877472E~38): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, 0.1E~44): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, 0.0): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, ~0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.123E1, ~0.17014117E39): ~inf ~inf +(0.17014117E39, ~0.123E1, ~0.123E4): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, ~0.123E2): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, ~0.31415927E1): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, ~0.27182817E1): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, ~0.123E1): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, ~0.123): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, ~0.123E~2): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, ~0.11754944E~37): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, ~0.5877472E~38): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, ~0.1E~44): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123E1, ~0.0): ~0.20927364E39 ~0.20927364E39 +(0.17014117E39, ~0.123, 0.34028235E39): 0.31935498E39 0.31935498E39 +(0.17014117E39, ~0.123, 0.17014117E39): 0.1492138E39 0.1492138E39 +(0.17014117E39, ~0.123, 0.123E4): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, 0.123E2): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, 0.31415927E1): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, 0.27182817E1): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, 0.123E1): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, 0.123): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, 0.123E~2): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, 0.11754944E~37): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, 0.5877472E~38): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, 0.1E~44): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, 0.0): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, ~0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.123, ~0.17014117E39): ~0.19106853E39 ~0.19106853E39 +(0.17014117E39, ~0.123, ~0.123E4): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, ~0.123E2): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, ~0.31415927E1): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, ~0.27182817E1): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, ~0.123E1): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, ~0.123): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, ~0.123E~2): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, ~0.11754944E~37): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, ~0.5877472E~38): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, ~0.1E~44): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123, ~0.0): ~0.20927365E38 ~0.20927365E38 +(0.17014117E39, ~0.123E~2, 0.34028235E39): 0.34007307E39 0.34007307E39 +(0.17014117E39, ~0.123E~2, 0.17014117E39): 0.1699319E39 0.1699319E39 +(0.17014117E39, ~0.123E~2, 0.123E4): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, 0.123E2): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, 0.31415927E1): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, 0.27182817E1): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, 0.123E1): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, 0.123): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, 0.123E~2): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, 0.11754944E~37): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, 0.5877472E~38): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, 0.1E~44): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, 0.0): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, ~0.34028235E39): ~inf ~inf +(0.17014117E39, ~0.123E~2, ~0.17014117E39): ~0.17035044E39 ~0.17035044E39 +(0.17014117E39, ~0.123E~2, ~0.123E4): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, ~0.123E2): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, ~0.31415927E1): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, ~0.27182817E1): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, ~0.123E1): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, ~0.123): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, ~0.123E~2): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, ~0.11754944E~37): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, ~0.5877472E~38): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, ~0.1E~44): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.123E~2, ~0.0): ~0.20927364E36 ~0.20927364E36 +(0.17014117E39, ~0.11754944E~37, 0.123E4): 0.1228E4 0.1228E4 +(0.17014117E39, ~0.11754944E~37, 0.123E2): 0.103E2 0.103E2 +(0.17014117E39, ~0.11754944E~37, 0.123): ~0.18769999E1 ~0.18769999E1 +(0.17014117E39, ~0.11754944E~37, 0.123E~2): ~0.19987699E1 ~0.19987699E1 +(0.17014117E39, ~0.11754944E~37, ~0.123E4): ~0.1232E4 ~0.1232E4 +(0.17014117E39, ~0.11754944E~37, ~0.123E2): ~0.143E2 ~0.143E2 +(0.17014117E39, ~0.11754944E~37, ~0.31415927E1): ~0.51415925E1 ~0.51415925E1 +(0.17014117E39, ~0.11754944E~37, ~0.27182817E1): ~0.47182817E1 ~0.47182817E1 +(0.17014117E39, ~0.11754944E~37, ~0.123E1): ~0.323E1 ~0.323E1 +(0.17014117E39, ~0.11754944E~37, ~0.123): ~0.2123E1 ~0.2123E1 +(0.17014117E39, ~0.11754944E~37, ~0.123E~2): ~0.20012298E1 ~0.20012298E1 +(0.17014117E39, ~0.5877472E~38, 0.123E4): 0.1229E4 0.1229E4 +(0.17014117E39, ~0.5877472E~38, 0.123E2): 0.113E2 0.113E2 +(0.17014117E39, ~0.5877472E~38, 0.31415927E1): 0.21415927E1 0.21415927E1 +(0.17014117E39, ~0.5877472E~38, 0.27182817E1): 0.17182817E1 0.17182817E1 +(0.17014117E39, ~0.5877472E~38, 0.123): ~0.8769999 ~0.8769999 +(0.17014117E39, ~0.5877472E~38, 0.123E~2): ~0.99876994 ~0.99876994 +(0.17014117E39, ~0.5877472E~38, ~0.123E4): ~0.1231E4 ~0.1231E4 +(0.17014117E39, ~0.5877472E~38, ~0.123E2): ~0.133E2 ~0.133E2 +(0.17014117E39, ~0.5877472E~38, ~0.31415927E1): ~0.41415925E1 ~0.41415925E1 +(0.17014117E39, ~0.5877472E~38, ~0.27182817E1): ~0.37182817E1 ~0.37182817E1 +(0.17014117E39, ~0.5877472E~38, ~0.123E1): ~0.223E1 ~0.223E1 +(0.17014117E39, ~0.5877472E~38, ~0.123): ~0.11229999E1 ~0.11229999E1 +(0.17014117E39, ~0.5877472E~38, ~0.123E~2): ~0.10012299E1 ~0.10012299E1 +(0.17014117E39, ~0.1E~44, 0.123E4): 0.123E4 0.123E4 +(0.17014117E39, ~0.1E~44, 0.123E2): 0.123E2 0.123E2 +(0.17014117E39, ~0.1E~44, 0.31415927E1): 0.31415925E1 0.31415925E1 +(0.17014117E39, ~0.1E~44, 0.27182817E1): 0.27182815E1 0.27182815E1 +(0.17014117E39, ~0.1E~44, 0.123E1): 0.12299998E1 0.12299998E1 +(0.17014117E39, ~0.1E~44, 0.123): 0.122999765 0.122999765 +(0.17014117E39, ~0.1E~44, 0.123E~2): 0.12297616E~2 0.12297616E~2 +(0.17014117E39, ~0.1E~44, ~0.123E4): ~0.123E4 ~0.123E4 +(0.17014117E39, ~0.1E~44, ~0.123E2): ~0.123E2 ~0.123E2 +(0.17014117E39, ~0.1E~44, ~0.31415927E1): ~0.3141593E1 ~0.3141593E1 +(0.17014117E39, ~0.1E~44, ~0.27182817E1): ~0.2718282E1 ~0.2718282E1 +(0.17014117E39, ~0.1E~44, ~0.123E1): ~0.12300003E1 ~0.12300003E1 +(0.17014117E39, ~0.1E~44, ~0.123): ~0.12300024 ~0.12300024 +(0.17014117E39, ~0.1E~44, ~0.123E~2): ~0.12302385E~2 ~0.12302385E~2 +(0.123E4, 0.34028235E39, 0.34028235E39): inf inf +(0.123E4, 0.34028235E39, 0.17014117E39): inf inf +(0.123E4, 0.34028235E39, 0.123E4): inf inf +(0.123E4, 0.34028235E39, 0.123E2): inf inf +(0.123E4, 0.34028235E39, 0.31415927E1): inf inf +(0.123E4, 0.34028235E39, 0.27182817E1): inf inf +(0.123E4, 0.34028235E39, 0.123E1): inf inf +(0.123E4, 0.34028235E39, 0.123): inf inf +(0.123E4, 0.34028235E39, 0.123E~2): inf inf +(0.123E4, 0.34028235E39, 0.11754944E~37): inf inf +(0.123E4, 0.34028235E39, 0.5877472E~38): inf inf +(0.123E4, 0.34028235E39, 0.1E~44): inf inf +(0.123E4, 0.34028235E39, 0.0): inf inf +(0.123E4, 0.34028235E39, ~0.34028235E39): inf inf +(0.123E4, 0.34028235E39, ~0.17014117E39): inf inf +(0.123E4, 0.34028235E39, ~0.123E4): inf inf +(0.123E4, 0.34028235E39, ~0.123E2): inf inf +(0.123E4, 0.34028235E39, ~0.31415927E1): inf inf +(0.123E4, 0.34028235E39, ~0.27182817E1): inf inf +(0.123E4, 0.34028235E39, ~0.123E1): inf inf +(0.123E4, 0.34028235E39, ~0.123): inf inf +(0.123E4, 0.34028235E39, ~0.123E~2): inf inf +(0.123E4, 0.34028235E39, ~0.11754944E~37): inf inf +(0.123E4, 0.34028235E39, ~0.5877472E~38): inf inf +(0.123E4, 0.34028235E39, ~0.1E~44): inf inf +(0.123E4, 0.34028235E39, ~0.0): inf inf +(0.123E4, 0.17014117E39, 0.34028235E39): inf inf +(0.123E4, 0.17014117E39, 0.17014117E39): inf inf +(0.123E4, 0.17014117E39, 0.123E4): inf inf +(0.123E4, 0.17014117E39, 0.123E2): inf inf +(0.123E4, 0.17014117E39, 0.31415927E1): inf inf +(0.123E4, 0.17014117E39, 0.27182817E1): inf inf +(0.123E4, 0.17014117E39, 0.123E1): inf inf +(0.123E4, 0.17014117E39, 0.123): inf inf +(0.123E4, 0.17014117E39, 0.123E~2): inf inf +(0.123E4, 0.17014117E39, 0.11754944E~37): inf inf +(0.123E4, 0.17014117E39, 0.5877472E~38): inf inf +(0.123E4, 0.17014117E39, 0.1E~44): inf inf +(0.123E4, 0.17014117E39, 0.0): inf inf +(0.123E4, 0.17014117E39, ~0.34028235E39): inf inf +(0.123E4, 0.17014117E39, ~0.17014117E39): inf inf +(0.123E4, 0.17014117E39, ~0.123E4): inf inf +(0.123E4, 0.17014117E39, ~0.123E2): inf inf +(0.123E4, 0.17014117E39, ~0.31415927E1): inf inf +(0.123E4, 0.17014117E39, ~0.27182817E1): inf inf +(0.123E4, 0.17014117E39, ~0.123E1): inf inf +(0.123E4, 0.17014117E39, ~0.123): inf inf +(0.123E4, 0.17014117E39, ~0.123E~2): inf inf +(0.123E4, 0.17014117E39, ~0.11754944E~37): inf inf +(0.123E4, 0.17014117E39, ~0.5877472E~38): inf inf +(0.123E4, 0.17014117E39, ~0.1E~44): inf inf +(0.123E4, 0.17014117E39, ~0.0): inf inf +(0.123E4, 0.123E4, 0.123E2): 0.15129122E7 0.15129122E7 +(0.123E4, 0.123E4, 0.31415927E1): 0.15129031E7 0.15129031E7 +(0.123E4, 0.123E4, 0.27182817E1): 0.15129028E7 0.15129028E7 +(0.123E4, 0.123E4, 0.123E1): 0.15129012E7 0.15129012E7 +(0.123E4, 0.123E4, 0.123): 0.15129001E7 0.15129001E7 +(0.123E4, 0.123E4, 0.123E~2): 0.15129E7 0.15129E7 +(0.123E4, 0.123E4, ~0.123E2): 0.15128878E7 0.15128878E7 +(0.123E4, 0.123E4, ~0.31415927E1): 0.15128969E7 0.15128969E7 +(0.123E4, 0.123E4, ~0.27182817E1): 0.15128972E7 0.15128972E7 +(0.123E4, 0.123E4, ~0.123E1): 0.15128988E7 0.15128988E7 +(0.123E4, 0.123E4, ~0.123): 0.15128999E7 0.15128999E7 +(0.123E4, 0.123E4, ~0.123E~2): 0.15129E7 0.15129E7 +(0.123E4, 0.123E2, 0.123E4): 0.16359E5 0.16359E5 +(0.123E4, 0.123E2, 0.123E2): 0.151413E5 0.151413E5 +(0.123E4, 0.123E2, 0.31415927E1): 0.15132142E5 0.15132142E5 +(0.123E4, 0.123E2, 0.27182817E1): 0.15131719E5 0.15131719E5 +(0.123E4, 0.123E2, 0.123E1): 0.1513023E5 0.1513023E5 +(0.123E4, 0.123E2, 0.123): 0.15129123E5 0.15129123E5 +(0.123E4, 0.123E2, 0.123E~2): 0.15129001E5 0.15129001E5 +(0.123E4, 0.123E2, 0.11754944E~37): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, 0.5877472E~38): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, 0.1E~44): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, 0.0): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, ~0.123E4): 0.13899E5 0.13899E5 +(0.123E4, 0.123E2, ~0.123E2): 0.151167E5 0.151167E5 +(0.123E4, 0.123E2, ~0.31415927E1): 0.15125858E5 0.15125858E5 +(0.123E4, 0.123E2, ~0.27182817E1): 0.15126282E5 0.15126282E5 +(0.123E4, 0.123E2, ~0.123E1): 0.151277705E5 0.151277705E5 +(0.123E4, 0.123E2, ~0.123): 0.15128877E5 0.15128877E5 +(0.123E4, 0.123E2, ~0.123E~2): 0.15128999E5 0.15128999E5 +(0.123E4, 0.123E2, ~0.11754944E~37): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, ~0.5877472E~38): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, ~0.1E~44): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, ~0.0): 0.15129E5 0.15129E5 +(0.123E4, 0.31415927E1, 0.123E4): 0.5094159E4 0.5094159E4 +(0.123E4, 0.31415927E1, 0.123E2): 0.3876459E4 0.3876459E4 +(0.123E4, 0.31415927E1, 0.31415927E1): 0.38673008E4 0.38673008E4 +(0.123E4, 0.31415927E1, 0.27182817E1): 0.38668774E4 0.38668774E4 +(0.123E4, 0.31415927E1, 0.123E1): 0.38653892E4 0.38653892E4 +(0.123E4, 0.31415927E1, 0.123): 0.3864282E4 0.3864282E4 +(0.123E4, 0.31415927E1, 0.123E~2): 0.38641604E4 0.38641604E4 +(0.123E4, 0.31415927E1, 0.11754944E~37): 0.38641592E4 0.38641592E4 +(0.123E4, 0.31415927E1, 0.5877472E~38): 0.38641592E4 0.38641592E4 +(0.123E4, 0.31415927E1, 0.1E~44): 0.38641592E4 0.38641592E4 +(0.123E4, 0.31415927E1, 0.0): 0.38641592E4 0.38641592E4 +(0.123E4, 0.31415927E1, ~0.123E4): 0.26341592E4 0.26341592E4 +(0.123E4, 0.31415927E1, ~0.123E2): 0.38518591E4 0.38518591E4 +(0.123E4, 0.31415927E1, ~0.31415927E1): 0.38610176E4 0.38610176E4 +(0.123E4, 0.31415927E1, ~0.27182817E1): 0.38614407E4 0.38614407E4 +(0.123E4, 0.31415927E1, ~0.123E1): 0.3862929E4 0.3862929E4 +(0.123E4, 0.31415927E1, ~0.123): 0.38640361E4 0.38640361E4 +(0.123E4, 0.31415927E1, ~0.123E~2): 0.3864158E4 0.3864158E4 +(0.123E4, 0.31415927E1, ~0.11754944E~37): 0.38641592E4 0.38641592E4 +(0.123E4, 0.31415927E1, ~0.5877472E~38): 0.38641592E4 0.38641592E4 +(0.123E4, 0.31415927E1, ~0.1E~44): 0.38641592E4 0.38641592E4 +(0.123E4, 0.31415927E1, ~0.0): 0.38641592E4 0.38641592E4 +(0.123E4, 0.27182817E1, 0.123E4): 0.45734863E4 0.45734863E4 +(0.123E4, 0.27182817E1, 0.123E2): 0.33557866E4 0.33557866E4 +(0.123E4, 0.27182817E1, 0.31415927E1): 0.33466282E4 0.33466282E4 +(0.123E4, 0.27182817E1, 0.27182817E1): 0.33462048E4 0.33462048E4 +(0.123E4, 0.27182817E1, 0.123E1): 0.33447166E4 0.33447166E4 +(0.123E4, 0.27182817E1, 0.123): 0.33436096E4 0.33436096E4 +(0.123E4, 0.27182817E1, 0.123E~2): 0.33434878E4 0.33434878E4 +(0.123E4, 0.27182817E1, 0.11754944E~37): 0.33434866E4 0.33434866E4 +(0.123E4, 0.27182817E1, 0.5877472E~38): 0.33434866E4 0.33434866E4 +(0.123E4, 0.27182817E1, 0.1E~44): 0.33434866E4 0.33434866E4 +(0.123E4, 0.27182817E1, 0.0): 0.33434866E4 0.33434866E4 +(0.123E4, 0.27182817E1, ~0.123E4): 0.21134866E4 0.21134866E4 +(0.123E4, 0.27182817E1, ~0.123E2): 0.33311865E4 0.33311865E4 +(0.123E4, 0.27182817E1, ~0.31415927E1): 0.3340345E4 0.3340345E4 +(0.123E4, 0.27182817E1, ~0.27182817E1): 0.33407683E4 0.33407683E4 +(0.123E4, 0.27182817E1, ~0.123E1): 0.33422566E4 0.33422566E4 +(0.123E4, 0.27182817E1, ~0.123): 0.33433635E4 0.33433635E4 +(0.123E4, 0.27182817E1, ~0.123E~2): 0.33434854E4 0.33434854E4 +(0.123E4, 0.27182817E1, ~0.11754944E~37): 0.33434866E4 0.33434866E4 +(0.123E4, 0.27182817E1, ~0.5877472E~38): 0.33434866E4 0.33434866E4 +(0.123E4, 0.27182817E1, ~0.1E~44): 0.33434866E4 0.33434866E4 +(0.123E4, 0.27182817E1, ~0.0): 0.33434866E4 0.33434866E4 +(0.123E4, 0.123E1, 0.123E4): 0.27429E4 0.27429E4 +(0.123E4, 0.123E1, 0.123E2): 0.15252001E4 0.15252001E4 +(0.123E4, 0.123E1, 0.31415927E1): 0.15160416E4 0.15160416E4 +(0.123E4, 0.123E1, 0.27182817E1): 0.15156183E4 0.15156183E4 +(0.123E4, 0.123E1, 0.123E1): 0.151413E4 0.151413E4 +(0.123E4, 0.123E1, 0.123): 0.15130231E4 0.15130231E4 +(0.123E4, 0.123E1, 0.123E~2): 0.15129012E4 0.15129012E4 +(0.123E4, 0.123E1, 0.11754944E~37): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, 0.5877472E~38): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, 0.1E~44): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, 0.0): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, ~0.123E4): 0.28290002E3 0.28290002E3 +(0.123E4, 0.123E1, ~0.123E2): 0.15006E4 0.15006E4 +(0.123E4, 0.123E1, ~0.31415927E1): 0.15097584E4 0.15097584E4 +(0.123E4, 0.123E1, ~0.27182817E1): 0.15101818E4 0.15101818E4 +(0.123E4, 0.123E1, ~0.123E1): 0.151167E4 0.151167E4 +(0.123E4, 0.123E1, ~0.123): 0.1512777E4 0.1512777E4 +(0.123E4, 0.123E1, ~0.123E~2): 0.15128988E4 0.15128988E4 +(0.123E4, 0.123E1, ~0.11754944E~37): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, ~0.5877472E~38): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, ~0.1E~44): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, ~0.0): 0.15129E4 0.15129E4 +(0.123E4, 0.123, 0.123E4): 0.138129E4 0.138129E4 +(0.123E4, 0.123, 0.123E2): 0.16359001E3 0.16359001E3 +(0.123E4, 0.123, 0.31415927E1): 0.1544316E3 0.1544316E3 +(0.123E4, 0.123, 0.27182817E1): 0.15400829E3 0.15400829E3 +(0.123E4, 0.123, 0.123E1): 0.15252E3 0.15252E3 +(0.123E4, 0.123, 0.123): 0.15141301E3 0.15141301E3 +(0.123E4, 0.123, 0.123E~2): 0.15129123E3 0.15129123E3 +(0.123E4, 0.123, 0.11754944E~37): 0.15129001E3 0.15129001E3 +(0.123E4, 0.123, 0.5877472E~38): 0.15129001E3 0.15129001E3 +(0.123E4, 0.123, 0.1E~44): 0.15129001E3 0.15129001E3 +(0.123E4, 0.123, 0.0): 0.15129001E3 0.15129001E3 +(0.123E4, 0.123, ~0.123E4): ~0.107871E4 ~0.107871E4 +(0.123E4, 0.123, ~0.123E2): 0.13899E3 0.13899E3 +(0.123E4, 0.123, ~0.31415927E1): 0.1481484E3 0.1481484E3 +(0.123E4, 0.123, ~0.27182817E1): 0.14857172E3 0.14857172E3 +(0.123E4, 0.123, ~0.123E1): 0.15006E3 0.15006E3 +(0.123E4, 0.123, ~0.123): 0.151167E3 0.151167E3 +(0.123E4, 0.123, ~0.123E~2): 0.15128877E3 0.15128877E3 +(0.123E4, 0.123, ~0.11754944E~37): 0.15129001E3 0.15129001E3 +(0.123E4, 0.123, ~0.5877472E~38): 0.15129001E3 0.15129001E3 +(0.123E4, 0.123, ~0.1E~44): 0.15129001E3 0.15129001E3 +(0.123E4, 0.123, ~0.0): 0.15129001E3 0.15129001E3 +(0.123E4, 0.123E~2, 0.123E4): 0.1231513E4 0.1231513E4 +(0.123E4, 0.123E~2, 0.123E2): 0.13812901E2 0.13812901E2 +(0.123E4, 0.123E~2, 0.31415927E1): 0.4654493E1 0.4654493E1 +(0.123E4, 0.123E~2, 0.27182817E1): 0.42311816E1 0.42311816E1 +(0.123E4, 0.123E~2, 0.123E1): 0.27429001E1 0.27429001E1 +(0.123E4, 0.123E~2, 0.123): 0.16359E1 0.16359E1 +(0.123E4, 0.123E~2, 0.123E~2): 0.15141301E1 0.15141301E1 +(0.123E4, 0.123E~2, 0.11754944E~37): 0.15129001E1 0.15129001E1 +(0.123E4, 0.123E~2, 0.5877472E~38): 0.15129001E1 0.15129001E1 +(0.123E4, 0.123E~2, 0.1E~44): 0.15129001E1 0.15129001E1 +(0.123E4, 0.123E~2, 0.0): 0.15129001E1 0.15129001E1 +(0.123E4, 0.123E~2, ~0.123E4): ~0.1228487E4 ~0.1228487E4 +(0.123E4, 0.123E~2, ~0.123E2): ~0.107871E2 ~0.107871E2 +(0.123E4, 0.123E~2, ~0.31415927E1): ~0.16286926E1 ~0.16286926E1 +(0.123E4, 0.123E~2, ~0.27182817E1): ~0.12053816E1 ~0.12053816E1 +(0.123E4, 0.123E~2, ~0.123E1): 0.28290004 0.28290004 +(0.123E4, 0.123E~2, ~0.123): 0.13899001E1 0.13899001E1 +(0.123E4, 0.123E~2, ~0.123E~2): 0.15116701E1 0.15116701E1 +(0.123E4, 0.123E~2, ~0.11754944E~37): 0.15129001E1 0.15129001E1 +(0.123E4, 0.123E~2, ~0.5877472E~38): 0.15129001E1 0.15129001E1 +(0.123E4, 0.123E~2, ~0.1E~44): 0.15129001E1 0.15129001E1 +(0.123E4, 0.123E~2, ~0.0): 0.15129001E1 0.15129001E1 +(0.123E4, 0.11754944E~37, 0.1E~44): 0.1445858E~34 0.1445858E~34 +(0.123E4, 0.11754944E~37, ~0.1E~44): 0.1445858E~34 0.1445858E~34 +(0.123E4, 0.5877472E~38, 0.1E~44): 0.722929E~35 0.722929E~35 +(0.123E4, 0.5877472E~38, ~0.1E~44): 0.722929E~35 0.722929E~35 +(0.123E4, ~0.34028235E39, 0.34028235E39): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.17014117E39): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.123E4): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.123E2): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.31415927E1): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.27182817E1): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.123E1): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.123): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.123E~2): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.11754944E~37): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.5877472E~38): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.1E~44): ~inf ~inf +(0.123E4, ~0.34028235E39, 0.0): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.34028235E39): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.17014117E39): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.123E4): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.123E2): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.31415927E1): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.27182817E1): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.123E1): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.123): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.123E~2): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.11754944E~37): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.5877472E~38): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.1E~44): ~inf ~inf +(0.123E4, ~0.34028235E39, ~0.0): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.34028235E39): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.17014117E39): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.123E4): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.123E2): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.31415927E1): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.27182817E1): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.123E1): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.123): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.123E~2): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.11754944E~37): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.5877472E~38): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.1E~44): ~inf ~inf +(0.123E4, ~0.17014117E39, 0.0): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.34028235E39): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.17014117E39): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.123E4): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.123E2): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.31415927E1): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.27182817E1): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.123E1): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.123): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.123E~2): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.11754944E~37): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.5877472E~38): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.1E~44): ~inf ~inf +(0.123E4, ~0.17014117E39, ~0.0): ~inf ~inf +(0.123E4, ~0.123E4, 0.123E2): ~0.15128878E7 ~0.15128878E7 +(0.123E4, ~0.123E4, 0.31415927E1): ~0.15128969E7 ~0.15128969E7 +(0.123E4, ~0.123E4, 0.27182817E1): ~0.15128972E7 ~0.15128972E7 +(0.123E4, ~0.123E4, 0.123E1): ~0.15128988E7 ~0.15128988E7 +(0.123E4, ~0.123E4, 0.123): ~0.15128999E7 ~0.15128999E7 +(0.123E4, ~0.123E4, 0.123E~2): ~0.15129E7 ~0.15129E7 +(0.123E4, ~0.123E4, ~0.123E2): ~0.15129122E7 ~0.15129122E7 +(0.123E4, ~0.123E4, ~0.31415927E1): ~0.15129031E7 ~0.15129031E7 +(0.123E4, ~0.123E4, ~0.27182817E1): ~0.15129028E7 ~0.15129028E7 +(0.123E4, ~0.123E4, ~0.123E1): ~0.15129012E7 ~0.15129012E7 +(0.123E4, ~0.123E4, ~0.123): ~0.15129001E7 ~0.15129001E7 +(0.123E4, ~0.123E4, ~0.123E~2): ~0.15129E7 ~0.15129E7 +(0.123E4, ~0.123E2, 0.123E4): ~0.13899E5 ~0.13899E5 +(0.123E4, ~0.123E2, 0.123E2): ~0.151167E5 ~0.151167E5 +(0.123E4, ~0.123E2, 0.31415927E1): ~0.15125858E5 ~0.15125858E5 +(0.123E4, ~0.123E2, 0.27182817E1): ~0.15126282E5 ~0.15126282E5 +(0.123E4, ~0.123E2, 0.123E1): ~0.151277705E5 ~0.151277705E5 +(0.123E4, ~0.123E2, 0.123): ~0.15128877E5 ~0.15128877E5 +(0.123E4, ~0.123E2, 0.123E~2): ~0.15128999E5 ~0.15128999E5 +(0.123E4, ~0.123E2, 0.11754944E~37): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, 0.5877472E~38): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, 0.1E~44): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, 0.0): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, ~0.123E4): ~0.16359E5 ~0.16359E5 +(0.123E4, ~0.123E2, ~0.123E2): ~0.151413E5 ~0.151413E5 +(0.123E4, ~0.123E2, ~0.31415927E1): ~0.15132142E5 ~0.15132142E5 +(0.123E4, ~0.123E2, ~0.27182817E1): ~0.15131719E5 ~0.15131719E5 +(0.123E4, ~0.123E2, ~0.123E1): ~0.1513023E5 ~0.1513023E5 +(0.123E4, ~0.123E2, ~0.123): ~0.15129123E5 ~0.15129123E5 +(0.123E4, ~0.123E2, ~0.123E~2): ~0.15129001E5 ~0.15129001E5 +(0.123E4, ~0.123E2, ~0.11754944E~37): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, ~0.5877472E~38): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, ~0.1E~44): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, ~0.0): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.31415927E1, 0.123E4): ~0.26341592E4 ~0.26341592E4 +(0.123E4, ~0.31415927E1, 0.123E2): ~0.38518591E4 ~0.38518591E4 +(0.123E4, ~0.31415927E1, 0.31415927E1): ~0.38610176E4 ~0.38610176E4 +(0.123E4, ~0.31415927E1, 0.27182817E1): ~0.38614407E4 ~0.38614407E4 +(0.123E4, ~0.31415927E1, 0.123E1): ~0.3862929E4 ~0.3862929E4 +(0.123E4, ~0.31415927E1, 0.123): ~0.38640361E4 ~0.38640361E4 +(0.123E4, ~0.31415927E1, 0.123E~2): ~0.3864158E4 ~0.3864158E4 +(0.123E4, ~0.31415927E1, 0.11754944E~37): ~0.38641592E4 ~0.38641592E4 +(0.123E4, ~0.31415927E1, 0.5877472E~38): ~0.38641592E4 ~0.38641592E4 +(0.123E4, ~0.31415927E1, 0.1E~44): ~0.38641592E4 ~0.38641592E4 +(0.123E4, ~0.31415927E1, 0.0): ~0.38641592E4 ~0.38641592E4 +(0.123E4, ~0.31415927E1, ~0.123E4): ~0.5094159E4 ~0.5094159E4 +(0.123E4, ~0.31415927E1, ~0.123E2): ~0.3876459E4 ~0.3876459E4 +(0.123E4, ~0.31415927E1, ~0.31415927E1): ~0.38673008E4 ~0.38673008E4 +(0.123E4, ~0.31415927E1, ~0.27182817E1): ~0.38668774E4 ~0.38668774E4 +(0.123E4, ~0.31415927E1, ~0.123E1): ~0.38653892E4 ~0.38653892E4 +(0.123E4, ~0.31415927E1, ~0.123): ~0.3864282E4 ~0.3864282E4 +(0.123E4, ~0.31415927E1, ~0.123E~2): ~0.38641604E4 ~0.38641604E4 +(0.123E4, ~0.31415927E1, ~0.11754944E~37): ~0.38641592E4 ~0.38641592E4 +(0.123E4, ~0.31415927E1, ~0.5877472E~38): ~0.38641592E4 ~0.38641592E4 +(0.123E4, ~0.31415927E1, ~0.1E~44): ~0.38641592E4 ~0.38641592E4 +(0.123E4, ~0.31415927E1, ~0.0): ~0.38641592E4 ~0.38641592E4 +(0.123E4, ~0.27182817E1, 0.123E4): ~0.21134866E4 ~0.21134866E4 +(0.123E4, ~0.27182817E1, 0.123E2): ~0.33311865E4 ~0.33311865E4 +(0.123E4, ~0.27182817E1, 0.31415927E1): ~0.3340345E4 ~0.3340345E4 +(0.123E4, ~0.27182817E1, 0.27182817E1): ~0.33407683E4 ~0.33407683E4 +(0.123E4, ~0.27182817E1, 0.123E1): ~0.33422566E4 ~0.33422566E4 +(0.123E4, ~0.27182817E1, 0.123): ~0.33433635E4 ~0.33433635E4 +(0.123E4, ~0.27182817E1, 0.123E~2): ~0.33434854E4 ~0.33434854E4 +(0.123E4, ~0.27182817E1, 0.11754944E~37): ~0.33434866E4 ~0.33434866E4 +(0.123E4, ~0.27182817E1, 0.5877472E~38): ~0.33434866E4 ~0.33434866E4 +(0.123E4, ~0.27182817E1, 0.1E~44): ~0.33434866E4 ~0.33434866E4 +(0.123E4, ~0.27182817E1, 0.0): ~0.33434866E4 ~0.33434866E4 +(0.123E4, ~0.27182817E1, ~0.123E4): ~0.45734863E4 ~0.45734863E4 +(0.123E4, ~0.27182817E1, ~0.123E2): ~0.33557866E4 ~0.33557866E4 +(0.123E4, ~0.27182817E1, ~0.31415927E1): ~0.33466282E4 ~0.33466282E4 +(0.123E4, ~0.27182817E1, ~0.27182817E1): ~0.33462048E4 ~0.33462048E4 +(0.123E4, ~0.27182817E1, ~0.123E1): ~0.33447166E4 ~0.33447166E4 +(0.123E4, ~0.27182817E1, ~0.123): ~0.33436096E4 ~0.33436096E4 +(0.123E4, ~0.27182817E1, ~0.123E~2): ~0.33434878E4 ~0.33434878E4 +(0.123E4, ~0.27182817E1, ~0.11754944E~37): ~0.33434866E4 ~0.33434866E4 +(0.123E4, ~0.27182817E1, ~0.5877472E~38): ~0.33434866E4 ~0.33434866E4 +(0.123E4, ~0.27182817E1, ~0.1E~44): ~0.33434866E4 ~0.33434866E4 +(0.123E4, ~0.27182817E1, ~0.0): ~0.33434866E4 ~0.33434866E4 +(0.123E4, ~0.123E1, 0.123E4): ~0.28290002E3 ~0.28290002E3 +(0.123E4, ~0.123E1, 0.123E2): ~0.15006E4 ~0.15006E4 +(0.123E4, ~0.123E1, 0.31415927E1): ~0.15097584E4 ~0.15097584E4 +(0.123E4, ~0.123E1, 0.27182817E1): ~0.15101818E4 ~0.15101818E4 +(0.123E4, ~0.123E1, 0.123E1): ~0.151167E4 ~0.151167E4 +(0.123E4, ~0.123E1, 0.123): ~0.1512777E4 ~0.1512777E4 +(0.123E4, ~0.123E1, 0.123E~2): ~0.15128988E4 ~0.15128988E4 +(0.123E4, ~0.123E1, 0.11754944E~37): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, 0.5877472E~38): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, 0.1E~44): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, 0.0): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, ~0.123E4): ~0.27429E4 ~0.27429E4 +(0.123E4, ~0.123E1, ~0.123E2): ~0.15252001E4 ~0.15252001E4 +(0.123E4, ~0.123E1, ~0.31415927E1): ~0.15160416E4 ~0.15160416E4 +(0.123E4, ~0.123E1, ~0.27182817E1): ~0.15156183E4 ~0.15156183E4 +(0.123E4, ~0.123E1, ~0.123E1): ~0.151413E4 ~0.151413E4 +(0.123E4, ~0.123E1, ~0.123): ~0.15130231E4 ~0.15130231E4 +(0.123E4, ~0.123E1, ~0.123E~2): ~0.15129012E4 ~0.15129012E4 +(0.123E4, ~0.123E1, ~0.11754944E~37): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, ~0.5877472E~38): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, ~0.1E~44): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, ~0.0): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123, 0.123E4): 0.107871E4 0.107871E4 +(0.123E4, ~0.123, 0.123E2): ~0.13899E3 ~0.13899E3 +(0.123E4, ~0.123, 0.31415927E1): ~0.1481484E3 ~0.1481484E3 +(0.123E4, ~0.123, 0.27182817E1): ~0.14857172E3 ~0.14857172E3 +(0.123E4, ~0.123, 0.123E1): ~0.15006E3 ~0.15006E3 +(0.123E4, ~0.123, 0.123): ~0.151167E3 ~0.151167E3 +(0.123E4, ~0.123, 0.123E~2): ~0.15128877E3 ~0.15128877E3 +(0.123E4, ~0.123, 0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(0.123E4, ~0.123, 0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(0.123E4, ~0.123, 0.1E~44): ~0.15129001E3 ~0.15129001E3 +(0.123E4, ~0.123, 0.0): ~0.15129001E3 ~0.15129001E3 +(0.123E4, ~0.123, ~0.123E4): ~0.138129E4 ~0.138129E4 +(0.123E4, ~0.123, ~0.123E2): ~0.16359001E3 ~0.16359001E3 +(0.123E4, ~0.123, ~0.31415927E1): ~0.1544316E3 ~0.1544316E3 +(0.123E4, ~0.123, ~0.27182817E1): ~0.15400829E3 ~0.15400829E3 +(0.123E4, ~0.123, ~0.123E1): ~0.15252E3 ~0.15252E3 +(0.123E4, ~0.123, ~0.123): ~0.15141301E3 ~0.15141301E3 +(0.123E4, ~0.123, ~0.123E~2): ~0.15129123E3 ~0.15129123E3 +(0.123E4, ~0.123, ~0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(0.123E4, ~0.123, ~0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(0.123E4, ~0.123, ~0.1E~44): ~0.15129001E3 ~0.15129001E3 +(0.123E4, ~0.123, ~0.0): ~0.15129001E3 ~0.15129001E3 +(0.123E4, ~0.123E~2, 0.123E4): 0.1228487E4 0.1228487E4 +(0.123E4, ~0.123E~2, 0.123E2): 0.107871E2 0.107871E2 +(0.123E4, ~0.123E~2, 0.31415927E1): 0.16286926E1 0.16286926E1 +(0.123E4, ~0.123E~2, 0.27182817E1): 0.12053816E1 0.12053816E1 +(0.123E4, ~0.123E~2, 0.123E1): ~0.28290004 ~0.28290004 +(0.123E4, ~0.123E~2, 0.123): ~0.13899001E1 ~0.13899001E1 +(0.123E4, ~0.123E~2, 0.123E~2): ~0.15116701E1 ~0.15116701E1 +(0.123E4, ~0.123E~2, 0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(0.123E4, ~0.123E~2, 0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(0.123E4, ~0.123E~2, 0.1E~44): ~0.15129001E1 ~0.15129001E1 +(0.123E4, ~0.123E~2, 0.0): ~0.15129001E1 ~0.15129001E1 +(0.123E4, ~0.123E~2, ~0.123E4): ~0.1231513E4 ~0.1231513E4 +(0.123E4, ~0.123E~2, ~0.123E2): ~0.13812901E2 ~0.13812901E2 +(0.123E4, ~0.123E~2, ~0.31415927E1): ~0.4654493E1 ~0.4654493E1 +(0.123E4, ~0.123E~2, ~0.27182817E1): ~0.42311816E1 ~0.42311816E1 +(0.123E4, ~0.123E~2, ~0.123E1): ~0.27429001E1 ~0.27429001E1 +(0.123E4, ~0.123E~2, ~0.123): ~0.16359E1 ~0.16359E1 +(0.123E4, ~0.123E~2, ~0.123E~2): ~0.15141301E1 ~0.15141301E1 +(0.123E4, ~0.123E~2, ~0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(0.123E4, ~0.123E~2, ~0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(0.123E4, ~0.123E~2, ~0.1E~44): ~0.15129001E1 ~0.15129001E1 +(0.123E4, ~0.123E~2, ~0.0): ~0.15129001E1 ~0.15129001E1 +(0.123E4, ~0.11754944E~37, 0.1E~44): ~0.1445858E~34 ~0.1445858E~34 +(0.123E4, ~0.11754944E~37, ~0.1E~44): ~0.1445858E~34 ~0.1445858E~34 +(0.123E4, ~0.5877472E~38, 0.1E~44): ~0.722929E~35 ~0.722929E~35 +(0.123E4, ~0.5877472E~38, ~0.1E~44): ~0.722929E~35 ~0.722929E~35 +(0.123E2, 0.34028235E39, 0.34028235E39): inf inf +(0.123E2, 0.34028235E39, 0.17014117E39): inf inf +(0.123E2, 0.34028235E39, 0.123E4): inf inf +(0.123E2, 0.34028235E39, 0.123E2): inf inf +(0.123E2, 0.34028235E39, 0.31415927E1): inf inf +(0.123E2, 0.34028235E39, 0.27182817E1): inf inf +(0.123E2, 0.34028235E39, 0.123E1): inf inf +(0.123E2, 0.34028235E39, 0.123): inf inf +(0.123E2, 0.34028235E39, 0.123E~2): inf inf +(0.123E2, 0.34028235E39, 0.11754944E~37): inf inf +(0.123E2, 0.34028235E39, 0.5877472E~38): inf inf +(0.123E2, 0.34028235E39, 0.1E~44): inf inf +(0.123E2, 0.34028235E39, 0.0): inf inf +(0.123E2, 0.34028235E39, ~0.34028235E39): inf inf +(0.123E2, 0.34028235E39, ~0.17014117E39): inf inf +(0.123E2, 0.34028235E39, ~0.123E4): inf inf +(0.123E2, 0.34028235E39, ~0.123E2): inf inf +(0.123E2, 0.34028235E39, ~0.31415927E1): inf inf +(0.123E2, 0.34028235E39, ~0.27182817E1): inf inf +(0.123E2, 0.34028235E39, ~0.123E1): inf inf +(0.123E2, 0.34028235E39, ~0.123): inf inf +(0.123E2, 0.34028235E39, ~0.123E~2): inf inf +(0.123E2, 0.34028235E39, ~0.11754944E~37): inf inf +(0.123E2, 0.34028235E39, ~0.5877472E~38): inf inf +(0.123E2, 0.34028235E39, ~0.1E~44): inf inf +(0.123E2, 0.34028235E39, ~0.0): inf inf +(0.123E2, 0.17014117E39, 0.34028235E39): inf inf +(0.123E2, 0.17014117E39, 0.17014117E39): inf inf +(0.123E2, 0.17014117E39, 0.123E4): inf inf +(0.123E2, 0.17014117E39, 0.123E2): inf inf +(0.123E2, 0.17014117E39, 0.31415927E1): inf inf +(0.123E2, 0.17014117E39, 0.27182817E1): inf inf +(0.123E2, 0.17014117E39, 0.123E1): inf inf +(0.123E2, 0.17014117E39, 0.123): inf inf +(0.123E2, 0.17014117E39, 0.123E~2): inf inf +(0.123E2, 0.17014117E39, 0.11754944E~37): inf inf +(0.123E2, 0.17014117E39, 0.5877472E~38): inf inf +(0.123E2, 0.17014117E39, 0.1E~44): inf inf +(0.123E2, 0.17014117E39, 0.0): inf inf +(0.123E2, 0.17014117E39, ~0.34028235E39): inf inf +(0.123E2, 0.17014117E39, ~0.17014117E39): inf inf +(0.123E2, 0.17014117E39, ~0.123E4): inf inf +(0.123E2, 0.17014117E39, ~0.123E2): inf inf +(0.123E2, 0.17014117E39, ~0.31415927E1): inf inf +(0.123E2, 0.17014117E39, ~0.27182817E1): inf inf +(0.123E2, 0.17014117E39, ~0.123E1): inf inf +(0.123E2, 0.17014117E39, ~0.123): inf inf +(0.123E2, 0.17014117E39, ~0.123E~2): inf inf +(0.123E2, 0.17014117E39, ~0.11754944E~37): inf inf +(0.123E2, 0.17014117E39, ~0.5877472E~38): inf inf +(0.123E2, 0.17014117E39, ~0.1E~44): inf inf +(0.123E2, 0.17014117E39, ~0.0): inf inf +(0.123E2, 0.123E4, 0.123E4): 0.16359E5 0.16359E5 +(0.123E2, 0.123E4, 0.123E2): 0.151413E5 0.151413E5 +(0.123E2, 0.123E4, 0.31415927E1): 0.15132142E5 0.15132142E5 +(0.123E2, 0.123E4, 0.27182817E1): 0.15131719E5 0.15131719E5 +(0.123E2, 0.123E4, 0.123E1): 0.1513023E5 0.1513023E5 +(0.123E2, 0.123E4, 0.123): 0.15129123E5 0.15129123E5 +(0.123E2, 0.123E4, 0.123E~2): 0.15129001E5 0.15129001E5 +(0.123E2, 0.123E4, 0.11754944E~37): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, 0.5877472E~38): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, 0.1E~44): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, 0.0): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, ~0.123E4): 0.13899E5 0.13899E5 +(0.123E2, 0.123E4, ~0.123E2): 0.151167E5 0.151167E5 +(0.123E2, 0.123E4, ~0.31415927E1): 0.15125858E5 0.15125858E5 +(0.123E2, 0.123E4, ~0.27182817E1): 0.15126282E5 0.15126282E5 +(0.123E2, 0.123E4, ~0.123E1): 0.151277705E5 0.151277705E5 +(0.123E2, 0.123E4, ~0.123): 0.15128877E5 0.15128877E5 +(0.123E2, 0.123E4, ~0.123E~2): 0.15128999E5 0.15128999E5 +(0.123E2, 0.123E4, ~0.11754944E~37): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, ~0.5877472E~38): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, ~0.1E~44): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, ~0.0): 0.15129E5 0.15129E5 +(0.123E2, 0.123E2, 0.123E4): 0.138129E4 0.138129E4 +(0.123E2, 0.123E2, 0.123E2): 0.16359001E3 0.16359001E3 +(0.123E2, 0.123E2, 0.31415927E1): 0.1544316E3 0.1544316E3 +(0.123E2, 0.123E2, 0.27182817E1): 0.15400829E3 0.15400829E3 +(0.123E2, 0.123E2, 0.123E1): 0.15252E3 0.15252E3 +(0.123E2, 0.123E2, 0.123): 0.15141301E3 0.15141301E3 +(0.123E2, 0.123E2, 0.123E~2): 0.15129123E3 0.15129123E3 +(0.123E2, 0.123E2, 0.11754944E~37): 0.15129001E3 0.15129001E3 +(0.123E2, 0.123E2, 0.5877472E~38): 0.15129001E3 0.15129001E3 +(0.123E2, 0.123E2, 0.1E~44): 0.15129001E3 0.15129001E3 +(0.123E2, 0.123E2, 0.0): 0.15129001E3 0.15129001E3 +(0.123E2, 0.123E2, ~0.123E4): ~0.107871E4 ~0.107871E4 +(0.123E2, 0.123E2, ~0.123E2): 0.13899E3 0.13899E3 +(0.123E2, 0.123E2, ~0.31415927E1): 0.1481484E3 0.1481484E3 +(0.123E2, 0.123E2, ~0.27182817E1): 0.14857172E3 0.14857172E3 +(0.123E2, 0.123E2, ~0.123E1): 0.15006E3 0.15006E3 +(0.123E2, 0.123E2, ~0.123): 0.151167E3 0.151167E3 +(0.123E2, 0.123E2, ~0.123E~2): 0.15128877E3 0.15128877E3 +(0.123E2, 0.123E2, ~0.11754944E~37): 0.15129001E3 0.15129001E3 +(0.123E2, 0.123E2, ~0.5877472E~38): 0.15129001E3 0.15129001E3 +(0.123E2, 0.123E2, ~0.1E~44): 0.15129001E3 0.15129001E3 +(0.123E2, 0.123E2, ~0.0): 0.15129001E3 0.15129001E3 +(0.123E2, 0.31415927E1, 0.123E4): 0.12686416E4 0.12686416E4 +(0.123E2, 0.31415927E1, 0.123E2): 0.50941593E2 0.50941593E2 +(0.123E2, 0.31415927E1, 0.31415927E1): 0.41783184E2 0.41783184E2 +(0.123E2, 0.31415927E1, 0.27182817E1): 0.41359875E2 0.41359875E2 +(0.123E2, 0.31415927E1, 0.123E1): 0.3987159E2 0.3987159E2 +(0.123E2, 0.31415927E1, 0.123): 0.3876459E2 0.3876459E2 +(0.123E2, 0.31415927E1, 0.123E~2): 0.38642822E2 0.38642822E2 +(0.123E2, 0.31415927E1, 0.11754944E~37): 0.3864159E2 0.3864159E2 +(0.123E2, 0.31415927E1, 0.5877472E~38): 0.3864159E2 0.3864159E2 +(0.123E2, 0.31415927E1, 0.1E~44): 0.3864159E2 0.3864159E2 +(0.123E2, 0.31415927E1, 0.0): 0.3864159E2 0.3864159E2 +(0.123E2, 0.31415927E1, ~0.123E4): ~0.11913584E4 ~0.11913584E4 +(0.123E2, 0.31415927E1, ~0.123E2): 0.2634159E2 0.2634159E2 +(0.123E2, 0.31415927E1, ~0.31415927E1): 0.355E2 0.355E2 +(0.123E2, 0.31415927E1, ~0.27182817E1): 0.3592331E2 0.3592331E2 +(0.123E2, 0.31415927E1, ~0.123E1): 0.3741159E2 0.3741159E2 +(0.123E2, 0.31415927E1, ~0.123): 0.38518593E2 0.38518593E2 +(0.123E2, 0.31415927E1, ~0.123E~2): 0.3864036E2 0.3864036E2 +(0.123E2, 0.31415927E1, ~0.11754944E~37): 0.3864159E2 0.3864159E2 +(0.123E2, 0.31415927E1, ~0.5877472E~38): 0.3864159E2 0.3864159E2 +(0.123E2, 0.31415927E1, ~0.1E~44): 0.3864159E2 0.3864159E2 +(0.123E2, 0.31415927E1, ~0.0): 0.3864159E2 0.3864159E2 +(0.123E2, 0.27182817E1, 0.123E4): 0.12634348E4 0.12634348E4 +(0.123E2, 0.27182817E1, 0.123E2): 0.45734867E2 0.45734867E2 +(0.123E2, 0.27182817E1, 0.31415927E1): 0.36576458E2 0.36576458E2 +(0.123E2, 0.27182817E1, 0.27182817E1): 0.3615315E2 0.3615315E2 +(0.123E2, 0.27182817E1, 0.123E1): 0.34664867E2 0.34664867E2 +(0.123E2, 0.27182817E1, 0.123): 0.33557865E2 0.33557865E2 +(0.123E2, 0.27182817E1, 0.123E~2): 0.33436096E2 0.33436096E2 +(0.123E2, 0.27182817E1, 0.11754944E~37): 0.33434868E2 0.33434868E2 +(0.123E2, 0.27182817E1, 0.5877472E~38): 0.33434868E2 0.33434868E2 +(0.123E2, 0.27182817E1, 0.1E~44): 0.33434868E2 0.33434868E2 +(0.123E2, 0.27182817E1, 0.0): 0.33434868E2 0.33434868E2 +(0.123E2, 0.27182817E1, ~0.123E4): ~0.11965652E4 ~0.11965652E4 +(0.123E2, 0.27182817E1, ~0.123E2): 0.21134867E2 0.21134867E2 +(0.123E2, 0.27182817E1, ~0.31415927E1): 0.30293274E2 0.30293274E2 +(0.123E2, 0.27182817E1, ~0.27182817E1): 0.30716585E2 0.30716585E2 +(0.123E2, 0.27182817E1, ~0.123E1): 0.32204865E2 0.32204865E2 +(0.123E2, 0.27182817E1, ~0.123): 0.33311867E2 0.33311867E2 +(0.123E2, 0.27182817E1, ~0.123E~2): 0.33433636E2 0.33433636E2 +(0.123E2, 0.27182817E1, ~0.11754944E~37): 0.33434868E2 0.33434868E2 +(0.123E2, 0.27182817E1, ~0.5877472E~38): 0.33434868E2 0.33434868E2 +(0.123E2, 0.27182817E1, ~0.1E~44): 0.33434868E2 0.33434868E2 +(0.123E2, 0.27182817E1, ~0.0): 0.33434868E2 0.33434868E2 +(0.123E2, 0.123E1, 0.123E4): 0.1245129E4 0.1245129E4 +(0.123E2, 0.123E1, 0.123E2): 0.27429E2 0.27429E2 +(0.123E2, 0.123E1, 0.31415927E1): 0.18270594E2 0.18270594E2 +(0.123E2, 0.123E1, 0.27182817E1): 0.17847282E2 0.17847282E2 +(0.123E2, 0.123E1, 0.123E1): 0.16359001E2 0.16359001E2 +(0.123E2, 0.123E1, 0.123): 0.15252001E2 0.15252001E2 +(0.123E2, 0.123E1, 0.123E~2): 0.15130231E2 0.15130231E2 +(0.123E2, 0.123E1, 0.11754944E~37): 0.15129001E2 0.15129001E2 +(0.123E2, 0.123E1, 0.5877472E~38): 0.15129001E2 0.15129001E2 +(0.123E2, 0.123E1, 0.1E~44): 0.15129001E2 0.15129001E2 +(0.123E2, 0.123E1, 0.0): 0.15129001E2 0.15129001E2 +(0.123E2, 0.123E1, ~0.123E4): ~0.1214871E4 ~0.1214871E4 +(0.123E2, 0.123E1, ~0.123E2): 0.28290002E1 0.28290002E1 +(0.123E2, 0.123E1, ~0.31415927E1): 0.11987408E2 0.11987408E2 +(0.123E2, 0.123E1, ~0.27182817E1): 0.12410719E2 0.12410719E2 +(0.123E2, 0.123E1, ~0.123E1): 0.13899E2 0.13899E2 +(0.123E2, 0.123E1, ~0.123): 0.150060005E2 0.150060005E2 +(0.123E2, 0.123E1, ~0.123E~2): 0.1512777E2 0.1512777E2 +(0.123E2, 0.123E1, ~0.11754944E~37): 0.15129001E2 0.15129001E2 +(0.123E2, 0.123E1, ~0.5877472E~38): 0.15129001E2 0.15129001E2 +(0.123E2, 0.123E1, ~0.1E~44): 0.15129001E2 0.15129001E2 +(0.123E2, 0.123E1, ~0.0): 0.15129001E2 0.15129001E2 +(0.123E2, 0.123, 0.123E4): 0.1231513E4 0.1231513E4 +(0.123E2, 0.123, 0.123E2): 0.13812901E2 0.13812901E2 +(0.123E2, 0.123, 0.31415927E1): 0.4654493E1 0.4654493E1 +(0.123E2, 0.123, 0.27182817E1): 0.42311816E1 0.42311816E1 +(0.123E2, 0.123, 0.123E1): 0.27429001E1 0.27429001E1 +(0.123E2, 0.123, 0.123): 0.16359E1 0.16359E1 +(0.123E2, 0.123, 0.123E~2): 0.15141301E1 0.15141301E1 +(0.123E2, 0.123, 0.11754944E~37): 0.15129001E1 0.15129001E1 +(0.123E2, 0.123, 0.5877472E~38): 0.15129001E1 0.15129001E1 +(0.123E2, 0.123, 0.1E~44): 0.15129001E1 0.15129001E1 +(0.123E2, 0.123, 0.0): 0.15129001E1 0.15129001E1 +(0.123E2, 0.123, ~0.123E4): ~0.1228487E4 ~0.1228487E4 +(0.123E2, 0.123, ~0.123E2): ~0.107871E2 ~0.107871E2 +(0.123E2, 0.123, ~0.31415927E1): ~0.16286926E1 ~0.16286926E1 +(0.123E2, 0.123, ~0.27182817E1): ~0.12053816E1 ~0.12053816E1 +(0.123E2, 0.123, ~0.123E1): 0.28290004 0.28290004 +(0.123E2, 0.123, ~0.123): 0.13899001E1 0.13899001E1 +(0.123E2, 0.123, ~0.123E~2): 0.15116701E1 0.15116701E1 +(0.123E2, 0.123, ~0.11754944E~37): 0.15129001E1 0.15129001E1 +(0.123E2, 0.123, ~0.5877472E~38): 0.15129001E1 0.15129001E1 +(0.123E2, 0.123, ~0.1E~44): 0.15129001E1 0.15129001E1 +(0.123E2, 0.123, ~0.0): 0.15129001E1 0.15129001E1 +(0.123E2, 0.123E~2, 0.123E4): 0.12300151E4 0.12300151E4 +(0.123E2, 0.123E~2, 0.123E2): 0.12315129E2 0.12315129E2 +(0.123E2, 0.123E~2, 0.31415927E1): 0.31567218E1 0.31567218E1 +(0.123E2, 0.123E~2, 0.27182817E1): 0.27334108E1 0.27334108E1 +(0.123E2, 0.123E~2, 0.123E1): 0.1245129E1 0.1245129E1 +(0.123E2, 0.123E~2, 0.123): 0.13812901 0.13812901 +(0.123E2, 0.123E~2, 0.123E~2): 0.16359001E~1 0.16359001E~1 +(0.123E2, 0.123E~2, 0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(0.123E2, 0.123E~2, 0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(0.123E2, 0.123E~2, 0.1E~44): 0.15129001E~1 0.15129001E~1 +(0.123E2, 0.123E~2, 0.0): 0.15129001E~1 0.15129001E~1 +(0.123E2, 0.123E~2, ~0.123E4): ~0.12299849E4 ~0.12299849E4 +(0.123E2, 0.123E~2, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(0.123E2, 0.123E~2, ~0.31415927E1): ~0.31264637E1 ~0.31264637E1 +(0.123E2, 0.123E~2, ~0.27182817E1): ~0.27031527E1 ~0.27031527E1 +(0.123E2, 0.123E~2, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(0.123E2, 0.123E~2, ~0.123): ~0.107871 ~0.107871 +(0.123E2, 0.123E~2, ~0.123E~2): 0.13899001E~1 0.13899001E~1 +(0.123E2, 0.123E~2, ~0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(0.123E2, 0.123E~2, ~0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(0.123E2, 0.123E~2, ~0.1E~44): 0.15129001E~1 0.15129001E~1 +(0.123E2, 0.123E~2, ~0.0): 0.15129001E~1 0.15129001E~1 +(0.123E2, 0.11754944E~37, 0.1E~44): 0.14458581E~36 0.14458581E~36 +(0.123E2, 0.11754944E~37, ~0.1E~44): 0.14458581E~36 0.14458581E~36 +(0.123E2, 0.5877472E~38, 0.1E~44): 0.72292904E~37 0.72292904E~37 +(0.123E2, 0.5877472E~38, ~0.1E~44): 0.72292904E~37 0.72292904E~37 +(0.123E2, 0.1E~44, 0.11754944E~37): 0.1175496E~37 0.1175496E~37 +(0.123E2, 0.1E~44, 0.5877472E~38): 0.5877489E~38 0.5877489E~38 +(0.123E2, 0.1E~44, 0.1E~44): 0.18E~43 0.18E~43 +(0.123E2, 0.1E~44, 0.0): 0.17E~43 0.17E~43 +(0.123E2, 0.1E~44, ~0.11754944E~37): ~0.11754927E~37 ~0.11754927E~37 +(0.123E2, 0.1E~44, ~0.5877472E~38): ~0.5877455E~38 ~0.5877455E~38 +(0.123E2, 0.1E~44, ~0.1E~44): 0.15E~43 0.15E~43 +(0.123E2, 0.1E~44, ~0.0): 0.17E~43 0.17E~43 +(0.123E2, ~0.34028235E39, 0.34028235E39): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.17014117E39): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.123E4): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.123E2): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.31415927E1): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.27182817E1): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.123E1): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.123): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.123E~2): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.11754944E~37): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.5877472E~38): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.1E~44): ~inf ~inf +(0.123E2, ~0.34028235E39, 0.0): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.34028235E39): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.17014117E39): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.123E4): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.123E2): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.31415927E1): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.27182817E1): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.123E1): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.123): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.123E~2): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.11754944E~37): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.5877472E~38): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.1E~44): ~inf ~inf +(0.123E2, ~0.34028235E39, ~0.0): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.34028235E39): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.17014117E39): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.123E4): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.123E2): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.31415927E1): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.27182817E1): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.123E1): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.123): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.123E~2): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.11754944E~37): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.5877472E~38): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.1E~44): ~inf ~inf +(0.123E2, ~0.17014117E39, 0.0): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.34028235E39): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.17014117E39): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.123E4): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.123E2): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.31415927E1): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.27182817E1): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.123E1): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.123): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.123E~2): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.11754944E~37): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.5877472E~38): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.1E~44): ~inf ~inf +(0.123E2, ~0.17014117E39, ~0.0): ~inf ~inf +(0.123E2, ~0.123E4, 0.123E4): ~0.13899E5 ~0.13899E5 +(0.123E2, ~0.123E4, 0.123E2): ~0.151167E5 ~0.151167E5 +(0.123E2, ~0.123E4, 0.31415927E1): ~0.15125858E5 ~0.15125858E5 +(0.123E2, ~0.123E4, 0.27182817E1): ~0.15126282E5 ~0.15126282E5 +(0.123E2, ~0.123E4, 0.123E1): ~0.151277705E5 ~0.151277705E5 +(0.123E2, ~0.123E4, 0.123): ~0.15128877E5 ~0.15128877E5 +(0.123E2, ~0.123E4, 0.123E~2): ~0.15128999E5 ~0.15128999E5 +(0.123E2, ~0.123E4, 0.11754944E~37): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, 0.5877472E~38): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, 0.1E~44): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, 0.0): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, ~0.123E4): ~0.16359E5 ~0.16359E5 +(0.123E2, ~0.123E4, ~0.123E2): ~0.151413E5 ~0.151413E5 +(0.123E2, ~0.123E4, ~0.31415927E1): ~0.15132142E5 ~0.15132142E5 +(0.123E2, ~0.123E4, ~0.27182817E1): ~0.15131719E5 ~0.15131719E5 +(0.123E2, ~0.123E4, ~0.123E1): ~0.1513023E5 ~0.1513023E5 +(0.123E2, ~0.123E4, ~0.123): ~0.15129123E5 ~0.15129123E5 +(0.123E2, ~0.123E4, ~0.123E~2): ~0.15129001E5 ~0.15129001E5 +(0.123E2, ~0.123E4, ~0.11754944E~37): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, ~0.5877472E~38): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, ~0.1E~44): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, ~0.0): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E2, 0.123E4): 0.107871E4 0.107871E4 +(0.123E2, ~0.123E2, 0.123E2): ~0.13899E3 ~0.13899E3 +(0.123E2, ~0.123E2, 0.31415927E1): ~0.1481484E3 ~0.1481484E3 +(0.123E2, ~0.123E2, 0.27182817E1): ~0.14857172E3 ~0.14857172E3 +(0.123E2, ~0.123E2, 0.123E1): ~0.15006E3 ~0.15006E3 +(0.123E2, ~0.123E2, 0.123): ~0.151167E3 ~0.151167E3 +(0.123E2, ~0.123E2, 0.123E~2): ~0.15128877E3 ~0.15128877E3 +(0.123E2, ~0.123E2, 0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(0.123E2, ~0.123E2, 0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(0.123E2, ~0.123E2, 0.1E~44): ~0.15129001E3 ~0.15129001E3 +(0.123E2, ~0.123E2, 0.0): ~0.15129001E3 ~0.15129001E3 +(0.123E2, ~0.123E2, ~0.123E4): ~0.138129E4 ~0.138129E4 +(0.123E2, ~0.123E2, ~0.123E2): ~0.16359001E3 ~0.16359001E3 +(0.123E2, ~0.123E2, ~0.31415927E1): ~0.1544316E3 ~0.1544316E3 +(0.123E2, ~0.123E2, ~0.27182817E1): ~0.15400829E3 ~0.15400829E3 +(0.123E2, ~0.123E2, ~0.123E1): ~0.15252E3 ~0.15252E3 +(0.123E2, ~0.123E2, ~0.123): ~0.15141301E3 ~0.15141301E3 +(0.123E2, ~0.123E2, ~0.123E~2): ~0.15129123E3 ~0.15129123E3 +(0.123E2, ~0.123E2, ~0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(0.123E2, ~0.123E2, ~0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(0.123E2, ~0.123E2, ~0.1E~44): ~0.15129001E3 ~0.15129001E3 +(0.123E2, ~0.123E2, ~0.0): ~0.15129001E3 ~0.15129001E3 +(0.123E2, ~0.31415927E1, 0.123E4): 0.11913584E4 0.11913584E4 +(0.123E2, ~0.31415927E1, 0.123E2): ~0.2634159E2 ~0.2634159E2 +(0.123E2, ~0.31415927E1, 0.31415927E1): ~0.355E2 ~0.355E2 +(0.123E2, ~0.31415927E1, 0.27182817E1): ~0.3592331E2 ~0.3592331E2 +(0.123E2, ~0.31415927E1, 0.123E1): ~0.3741159E2 ~0.3741159E2 +(0.123E2, ~0.31415927E1, 0.123): ~0.38518593E2 ~0.38518593E2 +(0.123E2, ~0.31415927E1, 0.123E~2): ~0.3864036E2 ~0.3864036E2 +(0.123E2, ~0.31415927E1, 0.11754944E~37): ~0.3864159E2 ~0.3864159E2 +(0.123E2, ~0.31415927E1, 0.5877472E~38): ~0.3864159E2 ~0.3864159E2 +(0.123E2, ~0.31415927E1, 0.1E~44): ~0.3864159E2 ~0.3864159E2 +(0.123E2, ~0.31415927E1, 0.0): ~0.3864159E2 ~0.3864159E2 +(0.123E2, ~0.31415927E1, ~0.123E4): ~0.12686416E4 ~0.12686416E4 +(0.123E2, ~0.31415927E1, ~0.123E2): ~0.50941593E2 ~0.50941593E2 +(0.123E2, ~0.31415927E1, ~0.31415927E1): ~0.41783184E2 ~0.41783184E2 +(0.123E2, ~0.31415927E1, ~0.27182817E1): ~0.41359875E2 ~0.41359875E2 +(0.123E2, ~0.31415927E1, ~0.123E1): ~0.3987159E2 ~0.3987159E2 +(0.123E2, ~0.31415927E1, ~0.123): ~0.3876459E2 ~0.3876459E2 +(0.123E2, ~0.31415927E1, ~0.123E~2): ~0.38642822E2 ~0.38642822E2 +(0.123E2, ~0.31415927E1, ~0.11754944E~37): ~0.3864159E2 ~0.3864159E2 +(0.123E2, ~0.31415927E1, ~0.5877472E~38): ~0.3864159E2 ~0.3864159E2 +(0.123E2, ~0.31415927E1, ~0.1E~44): ~0.3864159E2 ~0.3864159E2 +(0.123E2, ~0.31415927E1, ~0.0): ~0.3864159E2 ~0.3864159E2 +(0.123E2, ~0.27182817E1, 0.123E4): 0.11965652E4 0.11965652E4 +(0.123E2, ~0.27182817E1, 0.123E2): ~0.21134867E2 ~0.21134867E2 +(0.123E2, ~0.27182817E1, 0.31415927E1): ~0.30293274E2 ~0.30293274E2 +(0.123E2, ~0.27182817E1, 0.27182817E1): ~0.30716585E2 ~0.30716585E2 +(0.123E2, ~0.27182817E1, 0.123E1): ~0.32204865E2 ~0.32204865E2 +(0.123E2, ~0.27182817E1, 0.123): ~0.33311867E2 ~0.33311867E2 +(0.123E2, ~0.27182817E1, 0.123E~2): ~0.33433636E2 ~0.33433636E2 +(0.123E2, ~0.27182817E1, 0.11754944E~37): ~0.33434868E2 ~0.33434868E2 +(0.123E2, ~0.27182817E1, 0.5877472E~38): ~0.33434868E2 ~0.33434868E2 +(0.123E2, ~0.27182817E1, 0.1E~44): ~0.33434868E2 ~0.33434868E2 +(0.123E2, ~0.27182817E1, 0.0): ~0.33434868E2 ~0.33434868E2 +(0.123E2, ~0.27182817E1, ~0.123E4): ~0.12634348E4 ~0.12634348E4 +(0.123E2, ~0.27182817E1, ~0.123E2): ~0.45734867E2 ~0.45734867E2 +(0.123E2, ~0.27182817E1, ~0.31415927E1): ~0.36576458E2 ~0.36576458E2 +(0.123E2, ~0.27182817E1, ~0.27182817E1): ~0.3615315E2 ~0.3615315E2 +(0.123E2, ~0.27182817E1, ~0.123E1): ~0.34664867E2 ~0.34664867E2 +(0.123E2, ~0.27182817E1, ~0.123): ~0.33557865E2 ~0.33557865E2 +(0.123E2, ~0.27182817E1, ~0.123E~2): ~0.33436096E2 ~0.33436096E2 +(0.123E2, ~0.27182817E1, ~0.11754944E~37): ~0.33434868E2 ~0.33434868E2 +(0.123E2, ~0.27182817E1, ~0.5877472E~38): ~0.33434868E2 ~0.33434868E2 +(0.123E2, ~0.27182817E1, ~0.1E~44): ~0.33434868E2 ~0.33434868E2 +(0.123E2, ~0.27182817E1, ~0.0): ~0.33434868E2 ~0.33434868E2 +(0.123E2, ~0.123E1, 0.123E4): 0.1214871E4 0.1214871E4 +(0.123E2, ~0.123E1, 0.123E2): ~0.28290002E1 ~0.28290002E1 +(0.123E2, ~0.123E1, 0.31415927E1): ~0.11987408E2 ~0.11987408E2 +(0.123E2, ~0.123E1, 0.27182817E1): ~0.12410719E2 ~0.12410719E2 +(0.123E2, ~0.123E1, 0.123E1): ~0.13899E2 ~0.13899E2 +(0.123E2, ~0.123E1, 0.123): ~0.150060005E2 ~0.150060005E2 +(0.123E2, ~0.123E1, 0.123E~2): ~0.1512777E2 ~0.1512777E2 +(0.123E2, ~0.123E1, 0.11754944E~37): ~0.15129001E2 ~0.15129001E2 +(0.123E2, ~0.123E1, 0.5877472E~38): ~0.15129001E2 ~0.15129001E2 +(0.123E2, ~0.123E1, 0.1E~44): ~0.15129001E2 ~0.15129001E2 +(0.123E2, ~0.123E1, 0.0): ~0.15129001E2 ~0.15129001E2 +(0.123E2, ~0.123E1, ~0.123E4): ~0.1245129E4 ~0.1245129E4 +(0.123E2, ~0.123E1, ~0.123E2): ~0.27429E2 ~0.27429E2 +(0.123E2, ~0.123E1, ~0.31415927E1): ~0.18270594E2 ~0.18270594E2 +(0.123E2, ~0.123E1, ~0.27182817E1): ~0.17847282E2 ~0.17847282E2 +(0.123E2, ~0.123E1, ~0.123E1): ~0.16359001E2 ~0.16359001E2 +(0.123E2, ~0.123E1, ~0.123): ~0.15252001E2 ~0.15252001E2 +(0.123E2, ~0.123E1, ~0.123E~2): ~0.15130231E2 ~0.15130231E2 +(0.123E2, ~0.123E1, ~0.11754944E~37): ~0.15129001E2 ~0.15129001E2 +(0.123E2, ~0.123E1, ~0.5877472E~38): ~0.15129001E2 ~0.15129001E2 +(0.123E2, ~0.123E1, ~0.1E~44): ~0.15129001E2 ~0.15129001E2 +(0.123E2, ~0.123E1, ~0.0): ~0.15129001E2 ~0.15129001E2 +(0.123E2, ~0.123, 0.123E4): 0.1228487E4 0.1228487E4 +(0.123E2, ~0.123, 0.123E2): 0.107871E2 0.107871E2 +(0.123E2, ~0.123, 0.31415927E1): 0.16286926E1 0.16286926E1 +(0.123E2, ~0.123, 0.27182817E1): 0.12053816E1 0.12053816E1 +(0.123E2, ~0.123, 0.123E1): ~0.28290004 ~0.28290004 +(0.123E2, ~0.123, 0.123): ~0.13899001E1 ~0.13899001E1 +(0.123E2, ~0.123, 0.123E~2): ~0.15116701E1 ~0.15116701E1 +(0.123E2, ~0.123, 0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(0.123E2, ~0.123, 0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(0.123E2, ~0.123, 0.1E~44): ~0.15129001E1 ~0.15129001E1 +(0.123E2, ~0.123, 0.0): ~0.15129001E1 ~0.15129001E1 +(0.123E2, ~0.123, ~0.123E4): ~0.1231513E4 ~0.1231513E4 +(0.123E2, ~0.123, ~0.123E2): ~0.13812901E2 ~0.13812901E2 +(0.123E2, ~0.123, ~0.31415927E1): ~0.4654493E1 ~0.4654493E1 +(0.123E2, ~0.123, ~0.27182817E1): ~0.42311816E1 ~0.42311816E1 +(0.123E2, ~0.123, ~0.123E1): ~0.27429001E1 ~0.27429001E1 +(0.123E2, ~0.123, ~0.123): ~0.16359E1 ~0.16359E1 +(0.123E2, ~0.123, ~0.123E~2): ~0.15141301E1 ~0.15141301E1 +(0.123E2, ~0.123, ~0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(0.123E2, ~0.123, ~0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(0.123E2, ~0.123, ~0.1E~44): ~0.15129001E1 ~0.15129001E1 +(0.123E2, ~0.123, ~0.0): ~0.15129001E1 ~0.15129001E1 +(0.123E2, ~0.123E~2, 0.123E4): 0.12299849E4 0.12299849E4 +(0.123E2, ~0.123E~2, 0.123E2): 0.12284871E2 0.12284871E2 +(0.123E2, ~0.123E~2, 0.31415927E1): 0.31264637E1 0.31264637E1 +(0.123E2, ~0.123E~2, 0.27182817E1): 0.27031527E1 0.27031527E1 +(0.123E2, ~0.123E~2, 0.123E1): 0.1214871E1 0.1214871E1 +(0.123E2, ~0.123E~2, 0.123): 0.107871 0.107871 +(0.123E2, ~0.123E~2, 0.123E~2): ~0.13899001E~1 ~0.13899001E~1 +(0.123E2, ~0.123E~2, 0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(0.123E2, ~0.123E~2, 0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(0.123E2, ~0.123E~2, 0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(0.123E2, ~0.123E~2, 0.0): ~0.15129001E~1 ~0.15129001E~1 +(0.123E2, ~0.123E~2, ~0.123E4): ~0.12300151E4 ~0.12300151E4 +(0.123E2, ~0.123E~2, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(0.123E2, ~0.123E~2, ~0.31415927E1): ~0.31567218E1 ~0.31567218E1 +(0.123E2, ~0.123E~2, ~0.27182817E1): ~0.27334108E1 ~0.27334108E1 +(0.123E2, ~0.123E~2, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(0.123E2, ~0.123E~2, ~0.123): ~0.13812901 ~0.13812901 +(0.123E2, ~0.123E~2, ~0.123E~2): ~0.16359001E~1 ~0.16359001E~1 +(0.123E2, ~0.123E~2, ~0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(0.123E2, ~0.123E~2, ~0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(0.123E2, ~0.123E~2, ~0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(0.123E2, ~0.123E~2, ~0.0): ~0.15129001E~1 ~0.15129001E~1 +(0.123E2, ~0.11754944E~37, 0.1E~44): ~0.14458581E~36 ~0.14458581E~36 +(0.123E2, ~0.11754944E~37, ~0.1E~44): ~0.14458581E~36 ~0.14458581E~36 +(0.123E2, ~0.5877472E~38, 0.1E~44): ~0.72292904E~37 ~0.72292904E~37 +(0.123E2, ~0.5877472E~38, ~0.1E~44): ~0.72292904E~37 ~0.72292904E~37 +(0.123E2, ~0.1E~44, 0.11754944E~37): 0.11754927E~37 0.11754927E~37 +(0.123E2, ~0.1E~44, 0.5877472E~38): 0.5877455E~38 0.5877455E~38 +(0.123E2, ~0.1E~44, 0.1E~44): ~0.15E~43 ~0.15E~43 +(0.123E2, ~0.1E~44, 0.0): ~0.17E~43 ~0.17E~43 +(0.123E2, ~0.1E~44, ~0.11754944E~37): ~0.1175496E~37 ~0.1175496E~37 +(0.123E2, ~0.1E~44, ~0.5877472E~38): ~0.5877489E~38 ~0.5877489E~38 +(0.123E2, ~0.1E~44, ~0.1E~44): ~0.18E~43 ~0.18E~43 +(0.123E2, ~0.1E~44, ~0.0): ~0.17E~43 ~0.17E~43 +(0.31415927E1, 0.34028235E39, 0.34028235E39): inf inf +(0.31415927E1, 0.34028235E39, 0.17014117E39): inf inf +(0.31415927E1, 0.34028235E39, 0.123E4): inf inf +(0.31415927E1, 0.34028235E39, 0.123E2): inf inf +(0.31415927E1, 0.34028235E39, 0.31415927E1): inf inf +(0.31415927E1, 0.34028235E39, 0.27182817E1): inf inf +(0.31415927E1, 0.34028235E39, 0.123E1): inf inf +(0.31415927E1, 0.34028235E39, 0.123): inf inf +(0.31415927E1, 0.34028235E39, 0.123E~2): inf inf +(0.31415927E1, 0.34028235E39, 0.11754944E~37): inf inf +(0.31415927E1, 0.34028235E39, 0.5877472E~38): inf inf +(0.31415927E1, 0.34028235E39, 0.1E~44): inf inf +(0.31415927E1, 0.34028235E39, 0.0): inf inf +(0.31415927E1, 0.34028235E39, ~0.34028235E39): inf inf +(0.31415927E1, 0.34028235E39, ~0.17014117E39): inf inf +(0.31415927E1, 0.34028235E39, ~0.123E4): inf inf +(0.31415927E1, 0.34028235E39, ~0.123E2): inf inf +(0.31415927E1, 0.34028235E39, ~0.31415927E1): inf inf +(0.31415927E1, 0.34028235E39, ~0.27182817E1): inf inf +(0.31415927E1, 0.34028235E39, ~0.123E1): inf inf +(0.31415927E1, 0.34028235E39, ~0.123): inf inf +(0.31415927E1, 0.34028235E39, ~0.123E~2): inf inf +(0.31415927E1, 0.34028235E39, ~0.11754944E~37): inf inf +(0.31415927E1, 0.34028235E39, ~0.5877472E~38): inf inf +(0.31415927E1, 0.34028235E39, ~0.1E~44): inf inf +(0.31415927E1, 0.34028235E39, ~0.0): inf inf +(0.31415927E1, 0.17014117E39, 0.34028235E39): inf inf +(0.31415927E1, 0.17014117E39, 0.17014117E39): inf inf +(0.31415927E1, 0.17014117E39, 0.123E4): inf inf +(0.31415927E1, 0.17014117E39, 0.123E2): inf inf +(0.31415927E1, 0.17014117E39, 0.31415927E1): inf inf +(0.31415927E1, 0.17014117E39, 0.27182817E1): inf inf +(0.31415927E1, 0.17014117E39, 0.123E1): inf inf +(0.31415927E1, 0.17014117E39, 0.123): inf inf +(0.31415927E1, 0.17014117E39, 0.123E~2): inf inf +(0.31415927E1, 0.17014117E39, 0.11754944E~37): inf inf +(0.31415927E1, 0.17014117E39, 0.5877472E~38): inf inf +(0.31415927E1, 0.17014117E39, 0.1E~44): inf inf +(0.31415927E1, 0.17014117E39, 0.0): inf inf +(0.31415927E1, 0.17014117E39, ~0.34028235E39): 0.19423192E39 0.19423192E39 +(0.31415927E1, 0.17014117E39, ~0.17014117E39): inf inf +(0.31415927E1, 0.17014117E39, ~0.123E4): inf inf +(0.31415927E1, 0.17014117E39, ~0.123E2): inf inf +(0.31415927E1, 0.17014117E39, ~0.31415927E1): inf inf +(0.31415927E1, 0.17014117E39, ~0.27182817E1): inf inf +(0.31415927E1, 0.17014117E39, ~0.123E1): inf inf +(0.31415927E1, 0.17014117E39, ~0.123): inf inf +(0.31415927E1, 0.17014117E39, ~0.123E~2): inf inf +(0.31415927E1, 0.17014117E39, ~0.11754944E~37): inf inf +(0.31415927E1, 0.17014117E39, ~0.5877472E~38): inf inf +(0.31415927E1, 0.17014117E39, ~0.1E~44): inf inf +(0.31415927E1, 0.17014117E39, ~0.0): inf inf +(0.31415927E1, 0.123E4, 0.123E4): 0.5094159E4 0.5094159E4 +(0.31415927E1, 0.123E4, 0.123E2): 0.3876459E4 0.3876459E4 +(0.31415927E1, 0.123E4, 0.31415927E1): 0.38673008E4 0.38673008E4 +(0.31415927E1, 0.123E4, 0.27182817E1): 0.38668774E4 0.38668774E4 +(0.31415927E1, 0.123E4, 0.123E1): 0.38653892E4 0.38653892E4 +(0.31415927E1, 0.123E4, 0.123): 0.3864282E4 0.3864282E4 +(0.31415927E1, 0.123E4, 0.123E~2): 0.38641604E4 0.38641604E4 +(0.31415927E1, 0.123E4, 0.11754944E~37): 0.38641592E4 0.38641592E4 +(0.31415927E1, 0.123E4, 0.5877472E~38): 0.38641592E4 0.38641592E4 +(0.31415927E1, 0.123E4, 0.1E~44): 0.38641592E4 0.38641592E4 +(0.31415927E1, 0.123E4, 0.0): 0.38641592E4 0.38641592E4 +(0.31415927E1, 0.123E4, ~0.123E4): 0.26341592E4 0.26341592E4 +(0.31415927E1, 0.123E4, ~0.123E2): 0.38518591E4 0.38518591E4 +(0.31415927E1, 0.123E4, ~0.31415927E1): 0.38610176E4 0.38610176E4 +(0.31415927E1, 0.123E4, ~0.27182817E1): 0.38614407E4 0.38614407E4 +(0.31415927E1, 0.123E4, ~0.123E1): 0.3862929E4 0.3862929E4 +(0.31415927E1, 0.123E4, ~0.123): 0.38640361E4 0.38640361E4 +(0.31415927E1, 0.123E4, ~0.123E~2): 0.3864158E4 0.3864158E4 +(0.31415927E1, 0.123E4, ~0.11754944E~37): 0.38641592E4 0.38641592E4 +(0.31415927E1, 0.123E4, ~0.5877472E~38): 0.38641592E4 0.38641592E4 +(0.31415927E1, 0.123E4, ~0.1E~44): 0.38641592E4 0.38641592E4 +(0.31415927E1, 0.123E4, ~0.0): 0.38641592E4 0.38641592E4 +(0.31415927E1, 0.123E2, 0.123E4): 0.12686416E4 0.12686416E4 +(0.31415927E1, 0.123E2, 0.123E2): 0.50941593E2 0.50941593E2 +(0.31415927E1, 0.123E2, 0.31415927E1): 0.41783184E2 0.41783184E2 +(0.31415927E1, 0.123E2, 0.27182817E1): 0.41359875E2 0.41359875E2 +(0.31415927E1, 0.123E2, 0.123E1): 0.3987159E2 0.3987159E2 +(0.31415927E1, 0.123E2, 0.123): 0.3876459E2 0.3876459E2 +(0.31415927E1, 0.123E2, 0.123E~2): 0.38642822E2 0.38642822E2 +(0.31415927E1, 0.123E2, 0.11754944E~37): 0.3864159E2 0.3864159E2 +(0.31415927E1, 0.123E2, 0.5877472E~38): 0.3864159E2 0.3864159E2 +(0.31415927E1, 0.123E2, 0.1E~44): 0.3864159E2 0.3864159E2 +(0.31415927E1, 0.123E2, 0.0): 0.3864159E2 0.3864159E2 +(0.31415927E1, 0.123E2, ~0.123E4): ~0.11913584E4 ~0.11913584E4 +(0.31415927E1, 0.123E2, ~0.123E2): 0.2634159E2 0.2634159E2 +(0.31415927E1, 0.123E2, ~0.31415927E1): 0.355E2 0.355E2 +(0.31415927E1, 0.123E2, ~0.27182817E1): 0.3592331E2 0.3592331E2 +(0.31415927E1, 0.123E2, ~0.123E1): 0.3741159E2 0.3741159E2 +(0.31415927E1, 0.123E2, ~0.123): 0.38518593E2 0.38518593E2 +(0.31415927E1, 0.123E2, ~0.123E~2): 0.3864036E2 0.3864036E2 +(0.31415927E1, 0.123E2, ~0.11754944E~37): 0.3864159E2 0.3864159E2 +(0.31415927E1, 0.123E2, ~0.5877472E~38): 0.3864159E2 0.3864159E2 +(0.31415927E1, 0.123E2, ~0.1E~44): 0.3864159E2 0.3864159E2 +(0.31415927E1, 0.123E2, ~0.0): 0.3864159E2 0.3864159E2 +(0.31415927E1, 0.31415927E1, 0.123E4): 0.12398696E4 0.12398696E4 +(0.31415927E1, 0.31415927E1, 0.123E2): 0.22169605E2 0.22169605E2 +(0.31415927E1, 0.31415927E1, 0.31415927E1): 0.13011198E2 0.13011198E2 +(0.31415927E1, 0.31415927E1, 0.27182817E1): 0.12587887E2 0.12587887E2 +(0.31415927E1, 0.31415927E1, 0.123E1): 0.11099605E2 0.11099605E2 +(0.31415927E1, 0.31415927E1, 0.123): 0.9992605E1 0.9992605E1 +(0.31415927E1, 0.31415927E1, 0.123E~2): 0.9870835E1 0.9870835E1 +(0.31415927E1, 0.31415927E1, 0.11754944E~37): 0.9869605E1 0.9869605E1 +(0.31415927E1, 0.31415927E1, 0.5877472E~38): 0.9869605E1 0.9869605E1 +(0.31415927E1, 0.31415927E1, 0.1E~44): 0.9869605E1 0.9869605E1 +(0.31415927E1, 0.31415927E1, 0.0): 0.9869605E1 0.9869605E1 +(0.31415927E1, 0.31415927E1, ~0.123E4): ~0.12201304E4 ~0.12201304E4 +(0.31415927E1, 0.31415927E1, ~0.123E2): ~0.24303951E1 ~0.24303951E1 +(0.31415927E1, 0.31415927E1, ~0.31415927E1): 0.6728012E1 0.6728012E1 +(0.31415927E1, 0.31415927E1, ~0.27182817E1): 0.71513233E1 0.71513233E1 +(0.31415927E1, 0.31415927E1, ~0.123E1): 0.8639605E1 0.8639605E1 +(0.31415927E1, 0.31415927E1, ~0.123): 0.9746605E1 0.9746605E1 +(0.31415927E1, 0.31415927E1, ~0.123E~2): 0.9868375E1 0.9868375E1 +(0.31415927E1, 0.31415927E1, ~0.11754944E~37): 0.9869605E1 0.9869605E1 +(0.31415927E1, 0.31415927E1, ~0.5877472E~38): 0.9869605E1 0.9869605E1 +(0.31415927E1, 0.31415927E1, ~0.1E~44): 0.9869605E1 0.9869605E1 +(0.31415927E1, 0.31415927E1, ~0.0): 0.9869605E1 0.9869605E1 +(0.31415927E1, 0.27182817E1, 0.123E4): 0.12385398E4 0.12385398E4 +(0.31415927E1, 0.27182817E1, 0.123E2): 0.20839735E2 0.20839735E2 +(0.31415927E1, 0.27182817E1, 0.31415927E1): 0.11681327E2 0.11681327E2 +(0.31415927E1, 0.27182817E1, 0.27182817E1): 0.11258016E2 0.11258016E2 +(0.31415927E1, 0.27182817E1, 0.123E1): 0.9769734E1 0.9769734E1 +(0.31415927E1, 0.27182817E1, 0.123): 0.8662734E1 0.8662734E1 +(0.31415927E1, 0.27182817E1, 0.123E~2): 0.8540964E1 0.8540964E1 +(0.31415927E1, 0.27182817E1, 0.11754944E~37): 0.8539734E1 0.8539734E1 +(0.31415927E1, 0.27182817E1, 0.5877472E~38): 0.8539734E1 0.8539734E1 +(0.31415927E1, 0.27182817E1, 0.1E~44): 0.8539734E1 0.8539734E1 +(0.31415927E1, 0.27182817E1, 0.0): 0.8539734E1 0.8539734E1 +(0.31415927E1, 0.27182817E1, ~0.123E4): ~0.12214602E4 ~0.12214602E4 +(0.31415927E1, 0.27182817E1, ~0.123E2): ~0.3760266E1 ~0.3760266E1 +(0.31415927E1, 0.27182817E1, ~0.31415927E1): 0.53981414E1 0.53981414E1 +(0.31415927E1, 0.27182817E1, ~0.27182817E1): 0.58214526E1 0.58214526E1 +(0.31415927E1, 0.27182817E1, ~0.123E1): 0.73097343E1 0.73097343E1 +(0.31415927E1, 0.27182817E1, ~0.123): 0.8416734E1 0.8416734E1 +(0.31415927E1, 0.27182817E1, ~0.123E~2): 0.8538505E1 0.8538505E1 +(0.31415927E1, 0.27182817E1, ~0.11754944E~37): 0.8539734E1 0.8539734E1 +(0.31415927E1, 0.27182817E1, ~0.5877472E~38): 0.8539734E1 0.8539734E1 +(0.31415927E1, 0.27182817E1, ~0.1E~44): 0.8539734E1 0.8539734E1 +(0.31415927E1, 0.27182817E1, ~0.0): 0.8539734E1 0.8539734E1 +(0.31415927E1, 0.123E1, 0.123E4): 0.12338641E4 0.12338641E4 +(0.31415927E1, 0.123E1, 0.123E2): 0.1616416E2 0.1616416E2 +(0.31415927E1, 0.123E1, 0.31415927E1): 0.7005752E1 0.7005752E1 +(0.31415927E1, 0.123E1, 0.27182817E1): 0.6582441E1 0.6582441E1 +(0.31415927E1, 0.123E1, 0.123E1): 0.5094159E1 0.5094159E1 +(0.31415927E1, 0.123E1, 0.123): 0.39871593E1 0.39871593E1 +(0.31415927E1, 0.123E1, 0.123E~2): 0.3865389E1 0.3865389E1 +(0.31415927E1, 0.123E1, 0.11754944E~37): 0.3864159E1 0.3864159E1 +(0.31415927E1, 0.123E1, 0.5877472E~38): 0.3864159E1 0.3864159E1 +(0.31415927E1, 0.123E1, 0.1E~44): 0.3864159E1 0.3864159E1 +(0.31415927E1, 0.123E1, 0.0): 0.3864159E1 0.3864159E1 +(0.31415927E1, 0.123E1, ~0.123E4): ~0.12261359E4 ~0.12261359E4 +(0.31415927E1, 0.123E1, ~0.123E2): ~0.8435841E1 ~0.8435841E1 +(0.31415927E1, 0.123E1, ~0.31415927E1): 0.72256637 0.72256637 +(0.31415927E1, 0.123E1, ~0.27182817E1): 0.11458774E1 0.11458774E1 +(0.31415927E1, 0.123E1, ~0.123E1): 0.2634159E1 0.2634159E1 +(0.31415927E1, 0.123E1, ~0.123): 0.37411592E1 0.37411592E1 +(0.31415927E1, 0.123E1, ~0.123E~2): 0.3862929E1 0.3862929E1 +(0.31415927E1, 0.123E1, ~0.11754944E~37): 0.3864159E1 0.3864159E1 +(0.31415927E1, 0.123E1, ~0.5877472E~38): 0.3864159E1 0.3864159E1 +(0.31415927E1, 0.123E1, ~0.1E~44): 0.3864159E1 0.3864159E1 +(0.31415927E1, 0.123E1, ~0.0): 0.3864159E1 0.3864159E1 +(0.31415927E1, 0.123, 0.123E4): 0.12303865E4 0.12303865E4 +(0.31415927E1, 0.123, 0.123E2): 0.12686416E2 0.12686416E2 +(0.31415927E1, 0.123, 0.31415927E1): 0.35280087E1 0.35280087E1 +(0.31415927E1, 0.123, 0.27182817E1): 0.31046977E1 0.31046977E1 +(0.31415927E1, 0.123, 0.123E1): 0.1616416E1 0.1616416E1 +(0.31415927E1, 0.123, 0.123): 0.5094159 0.5094159 +(0.31415927E1, 0.123, 0.123E~2): 0.38764593 0.38764593 +(0.31415927E1, 0.123, 0.11754944E~37): 0.38641593 0.38641593 +(0.31415927E1, 0.123, 0.5877472E~38): 0.38641593 0.38641593 +(0.31415927E1, 0.123, 0.1E~44): 0.38641593 0.38641593 +(0.31415927E1, 0.123, 0.0): 0.38641593 0.38641593 +(0.31415927E1, 0.123, ~0.123E4): ~0.12296135E4 ~0.12296135E4 +(0.31415927E1, 0.123, ~0.123E2): ~0.11913585E2 ~0.11913585E2 +(0.31415927E1, 0.123, ~0.31415927E1): ~0.27551768E1 ~0.27551768E1 +(0.31415927E1, 0.123, ~0.27182817E1): ~0.23318658E1 ~0.23318658E1 +(0.31415927E1, 0.123, ~0.123E1): ~0.8435841 ~0.8435841 +(0.31415927E1, 0.123, ~0.123): 0.2634159 0.2634159 +(0.31415927E1, 0.123, ~0.123E~2): 0.38518593 0.38518593 +(0.31415927E1, 0.123, ~0.11754944E~37): 0.38641593 0.38641593 +(0.31415927E1, 0.123, ~0.5877472E~38): 0.38641593 0.38641593 +(0.31415927E1, 0.123, ~0.1E~44): 0.38641593 0.38641593 +(0.31415927E1, 0.123, ~0.0): 0.38641593 0.38641593 +(0.31415927E1, 0.123E~2, 0.123E4): 0.12300039E4 0.12300039E4 +(0.31415927E1, 0.123E~2, 0.123E2): 0.123038645E2 0.123038645E2 +(0.31415927E1, 0.123E~2, 0.31415927E1): 0.31454568E1 0.31454568E1 +(0.31415927E1, 0.123E~2, 0.27182817E1): 0.27221458E1 0.27221458E1 +(0.31415927E1, 0.123E~2, 0.123E1): 0.12338642E1 0.12338642E1 +(0.31415927E1, 0.123E~2, 0.123): 0.12686417 0.12686417 +(0.31415927E1, 0.123E~2, 0.123E~2): 0.50941594E~2 0.50941594E~2 +(0.31415927E1, 0.123E~2, 0.11754944E~37): 0.38641593E~2 0.38641593E~2 +(0.31415927E1, 0.123E~2, 0.5877472E~38): 0.38641593E~2 0.38641593E~2 +(0.31415927E1, 0.123E~2, 0.1E~44): 0.38641593E~2 0.38641593E~2 +(0.31415927E1, 0.123E~2, 0.0): 0.38641593E~2 0.38641593E~2 +(0.31415927E1, 0.123E~2, ~0.123E4): ~0.12299961E4 ~0.12299961E4 +(0.31415927E1, 0.123E~2, ~0.123E2): ~0.12296136E2 ~0.12296136E2 +(0.31415927E1, 0.123E~2, ~0.31415927E1): ~0.31377287E1 ~0.31377287E1 +(0.31415927E1, 0.123E~2, ~0.27182817E1): ~0.27144177E1 ~0.27144177E1 +(0.31415927E1, 0.123E~2, ~0.123E1): ~0.12261358E1 ~0.12261358E1 +(0.31415927E1, 0.123E~2, ~0.123): ~0.11913584 ~0.11913584 +(0.31415927E1, 0.123E~2, ~0.123E~2): 0.26341593E~2 0.26341593E~2 +(0.31415927E1, 0.123E~2, ~0.11754944E~37): 0.38641593E~2 0.38641593E~2 +(0.31415927E1, 0.123E~2, ~0.5877472E~38): 0.38641593E~2 0.38641593E~2 +(0.31415927E1, 0.123E~2, ~0.1E~44): 0.38641593E~2 0.38641593E~2 +(0.31415927E1, 0.123E~2, ~0.0): 0.38641593E~2 0.38641593E~2 +(0.31415927E1, 0.11754944E~37, 0.11754944E~37): 0.4868419E~37 0.4868419E~37 +(0.31415927E1, 0.11754944E~37, 0.1E~44): 0.36929248E~37 0.36929248E~37 +(0.31415927E1, 0.11754944E~37, ~0.1E~44): 0.36929242E~37 0.36929242E~37 +(0.31415927E1, 0.5877472E~38, 0.11754944E~37): 0.30219568E~37 0.30219568E~37 +(0.31415927E1, 0.5877472E~38, 0.5877472E~38): 0.24342096E~37 0.24342096E~37 +(0.31415927E1, 0.1E~44, 0.11754944E~37): 0.11754948E~37 0.11754948E~37 +(0.31415927E1, 0.1E~44, 0.5877472E~38): 0.5877476E~38 0.5877476E~38 +(0.31415927E1, 0.1E~44, 0.1E~44): 0.6E~44 0.6E~44 +(0.31415927E1, 0.1E~44, 0.0): 0.4E~44 0.4E~44 +(0.31415927E1, 0.1E~44, ~0.11754944E~37): ~0.1175494E~37 ~0.1175494E~37 +(0.31415927E1, 0.1E~44, ~0.5877472E~38): ~0.5877468E~38 ~0.5877468E~38 +(0.31415927E1, 0.1E~44, ~0.1E~44): 0.3E~44 0.3E~44 +(0.31415927E1, 0.1E~44, ~0.0): 0.4E~44 0.4E~44 +(0.31415927E1, ~0.34028235E39, 0.34028235E39): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.17014117E39): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.123E4): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.123E2): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.31415927E1): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.27182817E1): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.123E1): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.123): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.123E~2): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.11754944E~37): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.5877472E~38): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.1E~44): ~inf ~inf +(0.31415927E1, ~0.34028235E39, 0.0): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.34028235E39): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.17014117E39): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.123E4): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.123E2): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.31415927E1): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.27182817E1): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.123E1): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.123): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.123E~2): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.11754944E~37): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.5877472E~38): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.1E~44): ~inf ~inf +(0.31415927E1, ~0.34028235E39, ~0.0): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.34028235E39): ~0.19423192E39 ~0.19423192E39 +(0.31415927E1, ~0.17014117E39, 0.17014117E39): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.123E4): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.123E2): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.31415927E1): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.27182817E1): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.123E1): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.123): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.123E~2): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.11754944E~37): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.5877472E~38): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.1E~44): ~inf ~inf +(0.31415927E1, ~0.17014117E39, 0.0): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.34028235E39): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.17014117E39): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.123E4): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.123E2): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.31415927E1): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.27182817E1): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.123E1): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.123): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.123E~2): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.11754944E~37): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.5877472E~38): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.1E~44): ~inf ~inf +(0.31415927E1, ~0.17014117E39, ~0.0): ~inf ~inf +(0.31415927E1, ~0.123E4, 0.123E4): ~0.26341592E4 ~0.26341592E4 +(0.31415927E1, ~0.123E4, 0.123E2): ~0.38518591E4 ~0.38518591E4 +(0.31415927E1, ~0.123E4, 0.31415927E1): ~0.38610176E4 ~0.38610176E4 +(0.31415927E1, ~0.123E4, 0.27182817E1): ~0.38614407E4 ~0.38614407E4 +(0.31415927E1, ~0.123E4, 0.123E1): ~0.3862929E4 ~0.3862929E4 +(0.31415927E1, ~0.123E4, 0.123): ~0.38640361E4 ~0.38640361E4 +(0.31415927E1, ~0.123E4, 0.123E~2): ~0.3864158E4 ~0.3864158E4 +(0.31415927E1, ~0.123E4, 0.11754944E~37): ~0.38641592E4 ~0.38641592E4 +(0.31415927E1, ~0.123E4, 0.5877472E~38): ~0.38641592E4 ~0.38641592E4 +(0.31415927E1, ~0.123E4, 0.1E~44): ~0.38641592E4 ~0.38641592E4 +(0.31415927E1, ~0.123E4, 0.0): ~0.38641592E4 ~0.38641592E4 +(0.31415927E1, ~0.123E4, ~0.123E4): ~0.5094159E4 ~0.5094159E4 +(0.31415927E1, ~0.123E4, ~0.123E2): ~0.3876459E4 ~0.3876459E4 +(0.31415927E1, ~0.123E4, ~0.31415927E1): ~0.38673008E4 ~0.38673008E4 +(0.31415927E1, ~0.123E4, ~0.27182817E1): ~0.38668774E4 ~0.38668774E4 +(0.31415927E1, ~0.123E4, ~0.123E1): ~0.38653892E4 ~0.38653892E4 +(0.31415927E1, ~0.123E4, ~0.123): ~0.3864282E4 ~0.3864282E4 +(0.31415927E1, ~0.123E4, ~0.123E~2): ~0.38641604E4 ~0.38641604E4 +(0.31415927E1, ~0.123E4, ~0.11754944E~37): ~0.38641592E4 ~0.38641592E4 +(0.31415927E1, ~0.123E4, ~0.5877472E~38): ~0.38641592E4 ~0.38641592E4 +(0.31415927E1, ~0.123E4, ~0.1E~44): ~0.38641592E4 ~0.38641592E4 +(0.31415927E1, ~0.123E4, ~0.0): ~0.38641592E4 ~0.38641592E4 +(0.31415927E1, ~0.123E2, 0.123E4): 0.11913584E4 0.11913584E4 +(0.31415927E1, ~0.123E2, 0.123E2): ~0.2634159E2 ~0.2634159E2 +(0.31415927E1, ~0.123E2, 0.31415927E1): ~0.355E2 ~0.355E2 +(0.31415927E1, ~0.123E2, 0.27182817E1): ~0.3592331E2 ~0.3592331E2 +(0.31415927E1, ~0.123E2, 0.123E1): ~0.3741159E2 ~0.3741159E2 +(0.31415927E1, ~0.123E2, 0.123): ~0.38518593E2 ~0.38518593E2 +(0.31415927E1, ~0.123E2, 0.123E~2): ~0.3864036E2 ~0.3864036E2 +(0.31415927E1, ~0.123E2, 0.11754944E~37): ~0.3864159E2 ~0.3864159E2 +(0.31415927E1, ~0.123E2, 0.5877472E~38): ~0.3864159E2 ~0.3864159E2 +(0.31415927E1, ~0.123E2, 0.1E~44): ~0.3864159E2 ~0.3864159E2 +(0.31415927E1, ~0.123E2, 0.0): ~0.3864159E2 ~0.3864159E2 +(0.31415927E1, ~0.123E2, ~0.123E4): ~0.12686416E4 ~0.12686416E4 +(0.31415927E1, ~0.123E2, ~0.123E2): ~0.50941593E2 ~0.50941593E2 +(0.31415927E1, ~0.123E2, ~0.31415927E1): ~0.41783184E2 ~0.41783184E2 +(0.31415927E1, ~0.123E2, ~0.27182817E1): ~0.41359875E2 ~0.41359875E2 +(0.31415927E1, ~0.123E2, ~0.123E1): ~0.3987159E2 ~0.3987159E2 +(0.31415927E1, ~0.123E2, ~0.123): ~0.3876459E2 ~0.3876459E2 +(0.31415927E1, ~0.123E2, ~0.123E~2): ~0.38642822E2 ~0.38642822E2 +(0.31415927E1, ~0.123E2, ~0.11754944E~37): ~0.3864159E2 ~0.3864159E2 +(0.31415927E1, ~0.123E2, ~0.5877472E~38): ~0.3864159E2 ~0.3864159E2 +(0.31415927E1, ~0.123E2, ~0.1E~44): ~0.3864159E2 ~0.3864159E2 +(0.31415927E1, ~0.123E2, ~0.0): ~0.3864159E2 ~0.3864159E2 +(0.31415927E1, ~0.31415927E1, 0.123E4): 0.12201304E4 0.12201304E4 +(0.31415927E1, ~0.31415927E1, 0.123E2): 0.24303951E1 0.24303951E1 +(0.31415927E1, ~0.31415927E1, 0.31415927E1): ~0.6728012E1 ~0.6728012E1 +(0.31415927E1, ~0.31415927E1, 0.27182817E1): ~0.71513233E1 ~0.71513233E1 +(0.31415927E1, ~0.31415927E1, 0.123E1): ~0.8639605E1 ~0.8639605E1 +(0.31415927E1, ~0.31415927E1, 0.123): ~0.9746605E1 ~0.9746605E1 +(0.31415927E1, ~0.31415927E1, 0.123E~2): ~0.9868375E1 ~0.9868375E1 +(0.31415927E1, ~0.31415927E1, 0.11754944E~37): ~0.9869605E1 ~0.9869605E1 +(0.31415927E1, ~0.31415927E1, 0.5877472E~38): ~0.9869605E1 ~0.9869605E1 +(0.31415927E1, ~0.31415927E1, 0.1E~44): ~0.9869605E1 ~0.9869605E1 +(0.31415927E1, ~0.31415927E1, 0.0): ~0.9869605E1 ~0.9869605E1 +(0.31415927E1, ~0.31415927E1, ~0.123E4): ~0.12398696E4 ~0.12398696E4 +(0.31415927E1, ~0.31415927E1, ~0.123E2): ~0.22169605E2 ~0.22169605E2 +(0.31415927E1, ~0.31415927E1, ~0.31415927E1): ~0.13011198E2 ~0.13011198E2 +(0.31415927E1, ~0.31415927E1, ~0.27182817E1): ~0.12587887E2 ~0.12587887E2 +(0.31415927E1, ~0.31415927E1, ~0.123E1): ~0.11099605E2 ~0.11099605E2 +(0.31415927E1, ~0.31415927E1, ~0.123): ~0.9992605E1 ~0.9992605E1 +(0.31415927E1, ~0.31415927E1, ~0.123E~2): ~0.9870835E1 ~0.9870835E1 +(0.31415927E1, ~0.31415927E1, ~0.11754944E~37): ~0.9869605E1 ~0.9869605E1 +(0.31415927E1, ~0.31415927E1, ~0.5877472E~38): ~0.9869605E1 ~0.9869605E1 +(0.31415927E1, ~0.31415927E1, ~0.1E~44): ~0.9869605E1 ~0.9869605E1 +(0.31415927E1, ~0.31415927E1, ~0.0): ~0.9869605E1 ~0.9869605E1 +(0.31415927E1, ~0.27182817E1, 0.123E4): 0.12214602E4 0.12214602E4 +(0.31415927E1, ~0.27182817E1, 0.123E2): 0.3760266E1 0.3760266E1 +(0.31415927E1, ~0.27182817E1, 0.31415927E1): ~0.53981414E1 ~0.53981414E1 +(0.31415927E1, ~0.27182817E1, 0.27182817E1): ~0.58214526E1 ~0.58214526E1 +(0.31415927E1, ~0.27182817E1, 0.123E1): ~0.73097343E1 ~0.73097343E1 +(0.31415927E1, ~0.27182817E1, 0.123): ~0.8416734E1 ~0.8416734E1 +(0.31415927E1, ~0.27182817E1, 0.123E~2): ~0.8538505E1 ~0.8538505E1 +(0.31415927E1, ~0.27182817E1, 0.11754944E~37): ~0.8539734E1 ~0.8539734E1 +(0.31415927E1, ~0.27182817E1, 0.5877472E~38): ~0.8539734E1 ~0.8539734E1 +(0.31415927E1, ~0.27182817E1, 0.1E~44): ~0.8539734E1 ~0.8539734E1 +(0.31415927E1, ~0.27182817E1, 0.0): ~0.8539734E1 ~0.8539734E1 +(0.31415927E1, ~0.27182817E1, ~0.123E4): ~0.12385398E4 ~0.12385398E4 +(0.31415927E1, ~0.27182817E1, ~0.123E2): ~0.20839735E2 ~0.20839735E2 +(0.31415927E1, ~0.27182817E1, ~0.31415927E1): ~0.11681327E2 ~0.11681327E2 +(0.31415927E1, ~0.27182817E1, ~0.27182817E1): ~0.11258016E2 ~0.11258016E2 +(0.31415927E1, ~0.27182817E1, ~0.123E1): ~0.9769734E1 ~0.9769734E1 +(0.31415927E1, ~0.27182817E1, ~0.123): ~0.8662734E1 ~0.8662734E1 +(0.31415927E1, ~0.27182817E1, ~0.123E~2): ~0.8540964E1 ~0.8540964E1 +(0.31415927E1, ~0.27182817E1, ~0.11754944E~37): ~0.8539734E1 ~0.8539734E1 +(0.31415927E1, ~0.27182817E1, ~0.5877472E~38): ~0.8539734E1 ~0.8539734E1 +(0.31415927E1, ~0.27182817E1, ~0.1E~44): ~0.8539734E1 ~0.8539734E1 +(0.31415927E1, ~0.27182817E1, ~0.0): ~0.8539734E1 ~0.8539734E1 +(0.31415927E1, ~0.123E1, 0.123E4): 0.12261359E4 0.12261359E4 +(0.31415927E1, ~0.123E1, 0.123E2): 0.8435841E1 0.8435841E1 +(0.31415927E1, ~0.123E1, 0.31415927E1): ~0.72256637 ~0.72256637 +(0.31415927E1, ~0.123E1, 0.27182817E1): ~0.11458774E1 ~0.11458774E1 +(0.31415927E1, ~0.123E1, 0.123E1): ~0.2634159E1 ~0.2634159E1 +(0.31415927E1, ~0.123E1, 0.123): ~0.37411592E1 ~0.37411592E1 +(0.31415927E1, ~0.123E1, 0.123E~2): ~0.3862929E1 ~0.3862929E1 +(0.31415927E1, ~0.123E1, 0.11754944E~37): ~0.3864159E1 ~0.3864159E1 +(0.31415927E1, ~0.123E1, 0.5877472E~38): ~0.3864159E1 ~0.3864159E1 +(0.31415927E1, ~0.123E1, 0.1E~44): ~0.3864159E1 ~0.3864159E1 +(0.31415927E1, ~0.123E1, 0.0): ~0.3864159E1 ~0.3864159E1 +(0.31415927E1, ~0.123E1, ~0.123E4): ~0.12338641E4 ~0.12338641E4 +(0.31415927E1, ~0.123E1, ~0.123E2): ~0.1616416E2 ~0.1616416E2 +(0.31415927E1, ~0.123E1, ~0.31415927E1): ~0.7005752E1 ~0.7005752E1 +(0.31415927E1, ~0.123E1, ~0.27182817E1): ~0.6582441E1 ~0.6582441E1 +(0.31415927E1, ~0.123E1, ~0.123E1): ~0.5094159E1 ~0.5094159E1 +(0.31415927E1, ~0.123E1, ~0.123): ~0.39871593E1 ~0.39871593E1 +(0.31415927E1, ~0.123E1, ~0.123E~2): ~0.3865389E1 ~0.3865389E1 +(0.31415927E1, ~0.123E1, ~0.11754944E~37): ~0.3864159E1 ~0.3864159E1 +(0.31415927E1, ~0.123E1, ~0.5877472E~38): ~0.3864159E1 ~0.3864159E1 +(0.31415927E1, ~0.123E1, ~0.1E~44): ~0.3864159E1 ~0.3864159E1 +(0.31415927E1, ~0.123E1, ~0.0): ~0.3864159E1 ~0.3864159E1 +(0.31415927E1, ~0.123, 0.123E4): 0.12296135E4 0.12296135E4 +(0.31415927E1, ~0.123, 0.123E2): 0.11913585E2 0.11913585E2 +(0.31415927E1, ~0.123, 0.31415927E1): 0.27551768E1 0.27551768E1 +(0.31415927E1, ~0.123, 0.27182817E1): 0.23318658E1 0.23318658E1 +(0.31415927E1, ~0.123, 0.123E1): 0.8435841 0.8435841 +(0.31415927E1, ~0.123, 0.123): ~0.2634159 ~0.2634159 +(0.31415927E1, ~0.123, 0.123E~2): ~0.38518593 ~0.38518593 +(0.31415927E1, ~0.123, 0.11754944E~37): ~0.38641593 ~0.38641593 +(0.31415927E1, ~0.123, 0.5877472E~38): ~0.38641593 ~0.38641593 +(0.31415927E1, ~0.123, 0.1E~44): ~0.38641593 ~0.38641593 +(0.31415927E1, ~0.123, 0.0): ~0.38641593 ~0.38641593 +(0.31415927E1, ~0.123, ~0.123E4): ~0.12303865E4 ~0.12303865E4 +(0.31415927E1, ~0.123, ~0.123E2): ~0.12686416E2 ~0.12686416E2 +(0.31415927E1, ~0.123, ~0.31415927E1): ~0.35280087E1 ~0.35280087E1 +(0.31415927E1, ~0.123, ~0.27182817E1): ~0.31046977E1 ~0.31046977E1 +(0.31415927E1, ~0.123, ~0.123E1): ~0.1616416E1 ~0.1616416E1 +(0.31415927E1, ~0.123, ~0.123): ~0.5094159 ~0.5094159 +(0.31415927E1, ~0.123, ~0.123E~2): ~0.38764593 ~0.38764593 +(0.31415927E1, ~0.123, ~0.11754944E~37): ~0.38641593 ~0.38641593 +(0.31415927E1, ~0.123, ~0.5877472E~38): ~0.38641593 ~0.38641593 +(0.31415927E1, ~0.123, ~0.1E~44): ~0.38641593 ~0.38641593 +(0.31415927E1, ~0.123, ~0.0): ~0.38641593 ~0.38641593 +(0.31415927E1, ~0.123E~2, 0.123E4): 0.12299961E4 0.12299961E4 +(0.31415927E1, ~0.123E~2, 0.123E2): 0.12296136E2 0.12296136E2 +(0.31415927E1, ~0.123E~2, 0.31415927E1): 0.31377287E1 0.31377287E1 +(0.31415927E1, ~0.123E~2, 0.27182817E1): 0.27144177E1 0.27144177E1 +(0.31415927E1, ~0.123E~2, 0.123E1): 0.12261358E1 0.12261358E1 +(0.31415927E1, ~0.123E~2, 0.123): 0.11913584 0.11913584 +(0.31415927E1, ~0.123E~2, 0.123E~2): ~0.26341593E~2 ~0.26341593E~2 +(0.31415927E1, ~0.123E~2, 0.11754944E~37): ~0.38641593E~2 ~0.38641593E~2 +(0.31415927E1, ~0.123E~2, 0.5877472E~38): ~0.38641593E~2 ~0.38641593E~2 +(0.31415927E1, ~0.123E~2, 0.1E~44): ~0.38641593E~2 ~0.38641593E~2 +(0.31415927E1, ~0.123E~2, 0.0): ~0.38641593E~2 ~0.38641593E~2 +(0.31415927E1, ~0.123E~2, ~0.123E4): ~0.12300039E4 ~0.12300039E4 +(0.31415927E1, ~0.123E~2, ~0.123E2): ~0.123038645E2 ~0.123038645E2 +(0.31415927E1, ~0.123E~2, ~0.31415927E1): ~0.31454568E1 ~0.31454568E1 +(0.31415927E1, ~0.123E~2, ~0.27182817E1): ~0.27221458E1 ~0.27221458E1 +(0.31415927E1, ~0.123E~2, ~0.123E1): ~0.12338642E1 ~0.12338642E1 +(0.31415927E1, ~0.123E~2, ~0.123): ~0.12686417 ~0.12686417 +(0.31415927E1, ~0.123E~2, ~0.123E~2): ~0.50941594E~2 ~0.50941594E~2 +(0.31415927E1, ~0.123E~2, ~0.11754944E~37): ~0.38641593E~2 ~0.38641593E~2 +(0.31415927E1, ~0.123E~2, ~0.5877472E~38): ~0.38641593E~2 ~0.38641593E~2 +(0.31415927E1, ~0.123E~2, ~0.1E~44): ~0.38641593E~2 ~0.38641593E~2 +(0.31415927E1, ~0.123E~2, ~0.0): ~0.38641593E~2 ~0.38641593E~2 +(0.31415927E1, ~0.11754944E~37, 0.1E~44): ~0.36929242E~37 ~0.36929242E~37 +(0.31415927E1, ~0.11754944E~37, ~0.11754944E~37): ~0.4868419E~37 ~0.4868419E~37 +(0.31415927E1, ~0.11754944E~37, ~0.1E~44): ~0.36929248E~37 ~0.36929248E~37 +(0.31415927E1, ~0.5877472E~38, ~0.11754944E~37): ~0.30219568E~37 ~0.30219568E~37 +(0.31415927E1, ~0.5877472E~38, ~0.5877472E~38): ~0.24342096E~37 ~0.24342096E~37 +(0.31415927E1, ~0.1E~44, 0.11754944E~37): 0.1175494E~37 0.1175494E~37 +(0.31415927E1, ~0.1E~44, 0.5877472E~38): 0.5877468E~38 0.5877468E~38 +(0.31415927E1, ~0.1E~44, 0.1E~44): ~0.3E~44 ~0.3E~44 +(0.31415927E1, ~0.1E~44, 0.0): ~0.4E~44 ~0.4E~44 +(0.31415927E1, ~0.1E~44, ~0.11754944E~37): ~0.11754948E~37 ~0.11754948E~37 +(0.31415927E1, ~0.1E~44, ~0.5877472E~38): ~0.5877476E~38 ~0.5877476E~38 +(0.31415927E1, ~0.1E~44, ~0.1E~44): ~0.6E~44 ~0.6E~44 +(0.31415927E1, ~0.1E~44, ~0.0): ~0.4E~44 ~0.4E~44 +(0.27182817E1, 0.34028235E39, 0.34028235E39): inf inf +(0.27182817E1, 0.34028235E39, 0.17014117E39): inf inf +(0.27182817E1, 0.34028235E39, 0.123E4): inf inf +(0.27182817E1, 0.34028235E39, 0.123E2): inf inf +(0.27182817E1, 0.34028235E39, 0.31415927E1): inf inf +(0.27182817E1, 0.34028235E39, 0.27182817E1): inf inf +(0.27182817E1, 0.34028235E39, 0.123E1): inf inf +(0.27182817E1, 0.34028235E39, 0.123): inf inf +(0.27182817E1, 0.34028235E39, 0.123E~2): inf inf +(0.27182817E1, 0.34028235E39, 0.11754944E~37): inf inf +(0.27182817E1, 0.34028235E39, 0.5877472E~38): inf inf +(0.27182817E1, 0.34028235E39, 0.1E~44): inf inf +(0.27182817E1, 0.34028235E39, 0.0): inf inf +(0.27182817E1, 0.34028235E39, ~0.34028235E39): inf inf +(0.27182817E1, 0.34028235E39, ~0.17014117E39): inf inf +(0.27182817E1, 0.34028235E39, ~0.123E4): inf inf +(0.27182817E1, 0.34028235E39, ~0.123E2): inf inf +(0.27182817E1, 0.34028235E39, ~0.31415927E1): inf inf +(0.27182817E1, 0.34028235E39, ~0.27182817E1): inf inf +(0.27182817E1, 0.34028235E39, ~0.123E1): inf inf +(0.27182817E1, 0.34028235E39, ~0.123): inf inf +(0.27182817E1, 0.34028235E39, ~0.123E~2): inf inf +(0.27182817E1, 0.34028235E39, ~0.11754944E~37): inf inf +(0.27182817E1, 0.34028235E39, ~0.5877472E~38): inf inf +(0.27182817E1, 0.34028235E39, ~0.1E~44): inf inf +(0.27182817E1, 0.34028235E39, ~0.0): inf inf +(0.27182817E1, 0.17014117E39, 0.34028235E39): inf inf +(0.27182817E1, 0.17014117E39, 0.17014117E39): inf inf +(0.27182817E1, 0.17014117E39, 0.123E4): inf inf +(0.27182817E1, 0.17014117E39, 0.123E2): inf inf +(0.27182817E1, 0.17014117E39, 0.31415927E1): inf inf +(0.27182817E1, 0.17014117E39, 0.27182817E1): inf inf +(0.27182817E1, 0.17014117E39, 0.123E1): inf inf +(0.27182817E1, 0.17014117E39, 0.123): inf inf +(0.27182817E1, 0.17014117E39, 0.123E~2): inf inf +(0.27182817E1, 0.17014117E39, 0.11754944E~37): inf inf +(0.27182817E1, 0.17014117E39, 0.5877472E~38): inf inf +(0.27182817E1, 0.17014117E39, 0.1E~44): inf inf +(0.27182817E1, 0.17014117E39, 0.0): inf inf +(0.27182817E1, 0.17014117E39, ~0.34028235E39): 0.1222093E39 0.1222093E39 +(0.27182817E1, 0.17014117E39, ~0.17014117E39): 0.29235047E39 0.29235047E39 +(0.27182817E1, 0.17014117E39, ~0.123E4): inf inf +(0.27182817E1, 0.17014117E39, ~0.123E2): inf inf +(0.27182817E1, 0.17014117E39, ~0.31415927E1): inf inf +(0.27182817E1, 0.17014117E39, ~0.27182817E1): inf inf +(0.27182817E1, 0.17014117E39, ~0.123E1): inf inf +(0.27182817E1, 0.17014117E39, ~0.123): inf inf +(0.27182817E1, 0.17014117E39, ~0.123E~2): inf inf +(0.27182817E1, 0.17014117E39, ~0.11754944E~37): inf inf +(0.27182817E1, 0.17014117E39, ~0.5877472E~38): inf inf +(0.27182817E1, 0.17014117E39, ~0.1E~44): inf inf +(0.27182817E1, 0.17014117E39, ~0.0): inf inf +(0.27182817E1, 0.123E4, 0.123E4): 0.45734863E4 0.45734863E4 +(0.27182817E1, 0.123E4, 0.123E2): 0.33557866E4 0.33557866E4 +(0.27182817E1, 0.123E4, 0.31415927E1): 0.33466282E4 0.33466282E4 +(0.27182817E1, 0.123E4, 0.27182817E1): 0.33462048E4 0.33462048E4 +(0.27182817E1, 0.123E4, 0.123E1): 0.33447166E4 0.33447166E4 +(0.27182817E1, 0.123E4, 0.123): 0.33436096E4 0.33436096E4 +(0.27182817E1, 0.123E4, 0.123E~2): 0.33434878E4 0.33434878E4 +(0.27182817E1, 0.123E4, 0.11754944E~37): 0.33434866E4 0.33434866E4 +(0.27182817E1, 0.123E4, 0.5877472E~38): 0.33434866E4 0.33434866E4 +(0.27182817E1, 0.123E4, 0.1E~44): 0.33434866E4 0.33434866E4 +(0.27182817E1, 0.123E4, 0.0): 0.33434866E4 0.33434866E4 +(0.27182817E1, 0.123E4, ~0.123E4): 0.21134866E4 0.21134866E4 +(0.27182817E1, 0.123E4, ~0.123E2): 0.33311865E4 0.33311865E4 +(0.27182817E1, 0.123E4, ~0.31415927E1): 0.3340345E4 0.3340345E4 +(0.27182817E1, 0.123E4, ~0.27182817E1): 0.33407683E4 0.33407683E4 +(0.27182817E1, 0.123E4, ~0.123E1): 0.33422566E4 0.33422566E4 +(0.27182817E1, 0.123E4, ~0.123): 0.33433635E4 0.33433635E4 +(0.27182817E1, 0.123E4, ~0.123E~2): 0.33434854E4 0.33434854E4 +(0.27182817E1, 0.123E4, ~0.11754944E~37): 0.33434866E4 0.33434866E4 +(0.27182817E1, 0.123E4, ~0.5877472E~38): 0.33434866E4 0.33434866E4 +(0.27182817E1, 0.123E4, ~0.1E~44): 0.33434866E4 0.33434866E4 +(0.27182817E1, 0.123E4, ~0.0): 0.33434866E4 0.33434866E4 +(0.27182817E1, 0.123E2, 0.123E4): 0.12634348E4 0.12634348E4 +(0.27182817E1, 0.123E2, 0.123E2): 0.45734867E2 0.45734867E2 +(0.27182817E1, 0.123E2, 0.31415927E1): 0.36576458E2 0.36576458E2 +(0.27182817E1, 0.123E2, 0.27182817E1): 0.3615315E2 0.3615315E2 +(0.27182817E1, 0.123E2, 0.123E1): 0.34664867E2 0.34664867E2 +(0.27182817E1, 0.123E2, 0.123): 0.33557865E2 0.33557865E2 +(0.27182817E1, 0.123E2, 0.123E~2): 0.33436096E2 0.33436096E2 +(0.27182817E1, 0.123E2, 0.11754944E~37): 0.33434868E2 0.33434868E2 +(0.27182817E1, 0.123E2, 0.5877472E~38): 0.33434868E2 0.33434868E2 +(0.27182817E1, 0.123E2, 0.1E~44): 0.33434868E2 0.33434868E2 +(0.27182817E1, 0.123E2, 0.0): 0.33434868E2 0.33434868E2 +(0.27182817E1, 0.123E2, ~0.123E4): ~0.11965652E4 ~0.11965652E4 +(0.27182817E1, 0.123E2, ~0.123E2): 0.21134867E2 0.21134867E2 +(0.27182817E1, 0.123E2, ~0.31415927E1): 0.30293274E2 0.30293274E2 +(0.27182817E1, 0.123E2, ~0.27182817E1): 0.30716585E2 0.30716585E2 +(0.27182817E1, 0.123E2, ~0.123E1): 0.32204865E2 0.32204865E2 +(0.27182817E1, 0.123E2, ~0.123): 0.33311867E2 0.33311867E2 +(0.27182817E1, 0.123E2, ~0.123E~2): 0.33433636E2 0.33433636E2 +(0.27182817E1, 0.123E2, ~0.11754944E~37): 0.33434868E2 0.33434868E2 +(0.27182817E1, 0.123E2, ~0.5877472E~38): 0.33434868E2 0.33434868E2 +(0.27182817E1, 0.123E2, ~0.1E~44): 0.33434868E2 0.33434868E2 +(0.27182817E1, 0.123E2, ~0.0): 0.33434868E2 0.33434868E2 +(0.27182817E1, 0.31415927E1, 0.123E4): 0.12385398E4 0.12385398E4 +(0.27182817E1, 0.31415927E1, 0.123E2): 0.20839735E2 0.20839735E2 +(0.27182817E1, 0.31415927E1, 0.31415927E1): 0.11681327E2 0.11681327E2 +(0.27182817E1, 0.31415927E1, 0.27182817E1): 0.11258016E2 0.11258016E2 +(0.27182817E1, 0.31415927E1, 0.123E1): 0.9769734E1 0.9769734E1 +(0.27182817E1, 0.31415927E1, 0.123): 0.8662734E1 0.8662734E1 +(0.27182817E1, 0.31415927E1, 0.123E~2): 0.8540964E1 0.8540964E1 +(0.27182817E1, 0.31415927E1, 0.11754944E~37): 0.8539734E1 0.8539734E1 +(0.27182817E1, 0.31415927E1, 0.5877472E~38): 0.8539734E1 0.8539734E1 +(0.27182817E1, 0.31415927E1, 0.1E~44): 0.8539734E1 0.8539734E1 +(0.27182817E1, 0.31415927E1, 0.0): 0.8539734E1 0.8539734E1 +(0.27182817E1, 0.31415927E1, ~0.123E4): ~0.12214602E4 ~0.12214602E4 +(0.27182817E1, 0.31415927E1, ~0.123E2): ~0.3760266E1 ~0.3760266E1 +(0.27182817E1, 0.31415927E1, ~0.31415927E1): 0.53981414E1 0.53981414E1 +(0.27182817E1, 0.31415927E1, ~0.27182817E1): 0.58214526E1 0.58214526E1 +(0.27182817E1, 0.31415927E1, ~0.123E1): 0.73097343E1 0.73097343E1 +(0.27182817E1, 0.31415927E1, ~0.123): 0.8416734E1 0.8416734E1 +(0.27182817E1, 0.31415927E1, ~0.123E~2): 0.8538505E1 0.8538505E1 +(0.27182817E1, 0.31415927E1, ~0.11754944E~37): 0.8539734E1 0.8539734E1 +(0.27182817E1, 0.31415927E1, ~0.5877472E~38): 0.8539734E1 0.8539734E1 +(0.27182817E1, 0.31415927E1, ~0.1E~44): 0.8539734E1 0.8539734E1 +(0.27182817E1, 0.31415927E1, ~0.0): 0.8539734E1 0.8539734E1 +(0.27182817E1, 0.27182817E1, 0.123E4): 0.1237389E4 0.1237389E4 +(0.27182817E1, 0.27182817E1, 0.123E2): 0.19689056E2 0.19689056E2 +(0.27182817E1, 0.27182817E1, 0.31415927E1): 0.10530648E2 0.10530648E2 +(0.27182817E1, 0.27182817E1, 0.27182817E1): 0.10107337E2 0.10107337E2 +(0.27182817E1, 0.27182817E1, 0.123E1): 0.8619056E1 0.8619056E1 +(0.27182817E1, 0.27182817E1, 0.123): 0.7512056E1 0.7512056E1 +(0.27182817E1, 0.27182817E1, 0.123E~2): 0.73902855E1 0.73902855E1 +(0.27182817E1, 0.27182817E1, 0.11754944E~37): 0.73890557E1 0.73890557E1 +(0.27182817E1, 0.27182817E1, 0.5877472E~38): 0.73890557E1 0.73890557E1 +(0.27182817E1, 0.27182817E1, 0.1E~44): 0.73890557E1 0.73890557E1 +(0.27182817E1, 0.27182817E1, 0.0): 0.73890557E1 0.73890557E1 +(0.27182817E1, 0.27182817E1, ~0.123E4): ~0.1222611E4 ~0.1222611E4 +(0.27182817E1, 0.27182817E1, ~0.123E2): ~0.49109445E1 ~0.49109445E1 +(0.27182817E1, 0.27182817E1, ~0.31415927E1): 0.42474627E1 0.42474627E1 +(0.27182817E1, 0.27182817E1, ~0.27182817E1): 0.4670774E1 0.4670774E1 +(0.27182817E1, 0.27182817E1, ~0.123E1): 0.61590557E1 0.61590557E1 +(0.27182817E1, 0.27182817E1, ~0.123): 0.72660556E1 0.72660556E1 +(0.27182817E1, 0.27182817E1, ~0.123E~2): 0.73878255E1 0.73878255E1 +(0.27182817E1, 0.27182817E1, ~0.11754944E~37): 0.73890557E1 0.73890557E1 +(0.27182817E1, 0.27182817E1, ~0.5877472E~38): 0.73890557E1 0.73890557E1 +(0.27182817E1, 0.27182817E1, ~0.1E~44): 0.73890557E1 0.73890557E1 +(0.27182817E1, 0.27182817E1, ~0.0): 0.73890557E1 0.73890557E1 +(0.27182817E1, 0.123E1, 0.123E4): 0.12333435E4 0.12333435E4 +(0.27182817E1, 0.123E1, 0.123E2): 0.15643487E2 0.15643487E2 +(0.27182817E1, 0.123E1, 0.31415927E1): 0.64850793E1 0.64850793E1 +(0.27182817E1, 0.123E1, 0.27182817E1): 0.60617685E1 0.60617685E1 +(0.27182817E1, 0.123E1, 0.123E1): 0.4573487E1 0.4573487E1 +(0.27182817E1, 0.123E1, 0.123): 0.34664867E1 0.34664867E1 +(0.27182817E1, 0.123E1, 0.123E~2): 0.33447165E1 0.33447165E1 +(0.27182817E1, 0.123E1, 0.11754944E~37): 0.33434865E1 0.33434865E1 +(0.27182817E1, 0.123E1, 0.5877472E~38): 0.33434865E1 0.33434865E1 +(0.27182817E1, 0.123E1, 0.1E~44): 0.33434865E1 0.33434865E1 +(0.27182817E1, 0.123E1, 0.0): 0.33434865E1 0.33434865E1 +(0.27182817E1, 0.123E1, ~0.123E4): ~0.12266565E4 ~0.12266565E4 +(0.27182817E1, 0.123E1, ~0.123E2): ~0.8956513E1 ~0.8956513E1 +(0.27182817E1, 0.123E1, ~0.31415927E1): 0.20189385 0.20189385 +(0.27182817E1, 0.123E1, ~0.27182817E1): 0.62520486 0.62520486 +(0.27182817E1, 0.123E1, ~0.123E1): 0.21134865E1 0.21134865E1 +(0.27182817E1, 0.123E1, ~0.123): 0.32204866E1 0.32204866E1 +(0.27182817E1, 0.123E1, ~0.123E~2): 0.33422565E1 0.33422565E1 +(0.27182817E1, 0.123E1, ~0.11754944E~37): 0.33434865E1 0.33434865E1 +(0.27182817E1, 0.123E1, ~0.5877472E~38): 0.33434865E1 0.33434865E1 +(0.27182817E1, 0.123E1, ~0.1E~44): 0.33434865E1 0.33434865E1 +(0.27182817E1, 0.123E1, ~0.0): 0.33434865E1 0.33434865E1 +(0.27182817E1, 0.123, 0.123E4): 0.12303344E4 0.12303344E4 +(0.27182817E1, 0.123, 0.123E2): 0.12634349E2 0.12634349E2 +(0.27182817E1, 0.123, 0.31415927E1): 0.34759414E1 0.34759414E1 +(0.27182817E1, 0.123, 0.27182817E1): 0.30526304E1 0.30526304E1 +(0.27182817E1, 0.123, 0.123E1): 0.15643487E1 0.15643487E1 +(0.27182817E1, 0.123, 0.123): 0.45734867 0.45734867 +(0.27182817E1, 0.123, 0.123E~2): 0.33557865 0.33557865 +(0.27182817E1, 0.123, 0.11754944E~37): 0.33434868 0.33434868 +(0.27182817E1, 0.123, 0.5877472E~38): 0.33434868 0.33434868 +(0.27182817E1, 0.123, 0.1E~44): 0.33434868 0.33434868 +(0.27182817E1, 0.123, 0.0): 0.33434868 0.33434868 +(0.27182817E1, 0.123, ~0.123E4): ~0.12296656E4 ~0.12296656E4 +(0.27182817E1, 0.123, ~0.123E2): ~0.119656515E2 ~0.119656515E2 +(0.27182817E1, 0.123, ~0.31415927E1): ~0.2807244E1 ~0.2807244E1 +(0.27182817E1, 0.123, ~0.27182817E1): ~0.2383933E1 ~0.2383933E1 +(0.27182817E1, 0.123, ~0.123E1): ~0.89565134 ~0.89565134 +(0.27182817E1, 0.123, ~0.123): 0.21134867 0.21134867 +(0.27182817E1, 0.123, ~0.123E~2): 0.33311868 0.33311868 +(0.27182817E1, 0.123, ~0.11754944E~37): 0.33434868 0.33434868 +(0.27182817E1, 0.123, ~0.5877472E~38): 0.33434868 0.33434868 +(0.27182817E1, 0.123, ~0.1E~44): 0.33434868 0.33434868 +(0.27182817E1, 0.123, ~0.0): 0.33434868 0.33434868 +(0.27182817E1, 0.123E~2, 0.123E4): 0.12300033E4 0.12300033E4 +(0.27182817E1, 0.123E~2, 0.123E2): 0.12303344E2 0.12303344E2 +(0.27182817E1, 0.123E~2, 0.31415927E1): 0.31449363E1 0.31449363E1 +(0.27182817E1, 0.123E~2, 0.27182817E1): 0.27216253E1 0.27216253E1 +(0.27182817E1, 0.123E~2, 0.123E1): 0.12333435E1 0.12333435E1 +(0.27182817E1, 0.123E~2, 0.123): 0.12634349 0.12634349 +(0.27182817E1, 0.123E~2, 0.123E~2): 0.45734867E~2 0.45734867E~2 +(0.27182817E1, 0.123E~2, 0.11754944E~37): 0.33434867E~2 0.33434867E~2 +(0.27182817E1, 0.123E~2, 0.5877472E~38): 0.33434867E~2 0.33434867E~2 +(0.27182817E1, 0.123E~2, 0.1E~44): 0.33434867E~2 0.33434867E~2 +(0.27182817E1, 0.123E~2, 0.0): 0.33434867E~2 0.33434867E~2 +(0.27182817E1, 0.123E~2, ~0.123E4): ~0.12299967E4 ~0.12299967E4 +(0.27182817E1, 0.123E~2, ~0.123E2): ~0.12296657E2 ~0.12296657E2 +(0.27182817E1, 0.123E~2, ~0.31415927E1): ~0.31382492E1 ~0.31382492E1 +(0.27182817E1, 0.123E~2, ~0.27182817E1): ~0.27149382E1 ~0.27149382E1 +(0.27182817E1, 0.123E~2, ~0.123E1): ~0.12266566E1 ~0.12266566E1 +(0.27182817E1, 0.123E~2, ~0.123): ~0.11965652 ~0.11965652 +(0.27182817E1, 0.123E~2, ~0.123E~2): 0.21134866E~2 0.21134866E~2 +(0.27182817E1, 0.123E~2, ~0.11754944E~37): 0.33434867E~2 0.33434867E~2 +(0.27182817E1, 0.123E~2, ~0.5877472E~38): 0.33434867E~2 0.33434867E~2 +(0.27182817E1, 0.123E~2, ~0.1E~44): 0.33434867E~2 0.33434867E~2 +(0.27182817E1, 0.123E~2, ~0.0): 0.33434867E~2 0.33434867E~2 +(0.27182817E1, 0.11754944E~37, 0.1E~44): 0.31953248E~37 0.31953248E~37 +(0.27182817E1, 0.11754944E~37, ~0.1E~44): 0.31953248E~37 0.31953248E~37 +(0.27182817E1, 0.1E~44, 0.11754944E~37): 0.11754948E~37 0.11754948E~37 +(0.27182817E1, 0.1E~44, 0.5877472E~38): 0.5877476E~38 0.5877476E~38 +(0.27182817E1, 0.1E~44, 0.1E~44): 0.6E~44 0.6E~44 +(0.27182817E1, 0.1E~44, 0.0): 0.4E~44 0.4E~44 +(0.27182817E1, 0.1E~44, ~0.11754944E~37): ~0.1175494E~37 ~0.1175494E~37 +(0.27182817E1, 0.1E~44, ~0.5877472E~38): ~0.5877468E~38 ~0.5877468E~38 +(0.27182817E1, 0.1E~44, ~0.1E~44): 0.3E~44 0.3E~44 +(0.27182817E1, 0.1E~44, ~0.0): 0.4E~44 0.4E~44 +(0.27182817E1, ~0.34028235E39, 0.34028235E39): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.17014117E39): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.123E4): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.123E2): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.31415927E1): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.27182817E1): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.123E1): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.123): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.123E~2): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.11754944E~37): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.5877472E~38): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.1E~44): ~inf ~inf +(0.27182817E1, ~0.34028235E39, 0.0): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.34028235E39): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.17014117E39): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.123E4): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.123E2): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.31415927E1): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.27182817E1): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.123E1): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.123): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.123E~2): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.11754944E~37): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.5877472E~38): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.1E~44): ~inf ~inf +(0.27182817E1, ~0.34028235E39, ~0.0): ~inf ~inf +(0.27182817E1, ~0.17014117E39, 0.34028235E39): ~0.1222093E39 ~0.1222093E39 +(0.27182817E1, ~0.17014117E39, 0.17014117E39): ~0.29235047E39 ~0.29235047E39 +(0.27182817E1, ~0.17014117E39, 0.123E4): ~inf ~inf +(0.27182817E1, ~0.17014117E39, 0.123E2): ~inf ~inf +(0.27182817E1, ~0.17014117E39, 0.31415927E1): ~inf ~inf +(0.27182817E1, ~0.17014117E39, 0.27182817E1): ~inf ~inf +(0.27182817E1, ~0.17014117E39, 0.123E1): ~inf ~inf +(0.27182817E1, ~0.17014117E39, 0.123): ~inf ~inf +(0.27182817E1, ~0.17014117E39, 0.123E~2): ~inf ~inf +(0.27182817E1, ~0.17014117E39, 0.11754944E~37): ~inf ~inf +(0.27182817E1, ~0.17014117E39, 0.5877472E~38): ~inf ~inf +(0.27182817E1, ~0.17014117E39, 0.1E~44): ~inf ~inf +(0.27182817E1, ~0.17014117E39, 0.0): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.34028235E39): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.17014117E39): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.123E4): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.123E2): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.31415927E1): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.27182817E1): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.123E1): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.123): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.123E~2): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.11754944E~37): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.5877472E~38): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.1E~44): ~inf ~inf +(0.27182817E1, ~0.17014117E39, ~0.0): ~inf ~inf +(0.27182817E1, ~0.123E4, 0.123E4): ~0.21134866E4 ~0.21134866E4 +(0.27182817E1, ~0.123E4, 0.123E2): ~0.33311865E4 ~0.33311865E4 +(0.27182817E1, ~0.123E4, 0.31415927E1): ~0.3340345E4 ~0.3340345E4 +(0.27182817E1, ~0.123E4, 0.27182817E1): ~0.33407683E4 ~0.33407683E4 +(0.27182817E1, ~0.123E4, 0.123E1): ~0.33422566E4 ~0.33422566E4 +(0.27182817E1, ~0.123E4, 0.123): ~0.33433635E4 ~0.33433635E4 +(0.27182817E1, ~0.123E4, 0.123E~2): ~0.33434854E4 ~0.33434854E4 +(0.27182817E1, ~0.123E4, 0.11754944E~37): ~0.33434866E4 ~0.33434866E4 +(0.27182817E1, ~0.123E4, 0.5877472E~38): ~0.33434866E4 ~0.33434866E4 +(0.27182817E1, ~0.123E4, 0.1E~44): ~0.33434866E4 ~0.33434866E4 +(0.27182817E1, ~0.123E4, 0.0): ~0.33434866E4 ~0.33434866E4 +(0.27182817E1, ~0.123E4, ~0.123E4): ~0.45734863E4 ~0.45734863E4 +(0.27182817E1, ~0.123E4, ~0.123E2): ~0.33557866E4 ~0.33557866E4 +(0.27182817E1, ~0.123E4, ~0.31415927E1): ~0.33466282E4 ~0.33466282E4 +(0.27182817E1, ~0.123E4, ~0.27182817E1): ~0.33462048E4 ~0.33462048E4 +(0.27182817E1, ~0.123E4, ~0.123E1): ~0.33447166E4 ~0.33447166E4 +(0.27182817E1, ~0.123E4, ~0.123): ~0.33436096E4 ~0.33436096E4 +(0.27182817E1, ~0.123E4, ~0.123E~2): ~0.33434878E4 ~0.33434878E4 +(0.27182817E1, ~0.123E4, ~0.11754944E~37): ~0.33434866E4 ~0.33434866E4 +(0.27182817E1, ~0.123E4, ~0.5877472E~38): ~0.33434866E4 ~0.33434866E4 +(0.27182817E1, ~0.123E4, ~0.1E~44): ~0.33434866E4 ~0.33434866E4 +(0.27182817E1, ~0.123E4, ~0.0): ~0.33434866E4 ~0.33434866E4 +(0.27182817E1, ~0.123E2, 0.123E4): 0.11965652E4 0.11965652E4 +(0.27182817E1, ~0.123E2, 0.123E2): ~0.21134867E2 ~0.21134867E2 +(0.27182817E1, ~0.123E2, 0.31415927E1): ~0.30293274E2 ~0.30293274E2 +(0.27182817E1, ~0.123E2, 0.27182817E1): ~0.30716585E2 ~0.30716585E2 +(0.27182817E1, ~0.123E2, 0.123E1): ~0.32204865E2 ~0.32204865E2 +(0.27182817E1, ~0.123E2, 0.123): ~0.33311867E2 ~0.33311867E2 +(0.27182817E1, ~0.123E2, 0.123E~2): ~0.33433636E2 ~0.33433636E2 +(0.27182817E1, ~0.123E2, 0.11754944E~37): ~0.33434868E2 ~0.33434868E2 +(0.27182817E1, ~0.123E2, 0.5877472E~38): ~0.33434868E2 ~0.33434868E2 +(0.27182817E1, ~0.123E2, 0.1E~44): ~0.33434868E2 ~0.33434868E2 +(0.27182817E1, ~0.123E2, 0.0): ~0.33434868E2 ~0.33434868E2 +(0.27182817E1, ~0.123E2, ~0.123E4): ~0.12634348E4 ~0.12634348E4 +(0.27182817E1, ~0.123E2, ~0.123E2): ~0.45734867E2 ~0.45734867E2 +(0.27182817E1, ~0.123E2, ~0.31415927E1): ~0.36576458E2 ~0.36576458E2 +(0.27182817E1, ~0.123E2, ~0.27182817E1): ~0.3615315E2 ~0.3615315E2 +(0.27182817E1, ~0.123E2, ~0.123E1): ~0.34664867E2 ~0.34664867E2 +(0.27182817E1, ~0.123E2, ~0.123): ~0.33557865E2 ~0.33557865E2 +(0.27182817E1, ~0.123E2, ~0.123E~2): ~0.33436096E2 ~0.33436096E2 +(0.27182817E1, ~0.123E2, ~0.11754944E~37): ~0.33434868E2 ~0.33434868E2 +(0.27182817E1, ~0.123E2, ~0.5877472E~38): ~0.33434868E2 ~0.33434868E2 +(0.27182817E1, ~0.123E2, ~0.1E~44): ~0.33434868E2 ~0.33434868E2 +(0.27182817E1, ~0.123E2, ~0.0): ~0.33434868E2 ~0.33434868E2 +(0.27182817E1, ~0.31415927E1, 0.123E4): 0.12214602E4 0.12214602E4 +(0.27182817E1, ~0.31415927E1, 0.123E2): 0.3760266E1 0.3760266E1 +(0.27182817E1, ~0.31415927E1, 0.31415927E1): ~0.53981414E1 ~0.53981414E1 +(0.27182817E1, ~0.31415927E1, 0.27182817E1): ~0.58214526E1 ~0.58214526E1 +(0.27182817E1, ~0.31415927E1, 0.123E1): ~0.73097343E1 ~0.73097343E1 +(0.27182817E1, ~0.31415927E1, 0.123): ~0.8416734E1 ~0.8416734E1 +(0.27182817E1, ~0.31415927E1, 0.123E~2): ~0.8538505E1 ~0.8538505E1 +(0.27182817E1, ~0.31415927E1, 0.11754944E~37): ~0.8539734E1 ~0.8539734E1 +(0.27182817E1, ~0.31415927E1, 0.5877472E~38): ~0.8539734E1 ~0.8539734E1 +(0.27182817E1, ~0.31415927E1, 0.1E~44): ~0.8539734E1 ~0.8539734E1 +(0.27182817E1, ~0.31415927E1, 0.0): ~0.8539734E1 ~0.8539734E1 +(0.27182817E1, ~0.31415927E1, ~0.123E4): ~0.12385398E4 ~0.12385398E4 +(0.27182817E1, ~0.31415927E1, ~0.123E2): ~0.20839735E2 ~0.20839735E2 +(0.27182817E1, ~0.31415927E1, ~0.31415927E1): ~0.11681327E2 ~0.11681327E2 +(0.27182817E1, ~0.31415927E1, ~0.27182817E1): ~0.11258016E2 ~0.11258016E2 +(0.27182817E1, ~0.31415927E1, ~0.123E1): ~0.9769734E1 ~0.9769734E1 +(0.27182817E1, ~0.31415927E1, ~0.123): ~0.8662734E1 ~0.8662734E1 +(0.27182817E1, ~0.31415927E1, ~0.123E~2): ~0.8540964E1 ~0.8540964E1 +(0.27182817E1, ~0.31415927E1, ~0.11754944E~37): ~0.8539734E1 ~0.8539734E1 +(0.27182817E1, ~0.31415927E1, ~0.5877472E~38): ~0.8539734E1 ~0.8539734E1 +(0.27182817E1, ~0.31415927E1, ~0.1E~44): ~0.8539734E1 ~0.8539734E1 +(0.27182817E1, ~0.31415927E1, ~0.0): ~0.8539734E1 ~0.8539734E1 +(0.27182817E1, ~0.27182817E1, 0.123E4): 0.1222611E4 0.1222611E4 +(0.27182817E1, ~0.27182817E1, 0.123E2): 0.49109445E1 0.49109445E1 +(0.27182817E1, ~0.27182817E1, 0.31415927E1): ~0.42474627E1 ~0.42474627E1 +(0.27182817E1, ~0.27182817E1, 0.27182817E1): ~0.4670774E1 ~0.4670774E1 +(0.27182817E1, ~0.27182817E1, 0.123E1): ~0.61590557E1 ~0.61590557E1 +(0.27182817E1, ~0.27182817E1, 0.123): ~0.72660556E1 ~0.72660556E1 +(0.27182817E1, ~0.27182817E1, 0.123E~2): ~0.73878255E1 ~0.73878255E1 +(0.27182817E1, ~0.27182817E1, 0.11754944E~37): ~0.73890557E1 ~0.73890557E1 +(0.27182817E1, ~0.27182817E1, 0.5877472E~38): ~0.73890557E1 ~0.73890557E1 +(0.27182817E1, ~0.27182817E1, 0.1E~44): ~0.73890557E1 ~0.73890557E1 +(0.27182817E1, ~0.27182817E1, 0.0): ~0.73890557E1 ~0.73890557E1 +(0.27182817E1, ~0.27182817E1, ~0.123E4): ~0.1237389E4 ~0.1237389E4 +(0.27182817E1, ~0.27182817E1, ~0.123E2): ~0.19689056E2 ~0.19689056E2 +(0.27182817E1, ~0.27182817E1, ~0.31415927E1): ~0.10530648E2 ~0.10530648E2 +(0.27182817E1, ~0.27182817E1, ~0.27182817E1): ~0.10107337E2 ~0.10107337E2 +(0.27182817E1, ~0.27182817E1, ~0.123E1): ~0.8619056E1 ~0.8619056E1 +(0.27182817E1, ~0.27182817E1, ~0.123): ~0.7512056E1 ~0.7512056E1 +(0.27182817E1, ~0.27182817E1, ~0.123E~2): ~0.73902855E1 ~0.73902855E1 +(0.27182817E1, ~0.27182817E1, ~0.11754944E~37): ~0.73890557E1 ~0.73890557E1 +(0.27182817E1, ~0.27182817E1, ~0.5877472E~38): ~0.73890557E1 ~0.73890557E1 +(0.27182817E1, ~0.27182817E1, ~0.1E~44): ~0.73890557E1 ~0.73890557E1 +(0.27182817E1, ~0.27182817E1, ~0.0): ~0.73890557E1 ~0.73890557E1 +(0.27182817E1, ~0.123E1, 0.123E4): 0.12266565E4 0.12266565E4 +(0.27182817E1, ~0.123E1, 0.123E2): 0.8956513E1 0.8956513E1 +(0.27182817E1, ~0.123E1, 0.31415927E1): ~0.20189385 ~0.20189385 +(0.27182817E1, ~0.123E1, 0.27182817E1): ~0.62520486 ~0.62520486 +(0.27182817E1, ~0.123E1, 0.123E1): ~0.21134865E1 ~0.21134865E1 +(0.27182817E1, ~0.123E1, 0.123): ~0.32204866E1 ~0.32204866E1 +(0.27182817E1, ~0.123E1, 0.123E~2): ~0.33422565E1 ~0.33422565E1 +(0.27182817E1, ~0.123E1, 0.11754944E~37): ~0.33434865E1 ~0.33434865E1 +(0.27182817E1, ~0.123E1, 0.5877472E~38): ~0.33434865E1 ~0.33434865E1 +(0.27182817E1, ~0.123E1, 0.1E~44): ~0.33434865E1 ~0.33434865E1 +(0.27182817E1, ~0.123E1, 0.0): ~0.33434865E1 ~0.33434865E1 +(0.27182817E1, ~0.123E1, ~0.123E4): ~0.12333435E4 ~0.12333435E4 +(0.27182817E1, ~0.123E1, ~0.123E2): ~0.15643487E2 ~0.15643487E2 +(0.27182817E1, ~0.123E1, ~0.31415927E1): ~0.64850793E1 ~0.64850793E1 +(0.27182817E1, ~0.123E1, ~0.27182817E1): ~0.60617685E1 ~0.60617685E1 +(0.27182817E1, ~0.123E1, ~0.123E1): ~0.4573487E1 ~0.4573487E1 +(0.27182817E1, ~0.123E1, ~0.123): ~0.34664867E1 ~0.34664867E1 +(0.27182817E1, ~0.123E1, ~0.123E~2): ~0.33447165E1 ~0.33447165E1 +(0.27182817E1, ~0.123E1, ~0.11754944E~37): ~0.33434865E1 ~0.33434865E1 +(0.27182817E1, ~0.123E1, ~0.5877472E~38): ~0.33434865E1 ~0.33434865E1 +(0.27182817E1, ~0.123E1, ~0.1E~44): ~0.33434865E1 ~0.33434865E1 +(0.27182817E1, ~0.123E1, ~0.0): ~0.33434865E1 ~0.33434865E1 +(0.27182817E1, ~0.123, 0.123E4): 0.12296656E4 0.12296656E4 +(0.27182817E1, ~0.123, 0.123E2): 0.119656515E2 0.119656515E2 +(0.27182817E1, ~0.123, 0.31415927E1): 0.2807244E1 0.2807244E1 +(0.27182817E1, ~0.123, 0.27182817E1): 0.2383933E1 0.2383933E1 +(0.27182817E1, ~0.123, 0.123E1): 0.89565134 0.89565134 +(0.27182817E1, ~0.123, 0.123): ~0.21134867 ~0.21134867 +(0.27182817E1, ~0.123, 0.123E~2): ~0.33311868 ~0.33311868 +(0.27182817E1, ~0.123, 0.11754944E~37): ~0.33434868 ~0.33434868 +(0.27182817E1, ~0.123, 0.5877472E~38): ~0.33434868 ~0.33434868 +(0.27182817E1, ~0.123, 0.1E~44): ~0.33434868 ~0.33434868 +(0.27182817E1, ~0.123, 0.0): ~0.33434868 ~0.33434868 +(0.27182817E1, ~0.123, ~0.123E4): ~0.12303344E4 ~0.12303344E4 +(0.27182817E1, ~0.123, ~0.123E2): ~0.12634349E2 ~0.12634349E2 +(0.27182817E1, ~0.123, ~0.31415927E1): ~0.34759414E1 ~0.34759414E1 +(0.27182817E1, ~0.123, ~0.27182817E1): ~0.30526304E1 ~0.30526304E1 +(0.27182817E1, ~0.123, ~0.123E1): ~0.15643487E1 ~0.15643487E1 +(0.27182817E1, ~0.123, ~0.123): ~0.45734867 ~0.45734867 +(0.27182817E1, ~0.123, ~0.123E~2): ~0.33557865 ~0.33557865 +(0.27182817E1, ~0.123, ~0.11754944E~37): ~0.33434868 ~0.33434868 +(0.27182817E1, ~0.123, ~0.5877472E~38): ~0.33434868 ~0.33434868 +(0.27182817E1, ~0.123, ~0.1E~44): ~0.33434868 ~0.33434868 +(0.27182817E1, ~0.123, ~0.0): ~0.33434868 ~0.33434868 +(0.27182817E1, ~0.123E~2, 0.123E4): 0.12299967E4 0.12299967E4 +(0.27182817E1, ~0.123E~2, 0.123E2): 0.12296657E2 0.12296657E2 +(0.27182817E1, ~0.123E~2, 0.31415927E1): 0.31382492E1 0.31382492E1 +(0.27182817E1, ~0.123E~2, 0.27182817E1): 0.27149382E1 0.27149382E1 +(0.27182817E1, ~0.123E~2, 0.123E1): 0.12266566E1 0.12266566E1 +(0.27182817E1, ~0.123E~2, 0.123): 0.11965652 0.11965652 +(0.27182817E1, ~0.123E~2, 0.123E~2): ~0.21134866E~2 ~0.21134866E~2 +(0.27182817E1, ~0.123E~2, 0.11754944E~37): ~0.33434867E~2 ~0.33434867E~2 +(0.27182817E1, ~0.123E~2, 0.5877472E~38): ~0.33434867E~2 ~0.33434867E~2 +(0.27182817E1, ~0.123E~2, 0.1E~44): ~0.33434867E~2 ~0.33434867E~2 +(0.27182817E1, ~0.123E~2, 0.0): ~0.33434867E~2 ~0.33434867E~2 +(0.27182817E1, ~0.123E~2, ~0.123E4): ~0.12300033E4 ~0.12300033E4 +(0.27182817E1, ~0.123E~2, ~0.123E2): ~0.12303344E2 ~0.12303344E2 +(0.27182817E1, ~0.123E~2, ~0.31415927E1): ~0.31449363E1 ~0.31449363E1 +(0.27182817E1, ~0.123E~2, ~0.27182817E1): ~0.27216253E1 ~0.27216253E1 +(0.27182817E1, ~0.123E~2, ~0.123E1): ~0.12333435E1 ~0.12333435E1 +(0.27182817E1, ~0.123E~2, ~0.123): ~0.12634349 ~0.12634349 +(0.27182817E1, ~0.123E~2, ~0.123E~2): ~0.45734867E~2 ~0.45734867E~2 +(0.27182817E1, ~0.123E~2, ~0.11754944E~37): ~0.33434867E~2 ~0.33434867E~2 +(0.27182817E1, ~0.123E~2, ~0.5877472E~38): ~0.33434867E~2 ~0.33434867E~2 +(0.27182817E1, ~0.123E~2, ~0.1E~44): ~0.33434867E~2 ~0.33434867E~2 +(0.27182817E1, ~0.123E~2, ~0.0): ~0.33434867E~2 ~0.33434867E~2 +(0.27182817E1, ~0.11754944E~37, 0.1E~44): ~0.31953248E~37 ~0.31953248E~37 +(0.27182817E1, ~0.11754944E~37, ~0.1E~44): ~0.31953248E~37 ~0.31953248E~37 +(0.27182817E1, ~0.1E~44, 0.11754944E~37): 0.1175494E~37 0.1175494E~37 +(0.27182817E1, ~0.1E~44, 0.5877472E~38): 0.5877468E~38 0.5877468E~38 +(0.27182817E1, ~0.1E~44, 0.1E~44): ~0.3E~44 ~0.3E~44 +(0.27182817E1, ~0.1E~44, 0.0): ~0.4E~44 ~0.4E~44 +(0.27182817E1, ~0.1E~44, ~0.11754944E~37): ~0.11754948E~37 ~0.11754948E~37 +(0.27182817E1, ~0.1E~44, ~0.5877472E~38): ~0.5877476E~38 ~0.5877476E~38 +(0.27182817E1, ~0.1E~44, ~0.1E~44): ~0.6E~44 ~0.6E~44 +(0.27182817E1, ~0.1E~44, ~0.0): ~0.4E~44 ~0.4E~44 +(0.123E1, 0.34028235E39, 0.34028235E39): inf inf +(0.123E1, 0.34028235E39, 0.17014117E39): inf inf +(0.123E1, 0.34028235E39, 0.123E4): inf inf +(0.123E1, 0.34028235E39, 0.123E2): inf inf +(0.123E1, 0.34028235E39, 0.31415927E1): inf inf +(0.123E1, 0.34028235E39, 0.27182817E1): inf inf +(0.123E1, 0.34028235E39, 0.123E1): inf inf +(0.123E1, 0.34028235E39, 0.123): inf inf +(0.123E1, 0.34028235E39, 0.123E~2): inf inf +(0.123E1, 0.34028235E39, 0.11754944E~37): inf inf +(0.123E1, 0.34028235E39, 0.5877472E~38): inf inf +(0.123E1, 0.34028235E39, 0.1E~44): inf inf +(0.123E1, 0.34028235E39, 0.0): inf inf +(0.123E1, 0.34028235E39, ~0.34028235E39): 0.78264946E38 0.78264946E38 +(0.123E1, 0.34028235E39, ~0.17014117E39): 0.24840611E39 0.24840611E39 +(0.123E1, 0.34028235E39, ~0.123E4): inf inf +(0.123E1, 0.34028235E39, ~0.123E2): inf inf +(0.123E1, 0.34028235E39, ~0.31415927E1): inf inf +(0.123E1, 0.34028235E39, ~0.27182817E1): inf inf +(0.123E1, 0.34028235E39, ~0.123E1): inf inf +(0.123E1, 0.34028235E39, ~0.123): inf inf +(0.123E1, 0.34028235E39, ~0.123E~2): inf inf +(0.123E1, 0.34028235E39, ~0.11754944E~37): inf inf +(0.123E1, 0.34028235E39, ~0.5877472E~38): inf inf +(0.123E1, 0.34028235E39, ~0.1E~44): inf inf +(0.123E1, 0.34028235E39, ~0.0): inf inf +(0.123E1, 0.17014117E39, 0.34028235E39): inf inf +(0.123E1, 0.17014117E39, 0.17014117E39): inf inf +(0.123E1, 0.17014117E39, 0.123E4): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, 0.123E2): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, 0.31415927E1): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, 0.27182817E1): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, 0.123E1): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, 0.123): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, 0.123E~2): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, 0.11754944E~37): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, 0.5877472E~38): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, 0.1E~44): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, 0.0): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, ~0.34028235E39): ~0.1310087E39 ~0.1310087E39 +(0.123E1, 0.17014117E39, ~0.17014117E39): 0.39132473E38 0.39132473E38 +(0.123E1, 0.17014117E39, ~0.123E4): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, ~0.123E2): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, ~0.31415927E1): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, ~0.27182817E1): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, ~0.123E1): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, ~0.123): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, ~0.123E~2): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, ~0.11754944E~37): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, ~0.5877472E~38): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, ~0.1E~44): 0.20927364E39 0.20927364E39 +(0.123E1, 0.17014117E39, ~0.0): 0.20927364E39 0.20927364E39 +(0.123E1, 0.123E4, 0.123E4): 0.27429E4 0.27429E4 +(0.123E1, 0.123E4, 0.123E2): 0.15252001E4 0.15252001E4 +(0.123E1, 0.123E4, 0.31415927E1): 0.15160416E4 0.15160416E4 +(0.123E1, 0.123E4, 0.27182817E1): 0.15156183E4 0.15156183E4 +(0.123E1, 0.123E4, 0.123E1): 0.151413E4 0.151413E4 +(0.123E1, 0.123E4, 0.123): 0.15130231E4 0.15130231E4 +(0.123E1, 0.123E4, 0.123E~2): 0.15129012E4 0.15129012E4 +(0.123E1, 0.123E4, 0.11754944E~37): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, 0.5877472E~38): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, 0.1E~44): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, 0.0): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, ~0.123E4): 0.28290002E3 0.28290002E3 +(0.123E1, 0.123E4, ~0.123E2): 0.15006E4 0.15006E4 +(0.123E1, 0.123E4, ~0.31415927E1): 0.15097584E4 0.15097584E4 +(0.123E1, 0.123E4, ~0.27182817E1): 0.15101818E4 0.15101818E4 +(0.123E1, 0.123E4, ~0.123E1): 0.151167E4 0.151167E4 +(0.123E1, 0.123E4, ~0.123): 0.1512777E4 0.1512777E4 +(0.123E1, 0.123E4, ~0.123E~2): 0.15128988E4 0.15128988E4 +(0.123E1, 0.123E4, ~0.11754944E~37): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, ~0.5877472E~38): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, ~0.1E~44): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, ~0.0): 0.15129E4 0.15129E4 +(0.123E1, 0.123E2, 0.123E4): 0.1245129E4 0.1245129E4 +(0.123E1, 0.123E2, 0.123E2): 0.27429E2 0.27429E2 +(0.123E1, 0.123E2, 0.31415927E1): 0.18270594E2 0.18270594E2 +(0.123E1, 0.123E2, 0.27182817E1): 0.17847282E2 0.17847282E2 +(0.123E1, 0.123E2, 0.123E1): 0.16359001E2 0.16359001E2 +(0.123E1, 0.123E2, 0.123): 0.15252001E2 0.15252001E2 +(0.123E1, 0.123E2, 0.123E~2): 0.15130231E2 0.15130231E2 +(0.123E1, 0.123E2, 0.11754944E~37): 0.15129001E2 0.15129001E2 +(0.123E1, 0.123E2, 0.5877472E~38): 0.15129001E2 0.15129001E2 +(0.123E1, 0.123E2, 0.1E~44): 0.15129001E2 0.15129001E2 +(0.123E1, 0.123E2, 0.0): 0.15129001E2 0.15129001E2 +(0.123E1, 0.123E2, ~0.123E4): ~0.1214871E4 ~0.1214871E4 +(0.123E1, 0.123E2, ~0.123E2): 0.28290002E1 0.28290002E1 +(0.123E1, 0.123E2, ~0.31415927E1): 0.11987408E2 0.11987408E2 +(0.123E1, 0.123E2, ~0.27182817E1): 0.12410719E2 0.12410719E2 +(0.123E1, 0.123E2, ~0.123E1): 0.13899E2 0.13899E2 +(0.123E1, 0.123E2, ~0.123): 0.150060005E2 0.150060005E2 +(0.123E1, 0.123E2, ~0.123E~2): 0.1512777E2 0.1512777E2 +(0.123E1, 0.123E2, ~0.11754944E~37): 0.15129001E2 0.15129001E2 +(0.123E1, 0.123E2, ~0.5877472E~38): 0.15129001E2 0.15129001E2 +(0.123E1, 0.123E2, ~0.1E~44): 0.15129001E2 0.15129001E2 +(0.123E1, 0.123E2, ~0.0): 0.15129001E2 0.15129001E2 +(0.123E1, 0.31415927E1, 0.123E4): 0.12338641E4 0.12338641E4 +(0.123E1, 0.31415927E1, 0.123E2): 0.1616416E2 0.1616416E2 +(0.123E1, 0.31415927E1, 0.31415927E1): 0.7005752E1 0.7005752E1 +(0.123E1, 0.31415927E1, 0.27182817E1): 0.6582441E1 0.6582441E1 +(0.123E1, 0.31415927E1, 0.123E1): 0.5094159E1 0.5094159E1 +(0.123E1, 0.31415927E1, 0.123): 0.39871593E1 0.39871593E1 +(0.123E1, 0.31415927E1, 0.123E~2): 0.3865389E1 0.3865389E1 +(0.123E1, 0.31415927E1, 0.11754944E~37): 0.3864159E1 0.3864159E1 +(0.123E1, 0.31415927E1, 0.5877472E~38): 0.3864159E1 0.3864159E1 +(0.123E1, 0.31415927E1, 0.1E~44): 0.3864159E1 0.3864159E1 +(0.123E1, 0.31415927E1, 0.0): 0.3864159E1 0.3864159E1 +(0.123E1, 0.31415927E1, ~0.123E4): ~0.12261359E4 ~0.12261359E4 +(0.123E1, 0.31415927E1, ~0.123E2): ~0.8435841E1 ~0.8435841E1 +(0.123E1, 0.31415927E1, ~0.31415927E1): 0.72256637 0.72256637 +(0.123E1, 0.31415927E1, ~0.27182817E1): 0.11458774E1 0.11458774E1 +(0.123E1, 0.31415927E1, ~0.123E1): 0.2634159E1 0.2634159E1 +(0.123E1, 0.31415927E1, ~0.123): 0.37411592E1 0.37411592E1 +(0.123E1, 0.31415927E1, ~0.123E~2): 0.3862929E1 0.3862929E1 +(0.123E1, 0.31415927E1, ~0.11754944E~37): 0.3864159E1 0.3864159E1 +(0.123E1, 0.31415927E1, ~0.5877472E~38): 0.3864159E1 0.3864159E1 +(0.123E1, 0.31415927E1, ~0.1E~44): 0.3864159E1 0.3864159E1 +(0.123E1, 0.31415927E1, ~0.0): 0.3864159E1 0.3864159E1 +(0.123E1, 0.27182817E1, 0.123E4): 0.12333435E4 0.12333435E4 +(0.123E1, 0.27182817E1, 0.123E2): 0.15643487E2 0.15643487E2 +(0.123E1, 0.27182817E1, 0.31415927E1): 0.64850793E1 0.64850793E1 +(0.123E1, 0.27182817E1, 0.27182817E1): 0.60617685E1 0.60617685E1 +(0.123E1, 0.27182817E1, 0.123E1): 0.4573487E1 0.4573487E1 +(0.123E1, 0.27182817E1, 0.123): 0.34664867E1 0.34664867E1 +(0.123E1, 0.27182817E1, 0.123E~2): 0.33447165E1 0.33447165E1 +(0.123E1, 0.27182817E1, 0.11754944E~37): 0.33434865E1 0.33434865E1 +(0.123E1, 0.27182817E1, 0.5877472E~38): 0.33434865E1 0.33434865E1 +(0.123E1, 0.27182817E1, 0.1E~44): 0.33434865E1 0.33434865E1 +(0.123E1, 0.27182817E1, 0.0): 0.33434865E1 0.33434865E1 +(0.123E1, 0.27182817E1, ~0.123E4): ~0.12266565E4 ~0.12266565E4 +(0.123E1, 0.27182817E1, ~0.123E2): ~0.8956513E1 ~0.8956513E1 +(0.123E1, 0.27182817E1, ~0.31415927E1): 0.20189385 0.20189385 +(0.123E1, 0.27182817E1, ~0.27182817E1): 0.62520486 0.62520486 +(0.123E1, 0.27182817E1, ~0.123E1): 0.21134865E1 0.21134865E1 +(0.123E1, 0.27182817E1, ~0.123): 0.32204866E1 0.32204866E1 +(0.123E1, 0.27182817E1, ~0.123E~2): 0.33422565E1 0.33422565E1 +(0.123E1, 0.27182817E1, ~0.11754944E~37): 0.33434865E1 0.33434865E1 +(0.123E1, 0.27182817E1, ~0.5877472E~38): 0.33434865E1 0.33434865E1 +(0.123E1, 0.27182817E1, ~0.1E~44): 0.33434865E1 0.33434865E1 +(0.123E1, 0.27182817E1, ~0.0): 0.33434865E1 0.33434865E1 +(0.123E1, 0.123E1, 0.123E4): 0.1231513E4 0.1231513E4 +(0.123E1, 0.123E1, 0.123E2): 0.13812901E2 0.13812901E2 +(0.123E1, 0.123E1, 0.31415927E1): 0.4654493E1 0.4654493E1 +(0.123E1, 0.123E1, 0.27182817E1): 0.42311816E1 0.42311816E1 +(0.123E1, 0.123E1, 0.123E1): 0.27429001E1 0.27429001E1 +(0.123E1, 0.123E1, 0.123): 0.16359E1 0.16359E1 +(0.123E1, 0.123E1, 0.123E~2): 0.151413E1 0.151413E1 +(0.123E1, 0.123E1, 0.11754944E~37): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, 0.5877472E~38): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, 0.1E~44): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, 0.0): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, ~0.123E4): ~0.1228487E4 ~0.1228487E4 +(0.123E1, 0.123E1, ~0.123E2): ~0.107871E2 ~0.107871E2 +(0.123E1, 0.123E1, ~0.31415927E1): ~0.16286927E1 ~0.16286927E1 +(0.123E1, 0.123E1, ~0.27182817E1): ~0.12053818E1 ~0.12053818E1 +(0.123E1, 0.123E1, ~0.123E1): 0.28290004 0.28290004 +(0.123E1, 0.123E1, ~0.123): 0.13899001E1 0.13899001E1 +(0.123E1, 0.123E1, ~0.123E~2): 0.151167E1 0.151167E1 +(0.123E1, 0.123E1, ~0.11754944E~37): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, ~0.5877472E~38): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, ~0.1E~44): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, ~0.0): 0.15129E1 0.15129E1 +(0.123E1, 0.123, 0.123E4): 0.12301512E4 0.12301512E4 +(0.123E1, 0.123, 0.123E2): 0.1245129E2 0.1245129E2 +(0.123E1, 0.123, 0.31415927E1): 0.32928827E1 0.32928827E1 +(0.123E1, 0.123, 0.27182817E1): 0.28695717E1 0.28695717E1 +(0.123E1, 0.123, 0.123E1): 0.13812901E1 0.13812901E1 +(0.123E1, 0.123, 0.123): 0.27429 0.27429 +(0.123E1, 0.123, 0.123E~2): 0.15252 0.15252 +(0.123E1, 0.123, 0.11754944E~37): 0.15129 0.15129 +(0.123E1, 0.123, 0.5877472E~38): 0.15129 0.15129 +(0.123E1, 0.123, 0.1E~44): 0.15129 0.15129 +(0.123E1, 0.123, 0.0): 0.15129 0.15129 +(0.123E1, 0.123, ~0.123E4): ~0.12298488E4 ~0.12298488E4 +(0.123E1, 0.123, ~0.123E2): ~0.1214871E2 ~0.1214871E2 +(0.123E1, 0.123, ~0.31415927E1): ~0.29903028E1 ~0.29903028E1 +(0.123E1, 0.123, ~0.27182817E1): ~0.25669918E1 ~0.25669918E1 +(0.123E1, 0.123, ~0.123E1): ~0.107871E1 ~0.107871E1 +(0.123E1, 0.123, ~0.123): 0.28290004E~1 0.28290004E~1 +(0.123E1, 0.123, ~0.123E~2): 0.15006001 0.15006001 +(0.123E1, 0.123, ~0.11754944E~37): 0.15129 0.15129 +(0.123E1, 0.123, ~0.5877472E~38): 0.15129 0.15129 +(0.123E1, 0.123, ~0.1E~44): 0.15129 0.15129 +(0.123E1, 0.123, ~0.0): 0.15129 0.15129 +(0.123E1, 0.123E~2, 0.123E4): 0.12300015E4 0.12300015E4 +(0.123E1, 0.123E~2, 0.123E2): 0.12301513E2 0.12301513E2 +(0.123E1, 0.123E~2, 0.31415927E1): 0.31431057E1 0.31431057E1 +(0.123E1, 0.123E~2, 0.27182817E1): 0.27197948E1 0.27197948E1 +(0.123E1, 0.123E~2, 0.123E1): 0.12315129E1 0.12315129E1 +(0.123E1, 0.123E~2, 0.123): 0.1245129 0.1245129 +(0.123E1, 0.123E~2, 0.123E~2): 0.27429E~2 0.27429E~2 +(0.123E1, 0.123E~2, 0.11754944E~37): 0.15129001E~2 0.15129001E~2 +(0.123E1, 0.123E~2, 0.5877472E~38): 0.15129001E~2 0.15129001E~2 +(0.123E1, 0.123E~2, 0.1E~44): 0.15129001E~2 0.15129001E~2 +(0.123E1, 0.123E~2, 0.0): 0.15129001E~2 0.15129001E~2 +(0.123E1, 0.123E~2, ~0.123E4): ~0.12299985E4 ~0.12299985E4 +(0.123E1, 0.123E~2, ~0.123E2): ~0.12298488E2 ~0.12298488E2 +(0.123E1, 0.123E~2, ~0.31415927E1): ~0.31400797E1 ~0.31400797E1 +(0.123E1, 0.123E~2, ~0.27182817E1): ~0.27167687E1 ~0.27167687E1 +(0.123E1, 0.123E~2, ~0.123E1): ~0.12284871E1 ~0.12284871E1 +(0.123E1, 0.123E~2, ~0.123): ~0.1214871 ~0.1214871 +(0.123E1, 0.123E~2, ~0.123E~2): 0.28290003E~3 0.28290003E~3 +(0.123E1, 0.123E~2, ~0.11754944E~37): 0.15129001E~2 0.15129001E~2 +(0.123E1, 0.123E~2, ~0.5877472E~38): 0.15129001E~2 0.15129001E~2 +(0.123E1, 0.123E~2, ~0.1E~44): 0.15129001E~2 0.15129001E~2 +(0.123E1, 0.123E~2, ~0.0): 0.15129001E~2 0.15129001E~2 +(0.123E1, 0.1E~44, 0.11754944E~37): 0.11754945E~37 0.11754945E~37 +(0.123E1, 0.1E~44, 0.5877472E~38): 0.5877473E~38 0.5877473E~38 +(0.123E1, 0.1E~44, 0.1E~44): 0.3E~44 0.3E~44 +(0.123E1, 0.1E~44, 0.0): 0.1E~44 0.1E~44 +(0.123E1, 0.1E~44, ~0.11754944E~37): ~0.11754942E~37 ~0.11754942E~37 +(0.123E1, 0.1E~44, ~0.5877472E~38): ~0.587747E~38 ~0.587747E~38 +(0.123E1, 0.1E~44, ~0.1E~44): 0.0 0.0 +(0.123E1, 0.1E~44, ~0.0): 0.1E~44 0.1E~44 +(0.123E1, ~0.34028235E39, 0.34028235E39): ~0.78264946E38 ~0.78264946E38 +(0.123E1, ~0.34028235E39, 0.17014117E39): ~0.24840611E39 ~0.24840611E39 +(0.123E1, ~0.34028235E39, 0.123E4): ~inf ~inf +(0.123E1, ~0.34028235E39, 0.123E2): ~inf ~inf +(0.123E1, ~0.34028235E39, 0.31415927E1): ~inf ~inf +(0.123E1, ~0.34028235E39, 0.27182817E1): ~inf ~inf +(0.123E1, ~0.34028235E39, 0.123E1): ~inf ~inf +(0.123E1, ~0.34028235E39, 0.123): ~inf ~inf +(0.123E1, ~0.34028235E39, 0.123E~2): ~inf ~inf +(0.123E1, ~0.34028235E39, 0.11754944E~37): ~inf ~inf +(0.123E1, ~0.34028235E39, 0.5877472E~38): ~inf ~inf +(0.123E1, ~0.34028235E39, 0.1E~44): ~inf ~inf +(0.123E1, ~0.34028235E39, 0.0): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.34028235E39): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.17014117E39): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.123E4): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.123E2): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.31415927E1): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.27182817E1): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.123E1): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.123): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.123E~2): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.11754944E~37): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.5877472E~38): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.1E~44): ~inf ~inf +(0.123E1, ~0.34028235E39, ~0.0): ~inf ~inf +(0.123E1, ~0.17014117E39, 0.34028235E39): 0.1310087E39 0.1310087E39 +(0.123E1, ~0.17014117E39, 0.17014117E39): ~0.39132473E38 ~0.39132473E38 +(0.123E1, ~0.17014117E39, 0.123E4): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, 0.123E2): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, 0.31415927E1): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, 0.27182817E1): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, 0.123E1): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, 0.123): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, 0.123E~2): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, 0.11754944E~37): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, 0.5877472E~38): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, 0.1E~44): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, 0.0): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, ~0.34028235E39): ~inf ~inf +(0.123E1, ~0.17014117E39, ~0.17014117E39): ~inf ~inf +(0.123E1, ~0.17014117E39, ~0.123E4): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, ~0.123E2): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, ~0.31415927E1): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, ~0.27182817E1): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, ~0.123E1): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, ~0.123): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, ~0.123E~2): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, ~0.11754944E~37): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, ~0.5877472E~38): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, ~0.1E~44): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.17014117E39, ~0.0): ~0.20927364E39 ~0.20927364E39 +(0.123E1, ~0.123E4, 0.123E4): ~0.28290002E3 ~0.28290002E3 +(0.123E1, ~0.123E4, 0.123E2): ~0.15006E4 ~0.15006E4 +(0.123E1, ~0.123E4, 0.31415927E1): ~0.15097584E4 ~0.15097584E4 +(0.123E1, ~0.123E4, 0.27182817E1): ~0.15101818E4 ~0.15101818E4 +(0.123E1, ~0.123E4, 0.123E1): ~0.151167E4 ~0.151167E4 +(0.123E1, ~0.123E4, 0.123): ~0.1512777E4 ~0.1512777E4 +(0.123E1, ~0.123E4, 0.123E~2): ~0.15128988E4 ~0.15128988E4 +(0.123E1, ~0.123E4, 0.11754944E~37): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, 0.5877472E~38): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, 0.1E~44): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, 0.0): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, ~0.123E4): ~0.27429E4 ~0.27429E4 +(0.123E1, ~0.123E4, ~0.123E2): ~0.15252001E4 ~0.15252001E4 +(0.123E1, ~0.123E4, ~0.31415927E1): ~0.15160416E4 ~0.15160416E4 +(0.123E1, ~0.123E4, ~0.27182817E1): ~0.15156183E4 ~0.15156183E4 +(0.123E1, ~0.123E4, ~0.123E1): ~0.151413E4 ~0.151413E4 +(0.123E1, ~0.123E4, ~0.123): ~0.15130231E4 ~0.15130231E4 +(0.123E1, ~0.123E4, ~0.123E~2): ~0.15129012E4 ~0.15129012E4 +(0.123E1, ~0.123E4, ~0.11754944E~37): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, ~0.5877472E~38): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, ~0.1E~44): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, ~0.0): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E2, 0.123E4): 0.1214871E4 0.1214871E4 +(0.123E1, ~0.123E2, 0.123E2): ~0.28290002E1 ~0.28290002E1 +(0.123E1, ~0.123E2, 0.31415927E1): ~0.11987408E2 ~0.11987408E2 +(0.123E1, ~0.123E2, 0.27182817E1): ~0.12410719E2 ~0.12410719E2 +(0.123E1, ~0.123E2, 0.123E1): ~0.13899E2 ~0.13899E2 +(0.123E1, ~0.123E2, 0.123): ~0.150060005E2 ~0.150060005E2 +(0.123E1, ~0.123E2, 0.123E~2): ~0.1512777E2 ~0.1512777E2 +(0.123E1, ~0.123E2, 0.11754944E~37): ~0.15129001E2 ~0.15129001E2 +(0.123E1, ~0.123E2, 0.5877472E~38): ~0.15129001E2 ~0.15129001E2 +(0.123E1, ~0.123E2, 0.1E~44): ~0.15129001E2 ~0.15129001E2 +(0.123E1, ~0.123E2, 0.0): ~0.15129001E2 ~0.15129001E2 +(0.123E1, ~0.123E2, ~0.123E4): ~0.1245129E4 ~0.1245129E4 +(0.123E1, ~0.123E2, ~0.123E2): ~0.27429E2 ~0.27429E2 +(0.123E1, ~0.123E2, ~0.31415927E1): ~0.18270594E2 ~0.18270594E2 +(0.123E1, ~0.123E2, ~0.27182817E1): ~0.17847282E2 ~0.17847282E2 +(0.123E1, ~0.123E2, ~0.123E1): ~0.16359001E2 ~0.16359001E2 +(0.123E1, ~0.123E2, ~0.123): ~0.15252001E2 ~0.15252001E2 +(0.123E1, ~0.123E2, ~0.123E~2): ~0.15130231E2 ~0.15130231E2 +(0.123E1, ~0.123E2, ~0.11754944E~37): ~0.15129001E2 ~0.15129001E2 +(0.123E1, ~0.123E2, ~0.5877472E~38): ~0.15129001E2 ~0.15129001E2 +(0.123E1, ~0.123E2, ~0.1E~44): ~0.15129001E2 ~0.15129001E2 +(0.123E1, ~0.123E2, ~0.0): ~0.15129001E2 ~0.15129001E2 +(0.123E1, ~0.31415927E1, 0.123E4): 0.12261359E4 0.12261359E4 +(0.123E1, ~0.31415927E1, 0.123E2): 0.8435841E1 0.8435841E1 +(0.123E1, ~0.31415927E1, 0.31415927E1): ~0.72256637 ~0.72256637 +(0.123E1, ~0.31415927E1, 0.27182817E1): ~0.11458774E1 ~0.11458774E1 +(0.123E1, ~0.31415927E1, 0.123E1): ~0.2634159E1 ~0.2634159E1 +(0.123E1, ~0.31415927E1, 0.123): ~0.37411592E1 ~0.37411592E1 +(0.123E1, ~0.31415927E1, 0.123E~2): ~0.3862929E1 ~0.3862929E1 +(0.123E1, ~0.31415927E1, 0.11754944E~37): ~0.3864159E1 ~0.3864159E1 +(0.123E1, ~0.31415927E1, 0.5877472E~38): ~0.3864159E1 ~0.3864159E1 +(0.123E1, ~0.31415927E1, 0.1E~44): ~0.3864159E1 ~0.3864159E1 +(0.123E1, ~0.31415927E1, 0.0): ~0.3864159E1 ~0.3864159E1 +(0.123E1, ~0.31415927E1, ~0.123E4): ~0.12338641E4 ~0.12338641E4 +(0.123E1, ~0.31415927E1, ~0.123E2): ~0.1616416E2 ~0.1616416E2 +(0.123E1, ~0.31415927E1, ~0.31415927E1): ~0.7005752E1 ~0.7005752E1 +(0.123E1, ~0.31415927E1, ~0.27182817E1): ~0.6582441E1 ~0.6582441E1 +(0.123E1, ~0.31415927E1, ~0.123E1): ~0.5094159E1 ~0.5094159E1 +(0.123E1, ~0.31415927E1, ~0.123): ~0.39871593E1 ~0.39871593E1 +(0.123E1, ~0.31415927E1, ~0.123E~2): ~0.3865389E1 ~0.3865389E1 +(0.123E1, ~0.31415927E1, ~0.11754944E~37): ~0.3864159E1 ~0.3864159E1 +(0.123E1, ~0.31415927E1, ~0.5877472E~38): ~0.3864159E1 ~0.3864159E1 +(0.123E1, ~0.31415927E1, ~0.1E~44): ~0.3864159E1 ~0.3864159E1 +(0.123E1, ~0.31415927E1, ~0.0): ~0.3864159E1 ~0.3864159E1 +(0.123E1, ~0.27182817E1, 0.123E4): 0.12266565E4 0.12266565E4 +(0.123E1, ~0.27182817E1, 0.123E2): 0.8956513E1 0.8956513E1 +(0.123E1, ~0.27182817E1, 0.31415927E1): ~0.20189385 ~0.20189385 +(0.123E1, ~0.27182817E1, 0.27182817E1): ~0.62520486 ~0.62520486 +(0.123E1, ~0.27182817E1, 0.123E1): ~0.21134865E1 ~0.21134865E1 +(0.123E1, ~0.27182817E1, 0.123): ~0.32204866E1 ~0.32204866E1 +(0.123E1, ~0.27182817E1, 0.123E~2): ~0.33422565E1 ~0.33422565E1 +(0.123E1, ~0.27182817E1, 0.11754944E~37): ~0.33434865E1 ~0.33434865E1 +(0.123E1, ~0.27182817E1, 0.5877472E~38): ~0.33434865E1 ~0.33434865E1 +(0.123E1, ~0.27182817E1, 0.1E~44): ~0.33434865E1 ~0.33434865E1 +(0.123E1, ~0.27182817E1, 0.0): ~0.33434865E1 ~0.33434865E1 +(0.123E1, ~0.27182817E1, ~0.123E4): ~0.12333435E4 ~0.12333435E4 +(0.123E1, ~0.27182817E1, ~0.123E2): ~0.15643487E2 ~0.15643487E2 +(0.123E1, ~0.27182817E1, ~0.31415927E1): ~0.64850793E1 ~0.64850793E1 +(0.123E1, ~0.27182817E1, ~0.27182817E1): ~0.60617685E1 ~0.60617685E1 +(0.123E1, ~0.27182817E1, ~0.123E1): ~0.4573487E1 ~0.4573487E1 +(0.123E1, ~0.27182817E1, ~0.123): ~0.34664867E1 ~0.34664867E1 +(0.123E1, ~0.27182817E1, ~0.123E~2): ~0.33447165E1 ~0.33447165E1 +(0.123E1, ~0.27182817E1, ~0.11754944E~37): ~0.33434865E1 ~0.33434865E1 +(0.123E1, ~0.27182817E1, ~0.5877472E~38): ~0.33434865E1 ~0.33434865E1 +(0.123E1, ~0.27182817E1, ~0.1E~44): ~0.33434865E1 ~0.33434865E1 +(0.123E1, ~0.27182817E1, ~0.0): ~0.33434865E1 ~0.33434865E1 +(0.123E1, ~0.123E1, 0.123E4): 0.1228487E4 0.1228487E4 +(0.123E1, ~0.123E1, 0.123E2): 0.107871E2 0.107871E2 +(0.123E1, ~0.123E1, 0.31415927E1): 0.16286927E1 0.16286927E1 +(0.123E1, ~0.123E1, 0.27182817E1): 0.12053818E1 0.12053818E1 +(0.123E1, ~0.123E1, 0.123E1): ~0.28290004 ~0.28290004 +(0.123E1, ~0.123E1, 0.123): ~0.13899001E1 ~0.13899001E1 +(0.123E1, ~0.123E1, 0.123E~2): ~0.151167E1 ~0.151167E1 +(0.123E1, ~0.123E1, 0.11754944E~37): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, 0.5877472E~38): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, 0.1E~44): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, 0.0): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, ~0.123E4): ~0.1231513E4 ~0.1231513E4 +(0.123E1, ~0.123E1, ~0.123E2): ~0.13812901E2 ~0.13812901E2 +(0.123E1, ~0.123E1, ~0.31415927E1): ~0.4654493E1 ~0.4654493E1 +(0.123E1, ~0.123E1, ~0.27182817E1): ~0.42311816E1 ~0.42311816E1 +(0.123E1, ~0.123E1, ~0.123E1): ~0.27429001E1 ~0.27429001E1 +(0.123E1, ~0.123E1, ~0.123): ~0.16359E1 ~0.16359E1 +(0.123E1, ~0.123E1, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(0.123E1, ~0.123E1, ~0.11754944E~37): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, ~0.5877472E~38): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, ~0.1E~44): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, ~0.0): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123, 0.123E4): 0.12298488E4 0.12298488E4 +(0.123E1, ~0.123, 0.123E2): 0.1214871E2 0.1214871E2 +(0.123E1, ~0.123, 0.31415927E1): 0.29903028E1 0.29903028E1 +(0.123E1, ~0.123, 0.27182817E1): 0.25669918E1 0.25669918E1 +(0.123E1, ~0.123, 0.123E1): 0.107871E1 0.107871E1 +(0.123E1, ~0.123, 0.123): ~0.28290004E~1 ~0.28290004E~1 +(0.123E1, ~0.123, 0.123E~2): ~0.15006001 ~0.15006001 +(0.123E1, ~0.123, 0.11754944E~37): ~0.15129 ~0.15129 +(0.123E1, ~0.123, 0.5877472E~38): ~0.15129 ~0.15129 +(0.123E1, ~0.123, 0.1E~44): ~0.15129 ~0.15129 +(0.123E1, ~0.123, 0.0): ~0.15129 ~0.15129 +(0.123E1, ~0.123, ~0.123E4): ~0.12301512E4 ~0.12301512E4 +(0.123E1, ~0.123, ~0.123E2): ~0.1245129E2 ~0.1245129E2 +(0.123E1, ~0.123, ~0.31415927E1): ~0.32928827E1 ~0.32928827E1 +(0.123E1, ~0.123, ~0.27182817E1): ~0.28695717E1 ~0.28695717E1 +(0.123E1, ~0.123, ~0.123E1): ~0.13812901E1 ~0.13812901E1 +(0.123E1, ~0.123, ~0.123): ~0.27429 ~0.27429 +(0.123E1, ~0.123, ~0.123E~2): ~0.15252 ~0.15252 +(0.123E1, ~0.123, ~0.11754944E~37): ~0.15129 ~0.15129 +(0.123E1, ~0.123, ~0.5877472E~38): ~0.15129 ~0.15129 +(0.123E1, ~0.123, ~0.1E~44): ~0.15129 ~0.15129 +(0.123E1, ~0.123, ~0.0): ~0.15129 ~0.15129 +(0.123E1, ~0.123E~2, 0.123E4): 0.12299985E4 0.12299985E4 +(0.123E1, ~0.123E~2, 0.123E2): 0.12298488E2 0.12298488E2 +(0.123E1, ~0.123E~2, 0.31415927E1): 0.31400797E1 0.31400797E1 +(0.123E1, ~0.123E~2, 0.27182817E1): 0.27167687E1 0.27167687E1 +(0.123E1, ~0.123E~2, 0.123E1): 0.12284871E1 0.12284871E1 +(0.123E1, ~0.123E~2, 0.123): 0.1214871 0.1214871 +(0.123E1, ~0.123E~2, 0.123E~2): ~0.28290003E~3 ~0.28290003E~3 +(0.123E1, ~0.123E~2, 0.11754944E~37): ~0.15129001E~2 ~0.15129001E~2 +(0.123E1, ~0.123E~2, 0.5877472E~38): ~0.15129001E~2 ~0.15129001E~2 +(0.123E1, ~0.123E~2, 0.1E~44): ~0.15129001E~2 ~0.15129001E~2 +(0.123E1, ~0.123E~2, 0.0): ~0.15129001E~2 ~0.15129001E~2 +(0.123E1, ~0.123E~2, ~0.123E4): ~0.12300015E4 ~0.12300015E4 +(0.123E1, ~0.123E~2, ~0.123E2): ~0.12301513E2 ~0.12301513E2 +(0.123E1, ~0.123E~2, ~0.31415927E1): ~0.31431057E1 ~0.31431057E1 +(0.123E1, ~0.123E~2, ~0.27182817E1): ~0.27197948E1 ~0.27197948E1 +(0.123E1, ~0.123E~2, ~0.123E1): ~0.12315129E1 ~0.12315129E1 +(0.123E1, ~0.123E~2, ~0.123): ~0.1245129 ~0.1245129 +(0.123E1, ~0.123E~2, ~0.123E~2): ~0.27429E~2 ~0.27429E~2 +(0.123E1, ~0.123E~2, ~0.11754944E~37): ~0.15129001E~2 ~0.15129001E~2 +(0.123E1, ~0.123E~2, ~0.5877472E~38): ~0.15129001E~2 ~0.15129001E~2 +(0.123E1, ~0.123E~2, ~0.1E~44): ~0.15129001E~2 ~0.15129001E~2 +(0.123E1, ~0.123E~2, ~0.0): ~0.15129001E~2 ~0.15129001E~2 +(0.123E1, ~0.1E~44, 0.11754944E~37): 0.11754942E~37 0.11754942E~37 +(0.123E1, ~0.1E~44, 0.5877472E~38): 0.587747E~38 0.587747E~38 +(0.123E1, ~0.1E~44, 0.1E~44): ~0.0 ~0.0 +(0.123E1, ~0.1E~44, 0.0): ~0.1E~44 ~0.1E~44 +(0.123E1, ~0.1E~44, ~0.11754944E~37): ~0.11754945E~37 ~0.11754945E~37 +(0.123E1, ~0.1E~44, ~0.5877472E~38): ~0.5877473E~38 ~0.5877473E~38 +(0.123E1, ~0.1E~44, ~0.1E~44): ~0.3E~44 ~0.3E~44 +(0.123E1, ~0.1E~44, ~0.0): ~0.1E~44 ~0.1E~44 +(0.123, 0.34028235E39, 0.34028235E39): inf inf +(0.123, 0.34028235E39, 0.17014117E39): 0.2119959E39 0.2119959E39 +(0.123, 0.34028235E39, 0.123E4): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, 0.123E2): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, 0.31415927E1): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, 0.27182817E1): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, 0.123E1): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, 0.123): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, 0.123E~2): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, 0.11754944E~37): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, 0.5877472E~38): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, 0.1E~44): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, 0.0): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, ~0.34028235E39): ~0.2984276E39 ~0.2984276E39 +(0.123, 0.34028235E39, ~0.17014117E39): ~0.12828644E39 ~0.12828644E39 +(0.123, 0.34028235E39, ~0.123E4): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, ~0.123E2): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, ~0.31415927E1): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, ~0.27182817E1): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, ~0.123E1): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, ~0.123): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, ~0.123E~2): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, ~0.11754944E~37): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, ~0.5877472E~38): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, ~0.1E~44): 0.4185473E38 0.4185473E38 +(0.123, 0.34028235E39, ~0.0): 0.4185473E38 0.4185473E38 +(0.123, 0.17014117E39, 0.34028235E39): inf inf +(0.123, 0.17014117E39, 0.17014117E39): 0.19106853E39 0.19106853E39 +(0.123, 0.17014117E39, 0.123E4): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, 0.123E2): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, 0.31415927E1): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, 0.27182817E1): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, 0.123E1): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, 0.123): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, 0.123E~2): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, 0.11754944E~37): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, 0.5877472E~38): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, 0.1E~44): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, 0.0): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, ~0.34028235E39): ~0.31935498E39 ~0.31935498E39 +(0.123, 0.17014117E39, ~0.17014117E39): ~0.1492138E39 ~0.1492138E39 +(0.123, 0.17014117E39, ~0.123E4): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, ~0.123E2): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, ~0.31415927E1): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, ~0.27182817E1): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, ~0.123E1): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, ~0.123): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, ~0.123E~2): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, ~0.11754944E~37): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, ~0.5877472E~38): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, ~0.1E~44): 0.20927365E38 0.20927365E38 +(0.123, 0.17014117E39, ~0.0): 0.20927365E38 0.20927365E38 +(0.123, 0.123E4, 0.123E4): 0.138129E4 0.138129E4 +(0.123, 0.123E4, 0.123E2): 0.16359001E3 0.16359001E3 +(0.123, 0.123E4, 0.31415927E1): 0.1544316E3 0.1544316E3 +(0.123, 0.123E4, 0.27182817E1): 0.15400829E3 0.15400829E3 +(0.123, 0.123E4, 0.123E1): 0.15252E3 0.15252E3 +(0.123, 0.123E4, 0.123): 0.15141301E3 0.15141301E3 +(0.123, 0.123E4, 0.123E~2): 0.15129123E3 0.15129123E3 +(0.123, 0.123E4, 0.11754944E~37): 0.15129001E3 0.15129001E3 +(0.123, 0.123E4, 0.5877472E~38): 0.15129001E3 0.15129001E3 +(0.123, 0.123E4, 0.1E~44): 0.15129001E3 0.15129001E3 +(0.123, 0.123E4, 0.0): 0.15129001E3 0.15129001E3 +(0.123, 0.123E4, ~0.123E4): ~0.107871E4 ~0.107871E4 +(0.123, 0.123E4, ~0.123E2): 0.13899E3 0.13899E3 +(0.123, 0.123E4, ~0.31415927E1): 0.1481484E3 0.1481484E3 +(0.123, 0.123E4, ~0.27182817E1): 0.14857172E3 0.14857172E3 +(0.123, 0.123E4, ~0.123E1): 0.15006E3 0.15006E3 +(0.123, 0.123E4, ~0.123): 0.151167E3 0.151167E3 +(0.123, 0.123E4, ~0.123E~2): 0.15128877E3 0.15128877E3 +(0.123, 0.123E4, ~0.11754944E~37): 0.15129001E3 0.15129001E3 +(0.123, 0.123E4, ~0.5877472E~38): 0.15129001E3 0.15129001E3 +(0.123, 0.123E4, ~0.1E~44): 0.15129001E3 0.15129001E3 +(0.123, 0.123E4, ~0.0): 0.15129001E3 0.15129001E3 +(0.123, 0.123E2, 0.123E4): 0.1231513E4 0.1231513E4 +(0.123, 0.123E2, 0.123E2): 0.13812901E2 0.13812901E2 +(0.123, 0.123E2, 0.31415927E1): 0.4654493E1 0.4654493E1 +(0.123, 0.123E2, 0.27182817E1): 0.42311816E1 0.42311816E1 +(0.123, 0.123E2, 0.123E1): 0.27429001E1 0.27429001E1 +(0.123, 0.123E2, 0.123): 0.16359E1 0.16359E1 +(0.123, 0.123E2, 0.123E~2): 0.15141301E1 0.15141301E1 +(0.123, 0.123E2, 0.11754944E~37): 0.15129001E1 0.15129001E1 +(0.123, 0.123E2, 0.5877472E~38): 0.15129001E1 0.15129001E1 +(0.123, 0.123E2, 0.1E~44): 0.15129001E1 0.15129001E1 +(0.123, 0.123E2, 0.0): 0.15129001E1 0.15129001E1 +(0.123, 0.123E2, ~0.123E4): ~0.1228487E4 ~0.1228487E4 +(0.123, 0.123E2, ~0.123E2): ~0.107871E2 ~0.107871E2 +(0.123, 0.123E2, ~0.31415927E1): ~0.16286926E1 ~0.16286926E1 +(0.123, 0.123E2, ~0.27182817E1): ~0.12053816E1 ~0.12053816E1 +(0.123, 0.123E2, ~0.123E1): 0.28290004 0.28290004 +(0.123, 0.123E2, ~0.123): 0.13899001E1 0.13899001E1 +(0.123, 0.123E2, ~0.123E~2): 0.15116701E1 0.15116701E1 +(0.123, 0.123E2, ~0.11754944E~37): 0.15129001E1 0.15129001E1 +(0.123, 0.123E2, ~0.5877472E~38): 0.15129001E1 0.15129001E1 +(0.123, 0.123E2, ~0.1E~44): 0.15129001E1 0.15129001E1 +(0.123, 0.123E2, ~0.0): 0.15129001E1 0.15129001E1 +(0.123, 0.31415927E1, 0.123E4): 0.12303865E4 0.12303865E4 +(0.123, 0.31415927E1, 0.123E2): 0.12686416E2 0.12686416E2 +(0.123, 0.31415927E1, 0.31415927E1): 0.35280087E1 0.35280087E1 +(0.123, 0.31415927E1, 0.27182817E1): 0.31046977E1 0.31046977E1 +(0.123, 0.31415927E1, 0.123E1): 0.1616416E1 0.1616416E1 +(0.123, 0.31415927E1, 0.123): 0.5094159 0.5094159 +(0.123, 0.31415927E1, 0.123E~2): 0.38764593 0.38764593 +(0.123, 0.31415927E1, 0.11754944E~37): 0.38641593 0.38641593 +(0.123, 0.31415927E1, 0.5877472E~38): 0.38641593 0.38641593 +(0.123, 0.31415927E1, 0.1E~44): 0.38641593 0.38641593 +(0.123, 0.31415927E1, 0.0): 0.38641593 0.38641593 +(0.123, 0.31415927E1, ~0.123E4): ~0.12296135E4 ~0.12296135E4 +(0.123, 0.31415927E1, ~0.123E2): ~0.11913585E2 ~0.11913585E2 +(0.123, 0.31415927E1, ~0.31415927E1): ~0.27551768E1 ~0.27551768E1 +(0.123, 0.31415927E1, ~0.27182817E1): ~0.23318658E1 ~0.23318658E1 +(0.123, 0.31415927E1, ~0.123E1): ~0.8435841 ~0.8435841 +(0.123, 0.31415927E1, ~0.123): 0.2634159 0.2634159 +(0.123, 0.31415927E1, ~0.123E~2): 0.38518593 0.38518593 +(0.123, 0.31415927E1, ~0.11754944E~37): 0.38641593 0.38641593 +(0.123, 0.31415927E1, ~0.5877472E~38): 0.38641593 0.38641593 +(0.123, 0.31415927E1, ~0.1E~44): 0.38641593 0.38641593 +(0.123, 0.31415927E1, ~0.0): 0.38641593 0.38641593 +(0.123, 0.27182817E1, 0.123E4): 0.12303344E4 0.12303344E4 +(0.123, 0.27182817E1, 0.123E2): 0.12634349E2 0.12634349E2 +(0.123, 0.27182817E1, 0.31415927E1): 0.34759414E1 0.34759414E1 +(0.123, 0.27182817E1, 0.27182817E1): 0.30526304E1 0.30526304E1 +(0.123, 0.27182817E1, 0.123E1): 0.15643487E1 0.15643487E1 +(0.123, 0.27182817E1, 0.123): 0.45734867 0.45734867 +(0.123, 0.27182817E1, 0.123E~2): 0.33557865 0.33557865 +(0.123, 0.27182817E1, 0.11754944E~37): 0.33434868 0.33434868 +(0.123, 0.27182817E1, 0.5877472E~38): 0.33434868 0.33434868 +(0.123, 0.27182817E1, 0.1E~44): 0.33434868 0.33434868 +(0.123, 0.27182817E1, 0.0): 0.33434868 0.33434868 +(0.123, 0.27182817E1, ~0.123E4): ~0.12296656E4 ~0.12296656E4 +(0.123, 0.27182817E1, ~0.123E2): ~0.119656515E2 ~0.119656515E2 +(0.123, 0.27182817E1, ~0.31415927E1): ~0.2807244E1 ~0.2807244E1 +(0.123, 0.27182817E1, ~0.27182817E1): ~0.2383933E1 ~0.2383933E1 +(0.123, 0.27182817E1, ~0.123E1): ~0.89565134 ~0.89565134 +(0.123, 0.27182817E1, ~0.123): 0.21134867 0.21134867 +(0.123, 0.27182817E1, ~0.123E~2): 0.33311868 0.33311868 +(0.123, 0.27182817E1, ~0.11754944E~37): 0.33434868 0.33434868 +(0.123, 0.27182817E1, ~0.5877472E~38): 0.33434868 0.33434868 +(0.123, 0.27182817E1, ~0.1E~44): 0.33434868 0.33434868 +(0.123, 0.27182817E1, ~0.0): 0.33434868 0.33434868 +(0.123, 0.123E1, 0.123E4): 0.12301512E4 0.12301512E4 +(0.123, 0.123E1, 0.123E2): 0.1245129E2 0.1245129E2 +(0.123, 0.123E1, 0.31415927E1): 0.32928827E1 0.32928827E1 +(0.123, 0.123E1, 0.27182817E1): 0.28695717E1 0.28695717E1 +(0.123, 0.123E1, 0.123E1): 0.13812901E1 0.13812901E1 +(0.123, 0.123E1, 0.123): 0.27429 0.27429 +(0.123, 0.123E1, 0.123E~2): 0.15252 0.15252 +(0.123, 0.123E1, 0.11754944E~37): 0.15129 0.15129 +(0.123, 0.123E1, 0.5877472E~38): 0.15129 0.15129 +(0.123, 0.123E1, 0.1E~44): 0.15129 0.15129 +(0.123, 0.123E1, 0.0): 0.15129 0.15129 +(0.123, 0.123E1, ~0.123E4): ~0.12298488E4 ~0.12298488E4 +(0.123, 0.123E1, ~0.123E2): ~0.1214871E2 ~0.1214871E2 +(0.123, 0.123E1, ~0.31415927E1): ~0.29903028E1 ~0.29903028E1 +(0.123, 0.123E1, ~0.27182817E1): ~0.25669918E1 ~0.25669918E1 +(0.123, 0.123E1, ~0.123E1): ~0.107871E1 ~0.107871E1 +(0.123, 0.123E1, ~0.123): 0.28290004E~1 0.28290004E~1 +(0.123, 0.123E1, ~0.123E~2): 0.15006001 0.15006001 +(0.123, 0.123E1, ~0.11754944E~37): 0.15129 0.15129 +(0.123, 0.123E1, ~0.5877472E~38): 0.15129 0.15129 +(0.123, 0.123E1, ~0.1E~44): 0.15129 0.15129 +(0.123, 0.123E1, ~0.0): 0.15129 0.15129 +(0.123, 0.123, 0.123E4): 0.12300151E4 0.12300151E4 +(0.123, 0.123, 0.123E2): 0.12315129E2 0.12315129E2 +(0.123, 0.123, 0.31415927E1): 0.31567218E1 0.31567218E1 +(0.123, 0.123, 0.27182817E1): 0.27334108E1 0.27334108E1 +(0.123, 0.123, 0.123E1): 0.1245129E1 0.1245129E1 +(0.123, 0.123, 0.123): 0.13812901 0.13812901 +(0.123, 0.123, 0.123E~2): 0.16359001E~1 0.16359001E~1 +(0.123, 0.123, 0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(0.123, 0.123, 0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(0.123, 0.123, 0.1E~44): 0.15129001E~1 0.15129001E~1 +(0.123, 0.123, 0.0): 0.15129001E~1 0.15129001E~1 +(0.123, 0.123, ~0.123E4): ~0.12299849E4 ~0.12299849E4 +(0.123, 0.123, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(0.123, 0.123, ~0.31415927E1): ~0.31264637E1 ~0.31264637E1 +(0.123, 0.123, ~0.27182817E1): ~0.27031527E1 ~0.27031527E1 +(0.123, 0.123, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(0.123, 0.123, ~0.123): ~0.107871 ~0.107871 +(0.123, 0.123, ~0.123E~2): 0.13899E~1 0.13899E~1 +(0.123, 0.123, ~0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(0.123, 0.123, ~0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(0.123, 0.123, ~0.1E~44): 0.15129001E~1 0.15129001E~1 +(0.123, 0.123, ~0.0): 0.15129001E~1 0.15129001E~1 +(0.123, 0.123E~2, 0.123E4): 0.12300001E4 0.12300001E4 +(0.123, 0.123E~2, 0.123E2): 0.12300152E2 0.12300152E2 +(0.123, 0.123E~2, 0.31415927E1): 0.31417441E1 0.31417441E1 +(0.123, 0.123E~2, 0.27182817E1): 0.27184331E1 0.27184331E1 +(0.123, 0.123E~2, 0.123E1): 0.12301513E1 0.12301513E1 +(0.123, 0.123E~2, 0.123): 0.123151295 0.123151295 +(0.123, 0.123E~2, 0.123E~2): 0.138129E~2 0.138129E~2 +(0.123, 0.123E~2, 0.11754944E~37): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, 0.5877472E~38): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, 0.1E~44): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, 0.0): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, ~0.123E4): ~0.12299999E4 ~0.12299999E4 +(0.123, 0.123E~2, ~0.123E2): ~0.12299849E2 ~0.12299849E2 +(0.123, 0.123E~2, ~0.31415927E1): ~0.31414413E1 ~0.31414413E1 +(0.123, 0.123E~2, ~0.27182817E1): ~0.27181304E1 ~0.27181304E1 +(0.123, 0.123E~2, ~0.123E1): ~0.12298487E1 ~0.12298487E1 +(0.123, 0.123E~2, ~0.123): ~0.12284871 ~0.12284871 +(0.123, 0.123E~2, ~0.123E~2): ~0.10787101E~2 ~0.10787101E~2 +(0.123, 0.123E~2, ~0.11754944E~37): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, ~0.5877472E~38): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, ~0.1E~44): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, ~0.0): 0.15129E~3 0.15129E~3 +(0.123, 0.11754944E~37, 0.11754944E~37): 0.13200802E~37 0.13200802E~37 +(0.123, 0.11754944E~37, 0.5877472E~38): 0.732333E~38 0.732333E~38 +(0.123, 0.11754944E~37, 0.1E~44): 0.144586E~38 0.144586E~38 +(0.123, 0.11754944E~37, 0.0): 0.1445858E~38 0.1445858E~38 +(0.123, 0.11754944E~37, ~0.11754944E~37): ~0.10309085E~37 ~0.10309085E~37 +(0.123, 0.11754944E~37, ~0.5877472E~38): ~0.4431613E~38 ~0.4431613E~38 +(0.123, 0.11754944E~37, ~0.1E~44): 0.1445857E~38 0.1445857E~38 +(0.123, 0.11754944E~37, ~0.0): 0.1445858E~38 0.1445858E~38 +(0.123, 0.5877472E~38, 0.11754944E~37): 0.12477872E~37 0.12477872E~37 +(0.123, 0.5877472E~38, 0.5877472E~38): 0.66004E~38 0.66004E~38 +(0.123, 0.5877472E~38, 0.1E~44): 0.72293E~39 0.72293E~39 +(0.123, 0.5877472E~38, 0.0): 0.722928E~39 0.722928E~39 +(0.123, 0.5877472E~38, ~0.11754944E~37): ~0.11032015E~37 ~0.11032015E~37 +(0.123, 0.5877472E~38, ~0.5877472E~38): ~0.5154543E~38 ~0.5154543E~38 +(0.123, 0.5877472E~38, ~0.1E~44): 0.722927E~39 0.722927E~39 +(0.123, 0.5877472E~38, ~0.0): 0.722928E~39 0.722928E~39 +(0.123, 0.1E~44, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(0.123, 0.1E~44, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(0.123, 0.1E~44, 0.1E~44): 0.1E~44 0.1E~44 +(0.123, 0.1E~44, 0.0): 0.0 0.0 +(0.123, 0.1E~44, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(0.123, 0.1E~44, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(0.123, 0.1E~44, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(0.123, 0.1E~44, ~0.0): 0.0 0.0 +(0.123, ~0.34028235E39, 0.34028235E39): 0.2984276E39 0.2984276E39 +(0.123, ~0.34028235E39, 0.17014117E39): 0.12828644E39 0.12828644E39 +(0.123, ~0.34028235E39, 0.123E4): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, 0.123E2): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, 0.31415927E1): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, 0.27182817E1): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, 0.123E1): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, 0.123): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, 0.123E~2): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, 0.11754944E~37): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, 0.5877472E~38): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, 0.1E~44): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, 0.0): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, ~0.34028235E39): ~inf ~inf +(0.123, ~0.34028235E39, ~0.17014117E39): ~0.2119959E39 ~0.2119959E39 +(0.123, ~0.34028235E39, ~0.123E4): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, ~0.123E2): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, ~0.31415927E1): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, ~0.27182817E1): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, ~0.123E1): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, ~0.123): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, ~0.123E~2): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, ~0.11754944E~37): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, ~0.5877472E~38): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, ~0.1E~44): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.34028235E39, ~0.0): ~0.4185473E38 ~0.4185473E38 +(0.123, ~0.17014117E39, 0.34028235E39): 0.31935498E39 0.31935498E39 +(0.123, ~0.17014117E39, 0.17014117E39): 0.1492138E39 0.1492138E39 +(0.123, ~0.17014117E39, 0.123E4): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, 0.123E2): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, 0.31415927E1): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, 0.27182817E1): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, 0.123E1): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, 0.123): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, 0.123E~2): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, 0.11754944E~37): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, 0.5877472E~38): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, 0.1E~44): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, 0.0): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, ~0.34028235E39): ~inf ~inf +(0.123, ~0.17014117E39, ~0.17014117E39): ~0.19106853E39 ~0.19106853E39 +(0.123, ~0.17014117E39, ~0.123E4): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, ~0.123E2): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, ~0.31415927E1): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, ~0.27182817E1): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, ~0.123E1): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, ~0.123): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, ~0.123E~2): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, ~0.11754944E~37): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, ~0.5877472E~38): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, ~0.1E~44): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.17014117E39, ~0.0): ~0.20927365E38 ~0.20927365E38 +(0.123, ~0.123E4, 0.123E4): 0.107871E4 0.107871E4 +(0.123, ~0.123E4, 0.123E2): ~0.13899E3 ~0.13899E3 +(0.123, ~0.123E4, 0.31415927E1): ~0.1481484E3 ~0.1481484E3 +(0.123, ~0.123E4, 0.27182817E1): ~0.14857172E3 ~0.14857172E3 +(0.123, ~0.123E4, 0.123E1): ~0.15006E3 ~0.15006E3 +(0.123, ~0.123E4, 0.123): ~0.151167E3 ~0.151167E3 +(0.123, ~0.123E4, 0.123E~2): ~0.15128877E3 ~0.15128877E3 +(0.123, ~0.123E4, 0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(0.123, ~0.123E4, 0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(0.123, ~0.123E4, 0.1E~44): ~0.15129001E3 ~0.15129001E3 +(0.123, ~0.123E4, 0.0): ~0.15129001E3 ~0.15129001E3 +(0.123, ~0.123E4, ~0.123E4): ~0.138129E4 ~0.138129E4 +(0.123, ~0.123E4, ~0.123E2): ~0.16359001E3 ~0.16359001E3 +(0.123, ~0.123E4, ~0.31415927E1): ~0.1544316E3 ~0.1544316E3 +(0.123, ~0.123E4, ~0.27182817E1): ~0.15400829E3 ~0.15400829E3 +(0.123, ~0.123E4, ~0.123E1): ~0.15252E3 ~0.15252E3 +(0.123, ~0.123E4, ~0.123): ~0.15141301E3 ~0.15141301E3 +(0.123, ~0.123E4, ~0.123E~2): ~0.15129123E3 ~0.15129123E3 +(0.123, ~0.123E4, ~0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(0.123, ~0.123E4, ~0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(0.123, ~0.123E4, ~0.1E~44): ~0.15129001E3 ~0.15129001E3 +(0.123, ~0.123E4, ~0.0): ~0.15129001E3 ~0.15129001E3 +(0.123, ~0.123E2, 0.123E4): 0.1228487E4 0.1228487E4 +(0.123, ~0.123E2, 0.123E2): 0.107871E2 0.107871E2 +(0.123, ~0.123E2, 0.31415927E1): 0.16286926E1 0.16286926E1 +(0.123, ~0.123E2, 0.27182817E1): 0.12053816E1 0.12053816E1 +(0.123, ~0.123E2, 0.123E1): ~0.28290004 ~0.28290004 +(0.123, ~0.123E2, 0.123): ~0.13899001E1 ~0.13899001E1 +(0.123, ~0.123E2, 0.123E~2): ~0.15116701E1 ~0.15116701E1 +(0.123, ~0.123E2, 0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(0.123, ~0.123E2, 0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(0.123, ~0.123E2, 0.1E~44): ~0.15129001E1 ~0.15129001E1 +(0.123, ~0.123E2, 0.0): ~0.15129001E1 ~0.15129001E1 +(0.123, ~0.123E2, ~0.123E4): ~0.1231513E4 ~0.1231513E4 +(0.123, ~0.123E2, ~0.123E2): ~0.13812901E2 ~0.13812901E2 +(0.123, ~0.123E2, ~0.31415927E1): ~0.4654493E1 ~0.4654493E1 +(0.123, ~0.123E2, ~0.27182817E1): ~0.42311816E1 ~0.42311816E1 +(0.123, ~0.123E2, ~0.123E1): ~0.27429001E1 ~0.27429001E1 +(0.123, ~0.123E2, ~0.123): ~0.16359E1 ~0.16359E1 +(0.123, ~0.123E2, ~0.123E~2): ~0.15141301E1 ~0.15141301E1 +(0.123, ~0.123E2, ~0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(0.123, ~0.123E2, ~0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(0.123, ~0.123E2, ~0.1E~44): ~0.15129001E1 ~0.15129001E1 +(0.123, ~0.123E2, ~0.0): ~0.15129001E1 ~0.15129001E1 +(0.123, ~0.31415927E1, 0.123E4): 0.12296135E4 0.12296135E4 +(0.123, ~0.31415927E1, 0.123E2): 0.11913585E2 0.11913585E2 +(0.123, ~0.31415927E1, 0.31415927E1): 0.27551768E1 0.27551768E1 +(0.123, ~0.31415927E1, 0.27182817E1): 0.23318658E1 0.23318658E1 +(0.123, ~0.31415927E1, 0.123E1): 0.8435841 0.8435841 +(0.123, ~0.31415927E1, 0.123): ~0.2634159 ~0.2634159 +(0.123, ~0.31415927E1, 0.123E~2): ~0.38518593 ~0.38518593 +(0.123, ~0.31415927E1, 0.11754944E~37): ~0.38641593 ~0.38641593 +(0.123, ~0.31415927E1, 0.5877472E~38): ~0.38641593 ~0.38641593 +(0.123, ~0.31415927E1, 0.1E~44): ~0.38641593 ~0.38641593 +(0.123, ~0.31415927E1, 0.0): ~0.38641593 ~0.38641593 +(0.123, ~0.31415927E1, ~0.123E4): ~0.12303865E4 ~0.12303865E4 +(0.123, ~0.31415927E1, ~0.123E2): ~0.12686416E2 ~0.12686416E2 +(0.123, ~0.31415927E1, ~0.31415927E1): ~0.35280087E1 ~0.35280087E1 +(0.123, ~0.31415927E1, ~0.27182817E1): ~0.31046977E1 ~0.31046977E1 +(0.123, ~0.31415927E1, ~0.123E1): ~0.1616416E1 ~0.1616416E1 +(0.123, ~0.31415927E1, ~0.123): ~0.5094159 ~0.5094159 +(0.123, ~0.31415927E1, ~0.123E~2): ~0.38764593 ~0.38764593 +(0.123, ~0.31415927E1, ~0.11754944E~37): ~0.38641593 ~0.38641593 +(0.123, ~0.31415927E1, ~0.5877472E~38): ~0.38641593 ~0.38641593 +(0.123, ~0.31415927E1, ~0.1E~44): ~0.38641593 ~0.38641593 +(0.123, ~0.31415927E1, ~0.0): ~0.38641593 ~0.38641593 +(0.123, ~0.27182817E1, 0.123E4): 0.12296656E4 0.12296656E4 +(0.123, ~0.27182817E1, 0.123E2): 0.119656515E2 0.119656515E2 +(0.123, ~0.27182817E1, 0.31415927E1): 0.2807244E1 0.2807244E1 +(0.123, ~0.27182817E1, 0.27182817E1): 0.2383933E1 0.2383933E1 +(0.123, ~0.27182817E1, 0.123E1): 0.89565134 0.89565134 +(0.123, ~0.27182817E1, 0.123): ~0.21134867 ~0.21134867 +(0.123, ~0.27182817E1, 0.123E~2): ~0.33311868 ~0.33311868 +(0.123, ~0.27182817E1, 0.11754944E~37): ~0.33434868 ~0.33434868 +(0.123, ~0.27182817E1, 0.5877472E~38): ~0.33434868 ~0.33434868 +(0.123, ~0.27182817E1, 0.1E~44): ~0.33434868 ~0.33434868 +(0.123, ~0.27182817E1, 0.0): ~0.33434868 ~0.33434868 +(0.123, ~0.27182817E1, ~0.123E4): ~0.12303344E4 ~0.12303344E4 +(0.123, ~0.27182817E1, ~0.123E2): ~0.12634349E2 ~0.12634349E2 +(0.123, ~0.27182817E1, ~0.31415927E1): ~0.34759414E1 ~0.34759414E1 +(0.123, ~0.27182817E1, ~0.27182817E1): ~0.30526304E1 ~0.30526304E1 +(0.123, ~0.27182817E1, ~0.123E1): ~0.15643487E1 ~0.15643487E1 +(0.123, ~0.27182817E1, ~0.123): ~0.45734867 ~0.45734867 +(0.123, ~0.27182817E1, ~0.123E~2): ~0.33557865 ~0.33557865 +(0.123, ~0.27182817E1, ~0.11754944E~37): ~0.33434868 ~0.33434868 +(0.123, ~0.27182817E1, ~0.5877472E~38): ~0.33434868 ~0.33434868 +(0.123, ~0.27182817E1, ~0.1E~44): ~0.33434868 ~0.33434868 +(0.123, ~0.27182817E1, ~0.0): ~0.33434868 ~0.33434868 +(0.123, ~0.123E1, 0.123E4): 0.12298488E4 0.12298488E4 +(0.123, ~0.123E1, 0.123E2): 0.1214871E2 0.1214871E2 +(0.123, ~0.123E1, 0.31415927E1): 0.29903028E1 0.29903028E1 +(0.123, ~0.123E1, 0.27182817E1): 0.25669918E1 0.25669918E1 +(0.123, ~0.123E1, 0.123E1): 0.107871E1 0.107871E1 +(0.123, ~0.123E1, 0.123): ~0.28290004E~1 ~0.28290004E~1 +(0.123, ~0.123E1, 0.123E~2): ~0.15006001 ~0.15006001 +(0.123, ~0.123E1, 0.11754944E~37): ~0.15129 ~0.15129 +(0.123, ~0.123E1, 0.5877472E~38): ~0.15129 ~0.15129 +(0.123, ~0.123E1, 0.1E~44): ~0.15129 ~0.15129 +(0.123, ~0.123E1, 0.0): ~0.15129 ~0.15129 +(0.123, ~0.123E1, ~0.123E4): ~0.12301512E4 ~0.12301512E4 +(0.123, ~0.123E1, ~0.123E2): ~0.1245129E2 ~0.1245129E2 +(0.123, ~0.123E1, ~0.31415927E1): ~0.32928827E1 ~0.32928827E1 +(0.123, ~0.123E1, ~0.27182817E1): ~0.28695717E1 ~0.28695717E1 +(0.123, ~0.123E1, ~0.123E1): ~0.13812901E1 ~0.13812901E1 +(0.123, ~0.123E1, ~0.123): ~0.27429 ~0.27429 +(0.123, ~0.123E1, ~0.123E~2): ~0.15252 ~0.15252 +(0.123, ~0.123E1, ~0.11754944E~37): ~0.15129 ~0.15129 +(0.123, ~0.123E1, ~0.5877472E~38): ~0.15129 ~0.15129 +(0.123, ~0.123E1, ~0.1E~44): ~0.15129 ~0.15129 +(0.123, ~0.123E1, ~0.0): ~0.15129 ~0.15129 +(0.123, ~0.123, 0.123E4): 0.12299849E4 0.12299849E4 +(0.123, ~0.123, 0.123E2): 0.12284871E2 0.12284871E2 +(0.123, ~0.123, 0.31415927E1): 0.31264637E1 0.31264637E1 +(0.123, ~0.123, 0.27182817E1): 0.27031527E1 0.27031527E1 +(0.123, ~0.123, 0.123E1): 0.1214871E1 0.1214871E1 +(0.123, ~0.123, 0.123): 0.107871 0.107871 +(0.123, ~0.123, 0.123E~2): ~0.13899E~1 ~0.13899E~1 +(0.123, ~0.123, 0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(0.123, ~0.123, 0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(0.123, ~0.123, 0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(0.123, ~0.123, 0.0): ~0.15129001E~1 ~0.15129001E~1 +(0.123, ~0.123, ~0.123E4): ~0.12300151E4 ~0.12300151E4 +(0.123, ~0.123, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(0.123, ~0.123, ~0.31415927E1): ~0.31567218E1 ~0.31567218E1 +(0.123, ~0.123, ~0.27182817E1): ~0.27334108E1 ~0.27334108E1 +(0.123, ~0.123, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(0.123, ~0.123, ~0.123): ~0.13812901 ~0.13812901 +(0.123, ~0.123, ~0.123E~2): ~0.16359001E~1 ~0.16359001E~1 +(0.123, ~0.123, ~0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(0.123, ~0.123, ~0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(0.123, ~0.123, ~0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(0.123, ~0.123, ~0.0): ~0.15129001E~1 ~0.15129001E~1 +(0.123, ~0.123E~2, 0.123E4): 0.12299999E4 0.12299999E4 +(0.123, ~0.123E~2, 0.123E2): 0.12299849E2 0.12299849E2 +(0.123, ~0.123E~2, 0.31415927E1): 0.31414413E1 0.31414413E1 +(0.123, ~0.123E~2, 0.27182817E1): 0.27181304E1 0.27181304E1 +(0.123, ~0.123E~2, 0.123E1): 0.12298487E1 0.12298487E1 +(0.123, ~0.123E~2, 0.123): 0.12284871 0.12284871 +(0.123, ~0.123E~2, 0.123E~2): 0.10787101E~2 0.10787101E~2 +(0.123, ~0.123E~2, 0.11754944E~37): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, 0.5877472E~38): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, 0.1E~44): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, 0.0): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, ~0.123E4): ~0.12300001E4 ~0.12300001E4 +(0.123, ~0.123E~2, ~0.123E2): ~0.12300152E2 ~0.12300152E2 +(0.123, ~0.123E~2, ~0.31415927E1): ~0.31417441E1 ~0.31417441E1 +(0.123, ~0.123E~2, ~0.27182817E1): ~0.27184331E1 ~0.27184331E1 +(0.123, ~0.123E~2, ~0.123E1): ~0.12301513E1 ~0.12301513E1 +(0.123, ~0.123E~2, ~0.123): ~0.123151295 ~0.123151295 +(0.123, ~0.123E~2, ~0.123E~2): ~0.138129E~2 ~0.138129E~2 +(0.123, ~0.123E~2, ~0.11754944E~37): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, ~0.5877472E~38): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, ~0.1E~44): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, ~0.0): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.11754944E~37, 0.11754944E~37): 0.10309085E~37 0.10309085E~37 +(0.123, ~0.11754944E~37, 0.5877472E~38): 0.4431613E~38 0.4431613E~38 +(0.123, ~0.11754944E~37, 0.1E~44): ~0.1445857E~38 ~0.1445857E~38 +(0.123, ~0.11754944E~37, 0.0): ~0.1445858E~38 ~0.1445858E~38 +(0.123, ~0.11754944E~37, ~0.11754944E~37): ~0.13200802E~37 ~0.13200802E~37 +(0.123, ~0.11754944E~37, ~0.5877472E~38): ~0.732333E~38 ~0.732333E~38 +(0.123, ~0.11754944E~37, ~0.1E~44): ~0.144586E~38 ~0.144586E~38 +(0.123, ~0.11754944E~37, ~0.0): ~0.1445858E~38 ~0.1445858E~38 +(0.123, ~0.5877472E~38, 0.11754944E~37): 0.11032015E~37 0.11032015E~37 +(0.123, ~0.5877472E~38, 0.5877472E~38): 0.5154543E~38 0.5154543E~38 +(0.123, ~0.5877472E~38, 0.1E~44): ~0.722927E~39 ~0.722927E~39 +(0.123, ~0.5877472E~38, 0.0): ~0.722928E~39 ~0.722928E~39 +(0.123, ~0.5877472E~38, ~0.11754944E~37): ~0.12477872E~37 ~0.12477872E~37 +(0.123, ~0.5877472E~38, ~0.5877472E~38): ~0.66004E~38 ~0.66004E~38 +(0.123, ~0.5877472E~38, ~0.1E~44): ~0.72293E~39 ~0.72293E~39 +(0.123, ~0.5877472E~38, ~0.0): ~0.722928E~39 ~0.722928E~39 +(0.123, ~0.1E~44, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(0.123, ~0.1E~44, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(0.123, ~0.1E~44, 0.1E~44): 0.1E~44 0.1E~44 +(0.123, ~0.1E~44, 0.0): ~0.0 ~0.0 +(0.123, ~0.1E~44, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(0.123, ~0.1E~44, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(0.123, ~0.1E~44, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(0.123, ~0.1E~44, ~0.0): ~0.0 ~0.0 +(0.123E~2, 0.34028235E39, 0.34028235E39): inf inf +(0.123E~2, 0.34028235E39, 0.17014117E39): 0.17055971E39 0.17055971E39 +(0.123E~2, 0.34028235E39, 0.123E4): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, 0.123E2): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, 0.31415927E1): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, 0.27182817E1): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, 0.123E1): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, 0.123): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, 0.123E~2): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, 0.11754944E~37): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, 0.5877472E~38): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, 0.1E~44): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, 0.0): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, ~0.34028235E39): ~0.3398638E39 ~0.3398638E39 +(0.123E~2, 0.34028235E39, ~0.17014117E39): ~0.16972263E39 ~0.16972263E39 +(0.123E~2, 0.34028235E39, ~0.123E4): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, ~0.123E2): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, ~0.31415927E1): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, ~0.27182817E1): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, ~0.123E1): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, ~0.123): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, ~0.123E~2): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, ~0.11754944E~37): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, ~0.5877472E~38): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, ~0.1E~44): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.34028235E39, ~0.0): 0.4185473E36 0.4185473E36 +(0.123E~2, 0.17014117E39, 0.34028235E39): inf inf +(0.123E~2, 0.17014117E39, 0.17014117E39): 0.17035044E39 0.17035044E39 +(0.123E~2, 0.17014117E39, 0.123E4): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, 0.123E2): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, 0.31415927E1): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, 0.27182817E1): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, 0.123E1): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, 0.123): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, 0.123E~2): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, 0.11754944E~37): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, 0.5877472E~38): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, 0.1E~44): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, 0.0): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, ~0.34028235E39): ~0.34007307E39 ~0.34007307E39 +(0.123E~2, 0.17014117E39, ~0.17014117E39): ~0.1699319E39 ~0.1699319E39 +(0.123E~2, 0.17014117E39, ~0.123E4): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, ~0.123E2): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, ~0.31415927E1): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, ~0.27182817E1): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, ~0.123E1): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, ~0.123): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, ~0.123E~2): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, ~0.11754944E~37): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, ~0.5877472E~38): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, ~0.1E~44): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.17014117E39, ~0.0): 0.20927364E36 0.20927364E36 +(0.123E~2, 0.123E4, 0.123E4): 0.1231513E4 0.1231513E4 +(0.123E~2, 0.123E4, 0.123E2): 0.13812901E2 0.13812901E2 +(0.123E~2, 0.123E4, 0.31415927E1): 0.4654493E1 0.4654493E1 +(0.123E~2, 0.123E4, 0.27182817E1): 0.42311816E1 0.42311816E1 +(0.123E~2, 0.123E4, 0.123E1): 0.27429001E1 0.27429001E1 +(0.123E~2, 0.123E4, 0.123): 0.16359E1 0.16359E1 +(0.123E~2, 0.123E4, 0.123E~2): 0.15141301E1 0.15141301E1 +(0.123E~2, 0.123E4, 0.11754944E~37): 0.15129001E1 0.15129001E1 +(0.123E~2, 0.123E4, 0.5877472E~38): 0.15129001E1 0.15129001E1 +(0.123E~2, 0.123E4, 0.1E~44): 0.15129001E1 0.15129001E1 +(0.123E~2, 0.123E4, 0.0): 0.15129001E1 0.15129001E1 +(0.123E~2, 0.123E4, ~0.123E4): ~0.1228487E4 ~0.1228487E4 +(0.123E~2, 0.123E4, ~0.123E2): ~0.107871E2 ~0.107871E2 +(0.123E~2, 0.123E4, ~0.31415927E1): ~0.16286926E1 ~0.16286926E1 +(0.123E~2, 0.123E4, ~0.27182817E1): ~0.12053816E1 ~0.12053816E1 +(0.123E~2, 0.123E4, ~0.123E1): 0.28290004 0.28290004 +(0.123E~2, 0.123E4, ~0.123): 0.13899001E1 0.13899001E1 +(0.123E~2, 0.123E4, ~0.123E~2): 0.15116701E1 0.15116701E1 +(0.123E~2, 0.123E4, ~0.11754944E~37): 0.15129001E1 0.15129001E1 +(0.123E~2, 0.123E4, ~0.5877472E~38): 0.15129001E1 0.15129001E1 +(0.123E~2, 0.123E4, ~0.1E~44): 0.15129001E1 0.15129001E1 +(0.123E~2, 0.123E4, ~0.0): 0.15129001E1 0.15129001E1 +(0.123E~2, 0.123E2, 0.123E4): 0.12300151E4 0.12300151E4 +(0.123E~2, 0.123E2, 0.123E2): 0.12315129E2 0.12315129E2 +(0.123E~2, 0.123E2, 0.31415927E1): 0.31567218E1 0.31567218E1 +(0.123E~2, 0.123E2, 0.27182817E1): 0.27334108E1 0.27334108E1 +(0.123E~2, 0.123E2, 0.123E1): 0.1245129E1 0.1245129E1 +(0.123E~2, 0.123E2, 0.123): 0.13812901 0.13812901 +(0.123E~2, 0.123E2, 0.123E~2): 0.16359001E~1 0.16359001E~1 +(0.123E~2, 0.123E2, 0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(0.123E~2, 0.123E2, 0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(0.123E~2, 0.123E2, 0.1E~44): 0.15129001E~1 0.15129001E~1 +(0.123E~2, 0.123E2, 0.0): 0.15129001E~1 0.15129001E~1 +(0.123E~2, 0.123E2, ~0.123E4): ~0.12299849E4 ~0.12299849E4 +(0.123E~2, 0.123E2, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(0.123E~2, 0.123E2, ~0.31415927E1): ~0.31264637E1 ~0.31264637E1 +(0.123E~2, 0.123E2, ~0.27182817E1): ~0.27031527E1 ~0.27031527E1 +(0.123E~2, 0.123E2, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(0.123E~2, 0.123E2, ~0.123): ~0.107871 ~0.107871 +(0.123E~2, 0.123E2, ~0.123E~2): 0.13899001E~1 0.13899001E~1 +(0.123E~2, 0.123E2, ~0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(0.123E~2, 0.123E2, ~0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(0.123E~2, 0.123E2, ~0.1E~44): 0.15129001E~1 0.15129001E~1 +(0.123E~2, 0.123E2, ~0.0): 0.15129001E~1 0.15129001E~1 +(0.123E~2, 0.31415927E1, 0.123E4): 0.12300039E4 0.12300039E4 +(0.123E~2, 0.31415927E1, 0.123E2): 0.123038645E2 0.123038645E2 +(0.123E~2, 0.31415927E1, 0.31415927E1): 0.31454568E1 0.31454568E1 +(0.123E~2, 0.31415927E1, 0.27182817E1): 0.27221458E1 0.27221458E1 +(0.123E~2, 0.31415927E1, 0.123E1): 0.12338642E1 0.12338642E1 +(0.123E~2, 0.31415927E1, 0.123): 0.12686417 0.12686417 +(0.123E~2, 0.31415927E1, 0.123E~2): 0.50941594E~2 0.50941594E~2 +(0.123E~2, 0.31415927E1, 0.11754944E~37): 0.38641593E~2 0.38641593E~2 +(0.123E~2, 0.31415927E1, 0.5877472E~38): 0.38641593E~2 0.38641593E~2 +(0.123E~2, 0.31415927E1, 0.1E~44): 0.38641593E~2 0.38641593E~2 +(0.123E~2, 0.31415927E1, 0.0): 0.38641593E~2 0.38641593E~2 +(0.123E~2, 0.31415927E1, ~0.123E4): ~0.12299961E4 ~0.12299961E4 +(0.123E~2, 0.31415927E1, ~0.123E2): ~0.12296136E2 ~0.12296136E2 +(0.123E~2, 0.31415927E1, ~0.31415927E1): ~0.31377287E1 ~0.31377287E1 +(0.123E~2, 0.31415927E1, ~0.27182817E1): ~0.27144177E1 ~0.27144177E1 +(0.123E~2, 0.31415927E1, ~0.123E1): ~0.12261358E1 ~0.12261358E1 +(0.123E~2, 0.31415927E1, ~0.123): ~0.11913584 ~0.11913584 +(0.123E~2, 0.31415927E1, ~0.123E~2): 0.26341593E~2 0.26341593E~2 +(0.123E~2, 0.31415927E1, ~0.11754944E~37): 0.38641593E~2 0.38641593E~2 +(0.123E~2, 0.31415927E1, ~0.5877472E~38): 0.38641593E~2 0.38641593E~2 +(0.123E~2, 0.31415927E1, ~0.1E~44): 0.38641593E~2 0.38641593E~2 +(0.123E~2, 0.31415927E1, ~0.0): 0.38641593E~2 0.38641593E~2 +(0.123E~2, 0.27182817E1, 0.123E4): 0.12300033E4 0.12300033E4 +(0.123E~2, 0.27182817E1, 0.123E2): 0.12303344E2 0.12303344E2 +(0.123E~2, 0.27182817E1, 0.31415927E1): 0.31449363E1 0.31449363E1 +(0.123E~2, 0.27182817E1, 0.27182817E1): 0.27216253E1 0.27216253E1 +(0.123E~2, 0.27182817E1, 0.123E1): 0.12333435E1 0.12333435E1 +(0.123E~2, 0.27182817E1, 0.123): 0.12634349 0.12634349 +(0.123E~2, 0.27182817E1, 0.123E~2): 0.45734867E~2 0.45734867E~2 +(0.123E~2, 0.27182817E1, 0.11754944E~37): 0.33434867E~2 0.33434867E~2 +(0.123E~2, 0.27182817E1, 0.5877472E~38): 0.33434867E~2 0.33434867E~2 +(0.123E~2, 0.27182817E1, 0.1E~44): 0.33434867E~2 0.33434867E~2 +(0.123E~2, 0.27182817E1, 0.0): 0.33434867E~2 0.33434867E~2 +(0.123E~2, 0.27182817E1, ~0.123E4): ~0.12299967E4 ~0.12299967E4 +(0.123E~2, 0.27182817E1, ~0.123E2): ~0.12296657E2 ~0.12296657E2 +(0.123E~2, 0.27182817E1, ~0.31415927E1): ~0.31382492E1 ~0.31382492E1 +(0.123E~2, 0.27182817E1, ~0.27182817E1): ~0.27149382E1 ~0.27149382E1 +(0.123E~2, 0.27182817E1, ~0.123E1): ~0.12266566E1 ~0.12266566E1 +(0.123E~2, 0.27182817E1, ~0.123): ~0.11965652 ~0.11965652 +(0.123E~2, 0.27182817E1, ~0.123E~2): 0.21134866E~2 0.21134866E~2 +(0.123E~2, 0.27182817E1, ~0.11754944E~37): 0.33434867E~2 0.33434867E~2 +(0.123E~2, 0.27182817E1, ~0.5877472E~38): 0.33434867E~2 0.33434867E~2 +(0.123E~2, 0.27182817E1, ~0.1E~44): 0.33434867E~2 0.33434867E~2 +(0.123E~2, 0.27182817E1, ~0.0): 0.33434867E~2 0.33434867E~2 +(0.123E~2, 0.123E1, 0.123E4): 0.12300015E4 0.12300015E4 +(0.123E~2, 0.123E1, 0.123E2): 0.12301513E2 0.12301513E2 +(0.123E~2, 0.123E1, 0.31415927E1): 0.31431057E1 0.31431057E1 +(0.123E~2, 0.123E1, 0.27182817E1): 0.27197948E1 0.27197948E1 +(0.123E~2, 0.123E1, 0.123E1): 0.12315129E1 0.12315129E1 +(0.123E~2, 0.123E1, 0.123): 0.1245129 0.1245129 +(0.123E~2, 0.123E1, 0.123E~2): 0.27429E~2 0.27429E~2 +(0.123E~2, 0.123E1, 0.11754944E~37): 0.15129001E~2 0.15129001E~2 +(0.123E~2, 0.123E1, 0.5877472E~38): 0.15129001E~2 0.15129001E~2 +(0.123E~2, 0.123E1, 0.1E~44): 0.15129001E~2 0.15129001E~2 +(0.123E~2, 0.123E1, 0.0): 0.15129001E~2 0.15129001E~2 +(0.123E~2, 0.123E1, ~0.123E4): ~0.12299985E4 ~0.12299985E4 +(0.123E~2, 0.123E1, ~0.123E2): ~0.12298488E2 ~0.12298488E2 +(0.123E~2, 0.123E1, ~0.31415927E1): ~0.31400797E1 ~0.31400797E1 +(0.123E~2, 0.123E1, ~0.27182817E1): ~0.27167687E1 ~0.27167687E1 +(0.123E~2, 0.123E1, ~0.123E1): ~0.12284871E1 ~0.12284871E1 +(0.123E~2, 0.123E1, ~0.123): ~0.1214871 ~0.1214871 +(0.123E~2, 0.123E1, ~0.123E~2): 0.28290003E~3 0.28290003E~3 +(0.123E~2, 0.123E1, ~0.11754944E~37): 0.15129001E~2 0.15129001E~2 +(0.123E~2, 0.123E1, ~0.5877472E~38): 0.15129001E~2 0.15129001E~2 +(0.123E~2, 0.123E1, ~0.1E~44): 0.15129001E~2 0.15129001E~2 +(0.123E~2, 0.123E1, ~0.0): 0.15129001E~2 0.15129001E~2 +(0.123E~2, 0.123, 0.123E4): 0.12300001E4 0.12300001E4 +(0.123E~2, 0.123, 0.123E2): 0.12300152E2 0.12300152E2 +(0.123E~2, 0.123, 0.31415927E1): 0.31417441E1 0.31417441E1 +(0.123E~2, 0.123, 0.27182817E1): 0.27184331E1 0.27184331E1 +(0.123E~2, 0.123, 0.123E1): 0.12301513E1 0.12301513E1 +(0.123E~2, 0.123, 0.123): 0.123151295 0.123151295 +(0.123E~2, 0.123, 0.123E~2): 0.138129E~2 0.138129E~2 +(0.123E~2, 0.123, 0.11754944E~37): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, 0.5877472E~38): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, 0.1E~44): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, 0.0): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, ~0.123E4): ~0.12299999E4 ~0.12299999E4 +(0.123E~2, 0.123, ~0.123E2): ~0.12299849E2 ~0.12299849E2 +(0.123E~2, 0.123, ~0.31415927E1): ~0.31414413E1 ~0.31414413E1 +(0.123E~2, 0.123, ~0.27182817E1): ~0.27181304E1 ~0.27181304E1 +(0.123E~2, 0.123, ~0.123E1): ~0.12298487E1 ~0.12298487E1 +(0.123E~2, 0.123, ~0.123): ~0.12284871 ~0.12284871 +(0.123E~2, 0.123, ~0.123E~2): ~0.10787101E~2 ~0.10787101E~2 +(0.123E~2, 0.123, ~0.11754944E~37): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, ~0.5877472E~38): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, ~0.1E~44): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, ~0.0): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123E~2, 0.123E4): 0.123E4 0.123E4 +(0.123E~2, 0.123E~2, 0.123E2): 0.12300002E2 0.12300002E2 +(0.123E~2, 0.123E~2, 0.31415927E1): 0.31415942E1 0.31415942E1 +(0.123E~2, 0.123E~2, 0.27182817E1): 0.27182832E1 0.27182832E1 +(0.123E~2, 0.123E~2, 0.123E1): 0.12300016E1 0.12300016E1 +(0.123E~2, 0.123E~2, 0.123): 0.123001516 0.123001516 +(0.123E~2, 0.123E~2, 0.123E~2): 0.1231513E~2 0.1231513E~2 +(0.123E~2, 0.123E~2, 0.11754944E~37): 0.15129001E~5 0.15129001E~5 +(0.123E~2, 0.123E~2, 0.5877472E~38): 0.15129001E~5 0.15129001E~5 +(0.123E~2, 0.123E~2, 0.1E~44): 0.15129001E~5 0.15129001E~5 +(0.123E~2, 0.123E~2, 0.0): 0.15129001E~5 0.15129001E~5 +(0.123E~2, 0.123E~2, ~0.123E4): ~0.123E4 ~0.123E4 +(0.123E~2, 0.123E~2, ~0.123E2): ~0.12299998E2 ~0.12299998E2 +(0.123E~2, 0.123E~2, ~0.31415927E1): ~0.31415913E1 ~0.31415913E1 +(0.123E~2, 0.123E~2, ~0.27182817E1): ~0.27182803E1 ~0.27182803E1 +(0.123E~2, 0.123E~2, ~0.123E1): ~0.12299985E1 ~0.12299985E1 +(0.123E~2, 0.123E~2, ~0.123): ~0.12299849 ~0.12299849 +(0.123E~2, 0.123E~2, ~0.123E~2): ~0.12284871E~2 ~0.12284871E~2 +(0.123E~2, 0.123E~2, ~0.11754944E~37): 0.15129001E~5 0.15129001E~5 +(0.123E~2, 0.123E~2, ~0.5877472E~38): 0.15129001E~5 0.15129001E~5 +(0.123E~2, 0.123E~2, ~0.1E~44): 0.15129001E~5 0.15129001E~5 +(0.123E~2, 0.123E~2, ~0.0): 0.15129001E~5 0.15129001E~5 +(0.123E~2, 0.11754944E~37, 0.11754944E~37): 0.11769402E~37 0.11769402E~37 +(0.123E~2, 0.11754944E~37, 0.5877472E~38): 0.589193E~38 0.589193E~38 +(0.123E~2, 0.11754944E~37, 0.1E~44): 0.1446E~40 0.1446E~40 +(0.123E~2, 0.11754944E~37, 0.0): 0.14459E~40 0.14459E~40 +(0.123E~2, 0.11754944E~37, ~0.11754944E~37): ~0.11740485E~37 ~0.11740485E~37 +(0.123E~2, 0.11754944E~37, ~0.5877472E~38): ~0.5863013E~38 ~0.5863013E~38 +(0.123E~2, 0.11754944E~37, ~0.1E~44): 0.14457E~40 0.14457E~40 +(0.123E~2, 0.11754944E~37, ~0.0): 0.14459E~40 0.14459E~40 +(0.123E~2, 0.5877472E~38, 0.11754944E~37): 0.11762173E~37 0.11762173E~37 +(0.123E~2, 0.5877472E~38, 0.5877472E~38): 0.5884701E~38 0.5884701E~38 +(0.123E~2, 0.5877472E~38, 0.1E~44): 0.723E~41 0.723E~41 +(0.123E~2, 0.5877472E~38, 0.0): 0.7229E~41 0.7229E~41 +(0.123E~2, 0.5877472E~38, ~0.11754944E~37): ~0.11747714E~37 ~0.11747714E~37 +(0.123E~2, 0.5877472E~38, ~0.5877472E~38): ~0.5870242E~38 ~0.5870242E~38 +(0.123E~2, 0.5877472E~38, ~0.1E~44): 0.7228E~41 0.7228E~41 +(0.123E~2, 0.5877472E~38, ~0.0): 0.7229E~41 0.7229E~41 +(0.123E~2, 0.1E~44, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(0.123E~2, 0.1E~44, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(0.123E~2, 0.1E~44, 0.1E~44): 0.1E~44 0.1E~44 +(0.123E~2, 0.1E~44, 0.0): 0.0 0.0 +(0.123E~2, 0.1E~44, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(0.123E~2, 0.1E~44, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(0.123E~2, 0.1E~44, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(0.123E~2, 0.1E~44, ~0.0): 0.0 0.0 +(0.123E~2, ~0.34028235E39, 0.34028235E39): 0.3398638E39 0.3398638E39 +(0.123E~2, ~0.34028235E39, 0.17014117E39): 0.16972263E39 0.16972263E39 +(0.123E~2, ~0.34028235E39, 0.123E4): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, 0.123E2): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, 0.31415927E1): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, 0.27182817E1): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, 0.123E1): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, 0.123): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, 0.123E~2): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, 0.11754944E~37): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, 0.5877472E~38): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, 0.1E~44): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, 0.0): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, ~0.34028235E39): ~inf ~inf +(0.123E~2, ~0.34028235E39, ~0.17014117E39): ~0.17055971E39 ~0.17055971E39 +(0.123E~2, ~0.34028235E39, ~0.123E4): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, ~0.123E2): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, ~0.31415927E1): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, ~0.27182817E1): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, ~0.123E1): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, ~0.123): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, ~0.123E~2): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, ~0.11754944E~37): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, ~0.5877472E~38): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, ~0.1E~44): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.34028235E39, ~0.0): ~0.4185473E36 ~0.4185473E36 +(0.123E~2, ~0.17014117E39, 0.34028235E39): 0.34007307E39 0.34007307E39 +(0.123E~2, ~0.17014117E39, 0.17014117E39): 0.1699319E39 0.1699319E39 +(0.123E~2, ~0.17014117E39, 0.123E4): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, 0.123E2): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, 0.31415927E1): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, 0.27182817E1): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, 0.123E1): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, 0.123): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, 0.123E~2): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, 0.11754944E~37): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, 0.5877472E~38): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, 0.1E~44): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, 0.0): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, ~0.34028235E39): ~inf ~inf +(0.123E~2, ~0.17014117E39, ~0.17014117E39): ~0.17035044E39 ~0.17035044E39 +(0.123E~2, ~0.17014117E39, ~0.123E4): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, ~0.123E2): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, ~0.31415927E1): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, ~0.27182817E1): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, ~0.123E1): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, ~0.123): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, ~0.123E~2): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, ~0.11754944E~37): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, ~0.5877472E~38): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, ~0.1E~44): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.17014117E39, ~0.0): ~0.20927364E36 ~0.20927364E36 +(0.123E~2, ~0.123E4, 0.123E4): 0.1228487E4 0.1228487E4 +(0.123E~2, ~0.123E4, 0.123E2): 0.107871E2 0.107871E2 +(0.123E~2, ~0.123E4, 0.31415927E1): 0.16286926E1 0.16286926E1 +(0.123E~2, ~0.123E4, 0.27182817E1): 0.12053816E1 0.12053816E1 +(0.123E~2, ~0.123E4, 0.123E1): ~0.28290004 ~0.28290004 +(0.123E~2, ~0.123E4, 0.123): ~0.13899001E1 ~0.13899001E1 +(0.123E~2, ~0.123E4, 0.123E~2): ~0.15116701E1 ~0.15116701E1 +(0.123E~2, ~0.123E4, 0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(0.123E~2, ~0.123E4, 0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(0.123E~2, ~0.123E4, 0.1E~44): ~0.15129001E1 ~0.15129001E1 +(0.123E~2, ~0.123E4, 0.0): ~0.15129001E1 ~0.15129001E1 +(0.123E~2, ~0.123E4, ~0.123E4): ~0.1231513E4 ~0.1231513E4 +(0.123E~2, ~0.123E4, ~0.123E2): ~0.13812901E2 ~0.13812901E2 +(0.123E~2, ~0.123E4, ~0.31415927E1): ~0.4654493E1 ~0.4654493E1 +(0.123E~2, ~0.123E4, ~0.27182817E1): ~0.42311816E1 ~0.42311816E1 +(0.123E~2, ~0.123E4, ~0.123E1): ~0.27429001E1 ~0.27429001E1 +(0.123E~2, ~0.123E4, ~0.123): ~0.16359E1 ~0.16359E1 +(0.123E~2, ~0.123E4, ~0.123E~2): ~0.15141301E1 ~0.15141301E1 +(0.123E~2, ~0.123E4, ~0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(0.123E~2, ~0.123E4, ~0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(0.123E~2, ~0.123E4, ~0.1E~44): ~0.15129001E1 ~0.15129001E1 +(0.123E~2, ~0.123E4, ~0.0): ~0.15129001E1 ~0.15129001E1 +(0.123E~2, ~0.123E2, 0.123E4): 0.12299849E4 0.12299849E4 +(0.123E~2, ~0.123E2, 0.123E2): 0.12284871E2 0.12284871E2 +(0.123E~2, ~0.123E2, 0.31415927E1): 0.31264637E1 0.31264637E1 +(0.123E~2, ~0.123E2, 0.27182817E1): 0.27031527E1 0.27031527E1 +(0.123E~2, ~0.123E2, 0.123E1): 0.1214871E1 0.1214871E1 +(0.123E~2, ~0.123E2, 0.123): 0.107871 0.107871 +(0.123E~2, ~0.123E2, 0.123E~2): ~0.13899001E~1 ~0.13899001E~1 +(0.123E~2, ~0.123E2, 0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(0.123E~2, ~0.123E2, 0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(0.123E~2, ~0.123E2, 0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(0.123E~2, ~0.123E2, 0.0): ~0.15129001E~1 ~0.15129001E~1 +(0.123E~2, ~0.123E2, ~0.123E4): ~0.12300151E4 ~0.12300151E4 +(0.123E~2, ~0.123E2, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(0.123E~2, ~0.123E2, ~0.31415927E1): ~0.31567218E1 ~0.31567218E1 +(0.123E~2, ~0.123E2, ~0.27182817E1): ~0.27334108E1 ~0.27334108E1 +(0.123E~2, ~0.123E2, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(0.123E~2, ~0.123E2, ~0.123): ~0.13812901 ~0.13812901 +(0.123E~2, ~0.123E2, ~0.123E~2): ~0.16359001E~1 ~0.16359001E~1 +(0.123E~2, ~0.123E2, ~0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(0.123E~2, ~0.123E2, ~0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(0.123E~2, ~0.123E2, ~0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(0.123E~2, ~0.123E2, ~0.0): ~0.15129001E~1 ~0.15129001E~1 +(0.123E~2, ~0.31415927E1, 0.123E4): 0.12299961E4 0.12299961E4 +(0.123E~2, ~0.31415927E1, 0.123E2): 0.12296136E2 0.12296136E2 +(0.123E~2, ~0.31415927E1, 0.31415927E1): 0.31377287E1 0.31377287E1 +(0.123E~2, ~0.31415927E1, 0.27182817E1): 0.27144177E1 0.27144177E1 +(0.123E~2, ~0.31415927E1, 0.123E1): 0.12261358E1 0.12261358E1 +(0.123E~2, ~0.31415927E1, 0.123): 0.11913584 0.11913584 +(0.123E~2, ~0.31415927E1, 0.123E~2): ~0.26341593E~2 ~0.26341593E~2 +(0.123E~2, ~0.31415927E1, 0.11754944E~37): ~0.38641593E~2 ~0.38641593E~2 +(0.123E~2, ~0.31415927E1, 0.5877472E~38): ~0.38641593E~2 ~0.38641593E~2 +(0.123E~2, ~0.31415927E1, 0.1E~44): ~0.38641593E~2 ~0.38641593E~2 +(0.123E~2, ~0.31415927E1, 0.0): ~0.38641593E~2 ~0.38641593E~2 +(0.123E~2, ~0.31415927E1, ~0.123E4): ~0.12300039E4 ~0.12300039E4 +(0.123E~2, ~0.31415927E1, ~0.123E2): ~0.123038645E2 ~0.123038645E2 +(0.123E~2, ~0.31415927E1, ~0.31415927E1): ~0.31454568E1 ~0.31454568E1 +(0.123E~2, ~0.31415927E1, ~0.27182817E1): ~0.27221458E1 ~0.27221458E1 +(0.123E~2, ~0.31415927E1, ~0.123E1): ~0.12338642E1 ~0.12338642E1 +(0.123E~2, ~0.31415927E1, ~0.123): ~0.12686417 ~0.12686417 +(0.123E~2, ~0.31415927E1, ~0.123E~2): ~0.50941594E~2 ~0.50941594E~2 +(0.123E~2, ~0.31415927E1, ~0.11754944E~37): ~0.38641593E~2 ~0.38641593E~2 +(0.123E~2, ~0.31415927E1, ~0.5877472E~38): ~0.38641593E~2 ~0.38641593E~2 +(0.123E~2, ~0.31415927E1, ~0.1E~44): ~0.38641593E~2 ~0.38641593E~2 +(0.123E~2, ~0.31415927E1, ~0.0): ~0.38641593E~2 ~0.38641593E~2 +(0.123E~2, ~0.27182817E1, 0.123E4): 0.12299967E4 0.12299967E4 +(0.123E~2, ~0.27182817E1, 0.123E2): 0.12296657E2 0.12296657E2 +(0.123E~2, ~0.27182817E1, 0.31415927E1): 0.31382492E1 0.31382492E1 +(0.123E~2, ~0.27182817E1, 0.27182817E1): 0.27149382E1 0.27149382E1 +(0.123E~2, ~0.27182817E1, 0.123E1): 0.12266566E1 0.12266566E1 +(0.123E~2, ~0.27182817E1, 0.123): 0.11965652 0.11965652 +(0.123E~2, ~0.27182817E1, 0.123E~2): ~0.21134866E~2 ~0.21134866E~2 +(0.123E~2, ~0.27182817E1, 0.11754944E~37): ~0.33434867E~2 ~0.33434867E~2 +(0.123E~2, ~0.27182817E1, 0.5877472E~38): ~0.33434867E~2 ~0.33434867E~2 +(0.123E~2, ~0.27182817E1, 0.1E~44): ~0.33434867E~2 ~0.33434867E~2 +(0.123E~2, ~0.27182817E1, 0.0): ~0.33434867E~2 ~0.33434867E~2 +(0.123E~2, ~0.27182817E1, ~0.123E4): ~0.12300033E4 ~0.12300033E4 +(0.123E~2, ~0.27182817E1, ~0.123E2): ~0.12303344E2 ~0.12303344E2 +(0.123E~2, ~0.27182817E1, ~0.31415927E1): ~0.31449363E1 ~0.31449363E1 +(0.123E~2, ~0.27182817E1, ~0.27182817E1): ~0.27216253E1 ~0.27216253E1 +(0.123E~2, ~0.27182817E1, ~0.123E1): ~0.12333435E1 ~0.12333435E1 +(0.123E~2, ~0.27182817E1, ~0.123): ~0.12634349 ~0.12634349 +(0.123E~2, ~0.27182817E1, ~0.123E~2): ~0.45734867E~2 ~0.45734867E~2 +(0.123E~2, ~0.27182817E1, ~0.11754944E~37): ~0.33434867E~2 ~0.33434867E~2 +(0.123E~2, ~0.27182817E1, ~0.5877472E~38): ~0.33434867E~2 ~0.33434867E~2 +(0.123E~2, ~0.27182817E1, ~0.1E~44): ~0.33434867E~2 ~0.33434867E~2 +(0.123E~2, ~0.27182817E1, ~0.0): ~0.33434867E~2 ~0.33434867E~2 +(0.123E~2, ~0.123E1, 0.123E4): 0.12299985E4 0.12299985E4 +(0.123E~2, ~0.123E1, 0.123E2): 0.12298488E2 0.12298488E2 +(0.123E~2, ~0.123E1, 0.31415927E1): 0.31400797E1 0.31400797E1 +(0.123E~2, ~0.123E1, 0.27182817E1): 0.27167687E1 0.27167687E1 +(0.123E~2, ~0.123E1, 0.123E1): 0.12284871E1 0.12284871E1 +(0.123E~2, ~0.123E1, 0.123): 0.1214871 0.1214871 +(0.123E~2, ~0.123E1, 0.123E~2): ~0.28290003E~3 ~0.28290003E~3 +(0.123E~2, ~0.123E1, 0.11754944E~37): ~0.15129001E~2 ~0.15129001E~2 +(0.123E~2, ~0.123E1, 0.5877472E~38): ~0.15129001E~2 ~0.15129001E~2 +(0.123E~2, ~0.123E1, 0.1E~44): ~0.15129001E~2 ~0.15129001E~2 +(0.123E~2, ~0.123E1, 0.0): ~0.15129001E~2 ~0.15129001E~2 +(0.123E~2, ~0.123E1, ~0.123E4): ~0.12300015E4 ~0.12300015E4 +(0.123E~2, ~0.123E1, ~0.123E2): ~0.12301513E2 ~0.12301513E2 +(0.123E~2, ~0.123E1, ~0.31415927E1): ~0.31431057E1 ~0.31431057E1 +(0.123E~2, ~0.123E1, ~0.27182817E1): ~0.27197948E1 ~0.27197948E1 +(0.123E~2, ~0.123E1, ~0.123E1): ~0.12315129E1 ~0.12315129E1 +(0.123E~2, ~0.123E1, ~0.123): ~0.1245129 ~0.1245129 +(0.123E~2, ~0.123E1, ~0.123E~2): ~0.27429E~2 ~0.27429E~2 +(0.123E~2, ~0.123E1, ~0.11754944E~37): ~0.15129001E~2 ~0.15129001E~2 +(0.123E~2, ~0.123E1, ~0.5877472E~38): ~0.15129001E~2 ~0.15129001E~2 +(0.123E~2, ~0.123E1, ~0.1E~44): ~0.15129001E~2 ~0.15129001E~2 +(0.123E~2, ~0.123E1, ~0.0): ~0.15129001E~2 ~0.15129001E~2 +(0.123E~2, ~0.123, 0.123E4): 0.12299999E4 0.12299999E4 +(0.123E~2, ~0.123, 0.123E2): 0.12299849E2 0.12299849E2 +(0.123E~2, ~0.123, 0.31415927E1): 0.31414413E1 0.31414413E1 +(0.123E~2, ~0.123, 0.27182817E1): 0.27181304E1 0.27181304E1 +(0.123E~2, ~0.123, 0.123E1): 0.12298487E1 0.12298487E1 +(0.123E~2, ~0.123, 0.123): 0.12284871 0.12284871 +(0.123E~2, ~0.123, 0.123E~2): 0.10787101E~2 0.10787101E~2 +(0.123E~2, ~0.123, 0.11754944E~37): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, 0.5877472E~38): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, 0.1E~44): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, 0.0): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, ~0.123E4): ~0.12300001E4 ~0.12300001E4 +(0.123E~2, ~0.123, ~0.123E2): ~0.12300152E2 ~0.12300152E2 +(0.123E~2, ~0.123, ~0.31415927E1): ~0.31417441E1 ~0.31417441E1 +(0.123E~2, ~0.123, ~0.27182817E1): ~0.27184331E1 ~0.27184331E1 +(0.123E~2, ~0.123, ~0.123E1): ~0.12301513E1 ~0.12301513E1 +(0.123E~2, ~0.123, ~0.123): ~0.123151295 ~0.123151295 +(0.123E~2, ~0.123, ~0.123E~2): ~0.138129E~2 ~0.138129E~2 +(0.123E~2, ~0.123, ~0.11754944E~37): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, ~0.5877472E~38): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, ~0.1E~44): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, ~0.0): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123E~2, 0.123E4): 0.123E4 0.123E4 +(0.123E~2, ~0.123E~2, 0.123E2): 0.12299998E2 0.12299998E2 +(0.123E~2, ~0.123E~2, 0.31415927E1): 0.31415913E1 0.31415913E1 +(0.123E~2, ~0.123E~2, 0.27182817E1): 0.27182803E1 0.27182803E1 +(0.123E~2, ~0.123E~2, 0.123E1): 0.12299985E1 0.12299985E1 +(0.123E~2, ~0.123E~2, 0.123): 0.12299849 0.12299849 +(0.123E~2, ~0.123E~2, 0.123E~2): 0.12284871E~2 0.12284871E~2 +(0.123E~2, ~0.123E~2, 0.11754944E~37): ~0.15129001E~5 ~0.15129001E~5 +(0.123E~2, ~0.123E~2, 0.5877472E~38): ~0.15129001E~5 ~0.15129001E~5 +(0.123E~2, ~0.123E~2, 0.1E~44): ~0.15129001E~5 ~0.15129001E~5 +(0.123E~2, ~0.123E~2, 0.0): ~0.15129001E~5 ~0.15129001E~5 +(0.123E~2, ~0.123E~2, ~0.123E4): ~0.123E4 ~0.123E4 +(0.123E~2, ~0.123E~2, ~0.123E2): ~0.12300002E2 ~0.12300002E2 +(0.123E~2, ~0.123E~2, ~0.31415927E1): ~0.31415942E1 ~0.31415942E1 +(0.123E~2, ~0.123E~2, ~0.27182817E1): ~0.27182832E1 ~0.27182832E1 +(0.123E~2, ~0.123E~2, ~0.123E1): ~0.12300016E1 ~0.12300016E1 +(0.123E~2, ~0.123E~2, ~0.123): ~0.123001516 ~0.123001516 +(0.123E~2, ~0.123E~2, ~0.123E~2): ~0.1231513E~2 ~0.1231513E~2 +(0.123E~2, ~0.123E~2, ~0.11754944E~37): ~0.15129001E~5 ~0.15129001E~5 +(0.123E~2, ~0.123E~2, ~0.5877472E~38): ~0.15129001E~5 ~0.15129001E~5 +(0.123E~2, ~0.123E~2, ~0.1E~44): ~0.15129001E~5 ~0.15129001E~5 +(0.123E~2, ~0.123E~2, ~0.0): ~0.15129001E~5 ~0.15129001E~5 +(0.123E~2, ~0.11754944E~37, 0.11754944E~37): 0.11740485E~37 0.11740485E~37 +(0.123E~2, ~0.11754944E~37, 0.5877472E~38): 0.5863013E~38 0.5863013E~38 +(0.123E~2, ~0.11754944E~37, 0.1E~44): ~0.14457E~40 ~0.14457E~40 +(0.123E~2, ~0.11754944E~37, 0.0): ~0.14459E~40 ~0.14459E~40 +(0.123E~2, ~0.11754944E~37, ~0.11754944E~37): ~0.11769402E~37 ~0.11769402E~37 +(0.123E~2, ~0.11754944E~37, ~0.5877472E~38): ~0.589193E~38 ~0.589193E~38 +(0.123E~2, ~0.11754944E~37, ~0.1E~44): ~0.1446E~40 ~0.1446E~40 +(0.123E~2, ~0.11754944E~37, ~0.0): ~0.14459E~40 ~0.14459E~40 +(0.123E~2, ~0.5877472E~38, 0.11754944E~37): 0.11747714E~37 0.11747714E~37 +(0.123E~2, ~0.5877472E~38, 0.5877472E~38): 0.5870242E~38 0.5870242E~38 +(0.123E~2, ~0.5877472E~38, 0.1E~44): ~0.7228E~41 ~0.7228E~41 +(0.123E~2, ~0.5877472E~38, 0.0): ~0.7229E~41 ~0.7229E~41 +(0.123E~2, ~0.5877472E~38, ~0.11754944E~37): ~0.11762173E~37 ~0.11762173E~37 +(0.123E~2, ~0.5877472E~38, ~0.5877472E~38): ~0.5884701E~38 ~0.5884701E~38 +(0.123E~2, ~0.5877472E~38, ~0.1E~44): ~0.723E~41 ~0.723E~41 +(0.123E~2, ~0.5877472E~38, ~0.0): ~0.7229E~41 ~0.7229E~41 +(0.123E~2, ~0.1E~44, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(0.123E~2, ~0.1E~44, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(0.123E~2, ~0.1E~44, 0.1E~44): 0.1E~44 0.1E~44 +(0.123E~2, ~0.1E~44, 0.0): ~0.0 ~0.0 +(0.123E~2, ~0.1E~44, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(0.123E~2, ~0.1E~44, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(0.123E~2, ~0.1E~44, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(0.123E~2, ~0.1E~44, ~0.0): ~0.0 ~0.0 +(0.11754944E~37, 0.34028235E39, 0.123E4): 0.1234E4 0.1234E4 +(0.11754944E~37, 0.34028235E39, 0.123E2): 0.163E2 0.163E2 +(0.11754944E~37, 0.34028235E39, 0.27182817E1): 0.67182817E1 0.67182817E1 +(0.11754944E~37, 0.34028235E39, 0.123E1): 0.52299995E1 0.52299995E1 +(0.11754944E~37, 0.34028235E39, 0.123): 0.41229997E1 0.41229997E1 +(0.11754944E~37, 0.34028235E39, 0.123E~2): 0.400123E1 0.400123E1 +(0.11754944E~37, 0.34028235E39, ~0.123E4): ~0.1226E4 ~0.1226E4 +(0.11754944E~37, 0.34028235E39, ~0.123E2): ~0.83E1 ~0.83E1 +(0.11754944E~37, 0.34028235E39, ~0.123): 0.38769999E1 0.38769999E1 +(0.11754944E~37, 0.34028235E39, ~0.123E~2): 0.39987698E1 0.39987698E1 +(0.11754944E~37, 0.17014117E39, 0.123E4): 0.1232E4 0.1232E4 +(0.11754944E~37, 0.17014117E39, 0.123E2): 0.143E2 0.143E2 +(0.11754944E~37, 0.17014117E39, 0.31415927E1): 0.51415925E1 0.51415925E1 +(0.11754944E~37, 0.17014117E39, 0.27182817E1): 0.47182817E1 0.47182817E1 +(0.11754944E~37, 0.17014117E39, 0.123E1): 0.323E1 0.323E1 +(0.11754944E~37, 0.17014117E39, 0.123): 0.2123E1 0.2123E1 +(0.11754944E~37, 0.17014117E39, 0.123E~2): 0.20012298E1 0.20012298E1 +(0.11754944E~37, 0.17014117E39, ~0.123E4): ~0.1228E4 ~0.1228E4 +(0.11754944E~37, 0.17014117E39, ~0.123E2): ~0.103E2 ~0.103E2 +(0.11754944E~37, 0.17014117E39, ~0.123): 0.18769999E1 0.18769999E1 +(0.11754944E~37, 0.17014117E39, ~0.123E~2): 0.19987699E1 0.19987699E1 +(0.11754944E~37, 0.123E4, 0.1E~44): 0.1445858E~34 0.1445858E~34 +(0.11754944E~37, 0.123E4, ~0.1E~44): 0.1445858E~34 0.1445858E~34 +(0.11754944E~37, 0.123E2, 0.1E~44): 0.14458581E~36 0.14458581E~36 +(0.11754944E~37, 0.123E2, ~0.1E~44): 0.14458581E~36 0.14458581E~36 +(0.11754944E~37, 0.31415927E1, 0.11754944E~37): 0.4868419E~37 0.4868419E~37 +(0.11754944E~37, 0.31415927E1, 0.1E~44): 0.36929248E~37 0.36929248E~37 +(0.11754944E~37, 0.31415927E1, ~0.1E~44): 0.36929242E~37 0.36929242E~37 +(0.11754944E~37, 0.27182817E1, 0.1E~44): 0.31953248E~37 0.31953248E~37 +(0.11754944E~37, 0.27182817E1, ~0.1E~44): 0.31953248E~37 0.31953248E~37 +(0.11754944E~37, 0.123, 0.11754944E~37): 0.13200802E~37 0.13200802E~37 +(0.11754944E~37, 0.123, 0.5877472E~38): 0.732333E~38 0.732333E~38 +(0.11754944E~37, 0.123, 0.1E~44): 0.144586E~38 0.144586E~38 +(0.11754944E~37, 0.123, 0.0): 0.1445858E~38 0.1445858E~38 +(0.11754944E~37, 0.123, ~0.11754944E~37): ~0.10309085E~37 ~0.10309085E~37 +(0.11754944E~37, 0.123, ~0.5877472E~38): ~0.4431613E~38 ~0.4431613E~38 +(0.11754944E~37, 0.123, ~0.1E~44): 0.1445857E~38 0.1445857E~38 +(0.11754944E~37, 0.123, ~0.0): 0.1445858E~38 0.1445858E~38 +(0.11754944E~37, 0.123E~2, 0.11754944E~37): 0.11769402E~37 0.11769402E~37 +(0.11754944E~37, 0.123E~2, 0.5877472E~38): 0.589193E~38 0.589193E~38 +(0.11754944E~37, 0.123E~2, 0.1E~44): 0.1446E~40 0.1446E~40 +(0.11754944E~37, 0.123E~2, 0.0): 0.14459E~40 0.14459E~40 +(0.11754944E~37, 0.123E~2, ~0.11754944E~37): ~0.11740485E~37 ~0.11740485E~37 +(0.11754944E~37, 0.123E~2, ~0.5877472E~38): ~0.5863013E~38 ~0.5863013E~38 +(0.11754944E~37, 0.123E~2, ~0.1E~44): 0.14457E~40 0.14457E~40 +(0.11754944E~37, 0.123E~2, ~0.0): 0.14459E~40 0.14459E~40 +(0.11754944E~37, 0.11754944E~37, 0.0): 0.0 0.0 +(0.11754944E~37, 0.11754944E~37, ~0.0): 0.0 0.0 +(0.11754944E~37, 0.5877472E~38, 0.0): 0.0 0.0 +(0.11754944E~37, 0.5877472E~38, ~0.0): 0.0 0.0 +(0.11754944E~37, 0.1E~44, 0.0): 0.0 0.0 +(0.11754944E~37, 0.1E~44, ~0.0): 0.0 0.0 +(0.11754944E~37, ~0.34028235E39, 0.123E4): 0.1226E4 0.1226E4 +(0.11754944E~37, ~0.34028235E39, 0.123E2): 0.83E1 0.83E1 +(0.11754944E~37, ~0.34028235E39, 0.123): ~0.38769999E1 ~0.38769999E1 +(0.11754944E~37, ~0.34028235E39, 0.123E~2): ~0.39987698E1 ~0.39987698E1 +(0.11754944E~37, ~0.34028235E39, ~0.123E4): ~0.1234E4 ~0.1234E4 +(0.11754944E~37, ~0.34028235E39, ~0.123E2): ~0.163E2 ~0.163E2 +(0.11754944E~37, ~0.34028235E39, ~0.27182817E1): ~0.67182817E1 ~0.67182817E1 +(0.11754944E~37, ~0.34028235E39, ~0.123E1): ~0.52299995E1 ~0.52299995E1 +(0.11754944E~37, ~0.34028235E39, ~0.123): ~0.41229997E1 ~0.41229997E1 +(0.11754944E~37, ~0.34028235E39, ~0.123E~2): ~0.400123E1 ~0.400123E1 +(0.11754944E~37, ~0.17014117E39, 0.123E4): 0.1228E4 0.1228E4 +(0.11754944E~37, ~0.17014117E39, 0.123E2): 0.103E2 0.103E2 +(0.11754944E~37, ~0.17014117E39, 0.123): ~0.18769999E1 ~0.18769999E1 +(0.11754944E~37, ~0.17014117E39, 0.123E~2): ~0.19987699E1 ~0.19987699E1 +(0.11754944E~37, ~0.17014117E39, ~0.123E4): ~0.1232E4 ~0.1232E4 +(0.11754944E~37, ~0.17014117E39, ~0.123E2): ~0.143E2 ~0.143E2 +(0.11754944E~37, ~0.17014117E39, ~0.31415927E1): ~0.51415925E1 ~0.51415925E1 +(0.11754944E~37, ~0.17014117E39, ~0.27182817E1): ~0.47182817E1 ~0.47182817E1 +(0.11754944E~37, ~0.17014117E39, ~0.123E1): ~0.323E1 ~0.323E1 +(0.11754944E~37, ~0.17014117E39, ~0.123): ~0.2123E1 ~0.2123E1 +(0.11754944E~37, ~0.17014117E39, ~0.123E~2): ~0.20012298E1 ~0.20012298E1 +(0.11754944E~37, ~0.123E4, 0.1E~44): ~0.1445858E~34 ~0.1445858E~34 +(0.11754944E~37, ~0.123E4, ~0.1E~44): ~0.1445858E~34 ~0.1445858E~34 +(0.11754944E~37, ~0.123E2, 0.1E~44): ~0.14458581E~36 ~0.14458581E~36 +(0.11754944E~37, ~0.123E2, ~0.1E~44): ~0.14458581E~36 ~0.14458581E~36 +(0.11754944E~37, ~0.31415927E1, 0.1E~44): ~0.36929242E~37 ~0.36929242E~37 +(0.11754944E~37, ~0.31415927E1, ~0.11754944E~37): ~0.4868419E~37 ~0.4868419E~37 +(0.11754944E~37, ~0.31415927E1, ~0.1E~44): ~0.36929248E~37 ~0.36929248E~37 +(0.11754944E~37, ~0.27182817E1, 0.1E~44): ~0.31953248E~37 ~0.31953248E~37 +(0.11754944E~37, ~0.27182817E1, ~0.1E~44): ~0.31953248E~37 ~0.31953248E~37 +(0.11754944E~37, ~0.123, 0.11754944E~37): 0.10309085E~37 0.10309085E~37 +(0.11754944E~37, ~0.123, 0.5877472E~38): 0.4431613E~38 0.4431613E~38 +(0.11754944E~37, ~0.123, 0.1E~44): ~0.1445857E~38 ~0.1445857E~38 +(0.11754944E~37, ~0.123, 0.0): ~0.1445858E~38 ~0.1445858E~38 +(0.11754944E~37, ~0.123, ~0.11754944E~37): ~0.13200802E~37 ~0.13200802E~37 +(0.11754944E~37, ~0.123, ~0.5877472E~38): ~0.732333E~38 ~0.732333E~38 +(0.11754944E~37, ~0.123, ~0.1E~44): ~0.144586E~38 ~0.144586E~38 +(0.11754944E~37, ~0.123, ~0.0): ~0.1445858E~38 ~0.1445858E~38 +(0.11754944E~37, ~0.123E~2, 0.11754944E~37): 0.11740485E~37 0.11740485E~37 +(0.11754944E~37, ~0.123E~2, 0.5877472E~38): 0.5863013E~38 0.5863013E~38 +(0.11754944E~37, ~0.123E~2, 0.1E~44): ~0.14457E~40 ~0.14457E~40 +(0.11754944E~37, ~0.123E~2, 0.0): ~0.14459E~40 ~0.14459E~40 +(0.11754944E~37, ~0.123E~2, ~0.11754944E~37): ~0.11769402E~37 ~0.11769402E~37 +(0.11754944E~37, ~0.123E~2, ~0.5877472E~38): ~0.589193E~38 ~0.589193E~38 +(0.11754944E~37, ~0.123E~2, ~0.1E~44): ~0.1446E~40 ~0.1446E~40 +(0.11754944E~37, ~0.123E~2, ~0.0): ~0.14459E~40 ~0.14459E~40 +(0.11754944E~37, ~0.11754944E~37, 0.0): ~0.0 ~0.0 +(0.11754944E~37, ~0.11754944E~37, ~0.0): ~0.0 ~0.0 +(0.11754944E~37, ~0.5877472E~38, 0.0): ~0.0 ~0.0 +(0.11754944E~37, ~0.5877472E~38, ~0.0): ~0.0 ~0.0 +(0.11754944E~37, ~0.1E~44, 0.0): ~0.0 ~0.0 +(0.11754944E~37, ~0.1E~44, ~0.0): ~0.0 ~0.0 +(0.5877472E~38, 0.34028235E39, 0.123E4): 0.1232E4 0.1232E4 +(0.5877472E~38, 0.34028235E39, 0.123E2): 0.143E2 0.143E2 +(0.5877472E~38, 0.34028235E39, 0.31415927E1): 0.51415925E1 0.51415925E1 +(0.5877472E~38, 0.34028235E39, 0.27182817E1): 0.47182817E1 0.47182817E1 +(0.5877472E~38, 0.34028235E39, 0.123E1): 0.323E1 0.323E1 +(0.5877472E~38, 0.34028235E39, 0.123): 0.2123E1 0.2123E1 +(0.5877472E~38, 0.34028235E39, 0.123E~2): 0.20012298E1 0.20012298E1 +(0.5877472E~38, 0.34028235E39, ~0.123E4): ~0.1228E4 ~0.1228E4 +(0.5877472E~38, 0.34028235E39, ~0.123E2): ~0.103E2 ~0.103E2 +(0.5877472E~38, 0.34028235E39, ~0.123): 0.18769999E1 0.18769999E1 +(0.5877472E~38, 0.34028235E39, ~0.123E~2): 0.19987699E1 0.19987699E1 +(0.5877472E~38, 0.17014117E39, 0.123E4): 0.1231E4 0.1231E4 +(0.5877472E~38, 0.17014117E39, 0.123E2): 0.133E2 0.133E2 +(0.5877472E~38, 0.17014117E39, 0.31415927E1): 0.41415925E1 0.41415925E1 +(0.5877472E~38, 0.17014117E39, 0.27182817E1): 0.37182817E1 0.37182817E1 +(0.5877472E~38, 0.17014117E39, 0.123E1): 0.223E1 0.223E1 +(0.5877472E~38, 0.17014117E39, 0.123): 0.11229999E1 0.11229999E1 +(0.5877472E~38, 0.17014117E39, 0.123E~2): 0.10012299E1 0.10012299E1 +(0.5877472E~38, 0.17014117E39, ~0.123E4): ~0.1229E4 ~0.1229E4 +(0.5877472E~38, 0.17014117E39, ~0.123E2): ~0.113E2 ~0.113E2 +(0.5877472E~38, 0.17014117E39, ~0.31415927E1): ~0.21415927E1 ~0.21415927E1 +(0.5877472E~38, 0.17014117E39, ~0.27182817E1): ~0.17182817E1 ~0.17182817E1 +(0.5877472E~38, 0.17014117E39, ~0.123): 0.8769999 0.8769999 +(0.5877472E~38, 0.17014117E39, ~0.123E~2): 0.99876994 0.99876994 +(0.5877472E~38, 0.123E4, 0.1E~44): 0.722929E~35 0.722929E~35 +(0.5877472E~38, 0.123E4, ~0.1E~44): 0.722929E~35 0.722929E~35 +(0.5877472E~38, 0.123E2, 0.1E~44): 0.72292904E~37 0.72292904E~37 +(0.5877472E~38, 0.123E2, ~0.1E~44): 0.72292904E~37 0.72292904E~37 +(0.5877472E~38, 0.31415927E1, 0.11754944E~37): 0.30219568E~37 0.30219568E~37 +(0.5877472E~38, 0.31415927E1, 0.5877472E~38): 0.24342096E~37 0.24342096E~37 +(0.5877472E~38, 0.123, 0.11754944E~37): 0.12477872E~37 0.12477872E~37 +(0.5877472E~38, 0.123, 0.5877472E~38): 0.66004E~38 0.66004E~38 +(0.5877472E~38, 0.123, 0.1E~44): 0.72293E~39 0.72293E~39 +(0.5877472E~38, 0.123, 0.0): 0.722928E~39 0.722928E~39 +(0.5877472E~38, 0.123, ~0.11754944E~37): ~0.11032015E~37 ~0.11032015E~37 +(0.5877472E~38, 0.123, ~0.5877472E~38): ~0.5154543E~38 ~0.5154543E~38 +(0.5877472E~38, 0.123, ~0.1E~44): 0.722927E~39 0.722927E~39 +(0.5877472E~38, 0.123, ~0.0): 0.722928E~39 0.722928E~39 +(0.5877472E~38, 0.123E~2, 0.11754944E~37): 0.11762173E~37 0.11762173E~37 +(0.5877472E~38, 0.123E~2, 0.5877472E~38): 0.5884701E~38 0.5884701E~38 +(0.5877472E~38, 0.123E~2, 0.1E~44): 0.723E~41 0.723E~41 +(0.5877472E~38, 0.123E~2, 0.0): 0.7229E~41 0.7229E~41 +(0.5877472E~38, 0.123E~2, ~0.11754944E~37): ~0.11747714E~37 ~0.11747714E~37 +(0.5877472E~38, 0.123E~2, ~0.5877472E~38): ~0.5870242E~38 ~0.5870242E~38 +(0.5877472E~38, 0.123E~2, ~0.1E~44): 0.7228E~41 0.7228E~41 +(0.5877472E~38, 0.123E~2, ~0.0): 0.7229E~41 0.7229E~41 +(0.5877472E~38, 0.11754944E~37, 0.0): 0.0 0.0 +(0.5877472E~38, 0.11754944E~37, ~0.0): 0.0 0.0 +(0.5877472E~38, 0.5877472E~38, 0.0): 0.0 0.0 +(0.5877472E~38, 0.5877472E~38, ~0.0): 0.0 0.0 +(0.5877472E~38, 0.1E~44, 0.0): 0.0 0.0 +(0.5877472E~38, 0.1E~44, ~0.0): 0.0 0.0 +(0.5877472E~38, ~0.34028235E39, 0.123E4): 0.1228E4 0.1228E4 +(0.5877472E~38, ~0.34028235E39, 0.123E2): 0.103E2 0.103E2 +(0.5877472E~38, ~0.34028235E39, 0.123): ~0.18769999E1 ~0.18769999E1 +(0.5877472E~38, ~0.34028235E39, 0.123E~2): ~0.19987699E1 ~0.19987699E1 +(0.5877472E~38, ~0.34028235E39, ~0.123E4): ~0.1232E4 ~0.1232E4 +(0.5877472E~38, ~0.34028235E39, ~0.123E2): ~0.143E2 ~0.143E2 +(0.5877472E~38, ~0.34028235E39, ~0.31415927E1): ~0.51415925E1 ~0.51415925E1 +(0.5877472E~38, ~0.34028235E39, ~0.27182817E1): ~0.47182817E1 ~0.47182817E1 +(0.5877472E~38, ~0.34028235E39, ~0.123E1): ~0.323E1 ~0.323E1 +(0.5877472E~38, ~0.34028235E39, ~0.123): ~0.2123E1 ~0.2123E1 +(0.5877472E~38, ~0.34028235E39, ~0.123E~2): ~0.20012298E1 ~0.20012298E1 +(0.5877472E~38, ~0.17014117E39, 0.123E4): 0.1229E4 0.1229E4 +(0.5877472E~38, ~0.17014117E39, 0.123E2): 0.113E2 0.113E2 +(0.5877472E~38, ~0.17014117E39, 0.31415927E1): 0.21415927E1 0.21415927E1 +(0.5877472E~38, ~0.17014117E39, 0.27182817E1): 0.17182817E1 0.17182817E1 +(0.5877472E~38, ~0.17014117E39, 0.123): ~0.8769999 ~0.8769999 +(0.5877472E~38, ~0.17014117E39, 0.123E~2): ~0.99876994 ~0.99876994 +(0.5877472E~38, ~0.17014117E39, ~0.123E4): ~0.1231E4 ~0.1231E4 +(0.5877472E~38, ~0.17014117E39, ~0.123E2): ~0.133E2 ~0.133E2 +(0.5877472E~38, ~0.17014117E39, ~0.31415927E1): ~0.41415925E1 ~0.41415925E1 +(0.5877472E~38, ~0.17014117E39, ~0.27182817E1): ~0.37182817E1 ~0.37182817E1 +(0.5877472E~38, ~0.17014117E39, ~0.123E1): ~0.223E1 ~0.223E1 +(0.5877472E~38, ~0.17014117E39, ~0.123): ~0.11229999E1 ~0.11229999E1 +(0.5877472E~38, ~0.17014117E39, ~0.123E~2): ~0.10012299E1 ~0.10012299E1 +(0.5877472E~38, ~0.123E4, 0.1E~44): ~0.722929E~35 ~0.722929E~35 +(0.5877472E~38, ~0.123E4, ~0.1E~44): ~0.722929E~35 ~0.722929E~35 +(0.5877472E~38, ~0.123E2, 0.1E~44): ~0.72292904E~37 ~0.72292904E~37 +(0.5877472E~38, ~0.123E2, ~0.1E~44): ~0.72292904E~37 ~0.72292904E~37 +(0.5877472E~38, ~0.31415927E1, ~0.11754944E~37): ~0.30219568E~37 ~0.30219568E~37 +(0.5877472E~38, ~0.31415927E1, ~0.5877472E~38): ~0.24342096E~37 ~0.24342096E~37 +(0.5877472E~38, ~0.123, 0.11754944E~37): 0.11032015E~37 0.11032015E~37 +(0.5877472E~38, ~0.123, 0.5877472E~38): 0.5154543E~38 0.5154543E~38 +(0.5877472E~38, ~0.123, 0.1E~44): ~0.722927E~39 ~0.722927E~39 +(0.5877472E~38, ~0.123, 0.0): ~0.722928E~39 ~0.722928E~39 +(0.5877472E~38, ~0.123, ~0.11754944E~37): ~0.12477872E~37 ~0.12477872E~37 +(0.5877472E~38, ~0.123, ~0.5877472E~38): ~0.66004E~38 ~0.66004E~38 +(0.5877472E~38, ~0.123, ~0.1E~44): ~0.72293E~39 ~0.72293E~39 +(0.5877472E~38, ~0.123, ~0.0): ~0.722928E~39 ~0.722928E~39 +(0.5877472E~38, ~0.123E~2, 0.11754944E~37): 0.11747714E~37 0.11747714E~37 +(0.5877472E~38, ~0.123E~2, 0.5877472E~38): 0.5870242E~38 0.5870242E~38 +(0.5877472E~38, ~0.123E~2, 0.1E~44): ~0.7228E~41 ~0.7228E~41 +(0.5877472E~38, ~0.123E~2, 0.0): ~0.7229E~41 ~0.7229E~41 +(0.5877472E~38, ~0.123E~2, ~0.11754944E~37): ~0.11762173E~37 ~0.11762173E~37 +(0.5877472E~38, ~0.123E~2, ~0.5877472E~38): ~0.5884701E~38 ~0.5884701E~38 +(0.5877472E~38, ~0.123E~2, ~0.1E~44): ~0.723E~41 ~0.723E~41 +(0.5877472E~38, ~0.123E~2, ~0.0): ~0.7229E~41 ~0.7229E~41 +(0.5877472E~38, ~0.11754944E~37, 0.0): ~0.0 ~0.0 +(0.5877472E~38, ~0.11754944E~37, ~0.0): ~0.0 ~0.0 +(0.5877472E~38, ~0.5877472E~38, 0.0): ~0.0 ~0.0 +(0.5877472E~38, ~0.5877472E~38, ~0.0): ~0.0 ~0.0 +(0.5877472E~38, ~0.1E~44, 0.0): ~0.0 ~0.0 +(0.5877472E~38, ~0.1E~44, ~0.0): ~0.0 ~0.0 +(0.1E~44, 0.34028235E39, 0.123E4): 0.123E4 0.123E4 +(0.1E~44, 0.34028235E39, 0.123E2): 0.123E2 0.123E2 +(0.1E~44, 0.34028235E39, 0.31415927E1): 0.31415932E1 0.31415932E1 +(0.1E~44, 0.34028235E39, 0.27182817E1): 0.27182822E1 0.27182822E1 +(0.1E~44, 0.34028235E39, 0.123E1): 0.12300005E1 0.12300005E1 +(0.1E~44, 0.34028235E39, 0.123): 0.12300048 0.12300048 +(0.1E~44, 0.34028235E39, 0.123E~2): 0.12304769E~2 0.12304769E~2 +(0.1E~44, 0.34028235E39, ~0.123E4): ~0.123E4 ~0.123E4 +(0.1E~44, 0.34028235E39, ~0.123E2): ~0.123E2 ~0.123E2 +(0.1E~44, 0.34028235E39, ~0.31415927E1): ~0.31415923E1 ~0.31415923E1 +(0.1E~44, 0.34028235E39, ~0.27182817E1): ~0.27182813E1 ~0.27182813E1 +(0.1E~44, 0.34028235E39, ~0.123E1): ~0.12299995E1 ~0.12299995E1 +(0.1E~44, 0.34028235E39, ~0.123): ~0.12299953 ~0.12299953 +(0.1E~44, 0.34028235E39, ~0.123E~2): ~0.12295232E~2 ~0.12295232E~2 +(0.1E~44, 0.17014117E39, 0.123E4): 0.123E4 0.123E4 +(0.1E~44, 0.17014117E39, 0.123E2): 0.123E2 0.123E2 +(0.1E~44, 0.17014117E39, 0.31415927E1): 0.3141593E1 0.3141593E1 +(0.1E~44, 0.17014117E39, 0.27182817E1): 0.2718282E1 0.2718282E1 +(0.1E~44, 0.17014117E39, 0.123E1): 0.12300003E1 0.12300003E1 +(0.1E~44, 0.17014117E39, 0.123): 0.12300024 0.12300024 +(0.1E~44, 0.17014117E39, 0.123E~2): 0.12302385E~2 0.12302385E~2 +(0.1E~44, 0.17014117E39, ~0.123E4): ~0.123E4 ~0.123E4 +(0.1E~44, 0.17014117E39, ~0.123E2): ~0.123E2 ~0.123E2 +(0.1E~44, 0.17014117E39, ~0.31415927E1): ~0.31415925E1 ~0.31415925E1 +(0.1E~44, 0.17014117E39, ~0.27182817E1): ~0.27182815E1 ~0.27182815E1 +(0.1E~44, 0.17014117E39, ~0.123E1): ~0.12299998E1 ~0.12299998E1 +(0.1E~44, 0.17014117E39, ~0.123): ~0.122999765 ~0.122999765 +(0.1E~44, 0.17014117E39, ~0.123E~2): ~0.12297616E~2 ~0.12297616E~2 +(0.1E~44, 0.123E2, 0.11754944E~37): 0.1175496E~37 0.1175496E~37 +(0.1E~44, 0.123E2, 0.5877472E~38): 0.5877489E~38 0.5877489E~38 +(0.1E~44, 0.123E2, 0.1E~44): 0.18E~43 0.18E~43 +(0.1E~44, 0.123E2, 0.0): 0.17E~43 0.17E~43 +(0.1E~44, 0.123E2, ~0.11754944E~37): ~0.11754927E~37 ~0.11754927E~37 +(0.1E~44, 0.123E2, ~0.5877472E~38): ~0.5877455E~38 ~0.5877455E~38 +(0.1E~44, 0.123E2, ~0.1E~44): 0.15E~43 0.15E~43 +(0.1E~44, 0.123E2, ~0.0): 0.17E~43 0.17E~43 +(0.1E~44, 0.31415927E1, 0.11754944E~37): 0.11754948E~37 0.11754948E~37 +(0.1E~44, 0.31415927E1, 0.5877472E~38): 0.5877476E~38 0.5877476E~38 +(0.1E~44, 0.31415927E1, 0.1E~44): 0.6E~44 0.6E~44 +(0.1E~44, 0.31415927E1, 0.0): 0.4E~44 0.4E~44 +(0.1E~44, 0.31415927E1, ~0.11754944E~37): ~0.1175494E~37 ~0.1175494E~37 +(0.1E~44, 0.31415927E1, ~0.5877472E~38): ~0.5877468E~38 ~0.5877468E~38 +(0.1E~44, 0.31415927E1, ~0.1E~44): 0.3E~44 0.3E~44 +(0.1E~44, 0.31415927E1, ~0.0): 0.4E~44 0.4E~44 +(0.1E~44, 0.27182817E1, 0.11754944E~37): 0.11754948E~37 0.11754948E~37 +(0.1E~44, 0.27182817E1, 0.5877472E~38): 0.5877476E~38 0.5877476E~38 +(0.1E~44, 0.27182817E1, 0.1E~44): 0.6E~44 0.6E~44 +(0.1E~44, 0.27182817E1, 0.0): 0.4E~44 0.4E~44 +(0.1E~44, 0.27182817E1, ~0.11754944E~37): ~0.1175494E~37 ~0.1175494E~37 +(0.1E~44, 0.27182817E1, ~0.5877472E~38): ~0.5877468E~38 ~0.5877468E~38 +(0.1E~44, 0.27182817E1, ~0.1E~44): 0.3E~44 0.3E~44 +(0.1E~44, 0.27182817E1, ~0.0): 0.4E~44 0.4E~44 +(0.1E~44, 0.123E1, 0.11754944E~37): 0.11754945E~37 0.11754945E~37 +(0.1E~44, 0.123E1, 0.5877472E~38): 0.5877473E~38 0.5877473E~38 +(0.1E~44, 0.123E1, 0.1E~44): 0.3E~44 0.3E~44 +(0.1E~44, 0.123E1, 0.0): 0.1E~44 0.1E~44 +(0.1E~44, 0.123E1, ~0.11754944E~37): ~0.11754942E~37 ~0.11754942E~37 +(0.1E~44, 0.123E1, ~0.5877472E~38): ~0.587747E~38 ~0.587747E~38 +(0.1E~44, 0.123E1, ~0.1E~44): 0.0 0.0 +(0.1E~44, 0.123E1, ~0.0): 0.1E~44 0.1E~44 +(0.1E~44, 0.123, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(0.1E~44, 0.123, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(0.1E~44, 0.123, 0.1E~44): 0.1E~44 0.1E~44 +(0.1E~44, 0.123, 0.0): 0.0 0.0 +(0.1E~44, 0.123, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(0.1E~44, 0.123, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(0.1E~44, 0.123, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(0.1E~44, 0.123, ~0.0): 0.0 0.0 +(0.1E~44, 0.123E~2, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(0.1E~44, 0.123E~2, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(0.1E~44, 0.123E~2, 0.1E~44): 0.1E~44 0.1E~44 +(0.1E~44, 0.123E~2, 0.0): 0.0 0.0 +(0.1E~44, 0.123E~2, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(0.1E~44, 0.123E~2, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(0.1E~44, 0.123E~2, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(0.1E~44, 0.123E~2, ~0.0): 0.0 0.0 +(0.1E~44, 0.11754944E~37, 0.0): 0.0 0.0 +(0.1E~44, 0.11754944E~37, ~0.0): 0.0 0.0 +(0.1E~44, 0.5877472E~38, 0.0): 0.0 0.0 +(0.1E~44, 0.5877472E~38, ~0.0): 0.0 0.0 +(0.1E~44, 0.1E~44, 0.0): 0.0 0.0 +(0.1E~44, 0.1E~44, ~0.0): 0.0 0.0 +(0.1E~44, ~0.34028235E39, 0.123E4): 0.123E4 0.123E4 +(0.1E~44, ~0.34028235E39, 0.123E2): 0.123E2 0.123E2 +(0.1E~44, ~0.34028235E39, 0.31415927E1): 0.31415923E1 0.31415923E1 +(0.1E~44, ~0.34028235E39, 0.27182817E1): 0.27182813E1 0.27182813E1 +(0.1E~44, ~0.34028235E39, 0.123E1): 0.12299995E1 0.12299995E1 +(0.1E~44, ~0.34028235E39, 0.123): 0.12299953 0.12299953 +(0.1E~44, ~0.34028235E39, 0.123E~2): 0.12295232E~2 0.12295232E~2 +(0.1E~44, ~0.34028235E39, ~0.123E4): ~0.123E4 ~0.123E4 +(0.1E~44, ~0.34028235E39, ~0.123E2): ~0.123E2 ~0.123E2 +(0.1E~44, ~0.34028235E39, ~0.31415927E1): ~0.31415932E1 ~0.31415932E1 +(0.1E~44, ~0.34028235E39, ~0.27182817E1): ~0.27182822E1 ~0.27182822E1 +(0.1E~44, ~0.34028235E39, ~0.123E1): ~0.12300005E1 ~0.12300005E1 +(0.1E~44, ~0.34028235E39, ~0.123): ~0.12300048 ~0.12300048 +(0.1E~44, ~0.34028235E39, ~0.123E~2): ~0.12304769E~2 ~0.12304769E~2 +(0.1E~44, ~0.17014117E39, 0.123E4): 0.123E4 0.123E4 +(0.1E~44, ~0.17014117E39, 0.123E2): 0.123E2 0.123E2 +(0.1E~44, ~0.17014117E39, 0.31415927E1): 0.31415925E1 0.31415925E1 +(0.1E~44, ~0.17014117E39, 0.27182817E1): 0.27182815E1 0.27182815E1 +(0.1E~44, ~0.17014117E39, 0.123E1): 0.12299998E1 0.12299998E1 +(0.1E~44, ~0.17014117E39, 0.123): 0.122999765 0.122999765 +(0.1E~44, ~0.17014117E39, 0.123E~2): 0.12297616E~2 0.12297616E~2 +(0.1E~44, ~0.17014117E39, ~0.123E4): ~0.123E4 ~0.123E4 +(0.1E~44, ~0.17014117E39, ~0.123E2): ~0.123E2 ~0.123E2 +(0.1E~44, ~0.17014117E39, ~0.31415927E1): ~0.3141593E1 ~0.3141593E1 +(0.1E~44, ~0.17014117E39, ~0.27182817E1): ~0.2718282E1 ~0.2718282E1 +(0.1E~44, ~0.17014117E39, ~0.123E1): ~0.12300003E1 ~0.12300003E1 +(0.1E~44, ~0.17014117E39, ~0.123): ~0.12300024 ~0.12300024 +(0.1E~44, ~0.17014117E39, ~0.123E~2): ~0.12302385E~2 ~0.12302385E~2 +(0.1E~44, ~0.123E2, 0.11754944E~37): 0.11754927E~37 0.11754927E~37 +(0.1E~44, ~0.123E2, 0.5877472E~38): 0.5877455E~38 0.5877455E~38 +(0.1E~44, ~0.123E2, 0.1E~44): ~0.15E~43 ~0.15E~43 +(0.1E~44, ~0.123E2, 0.0): ~0.17E~43 ~0.17E~43 +(0.1E~44, ~0.123E2, ~0.11754944E~37): ~0.1175496E~37 ~0.1175496E~37 +(0.1E~44, ~0.123E2, ~0.5877472E~38): ~0.5877489E~38 ~0.5877489E~38 +(0.1E~44, ~0.123E2, ~0.1E~44): ~0.18E~43 ~0.18E~43 +(0.1E~44, ~0.123E2, ~0.0): ~0.17E~43 ~0.17E~43 +(0.1E~44, ~0.31415927E1, 0.11754944E~37): 0.1175494E~37 0.1175494E~37 +(0.1E~44, ~0.31415927E1, 0.5877472E~38): 0.5877468E~38 0.5877468E~38 +(0.1E~44, ~0.31415927E1, 0.1E~44): ~0.3E~44 ~0.3E~44 +(0.1E~44, ~0.31415927E1, 0.0): ~0.4E~44 ~0.4E~44 +(0.1E~44, ~0.31415927E1, ~0.11754944E~37): ~0.11754948E~37 ~0.11754948E~37 +(0.1E~44, ~0.31415927E1, ~0.5877472E~38): ~0.5877476E~38 ~0.5877476E~38 +(0.1E~44, ~0.31415927E1, ~0.1E~44): ~0.6E~44 ~0.6E~44 +(0.1E~44, ~0.31415927E1, ~0.0): ~0.4E~44 ~0.4E~44 +(0.1E~44, ~0.27182817E1, 0.11754944E~37): 0.1175494E~37 0.1175494E~37 +(0.1E~44, ~0.27182817E1, 0.5877472E~38): 0.5877468E~38 0.5877468E~38 +(0.1E~44, ~0.27182817E1, 0.1E~44): ~0.3E~44 ~0.3E~44 +(0.1E~44, ~0.27182817E1, 0.0): ~0.4E~44 ~0.4E~44 +(0.1E~44, ~0.27182817E1, ~0.11754944E~37): ~0.11754948E~37 ~0.11754948E~37 +(0.1E~44, ~0.27182817E1, ~0.5877472E~38): ~0.5877476E~38 ~0.5877476E~38 +(0.1E~44, ~0.27182817E1, ~0.1E~44): ~0.6E~44 ~0.6E~44 +(0.1E~44, ~0.27182817E1, ~0.0): ~0.4E~44 ~0.4E~44 +(0.1E~44, ~0.123E1, 0.11754944E~37): 0.11754942E~37 0.11754942E~37 +(0.1E~44, ~0.123E1, 0.5877472E~38): 0.587747E~38 0.587747E~38 +(0.1E~44, ~0.123E1, 0.1E~44): ~0.0 ~0.0 +(0.1E~44, ~0.123E1, 0.0): ~0.1E~44 ~0.1E~44 +(0.1E~44, ~0.123E1, ~0.11754944E~37): ~0.11754945E~37 ~0.11754945E~37 +(0.1E~44, ~0.123E1, ~0.5877472E~38): ~0.5877473E~38 ~0.5877473E~38 +(0.1E~44, ~0.123E1, ~0.1E~44): ~0.3E~44 ~0.3E~44 +(0.1E~44, ~0.123E1, ~0.0): ~0.1E~44 ~0.1E~44 +(0.1E~44, ~0.123, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(0.1E~44, ~0.123, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(0.1E~44, ~0.123, 0.1E~44): 0.1E~44 0.1E~44 +(0.1E~44, ~0.123, 0.0): ~0.0 ~0.0 +(0.1E~44, ~0.123, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(0.1E~44, ~0.123, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(0.1E~44, ~0.123, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(0.1E~44, ~0.123, ~0.0): ~0.0 ~0.0 +(0.1E~44, ~0.123E~2, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(0.1E~44, ~0.123E~2, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(0.1E~44, ~0.123E~2, 0.1E~44): 0.1E~44 0.1E~44 +(0.1E~44, ~0.123E~2, 0.0): ~0.0 ~0.0 +(0.1E~44, ~0.123E~2, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(0.1E~44, ~0.123E~2, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(0.1E~44, ~0.123E~2, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(0.1E~44, ~0.123E~2, ~0.0): ~0.0 ~0.0 +(0.1E~44, ~0.11754944E~37, 0.0): ~0.0 ~0.0 +(0.1E~44, ~0.11754944E~37, ~0.0): ~0.0 ~0.0 +(0.1E~44, ~0.5877472E~38, 0.0): ~0.0 ~0.0 +(0.1E~44, ~0.5877472E~38, ~0.0): ~0.0 ~0.0 +(0.1E~44, ~0.1E~44, 0.0): ~0.0 ~0.0 +(0.1E~44, ~0.1E~44, ~0.0): ~0.0 ~0.0 +(~0.34028235E39, 0.34028235E39, 0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.123E4): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.123E2): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.123E1): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.123): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.123E~2): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.1E~44): ~inf ~inf +(~0.34028235E39, 0.34028235E39, 0.0): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.123E4): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.123E2): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.123E1): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.123): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.123E~2): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.1E~44): ~inf ~inf +(~0.34028235E39, 0.34028235E39, ~0.0): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.123E4): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.123E2): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.123E1): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.123): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.123E~2): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.1E~44): ~inf ~inf +(~0.34028235E39, 0.17014117E39, 0.0): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.123E4): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.123E2): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.123E1): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.123): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.123E~2): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.1E~44): ~inf ~inf +(~0.34028235E39, 0.17014117E39, ~0.0): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.123E4): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.123E2): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.123E1): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.123): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.123E~2): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.1E~44): ~inf ~inf +(~0.34028235E39, 0.123E4, 0.0): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.123E4): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.123E2): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.123E1): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.123): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.123E~2): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.1E~44): ~inf ~inf +(~0.34028235E39, 0.123E4, ~0.0): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.123E4): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.123E2): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.123E1): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.123): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.123E~2): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.1E~44): ~inf ~inf +(~0.34028235E39, 0.123E2, 0.0): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.123E4): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.123E2): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.123E1): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.123): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.123E~2): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.1E~44): ~inf ~inf +(~0.34028235E39, 0.123E2, ~0.0): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.123E4): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.123E2): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.123E1): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.123): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.123E~2): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.1E~44): ~inf ~inf +(~0.34028235E39, 0.31415927E1, 0.0): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.123E4): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.123E2): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.123E1): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.123): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.123E~2): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.1E~44): ~inf ~inf +(~0.34028235E39, 0.31415927E1, ~0.0): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.123E4): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.123E2): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.123E1): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.123): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.123E~2): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.1E~44): ~inf ~inf +(~0.34028235E39, 0.27182817E1, 0.0): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.123E4): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.123E2): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.123E1): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.123): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.123E~2): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.1E~44): ~inf ~inf +(~0.34028235E39, 0.27182817E1, ~0.0): ~inf ~inf +(~0.34028235E39, 0.123E1, 0.34028235E39): ~0.78264946E38 ~0.78264946E38 +(~0.34028235E39, 0.123E1, 0.17014117E39): ~0.24840611E39 ~0.24840611E39 +(~0.34028235E39, 0.123E1, 0.123E4): ~inf ~inf +(~0.34028235E39, 0.123E1, 0.123E2): ~inf ~inf +(~0.34028235E39, 0.123E1, 0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.123E1, 0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.123E1, 0.123E1): ~inf ~inf +(~0.34028235E39, 0.123E1, 0.123): ~inf ~inf +(~0.34028235E39, 0.123E1, 0.123E~2): ~inf ~inf +(~0.34028235E39, 0.123E1, 0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.123E1, 0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.123E1, 0.1E~44): ~inf ~inf +(~0.34028235E39, 0.123E1, 0.0): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.17014117E39): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.123E4): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.123E2): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.31415927E1): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.27182817E1): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.123E1): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.123): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.123E~2): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.11754944E~37): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.5877472E~38): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.1E~44): ~inf ~inf +(~0.34028235E39, 0.123E1, ~0.0): ~inf ~inf +(~0.34028235E39, 0.123, 0.34028235E39): 0.2984276E39 0.2984276E39 +(~0.34028235E39, 0.123, 0.17014117E39): 0.12828644E39 0.12828644E39 +(~0.34028235E39, 0.123, 0.123E4): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, 0.123E2): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, 0.31415927E1): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, 0.27182817E1): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, 0.123E1): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, 0.123): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, 0.123E~2): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, 0.11754944E~37): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, 0.5877472E~38): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, 0.1E~44): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, 0.0): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, ~0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.123, ~0.17014117E39): ~0.2119959E39 ~0.2119959E39 +(~0.34028235E39, 0.123, ~0.123E4): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, ~0.123E2): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, ~0.31415927E1): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, ~0.27182817E1): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, ~0.123E1): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, ~0.123): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, ~0.123E~2): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, ~0.11754944E~37): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, ~0.5877472E~38): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, ~0.1E~44): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123, ~0.0): ~0.4185473E38 ~0.4185473E38 +(~0.34028235E39, 0.123E~2, 0.34028235E39): 0.3398638E39 0.3398638E39 +(~0.34028235E39, 0.123E~2, 0.17014117E39): 0.16972263E39 0.16972263E39 +(~0.34028235E39, 0.123E~2, 0.123E4): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, 0.123E2): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, 0.31415927E1): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, 0.27182817E1): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, 0.123E1): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, 0.123): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, 0.123E~2): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, 0.11754944E~37): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, 0.5877472E~38): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, 0.1E~44): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, 0.0): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, ~0.34028235E39): ~inf ~inf +(~0.34028235E39, 0.123E~2, ~0.17014117E39): ~0.17055971E39 ~0.17055971E39 +(~0.34028235E39, 0.123E~2, ~0.123E4): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, ~0.123E2): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, ~0.31415927E1): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, ~0.27182817E1): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, ~0.123E1): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, ~0.123): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, ~0.123E~2): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, ~0.11754944E~37): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, ~0.5877472E~38): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, ~0.1E~44): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.123E~2, ~0.0): ~0.4185473E36 ~0.4185473E36 +(~0.34028235E39, 0.11754944E~37, 0.123E4): 0.1226E4 0.1226E4 +(~0.34028235E39, 0.11754944E~37, 0.123E2): 0.83E1 0.83E1 +(~0.34028235E39, 0.11754944E~37, 0.123): ~0.38769999E1 ~0.38769999E1 +(~0.34028235E39, 0.11754944E~37, 0.123E~2): ~0.39987698E1 ~0.39987698E1 +(~0.34028235E39, 0.11754944E~37, ~0.123E4): ~0.1234E4 ~0.1234E4 +(~0.34028235E39, 0.11754944E~37, ~0.123E2): ~0.163E2 ~0.163E2 +(~0.34028235E39, 0.11754944E~37, ~0.27182817E1): ~0.67182817E1 ~0.67182817E1 +(~0.34028235E39, 0.11754944E~37, ~0.123E1): ~0.52299995E1 ~0.52299995E1 +(~0.34028235E39, 0.11754944E~37, ~0.123): ~0.41229997E1 ~0.41229997E1 +(~0.34028235E39, 0.11754944E~37, ~0.123E~2): ~0.400123E1 ~0.400123E1 +(~0.34028235E39, 0.5877472E~38, 0.123E4): 0.1228E4 0.1228E4 +(~0.34028235E39, 0.5877472E~38, 0.123E2): 0.103E2 0.103E2 +(~0.34028235E39, 0.5877472E~38, 0.123): ~0.18769999E1 ~0.18769999E1 +(~0.34028235E39, 0.5877472E~38, 0.123E~2): ~0.19987699E1 ~0.19987699E1 +(~0.34028235E39, 0.5877472E~38, ~0.123E4): ~0.1232E4 ~0.1232E4 +(~0.34028235E39, 0.5877472E~38, ~0.123E2): ~0.143E2 ~0.143E2 +(~0.34028235E39, 0.5877472E~38, ~0.31415927E1): ~0.51415925E1 ~0.51415925E1 +(~0.34028235E39, 0.5877472E~38, ~0.27182817E1): ~0.47182817E1 ~0.47182817E1 +(~0.34028235E39, 0.5877472E~38, ~0.123E1): ~0.323E1 ~0.323E1 +(~0.34028235E39, 0.5877472E~38, ~0.123): ~0.2123E1 ~0.2123E1 +(~0.34028235E39, 0.5877472E~38, ~0.123E~2): ~0.20012298E1 ~0.20012298E1 +(~0.34028235E39, 0.1E~44, 0.123E4): 0.123E4 0.123E4 +(~0.34028235E39, 0.1E~44, 0.123E2): 0.123E2 0.123E2 +(~0.34028235E39, 0.1E~44, 0.31415927E1): 0.31415923E1 0.31415923E1 +(~0.34028235E39, 0.1E~44, 0.27182817E1): 0.27182813E1 0.27182813E1 +(~0.34028235E39, 0.1E~44, 0.123E1): 0.12299995E1 0.12299995E1 +(~0.34028235E39, 0.1E~44, 0.123): 0.12299953 0.12299953 +(~0.34028235E39, 0.1E~44, 0.123E~2): 0.12295232E~2 0.12295232E~2 +(~0.34028235E39, 0.1E~44, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.34028235E39, 0.1E~44, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.34028235E39, 0.1E~44, ~0.31415927E1): ~0.31415932E1 ~0.31415932E1 +(~0.34028235E39, 0.1E~44, ~0.27182817E1): ~0.27182822E1 ~0.27182822E1 +(~0.34028235E39, 0.1E~44, ~0.123E1): ~0.12300005E1 ~0.12300005E1 +(~0.34028235E39, 0.1E~44, ~0.123): ~0.12300048 ~0.12300048 +(~0.34028235E39, 0.1E~44, ~0.123E~2): ~0.12304769E~2 ~0.12304769E~2 +(~0.34028235E39, ~0.34028235E39, 0.34028235E39): inf inf +(~0.34028235E39, ~0.34028235E39, 0.17014117E39): inf inf +(~0.34028235E39, ~0.34028235E39, 0.123E4): inf inf +(~0.34028235E39, ~0.34028235E39, 0.123E2): inf inf +(~0.34028235E39, ~0.34028235E39, 0.31415927E1): inf inf +(~0.34028235E39, ~0.34028235E39, 0.27182817E1): inf inf +(~0.34028235E39, ~0.34028235E39, 0.123E1): inf inf +(~0.34028235E39, ~0.34028235E39, 0.123): inf inf +(~0.34028235E39, ~0.34028235E39, 0.123E~2): inf inf +(~0.34028235E39, ~0.34028235E39, 0.11754944E~37): inf inf +(~0.34028235E39, ~0.34028235E39, 0.5877472E~38): inf inf +(~0.34028235E39, ~0.34028235E39, 0.1E~44): inf inf +(~0.34028235E39, ~0.34028235E39, 0.0): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.34028235E39): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.17014117E39): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.123E4): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.123E2): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.31415927E1): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.27182817E1): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.123E1): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.123): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.123E~2): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.11754944E~37): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.5877472E~38): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.1E~44): inf inf +(~0.34028235E39, ~0.34028235E39, ~0.0): inf inf +(~0.34028235E39, ~0.17014117E39, 0.34028235E39): inf inf +(~0.34028235E39, ~0.17014117E39, 0.17014117E39): inf inf +(~0.34028235E39, ~0.17014117E39, 0.123E4): inf inf +(~0.34028235E39, ~0.17014117E39, 0.123E2): inf inf +(~0.34028235E39, ~0.17014117E39, 0.31415927E1): inf inf +(~0.34028235E39, ~0.17014117E39, 0.27182817E1): inf inf +(~0.34028235E39, ~0.17014117E39, 0.123E1): inf inf +(~0.34028235E39, ~0.17014117E39, 0.123): inf inf +(~0.34028235E39, ~0.17014117E39, 0.123E~2): inf inf +(~0.34028235E39, ~0.17014117E39, 0.11754944E~37): inf inf +(~0.34028235E39, ~0.17014117E39, 0.5877472E~38): inf inf +(~0.34028235E39, ~0.17014117E39, 0.1E~44): inf inf +(~0.34028235E39, ~0.17014117E39, 0.0): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.34028235E39): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.17014117E39): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.123E4): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.123E2): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.31415927E1): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.27182817E1): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.123E1): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.123): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.123E~2): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.11754944E~37): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.5877472E~38): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.1E~44): inf inf +(~0.34028235E39, ~0.17014117E39, ~0.0): inf inf +(~0.34028235E39, ~0.123E4, 0.34028235E39): inf inf +(~0.34028235E39, ~0.123E4, 0.17014117E39): inf inf +(~0.34028235E39, ~0.123E4, 0.123E4): inf inf +(~0.34028235E39, ~0.123E4, 0.123E2): inf inf +(~0.34028235E39, ~0.123E4, 0.31415927E1): inf inf +(~0.34028235E39, ~0.123E4, 0.27182817E1): inf inf +(~0.34028235E39, ~0.123E4, 0.123E1): inf inf +(~0.34028235E39, ~0.123E4, 0.123): inf inf +(~0.34028235E39, ~0.123E4, 0.123E~2): inf inf +(~0.34028235E39, ~0.123E4, 0.11754944E~37): inf inf +(~0.34028235E39, ~0.123E4, 0.5877472E~38): inf inf +(~0.34028235E39, ~0.123E4, 0.1E~44): inf inf +(~0.34028235E39, ~0.123E4, 0.0): inf inf +(~0.34028235E39, ~0.123E4, ~0.34028235E39): inf inf +(~0.34028235E39, ~0.123E4, ~0.17014117E39): inf inf +(~0.34028235E39, ~0.123E4, ~0.123E4): inf inf +(~0.34028235E39, ~0.123E4, ~0.123E2): inf inf +(~0.34028235E39, ~0.123E4, ~0.31415927E1): inf inf +(~0.34028235E39, ~0.123E4, ~0.27182817E1): inf inf +(~0.34028235E39, ~0.123E4, ~0.123E1): inf inf +(~0.34028235E39, ~0.123E4, ~0.123): inf inf +(~0.34028235E39, ~0.123E4, ~0.123E~2): inf inf +(~0.34028235E39, ~0.123E4, ~0.11754944E~37): inf inf +(~0.34028235E39, ~0.123E4, ~0.5877472E~38): inf inf +(~0.34028235E39, ~0.123E4, ~0.1E~44): inf inf +(~0.34028235E39, ~0.123E4, ~0.0): inf inf +(~0.34028235E39, ~0.123E2, 0.34028235E39): inf inf +(~0.34028235E39, ~0.123E2, 0.17014117E39): inf inf +(~0.34028235E39, ~0.123E2, 0.123E4): inf inf +(~0.34028235E39, ~0.123E2, 0.123E2): inf inf +(~0.34028235E39, ~0.123E2, 0.31415927E1): inf inf +(~0.34028235E39, ~0.123E2, 0.27182817E1): inf inf +(~0.34028235E39, ~0.123E2, 0.123E1): inf inf +(~0.34028235E39, ~0.123E2, 0.123): inf inf +(~0.34028235E39, ~0.123E2, 0.123E~2): inf inf +(~0.34028235E39, ~0.123E2, 0.11754944E~37): inf inf +(~0.34028235E39, ~0.123E2, 0.5877472E~38): inf inf +(~0.34028235E39, ~0.123E2, 0.1E~44): inf inf +(~0.34028235E39, ~0.123E2, 0.0): inf inf +(~0.34028235E39, ~0.123E2, ~0.34028235E39): inf inf +(~0.34028235E39, ~0.123E2, ~0.17014117E39): inf inf +(~0.34028235E39, ~0.123E2, ~0.123E4): inf inf +(~0.34028235E39, ~0.123E2, ~0.123E2): inf inf +(~0.34028235E39, ~0.123E2, ~0.31415927E1): inf inf +(~0.34028235E39, ~0.123E2, ~0.27182817E1): inf inf +(~0.34028235E39, ~0.123E2, ~0.123E1): inf inf +(~0.34028235E39, ~0.123E2, ~0.123): inf inf +(~0.34028235E39, ~0.123E2, ~0.123E~2): inf inf +(~0.34028235E39, ~0.123E2, ~0.11754944E~37): inf inf +(~0.34028235E39, ~0.123E2, ~0.5877472E~38): inf inf +(~0.34028235E39, ~0.123E2, ~0.1E~44): inf inf +(~0.34028235E39, ~0.123E2, ~0.0): inf inf +(~0.34028235E39, ~0.31415927E1, 0.34028235E39): inf inf +(~0.34028235E39, ~0.31415927E1, 0.17014117E39): inf inf +(~0.34028235E39, ~0.31415927E1, 0.123E4): inf inf +(~0.34028235E39, ~0.31415927E1, 0.123E2): inf inf +(~0.34028235E39, ~0.31415927E1, 0.31415927E1): inf inf +(~0.34028235E39, ~0.31415927E1, 0.27182817E1): inf inf +(~0.34028235E39, ~0.31415927E1, 0.123E1): inf inf +(~0.34028235E39, ~0.31415927E1, 0.123): inf inf +(~0.34028235E39, ~0.31415927E1, 0.123E~2): inf inf +(~0.34028235E39, ~0.31415927E1, 0.11754944E~37): inf inf +(~0.34028235E39, ~0.31415927E1, 0.5877472E~38): inf inf +(~0.34028235E39, ~0.31415927E1, 0.1E~44): inf inf +(~0.34028235E39, ~0.31415927E1, 0.0): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.34028235E39): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.17014117E39): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.123E4): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.123E2): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.31415927E1): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.27182817E1): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.123E1): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.123): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.123E~2): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.11754944E~37): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.5877472E~38): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.1E~44): inf inf +(~0.34028235E39, ~0.31415927E1, ~0.0): inf inf +(~0.34028235E39, ~0.27182817E1, 0.34028235E39): inf inf +(~0.34028235E39, ~0.27182817E1, 0.17014117E39): inf inf +(~0.34028235E39, ~0.27182817E1, 0.123E4): inf inf +(~0.34028235E39, ~0.27182817E1, 0.123E2): inf inf +(~0.34028235E39, ~0.27182817E1, 0.31415927E1): inf inf +(~0.34028235E39, ~0.27182817E1, 0.27182817E1): inf inf +(~0.34028235E39, ~0.27182817E1, 0.123E1): inf inf +(~0.34028235E39, ~0.27182817E1, 0.123): inf inf +(~0.34028235E39, ~0.27182817E1, 0.123E~2): inf inf +(~0.34028235E39, ~0.27182817E1, 0.11754944E~37): inf inf +(~0.34028235E39, ~0.27182817E1, 0.5877472E~38): inf inf +(~0.34028235E39, ~0.27182817E1, 0.1E~44): inf inf +(~0.34028235E39, ~0.27182817E1, 0.0): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.34028235E39): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.17014117E39): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.123E4): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.123E2): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.31415927E1): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.27182817E1): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.123E1): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.123): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.123E~2): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.11754944E~37): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.5877472E~38): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.1E~44): inf inf +(~0.34028235E39, ~0.27182817E1, ~0.0): inf inf +(~0.34028235E39, ~0.123E1, 0.34028235E39): inf inf +(~0.34028235E39, ~0.123E1, 0.17014117E39): inf inf +(~0.34028235E39, ~0.123E1, 0.123E4): inf inf +(~0.34028235E39, ~0.123E1, 0.123E2): inf inf +(~0.34028235E39, ~0.123E1, 0.31415927E1): inf inf +(~0.34028235E39, ~0.123E1, 0.27182817E1): inf inf +(~0.34028235E39, ~0.123E1, 0.123E1): inf inf +(~0.34028235E39, ~0.123E1, 0.123): inf inf +(~0.34028235E39, ~0.123E1, 0.123E~2): inf inf +(~0.34028235E39, ~0.123E1, 0.11754944E~37): inf inf +(~0.34028235E39, ~0.123E1, 0.5877472E~38): inf inf +(~0.34028235E39, ~0.123E1, 0.1E~44): inf inf +(~0.34028235E39, ~0.123E1, 0.0): inf inf +(~0.34028235E39, ~0.123E1, ~0.34028235E39): 0.78264946E38 0.78264946E38 +(~0.34028235E39, ~0.123E1, ~0.17014117E39): 0.24840611E39 0.24840611E39 +(~0.34028235E39, ~0.123E1, ~0.123E4): inf inf +(~0.34028235E39, ~0.123E1, ~0.123E2): inf inf +(~0.34028235E39, ~0.123E1, ~0.31415927E1): inf inf +(~0.34028235E39, ~0.123E1, ~0.27182817E1): inf inf +(~0.34028235E39, ~0.123E1, ~0.123E1): inf inf +(~0.34028235E39, ~0.123E1, ~0.123): inf inf +(~0.34028235E39, ~0.123E1, ~0.123E~2): inf inf +(~0.34028235E39, ~0.123E1, ~0.11754944E~37): inf inf +(~0.34028235E39, ~0.123E1, ~0.5877472E~38): inf inf +(~0.34028235E39, ~0.123E1, ~0.1E~44): inf inf +(~0.34028235E39, ~0.123E1, ~0.0): inf inf +(~0.34028235E39, ~0.123, 0.34028235E39): inf inf +(~0.34028235E39, ~0.123, 0.17014117E39): 0.2119959E39 0.2119959E39 +(~0.34028235E39, ~0.123, 0.123E4): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, 0.123E2): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, 0.31415927E1): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, 0.27182817E1): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, 0.123E1): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, 0.123): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, 0.123E~2): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, 0.11754944E~37): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, 0.5877472E~38): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, 0.1E~44): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, 0.0): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, ~0.34028235E39): ~0.2984276E39 ~0.2984276E39 +(~0.34028235E39, ~0.123, ~0.17014117E39): ~0.12828644E39 ~0.12828644E39 +(~0.34028235E39, ~0.123, ~0.123E4): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, ~0.123E2): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, ~0.31415927E1): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, ~0.27182817E1): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, ~0.123E1): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, ~0.123): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, ~0.123E~2): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, ~0.11754944E~37): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, ~0.5877472E~38): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, ~0.1E~44): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123, ~0.0): 0.4185473E38 0.4185473E38 +(~0.34028235E39, ~0.123E~2, 0.34028235E39): inf inf +(~0.34028235E39, ~0.123E~2, 0.17014117E39): 0.17055971E39 0.17055971E39 +(~0.34028235E39, ~0.123E~2, 0.123E4): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, 0.123E2): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, 0.31415927E1): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, 0.27182817E1): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, 0.123E1): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, 0.123): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, 0.123E~2): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, 0.11754944E~37): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, 0.5877472E~38): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, 0.1E~44): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, 0.0): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, ~0.34028235E39): ~0.3398638E39 ~0.3398638E39 +(~0.34028235E39, ~0.123E~2, ~0.17014117E39): ~0.16972263E39 ~0.16972263E39 +(~0.34028235E39, ~0.123E~2, ~0.123E4): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, ~0.123E2): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, ~0.31415927E1): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, ~0.27182817E1): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, ~0.123E1): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, ~0.123): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, ~0.123E~2): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, ~0.11754944E~37): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, ~0.5877472E~38): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, ~0.1E~44): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.123E~2, ~0.0): 0.4185473E36 0.4185473E36 +(~0.34028235E39, ~0.11754944E~37, 0.123E4): 0.1234E4 0.1234E4 +(~0.34028235E39, ~0.11754944E~37, 0.123E2): 0.163E2 0.163E2 +(~0.34028235E39, ~0.11754944E~37, 0.27182817E1): 0.67182817E1 0.67182817E1 +(~0.34028235E39, ~0.11754944E~37, 0.123E1): 0.52299995E1 0.52299995E1 +(~0.34028235E39, ~0.11754944E~37, 0.123): 0.41229997E1 0.41229997E1 +(~0.34028235E39, ~0.11754944E~37, 0.123E~2): 0.400123E1 0.400123E1 +(~0.34028235E39, ~0.11754944E~37, ~0.123E4): ~0.1226E4 ~0.1226E4 +(~0.34028235E39, ~0.11754944E~37, ~0.123E2): ~0.83E1 ~0.83E1 +(~0.34028235E39, ~0.11754944E~37, ~0.123): 0.38769999E1 0.38769999E1 +(~0.34028235E39, ~0.11754944E~37, ~0.123E~2): 0.39987698E1 0.39987698E1 +(~0.34028235E39, ~0.5877472E~38, 0.123E4): 0.1232E4 0.1232E4 +(~0.34028235E39, ~0.5877472E~38, 0.123E2): 0.143E2 0.143E2 +(~0.34028235E39, ~0.5877472E~38, 0.31415927E1): 0.51415925E1 0.51415925E1 +(~0.34028235E39, ~0.5877472E~38, 0.27182817E1): 0.47182817E1 0.47182817E1 +(~0.34028235E39, ~0.5877472E~38, 0.123E1): 0.323E1 0.323E1 +(~0.34028235E39, ~0.5877472E~38, 0.123): 0.2123E1 0.2123E1 +(~0.34028235E39, ~0.5877472E~38, 0.123E~2): 0.20012298E1 0.20012298E1 +(~0.34028235E39, ~0.5877472E~38, ~0.123E4): ~0.1228E4 ~0.1228E4 +(~0.34028235E39, ~0.5877472E~38, ~0.123E2): ~0.103E2 ~0.103E2 +(~0.34028235E39, ~0.5877472E~38, ~0.123): 0.18769999E1 0.18769999E1 +(~0.34028235E39, ~0.5877472E~38, ~0.123E~2): 0.19987699E1 0.19987699E1 +(~0.34028235E39, ~0.1E~44, 0.123E4): 0.123E4 0.123E4 +(~0.34028235E39, ~0.1E~44, 0.123E2): 0.123E2 0.123E2 +(~0.34028235E39, ~0.1E~44, 0.31415927E1): 0.31415932E1 0.31415932E1 +(~0.34028235E39, ~0.1E~44, 0.27182817E1): 0.27182822E1 0.27182822E1 +(~0.34028235E39, ~0.1E~44, 0.123E1): 0.12300005E1 0.12300005E1 +(~0.34028235E39, ~0.1E~44, 0.123): 0.12300048 0.12300048 +(~0.34028235E39, ~0.1E~44, 0.123E~2): 0.12304769E~2 0.12304769E~2 +(~0.34028235E39, ~0.1E~44, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.34028235E39, ~0.1E~44, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.34028235E39, ~0.1E~44, ~0.31415927E1): ~0.31415923E1 ~0.31415923E1 +(~0.34028235E39, ~0.1E~44, ~0.27182817E1): ~0.27182813E1 ~0.27182813E1 +(~0.34028235E39, ~0.1E~44, ~0.123E1): ~0.12299995E1 ~0.12299995E1 +(~0.34028235E39, ~0.1E~44, ~0.123): ~0.12299953 ~0.12299953 +(~0.34028235E39, ~0.1E~44, ~0.123E~2): ~0.12295232E~2 ~0.12295232E~2 +(~0.17014117E39, 0.34028235E39, 0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.123E4): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.123E2): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.123E1): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.123): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.123E~2): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.1E~44): ~inf ~inf +(~0.17014117E39, 0.34028235E39, 0.0): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.123E4): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.123E2): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.123E1): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.123): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.123E~2): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.1E~44): ~inf ~inf +(~0.17014117E39, 0.34028235E39, ~0.0): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.123E4): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.123E2): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.123E1): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.123): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.123E~2): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.1E~44): ~inf ~inf +(~0.17014117E39, 0.17014117E39, 0.0): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.123E4): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.123E2): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.123E1): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.123): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.123E~2): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.1E~44): ~inf ~inf +(~0.17014117E39, 0.17014117E39, ~0.0): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.123E4): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.123E2): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.123E1): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.123): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.123E~2): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.1E~44): ~inf ~inf +(~0.17014117E39, 0.123E4, 0.0): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.123E4): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.123E2): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.123E1): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.123): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.123E~2): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.1E~44): ~inf ~inf +(~0.17014117E39, 0.123E4, ~0.0): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.123E4): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.123E2): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.123E1): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.123): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.123E~2): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.1E~44): ~inf ~inf +(~0.17014117E39, 0.123E2, 0.0): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.123E4): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.123E2): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.123E1): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.123): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.123E~2): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.1E~44): ~inf ~inf +(~0.17014117E39, 0.123E2, ~0.0): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.34028235E39): ~0.19423192E39 ~0.19423192E39 +(~0.17014117E39, 0.31415927E1, 0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.123E4): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.123E2): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.123E1): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.123): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.123E~2): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.1E~44): ~inf ~inf +(~0.17014117E39, 0.31415927E1, 0.0): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.123E4): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.123E2): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.123E1): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.123): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.123E~2): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.1E~44): ~inf ~inf +(~0.17014117E39, 0.31415927E1, ~0.0): ~inf ~inf +(~0.17014117E39, 0.27182817E1, 0.34028235E39): ~0.1222093E39 ~0.1222093E39 +(~0.17014117E39, 0.27182817E1, 0.17014117E39): ~0.29235047E39 ~0.29235047E39 +(~0.17014117E39, 0.27182817E1, 0.123E4): ~inf ~inf +(~0.17014117E39, 0.27182817E1, 0.123E2): ~inf ~inf +(~0.17014117E39, 0.27182817E1, 0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.27182817E1, 0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.27182817E1, 0.123E1): ~inf ~inf +(~0.17014117E39, 0.27182817E1, 0.123): ~inf ~inf +(~0.17014117E39, 0.27182817E1, 0.123E~2): ~inf ~inf +(~0.17014117E39, 0.27182817E1, 0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.27182817E1, 0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.27182817E1, 0.1E~44): ~inf ~inf +(~0.17014117E39, 0.27182817E1, 0.0): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.123E4): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.123E2): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.31415927E1): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.27182817E1): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.123E1): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.123): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.123E~2): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.11754944E~37): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.5877472E~38): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.1E~44): ~inf ~inf +(~0.17014117E39, 0.27182817E1, ~0.0): ~inf ~inf +(~0.17014117E39, 0.123E1, 0.34028235E39): 0.1310087E39 0.1310087E39 +(~0.17014117E39, 0.123E1, 0.17014117E39): ~0.39132473E38 ~0.39132473E38 +(~0.17014117E39, 0.123E1, 0.123E4): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, 0.123E2): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, 0.31415927E1): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, 0.27182817E1): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, 0.123E1): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, 0.123): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, 0.123E~2): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, 0.11754944E~37): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, 0.5877472E~38): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, 0.1E~44): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, 0.0): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, ~0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.123E1, ~0.17014117E39): ~inf ~inf +(~0.17014117E39, 0.123E1, ~0.123E4): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, ~0.123E2): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, ~0.31415927E1): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, ~0.27182817E1): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, ~0.123E1): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, ~0.123): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, ~0.123E~2): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, ~0.11754944E~37): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, ~0.5877472E~38): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, ~0.1E~44): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123E1, ~0.0): ~0.20927364E39 ~0.20927364E39 +(~0.17014117E39, 0.123, 0.34028235E39): 0.31935498E39 0.31935498E39 +(~0.17014117E39, 0.123, 0.17014117E39): 0.1492138E39 0.1492138E39 +(~0.17014117E39, 0.123, 0.123E4): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, 0.123E2): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, 0.31415927E1): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, 0.27182817E1): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, 0.123E1): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, 0.123): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, 0.123E~2): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, 0.11754944E~37): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, 0.5877472E~38): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, 0.1E~44): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, 0.0): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, ~0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.123, ~0.17014117E39): ~0.19106853E39 ~0.19106853E39 +(~0.17014117E39, 0.123, ~0.123E4): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, ~0.123E2): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, ~0.31415927E1): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, ~0.27182817E1): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, ~0.123E1): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, ~0.123): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, ~0.123E~2): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, ~0.11754944E~37): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, ~0.5877472E~38): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, ~0.1E~44): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123, ~0.0): ~0.20927365E38 ~0.20927365E38 +(~0.17014117E39, 0.123E~2, 0.34028235E39): 0.34007307E39 0.34007307E39 +(~0.17014117E39, 0.123E~2, 0.17014117E39): 0.1699319E39 0.1699319E39 +(~0.17014117E39, 0.123E~2, 0.123E4): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, 0.123E2): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, 0.31415927E1): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, 0.27182817E1): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, 0.123E1): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, 0.123): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, 0.123E~2): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, 0.11754944E~37): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, 0.5877472E~38): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, 0.1E~44): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, 0.0): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, ~0.34028235E39): ~inf ~inf +(~0.17014117E39, 0.123E~2, ~0.17014117E39): ~0.17035044E39 ~0.17035044E39 +(~0.17014117E39, 0.123E~2, ~0.123E4): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, ~0.123E2): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, ~0.31415927E1): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, ~0.27182817E1): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, ~0.123E1): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, ~0.123): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, ~0.123E~2): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, ~0.11754944E~37): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, ~0.5877472E~38): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, ~0.1E~44): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.123E~2, ~0.0): ~0.20927364E36 ~0.20927364E36 +(~0.17014117E39, 0.11754944E~37, 0.123E4): 0.1228E4 0.1228E4 +(~0.17014117E39, 0.11754944E~37, 0.123E2): 0.103E2 0.103E2 +(~0.17014117E39, 0.11754944E~37, 0.123): ~0.18769999E1 ~0.18769999E1 +(~0.17014117E39, 0.11754944E~37, 0.123E~2): ~0.19987699E1 ~0.19987699E1 +(~0.17014117E39, 0.11754944E~37, ~0.123E4): ~0.1232E4 ~0.1232E4 +(~0.17014117E39, 0.11754944E~37, ~0.123E2): ~0.143E2 ~0.143E2 +(~0.17014117E39, 0.11754944E~37, ~0.31415927E1): ~0.51415925E1 ~0.51415925E1 +(~0.17014117E39, 0.11754944E~37, ~0.27182817E1): ~0.47182817E1 ~0.47182817E1 +(~0.17014117E39, 0.11754944E~37, ~0.123E1): ~0.323E1 ~0.323E1 +(~0.17014117E39, 0.11754944E~37, ~0.123): ~0.2123E1 ~0.2123E1 +(~0.17014117E39, 0.11754944E~37, ~0.123E~2): ~0.20012298E1 ~0.20012298E1 +(~0.17014117E39, 0.5877472E~38, 0.123E4): 0.1229E4 0.1229E4 +(~0.17014117E39, 0.5877472E~38, 0.123E2): 0.113E2 0.113E2 +(~0.17014117E39, 0.5877472E~38, 0.31415927E1): 0.21415927E1 0.21415927E1 +(~0.17014117E39, 0.5877472E~38, 0.27182817E1): 0.17182817E1 0.17182817E1 +(~0.17014117E39, 0.5877472E~38, 0.123): ~0.8769999 ~0.8769999 +(~0.17014117E39, 0.5877472E~38, 0.123E~2): ~0.99876994 ~0.99876994 +(~0.17014117E39, 0.5877472E~38, ~0.123E4): ~0.1231E4 ~0.1231E4 +(~0.17014117E39, 0.5877472E~38, ~0.123E2): ~0.133E2 ~0.133E2 +(~0.17014117E39, 0.5877472E~38, ~0.31415927E1): ~0.41415925E1 ~0.41415925E1 +(~0.17014117E39, 0.5877472E~38, ~0.27182817E1): ~0.37182817E1 ~0.37182817E1 +(~0.17014117E39, 0.5877472E~38, ~0.123E1): ~0.223E1 ~0.223E1 +(~0.17014117E39, 0.5877472E~38, ~0.123): ~0.11229999E1 ~0.11229999E1 +(~0.17014117E39, 0.5877472E~38, ~0.123E~2): ~0.10012299E1 ~0.10012299E1 +(~0.17014117E39, 0.1E~44, 0.123E4): 0.123E4 0.123E4 +(~0.17014117E39, 0.1E~44, 0.123E2): 0.123E2 0.123E2 +(~0.17014117E39, 0.1E~44, 0.31415927E1): 0.31415925E1 0.31415925E1 +(~0.17014117E39, 0.1E~44, 0.27182817E1): 0.27182815E1 0.27182815E1 +(~0.17014117E39, 0.1E~44, 0.123E1): 0.12299998E1 0.12299998E1 +(~0.17014117E39, 0.1E~44, 0.123): 0.122999765 0.122999765 +(~0.17014117E39, 0.1E~44, 0.123E~2): 0.12297616E~2 0.12297616E~2 +(~0.17014117E39, 0.1E~44, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.17014117E39, 0.1E~44, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.17014117E39, 0.1E~44, ~0.31415927E1): ~0.3141593E1 ~0.3141593E1 +(~0.17014117E39, 0.1E~44, ~0.27182817E1): ~0.2718282E1 ~0.2718282E1 +(~0.17014117E39, 0.1E~44, ~0.123E1): ~0.12300003E1 ~0.12300003E1 +(~0.17014117E39, 0.1E~44, ~0.123): ~0.12300024 ~0.12300024 +(~0.17014117E39, 0.1E~44, ~0.123E~2): ~0.12302385E~2 ~0.12302385E~2 +(~0.17014117E39, ~0.34028235E39, 0.34028235E39): inf inf +(~0.17014117E39, ~0.34028235E39, 0.17014117E39): inf inf +(~0.17014117E39, ~0.34028235E39, 0.123E4): inf inf +(~0.17014117E39, ~0.34028235E39, 0.123E2): inf inf +(~0.17014117E39, ~0.34028235E39, 0.31415927E1): inf inf +(~0.17014117E39, ~0.34028235E39, 0.27182817E1): inf inf +(~0.17014117E39, ~0.34028235E39, 0.123E1): inf inf +(~0.17014117E39, ~0.34028235E39, 0.123): inf inf +(~0.17014117E39, ~0.34028235E39, 0.123E~2): inf inf +(~0.17014117E39, ~0.34028235E39, 0.11754944E~37): inf inf +(~0.17014117E39, ~0.34028235E39, 0.5877472E~38): inf inf +(~0.17014117E39, ~0.34028235E39, 0.1E~44): inf inf +(~0.17014117E39, ~0.34028235E39, 0.0): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.34028235E39): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.17014117E39): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.123E4): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.123E2): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.31415927E1): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.27182817E1): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.123E1): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.123): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.123E~2): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.11754944E~37): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.5877472E~38): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.1E~44): inf inf +(~0.17014117E39, ~0.34028235E39, ~0.0): inf inf +(~0.17014117E39, ~0.17014117E39, 0.34028235E39): inf inf +(~0.17014117E39, ~0.17014117E39, 0.17014117E39): inf inf +(~0.17014117E39, ~0.17014117E39, 0.123E4): inf inf +(~0.17014117E39, ~0.17014117E39, 0.123E2): inf inf +(~0.17014117E39, ~0.17014117E39, 0.31415927E1): inf inf +(~0.17014117E39, ~0.17014117E39, 0.27182817E1): inf inf +(~0.17014117E39, ~0.17014117E39, 0.123E1): inf inf +(~0.17014117E39, ~0.17014117E39, 0.123): inf inf +(~0.17014117E39, ~0.17014117E39, 0.123E~2): inf inf +(~0.17014117E39, ~0.17014117E39, 0.11754944E~37): inf inf +(~0.17014117E39, ~0.17014117E39, 0.5877472E~38): inf inf +(~0.17014117E39, ~0.17014117E39, 0.1E~44): inf inf +(~0.17014117E39, ~0.17014117E39, 0.0): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.34028235E39): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.17014117E39): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.123E4): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.123E2): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.31415927E1): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.27182817E1): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.123E1): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.123): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.123E~2): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.11754944E~37): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.5877472E~38): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.1E~44): inf inf +(~0.17014117E39, ~0.17014117E39, ~0.0): inf inf +(~0.17014117E39, ~0.123E4, 0.34028235E39): inf inf +(~0.17014117E39, ~0.123E4, 0.17014117E39): inf inf +(~0.17014117E39, ~0.123E4, 0.123E4): inf inf +(~0.17014117E39, ~0.123E4, 0.123E2): inf inf +(~0.17014117E39, ~0.123E4, 0.31415927E1): inf inf +(~0.17014117E39, ~0.123E4, 0.27182817E1): inf inf +(~0.17014117E39, ~0.123E4, 0.123E1): inf inf +(~0.17014117E39, ~0.123E4, 0.123): inf inf +(~0.17014117E39, ~0.123E4, 0.123E~2): inf inf +(~0.17014117E39, ~0.123E4, 0.11754944E~37): inf inf +(~0.17014117E39, ~0.123E4, 0.5877472E~38): inf inf +(~0.17014117E39, ~0.123E4, 0.1E~44): inf inf +(~0.17014117E39, ~0.123E4, 0.0): inf inf +(~0.17014117E39, ~0.123E4, ~0.34028235E39): inf inf +(~0.17014117E39, ~0.123E4, ~0.17014117E39): inf inf +(~0.17014117E39, ~0.123E4, ~0.123E4): inf inf +(~0.17014117E39, ~0.123E4, ~0.123E2): inf inf +(~0.17014117E39, ~0.123E4, ~0.31415927E1): inf inf +(~0.17014117E39, ~0.123E4, ~0.27182817E1): inf inf +(~0.17014117E39, ~0.123E4, ~0.123E1): inf inf +(~0.17014117E39, ~0.123E4, ~0.123): inf inf +(~0.17014117E39, ~0.123E4, ~0.123E~2): inf inf +(~0.17014117E39, ~0.123E4, ~0.11754944E~37): inf inf +(~0.17014117E39, ~0.123E4, ~0.5877472E~38): inf inf +(~0.17014117E39, ~0.123E4, ~0.1E~44): inf inf +(~0.17014117E39, ~0.123E4, ~0.0): inf inf +(~0.17014117E39, ~0.123E2, 0.34028235E39): inf inf +(~0.17014117E39, ~0.123E2, 0.17014117E39): inf inf +(~0.17014117E39, ~0.123E2, 0.123E4): inf inf +(~0.17014117E39, ~0.123E2, 0.123E2): inf inf +(~0.17014117E39, ~0.123E2, 0.31415927E1): inf inf +(~0.17014117E39, ~0.123E2, 0.27182817E1): inf inf +(~0.17014117E39, ~0.123E2, 0.123E1): inf inf +(~0.17014117E39, ~0.123E2, 0.123): inf inf +(~0.17014117E39, ~0.123E2, 0.123E~2): inf inf +(~0.17014117E39, ~0.123E2, 0.11754944E~37): inf inf +(~0.17014117E39, ~0.123E2, 0.5877472E~38): inf inf +(~0.17014117E39, ~0.123E2, 0.1E~44): inf inf +(~0.17014117E39, ~0.123E2, 0.0): inf inf +(~0.17014117E39, ~0.123E2, ~0.34028235E39): inf inf +(~0.17014117E39, ~0.123E2, ~0.17014117E39): inf inf +(~0.17014117E39, ~0.123E2, ~0.123E4): inf inf +(~0.17014117E39, ~0.123E2, ~0.123E2): inf inf +(~0.17014117E39, ~0.123E2, ~0.31415927E1): inf inf +(~0.17014117E39, ~0.123E2, ~0.27182817E1): inf inf +(~0.17014117E39, ~0.123E2, ~0.123E1): inf inf +(~0.17014117E39, ~0.123E2, ~0.123): inf inf +(~0.17014117E39, ~0.123E2, ~0.123E~2): inf inf +(~0.17014117E39, ~0.123E2, ~0.11754944E~37): inf inf +(~0.17014117E39, ~0.123E2, ~0.5877472E~38): inf inf +(~0.17014117E39, ~0.123E2, ~0.1E~44): inf inf +(~0.17014117E39, ~0.123E2, ~0.0): inf inf +(~0.17014117E39, ~0.31415927E1, 0.34028235E39): inf inf +(~0.17014117E39, ~0.31415927E1, 0.17014117E39): inf inf +(~0.17014117E39, ~0.31415927E1, 0.123E4): inf inf +(~0.17014117E39, ~0.31415927E1, 0.123E2): inf inf +(~0.17014117E39, ~0.31415927E1, 0.31415927E1): inf inf +(~0.17014117E39, ~0.31415927E1, 0.27182817E1): inf inf +(~0.17014117E39, ~0.31415927E1, 0.123E1): inf inf +(~0.17014117E39, ~0.31415927E1, 0.123): inf inf +(~0.17014117E39, ~0.31415927E1, 0.123E~2): inf inf +(~0.17014117E39, ~0.31415927E1, 0.11754944E~37): inf inf +(~0.17014117E39, ~0.31415927E1, 0.5877472E~38): inf inf +(~0.17014117E39, ~0.31415927E1, 0.1E~44): inf inf +(~0.17014117E39, ~0.31415927E1, 0.0): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.34028235E39): 0.19423192E39 0.19423192E39 +(~0.17014117E39, ~0.31415927E1, ~0.17014117E39): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.123E4): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.123E2): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.31415927E1): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.27182817E1): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.123E1): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.123): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.123E~2): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.11754944E~37): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.5877472E~38): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.1E~44): inf inf +(~0.17014117E39, ~0.31415927E1, ~0.0): inf inf +(~0.17014117E39, ~0.27182817E1, 0.34028235E39): inf inf +(~0.17014117E39, ~0.27182817E1, 0.17014117E39): inf inf +(~0.17014117E39, ~0.27182817E1, 0.123E4): inf inf +(~0.17014117E39, ~0.27182817E1, 0.123E2): inf inf +(~0.17014117E39, ~0.27182817E1, 0.31415927E1): inf inf +(~0.17014117E39, ~0.27182817E1, 0.27182817E1): inf inf +(~0.17014117E39, ~0.27182817E1, 0.123E1): inf inf +(~0.17014117E39, ~0.27182817E1, 0.123): inf inf +(~0.17014117E39, ~0.27182817E1, 0.123E~2): inf inf +(~0.17014117E39, ~0.27182817E1, 0.11754944E~37): inf inf +(~0.17014117E39, ~0.27182817E1, 0.5877472E~38): inf inf +(~0.17014117E39, ~0.27182817E1, 0.1E~44): inf inf +(~0.17014117E39, ~0.27182817E1, 0.0): inf inf +(~0.17014117E39, ~0.27182817E1, ~0.34028235E39): 0.1222093E39 0.1222093E39 +(~0.17014117E39, ~0.27182817E1, ~0.17014117E39): 0.29235047E39 0.29235047E39 +(~0.17014117E39, ~0.27182817E1, ~0.123E4): inf inf +(~0.17014117E39, ~0.27182817E1, ~0.123E2): inf inf +(~0.17014117E39, ~0.27182817E1, ~0.31415927E1): inf inf +(~0.17014117E39, ~0.27182817E1, ~0.27182817E1): inf inf +(~0.17014117E39, ~0.27182817E1, ~0.123E1): inf inf +(~0.17014117E39, ~0.27182817E1, ~0.123): inf inf +(~0.17014117E39, ~0.27182817E1, ~0.123E~2): inf inf +(~0.17014117E39, ~0.27182817E1, ~0.11754944E~37): inf inf +(~0.17014117E39, ~0.27182817E1, ~0.5877472E~38): inf inf +(~0.17014117E39, ~0.27182817E1, ~0.1E~44): inf inf +(~0.17014117E39, ~0.27182817E1, ~0.0): inf inf +(~0.17014117E39, ~0.123E1, 0.34028235E39): inf inf +(~0.17014117E39, ~0.123E1, 0.17014117E39): inf inf +(~0.17014117E39, ~0.123E1, 0.123E4): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, 0.123E2): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, 0.31415927E1): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, 0.27182817E1): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, 0.123E1): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, 0.123): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, 0.123E~2): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, 0.11754944E~37): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, 0.5877472E~38): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, 0.1E~44): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, 0.0): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, ~0.34028235E39): ~0.1310087E39 ~0.1310087E39 +(~0.17014117E39, ~0.123E1, ~0.17014117E39): 0.39132473E38 0.39132473E38 +(~0.17014117E39, ~0.123E1, ~0.123E4): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, ~0.123E2): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, ~0.31415927E1): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, ~0.27182817E1): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, ~0.123E1): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, ~0.123): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, ~0.123E~2): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, ~0.11754944E~37): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, ~0.5877472E~38): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, ~0.1E~44): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123E1, ~0.0): 0.20927364E39 0.20927364E39 +(~0.17014117E39, ~0.123, 0.34028235E39): inf inf +(~0.17014117E39, ~0.123, 0.17014117E39): 0.19106853E39 0.19106853E39 +(~0.17014117E39, ~0.123, 0.123E4): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, 0.123E2): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, 0.31415927E1): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, 0.27182817E1): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, 0.123E1): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, 0.123): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, 0.123E~2): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, 0.11754944E~37): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, 0.5877472E~38): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, 0.1E~44): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, 0.0): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, ~0.34028235E39): ~0.31935498E39 ~0.31935498E39 +(~0.17014117E39, ~0.123, ~0.17014117E39): ~0.1492138E39 ~0.1492138E39 +(~0.17014117E39, ~0.123, ~0.123E4): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, ~0.123E2): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, ~0.31415927E1): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, ~0.27182817E1): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, ~0.123E1): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, ~0.123): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, ~0.123E~2): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, ~0.11754944E~37): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, ~0.5877472E~38): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, ~0.1E~44): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123, ~0.0): 0.20927365E38 0.20927365E38 +(~0.17014117E39, ~0.123E~2, 0.34028235E39): inf inf +(~0.17014117E39, ~0.123E~2, 0.17014117E39): 0.17035044E39 0.17035044E39 +(~0.17014117E39, ~0.123E~2, 0.123E4): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, 0.123E2): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, 0.31415927E1): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, 0.27182817E1): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, 0.123E1): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, 0.123): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, 0.123E~2): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, 0.11754944E~37): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, 0.5877472E~38): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, 0.1E~44): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, 0.0): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, ~0.34028235E39): ~0.34007307E39 ~0.34007307E39 +(~0.17014117E39, ~0.123E~2, ~0.17014117E39): ~0.1699319E39 ~0.1699319E39 +(~0.17014117E39, ~0.123E~2, ~0.123E4): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, ~0.123E2): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, ~0.31415927E1): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, ~0.27182817E1): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, ~0.123E1): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, ~0.123): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, ~0.123E~2): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, ~0.11754944E~37): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, ~0.5877472E~38): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, ~0.1E~44): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.123E~2, ~0.0): 0.20927364E36 0.20927364E36 +(~0.17014117E39, ~0.11754944E~37, 0.123E4): 0.1232E4 0.1232E4 +(~0.17014117E39, ~0.11754944E~37, 0.123E2): 0.143E2 0.143E2 +(~0.17014117E39, ~0.11754944E~37, 0.31415927E1): 0.51415925E1 0.51415925E1 +(~0.17014117E39, ~0.11754944E~37, 0.27182817E1): 0.47182817E1 0.47182817E1 +(~0.17014117E39, ~0.11754944E~37, 0.123E1): 0.323E1 0.323E1 +(~0.17014117E39, ~0.11754944E~37, 0.123): 0.2123E1 0.2123E1 +(~0.17014117E39, ~0.11754944E~37, 0.123E~2): 0.20012298E1 0.20012298E1 +(~0.17014117E39, ~0.11754944E~37, ~0.123E4): ~0.1228E4 ~0.1228E4 +(~0.17014117E39, ~0.11754944E~37, ~0.123E2): ~0.103E2 ~0.103E2 +(~0.17014117E39, ~0.11754944E~37, ~0.123): 0.18769999E1 0.18769999E1 +(~0.17014117E39, ~0.11754944E~37, ~0.123E~2): 0.19987699E1 0.19987699E1 +(~0.17014117E39, ~0.5877472E~38, 0.123E4): 0.1231E4 0.1231E4 +(~0.17014117E39, ~0.5877472E~38, 0.123E2): 0.133E2 0.133E2 +(~0.17014117E39, ~0.5877472E~38, 0.31415927E1): 0.41415925E1 0.41415925E1 +(~0.17014117E39, ~0.5877472E~38, 0.27182817E1): 0.37182817E1 0.37182817E1 +(~0.17014117E39, ~0.5877472E~38, 0.123E1): 0.223E1 0.223E1 +(~0.17014117E39, ~0.5877472E~38, 0.123): 0.11229999E1 0.11229999E1 +(~0.17014117E39, ~0.5877472E~38, 0.123E~2): 0.10012299E1 0.10012299E1 +(~0.17014117E39, ~0.5877472E~38, ~0.123E4): ~0.1229E4 ~0.1229E4 +(~0.17014117E39, ~0.5877472E~38, ~0.123E2): ~0.113E2 ~0.113E2 +(~0.17014117E39, ~0.5877472E~38, ~0.31415927E1): ~0.21415927E1 ~0.21415927E1 +(~0.17014117E39, ~0.5877472E~38, ~0.27182817E1): ~0.17182817E1 ~0.17182817E1 +(~0.17014117E39, ~0.5877472E~38, ~0.123): 0.8769999 0.8769999 +(~0.17014117E39, ~0.5877472E~38, ~0.123E~2): 0.99876994 0.99876994 +(~0.17014117E39, ~0.1E~44, 0.123E4): 0.123E4 0.123E4 +(~0.17014117E39, ~0.1E~44, 0.123E2): 0.123E2 0.123E2 +(~0.17014117E39, ~0.1E~44, 0.31415927E1): 0.3141593E1 0.3141593E1 +(~0.17014117E39, ~0.1E~44, 0.27182817E1): 0.2718282E1 0.2718282E1 +(~0.17014117E39, ~0.1E~44, 0.123E1): 0.12300003E1 0.12300003E1 +(~0.17014117E39, ~0.1E~44, 0.123): 0.12300024 0.12300024 +(~0.17014117E39, ~0.1E~44, 0.123E~2): 0.12302385E~2 0.12302385E~2 +(~0.17014117E39, ~0.1E~44, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.17014117E39, ~0.1E~44, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.17014117E39, ~0.1E~44, ~0.31415927E1): ~0.31415925E1 ~0.31415925E1 +(~0.17014117E39, ~0.1E~44, ~0.27182817E1): ~0.27182815E1 ~0.27182815E1 +(~0.17014117E39, ~0.1E~44, ~0.123E1): ~0.12299998E1 ~0.12299998E1 +(~0.17014117E39, ~0.1E~44, ~0.123): ~0.122999765 ~0.122999765 +(~0.17014117E39, ~0.1E~44, ~0.123E~2): ~0.12297616E~2 ~0.12297616E~2 +(~0.123E4, 0.34028235E39, 0.34028235E39): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.17014117E39): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.123E4): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.123E2): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.31415927E1): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.27182817E1): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.123E1): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.123): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.123E~2): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.11754944E~37): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.5877472E~38): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.1E~44): ~inf ~inf +(~0.123E4, 0.34028235E39, 0.0): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.34028235E39): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.17014117E39): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.123E4): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.123E2): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.31415927E1): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.27182817E1): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.123E1): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.123): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.123E~2): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.11754944E~37): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.5877472E~38): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.1E~44): ~inf ~inf +(~0.123E4, 0.34028235E39, ~0.0): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.34028235E39): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.17014117E39): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.123E4): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.123E2): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.31415927E1): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.27182817E1): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.123E1): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.123): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.123E~2): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.11754944E~37): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.5877472E~38): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.1E~44): ~inf ~inf +(~0.123E4, 0.17014117E39, 0.0): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.34028235E39): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.17014117E39): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.123E4): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.123E2): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.31415927E1): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.27182817E1): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.123E1): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.123): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.123E~2): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.11754944E~37): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.5877472E~38): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.1E~44): ~inf ~inf +(~0.123E4, 0.17014117E39, ~0.0): ~inf ~inf +(~0.123E4, 0.123E4, 0.123E2): ~0.15128878E7 ~0.15128878E7 +(~0.123E4, 0.123E4, 0.31415927E1): ~0.15128969E7 ~0.15128969E7 +(~0.123E4, 0.123E4, 0.27182817E1): ~0.15128972E7 ~0.15128972E7 +(~0.123E4, 0.123E4, 0.123E1): ~0.15128988E7 ~0.15128988E7 +(~0.123E4, 0.123E4, 0.123): ~0.15128999E7 ~0.15128999E7 +(~0.123E4, 0.123E4, 0.123E~2): ~0.15129E7 ~0.15129E7 +(~0.123E4, 0.123E4, ~0.123E2): ~0.15129122E7 ~0.15129122E7 +(~0.123E4, 0.123E4, ~0.31415927E1): ~0.15129031E7 ~0.15129031E7 +(~0.123E4, 0.123E4, ~0.27182817E1): ~0.15129028E7 ~0.15129028E7 +(~0.123E4, 0.123E4, ~0.123E1): ~0.15129012E7 ~0.15129012E7 +(~0.123E4, 0.123E4, ~0.123): ~0.15129001E7 ~0.15129001E7 +(~0.123E4, 0.123E4, ~0.123E~2): ~0.15129E7 ~0.15129E7 +(~0.123E4, 0.123E2, 0.123E4): ~0.13899E5 ~0.13899E5 +(~0.123E4, 0.123E2, 0.123E2): ~0.151167E5 ~0.151167E5 +(~0.123E4, 0.123E2, 0.31415927E1): ~0.15125858E5 ~0.15125858E5 +(~0.123E4, 0.123E2, 0.27182817E1): ~0.15126282E5 ~0.15126282E5 +(~0.123E4, 0.123E2, 0.123E1): ~0.151277705E5 ~0.151277705E5 +(~0.123E4, 0.123E2, 0.123): ~0.15128877E5 ~0.15128877E5 +(~0.123E4, 0.123E2, 0.123E~2): ~0.15128999E5 ~0.15128999E5 +(~0.123E4, 0.123E2, 0.11754944E~37): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, 0.5877472E~38): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, 0.1E~44): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, 0.0): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, ~0.123E4): ~0.16359E5 ~0.16359E5 +(~0.123E4, 0.123E2, ~0.123E2): ~0.151413E5 ~0.151413E5 +(~0.123E4, 0.123E2, ~0.31415927E1): ~0.15132142E5 ~0.15132142E5 +(~0.123E4, 0.123E2, ~0.27182817E1): ~0.15131719E5 ~0.15131719E5 +(~0.123E4, 0.123E2, ~0.123E1): ~0.1513023E5 ~0.1513023E5 +(~0.123E4, 0.123E2, ~0.123): ~0.15129123E5 ~0.15129123E5 +(~0.123E4, 0.123E2, ~0.123E~2): ~0.15129001E5 ~0.15129001E5 +(~0.123E4, 0.123E2, ~0.11754944E~37): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, ~0.5877472E~38): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, ~0.1E~44): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, ~0.0): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.31415927E1, 0.123E4): ~0.26341592E4 ~0.26341592E4 +(~0.123E4, 0.31415927E1, 0.123E2): ~0.38518591E4 ~0.38518591E4 +(~0.123E4, 0.31415927E1, 0.31415927E1): ~0.38610176E4 ~0.38610176E4 +(~0.123E4, 0.31415927E1, 0.27182817E1): ~0.38614407E4 ~0.38614407E4 +(~0.123E4, 0.31415927E1, 0.123E1): ~0.3862929E4 ~0.3862929E4 +(~0.123E4, 0.31415927E1, 0.123): ~0.38640361E4 ~0.38640361E4 +(~0.123E4, 0.31415927E1, 0.123E~2): ~0.3864158E4 ~0.3864158E4 +(~0.123E4, 0.31415927E1, 0.11754944E~37): ~0.38641592E4 ~0.38641592E4 +(~0.123E4, 0.31415927E1, 0.5877472E~38): ~0.38641592E4 ~0.38641592E4 +(~0.123E4, 0.31415927E1, 0.1E~44): ~0.38641592E4 ~0.38641592E4 +(~0.123E4, 0.31415927E1, 0.0): ~0.38641592E4 ~0.38641592E4 +(~0.123E4, 0.31415927E1, ~0.123E4): ~0.5094159E4 ~0.5094159E4 +(~0.123E4, 0.31415927E1, ~0.123E2): ~0.3876459E4 ~0.3876459E4 +(~0.123E4, 0.31415927E1, ~0.31415927E1): ~0.38673008E4 ~0.38673008E4 +(~0.123E4, 0.31415927E1, ~0.27182817E1): ~0.38668774E4 ~0.38668774E4 +(~0.123E4, 0.31415927E1, ~0.123E1): ~0.38653892E4 ~0.38653892E4 +(~0.123E4, 0.31415927E1, ~0.123): ~0.3864282E4 ~0.3864282E4 +(~0.123E4, 0.31415927E1, ~0.123E~2): ~0.38641604E4 ~0.38641604E4 +(~0.123E4, 0.31415927E1, ~0.11754944E~37): ~0.38641592E4 ~0.38641592E4 +(~0.123E4, 0.31415927E1, ~0.5877472E~38): ~0.38641592E4 ~0.38641592E4 +(~0.123E4, 0.31415927E1, ~0.1E~44): ~0.38641592E4 ~0.38641592E4 +(~0.123E4, 0.31415927E1, ~0.0): ~0.38641592E4 ~0.38641592E4 +(~0.123E4, 0.27182817E1, 0.123E4): ~0.21134866E4 ~0.21134866E4 +(~0.123E4, 0.27182817E1, 0.123E2): ~0.33311865E4 ~0.33311865E4 +(~0.123E4, 0.27182817E1, 0.31415927E1): ~0.3340345E4 ~0.3340345E4 +(~0.123E4, 0.27182817E1, 0.27182817E1): ~0.33407683E4 ~0.33407683E4 +(~0.123E4, 0.27182817E1, 0.123E1): ~0.33422566E4 ~0.33422566E4 +(~0.123E4, 0.27182817E1, 0.123): ~0.33433635E4 ~0.33433635E4 +(~0.123E4, 0.27182817E1, 0.123E~2): ~0.33434854E4 ~0.33434854E4 +(~0.123E4, 0.27182817E1, 0.11754944E~37): ~0.33434866E4 ~0.33434866E4 +(~0.123E4, 0.27182817E1, 0.5877472E~38): ~0.33434866E4 ~0.33434866E4 +(~0.123E4, 0.27182817E1, 0.1E~44): ~0.33434866E4 ~0.33434866E4 +(~0.123E4, 0.27182817E1, 0.0): ~0.33434866E4 ~0.33434866E4 +(~0.123E4, 0.27182817E1, ~0.123E4): ~0.45734863E4 ~0.45734863E4 +(~0.123E4, 0.27182817E1, ~0.123E2): ~0.33557866E4 ~0.33557866E4 +(~0.123E4, 0.27182817E1, ~0.31415927E1): ~0.33466282E4 ~0.33466282E4 +(~0.123E4, 0.27182817E1, ~0.27182817E1): ~0.33462048E4 ~0.33462048E4 +(~0.123E4, 0.27182817E1, ~0.123E1): ~0.33447166E4 ~0.33447166E4 +(~0.123E4, 0.27182817E1, ~0.123): ~0.33436096E4 ~0.33436096E4 +(~0.123E4, 0.27182817E1, ~0.123E~2): ~0.33434878E4 ~0.33434878E4 +(~0.123E4, 0.27182817E1, ~0.11754944E~37): ~0.33434866E4 ~0.33434866E4 +(~0.123E4, 0.27182817E1, ~0.5877472E~38): ~0.33434866E4 ~0.33434866E4 +(~0.123E4, 0.27182817E1, ~0.1E~44): ~0.33434866E4 ~0.33434866E4 +(~0.123E4, 0.27182817E1, ~0.0): ~0.33434866E4 ~0.33434866E4 +(~0.123E4, 0.123E1, 0.123E4): ~0.28290002E3 ~0.28290002E3 +(~0.123E4, 0.123E1, 0.123E2): ~0.15006E4 ~0.15006E4 +(~0.123E4, 0.123E1, 0.31415927E1): ~0.15097584E4 ~0.15097584E4 +(~0.123E4, 0.123E1, 0.27182817E1): ~0.15101818E4 ~0.15101818E4 +(~0.123E4, 0.123E1, 0.123E1): ~0.151167E4 ~0.151167E4 +(~0.123E4, 0.123E1, 0.123): ~0.1512777E4 ~0.1512777E4 +(~0.123E4, 0.123E1, 0.123E~2): ~0.15128988E4 ~0.15128988E4 +(~0.123E4, 0.123E1, 0.11754944E~37): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, 0.5877472E~38): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, 0.1E~44): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, 0.0): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, ~0.123E4): ~0.27429E4 ~0.27429E4 +(~0.123E4, 0.123E1, ~0.123E2): ~0.15252001E4 ~0.15252001E4 +(~0.123E4, 0.123E1, ~0.31415927E1): ~0.15160416E4 ~0.15160416E4 +(~0.123E4, 0.123E1, ~0.27182817E1): ~0.15156183E4 ~0.15156183E4 +(~0.123E4, 0.123E1, ~0.123E1): ~0.151413E4 ~0.151413E4 +(~0.123E4, 0.123E1, ~0.123): ~0.15130231E4 ~0.15130231E4 +(~0.123E4, 0.123E1, ~0.123E~2): ~0.15129012E4 ~0.15129012E4 +(~0.123E4, 0.123E1, ~0.11754944E~37): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, ~0.5877472E~38): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, ~0.1E~44): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, ~0.0): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123, 0.123E4): 0.107871E4 0.107871E4 +(~0.123E4, 0.123, 0.123E2): ~0.13899E3 ~0.13899E3 +(~0.123E4, 0.123, 0.31415927E1): ~0.1481484E3 ~0.1481484E3 +(~0.123E4, 0.123, 0.27182817E1): ~0.14857172E3 ~0.14857172E3 +(~0.123E4, 0.123, 0.123E1): ~0.15006E3 ~0.15006E3 +(~0.123E4, 0.123, 0.123): ~0.151167E3 ~0.151167E3 +(~0.123E4, 0.123, 0.123E~2): ~0.15128877E3 ~0.15128877E3 +(~0.123E4, 0.123, 0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(~0.123E4, 0.123, 0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(~0.123E4, 0.123, 0.1E~44): ~0.15129001E3 ~0.15129001E3 +(~0.123E4, 0.123, 0.0): ~0.15129001E3 ~0.15129001E3 +(~0.123E4, 0.123, ~0.123E4): ~0.138129E4 ~0.138129E4 +(~0.123E4, 0.123, ~0.123E2): ~0.16359001E3 ~0.16359001E3 +(~0.123E4, 0.123, ~0.31415927E1): ~0.1544316E3 ~0.1544316E3 +(~0.123E4, 0.123, ~0.27182817E1): ~0.15400829E3 ~0.15400829E3 +(~0.123E4, 0.123, ~0.123E1): ~0.15252E3 ~0.15252E3 +(~0.123E4, 0.123, ~0.123): ~0.15141301E3 ~0.15141301E3 +(~0.123E4, 0.123, ~0.123E~2): ~0.15129123E3 ~0.15129123E3 +(~0.123E4, 0.123, ~0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(~0.123E4, 0.123, ~0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(~0.123E4, 0.123, ~0.1E~44): ~0.15129001E3 ~0.15129001E3 +(~0.123E4, 0.123, ~0.0): ~0.15129001E3 ~0.15129001E3 +(~0.123E4, 0.123E~2, 0.123E4): 0.1228487E4 0.1228487E4 +(~0.123E4, 0.123E~2, 0.123E2): 0.107871E2 0.107871E2 +(~0.123E4, 0.123E~2, 0.31415927E1): 0.16286926E1 0.16286926E1 +(~0.123E4, 0.123E~2, 0.27182817E1): 0.12053816E1 0.12053816E1 +(~0.123E4, 0.123E~2, 0.123E1): ~0.28290004 ~0.28290004 +(~0.123E4, 0.123E~2, 0.123): ~0.13899001E1 ~0.13899001E1 +(~0.123E4, 0.123E~2, 0.123E~2): ~0.15116701E1 ~0.15116701E1 +(~0.123E4, 0.123E~2, 0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(~0.123E4, 0.123E~2, 0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(~0.123E4, 0.123E~2, 0.1E~44): ~0.15129001E1 ~0.15129001E1 +(~0.123E4, 0.123E~2, 0.0): ~0.15129001E1 ~0.15129001E1 +(~0.123E4, 0.123E~2, ~0.123E4): ~0.1231513E4 ~0.1231513E4 +(~0.123E4, 0.123E~2, ~0.123E2): ~0.13812901E2 ~0.13812901E2 +(~0.123E4, 0.123E~2, ~0.31415927E1): ~0.4654493E1 ~0.4654493E1 +(~0.123E4, 0.123E~2, ~0.27182817E1): ~0.42311816E1 ~0.42311816E1 +(~0.123E4, 0.123E~2, ~0.123E1): ~0.27429001E1 ~0.27429001E1 +(~0.123E4, 0.123E~2, ~0.123): ~0.16359E1 ~0.16359E1 +(~0.123E4, 0.123E~2, ~0.123E~2): ~0.15141301E1 ~0.15141301E1 +(~0.123E4, 0.123E~2, ~0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(~0.123E4, 0.123E~2, ~0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(~0.123E4, 0.123E~2, ~0.1E~44): ~0.15129001E1 ~0.15129001E1 +(~0.123E4, 0.123E~2, ~0.0): ~0.15129001E1 ~0.15129001E1 +(~0.123E4, 0.11754944E~37, 0.1E~44): ~0.1445858E~34 ~0.1445858E~34 +(~0.123E4, 0.11754944E~37, ~0.1E~44): ~0.1445858E~34 ~0.1445858E~34 +(~0.123E4, 0.5877472E~38, 0.1E~44): ~0.722929E~35 ~0.722929E~35 +(~0.123E4, 0.5877472E~38, ~0.1E~44): ~0.722929E~35 ~0.722929E~35 +(~0.123E4, ~0.34028235E39, 0.34028235E39): inf inf +(~0.123E4, ~0.34028235E39, 0.17014117E39): inf inf +(~0.123E4, ~0.34028235E39, 0.123E4): inf inf +(~0.123E4, ~0.34028235E39, 0.123E2): inf inf +(~0.123E4, ~0.34028235E39, 0.31415927E1): inf inf +(~0.123E4, ~0.34028235E39, 0.27182817E1): inf inf +(~0.123E4, ~0.34028235E39, 0.123E1): inf inf +(~0.123E4, ~0.34028235E39, 0.123): inf inf +(~0.123E4, ~0.34028235E39, 0.123E~2): inf inf +(~0.123E4, ~0.34028235E39, 0.11754944E~37): inf inf +(~0.123E4, ~0.34028235E39, 0.5877472E~38): inf inf +(~0.123E4, ~0.34028235E39, 0.1E~44): inf inf +(~0.123E4, ~0.34028235E39, 0.0): inf inf +(~0.123E4, ~0.34028235E39, ~0.34028235E39): inf inf +(~0.123E4, ~0.34028235E39, ~0.17014117E39): inf inf +(~0.123E4, ~0.34028235E39, ~0.123E4): inf inf +(~0.123E4, ~0.34028235E39, ~0.123E2): inf inf +(~0.123E4, ~0.34028235E39, ~0.31415927E1): inf inf +(~0.123E4, ~0.34028235E39, ~0.27182817E1): inf inf +(~0.123E4, ~0.34028235E39, ~0.123E1): inf inf +(~0.123E4, ~0.34028235E39, ~0.123): inf inf +(~0.123E4, ~0.34028235E39, ~0.123E~2): inf inf +(~0.123E4, ~0.34028235E39, ~0.11754944E~37): inf inf +(~0.123E4, ~0.34028235E39, ~0.5877472E~38): inf inf +(~0.123E4, ~0.34028235E39, ~0.1E~44): inf inf +(~0.123E4, ~0.34028235E39, ~0.0): inf inf +(~0.123E4, ~0.17014117E39, 0.34028235E39): inf inf +(~0.123E4, ~0.17014117E39, 0.17014117E39): inf inf +(~0.123E4, ~0.17014117E39, 0.123E4): inf inf +(~0.123E4, ~0.17014117E39, 0.123E2): inf inf +(~0.123E4, ~0.17014117E39, 0.31415927E1): inf inf +(~0.123E4, ~0.17014117E39, 0.27182817E1): inf inf +(~0.123E4, ~0.17014117E39, 0.123E1): inf inf +(~0.123E4, ~0.17014117E39, 0.123): inf inf +(~0.123E4, ~0.17014117E39, 0.123E~2): inf inf +(~0.123E4, ~0.17014117E39, 0.11754944E~37): inf inf +(~0.123E4, ~0.17014117E39, 0.5877472E~38): inf inf +(~0.123E4, ~0.17014117E39, 0.1E~44): inf inf +(~0.123E4, ~0.17014117E39, 0.0): inf inf +(~0.123E4, ~0.17014117E39, ~0.34028235E39): inf inf +(~0.123E4, ~0.17014117E39, ~0.17014117E39): inf inf +(~0.123E4, ~0.17014117E39, ~0.123E4): inf inf +(~0.123E4, ~0.17014117E39, ~0.123E2): inf inf +(~0.123E4, ~0.17014117E39, ~0.31415927E1): inf inf +(~0.123E4, ~0.17014117E39, ~0.27182817E1): inf inf +(~0.123E4, ~0.17014117E39, ~0.123E1): inf inf +(~0.123E4, ~0.17014117E39, ~0.123): inf inf +(~0.123E4, ~0.17014117E39, ~0.123E~2): inf inf +(~0.123E4, ~0.17014117E39, ~0.11754944E~37): inf inf +(~0.123E4, ~0.17014117E39, ~0.5877472E~38): inf inf +(~0.123E4, ~0.17014117E39, ~0.1E~44): inf inf +(~0.123E4, ~0.17014117E39, ~0.0): inf inf +(~0.123E4, ~0.123E4, 0.123E2): 0.15129122E7 0.15129122E7 +(~0.123E4, ~0.123E4, 0.31415927E1): 0.15129031E7 0.15129031E7 +(~0.123E4, ~0.123E4, 0.27182817E1): 0.15129028E7 0.15129028E7 +(~0.123E4, ~0.123E4, 0.123E1): 0.15129012E7 0.15129012E7 +(~0.123E4, ~0.123E4, 0.123): 0.15129001E7 0.15129001E7 +(~0.123E4, ~0.123E4, 0.123E~2): 0.15129E7 0.15129E7 +(~0.123E4, ~0.123E4, ~0.123E2): 0.15128878E7 0.15128878E7 +(~0.123E4, ~0.123E4, ~0.31415927E1): 0.15128969E7 0.15128969E7 +(~0.123E4, ~0.123E4, ~0.27182817E1): 0.15128972E7 0.15128972E7 +(~0.123E4, ~0.123E4, ~0.123E1): 0.15128988E7 0.15128988E7 +(~0.123E4, ~0.123E4, ~0.123): 0.15128999E7 0.15128999E7 +(~0.123E4, ~0.123E4, ~0.123E~2): 0.15129E7 0.15129E7 +(~0.123E4, ~0.123E2, 0.123E4): 0.16359E5 0.16359E5 +(~0.123E4, ~0.123E2, 0.123E2): 0.151413E5 0.151413E5 +(~0.123E4, ~0.123E2, 0.31415927E1): 0.15132142E5 0.15132142E5 +(~0.123E4, ~0.123E2, 0.27182817E1): 0.15131719E5 0.15131719E5 +(~0.123E4, ~0.123E2, 0.123E1): 0.1513023E5 0.1513023E5 +(~0.123E4, ~0.123E2, 0.123): 0.15129123E5 0.15129123E5 +(~0.123E4, ~0.123E2, 0.123E~2): 0.15129001E5 0.15129001E5 +(~0.123E4, ~0.123E2, 0.11754944E~37): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, 0.5877472E~38): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, 0.1E~44): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, 0.0): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, ~0.123E4): 0.13899E5 0.13899E5 +(~0.123E4, ~0.123E2, ~0.123E2): 0.151167E5 0.151167E5 +(~0.123E4, ~0.123E2, ~0.31415927E1): 0.15125858E5 0.15125858E5 +(~0.123E4, ~0.123E2, ~0.27182817E1): 0.15126282E5 0.15126282E5 +(~0.123E4, ~0.123E2, ~0.123E1): 0.151277705E5 0.151277705E5 +(~0.123E4, ~0.123E2, ~0.123): 0.15128877E5 0.15128877E5 +(~0.123E4, ~0.123E2, ~0.123E~2): 0.15128999E5 0.15128999E5 +(~0.123E4, ~0.123E2, ~0.11754944E~37): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, ~0.5877472E~38): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, ~0.1E~44): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, ~0.0): 0.15129E5 0.15129E5 +(~0.123E4, ~0.31415927E1, 0.123E4): 0.5094159E4 0.5094159E4 +(~0.123E4, ~0.31415927E1, 0.123E2): 0.3876459E4 0.3876459E4 +(~0.123E4, ~0.31415927E1, 0.31415927E1): 0.38673008E4 0.38673008E4 +(~0.123E4, ~0.31415927E1, 0.27182817E1): 0.38668774E4 0.38668774E4 +(~0.123E4, ~0.31415927E1, 0.123E1): 0.38653892E4 0.38653892E4 +(~0.123E4, ~0.31415927E1, 0.123): 0.3864282E4 0.3864282E4 +(~0.123E4, ~0.31415927E1, 0.123E~2): 0.38641604E4 0.38641604E4 +(~0.123E4, ~0.31415927E1, 0.11754944E~37): 0.38641592E4 0.38641592E4 +(~0.123E4, ~0.31415927E1, 0.5877472E~38): 0.38641592E4 0.38641592E4 +(~0.123E4, ~0.31415927E1, 0.1E~44): 0.38641592E4 0.38641592E4 +(~0.123E4, ~0.31415927E1, 0.0): 0.38641592E4 0.38641592E4 +(~0.123E4, ~0.31415927E1, ~0.123E4): 0.26341592E4 0.26341592E4 +(~0.123E4, ~0.31415927E1, ~0.123E2): 0.38518591E4 0.38518591E4 +(~0.123E4, ~0.31415927E1, ~0.31415927E1): 0.38610176E4 0.38610176E4 +(~0.123E4, ~0.31415927E1, ~0.27182817E1): 0.38614407E4 0.38614407E4 +(~0.123E4, ~0.31415927E1, ~0.123E1): 0.3862929E4 0.3862929E4 +(~0.123E4, ~0.31415927E1, ~0.123): 0.38640361E4 0.38640361E4 +(~0.123E4, ~0.31415927E1, ~0.123E~2): 0.3864158E4 0.3864158E4 +(~0.123E4, ~0.31415927E1, ~0.11754944E~37): 0.38641592E4 0.38641592E4 +(~0.123E4, ~0.31415927E1, ~0.5877472E~38): 0.38641592E4 0.38641592E4 +(~0.123E4, ~0.31415927E1, ~0.1E~44): 0.38641592E4 0.38641592E4 +(~0.123E4, ~0.31415927E1, ~0.0): 0.38641592E4 0.38641592E4 +(~0.123E4, ~0.27182817E1, 0.123E4): 0.45734863E4 0.45734863E4 +(~0.123E4, ~0.27182817E1, 0.123E2): 0.33557866E4 0.33557866E4 +(~0.123E4, ~0.27182817E1, 0.31415927E1): 0.33466282E4 0.33466282E4 +(~0.123E4, ~0.27182817E1, 0.27182817E1): 0.33462048E4 0.33462048E4 +(~0.123E4, ~0.27182817E1, 0.123E1): 0.33447166E4 0.33447166E4 +(~0.123E4, ~0.27182817E1, 0.123): 0.33436096E4 0.33436096E4 +(~0.123E4, ~0.27182817E1, 0.123E~2): 0.33434878E4 0.33434878E4 +(~0.123E4, ~0.27182817E1, 0.11754944E~37): 0.33434866E4 0.33434866E4 +(~0.123E4, ~0.27182817E1, 0.5877472E~38): 0.33434866E4 0.33434866E4 +(~0.123E4, ~0.27182817E1, 0.1E~44): 0.33434866E4 0.33434866E4 +(~0.123E4, ~0.27182817E1, 0.0): 0.33434866E4 0.33434866E4 +(~0.123E4, ~0.27182817E1, ~0.123E4): 0.21134866E4 0.21134866E4 +(~0.123E4, ~0.27182817E1, ~0.123E2): 0.33311865E4 0.33311865E4 +(~0.123E4, ~0.27182817E1, ~0.31415927E1): 0.3340345E4 0.3340345E4 +(~0.123E4, ~0.27182817E1, ~0.27182817E1): 0.33407683E4 0.33407683E4 +(~0.123E4, ~0.27182817E1, ~0.123E1): 0.33422566E4 0.33422566E4 +(~0.123E4, ~0.27182817E1, ~0.123): 0.33433635E4 0.33433635E4 +(~0.123E4, ~0.27182817E1, ~0.123E~2): 0.33434854E4 0.33434854E4 +(~0.123E4, ~0.27182817E1, ~0.11754944E~37): 0.33434866E4 0.33434866E4 +(~0.123E4, ~0.27182817E1, ~0.5877472E~38): 0.33434866E4 0.33434866E4 +(~0.123E4, ~0.27182817E1, ~0.1E~44): 0.33434866E4 0.33434866E4 +(~0.123E4, ~0.27182817E1, ~0.0): 0.33434866E4 0.33434866E4 +(~0.123E4, ~0.123E1, 0.123E4): 0.27429E4 0.27429E4 +(~0.123E4, ~0.123E1, 0.123E2): 0.15252001E4 0.15252001E4 +(~0.123E4, ~0.123E1, 0.31415927E1): 0.15160416E4 0.15160416E4 +(~0.123E4, ~0.123E1, 0.27182817E1): 0.15156183E4 0.15156183E4 +(~0.123E4, ~0.123E1, 0.123E1): 0.151413E4 0.151413E4 +(~0.123E4, ~0.123E1, 0.123): 0.15130231E4 0.15130231E4 +(~0.123E4, ~0.123E1, 0.123E~2): 0.15129012E4 0.15129012E4 +(~0.123E4, ~0.123E1, 0.11754944E~37): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, 0.5877472E~38): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, 0.1E~44): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, 0.0): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, ~0.123E4): 0.28290002E3 0.28290002E3 +(~0.123E4, ~0.123E1, ~0.123E2): 0.15006E4 0.15006E4 +(~0.123E4, ~0.123E1, ~0.31415927E1): 0.15097584E4 0.15097584E4 +(~0.123E4, ~0.123E1, ~0.27182817E1): 0.15101818E4 0.15101818E4 +(~0.123E4, ~0.123E1, ~0.123E1): 0.151167E4 0.151167E4 +(~0.123E4, ~0.123E1, ~0.123): 0.1512777E4 0.1512777E4 +(~0.123E4, ~0.123E1, ~0.123E~2): 0.15128988E4 0.15128988E4 +(~0.123E4, ~0.123E1, ~0.11754944E~37): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, ~0.5877472E~38): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, ~0.1E~44): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, ~0.0): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123, 0.123E4): 0.138129E4 0.138129E4 +(~0.123E4, ~0.123, 0.123E2): 0.16359001E3 0.16359001E3 +(~0.123E4, ~0.123, 0.31415927E1): 0.1544316E3 0.1544316E3 +(~0.123E4, ~0.123, 0.27182817E1): 0.15400829E3 0.15400829E3 +(~0.123E4, ~0.123, 0.123E1): 0.15252E3 0.15252E3 +(~0.123E4, ~0.123, 0.123): 0.15141301E3 0.15141301E3 +(~0.123E4, ~0.123, 0.123E~2): 0.15129123E3 0.15129123E3 +(~0.123E4, ~0.123, 0.11754944E~37): 0.15129001E3 0.15129001E3 +(~0.123E4, ~0.123, 0.5877472E~38): 0.15129001E3 0.15129001E3 +(~0.123E4, ~0.123, 0.1E~44): 0.15129001E3 0.15129001E3 +(~0.123E4, ~0.123, 0.0): 0.15129001E3 0.15129001E3 +(~0.123E4, ~0.123, ~0.123E4): ~0.107871E4 ~0.107871E4 +(~0.123E4, ~0.123, ~0.123E2): 0.13899E3 0.13899E3 +(~0.123E4, ~0.123, ~0.31415927E1): 0.1481484E3 0.1481484E3 +(~0.123E4, ~0.123, ~0.27182817E1): 0.14857172E3 0.14857172E3 +(~0.123E4, ~0.123, ~0.123E1): 0.15006E3 0.15006E3 +(~0.123E4, ~0.123, ~0.123): 0.151167E3 0.151167E3 +(~0.123E4, ~0.123, ~0.123E~2): 0.15128877E3 0.15128877E3 +(~0.123E4, ~0.123, ~0.11754944E~37): 0.15129001E3 0.15129001E3 +(~0.123E4, ~0.123, ~0.5877472E~38): 0.15129001E3 0.15129001E3 +(~0.123E4, ~0.123, ~0.1E~44): 0.15129001E3 0.15129001E3 +(~0.123E4, ~0.123, ~0.0): 0.15129001E3 0.15129001E3 +(~0.123E4, ~0.123E~2, 0.123E4): 0.1231513E4 0.1231513E4 +(~0.123E4, ~0.123E~2, 0.123E2): 0.13812901E2 0.13812901E2 +(~0.123E4, ~0.123E~2, 0.31415927E1): 0.4654493E1 0.4654493E1 +(~0.123E4, ~0.123E~2, 0.27182817E1): 0.42311816E1 0.42311816E1 +(~0.123E4, ~0.123E~2, 0.123E1): 0.27429001E1 0.27429001E1 +(~0.123E4, ~0.123E~2, 0.123): 0.16359E1 0.16359E1 +(~0.123E4, ~0.123E~2, 0.123E~2): 0.15141301E1 0.15141301E1 +(~0.123E4, ~0.123E~2, 0.11754944E~37): 0.15129001E1 0.15129001E1 +(~0.123E4, ~0.123E~2, 0.5877472E~38): 0.15129001E1 0.15129001E1 +(~0.123E4, ~0.123E~2, 0.1E~44): 0.15129001E1 0.15129001E1 +(~0.123E4, ~0.123E~2, 0.0): 0.15129001E1 0.15129001E1 +(~0.123E4, ~0.123E~2, ~0.123E4): ~0.1228487E4 ~0.1228487E4 +(~0.123E4, ~0.123E~2, ~0.123E2): ~0.107871E2 ~0.107871E2 +(~0.123E4, ~0.123E~2, ~0.31415927E1): ~0.16286926E1 ~0.16286926E1 +(~0.123E4, ~0.123E~2, ~0.27182817E1): ~0.12053816E1 ~0.12053816E1 +(~0.123E4, ~0.123E~2, ~0.123E1): 0.28290004 0.28290004 +(~0.123E4, ~0.123E~2, ~0.123): 0.13899001E1 0.13899001E1 +(~0.123E4, ~0.123E~2, ~0.123E~2): 0.15116701E1 0.15116701E1 +(~0.123E4, ~0.123E~2, ~0.11754944E~37): 0.15129001E1 0.15129001E1 +(~0.123E4, ~0.123E~2, ~0.5877472E~38): 0.15129001E1 0.15129001E1 +(~0.123E4, ~0.123E~2, ~0.1E~44): 0.15129001E1 0.15129001E1 +(~0.123E4, ~0.123E~2, ~0.0): 0.15129001E1 0.15129001E1 +(~0.123E4, ~0.11754944E~37, 0.1E~44): 0.1445858E~34 0.1445858E~34 +(~0.123E4, ~0.11754944E~37, ~0.1E~44): 0.1445858E~34 0.1445858E~34 +(~0.123E4, ~0.5877472E~38, 0.1E~44): 0.722929E~35 0.722929E~35 +(~0.123E4, ~0.5877472E~38, ~0.1E~44): 0.722929E~35 0.722929E~35 +(~0.123E2, 0.34028235E39, 0.34028235E39): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.17014117E39): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.123E4): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.123E2): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.31415927E1): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.27182817E1): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.123E1): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.123): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.123E~2): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.11754944E~37): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.5877472E~38): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.1E~44): ~inf ~inf +(~0.123E2, 0.34028235E39, 0.0): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.34028235E39): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.17014117E39): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.123E4): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.123E2): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.31415927E1): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.27182817E1): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.123E1): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.123): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.123E~2): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.11754944E~37): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.5877472E~38): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.1E~44): ~inf ~inf +(~0.123E2, 0.34028235E39, ~0.0): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.34028235E39): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.17014117E39): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.123E4): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.123E2): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.31415927E1): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.27182817E1): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.123E1): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.123): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.123E~2): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.11754944E~37): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.5877472E~38): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.1E~44): ~inf ~inf +(~0.123E2, 0.17014117E39, 0.0): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.34028235E39): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.17014117E39): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.123E4): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.123E2): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.31415927E1): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.27182817E1): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.123E1): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.123): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.123E~2): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.11754944E~37): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.5877472E~38): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.1E~44): ~inf ~inf +(~0.123E2, 0.17014117E39, ~0.0): ~inf ~inf +(~0.123E2, 0.123E4, 0.123E4): ~0.13899E5 ~0.13899E5 +(~0.123E2, 0.123E4, 0.123E2): ~0.151167E5 ~0.151167E5 +(~0.123E2, 0.123E4, 0.31415927E1): ~0.15125858E5 ~0.15125858E5 +(~0.123E2, 0.123E4, 0.27182817E1): ~0.15126282E5 ~0.15126282E5 +(~0.123E2, 0.123E4, 0.123E1): ~0.151277705E5 ~0.151277705E5 +(~0.123E2, 0.123E4, 0.123): ~0.15128877E5 ~0.15128877E5 +(~0.123E2, 0.123E4, 0.123E~2): ~0.15128999E5 ~0.15128999E5 +(~0.123E2, 0.123E4, 0.11754944E~37): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, 0.5877472E~38): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, 0.1E~44): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, 0.0): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, ~0.123E4): ~0.16359E5 ~0.16359E5 +(~0.123E2, 0.123E4, ~0.123E2): ~0.151413E5 ~0.151413E5 +(~0.123E2, 0.123E4, ~0.31415927E1): ~0.15132142E5 ~0.15132142E5 +(~0.123E2, 0.123E4, ~0.27182817E1): ~0.15131719E5 ~0.15131719E5 +(~0.123E2, 0.123E4, ~0.123E1): ~0.1513023E5 ~0.1513023E5 +(~0.123E2, 0.123E4, ~0.123): ~0.15129123E5 ~0.15129123E5 +(~0.123E2, 0.123E4, ~0.123E~2): ~0.15129001E5 ~0.15129001E5 +(~0.123E2, 0.123E4, ~0.11754944E~37): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, ~0.5877472E~38): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, ~0.1E~44): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, ~0.0): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E2, 0.123E4): 0.107871E4 0.107871E4 +(~0.123E2, 0.123E2, 0.123E2): ~0.13899E3 ~0.13899E3 +(~0.123E2, 0.123E2, 0.31415927E1): ~0.1481484E3 ~0.1481484E3 +(~0.123E2, 0.123E2, 0.27182817E1): ~0.14857172E3 ~0.14857172E3 +(~0.123E2, 0.123E2, 0.123E1): ~0.15006E3 ~0.15006E3 +(~0.123E2, 0.123E2, 0.123): ~0.151167E3 ~0.151167E3 +(~0.123E2, 0.123E2, 0.123E~2): ~0.15128877E3 ~0.15128877E3 +(~0.123E2, 0.123E2, 0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(~0.123E2, 0.123E2, 0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(~0.123E2, 0.123E2, 0.1E~44): ~0.15129001E3 ~0.15129001E3 +(~0.123E2, 0.123E2, 0.0): ~0.15129001E3 ~0.15129001E3 +(~0.123E2, 0.123E2, ~0.123E4): ~0.138129E4 ~0.138129E4 +(~0.123E2, 0.123E2, ~0.123E2): ~0.16359001E3 ~0.16359001E3 +(~0.123E2, 0.123E2, ~0.31415927E1): ~0.1544316E3 ~0.1544316E3 +(~0.123E2, 0.123E2, ~0.27182817E1): ~0.15400829E3 ~0.15400829E3 +(~0.123E2, 0.123E2, ~0.123E1): ~0.15252E3 ~0.15252E3 +(~0.123E2, 0.123E2, ~0.123): ~0.15141301E3 ~0.15141301E3 +(~0.123E2, 0.123E2, ~0.123E~2): ~0.15129123E3 ~0.15129123E3 +(~0.123E2, 0.123E2, ~0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(~0.123E2, 0.123E2, ~0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(~0.123E2, 0.123E2, ~0.1E~44): ~0.15129001E3 ~0.15129001E3 +(~0.123E2, 0.123E2, ~0.0): ~0.15129001E3 ~0.15129001E3 +(~0.123E2, 0.31415927E1, 0.123E4): 0.11913584E4 0.11913584E4 +(~0.123E2, 0.31415927E1, 0.123E2): ~0.2634159E2 ~0.2634159E2 +(~0.123E2, 0.31415927E1, 0.31415927E1): ~0.355E2 ~0.355E2 +(~0.123E2, 0.31415927E1, 0.27182817E1): ~0.3592331E2 ~0.3592331E2 +(~0.123E2, 0.31415927E1, 0.123E1): ~0.3741159E2 ~0.3741159E2 +(~0.123E2, 0.31415927E1, 0.123): ~0.38518593E2 ~0.38518593E2 +(~0.123E2, 0.31415927E1, 0.123E~2): ~0.3864036E2 ~0.3864036E2 +(~0.123E2, 0.31415927E1, 0.11754944E~37): ~0.3864159E2 ~0.3864159E2 +(~0.123E2, 0.31415927E1, 0.5877472E~38): ~0.3864159E2 ~0.3864159E2 +(~0.123E2, 0.31415927E1, 0.1E~44): ~0.3864159E2 ~0.3864159E2 +(~0.123E2, 0.31415927E1, 0.0): ~0.3864159E2 ~0.3864159E2 +(~0.123E2, 0.31415927E1, ~0.123E4): ~0.12686416E4 ~0.12686416E4 +(~0.123E2, 0.31415927E1, ~0.123E2): ~0.50941593E2 ~0.50941593E2 +(~0.123E2, 0.31415927E1, ~0.31415927E1): ~0.41783184E2 ~0.41783184E2 +(~0.123E2, 0.31415927E1, ~0.27182817E1): ~0.41359875E2 ~0.41359875E2 +(~0.123E2, 0.31415927E1, ~0.123E1): ~0.3987159E2 ~0.3987159E2 +(~0.123E2, 0.31415927E1, ~0.123): ~0.3876459E2 ~0.3876459E2 +(~0.123E2, 0.31415927E1, ~0.123E~2): ~0.38642822E2 ~0.38642822E2 +(~0.123E2, 0.31415927E1, ~0.11754944E~37): ~0.3864159E2 ~0.3864159E2 +(~0.123E2, 0.31415927E1, ~0.5877472E~38): ~0.3864159E2 ~0.3864159E2 +(~0.123E2, 0.31415927E1, ~0.1E~44): ~0.3864159E2 ~0.3864159E2 +(~0.123E2, 0.31415927E1, ~0.0): ~0.3864159E2 ~0.3864159E2 +(~0.123E2, 0.27182817E1, 0.123E4): 0.11965652E4 0.11965652E4 +(~0.123E2, 0.27182817E1, 0.123E2): ~0.21134867E2 ~0.21134867E2 +(~0.123E2, 0.27182817E1, 0.31415927E1): ~0.30293274E2 ~0.30293274E2 +(~0.123E2, 0.27182817E1, 0.27182817E1): ~0.30716585E2 ~0.30716585E2 +(~0.123E2, 0.27182817E1, 0.123E1): ~0.32204865E2 ~0.32204865E2 +(~0.123E2, 0.27182817E1, 0.123): ~0.33311867E2 ~0.33311867E2 +(~0.123E2, 0.27182817E1, 0.123E~2): ~0.33433636E2 ~0.33433636E2 +(~0.123E2, 0.27182817E1, 0.11754944E~37): ~0.33434868E2 ~0.33434868E2 +(~0.123E2, 0.27182817E1, 0.5877472E~38): ~0.33434868E2 ~0.33434868E2 +(~0.123E2, 0.27182817E1, 0.1E~44): ~0.33434868E2 ~0.33434868E2 +(~0.123E2, 0.27182817E1, 0.0): ~0.33434868E2 ~0.33434868E2 +(~0.123E2, 0.27182817E1, ~0.123E4): ~0.12634348E4 ~0.12634348E4 +(~0.123E2, 0.27182817E1, ~0.123E2): ~0.45734867E2 ~0.45734867E2 +(~0.123E2, 0.27182817E1, ~0.31415927E1): ~0.36576458E2 ~0.36576458E2 +(~0.123E2, 0.27182817E1, ~0.27182817E1): ~0.3615315E2 ~0.3615315E2 +(~0.123E2, 0.27182817E1, ~0.123E1): ~0.34664867E2 ~0.34664867E2 +(~0.123E2, 0.27182817E1, ~0.123): ~0.33557865E2 ~0.33557865E2 +(~0.123E2, 0.27182817E1, ~0.123E~2): ~0.33436096E2 ~0.33436096E2 +(~0.123E2, 0.27182817E1, ~0.11754944E~37): ~0.33434868E2 ~0.33434868E2 +(~0.123E2, 0.27182817E1, ~0.5877472E~38): ~0.33434868E2 ~0.33434868E2 +(~0.123E2, 0.27182817E1, ~0.1E~44): ~0.33434868E2 ~0.33434868E2 +(~0.123E2, 0.27182817E1, ~0.0): ~0.33434868E2 ~0.33434868E2 +(~0.123E2, 0.123E1, 0.123E4): 0.1214871E4 0.1214871E4 +(~0.123E2, 0.123E1, 0.123E2): ~0.28290002E1 ~0.28290002E1 +(~0.123E2, 0.123E1, 0.31415927E1): ~0.11987408E2 ~0.11987408E2 +(~0.123E2, 0.123E1, 0.27182817E1): ~0.12410719E2 ~0.12410719E2 +(~0.123E2, 0.123E1, 0.123E1): ~0.13899E2 ~0.13899E2 +(~0.123E2, 0.123E1, 0.123): ~0.150060005E2 ~0.150060005E2 +(~0.123E2, 0.123E1, 0.123E~2): ~0.1512777E2 ~0.1512777E2 +(~0.123E2, 0.123E1, 0.11754944E~37): ~0.15129001E2 ~0.15129001E2 +(~0.123E2, 0.123E1, 0.5877472E~38): ~0.15129001E2 ~0.15129001E2 +(~0.123E2, 0.123E1, 0.1E~44): ~0.15129001E2 ~0.15129001E2 +(~0.123E2, 0.123E1, 0.0): ~0.15129001E2 ~0.15129001E2 +(~0.123E2, 0.123E1, ~0.123E4): ~0.1245129E4 ~0.1245129E4 +(~0.123E2, 0.123E1, ~0.123E2): ~0.27429E2 ~0.27429E2 +(~0.123E2, 0.123E1, ~0.31415927E1): ~0.18270594E2 ~0.18270594E2 +(~0.123E2, 0.123E1, ~0.27182817E1): ~0.17847282E2 ~0.17847282E2 +(~0.123E2, 0.123E1, ~0.123E1): ~0.16359001E2 ~0.16359001E2 +(~0.123E2, 0.123E1, ~0.123): ~0.15252001E2 ~0.15252001E2 +(~0.123E2, 0.123E1, ~0.123E~2): ~0.15130231E2 ~0.15130231E2 +(~0.123E2, 0.123E1, ~0.11754944E~37): ~0.15129001E2 ~0.15129001E2 +(~0.123E2, 0.123E1, ~0.5877472E~38): ~0.15129001E2 ~0.15129001E2 +(~0.123E2, 0.123E1, ~0.1E~44): ~0.15129001E2 ~0.15129001E2 +(~0.123E2, 0.123E1, ~0.0): ~0.15129001E2 ~0.15129001E2 +(~0.123E2, 0.123, 0.123E4): 0.1228487E4 0.1228487E4 +(~0.123E2, 0.123, 0.123E2): 0.107871E2 0.107871E2 +(~0.123E2, 0.123, 0.31415927E1): 0.16286926E1 0.16286926E1 +(~0.123E2, 0.123, 0.27182817E1): 0.12053816E1 0.12053816E1 +(~0.123E2, 0.123, 0.123E1): ~0.28290004 ~0.28290004 +(~0.123E2, 0.123, 0.123): ~0.13899001E1 ~0.13899001E1 +(~0.123E2, 0.123, 0.123E~2): ~0.15116701E1 ~0.15116701E1 +(~0.123E2, 0.123, 0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(~0.123E2, 0.123, 0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(~0.123E2, 0.123, 0.1E~44): ~0.15129001E1 ~0.15129001E1 +(~0.123E2, 0.123, 0.0): ~0.15129001E1 ~0.15129001E1 +(~0.123E2, 0.123, ~0.123E4): ~0.1231513E4 ~0.1231513E4 +(~0.123E2, 0.123, ~0.123E2): ~0.13812901E2 ~0.13812901E2 +(~0.123E2, 0.123, ~0.31415927E1): ~0.4654493E1 ~0.4654493E1 +(~0.123E2, 0.123, ~0.27182817E1): ~0.42311816E1 ~0.42311816E1 +(~0.123E2, 0.123, ~0.123E1): ~0.27429001E1 ~0.27429001E1 +(~0.123E2, 0.123, ~0.123): ~0.16359E1 ~0.16359E1 +(~0.123E2, 0.123, ~0.123E~2): ~0.15141301E1 ~0.15141301E1 +(~0.123E2, 0.123, ~0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(~0.123E2, 0.123, ~0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(~0.123E2, 0.123, ~0.1E~44): ~0.15129001E1 ~0.15129001E1 +(~0.123E2, 0.123, ~0.0): ~0.15129001E1 ~0.15129001E1 +(~0.123E2, 0.123E~2, 0.123E4): 0.12299849E4 0.12299849E4 +(~0.123E2, 0.123E~2, 0.123E2): 0.12284871E2 0.12284871E2 +(~0.123E2, 0.123E~2, 0.31415927E1): 0.31264637E1 0.31264637E1 +(~0.123E2, 0.123E~2, 0.27182817E1): 0.27031527E1 0.27031527E1 +(~0.123E2, 0.123E~2, 0.123E1): 0.1214871E1 0.1214871E1 +(~0.123E2, 0.123E~2, 0.123): 0.107871 0.107871 +(~0.123E2, 0.123E~2, 0.123E~2): ~0.13899001E~1 ~0.13899001E~1 +(~0.123E2, 0.123E~2, 0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E2, 0.123E~2, 0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E2, 0.123E~2, 0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E2, 0.123E~2, 0.0): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E2, 0.123E~2, ~0.123E4): ~0.12300151E4 ~0.12300151E4 +(~0.123E2, 0.123E~2, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(~0.123E2, 0.123E~2, ~0.31415927E1): ~0.31567218E1 ~0.31567218E1 +(~0.123E2, 0.123E~2, ~0.27182817E1): ~0.27334108E1 ~0.27334108E1 +(~0.123E2, 0.123E~2, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(~0.123E2, 0.123E~2, ~0.123): ~0.13812901 ~0.13812901 +(~0.123E2, 0.123E~2, ~0.123E~2): ~0.16359001E~1 ~0.16359001E~1 +(~0.123E2, 0.123E~2, ~0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E2, 0.123E~2, ~0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E2, 0.123E~2, ~0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E2, 0.123E~2, ~0.0): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E2, 0.11754944E~37, 0.1E~44): ~0.14458581E~36 ~0.14458581E~36 +(~0.123E2, 0.11754944E~37, ~0.1E~44): ~0.14458581E~36 ~0.14458581E~36 +(~0.123E2, 0.5877472E~38, 0.1E~44): ~0.72292904E~37 ~0.72292904E~37 +(~0.123E2, 0.5877472E~38, ~0.1E~44): ~0.72292904E~37 ~0.72292904E~37 +(~0.123E2, 0.1E~44, 0.11754944E~37): 0.11754927E~37 0.11754927E~37 +(~0.123E2, 0.1E~44, 0.5877472E~38): 0.5877455E~38 0.5877455E~38 +(~0.123E2, 0.1E~44, 0.1E~44): ~0.15E~43 ~0.15E~43 +(~0.123E2, 0.1E~44, 0.0): ~0.17E~43 ~0.17E~43 +(~0.123E2, 0.1E~44, ~0.11754944E~37): ~0.1175496E~37 ~0.1175496E~37 +(~0.123E2, 0.1E~44, ~0.5877472E~38): ~0.5877489E~38 ~0.5877489E~38 +(~0.123E2, 0.1E~44, ~0.1E~44): ~0.18E~43 ~0.18E~43 +(~0.123E2, 0.1E~44, ~0.0): ~0.17E~43 ~0.17E~43 +(~0.123E2, ~0.34028235E39, 0.34028235E39): inf inf +(~0.123E2, ~0.34028235E39, 0.17014117E39): inf inf +(~0.123E2, ~0.34028235E39, 0.123E4): inf inf +(~0.123E2, ~0.34028235E39, 0.123E2): inf inf +(~0.123E2, ~0.34028235E39, 0.31415927E1): inf inf +(~0.123E2, ~0.34028235E39, 0.27182817E1): inf inf +(~0.123E2, ~0.34028235E39, 0.123E1): inf inf +(~0.123E2, ~0.34028235E39, 0.123): inf inf +(~0.123E2, ~0.34028235E39, 0.123E~2): inf inf +(~0.123E2, ~0.34028235E39, 0.11754944E~37): inf inf +(~0.123E2, ~0.34028235E39, 0.5877472E~38): inf inf +(~0.123E2, ~0.34028235E39, 0.1E~44): inf inf +(~0.123E2, ~0.34028235E39, 0.0): inf inf +(~0.123E2, ~0.34028235E39, ~0.34028235E39): inf inf +(~0.123E2, ~0.34028235E39, ~0.17014117E39): inf inf +(~0.123E2, ~0.34028235E39, ~0.123E4): inf inf +(~0.123E2, ~0.34028235E39, ~0.123E2): inf inf +(~0.123E2, ~0.34028235E39, ~0.31415927E1): inf inf +(~0.123E2, ~0.34028235E39, ~0.27182817E1): inf inf +(~0.123E2, ~0.34028235E39, ~0.123E1): inf inf +(~0.123E2, ~0.34028235E39, ~0.123): inf inf +(~0.123E2, ~0.34028235E39, ~0.123E~2): inf inf +(~0.123E2, ~0.34028235E39, ~0.11754944E~37): inf inf +(~0.123E2, ~0.34028235E39, ~0.5877472E~38): inf inf +(~0.123E2, ~0.34028235E39, ~0.1E~44): inf inf +(~0.123E2, ~0.34028235E39, ~0.0): inf inf +(~0.123E2, ~0.17014117E39, 0.34028235E39): inf inf +(~0.123E2, ~0.17014117E39, 0.17014117E39): inf inf +(~0.123E2, ~0.17014117E39, 0.123E4): inf inf +(~0.123E2, ~0.17014117E39, 0.123E2): inf inf +(~0.123E2, ~0.17014117E39, 0.31415927E1): inf inf +(~0.123E2, ~0.17014117E39, 0.27182817E1): inf inf +(~0.123E2, ~0.17014117E39, 0.123E1): inf inf +(~0.123E2, ~0.17014117E39, 0.123): inf inf +(~0.123E2, ~0.17014117E39, 0.123E~2): inf inf +(~0.123E2, ~0.17014117E39, 0.11754944E~37): inf inf +(~0.123E2, ~0.17014117E39, 0.5877472E~38): inf inf +(~0.123E2, ~0.17014117E39, 0.1E~44): inf inf +(~0.123E2, ~0.17014117E39, 0.0): inf inf +(~0.123E2, ~0.17014117E39, ~0.34028235E39): inf inf +(~0.123E2, ~0.17014117E39, ~0.17014117E39): inf inf +(~0.123E2, ~0.17014117E39, ~0.123E4): inf inf +(~0.123E2, ~0.17014117E39, ~0.123E2): inf inf +(~0.123E2, ~0.17014117E39, ~0.31415927E1): inf inf +(~0.123E2, ~0.17014117E39, ~0.27182817E1): inf inf +(~0.123E2, ~0.17014117E39, ~0.123E1): inf inf +(~0.123E2, ~0.17014117E39, ~0.123): inf inf +(~0.123E2, ~0.17014117E39, ~0.123E~2): inf inf +(~0.123E2, ~0.17014117E39, ~0.11754944E~37): inf inf +(~0.123E2, ~0.17014117E39, ~0.5877472E~38): inf inf +(~0.123E2, ~0.17014117E39, ~0.1E~44): inf inf +(~0.123E2, ~0.17014117E39, ~0.0): inf inf +(~0.123E2, ~0.123E4, 0.123E4): 0.16359E5 0.16359E5 +(~0.123E2, ~0.123E4, 0.123E2): 0.151413E5 0.151413E5 +(~0.123E2, ~0.123E4, 0.31415927E1): 0.15132142E5 0.15132142E5 +(~0.123E2, ~0.123E4, 0.27182817E1): 0.15131719E5 0.15131719E5 +(~0.123E2, ~0.123E4, 0.123E1): 0.1513023E5 0.1513023E5 +(~0.123E2, ~0.123E4, 0.123): 0.15129123E5 0.15129123E5 +(~0.123E2, ~0.123E4, 0.123E~2): 0.15129001E5 0.15129001E5 +(~0.123E2, ~0.123E4, 0.11754944E~37): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, 0.5877472E~38): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, 0.1E~44): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, 0.0): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, ~0.123E4): 0.13899E5 0.13899E5 +(~0.123E2, ~0.123E4, ~0.123E2): 0.151167E5 0.151167E5 +(~0.123E2, ~0.123E4, ~0.31415927E1): 0.15125858E5 0.15125858E5 +(~0.123E2, ~0.123E4, ~0.27182817E1): 0.15126282E5 0.15126282E5 +(~0.123E2, ~0.123E4, ~0.123E1): 0.151277705E5 0.151277705E5 +(~0.123E2, ~0.123E4, ~0.123): 0.15128877E5 0.15128877E5 +(~0.123E2, ~0.123E4, ~0.123E~2): 0.15128999E5 0.15128999E5 +(~0.123E2, ~0.123E4, ~0.11754944E~37): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, ~0.5877472E~38): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, ~0.1E~44): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, ~0.0): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E2, 0.123E4): 0.138129E4 0.138129E4 +(~0.123E2, ~0.123E2, 0.123E2): 0.16359001E3 0.16359001E3 +(~0.123E2, ~0.123E2, 0.31415927E1): 0.1544316E3 0.1544316E3 +(~0.123E2, ~0.123E2, 0.27182817E1): 0.15400829E3 0.15400829E3 +(~0.123E2, ~0.123E2, 0.123E1): 0.15252E3 0.15252E3 +(~0.123E2, ~0.123E2, 0.123): 0.15141301E3 0.15141301E3 +(~0.123E2, ~0.123E2, 0.123E~2): 0.15129123E3 0.15129123E3 +(~0.123E2, ~0.123E2, 0.11754944E~37): 0.15129001E3 0.15129001E3 +(~0.123E2, ~0.123E2, 0.5877472E~38): 0.15129001E3 0.15129001E3 +(~0.123E2, ~0.123E2, 0.1E~44): 0.15129001E3 0.15129001E3 +(~0.123E2, ~0.123E2, 0.0): 0.15129001E3 0.15129001E3 +(~0.123E2, ~0.123E2, ~0.123E4): ~0.107871E4 ~0.107871E4 +(~0.123E2, ~0.123E2, ~0.123E2): 0.13899E3 0.13899E3 +(~0.123E2, ~0.123E2, ~0.31415927E1): 0.1481484E3 0.1481484E3 +(~0.123E2, ~0.123E2, ~0.27182817E1): 0.14857172E3 0.14857172E3 +(~0.123E2, ~0.123E2, ~0.123E1): 0.15006E3 0.15006E3 +(~0.123E2, ~0.123E2, ~0.123): 0.151167E3 0.151167E3 +(~0.123E2, ~0.123E2, ~0.123E~2): 0.15128877E3 0.15128877E3 +(~0.123E2, ~0.123E2, ~0.11754944E~37): 0.15129001E3 0.15129001E3 +(~0.123E2, ~0.123E2, ~0.5877472E~38): 0.15129001E3 0.15129001E3 +(~0.123E2, ~0.123E2, ~0.1E~44): 0.15129001E3 0.15129001E3 +(~0.123E2, ~0.123E2, ~0.0): 0.15129001E3 0.15129001E3 +(~0.123E2, ~0.31415927E1, 0.123E4): 0.12686416E4 0.12686416E4 +(~0.123E2, ~0.31415927E1, 0.123E2): 0.50941593E2 0.50941593E2 +(~0.123E2, ~0.31415927E1, 0.31415927E1): 0.41783184E2 0.41783184E2 +(~0.123E2, ~0.31415927E1, 0.27182817E1): 0.41359875E2 0.41359875E2 +(~0.123E2, ~0.31415927E1, 0.123E1): 0.3987159E2 0.3987159E2 +(~0.123E2, ~0.31415927E1, 0.123): 0.3876459E2 0.3876459E2 +(~0.123E2, ~0.31415927E1, 0.123E~2): 0.38642822E2 0.38642822E2 +(~0.123E2, ~0.31415927E1, 0.11754944E~37): 0.3864159E2 0.3864159E2 +(~0.123E2, ~0.31415927E1, 0.5877472E~38): 0.3864159E2 0.3864159E2 +(~0.123E2, ~0.31415927E1, 0.1E~44): 0.3864159E2 0.3864159E2 +(~0.123E2, ~0.31415927E1, 0.0): 0.3864159E2 0.3864159E2 +(~0.123E2, ~0.31415927E1, ~0.123E4): ~0.11913584E4 ~0.11913584E4 +(~0.123E2, ~0.31415927E1, ~0.123E2): 0.2634159E2 0.2634159E2 +(~0.123E2, ~0.31415927E1, ~0.31415927E1): 0.355E2 0.355E2 +(~0.123E2, ~0.31415927E1, ~0.27182817E1): 0.3592331E2 0.3592331E2 +(~0.123E2, ~0.31415927E1, ~0.123E1): 0.3741159E2 0.3741159E2 +(~0.123E2, ~0.31415927E1, ~0.123): 0.38518593E2 0.38518593E2 +(~0.123E2, ~0.31415927E1, ~0.123E~2): 0.3864036E2 0.3864036E2 +(~0.123E2, ~0.31415927E1, ~0.11754944E~37): 0.3864159E2 0.3864159E2 +(~0.123E2, ~0.31415927E1, ~0.5877472E~38): 0.3864159E2 0.3864159E2 +(~0.123E2, ~0.31415927E1, ~0.1E~44): 0.3864159E2 0.3864159E2 +(~0.123E2, ~0.31415927E1, ~0.0): 0.3864159E2 0.3864159E2 +(~0.123E2, ~0.27182817E1, 0.123E4): 0.12634348E4 0.12634348E4 +(~0.123E2, ~0.27182817E1, 0.123E2): 0.45734867E2 0.45734867E2 +(~0.123E2, ~0.27182817E1, 0.31415927E1): 0.36576458E2 0.36576458E2 +(~0.123E2, ~0.27182817E1, 0.27182817E1): 0.3615315E2 0.3615315E2 +(~0.123E2, ~0.27182817E1, 0.123E1): 0.34664867E2 0.34664867E2 +(~0.123E2, ~0.27182817E1, 0.123): 0.33557865E2 0.33557865E2 +(~0.123E2, ~0.27182817E1, 0.123E~2): 0.33436096E2 0.33436096E2 +(~0.123E2, ~0.27182817E1, 0.11754944E~37): 0.33434868E2 0.33434868E2 +(~0.123E2, ~0.27182817E1, 0.5877472E~38): 0.33434868E2 0.33434868E2 +(~0.123E2, ~0.27182817E1, 0.1E~44): 0.33434868E2 0.33434868E2 +(~0.123E2, ~0.27182817E1, 0.0): 0.33434868E2 0.33434868E2 +(~0.123E2, ~0.27182817E1, ~0.123E4): ~0.11965652E4 ~0.11965652E4 +(~0.123E2, ~0.27182817E1, ~0.123E2): 0.21134867E2 0.21134867E2 +(~0.123E2, ~0.27182817E1, ~0.31415927E1): 0.30293274E2 0.30293274E2 +(~0.123E2, ~0.27182817E1, ~0.27182817E1): 0.30716585E2 0.30716585E2 +(~0.123E2, ~0.27182817E1, ~0.123E1): 0.32204865E2 0.32204865E2 +(~0.123E2, ~0.27182817E1, ~0.123): 0.33311867E2 0.33311867E2 +(~0.123E2, ~0.27182817E1, ~0.123E~2): 0.33433636E2 0.33433636E2 +(~0.123E2, ~0.27182817E1, ~0.11754944E~37): 0.33434868E2 0.33434868E2 +(~0.123E2, ~0.27182817E1, ~0.5877472E~38): 0.33434868E2 0.33434868E2 +(~0.123E2, ~0.27182817E1, ~0.1E~44): 0.33434868E2 0.33434868E2 +(~0.123E2, ~0.27182817E1, ~0.0): 0.33434868E2 0.33434868E2 +(~0.123E2, ~0.123E1, 0.123E4): 0.1245129E4 0.1245129E4 +(~0.123E2, ~0.123E1, 0.123E2): 0.27429E2 0.27429E2 +(~0.123E2, ~0.123E1, 0.31415927E1): 0.18270594E2 0.18270594E2 +(~0.123E2, ~0.123E1, 0.27182817E1): 0.17847282E2 0.17847282E2 +(~0.123E2, ~0.123E1, 0.123E1): 0.16359001E2 0.16359001E2 +(~0.123E2, ~0.123E1, 0.123): 0.15252001E2 0.15252001E2 +(~0.123E2, ~0.123E1, 0.123E~2): 0.15130231E2 0.15130231E2 +(~0.123E2, ~0.123E1, 0.11754944E~37): 0.15129001E2 0.15129001E2 +(~0.123E2, ~0.123E1, 0.5877472E~38): 0.15129001E2 0.15129001E2 +(~0.123E2, ~0.123E1, 0.1E~44): 0.15129001E2 0.15129001E2 +(~0.123E2, ~0.123E1, 0.0): 0.15129001E2 0.15129001E2 +(~0.123E2, ~0.123E1, ~0.123E4): ~0.1214871E4 ~0.1214871E4 +(~0.123E2, ~0.123E1, ~0.123E2): 0.28290002E1 0.28290002E1 +(~0.123E2, ~0.123E1, ~0.31415927E1): 0.11987408E2 0.11987408E2 +(~0.123E2, ~0.123E1, ~0.27182817E1): 0.12410719E2 0.12410719E2 +(~0.123E2, ~0.123E1, ~0.123E1): 0.13899E2 0.13899E2 +(~0.123E2, ~0.123E1, ~0.123): 0.150060005E2 0.150060005E2 +(~0.123E2, ~0.123E1, ~0.123E~2): 0.1512777E2 0.1512777E2 +(~0.123E2, ~0.123E1, ~0.11754944E~37): 0.15129001E2 0.15129001E2 +(~0.123E2, ~0.123E1, ~0.5877472E~38): 0.15129001E2 0.15129001E2 +(~0.123E2, ~0.123E1, ~0.1E~44): 0.15129001E2 0.15129001E2 +(~0.123E2, ~0.123E1, ~0.0): 0.15129001E2 0.15129001E2 +(~0.123E2, ~0.123, 0.123E4): 0.1231513E4 0.1231513E4 +(~0.123E2, ~0.123, 0.123E2): 0.13812901E2 0.13812901E2 +(~0.123E2, ~0.123, 0.31415927E1): 0.4654493E1 0.4654493E1 +(~0.123E2, ~0.123, 0.27182817E1): 0.42311816E1 0.42311816E1 +(~0.123E2, ~0.123, 0.123E1): 0.27429001E1 0.27429001E1 +(~0.123E2, ~0.123, 0.123): 0.16359E1 0.16359E1 +(~0.123E2, ~0.123, 0.123E~2): 0.15141301E1 0.15141301E1 +(~0.123E2, ~0.123, 0.11754944E~37): 0.15129001E1 0.15129001E1 +(~0.123E2, ~0.123, 0.5877472E~38): 0.15129001E1 0.15129001E1 +(~0.123E2, ~0.123, 0.1E~44): 0.15129001E1 0.15129001E1 +(~0.123E2, ~0.123, 0.0): 0.15129001E1 0.15129001E1 +(~0.123E2, ~0.123, ~0.123E4): ~0.1228487E4 ~0.1228487E4 +(~0.123E2, ~0.123, ~0.123E2): ~0.107871E2 ~0.107871E2 +(~0.123E2, ~0.123, ~0.31415927E1): ~0.16286926E1 ~0.16286926E1 +(~0.123E2, ~0.123, ~0.27182817E1): ~0.12053816E1 ~0.12053816E1 +(~0.123E2, ~0.123, ~0.123E1): 0.28290004 0.28290004 +(~0.123E2, ~0.123, ~0.123): 0.13899001E1 0.13899001E1 +(~0.123E2, ~0.123, ~0.123E~2): 0.15116701E1 0.15116701E1 +(~0.123E2, ~0.123, ~0.11754944E~37): 0.15129001E1 0.15129001E1 +(~0.123E2, ~0.123, ~0.5877472E~38): 0.15129001E1 0.15129001E1 +(~0.123E2, ~0.123, ~0.1E~44): 0.15129001E1 0.15129001E1 +(~0.123E2, ~0.123, ~0.0): 0.15129001E1 0.15129001E1 +(~0.123E2, ~0.123E~2, 0.123E4): 0.12300151E4 0.12300151E4 +(~0.123E2, ~0.123E~2, 0.123E2): 0.12315129E2 0.12315129E2 +(~0.123E2, ~0.123E~2, 0.31415927E1): 0.31567218E1 0.31567218E1 +(~0.123E2, ~0.123E~2, 0.27182817E1): 0.27334108E1 0.27334108E1 +(~0.123E2, ~0.123E~2, 0.123E1): 0.1245129E1 0.1245129E1 +(~0.123E2, ~0.123E~2, 0.123): 0.13812901 0.13812901 +(~0.123E2, ~0.123E~2, 0.123E~2): 0.16359001E~1 0.16359001E~1 +(~0.123E2, ~0.123E~2, 0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(~0.123E2, ~0.123E~2, 0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(~0.123E2, ~0.123E~2, 0.1E~44): 0.15129001E~1 0.15129001E~1 +(~0.123E2, ~0.123E~2, 0.0): 0.15129001E~1 0.15129001E~1 +(~0.123E2, ~0.123E~2, ~0.123E4): ~0.12299849E4 ~0.12299849E4 +(~0.123E2, ~0.123E~2, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(~0.123E2, ~0.123E~2, ~0.31415927E1): ~0.31264637E1 ~0.31264637E1 +(~0.123E2, ~0.123E~2, ~0.27182817E1): ~0.27031527E1 ~0.27031527E1 +(~0.123E2, ~0.123E~2, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(~0.123E2, ~0.123E~2, ~0.123): ~0.107871 ~0.107871 +(~0.123E2, ~0.123E~2, ~0.123E~2): 0.13899001E~1 0.13899001E~1 +(~0.123E2, ~0.123E~2, ~0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(~0.123E2, ~0.123E~2, ~0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(~0.123E2, ~0.123E~2, ~0.1E~44): 0.15129001E~1 0.15129001E~1 +(~0.123E2, ~0.123E~2, ~0.0): 0.15129001E~1 0.15129001E~1 +(~0.123E2, ~0.11754944E~37, 0.1E~44): 0.14458581E~36 0.14458581E~36 +(~0.123E2, ~0.11754944E~37, ~0.1E~44): 0.14458581E~36 0.14458581E~36 +(~0.123E2, ~0.5877472E~38, 0.1E~44): 0.72292904E~37 0.72292904E~37 +(~0.123E2, ~0.5877472E~38, ~0.1E~44): 0.72292904E~37 0.72292904E~37 +(~0.123E2, ~0.1E~44, 0.11754944E~37): 0.1175496E~37 0.1175496E~37 +(~0.123E2, ~0.1E~44, 0.5877472E~38): 0.5877489E~38 0.5877489E~38 +(~0.123E2, ~0.1E~44, 0.1E~44): 0.18E~43 0.18E~43 +(~0.123E2, ~0.1E~44, 0.0): 0.17E~43 0.17E~43 +(~0.123E2, ~0.1E~44, ~0.11754944E~37): ~0.11754927E~37 ~0.11754927E~37 +(~0.123E2, ~0.1E~44, ~0.5877472E~38): ~0.5877455E~38 ~0.5877455E~38 +(~0.123E2, ~0.1E~44, ~0.1E~44): 0.15E~43 0.15E~43 +(~0.123E2, ~0.1E~44, ~0.0): 0.17E~43 0.17E~43 +(~0.31415927E1, 0.34028235E39, 0.34028235E39): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.17014117E39): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.123E4): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.123E2): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.31415927E1): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.27182817E1): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.123E1): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.123): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.123E~2): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.11754944E~37): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.5877472E~38): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.1E~44): ~inf ~inf +(~0.31415927E1, 0.34028235E39, 0.0): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.34028235E39): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.17014117E39): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.123E4): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.123E2): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.31415927E1): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.27182817E1): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.123E1): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.123): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.123E~2): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.11754944E~37): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.5877472E~38): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.1E~44): ~inf ~inf +(~0.31415927E1, 0.34028235E39, ~0.0): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.34028235E39): ~0.19423192E39 ~0.19423192E39 +(~0.31415927E1, 0.17014117E39, 0.17014117E39): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.123E4): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.123E2): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.31415927E1): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.27182817E1): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.123E1): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.123): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.123E~2): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.11754944E~37): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.5877472E~38): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.1E~44): ~inf ~inf +(~0.31415927E1, 0.17014117E39, 0.0): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.34028235E39): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.17014117E39): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.123E4): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.123E2): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.31415927E1): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.27182817E1): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.123E1): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.123): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.123E~2): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.11754944E~37): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.5877472E~38): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.1E~44): ~inf ~inf +(~0.31415927E1, 0.17014117E39, ~0.0): ~inf ~inf +(~0.31415927E1, 0.123E4, 0.123E4): ~0.26341592E4 ~0.26341592E4 +(~0.31415927E1, 0.123E4, 0.123E2): ~0.38518591E4 ~0.38518591E4 +(~0.31415927E1, 0.123E4, 0.31415927E1): ~0.38610176E4 ~0.38610176E4 +(~0.31415927E1, 0.123E4, 0.27182817E1): ~0.38614407E4 ~0.38614407E4 +(~0.31415927E1, 0.123E4, 0.123E1): ~0.3862929E4 ~0.3862929E4 +(~0.31415927E1, 0.123E4, 0.123): ~0.38640361E4 ~0.38640361E4 +(~0.31415927E1, 0.123E4, 0.123E~2): ~0.3864158E4 ~0.3864158E4 +(~0.31415927E1, 0.123E4, 0.11754944E~37): ~0.38641592E4 ~0.38641592E4 +(~0.31415927E1, 0.123E4, 0.5877472E~38): ~0.38641592E4 ~0.38641592E4 +(~0.31415927E1, 0.123E4, 0.1E~44): ~0.38641592E4 ~0.38641592E4 +(~0.31415927E1, 0.123E4, 0.0): ~0.38641592E4 ~0.38641592E4 +(~0.31415927E1, 0.123E4, ~0.123E4): ~0.5094159E4 ~0.5094159E4 +(~0.31415927E1, 0.123E4, ~0.123E2): ~0.3876459E4 ~0.3876459E4 +(~0.31415927E1, 0.123E4, ~0.31415927E1): ~0.38673008E4 ~0.38673008E4 +(~0.31415927E1, 0.123E4, ~0.27182817E1): ~0.38668774E4 ~0.38668774E4 +(~0.31415927E1, 0.123E4, ~0.123E1): ~0.38653892E4 ~0.38653892E4 +(~0.31415927E1, 0.123E4, ~0.123): ~0.3864282E4 ~0.3864282E4 +(~0.31415927E1, 0.123E4, ~0.123E~2): ~0.38641604E4 ~0.38641604E4 +(~0.31415927E1, 0.123E4, ~0.11754944E~37): ~0.38641592E4 ~0.38641592E4 +(~0.31415927E1, 0.123E4, ~0.5877472E~38): ~0.38641592E4 ~0.38641592E4 +(~0.31415927E1, 0.123E4, ~0.1E~44): ~0.38641592E4 ~0.38641592E4 +(~0.31415927E1, 0.123E4, ~0.0): ~0.38641592E4 ~0.38641592E4 +(~0.31415927E1, 0.123E2, 0.123E4): 0.11913584E4 0.11913584E4 +(~0.31415927E1, 0.123E2, 0.123E2): ~0.2634159E2 ~0.2634159E2 +(~0.31415927E1, 0.123E2, 0.31415927E1): ~0.355E2 ~0.355E2 +(~0.31415927E1, 0.123E2, 0.27182817E1): ~0.3592331E2 ~0.3592331E2 +(~0.31415927E1, 0.123E2, 0.123E1): ~0.3741159E2 ~0.3741159E2 +(~0.31415927E1, 0.123E2, 0.123): ~0.38518593E2 ~0.38518593E2 +(~0.31415927E1, 0.123E2, 0.123E~2): ~0.3864036E2 ~0.3864036E2 +(~0.31415927E1, 0.123E2, 0.11754944E~37): ~0.3864159E2 ~0.3864159E2 +(~0.31415927E1, 0.123E2, 0.5877472E~38): ~0.3864159E2 ~0.3864159E2 +(~0.31415927E1, 0.123E2, 0.1E~44): ~0.3864159E2 ~0.3864159E2 +(~0.31415927E1, 0.123E2, 0.0): ~0.3864159E2 ~0.3864159E2 +(~0.31415927E1, 0.123E2, ~0.123E4): ~0.12686416E4 ~0.12686416E4 +(~0.31415927E1, 0.123E2, ~0.123E2): ~0.50941593E2 ~0.50941593E2 +(~0.31415927E1, 0.123E2, ~0.31415927E1): ~0.41783184E2 ~0.41783184E2 +(~0.31415927E1, 0.123E2, ~0.27182817E1): ~0.41359875E2 ~0.41359875E2 +(~0.31415927E1, 0.123E2, ~0.123E1): ~0.3987159E2 ~0.3987159E2 +(~0.31415927E1, 0.123E2, ~0.123): ~0.3876459E2 ~0.3876459E2 +(~0.31415927E1, 0.123E2, ~0.123E~2): ~0.38642822E2 ~0.38642822E2 +(~0.31415927E1, 0.123E2, ~0.11754944E~37): ~0.3864159E2 ~0.3864159E2 +(~0.31415927E1, 0.123E2, ~0.5877472E~38): ~0.3864159E2 ~0.3864159E2 +(~0.31415927E1, 0.123E2, ~0.1E~44): ~0.3864159E2 ~0.3864159E2 +(~0.31415927E1, 0.123E2, ~0.0): ~0.3864159E2 ~0.3864159E2 +(~0.31415927E1, 0.31415927E1, 0.123E4): 0.12201304E4 0.12201304E4 +(~0.31415927E1, 0.31415927E1, 0.123E2): 0.24303951E1 0.24303951E1 +(~0.31415927E1, 0.31415927E1, 0.31415927E1): ~0.6728012E1 ~0.6728012E1 +(~0.31415927E1, 0.31415927E1, 0.27182817E1): ~0.71513233E1 ~0.71513233E1 +(~0.31415927E1, 0.31415927E1, 0.123E1): ~0.8639605E1 ~0.8639605E1 +(~0.31415927E1, 0.31415927E1, 0.123): ~0.9746605E1 ~0.9746605E1 +(~0.31415927E1, 0.31415927E1, 0.123E~2): ~0.9868375E1 ~0.9868375E1 +(~0.31415927E1, 0.31415927E1, 0.11754944E~37): ~0.9869605E1 ~0.9869605E1 +(~0.31415927E1, 0.31415927E1, 0.5877472E~38): ~0.9869605E1 ~0.9869605E1 +(~0.31415927E1, 0.31415927E1, 0.1E~44): ~0.9869605E1 ~0.9869605E1 +(~0.31415927E1, 0.31415927E1, 0.0): ~0.9869605E1 ~0.9869605E1 +(~0.31415927E1, 0.31415927E1, ~0.123E4): ~0.12398696E4 ~0.12398696E4 +(~0.31415927E1, 0.31415927E1, ~0.123E2): ~0.22169605E2 ~0.22169605E2 +(~0.31415927E1, 0.31415927E1, ~0.31415927E1): ~0.13011198E2 ~0.13011198E2 +(~0.31415927E1, 0.31415927E1, ~0.27182817E1): ~0.12587887E2 ~0.12587887E2 +(~0.31415927E1, 0.31415927E1, ~0.123E1): ~0.11099605E2 ~0.11099605E2 +(~0.31415927E1, 0.31415927E1, ~0.123): ~0.9992605E1 ~0.9992605E1 +(~0.31415927E1, 0.31415927E1, ~0.123E~2): ~0.9870835E1 ~0.9870835E1 +(~0.31415927E1, 0.31415927E1, ~0.11754944E~37): ~0.9869605E1 ~0.9869605E1 +(~0.31415927E1, 0.31415927E1, ~0.5877472E~38): ~0.9869605E1 ~0.9869605E1 +(~0.31415927E1, 0.31415927E1, ~0.1E~44): ~0.9869605E1 ~0.9869605E1 +(~0.31415927E1, 0.31415927E1, ~0.0): ~0.9869605E1 ~0.9869605E1 +(~0.31415927E1, 0.27182817E1, 0.123E4): 0.12214602E4 0.12214602E4 +(~0.31415927E1, 0.27182817E1, 0.123E2): 0.3760266E1 0.3760266E1 +(~0.31415927E1, 0.27182817E1, 0.31415927E1): ~0.53981414E1 ~0.53981414E1 +(~0.31415927E1, 0.27182817E1, 0.27182817E1): ~0.58214526E1 ~0.58214526E1 +(~0.31415927E1, 0.27182817E1, 0.123E1): ~0.73097343E1 ~0.73097343E1 +(~0.31415927E1, 0.27182817E1, 0.123): ~0.8416734E1 ~0.8416734E1 +(~0.31415927E1, 0.27182817E1, 0.123E~2): ~0.8538505E1 ~0.8538505E1 +(~0.31415927E1, 0.27182817E1, 0.11754944E~37): ~0.8539734E1 ~0.8539734E1 +(~0.31415927E1, 0.27182817E1, 0.5877472E~38): ~0.8539734E1 ~0.8539734E1 +(~0.31415927E1, 0.27182817E1, 0.1E~44): ~0.8539734E1 ~0.8539734E1 +(~0.31415927E1, 0.27182817E1, 0.0): ~0.8539734E1 ~0.8539734E1 +(~0.31415927E1, 0.27182817E1, ~0.123E4): ~0.12385398E4 ~0.12385398E4 +(~0.31415927E1, 0.27182817E1, ~0.123E2): ~0.20839735E2 ~0.20839735E2 +(~0.31415927E1, 0.27182817E1, ~0.31415927E1): ~0.11681327E2 ~0.11681327E2 +(~0.31415927E1, 0.27182817E1, ~0.27182817E1): ~0.11258016E2 ~0.11258016E2 +(~0.31415927E1, 0.27182817E1, ~0.123E1): ~0.9769734E1 ~0.9769734E1 +(~0.31415927E1, 0.27182817E1, ~0.123): ~0.8662734E1 ~0.8662734E1 +(~0.31415927E1, 0.27182817E1, ~0.123E~2): ~0.8540964E1 ~0.8540964E1 +(~0.31415927E1, 0.27182817E1, ~0.11754944E~37): ~0.8539734E1 ~0.8539734E1 +(~0.31415927E1, 0.27182817E1, ~0.5877472E~38): ~0.8539734E1 ~0.8539734E1 +(~0.31415927E1, 0.27182817E1, ~0.1E~44): ~0.8539734E1 ~0.8539734E1 +(~0.31415927E1, 0.27182817E1, ~0.0): ~0.8539734E1 ~0.8539734E1 +(~0.31415927E1, 0.123E1, 0.123E4): 0.12261359E4 0.12261359E4 +(~0.31415927E1, 0.123E1, 0.123E2): 0.8435841E1 0.8435841E1 +(~0.31415927E1, 0.123E1, 0.31415927E1): ~0.72256637 ~0.72256637 +(~0.31415927E1, 0.123E1, 0.27182817E1): ~0.11458774E1 ~0.11458774E1 +(~0.31415927E1, 0.123E1, 0.123E1): ~0.2634159E1 ~0.2634159E1 +(~0.31415927E1, 0.123E1, 0.123): ~0.37411592E1 ~0.37411592E1 +(~0.31415927E1, 0.123E1, 0.123E~2): ~0.3862929E1 ~0.3862929E1 +(~0.31415927E1, 0.123E1, 0.11754944E~37): ~0.3864159E1 ~0.3864159E1 +(~0.31415927E1, 0.123E1, 0.5877472E~38): ~0.3864159E1 ~0.3864159E1 +(~0.31415927E1, 0.123E1, 0.1E~44): ~0.3864159E1 ~0.3864159E1 +(~0.31415927E1, 0.123E1, 0.0): ~0.3864159E1 ~0.3864159E1 +(~0.31415927E1, 0.123E1, ~0.123E4): ~0.12338641E4 ~0.12338641E4 +(~0.31415927E1, 0.123E1, ~0.123E2): ~0.1616416E2 ~0.1616416E2 +(~0.31415927E1, 0.123E1, ~0.31415927E1): ~0.7005752E1 ~0.7005752E1 +(~0.31415927E1, 0.123E1, ~0.27182817E1): ~0.6582441E1 ~0.6582441E1 +(~0.31415927E1, 0.123E1, ~0.123E1): ~0.5094159E1 ~0.5094159E1 +(~0.31415927E1, 0.123E1, ~0.123): ~0.39871593E1 ~0.39871593E1 +(~0.31415927E1, 0.123E1, ~0.123E~2): ~0.3865389E1 ~0.3865389E1 +(~0.31415927E1, 0.123E1, ~0.11754944E~37): ~0.3864159E1 ~0.3864159E1 +(~0.31415927E1, 0.123E1, ~0.5877472E~38): ~0.3864159E1 ~0.3864159E1 +(~0.31415927E1, 0.123E1, ~0.1E~44): ~0.3864159E1 ~0.3864159E1 +(~0.31415927E1, 0.123E1, ~0.0): ~0.3864159E1 ~0.3864159E1 +(~0.31415927E1, 0.123, 0.123E4): 0.12296135E4 0.12296135E4 +(~0.31415927E1, 0.123, 0.123E2): 0.11913585E2 0.11913585E2 +(~0.31415927E1, 0.123, 0.31415927E1): 0.27551768E1 0.27551768E1 +(~0.31415927E1, 0.123, 0.27182817E1): 0.23318658E1 0.23318658E1 +(~0.31415927E1, 0.123, 0.123E1): 0.8435841 0.8435841 +(~0.31415927E1, 0.123, 0.123): ~0.2634159 ~0.2634159 +(~0.31415927E1, 0.123, 0.123E~2): ~0.38518593 ~0.38518593 +(~0.31415927E1, 0.123, 0.11754944E~37): ~0.38641593 ~0.38641593 +(~0.31415927E1, 0.123, 0.5877472E~38): ~0.38641593 ~0.38641593 +(~0.31415927E1, 0.123, 0.1E~44): ~0.38641593 ~0.38641593 +(~0.31415927E1, 0.123, 0.0): ~0.38641593 ~0.38641593 +(~0.31415927E1, 0.123, ~0.123E4): ~0.12303865E4 ~0.12303865E4 +(~0.31415927E1, 0.123, ~0.123E2): ~0.12686416E2 ~0.12686416E2 +(~0.31415927E1, 0.123, ~0.31415927E1): ~0.35280087E1 ~0.35280087E1 +(~0.31415927E1, 0.123, ~0.27182817E1): ~0.31046977E1 ~0.31046977E1 +(~0.31415927E1, 0.123, ~0.123E1): ~0.1616416E1 ~0.1616416E1 +(~0.31415927E1, 0.123, ~0.123): ~0.5094159 ~0.5094159 +(~0.31415927E1, 0.123, ~0.123E~2): ~0.38764593 ~0.38764593 +(~0.31415927E1, 0.123, ~0.11754944E~37): ~0.38641593 ~0.38641593 +(~0.31415927E1, 0.123, ~0.5877472E~38): ~0.38641593 ~0.38641593 +(~0.31415927E1, 0.123, ~0.1E~44): ~0.38641593 ~0.38641593 +(~0.31415927E1, 0.123, ~0.0): ~0.38641593 ~0.38641593 +(~0.31415927E1, 0.123E~2, 0.123E4): 0.12299961E4 0.12299961E4 +(~0.31415927E1, 0.123E~2, 0.123E2): 0.12296136E2 0.12296136E2 +(~0.31415927E1, 0.123E~2, 0.31415927E1): 0.31377287E1 0.31377287E1 +(~0.31415927E1, 0.123E~2, 0.27182817E1): 0.27144177E1 0.27144177E1 +(~0.31415927E1, 0.123E~2, 0.123E1): 0.12261358E1 0.12261358E1 +(~0.31415927E1, 0.123E~2, 0.123): 0.11913584 0.11913584 +(~0.31415927E1, 0.123E~2, 0.123E~2): ~0.26341593E~2 ~0.26341593E~2 +(~0.31415927E1, 0.123E~2, 0.11754944E~37): ~0.38641593E~2 ~0.38641593E~2 +(~0.31415927E1, 0.123E~2, 0.5877472E~38): ~0.38641593E~2 ~0.38641593E~2 +(~0.31415927E1, 0.123E~2, 0.1E~44): ~0.38641593E~2 ~0.38641593E~2 +(~0.31415927E1, 0.123E~2, 0.0): ~0.38641593E~2 ~0.38641593E~2 +(~0.31415927E1, 0.123E~2, ~0.123E4): ~0.12300039E4 ~0.12300039E4 +(~0.31415927E1, 0.123E~2, ~0.123E2): ~0.123038645E2 ~0.123038645E2 +(~0.31415927E1, 0.123E~2, ~0.31415927E1): ~0.31454568E1 ~0.31454568E1 +(~0.31415927E1, 0.123E~2, ~0.27182817E1): ~0.27221458E1 ~0.27221458E1 +(~0.31415927E1, 0.123E~2, ~0.123E1): ~0.12338642E1 ~0.12338642E1 +(~0.31415927E1, 0.123E~2, ~0.123): ~0.12686417 ~0.12686417 +(~0.31415927E1, 0.123E~2, ~0.123E~2): ~0.50941594E~2 ~0.50941594E~2 +(~0.31415927E1, 0.123E~2, ~0.11754944E~37): ~0.38641593E~2 ~0.38641593E~2 +(~0.31415927E1, 0.123E~2, ~0.5877472E~38): ~0.38641593E~2 ~0.38641593E~2 +(~0.31415927E1, 0.123E~2, ~0.1E~44): ~0.38641593E~2 ~0.38641593E~2 +(~0.31415927E1, 0.123E~2, ~0.0): ~0.38641593E~2 ~0.38641593E~2 +(~0.31415927E1, 0.11754944E~37, 0.1E~44): ~0.36929242E~37 ~0.36929242E~37 +(~0.31415927E1, 0.11754944E~37, ~0.11754944E~37): ~0.4868419E~37 ~0.4868419E~37 +(~0.31415927E1, 0.11754944E~37, ~0.1E~44): ~0.36929248E~37 ~0.36929248E~37 +(~0.31415927E1, 0.5877472E~38, ~0.11754944E~37): ~0.30219568E~37 ~0.30219568E~37 +(~0.31415927E1, 0.5877472E~38, ~0.5877472E~38): ~0.24342096E~37 ~0.24342096E~37 +(~0.31415927E1, 0.1E~44, 0.11754944E~37): 0.1175494E~37 0.1175494E~37 +(~0.31415927E1, 0.1E~44, 0.5877472E~38): 0.5877468E~38 0.5877468E~38 +(~0.31415927E1, 0.1E~44, 0.1E~44): ~0.3E~44 ~0.3E~44 +(~0.31415927E1, 0.1E~44, 0.0): ~0.4E~44 ~0.4E~44 +(~0.31415927E1, 0.1E~44, ~0.11754944E~37): ~0.11754948E~37 ~0.11754948E~37 +(~0.31415927E1, 0.1E~44, ~0.5877472E~38): ~0.5877476E~38 ~0.5877476E~38 +(~0.31415927E1, 0.1E~44, ~0.1E~44): ~0.6E~44 ~0.6E~44 +(~0.31415927E1, 0.1E~44, ~0.0): ~0.4E~44 ~0.4E~44 +(~0.31415927E1, ~0.34028235E39, 0.34028235E39): inf inf +(~0.31415927E1, ~0.34028235E39, 0.17014117E39): inf inf +(~0.31415927E1, ~0.34028235E39, 0.123E4): inf inf +(~0.31415927E1, ~0.34028235E39, 0.123E2): inf inf +(~0.31415927E1, ~0.34028235E39, 0.31415927E1): inf inf +(~0.31415927E1, ~0.34028235E39, 0.27182817E1): inf inf +(~0.31415927E1, ~0.34028235E39, 0.123E1): inf inf +(~0.31415927E1, ~0.34028235E39, 0.123): inf inf +(~0.31415927E1, ~0.34028235E39, 0.123E~2): inf inf +(~0.31415927E1, ~0.34028235E39, 0.11754944E~37): inf inf +(~0.31415927E1, ~0.34028235E39, 0.5877472E~38): inf inf +(~0.31415927E1, ~0.34028235E39, 0.1E~44): inf inf +(~0.31415927E1, ~0.34028235E39, 0.0): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.34028235E39): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.17014117E39): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.123E4): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.123E2): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.31415927E1): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.27182817E1): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.123E1): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.123): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.123E~2): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.11754944E~37): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.5877472E~38): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.1E~44): inf inf +(~0.31415927E1, ~0.34028235E39, ~0.0): inf inf +(~0.31415927E1, ~0.17014117E39, 0.34028235E39): inf inf +(~0.31415927E1, ~0.17014117E39, 0.17014117E39): inf inf +(~0.31415927E1, ~0.17014117E39, 0.123E4): inf inf +(~0.31415927E1, ~0.17014117E39, 0.123E2): inf inf +(~0.31415927E1, ~0.17014117E39, 0.31415927E1): inf inf +(~0.31415927E1, ~0.17014117E39, 0.27182817E1): inf inf +(~0.31415927E1, ~0.17014117E39, 0.123E1): inf inf +(~0.31415927E1, ~0.17014117E39, 0.123): inf inf +(~0.31415927E1, ~0.17014117E39, 0.123E~2): inf inf +(~0.31415927E1, ~0.17014117E39, 0.11754944E~37): inf inf +(~0.31415927E1, ~0.17014117E39, 0.5877472E~38): inf inf +(~0.31415927E1, ~0.17014117E39, 0.1E~44): inf inf +(~0.31415927E1, ~0.17014117E39, 0.0): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.34028235E39): 0.19423192E39 0.19423192E39 +(~0.31415927E1, ~0.17014117E39, ~0.17014117E39): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.123E4): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.123E2): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.31415927E1): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.27182817E1): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.123E1): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.123): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.123E~2): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.11754944E~37): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.5877472E~38): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.1E~44): inf inf +(~0.31415927E1, ~0.17014117E39, ~0.0): inf inf +(~0.31415927E1, ~0.123E4, 0.123E4): 0.5094159E4 0.5094159E4 +(~0.31415927E1, ~0.123E4, 0.123E2): 0.3876459E4 0.3876459E4 +(~0.31415927E1, ~0.123E4, 0.31415927E1): 0.38673008E4 0.38673008E4 +(~0.31415927E1, ~0.123E4, 0.27182817E1): 0.38668774E4 0.38668774E4 +(~0.31415927E1, ~0.123E4, 0.123E1): 0.38653892E4 0.38653892E4 +(~0.31415927E1, ~0.123E4, 0.123): 0.3864282E4 0.3864282E4 +(~0.31415927E1, ~0.123E4, 0.123E~2): 0.38641604E4 0.38641604E4 +(~0.31415927E1, ~0.123E4, 0.11754944E~37): 0.38641592E4 0.38641592E4 +(~0.31415927E1, ~0.123E4, 0.5877472E~38): 0.38641592E4 0.38641592E4 +(~0.31415927E1, ~0.123E4, 0.1E~44): 0.38641592E4 0.38641592E4 +(~0.31415927E1, ~0.123E4, 0.0): 0.38641592E4 0.38641592E4 +(~0.31415927E1, ~0.123E4, ~0.123E4): 0.26341592E4 0.26341592E4 +(~0.31415927E1, ~0.123E4, ~0.123E2): 0.38518591E4 0.38518591E4 +(~0.31415927E1, ~0.123E4, ~0.31415927E1): 0.38610176E4 0.38610176E4 +(~0.31415927E1, ~0.123E4, ~0.27182817E1): 0.38614407E4 0.38614407E4 +(~0.31415927E1, ~0.123E4, ~0.123E1): 0.3862929E4 0.3862929E4 +(~0.31415927E1, ~0.123E4, ~0.123): 0.38640361E4 0.38640361E4 +(~0.31415927E1, ~0.123E4, ~0.123E~2): 0.3864158E4 0.3864158E4 +(~0.31415927E1, ~0.123E4, ~0.11754944E~37): 0.38641592E4 0.38641592E4 +(~0.31415927E1, ~0.123E4, ~0.5877472E~38): 0.38641592E4 0.38641592E4 +(~0.31415927E1, ~0.123E4, ~0.1E~44): 0.38641592E4 0.38641592E4 +(~0.31415927E1, ~0.123E4, ~0.0): 0.38641592E4 0.38641592E4 +(~0.31415927E1, ~0.123E2, 0.123E4): 0.12686416E4 0.12686416E4 +(~0.31415927E1, ~0.123E2, 0.123E2): 0.50941593E2 0.50941593E2 +(~0.31415927E1, ~0.123E2, 0.31415927E1): 0.41783184E2 0.41783184E2 +(~0.31415927E1, ~0.123E2, 0.27182817E1): 0.41359875E2 0.41359875E2 +(~0.31415927E1, ~0.123E2, 0.123E1): 0.3987159E2 0.3987159E2 +(~0.31415927E1, ~0.123E2, 0.123): 0.3876459E2 0.3876459E2 +(~0.31415927E1, ~0.123E2, 0.123E~2): 0.38642822E2 0.38642822E2 +(~0.31415927E1, ~0.123E2, 0.11754944E~37): 0.3864159E2 0.3864159E2 +(~0.31415927E1, ~0.123E2, 0.5877472E~38): 0.3864159E2 0.3864159E2 +(~0.31415927E1, ~0.123E2, 0.1E~44): 0.3864159E2 0.3864159E2 +(~0.31415927E1, ~0.123E2, 0.0): 0.3864159E2 0.3864159E2 +(~0.31415927E1, ~0.123E2, ~0.123E4): ~0.11913584E4 ~0.11913584E4 +(~0.31415927E1, ~0.123E2, ~0.123E2): 0.2634159E2 0.2634159E2 +(~0.31415927E1, ~0.123E2, ~0.31415927E1): 0.355E2 0.355E2 +(~0.31415927E1, ~0.123E2, ~0.27182817E1): 0.3592331E2 0.3592331E2 +(~0.31415927E1, ~0.123E2, ~0.123E1): 0.3741159E2 0.3741159E2 +(~0.31415927E1, ~0.123E2, ~0.123): 0.38518593E2 0.38518593E2 +(~0.31415927E1, ~0.123E2, ~0.123E~2): 0.3864036E2 0.3864036E2 +(~0.31415927E1, ~0.123E2, ~0.11754944E~37): 0.3864159E2 0.3864159E2 +(~0.31415927E1, ~0.123E2, ~0.5877472E~38): 0.3864159E2 0.3864159E2 +(~0.31415927E1, ~0.123E2, ~0.1E~44): 0.3864159E2 0.3864159E2 +(~0.31415927E1, ~0.123E2, ~0.0): 0.3864159E2 0.3864159E2 +(~0.31415927E1, ~0.31415927E1, 0.123E4): 0.12398696E4 0.12398696E4 +(~0.31415927E1, ~0.31415927E1, 0.123E2): 0.22169605E2 0.22169605E2 +(~0.31415927E1, ~0.31415927E1, 0.31415927E1): 0.13011198E2 0.13011198E2 +(~0.31415927E1, ~0.31415927E1, 0.27182817E1): 0.12587887E2 0.12587887E2 +(~0.31415927E1, ~0.31415927E1, 0.123E1): 0.11099605E2 0.11099605E2 +(~0.31415927E1, ~0.31415927E1, 0.123): 0.9992605E1 0.9992605E1 +(~0.31415927E1, ~0.31415927E1, 0.123E~2): 0.9870835E1 0.9870835E1 +(~0.31415927E1, ~0.31415927E1, 0.11754944E~37): 0.9869605E1 0.9869605E1 +(~0.31415927E1, ~0.31415927E1, 0.5877472E~38): 0.9869605E1 0.9869605E1 +(~0.31415927E1, ~0.31415927E1, 0.1E~44): 0.9869605E1 0.9869605E1 +(~0.31415927E1, ~0.31415927E1, 0.0): 0.9869605E1 0.9869605E1 +(~0.31415927E1, ~0.31415927E1, ~0.123E4): ~0.12201304E4 ~0.12201304E4 +(~0.31415927E1, ~0.31415927E1, ~0.123E2): ~0.24303951E1 ~0.24303951E1 +(~0.31415927E1, ~0.31415927E1, ~0.31415927E1): 0.6728012E1 0.6728012E1 +(~0.31415927E1, ~0.31415927E1, ~0.27182817E1): 0.71513233E1 0.71513233E1 +(~0.31415927E1, ~0.31415927E1, ~0.123E1): 0.8639605E1 0.8639605E1 +(~0.31415927E1, ~0.31415927E1, ~0.123): 0.9746605E1 0.9746605E1 +(~0.31415927E1, ~0.31415927E1, ~0.123E~2): 0.9868375E1 0.9868375E1 +(~0.31415927E1, ~0.31415927E1, ~0.11754944E~37): 0.9869605E1 0.9869605E1 +(~0.31415927E1, ~0.31415927E1, ~0.5877472E~38): 0.9869605E1 0.9869605E1 +(~0.31415927E1, ~0.31415927E1, ~0.1E~44): 0.9869605E1 0.9869605E1 +(~0.31415927E1, ~0.31415927E1, ~0.0): 0.9869605E1 0.9869605E1 +(~0.31415927E1, ~0.27182817E1, 0.123E4): 0.12385398E4 0.12385398E4 +(~0.31415927E1, ~0.27182817E1, 0.123E2): 0.20839735E2 0.20839735E2 +(~0.31415927E1, ~0.27182817E1, 0.31415927E1): 0.11681327E2 0.11681327E2 +(~0.31415927E1, ~0.27182817E1, 0.27182817E1): 0.11258016E2 0.11258016E2 +(~0.31415927E1, ~0.27182817E1, 0.123E1): 0.9769734E1 0.9769734E1 +(~0.31415927E1, ~0.27182817E1, 0.123): 0.8662734E1 0.8662734E1 +(~0.31415927E1, ~0.27182817E1, 0.123E~2): 0.8540964E1 0.8540964E1 +(~0.31415927E1, ~0.27182817E1, 0.11754944E~37): 0.8539734E1 0.8539734E1 +(~0.31415927E1, ~0.27182817E1, 0.5877472E~38): 0.8539734E1 0.8539734E1 +(~0.31415927E1, ~0.27182817E1, 0.1E~44): 0.8539734E1 0.8539734E1 +(~0.31415927E1, ~0.27182817E1, 0.0): 0.8539734E1 0.8539734E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E4): ~0.12214602E4 ~0.12214602E4 +(~0.31415927E1, ~0.27182817E1, ~0.123E2): ~0.3760266E1 ~0.3760266E1 +(~0.31415927E1, ~0.27182817E1, ~0.31415927E1): 0.53981414E1 0.53981414E1 +(~0.31415927E1, ~0.27182817E1, ~0.27182817E1): 0.58214526E1 0.58214526E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E1): 0.73097343E1 0.73097343E1 +(~0.31415927E1, ~0.27182817E1, ~0.123): 0.8416734E1 0.8416734E1 +(~0.31415927E1, ~0.27182817E1, ~0.123E~2): 0.8538505E1 0.8538505E1 +(~0.31415927E1, ~0.27182817E1, ~0.11754944E~37): 0.8539734E1 0.8539734E1 +(~0.31415927E1, ~0.27182817E1, ~0.5877472E~38): 0.8539734E1 0.8539734E1 +(~0.31415927E1, ~0.27182817E1, ~0.1E~44): 0.8539734E1 0.8539734E1 +(~0.31415927E1, ~0.27182817E1, ~0.0): 0.8539734E1 0.8539734E1 +(~0.31415927E1, ~0.123E1, 0.123E4): 0.12338641E4 0.12338641E4 +(~0.31415927E1, ~0.123E1, 0.123E2): 0.1616416E2 0.1616416E2 +(~0.31415927E1, ~0.123E1, 0.31415927E1): 0.7005752E1 0.7005752E1 +(~0.31415927E1, ~0.123E1, 0.27182817E1): 0.6582441E1 0.6582441E1 +(~0.31415927E1, ~0.123E1, 0.123E1): 0.5094159E1 0.5094159E1 +(~0.31415927E1, ~0.123E1, 0.123): 0.39871593E1 0.39871593E1 +(~0.31415927E1, ~0.123E1, 0.123E~2): 0.3865389E1 0.3865389E1 +(~0.31415927E1, ~0.123E1, 0.11754944E~37): 0.3864159E1 0.3864159E1 +(~0.31415927E1, ~0.123E1, 0.5877472E~38): 0.3864159E1 0.3864159E1 +(~0.31415927E1, ~0.123E1, 0.1E~44): 0.3864159E1 0.3864159E1 +(~0.31415927E1, ~0.123E1, 0.0): 0.3864159E1 0.3864159E1 +(~0.31415927E1, ~0.123E1, ~0.123E4): ~0.12261359E4 ~0.12261359E4 +(~0.31415927E1, ~0.123E1, ~0.123E2): ~0.8435841E1 ~0.8435841E1 +(~0.31415927E1, ~0.123E1, ~0.31415927E1): 0.72256637 0.72256637 +(~0.31415927E1, ~0.123E1, ~0.27182817E1): 0.11458774E1 0.11458774E1 +(~0.31415927E1, ~0.123E1, ~0.123E1): 0.2634159E1 0.2634159E1 +(~0.31415927E1, ~0.123E1, ~0.123): 0.37411592E1 0.37411592E1 +(~0.31415927E1, ~0.123E1, ~0.123E~2): 0.3862929E1 0.3862929E1 +(~0.31415927E1, ~0.123E1, ~0.11754944E~37): 0.3864159E1 0.3864159E1 +(~0.31415927E1, ~0.123E1, ~0.5877472E~38): 0.3864159E1 0.3864159E1 +(~0.31415927E1, ~0.123E1, ~0.1E~44): 0.3864159E1 0.3864159E1 +(~0.31415927E1, ~0.123E1, ~0.0): 0.3864159E1 0.3864159E1 +(~0.31415927E1, ~0.123, 0.123E4): 0.12303865E4 0.12303865E4 +(~0.31415927E1, ~0.123, 0.123E2): 0.12686416E2 0.12686416E2 +(~0.31415927E1, ~0.123, 0.31415927E1): 0.35280087E1 0.35280087E1 +(~0.31415927E1, ~0.123, 0.27182817E1): 0.31046977E1 0.31046977E1 +(~0.31415927E1, ~0.123, 0.123E1): 0.1616416E1 0.1616416E1 +(~0.31415927E1, ~0.123, 0.123): 0.5094159 0.5094159 +(~0.31415927E1, ~0.123, 0.123E~2): 0.38764593 0.38764593 +(~0.31415927E1, ~0.123, 0.11754944E~37): 0.38641593 0.38641593 +(~0.31415927E1, ~0.123, 0.5877472E~38): 0.38641593 0.38641593 +(~0.31415927E1, ~0.123, 0.1E~44): 0.38641593 0.38641593 +(~0.31415927E1, ~0.123, 0.0): 0.38641593 0.38641593 +(~0.31415927E1, ~0.123, ~0.123E4): ~0.12296135E4 ~0.12296135E4 +(~0.31415927E1, ~0.123, ~0.123E2): ~0.11913585E2 ~0.11913585E2 +(~0.31415927E1, ~0.123, ~0.31415927E1): ~0.27551768E1 ~0.27551768E1 +(~0.31415927E1, ~0.123, ~0.27182817E1): ~0.23318658E1 ~0.23318658E1 +(~0.31415927E1, ~0.123, ~0.123E1): ~0.8435841 ~0.8435841 +(~0.31415927E1, ~0.123, ~0.123): 0.2634159 0.2634159 +(~0.31415927E1, ~0.123, ~0.123E~2): 0.38518593 0.38518593 +(~0.31415927E1, ~0.123, ~0.11754944E~37): 0.38641593 0.38641593 +(~0.31415927E1, ~0.123, ~0.5877472E~38): 0.38641593 0.38641593 +(~0.31415927E1, ~0.123, ~0.1E~44): 0.38641593 0.38641593 +(~0.31415927E1, ~0.123, ~0.0): 0.38641593 0.38641593 +(~0.31415927E1, ~0.123E~2, 0.123E4): 0.12300039E4 0.12300039E4 +(~0.31415927E1, ~0.123E~2, 0.123E2): 0.123038645E2 0.123038645E2 +(~0.31415927E1, ~0.123E~2, 0.31415927E1): 0.31454568E1 0.31454568E1 +(~0.31415927E1, ~0.123E~2, 0.27182817E1): 0.27221458E1 0.27221458E1 +(~0.31415927E1, ~0.123E~2, 0.123E1): 0.12338642E1 0.12338642E1 +(~0.31415927E1, ~0.123E~2, 0.123): 0.12686417 0.12686417 +(~0.31415927E1, ~0.123E~2, 0.123E~2): 0.50941594E~2 0.50941594E~2 +(~0.31415927E1, ~0.123E~2, 0.11754944E~37): 0.38641593E~2 0.38641593E~2 +(~0.31415927E1, ~0.123E~2, 0.5877472E~38): 0.38641593E~2 0.38641593E~2 +(~0.31415927E1, ~0.123E~2, 0.1E~44): 0.38641593E~2 0.38641593E~2 +(~0.31415927E1, ~0.123E~2, 0.0): 0.38641593E~2 0.38641593E~2 +(~0.31415927E1, ~0.123E~2, ~0.123E4): ~0.12299961E4 ~0.12299961E4 +(~0.31415927E1, ~0.123E~2, ~0.123E2): ~0.12296136E2 ~0.12296136E2 +(~0.31415927E1, ~0.123E~2, ~0.31415927E1): ~0.31377287E1 ~0.31377287E1 +(~0.31415927E1, ~0.123E~2, ~0.27182817E1): ~0.27144177E1 ~0.27144177E1 +(~0.31415927E1, ~0.123E~2, ~0.123E1): ~0.12261358E1 ~0.12261358E1 +(~0.31415927E1, ~0.123E~2, ~0.123): ~0.11913584 ~0.11913584 +(~0.31415927E1, ~0.123E~2, ~0.123E~2): 0.26341593E~2 0.26341593E~2 +(~0.31415927E1, ~0.123E~2, ~0.11754944E~37): 0.38641593E~2 0.38641593E~2 +(~0.31415927E1, ~0.123E~2, ~0.5877472E~38): 0.38641593E~2 0.38641593E~2 +(~0.31415927E1, ~0.123E~2, ~0.1E~44): 0.38641593E~2 0.38641593E~2 +(~0.31415927E1, ~0.123E~2, ~0.0): 0.38641593E~2 0.38641593E~2 +(~0.31415927E1, ~0.11754944E~37, 0.11754944E~37): 0.4868419E~37 0.4868419E~37 +(~0.31415927E1, ~0.11754944E~37, 0.1E~44): 0.36929248E~37 0.36929248E~37 +(~0.31415927E1, ~0.11754944E~37, ~0.1E~44): 0.36929242E~37 0.36929242E~37 +(~0.31415927E1, ~0.5877472E~38, 0.11754944E~37): 0.30219568E~37 0.30219568E~37 +(~0.31415927E1, ~0.5877472E~38, 0.5877472E~38): 0.24342096E~37 0.24342096E~37 +(~0.31415927E1, ~0.1E~44, 0.11754944E~37): 0.11754948E~37 0.11754948E~37 +(~0.31415927E1, ~0.1E~44, 0.5877472E~38): 0.5877476E~38 0.5877476E~38 +(~0.31415927E1, ~0.1E~44, 0.1E~44): 0.6E~44 0.6E~44 +(~0.31415927E1, ~0.1E~44, 0.0): 0.4E~44 0.4E~44 +(~0.31415927E1, ~0.1E~44, ~0.11754944E~37): ~0.1175494E~37 ~0.1175494E~37 +(~0.31415927E1, ~0.1E~44, ~0.5877472E~38): ~0.5877468E~38 ~0.5877468E~38 +(~0.31415927E1, ~0.1E~44, ~0.1E~44): 0.3E~44 0.3E~44 +(~0.31415927E1, ~0.1E~44, ~0.0): 0.4E~44 0.4E~44 +(~0.27182817E1, 0.34028235E39, 0.34028235E39): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.17014117E39): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.123E4): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.123E2): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.31415927E1): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.27182817E1): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.123E1): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.123): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.123E~2): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.11754944E~37): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.5877472E~38): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.1E~44): ~inf ~inf +(~0.27182817E1, 0.34028235E39, 0.0): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.34028235E39): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.17014117E39): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.123E4): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.123E2): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.31415927E1): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.27182817E1): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.123E1): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.123): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.123E~2): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.11754944E~37): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.5877472E~38): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.1E~44): ~inf ~inf +(~0.27182817E1, 0.34028235E39, ~0.0): ~inf ~inf +(~0.27182817E1, 0.17014117E39, 0.34028235E39): ~0.1222093E39 ~0.1222093E39 +(~0.27182817E1, 0.17014117E39, 0.17014117E39): ~0.29235047E39 ~0.29235047E39 +(~0.27182817E1, 0.17014117E39, 0.123E4): ~inf ~inf +(~0.27182817E1, 0.17014117E39, 0.123E2): ~inf ~inf +(~0.27182817E1, 0.17014117E39, 0.31415927E1): ~inf ~inf +(~0.27182817E1, 0.17014117E39, 0.27182817E1): ~inf ~inf +(~0.27182817E1, 0.17014117E39, 0.123E1): ~inf ~inf +(~0.27182817E1, 0.17014117E39, 0.123): ~inf ~inf +(~0.27182817E1, 0.17014117E39, 0.123E~2): ~inf ~inf +(~0.27182817E1, 0.17014117E39, 0.11754944E~37): ~inf ~inf +(~0.27182817E1, 0.17014117E39, 0.5877472E~38): ~inf ~inf +(~0.27182817E1, 0.17014117E39, 0.1E~44): ~inf ~inf +(~0.27182817E1, 0.17014117E39, 0.0): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.34028235E39): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.17014117E39): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.123E4): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.123E2): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.31415927E1): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.27182817E1): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.123E1): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.123): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.123E~2): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.11754944E~37): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.5877472E~38): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.1E~44): ~inf ~inf +(~0.27182817E1, 0.17014117E39, ~0.0): ~inf ~inf +(~0.27182817E1, 0.123E4, 0.123E4): ~0.21134866E4 ~0.21134866E4 +(~0.27182817E1, 0.123E4, 0.123E2): ~0.33311865E4 ~0.33311865E4 +(~0.27182817E1, 0.123E4, 0.31415927E1): ~0.3340345E4 ~0.3340345E4 +(~0.27182817E1, 0.123E4, 0.27182817E1): ~0.33407683E4 ~0.33407683E4 +(~0.27182817E1, 0.123E4, 0.123E1): ~0.33422566E4 ~0.33422566E4 +(~0.27182817E1, 0.123E4, 0.123): ~0.33433635E4 ~0.33433635E4 +(~0.27182817E1, 0.123E4, 0.123E~2): ~0.33434854E4 ~0.33434854E4 +(~0.27182817E1, 0.123E4, 0.11754944E~37): ~0.33434866E4 ~0.33434866E4 +(~0.27182817E1, 0.123E4, 0.5877472E~38): ~0.33434866E4 ~0.33434866E4 +(~0.27182817E1, 0.123E4, 0.1E~44): ~0.33434866E4 ~0.33434866E4 +(~0.27182817E1, 0.123E4, 0.0): ~0.33434866E4 ~0.33434866E4 +(~0.27182817E1, 0.123E4, ~0.123E4): ~0.45734863E4 ~0.45734863E4 +(~0.27182817E1, 0.123E4, ~0.123E2): ~0.33557866E4 ~0.33557866E4 +(~0.27182817E1, 0.123E4, ~0.31415927E1): ~0.33466282E4 ~0.33466282E4 +(~0.27182817E1, 0.123E4, ~0.27182817E1): ~0.33462048E4 ~0.33462048E4 +(~0.27182817E1, 0.123E4, ~0.123E1): ~0.33447166E4 ~0.33447166E4 +(~0.27182817E1, 0.123E4, ~0.123): ~0.33436096E4 ~0.33436096E4 +(~0.27182817E1, 0.123E4, ~0.123E~2): ~0.33434878E4 ~0.33434878E4 +(~0.27182817E1, 0.123E4, ~0.11754944E~37): ~0.33434866E4 ~0.33434866E4 +(~0.27182817E1, 0.123E4, ~0.5877472E~38): ~0.33434866E4 ~0.33434866E4 +(~0.27182817E1, 0.123E4, ~0.1E~44): ~0.33434866E4 ~0.33434866E4 +(~0.27182817E1, 0.123E4, ~0.0): ~0.33434866E4 ~0.33434866E4 +(~0.27182817E1, 0.123E2, 0.123E4): 0.11965652E4 0.11965652E4 +(~0.27182817E1, 0.123E2, 0.123E2): ~0.21134867E2 ~0.21134867E2 +(~0.27182817E1, 0.123E2, 0.31415927E1): ~0.30293274E2 ~0.30293274E2 +(~0.27182817E1, 0.123E2, 0.27182817E1): ~0.30716585E2 ~0.30716585E2 +(~0.27182817E1, 0.123E2, 0.123E1): ~0.32204865E2 ~0.32204865E2 +(~0.27182817E1, 0.123E2, 0.123): ~0.33311867E2 ~0.33311867E2 +(~0.27182817E1, 0.123E2, 0.123E~2): ~0.33433636E2 ~0.33433636E2 +(~0.27182817E1, 0.123E2, 0.11754944E~37): ~0.33434868E2 ~0.33434868E2 +(~0.27182817E1, 0.123E2, 0.5877472E~38): ~0.33434868E2 ~0.33434868E2 +(~0.27182817E1, 0.123E2, 0.1E~44): ~0.33434868E2 ~0.33434868E2 +(~0.27182817E1, 0.123E2, 0.0): ~0.33434868E2 ~0.33434868E2 +(~0.27182817E1, 0.123E2, ~0.123E4): ~0.12634348E4 ~0.12634348E4 +(~0.27182817E1, 0.123E2, ~0.123E2): ~0.45734867E2 ~0.45734867E2 +(~0.27182817E1, 0.123E2, ~0.31415927E1): ~0.36576458E2 ~0.36576458E2 +(~0.27182817E1, 0.123E2, ~0.27182817E1): ~0.3615315E2 ~0.3615315E2 +(~0.27182817E1, 0.123E2, ~0.123E1): ~0.34664867E2 ~0.34664867E2 +(~0.27182817E1, 0.123E2, ~0.123): ~0.33557865E2 ~0.33557865E2 +(~0.27182817E1, 0.123E2, ~0.123E~2): ~0.33436096E2 ~0.33436096E2 +(~0.27182817E1, 0.123E2, ~0.11754944E~37): ~0.33434868E2 ~0.33434868E2 +(~0.27182817E1, 0.123E2, ~0.5877472E~38): ~0.33434868E2 ~0.33434868E2 +(~0.27182817E1, 0.123E2, ~0.1E~44): ~0.33434868E2 ~0.33434868E2 +(~0.27182817E1, 0.123E2, ~0.0): ~0.33434868E2 ~0.33434868E2 +(~0.27182817E1, 0.31415927E1, 0.123E4): 0.12214602E4 0.12214602E4 +(~0.27182817E1, 0.31415927E1, 0.123E2): 0.3760266E1 0.3760266E1 +(~0.27182817E1, 0.31415927E1, 0.31415927E1): ~0.53981414E1 ~0.53981414E1 +(~0.27182817E1, 0.31415927E1, 0.27182817E1): ~0.58214526E1 ~0.58214526E1 +(~0.27182817E1, 0.31415927E1, 0.123E1): ~0.73097343E1 ~0.73097343E1 +(~0.27182817E1, 0.31415927E1, 0.123): ~0.8416734E1 ~0.8416734E1 +(~0.27182817E1, 0.31415927E1, 0.123E~2): ~0.8538505E1 ~0.8538505E1 +(~0.27182817E1, 0.31415927E1, 0.11754944E~37): ~0.8539734E1 ~0.8539734E1 +(~0.27182817E1, 0.31415927E1, 0.5877472E~38): ~0.8539734E1 ~0.8539734E1 +(~0.27182817E1, 0.31415927E1, 0.1E~44): ~0.8539734E1 ~0.8539734E1 +(~0.27182817E1, 0.31415927E1, 0.0): ~0.8539734E1 ~0.8539734E1 +(~0.27182817E1, 0.31415927E1, ~0.123E4): ~0.12385398E4 ~0.12385398E4 +(~0.27182817E1, 0.31415927E1, ~0.123E2): ~0.20839735E2 ~0.20839735E2 +(~0.27182817E1, 0.31415927E1, ~0.31415927E1): ~0.11681327E2 ~0.11681327E2 +(~0.27182817E1, 0.31415927E1, ~0.27182817E1): ~0.11258016E2 ~0.11258016E2 +(~0.27182817E1, 0.31415927E1, ~0.123E1): ~0.9769734E1 ~0.9769734E1 +(~0.27182817E1, 0.31415927E1, ~0.123): ~0.8662734E1 ~0.8662734E1 +(~0.27182817E1, 0.31415927E1, ~0.123E~2): ~0.8540964E1 ~0.8540964E1 +(~0.27182817E1, 0.31415927E1, ~0.11754944E~37): ~0.8539734E1 ~0.8539734E1 +(~0.27182817E1, 0.31415927E1, ~0.5877472E~38): ~0.8539734E1 ~0.8539734E1 +(~0.27182817E1, 0.31415927E1, ~0.1E~44): ~0.8539734E1 ~0.8539734E1 +(~0.27182817E1, 0.31415927E1, ~0.0): ~0.8539734E1 ~0.8539734E1 +(~0.27182817E1, 0.27182817E1, 0.123E4): 0.1222611E4 0.1222611E4 +(~0.27182817E1, 0.27182817E1, 0.123E2): 0.49109445E1 0.49109445E1 +(~0.27182817E1, 0.27182817E1, 0.31415927E1): ~0.42474627E1 ~0.42474627E1 +(~0.27182817E1, 0.27182817E1, 0.27182817E1): ~0.4670774E1 ~0.4670774E1 +(~0.27182817E1, 0.27182817E1, 0.123E1): ~0.61590557E1 ~0.61590557E1 +(~0.27182817E1, 0.27182817E1, 0.123): ~0.72660556E1 ~0.72660556E1 +(~0.27182817E1, 0.27182817E1, 0.123E~2): ~0.73878255E1 ~0.73878255E1 +(~0.27182817E1, 0.27182817E1, 0.11754944E~37): ~0.73890557E1 ~0.73890557E1 +(~0.27182817E1, 0.27182817E1, 0.5877472E~38): ~0.73890557E1 ~0.73890557E1 +(~0.27182817E1, 0.27182817E1, 0.1E~44): ~0.73890557E1 ~0.73890557E1 +(~0.27182817E1, 0.27182817E1, 0.0): ~0.73890557E1 ~0.73890557E1 +(~0.27182817E1, 0.27182817E1, ~0.123E4): ~0.1237389E4 ~0.1237389E4 +(~0.27182817E1, 0.27182817E1, ~0.123E2): ~0.19689056E2 ~0.19689056E2 +(~0.27182817E1, 0.27182817E1, ~0.31415927E1): ~0.10530648E2 ~0.10530648E2 +(~0.27182817E1, 0.27182817E1, ~0.27182817E1): ~0.10107337E2 ~0.10107337E2 +(~0.27182817E1, 0.27182817E1, ~0.123E1): ~0.8619056E1 ~0.8619056E1 +(~0.27182817E1, 0.27182817E1, ~0.123): ~0.7512056E1 ~0.7512056E1 +(~0.27182817E1, 0.27182817E1, ~0.123E~2): ~0.73902855E1 ~0.73902855E1 +(~0.27182817E1, 0.27182817E1, ~0.11754944E~37): ~0.73890557E1 ~0.73890557E1 +(~0.27182817E1, 0.27182817E1, ~0.5877472E~38): ~0.73890557E1 ~0.73890557E1 +(~0.27182817E1, 0.27182817E1, ~0.1E~44): ~0.73890557E1 ~0.73890557E1 +(~0.27182817E1, 0.27182817E1, ~0.0): ~0.73890557E1 ~0.73890557E1 +(~0.27182817E1, 0.123E1, 0.123E4): 0.12266565E4 0.12266565E4 +(~0.27182817E1, 0.123E1, 0.123E2): 0.8956513E1 0.8956513E1 +(~0.27182817E1, 0.123E1, 0.31415927E1): ~0.20189385 ~0.20189385 +(~0.27182817E1, 0.123E1, 0.27182817E1): ~0.62520486 ~0.62520486 +(~0.27182817E1, 0.123E1, 0.123E1): ~0.21134865E1 ~0.21134865E1 +(~0.27182817E1, 0.123E1, 0.123): ~0.32204866E1 ~0.32204866E1 +(~0.27182817E1, 0.123E1, 0.123E~2): ~0.33422565E1 ~0.33422565E1 +(~0.27182817E1, 0.123E1, 0.11754944E~37): ~0.33434865E1 ~0.33434865E1 +(~0.27182817E1, 0.123E1, 0.5877472E~38): ~0.33434865E1 ~0.33434865E1 +(~0.27182817E1, 0.123E1, 0.1E~44): ~0.33434865E1 ~0.33434865E1 +(~0.27182817E1, 0.123E1, 0.0): ~0.33434865E1 ~0.33434865E1 +(~0.27182817E1, 0.123E1, ~0.123E4): ~0.12333435E4 ~0.12333435E4 +(~0.27182817E1, 0.123E1, ~0.123E2): ~0.15643487E2 ~0.15643487E2 +(~0.27182817E1, 0.123E1, ~0.31415927E1): ~0.64850793E1 ~0.64850793E1 +(~0.27182817E1, 0.123E1, ~0.27182817E1): ~0.60617685E1 ~0.60617685E1 +(~0.27182817E1, 0.123E1, ~0.123E1): ~0.4573487E1 ~0.4573487E1 +(~0.27182817E1, 0.123E1, ~0.123): ~0.34664867E1 ~0.34664867E1 +(~0.27182817E1, 0.123E1, ~0.123E~2): ~0.33447165E1 ~0.33447165E1 +(~0.27182817E1, 0.123E1, ~0.11754944E~37): ~0.33434865E1 ~0.33434865E1 +(~0.27182817E1, 0.123E1, ~0.5877472E~38): ~0.33434865E1 ~0.33434865E1 +(~0.27182817E1, 0.123E1, ~0.1E~44): ~0.33434865E1 ~0.33434865E1 +(~0.27182817E1, 0.123E1, ~0.0): ~0.33434865E1 ~0.33434865E1 +(~0.27182817E1, 0.123, 0.123E4): 0.12296656E4 0.12296656E4 +(~0.27182817E1, 0.123, 0.123E2): 0.119656515E2 0.119656515E2 +(~0.27182817E1, 0.123, 0.31415927E1): 0.2807244E1 0.2807244E1 +(~0.27182817E1, 0.123, 0.27182817E1): 0.2383933E1 0.2383933E1 +(~0.27182817E1, 0.123, 0.123E1): 0.89565134 0.89565134 +(~0.27182817E1, 0.123, 0.123): ~0.21134867 ~0.21134867 +(~0.27182817E1, 0.123, 0.123E~2): ~0.33311868 ~0.33311868 +(~0.27182817E1, 0.123, 0.11754944E~37): ~0.33434868 ~0.33434868 +(~0.27182817E1, 0.123, 0.5877472E~38): ~0.33434868 ~0.33434868 +(~0.27182817E1, 0.123, 0.1E~44): ~0.33434868 ~0.33434868 +(~0.27182817E1, 0.123, 0.0): ~0.33434868 ~0.33434868 +(~0.27182817E1, 0.123, ~0.123E4): ~0.12303344E4 ~0.12303344E4 +(~0.27182817E1, 0.123, ~0.123E2): ~0.12634349E2 ~0.12634349E2 +(~0.27182817E1, 0.123, ~0.31415927E1): ~0.34759414E1 ~0.34759414E1 +(~0.27182817E1, 0.123, ~0.27182817E1): ~0.30526304E1 ~0.30526304E1 +(~0.27182817E1, 0.123, ~0.123E1): ~0.15643487E1 ~0.15643487E1 +(~0.27182817E1, 0.123, ~0.123): ~0.45734867 ~0.45734867 +(~0.27182817E1, 0.123, ~0.123E~2): ~0.33557865 ~0.33557865 +(~0.27182817E1, 0.123, ~0.11754944E~37): ~0.33434868 ~0.33434868 +(~0.27182817E1, 0.123, ~0.5877472E~38): ~0.33434868 ~0.33434868 +(~0.27182817E1, 0.123, ~0.1E~44): ~0.33434868 ~0.33434868 +(~0.27182817E1, 0.123, ~0.0): ~0.33434868 ~0.33434868 +(~0.27182817E1, 0.123E~2, 0.123E4): 0.12299967E4 0.12299967E4 +(~0.27182817E1, 0.123E~2, 0.123E2): 0.12296657E2 0.12296657E2 +(~0.27182817E1, 0.123E~2, 0.31415927E1): 0.31382492E1 0.31382492E1 +(~0.27182817E1, 0.123E~2, 0.27182817E1): 0.27149382E1 0.27149382E1 +(~0.27182817E1, 0.123E~2, 0.123E1): 0.12266566E1 0.12266566E1 +(~0.27182817E1, 0.123E~2, 0.123): 0.11965652 0.11965652 +(~0.27182817E1, 0.123E~2, 0.123E~2): ~0.21134866E~2 ~0.21134866E~2 +(~0.27182817E1, 0.123E~2, 0.11754944E~37): ~0.33434867E~2 ~0.33434867E~2 +(~0.27182817E1, 0.123E~2, 0.5877472E~38): ~0.33434867E~2 ~0.33434867E~2 +(~0.27182817E1, 0.123E~2, 0.1E~44): ~0.33434867E~2 ~0.33434867E~2 +(~0.27182817E1, 0.123E~2, 0.0): ~0.33434867E~2 ~0.33434867E~2 +(~0.27182817E1, 0.123E~2, ~0.123E4): ~0.12300033E4 ~0.12300033E4 +(~0.27182817E1, 0.123E~2, ~0.123E2): ~0.12303344E2 ~0.12303344E2 +(~0.27182817E1, 0.123E~2, ~0.31415927E1): ~0.31449363E1 ~0.31449363E1 +(~0.27182817E1, 0.123E~2, ~0.27182817E1): ~0.27216253E1 ~0.27216253E1 +(~0.27182817E1, 0.123E~2, ~0.123E1): ~0.12333435E1 ~0.12333435E1 +(~0.27182817E1, 0.123E~2, ~0.123): ~0.12634349 ~0.12634349 +(~0.27182817E1, 0.123E~2, ~0.123E~2): ~0.45734867E~2 ~0.45734867E~2 +(~0.27182817E1, 0.123E~2, ~0.11754944E~37): ~0.33434867E~2 ~0.33434867E~2 +(~0.27182817E1, 0.123E~2, ~0.5877472E~38): ~0.33434867E~2 ~0.33434867E~2 +(~0.27182817E1, 0.123E~2, ~0.1E~44): ~0.33434867E~2 ~0.33434867E~2 +(~0.27182817E1, 0.123E~2, ~0.0): ~0.33434867E~2 ~0.33434867E~2 +(~0.27182817E1, 0.11754944E~37, 0.1E~44): ~0.31953248E~37 ~0.31953248E~37 +(~0.27182817E1, 0.11754944E~37, ~0.1E~44): ~0.31953248E~37 ~0.31953248E~37 +(~0.27182817E1, 0.1E~44, 0.11754944E~37): 0.1175494E~37 0.1175494E~37 +(~0.27182817E1, 0.1E~44, 0.5877472E~38): 0.5877468E~38 0.5877468E~38 +(~0.27182817E1, 0.1E~44, 0.1E~44): ~0.3E~44 ~0.3E~44 +(~0.27182817E1, 0.1E~44, 0.0): ~0.4E~44 ~0.4E~44 +(~0.27182817E1, 0.1E~44, ~0.11754944E~37): ~0.11754948E~37 ~0.11754948E~37 +(~0.27182817E1, 0.1E~44, ~0.5877472E~38): ~0.5877476E~38 ~0.5877476E~38 +(~0.27182817E1, 0.1E~44, ~0.1E~44): ~0.6E~44 ~0.6E~44 +(~0.27182817E1, 0.1E~44, ~0.0): ~0.4E~44 ~0.4E~44 +(~0.27182817E1, ~0.34028235E39, 0.34028235E39): inf inf +(~0.27182817E1, ~0.34028235E39, 0.17014117E39): inf inf +(~0.27182817E1, ~0.34028235E39, 0.123E4): inf inf +(~0.27182817E1, ~0.34028235E39, 0.123E2): inf inf +(~0.27182817E1, ~0.34028235E39, 0.31415927E1): inf inf +(~0.27182817E1, ~0.34028235E39, 0.27182817E1): inf inf +(~0.27182817E1, ~0.34028235E39, 0.123E1): inf inf +(~0.27182817E1, ~0.34028235E39, 0.123): inf inf +(~0.27182817E1, ~0.34028235E39, 0.123E~2): inf inf +(~0.27182817E1, ~0.34028235E39, 0.11754944E~37): inf inf +(~0.27182817E1, ~0.34028235E39, 0.5877472E~38): inf inf +(~0.27182817E1, ~0.34028235E39, 0.1E~44): inf inf +(~0.27182817E1, ~0.34028235E39, 0.0): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.34028235E39): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.17014117E39): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.123E4): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.123E2): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.31415927E1): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.27182817E1): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.123E1): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.123): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.123E~2): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.11754944E~37): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.5877472E~38): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.1E~44): inf inf +(~0.27182817E1, ~0.34028235E39, ~0.0): inf inf +(~0.27182817E1, ~0.17014117E39, 0.34028235E39): inf inf +(~0.27182817E1, ~0.17014117E39, 0.17014117E39): inf inf +(~0.27182817E1, ~0.17014117E39, 0.123E4): inf inf +(~0.27182817E1, ~0.17014117E39, 0.123E2): inf inf +(~0.27182817E1, ~0.17014117E39, 0.31415927E1): inf inf +(~0.27182817E1, ~0.17014117E39, 0.27182817E1): inf inf +(~0.27182817E1, ~0.17014117E39, 0.123E1): inf inf +(~0.27182817E1, ~0.17014117E39, 0.123): inf inf +(~0.27182817E1, ~0.17014117E39, 0.123E~2): inf inf +(~0.27182817E1, ~0.17014117E39, 0.11754944E~37): inf inf +(~0.27182817E1, ~0.17014117E39, 0.5877472E~38): inf inf +(~0.27182817E1, ~0.17014117E39, 0.1E~44): inf inf +(~0.27182817E1, ~0.17014117E39, 0.0): inf inf +(~0.27182817E1, ~0.17014117E39, ~0.34028235E39): 0.1222093E39 0.1222093E39 +(~0.27182817E1, ~0.17014117E39, ~0.17014117E39): 0.29235047E39 0.29235047E39 +(~0.27182817E1, ~0.17014117E39, ~0.123E4): inf inf +(~0.27182817E1, ~0.17014117E39, ~0.123E2): inf inf +(~0.27182817E1, ~0.17014117E39, ~0.31415927E1): inf inf +(~0.27182817E1, ~0.17014117E39, ~0.27182817E1): inf inf +(~0.27182817E1, ~0.17014117E39, ~0.123E1): inf inf +(~0.27182817E1, ~0.17014117E39, ~0.123): inf inf +(~0.27182817E1, ~0.17014117E39, ~0.123E~2): inf inf +(~0.27182817E1, ~0.17014117E39, ~0.11754944E~37): inf inf +(~0.27182817E1, ~0.17014117E39, ~0.5877472E~38): inf inf +(~0.27182817E1, ~0.17014117E39, ~0.1E~44): inf inf +(~0.27182817E1, ~0.17014117E39, ~0.0): inf inf +(~0.27182817E1, ~0.123E4, 0.123E4): 0.45734863E4 0.45734863E4 +(~0.27182817E1, ~0.123E4, 0.123E2): 0.33557866E4 0.33557866E4 +(~0.27182817E1, ~0.123E4, 0.31415927E1): 0.33466282E4 0.33466282E4 +(~0.27182817E1, ~0.123E4, 0.27182817E1): 0.33462048E4 0.33462048E4 +(~0.27182817E1, ~0.123E4, 0.123E1): 0.33447166E4 0.33447166E4 +(~0.27182817E1, ~0.123E4, 0.123): 0.33436096E4 0.33436096E4 +(~0.27182817E1, ~0.123E4, 0.123E~2): 0.33434878E4 0.33434878E4 +(~0.27182817E1, ~0.123E4, 0.11754944E~37): 0.33434866E4 0.33434866E4 +(~0.27182817E1, ~0.123E4, 0.5877472E~38): 0.33434866E4 0.33434866E4 +(~0.27182817E1, ~0.123E4, 0.1E~44): 0.33434866E4 0.33434866E4 +(~0.27182817E1, ~0.123E4, 0.0): 0.33434866E4 0.33434866E4 +(~0.27182817E1, ~0.123E4, ~0.123E4): 0.21134866E4 0.21134866E4 +(~0.27182817E1, ~0.123E4, ~0.123E2): 0.33311865E4 0.33311865E4 +(~0.27182817E1, ~0.123E4, ~0.31415927E1): 0.3340345E4 0.3340345E4 +(~0.27182817E1, ~0.123E4, ~0.27182817E1): 0.33407683E4 0.33407683E4 +(~0.27182817E1, ~0.123E4, ~0.123E1): 0.33422566E4 0.33422566E4 +(~0.27182817E1, ~0.123E4, ~0.123): 0.33433635E4 0.33433635E4 +(~0.27182817E1, ~0.123E4, ~0.123E~2): 0.33434854E4 0.33434854E4 +(~0.27182817E1, ~0.123E4, ~0.11754944E~37): 0.33434866E4 0.33434866E4 +(~0.27182817E1, ~0.123E4, ~0.5877472E~38): 0.33434866E4 0.33434866E4 +(~0.27182817E1, ~0.123E4, ~0.1E~44): 0.33434866E4 0.33434866E4 +(~0.27182817E1, ~0.123E4, ~0.0): 0.33434866E4 0.33434866E4 +(~0.27182817E1, ~0.123E2, 0.123E4): 0.12634348E4 0.12634348E4 +(~0.27182817E1, ~0.123E2, 0.123E2): 0.45734867E2 0.45734867E2 +(~0.27182817E1, ~0.123E2, 0.31415927E1): 0.36576458E2 0.36576458E2 +(~0.27182817E1, ~0.123E2, 0.27182817E1): 0.3615315E2 0.3615315E2 +(~0.27182817E1, ~0.123E2, 0.123E1): 0.34664867E2 0.34664867E2 +(~0.27182817E1, ~0.123E2, 0.123): 0.33557865E2 0.33557865E2 +(~0.27182817E1, ~0.123E2, 0.123E~2): 0.33436096E2 0.33436096E2 +(~0.27182817E1, ~0.123E2, 0.11754944E~37): 0.33434868E2 0.33434868E2 +(~0.27182817E1, ~0.123E2, 0.5877472E~38): 0.33434868E2 0.33434868E2 +(~0.27182817E1, ~0.123E2, 0.1E~44): 0.33434868E2 0.33434868E2 +(~0.27182817E1, ~0.123E2, 0.0): 0.33434868E2 0.33434868E2 +(~0.27182817E1, ~0.123E2, ~0.123E4): ~0.11965652E4 ~0.11965652E4 +(~0.27182817E1, ~0.123E2, ~0.123E2): 0.21134867E2 0.21134867E2 +(~0.27182817E1, ~0.123E2, ~0.31415927E1): 0.30293274E2 0.30293274E2 +(~0.27182817E1, ~0.123E2, ~0.27182817E1): 0.30716585E2 0.30716585E2 +(~0.27182817E1, ~0.123E2, ~0.123E1): 0.32204865E2 0.32204865E2 +(~0.27182817E1, ~0.123E2, ~0.123): 0.33311867E2 0.33311867E2 +(~0.27182817E1, ~0.123E2, ~0.123E~2): 0.33433636E2 0.33433636E2 +(~0.27182817E1, ~0.123E2, ~0.11754944E~37): 0.33434868E2 0.33434868E2 +(~0.27182817E1, ~0.123E2, ~0.5877472E~38): 0.33434868E2 0.33434868E2 +(~0.27182817E1, ~0.123E2, ~0.1E~44): 0.33434868E2 0.33434868E2 +(~0.27182817E1, ~0.123E2, ~0.0): 0.33434868E2 0.33434868E2 +(~0.27182817E1, ~0.31415927E1, 0.123E4): 0.12385398E4 0.12385398E4 +(~0.27182817E1, ~0.31415927E1, 0.123E2): 0.20839735E2 0.20839735E2 +(~0.27182817E1, ~0.31415927E1, 0.31415927E1): 0.11681327E2 0.11681327E2 +(~0.27182817E1, ~0.31415927E1, 0.27182817E1): 0.11258016E2 0.11258016E2 +(~0.27182817E1, ~0.31415927E1, 0.123E1): 0.9769734E1 0.9769734E1 +(~0.27182817E1, ~0.31415927E1, 0.123): 0.8662734E1 0.8662734E1 +(~0.27182817E1, ~0.31415927E1, 0.123E~2): 0.8540964E1 0.8540964E1 +(~0.27182817E1, ~0.31415927E1, 0.11754944E~37): 0.8539734E1 0.8539734E1 +(~0.27182817E1, ~0.31415927E1, 0.5877472E~38): 0.8539734E1 0.8539734E1 +(~0.27182817E1, ~0.31415927E1, 0.1E~44): 0.8539734E1 0.8539734E1 +(~0.27182817E1, ~0.31415927E1, 0.0): 0.8539734E1 0.8539734E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E4): ~0.12214602E4 ~0.12214602E4 +(~0.27182817E1, ~0.31415927E1, ~0.123E2): ~0.3760266E1 ~0.3760266E1 +(~0.27182817E1, ~0.31415927E1, ~0.31415927E1): 0.53981414E1 0.53981414E1 +(~0.27182817E1, ~0.31415927E1, ~0.27182817E1): 0.58214526E1 0.58214526E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E1): 0.73097343E1 0.73097343E1 +(~0.27182817E1, ~0.31415927E1, ~0.123): 0.8416734E1 0.8416734E1 +(~0.27182817E1, ~0.31415927E1, ~0.123E~2): 0.8538505E1 0.8538505E1 +(~0.27182817E1, ~0.31415927E1, ~0.11754944E~37): 0.8539734E1 0.8539734E1 +(~0.27182817E1, ~0.31415927E1, ~0.5877472E~38): 0.8539734E1 0.8539734E1 +(~0.27182817E1, ~0.31415927E1, ~0.1E~44): 0.8539734E1 0.8539734E1 +(~0.27182817E1, ~0.31415927E1, ~0.0): 0.8539734E1 0.8539734E1 +(~0.27182817E1, ~0.27182817E1, 0.123E4): 0.1237389E4 0.1237389E4 +(~0.27182817E1, ~0.27182817E1, 0.123E2): 0.19689056E2 0.19689056E2 +(~0.27182817E1, ~0.27182817E1, 0.31415927E1): 0.10530648E2 0.10530648E2 +(~0.27182817E1, ~0.27182817E1, 0.27182817E1): 0.10107337E2 0.10107337E2 +(~0.27182817E1, ~0.27182817E1, 0.123E1): 0.8619056E1 0.8619056E1 +(~0.27182817E1, ~0.27182817E1, 0.123): 0.7512056E1 0.7512056E1 +(~0.27182817E1, ~0.27182817E1, 0.123E~2): 0.73902855E1 0.73902855E1 +(~0.27182817E1, ~0.27182817E1, 0.11754944E~37): 0.73890557E1 0.73890557E1 +(~0.27182817E1, ~0.27182817E1, 0.5877472E~38): 0.73890557E1 0.73890557E1 +(~0.27182817E1, ~0.27182817E1, 0.1E~44): 0.73890557E1 0.73890557E1 +(~0.27182817E1, ~0.27182817E1, 0.0): 0.73890557E1 0.73890557E1 +(~0.27182817E1, ~0.27182817E1, ~0.123E4): ~0.1222611E4 ~0.1222611E4 +(~0.27182817E1, ~0.27182817E1, ~0.123E2): ~0.49109445E1 ~0.49109445E1 +(~0.27182817E1, ~0.27182817E1, ~0.31415927E1): 0.42474627E1 0.42474627E1 +(~0.27182817E1, ~0.27182817E1, ~0.27182817E1): 0.4670774E1 0.4670774E1 +(~0.27182817E1, ~0.27182817E1, ~0.123E1): 0.61590557E1 0.61590557E1 +(~0.27182817E1, ~0.27182817E1, ~0.123): 0.72660556E1 0.72660556E1 +(~0.27182817E1, ~0.27182817E1, ~0.123E~2): 0.73878255E1 0.73878255E1 +(~0.27182817E1, ~0.27182817E1, ~0.11754944E~37): 0.73890557E1 0.73890557E1 +(~0.27182817E1, ~0.27182817E1, ~0.5877472E~38): 0.73890557E1 0.73890557E1 +(~0.27182817E1, ~0.27182817E1, ~0.1E~44): 0.73890557E1 0.73890557E1 +(~0.27182817E1, ~0.27182817E1, ~0.0): 0.73890557E1 0.73890557E1 +(~0.27182817E1, ~0.123E1, 0.123E4): 0.12333435E4 0.12333435E4 +(~0.27182817E1, ~0.123E1, 0.123E2): 0.15643487E2 0.15643487E2 +(~0.27182817E1, ~0.123E1, 0.31415927E1): 0.64850793E1 0.64850793E1 +(~0.27182817E1, ~0.123E1, 0.27182817E1): 0.60617685E1 0.60617685E1 +(~0.27182817E1, ~0.123E1, 0.123E1): 0.4573487E1 0.4573487E1 +(~0.27182817E1, ~0.123E1, 0.123): 0.34664867E1 0.34664867E1 +(~0.27182817E1, ~0.123E1, 0.123E~2): 0.33447165E1 0.33447165E1 +(~0.27182817E1, ~0.123E1, 0.11754944E~37): 0.33434865E1 0.33434865E1 +(~0.27182817E1, ~0.123E1, 0.5877472E~38): 0.33434865E1 0.33434865E1 +(~0.27182817E1, ~0.123E1, 0.1E~44): 0.33434865E1 0.33434865E1 +(~0.27182817E1, ~0.123E1, 0.0): 0.33434865E1 0.33434865E1 +(~0.27182817E1, ~0.123E1, ~0.123E4): ~0.12266565E4 ~0.12266565E4 +(~0.27182817E1, ~0.123E1, ~0.123E2): ~0.8956513E1 ~0.8956513E1 +(~0.27182817E1, ~0.123E1, ~0.31415927E1): 0.20189385 0.20189385 +(~0.27182817E1, ~0.123E1, ~0.27182817E1): 0.62520486 0.62520486 +(~0.27182817E1, ~0.123E1, ~0.123E1): 0.21134865E1 0.21134865E1 +(~0.27182817E1, ~0.123E1, ~0.123): 0.32204866E1 0.32204866E1 +(~0.27182817E1, ~0.123E1, ~0.123E~2): 0.33422565E1 0.33422565E1 +(~0.27182817E1, ~0.123E1, ~0.11754944E~37): 0.33434865E1 0.33434865E1 +(~0.27182817E1, ~0.123E1, ~0.5877472E~38): 0.33434865E1 0.33434865E1 +(~0.27182817E1, ~0.123E1, ~0.1E~44): 0.33434865E1 0.33434865E1 +(~0.27182817E1, ~0.123E1, ~0.0): 0.33434865E1 0.33434865E1 +(~0.27182817E1, ~0.123, 0.123E4): 0.12303344E4 0.12303344E4 +(~0.27182817E1, ~0.123, 0.123E2): 0.12634349E2 0.12634349E2 +(~0.27182817E1, ~0.123, 0.31415927E1): 0.34759414E1 0.34759414E1 +(~0.27182817E1, ~0.123, 0.27182817E1): 0.30526304E1 0.30526304E1 +(~0.27182817E1, ~0.123, 0.123E1): 0.15643487E1 0.15643487E1 +(~0.27182817E1, ~0.123, 0.123): 0.45734867 0.45734867 +(~0.27182817E1, ~0.123, 0.123E~2): 0.33557865 0.33557865 +(~0.27182817E1, ~0.123, 0.11754944E~37): 0.33434868 0.33434868 +(~0.27182817E1, ~0.123, 0.5877472E~38): 0.33434868 0.33434868 +(~0.27182817E1, ~0.123, 0.1E~44): 0.33434868 0.33434868 +(~0.27182817E1, ~0.123, 0.0): 0.33434868 0.33434868 +(~0.27182817E1, ~0.123, ~0.123E4): ~0.12296656E4 ~0.12296656E4 +(~0.27182817E1, ~0.123, ~0.123E2): ~0.119656515E2 ~0.119656515E2 +(~0.27182817E1, ~0.123, ~0.31415927E1): ~0.2807244E1 ~0.2807244E1 +(~0.27182817E1, ~0.123, ~0.27182817E1): ~0.2383933E1 ~0.2383933E1 +(~0.27182817E1, ~0.123, ~0.123E1): ~0.89565134 ~0.89565134 +(~0.27182817E1, ~0.123, ~0.123): 0.21134867 0.21134867 +(~0.27182817E1, ~0.123, ~0.123E~2): 0.33311868 0.33311868 +(~0.27182817E1, ~0.123, ~0.11754944E~37): 0.33434868 0.33434868 +(~0.27182817E1, ~0.123, ~0.5877472E~38): 0.33434868 0.33434868 +(~0.27182817E1, ~0.123, ~0.1E~44): 0.33434868 0.33434868 +(~0.27182817E1, ~0.123, ~0.0): 0.33434868 0.33434868 +(~0.27182817E1, ~0.123E~2, 0.123E4): 0.12300033E4 0.12300033E4 +(~0.27182817E1, ~0.123E~2, 0.123E2): 0.12303344E2 0.12303344E2 +(~0.27182817E1, ~0.123E~2, 0.31415927E1): 0.31449363E1 0.31449363E1 +(~0.27182817E1, ~0.123E~2, 0.27182817E1): 0.27216253E1 0.27216253E1 +(~0.27182817E1, ~0.123E~2, 0.123E1): 0.12333435E1 0.12333435E1 +(~0.27182817E1, ~0.123E~2, 0.123): 0.12634349 0.12634349 +(~0.27182817E1, ~0.123E~2, 0.123E~2): 0.45734867E~2 0.45734867E~2 +(~0.27182817E1, ~0.123E~2, 0.11754944E~37): 0.33434867E~2 0.33434867E~2 +(~0.27182817E1, ~0.123E~2, 0.5877472E~38): 0.33434867E~2 0.33434867E~2 +(~0.27182817E1, ~0.123E~2, 0.1E~44): 0.33434867E~2 0.33434867E~2 +(~0.27182817E1, ~0.123E~2, 0.0): 0.33434867E~2 0.33434867E~2 +(~0.27182817E1, ~0.123E~2, ~0.123E4): ~0.12299967E4 ~0.12299967E4 +(~0.27182817E1, ~0.123E~2, ~0.123E2): ~0.12296657E2 ~0.12296657E2 +(~0.27182817E1, ~0.123E~2, ~0.31415927E1): ~0.31382492E1 ~0.31382492E1 +(~0.27182817E1, ~0.123E~2, ~0.27182817E1): ~0.27149382E1 ~0.27149382E1 +(~0.27182817E1, ~0.123E~2, ~0.123E1): ~0.12266566E1 ~0.12266566E1 +(~0.27182817E1, ~0.123E~2, ~0.123): ~0.11965652 ~0.11965652 +(~0.27182817E1, ~0.123E~2, ~0.123E~2): 0.21134866E~2 0.21134866E~2 +(~0.27182817E1, ~0.123E~2, ~0.11754944E~37): 0.33434867E~2 0.33434867E~2 +(~0.27182817E1, ~0.123E~2, ~0.5877472E~38): 0.33434867E~2 0.33434867E~2 +(~0.27182817E1, ~0.123E~2, ~0.1E~44): 0.33434867E~2 0.33434867E~2 +(~0.27182817E1, ~0.123E~2, ~0.0): 0.33434867E~2 0.33434867E~2 +(~0.27182817E1, ~0.11754944E~37, 0.1E~44): 0.31953248E~37 0.31953248E~37 +(~0.27182817E1, ~0.11754944E~37, ~0.1E~44): 0.31953248E~37 0.31953248E~37 +(~0.27182817E1, ~0.1E~44, 0.11754944E~37): 0.11754948E~37 0.11754948E~37 +(~0.27182817E1, ~0.1E~44, 0.5877472E~38): 0.5877476E~38 0.5877476E~38 +(~0.27182817E1, ~0.1E~44, 0.1E~44): 0.6E~44 0.6E~44 +(~0.27182817E1, ~0.1E~44, 0.0): 0.4E~44 0.4E~44 +(~0.27182817E1, ~0.1E~44, ~0.11754944E~37): ~0.1175494E~37 ~0.1175494E~37 +(~0.27182817E1, ~0.1E~44, ~0.5877472E~38): ~0.5877468E~38 ~0.5877468E~38 +(~0.27182817E1, ~0.1E~44, ~0.1E~44): 0.3E~44 0.3E~44 +(~0.27182817E1, ~0.1E~44, ~0.0): 0.4E~44 0.4E~44 +(~0.123E1, 0.34028235E39, 0.34028235E39): ~0.78264946E38 ~0.78264946E38 +(~0.123E1, 0.34028235E39, 0.17014117E39): ~0.24840611E39 ~0.24840611E39 +(~0.123E1, 0.34028235E39, 0.123E4): ~inf ~inf +(~0.123E1, 0.34028235E39, 0.123E2): ~inf ~inf +(~0.123E1, 0.34028235E39, 0.31415927E1): ~inf ~inf +(~0.123E1, 0.34028235E39, 0.27182817E1): ~inf ~inf +(~0.123E1, 0.34028235E39, 0.123E1): ~inf ~inf +(~0.123E1, 0.34028235E39, 0.123): ~inf ~inf +(~0.123E1, 0.34028235E39, 0.123E~2): ~inf ~inf +(~0.123E1, 0.34028235E39, 0.11754944E~37): ~inf ~inf +(~0.123E1, 0.34028235E39, 0.5877472E~38): ~inf ~inf +(~0.123E1, 0.34028235E39, 0.1E~44): ~inf ~inf +(~0.123E1, 0.34028235E39, 0.0): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.34028235E39): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.17014117E39): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.123E4): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.123E2): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.31415927E1): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.27182817E1): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.123E1): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.123): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.123E~2): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.11754944E~37): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.5877472E~38): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.1E~44): ~inf ~inf +(~0.123E1, 0.34028235E39, ~0.0): ~inf ~inf +(~0.123E1, 0.17014117E39, 0.34028235E39): 0.1310087E39 0.1310087E39 +(~0.123E1, 0.17014117E39, 0.17014117E39): ~0.39132473E38 ~0.39132473E38 +(~0.123E1, 0.17014117E39, 0.123E4): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, 0.123E2): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, 0.31415927E1): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, 0.27182817E1): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, 0.123E1): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, 0.123): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, 0.123E~2): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, 0.11754944E~37): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, 0.5877472E~38): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, 0.1E~44): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, 0.0): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, ~0.34028235E39): ~inf ~inf +(~0.123E1, 0.17014117E39, ~0.17014117E39): ~inf ~inf +(~0.123E1, 0.17014117E39, ~0.123E4): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, ~0.123E2): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, ~0.31415927E1): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, ~0.27182817E1): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, ~0.123E1): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, ~0.123): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, ~0.123E~2): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, ~0.11754944E~37): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, ~0.5877472E~38): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, ~0.1E~44): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.17014117E39, ~0.0): ~0.20927364E39 ~0.20927364E39 +(~0.123E1, 0.123E4, 0.123E4): ~0.28290002E3 ~0.28290002E3 +(~0.123E1, 0.123E4, 0.123E2): ~0.15006E4 ~0.15006E4 +(~0.123E1, 0.123E4, 0.31415927E1): ~0.15097584E4 ~0.15097584E4 +(~0.123E1, 0.123E4, 0.27182817E1): ~0.15101818E4 ~0.15101818E4 +(~0.123E1, 0.123E4, 0.123E1): ~0.151167E4 ~0.151167E4 +(~0.123E1, 0.123E4, 0.123): ~0.1512777E4 ~0.1512777E4 +(~0.123E1, 0.123E4, 0.123E~2): ~0.15128988E4 ~0.15128988E4 +(~0.123E1, 0.123E4, 0.11754944E~37): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, 0.5877472E~38): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, 0.1E~44): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, 0.0): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, ~0.123E4): ~0.27429E4 ~0.27429E4 +(~0.123E1, 0.123E4, ~0.123E2): ~0.15252001E4 ~0.15252001E4 +(~0.123E1, 0.123E4, ~0.31415927E1): ~0.15160416E4 ~0.15160416E4 +(~0.123E1, 0.123E4, ~0.27182817E1): ~0.15156183E4 ~0.15156183E4 +(~0.123E1, 0.123E4, ~0.123E1): ~0.151413E4 ~0.151413E4 +(~0.123E1, 0.123E4, ~0.123): ~0.15130231E4 ~0.15130231E4 +(~0.123E1, 0.123E4, ~0.123E~2): ~0.15129012E4 ~0.15129012E4 +(~0.123E1, 0.123E4, ~0.11754944E~37): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, ~0.5877472E~38): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, ~0.1E~44): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, ~0.0): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E2, 0.123E4): 0.1214871E4 0.1214871E4 +(~0.123E1, 0.123E2, 0.123E2): ~0.28290002E1 ~0.28290002E1 +(~0.123E1, 0.123E2, 0.31415927E1): ~0.11987408E2 ~0.11987408E2 +(~0.123E1, 0.123E2, 0.27182817E1): ~0.12410719E2 ~0.12410719E2 +(~0.123E1, 0.123E2, 0.123E1): ~0.13899E2 ~0.13899E2 +(~0.123E1, 0.123E2, 0.123): ~0.150060005E2 ~0.150060005E2 +(~0.123E1, 0.123E2, 0.123E~2): ~0.1512777E2 ~0.1512777E2 +(~0.123E1, 0.123E2, 0.11754944E~37): ~0.15129001E2 ~0.15129001E2 +(~0.123E1, 0.123E2, 0.5877472E~38): ~0.15129001E2 ~0.15129001E2 +(~0.123E1, 0.123E2, 0.1E~44): ~0.15129001E2 ~0.15129001E2 +(~0.123E1, 0.123E2, 0.0): ~0.15129001E2 ~0.15129001E2 +(~0.123E1, 0.123E2, ~0.123E4): ~0.1245129E4 ~0.1245129E4 +(~0.123E1, 0.123E2, ~0.123E2): ~0.27429E2 ~0.27429E2 +(~0.123E1, 0.123E2, ~0.31415927E1): ~0.18270594E2 ~0.18270594E2 +(~0.123E1, 0.123E2, ~0.27182817E1): ~0.17847282E2 ~0.17847282E2 +(~0.123E1, 0.123E2, ~0.123E1): ~0.16359001E2 ~0.16359001E2 +(~0.123E1, 0.123E2, ~0.123): ~0.15252001E2 ~0.15252001E2 +(~0.123E1, 0.123E2, ~0.123E~2): ~0.15130231E2 ~0.15130231E2 +(~0.123E1, 0.123E2, ~0.11754944E~37): ~0.15129001E2 ~0.15129001E2 +(~0.123E1, 0.123E2, ~0.5877472E~38): ~0.15129001E2 ~0.15129001E2 +(~0.123E1, 0.123E2, ~0.1E~44): ~0.15129001E2 ~0.15129001E2 +(~0.123E1, 0.123E2, ~0.0): ~0.15129001E2 ~0.15129001E2 +(~0.123E1, 0.31415927E1, 0.123E4): 0.12261359E4 0.12261359E4 +(~0.123E1, 0.31415927E1, 0.123E2): 0.8435841E1 0.8435841E1 +(~0.123E1, 0.31415927E1, 0.31415927E1): ~0.72256637 ~0.72256637 +(~0.123E1, 0.31415927E1, 0.27182817E1): ~0.11458774E1 ~0.11458774E1 +(~0.123E1, 0.31415927E1, 0.123E1): ~0.2634159E1 ~0.2634159E1 +(~0.123E1, 0.31415927E1, 0.123): ~0.37411592E1 ~0.37411592E1 +(~0.123E1, 0.31415927E1, 0.123E~2): ~0.3862929E1 ~0.3862929E1 +(~0.123E1, 0.31415927E1, 0.11754944E~37): ~0.3864159E1 ~0.3864159E1 +(~0.123E1, 0.31415927E1, 0.5877472E~38): ~0.3864159E1 ~0.3864159E1 +(~0.123E1, 0.31415927E1, 0.1E~44): ~0.3864159E1 ~0.3864159E1 +(~0.123E1, 0.31415927E1, 0.0): ~0.3864159E1 ~0.3864159E1 +(~0.123E1, 0.31415927E1, ~0.123E4): ~0.12338641E4 ~0.12338641E4 +(~0.123E1, 0.31415927E1, ~0.123E2): ~0.1616416E2 ~0.1616416E2 +(~0.123E1, 0.31415927E1, ~0.31415927E1): ~0.7005752E1 ~0.7005752E1 +(~0.123E1, 0.31415927E1, ~0.27182817E1): ~0.6582441E1 ~0.6582441E1 +(~0.123E1, 0.31415927E1, ~0.123E1): ~0.5094159E1 ~0.5094159E1 +(~0.123E1, 0.31415927E1, ~0.123): ~0.39871593E1 ~0.39871593E1 +(~0.123E1, 0.31415927E1, ~0.123E~2): ~0.3865389E1 ~0.3865389E1 +(~0.123E1, 0.31415927E1, ~0.11754944E~37): ~0.3864159E1 ~0.3864159E1 +(~0.123E1, 0.31415927E1, ~0.5877472E~38): ~0.3864159E1 ~0.3864159E1 +(~0.123E1, 0.31415927E1, ~0.1E~44): ~0.3864159E1 ~0.3864159E1 +(~0.123E1, 0.31415927E1, ~0.0): ~0.3864159E1 ~0.3864159E1 +(~0.123E1, 0.27182817E1, 0.123E4): 0.12266565E4 0.12266565E4 +(~0.123E1, 0.27182817E1, 0.123E2): 0.8956513E1 0.8956513E1 +(~0.123E1, 0.27182817E1, 0.31415927E1): ~0.20189385 ~0.20189385 +(~0.123E1, 0.27182817E1, 0.27182817E1): ~0.62520486 ~0.62520486 +(~0.123E1, 0.27182817E1, 0.123E1): ~0.21134865E1 ~0.21134865E1 +(~0.123E1, 0.27182817E1, 0.123): ~0.32204866E1 ~0.32204866E1 +(~0.123E1, 0.27182817E1, 0.123E~2): ~0.33422565E1 ~0.33422565E1 +(~0.123E1, 0.27182817E1, 0.11754944E~37): ~0.33434865E1 ~0.33434865E1 +(~0.123E1, 0.27182817E1, 0.5877472E~38): ~0.33434865E1 ~0.33434865E1 +(~0.123E1, 0.27182817E1, 0.1E~44): ~0.33434865E1 ~0.33434865E1 +(~0.123E1, 0.27182817E1, 0.0): ~0.33434865E1 ~0.33434865E1 +(~0.123E1, 0.27182817E1, ~0.123E4): ~0.12333435E4 ~0.12333435E4 +(~0.123E1, 0.27182817E1, ~0.123E2): ~0.15643487E2 ~0.15643487E2 +(~0.123E1, 0.27182817E1, ~0.31415927E1): ~0.64850793E1 ~0.64850793E1 +(~0.123E1, 0.27182817E1, ~0.27182817E1): ~0.60617685E1 ~0.60617685E1 +(~0.123E1, 0.27182817E1, ~0.123E1): ~0.4573487E1 ~0.4573487E1 +(~0.123E1, 0.27182817E1, ~0.123): ~0.34664867E1 ~0.34664867E1 +(~0.123E1, 0.27182817E1, ~0.123E~2): ~0.33447165E1 ~0.33447165E1 +(~0.123E1, 0.27182817E1, ~0.11754944E~37): ~0.33434865E1 ~0.33434865E1 +(~0.123E1, 0.27182817E1, ~0.5877472E~38): ~0.33434865E1 ~0.33434865E1 +(~0.123E1, 0.27182817E1, ~0.1E~44): ~0.33434865E1 ~0.33434865E1 +(~0.123E1, 0.27182817E1, ~0.0): ~0.33434865E1 ~0.33434865E1 +(~0.123E1, 0.123E1, 0.123E4): 0.1228487E4 0.1228487E4 +(~0.123E1, 0.123E1, 0.123E2): 0.107871E2 0.107871E2 +(~0.123E1, 0.123E1, 0.31415927E1): 0.16286927E1 0.16286927E1 +(~0.123E1, 0.123E1, 0.27182817E1): 0.12053818E1 0.12053818E1 +(~0.123E1, 0.123E1, 0.123E1): ~0.28290004 ~0.28290004 +(~0.123E1, 0.123E1, 0.123): ~0.13899001E1 ~0.13899001E1 +(~0.123E1, 0.123E1, 0.123E~2): ~0.151167E1 ~0.151167E1 +(~0.123E1, 0.123E1, 0.11754944E~37): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, 0.5877472E~38): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, 0.1E~44): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, 0.0): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, ~0.123E4): ~0.1231513E4 ~0.1231513E4 +(~0.123E1, 0.123E1, ~0.123E2): ~0.13812901E2 ~0.13812901E2 +(~0.123E1, 0.123E1, ~0.31415927E1): ~0.4654493E1 ~0.4654493E1 +(~0.123E1, 0.123E1, ~0.27182817E1): ~0.42311816E1 ~0.42311816E1 +(~0.123E1, 0.123E1, ~0.123E1): ~0.27429001E1 ~0.27429001E1 +(~0.123E1, 0.123E1, ~0.123): ~0.16359E1 ~0.16359E1 +(~0.123E1, 0.123E1, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(~0.123E1, 0.123E1, ~0.11754944E~37): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, ~0.5877472E~38): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, ~0.1E~44): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, ~0.0): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123, 0.123E4): 0.12298488E4 0.12298488E4 +(~0.123E1, 0.123, 0.123E2): 0.1214871E2 0.1214871E2 +(~0.123E1, 0.123, 0.31415927E1): 0.29903028E1 0.29903028E1 +(~0.123E1, 0.123, 0.27182817E1): 0.25669918E1 0.25669918E1 +(~0.123E1, 0.123, 0.123E1): 0.107871E1 0.107871E1 +(~0.123E1, 0.123, 0.123): ~0.28290004E~1 ~0.28290004E~1 +(~0.123E1, 0.123, 0.123E~2): ~0.15006001 ~0.15006001 +(~0.123E1, 0.123, 0.11754944E~37): ~0.15129 ~0.15129 +(~0.123E1, 0.123, 0.5877472E~38): ~0.15129 ~0.15129 +(~0.123E1, 0.123, 0.1E~44): ~0.15129 ~0.15129 +(~0.123E1, 0.123, 0.0): ~0.15129 ~0.15129 +(~0.123E1, 0.123, ~0.123E4): ~0.12301512E4 ~0.12301512E4 +(~0.123E1, 0.123, ~0.123E2): ~0.1245129E2 ~0.1245129E2 +(~0.123E1, 0.123, ~0.31415927E1): ~0.32928827E1 ~0.32928827E1 +(~0.123E1, 0.123, ~0.27182817E1): ~0.28695717E1 ~0.28695717E1 +(~0.123E1, 0.123, ~0.123E1): ~0.13812901E1 ~0.13812901E1 +(~0.123E1, 0.123, ~0.123): ~0.27429 ~0.27429 +(~0.123E1, 0.123, ~0.123E~2): ~0.15252 ~0.15252 +(~0.123E1, 0.123, ~0.11754944E~37): ~0.15129 ~0.15129 +(~0.123E1, 0.123, ~0.5877472E~38): ~0.15129 ~0.15129 +(~0.123E1, 0.123, ~0.1E~44): ~0.15129 ~0.15129 +(~0.123E1, 0.123, ~0.0): ~0.15129 ~0.15129 +(~0.123E1, 0.123E~2, 0.123E4): 0.12299985E4 0.12299985E4 +(~0.123E1, 0.123E~2, 0.123E2): 0.12298488E2 0.12298488E2 +(~0.123E1, 0.123E~2, 0.31415927E1): 0.31400797E1 0.31400797E1 +(~0.123E1, 0.123E~2, 0.27182817E1): 0.27167687E1 0.27167687E1 +(~0.123E1, 0.123E~2, 0.123E1): 0.12284871E1 0.12284871E1 +(~0.123E1, 0.123E~2, 0.123): 0.1214871 0.1214871 +(~0.123E1, 0.123E~2, 0.123E~2): ~0.28290003E~3 ~0.28290003E~3 +(~0.123E1, 0.123E~2, 0.11754944E~37): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E1, 0.123E~2, 0.5877472E~38): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E1, 0.123E~2, 0.1E~44): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E1, 0.123E~2, 0.0): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E1, 0.123E~2, ~0.123E4): ~0.12300015E4 ~0.12300015E4 +(~0.123E1, 0.123E~2, ~0.123E2): ~0.12301513E2 ~0.12301513E2 +(~0.123E1, 0.123E~2, ~0.31415927E1): ~0.31431057E1 ~0.31431057E1 +(~0.123E1, 0.123E~2, ~0.27182817E1): ~0.27197948E1 ~0.27197948E1 +(~0.123E1, 0.123E~2, ~0.123E1): ~0.12315129E1 ~0.12315129E1 +(~0.123E1, 0.123E~2, ~0.123): ~0.1245129 ~0.1245129 +(~0.123E1, 0.123E~2, ~0.123E~2): ~0.27429E~2 ~0.27429E~2 +(~0.123E1, 0.123E~2, ~0.11754944E~37): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E1, 0.123E~2, ~0.5877472E~38): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E1, 0.123E~2, ~0.1E~44): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E1, 0.123E~2, ~0.0): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E1, 0.1E~44, 0.11754944E~37): 0.11754942E~37 0.11754942E~37 +(~0.123E1, 0.1E~44, 0.5877472E~38): 0.587747E~38 0.587747E~38 +(~0.123E1, 0.1E~44, 0.1E~44): ~0.0 ~0.0 +(~0.123E1, 0.1E~44, 0.0): ~0.1E~44 ~0.1E~44 +(~0.123E1, 0.1E~44, ~0.11754944E~37): ~0.11754945E~37 ~0.11754945E~37 +(~0.123E1, 0.1E~44, ~0.5877472E~38): ~0.5877473E~38 ~0.5877473E~38 +(~0.123E1, 0.1E~44, ~0.1E~44): ~0.3E~44 ~0.3E~44 +(~0.123E1, 0.1E~44, ~0.0): ~0.1E~44 ~0.1E~44 +(~0.123E1, ~0.34028235E39, 0.34028235E39): inf inf +(~0.123E1, ~0.34028235E39, 0.17014117E39): inf inf +(~0.123E1, ~0.34028235E39, 0.123E4): inf inf +(~0.123E1, ~0.34028235E39, 0.123E2): inf inf +(~0.123E1, ~0.34028235E39, 0.31415927E1): inf inf +(~0.123E1, ~0.34028235E39, 0.27182817E1): inf inf +(~0.123E1, ~0.34028235E39, 0.123E1): inf inf +(~0.123E1, ~0.34028235E39, 0.123): inf inf +(~0.123E1, ~0.34028235E39, 0.123E~2): inf inf +(~0.123E1, ~0.34028235E39, 0.11754944E~37): inf inf +(~0.123E1, ~0.34028235E39, 0.5877472E~38): inf inf +(~0.123E1, ~0.34028235E39, 0.1E~44): inf inf +(~0.123E1, ~0.34028235E39, 0.0): inf inf +(~0.123E1, ~0.34028235E39, ~0.34028235E39): 0.78264946E38 0.78264946E38 +(~0.123E1, ~0.34028235E39, ~0.17014117E39): 0.24840611E39 0.24840611E39 +(~0.123E1, ~0.34028235E39, ~0.123E4): inf inf +(~0.123E1, ~0.34028235E39, ~0.123E2): inf inf +(~0.123E1, ~0.34028235E39, ~0.31415927E1): inf inf +(~0.123E1, ~0.34028235E39, ~0.27182817E1): inf inf +(~0.123E1, ~0.34028235E39, ~0.123E1): inf inf +(~0.123E1, ~0.34028235E39, ~0.123): inf inf +(~0.123E1, ~0.34028235E39, ~0.123E~2): inf inf +(~0.123E1, ~0.34028235E39, ~0.11754944E~37): inf inf +(~0.123E1, ~0.34028235E39, ~0.5877472E~38): inf inf +(~0.123E1, ~0.34028235E39, ~0.1E~44): inf inf +(~0.123E1, ~0.34028235E39, ~0.0): inf inf +(~0.123E1, ~0.17014117E39, 0.34028235E39): inf inf +(~0.123E1, ~0.17014117E39, 0.17014117E39): inf inf +(~0.123E1, ~0.17014117E39, 0.123E4): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, 0.123E2): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, 0.31415927E1): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, 0.27182817E1): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, 0.123E1): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, 0.123): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, 0.123E~2): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, 0.11754944E~37): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, 0.5877472E~38): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, 0.1E~44): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, 0.0): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, ~0.34028235E39): ~0.1310087E39 ~0.1310087E39 +(~0.123E1, ~0.17014117E39, ~0.17014117E39): 0.39132473E38 0.39132473E38 +(~0.123E1, ~0.17014117E39, ~0.123E4): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, ~0.123E2): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, ~0.31415927E1): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, ~0.27182817E1): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, ~0.123E1): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, ~0.123): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, ~0.123E~2): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, ~0.11754944E~37): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, ~0.5877472E~38): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, ~0.1E~44): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.17014117E39, ~0.0): 0.20927364E39 0.20927364E39 +(~0.123E1, ~0.123E4, 0.123E4): 0.27429E4 0.27429E4 +(~0.123E1, ~0.123E4, 0.123E2): 0.15252001E4 0.15252001E4 +(~0.123E1, ~0.123E4, 0.31415927E1): 0.15160416E4 0.15160416E4 +(~0.123E1, ~0.123E4, 0.27182817E1): 0.15156183E4 0.15156183E4 +(~0.123E1, ~0.123E4, 0.123E1): 0.151413E4 0.151413E4 +(~0.123E1, ~0.123E4, 0.123): 0.15130231E4 0.15130231E4 +(~0.123E1, ~0.123E4, 0.123E~2): 0.15129012E4 0.15129012E4 +(~0.123E1, ~0.123E4, 0.11754944E~37): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, 0.5877472E~38): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, 0.1E~44): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, 0.0): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, ~0.123E4): 0.28290002E3 0.28290002E3 +(~0.123E1, ~0.123E4, ~0.123E2): 0.15006E4 0.15006E4 +(~0.123E1, ~0.123E4, ~0.31415927E1): 0.15097584E4 0.15097584E4 +(~0.123E1, ~0.123E4, ~0.27182817E1): 0.15101818E4 0.15101818E4 +(~0.123E1, ~0.123E4, ~0.123E1): 0.151167E4 0.151167E4 +(~0.123E1, ~0.123E4, ~0.123): 0.1512777E4 0.1512777E4 +(~0.123E1, ~0.123E4, ~0.123E~2): 0.15128988E4 0.15128988E4 +(~0.123E1, ~0.123E4, ~0.11754944E~37): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, ~0.5877472E~38): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, ~0.1E~44): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, ~0.0): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E2, 0.123E4): 0.1245129E4 0.1245129E4 +(~0.123E1, ~0.123E2, 0.123E2): 0.27429E2 0.27429E2 +(~0.123E1, ~0.123E2, 0.31415927E1): 0.18270594E2 0.18270594E2 +(~0.123E1, ~0.123E2, 0.27182817E1): 0.17847282E2 0.17847282E2 +(~0.123E1, ~0.123E2, 0.123E1): 0.16359001E2 0.16359001E2 +(~0.123E1, ~0.123E2, 0.123): 0.15252001E2 0.15252001E2 +(~0.123E1, ~0.123E2, 0.123E~2): 0.15130231E2 0.15130231E2 +(~0.123E1, ~0.123E2, 0.11754944E~37): 0.15129001E2 0.15129001E2 +(~0.123E1, ~0.123E2, 0.5877472E~38): 0.15129001E2 0.15129001E2 +(~0.123E1, ~0.123E2, 0.1E~44): 0.15129001E2 0.15129001E2 +(~0.123E1, ~0.123E2, 0.0): 0.15129001E2 0.15129001E2 +(~0.123E1, ~0.123E2, ~0.123E4): ~0.1214871E4 ~0.1214871E4 +(~0.123E1, ~0.123E2, ~0.123E2): 0.28290002E1 0.28290002E1 +(~0.123E1, ~0.123E2, ~0.31415927E1): 0.11987408E2 0.11987408E2 +(~0.123E1, ~0.123E2, ~0.27182817E1): 0.12410719E2 0.12410719E2 +(~0.123E1, ~0.123E2, ~0.123E1): 0.13899E2 0.13899E2 +(~0.123E1, ~0.123E2, ~0.123): 0.150060005E2 0.150060005E2 +(~0.123E1, ~0.123E2, ~0.123E~2): 0.1512777E2 0.1512777E2 +(~0.123E1, ~0.123E2, ~0.11754944E~37): 0.15129001E2 0.15129001E2 +(~0.123E1, ~0.123E2, ~0.5877472E~38): 0.15129001E2 0.15129001E2 +(~0.123E1, ~0.123E2, ~0.1E~44): 0.15129001E2 0.15129001E2 +(~0.123E1, ~0.123E2, ~0.0): 0.15129001E2 0.15129001E2 +(~0.123E1, ~0.31415927E1, 0.123E4): 0.12338641E4 0.12338641E4 +(~0.123E1, ~0.31415927E1, 0.123E2): 0.1616416E2 0.1616416E2 +(~0.123E1, ~0.31415927E1, 0.31415927E1): 0.7005752E1 0.7005752E1 +(~0.123E1, ~0.31415927E1, 0.27182817E1): 0.6582441E1 0.6582441E1 +(~0.123E1, ~0.31415927E1, 0.123E1): 0.5094159E1 0.5094159E1 +(~0.123E1, ~0.31415927E1, 0.123): 0.39871593E1 0.39871593E1 +(~0.123E1, ~0.31415927E1, 0.123E~2): 0.3865389E1 0.3865389E1 +(~0.123E1, ~0.31415927E1, 0.11754944E~37): 0.3864159E1 0.3864159E1 +(~0.123E1, ~0.31415927E1, 0.5877472E~38): 0.3864159E1 0.3864159E1 +(~0.123E1, ~0.31415927E1, 0.1E~44): 0.3864159E1 0.3864159E1 +(~0.123E1, ~0.31415927E1, 0.0): 0.3864159E1 0.3864159E1 +(~0.123E1, ~0.31415927E1, ~0.123E4): ~0.12261359E4 ~0.12261359E4 +(~0.123E1, ~0.31415927E1, ~0.123E2): ~0.8435841E1 ~0.8435841E1 +(~0.123E1, ~0.31415927E1, ~0.31415927E1): 0.72256637 0.72256637 +(~0.123E1, ~0.31415927E1, ~0.27182817E1): 0.11458774E1 0.11458774E1 +(~0.123E1, ~0.31415927E1, ~0.123E1): 0.2634159E1 0.2634159E1 +(~0.123E1, ~0.31415927E1, ~0.123): 0.37411592E1 0.37411592E1 +(~0.123E1, ~0.31415927E1, ~0.123E~2): 0.3862929E1 0.3862929E1 +(~0.123E1, ~0.31415927E1, ~0.11754944E~37): 0.3864159E1 0.3864159E1 +(~0.123E1, ~0.31415927E1, ~0.5877472E~38): 0.3864159E1 0.3864159E1 +(~0.123E1, ~0.31415927E1, ~0.1E~44): 0.3864159E1 0.3864159E1 +(~0.123E1, ~0.31415927E1, ~0.0): 0.3864159E1 0.3864159E1 +(~0.123E1, ~0.27182817E1, 0.123E4): 0.12333435E4 0.12333435E4 +(~0.123E1, ~0.27182817E1, 0.123E2): 0.15643487E2 0.15643487E2 +(~0.123E1, ~0.27182817E1, 0.31415927E1): 0.64850793E1 0.64850793E1 +(~0.123E1, ~0.27182817E1, 0.27182817E1): 0.60617685E1 0.60617685E1 +(~0.123E1, ~0.27182817E1, 0.123E1): 0.4573487E1 0.4573487E1 +(~0.123E1, ~0.27182817E1, 0.123): 0.34664867E1 0.34664867E1 +(~0.123E1, ~0.27182817E1, 0.123E~2): 0.33447165E1 0.33447165E1 +(~0.123E1, ~0.27182817E1, 0.11754944E~37): 0.33434865E1 0.33434865E1 +(~0.123E1, ~0.27182817E1, 0.5877472E~38): 0.33434865E1 0.33434865E1 +(~0.123E1, ~0.27182817E1, 0.1E~44): 0.33434865E1 0.33434865E1 +(~0.123E1, ~0.27182817E1, 0.0): 0.33434865E1 0.33434865E1 +(~0.123E1, ~0.27182817E1, ~0.123E4): ~0.12266565E4 ~0.12266565E4 +(~0.123E1, ~0.27182817E1, ~0.123E2): ~0.8956513E1 ~0.8956513E1 +(~0.123E1, ~0.27182817E1, ~0.31415927E1): 0.20189385 0.20189385 +(~0.123E1, ~0.27182817E1, ~0.27182817E1): 0.62520486 0.62520486 +(~0.123E1, ~0.27182817E1, ~0.123E1): 0.21134865E1 0.21134865E1 +(~0.123E1, ~0.27182817E1, ~0.123): 0.32204866E1 0.32204866E1 +(~0.123E1, ~0.27182817E1, ~0.123E~2): 0.33422565E1 0.33422565E1 +(~0.123E1, ~0.27182817E1, ~0.11754944E~37): 0.33434865E1 0.33434865E1 +(~0.123E1, ~0.27182817E1, ~0.5877472E~38): 0.33434865E1 0.33434865E1 +(~0.123E1, ~0.27182817E1, ~0.1E~44): 0.33434865E1 0.33434865E1 +(~0.123E1, ~0.27182817E1, ~0.0): 0.33434865E1 0.33434865E1 +(~0.123E1, ~0.123E1, 0.123E4): 0.1231513E4 0.1231513E4 +(~0.123E1, ~0.123E1, 0.123E2): 0.13812901E2 0.13812901E2 +(~0.123E1, ~0.123E1, 0.31415927E1): 0.4654493E1 0.4654493E1 +(~0.123E1, ~0.123E1, 0.27182817E1): 0.42311816E1 0.42311816E1 +(~0.123E1, ~0.123E1, 0.123E1): 0.27429001E1 0.27429001E1 +(~0.123E1, ~0.123E1, 0.123): 0.16359E1 0.16359E1 +(~0.123E1, ~0.123E1, 0.123E~2): 0.151413E1 0.151413E1 +(~0.123E1, ~0.123E1, 0.11754944E~37): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, 0.5877472E~38): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, 0.1E~44): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, 0.0): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, ~0.123E4): ~0.1228487E4 ~0.1228487E4 +(~0.123E1, ~0.123E1, ~0.123E2): ~0.107871E2 ~0.107871E2 +(~0.123E1, ~0.123E1, ~0.31415927E1): ~0.16286927E1 ~0.16286927E1 +(~0.123E1, ~0.123E1, ~0.27182817E1): ~0.12053818E1 ~0.12053818E1 +(~0.123E1, ~0.123E1, ~0.123E1): 0.28290004 0.28290004 +(~0.123E1, ~0.123E1, ~0.123): 0.13899001E1 0.13899001E1 +(~0.123E1, ~0.123E1, ~0.123E~2): 0.151167E1 0.151167E1 +(~0.123E1, ~0.123E1, ~0.11754944E~37): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, ~0.5877472E~38): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, ~0.1E~44): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, ~0.0): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123, 0.123E4): 0.12301512E4 0.12301512E4 +(~0.123E1, ~0.123, 0.123E2): 0.1245129E2 0.1245129E2 +(~0.123E1, ~0.123, 0.31415927E1): 0.32928827E1 0.32928827E1 +(~0.123E1, ~0.123, 0.27182817E1): 0.28695717E1 0.28695717E1 +(~0.123E1, ~0.123, 0.123E1): 0.13812901E1 0.13812901E1 +(~0.123E1, ~0.123, 0.123): 0.27429 0.27429 +(~0.123E1, ~0.123, 0.123E~2): 0.15252 0.15252 +(~0.123E1, ~0.123, 0.11754944E~37): 0.15129 0.15129 +(~0.123E1, ~0.123, 0.5877472E~38): 0.15129 0.15129 +(~0.123E1, ~0.123, 0.1E~44): 0.15129 0.15129 +(~0.123E1, ~0.123, 0.0): 0.15129 0.15129 +(~0.123E1, ~0.123, ~0.123E4): ~0.12298488E4 ~0.12298488E4 +(~0.123E1, ~0.123, ~0.123E2): ~0.1214871E2 ~0.1214871E2 +(~0.123E1, ~0.123, ~0.31415927E1): ~0.29903028E1 ~0.29903028E1 +(~0.123E1, ~0.123, ~0.27182817E1): ~0.25669918E1 ~0.25669918E1 +(~0.123E1, ~0.123, ~0.123E1): ~0.107871E1 ~0.107871E1 +(~0.123E1, ~0.123, ~0.123): 0.28290004E~1 0.28290004E~1 +(~0.123E1, ~0.123, ~0.123E~2): 0.15006001 0.15006001 +(~0.123E1, ~0.123, ~0.11754944E~37): 0.15129 0.15129 +(~0.123E1, ~0.123, ~0.5877472E~38): 0.15129 0.15129 +(~0.123E1, ~0.123, ~0.1E~44): 0.15129 0.15129 +(~0.123E1, ~0.123, ~0.0): 0.15129 0.15129 +(~0.123E1, ~0.123E~2, 0.123E4): 0.12300015E4 0.12300015E4 +(~0.123E1, ~0.123E~2, 0.123E2): 0.12301513E2 0.12301513E2 +(~0.123E1, ~0.123E~2, 0.31415927E1): 0.31431057E1 0.31431057E1 +(~0.123E1, ~0.123E~2, 0.27182817E1): 0.27197948E1 0.27197948E1 +(~0.123E1, ~0.123E~2, 0.123E1): 0.12315129E1 0.12315129E1 +(~0.123E1, ~0.123E~2, 0.123): 0.1245129 0.1245129 +(~0.123E1, ~0.123E~2, 0.123E~2): 0.27429E~2 0.27429E~2 +(~0.123E1, ~0.123E~2, 0.11754944E~37): 0.15129001E~2 0.15129001E~2 +(~0.123E1, ~0.123E~2, 0.5877472E~38): 0.15129001E~2 0.15129001E~2 +(~0.123E1, ~0.123E~2, 0.1E~44): 0.15129001E~2 0.15129001E~2 +(~0.123E1, ~0.123E~2, 0.0): 0.15129001E~2 0.15129001E~2 +(~0.123E1, ~0.123E~2, ~0.123E4): ~0.12299985E4 ~0.12299985E4 +(~0.123E1, ~0.123E~2, ~0.123E2): ~0.12298488E2 ~0.12298488E2 +(~0.123E1, ~0.123E~2, ~0.31415927E1): ~0.31400797E1 ~0.31400797E1 +(~0.123E1, ~0.123E~2, ~0.27182817E1): ~0.27167687E1 ~0.27167687E1 +(~0.123E1, ~0.123E~2, ~0.123E1): ~0.12284871E1 ~0.12284871E1 +(~0.123E1, ~0.123E~2, ~0.123): ~0.1214871 ~0.1214871 +(~0.123E1, ~0.123E~2, ~0.123E~2): 0.28290003E~3 0.28290003E~3 +(~0.123E1, ~0.123E~2, ~0.11754944E~37): 0.15129001E~2 0.15129001E~2 +(~0.123E1, ~0.123E~2, ~0.5877472E~38): 0.15129001E~2 0.15129001E~2 +(~0.123E1, ~0.123E~2, ~0.1E~44): 0.15129001E~2 0.15129001E~2 +(~0.123E1, ~0.123E~2, ~0.0): 0.15129001E~2 0.15129001E~2 +(~0.123E1, ~0.1E~44, 0.11754944E~37): 0.11754945E~37 0.11754945E~37 +(~0.123E1, ~0.1E~44, 0.5877472E~38): 0.5877473E~38 0.5877473E~38 +(~0.123E1, ~0.1E~44, 0.1E~44): 0.3E~44 0.3E~44 +(~0.123E1, ~0.1E~44, 0.0): 0.1E~44 0.1E~44 +(~0.123E1, ~0.1E~44, ~0.11754944E~37): ~0.11754942E~37 ~0.11754942E~37 +(~0.123E1, ~0.1E~44, ~0.5877472E~38): ~0.587747E~38 ~0.587747E~38 +(~0.123E1, ~0.1E~44, ~0.1E~44): 0.0 0.0 +(~0.123E1, ~0.1E~44, ~0.0): 0.1E~44 0.1E~44 +(~0.123, 0.34028235E39, 0.34028235E39): 0.2984276E39 0.2984276E39 +(~0.123, 0.34028235E39, 0.17014117E39): 0.12828644E39 0.12828644E39 +(~0.123, 0.34028235E39, 0.123E4): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, 0.123E2): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, 0.31415927E1): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, 0.27182817E1): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, 0.123E1): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, 0.123): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, 0.123E~2): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, 0.11754944E~37): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, 0.5877472E~38): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, 0.1E~44): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, 0.0): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, ~0.34028235E39): ~inf ~inf +(~0.123, 0.34028235E39, ~0.17014117E39): ~0.2119959E39 ~0.2119959E39 +(~0.123, 0.34028235E39, ~0.123E4): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, ~0.123E2): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, ~0.31415927E1): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, ~0.27182817E1): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, ~0.123E1): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, ~0.123): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, ~0.123E~2): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, ~0.11754944E~37): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, ~0.5877472E~38): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, ~0.1E~44): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.34028235E39, ~0.0): ~0.4185473E38 ~0.4185473E38 +(~0.123, 0.17014117E39, 0.34028235E39): 0.31935498E39 0.31935498E39 +(~0.123, 0.17014117E39, 0.17014117E39): 0.1492138E39 0.1492138E39 +(~0.123, 0.17014117E39, 0.123E4): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, 0.123E2): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, 0.31415927E1): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, 0.27182817E1): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, 0.123E1): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, 0.123): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, 0.123E~2): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, 0.11754944E~37): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, 0.5877472E~38): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, 0.1E~44): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, 0.0): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, ~0.34028235E39): ~inf ~inf +(~0.123, 0.17014117E39, ~0.17014117E39): ~0.19106853E39 ~0.19106853E39 +(~0.123, 0.17014117E39, ~0.123E4): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, ~0.123E2): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, ~0.31415927E1): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, ~0.27182817E1): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, ~0.123E1): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, ~0.123): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, ~0.123E~2): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, ~0.11754944E~37): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, ~0.5877472E~38): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, ~0.1E~44): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.17014117E39, ~0.0): ~0.20927365E38 ~0.20927365E38 +(~0.123, 0.123E4, 0.123E4): 0.107871E4 0.107871E4 +(~0.123, 0.123E4, 0.123E2): ~0.13899E3 ~0.13899E3 +(~0.123, 0.123E4, 0.31415927E1): ~0.1481484E3 ~0.1481484E3 +(~0.123, 0.123E4, 0.27182817E1): ~0.14857172E3 ~0.14857172E3 +(~0.123, 0.123E4, 0.123E1): ~0.15006E3 ~0.15006E3 +(~0.123, 0.123E4, 0.123): ~0.151167E3 ~0.151167E3 +(~0.123, 0.123E4, 0.123E~2): ~0.15128877E3 ~0.15128877E3 +(~0.123, 0.123E4, 0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(~0.123, 0.123E4, 0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(~0.123, 0.123E4, 0.1E~44): ~0.15129001E3 ~0.15129001E3 +(~0.123, 0.123E4, 0.0): ~0.15129001E3 ~0.15129001E3 +(~0.123, 0.123E4, ~0.123E4): ~0.138129E4 ~0.138129E4 +(~0.123, 0.123E4, ~0.123E2): ~0.16359001E3 ~0.16359001E3 +(~0.123, 0.123E4, ~0.31415927E1): ~0.1544316E3 ~0.1544316E3 +(~0.123, 0.123E4, ~0.27182817E1): ~0.15400829E3 ~0.15400829E3 +(~0.123, 0.123E4, ~0.123E1): ~0.15252E3 ~0.15252E3 +(~0.123, 0.123E4, ~0.123): ~0.15141301E3 ~0.15141301E3 +(~0.123, 0.123E4, ~0.123E~2): ~0.15129123E3 ~0.15129123E3 +(~0.123, 0.123E4, ~0.11754944E~37): ~0.15129001E3 ~0.15129001E3 +(~0.123, 0.123E4, ~0.5877472E~38): ~0.15129001E3 ~0.15129001E3 +(~0.123, 0.123E4, ~0.1E~44): ~0.15129001E3 ~0.15129001E3 +(~0.123, 0.123E4, ~0.0): ~0.15129001E3 ~0.15129001E3 +(~0.123, 0.123E2, 0.123E4): 0.1228487E4 0.1228487E4 +(~0.123, 0.123E2, 0.123E2): 0.107871E2 0.107871E2 +(~0.123, 0.123E2, 0.31415927E1): 0.16286926E1 0.16286926E1 +(~0.123, 0.123E2, 0.27182817E1): 0.12053816E1 0.12053816E1 +(~0.123, 0.123E2, 0.123E1): ~0.28290004 ~0.28290004 +(~0.123, 0.123E2, 0.123): ~0.13899001E1 ~0.13899001E1 +(~0.123, 0.123E2, 0.123E~2): ~0.15116701E1 ~0.15116701E1 +(~0.123, 0.123E2, 0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(~0.123, 0.123E2, 0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(~0.123, 0.123E2, 0.1E~44): ~0.15129001E1 ~0.15129001E1 +(~0.123, 0.123E2, 0.0): ~0.15129001E1 ~0.15129001E1 +(~0.123, 0.123E2, ~0.123E4): ~0.1231513E4 ~0.1231513E4 +(~0.123, 0.123E2, ~0.123E2): ~0.13812901E2 ~0.13812901E2 +(~0.123, 0.123E2, ~0.31415927E1): ~0.4654493E1 ~0.4654493E1 +(~0.123, 0.123E2, ~0.27182817E1): ~0.42311816E1 ~0.42311816E1 +(~0.123, 0.123E2, ~0.123E1): ~0.27429001E1 ~0.27429001E1 +(~0.123, 0.123E2, ~0.123): ~0.16359E1 ~0.16359E1 +(~0.123, 0.123E2, ~0.123E~2): ~0.15141301E1 ~0.15141301E1 +(~0.123, 0.123E2, ~0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(~0.123, 0.123E2, ~0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(~0.123, 0.123E2, ~0.1E~44): ~0.15129001E1 ~0.15129001E1 +(~0.123, 0.123E2, ~0.0): ~0.15129001E1 ~0.15129001E1 +(~0.123, 0.31415927E1, 0.123E4): 0.12296135E4 0.12296135E4 +(~0.123, 0.31415927E1, 0.123E2): 0.11913585E2 0.11913585E2 +(~0.123, 0.31415927E1, 0.31415927E1): 0.27551768E1 0.27551768E1 +(~0.123, 0.31415927E1, 0.27182817E1): 0.23318658E1 0.23318658E1 +(~0.123, 0.31415927E1, 0.123E1): 0.8435841 0.8435841 +(~0.123, 0.31415927E1, 0.123): ~0.2634159 ~0.2634159 +(~0.123, 0.31415927E1, 0.123E~2): ~0.38518593 ~0.38518593 +(~0.123, 0.31415927E1, 0.11754944E~37): ~0.38641593 ~0.38641593 +(~0.123, 0.31415927E1, 0.5877472E~38): ~0.38641593 ~0.38641593 +(~0.123, 0.31415927E1, 0.1E~44): ~0.38641593 ~0.38641593 +(~0.123, 0.31415927E1, 0.0): ~0.38641593 ~0.38641593 +(~0.123, 0.31415927E1, ~0.123E4): ~0.12303865E4 ~0.12303865E4 +(~0.123, 0.31415927E1, ~0.123E2): ~0.12686416E2 ~0.12686416E2 +(~0.123, 0.31415927E1, ~0.31415927E1): ~0.35280087E1 ~0.35280087E1 +(~0.123, 0.31415927E1, ~0.27182817E1): ~0.31046977E1 ~0.31046977E1 +(~0.123, 0.31415927E1, ~0.123E1): ~0.1616416E1 ~0.1616416E1 +(~0.123, 0.31415927E1, ~0.123): ~0.5094159 ~0.5094159 +(~0.123, 0.31415927E1, ~0.123E~2): ~0.38764593 ~0.38764593 +(~0.123, 0.31415927E1, ~0.11754944E~37): ~0.38641593 ~0.38641593 +(~0.123, 0.31415927E1, ~0.5877472E~38): ~0.38641593 ~0.38641593 +(~0.123, 0.31415927E1, ~0.1E~44): ~0.38641593 ~0.38641593 +(~0.123, 0.31415927E1, ~0.0): ~0.38641593 ~0.38641593 +(~0.123, 0.27182817E1, 0.123E4): 0.12296656E4 0.12296656E4 +(~0.123, 0.27182817E1, 0.123E2): 0.119656515E2 0.119656515E2 +(~0.123, 0.27182817E1, 0.31415927E1): 0.2807244E1 0.2807244E1 +(~0.123, 0.27182817E1, 0.27182817E1): 0.2383933E1 0.2383933E1 +(~0.123, 0.27182817E1, 0.123E1): 0.89565134 0.89565134 +(~0.123, 0.27182817E1, 0.123): ~0.21134867 ~0.21134867 +(~0.123, 0.27182817E1, 0.123E~2): ~0.33311868 ~0.33311868 +(~0.123, 0.27182817E1, 0.11754944E~37): ~0.33434868 ~0.33434868 +(~0.123, 0.27182817E1, 0.5877472E~38): ~0.33434868 ~0.33434868 +(~0.123, 0.27182817E1, 0.1E~44): ~0.33434868 ~0.33434868 +(~0.123, 0.27182817E1, 0.0): ~0.33434868 ~0.33434868 +(~0.123, 0.27182817E1, ~0.123E4): ~0.12303344E4 ~0.12303344E4 +(~0.123, 0.27182817E1, ~0.123E2): ~0.12634349E2 ~0.12634349E2 +(~0.123, 0.27182817E1, ~0.31415927E1): ~0.34759414E1 ~0.34759414E1 +(~0.123, 0.27182817E1, ~0.27182817E1): ~0.30526304E1 ~0.30526304E1 +(~0.123, 0.27182817E1, ~0.123E1): ~0.15643487E1 ~0.15643487E1 +(~0.123, 0.27182817E1, ~0.123): ~0.45734867 ~0.45734867 +(~0.123, 0.27182817E1, ~0.123E~2): ~0.33557865 ~0.33557865 +(~0.123, 0.27182817E1, ~0.11754944E~37): ~0.33434868 ~0.33434868 +(~0.123, 0.27182817E1, ~0.5877472E~38): ~0.33434868 ~0.33434868 +(~0.123, 0.27182817E1, ~0.1E~44): ~0.33434868 ~0.33434868 +(~0.123, 0.27182817E1, ~0.0): ~0.33434868 ~0.33434868 +(~0.123, 0.123E1, 0.123E4): 0.12298488E4 0.12298488E4 +(~0.123, 0.123E1, 0.123E2): 0.1214871E2 0.1214871E2 +(~0.123, 0.123E1, 0.31415927E1): 0.29903028E1 0.29903028E1 +(~0.123, 0.123E1, 0.27182817E1): 0.25669918E1 0.25669918E1 +(~0.123, 0.123E1, 0.123E1): 0.107871E1 0.107871E1 +(~0.123, 0.123E1, 0.123): ~0.28290004E~1 ~0.28290004E~1 +(~0.123, 0.123E1, 0.123E~2): ~0.15006001 ~0.15006001 +(~0.123, 0.123E1, 0.11754944E~37): ~0.15129 ~0.15129 +(~0.123, 0.123E1, 0.5877472E~38): ~0.15129 ~0.15129 +(~0.123, 0.123E1, 0.1E~44): ~0.15129 ~0.15129 +(~0.123, 0.123E1, 0.0): ~0.15129 ~0.15129 +(~0.123, 0.123E1, ~0.123E4): ~0.12301512E4 ~0.12301512E4 +(~0.123, 0.123E1, ~0.123E2): ~0.1245129E2 ~0.1245129E2 +(~0.123, 0.123E1, ~0.31415927E1): ~0.32928827E1 ~0.32928827E1 +(~0.123, 0.123E1, ~0.27182817E1): ~0.28695717E1 ~0.28695717E1 +(~0.123, 0.123E1, ~0.123E1): ~0.13812901E1 ~0.13812901E1 +(~0.123, 0.123E1, ~0.123): ~0.27429 ~0.27429 +(~0.123, 0.123E1, ~0.123E~2): ~0.15252 ~0.15252 +(~0.123, 0.123E1, ~0.11754944E~37): ~0.15129 ~0.15129 +(~0.123, 0.123E1, ~0.5877472E~38): ~0.15129 ~0.15129 +(~0.123, 0.123E1, ~0.1E~44): ~0.15129 ~0.15129 +(~0.123, 0.123E1, ~0.0): ~0.15129 ~0.15129 +(~0.123, 0.123, 0.123E4): 0.12299849E4 0.12299849E4 +(~0.123, 0.123, 0.123E2): 0.12284871E2 0.12284871E2 +(~0.123, 0.123, 0.31415927E1): 0.31264637E1 0.31264637E1 +(~0.123, 0.123, 0.27182817E1): 0.27031527E1 0.27031527E1 +(~0.123, 0.123, 0.123E1): 0.1214871E1 0.1214871E1 +(~0.123, 0.123, 0.123): 0.107871 0.107871 +(~0.123, 0.123, 0.123E~2): ~0.13899E~1 ~0.13899E~1 +(~0.123, 0.123, 0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(~0.123, 0.123, 0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(~0.123, 0.123, 0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(~0.123, 0.123, 0.0): ~0.15129001E~1 ~0.15129001E~1 +(~0.123, 0.123, ~0.123E4): ~0.12300151E4 ~0.12300151E4 +(~0.123, 0.123, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(~0.123, 0.123, ~0.31415927E1): ~0.31567218E1 ~0.31567218E1 +(~0.123, 0.123, ~0.27182817E1): ~0.27334108E1 ~0.27334108E1 +(~0.123, 0.123, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(~0.123, 0.123, ~0.123): ~0.13812901 ~0.13812901 +(~0.123, 0.123, ~0.123E~2): ~0.16359001E~1 ~0.16359001E~1 +(~0.123, 0.123, ~0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(~0.123, 0.123, ~0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(~0.123, 0.123, ~0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(~0.123, 0.123, ~0.0): ~0.15129001E~1 ~0.15129001E~1 +(~0.123, 0.123E~2, 0.123E4): 0.12299999E4 0.12299999E4 +(~0.123, 0.123E~2, 0.123E2): 0.12299849E2 0.12299849E2 +(~0.123, 0.123E~2, 0.31415927E1): 0.31414413E1 0.31414413E1 +(~0.123, 0.123E~2, 0.27182817E1): 0.27181304E1 0.27181304E1 +(~0.123, 0.123E~2, 0.123E1): 0.12298487E1 0.12298487E1 +(~0.123, 0.123E~2, 0.123): 0.12284871 0.12284871 +(~0.123, 0.123E~2, 0.123E~2): 0.10787101E~2 0.10787101E~2 +(~0.123, 0.123E~2, 0.11754944E~37): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, 0.5877472E~38): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, 0.1E~44): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, 0.0): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, ~0.123E4): ~0.12300001E4 ~0.12300001E4 +(~0.123, 0.123E~2, ~0.123E2): ~0.12300152E2 ~0.12300152E2 +(~0.123, 0.123E~2, ~0.31415927E1): ~0.31417441E1 ~0.31417441E1 +(~0.123, 0.123E~2, ~0.27182817E1): ~0.27184331E1 ~0.27184331E1 +(~0.123, 0.123E~2, ~0.123E1): ~0.12301513E1 ~0.12301513E1 +(~0.123, 0.123E~2, ~0.123): ~0.123151295 ~0.123151295 +(~0.123, 0.123E~2, ~0.123E~2): ~0.138129E~2 ~0.138129E~2 +(~0.123, 0.123E~2, ~0.11754944E~37): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, ~0.5877472E~38): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, ~0.1E~44): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, ~0.0): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.11754944E~37, 0.11754944E~37): 0.10309085E~37 0.10309085E~37 +(~0.123, 0.11754944E~37, 0.5877472E~38): 0.4431613E~38 0.4431613E~38 +(~0.123, 0.11754944E~37, 0.1E~44): ~0.1445857E~38 ~0.1445857E~38 +(~0.123, 0.11754944E~37, 0.0): ~0.1445858E~38 ~0.1445858E~38 +(~0.123, 0.11754944E~37, ~0.11754944E~37): ~0.13200802E~37 ~0.13200802E~37 +(~0.123, 0.11754944E~37, ~0.5877472E~38): ~0.732333E~38 ~0.732333E~38 +(~0.123, 0.11754944E~37, ~0.1E~44): ~0.144586E~38 ~0.144586E~38 +(~0.123, 0.11754944E~37, ~0.0): ~0.1445858E~38 ~0.1445858E~38 +(~0.123, 0.5877472E~38, 0.11754944E~37): 0.11032015E~37 0.11032015E~37 +(~0.123, 0.5877472E~38, 0.5877472E~38): 0.5154543E~38 0.5154543E~38 +(~0.123, 0.5877472E~38, 0.1E~44): ~0.722927E~39 ~0.722927E~39 +(~0.123, 0.5877472E~38, 0.0): ~0.722928E~39 ~0.722928E~39 +(~0.123, 0.5877472E~38, ~0.11754944E~37): ~0.12477872E~37 ~0.12477872E~37 +(~0.123, 0.5877472E~38, ~0.5877472E~38): ~0.66004E~38 ~0.66004E~38 +(~0.123, 0.5877472E~38, ~0.1E~44): ~0.72293E~39 ~0.72293E~39 +(~0.123, 0.5877472E~38, ~0.0): ~0.722928E~39 ~0.722928E~39 +(~0.123, 0.1E~44, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(~0.123, 0.1E~44, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(~0.123, 0.1E~44, 0.1E~44): 0.1E~44 0.1E~44 +(~0.123, 0.1E~44, 0.0): ~0.0 ~0.0 +(~0.123, 0.1E~44, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(~0.123, 0.1E~44, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(~0.123, 0.1E~44, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(~0.123, 0.1E~44, ~0.0): ~0.0 ~0.0 +(~0.123, ~0.34028235E39, 0.34028235E39): inf inf +(~0.123, ~0.34028235E39, 0.17014117E39): 0.2119959E39 0.2119959E39 +(~0.123, ~0.34028235E39, 0.123E4): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, 0.123E2): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, 0.31415927E1): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, 0.27182817E1): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, 0.123E1): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, 0.123): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, 0.123E~2): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, 0.11754944E~37): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, 0.5877472E~38): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, 0.1E~44): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, 0.0): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, ~0.34028235E39): ~0.2984276E39 ~0.2984276E39 +(~0.123, ~0.34028235E39, ~0.17014117E39): ~0.12828644E39 ~0.12828644E39 +(~0.123, ~0.34028235E39, ~0.123E4): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, ~0.123E2): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, ~0.31415927E1): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, ~0.27182817E1): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, ~0.123E1): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, ~0.123): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, ~0.123E~2): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, ~0.11754944E~37): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, ~0.5877472E~38): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, ~0.1E~44): 0.4185473E38 0.4185473E38 +(~0.123, ~0.34028235E39, ~0.0): 0.4185473E38 0.4185473E38 +(~0.123, ~0.17014117E39, 0.34028235E39): inf inf +(~0.123, ~0.17014117E39, 0.17014117E39): 0.19106853E39 0.19106853E39 +(~0.123, ~0.17014117E39, 0.123E4): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, 0.123E2): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, 0.31415927E1): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, 0.27182817E1): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, 0.123E1): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, 0.123): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, 0.123E~2): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, 0.11754944E~37): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, 0.5877472E~38): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, 0.1E~44): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, 0.0): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, ~0.34028235E39): ~0.31935498E39 ~0.31935498E39 +(~0.123, ~0.17014117E39, ~0.17014117E39): ~0.1492138E39 ~0.1492138E39 +(~0.123, ~0.17014117E39, ~0.123E4): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, ~0.123E2): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, ~0.31415927E1): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, ~0.27182817E1): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, ~0.123E1): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, ~0.123): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, ~0.123E~2): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, ~0.11754944E~37): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, ~0.5877472E~38): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, ~0.1E~44): 0.20927365E38 0.20927365E38 +(~0.123, ~0.17014117E39, ~0.0): 0.20927365E38 0.20927365E38 +(~0.123, ~0.123E4, 0.123E4): 0.138129E4 0.138129E4 +(~0.123, ~0.123E4, 0.123E2): 0.16359001E3 0.16359001E3 +(~0.123, ~0.123E4, 0.31415927E1): 0.1544316E3 0.1544316E3 +(~0.123, ~0.123E4, 0.27182817E1): 0.15400829E3 0.15400829E3 +(~0.123, ~0.123E4, 0.123E1): 0.15252E3 0.15252E3 +(~0.123, ~0.123E4, 0.123): 0.15141301E3 0.15141301E3 +(~0.123, ~0.123E4, 0.123E~2): 0.15129123E3 0.15129123E3 +(~0.123, ~0.123E4, 0.11754944E~37): 0.15129001E3 0.15129001E3 +(~0.123, ~0.123E4, 0.5877472E~38): 0.15129001E3 0.15129001E3 +(~0.123, ~0.123E4, 0.1E~44): 0.15129001E3 0.15129001E3 +(~0.123, ~0.123E4, 0.0): 0.15129001E3 0.15129001E3 +(~0.123, ~0.123E4, ~0.123E4): ~0.107871E4 ~0.107871E4 +(~0.123, ~0.123E4, ~0.123E2): 0.13899E3 0.13899E3 +(~0.123, ~0.123E4, ~0.31415927E1): 0.1481484E3 0.1481484E3 +(~0.123, ~0.123E4, ~0.27182817E1): 0.14857172E3 0.14857172E3 +(~0.123, ~0.123E4, ~0.123E1): 0.15006E3 0.15006E3 +(~0.123, ~0.123E4, ~0.123): 0.151167E3 0.151167E3 +(~0.123, ~0.123E4, ~0.123E~2): 0.15128877E3 0.15128877E3 +(~0.123, ~0.123E4, ~0.11754944E~37): 0.15129001E3 0.15129001E3 +(~0.123, ~0.123E4, ~0.5877472E~38): 0.15129001E3 0.15129001E3 +(~0.123, ~0.123E4, ~0.1E~44): 0.15129001E3 0.15129001E3 +(~0.123, ~0.123E4, ~0.0): 0.15129001E3 0.15129001E3 +(~0.123, ~0.123E2, 0.123E4): 0.1231513E4 0.1231513E4 +(~0.123, ~0.123E2, 0.123E2): 0.13812901E2 0.13812901E2 +(~0.123, ~0.123E2, 0.31415927E1): 0.4654493E1 0.4654493E1 +(~0.123, ~0.123E2, 0.27182817E1): 0.42311816E1 0.42311816E1 +(~0.123, ~0.123E2, 0.123E1): 0.27429001E1 0.27429001E1 +(~0.123, ~0.123E2, 0.123): 0.16359E1 0.16359E1 +(~0.123, ~0.123E2, 0.123E~2): 0.15141301E1 0.15141301E1 +(~0.123, ~0.123E2, 0.11754944E~37): 0.15129001E1 0.15129001E1 +(~0.123, ~0.123E2, 0.5877472E~38): 0.15129001E1 0.15129001E1 +(~0.123, ~0.123E2, 0.1E~44): 0.15129001E1 0.15129001E1 +(~0.123, ~0.123E2, 0.0): 0.15129001E1 0.15129001E1 +(~0.123, ~0.123E2, ~0.123E4): ~0.1228487E4 ~0.1228487E4 +(~0.123, ~0.123E2, ~0.123E2): ~0.107871E2 ~0.107871E2 +(~0.123, ~0.123E2, ~0.31415927E1): ~0.16286926E1 ~0.16286926E1 +(~0.123, ~0.123E2, ~0.27182817E1): ~0.12053816E1 ~0.12053816E1 +(~0.123, ~0.123E2, ~0.123E1): 0.28290004 0.28290004 +(~0.123, ~0.123E2, ~0.123): 0.13899001E1 0.13899001E1 +(~0.123, ~0.123E2, ~0.123E~2): 0.15116701E1 0.15116701E1 +(~0.123, ~0.123E2, ~0.11754944E~37): 0.15129001E1 0.15129001E1 +(~0.123, ~0.123E2, ~0.5877472E~38): 0.15129001E1 0.15129001E1 +(~0.123, ~0.123E2, ~0.1E~44): 0.15129001E1 0.15129001E1 +(~0.123, ~0.123E2, ~0.0): 0.15129001E1 0.15129001E1 +(~0.123, ~0.31415927E1, 0.123E4): 0.12303865E4 0.12303865E4 +(~0.123, ~0.31415927E1, 0.123E2): 0.12686416E2 0.12686416E2 +(~0.123, ~0.31415927E1, 0.31415927E1): 0.35280087E1 0.35280087E1 +(~0.123, ~0.31415927E1, 0.27182817E1): 0.31046977E1 0.31046977E1 +(~0.123, ~0.31415927E1, 0.123E1): 0.1616416E1 0.1616416E1 +(~0.123, ~0.31415927E1, 0.123): 0.5094159 0.5094159 +(~0.123, ~0.31415927E1, 0.123E~2): 0.38764593 0.38764593 +(~0.123, ~0.31415927E1, 0.11754944E~37): 0.38641593 0.38641593 +(~0.123, ~0.31415927E1, 0.5877472E~38): 0.38641593 0.38641593 +(~0.123, ~0.31415927E1, 0.1E~44): 0.38641593 0.38641593 +(~0.123, ~0.31415927E1, 0.0): 0.38641593 0.38641593 +(~0.123, ~0.31415927E1, ~0.123E4): ~0.12296135E4 ~0.12296135E4 +(~0.123, ~0.31415927E1, ~0.123E2): ~0.11913585E2 ~0.11913585E2 +(~0.123, ~0.31415927E1, ~0.31415927E1): ~0.27551768E1 ~0.27551768E1 +(~0.123, ~0.31415927E1, ~0.27182817E1): ~0.23318658E1 ~0.23318658E1 +(~0.123, ~0.31415927E1, ~0.123E1): ~0.8435841 ~0.8435841 +(~0.123, ~0.31415927E1, ~0.123): 0.2634159 0.2634159 +(~0.123, ~0.31415927E1, ~0.123E~2): 0.38518593 0.38518593 +(~0.123, ~0.31415927E1, ~0.11754944E~37): 0.38641593 0.38641593 +(~0.123, ~0.31415927E1, ~0.5877472E~38): 0.38641593 0.38641593 +(~0.123, ~0.31415927E1, ~0.1E~44): 0.38641593 0.38641593 +(~0.123, ~0.31415927E1, ~0.0): 0.38641593 0.38641593 +(~0.123, ~0.27182817E1, 0.123E4): 0.12303344E4 0.12303344E4 +(~0.123, ~0.27182817E1, 0.123E2): 0.12634349E2 0.12634349E2 +(~0.123, ~0.27182817E1, 0.31415927E1): 0.34759414E1 0.34759414E1 +(~0.123, ~0.27182817E1, 0.27182817E1): 0.30526304E1 0.30526304E1 +(~0.123, ~0.27182817E1, 0.123E1): 0.15643487E1 0.15643487E1 +(~0.123, ~0.27182817E1, 0.123): 0.45734867 0.45734867 +(~0.123, ~0.27182817E1, 0.123E~2): 0.33557865 0.33557865 +(~0.123, ~0.27182817E1, 0.11754944E~37): 0.33434868 0.33434868 +(~0.123, ~0.27182817E1, 0.5877472E~38): 0.33434868 0.33434868 +(~0.123, ~0.27182817E1, 0.1E~44): 0.33434868 0.33434868 +(~0.123, ~0.27182817E1, 0.0): 0.33434868 0.33434868 +(~0.123, ~0.27182817E1, ~0.123E4): ~0.12296656E4 ~0.12296656E4 +(~0.123, ~0.27182817E1, ~0.123E2): ~0.119656515E2 ~0.119656515E2 +(~0.123, ~0.27182817E1, ~0.31415927E1): ~0.2807244E1 ~0.2807244E1 +(~0.123, ~0.27182817E1, ~0.27182817E1): ~0.2383933E1 ~0.2383933E1 +(~0.123, ~0.27182817E1, ~0.123E1): ~0.89565134 ~0.89565134 +(~0.123, ~0.27182817E1, ~0.123): 0.21134867 0.21134867 +(~0.123, ~0.27182817E1, ~0.123E~2): 0.33311868 0.33311868 +(~0.123, ~0.27182817E1, ~0.11754944E~37): 0.33434868 0.33434868 +(~0.123, ~0.27182817E1, ~0.5877472E~38): 0.33434868 0.33434868 +(~0.123, ~0.27182817E1, ~0.1E~44): 0.33434868 0.33434868 +(~0.123, ~0.27182817E1, ~0.0): 0.33434868 0.33434868 +(~0.123, ~0.123E1, 0.123E4): 0.12301512E4 0.12301512E4 +(~0.123, ~0.123E1, 0.123E2): 0.1245129E2 0.1245129E2 +(~0.123, ~0.123E1, 0.31415927E1): 0.32928827E1 0.32928827E1 +(~0.123, ~0.123E1, 0.27182817E1): 0.28695717E1 0.28695717E1 +(~0.123, ~0.123E1, 0.123E1): 0.13812901E1 0.13812901E1 +(~0.123, ~0.123E1, 0.123): 0.27429 0.27429 +(~0.123, ~0.123E1, 0.123E~2): 0.15252 0.15252 +(~0.123, ~0.123E1, 0.11754944E~37): 0.15129 0.15129 +(~0.123, ~0.123E1, 0.5877472E~38): 0.15129 0.15129 +(~0.123, ~0.123E1, 0.1E~44): 0.15129 0.15129 +(~0.123, ~0.123E1, 0.0): 0.15129 0.15129 +(~0.123, ~0.123E1, ~0.123E4): ~0.12298488E4 ~0.12298488E4 +(~0.123, ~0.123E1, ~0.123E2): ~0.1214871E2 ~0.1214871E2 +(~0.123, ~0.123E1, ~0.31415927E1): ~0.29903028E1 ~0.29903028E1 +(~0.123, ~0.123E1, ~0.27182817E1): ~0.25669918E1 ~0.25669918E1 +(~0.123, ~0.123E1, ~0.123E1): ~0.107871E1 ~0.107871E1 +(~0.123, ~0.123E1, ~0.123): 0.28290004E~1 0.28290004E~1 +(~0.123, ~0.123E1, ~0.123E~2): 0.15006001 0.15006001 +(~0.123, ~0.123E1, ~0.11754944E~37): 0.15129 0.15129 +(~0.123, ~0.123E1, ~0.5877472E~38): 0.15129 0.15129 +(~0.123, ~0.123E1, ~0.1E~44): 0.15129 0.15129 +(~0.123, ~0.123E1, ~0.0): 0.15129 0.15129 +(~0.123, ~0.123, 0.123E4): 0.12300151E4 0.12300151E4 +(~0.123, ~0.123, 0.123E2): 0.12315129E2 0.12315129E2 +(~0.123, ~0.123, 0.31415927E1): 0.31567218E1 0.31567218E1 +(~0.123, ~0.123, 0.27182817E1): 0.27334108E1 0.27334108E1 +(~0.123, ~0.123, 0.123E1): 0.1245129E1 0.1245129E1 +(~0.123, ~0.123, 0.123): 0.13812901 0.13812901 +(~0.123, ~0.123, 0.123E~2): 0.16359001E~1 0.16359001E~1 +(~0.123, ~0.123, 0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(~0.123, ~0.123, 0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(~0.123, ~0.123, 0.1E~44): 0.15129001E~1 0.15129001E~1 +(~0.123, ~0.123, 0.0): 0.15129001E~1 0.15129001E~1 +(~0.123, ~0.123, ~0.123E4): ~0.12299849E4 ~0.12299849E4 +(~0.123, ~0.123, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(~0.123, ~0.123, ~0.31415927E1): ~0.31264637E1 ~0.31264637E1 +(~0.123, ~0.123, ~0.27182817E1): ~0.27031527E1 ~0.27031527E1 +(~0.123, ~0.123, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(~0.123, ~0.123, ~0.123): ~0.107871 ~0.107871 +(~0.123, ~0.123, ~0.123E~2): 0.13899E~1 0.13899E~1 +(~0.123, ~0.123, ~0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(~0.123, ~0.123, ~0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(~0.123, ~0.123, ~0.1E~44): 0.15129001E~1 0.15129001E~1 +(~0.123, ~0.123, ~0.0): 0.15129001E~1 0.15129001E~1 +(~0.123, ~0.123E~2, 0.123E4): 0.12300001E4 0.12300001E4 +(~0.123, ~0.123E~2, 0.123E2): 0.12300152E2 0.12300152E2 +(~0.123, ~0.123E~2, 0.31415927E1): 0.31417441E1 0.31417441E1 +(~0.123, ~0.123E~2, 0.27182817E1): 0.27184331E1 0.27184331E1 +(~0.123, ~0.123E~2, 0.123E1): 0.12301513E1 0.12301513E1 +(~0.123, ~0.123E~2, 0.123): 0.123151295 0.123151295 +(~0.123, ~0.123E~2, 0.123E~2): 0.138129E~2 0.138129E~2 +(~0.123, ~0.123E~2, 0.11754944E~37): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, 0.5877472E~38): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, 0.1E~44): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, 0.0): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, ~0.123E4): ~0.12299999E4 ~0.12299999E4 +(~0.123, ~0.123E~2, ~0.123E2): ~0.12299849E2 ~0.12299849E2 +(~0.123, ~0.123E~2, ~0.31415927E1): ~0.31414413E1 ~0.31414413E1 +(~0.123, ~0.123E~2, ~0.27182817E1): ~0.27181304E1 ~0.27181304E1 +(~0.123, ~0.123E~2, ~0.123E1): ~0.12298487E1 ~0.12298487E1 +(~0.123, ~0.123E~2, ~0.123): ~0.12284871 ~0.12284871 +(~0.123, ~0.123E~2, ~0.123E~2): ~0.10787101E~2 ~0.10787101E~2 +(~0.123, ~0.123E~2, ~0.11754944E~37): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, ~0.5877472E~38): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, ~0.1E~44): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, ~0.0): 0.15129E~3 0.15129E~3 +(~0.123, ~0.11754944E~37, 0.11754944E~37): 0.13200802E~37 0.13200802E~37 +(~0.123, ~0.11754944E~37, 0.5877472E~38): 0.732333E~38 0.732333E~38 +(~0.123, ~0.11754944E~37, 0.1E~44): 0.144586E~38 0.144586E~38 +(~0.123, ~0.11754944E~37, 0.0): 0.1445858E~38 0.1445858E~38 +(~0.123, ~0.11754944E~37, ~0.11754944E~37): ~0.10309085E~37 ~0.10309085E~37 +(~0.123, ~0.11754944E~37, ~0.5877472E~38): ~0.4431613E~38 ~0.4431613E~38 +(~0.123, ~0.11754944E~37, ~0.1E~44): 0.1445857E~38 0.1445857E~38 +(~0.123, ~0.11754944E~37, ~0.0): 0.1445858E~38 0.1445858E~38 +(~0.123, ~0.5877472E~38, 0.11754944E~37): 0.12477872E~37 0.12477872E~37 +(~0.123, ~0.5877472E~38, 0.5877472E~38): 0.66004E~38 0.66004E~38 +(~0.123, ~0.5877472E~38, 0.1E~44): 0.72293E~39 0.72293E~39 +(~0.123, ~0.5877472E~38, 0.0): 0.722928E~39 0.722928E~39 +(~0.123, ~0.5877472E~38, ~0.11754944E~37): ~0.11032015E~37 ~0.11032015E~37 +(~0.123, ~0.5877472E~38, ~0.5877472E~38): ~0.5154543E~38 ~0.5154543E~38 +(~0.123, ~0.5877472E~38, ~0.1E~44): 0.722927E~39 0.722927E~39 +(~0.123, ~0.5877472E~38, ~0.0): 0.722928E~39 0.722928E~39 +(~0.123, ~0.1E~44, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(~0.123, ~0.1E~44, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(~0.123, ~0.1E~44, 0.1E~44): 0.1E~44 0.1E~44 +(~0.123, ~0.1E~44, 0.0): 0.0 0.0 +(~0.123, ~0.1E~44, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(~0.123, ~0.1E~44, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(~0.123, ~0.1E~44, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(~0.123, ~0.1E~44, ~0.0): 0.0 0.0 +(~0.123E~2, 0.34028235E39, 0.34028235E39): 0.3398638E39 0.3398638E39 +(~0.123E~2, 0.34028235E39, 0.17014117E39): 0.16972263E39 0.16972263E39 +(~0.123E~2, 0.34028235E39, 0.123E4): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, 0.123E2): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, 0.31415927E1): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, 0.27182817E1): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, 0.123E1): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, 0.123): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, 0.123E~2): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, 0.11754944E~37): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, 0.5877472E~38): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, 0.1E~44): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, 0.0): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, ~0.34028235E39): ~inf ~inf +(~0.123E~2, 0.34028235E39, ~0.17014117E39): ~0.17055971E39 ~0.17055971E39 +(~0.123E~2, 0.34028235E39, ~0.123E4): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, ~0.123E2): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, ~0.31415927E1): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, ~0.27182817E1): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, ~0.123E1): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, ~0.123): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, ~0.123E~2): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, ~0.11754944E~37): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, ~0.5877472E~38): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, ~0.1E~44): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.34028235E39, ~0.0): ~0.4185473E36 ~0.4185473E36 +(~0.123E~2, 0.17014117E39, 0.34028235E39): 0.34007307E39 0.34007307E39 +(~0.123E~2, 0.17014117E39, 0.17014117E39): 0.1699319E39 0.1699319E39 +(~0.123E~2, 0.17014117E39, 0.123E4): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, 0.123E2): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, 0.31415927E1): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, 0.27182817E1): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, 0.123E1): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, 0.123): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, 0.123E~2): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, 0.11754944E~37): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, 0.5877472E~38): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, 0.1E~44): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, 0.0): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, ~0.34028235E39): ~inf ~inf +(~0.123E~2, 0.17014117E39, ~0.17014117E39): ~0.17035044E39 ~0.17035044E39 +(~0.123E~2, 0.17014117E39, ~0.123E4): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, ~0.123E2): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, ~0.31415927E1): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, ~0.27182817E1): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, ~0.123E1): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, ~0.123): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, ~0.123E~2): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, ~0.11754944E~37): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, ~0.5877472E~38): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, ~0.1E~44): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.17014117E39, ~0.0): ~0.20927364E36 ~0.20927364E36 +(~0.123E~2, 0.123E4, 0.123E4): 0.1228487E4 0.1228487E4 +(~0.123E~2, 0.123E4, 0.123E2): 0.107871E2 0.107871E2 +(~0.123E~2, 0.123E4, 0.31415927E1): 0.16286926E1 0.16286926E1 +(~0.123E~2, 0.123E4, 0.27182817E1): 0.12053816E1 0.12053816E1 +(~0.123E~2, 0.123E4, 0.123E1): ~0.28290004 ~0.28290004 +(~0.123E~2, 0.123E4, 0.123): ~0.13899001E1 ~0.13899001E1 +(~0.123E~2, 0.123E4, 0.123E~2): ~0.15116701E1 ~0.15116701E1 +(~0.123E~2, 0.123E4, 0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(~0.123E~2, 0.123E4, 0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(~0.123E~2, 0.123E4, 0.1E~44): ~0.15129001E1 ~0.15129001E1 +(~0.123E~2, 0.123E4, 0.0): ~0.15129001E1 ~0.15129001E1 +(~0.123E~2, 0.123E4, ~0.123E4): ~0.1231513E4 ~0.1231513E4 +(~0.123E~2, 0.123E4, ~0.123E2): ~0.13812901E2 ~0.13812901E2 +(~0.123E~2, 0.123E4, ~0.31415927E1): ~0.4654493E1 ~0.4654493E1 +(~0.123E~2, 0.123E4, ~0.27182817E1): ~0.42311816E1 ~0.42311816E1 +(~0.123E~2, 0.123E4, ~0.123E1): ~0.27429001E1 ~0.27429001E1 +(~0.123E~2, 0.123E4, ~0.123): ~0.16359E1 ~0.16359E1 +(~0.123E~2, 0.123E4, ~0.123E~2): ~0.15141301E1 ~0.15141301E1 +(~0.123E~2, 0.123E4, ~0.11754944E~37): ~0.15129001E1 ~0.15129001E1 +(~0.123E~2, 0.123E4, ~0.5877472E~38): ~0.15129001E1 ~0.15129001E1 +(~0.123E~2, 0.123E4, ~0.1E~44): ~0.15129001E1 ~0.15129001E1 +(~0.123E~2, 0.123E4, ~0.0): ~0.15129001E1 ~0.15129001E1 +(~0.123E~2, 0.123E2, 0.123E4): 0.12299849E4 0.12299849E4 +(~0.123E~2, 0.123E2, 0.123E2): 0.12284871E2 0.12284871E2 +(~0.123E~2, 0.123E2, 0.31415927E1): 0.31264637E1 0.31264637E1 +(~0.123E~2, 0.123E2, 0.27182817E1): 0.27031527E1 0.27031527E1 +(~0.123E~2, 0.123E2, 0.123E1): 0.1214871E1 0.1214871E1 +(~0.123E~2, 0.123E2, 0.123): 0.107871 0.107871 +(~0.123E~2, 0.123E2, 0.123E~2): ~0.13899001E~1 ~0.13899001E~1 +(~0.123E~2, 0.123E2, 0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E~2, 0.123E2, 0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E~2, 0.123E2, 0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E~2, 0.123E2, 0.0): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E~2, 0.123E2, ~0.123E4): ~0.12300151E4 ~0.12300151E4 +(~0.123E~2, 0.123E2, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(~0.123E~2, 0.123E2, ~0.31415927E1): ~0.31567218E1 ~0.31567218E1 +(~0.123E~2, 0.123E2, ~0.27182817E1): ~0.27334108E1 ~0.27334108E1 +(~0.123E~2, 0.123E2, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(~0.123E~2, 0.123E2, ~0.123): ~0.13812901 ~0.13812901 +(~0.123E~2, 0.123E2, ~0.123E~2): ~0.16359001E~1 ~0.16359001E~1 +(~0.123E~2, 0.123E2, ~0.11754944E~37): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E~2, 0.123E2, ~0.5877472E~38): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E~2, 0.123E2, ~0.1E~44): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E~2, 0.123E2, ~0.0): ~0.15129001E~1 ~0.15129001E~1 +(~0.123E~2, 0.31415927E1, 0.123E4): 0.12299961E4 0.12299961E4 +(~0.123E~2, 0.31415927E1, 0.123E2): 0.12296136E2 0.12296136E2 +(~0.123E~2, 0.31415927E1, 0.31415927E1): 0.31377287E1 0.31377287E1 +(~0.123E~2, 0.31415927E1, 0.27182817E1): 0.27144177E1 0.27144177E1 +(~0.123E~2, 0.31415927E1, 0.123E1): 0.12261358E1 0.12261358E1 +(~0.123E~2, 0.31415927E1, 0.123): 0.11913584 0.11913584 +(~0.123E~2, 0.31415927E1, 0.123E~2): ~0.26341593E~2 ~0.26341593E~2 +(~0.123E~2, 0.31415927E1, 0.11754944E~37): ~0.38641593E~2 ~0.38641593E~2 +(~0.123E~2, 0.31415927E1, 0.5877472E~38): ~0.38641593E~2 ~0.38641593E~2 +(~0.123E~2, 0.31415927E1, 0.1E~44): ~0.38641593E~2 ~0.38641593E~2 +(~0.123E~2, 0.31415927E1, 0.0): ~0.38641593E~2 ~0.38641593E~2 +(~0.123E~2, 0.31415927E1, ~0.123E4): ~0.12300039E4 ~0.12300039E4 +(~0.123E~2, 0.31415927E1, ~0.123E2): ~0.123038645E2 ~0.123038645E2 +(~0.123E~2, 0.31415927E1, ~0.31415927E1): ~0.31454568E1 ~0.31454568E1 +(~0.123E~2, 0.31415927E1, ~0.27182817E1): ~0.27221458E1 ~0.27221458E1 +(~0.123E~2, 0.31415927E1, ~0.123E1): ~0.12338642E1 ~0.12338642E1 +(~0.123E~2, 0.31415927E1, ~0.123): ~0.12686417 ~0.12686417 +(~0.123E~2, 0.31415927E1, ~0.123E~2): ~0.50941594E~2 ~0.50941594E~2 +(~0.123E~2, 0.31415927E1, ~0.11754944E~37): ~0.38641593E~2 ~0.38641593E~2 +(~0.123E~2, 0.31415927E1, ~0.5877472E~38): ~0.38641593E~2 ~0.38641593E~2 +(~0.123E~2, 0.31415927E1, ~0.1E~44): ~0.38641593E~2 ~0.38641593E~2 +(~0.123E~2, 0.31415927E1, ~0.0): ~0.38641593E~2 ~0.38641593E~2 +(~0.123E~2, 0.27182817E1, 0.123E4): 0.12299967E4 0.12299967E4 +(~0.123E~2, 0.27182817E1, 0.123E2): 0.12296657E2 0.12296657E2 +(~0.123E~2, 0.27182817E1, 0.31415927E1): 0.31382492E1 0.31382492E1 +(~0.123E~2, 0.27182817E1, 0.27182817E1): 0.27149382E1 0.27149382E1 +(~0.123E~2, 0.27182817E1, 0.123E1): 0.12266566E1 0.12266566E1 +(~0.123E~2, 0.27182817E1, 0.123): 0.11965652 0.11965652 +(~0.123E~2, 0.27182817E1, 0.123E~2): ~0.21134866E~2 ~0.21134866E~2 +(~0.123E~2, 0.27182817E1, 0.11754944E~37): ~0.33434867E~2 ~0.33434867E~2 +(~0.123E~2, 0.27182817E1, 0.5877472E~38): ~0.33434867E~2 ~0.33434867E~2 +(~0.123E~2, 0.27182817E1, 0.1E~44): ~0.33434867E~2 ~0.33434867E~2 +(~0.123E~2, 0.27182817E1, 0.0): ~0.33434867E~2 ~0.33434867E~2 +(~0.123E~2, 0.27182817E1, ~0.123E4): ~0.12300033E4 ~0.12300033E4 +(~0.123E~2, 0.27182817E1, ~0.123E2): ~0.12303344E2 ~0.12303344E2 +(~0.123E~2, 0.27182817E1, ~0.31415927E1): ~0.31449363E1 ~0.31449363E1 +(~0.123E~2, 0.27182817E1, ~0.27182817E1): ~0.27216253E1 ~0.27216253E1 +(~0.123E~2, 0.27182817E1, ~0.123E1): ~0.12333435E1 ~0.12333435E1 +(~0.123E~2, 0.27182817E1, ~0.123): ~0.12634349 ~0.12634349 +(~0.123E~2, 0.27182817E1, ~0.123E~2): ~0.45734867E~2 ~0.45734867E~2 +(~0.123E~2, 0.27182817E1, ~0.11754944E~37): ~0.33434867E~2 ~0.33434867E~2 +(~0.123E~2, 0.27182817E1, ~0.5877472E~38): ~0.33434867E~2 ~0.33434867E~2 +(~0.123E~2, 0.27182817E1, ~0.1E~44): ~0.33434867E~2 ~0.33434867E~2 +(~0.123E~2, 0.27182817E1, ~0.0): ~0.33434867E~2 ~0.33434867E~2 +(~0.123E~2, 0.123E1, 0.123E4): 0.12299985E4 0.12299985E4 +(~0.123E~2, 0.123E1, 0.123E2): 0.12298488E2 0.12298488E2 +(~0.123E~2, 0.123E1, 0.31415927E1): 0.31400797E1 0.31400797E1 +(~0.123E~2, 0.123E1, 0.27182817E1): 0.27167687E1 0.27167687E1 +(~0.123E~2, 0.123E1, 0.123E1): 0.12284871E1 0.12284871E1 +(~0.123E~2, 0.123E1, 0.123): 0.1214871 0.1214871 +(~0.123E~2, 0.123E1, 0.123E~2): ~0.28290003E~3 ~0.28290003E~3 +(~0.123E~2, 0.123E1, 0.11754944E~37): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E~2, 0.123E1, 0.5877472E~38): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E~2, 0.123E1, 0.1E~44): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E~2, 0.123E1, 0.0): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E~2, 0.123E1, ~0.123E4): ~0.12300015E4 ~0.12300015E4 +(~0.123E~2, 0.123E1, ~0.123E2): ~0.12301513E2 ~0.12301513E2 +(~0.123E~2, 0.123E1, ~0.31415927E1): ~0.31431057E1 ~0.31431057E1 +(~0.123E~2, 0.123E1, ~0.27182817E1): ~0.27197948E1 ~0.27197948E1 +(~0.123E~2, 0.123E1, ~0.123E1): ~0.12315129E1 ~0.12315129E1 +(~0.123E~2, 0.123E1, ~0.123): ~0.1245129 ~0.1245129 +(~0.123E~2, 0.123E1, ~0.123E~2): ~0.27429E~2 ~0.27429E~2 +(~0.123E~2, 0.123E1, ~0.11754944E~37): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E~2, 0.123E1, ~0.5877472E~38): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E~2, 0.123E1, ~0.1E~44): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E~2, 0.123E1, ~0.0): ~0.15129001E~2 ~0.15129001E~2 +(~0.123E~2, 0.123, 0.123E4): 0.12299999E4 0.12299999E4 +(~0.123E~2, 0.123, 0.123E2): 0.12299849E2 0.12299849E2 +(~0.123E~2, 0.123, 0.31415927E1): 0.31414413E1 0.31414413E1 +(~0.123E~2, 0.123, 0.27182817E1): 0.27181304E1 0.27181304E1 +(~0.123E~2, 0.123, 0.123E1): 0.12298487E1 0.12298487E1 +(~0.123E~2, 0.123, 0.123): 0.12284871 0.12284871 +(~0.123E~2, 0.123, 0.123E~2): 0.10787101E~2 0.10787101E~2 +(~0.123E~2, 0.123, 0.11754944E~37): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, 0.5877472E~38): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, 0.1E~44): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, 0.0): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, ~0.123E4): ~0.12300001E4 ~0.12300001E4 +(~0.123E~2, 0.123, ~0.123E2): ~0.12300152E2 ~0.12300152E2 +(~0.123E~2, 0.123, ~0.31415927E1): ~0.31417441E1 ~0.31417441E1 +(~0.123E~2, 0.123, ~0.27182817E1): ~0.27184331E1 ~0.27184331E1 +(~0.123E~2, 0.123, ~0.123E1): ~0.12301513E1 ~0.12301513E1 +(~0.123E~2, 0.123, ~0.123): ~0.123151295 ~0.123151295 +(~0.123E~2, 0.123, ~0.123E~2): ~0.138129E~2 ~0.138129E~2 +(~0.123E~2, 0.123, ~0.11754944E~37): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, ~0.5877472E~38): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, ~0.1E~44): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, ~0.0): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123E~2, 0.123E4): 0.123E4 0.123E4 +(~0.123E~2, 0.123E~2, 0.123E2): 0.12299998E2 0.12299998E2 +(~0.123E~2, 0.123E~2, 0.31415927E1): 0.31415913E1 0.31415913E1 +(~0.123E~2, 0.123E~2, 0.27182817E1): 0.27182803E1 0.27182803E1 +(~0.123E~2, 0.123E~2, 0.123E1): 0.12299985E1 0.12299985E1 +(~0.123E~2, 0.123E~2, 0.123): 0.12299849 0.12299849 +(~0.123E~2, 0.123E~2, 0.123E~2): 0.12284871E~2 0.12284871E~2 +(~0.123E~2, 0.123E~2, 0.11754944E~37): ~0.15129001E~5 ~0.15129001E~5 +(~0.123E~2, 0.123E~2, 0.5877472E~38): ~0.15129001E~5 ~0.15129001E~5 +(~0.123E~2, 0.123E~2, 0.1E~44): ~0.15129001E~5 ~0.15129001E~5 +(~0.123E~2, 0.123E~2, 0.0): ~0.15129001E~5 ~0.15129001E~5 +(~0.123E~2, 0.123E~2, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.123E~2, 0.123E~2, ~0.123E2): ~0.12300002E2 ~0.12300002E2 +(~0.123E~2, 0.123E~2, ~0.31415927E1): ~0.31415942E1 ~0.31415942E1 +(~0.123E~2, 0.123E~2, ~0.27182817E1): ~0.27182832E1 ~0.27182832E1 +(~0.123E~2, 0.123E~2, ~0.123E1): ~0.12300016E1 ~0.12300016E1 +(~0.123E~2, 0.123E~2, ~0.123): ~0.123001516 ~0.123001516 +(~0.123E~2, 0.123E~2, ~0.123E~2): ~0.1231513E~2 ~0.1231513E~2 +(~0.123E~2, 0.123E~2, ~0.11754944E~37): ~0.15129001E~5 ~0.15129001E~5 +(~0.123E~2, 0.123E~2, ~0.5877472E~38): ~0.15129001E~5 ~0.15129001E~5 +(~0.123E~2, 0.123E~2, ~0.1E~44): ~0.15129001E~5 ~0.15129001E~5 +(~0.123E~2, 0.123E~2, ~0.0): ~0.15129001E~5 ~0.15129001E~5 +(~0.123E~2, 0.11754944E~37, 0.11754944E~37): 0.11740485E~37 0.11740485E~37 +(~0.123E~2, 0.11754944E~37, 0.5877472E~38): 0.5863013E~38 0.5863013E~38 +(~0.123E~2, 0.11754944E~37, 0.1E~44): ~0.14457E~40 ~0.14457E~40 +(~0.123E~2, 0.11754944E~37, 0.0): ~0.14459E~40 ~0.14459E~40 +(~0.123E~2, 0.11754944E~37, ~0.11754944E~37): ~0.11769402E~37 ~0.11769402E~37 +(~0.123E~2, 0.11754944E~37, ~0.5877472E~38): ~0.589193E~38 ~0.589193E~38 +(~0.123E~2, 0.11754944E~37, ~0.1E~44): ~0.1446E~40 ~0.1446E~40 +(~0.123E~2, 0.11754944E~37, ~0.0): ~0.14459E~40 ~0.14459E~40 +(~0.123E~2, 0.5877472E~38, 0.11754944E~37): 0.11747714E~37 0.11747714E~37 +(~0.123E~2, 0.5877472E~38, 0.5877472E~38): 0.5870242E~38 0.5870242E~38 +(~0.123E~2, 0.5877472E~38, 0.1E~44): ~0.7228E~41 ~0.7228E~41 +(~0.123E~2, 0.5877472E~38, 0.0): ~0.7229E~41 ~0.7229E~41 +(~0.123E~2, 0.5877472E~38, ~0.11754944E~37): ~0.11762173E~37 ~0.11762173E~37 +(~0.123E~2, 0.5877472E~38, ~0.5877472E~38): ~0.5884701E~38 ~0.5884701E~38 +(~0.123E~2, 0.5877472E~38, ~0.1E~44): ~0.723E~41 ~0.723E~41 +(~0.123E~2, 0.5877472E~38, ~0.0): ~0.7229E~41 ~0.7229E~41 +(~0.123E~2, 0.1E~44, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(~0.123E~2, 0.1E~44, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(~0.123E~2, 0.1E~44, 0.1E~44): 0.1E~44 0.1E~44 +(~0.123E~2, 0.1E~44, 0.0): ~0.0 ~0.0 +(~0.123E~2, 0.1E~44, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(~0.123E~2, 0.1E~44, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(~0.123E~2, 0.1E~44, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(~0.123E~2, 0.1E~44, ~0.0): ~0.0 ~0.0 +(~0.123E~2, ~0.34028235E39, 0.34028235E39): inf inf +(~0.123E~2, ~0.34028235E39, 0.17014117E39): 0.17055971E39 0.17055971E39 +(~0.123E~2, ~0.34028235E39, 0.123E4): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, 0.123E2): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, 0.31415927E1): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, 0.27182817E1): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, 0.123E1): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, 0.123): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, 0.123E~2): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, 0.11754944E~37): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, 0.5877472E~38): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, 0.1E~44): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, 0.0): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, ~0.34028235E39): ~0.3398638E39 ~0.3398638E39 +(~0.123E~2, ~0.34028235E39, ~0.17014117E39): ~0.16972263E39 ~0.16972263E39 +(~0.123E~2, ~0.34028235E39, ~0.123E4): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, ~0.123E2): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, ~0.31415927E1): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, ~0.27182817E1): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, ~0.123E1): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, ~0.123): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, ~0.123E~2): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, ~0.11754944E~37): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, ~0.5877472E~38): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, ~0.1E~44): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.34028235E39, ~0.0): 0.4185473E36 0.4185473E36 +(~0.123E~2, ~0.17014117E39, 0.34028235E39): inf inf +(~0.123E~2, ~0.17014117E39, 0.17014117E39): 0.17035044E39 0.17035044E39 +(~0.123E~2, ~0.17014117E39, 0.123E4): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, 0.123E2): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, 0.31415927E1): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, 0.27182817E1): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, 0.123E1): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, 0.123): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, 0.123E~2): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, 0.11754944E~37): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, 0.5877472E~38): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, 0.1E~44): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, 0.0): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, ~0.34028235E39): ~0.34007307E39 ~0.34007307E39 +(~0.123E~2, ~0.17014117E39, ~0.17014117E39): ~0.1699319E39 ~0.1699319E39 +(~0.123E~2, ~0.17014117E39, ~0.123E4): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, ~0.123E2): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, ~0.31415927E1): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, ~0.27182817E1): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, ~0.123E1): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, ~0.123): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, ~0.123E~2): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, ~0.11754944E~37): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, ~0.5877472E~38): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, ~0.1E~44): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.17014117E39, ~0.0): 0.20927364E36 0.20927364E36 +(~0.123E~2, ~0.123E4, 0.123E4): 0.1231513E4 0.1231513E4 +(~0.123E~2, ~0.123E4, 0.123E2): 0.13812901E2 0.13812901E2 +(~0.123E~2, ~0.123E4, 0.31415927E1): 0.4654493E1 0.4654493E1 +(~0.123E~2, ~0.123E4, 0.27182817E1): 0.42311816E1 0.42311816E1 +(~0.123E~2, ~0.123E4, 0.123E1): 0.27429001E1 0.27429001E1 +(~0.123E~2, ~0.123E4, 0.123): 0.16359E1 0.16359E1 +(~0.123E~2, ~0.123E4, 0.123E~2): 0.15141301E1 0.15141301E1 +(~0.123E~2, ~0.123E4, 0.11754944E~37): 0.15129001E1 0.15129001E1 +(~0.123E~2, ~0.123E4, 0.5877472E~38): 0.15129001E1 0.15129001E1 +(~0.123E~2, ~0.123E4, 0.1E~44): 0.15129001E1 0.15129001E1 +(~0.123E~2, ~0.123E4, 0.0): 0.15129001E1 0.15129001E1 +(~0.123E~2, ~0.123E4, ~0.123E4): ~0.1228487E4 ~0.1228487E4 +(~0.123E~2, ~0.123E4, ~0.123E2): ~0.107871E2 ~0.107871E2 +(~0.123E~2, ~0.123E4, ~0.31415927E1): ~0.16286926E1 ~0.16286926E1 +(~0.123E~2, ~0.123E4, ~0.27182817E1): ~0.12053816E1 ~0.12053816E1 +(~0.123E~2, ~0.123E4, ~0.123E1): 0.28290004 0.28290004 +(~0.123E~2, ~0.123E4, ~0.123): 0.13899001E1 0.13899001E1 +(~0.123E~2, ~0.123E4, ~0.123E~2): 0.15116701E1 0.15116701E1 +(~0.123E~2, ~0.123E4, ~0.11754944E~37): 0.15129001E1 0.15129001E1 +(~0.123E~2, ~0.123E4, ~0.5877472E~38): 0.15129001E1 0.15129001E1 +(~0.123E~2, ~0.123E4, ~0.1E~44): 0.15129001E1 0.15129001E1 +(~0.123E~2, ~0.123E4, ~0.0): 0.15129001E1 0.15129001E1 +(~0.123E~2, ~0.123E2, 0.123E4): 0.12300151E4 0.12300151E4 +(~0.123E~2, ~0.123E2, 0.123E2): 0.12315129E2 0.12315129E2 +(~0.123E~2, ~0.123E2, 0.31415927E1): 0.31567218E1 0.31567218E1 +(~0.123E~2, ~0.123E2, 0.27182817E1): 0.27334108E1 0.27334108E1 +(~0.123E~2, ~0.123E2, 0.123E1): 0.1245129E1 0.1245129E1 +(~0.123E~2, ~0.123E2, 0.123): 0.13812901 0.13812901 +(~0.123E~2, ~0.123E2, 0.123E~2): 0.16359001E~1 0.16359001E~1 +(~0.123E~2, ~0.123E2, 0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(~0.123E~2, ~0.123E2, 0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(~0.123E~2, ~0.123E2, 0.1E~44): 0.15129001E~1 0.15129001E~1 +(~0.123E~2, ~0.123E2, 0.0): 0.15129001E~1 0.15129001E~1 +(~0.123E~2, ~0.123E2, ~0.123E4): ~0.12299849E4 ~0.12299849E4 +(~0.123E~2, ~0.123E2, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(~0.123E~2, ~0.123E2, ~0.31415927E1): ~0.31264637E1 ~0.31264637E1 +(~0.123E~2, ~0.123E2, ~0.27182817E1): ~0.27031527E1 ~0.27031527E1 +(~0.123E~2, ~0.123E2, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(~0.123E~2, ~0.123E2, ~0.123): ~0.107871 ~0.107871 +(~0.123E~2, ~0.123E2, ~0.123E~2): 0.13899001E~1 0.13899001E~1 +(~0.123E~2, ~0.123E2, ~0.11754944E~37): 0.15129001E~1 0.15129001E~1 +(~0.123E~2, ~0.123E2, ~0.5877472E~38): 0.15129001E~1 0.15129001E~1 +(~0.123E~2, ~0.123E2, ~0.1E~44): 0.15129001E~1 0.15129001E~1 +(~0.123E~2, ~0.123E2, ~0.0): 0.15129001E~1 0.15129001E~1 +(~0.123E~2, ~0.31415927E1, 0.123E4): 0.12300039E4 0.12300039E4 +(~0.123E~2, ~0.31415927E1, 0.123E2): 0.123038645E2 0.123038645E2 +(~0.123E~2, ~0.31415927E1, 0.31415927E1): 0.31454568E1 0.31454568E1 +(~0.123E~2, ~0.31415927E1, 0.27182817E1): 0.27221458E1 0.27221458E1 +(~0.123E~2, ~0.31415927E1, 0.123E1): 0.12338642E1 0.12338642E1 +(~0.123E~2, ~0.31415927E1, 0.123): 0.12686417 0.12686417 +(~0.123E~2, ~0.31415927E1, 0.123E~2): 0.50941594E~2 0.50941594E~2 +(~0.123E~2, ~0.31415927E1, 0.11754944E~37): 0.38641593E~2 0.38641593E~2 +(~0.123E~2, ~0.31415927E1, 0.5877472E~38): 0.38641593E~2 0.38641593E~2 +(~0.123E~2, ~0.31415927E1, 0.1E~44): 0.38641593E~2 0.38641593E~2 +(~0.123E~2, ~0.31415927E1, 0.0): 0.38641593E~2 0.38641593E~2 +(~0.123E~2, ~0.31415927E1, ~0.123E4): ~0.12299961E4 ~0.12299961E4 +(~0.123E~2, ~0.31415927E1, ~0.123E2): ~0.12296136E2 ~0.12296136E2 +(~0.123E~2, ~0.31415927E1, ~0.31415927E1): ~0.31377287E1 ~0.31377287E1 +(~0.123E~2, ~0.31415927E1, ~0.27182817E1): ~0.27144177E1 ~0.27144177E1 +(~0.123E~2, ~0.31415927E1, ~0.123E1): ~0.12261358E1 ~0.12261358E1 +(~0.123E~2, ~0.31415927E1, ~0.123): ~0.11913584 ~0.11913584 +(~0.123E~2, ~0.31415927E1, ~0.123E~2): 0.26341593E~2 0.26341593E~2 +(~0.123E~2, ~0.31415927E1, ~0.11754944E~37): 0.38641593E~2 0.38641593E~2 +(~0.123E~2, ~0.31415927E1, ~0.5877472E~38): 0.38641593E~2 0.38641593E~2 +(~0.123E~2, ~0.31415927E1, ~0.1E~44): 0.38641593E~2 0.38641593E~2 +(~0.123E~2, ~0.31415927E1, ~0.0): 0.38641593E~2 0.38641593E~2 +(~0.123E~2, ~0.27182817E1, 0.123E4): 0.12300033E4 0.12300033E4 +(~0.123E~2, ~0.27182817E1, 0.123E2): 0.12303344E2 0.12303344E2 +(~0.123E~2, ~0.27182817E1, 0.31415927E1): 0.31449363E1 0.31449363E1 +(~0.123E~2, ~0.27182817E1, 0.27182817E1): 0.27216253E1 0.27216253E1 +(~0.123E~2, ~0.27182817E1, 0.123E1): 0.12333435E1 0.12333435E1 +(~0.123E~2, ~0.27182817E1, 0.123): 0.12634349 0.12634349 +(~0.123E~2, ~0.27182817E1, 0.123E~2): 0.45734867E~2 0.45734867E~2 +(~0.123E~2, ~0.27182817E1, 0.11754944E~37): 0.33434867E~2 0.33434867E~2 +(~0.123E~2, ~0.27182817E1, 0.5877472E~38): 0.33434867E~2 0.33434867E~2 +(~0.123E~2, ~0.27182817E1, 0.1E~44): 0.33434867E~2 0.33434867E~2 +(~0.123E~2, ~0.27182817E1, 0.0): 0.33434867E~2 0.33434867E~2 +(~0.123E~2, ~0.27182817E1, ~0.123E4): ~0.12299967E4 ~0.12299967E4 +(~0.123E~2, ~0.27182817E1, ~0.123E2): ~0.12296657E2 ~0.12296657E2 +(~0.123E~2, ~0.27182817E1, ~0.31415927E1): ~0.31382492E1 ~0.31382492E1 +(~0.123E~2, ~0.27182817E1, ~0.27182817E1): ~0.27149382E1 ~0.27149382E1 +(~0.123E~2, ~0.27182817E1, ~0.123E1): ~0.12266566E1 ~0.12266566E1 +(~0.123E~2, ~0.27182817E1, ~0.123): ~0.11965652 ~0.11965652 +(~0.123E~2, ~0.27182817E1, ~0.123E~2): 0.21134866E~2 0.21134866E~2 +(~0.123E~2, ~0.27182817E1, ~0.11754944E~37): 0.33434867E~2 0.33434867E~2 +(~0.123E~2, ~0.27182817E1, ~0.5877472E~38): 0.33434867E~2 0.33434867E~2 +(~0.123E~2, ~0.27182817E1, ~0.1E~44): 0.33434867E~2 0.33434867E~2 +(~0.123E~2, ~0.27182817E1, ~0.0): 0.33434867E~2 0.33434867E~2 +(~0.123E~2, ~0.123E1, 0.123E4): 0.12300015E4 0.12300015E4 +(~0.123E~2, ~0.123E1, 0.123E2): 0.12301513E2 0.12301513E2 +(~0.123E~2, ~0.123E1, 0.31415927E1): 0.31431057E1 0.31431057E1 +(~0.123E~2, ~0.123E1, 0.27182817E1): 0.27197948E1 0.27197948E1 +(~0.123E~2, ~0.123E1, 0.123E1): 0.12315129E1 0.12315129E1 +(~0.123E~2, ~0.123E1, 0.123): 0.1245129 0.1245129 +(~0.123E~2, ~0.123E1, 0.123E~2): 0.27429E~2 0.27429E~2 +(~0.123E~2, ~0.123E1, 0.11754944E~37): 0.15129001E~2 0.15129001E~2 +(~0.123E~2, ~0.123E1, 0.5877472E~38): 0.15129001E~2 0.15129001E~2 +(~0.123E~2, ~0.123E1, 0.1E~44): 0.15129001E~2 0.15129001E~2 +(~0.123E~2, ~0.123E1, 0.0): 0.15129001E~2 0.15129001E~2 +(~0.123E~2, ~0.123E1, ~0.123E4): ~0.12299985E4 ~0.12299985E4 +(~0.123E~2, ~0.123E1, ~0.123E2): ~0.12298488E2 ~0.12298488E2 +(~0.123E~2, ~0.123E1, ~0.31415927E1): ~0.31400797E1 ~0.31400797E1 +(~0.123E~2, ~0.123E1, ~0.27182817E1): ~0.27167687E1 ~0.27167687E1 +(~0.123E~2, ~0.123E1, ~0.123E1): ~0.12284871E1 ~0.12284871E1 +(~0.123E~2, ~0.123E1, ~0.123): ~0.1214871 ~0.1214871 +(~0.123E~2, ~0.123E1, ~0.123E~2): 0.28290003E~3 0.28290003E~3 +(~0.123E~2, ~0.123E1, ~0.11754944E~37): 0.15129001E~2 0.15129001E~2 +(~0.123E~2, ~0.123E1, ~0.5877472E~38): 0.15129001E~2 0.15129001E~2 +(~0.123E~2, ~0.123E1, ~0.1E~44): 0.15129001E~2 0.15129001E~2 +(~0.123E~2, ~0.123E1, ~0.0): 0.15129001E~2 0.15129001E~2 +(~0.123E~2, ~0.123, 0.123E4): 0.12300001E4 0.12300001E4 +(~0.123E~2, ~0.123, 0.123E2): 0.12300152E2 0.12300152E2 +(~0.123E~2, ~0.123, 0.31415927E1): 0.31417441E1 0.31417441E1 +(~0.123E~2, ~0.123, 0.27182817E1): 0.27184331E1 0.27184331E1 +(~0.123E~2, ~0.123, 0.123E1): 0.12301513E1 0.12301513E1 +(~0.123E~2, ~0.123, 0.123): 0.123151295 0.123151295 +(~0.123E~2, ~0.123, 0.123E~2): 0.138129E~2 0.138129E~2 +(~0.123E~2, ~0.123, 0.11754944E~37): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, 0.5877472E~38): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, 0.1E~44): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, 0.0): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, ~0.123E4): ~0.12299999E4 ~0.12299999E4 +(~0.123E~2, ~0.123, ~0.123E2): ~0.12299849E2 ~0.12299849E2 +(~0.123E~2, ~0.123, ~0.31415927E1): ~0.31414413E1 ~0.31414413E1 +(~0.123E~2, ~0.123, ~0.27182817E1): ~0.27181304E1 ~0.27181304E1 +(~0.123E~2, ~0.123, ~0.123E1): ~0.12298487E1 ~0.12298487E1 +(~0.123E~2, ~0.123, ~0.123): ~0.12284871 ~0.12284871 +(~0.123E~2, ~0.123, ~0.123E~2): ~0.10787101E~2 ~0.10787101E~2 +(~0.123E~2, ~0.123, ~0.11754944E~37): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, ~0.5877472E~38): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, ~0.1E~44): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, ~0.0): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123E~2, 0.123E4): 0.123E4 0.123E4 +(~0.123E~2, ~0.123E~2, 0.123E2): 0.12300002E2 0.12300002E2 +(~0.123E~2, ~0.123E~2, 0.31415927E1): 0.31415942E1 0.31415942E1 +(~0.123E~2, ~0.123E~2, 0.27182817E1): 0.27182832E1 0.27182832E1 +(~0.123E~2, ~0.123E~2, 0.123E1): 0.12300016E1 0.12300016E1 +(~0.123E~2, ~0.123E~2, 0.123): 0.123001516 0.123001516 +(~0.123E~2, ~0.123E~2, 0.123E~2): 0.1231513E~2 0.1231513E~2 +(~0.123E~2, ~0.123E~2, 0.11754944E~37): 0.15129001E~5 0.15129001E~5 +(~0.123E~2, ~0.123E~2, 0.5877472E~38): 0.15129001E~5 0.15129001E~5 +(~0.123E~2, ~0.123E~2, 0.1E~44): 0.15129001E~5 0.15129001E~5 +(~0.123E~2, ~0.123E~2, 0.0): 0.15129001E~5 0.15129001E~5 +(~0.123E~2, ~0.123E~2, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.123E~2, ~0.123E~2, ~0.123E2): ~0.12299998E2 ~0.12299998E2 +(~0.123E~2, ~0.123E~2, ~0.31415927E1): ~0.31415913E1 ~0.31415913E1 +(~0.123E~2, ~0.123E~2, ~0.27182817E1): ~0.27182803E1 ~0.27182803E1 +(~0.123E~2, ~0.123E~2, ~0.123E1): ~0.12299985E1 ~0.12299985E1 +(~0.123E~2, ~0.123E~2, ~0.123): ~0.12299849 ~0.12299849 +(~0.123E~2, ~0.123E~2, ~0.123E~2): ~0.12284871E~2 ~0.12284871E~2 +(~0.123E~2, ~0.123E~2, ~0.11754944E~37): 0.15129001E~5 0.15129001E~5 +(~0.123E~2, ~0.123E~2, ~0.5877472E~38): 0.15129001E~5 0.15129001E~5 +(~0.123E~2, ~0.123E~2, ~0.1E~44): 0.15129001E~5 0.15129001E~5 +(~0.123E~2, ~0.123E~2, ~0.0): 0.15129001E~5 0.15129001E~5 +(~0.123E~2, ~0.11754944E~37, 0.11754944E~37): 0.11769402E~37 0.11769402E~37 +(~0.123E~2, ~0.11754944E~37, 0.5877472E~38): 0.589193E~38 0.589193E~38 +(~0.123E~2, ~0.11754944E~37, 0.1E~44): 0.1446E~40 0.1446E~40 +(~0.123E~2, ~0.11754944E~37, 0.0): 0.14459E~40 0.14459E~40 +(~0.123E~2, ~0.11754944E~37, ~0.11754944E~37): ~0.11740485E~37 ~0.11740485E~37 +(~0.123E~2, ~0.11754944E~37, ~0.5877472E~38): ~0.5863013E~38 ~0.5863013E~38 +(~0.123E~2, ~0.11754944E~37, ~0.1E~44): 0.14457E~40 0.14457E~40 +(~0.123E~2, ~0.11754944E~37, ~0.0): 0.14459E~40 0.14459E~40 +(~0.123E~2, ~0.5877472E~38, 0.11754944E~37): 0.11762173E~37 0.11762173E~37 +(~0.123E~2, ~0.5877472E~38, 0.5877472E~38): 0.5884701E~38 0.5884701E~38 +(~0.123E~2, ~0.5877472E~38, 0.1E~44): 0.723E~41 0.723E~41 +(~0.123E~2, ~0.5877472E~38, 0.0): 0.7229E~41 0.7229E~41 +(~0.123E~2, ~0.5877472E~38, ~0.11754944E~37): ~0.11747714E~37 ~0.11747714E~37 +(~0.123E~2, ~0.5877472E~38, ~0.5877472E~38): ~0.5870242E~38 ~0.5870242E~38 +(~0.123E~2, ~0.5877472E~38, ~0.1E~44): 0.7228E~41 0.7228E~41 +(~0.123E~2, ~0.5877472E~38, ~0.0): 0.7229E~41 0.7229E~41 +(~0.123E~2, ~0.1E~44, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(~0.123E~2, ~0.1E~44, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(~0.123E~2, ~0.1E~44, 0.1E~44): 0.1E~44 0.1E~44 +(~0.123E~2, ~0.1E~44, 0.0): 0.0 0.0 +(~0.123E~2, ~0.1E~44, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(~0.123E~2, ~0.1E~44, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(~0.123E~2, ~0.1E~44, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(~0.123E~2, ~0.1E~44, ~0.0): 0.0 0.0 +(~0.11754944E~37, 0.34028235E39, 0.123E4): 0.1226E4 0.1226E4 +(~0.11754944E~37, 0.34028235E39, 0.123E2): 0.83E1 0.83E1 +(~0.11754944E~37, 0.34028235E39, 0.123): ~0.38769999E1 ~0.38769999E1 +(~0.11754944E~37, 0.34028235E39, 0.123E~2): ~0.39987698E1 ~0.39987698E1 +(~0.11754944E~37, 0.34028235E39, ~0.123E4): ~0.1234E4 ~0.1234E4 +(~0.11754944E~37, 0.34028235E39, ~0.123E2): ~0.163E2 ~0.163E2 +(~0.11754944E~37, 0.34028235E39, ~0.27182817E1): ~0.67182817E1 ~0.67182817E1 +(~0.11754944E~37, 0.34028235E39, ~0.123E1): ~0.52299995E1 ~0.52299995E1 +(~0.11754944E~37, 0.34028235E39, ~0.123): ~0.41229997E1 ~0.41229997E1 +(~0.11754944E~37, 0.34028235E39, ~0.123E~2): ~0.400123E1 ~0.400123E1 +(~0.11754944E~37, 0.17014117E39, 0.123E4): 0.1228E4 0.1228E4 +(~0.11754944E~37, 0.17014117E39, 0.123E2): 0.103E2 0.103E2 +(~0.11754944E~37, 0.17014117E39, 0.123): ~0.18769999E1 ~0.18769999E1 +(~0.11754944E~37, 0.17014117E39, 0.123E~2): ~0.19987699E1 ~0.19987699E1 +(~0.11754944E~37, 0.17014117E39, ~0.123E4): ~0.1232E4 ~0.1232E4 +(~0.11754944E~37, 0.17014117E39, ~0.123E2): ~0.143E2 ~0.143E2 +(~0.11754944E~37, 0.17014117E39, ~0.31415927E1): ~0.51415925E1 ~0.51415925E1 +(~0.11754944E~37, 0.17014117E39, ~0.27182817E1): ~0.47182817E1 ~0.47182817E1 +(~0.11754944E~37, 0.17014117E39, ~0.123E1): ~0.323E1 ~0.323E1 +(~0.11754944E~37, 0.17014117E39, ~0.123): ~0.2123E1 ~0.2123E1 +(~0.11754944E~37, 0.17014117E39, ~0.123E~2): ~0.20012298E1 ~0.20012298E1 +(~0.11754944E~37, 0.123E4, 0.1E~44): ~0.1445858E~34 ~0.1445858E~34 +(~0.11754944E~37, 0.123E4, ~0.1E~44): ~0.1445858E~34 ~0.1445858E~34 +(~0.11754944E~37, 0.123E2, 0.1E~44): ~0.14458581E~36 ~0.14458581E~36 +(~0.11754944E~37, 0.123E2, ~0.1E~44): ~0.14458581E~36 ~0.14458581E~36 +(~0.11754944E~37, 0.31415927E1, 0.1E~44): ~0.36929242E~37 ~0.36929242E~37 +(~0.11754944E~37, 0.31415927E1, ~0.11754944E~37): ~0.4868419E~37 ~0.4868419E~37 +(~0.11754944E~37, 0.31415927E1, ~0.1E~44): ~0.36929248E~37 ~0.36929248E~37 +(~0.11754944E~37, 0.27182817E1, 0.1E~44): ~0.31953248E~37 ~0.31953248E~37 +(~0.11754944E~37, 0.27182817E1, ~0.1E~44): ~0.31953248E~37 ~0.31953248E~37 +(~0.11754944E~37, 0.123, 0.11754944E~37): 0.10309085E~37 0.10309085E~37 +(~0.11754944E~37, 0.123, 0.5877472E~38): 0.4431613E~38 0.4431613E~38 +(~0.11754944E~37, 0.123, 0.1E~44): ~0.1445857E~38 ~0.1445857E~38 +(~0.11754944E~37, 0.123, 0.0): ~0.1445858E~38 ~0.1445858E~38 +(~0.11754944E~37, 0.123, ~0.11754944E~37): ~0.13200802E~37 ~0.13200802E~37 +(~0.11754944E~37, 0.123, ~0.5877472E~38): ~0.732333E~38 ~0.732333E~38 +(~0.11754944E~37, 0.123, ~0.1E~44): ~0.144586E~38 ~0.144586E~38 +(~0.11754944E~37, 0.123, ~0.0): ~0.1445858E~38 ~0.1445858E~38 +(~0.11754944E~37, 0.123E~2, 0.11754944E~37): 0.11740485E~37 0.11740485E~37 +(~0.11754944E~37, 0.123E~2, 0.5877472E~38): 0.5863013E~38 0.5863013E~38 +(~0.11754944E~37, 0.123E~2, 0.1E~44): ~0.14457E~40 ~0.14457E~40 +(~0.11754944E~37, 0.123E~2, 0.0): ~0.14459E~40 ~0.14459E~40 +(~0.11754944E~37, 0.123E~2, ~0.11754944E~37): ~0.11769402E~37 ~0.11769402E~37 +(~0.11754944E~37, 0.123E~2, ~0.5877472E~38): ~0.589193E~38 ~0.589193E~38 +(~0.11754944E~37, 0.123E~2, ~0.1E~44): ~0.1446E~40 ~0.1446E~40 +(~0.11754944E~37, 0.123E~2, ~0.0): ~0.14459E~40 ~0.14459E~40 +(~0.11754944E~37, 0.11754944E~37, 0.0): ~0.0 ~0.0 +(~0.11754944E~37, 0.11754944E~37, ~0.0): ~0.0 ~0.0 +(~0.11754944E~37, 0.5877472E~38, 0.0): ~0.0 ~0.0 +(~0.11754944E~37, 0.5877472E~38, ~0.0): ~0.0 ~0.0 +(~0.11754944E~37, 0.1E~44, 0.0): ~0.0 ~0.0 +(~0.11754944E~37, 0.1E~44, ~0.0): ~0.0 ~0.0 +(~0.11754944E~37, ~0.34028235E39, 0.123E4): 0.1234E4 0.1234E4 +(~0.11754944E~37, ~0.34028235E39, 0.123E2): 0.163E2 0.163E2 +(~0.11754944E~37, ~0.34028235E39, 0.27182817E1): 0.67182817E1 0.67182817E1 +(~0.11754944E~37, ~0.34028235E39, 0.123E1): 0.52299995E1 0.52299995E1 +(~0.11754944E~37, ~0.34028235E39, 0.123): 0.41229997E1 0.41229997E1 +(~0.11754944E~37, ~0.34028235E39, 0.123E~2): 0.400123E1 0.400123E1 +(~0.11754944E~37, ~0.34028235E39, ~0.123E4): ~0.1226E4 ~0.1226E4 +(~0.11754944E~37, ~0.34028235E39, ~0.123E2): ~0.83E1 ~0.83E1 +(~0.11754944E~37, ~0.34028235E39, ~0.123): 0.38769999E1 0.38769999E1 +(~0.11754944E~37, ~0.34028235E39, ~0.123E~2): 0.39987698E1 0.39987698E1 +(~0.11754944E~37, ~0.17014117E39, 0.123E4): 0.1232E4 0.1232E4 +(~0.11754944E~37, ~0.17014117E39, 0.123E2): 0.143E2 0.143E2 +(~0.11754944E~37, ~0.17014117E39, 0.31415927E1): 0.51415925E1 0.51415925E1 +(~0.11754944E~37, ~0.17014117E39, 0.27182817E1): 0.47182817E1 0.47182817E1 +(~0.11754944E~37, ~0.17014117E39, 0.123E1): 0.323E1 0.323E1 +(~0.11754944E~37, ~0.17014117E39, 0.123): 0.2123E1 0.2123E1 +(~0.11754944E~37, ~0.17014117E39, 0.123E~2): 0.20012298E1 0.20012298E1 +(~0.11754944E~37, ~0.17014117E39, ~0.123E4): ~0.1228E4 ~0.1228E4 +(~0.11754944E~37, ~0.17014117E39, ~0.123E2): ~0.103E2 ~0.103E2 +(~0.11754944E~37, ~0.17014117E39, ~0.123): 0.18769999E1 0.18769999E1 +(~0.11754944E~37, ~0.17014117E39, ~0.123E~2): 0.19987699E1 0.19987699E1 +(~0.11754944E~37, ~0.123E4, 0.1E~44): 0.1445858E~34 0.1445858E~34 +(~0.11754944E~37, ~0.123E4, ~0.1E~44): 0.1445858E~34 0.1445858E~34 +(~0.11754944E~37, ~0.123E2, 0.1E~44): 0.14458581E~36 0.14458581E~36 +(~0.11754944E~37, ~0.123E2, ~0.1E~44): 0.14458581E~36 0.14458581E~36 +(~0.11754944E~37, ~0.31415927E1, 0.11754944E~37): 0.4868419E~37 0.4868419E~37 +(~0.11754944E~37, ~0.31415927E1, 0.1E~44): 0.36929248E~37 0.36929248E~37 +(~0.11754944E~37, ~0.31415927E1, ~0.1E~44): 0.36929242E~37 0.36929242E~37 +(~0.11754944E~37, ~0.27182817E1, 0.1E~44): 0.31953248E~37 0.31953248E~37 +(~0.11754944E~37, ~0.27182817E1, ~0.1E~44): 0.31953248E~37 0.31953248E~37 +(~0.11754944E~37, ~0.123, 0.11754944E~37): 0.13200802E~37 0.13200802E~37 +(~0.11754944E~37, ~0.123, 0.5877472E~38): 0.732333E~38 0.732333E~38 +(~0.11754944E~37, ~0.123, 0.1E~44): 0.144586E~38 0.144586E~38 +(~0.11754944E~37, ~0.123, 0.0): 0.1445858E~38 0.1445858E~38 +(~0.11754944E~37, ~0.123, ~0.11754944E~37): ~0.10309085E~37 ~0.10309085E~37 +(~0.11754944E~37, ~0.123, ~0.5877472E~38): ~0.4431613E~38 ~0.4431613E~38 +(~0.11754944E~37, ~0.123, ~0.1E~44): 0.1445857E~38 0.1445857E~38 +(~0.11754944E~37, ~0.123, ~0.0): 0.1445858E~38 0.1445858E~38 +(~0.11754944E~37, ~0.123E~2, 0.11754944E~37): 0.11769402E~37 0.11769402E~37 +(~0.11754944E~37, ~0.123E~2, 0.5877472E~38): 0.589193E~38 0.589193E~38 +(~0.11754944E~37, ~0.123E~2, 0.1E~44): 0.1446E~40 0.1446E~40 +(~0.11754944E~37, ~0.123E~2, 0.0): 0.14459E~40 0.14459E~40 +(~0.11754944E~37, ~0.123E~2, ~0.11754944E~37): ~0.11740485E~37 ~0.11740485E~37 +(~0.11754944E~37, ~0.123E~2, ~0.5877472E~38): ~0.5863013E~38 ~0.5863013E~38 +(~0.11754944E~37, ~0.123E~2, ~0.1E~44): 0.14457E~40 0.14457E~40 +(~0.11754944E~37, ~0.123E~2, ~0.0): 0.14459E~40 0.14459E~40 +(~0.11754944E~37, ~0.11754944E~37, 0.0): 0.0 0.0 +(~0.11754944E~37, ~0.11754944E~37, ~0.0): 0.0 0.0 +(~0.11754944E~37, ~0.5877472E~38, 0.0): 0.0 0.0 +(~0.11754944E~37, ~0.5877472E~38, ~0.0): 0.0 0.0 +(~0.11754944E~37, ~0.1E~44, 0.0): 0.0 0.0 +(~0.11754944E~37, ~0.1E~44, ~0.0): 0.0 0.0 +(~0.5877472E~38, 0.34028235E39, 0.123E4): 0.1228E4 0.1228E4 +(~0.5877472E~38, 0.34028235E39, 0.123E2): 0.103E2 0.103E2 +(~0.5877472E~38, 0.34028235E39, 0.123): ~0.18769999E1 ~0.18769999E1 +(~0.5877472E~38, 0.34028235E39, 0.123E~2): ~0.19987699E1 ~0.19987699E1 +(~0.5877472E~38, 0.34028235E39, ~0.123E4): ~0.1232E4 ~0.1232E4 +(~0.5877472E~38, 0.34028235E39, ~0.123E2): ~0.143E2 ~0.143E2 +(~0.5877472E~38, 0.34028235E39, ~0.31415927E1): ~0.51415925E1 ~0.51415925E1 +(~0.5877472E~38, 0.34028235E39, ~0.27182817E1): ~0.47182817E1 ~0.47182817E1 +(~0.5877472E~38, 0.34028235E39, ~0.123E1): ~0.323E1 ~0.323E1 +(~0.5877472E~38, 0.34028235E39, ~0.123): ~0.2123E1 ~0.2123E1 +(~0.5877472E~38, 0.34028235E39, ~0.123E~2): ~0.20012298E1 ~0.20012298E1 +(~0.5877472E~38, 0.17014117E39, 0.123E4): 0.1229E4 0.1229E4 +(~0.5877472E~38, 0.17014117E39, 0.123E2): 0.113E2 0.113E2 +(~0.5877472E~38, 0.17014117E39, 0.31415927E1): 0.21415927E1 0.21415927E1 +(~0.5877472E~38, 0.17014117E39, 0.27182817E1): 0.17182817E1 0.17182817E1 +(~0.5877472E~38, 0.17014117E39, 0.123): ~0.8769999 ~0.8769999 +(~0.5877472E~38, 0.17014117E39, 0.123E~2): ~0.99876994 ~0.99876994 +(~0.5877472E~38, 0.17014117E39, ~0.123E4): ~0.1231E4 ~0.1231E4 +(~0.5877472E~38, 0.17014117E39, ~0.123E2): ~0.133E2 ~0.133E2 +(~0.5877472E~38, 0.17014117E39, ~0.31415927E1): ~0.41415925E1 ~0.41415925E1 +(~0.5877472E~38, 0.17014117E39, ~0.27182817E1): ~0.37182817E1 ~0.37182817E1 +(~0.5877472E~38, 0.17014117E39, ~0.123E1): ~0.223E1 ~0.223E1 +(~0.5877472E~38, 0.17014117E39, ~0.123): ~0.11229999E1 ~0.11229999E1 +(~0.5877472E~38, 0.17014117E39, ~0.123E~2): ~0.10012299E1 ~0.10012299E1 +(~0.5877472E~38, 0.123E4, 0.1E~44): ~0.722929E~35 ~0.722929E~35 +(~0.5877472E~38, 0.123E4, ~0.1E~44): ~0.722929E~35 ~0.722929E~35 +(~0.5877472E~38, 0.123E2, 0.1E~44): ~0.72292904E~37 ~0.72292904E~37 +(~0.5877472E~38, 0.123E2, ~0.1E~44): ~0.72292904E~37 ~0.72292904E~37 +(~0.5877472E~38, 0.31415927E1, ~0.11754944E~37): ~0.30219568E~37 ~0.30219568E~37 +(~0.5877472E~38, 0.31415927E1, ~0.5877472E~38): ~0.24342096E~37 ~0.24342096E~37 +(~0.5877472E~38, 0.123, 0.11754944E~37): 0.11032015E~37 0.11032015E~37 +(~0.5877472E~38, 0.123, 0.5877472E~38): 0.5154543E~38 0.5154543E~38 +(~0.5877472E~38, 0.123, 0.1E~44): ~0.722927E~39 ~0.722927E~39 +(~0.5877472E~38, 0.123, 0.0): ~0.722928E~39 ~0.722928E~39 +(~0.5877472E~38, 0.123, ~0.11754944E~37): ~0.12477872E~37 ~0.12477872E~37 +(~0.5877472E~38, 0.123, ~0.5877472E~38): ~0.66004E~38 ~0.66004E~38 +(~0.5877472E~38, 0.123, ~0.1E~44): ~0.72293E~39 ~0.72293E~39 +(~0.5877472E~38, 0.123, ~0.0): ~0.722928E~39 ~0.722928E~39 +(~0.5877472E~38, 0.123E~2, 0.11754944E~37): 0.11747714E~37 0.11747714E~37 +(~0.5877472E~38, 0.123E~2, 0.5877472E~38): 0.5870242E~38 0.5870242E~38 +(~0.5877472E~38, 0.123E~2, 0.1E~44): ~0.7228E~41 ~0.7228E~41 +(~0.5877472E~38, 0.123E~2, 0.0): ~0.7229E~41 ~0.7229E~41 +(~0.5877472E~38, 0.123E~2, ~0.11754944E~37): ~0.11762173E~37 ~0.11762173E~37 +(~0.5877472E~38, 0.123E~2, ~0.5877472E~38): ~0.5884701E~38 ~0.5884701E~38 +(~0.5877472E~38, 0.123E~2, ~0.1E~44): ~0.723E~41 ~0.723E~41 +(~0.5877472E~38, 0.123E~2, ~0.0): ~0.7229E~41 ~0.7229E~41 +(~0.5877472E~38, 0.11754944E~37, 0.0): ~0.0 ~0.0 +(~0.5877472E~38, 0.11754944E~37, ~0.0): ~0.0 ~0.0 +(~0.5877472E~38, 0.5877472E~38, 0.0): ~0.0 ~0.0 +(~0.5877472E~38, 0.5877472E~38, ~0.0): ~0.0 ~0.0 +(~0.5877472E~38, 0.1E~44, 0.0): ~0.0 ~0.0 +(~0.5877472E~38, 0.1E~44, ~0.0): ~0.0 ~0.0 +(~0.5877472E~38, ~0.34028235E39, 0.123E4): 0.1232E4 0.1232E4 +(~0.5877472E~38, ~0.34028235E39, 0.123E2): 0.143E2 0.143E2 +(~0.5877472E~38, ~0.34028235E39, 0.31415927E1): 0.51415925E1 0.51415925E1 +(~0.5877472E~38, ~0.34028235E39, 0.27182817E1): 0.47182817E1 0.47182817E1 +(~0.5877472E~38, ~0.34028235E39, 0.123E1): 0.323E1 0.323E1 +(~0.5877472E~38, ~0.34028235E39, 0.123): 0.2123E1 0.2123E1 +(~0.5877472E~38, ~0.34028235E39, 0.123E~2): 0.20012298E1 0.20012298E1 +(~0.5877472E~38, ~0.34028235E39, ~0.123E4): ~0.1228E4 ~0.1228E4 +(~0.5877472E~38, ~0.34028235E39, ~0.123E2): ~0.103E2 ~0.103E2 +(~0.5877472E~38, ~0.34028235E39, ~0.123): 0.18769999E1 0.18769999E1 +(~0.5877472E~38, ~0.34028235E39, ~0.123E~2): 0.19987699E1 0.19987699E1 +(~0.5877472E~38, ~0.17014117E39, 0.123E4): 0.1231E4 0.1231E4 +(~0.5877472E~38, ~0.17014117E39, 0.123E2): 0.133E2 0.133E2 +(~0.5877472E~38, ~0.17014117E39, 0.31415927E1): 0.41415925E1 0.41415925E1 +(~0.5877472E~38, ~0.17014117E39, 0.27182817E1): 0.37182817E1 0.37182817E1 +(~0.5877472E~38, ~0.17014117E39, 0.123E1): 0.223E1 0.223E1 +(~0.5877472E~38, ~0.17014117E39, 0.123): 0.11229999E1 0.11229999E1 +(~0.5877472E~38, ~0.17014117E39, 0.123E~2): 0.10012299E1 0.10012299E1 +(~0.5877472E~38, ~0.17014117E39, ~0.123E4): ~0.1229E4 ~0.1229E4 +(~0.5877472E~38, ~0.17014117E39, ~0.123E2): ~0.113E2 ~0.113E2 +(~0.5877472E~38, ~0.17014117E39, ~0.31415927E1): ~0.21415927E1 ~0.21415927E1 +(~0.5877472E~38, ~0.17014117E39, ~0.27182817E1): ~0.17182817E1 ~0.17182817E1 +(~0.5877472E~38, ~0.17014117E39, ~0.123): 0.8769999 0.8769999 +(~0.5877472E~38, ~0.17014117E39, ~0.123E~2): 0.99876994 0.99876994 +(~0.5877472E~38, ~0.123E4, 0.1E~44): 0.722929E~35 0.722929E~35 +(~0.5877472E~38, ~0.123E4, ~0.1E~44): 0.722929E~35 0.722929E~35 +(~0.5877472E~38, ~0.123E2, 0.1E~44): 0.72292904E~37 0.72292904E~37 +(~0.5877472E~38, ~0.123E2, ~0.1E~44): 0.72292904E~37 0.72292904E~37 +(~0.5877472E~38, ~0.31415927E1, 0.11754944E~37): 0.30219568E~37 0.30219568E~37 +(~0.5877472E~38, ~0.31415927E1, 0.5877472E~38): 0.24342096E~37 0.24342096E~37 +(~0.5877472E~38, ~0.123, 0.11754944E~37): 0.12477872E~37 0.12477872E~37 +(~0.5877472E~38, ~0.123, 0.5877472E~38): 0.66004E~38 0.66004E~38 +(~0.5877472E~38, ~0.123, 0.1E~44): 0.72293E~39 0.72293E~39 +(~0.5877472E~38, ~0.123, 0.0): 0.722928E~39 0.722928E~39 +(~0.5877472E~38, ~0.123, ~0.11754944E~37): ~0.11032015E~37 ~0.11032015E~37 +(~0.5877472E~38, ~0.123, ~0.5877472E~38): ~0.5154543E~38 ~0.5154543E~38 +(~0.5877472E~38, ~0.123, ~0.1E~44): 0.722927E~39 0.722927E~39 +(~0.5877472E~38, ~0.123, ~0.0): 0.722928E~39 0.722928E~39 +(~0.5877472E~38, ~0.123E~2, 0.11754944E~37): 0.11762173E~37 0.11762173E~37 +(~0.5877472E~38, ~0.123E~2, 0.5877472E~38): 0.5884701E~38 0.5884701E~38 +(~0.5877472E~38, ~0.123E~2, 0.1E~44): 0.723E~41 0.723E~41 +(~0.5877472E~38, ~0.123E~2, 0.0): 0.7229E~41 0.7229E~41 +(~0.5877472E~38, ~0.123E~2, ~0.11754944E~37): ~0.11747714E~37 ~0.11747714E~37 +(~0.5877472E~38, ~0.123E~2, ~0.5877472E~38): ~0.5870242E~38 ~0.5870242E~38 +(~0.5877472E~38, ~0.123E~2, ~0.1E~44): 0.7228E~41 0.7228E~41 +(~0.5877472E~38, ~0.123E~2, ~0.0): 0.7229E~41 0.7229E~41 +(~0.5877472E~38, ~0.11754944E~37, 0.0): 0.0 0.0 +(~0.5877472E~38, ~0.11754944E~37, ~0.0): 0.0 0.0 +(~0.5877472E~38, ~0.5877472E~38, 0.0): 0.0 0.0 +(~0.5877472E~38, ~0.5877472E~38, ~0.0): 0.0 0.0 +(~0.5877472E~38, ~0.1E~44, 0.0): 0.0 0.0 +(~0.5877472E~38, ~0.1E~44, ~0.0): 0.0 0.0 +(~0.1E~44, 0.34028235E39, 0.123E4): 0.123E4 0.123E4 +(~0.1E~44, 0.34028235E39, 0.123E2): 0.123E2 0.123E2 +(~0.1E~44, 0.34028235E39, 0.31415927E1): 0.31415923E1 0.31415923E1 +(~0.1E~44, 0.34028235E39, 0.27182817E1): 0.27182813E1 0.27182813E1 +(~0.1E~44, 0.34028235E39, 0.123E1): 0.12299995E1 0.12299995E1 +(~0.1E~44, 0.34028235E39, 0.123): 0.12299953 0.12299953 +(~0.1E~44, 0.34028235E39, 0.123E~2): 0.12295232E~2 0.12295232E~2 +(~0.1E~44, 0.34028235E39, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.1E~44, 0.34028235E39, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.1E~44, 0.34028235E39, ~0.31415927E1): ~0.31415932E1 ~0.31415932E1 +(~0.1E~44, 0.34028235E39, ~0.27182817E1): ~0.27182822E1 ~0.27182822E1 +(~0.1E~44, 0.34028235E39, ~0.123E1): ~0.12300005E1 ~0.12300005E1 +(~0.1E~44, 0.34028235E39, ~0.123): ~0.12300048 ~0.12300048 +(~0.1E~44, 0.34028235E39, ~0.123E~2): ~0.12304769E~2 ~0.12304769E~2 +(~0.1E~44, 0.17014117E39, 0.123E4): 0.123E4 0.123E4 +(~0.1E~44, 0.17014117E39, 0.123E2): 0.123E2 0.123E2 +(~0.1E~44, 0.17014117E39, 0.31415927E1): 0.31415925E1 0.31415925E1 +(~0.1E~44, 0.17014117E39, 0.27182817E1): 0.27182815E1 0.27182815E1 +(~0.1E~44, 0.17014117E39, 0.123E1): 0.12299998E1 0.12299998E1 +(~0.1E~44, 0.17014117E39, 0.123): 0.122999765 0.122999765 +(~0.1E~44, 0.17014117E39, 0.123E~2): 0.12297616E~2 0.12297616E~2 +(~0.1E~44, 0.17014117E39, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.1E~44, 0.17014117E39, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.1E~44, 0.17014117E39, ~0.31415927E1): ~0.3141593E1 ~0.3141593E1 +(~0.1E~44, 0.17014117E39, ~0.27182817E1): ~0.2718282E1 ~0.2718282E1 +(~0.1E~44, 0.17014117E39, ~0.123E1): ~0.12300003E1 ~0.12300003E1 +(~0.1E~44, 0.17014117E39, ~0.123): ~0.12300024 ~0.12300024 +(~0.1E~44, 0.17014117E39, ~0.123E~2): ~0.12302385E~2 ~0.12302385E~2 +(~0.1E~44, 0.123E2, 0.11754944E~37): 0.11754927E~37 0.11754927E~37 +(~0.1E~44, 0.123E2, 0.5877472E~38): 0.5877455E~38 0.5877455E~38 +(~0.1E~44, 0.123E2, 0.1E~44): ~0.15E~43 ~0.15E~43 +(~0.1E~44, 0.123E2, 0.0): ~0.17E~43 ~0.17E~43 +(~0.1E~44, 0.123E2, ~0.11754944E~37): ~0.1175496E~37 ~0.1175496E~37 +(~0.1E~44, 0.123E2, ~0.5877472E~38): ~0.5877489E~38 ~0.5877489E~38 +(~0.1E~44, 0.123E2, ~0.1E~44): ~0.18E~43 ~0.18E~43 +(~0.1E~44, 0.123E2, ~0.0): ~0.17E~43 ~0.17E~43 +(~0.1E~44, 0.31415927E1, 0.11754944E~37): 0.1175494E~37 0.1175494E~37 +(~0.1E~44, 0.31415927E1, 0.5877472E~38): 0.5877468E~38 0.5877468E~38 +(~0.1E~44, 0.31415927E1, 0.1E~44): ~0.3E~44 ~0.3E~44 +(~0.1E~44, 0.31415927E1, 0.0): ~0.4E~44 ~0.4E~44 +(~0.1E~44, 0.31415927E1, ~0.11754944E~37): ~0.11754948E~37 ~0.11754948E~37 +(~0.1E~44, 0.31415927E1, ~0.5877472E~38): ~0.5877476E~38 ~0.5877476E~38 +(~0.1E~44, 0.31415927E1, ~0.1E~44): ~0.6E~44 ~0.6E~44 +(~0.1E~44, 0.31415927E1, ~0.0): ~0.4E~44 ~0.4E~44 +(~0.1E~44, 0.27182817E1, 0.11754944E~37): 0.1175494E~37 0.1175494E~37 +(~0.1E~44, 0.27182817E1, 0.5877472E~38): 0.5877468E~38 0.5877468E~38 +(~0.1E~44, 0.27182817E1, 0.1E~44): ~0.3E~44 ~0.3E~44 +(~0.1E~44, 0.27182817E1, 0.0): ~0.4E~44 ~0.4E~44 +(~0.1E~44, 0.27182817E1, ~0.11754944E~37): ~0.11754948E~37 ~0.11754948E~37 +(~0.1E~44, 0.27182817E1, ~0.5877472E~38): ~0.5877476E~38 ~0.5877476E~38 +(~0.1E~44, 0.27182817E1, ~0.1E~44): ~0.6E~44 ~0.6E~44 +(~0.1E~44, 0.27182817E1, ~0.0): ~0.4E~44 ~0.4E~44 +(~0.1E~44, 0.123E1, 0.11754944E~37): 0.11754942E~37 0.11754942E~37 +(~0.1E~44, 0.123E1, 0.5877472E~38): 0.587747E~38 0.587747E~38 +(~0.1E~44, 0.123E1, 0.1E~44): ~0.0 ~0.0 +(~0.1E~44, 0.123E1, 0.0): ~0.1E~44 ~0.1E~44 +(~0.1E~44, 0.123E1, ~0.11754944E~37): ~0.11754945E~37 ~0.11754945E~37 +(~0.1E~44, 0.123E1, ~0.5877472E~38): ~0.5877473E~38 ~0.5877473E~38 +(~0.1E~44, 0.123E1, ~0.1E~44): ~0.3E~44 ~0.3E~44 +(~0.1E~44, 0.123E1, ~0.0): ~0.1E~44 ~0.1E~44 +(~0.1E~44, 0.123, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(~0.1E~44, 0.123, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(~0.1E~44, 0.123, 0.1E~44): 0.1E~44 0.1E~44 +(~0.1E~44, 0.123, 0.0): ~0.0 ~0.0 +(~0.1E~44, 0.123, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(~0.1E~44, 0.123, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(~0.1E~44, 0.123, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(~0.1E~44, 0.123, ~0.0): ~0.0 ~0.0 +(~0.1E~44, 0.123E~2, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(~0.1E~44, 0.123E~2, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(~0.1E~44, 0.123E~2, 0.1E~44): 0.1E~44 0.1E~44 +(~0.1E~44, 0.123E~2, 0.0): ~0.0 ~0.0 +(~0.1E~44, 0.123E~2, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(~0.1E~44, 0.123E~2, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(~0.1E~44, 0.123E~2, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(~0.1E~44, 0.123E~2, ~0.0): ~0.0 ~0.0 +(~0.1E~44, 0.11754944E~37, 0.0): ~0.0 ~0.0 +(~0.1E~44, 0.11754944E~37, ~0.0): ~0.0 ~0.0 +(~0.1E~44, 0.5877472E~38, 0.0): ~0.0 ~0.0 +(~0.1E~44, 0.5877472E~38, ~0.0): ~0.0 ~0.0 +(~0.1E~44, 0.1E~44, 0.0): ~0.0 ~0.0 +(~0.1E~44, 0.1E~44, ~0.0): ~0.0 ~0.0 +(~0.1E~44, ~0.34028235E39, 0.123E4): 0.123E4 0.123E4 +(~0.1E~44, ~0.34028235E39, 0.123E2): 0.123E2 0.123E2 +(~0.1E~44, ~0.34028235E39, 0.31415927E1): 0.31415932E1 0.31415932E1 +(~0.1E~44, ~0.34028235E39, 0.27182817E1): 0.27182822E1 0.27182822E1 +(~0.1E~44, ~0.34028235E39, 0.123E1): 0.12300005E1 0.12300005E1 +(~0.1E~44, ~0.34028235E39, 0.123): 0.12300048 0.12300048 +(~0.1E~44, ~0.34028235E39, 0.123E~2): 0.12304769E~2 0.12304769E~2 +(~0.1E~44, ~0.34028235E39, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.1E~44, ~0.34028235E39, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.1E~44, ~0.34028235E39, ~0.31415927E1): ~0.31415923E1 ~0.31415923E1 +(~0.1E~44, ~0.34028235E39, ~0.27182817E1): ~0.27182813E1 ~0.27182813E1 +(~0.1E~44, ~0.34028235E39, ~0.123E1): ~0.12299995E1 ~0.12299995E1 +(~0.1E~44, ~0.34028235E39, ~0.123): ~0.12299953 ~0.12299953 +(~0.1E~44, ~0.34028235E39, ~0.123E~2): ~0.12295232E~2 ~0.12295232E~2 +(~0.1E~44, ~0.17014117E39, 0.123E4): 0.123E4 0.123E4 +(~0.1E~44, ~0.17014117E39, 0.123E2): 0.123E2 0.123E2 +(~0.1E~44, ~0.17014117E39, 0.31415927E1): 0.3141593E1 0.3141593E1 +(~0.1E~44, ~0.17014117E39, 0.27182817E1): 0.2718282E1 0.2718282E1 +(~0.1E~44, ~0.17014117E39, 0.123E1): 0.12300003E1 0.12300003E1 +(~0.1E~44, ~0.17014117E39, 0.123): 0.12300024 0.12300024 +(~0.1E~44, ~0.17014117E39, 0.123E~2): 0.12302385E~2 0.12302385E~2 +(~0.1E~44, ~0.17014117E39, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.1E~44, ~0.17014117E39, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.1E~44, ~0.17014117E39, ~0.31415927E1): ~0.31415925E1 ~0.31415925E1 +(~0.1E~44, ~0.17014117E39, ~0.27182817E1): ~0.27182815E1 ~0.27182815E1 +(~0.1E~44, ~0.17014117E39, ~0.123E1): ~0.12299998E1 ~0.12299998E1 +(~0.1E~44, ~0.17014117E39, ~0.123): ~0.122999765 ~0.122999765 +(~0.1E~44, ~0.17014117E39, ~0.123E~2): ~0.12297616E~2 ~0.12297616E~2 +(~0.1E~44, ~0.123E2, 0.11754944E~37): 0.1175496E~37 0.1175496E~37 +(~0.1E~44, ~0.123E2, 0.5877472E~38): 0.5877489E~38 0.5877489E~38 +(~0.1E~44, ~0.123E2, 0.1E~44): 0.18E~43 0.18E~43 +(~0.1E~44, ~0.123E2, 0.0): 0.17E~43 0.17E~43 +(~0.1E~44, ~0.123E2, ~0.11754944E~37): ~0.11754927E~37 ~0.11754927E~37 +(~0.1E~44, ~0.123E2, ~0.5877472E~38): ~0.5877455E~38 ~0.5877455E~38 +(~0.1E~44, ~0.123E2, ~0.1E~44): 0.15E~43 0.15E~43 +(~0.1E~44, ~0.123E2, ~0.0): 0.17E~43 0.17E~43 +(~0.1E~44, ~0.31415927E1, 0.11754944E~37): 0.11754948E~37 0.11754948E~37 +(~0.1E~44, ~0.31415927E1, 0.5877472E~38): 0.5877476E~38 0.5877476E~38 +(~0.1E~44, ~0.31415927E1, 0.1E~44): 0.6E~44 0.6E~44 +(~0.1E~44, ~0.31415927E1, 0.0): 0.4E~44 0.4E~44 +(~0.1E~44, ~0.31415927E1, ~0.11754944E~37): ~0.1175494E~37 ~0.1175494E~37 +(~0.1E~44, ~0.31415927E1, ~0.5877472E~38): ~0.5877468E~38 ~0.5877468E~38 +(~0.1E~44, ~0.31415927E1, ~0.1E~44): 0.3E~44 0.3E~44 +(~0.1E~44, ~0.31415927E1, ~0.0): 0.4E~44 0.4E~44 +(~0.1E~44, ~0.27182817E1, 0.11754944E~37): 0.11754948E~37 0.11754948E~37 +(~0.1E~44, ~0.27182817E1, 0.5877472E~38): 0.5877476E~38 0.5877476E~38 +(~0.1E~44, ~0.27182817E1, 0.1E~44): 0.6E~44 0.6E~44 +(~0.1E~44, ~0.27182817E1, 0.0): 0.4E~44 0.4E~44 +(~0.1E~44, ~0.27182817E1, ~0.11754944E~37): ~0.1175494E~37 ~0.1175494E~37 +(~0.1E~44, ~0.27182817E1, ~0.5877472E~38): ~0.5877468E~38 ~0.5877468E~38 +(~0.1E~44, ~0.27182817E1, ~0.1E~44): 0.3E~44 0.3E~44 +(~0.1E~44, ~0.27182817E1, ~0.0): 0.4E~44 0.4E~44 +(~0.1E~44, ~0.123E1, 0.11754944E~37): 0.11754945E~37 0.11754945E~37 +(~0.1E~44, ~0.123E1, 0.5877472E~38): 0.5877473E~38 0.5877473E~38 +(~0.1E~44, ~0.123E1, 0.1E~44): 0.3E~44 0.3E~44 +(~0.1E~44, ~0.123E1, 0.0): 0.1E~44 0.1E~44 +(~0.1E~44, ~0.123E1, ~0.11754944E~37): ~0.11754942E~37 ~0.11754942E~37 +(~0.1E~44, ~0.123E1, ~0.5877472E~38): ~0.587747E~38 ~0.587747E~38 +(~0.1E~44, ~0.123E1, ~0.1E~44): 0.0 0.0 +(~0.1E~44, ~0.123E1, ~0.0): 0.1E~44 0.1E~44 +(~0.1E~44, ~0.123, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(~0.1E~44, ~0.123, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(~0.1E~44, ~0.123, 0.1E~44): 0.1E~44 0.1E~44 +(~0.1E~44, ~0.123, 0.0): 0.0 0.0 +(~0.1E~44, ~0.123, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(~0.1E~44, ~0.123, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(~0.1E~44, ~0.123, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(~0.1E~44, ~0.123, ~0.0): 0.0 0.0 +(~0.1E~44, ~0.123E~2, 0.11754944E~37): 0.11754944E~37 0.11754944E~37 +(~0.1E~44, ~0.123E~2, 0.5877472E~38): 0.5877472E~38 0.5877472E~38 +(~0.1E~44, ~0.123E~2, 0.1E~44): 0.1E~44 0.1E~44 +(~0.1E~44, ~0.123E~2, 0.0): 0.0 0.0 +(~0.1E~44, ~0.123E~2, ~0.11754944E~37): ~0.11754944E~37 ~0.11754944E~37 +(~0.1E~44, ~0.123E~2, ~0.5877472E~38): ~0.5877472E~38 ~0.5877472E~38 +(~0.1E~44, ~0.123E~2, ~0.1E~44): ~0.1E~44 ~0.1E~44 +(~0.1E~44, ~0.123E~2, ~0.0): 0.0 0.0 +(~0.1E~44, ~0.11754944E~37, 0.0): 0.0 0.0 +(~0.1E~44, ~0.11754944E~37, ~0.0): 0.0 0.0 +(~0.1E~44, ~0.5877472E~38, 0.0): 0.0 0.0 +(~0.1E~44, ~0.5877472E~38, ~0.0): 0.0 0.0 +(~0.1E~44, ~0.1E~44, 0.0): 0.0 0.0 +(~0.1E~44, ~0.1E~44, ~0.0): 0.0 0.0 + +Testing Real.{realCeil,realFloor,realTrunc} +0.34028235E39 0.34028235E39 0.34028235E39 0.34028235E39 +0.17014117E39 0.17014117E39 0.17014117E39 0.17014117E39 +0.123E4 0.123E4 0.123E4 0.123E4 +0.123E2 0.13E2 0.12E2 0.12E2 +0.31415927E1 0.4E1 0.3E1 0.3E1 +0.27182817E1 0.3E1 0.2E1 0.2E1 +0.123E1 0.2E1 0.1E1 0.1E1 +0.123 0.1E1 0.0 0.0 +0.123E~2 0.1E1 0.0 0.0 +0.11754944E~37 0.1E1 0.0 0.0 +0.5877472E~38 0.1E1 0.0 0.0 +0.1E~44 0.1E1 0.0 0.0 +0.0 0.0 0.0 0.0 +~0.34028235E39 ~0.34028235E39 ~0.34028235E39 ~0.34028235E39 +~0.17014117E39 ~0.17014117E39 ~0.17014117E39 ~0.17014117E39 +~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 +~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 +~0.31415927E1 ~0.3E1 ~0.4E1 ~0.3E1 +~0.27182817E1 ~0.2E1 ~0.3E1 ~0.2E1 +~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 +~0.123 ~0.0 ~0.1E1 ~0.0 +~0.123E~2 ~0.0 ~0.1E1 ~0.0 +~0.11754944E~37 ~0.0 ~0.1E1 ~0.0 +~0.5877472E~38 ~0.0 ~0.1E1 ~0.0 +~0.1E~44 ~0.0 ~0.1E1 ~0.0 +~0.0 ~0.0 ~0.0 ~0.0 + +Testing Real.{<,<=,>,>=,==,!=,?=,unordered} +< (0.34028235E39, 0.34028235E39) = false +> (0.34028235E39, 0.34028235E39) = false +== (0.34028235E39, 0.34028235E39) = true +?= (0.34028235E39, 0.34028235E39) = true +< (0.34028235E39, 0.17014117E39) = false +> (0.34028235E39, 0.17014117E39) = true +== (0.34028235E39, 0.17014117E39) = false +?= (0.34028235E39, 0.17014117E39) = false +< (0.34028235E39, 0.123E4) = false +> (0.34028235E39, 0.123E4) = true +== (0.34028235E39, 0.123E4) = false +?= (0.34028235E39, 0.123E4) = false +< (0.34028235E39, 0.123E2) = false +> (0.34028235E39, 0.123E2) = true +== (0.34028235E39, 0.123E2) = false +?= (0.34028235E39, 0.123E2) = false +< (0.34028235E39, 0.31415927E1) = false +> (0.34028235E39, 0.31415927E1) = true +== (0.34028235E39, 0.31415927E1) = false +?= (0.34028235E39, 0.31415927E1) = false +< (0.34028235E39, 0.27182817E1) = false +> (0.34028235E39, 0.27182817E1) = true +== (0.34028235E39, 0.27182817E1) = false +?= (0.34028235E39, 0.27182817E1) = false +< (0.34028235E39, 0.123E1) = false +> (0.34028235E39, 0.123E1) = true +== (0.34028235E39, 0.123E1) = false +?= (0.34028235E39, 0.123E1) = false +< (0.34028235E39, 0.123) = false +> (0.34028235E39, 0.123) = true +== (0.34028235E39, 0.123) = false +?= (0.34028235E39, 0.123) = false +< (0.34028235E39, 0.123E~2) = false +> (0.34028235E39, 0.123E~2) = true +== (0.34028235E39, 0.123E~2) = false +?= (0.34028235E39, 0.123E~2) = false +< (0.34028235E39, 0.11754944E~37) = false +> (0.34028235E39, 0.11754944E~37) = true +== (0.34028235E39, 0.11754944E~37) = false +?= (0.34028235E39, 0.11754944E~37) = false +< (0.34028235E39, 0.5877472E~38) = false +> (0.34028235E39, 0.5877472E~38) = true +== (0.34028235E39, 0.5877472E~38) = false +?= (0.34028235E39, 0.5877472E~38) = false +< (0.34028235E39, 0.1E~44) = false +> (0.34028235E39, 0.1E~44) = true +== (0.34028235E39, 0.1E~44) = false +?= (0.34028235E39, 0.1E~44) = false +< (0.34028235E39, 0.0) = false +> (0.34028235E39, 0.0) = true +== (0.34028235E39, 0.0) = false +?= (0.34028235E39, 0.0) = false +< (0.34028235E39, ~0.34028235E39) = false +> (0.34028235E39, ~0.34028235E39) = true +== (0.34028235E39, ~0.34028235E39) = false +?= (0.34028235E39, ~0.34028235E39) = false +< (0.34028235E39, ~0.17014117E39) = false +> (0.34028235E39, ~0.17014117E39) = true +== (0.34028235E39, ~0.17014117E39) = false +?= (0.34028235E39, ~0.17014117E39) = false +< (0.34028235E39, ~0.123E4) = false +> (0.34028235E39, ~0.123E4) = true +== (0.34028235E39, ~0.123E4) = false +?= (0.34028235E39, ~0.123E4) = false +< (0.34028235E39, ~0.123E2) = false +> (0.34028235E39, ~0.123E2) = true +== (0.34028235E39, ~0.123E2) = false +?= (0.34028235E39, ~0.123E2) = false +< (0.34028235E39, ~0.31415927E1) = false +> (0.34028235E39, ~0.31415927E1) = true +== (0.34028235E39, ~0.31415927E1) = false +?= (0.34028235E39, ~0.31415927E1) = false +< (0.34028235E39, ~0.27182817E1) = false +> (0.34028235E39, ~0.27182817E1) = true +== (0.34028235E39, ~0.27182817E1) = false +?= (0.34028235E39, ~0.27182817E1) = false +< (0.34028235E39, ~0.123E1) = false +> (0.34028235E39, ~0.123E1) = true +== (0.34028235E39, ~0.123E1) = false +?= (0.34028235E39, ~0.123E1) = false +< (0.34028235E39, ~0.123) = false +> (0.34028235E39, ~0.123) = true +== (0.34028235E39, ~0.123) = false +?= (0.34028235E39, ~0.123) = false +< (0.34028235E39, ~0.123E~2) = false +> (0.34028235E39, ~0.123E~2) = true +== (0.34028235E39, ~0.123E~2) = false +?= (0.34028235E39, ~0.123E~2) = false +< (0.34028235E39, ~0.11754944E~37) = false +> (0.34028235E39, ~0.11754944E~37) = true +== (0.34028235E39, ~0.11754944E~37) = false +?= (0.34028235E39, ~0.11754944E~37) = false +< (0.34028235E39, ~0.5877472E~38) = false +> (0.34028235E39, ~0.5877472E~38) = true +== (0.34028235E39, ~0.5877472E~38) = false +?= (0.34028235E39, ~0.5877472E~38) = false +< (0.34028235E39, ~0.1E~44) = false +> (0.34028235E39, ~0.1E~44) = true +== (0.34028235E39, ~0.1E~44) = false +?= (0.34028235E39, ~0.1E~44) = false +< (0.34028235E39, ~0.0) = false +> (0.34028235E39, ~0.0) = true +== (0.34028235E39, ~0.0) = false +?= (0.34028235E39, ~0.0) = false +< (0.17014117E39, 0.34028235E39) = true +> (0.17014117E39, 0.34028235E39) = false +== (0.17014117E39, 0.34028235E39) = false +?= (0.17014117E39, 0.34028235E39) = false +< (0.17014117E39, 0.17014117E39) = false +> (0.17014117E39, 0.17014117E39) = false +== (0.17014117E39, 0.17014117E39) = true +?= (0.17014117E39, 0.17014117E39) = true +< (0.17014117E39, 0.123E4) = false +> (0.17014117E39, 0.123E4) = true +== (0.17014117E39, 0.123E4) = false +?= (0.17014117E39, 0.123E4) = false +< (0.17014117E39, 0.123E2) = false +> (0.17014117E39, 0.123E2) = true +== (0.17014117E39, 0.123E2) = false +?= (0.17014117E39, 0.123E2) = false +< (0.17014117E39, 0.31415927E1) = false +> (0.17014117E39, 0.31415927E1) = true +== (0.17014117E39, 0.31415927E1) = false +?= (0.17014117E39, 0.31415927E1) = false +< (0.17014117E39, 0.27182817E1) = false +> (0.17014117E39, 0.27182817E1) = true +== (0.17014117E39, 0.27182817E1) = false +?= (0.17014117E39, 0.27182817E1) = false +< (0.17014117E39, 0.123E1) = false +> (0.17014117E39, 0.123E1) = true +== (0.17014117E39, 0.123E1) = false +?= (0.17014117E39, 0.123E1) = false +< (0.17014117E39, 0.123) = false +> (0.17014117E39, 0.123) = true +== (0.17014117E39, 0.123) = false +?= (0.17014117E39, 0.123) = false +< (0.17014117E39, 0.123E~2) = false +> (0.17014117E39, 0.123E~2) = true +== (0.17014117E39, 0.123E~2) = false +?= (0.17014117E39, 0.123E~2) = false +< (0.17014117E39, 0.11754944E~37) = false +> (0.17014117E39, 0.11754944E~37) = true +== (0.17014117E39, 0.11754944E~37) = false +?= (0.17014117E39, 0.11754944E~37) = false +< (0.17014117E39, 0.5877472E~38) = false +> (0.17014117E39, 0.5877472E~38) = true +== (0.17014117E39, 0.5877472E~38) = false +?= (0.17014117E39, 0.5877472E~38) = false +< (0.17014117E39, 0.1E~44) = false +> (0.17014117E39, 0.1E~44) = true +== (0.17014117E39, 0.1E~44) = false +?= (0.17014117E39, 0.1E~44) = false +< (0.17014117E39, 0.0) = false +> (0.17014117E39, 0.0) = true +== (0.17014117E39, 0.0) = false +?= (0.17014117E39, 0.0) = false +< (0.17014117E39, ~0.34028235E39) = false +> (0.17014117E39, ~0.34028235E39) = true +== (0.17014117E39, ~0.34028235E39) = false +?= (0.17014117E39, ~0.34028235E39) = false +< (0.17014117E39, ~0.17014117E39) = false +> (0.17014117E39, ~0.17014117E39) = true +== (0.17014117E39, ~0.17014117E39) = false +?= (0.17014117E39, ~0.17014117E39) = false +< (0.17014117E39, ~0.123E4) = false +> (0.17014117E39, ~0.123E4) = true +== (0.17014117E39, ~0.123E4) = false +?= (0.17014117E39, ~0.123E4) = false +< (0.17014117E39, ~0.123E2) = false +> (0.17014117E39, ~0.123E2) = true +== (0.17014117E39, ~0.123E2) = false +?= (0.17014117E39, ~0.123E2) = false +< (0.17014117E39, ~0.31415927E1) = false +> (0.17014117E39, ~0.31415927E1) = true +== (0.17014117E39, ~0.31415927E1) = false +?= (0.17014117E39, ~0.31415927E1) = false +< (0.17014117E39, ~0.27182817E1) = false +> (0.17014117E39, ~0.27182817E1) = true +== (0.17014117E39, ~0.27182817E1) = false +?= (0.17014117E39, ~0.27182817E1) = false +< (0.17014117E39, ~0.123E1) = false +> (0.17014117E39, ~0.123E1) = true +== (0.17014117E39, ~0.123E1) = false +?= (0.17014117E39, ~0.123E1) = false +< (0.17014117E39, ~0.123) = false +> (0.17014117E39, ~0.123) = true +== (0.17014117E39, ~0.123) = false +?= (0.17014117E39, ~0.123) = false +< (0.17014117E39, ~0.123E~2) = false +> (0.17014117E39, ~0.123E~2) = true +== (0.17014117E39, ~0.123E~2) = false +?= (0.17014117E39, ~0.123E~2) = false +< (0.17014117E39, ~0.11754944E~37) = false +> (0.17014117E39, ~0.11754944E~37) = true +== (0.17014117E39, ~0.11754944E~37) = false +?= (0.17014117E39, ~0.11754944E~37) = false +< (0.17014117E39, ~0.5877472E~38) = false +> (0.17014117E39, ~0.5877472E~38) = true +== (0.17014117E39, ~0.5877472E~38) = false +?= (0.17014117E39, ~0.5877472E~38) = false +< (0.17014117E39, ~0.1E~44) = false +> (0.17014117E39, ~0.1E~44) = true +== (0.17014117E39, ~0.1E~44) = false +?= (0.17014117E39, ~0.1E~44) = false +< (0.17014117E39, ~0.0) = false +> (0.17014117E39, ~0.0) = true +== (0.17014117E39, ~0.0) = false +?= (0.17014117E39, ~0.0) = false +< (0.123E4, 0.34028235E39) = true +> (0.123E4, 0.34028235E39) = false +== (0.123E4, 0.34028235E39) = false +?= (0.123E4, 0.34028235E39) = false +< (0.123E4, 0.17014117E39) = true +> (0.123E4, 0.17014117E39) = false +== (0.123E4, 0.17014117E39) = false +?= (0.123E4, 0.17014117E39) = false +< (0.123E4, 0.123E4) = false +> (0.123E4, 0.123E4) = false +== (0.123E4, 0.123E4) = true +?= (0.123E4, 0.123E4) = true +< (0.123E4, 0.123E2) = false +> (0.123E4, 0.123E2) = true +== (0.123E4, 0.123E2) = false +?= (0.123E4, 0.123E2) = false +< (0.123E4, 0.31415927E1) = false +> (0.123E4, 0.31415927E1) = true +== (0.123E4, 0.31415927E1) = false +?= (0.123E4, 0.31415927E1) = false +< (0.123E4, 0.27182817E1) = false +> (0.123E4, 0.27182817E1) = true +== (0.123E4, 0.27182817E1) = false +?= (0.123E4, 0.27182817E1) = false +< (0.123E4, 0.123E1) = false +> (0.123E4, 0.123E1) = true +== (0.123E4, 0.123E1) = false +?= (0.123E4, 0.123E1) = false +< (0.123E4, 0.123) = false +> (0.123E4, 0.123) = true +== (0.123E4, 0.123) = false +?= (0.123E4, 0.123) = false +< (0.123E4, 0.123E~2) = false +> (0.123E4, 0.123E~2) = true +== (0.123E4, 0.123E~2) = false +?= (0.123E4, 0.123E~2) = false +< (0.123E4, 0.11754944E~37) = false +> (0.123E4, 0.11754944E~37) = true +== (0.123E4, 0.11754944E~37) = false +?= (0.123E4, 0.11754944E~37) = false +< (0.123E4, 0.5877472E~38) = false +> (0.123E4, 0.5877472E~38) = true +== (0.123E4, 0.5877472E~38) = false +?= (0.123E4, 0.5877472E~38) = false +< (0.123E4, 0.1E~44) = false +> (0.123E4, 0.1E~44) = true +== (0.123E4, 0.1E~44) = false +?= (0.123E4, 0.1E~44) = false +< (0.123E4, 0.0) = false +> (0.123E4, 0.0) = true +== (0.123E4, 0.0) = false +?= (0.123E4, 0.0) = false +< (0.123E4, ~0.34028235E39) = false +> (0.123E4, ~0.34028235E39) = true +== (0.123E4, ~0.34028235E39) = false +?= (0.123E4, ~0.34028235E39) = false +< (0.123E4, ~0.17014117E39) = false +> (0.123E4, ~0.17014117E39) = true +== (0.123E4, ~0.17014117E39) = false +?= (0.123E4, ~0.17014117E39) = false +< (0.123E4, ~0.123E4) = false +> (0.123E4, ~0.123E4) = true +== (0.123E4, ~0.123E4) = false +?= (0.123E4, ~0.123E4) = false +< (0.123E4, ~0.123E2) = false +> (0.123E4, ~0.123E2) = true +== (0.123E4, ~0.123E2) = false +?= (0.123E4, ~0.123E2) = false +< (0.123E4, ~0.31415927E1) = false +> (0.123E4, ~0.31415927E1) = true +== (0.123E4, ~0.31415927E1) = false +?= (0.123E4, ~0.31415927E1) = false +< (0.123E4, ~0.27182817E1) = false +> (0.123E4, ~0.27182817E1) = true +== (0.123E4, ~0.27182817E1) = false +?= (0.123E4, ~0.27182817E1) = false +< (0.123E4, ~0.123E1) = false +> (0.123E4, ~0.123E1) = true +== (0.123E4, ~0.123E1) = false +?= (0.123E4, ~0.123E1) = false +< (0.123E4, ~0.123) = false +> (0.123E4, ~0.123) = true +== (0.123E4, ~0.123) = false +?= (0.123E4, ~0.123) = false +< (0.123E4, ~0.123E~2) = false +> (0.123E4, ~0.123E~2) = true +== (0.123E4, ~0.123E~2) = false +?= (0.123E4, ~0.123E~2) = false +< (0.123E4, ~0.11754944E~37) = false +> (0.123E4, ~0.11754944E~37) = true +== (0.123E4, ~0.11754944E~37) = false +?= (0.123E4, ~0.11754944E~37) = false +< (0.123E4, ~0.5877472E~38) = false +> (0.123E4, ~0.5877472E~38) = true +== (0.123E4, ~0.5877472E~38) = false +?= (0.123E4, ~0.5877472E~38) = false +< (0.123E4, ~0.1E~44) = false +> (0.123E4, ~0.1E~44) = true +== (0.123E4, ~0.1E~44) = false +?= (0.123E4, ~0.1E~44) = false +< (0.123E4, ~0.0) = false +> (0.123E4, ~0.0) = true +== (0.123E4, ~0.0) = false +?= (0.123E4, ~0.0) = false +< (0.123E2, 0.34028235E39) = true +> (0.123E2, 0.34028235E39) = false +== (0.123E2, 0.34028235E39) = false +?= (0.123E2, 0.34028235E39) = false +< (0.123E2, 0.17014117E39) = true +> (0.123E2, 0.17014117E39) = false +== (0.123E2, 0.17014117E39) = false +?= (0.123E2, 0.17014117E39) = false +< (0.123E2, 0.123E4) = true +> (0.123E2, 0.123E4) = false +== (0.123E2, 0.123E4) = false +?= (0.123E2, 0.123E4) = false +< (0.123E2, 0.123E2) = false +> (0.123E2, 0.123E2) = false +== (0.123E2, 0.123E2) = true +?= (0.123E2, 0.123E2) = true +< (0.123E2, 0.31415927E1) = false +> (0.123E2, 0.31415927E1) = true +== (0.123E2, 0.31415927E1) = false +?= (0.123E2, 0.31415927E1) = false +< (0.123E2, 0.27182817E1) = false +> (0.123E2, 0.27182817E1) = true +== (0.123E2, 0.27182817E1) = false +?= (0.123E2, 0.27182817E1) = false +< (0.123E2, 0.123E1) = false +> (0.123E2, 0.123E1) = true +== (0.123E2, 0.123E1) = false +?= (0.123E2, 0.123E1) = false +< (0.123E2, 0.123) = false +> (0.123E2, 0.123) = true +== (0.123E2, 0.123) = false +?= (0.123E2, 0.123) = false +< (0.123E2, 0.123E~2) = false +> (0.123E2, 0.123E~2) = true +== (0.123E2, 0.123E~2) = false +?= (0.123E2, 0.123E~2) = false +< (0.123E2, 0.11754944E~37) = false +> (0.123E2, 0.11754944E~37) = true +== (0.123E2, 0.11754944E~37) = false +?= (0.123E2, 0.11754944E~37) = false +< (0.123E2, 0.5877472E~38) = false +> (0.123E2, 0.5877472E~38) = true +== (0.123E2, 0.5877472E~38) = false +?= (0.123E2, 0.5877472E~38) = false +< (0.123E2, 0.1E~44) = false +> (0.123E2, 0.1E~44) = true +== (0.123E2, 0.1E~44) = false +?= (0.123E2, 0.1E~44) = false +< (0.123E2, 0.0) = false +> (0.123E2, 0.0) = true +== (0.123E2, 0.0) = false +?= (0.123E2, 0.0) = false +< (0.123E2, ~0.34028235E39) = false +> (0.123E2, ~0.34028235E39) = true +== (0.123E2, ~0.34028235E39) = false +?= (0.123E2, ~0.34028235E39) = false +< (0.123E2, ~0.17014117E39) = false +> (0.123E2, ~0.17014117E39) = true +== (0.123E2, ~0.17014117E39) = false +?= (0.123E2, ~0.17014117E39) = false +< (0.123E2, ~0.123E4) = false +> (0.123E2, ~0.123E4) = true +== (0.123E2, ~0.123E4) = false +?= (0.123E2, ~0.123E4) = false +< (0.123E2, ~0.123E2) = false +> (0.123E2, ~0.123E2) = true +== (0.123E2, ~0.123E2) = false +?= (0.123E2, ~0.123E2) = false +< (0.123E2, ~0.31415927E1) = false +> (0.123E2, ~0.31415927E1) = true +== (0.123E2, ~0.31415927E1) = false +?= (0.123E2, ~0.31415927E1) = false +< (0.123E2, ~0.27182817E1) = false +> (0.123E2, ~0.27182817E1) = true +== (0.123E2, ~0.27182817E1) = false +?= (0.123E2, ~0.27182817E1) = false +< (0.123E2, ~0.123E1) = false +> (0.123E2, ~0.123E1) = true +== (0.123E2, ~0.123E1) = false +?= (0.123E2, ~0.123E1) = false +< (0.123E2, ~0.123) = false +> (0.123E2, ~0.123) = true +== (0.123E2, ~0.123) = false +?= (0.123E2, ~0.123) = false +< (0.123E2, ~0.123E~2) = false +> (0.123E2, ~0.123E~2) = true +== (0.123E2, ~0.123E~2) = false +?= (0.123E2, ~0.123E~2) = false +< (0.123E2, ~0.11754944E~37) = false +> (0.123E2, ~0.11754944E~37) = true +== (0.123E2, ~0.11754944E~37) = false +?= (0.123E2, ~0.11754944E~37) = false +< (0.123E2, ~0.5877472E~38) = false +> (0.123E2, ~0.5877472E~38) = true +== (0.123E2, ~0.5877472E~38) = false +?= (0.123E2, ~0.5877472E~38) = false +< (0.123E2, ~0.1E~44) = false +> (0.123E2, ~0.1E~44) = true +== (0.123E2, ~0.1E~44) = false +?= (0.123E2, ~0.1E~44) = false +< (0.123E2, ~0.0) = false +> (0.123E2, ~0.0) = true +== (0.123E2, ~0.0) = false +?= (0.123E2, ~0.0) = false +< (0.31415927E1, 0.34028235E39) = true +> (0.31415927E1, 0.34028235E39) = false +== (0.31415927E1, 0.34028235E39) = false +?= (0.31415927E1, 0.34028235E39) = false +< (0.31415927E1, 0.17014117E39) = true +> (0.31415927E1, 0.17014117E39) = false +== (0.31415927E1, 0.17014117E39) = false +?= (0.31415927E1, 0.17014117E39) = false +< (0.31415927E1, 0.123E4) = true +> (0.31415927E1, 0.123E4) = false +== (0.31415927E1, 0.123E4) = false +?= (0.31415927E1, 0.123E4) = false +< (0.31415927E1, 0.123E2) = true +> (0.31415927E1, 0.123E2) = false +== (0.31415927E1, 0.123E2) = false +?= (0.31415927E1, 0.123E2) = false +< (0.31415927E1, 0.31415927E1) = false +> (0.31415927E1, 0.31415927E1) = false +== (0.31415927E1, 0.31415927E1) = true +?= (0.31415927E1, 0.31415927E1) = true +< (0.31415927E1, 0.27182817E1) = false +> (0.31415927E1, 0.27182817E1) = true +== (0.31415927E1, 0.27182817E1) = false +?= (0.31415927E1, 0.27182817E1) = false +< (0.31415927E1, 0.123E1) = false +> (0.31415927E1, 0.123E1) = true +== (0.31415927E1, 0.123E1) = false +?= (0.31415927E1, 0.123E1) = false +< (0.31415927E1, 0.123) = false +> (0.31415927E1, 0.123) = true +== (0.31415927E1, 0.123) = false +?= (0.31415927E1, 0.123) = false +< (0.31415927E1, 0.123E~2) = false +> (0.31415927E1, 0.123E~2) = true +== (0.31415927E1, 0.123E~2) = false +?= (0.31415927E1, 0.123E~2) = false +< (0.31415927E1, 0.11754944E~37) = false +> (0.31415927E1, 0.11754944E~37) = true +== (0.31415927E1, 0.11754944E~37) = false +?= (0.31415927E1, 0.11754944E~37) = false +< (0.31415927E1, 0.5877472E~38) = false +> (0.31415927E1, 0.5877472E~38) = true +== (0.31415927E1, 0.5877472E~38) = false +?= (0.31415927E1, 0.5877472E~38) = false +< (0.31415927E1, 0.1E~44) = false +> (0.31415927E1, 0.1E~44) = true +== (0.31415927E1, 0.1E~44) = false +?= (0.31415927E1, 0.1E~44) = false +< (0.31415927E1, 0.0) = false +> (0.31415927E1, 0.0) = true +== (0.31415927E1, 0.0) = false +?= (0.31415927E1, 0.0) = false +< (0.31415927E1, ~0.34028235E39) = false +> (0.31415927E1, ~0.34028235E39) = true +== (0.31415927E1, ~0.34028235E39) = false +?= (0.31415927E1, ~0.34028235E39) = false +< (0.31415927E1, ~0.17014117E39) = false +> (0.31415927E1, ~0.17014117E39) = true +== (0.31415927E1, ~0.17014117E39) = false +?= (0.31415927E1, ~0.17014117E39) = false +< (0.31415927E1, ~0.123E4) = false +> (0.31415927E1, ~0.123E4) = true +== (0.31415927E1, ~0.123E4) = false +?= (0.31415927E1, ~0.123E4) = false +< (0.31415927E1, ~0.123E2) = false +> (0.31415927E1, ~0.123E2) = true +== (0.31415927E1, ~0.123E2) = false +?= (0.31415927E1, ~0.123E2) = false +< (0.31415927E1, ~0.31415927E1) = false +> (0.31415927E1, ~0.31415927E1) = true +== (0.31415927E1, ~0.31415927E1) = false +?= (0.31415927E1, ~0.31415927E1) = false +< (0.31415927E1, ~0.27182817E1) = false +> (0.31415927E1, ~0.27182817E1) = true +== (0.31415927E1, ~0.27182817E1) = false +?= (0.31415927E1, ~0.27182817E1) = false +< (0.31415927E1, ~0.123E1) = false +> (0.31415927E1, ~0.123E1) = true +== (0.31415927E1, ~0.123E1) = false +?= (0.31415927E1, ~0.123E1) = false +< (0.31415927E1, ~0.123) = false +> (0.31415927E1, ~0.123) = true +== (0.31415927E1, ~0.123) = false +?= (0.31415927E1, ~0.123) = false +< (0.31415927E1, ~0.123E~2) = false +> (0.31415927E1, ~0.123E~2) = true +== (0.31415927E1, ~0.123E~2) = false +?= (0.31415927E1, ~0.123E~2) = false +< (0.31415927E1, ~0.11754944E~37) = false +> (0.31415927E1, ~0.11754944E~37) = true +== (0.31415927E1, ~0.11754944E~37) = false +?= (0.31415927E1, ~0.11754944E~37) = false +< (0.31415927E1, ~0.5877472E~38) = false +> (0.31415927E1, ~0.5877472E~38) = true +== (0.31415927E1, ~0.5877472E~38) = false +?= (0.31415927E1, ~0.5877472E~38) = false +< (0.31415927E1, ~0.1E~44) = false +> (0.31415927E1, ~0.1E~44) = true +== (0.31415927E1, ~0.1E~44) = false +?= (0.31415927E1, ~0.1E~44) = false +< (0.31415927E1, ~0.0) = false +> (0.31415927E1, ~0.0) = true +== (0.31415927E1, ~0.0) = false +?= (0.31415927E1, ~0.0) = false +< (0.27182817E1, 0.34028235E39) = true +> (0.27182817E1, 0.34028235E39) = false +== (0.27182817E1, 0.34028235E39) = false +?= (0.27182817E1, 0.34028235E39) = false +< (0.27182817E1, 0.17014117E39) = true +> (0.27182817E1, 0.17014117E39) = false +== (0.27182817E1, 0.17014117E39) = false +?= (0.27182817E1, 0.17014117E39) = false +< (0.27182817E1, 0.123E4) = true +> (0.27182817E1, 0.123E4) = false +== (0.27182817E1, 0.123E4) = false +?= (0.27182817E1, 0.123E4) = false +< (0.27182817E1, 0.123E2) = true +> (0.27182817E1, 0.123E2) = false +== (0.27182817E1, 0.123E2) = false +?= (0.27182817E1, 0.123E2) = false +< (0.27182817E1, 0.31415927E1) = true +> (0.27182817E1, 0.31415927E1) = false +== (0.27182817E1, 0.31415927E1) = false +?= (0.27182817E1, 0.31415927E1) = false +< (0.27182817E1, 0.27182817E1) = false +> (0.27182817E1, 0.27182817E1) = false +== (0.27182817E1, 0.27182817E1) = true +?= (0.27182817E1, 0.27182817E1) = true +< (0.27182817E1, 0.123E1) = false +> (0.27182817E1, 0.123E1) = true +== (0.27182817E1, 0.123E1) = false +?= (0.27182817E1, 0.123E1) = false +< (0.27182817E1, 0.123) = false +> (0.27182817E1, 0.123) = true +== (0.27182817E1, 0.123) = false +?= (0.27182817E1, 0.123) = false +< (0.27182817E1, 0.123E~2) = false +> (0.27182817E1, 0.123E~2) = true +== (0.27182817E1, 0.123E~2) = false +?= (0.27182817E1, 0.123E~2) = false +< (0.27182817E1, 0.11754944E~37) = false +> (0.27182817E1, 0.11754944E~37) = true +== (0.27182817E1, 0.11754944E~37) = false +?= (0.27182817E1, 0.11754944E~37) = false +< (0.27182817E1, 0.5877472E~38) = false +> (0.27182817E1, 0.5877472E~38) = true +== (0.27182817E1, 0.5877472E~38) = false +?= (0.27182817E1, 0.5877472E~38) = false +< (0.27182817E1, 0.1E~44) = false +> (0.27182817E1, 0.1E~44) = true +== (0.27182817E1, 0.1E~44) = false +?= (0.27182817E1, 0.1E~44) = false +< (0.27182817E1, 0.0) = false +> (0.27182817E1, 0.0) = true +== (0.27182817E1, 0.0) = false +?= (0.27182817E1, 0.0) = false +< (0.27182817E1, ~0.34028235E39) = false +> (0.27182817E1, ~0.34028235E39) = true +== (0.27182817E1, ~0.34028235E39) = false +?= (0.27182817E1, ~0.34028235E39) = false +< (0.27182817E1, ~0.17014117E39) = false +> (0.27182817E1, ~0.17014117E39) = true +== (0.27182817E1, ~0.17014117E39) = false +?= (0.27182817E1, ~0.17014117E39) = false +< (0.27182817E1, ~0.123E4) = false +> (0.27182817E1, ~0.123E4) = true +== (0.27182817E1, ~0.123E4) = false +?= (0.27182817E1, ~0.123E4) = false +< (0.27182817E1, ~0.123E2) = false +> (0.27182817E1, ~0.123E2) = true +== (0.27182817E1, ~0.123E2) = false +?= (0.27182817E1, ~0.123E2) = false +< (0.27182817E1, ~0.31415927E1) = false +> (0.27182817E1, ~0.31415927E1) = true +== (0.27182817E1, ~0.31415927E1) = false +?= (0.27182817E1, ~0.31415927E1) = false +< (0.27182817E1, ~0.27182817E1) = false +> (0.27182817E1, ~0.27182817E1) = true +== (0.27182817E1, ~0.27182817E1) = false +?= (0.27182817E1, ~0.27182817E1) = false +< (0.27182817E1, ~0.123E1) = false +> (0.27182817E1, ~0.123E1) = true +== (0.27182817E1, ~0.123E1) = false +?= (0.27182817E1, ~0.123E1) = false +< (0.27182817E1, ~0.123) = false +> (0.27182817E1, ~0.123) = true +== (0.27182817E1, ~0.123) = false +?= (0.27182817E1, ~0.123) = false +< (0.27182817E1, ~0.123E~2) = false +> (0.27182817E1, ~0.123E~2) = true +== (0.27182817E1, ~0.123E~2) = false +?= (0.27182817E1, ~0.123E~2) = false +< (0.27182817E1, ~0.11754944E~37) = false +> (0.27182817E1, ~0.11754944E~37) = true +== (0.27182817E1, ~0.11754944E~37) = false +?= (0.27182817E1, ~0.11754944E~37) = false +< (0.27182817E1, ~0.5877472E~38) = false +> (0.27182817E1, ~0.5877472E~38) = true +== (0.27182817E1, ~0.5877472E~38) = false +?= (0.27182817E1, ~0.5877472E~38) = false +< (0.27182817E1, ~0.1E~44) = false +> (0.27182817E1, ~0.1E~44) = true +== (0.27182817E1, ~0.1E~44) = false +?= (0.27182817E1, ~0.1E~44) = false +< (0.27182817E1, ~0.0) = false +> (0.27182817E1, ~0.0) = true +== (0.27182817E1, ~0.0) = false +?= (0.27182817E1, ~0.0) = false +< (0.123E1, 0.34028235E39) = true +> (0.123E1, 0.34028235E39) = false +== (0.123E1, 0.34028235E39) = false +?= (0.123E1, 0.34028235E39) = false +< (0.123E1, 0.17014117E39) = true +> (0.123E1, 0.17014117E39) = false +== (0.123E1, 0.17014117E39) = false +?= (0.123E1, 0.17014117E39) = false +< (0.123E1, 0.123E4) = true +> (0.123E1, 0.123E4) = false +== (0.123E1, 0.123E4) = false +?= (0.123E1, 0.123E4) = false +< (0.123E1, 0.123E2) = true +> (0.123E1, 0.123E2) = false +== (0.123E1, 0.123E2) = false +?= (0.123E1, 0.123E2) = false +< (0.123E1, 0.31415927E1) = true +> (0.123E1, 0.31415927E1) = false +== (0.123E1, 0.31415927E1) = false +?= (0.123E1, 0.31415927E1) = false +< (0.123E1, 0.27182817E1) = true +> (0.123E1, 0.27182817E1) = false +== (0.123E1, 0.27182817E1) = false +?= (0.123E1, 0.27182817E1) = false +< (0.123E1, 0.123E1) = false +> (0.123E1, 0.123E1) = false +== (0.123E1, 0.123E1) = true +?= (0.123E1, 0.123E1) = true +< (0.123E1, 0.123) = false +> (0.123E1, 0.123) = true +== (0.123E1, 0.123) = false +?= (0.123E1, 0.123) = false +< (0.123E1, 0.123E~2) = false +> (0.123E1, 0.123E~2) = true +== (0.123E1, 0.123E~2) = false +?= (0.123E1, 0.123E~2) = false +< (0.123E1, 0.11754944E~37) = false +> (0.123E1, 0.11754944E~37) = true +== (0.123E1, 0.11754944E~37) = false +?= (0.123E1, 0.11754944E~37) = false +< (0.123E1, 0.5877472E~38) = false +> (0.123E1, 0.5877472E~38) = true +== (0.123E1, 0.5877472E~38) = false +?= (0.123E1, 0.5877472E~38) = false +< (0.123E1, 0.1E~44) = false +> (0.123E1, 0.1E~44) = true +== (0.123E1, 0.1E~44) = false +?= (0.123E1, 0.1E~44) = false +< (0.123E1, 0.0) = false +> (0.123E1, 0.0) = true +== (0.123E1, 0.0) = false +?= (0.123E1, 0.0) = false +< (0.123E1, ~0.34028235E39) = false +> (0.123E1, ~0.34028235E39) = true +== (0.123E1, ~0.34028235E39) = false +?= (0.123E1, ~0.34028235E39) = false +< (0.123E1, ~0.17014117E39) = false +> (0.123E1, ~0.17014117E39) = true +== (0.123E1, ~0.17014117E39) = false +?= (0.123E1, ~0.17014117E39) = false +< (0.123E1, ~0.123E4) = false +> (0.123E1, ~0.123E4) = true +== (0.123E1, ~0.123E4) = false +?= (0.123E1, ~0.123E4) = false +< (0.123E1, ~0.123E2) = false +> (0.123E1, ~0.123E2) = true +== (0.123E1, ~0.123E2) = false +?= (0.123E1, ~0.123E2) = false +< (0.123E1, ~0.31415927E1) = false +> (0.123E1, ~0.31415927E1) = true +== (0.123E1, ~0.31415927E1) = false +?= (0.123E1, ~0.31415927E1) = false +< (0.123E1, ~0.27182817E1) = false +> (0.123E1, ~0.27182817E1) = true +== (0.123E1, ~0.27182817E1) = false +?= (0.123E1, ~0.27182817E1) = false +< (0.123E1, ~0.123E1) = false +> (0.123E1, ~0.123E1) = true +== (0.123E1, ~0.123E1) = false +?= (0.123E1, ~0.123E1) = false +< (0.123E1, ~0.123) = false +> (0.123E1, ~0.123) = true +== (0.123E1, ~0.123) = false +?= (0.123E1, ~0.123) = false +< (0.123E1, ~0.123E~2) = false +> (0.123E1, ~0.123E~2) = true +== (0.123E1, ~0.123E~2) = false +?= (0.123E1, ~0.123E~2) = false +< (0.123E1, ~0.11754944E~37) = false +> (0.123E1, ~0.11754944E~37) = true +== (0.123E1, ~0.11754944E~37) = false +?= (0.123E1, ~0.11754944E~37) = false +< (0.123E1, ~0.5877472E~38) = false +> (0.123E1, ~0.5877472E~38) = true +== (0.123E1, ~0.5877472E~38) = false +?= (0.123E1, ~0.5877472E~38) = false +< (0.123E1, ~0.1E~44) = false +> (0.123E1, ~0.1E~44) = true +== (0.123E1, ~0.1E~44) = false +?= (0.123E1, ~0.1E~44) = false +< (0.123E1, ~0.0) = false +> (0.123E1, ~0.0) = true +== (0.123E1, ~0.0) = false +?= (0.123E1, ~0.0) = false +< (0.123, 0.34028235E39) = true +> (0.123, 0.34028235E39) = false +== (0.123, 0.34028235E39) = false +?= (0.123, 0.34028235E39) = false +< (0.123, 0.17014117E39) = true +> (0.123, 0.17014117E39) = false +== (0.123, 0.17014117E39) = false +?= (0.123, 0.17014117E39) = false +< (0.123, 0.123E4) = true +> (0.123, 0.123E4) = false +== (0.123, 0.123E4) = false +?= (0.123, 0.123E4) = false +< (0.123, 0.123E2) = true +> (0.123, 0.123E2) = false +== (0.123, 0.123E2) = false +?= (0.123, 0.123E2) = false +< (0.123, 0.31415927E1) = true +> (0.123, 0.31415927E1) = false +== (0.123, 0.31415927E1) = false +?= (0.123, 0.31415927E1) = false +< (0.123, 0.27182817E1) = true +> (0.123, 0.27182817E1) = false +== (0.123, 0.27182817E1) = false +?= (0.123, 0.27182817E1) = false +< (0.123, 0.123E1) = true +> (0.123, 0.123E1) = false +== (0.123, 0.123E1) = false +?= (0.123, 0.123E1) = false +< (0.123, 0.123) = false +> (0.123, 0.123) = false +== (0.123, 0.123) = true +?= (0.123, 0.123) = true +< (0.123, 0.123E~2) = false +> (0.123, 0.123E~2) = true +== (0.123, 0.123E~2) = false +?= (0.123, 0.123E~2) = false +< (0.123, 0.11754944E~37) = false +> (0.123, 0.11754944E~37) = true +== (0.123, 0.11754944E~37) = false +?= (0.123, 0.11754944E~37) = false +< (0.123, 0.5877472E~38) = false +> (0.123, 0.5877472E~38) = true +== (0.123, 0.5877472E~38) = false +?= (0.123, 0.5877472E~38) = false +< (0.123, 0.1E~44) = false +> (0.123, 0.1E~44) = true +== (0.123, 0.1E~44) = false +?= (0.123, 0.1E~44) = false +< (0.123, 0.0) = false +> (0.123, 0.0) = true +== (0.123, 0.0) = false +?= (0.123, 0.0) = false +< (0.123, ~0.34028235E39) = false +> (0.123, ~0.34028235E39) = true +== (0.123, ~0.34028235E39) = false +?= (0.123, ~0.34028235E39) = false +< (0.123, ~0.17014117E39) = false +> (0.123, ~0.17014117E39) = true +== (0.123, ~0.17014117E39) = false +?= (0.123, ~0.17014117E39) = false +< (0.123, ~0.123E4) = false +> (0.123, ~0.123E4) = true +== (0.123, ~0.123E4) = false +?= (0.123, ~0.123E4) = false +< (0.123, ~0.123E2) = false +> (0.123, ~0.123E2) = true +== (0.123, ~0.123E2) = false +?= (0.123, ~0.123E2) = false +< (0.123, ~0.31415927E1) = false +> (0.123, ~0.31415927E1) = true +== (0.123, ~0.31415927E1) = false +?= (0.123, ~0.31415927E1) = false +< (0.123, ~0.27182817E1) = false +> (0.123, ~0.27182817E1) = true +== (0.123, ~0.27182817E1) = false +?= (0.123, ~0.27182817E1) = false +< (0.123, ~0.123E1) = false +> (0.123, ~0.123E1) = true +== (0.123, ~0.123E1) = false +?= (0.123, ~0.123E1) = false +< (0.123, ~0.123) = false +> (0.123, ~0.123) = true +== (0.123, ~0.123) = false +?= (0.123, ~0.123) = false +< (0.123, ~0.123E~2) = false +> (0.123, ~0.123E~2) = true +== (0.123, ~0.123E~2) = false +?= (0.123, ~0.123E~2) = false +< (0.123, ~0.11754944E~37) = false +> (0.123, ~0.11754944E~37) = true +== (0.123, ~0.11754944E~37) = false +?= (0.123, ~0.11754944E~37) = false +< (0.123, ~0.5877472E~38) = false +> (0.123, ~0.5877472E~38) = true +== (0.123, ~0.5877472E~38) = false +?= (0.123, ~0.5877472E~38) = false +< (0.123, ~0.1E~44) = false +> (0.123, ~0.1E~44) = true +== (0.123, ~0.1E~44) = false +?= (0.123, ~0.1E~44) = false +< (0.123, ~0.0) = false +> (0.123, ~0.0) = true +== (0.123, ~0.0) = false +?= (0.123, ~0.0) = false +< (0.123E~2, 0.34028235E39) = true +> (0.123E~2, 0.34028235E39) = false +== (0.123E~2, 0.34028235E39) = false +?= (0.123E~2, 0.34028235E39) = false +< (0.123E~2, 0.17014117E39) = true +> (0.123E~2, 0.17014117E39) = false +== (0.123E~2, 0.17014117E39) = false +?= (0.123E~2, 0.17014117E39) = false +< (0.123E~2, 0.123E4) = true +> (0.123E~2, 0.123E4) = false +== (0.123E~2, 0.123E4) = false +?= (0.123E~2, 0.123E4) = false +< (0.123E~2, 0.123E2) = true +> (0.123E~2, 0.123E2) = false +== (0.123E~2, 0.123E2) = false +?= (0.123E~2, 0.123E2) = false +< (0.123E~2, 0.31415927E1) = true +> (0.123E~2, 0.31415927E1) = false +== (0.123E~2, 0.31415927E1) = false +?= (0.123E~2, 0.31415927E1) = false +< (0.123E~2, 0.27182817E1) = true +> (0.123E~2, 0.27182817E1) = false +== (0.123E~2, 0.27182817E1) = false +?= (0.123E~2, 0.27182817E1) = false +< (0.123E~2, 0.123E1) = true +> (0.123E~2, 0.123E1) = false +== (0.123E~2, 0.123E1) = false +?= (0.123E~2, 0.123E1) = false +< (0.123E~2, 0.123) = true +> (0.123E~2, 0.123) = false +== (0.123E~2, 0.123) = false +?= (0.123E~2, 0.123) = false +< (0.123E~2, 0.123E~2) = false +> (0.123E~2, 0.123E~2) = false +== (0.123E~2, 0.123E~2) = true +?= (0.123E~2, 0.123E~2) = true +< (0.123E~2, 0.11754944E~37) = false +> (0.123E~2, 0.11754944E~37) = true +== (0.123E~2, 0.11754944E~37) = false +?= (0.123E~2, 0.11754944E~37) = false +< (0.123E~2, 0.5877472E~38) = false +> (0.123E~2, 0.5877472E~38) = true +== (0.123E~2, 0.5877472E~38) = false +?= (0.123E~2, 0.5877472E~38) = false +< (0.123E~2, 0.1E~44) = false +> (0.123E~2, 0.1E~44) = true +== (0.123E~2, 0.1E~44) = false +?= (0.123E~2, 0.1E~44) = false +< (0.123E~2, 0.0) = false +> (0.123E~2, 0.0) = true +== (0.123E~2, 0.0) = false +?= (0.123E~2, 0.0) = false +< (0.123E~2, ~0.34028235E39) = false +> (0.123E~2, ~0.34028235E39) = true +== (0.123E~2, ~0.34028235E39) = false +?= (0.123E~2, ~0.34028235E39) = false +< (0.123E~2, ~0.17014117E39) = false +> (0.123E~2, ~0.17014117E39) = true +== (0.123E~2, ~0.17014117E39) = false +?= (0.123E~2, ~0.17014117E39) = false +< (0.123E~2, ~0.123E4) = false +> (0.123E~2, ~0.123E4) = true +== (0.123E~2, ~0.123E4) = false +?= (0.123E~2, ~0.123E4) = false +< (0.123E~2, ~0.123E2) = false +> (0.123E~2, ~0.123E2) = true +== (0.123E~2, ~0.123E2) = false +?= (0.123E~2, ~0.123E2) = false +< (0.123E~2, ~0.31415927E1) = false +> (0.123E~2, ~0.31415927E1) = true +== (0.123E~2, ~0.31415927E1) = false +?= (0.123E~2, ~0.31415927E1) = false +< (0.123E~2, ~0.27182817E1) = false +> (0.123E~2, ~0.27182817E1) = true +== (0.123E~2, ~0.27182817E1) = false +?= (0.123E~2, ~0.27182817E1) = false +< (0.123E~2, ~0.123E1) = false +> (0.123E~2, ~0.123E1) = true +== (0.123E~2, ~0.123E1) = false +?= (0.123E~2, ~0.123E1) = false +< (0.123E~2, ~0.123) = false +> (0.123E~2, ~0.123) = true +== (0.123E~2, ~0.123) = false +?= (0.123E~2, ~0.123) = false +< (0.123E~2, ~0.123E~2) = false +> (0.123E~2, ~0.123E~2) = true +== (0.123E~2, ~0.123E~2) = false +?= (0.123E~2, ~0.123E~2) = false +< (0.123E~2, ~0.11754944E~37) = false +> (0.123E~2, ~0.11754944E~37) = true +== (0.123E~2, ~0.11754944E~37) = false +?= (0.123E~2, ~0.11754944E~37) = false +< (0.123E~2, ~0.5877472E~38) = false +> (0.123E~2, ~0.5877472E~38) = true +== (0.123E~2, ~0.5877472E~38) = false +?= (0.123E~2, ~0.5877472E~38) = false +< (0.123E~2, ~0.1E~44) = false +> (0.123E~2, ~0.1E~44) = true +== (0.123E~2, ~0.1E~44) = false +?= (0.123E~2, ~0.1E~44) = false +< (0.123E~2, ~0.0) = false +> (0.123E~2, ~0.0) = true +== (0.123E~2, ~0.0) = false +?= (0.123E~2, ~0.0) = false +< (0.11754944E~37, 0.34028235E39) = true +> (0.11754944E~37, 0.34028235E39) = false +== (0.11754944E~37, 0.34028235E39) = false +?= (0.11754944E~37, 0.34028235E39) = false +< (0.11754944E~37, 0.17014117E39) = true +> (0.11754944E~37, 0.17014117E39) = false +== (0.11754944E~37, 0.17014117E39) = false +?= (0.11754944E~37, 0.17014117E39) = false +< (0.11754944E~37, 0.123E4) = true +> (0.11754944E~37, 0.123E4) = false +== (0.11754944E~37, 0.123E4) = false +?= (0.11754944E~37, 0.123E4) = false +< (0.11754944E~37, 0.123E2) = true +> (0.11754944E~37, 0.123E2) = false +== (0.11754944E~37, 0.123E2) = false +?= (0.11754944E~37, 0.123E2) = false +< (0.11754944E~37, 0.31415927E1) = true +> (0.11754944E~37, 0.31415927E1) = false +== (0.11754944E~37, 0.31415927E1) = false +?= (0.11754944E~37, 0.31415927E1) = false +< (0.11754944E~37, 0.27182817E1) = true +> (0.11754944E~37, 0.27182817E1) = false +== (0.11754944E~37, 0.27182817E1) = false +?= (0.11754944E~37, 0.27182817E1) = false +< (0.11754944E~37, 0.123E1) = true +> (0.11754944E~37, 0.123E1) = false +== (0.11754944E~37, 0.123E1) = false +?= (0.11754944E~37, 0.123E1) = false +< (0.11754944E~37, 0.123) = true +> (0.11754944E~37, 0.123) = false +== (0.11754944E~37, 0.123) = false +?= (0.11754944E~37, 0.123) = false +< (0.11754944E~37, 0.123E~2) = true +> (0.11754944E~37, 0.123E~2) = false +== (0.11754944E~37, 0.123E~2) = false +?= (0.11754944E~37, 0.123E~2) = false +< (0.11754944E~37, 0.11754944E~37) = false +> (0.11754944E~37, 0.11754944E~37) = false +== (0.11754944E~37, 0.11754944E~37) = true +?= (0.11754944E~37, 0.11754944E~37) = true +< (0.11754944E~37, 0.5877472E~38) = false +> (0.11754944E~37, 0.5877472E~38) = true +== (0.11754944E~37, 0.5877472E~38) = false +?= (0.11754944E~37, 0.5877472E~38) = false +< (0.11754944E~37, 0.1E~44) = false +> (0.11754944E~37, 0.1E~44) = true +== (0.11754944E~37, 0.1E~44) = false +?= (0.11754944E~37, 0.1E~44) = false +< (0.11754944E~37, 0.0) = false +> (0.11754944E~37, 0.0) = true +== (0.11754944E~37, 0.0) = false +?= (0.11754944E~37, 0.0) = false +< (0.11754944E~37, ~0.34028235E39) = false +> (0.11754944E~37, ~0.34028235E39) = true +== (0.11754944E~37, ~0.34028235E39) = false +?= (0.11754944E~37, ~0.34028235E39) = false +< (0.11754944E~37, ~0.17014117E39) = false +> (0.11754944E~37, ~0.17014117E39) = true +== (0.11754944E~37, ~0.17014117E39) = false +?= (0.11754944E~37, ~0.17014117E39) = false +< (0.11754944E~37, ~0.123E4) = false +> (0.11754944E~37, ~0.123E4) = true +== (0.11754944E~37, ~0.123E4) = false +?= (0.11754944E~37, ~0.123E4) = false +< (0.11754944E~37, ~0.123E2) = false +> (0.11754944E~37, ~0.123E2) = true +== (0.11754944E~37, ~0.123E2) = false +?= (0.11754944E~37, ~0.123E2) = false +< (0.11754944E~37, ~0.31415927E1) = false +> (0.11754944E~37, ~0.31415927E1) = true +== (0.11754944E~37, ~0.31415927E1) = false +?= (0.11754944E~37, ~0.31415927E1) = false +< (0.11754944E~37, ~0.27182817E1) = false +> (0.11754944E~37, ~0.27182817E1) = true +== (0.11754944E~37, ~0.27182817E1) = false +?= (0.11754944E~37, ~0.27182817E1) = false +< (0.11754944E~37, ~0.123E1) = false +> (0.11754944E~37, ~0.123E1) = true +== (0.11754944E~37, ~0.123E1) = false +?= (0.11754944E~37, ~0.123E1) = false +< (0.11754944E~37, ~0.123) = false +> (0.11754944E~37, ~0.123) = true +== (0.11754944E~37, ~0.123) = false +?= (0.11754944E~37, ~0.123) = false +< (0.11754944E~37, ~0.123E~2) = false +> (0.11754944E~37, ~0.123E~2) = true +== (0.11754944E~37, ~0.123E~2) = false +?= (0.11754944E~37, ~0.123E~2) = false +< (0.11754944E~37, ~0.11754944E~37) = false +> (0.11754944E~37, ~0.11754944E~37) = true +== (0.11754944E~37, ~0.11754944E~37) = false +?= (0.11754944E~37, ~0.11754944E~37) = false +< (0.11754944E~37, ~0.5877472E~38) = false +> (0.11754944E~37, ~0.5877472E~38) = true +== (0.11754944E~37, ~0.5877472E~38) = false +?= (0.11754944E~37, ~0.5877472E~38) = false +< (0.11754944E~37, ~0.1E~44) = false +> (0.11754944E~37, ~0.1E~44) = true +== (0.11754944E~37, ~0.1E~44) = false +?= (0.11754944E~37, ~0.1E~44) = false +< (0.11754944E~37, ~0.0) = false +> (0.11754944E~37, ~0.0) = true +== (0.11754944E~37, ~0.0) = false +?= (0.11754944E~37, ~0.0) = false +< (0.5877472E~38, 0.34028235E39) = true +> (0.5877472E~38, 0.34028235E39) = false +== (0.5877472E~38, 0.34028235E39) = false +?= (0.5877472E~38, 0.34028235E39) = false +< (0.5877472E~38, 0.17014117E39) = true +> (0.5877472E~38, 0.17014117E39) = false +== (0.5877472E~38, 0.17014117E39) = false +?= (0.5877472E~38, 0.17014117E39) = false +< (0.5877472E~38, 0.123E4) = true +> (0.5877472E~38, 0.123E4) = false +== (0.5877472E~38, 0.123E4) = false +?= (0.5877472E~38, 0.123E4) = false +< (0.5877472E~38, 0.123E2) = true +> (0.5877472E~38, 0.123E2) = false +== (0.5877472E~38, 0.123E2) = false +?= (0.5877472E~38, 0.123E2) = false +< (0.5877472E~38, 0.31415927E1) = true +> (0.5877472E~38, 0.31415927E1) = false +== (0.5877472E~38, 0.31415927E1) = false +?= (0.5877472E~38, 0.31415927E1) = false +< (0.5877472E~38, 0.27182817E1) = true +> (0.5877472E~38, 0.27182817E1) = false +== (0.5877472E~38, 0.27182817E1) = false +?= (0.5877472E~38, 0.27182817E1) = false +< (0.5877472E~38, 0.123E1) = true +> (0.5877472E~38, 0.123E1) = false +== (0.5877472E~38, 0.123E1) = false +?= (0.5877472E~38, 0.123E1) = false +< (0.5877472E~38, 0.123) = true +> (0.5877472E~38, 0.123) = false +== (0.5877472E~38, 0.123) = false +?= (0.5877472E~38, 0.123) = false +< (0.5877472E~38, 0.123E~2) = true +> (0.5877472E~38, 0.123E~2) = false +== (0.5877472E~38, 0.123E~2) = false +?= (0.5877472E~38, 0.123E~2) = false +< (0.5877472E~38, 0.11754944E~37) = true +> (0.5877472E~38, 0.11754944E~37) = false +== (0.5877472E~38, 0.11754944E~37) = false +?= (0.5877472E~38, 0.11754944E~37) = false +< (0.5877472E~38, 0.5877472E~38) = false +> (0.5877472E~38, 0.5877472E~38) = false +== (0.5877472E~38, 0.5877472E~38) = true +?= (0.5877472E~38, 0.5877472E~38) = true +< (0.5877472E~38, 0.1E~44) = false +> (0.5877472E~38, 0.1E~44) = true +== (0.5877472E~38, 0.1E~44) = false +?= (0.5877472E~38, 0.1E~44) = false +< (0.5877472E~38, 0.0) = false +> (0.5877472E~38, 0.0) = true +== (0.5877472E~38, 0.0) = false +?= (0.5877472E~38, 0.0) = false +< (0.5877472E~38, ~0.34028235E39) = false +> (0.5877472E~38, ~0.34028235E39) = true +== (0.5877472E~38, ~0.34028235E39) = false +?= (0.5877472E~38, ~0.34028235E39) = false +< (0.5877472E~38, ~0.17014117E39) = false +> (0.5877472E~38, ~0.17014117E39) = true +== (0.5877472E~38, ~0.17014117E39) = false +?= (0.5877472E~38, ~0.17014117E39) = false +< (0.5877472E~38, ~0.123E4) = false +> (0.5877472E~38, ~0.123E4) = true +== (0.5877472E~38, ~0.123E4) = false +?= (0.5877472E~38, ~0.123E4) = false +< (0.5877472E~38, ~0.123E2) = false +> (0.5877472E~38, ~0.123E2) = true +== (0.5877472E~38, ~0.123E2) = false +?= (0.5877472E~38, ~0.123E2) = false +< (0.5877472E~38, ~0.31415927E1) = false +> (0.5877472E~38, ~0.31415927E1) = true +== (0.5877472E~38, ~0.31415927E1) = false +?= (0.5877472E~38, ~0.31415927E1) = false +< (0.5877472E~38, ~0.27182817E1) = false +> (0.5877472E~38, ~0.27182817E1) = true +== (0.5877472E~38, ~0.27182817E1) = false +?= (0.5877472E~38, ~0.27182817E1) = false +< (0.5877472E~38, ~0.123E1) = false +> (0.5877472E~38, ~0.123E1) = true +== (0.5877472E~38, ~0.123E1) = false +?= (0.5877472E~38, ~0.123E1) = false +< (0.5877472E~38, ~0.123) = false +> (0.5877472E~38, ~0.123) = true +== (0.5877472E~38, ~0.123) = false +?= (0.5877472E~38, ~0.123) = false +< (0.5877472E~38, ~0.123E~2) = false +> (0.5877472E~38, ~0.123E~2) = true +== (0.5877472E~38, ~0.123E~2) = false +?= (0.5877472E~38, ~0.123E~2) = false +< (0.5877472E~38, ~0.11754944E~37) = false +> (0.5877472E~38, ~0.11754944E~37) = true +== (0.5877472E~38, ~0.11754944E~37) = false +?= (0.5877472E~38, ~0.11754944E~37) = false +< (0.5877472E~38, ~0.5877472E~38) = false +> (0.5877472E~38, ~0.5877472E~38) = true +== (0.5877472E~38, ~0.5877472E~38) = false +?= (0.5877472E~38, ~0.5877472E~38) = false +< (0.5877472E~38, ~0.1E~44) = false +> (0.5877472E~38, ~0.1E~44) = true +== (0.5877472E~38, ~0.1E~44) = false +?= (0.5877472E~38, ~0.1E~44) = false +< (0.5877472E~38, ~0.0) = false +> (0.5877472E~38, ~0.0) = true +== (0.5877472E~38, ~0.0) = false +?= (0.5877472E~38, ~0.0) = false +< (0.1E~44, 0.34028235E39) = true +> (0.1E~44, 0.34028235E39) = false +== (0.1E~44, 0.34028235E39) = false +?= (0.1E~44, 0.34028235E39) = false +< (0.1E~44, 0.17014117E39) = true +> (0.1E~44, 0.17014117E39) = false +== (0.1E~44, 0.17014117E39) = false +?= (0.1E~44, 0.17014117E39) = false +< (0.1E~44, 0.123E4) = true +> (0.1E~44, 0.123E4) = false +== (0.1E~44, 0.123E4) = false +?= (0.1E~44, 0.123E4) = false +< (0.1E~44, 0.123E2) = true +> (0.1E~44, 0.123E2) = false +== (0.1E~44, 0.123E2) = false +?= (0.1E~44, 0.123E2) = false +< (0.1E~44, 0.31415927E1) = true +> (0.1E~44, 0.31415927E1) = false +== (0.1E~44, 0.31415927E1) = false +?= (0.1E~44, 0.31415927E1) = false +< (0.1E~44, 0.27182817E1) = true +> (0.1E~44, 0.27182817E1) = false +== (0.1E~44, 0.27182817E1) = false +?= (0.1E~44, 0.27182817E1) = false +< (0.1E~44, 0.123E1) = true +> (0.1E~44, 0.123E1) = false +== (0.1E~44, 0.123E1) = false +?= (0.1E~44, 0.123E1) = false +< (0.1E~44, 0.123) = true +> (0.1E~44, 0.123) = false +== (0.1E~44, 0.123) = false +?= (0.1E~44, 0.123) = false +< (0.1E~44, 0.123E~2) = true +> (0.1E~44, 0.123E~2) = false +== (0.1E~44, 0.123E~2) = false +?= (0.1E~44, 0.123E~2) = false +< (0.1E~44, 0.11754944E~37) = true +> (0.1E~44, 0.11754944E~37) = false +== (0.1E~44, 0.11754944E~37) = false +?= (0.1E~44, 0.11754944E~37) = false +< (0.1E~44, 0.5877472E~38) = true +> (0.1E~44, 0.5877472E~38) = false +== (0.1E~44, 0.5877472E~38) = false +?= (0.1E~44, 0.5877472E~38) = false +< (0.1E~44, 0.1E~44) = false +> (0.1E~44, 0.1E~44) = false +== (0.1E~44, 0.1E~44) = true +?= (0.1E~44, 0.1E~44) = true +< (0.1E~44, 0.0) = false +> (0.1E~44, 0.0) = true +== (0.1E~44, 0.0) = false +?= (0.1E~44, 0.0) = false +< (0.1E~44, ~0.34028235E39) = false +> (0.1E~44, ~0.34028235E39) = true +== (0.1E~44, ~0.34028235E39) = false +?= (0.1E~44, ~0.34028235E39) = false +< (0.1E~44, ~0.17014117E39) = false +> (0.1E~44, ~0.17014117E39) = true +== (0.1E~44, ~0.17014117E39) = false +?= (0.1E~44, ~0.17014117E39) = false +< (0.1E~44, ~0.123E4) = false +> (0.1E~44, ~0.123E4) = true +== (0.1E~44, ~0.123E4) = false +?= (0.1E~44, ~0.123E4) = false +< (0.1E~44, ~0.123E2) = false +> (0.1E~44, ~0.123E2) = true +== (0.1E~44, ~0.123E2) = false +?= (0.1E~44, ~0.123E2) = false +< (0.1E~44, ~0.31415927E1) = false +> (0.1E~44, ~0.31415927E1) = true +== (0.1E~44, ~0.31415927E1) = false +?= (0.1E~44, ~0.31415927E1) = false +< (0.1E~44, ~0.27182817E1) = false +> (0.1E~44, ~0.27182817E1) = true +== (0.1E~44, ~0.27182817E1) = false +?= (0.1E~44, ~0.27182817E1) = false +< (0.1E~44, ~0.123E1) = false +> (0.1E~44, ~0.123E1) = true +== (0.1E~44, ~0.123E1) = false +?= (0.1E~44, ~0.123E1) = false +< (0.1E~44, ~0.123) = false +> (0.1E~44, ~0.123) = true +== (0.1E~44, ~0.123) = false +?= (0.1E~44, ~0.123) = false +< (0.1E~44, ~0.123E~2) = false +> (0.1E~44, ~0.123E~2) = true +== (0.1E~44, ~0.123E~2) = false +?= (0.1E~44, ~0.123E~2) = false +< (0.1E~44, ~0.11754944E~37) = false +> (0.1E~44, ~0.11754944E~37) = true +== (0.1E~44, ~0.11754944E~37) = false +?= (0.1E~44, ~0.11754944E~37) = false +< (0.1E~44, ~0.5877472E~38) = false +> (0.1E~44, ~0.5877472E~38) = true +== (0.1E~44, ~0.5877472E~38) = false +?= (0.1E~44, ~0.5877472E~38) = false +< (0.1E~44, ~0.1E~44) = false +> (0.1E~44, ~0.1E~44) = true +== (0.1E~44, ~0.1E~44) = false +?= (0.1E~44, ~0.1E~44) = false +< (0.1E~44, ~0.0) = false +> (0.1E~44, ~0.0) = true +== (0.1E~44, ~0.0) = false +?= (0.1E~44, ~0.0) = false +< (0.0, 0.34028235E39) = true +> (0.0, 0.34028235E39) = false +== (0.0, 0.34028235E39) = false +?= (0.0, 0.34028235E39) = false +< (0.0, 0.17014117E39) = true +> (0.0, 0.17014117E39) = false +== (0.0, 0.17014117E39) = false +?= (0.0, 0.17014117E39) = false +< (0.0, 0.123E4) = true +> (0.0, 0.123E4) = false +== (0.0, 0.123E4) = false +?= (0.0, 0.123E4) = false +< (0.0, 0.123E2) = true +> (0.0, 0.123E2) = false +== (0.0, 0.123E2) = false +?= (0.0, 0.123E2) = false +< (0.0, 0.31415927E1) = true +> (0.0, 0.31415927E1) = false +== (0.0, 0.31415927E1) = false +?= (0.0, 0.31415927E1) = false +< (0.0, 0.27182817E1) = true +> (0.0, 0.27182817E1) = false +== (0.0, 0.27182817E1) = false +?= (0.0, 0.27182817E1) = false +< (0.0, 0.123E1) = true +> (0.0, 0.123E1) = false +== (0.0, 0.123E1) = false +?= (0.0, 0.123E1) = false +< (0.0, 0.123) = true +> (0.0, 0.123) = false +== (0.0, 0.123) = false +?= (0.0, 0.123) = false +< (0.0, 0.123E~2) = true +> (0.0, 0.123E~2) = false +== (0.0, 0.123E~2) = false +?= (0.0, 0.123E~2) = false +< (0.0, 0.11754944E~37) = true +> (0.0, 0.11754944E~37) = false +== (0.0, 0.11754944E~37) = false +?= (0.0, 0.11754944E~37) = false +< (0.0, 0.5877472E~38) = true +> (0.0, 0.5877472E~38) = false +== (0.0, 0.5877472E~38) = false +?= (0.0, 0.5877472E~38) = false +< (0.0, 0.1E~44) = true +> (0.0, 0.1E~44) = false +== (0.0, 0.1E~44) = false +?= (0.0, 0.1E~44) = false +< (0.0, 0.0) = false +> (0.0, 0.0) = false +== (0.0, 0.0) = true +?= (0.0, 0.0) = true +< (0.0, ~0.34028235E39) = false +> (0.0, ~0.34028235E39) = true +== (0.0, ~0.34028235E39) = false +?= (0.0, ~0.34028235E39) = false +< (0.0, ~0.17014117E39) = false +> (0.0, ~0.17014117E39) = true +== (0.0, ~0.17014117E39) = false +?= (0.0, ~0.17014117E39) = false +< (0.0, ~0.123E4) = false +> (0.0, ~0.123E4) = true +== (0.0, ~0.123E4) = false +?= (0.0, ~0.123E4) = false +< (0.0, ~0.123E2) = false +> (0.0, ~0.123E2) = true +== (0.0, ~0.123E2) = false +?= (0.0, ~0.123E2) = false +< (0.0, ~0.31415927E1) = false +> (0.0, ~0.31415927E1) = true +== (0.0, ~0.31415927E1) = false +?= (0.0, ~0.31415927E1) = false +< (0.0, ~0.27182817E1) = false +> (0.0, ~0.27182817E1) = true +== (0.0, ~0.27182817E1) = false +?= (0.0, ~0.27182817E1) = false +< (0.0, ~0.123E1) = false +> (0.0, ~0.123E1) = true +== (0.0, ~0.123E1) = false +?= (0.0, ~0.123E1) = false +< (0.0, ~0.123) = false +> (0.0, ~0.123) = true +== (0.0, ~0.123) = false +?= (0.0, ~0.123) = false +< (0.0, ~0.123E~2) = false +> (0.0, ~0.123E~2) = true +== (0.0, ~0.123E~2) = false +?= (0.0, ~0.123E~2) = false +< (0.0, ~0.11754944E~37) = false +> (0.0, ~0.11754944E~37) = true +== (0.0, ~0.11754944E~37) = false +?= (0.0, ~0.11754944E~37) = false +< (0.0, ~0.5877472E~38) = false +> (0.0, ~0.5877472E~38) = true +== (0.0, ~0.5877472E~38) = false +?= (0.0, ~0.5877472E~38) = false +< (0.0, ~0.1E~44) = false +> (0.0, ~0.1E~44) = true +== (0.0, ~0.1E~44) = false +?= (0.0, ~0.1E~44) = false +< (0.0, ~0.0) = false +> (0.0, ~0.0) = false +== (0.0, ~0.0) = true +?= (0.0, ~0.0) = true +< (~0.34028235E39, 0.34028235E39) = true +> (~0.34028235E39, 0.34028235E39) = false +== (~0.34028235E39, 0.34028235E39) = false +?= (~0.34028235E39, 0.34028235E39) = false +< (~0.34028235E39, 0.17014117E39) = true +> (~0.34028235E39, 0.17014117E39) = false +== (~0.34028235E39, 0.17014117E39) = false +?= (~0.34028235E39, 0.17014117E39) = false +< (~0.34028235E39, 0.123E4) = true +> (~0.34028235E39, 0.123E4) = false +== (~0.34028235E39, 0.123E4) = false +?= (~0.34028235E39, 0.123E4) = false +< (~0.34028235E39, 0.123E2) = true +> (~0.34028235E39, 0.123E2) = false +== (~0.34028235E39, 0.123E2) = false +?= (~0.34028235E39, 0.123E2) = false +< (~0.34028235E39, 0.31415927E1) = true +> (~0.34028235E39, 0.31415927E1) = false +== (~0.34028235E39, 0.31415927E1) = false +?= (~0.34028235E39, 0.31415927E1) = false +< (~0.34028235E39, 0.27182817E1) = true +> (~0.34028235E39, 0.27182817E1) = false +== (~0.34028235E39, 0.27182817E1) = false +?= (~0.34028235E39, 0.27182817E1) = false +< (~0.34028235E39, 0.123E1) = true +> (~0.34028235E39, 0.123E1) = false +== (~0.34028235E39, 0.123E1) = false +?= (~0.34028235E39, 0.123E1) = false +< (~0.34028235E39, 0.123) = true +> (~0.34028235E39, 0.123) = false +== (~0.34028235E39, 0.123) = false +?= (~0.34028235E39, 0.123) = false +< (~0.34028235E39, 0.123E~2) = true +> (~0.34028235E39, 0.123E~2) = false +== (~0.34028235E39, 0.123E~2) = false +?= (~0.34028235E39, 0.123E~2) = false +< (~0.34028235E39, 0.11754944E~37) = true +> (~0.34028235E39, 0.11754944E~37) = false +== (~0.34028235E39, 0.11754944E~37) = false +?= (~0.34028235E39, 0.11754944E~37) = false +< (~0.34028235E39, 0.5877472E~38) = true +> (~0.34028235E39, 0.5877472E~38) = false +== (~0.34028235E39, 0.5877472E~38) = false +?= (~0.34028235E39, 0.5877472E~38) = false +< (~0.34028235E39, 0.1E~44) = true +> (~0.34028235E39, 0.1E~44) = false +== (~0.34028235E39, 0.1E~44) = false +?= (~0.34028235E39, 0.1E~44) = false +< (~0.34028235E39, 0.0) = true +> (~0.34028235E39, 0.0) = false +== (~0.34028235E39, 0.0) = false +?= (~0.34028235E39, 0.0) = false +< (~0.34028235E39, ~0.34028235E39) = false +> (~0.34028235E39, ~0.34028235E39) = false +== (~0.34028235E39, ~0.34028235E39) = true +?= (~0.34028235E39, ~0.34028235E39) = true +< (~0.34028235E39, ~0.17014117E39) = true +> (~0.34028235E39, ~0.17014117E39) = false +== (~0.34028235E39, ~0.17014117E39) = false +?= (~0.34028235E39, ~0.17014117E39) = false +< (~0.34028235E39, ~0.123E4) = true +> (~0.34028235E39, ~0.123E4) = false +== (~0.34028235E39, ~0.123E4) = false +?= (~0.34028235E39, ~0.123E4) = false +< (~0.34028235E39, ~0.123E2) = true +> (~0.34028235E39, ~0.123E2) = false +== (~0.34028235E39, ~0.123E2) = false +?= (~0.34028235E39, ~0.123E2) = false +< (~0.34028235E39, ~0.31415927E1) = true +> (~0.34028235E39, ~0.31415927E1) = false +== (~0.34028235E39, ~0.31415927E1) = false +?= (~0.34028235E39, ~0.31415927E1) = false +< (~0.34028235E39, ~0.27182817E1) = true +> (~0.34028235E39, ~0.27182817E1) = false +== (~0.34028235E39, ~0.27182817E1) = false +?= (~0.34028235E39, ~0.27182817E1) = false +< (~0.34028235E39, ~0.123E1) = true +> (~0.34028235E39, ~0.123E1) = false +== (~0.34028235E39, ~0.123E1) = false +?= (~0.34028235E39, ~0.123E1) = false +< (~0.34028235E39, ~0.123) = true +> (~0.34028235E39, ~0.123) = false +== (~0.34028235E39, ~0.123) = false +?= (~0.34028235E39, ~0.123) = false +< (~0.34028235E39, ~0.123E~2) = true +> (~0.34028235E39, ~0.123E~2) = false +== (~0.34028235E39, ~0.123E~2) = false +?= (~0.34028235E39, ~0.123E~2) = false +< (~0.34028235E39, ~0.11754944E~37) = true +> (~0.34028235E39, ~0.11754944E~37) = false +== (~0.34028235E39, ~0.11754944E~37) = false +?= (~0.34028235E39, ~0.11754944E~37) = false +< (~0.34028235E39, ~0.5877472E~38) = true +> (~0.34028235E39, ~0.5877472E~38) = false +== (~0.34028235E39, ~0.5877472E~38) = false +?= (~0.34028235E39, ~0.5877472E~38) = false +< (~0.34028235E39, ~0.1E~44) = true +> (~0.34028235E39, ~0.1E~44) = false +== (~0.34028235E39, ~0.1E~44) = false +?= (~0.34028235E39, ~0.1E~44) = false +< (~0.34028235E39, ~0.0) = true +> (~0.34028235E39, ~0.0) = false +== (~0.34028235E39, ~0.0) = false +?= (~0.34028235E39, ~0.0) = false +< (~0.17014117E39, 0.34028235E39) = true +> (~0.17014117E39, 0.34028235E39) = false +== (~0.17014117E39, 0.34028235E39) = false +?= (~0.17014117E39, 0.34028235E39) = false +< (~0.17014117E39, 0.17014117E39) = true +> (~0.17014117E39, 0.17014117E39) = false +== (~0.17014117E39, 0.17014117E39) = false +?= (~0.17014117E39, 0.17014117E39) = false +< (~0.17014117E39, 0.123E4) = true +> (~0.17014117E39, 0.123E4) = false +== (~0.17014117E39, 0.123E4) = false +?= (~0.17014117E39, 0.123E4) = false +< (~0.17014117E39, 0.123E2) = true +> (~0.17014117E39, 0.123E2) = false +== (~0.17014117E39, 0.123E2) = false +?= (~0.17014117E39, 0.123E2) = false +< (~0.17014117E39, 0.31415927E1) = true +> (~0.17014117E39, 0.31415927E1) = false +== (~0.17014117E39, 0.31415927E1) = false +?= (~0.17014117E39, 0.31415927E1) = false +< (~0.17014117E39, 0.27182817E1) = true +> (~0.17014117E39, 0.27182817E1) = false +== (~0.17014117E39, 0.27182817E1) = false +?= (~0.17014117E39, 0.27182817E1) = false +< (~0.17014117E39, 0.123E1) = true +> (~0.17014117E39, 0.123E1) = false +== (~0.17014117E39, 0.123E1) = false +?= (~0.17014117E39, 0.123E1) = false +< (~0.17014117E39, 0.123) = true +> (~0.17014117E39, 0.123) = false +== (~0.17014117E39, 0.123) = false +?= (~0.17014117E39, 0.123) = false +< (~0.17014117E39, 0.123E~2) = true +> (~0.17014117E39, 0.123E~2) = false +== (~0.17014117E39, 0.123E~2) = false +?= (~0.17014117E39, 0.123E~2) = false +< (~0.17014117E39, 0.11754944E~37) = true +> (~0.17014117E39, 0.11754944E~37) = false +== (~0.17014117E39, 0.11754944E~37) = false +?= (~0.17014117E39, 0.11754944E~37) = false +< (~0.17014117E39, 0.5877472E~38) = true +> (~0.17014117E39, 0.5877472E~38) = false +== (~0.17014117E39, 0.5877472E~38) = false +?= (~0.17014117E39, 0.5877472E~38) = false +< (~0.17014117E39, 0.1E~44) = true +> (~0.17014117E39, 0.1E~44) = false +== (~0.17014117E39, 0.1E~44) = false +?= (~0.17014117E39, 0.1E~44) = false +< (~0.17014117E39, 0.0) = true +> (~0.17014117E39, 0.0) = false +== (~0.17014117E39, 0.0) = false +?= (~0.17014117E39, 0.0) = false +< (~0.17014117E39, ~0.34028235E39) = false +> (~0.17014117E39, ~0.34028235E39) = true +== (~0.17014117E39, ~0.34028235E39) = false +?= (~0.17014117E39, ~0.34028235E39) = false +< (~0.17014117E39, ~0.17014117E39) = false +> (~0.17014117E39, ~0.17014117E39) = false +== (~0.17014117E39, ~0.17014117E39) = true +?= (~0.17014117E39, ~0.17014117E39) = true +< (~0.17014117E39, ~0.123E4) = true +> (~0.17014117E39, ~0.123E4) = false +== (~0.17014117E39, ~0.123E4) = false +?= (~0.17014117E39, ~0.123E4) = false +< (~0.17014117E39, ~0.123E2) = true +> (~0.17014117E39, ~0.123E2) = false +== (~0.17014117E39, ~0.123E2) = false +?= (~0.17014117E39, ~0.123E2) = false +< (~0.17014117E39, ~0.31415927E1) = true +> (~0.17014117E39, ~0.31415927E1) = false +== (~0.17014117E39, ~0.31415927E1) = false +?= (~0.17014117E39, ~0.31415927E1) = false +< (~0.17014117E39, ~0.27182817E1) = true +> (~0.17014117E39, ~0.27182817E1) = false +== (~0.17014117E39, ~0.27182817E1) = false +?= (~0.17014117E39, ~0.27182817E1) = false +< (~0.17014117E39, ~0.123E1) = true +> (~0.17014117E39, ~0.123E1) = false +== (~0.17014117E39, ~0.123E1) = false +?= (~0.17014117E39, ~0.123E1) = false +< (~0.17014117E39, ~0.123) = true +> (~0.17014117E39, ~0.123) = false +== (~0.17014117E39, ~0.123) = false +?= (~0.17014117E39, ~0.123) = false +< (~0.17014117E39, ~0.123E~2) = true +> (~0.17014117E39, ~0.123E~2) = false +== (~0.17014117E39, ~0.123E~2) = false +?= (~0.17014117E39, ~0.123E~2) = false +< (~0.17014117E39, ~0.11754944E~37) = true +> (~0.17014117E39, ~0.11754944E~37) = false +== (~0.17014117E39, ~0.11754944E~37) = false +?= (~0.17014117E39, ~0.11754944E~37) = false +< (~0.17014117E39, ~0.5877472E~38) = true +> (~0.17014117E39, ~0.5877472E~38) = false +== (~0.17014117E39, ~0.5877472E~38) = false +?= (~0.17014117E39, ~0.5877472E~38) = false +< (~0.17014117E39, ~0.1E~44) = true +> (~0.17014117E39, ~0.1E~44) = false +== (~0.17014117E39, ~0.1E~44) = false +?= (~0.17014117E39, ~0.1E~44) = false +< (~0.17014117E39, ~0.0) = true +> (~0.17014117E39, ~0.0) = false +== (~0.17014117E39, ~0.0) = false +?= (~0.17014117E39, ~0.0) = false +< (~0.123E4, 0.34028235E39) = true +> (~0.123E4, 0.34028235E39) = false +== (~0.123E4, 0.34028235E39) = false +?= (~0.123E4, 0.34028235E39) = false +< (~0.123E4, 0.17014117E39) = true +> (~0.123E4, 0.17014117E39) = false +== (~0.123E4, 0.17014117E39) = false +?= (~0.123E4, 0.17014117E39) = false +< (~0.123E4, 0.123E4) = true +> (~0.123E4, 0.123E4) = false +== (~0.123E4, 0.123E4) = false +?= (~0.123E4, 0.123E4) = false +< (~0.123E4, 0.123E2) = true +> (~0.123E4, 0.123E2) = false +== (~0.123E4, 0.123E2) = false +?= (~0.123E4, 0.123E2) = false +< (~0.123E4, 0.31415927E1) = true +> (~0.123E4, 0.31415927E1) = false +== (~0.123E4, 0.31415927E1) = false +?= (~0.123E4, 0.31415927E1) = false +< (~0.123E4, 0.27182817E1) = true +> (~0.123E4, 0.27182817E1) = false +== (~0.123E4, 0.27182817E1) = false +?= (~0.123E4, 0.27182817E1) = false +< (~0.123E4, 0.123E1) = true +> (~0.123E4, 0.123E1) = false +== (~0.123E4, 0.123E1) = false +?= (~0.123E4, 0.123E1) = false +< (~0.123E4, 0.123) = true +> (~0.123E4, 0.123) = false +== (~0.123E4, 0.123) = false +?= (~0.123E4, 0.123) = false +< (~0.123E4, 0.123E~2) = true +> (~0.123E4, 0.123E~2) = false +== (~0.123E4, 0.123E~2) = false +?= (~0.123E4, 0.123E~2) = false +< (~0.123E4, 0.11754944E~37) = true +> (~0.123E4, 0.11754944E~37) = false +== (~0.123E4, 0.11754944E~37) = false +?= (~0.123E4, 0.11754944E~37) = false +< (~0.123E4, 0.5877472E~38) = true +> (~0.123E4, 0.5877472E~38) = false +== (~0.123E4, 0.5877472E~38) = false +?= (~0.123E4, 0.5877472E~38) = false +< (~0.123E4, 0.1E~44) = true +> (~0.123E4, 0.1E~44) = false +== (~0.123E4, 0.1E~44) = false +?= (~0.123E4, 0.1E~44) = false +< (~0.123E4, 0.0) = true +> (~0.123E4, 0.0) = false +== (~0.123E4, 0.0) = false +?= (~0.123E4, 0.0) = false +< (~0.123E4, ~0.34028235E39) = false +> (~0.123E4, ~0.34028235E39) = true +== (~0.123E4, ~0.34028235E39) = false +?= (~0.123E4, ~0.34028235E39) = false +< (~0.123E4, ~0.17014117E39) = false +> (~0.123E4, ~0.17014117E39) = true +== (~0.123E4, ~0.17014117E39) = false +?= (~0.123E4, ~0.17014117E39) = false +< (~0.123E4, ~0.123E4) = false +> (~0.123E4, ~0.123E4) = false +== (~0.123E4, ~0.123E4) = true +?= (~0.123E4, ~0.123E4) = true +< (~0.123E4, ~0.123E2) = true +> (~0.123E4, ~0.123E2) = false +== (~0.123E4, ~0.123E2) = false +?= (~0.123E4, ~0.123E2) = false +< (~0.123E4, ~0.31415927E1) = true +> (~0.123E4, ~0.31415927E1) = false +== (~0.123E4, ~0.31415927E1) = false +?= (~0.123E4, ~0.31415927E1) = false +< (~0.123E4, ~0.27182817E1) = true +> (~0.123E4, ~0.27182817E1) = false +== (~0.123E4, ~0.27182817E1) = false +?= (~0.123E4, ~0.27182817E1) = false +< (~0.123E4, ~0.123E1) = true +> (~0.123E4, ~0.123E1) = false +== (~0.123E4, ~0.123E1) = false +?= (~0.123E4, ~0.123E1) = false +< (~0.123E4, ~0.123) = true +> (~0.123E4, ~0.123) = false +== (~0.123E4, ~0.123) = false +?= (~0.123E4, ~0.123) = false +< (~0.123E4, ~0.123E~2) = true +> (~0.123E4, ~0.123E~2) = false +== (~0.123E4, ~0.123E~2) = false +?= (~0.123E4, ~0.123E~2) = false +< (~0.123E4, ~0.11754944E~37) = true +> (~0.123E4, ~0.11754944E~37) = false +== (~0.123E4, ~0.11754944E~37) = false +?= (~0.123E4, ~0.11754944E~37) = false +< (~0.123E4, ~0.5877472E~38) = true +> (~0.123E4, ~0.5877472E~38) = false +== (~0.123E4, ~0.5877472E~38) = false +?= (~0.123E4, ~0.5877472E~38) = false +< (~0.123E4, ~0.1E~44) = true +> (~0.123E4, ~0.1E~44) = false +== (~0.123E4, ~0.1E~44) = false +?= (~0.123E4, ~0.1E~44) = false +< (~0.123E4, ~0.0) = true +> (~0.123E4, ~0.0) = false +== (~0.123E4, ~0.0) = false +?= (~0.123E4, ~0.0) = false +< (~0.123E2, 0.34028235E39) = true +> (~0.123E2, 0.34028235E39) = false +== (~0.123E2, 0.34028235E39) = false +?= (~0.123E2, 0.34028235E39) = false +< (~0.123E2, 0.17014117E39) = true +> (~0.123E2, 0.17014117E39) = false +== (~0.123E2, 0.17014117E39) = false +?= (~0.123E2, 0.17014117E39) = false +< (~0.123E2, 0.123E4) = true +> (~0.123E2, 0.123E4) = false +== (~0.123E2, 0.123E4) = false +?= (~0.123E2, 0.123E4) = false +< (~0.123E2, 0.123E2) = true +> (~0.123E2, 0.123E2) = false +== (~0.123E2, 0.123E2) = false +?= (~0.123E2, 0.123E2) = false +< (~0.123E2, 0.31415927E1) = true +> (~0.123E2, 0.31415927E1) = false +== (~0.123E2, 0.31415927E1) = false +?= (~0.123E2, 0.31415927E1) = false +< (~0.123E2, 0.27182817E1) = true +> (~0.123E2, 0.27182817E1) = false +== (~0.123E2, 0.27182817E1) = false +?= (~0.123E2, 0.27182817E1) = false +< (~0.123E2, 0.123E1) = true +> (~0.123E2, 0.123E1) = false +== (~0.123E2, 0.123E1) = false +?= (~0.123E2, 0.123E1) = false +< (~0.123E2, 0.123) = true +> (~0.123E2, 0.123) = false +== (~0.123E2, 0.123) = false +?= (~0.123E2, 0.123) = false +< (~0.123E2, 0.123E~2) = true +> (~0.123E2, 0.123E~2) = false +== (~0.123E2, 0.123E~2) = false +?= (~0.123E2, 0.123E~2) = false +< (~0.123E2, 0.11754944E~37) = true +> (~0.123E2, 0.11754944E~37) = false +== (~0.123E2, 0.11754944E~37) = false +?= (~0.123E2, 0.11754944E~37) = false +< (~0.123E2, 0.5877472E~38) = true +> (~0.123E2, 0.5877472E~38) = false +== (~0.123E2, 0.5877472E~38) = false +?= (~0.123E2, 0.5877472E~38) = false +< (~0.123E2, 0.1E~44) = true +> (~0.123E2, 0.1E~44) = false +== (~0.123E2, 0.1E~44) = false +?= (~0.123E2, 0.1E~44) = false +< (~0.123E2, 0.0) = true +> (~0.123E2, 0.0) = false +== (~0.123E2, 0.0) = false +?= (~0.123E2, 0.0) = false +< (~0.123E2, ~0.34028235E39) = false +> (~0.123E2, ~0.34028235E39) = true +== (~0.123E2, ~0.34028235E39) = false +?= (~0.123E2, ~0.34028235E39) = false +< (~0.123E2, ~0.17014117E39) = false +> (~0.123E2, ~0.17014117E39) = true +== (~0.123E2, ~0.17014117E39) = false +?= (~0.123E2, ~0.17014117E39) = false +< (~0.123E2, ~0.123E4) = false +> (~0.123E2, ~0.123E4) = true +== (~0.123E2, ~0.123E4) = false +?= (~0.123E2, ~0.123E4) = false +< (~0.123E2, ~0.123E2) = false +> (~0.123E2, ~0.123E2) = false +== (~0.123E2, ~0.123E2) = true +?= (~0.123E2, ~0.123E2) = true +< (~0.123E2, ~0.31415927E1) = true +> (~0.123E2, ~0.31415927E1) = false +== (~0.123E2, ~0.31415927E1) = false +?= (~0.123E2, ~0.31415927E1) = false +< (~0.123E2, ~0.27182817E1) = true +> (~0.123E2, ~0.27182817E1) = false +== (~0.123E2, ~0.27182817E1) = false +?= (~0.123E2, ~0.27182817E1) = false +< (~0.123E2, ~0.123E1) = true +> (~0.123E2, ~0.123E1) = false +== (~0.123E2, ~0.123E1) = false +?= (~0.123E2, ~0.123E1) = false +< (~0.123E2, ~0.123) = true +> (~0.123E2, ~0.123) = false +== (~0.123E2, ~0.123) = false +?= (~0.123E2, ~0.123) = false +< (~0.123E2, ~0.123E~2) = true +> (~0.123E2, ~0.123E~2) = false +== (~0.123E2, ~0.123E~2) = false +?= (~0.123E2, ~0.123E~2) = false +< (~0.123E2, ~0.11754944E~37) = true +> (~0.123E2, ~0.11754944E~37) = false +== (~0.123E2, ~0.11754944E~37) = false +?= (~0.123E2, ~0.11754944E~37) = false +< (~0.123E2, ~0.5877472E~38) = true +> (~0.123E2, ~0.5877472E~38) = false +== (~0.123E2, ~0.5877472E~38) = false +?= (~0.123E2, ~0.5877472E~38) = false +< (~0.123E2, ~0.1E~44) = true +> (~0.123E2, ~0.1E~44) = false +== (~0.123E2, ~0.1E~44) = false +?= (~0.123E2, ~0.1E~44) = false +< (~0.123E2, ~0.0) = true +> (~0.123E2, ~0.0) = false +== (~0.123E2, ~0.0) = false +?= (~0.123E2, ~0.0) = false +< (~0.31415927E1, 0.34028235E39) = true +> (~0.31415927E1, 0.34028235E39) = false +== (~0.31415927E1, 0.34028235E39) = false +?= (~0.31415927E1, 0.34028235E39) = false +< (~0.31415927E1, 0.17014117E39) = true +> (~0.31415927E1, 0.17014117E39) = false +== (~0.31415927E1, 0.17014117E39) = false +?= (~0.31415927E1, 0.17014117E39) = false +< (~0.31415927E1, 0.123E4) = true +> (~0.31415927E1, 0.123E4) = false +== (~0.31415927E1, 0.123E4) = false +?= (~0.31415927E1, 0.123E4) = false +< (~0.31415927E1, 0.123E2) = true +> (~0.31415927E1, 0.123E2) = false +== (~0.31415927E1, 0.123E2) = false +?= (~0.31415927E1, 0.123E2) = false +< (~0.31415927E1, 0.31415927E1) = true +> (~0.31415927E1, 0.31415927E1) = false +== (~0.31415927E1, 0.31415927E1) = false +?= (~0.31415927E1, 0.31415927E1) = false +< (~0.31415927E1, 0.27182817E1) = true +> (~0.31415927E1, 0.27182817E1) = false +== (~0.31415927E1, 0.27182817E1) = false +?= (~0.31415927E1, 0.27182817E1) = false +< (~0.31415927E1, 0.123E1) = true +> (~0.31415927E1, 0.123E1) = false +== (~0.31415927E1, 0.123E1) = false +?= (~0.31415927E1, 0.123E1) = false +< (~0.31415927E1, 0.123) = true +> (~0.31415927E1, 0.123) = false +== (~0.31415927E1, 0.123) = false +?= (~0.31415927E1, 0.123) = false +< (~0.31415927E1, 0.123E~2) = true +> (~0.31415927E1, 0.123E~2) = false +== (~0.31415927E1, 0.123E~2) = false +?= (~0.31415927E1, 0.123E~2) = false +< (~0.31415927E1, 0.11754944E~37) = true +> (~0.31415927E1, 0.11754944E~37) = false +== (~0.31415927E1, 0.11754944E~37) = false +?= (~0.31415927E1, 0.11754944E~37) = false +< (~0.31415927E1, 0.5877472E~38) = true +> (~0.31415927E1, 0.5877472E~38) = false +== (~0.31415927E1, 0.5877472E~38) = false +?= (~0.31415927E1, 0.5877472E~38) = false +< (~0.31415927E1, 0.1E~44) = true +> (~0.31415927E1, 0.1E~44) = false +== (~0.31415927E1, 0.1E~44) = false +?= (~0.31415927E1, 0.1E~44) = false +< (~0.31415927E1, 0.0) = true +> (~0.31415927E1, 0.0) = false +== (~0.31415927E1, 0.0) = false +?= (~0.31415927E1, 0.0) = false +< (~0.31415927E1, ~0.34028235E39) = false +> (~0.31415927E1, ~0.34028235E39) = true +== (~0.31415927E1, ~0.34028235E39) = false +?= (~0.31415927E1, ~0.34028235E39) = false +< (~0.31415927E1, ~0.17014117E39) = false +> (~0.31415927E1, ~0.17014117E39) = true +== (~0.31415927E1, ~0.17014117E39) = false +?= (~0.31415927E1, ~0.17014117E39) = false +< (~0.31415927E1, ~0.123E4) = false +> (~0.31415927E1, ~0.123E4) = true +== (~0.31415927E1, ~0.123E4) = false +?= (~0.31415927E1, ~0.123E4) = false +< (~0.31415927E1, ~0.123E2) = false +> (~0.31415927E1, ~0.123E2) = true +== (~0.31415927E1, ~0.123E2) = false +?= (~0.31415927E1, ~0.123E2) = false +< (~0.31415927E1, ~0.31415927E1) = false +> (~0.31415927E1, ~0.31415927E1) = false +== (~0.31415927E1, ~0.31415927E1) = true +?= (~0.31415927E1, ~0.31415927E1) = true +< (~0.31415927E1, ~0.27182817E1) = true +> (~0.31415927E1, ~0.27182817E1) = false +== (~0.31415927E1, ~0.27182817E1) = false +?= (~0.31415927E1, ~0.27182817E1) = false +< (~0.31415927E1, ~0.123E1) = true +> (~0.31415927E1, ~0.123E1) = false +== (~0.31415927E1, ~0.123E1) = false +?= (~0.31415927E1, ~0.123E1) = false +< (~0.31415927E1, ~0.123) = true +> (~0.31415927E1, ~0.123) = false +== (~0.31415927E1, ~0.123) = false +?= (~0.31415927E1, ~0.123) = false +< (~0.31415927E1, ~0.123E~2) = true +> (~0.31415927E1, ~0.123E~2) = false +== (~0.31415927E1, ~0.123E~2) = false +?= (~0.31415927E1, ~0.123E~2) = false +< (~0.31415927E1, ~0.11754944E~37) = true +> (~0.31415927E1, ~0.11754944E~37) = false +== (~0.31415927E1, ~0.11754944E~37) = false +?= (~0.31415927E1, ~0.11754944E~37) = false +< (~0.31415927E1, ~0.5877472E~38) = true +> (~0.31415927E1, ~0.5877472E~38) = false +== (~0.31415927E1, ~0.5877472E~38) = false +?= (~0.31415927E1, ~0.5877472E~38) = false +< (~0.31415927E1, ~0.1E~44) = true +> (~0.31415927E1, ~0.1E~44) = false +== (~0.31415927E1, ~0.1E~44) = false +?= (~0.31415927E1, ~0.1E~44) = false +< (~0.31415927E1, ~0.0) = true +> (~0.31415927E1, ~0.0) = false +== (~0.31415927E1, ~0.0) = false +?= (~0.31415927E1, ~0.0) = false +< (~0.27182817E1, 0.34028235E39) = true +> (~0.27182817E1, 0.34028235E39) = false +== (~0.27182817E1, 0.34028235E39) = false +?= (~0.27182817E1, 0.34028235E39) = false +< (~0.27182817E1, 0.17014117E39) = true +> (~0.27182817E1, 0.17014117E39) = false +== (~0.27182817E1, 0.17014117E39) = false +?= (~0.27182817E1, 0.17014117E39) = false +< (~0.27182817E1, 0.123E4) = true +> (~0.27182817E1, 0.123E4) = false +== (~0.27182817E1, 0.123E4) = false +?= (~0.27182817E1, 0.123E4) = false +< (~0.27182817E1, 0.123E2) = true +> (~0.27182817E1, 0.123E2) = false +== (~0.27182817E1, 0.123E2) = false +?= (~0.27182817E1, 0.123E2) = false +< (~0.27182817E1, 0.31415927E1) = true +> (~0.27182817E1, 0.31415927E1) = false +== (~0.27182817E1, 0.31415927E1) = false +?= (~0.27182817E1, 0.31415927E1) = false +< (~0.27182817E1, 0.27182817E1) = true +> (~0.27182817E1, 0.27182817E1) = false +== (~0.27182817E1, 0.27182817E1) = false +?= (~0.27182817E1, 0.27182817E1) = false +< (~0.27182817E1, 0.123E1) = true +> (~0.27182817E1, 0.123E1) = false +== (~0.27182817E1, 0.123E1) = false +?= (~0.27182817E1, 0.123E1) = false +< (~0.27182817E1, 0.123) = true +> (~0.27182817E1, 0.123) = false +== (~0.27182817E1, 0.123) = false +?= (~0.27182817E1, 0.123) = false +< (~0.27182817E1, 0.123E~2) = true +> (~0.27182817E1, 0.123E~2) = false +== (~0.27182817E1, 0.123E~2) = false +?= (~0.27182817E1, 0.123E~2) = false +< (~0.27182817E1, 0.11754944E~37) = true +> (~0.27182817E1, 0.11754944E~37) = false +== (~0.27182817E1, 0.11754944E~37) = false +?= (~0.27182817E1, 0.11754944E~37) = false +< (~0.27182817E1, 0.5877472E~38) = true +> (~0.27182817E1, 0.5877472E~38) = false +== (~0.27182817E1, 0.5877472E~38) = false +?= (~0.27182817E1, 0.5877472E~38) = false +< (~0.27182817E1, 0.1E~44) = true +> (~0.27182817E1, 0.1E~44) = false +== (~0.27182817E1, 0.1E~44) = false +?= (~0.27182817E1, 0.1E~44) = false +< (~0.27182817E1, 0.0) = true +> (~0.27182817E1, 0.0) = false +== (~0.27182817E1, 0.0) = false +?= (~0.27182817E1, 0.0) = false +< (~0.27182817E1, ~0.34028235E39) = false +> (~0.27182817E1, ~0.34028235E39) = true +== (~0.27182817E1, ~0.34028235E39) = false +?= (~0.27182817E1, ~0.34028235E39) = false +< (~0.27182817E1, ~0.17014117E39) = false +> (~0.27182817E1, ~0.17014117E39) = true +== (~0.27182817E1, ~0.17014117E39) = false +?= (~0.27182817E1, ~0.17014117E39) = false +< (~0.27182817E1, ~0.123E4) = false +> (~0.27182817E1, ~0.123E4) = true +== (~0.27182817E1, ~0.123E4) = false +?= (~0.27182817E1, ~0.123E4) = false +< (~0.27182817E1, ~0.123E2) = false +> (~0.27182817E1, ~0.123E2) = true +== (~0.27182817E1, ~0.123E2) = false +?= (~0.27182817E1, ~0.123E2) = false +< (~0.27182817E1, ~0.31415927E1) = false +> (~0.27182817E1, ~0.31415927E1) = true +== (~0.27182817E1, ~0.31415927E1) = false +?= (~0.27182817E1, ~0.31415927E1) = false +< (~0.27182817E1, ~0.27182817E1) = false +> (~0.27182817E1, ~0.27182817E1) = false +== (~0.27182817E1, ~0.27182817E1) = true +?= (~0.27182817E1, ~0.27182817E1) = true +< (~0.27182817E1, ~0.123E1) = true +> (~0.27182817E1, ~0.123E1) = false +== (~0.27182817E1, ~0.123E1) = false +?= (~0.27182817E1, ~0.123E1) = false +< (~0.27182817E1, ~0.123) = true +> (~0.27182817E1, ~0.123) = false +== (~0.27182817E1, ~0.123) = false +?= (~0.27182817E1, ~0.123) = false +< (~0.27182817E1, ~0.123E~2) = true +> (~0.27182817E1, ~0.123E~2) = false +== (~0.27182817E1, ~0.123E~2) = false +?= (~0.27182817E1, ~0.123E~2) = false +< (~0.27182817E1, ~0.11754944E~37) = true +> (~0.27182817E1, ~0.11754944E~37) = false +== (~0.27182817E1, ~0.11754944E~37) = false +?= (~0.27182817E1, ~0.11754944E~37) = false +< (~0.27182817E1, ~0.5877472E~38) = true +> (~0.27182817E1, ~0.5877472E~38) = false +== (~0.27182817E1, ~0.5877472E~38) = false +?= (~0.27182817E1, ~0.5877472E~38) = false +< (~0.27182817E1, ~0.1E~44) = true +> (~0.27182817E1, ~0.1E~44) = false +== (~0.27182817E1, ~0.1E~44) = false +?= (~0.27182817E1, ~0.1E~44) = false +< (~0.27182817E1, ~0.0) = true +> (~0.27182817E1, ~0.0) = false +== (~0.27182817E1, ~0.0) = false +?= (~0.27182817E1, ~0.0) = false +< (~0.123E1, 0.34028235E39) = true +> (~0.123E1, 0.34028235E39) = false +== (~0.123E1, 0.34028235E39) = false +?= (~0.123E1, 0.34028235E39) = false +< (~0.123E1, 0.17014117E39) = true +> (~0.123E1, 0.17014117E39) = false +== (~0.123E1, 0.17014117E39) = false +?= (~0.123E1, 0.17014117E39) = false +< (~0.123E1, 0.123E4) = true +> (~0.123E1, 0.123E4) = false +== (~0.123E1, 0.123E4) = false +?= (~0.123E1, 0.123E4) = false +< (~0.123E1, 0.123E2) = true +> (~0.123E1, 0.123E2) = false +== (~0.123E1, 0.123E2) = false +?= (~0.123E1, 0.123E2) = false +< (~0.123E1, 0.31415927E1) = true +> (~0.123E1, 0.31415927E1) = false +== (~0.123E1, 0.31415927E1) = false +?= (~0.123E1, 0.31415927E1) = false +< (~0.123E1, 0.27182817E1) = true +> (~0.123E1, 0.27182817E1) = false +== (~0.123E1, 0.27182817E1) = false +?= (~0.123E1, 0.27182817E1) = false +< (~0.123E1, 0.123E1) = true +> (~0.123E1, 0.123E1) = false +== (~0.123E1, 0.123E1) = false +?= (~0.123E1, 0.123E1) = false +< (~0.123E1, 0.123) = true +> (~0.123E1, 0.123) = false +== (~0.123E1, 0.123) = false +?= (~0.123E1, 0.123) = false +< (~0.123E1, 0.123E~2) = true +> (~0.123E1, 0.123E~2) = false +== (~0.123E1, 0.123E~2) = false +?= (~0.123E1, 0.123E~2) = false +< (~0.123E1, 0.11754944E~37) = true +> (~0.123E1, 0.11754944E~37) = false +== (~0.123E1, 0.11754944E~37) = false +?= (~0.123E1, 0.11754944E~37) = false +< (~0.123E1, 0.5877472E~38) = true +> (~0.123E1, 0.5877472E~38) = false +== (~0.123E1, 0.5877472E~38) = false +?= (~0.123E1, 0.5877472E~38) = false +< (~0.123E1, 0.1E~44) = true +> (~0.123E1, 0.1E~44) = false +== (~0.123E1, 0.1E~44) = false +?= (~0.123E1, 0.1E~44) = false +< (~0.123E1, 0.0) = true +> (~0.123E1, 0.0) = false +== (~0.123E1, 0.0) = false +?= (~0.123E1, 0.0) = false +< (~0.123E1, ~0.34028235E39) = false +> (~0.123E1, ~0.34028235E39) = true +== (~0.123E1, ~0.34028235E39) = false +?= (~0.123E1, ~0.34028235E39) = false +< (~0.123E1, ~0.17014117E39) = false +> (~0.123E1, ~0.17014117E39) = true +== (~0.123E1, ~0.17014117E39) = false +?= (~0.123E1, ~0.17014117E39) = false +< (~0.123E1, ~0.123E4) = false +> (~0.123E1, ~0.123E4) = true +== (~0.123E1, ~0.123E4) = false +?= (~0.123E1, ~0.123E4) = false +< (~0.123E1, ~0.123E2) = false +> (~0.123E1, ~0.123E2) = true +== (~0.123E1, ~0.123E2) = false +?= (~0.123E1, ~0.123E2) = false +< (~0.123E1, ~0.31415927E1) = false +> (~0.123E1, ~0.31415927E1) = true +== (~0.123E1, ~0.31415927E1) = false +?= (~0.123E1, ~0.31415927E1) = false +< (~0.123E1, ~0.27182817E1) = false +> (~0.123E1, ~0.27182817E1) = true +== (~0.123E1, ~0.27182817E1) = false +?= (~0.123E1, ~0.27182817E1) = false +< (~0.123E1, ~0.123E1) = false +> (~0.123E1, ~0.123E1) = false +== (~0.123E1, ~0.123E1) = true +?= (~0.123E1, ~0.123E1) = true +< (~0.123E1, ~0.123) = true +> (~0.123E1, ~0.123) = false +== (~0.123E1, ~0.123) = false +?= (~0.123E1, ~0.123) = false +< (~0.123E1, ~0.123E~2) = true +> (~0.123E1, ~0.123E~2) = false +== (~0.123E1, ~0.123E~2) = false +?= (~0.123E1, ~0.123E~2) = false +< (~0.123E1, ~0.11754944E~37) = true +> (~0.123E1, ~0.11754944E~37) = false +== (~0.123E1, ~0.11754944E~37) = false +?= (~0.123E1, ~0.11754944E~37) = false +< (~0.123E1, ~0.5877472E~38) = true +> (~0.123E1, ~0.5877472E~38) = false +== (~0.123E1, ~0.5877472E~38) = false +?= (~0.123E1, ~0.5877472E~38) = false +< (~0.123E1, ~0.1E~44) = true +> (~0.123E1, ~0.1E~44) = false +== (~0.123E1, ~0.1E~44) = false +?= (~0.123E1, ~0.1E~44) = false +< (~0.123E1, ~0.0) = true +> (~0.123E1, ~0.0) = false +== (~0.123E1, ~0.0) = false +?= (~0.123E1, ~0.0) = false +< (~0.123, 0.34028235E39) = true +> (~0.123, 0.34028235E39) = false +== (~0.123, 0.34028235E39) = false +?= (~0.123, 0.34028235E39) = false +< (~0.123, 0.17014117E39) = true +> (~0.123, 0.17014117E39) = false +== (~0.123, 0.17014117E39) = false +?= (~0.123, 0.17014117E39) = false +< (~0.123, 0.123E4) = true +> (~0.123, 0.123E4) = false +== (~0.123, 0.123E4) = false +?= (~0.123, 0.123E4) = false +< (~0.123, 0.123E2) = true +> (~0.123, 0.123E2) = false +== (~0.123, 0.123E2) = false +?= (~0.123, 0.123E2) = false +< (~0.123, 0.31415927E1) = true +> (~0.123, 0.31415927E1) = false +== (~0.123, 0.31415927E1) = false +?= (~0.123, 0.31415927E1) = false +< (~0.123, 0.27182817E1) = true +> (~0.123, 0.27182817E1) = false +== (~0.123, 0.27182817E1) = false +?= (~0.123, 0.27182817E1) = false +< (~0.123, 0.123E1) = true +> (~0.123, 0.123E1) = false +== (~0.123, 0.123E1) = false +?= (~0.123, 0.123E1) = false +< (~0.123, 0.123) = true +> (~0.123, 0.123) = false +== (~0.123, 0.123) = false +?= (~0.123, 0.123) = false +< (~0.123, 0.123E~2) = true +> (~0.123, 0.123E~2) = false +== (~0.123, 0.123E~2) = false +?= (~0.123, 0.123E~2) = false +< (~0.123, 0.11754944E~37) = true +> (~0.123, 0.11754944E~37) = false +== (~0.123, 0.11754944E~37) = false +?= (~0.123, 0.11754944E~37) = false +< (~0.123, 0.5877472E~38) = true +> (~0.123, 0.5877472E~38) = false +== (~0.123, 0.5877472E~38) = false +?= (~0.123, 0.5877472E~38) = false +< (~0.123, 0.1E~44) = true +> (~0.123, 0.1E~44) = false +== (~0.123, 0.1E~44) = false +?= (~0.123, 0.1E~44) = false +< (~0.123, 0.0) = true +> (~0.123, 0.0) = false +== (~0.123, 0.0) = false +?= (~0.123, 0.0) = false +< (~0.123, ~0.34028235E39) = false +> (~0.123, ~0.34028235E39) = true +== (~0.123, ~0.34028235E39) = false +?= (~0.123, ~0.34028235E39) = false +< (~0.123, ~0.17014117E39) = false +> (~0.123, ~0.17014117E39) = true +== (~0.123, ~0.17014117E39) = false +?= (~0.123, ~0.17014117E39) = false +< (~0.123, ~0.123E4) = false +> (~0.123, ~0.123E4) = true +== (~0.123, ~0.123E4) = false +?= (~0.123, ~0.123E4) = false +< (~0.123, ~0.123E2) = false +> (~0.123, ~0.123E2) = true +== (~0.123, ~0.123E2) = false +?= (~0.123, ~0.123E2) = false +< (~0.123, ~0.31415927E1) = false +> (~0.123, ~0.31415927E1) = true +== (~0.123, ~0.31415927E1) = false +?= (~0.123, ~0.31415927E1) = false +< (~0.123, ~0.27182817E1) = false +> (~0.123, ~0.27182817E1) = true +== (~0.123, ~0.27182817E1) = false +?= (~0.123, ~0.27182817E1) = false +< (~0.123, ~0.123E1) = false +> (~0.123, ~0.123E1) = true +== (~0.123, ~0.123E1) = false +?= (~0.123, ~0.123E1) = false +< (~0.123, ~0.123) = false +> (~0.123, ~0.123) = false +== (~0.123, ~0.123) = true +?= (~0.123, ~0.123) = true +< (~0.123, ~0.123E~2) = true +> (~0.123, ~0.123E~2) = false +== (~0.123, ~0.123E~2) = false +?= (~0.123, ~0.123E~2) = false +< (~0.123, ~0.11754944E~37) = true +> (~0.123, ~0.11754944E~37) = false +== (~0.123, ~0.11754944E~37) = false +?= (~0.123, ~0.11754944E~37) = false +< (~0.123, ~0.5877472E~38) = true +> (~0.123, ~0.5877472E~38) = false +== (~0.123, ~0.5877472E~38) = false +?= (~0.123, ~0.5877472E~38) = false +< (~0.123, ~0.1E~44) = true +> (~0.123, ~0.1E~44) = false +== (~0.123, ~0.1E~44) = false +?= (~0.123, ~0.1E~44) = false +< (~0.123, ~0.0) = true +> (~0.123, ~0.0) = false +== (~0.123, ~0.0) = false +?= (~0.123, ~0.0) = false +< (~0.123E~2, 0.34028235E39) = true +> (~0.123E~2, 0.34028235E39) = false +== (~0.123E~2, 0.34028235E39) = false +?= (~0.123E~2, 0.34028235E39) = false +< (~0.123E~2, 0.17014117E39) = true +> (~0.123E~2, 0.17014117E39) = false +== (~0.123E~2, 0.17014117E39) = false +?= (~0.123E~2, 0.17014117E39) = false +< (~0.123E~2, 0.123E4) = true +> (~0.123E~2, 0.123E4) = false +== (~0.123E~2, 0.123E4) = false +?= (~0.123E~2, 0.123E4) = false +< (~0.123E~2, 0.123E2) = true +> (~0.123E~2, 0.123E2) = false +== (~0.123E~2, 0.123E2) = false +?= (~0.123E~2, 0.123E2) = false +< (~0.123E~2, 0.31415927E1) = true +> (~0.123E~2, 0.31415927E1) = false +== (~0.123E~2, 0.31415927E1) = false +?= (~0.123E~2, 0.31415927E1) = false +< (~0.123E~2, 0.27182817E1) = true +> (~0.123E~2, 0.27182817E1) = false +== (~0.123E~2, 0.27182817E1) = false +?= (~0.123E~2, 0.27182817E1) = false +< (~0.123E~2, 0.123E1) = true +> (~0.123E~2, 0.123E1) = false +== (~0.123E~2, 0.123E1) = false +?= (~0.123E~2, 0.123E1) = false +< (~0.123E~2, 0.123) = true +> (~0.123E~2, 0.123) = false +== (~0.123E~2, 0.123) = false +?= (~0.123E~2, 0.123) = false +< (~0.123E~2, 0.123E~2) = true +> (~0.123E~2, 0.123E~2) = false +== (~0.123E~2, 0.123E~2) = false +?= (~0.123E~2, 0.123E~2) = false +< (~0.123E~2, 0.11754944E~37) = true +> (~0.123E~2, 0.11754944E~37) = false +== (~0.123E~2, 0.11754944E~37) = false +?= (~0.123E~2, 0.11754944E~37) = false +< (~0.123E~2, 0.5877472E~38) = true +> (~0.123E~2, 0.5877472E~38) = false +== (~0.123E~2, 0.5877472E~38) = false +?= (~0.123E~2, 0.5877472E~38) = false +< (~0.123E~2, 0.1E~44) = true +> (~0.123E~2, 0.1E~44) = false +== (~0.123E~2, 0.1E~44) = false +?= (~0.123E~2, 0.1E~44) = false +< (~0.123E~2, 0.0) = true +> (~0.123E~2, 0.0) = false +== (~0.123E~2, 0.0) = false +?= (~0.123E~2, 0.0) = false +< (~0.123E~2, ~0.34028235E39) = false +> (~0.123E~2, ~0.34028235E39) = true +== (~0.123E~2, ~0.34028235E39) = false +?= (~0.123E~2, ~0.34028235E39) = false +< (~0.123E~2, ~0.17014117E39) = false +> (~0.123E~2, ~0.17014117E39) = true +== (~0.123E~2, ~0.17014117E39) = false +?= (~0.123E~2, ~0.17014117E39) = false +< (~0.123E~2, ~0.123E4) = false +> (~0.123E~2, ~0.123E4) = true +== (~0.123E~2, ~0.123E4) = false +?= (~0.123E~2, ~0.123E4) = false +< (~0.123E~2, ~0.123E2) = false +> (~0.123E~2, ~0.123E2) = true +== (~0.123E~2, ~0.123E2) = false +?= (~0.123E~2, ~0.123E2) = false +< (~0.123E~2, ~0.31415927E1) = false +> (~0.123E~2, ~0.31415927E1) = true +== (~0.123E~2, ~0.31415927E1) = false +?= (~0.123E~2, ~0.31415927E1) = false +< (~0.123E~2, ~0.27182817E1) = false +> (~0.123E~2, ~0.27182817E1) = true +== (~0.123E~2, ~0.27182817E1) = false +?= (~0.123E~2, ~0.27182817E1) = false +< (~0.123E~2, ~0.123E1) = false +> (~0.123E~2, ~0.123E1) = true +== (~0.123E~2, ~0.123E1) = false +?= (~0.123E~2, ~0.123E1) = false +< (~0.123E~2, ~0.123) = false +> (~0.123E~2, ~0.123) = true +== (~0.123E~2, ~0.123) = false +?= (~0.123E~2, ~0.123) = false +< (~0.123E~2, ~0.123E~2) = false +> (~0.123E~2, ~0.123E~2) = false +== (~0.123E~2, ~0.123E~2) = true +?= (~0.123E~2, ~0.123E~2) = true +< (~0.123E~2, ~0.11754944E~37) = true +> (~0.123E~2, ~0.11754944E~37) = false +== (~0.123E~2, ~0.11754944E~37) = false +?= (~0.123E~2, ~0.11754944E~37) = false +< (~0.123E~2, ~0.5877472E~38) = true +> (~0.123E~2, ~0.5877472E~38) = false +== (~0.123E~2, ~0.5877472E~38) = false +?= (~0.123E~2, ~0.5877472E~38) = false +< (~0.123E~2, ~0.1E~44) = true +> (~0.123E~2, ~0.1E~44) = false +== (~0.123E~2, ~0.1E~44) = false +?= (~0.123E~2, ~0.1E~44) = false +< (~0.123E~2, ~0.0) = true +> (~0.123E~2, ~0.0) = false +== (~0.123E~2, ~0.0) = false +?= (~0.123E~2, ~0.0) = false +< (~0.11754944E~37, 0.34028235E39) = true +> (~0.11754944E~37, 0.34028235E39) = false +== (~0.11754944E~37, 0.34028235E39) = false +?= (~0.11754944E~37, 0.34028235E39) = false +< (~0.11754944E~37, 0.17014117E39) = true +> (~0.11754944E~37, 0.17014117E39) = false +== (~0.11754944E~37, 0.17014117E39) = false +?= (~0.11754944E~37, 0.17014117E39) = false +< (~0.11754944E~37, 0.123E4) = true +> (~0.11754944E~37, 0.123E4) = false +== (~0.11754944E~37, 0.123E4) = false +?= (~0.11754944E~37, 0.123E4) = false +< (~0.11754944E~37, 0.123E2) = true +> (~0.11754944E~37, 0.123E2) = false +== (~0.11754944E~37, 0.123E2) = false +?= (~0.11754944E~37, 0.123E2) = false +< (~0.11754944E~37, 0.31415927E1) = true +> (~0.11754944E~37, 0.31415927E1) = false +== (~0.11754944E~37, 0.31415927E1) = false +?= (~0.11754944E~37, 0.31415927E1) = false +< (~0.11754944E~37, 0.27182817E1) = true +> (~0.11754944E~37, 0.27182817E1) = false +== (~0.11754944E~37, 0.27182817E1) = false +?= (~0.11754944E~37, 0.27182817E1) = false +< (~0.11754944E~37, 0.123E1) = true +> (~0.11754944E~37, 0.123E1) = false +== (~0.11754944E~37, 0.123E1) = false +?= (~0.11754944E~37, 0.123E1) = false +< (~0.11754944E~37, 0.123) = true +> (~0.11754944E~37, 0.123) = false +== (~0.11754944E~37, 0.123) = false +?= (~0.11754944E~37, 0.123) = false +< (~0.11754944E~37, 0.123E~2) = true +> (~0.11754944E~37, 0.123E~2) = false +== (~0.11754944E~37, 0.123E~2) = false +?= (~0.11754944E~37, 0.123E~2) = false +< (~0.11754944E~37, 0.11754944E~37) = true +> (~0.11754944E~37, 0.11754944E~37) = false +== (~0.11754944E~37, 0.11754944E~37) = false +?= (~0.11754944E~37, 0.11754944E~37) = false +< (~0.11754944E~37, 0.5877472E~38) = true +> (~0.11754944E~37, 0.5877472E~38) = false +== (~0.11754944E~37, 0.5877472E~38) = false +?= (~0.11754944E~37, 0.5877472E~38) = false +< (~0.11754944E~37, 0.1E~44) = true +> (~0.11754944E~37, 0.1E~44) = false +== (~0.11754944E~37, 0.1E~44) = false +?= (~0.11754944E~37, 0.1E~44) = false +< (~0.11754944E~37, 0.0) = true +> (~0.11754944E~37, 0.0) = false +== (~0.11754944E~37, 0.0) = false +?= (~0.11754944E~37, 0.0) = false +< (~0.11754944E~37, ~0.34028235E39) = false +> (~0.11754944E~37, ~0.34028235E39) = true +== (~0.11754944E~37, ~0.34028235E39) = false +?= (~0.11754944E~37, ~0.34028235E39) = false +< (~0.11754944E~37, ~0.17014117E39) = false +> (~0.11754944E~37, ~0.17014117E39) = true +== (~0.11754944E~37, ~0.17014117E39) = false +?= (~0.11754944E~37, ~0.17014117E39) = false +< (~0.11754944E~37, ~0.123E4) = false +> (~0.11754944E~37, ~0.123E4) = true +== (~0.11754944E~37, ~0.123E4) = false +?= (~0.11754944E~37, ~0.123E4) = false +< (~0.11754944E~37, ~0.123E2) = false +> (~0.11754944E~37, ~0.123E2) = true +== (~0.11754944E~37, ~0.123E2) = false +?= (~0.11754944E~37, ~0.123E2) = false +< (~0.11754944E~37, ~0.31415927E1) = false +> (~0.11754944E~37, ~0.31415927E1) = true +== (~0.11754944E~37, ~0.31415927E1) = false +?= (~0.11754944E~37, ~0.31415927E1) = false +< (~0.11754944E~37, ~0.27182817E1) = false +> (~0.11754944E~37, ~0.27182817E1) = true +== (~0.11754944E~37, ~0.27182817E1) = false +?= (~0.11754944E~37, ~0.27182817E1) = false +< (~0.11754944E~37, ~0.123E1) = false +> (~0.11754944E~37, ~0.123E1) = true +== (~0.11754944E~37, ~0.123E1) = false +?= (~0.11754944E~37, ~0.123E1) = false +< (~0.11754944E~37, ~0.123) = false +> (~0.11754944E~37, ~0.123) = true +== (~0.11754944E~37, ~0.123) = false +?= (~0.11754944E~37, ~0.123) = false +< (~0.11754944E~37, ~0.123E~2) = false +> (~0.11754944E~37, ~0.123E~2) = true +== (~0.11754944E~37, ~0.123E~2) = false +?= (~0.11754944E~37, ~0.123E~2) = false +< (~0.11754944E~37, ~0.11754944E~37) = false +> (~0.11754944E~37, ~0.11754944E~37) = false +== (~0.11754944E~37, ~0.11754944E~37) = true +?= (~0.11754944E~37, ~0.11754944E~37) = true +< (~0.11754944E~37, ~0.5877472E~38) = true +> (~0.11754944E~37, ~0.5877472E~38) = false +== (~0.11754944E~37, ~0.5877472E~38) = false +?= (~0.11754944E~37, ~0.5877472E~38) = false +< (~0.11754944E~37, ~0.1E~44) = true +> (~0.11754944E~37, ~0.1E~44) = false +== (~0.11754944E~37, ~0.1E~44) = false +?= (~0.11754944E~37, ~0.1E~44) = false +< (~0.11754944E~37, ~0.0) = true +> (~0.11754944E~37, ~0.0) = false +== (~0.11754944E~37, ~0.0) = false +?= (~0.11754944E~37, ~0.0) = false +< (~0.5877472E~38, 0.34028235E39) = true +> (~0.5877472E~38, 0.34028235E39) = false +== (~0.5877472E~38, 0.34028235E39) = false +?= (~0.5877472E~38, 0.34028235E39) = false +< (~0.5877472E~38, 0.17014117E39) = true +> (~0.5877472E~38, 0.17014117E39) = false +== (~0.5877472E~38, 0.17014117E39) = false +?= (~0.5877472E~38, 0.17014117E39) = false +< (~0.5877472E~38, 0.123E4) = true +> (~0.5877472E~38, 0.123E4) = false +== (~0.5877472E~38, 0.123E4) = false +?= (~0.5877472E~38, 0.123E4) = false +< (~0.5877472E~38, 0.123E2) = true +> (~0.5877472E~38, 0.123E2) = false +== (~0.5877472E~38, 0.123E2) = false +?= (~0.5877472E~38, 0.123E2) = false +< (~0.5877472E~38, 0.31415927E1) = true +> (~0.5877472E~38, 0.31415927E1) = false +== (~0.5877472E~38, 0.31415927E1) = false +?= (~0.5877472E~38, 0.31415927E1) = false +< (~0.5877472E~38, 0.27182817E1) = true +> (~0.5877472E~38, 0.27182817E1) = false +== (~0.5877472E~38, 0.27182817E1) = false +?= (~0.5877472E~38, 0.27182817E1) = false +< (~0.5877472E~38, 0.123E1) = true +> (~0.5877472E~38, 0.123E1) = false +== (~0.5877472E~38, 0.123E1) = false +?= (~0.5877472E~38, 0.123E1) = false +< (~0.5877472E~38, 0.123) = true +> (~0.5877472E~38, 0.123) = false +== (~0.5877472E~38, 0.123) = false +?= (~0.5877472E~38, 0.123) = false +< (~0.5877472E~38, 0.123E~2) = true +> (~0.5877472E~38, 0.123E~2) = false +== (~0.5877472E~38, 0.123E~2) = false +?= (~0.5877472E~38, 0.123E~2) = false +< (~0.5877472E~38, 0.11754944E~37) = true +> (~0.5877472E~38, 0.11754944E~37) = false +== (~0.5877472E~38, 0.11754944E~37) = false +?= (~0.5877472E~38, 0.11754944E~37) = false +< (~0.5877472E~38, 0.5877472E~38) = true +> (~0.5877472E~38, 0.5877472E~38) = false +== (~0.5877472E~38, 0.5877472E~38) = false +?= (~0.5877472E~38, 0.5877472E~38) = false +< (~0.5877472E~38, 0.1E~44) = true +> (~0.5877472E~38, 0.1E~44) = false +== (~0.5877472E~38, 0.1E~44) = false +?= (~0.5877472E~38, 0.1E~44) = false +< (~0.5877472E~38, 0.0) = true +> (~0.5877472E~38, 0.0) = false +== (~0.5877472E~38, 0.0) = false +?= (~0.5877472E~38, 0.0) = false +< (~0.5877472E~38, ~0.34028235E39) = false +> (~0.5877472E~38, ~0.34028235E39) = true +== (~0.5877472E~38, ~0.34028235E39) = false +?= (~0.5877472E~38, ~0.34028235E39) = false +< (~0.5877472E~38, ~0.17014117E39) = false +> (~0.5877472E~38, ~0.17014117E39) = true +== (~0.5877472E~38, ~0.17014117E39) = false +?= (~0.5877472E~38, ~0.17014117E39) = false +< (~0.5877472E~38, ~0.123E4) = false +> (~0.5877472E~38, ~0.123E4) = true +== (~0.5877472E~38, ~0.123E4) = false +?= (~0.5877472E~38, ~0.123E4) = false +< (~0.5877472E~38, ~0.123E2) = false +> (~0.5877472E~38, ~0.123E2) = true +== (~0.5877472E~38, ~0.123E2) = false +?= (~0.5877472E~38, ~0.123E2) = false +< (~0.5877472E~38, ~0.31415927E1) = false +> (~0.5877472E~38, ~0.31415927E1) = true +== (~0.5877472E~38, ~0.31415927E1) = false +?= (~0.5877472E~38, ~0.31415927E1) = false +< (~0.5877472E~38, ~0.27182817E1) = false +> (~0.5877472E~38, ~0.27182817E1) = true +== (~0.5877472E~38, ~0.27182817E1) = false +?= (~0.5877472E~38, ~0.27182817E1) = false +< (~0.5877472E~38, ~0.123E1) = false +> (~0.5877472E~38, ~0.123E1) = true +== (~0.5877472E~38, ~0.123E1) = false +?= (~0.5877472E~38, ~0.123E1) = false +< (~0.5877472E~38, ~0.123) = false +> (~0.5877472E~38, ~0.123) = true +== (~0.5877472E~38, ~0.123) = false +?= (~0.5877472E~38, ~0.123) = false +< (~0.5877472E~38, ~0.123E~2) = false +> (~0.5877472E~38, ~0.123E~2) = true +== (~0.5877472E~38, ~0.123E~2) = false +?= (~0.5877472E~38, ~0.123E~2) = false +< (~0.5877472E~38, ~0.11754944E~37) = false +> (~0.5877472E~38, ~0.11754944E~37) = true +== (~0.5877472E~38, ~0.11754944E~37) = false +?= (~0.5877472E~38, ~0.11754944E~37) = false +< (~0.5877472E~38, ~0.5877472E~38) = false +> (~0.5877472E~38, ~0.5877472E~38) = false +== (~0.5877472E~38, ~0.5877472E~38) = true +?= (~0.5877472E~38, ~0.5877472E~38) = true +< (~0.5877472E~38, ~0.1E~44) = true +> (~0.5877472E~38, ~0.1E~44) = false +== (~0.5877472E~38, ~0.1E~44) = false +?= (~0.5877472E~38, ~0.1E~44) = false +< (~0.5877472E~38, ~0.0) = true +> (~0.5877472E~38, ~0.0) = false +== (~0.5877472E~38, ~0.0) = false +?= (~0.5877472E~38, ~0.0) = false +< (~0.1E~44, 0.34028235E39) = true +> (~0.1E~44, 0.34028235E39) = false +== (~0.1E~44, 0.34028235E39) = false +?= (~0.1E~44, 0.34028235E39) = false +< (~0.1E~44, 0.17014117E39) = true +> (~0.1E~44, 0.17014117E39) = false +== (~0.1E~44, 0.17014117E39) = false +?= (~0.1E~44, 0.17014117E39) = false +< (~0.1E~44, 0.123E4) = true +> (~0.1E~44, 0.123E4) = false +== (~0.1E~44, 0.123E4) = false +?= (~0.1E~44, 0.123E4) = false +< (~0.1E~44, 0.123E2) = true +> (~0.1E~44, 0.123E2) = false +== (~0.1E~44, 0.123E2) = false +?= (~0.1E~44, 0.123E2) = false +< (~0.1E~44, 0.31415927E1) = true +> (~0.1E~44, 0.31415927E1) = false +== (~0.1E~44, 0.31415927E1) = false +?= (~0.1E~44, 0.31415927E1) = false +< (~0.1E~44, 0.27182817E1) = true +> (~0.1E~44, 0.27182817E1) = false +== (~0.1E~44, 0.27182817E1) = false +?= (~0.1E~44, 0.27182817E1) = false +< (~0.1E~44, 0.123E1) = true +> (~0.1E~44, 0.123E1) = false +== (~0.1E~44, 0.123E1) = false +?= (~0.1E~44, 0.123E1) = false +< (~0.1E~44, 0.123) = true +> (~0.1E~44, 0.123) = false +== (~0.1E~44, 0.123) = false +?= (~0.1E~44, 0.123) = false +< (~0.1E~44, 0.123E~2) = true +> (~0.1E~44, 0.123E~2) = false +== (~0.1E~44, 0.123E~2) = false +?= (~0.1E~44, 0.123E~2) = false +< (~0.1E~44, 0.11754944E~37) = true +> (~0.1E~44, 0.11754944E~37) = false +== (~0.1E~44, 0.11754944E~37) = false +?= (~0.1E~44, 0.11754944E~37) = false +< (~0.1E~44, 0.5877472E~38) = true +> (~0.1E~44, 0.5877472E~38) = false +== (~0.1E~44, 0.5877472E~38) = false +?= (~0.1E~44, 0.5877472E~38) = false +< (~0.1E~44, 0.1E~44) = true +> (~0.1E~44, 0.1E~44) = false +== (~0.1E~44, 0.1E~44) = false +?= (~0.1E~44, 0.1E~44) = false +< (~0.1E~44, 0.0) = true +> (~0.1E~44, 0.0) = false +== (~0.1E~44, 0.0) = false +?= (~0.1E~44, 0.0) = false +< (~0.1E~44, ~0.34028235E39) = false +> (~0.1E~44, ~0.34028235E39) = true +== (~0.1E~44, ~0.34028235E39) = false +?= (~0.1E~44, ~0.34028235E39) = false +< (~0.1E~44, ~0.17014117E39) = false +> (~0.1E~44, ~0.17014117E39) = true +== (~0.1E~44, ~0.17014117E39) = false +?= (~0.1E~44, ~0.17014117E39) = false +< (~0.1E~44, ~0.123E4) = false +> (~0.1E~44, ~0.123E4) = true +== (~0.1E~44, ~0.123E4) = false +?= (~0.1E~44, ~0.123E4) = false +< (~0.1E~44, ~0.123E2) = false +> (~0.1E~44, ~0.123E2) = true +== (~0.1E~44, ~0.123E2) = false +?= (~0.1E~44, ~0.123E2) = false +< (~0.1E~44, ~0.31415927E1) = false +> (~0.1E~44, ~0.31415927E1) = true +== (~0.1E~44, ~0.31415927E1) = false +?= (~0.1E~44, ~0.31415927E1) = false +< (~0.1E~44, ~0.27182817E1) = false +> (~0.1E~44, ~0.27182817E1) = true +== (~0.1E~44, ~0.27182817E1) = false +?= (~0.1E~44, ~0.27182817E1) = false +< (~0.1E~44, ~0.123E1) = false +> (~0.1E~44, ~0.123E1) = true +== (~0.1E~44, ~0.123E1) = false +?= (~0.1E~44, ~0.123E1) = false +< (~0.1E~44, ~0.123) = false +> (~0.1E~44, ~0.123) = true +== (~0.1E~44, ~0.123) = false +?= (~0.1E~44, ~0.123) = false +< (~0.1E~44, ~0.123E~2) = false +> (~0.1E~44, ~0.123E~2) = true +== (~0.1E~44, ~0.123E~2) = false +?= (~0.1E~44, ~0.123E~2) = false +< (~0.1E~44, ~0.11754944E~37) = false +> (~0.1E~44, ~0.11754944E~37) = true +== (~0.1E~44, ~0.11754944E~37) = false +?= (~0.1E~44, ~0.11754944E~37) = false +< (~0.1E~44, ~0.5877472E~38) = false +> (~0.1E~44, ~0.5877472E~38) = true +== (~0.1E~44, ~0.5877472E~38) = false +?= (~0.1E~44, ~0.5877472E~38) = false +< (~0.1E~44, ~0.1E~44) = false +> (~0.1E~44, ~0.1E~44) = false +== (~0.1E~44, ~0.1E~44) = true +?= (~0.1E~44, ~0.1E~44) = true +< (~0.1E~44, ~0.0) = true +> (~0.1E~44, ~0.0) = false +== (~0.1E~44, ~0.0) = false +?= (~0.1E~44, ~0.0) = false +< (~0.0, 0.34028235E39) = true +> (~0.0, 0.34028235E39) = false +== (~0.0, 0.34028235E39) = false +?= (~0.0, 0.34028235E39) = false +< (~0.0, 0.17014117E39) = true +> (~0.0, 0.17014117E39) = false +== (~0.0, 0.17014117E39) = false +?= (~0.0, 0.17014117E39) = false +< (~0.0, 0.123E4) = true +> (~0.0, 0.123E4) = false +== (~0.0, 0.123E4) = false +?= (~0.0, 0.123E4) = false +< (~0.0, 0.123E2) = true +> (~0.0, 0.123E2) = false +== (~0.0, 0.123E2) = false +?= (~0.0, 0.123E2) = false +< (~0.0, 0.31415927E1) = true +> (~0.0, 0.31415927E1) = false +== (~0.0, 0.31415927E1) = false +?= (~0.0, 0.31415927E1) = false +< (~0.0, 0.27182817E1) = true +> (~0.0, 0.27182817E1) = false +== (~0.0, 0.27182817E1) = false +?= (~0.0, 0.27182817E1) = false +< (~0.0, 0.123E1) = true +> (~0.0, 0.123E1) = false +== (~0.0, 0.123E1) = false +?= (~0.0, 0.123E1) = false +< (~0.0, 0.123) = true +> (~0.0, 0.123) = false +== (~0.0, 0.123) = false +?= (~0.0, 0.123) = false +< (~0.0, 0.123E~2) = true +> (~0.0, 0.123E~2) = false +== (~0.0, 0.123E~2) = false +?= (~0.0, 0.123E~2) = false +< (~0.0, 0.11754944E~37) = true +> (~0.0, 0.11754944E~37) = false +== (~0.0, 0.11754944E~37) = false +?= (~0.0, 0.11754944E~37) = false +< (~0.0, 0.5877472E~38) = true +> (~0.0, 0.5877472E~38) = false +== (~0.0, 0.5877472E~38) = false +?= (~0.0, 0.5877472E~38) = false +< (~0.0, 0.1E~44) = true +> (~0.0, 0.1E~44) = false +== (~0.0, 0.1E~44) = false +?= (~0.0, 0.1E~44) = false +< (~0.0, 0.0) = false +> (~0.0, 0.0) = false +== (~0.0, 0.0) = true +?= (~0.0, 0.0) = true +< (~0.0, ~0.34028235E39) = false +> (~0.0, ~0.34028235E39) = true +== (~0.0, ~0.34028235E39) = false +?= (~0.0, ~0.34028235E39) = false +< (~0.0, ~0.17014117E39) = false +> (~0.0, ~0.17014117E39) = true +== (~0.0, ~0.17014117E39) = false +?= (~0.0, ~0.17014117E39) = false +< (~0.0, ~0.123E4) = false +> (~0.0, ~0.123E4) = true +== (~0.0, ~0.123E4) = false +?= (~0.0, ~0.123E4) = false +< (~0.0, ~0.123E2) = false +> (~0.0, ~0.123E2) = true +== (~0.0, ~0.123E2) = false +?= (~0.0, ~0.123E2) = false +< (~0.0, ~0.31415927E1) = false +> (~0.0, ~0.31415927E1) = true +== (~0.0, ~0.31415927E1) = false +?= (~0.0, ~0.31415927E1) = false +< (~0.0, ~0.27182817E1) = false +> (~0.0, ~0.27182817E1) = true +== (~0.0, ~0.27182817E1) = false +?= (~0.0, ~0.27182817E1) = false +< (~0.0, ~0.123E1) = false +> (~0.0, ~0.123E1) = true +== (~0.0, ~0.123E1) = false +?= (~0.0, ~0.123E1) = false +< (~0.0, ~0.123) = false +> (~0.0, ~0.123) = true +== (~0.0, ~0.123) = false +?= (~0.0, ~0.123) = false +< (~0.0, ~0.123E~2) = false +> (~0.0, ~0.123E~2) = true +== (~0.0, ~0.123E~2) = false +?= (~0.0, ~0.123E~2) = false +< (~0.0, ~0.11754944E~37) = false +> (~0.0, ~0.11754944E~37) = true +== (~0.0, ~0.11754944E~37) = false +?= (~0.0, ~0.11754944E~37) = false +< (~0.0, ~0.5877472E~38) = false +> (~0.0, ~0.5877472E~38) = true +== (~0.0, ~0.5877472E~38) = false +?= (~0.0, ~0.5877472E~38) = false +< (~0.0, ~0.1E~44) = false +> (~0.0, ~0.1E~44) = true +== (~0.0, ~0.1E~44) = false +?= (~0.0, ~0.1E~44) = false +< (~0.0, ~0.0) = false +> (~0.0, ~0.0) = false +== (~0.0, ~0.0) = true +?= (~0.0, ~0.0) = true + +Testing compare, compareReal +compare (0.34028235E39, 0.34028235E39) = EQUAL +compareReal (0.34028235E39, 0.34028235E39) = EQUAL +compare (0.34028235E39, 0.17014117E39) = GREATER +compareReal (0.34028235E39, 0.17014117E39) = GREATER +compare (0.34028235E39, 0.123E4) = GREATER +compareReal (0.34028235E39, 0.123E4) = GREATER +compare (0.34028235E39, 0.123E2) = GREATER +compareReal (0.34028235E39, 0.123E2) = GREATER +compare (0.34028235E39, 0.31415927E1) = GREATER +compareReal (0.34028235E39, 0.31415927E1) = GREATER +compare (0.34028235E39, 0.27182817E1) = GREATER +compareReal (0.34028235E39, 0.27182817E1) = GREATER +compare (0.34028235E39, 0.123E1) = GREATER +compareReal (0.34028235E39, 0.123E1) = GREATER +compare (0.34028235E39, 0.123) = GREATER +compareReal (0.34028235E39, 0.123) = GREATER +compare (0.34028235E39, 0.123E~2) = GREATER +compareReal (0.34028235E39, 0.123E~2) = GREATER +compare (0.34028235E39, 0.11754944E~37) = GREATER +compareReal (0.34028235E39, 0.11754944E~37) = GREATER +compare (0.34028235E39, 0.5877472E~38) = GREATER +compareReal (0.34028235E39, 0.5877472E~38) = GREATER +compare (0.34028235E39, 0.1E~44) = GREATER +compareReal (0.34028235E39, 0.1E~44) = GREATER +compare (0.34028235E39, 0.0) = GREATER +compareReal (0.34028235E39, 0.0) = GREATER +compare (0.34028235E39, ~0.34028235E39) = GREATER +compareReal (0.34028235E39, ~0.34028235E39) = GREATER +compare (0.34028235E39, ~0.17014117E39) = GREATER +compareReal (0.34028235E39, ~0.17014117E39) = GREATER +compare (0.34028235E39, ~0.123E4) = GREATER +compareReal (0.34028235E39, ~0.123E4) = GREATER +compare (0.34028235E39, ~0.123E2) = GREATER +compareReal (0.34028235E39, ~0.123E2) = GREATER +compare (0.34028235E39, ~0.31415927E1) = GREATER +compareReal (0.34028235E39, ~0.31415927E1) = GREATER +compare (0.34028235E39, ~0.27182817E1) = GREATER +compareReal (0.34028235E39, ~0.27182817E1) = GREATER +compare (0.34028235E39, ~0.123E1) = GREATER +compareReal (0.34028235E39, ~0.123E1) = GREATER +compare (0.34028235E39, ~0.123) = GREATER +compareReal (0.34028235E39, ~0.123) = GREATER +compare (0.34028235E39, ~0.123E~2) = GREATER +compareReal (0.34028235E39, ~0.123E~2) = GREATER +compare (0.34028235E39, ~0.11754944E~37) = GREATER +compareReal (0.34028235E39, ~0.11754944E~37) = GREATER +compare (0.34028235E39, ~0.5877472E~38) = GREATER +compareReal (0.34028235E39, ~0.5877472E~38) = GREATER +compare (0.34028235E39, ~0.1E~44) = GREATER +compareReal (0.34028235E39, ~0.1E~44) = GREATER +compare (0.34028235E39, ~0.0) = GREATER +compareReal (0.34028235E39, ~0.0) = GREATER +compare (0.17014117E39, 0.34028235E39) = LESS +compareReal (0.17014117E39, 0.34028235E39) = LESS +compare (0.17014117E39, 0.17014117E39) = EQUAL +compareReal (0.17014117E39, 0.17014117E39) = EQUAL +compare (0.17014117E39, 0.123E4) = GREATER +compareReal (0.17014117E39, 0.123E4) = GREATER +compare (0.17014117E39, 0.123E2) = GREATER +compareReal (0.17014117E39, 0.123E2) = GREATER +compare (0.17014117E39, 0.31415927E1) = GREATER +compareReal (0.17014117E39, 0.31415927E1) = GREATER +compare (0.17014117E39, 0.27182817E1) = GREATER +compareReal (0.17014117E39, 0.27182817E1) = GREATER +compare (0.17014117E39, 0.123E1) = GREATER +compareReal (0.17014117E39, 0.123E1) = GREATER +compare (0.17014117E39, 0.123) = GREATER +compareReal (0.17014117E39, 0.123) = GREATER +compare (0.17014117E39, 0.123E~2) = GREATER +compareReal (0.17014117E39, 0.123E~2) = GREATER +compare (0.17014117E39, 0.11754944E~37) = GREATER +compareReal (0.17014117E39, 0.11754944E~37) = GREATER +compare (0.17014117E39, 0.5877472E~38) = GREATER +compareReal (0.17014117E39, 0.5877472E~38) = GREATER +compare (0.17014117E39, 0.1E~44) = GREATER +compareReal (0.17014117E39, 0.1E~44) = GREATER +compare (0.17014117E39, 0.0) = GREATER +compareReal (0.17014117E39, 0.0) = GREATER +compare (0.17014117E39, ~0.34028235E39) = GREATER +compareReal (0.17014117E39, ~0.34028235E39) = GREATER +compare (0.17014117E39, ~0.17014117E39) = GREATER +compareReal (0.17014117E39, ~0.17014117E39) = GREATER +compare (0.17014117E39, ~0.123E4) = GREATER +compareReal (0.17014117E39, ~0.123E4) = GREATER +compare (0.17014117E39, ~0.123E2) = GREATER +compareReal (0.17014117E39, ~0.123E2) = GREATER +compare (0.17014117E39, ~0.31415927E1) = GREATER +compareReal (0.17014117E39, ~0.31415927E1) = GREATER +compare (0.17014117E39, ~0.27182817E1) = GREATER +compareReal (0.17014117E39, ~0.27182817E1) = GREATER +compare (0.17014117E39, ~0.123E1) = GREATER +compareReal (0.17014117E39, ~0.123E1) = GREATER +compare (0.17014117E39, ~0.123) = GREATER +compareReal (0.17014117E39, ~0.123) = GREATER +compare (0.17014117E39, ~0.123E~2) = GREATER +compareReal (0.17014117E39, ~0.123E~2) = GREATER +compare (0.17014117E39, ~0.11754944E~37) = GREATER +compareReal (0.17014117E39, ~0.11754944E~37) = GREATER +compare (0.17014117E39, ~0.5877472E~38) = GREATER +compareReal (0.17014117E39, ~0.5877472E~38) = GREATER +compare (0.17014117E39, ~0.1E~44) = GREATER +compareReal (0.17014117E39, ~0.1E~44) = GREATER +compare (0.17014117E39, ~0.0) = GREATER +compareReal (0.17014117E39, ~0.0) = GREATER +compare (0.123E4, 0.34028235E39) = LESS +compareReal (0.123E4, 0.34028235E39) = LESS +compare (0.123E4, 0.17014117E39) = LESS +compareReal (0.123E4, 0.17014117E39) = LESS +compare (0.123E4, 0.123E4) = EQUAL +compareReal (0.123E4, 0.123E4) = EQUAL +compare (0.123E4, 0.123E2) = GREATER +compareReal (0.123E4, 0.123E2) = GREATER +compare (0.123E4, 0.31415927E1) = GREATER +compareReal (0.123E4, 0.31415927E1) = GREATER +compare (0.123E4, 0.27182817E1) = GREATER +compareReal (0.123E4, 0.27182817E1) = GREATER +compare (0.123E4, 0.123E1) = GREATER +compareReal (0.123E4, 0.123E1) = GREATER +compare (0.123E4, 0.123) = GREATER +compareReal (0.123E4, 0.123) = GREATER +compare (0.123E4, 0.123E~2) = GREATER +compareReal (0.123E4, 0.123E~2) = GREATER +compare (0.123E4, 0.11754944E~37) = GREATER +compareReal (0.123E4, 0.11754944E~37) = GREATER +compare (0.123E4, 0.5877472E~38) = GREATER +compareReal (0.123E4, 0.5877472E~38) = GREATER +compare (0.123E4, 0.1E~44) = GREATER +compareReal (0.123E4, 0.1E~44) = GREATER +compare (0.123E4, 0.0) = GREATER +compareReal (0.123E4, 0.0) = GREATER +compare (0.123E4, ~0.34028235E39) = GREATER +compareReal (0.123E4, ~0.34028235E39) = GREATER +compare (0.123E4, ~0.17014117E39) = GREATER +compareReal (0.123E4, ~0.17014117E39) = GREATER +compare (0.123E4, ~0.123E4) = GREATER +compareReal (0.123E4, ~0.123E4) = GREATER +compare (0.123E4, ~0.123E2) = GREATER +compareReal (0.123E4, ~0.123E2) = GREATER +compare (0.123E4, ~0.31415927E1) = GREATER +compareReal (0.123E4, ~0.31415927E1) = GREATER +compare (0.123E4, ~0.27182817E1) = GREATER +compareReal (0.123E4, ~0.27182817E1) = GREATER +compare (0.123E4, ~0.123E1) = GREATER +compareReal (0.123E4, ~0.123E1) = GREATER +compare (0.123E4, ~0.123) = GREATER +compareReal (0.123E4, ~0.123) = GREATER +compare (0.123E4, ~0.123E~2) = GREATER +compareReal (0.123E4, ~0.123E~2) = GREATER +compare (0.123E4, ~0.11754944E~37) = GREATER +compareReal (0.123E4, ~0.11754944E~37) = GREATER +compare (0.123E4, ~0.5877472E~38) = GREATER +compareReal (0.123E4, ~0.5877472E~38) = GREATER +compare (0.123E4, ~0.1E~44) = GREATER +compareReal (0.123E4, ~0.1E~44) = GREATER +compare (0.123E4, ~0.0) = GREATER +compareReal (0.123E4, ~0.0) = GREATER +compare (0.123E2, 0.34028235E39) = LESS +compareReal (0.123E2, 0.34028235E39) = LESS +compare (0.123E2, 0.17014117E39) = LESS +compareReal (0.123E2, 0.17014117E39) = LESS +compare (0.123E2, 0.123E4) = LESS +compareReal (0.123E2, 0.123E4) = LESS +compare (0.123E2, 0.123E2) = EQUAL +compareReal (0.123E2, 0.123E2) = EQUAL +compare (0.123E2, 0.31415927E1) = GREATER +compareReal (0.123E2, 0.31415927E1) = GREATER +compare (0.123E2, 0.27182817E1) = GREATER +compareReal (0.123E2, 0.27182817E1) = GREATER +compare (0.123E2, 0.123E1) = GREATER +compareReal (0.123E2, 0.123E1) = GREATER +compare (0.123E2, 0.123) = GREATER +compareReal (0.123E2, 0.123) = GREATER +compare (0.123E2, 0.123E~2) = GREATER +compareReal (0.123E2, 0.123E~2) = GREATER +compare (0.123E2, 0.11754944E~37) = GREATER +compareReal (0.123E2, 0.11754944E~37) = GREATER +compare (0.123E2, 0.5877472E~38) = GREATER +compareReal (0.123E2, 0.5877472E~38) = GREATER +compare (0.123E2, 0.1E~44) = GREATER +compareReal (0.123E2, 0.1E~44) = GREATER +compare (0.123E2, 0.0) = GREATER +compareReal (0.123E2, 0.0) = GREATER +compare (0.123E2, ~0.34028235E39) = GREATER +compareReal (0.123E2, ~0.34028235E39) = GREATER +compare (0.123E2, ~0.17014117E39) = GREATER +compareReal (0.123E2, ~0.17014117E39) = GREATER +compare (0.123E2, ~0.123E4) = GREATER +compareReal (0.123E2, ~0.123E4) = GREATER +compare (0.123E2, ~0.123E2) = GREATER +compareReal (0.123E2, ~0.123E2) = GREATER +compare (0.123E2, ~0.31415927E1) = GREATER +compareReal (0.123E2, ~0.31415927E1) = GREATER +compare (0.123E2, ~0.27182817E1) = GREATER +compareReal (0.123E2, ~0.27182817E1) = GREATER +compare (0.123E2, ~0.123E1) = GREATER +compareReal (0.123E2, ~0.123E1) = GREATER +compare (0.123E2, ~0.123) = GREATER +compareReal (0.123E2, ~0.123) = GREATER +compare (0.123E2, ~0.123E~2) = GREATER +compareReal (0.123E2, ~0.123E~2) = GREATER +compare (0.123E2, ~0.11754944E~37) = GREATER +compareReal (0.123E2, ~0.11754944E~37) = GREATER +compare (0.123E2, ~0.5877472E~38) = GREATER +compareReal (0.123E2, ~0.5877472E~38) = GREATER +compare (0.123E2, ~0.1E~44) = GREATER +compareReal (0.123E2, ~0.1E~44) = GREATER +compare (0.123E2, ~0.0) = GREATER +compareReal (0.123E2, ~0.0) = GREATER +compare (0.31415927E1, 0.34028235E39) = LESS +compareReal (0.31415927E1, 0.34028235E39) = LESS +compare (0.31415927E1, 0.17014117E39) = LESS +compareReal (0.31415927E1, 0.17014117E39) = LESS +compare (0.31415927E1, 0.123E4) = LESS +compareReal (0.31415927E1, 0.123E4) = LESS +compare (0.31415927E1, 0.123E2) = LESS +compareReal (0.31415927E1, 0.123E2) = LESS +compare (0.31415927E1, 0.31415927E1) = EQUAL +compareReal (0.31415927E1, 0.31415927E1) = EQUAL +compare (0.31415927E1, 0.27182817E1) = GREATER +compareReal (0.31415927E1, 0.27182817E1) = GREATER +compare (0.31415927E1, 0.123E1) = GREATER +compareReal (0.31415927E1, 0.123E1) = GREATER +compare (0.31415927E1, 0.123) = GREATER +compareReal (0.31415927E1, 0.123) = GREATER +compare (0.31415927E1, 0.123E~2) = GREATER +compareReal (0.31415927E1, 0.123E~2) = GREATER +compare (0.31415927E1, 0.11754944E~37) = GREATER +compareReal (0.31415927E1, 0.11754944E~37) = GREATER +compare (0.31415927E1, 0.5877472E~38) = GREATER +compareReal (0.31415927E1, 0.5877472E~38) = GREATER +compare (0.31415927E1, 0.1E~44) = GREATER +compareReal (0.31415927E1, 0.1E~44) = GREATER +compare (0.31415927E1, 0.0) = GREATER +compareReal (0.31415927E1, 0.0) = GREATER +compare (0.31415927E1, ~0.34028235E39) = GREATER +compareReal (0.31415927E1, ~0.34028235E39) = GREATER +compare (0.31415927E1, ~0.17014117E39) = GREATER +compareReal (0.31415927E1, ~0.17014117E39) = GREATER +compare (0.31415927E1, ~0.123E4) = GREATER +compareReal (0.31415927E1, ~0.123E4) = GREATER +compare (0.31415927E1, ~0.123E2) = GREATER +compareReal (0.31415927E1, ~0.123E2) = GREATER +compare (0.31415927E1, ~0.31415927E1) = GREATER +compareReal (0.31415927E1, ~0.31415927E1) = GREATER +compare (0.31415927E1, ~0.27182817E1) = GREATER +compareReal (0.31415927E1, ~0.27182817E1) = GREATER +compare (0.31415927E1, ~0.123E1) = GREATER +compareReal (0.31415927E1, ~0.123E1) = GREATER +compare (0.31415927E1, ~0.123) = GREATER +compareReal (0.31415927E1, ~0.123) = GREATER +compare (0.31415927E1, ~0.123E~2) = GREATER +compareReal (0.31415927E1, ~0.123E~2) = GREATER +compare (0.31415927E1, ~0.11754944E~37) = GREATER +compareReal (0.31415927E1, ~0.11754944E~37) = GREATER +compare (0.31415927E1, ~0.5877472E~38) = GREATER +compareReal (0.31415927E1, ~0.5877472E~38) = GREATER +compare (0.31415927E1, ~0.1E~44) = GREATER +compareReal (0.31415927E1, ~0.1E~44) = GREATER +compare (0.31415927E1, ~0.0) = GREATER +compareReal (0.31415927E1, ~0.0) = GREATER +compare (0.27182817E1, 0.34028235E39) = LESS +compareReal (0.27182817E1, 0.34028235E39) = LESS +compare (0.27182817E1, 0.17014117E39) = LESS +compareReal (0.27182817E1, 0.17014117E39) = LESS +compare (0.27182817E1, 0.123E4) = LESS +compareReal (0.27182817E1, 0.123E4) = LESS +compare (0.27182817E1, 0.123E2) = LESS +compareReal (0.27182817E1, 0.123E2) = LESS +compare (0.27182817E1, 0.31415927E1) = LESS +compareReal (0.27182817E1, 0.31415927E1) = LESS +compare (0.27182817E1, 0.27182817E1) = EQUAL +compareReal (0.27182817E1, 0.27182817E1) = EQUAL +compare (0.27182817E1, 0.123E1) = GREATER +compareReal (0.27182817E1, 0.123E1) = GREATER +compare (0.27182817E1, 0.123) = GREATER +compareReal (0.27182817E1, 0.123) = GREATER +compare (0.27182817E1, 0.123E~2) = GREATER +compareReal (0.27182817E1, 0.123E~2) = GREATER +compare (0.27182817E1, 0.11754944E~37) = GREATER +compareReal (0.27182817E1, 0.11754944E~37) = GREATER +compare (0.27182817E1, 0.5877472E~38) = GREATER +compareReal (0.27182817E1, 0.5877472E~38) = GREATER +compare (0.27182817E1, 0.1E~44) = GREATER +compareReal (0.27182817E1, 0.1E~44) = GREATER +compare (0.27182817E1, 0.0) = GREATER +compareReal (0.27182817E1, 0.0) = GREATER +compare (0.27182817E1, ~0.34028235E39) = GREATER +compareReal (0.27182817E1, ~0.34028235E39) = GREATER +compare (0.27182817E1, ~0.17014117E39) = GREATER +compareReal (0.27182817E1, ~0.17014117E39) = GREATER +compare (0.27182817E1, ~0.123E4) = GREATER +compareReal (0.27182817E1, ~0.123E4) = GREATER +compare (0.27182817E1, ~0.123E2) = GREATER +compareReal (0.27182817E1, ~0.123E2) = GREATER +compare (0.27182817E1, ~0.31415927E1) = GREATER +compareReal (0.27182817E1, ~0.31415927E1) = GREATER +compare (0.27182817E1, ~0.27182817E1) = GREATER +compareReal (0.27182817E1, ~0.27182817E1) = GREATER +compare (0.27182817E1, ~0.123E1) = GREATER +compareReal (0.27182817E1, ~0.123E1) = GREATER +compare (0.27182817E1, ~0.123) = GREATER +compareReal (0.27182817E1, ~0.123) = GREATER +compare (0.27182817E1, ~0.123E~2) = GREATER +compareReal (0.27182817E1, ~0.123E~2) = GREATER +compare (0.27182817E1, ~0.11754944E~37) = GREATER +compareReal (0.27182817E1, ~0.11754944E~37) = GREATER +compare (0.27182817E1, ~0.5877472E~38) = GREATER +compareReal (0.27182817E1, ~0.5877472E~38) = GREATER +compare (0.27182817E1, ~0.1E~44) = GREATER +compareReal (0.27182817E1, ~0.1E~44) = GREATER +compare (0.27182817E1, ~0.0) = GREATER +compareReal (0.27182817E1, ~0.0) = GREATER +compare (0.123E1, 0.34028235E39) = LESS +compareReal (0.123E1, 0.34028235E39) = LESS +compare (0.123E1, 0.17014117E39) = LESS +compareReal (0.123E1, 0.17014117E39) = LESS +compare (0.123E1, 0.123E4) = LESS +compareReal (0.123E1, 0.123E4) = LESS +compare (0.123E1, 0.123E2) = LESS +compareReal (0.123E1, 0.123E2) = LESS +compare (0.123E1, 0.31415927E1) = LESS +compareReal (0.123E1, 0.31415927E1) = LESS +compare (0.123E1, 0.27182817E1) = LESS +compareReal (0.123E1, 0.27182817E1) = LESS +compare (0.123E1, 0.123E1) = EQUAL +compareReal (0.123E1, 0.123E1) = EQUAL +compare (0.123E1, 0.123) = GREATER +compareReal (0.123E1, 0.123) = GREATER +compare (0.123E1, 0.123E~2) = GREATER +compareReal (0.123E1, 0.123E~2) = GREATER +compare (0.123E1, 0.11754944E~37) = GREATER +compareReal (0.123E1, 0.11754944E~37) = GREATER +compare (0.123E1, 0.5877472E~38) = GREATER +compareReal (0.123E1, 0.5877472E~38) = GREATER +compare (0.123E1, 0.1E~44) = GREATER +compareReal (0.123E1, 0.1E~44) = GREATER +compare (0.123E1, 0.0) = GREATER +compareReal (0.123E1, 0.0) = GREATER +compare (0.123E1, ~0.34028235E39) = GREATER +compareReal (0.123E1, ~0.34028235E39) = GREATER +compare (0.123E1, ~0.17014117E39) = GREATER +compareReal (0.123E1, ~0.17014117E39) = GREATER +compare (0.123E1, ~0.123E4) = GREATER +compareReal (0.123E1, ~0.123E4) = GREATER +compare (0.123E1, ~0.123E2) = GREATER +compareReal (0.123E1, ~0.123E2) = GREATER +compare (0.123E1, ~0.31415927E1) = GREATER +compareReal (0.123E1, ~0.31415927E1) = GREATER +compare (0.123E1, ~0.27182817E1) = GREATER +compareReal (0.123E1, ~0.27182817E1) = GREATER +compare (0.123E1, ~0.123E1) = GREATER +compareReal (0.123E1, ~0.123E1) = GREATER +compare (0.123E1, ~0.123) = GREATER +compareReal (0.123E1, ~0.123) = GREATER +compare (0.123E1, ~0.123E~2) = GREATER +compareReal (0.123E1, ~0.123E~2) = GREATER +compare (0.123E1, ~0.11754944E~37) = GREATER +compareReal (0.123E1, ~0.11754944E~37) = GREATER +compare (0.123E1, ~0.5877472E~38) = GREATER +compareReal (0.123E1, ~0.5877472E~38) = GREATER +compare (0.123E1, ~0.1E~44) = GREATER +compareReal (0.123E1, ~0.1E~44) = GREATER +compare (0.123E1, ~0.0) = GREATER +compareReal (0.123E1, ~0.0) = GREATER +compare (0.123, 0.34028235E39) = LESS +compareReal (0.123, 0.34028235E39) = LESS +compare (0.123, 0.17014117E39) = LESS +compareReal (0.123, 0.17014117E39) = LESS +compare (0.123, 0.123E4) = LESS +compareReal (0.123, 0.123E4) = LESS +compare (0.123, 0.123E2) = LESS +compareReal (0.123, 0.123E2) = LESS +compare (0.123, 0.31415927E1) = LESS +compareReal (0.123, 0.31415927E1) = LESS +compare (0.123, 0.27182817E1) = LESS +compareReal (0.123, 0.27182817E1) = LESS +compare (0.123, 0.123E1) = LESS +compareReal (0.123, 0.123E1) = LESS +compare (0.123, 0.123) = EQUAL +compareReal (0.123, 0.123) = EQUAL +compare (0.123, 0.123E~2) = GREATER +compareReal (0.123, 0.123E~2) = GREATER +compare (0.123, 0.11754944E~37) = GREATER +compareReal (0.123, 0.11754944E~37) = GREATER +compare (0.123, 0.5877472E~38) = GREATER +compareReal (0.123, 0.5877472E~38) = GREATER +compare (0.123, 0.1E~44) = GREATER +compareReal (0.123, 0.1E~44) = GREATER +compare (0.123, 0.0) = GREATER +compareReal (0.123, 0.0) = GREATER +compare (0.123, ~0.34028235E39) = GREATER +compareReal (0.123, ~0.34028235E39) = GREATER +compare (0.123, ~0.17014117E39) = GREATER +compareReal (0.123, ~0.17014117E39) = GREATER +compare (0.123, ~0.123E4) = GREATER +compareReal (0.123, ~0.123E4) = GREATER +compare (0.123, ~0.123E2) = GREATER +compareReal (0.123, ~0.123E2) = GREATER +compare (0.123, ~0.31415927E1) = GREATER +compareReal (0.123, ~0.31415927E1) = GREATER +compare (0.123, ~0.27182817E1) = GREATER +compareReal (0.123, ~0.27182817E1) = GREATER +compare (0.123, ~0.123E1) = GREATER +compareReal (0.123, ~0.123E1) = GREATER +compare (0.123, ~0.123) = GREATER +compareReal (0.123, ~0.123) = GREATER +compare (0.123, ~0.123E~2) = GREATER +compareReal (0.123, ~0.123E~2) = GREATER +compare (0.123, ~0.11754944E~37) = GREATER +compareReal (0.123, ~0.11754944E~37) = GREATER +compare (0.123, ~0.5877472E~38) = GREATER +compareReal (0.123, ~0.5877472E~38) = GREATER +compare (0.123, ~0.1E~44) = GREATER +compareReal (0.123, ~0.1E~44) = GREATER +compare (0.123, ~0.0) = GREATER +compareReal (0.123, ~0.0) = GREATER +compare (0.123E~2, 0.34028235E39) = LESS +compareReal (0.123E~2, 0.34028235E39) = LESS +compare (0.123E~2, 0.17014117E39) = LESS +compareReal (0.123E~2, 0.17014117E39) = LESS +compare (0.123E~2, 0.123E4) = LESS +compareReal (0.123E~2, 0.123E4) = LESS +compare (0.123E~2, 0.123E2) = LESS +compareReal (0.123E~2, 0.123E2) = LESS +compare (0.123E~2, 0.31415927E1) = LESS +compareReal (0.123E~2, 0.31415927E1) = LESS +compare (0.123E~2, 0.27182817E1) = LESS +compareReal (0.123E~2, 0.27182817E1) = LESS +compare (0.123E~2, 0.123E1) = LESS +compareReal (0.123E~2, 0.123E1) = LESS +compare (0.123E~2, 0.123) = LESS +compareReal (0.123E~2, 0.123) = LESS +compare (0.123E~2, 0.123E~2) = EQUAL +compareReal (0.123E~2, 0.123E~2) = EQUAL +compare (0.123E~2, 0.11754944E~37) = GREATER +compareReal (0.123E~2, 0.11754944E~37) = GREATER +compare (0.123E~2, 0.5877472E~38) = GREATER +compareReal (0.123E~2, 0.5877472E~38) = GREATER +compare (0.123E~2, 0.1E~44) = GREATER +compareReal (0.123E~2, 0.1E~44) = GREATER +compare (0.123E~2, 0.0) = GREATER +compareReal (0.123E~2, 0.0) = GREATER +compare (0.123E~2, ~0.34028235E39) = GREATER +compareReal (0.123E~2, ~0.34028235E39) = GREATER +compare (0.123E~2, ~0.17014117E39) = GREATER +compareReal (0.123E~2, ~0.17014117E39) = GREATER +compare (0.123E~2, ~0.123E4) = GREATER +compareReal (0.123E~2, ~0.123E4) = GREATER +compare (0.123E~2, ~0.123E2) = GREATER +compareReal (0.123E~2, ~0.123E2) = GREATER +compare (0.123E~2, ~0.31415927E1) = GREATER +compareReal (0.123E~2, ~0.31415927E1) = GREATER +compare (0.123E~2, ~0.27182817E1) = GREATER +compareReal (0.123E~2, ~0.27182817E1) = GREATER +compare (0.123E~2, ~0.123E1) = GREATER +compareReal (0.123E~2, ~0.123E1) = GREATER +compare (0.123E~2, ~0.123) = GREATER +compareReal (0.123E~2, ~0.123) = GREATER +compare (0.123E~2, ~0.123E~2) = GREATER +compareReal (0.123E~2, ~0.123E~2) = GREATER +compare (0.123E~2, ~0.11754944E~37) = GREATER +compareReal (0.123E~2, ~0.11754944E~37) = GREATER +compare (0.123E~2, ~0.5877472E~38) = GREATER +compareReal (0.123E~2, ~0.5877472E~38) = GREATER +compare (0.123E~2, ~0.1E~44) = GREATER +compareReal (0.123E~2, ~0.1E~44) = GREATER +compare (0.123E~2, ~0.0) = GREATER +compareReal (0.123E~2, ~0.0) = GREATER +compare (0.11754944E~37, 0.34028235E39) = LESS +compareReal (0.11754944E~37, 0.34028235E39) = LESS +compare (0.11754944E~37, 0.17014117E39) = LESS +compareReal (0.11754944E~37, 0.17014117E39) = LESS +compare (0.11754944E~37, 0.123E4) = LESS +compareReal (0.11754944E~37, 0.123E4) = LESS +compare (0.11754944E~37, 0.123E2) = LESS +compareReal (0.11754944E~37, 0.123E2) = LESS +compare (0.11754944E~37, 0.31415927E1) = LESS +compareReal (0.11754944E~37, 0.31415927E1) = LESS +compare (0.11754944E~37, 0.27182817E1) = LESS +compareReal (0.11754944E~37, 0.27182817E1) = LESS +compare (0.11754944E~37, 0.123E1) = LESS +compareReal (0.11754944E~37, 0.123E1) = LESS +compare (0.11754944E~37, 0.123) = LESS +compareReal (0.11754944E~37, 0.123) = LESS +compare (0.11754944E~37, 0.123E~2) = LESS +compareReal (0.11754944E~37, 0.123E~2) = LESS +compare (0.11754944E~37, 0.11754944E~37) = EQUAL +compareReal (0.11754944E~37, 0.11754944E~37) = EQUAL +compare (0.11754944E~37, 0.5877472E~38) = GREATER +compareReal (0.11754944E~37, 0.5877472E~38) = GREATER +compare (0.11754944E~37, 0.1E~44) = GREATER +compareReal (0.11754944E~37, 0.1E~44) = GREATER +compare (0.11754944E~37, 0.0) = GREATER +compareReal (0.11754944E~37, 0.0) = GREATER +compare (0.11754944E~37, ~0.34028235E39) = GREATER +compareReal (0.11754944E~37, ~0.34028235E39) = GREATER +compare (0.11754944E~37, ~0.17014117E39) = GREATER +compareReal (0.11754944E~37, ~0.17014117E39) = GREATER +compare (0.11754944E~37, ~0.123E4) = GREATER +compareReal (0.11754944E~37, ~0.123E4) = GREATER +compare (0.11754944E~37, ~0.123E2) = GREATER +compareReal (0.11754944E~37, ~0.123E2) = GREATER +compare (0.11754944E~37, ~0.31415927E1) = GREATER +compareReal (0.11754944E~37, ~0.31415927E1) = GREATER +compare (0.11754944E~37, ~0.27182817E1) = GREATER +compareReal (0.11754944E~37, ~0.27182817E1) = GREATER +compare (0.11754944E~37, ~0.123E1) = GREATER +compareReal (0.11754944E~37, ~0.123E1) = GREATER +compare (0.11754944E~37, ~0.123) = GREATER +compareReal (0.11754944E~37, ~0.123) = GREATER +compare (0.11754944E~37, ~0.123E~2) = GREATER +compareReal (0.11754944E~37, ~0.123E~2) = GREATER +compare (0.11754944E~37, ~0.11754944E~37) = GREATER +compareReal (0.11754944E~37, ~0.11754944E~37) = GREATER +compare (0.11754944E~37, ~0.5877472E~38) = GREATER +compareReal (0.11754944E~37, ~0.5877472E~38) = GREATER +compare (0.11754944E~37, ~0.1E~44) = GREATER +compareReal (0.11754944E~37, ~0.1E~44) = GREATER +compare (0.11754944E~37, ~0.0) = GREATER +compareReal (0.11754944E~37, ~0.0) = GREATER +compare (0.5877472E~38, 0.34028235E39) = LESS +compareReal (0.5877472E~38, 0.34028235E39) = LESS +compare (0.5877472E~38, 0.17014117E39) = LESS +compareReal (0.5877472E~38, 0.17014117E39) = LESS +compare (0.5877472E~38, 0.123E4) = LESS +compareReal (0.5877472E~38, 0.123E4) = LESS +compare (0.5877472E~38, 0.123E2) = LESS +compareReal (0.5877472E~38, 0.123E2) = LESS +compare (0.5877472E~38, 0.31415927E1) = LESS +compareReal (0.5877472E~38, 0.31415927E1) = LESS +compare (0.5877472E~38, 0.27182817E1) = LESS +compareReal (0.5877472E~38, 0.27182817E1) = LESS +compare (0.5877472E~38, 0.123E1) = LESS +compareReal (0.5877472E~38, 0.123E1) = LESS +compare (0.5877472E~38, 0.123) = LESS +compareReal (0.5877472E~38, 0.123) = LESS +compare (0.5877472E~38, 0.123E~2) = LESS +compareReal (0.5877472E~38, 0.123E~2) = LESS +compare (0.5877472E~38, 0.11754944E~37) = LESS +compareReal (0.5877472E~38, 0.11754944E~37) = LESS +compare (0.5877472E~38, 0.5877472E~38) = EQUAL +compareReal (0.5877472E~38, 0.5877472E~38) = EQUAL +compare (0.5877472E~38, 0.1E~44) = GREATER +compareReal (0.5877472E~38, 0.1E~44) = GREATER +compare (0.5877472E~38, 0.0) = GREATER +compareReal (0.5877472E~38, 0.0) = GREATER +compare (0.5877472E~38, ~0.34028235E39) = GREATER +compareReal (0.5877472E~38, ~0.34028235E39) = GREATER +compare (0.5877472E~38, ~0.17014117E39) = GREATER +compareReal (0.5877472E~38, ~0.17014117E39) = GREATER +compare (0.5877472E~38, ~0.123E4) = GREATER +compareReal (0.5877472E~38, ~0.123E4) = GREATER +compare (0.5877472E~38, ~0.123E2) = GREATER +compareReal (0.5877472E~38, ~0.123E2) = GREATER +compare (0.5877472E~38, ~0.31415927E1) = GREATER +compareReal (0.5877472E~38, ~0.31415927E1) = GREATER +compare (0.5877472E~38, ~0.27182817E1) = GREATER +compareReal (0.5877472E~38, ~0.27182817E1) = GREATER +compare (0.5877472E~38, ~0.123E1) = GREATER +compareReal (0.5877472E~38, ~0.123E1) = GREATER +compare (0.5877472E~38, ~0.123) = GREATER +compareReal (0.5877472E~38, ~0.123) = GREATER +compare (0.5877472E~38, ~0.123E~2) = GREATER +compareReal (0.5877472E~38, ~0.123E~2) = GREATER +compare (0.5877472E~38, ~0.11754944E~37) = GREATER +compareReal (0.5877472E~38, ~0.11754944E~37) = GREATER +compare (0.5877472E~38, ~0.5877472E~38) = GREATER +compareReal (0.5877472E~38, ~0.5877472E~38) = GREATER +compare (0.5877472E~38, ~0.1E~44) = GREATER +compareReal (0.5877472E~38, ~0.1E~44) = GREATER +compare (0.5877472E~38, ~0.0) = GREATER +compareReal (0.5877472E~38, ~0.0) = GREATER +compare (0.1E~44, 0.34028235E39) = LESS +compareReal (0.1E~44, 0.34028235E39) = LESS +compare (0.1E~44, 0.17014117E39) = LESS +compareReal (0.1E~44, 0.17014117E39) = LESS +compare (0.1E~44, 0.123E4) = LESS +compareReal (0.1E~44, 0.123E4) = LESS +compare (0.1E~44, 0.123E2) = LESS +compareReal (0.1E~44, 0.123E2) = LESS +compare (0.1E~44, 0.31415927E1) = LESS +compareReal (0.1E~44, 0.31415927E1) = LESS +compare (0.1E~44, 0.27182817E1) = LESS +compareReal (0.1E~44, 0.27182817E1) = LESS +compare (0.1E~44, 0.123E1) = LESS +compareReal (0.1E~44, 0.123E1) = LESS +compare (0.1E~44, 0.123) = LESS +compareReal (0.1E~44, 0.123) = LESS +compare (0.1E~44, 0.123E~2) = LESS +compareReal (0.1E~44, 0.123E~2) = LESS +compare (0.1E~44, 0.11754944E~37) = LESS +compareReal (0.1E~44, 0.11754944E~37) = LESS +compare (0.1E~44, 0.5877472E~38) = LESS +compareReal (0.1E~44, 0.5877472E~38) = LESS +compare (0.1E~44, 0.1E~44) = EQUAL +compareReal (0.1E~44, 0.1E~44) = EQUAL +compare (0.1E~44, 0.0) = GREATER +compareReal (0.1E~44, 0.0) = GREATER +compare (0.1E~44, ~0.34028235E39) = GREATER +compareReal (0.1E~44, ~0.34028235E39) = GREATER +compare (0.1E~44, ~0.17014117E39) = GREATER +compareReal (0.1E~44, ~0.17014117E39) = GREATER +compare (0.1E~44, ~0.123E4) = GREATER +compareReal (0.1E~44, ~0.123E4) = GREATER +compare (0.1E~44, ~0.123E2) = GREATER +compareReal (0.1E~44, ~0.123E2) = GREATER +compare (0.1E~44, ~0.31415927E1) = GREATER +compareReal (0.1E~44, ~0.31415927E1) = GREATER +compare (0.1E~44, ~0.27182817E1) = GREATER +compareReal (0.1E~44, ~0.27182817E1) = GREATER +compare (0.1E~44, ~0.123E1) = GREATER +compareReal (0.1E~44, ~0.123E1) = GREATER +compare (0.1E~44, ~0.123) = GREATER +compareReal (0.1E~44, ~0.123) = GREATER +compare (0.1E~44, ~0.123E~2) = GREATER +compareReal (0.1E~44, ~0.123E~2) = GREATER +compare (0.1E~44, ~0.11754944E~37) = GREATER +compareReal (0.1E~44, ~0.11754944E~37) = GREATER +compare (0.1E~44, ~0.5877472E~38) = GREATER +compareReal (0.1E~44, ~0.5877472E~38) = GREATER +compare (0.1E~44, ~0.1E~44) = GREATER +compareReal (0.1E~44, ~0.1E~44) = GREATER +compare (0.1E~44, ~0.0) = GREATER +compareReal (0.1E~44, ~0.0) = GREATER +compare (0.0, 0.34028235E39) = LESS +compareReal (0.0, 0.34028235E39) = LESS +compare (0.0, 0.17014117E39) = LESS +compareReal (0.0, 0.17014117E39) = LESS +compare (0.0, 0.123E4) = LESS +compareReal (0.0, 0.123E4) = LESS +compare (0.0, 0.123E2) = LESS +compareReal (0.0, 0.123E2) = LESS +compare (0.0, 0.31415927E1) = LESS +compareReal (0.0, 0.31415927E1) = LESS +compare (0.0, 0.27182817E1) = LESS +compareReal (0.0, 0.27182817E1) = LESS +compare (0.0, 0.123E1) = LESS +compareReal (0.0, 0.123E1) = LESS +compare (0.0, 0.123) = LESS +compareReal (0.0, 0.123) = LESS +compare (0.0, 0.123E~2) = LESS +compareReal (0.0, 0.123E~2) = LESS +compare (0.0, 0.11754944E~37) = LESS +compareReal (0.0, 0.11754944E~37) = LESS +compare (0.0, 0.5877472E~38) = LESS +compareReal (0.0, 0.5877472E~38) = LESS +compare (0.0, 0.1E~44) = LESS +compareReal (0.0, 0.1E~44) = LESS +compare (0.0, 0.0) = EQUAL +compareReal (0.0, 0.0) = EQUAL +compare (0.0, ~0.34028235E39) = GREATER +compareReal (0.0, ~0.34028235E39) = GREATER +compare (0.0, ~0.17014117E39) = GREATER +compareReal (0.0, ~0.17014117E39) = GREATER +compare (0.0, ~0.123E4) = GREATER +compareReal (0.0, ~0.123E4) = GREATER +compare (0.0, ~0.123E2) = GREATER +compareReal (0.0, ~0.123E2) = GREATER +compare (0.0, ~0.31415927E1) = GREATER +compareReal (0.0, ~0.31415927E1) = GREATER +compare (0.0, ~0.27182817E1) = GREATER +compareReal (0.0, ~0.27182817E1) = GREATER +compare (0.0, ~0.123E1) = GREATER +compareReal (0.0, ~0.123E1) = GREATER +compare (0.0, ~0.123) = GREATER +compareReal (0.0, ~0.123) = GREATER +compare (0.0, ~0.123E~2) = GREATER +compareReal (0.0, ~0.123E~2) = GREATER +compare (0.0, ~0.11754944E~37) = GREATER +compareReal (0.0, ~0.11754944E~37) = GREATER +compare (0.0, ~0.5877472E~38) = GREATER +compareReal (0.0, ~0.5877472E~38) = GREATER +compare (0.0, ~0.1E~44) = GREATER +compareReal (0.0, ~0.1E~44) = GREATER +compare (0.0, ~0.0) = EQUAL +compareReal (0.0, ~0.0) = EQUAL +compare (~0.34028235E39, 0.34028235E39) = LESS +compareReal (~0.34028235E39, 0.34028235E39) = LESS +compare (~0.34028235E39, 0.17014117E39) = LESS +compareReal (~0.34028235E39, 0.17014117E39) = LESS +compare (~0.34028235E39, 0.123E4) = LESS +compareReal (~0.34028235E39, 0.123E4) = LESS +compare (~0.34028235E39, 0.123E2) = LESS +compareReal (~0.34028235E39, 0.123E2) = LESS +compare (~0.34028235E39, 0.31415927E1) = LESS +compareReal (~0.34028235E39, 0.31415927E1) = LESS +compare (~0.34028235E39, 0.27182817E1) = LESS +compareReal (~0.34028235E39, 0.27182817E1) = LESS +compare (~0.34028235E39, 0.123E1) = LESS +compareReal (~0.34028235E39, 0.123E1) = LESS +compare (~0.34028235E39, 0.123) = LESS +compareReal (~0.34028235E39, 0.123) = LESS +compare (~0.34028235E39, 0.123E~2) = LESS +compareReal (~0.34028235E39, 0.123E~2) = LESS +compare (~0.34028235E39, 0.11754944E~37) = LESS +compareReal (~0.34028235E39, 0.11754944E~37) = LESS +compare (~0.34028235E39, 0.5877472E~38) = LESS +compareReal (~0.34028235E39, 0.5877472E~38) = LESS +compare (~0.34028235E39, 0.1E~44) = LESS +compareReal (~0.34028235E39, 0.1E~44) = LESS +compare (~0.34028235E39, 0.0) = LESS +compareReal (~0.34028235E39, 0.0) = LESS +compare (~0.34028235E39, ~0.34028235E39) = EQUAL +compareReal (~0.34028235E39, ~0.34028235E39) = EQUAL +compare (~0.34028235E39, ~0.17014117E39) = LESS +compareReal (~0.34028235E39, ~0.17014117E39) = LESS +compare (~0.34028235E39, ~0.123E4) = LESS +compareReal (~0.34028235E39, ~0.123E4) = LESS +compare (~0.34028235E39, ~0.123E2) = LESS +compareReal (~0.34028235E39, ~0.123E2) = LESS +compare (~0.34028235E39, ~0.31415927E1) = LESS +compareReal (~0.34028235E39, ~0.31415927E1) = LESS +compare (~0.34028235E39, ~0.27182817E1) = LESS +compareReal (~0.34028235E39, ~0.27182817E1) = LESS +compare (~0.34028235E39, ~0.123E1) = LESS +compareReal (~0.34028235E39, ~0.123E1) = LESS +compare (~0.34028235E39, ~0.123) = LESS +compareReal (~0.34028235E39, ~0.123) = LESS +compare (~0.34028235E39, ~0.123E~2) = LESS +compareReal (~0.34028235E39, ~0.123E~2) = LESS +compare (~0.34028235E39, ~0.11754944E~37) = LESS +compareReal (~0.34028235E39, ~0.11754944E~37) = LESS +compare (~0.34028235E39, ~0.5877472E~38) = LESS +compareReal (~0.34028235E39, ~0.5877472E~38) = LESS +compare (~0.34028235E39, ~0.1E~44) = LESS +compareReal (~0.34028235E39, ~0.1E~44) = LESS +compare (~0.34028235E39, ~0.0) = LESS +compareReal (~0.34028235E39, ~0.0) = LESS +compare (~0.17014117E39, 0.34028235E39) = LESS +compareReal (~0.17014117E39, 0.34028235E39) = LESS +compare (~0.17014117E39, 0.17014117E39) = LESS +compareReal (~0.17014117E39, 0.17014117E39) = LESS +compare (~0.17014117E39, 0.123E4) = LESS +compareReal (~0.17014117E39, 0.123E4) = LESS +compare (~0.17014117E39, 0.123E2) = LESS +compareReal (~0.17014117E39, 0.123E2) = LESS +compare (~0.17014117E39, 0.31415927E1) = LESS +compareReal (~0.17014117E39, 0.31415927E1) = LESS +compare (~0.17014117E39, 0.27182817E1) = LESS +compareReal (~0.17014117E39, 0.27182817E1) = LESS +compare (~0.17014117E39, 0.123E1) = LESS +compareReal (~0.17014117E39, 0.123E1) = LESS +compare (~0.17014117E39, 0.123) = LESS +compareReal (~0.17014117E39, 0.123) = LESS +compare (~0.17014117E39, 0.123E~2) = LESS +compareReal (~0.17014117E39, 0.123E~2) = LESS +compare (~0.17014117E39, 0.11754944E~37) = LESS +compareReal (~0.17014117E39, 0.11754944E~37) = LESS +compare (~0.17014117E39, 0.5877472E~38) = LESS +compareReal (~0.17014117E39, 0.5877472E~38) = LESS +compare (~0.17014117E39, 0.1E~44) = LESS +compareReal (~0.17014117E39, 0.1E~44) = LESS +compare (~0.17014117E39, 0.0) = LESS +compareReal (~0.17014117E39, 0.0) = LESS +compare (~0.17014117E39, ~0.34028235E39) = GREATER +compareReal (~0.17014117E39, ~0.34028235E39) = GREATER +compare (~0.17014117E39, ~0.17014117E39) = EQUAL +compareReal (~0.17014117E39, ~0.17014117E39) = EQUAL +compare (~0.17014117E39, ~0.123E4) = LESS +compareReal (~0.17014117E39, ~0.123E4) = LESS +compare (~0.17014117E39, ~0.123E2) = LESS +compareReal (~0.17014117E39, ~0.123E2) = LESS +compare (~0.17014117E39, ~0.31415927E1) = LESS +compareReal (~0.17014117E39, ~0.31415927E1) = LESS +compare (~0.17014117E39, ~0.27182817E1) = LESS +compareReal (~0.17014117E39, ~0.27182817E1) = LESS +compare (~0.17014117E39, ~0.123E1) = LESS +compareReal (~0.17014117E39, ~0.123E1) = LESS +compare (~0.17014117E39, ~0.123) = LESS +compareReal (~0.17014117E39, ~0.123) = LESS +compare (~0.17014117E39, ~0.123E~2) = LESS +compareReal (~0.17014117E39, ~0.123E~2) = LESS +compare (~0.17014117E39, ~0.11754944E~37) = LESS +compareReal (~0.17014117E39, ~0.11754944E~37) = LESS +compare (~0.17014117E39, ~0.5877472E~38) = LESS +compareReal (~0.17014117E39, ~0.5877472E~38) = LESS +compare (~0.17014117E39, ~0.1E~44) = LESS +compareReal (~0.17014117E39, ~0.1E~44) = LESS +compare (~0.17014117E39, ~0.0) = LESS +compareReal (~0.17014117E39, ~0.0) = LESS +compare (~0.123E4, 0.34028235E39) = LESS +compareReal (~0.123E4, 0.34028235E39) = LESS +compare (~0.123E4, 0.17014117E39) = LESS +compareReal (~0.123E4, 0.17014117E39) = LESS +compare (~0.123E4, 0.123E4) = LESS +compareReal (~0.123E4, 0.123E4) = LESS +compare (~0.123E4, 0.123E2) = LESS +compareReal (~0.123E4, 0.123E2) = LESS +compare (~0.123E4, 0.31415927E1) = LESS +compareReal (~0.123E4, 0.31415927E1) = LESS +compare (~0.123E4, 0.27182817E1) = LESS +compareReal (~0.123E4, 0.27182817E1) = LESS +compare (~0.123E4, 0.123E1) = LESS +compareReal (~0.123E4, 0.123E1) = LESS +compare (~0.123E4, 0.123) = LESS +compareReal (~0.123E4, 0.123) = LESS +compare (~0.123E4, 0.123E~2) = LESS +compareReal (~0.123E4, 0.123E~2) = LESS +compare (~0.123E4, 0.11754944E~37) = LESS +compareReal (~0.123E4, 0.11754944E~37) = LESS +compare (~0.123E4, 0.5877472E~38) = LESS +compareReal (~0.123E4, 0.5877472E~38) = LESS +compare (~0.123E4, 0.1E~44) = LESS +compareReal (~0.123E4, 0.1E~44) = LESS +compare (~0.123E4, 0.0) = LESS +compareReal (~0.123E4, 0.0) = LESS +compare (~0.123E4, ~0.34028235E39) = GREATER +compareReal (~0.123E4, ~0.34028235E39) = GREATER +compare (~0.123E4, ~0.17014117E39) = GREATER +compareReal (~0.123E4, ~0.17014117E39) = GREATER +compare (~0.123E4, ~0.123E4) = EQUAL +compareReal (~0.123E4, ~0.123E4) = EQUAL +compare (~0.123E4, ~0.123E2) = LESS +compareReal (~0.123E4, ~0.123E2) = LESS +compare (~0.123E4, ~0.31415927E1) = LESS +compareReal (~0.123E4, ~0.31415927E1) = LESS +compare (~0.123E4, ~0.27182817E1) = LESS +compareReal (~0.123E4, ~0.27182817E1) = LESS +compare (~0.123E4, ~0.123E1) = LESS +compareReal (~0.123E4, ~0.123E1) = LESS +compare (~0.123E4, ~0.123) = LESS +compareReal (~0.123E4, ~0.123) = LESS +compare (~0.123E4, ~0.123E~2) = LESS +compareReal (~0.123E4, ~0.123E~2) = LESS +compare (~0.123E4, ~0.11754944E~37) = LESS +compareReal (~0.123E4, ~0.11754944E~37) = LESS +compare (~0.123E4, ~0.5877472E~38) = LESS +compareReal (~0.123E4, ~0.5877472E~38) = LESS +compare (~0.123E4, ~0.1E~44) = LESS +compareReal (~0.123E4, ~0.1E~44) = LESS +compare (~0.123E4, ~0.0) = LESS +compareReal (~0.123E4, ~0.0) = LESS +compare (~0.123E2, 0.34028235E39) = LESS +compareReal (~0.123E2, 0.34028235E39) = LESS +compare (~0.123E2, 0.17014117E39) = LESS +compareReal (~0.123E2, 0.17014117E39) = LESS +compare (~0.123E2, 0.123E4) = LESS +compareReal (~0.123E2, 0.123E4) = LESS +compare (~0.123E2, 0.123E2) = LESS +compareReal (~0.123E2, 0.123E2) = LESS +compare (~0.123E2, 0.31415927E1) = LESS +compareReal (~0.123E2, 0.31415927E1) = LESS +compare (~0.123E2, 0.27182817E1) = LESS +compareReal (~0.123E2, 0.27182817E1) = LESS +compare (~0.123E2, 0.123E1) = LESS +compareReal (~0.123E2, 0.123E1) = LESS +compare (~0.123E2, 0.123) = LESS +compareReal (~0.123E2, 0.123) = LESS +compare (~0.123E2, 0.123E~2) = LESS +compareReal (~0.123E2, 0.123E~2) = LESS +compare (~0.123E2, 0.11754944E~37) = LESS +compareReal (~0.123E2, 0.11754944E~37) = LESS +compare (~0.123E2, 0.5877472E~38) = LESS +compareReal (~0.123E2, 0.5877472E~38) = LESS +compare (~0.123E2, 0.1E~44) = LESS +compareReal (~0.123E2, 0.1E~44) = LESS +compare (~0.123E2, 0.0) = LESS +compareReal (~0.123E2, 0.0) = LESS +compare (~0.123E2, ~0.34028235E39) = GREATER +compareReal (~0.123E2, ~0.34028235E39) = GREATER +compare (~0.123E2, ~0.17014117E39) = GREATER +compareReal (~0.123E2, ~0.17014117E39) = GREATER +compare (~0.123E2, ~0.123E4) = GREATER +compareReal (~0.123E2, ~0.123E4) = GREATER +compare (~0.123E2, ~0.123E2) = EQUAL +compareReal (~0.123E2, ~0.123E2) = EQUAL +compare (~0.123E2, ~0.31415927E1) = LESS +compareReal (~0.123E2, ~0.31415927E1) = LESS +compare (~0.123E2, ~0.27182817E1) = LESS +compareReal (~0.123E2, ~0.27182817E1) = LESS +compare (~0.123E2, ~0.123E1) = LESS +compareReal (~0.123E2, ~0.123E1) = LESS +compare (~0.123E2, ~0.123) = LESS +compareReal (~0.123E2, ~0.123) = LESS +compare (~0.123E2, ~0.123E~2) = LESS +compareReal (~0.123E2, ~0.123E~2) = LESS +compare (~0.123E2, ~0.11754944E~37) = LESS +compareReal (~0.123E2, ~0.11754944E~37) = LESS +compare (~0.123E2, ~0.5877472E~38) = LESS +compareReal (~0.123E2, ~0.5877472E~38) = LESS +compare (~0.123E2, ~0.1E~44) = LESS +compareReal (~0.123E2, ~0.1E~44) = LESS +compare (~0.123E2, ~0.0) = LESS +compareReal (~0.123E2, ~0.0) = LESS +compare (~0.31415927E1, 0.34028235E39) = LESS +compareReal (~0.31415927E1, 0.34028235E39) = LESS +compare (~0.31415927E1, 0.17014117E39) = LESS +compareReal (~0.31415927E1, 0.17014117E39) = LESS +compare (~0.31415927E1, 0.123E4) = LESS +compareReal (~0.31415927E1, 0.123E4) = LESS +compare (~0.31415927E1, 0.123E2) = LESS +compareReal (~0.31415927E1, 0.123E2) = LESS +compare (~0.31415927E1, 0.31415927E1) = LESS +compareReal (~0.31415927E1, 0.31415927E1) = LESS +compare (~0.31415927E1, 0.27182817E1) = LESS +compareReal (~0.31415927E1, 0.27182817E1) = LESS +compare (~0.31415927E1, 0.123E1) = LESS +compareReal (~0.31415927E1, 0.123E1) = LESS +compare (~0.31415927E1, 0.123) = LESS +compareReal (~0.31415927E1, 0.123) = LESS +compare (~0.31415927E1, 0.123E~2) = LESS +compareReal (~0.31415927E1, 0.123E~2) = LESS +compare (~0.31415927E1, 0.11754944E~37) = LESS +compareReal (~0.31415927E1, 0.11754944E~37) = LESS +compare (~0.31415927E1, 0.5877472E~38) = LESS +compareReal (~0.31415927E1, 0.5877472E~38) = LESS +compare (~0.31415927E1, 0.1E~44) = LESS +compareReal (~0.31415927E1, 0.1E~44) = LESS +compare (~0.31415927E1, 0.0) = LESS +compareReal (~0.31415927E1, 0.0) = LESS +compare (~0.31415927E1, ~0.34028235E39) = GREATER +compareReal (~0.31415927E1, ~0.34028235E39) = GREATER +compare (~0.31415927E1, ~0.17014117E39) = GREATER +compareReal (~0.31415927E1, ~0.17014117E39) = GREATER +compare (~0.31415927E1, ~0.123E4) = GREATER +compareReal (~0.31415927E1, ~0.123E4) = GREATER +compare (~0.31415927E1, ~0.123E2) = GREATER +compareReal (~0.31415927E1, ~0.123E2) = GREATER +compare (~0.31415927E1, ~0.31415927E1) = EQUAL +compareReal (~0.31415927E1, ~0.31415927E1) = EQUAL +compare (~0.31415927E1, ~0.27182817E1) = LESS +compareReal (~0.31415927E1, ~0.27182817E1) = LESS +compare (~0.31415927E1, ~0.123E1) = LESS +compareReal (~0.31415927E1, ~0.123E1) = LESS +compare (~0.31415927E1, ~0.123) = LESS +compareReal (~0.31415927E1, ~0.123) = LESS +compare (~0.31415927E1, ~0.123E~2) = LESS +compareReal (~0.31415927E1, ~0.123E~2) = LESS +compare (~0.31415927E1, ~0.11754944E~37) = LESS +compareReal (~0.31415927E1, ~0.11754944E~37) = LESS +compare (~0.31415927E1, ~0.5877472E~38) = LESS +compareReal (~0.31415927E1, ~0.5877472E~38) = LESS +compare (~0.31415927E1, ~0.1E~44) = LESS +compareReal (~0.31415927E1, ~0.1E~44) = LESS +compare (~0.31415927E1, ~0.0) = LESS +compareReal (~0.31415927E1, ~0.0) = LESS +compare (~0.27182817E1, 0.34028235E39) = LESS +compareReal (~0.27182817E1, 0.34028235E39) = LESS +compare (~0.27182817E1, 0.17014117E39) = LESS +compareReal (~0.27182817E1, 0.17014117E39) = LESS +compare (~0.27182817E1, 0.123E4) = LESS +compareReal (~0.27182817E1, 0.123E4) = LESS +compare (~0.27182817E1, 0.123E2) = LESS +compareReal (~0.27182817E1, 0.123E2) = LESS +compare (~0.27182817E1, 0.31415927E1) = LESS +compareReal (~0.27182817E1, 0.31415927E1) = LESS +compare (~0.27182817E1, 0.27182817E1) = LESS +compareReal (~0.27182817E1, 0.27182817E1) = LESS +compare (~0.27182817E1, 0.123E1) = LESS +compareReal (~0.27182817E1, 0.123E1) = LESS +compare (~0.27182817E1, 0.123) = LESS +compareReal (~0.27182817E1, 0.123) = LESS +compare (~0.27182817E1, 0.123E~2) = LESS +compareReal (~0.27182817E1, 0.123E~2) = LESS +compare (~0.27182817E1, 0.11754944E~37) = LESS +compareReal (~0.27182817E1, 0.11754944E~37) = LESS +compare (~0.27182817E1, 0.5877472E~38) = LESS +compareReal (~0.27182817E1, 0.5877472E~38) = LESS +compare (~0.27182817E1, 0.1E~44) = LESS +compareReal (~0.27182817E1, 0.1E~44) = LESS +compare (~0.27182817E1, 0.0) = LESS +compareReal (~0.27182817E1, 0.0) = LESS +compare (~0.27182817E1, ~0.34028235E39) = GREATER +compareReal (~0.27182817E1, ~0.34028235E39) = GREATER +compare (~0.27182817E1, ~0.17014117E39) = GREATER +compareReal (~0.27182817E1, ~0.17014117E39) = GREATER +compare (~0.27182817E1, ~0.123E4) = GREATER +compareReal (~0.27182817E1, ~0.123E4) = GREATER +compare (~0.27182817E1, ~0.123E2) = GREATER +compareReal (~0.27182817E1, ~0.123E2) = GREATER +compare (~0.27182817E1, ~0.31415927E1) = GREATER +compareReal (~0.27182817E1, ~0.31415927E1) = GREATER +compare (~0.27182817E1, ~0.27182817E1) = EQUAL +compareReal (~0.27182817E1, ~0.27182817E1) = EQUAL +compare (~0.27182817E1, ~0.123E1) = LESS +compareReal (~0.27182817E1, ~0.123E1) = LESS +compare (~0.27182817E1, ~0.123) = LESS +compareReal (~0.27182817E1, ~0.123) = LESS +compare (~0.27182817E1, ~0.123E~2) = LESS +compareReal (~0.27182817E1, ~0.123E~2) = LESS +compare (~0.27182817E1, ~0.11754944E~37) = LESS +compareReal (~0.27182817E1, ~0.11754944E~37) = LESS +compare (~0.27182817E1, ~0.5877472E~38) = LESS +compareReal (~0.27182817E1, ~0.5877472E~38) = LESS +compare (~0.27182817E1, ~0.1E~44) = LESS +compareReal (~0.27182817E1, ~0.1E~44) = LESS +compare (~0.27182817E1, ~0.0) = LESS +compareReal (~0.27182817E1, ~0.0) = LESS +compare (~0.123E1, 0.34028235E39) = LESS +compareReal (~0.123E1, 0.34028235E39) = LESS +compare (~0.123E1, 0.17014117E39) = LESS +compareReal (~0.123E1, 0.17014117E39) = LESS +compare (~0.123E1, 0.123E4) = LESS +compareReal (~0.123E1, 0.123E4) = LESS +compare (~0.123E1, 0.123E2) = LESS +compareReal (~0.123E1, 0.123E2) = LESS +compare (~0.123E1, 0.31415927E1) = LESS +compareReal (~0.123E1, 0.31415927E1) = LESS +compare (~0.123E1, 0.27182817E1) = LESS +compareReal (~0.123E1, 0.27182817E1) = LESS +compare (~0.123E1, 0.123E1) = LESS +compareReal (~0.123E1, 0.123E1) = LESS +compare (~0.123E1, 0.123) = LESS +compareReal (~0.123E1, 0.123) = LESS +compare (~0.123E1, 0.123E~2) = LESS +compareReal (~0.123E1, 0.123E~2) = LESS +compare (~0.123E1, 0.11754944E~37) = LESS +compareReal (~0.123E1, 0.11754944E~37) = LESS +compare (~0.123E1, 0.5877472E~38) = LESS +compareReal (~0.123E1, 0.5877472E~38) = LESS +compare (~0.123E1, 0.1E~44) = LESS +compareReal (~0.123E1, 0.1E~44) = LESS +compare (~0.123E1, 0.0) = LESS +compareReal (~0.123E1, 0.0) = LESS +compare (~0.123E1, ~0.34028235E39) = GREATER +compareReal (~0.123E1, ~0.34028235E39) = GREATER +compare (~0.123E1, ~0.17014117E39) = GREATER +compareReal (~0.123E1, ~0.17014117E39) = GREATER +compare (~0.123E1, ~0.123E4) = GREATER +compareReal (~0.123E1, ~0.123E4) = GREATER +compare (~0.123E1, ~0.123E2) = GREATER +compareReal (~0.123E1, ~0.123E2) = GREATER +compare (~0.123E1, ~0.31415927E1) = GREATER +compareReal (~0.123E1, ~0.31415927E1) = GREATER +compare (~0.123E1, ~0.27182817E1) = GREATER +compareReal (~0.123E1, ~0.27182817E1) = GREATER +compare (~0.123E1, ~0.123E1) = EQUAL +compareReal (~0.123E1, ~0.123E1) = EQUAL +compare (~0.123E1, ~0.123) = LESS +compareReal (~0.123E1, ~0.123) = LESS +compare (~0.123E1, ~0.123E~2) = LESS +compareReal (~0.123E1, ~0.123E~2) = LESS +compare (~0.123E1, ~0.11754944E~37) = LESS +compareReal (~0.123E1, ~0.11754944E~37) = LESS +compare (~0.123E1, ~0.5877472E~38) = LESS +compareReal (~0.123E1, ~0.5877472E~38) = LESS +compare (~0.123E1, ~0.1E~44) = LESS +compareReal (~0.123E1, ~0.1E~44) = LESS +compare (~0.123E1, ~0.0) = LESS +compareReal (~0.123E1, ~0.0) = LESS +compare (~0.123, 0.34028235E39) = LESS +compareReal (~0.123, 0.34028235E39) = LESS +compare (~0.123, 0.17014117E39) = LESS +compareReal (~0.123, 0.17014117E39) = LESS +compare (~0.123, 0.123E4) = LESS +compareReal (~0.123, 0.123E4) = LESS +compare (~0.123, 0.123E2) = LESS +compareReal (~0.123, 0.123E2) = LESS +compare (~0.123, 0.31415927E1) = LESS +compareReal (~0.123, 0.31415927E1) = LESS +compare (~0.123, 0.27182817E1) = LESS +compareReal (~0.123, 0.27182817E1) = LESS +compare (~0.123, 0.123E1) = LESS +compareReal (~0.123, 0.123E1) = LESS +compare (~0.123, 0.123) = LESS +compareReal (~0.123, 0.123) = LESS +compare (~0.123, 0.123E~2) = LESS +compareReal (~0.123, 0.123E~2) = LESS +compare (~0.123, 0.11754944E~37) = LESS +compareReal (~0.123, 0.11754944E~37) = LESS +compare (~0.123, 0.5877472E~38) = LESS +compareReal (~0.123, 0.5877472E~38) = LESS +compare (~0.123, 0.1E~44) = LESS +compareReal (~0.123, 0.1E~44) = LESS +compare (~0.123, 0.0) = LESS +compareReal (~0.123, 0.0) = LESS +compare (~0.123, ~0.34028235E39) = GREATER +compareReal (~0.123, ~0.34028235E39) = GREATER +compare (~0.123, ~0.17014117E39) = GREATER +compareReal (~0.123, ~0.17014117E39) = GREATER +compare (~0.123, ~0.123E4) = GREATER +compareReal (~0.123, ~0.123E4) = GREATER +compare (~0.123, ~0.123E2) = GREATER +compareReal (~0.123, ~0.123E2) = GREATER +compare (~0.123, ~0.31415927E1) = GREATER +compareReal (~0.123, ~0.31415927E1) = GREATER +compare (~0.123, ~0.27182817E1) = GREATER +compareReal (~0.123, ~0.27182817E1) = GREATER +compare (~0.123, ~0.123E1) = GREATER +compareReal (~0.123, ~0.123E1) = GREATER +compare (~0.123, ~0.123) = EQUAL +compareReal (~0.123, ~0.123) = EQUAL +compare (~0.123, ~0.123E~2) = LESS +compareReal (~0.123, ~0.123E~2) = LESS +compare (~0.123, ~0.11754944E~37) = LESS +compareReal (~0.123, ~0.11754944E~37) = LESS +compare (~0.123, ~0.5877472E~38) = LESS +compareReal (~0.123, ~0.5877472E~38) = LESS +compare (~0.123, ~0.1E~44) = LESS +compareReal (~0.123, ~0.1E~44) = LESS +compare (~0.123, ~0.0) = LESS +compareReal (~0.123, ~0.0) = LESS +compare (~0.123E~2, 0.34028235E39) = LESS +compareReal (~0.123E~2, 0.34028235E39) = LESS +compare (~0.123E~2, 0.17014117E39) = LESS +compareReal (~0.123E~2, 0.17014117E39) = LESS +compare (~0.123E~2, 0.123E4) = LESS +compareReal (~0.123E~2, 0.123E4) = LESS +compare (~0.123E~2, 0.123E2) = LESS +compareReal (~0.123E~2, 0.123E2) = LESS +compare (~0.123E~2, 0.31415927E1) = LESS +compareReal (~0.123E~2, 0.31415927E1) = LESS +compare (~0.123E~2, 0.27182817E1) = LESS +compareReal (~0.123E~2, 0.27182817E1) = LESS +compare (~0.123E~2, 0.123E1) = LESS +compareReal (~0.123E~2, 0.123E1) = LESS +compare (~0.123E~2, 0.123) = LESS +compareReal (~0.123E~2, 0.123) = LESS +compare (~0.123E~2, 0.123E~2) = LESS +compareReal (~0.123E~2, 0.123E~2) = LESS +compare (~0.123E~2, 0.11754944E~37) = LESS +compareReal (~0.123E~2, 0.11754944E~37) = LESS +compare (~0.123E~2, 0.5877472E~38) = LESS +compareReal (~0.123E~2, 0.5877472E~38) = LESS +compare (~0.123E~2, 0.1E~44) = LESS +compareReal (~0.123E~2, 0.1E~44) = LESS +compare (~0.123E~2, 0.0) = LESS +compareReal (~0.123E~2, 0.0) = LESS +compare (~0.123E~2, ~0.34028235E39) = GREATER +compareReal (~0.123E~2, ~0.34028235E39) = GREATER +compare (~0.123E~2, ~0.17014117E39) = GREATER +compareReal (~0.123E~2, ~0.17014117E39) = GREATER +compare (~0.123E~2, ~0.123E4) = GREATER +compareReal (~0.123E~2, ~0.123E4) = GREATER +compare (~0.123E~2, ~0.123E2) = GREATER +compareReal (~0.123E~2, ~0.123E2) = GREATER +compare (~0.123E~2, ~0.31415927E1) = GREATER +compareReal (~0.123E~2, ~0.31415927E1) = GREATER +compare (~0.123E~2, ~0.27182817E1) = GREATER +compareReal (~0.123E~2, ~0.27182817E1) = GREATER +compare (~0.123E~2, ~0.123E1) = GREATER +compareReal (~0.123E~2, ~0.123E1) = GREATER +compare (~0.123E~2, ~0.123) = GREATER +compareReal (~0.123E~2, ~0.123) = GREATER +compare (~0.123E~2, ~0.123E~2) = EQUAL +compareReal (~0.123E~2, ~0.123E~2) = EQUAL +compare (~0.123E~2, ~0.11754944E~37) = LESS +compareReal (~0.123E~2, ~0.11754944E~37) = LESS +compare (~0.123E~2, ~0.5877472E~38) = LESS +compareReal (~0.123E~2, ~0.5877472E~38) = LESS +compare (~0.123E~2, ~0.1E~44) = LESS +compareReal (~0.123E~2, ~0.1E~44) = LESS +compare (~0.123E~2, ~0.0) = LESS +compareReal (~0.123E~2, ~0.0) = LESS +compare (~0.11754944E~37, 0.34028235E39) = LESS +compareReal (~0.11754944E~37, 0.34028235E39) = LESS +compare (~0.11754944E~37, 0.17014117E39) = LESS +compareReal (~0.11754944E~37, 0.17014117E39) = LESS +compare (~0.11754944E~37, 0.123E4) = LESS +compareReal (~0.11754944E~37, 0.123E4) = LESS +compare (~0.11754944E~37, 0.123E2) = LESS +compareReal (~0.11754944E~37, 0.123E2) = LESS +compare (~0.11754944E~37, 0.31415927E1) = LESS +compareReal (~0.11754944E~37, 0.31415927E1) = LESS +compare (~0.11754944E~37, 0.27182817E1) = LESS +compareReal (~0.11754944E~37, 0.27182817E1) = LESS +compare (~0.11754944E~37, 0.123E1) = LESS +compareReal (~0.11754944E~37, 0.123E1) = LESS +compare (~0.11754944E~37, 0.123) = LESS +compareReal (~0.11754944E~37, 0.123) = LESS +compare (~0.11754944E~37, 0.123E~2) = LESS +compareReal (~0.11754944E~37, 0.123E~2) = LESS +compare (~0.11754944E~37, 0.11754944E~37) = LESS +compareReal (~0.11754944E~37, 0.11754944E~37) = LESS +compare (~0.11754944E~37, 0.5877472E~38) = LESS +compareReal (~0.11754944E~37, 0.5877472E~38) = LESS +compare (~0.11754944E~37, 0.1E~44) = LESS +compareReal (~0.11754944E~37, 0.1E~44) = LESS +compare (~0.11754944E~37, 0.0) = LESS +compareReal (~0.11754944E~37, 0.0) = LESS +compare (~0.11754944E~37, ~0.34028235E39) = GREATER +compareReal (~0.11754944E~37, ~0.34028235E39) = GREATER +compare (~0.11754944E~37, ~0.17014117E39) = GREATER +compareReal (~0.11754944E~37, ~0.17014117E39) = GREATER +compare (~0.11754944E~37, ~0.123E4) = GREATER +compareReal (~0.11754944E~37, ~0.123E4) = GREATER +compare (~0.11754944E~37, ~0.123E2) = GREATER +compareReal (~0.11754944E~37, ~0.123E2) = GREATER +compare (~0.11754944E~37, ~0.31415927E1) = GREATER +compareReal (~0.11754944E~37, ~0.31415927E1) = GREATER +compare (~0.11754944E~37, ~0.27182817E1) = GREATER +compareReal (~0.11754944E~37, ~0.27182817E1) = GREATER +compare (~0.11754944E~37, ~0.123E1) = GREATER +compareReal (~0.11754944E~37, ~0.123E1) = GREATER +compare (~0.11754944E~37, ~0.123) = GREATER +compareReal (~0.11754944E~37, ~0.123) = GREATER +compare (~0.11754944E~37, ~0.123E~2) = GREATER +compareReal (~0.11754944E~37, ~0.123E~2) = GREATER +compare (~0.11754944E~37, ~0.11754944E~37) = EQUAL +compareReal (~0.11754944E~37, ~0.11754944E~37) = EQUAL +compare (~0.11754944E~37, ~0.5877472E~38) = LESS +compareReal (~0.11754944E~37, ~0.5877472E~38) = LESS +compare (~0.11754944E~37, ~0.1E~44) = LESS +compareReal (~0.11754944E~37, ~0.1E~44) = LESS +compare (~0.11754944E~37, ~0.0) = LESS +compareReal (~0.11754944E~37, ~0.0) = LESS +compare (~0.5877472E~38, 0.34028235E39) = LESS +compareReal (~0.5877472E~38, 0.34028235E39) = LESS +compare (~0.5877472E~38, 0.17014117E39) = LESS +compareReal (~0.5877472E~38, 0.17014117E39) = LESS +compare (~0.5877472E~38, 0.123E4) = LESS +compareReal (~0.5877472E~38, 0.123E4) = LESS +compare (~0.5877472E~38, 0.123E2) = LESS +compareReal (~0.5877472E~38, 0.123E2) = LESS +compare (~0.5877472E~38, 0.31415927E1) = LESS +compareReal (~0.5877472E~38, 0.31415927E1) = LESS +compare (~0.5877472E~38, 0.27182817E1) = LESS +compareReal (~0.5877472E~38, 0.27182817E1) = LESS +compare (~0.5877472E~38, 0.123E1) = LESS +compareReal (~0.5877472E~38, 0.123E1) = LESS +compare (~0.5877472E~38, 0.123) = LESS +compareReal (~0.5877472E~38, 0.123) = LESS +compare (~0.5877472E~38, 0.123E~2) = LESS +compareReal (~0.5877472E~38, 0.123E~2) = LESS +compare (~0.5877472E~38, 0.11754944E~37) = LESS +compareReal (~0.5877472E~38, 0.11754944E~37) = LESS +compare (~0.5877472E~38, 0.5877472E~38) = LESS +compareReal (~0.5877472E~38, 0.5877472E~38) = LESS +compare (~0.5877472E~38, 0.1E~44) = LESS +compareReal (~0.5877472E~38, 0.1E~44) = LESS +compare (~0.5877472E~38, 0.0) = LESS +compareReal (~0.5877472E~38, 0.0) = LESS +compare (~0.5877472E~38, ~0.34028235E39) = GREATER +compareReal (~0.5877472E~38, ~0.34028235E39) = GREATER +compare (~0.5877472E~38, ~0.17014117E39) = GREATER +compareReal (~0.5877472E~38, ~0.17014117E39) = GREATER +compare (~0.5877472E~38, ~0.123E4) = GREATER +compareReal (~0.5877472E~38, ~0.123E4) = GREATER +compare (~0.5877472E~38, ~0.123E2) = GREATER +compareReal (~0.5877472E~38, ~0.123E2) = GREATER +compare (~0.5877472E~38, ~0.31415927E1) = GREATER +compareReal (~0.5877472E~38, ~0.31415927E1) = GREATER +compare (~0.5877472E~38, ~0.27182817E1) = GREATER +compareReal (~0.5877472E~38, ~0.27182817E1) = GREATER +compare (~0.5877472E~38, ~0.123E1) = GREATER +compareReal (~0.5877472E~38, ~0.123E1) = GREATER +compare (~0.5877472E~38, ~0.123) = GREATER +compareReal (~0.5877472E~38, ~0.123) = GREATER +compare (~0.5877472E~38, ~0.123E~2) = GREATER +compareReal (~0.5877472E~38, ~0.123E~2) = GREATER +compare (~0.5877472E~38, ~0.11754944E~37) = GREATER +compareReal (~0.5877472E~38, ~0.11754944E~37) = GREATER +compare (~0.5877472E~38, ~0.5877472E~38) = EQUAL +compareReal (~0.5877472E~38, ~0.5877472E~38) = EQUAL +compare (~0.5877472E~38, ~0.1E~44) = LESS +compareReal (~0.5877472E~38, ~0.1E~44) = LESS +compare (~0.5877472E~38, ~0.0) = LESS +compareReal (~0.5877472E~38, ~0.0) = LESS +compare (~0.1E~44, 0.34028235E39) = LESS +compareReal (~0.1E~44, 0.34028235E39) = LESS +compare (~0.1E~44, 0.17014117E39) = LESS +compareReal (~0.1E~44, 0.17014117E39) = LESS +compare (~0.1E~44, 0.123E4) = LESS +compareReal (~0.1E~44, 0.123E4) = LESS +compare (~0.1E~44, 0.123E2) = LESS +compareReal (~0.1E~44, 0.123E2) = LESS +compare (~0.1E~44, 0.31415927E1) = LESS +compareReal (~0.1E~44, 0.31415927E1) = LESS +compare (~0.1E~44, 0.27182817E1) = LESS +compareReal (~0.1E~44, 0.27182817E1) = LESS +compare (~0.1E~44, 0.123E1) = LESS +compareReal (~0.1E~44, 0.123E1) = LESS +compare (~0.1E~44, 0.123) = LESS +compareReal (~0.1E~44, 0.123) = LESS +compare (~0.1E~44, 0.123E~2) = LESS +compareReal (~0.1E~44, 0.123E~2) = LESS +compare (~0.1E~44, 0.11754944E~37) = LESS +compareReal (~0.1E~44, 0.11754944E~37) = LESS +compare (~0.1E~44, 0.5877472E~38) = LESS +compareReal (~0.1E~44, 0.5877472E~38) = LESS +compare (~0.1E~44, 0.1E~44) = LESS +compareReal (~0.1E~44, 0.1E~44) = LESS +compare (~0.1E~44, 0.0) = LESS +compareReal (~0.1E~44, 0.0) = LESS +compare (~0.1E~44, ~0.34028235E39) = GREATER +compareReal (~0.1E~44, ~0.34028235E39) = GREATER +compare (~0.1E~44, ~0.17014117E39) = GREATER +compareReal (~0.1E~44, ~0.17014117E39) = GREATER +compare (~0.1E~44, ~0.123E4) = GREATER +compareReal (~0.1E~44, ~0.123E4) = GREATER +compare (~0.1E~44, ~0.123E2) = GREATER +compareReal (~0.1E~44, ~0.123E2) = GREATER +compare (~0.1E~44, ~0.31415927E1) = GREATER +compareReal (~0.1E~44, ~0.31415927E1) = GREATER +compare (~0.1E~44, ~0.27182817E1) = GREATER +compareReal (~0.1E~44, ~0.27182817E1) = GREATER +compare (~0.1E~44, ~0.123E1) = GREATER +compareReal (~0.1E~44, ~0.123E1) = GREATER +compare (~0.1E~44, ~0.123) = GREATER +compareReal (~0.1E~44, ~0.123) = GREATER +compare (~0.1E~44, ~0.123E~2) = GREATER +compareReal (~0.1E~44, ~0.123E~2) = GREATER +compare (~0.1E~44, ~0.11754944E~37) = GREATER +compareReal (~0.1E~44, ~0.11754944E~37) = GREATER +compare (~0.1E~44, ~0.5877472E~38) = GREATER +compareReal (~0.1E~44, ~0.5877472E~38) = GREATER +compare (~0.1E~44, ~0.1E~44) = EQUAL +compareReal (~0.1E~44, ~0.1E~44) = EQUAL +compare (~0.1E~44, ~0.0) = LESS +compareReal (~0.1E~44, ~0.0) = LESS +compare (~0.0, 0.34028235E39) = LESS +compareReal (~0.0, 0.34028235E39) = LESS +compare (~0.0, 0.17014117E39) = LESS +compareReal (~0.0, 0.17014117E39) = LESS +compare (~0.0, 0.123E4) = LESS +compareReal (~0.0, 0.123E4) = LESS +compare (~0.0, 0.123E2) = LESS +compareReal (~0.0, 0.123E2) = LESS +compare (~0.0, 0.31415927E1) = LESS +compareReal (~0.0, 0.31415927E1) = LESS +compare (~0.0, 0.27182817E1) = LESS +compareReal (~0.0, 0.27182817E1) = LESS +compare (~0.0, 0.123E1) = LESS +compareReal (~0.0, 0.123E1) = LESS +compare (~0.0, 0.123) = LESS +compareReal (~0.0, 0.123) = LESS +compare (~0.0, 0.123E~2) = LESS +compareReal (~0.0, 0.123E~2) = LESS +compare (~0.0, 0.11754944E~37) = LESS +compareReal (~0.0, 0.11754944E~37) = LESS +compare (~0.0, 0.5877472E~38) = LESS +compareReal (~0.0, 0.5877472E~38) = LESS +compare (~0.0, 0.1E~44) = LESS +compareReal (~0.0, 0.1E~44) = LESS +compare (~0.0, 0.0) = EQUAL +compareReal (~0.0, 0.0) = EQUAL +compare (~0.0, ~0.34028235E39) = GREATER +compareReal (~0.0, ~0.34028235E39) = GREATER +compare (~0.0, ~0.17014117E39) = GREATER +compareReal (~0.0, ~0.17014117E39) = GREATER +compare (~0.0, ~0.123E4) = GREATER +compareReal (~0.0, ~0.123E4) = GREATER +compare (~0.0, ~0.123E2) = GREATER +compareReal (~0.0, ~0.123E2) = GREATER +compare (~0.0, ~0.31415927E1) = GREATER +compareReal (~0.0, ~0.31415927E1) = GREATER +compare (~0.0, ~0.27182817E1) = GREATER +compareReal (~0.0, ~0.27182817E1) = GREATER +compare (~0.0, ~0.123E1) = GREATER +compareReal (~0.0, ~0.123E1) = GREATER +compare (~0.0, ~0.123) = GREATER +compareReal (~0.0, ~0.123) = GREATER +compare (~0.0, ~0.123E~2) = GREATER +compareReal (~0.0, ~0.123E~2) = GREATER +compare (~0.0, ~0.11754944E~37) = GREATER +compareReal (~0.0, ~0.11754944E~37) = GREATER +compare (~0.0, ~0.5877472E~38) = GREATER +compareReal (~0.0, ~0.5877472E~38) = GREATER +compare (~0.0, ~0.1E~44) = GREATER +compareReal (~0.0, ~0.1E~44) = GREATER +compare (~0.0, ~0.0) = EQUAL +compareReal (~0.0, ~0.0) = EQUAL + +Testing abs + +Testing {from,to}ManExp +0.34028235E39 = 0.99999994 * 2^128 + = 0.34028235E39 +0.17014117E39 = 0.99999994 * 2^127 + = 0.17014117E39 +0.123E4 = 0.60058594 * 2^11 + = 0.123E4 +0.123E2 = 0.76875 * 2^4 + = 0.123E2 +0.31415927E1 = 0.7853982 * 2^2 + = 0.31415927E1 +0.27182817E1 = 0.67957044 * 2^2 + = 0.27182817E1 +0.123E1 = 0.615 * 2^1 + = 0.123E1 +0.123 = 0.984 * 2^~3 + = 0.123 +0.123E~2 = 0.62976 * 2^~9 + = 0.123E~2 +0.11754944E~37 = 0.5 * 2^~125 + = 0.11754944E~37 +0.0 = 0.0 * 2^0 + = 0.0 +~0.34028235E39 = ~0.99999994 * 2^128 + = ~0.34028235E39 +~0.17014117E39 = ~0.99999994 * 2^127 + = ~0.17014117E39 +~0.123E4 = ~0.60058594 * 2^11 + = ~0.123E4 +~0.123E2 = ~0.76875 * 2^4 + = ~0.123E2 +~0.31415927E1 = ~0.7853982 * 2^2 + = ~0.31415927E1 +~0.27182817E1 = ~0.67957044 * 2^2 + = ~0.27182817E1 +~0.123E1 = ~0.615 * 2^1 + = ~0.123E1 +~0.123 = ~0.984 * 2^~3 + = ~0.123 +~0.123E~2 = ~0.62976 * 2^~9 + = ~0.123E~2 +~0.11754944E~37 = ~0.5 * 2^~125 + = ~0.11754944E~37 +~0.0 = ~0.0 * 2^0 + = ~0.0 + +Testing split + +Testing {from,to}Large + +Testing Real64 + +Testing fmt +0.17976931348623157E309 +1.797693E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 +1.79769313486E308 +2E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 +2E308 +1.7976931349E308 +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 +1.797693135E308 +0.8988465674311579E308 +8.988466E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +8.98846567431E307 +9E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 +9E307 +8.9884656743E307 +89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 +8.988465674E307 +0.123E4 +1.230000E3 +1230.000000 +1230 +1E3 +1230 +1E3 +1.2300000000E3 +1230.0000000000 +1230 +0.123E2 +1.230000E1 +12.300000 +12.3 +1E1 +12 +10 +1.2300000000E1 +12.3000000000 +12.3 +0.3141592653589793E1 +3.141593E0 +3.141593 +3.14159265359 +3E0 +3 +3 +3.1415926536E0 +3.1415926536 +3.141592654 +0.2718281828459045E1 +2.718282E0 +2.718282 +2.71828182846 +3E0 +3 +3 +2.7182818285E0 +2.7182818285 +2.718281828 +0.123E1 +1.230000E0 +1.230000 +1.23 +1E0 +1 +1 +1.2300000000E0 +1.2300000000 +1.23 +0.123 +1.230000E~1 +0.123000 +0.123 +1E~1 +0 +0.1 +1.2300000000E~1 +0.1230000000 +0.123 +0.123E~2 +1.230000E~3 +0.001230 +0.00123 +1E~3 +0 +1E~3 +1.2300000000E~3 +0.0012300000 +0.00123 +0.22250738585072014E~307 +2.225074E~308 +0.000000 +2.22507385851E~308 +2E~308 +0 +2E~308 +2.2250738585E~308 +0.0000000000 +2.225073859E~308 +0.11125369292536007E~307 +1.112537E~308 +0.000000 +1.11253692925E~308 +1E~308 +0 +1E~308 +1.1125369293E~308 +0.0000000000 +1.112536929E~308 +0.5E~323 +4.940656E~324 +0.000000 +4.94065645841E~324 +5E~324 +0 +5E~324 +4.9406564584E~324 +0.0000000000 +4.940656458E~324 +0.0 +0.000000E0 +0.000000 +0 +0E0 +0 +0 +0.0000000000E0 +0.0000000000 +0 +~0.17976931348623157E309 +~1.797693E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 +~1.79769313486E308 +~2E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 +~2E308 +~1.7976931349E308 +~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0000000000 +~1.797693135E308 +~0.8988465674311579E308 +~8.988466E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.000000 +~8.98846567431E307 +~9E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 +~9E307 +~8.9884656743E307 +~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184.0000000000 +~8.988465674E307 +~0.123E4 +~1.230000E3 +~1230.000000 +~1230 +~1E3 +~1230 +~1E3 +~1.2300000000E3 +~1230.0000000000 +~1230 +~0.123E2 +~1.230000E1 +~12.300000 +~12.3 +~1E1 +~12 +~10 +~1.2300000000E1 +~12.3000000000 +~12.3 +~0.3141592653589793E1 +~3.141593E0 +~3.141593 +~3.14159265359 +~3E0 +~3 +~3 +~3.1415926536E0 +~3.1415926536 +~3.141592654 +~0.2718281828459045E1 +~2.718282E0 +~2.718282 +~2.71828182846 +~3E0 +~3 +~3 +~2.7182818285E0 +~2.7182818285 +~2.718281828 +~0.123E1 +~1.230000E0 +~1.230000 +~1.23 +~1E0 +~1 +~1 +~1.2300000000E0 +~1.2300000000 +~1.23 +~0.123 +~1.230000E~1 +~0.123000 +~0.123 +~1E~1 +~0 +~0.1 +~1.2300000000E~1 +~0.1230000000 +~0.123 +~0.123E~2 +~1.230000E~3 +~0.001230 +~0.00123 +~1E~3 +~0 +~1E~3 +~1.2300000000E~3 +~0.0012300000 +~0.00123 +~0.22250738585072014E~307 +~2.225074E~308 +~0.000000 +~2.22507385851E~308 +~2E~308 +~0 +~2E~308 +~2.2250738585E~308 +~0.0000000000 +~2.225073859E~308 +~0.11125369292536007E~307 +~1.112537E~308 +~0.000000 +~1.11253692925E~308 +~1E~308 +~0 +~1E~308 +~1.1125369293E~308 +~0.0000000000 +~1.112536929E~308 +~0.5E~323 +~4.940656E~324 +~0.000000 +~4.94065645841E~324 +~5E~324 +~0 +~5E~324 +~4.9406564584E~324 +~0.0000000000 +~4.940656458E~324 +~0.0 +0.000000E0 +0.000000 +0 +0E0 +0 +0 +0.0000000000E0 +0.0000000000 +0 + +Testing scan +0.17976931348623157E309 0.17976931348623157E309 +0.8988465674311579E308 0.8988465674311579E308 +0.123E4 0.123E4 +0.123E2 0.123E2 +0.3141592653589793E1 0.3141592653589793E1 +0.2718281828459045E1 0.2718281828459045E1 +0.123E1 0.123E1 +0.123 0.123 +0.123E~2 0.123E~2 +0.22250738585072014E~307 0.22250738585072014E~307 +0.11125369292536007E~307 0.11125369292536007E~307 +0.5E~323 0.5E~323 +0.0 0.0 +~0.17976931348623157E309 ~0.17976931348623157E309 +~0.8988465674311579E308 ~0.8988465674311579E308 +~0.123E4 ~0.123E4 +~0.123E2 ~0.123E2 +~0.3141592653589793E1 ~0.3141592653589793E1 +~0.2718281828459045E1 ~0.2718281828459045E1 +~0.123E1 ~0.123E1 +~0.123 ~0.123 +~0.123E~2 ~0.123E~2 +~0.22250738585072014E~307 ~0.22250738585072014E~307 +~0.11125369292536007E~307 ~0.11125369292536007E~307 +~0.5E~323 ~0.5E~323 +~0.0 ~0.0 +inf inf +~inf ~inf +nan nan +inf inf + +Testing checkFloat + +Testing class, isFinite, isNan, isNormal +0.17976931348623157E309 normal + isFinite = true isNan = false isNormal = true +0.8988465674311579E308 normal + isFinite = true isNan = false isNormal = true +0.123E4 normal + isFinite = true isNan = false isNormal = true +0.123E2 normal + isFinite = true isNan = false isNormal = true +0.3141592653589793E1 normal + isFinite = true isNan = false isNormal = true +0.2718281828459045E1 normal + isFinite = true isNan = false isNormal = true +0.123E1 normal + isFinite = true isNan = false isNormal = true +0.123 normal + isFinite = true isNan = false isNormal = true +0.123E~2 normal + isFinite = true isNan = false isNormal = true +0.22250738585072014E~307 normal + isFinite = true isNan = false isNormal = true +0.11125369292536007E~307 subnormal + isFinite = true isNan = false isNormal = false +0.5E~323 subnormal + isFinite = true isNan = false isNormal = false +0.0 zero + isFinite = true isNan = false isNormal = false +~0.17976931348623157E309 normal + isFinite = true isNan = false isNormal = true +~0.8988465674311579E308 normal + isFinite = true isNan = false isNormal = true +~0.123E4 normal + isFinite = true isNan = false isNormal = true +~0.123E2 normal + isFinite = true isNan = false isNormal = true +~0.3141592653589793E1 normal + isFinite = true isNan = false isNormal = true +~0.2718281828459045E1 normal + isFinite = true isNan = false isNormal = true +~0.123E1 normal + isFinite = true isNan = false isNormal = true +~0.123 normal + isFinite = true isNan = false isNormal = true +~0.123E~2 normal + isFinite = true isNan = false isNormal = true +~0.22250738585072014E~307 normal + isFinite = true isNan = false isNormal = true +~0.11125369292536007E~307 subnormal + isFinite = true isNan = false isNormal = false +~0.5E~323 subnormal + isFinite = true isNan = false isNormal = false +~0.0 zero + isFinite = true isNan = false isNormal = false +inf inf + isFinite = false isNan = false isNormal = false +~inf inf + isFinite = false isNan = false isNormal = false +nan nan + isFinite = false isNan = true isNormal = false +inf inf + isFinite = false isNan = false isNormal = false + +Testing maxFinite, minPos, minNormalPos +1.79769313486E308 +1.79769313486E308 +true +4.94065645841E~324 +4.94065645841E~324 +true +2.22507385851E~308 +2.22507385851E~308 +true + +Testring fromString + +Testing {from,to}Decimal +inf inf true +inf inf true +~inf ~inf true +~inf ~inf true +inf inf true +inf inf true +~inf ~inf true +~inf ~inf true +nan nan true +nan nan true +~nan nan true +~nan nan true +0.0 0.0 true +0.0 0.0 true +0.0 0.0 true +~0.0 ~0.0 true +0.15E2 0.15E2 true +0.15E1 0.15E1 true +~0.15E2 ~0.15E2 true +0.15E2 0.15E2 true +0.15E~2 0.15E~2 true +0.15E~2 0.15E~2 true +0.15E~2 0.15E~2 true +0.12E1000 inf false +~0.12E1000 ~inf false +0.1E~998 0.0 false +~0.1E~998 ~0.0 false +inf inf true + +Testing {from,to}LargeInt +0.17976931348623157E309 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 0.17976931348623157E309 +0.8988465674311579E308 89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 0.8988465674311579E308 +0.123E4 1230 0.123E4 +0.123E2 12 0.12E2 +0.3141592653589793E1 3 0.3E1 +0.2718281828459045E1 2 0.2E1 +0.123E1 1 0.1E1 +0.123 0 0.0 +0.123E~2 0 0.0 +0.22250738585072014E~307 0 0.0 +0.11125369292536007E~307 0 0.0 +0.5E~323 0 0.0 +0.0 0 0.0 +~0.17976931348623157E309 ~179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 ~0.17976931348623157E309 +~0.8988465674311579E308 ~89884656743115785407263711865852178399035283762922498299458738401578630390014269380294779316383439085770229476757191232117160663444732091384233773351768758493024955288275641038122745045194664472037934254227566971152291618451611474082904279666061674137398913102072361584369088590459649940625202013092062429184 ~0.8988465674311579E308 +~0.123E4 ~1230 ~0.123E4 +~0.123E2 ~13 ~0.13E2 +~0.3141592653589793E1 ~4 ~0.4E1 +~0.2718281828459045E1 ~3 ~0.3E1 +~0.123E1 ~2 ~0.2E1 +~0.123 ~1 ~0.1E1 +~0.123E~2 ~1 ~0.1E1 +~0.22250738585072014E~307 ~1 ~0.1E1 +~0.11125369292536007E~307 ~1 ~0.1E1 +~0.5E~323 ~1 ~0.1E1 +~0.0 0 0.0 +nearest 0.0 0 +nearest ~0.0 0 +nearest 0.1E13 1000000000000 +nearest ~0.1E13 ~1000000000000 +nearest 0.25 0 +nearest ~0.25 0 +nearest 0.100000000000025E13 1000000000000 +nearest ~0.99999999999975E12 ~1000000000000 +nearest 0.5 0 +nearest ~0.5 0 +nearest 0.10000000000005E13 1000000000000 +nearest ~0.9999999999995E12 ~1000000000000 +nearest 0.75 1 +nearest ~0.75 ~1 +nearest 0.100000000000075E13 1000000000001 +nearest ~0.99999999999925E12 ~999999999999 +nearest 0.1E1 1 +nearest ~0.1E1 ~1 +nearest 0.1000000000001E13 1000000000001 +nearest ~0.999999999999E12 ~999999999999 +nearest 0.125E1 1 +nearest ~0.125E1 ~1 +nearest 0.100000000000125E13 1000000000001 +nearest ~0.99999999999875E12 ~999999999999 +nearest 0.15E1 2 +nearest ~0.15E1 ~2 +nearest 0.10000000000015E13 1000000000002 +nearest ~0.9999999999985E12 ~999999999998 +nearest 0.175E1 2 +nearest ~0.175E1 ~2 +nearest 0.100000000000175E13 1000000000002 +nearest ~0.99999999999825E12 ~999999999998 +nearest 0.2E1 2 +nearest ~0.2E1 ~2 +nearest 0.1000000000002E13 1000000000002 +nearest ~0.999999999998E12 ~999999999998 +nearest 0.25E1 2 +nearest ~0.25E1 ~2 +nearest 0.10000000000025E13 1000000000002 +nearest ~0.9999999999975E12 ~999999999998 +nearest 0.3E1 3 +nearest ~0.3E1 ~3 +nearest 0.1000000000003E13 1000000000003 +nearest ~0.999999999997E12 ~999999999997 +neginf 0.0 0 +neginf ~0.0 0 +neginf 0.1E13 1000000000000 +neginf ~0.1E13 ~1000000000000 +neginf 0.25 0 +neginf ~0.25 ~1 +neginf 0.100000000000025E13 1000000000000 +neginf ~0.99999999999975E12 ~1000000000000 +neginf 0.5 0 +neginf ~0.5 ~1 +neginf 0.10000000000005E13 1000000000000 +neginf ~0.9999999999995E12 ~1000000000000 +neginf 0.75 0 +neginf ~0.75 ~1 +neginf 0.100000000000075E13 1000000000000 +neginf ~0.99999999999925E12 ~1000000000000 +neginf 0.1E1 1 +neginf ~0.1E1 ~1 +neginf 0.1000000000001E13 1000000000001 +neginf ~0.999999999999E12 ~999999999999 +neginf 0.125E1 1 +neginf ~0.125E1 ~2 +neginf 0.100000000000125E13 1000000000001 +neginf ~0.99999999999875E12 ~999999999999 +neginf 0.15E1 1 +neginf ~0.15E1 ~2 +neginf 0.10000000000015E13 1000000000001 +neginf ~0.9999999999985E12 ~999999999999 +neginf 0.175E1 1 +neginf ~0.175E1 ~2 +neginf 0.100000000000175E13 1000000000001 +neginf ~0.99999999999825E12 ~999999999999 +neginf 0.2E1 2 +neginf ~0.2E1 ~2 +neginf 0.1000000000002E13 1000000000002 +neginf ~0.999999999998E12 ~999999999998 +neginf 0.25E1 2 +neginf ~0.25E1 ~3 +neginf 0.10000000000025E13 1000000000002 +neginf ~0.9999999999975E12 ~999999999998 +neginf 0.3E1 3 +neginf ~0.3E1 ~3 +neginf 0.1000000000003E13 1000000000003 +neginf ~0.999999999997E12 ~999999999997 +posinf 0.0 0 +posinf ~0.0 0 +posinf 0.1E13 1000000000000 +posinf ~0.1E13 ~1000000000000 +posinf 0.25 1 +posinf ~0.25 0 +posinf 0.100000000000025E13 1000000000001 +posinf ~0.99999999999975E12 ~999999999999 +posinf 0.5 1 +posinf ~0.5 0 +posinf 0.10000000000005E13 1000000000001 +posinf ~0.9999999999995E12 ~999999999999 +posinf 0.75 1 +posinf ~0.75 0 +posinf 0.100000000000075E13 1000000000001 +posinf ~0.99999999999925E12 ~999999999999 +posinf 0.1E1 1 +posinf ~0.1E1 ~1 +posinf 0.1000000000001E13 1000000000001 +posinf ~0.999999999999E12 ~999999999999 +posinf 0.125E1 2 +posinf ~0.125E1 ~1 +posinf 0.100000000000125E13 1000000000002 +posinf ~0.99999999999875E12 ~999999999998 +posinf 0.15E1 2 +posinf ~0.15E1 ~1 +posinf 0.10000000000015E13 1000000000002 +posinf ~0.9999999999985E12 ~999999999998 +posinf 0.175E1 2 +posinf ~0.175E1 ~1 +posinf 0.100000000000175E13 1000000000002 +posinf ~0.99999999999825E12 ~999999999998 +posinf 0.2E1 2 +posinf ~0.2E1 ~2 +posinf 0.1000000000002E13 1000000000002 +posinf ~0.999999999998E12 ~999999999998 +posinf 0.25E1 3 +posinf ~0.25E1 ~2 +posinf 0.10000000000025E13 1000000000003 +posinf ~0.9999999999975E12 ~999999999997 +posinf 0.3E1 3 +posinf ~0.3E1 ~3 +posinf 0.1000000000003E13 1000000000003 +posinf ~0.999999999997E12 ~999999999997 +zero 0.0 0 +zero ~0.0 0 +zero 0.1E13 1000000000000 +zero ~0.1E13 ~1000000000000 +zero 0.25 0 +zero ~0.25 0 +zero 0.100000000000025E13 1000000000000 +zero ~0.99999999999975E12 ~999999999999 +zero 0.5 0 +zero ~0.5 0 +zero 0.10000000000005E13 1000000000000 +zero ~0.9999999999995E12 ~999999999999 +zero 0.75 0 +zero ~0.75 0 +zero 0.100000000000075E13 1000000000000 +zero ~0.99999999999925E12 ~999999999999 +zero 0.1E1 1 +zero ~0.1E1 ~1 +zero 0.1000000000001E13 1000000000001 +zero ~0.999999999999E12 ~999999999999 +zero 0.125E1 1 +zero ~0.125E1 ~1 +zero 0.100000000000125E13 1000000000001 +zero ~0.99999999999875E12 ~999999999998 +zero 0.15E1 1 +zero ~0.15E1 ~1 +zero 0.10000000000015E13 1000000000001 +zero ~0.9999999999985E12 ~999999999998 +zero 0.175E1 1 +zero ~0.175E1 ~1 +zero 0.100000000000175E13 1000000000001 +zero ~0.99999999999825E12 ~999999999998 +zero 0.2E1 2 +zero ~0.2E1 ~2 +zero 0.1000000000002E13 1000000000002 +zero ~0.999999999998E12 ~999999999998 +zero 0.25E1 2 +zero ~0.25E1 ~2 +zero 0.10000000000025E13 1000000000002 +zero ~0.9999999999975E12 ~999999999997 +zero 0.3E1 3 +zero ~0.3E1 ~3 +zero 0.1000000000003E13 1000000000003 +zero ~0.999999999997E12 ~999999999997 + +Testing fromInt + +Testing toInt + +Testing ceil,floor,round,trunc + +Testing copySign, sameSign, sign, signBit + +Testing max, min + +Testing Real.{~,*,+,-,/,nextAfter,rem} +~ (0.17976931348623157E309) = ~0.17976931348623157E309 +~ (0.8988465674311579E308) = ~0.8988465674311579E308 +~ (0.123E4) = ~0.123E4 +~ (0.123E2) = ~0.123E2 +~ (0.3141592653589793E1) = ~0.3141592653589793E1 +~ (0.2718281828459045E1) = ~0.2718281828459045E1 +~ (0.123E1) = ~0.123E1 +~ (0.123) = ~0.123 +~ (0.123E~2) = ~0.123E~2 +~ (0.22250738585072014E~307) = ~0.22250738585072014E~307 +~ (0.11125369292536007E~307) = ~0.11125369292536007E~307 +~ (0.5E~323) = ~0.5E~323 +~ (0.0) = ~0.0 +~ (~0.17976931348623157E309) = 0.17976931348623157E309 +~ (~0.8988465674311579E308) = 0.8988465674311579E308 +~ (~0.123E4) = 0.123E4 +~ (~0.123E2) = 0.123E2 +~ (~0.3141592653589793E1) = 0.3141592653589793E1 +~ (~0.2718281828459045E1) = 0.2718281828459045E1 +~ (~0.123E1) = 0.123E1 +~ (~0.123) = 0.123 +~ (~0.123E~2) = 0.123E~2 +~ (~0.22250738585072014E~307) = 0.22250738585072014E~307 +~ (~0.11125369292536007E~307) = 0.11125369292536007E~307 +~ (~0.5E~323) = 0.5E~323 +~ (~0.0) = 0.0 +~ (inf) = ~inf +~ (~inf) = inf +~ (nan) = nan +~ (inf) = ~inf +* (0.17976931348623157E309, 0.17976931348623157E309) = inf ++ (0.17976931348623157E309, 0.17976931348623157E309) = inf +- (0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +/ (0.17976931348623157E309, 0.17976931348623157E309) = 0.1E1 +nextAfter (0.17976931348623157E309, 0.17976931348623157E309) = 0.17976931348623157E309 +rem (0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +* (0.17976931348623157E309, 0.8988465674311579E308) = inf ++ (0.17976931348623157E309, 0.8988465674311579E308) = inf +- (0.17976931348623157E309, 0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.17976931348623157E309, 0.8988465674311579E308) = 0.2E1 +nextAfter (0.17976931348623157E309, 0.8988465674311579E308) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.8988465674311579E308) = 0.0 +* (0.17976931348623157E309, 0.123E4) = inf ++ (0.17976931348623157E309, 0.123E4) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E4) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E4) = 0.1461539134034403E306 +nextAfter (0.17976931348623157E309, 0.123E4) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E4) = 0.41709943968791996E292 +* (0.17976931348623157E309, 0.123E2) = inf ++ (0.17976931348623157E309, 0.123E2) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E2) = 0.1461539134034403E308 +nextAfter (0.17976931348623157E309, 0.123E2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E2) = 0.43366647350729996E292 +* (0.17976931348623157E309, 0.3141592653589793E1) = inf ++ (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.3141592653589793E1) = 0.5722234971514056E308 +nextAfter (0.17976931348623157E309, 0.3141592653589793E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.3141592653589793E1) = 0.7289494880527199E292 +* (0.17976931348623157E309, 0.2718281828459045E1) = inf ++ (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.2718281828459045E1) = 0.661334345850887E308 +nextAfter (0.17976931348623157E309, 0.2718281828459045E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.2718281828459045E1) = 0.106516282144602E293 +* (0.17976931348623157E309, 0.123E1) = inf ++ (0.17976931348623157E309, 0.123E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E1) = 0.1461539134034403E309 +nextAfter (0.17976931348623157E309, 0.123E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E1) = 0.111778751710758E293 +* (0.17976931348623157E309, 0.123) = 0.22111625558806483E308 ++ (0.17976931348623157E309, 0.123) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123) = inf +nextAfter (0.17976931348623157E309, 0.123) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123) = ~inf +* (0.17976931348623157E309, 0.123E~2) = 0.2211162555880648E306 ++ (0.17976931348623157E309, 0.123E~2) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.123E~2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.123E~2) = inf +nextAfter (0.17976931348623157E309, 0.123E~2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.123E~2) = ~inf +* (0.17976931348623157E309, 0.22250738585072014E~307) = 0.39999999999999996E1 ++ (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.22250738585072014E~307) = inf +nextAfter (0.17976931348623157E309, 0.22250738585072014E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.22250738585072014E~307) = ~inf +* (0.17976931348623157E309, 0.11125369292536007E~307) = 0.19999999999999998E1 ++ (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.11125369292536007E~307) = inf +nextAfter (0.17976931348623157E309, 0.11125369292536007E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.11125369292536007E~307) = ~inf +* (0.17976931348623157E309, 0.5E~323) = 0.8881784197001251E~15 ++ (0.17976931348623157E309, 0.5E~323) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.5E~323) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.5E~323) = inf +nextAfter (0.17976931348623157E309, 0.5E~323) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.5E~323) = ~inf +* (0.17976931348623157E309, 0.0) = 0.0 ++ (0.17976931348623157E309, 0.0) = 0.17976931348623157E309 +- (0.17976931348623157E309, 0.0) = 0.17976931348623157E309 +/ (0.17976931348623157E309, 0.0) = inf +nextAfter (0.17976931348623157E309, 0.0) = 0.17976931348623155E309 +rem (0.17976931348623157E309, 0.0) = nan +* (0.17976931348623157E309, ~0.17976931348623157E309) = ~inf ++ (0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +- (0.17976931348623157E309, ~0.17976931348623157E309) = inf +/ (0.17976931348623157E309, ~0.17976931348623157E309) = ~0.1E1 +nextAfter (0.17976931348623157E309, ~0.17976931348623157E309) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +* (0.17976931348623157E309, ~0.8988465674311579E308) = ~inf ++ (0.17976931348623157E309, ~0.8988465674311579E308) = 0.8988465674311579E308 +- (0.17976931348623157E309, ~0.8988465674311579E308) = inf +/ (0.17976931348623157E309, ~0.8988465674311579E308) = ~0.2E1 +nextAfter (0.17976931348623157E309, ~0.8988465674311579E308) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.8988465674311579E308) = 0.0 +* (0.17976931348623157E309, ~0.123E4) = ~inf ++ (0.17976931348623157E309, ~0.123E4) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E4) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E4) = ~0.1461539134034403E306 +nextAfter (0.17976931348623157E309, ~0.123E4) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E4) = 0.41709943968791996E292 +* (0.17976931348623157E309, ~0.123E2) = ~inf ++ (0.17976931348623157E309, ~0.123E2) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E2) = ~0.1461539134034403E308 +nextAfter (0.17976931348623157E309, ~0.123E2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E2) = 0.43366647350729996E292 +* (0.17976931348623157E309, ~0.3141592653589793E1) = ~inf ++ (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.3141592653589793E1) = ~0.5722234971514056E308 +nextAfter (0.17976931348623157E309, ~0.3141592653589793E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.3141592653589793E1) = 0.7289494880527199E292 +* (0.17976931348623157E309, ~0.2718281828459045E1) = ~inf ++ (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.2718281828459045E1) = ~0.661334345850887E308 +nextAfter (0.17976931348623157E309, ~0.2718281828459045E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.2718281828459045E1) = 0.106516282144602E293 +* (0.17976931348623157E309, ~0.123E1) = ~inf ++ (0.17976931348623157E309, ~0.123E1) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E1) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E1) = ~0.1461539134034403E309 +nextAfter (0.17976931348623157E309, ~0.123E1) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E1) = 0.111778751710758E293 +* (0.17976931348623157E309, ~0.123) = ~0.22111625558806483E308 ++ (0.17976931348623157E309, ~0.123) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123) = ~inf +nextAfter (0.17976931348623157E309, ~0.123) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123) = ~inf +* (0.17976931348623157E309, ~0.123E~2) = ~0.2211162555880648E306 ++ (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.123E~2) = ~inf +nextAfter (0.17976931348623157E309, ~0.123E~2) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.123E~2) = ~inf +* (0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.39999999999999996E1 ++ (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.22250738585072014E~307) = ~inf +nextAfter (0.17976931348623157E309, ~0.22250738585072014E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.22250738585072014E~307) = ~inf +* (0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.19999999999999998E1 ++ (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.11125369292536007E~307) = ~inf +nextAfter (0.17976931348623157E309, ~0.11125369292536007E~307) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.11125369292536007E~307) = ~inf +* (0.17976931348623157E309, ~0.5E~323) = ~0.8881784197001251E~15 ++ (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.5E~323) = ~inf +nextAfter (0.17976931348623157E309, ~0.5E~323) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.5E~323) = ~inf +* (0.17976931348623157E309, ~0.0) = ~0.0 ++ (0.17976931348623157E309, ~0.0) = 0.17976931348623157E309 +- (0.17976931348623157E309, ~0.0) = 0.17976931348623157E309 +/ (0.17976931348623157E309, ~0.0) = ~inf +nextAfter (0.17976931348623157E309, ~0.0) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~0.0) = nan +* (0.17976931348623157E309, inf) = inf ++ (0.17976931348623157E309, inf) = inf +- (0.17976931348623157E309, inf) = ~inf +/ (0.17976931348623157E309, inf) = 0.0 +nextAfter (0.17976931348623157E309, inf) = inf +rem (0.17976931348623157E309, inf) = 0.17976931348623157E309 +* (0.17976931348623157E309, ~inf) = ~inf ++ (0.17976931348623157E309, ~inf) = ~inf +- (0.17976931348623157E309, ~inf) = inf +/ (0.17976931348623157E309, ~inf) = ~0.0 +nextAfter (0.17976931348623157E309, ~inf) = 0.17976931348623155E309 +rem (0.17976931348623157E309, ~inf) = 0.17976931348623157E309 +* (0.17976931348623157E309, nan) = nan ++ (0.17976931348623157E309, nan) = nan +- (0.17976931348623157E309, nan) = nan +/ (0.17976931348623157E309, nan) = nan +nextAfter (0.17976931348623157E309, nan) = nan +rem (0.17976931348623157E309, nan) = nan +* (0.17976931348623157E309, inf) = inf ++ (0.17976931348623157E309, inf) = inf +- (0.17976931348623157E309, inf) = ~inf +/ (0.17976931348623157E309, inf) = 0.0 +nextAfter (0.17976931348623157E309, inf) = inf +rem (0.17976931348623157E309, inf) = 0.17976931348623157E309 +* (0.8988465674311579E308, 0.17976931348623157E309) = inf ++ (0.8988465674311579E308, 0.17976931348623157E309) = inf +- (0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311579E308 +/ (0.8988465674311579E308, 0.17976931348623157E309) = 0.5 +nextAfter (0.8988465674311579E308, 0.17976931348623157E309) = 0.898846567431158E308 +rem (0.8988465674311579E308, 0.17976931348623157E309) = 0.8988465674311579E308 +* (0.8988465674311579E308, 0.8988465674311579E308) = inf ++ (0.8988465674311579E308, 0.8988465674311579E308) = 0.17976931348623157E309 +- (0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +/ (0.8988465674311579E308, 0.8988465674311579E308) = 0.1E1 +nextAfter (0.8988465674311579E308, 0.8988465674311579E308) = 0.8988465674311579E308 +rem (0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +* (0.8988465674311579E308, 0.123E4) = inf ++ (0.8988465674311579E308, 0.123E4) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E4) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E4) = 0.7307695670172015E305 +nextAfter (0.8988465674311579E308, 0.123E4) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E4) = 0.20854971984395998E292 +* (0.8988465674311579E308, 0.123E2) = inf ++ (0.8988465674311579E308, 0.123E2) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E2) = 0.7307695670172014E307 +nextAfter (0.8988465674311579E308, 0.123E2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E2) = 0.21683323675364998E292 +* (0.8988465674311579E308, 0.3141592653589793E1) = inf ++ (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.3141592653589793E1) = 0.2861117485757028E308 +nextAfter (0.8988465674311579E308, 0.3141592653589793E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.3141592653589793E1) = 0.36447474402635997E292 +* (0.8988465674311579E308, 0.2718281828459045E1) = inf ++ (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.2718281828459045E1) = 0.3306671729254435E308 +nextAfter (0.8988465674311579E308, 0.2718281828459045E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.2718281828459045E1) = 0.53258141072301E292 +* (0.8988465674311579E308, 0.123E1) = 0.1105581277940324E309 ++ (0.8988465674311579E308, 0.123E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E1) = 0.7307695670172015E308 +nextAfter (0.8988465674311579E308, 0.123E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E1) = 0.55889375855379E292 +* (0.8988465674311579E308, 0.123) = 0.11055812779403241E308 ++ (0.8988465674311579E308, 0.123) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123) = inf +nextAfter (0.8988465674311579E308, 0.123) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123) = ~inf +* (0.8988465674311579E308, 0.123E~2) = 0.1105581277940324E306 ++ (0.8988465674311579E308, 0.123E~2) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.123E~2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.123E~2) = inf +nextAfter (0.8988465674311579E308, 0.123E~2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.123E~2) = ~inf +* (0.8988465674311579E308, 0.22250738585072014E~307) = 0.19999999999999998E1 ++ (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.22250738585072014E~307) = inf +nextAfter (0.8988465674311579E308, 0.22250738585072014E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.22250738585072014E~307) = ~inf +* (0.8988465674311579E308, 0.11125369292536007E~307) = 0.9999999999999999 ++ (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.11125369292536007E~307) = inf +nextAfter (0.8988465674311579E308, 0.11125369292536007E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.11125369292536007E~307) = ~inf +* (0.8988465674311579E308, 0.5E~323) = 0.44408920985006257E~15 ++ (0.8988465674311579E308, 0.5E~323) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.5E~323) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.5E~323) = inf +nextAfter (0.8988465674311579E308, 0.5E~323) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.5E~323) = ~inf +* (0.8988465674311579E308, 0.0) = 0.0 ++ (0.8988465674311579E308, 0.0) = 0.8988465674311579E308 +- (0.8988465674311579E308, 0.0) = 0.8988465674311579E308 +/ (0.8988465674311579E308, 0.0) = inf +nextAfter (0.8988465674311579E308, 0.0) = 0.8988465674311578E308 +rem (0.8988465674311579E308, 0.0) = nan +* (0.8988465674311579E308, ~0.17976931348623157E309) = ~inf ++ (0.8988465674311579E308, ~0.17976931348623157E309) = ~0.8988465674311579E308 +- (0.8988465674311579E308, ~0.17976931348623157E309) = inf +/ (0.8988465674311579E308, ~0.17976931348623157E309) = ~0.5 +nextAfter (0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311579E308 +* (0.8988465674311579E308, ~0.8988465674311579E308) = ~inf ++ (0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +- (0.8988465674311579E308, ~0.8988465674311579E308) = 0.17976931348623157E309 +/ (0.8988465674311579E308, ~0.8988465674311579E308) = ~0.1E1 +nextAfter (0.8988465674311579E308, ~0.8988465674311579E308) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +* (0.8988465674311579E308, ~0.123E4) = ~inf ++ (0.8988465674311579E308, ~0.123E4) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E4) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E4) = ~0.7307695670172015E305 +nextAfter (0.8988465674311579E308, ~0.123E4) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E4) = 0.20854971984395998E292 +* (0.8988465674311579E308, ~0.123E2) = ~inf ++ (0.8988465674311579E308, ~0.123E2) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E2) = ~0.7307695670172014E307 +nextAfter (0.8988465674311579E308, ~0.123E2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E2) = 0.21683323675364998E292 +* (0.8988465674311579E308, ~0.3141592653589793E1) = ~inf ++ (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.3141592653589793E1) = ~0.2861117485757028E308 +nextAfter (0.8988465674311579E308, ~0.3141592653589793E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.3141592653589793E1) = 0.36447474402635997E292 +* (0.8988465674311579E308, ~0.2718281828459045E1) = ~inf ++ (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.2718281828459045E1) = ~0.3306671729254435E308 +nextAfter (0.8988465674311579E308, ~0.2718281828459045E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.2718281828459045E1) = 0.53258141072301E292 +* (0.8988465674311579E308, ~0.123E1) = ~0.1105581277940324E309 ++ (0.8988465674311579E308, ~0.123E1) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E1) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E1) = ~0.7307695670172015E308 +nextAfter (0.8988465674311579E308, ~0.123E1) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E1) = 0.55889375855379E292 +* (0.8988465674311579E308, ~0.123) = ~0.11055812779403241E308 ++ (0.8988465674311579E308, ~0.123) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123) = ~inf +nextAfter (0.8988465674311579E308, ~0.123) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123) = ~inf +* (0.8988465674311579E308, ~0.123E~2) = ~0.1105581277940324E306 ++ (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.123E~2) = ~inf +nextAfter (0.8988465674311579E308, ~0.123E~2) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.123E~2) = ~inf +* (0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.19999999999999998E1 ++ (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.22250738585072014E~307) = ~inf +nextAfter (0.8988465674311579E308, ~0.22250738585072014E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.22250738585072014E~307) = ~inf +* (0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.9999999999999999 ++ (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.11125369292536007E~307) = ~inf +nextAfter (0.8988465674311579E308, ~0.11125369292536007E~307) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.11125369292536007E~307) = ~inf +* (0.8988465674311579E308, ~0.5E~323) = ~0.44408920985006257E~15 ++ (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.5E~323) = ~inf +nextAfter (0.8988465674311579E308, ~0.5E~323) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.5E~323) = ~inf +* (0.8988465674311579E308, ~0.0) = ~0.0 ++ (0.8988465674311579E308, ~0.0) = 0.8988465674311579E308 +- (0.8988465674311579E308, ~0.0) = 0.8988465674311579E308 +/ (0.8988465674311579E308, ~0.0) = ~inf +nextAfter (0.8988465674311579E308, ~0.0) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~0.0) = nan +* (0.8988465674311579E308, inf) = inf ++ (0.8988465674311579E308, inf) = inf +- (0.8988465674311579E308, inf) = ~inf +/ (0.8988465674311579E308, inf) = 0.0 +nextAfter (0.8988465674311579E308, inf) = 0.898846567431158E308 +rem (0.8988465674311579E308, inf) = 0.8988465674311579E308 +* (0.8988465674311579E308, ~inf) = ~inf ++ (0.8988465674311579E308, ~inf) = ~inf +- (0.8988465674311579E308, ~inf) = inf +/ (0.8988465674311579E308, ~inf) = ~0.0 +nextAfter (0.8988465674311579E308, ~inf) = 0.8988465674311578E308 +rem (0.8988465674311579E308, ~inf) = 0.8988465674311579E308 +* (0.8988465674311579E308, nan) = nan ++ (0.8988465674311579E308, nan) = nan +- (0.8988465674311579E308, nan) = nan +/ (0.8988465674311579E308, nan) = nan +nextAfter (0.8988465674311579E308, nan) = nan +rem (0.8988465674311579E308, nan) = nan +* (0.8988465674311579E308, inf) = inf ++ (0.8988465674311579E308, inf) = inf +- (0.8988465674311579E308, inf) = ~inf +/ (0.8988465674311579E308, inf) = 0.0 +nextAfter (0.8988465674311579E308, inf) = 0.898846567431158E308 +rem (0.8988465674311579E308, inf) = 0.8988465674311579E308 +* (0.123E4, 0.17976931348623157E309) = inf ++ (0.123E4, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E4, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E4, 0.17976931348623157E309) = 0.6842102114909646E~305 +nextAfter (0.123E4, 0.17976931348623157E309) = 0.12300000000000002E4 +rem (0.123E4, 0.17976931348623157E309) = 0.123E4 +* (0.123E4, 0.8988465674311579E308) = inf ++ (0.123E4, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E4, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E4, 0.8988465674311579E308) = 0.1368420422981929E~304 +nextAfter (0.123E4, 0.8988465674311579E308) = 0.12300000000000002E4 +rem (0.123E4, 0.8988465674311579E308) = 0.123E4 +* (0.123E4, 0.123E4) = 0.15129E7 ++ (0.123E4, 0.123E4) = 0.246E4 +- (0.123E4, 0.123E4) = 0.0 +/ (0.123E4, 0.123E4) = 0.1E1 +nextAfter (0.123E4, 0.123E4) = 0.123E4 +rem (0.123E4, 0.123E4) = 0.0 +* (0.123E4, 0.123E2) = 0.15129E5 ++ (0.123E4, 0.123E2) = 0.12423E4 +- (0.123E4, 0.123E2) = 0.12177E4 +/ (0.123E4, 0.123E2) = 0.1E3 +nextAfter (0.123E4, 0.123E2) = 0.12299999999999998E4 +rem (0.123E4, 0.123E2) = ~0.7105427357601002E~13 +* (0.123E4, 0.3141592653589793E1) = 0.38641589639154454E4 ++ (0.123E4, 0.3141592653589793E1) = 0.123314159265359E4 +- (0.123E4, 0.3141592653589793E1) = 0.122685840734641E4 +/ (0.123E4, 0.3141592653589793E1) = 0.39152116000606253E3 +nextAfter (0.123E4, 0.3141592653589793E1) = 0.12299999999999998E4 +rem (0.123E4, 0.3141592653589793E1) = 0.16372724463908916E1 +* (0.123E4, 0.2718281828459045E1) = 0.33434866490046256E4 ++ (0.123E4, 0.2718281828459045E1) = 0.1232718281828459E4 +- (0.123E4, 0.2718281828459045E1) = 0.1227281718171541E4 +/ (0.123E4, 0.2718281828459045E1) = 0.4524917126408741E3 +nextAfter (0.123E4, 0.2718281828459045E1) = 0.12299999999999998E4 +rem (0.123E4, 0.2718281828459045E1) = 0.1336613536511619E1 +* (0.123E4, 0.123E1) = 0.15129E4 ++ (0.123E4, 0.123E1) = 0.123123E4 +- (0.123E4, 0.123E1) = 0.122877E4 +/ (0.123E4, 0.123E1) = 0.1E4 +nextAfter (0.123E4, 0.123E1) = 0.12299999999999998E4 +rem (0.123E4, 0.123E1) = 0.17763568394002505E~13 +* (0.123E4, 0.123) = 0.15129E3 ++ (0.123E4, 0.123) = 0.1230123E4 +- (0.123E4, 0.123) = 0.1229877E4 +/ (0.123E4, 0.123) = 0.1E5 +nextAfter (0.123E4, 0.123) = 0.12299999999999998E4 +rem (0.123E4, 0.123) = 0.17763568394002505E~13 +* (0.123E4, 0.123E~2) = 0.15129E1 ++ (0.123E4, 0.123E~2) = 0.123000123E4 +- (0.123E4, 0.123E~2) = 0.122999877E4 +/ (0.123E4, 0.123E~2) = 0.1E7 +nextAfter (0.123E4, 0.123E~2) = 0.12299999999999998E4 +rem (0.123E4, 0.123E~2) = 0.26423307986078726E~13 +* (0.123E4, 0.22250738585072014E~307) = 0.27368408459638577E~304 ++ (0.123E4, 0.22250738585072014E~307) = 0.123E4 +- (0.123E4, 0.22250738585072014E~307) = 0.123E4 +/ (0.123E4, 0.22250738585072014E~307) = inf +nextAfter (0.123E4, 0.22250738585072014E~307) = 0.12299999999999998E4 +rem (0.123E4, 0.22250738585072014E~307) = ~inf +* (0.123E4, 0.11125369292536007E~307) = 0.13684204229819289E~304 ++ (0.123E4, 0.11125369292536007E~307) = 0.123E4 +- (0.123E4, 0.11125369292536007E~307) = 0.123E4 +/ (0.123E4, 0.11125369292536007E~307) = inf +nextAfter (0.123E4, 0.11125369292536007E~307) = 0.12299999999999998E4 +rem (0.123E4, 0.11125369292536007E~307) = ~inf +* (0.123E4, 0.5E~323) = 0.6077E~320 ++ (0.123E4, 0.5E~323) = 0.123E4 +- (0.123E4, 0.5E~323) = 0.123E4 +/ (0.123E4, 0.5E~323) = inf +nextAfter (0.123E4, 0.5E~323) = 0.12299999999999998E4 +rem (0.123E4, 0.5E~323) = ~inf +* (0.123E4, 0.0) = 0.0 ++ (0.123E4, 0.0) = 0.123E4 +- (0.123E4, 0.0) = 0.123E4 +/ (0.123E4, 0.0) = inf +nextAfter (0.123E4, 0.0) = 0.12299999999999998E4 +rem (0.123E4, 0.0) = nan +* (0.123E4, ~0.17976931348623157E309) = ~inf ++ (0.123E4, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E4, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E4, ~0.17976931348623157E309) = ~0.6842102114909646E~305 +nextAfter (0.123E4, ~0.17976931348623157E309) = 0.12299999999999998E4 +rem (0.123E4, ~0.17976931348623157E309) = 0.123E4 +* (0.123E4, ~0.8988465674311579E308) = ~inf ++ (0.123E4, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E4, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E4, ~0.8988465674311579E308) = ~0.1368420422981929E~304 +nextAfter (0.123E4, ~0.8988465674311579E308) = 0.12299999999999998E4 +rem (0.123E4, ~0.8988465674311579E308) = 0.123E4 +* (0.123E4, ~0.123E4) = ~0.15129E7 ++ (0.123E4, ~0.123E4) = 0.0 +- (0.123E4, ~0.123E4) = 0.246E4 +/ (0.123E4, ~0.123E4) = ~0.1E1 +nextAfter (0.123E4, ~0.123E4) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E4) = 0.0 +* (0.123E4, ~0.123E2) = ~0.15129E5 ++ (0.123E4, ~0.123E2) = 0.12177E4 +- (0.123E4, ~0.123E2) = 0.12423E4 +/ (0.123E4, ~0.123E2) = ~0.1E3 +nextAfter (0.123E4, ~0.123E2) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E2) = ~0.7105427357601002E~13 +* (0.123E4, ~0.3141592653589793E1) = ~0.38641589639154454E4 ++ (0.123E4, ~0.3141592653589793E1) = 0.122685840734641E4 +- (0.123E4, ~0.3141592653589793E1) = 0.123314159265359E4 +/ (0.123E4, ~0.3141592653589793E1) = ~0.39152116000606253E3 +nextAfter (0.123E4, ~0.3141592653589793E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.3141592653589793E1) = 0.16372724463908916E1 +* (0.123E4, ~0.2718281828459045E1) = ~0.33434866490046256E4 ++ (0.123E4, ~0.2718281828459045E1) = 0.1227281718171541E4 +- (0.123E4, ~0.2718281828459045E1) = 0.1232718281828459E4 +/ (0.123E4, ~0.2718281828459045E1) = ~0.4524917126408741E3 +nextAfter (0.123E4, ~0.2718281828459045E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.2718281828459045E1) = 0.1336613536511619E1 +* (0.123E4, ~0.123E1) = ~0.15129E4 ++ (0.123E4, ~0.123E1) = 0.122877E4 +- (0.123E4, ~0.123E1) = 0.123123E4 +/ (0.123E4, ~0.123E1) = ~0.1E4 +nextAfter (0.123E4, ~0.123E1) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E1) = 0.17763568394002505E~13 +* (0.123E4, ~0.123) = ~0.15129E3 ++ (0.123E4, ~0.123) = 0.1229877E4 +- (0.123E4, ~0.123) = 0.1230123E4 +/ (0.123E4, ~0.123) = ~0.1E5 +nextAfter (0.123E4, ~0.123) = 0.12299999999999998E4 +rem (0.123E4, ~0.123) = 0.17763568394002505E~13 +* (0.123E4, ~0.123E~2) = ~0.15129E1 ++ (0.123E4, ~0.123E~2) = 0.122999877E4 +- (0.123E4, ~0.123E~2) = 0.123000123E4 +/ (0.123E4, ~0.123E~2) = ~0.1E7 +nextAfter (0.123E4, ~0.123E~2) = 0.12299999999999998E4 +rem (0.123E4, ~0.123E~2) = 0.26423307986078726E~13 +* (0.123E4, ~0.22250738585072014E~307) = ~0.27368408459638577E~304 ++ (0.123E4, ~0.22250738585072014E~307) = 0.123E4 +- (0.123E4, ~0.22250738585072014E~307) = 0.123E4 +/ (0.123E4, ~0.22250738585072014E~307) = ~inf +nextAfter (0.123E4, ~0.22250738585072014E~307) = 0.12299999999999998E4 +rem (0.123E4, ~0.22250738585072014E~307) = ~inf +* (0.123E4, ~0.11125369292536007E~307) = ~0.13684204229819289E~304 ++ (0.123E4, ~0.11125369292536007E~307) = 0.123E4 +- (0.123E4, ~0.11125369292536007E~307) = 0.123E4 +/ (0.123E4, ~0.11125369292536007E~307) = ~inf +nextAfter (0.123E4, ~0.11125369292536007E~307) = 0.12299999999999998E4 +rem (0.123E4, ~0.11125369292536007E~307) = ~inf +* (0.123E4, ~0.5E~323) = ~0.6077E~320 ++ (0.123E4, ~0.5E~323) = 0.123E4 +- (0.123E4, ~0.5E~323) = 0.123E4 +/ (0.123E4, ~0.5E~323) = ~inf +nextAfter (0.123E4, ~0.5E~323) = 0.12299999999999998E4 +rem (0.123E4, ~0.5E~323) = ~inf +* (0.123E4, ~0.0) = ~0.0 ++ (0.123E4, ~0.0) = 0.123E4 +- (0.123E4, ~0.0) = 0.123E4 +/ (0.123E4, ~0.0) = ~inf +nextAfter (0.123E4, ~0.0) = 0.12299999999999998E4 +rem (0.123E4, ~0.0) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300000000000002E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E4, ~inf) = ~inf ++ (0.123E4, ~inf) = ~inf +- (0.123E4, ~inf) = inf +/ (0.123E4, ~inf) = ~0.0 +nextAfter (0.123E4, ~inf) = 0.12299999999999998E4 +rem (0.123E4, ~inf) = 0.123E4 +* (0.123E4, nan) = nan ++ (0.123E4, nan) = nan +- (0.123E4, nan) = nan +/ (0.123E4, nan) = nan +nextAfter (0.123E4, nan) = nan +rem (0.123E4, nan) = nan +* (0.123E4, inf) = inf ++ (0.123E4, inf) = inf +- (0.123E4, inf) = ~inf +/ (0.123E4, inf) = 0.0 +nextAfter (0.123E4, inf) = 0.12300000000000002E4 +rem (0.123E4, inf) = 0.123E4 +* (0.123E2, 0.17976931348623157E309) = inf ++ (0.123E2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E2, 0.17976931348623157E309) = 0.6842102114909646E~307 +nextAfter (0.123E2, 0.17976931348623157E309) = 0.12300000000000002E2 +rem (0.123E2, 0.17976931348623157E309) = 0.123E2 +* (0.123E2, 0.8988465674311579E308) = inf ++ (0.123E2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E2, 0.8988465674311579E308) = 0.13684204229819291E~306 +nextAfter (0.123E2, 0.8988465674311579E308) = 0.12300000000000002E2 +rem (0.123E2, 0.8988465674311579E308) = 0.123E2 +* (0.123E2, 0.123E4) = 0.15129E5 ++ (0.123E2, 0.123E4) = 0.12423E4 +- (0.123E2, 0.123E4) = ~0.12177E4 +/ (0.123E2, 0.123E4) = 0.1E~1 +nextAfter (0.123E2, 0.123E4) = 0.12300000000000002E2 +rem (0.123E2, 0.123E4) = 0.123E2 +* (0.123E2, 0.123E2) = 0.15129000000000002E3 ++ (0.123E2, 0.123E2) = 0.246E2 +- (0.123E2, 0.123E2) = 0.0 +/ (0.123E2, 0.123E2) = 0.1E1 +nextAfter (0.123E2, 0.123E2) = 0.123E2 +rem (0.123E2, 0.123E2) = 0.0 +* (0.123E2, 0.3141592653589793E1) = 0.3864158963915446E2 ++ (0.123E2, 0.3141592653589793E1) = 0.15441592653589794E2 +- (0.123E2, 0.3141592653589793E1) = 0.9158407346410208E1 +/ (0.123E2, 0.3141592653589793E1) = 0.3915211600060626E1 +nextAfter (0.123E2, 0.3141592653589793E1) = 0.12299999999999999E2 +rem (0.123E2, 0.3141592653589793E1) = 0.28752220392306214E1 +* (0.123E2, 0.2718281828459045E1) = 0.33434866490046254E2 ++ (0.123E2, 0.2718281828459045E1) = 0.15018281828459045E2 +- (0.123E2, 0.2718281828459045E1) = 0.9581718171540956E1 +/ (0.123E2, 0.2718281828459045E1) = 0.4524917126408741E1 +nextAfter (0.123E2, 0.2718281828459045E1) = 0.12299999999999999E2 +rem (0.123E2, 0.2718281828459045E1) = 0.14268726861638203E1 +* (0.123E2, 0.123E1) = 0.15129000000000001E2 ++ (0.123E2, 0.123E1) = 0.13530000000000001E2 +- (0.123E2, 0.123E1) = 0.1107E2 +/ (0.123E2, 0.123E1) = 0.1E2 +nextAfter (0.123E2, 0.123E1) = 0.12299999999999999E2 +rem (0.123E2, 0.123E1) = 0.8881784197001252E~15 +* (0.123E2, 0.123) = 0.15129000000000001E1 ++ (0.123E2, 0.123) = 0.12423E2 +- (0.123E2, 0.123) = 0.12177000000000001E2 +/ (0.123E2, 0.123) = 0.10000000000000001E3 +nextAfter (0.123E2, 0.123) = 0.12299999999999999E2 +rem (0.123E2, 0.123) = 0.8881784197001252E~15 +* (0.123E2, 0.123E~2) = 0.15129E~1 ++ (0.123E2, 0.123E~2) = 0.1230123E2 +- (0.123E2, 0.123E~2) = 0.12298770000000001E2 +/ (0.123E2, 0.123E~2) = 0.1E5 +nextAfter (0.123E2, 0.123E~2) = 0.12299999999999999E2 +rem (0.123E2, 0.123E~2) = 0.9749145934989656E~15 +* (0.123E2, 0.22250738585072014E~307) = 0.2736840845963858E~306 ++ (0.123E2, 0.22250738585072014E~307) = 0.123E2 +- (0.123E2, 0.22250738585072014E~307) = 0.123E2 +/ (0.123E2, 0.22250738585072014E~307) = inf +nextAfter (0.123E2, 0.22250738585072014E~307) = 0.12299999999999999E2 +rem (0.123E2, 0.22250738585072014E~307) = ~inf +* (0.123E2, 0.11125369292536007E~307) = 0.1368420422981929E~306 ++ (0.123E2, 0.11125369292536007E~307) = 0.123E2 +- (0.123E2, 0.11125369292536007E~307) = 0.123E2 +/ (0.123E2, 0.11125369292536007E~307) = inf +nextAfter (0.123E2, 0.11125369292536007E~307) = 0.12299999999999999E2 +rem (0.123E2, 0.11125369292536007E~307) = ~inf +* (0.123E2, 0.5E~323) = 0.6E~322 ++ (0.123E2, 0.5E~323) = 0.123E2 +- (0.123E2, 0.5E~323) = 0.123E2 +/ (0.123E2, 0.5E~323) = inf +nextAfter (0.123E2, 0.5E~323) = 0.12299999999999999E2 +rem (0.123E2, 0.5E~323) = ~inf +* (0.123E2, 0.0) = 0.0 ++ (0.123E2, 0.0) = 0.123E2 +- (0.123E2, 0.0) = 0.123E2 +/ (0.123E2, 0.0) = inf +nextAfter (0.123E2, 0.0) = 0.12299999999999999E2 +rem (0.123E2, 0.0) = nan +* (0.123E2, ~0.17976931348623157E309) = ~inf ++ (0.123E2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E2, ~0.17976931348623157E309) = ~0.6842102114909646E~307 +nextAfter (0.123E2, ~0.17976931348623157E309) = 0.12299999999999999E2 +rem (0.123E2, ~0.17976931348623157E309) = 0.123E2 +* (0.123E2, ~0.8988465674311579E308) = ~inf ++ (0.123E2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E2, ~0.8988465674311579E308) = ~0.13684204229819291E~306 +nextAfter (0.123E2, ~0.8988465674311579E308) = 0.12299999999999999E2 +rem (0.123E2, ~0.8988465674311579E308) = 0.123E2 +* (0.123E2, ~0.123E4) = ~0.15129E5 ++ (0.123E2, ~0.123E4) = ~0.12177E4 +- (0.123E2, ~0.123E4) = 0.12423E4 +/ (0.123E2, ~0.123E4) = ~0.1E~1 +nextAfter (0.123E2, ~0.123E4) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E4) = 0.123E2 +* (0.123E2, ~0.123E2) = ~0.15129000000000002E3 ++ (0.123E2, ~0.123E2) = 0.0 +- (0.123E2, ~0.123E2) = 0.246E2 +/ (0.123E2, ~0.123E2) = ~0.1E1 +nextAfter (0.123E2, ~0.123E2) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E2) = 0.0 +* (0.123E2, ~0.3141592653589793E1) = ~0.3864158963915446E2 ++ (0.123E2, ~0.3141592653589793E1) = 0.9158407346410208E1 +- (0.123E2, ~0.3141592653589793E1) = 0.15441592653589794E2 +/ (0.123E2, ~0.3141592653589793E1) = ~0.3915211600060626E1 +nextAfter (0.123E2, ~0.3141592653589793E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.3141592653589793E1) = 0.28752220392306214E1 +* (0.123E2, ~0.2718281828459045E1) = ~0.33434866490046254E2 ++ (0.123E2, ~0.2718281828459045E1) = 0.9581718171540956E1 +- (0.123E2, ~0.2718281828459045E1) = 0.15018281828459045E2 +/ (0.123E2, ~0.2718281828459045E1) = ~0.4524917126408741E1 +nextAfter (0.123E2, ~0.2718281828459045E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.2718281828459045E1) = 0.14268726861638203E1 +* (0.123E2, ~0.123E1) = ~0.15129000000000001E2 ++ (0.123E2, ~0.123E1) = 0.1107E2 +- (0.123E2, ~0.123E1) = 0.13530000000000001E2 +/ (0.123E2, ~0.123E1) = ~0.1E2 +nextAfter (0.123E2, ~0.123E1) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E1) = 0.8881784197001252E~15 +* (0.123E2, ~0.123) = ~0.15129000000000001E1 ++ (0.123E2, ~0.123) = 0.12177000000000001E2 +- (0.123E2, ~0.123) = 0.12423E2 +/ (0.123E2, ~0.123) = ~0.10000000000000001E3 +nextAfter (0.123E2, ~0.123) = 0.12299999999999999E2 +rem (0.123E2, ~0.123) = 0.8881784197001252E~15 +* (0.123E2, ~0.123E~2) = ~0.15129E~1 ++ (0.123E2, ~0.123E~2) = 0.12298770000000001E2 +- (0.123E2, ~0.123E~2) = 0.1230123E2 +/ (0.123E2, ~0.123E~2) = ~0.1E5 +nextAfter (0.123E2, ~0.123E~2) = 0.12299999999999999E2 +rem (0.123E2, ~0.123E~2) = 0.9749145934989656E~15 +* (0.123E2, ~0.22250738585072014E~307) = ~0.2736840845963858E~306 ++ (0.123E2, ~0.22250738585072014E~307) = 0.123E2 +- (0.123E2, ~0.22250738585072014E~307) = 0.123E2 +/ (0.123E2, ~0.22250738585072014E~307) = ~inf +nextAfter (0.123E2, ~0.22250738585072014E~307) = 0.12299999999999999E2 +rem (0.123E2, ~0.22250738585072014E~307) = ~inf +* (0.123E2, ~0.11125369292536007E~307) = ~0.1368420422981929E~306 ++ (0.123E2, ~0.11125369292536007E~307) = 0.123E2 +- (0.123E2, ~0.11125369292536007E~307) = 0.123E2 +/ (0.123E2, ~0.11125369292536007E~307) = ~inf +nextAfter (0.123E2, ~0.11125369292536007E~307) = 0.12299999999999999E2 +rem (0.123E2, ~0.11125369292536007E~307) = ~inf +* (0.123E2, ~0.5E~323) = ~0.6E~322 ++ (0.123E2, ~0.5E~323) = 0.123E2 +- (0.123E2, ~0.5E~323) = 0.123E2 +/ (0.123E2, ~0.5E~323) = ~inf +nextAfter (0.123E2, ~0.5E~323) = 0.12299999999999999E2 +rem (0.123E2, ~0.5E~323) = ~inf +* (0.123E2, ~0.0) = ~0.0 ++ (0.123E2, ~0.0) = 0.123E2 +- (0.123E2, ~0.0) = 0.123E2 +/ (0.123E2, ~0.0) = ~inf +nextAfter (0.123E2, ~0.0) = 0.12299999999999999E2 +rem (0.123E2, ~0.0) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300000000000002E2 +rem (0.123E2, inf) = 0.123E2 +* (0.123E2, ~inf) = ~inf ++ (0.123E2, ~inf) = ~inf +- (0.123E2, ~inf) = inf +/ (0.123E2, ~inf) = ~0.0 +nextAfter (0.123E2, ~inf) = 0.12299999999999999E2 +rem (0.123E2, ~inf) = 0.123E2 +* (0.123E2, nan) = nan ++ (0.123E2, nan) = nan +- (0.123E2, nan) = nan +/ (0.123E2, nan) = nan +nextAfter (0.123E2, nan) = nan +rem (0.123E2, nan) = nan +* (0.123E2, inf) = inf ++ (0.123E2, inf) = inf +- (0.123E2, inf) = ~inf +/ (0.123E2, inf) = 0.0 +nextAfter (0.123E2, inf) = 0.12300000000000002E2 +rem (0.123E2, inf) = 0.123E2 +* (0.3141592653589793E1, 0.17976931348623157E309) = inf ++ (0.3141592653589793E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.3141592653589793E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.3141592653589793E1, 0.17976931348623157E309) = 0.17475689218952297E~307 +nextAfter (0.3141592653589793E1, 0.17976931348623157E309) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.17976931348623157E309) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.8988465674311579E308) = inf ++ (0.3141592653589793E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.3141592653589793E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.3141592653589793E1, 0.8988465674311579E308) = 0.349513784379046E~307 +nextAfter (0.3141592653589793E1, 0.8988465674311579E308) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.8988465674311579E308) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.123E4) = 0.38641589639154454E4 ++ (0.3141592653589793E1, 0.123E4) = 0.123314159265359E4 +- (0.3141592653589793E1, 0.123E4) = ~0.122685840734641E4 +/ (0.3141592653589793E1, 0.123E4) = 0.25541403687721893E~2 +nextAfter (0.3141592653589793E1, 0.123E4) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.123E4) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.123E2) = 0.3864158963915446E2 ++ (0.3141592653589793E1, 0.123E2) = 0.15441592653589794E2 +- (0.3141592653589793E1, 0.123E2) = ~0.9158407346410208E1 +/ (0.3141592653589793E1, 0.123E2) = 0.2554140368772189 +nextAfter (0.3141592653589793E1, 0.123E2) = 0.31415926535897936E1 +rem (0.3141592653589793E1, 0.123E2) = 0.3141592653589793E1 +* (0.3141592653589793E1, 0.3141592653589793E1) = 0.9869604401089358E1 ++ (0.3141592653589793E1, 0.3141592653589793E1) = 0.6283185307179586E1 +- (0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +/ (0.3141592653589793E1, 0.3141592653589793E1) = 0.1E1 +nextAfter (0.3141592653589793E1, 0.3141592653589793E1) = 0.3141592653589793E1 +rem (0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +* (0.3141592653589793E1, 0.2718281828459045E1) = 0.8539734222673566E1 ++ (0.3141592653589793E1, 0.2718281828459045E1) = 0.5859874482048838E1 +- (0.3141592653589793E1, 0.2718281828459045E1) = 0.423310825130748 +/ (0.3141592653589793E1, 0.2718281828459045E1) = 0.11557273497909217E1 +nextAfter (0.3141592653589793E1, 0.2718281828459045E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.2718281828459045E1) = 0.423310825130748 +* (0.3141592653589793E1, 0.123E1) = 0.38641589639154454E1 ++ (0.3141592653589793E1, 0.123E1) = 0.43715926535897935E1 +- (0.3141592653589793E1, 0.123E1) = 0.19115926535897931E1 +/ (0.3141592653589793E1, 0.123E1) = 0.25541403687721895E1 +nextAfter (0.3141592653589793E1, 0.123E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123E1) = 0.6815926535897932 +* (0.3141592653589793E1, 0.123) = 0.38641589639154456 ++ (0.3141592653589793E1, 0.123) = 0.32645926535897933E1 +- (0.3141592653589793E1, 0.123) = 0.3018592653589793E1 +/ (0.3141592653589793E1, 0.123) = 0.25541403687721896E2 +nextAfter (0.3141592653589793E1, 0.123) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123) = 0.6659265358979316E~1 +* (0.3141592653589793E1, 0.123E~2) = 0.38641589639154456E~2 ++ (0.3141592653589793E1, 0.123E~2) = 0.3142822653589793E1 +- (0.3141592653589793E1, 0.123E~2) = 0.3140362653589793E1 +/ (0.3141592653589793E1, 0.123E~2) = 0.25541403687721895E4 +nextAfter (0.3141592653589793E1, 0.123E~2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.123E~2) = 0.17265358979318352E~3 +* (0.3141592653589793E1, 0.22250738585072014E~307) = 0.6990275687580919E~307 ++ (0.3141592653589793E1, 0.22250738585072014E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.22250738585072014E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.22250738585072014E~307) = 0.14119048864730642E309 +nextAfter (0.3141592653589793E1, 0.22250738585072014E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.22250738585072014E~307) = 0.0 +* (0.3141592653589793E1, 0.11125369292536007E~307) = 0.34951378437904593E~307 ++ (0.3141592653589793E1, 0.11125369292536007E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.11125369292536007E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.11125369292536007E~307) = inf +nextAfter (0.3141592653589793E1, 0.11125369292536007E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.11125369292536007E~307) = ~inf +* (0.3141592653589793E1, 0.5E~323) = 0.15E~322 ++ (0.3141592653589793E1, 0.5E~323) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.5E~323) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.5E~323) = inf +nextAfter (0.3141592653589793E1, 0.5E~323) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.5E~323) = ~inf +* (0.3141592653589793E1, 0.0) = 0.0 ++ (0.3141592653589793E1, 0.0) = 0.3141592653589793E1 +- (0.3141592653589793E1, 0.0) = 0.3141592653589793E1 +/ (0.3141592653589793E1, 0.0) = inf +nextAfter (0.3141592653589793E1, 0.0) = 0.31415926535897927E1 +rem (0.3141592653589793E1, 0.0) = nan +* (0.3141592653589793E1, ~0.17976931348623157E309) = ~inf ++ (0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.3141592653589793E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17475689218952297E~307 +nextAfter (0.3141592653589793E1, ~0.17976931348623157E309) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.17976931348623157E309) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.8988465674311579E308) = ~inf ++ (0.3141592653589793E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.3141592653589793E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.3141592653589793E1, ~0.8988465674311579E308) = ~0.349513784379046E~307 +nextAfter (0.3141592653589793E1, ~0.8988465674311579E308) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.8988465674311579E308) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.123E4) = ~0.38641589639154454E4 ++ (0.3141592653589793E1, ~0.123E4) = ~0.122685840734641E4 +- (0.3141592653589793E1, ~0.123E4) = 0.123314159265359E4 +/ (0.3141592653589793E1, ~0.123E4) = ~0.25541403687721893E~2 +nextAfter (0.3141592653589793E1, ~0.123E4) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E4) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.123E2) = ~0.3864158963915446E2 ++ (0.3141592653589793E1, ~0.123E2) = ~0.9158407346410208E1 +- (0.3141592653589793E1, ~0.123E2) = 0.15441592653589794E2 +/ (0.3141592653589793E1, ~0.123E2) = ~0.2554140368772189 +nextAfter (0.3141592653589793E1, ~0.123E2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E2) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~0.3141592653589793E1) = ~0.9869604401089358E1 ++ (0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +- (0.3141592653589793E1, ~0.3141592653589793E1) = 0.6283185307179586E1 +/ (0.3141592653589793E1, ~0.3141592653589793E1) = ~0.1E1 +nextAfter (0.3141592653589793E1, ~0.3141592653589793E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +* (0.3141592653589793E1, ~0.2718281828459045E1) = ~0.8539734222673566E1 ++ (0.3141592653589793E1, ~0.2718281828459045E1) = 0.423310825130748 +- (0.3141592653589793E1, ~0.2718281828459045E1) = 0.5859874482048838E1 +/ (0.3141592653589793E1, ~0.2718281828459045E1) = ~0.11557273497909217E1 +nextAfter (0.3141592653589793E1, ~0.2718281828459045E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.2718281828459045E1) = 0.423310825130748 +* (0.3141592653589793E1, ~0.123E1) = ~0.38641589639154454E1 ++ (0.3141592653589793E1, ~0.123E1) = 0.19115926535897931E1 +- (0.3141592653589793E1, ~0.123E1) = 0.43715926535897935E1 +/ (0.3141592653589793E1, ~0.123E1) = ~0.25541403687721895E1 +nextAfter (0.3141592653589793E1, ~0.123E1) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E1) = 0.6815926535897932 +* (0.3141592653589793E1, ~0.123) = ~0.38641589639154456 ++ (0.3141592653589793E1, ~0.123) = 0.3018592653589793E1 +- (0.3141592653589793E1, ~0.123) = 0.32645926535897933E1 +/ (0.3141592653589793E1, ~0.123) = ~0.25541403687721896E2 +nextAfter (0.3141592653589793E1, ~0.123) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123) = 0.6659265358979316E~1 +* (0.3141592653589793E1, ~0.123E~2) = ~0.38641589639154456E~2 ++ (0.3141592653589793E1, ~0.123E~2) = 0.3140362653589793E1 +- (0.3141592653589793E1, ~0.123E~2) = 0.3142822653589793E1 +/ (0.3141592653589793E1, ~0.123E~2) = ~0.25541403687721895E4 +nextAfter (0.3141592653589793E1, ~0.123E~2) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.123E~2) = 0.17265358979318352E~3 +* (0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.6990275687580919E~307 ++ (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.14119048864730642E309 +nextAfter (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.22250738585072014E~307) = 0.0 +* (0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.34951378437904593E~307 ++ (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.11125369292536007E~307) = ~inf +nextAfter (0.3141592653589793E1, ~0.11125369292536007E~307) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.11125369292536007E~307) = ~inf +* (0.3141592653589793E1, ~0.5E~323) = ~0.15E~322 ++ (0.3141592653589793E1, ~0.5E~323) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.5E~323) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.5E~323) = ~inf +nextAfter (0.3141592653589793E1, ~0.5E~323) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.5E~323) = ~inf +* (0.3141592653589793E1, ~0.0) = ~0.0 ++ (0.3141592653589793E1, ~0.0) = 0.3141592653589793E1 +- (0.3141592653589793E1, ~0.0) = 0.3141592653589793E1 +/ (0.3141592653589793E1, ~0.0) = ~inf +nextAfter (0.3141592653589793E1, ~0.0) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~0.0) = nan +* (0.3141592653589793E1, inf) = inf ++ (0.3141592653589793E1, inf) = inf +- (0.3141592653589793E1, inf) = ~inf +/ (0.3141592653589793E1, inf) = 0.0 +nextAfter (0.3141592653589793E1, inf) = 0.31415926535897936E1 +rem (0.3141592653589793E1, inf) = 0.3141592653589793E1 +* (0.3141592653589793E1, ~inf) = ~inf ++ (0.3141592653589793E1, ~inf) = ~inf +- (0.3141592653589793E1, ~inf) = inf +/ (0.3141592653589793E1, ~inf) = ~0.0 +nextAfter (0.3141592653589793E1, ~inf) = 0.31415926535897927E1 +rem (0.3141592653589793E1, ~inf) = 0.3141592653589793E1 +* (0.3141592653589793E1, nan) = nan ++ (0.3141592653589793E1, nan) = nan +- (0.3141592653589793E1, nan) = nan +/ (0.3141592653589793E1, nan) = nan +nextAfter (0.3141592653589793E1, nan) = nan +rem (0.3141592653589793E1, nan) = nan +* (0.3141592653589793E1, inf) = inf ++ (0.3141592653589793E1, inf) = inf +- (0.3141592653589793E1, inf) = ~inf +/ (0.3141592653589793E1, inf) = 0.0 +nextAfter (0.3141592653589793E1, inf) = 0.31415926535897936E1 +rem (0.3141592653589793E1, inf) = 0.3141592653589793E1 +* (0.2718281828459045E1, 0.17976931348623157E309) = inf ++ (0.2718281828459045E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.2718281828459045E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.2718281828459045E1, 0.17976931348623157E309) = 0.15120944591398447E~307 +nextAfter (0.2718281828459045E1, 0.17976931348623157E309) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.17976931348623157E309) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.8988465674311579E308) = inf ++ (0.2718281828459045E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.2718281828459045E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.2718281828459045E1, 0.8988465674311579E308) = 0.30241889182796895E~307 +nextAfter (0.2718281828459045E1, 0.8988465674311579E308) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.8988465674311579E308) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.123E4) = 0.33434866490046256E4 ++ (0.2718281828459045E1, 0.123E4) = 0.1232718281828459E4 +- (0.2718281828459045E1, 0.123E4) = ~0.1227281718171541E4 +/ (0.2718281828459045E1, 0.123E4) = 0.22099852263894678E~2 +nextAfter (0.2718281828459045E1, 0.123E4) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.123E4) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.123E2) = 0.33434866490046254E2 ++ (0.2718281828459045E1, 0.123E2) = 0.15018281828459045E2 +- (0.2718281828459045E1, 0.123E2) = ~0.9581718171540956E1 +/ (0.2718281828459045E1, 0.123E2) = 0.22099852263894673 +nextAfter (0.2718281828459045E1, 0.123E2) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.123E2) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.3141592653589793E1) = 0.8539734222673566E1 ++ (0.2718281828459045E1, 0.3141592653589793E1) = 0.5859874482048838E1 +- (0.2718281828459045E1, 0.3141592653589793E1) = ~0.423310825130748 +/ (0.2718281828459045E1, 0.3141592653589793E1) = 0.8652559794322651 +nextAfter (0.2718281828459045E1, 0.3141592653589793E1) = 0.27182818284590455E1 +rem (0.2718281828459045E1, 0.3141592653589793E1) = 0.2718281828459045E1 +* (0.2718281828459045E1, 0.2718281828459045E1) = 0.73890560989306495E1 ++ (0.2718281828459045E1, 0.2718281828459045E1) = 0.543656365691809E1 +- (0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +/ (0.2718281828459045E1, 0.2718281828459045E1) = 0.1E1 +nextAfter (0.2718281828459045E1, 0.2718281828459045E1) = 0.2718281828459045E1 +rem (0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +* (0.2718281828459045E1, 0.123E1) = 0.33434866490046256E1 ++ (0.2718281828459045E1, 0.123E1) = 0.3948281828459045E1 +- (0.2718281828459045E1, 0.123E1) = 0.1488281828459045E1 +/ (0.2718281828459045E1, 0.123E1) = 0.22099852263894677E1 +nextAfter (0.2718281828459045E1, 0.123E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123E1) = 0.2582818284590451 +* (0.2718281828459045E1, 0.123) = 0.33434866490046256 ++ (0.2718281828459045E1, 0.123) = 0.2841281828459045E1 +- (0.2718281828459045E1, 0.123) = 0.25952818284590453E1 +/ (0.2718281828459045E1, 0.123) = 0.22099852263894675E2 +nextAfter (0.2718281828459045E1, 0.123) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123) = 0.1228182845904513E~1 +* (0.2718281828459045E1, 0.123E~2) = 0.33434866490046253E~2 ++ (0.2718281828459045E1, 0.123E~2) = 0.2719511828459045E1 +- (0.2718281828459045E1, 0.123E~2) = 0.2717051828459045E1 +/ (0.2718281828459045E1, 0.123E~2) = 0.22099852263894677E4 +nextAfter (0.2718281828459045E1, 0.123E~2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.123E~2) = 0.12118284590451492E~2 +* (0.2718281828459045E1, 0.22250738585072014E~307) = 0.6048377836559378E~307 ++ (0.2718281828459045E1, 0.22250738585072014E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.22250738585072014E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.22250738585072014E~307) = 0.12216591454104522E309 +nextAfter (0.2718281828459045E1, 0.22250738585072014E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.22250738585072014E~307) = 0.0 +* (0.2718281828459045E1, 0.11125369292536007E~307) = 0.3024188918279689E~307 ++ (0.2718281828459045E1, 0.11125369292536007E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.11125369292536007E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.11125369292536007E~307) = inf +nextAfter (0.2718281828459045E1, 0.11125369292536007E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.11125369292536007E~307) = ~inf +* (0.2718281828459045E1, 0.5E~323) = 0.15E~322 ++ (0.2718281828459045E1, 0.5E~323) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.5E~323) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.5E~323) = inf +nextAfter (0.2718281828459045E1, 0.5E~323) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.5E~323) = ~inf +* (0.2718281828459045E1, 0.0) = 0.0 ++ (0.2718281828459045E1, 0.0) = 0.2718281828459045E1 +- (0.2718281828459045E1, 0.0) = 0.2718281828459045E1 +/ (0.2718281828459045E1, 0.0) = inf +nextAfter (0.2718281828459045E1, 0.0) = 0.27182818284590446E1 +rem (0.2718281828459045E1, 0.0) = nan +* (0.2718281828459045E1, ~0.17976931348623157E309) = ~inf ++ (0.2718281828459045E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.2718281828459045E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.2718281828459045E1, ~0.17976931348623157E309) = ~0.15120944591398447E~307 +nextAfter (0.2718281828459045E1, ~0.17976931348623157E309) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.17976931348623157E309) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.8988465674311579E308) = ~inf ++ (0.2718281828459045E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.2718281828459045E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.2718281828459045E1, ~0.8988465674311579E308) = ~0.30241889182796895E~307 +nextAfter (0.2718281828459045E1, ~0.8988465674311579E308) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.8988465674311579E308) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.123E4) = ~0.33434866490046256E4 ++ (0.2718281828459045E1, ~0.123E4) = ~0.1227281718171541E4 +- (0.2718281828459045E1, ~0.123E4) = 0.1232718281828459E4 +/ (0.2718281828459045E1, ~0.123E4) = ~0.22099852263894678E~2 +nextAfter (0.2718281828459045E1, ~0.123E4) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E4) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.123E2) = ~0.33434866490046254E2 ++ (0.2718281828459045E1, ~0.123E2) = ~0.9581718171540956E1 +- (0.2718281828459045E1, ~0.123E2) = 0.15018281828459045E2 +/ (0.2718281828459045E1, ~0.123E2) = ~0.22099852263894673 +nextAfter (0.2718281828459045E1, ~0.123E2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E2) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.8539734222673566E1 ++ (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.423310825130748 +- (0.2718281828459045E1, ~0.3141592653589793E1) = 0.5859874482048838E1 +/ (0.2718281828459045E1, ~0.3141592653589793E1) = ~0.8652559794322651 +nextAfter (0.2718281828459045E1, ~0.3141592653589793E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.3141592653589793E1) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~0.2718281828459045E1) = ~0.73890560989306495E1 ++ (0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +- (0.2718281828459045E1, ~0.2718281828459045E1) = 0.543656365691809E1 +/ (0.2718281828459045E1, ~0.2718281828459045E1) = ~0.1E1 +nextAfter (0.2718281828459045E1, ~0.2718281828459045E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +* (0.2718281828459045E1, ~0.123E1) = ~0.33434866490046256E1 ++ (0.2718281828459045E1, ~0.123E1) = 0.1488281828459045E1 +- (0.2718281828459045E1, ~0.123E1) = 0.3948281828459045E1 +/ (0.2718281828459045E1, ~0.123E1) = ~0.22099852263894677E1 +nextAfter (0.2718281828459045E1, ~0.123E1) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E1) = 0.2582818284590451 +* (0.2718281828459045E1, ~0.123) = ~0.33434866490046256 ++ (0.2718281828459045E1, ~0.123) = 0.25952818284590453E1 +- (0.2718281828459045E1, ~0.123) = 0.2841281828459045E1 +/ (0.2718281828459045E1, ~0.123) = ~0.22099852263894675E2 +nextAfter (0.2718281828459045E1, ~0.123) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123) = 0.1228182845904513E~1 +* (0.2718281828459045E1, ~0.123E~2) = ~0.33434866490046253E~2 ++ (0.2718281828459045E1, ~0.123E~2) = 0.2717051828459045E1 +- (0.2718281828459045E1, ~0.123E~2) = 0.2719511828459045E1 +/ (0.2718281828459045E1, ~0.123E~2) = ~0.22099852263894677E4 +nextAfter (0.2718281828459045E1, ~0.123E~2) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.123E~2) = 0.12118284590451492E~2 +* (0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.6048377836559378E~307 ++ (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.12216591454104522E309 +nextAfter (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.22250738585072014E~307) = 0.0 +* (0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.3024188918279689E~307 ++ (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.11125369292536007E~307) = ~inf +nextAfter (0.2718281828459045E1, ~0.11125369292536007E~307) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.11125369292536007E~307) = ~inf +* (0.2718281828459045E1, ~0.5E~323) = ~0.15E~322 ++ (0.2718281828459045E1, ~0.5E~323) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.5E~323) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.5E~323) = ~inf +nextAfter (0.2718281828459045E1, ~0.5E~323) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.5E~323) = ~inf +* (0.2718281828459045E1, ~0.0) = ~0.0 ++ (0.2718281828459045E1, ~0.0) = 0.2718281828459045E1 +- (0.2718281828459045E1, ~0.0) = 0.2718281828459045E1 +/ (0.2718281828459045E1, ~0.0) = ~inf +nextAfter (0.2718281828459045E1, ~0.0) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~0.0) = nan +* (0.2718281828459045E1, inf) = inf ++ (0.2718281828459045E1, inf) = inf +- (0.2718281828459045E1, inf) = ~inf +/ (0.2718281828459045E1, inf) = 0.0 +nextAfter (0.2718281828459045E1, inf) = 0.27182818284590455E1 +rem (0.2718281828459045E1, inf) = 0.2718281828459045E1 +* (0.2718281828459045E1, ~inf) = ~inf ++ (0.2718281828459045E1, ~inf) = ~inf +- (0.2718281828459045E1, ~inf) = inf +/ (0.2718281828459045E1, ~inf) = ~0.0 +nextAfter (0.2718281828459045E1, ~inf) = 0.27182818284590446E1 +rem (0.2718281828459045E1, ~inf) = 0.2718281828459045E1 +* (0.2718281828459045E1, nan) = nan ++ (0.2718281828459045E1, nan) = nan +- (0.2718281828459045E1, nan) = nan +/ (0.2718281828459045E1, nan) = nan +nextAfter (0.2718281828459045E1, nan) = nan +rem (0.2718281828459045E1, nan) = nan +* (0.2718281828459045E1, inf) = inf ++ (0.2718281828459045E1, inf) = inf +- (0.2718281828459045E1, inf) = ~inf +/ (0.2718281828459045E1, inf) = 0.0 +nextAfter (0.2718281828459045E1, inf) = 0.27182818284590455E1 +rem (0.2718281828459045E1, inf) = 0.2718281828459045E1 +* (0.123E1, 0.17976931348623157E309) = inf ++ (0.123E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E1, 0.17976931348623157E309) = 0.6842102114909647E~308 +nextAfter (0.123E1, 0.17976931348623157E309) = 0.12300000000000002E1 +rem (0.123E1, 0.17976931348623157E309) = 0.123E1 +* (0.123E1, 0.8988465674311579E308) = 0.1105581277940324E309 ++ (0.123E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E1, 0.8988465674311579E308) = 0.1368420422981929E~307 +nextAfter (0.123E1, 0.8988465674311579E308) = 0.12300000000000002E1 +rem (0.123E1, 0.8988465674311579E308) = 0.123E1 +* (0.123E1, 0.123E4) = 0.15129E4 ++ (0.123E1, 0.123E4) = 0.123123E4 +- (0.123E1, 0.123E4) = ~0.122877E4 +/ (0.123E1, 0.123E4) = 0.1E~2 +nextAfter (0.123E1, 0.123E4) = 0.12300000000000002E1 +rem (0.123E1, 0.123E4) = 0.123E1 +* (0.123E1, 0.123E2) = 0.15129000000000001E2 ++ (0.123E1, 0.123E2) = 0.13530000000000001E2 +- (0.123E1, 0.123E2) = ~0.1107E2 +/ (0.123E1, 0.123E2) = 0.9999999999999999E~1 +nextAfter (0.123E1, 0.123E2) = 0.12300000000000002E1 +rem (0.123E1, 0.123E2) = 0.123E1 +* (0.123E1, 0.3141592653589793E1) = 0.38641589639154454E1 ++ (0.123E1, 0.3141592653589793E1) = 0.43715926535897935E1 +- (0.123E1, 0.3141592653589793E1) = ~0.19115926535897931E1 +/ (0.123E1, 0.3141592653589793E1) = 0.3915211600060625 +nextAfter (0.123E1, 0.3141592653589793E1) = 0.12300000000000002E1 +rem (0.123E1, 0.3141592653589793E1) = 0.123E1 +* (0.123E1, 0.2718281828459045E1) = 0.33434866490046256E1 ++ (0.123E1, 0.2718281828459045E1) = 0.3948281828459045E1 +- (0.123E1, 0.2718281828459045E1) = ~0.1488281828459045E1 +/ (0.123E1, 0.2718281828459045E1) = 0.45249171264087407 +nextAfter (0.123E1, 0.2718281828459045E1) = 0.12300000000000002E1 +rem (0.123E1, 0.2718281828459045E1) = 0.123E1 +* (0.123E1, 0.123E1) = 0.15129E1 ++ (0.123E1, 0.123E1) = 0.246E1 +- (0.123E1, 0.123E1) = 0.0 +/ (0.123E1, 0.123E1) = 0.1E1 +nextAfter (0.123E1, 0.123E1) = 0.123E1 +rem (0.123E1, 0.123E1) = 0.0 +* (0.123E1, 0.123) = 0.15129 ++ (0.123E1, 0.123) = 0.1353E1 +- (0.123E1, 0.123) = 0.1107E1 +/ (0.123E1, 0.123) = 0.1E2 +nextAfter (0.123E1, 0.123) = 0.12299999999999998E1 +rem (0.123E1, 0.123) = 0.0 +* (0.123E1, 0.123E~2) = 0.15129E~2 ++ (0.123E1, 0.123E~2) = 0.123123E1 +- (0.123E1, 0.123E~2) = 0.122877E1 +/ (0.123E1, 0.123E~2) = 0.1E4 +nextAfter (0.123E1, 0.123E~2) = 0.12299999999999998E1 +rem (0.123E1, 0.123E~2) = 0.8673617379884035E~17 +* (0.123E1, 0.22250738585072014E~307) = 0.27368408459638577E~307 ++ (0.123E1, 0.22250738585072014E~307) = 0.123E1 +- (0.123E1, 0.22250738585072014E~307) = 0.123E1 +/ (0.123E1, 0.22250738585072014E~307) = 0.5527906389701621E308 +nextAfter (0.123E1, 0.22250738585072014E~307) = 0.12299999999999998E1 +rem (0.123E1, 0.22250738585072014E~307) = 0.0 +* (0.123E1, 0.11125369292536007E~307) = 0.1368420422981929E~307 ++ (0.123E1, 0.11125369292536007E~307) = 0.123E1 +- (0.123E1, 0.11125369292536007E~307) = 0.123E1 +/ (0.123E1, 0.11125369292536007E~307) = 0.11055812779403243E309 +nextAfter (0.123E1, 0.11125369292536007E~307) = 0.12299999999999998E1 +rem (0.123E1, 0.11125369292536007E~307) = 0.0 +* (0.123E1, 0.5E~323) = 0.5E~323 ++ (0.123E1, 0.5E~323) = 0.123E1 +- (0.123E1, 0.5E~323) = 0.123E1 +/ (0.123E1, 0.5E~323) = inf +nextAfter (0.123E1, 0.5E~323) = 0.12299999999999998E1 +rem (0.123E1, 0.5E~323) = ~inf +* (0.123E1, 0.0) = 0.0 ++ (0.123E1, 0.0) = 0.123E1 +- (0.123E1, 0.0) = 0.123E1 +/ (0.123E1, 0.0) = inf +nextAfter (0.123E1, 0.0) = 0.12299999999999998E1 +rem (0.123E1, 0.0) = nan +* (0.123E1, ~0.17976931348623157E309) = ~inf ++ (0.123E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E1, ~0.17976931348623157E309) = ~0.6842102114909647E~308 +nextAfter (0.123E1, ~0.17976931348623157E309) = 0.12299999999999998E1 +rem (0.123E1, ~0.17976931348623157E309) = 0.123E1 +* (0.123E1, ~0.8988465674311579E308) = ~0.1105581277940324E309 ++ (0.123E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E1, ~0.8988465674311579E308) = ~0.1368420422981929E~307 +nextAfter (0.123E1, ~0.8988465674311579E308) = 0.12299999999999998E1 +rem (0.123E1, ~0.8988465674311579E308) = 0.123E1 +* (0.123E1, ~0.123E4) = ~0.15129E4 ++ (0.123E1, ~0.123E4) = ~0.122877E4 +- (0.123E1, ~0.123E4) = 0.123123E4 +/ (0.123E1, ~0.123E4) = ~0.1E~2 +nextAfter (0.123E1, ~0.123E4) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E4) = 0.123E1 +* (0.123E1, ~0.123E2) = ~0.15129000000000001E2 ++ (0.123E1, ~0.123E2) = ~0.1107E2 +- (0.123E1, ~0.123E2) = 0.13530000000000001E2 +/ (0.123E1, ~0.123E2) = ~0.9999999999999999E~1 +nextAfter (0.123E1, ~0.123E2) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E2) = 0.123E1 +* (0.123E1, ~0.3141592653589793E1) = ~0.38641589639154454E1 ++ (0.123E1, ~0.3141592653589793E1) = ~0.19115926535897931E1 +- (0.123E1, ~0.3141592653589793E1) = 0.43715926535897935E1 +/ (0.123E1, ~0.3141592653589793E1) = ~0.3915211600060625 +nextAfter (0.123E1, ~0.3141592653589793E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.3141592653589793E1) = 0.123E1 +* (0.123E1, ~0.2718281828459045E1) = ~0.33434866490046256E1 ++ (0.123E1, ~0.2718281828459045E1) = ~0.1488281828459045E1 +- (0.123E1, ~0.2718281828459045E1) = 0.3948281828459045E1 +/ (0.123E1, ~0.2718281828459045E1) = ~0.45249171264087407 +nextAfter (0.123E1, ~0.2718281828459045E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.2718281828459045E1) = 0.123E1 +* (0.123E1, ~0.123E1) = ~0.15129E1 ++ (0.123E1, ~0.123E1) = 0.0 +- (0.123E1, ~0.123E1) = 0.246E1 +/ (0.123E1, ~0.123E1) = ~0.1E1 +nextAfter (0.123E1, ~0.123E1) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E1) = 0.0 +* (0.123E1, ~0.123) = ~0.15129 ++ (0.123E1, ~0.123) = 0.1107E1 +- (0.123E1, ~0.123) = 0.1353E1 +/ (0.123E1, ~0.123) = ~0.1E2 +nextAfter (0.123E1, ~0.123) = 0.12299999999999998E1 +rem (0.123E1, ~0.123) = 0.0 +* (0.123E1, ~0.123E~2) = ~0.15129E~2 ++ (0.123E1, ~0.123E~2) = 0.122877E1 +- (0.123E1, ~0.123E~2) = 0.123123E1 +/ (0.123E1, ~0.123E~2) = ~0.1E4 +nextAfter (0.123E1, ~0.123E~2) = 0.12299999999999998E1 +rem (0.123E1, ~0.123E~2) = 0.8673617379884035E~17 +* (0.123E1, ~0.22250738585072014E~307) = ~0.27368408459638577E~307 ++ (0.123E1, ~0.22250738585072014E~307) = 0.123E1 +- (0.123E1, ~0.22250738585072014E~307) = 0.123E1 +/ (0.123E1, ~0.22250738585072014E~307) = ~0.5527906389701621E308 +nextAfter (0.123E1, ~0.22250738585072014E~307) = 0.12299999999999998E1 +rem (0.123E1, ~0.22250738585072014E~307) = 0.0 +* (0.123E1, ~0.11125369292536007E~307) = ~0.1368420422981929E~307 ++ (0.123E1, ~0.11125369292536007E~307) = 0.123E1 +- (0.123E1, ~0.11125369292536007E~307) = 0.123E1 +/ (0.123E1, ~0.11125369292536007E~307) = ~0.11055812779403243E309 +nextAfter (0.123E1, ~0.11125369292536007E~307) = 0.12299999999999998E1 +rem (0.123E1, ~0.11125369292536007E~307) = 0.0 +* (0.123E1, ~0.5E~323) = ~0.5E~323 ++ (0.123E1, ~0.5E~323) = 0.123E1 +- (0.123E1, ~0.5E~323) = 0.123E1 +/ (0.123E1, ~0.5E~323) = ~inf +nextAfter (0.123E1, ~0.5E~323) = 0.12299999999999998E1 +rem (0.123E1, ~0.5E~323) = ~inf +* (0.123E1, ~0.0) = ~0.0 ++ (0.123E1, ~0.0) = 0.123E1 +- (0.123E1, ~0.0) = 0.123E1 +/ (0.123E1, ~0.0) = ~inf +nextAfter (0.123E1, ~0.0) = 0.12299999999999998E1 +rem (0.123E1, ~0.0) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300000000000002E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123E1, ~inf) = ~inf ++ (0.123E1, ~inf) = ~inf +- (0.123E1, ~inf) = inf +/ (0.123E1, ~inf) = ~0.0 +nextAfter (0.123E1, ~inf) = 0.12299999999999998E1 +rem (0.123E1, ~inf) = 0.123E1 +* (0.123E1, nan) = nan ++ (0.123E1, nan) = nan +- (0.123E1, nan) = nan +/ (0.123E1, nan) = nan +nextAfter (0.123E1, nan) = nan +rem (0.123E1, nan) = nan +* (0.123E1, inf) = inf ++ (0.123E1, inf) = inf +- (0.123E1, inf) = ~inf +/ (0.123E1, inf) = 0.0 +nextAfter (0.123E1, inf) = 0.12300000000000002E1 +rem (0.123E1, inf) = 0.123E1 +* (0.123, 0.17976931348623157E309) = 0.22111625558806483E308 ++ (0.123, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123, 0.17976931348623157E309) = 0.684210211490966E~309 +nextAfter (0.123, 0.17976931348623157E309) = 0.12300000000000001 +rem (0.123, 0.17976931348623157E309) = 0.123 +* (0.123, 0.8988465674311579E308) = 0.11055812779403241E308 ++ (0.123, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123, 0.8988465674311579E308) = 0.136842042298193E~308 +nextAfter (0.123, 0.8988465674311579E308) = 0.12300000000000001 +rem (0.123, 0.8988465674311579E308) = 0.123 +* (0.123, 0.123E4) = 0.15129E3 ++ (0.123, 0.123E4) = 0.1230123E4 +- (0.123, 0.123E4) = ~0.1229877E4 +/ (0.123, 0.123E4) = 0.1E~3 +nextAfter (0.123, 0.123E4) = 0.12300000000000001 +rem (0.123, 0.123E4) = 0.123 +* (0.123, 0.123E2) = 0.15129000000000001E1 ++ (0.123, 0.123E2) = 0.12423E2 +- (0.123, 0.123E2) = ~0.12177000000000001E2 +/ (0.123, 0.123E2) = 0.9999999999999998E~2 +nextAfter (0.123, 0.123E2) = 0.12300000000000001 +rem (0.123, 0.123E2) = 0.123 +* (0.123, 0.3141592653589793E1) = 0.38641589639154456 ++ (0.123, 0.3141592653589793E1) = 0.32645926535897933E1 +- (0.123, 0.3141592653589793E1) = ~0.3018592653589793E1 +/ (0.123, 0.3141592653589793E1) = 0.3915211600060625E~1 +nextAfter (0.123, 0.3141592653589793E1) = 0.12300000000000001 +rem (0.123, 0.3141592653589793E1) = 0.123 +* (0.123, 0.2718281828459045E1) = 0.33434866490046256 ++ (0.123, 0.2718281828459045E1) = 0.2841281828459045E1 +- (0.123, 0.2718281828459045E1) = ~0.25952818284590453E1 +/ (0.123, 0.2718281828459045E1) = 0.4524917126408741E~1 +nextAfter (0.123, 0.2718281828459045E1) = 0.12300000000000001 +rem (0.123, 0.2718281828459045E1) = 0.123 +* (0.123, 0.123E1) = 0.15129 ++ (0.123, 0.123E1) = 0.1353E1 +- (0.123, 0.123E1) = ~0.1107E1 +/ (0.123, 0.123E1) = 0.1 +nextAfter (0.123, 0.123E1) = 0.12300000000000001 +rem (0.123, 0.123E1) = 0.123 +* (0.123, 0.123) = 0.15129E~1 ++ (0.123, 0.123) = 0.246 +- (0.123, 0.123) = 0.0 +/ (0.123, 0.123) = 0.1E1 +nextAfter (0.123, 0.123) = 0.123 +rem (0.123, 0.123) = 0.0 +* (0.123, 0.123E~2) = 0.15129E~3 ++ (0.123, 0.123E~2) = 0.12423 +- (0.123, 0.123E~2) = 0.12177 +/ (0.123, 0.123E~2) = 0.1E3 +nextAfter (0.123, 0.123E~2) = 0.12299999999999998 +rem (0.123, 0.123E~2) = 0.8673617379884035E~18 +* (0.123, 0.22250738585072014E~307) = 0.273684084596386E~308 ++ (0.123, 0.22250738585072014E~307) = 0.123 +- (0.123, 0.22250738585072014E~307) = 0.123 +/ (0.123, 0.22250738585072014E~307) = 0.55279063897016213E307 +nextAfter (0.123, 0.22250738585072014E~307) = 0.12299999999999998 +rem (0.123, 0.22250738585072014E~307) = 0.0 +* (0.123, 0.11125369292536007E~307) = 0.136842042298193E~308 ++ (0.123, 0.11125369292536007E~307) = 0.123 +- (0.123, 0.11125369292536007E~307) = 0.123 +/ (0.123, 0.11125369292536007E~307) = 0.11055812779403243E308 +nextAfter (0.123, 0.11125369292536007E~307) = 0.12299999999999998 +rem (0.123, 0.11125369292536007E~307) = 0.0 +* (0.123, 0.5E~323) = 0.0 ++ (0.123, 0.5E~323) = 0.123 +- (0.123, 0.5E~323) = 0.123 +/ (0.123, 0.5E~323) = inf +nextAfter (0.123, 0.5E~323) = 0.12299999999999998 +rem (0.123, 0.5E~323) = ~inf +* (0.123, 0.0) = 0.0 ++ (0.123, 0.0) = 0.123 +- (0.123, 0.0) = 0.123 +/ (0.123, 0.0) = inf +nextAfter (0.123, 0.0) = 0.12299999999999998 +rem (0.123, 0.0) = nan +* (0.123, ~0.17976931348623157E309) = ~0.22111625558806483E308 ++ (0.123, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123, ~0.17976931348623157E309) = ~0.684210211490966E~309 +nextAfter (0.123, ~0.17976931348623157E309) = 0.12299999999999998 +rem (0.123, ~0.17976931348623157E309) = 0.123 +* (0.123, ~0.8988465674311579E308) = ~0.11055812779403241E308 ++ (0.123, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123, ~0.8988465674311579E308) = ~0.136842042298193E~308 +nextAfter (0.123, ~0.8988465674311579E308) = 0.12299999999999998 +rem (0.123, ~0.8988465674311579E308) = 0.123 +* (0.123, ~0.123E4) = ~0.15129E3 ++ (0.123, ~0.123E4) = ~0.1229877E4 +- (0.123, ~0.123E4) = 0.1230123E4 +/ (0.123, ~0.123E4) = ~0.1E~3 +nextAfter (0.123, ~0.123E4) = 0.12299999999999998 +rem (0.123, ~0.123E4) = 0.123 +* (0.123, ~0.123E2) = ~0.15129000000000001E1 ++ (0.123, ~0.123E2) = ~0.12177000000000001E2 +- (0.123, ~0.123E2) = 0.12423E2 +/ (0.123, ~0.123E2) = ~0.9999999999999998E~2 +nextAfter (0.123, ~0.123E2) = 0.12299999999999998 +rem (0.123, ~0.123E2) = 0.123 +* (0.123, ~0.3141592653589793E1) = ~0.38641589639154456 ++ (0.123, ~0.3141592653589793E1) = ~0.3018592653589793E1 +- (0.123, ~0.3141592653589793E1) = 0.32645926535897933E1 +/ (0.123, ~0.3141592653589793E1) = ~0.3915211600060625E~1 +nextAfter (0.123, ~0.3141592653589793E1) = 0.12299999999999998 +rem (0.123, ~0.3141592653589793E1) = 0.123 +* (0.123, ~0.2718281828459045E1) = ~0.33434866490046256 ++ (0.123, ~0.2718281828459045E1) = ~0.25952818284590453E1 +- (0.123, ~0.2718281828459045E1) = 0.2841281828459045E1 +/ (0.123, ~0.2718281828459045E1) = ~0.4524917126408741E~1 +nextAfter (0.123, ~0.2718281828459045E1) = 0.12299999999999998 +rem (0.123, ~0.2718281828459045E1) = 0.123 +* (0.123, ~0.123E1) = ~0.15129 ++ (0.123, ~0.123E1) = ~0.1107E1 +- (0.123, ~0.123E1) = 0.1353E1 +/ (0.123, ~0.123E1) = ~0.1 +nextAfter (0.123, ~0.123E1) = 0.12299999999999998 +rem (0.123, ~0.123E1) = 0.123 +* (0.123, ~0.123) = ~0.15129E~1 ++ (0.123, ~0.123) = 0.0 +- (0.123, ~0.123) = 0.246 +/ (0.123, ~0.123) = ~0.1E1 +nextAfter (0.123, ~0.123) = 0.12299999999999998 +rem (0.123, ~0.123) = 0.0 +* (0.123, ~0.123E~2) = ~0.15129E~3 ++ (0.123, ~0.123E~2) = 0.12177 +- (0.123, ~0.123E~2) = 0.12423 +/ (0.123, ~0.123E~2) = ~0.1E3 +nextAfter (0.123, ~0.123E~2) = 0.12299999999999998 +rem (0.123, ~0.123E~2) = 0.8673617379884035E~18 +* (0.123, ~0.22250738585072014E~307) = ~0.273684084596386E~308 ++ (0.123, ~0.22250738585072014E~307) = 0.123 +- (0.123, ~0.22250738585072014E~307) = 0.123 +/ (0.123, ~0.22250738585072014E~307) = ~0.55279063897016213E307 +nextAfter (0.123, ~0.22250738585072014E~307) = 0.12299999999999998 +rem (0.123, ~0.22250738585072014E~307) = 0.0 +* (0.123, ~0.11125369292536007E~307) = ~0.136842042298193E~308 ++ (0.123, ~0.11125369292536007E~307) = 0.123 +- (0.123, ~0.11125369292536007E~307) = 0.123 +/ (0.123, ~0.11125369292536007E~307) = ~0.11055812779403243E308 +nextAfter (0.123, ~0.11125369292536007E~307) = 0.12299999999999998 +rem (0.123, ~0.11125369292536007E~307) = 0.0 +* (0.123, ~0.5E~323) = ~0.0 ++ (0.123, ~0.5E~323) = 0.123 +- (0.123, ~0.5E~323) = 0.123 +/ (0.123, ~0.5E~323) = ~inf +nextAfter (0.123, ~0.5E~323) = 0.12299999999999998 +rem (0.123, ~0.5E~323) = ~inf +* (0.123, ~0.0) = ~0.0 ++ (0.123, ~0.0) = 0.123 +- (0.123, ~0.0) = 0.123 +/ (0.123, ~0.0) = ~inf +nextAfter (0.123, ~0.0) = 0.12299999999999998 +rem (0.123, ~0.0) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300000000000001 +rem (0.123, inf) = 0.123 +* (0.123, ~inf) = ~inf ++ (0.123, ~inf) = ~inf +- (0.123, ~inf) = inf +/ (0.123, ~inf) = ~0.0 +nextAfter (0.123, ~inf) = 0.12299999999999998 +rem (0.123, ~inf) = 0.123 +* (0.123, nan) = nan ++ (0.123, nan) = nan +- (0.123, nan) = nan +/ (0.123, nan) = nan +nextAfter (0.123, nan) = nan +rem (0.123, nan) = nan +* (0.123, inf) = inf ++ (0.123, inf) = inf +- (0.123, inf) = ~inf +/ (0.123, inf) = 0.0 +nextAfter (0.123, inf) = 0.12300000000000001 +rem (0.123, inf) = 0.123 +* (0.123E~2, 0.17976931348623157E309) = 0.2211162555880648E306 ++ (0.123E~2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.123E~2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.123E~2, 0.17976931348623157E309) = 0.684210211491E~311 +nextAfter (0.123E~2, 0.17976931348623157E309) = 0.12300000000000002E~2 +rem (0.123E~2, 0.17976931348623157E309) = 0.123E~2 +* (0.123E~2, 0.8988465674311579E308) = 0.1105581277940324E306 ++ (0.123E~2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.123E~2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.123E~2, 0.8988465674311579E308) = 0.1368420422982E~310 +nextAfter (0.123E~2, 0.8988465674311579E308) = 0.12300000000000002E~2 +rem (0.123E~2, 0.8988465674311579E308) = 0.123E~2 +* (0.123E~2, 0.123E4) = 0.15129E1 ++ (0.123E~2, 0.123E4) = 0.123000123E4 +- (0.123E~2, 0.123E4) = ~0.122999877E4 +/ (0.123E~2, 0.123E4) = 0.1E~5 +nextAfter (0.123E~2, 0.123E4) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E4) = 0.123E~2 +* (0.123E~2, 0.123E2) = 0.15129E~1 ++ (0.123E~2, 0.123E2) = 0.1230123E2 +- (0.123E~2, 0.123E2) = ~0.12298770000000001E2 +/ (0.123E~2, 0.123E2) = 0.9999999999999999E~4 +nextAfter (0.123E~2, 0.123E2) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E2) = 0.123E~2 +* (0.123E~2, 0.3141592653589793E1) = 0.38641589639154456E~2 ++ (0.123E~2, 0.3141592653589793E1) = 0.3142822653589793E1 +- (0.123E~2, 0.3141592653589793E1) = ~0.3140362653589793E1 +/ (0.123E~2, 0.3141592653589793E1) = 0.3915211600060625E~3 +nextAfter (0.123E~2, 0.3141592653589793E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.3141592653589793E1) = 0.123E~2 +* (0.123E~2, 0.2718281828459045E1) = 0.33434866490046253E~2 ++ (0.123E~2, 0.2718281828459045E1) = 0.2719511828459045E1 +- (0.123E~2, 0.2718281828459045E1) = ~0.2717051828459045E1 +/ (0.123E~2, 0.2718281828459045E1) = 0.45249171264087406E~3 +nextAfter (0.123E~2, 0.2718281828459045E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.2718281828459045E1) = 0.123E~2 +* (0.123E~2, 0.123E1) = 0.15129E~2 ++ (0.123E~2, 0.123E1) = 0.123123E1 +- (0.123E~2, 0.123E1) = ~0.122877E1 +/ (0.123E~2, 0.123E1) = 0.1E~2 +nextAfter (0.123E~2, 0.123E1) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123E1) = 0.123E~2 +* (0.123E~2, 0.123) = 0.15129E~3 ++ (0.123E~2, 0.123) = 0.12423 +- (0.123E~2, 0.123) = ~0.12177 +/ (0.123E~2, 0.123) = 0.1E~1 +nextAfter (0.123E~2, 0.123) = 0.12300000000000002E~2 +rem (0.123E~2, 0.123) = 0.123E~2 +* (0.123E~2, 0.123E~2) = 0.15129E~5 ++ (0.123E~2, 0.123E~2) = 0.246E~2 +- (0.123E~2, 0.123E~2) = 0.0 +/ (0.123E~2, 0.123E~2) = 0.1E1 +nextAfter (0.123E~2, 0.123E~2) = 0.123E~2 +rem (0.123E~2, 0.123E~2) = 0.0 +* (0.123E~2, 0.22250738585072014E~307) = 0.2736840845964E~310 ++ (0.123E~2, 0.22250738585072014E~307) = 0.123E~2 +- (0.123E~2, 0.22250738585072014E~307) = 0.123E~2 +/ (0.123E~2, 0.22250738585072014E~307) = 0.5527906389701621E305 +nextAfter (0.123E~2, 0.22250738585072014E~307) = 0.12299999999999998E~2 +rem (0.123E~2, 0.22250738585072014E~307) = 0.0 +* (0.123E~2, 0.11125369292536007E~307) = 0.1368420422982E~310 ++ (0.123E~2, 0.11125369292536007E~307) = 0.123E~2 +- (0.123E~2, 0.11125369292536007E~307) = 0.123E~2 +/ (0.123E~2, 0.11125369292536007E~307) = 0.11055812779403243E306 +nextAfter (0.123E~2, 0.11125369292536007E~307) = 0.12299999999999998E~2 +rem (0.123E~2, 0.11125369292536007E~307) = 0.0 +* (0.123E~2, 0.5E~323) = 0.0 ++ (0.123E~2, 0.5E~323) = 0.123E~2 +- (0.123E~2, 0.5E~323) = 0.123E~2 +/ (0.123E~2, 0.5E~323) = inf +nextAfter (0.123E~2, 0.5E~323) = 0.12299999999999998E~2 +rem (0.123E~2, 0.5E~323) = ~inf +* (0.123E~2, 0.0) = 0.0 ++ (0.123E~2, 0.0) = 0.123E~2 +- (0.123E~2, 0.0) = 0.123E~2 +/ (0.123E~2, 0.0) = inf +nextAfter (0.123E~2, 0.0) = 0.12299999999999998E~2 +rem (0.123E~2, 0.0) = nan +* (0.123E~2, ~0.17976931348623157E309) = ~0.2211162555880648E306 ++ (0.123E~2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.123E~2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.123E~2, ~0.17976931348623157E309) = ~0.684210211491E~311 +nextAfter (0.123E~2, ~0.17976931348623157E309) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.17976931348623157E309) = 0.123E~2 +* (0.123E~2, ~0.8988465674311579E308) = ~0.1105581277940324E306 ++ (0.123E~2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.123E~2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.123E~2, ~0.8988465674311579E308) = ~0.1368420422982E~310 +nextAfter (0.123E~2, ~0.8988465674311579E308) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.8988465674311579E308) = 0.123E~2 +* (0.123E~2, ~0.123E4) = ~0.15129E1 ++ (0.123E~2, ~0.123E4) = ~0.122999877E4 +- (0.123E~2, ~0.123E4) = 0.123000123E4 +/ (0.123E~2, ~0.123E4) = ~0.1E~5 +nextAfter (0.123E~2, ~0.123E4) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E4) = 0.123E~2 +* (0.123E~2, ~0.123E2) = ~0.15129E~1 ++ (0.123E~2, ~0.123E2) = ~0.12298770000000001E2 +- (0.123E~2, ~0.123E2) = 0.1230123E2 +/ (0.123E~2, ~0.123E2) = ~0.9999999999999999E~4 +nextAfter (0.123E~2, ~0.123E2) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E2) = 0.123E~2 +* (0.123E~2, ~0.3141592653589793E1) = ~0.38641589639154456E~2 ++ (0.123E~2, ~0.3141592653589793E1) = ~0.3140362653589793E1 +- (0.123E~2, ~0.3141592653589793E1) = 0.3142822653589793E1 +/ (0.123E~2, ~0.3141592653589793E1) = ~0.3915211600060625E~3 +nextAfter (0.123E~2, ~0.3141592653589793E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.3141592653589793E1) = 0.123E~2 +* (0.123E~2, ~0.2718281828459045E1) = ~0.33434866490046253E~2 ++ (0.123E~2, ~0.2718281828459045E1) = ~0.2717051828459045E1 +- (0.123E~2, ~0.2718281828459045E1) = 0.2719511828459045E1 +/ (0.123E~2, ~0.2718281828459045E1) = ~0.45249171264087406E~3 +nextAfter (0.123E~2, ~0.2718281828459045E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.2718281828459045E1) = 0.123E~2 +* (0.123E~2, ~0.123E1) = ~0.15129E~2 ++ (0.123E~2, ~0.123E1) = ~0.122877E1 +- (0.123E~2, ~0.123E1) = 0.123123E1 +/ (0.123E~2, ~0.123E1) = ~0.1E~2 +nextAfter (0.123E~2, ~0.123E1) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E1) = 0.123E~2 +* (0.123E~2, ~0.123) = ~0.15129E~3 ++ (0.123E~2, ~0.123) = ~0.12177 +- (0.123E~2, ~0.123) = 0.12423 +/ (0.123E~2, ~0.123) = ~0.1E~1 +nextAfter (0.123E~2, ~0.123) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123) = 0.123E~2 +* (0.123E~2, ~0.123E~2) = ~0.15129E~5 ++ (0.123E~2, ~0.123E~2) = 0.0 +- (0.123E~2, ~0.123E~2) = 0.246E~2 +/ (0.123E~2, ~0.123E~2) = ~0.1E1 +nextAfter (0.123E~2, ~0.123E~2) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.123E~2) = 0.0 +* (0.123E~2, ~0.22250738585072014E~307) = ~0.2736840845964E~310 ++ (0.123E~2, ~0.22250738585072014E~307) = 0.123E~2 +- (0.123E~2, ~0.22250738585072014E~307) = 0.123E~2 +/ (0.123E~2, ~0.22250738585072014E~307) = ~0.5527906389701621E305 +nextAfter (0.123E~2, ~0.22250738585072014E~307) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.22250738585072014E~307) = 0.0 +* (0.123E~2, ~0.11125369292536007E~307) = ~0.1368420422982E~310 ++ (0.123E~2, ~0.11125369292536007E~307) = 0.123E~2 +- (0.123E~2, ~0.11125369292536007E~307) = 0.123E~2 +/ (0.123E~2, ~0.11125369292536007E~307) = ~0.11055812779403243E306 +nextAfter (0.123E~2, ~0.11125369292536007E~307) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.11125369292536007E~307) = 0.0 +* (0.123E~2, ~0.5E~323) = ~0.0 ++ (0.123E~2, ~0.5E~323) = 0.123E~2 +- (0.123E~2, ~0.5E~323) = 0.123E~2 +/ (0.123E~2, ~0.5E~323) = ~inf +nextAfter (0.123E~2, ~0.5E~323) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.5E~323) = ~inf +* (0.123E~2, ~0.0) = ~0.0 ++ (0.123E~2, ~0.0) = 0.123E~2 +- (0.123E~2, ~0.0) = 0.123E~2 +/ (0.123E~2, ~0.0) = ~inf +nextAfter (0.123E~2, ~0.0) = 0.12299999999999998E~2 +rem (0.123E~2, ~0.0) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300000000000002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.123E~2, ~inf) = ~inf ++ (0.123E~2, ~inf) = ~inf +- (0.123E~2, ~inf) = inf +/ (0.123E~2, ~inf) = ~0.0 +nextAfter (0.123E~2, ~inf) = 0.12299999999999998E~2 +rem (0.123E~2, ~inf) = 0.123E~2 +* (0.123E~2, nan) = nan ++ (0.123E~2, nan) = nan +- (0.123E~2, nan) = nan +/ (0.123E~2, nan) = nan +nextAfter (0.123E~2, nan) = nan +rem (0.123E~2, nan) = nan +* (0.123E~2, inf) = inf ++ (0.123E~2, inf) = inf +- (0.123E~2, inf) = ~inf +/ (0.123E~2, inf) = 0.0 +nextAfter (0.123E~2, inf) = 0.12300000000000002E~2 +rem (0.123E~2, inf) = 0.123E~2 +* (0.22250738585072014E~307, 0.17976931348623157E309) = 0.39999999999999996E1 ++ (0.22250738585072014E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.22250738585072014E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.22250738585072014E~307, 0.17976931348623157E309) = 0.0 +nextAfter (0.22250738585072014E~307, 0.17976931348623157E309) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.17976931348623157E309) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.8988465674311579E308) = 0.19999999999999998E1 ++ (0.22250738585072014E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.22250738585072014E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.22250738585072014E~307, 0.8988465674311579E308) = 0.0 +nextAfter (0.22250738585072014E~307, 0.8988465674311579E308) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.8988465674311579E308) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E4) = 0.27368408459638577E~304 ++ (0.22250738585072014E~307, 0.123E4) = 0.123E4 +- (0.22250738585072014E~307, 0.123E4) = ~0.123E4 +/ (0.22250738585072014E~307, 0.123E4) = 0.18090031369976E~310 +nextAfter (0.22250738585072014E~307, 0.123E4) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E4) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E2) = 0.2736840845963858E~306 ++ (0.22250738585072014E~307, 0.123E2) = 0.123E2 +- (0.22250738585072014E~307, 0.123E2) = ~0.123E2 +/ (0.22250738585072014E~307, 0.123E2) = 0.1809003136997725E~308 +nextAfter (0.22250738585072014E~307, 0.123E2) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.3141592653589793E1) = 0.6990275687580919E~307 ++ (0.22250738585072014E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.22250738585072014E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.22250738585072014E~307, 0.3141592653589793E1) = 0.7082630066519554E~308 +nextAfter (0.22250738585072014E~307, 0.3141592653589793E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.3141592653589793E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.2718281828459045E1) = 0.6048377836559378E~307 ++ (0.22250738585072014E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.22250738585072014E~307, 0.2718281828459045E1) = 0.818558927632814E~308 +nextAfter (0.22250738585072014E~307, 0.2718281828459045E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.2718281828459045E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E1) = 0.27368408459638577E~307 ++ (0.22250738585072014E~307, 0.123E1) = 0.123E1 +- (0.22250738585072014E~307, 0.123E1) = ~0.123E1 +/ (0.22250738585072014E~307, 0.123E1) = 0.18090031369977247E~307 +nextAfter (0.22250738585072014E~307, 0.123E1) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123) = 0.273684084596386E~308 ++ (0.22250738585072014E~307, 0.123) = 0.123 +- (0.22250738585072014E~307, 0.123) = ~0.123 +/ (0.22250738585072014E~307, 0.123) = 0.1809003136997725E~306 +nextAfter (0.22250738585072014E~307, 0.123) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.123E~2) = 0.2736840845964E~310 ++ (0.22250738585072014E~307, 0.123E~2) = 0.123E~2 +- (0.22250738585072014E~307, 0.123E~2) = ~0.123E~2 +/ (0.22250738585072014E~307, 0.123E~2) = 0.18090031369977247E~304 +nextAfter (0.22250738585072014E~307, 0.123E~2) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, 0.123E~2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 ++ (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.4450147717014403E~307 +- (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +/ (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.1E1 +nextAfter (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.22250738585072014E~307 +rem (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +* (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 ++ (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.3337610787760802E~307 +- (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.2E1 +nextAfter (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 +* (0.22250738585072014E~307, 0.5E~323) = 0.0 ++ (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507202E~307 +- (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507201E~307 +/ (0.22250738585072014E~307, 0.5E~323) = 0.4503599627370496E16 +nextAfter (0.22250738585072014E~307, 0.5E~323) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.5E~323) = 0.0 +* (0.22250738585072014E~307, 0.0) = 0.0 ++ (0.22250738585072014E~307, 0.0) = 0.22250738585072014E~307 +- (0.22250738585072014E~307, 0.0) = 0.22250738585072014E~307 +/ (0.22250738585072014E~307, 0.0) = inf +nextAfter (0.22250738585072014E~307, 0.0) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, 0.0) = nan +* (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.39999999999999996E1 ++ (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.17976931348623157E309) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.19999999999999998E1 ++ (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.8988465674311579E308) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E4) = ~0.27368408459638577E~304 ++ (0.22250738585072014E~307, ~0.123E4) = ~0.123E4 +- (0.22250738585072014E~307, ~0.123E4) = 0.123E4 +/ (0.22250738585072014E~307, ~0.123E4) = ~0.18090031369976E~310 +nextAfter (0.22250738585072014E~307, ~0.123E4) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E4) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E2) = ~0.2736840845963858E~306 ++ (0.22250738585072014E~307, ~0.123E2) = ~0.123E2 +- (0.22250738585072014E~307, ~0.123E2) = 0.123E2 +/ (0.22250738585072014E~307, ~0.123E2) = ~0.1809003136997725E~308 +nextAfter (0.22250738585072014E~307, ~0.123E2) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.6990275687580919E~307 ++ (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.7082630066519554E~308 +nextAfter (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.3141592653589793E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.6048377836559378E~307 ++ (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.818558927632814E~308 +nextAfter (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.2718281828459045E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E1) = ~0.27368408459638577E~307 ++ (0.22250738585072014E~307, ~0.123E1) = ~0.123E1 +- (0.22250738585072014E~307, ~0.123E1) = 0.123E1 +/ (0.22250738585072014E~307, ~0.123E1) = ~0.18090031369977247E~307 +nextAfter (0.22250738585072014E~307, ~0.123E1) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E1) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123) = ~0.273684084596386E~308 ++ (0.22250738585072014E~307, ~0.123) = ~0.123 +- (0.22250738585072014E~307, ~0.123) = 0.123 +/ (0.22250738585072014E~307, ~0.123) = ~0.1809003136997725E~306 +nextAfter (0.22250738585072014E~307, ~0.123) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.123E~2) = ~0.2736840845964E~310 ++ (0.22250738585072014E~307, ~0.123E~2) = ~0.123E~2 +- (0.22250738585072014E~307, ~0.123E~2) = 0.123E~2 +/ (0.22250738585072014E~307, ~0.123E~2) = ~0.18090031369977247E~304 +nextAfter (0.22250738585072014E~307, ~0.123E~2) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.123E~2) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.0 ++ (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +- (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.4450147717014403E~307 +/ (0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.1E1 +nextAfter (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +* (0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.0 ++ (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +- (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.3337610787760802E~307 +/ (0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.2E1 +nextAfter (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 +* (0.22250738585072014E~307, ~0.5E~323) = ~0.0 ++ (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507201E~307 +- (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507202E~307 +/ (0.22250738585072014E~307, ~0.5E~323) = ~0.4503599627370496E16 +nextAfter (0.22250738585072014E~307, ~0.5E~323) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.5E~323) = 0.0 +* (0.22250738585072014E~307, ~0.0) = ~0.0 ++ (0.22250738585072014E~307, ~0.0) = 0.22250738585072014E~307 +- (0.22250738585072014E~307, ~0.0) = 0.22250738585072014E~307 +/ (0.22250738585072014E~307, ~0.0) = ~inf +nextAfter (0.22250738585072014E~307, ~0.0) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~0.0) = nan +* (0.22250738585072014E~307, inf) = inf ++ (0.22250738585072014E~307, inf) = inf +- (0.22250738585072014E~307, inf) = ~inf +/ (0.22250738585072014E~307, inf) = 0.0 +nextAfter (0.22250738585072014E~307, inf) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, inf) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, ~inf) = ~inf ++ (0.22250738585072014E~307, ~inf) = ~inf +- (0.22250738585072014E~307, ~inf) = inf +/ (0.22250738585072014E~307, ~inf) = ~0.0 +nextAfter (0.22250738585072014E~307, ~inf) = 0.2225073858507201E~307 +rem (0.22250738585072014E~307, ~inf) = 0.22250738585072014E~307 +* (0.22250738585072014E~307, nan) = nan ++ (0.22250738585072014E~307, nan) = nan +- (0.22250738585072014E~307, nan) = nan +/ (0.22250738585072014E~307, nan) = nan +nextAfter (0.22250738585072014E~307, nan) = nan +rem (0.22250738585072014E~307, nan) = nan +* (0.22250738585072014E~307, inf) = inf ++ (0.22250738585072014E~307, inf) = inf +- (0.22250738585072014E~307, inf) = ~inf +/ (0.22250738585072014E~307, inf) = 0.0 +nextAfter (0.22250738585072014E~307, inf) = 0.2225073858507202E~307 +rem (0.22250738585072014E~307, inf) = 0.22250738585072014E~307 +* (0.11125369292536007E~307, 0.17976931348623157E309) = 0.19999999999999998E1 ++ (0.11125369292536007E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.11125369292536007E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.11125369292536007E~307, 0.17976931348623157E309) = 0.0 +nextAfter (0.11125369292536007E~307, 0.17976931348623157E309) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.17976931348623157E309) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.8988465674311579E308) = 0.9999999999999999 ++ (0.11125369292536007E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.11125369292536007E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.11125369292536007E~307, 0.8988465674311579E308) = 0.0 +nextAfter (0.11125369292536007E~307, 0.8988465674311579E308) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.8988465674311579E308) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E4) = 0.13684204229819289E~304 ++ (0.11125369292536007E~307, 0.123E4) = 0.123E4 +- (0.11125369292536007E~307, 0.123E4) = ~0.123E4 +/ (0.11125369292536007E~307, 0.123E4) = 0.904501568499E~311 +nextAfter (0.11125369292536007E~307, 0.123E4) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E4) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E2) = 0.1368420422981929E~306 ++ (0.11125369292536007E~307, 0.123E2) = 0.123E2 +- (0.11125369292536007E~307, 0.123E2) = ~0.123E2 +/ (0.11125369292536007E~307, 0.123E2) = 0.90450156849886E~309 +nextAfter (0.11125369292536007E~307, 0.123E2) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.3141592653589793E1) = 0.34951378437904593E~307 ++ (0.11125369292536007E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.11125369292536007E~307, 0.3141592653589793E1) = 0.3541315033259774E~308 +nextAfter (0.11125369292536007E~307, 0.3141592653589793E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.3141592653589793E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.2718281828459045E1) = 0.3024188918279689E~307 ++ (0.11125369292536007E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.11125369292536007E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.11125369292536007E~307, 0.2718281828459045E1) = 0.409279463816407E~308 +nextAfter (0.11125369292536007E~307, 0.2718281828459045E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.2718281828459045E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E1) = 0.1368420422981929E~307 ++ (0.11125369292536007E~307, 0.123E1) = 0.123E1 +- (0.11125369292536007E~307, 0.123E1) = ~0.123E1 +/ (0.11125369292536007E~307, 0.123E1) = 0.9045015684988623E~308 +nextAfter (0.11125369292536007E~307, 0.123E1) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123) = 0.136842042298193E~308 ++ (0.11125369292536007E~307, 0.123) = 0.123 +- (0.11125369292536007E~307, 0.123) = ~0.123 +/ (0.11125369292536007E~307, 0.123) = 0.9045015684988624E~307 +nextAfter (0.11125369292536007E~307, 0.123) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.123E~2) = 0.1368420422982E~310 ++ (0.11125369292536007E~307, 0.123E~2) = 0.123E~2 +- (0.11125369292536007E~307, 0.123E~2) = ~0.123E~2 +/ (0.11125369292536007E~307, 0.123E~2) = 0.9045015684988623E~305 +nextAfter (0.11125369292536007E~307, 0.123E~2) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.123E~2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.0 ++ (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.3337610787760802E~307 +- (0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536007E~307 +/ (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.5 +nextAfter (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 ++ (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.22250738585072014E~307 +- (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +/ (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.1E1 +nextAfter (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.11125369292536007E~307 +rem (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +* (0.11125369292536007E~307, 0.5E~323) = 0.0 ++ (0.11125369292536007E~307, 0.5E~323) = 0.1112536929253601E~307 +- (0.11125369292536007E~307, 0.5E~323) = 0.11125369292536E~307 +/ (0.11125369292536007E~307, 0.5E~323) = 0.2251799813685248E16 +nextAfter (0.11125369292536007E~307, 0.5E~323) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, 0.5E~323) = 0.0 +* (0.11125369292536007E~307, 0.0) = 0.0 ++ (0.11125369292536007E~307, 0.0) = 0.11125369292536007E~307 +- (0.11125369292536007E~307, 0.0) = 0.11125369292536007E~307 +/ (0.11125369292536007E~307, 0.0) = inf +nextAfter (0.11125369292536007E~307, 0.0) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, 0.0) = nan +* (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.19999999999999998E1 ++ (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.17976931348623157E309) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.9999999999999999 ++ (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.8988465674311579E308) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E4) = ~0.13684204229819289E~304 ++ (0.11125369292536007E~307, ~0.123E4) = ~0.123E4 +- (0.11125369292536007E~307, ~0.123E4) = 0.123E4 +/ (0.11125369292536007E~307, ~0.123E4) = ~0.904501568499E~311 +nextAfter (0.11125369292536007E~307, ~0.123E4) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E4) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E2) = ~0.1368420422981929E~306 ++ (0.11125369292536007E~307, ~0.123E2) = ~0.123E2 +- (0.11125369292536007E~307, ~0.123E2) = 0.123E2 +/ (0.11125369292536007E~307, ~0.123E2) = ~0.90450156849886E~309 +nextAfter (0.11125369292536007E~307, ~0.123E2) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.34951378437904593E~307 ++ (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3541315033259774E~308 +nextAfter (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.3141592653589793E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.3024188918279689E~307 ++ (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.409279463816407E~308 +nextAfter (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.2718281828459045E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E1) = ~0.1368420422981929E~307 ++ (0.11125369292536007E~307, ~0.123E1) = ~0.123E1 +- (0.11125369292536007E~307, ~0.123E1) = 0.123E1 +/ (0.11125369292536007E~307, ~0.123E1) = ~0.9045015684988623E~308 +nextAfter (0.11125369292536007E~307, ~0.123E1) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E1) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123) = ~0.136842042298193E~308 ++ (0.11125369292536007E~307, ~0.123) = ~0.123 +- (0.11125369292536007E~307, ~0.123) = 0.123 +/ (0.11125369292536007E~307, ~0.123) = ~0.9045015684988624E~307 +nextAfter (0.11125369292536007E~307, ~0.123) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.123E~2) = ~0.1368420422982E~310 ++ (0.11125369292536007E~307, ~0.123E~2) = ~0.123E~2 +- (0.11125369292536007E~307, ~0.123E~2) = 0.123E~2 +/ (0.11125369292536007E~307, ~0.123E~2) = ~0.9045015684988623E~305 +nextAfter (0.11125369292536007E~307, ~0.123E~2) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.123E~2) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.0 ++ (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.11125369292536007E~307 +- (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.3337610787760802E~307 +/ (0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.5 +nextAfter (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.0 ++ (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +- (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.22250738585072014E~307 +/ (0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.1E1 +nextAfter (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +* (0.11125369292536007E~307, ~0.5E~323) = ~0.0 ++ (0.11125369292536007E~307, ~0.5E~323) = 0.11125369292536E~307 +- (0.11125369292536007E~307, ~0.5E~323) = 0.1112536929253601E~307 +/ (0.11125369292536007E~307, ~0.5E~323) = ~0.2251799813685248E16 +nextAfter (0.11125369292536007E~307, ~0.5E~323) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.5E~323) = 0.0 +* (0.11125369292536007E~307, ~0.0) = ~0.0 ++ (0.11125369292536007E~307, ~0.0) = 0.11125369292536007E~307 +- (0.11125369292536007E~307, ~0.0) = 0.11125369292536007E~307 +/ (0.11125369292536007E~307, ~0.0) = ~inf +nextAfter (0.11125369292536007E~307, ~0.0) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~0.0) = nan +* (0.11125369292536007E~307, inf) = inf ++ (0.11125369292536007E~307, inf) = inf +- (0.11125369292536007E~307, inf) = ~inf +/ (0.11125369292536007E~307, inf) = 0.0 +nextAfter (0.11125369292536007E~307, inf) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, inf) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, ~inf) = ~inf ++ (0.11125369292536007E~307, ~inf) = ~inf +- (0.11125369292536007E~307, ~inf) = inf +/ (0.11125369292536007E~307, ~inf) = ~0.0 +nextAfter (0.11125369292536007E~307, ~inf) = 0.11125369292536E~307 +rem (0.11125369292536007E~307, ~inf) = 0.11125369292536007E~307 +* (0.11125369292536007E~307, nan) = nan ++ (0.11125369292536007E~307, nan) = nan +- (0.11125369292536007E~307, nan) = nan +/ (0.11125369292536007E~307, nan) = nan +nextAfter (0.11125369292536007E~307, nan) = nan +rem (0.11125369292536007E~307, nan) = nan +* (0.11125369292536007E~307, inf) = inf ++ (0.11125369292536007E~307, inf) = inf +- (0.11125369292536007E~307, inf) = ~inf +/ (0.11125369292536007E~307, inf) = 0.0 +nextAfter (0.11125369292536007E~307, inf) = 0.1112536929253601E~307 +rem (0.11125369292536007E~307, inf) = 0.11125369292536007E~307 +* (0.5E~323, 0.17976931348623157E309) = 0.8881784197001251E~15 ++ (0.5E~323, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.5E~323, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.5E~323, 0.17976931348623157E309) = 0.0 +nextAfter (0.5E~323, 0.17976931348623157E309) = 0.1E~322 +rem (0.5E~323, 0.17976931348623157E309) = 0.5E~323 +* (0.5E~323, 0.8988465674311579E308) = 0.44408920985006257E~15 ++ (0.5E~323, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.5E~323, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.5E~323, 0.8988465674311579E308) = 0.0 +nextAfter (0.5E~323, 0.8988465674311579E308) = 0.1E~322 +rem (0.5E~323, 0.8988465674311579E308) = 0.5E~323 +* (0.5E~323, 0.123E4) = 0.6077E~320 ++ (0.5E~323, 0.123E4) = 0.123E4 +- (0.5E~323, 0.123E4) = ~0.123E4 +/ (0.5E~323, 0.123E4) = 0.0 +nextAfter (0.5E~323, 0.123E4) = 0.1E~322 +rem (0.5E~323, 0.123E4) = 0.5E~323 +* (0.5E~323, 0.123E2) = 0.6E~322 ++ (0.5E~323, 0.123E2) = 0.123E2 +- (0.5E~323, 0.123E2) = ~0.123E2 +/ (0.5E~323, 0.123E2) = 0.0 +nextAfter (0.5E~323, 0.123E2) = 0.1E~322 +rem (0.5E~323, 0.123E2) = 0.5E~323 +* (0.5E~323, 0.3141592653589793E1) = 0.15E~322 ++ (0.5E~323, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.5E~323, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.5E~323, 0.3141592653589793E1) = 0.0 +nextAfter (0.5E~323, 0.3141592653589793E1) = 0.1E~322 +rem (0.5E~323, 0.3141592653589793E1) = 0.5E~323 +* (0.5E~323, 0.2718281828459045E1) = 0.15E~322 ++ (0.5E~323, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.5E~323, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.5E~323, 0.2718281828459045E1) = 0.0 +nextAfter (0.5E~323, 0.2718281828459045E1) = 0.1E~322 +rem (0.5E~323, 0.2718281828459045E1) = 0.5E~323 +* (0.5E~323, 0.123E1) = 0.5E~323 ++ (0.5E~323, 0.123E1) = 0.123E1 +- (0.5E~323, 0.123E1) = ~0.123E1 +/ (0.5E~323, 0.123E1) = 0.5E~323 +nextAfter (0.5E~323, 0.123E1) = 0.1E~322 +rem (0.5E~323, 0.123E1) = 0.5E~323 +* (0.5E~323, 0.123) = 0.0 ++ (0.5E~323, 0.123) = 0.123 +- (0.5E~323, 0.123) = ~0.123 +/ (0.5E~323, 0.123) = 0.4E~322 +nextAfter (0.5E~323, 0.123) = 0.1E~322 +rem (0.5E~323, 0.123) = 0.5E~323 +* (0.5E~323, 0.123E~2) = 0.0 ++ (0.5E~323, 0.123E~2) = 0.123E~2 +- (0.5E~323, 0.123E~2) = ~0.123E~2 +/ (0.5E~323, 0.123E~2) = 0.4017E~320 +nextAfter (0.5E~323, 0.123E~2) = 0.1E~322 +rem (0.5E~323, 0.123E~2) = 0.5E~323 +* (0.5E~323, 0.22250738585072014E~307) = 0.0 ++ (0.5E~323, 0.22250738585072014E~307) = 0.2225073858507202E~307 +- (0.5E~323, 0.22250738585072014E~307) = ~0.2225073858507201E~307 +/ (0.5E~323, 0.22250738585072014E~307) = 0.2220446049250313E~15 +nextAfter (0.5E~323, 0.22250738585072014E~307) = 0.1E~322 +rem (0.5E~323, 0.22250738585072014E~307) = 0.5E~323 +* (0.5E~323, 0.11125369292536007E~307) = 0.0 ++ (0.5E~323, 0.11125369292536007E~307) = 0.1112536929253601E~307 +- (0.5E~323, 0.11125369292536007E~307) = ~0.11125369292536E~307 +/ (0.5E~323, 0.11125369292536007E~307) = 0.4440892098500626E~15 +nextAfter (0.5E~323, 0.11125369292536007E~307) = 0.1E~322 +rem (0.5E~323, 0.11125369292536007E~307) = 0.5E~323 +* (0.5E~323, 0.5E~323) = 0.0 ++ (0.5E~323, 0.5E~323) = 0.1E~322 +- (0.5E~323, 0.5E~323) = 0.0 +/ (0.5E~323, 0.5E~323) = 0.1E1 +nextAfter (0.5E~323, 0.5E~323) = 0.5E~323 +rem (0.5E~323, 0.5E~323) = 0.0 +* (0.5E~323, 0.0) = 0.0 ++ (0.5E~323, 0.0) = 0.5E~323 +- (0.5E~323, 0.0) = 0.5E~323 +/ (0.5E~323, 0.0) = inf +nextAfter (0.5E~323, 0.0) = 0.0 +rem (0.5E~323, 0.0) = nan +* (0.5E~323, ~0.17976931348623157E309) = ~0.8881784197001251E~15 ++ (0.5E~323, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.5E~323, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.5E~323, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.5E~323, ~0.17976931348623157E309) = 0.0 +rem (0.5E~323, ~0.17976931348623157E309) = 0.5E~323 +* (0.5E~323, ~0.8988465674311579E308) = ~0.44408920985006257E~15 ++ (0.5E~323, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.5E~323, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.5E~323, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.5E~323, ~0.8988465674311579E308) = 0.0 +rem (0.5E~323, ~0.8988465674311579E308) = 0.5E~323 +* (0.5E~323, ~0.123E4) = ~0.6077E~320 ++ (0.5E~323, ~0.123E4) = ~0.123E4 +- (0.5E~323, ~0.123E4) = 0.123E4 +/ (0.5E~323, ~0.123E4) = ~0.0 +nextAfter (0.5E~323, ~0.123E4) = 0.0 +rem (0.5E~323, ~0.123E4) = 0.5E~323 +* (0.5E~323, ~0.123E2) = ~0.6E~322 ++ (0.5E~323, ~0.123E2) = ~0.123E2 +- (0.5E~323, ~0.123E2) = 0.123E2 +/ (0.5E~323, ~0.123E2) = ~0.0 +nextAfter (0.5E~323, ~0.123E2) = 0.0 +rem (0.5E~323, ~0.123E2) = 0.5E~323 +* (0.5E~323, ~0.3141592653589793E1) = ~0.15E~322 ++ (0.5E~323, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.5E~323, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.5E~323, ~0.3141592653589793E1) = ~0.0 +nextAfter (0.5E~323, ~0.3141592653589793E1) = 0.0 +rem (0.5E~323, ~0.3141592653589793E1) = 0.5E~323 +* (0.5E~323, ~0.2718281828459045E1) = ~0.15E~322 ++ (0.5E~323, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.5E~323, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.5E~323, ~0.2718281828459045E1) = ~0.0 +nextAfter (0.5E~323, ~0.2718281828459045E1) = 0.0 +rem (0.5E~323, ~0.2718281828459045E1) = 0.5E~323 +* (0.5E~323, ~0.123E1) = ~0.5E~323 ++ (0.5E~323, ~0.123E1) = ~0.123E1 +- (0.5E~323, ~0.123E1) = 0.123E1 +/ (0.5E~323, ~0.123E1) = ~0.5E~323 +nextAfter (0.5E~323, ~0.123E1) = 0.0 +rem (0.5E~323, ~0.123E1) = 0.5E~323 +* (0.5E~323, ~0.123) = ~0.0 ++ (0.5E~323, ~0.123) = ~0.123 +- (0.5E~323, ~0.123) = 0.123 +/ (0.5E~323, ~0.123) = ~0.4E~322 +nextAfter (0.5E~323, ~0.123) = 0.0 +rem (0.5E~323, ~0.123) = 0.5E~323 +* (0.5E~323, ~0.123E~2) = ~0.0 ++ (0.5E~323, ~0.123E~2) = ~0.123E~2 +- (0.5E~323, ~0.123E~2) = 0.123E~2 +/ (0.5E~323, ~0.123E~2) = ~0.4017E~320 +nextAfter (0.5E~323, ~0.123E~2) = 0.0 +rem (0.5E~323, ~0.123E~2) = 0.5E~323 +* (0.5E~323, ~0.22250738585072014E~307) = ~0.0 ++ (0.5E~323, ~0.22250738585072014E~307) = ~0.2225073858507201E~307 +- (0.5E~323, ~0.22250738585072014E~307) = 0.2225073858507202E~307 +/ (0.5E~323, ~0.22250738585072014E~307) = ~0.2220446049250313E~15 +nextAfter (0.5E~323, ~0.22250738585072014E~307) = 0.0 +rem (0.5E~323, ~0.22250738585072014E~307) = 0.5E~323 +* (0.5E~323, ~0.11125369292536007E~307) = ~0.0 ++ (0.5E~323, ~0.11125369292536007E~307) = ~0.11125369292536E~307 +- (0.5E~323, ~0.11125369292536007E~307) = 0.1112536929253601E~307 +/ (0.5E~323, ~0.11125369292536007E~307) = ~0.4440892098500626E~15 +nextAfter (0.5E~323, ~0.11125369292536007E~307) = 0.0 +rem (0.5E~323, ~0.11125369292536007E~307) = 0.5E~323 +* (0.5E~323, ~0.5E~323) = ~0.0 ++ (0.5E~323, ~0.5E~323) = 0.0 +- (0.5E~323, ~0.5E~323) = 0.1E~322 +/ (0.5E~323, ~0.5E~323) = ~0.1E1 +nextAfter (0.5E~323, ~0.5E~323) = 0.0 +rem (0.5E~323, ~0.5E~323) = 0.0 +* (0.5E~323, ~0.0) = ~0.0 ++ (0.5E~323, ~0.0) = 0.5E~323 +- (0.5E~323, ~0.0) = 0.5E~323 +/ (0.5E~323, ~0.0) = ~inf +nextAfter (0.5E~323, ~0.0) = 0.0 +rem (0.5E~323, ~0.0) = nan +* (0.5E~323, inf) = inf ++ (0.5E~323, inf) = inf +- (0.5E~323, inf) = ~inf +/ (0.5E~323, inf) = 0.0 +nextAfter (0.5E~323, inf) = 0.1E~322 +rem (0.5E~323, inf) = 0.5E~323 +* (0.5E~323, ~inf) = ~inf ++ (0.5E~323, ~inf) = ~inf +- (0.5E~323, ~inf) = inf +/ (0.5E~323, ~inf) = ~0.0 +nextAfter (0.5E~323, ~inf) = 0.0 +rem (0.5E~323, ~inf) = 0.5E~323 +* (0.5E~323, nan) = nan ++ (0.5E~323, nan) = nan +- (0.5E~323, nan) = nan +/ (0.5E~323, nan) = nan +nextAfter (0.5E~323, nan) = nan +rem (0.5E~323, nan) = nan +* (0.5E~323, inf) = inf ++ (0.5E~323, inf) = inf +- (0.5E~323, inf) = ~inf +/ (0.5E~323, inf) = 0.0 +nextAfter (0.5E~323, inf) = 0.1E~322 +rem (0.5E~323, inf) = 0.5E~323 +* (0.0, 0.17976931348623157E309) = 0.0 ++ (0.0, 0.17976931348623157E309) = 0.17976931348623157E309 +- (0.0, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (0.0, 0.17976931348623157E309) = 0.0 +nextAfter (0.0, 0.17976931348623157E309) = 0.5E~323 +rem (0.0, 0.17976931348623157E309) = 0.0 +* (0.0, 0.8988465674311579E308) = 0.0 ++ (0.0, 0.8988465674311579E308) = 0.8988465674311579E308 +- (0.0, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (0.0, 0.8988465674311579E308) = 0.0 +nextAfter (0.0, 0.8988465674311579E308) = 0.5E~323 +rem (0.0, 0.8988465674311579E308) = 0.0 +* (0.0, 0.123E4) = 0.0 ++ (0.0, 0.123E4) = 0.123E4 +- (0.0, 0.123E4) = ~0.123E4 +/ (0.0, 0.123E4) = 0.0 +nextAfter (0.0, 0.123E4) = 0.5E~323 +rem (0.0, 0.123E4) = 0.0 +* (0.0, 0.123E2) = 0.0 ++ (0.0, 0.123E2) = 0.123E2 +- (0.0, 0.123E2) = ~0.123E2 +/ (0.0, 0.123E2) = 0.0 +nextAfter (0.0, 0.123E2) = 0.5E~323 +rem (0.0, 0.123E2) = 0.0 +* (0.0, 0.3141592653589793E1) = 0.0 ++ (0.0, 0.3141592653589793E1) = 0.3141592653589793E1 +- (0.0, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (0.0, 0.3141592653589793E1) = 0.0 +nextAfter (0.0, 0.3141592653589793E1) = 0.5E~323 +rem (0.0, 0.3141592653589793E1) = 0.0 +* (0.0, 0.2718281828459045E1) = 0.0 ++ (0.0, 0.2718281828459045E1) = 0.2718281828459045E1 +- (0.0, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (0.0, 0.2718281828459045E1) = 0.0 +nextAfter (0.0, 0.2718281828459045E1) = 0.5E~323 +rem (0.0, 0.2718281828459045E1) = 0.0 +* (0.0, 0.123E1) = 0.0 ++ (0.0, 0.123E1) = 0.123E1 +- (0.0, 0.123E1) = ~0.123E1 +/ (0.0, 0.123E1) = 0.0 +nextAfter (0.0, 0.123E1) = 0.5E~323 +rem (0.0, 0.123E1) = 0.0 +* (0.0, 0.123) = 0.0 ++ (0.0, 0.123) = 0.123 +- (0.0, 0.123) = ~0.123 +/ (0.0, 0.123) = 0.0 +nextAfter (0.0, 0.123) = 0.5E~323 +rem (0.0, 0.123) = 0.0 +* (0.0, 0.123E~2) = 0.0 ++ (0.0, 0.123E~2) = 0.123E~2 +- (0.0, 0.123E~2) = ~0.123E~2 +/ (0.0, 0.123E~2) = 0.0 +nextAfter (0.0, 0.123E~2) = 0.5E~323 +rem (0.0, 0.123E~2) = 0.0 +* (0.0, 0.22250738585072014E~307) = 0.0 ++ (0.0, 0.22250738585072014E~307) = 0.22250738585072014E~307 +- (0.0, 0.22250738585072014E~307) = ~0.22250738585072014E~307 +/ (0.0, 0.22250738585072014E~307) = 0.0 +nextAfter (0.0, 0.22250738585072014E~307) = 0.5E~323 +rem (0.0, 0.22250738585072014E~307) = 0.0 +* (0.0, 0.11125369292536007E~307) = 0.0 ++ (0.0, 0.11125369292536007E~307) = 0.11125369292536007E~307 +- (0.0, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (0.0, 0.11125369292536007E~307) = 0.0 +nextAfter (0.0, 0.11125369292536007E~307) = 0.5E~323 +rem (0.0, 0.11125369292536007E~307) = 0.0 +* (0.0, 0.5E~323) = 0.0 ++ (0.0, 0.5E~323) = 0.5E~323 +- (0.0, 0.5E~323) = ~0.5E~323 +/ (0.0, 0.5E~323) = 0.0 +nextAfter (0.0, 0.5E~323) = 0.5E~323 +rem (0.0, 0.5E~323) = 0.0 +* (0.0, 0.0) = 0.0 ++ (0.0, 0.0) = 0.0 +- (0.0, 0.0) = 0.0 +/ (0.0, 0.0) = nan +nextAfter (0.0, 0.0) = 0.0 +rem (0.0, 0.0) = 0.0 +* (0.0, ~0.17976931348623157E309) = ~0.0 ++ (0.0, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (0.0, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (0.0, ~0.17976931348623157E309) = ~0.0 +nextAfter (0.0, ~0.17976931348623157E309) = ~0.5E~323 +rem (0.0, ~0.17976931348623157E309) = 0.0 +* (0.0, ~0.8988465674311579E308) = ~0.0 ++ (0.0, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (0.0, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (0.0, ~0.8988465674311579E308) = ~0.0 +nextAfter (0.0, ~0.8988465674311579E308) = ~0.5E~323 +rem (0.0, ~0.8988465674311579E308) = 0.0 +* (0.0, ~0.123E4) = ~0.0 ++ (0.0, ~0.123E4) = ~0.123E4 +- (0.0, ~0.123E4) = 0.123E4 +/ (0.0, ~0.123E4) = ~0.0 +nextAfter (0.0, ~0.123E4) = ~0.5E~323 +rem (0.0, ~0.123E4) = 0.0 +* (0.0, ~0.123E2) = ~0.0 ++ (0.0, ~0.123E2) = ~0.123E2 +- (0.0, ~0.123E2) = 0.123E2 +/ (0.0, ~0.123E2) = ~0.0 +nextAfter (0.0, ~0.123E2) = ~0.5E~323 +rem (0.0, ~0.123E2) = 0.0 +* (0.0, ~0.3141592653589793E1) = ~0.0 ++ (0.0, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (0.0, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (0.0, ~0.3141592653589793E1) = ~0.0 +nextAfter (0.0, ~0.3141592653589793E1) = ~0.5E~323 +rem (0.0, ~0.3141592653589793E1) = 0.0 +* (0.0, ~0.2718281828459045E1) = ~0.0 ++ (0.0, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (0.0, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (0.0, ~0.2718281828459045E1) = ~0.0 +nextAfter (0.0, ~0.2718281828459045E1) = ~0.5E~323 +rem (0.0, ~0.2718281828459045E1) = 0.0 +* (0.0, ~0.123E1) = ~0.0 ++ (0.0, ~0.123E1) = ~0.123E1 +- (0.0, ~0.123E1) = 0.123E1 +/ (0.0, ~0.123E1) = ~0.0 +nextAfter (0.0, ~0.123E1) = ~0.5E~323 +rem (0.0, ~0.123E1) = 0.0 +* (0.0, ~0.123) = ~0.0 ++ (0.0, ~0.123) = ~0.123 +- (0.0, ~0.123) = 0.123 +/ (0.0, ~0.123) = ~0.0 +nextAfter (0.0, ~0.123) = ~0.5E~323 +rem (0.0, ~0.123) = 0.0 +* (0.0, ~0.123E~2) = ~0.0 ++ (0.0, ~0.123E~2) = ~0.123E~2 +- (0.0, ~0.123E~2) = 0.123E~2 +/ (0.0, ~0.123E~2) = ~0.0 +nextAfter (0.0, ~0.123E~2) = ~0.5E~323 +rem (0.0, ~0.123E~2) = 0.0 +* (0.0, ~0.22250738585072014E~307) = ~0.0 ++ (0.0, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +- (0.0, ~0.22250738585072014E~307) = 0.22250738585072014E~307 +/ (0.0, ~0.22250738585072014E~307) = ~0.0 +nextAfter (0.0, ~0.22250738585072014E~307) = ~0.5E~323 +rem (0.0, ~0.22250738585072014E~307) = 0.0 +* (0.0, ~0.11125369292536007E~307) = ~0.0 ++ (0.0, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (0.0, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (0.0, ~0.11125369292536007E~307) = ~0.0 +nextAfter (0.0, ~0.11125369292536007E~307) = ~0.5E~323 +rem (0.0, ~0.11125369292536007E~307) = 0.0 +* (0.0, ~0.5E~323) = ~0.0 ++ (0.0, ~0.5E~323) = ~0.5E~323 +- (0.0, ~0.5E~323) = 0.5E~323 +/ (0.0, ~0.5E~323) = ~0.0 +nextAfter (0.0, ~0.5E~323) = ~0.5E~323 +rem (0.0, ~0.5E~323) = 0.0 +* (0.0, ~0.0) = ~0.0 ++ (0.0, ~0.0) = 0.0 +- (0.0, ~0.0) = 0.0 +/ (0.0, ~0.0) = nan +nextAfter (0.0, ~0.0) = ~0.0 +rem (0.0, ~0.0) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.5E~323 +rem (0.0, inf) = 0.0 +* (0.0, ~inf) = nan ++ (0.0, ~inf) = ~inf +- (0.0, ~inf) = inf +/ (0.0, ~inf) = ~0.0 +nextAfter (0.0, ~inf) = ~0.5E~323 +rem (0.0, ~inf) = 0.0 +* (0.0, nan) = nan ++ (0.0, nan) = nan +- (0.0, nan) = nan +/ (0.0, nan) = nan +nextAfter (0.0, nan) = nan +rem (0.0, nan) = 0.0 +* (0.0, inf) = nan ++ (0.0, inf) = inf +- (0.0, inf) = ~inf +/ (0.0, inf) = 0.0 +nextAfter (0.0, inf) = 0.5E~323 +rem (0.0, inf) = 0.0 +* (~0.17976931348623157E309, 0.17976931348623157E309) = ~inf ++ (~0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +- (~0.17976931348623157E309, 0.17976931348623157E309) = ~inf +/ (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.1E1 +nextAfter (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.17976931348623157E309) = 0.0 +* (~0.17976931348623157E309, 0.8988465674311579E308) = ~inf ++ (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.17976931348623157E309, 0.8988465674311579E308) = ~inf +/ (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.2E1 +nextAfter (~0.17976931348623157E309, 0.8988465674311579E308) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.8988465674311579E308) = 0.0 +* (~0.17976931348623157E309, 0.123E4) = ~inf ++ (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E4) = ~0.1461539134034403E306 +nextAfter (~0.17976931348623157E309, 0.123E4) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E4) = ~0.41709943968791996E292 +* (~0.17976931348623157E309, 0.123E2) = ~inf ++ (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E2) = ~0.1461539134034403E308 +nextAfter (~0.17976931348623157E309, 0.123E2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E2) = ~0.43366647350729996E292 +* (~0.17976931348623157E309, 0.3141592653589793E1) = ~inf ++ (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.5722234971514056E308 +nextAfter (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.3141592653589793E1) = ~0.7289494880527199E292 +* (~0.17976931348623157E309, 0.2718281828459045E1) = ~inf ++ (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.661334345850887E308 +nextAfter (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.2718281828459045E1) = ~0.106516282144602E293 +* (~0.17976931348623157E309, 0.123E1) = ~inf ++ (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E1) = ~0.1461539134034403E309 +nextAfter (~0.17976931348623157E309, 0.123E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E1) = ~0.111778751710758E293 +* (~0.17976931348623157E309, 0.123) = ~0.22111625558806483E308 ++ (~0.17976931348623157E309, 0.123) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123) = ~inf +nextAfter (~0.17976931348623157E309, 0.123) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123) = inf +* (~0.17976931348623157E309, 0.123E~2) = ~0.2211162555880648E306 ++ (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.123E~2) = ~inf +nextAfter (~0.17976931348623157E309, 0.123E~2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.123E~2) = inf +* (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.39999999999999996E1 ++ (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.22250738585072014E~307) = ~inf +nextAfter (~0.17976931348623157E309, 0.22250738585072014E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.22250738585072014E~307) = inf +* (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.19999999999999998E1 ++ (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.11125369292536007E~307) = ~inf +nextAfter (~0.17976931348623157E309, 0.11125369292536007E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.11125369292536007E~307) = inf +* (~0.17976931348623157E309, 0.5E~323) = ~0.8881784197001251E~15 ++ (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.5E~323) = ~inf +nextAfter (~0.17976931348623157E309, 0.5E~323) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.5E~323) = inf +* (~0.17976931348623157E309, 0.0) = ~0.0 ++ (~0.17976931348623157E309, 0.0) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, 0.0) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, 0.0) = ~inf +nextAfter (~0.17976931348623157E309, 0.0) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, 0.0) = nan +* (~0.17976931348623157E309, ~0.17976931348623157E309) = inf ++ (~0.17976931348623157E309, ~0.17976931348623157E309) = ~inf +- (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +/ (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.1E1 +nextAfter (~0.17976931348623157E309, ~0.17976931348623157E309) = ~0.17976931348623157E309 +rem (~0.17976931348623157E309, ~0.17976931348623157E309) = 0.0 +* (~0.17976931348623157E309, ~0.8988465674311579E308) = inf ++ (~0.17976931348623157E309, ~0.8988465674311579E308) = ~inf +- (~0.17976931348623157E309, ~0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.17976931348623157E309, ~0.8988465674311579E308) = 0.2E1 +nextAfter (~0.17976931348623157E309, ~0.8988465674311579E308) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.8988465674311579E308) = 0.0 +* (~0.17976931348623157E309, ~0.123E4) = inf ++ (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E4) = 0.1461539134034403E306 +nextAfter (~0.17976931348623157E309, ~0.123E4) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E4) = ~0.41709943968791996E292 +* (~0.17976931348623157E309, ~0.123E2) = inf ++ (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E2) = 0.1461539134034403E308 +nextAfter (~0.17976931348623157E309, ~0.123E2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E2) = ~0.43366647350729996E292 +* (~0.17976931348623157E309, ~0.3141592653589793E1) = inf ++ (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.3141592653589793E1) = 0.5722234971514056E308 +nextAfter (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.3141592653589793E1) = ~0.7289494880527199E292 +* (~0.17976931348623157E309, ~0.2718281828459045E1) = inf ++ (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.2718281828459045E1) = 0.661334345850887E308 +nextAfter (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.2718281828459045E1) = ~0.106516282144602E293 +* (~0.17976931348623157E309, ~0.123E1) = inf ++ (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E1) = 0.1461539134034403E309 +nextAfter (~0.17976931348623157E309, ~0.123E1) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E1) = ~0.111778751710758E293 +* (~0.17976931348623157E309, ~0.123) = 0.22111625558806483E308 ++ (~0.17976931348623157E309, ~0.123) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123) = inf +nextAfter (~0.17976931348623157E309, ~0.123) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123) = inf +* (~0.17976931348623157E309, ~0.123E~2) = 0.2211162555880648E306 ++ (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.123E~2) = inf +nextAfter (~0.17976931348623157E309, ~0.123E~2) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.123E~2) = inf +* (~0.17976931348623157E309, ~0.22250738585072014E~307) = 0.39999999999999996E1 ++ (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.22250738585072014E~307) = inf +nextAfter (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.22250738585072014E~307) = inf +* (~0.17976931348623157E309, ~0.11125369292536007E~307) = 0.19999999999999998E1 ++ (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.11125369292536007E~307) = inf +nextAfter (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.11125369292536007E~307) = inf +* (~0.17976931348623157E309, ~0.5E~323) = 0.8881784197001251E~15 ++ (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.5E~323) = inf +nextAfter (~0.17976931348623157E309, ~0.5E~323) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.5E~323) = inf +* (~0.17976931348623157E309, ~0.0) = 0.0 ++ (~0.17976931348623157E309, ~0.0) = ~0.17976931348623157E309 +- (~0.17976931348623157E309, ~0.0) = ~0.17976931348623157E309 +/ (~0.17976931348623157E309, ~0.0) = inf +nextAfter (~0.17976931348623157E309, ~0.0) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, ~0.0) = nan +* (~0.17976931348623157E309, inf) = ~inf ++ (~0.17976931348623157E309, inf) = inf +- (~0.17976931348623157E309, inf) = ~inf +/ (~0.17976931348623157E309, inf) = ~0.0 +nextAfter (~0.17976931348623157E309, inf) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, inf) = ~0.17976931348623157E309 +* (~0.17976931348623157E309, ~inf) = inf ++ (~0.17976931348623157E309, ~inf) = ~inf +- (~0.17976931348623157E309, ~inf) = inf +/ (~0.17976931348623157E309, ~inf) = 0.0 +nextAfter (~0.17976931348623157E309, ~inf) = ~inf +rem (~0.17976931348623157E309, ~inf) = ~0.17976931348623157E309 +* (~0.17976931348623157E309, nan) = nan ++ (~0.17976931348623157E309, nan) = nan +- (~0.17976931348623157E309, nan) = nan +/ (~0.17976931348623157E309, nan) = nan +nextAfter (~0.17976931348623157E309, nan) = nan +rem (~0.17976931348623157E309, nan) = nan +* (~0.17976931348623157E309, inf) = ~inf ++ (~0.17976931348623157E309, inf) = inf +- (~0.17976931348623157E309, inf) = ~inf +/ (~0.17976931348623157E309, inf) = ~0.0 +nextAfter (~0.17976931348623157E309, inf) = ~0.17976931348623155E309 +rem (~0.17976931348623157E309, inf) = ~0.17976931348623157E309 +* (~0.8988465674311579E308, 0.17976931348623157E309) = ~inf ++ (~0.8988465674311579E308, 0.17976931348623157E309) = 0.8988465674311579E308 +- (~0.8988465674311579E308, 0.17976931348623157E309) = ~inf +/ (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.5 +nextAfter (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, 0.8988465674311579E308) = ~inf ++ (~0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +- (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.17976931348623157E309 +/ (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.1E1 +nextAfter (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.8988465674311579E308) = 0.0 +* (~0.8988465674311579E308, 0.123E4) = ~inf ++ (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E4) = ~0.7307695670172015E305 +nextAfter (~0.8988465674311579E308, 0.123E4) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E4) = ~0.20854971984395998E292 +* (~0.8988465674311579E308, 0.123E2) = ~inf ++ (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E2) = ~0.7307695670172014E307 +nextAfter (~0.8988465674311579E308, 0.123E2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E2) = ~0.21683323675364998E292 +* (~0.8988465674311579E308, 0.3141592653589793E1) = ~inf ++ (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.2861117485757028E308 +nextAfter (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.3141592653589793E1) = ~0.36447474402635997E292 +* (~0.8988465674311579E308, 0.2718281828459045E1) = ~inf ++ (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.3306671729254435E308 +nextAfter (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.2718281828459045E1) = ~0.53258141072301E292 +* (~0.8988465674311579E308, 0.123E1) = ~0.1105581277940324E309 ++ (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E1) = ~0.7307695670172015E308 +nextAfter (~0.8988465674311579E308, 0.123E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E1) = ~0.55889375855379E292 +* (~0.8988465674311579E308, 0.123) = ~0.11055812779403241E308 ++ (~0.8988465674311579E308, 0.123) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123) = ~inf +nextAfter (~0.8988465674311579E308, 0.123) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123) = inf +* (~0.8988465674311579E308, 0.123E~2) = ~0.1105581277940324E306 ++ (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.123E~2) = ~inf +nextAfter (~0.8988465674311579E308, 0.123E~2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.123E~2) = inf +* (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.19999999999999998E1 ++ (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.22250738585072014E~307) = ~inf +nextAfter (~0.8988465674311579E308, 0.22250738585072014E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.22250738585072014E~307) = inf +* (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.9999999999999999 ++ (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.11125369292536007E~307) = ~inf +nextAfter (~0.8988465674311579E308, 0.11125369292536007E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.11125369292536007E~307) = inf +* (~0.8988465674311579E308, 0.5E~323) = ~0.44408920985006257E~15 ++ (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.5E~323) = ~inf +nextAfter (~0.8988465674311579E308, 0.5E~323) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.5E~323) = inf +* (~0.8988465674311579E308, 0.0) = ~0.0 ++ (~0.8988465674311579E308, 0.0) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, 0.0) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, 0.0) = ~inf +nextAfter (~0.8988465674311579E308, 0.0) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, 0.0) = nan +* (~0.8988465674311579E308, ~0.17976931348623157E309) = inf ++ (~0.8988465674311579E308, ~0.17976931348623157E309) = ~inf +- (~0.8988465674311579E308, ~0.17976931348623157E309) = 0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.17976931348623157E309) = 0.5 +nextAfter (~0.8988465674311579E308, ~0.17976931348623157E309) = ~0.898846567431158E308 +rem (~0.8988465674311579E308, ~0.17976931348623157E309) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, ~0.8988465674311579E308) = inf ++ (~0.8988465674311579E308, ~0.8988465674311579E308) = ~0.17976931348623157E309 +- (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +/ (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.1E1 +nextAfter (~0.8988465674311579E308, ~0.8988465674311579E308) = ~0.8988465674311579E308 +rem (~0.8988465674311579E308, ~0.8988465674311579E308) = 0.0 +* (~0.8988465674311579E308, ~0.123E4) = inf ++ (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E4) = 0.7307695670172015E305 +nextAfter (~0.8988465674311579E308, ~0.123E4) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E4) = ~0.20854971984395998E292 +* (~0.8988465674311579E308, ~0.123E2) = inf ++ (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E2) = 0.7307695670172014E307 +nextAfter (~0.8988465674311579E308, ~0.123E2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E2) = ~0.21683323675364998E292 +* (~0.8988465674311579E308, ~0.3141592653589793E1) = inf ++ (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.3141592653589793E1) = 0.2861117485757028E308 +nextAfter (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.3141592653589793E1) = ~0.36447474402635997E292 +* (~0.8988465674311579E308, ~0.2718281828459045E1) = inf ++ (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.2718281828459045E1) = 0.3306671729254435E308 +nextAfter (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.2718281828459045E1) = ~0.53258141072301E292 +* (~0.8988465674311579E308, ~0.123E1) = 0.1105581277940324E309 ++ (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E1) = 0.7307695670172015E308 +nextAfter (~0.8988465674311579E308, ~0.123E1) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E1) = ~0.55889375855379E292 +* (~0.8988465674311579E308, ~0.123) = 0.11055812779403241E308 ++ (~0.8988465674311579E308, ~0.123) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123) = inf +nextAfter (~0.8988465674311579E308, ~0.123) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123) = inf +* (~0.8988465674311579E308, ~0.123E~2) = 0.1105581277940324E306 ++ (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.123E~2) = inf +nextAfter (~0.8988465674311579E308, ~0.123E~2) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.123E~2) = inf +* (~0.8988465674311579E308, ~0.22250738585072014E~307) = 0.19999999999999998E1 ++ (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.22250738585072014E~307) = inf +nextAfter (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.22250738585072014E~307) = inf +* (~0.8988465674311579E308, ~0.11125369292536007E~307) = 0.9999999999999999 ++ (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.11125369292536007E~307) = inf +nextAfter (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.11125369292536007E~307) = inf +* (~0.8988465674311579E308, ~0.5E~323) = 0.44408920985006257E~15 ++ (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.5E~323) = inf +nextAfter (~0.8988465674311579E308, ~0.5E~323) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.5E~323) = inf +* (~0.8988465674311579E308, ~0.0) = 0.0 ++ (~0.8988465674311579E308, ~0.0) = ~0.8988465674311579E308 +- (~0.8988465674311579E308, ~0.0) = ~0.8988465674311579E308 +/ (~0.8988465674311579E308, ~0.0) = inf +nextAfter (~0.8988465674311579E308, ~0.0) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, ~0.0) = nan +* (~0.8988465674311579E308, inf) = ~inf ++ (~0.8988465674311579E308, inf) = inf +- (~0.8988465674311579E308, inf) = ~inf +/ (~0.8988465674311579E308, inf) = ~0.0 +nextAfter (~0.8988465674311579E308, inf) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, inf) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, ~inf) = inf ++ (~0.8988465674311579E308, ~inf) = ~inf +- (~0.8988465674311579E308, ~inf) = inf +/ (~0.8988465674311579E308, ~inf) = 0.0 +nextAfter (~0.8988465674311579E308, ~inf) = ~0.898846567431158E308 +rem (~0.8988465674311579E308, ~inf) = ~0.8988465674311579E308 +* (~0.8988465674311579E308, nan) = nan ++ (~0.8988465674311579E308, nan) = nan +- (~0.8988465674311579E308, nan) = nan +/ (~0.8988465674311579E308, nan) = nan +nextAfter (~0.8988465674311579E308, nan) = nan +rem (~0.8988465674311579E308, nan) = nan +* (~0.8988465674311579E308, inf) = ~inf ++ (~0.8988465674311579E308, inf) = inf +- (~0.8988465674311579E308, inf) = ~inf +/ (~0.8988465674311579E308, inf) = ~0.0 +nextAfter (~0.8988465674311579E308, inf) = ~0.8988465674311578E308 +rem (~0.8988465674311579E308, inf) = ~0.8988465674311579E308 +* (~0.123E4, 0.17976931348623157E309) = ~inf ++ (~0.123E4, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E4, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E4, 0.17976931348623157E309) = ~0.6842102114909646E~305 +nextAfter (~0.123E4, 0.17976931348623157E309) = ~0.12299999999999998E4 +rem (~0.123E4, 0.17976931348623157E309) = ~0.123E4 +* (~0.123E4, 0.8988465674311579E308) = ~inf ++ (~0.123E4, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E4, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E4, 0.8988465674311579E308) = ~0.1368420422981929E~304 +nextAfter (~0.123E4, 0.8988465674311579E308) = ~0.12299999999999998E4 +rem (~0.123E4, 0.8988465674311579E308) = ~0.123E4 +* (~0.123E4, 0.123E4) = ~0.15129E7 ++ (~0.123E4, 0.123E4) = 0.0 +- (~0.123E4, 0.123E4) = ~0.246E4 +/ (~0.123E4, 0.123E4) = ~0.1E1 +nextAfter (~0.123E4, 0.123E4) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E4) = 0.0 +* (~0.123E4, 0.123E2) = ~0.15129E5 ++ (~0.123E4, 0.123E2) = ~0.12177E4 +- (~0.123E4, 0.123E2) = ~0.12423E4 +/ (~0.123E4, 0.123E2) = ~0.1E3 +nextAfter (~0.123E4, 0.123E2) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E2) = 0.7105427357601002E~13 +* (~0.123E4, 0.3141592653589793E1) = ~0.38641589639154454E4 ++ (~0.123E4, 0.3141592653589793E1) = ~0.122685840734641E4 +- (~0.123E4, 0.3141592653589793E1) = ~0.123314159265359E4 +/ (~0.123E4, 0.3141592653589793E1) = ~0.39152116000606253E3 +nextAfter (~0.123E4, 0.3141592653589793E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.3141592653589793E1) = ~0.16372724463908916E1 +* (~0.123E4, 0.2718281828459045E1) = ~0.33434866490046256E4 ++ (~0.123E4, 0.2718281828459045E1) = ~0.1227281718171541E4 +- (~0.123E4, 0.2718281828459045E1) = ~0.1232718281828459E4 +/ (~0.123E4, 0.2718281828459045E1) = ~0.4524917126408741E3 +nextAfter (~0.123E4, 0.2718281828459045E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.2718281828459045E1) = ~0.1336613536511619E1 +* (~0.123E4, 0.123E1) = ~0.15129E4 ++ (~0.123E4, 0.123E1) = ~0.122877E4 +- (~0.123E4, 0.123E1) = ~0.123123E4 +/ (~0.123E4, 0.123E1) = ~0.1E4 +nextAfter (~0.123E4, 0.123E1) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E1) = ~0.17763568394002505E~13 +* (~0.123E4, 0.123) = ~0.15129E3 ++ (~0.123E4, 0.123) = ~0.1229877E4 +- (~0.123E4, 0.123) = ~0.1230123E4 +/ (~0.123E4, 0.123) = ~0.1E5 +nextAfter (~0.123E4, 0.123) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123) = ~0.17763568394002505E~13 +* (~0.123E4, 0.123E~2) = ~0.15129E1 ++ (~0.123E4, 0.123E~2) = ~0.122999877E4 +- (~0.123E4, 0.123E~2) = ~0.123000123E4 +/ (~0.123E4, 0.123E~2) = ~0.1E7 +nextAfter (~0.123E4, 0.123E~2) = ~0.12299999999999998E4 +rem (~0.123E4, 0.123E~2) = ~0.26423307986078726E~13 +* (~0.123E4, 0.22250738585072014E~307) = ~0.27368408459638577E~304 ++ (~0.123E4, 0.22250738585072014E~307) = ~0.123E4 +- (~0.123E4, 0.22250738585072014E~307) = ~0.123E4 +/ (~0.123E4, 0.22250738585072014E~307) = ~inf +nextAfter (~0.123E4, 0.22250738585072014E~307) = ~0.12299999999999998E4 +rem (~0.123E4, 0.22250738585072014E~307) = inf +* (~0.123E4, 0.11125369292536007E~307) = ~0.13684204229819289E~304 ++ (~0.123E4, 0.11125369292536007E~307) = ~0.123E4 +- (~0.123E4, 0.11125369292536007E~307) = ~0.123E4 +/ (~0.123E4, 0.11125369292536007E~307) = ~inf +nextAfter (~0.123E4, 0.11125369292536007E~307) = ~0.12299999999999998E4 +rem (~0.123E4, 0.11125369292536007E~307) = inf +* (~0.123E4, 0.5E~323) = ~0.6077E~320 ++ (~0.123E4, 0.5E~323) = ~0.123E4 +- (~0.123E4, 0.5E~323) = ~0.123E4 +/ (~0.123E4, 0.5E~323) = ~inf +nextAfter (~0.123E4, 0.5E~323) = ~0.12299999999999998E4 +rem (~0.123E4, 0.5E~323) = inf +* (~0.123E4, 0.0) = ~0.0 ++ (~0.123E4, 0.0) = ~0.123E4 +- (~0.123E4, 0.0) = ~0.123E4 +/ (~0.123E4, 0.0) = ~inf +nextAfter (~0.123E4, 0.0) = ~0.12299999999999998E4 +rem (~0.123E4, 0.0) = nan +* (~0.123E4, ~0.17976931348623157E309) = inf ++ (~0.123E4, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E4, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E4, ~0.17976931348623157E309) = 0.6842102114909646E~305 +nextAfter (~0.123E4, ~0.17976931348623157E309) = ~0.12300000000000002E4 +rem (~0.123E4, ~0.17976931348623157E309) = ~0.123E4 +* (~0.123E4, ~0.8988465674311579E308) = inf ++ (~0.123E4, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E4, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E4, ~0.8988465674311579E308) = 0.1368420422981929E~304 +nextAfter (~0.123E4, ~0.8988465674311579E308) = ~0.12300000000000002E4 +rem (~0.123E4, ~0.8988465674311579E308) = ~0.123E4 +* (~0.123E4, ~0.123E4) = 0.15129E7 ++ (~0.123E4, ~0.123E4) = ~0.246E4 +- (~0.123E4, ~0.123E4) = 0.0 +/ (~0.123E4, ~0.123E4) = 0.1E1 +nextAfter (~0.123E4, ~0.123E4) = ~0.123E4 +rem (~0.123E4, ~0.123E4) = 0.0 +* (~0.123E4, ~0.123E2) = 0.15129E5 ++ (~0.123E4, ~0.123E2) = ~0.12423E4 +- (~0.123E4, ~0.123E2) = ~0.12177E4 +/ (~0.123E4, ~0.123E2) = 0.1E3 +nextAfter (~0.123E4, ~0.123E2) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E2) = 0.7105427357601002E~13 +* (~0.123E4, ~0.3141592653589793E1) = 0.38641589639154454E4 ++ (~0.123E4, ~0.3141592653589793E1) = ~0.123314159265359E4 +- (~0.123E4, ~0.3141592653589793E1) = ~0.122685840734641E4 +/ (~0.123E4, ~0.3141592653589793E1) = 0.39152116000606253E3 +nextAfter (~0.123E4, ~0.3141592653589793E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.3141592653589793E1) = ~0.16372724463908916E1 +* (~0.123E4, ~0.2718281828459045E1) = 0.33434866490046256E4 ++ (~0.123E4, ~0.2718281828459045E1) = ~0.1232718281828459E4 +- (~0.123E4, ~0.2718281828459045E1) = ~0.1227281718171541E4 +/ (~0.123E4, ~0.2718281828459045E1) = 0.4524917126408741E3 +nextAfter (~0.123E4, ~0.2718281828459045E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.2718281828459045E1) = ~0.1336613536511619E1 +* (~0.123E4, ~0.123E1) = 0.15129E4 ++ (~0.123E4, ~0.123E1) = ~0.123123E4 +- (~0.123E4, ~0.123E1) = ~0.122877E4 +/ (~0.123E4, ~0.123E1) = 0.1E4 +nextAfter (~0.123E4, ~0.123E1) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E1) = ~0.17763568394002505E~13 +* (~0.123E4, ~0.123) = 0.15129E3 ++ (~0.123E4, ~0.123) = ~0.1230123E4 +- (~0.123E4, ~0.123) = ~0.1229877E4 +/ (~0.123E4, ~0.123) = 0.1E5 +nextAfter (~0.123E4, ~0.123) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123) = ~0.17763568394002505E~13 +* (~0.123E4, ~0.123E~2) = 0.15129E1 ++ (~0.123E4, ~0.123E~2) = ~0.123000123E4 +- (~0.123E4, ~0.123E~2) = ~0.122999877E4 +/ (~0.123E4, ~0.123E~2) = 0.1E7 +nextAfter (~0.123E4, ~0.123E~2) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.123E~2) = ~0.26423307986078726E~13 +* (~0.123E4, ~0.22250738585072014E~307) = 0.27368408459638577E~304 ++ (~0.123E4, ~0.22250738585072014E~307) = ~0.123E4 +- (~0.123E4, ~0.22250738585072014E~307) = ~0.123E4 +/ (~0.123E4, ~0.22250738585072014E~307) = inf +nextAfter (~0.123E4, ~0.22250738585072014E~307) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.22250738585072014E~307) = inf +* (~0.123E4, ~0.11125369292536007E~307) = 0.13684204229819289E~304 ++ (~0.123E4, ~0.11125369292536007E~307) = ~0.123E4 +- (~0.123E4, ~0.11125369292536007E~307) = ~0.123E4 +/ (~0.123E4, ~0.11125369292536007E~307) = inf +nextAfter (~0.123E4, ~0.11125369292536007E~307) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.11125369292536007E~307) = inf +* (~0.123E4, ~0.5E~323) = 0.6077E~320 ++ (~0.123E4, ~0.5E~323) = ~0.123E4 +- (~0.123E4, ~0.5E~323) = ~0.123E4 +/ (~0.123E4, ~0.5E~323) = inf +nextAfter (~0.123E4, ~0.5E~323) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.5E~323) = inf +* (~0.123E4, ~0.0) = 0.0 ++ (~0.123E4, ~0.0) = ~0.123E4 +- (~0.123E4, ~0.0) = ~0.123E4 +/ (~0.123E4, ~0.0) = inf +nextAfter (~0.123E4, ~0.0) = ~0.12299999999999998E4 +rem (~0.123E4, ~0.0) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999999999998E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E4, ~inf) = inf ++ (~0.123E4, ~inf) = ~inf +- (~0.123E4, ~inf) = inf +/ (~0.123E4, ~inf) = 0.0 +nextAfter (~0.123E4, ~inf) = ~0.12300000000000002E4 +rem (~0.123E4, ~inf) = ~0.123E4 +* (~0.123E4, nan) = nan ++ (~0.123E4, nan) = nan +- (~0.123E4, nan) = nan +/ (~0.123E4, nan) = nan +nextAfter (~0.123E4, nan) = nan +rem (~0.123E4, nan) = nan +* (~0.123E4, inf) = ~inf ++ (~0.123E4, inf) = inf +- (~0.123E4, inf) = ~inf +/ (~0.123E4, inf) = ~0.0 +nextAfter (~0.123E4, inf) = ~0.12299999999999998E4 +rem (~0.123E4, inf) = ~0.123E4 +* (~0.123E2, 0.17976931348623157E309) = ~inf ++ (~0.123E2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E2, 0.17976931348623157E309) = ~0.6842102114909646E~307 +nextAfter (~0.123E2, 0.17976931348623157E309) = ~0.12299999999999999E2 +rem (~0.123E2, 0.17976931348623157E309) = ~0.123E2 +* (~0.123E2, 0.8988465674311579E308) = ~inf ++ (~0.123E2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E2, 0.8988465674311579E308) = ~0.13684204229819291E~306 +nextAfter (~0.123E2, 0.8988465674311579E308) = ~0.12299999999999999E2 +rem (~0.123E2, 0.8988465674311579E308) = ~0.123E2 +* (~0.123E2, 0.123E4) = ~0.15129E5 ++ (~0.123E2, 0.123E4) = 0.12177E4 +- (~0.123E2, 0.123E4) = ~0.12423E4 +/ (~0.123E2, 0.123E4) = ~0.1E~1 +nextAfter (~0.123E2, 0.123E4) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E4) = ~0.123E2 +* (~0.123E2, 0.123E2) = ~0.15129000000000002E3 ++ (~0.123E2, 0.123E2) = 0.0 +- (~0.123E2, 0.123E2) = ~0.246E2 +/ (~0.123E2, 0.123E2) = ~0.1E1 +nextAfter (~0.123E2, 0.123E2) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E2) = 0.0 +* (~0.123E2, 0.3141592653589793E1) = ~0.3864158963915446E2 ++ (~0.123E2, 0.3141592653589793E1) = ~0.9158407346410208E1 +- (~0.123E2, 0.3141592653589793E1) = ~0.15441592653589794E2 +/ (~0.123E2, 0.3141592653589793E1) = ~0.3915211600060626E1 +nextAfter (~0.123E2, 0.3141592653589793E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.3141592653589793E1) = ~0.28752220392306214E1 +* (~0.123E2, 0.2718281828459045E1) = ~0.33434866490046254E2 ++ (~0.123E2, 0.2718281828459045E1) = ~0.9581718171540956E1 +- (~0.123E2, 0.2718281828459045E1) = ~0.15018281828459045E2 +/ (~0.123E2, 0.2718281828459045E1) = ~0.4524917126408741E1 +nextAfter (~0.123E2, 0.2718281828459045E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.2718281828459045E1) = ~0.14268726861638203E1 +* (~0.123E2, 0.123E1) = ~0.15129000000000001E2 ++ (~0.123E2, 0.123E1) = ~0.1107E2 +- (~0.123E2, 0.123E1) = ~0.13530000000000001E2 +/ (~0.123E2, 0.123E1) = ~0.1E2 +nextAfter (~0.123E2, 0.123E1) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E1) = ~0.8881784197001252E~15 +* (~0.123E2, 0.123) = ~0.15129000000000001E1 ++ (~0.123E2, 0.123) = ~0.12177000000000001E2 +- (~0.123E2, 0.123) = ~0.12423E2 +/ (~0.123E2, 0.123) = ~0.10000000000000001E3 +nextAfter (~0.123E2, 0.123) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123) = ~0.8881784197001252E~15 +* (~0.123E2, 0.123E~2) = ~0.15129E~1 ++ (~0.123E2, 0.123E~2) = ~0.12298770000000001E2 +- (~0.123E2, 0.123E~2) = ~0.1230123E2 +/ (~0.123E2, 0.123E~2) = ~0.1E5 +nextAfter (~0.123E2, 0.123E~2) = ~0.12299999999999999E2 +rem (~0.123E2, 0.123E~2) = ~0.9749145934989656E~15 +* (~0.123E2, 0.22250738585072014E~307) = ~0.2736840845963858E~306 ++ (~0.123E2, 0.22250738585072014E~307) = ~0.123E2 +- (~0.123E2, 0.22250738585072014E~307) = ~0.123E2 +/ (~0.123E2, 0.22250738585072014E~307) = ~inf +nextAfter (~0.123E2, 0.22250738585072014E~307) = ~0.12299999999999999E2 +rem (~0.123E2, 0.22250738585072014E~307) = inf +* (~0.123E2, 0.11125369292536007E~307) = ~0.1368420422981929E~306 ++ (~0.123E2, 0.11125369292536007E~307) = ~0.123E2 +- (~0.123E2, 0.11125369292536007E~307) = ~0.123E2 +/ (~0.123E2, 0.11125369292536007E~307) = ~inf +nextAfter (~0.123E2, 0.11125369292536007E~307) = ~0.12299999999999999E2 +rem (~0.123E2, 0.11125369292536007E~307) = inf +* (~0.123E2, 0.5E~323) = ~0.6E~322 ++ (~0.123E2, 0.5E~323) = ~0.123E2 +- (~0.123E2, 0.5E~323) = ~0.123E2 +/ (~0.123E2, 0.5E~323) = ~inf +nextAfter (~0.123E2, 0.5E~323) = ~0.12299999999999999E2 +rem (~0.123E2, 0.5E~323) = inf +* (~0.123E2, 0.0) = ~0.0 ++ (~0.123E2, 0.0) = ~0.123E2 +- (~0.123E2, 0.0) = ~0.123E2 +/ (~0.123E2, 0.0) = ~inf +nextAfter (~0.123E2, 0.0) = ~0.12299999999999999E2 +rem (~0.123E2, 0.0) = nan +* (~0.123E2, ~0.17976931348623157E309) = inf ++ (~0.123E2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E2, ~0.17976931348623157E309) = 0.6842102114909646E~307 +nextAfter (~0.123E2, ~0.17976931348623157E309) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.17976931348623157E309) = ~0.123E2 +* (~0.123E2, ~0.8988465674311579E308) = inf ++ (~0.123E2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E2, ~0.8988465674311579E308) = 0.13684204229819291E~306 +nextAfter (~0.123E2, ~0.8988465674311579E308) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.8988465674311579E308) = ~0.123E2 +* (~0.123E2, ~0.123E4) = 0.15129E5 ++ (~0.123E2, ~0.123E4) = ~0.12423E4 +- (~0.123E2, ~0.123E4) = 0.12177E4 +/ (~0.123E2, ~0.123E4) = 0.1E~1 +nextAfter (~0.123E2, ~0.123E4) = ~0.12300000000000002E2 +rem (~0.123E2, ~0.123E4) = ~0.123E2 +* (~0.123E2, ~0.123E2) = 0.15129000000000002E3 ++ (~0.123E2, ~0.123E2) = ~0.246E2 +- (~0.123E2, ~0.123E2) = 0.0 +/ (~0.123E2, ~0.123E2) = 0.1E1 +nextAfter (~0.123E2, ~0.123E2) = ~0.123E2 +rem (~0.123E2, ~0.123E2) = 0.0 +* (~0.123E2, ~0.3141592653589793E1) = 0.3864158963915446E2 ++ (~0.123E2, ~0.3141592653589793E1) = ~0.15441592653589794E2 +- (~0.123E2, ~0.3141592653589793E1) = ~0.9158407346410208E1 +/ (~0.123E2, ~0.3141592653589793E1) = 0.3915211600060626E1 +nextAfter (~0.123E2, ~0.3141592653589793E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.3141592653589793E1) = ~0.28752220392306214E1 +* (~0.123E2, ~0.2718281828459045E1) = 0.33434866490046254E2 ++ (~0.123E2, ~0.2718281828459045E1) = ~0.15018281828459045E2 +- (~0.123E2, ~0.2718281828459045E1) = ~0.9581718171540956E1 +/ (~0.123E2, ~0.2718281828459045E1) = 0.4524917126408741E1 +nextAfter (~0.123E2, ~0.2718281828459045E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.2718281828459045E1) = ~0.14268726861638203E1 +* (~0.123E2, ~0.123E1) = 0.15129000000000001E2 ++ (~0.123E2, ~0.123E1) = ~0.13530000000000001E2 +- (~0.123E2, ~0.123E1) = ~0.1107E2 +/ (~0.123E2, ~0.123E1) = 0.1E2 +nextAfter (~0.123E2, ~0.123E1) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123E1) = ~0.8881784197001252E~15 +* (~0.123E2, ~0.123) = 0.15129000000000001E1 ++ (~0.123E2, ~0.123) = ~0.12423E2 +- (~0.123E2, ~0.123) = ~0.12177000000000001E2 +/ (~0.123E2, ~0.123) = 0.10000000000000001E3 +nextAfter (~0.123E2, ~0.123) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123) = ~0.8881784197001252E~15 +* (~0.123E2, ~0.123E~2) = 0.15129E~1 ++ (~0.123E2, ~0.123E~2) = ~0.1230123E2 +- (~0.123E2, ~0.123E~2) = ~0.12298770000000001E2 +/ (~0.123E2, ~0.123E~2) = 0.1E5 +nextAfter (~0.123E2, ~0.123E~2) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.123E~2) = ~0.9749145934989656E~15 +* (~0.123E2, ~0.22250738585072014E~307) = 0.2736840845963858E~306 ++ (~0.123E2, ~0.22250738585072014E~307) = ~0.123E2 +- (~0.123E2, ~0.22250738585072014E~307) = ~0.123E2 +/ (~0.123E2, ~0.22250738585072014E~307) = inf +nextAfter (~0.123E2, ~0.22250738585072014E~307) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.22250738585072014E~307) = inf +* (~0.123E2, ~0.11125369292536007E~307) = 0.1368420422981929E~306 ++ (~0.123E2, ~0.11125369292536007E~307) = ~0.123E2 +- (~0.123E2, ~0.11125369292536007E~307) = ~0.123E2 +/ (~0.123E2, ~0.11125369292536007E~307) = inf +nextAfter (~0.123E2, ~0.11125369292536007E~307) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.11125369292536007E~307) = inf +* (~0.123E2, ~0.5E~323) = 0.6E~322 ++ (~0.123E2, ~0.5E~323) = ~0.123E2 +- (~0.123E2, ~0.5E~323) = ~0.123E2 +/ (~0.123E2, ~0.5E~323) = inf +nextAfter (~0.123E2, ~0.5E~323) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.5E~323) = inf +* (~0.123E2, ~0.0) = 0.0 ++ (~0.123E2, ~0.0) = ~0.123E2 +- (~0.123E2, ~0.0) = ~0.123E2 +/ (~0.123E2, ~0.0) = inf +nextAfter (~0.123E2, ~0.0) = ~0.12299999999999999E2 +rem (~0.123E2, ~0.0) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999999999999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.123E2, ~inf) = inf ++ (~0.123E2, ~inf) = ~inf +- (~0.123E2, ~inf) = inf +/ (~0.123E2, ~inf) = 0.0 +nextAfter (~0.123E2, ~inf) = ~0.12300000000000002E2 +rem (~0.123E2, ~inf) = ~0.123E2 +* (~0.123E2, nan) = nan ++ (~0.123E2, nan) = nan +- (~0.123E2, nan) = nan +/ (~0.123E2, nan) = nan +nextAfter (~0.123E2, nan) = nan +rem (~0.123E2, nan) = nan +* (~0.123E2, inf) = ~inf ++ (~0.123E2, inf) = inf +- (~0.123E2, inf) = ~inf +/ (~0.123E2, inf) = ~0.0 +nextAfter (~0.123E2, inf) = ~0.12299999999999999E2 +rem (~0.123E2, inf) = ~0.123E2 +* (~0.3141592653589793E1, 0.17976931348623157E309) = ~inf ++ (~0.3141592653589793E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.17475689218952297E~307 +nextAfter (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.17976931348623157E309) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.8988465674311579E308) = ~inf ++ (~0.3141592653589793E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.349513784379046E~307 +nextAfter (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.8988465674311579E308) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.123E4) = ~0.38641589639154454E4 ++ (~0.3141592653589793E1, 0.123E4) = 0.122685840734641E4 +- (~0.3141592653589793E1, 0.123E4) = ~0.123314159265359E4 +/ (~0.3141592653589793E1, 0.123E4) = ~0.25541403687721893E~2 +nextAfter (~0.3141592653589793E1, 0.123E4) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E4) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.123E2) = ~0.3864158963915446E2 ++ (~0.3141592653589793E1, 0.123E2) = 0.9158407346410208E1 +- (~0.3141592653589793E1, 0.123E2) = ~0.15441592653589794E2 +/ (~0.3141592653589793E1, 0.123E2) = ~0.2554140368772189 +nextAfter (~0.3141592653589793E1, 0.123E2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E2) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.9869604401089358E1 ++ (~0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +- (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.6283185307179586E1 +/ (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.1E1 +nextAfter (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.3141592653589793E1) = 0.0 +* (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.8539734222673566E1 ++ (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.423310825130748 +- (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.5859874482048838E1 +/ (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.11557273497909217E1 +nextAfter (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.423310825130748 +* (~0.3141592653589793E1, 0.123E1) = ~0.38641589639154454E1 ++ (~0.3141592653589793E1, 0.123E1) = ~0.19115926535897931E1 +- (~0.3141592653589793E1, 0.123E1) = ~0.43715926535897935E1 +/ (~0.3141592653589793E1, 0.123E1) = ~0.25541403687721895E1 +nextAfter (~0.3141592653589793E1, 0.123E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E1) = ~0.6815926535897932 +* (~0.3141592653589793E1, 0.123) = ~0.38641589639154456 ++ (~0.3141592653589793E1, 0.123) = ~0.3018592653589793E1 +- (~0.3141592653589793E1, 0.123) = ~0.32645926535897933E1 +/ (~0.3141592653589793E1, 0.123) = ~0.25541403687721896E2 +nextAfter (~0.3141592653589793E1, 0.123) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123) = ~0.6659265358979316E~1 +* (~0.3141592653589793E1, 0.123E~2) = ~0.38641589639154456E~2 ++ (~0.3141592653589793E1, 0.123E~2) = ~0.3140362653589793E1 +- (~0.3141592653589793E1, 0.123E~2) = ~0.3142822653589793E1 +/ (~0.3141592653589793E1, 0.123E~2) = ~0.25541403687721895E4 +nextAfter (~0.3141592653589793E1, 0.123E~2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.123E~2) = ~0.17265358979318352E~3 +* (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.6990275687580919E~307 ++ (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.14119048864730642E309 +nextAfter (~0.3141592653589793E1, 0.22250738585072014E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.22250738585072014E~307) = 0.0 +* (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.34951378437904593E~307 ++ (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.11125369292536007E~307) = ~inf +nextAfter (~0.3141592653589793E1, 0.11125369292536007E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.11125369292536007E~307) = inf +* (~0.3141592653589793E1, 0.5E~323) = ~0.15E~322 ++ (~0.3141592653589793E1, 0.5E~323) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.5E~323) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.5E~323) = ~inf +nextAfter (~0.3141592653589793E1, 0.5E~323) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.5E~323) = inf +* (~0.3141592653589793E1, 0.0) = ~0.0 ++ (~0.3141592653589793E1, 0.0) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, 0.0) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, 0.0) = ~inf +nextAfter (~0.3141592653589793E1, 0.0) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, 0.0) = nan +* (~0.3141592653589793E1, ~0.17976931348623157E309) = inf ++ (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.3141592653589793E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.3141592653589793E1, ~0.17976931348623157E309) = 0.17475689218952297E~307 +nextAfter (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.17976931348623157E309) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.8988465674311579E308) = inf ++ (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.3141592653589793E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.3141592653589793E1, ~0.8988465674311579E308) = 0.349513784379046E~307 +nextAfter (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.8988465674311579E308) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.123E4) = 0.38641589639154454E4 ++ (~0.3141592653589793E1, ~0.123E4) = ~0.123314159265359E4 +- (~0.3141592653589793E1, ~0.123E4) = 0.122685840734641E4 +/ (~0.3141592653589793E1, ~0.123E4) = 0.25541403687721893E~2 +nextAfter (~0.3141592653589793E1, ~0.123E4) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.123E4) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.123E2) = 0.3864158963915446E2 ++ (~0.3141592653589793E1, ~0.123E2) = ~0.15441592653589794E2 +- (~0.3141592653589793E1, ~0.123E2) = 0.9158407346410208E1 +/ (~0.3141592653589793E1, ~0.123E2) = 0.2554140368772189 +nextAfter (~0.3141592653589793E1, ~0.123E2) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~0.123E2) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.9869604401089358E1 ++ (~0.3141592653589793E1, ~0.3141592653589793E1) = ~0.6283185307179586E1 +- (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +/ (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.1E1 +nextAfter (~0.3141592653589793E1, ~0.3141592653589793E1) = ~0.3141592653589793E1 +rem (~0.3141592653589793E1, ~0.3141592653589793E1) = 0.0 +* (~0.3141592653589793E1, ~0.2718281828459045E1) = 0.8539734222673566E1 ++ (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.5859874482048838E1 +- (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.423310825130748 +/ (~0.3141592653589793E1, ~0.2718281828459045E1) = 0.11557273497909217E1 +nextAfter (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.2718281828459045E1) = ~0.423310825130748 +* (~0.3141592653589793E1, ~0.123E1) = 0.38641589639154454E1 ++ (~0.3141592653589793E1, ~0.123E1) = ~0.43715926535897935E1 +- (~0.3141592653589793E1, ~0.123E1) = ~0.19115926535897931E1 +/ (~0.3141592653589793E1, ~0.123E1) = 0.25541403687721895E1 +nextAfter (~0.3141592653589793E1, ~0.123E1) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123E1) = ~0.6815926535897932 +* (~0.3141592653589793E1, ~0.123) = 0.38641589639154456 ++ (~0.3141592653589793E1, ~0.123) = ~0.32645926535897933E1 +- (~0.3141592653589793E1, ~0.123) = ~0.3018592653589793E1 +/ (~0.3141592653589793E1, ~0.123) = 0.25541403687721896E2 +nextAfter (~0.3141592653589793E1, ~0.123) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123) = ~0.6659265358979316E~1 +* (~0.3141592653589793E1, ~0.123E~2) = 0.38641589639154456E~2 ++ (~0.3141592653589793E1, ~0.123E~2) = ~0.3142822653589793E1 +- (~0.3141592653589793E1, ~0.123E~2) = ~0.3140362653589793E1 +/ (~0.3141592653589793E1, ~0.123E~2) = 0.25541403687721895E4 +nextAfter (~0.3141592653589793E1, ~0.123E~2) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.123E~2) = ~0.17265358979318352E~3 +* (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.6990275687580919E~307 ++ (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.14119048864730642E309 +nextAfter (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.22250738585072014E~307) = 0.0 +* (~0.3141592653589793E1, ~0.11125369292536007E~307) = 0.34951378437904593E~307 ++ (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.11125369292536007E~307) = inf +nextAfter (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.11125369292536007E~307) = inf +* (~0.3141592653589793E1, ~0.5E~323) = 0.15E~322 ++ (~0.3141592653589793E1, ~0.5E~323) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.5E~323) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.5E~323) = inf +nextAfter (~0.3141592653589793E1, ~0.5E~323) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.5E~323) = inf +* (~0.3141592653589793E1, ~0.0) = 0.0 ++ (~0.3141592653589793E1, ~0.0) = ~0.3141592653589793E1 +- (~0.3141592653589793E1, ~0.0) = ~0.3141592653589793E1 +/ (~0.3141592653589793E1, ~0.0) = inf +nextAfter (~0.3141592653589793E1, ~0.0) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, ~0.0) = nan +* (~0.3141592653589793E1, inf) = ~inf ++ (~0.3141592653589793E1, inf) = inf +- (~0.3141592653589793E1, inf) = ~inf +/ (~0.3141592653589793E1, inf) = ~0.0 +nextAfter (~0.3141592653589793E1, inf) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, inf) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, ~inf) = inf ++ (~0.3141592653589793E1, ~inf) = ~inf +- (~0.3141592653589793E1, ~inf) = inf +/ (~0.3141592653589793E1, ~inf) = 0.0 +nextAfter (~0.3141592653589793E1, ~inf) = ~0.31415926535897936E1 +rem (~0.3141592653589793E1, ~inf) = ~0.3141592653589793E1 +* (~0.3141592653589793E1, nan) = nan ++ (~0.3141592653589793E1, nan) = nan +- (~0.3141592653589793E1, nan) = nan +/ (~0.3141592653589793E1, nan) = nan +nextAfter (~0.3141592653589793E1, nan) = nan +rem (~0.3141592653589793E1, nan) = nan +* (~0.3141592653589793E1, inf) = ~inf ++ (~0.3141592653589793E1, inf) = inf +- (~0.3141592653589793E1, inf) = ~inf +/ (~0.3141592653589793E1, inf) = ~0.0 +nextAfter (~0.3141592653589793E1, inf) = ~0.31415926535897927E1 +rem (~0.3141592653589793E1, inf) = ~0.3141592653589793E1 +* (~0.2718281828459045E1, 0.17976931348623157E309) = ~inf ++ (~0.2718281828459045E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.15120944591398447E~307 +nextAfter (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.17976931348623157E309) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.8988465674311579E308) = ~inf ++ (~0.2718281828459045E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.30241889182796895E~307 +nextAfter (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.8988465674311579E308) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.123E4) = ~0.33434866490046256E4 ++ (~0.2718281828459045E1, 0.123E4) = 0.1227281718171541E4 +- (~0.2718281828459045E1, 0.123E4) = ~0.1232718281828459E4 +/ (~0.2718281828459045E1, 0.123E4) = ~0.22099852263894678E~2 +nextAfter (~0.2718281828459045E1, 0.123E4) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E4) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.123E2) = ~0.33434866490046254E2 ++ (~0.2718281828459045E1, 0.123E2) = 0.9581718171540956E1 +- (~0.2718281828459045E1, 0.123E2) = ~0.15018281828459045E2 +/ (~0.2718281828459045E1, 0.123E2) = ~0.22099852263894673 +nextAfter (~0.2718281828459045E1, 0.123E2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E2) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.8539734222673566E1 ++ (~0.2718281828459045E1, 0.3141592653589793E1) = 0.423310825130748 +- (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.5859874482048838E1 +/ (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.8652559794322651 +nextAfter (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.73890560989306495E1 ++ (~0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +- (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.543656365691809E1 +/ (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.1E1 +nextAfter (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.2718281828459045E1) = 0.0 +* (~0.2718281828459045E1, 0.123E1) = ~0.33434866490046256E1 ++ (~0.2718281828459045E1, 0.123E1) = ~0.1488281828459045E1 +- (~0.2718281828459045E1, 0.123E1) = ~0.3948281828459045E1 +/ (~0.2718281828459045E1, 0.123E1) = ~0.22099852263894677E1 +nextAfter (~0.2718281828459045E1, 0.123E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E1) = ~0.2582818284590451 +* (~0.2718281828459045E1, 0.123) = ~0.33434866490046256 ++ (~0.2718281828459045E1, 0.123) = ~0.25952818284590453E1 +- (~0.2718281828459045E1, 0.123) = ~0.2841281828459045E1 +/ (~0.2718281828459045E1, 0.123) = ~0.22099852263894675E2 +nextAfter (~0.2718281828459045E1, 0.123) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123) = ~0.1228182845904513E~1 +* (~0.2718281828459045E1, 0.123E~2) = ~0.33434866490046253E~2 ++ (~0.2718281828459045E1, 0.123E~2) = ~0.2717051828459045E1 +- (~0.2718281828459045E1, 0.123E~2) = ~0.2719511828459045E1 +/ (~0.2718281828459045E1, 0.123E~2) = ~0.22099852263894677E4 +nextAfter (~0.2718281828459045E1, 0.123E~2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.123E~2) = ~0.12118284590451492E~2 +* (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.6048377836559378E~307 ++ (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.12216591454104522E309 +nextAfter (~0.2718281828459045E1, 0.22250738585072014E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.22250738585072014E~307) = 0.0 +* (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.3024188918279689E~307 ++ (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.11125369292536007E~307) = ~inf +nextAfter (~0.2718281828459045E1, 0.11125369292536007E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.11125369292536007E~307) = inf +* (~0.2718281828459045E1, 0.5E~323) = ~0.15E~322 ++ (~0.2718281828459045E1, 0.5E~323) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.5E~323) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.5E~323) = ~inf +nextAfter (~0.2718281828459045E1, 0.5E~323) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.5E~323) = inf +* (~0.2718281828459045E1, 0.0) = ~0.0 ++ (~0.2718281828459045E1, 0.0) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, 0.0) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, 0.0) = ~inf +nextAfter (~0.2718281828459045E1, 0.0) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, 0.0) = nan +* (~0.2718281828459045E1, ~0.17976931348623157E309) = inf ++ (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.2718281828459045E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.2718281828459045E1, ~0.17976931348623157E309) = 0.15120944591398447E~307 +nextAfter (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.17976931348623157E309) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.8988465674311579E308) = inf ++ (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.2718281828459045E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.2718281828459045E1, ~0.8988465674311579E308) = 0.30241889182796895E~307 +nextAfter (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.8988465674311579E308) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.123E4) = 0.33434866490046256E4 ++ (~0.2718281828459045E1, ~0.123E4) = ~0.1232718281828459E4 +- (~0.2718281828459045E1, ~0.123E4) = 0.1227281718171541E4 +/ (~0.2718281828459045E1, ~0.123E4) = 0.22099852263894678E~2 +nextAfter (~0.2718281828459045E1, ~0.123E4) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.123E4) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.123E2) = 0.33434866490046254E2 ++ (~0.2718281828459045E1, ~0.123E2) = ~0.15018281828459045E2 +- (~0.2718281828459045E1, ~0.123E2) = 0.9581718171540956E1 +/ (~0.2718281828459045E1, ~0.123E2) = 0.22099852263894673 +nextAfter (~0.2718281828459045E1, ~0.123E2) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.123E2) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.8539734222673566E1 ++ (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.5859874482048838E1 +- (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.423310825130748 +/ (~0.2718281828459045E1, ~0.3141592653589793E1) = 0.8652559794322651 +nextAfter (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~0.3141592653589793E1) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.73890560989306495E1 ++ (~0.2718281828459045E1, ~0.2718281828459045E1) = ~0.543656365691809E1 +- (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +/ (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.1E1 +nextAfter (~0.2718281828459045E1, ~0.2718281828459045E1) = ~0.2718281828459045E1 +rem (~0.2718281828459045E1, ~0.2718281828459045E1) = 0.0 +* (~0.2718281828459045E1, ~0.123E1) = 0.33434866490046256E1 ++ (~0.2718281828459045E1, ~0.123E1) = ~0.3948281828459045E1 +- (~0.2718281828459045E1, ~0.123E1) = ~0.1488281828459045E1 +/ (~0.2718281828459045E1, ~0.123E1) = 0.22099852263894677E1 +nextAfter (~0.2718281828459045E1, ~0.123E1) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123E1) = ~0.2582818284590451 +* (~0.2718281828459045E1, ~0.123) = 0.33434866490046256 ++ (~0.2718281828459045E1, ~0.123) = ~0.2841281828459045E1 +- (~0.2718281828459045E1, ~0.123) = ~0.25952818284590453E1 +/ (~0.2718281828459045E1, ~0.123) = 0.22099852263894675E2 +nextAfter (~0.2718281828459045E1, ~0.123) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123) = ~0.1228182845904513E~1 +* (~0.2718281828459045E1, ~0.123E~2) = 0.33434866490046253E~2 ++ (~0.2718281828459045E1, ~0.123E~2) = ~0.2719511828459045E1 +- (~0.2718281828459045E1, ~0.123E~2) = ~0.2717051828459045E1 +/ (~0.2718281828459045E1, ~0.123E~2) = 0.22099852263894677E4 +nextAfter (~0.2718281828459045E1, ~0.123E~2) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.123E~2) = ~0.12118284590451492E~2 +* (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.6048377836559378E~307 ++ (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.12216591454104522E309 +nextAfter (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.22250738585072014E~307) = 0.0 +* (~0.2718281828459045E1, ~0.11125369292536007E~307) = 0.3024188918279689E~307 ++ (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.11125369292536007E~307) = inf +nextAfter (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.11125369292536007E~307) = inf +* (~0.2718281828459045E1, ~0.5E~323) = 0.15E~322 ++ (~0.2718281828459045E1, ~0.5E~323) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.5E~323) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.5E~323) = inf +nextAfter (~0.2718281828459045E1, ~0.5E~323) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.5E~323) = inf +* (~0.2718281828459045E1, ~0.0) = 0.0 ++ (~0.2718281828459045E1, ~0.0) = ~0.2718281828459045E1 +- (~0.2718281828459045E1, ~0.0) = ~0.2718281828459045E1 +/ (~0.2718281828459045E1, ~0.0) = inf +nextAfter (~0.2718281828459045E1, ~0.0) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, ~0.0) = nan +* (~0.2718281828459045E1, inf) = ~inf ++ (~0.2718281828459045E1, inf) = inf +- (~0.2718281828459045E1, inf) = ~inf +/ (~0.2718281828459045E1, inf) = ~0.0 +nextAfter (~0.2718281828459045E1, inf) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, inf) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, ~inf) = inf ++ (~0.2718281828459045E1, ~inf) = ~inf +- (~0.2718281828459045E1, ~inf) = inf +/ (~0.2718281828459045E1, ~inf) = 0.0 +nextAfter (~0.2718281828459045E1, ~inf) = ~0.27182818284590455E1 +rem (~0.2718281828459045E1, ~inf) = ~0.2718281828459045E1 +* (~0.2718281828459045E1, nan) = nan ++ (~0.2718281828459045E1, nan) = nan +- (~0.2718281828459045E1, nan) = nan +/ (~0.2718281828459045E1, nan) = nan +nextAfter (~0.2718281828459045E1, nan) = nan +rem (~0.2718281828459045E1, nan) = nan +* (~0.2718281828459045E1, inf) = ~inf ++ (~0.2718281828459045E1, inf) = inf +- (~0.2718281828459045E1, inf) = ~inf +/ (~0.2718281828459045E1, inf) = ~0.0 +nextAfter (~0.2718281828459045E1, inf) = ~0.27182818284590446E1 +rem (~0.2718281828459045E1, inf) = ~0.2718281828459045E1 +* (~0.123E1, 0.17976931348623157E309) = ~inf ++ (~0.123E1, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E1, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E1, 0.17976931348623157E309) = ~0.6842102114909647E~308 +nextAfter (~0.123E1, 0.17976931348623157E309) = ~0.12299999999999998E1 +rem (~0.123E1, 0.17976931348623157E309) = ~0.123E1 +* (~0.123E1, 0.8988465674311579E308) = ~0.1105581277940324E309 ++ (~0.123E1, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E1, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E1, 0.8988465674311579E308) = ~0.1368420422981929E~307 +nextAfter (~0.123E1, 0.8988465674311579E308) = ~0.12299999999999998E1 +rem (~0.123E1, 0.8988465674311579E308) = ~0.123E1 +* (~0.123E1, 0.123E4) = ~0.15129E4 ++ (~0.123E1, 0.123E4) = 0.122877E4 +- (~0.123E1, 0.123E4) = ~0.123123E4 +/ (~0.123E1, 0.123E4) = ~0.1E~2 +nextAfter (~0.123E1, 0.123E4) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E4) = ~0.123E1 +* (~0.123E1, 0.123E2) = ~0.15129000000000001E2 ++ (~0.123E1, 0.123E2) = 0.1107E2 +- (~0.123E1, 0.123E2) = ~0.13530000000000001E2 +/ (~0.123E1, 0.123E2) = ~0.9999999999999999E~1 +nextAfter (~0.123E1, 0.123E2) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E2) = ~0.123E1 +* (~0.123E1, 0.3141592653589793E1) = ~0.38641589639154454E1 ++ (~0.123E1, 0.3141592653589793E1) = 0.19115926535897931E1 +- (~0.123E1, 0.3141592653589793E1) = ~0.43715926535897935E1 +/ (~0.123E1, 0.3141592653589793E1) = ~0.3915211600060625 +nextAfter (~0.123E1, 0.3141592653589793E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.3141592653589793E1) = ~0.123E1 +* (~0.123E1, 0.2718281828459045E1) = ~0.33434866490046256E1 ++ (~0.123E1, 0.2718281828459045E1) = 0.1488281828459045E1 +- (~0.123E1, 0.2718281828459045E1) = ~0.3948281828459045E1 +/ (~0.123E1, 0.2718281828459045E1) = ~0.45249171264087407 +nextAfter (~0.123E1, 0.2718281828459045E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.2718281828459045E1) = ~0.123E1 +* (~0.123E1, 0.123E1) = ~0.15129E1 ++ (~0.123E1, 0.123E1) = 0.0 +- (~0.123E1, 0.123E1) = ~0.246E1 +/ (~0.123E1, 0.123E1) = ~0.1E1 +nextAfter (~0.123E1, 0.123E1) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E1) = 0.0 +* (~0.123E1, 0.123) = ~0.15129 ++ (~0.123E1, 0.123) = ~0.1107E1 +- (~0.123E1, 0.123) = ~0.1353E1 +/ (~0.123E1, 0.123) = ~0.1E2 +nextAfter (~0.123E1, 0.123) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123) = 0.0 +* (~0.123E1, 0.123E~2) = ~0.15129E~2 ++ (~0.123E1, 0.123E~2) = ~0.122877E1 +- (~0.123E1, 0.123E~2) = ~0.123123E1 +/ (~0.123E1, 0.123E~2) = ~0.1E4 +nextAfter (~0.123E1, 0.123E~2) = ~0.12299999999999998E1 +rem (~0.123E1, 0.123E~2) = ~0.8673617379884035E~17 +* (~0.123E1, 0.22250738585072014E~307) = ~0.27368408459638577E~307 ++ (~0.123E1, 0.22250738585072014E~307) = ~0.123E1 +- (~0.123E1, 0.22250738585072014E~307) = ~0.123E1 +/ (~0.123E1, 0.22250738585072014E~307) = ~0.5527906389701621E308 +nextAfter (~0.123E1, 0.22250738585072014E~307) = ~0.12299999999999998E1 +rem (~0.123E1, 0.22250738585072014E~307) = 0.0 +* (~0.123E1, 0.11125369292536007E~307) = ~0.1368420422981929E~307 ++ (~0.123E1, 0.11125369292536007E~307) = ~0.123E1 +- (~0.123E1, 0.11125369292536007E~307) = ~0.123E1 +/ (~0.123E1, 0.11125369292536007E~307) = ~0.11055812779403243E309 +nextAfter (~0.123E1, 0.11125369292536007E~307) = ~0.12299999999999998E1 +rem (~0.123E1, 0.11125369292536007E~307) = 0.0 +* (~0.123E1, 0.5E~323) = ~0.5E~323 ++ (~0.123E1, 0.5E~323) = ~0.123E1 +- (~0.123E1, 0.5E~323) = ~0.123E1 +/ (~0.123E1, 0.5E~323) = ~inf +nextAfter (~0.123E1, 0.5E~323) = ~0.12299999999999998E1 +rem (~0.123E1, 0.5E~323) = inf +* (~0.123E1, 0.0) = ~0.0 ++ (~0.123E1, 0.0) = ~0.123E1 +- (~0.123E1, 0.0) = ~0.123E1 +/ (~0.123E1, 0.0) = ~inf +nextAfter (~0.123E1, 0.0) = ~0.12299999999999998E1 +rem (~0.123E1, 0.0) = nan +* (~0.123E1, ~0.17976931348623157E309) = inf ++ (~0.123E1, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E1, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E1, ~0.17976931348623157E309) = 0.6842102114909647E~308 +nextAfter (~0.123E1, ~0.17976931348623157E309) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.17976931348623157E309) = ~0.123E1 +* (~0.123E1, ~0.8988465674311579E308) = 0.1105581277940324E309 ++ (~0.123E1, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E1, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E1, ~0.8988465674311579E308) = 0.1368420422981929E~307 +nextAfter (~0.123E1, ~0.8988465674311579E308) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.8988465674311579E308) = ~0.123E1 +* (~0.123E1, ~0.123E4) = 0.15129E4 ++ (~0.123E1, ~0.123E4) = ~0.123123E4 +- (~0.123E1, ~0.123E4) = 0.122877E4 +/ (~0.123E1, ~0.123E4) = 0.1E~2 +nextAfter (~0.123E1, ~0.123E4) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.123E4) = ~0.123E1 +* (~0.123E1, ~0.123E2) = 0.15129000000000001E2 ++ (~0.123E1, ~0.123E2) = ~0.13530000000000001E2 +- (~0.123E1, ~0.123E2) = 0.1107E2 +/ (~0.123E1, ~0.123E2) = 0.9999999999999999E~1 +nextAfter (~0.123E1, ~0.123E2) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.123E2) = ~0.123E1 +* (~0.123E1, ~0.3141592653589793E1) = 0.38641589639154454E1 ++ (~0.123E1, ~0.3141592653589793E1) = ~0.43715926535897935E1 +- (~0.123E1, ~0.3141592653589793E1) = 0.19115926535897931E1 +/ (~0.123E1, ~0.3141592653589793E1) = 0.3915211600060625 +nextAfter (~0.123E1, ~0.3141592653589793E1) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.3141592653589793E1) = ~0.123E1 +* (~0.123E1, ~0.2718281828459045E1) = 0.33434866490046256E1 ++ (~0.123E1, ~0.2718281828459045E1) = ~0.3948281828459045E1 +- (~0.123E1, ~0.2718281828459045E1) = 0.1488281828459045E1 +/ (~0.123E1, ~0.2718281828459045E1) = 0.45249171264087407 +nextAfter (~0.123E1, ~0.2718281828459045E1) = ~0.12300000000000002E1 +rem (~0.123E1, ~0.2718281828459045E1) = ~0.123E1 +* (~0.123E1, ~0.123E1) = 0.15129E1 ++ (~0.123E1, ~0.123E1) = ~0.246E1 +- (~0.123E1, ~0.123E1) = 0.0 +/ (~0.123E1, ~0.123E1) = 0.1E1 +nextAfter (~0.123E1, ~0.123E1) = ~0.123E1 +rem (~0.123E1, ~0.123E1) = 0.0 +* (~0.123E1, ~0.123) = 0.15129 ++ (~0.123E1, ~0.123) = ~0.1353E1 +- (~0.123E1, ~0.123) = ~0.1107E1 +/ (~0.123E1, ~0.123) = 0.1E2 +nextAfter (~0.123E1, ~0.123) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.123) = 0.0 +* (~0.123E1, ~0.123E~2) = 0.15129E~2 ++ (~0.123E1, ~0.123E~2) = ~0.123123E1 +- (~0.123E1, ~0.123E~2) = ~0.122877E1 +/ (~0.123E1, ~0.123E~2) = 0.1E4 +nextAfter (~0.123E1, ~0.123E~2) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.123E~2) = ~0.8673617379884035E~17 +* (~0.123E1, ~0.22250738585072014E~307) = 0.27368408459638577E~307 ++ (~0.123E1, ~0.22250738585072014E~307) = ~0.123E1 +- (~0.123E1, ~0.22250738585072014E~307) = ~0.123E1 +/ (~0.123E1, ~0.22250738585072014E~307) = 0.5527906389701621E308 +nextAfter (~0.123E1, ~0.22250738585072014E~307) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.22250738585072014E~307) = 0.0 +* (~0.123E1, ~0.11125369292536007E~307) = 0.1368420422981929E~307 ++ (~0.123E1, ~0.11125369292536007E~307) = ~0.123E1 +- (~0.123E1, ~0.11125369292536007E~307) = ~0.123E1 +/ (~0.123E1, ~0.11125369292536007E~307) = 0.11055812779403243E309 +nextAfter (~0.123E1, ~0.11125369292536007E~307) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.11125369292536007E~307) = 0.0 +* (~0.123E1, ~0.5E~323) = 0.5E~323 ++ (~0.123E1, ~0.5E~323) = ~0.123E1 +- (~0.123E1, ~0.5E~323) = ~0.123E1 +/ (~0.123E1, ~0.5E~323) = inf +nextAfter (~0.123E1, ~0.5E~323) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.5E~323) = inf +* (~0.123E1, ~0.0) = 0.0 ++ (~0.123E1, ~0.0) = ~0.123E1 +- (~0.123E1, ~0.0) = ~0.123E1 +/ (~0.123E1, ~0.0) = inf +nextAfter (~0.123E1, ~0.0) = ~0.12299999999999998E1 +rem (~0.123E1, ~0.0) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999999999998E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123E1, ~inf) = inf ++ (~0.123E1, ~inf) = ~inf +- (~0.123E1, ~inf) = inf +/ (~0.123E1, ~inf) = 0.0 +nextAfter (~0.123E1, ~inf) = ~0.12300000000000002E1 +rem (~0.123E1, ~inf) = ~0.123E1 +* (~0.123E1, nan) = nan ++ (~0.123E1, nan) = nan +- (~0.123E1, nan) = nan +/ (~0.123E1, nan) = nan +nextAfter (~0.123E1, nan) = nan +rem (~0.123E1, nan) = nan +* (~0.123E1, inf) = ~inf ++ (~0.123E1, inf) = inf +- (~0.123E1, inf) = ~inf +/ (~0.123E1, inf) = ~0.0 +nextAfter (~0.123E1, inf) = ~0.12299999999999998E1 +rem (~0.123E1, inf) = ~0.123E1 +* (~0.123, 0.17976931348623157E309) = ~0.22111625558806483E308 ++ (~0.123, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123, 0.17976931348623157E309) = ~0.684210211490966E~309 +nextAfter (~0.123, 0.17976931348623157E309) = ~0.12299999999999998 +rem (~0.123, 0.17976931348623157E309) = ~0.123 +* (~0.123, 0.8988465674311579E308) = ~0.11055812779403241E308 ++ (~0.123, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123, 0.8988465674311579E308) = ~0.136842042298193E~308 +nextAfter (~0.123, 0.8988465674311579E308) = ~0.12299999999999998 +rem (~0.123, 0.8988465674311579E308) = ~0.123 +* (~0.123, 0.123E4) = ~0.15129E3 ++ (~0.123, 0.123E4) = 0.1229877E4 +- (~0.123, 0.123E4) = ~0.1230123E4 +/ (~0.123, 0.123E4) = ~0.1E~3 +nextAfter (~0.123, 0.123E4) = ~0.12299999999999998 +rem (~0.123, 0.123E4) = ~0.123 +* (~0.123, 0.123E2) = ~0.15129000000000001E1 ++ (~0.123, 0.123E2) = 0.12177000000000001E2 +- (~0.123, 0.123E2) = ~0.12423E2 +/ (~0.123, 0.123E2) = ~0.9999999999999998E~2 +nextAfter (~0.123, 0.123E2) = ~0.12299999999999998 +rem (~0.123, 0.123E2) = ~0.123 +* (~0.123, 0.3141592653589793E1) = ~0.38641589639154456 ++ (~0.123, 0.3141592653589793E1) = 0.3018592653589793E1 +- (~0.123, 0.3141592653589793E1) = ~0.32645926535897933E1 +/ (~0.123, 0.3141592653589793E1) = ~0.3915211600060625E~1 +nextAfter (~0.123, 0.3141592653589793E1) = ~0.12299999999999998 +rem (~0.123, 0.3141592653589793E1) = ~0.123 +* (~0.123, 0.2718281828459045E1) = ~0.33434866490046256 ++ (~0.123, 0.2718281828459045E1) = 0.25952818284590453E1 +- (~0.123, 0.2718281828459045E1) = ~0.2841281828459045E1 +/ (~0.123, 0.2718281828459045E1) = ~0.4524917126408741E~1 +nextAfter (~0.123, 0.2718281828459045E1) = ~0.12299999999999998 +rem (~0.123, 0.2718281828459045E1) = ~0.123 +* (~0.123, 0.123E1) = ~0.15129 ++ (~0.123, 0.123E1) = 0.1107E1 +- (~0.123, 0.123E1) = ~0.1353E1 +/ (~0.123, 0.123E1) = ~0.1 +nextAfter (~0.123, 0.123E1) = ~0.12299999999999998 +rem (~0.123, 0.123E1) = ~0.123 +* (~0.123, 0.123) = ~0.15129E~1 ++ (~0.123, 0.123) = 0.0 +- (~0.123, 0.123) = ~0.246 +/ (~0.123, 0.123) = ~0.1E1 +nextAfter (~0.123, 0.123) = ~0.12299999999999998 +rem (~0.123, 0.123) = 0.0 +* (~0.123, 0.123E~2) = ~0.15129E~3 ++ (~0.123, 0.123E~2) = ~0.12177 +- (~0.123, 0.123E~2) = ~0.12423 +/ (~0.123, 0.123E~2) = ~0.1E3 +nextAfter (~0.123, 0.123E~2) = ~0.12299999999999998 +rem (~0.123, 0.123E~2) = ~0.8673617379884035E~18 +* (~0.123, 0.22250738585072014E~307) = ~0.273684084596386E~308 ++ (~0.123, 0.22250738585072014E~307) = ~0.123 +- (~0.123, 0.22250738585072014E~307) = ~0.123 +/ (~0.123, 0.22250738585072014E~307) = ~0.55279063897016213E307 +nextAfter (~0.123, 0.22250738585072014E~307) = ~0.12299999999999998 +rem (~0.123, 0.22250738585072014E~307) = 0.0 +* (~0.123, 0.11125369292536007E~307) = ~0.136842042298193E~308 ++ (~0.123, 0.11125369292536007E~307) = ~0.123 +- (~0.123, 0.11125369292536007E~307) = ~0.123 +/ (~0.123, 0.11125369292536007E~307) = ~0.11055812779403243E308 +nextAfter (~0.123, 0.11125369292536007E~307) = ~0.12299999999999998 +rem (~0.123, 0.11125369292536007E~307) = 0.0 +* (~0.123, 0.5E~323) = ~0.0 ++ (~0.123, 0.5E~323) = ~0.123 +- (~0.123, 0.5E~323) = ~0.123 +/ (~0.123, 0.5E~323) = ~inf +nextAfter (~0.123, 0.5E~323) = ~0.12299999999999998 +rem (~0.123, 0.5E~323) = inf +* (~0.123, 0.0) = ~0.0 ++ (~0.123, 0.0) = ~0.123 +- (~0.123, 0.0) = ~0.123 +/ (~0.123, 0.0) = ~inf +nextAfter (~0.123, 0.0) = ~0.12299999999999998 +rem (~0.123, 0.0) = nan +* (~0.123, ~0.17976931348623157E309) = 0.22111625558806483E308 ++ (~0.123, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123, ~0.17976931348623157E309) = 0.684210211490966E~309 +nextAfter (~0.123, ~0.17976931348623157E309) = ~0.12300000000000001 +rem (~0.123, ~0.17976931348623157E309) = ~0.123 +* (~0.123, ~0.8988465674311579E308) = 0.11055812779403241E308 ++ (~0.123, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123, ~0.8988465674311579E308) = 0.136842042298193E~308 +nextAfter (~0.123, ~0.8988465674311579E308) = ~0.12300000000000001 +rem (~0.123, ~0.8988465674311579E308) = ~0.123 +* (~0.123, ~0.123E4) = 0.15129E3 ++ (~0.123, ~0.123E4) = ~0.1230123E4 +- (~0.123, ~0.123E4) = 0.1229877E4 +/ (~0.123, ~0.123E4) = 0.1E~3 +nextAfter (~0.123, ~0.123E4) = ~0.12300000000000001 +rem (~0.123, ~0.123E4) = ~0.123 +* (~0.123, ~0.123E2) = 0.15129000000000001E1 ++ (~0.123, ~0.123E2) = ~0.12423E2 +- (~0.123, ~0.123E2) = 0.12177000000000001E2 +/ (~0.123, ~0.123E2) = 0.9999999999999998E~2 +nextAfter (~0.123, ~0.123E2) = ~0.12300000000000001 +rem (~0.123, ~0.123E2) = ~0.123 +* (~0.123, ~0.3141592653589793E1) = 0.38641589639154456 ++ (~0.123, ~0.3141592653589793E1) = ~0.32645926535897933E1 +- (~0.123, ~0.3141592653589793E1) = 0.3018592653589793E1 +/ (~0.123, ~0.3141592653589793E1) = 0.3915211600060625E~1 +nextAfter (~0.123, ~0.3141592653589793E1) = ~0.12300000000000001 +rem (~0.123, ~0.3141592653589793E1) = ~0.123 +* (~0.123, ~0.2718281828459045E1) = 0.33434866490046256 ++ (~0.123, ~0.2718281828459045E1) = ~0.2841281828459045E1 +- (~0.123, ~0.2718281828459045E1) = 0.25952818284590453E1 +/ (~0.123, ~0.2718281828459045E1) = 0.4524917126408741E~1 +nextAfter (~0.123, ~0.2718281828459045E1) = ~0.12300000000000001 +rem (~0.123, ~0.2718281828459045E1) = ~0.123 +* (~0.123, ~0.123E1) = 0.15129 ++ (~0.123, ~0.123E1) = ~0.1353E1 +- (~0.123, ~0.123E1) = 0.1107E1 +/ (~0.123, ~0.123E1) = 0.1 +nextAfter (~0.123, ~0.123E1) = ~0.12300000000000001 +rem (~0.123, ~0.123E1) = ~0.123 +* (~0.123, ~0.123) = 0.15129E~1 ++ (~0.123, ~0.123) = ~0.246 +- (~0.123, ~0.123) = 0.0 +/ (~0.123, ~0.123) = 0.1E1 +nextAfter (~0.123, ~0.123) = ~0.123 +rem (~0.123, ~0.123) = 0.0 +* (~0.123, ~0.123E~2) = 0.15129E~3 ++ (~0.123, ~0.123E~2) = ~0.12423 +- (~0.123, ~0.123E~2) = ~0.12177 +/ (~0.123, ~0.123E~2) = 0.1E3 +nextAfter (~0.123, ~0.123E~2) = ~0.12299999999999998 +rem (~0.123, ~0.123E~2) = ~0.8673617379884035E~18 +* (~0.123, ~0.22250738585072014E~307) = 0.273684084596386E~308 ++ (~0.123, ~0.22250738585072014E~307) = ~0.123 +- (~0.123, ~0.22250738585072014E~307) = ~0.123 +/ (~0.123, ~0.22250738585072014E~307) = 0.55279063897016213E307 +nextAfter (~0.123, ~0.22250738585072014E~307) = ~0.12299999999999998 +rem (~0.123, ~0.22250738585072014E~307) = 0.0 +* (~0.123, ~0.11125369292536007E~307) = 0.136842042298193E~308 ++ (~0.123, ~0.11125369292536007E~307) = ~0.123 +- (~0.123, ~0.11125369292536007E~307) = ~0.123 +/ (~0.123, ~0.11125369292536007E~307) = 0.11055812779403243E308 +nextAfter (~0.123, ~0.11125369292536007E~307) = ~0.12299999999999998 +rem (~0.123, ~0.11125369292536007E~307) = 0.0 +* (~0.123, ~0.5E~323) = 0.0 ++ (~0.123, ~0.5E~323) = ~0.123 +- (~0.123, ~0.5E~323) = ~0.123 +/ (~0.123, ~0.5E~323) = inf +nextAfter (~0.123, ~0.5E~323) = ~0.12299999999999998 +rem (~0.123, ~0.5E~323) = inf +* (~0.123, ~0.0) = 0.0 ++ (~0.123, ~0.0) = ~0.123 +- (~0.123, ~0.0) = ~0.123 +/ (~0.123, ~0.0) = inf +nextAfter (~0.123, ~0.0) = ~0.12299999999999998 +rem (~0.123, ~0.0) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.12299999999999998 +rem (~0.123, inf) = ~0.123 +* (~0.123, ~inf) = inf ++ (~0.123, ~inf) = ~inf +- (~0.123, ~inf) = inf +/ (~0.123, ~inf) = 0.0 +nextAfter (~0.123, ~inf) = ~0.12300000000000001 +rem (~0.123, ~inf) = ~0.123 +* (~0.123, nan) = nan ++ (~0.123, nan) = nan +- (~0.123, nan) = nan +/ (~0.123, nan) = nan +nextAfter (~0.123, nan) = nan +rem (~0.123, nan) = nan +* (~0.123, inf) = ~inf ++ (~0.123, inf) = inf +- (~0.123, inf) = ~inf +/ (~0.123, inf) = ~0.0 +nextAfter (~0.123, inf) = ~0.12299999999999998 +rem (~0.123, inf) = ~0.123 +* (~0.123E~2, 0.17976931348623157E309) = ~0.2211162555880648E306 ++ (~0.123E~2, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.123E~2, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.123E~2, 0.17976931348623157E309) = ~0.684210211491E~311 +nextAfter (~0.123E~2, 0.17976931348623157E309) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.17976931348623157E309) = ~0.123E~2 +* (~0.123E~2, 0.8988465674311579E308) = ~0.1105581277940324E306 ++ (~0.123E~2, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.123E~2, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.123E~2, 0.8988465674311579E308) = ~0.1368420422982E~310 +nextAfter (~0.123E~2, 0.8988465674311579E308) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.8988465674311579E308) = ~0.123E~2 +* (~0.123E~2, 0.123E4) = ~0.15129E1 ++ (~0.123E~2, 0.123E4) = 0.122999877E4 +- (~0.123E~2, 0.123E4) = ~0.123000123E4 +/ (~0.123E~2, 0.123E4) = ~0.1E~5 +nextAfter (~0.123E~2, 0.123E4) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E4) = ~0.123E~2 +* (~0.123E~2, 0.123E2) = ~0.15129E~1 ++ (~0.123E~2, 0.123E2) = 0.12298770000000001E2 +- (~0.123E~2, 0.123E2) = ~0.1230123E2 +/ (~0.123E~2, 0.123E2) = ~0.9999999999999999E~4 +nextAfter (~0.123E~2, 0.123E2) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E2) = ~0.123E~2 +* (~0.123E~2, 0.3141592653589793E1) = ~0.38641589639154456E~2 ++ (~0.123E~2, 0.3141592653589793E1) = 0.3140362653589793E1 +- (~0.123E~2, 0.3141592653589793E1) = ~0.3142822653589793E1 +/ (~0.123E~2, 0.3141592653589793E1) = ~0.3915211600060625E~3 +nextAfter (~0.123E~2, 0.3141592653589793E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.3141592653589793E1) = ~0.123E~2 +* (~0.123E~2, 0.2718281828459045E1) = ~0.33434866490046253E~2 ++ (~0.123E~2, 0.2718281828459045E1) = 0.2717051828459045E1 +- (~0.123E~2, 0.2718281828459045E1) = ~0.2719511828459045E1 +/ (~0.123E~2, 0.2718281828459045E1) = ~0.45249171264087406E~3 +nextAfter (~0.123E~2, 0.2718281828459045E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.2718281828459045E1) = ~0.123E~2 +* (~0.123E~2, 0.123E1) = ~0.15129E~2 ++ (~0.123E~2, 0.123E1) = 0.122877E1 +- (~0.123E~2, 0.123E1) = ~0.123123E1 +/ (~0.123E~2, 0.123E1) = ~0.1E~2 +nextAfter (~0.123E~2, 0.123E1) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E1) = ~0.123E~2 +* (~0.123E~2, 0.123) = ~0.15129E~3 ++ (~0.123E~2, 0.123) = 0.12177 +- (~0.123E~2, 0.123) = ~0.12423 +/ (~0.123E~2, 0.123) = ~0.1E~1 +nextAfter (~0.123E~2, 0.123) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123) = ~0.123E~2 +* (~0.123E~2, 0.123E~2) = ~0.15129E~5 ++ (~0.123E~2, 0.123E~2) = 0.0 +- (~0.123E~2, 0.123E~2) = ~0.246E~2 +/ (~0.123E~2, 0.123E~2) = ~0.1E1 +nextAfter (~0.123E~2, 0.123E~2) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.123E~2) = 0.0 +* (~0.123E~2, 0.22250738585072014E~307) = ~0.2736840845964E~310 ++ (~0.123E~2, 0.22250738585072014E~307) = ~0.123E~2 +- (~0.123E~2, 0.22250738585072014E~307) = ~0.123E~2 +/ (~0.123E~2, 0.22250738585072014E~307) = ~0.5527906389701621E305 +nextAfter (~0.123E~2, 0.22250738585072014E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.22250738585072014E~307) = 0.0 +* (~0.123E~2, 0.11125369292536007E~307) = ~0.1368420422982E~310 ++ (~0.123E~2, 0.11125369292536007E~307) = ~0.123E~2 +- (~0.123E~2, 0.11125369292536007E~307) = ~0.123E~2 +/ (~0.123E~2, 0.11125369292536007E~307) = ~0.11055812779403243E306 +nextAfter (~0.123E~2, 0.11125369292536007E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.11125369292536007E~307) = 0.0 +* (~0.123E~2, 0.5E~323) = ~0.0 ++ (~0.123E~2, 0.5E~323) = ~0.123E~2 +- (~0.123E~2, 0.5E~323) = ~0.123E~2 +/ (~0.123E~2, 0.5E~323) = ~inf +nextAfter (~0.123E~2, 0.5E~323) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.5E~323) = inf +* (~0.123E~2, 0.0) = ~0.0 ++ (~0.123E~2, 0.0) = ~0.123E~2 +- (~0.123E~2, 0.0) = ~0.123E~2 +/ (~0.123E~2, 0.0) = ~inf +nextAfter (~0.123E~2, 0.0) = ~0.12299999999999998E~2 +rem (~0.123E~2, 0.0) = nan +* (~0.123E~2, ~0.17976931348623157E309) = 0.2211162555880648E306 ++ (~0.123E~2, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.123E~2, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.123E~2, ~0.17976931348623157E309) = 0.684210211491E~311 +nextAfter (~0.123E~2, ~0.17976931348623157E309) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.17976931348623157E309) = ~0.123E~2 +* (~0.123E~2, ~0.8988465674311579E308) = 0.1105581277940324E306 ++ (~0.123E~2, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.123E~2, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.123E~2, ~0.8988465674311579E308) = 0.1368420422982E~310 +nextAfter (~0.123E~2, ~0.8988465674311579E308) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.8988465674311579E308) = ~0.123E~2 +* (~0.123E~2, ~0.123E4) = 0.15129E1 ++ (~0.123E~2, ~0.123E4) = ~0.123000123E4 +- (~0.123E~2, ~0.123E4) = 0.122999877E4 +/ (~0.123E~2, ~0.123E4) = 0.1E~5 +nextAfter (~0.123E~2, ~0.123E4) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E4) = ~0.123E~2 +* (~0.123E~2, ~0.123E2) = 0.15129E~1 ++ (~0.123E~2, ~0.123E2) = ~0.1230123E2 +- (~0.123E~2, ~0.123E2) = 0.12298770000000001E2 +/ (~0.123E~2, ~0.123E2) = 0.9999999999999999E~4 +nextAfter (~0.123E~2, ~0.123E2) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E2) = ~0.123E~2 +* (~0.123E~2, ~0.3141592653589793E1) = 0.38641589639154456E~2 ++ (~0.123E~2, ~0.3141592653589793E1) = ~0.3142822653589793E1 +- (~0.123E~2, ~0.3141592653589793E1) = 0.3140362653589793E1 +/ (~0.123E~2, ~0.3141592653589793E1) = 0.3915211600060625E~3 +nextAfter (~0.123E~2, ~0.3141592653589793E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.3141592653589793E1) = ~0.123E~2 +* (~0.123E~2, ~0.2718281828459045E1) = 0.33434866490046253E~2 ++ (~0.123E~2, ~0.2718281828459045E1) = ~0.2719511828459045E1 +- (~0.123E~2, ~0.2718281828459045E1) = 0.2717051828459045E1 +/ (~0.123E~2, ~0.2718281828459045E1) = 0.45249171264087406E~3 +nextAfter (~0.123E~2, ~0.2718281828459045E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.2718281828459045E1) = ~0.123E~2 +* (~0.123E~2, ~0.123E1) = 0.15129E~2 ++ (~0.123E~2, ~0.123E1) = ~0.123123E1 +- (~0.123E~2, ~0.123E1) = 0.122877E1 +/ (~0.123E~2, ~0.123E1) = 0.1E~2 +nextAfter (~0.123E~2, ~0.123E1) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123E1) = ~0.123E~2 +* (~0.123E~2, ~0.123) = 0.15129E~3 ++ (~0.123E~2, ~0.123) = ~0.12423 +- (~0.123E~2, ~0.123) = 0.12177 +/ (~0.123E~2, ~0.123) = 0.1E~1 +nextAfter (~0.123E~2, ~0.123) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~0.123) = ~0.123E~2 +* (~0.123E~2, ~0.123E~2) = 0.15129E~5 ++ (~0.123E~2, ~0.123E~2) = ~0.246E~2 +- (~0.123E~2, ~0.123E~2) = 0.0 +/ (~0.123E~2, ~0.123E~2) = 0.1E1 +nextAfter (~0.123E~2, ~0.123E~2) = ~0.123E~2 +rem (~0.123E~2, ~0.123E~2) = 0.0 +* (~0.123E~2, ~0.22250738585072014E~307) = 0.2736840845964E~310 ++ (~0.123E~2, ~0.22250738585072014E~307) = ~0.123E~2 +- (~0.123E~2, ~0.22250738585072014E~307) = ~0.123E~2 +/ (~0.123E~2, ~0.22250738585072014E~307) = 0.5527906389701621E305 +nextAfter (~0.123E~2, ~0.22250738585072014E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.22250738585072014E~307) = 0.0 +* (~0.123E~2, ~0.11125369292536007E~307) = 0.1368420422982E~310 ++ (~0.123E~2, ~0.11125369292536007E~307) = ~0.123E~2 +- (~0.123E~2, ~0.11125369292536007E~307) = ~0.123E~2 +/ (~0.123E~2, ~0.11125369292536007E~307) = 0.11055812779403243E306 +nextAfter (~0.123E~2, ~0.11125369292536007E~307) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.11125369292536007E~307) = 0.0 +* (~0.123E~2, ~0.5E~323) = 0.0 ++ (~0.123E~2, ~0.5E~323) = ~0.123E~2 +- (~0.123E~2, ~0.5E~323) = ~0.123E~2 +/ (~0.123E~2, ~0.5E~323) = inf +nextAfter (~0.123E~2, ~0.5E~323) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.5E~323) = inf +* (~0.123E~2, ~0.0) = 0.0 ++ (~0.123E~2, ~0.0) = ~0.123E~2 +- (~0.123E~2, ~0.0) = ~0.123E~2 +/ (~0.123E~2, ~0.0) = inf +nextAfter (~0.123E~2, ~0.0) = ~0.12299999999999998E~2 +rem (~0.123E~2, ~0.0) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999999999998E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.123E~2, ~inf) = inf ++ (~0.123E~2, ~inf) = ~inf +- (~0.123E~2, ~inf) = inf +/ (~0.123E~2, ~inf) = 0.0 +nextAfter (~0.123E~2, ~inf) = ~0.12300000000000002E~2 +rem (~0.123E~2, ~inf) = ~0.123E~2 +* (~0.123E~2, nan) = nan ++ (~0.123E~2, nan) = nan +- (~0.123E~2, nan) = nan +/ (~0.123E~2, nan) = nan +nextAfter (~0.123E~2, nan) = nan +rem (~0.123E~2, nan) = nan +* (~0.123E~2, inf) = ~inf ++ (~0.123E~2, inf) = inf +- (~0.123E~2, inf) = ~inf +/ (~0.123E~2, inf) = ~0.0 +nextAfter (~0.123E~2, inf) = ~0.12299999999999998E~2 +rem (~0.123E~2, inf) = ~0.123E~2 +* (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.39999999999999996E1 ++ (~0.22250738585072014E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.17976931348623157E309) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.19999999999999998E1 ++ (~0.22250738585072014E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.8988465674311579E308) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E4) = ~0.27368408459638577E~304 ++ (~0.22250738585072014E~307, 0.123E4) = 0.123E4 +- (~0.22250738585072014E~307, 0.123E4) = ~0.123E4 +/ (~0.22250738585072014E~307, 0.123E4) = ~0.18090031369976E~310 +nextAfter (~0.22250738585072014E~307, 0.123E4) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E4) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E2) = ~0.2736840845963858E~306 ++ (~0.22250738585072014E~307, 0.123E2) = 0.123E2 +- (~0.22250738585072014E~307, 0.123E2) = ~0.123E2 +/ (~0.22250738585072014E~307, 0.123E2) = ~0.1809003136997725E~308 +nextAfter (~0.22250738585072014E~307, 0.123E2) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.6990275687580919E~307 ++ (~0.22250738585072014E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.7082630066519554E~308 +nextAfter (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.3141592653589793E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.6048377836559378E~307 ++ (~0.22250738585072014E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.818558927632814E~308 +nextAfter (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.2718281828459045E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E1) = ~0.27368408459638577E~307 ++ (~0.22250738585072014E~307, 0.123E1) = 0.123E1 +- (~0.22250738585072014E~307, 0.123E1) = ~0.123E1 +/ (~0.22250738585072014E~307, 0.123E1) = ~0.18090031369977247E~307 +nextAfter (~0.22250738585072014E~307, 0.123E1) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123) = ~0.273684084596386E~308 ++ (~0.22250738585072014E~307, 0.123) = 0.123 +- (~0.22250738585072014E~307, 0.123) = ~0.123 +/ (~0.22250738585072014E~307, 0.123) = ~0.1809003136997725E~306 +nextAfter (~0.22250738585072014E~307, 0.123) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.123E~2) = ~0.2736840845964E~310 ++ (~0.22250738585072014E~307, 0.123E~2) = 0.123E~2 +- (~0.22250738585072014E~307, 0.123E~2) = ~0.123E~2 +/ (~0.22250738585072014E~307, 0.123E~2) = ~0.18090031369977247E~304 +nextAfter (~0.22250738585072014E~307, 0.123E~2) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.123E~2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.0 ++ (~0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +- (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.4450147717014403E~307 +/ (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.1E1 +nextAfter (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.22250738585072014E~307) = 0.0 +* (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.0 ++ (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.3337610787760802E~307 +/ (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.2E1 +nextAfter (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.11125369292536007E~307) = 0.0 +* (~0.22250738585072014E~307, 0.5E~323) = ~0.0 ++ (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507201E~307 +- (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507202E~307 +/ (~0.22250738585072014E~307, 0.5E~323) = ~0.4503599627370496E16 +nextAfter (~0.22250738585072014E~307, 0.5E~323) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.5E~323) = 0.0 +* (~0.22250738585072014E~307, 0.0) = ~0.0 ++ (~0.22250738585072014E~307, 0.0) = ~0.22250738585072014E~307 +- (~0.22250738585072014E~307, 0.0) = ~0.22250738585072014E~307 +/ (~0.22250738585072014E~307, 0.0) = ~inf +nextAfter (~0.22250738585072014E~307, 0.0) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, 0.0) = nan +* (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.39999999999999996E1 ++ (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.22250738585072014E~307, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.19999999999999998E1 ++ (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.22250738585072014E~307, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E4) = 0.27368408459638577E~304 ++ (~0.22250738585072014E~307, ~0.123E4) = ~0.123E4 +- (~0.22250738585072014E~307, ~0.123E4) = 0.123E4 +/ (~0.22250738585072014E~307, ~0.123E4) = 0.18090031369976E~310 +nextAfter (~0.22250738585072014E~307, ~0.123E4) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E4) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E2) = 0.2736840845963858E~306 ++ (~0.22250738585072014E~307, ~0.123E2) = ~0.123E2 +- (~0.22250738585072014E~307, ~0.123E2) = 0.123E2 +/ (~0.22250738585072014E~307, ~0.123E2) = 0.1809003136997725E~308 +nextAfter (~0.22250738585072014E~307, ~0.123E2) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.6990275687580919E~307 ++ (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.22250738585072014E~307, ~0.3141592653589793E1) = 0.7082630066519554E~308 +nextAfter (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.6048377836559378E~307 ++ (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.22250738585072014E~307, ~0.2718281828459045E1) = 0.818558927632814E~308 +nextAfter (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E1) = 0.27368408459638577E~307 ++ (~0.22250738585072014E~307, ~0.123E1) = ~0.123E1 +- (~0.22250738585072014E~307, ~0.123E1) = 0.123E1 +/ (~0.22250738585072014E~307, ~0.123E1) = 0.18090031369977247E~307 +nextAfter (~0.22250738585072014E~307, ~0.123E1) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E1) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123) = 0.273684084596386E~308 ++ (~0.22250738585072014E~307, ~0.123) = ~0.123 +- (~0.22250738585072014E~307, ~0.123) = 0.123 +/ (~0.22250738585072014E~307, ~0.123) = 0.1809003136997725E~306 +nextAfter (~0.22250738585072014E~307, ~0.123) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.123E~2) = 0.2736840845964E~310 ++ (~0.22250738585072014E~307, ~0.123E~2) = ~0.123E~2 +- (~0.22250738585072014E~307, ~0.123E~2) = 0.123E~2 +/ (~0.22250738585072014E~307, ~0.123E~2) = 0.18090031369977247E~304 +nextAfter (~0.22250738585072014E~307, ~0.123E~2) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~0.123E~2) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 ++ (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.4450147717014403E~307 +- (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +/ (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.1E1 +nextAfter (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +rem (~0.22250738585072014E~307, ~0.22250738585072014E~307) = 0.0 +* (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 ++ (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.3337610787760802E~307 +- (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.2E1 +nextAfter (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.11125369292536007E~307) = 0.0 +* (~0.22250738585072014E~307, ~0.5E~323) = 0.0 ++ (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507202E~307 +- (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507201E~307 +/ (~0.22250738585072014E~307, ~0.5E~323) = 0.4503599627370496E16 +nextAfter (~0.22250738585072014E~307, ~0.5E~323) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.5E~323) = 0.0 +* (~0.22250738585072014E~307, ~0.0) = 0.0 ++ (~0.22250738585072014E~307, ~0.0) = ~0.22250738585072014E~307 +- (~0.22250738585072014E~307, ~0.0) = ~0.22250738585072014E~307 +/ (~0.22250738585072014E~307, ~0.0) = inf +nextAfter (~0.22250738585072014E~307, ~0.0) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, ~0.0) = nan +* (~0.22250738585072014E~307, inf) = ~inf ++ (~0.22250738585072014E~307, inf) = inf +- (~0.22250738585072014E~307, inf) = ~inf +/ (~0.22250738585072014E~307, inf) = ~0.0 +nextAfter (~0.22250738585072014E~307, inf) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, inf) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, ~inf) = inf ++ (~0.22250738585072014E~307, ~inf) = ~inf +- (~0.22250738585072014E~307, ~inf) = inf +/ (~0.22250738585072014E~307, ~inf) = 0.0 +nextAfter (~0.22250738585072014E~307, ~inf) = ~0.2225073858507202E~307 +rem (~0.22250738585072014E~307, ~inf) = ~0.22250738585072014E~307 +* (~0.22250738585072014E~307, nan) = nan ++ (~0.22250738585072014E~307, nan) = nan +- (~0.22250738585072014E~307, nan) = nan +/ (~0.22250738585072014E~307, nan) = nan +nextAfter (~0.22250738585072014E~307, nan) = nan +rem (~0.22250738585072014E~307, nan) = nan +* (~0.22250738585072014E~307, inf) = ~inf ++ (~0.22250738585072014E~307, inf) = inf +- (~0.22250738585072014E~307, inf) = ~inf +/ (~0.22250738585072014E~307, inf) = ~0.0 +nextAfter (~0.22250738585072014E~307, inf) = ~0.2225073858507201E~307 +rem (~0.22250738585072014E~307, inf) = ~0.22250738585072014E~307 +* (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.19999999999999998E1 ++ (~0.11125369292536007E~307, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.17976931348623157E309) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.9999999999999999 ++ (~0.11125369292536007E~307, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.8988465674311579E308) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E4) = ~0.13684204229819289E~304 ++ (~0.11125369292536007E~307, 0.123E4) = 0.123E4 +- (~0.11125369292536007E~307, 0.123E4) = ~0.123E4 +/ (~0.11125369292536007E~307, 0.123E4) = ~0.904501568499E~311 +nextAfter (~0.11125369292536007E~307, 0.123E4) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E4) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E2) = ~0.1368420422981929E~306 ++ (~0.11125369292536007E~307, 0.123E2) = 0.123E2 +- (~0.11125369292536007E~307, 0.123E2) = ~0.123E2 +/ (~0.11125369292536007E~307, 0.123E2) = ~0.90450156849886E~309 +nextAfter (~0.11125369292536007E~307, 0.123E2) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.34951378437904593E~307 ++ (~0.11125369292536007E~307, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.3541315033259774E~308 +nextAfter (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.3141592653589793E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.3024188918279689E~307 ++ (~0.11125369292536007E~307, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.409279463816407E~308 +nextAfter (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.2718281828459045E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E1) = ~0.1368420422981929E~307 ++ (~0.11125369292536007E~307, 0.123E1) = 0.123E1 +- (~0.11125369292536007E~307, 0.123E1) = ~0.123E1 +/ (~0.11125369292536007E~307, 0.123E1) = ~0.9045015684988623E~308 +nextAfter (~0.11125369292536007E~307, 0.123E1) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123) = ~0.136842042298193E~308 ++ (~0.11125369292536007E~307, 0.123) = 0.123 +- (~0.11125369292536007E~307, 0.123) = ~0.123 +/ (~0.11125369292536007E~307, 0.123) = ~0.9045015684988624E~307 +nextAfter (~0.11125369292536007E~307, 0.123) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.123E~2) = ~0.1368420422982E~310 ++ (~0.11125369292536007E~307, 0.123E~2) = 0.123E~2 +- (~0.11125369292536007E~307, 0.123E~2) = ~0.123E~2 +/ (~0.11125369292536007E~307, 0.123E~2) = ~0.9045015684988623E~305 +nextAfter (~0.11125369292536007E~307, 0.123E~2) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.123E~2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.0 ++ (~0.11125369292536007E~307, 0.22250738585072014E~307) = 0.11125369292536007E~307 +- (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.3337610787760802E~307 +/ (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.5 +nextAfter (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.0 ++ (~0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +- (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.22250738585072014E~307 +/ (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.1E1 +nextAfter (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.11125369292536007E~307) = 0.0 +* (~0.11125369292536007E~307, 0.5E~323) = ~0.0 ++ (~0.11125369292536007E~307, 0.5E~323) = ~0.11125369292536E~307 +- (~0.11125369292536007E~307, 0.5E~323) = ~0.1112536929253601E~307 +/ (~0.11125369292536007E~307, 0.5E~323) = ~0.2251799813685248E16 +nextAfter (~0.11125369292536007E~307, 0.5E~323) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.5E~323) = 0.0 +* (~0.11125369292536007E~307, 0.0) = ~0.0 ++ (~0.11125369292536007E~307, 0.0) = ~0.11125369292536007E~307 +- (~0.11125369292536007E~307, 0.0) = ~0.11125369292536007E~307 +/ (~0.11125369292536007E~307, 0.0) = ~inf +nextAfter (~0.11125369292536007E~307, 0.0) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, 0.0) = nan +* (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.19999999999999998E1 ++ (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.11125369292536007E~307, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.9999999999999999 ++ (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.11125369292536007E~307, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E4) = 0.13684204229819289E~304 ++ (~0.11125369292536007E~307, ~0.123E4) = ~0.123E4 +- (~0.11125369292536007E~307, ~0.123E4) = 0.123E4 +/ (~0.11125369292536007E~307, ~0.123E4) = 0.904501568499E~311 +nextAfter (~0.11125369292536007E~307, ~0.123E4) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E4) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E2) = 0.1368420422981929E~306 ++ (~0.11125369292536007E~307, ~0.123E2) = ~0.123E2 +- (~0.11125369292536007E~307, ~0.123E2) = 0.123E2 +/ (~0.11125369292536007E~307, ~0.123E2) = 0.90450156849886E~309 +nextAfter (~0.11125369292536007E~307, ~0.123E2) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.34951378437904593E~307 ++ (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.11125369292536007E~307, ~0.3141592653589793E1) = 0.3541315033259774E~308 +nextAfter (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.3024188918279689E~307 ++ (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.11125369292536007E~307, ~0.2718281828459045E1) = 0.409279463816407E~308 +nextAfter (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E1) = 0.1368420422981929E~307 ++ (~0.11125369292536007E~307, ~0.123E1) = ~0.123E1 +- (~0.11125369292536007E~307, ~0.123E1) = 0.123E1 +/ (~0.11125369292536007E~307, ~0.123E1) = 0.9045015684988623E~308 +nextAfter (~0.11125369292536007E~307, ~0.123E1) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E1) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123) = 0.136842042298193E~308 ++ (~0.11125369292536007E~307, ~0.123) = ~0.123 +- (~0.11125369292536007E~307, ~0.123) = 0.123 +/ (~0.11125369292536007E~307, ~0.123) = 0.9045015684988624E~307 +nextAfter (~0.11125369292536007E~307, ~0.123) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.123E~2) = 0.1368420422982E~310 ++ (~0.11125369292536007E~307, ~0.123E~2) = ~0.123E~2 +- (~0.11125369292536007E~307, ~0.123E~2) = 0.123E~2 +/ (~0.11125369292536007E~307, ~0.123E~2) = 0.9045015684988623E~305 +nextAfter (~0.11125369292536007E~307, ~0.123E~2) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.123E~2) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.0 ++ (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.3337610787760802E~307 +- (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.11125369292536007E~307 +/ (~0.11125369292536007E~307, ~0.22250738585072014E~307) = 0.5 +nextAfter (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 ++ (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.22250738585072014E~307 +- (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +/ (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.1E1 +nextAfter (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +rem (~0.11125369292536007E~307, ~0.11125369292536007E~307) = 0.0 +* (~0.11125369292536007E~307, ~0.5E~323) = 0.0 ++ (~0.11125369292536007E~307, ~0.5E~323) = ~0.1112536929253601E~307 +- (~0.11125369292536007E~307, ~0.5E~323) = ~0.11125369292536E~307 +/ (~0.11125369292536007E~307, ~0.5E~323) = 0.2251799813685248E16 +nextAfter (~0.11125369292536007E~307, ~0.5E~323) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, ~0.5E~323) = 0.0 +* (~0.11125369292536007E~307, ~0.0) = 0.0 ++ (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536007E~307 +- (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536007E~307 +/ (~0.11125369292536007E~307, ~0.0) = inf +nextAfter (~0.11125369292536007E~307, ~0.0) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, ~0.0) = nan +* (~0.11125369292536007E~307, inf) = ~inf ++ (~0.11125369292536007E~307, inf) = inf +- (~0.11125369292536007E~307, inf) = ~inf +/ (~0.11125369292536007E~307, inf) = ~0.0 +nextAfter (~0.11125369292536007E~307, inf) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, inf) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, ~inf) = inf ++ (~0.11125369292536007E~307, ~inf) = ~inf +- (~0.11125369292536007E~307, ~inf) = inf +/ (~0.11125369292536007E~307, ~inf) = 0.0 +nextAfter (~0.11125369292536007E~307, ~inf) = ~0.1112536929253601E~307 +rem (~0.11125369292536007E~307, ~inf) = ~0.11125369292536007E~307 +* (~0.11125369292536007E~307, nan) = nan ++ (~0.11125369292536007E~307, nan) = nan +- (~0.11125369292536007E~307, nan) = nan +/ (~0.11125369292536007E~307, nan) = nan +nextAfter (~0.11125369292536007E~307, nan) = nan +rem (~0.11125369292536007E~307, nan) = nan +* (~0.11125369292536007E~307, inf) = ~inf ++ (~0.11125369292536007E~307, inf) = inf +- (~0.11125369292536007E~307, inf) = ~inf +/ (~0.11125369292536007E~307, inf) = ~0.0 +nextAfter (~0.11125369292536007E~307, inf) = ~0.11125369292536E~307 +rem (~0.11125369292536007E~307, inf) = ~0.11125369292536007E~307 +* (~0.5E~323, 0.17976931348623157E309) = ~0.8881784197001251E~15 ++ (~0.5E~323, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.5E~323, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.5E~323, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.5E~323, 0.17976931348623157E309) = ~0.0 +rem (~0.5E~323, 0.17976931348623157E309) = ~0.5E~323 +* (~0.5E~323, 0.8988465674311579E308) = ~0.44408920985006257E~15 ++ (~0.5E~323, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.5E~323, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.5E~323, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.5E~323, 0.8988465674311579E308) = ~0.0 +rem (~0.5E~323, 0.8988465674311579E308) = ~0.5E~323 +* (~0.5E~323, 0.123E4) = ~0.6077E~320 ++ (~0.5E~323, 0.123E4) = 0.123E4 +- (~0.5E~323, 0.123E4) = ~0.123E4 +/ (~0.5E~323, 0.123E4) = ~0.0 +nextAfter (~0.5E~323, 0.123E4) = ~0.0 +rem (~0.5E~323, 0.123E4) = ~0.5E~323 +* (~0.5E~323, 0.123E2) = ~0.6E~322 ++ (~0.5E~323, 0.123E2) = 0.123E2 +- (~0.5E~323, 0.123E2) = ~0.123E2 +/ (~0.5E~323, 0.123E2) = ~0.0 +nextAfter (~0.5E~323, 0.123E2) = ~0.0 +rem (~0.5E~323, 0.123E2) = ~0.5E~323 +* (~0.5E~323, 0.3141592653589793E1) = ~0.15E~322 ++ (~0.5E~323, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.5E~323, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.5E~323, 0.3141592653589793E1) = ~0.0 +nextAfter (~0.5E~323, 0.3141592653589793E1) = ~0.0 +rem (~0.5E~323, 0.3141592653589793E1) = ~0.5E~323 +* (~0.5E~323, 0.2718281828459045E1) = ~0.15E~322 ++ (~0.5E~323, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.5E~323, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.5E~323, 0.2718281828459045E1) = ~0.0 +nextAfter (~0.5E~323, 0.2718281828459045E1) = ~0.0 +rem (~0.5E~323, 0.2718281828459045E1) = ~0.5E~323 +* (~0.5E~323, 0.123E1) = ~0.5E~323 ++ (~0.5E~323, 0.123E1) = 0.123E1 +- (~0.5E~323, 0.123E1) = ~0.123E1 +/ (~0.5E~323, 0.123E1) = ~0.5E~323 +nextAfter (~0.5E~323, 0.123E1) = ~0.0 +rem (~0.5E~323, 0.123E1) = ~0.5E~323 +* (~0.5E~323, 0.123) = ~0.0 ++ (~0.5E~323, 0.123) = 0.123 +- (~0.5E~323, 0.123) = ~0.123 +/ (~0.5E~323, 0.123) = ~0.4E~322 +nextAfter (~0.5E~323, 0.123) = ~0.0 +rem (~0.5E~323, 0.123) = ~0.5E~323 +* (~0.5E~323, 0.123E~2) = ~0.0 ++ (~0.5E~323, 0.123E~2) = 0.123E~2 +- (~0.5E~323, 0.123E~2) = ~0.123E~2 +/ (~0.5E~323, 0.123E~2) = ~0.4017E~320 +nextAfter (~0.5E~323, 0.123E~2) = ~0.0 +rem (~0.5E~323, 0.123E~2) = ~0.5E~323 +* (~0.5E~323, 0.22250738585072014E~307) = ~0.0 ++ (~0.5E~323, 0.22250738585072014E~307) = 0.2225073858507201E~307 +- (~0.5E~323, 0.22250738585072014E~307) = ~0.2225073858507202E~307 +/ (~0.5E~323, 0.22250738585072014E~307) = ~0.2220446049250313E~15 +nextAfter (~0.5E~323, 0.22250738585072014E~307) = ~0.0 +rem (~0.5E~323, 0.22250738585072014E~307) = ~0.5E~323 +* (~0.5E~323, 0.11125369292536007E~307) = ~0.0 ++ (~0.5E~323, 0.11125369292536007E~307) = 0.11125369292536E~307 +- (~0.5E~323, 0.11125369292536007E~307) = ~0.1112536929253601E~307 +/ (~0.5E~323, 0.11125369292536007E~307) = ~0.4440892098500626E~15 +nextAfter (~0.5E~323, 0.11125369292536007E~307) = ~0.0 +rem (~0.5E~323, 0.11125369292536007E~307) = ~0.5E~323 +* (~0.5E~323, 0.5E~323) = ~0.0 ++ (~0.5E~323, 0.5E~323) = 0.0 +- (~0.5E~323, 0.5E~323) = ~0.1E~322 +/ (~0.5E~323, 0.5E~323) = ~0.1E1 +nextAfter (~0.5E~323, 0.5E~323) = ~0.0 +rem (~0.5E~323, 0.5E~323) = 0.0 +* (~0.5E~323, 0.0) = ~0.0 ++ (~0.5E~323, 0.0) = ~0.5E~323 +- (~0.5E~323, 0.0) = ~0.5E~323 +/ (~0.5E~323, 0.0) = ~inf +nextAfter (~0.5E~323, 0.0) = ~0.0 +rem (~0.5E~323, 0.0) = nan +* (~0.5E~323, ~0.17976931348623157E309) = 0.8881784197001251E~15 ++ (~0.5E~323, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.5E~323, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.5E~323, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.5E~323, ~0.17976931348623157E309) = ~0.1E~322 +rem (~0.5E~323, ~0.17976931348623157E309) = ~0.5E~323 +* (~0.5E~323, ~0.8988465674311579E308) = 0.44408920985006257E~15 ++ (~0.5E~323, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.5E~323, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.5E~323, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.5E~323, ~0.8988465674311579E308) = ~0.1E~322 +rem (~0.5E~323, ~0.8988465674311579E308) = ~0.5E~323 +* (~0.5E~323, ~0.123E4) = 0.6077E~320 ++ (~0.5E~323, ~0.123E4) = ~0.123E4 +- (~0.5E~323, ~0.123E4) = 0.123E4 +/ (~0.5E~323, ~0.123E4) = 0.0 +nextAfter (~0.5E~323, ~0.123E4) = ~0.1E~322 +rem (~0.5E~323, ~0.123E4) = ~0.5E~323 +* (~0.5E~323, ~0.123E2) = 0.6E~322 ++ (~0.5E~323, ~0.123E2) = ~0.123E2 +- (~0.5E~323, ~0.123E2) = 0.123E2 +/ (~0.5E~323, ~0.123E2) = 0.0 +nextAfter (~0.5E~323, ~0.123E2) = ~0.1E~322 +rem (~0.5E~323, ~0.123E2) = ~0.5E~323 +* (~0.5E~323, ~0.3141592653589793E1) = 0.15E~322 ++ (~0.5E~323, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.5E~323, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.5E~323, ~0.3141592653589793E1) = 0.0 +nextAfter (~0.5E~323, ~0.3141592653589793E1) = ~0.1E~322 +rem (~0.5E~323, ~0.3141592653589793E1) = ~0.5E~323 +* (~0.5E~323, ~0.2718281828459045E1) = 0.15E~322 ++ (~0.5E~323, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.5E~323, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.5E~323, ~0.2718281828459045E1) = 0.0 +nextAfter (~0.5E~323, ~0.2718281828459045E1) = ~0.1E~322 +rem (~0.5E~323, ~0.2718281828459045E1) = ~0.5E~323 +* (~0.5E~323, ~0.123E1) = 0.5E~323 ++ (~0.5E~323, ~0.123E1) = ~0.123E1 +- (~0.5E~323, ~0.123E1) = 0.123E1 +/ (~0.5E~323, ~0.123E1) = 0.5E~323 +nextAfter (~0.5E~323, ~0.123E1) = ~0.1E~322 +rem (~0.5E~323, ~0.123E1) = ~0.5E~323 +* (~0.5E~323, ~0.123) = 0.0 ++ (~0.5E~323, ~0.123) = ~0.123 +- (~0.5E~323, ~0.123) = 0.123 +/ (~0.5E~323, ~0.123) = 0.4E~322 +nextAfter (~0.5E~323, ~0.123) = ~0.1E~322 +rem (~0.5E~323, ~0.123) = ~0.5E~323 +* (~0.5E~323, ~0.123E~2) = 0.0 ++ (~0.5E~323, ~0.123E~2) = ~0.123E~2 +- (~0.5E~323, ~0.123E~2) = 0.123E~2 +/ (~0.5E~323, ~0.123E~2) = 0.4017E~320 +nextAfter (~0.5E~323, ~0.123E~2) = ~0.1E~322 +rem (~0.5E~323, ~0.123E~2) = ~0.5E~323 +* (~0.5E~323, ~0.22250738585072014E~307) = 0.0 ++ (~0.5E~323, ~0.22250738585072014E~307) = ~0.2225073858507202E~307 +- (~0.5E~323, ~0.22250738585072014E~307) = 0.2225073858507201E~307 +/ (~0.5E~323, ~0.22250738585072014E~307) = 0.2220446049250313E~15 +nextAfter (~0.5E~323, ~0.22250738585072014E~307) = ~0.1E~322 +rem (~0.5E~323, ~0.22250738585072014E~307) = ~0.5E~323 +* (~0.5E~323, ~0.11125369292536007E~307) = 0.0 ++ (~0.5E~323, ~0.11125369292536007E~307) = ~0.1112536929253601E~307 +- (~0.5E~323, ~0.11125369292536007E~307) = 0.11125369292536E~307 +/ (~0.5E~323, ~0.11125369292536007E~307) = 0.4440892098500626E~15 +nextAfter (~0.5E~323, ~0.11125369292536007E~307) = ~0.1E~322 +rem (~0.5E~323, ~0.11125369292536007E~307) = ~0.5E~323 +* (~0.5E~323, ~0.5E~323) = 0.0 ++ (~0.5E~323, ~0.5E~323) = ~0.1E~322 +- (~0.5E~323, ~0.5E~323) = 0.0 +/ (~0.5E~323, ~0.5E~323) = 0.1E1 +nextAfter (~0.5E~323, ~0.5E~323) = ~0.5E~323 +rem (~0.5E~323, ~0.5E~323) = 0.0 +* (~0.5E~323, ~0.0) = 0.0 ++ (~0.5E~323, ~0.0) = ~0.5E~323 +- (~0.5E~323, ~0.0) = ~0.5E~323 +/ (~0.5E~323, ~0.0) = inf +nextAfter (~0.5E~323, ~0.0) = ~0.0 +rem (~0.5E~323, ~0.0) = nan +* (~0.5E~323, inf) = ~inf ++ (~0.5E~323, inf) = inf +- (~0.5E~323, inf) = ~inf +/ (~0.5E~323, inf) = ~0.0 +nextAfter (~0.5E~323, inf) = ~0.0 +rem (~0.5E~323, inf) = ~0.5E~323 +* (~0.5E~323, ~inf) = inf ++ (~0.5E~323, ~inf) = ~inf +- (~0.5E~323, ~inf) = inf +/ (~0.5E~323, ~inf) = 0.0 +nextAfter (~0.5E~323, ~inf) = ~0.1E~322 +rem (~0.5E~323, ~inf) = ~0.5E~323 +* (~0.5E~323, nan) = nan ++ (~0.5E~323, nan) = nan +- (~0.5E~323, nan) = nan +/ (~0.5E~323, nan) = nan +nextAfter (~0.5E~323, nan) = nan +rem (~0.5E~323, nan) = nan +* (~0.5E~323, inf) = ~inf ++ (~0.5E~323, inf) = inf +- (~0.5E~323, inf) = ~inf +/ (~0.5E~323, inf) = ~0.0 +nextAfter (~0.5E~323, inf) = ~0.0 +rem (~0.5E~323, inf) = ~0.5E~323 +* (~0.0, 0.17976931348623157E309) = ~0.0 ++ (~0.0, 0.17976931348623157E309) = 0.17976931348623157E309 +- (~0.0, 0.17976931348623157E309) = ~0.17976931348623157E309 +/ (~0.0, 0.17976931348623157E309) = ~0.0 +nextAfter (~0.0, 0.17976931348623157E309) = 0.5E~323 +rem (~0.0, 0.17976931348623157E309) = 0.0 +* (~0.0, 0.8988465674311579E308) = ~0.0 ++ (~0.0, 0.8988465674311579E308) = 0.8988465674311579E308 +- (~0.0, 0.8988465674311579E308) = ~0.8988465674311579E308 +/ (~0.0, 0.8988465674311579E308) = ~0.0 +nextAfter (~0.0, 0.8988465674311579E308) = 0.5E~323 +rem (~0.0, 0.8988465674311579E308) = 0.0 +* (~0.0, 0.123E4) = ~0.0 ++ (~0.0, 0.123E4) = 0.123E4 +- (~0.0, 0.123E4) = ~0.123E4 +/ (~0.0, 0.123E4) = ~0.0 +nextAfter (~0.0, 0.123E4) = 0.5E~323 +rem (~0.0, 0.123E4) = 0.0 +* (~0.0, 0.123E2) = ~0.0 ++ (~0.0, 0.123E2) = 0.123E2 +- (~0.0, 0.123E2) = ~0.123E2 +/ (~0.0, 0.123E2) = ~0.0 +nextAfter (~0.0, 0.123E2) = 0.5E~323 +rem (~0.0, 0.123E2) = 0.0 +* (~0.0, 0.3141592653589793E1) = ~0.0 ++ (~0.0, 0.3141592653589793E1) = 0.3141592653589793E1 +- (~0.0, 0.3141592653589793E1) = ~0.3141592653589793E1 +/ (~0.0, 0.3141592653589793E1) = ~0.0 +nextAfter (~0.0, 0.3141592653589793E1) = 0.5E~323 +rem (~0.0, 0.3141592653589793E1) = 0.0 +* (~0.0, 0.2718281828459045E1) = ~0.0 ++ (~0.0, 0.2718281828459045E1) = 0.2718281828459045E1 +- (~0.0, 0.2718281828459045E1) = ~0.2718281828459045E1 +/ (~0.0, 0.2718281828459045E1) = ~0.0 +nextAfter (~0.0, 0.2718281828459045E1) = 0.5E~323 +rem (~0.0, 0.2718281828459045E1) = 0.0 +* (~0.0, 0.123E1) = ~0.0 ++ (~0.0, 0.123E1) = 0.123E1 +- (~0.0, 0.123E1) = ~0.123E1 +/ (~0.0, 0.123E1) = ~0.0 +nextAfter (~0.0, 0.123E1) = 0.5E~323 +rem (~0.0, 0.123E1) = 0.0 +* (~0.0, 0.123) = ~0.0 ++ (~0.0, 0.123) = 0.123 +- (~0.0, 0.123) = ~0.123 +/ (~0.0, 0.123) = ~0.0 +nextAfter (~0.0, 0.123) = 0.5E~323 +rem (~0.0, 0.123) = 0.0 +* (~0.0, 0.123E~2) = ~0.0 ++ (~0.0, 0.123E~2) = 0.123E~2 +- (~0.0, 0.123E~2) = ~0.123E~2 +/ (~0.0, 0.123E~2) = ~0.0 +nextAfter (~0.0, 0.123E~2) = 0.5E~323 +rem (~0.0, 0.123E~2) = 0.0 +* (~0.0, 0.22250738585072014E~307) = ~0.0 ++ (~0.0, 0.22250738585072014E~307) = 0.22250738585072014E~307 +- (~0.0, 0.22250738585072014E~307) = ~0.22250738585072014E~307 +/ (~0.0, 0.22250738585072014E~307) = ~0.0 +nextAfter (~0.0, 0.22250738585072014E~307) = 0.5E~323 +rem (~0.0, 0.22250738585072014E~307) = 0.0 +* (~0.0, 0.11125369292536007E~307) = ~0.0 ++ (~0.0, 0.11125369292536007E~307) = 0.11125369292536007E~307 +- (~0.0, 0.11125369292536007E~307) = ~0.11125369292536007E~307 +/ (~0.0, 0.11125369292536007E~307) = ~0.0 +nextAfter (~0.0, 0.11125369292536007E~307) = 0.5E~323 +rem (~0.0, 0.11125369292536007E~307) = 0.0 +* (~0.0, 0.5E~323) = ~0.0 ++ (~0.0, 0.5E~323) = 0.5E~323 +- (~0.0, 0.5E~323) = ~0.5E~323 +/ (~0.0, 0.5E~323) = ~0.0 +nextAfter (~0.0, 0.5E~323) = 0.5E~323 +rem (~0.0, 0.5E~323) = 0.0 +* (~0.0, 0.0) = ~0.0 ++ (~0.0, 0.0) = 0.0 +- (~0.0, 0.0) = ~0.0 +/ (~0.0, 0.0) = nan +nextAfter (~0.0, 0.0) = 0.0 +rem (~0.0, 0.0) = 0.0 +* (~0.0, ~0.17976931348623157E309) = 0.0 ++ (~0.0, ~0.17976931348623157E309) = ~0.17976931348623157E309 +- (~0.0, ~0.17976931348623157E309) = 0.17976931348623157E309 +/ (~0.0, ~0.17976931348623157E309) = 0.0 +nextAfter (~0.0, ~0.17976931348623157E309) = ~0.5E~323 +rem (~0.0, ~0.17976931348623157E309) = 0.0 +* (~0.0, ~0.8988465674311579E308) = 0.0 ++ (~0.0, ~0.8988465674311579E308) = ~0.8988465674311579E308 +- (~0.0, ~0.8988465674311579E308) = 0.8988465674311579E308 +/ (~0.0, ~0.8988465674311579E308) = 0.0 +nextAfter (~0.0, ~0.8988465674311579E308) = ~0.5E~323 +rem (~0.0, ~0.8988465674311579E308) = 0.0 +* (~0.0, ~0.123E4) = 0.0 ++ (~0.0, ~0.123E4) = ~0.123E4 +- (~0.0, ~0.123E4) = 0.123E4 +/ (~0.0, ~0.123E4) = 0.0 +nextAfter (~0.0, ~0.123E4) = ~0.5E~323 +rem (~0.0, ~0.123E4) = 0.0 +* (~0.0, ~0.123E2) = 0.0 ++ (~0.0, ~0.123E2) = ~0.123E2 +- (~0.0, ~0.123E2) = 0.123E2 +/ (~0.0, ~0.123E2) = 0.0 +nextAfter (~0.0, ~0.123E2) = ~0.5E~323 +rem (~0.0, ~0.123E2) = 0.0 +* (~0.0, ~0.3141592653589793E1) = 0.0 ++ (~0.0, ~0.3141592653589793E1) = ~0.3141592653589793E1 +- (~0.0, ~0.3141592653589793E1) = 0.3141592653589793E1 +/ (~0.0, ~0.3141592653589793E1) = 0.0 +nextAfter (~0.0, ~0.3141592653589793E1) = ~0.5E~323 +rem (~0.0, ~0.3141592653589793E1) = 0.0 +* (~0.0, ~0.2718281828459045E1) = 0.0 ++ (~0.0, ~0.2718281828459045E1) = ~0.2718281828459045E1 +- (~0.0, ~0.2718281828459045E1) = 0.2718281828459045E1 +/ (~0.0, ~0.2718281828459045E1) = 0.0 +nextAfter (~0.0, ~0.2718281828459045E1) = ~0.5E~323 +rem (~0.0, ~0.2718281828459045E1) = 0.0 +* (~0.0, ~0.123E1) = 0.0 ++ (~0.0, ~0.123E1) = ~0.123E1 +- (~0.0, ~0.123E1) = 0.123E1 +/ (~0.0, ~0.123E1) = 0.0 +nextAfter (~0.0, ~0.123E1) = ~0.5E~323 +rem (~0.0, ~0.123E1) = 0.0 +* (~0.0, ~0.123) = 0.0 ++ (~0.0, ~0.123) = ~0.123 +- (~0.0, ~0.123) = 0.123 +/ (~0.0, ~0.123) = 0.0 +nextAfter (~0.0, ~0.123) = ~0.5E~323 +rem (~0.0, ~0.123) = 0.0 +* (~0.0, ~0.123E~2) = 0.0 ++ (~0.0, ~0.123E~2) = ~0.123E~2 +- (~0.0, ~0.123E~2) = 0.123E~2 +/ (~0.0, ~0.123E~2) = 0.0 +nextAfter (~0.0, ~0.123E~2) = ~0.5E~323 +rem (~0.0, ~0.123E~2) = 0.0 +* (~0.0, ~0.22250738585072014E~307) = 0.0 ++ (~0.0, ~0.22250738585072014E~307) = ~0.22250738585072014E~307 +- (~0.0, ~0.22250738585072014E~307) = 0.22250738585072014E~307 +/ (~0.0, ~0.22250738585072014E~307) = 0.0 +nextAfter (~0.0, ~0.22250738585072014E~307) = ~0.5E~323 +rem (~0.0, ~0.22250738585072014E~307) = 0.0 +* (~0.0, ~0.11125369292536007E~307) = 0.0 ++ (~0.0, ~0.11125369292536007E~307) = ~0.11125369292536007E~307 +- (~0.0, ~0.11125369292536007E~307) = 0.11125369292536007E~307 +/ (~0.0, ~0.11125369292536007E~307) = 0.0 +nextAfter (~0.0, ~0.11125369292536007E~307) = ~0.5E~323 +rem (~0.0, ~0.11125369292536007E~307) = 0.0 +* (~0.0, ~0.5E~323) = 0.0 ++ (~0.0, ~0.5E~323) = ~0.5E~323 +- (~0.0, ~0.5E~323) = 0.5E~323 +/ (~0.0, ~0.5E~323) = 0.0 +nextAfter (~0.0, ~0.5E~323) = ~0.5E~323 +rem (~0.0, ~0.5E~323) = 0.0 +* (~0.0, ~0.0) = 0.0 ++ (~0.0, ~0.0) = ~0.0 +- (~0.0, ~0.0) = 0.0 +/ (~0.0, ~0.0) = nan +nextAfter (~0.0, ~0.0) = ~0.0 +rem (~0.0, ~0.0) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.5E~323 +rem (~0.0, inf) = 0.0 +* (~0.0, ~inf) = nan ++ (~0.0, ~inf) = ~inf +- (~0.0, ~inf) = inf +/ (~0.0, ~inf) = 0.0 +nextAfter (~0.0, ~inf) = ~0.5E~323 +rem (~0.0, ~inf) = 0.0 +* (~0.0, nan) = nan ++ (~0.0, nan) = nan +- (~0.0, nan) = nan +/ (~0.0, nan) = nan +nextAfter (~0.0, nan) = nan +rem (~0.0, nan) = 0.0 +* (~0.0, inf) = nan ++ (~0.0, inf) = inf +- (~0.0, inf) = ~inf +/ (~0.0, inf) = ~0.0 +nextAfter (~0.0, inf) = 0.5E~323 +rem (~0.0, inf) = 0.0 +* (inf, 0.17976931348623157E309) = inf ++ (inf, 0.17976931348623157E309) = inf +- (inf, 0.17976931348623157E309) = inf +/ (inf, 0.17976931348623157E309) = inf +nextAfter (inf, 0.17976931348623157E309) = inf +rem (inf, 0.17976931348623157E309) = nan +* (inf, 0.8988465674311579E308) = inf ++ (inf, 0.8988465674311579E308) = inf +- (inf, 0.8988465674311579E308) = inf +/ (inf, 0.8988465674311579E308) = inf +nextAfter (inf, 0.8988465674311579E308) = inf +rem (inf, 0.8988465674311579E308) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.3141592653589793E1) = inf ++ (inf, 0.3141592653589793E1) = inf +- (inf, 0.3141592653589793E1) = inf +/ (inf, 0.3141592653589793E1) = inf +nextAfter (inf, 0.3141592653589793E1) = inf +rem (inf, 0.3141592653589793E1) = nan +* (inf, 0.2718281828459045E1) = inf ++ (inf, 0.2718281828459045E1) = inf +- (inf, 0.2718281828459045E1) = inf +/ (inf, 0.2718281828459045E1) = inf +nextAfter (inf, 0.2718281828459045E1) = inf +rem (inf, 0.2718281828459045E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.22250738585072014E~307) = inf ++ (inf, 0.22250738585072014E~307) = inf +- (inf, 0.22250738585072014E~307) = inf +/ (inf, 0.22250738585072014E~307) = inf +nextAfter (inf, 0.22250738585072014E~307) = inf +rem (inf, 0.22250738585072014E~307) = nan +* (inf, 0.11125369292536007E~307) = inf ++ (inf, 0.11125369292536007E~307) = inf +- (inf, 0.11125369292536007E~307) = inf +/ (inf, 0.11125369292536007E~307) = inf +nextAfter (inf, 0.11125369292536007E~307) = inf +rem (inf, 0.11125369292536007E~307) = nan +* (inf, 0.5E~323) = inf ++ (inf, 0.5E~323) = inf +- (inf, 0.5E~323) = inf +/ (inf, 0.5E~323) = inf +nextAfter (inf, 0.5E~323) = inf +rem (inf, 0.5E~323) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.17976931348623157E309) = ~inf ++ (inf, ~0.17976931348623157E309) = inf +- (inf, ~0.17976931348623157E309) = inf +/ (inf, ~0.17976931348623157E309) = ~inf +nextAfter (inf, ~0.17976931348623157E309) = inf +rem (inf, ~0.17976931348623157E309) = nan +* (inf, ~0.8988465674311579E308) = ~inf ++ (inf, ~0.8988465674311579E308) = inf +- (inf, ~0.8988465674311579E308) = inf +/ (inf, ~0.8988465674311579E308) = ~inf +nextAfter (inf, ~0.8988465674311579E308) = inf +rem (inf, ~0.8988465674311579E308) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.3141592653589793E1) = ~inf ++ (inf, ~0.3141592653589793E1) = inf +- (inf, ~0.3141592653589793E1) = inf +/ (inf, ~0.3141592653589793E1) = ~inf +nextAfter (inf, ~0.3141592653589793E1) = inf +rem (inf, ~0.3141592653589793E1) = nan +* (inf, ~0.2718281828459045E1) = ~inf ++ (inf, ~0.2718281828459045E1) = inf +- (inf, ~0.2718281828459045E1) = inf +/ (inf, ~0.2718281828459045E1) = ~inf +nextAfter (inf, ~0.2718281828459045E1) = inf +rem (inf, ~0.2718281828459045E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.22250738585072014E~307) = ~inf ++ (inf, ~0.22250738585072014E~307) = inf +- (inf, ~0.22250738585072014E~307) = inf +/ (inf, ~0.22250738585072014E~307) = ~inf +nextAfter (inf, ~0.22250738585072014E~307) = inf +rem (inf, ~0.22250738585072014E~307) = nan +* (inf, ~0.11125369292536007E~307) = ~inf ++ (inf, ~0.11125369292536007E~307) = inf +- (inf, ~0.11125369292536007E~307) = inf +/ (inf, ~0.11125369292536007E~307) = ~inf +nextAfter (inf, ~0.11125369292536007E~307) = inf +rem (inf, ~0.11125369292536007E~307) = nan +* (inf, ~0.5E~323) = ~inf ++ (inf, ~0.5E~323) = inf +- (inf, ~0.5E~323) = inf +/ (inf, ~0.5E~323) = ~inf +nextAfter (inf, ~0.5E~323) = inf +rem (inf, ~0.5E~323) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (~inf, 0.17976931348623157E309) = ~inf ++ (~inf, 0.17976931348623157E309) = ~inf +- (~inf, 0.17976931348623157E309) = ~inf +/ (~inf, 0.17976931348623157E309) = ~inf +nextAfter (~inf, 0.17976931348623157E309) = ~inf +rem (~inf, 0.17976931348623157E309) = nan +* (~inf, 0.8988465674311579E308) = ~inf ++ (~inf, 0.8988465674311579E308) = ~inf +- (~inf, 0.8988465674311579E308) = ~inf +/ (~inf, 0.8988465674311579E308) = ~inf +nextAfter (~inf, 0.8988465674311579E308) = ~inf +rem (~inf, 0.8988465674311579E308) = nan +* (~inf, 0.123E4) = ~inf ++ (~inf, 0.123E4) = ~inf +- (~inf, 0.123E4) = ~inf +/ (~inf, 0.123E4) = ~inf +nextAfter (~inf, 0.123E4) = ~inf +rem (~inf, 0.123E4) = nan +* (~inf, 0.123E2) = ~inf ++ (~inf, 0.123E2) = ~inf +- (~inf, 0.123E2) = ~inf +/ (~inf, 0.123E2) = ~inf +nextAfter (~inf, 0.123E2) = ~inf +rem (~inf, 0.123E2) = nan +* (~inf, 0.3141592653589793E1) = ~inf ++ (~inf, 0.3141592653589793E1) = ~inf +- (~inf, 0.3141592653589793E1) = ~inf +/ (~inf, 0.3141592653589793E1) = ~inf +nextAfter (~inf, 0.3141592653589793E1) = ~inf +rem (~inf, 0.3141592653589793E1) = nan +* (~inf, 0.2718281828459045E1) = ~inf ++ (~inf, 0.2718281828459045E1) = ~inf +- (~inf, 0.2718281828459045E1) = ~inf +/ (~inf, 0.2718281828459045E1) = ~inf +nextAfter (~inf, 0.2718281828459045E1) = ~inf +rem (~inf, 0.2718281828459045E1) = nan +* (~inf, 0.123E1) = ~inf ++ (~inf, 0.123E1) = ~inf +- (~inf, 0.123E1) = ~inf +/ (~inf, 0.123E1) = ~inf +nextAfter (~inf, 0.123E1) = ~inf +rem (~inf, 0.123E1) = nan +* (~inf, 0.123) = ~inf ++ (~inf, 0.123) = ~inf +- (~inf, 0.123) = ~inf +/ (~inf, 0.123) = ~inf +nextAfter (~inf, 0.123) = ~inf +rem (~inf, 0.123) = nan +* (~inf, 0.123E~2) = ~inf ++ (~inf, 0.123E~2) = ~inf +- (~inf, 0.123E~2) = ~inf +/ (~inf, 0.123E~2) = ~inf +nextAfter (~inf, 0.123E~2) = ~inf +rem (~inf, 0.123E~2) = nan +* (~inf, 0.22250738585072014E~307) = ~inf ++ (~inf, 0.22250738585072014E~307) = ~inf +- (~inf, 0.22250738585072014E~307) = ~inf +/ (~inf, 0.22250738585072014E~307) = ~inf +nextAfter (~inf, 0.22250738585072014E~307) = ~inf +rem (~inf, 0.22250738585072014E~307) = nan +* (~inf, 0.11125369292536007E~307) = ~inf ++ (~inf, 0.11125369292536007E~307) = ~inf +- (~inf, 0.11125369292536007E~307) = ~inf +/ (~inf, 0.11125369292536007E~307) = ~inf +nextAfter (~inf, 0.11125369292536007E~307) = ~inf +rem (~inf, 0.11125369292536007E~307) = nan +* (~inf, 0.5E~323) = ~inf ++ (~inf, 0.5E~323) = ~inf +- (~inf, 0.5E~323) = ~inf +/ (~inf, 0.5E~323) = ~inf +nextAfter (~inf, 0.5E~323) = ~inf +rem (~inf, 0.5E~323) = nan +* (~inf, 0.0) = nan ++ (~inf, 0.0) = ~inf +- (~inf, 0.0) = ~inf +/ (~inf, 0.0) = ~inf +nextAfter (~inf, 0.0) = ~inf +rem (~inf, 0.0) = nan +* (~inf, ~0.17976931348623157E309) = inf ++ (~inf, ~0.17976931348623157E309) = ~inf +- (~inf, ~0.17976931348623157E309) = ~inf +/ (~inf, ~0.17976931348623157E309) = inf +nextAfter (~inf, ~0.17976931348623157E309) = ~inf +rem (~inf, ~0.17976931348623157E309) = nan +* (~inf, ~0.8988465674311579E308) = inf ++ (~inf, ~0.8988465674311579E308) = ~inf +- (~inf, ~0.8988465674311579E308) = ~inf +/ (~inf, ~0.8988465674311579E308) = inf +nextAfter (~inf, ~0.8988465674311579E308) = ~inf +rem (~inf, ~0.8988465674311579E308) = nan +* (~inf, ~0.123E4) = inf ++ (~inf, ~0.123E4) = ~inf +- (~inf, ~0.123E4) = ~inf +/ (~inf, ~0.123E4) = inf +nextAfter (~inf, ~0.123E4) = ~inf +rem (~inf, ~0.123E4) = nan +* (~inf, ~0.123E2) = inf ++ (~inf, ~0.123E2) = ~inf +- (~inf, ~0.123E2) = ~inf +/ (~inf, ~0.123E2) = inf +nextAfter (~inf, ~0.123E2) = ~inf +rem (~inf, ~0.123E2) = nan +* (~inf, ~0.3141592653589793E1) = inf ++ (~inf, ~0.3141592653589793E1) = ~inf +- (~inf, ~0.3141592653589793E1) = ~inf +/ (~inf, ~0.3141592653589793E1) = inf +nextAfter (~inf, ~0.3141592653589793E1) = ~inf +rem (~inf, ~0.3141592653589793E1) = nan +* (~inf, ~0.2718281828459045E1) = inf ++ (~inf, ~0.2718281828459045E1) = ~inf +- (~inf, ~0.2718281828459045E1) = ~inf +/ (~inf, ~0.2718281828459045E1) = inf +nextAfter (~inf, ~0.2718281828459045E1) = ~inf +rem (~inf, ~0.2718281828459045E1) = nan +* (~inf, ~0.123E1) = inf ++ (~inf, ~0.123E1) = ~inf +- (~inf, ~0.123E1) = ~inf +/ (~inf, ~0.123E1) = inf +nextAfter (~inf, ~0.123E1) = ~inf +rem (~inf, ~0.123E1) = nan +* (~inf, ~0.123) = inf ++ (~inf, ~0.123) = ~inf +- (~inf, ~0.123) = ~inf +/ (~inf, ~0.123) = inf +nextAfter (~inf, ~0.123) = ~inf +rem (~inf, ~0.123) = nan +* (~inf, ~0.123E~2) = inf ++ (~inf, ~0.123E~2) = ~inf +- (~inf, ~0.123E~2) = ~inf +/ (~inf, ~0.123E~2) = inf +nextAfter (~inf, ~0.123E~2) = ~inf +rem (~inf, ~0.123E~2) = nan +* (~inf, ~0.22250738585072014E~307) = inf ++ (~inf, ~0.22250738585072014E~307) = ~inf +- (~inf, ~0.22250738585072014E~307) = ~inf +/ (~inf, ~0.22250738585072014E~307) = inf +nextAfter (~inf, ~0.22250738585072014E~307) = ~inf +rem (~inf, ~0.22250738585072014E~307) = nan +* (~inf, ~0.11125369292536007E~307) = inf ++ (~inf, ~0.11125369292536007E~307) = ~inf +- (~inf, ~0.11125369292536007E~307) = ~inf +/ (~inf, ~0.11125369292536007E~307) = inf +nextAfter (~inf, ~0.11125369292536007E~307) = ~inf +rem (~inf, ~0.11125369292536007E~307) = nan +* (~inf, ~0.5E~323) = inf ++ (~inf, ~0.5E~323) = ~inf +- (~inf, ~0.5E~323) = ~inf +/ (~inf, ~0.5E~323) = inf +nextAfter (~inf, ~0.5E~323) = ~inf +rem (~inf, ~0.5E~323) = nan +* (~inf, ~0.0) = nan ++ (~inf, ~0.0) = ~inf +- (~inf, ~0.0) = ~inf +/ (~inf, ~0.0) = inf +nextAfter (~inf, ~0.0) = ~inf +rem (~inf, ~0.0) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (~inf, ~inf) = inf ++ (~inf, ~inf) = ~inf +- (~inf, ~inf) = nan +/ (~inf, ~inf) = nan +nextAfter (~inf, ~inf) = ~inf +rem (~inf, ~inf) = nan +* (~inf, nan) = nan ++ (~inf, nan) = nan +- (~inf, nan) = nan +/ (~inf, nan) = nan +nextAfter (~inf, nan) = nan +rem (~inf, nan) = nan +* (~inf, inf) = ~inf ++ (~inf, inf) = nan +- (~inf, inf) = ~inf +/ (~inf, inf) = nan +nextAfter (~inf, inf) = ~inf +rem (~inf, inf) = nan +* (nan, 0.17976931348623157E309) = nan ++ (nan, 0.17976931348623157E309) = nan +- (nan, 0.17976931348623157E309) = nan +/ (nan, 0.17976931348623157E309) = nan +nextAfter (nan, 0.17976931348623157E309) = nan +rem (nan, 0.17976931348623157E309) = nan +* (nan, 0.8988465674311579E308) = nan ++ (nan, 0.8988465674311579E308) = nan +- (nan, 0.8988465674311579E308) = nan +/ (nan, 0.8988465674311579E308) = nan +nextAfter (nan, 0.8988465674311579E308) = nan +rem (nan, 0.8988465674311579E308) = nan +* (nan, 0.123E4) = nan ++ (nan, 0.123E4) = nan +- (nan, 0.123E4) = nan +/ (nan, 0.123E4) = nan +nextAfter (nan, 0.123E4) = nan +rem (nan, 0.123E4) = nan +* (nan, 0.123E2) = nan ++ (nan, 0.123E2) = nan +- (nan, 0.123E2) = nan +/ (nan, 0.123E2) = nan +nextAfter (nan, 0.123E2) = nan +rem (nan, 0.123E2) = nan +* (nan, 0.3141592653589793E1) = nan ++ (nan, 0.3141592653589793E1) = nan +- (nan, 0.3141592653589793E1) = nan +/ (nan, 0.3141592653589793E1) = nan +nextAfter (nan, 0.3141592653589793E1) = nan +rem (nan, 0.3141592653589793E1) = nan +* (nan, 0.2718281828459045E1) = nan ++ (nan, 0.2718281828459045E1) = nan +- (nan, 0.2718281828459045E1) = nan +/ (nan, 0.2718281828459045E1) = nan +nextAfter (nan, 0.2718281828459045E1) = nan +rem (nan, 0.2718281828459045E1) = nan +* (nan, 0.123E1) = nan ++ (nan, 0.123E1) = nan +- (nan, 0.123E1) = nan +/ (nan, 0.123E1) = nan +nextAfter (nan, 0.123E1) = nan +rem (nan, 0.123E1) = nan +* (nan, 0.123) = nan ++ (nan, 0.123) = nan +- (nan, 0.123) = nan +/ (nan, 0.123) = nan +nextAfter (nan, 0.123) = nan +rem (nan, 0.123) = nan +* (nan, 0.123E~2) = nan ++ (nan, 0.123E~2) = nan +- (nan, 0.123E~2) = nan +/ (nan, 0.123E~2) = nan +nextAfter (nan, 0.123E~2) = nan +rem (nan, 0.123E~2) = nan +* (nan, 0.22250738585072014E~307) = nan ++ (nan, 0.22250738585072014E~307) = nan +- (nan, 0.22250738585072014E~307) = nan +/ (nan, 0.22250738585072014E~307) = nan +nextAfter (nan, 0.22250738585072014E~307) = nan +rem (nan, 0.22250738585072014E~307) = nan +* (nan, 0.11125369292536007E~307) = nan ++ (nan, 0.11125369292536007E~307) = nan +- (nan, 0.11125369292536007E~307) = nan +/ (nan, 0.11125369292536007E~307) = nan +nextAfter (nan, 0.11125369292536007E~307) = nan +rem (nan, 0.11125369292536007E~307) = nan +* (nan, 0.5E~323) = nan ++ (nan, 0.5E~323) = nan +- (nan, 0.5E~323) = nan +/ (nan, 0.5E~323) = nan +nextAfter (nan, 0.5E~323) = nan +rem (nan, 0.5E~323) = nan +* (nan, 0.0) = nan ++ (nan, 0.0) = nan +- (nan, 0.0) = nan +/ (nan, 0.0) = nan +nextAfter (nan, 0.0) = nan +rem (nan, 0.0) = nan +* (nan, ~0.17976931348623157E309) = nan ++ (nan, ~0.17976931348623157E309) = nan +- (nan, ~0.17976931348623157E309) = nan +/ (nan, ~0.17976931348623157E309) = nan +nextAfter (nan, ~0.17976931348623157E309) = nan +rem (nan, ~0.17976931348623157E309) = nan +* (nan, ~0.8988465674311579E308) = nan ++ (nan, ~0.8988465674311579E308) = nan +- (nan, ~0.8988465674311579E308) = nan +/ (nan, ~0.8988465674311579E308) = nan +nextAfter (nan, ~0.8988465674311579E308) = nan +rem (nan, ~0.8988465674311579E308) = nan +* (nan, ~0.123E4) = nan ++ (nan, ~0.123E4) = nan +- (nan, ~0.123E4) = nan +/ (nan, ~0.123E4) = nan +nextAfter (nan, ~0.123E4) = nan +rem (nan, ~0.123E4) = nan +* (nan, ~0.123E2) = nan ++ (nan, ~0.123E2) = nan +- (nan, ~0.123E2) = nan +/ (nan, ~0.123E2) = nan +nextAfter (nan, ~0.123E2) = nan +rem (nan, ~0.123E2) = nan +* (nan, ~0.3141592653589793E1) = nan ++ (nan, ~0.3141592653589793E1) = nan +- (nan, ~0.3141592653589793E1) = nan +/ (nan, ~0.3141592653589793E1) = nan +nextAfter (nan, ~0.3141592653589793E1) = nan +rem (nan, ~0.3141592653589793E1) = nan +* (nan, ~0.2718281828459045E1) = nan ++ (nan, ~0.2718281828459045E1) = nan +- (nan, ~0.2718281828459045E1) = nan +/ (nan, ~0.2718281828459045E1) = nan +nextAfter (nan, ~0.2718281828459045E1) = nan +rem (nan, ~0.2718281828459045E1) = nan +* (nan, ~0.123E1) = nan ++ (nan, ~0.123E1) = nan +- (nan, ~0.123E1) = nan +/ (nan, ~0.123E1) = nan +nextAfter (nan, ~0.123E1) = nan +rem (nan, ~0.123E1) = nan +* (nan, ~0.123) = nan ++ (nan, ~0.123) = nan +- (nan, ~0.123) = nan +/ (nan, ~0.123) = nan +nextAfter (nan, ~0.123) = nan +rem (nan, ~0.123) = nan +* (nan, ~0.123E~2) = nan ++ (nan, ~0.123E~2) = nan +- (nan, ~0.123E~2) = nan +/ (nan, ~0.123E~2) = nan +nextAfter (nan, ~0.123E~2) = nan +rem (nan, ~0.123E~2) = nan +* (nan, ~0.22250738585072014E~307) = nan ++ (nan, ~0.22250738585072014E~307) = nan +- (nan, ~0.22250738585072014E~307) = nan +/ (nan, ~0.22250738585072014E~307) = nan +nextAfter (nan, ~0.22250738585072014E~307) = nan +rem (nan, ~0.22250738585072014E~307) = nan +* (nan, ~0.11125369292536007E~307) = nan ++ (nan, ~0.11125369292536007E~307) = nan +- (nan, ~0.11125369292536007E~307) = nan +/ (nan, ~0.11125369292536007E~307) = nan +nextAfter (nan, ~0.11125369292536007E~307) = nan +rem (nan, ~0.11125369292536007E~307) = nan +* (nan, ~0.5E~323) = nan ++ (nan, ~0.5E~323) = nan +- (nan, ~0.5E~323) = nan +/ (nan, ~0.5E~323) = nan +nextAfter (nan, ~0.5E~323) = nan +rem (nan, ~0.5E~323) = nan +* (nan, ~0.0) = nan ++ (nan, ~0.0) = nan +- (nan, ~0.0) = nan +/ (nan, ~0.0) = nan +nextAfter (nan, ~0.0) = nan +rem (nan, ~0.0) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (nan, ~inf) = nan ++ (nan, ~inf) = nan +- (nan, ~inf) = nan +/ (nan, ~inf) = nan +nextAfter (nan, ~inf) = nan +rem (nan, ~inf) = nan +* (nan, nan) = nan ++ (nan, nan) = nan +- (nan, nan) = nan +/ (nan, nan) = nan +nextAfter (nan, nan) = nan +rem (nan, nan) = nan +* (nan, inf) = nan ++ (nan, inf) = nan +- (nan, inf) = nan +/ (nan, inf) = nan +nextAfter (nan, inf) = nan +rem (nan, inf) = nan +* (inf, 0.17976931348623157E309) = inf ++ (inf, 0.17976931348623157E309) = inf +- (inf, 0.17976931348623157E309) = inf +/ (inf, 0.17976931348623157E309) = inf +nextAfter (inf, 0.17976931348623157E309) = inf +rem (inf, 0.17976931348623157E309) = nan +* (inf, 0.8988465674311579E308) = inf ++ (inf, 0.8988465674311579E308) = inf +- (inf, 0.8988465674311579E308) = inf +/ (inf, 0.8988465674311579E308) = inf +nextAfter (inf, 0.8988465674311579E308) = inf +rem (inf, 0.8988465674311579E308) = nan +* (inf, 0.123E4) = inf ++ (inf, 0.123E4) = inf +- (inf, 0.123E4) = inf +/ (inf, 0.123E4) = inf +nextAfter (inf, 0.123E4) = inf +rem (inf, 0.123E4) = nan +* (inf, 0.123E2) = inf ++ (inf, 0.123E2) = inf +- (inf, 0.123E2) = inf +/ (inf, 0.123E2) = inf +nextAfter (inf, 0.123E2) = inf +rem (inf, 0.123E2) = nan +* (inf, 0.3141592653589793E1) = inf ++ (inf, 0.3141592653589793E1) = inf +- (inf, 0.3141592653589793E1) = inf +/ (inf, 0.3141592653589793E1) = inf +nextAfter (inf, 0.3141592653589793E1) = inf +rem (inf, 0.3141592653589793E1) = nan +* (inf, 0.2718281828459045E1) = inf ++ (inf, 0.2718281828459045E1) = inf +- (inf, 0.2718281828459045E1) = inf +/ (inf, 0.2718281828459045E1) = inf +nextAfter (inf, 0.2718281828459045E1) = inf +rem (inf, 0.2718281828459045E1) = nan +* (inf, 0.123E1) = inf ++ (inf, 0.123E1) = inf +- (inf, 0.123E1) = inf +/ (inf, 0.123E1) = inf +nextAfter (inf, 0.123E1) = inf +rem (inf, 0.123E1) = nan +* (inf, 0.123) = inf ++ (inf, 0.123) = inf +- (inf, 0.123) = inf +/ (inf, 0.123) = inf +nextAfter (inf, 0.123) = inf +rem (inf, 0.123) = nan +* (inf, 0.123E~2) = inf ++ (inf, 0.123E~2) = inf +- (inf, 0.123E~2) = inf +/ (inf, 0.123E~2) = inf +nextAfter (inf, 0.123E~2) = inf +rem (inf, 0.123E~2) = nan +* (inf, 0.22250738585072014E~307) = inf ++ (inf, 0.22250738585072014E~307) = inf +- (inf, 0.22250738585072014E~307) = inf +/ (inf, 0.22250738585072014E~307) = inf +nextAfter (inf, 0.22250738585072014E~307) = inf +rem (inf, 0.22250738585072014E~307) = nan +* (inf, 0.11125369292536007E~307) = inf ++ (inf, 0.11125369292536007E~307) = inf +- (inf, 0.11125369292536007E~307) = inf +/ (inf, 0.11125369292536007E~307) = inf +nextAfter (inf, 0.11125369292536007E~307) = inf +rem (inf, 0.11125369292536007E~307) = nan +* (inf, 0.5E~323) = inf ++ (inf, 0.5E~323) = inf +- (inf, 0.5E~323) = inf +/ (inf, 0.5E~323) = inf +nextAfter (inf, 0.5E~323) = inf +rem (inf, 0.5E~323) = nan +* (inf, 0.0) = nan ++ (inf, 0.0) = inf +- (inf, 0.0) = inf +/ (inf, 0.0) = inf +nextAfter (inf, 0.0) = inf +rem (inf, 0.0) = nan +* (inf, ~0.17976931348623157E309) = ~inf ++ (inf, ~0.17976931348623157E309) = inf +- (inf, ~0.17976931348623157E309) = inf +/ (inf, ~0.17976931348623157E309) = ~inf +nextAfter (inf, ~0.17976931348623157E309) = inf +rem (inf, ~0.17976931348623157E309) = nan +* (inf, ~0.8988465674311579E308) = ~inf ++ (inf, ~0.8988465674311579E308) = inf +- (inf, ~0.8988465674311579E308) = inf +/ (inf, ~0.8988465674311579E308) = ~inf +nextAfter (inf, ~0.8988465674311579E308) = inf +rem (inf, ~0.8988465674311579E308) = nan +* (inf, ~0.123E4) = ~inf ++ (inf, ~0.123E4) = inf +- (inf, ~0.123E4) = inf +/ (inf, ~0.123E4) = ~inf +nextAfter (inf, ~0.123E4) = inf +rem (inf, ~0.123E4) = nan +* (inf, ~0.123E2) = ~inf ++ (inf, ~0.123E2) = inf +- (inf, ~0.123E2) = inf +/ (inf, ~0.123E2) = ~inf +nextAfter (inf, ~0.123E2) = inf +rem (inf, ~0.123E2) = nan +* (inf, ~0.3141592653589793E1) = ~inf ++ (inf, ~0.3141592653589793E1) = inf +- (inf, ~0.3141592653589793E1) = inf +/ (inf, ~0.3141592653589793E1) = ~inf +nextAfter (inf, ~0.3141592653589793E1) = inf +rem (inf, ~0.3141592653589793E1) = nan +* (inf, ~0.2718281828459045E1) = ~inf ++ (inf, ~0.2718281828459045E1) = inf +- (inf, ~0.2718281828459045E1) = inf +/ (inf, ~0.2718281828459045E1) = ~inf +nextAfter (inf, ~0.2718281828459045E1) = inf +rem (inf, ~0.2718281828459045E1) = nan +* (inf, ~0.123E1) = ~inf ++ (inf, ~0.123E1) = inf +- (inf, ~0.123E1) = inf +/ (inf, ~0.123E1) = ~inf +nextAfter (inf, ~0.123E1) = inf +rem (inf, ~0.123E1) = nan +* (inf, ~0.123) = ~inf ++ (inf, ~0.123) = inf +- (inf, ~0.123) = inf +/ (inf, ~0.123) = ~inf +nextAfter (inf, ~0.123) = inf +rem (inf, ~0.123) = nan +* (inf, ~0.123E~2) = ~inf ++ (inf, ~0.123E~2) = inf +- (inf, ~0.123E~2) = inf +/ (inf, ~0.123E~2) = ~inf +nextAfter (inf, ~0.123E~2) = inf +rem (inf, ~0.123E~2) = nan +* (inf, ~0.22250738585072014E~307) = ~inf ++ (inf, ~0.22250738585072014E~307) = inf +- (inf, ~0.22250738585072014E~307) = inf +/ (inf, ~0.22250738585072014E~307) = ~inf +nextAfter (inf, ~0.22250738585072014E~307) = inf +rem (inf, ~0.22250738585072014E~307) = nan +* (inf, ~0.11125369292536007E~307) = ~inf ++ (inf, ~0.11125369292536007E~307) = inf +- (inf, ~0.11125369292536007E~307) = inf +/ (inf, ~0.11125369292536007E~307) = ~inf +nextAfter (inf, ~0.11125369292536007E~307) = inf +rem (inf, ~0.11125369292536007E~307) = nan +* (inf, ~0.5E~323) = ~inf ++ (inf, ~0.5E~323) = inf +- (inf, ~0.5E~323) = inf +/ (inf, ~0.5E~323) = ~inf +nextAfter (inf, ~0.5E~323) = inf +rem (inf, ~0.5E~323) = nan +* (inf, ~0.0) = nan ++ (inf, ~0.0) = inf +- (inf, ~0.0) = inf +/ (inf, ~0.0) = ~inf +nextAfter (inf, ~0.0) = inf +rem (inf, ~0.0) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan +* (inf, ~inf) = ~inf ++ (inf, ~inf) = nan +- (inf, ~inf) = inf +/ (inf, ~inf) = nan +nextAfter (inf, ~inf) = inf +rem (inf, ~inf) = nan +* (inf, nan) = nan ++ (inf, nan) = nan +- (inf, nan) = nan +/ (inf, nan) = nan +nextAfter (inf, nan) = nan +rem (inf, nan) = nan +* (inf, inf) = inf ++ (inf, inf) = inf +- (inf, inf) = nan +/ (inf, inf) = nan +nextAfter (inf, inf) = inf +rem (inf, inf) = nan + +Testing Real.Math.{acos,asin,atan,cos,cosh,exp,ln,log10,sin,sinh,sqrt,tan,tanh,atan2,pow} +acos (0.17976931348623157E309) = nan +asin (0.17976931348623157E309) = nan +atan (0.17976931348623157E309) = 1.570796327 +cos (0.17976931348623157E309) = 1.797693135E308 +cosh (0.17976931348623157E309) = inf +exp (0.17976931348623157E309) = inf +ln (0.17976931348623157E309) = 709.7827129 +log10 (0.17976931348623157E309) = 308.2547156 +sin (0.17976931348623157E309) = 1.797693135E308 +sinh (0.17976931348623157E309) = inf +sqrt (0.17976931348623157E309) = 1.340780793E154 +tan (0.17976931348623157E309) = nan +tanh (0.17976931348623157E309) = 1 +acos (0.8988465674311579E308) = nan +asin (0.8988465674311579E308) = nan +atan (0.8988465674311579E308) = 1.570796327 +cos (0.8988465674311579E308) = 8.988465674E307 +cosh (0.8988465674311579E308) = inf +exp (0.8988465674311579E308) = inf +ln (0.8988465674311579E308) = 709.0895657 +log10 (0.8988465674311579E308) = 307.9536856 +sin (0.8988465674311579E308) = 8.988465674E307 +sinh (0.8988465674311579E308) = inf +sqrt (0.8988465674311579E308) = 9.480751908E153 +tan (0.8988465674311579E308) = nan +tanh (0.8988465674311579E308) = 1 +acos (0.123E4) = nan +asin (0.123E4) = nan +atan (0.123E4) = 1.569983319 +cos (0.123E4) = 0.06642716993 +cosh (0.123E4) = inf +exp (0.123E4) = inf +ln (0.123E4) = 7.114769448 +log10 (0.123E4) = 3.089905111 +sin (0.123E4) = ~0.9977912763 +sinh (0.123E4) = inf +sqrt (0.123E4) = 35.07135583 +tan (0.123E4) = ~15.02083074 +tanh (0.123E4) = 1 +acos (0.123E2) = nan +asin (0.123E2) = nan +atan (0.123E2) = 1.489673935 +cos (0.123E2) = 0.9647326179 +cosh (0.123E2) = 109847.9943 +exp (0.123E2) = 219695.9887 +ln (0.123E2) = 2.509599262 +log10 (0.123E2) = 1.089905111 +sin (0.123E2) = ~0.2632317914 +sinh (0.123E2) = 109847.9943 +sqrt (0.123E2) = 3.507135583 +tan (0.123E2) = ~0.272854661 +tanh (0.123E2) = 1 +acos (0.3141592653589793E1) = nan +asin (0.3141592653589793E1) = nan +atan (0.3141592653589793E1) = 1.262627256 +cos (0.3141592653589793E1) = ~1 +cosh (0.3141592653589793E1) = 11.59195328 +exp (0.3141592653589793E1) = 23.14069263 +ln (0.3141592653589793E1) = 1.144729886 +log10 (0.3141592653589793E1) = 0.4971498727 +sin (0.3141592653589793E1) = 1.224606354E~16 +sinh (0.3141592653589793E1) = 11.54873936 +sqrt (0.3141592653589793E1) = 1.772453851 +tan (0.3141592653589793E1) = ~1.224606354E~16 +tanh (0.3141592653589793E1) = 0.9962720762 +acos (0.2718281828459045E1) = nan +asin (0.2718281828459045E1) = nan +atan (0.2718281828459045E1) = 1.218282905 +cos (0.2718281828459045E1) = ~0.9117339148 +cosh (0.2718281828459045E1) = 7.610125139 +exp (0.2718281828459045E1) = 15.15426224 +ln (0.2718281828459045E1) = 1 +log10 (0.2718281828459045E1) = 0.4342944819 +sin (0.2718281828459045E1) = 0.4107812905 +sinh (0.2718281828459045E1) = 7.544137103 +sqrt (0.2718281828459045E1) = 1.648721271 +tan (0.2718281828459045E1) = ~0.4505495341 +tanh (0.2718281828459045E1) = 0.9913289158 +acos (0.123E1) = nan +asin (0.123E1) = nan +atan (0.123E1) = 0.8881737744 +cos (0.123E1) = 0.3342377271 +cosh (0.123E1) = 1.856761057 +exp (0.123E1) = 3.421229536 +ln (0.123E1) = 0.2070141694 +log10 (0.123E1) = 0.08990511144 +sin (0.123E1) = 0.9424888019 +sinh (0.123E1) = 1.564468479 +sqrt (0.123E1) = 1.109053651 +tan (0.123E1) = 2.819815734 +tanh (0.123E1) = 0.8425793257 +acos (0.123) = 1.447484052 +asin (0.123) = 0.1233122752 +atan (0.123) = 0.1223852815 +cos (0.123) = 0.9924450321 +cosh (0.123) = 1.007574042 +exp (0.123) = 1.130884421 +ln (0.123) = ~2.095570924 +log10 (0.123) = ~0.9100948886 +sin (0.123) = 0.12269009 +sinh (0.123) = 0.1233103792 +sqrt (0.123) = 0.3507135583 +tan (0.123) = 0.1236240659 +tanh (0.123) = 0.1223834419 +acos (0.123E~2) = 1.569566326 +asin (0.123E~2) = 0.00123000031 +atan (0.123E~2) = 0.00122999938 +cos (0.123E~2) = 0.9999992436 +cosh (0.123E~2) = 1.000000756 +exp (0.123E~2) = 1.001230757 +ln (0.123E~2) = ~6.70074111 +log10 (0.123E~2) = ~2.910094889 +sin (0.123E~2) = 0.00122999969 +sinh (0.123E~2) = 0.00123000031 +sqrt (0.123E~2) = 0.03507135583 +tan (0.123E~2) = 0.00123000062 +tanh (0.123E~2) = 0.00122999938 +acos (0.22250738585072014E~307) = 1.570796327 +asin (0.22250738585072014E~307) = 2.225073859E~308 +atan (0.22250738585072014E~307) = 2.225073859E~308 +cos (0.22250738585072014E~307) = 1 +cosh (0.22250738585072014E~307) = 1 +exp (0.22250738585072014E~307) = 1 +ln (0.22250738585072014E~307) = ~708.3964185 +log10 (0.22250738585072014E~307) = ~307.6526556 +sin (0.22250738585072014E~307) = 2.225073859E~308 +sinh (0.22250738585072014E~307) = 2.225073859E~308 +sqrt (0.22250738585072014E~307) = 1.491668146E~154 +tan (0.22250738585072014E~307) = 2.225073859E~308 +tanh (0.22250738585072014E~307) = 2.225073859E~308 +acos (0.11125369292536007E~307) = 1.570796327 +asin (0.11125369292536007E~307) = 1.112536929E~308 +atan (0.11125369292536007E~307) = 1.112536929E~308 +cos (0.11125369292536007E~307) = 1 +cosh (0.11125369292536007E~307) = 1 +exp (0.11125369292536007E~307) = 1 +ln (0.11125369292536007E~307) = ~709.0895657 +log10 (0.11125369292536007E~307) = ~307.9536856 +sin (0.11125369292536007E~307) = 1.112536929E~308 +sinh (0.11125369292536007E~307) = 1.112536929E~308 +sqrt (0.11125369292536007E~307) = 1.054768661E~154 +tan (0.11125369292536007E~307) = 1.112536929E~308 +tanh (0.11125369292536007E~307) = 1.112536929E~308 +acos (0.5E~323) = 1.570796327 +asin (0.5E~323) = 4.940656458E~324 +atan (0.5E~323) = 4.940656458E~324 +cos (0.5E~323) = 1 +cosh (0.5E~323) = 1 +exp (0.5E~323) = 1 +ln (0.5E~323) = ~744.4400719 +log10 (0.5E~323) = ~323.3062153 +sin (0.5E~323) = 4.940656458E~324 +sinh (0.5E~323) = 4.940656458E~324 +sqrt (0.5E~323) = 2.222758749E~162 +tan (0.5E~323) = 4.940656458E~324 +tanh (0.5E~323) = 4.940656458E~324 +acos (0.0) = 1.570796327 +asin (0.0) = 0 +atan (0.0) = 0 +cos (0.0) = 1 +cosh (0.0) = 1 +exp (0.0) = 1 +ln (0.0) = ~inf +log10 (0.0) = ~inf +sin (0.0) = 0 +sinh (0.0) = 0 +sqrt (0.0) = 0 +tan (0.0) = 0 +tanh (0.0) = 0 +acos (~0.17976931348623157E309) = nan +asin (~0.17976931348623157E309) = nan +atan (~0.17976931348623157E309) = ~1.570796327 +cos (~0.17976931348623157E309) = ~1.797693135E308 +cosh (~0.17976931348623157E309) = inf +exp (~0.17976931348623157E309) = 0 +ln (~0.17976931348623157E309) = nan +log10 (~0.17976931348623157E309) = nan +sin (~0.17976931348623157E309) = ~1.797693135E308 +sinh (~0.17976931348623157E309) = ~inf +sqrt (~0.17976931348623157E309) = nan +tan (~0.17976931348623157E309) = nan +tanh (~0.17976931348623157E309) = ~1 +acos (~0.8988465674311579E308) = nan +asin (~0.8988465674311579E308) = nan +atan (~0.8988465674311579E308) = ~1.570796327 +cos (~0.8988465674311579E308) = ~8.988465674E307 +cosh (~0.8988465674311579E308) = inf +exp (~0.8988465674311579E308) = 0 +ln (~0.8988465674311579E308) = nan +log10 (~0.8988465674311579E308) = nan +sin (~0.8988465674311579E308) = ~8.988465674E307 +sinh (~0.8988465674311579E308) = ~inf +sqrt (~0.8988465674311579E308) = nan +tan (~0.8988465674311579E308) = nan +tanh (~0.8988465674311579E308) = ~1 +acos (~0.123E4) = nan +asin (~0.123E4) = nan +atan (~0.123E4) = ~1.569983319 +cos (~0.123E4) = 0.06642716993 +cosh (~0.123E4) = inf +exp (~0.123E4) = 0 +ln (~0.123E4) = nan +log10 (~0.123E4) = nan +sin (~0.123E4) = 0.9977912763 +sinh (~0.123E4) = ~inf +sqrt (~0.123E4) = nan +tan (~0.123E4) = 15.02083074 +tanh (~0.123E4) = ~1 +acos (~0.123E2) = nan +asin (~0.123E2) = nan +atan (~0.123E2) = ~1.489673935 +cos (~0.123E2) = 0.9647326179 +cosh (~0.123E2) = 109847.9943 +exp (~0.123E2) = 4.551744463E~6 +ln (~0.123E2) = nan +log10 (~0.123E2) = nan +sin (~0.123E2) = 0.2632317914 +sinh (~0.123E2) = ~109847.9943 +sqrt (~0.123E2) = nan +tan (~0.123E2) = 0.272854661 +tanh (~0.123E2) = ~1 +acos (~0.3141592653589793E1) = nan +asin (~0.3141592653589793E1) = nan +atan (~0.3141592653589793E1) = ~1.262627256 +cos (~0.3141592653589793E1) = ~1 +cosh (~0.3141592653589793E1) = 11.59195328 +exp (~0.3141592653589793E1) = 0.04321391826 +ln (~0.3141592653589793E1) = nan +log10 (~0.3141592653589793E1) = nan +sin (~0.3141592653589793E1) = ~1.224606354E~16 +sinh (~0.3141592653589793E1) = ~11.54873936 +sqrt (~0.3141592653589793E1) = nan +tan (~0.3141592653589793E1) = 1.224606354E~16 +tanh (~0.3141592653589793E1) = ~0.9962720762 +acos (~0.2718281828459045E1) = nan +asin (~0.2718281828459045E1) = nan +atan (~0.2718281828459045E1) = ~1.218282905 +cos (~0.2718281828459045E1) = ~0.9117339148 +cosh (~0.2718281828459045E1) = 7.610125139 +exp (~0.2718281828459045E1) = 0.06598803585 +ln (~0.2718281828459045E1) = nan +log10 (~0.2718281828459045E1) = nan +sin (~0.2718281828459045E1) = ~0.4107812905 +sinh (~0.2718281828459045E1) = ~7.544137103 +sqrt (~0.2718281828459045E1) = nan +tan (~0.2718281828459045E1) = 0.4505495341 +tanh (~0.2718281828459045E1) = ~0.9913289158 +acos (~0.123E1) = nan +asin (~0.123E1) = nan +atan (~0.123E1) = ~0.8881737744 +cos (~0.123E1) = 0.3342377271 +cosh (~0.123E1) = 1.856761057 +exp (~0.123E1) = 0.2922925777 +ln (~0.123E1) = nan +log10 (~0.123E1) = nan +sin (~0.123E1) = ~0.9424888019 +sinh (~0.123E1) = ~1.564468479 +sqrt (~0.123E1) = nan +tan (~0.123E1) = ~2.819815734 +tanh (~0.123E1) = ~0.8425793257 +acos (~0.123) = 1.694108602 +asin (~0.123) = ~0.1233122752 +atan (~0.123) = ~0.1223852815 +cos (~0.123) = 0.9924450321 +cosh (~0.123) = 1.007574042 +exp (~0.123) = 0.8842636626 +ln (~0.123) = nan +log10 (~0.123) = nan +sin (~0.123) = ~0.12269009 +sinh (~0.123) = ~0.1233103792 +sqrt (~0.123) = nan +tan (~0.123) = ~0.1236240659 +tanh (~0.123) = ~0.1223834419 +acos (~0.123E~2) = 1.572026327 +asin (~0.123E~2) = ~0.00123000031 +atan (~0.123E~2) = ~0.00122999938 +cos (~0.123E~2) = 0.9999992436 +cosh (~0.123E~2) = 1.000000756 +exp (~0.123E~2) = 0.9987707561 +ln (~0.123E~2) = nan +log10 (~0.123E~2) = nan +sin (~0.123E~2) = ~0.00122999969 +sinh (~0.123E~2) = ~0.00123000031 +sqrt (~0.123E~2) = nan +tan (~0.123E~2) = ~0.00123000062 +tanh (~0.123E~2) = ~0.00122999938 +acos (~0.22250738585072014E~307) = 1.570796327 +asin (~0.22250738585072014E~307) = ~2.225073859E~308 +atan (~0.22250738585072014E~307) = ~2.225073859E~308 +cos (~0.22250738585072014E~307) = 1 +cosh (~0.22250738585072014E~307) = 1 +exp (~0.22250738585072014E~307) = 1 +ln (~0.22250738585072014E~307) = nan +log10 (~0.22250738585072014E~307) = nan +sin (~0.22250738585072014E~307) = ~2.225073859E~308 +sinh (~0.22250738585072014E~307) = ~2.225073859E~308 +sqrt (~0.22250738585072014E~307) = nan +tan (~0.22250738585072014E~307) = ~2.225073859E~308 +tanh (~0.22250738585072014E~307) = ~2.225073859E~308 +acos (~0.11125369292536007E~307) = 1.570796327 +asin (~0.11125369292536007E~307) = ~1.112536929E~308 +atan (~0.11125369292536007E~307) = ~1.112536929E~308 +cos (~0.11125369292536007E~307) = 1 +cosh (~0.11125369292536007E~307) = 1 +exp (~0.11125369292536007E~307) = 1 +ln (~0.11125369292536007E~307) = nan +log10 (~0.11125369292536007E~307) = nan +sin (~0.11125369292536007E~307) = ~1.112536929E~308 +sinh (~0.11125369292536007E~307) = ~1.112536929E~308 +sqrt (~0.11125369292536007E~307) = nan +tan (~0.11125369292536007E~307) = ~1.112536929E~308 +tanh (~0.11125369292536007E~307) = ~1.112536929E~308 +acos (~0.5E~323) = 1.570796327 +asin (~0.5E~323) = ~4.940656458E~324 +atan (~0.5E~323) = ~4.940656458E~324 +cos (~0.5E~323) = 1 +cosh (~0.5E~323) = 1 +exp (~0.5E~323) = 1 +ln (~0.5E~323) = nan +log10 (~0.5E~323) = nan +sin (~0.5E~323) = ~4.940656458E~324 +sinh (~0.5E~323) = ~4.940656458E~324 +sqrt (~0.5E~323) = nan +tan (~0.5E~323) = ~4.940656458E~324 +tanh (~0.5E~323) = ~4.940656458E~324 +acos (~0.0) = 1.570796327 +asin (~0.0) = 0 +atan (~0.0) = 0 +cos (~0.0) = 1 +cosh (~0.0) = 1 +exp (~0.0) = 1 +ln (~0.0) = ~inf +log10 (~0.0) = ~inf +sin (~0.0) = 0 +sinh (~0.0) = 0 +sqrt (~0.0) = 0 +tan (~0.0) = 0 +tanh (~0.0) = 0 +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796327 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +acos (~inf) = nan +asin (~inf) = nan +atan (~inf) = ~1.570796327 +cos (~inf) = nan +cosh (~inf) = ~inf +exp (~inf) = 0 +ln (~inf) = nan +log10 (~inf) = nan +sin (~inf) = nan +sinh (~inf) = ~inf +sqrt (~inf) = nan +tan (~inf) = nan +tanh (~inf) = ~1 +acos (nan) = nan +asin (nan) = nan +atan (nan) = nan +cos (nan) = nan +cosh (nan) = nan +exp (nan) = nan +ln (nan) = nan +log10 (nan) = nan +sin (nan) = nan +sinh (nan) = nan +sqrt (nan) = nan +tan (nan) = nan +tanh (nan) = nan +acos (inf) = nan +asin (inf) = nan +atan (inf) = 1.570796327 +cos (inf) = nan +cosh (inf) = inf +exp (inf) = inf +ln (inf) = inf +log10 (inf) = inf +sin (inf) = nan +sinh (inf) = inf +sqrt (inf) = inf +tan (inf) = nan +tanh (inf) = 1 +atan2 (0.17976931348623157E309, 0.17976931348623157E309) = 0.7853981634 +pow (0.17976931348623157E309, 0.17976931348623157E309) = inf +atan2 (0.17976931348623157E309, 0.8988465674311579E308) = 1.107148718 +pow (0.17976931348623157E309, 0.8988465674311579E308) = inf +atan2 (0.17976931348623157E309, 0.123E4) = 1.570796327 +pow (0.17976931348623157E309, 0.123E4) = inf +atan2 (0.17976931348623157E309, 0.123E2) = 1.570796327 +pow (0.17976931348623157E309, 0.123E2) = inf +atan2 (0.17976931348623157E309, 0.3141592653589793E1) = 1.570796327 +pow (0.17976931348623157E309, 0.3141592653589793E1) = inf +atan2 (0.17976931348623157E309, 0.2718281828459045E1) = 1.570796327 +pow (0.17976931348623157E309, 0.2718281828459045E1) = inf +atan2 (0.17976931348623157E309, 0.123E1) = 1.570796327 +pow (0.17976931348623157E309, 0.123E1) = inf +atan2 (0.17976931348623157E309, 0.123) = 1.570796327 +pow (0.17976931348623157E309, 0.123) = 8.228676973E37 +atan2 (0.17976931348623157E309, 0.123E~2) = 1.570796327 +pow (0.17976931348623157E309, 0.123E~2) = 2.394160714 +atan2 (0.17976931348623157E309, 0.22250738585072014E~307) = 1.570796327 +pow (0.17976931348623157E309, 0.22250738585072014E~307) = 1 +atan2 (0.17976931348623157E309, 0.11125369292536007E~307) = 1.570796327 +pow (0.17976931348623157E309, 0.11125369292536007E~307) = 1 +atan2 (0.17976931348623157E309, 0.5E~323) = 1.570796327 +pow (0.17976931348623157E309, 0.5E~323) = 1 +atan2 (0.17976931348623157E309, 0.0) = 1.570796327 +pow (0.17976931348623157E309, 0.0) = 1 +atan2 (0.17976931348623157E309, ~0.17976931348623157E309) = 2.35619449 +pow (0.17976931348623157E309, ~0.17976931348623157E309) = 0 +atan2 (0.17976931348623157E309, ~0.8988465674311579E308) = 2.034443936 +pow (0.17976931348623157E309, ~0.8988465674311579E308) = 0 +atan2 (0.17976931348623157E309, ~0.123E4) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E4) = 0 +atan2 (0.17976931348623157E309, ~0.123E2) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E2) = 0 +atan2 (0.17976931348623157E309, ~0.3141592653589793E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.3141592653589793E1) = 0 +atan2 (0.17976931348623157E309, ~0.2718281828459045E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.2718281828459045E1) = 0 +atan2 (0.17976931348623157E309, ~0.123E1) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E1) = 0 +atan2 (0.17976931348623157E309, ~0.123) = 1.570796327 +pow (0.17976931348623157E309, ~0.123) = 1.21526219E~38 +atan2 (0.17976931348623157E309, ~0.123E~2) = 1.570796327 +pow (0.17976931348623157E309, ~0.123E~2) = 0.4176829041 +atan2 (0.17976931348623157E309, ~0.22250738585072014E~307) = 1.570796327 +pow (0.17976931348623157E309, ~0.22250738585072014E~307) = 1 +atan2 (0.17976931348623157E309, ~0.11125369292536007E~307) = 1.570796327 +pow (0.17976931348623157E309, ~0.11125369292536007E~307) = 1 +atan2 (0.17976931348623157E309, ~0.5E~323) = 1.570796327 +pow (0.17976931348623157E309, ~0.5E~323) = 1 +atan2 (0.17976931348623157E309, ~0.0) = 1.570796327 +pow (0.17976931348623157E309, ~0.0) = 1 +atan2 (0.17976931348623157E309, inf) = 0 +pow (0.17976931348623157E309, inf) = inf +atan2 (0.17976931348623157E309, ~inf) = 3.141592654 +pow (0.17976931348623157E309, ~inf) = 0 +atan2 (0.17976931348623157E309, nan) = nan +pow (0.17976931348623157E309, nan) = nan +atan2 (0.17976931348623157E309, inf) = 0 +pow (0.17976931348623157E309, inf) = inf +atan2 (0.8988465674311579E308, 0.17976931348623157E309) = 0.463647609 +pow (0.8988465674311579E308, 0.17976931348623157E309) = inf +atan2 (0.8988465674311579E308, 0.8988465674311579E308) = 0.7853981634 +pow (0.8988465674311579E308, 0.8988465674311579E308) = inf +atan2 (0.8988465674311579E308, 0.123E4) = 1.570796327 +pow (0.8988465674311579E308, 0.123E4) = inf +atan2 (0.8988465674311579E308, 0.123E2) = 1.570796327 +pow (0.8988465674311579E308, 0.123E2) = inf +atan2 (0.8988465674311579E308, 0.3141592653589793E1) = 1.570796327 +pow (0.8988465674311579E308, 0.3141592653589793E1) = inf +atan2 (0.8988465674311579E308, 0.2718281828459045E1) = 1.570796327 +pow (0.8988465674311579E308, 0.2718281828459045E1) = inf +atan2 (0.8988465674311579E308, 0.123E1) = 1.570796327 +pow (0.8988465674311579E308, 0.123E1) = inf +atan2 (0.8988465674311579E308, 0.123) = 1.570796327 +pow (0.8988465674311579E308, 0.123) = 7.556197911E37 +atan2 (0.8988465674311579E308, 0.123E~2) = 1.570796327 +pow (0.8988465674311579E308, 0.123E~2) = 2.392120392 +atan2 (0.8988465674311579E308, 0.22250738585072014E~307) = 1.570796327 +pow (0.8988465674311579E308, 0.22250738585072014E~307) = 1 +atan2 (0.8988465674311579E308, 0.11125369292536007E~307) = 1.570796327 +pow (0.8988465674311579E308, 0.11125369292536007E~307) = 1 +atan2 (0.8988465674311579E308, 0.5E~323) = 1.570796327 +pow (0.8988465674311579E308, 0.5E~323) = 1 +atan2 (0.8988465674311579E308, 0.0) = 1.570796327 +pow (0.8988465674311579E308, 0.0) = 1 +atan2 (0.8988465674311579E308, ~0.17976931348623157E309) = 2.677945045 +pow (0.8988465674311579E308, ~0.17976931348623157E309) = 0 +atan2 (0.8988465674311579E308, ~0.8988465674311579E308) = 2.35619449 +pow (0.8988465674311579E308, ~0.8988465674311579E308) = 0 +atan2 (0.8988465674311579E308, ~0.123E4) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E4) = 0 +atan2 (0.8988465674311579E308, ~0.123E2) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E2) = 0 +atan2 (0.8988465674311579E308, ~0.3141592653589793E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.3141592653589793E1) = 0 +atan2 (0.8988465674311579E308, ~0.2718281828459045E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.2718281828459045E1) = 0 +atan2 (0.8988465674311579E308, ~0.123E1) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E1) = 0 +atan2 (0.8988465674311579E308, ~0.123) = 1.570796327 +pow (0.8988465674311579E308, ~0.123) = 1.323416898E~38 +atan2 (0.8988465674311579E308, ~0.123E~2) = 1.570796327 +pow (0.8988465674311579E308, ~0.123E~2) = 0.4180391603 +atan2 (0.8988465674311579E308, ~0.22250738585072014E~307) = 1.570796327 +pow (0.8988465674311579E308, ~0.22250738585072014E~307) = 1 +atan2 (0.8988465674311579E308, ~0.11125369292536007E~307) = 1.570796327 +pow (0.8988465674311579E308, ~0.11125369292536007E~307) = 1 +atan2 (0.8988465674311579E308, ~0.5E~323) = 1.570796327 +pow (0.8988465674311579E308, ~0.5E~323) = 1 +atan2 (0.8988465674311579E308, ~0.0) = 1.570796327 +pow (0.8988465674311579E308, ~0.0) = 1 +atan2 (0.8988465674311579E308, inf) = 0 +pow (0.8988465674311579E308, inf) = inf +atan2 (0.8988465674311579E308, ~inf) = 3.141592654 +pow (0.8988465674311579E308, ~inf) = 0 +atan2 (0.8988465674311579E308, nan) = nan +pow (0.8988465674311579E308, nan) = nan +atan2 (0.8988465674311579E308, inf) = 0 +pow (0.8988465674311579E308, inf) = inf +atan2 (0.123E4, 0.17976931348623157E309) = 6.842102115E~306 +pow (0.123E4, 0.17976931348623157E309) = inf +atan2 (0.123E4, 0.8988465674311579E308) = 1.368420423E~305 +pow (0.123E4, 0.8988465674311579E308) = inf +atan2 (0.123E4, 0.123E4) = 0.7853981634 +pow (0.123E4, 0.123E4) = inf +atan2 (0.123E4, 0.123E2) = 1.56079666 +pow (0.123E4, 0.123E2) = 1.013521278E38 +atan2 (0.123E4, 0.3141592653589793E1) = 1.568242192 +pow (0.123E4, 0.3141592653589793E1) = 5095927004 +atan2 (0.123E4, 0.2718281828459045E1) = 1.568586345 +pow (0.123E4, 0.2718281828459045E1) = 250745366.3 +atan2 (0.123E4, 0.123E1) = 1.569796327 +pow (0.123E4, 0.123E1) = 6318.053325 +atan2 (0.123E4, 0.123) = 1.570696327 +pow (0.123E4, 0.123) = 2.39915512 +atan2 (0.123E4, 0.123E~2) = 1.570795327 +pow (0.123E4, 0.123E~2) = 1.00878957 +atan2 (0.123E4, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E4, 0.22250738585072014E~307) = 1 +atan2 (0.123E4, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E4, 0.11125369292536007E~307) = 1 +atan2 (0.123E4, 0.5E~323) = 1.570796327 +pow (0.123E4, 0.5E~323) = 1 +atan2 (0.123E4, 0.0) = 1.570796327 +pow (0.123E4, 0.0) = 1 +atan2 (0.123E4, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E4, ~0.17976931348623157E309) = 0 +atan2 (0.123E4, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E4, ~0.8988465674311579E308) = 0 +atan2 (0.123E4, ~0.123E4) = 2.35619449 +pow (0.123E4, ~0.123E4) = 0 +atan2 (0.123E4, ~0.123E2) = 1.580795993 +pow (0.123E4, ~0.123E2) = 9.86659108E~39 +atan2 (0.123E4, ~0.3141592653589793E1) = 1.573350462 +pow (0.123E4, ~0.3141592653589793E1) = 1.9623515E~10 +atan2 (0.123E4, ~0.2718281828459045E1) = 1.573006308 +pow (0.123E4, ~0.2718281828459045E1) = 3.98810959E~9 +atan2 (0.123E4, ~0.123E1) = 1.571796326 +pow (0.123E4, ~0.123E1) = 1.582766002E~4 +atan2 (0.123E4, ~0.123) = 1.570896327 +pow (0.123E4, ~0.123) = 0.4168133988 +atan2 (0.123E4, ~0.123E~2) = 1.570797327 +pow (0.123E4, ~0.123E~2) = 0.9912870136 +atan2 (0.123E4, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E4, ~0.22250738585072014E~307) = 1 +atan2 (0.123E4, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E4, ~0.11125369292536007E~307) = 1 +atan2 (0.123E4, ~0.5E~323) = 1.570796327 +pow (0.123E4, ~0.5E~323) = 1 +atan2 (0.123E4, ~0.0) = 1.570796327 +pow (0.123E4, ~0.0) = 1 +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E4, ~inf) = 3.141592654 +pow (0.123E4, ~inf) = 0 +atan2 (0.123E4, nan) = nan +pow (0.123E4, nan) = nan +atan2 (0.123E4, inf) = 0 +pow (0.123E4, inf) = inf +atan2 (0.123E2, 0.17976931348623157E309) = 6.842102115E~308 +pow (0.123E2, 0.17976931348623157E309) = inf +atan2 (0.123E2, 0.8988465674311579E308) = 1.368420423E~307 +pow (0.123E2, 0.8988465674311579E308) = inf +atan2 (0.123E2, 0.123E4) = 0.009999666687 +pow (0.123E2, 0.123E4) = inf +atan2 (0.123E2, 0.123E2) = 0.7853981634 +pow (0.123E2, 0.123E2) = 2.545850346E13 +atan2 (0.123E2, 0.3141592653589793E1) = 1.320728626 +pow (0.123E2, 0.3141592653589793E1) = 2654.83718 +atan2 (0.123E2, 0.2718281828459045E1) = 1.353293796 +pow (0.123E2, 0.2718281828459045E1) = 917.6334984 +atan2 (0.123E2, 0.123E1) = 1.471127674 +pow (0.123E2, 0.123E1) = 21.90701911 +atan2 (0.123E2, 0.123) = 1.56079666 +pow (0.123E2, 0.123) = 1.361627546 +atan2 (0.123E2, 0.123E~2) = 1.570696327 +pow (0.123E2, 0.123E~2) = 1.003091576 +atan2 (0.123E2, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E2, 0.22250738585072014E~307) = 1 +atan2 (0.123E2, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E2, 0.11125369292536007E~307) = 1 +atan2 (0.123E2, 0.5E~323) = 1.570796327 +pow (0.123E2, 0.5E~323) = 1 +atan2 (0.123E2, 0.0) = 1.570796327 +pow (0.123E2, 0.0) = 1 +atan2 (0.123E2, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E2, ~0.17976931348623157E309) = 0 +atan2 (0.123E2, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E2, ~0.8988465674311579E308) = 0 +atan2 (0.123E2, ~0.123E4) = 3.131592987 +pow (0.123E2, ~0.123E4) = 0 +atan2 (0.123E2, ~0.123E2) = 2.35619449 +pow (0.123E2, ~0.123E2) = 3.927960658E~14 +atan2 (0.123E2, ~0.3141592653589793E1) = 1.820864027 +pow (0.123E2, ~0.3141592653589793E1) = 3.766709339E~4 +atan2 (0.123E2, ~0.2718281828459045E1) = 1.788298857 +pow (0.123E2, ~0.2718281828459045E1) = 0.001089759694 +atan2 (0.123E2, ~0.123E1) = 1.670464979 +pow (0.123E2, ~0.123E1) = 0.04564747011 +atan2 (0.123E2, ~0.123) = 1.580795993 +pow (0.123E2, ~0.123) = 0.7344152246 +atan2 (0.123E2, ~0.123E~2) = 1.570896327 +pow (0.123E2, ~0.123E~2) = 0.9969179522 +atan2 (0.123E2, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E2, ~0.22250738585072014E~307) = 1 +atan2 (0.123E2, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E2, ~0.11125369292536007E~307) = 1 +atan2 (0.123E2, ~0.5E~323) = 1.570796327 +pow (0.123E2, ~0.5E~323) = 1 +atan2 (0.123E2, ~0.0) = 1.570796327 +pow (0.123E2, ~0.0) = 1 +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.123E2, ~inf) = 3.141592654 +pow (0.123E2, ~inf) = 0 +atan2 (0.123E2, nan) = nan +pow (0.123E2, nan) = nan +atan2 (0.123E2, inf) = 0 +pow (0.123E2, inf) = inf +atan2 (0.3141592653589793E1, 0.17976931348623157E309) = 1.747568922E~308 +pow (0.3141592653589793E1, 0.17976931348623157E309) = inf +atan2 (0.3141592653589793E1, 0.8988465674311579E308) = 3.495137844E~308 +pow (0.3141592653589793E1, 0.8988465674311579E308) = inf +atan2 (0.3141592653589793E1, 0.123E4) = 0.002554134815 +pow (0.3141592653589793E1, 0.123E4) = inf +atan2 (0.3141592653589793E1, 0.123E2) = 0.2500677004 +pow (0.3141592653589793E1, 0.123E2) = 1302997.055 +atan2 (0.3141592653589793E1, 0.3141592653589793E1) = 0.7853981634 +pow (0.3141592653589793E1, 0.3141592653589793E1) = 36.46215961 +atan2 (0.3141592653589793E1, 0.2718281828459045E1) = 0.8575117864 +pow (0.3141592653589793E1, 0.2718281828459045E1) = 22.45915772 +atan2 (0.3141592653589793E1, 0.123E1) = 1.197620596 +pow (0.3141592653589793E1, 0.123E1) = 4.087844278 +atan2 (0.3141592653589793E1, 0.123) = 1.531664198 +pow (0.3141592653589793E1, 0.123) = 1.151196431 +atan2 (0.3141592653589793E1, 0.123E~2) = 1.570404806 +pow (0.3141592653589793E1, 0.123E~2) = 1.001409009 +atan2 (0.3141592653589793E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.3141592653589793E1, 0.22250738585072014E~307) = 1 +atan2 (0.3141592653589793E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.3141592653589793E1, 0.11125369292536007E~307) = 1 +atan2 (0.3141592653589793E1, 0.5E~323) = 1.570796327 +pow (0.3141592653589793E1, 0.5E~323) = 1 +atan2 (0.3141592653589793E1, 0.0) = 1.570796327 +pow (0.3141592653589793E1, 0.0) = 1 +atan2 (0.3141592653589793E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.3141592653589793E1, ~0.17976931348623157E309) = 0 +atan2 (0.3141592653589793E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.3141592653589793E1, ~0.8988465674311579E308) = 0 +atan2 (0.3141592653589793E1, ~0.123E4) = 3.139038519 +pow (0.3141592653589793E1, ~0.123E4) = 0 +atan2 (0.3141592653589793E1, ~0.123E2) = 2.891524953 +pow (0.3141592653589793E1, ~0.123E2) = 7.674614429E~7 +atan2 (0.3141592653589793E1, ~0.3141592653589793E1) = 2.35619449 +pow (0.3141592653589793E1, ~0.3141592653589793E1) = 0.02742569312 +atan2 (0.3141592653589793E1, ~0.2718281828459045E1) = 2.284080867 +pow (0.3141592653589793E1, ~0.2718281828459045E1) = 0.04452526727 +atan2 (0.3141592653589793E1, ~0.123E1) = 1.943972057 +pow (0.3141592653589793E1, ~0.123E1) = 0.2446277138 +atan2 (0.3141592653589793E1, ~0.123) = 1.609928456 +pow (0.3141592653589793E1, ~0.123) = 0.8686614842 +atan2 (0.3141592653589793E1, ~0.123E~2) = 1.571187848 +pow (0.3141592653589793E1, ~0.123E~2) = 0.998592973 +atan2 (0.3141592653589793E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.3141592653589793E1, ~0.22250738585072014E~307) = 1 +atan2 (0.3141592653589793E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.3141592653589793E1, ~0.11125369292536007E~307) = 1 +atan2 (0.3141592653589793E1, ~0.5E~323) = 1.570796327 +pow (0.3141592653589793E1, ~0.5E~323) = 1 +atan2 (0.3141592653589793E1, ~0.0) = 1.570796327 +pow (0.3141592653589793E1, ~0.0) = 1 +atan2 (0.3141592653589793E1, inf) = 0 +pow (0.3141592653589793E1, inf) = inf +atan2 (0.3141592653589793E1, ~inf) = 3.141592654 +pow (0.3141592653589793E1, ~inf) = 0 +atan2 (0.3141592653589793E1, nan) = nan +pow (0.3141592653589793E1, nan) = nan +atan2 (0.3141592653589793E1, inf) = 0 +pow (0.3141592653589793E1, inf) = inf +atan2 (0.2718281828459045E1, 0.17976931348623157E309) = 1.512094459E~308 +pow (0.2718281828459045E1, 0.17976931348623157E309) = inf +atan2 (0.2718281828459045E1, 0.8988465674311579E308) = 3.024188918E~308 +pow (0.2718281828459045E1, 0.8988465674311579E308) = inf +atan2 (0.2718281828459045E1, 0.123E4) = 0.002209981629 +pow (0.2718281828459045E1, 0.123E4) = inf +atan2 (0.2718281828459045E1, 0.123E2) = 0.2175025304 +pow (0.2718281828459045E1, 0.123E2) = 219695.9887 +atan2 (0.2718281828459045E1, 0.3141592653589793E1) = 0.7132845404 +pow (0.2718281828459045E1, 0.3141592653589793E1) = 23.14069263 +atan2 (0.2718281828459045E1, 0.2718281828459045E1) = 0.7853981634 +pow (0.2718281828459045E1, 0.2718281828459045E1) = 15.15426224 +atan2 (0.2718281828459045E1, 0.123E1) = 1.145872224 +pow (0.2718281828459045E1, 0.123E1) = 3.421229536 +atan2 (0.2718281828459045E1, 0.123) = 1.525578 +pow (0.2718281828459045E1, 0.123) = 1.130884421 +atan2 (0.2718281828459045E1, 0.123E~2) = 1.570343835 +pow (0.2718281828459045E1, 0.123E~2) = 1.001230757 +atan2 (0.2718281828459045E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.2718281828459045E1, 0.22250738585072014E~307) = 1 +atan2 (0.2718281828459045E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.2718281828459045E1, 0.11125369292536007E~307) = 1 +atan2 (0.2718281828459045E1, 0.5E~323) = 1.570796327 +pow (0.2718281828459045E1, 0.5E~323) = 1 +atan2 (0.2718281828459045E1, 0.0) = 1.570796327 +pow (0.2718281828459045E1, 0.0) = 1 +atan2 (0.2718281828459045E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.2718281828459045E1, ~0.17976931348623157E309) = 0 +atan2 (0.2718281828459045E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.2718281828459045E1, ~0.8988465674311579E308) = 0 +atan2 (0.2718281828459045E1, ~0.123E4) = 3.139382672 +pow (0.2718281828459045E1, ~0.123E4) = 0 +atan2 (0.2718281828459045E1, ~0.123E2) = 2.924090123 +pow (0.2718281828459045E1, ~0.123E2) = 4.551744463E~6 +atan2 (0.2718281828459045E1, ~0.3141592653589793E1) = 2.428308113 +pow (0.2718281828459045E1, ~0.3141592653589793E1) = 0.04321391826 +atan2 (0.2718281828459045E1, ~0.2718281828459045E1) = 2.35619449 +pow (0.2718281828459045E1, ~0.2718281828459045E1) = 0.06598803585 +atan2 (0.2718281828459045E1, ~0.123E1) = 1.99572043 +pow (0.2718281828459045E1, ~0.123E1) = 0.2922925777 +atan2 (0.2718281828459045E1, ~0.123) = 1.616014654 +pow (0.2718281828459045E1, ~0.123) = 0.8842636626 +atan2 (0.2718281828459045E1, ~0.123E~2) = 1.571248818 +pow (0.2718281828459045E1, ~0.123E~2) = 0.9987707561 +atan2 (0.2718281828459045E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.2718281828459045E1, ~0.22250738585072014E~307) = 1 +atan2 (0.2718281828459045E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.2718281828459045E1, ~0.11125369292536007E~307) = 1 +atan2 (0.2718281828459045E1, ~0.5E~323) = 1.570796327 +pow (0.2718281828459045E1, ~0.5E~323) = 1 +atan2 (0.2718281828459045E1, ~0.0) = 1.570796327 +pow (0.2718281828459045E1, ~0.0) = 1 +atan2 (0.2718281828459045E1, inf) = 0 +pow (0.2718281828459045E1, inf) = inf +atan2 (0.2718281828459045E1, ~inf) = 3.141592654 +pow (0.2718281828459045E1, ~inf) = 0 +atan2 (0.2718281828459045E1, nan) = nan +pow (0.2718281828459045E1, nan) = nan +atan2 (0.2718281828459045E1, inf) = 0 +pow (0.2718281828459045E1, inf) = inf +atan2 (0.123E1, 0.17976931348623157E309) = 6.842102115E~309 +pow (0.123E1, 0.17976931348623157E309) = inf +atan2 (0.123E1, 0.8988465674311579E308) = 1.368420423E~308 +pow (0.123E1, 0.8988465674311579E308) = inf +atan2 (0.123E1, 0.123E4) = 9.999996667E~4 +pow (0.123E1, 0.123E4) = 3.830778757E110 +atan2 (0.123E1, 0.123E2) = 0.09966865249 +pow (0.123E1, 0.123E2) = 12.75947692 +atan2 (0.123E1, 0.3141592653589793E1) = 0.3731757303 +pow (0.123E1, 0.3141592653589793E1) = 1.916219422 +atan2 (0.123E1, 0.2718281828459045E1) = 0.4249241031 +pow (0.123E1, 0.2718281828459045E1) = 1.755445823 +atan2 (0.123E1, 0.123E1) = 0.7853981634 +pow (0.123E1, 0.123E1) = 1.289980921 +atan2 (0.123E1, 0.123) = 1.471127674 +pow (0.123E1, 0.123) = 1.025789688 +atan2 (0.123E1, 0.123E~2) = 1.569796327 +pow (0.123E1, 0.123E~2) = 1.00025466 +atan2 (0.123E1, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E1, 0.22250738585072014E~307) = 1 +atan2 (0.123E1, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E1, 0.11125369292536007E~307) = 1 +atan2 (0.123E1, 0.5E~323) = 1.570796327 +pow (0.123E1, 0.5E~323) = 1 +atan2 (0.123E1, 0.0) = 1.570796327 +pow (0.123E1, 0.0) = 1 +atan2 (0.123E1, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E1, ~0.17976931348623157E309) = 0 +atan2 (0.123E1, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E1, ~0.8988465674311579E308) = 0 +atan2 (0.123E1, ~0.123E4) = 3.140592654 +pow (0.123E1, ~0.123E4) = 2.610435275E~111 +atan2 (0.123E1, ~0.123E2) = 3.041924001 +pow (0.123E1, ~0.123E2) = 0.07837311876 +atan2 (0.123E1, ~0.3141592653589793E1) = 2.768416923 +pow (0.123E1, ~0.3141592653589793E1) = 0.5218609042 +atan2 (0.123E1, ~0.2718281828459045E1) = 2.71666855 +pow (0.123E1, ~0.2718281828459045E1) = 0.56965586 +atan2 (0.123E1, ~0.123E1) = 2.35619449 +pow (0.123E1, ~0.123E1) = 0.7752052637 +atan2 (0.123E1, ~0.123) = 1.670464979 +pow (0.123E1, ~0.123) = 0.9748586988 +atan2 (0.123E1, ~0.123E~2) = 1.571796326 +pow (0.123E1, ~0.123E~2) = 0.999745405 +atan2 (0.123E1, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E1, ~0.22250738585072014E~307) = 1 +atan2 (0.123E1, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E1, ~0.11125369292536007E~307) = 1 +atan2 (0.123E1, ~0.5E~323) = 1.570796327 +pow (0.123E1, ~0.5E~323) = 1 +atan2 (0.123E1, ~0.0) = 1.570796327 +pow (0.123E1, ~0.0) = 1 +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123E1, ~inf) = 3.141592654 +pow (0.123E1, ~inf) = 0 +atan2 (0.123E1, nan) = nan +pow (0.123E1, nan) = nan +atan2 (0.123E1, inf) = 0 +pow (0.123E1, inf) = inf +atan2 (0.123, 0.17976931348623157E309) = 6.842102115E~310 +pow (0.123, 0.17976931348623157E309) = 0 +atan2 (0.123, 0.8988465674311579E308) = 1.368420423E~309 +pow (0.123, 0.8988465674311579E308) = 0 +atan2 (0.123, 0.123E4) = 9.999999967E~5 +pow (0.123, 0.123E4) = 0 +atan2 (0.123, 0.123E2) = 0.009999666687 +pow (0.123, 0.123E2) = 6.394886941E~12 +atan2 (0.123, 0.3141592653589793E1) = 0.03913212911 +pow (0.123, 0.3141592653589793E1) = 0.001383096824 +atan2 (0.123, 0.2718281828459045E1) = 0.04521832678 +pow (0.123, 0.2718281828459045E1) = 0.003358192615 +atan2 (0.123, 0.123E1) = 0.09966865249 +pow (0.123, 0.123E1) = 0.07595970809 +atan2 (0.123, 0.123) = 0.7853981634 +pow (0.123, 0.123) = 0.7727843683 +atan2 (0.123, 0.123E~2) = 1.56079666 +pow (0.123, 0.123E~2) = 0.9974257668 +atan2 (0.123, 0.22250738585072014E~307) = 1.570796327 +pow (0.123, 0.22250738585072014E~307) = 1 +atan2 (0.123, 0.11125369292536007E~307) = 1.570796327 +pow (0.123, 0.11125369292536007E~307) = 1 +atan2 (0.123, 0.5E~323) = 1.570796327 +pow (0.123, 0.5E~323) = 1 +atan2 (0.123, 0.0) = 1.570796327 +pow (0.123, 0.0) = 1 +atan2 (0.123, ~0.17976931348623157E309) = 3.141592654 +pow (0.123, ~0.17976931348623157E309) = inf +atan2 (0.123, ~0.8988465674311579E308) = 3.141592654 +pow (0.123, ~0.8988465674311579E308) = inf +atan2 (0.123, ~0.123E4) = 3.141492654 +pow (0.123, ~0.123E4) = inf +atan2 (0.123, ~0.123E2) = 3.131592987 +pow (0.123, ~0.123E2) = 156374930400 +atan2 (0.123, ~0.3141592653589793E1) = 3.102460524 +pow (0.123, ~0.3141592653589793E1) = 723.0151807 +atan2 (0.123, ~0.2718281828459045E1) = 3.096374327 +pow (0.123, ~0.2718281828459045E1) = 297.7792267 +atan2 (0.123, ~0.123E1) = 3.041924001 +pow (0.123, ~0.123E1) = 13.16487418 +atan2 (0.123, ~0.123) = 2.35619449 +pow (0.123, ~0.123) = 1.294022034 +atan2 (0.123, ~0.123E~2) = 1.580795993 +pow (0.123, ~0.123E~2) = 1.002580877 +atan2 (0.123, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123, ~0.22250738585072014E~307) = 1 +atan2 (0.123, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123, ~0.11125369292536007E~307) = 1 +atan2 (0.123, ~0.5E~323) = 1.570796327 +pow (0.123, ~0.5E~323) = 1 +atan2 (0.123, ~0.0) = 1.570796327 +pow (0.123, ~0.0) = 1 +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123, ~inf) = 3.141592654 +pow (0.123, ~inf) = inf +atan2 (0.123, nan) = nan +pow (0.123, nan) = nan +atan2 (0.123, inf) = 0 +pow (0.123, inf) = 0 +atan2 (0.123E~2, 0.17976931348623157E309) = 6.842102115E~312 +pow (0.123E~2, 0.17976931348623157E309) = 0 +atan2 (0.123E~2, 0.8988465674311579E308) = 1.368420423E~311 +pow (0.123E~2, 0.8988465674311579E308) = 0 +atan2 (0.123E~2, 0.123E4) = 1E~6 +pow (0.123E~2, 0.123E4) = 0 +atan2 (0.123E~2, 0.123E2) = 9.999999967E~5 +pow (0.123E~2, 0.123E2) = 1.606322974E~36 +atan2 (0.123E~2, 0.3141592653589793E1) = 3.9152114E~4 +pow (0.123E~2, 0.3141592653589793E1) = 7.205552335E~10 +atan2 (0.123E~2, 0.2718281828459045E1) = 4.524916818E~4 +pow (0.123E~2, 0.2718281828459045E1) = 1.228971878E~8 +atan2 (0.123E~2, 0.123E1) = 9.999996667E~4 +pow (0.123E~2, 0.123E1) = 2.633802994E~4 +atan2 (0.123E~2, 0.123) = 0.009999666687 +pow (0.123E~2, 0.123) = 0.4385895994 +atan2 (0.123E~2, 0.123E~2) = 0.7853981634 +pow (0.123E~2, 0.123E~2) = 0.9917919599 +atan2 (0.123E~2, 0.22250738585072014E~307) = 1.570796327 +pow (0.123E~2, 0.22250738585072014E~307) = 1 +atan2 (0.123E~2, 0.11125369292536007E~307) = 1.570796327 +pow (0.123E~2, 0.11125369292536007E~307) = 1 +atan2 (0.123E~2, 0.5E~323) = 1.570796327 +pow (0.123E~2, 0.5E~323) = 1 +atan2 (0.123E~2, 0.0) = 1.570796327 +pow (0.123E~2, 0.0) = 1 +atan2 (0.123E~2, ~0.17976931348623157E309) = 3.141592654 +pow (0.123E~2, ~0.17976931348623157E309) = inf +atan2 (0.123E~2, ~0.8988465674311579E308) = 3.141592654 +pow (0.123E~2, ~0.8988465674311579E308) = inf +atan2 (0.123E~2, ~0.123E4) = 3.141591654 +pow (0.123E~2, ~0.123E4) = inf +atan2 (0.123E~2, ~0.123E2) = 3.141492654 +pow (0.123E~2, ~0.123E2) = 6.225398107E35 +atan2 (0.123E~2, ~0.3141592653589793E1) = 3.141201132 +pow (0.123E~2, ~0.3141592653589793E1) = 1387818662 +atan2 (0.123E~2, ~0.2718281828459045E1) = 3.141140162 +pow (0.123E~2, ~0.2718281828459045E1) = 81368826.88 +atan2 (0.123E~2, ~0.123E1) = 3.140592654 +pow (0.123E~2, ~0.123E1) = 3796.791188 +atan2 (0.123E~2, ~0.123) = 3.131592987 +pow (0.123E~2, ~0.123) = 2.280035827 +atan2 (0.123E~2, ~0.123E~2) = 2.35619449 +pow (0.123E~2, ~0.123E~2) = 1.00827597 +atan2 (0.123E~2, ~0.22250738585072014E~307) = 1.570796327 +pow (0.123E~2, ~0.22250738585072014E~307) = 1 +atan2 (0.123E~2, ~0.11125369292536007E~307) = 1.570796327 +pow (0.123E~2, ~0.11125369292536007E~307) = 1 +atan2 (0.123E~2, ~0.5E~323) = 1.570796327 +pow (0.123E~2, ~0.5E~323) = 1 +atan2 (0.123E~2, ~0.0) = 1.570796327 +pow (0.123E~2, ~0.0) = 1 +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.123E~2, ~inf) = 3.141592654 +pow (0.123E~2, ~inf) = inf +atan2 (0.123E~2, nan) = nan +pow (0.123E~2, nan) = nan +atan2 (0.123E~2, inf) = 0 +pow (0.123E~2, inf) = 0 +atan2 (0.22250738585072014E~307, 0.17976931348623157E309) = 0 +pow (0.22250738585072014E~307, 0.17976931348623157E309) = 0 +atan2 (0.22250738585072014E~307, 0.8988465674311579E308) = 0 +pow (0.22250738585072014E~307, 0.8988465674311579E308) = 0 +atan2 (0.22250738585072014E~307, 0.123E4) = 1.809003137E~311 +pow (0.22250738585072014E~307, 0.123E4) = 0 +atan2 (0.22250738585072014E~307, 0.123E2) = 1.809003137E~309 +pow (0.22250738585072014E~307, 0.123E2) = 0 +atan2 (0.22250738585072014E~307, 0.3141592653589793E1) = 7.082630067E~309 +pow (0.22250738585072014E~307, 0.3141592653589793E1) = 0 +atan2 (0.22250738585072014E~307, 0.2718281828459045E1) = 8.185589276E~309 +pow (0.22250738585072014E~307, 0.2718281828459045E1) = 0 +atan2 (0.22250738585072014E~307, 0.123E1) = 1.809003137E~308 +pow (0.22250738585072014E~307, 0.123E1) = 0 +atan2 (0.22250738585072014E~307, 0.123) = 1.809003137E~307 +pow (0.22250738585072014E~307, 0.123) = 1.441197052E~38 +atan2 (0.22250738585072014E~307, 0.123E~2) = 1.809003137E~305 +pow (0.22250738585072014E~307, 0.123E~2) = 0.4183957204 +atan2 (0.22250738585072014E~307, 0.22250738585072014E~307) = 0.7853981634 +pow (0.22250738585072014E~307, 0.22250738585072014E~307) = 1 +atan2 (0.22250738585072014E~307, 0.11125369292536007E~307) = 1.107148718 +pow (0.22250738585072014E~307, 0.11125369292536007E~307) = 1 +atan2 (0.22250738585072014E~307, 0.5E~323) = 1.570796327 +pow (0.22250738585072014E~307, 0.5E~323) = 1 +atan2 (0.22250738585072014E~307, 0.0) = 1.570796327 +pow (0.22250738585072014E~307, 0.0) = 1 +atan2 (0.22250738585072014E~307, ~0.17976931348623157E309) = 3.141592654 +pow (0.22250738585072014E~307, ~0.17976931348623157E309) = inf +atan2 (0.22250738585072014E~307, ~0.8988465674311579E308) = 3.141592654 +pow (0.22250738585072014E~307, ~0.8988465674311579E308) = inf +atan2 (0.22250738585072014E~307, ~0.123E4) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E4) = inf +atan2 (0.22250738585072014E~307, ~0.123E2) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E2) = inf +atan2 (0.22250738585072014E~307, ~0.3141592653589793E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.3141592653589793E1) = inf +atan2 (0.22250738585072014E~307, ~0.2718281828459045E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.2718281828459045E1) = inf +atan2 (0.22250738585072014E~307, ~0.123E1) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E1) = inf +atan2 (0.22250738585072014E~307, ~0.123) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123) = 6.93867642E37 +atan2 (0.22250738585072014E~307, ~0.123E~2) = 3.141592654 +pow (0.22250738585072014E~307, ~0.123E~2) = 2.390081808 +atan2 (0.22250738585072014E~307, ~0.22250738585072014E~307) = 2.35619449 +pow (0.22250738585072014E~307, ~0.22250738585072014E~307) = 1 +atan2 (0.22250738585072014E~307, ~0.11125369292536007E~307) = 2.034443936 +pow (0.22250738585072014E~307, ~0.11125369292536007E~307) = 1 +atan2 (0.22250738585072014E~307, ~0.5E~323) = 1.570796327 +pow (0.22250738585072014E~307, ~0.5E~323) = 1 +atan2 (0.22250738585072014E~307, ~0.0) = 1.570796327 +pow (0.22250738585072014E~307, ~0.0) = 1 +atan2 (0.22250738585072014E~307, inf) = 0 +pow (0.22250738585072014E~307, inf) = 0 +atan2 (0.22250738585072014E~307, ~inf) = 3.141592654 +pow (0.22250738585072014E~307, ~inf) = inf +atan2 (0.22250738585072014E~307, nan) = nan +pow (0.22250738585072014E~307, nan) = nan +atan2 (0.22250738585072014E~307, inf) = 0 +pow (0.22250738585072014E~307, inf) = 0 +atan2 (0.11125369292536007E~307, 0.17976931348623157E309) = 0 +pow (0.11125369292536007E~307, 0.17976931348623157E309) = 0 +atan2 (0.11125369292536007E~307, 0.8988465674311579E308) = 0 +pow (0.11125369292536007E~307, 0.8988465674311579E308) = 0 +atan2 (0.11125369292536007E~307, 0.123E4) = 9.045015685E~312 +pow (0.11125369292536007E~307, 0.123E4) = 0 +atan2 (0.11125369292536007E~307, 0.123E2) = 9.045015685E~310 +pow (0.11125369292536007E~307, 0.123E2) = 0 +atan2 (0.11125369292536007E~307, 0.3141592653589793E1) = 3.541315033E~309 +pow (0.11125369292536007E~307, 0.3141592653589793E1) = 0 +atan2 (0.11125369292536007E~307, 0.2718281828459045E1) = 4.092794638E~309 +pow (0.11125369292536007E~307, 0.2718281828459045E1) = 0 +atan2 (0.11125369292536007E~307, 0.123E1) = 9.045015685E~309 +pow (0.11125369292536007E~307, 0.123E1) = 0 +atan2 (0.11125369292536007E~307, 0.123) = 9.045015685E~308 +pow (0.11125369292536007E~307, 0.123) = 1.323416898E~38 +atan2 (0.11125369292536007E~307, 0.123E~2) = 9.045015685E~306 +pow (0.11125369292536007E~307, 0.123E~2) = 0.4180391603 +atan2 (0.11125369292536007E~307, 0.22250738585072014E~307) = 0.463647609 +pow (0.11125369292536007E~307, 0.22250738585072014E~307) = 1 +atan2 (0.11125369292536007E~307, 0.11125369292536007E~307) = 0.7853981634 +pow (0.11125369292536007E~307, 0.11125369292536007E~307) = 1 +atan2 (0.11125369292536007E~307, 0.5E~323) = 1.570796327 +pow (0.11125369292536007E~307, 0.5E~323) = 1 +atan2 (0.11125369292536007E~307, 0.0) = 1.570796327 +pow (0.11125369292536007E~307, 0.0) = 1 +atan2 (0.11125369292536007E~307, ~0.17976931348623157E309) = 3.141592654 +pow (0.11125369292536007E~307, ~0.17976931348623157E309) = inf +atan2 (0.11125369292536007E~307, ~0.8988465674311579E308) = 3.141592654 +pow (0.11125369292536007E~307, ~0.8988465674311579E308) = inf +atan2 (0.11125369292536007E~307, ~0.123E4) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E4) = inf +atan2 (0.11125369292536007E~307, ~0.123E2) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E2) = inf +atan2 (0.11125369292536007E~307, ~0.3141592653589793E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.3141592653589793E1) = inf +atan2 (0.11125369292536007E~307, ~0.2718281828459045E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.2718281828459045E1) = inf +atan2 (0.11125369292536007E~307, ~0.123E1) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E1) = inf +atan2 (0.11125369292536007E~307, ~0.123) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123) = 7.556197911E37 +atan2 (0.11125369292536007E~307, ~0.123E~2) = 3.141592654 +pow (0.11125369292536007E~307, ~0.123E~2) = 2.392120392 +atan2 (0.11125369292536007E~307, ~0.22250738585072014E~307) = 2.677945045 +pow (0.11125369292536007E~307, ~0.22250738585072014E~307) = 1 +atan2 (0.11125369292536007E~307, ~0.11125369292536007E~307) = 2.35619449 +pow (0.11125369292536007E~307, ~0.11125369292536007E~307) = 1 +atan2 (0.11125369292536007E~307, ~0.5E~323) = 1.570796327 +pow (0.11125369292536007E~307, ~0.5E~323) = 1 +atan2 (0.11125369292536007E~307, ~0.0) = 1.570796327 +pow (0.11125369292536007E~307, ~0.0) = 1 +atan2 (0.11125369292536007E~307, inf) = 0 +pow (0.11125369292536007E~307, inf) = 0 +atan2 (0.11125369292536007E~307, ~inf) = 3.141592654 +pow (0.11125369292536007E~307, ~inf) = inf +atan2 (0.11125369292536007E~307, nan) = nan +pow (0.11125369292536007E~307, nan) = nan +atan2 (0.11125369292536007E~307, inf) = 0 +pow (0.11125369292536007E~307, inf) = 0 +atan2 (0.5E~323, 0.17976931348623157E309) = 0 +pow (0.5E~323, 0.17976931348623157E309) = 0 +atan2 (0.5E~323, 0.8988465674311579E308) = 0 +pow (0.5E~323, 0.8988465674311579E308) = 0 +atan2 (0.5E~323, 0.123E4) = 0 +pow (0.5E~323, 0.123E4) = 0 +atan2 (0.5E~323, 0.123E2) = 0 +pow (0.5E~323, 0.123E2) = 0 +atan2 (0.5E~323, 0.3141592653589793E1) = 0 +pow (0.5E~323, 0.3141592653589793E1) = 0 +atan2 (0.5E~323, 0.2718281828459045E1) = 0 +pow (0.5E~323, 0.2718281828459045E1) = 0 +atan2 (0.5E~323, 0.123E1) = 4.940656458E~324 +pow (0.5E~323, 0.123E1) = 0 +atan2 (0.5E~323, 0.123) = 3.952525167E~323 +pow (0.5E~323, 0.123) = 1.711336892E~40 +atan2 (0.5E~323, 0.123E~2) = 4.016753701E~321 +pow (0.5E~323, 0.123E~2) = 0.4002518566 +atan2 (0.5E~323, 0.22250738585072014E~307) = 2.220446049E~16 +pow (0.5E~323, 0.22250738585072014E~307) = 1 +atan2 (0.5E~323, 0.11125369292536007E~307) = 4.440892099E~16 +pow (0.5E~323, 0.11125369292536007E~307) = 1 +atan2 (0.5E~323, 0.5E~323) = 0.7853981634 +pow (0.5E~323, 0.5E~323) = 1 +atan2 (0.5E~323, 0.0) = 1.570796327 +pow (0.5E~323, 0.0) = 1 +atan2 (0.5E~323, ~0.17976931348623157E309) = 3.141592654 +pow (0.5E~323, ~0.17976931348623157E309) = inf +atan2 (0.5E~323, ~0.8988465674311579E308) = 3.141592654 +pow (0.5E~323, ~0.8988465674311579E308) = inf +atan2 (0.5E~323, ~0.123E4) = 3.141592654 +pow (0.5E~323, ~0.123E4) = inf +atan2 (0.5E~323, ~0.123E2) = 3.141592654 +pow (0.5E~323, ~0.123E2) = inf +atan2 (0.5E~323, ~0.3141592653589793E1) = 3.141592654 +pow (0.5E~323, ~0.3141592653589793E1) = inf +atan2 (0.5E~323, ~0.2718281828459045E1) = 3.141592654 +pow (0.5E~323, ~0.2718281828459045E1) = inf +atan2 (0.5E~323, ~0.123E1) = 3.141592654 +pow (0.5E~323, ~0.123E1) = inf +atan2 (0.5E~323, ~0.123) = 3.141592654 +pow (0.5E~323, ~0.123) = 5.843384809E39 +atan2 (0.5E~323, ~0.123E~2) = 3.141592654 +pow (0.5E~323, ~0.123E~2) = 2.498426887 +atan2 (0.5E~323, ~0.22250738585072014E~307) = 3.141592654 +pow (0.5E~323, ~0.22250738585072014E~307) = 1 +atan2 (0.5E~323, ~0.11125369292536007E~307) = 3.141592654 +pow (0.5E~323, ~0.11125369292536007E~307) = 1 +atan2 (0.5E~323, ~0.5E~323) = 2.35619449 +pow (0.5E~323, ~0.5E~323) = 1 +atan2 (0.5E~323, ~0.0) = 1.570796327 +pow (0.5E~323, ~0.0) = 1 +atan2 (0.5E~323, inf) = 0 +pow (0.5E~323, inf) = 0 +atan2 (0.5E~323, ~inf) = 3.141592654 +pow (0.5E~323, ~inf) = inf +atan2 (0.5E~323, nan) = nan +pow (0.5E~323, nan) = nan +atan2 (0.5E~323, inf) = 0 +pow (0.5E~323, inf) = 0 +atan2 (0.0, 0.17976931348623157E309) = 0 +pow (0.0, 0.17976931348623157E309) = 0 +atan2 (0.0, 0.8988465674311579E308) = 0 +pow (0.0, 0.8988465674311579E308) = 0 +atan2 (0.0, 0.123E4) = 0 +pow (0.0, 0.123E4) = 0 +atan2 (0.0, 0.123E2) = 0 +pow (0.0, 0.123E2) = 0 +atan2 (0.0, 0.3141592653589793E1) = 0 +pow (0.0, 0.3141592653589793E1) = 0 +atan2 (0.0, 0.2718281828459045E1) = 0 +pow (0.0, 0.2718281828459045E1) = 0 +atan2 (0.0, 0.123E1) = 0 +pow (0.0, 0.123E1) = 0 +atan2 (0.0, 0.123) = 0 +pow (0.0, 0.123) = 0 +atan2 (0.0, 0.123E~2) = 0 +pow (0.0, 0.123E~2) = 0 +atan2 (0.0, 0.22250738585072014E~307) = 0 +pow (0.0, 0.22250738585072014E~307) = 0 +atan2 (0.0, 0.11125369292536007E~307) = 0 +pow (0.0, 0.11125369292536007E~307) = 0 +atan2 (0.0, 0.5E~323) = 0 +pow (0.0, 0.5E~323) = 0 +atan2 (0.0, 0.0) = 0 +pow (0.0, 0.0) = 1 +atan2 (0.0, ~0.17976931348623157E309) = 3.141592654 +pow (0.0, ~0.17976931348623157E309) = inf +atan2 (0.0, ~0.8988465674311579E308) = 3.141592654 +pow (0.0, ~0.8988465674311579E308) = inf +atan2 (0.0, ~0.123E4) = 3.141592654 +pow (0.0, ~0.123E4) = inf +atan2 (0.0, ~0.123E2) = 3.141592654 +pow (0.0, ~0.123E2) = inf +atan2 (0.0, ~0.3141592653589793E1) = 3.141592654 +pow (0.0, ~0.3141592653589793E1) = inf +atan2 (0.0, ~0.2718281828459045E1) = 3.141592654 +pow (0.0, ~0.2718281828459045E1) = inf +atan2 (0.0, ~0.123E1) = 3.141592654 +pow (0.0, ~0.123E1) = inf +atan2 (0.0, ~0.123) = 3.141592654 +pow (0.0, ~0.123) = inf +atan2 (0.0, ~0.123E~2) = 3.141592654 +pow (0.0, ~0.123E~2) = inf +atan2 (0.0, ~0.22250738585072014E~307) = 3.141592654 +pow (0.0, ~0.22250738585072014E~307) = inf +atan2 (0.0, ~0.11125369292536007E~307) = 3.141592654 +pow (0.0, ~0.11125369292536007E~307) = inf +atan2 (0.0, ~0.5E~323) = 3.141592654 +pow (0.0, ~0.5E~323) = inf +atan2 (0.0, ~0.0) = 3.141592654 +pow (0.0, ~0.0) = 1 +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (0.0, ~inf) = 3.141592654 +pow (0.0, ~inf) = inf +atan2 (0.0, nan) = nan +pow (0.0, nan) = nan +atan2 (0.0, inf) = 0 +pow (0.0, inf) = 0 +atan2 (~0.17976931348623157E309, 0.17976931348623157E309) = ~0.7853981634 +pow (~0.17976931348623157E309, 0.17976931348623157E309) = inf +atan2 (~0.17976931348623157E309, 0.8988465674311579E308) = ~1.107148718 +pow (~0.17976931348623157E309, 0.8988465674311579E308) = inf +atan2 (~0.17976931348623157E309, 0.123E4) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E4) = inf +atan2 (~0.17976931348623157E309, 0.123E2) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E2) = nan +atan2 (~0.17976931348623157E309, 0.3141592653589793E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.3141592653589793E1) = nan +atan2 (~0.17976931348623157E309, 0.2718281828459045E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.2718281828459045E1) = nan +atan2 (~0.17976931348623157E309, 0.123E1) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E1) = nan +atan2 (~0.17976931348623157E309, 0.123) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123) = nan +atan2 (~0.17976931348623157E309, 0.123E~2) = ~1.570796327 +pow (~0.17976931348623157E309, 0.123E~2) = nan +atan2 (~0.17976931348623157E309, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.17976931348623157E309, 0.22250738585072014E~307) = nan +atan2 (~0.17976931348623157E309, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.17976931348623157E309, 0.11125369292536007E~307) = nan +atan2 (~0.17976931348623157E309, 0.5E~323) = ~1.570796327 +pow (~0.17976931348623157E309, 0.5E~323) = nan +atan2 (~0.17976931348623157E309, 0.0) = ~1.570796327 +pow (~0.17976931348623157E309, 0.0) = 1 +atan2 (~0.17976931348623157E309, ~0.17976931348623157E309) = ~2.35619449 +pow (~0.17976931348623157E309, ~0.17976931348623157E309) = 0 +atan2 (~0.17976931348623157E309, ~0.8988465674311579E308) = ~2.034443936 +pow (~0.17976931348623157E309, ~0.8988465674311579E308) = 0 +atan2 (~0.17976931348623157E309, ~0.123E4) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E4) = 0 +atan2 (~0.17976931348623157E309, ~0.123E2) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E2) = nan +atan2 (~0.17976931348623157E309, ~0.3141592653589793E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.3141592653589793E1) = nan +atan2 (~0.17976931348623157E309, ~0.2718281828459045E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.2718281828459045E1) = nan +atan2 (~0.17976931348623157E309, ~0.123E1) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E1) = nan +atan2 (~0.17976931348623157E309, ~0.123) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123) = nan +atan2 (~0.17976931348623157E309, ~0.123E~2) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.123E~2) = nan +atan2 (~0.17976931348623157E309, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.22250738585072014E~307) = nan +atan2 (~0.17976931348623157E309, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.11125369292536007E~307) = nan +atan2 (~0.17976931348623157E309, ~0.5E~323) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.5E~323) = nan +atan2 (~0.17976931348623157E309, ~0.0) = ~1.570796327 +pow (~0.17976931348623157E309, ~0.0) = 1 +atan2 (~0.17976931348623157E309, inf) = 0 +pow (~0.17976931348623157E309, inf) = inf +atan2 (~0.17976931348623157E309, ~inf) = ~3.141592654 +pow (~0.17976931348623157E309, ~inf) = 0 +atan2 (~0.17976931348623157E309, nan) = nan +pow (~0.17976931348623157E309, nan) = nan +atan2 (~0.17976931348623157E309, inf) = 0 +pow (~0.17976931348623157E309, inf) = inf +atan2 (~0.8988465674311579E308, 0.17976931348623157E309) = ~0.463647609 +pow (~0.8988465674311579E308, 0.17976931348623157E309) = inf +atan2 (~0.8988465674311579E308, 0.8988465674311579E308) = ~0.7853981634 +pow (~0.8988465674311579E308, 0.8988465674311579E308) = inf +atan2 (~0.8988465674311579E308, 0.123E4) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E4) = inf +atan2 (~0.8988465674311579E308, 0.123E2) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E2) = nan +atan2 (~0.8988465674311579E308, 0.3141592653589793E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.3141592653589793E1) = nan +atan2 (~0.8988465674311579E308, 0.2718281828459045E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.2718281828459045E1) = nan +atan2 (~0.8988465674311579E308, 0.123E1) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E1) = nan +atan2 (~0.8988465674311579E308, 0.123) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123) = nan +atan2 (~0.8988465674311579E308, 0.123E~2) = ~1.570796327 +pow (~0.8988465674311579E308, 0.123E~2) = nan +atan2 (~0.8988465674311579E308, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.8988465674311579E308, 0.22250738585072014E~307) = nan +atan2 (~0.8988465674311579E308, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.8988465674311579E308, 0.11125369292536007E~307) = nan +atan2 (~0.8988465674311579E308, 0.5E~323) = ~1.570796327 +pow (~0.8988465674311579E308, 0.5E~323) = nan +atan2 (~0.8988465674311579E308, 0.0) = ~1.570796327 +pow (~0.8988465674311579E308, 0.0) = 1 +atan2 (~0.8988465674311579E308, ~0.17976931348623157E309) = ~2.677945045 +pow (~0.8988465674311579E308, ~0.17976931348623157E309) = 0 +atan2 (~0.8988465674311579E308, ~0.8988465674311579E308) = ~2.35619449 +pow (~0.8988465674311579E308, ~0.8988465674311579E308) = 0 +atan2 (~0.8988465674311579E308, ~0.123E4) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E4) = 0 +atan2 (~0.8988465674311579E308, ~0.123E2) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E2) = nan +atan2 (~0.8988465674311579E308, ~0.3141592653589793E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.3141592653589793E1) = nan +atan2 (~0.8988465674311579E308, ~0.2718281828459045E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.2718281828459045E1) = nan +atan2 (~0.8988465674311579E308, ~0.123E1) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E1) = nan +atan2 (~0.8988465674311579E308, ~0.123) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123) = nan +atan2 (~0.8988465674311579E308, ~0.123E~2) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.123E~2) = nan +atan2 (~0.8988465674311579E308, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.22250738585072014E~307) = nan +atan2 (~0.8988465674311579E308, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.11125369292536007E~307) = nan +atan2 (~0.8988465674311579E308, ~0.5E~323) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.5E~323) = nan +atan2 (~0.8988465674311579E308, ~0.0) = ~1.570796327 +pow (~0.8988465674311579E308, ~0.0) = 1 +atan2 (~0.8988465674311579E308, inf) = 0 +pow (~0.8988465674311579E308, inf) = inf +atan2 (~0.8988465674311579E308, ~inf) = ~3.141592654 +pow (~0.8988465674311579E308, ~inf) = 0 +atan2 (~0.8988465674311579E308, nan) = nan +pow (~0.8988465674311579E308, nan) = nan +atan2 (~0.8988465674311579E308, inf) = 0 +pow (~0.8988465674311579E308, inf) = inf +atan2 (~0.123E4, 0.17976931348623157E309) = ~6.842102115E~306 +pow (~0.123E4, 0.17976931348623157E309) = inf +atan2 (~0.123E4, 0.8988465674311579E308) = ~1.368420423E~305 +pow (~0.123E4, 0.8988465674311579E308) = inf +atan2 (~0.123E4, 0.123E4) = ~0.7853981634 +pow (~0.123E4, 0.123E4) = inf +atan2 (~0.123E4, 0.123E2) = ~1.56079666 +pow (~0.123E4, 0.123E2) = nan +atan2 (~0.123E4, 0.3141592653589793E1) = ~1.568242192 +pow (~0.123E4, 0.3141592653589793E1) = nan +atan2 (~0.123E4, 0.2718281828459045E1) = ~1.568586345 +pow (~0.123E4, 0.2718281828459045E1) = nan +atan2 (~0.123E4, 0.123E1) = ~1.569796327 +pow (~0.123E4, 0.123E1) = nan +atan2 (~0.123E4, 0.123) = ~1.570696327 +pow (~0.123E4, 0.123) = nan +atan2 (~0.123E4, 0.123E~2) = ~1.570795327 +pow (~0.123E4, 0.123E~2) = nan +atan2 (~0.123E4, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E4, 0.22250738585072014E~307) = nan +atan2 (~0.123E4, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E4, 0.11125369292536007E~307) = nan +atan2 (~0.123E4, 0.5E~323) = ~1.570796327 +pow (~0.123E4, 0.5E~323) = nan +atan2 (~0.123E4, 0.0) = ~1.570796327 +pow (~0.123E4, 0.0) = 1 +atan2 (~0.123E4, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E4, ~0.17976931348623157E309) = 0 +atan2 (~0.123E4, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E4, ~0.8988465674311579E308) = 0 +atan2 (~0.123E4, ~0.123E4) = ~2.35619449 +pow (~0.123E4, ~0.123E4) = 0 +atan2 (~0.123E4, ~0.123E2) = ~1.580795993 +pow (~0.123E4, ~0.123E2) = nan +atan2 (~0.123E4, ~0.3141592653589793E1) = ~1.573350462 +pow (~0.123E4, ~0.3141592653589793E1) = nan +atan2 (~0.123E4, ~0.2718281828459045E1) = ~1.573006308 +pow (~0.123E4, ~0.2718281828459045E1) = nan +atan2 (~0.123E4, ~0.123E1) = ~1.571796326 +pow (~0.123E4, ~0.123E1) = nan +atan2 (~0.123E4, ~0.123) = ~1.570896327 +pow (~0.123E4, ~0.123) = nan +atan2 (~0.123E4, ~0.123E~2) = ~1.570797327 +pow (~0.123E4, ~0.123E~2) = nan +atan2 (~0.123E4, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E4, ~0.22250738585072014E~307) = nan +atan2 (~0.123E4, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E4, ~0.11125369292536007E~307) = nan +atan2 (~0.123E4, ~0.5E~323) = ~1.570796327 +pow (~0.123E4, ~0.5E~323) = nan +atan2 (~0.123E4, ~0.0) = ~1.570796327 +pow (~0.123E4, ~0.0) = 1 +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E4, ~inf) = ~3.141592654 +pow (~0.123E4, ~inf) = 0 +atan2 (~0.123E4, nan) = nan +pow (~0.123E4, nan) = nan +atan2 (~0.123E4, inf) = 0 +pow (~0.123E4, inf) = inf +atan2 (~0.123E2, 0.17976931348623157E309) = ~6.842102115E~308 +pow (~0.123E2, 0.17976931348623157E309) = inf +atan2 (~0.123E2, 0.8988465674311579E308) = ~1.368420423E~307 +pow (~0.123E2, 0.8988465674311579E308) = inf +atan2 (~0.123E2, 0.123E4) = ~0.009999666687 +pow (~0.123E2, 0.123E4) = inf +atan2 (~0.123E2, 0.123E2) = ~0.7853981634 +pow (~0.123E2, 0.123E2) = nan +atan2 (~0.123E2, 0.3141592653589793E1) = ~1.320728626 +pow (~0.123E2, 0.3141592653589793E1) = nan +atan2 (~0.123E2, 0.2718281828459045E1) = ~1.353293796 +pow (~0.123E2, 0.2718281828459045E1) = nan +atan2 (~0.123E2, 0.123E1) = ~1.471127674 +pow (~0.123E2, 0.123E1) = nan +atan2 (~0.123E2, 0.123) = ~1.56079666 +pow (~0.123E2, 0.123) = nan +atan2 (~0.123E2, 0.123E~2) = ~1.570696327 +pow (~0.123E2, 0.123E~2) = nan +atan2 (~0.123E2, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E2, 0.22250738585072014E~307) = nan +atan2 (~0.123E2, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E2, 0.11125369292536007E~307) = nan +atan2 (~0.123E2, 0.5E~323) = ~1.570796327 +pow (~0.123E2, 0.5E~323) = nan +atan2 (~0.123E2, 0.0) = ~1.570796327 +pow (~0.123E2, 0.0) = 1 +atan2 (~0.123E2, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E2, ~0.17976931348623157E309) = 0 +atan2 (~0.123E2, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E2, ~0.8988465674311579E308) = 0 +atan2 (~0.123E2, ~0.123E4) = ~3.131592987 +pow (~0.123E2, ~0.123E4) = 0 +atan2 (~0.123E2, ~0.123E2) = ~2.35619449 +pow (~0.123E2, ~0.123E2) = nan +atan2 (~0.123E2, ~0.3141592653589793E1) = ~1.820864027 +pow (~0.123E2, ~0.3141592653589793E1) = nan +atan2 (~0.123E2, ~0.2718281828459045E1) = ~1.788298857 +pow (~0.123E2, ~0.2718281828459045E1) = nan +atan2 (~0.123E2, ~0.123E1) = ~1.670464979 +pow (~0.123E2, ~0.123E1) = nan +atan2 (~0.123E2, ~0.123) = ~1.580795993 +pow (~0.123E2, ~0.123) = nan +atan2 (~0.123E2, ~0.123E~2) = ~1.570896327 +pow (~0.123E2, ~0.123E~2) = nan +atan2 (~0.123E2, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E2, ~0.22250738585072014E~307) = nan +atan2 (~0.123E2, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E2, ~0.11125369292536007E~307) = nan +atan2 (~0.123E2, ~0.5E~323) = ~1.570796327 +pow (~0.123E2, ~0.5E~323) = nan +atan2 (~0.123E2, ~0.0) = ~1.570796327 +pow (~0.123E2, ~0.0) = 1 +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.123E2, ~inf) = ~3.141592654 +pow (~0.123E2, ~inf) = 0 +atan2 (~0.123E2, nan) = nan +pow (~0.123E2, nan) = nan +atan2 (~0.123E2, inf) = 0 +pow (~0.123E2, inf) = inf +atan2 (~0.3141592653589793E1, 0.17976931348623157E309) = ~1.747568922E~308 +pow (~0.3141592653589793E1, 0.17976931348623157E309) = inf +atan2 (~0.3141592653589793E1, 0.8988465674311579E308) = ~3.495137844E~308 +pow (~0.3141592653589793E1, 0.8988465674311579E308) = inf +atan2 (~0.3141592653589793E1, 0.123E4) = ~0.002554134815 +pow (~0.3141592653589793E1, 0.123E4) = inf +atan2 (~0.3141592653589793E1, 0.123E2) = ~0.2500677004 +pow (~0.3141592653589793E1, 0.123E2) = nan +atan2 (~0.3141592653589793E1, 0.3141592653589793E1) = ~0.7853981634 +pow (~0.3141592653589793E1, 0.3141592653589793E1) = nan +atan2 (~0.3141592653589793E1, 0.2718281828459045E1) = ~0.8575117864 +pow (~0.3141592653589793E1, 0.2718281828459045E1) = nan +atan2 (~0.3141592653589793E1, 0.123E1) = ~1.197620596 +pow (~0.3141592653589793E1, 0.123E1) = nan +atan2 (~0.3141592653589793E1, 0.123) = ~1.531664198 +pow (~0.3141592653589793E1, 0.123) = nan +atan2 (~0.3141592653589793E1, 0.123E~2) = ~1.570404806 +pow (~0.3141592653589793E1, 0.123E~2) = nan +atan2 (~0.3141592653589793E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.3141592653589793E1, 0.22250738585072014E~307) = nan +atan2 (~0.3141592653589793E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.3141592653589793E1, 0.11125369292536007E~307) = nan +atan2 (~0.3141592653589793E1, 0.5E~323) = ~1.570796327 +pow (~0.3141592653589793E1, 0.5E~323) = nan +atan2 (~0.3141592653589793E1, 0.0) = ~1.570796327 +pow (~0.3141592653589793E1, 0.0) = 1 +atan2 (~0.3141592653589793E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.3141592653589793E1, ~0.17976931348623157E309) = 0 +atan2 (~0.3141592653589793E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.3141592653589793E1, ~0.8988465674311579E308) = 0 +atan2 (~0.3141592653589793E1, ~0.123E4) = ~3.139038519 +pow (~0.3141592653589793E1, ~0.123E4) = 0 +atan2 (~0.3141592653589793E1, ~0.123E2) = ~2.891524953 +pow (~0.3141592653589793E1, ~0.123E2) = nan +atan2 (~0.3141592653589793E1, ~0.3141592653589793E1) = ~2.35619449 +pow (~0.3141592653589793E1, ~0.3141592653589793E1) = nan +atan2 (~0.3141592653589793E1, ~0.2718281828459045E1) = ~2.284080867 +pow (~0.3141592653589793E1, ~0.2718281828459045E1) = nan +atan2 (~0.3141592653589793E1, ~0.123E1) = ~1.943972057 +pow (~0.3141592653589793E1, ~0.123E1) = nan +atan2 (~0.3141592653589793E1, ~0.123) = ~1.609928456 +pow (~0.3141592653589793E1, ~0.123) = nan +atan2 (~0.3141592653589793E1, ~0.123E~2) = ~1.571187848 +pow (~0.3141592653589793E1, ~0.123E~2) = nan +atan2 (~0.3141592653589793E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.22250738585072014E~307) = nan +atan2 (~0.3141592653589793E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.11125369292536007E~307) = nan +atan2 (~0.3141592653589793E1, ~0.5E~323) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.5E~323) = nan +atan2 (~0.3141592653589793E1, ~0.0) = ~1.570796327 +pow (~0.3141592653589793E1, ~0.0) = 1 +atan2 (~0.3141592653589793E1, inf) = 0 +pow (~0.3141592653589793E1, inf) = inf +atan2 (~0.3141592653589793E1, ~inf) = ~3.141592654 +pow (~0.3141592653589793E1, ~inf) = 0 +atan2 (~0.3141592653589793E1, nan) = nan +pow (~0.3141592653589793E1, nan) = nan +atan2 (~0.3141592653589793E1, inf) = 0 +pow (~0.3141592653589793E1, inf) = inf +atan2 (~0.2718281828459045E1, 0.17976931348623157E309) = ~1.512094459E~308 +pow (~0.2718281828459045E1, 0.17976931348623157E309) = inf +atan2 (~0.2718281828459045E1, 0.8988465674311579E308) = ~3.024188918E~308 +pow (~0.2718281828459045E1, 0.8988465674311579E308) = inf +atan2 (~0.2718281828459045E1, 0.123E4) = ~0.002209981629 +pow (~0.2718281828459045E1, 0.123E4) = inf +atan2 (~0.2718281828459045E1, 0.123E2) = ~0.2175025304 +pow (~0.2718281828459045E1, 0.123E2) = nan +atan2 (~0.2718281828459045E1, 0.3141592653589793E1) = ~0.7132845404 +pow (~0.2718281828459045E1, 0.3141592653589793E1) = nan +atan2 (~0.2718281828459045E1, 0.2718281828459045E1) = ~0.7853981634 +pow (~0.2718281828459045E1, 0.2718281828459045E1) = nan +atan2 (~0.2718281828459045E1, 0.123E1) = ~1.145872224 +pow (~0.2718281828459045E1, 0.123E1) = nan +atan2 (~0.2718281828459045E1, 0.123) = ~1.525578 +pow (~0.2718281828459045E1, 0.123) = nan +atan2 (~0.2718281828459045E1, 0.123E~2) = ~1.570343835 +pow (~0.2718281828459045E1, 0.123E~2) = nan +atan2 (~0.2718281828459045E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.2718281828459045E1, 0.22250738585072014E~307) = nan +atan2 (~0.2718281828459045E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.2718281828459045E1, 0.11125369292536007E~307) = nan +atan2 (~0.2718281828459045E1, 0.5E~323) = ~1.570796327 +pow (~0.2718281828459045E1, 0.5E~323) = nan +atan2 (~0.2718281828459045E1, 0.0) = ~1.570796327 +pow (~0.2718281828459045E1, 0.0) = 1 +atan2 (~0.2718281828459045E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.2718281828459045E1, ~0.17976931348623157E309) = 0 +atan2 (~0.2718281828459045E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.2718281828459045E1, ~0.8988465674311579E308) = 0 +atan2 (~0.2718281828459045E1, ~0.123E4) = ~3.139382672 +pow (~0.2718281828459045E1, ~0.123E4) = 0 +atan2 (~0.2718281828459045E1, ~0.123E2) = ~2.924090123 +pow (~0.2718281828459045E1, ~0.123E2) = nan +atan2 (~0.2718281828459045E1, ~0.3141592653589793E1) = ~2.428308113 +pow (~0.2718281828459045E1, ~0.3141592653589793E1) = nan +atan2 (~0.2718281828459045E1, ~0.2718281828459045E1) = ~2.35619449 +pow (~0.2718281828459045E1, ~0.2718281828459045E1) = nan +atan2 (~0.2718281828459045E1, ~0.123E1) = ~1.99572043 +pow (~0.2718281828459045E1, ~0.123E1) = nan +atan2 (~0.2718281828459045E1, ~0.123) = ~1.616014654 +pow (~0.2718281828459045E1, ~0.123) = nan +atan2 (~0.2718281828459045E1, ~0.123E~2) = ~1.571248818 +pow (~0.2718281828459045E1, ~0.123E~2) = nan +atan2 (~0.2718281828459045E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.22250738585072014E~307) = nan +atan2 (~0.2718281828459045E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.11125369292536007E~307) = nan +atan2 (~0.2718281828459045E1, ~0.5E~323) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.5E~323) = nan +atan2 (~0.2718281828459045E1, ~0.0) = ~1.570796327 +pow (~0.2718281828459045E1, ~0.0) = 1 +atan2 (~0.2718281828459045E1, inf) = 0 +pow (~0.2718281828459045E1, inf) = inf +atan2 (~0.2718281828459045E1, ~inf) = ~3.141592654 +pow (~0.2718281828459045E1, ~inf) = 0 +atan2 (~0.2718281828459045E1, nan) = nan +pow (~0.2718281828459045E1, nan) = nan +atan2 (~0.2718281828459045E1, inf) = 0 +pow (~0.2718281828459045E1, inf) = inf +atan2 (~0.123E1, 0.17976931348623157E309) = ~6.842102115E~309 +pow (~0.123E1, 0.17976931348623157E309) = inf +atan2 (~0.123E1, 0.8988465674311579E308) = ~1.368420423E~308 +pow (~0.123E1, 0.8988465674311579E308) = inf +atan2 (~0.123E1, 0.123E4) = ~9.999996667E~4 +pow (~0.123E1, 0.123E4) = 3.830778757E110 +atan2 (~0.123E1, 0.123E2) = ~0.09966865249 +pow (~0.123E1, 0.123E2) = nan +atan2 (~0.123E1, 0.3141592653589793E1) = ~0.3731757303 +pow (~0.123E1, 0.3141592653589793E1) = nan +atan2 (~0.123E1, 0.2718281828459045E1) = ~0.4249241031 +pow (~0.123E1, 0.2718281828459045E1) = nan +atan2 (~0.123E1, 0.123E1) = ~0.7853981634 +pow (~0.123E1, 0.123E1) = nan +atan2 (~0.123E1, 0.123) = ~1.471127674 +pow (~0.123E1, 0.123) = nan +atan2 (~0.123E1, 0.123E~2) = ~1.569796327 +pow (~0.123E1, 0.123E~2) = nan +atan2 (~0.123E1, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E1, 0.22250738585072014E~307) = nan +atan2 (~0.123E1, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E1, 0.11125369292536007E~307) = nan +atan2 (~0.123E1, 0.5E~323) = ~1.570796327 +pow (~0.123E1, 0.5E~323) = nan +atan2 (~0.123E1, 0.0) = ~1.570796327 +pow (~0.123E1, 0.0) = 1 +atan2 (~0.123E1, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E1, ~0.17976931348623157E309) = 0 +atan2 (~0.123E1, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E1, ~0.8988465674311579E308) = 0 +atan2 (~0.123E1, ~0.123E4) = ~3.140592654 +pow (~0.123E1, ~0.123E4) = 2.610435275E~111 +atan2 (~0.123E1, ~0.123E2) = ~3.041924001 +pow (~0.123E1, ~0.123E2) = nan +atan2 (~0.123E1, ~0.3141592653589793E1) = ~2.768416923 +pow (~0.123E1, ~0.3141592653589793E1) = nan +atan2 (~0.123E1, ~0.2718281828459045E1) = ~2.71666855 +pow (~0.123E1, ~0.2718281828459045E1) = nan +atan2 (~0.123E1, ~0.123E1) = ~2.35619449 +pow (~0.123E1, ~0.123E1) = nan +atan2 (~0.123E1, ~0.123) = ~1.670464979 +pow (~0.123E1, ~0.123) = nan +atan2 (~0.123E1, ~0.123E~2) = ~1.571796326 +pow (~0.123E1, ~0.123E~2) = nan +atan2 (~0.123E1, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E1, ~0.22250738585072014E~307) = nan +atan2 (~0.123E1, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E1, ~0.11125369292536007E~307) = nan +atan2 (~0.123E1, ~0.5E~323) = ~1.570796327 +pow (~0.123E1, ~0.5E~323) = nan +atan2 (~0.123E1, ~0.0) = ~1.570796327 +pow (~0.123E1, ~0.0) = 1 +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123E1, ~inf) = ~3.141592654 +pow (~0.123E1, ~inf) = 0 +atan2 (~0.123E1, nan) = nan +pow (~0.123E1, nan) = nan +atan2 (~0.123E1, inf) = 0 +pow (~0.123E1, inf) = inf +atan2 (~0.123, 0.17976931348623157E309) = ~6.842102115E~310 +pow (~0.123, 0.17976931348623157E309) = 0 +atan2 (~0.123, 0.8988465674311579E308) = ~1.368420423E~309 +pow (~0.123, 0.8988465674311579E308) = 0 +atan2 (~0.123, 0.123E4) = ~9.999999967E~5 +pow (~0.123, 0.123E4) = 0 +atan2 (~0.123, 0.123E2) = ~0.009999666687 +pow (~0.123, 0.123E2) = nan +atan2 (~0.123, 0.3141592653589793E1) = ~0.03913212911 +pow (~0.123, 0.3141592653589793E1) = nan +atan2 (~0.123, 0.2718281828459045E1) = ~0.04521832678 +pow (~0.123, 0.2718281828459045E1) = nan +atan2 (~0.123, 0.123E1) = ~0.09966865249 +pow (~0.123, 0.123E1) = nan +atan2 (~0.123, 0.123) = ~0.7853981634 +pow (~0.123, 0.123) = nan +atan2 (~0.123, 0.123E~2) = ~1.56079666 +pow (~0.123, 0.123E~2) = nan +atan2 (~0.123, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123, 0.22250738585072014E~307) = nan +atan2 (~0.123, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123, 0.11125369292536007E~307) = nan +atan2 (~0.123, 0.5E~323) = ~1.570796327 +pow (~0.123, 0.5E~323) = nan +atan2 (~0.123, 0.0) = ~1.570796327 +pow (~0.123, 0.0) = 1 +atan2 (~0.123, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123, ~0.17976931348623157E309) = inf +atan2 (~0.123, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123, ~0.8988465674311579E308) = inf +atan2 (~0.123, ~0.123E4) = ~3.141492654 +pow (~0.123, ~0.123E4) = inf +atan2 (~0.123, ~0.123E2) = ~3.131592987 +pow (~0.123, ~0.123E2) = nan +atan2 (~0.123, ~0.3141592653589793E1) = ~3.102460524 +pow (~0.123, ~0.3141592653589793E1) = nan +atan2 (~0.123, ~0.2718281828459045E1) = ~3.096374327 +pow (~0.123, ~0.2718281828459045E1) = nan +atan2 (~0.123, ~0.123E1) = ~3.041924001 +pow (~0.123, ~0.123E1) = nan +atan2 (~0.123, ~0.123) = ~2.35619449 +pow (~0.123, ~0.123) = nan +atan2 (~0.123, ~0.123E~2) = ~1.580795993 +pow (~0.123, ~0.123E~2) = nan +atan2 (~0.123, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123, ~0.22250738585072014E~307) = nan +atan2 (~0.123, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123, ~0.11125369292536007E~307) = nan +atan2 (~0.123, ~0.5E~323) = ~1.570796327 +pow (~0.123, ~0.5E~323) = nan +atan2 (~0.123, ~0.0) = ~1.570796327 +pow (~0.123, ~0.0) = 1 +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123, ~inf) = ~3.141592654 +pow (~0.123, ~inf) = inf +atan2 (~0.123, nan) = nan +pow (~0.123, nan) = nan +atan2 (~0.123, inf) = 0 +pow (~0.123, inf) = 0 +atan2 (~0.123E~2, 0.17976931348623157E309) = ~6.842102115E~312 +pow (~0.123E~2, 0.17976931348623157E309) = 0 +atan2 (~0.123E~2, 0.8988465674311579E308) = ~1.368420423E~311 +pow (~0.123E~2, 0.8988465674311579E308) = 0 +atan2 (~0.123E~2, 0.123E4) = ~1E~6 +pow (~0.123E~2, 0.123E4) = 0 +atan2 (~0.123E~2, 0.123E2) = ~9.999999967E~5 +pow (~0.123E~2, 0.123E2) = nan +atan2 (~0.123E~2, 0.3141592653589793E1) = ~3.9152114E~4 +pow (~0.123E~2, 0.3141592653589793E1) = nan +atan2 (~0.123E~2, 0.2718281828459045E1) = ~4.524916818E~4 +pow (~0.123E~2, 0.2718281828459045E1) = nan +atan2 (~0.123E~2, 0.123E1) = ~9.999996667E~4 +pow (~0.123E~2, 0.123E1) = nan +atan2 (~0.123E~2, 0.123) = ~0.009999666687 +pow (~0.123E~2, 0.123) = nan +atan2 (~0.123E~2, 0.123E~2) = ~0.7853981634 +pow (~0.123E~2, 0.123E~2) = nan +atan2 (~0.123E~2, 0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E~2, 0.22250738585072014E~307) = nan +atan2 (~0.123E~2, 0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E~2, 0.11125369292536007E~307) = nan +atan2 (~0.123E~2, 0.5E~323) = ~1.570796327 +pow (~0.123E~2, 0.5E~323) = nan +atan2 (~0.123E~2, 0.0) = ~1.570796327 +pow (~0.123E~2, 0.0) = 1 +atan2 (~0.123E~2, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.123E~2, ~0.17976931348623157E309) = inf +atan2 (~0.123E~2, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.123E~2, ~0.8988465674311579E308) = inf +atan2 (~0.123E~2, ~0.123E4) = ~3.141591654 +pow (~0.123E~2, ~0.123E4) = inf +atan2 (~0.123E~2, ~0.123E2) = ~3.141492654 +pow (~0.123E~2, ~0.123E2) = nan +atan2 (~0.123E~2, ~0.3141592653589793E1) = ~3.141201132 +pow (~0.123E~2, ~0.3141592653589793E1) = nan +atan2 (~0.123E~2, ~0.2718281828459045E1) = ~3.141140162 +pow (~0.123E~2, ~0.2718281828459045E1) = nan +atan2 (~0.123E~2, ~0.123E1) = ~3.140592654 +pow (~0.123E~2, ~0.123E1) = nan +atan2 (~0.123E~2, ~0.123) = ~3.131592987 +pow (~0.123E~2, ~0.123) = nan +atan2 (~0.123E~2, ~0.123E~2) = ~2.35619449 +pow (~0.123E~2, ~0.123E~2) = nan +atan2 (~0.123E~2, ~0.22250738585072014E~307) = ~1.570796327 +pow (~0.123E~2, ~0.22250738585072014E~307) = nan +atan2 (~0.123E~2, ~0.11125369292536007E~307) = ~1.570796327 +pow (~0.123E~2, ~0.11125369292536007E~307) = nan +atan2 (~0.123E~2, ~0.5E~323) = ~1.570796327 +pow (~0.123E~2, ~0.5E~323) = nan +atan2 (~0.123E~2, ~0.0) = ~1.570796327 +pow (~0.123E~2, ~0.0) = 1 +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.123E~2, ~inf) = ~3.141592654 +pow (~0.123E~2, ~inf) = inf +atan2 (~0.123E~2, nan) = nan +pow (~0.123E~2, nan) = nan +atan2 (~0.123E~2, inf) = 0 +pow (~0.123E~2, inf) = 0 +atan2 (~0.22250738585072014E~307, 0.17976931348623157E309) = 0 +pow (~0.22250738585072014E~307, 0.17976931348623157E309) = 0 +atan2 (~0.22250738585072014E~307, 0.8988465674311579E308) = 0 +pow (~0.22250738585072014E~307, 0.8988465674311579E308) = 0 +atan2 (~0.22250738585072014E~307, 0.123E4) = ~1.809003137E~311 +pow (~0.22250738585072014E~307, 0.123E4) = 0 +atan2 (~0.22250738585072014E~307, 0.123E2) = ~1.809003137E~309 +pow (~0.22250738585072014E~307, 0.123E2) = nan +atan2 (~0.22250738585072014E~307, 0.3141592653589793E1) = ~7.082630067E~309 +pow (~0.22250738585072014E~307, 0.3141592653589793E1) = nan +atan2 (~0.22250738585072014E~307, 0.2718281828459045E1) = ~8.185589276E~309 +pow (~0.22250738585072014E~307, 0.2718281828459045E1) = nan +atan2 (~0.22250738585072014E~307, 0.123E1) = ~1.809003137E~308 +pow (~0.22250738585072014E~307, 0.123E1) = nan +atan2 (~0.22250738585072014E~307, 0.123) = ~1.809003137E~307 +pow (~0.22250738585072014E~307, 0.123) = nan +atan2 (~0.22250738585072014E~307, 0.123E~2) = ~1.809003137E~305 +pow (~0.22250738585072014E~307, 0.123E~2) = nan +atan2 (~0.22250738585072014E~307, 0.22250738585072014E~307) = ~0.7853981634 +pow (~0.22250738585072014E~307, 0.22250738585072014E~307) = nan +atan2 (~0.22250738585072014E~307, 0.11125369292536007E~307) = ~1.107148718 +pow (~0.22250738585072014E~307, 0.11125369292536007E~307) = nan +atan2 (~0.22250738585072014E~307, 0.5E~323) = ~1.570796327 +pow (~0.22250738585072014E~307, 0.5E~323) = nan +atan2 (~0.22250738585072014E~307, 0.0) = ~1.570796327 +pow (~0.22250738585072014E~307, 0.0) = 1 +atan2 (~0.22250738585072014E~307, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.17976931348623157E309) = inf +atan2 (~0.22250738585072014E~307, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.8988465674311579E308) = inf +atan2 (~0.22250738585072014E~307, ~0.123E4) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E4) = inf +atan2 (~0.22250738585072014E~307, ~0.123E2) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E2) = nan +atan2 (~0.22250738585072014E~307, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.3141592653589793E1) = nan +atan2 (~0.22250738585072014E~307, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.2718281828459045E1) = nan +atan2 (~0.22250738585072014E~307, ~0.123E1) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E1) = nan +atan2 (~0.22250738585072014E~307, ~0.123) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123) = nan +atan2 (~0.22250738585072014E~307, ~0.123E~2) = ~3.141592654 +pow (~0.22250738585072014E~307, ~0.123E~2) = nan +atan2 (~0.22250738585072014E~307, ~0.22250738585072014E~307) = ~2.35619449 +pow (~0.22250738585072014E~307, ~0.22250738585072014E~307) = nan +atan2 (~0.22250738585072014E~307, ~0.11125369292536007E~307) = ~2.034443936 +pow (~0.22250738585072014E~307, ~0.11125369292536007E~307) = nan +atan2 (~0.22250738585072014E~307, ~0.5E~323) = ~1.570796327 +pow (~0.22250738585072014E~307, ~0.5E~323) = nan +atan2 (~0.22250738585072014E~307, ~0.0) = ~1.570796327 +pow (~0.22250738585072014E~307, ~0.0) = 1 +atan2 (~0.22250738585072014E~307, inf) = 0 +pow (~0.22250738585072014E~307, inf) = 0 +atan2 (~0.22250738585072014E~307, ~inf) = ~3.141592654 +pow (~0.22250738585072014E~307, ~inf) = inf +atan2 (~0.22250738585072014E~307, nan) = nan +pow (~0.22250738585072014E~307, nan) = nan +atan2 (~0.22250738585072014E~307, inf) = 0 +pow (~0.22250738585072014E~307, inf) = 0 +atan2 (~0.11125369292536007E~307, 0.17976931348623157E309) = 0 +pow (~0.11125369292536007E~307, 0.17976931348623157E309) = 0 +atan2 (~0.11125369292536007E~307, 0.8988465674311579E308) = 0 +pow (~0.11125369292536007E~307, 0.8988465674311579E308) = 0 +atan2 (~0.11125369292536007E~307, 0.123E4) = ~9.045015685E~312 +pow (~0.11125369292536007E~307, 0.123E4) = 0 +atan2 (~0.11125369292536007E~307, 0.123E2) = ~9.045015685E~310 +pow (~0.11125369292536007E~307, 0.123E2) = nan +atan2 (~0.11125369292536007E~307, 0.3141592653589793E1) = ~3.541315033E~309 +pow (~0.11125369292536007E~307, 0.3141592653589793E1) = nan +atan2 (~0.11125369292536007E~307, 0.2718281828459045E1) = ~4.092794638E~309 +pow (~0.11125369292536007E~307, 0.2718281828459045E1) = nan +atan2 (~0.11125369292536007E~307, 0.123E1) = ~9.045015685E~309 +pow (~0.11125369292536007E~307, 0.123E1) = nan +atan2 (~0.11125369292536007E~307, 0.123) = ~9.045015685E~308 +pow (~0.11125369292536007E~307, 0.123) = nan +atan2 (~0.11125369292536007E~307, 0.123E~2) = ~9.045015685E~306 +pow (~0.11125369292536007E~307, 0.123E~2) = nan +atan2 (~0.11125369292536007E~307, 0.22250738585072014E~307) = ~0.463647609 +pow (~0.11125369292536007E~307, 0.22250738585072014E~307) = nan +atan2 (~0.11125369292536007E~307, 0.11125369292536007E~307) = ~0.7853981634 +pow (~0.11125369292536007E~307, 0.11125369292536007E~307) = nan +atan2 (~0.11125369292536007E~307, 0.5E~323) = ~1.570796327 +pow (~0.11125369292536007E~307, 0.5E~323) = nan +atan2 (~0.11125369292536007E~307, 0.0) = ~1.570796327 +pow (~0.11125369292536007E~307, 0.0) = 1 +atan2 (~0.11125369292536007E~307, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.17976931348623157E309) = inf +atan2 (~0.11125369292536007E~307, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.8988465674311579E308) = inf +atan2 (~0.11125369292536007E~307, ~0.123E4) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E4) = inf +atan2 (~0.11125369292536007E~307, ~0.123E2) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E2) = nan +atan2 (~0.11125369292536007E~307, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.3141592653589793E1) = nan +atan2 (~0.11125369292536007E~307, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.2718281828459045E1) = nan +atan2 (~0.11125369292536007E~307, ~0.123E1) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E1) = nan +atan2 (~0.11125369292536007E~307, ~0.123) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123) = nan +atan2 (~0.11125369292536007E~307, ~0.123E~2) = ~3.141592654 +pow (~0.11125369292536007E~307, ~0.123E~2) = nan +atan2 (~0.11125369292536007E~307, ~0.22250738585072014E~307) = ~2.677945045 +pow (~0.11125369292536007E~307, ~0.22250738585072014E~307) = nan +atan2 (~0.11125369292536007E~307, ~0.11125369292536007E~307) = ~2.35619449 +pow (~0.11125369292536007E~307, ~0.11125369292536007E~307) = nan +atan2 (~0.11125369292536007E~307, ~0.5E~323) = ~1.570796327 +pow (~0.11125369292536007E~307, ~0.5E~323) = nan +atan2 (~0.11125369292536007E~307, ~0.0) = ~1.570796327 +pow (~0.11125369292536007E~307, ~0.0) = 1 +atan2 (~0.11125369292536007E~307, inf) = 0 +pow (~0.11125369292536007E~307, inf) = 0 +atan2 (~0.11125369292536007E~307, ~inf) = ~3.141592654 +pow (~0.11125369292536007E~307, ~inf) = inf +atan2 (~0.11125369292536007E~307, nan) = nan +pow (~0.11125369292536007E~307, nan) = nan +atan2 (~0.11125369292536007E~307, inf) = 0 +pow (~0.11125369292536007E~307, inf) = 0 +atan2 (~0.5E~323, 0.17976931348623157E309) = 0 +pow (~0.5E~323, 0.17976931348623157E309) = 0 +atan2 (~0.5E~323, 0.8988465674311579E308) = 0 +pow (~0.5E~323, 0.8988465674311579E308) = 0 +atan2 (~0.5E~323, 0.123E4) = 0 +pow (~0.5E~323, 0.123E4) = 0 +atan2 (~0.5E~323, 0.123E2) = 0 +pow (~0.5E~323, 0.123E2) = nan +atan2 (~0.5E~323, 0.3141592653589793E1) = 0 +pow (~0.5E~323, 0.3141592653589793E1) = nan +atan2 (~0.5E~323, 0.2718281828459045E1) = 0 +pow (~0.5E~323, 0.2718281828459045E1) = nan +atan2 (~0.5E~323, 0.123E1) = ~4.940656458E~324 +pow (~0.5E~323, 0.123E1) = nan +atan2 (~0.5E~323, 0.123) = ~3.952525167E~323 +pow (~0.5E~323, 0.123) = nan +atan2 (~0.5E~323, 0.123E~2) = ~4.016753701E~321 +pow (~0.5E~323, 0.123E~2) = nan +atan2 (~0.5E~323, 0.22250738585072014E~307) = ~2.220446049E~16 +pow (~0.5E~323, 0.22250738585072014E~307) = nan +atan2 (~0.5E~323, 0.11125369292536007E~307) = ~4.440892099E~16 +pow (~0.5E~323, 0.11125369292536007E~307) = nan +atan2 (~0.5E~323, 0.5E~323) = ~0.7853981634 +pow (~0.5E~323, 0.5E~323) = nan +atan2 (~0.5E~323, 0.0) = ~1.570796327 +pow (~0.5E~323, 0.0) = 1 +atan2 (~0.5E~323, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.5E~323, ~0.17976931348623157E309) = inf +atan2 (~0.5E~323, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.5E~323, ~0.8988465674311579E308) = inf +atan2 (~0.5E~323, ~0.123E4) = ~3.141592654 +pow (~0.5E~323, ~0.123E4) = inf +atan2 (~0.5E~323, ~0.123E2) = ~3.141592654 +pow (~0.5E~323, ~0.123E2) = nan +atan2 (~0.5E~323, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.5E~323, ~0.3141592653589793E1) = nan +atan2 (~0.5E~323, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.5E~323, ~0.2718281828459045E1) = nan +atan2 (~0.5E~323, ~0.123E1) = ~3.141592654 +pow (~0.5E~323, ~0.123E1) = nan +atan2 (~0.5E~323, ~0.123) = ~3.141592654 +pow (~0.5E~323, ~0.123) = nan +atan2 (~0.5E~323, ~0.123E~2) = ~3.141592654 +pow (~0.5E~323, ~0.123E~2) = nan +atan2 (~0.5E~323, ~0.22250738585072014E~307) = ~3.141592654 +pow (~0.5E~323, ~0.22250738585072014E~307) = nan +atan2 (~0.5E~323, ~0.11125369292536007E~307) = ~3.141592654 +pow (~0.5E~323, ~0.11125369292536007E~307) = nan +atan2 (~0.5E~323, ~0.5E~323) = ~2.35619449 +pow (~0.5E~323, ~0.5E~323) = nan +atan2 (~0.5E~323, ~0.0) = ~1.570796327 +pow (~0.5E~323, ~0.0) = 1 +atan2 (~0.5E~323, inf) = 0 +pow (~0.5E~323, inf) = 0 +atan2 (~0.5E~323, ~inf) = ~3.141592654 +pow (~0.5E~323, ~inf) = inf +atan2 (~0.5E~323, nan) = nan +pow (~0.5E~323, nan) = nan +atan2 (~0.5E~323, inf) = 0 +pow (~0.5E~323, inf) = 0 +atan2 (~0.0, 0.17976931348623157E309) = 0 +pow (~0.0, 0.17976931348623157E309) = 0 +atan2 (~0.0, 0.8988465674311579E308) = 0 +pow (~0.0, 0.8988465674311579E308) = 0 +atan2 (~0.0, 0.123E4) = 0 +pow (~0.0, 0.123E4) = 0 +atan2 (~0.0, 0.123E2) = 0 +pow (~0.0, 0.123E2) = 0 +atan2 (~0.0, 0.3141592653589793E1) = 0 +pow (~0.0, 0.3141592653589793E1) = 0 +atan2 (~0.0, 0.2718281828459045E1) = 0 +pow (~0.0, 0.2718281828459045E1) = 0 +atan2 (~0.0, 0.123E1) = 0 +pow (~0.0, 0.123E1) = 0 +atan2 (~0.0, 0.123) = 0 +pow (~0.0, 0.123) = 0 +atan2 (~0.0, 0.123E~2) = 0 +pow (~0.0, 0.123E~2) = 0 +atan2 (~0.0, 0.22250738585072014E~307) = 0 +pow (~0.0, 0.22250738585072014E~307) = 0 +atan2 (~0.0, 0.11125369292536007E~307) = 0 +pow (~0.0, 0.11125369292536007E~307) = 0 +atan2 (~0.0, 0.5E~323) = 0 +pow (~0.0, 0.5E~323) = 0 +atan2 (~0.0, 0.0) = 0 +pow (~0.0, 0.0) = 1 +atan2 (~0.0, ~0.17976931348623157E309) = ~3.141592654 +pow (~0.0, ~0.17976931348623157E309) = inf +atan2 (~0.0, ~0.8988465674311579E308) = ~3.141592654 +pow (~0.0, ~0.8988465674311579E308) = inf +atan2 (~0.0, ~0.123E4) = ~3.141592654 +pow (~0.0, ~0.123E4) = inf +atan2 (~0.0, ~0.123E2) = ~3.141592654 +pow (~0.0, ~0.123E2) = inf +atan2 (~0.0, ~0.3141592653589793E1) = ~3.141592654 +pow (~0.0, ~0.3141592653589793E1) = inf +atan2 (~0.0, ~0.2718281828459045E1) = ~3.141592654 +pow (~0.0, ~0.2718281828459045E1) = inf +atan2 (~0.0, ~0.123E1) = ~3.141592654 +pow (~0.0, ~0.123E1) = inf +atan2 (~0.0, ~0.123) = ~3.141592654 +pow (~0.0, ~0.123) = inf +atan2 (~0.0, ~0.123E~2) = ~3.141592654 +pow (~0.0, ~0.123E~2) = inf +atan2 (~0.0, ~0.22250738585072014E~307) = ~3.141592654 +pow (~0.0, ~0.22250738585072014E~307) = inf +atan2 (~0.0, ~0.11125369292536007E~307) = ~3.141592654 +pow (~0.0, ~0.11125369292536007E~307) = inf +atan2 (~0.0, ~0.5E~323) = ~3.141592654 +pow (~0.0, ~0.5E~323) = inf +atan2 (~0.0, ~0.0) = ~3.141592654 +pow (~0.0, ~0.0) = 1 +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (~0.0, ~inf) = ~3.141592654 +pow (~0.0, ~inf) = inf +atan2 (~0.0, nan) = nan +pow (~0.0, nan) = nan +atan2 (~0.0, inf) = 0 +pow (~0.0, inf) = 0 +atan2 (inf, 0.17976931348623157E309) = 1.570796327 +pow (inf, 0.17976931348623157E309) = inf +atan2 (inf, 0.8988465674311579E308) = 1.570796327 +pow (inf, 0.8988465674311579E308) = inf +atan2 (inf, 0.123E4) = 1.570796327 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796327 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.3141592653589793E1) = 1.570796327 +pow (inf, 0.3141592653589793E1) = inf +atan2 (inf, 0.2718281828459045E1) = 1.570796327 +pow (inf, 0.2718281828459045E1) = inf +atan2 (inf, 0.123E1) = 1.570796327 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796327 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796327 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.22250738585072014E~307) = 1.570796327 +pow (inf, 0.22250738585072014E~307) = inf +atan2 (inf, 0.11125369292536007E~307) = 1.570796327 +pow (inf, 0.11125369292536007E~307) = inf +atan2 (inf, 0.5E~323) = 1.570796327 +pow (inf, 0.5E~323) = inf +atan2 (inf, 0.0) = 1.570796327 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.17976931348623157E309) = 1.570796327 +pow (inf, ~0.17976931348623157E309) = 0 +atan2 (inf, ~0.8988465674311579E308) = 1.570796327 +pow (inf, ~0.8988465674311579E308) = 0 +atan2 (inf, ~0.123E4) = 1.570796327 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796327 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.3141592653589793E1) = 1.570796327 +pow (inf, ~0.3141592653589793E1) = 0 +atan2 (inf, ~0.2718281828459045E1) = 1.570796327 +pow (inf, ~0.2718281828459045E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796327 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796327 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796327 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.22250738585072014E~307) = 1.570796327 +pow (inf, ~0.22250738585072014E~307) = 0 +atan2 (inf, ~0.11125369292536007E~307) = 1.570796327 +pow (inf, ~0.11125369292536007E~307) = 0 +atan2 (inf, ~0.5E~323) = 1.570796327 +pow (inf, ~0.5E~323) = 0 +atan2 (inf, ~0.0) = 1.570796327 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.35619449 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (~inf, 0.17976931348623157E309) = ~1.570796327 +pow (~inf, 0.17976931348623157E309) = inf +atan2 (~inf, 0.8988465674311579E308) = ~1.570796327 +pow (~inf, 0.8988465674311579E308) = inf +atan2 (~inf, 0.123E4) = ~1.570796327 +pow (~inf, 0.123E4) = inf +atan2 (~inf, 0.123E2) = ~1.570796327 +pow (~inf, 0.123E2) = inf +atan2 (~inf, 0.3141592653589793E1) = ~1.570796327 +pow (~inf, 0.3141592653589793E1) = inf +atan2 (~inf, 0.2718281828459045E1) = ~1.570796327 +pow (~inf, 0.2718281828459045E1) = inf +atan2 (~inf, 0.123E1) = ~1.570796327 +pow (~inf, 0.123E1) = inf +atan2 (~inf, 0.123) = ~1.570796327 +pow (~inf, 0.123) = inf +atan2 (~inf, 0.123E~2) = ~1.570796327 +pow (~inf, 0.123E~2) = inf +atan2 (~inf, 0.22250738585072014E~307) = ~1.570796327 +pow (~inf, 0.22250738585072014E~307) = inf +atan2 (~inf, 0.11125369292536007E~307) = ~1.570796327 +pow (~inf, 0.11125369292536007E~307) = inf +atan2 (~inf, 0.5E~323) = ~1.570796327 +pow (~inf, 0.5E~323) = inf +atan2 (~inf, 0.0) = ~1.570796327 +pow (~inf, 0.0) = 1 +atan2 (~inf, ~0.17976931348623157E309) = ~1.570796327 +pow (~inf, ~0.17976931348623157E309) = 0 +atan2 (~inf, ~0.8988465674311579E308) = ~1.570796327 +pow (~inf, ~0.8988465674311579E308) = 0 +atan2 (~inf, ~0.123E4) = ~1.570796327 +pow (~inf, ~0.123E4) = 0 +atan2 (~inf, ~0.123E2) = ~1.570796327 +pow (~inf, ~0.123E2) = 0 +atan2 (~inf, ~0.3141592653589793E1) = ~1.570796327 +pow (~inf, ~0.3141592653589793E1) = 0 +atan2 (~inf, ~0.2718281828459045E1) = ~1.570796327 +pow (~inf, ~0.2718281828459045E1) = 0 +atan2 (~inf, ~0.123E1) = ~1.570796327 +pow (~inf, ~0.123E1) = 0 +atan2 (~inf, ~0.123) = ~1.570796327 +pow (~inf, ~0.123) = 0 +atan2 (~inf, ~0.123E~2) = ~1.570796327 +pow (~inf, ~0.123E~2) = 0 +atan2 (~inf, ~0.22250738585072014E~307) = ~1.570796327 +pow (~inf, ~0.22250738585072014E~307) = 0 +atan2 (~inf, ~0.11125369292536007E~307) = ~1.570796327 +pow (~inf, ~0.11125369292536007E~307) = 0 +atan2 (~inf, ~0.5E~323) = ~1.570796327 +pow (~inf, ~0.5E~323) = 0 +atan2 (~inf, ~0.0) = ~1.570796327 +pow (~inf, ~0.0) = 1 +atan2 (~inf, inf) = ~0.7853981634 +pow (~inf, inf) = inf +atan2 (~inf, ~inf) = ~2.35619449 +pow (~inf, ~inf) = 0 +atan2 (~inf, nan) = nan +pow (~inf, nan) = nan +atan2 (~inf, inf) = ~0.7853981634 +pow (~inf, inf) = inf +atan2 (nan, 0.17976931348623157E309) = nan +pow (nan, 0.17976931348623157E309) = nan +atan2 (nan, 0.8988465674311579E308) = nan +pow (nan, 0.8988465674311579E308) = nan +atan2 (nan, 0.123E4) = nan +pow (nan, 0.123E4) = nan +atan2 (nan, 0.123E2) = nan +pow (nan, 0.123E2) = nan +atan2 (nan, 0.3141592653589793E1) = nan +pow (nan, 0.3141592653589793E1) = nan +atan2 (nan, 0.2718281828459045E1) = nan +pow (nan, 0.2718281828459045E1) = nan +atan2 (nan, 0.123E1) = nan +pow (nan, 0.123E1) = nan +atan2 (nan, 0.123) = nan +pow (nan, 0.123) = nan +atan2 (nan, 0.123E~2) = nan +pow (nan, 0.123E~2) = nan +atan2 (nan, 0.22250738585072014E~307) = nan +pow (nan, 0.22250738585072014E~307) = nan +atan2 (nan, 0.11125369292536007E~307) = nan +pow (nan, 0.11125369292536007E~307) = nan +atan2 (nan, 0.5E~323) = nan +pow (nan, 0.5E~323) = nan +atan2 (nan, 0.0) = nan +pow (nan, 0.0) = 1 +atan2 (nan, ~0.17976931348623157E309) = nan +pow (nan, ~0.17976931348623157E309) = nan +atan2 (nan, ~0.8988465674311579E308) = nan +pow (nan, ~0.8988465674311579E308) = nan +atan2 (nan, ~0.123E4) = nan +pow (nan, ~0.123E4) = nan +atan2 (nan, ~0.123E2) = nan +pow (nan, ~0.123E2) = nan +atan2 (nan, ~0.3141592653589793E1) = nan +pow (nan, ~0.3141592653589793E1) = nan +atan2 (nan, ~0.2718281828459045E1) = nan +pow (nan, ~0.2718281828459045E1) = nan +atan2 (nan, ~0.123E1) = nan +pow (nan, ~0.123E1) = nan +atan2 (nan, ~0.123) = nan +pow (nan, ~0.123) = nan +atan2 (nan, ~0.123E~2) = nan +pow (nan, ~0.123E~2) = nan +atan2 (nan, ~0.22250738585072014E~307) = nan +pow (nan, ~0.22250738585072014E~307) = nan +atan2 (nan, ~0.11125369292536007E~307) = nan +pow (nan, ~0.11125369292536007E~307) = nan +atan2 (nan, ~0.5E~323) = nan +pow (nan, ~0.5E~323) = nan +atan2 (nan, ~0.0) = nan +pow (nan, ~0.0) = 1 +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (nan, ~inf) = nan +pow (nan, ~inf) = nan +atan2 (nan, nan) = nan +pow (nan, nan) = nan +atan2 (nan, inf) = nan +pow (nan, inf) = nan +atan2 (inf, 0.17976931348623157E309) = 1.570796327 +pow (inf, 0.17976931348623157E309) = inf +atan2 (inf, 0.8988465674311579E308) = 1.570796327 +pow (inf, 0.8988465674311579E308) = inf +atan2 (inf, 0.123E4) = 1.570796327 +pow (inf, 0.123E4) = inf +atan2 (inf, 0.123E2) = 1.570796327 +pow (inf, 0.123E2) = inf +atan2 (inf, 0.3141592653589793E1) = 1.570796327 +pow (inf, 0.3141592653589793E1) = inf +atan2 (inf, 0.2718281828459045E1) = 1.570796327 +pow (inf, 0.2718281828459045E1) = inf +atan2 (inf, 0.123E1) = 1.570796327 +pow (inf, 0.123E1) = inf +atan2 (inf, 0.123) = 1.570796327 +pow (inf, 0.123) = inf +atan2 (inf, 0.123E~2) = 1.570796327 +pow (inf, 0.123E~2) = inf +atan2 (inf, 0.22250738585072014E~307) = 1.570796327 +pow (inf, 0.22250738585072014E~307) = inf +atan2 (inf, 0.11125369292536007E~307) = 1.570796327 +pow (inf, 0.11125369292536007E~307) = inf +atan2 (inf, 0.5E~323) = 1.570796327 +pow (inf, 0.5E~323) = inf +atan2 (inf, 0.0) = 1.570796327 +pow (inf, 0.0) = 1 +atan2 (inf, ~0.17976931348623157E309) = 1.570796327 +pow (inf, ~0.17976931348623157E309) = 0 +atan2 (inf, ~0.8988465674311579E308) = 1.570796327 +pow (inf, ~0.8988465674311579E308) = 0 +atan2 (inf, ~0.123E4) = 1.570796327 +pow (inf, ~0.123E4) = 0 +atan2 (inf, ~0.123E2) = 1.570796327 +pow (inf, ~0.123E2) = 0 +atan2 (inf, ~0.3141592653589793E1) = 1.570796327 +pow (inf, ~0.3141592653589793E1) = 0 +atan2 (inf, ~0.2718281828459045E1) = 1.570796327 +pow (inf, ~0.2718281828459045E1) = 0 +atan2 (inf, ~0.123E1) = 1.570796327 +pow (inf, ~0.123E1) = 0 +atan2 (inf, ~0.123) = 1.570796327 +pow (inf, ~0.123) = 0 +atan2 (inf, ~0.123E~2) = 1.570796327 +pow (inf, ~0.123E~2) = 0 +atan2 (inf, ~0.22250738585072014E~307) = 1.570796327 +pow (inf, ~0.22250738585072014E~307) = 0 +atan2 (inf, ~0.11125369292536007E~307) = 1.570796327 +pow (inf, ~0.11125369292536007E~307) = 0 +atan2 (inf, ~0.5E~323) = 1.570796327 +pow (inf, ~0.5E~323) = 0 +atan2 (inf, ~0.0) = 1.570796327 +pow (inf, ~0.0) = 1 +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf +atan2 (inf, ~inf) = 2.35619449 +pow (inf, ~inf) = 0 +atan2 (inf, nan) = nan +pow (inf, nan) = nan +atan2 (inf, inf) = 0.7853981634 +pow (inf, inf) = inf + +Testing *+, *- +SOME *+ AND STANDARD RESULTS DIFFER +(r1, r2, r3): *+(r1, r2, r3) (r1 * r2 + r3) +-------------------------------------------- +(0.17976931348623157E309, 0.17976931348623157E309, 0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.123E4): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.123E2): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.123E1): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.123): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.123E~2): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.5E~323): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, 0.0): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.123E4): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.123E2): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.123E1): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.123): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.123E~2): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.5E~323): inf inf +(0.17976931348623157E309, 0.17976931348623157E309, ~0.0): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.123E4): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.123E2): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.123E1): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.123): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.123E~2): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.5E~323): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, 0.0): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.123E4): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.123E2): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.123E1): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.123): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.123E~2): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.5E~323): inf inf +(0.17976931348623157E309, 0.8988465674311579E308, ~0.0): inf inf +(0.17976931348623157E309, 0.123E4, 0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.123E4, 0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.123E4, 0.123E4): inf inf +(0.17976931348623157E309, 0.123E4, 0.123E2): inf inf +(0.17976931348623157E309, 0.123E4, 0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.123E4, 0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.123E4, 0.123E1): inf inf +(0.17976931348623157E309, 0.123E4, 0.123): inf inf +(0.17976931348623157E309, 0.123E4, 0.123E~2): inf inf +(0.17976931348623157E309, 0.123E4, 0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.123E4, 0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.123E4, 0.5E~323): inf inf +(0.17976931348623157E309, 0.123E4, 0.0): inf inf +(0.17976931348623157E309, 0.123E4, ~0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.123E4, ~0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.123E4, ~0.123E4): inf inf +(0.17976931348623157E309, 0.123E4, ~0.123E2): inf inf +(0.17976931348623157E309, 0.123E4, ~0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.123E4, ~0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.123E4, ~0.123E1): inf inf +(0.17976931348623157E309, 0.123E4, ~0.123): inf inf +(0.17976931348623157E309, 0.123E4, ~0.123E~2): inf inf +(0.17976931348623157E309, 0.123E4, ~0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.123E4, ~0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.123E4, ~0.5E~323): inf inf +(0.17976931348623157E309, 0.123E4, ~0.0): inf inf +(0.17976931348623157E309, 0.123E2, 0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.123E2, 0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.123E2, 0.123E4): inf inf +(0.17976931348623157E309, 0.123E2, 0.123E2): inf inf +(0.17976931348623157E309, 0.123E2, 0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.123E2, 0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.123E2, 0.123E1): inf inf +(0.17976931348623157E309, 0.123E2, 0.123): inf inf +(0.17976931348623157E309, 0.123E2, 0.123E~2): inf inf +(0.17976931348623157E309, 0.123E2, 0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.123E2, 0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.123E2, 0.5E~323): inf inf +(0.17976931348623157E309, 0.123E2, 0.0): inf inf +(0.17976931348623157E309, 0.123E2, ~0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.123E2, ~0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.123E2, ~0.123E4): inf inf +(0.17976931348623157E309, 0.123E2, ~0.123E2): inf inf +(0.17976931348623157E309, 0.123E2, ~0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.123E2, ~0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.123E2, ~0.123E1): inf inf +(0.17976931348623157E309, 0.123E2, ~0.123): inf inf +(0.17976931348623157E309, 0.123E2, ~0.123E~2): inf inf +(0.17976931348623157E309, 0.123E2, ~0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.123E2, ~0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.123E2, ~0.5E~323): inf inf +(0.17976931348623157E309, 0.123E2, ~0.0): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.123E4): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.123E2): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.123E1): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.123): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.123E~2): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.5E~323): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, 0.0): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.123E4): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.123E2): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.123E1): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.123): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.123E~2): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.5E~323): inf inf +(0.17976931348623157E309, 0.3141592653589793E1, ~0.0): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.123E4): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.123E2): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.123E1): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.123): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.123E~2): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.5E~323): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, 0.0): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.123E4): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.123E2): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.123E1): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.123): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.123E~2): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.5E~323): inf inf +(0.17976931348623157E309, 0.2718281828459045E1, ~0.0): inf inf +(0.17976931348623157E309, 0.123E1, 0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.123E1, 0.8988465674311579E308): inf inf +(0.17976931348623157E309, 0.123E1, 0.123E4): inf inf +(0.17976931348623157E309, 0.123E1, 0.123E2): inf inf +(0.17976931348623157E309, 0.123E1, 0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.123E1, 0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.123E1, 0.123E1): inf inf +(0.17976931348623157E309, 0.123E1, 0.123): inf inf +(0.17976931348623157E309, 0.123E1, 0.123E~2): inf inf +(0.17976931348623157E309, 0.123E1, 0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.123E1, 0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.123E1, 0.5E~323): inf inf +(0.17976931348623157E309, 0.123E1, 0.0): inf inf +(0.17976931348623157E309, 0.123E1, ~0.17976931348623157E309): 0.4134694210183326E308 0.4134694210183326E308 +(0.17976931348623157E309, 0.123E1, ~0.8988465674311579E308): 0.13123159884494904E309 0.13123159884494904E309 +(0.17976931348623157E309, 0.123E1, ~0.123E4): inf inf +(0.17976931348623157E309, 0.123E1, ~0.123E2): inf inf +(0.17976931348623157E309, 0.123E1, ~0.3141592653589793E1): inf inf +(0.17976931348623157E309, 0.123E1, ~0.2718281828459045E1): inf inf +(0.17976931348623157E309, 0.123E1, ~0.123E1): inf inf +(0.17976931348623157E309, 0.123E1, ~0.123): inf inf +(0.17976931348623157E309, 0.123E1, ~0.123E~2): inf inf +(0.17976931348623157E309, 0.123E1, ~0.22250738585072014E~307): inf inf +(0.17976931348623157E309, 0.123E1, ~0.11125369292536007E~307): inf inf +(0.17976931348623157E309, 0.123E1, ~0.5E~323): inf inf +(0.17976931348623157E309, 0.123E1, ~0.0): inf inf +(0.17976931348623157E309, 0.123, 0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.123, 0.8988465674311579E308): 0.11199628230192226E309 0.11199628230192226E309 +(0.17976931348623157E309, 0.123, 0.123E4): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, 0.123E2): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, 0.3141592653589793E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, 0.2718281828459045E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, 0.123E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, 0.123): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, 0.123E~2): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, 0.22250738585072014E~307): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, 0.11125369292536007E~307): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, 0.5E~323): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, 0.0): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, ~0.17976931348623157E309): ~0.15765768792742509E309 ~0.15765768792742509E309 +(0.17976931348623157E309, 0.123, ~0.8988465674311579E308): ~0.677730311843093E308 ~0.677730311843093E308 +(0.17976931348623157E309, 0.123, ~0.123E4): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, ~0.123E2): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, ~0.3141592653589793E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, ~0.2718281828459045E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, ~0.123E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, ~0.123): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, ~0.123E~2): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, ~0.22250738585072014E~307): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, ~0.11125369292536007E~307): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, ~0.5E~323): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123, ~0.0): 0.22111625558806483E308 0.22111625558806483E308 +(0.17976931348623157E309, 0.123E~2, 0.17976931348623157E309): inf inf +(0.17976931348623157E309, 0.123E~2, 0.8988465674311579E308): 0.9010577299870385E308 0.9010577299870385E308 +(0.17976931348623157E309, 0.123E~2, 0.123E4): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, 0.123E2): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, 0.3141592653589793E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, 0.2718281828459045E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, 0.123E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, 0.123): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, 0.123E~2): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, 0.22250738585072014E~307): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, 0.11125369292536007E~307): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, 0.5E~323): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, 0.0): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, ~0.17976931348623157E309): ~0.17954819723064351E309 ~0.17954819723064351E309 +(0.17976931348623157E309, 0.123E~2, ~0.8988465674311579E308): ~0.8966354048752772E308 ~0.8966354048752772E308 +(0.17976931348623157E309, 0.123E~2, ~0.123E4): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, ~0.123E2): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, ~0.3141592653589793E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, ~0.2718281828459045E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, ~0.123E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, ~0.123): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, ~0.123E~2): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, ~0.22250738585072014E~307): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, ~0.11125369292536007E~307): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, ~0.5E~323): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.123E~2, ~0.0): 0.2211162555880648E306 0.2211162555880648E306 +(0.17976931348623157E309, 0.22250738585072014E~307, 0.123E4): 0.1234E4 0.1234E4 +(0.17976931348623157E309, 0.22250738585072014E~307, 0.123E2): 0.163E2 0.163E2 +(0.17976931348623157E309, 0.22250738585072014E~307, 0.3141592653589793E1): 0.7141592653589793E1 0.7141592653589793E1 +(0.17976931348623157E309, 0.22250738585072014E~307, 0.123): 0.4122999999999999E1 0.4122999999999999E1 +(0.17976931348623157E309, 0.22250738585072014E~307, 0.123E~2): 0.400123E1 0.400123E1 +(0.17976931348623157E309, 0.22250738585072014E~307, ~0.123E4): ~0.1226E4 ~0.1226E4 +(0.17976931348623157E309, 0.22250738585072014E~307, ~0.123E2): ~0.83E1 ~0.83E1 +(0.17976931348623157E309, 0.22250738585072014E~307, ~0.123): 0.3877E1 0.3877E1 +(0.17976931348623157E309, 0.22250738585072014E~307, ~0.123E~2): 0.39987699999999995E1 0.39987699999999995E1 +(0.17976931348623157E309, 0.11125369292536007E~307, 0.123E4): 0.1232E4 0.1232E4 +(0.17976931348623157E309, 0.11125369292536007E~307, 0.123E2): 0.143E2 0.143E2 +(0.17976931348623157E309, 0.11125369292536007E~307, 0.3141592653589793E1): 0.5141592653589793E1 0.5141592653589793E1 +(0.17976931348623157E309, 0.11125369292536007E~307, 0.2718281828459045E1): 0.4718281828459045E1 0.4718281828459045E1 +(0.17976931348623157E309, 0.11125369292536007E~307, 0.123E1): 0.32299999999999995E1 0.32299999999999995E1 +(0.17976931348623157E309, 0.11125369292536007E~307, 0.123E~2): 0.20012299999999996E1 0.20012299999999996E1 +(0.17976931348623157E309, 0.11125369292536007E~307, ~0.123E4): ~0.1228E4 ~0.1228E4 +(0.17976931348623157E309, 0.11125369292536007E~307, ~0.123E2): ~0.103E2 ~0.103E2 +(0.17976931348623157E309, 0.11125369292536007E~307, ~0.123E~2): 0.19987699999999997E1 0.19987699999999997E1 +(0.17976931348623157E309, 0.5E~323, 0.123E4): 0.123E4 0.123E4 +(0.17976931348623157E309, 0.5E~323, 0.123E2): 0.123E2 0.123E2 +(0.17976931348623157E309, 0.5E~323, ~0.123E4): ~0.123E4 ~0.123E4 +(0.17976931348623157E309, 0.5E~323, ~0.123E2): ~0.123E2 ~0.123E2 +(0.17976931348623157E309, ~0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.123): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, 0.0): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.123): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.17976931348623157E309, ~0.0): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.123): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, 0.0): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.123): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.8988465674311579E308, ~0.0): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.123): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, 0.0): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.123): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.123E4, ~0.0): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.123): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, 0.0): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.123): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.123E2, ~0.0): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.123): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, 0.0): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.123): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.3141592653589793E1, ~0.0): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.123): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, 0.0): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.123): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.2718281828459045E1, ~0.0): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, 0.17976931348623157E309): ~0.4134694210183326E308 ~0.4134694210183326E308 +(0.17976931348623157E309, ~0.123E1, 0.8988465674311579E308): ~0.13123159884494904E309 ~0.13123159884494904E309 +(0.17976931348623157E309, ~0.123E1, 0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, 0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, 0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, 0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, 0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, 0.123): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, 0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, 0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, 0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, 0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, 0.0): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.8988465674311579E308): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.123E4): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.123E2): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.3141592653589793E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.2718281828459045E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.123E1): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.123): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.123E~2): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.22250738585072014E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.11125369292536007E~307): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.5E~323): ~inf ~inf +(0.17976931348623157E309, ~0.123E1, ~0.0): ~inf ~inf +(0.17976931348623157E309, ~0.123, 0.17976931348623157E309): 0.15765768792742509E309 0.15765768792742509E309 +(0.17976931348623157E309, ~0.123, 0.8988465674311579E308): 0.677730311843093E308 0.677730311843093E308 +(0.17976931348623157E309, ~0.123, 0.123E4): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, 0.123E2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, 0.3141592653589793E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, 0.2718281828459045E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, 0.123E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, 0.123): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, 0.123E~2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, 0.22250738585072014E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, 0.11125369292536007E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, 0.5E~323): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, 0.0): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, ~0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.123, ~0.8988465674311579E308): ~0.11199628230192226E309 ~0.11199628230192226E309 +(0.17976931348623157E309, ~0.123, ~0.123E4): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, ~0.123E2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, ~0.3141592653589793E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, ~0.2718281828459045E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, ~0.123E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, ~0.123): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, ~0.123E~2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, ~0.22250738585072014E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, ~0.11125369292536007E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, ~0.5E~323): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123, ~0.0): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.17976931348623157E309, ~0.123E~2, 0.17976931348623157E309): 0.17954819723064351E309 0.17954819723064351E309 +(0.17976931348623157E309, ~0.123E~2, 0.8988465674311579E308): 0.8966354048752772E308 0.8966354048752772E308 +(0.17976931348623157E309, ~0.123E~2, 0.123E4): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, 0.123E2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, 0.3141592653589793E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, 0.2718281828459045E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, 0.123E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, 0.123): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, 0.123E~2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, 0.22250738585072014E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, 0.11125369292536007E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, 0.5E~323): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, 0.0): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, ~0.17976931348623157E309): ~inf ~inf +(0.17976931348623157E309, ~0.123E~2, ~0.8988465674311579E308): ~0.9010577299870385E308 ~0.9010577299870385E308 +(0.17976931348623157E309, ~0.123E~2, ~0.123E4): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, ~0.123E2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, ~0.3141592653589793E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, ~0.2718281828459045E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, ~0.123E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, ~0.123): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, ~0.123E~2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, ~0.22250738585072014E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, ~0.11125369292536007E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, ~0.5E~323): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.123E~2, ~0.0): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.17976931348623157E309, ~0.22250738585072014E~307, 0.123E4): 0.1226E4 0.1226E4 +(0.17976931348623157E309, ~0.22250738585072014E~307, 0.123E2): 0.83E1 0.83E1 +(0.17976931348623157E309, ~0.22250738585072014E~307, 0.123): ~0.3877E1 ~0.3877E1 +(0.17976931348623157E309, ~0.22250738585072014E~307, 0.123E~2): ~0.39987699999999995E1 ~0.39987699999999995E1 +(0.17976931348623157E309, ~0.22250738585072014E~307, ~0.123E4): ~0.1234E4 ~0.1234E4 +(0.17976931348623157E309, ~0.22250738585072014E~307, ~0.123E2): ~0.163E2 ~0.163E2 +(0.17976931348623157E309, ~0.22250738585072014E~307, ~0.3141592653589793E1): ~0.7141592653589793E1 ~0.7141592653589793E1 +(0.17976931348623157E309, ~0.22250738585072014E~307, ~0.123): ~0.4122999999999999E1 ~0.4122999999999999E1 +(0.17976931348623157E309, ~0.22250738585072014E~307, ~0.123E~2): ~0.400123E1 ~0.400123E1 +(0.17976931348623157E309, ~0.11125369292536007E~307, 0.123E4): 0.1228E4 0.1228E4 +(0.17976931348623157E309, ~0.11125369292536007E~307, 0.123E2): 0.103E2 0.103E2 +(0.17976931348623157E309, ~0.11125369292536007E~307, 0.123E~2): ~0.19987699999999997E1 ~0.19987699999999997E1 +(0.17976931348623157E309, ~0.11125369292536007E~307, ~0.123E4): ~0.1232E4 ~0.1232E4 +(0.17976931348623157E309, ~0.11125369292536007E~307, ~0.123E2): ~0.143E2 ~0.143E2 +(0.17976931348623157E309, ~0.11125369292536007E~307, ~0.3141592653589793E1): ~0.5141592653589793E1 ~0.5141592653589793E1 +(0.17976931348623157E309, ~0.11125369292536007E~307, ~0.2718281828459045E1): ~0.4718281828459045E1 ~0.4718281828459045E1 +(0.17976931348623157E309, ~0.11125369292536007E~307, ~0.123E1): ~0.32299999999999995E1 ~0.32299999999999995E1 +(0.17976931348623157E309, ~0.11125369292536007E~307, ~0.123E~2): ~0.20012299999999996E1 ~0.20012299999999996E1 +(0.17976931348623157E309, ~0.5E~323, 0.123E4): 0.123E4 0.123E4 +(0.17976931348623157E309, ~0.5E~323, 0.123E2): 0.123E2 0.123E2 +(0.17976931348623157E309, ~0.5E~323, ~0.123E4): ~0.123E4 ~0.123E4 +(0.17976931348623157E309, ~0.5E~323, ~0.123E2): ~0.123E2 ~0.123E2 +(0.8988465674311579E308, 0.17976931348623157E309, 0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.123E4): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.123E2): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.123E1): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.123): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.123E~2): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.5E~323): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, 0.0): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.123E4): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.123E2): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.123E1): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.123): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.123E~2): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.5E~323): inf inf +(0.8988465674311579E308, 0.17976931348623157E309, ~0.0): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.123E4): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.123E2): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.123E1): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.123): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.123E~2): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.5E~323): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, 0.0): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.123E4): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.123E2): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.123E1): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.123): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.123E~2): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.5E~323): inf inf +(0.8988465674311579E308, 0.8988465674311579E308, ~0.0): inf inf +(0.8988465674311579E308, 0.123E4, 0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.123E4, 0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.123E4, 0.123E4): inf inf +(0.8988465674311579E308, 0.123E4, 0.123E2): inf inf +(0.8988465674311579E308, 0.123E4, 0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.123E4, 0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.123E4, 0.123E1): inf inf +(0.8988465674311579E308, 0.123E4, 0.123): inf inf +(0.8988465674311579E308, 0.123E4, 0.123E~2): inf inf +(0.8988465674311579E308, 0.123E4, 0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.123E4, 0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.123E4, 0.5E~323): inf inf +(0.8988465674311579E308, 0.123E4, 0.0): inf inf +(0.8988465674311579E308, 0.123E4, ~0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.123E4, ~0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.123E4, ~0.123E4): inf inf +(0.8988465674311579E308, 0.123E4, ~0.123E2): inf inf +(0.8988465674311579E308, 0.123E4, ~0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.123E4, ~0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.123E4, ~0.123E1): inf inf +(0.8988465674311579E308, 0.123E4, ~0.123): inf inf +(0.8988465674311579E308, 0.123E4, ~0.123E~2): inf inf +(0.8988465674311579E308, 0.123E4, ~0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.123E4, ~0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.123E4, ~0.5E~323): inf inf +(0.8988465674311579E308, 0.123E4, ~0.0): inf inf +(0.8988465674311579E308, 0.123E2, 0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.123E2, 0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.123E2, 0.123E4): inf inf +(0.8988465674311579E308, 0.123E2, 0.123E2): inf inf +(0.8988465674311579E308, 0.123E2, 0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.123E2, 0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.123E2, 0.123E1): inf inf +(0.8988465674311579E308, 0.123E2, 0.123): inf inf +(0.8988465674311579E308, 0.123E2, 0.123E~2): inf inf +(0.8988465674311579E308, 0.123E2, 0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.123E2, 0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.123E2, 0.5E~323): inf inf +(0.8988465674311579E308, 0.123E2, 0.0): inf inf +(0.8988465674311579E308, 0.123E2, ~0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.123E2, ~0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.123E2, ~0.123E4): inf inf +(0.8988465674311579E308, 0.123E2, ~0.123E2): inf inf +(0.8988465674311579E308, 0.123E2, ~0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.123E2, ~0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.123E2, ~0.123E1): inf inf +(0.8988465674311579E308, 0.123E2, ~0.123): inf inf +(0.8988465674311579E308, 0.123E2, ~0.123E~2): inf inf +(0.8988465674311579E308, 0.123E2, ~0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.123E2, ~0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.123E2, ~0.5E~323): inf inf +(0.8988465674311579E308, 0.123E2, ~0.0): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.123E4): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.123E2): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.123E1): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.123): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.123E~2): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.5E~323): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, 0.0): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.17976931348623157E309): 0.10261166380838123E309 0.10261166380838123E309 +(0.8988465674311579E308, 0.3141592653589793E1, ~0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.123E4): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.123E2): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.123E1): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.123): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.123E~2): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.5E~323): inf inf +(0.8988465674311579E308, 0.3141592653589793E1, ~0.0): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.123E4): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.123E2): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.123E1): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.123): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.123E~2): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.5E~323): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, 0.0): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.17976931348623157E309): 0.6456251559585884E308 0.6456251559585884E308 +(0.8988465674311579E308, 0.2718281828459045E1, ~0.8988465674311579E308): 0.15444717233897463E309 0.15444717233897463E309 +(0.8988465674311579E308, 0.2718281828459045E1, ~0.123E4): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.123E2): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.3141592653589793E1): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.2718281828459045E1): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.123E1): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.123): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.123E~2): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.22250738585072014E~307): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.11125369292536007E~307): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.5E~323): inf inf +(0.8988465674311579E308, 0.2718281828459045E1, ~0.0): inf inf +(0.8988465674311579E308, 0.123E1, 0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.123E1, 0.8988465674311579E308): inf inf +(0.8988465674311579E308, 0.123E1, 0.123E4): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, 0.123E2): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, 0.3141592653589793E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, 0.2718281828459045E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, 0.123E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, 0.123): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, 0.123E~2): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, 0.22250738585072014E~307): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, 0.11125369292536007E~307): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, 0.5E~323): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, 0.0): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219915E308 +(0.8988465674311579E308, 0.123E1, ~0.8988465674311579E308): 0.2067347105091663E308 0.2067347105091663E308 +(0.8988465674311579E308, 0.123E1, ~0.123E4): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, ~0.123E2): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, ~0.3141592653589793E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, ~0.2718281828459045E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, ~0.123E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, ~0.123): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, ~0.123E~2): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, ~0.22250738585072014E~307): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, ~0.11125369292536007E~307): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, ~0.5E~323): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123E1, ~0.0): 0.1105581277940324E309 0.1105581277940324E309 +(0.8988465674311579E308, 0.123, 0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.123, 0.8988465674311579E308): 0.10094046952251902E309 0.10094046952251902E309 +(0.8988465674311579E308, 0.123, 0.123E4): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, 0.123E2): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, 0.3141592653589793E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, 0.2718281828459045E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, 0.123E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, 0.123): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, 0.123E~2): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, 0.22250738585072014E~307): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, 0.11125369292536007E~307): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, 0.5E~323): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, 0.0): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, ~0.17976931348623157E309): ~0.16871350070682833E309 ~0.16871350070682833E309 +(0.8988465674311579E308, 0.123, ~0.8988465674311579E308): ~0.7882884396371254E308 ~0.7882884396371254E308 +(0.8988465674311579E308, 0.123, ~0.123E4): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, ~0.123E2): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, ~0.3141592653589793E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, ~0.2718281828459045E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, ~0.123E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, ~0.123): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, ~0.123E~2): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, ~0.22250738585072014E~307): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, ~0.11125369292536007E~307): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, ~0.5E~323): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123, ~0.0): 0.11055812779403241E308 0.11055812779403241E308 +(0.8988465674311579E308, 0.123E~2, 0.17976931348623157E309): inf inf +(0.8988465674311579E308, 0.123E~2, 0.8988465674311579E308): 0.8999521487090981E308 0.8999521487090981E308 +(0.8988465674311579E308, 0.123E~2, 0.123E4): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, 0.123E2): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, 0.3141592653589793E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, 0.2718281828459045E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, 0.123E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, 0.123): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, 0.123E~2): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, 0.22250738585072014E~307): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, 0.11125369292536007E~307): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, 0.5E~323): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, 0.0): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, ~0.17976931348623157E309): ~0.17965875535843753E309 ~0.17965875535843753E309 +(0.8988465674311579E308, 0.123E~2, ~0.8988465674311579E308): ~0.8977409861532176E308 ~0.8977409861532176E308 +(0.8988465674311579E308, 0.123E~2, ~0.123E4): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, ~0.123E2): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, ~0.3141592653589793E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, ~0.2718281828459045E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, ~0.123E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, ~0.123): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, ~0.123E~2): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, ~0.22250738585072014E~307): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, ~0.11125369292536007E~307): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, ~0.5E~323): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.123E~2, ~0.0): 0.1105581277940324E306 0.1105581277940324E306 +(0.8988465674311579E308, 0.22250738585072014E~307, 0.123E4): 0.1232E4 0.1232E4 +(0.8988465674311579E308, 0.22250738585072014E~307, 0.123E2): 0.143E2 0.143E2 +(0.8988465674311579E308, 0.22250738585072014E~307, 0.3141592653589793E1): 0.5141592653589793E1 0.5141592653589793E1 +(0.8988465674311579E308, 0.22250738585072014E~307, 0.2718281828459045E1): 0.4718281828459045E1 0.4718281828459045E1 +(0.8988465674311579E308, 0.22250738585072014E~307, 0.123E1): 0.32299999999999995E1 0.32299999999999995E1 +(0.8988465674311579E308, 0.22250738585072014E~307, 0.123E~2): 0.20012299999999996E1 0.20012299999999996E1 +(0.8988465674311579E308, 0.22250738585072014E~307, ~0.123E4): ~0.1228E4 ~0.1228E4 +(0.8988465674311579E308, 0.22250738585072014E~307, ~0.123E2): ~0.103E2 ~0.103E2 +(0.8988465674311579E308, 0.22250738585072014E~307, ~0.123E~2): 0.19987699999999997E1 0.19987699999999997E1 +(0.8988465674311579E308, 0.11125369292536007E~307, 0.123E4): 0.1231E4 0.1231E4 +(0.8988465674311579E308, 0.11125369292536007E~307, 0.123E2): 0.133E2 0.133E2 +(0.8988465674311579E308, 0.11125369292536007E~307, 0.3141592653589793E1): 0.4141592653589793E1 0.4141592653589793E1 +(0.8988465674311579E308, 0.11125369292536007E~307, 0.2718281828459045E1): 0.3718281828459045E1 0.3718281828459045E1 +(0.8988465674311579E308, 0.11125369292536007E~307, 0.123E1): 0.223E1 0.223E1 +(0.8988465674311579E308, 0.11125369292536007E~307, 0.123): 0.11229999999999998E1 0.11229999999999998E1 +(0.8988465674311579E308, 0.11125369292536007E~307, 0.123E~2): 0.10012299999999998E1 0.10012299999999998E1 +(0.8988465674311579E308, 0.11125369292536007E~307, ~0.123E4): ~0.1229E4 ~0.1229E4 +(0.8988465674311579E308, 0.11125369292536007E~307, ~0.123E2): ~0.113E2 ~0.113E2 +(0.8988465674311579E308, 0.11125369292536007E~307, ~0.3141592653589793E1): ~0.2141592653589793E1 ~0.2141592653589793E1 +(0.8988465674311579E308, 0.11125369292536007E~307, ~0.2718281828459045E1): ~0.1718281828459045E1 ~0.1718281828459045E1 +(0.8988465674311579E308, 0.11125369292536007E~307, ~0.123E~2): 0.9987699999999999 0.9987699999999999 +(0.8988465674311579E308, 0.5E~323, 0.123E4): 0.123E4 0.123E4 +(0.8988465674311579E308, 0.5E~323, 0.123E2): 0.123E2 0.123E2 +(0.8988465674311579E308, 0.5E~323, ~0.123E4): ~0.123E4 ~0.123E4 +(0.8988465674311579E308, 0.5E~323, ~0.123E2): ~0.123E2 ~0.123E2 +(0.8988465674311579E308, ~0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.123): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, 0.0): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.123): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.17976931348623157E309, ~0.0): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.123): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, 0.0): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.123): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.8988465674311579E308, ~0.0): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.123): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, 0.0): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.123): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.123E4, ~0.0): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.123): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, 0.0): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.123): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.123E2, ~0.0): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.17976931348623157E309): ~0.10261166380838123E309 ~0.10261166380838123E309 +(0.8988465674311579E308, ~0.3141592653589793E1, 0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.123): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, 0.0): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.123): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.3141592653589793E1, ~0.0): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.17976931348623157E309): ~0.6456251559585884E308 ~0.6456251559585884E308 +(0.8988465674311579E308, ~0.2718281828459045E1, 0.8988465674311579E308): ~0.15444717233897463E309 ~0.15444717233897463E309 +(0.8988465674311579E308, ~0.2718281828459045E1, 0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.123): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, 0.0): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.123E4): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.123E2): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.3141592653589793E1): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.2718281828459045E1): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.123E1): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.123): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.123E~2): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.11125369292536007E~307): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.5E~323): ~inf ~inf +(0.8988465674311579E308, ~0.2718281828459045E1, ~0.0): ~inf ~inf +(0.8988465674311579E308, ~0.123E1, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219915E308 +(0.8988465674311579E308, ~0.123E1, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.2067347105091663E308 +(0.8988465674311579E308, ~0.123E1, 0.123E4): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, 0.123E2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, 0.3141592653589793E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, 0.2718281828459045E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, 0.123E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, 0.123): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, 0.123E~2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, 0.22250738585072014E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, 0.11125369292536007E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, 0.5E~323): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, 0.0): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, ~0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.123E1, ~0.8988465674311579E308): ~inf ~inf +(0.8988465674311579E308, ~0.123E1, ~0.123E4): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, ~0.123E2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, ~0.3141592653589793E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, ~0.2718281828459045E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, ~0.123E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, ~0.123): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, ~0.123E~2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, ~0.22250738585072014E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, ~0.11125369292536007E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, ~0.5E~323): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123E1, ~0.0): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.8988465674311579E308, ~0.123, 0.17976931348623157E309): 0.16871350070682833E309 0.16871350070682833E309 +(0.8988465674311579E308, ~0.123, 0.8988465674311579E308): 0.7882884396371254E308 0.7882884396371254E308 +(0.8988465674311579E308, ~0.123, 0.123E4): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, 0.123E2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, 0.3141592653589793E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, 0.2718281828459045E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, 0.123E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, 0.123): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, 0.123E~2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, 0.22250738585072014E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, 0.11125369292536007E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, 0.5E~323): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, 0.0): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, ~0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.123, ~0.8988465674311579E308): ~0.10094046952251902E309 ~0.10094046952251902E309 +(0.8988465674311579E308, ~0.123, ~0.123E4): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, ~0.123E2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, ~0.3141592653589793E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, ~0.2718281828459045E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, ~0.123E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, ~0.123): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, ~0.123E~2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, ~0.22250738585072014E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, ~0.11125369292536007E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, ~0.5E~323): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123, ~0.0): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.8988465674311579E308, ~0.123E~2, 0.17976931348623157E309): 0.17965875535843753E309 0.17965875535843753E309 +(0.8988465674311579E308, ~0.123E~2, 0.8988465674311579E308): 0.8977409861532176E308 0.8977409861532176E308 +(0.8988465674311579E308, ~0.123E~2, 0.123E4): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, 0.123E2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, 0.3141592653589793E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, 0.2718281828459045E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, 0.123E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, 0.123): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, 0.123E~2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, 0.22250738585072014E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, 0.11125369292536007E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, 0.5E~323): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, 0.0): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, ~0.17976931348623157E309): ~inf ~inf +(0.8988465674311579E308, ~0.123E~2, ~0.8988465674311579E308): ~0.8999521487090981E308 ~0.8999521487090981E308 +(0.8988465674311579E308, ~0.123E~2, ~0.123E4): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, ~0.123E2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, ~0.3141592653589793E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, ~0.2718281828459045E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, ~0.123E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, ~0.123): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, ~0.123E~2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, ~0.22250738585072014E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, ~0.11125369292536007E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, ~0.5E~323): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.123E~2, ~0.0): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.8988465674311579E308, ~0.22250738585072014E~307, 0.123E4): 0.1228E4 0.1228E4 +(0.8988465674311579E308, ~0.22250738585072014E~307, 0.123E2): 0.103E2 0.103E2 +(0.8988465674311579E308, ~0.22250738585072014E~307, 0.123E~2): ~0.19987699999999997E1 ~0.19987699999999997E1 +(0.8988465674311579E308, ~0.22250738585072014E~307, ~0.123E4): ~0.1232E4 ~0.1232E4 +(0.8988465674311579E308, ~0.22250738585072014E~307, ~0.123E2): ~0.143E2 ~0.143E2 +(0.8988465674311579E308, ~0.22250738585072014E~307, ~0.3141592653589793E1): ~0.5141592653589793E1 ~0.5141592653589793E1 +(0.8988465674311579E308, ~0.22250738585072014E~307, ~0.2718281828459045E1): ~0.4718281828459045E1 ~0.4718281828459045E1 +(0.8988465674311579E308, ~0.22250738585072014E~307, ~0.123E1): ~0.32299999999999995E1 ~0.32299999999999995E1 +(0.8988465674311579E308, ~0.22250738585072014E~307, ~0.123E~2): ~0.20012299999999996E1 ~0.20012299999999996E1 +(0.8988465674311579E308, ~0.11125369292536007E~307, 0.123E4): 0.1229E4 0.1229E4 +(0.8988465674311579E308, ~0.11125369292536007E~307, 0.123E2): 0.113E2 0.113E2 +(0.8988465674311579E308, ~0.11125369292536007E~307, 0.3141592653589793E1): 0.2141592653589793E1 0.2141592653589793E1 +(0.8988465674311579E308, ~0.11125369292536007E~307, 0.2718281828459045E1): 0.1718281828459045E1 0.1718281828459045E1 +(0.8988465674311579E308, ~0.11125369292536007E~307, 0.123E~2): ~0.9987699999999999 ~0.9987699999999999 +(0.8988465674311579E308, ~0.11125369292536007E~307, ~0.123E4): ~0.1231E4 ~0.1231E4 +(0.8988465674311579E308, ~0.11125369292536007E~307, ~0.123E2): ~0.133E2 ~0.133E2 +(0.8988465674311579E308, ~0.11125369292536007E~307, ~0.3141592653589793E1): ~0.4141592653589793E1 ~0.4141592653589793E1 +(0.8988465674311579E308, ~0.11125369292536007E~307, ~0.2718281828459045E1): ~0.3718281828459045E1 ~0.3718281828459045E1 +(0.8988465674311579E308, ~0.11125369292536007E~307, ~0.123E1): ~0.223E1 ~0.223E1 +(0.8988465674311579E308, ~0.11125369292536007E~307, ~0.123): ~0.11229999999999998E1 ~0.11229999999999998E1 +(0.8988465674311579E308, ~0.11125369292536007E~307, ~0.123E~2): ~0.10012299999999998E1 ~0.10012299999999998E1 +(0.8988465674311579E308, ~0.5E~323, 0.123E4): 0.123E4 0.123E4 +(0.8988465674311579E308, ~0.5E~323, 0.123E2): 0.123E2 0.123E2 +(0.8988465674311579E308, ~0.5E~323, ~0.123E4): ~0.123E4 ~0.123E4 +(0.8988465674311579E308, ~0.5E~323, ~0.123E2): ~0.123E2 ~0.123E2 +(0.123E4, 0.17976931348623157E309, 0.17976931348623157E309): inf inf +(0.123E4, 0.17976931348623157E309, 0.8988465674311579E308): inf inf +(0.123E4, 0.17976931348623157E309, 0.123E4): inf inf +(0.123E4, 0.17976931348623157E309, 0.123E2): inf inf +(0.123E4, 0.17976931348623157E309, 0.3141592653589793E1): inf inf +(0.123E4, 0.17976931348623157E309, 0.2718281828459045E1): inf inf +(0.123E4, 0.17976931348623157E309, 0.123E1): inf inf +(0.123E4, 0.17976931348623157E309, 0.123): inf inf +(0.123E4, 0.17976931348623157E309, 0.123E~2): inf inf +(0.123E4, 0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(0.123E4, 0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(0.123E4, 0.17976931348623157E309, 0.5E~323): inf inf +(0.123E4, 0.17976931348623157E309, 0.0): inf inf +(0.123E4, 0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(0.123E4, 0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(0.123E4, 0.17976931348623157E309, ~0.123E4): inf inf +(0.123E4, 0.17976931348623157E309, ~0.123E2): inf inf +(0.123E4, 0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(0.123E4, 0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(0.123E4, 0.17976931348623157E309, ~0.123E1): inf inf +(0.123E4, 0.17976931348623157E309, ~0.123): inf inf +(0.123E4, 0.17976931348623157E309, ~0.123E~2): inf inf +(0.123E4, 0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(0.123E4, 0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(0.123E4, 0.17976931348623157E309, ~0.5E~323): inf inf +(0.123E4, 0.17976931348623157E309, ~0.0): inf inf +(0.123E4, 0.8988465674311579E308, 0.17976931348623157E309): inf inf +(0.123E4, 0.8988465674311579E308, 0.8988465674311579E308): inf inf +(0.123E4, 0.8988465674311579E308, 0.123E4): inf inf +(0.123E4, 0.8988465674311579E308, 0.123E2): inf inf +(0.123E4, 0.8988465674311579E308, 0.3141592653589793E1): inf inf +(0.123E4, 0.8988465674311579E308, 0.2718281828459045E1): inf inf +(0.123E4, 0.8988465674311579E308, 0.123E1): inf inf +(0.123E4, 0.8988465674311579E308, 0.123): inf inf +(0.123E4, 0.8988465674311579E308, 0.123E~2): inf inf +(0.123E4, 0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(0.123E4, 0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(0.123E4, 0.8988465674311579E308, 0.5E~323): inf inf +(0.123E4, 0.8988465674311579E308, 0.0): inf inf +(0.123E4, 0.8988465674311579E308, ~0.17976931348623157E309): inf inf +(0.123E4, 0.8988465674311579E308, ~0.8988465674311579E308): inf inf +(0.123E4, 0.8988465674311579E308, ~0.123E4): inf inf +(0.123E4, 0.8988465674311579E308, ~0.123E2): inf inf +(0.123E4, 0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(0.123E4, 0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(0.123E4, 0.8988465674311579E308, ~0.123E1): inf inf +(0.123E4, 0.8988465674311579E308, ~0.123): inf inf +(0.123E4, 0.8988465674311579E308, ~0.123E~2): inf inf +(0.123E4, 0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(0.123E4, 0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(0.123E4, 0.8988465674311579E308, ~0.5E~323): inf inf +(0.123E4, 0.8988465674311579E308, ~0.0): inf inf +(0.123E4, 0.123E4, 0.123E2): 0.15129123E7 0.15129123E7 +(0.123E4, 0.123E4, 0.3141592653589793E1): 0.15129031415926537E7 0.15129031415926537E7 +(0.123E4, 0.123E4, 0.2718281828459045E1): 0.15129027182818286E7 0.15129027182818286E7 +(0.123E4, 0.123E4, 0.123E1): 0.151290123E7 0.151290123E7 +(0.123E4, 0.123E4, 0.123): 0.1512900123E7 0.1512900123E7 +(0.123E4, 0.123E4, 0.123E~2): 0.151290000123E7 0.151290000123E7 +(0.123E4, 0.123E4, ~0.123E2): 0.15128877E7 0.15128877E7 +(0.123E4, 0.123E4, ~0.3141592653589793E1): 0.15128968584073463E7 0.15128968584073463E7 +(0.123E4, 0.123E4, ~0.2718281828459045E1): 0.15128972817181714E7 0.15128972817181714E7 +(0.123E4, 0.123E4, ~0.123E1): 0.151289877E7 0.151289877E7 +(0.123E4, 0.123E4, ~0.123): 0.1512899877E7 0.1512899877E7 +(0.123E4, 0.123E4, ~0.123E~2): 0.151289999877E7 0.151289999877E7 +(0.123E4, 0.123E2, 0.123E4): 0.16359E5 0.16359E5 +(0.123E4, 0.123E2, 0.123E2): 0.15141300000000001E5 0.15141300000000001E5 +(0.123E4, 0.123E2, 0.3141592653589793E1): 0.1513214159265359E5 0.1513214159265359E5 +(0.123E4, 0.123E2, 0.2718281828459045E1): 0.1513171828182846E5 0.1513171828182846E5 +(0.123E4, 0.123E2, 0.123E1): 0.15130230000000001E5 0.15130230000000001E5 +(0.123E4, 0.123E2, 0.123): 0.15129123000000001E5 0.15129123000000001E5 +(0.123E4, 0.123E2, 0.123E~2): 0.15129001230000002E5 0.15129001230000002E5 +(0.123E4, 0.123E2, 0.22250738585072014E~307): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, 0.11125369292536007E~307): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, 0.5E~323): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, 0.0): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, ~0.123E4): 0.13899E5 0.13899E5 +(0.123E4, 0.123E2, ~0.123E2): 0.151167E5 0.151167E5 +(0.123E4, 0.123E2, ~0.3141592653589793E1): 0.15125858407346412E5 0.15125858407346412E5 +(0.123E4, 0.123E2, ~0.2718281828459045E1): 0.15126281718171542E5 0.15126281718171542E5 +(0.123E4, 0.123E2, ~0.123E1): 0.1512777E5 0.1512777E5 +(0.123E4, 0.123E2, ~0.123): 0.15128877E5 0.15128877E5 +(0.123E4, 0.123E2, ~0.123E~2): 0.1512899877E5 0.1512899877E5 +(0.123E4, 0.123E2, ~0.22250738585072014E~307): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, ~0.11125369292536007E~307): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, ~0.5E~323): 0.15129E5 0.15129E5 +(0.123E4, 0.123E2, ~0.0): 0.15129E5 0.15129E5 +(0.123E4, 0.3141592653589793E1, 0.123E4): 0.5094158963915445E4 0.5094158963915445E4 +(0.123E4, 0.3141592653589793E1, 0.123E2): 0.38764589639154456E4 0.38764589639154456E4 +(0.123E4, 0.3141592653589793E1, 0.3141592653589793E1): 0.38673005565690355E4 0.38673005565690355E4 +(0.123E4, 0.3141592653589793E1, 0.2718281828459045E1): 0.38668772457439045E4 0.38668772457439045E4 +(0.123E4, 0.3141592653589793E1, 0.123E1): 0.38653889639154454E4 0.38653889639154454E4 +(0.123E4, 0.3141592653589793E1, 0.123): 0.38642819639154454E4 0.38642819639154454E4 +(0.123E4, 0.3141592653589793E1, 0.123E~2): 0.38641601939154457E4 0.38641601939154457E4 +(0.123E4, 0.3141592653589793E1, 0.22250738585072014E~307): 0.38641589639154454E4 0.38641589639154454E4 +(0.123E4, 0.3141592653589793E1, 0.11125369292536007E~307): 0.38641589639154454E4 0.38641589639154454E4 +(0.123E4, 0.3141592653589793E1, 0.5E~323): 0.38641589639154454E4 0.38641589639154454E4 +(0.123E4, 0.3141592653589793E1, 0.0): 0.38641589639154454E4 0.38641589639154454E4 +(0.123E4, 0.3141592653589793E1, ~0.123E4): 0.26341589639154454E4 0.26341589639154454E4 +(0.123E4, 0.3141592653589793E1, ~0.123E2): 0.38518589639154457E4 0.38518589639154457E4 +(0.123E4, 0.3141592653589793E1, ~0.3141592653589793E1): 0.38610173712618557E4 0.38610173712618557E4 +(0.123E4, 0.3141592653589793E1, ~0.2718281828459045E1): 0.38614406820869863E4 0.38614406820869863E4 +(0.123E4, 0.3141592653589793E1, ~0.123E1): 0.38629289639154454E4 0.38629289639154454E4 +(0.123E4, 0.3141592653589793E1, ~0.123): 0.38640359639154453E4 0.38640359639154453E4 +(0.123E4, 0.3141592653589793E1, ~0.123E~2): 0.38641577339154455E4 0.38641577339154455E4 +(0.123E4, 0.3141592653589793E1, ~0.22250738585072014E~307): 0.38641589639154454E4 0.38641589639154454E4 +(0.123E4, 0.3141592653589793E1, ~0.11125369292536007E~307): 0.38641589639154454E4 0.38641589639154454E4 +(0.123E4, 0.3141592653589793E1, ~0.5E~323): 0.38641589639154454E4 0.38641589639154454E4 +(0.123E4, 0.3141592653589793E1, ~0.0): 0.38641589639154454E4 0.38641589639154454E4 +(0.123E4, 0.2718281828459045E1, 0.123E4): 0.4573486649004625E4 0.4573486649004625E4 +(0.123E4, 0.2718281828459045E1, 0.123E2): 0.33557866490046254E4 0.33557866490046254E4 +(0.123E4, 0.2718281828459045E1, 0.3141592653589793E1): 0.33466282416582153E4 0.33466282416582153E4 +(0.123E4, 0.2718281828459045E1, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330843E4 +(0.123E4, 0.2718281828459045E1, 0.123E1): 0.33447166490046257E4 0.33447166490046257E4 +(0.123E4, 0.2718281828459045E1, 0.123): 0.33436096490046257E4 0.33436096490046257E4 +(0.123E4, 0.2718281828459045E1, 0.123E~2): 0.33434878790046255E4 0.33434878790046255E4 +(0.123E4, 0.2718281828459045E1, 0.22250738585072014E~307): 0.33434866490046256E4 0.33434866490046256E4 +(0.123E4, 0.2718281828459045E1, 0.11125369292536007E~307): 0.33434866490046256E4 0.33434866490046256E4 +(0.123E4, 0.2718281828459045E1, 0.5E~323): 0.33434866490046256E4 0.33434866490046256E4 +(0.123E4, 0.2718281828459045E1, 0.0): 0.33434866490046256E4 0.33434866490046256E4 +(0.123E4, 0.2718281828459045E1, ~0.123E4): 0.21134866490046256E4 0.21134866490046256E4 +(0.123E4, 0.2718281828459045E1, ~0.123E2): 0.33311866490046255E4 0.33311866490046255E4 +(0.123E4, 0.2718281828459045E1, ~0.3141592653589793E1): 0.33403450563510355E4 0.33403450563510355E4 +(0.123E4, 0.2718281828459045E1, ~0.2718281828459045E1): 0.33407683671761665E4 0.33407683671761665E4 +(0.123E4, 0.2718281828459045E1, ~0.123E1): 0.33422566490046256E4 0.33422566490046256E4 +(0.123E4, 0.2718281828459045E1, ~0.123): 0.33433636490046256E4 0.33433636490046256E4 +(0.123E4, 0.2718281828459045E1, ~0.123E~2): 0.33434854190046253E4 0.33434854190046253E4 +(0.123E4, 0.2718281828459045E1, ~0.22250738585072014E~307): 0.33434866490046256E4 0.33434866490046256E4 +(0.123E4, 0.2718281828459045E1, ~0.11125369292536007E~307): 0.33434866490046256E4 0.33434866490046256E4 +(0.123E4, 0.2718281828459045E1, ~0.5E~323): 0.33434866490046256E4 0.33434866490046256E4 +(0.123E4, 0.2718281828459045E1, ~0.0): 0.33434866490046256E4 0.33434866490046256E4 +(0.123E4, 0.123E1, 0.123E4): 0.27429E4 0.27429E4 +(0.123E4, 0.123E1, 0.123E2): 0.15252E4 0.15252E4 +(0.123E4, 0.123E1, 0.3141592653589793E1): 0.15160415926535898E4 0.15160415926535898E4 +(0.123E4, 0.123E1, 0.2718281828459045E1): 0.1515618281828459E4 0.1515618281828459E4 +(0.123E4, 0.123E1, 0.123E1): 0.15141299999999999E4 0.15141299999999999E4 +(0.123E4, 0.123E1, 0.123): 0.1513023E4 0.1513023E4 +(0.123E4, 0.123E1, 0.123E~2): 0.151290123E4 0.151290123E4 +(0.123E4, 0.123E1, 0.22250738585072014E~307): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, 0.11125369292536007E~307): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, 0.5E~323): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, 0.0): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, ~0.123E4): 0.2829E3 0.2829E3 +(0.123E4, 0.123E1, ~0.123E2): 0.15006E4 0.15006E4 +(0.123E4, 0.123E1, ~0.3141592653589793E1): 0.15097584073464102E4 0.15097584073464102E4 +(0.123E4, 0.123E1, ~0.2718281828459045E1): 0.1510181718171541E4 0.1510181718171541E4 +(0.123E4, 0.123E1, ~0.123E1): 0.151167E4 0.151167E4 +(0.123E4, 0.123E1, ~0.123): 0.1512777E4 0.1512777E4 +(0.123E4, 0.123E1, ~0.123E~2): 0.151289877E4 0.151289877E4 +(0.123E4, 0.123E1, ~0.22250738585072014E~307): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, ~0.11125369292536007E~307): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, ~0.5E~323): 0.15129E4 0.15129E4 +(0.123E4, 0.123E1, ~0.0): 0.15129E4 0.15129E4 +(0.123E4, 0.123, 0.123E4): 0.138129E4 0.138129E4 +(0.123E4, 0.123, 0.123E2): 0.16359E3 0.16359E3 +(0.123E4, 0.123, 0.3141592653589793E1): 0.1544315926535898E3 0.1544315926535898E3 +(0.123E4, 0.123, 0.2718281828459045E1): 0.15400828182845905E3 0.15400828182845905E3 +(0.123E4, 0.123, 0.123E1): 0.15252E3 0.15252E3 +(0.123E4, 0.123, 0.123): 0.151413E3 0.151413E3 +(0.123E4, 0.123, 0.123E~2): 0.15129122999999998E3 0.15129122999999998E3 +(0.123E4, 0.123, 0.22250738585072014E~307): 0.15129E3 0.15129E3 +(0.123E4, 0.123, 0.11125369292536007E~307): 0.15129E3 0.15129E3 +(0.123E4, 0.123, 0.5E~323): 0.15129E3 0.15129E3 +(0.123E4, 0.123, 0.0): 0.15129E3 0.15129E3 +(0.123E4, 0.123, ~0.123E4): ~0.107871E4 ~0.107871E4 +(0.123E4, 0.123, ~0.123E2): 0.13899E3 0.13899E3 +(0.123E4, 0.123, ~0.3141592653589793E1): 0.1481484073464102E3 0.1481484073464102E3 +(0.123E4, 0.123, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154097E3 +(0.123E4, 0.123, ~0.123E1): 0.15006E3 0.15006E3 +(0.123E4, 0.123, ~0.123): 0.151167E3 0.151167E3 +(0.123E4, 0.123, ~0.123E~2): 0.15128877E3 0.15128877E3 +(0.123E4, 0.123, ~0.22250738585072014E~307): 0.15129E3 0.15129E3 +(0.123E4, 0.123, ~0.11125369292536007E~307): 0.15129E3 0.15129E3 +(0.123E4, 0.123, ~0.5E~323): 0.15129E3 0.15129E3 +(0.123E4, 0.123, ~0.0): 0.15129E3 0.15129E3 +(0.123E4, 0.123E~2, 0.123E4): 0.12315129E4 0.12315129E4 +(0.123E4, 0.123E~2, 0.123E2): 0.138129E2 0.138129E2 +(0.123E4, 0.123E~2, 0.3141592653589793E1): 0.4654492653589793E1 0.4654492653589793E1 +(0.123E4, 0.123E~2, 0.2718281828459045E1): 0.4231181828459045E1 0.4231181828459045E1 +(0.123E4, 0.123E~2, 0.123E1): 0.27429E1 0.27429E1 +(0.123E4, 0.123E~2, 0.123): 0.16359E1 0.16359E1 +(0.123E4, 0.123E~2, 0.123E~2): 0.151413E1 0.151413E1 +(0.123E4, 0.123E~2, 0.22250738585072014E~307): 0.15129E1 0.15129E1 +(0.123E4, 0.123E~2, 0.11125369292536007E~307): 0.15129E1 0.15129E1 +(0.123E4, 0.123E~2, 0.5E~323): 0.15129E1 0.15129E1 +(0.123E4, 0.123E~2, 0.0): 0.15129E1 0.15129E1 +(0.123E4, 0.123E~2, ~0.123E4): ~0.12284871E4 ~0.12284871E4 +(0.123E4, 0.123E~2, ~0.123E2): ~0.107871E2 ~0.107871E2 +(0.123E4, 0.123E~2, ~0.3141592653589793E1): ~0.16286926535897932E1 ~0.16286926535897932E1 +(0.123E4, 0.123E~2, ~0.2718281828459045E1): ~0.12053818284590452E1 ~0.12053818284590452E1 +(0.123E4, 0.123E~2, ~0.123E1): 0.2829 0.2829 +(0.123E4, 0.123E~2, ~0.123): 0.13899E1 0.13899E1 +(0.123E4, 0.123E~2, ~0.123E~2): 0.151167E1 0.151167E1 +(0.123E4, 0.123E~2, ~0.22250738585072014E~307): 0.15129E1 0.15129E1 +(0.123E4, 0.123E~2, ~0.11125369292536007E~307): 0.15129E1 0.15129E1 +(0.123E4, 0.123E~2, ~0.5E~323): 0.15129E1 0.15129E1 +(0.123E4, 0.123E~2, ~0.0): 0.15129E1 0.15129E1 +(0.123E4, 0.22250738585072014E~307, 0.5E~323): 0.27368408459638577E~304 0.27368408459638577E~304 +(0.123E4, 0.22250738585072014E~307, ~0.5E~323): 0.27368408459638577E~304 0.27368408459638577E~304 +(0.123E4, 0.11125369292536007E~307, 0.5E~323): 0.13684204229819289E~304 0.13684204229819289E~304 +(0.123E4, 0.11125369292536007E~307, ~0.5E~323): 0.13684204229819289E~304 0.13684204229819289E~304 +(0.123E4, ~0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.123E4): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.123E2): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.123E1): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.123): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.123E~2): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.5E~323): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, 0.0): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.123E4): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.123E2): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.123E1): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.123): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(0.123E4, ~0.17976931348623157E309, ~0.0): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.17976931348623157E309): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.8988465674311579E308): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.123E4): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.123E2): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.123E1): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.123): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.123E~2): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.5E~323): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, 0.0): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.123E4): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.123E2): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.123E1): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.123): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(0.123E4, ~0.8988465674311579E308, ~0.0): ~inf ~inf +(0.123E4, ~0.123E4, 0.123E2): ~0.15128877E7 ~0.15128877E7 +(0.123E4, ~0.123E4, 0.3141592653589793E1): ~0.15128968584073463E7 ~0.15128968584073463E7 +(0.123E4, ~0.123E4, 0.2718281828459045E1): ~0.15128972817181714E7 ~0.15128972817181714E7 +(0.123E4, ~0.123E4, 0.123E1): ~0.151289877E7 ~0.151289877E7 +(0.123E4, ~0.123E4, 0.123): ~0.1512899877E7 ~0.1512899877E7 +(0.123E4, ~0.123E4, 0.123E~2): ~0.151289999877E7 ~0.151289999877E7 +(0.123E4, ~0.123E4, ~0.123E2): ~0.15129123E7 ~0.15129123E7 +(0.123E4, ~0.123E4, ~0.3141592653589793E1): ~0.15129031415926537E7 ~0.15129031415926537E7 +(0.123E4, ~0.123E4, ~0.2718281828459045E1): ~0.15129027182818286E7 ~0.15129027182818286E7 +(0.123E4, ~0.123E4, ~0.123E1): ~0.151290123E7 ~0.151290123E7 +(0.123E4, ~0.123E4, ~0.123): ~0.1512900123E7 ~0.1512900123E7 +(0.123E4, ~0.123E4, ~0.123E~2): ~0.151290000123E7 ~0.151290000123E7 +(0.123E4, ~0.123E2, 0.123E4): ~0.13899E5 ~0.13899E5 +(0.123E4, ~0.123E2, 0.123E2): ~0.151167E5 ~0.151167E5 +(0.123E4, ~0.123E2, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.15125858407346412E5 +(0.123E4, ~0.123E2, 0.2718281828459045E1): ~0.15126281718171542E5 ~0.15126281718171542E5 +(0.123E4, ~0.123E2, 0.123E1): ~0.1512777E5 ~0.1512777E5 +(0.123E4, ~0.123E2, 0.123): ~0.15128877E5 ~0.15128877E5 +(0.123E4, ~0.123E2, 0.123E~2): ~0.1512899877E5 ~0.1512899877E5 +(0.123E4, ~0.123E2, 0.22250738585072014E~307): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, 0.11125369292536007E~307): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, 0.5E~323): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, 0.0): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, ~0.123E4): ~0.16359E5 ~0.16359E5 +(0.123E4, ~0.123E2, ~0.123E2): ~0.15141300000000001E5 ~0.15141300000000001E5 +(0.123E4, ~0.123E2, ~0.3141592653589793E1): ~0.1513214159265359E5 ~0.1513214159265359E5 +(0.123E4, ~0.123E2, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.1513171828182846E5 +(0.123E4, ~0.123E2, ~0.123E1): ~0.15130230000000001E5 ~0.15130230000000001E5 +(0.123E4, ~0.123E2, ~0.123): ~0.15129123000000001E5 ~0.15129123000000001E5 +(0.123E4, ~0.123E2, ~0.123E~2): ~0.15129001230000002E5 ~0.15129001230000002E5 +(0.123E4, ~0.123E2, ~0.22250738585072014E~307): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, ~0.11125369292536007E~307): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, ~0.5E~323): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.123E2, ~0.0): ~0.15129E5 ~0.15129E5 +(0.123E4, ~0.3141592653589793E1, 0.123E4): ~0.26341589639154454E4 ~0.26341589639154454E4 +(0.123E4, ~0.3141592653589793E1, 0.123E2): ~0.38518589639154457E4 ~0.38518589639154457E4 +(0.123E4, ~0.3141592653589793E1, 0.3141592653589793E1): ~0.38610173712618557E4 ~0.38610173712618557E4 +(0.123E4, ~0.3141592653589793E1, 0.2718281828459045E1): ~0.38614406820869863E4 ~0.38614406820869863E4 +(0.123E4, ~0.3141592653589793E1, 0.123E1): ~0.38629289639154454E4 ~0.38629289639154454E4 +(0.123E4, ~0.3141592653589793E1, 0.123): ~0.38640359639154453E4 ~0.38640359639154453E4 +(0.123E4, ~0.3141592653589793E1, 0.123E~2): ~0.38641577339154455E4 ~0.38641577339154455E4 +(0.123E4, ~0.3141592653589793E1, 0.22250738585072014E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.123E4, ~0.3141592653589793E1, 0.11125369292536007E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.123E4, ~0.3141592653589793E1, 0.5E~323): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.123E4, ~0.3141592653589793E1, 0.0): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.123E4, ~0.3141592653589793E1, ~0.123E4): ~0.5094158963915445E4 ~0.5094158963915445E4 +(0.123E4, ~0.3141592653589793E1, ~0.123E2): ~0.38764589639154456E4 ~0.38764589639154456E4 +(0.123E4, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.38673005565690355E4 +(0.123E4, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.38668772457439045E4 ~0.38668772457439045E4 +(0.123E4, ~0.3141592653589793E1, ~0.123E1): ~0.38653889639154454E4 ~0.38653889639154454E4 +(0.123E4, ~0.3141592653589793E1, ~0.123): ~0.38642819639154454E4 ~0.38642819639154454E4 +(0.123E4, ~0.3141592653589793E1, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154457E4 +(0.123E4, ~0.3141592653589793E1, ~0.22250738585072014E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.123E4, ~0.3141592653589793E1, ~0.11125369292536007E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.123E4, ~0.3141592653589793E1, ~0.5E~323): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.123E4, ~0.3141592653589793E1, ~0.0): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.123E4, ~0.2718281828459045E1, 0.123E4): ~0.21134866490046256E4 ~0.21134866490046256E4 +(0.123E4, ~0.2718281828459045E1, 0.123E2): ~0.33311866490046255E4 ~0.33311866490046255E4 +(0.123E4, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.33403450563510355E4 +(0.123E4, ~0.2718281828459045E1, 0.2718281828459045E1): ~0.33407683671761665E4 ~0.33407683671761665E4 +(0.123E4, ~0.2718281828459045E1, 0.123E1): ~0.33422566490046256E4 ~0.33422566490046256E4 +(0.123E4, ~0.2718281828459045E1, 0.123): ~0.33433636490046256E4 ~0.33433636490046256E4 +(0.123E4, ~0.2718281828459045E1, 0.123E~2): ~0.33434854190046253E4 ~0.33434854190046253E4 +(0.123E4, ~0.2718281828459045E1, 0.22250738585072014E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.123E4, ~0.2718281828459045E1, 0.11125369292536007E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.123E4, ~0.2718281828459045E1, 0.5E~323): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.123E4, ~0.2718281828459045E1, 0.0): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.123E4, ~0.2718281828459045E1, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004625E4 +(0.123E4, ~0.2718281828459045E1, ~0.123E2): ~0.33557866490046254E4 ~0.33557866490046254E4 +(0.123E4, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.33466282416582153E4 ~0.33466282416582153E4 +(0.123E4, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330843E4 +(0.123E4, ~0.2718281828459045E1, ~0.123E1): ~0.33447166490046257E4 ~0.33447166490046257E4 +(0.123E4, ~0.2718281828459045E1, ~0.123): ~0.33436096490046257E4 ~0.33436096490046257E4 +(0.123E4, ~0.2718281828459045E1, ~0.123E~2): ~0.33434878790046255E4 ~0.33434878790046255E4 +(0.123E4, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.123E4, ~0.2718281828459045E1, ~0.11125369292536007E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.123E4, ~0.2718281828459045E1, ~0.5E~323): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.123E4, ~0.2718281828459045E1, ~0.0): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.123E4, ~0.123E1, 0.123E4): ~0.2829E3 ~0.2829E3 +(0.123E4, ~0.123E1, 0.123E2): ~0.15006E4 ~0.15006E4 +(0.123E4, ~0.123E1, 0.3141592653589793E1): ~0.15097584073464102E4 ~0.15097584073464102E4 +(0.123E4, ~0.123E1, 0.2718281828459045E1): ~0.1510181718171541E4 ~0.1510181718171541E4 +(0.123E4, ~0.123E1, 0.123E1): ~0.151167E4 ~0.151167E4 +(0.123E4, ~0.123E1, 0.123): ~0.1512777E4 ~0.1512777E4 +(0.123E4, ~0.123E1, 0.123E~2): ~0.151289877E4 ~0.151289877E4 +(0.123E4, ~0.123E1, 0.22250738585072014E~307): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, 0.11125369292536007E~307): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, 0.5E~323): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, 0.0): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, ~0.123E4): ~0.27429E4 ~0.27429E4 +(0.123E4, ~0.123E1, ~0.123E2): ~0.15252E4 ~0.15252E4 +(0.123E4, ~0.123E1, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.15160415926535898E4 +(0.123E4, ~0.123E1, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.1515618281828459E4 +(0.123E4, ~0.123E1, ~0.123E1): ~0.15141299999999999E4 ~0.15141299999999999E4 +(0.123E4, ~0.123E1, ~0.123): ~0.1513023E4 ~0.1513023E4 +(0.123E4, ~0.123E1, ~0.123E~2): ~0.151290123E4 ~0.151290123E4 +(0.123E4, ~0.123E1, ~0.22250738585072014E~307): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, ~0.11125369292536007E~307): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, ~0.5E~323): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123E1, ~0.0): ~0.15129E4 ~0.15129E4 +(0.123E4, ~0.123, 0.123E4): 0.107871E4 0.107871E4 +(0.123E4, ~0.123, 0.123E2): ~0.13899E3 ~0.13899E3 +(0.123E4, ~0.123, 0.3141592653589793E1): ~0.1481484073464102E3 ~0.1481484073464102E3 +(0.123E4, ~0.123, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154097E3 +(0.123E4, ~0.123, 0.123E1): ~0.15006E3 ~0.15006E3 +(0.123E4, ~0.123, 0.123): ~0.151167E3 ~0.151167E3 +(0.123E4, ~0.123, 0.123E~2): ~0.15128877E3 ~0.15128877E3 +(0.123E4, ~0.123, 0.22250738585072014E~307): ~0.15129E3 ~0.15129E3 +(0.123E4, ~0.123, 0.11125369292536007E~307): ~0.15129E3 ~0.15129E3 +(0.123E4, ~0.123, 0.5E~323): ~0.15129E3 ~0.15129E3 +(0.123E4, ~0.123, 0.0): ~0.15129E3 ~0.15129E3 +(0.123E4, ~0.123, ~0.123E4): ~0.138129E4 ~0.138129E4 +(0.123E4, ~0.123, ~0.123E2): ~0.16359E3 ~0.16359E3 +(0.123E4, ~0.123, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.1544315926535898E3 +(0.123E4, ~0.123, ~0.2718281828459045E1): ~0.15400828182845905E3 ~0.15400828182845905E3 +(0.123E4, ~0.123, ~0.123E1): ~0.15252E3 ~0.15252E3 +(0.123E4, ~0.123, ~0.123): ~0.151413E3 ~0.151413E3 +(0.123E4, ~0.123, ~0.123E~2): ~0.15129122999999998E3 ~0.15129122999999998E3 +(0.123E4, ~0.123, ~0.22250738585072014E~307): ~0.15129E3 ~0.15129E3 +(0.123E4, ~0.123, ~0.11125369292536007E~307): ~0.15129E3 ~0.15129E3 +(0.123E4, ~0.123, ~0.5E~323): ~0.15129E3 ~0.15129E3 +(0.123E4, ~0.123, ~0.0): ~0.15129E3 ~0.15129E3 +(0.123E4, ~0.123E~2, 0.123E4): 0.12284871E4 0.12284871E4 +(0.123E4, ~0.123E~2, 0.123E2): 0.107871E2 0.107871E2 +(0.123E4, ~0.123E~2, 0.3141592653589793E1): 0.16286926535897932E1 0.16286926535897932E1 +(0.123E4, ~0.123E~2, 0.2718281828459045E1): 0.12053818284590452E1 0.12053818284590452E1 +(0.123E4, ~0.123E~2, 0.123E1): ~0.2829 ~0.2829 +(0.123E4, ~0.123E~2, 0.123): ~0.13899E1 ~0.13899E1 +(0.123E4, ~0.123E~2, 0.123E~2): ~0.151167E1 ~0.151167E1 +(0.123E4, ~0.123E~2, 0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(0.123E4, ~0.123E~2, 0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(0.123E4, ~0.123E~2, 0.5E~323): ~0.15129E1 ~0.15129E1 +(0.123E4, ~0.123E~2, 0.0): ~0.15129E1 ~0.15129E1 +(0.123E4, ~0.123E~2, ~0.123E4): ~0.12315129E4 ~0.12315129E4 +(0.123E4, ~0.123E~2, ~0.123E2): ~0.138129E2 ~0.138129E2 +(0.123E4, ~0.123E~2, ~0.3141592653589793E1): ~0.4654492653589793E1 ~0.4654492653589793E1 +(0.123E4, ~0.123E~2, ~0.2718281828459045E1): ~0.4231181828459045E1 ~0.4231181828459045E1 +(0.123E4, ~0.123E~2, ~0.123E1): ~0.27429E1 ~0.27429E1 +(0.123E4, ~0.123E~2, ~0.123): ~0.16359E1 ~0.16359E1 +(0.123E4, ~0.123E~2, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(0.123E4, ~0.123E~2, ~0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(0.123E4, ~0.123E~2, ~0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(0.123E4, ~0.123E~2, ~0.5E~323): ~0.15129E1 ~0.15129E1 +(0.123E4, ~0.123E~2, ~0.0): ~0.15129E1 ~0.15129E1 +(0.123E4, ~0.22250738585072014E~307, 0.5E~323): ~0.27368408459638577E~304 ~0.27368408459638577E~304 +(0.123E4, ~0.22250738585072014E~307, ~0.5E~323): ~0.27368408459638577E~304 ~0.27368408459638577E~304 +(0.123E4, ~0.11125369292536007E~307, 0.5E~323): ~0.13684204229819289E~304 ~0.13684204229819289E~304 +(0.123E4, ~0.11125369292536007E~307, ~0.5E~323): ~0.13684204229819289E~304 ~0.13684204229819289E~304 +(0.123E2, 0.17976931348623157E309, 0.17976931348623157E309): inf inf +(0.123E2, 0.17976931348623157E309, 0.8988465674311579E308): inf inf +(0.123E2, 0.17976931348623157E309, 0.123E4): inf inf +(0.123E2, 0.17976931348623157E309, 0.123E2): inf inf +(0.123E2, 0.17976931348623157E309, 0.3141592653589793E1): inf inf +(0.123E2, 0.17976931348623157E309, 0.2718281828459045E1): inf inf +(0.123E2, 0.17976931348623157E309, 0.123E1): inf inf +(0.123E2, 0.17976931348623157E309, 0.123): inf inf +(0.123E2, 0.17976931348623157E309, 0.123E~2): inf inf +(0.123E2, 0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(0.123E2, 0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(0.123E2, 0.17976931348623157E309, 0.5E~323): inf inf +(0.123E2, 0.17976931348623157E309, 0.0): inf inf +(0.123E2, 0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(0.123E2, 0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(0.123E2, 0.17976931348623157E309, ~0.123E4): inf inf +(0.123E2, 0.17976931348623157E309, ~0.123E2): inf inf +(0.123E2, 0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(0.123E2, 0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(0.123E2, 0.17976931348623157E309, ~0.123E1): inf inf +(0.123E2, 0.17976931348623157E309, ~0.123): inf inf +(0.123E2, 0.17976931348623157E309, ~0.123E~2): inf inf +(0.123E2, 0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(0.123E2, 0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(0.123E2, 0.17976931348623157E309, ~0.5E~323): inf inf +(0.123E2, 0.17976931348623157E309, ~0.0): inf inf +(0.123E2, 0.8988465674311579E308, 0.17976931348623157E309): inf inf +(0.123E2, 0.8988465674311579E308, 0.8988465674311579E308): inf inf +(0.123E2, 0.8988465674311579E308, 0.123E4): inf inf +(0.123E2, 0.8988465674311579E308, 0.123E2): inf inf +(0.123E2, 0.8988465674311579E308, 0.3141592653589793E1): inf inf +(0.123E2, 0.8988465674311579E308, 0.2718281828459045E1): inf inf +(0.123E2, 0.8988465674311579E308, 0.123E1): inf inf +(0.123E2, 0.8988465674311579E308, 0.123): inf inf +(0.123E2, 0.8988465674311579E308, 0.123E~2): inf inf +(0.123E2, 0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(0.123E2, 0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(0.123E2, 0.8988465674311579E308, 0.5E~323): inf inf +(0.123E2, 0.8988465674311579E308, 0.0): inf inf +(0.123E2, 0.8988465674311579E308, ~0.17976931348623157E309): inf inf +(0.123E2, 0.8988465674311579E308, ~0.8988465674311579E308): inf inf +(0.123E2, 0.8988465674311579E308, ~0.123E4): inf inf +(0.123E2, 0.8988465674311579E308, ~0.123E2): inf inf +(0.123E2, 0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(0.123E2, 0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(0.123E2, 0.8988465674311579E308, ~0.123E1): inf inf +(0.123E2, 0.8988465674311579E308, ~0.123): inf inf +(0.123E2, 0.8988465674311579E308, ~0.123E~2): inf inf +(0.123E2, 0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(0.123E2, 0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(0.123E2, 0.8988465674311579E308, ~0.5E~323): inf inf +(0.123E2, 0.8988465674311579E308, ~0.0): inf inf +(0.123E2, 0.123E4, 0.123E4): 0.16359E5 0.16359E5 +(0.123E2, 0.123E4, 0.123E2): 0.15141300000000001E5 0.15141300000000001E5 +(0.123E2, 0.123E4, 0.3141592653589793E1): 0.1513214159265359E5 0.1513214159265359E5 +(0.123E2, 0.123E4, 0.2718281828459045E1): 0.1513171828182846E5 0.1513171828182846E5 +(0.123E2, 0.123E4, 0.123E1): 0.15130230000000001E5 0.15130230000000001E5 +(0.123E2, 0.123E4, 0.123): 0.15129123000000001E5 0.15129123000000001E5 +(0.123E2, 0.123E4, 0.123E~2): 0.15129001230000002E5 0.15129001230000002E5 +(0.123E2, 0.123E4, 0.22250738585072014E~307): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, 0.11125369292536007E~307): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, 0.5E~323): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, 0.0): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, ~0.123E4): 0.13899E5 0.13899E5 +(0.123E2, 0.123E4, ~0.123E2): 0.151167E5 0.151167E5 +(0.123E2, 0.123E4, ~0.3141592653589793E1): 0.15125858407346412E5 0.15125858407346412E5 +(0.123E2, 0.123E4, ~0.2718281828459045E1): 0.15126281718171542E5 0.15126281718171542E5 +(0.123E2, 0.123E4, ~0.123E1): 0.1512777E5 0.1512777E5 +(0.123E2, 0.123E4, ~0.123): 0.15128877E5 0.15128877E5 +(0.123E2, 0.123E4, ~0.123E~2): 0.1512899877E5 0.1512899877E5 +(0.123E2, 0.123E4, ~0.22250738585072014E~307): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, ~0.11125369292536007E~307): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, ~0.5E~323): 0.15129E5 0.15129E5 +(0.123E2, 0.123E4, ~0.0): 0.15129E5 0.15129E5 +(0.123E2, 0.123E2, 0.123E4): 0.138129E4 0.138129E4 +(0.123E2, 0.123E2, 0.123E2): 0.16359000000000003E3 0.16359000000000003E3 +(0.123E2, 0.123E2, 0.3141592653589793E1): 0.1544315926535898E3 0.1544315926535898E3 +(0.123E2, 0.123E2, 0.2718281828459045E1): 0.15400828182845908E3 0.15400828182845908E3 +(0.123E2, 0.123E2, 0.123E1): 0.15252E3 0.15252E3 +(0.123E2, 0.123E2, 0.123): 0.151413E3 0.151413E3 +(0.123E2, 0.123E2, 0.123E~2): 0.15129123E3 0.15129123E3 +(0.123E2, 0.123E2, 0.22250738585072014E~307): 0.15129000000000002E3 0.15129000000000002E3 +(0.123E2, 0.123E2, 0.11125369292536007E~307): 0.15129000000000002E3 0.15129000000000002E3 +(0.123E2, 0.123E2, 0.5E~323): 0.15129000000000002E3 0.15129000000000002E3 +(0.123E2, 0.123E2, 0.0): 0.15129000000000002E3 0.15129000000000002E3 +(0.123E2, 0.123E2, ~0.123E4): ~0.107871E4 ~0.107871E4 +(0.123E2, 0.123E2, ~0.123E2): 0.13899E3 0.13899E3 +(0.123E2, 0.123E2, ~0.3141592653589793E1): 0.14814840734641024E3 0.14814840734641024E3 +(0.123E2, 0.123E2, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154097E3 +(0.123E2, 0.123E2, ~0.123E1): 0.15006000000000003E3 0.15006000000000003E3 +(0.123E2, 0.123E2, ~0.123): 0.15116700000000003E3 0.15116700000000003E3 +(0.123E2, 0.123E2, ~0.123E~2): 0.15128877000000003E3 0.15128877000000003E3 +(0.123E2, 0.123E2, ~0.22250738585072014E~307): 0.15129000000000002E3 0.15129000000000002E3 +(0.123E2, 0.123E2, ~0.11125369292536007E~307): 0.15129000000000002E3 0.15129000000000002E3 +(0.123E2, 0.123E2, ~0.5E~323): 0.15129000000000002E3 0.15129000000000002E3 +(0.123E2, 0.123E2, ~0.0): 0.15129000000000002E3 0.15129000000000002E3 +(0.123E2, 0.3141592653589793E1, 0.123E4): 0.12686415896391545E4 0.12686415896391545E4 +(0.123E2, 0.3141592653589793E1, 0.123E2): 0.5094158963915446E2 0.5094158963915446E2 +(0.123E2, 0.3141592653589793E1, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274425E2 +(0.123E2, 0.3141592653589793E1, 0.2718281828459045E1): 0.413598714676135E2 0.413598714676135E2 +(0.123E2, 0.3141592653589793E1, 0.123E1): 0.3987158963915446E2 0.3987158963915446E2 +(0.123E2, 0.3141592653589793E1, 0.123): 0.3876458963915446E2 0.3876458963915446E2 +(0.123E2, 0.3141592653589793E1, 0.123E~2): 0.3864281963915446E2 0.3864281963915446E2 +(0.123E2, 0.3141592653589793E1, 0.22250738585072014E~307): 0.3864158963915446E2 0.3864158963915446E2 +(0.123E2, 0.3141592653589793E1, 0.11125369292536007E~307): 0.3864158963915446E2 0.3864158963915446E2 +(0.123E2, 0.3141592653589793E1, 0.5E~323): 0.3864158963915446E2 0.3864158963915446E2 +(0.123E2, 0.3141592653589793E1, 0.0): 0.3864158963915446E2 0.3864158963915446E2 +(0.123E2, 0.3141592653589793E1, ~0.123E4): ~0.11913584103608455E4 ~0.11913584103608455E4 +(0.123E2, 0.3141592653589793E1, ~0.123E2): 0.26341589639154456E2 0.26341589639154456E2 +(0.123E2, 0.3141592653589793E1, ~0.3141592653589793E1): 0.35499996985564664E2 0.35499996985564664E2 +(0.123E2, 0.3141592653589793E1, ~0.2718281828459045E1): 0.3592330781069541E2 0.3592330781069541E2 +(0.123E2, 0.3141592653589793E1, ~0.123E1): 0.3741158963915446E2 0.3741158963915446E2 +(0.123E2, 0.3141592653589793E1, ~0.123): 0.38518589639154456E2 0.38518589639154456E2 +(0.123E2, 0.3141592653589793E1, ~0.123E~2): 0.3864035963915446E2 0.3864035963915446E2 +(0.123E2, 0.3141592653589793E1, ~0.22250738585072014E~307): 0.3864158963915446E2 0.3864158963915446E2 +(0.123E2, 0.3141592653589793E1, ~0.11125369292536007E~307): 0.3864158963915446E2 0.3864158963915446E2 +(0.123E2, 0.3141592653589793E1, ~0.5E~323): 0.3864158963915446E2 0.3864158963915446E2 +(0.123E2, 0.3141592653589793E1, ~0.0): 0.3864158963915446E2 0.3864158963915446E2 +(0.123E2, 0.2718281828459045E1, 0.123E4): 0.12634348664900463E4 0.12634348664900463E4 +(0.123E2, 0.2718281828459045E1, 0.123E2): 0.4573486649004626E2 0.4573486649004626E2 +(0.123E2, 0.2718281828459045E1, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363605E2 +(0.123E2, 0.2718281828459045E1, 0.2718281828459045E1): 0.361531483185053E2 0.361531483185053E2 +(0.123E2, 0.2718281828459045E1, 0.123E1): 0.3466486649004626E2 0.3466486649004626E2 +(0.123E2, 0.2718281828459045E1, 0.123): 0.3355786649004626E2 0.3355786649004626E2 +(0.123E2, 0.2718281828459045E1, 0.123E~2): 0.3343609649004625E2 0.3343609649004625E2 +(0.123E2, 0.2718281828459045E1, 0.22250738585072014E~307): 0.33434866490046254E2 0.33434866490046254E2 +(0.123E2, 0.2718281828459045E1, 0.11125369292536007E~307): 0.33434866490046254E2 0.33434866490046254E2 +(0.123E2, 0.2718281828459045E1, 0.5E~323): 0.33434866490046254E2 0.33434866490046254E2 +(0.123E2, 0.2718281828459045E1, 0.0): 0.33434866490046254E2 0.33434866490046254E2 +(0.123E2, 0.2718281828459045E1, ~0.123E4): ~0.11965651335099537E4 ~0.11965651335099537E4 +(0.123E2, 0.2718281828459045E1, ~0.123E2): 0.21134866490046257E2 0.21134866490046257E2 +(0.123E2, 0.2718281828459045E1, ~0.3141592653589793E1): 0.30293273836456464E2 0.30293273836456464E2 +(0.123E2, 0.2718281828459045E1, ~0.2718281828459045E1): 0.30716584661587213E2 0.30716584661587213E2 +(0.123E2, 0.2718281828459045E1, ~0.123E1): 0.3220486649004626E2 0.3220486649004626E2 +(0.123E2, 0.2718281828459045E1, ~0.123): 0.33311866490046256E2 0.33311866490046256E2 +(0.123E2, 0.2718281828459045E1, ~0.123E~2): 0.33433636490046254E2 0.33433636490046254E2 +(0.123E2, 0.2718281828459045E1, ~0.22250738585072014E~307): 0.33434866490046254E2 0.33434866490046254E2 +(0.123E2, 0.2718281828459045E1, ~0.11125369292536007E~307): 0.33434866490046254E2 0.33434866490046254E2 +(0.123E2, 0.2718281828459045E1, ~0.5E~323): 0.33434866490046254E2 0.33434866490046254E2 +(0.123E2, 0.2718281828459045E1, ~0.0): 0.33434866490046254E2 0.33434866490046254E2 +(0.123E2, 0.123E1, 0.123E4): 0.1245129E4 0.1245129E4 +(0.123E2, 0.123E1, 0.123E2): 0.27429000000000002E2 0.27429000000000002E2 +(0.123E2, 0.123E1, 0.3141592653589793E1): 0.18270592653589794E2 0.18270592653589794E2 +(0.123E2, 0.123E1, 0.2718281828459045E1): 0.17847281828459046E2 0.17847281828459046E2 +(0.123E2, 0.123E1, 0.123E1): 0.16359E2 0.16359E2 +(0.123E2, 0.123E1, 0.123): 0.15252E2 0.15252E2 +(0.123E2, 0.123E1, 0.123E~2): 0.15130230000000001E2 0.15130230000000001E2 +(0.123E2, 0.123E1, 0.22250738585072014E~307): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E2, 0.123E1, 0.11125369292536007E~307): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E2, 0.123E1, 0.5E~323): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E2, 0.123E1, 0.0): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E2, 0.123E1, ~0.123E4): ~0.1214871E4 ~0.1214871E4 +(0.123E2, 0.123E1, ~0.123E2): 0.28289999999999997E1 0.28289999999999997E1 +(0.123E2, 0.123E1, ~0.3141592653589793E1): 0.11987407346410208E2 0.11987407346410208E2 +(0.123E2, 0.123E1, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540955E2 +(0.123E2, 0.123E1, ~0.123E1): 0.13899000000000001E2 0.13899000000000001E2 +(0.123E2, 0.123E1, ~0.123): 0.15006E2 0.15006E2 +(0.123E2, 0.123E1, ~0.123E~2): 0.1512777E2 0.1512777E2 +(0.123E2, 0.123E1, ~0.22250738585072014E~307): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E2, 0.123E1, ~0.11125369292536007E~307): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E2, 0.123E1, ~0.5E~323): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E2, 0.123E1, ~0.0): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E2, 0.123, 0.123E4): 0.12315129E4 0.12315129E4 +(0.123E2, 0.123, 0.123E2): 0.138129E2 0.138129E2 +(0.123E2, 0.123, 0.3141592653589793E1): 0.4654492653589793E1 0.4654492653589793E1 +(0.123E2, 0.123, 0.2718281828459045E1): 0.4231181828459045E1 0.4231181828459045E1 +(0.123E2, 0.123, 0.123E1): 0.27429E1 0.27429E1 +(0.123E2, 0.123, 0.123): 0.16359000000000001E1 0.16359000000000001E1 +(0.123E2, 0.123, 0.123E~2): 0.151413E1 0.151413E1 +(0.123E2, 0.123, 0.22250738585072014E~307): 0.15129000000000001E1 0.15129000000000001E1 +(0.123E2, 0.123, 0.11125369292536007E~307): 0.15129000000000001E1 0.15129000000000001E1 +(0.123E2, 0.123, 0.5E~323): 0.15129000000000001E1 0.15129000000000001E1 +(0.123E2, 0.123, 0.0): 0.15129000000000001E1 0.15129000000000001E1 +(0.123E2, 0.123, ~0.123E4): ~0.12284871E4 ~0.12284871E4 +(0.123E2, 0.123, ~0.123E2): ~0.107871E2 ~0.107871E2 +(0.123E2, 0.123, ~0.3141592653589793E1): ~0.1628692653589793E1 ~0.1628692653589793E1 +(0.123E2, 0.123, ~0.2718281828459045E1): ~0.1205381828459045E1 ~0.1205381828459045E1 +(0.123E2, 0.123, ~0.123E1): 0.2829000000000001 0.2829000000000001 +(0.123E2, 0.123, ~0.123): 0.13899000000000001E1 0.13899000000000001E1 +(0.123E2, 0.123, ~0.123E~2): 0.151167E1 0.151167E1 +(0.123E2, 0.123, ~0.22250738585072014E~307): 0.15129000000000001E1 0.15129000000000001E1 +(0.123E2, 0.123, ~0.11125369292536007E~307): 0.15129000000000001E1 0.15129000000000001E1 +(0.123E2, 0.123, ~0.5E~323): 0.15129000000000001E1 0.15129000000000001E1 +(0.123E2, 0.123, ~0.0): 0.15129000000000001E1 0.15129000000000001E1 +(0.123E2, 0.123E~2, 0.123E4): 0.1230015129E4 0.1230015129E4 +(0.123E2, 0.123E~2, 0.123E2): 0.12315129E2 0.12315129E2 +(0.123E2, 0.123E~2, 0.3141592653589793E1): 0.3156721653589793E1 0.3156721653589793E1 +(0.123E2, 0.123E~2, 0.2718281828459045E1): 0.2733410828459045E1 0.2733410828459045E1 +(0.123E2, 0.123E~2, 0.123E1): 0.1245129E1 0.1245129E1 +(0.123E2, 0.123E~2, 0.123): 0.138129 0.138129 +(0.123E2, 0.123E~2, 0.123E~2): 0.16359000000000002E~1 0.16359000000000002E~1 +(0.123E2, 0.123E~2, 0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(0.123E2, 0.123E~2, 0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(0.123E2, 0.123E~2, 0.5E~323): 0.15129E~1 0.15129E~1 +(0.123E2, 0.123E~2, 0.0): 0.15129E~1 0.15129E~1 +(0.123E2, 0.123E~2, ~0.123E4): ~0.1229984871E4 ~0.1229984871E4 +(0.123E2, 0.123E~2, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(0.123E2, 0.123E~2, ~0.3141592653589793E1): ~0.3126463653589793E1 ~0.3126463653589793E1 +(0.123E2, 0.123E~2, ~0.2718281828459045E1): ~0.2703152828459045E1 ~0.2703152828459045E1 +(0.123E2, 0.123E~2, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(0.123E2, 0.123E~2, ~0.123): ~0.107871 ~0.107871 +(0.123E2, 0.123E~2, ~0.123E~2): 0.13899E~1 0.13899E~1 +(0.123E2, 0.123E~2, ~0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(0.123E2, 0.123E~2, ~0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(0.123E2, 0.123E~2, ~0.5E~323): 0.15129E~1 0.15129E~1 +(0.123E2, 0.123E~2, ~0.0): 0.15129E~1 0.15129E~1 +(0.123E2, 0.22250738585072014E~307, 0.5E~323): 0.2736840845963858E~306 0.2736840845963858E~306 +(0.123E2, 0.22250738585072014E~307, ~0.5E~323): 0.2736840845963858E~306 0.2736840845963858E~306 +(0.123E2, 0.11125369292536007E~307, 0.5E~323): 0.1368420422981929E~306 0.1368420422981929E~306 +(0.123E2, 0.11125369292536007E~307, ~0.5E~323): 0.1368420422981929E~306 0.1368420422981929E~306 +(0.123E2, 0.5E~323, 0.22250738585072014E~307): 0.22250738585072073E~307 0.22250738585072073E~307 +(0.123E2, 0.5E~323, 0.11125369292536007E~307): 0.11125369292536066E~307 0.11125369292536066E~307 +(0.123E2, 0.5E~323, 0.5E~323): 0.64E~322 0.64E~322 +(0.123E2, 0.5E~323, 0.0): 0.6E~322 0.6E~322 +(0.123E2, 0.5E~323, ~0.22250738585072014E~307): ~0.22250738585071955E~307 ~0.22250738585071955E~307 +(0.123E2, 0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253595E~307 ~0.1112536929253595E~307 +(0.123E2, 0.5E~323, ~0.5E~323): 0.54E~322 0.54E~322 +(0.123E2, 0.5E~323, ~0.0): 0.6E~322 0.6E~322 +(0.123E2, ~0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.123E4): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.123E2): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.123E1): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.123): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.123E~2): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.5E~323): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, 0.0): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.123E4): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.123E2): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.123E1): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.123): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(0.123E2, ~0.17976931348623157E309, ~0.0): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.17976931348623157E309): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.8988465674311579E308): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.123E4): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.123E2): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.123E1): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.123): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.123E~2): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.5E~323): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, 0.0): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.123E4): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.123E2): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.123E1): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.123): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(0.123E2, ~0.8988465674311579E308, ~0.0): ~inf ~inf +(0.123E2, ~0.123E4, 0.123E4): ~0.13899E5 ~0.13899E5 +(0.123E2, ~0.123E4, 0.123E2): ~0.151167E5 ~0.151167E5 +(0.123E2, ~0.123E4, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.15125858407346412E5 +(0.123E2, ~0.123E4, 0.2718281828459045E1): ~0.15126281718171542E5 ~0.15126281718171542E5 +(0.123E2, ~0.123E4, 0.123E1): ~0.1512777E5 ~0.1512777E5 +(0.123E2, ~0.123E4, 0.123): ~0.15128877E5 ~0.15128877E5 +(0.123E2, ~0.123E4, 0.123E~2): ~0.1512899877E5 ~0.1512899877E5 +(0.123E2, ~0.123E4, 0.22250738585072014E~307): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, 0.11125369292536007E~307): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, 0.5E~323): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, 0.0): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, ~0.123E4): ~0.16359E5 ~0.16359E5 +(0.123E2, ~0.123E4, ~0.123E2): ~0.15141300000000001E5 ~0.15141300000000001E5 +(0.123E2, ~0.123E4, ~0.3141592653589793E1): ~0.1513214159265359E5 ~0.1513214159265359E5 +(0.123E2, ~0.123E4, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.1513171828182846E5 +(0.123E2, ~0.123E4, ~0.123E1): ~0.15130230000000001E5 ~0.15130230000000001E5 +(0.123E2, ~0.123E4, ~0.123): ~0.15129123000000001E5 ~0.15129123000000001E5 +(0.123E2, ~0.123E4, ~0.123E~2): ~0.15129001230000002E5 ~0.15129001230000002E5 +(0.123E2, ~0.123E4, ~0.22250738585072014E~307): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, ~0.11125369292536007E~307): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, ~0.5E~323): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E4, ~0.0): ~0.15129E5 ~0.15129E5 +(0.123E2, ~0.123E2, 0.123E4): 0.107871E4 0.107871E4 +(0.123E2, ~0.123E2, 0.123E2): ~0.13899E3 ~0.13899E3 +(0.123E2, ~0.123E2, 0.3141592653589793E1): ~0.14814840734641024E3 ~0.14814840734641024E3 +(0.123E2, ~0.123E2, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154097E3 +(0.123E2, ~0.123E2, 0.123E1): ~0.15006000000000003E3 ~0.15006000000000003E3 +(0.123E2, ~0.123E2, 0.123): ~0.15116700000000003E3 ~0.15116700000000003E3 +(0.123E2, ~0.123E2, 0.123E~2): ~0.15128877000000003E3 ~0.15128877000000003E3 +(0.123E2, ~0.123E2, 0.22250738585072014E~307): ~0.15129000000000002E3 ~0.15129000000000002E3 +(0.123E2, ~0.123E2, 0.11125369292536007E~307): ~0.15129000000000002E3 ~0.15129000000000002E3 +(0.123E2, ~0.123E2, 0.5E~323): ~0.15129000000000002E3 ~0.15129000000000002E3 +(0.123E2, ~0.123E2, 0.0): ~0.15129000000000002E3 ~0.15129000000000002E3 +(0.123E2, ~0.123E2, ~0.123E4): ~0.138129E4 ~0.138129E4 +(0.123E2, ~0.123E2, ~0.123E2): ~0.16359000000000003E3 ~0.16359000000000003E3 +(0.123E2, ~0.123E2, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.1544315926535898E3 +(0.123E2, ~0.123E2, ~0.2718281828459045E1): ~0.15400828182845908E3 ~0.15400828182845908E3 +(0.123E2, ~0.123E2, ~0.123E1): ~0.15252E3 ~0.15252E3 +(0.123E2, ~0.123E2, ~0.123): ~0.151413E3 ~0.151413E3 +(0.123E2, ~0.123E2, ~0.123E~2): ~0.15129123E3 ~0.15129123E3 +(0.123E2, ~0.123E2, ~0.22250738585072014E~307): ~0.15129000000000002E3 ~0.15129000000000002E3 +(0.123E2, ~0.123E2, ~0.11125369292536007E~307): ~0.15129000000000002E3 ~0.15129000000000002E3 +(0.123E2, ~0.123E2, ~0.5E~323): ~0.15129000000000002E3 ~0.15129000000000002E3 +(0.123E2, ~0.123E2, ~0.0): ~0.15129000000000002E3 ~0.15129000000000002E3 +(0.123E2, ~0.3141592653589793E1, 0.123E4): 0.11913584103608455E4 0.11913584103608455E4 +(0.123E2, ~0.3141592653589793E1, 0.123E2): ~0.26341589639154456E2 ~0.26341589639154456E2 +(0.123E2, ~0.3141592653589793E1, 0.3141592653589793E1): ~0.35499996985564664E2 ~0.35499996985564664E2 +(0.123E2, ~0.3141592653589793E1, 0.2718281828459045E1): ~0.3592330781069541E2 ~0.3592330781069541E2 +(0.123E2, ~0.3141592653589793E1, 0.123E1): ~0.3741158963915446E2 ~0.3741158963915446E2 +(0.123E2, ~0.3141592653589793E1, 0.123): ~0.38518589639154456E2 ~0.38518589639154456E2 +(0.123E2, ~0.3141592653589793E1, 0.123E~2): ~0.3864035963915446E2 ~0.3864035963915446E2 +(0.123E2, ~0.3141592653589793E1, 0.22250738585072014E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.123E2, ~0.3141592653589793E1, 0.11125369292536007E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.123E2, ~0.3141592653589793E1, 0.5E~323): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.123E2, ~0.3141592653589793E1, 0.0): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.123E2, ~0.3141592653589793E1, ~0.123E4): ~0.12686415896391545E4 ~0.12686415896391545E4 +(0.123E2, ~0.3141592653589793E1, ~0.123E2): ~0.5094158963915446E2 ~0.5094158963915446E2 +(0.123E2, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274425E2 +(0.123E2, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.413598714676135E2 +(0.123E2, ~0.3141592653589793E1, ~0.123E1): ~0.3987158963915446E2 ~0.3987158963915446E2 +(0.123E2, ~0.3141592653589793E1, ~0.123): ~0.3876458963915446E2 ~0.3876458963915446E2 +(0.123E2, ~0.3141592653589793E1, ~0.123E~2): ~0.3864281963915446E2 ~0.3864281963915446E2 +(0.123E2, ~0.3141592653589793E1, ~0.22250738585072014E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.123E2, ~0.3141592653589793E1, ~0.11125369292536007E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.123E2, ~0.3141592653589793E1, ~0.5E~323): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.123E2, ~0.3141592653589793E1, ~0.0): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.123E2, ~0.2718281828459045E1, 0.123E4): 0.11965651335099537E4 0.11965651335099537E4 +(0.123E2, ~0.2718281828459045E1, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046257E2 +(0.123E2, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.30293273836456464E2 +(0.123E2, ~0.2718281828459045E1, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.30716584661587213E2 +(0.123E2, ~0.2718281828459045E1, 0.123E1): ~0.3220486649004626E2 ~0.3220486649004626E2 +(0.123E2, ~0.2718281828459045E1, 0.123): ~0.33311866490046256E2 ~0.33311866490046256E2 +(0.123E2, ~0.2718281828459045E1, 0.123E~2): ~0.33433636490046254E2 ~0.33433636490046254E2 +(0.123E2, ~0.2718281828459045E1, 0.22250738585072014E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.123E2, ~0.2718281828459045E1, 0.11125369292536007E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.123E2, ~0.2718281828459045E1, 0.5E~323): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.123E2, ~0.2718281828459045E1, 0.0): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.123E2, ~0.2718281828459045E1, ~0.123E4): ~0.12634348664900463E4 ~0.12634348664900463E4 +(0.123E2, ~0.2718281828459045E1, ~0.123E2): ~0.4573486649004626E2 ~0.4573486649004626E2 +(0.123E2, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363605E2 +(0.123E2, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.361531483185053E2 ~0.361531483185053E2 +(0.123E2, ~0.2718281828459045E1, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004626E2 +(0.123E2, ~0.2718281828459045E1, ~0.123): ~0.3355786649004626E2 ~0.3355786649004626E2 +(0.123E2, ~0.2718281828459045E1, ~0.123E~2): ~0.3343609649004625E2 ~0.3343609649004625E2 +(0.123E2, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.123E2, ~0.2718281828459045E1, ~0.11125369292536007E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.123E2, ~0.2718281828459045E1, ~0.5E~323): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.123E2, ~0.2718281828459045E1, ~0.0): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.123E2, ~0.123E1, 0.123E4): 0.1214871E4 0.1214871E4 +(0.123E2, ~0.123E1, 0.123E2): ~0.28289999999999997E1 ~0.28289999999999997E1 +(0.123E2, ~0.123E1, 0.3141592653589793E1): ~0.11987407346410208E2 ~0.11987407346410208E2 +(0.123E2, ~0.123E1, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540955E2 +(0.123E2, ~0.123E1, 0.123E1): ~0.13899000000000001E2 ~0.13899000000000001E2 +(0.123E2, ~0.123E1, 0.123): ~0.15006E2 ~0.15006E2 +(0.123E2, ~0.123E1, 0.123E~2): ~0.1512777E2 ~0.1512777E2 +(0.123E2, ~0.123E1, 0.22250738585072014E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E2, ~0.123E1, 0.11125369292536007E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E2, ~0.123E1, 0.5E~323): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E2, ~0.123E1, 0.0): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E2, ~0.123E1, ~0.123E4): ~0.1245129E4 ~0.1245129E4 +(0.123E2, ~0.123E1, ~0.123E2): ~0.27429000000000002E2 ~0.27429000000000002E2 +(0.123E2, ~0.123E1, ~0.3141592653589793E1): ~0.18270592653589794E2 ~0.18270592653589794E2 +(0.123E2, ~0.123E1, ~0.2718281828459045E1): ~0.17847281828459046E2 ~0.17847281828459046E2 +(0.123E2, ~0.123E1, ~0.123E1): ~0.16359E2 ~0.16359E2 +(0.123E2, ~0.123E1, ~0.123): ~0.15252E2 ~0.15252E2 +(0.123E2, ~0.123E1, ~0.123E~2): ~0.15130230000000001E2 ~0.15130230000000001E2 +(0.123E2, ~0.123E1, ~0.22250738585072014E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E2, ~0.123E1, ~0.11125369292536007E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E2, ~0.123E1, ~0.5E~323): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E2, ~0.123E1, ~0.0): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E2, ~0.123, 0.123E4): 0.12284871E4 0.12284871E4 +(0.123E2, ~0.123, 0.123E2): 0.107871E2 0.107871E2 +(0.123E2, ~0.123, 0.3141592653589793E1): 0.1628692653589793E1 0.1628692653589793E1 +(0.123E2, ~0.123, 0.2718281828459045E1): 0.1205381828459045E1 0.1205381828459045E1 +(0.123E2, ~0.123, 0.123E1): ~0.2829000000000001 ~0.2829000000000001 +(0.123E2, ~0.123, 0.123): ~0.13899000000000001E1 ~0.13899000000000001E1 +(0.123E2, ~0.123, 0.123E~2): ~0.151167E1 ~0.151167E1 +(0.123E2, ~0.123, 0.22250738585072014E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123E2, ~0.123, 0.11125369292536007E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123E2, ~0.123, 0.5E~323): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123E2, ~0.123, 0.0): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123E2, ~0.123, ~0.123E4): ~0.12315129E4 ~0.12315129E4 +(0.123E2, ~0.123, ~0.123E2): ~0.138129E2 ~0.138129E2 +(0.123E2, ~0.123, ~0.3141592653589793E1): ~0.4654492653589793E1 ~0.4654492653589793E1 +(0.123E2, ~0.123, ~0.2718281828459045E1): ~0.4231181828459045E1 ~0.4231181828459045E1 +(0.123E2, ~0.123, ~0.123E1): ~0.27429E1 ~0.27429E1 +(0.123E2, ~0.123, ~0.123): ~0.16359000000000001E1 ~0.16359000000000001E1 +(0.123E2, ~0.123, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(0.123E2, ~0.123, ~0.22250738585072014E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123E2, ~0.123, ~0.11125369292536007E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123E2, ~0.123, ~0.5E~323): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123E2, ~0.123, ~0.0): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123E2, ~0.123E~2, 0.123E4): 0.1229984871E4 0.1229984871E4 +(0.123E2, ~0.123E~2, 0.123E2): 0.12284871E2 0.12284871E2 +(0.123E2, ~0.123E~2, 0.3141592653589793E1): 0.3126463653589793E1 0.3126463653589793E1 +(0.123E2, ~0.123E~2, 0.2718281828459045E1): 0.2703152828459045E1 0.2703152828459045E1 +(0.123E2, ~0.123E~2, 0.123E1): 0.1214871E1 0.1214871E1 +(0.123E2, ~0.123E~2, 0.123): 0.107871 0.107871 +(0.123E2, ~0.123E~2, 0.123E~2): ~0.13899E~1 ~0.13899E~1 +(0.123E2, ~0.123E~2, 0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(0.123E2, ~0.123E~2, 0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(0.123E2, ~0.123E~2, 0.5E~323): ~0.15129E~1 ~0.15129E~1 +(0.123E2, ~0.123E~2, 0.0): ~0.15129E~1 ~0.15129E~1 +(0.123E2, ~0.123E~2, ~0.123E4): ~0.1230015129E4 ~0.1230015129E4 +(0.123E2, ~0.123E~2, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(0.123E2, ~0.123E~2, ~0.3141592653589793E1): ~0.3156721653589793E1 ~0.3156721653589793E1 +(0.123E2, ~0.123E~2, ~0.2718281828459045E1): ~0.2733410828459045E1 ~0.2733410828459045E1 +(0.123E2, ~0.123E~2, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(0.123E2, ~0.123E~2, ~0.123): ~0.138129 ~0.138129 +(0.123E2, ~0.123E~2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359000000000002E~1 +(0.123E2, ~0.123E~2, ~0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(0.123E2, ~0.123E~2, ~0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(0.123E2, ~0.123E~2, ~0.5E~323): ~0.15129E~1 ~0.15129E~1 +(0.123E2, ~0.123E~2, ~0.0): ~0.15129E~1 ~0.15129E~1 +(0.123E2, ~0.22250738585072014E~307, 0.5E~323): ~0.2736840845963858E~306 ~0.2736840845963858E~306 +(0.123E2, ~0.22250738585072014E~307, ~0.5E~323): ~0.2736840845963858E~306 ~0.2736840845963858E~306 +(0.123E2, ~0.11125369292536007E~307, 0.5E~323): ~0.1368420422981929E~306 ~0.1368420422981929E~306 +(0.123E2, ~0.11125369292536007E~307, ~0.5E~323): ~0.1368420422981929E~306 ~0.1368420422981929E~306 +(0.123E2, ~0.5E~323, 0.22250738585072014E~307): 0.22250738585071955E~307 0.22250738585071955E~307 +(0.123E2, ~0.5E~323, 0.11125369292536007E~307): 0.1112536929253595E~307 0.1112536929253595E~307 +(0.123E2, ~0.5E~323, 0.5E~323): ~0.54E~322 ~0.54E~322 +(0.123E2, ~0.5E~323, 0.0): ~0.6E~322 ~0.6E~322 +(0.123E2, ~0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072073E~307 ~0.22250738585072073E~307 +(0.123E2, ~0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536066E~307 ~0.11125369292536066E~307 +(0.123E2, ~0.5E~323, ~0.5E~323): ~0.64E~322 ~0.64E~322 +(0.123E2, ~0.5E~323, ~0.0): ~0.6E~322 ~0.6E~322 +(0.3141592653589793E1, 0.17976931348623157E309, 0.17976931348623157E309): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.8988465674311579E308): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.123E4): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.123E2): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.3141592653589793E1): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.2718281828459045E1): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.123E1): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.123): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.123E~2): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.5E~323): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, 0.0): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.123E4): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.123E2): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.123E1): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.123): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.123E~2): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.5E~323): inf inf +(0.3141592653589793E1, 0.17976931348623157E309, ~0.0): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.17976931348623157E309): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.8988465674311579E308): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.123E4): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.123E2): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.3141592653589793E1): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.2718281828459045E1): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.123E1): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.123): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.123E~2): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.5E~323): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, 0.0): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.17976931348623157E309): 0.10261166380838123E309 0.10261166380838123E309 +(0.3141592653589793E1, 0.8988465674311579E308, ~0.8988465674311579E308): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.123E4): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.123E2): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.123E1): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.123): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.123E~2): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.5E~323): inf inf +(0.3141592653589793E1, 0.8988465674311579E308, ~0.0): inf inf +(0.3141592653589793E1, 0.123E4, 0.123E4): 0.5094158963915445E4 0.5094158963915445E4 +(0.3141592653589793E1, 0.123E4, 0.123E2): 0.38764589639154456E4 0.38764589639154456E4 +(0.3141592653589793E1, 0.123E4, 0.3141592653589793E1): 0.38673005565690355E4 0.38673005565690355E4 +(0.3141592653589793E1, 0.123E4, 0.2718281828459045E1): 0.38668772457439045E4 0.38668772457439045E4 +(0.3141592653589793E1, 0.123E4, 0.123E1): 0.38653889639154454E4 0.38653889639154454E4 +(0.3141592653589793E1, 0.123E4, 0.123): 0.38642819639154454E4 0.38642819639154454E4 +(0.3141592653589793E1, 0.123E4, 0.123E~2): 0.38641601939154457E4 0.38641601939154457E4 +(0.3141592653589793E1, 0.123E4, 0.22250738585072014E~307): 0.38641589639154454E4 0.38641589639154454E4 +(0.3141592653589793E1, 0.123E4, 0.11125369292536007E~307): 0.38641589639154454E4 0.38641589639154454E4 +(0.3141592653589793E1, 0.123E4, 0.5E~323): 0.38641589639154454E4 0.38641589639154454E4 +(0.3141592653589793E1, 0.123E4, 0.0): 0.38641589639154454E4 0.38641589639154454E4 +(0.3141592653589793E1, 0.123E4, ~0.123E4): 0.26341589639154454E4 0.26341589639154454E4 +(0.3141592653589793E1, 0.123E4, ~0.123E2): 0.38518589639154457E4 0.38518589639154457E4 +(0.3141592653589793E1, 0.123E4, ~0.3141592653589793E1): 0.38610173712618557E4 0.38610173712618557E4 +(0.3141592653589793E1, 0.123E4, ~0.2718281828459045E1): 0.38614406820869863E4 0.38614406820869863E4 +(0.3141592653589793E1, 0.123E4, ~0.123E1): 0.38629289639154454E4 0.38629289639154454E4 +(0.3141592653589793E1, 0.123E4, ~0.123): 0.38640359639154453E4 0.38640359639154453E4 +(0.3141592653589793E1, 0.123E4, ~0.123E~2): 0.38641577339154455E4 0.38641577339154455E4 +(0.3141592653589793E1, 0.123E4, ~0.22250738585072014E~307): 0.38641589639154454E4 0.38641589639154454E4 +(0.3141592653589793E1, 0.123E4, ~0.11125369292536007E~307): 0.38641589639154454E4 0.38641589639154454E4 +(0.3141592653589793E1, 0.123E4, ~0.5E~323): 0.38641589639154454E4 0.38641589639154454E4 +(0.3141592653589793E1, 0.123E4, ~0.0): 0.38641589639154454E4 0.38641589639154454E4 +(0.3141592653589793E1, 0.123E2, 0.123E4): 0.12686415896391545E4 0.12686415896391545E4 +(0.3141592653589793E1, 0.123E2, 0.123E2): 0.5094158963915446E2 0.5094158963915446E2 +(0.3141592653589793E1, 0.123E2, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274425E2 +(0.3141592653589793E1, 0.123E2, 0.2718281828459045E1): 0.413598714676135E2 0.413598714676135E2 +(0.3141592653589793E1, 0.123E2, 0.123E1): 0.3987158963915446E2 0.3987158963915446E2 +(0.3141592653589793E1, 0.123E2, 0.123): 0.3876458963915446E2 0.3876458963915446E2 +(0.3141592653589793E1, 0.123E2, 0.123E~2): 0.3864281963915446E2 0.3864281963915446E2 +(0.3141592653589793E1, 0.123E2, 0.22250738585072014E~307): 0.3864158963915446E2 0.3864158963915446E2 +(0.3141592653589793E1, 0.123E2, 0.11125369292536007E~307): 0.3864158963915446E2 0.3864158963915446E2 +(0.3141592653589793E1, 0.123E2, 0.5E~323): 0.3864158963915446E2 0.3864158963915446E2 +(0.3141592653589793E1, 0.123E2, 0.0): 0.3864158963915446E2 0.3864158963915446E2 +(0.3141592653589793E1, 0.123E2, ~0.123E4): ~0.11913584103608455E4 ~0.11913584103608455E4 +(0.3141592653589793E1, 0.123E2, ~0.123E2): 0.26341589639154456E2 0.26341589639154456E2 +(0.3141592653589793E1, 0.123E2, ~0.3141592653589793E1): 0.35499996985564664E2 0.35499996985564664E2 +(0.3141592653589793E1, 0.123E2, ~0.2718281828459045E1): 0.3592330781069541E2 0.3592330781069541E2 +(0.3141592653589793E1, 0.123E2, ~0.123E1): 0.3741158963915446E2 0.3741158963915446E2 +(0.3141592653589793E1, 0.123E2, ~0.123): 0.38518589639154456E2 0.38518589639154456E2 +(0.3141592653589793E1, 0.123E2, ~0.123E~2): 0.3864035963915446E2 0.3864035963915446E2 +(0.3141592653589793E1, 0.123E2, ~0.22250738585072014E~307): 0.3864158963915446E2 0.3864158963915446E2 +(0.3141592653589793E1, 0.123E2, ~0.11125369292536007E~307): 0.3864158963915446E2 0.3864158963915446E2 +(0.3141592653589793E1, 0.123E2, ~0.5E~323): 0.3864158963915446E2 0.3864158963915446E2 +(0.3141592653589793E1, 0.123E2, ~0.0): 0.3864158963915446E2 0.3864158963915446E2 +(0.3141592653589793E1, 0.3141592653589793E1, 0.123E4): 0.12398696044010894E4 0.12398696044010894E4 +(0.3141592653589793E1, 0.3141592653589793E1, 0.123E2): 0.2216960440108936E2 0.2216960440108936E2 +(0.3141592653589793E1, 0.3141592653589793E1, 0.3141592653589793E1): 0.13011197054679151E2 0.13011197054679151E2 +(0.3141592653589793E1, 0.3141592653589793E1, 0.2718281828459045E1): 0.12587886229548403E2 0.12587886229548403E2 +(0.3141592653589793E1, 0.3141592653589793E1, 0.123E1): 0.11099604401089358E2 0.11099604401089358E2 +(0.3141592653589793E1, 0.3141592653589793E1, 0.123): 0.9992604401089357E1 0.9992604401089357E1 +(0.3141592653589793E1, 0.3141592653589793E1, 0.123E~2): 0.9870834401089358E1 0.9870834401089358E1 +(0.3141592653589793E1, 0.3141592653589793E1, 0.22250738585072014E~307): 0.9869604401089358E1 0.9869604401089358E1 +(0.3141592653589793E1, 0.3141592653589793E1, 0.11125369292536007E~307): 0.9869604401089358E1 0.9869604401089358E1 +(0.3141592653589793E1, 0.3141592653589793E1, 0.5E~323): 0.9869604401089358E1 0.9869604401089358E1 +(0.3141592653589793E1, 0.3141592653589793E1, 0.0): 0.9869604401089358E1 0.9869604401089358E1 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.123E4): ~0.12201303955989106E4 ~0.12201303955989106E4 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.123E2): ~0.24303955989106427E1 ~0.24303955989106427E1 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.3141592653589793E1): 0.6728011747499565E1 0.6728011747499565E1 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.2718281828459045E1): 0.71513225726303125E1 0.71513225726303125E1 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.123E1): 0.8639604401089358E1 0.8639604401089358E1 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.123): 0.9746604401089359E1 0.9746604401089359E1 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.123E~2): 0.9868374401089358E1 0.9868374401089358E1 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.22250738585072014E~307): 0.9869604401089358E1 0.9869604401089358E1 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.11125369292536007E~307): 0.9869604401089358E1 0.9869604401089358E1 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.5E~323): 0.9869604401089358E1 0.9869604401089358E1 +(0.3141592653589793E1, 0.3141592653589793E1, ~0.0): 0.9869604401089358E1 0.9869604401089358E1 +(0.3141592653589793E1, 0.2718281828459045E1, 0.123E4): 0.12385397342226736E4 0.12385397342226736E4 +(0.3141592653589793E1, 0.2718281828459045E1, 0.123E2): 0.20839734222673567E2 0.20839734222673567E2 +(0.3141592653589793E1, 0.2718281828459045E1, 0.3141592653589793E1): 0.11681326876263359E2 0.11681326876263359E2 +(0.3141592653589793E1, 0.2718281828459045E1, 0.2718281828459045E1): 0.1125801605113261E2 0.1125801605113261E2 +(0.3141592653589793E1, 0.2718281828459045E1, 0.123E1): 0.9769734222673566E1 0.9769734222673566E1 +(0.3141592653589793E1, 0.2718281828459045E1, 0.123): 0.8662734222673567E1 0.8662734222673567E1 +(0.3141592653589793E1, 0.2718281828459045E1, 0.123E~2): 0.8540964222673566E1 0.8540964222673566E1 +(0.3141592653589793E1, 0.2718281828459045E1, 0.22250738585072014E~307): 0.8539734222673566E1 0.8539734222673566E1 +(0.3141592653589793E1, 0.2718281828459045E1, 0.11125369292536007E~307): 0.8539734222673566E1 0.8539734222673566E1 +(0.3141592653589793E1, 0.2718281828459045E1, 0.5E~323): 0.8539734222673566E1 0.8539734222673566E1 +(0.3141592653589793E1, 0.2718281828459045E1, 0.0): 0.8539734222673566E1 0.8539734222673566E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.123E4): ~0.12214602657773264E4 ~0.12214602657773264E4 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264343E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.3141592653589793E1): 0.5398141569083773E1 0.5398141569083773E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.2718281828459045E1): 0.5821452394214521E1 0.5821452394214521E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.123E1): 0.7309734222673566E1 0.7309734222673566E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.123): 0.8416734222673567E1 0.8416734222673567E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.123E~2): 0.8538504222673566E1 0.8538504222673566E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.22250738585072014E~307): 0.8539734222673566E1 0.8539734222673566E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.11125369292536007E~307): 0.8539734222673566E1 0.8539734222673566E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.5E~323): 0.8539734222673566E1 0.8539734222673566E1 +(0.3141592653589793E1, 0.2718281828459045E1, ~0.0): 0.8539734222673566E1 0.8539734222673566E1 +(0.3141592653589793E1, 0.123E1, 0.123E4): 0.12338641589639155E4 0.12338641589639155E4 +(0.3141592653589793E1, 0.123E1, 0.123E2): 0.16164158963915447E2 0.16164158963915447E2 +(0.3141592653589793E1, 0.123E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505239E1 +(0.3141592653589793E1, 0.123E1, 0.2718281828459045E1): 0.65824407923744905E1 0.65824407923744905E1 +(0.3141592653589793E1, 0.123E1, 0.123E1): 0.5094158963915445E1 0.5094158963915445E1 +(0.3141592653589793E1, 0.123E1, 0.123): 0.39871589639154457E1 0.39871589639154457E1 +(0.3141592653589793E1, 0.123E1, 0.123E~2): 0.38653889639154455E1 0.38653889639154455E1 +(0.3141592653589793E1, 0.123E1, 0.22250738585072014E~307): 0.38641589639154454E1 0.38641589639154454E1 +(0.3141592653589793E1, 0.123E1, 0.11125369292536007E~307): 0.38641589639154454E1 0.38641589639154454E1 +(0.3141592653589793E1, 0.123E1, 0.5E~323): 0.38641589639154454E1 0.38641589639154454E1 +(0.3141592653589793E1, 0.123E1, 0.0): 0.38641589639154454E1 0.38641589639154454E1 +(0.3141592653589793E1, 0.123E1, ~0.123E4): ~0.12261358410360845E4 ~0.12261358410360845E4 +(0.3141592653589793E1, 0.123E1, ~0.123E2): ~0.8435841036084556E1 ~0.8435841036084556E1 +(0.3141592653589793E1, 0.123E1, ~0.3141592653589793E1): 0.7225663103256523 0.7225663103256523 +(0.3141592653589793E1, 0.123E1, ~0.2718281828459045E1): 0.11458771354564004E1 0.11458771354564004E1 +(0.3141592653589793E1, 0.123E1, ~0.123E1): 0.26341589639154455E1 0.26341589639154455E1 +(0.3141592653589793E1, 0.123E1, ~0.123): 0.37411589639154457E1 0.37411589639154457E1 +(0.3141592653589793E1, 0.123E1, ~0.123E~2): 0.38629289639154454E1 0.38629289639154454E1 +(0.3141592653589793E1, 0.123E1, ~0.22250738585072014E~307): 0.38641589639154454E1 0.38641589639154454E1 +(0.3141592653589793E1, 0.123E1, ~0.11125369292536007E~307): 0.38641589639154454E1 0.38641589639154454E1 +(0.3141592653589793E1, 0.123E1, ~0.5E~323): 0.38641589639154454E1 0.38641589639154454E1 +(0.3141592653589793E1, 0.123E1, ~0.0): 0.38641589639154454E1 0.38641589639154454E1 +(0.3141592653589793E1, 0.123, 0.123E4): 0.12303864158963916E4 0.12303864158963916E4 +(0.3141592653589793E1, 0.123, 0.123E2): 0.12686415896391546E2 0.12686415896391546E2 +(0.3141592653589793E1, 0.123, 0.3141592653589793E1): 0.35280085499813376E1 0.35280085499813376E1 +(0.3141592653589793E1, 0.123, 0.2718281828459045E1): 0.31046977248505896E1 0.31046977248505896E1 +(0.3141592653589793E1, 0.123, 0.123E1): 0.16164158963915445E1 0.16164158963915445E1 +(0.3141592653589793E1, 0.123, 0.123): 0.5094158963915445 0.5094158963915445 +(0.3141592653589793E1, 0.123, 0.123E~2): 0.38764589639154456 0.38764589639154456 +(0.3141592653589793E1, 0.123, 0.22250738585072014E~307): 0.38641589639154456 0.38641589639154456 +(0.3141592653589793E1, 0.123, 0.11125369292536007E~307): 0.38641589639154456 0.38641589639154456 +(0.3141592653589793E1, 0.123, 0.5E~323): 0.38641589639154456 0.38641589639154456 +(0.3141592653589793E1, 0.123, 0.0): 0.38641589639154456 0.38641589639154456 +(0.3141592653589793E1, 0.123, ~0.123E4): ~0.12296135841036084E4 ~0.12296135841036084E4 +(0.3141592653589793E1, 0.123, ~0.123E2): ~0.11913584103608455E2 ~0.11913584103608455E2 +(0.3141592653589793E1, 0.123, ~0.3141592653589793E1): ~0.27551767571982486E1 ~0.27551767571982486E1 +(0.3141592653589793E1, 0.123, ~0.2718281828459045E1): ~0.23318659320675006E1 ~0.23318659320675006E1 +(0.3141592653589793E1, 0.123, ~0.123E1): ~0.8435841036084555 ~0.8435841036084555 +(0.3141592653589793E1, 0.123, ~0.123): 0.26341589639154456 0.26341589639154456 +(0.3141592653589793E1, 0.123, ~0.123E~2): 0.38518589639154455 0.38518589639154455 +(0.3141592653589793E1, 0.123, ~0.22250738585072014E~307): 0.38641589639154456 0.38641589639154456 +(0.3141592653589793E1, 0.123, ~0.11125369292536007E~307): 0.38641589639154456 0.38641589639154456 +(0.3141592653589793E1, 0.123, ~0.5E~323): 0.38641589639154456 0.38641589639154456 +(0.3141592653589793E1, 0.123, ~0.0): 0.38641589639154456 0.38641589639154456 +(0.3141592653589793E1, 0.123E~2, 0.123E4): 0.1230003864158964E4 0.1230003864158964E4 +(0.3141592653589793E1, 0.123E~2, 0.123E2): 0.12303864158963917E2 0.12303864158963917E2 +(0.3141592653589793E1, 0.123E~2, 0.3141592653589793E1): 0.31454568125537086E1 0.31454568125537086E1 +(0.3141592653589793E1, 0.123E~2, 0.2718281828459045E1): 0.27221459874229605E1 0.27221459874229605E1 +(0.3141592653589793E1, 0.123E~2, 0.123E1): 0.12338641589639154E1 0.12338641589639154E1 +(0.3141592653589793E1, 0.123E~2, 0.123): 0.12686415896391545 0.12686415896391545 +(0.3141592653589793E1, 0.123E~2, 0.123E~2): 0.5094158963915445E~2 0.5094158963915445E~2 +(0.3141592653589793E1, 0.123E~2, 0.22250738585072014E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.3141592653589793E1, 0.123E~2, 0.11125369292536007E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.3141592653589793E1, 0.123E~2, 0.5E~323): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.3141592653589793E1, 0.123E~2, 0.0): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.3141592653589793E1, 0.123E~2, ~0.123E4): ~0.1229996135841036E4 ~0.1229996135841036E4 +(0.3141592653589793E1, 0.123E~2, ~0.123E2): ~0.12296135841036085E2 ~0.12296135841036085E2 +(0.3141592653589793E1, 0.123E~2, ~0.3141592653589793E1): ~0.31377284946258777E1 ~0.31377284946258777E1 +(0.3141592653589793E1, 0.123E~2, ~0.2718281828459045E1): ~0.27144176694951296E1 ~0.27144176694951296E1 +(0.3141592653589793E1, 0.123E~2, ~0.123E1): ~0.12261358410360845E1 ~0.12261358410360845E1 +(0.3141592653589793E1, 0.123E~2, ~0.123): ~0.11913584103608456 ~0.11913584103608456 +(0.3141592653589793E1, 0.123E~2, ~0.123E~2): 0.26341589639154455E~2 0.26341589639154455E~2 +(0.3141592653589793E1, 0.123E~2, ~0.22250738585072014E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.3141592653589793E1, 0.123E~2, ~0.11125369292536007E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.3141592653589793E1, 0.123E~2, ~0.5E~323): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.3141592653589793E1, 0.123E~2, ~0.0): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.3141592653589793E1, 0.22250738585072014E~307, 0.5E~323): 0.6990275687580919E~307 0.6990275687580919E~307 +(0.3141592653589793E1, 0.22250738585072014E~307, ~0.5E~323): 0.6990275687580919E~307 0.6990275687580919E~307 +(0.3141592653589793E1, 0.5E~323, 0.22250738585072014E~307): 0.2225073858507203E~307 0.2225073858507203E~307 +(0.3141592653589793E1, 0.5E~323, 0.11125369292536007E~307): 0.1112536929253602E~307 0.1112536929253602E~307 +(0.3141592653589793E1, 0.5E~323, 0.5E~323): 0.2E~322 0.2E~322 +(0.3141592653589793E1, 0.5E~323, 0.0): 0.15E~322 0.15E~322 +(0.3141592653589793E1, 0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072E~307 ~0.22250738585072E~307 +(0.3141592653589793E1, 0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253599E~307 ~0.1112536929253599E~307 +(0.3141592653589793E1, 0.5E~323, ~0.5E~323): 0.1E~322 0.1E~322 +(0.3141592653589793E1, 0.5E~323, ~0.0): 0.15E~322 0.15E~322 +(0.3141592653589793E1, ~0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.123E4): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.123E2): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.123E1): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.123): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.123E~2): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.5E~323): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, 0.0): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.123E4): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.123E2): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.123E1): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.123): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(0.3141592653589793E1, ~0.17976931348623157E309, ~0.0): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.17976931348623157E309): ~0.10261166380838123E309 ~0.10261166380838123E309 +(0.3141592653589793E1, ~0.8988465674311579E308, 0.8988465674311579E308): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.123E4): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.123E2): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.123E1): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.123): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.123E~2): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.5E~323): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, 0.0): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.123E4): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.123E2): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.123E1): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.123): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(0.3141592653589793E1, ~0.8988465674311579E308, ~0.0): ~inf ~inf +(0.3141592653589793E1, ~0.123E4, 0.123E4): ~0.26341589639154454E4 ~0.26341589639154454E4 +(0.3141592653589793E1, ~0.123E4, 0.123E2): ~0.38518589639154457E4 ~0.38518589639154457E4 +(0.3141592653589793E1, ~0.123E4, 0.3141592653589793E1): ~0.38610173712618557E4 ~0.38610173712618557E4 +(0.3141592653589793E1, ~0.123E4, 0.2718281828459045E1): ~0.38614406820869863E4 ~0.38614406820869863E4 +(0.3141592653589793E1, ~0.123E4, 0.123E1): ~0.38629289639154454E4 ~0.38629289639154454E4 +(0.3141592653589793E1, ~0.123E4, 0.123): ~0.38640359639154453E4 ~0.38640359639154453E4 +(0.3141592653589793E1, ~0.123E4, 0.123E~2): ~0.38641577339154455E4 ~0.38641577339154455E4 +(0.3141592653589793E1, ~0.123E4, 0.22250738585072014E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.3141592653589793E1, ~0.123E4, 0.11125369292536007E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.3141592653589793E1, ~0.123E4, 0.5E~323): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.3141592653589793E1, ~0.123E4, 0.0): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.3141592653589793E1, ~0.123E4, ~0.123E4): ~0.5094158963915445E4 ~0.5094158963915445E4 +(0.3141592653589793E1, ~0.123E4, ~0.123E2): ~0.38764589639154456E4 ~0.38764589639154456E4 +(0.3141592653589793E1, ~0.123E4, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.38673005565690355E4 +(0.3141592653589793E1, ~0.123E4, ~0.2718281828459045E1): ~0.38668772457439045E4 ~0.38668772457439045E4 +(0.3141592653589793E1, ~0.123E4, ~0.123E1): ~0.38653889639154454E4 ~0.38653889639154454E4 +(0.3141592653589793E1, ~0.123E4, ~0.123): ~0.38642819639154454E4 ~0.38642819639154454E4 +(0.3141592653589793E1, ~0.123E4, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154457E4 +(0.3141592653589793E1, ~0.123E4, ~0.22250738585072014E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.3141592653589793E1, ~0.123E4, ~0.11125369292536007E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.3141592653589793E1, ~0.123E4, ~0.5E~323): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.3141592653589793E1, ~0.123E4, ~0.0): ~0.38641589639154454E4 ~0.38641589639154454E4 +(0.3141592653589793E1, ~0.123E2, 0.123E4): 0.11913584103608455E4 0.11913584103608455E4 +(0.3141592653589793E1, ~0.123E2, 0.123E2): ~0.26341589639154456E2 ~0.26341589639154456E2 +(0.3141592653589793E1, ~0.123E2, 0.3141592653589793E1): ~0.35499996985564664E2 ~0.35499996985564664E2 +(0.3141592653589793E1, ~0.123E2, 0.2718281828459045E1): ~0.3592330781069541E2 ~0.3592330781069541E2 +(0.3141592653589793E1, ~0.123E2, 0.123E1): ~0.3741158963915446E2 ~0.3741158963915446E2 +(0.3141592653589793E1, ~0.123E2, 0.123): ~0.38518589639154456E2 ~0.38518589639154456E2 +(0.3141592653589793E1, ~0.123E2, 0.123E~2): ~0.3864035963915446E2 ~0.3864035963915446E2 +(0.3141592653589793E1, ~0.123E2, 0.22250738585072014E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.3141592653589793E1, ~0.123E2, 0.11125369292536007E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.3141592653589793E1, ~0.123E2, 0.5E~323): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.3141592653589793E1, ~0.123E2, 0.0): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.3141592653589793E1, ~0.123E2, ~0.123E4): ~0.12686415896391545E4 ~0.12686415896391545E4 +(0.3141592653589793E1, ~0.123E2, ~0.123E2): ~0.5094158963915446E2 ~0.5094158963915446E2 +(0.3141592653589793E1, ~0.123E2, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274425E2 +(0.3141592653589793E1, ~0.123E2, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.413598714676135E2 +(0.3141592653589793E1, ~0.123E2, ~0.123E1): ~0.3987158963915446E2 ~0.3987158963915446E2 +(0.3141592653589793E1, ~0.123E2, ~0.123): ~0.3876458963915446E2 ~0.3876458963915446E2 +(0.3141592653589793E1, ~0.123E2, ~0.123E~2): ~0.3864281963915446E2 ~0.3864281963915446E2 +(0.3141592653589793E1, ~0.123E2, ~0.22250738585072014E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.3141592653589793E1, ~0.123E2, ~0.11125369292536007E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.3141592653589793E1, ~0.123E2, ~0.5E~323): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.3141592653589793E1, ~0.123E2, ~0.0): ~0.3864158963915446E2 ~0.3864158963915446E2 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.123E4): 0.12201303955989106E4 0.12201303955989106E4 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.123E2): 0.24303955989106427E1 0.24303955989106427E1 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.3141592653589793E1): ~0.6728011747499565E1 ~0.6728011747499565E1 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.2718281828459045E1): ~0.71513225726303125E1 ~0.71513225726303125E1 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.123E1): ~0.8639604401089358E1 ~0.8639604401089358E1 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.123): ~0.9746604401089359E1 ~0.9746604401089359E1 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.123E~2): ~0.9868374401089358E1 ~0.9868374401089358E1 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.22250738585072014E~307): ~0.9869604401089358E1 ~0.9869604401089358E1 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.11125369292536007E~307): ~0.9869604401089358E1 ~0.9869604401089358E1 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.5E~323): ~0.9869604401089358E1 ~0.9869604401089358E1 +(0.3141592653589793E1, ~0.3141592653589793E1, 0.0): ~0.9869604401089358E1 ~0.9869604401089358E1 +(0.3141592653589793E1, ~0.3141592653589793E1, ~0.123E4): ~0.12398696044010894E4 ~0.12398696044010894E4 +(0.3141592653589793E1, ~0.3141592653589793E1, ~0.123E2): ~0.2216960440108936E2 ~0.2216960440108936E2 +(0.3141592653589793E1, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.13011197054679151E2 ~0.13011197054679151E2 +(0.3141592653589793E1, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.12587886229548403E2 ~0.12587886229548403E2 +(0.3141592653589793E1, ~0.3141592653589793E1, ~0.123E1): ~0.11099604401089358E2 ~0.11099604401089358E2 +(0.3141592653589793E1, ~0.3141592653589793E1, ~0.123): ~0.9992604401089357E1 ~0.9992604401089357E1 +(0.3141592653589793E1, ~0.3141592653589793E1, ~0.123E~2): ~0.9870834401089358E1 ~0.9870834401089358E1 +(0.3141592653589793E1, ~0.3141592653589793E1, ~0.22250738585072014E~307): ~0.9869604401089358E1 ~0.9869604401089358E1 +(0.3141592653589793E1, ~0.3141592653589793E1, ~0.11125369292536007E~307): ~0.9869604401089358E1 ~0.9869604401089358E1 +(0.3141592653589793E1, ~0.3141592653589793E1, ~0.5E~323): ~0.9869604401089358E1 ~0.9869604401089358E1 +(0.3141592653589793E1, ~0.3141592653589793E1, ~0.0): ~0.9869604401089358E1 ~0.9869604401089358E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.123E4): 0.12214602657773264E4 0.12214602657773264E4 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.123E2): 0.37602657773264343E1 0.37602657773264343E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.5398141569083773E1 ~0.5398141569083773E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.2718281828459045E1): ~0.5821452394214521E1 ~0.5821452394214521E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.123E1): ~0.7309734222673566E1 ~0.7309734222673566E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.123): ~0.8416734222673567E1 ~0.8416734222673567E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.123E~2): ~0.8538504222673566E1 ~0.8538504222673566E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.22250738585072014E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.11125369292536007E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.5E~323): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.3141592653589793E1, ~0.2718281828459045E1, 0.0): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E4): ~0.12385397342226736E4 ~0.12385397342226736E4 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E2): ~0.20839734222673567E2 ~0.20839734222673567E2 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.11681326876263359E2 ~0.11681326876263359E2 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.1125801605113261E2 ~0.1125801605113261E2 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E1): ~0.9769734222673566E1 ~0.9769734222673566E1 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673567E1 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E~2): ~0.8540964222673566E1 ~0.8540964222673566E1 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.11125369292536007E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.5E~323): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.3141592653589793E1, ~0.2718281828459045E1, ~0.0): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.3141592653589793E1, ~0.123E1, 0.123E4): 0.12261358410360845E4 0.12261358410360845E4 +(0.3141592653589793E1, ~0.123E1, 0.123E2): 0.8435841036084556E1 0.8435841036084556E1 +(0.3141592653589793E1, ~0.123E1, 0.3141592653589793E1): ~0.7225663103256523 ~0.7225663103256523 +(0.3141592653589793E1, ~0.123E1, 0.2718281828459045E1): ~0.11458771354564004E1 ~0.11458771354564004E1 +(0.3141592653589793E1, ~0.123E1, 0.123E1): ~0.26341589639154455E1 ~0.26341589639154455E1 +(0.3141592653589793E1, ~0.123E1, 0.123): ~0.37411589639154457E1 ~0.37411589639154457E1 +(0.3141592653589793E1, ~0.123E1, 0.123E~2): ~0.38629289639154454E1 ~0.38629289639154454E1 +(0.3141592653589793E1, ~0.123E1, 0.22250738585072014E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.3141592653589793E1, ~0.123E1, 0.11125369292536007E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.3141592653589793E1, ~0.123E1, 0.5E~323): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.3141592653589793E1, ~0.123E1, 0.0): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.3141592653589793E1, ~0.123E1, ~0.123E4): ~0.12338641589639155E4 ~0.12338641589639155E4 +(0.3141592653589793E1, ~0.123E1, ~0.123E2): ~0.16164158963915447E2 ~0.16164158963915447E2 +(0.3141592653589793E1, ~0.123E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505239E1 +(0.3141592653589793E1, ~0.123E1, ~0.2718281828459045E1): ~0.65824407923744905E1 ~0.65824407923744905E1 +(0.3141592653589793E1, ~0.123E1, ~0.123E1): ~0.5094158963915445E1 ~0.5094158963915445E1 +(0.3141592653589793E1, ~0.123E1, ~0.123): ~0.39871589639154457E1 ~0.39871589639154457E1 +(0.3141592653589793E1, ~0.123E1, ~0.123E~2): ~0.38653889639154455E1 ~0.38653889639154455E1 +(0.3141592653589793E1, ~0.123E1, ~0.22250738585072014E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.3141592653589793E1, ~0.123E1, ~0.11125369292536007E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.3141592653589793E1, ~0.123E1, ~0.5E~323): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.3141592653589793E1, ~0.123E1, ~0.0): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.3141592653589793E1, ~0.123, 0.123E4): 0.12296135841036084E4 0.12296135841036084E4 +(0.3141592653589793E1, ~0.123, 0.123E2): 0.11913584103608455E2 0.11913584103608455E2 +(0.3141592653589793E1, ~0.123, 0.3141592653589793E1): 0.27551767571982486E1 0.27551767571982486E1 +(0.3141592653589793E1, ~0.123, 0.2718281828459045E1): 0.23318659320675006E1 0.23318659320675006E1 +(0.3141592653589793E1, ~0.123, 0.123E1): 0.8435841036084555 0.8435841036084555 +(0.3141592653589793E1, ~0.123, 0.123): ~0.26341589639154456 ~0.26341589639154456 +(0.3141592653589793E1, ~0.123, 0.123E~2): ~0.38518589639154455 ~0.38518589639154455 +(0.3141592653589793E1, ~0.123, 0.22250738585072014E~307): ~0.38641589639154456 ~0.38641589639154456 +(0.3141592653589793E1, ~0.123, 0.11125369292536007E~307): ~0.38641589639154456 ~0.38641589639154456 +(0.3141592653589793E1, ~0.123, 0.5E~323): ~0.38641589639154456 ~0.38641589639154456 +(0.3141592653589793E1, ~0.123, 0.0): ~0.38641589639154456 ~0.38641589639154456 +(0.3141592653589793E1, ~0.123, ~0.123E4): ~0.12303864158963916E4 ~0.12303864158963916E4 +(0.3141592653589793E1, ~0.123, ~0.123E2): ~0.12686415896391546E2 ~0.12686415896391546E2 +(0.3141592653589793E1, ~0.123, ~0.3141592653589793E1): ~0.35280085499813376E1 ~0.35280085499813376E1 +(0.3141592653589793E1, ~0.123, ~0.2718281828459045E1): ~0.31046977248505896E1 ~0.31046977248505896E1 +(0.3141592653589793E1, ~0.123, ~0.123E1): ~0.16164158963915445E1 ~0.16164158963915445E1 +(0.3141592653589793E1, ~0.123, ~0.123): ~0.5094158963915445 ~0.5094158963915445 +(0.3141592653589793E1, ~0.123, ~0.123E~2): ~0.38764589639154456 ~0.38764589639154456 +(0.3141592653589793E1, ~0.123, ~0.22250738585072014E~307): ~0.38641589639154456 ~0.38641589639154456 +(0.3141592653589793E1, ~0.123, ~0.11125369292536007E~307): ~0.38641589639154456 ~0.38641589639154456 +(0.3141592653589793E1, ~0.123, ~0.5E~323): ~0.38641589639154456 ~0.38641589639154456 +(0.3141592653589793E1, ~0.123, ~0.0): ~0.38641589639154456 ~0.38641589639154456 +(0.3141592653589793E1, ~0.123E~2, 0.123E4): 0.1229996135841036E4 0.1229996135841036E4 +(0.3141592653589793E1, ~0.123E~2, 0.123E2): 0.12296135841036085E2 0.12296135841036085E2 +(0.3141592653589793E1, ~0.123E~2, 0.3141592653589793E1): 0.31377284946258777E1 0.31377284946258777E1 +(0.3141592653589793E1, ~0.123E~2, 0.2718281828459045E1): 0.27144176694951296E1 0.27144176694951296E1 +(0.3141592653589793E1, ~0.123E~2, 0.123E1): 0.12261358410360845E1 0.12261358410360845E1 +(0.3141592653589793E1, ~0.123E~2, 0.123): 0.11913584103608456 0.11913584103608456 +(0.3141592653589793E1, ~0.123E~2, 0.123E~2): ~0.26341589639154455E~2 ~0.26341589639154455E~2 +(0.3141592653589793E1, ~0.123E~2, 0.22250738585072014E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.3141592653589793E1, ~0.123E~2, 0.11125369292536007E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.3141592653589793E1, ~0.123E~2, 0.5E~323): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.3141592653589793E1, ~0.123E~2, 0.0): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.3141592653589793E1, ~0.123E~2, ~0.123E4): ~0.1230003864158964E4 ~0.1230003864158964E4 +(0.3141592653589793E1, ~0.123E~2, ~0.123E2): ~0.12303864158963917E2 ~0.12303864158963917E2 +(0.3141592653589793E1, ~0.123E~2, ~0.3141592653589793E1): ~0.31454568125537086E1 ~0.31454568125537086E1 +(0.3141592653589793E1, ~0.123E~2, ~0.2718281828459045E1): ~0.27221459874229605E1 ~0.27221459874229605E1 +(0.3141592653589793E1, ~0.123E~2, ~0.123E1): ~0.12338641589639154E1 ~0.12338641589639154E1 +(0.3141592653589793E1, ~0.123E~2, ~0.123): ~0.12686415896391545 ~0.12686415896391545 +(0.3141592653589793E1, ~0.123E~2, ~0.123E~2): ~0.5094158963915445E~2 ~0.5094158963915445E~2 +(0.3141592653589793E1, ~0.123E~2, ~0.22250738585072014E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.3141592653589793E1, ~0.123E~2, ~0.11125369292536007E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.3141592653589793E1, ~0.123E~2, ~0.5E~323): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.3141592653589793E1, ~0.123E~2, ~0.0): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.3141592653589793E1, ~0.22250738585072014E~307, 0.5E~323): ~0.6990275687580919E~307 ~0.6990275687580919E~307 +(0.3141592653589793E1, ~0.22250738585072014E~307, ~0.5E~323): ~0.6990275687580919E~307 ~0.6990275687580919E~307 +(0.3141592653589793E1, ~0.5E~323, 0.22250738585072014E~307): 0.22250738585072E~307 0.22250738585072E~307 +(0.3141592653589793E1, ~0.5E~323, 0.11125369292536007E~307): 0.1112536929253599E~307 0.1112536929253599E~307 +(0.3141592653589793E1, ~0.5E~323, 0.5E~323): ~0.1E~322 ~0.1E~322 +(0.3141592653589793E1, ~0.5E~323, 0.0): ~0.15E~322 ~0.15E~322 +(0.3141592653589793E1, ~0.5E~323, ~0.22250738585072014E~307): ~0.2225073858507203E~307 ~0.2225073858507203E~307 +(0.3141592653589793E1, ~0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253602E~307 ~0.1112536929253602E~307 +(0.3141592653589793E1, ~0.5E~323, ~0.5E~323): ~0.2E~322 ~0.2E~322 +(0.3141592653589793E1, ~0.5E~323, ~0.0): ~0.15E~322 ~0.15E~322 +(0.2718281828459045E1, 0.17976931348623157E309, 0.17976931348623157E309): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.8988465674311579E308): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.123E4): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.123E2): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.3141592653589793E1): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.2718281828459045E1): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.123E1): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.123): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.123E~2): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.5E~323): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, 0.0): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.123E4): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.123E2): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.123E1): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.123): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.123E~2): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.5E~323): inf inf +(0.2718281828459045E1, 0.17976931348623157E309, ~0.0): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.17976931348623157E309): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.8988465674311579E308): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.123E4): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.123E2): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.3141592653589793E1): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.2718281828459045E1): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.123E1): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.123): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.123E~2): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.5E~323): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, 0.0): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.17976931348623157E309): 0.6456251559585884E308 0.6456251559585884E308 +(0.2718281828459045E1, 0.8988465674311579E308, ~0.8988465674311579E308): 0.15444717233897463E309 0.15444717233897463E309 +(0.2718281828459045E1, 0.8988465674311579E308, ~0.123E4): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.123E2): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.123E1): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.123): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.123E~2): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.5E~323): inf inf +(0.2718281828459045E1, 0.8988465674311579E308, ~0.0): inf inf +(0.2718281828459045E1, 0.123E4, 0.123E4): 0.4573486649004625E4 0.4573486649004625E4 +(0.2718281828459045E1, 0.123E4, 0.123E2): 0.33557866490046254E4 0.33557866490046254E4 +(0.2718281828459045E1, 0.123E4, 0.3141592653589793E1): 0.33466282416582153E4 0.33466282416582153E4 +(0.2718281828459045E1, 0.123E4, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330843E4 +(0.2718281828459045E1, 0.123E4, 0.123E1): 0.33447166490046257E4 0.33447166490046257E4 +(0.2718281828459045E1, 0.123E4, 0.123): 0.33436096490046257E4 0.33436096490046257E4 +(0.2718281828459045E1, 0.123E4, 0.123E~2): 0.33434878790046255E4 0.33434878790046255E4 +(0.2718281828459045E1, 0.123E4, 0.22250738585072014E~307): 0.33434866490046256E4 0.33434866490046256E4 +(0.2718281828459045E1, 0.123E4, 0.11125369292536007E~307): 0.33434866490046256E4 0.33434866490046256E4 +(0.2718281828459045E1, 0.123E4, 0.5E~323): 0.33434866490046256E4 0.33434866490046256E4 +(0.2718281828459045E1, 0.123E4, 0.0): 0.33434866490046256E4 0.33434866490046256E4 +(0.2718281828459045E1, 0.123E4, ~0.123E4): 0.21134866490046256E4 0.21134866490046256E4 +(0.2718281828459045E1, 0.123E4, ~0.123E2): 0.33311866490046255E4 0.33311866490046255E4 +(0.2718281828459045E1, 0.123E4, ~0.3141592653589793E1): 0.33403450563510355E4 0.33403450563510355E4 +(0.2718281828459045E1, 0.123E4, ~0.2718281828459045E1): 0.33407683671761665E4 0.33407683671761665E4 +(0.2718281828459045E1, 0.123E4, ~0.123E1): 0.33422566490046256E4 0.33422566490046256E4 +(0.2718281828459045E1, 0.123E4, ~0.123): 0.33433636490046256E4 0.33433636490046256E4 +(0.2718281828459045E1, 0.123E4, ~0.123E~2): 0.33434854190046253E4 0.33434854190046253E4 +(0.2718281828459045E1, 0.123E4, ~0.22250738585072014E~307): 0.33434866490046256E4 0.33434866490046256E4 +(0.2718281828459045E1, 0.123E4, ~0.11125369292536007E~307): 0.33434866490046256E4 0.33434866490046256E4 +(0.2718281828459045E1, 0.123E4, ~0.5E~323): 0.33434866490046256E4 0.33434866490046256E4 +(0.2718281828459045E1, 0.123E4, ~0.0): 0.33434866490046256E4 0.33434866490046256E4 +(0.2718281828459045E1, 0.123E2, 0.123E4): 0.12634348664900463E4 0.12634348664900463E4 +(0.2718281828459045E1, 0.123E2, 0.123E2): 0.4573486649004626E2 0.4573486649004626E2 +(0.2718281828459045E1, 0.123E2, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363605E2 +(0.2718281828459045E1, 0.123E2, 0.2718281828459045E1): 0.361531483185053E2 0.361531483185053E2 +(0.2718281828459045E1, 0.123E2, 0.123E1): 0.3466486649004626E2 0.3466486649004626E2 +(0.2718281828459045E1, 0.123E2, 0.123): 0.3355786649004626E2 0.3355786649004626E2 +(0.2718281828459045E1, 0.123E2, 0.123E~2): 0.3343609649004625E2 0.3343609649004625E2 +(0.2718281828459045E1, 0.123E2, 0.22250738585072014E~307): 0.33434866490046254E2 0.33434866490046254E2 +(0.2718281828459045E1, 0.123E2, 0.11125369292536007E~307): 0.33434866490046254E2 0.33434866490046254E2 +(0.2718281828459045E1, 0.123E2, 0.5E~323): 0.33434866490046254E2 0.33434866490046254E2 +(0.2718281828459045E1, 0.123E2, 0.0): 0.33434866490046254E2 0.33434866490046254E2 +(0.2718281828459045E1, 0.123E2, ~0.123E4): ~0.11965651335099537E4 ~0.11965651335099537E4 +(0.2718281828459045E1, 0.123E2, ~0.123E2): 0.21134866490046257E2 0.21134866490046257E2 +(0.2718281828459045E1, 0.123E2, ~0.3141592653589793E1): 0.30293273836456464E2 0.30293273836456464E2 +(0.2718281828459045E1, 0.123E2, ~0.2718281828459045E1): 0.30716584661587213E2 0.30716584661587213E2 +(0.2718281828459045E1, 0.123E2, ~0.123E1): 0.3220486649004626E2 0.3220486649004626E2 +(0.2718281828459045E1, 0.123E2, ~0.123): 0.33311866490046256E2 0.33311866490046256E2 +(0.2718281828459045E1, 0.123E2, ~0.123E~2): 0.33433636490046254E2 0.33433636490046254E2 +(0.2718281828459045E1, 0.123E2, ~0.22250738585072014E~307): 0.33434866490046254E2 0.33434866490046254E2 +(0.2718281828459045E1, 0.123E2, ~0.11125369292536007E~307): 0.33434866490046254E2 0.33434866490046254E2 +(0.2718281828459045E1, 0.123E2, ~0.5E~323): 0.33434866490046254E2 0.33434866490046254E2 +(0.2718281828459045E1, 0.123E2, ~0.0): 0.33434866490046254E2 0.33434866490046254E2 +(0.2718281828459045E1, 0.3141592653589793E1, 0.123E4): 0.12385397342226736E4 0.12385397342226736E4 +(0.2718281828459045E1, 0.3141592653589793E1, 0.123E2): 0.20839734222673567E2 0.20839734222673567E2 +(0.2718281828459045E1, 0.3141592653589793E1, 0.3141592653589793E1): 0.11681326876263359E2 0.11681326876263359E2 +(0.2718281828459045E1, 0.3141592653589793E1, 0.2718281828459045E1): 0.1125801605113261E2 0.1125801605113261E2 +(0.2718281828459045E1, 0.3141592653589793E1, 0.123E1): 0.9769734222673566E1 0.9769734222673566E1 +(0.2718281828459045E1, 0.3141592653589793E1, 0.123): 0.8662734222673567E1 0.8662734222673567E1 +(0.2718281828459045E1, 0.3141592653589793E1, 0.123E~2): 0.8540964222673566E1 0.8540964222673566E1 +(0.2718281828459045E1, 0.3141592653589793E1, 0.22250738585072014E~307): 0.8539734222673566E1 0.8539734222673566E1 +(0.2718281828459045E1, 0.3141592653589793E1, 0.11125369292536007E~307): 0.8539734222673566E1 0.8539734222673566E1 +(0.2718281828459045E1, 0.3141592653589793E1, 0.5E~323): 0.8539734222673566E1 0.8539734222673566E1 +(0.2718281828459045E1, 0.3141592653589793E1, 0.0): 0.8539734222673566E1 0.8539734222673566E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.123E4): ~0.12214602657773264E4 ~0.12214602657773264E4 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264343E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.3141592653589793E1): 0.5398141569083773E1 0.5398141569083773E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.2718281828459045E1): 0.5821452394214521E1 0.5821452394214521E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.123E1): 0.7309734222673566E1 0.7309734222673566E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.123): 0.8416734222673567E1 0.8416734222673567E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.123E~2): 0.8538504222673566E1 0.8538504222673566E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.22250738585072014E~307): 0.8539734222673566E1 0.8539734222673566E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.11125369292536007E~307): 0.8539734222673566E1 0.8539734222673566E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.5E~323): 0.8539734222673566E1 0.8539734222673566E1 +(0.2718281828459045E1, 0.3141592653589793E1, ~0.0): 0.8539734222673566E1 0.8539734222673566E1 +(0.2718281828459045E1, 0.2718281828459045E1, 0.123E4): 0.12373890560989307E4 0.12373890560989307E4 +(0.2718281828459045E1, 0.2718281828459045E1, 0.123E2): 0.1968905609893065E2 0.1968905609893065E2 +(0.2718281828459045E1, 0.2718281828459045E1, 0.3141592653589793E1): 0.10530648752520442E2 0.10530648752520442E2 +(0.2718281828459045E1, 0.2718281828459045E1, 0.2718281828459045E1): 0.10107337927389695E2 0.10107337927389695E2 +(0.2718281828459045E1, 0.2718281828459045E1, 0.123E1): 0.8619056098930649E1 0.8619056098930649E1 +(0.2718281828459045E1, 0.2718281828459045E1, 0.123): 0.751205609893065E1 0.751205609893065E1 +(0.2718281828459045E1, 0.2718281828459045E1, 0.123E~2): 0.7390286098930649E1 0.7390286098930649E1 +(0.2718281828459045E1, 0.2718281828459045E1, 0.22250738585072014E~307): 0.73890560989306495E1 0.73890560989306495E1 +(0.2718281828459045E1, 0.2718281828459045E1, 0.11125369292536007E~307): 0.73890560989306495E1 0.73890560989306495E1 +(0.2718281828459045E1, 0.2718281828459045E1, 0.5E~323): 0.73890560989306495E1 0.73890560989306495E1 +(0.2718281828459045E1, 0.2718281828459045E1, 0.0): 0.73890560989306495E1 0.73890560989306495E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.123E4): ~0.12226109439010693E4 ~0.12226109439010693E4 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.123E2): ~0.4910943901069351E1 ~0.4910943901069351E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.3141592653589793E1): 0.4247463445340856E1 0.4247463445340856E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.2718281828459045E1): 0.4670774270471604E1 0.4670774270471604E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.123E1): 0.6159056098930649E1 0.6159056098930649E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.123): 0.7266056098930649E1 0.7266056098930649E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.123E~2): 0.7387826098930649E1 0.7387826098930649E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.22250738585072014E~307): 0.73890560989306495E1 0.73890560989306495E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.11125369292536007E~307): 0.73890560989306495E1 0.73890560989306495E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.5E~323): 0.73890560989306495E1 0.73890560989306495E1 +(0.2718281828459045E1, 0.2718281828459045E1, ~0.0): 0.73890560989306495E1 0.73890560989306495E1 +(0.2718281828459045E1, 0.123E1, 0.123E4): 0.12333434866490047E4 0.12333434866490047E4 +(0.2718281828459045E1, 0.123E1, 0.123E2): 0.15643486649004625E2 0.15643486649004625E2 +(0.2718281828459045E1, 0.123E1, 0.3141592653589793E1): 0.6485079302594419E1 0.6485079302594419E1 +(0.2718281828459045E1, 0.123E1, 0.2718281828459045E1): 0.606176847746367E1 0.606176847746367E1 +(0.2718281828459045E1, 0.123E1, 0.123E1): 0.4573486649004625E1 0.4573486649004625E1 +(0.2718281828459045E1, 0.123E1, 0.123): 0.34664866490046253E1 0.34664866490046253E1 +(0.2718281828459045E1, 0.123E1, 0.123E~2): 0.33447166490046256E1 0.33447166490046256E1 +(0.2718281828459045E1, 0.123E1, 0.22250738585072014E~307): 0.33434866490046256E1 0.33434866490046256E1 +(0.2718281828459045E1, 0.123E1, 0.11125369292536007E~307): 0.33434866490046256E1 0.33434866490046256E1 +(0.2718281828459045E1, 0.123E1, 0.5E~323): 0.33434866490046256E1 0.33434866490046256E1 +(0.2718281828459045E1, 0.123E1, 0.0): 0.33434866490046256E1 0.33434866490046256E1 +(0.2718281828459045E1, 0.123E1, ~0.123E4): ~0.12266565133509953E4 ~0.12266565133509953E4 +(0.2718281828459045E1, 0.123E1, ~0.123E2): ~0.8956513350995376E1 ~0.8956513350995376E1 +(0.2718281828459045E1, 0.123E1, ~0.3141592653589793E1): 0.2018939954148323 0.2018939954148323 +(0.2718281828459045E1, 0.123E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455804 +(0.2718281828459045E1, 0.123E1, ~0.123E1): 0.21134866490046256E1 0.21134866490046256E1 +(0.2718281828459045E1, 0.123E1, ~0.123): 0.32204866490046253E1 0.32204866490046253E1 +(0.2718281828459045E1, 0.123E1, ~0.123E~2): 0.33422566490046255E1 0.33422566490046255E1 +(0.2718281828459045E1, 0.123E1, ~0.22250738585072014E~307): 0.33434866490046256E1 0.33434866490046256E1 +(0.2718281828459045E1, 0.123E1, ~0.11125369292536007E~307): 0.33434866490046256E1 0.33434866490046256E1 +(0.2718281828459045E1, 0.123E1, ~0.5E~323): 0.33434866490046256E1 0.33434866490046256E1 +(0.2718281828459045E1, 0.123E1, ~0.0): 0.33434866490046256E1 0.33434866490046256E1 +(0.2718281828459045E1, 0.123, 0.123E4): 0.12303343486649005E4 0.12303343486649005E4 +(0.2718281828459045E1, 0.123, 0.123E2): 0.12634348664900463E2 0.12634348664900463E2 +(0.2718281828459045E1, 0.123, 0.3141592653589793E1): 0.34759413184902557E1 0.34759413184902557E1 +(0.2718281828459045E1, 0.123, 0.2718281828459045E1): 0.30526304933595076E1 0.30526304933595076E1 +(0.2718281828459045E1, 0.123, 0.123E1): 0.15643486649004625E1 0.15643486649004625E1 +(0.2718281828459045E1, 0.123, 0.123): 0.45734866490046255 0.45734866490046255 +(0.2718281828459045E1, 0.123, 0.123E~2): 0.33557866490046256 0.33557866490046256 +(0.2718281828459045E1, 0.123, 0.22250738585072014E~307): 0.33434866490046256 0.33434866490046256 +(0.2718281828459045E1, 0.123, 0.11125369292536007E~307): 0.33434866490046256 0.33434866490046256 +(0.2718281828459045E1, 0.123, 0.5E~323): 0.33434866490046256 0.33434866490046256 +(0.2718281828459045E1, 0.123, 0.0): 0.33434866490046256 0.33434866490046256 +(0.2718281828459045E1, 0.123, ~0.123E4): ~0.12296656513350995E4 ~0.12296656513350995E4 +(0.2718281828459045E1, 0.123, ~0.123E2): ~0.11965651335099539E2 ~0.11965651335099539E2 +(0.2718281828459045E1, 0.123, ~0.3141592653589793E1): ~0.28072439886893306E1 ~0.28072439886893306E1 +(0.2718281828459045E1, 0.123, ~0.2718281828459045E1): ~0.23839331635585825E1 ~0.23839331635585825E1 +(0.2718281828459045E1, 0.123, ~0.123E1): ~0.8956513350995374 ~0.8956513350995374 +(0.2718281828459045E1, 0.123, ~0.123): 0.21134866490046253 0.21134866490046253 +(0.2718281828459045E1, 0.123, ~0.123E~2): 0.33311866490046255 0.33311866490046255 +(0.2718281828459045E1, 0.123, ~0.22250738585072014E~307): 0.33434866490046256 0.33434866490046256 +(0.2718281828459045E1, 0.123, ~0.11125369292536007E~307): 0.33434866490046256 0.33434866490046256 +(0.2718281828459045E1, 0.123, ~0.5E~323): 0.33434866490046256 0.33434866490046256 +(0.2718281828459045E1, 0.123, ~0.0): 0.33434866490046256 0.33434866490046256 +(0.2718281828459045E1, 0.123E~2, 0.123E4): 0.1230003343486649E4 0.1230003343486649E4 +(0.2718281828459045E1, 0.123E~2, 0.123E2): 0.12303343486649005E2 0.12303343486649005E2 +(0.2718281828459045E1, 0.123E~2, 0.3141592653589793E1): 0.3144936140238798E1 0.3144936140238798E1 +(0.2718281828459045E1, 0.123E~2, 0.2718281828459045E1): 0.272162531510805E1 0.272162531510805E1 +(0.2718281828459045E1, 0.123E~2, 0.123E1): 0.12333434866490045E1 0.12333434866490045E1 +(0.2718281828459045E1, 0.123E~2, 0.123): 0.12634348664900463 0.12634348664900463 +(0.2718281828459045E1, 0.123E~2, 0.123E~2): 0.4573486649004625E~2 0.4573486649004625E~2 +(0.2718281828459045E1, 0.123E~2, 0.22250738585072014E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.2718281828459045E1, 0.123E~2, 0.11125369292536007E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.2718281828459045E1, 0.123E~2, 0.5E~323): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.2718281828459045E1, 0.123E~2, 0.0): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.2718281828459045E1, 0.123E~2, ~0.123E4): ~0.1229996656513351E4 ~0.1229996656513351E4 +(0.2718281828459045E1, 0.123E~2, ~0.123E2): ~0.12296656513350996E2 ~0.12296656513350996E2 +(0.2718281828459045E1, 0.123E~2, ~0.3141592653589793E1): ~0.31382491669407884E1 ~0.31382491669407884E1 +(0.2718281828459045E1, 0.123E~2, ~0.2718281828459045E1): ~0.27149383418100403E1 ~0.27149383418100403E1 +(0.2718281828459045E1, 0.123E~2, ~0.123E1): ~0.12266565133509955E1 ~0.12266565133509955E1 +(0.2718281828459045E1, 0.123E~2, ~0.123): ~0.11965651335099538 ~0.11965651335099538 +(0.2718281828459045E1, 0.123E~2, ~0.123E~2): 0.21134866490046256E~2 0.21134866490046256E~2 +(0.2718281828459045E1, 0.123E~2, ~0.22250738585072014E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.2718281828459045E1, 0.123E~2, ~0.11125369292536007E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.2718281828459045E1, 0.123E~2, ~0.5E~323): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.2718281828459045E1, 0.123E~2, ~0.0): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.2718281828459045E1, 0.22250738585072014E~307, 0.5E~323): 0.6048377836559379E~307 0.6048377836559379E~307 +(0.2718281828459045E1, 0.22250738585072014E~307, ~0.5E~323): 0.6048377836559377E~307 0.6048377836559377E~307 +(0.2718281828459045E1, 0.11125369292536007E~307, 0.22250738585072014E~307): 0.524926277678689E~307 0.524926277678689E~307 +(0.2718281828459045E1, 0.5E~323, 0.22250738585072014E~307): 0.2225073858507203E~307 0.2225073858507203E~307 +(0.2718281828459045E1, 0.5E~323, 0.11125369292536007E~307): 0.1112536929253602E~307 0.1112536929253602E~307 +(0.2718281828459045E1, 0.5E~323, 0.5E~323): 0.2E~322 0.2E~322 +(0.2718281828459045E1, 0.5E~323, 0.0): 0.15E~322 0.15E~322 +(0.2718281828459045E1, 0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072E~307 ~0.22250738585072E~307 +(0.2718281828459045E1, 0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253599E~307 ~0.1112536929253599E~307 +(0.2718281828459045E1, 0.5E~323, ~0.5E~323): 0.1E~322 0.1E~322 +(0.2718281828459045E1, 0.5E~323, ~0.0): 0.15E~322 0.15E~322 +(0.2718281828459045E1, ~0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.123E4): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.123E2): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.123E1): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.123): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.123E~2): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.5E~323): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, 0.0): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.123E4): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.123E2): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.123E1): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.123): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(0.2718281828459045E1, ~0.17976931348623157E309, ~0.0): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.17976931348623157E309): ~0.6456251559585884E308 ~0.6456251559585884E308 +(0.2718281828459045E1, ~0.8988465674311579E308, 0.8988465674311579E308): ~0.15444717233897463E309 ~0.15444717233897463E309 +(0.2718281828459045E1, ~0.8988465674311579E308, 0.123E4): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.123E2): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.123E1): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.123): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.123E~2): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.5E~323): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, 0.0): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.123E4): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.123E2): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.123E1): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.123): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(0.2718281828459045E1, ~0.8988465674311579E308, ~0.0): ~inf ~inf +(0.2718281828459045E1, ~0.123E4, 0.123E4): ~0.21134866490046256E4 ~0.21134866490046256E4 +(0.2718281828459045E1, ~0.123E4, 0.123E2): ~0.33311866490046255E4 ~0.33311866490046255E4 +(0.2718281828459045E1, ~0.123E4, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.33403450563510355E4 +(0.2718281828459045E1, ~0.123E4, 0.2718281828459045E1): ~0.33407683671761665E4 ~0.33407683671761665E4 +(0.2718281828459045E1, ~0.123E4, 0.123E1): ~0.33422566490046256E4 ~0.33422566490046256E4 +(0.2718281828459045E1, ~0.123E4, 0.123): ~0.33433636490046256E4 ~0.33433636490046256E4 +(0.2718281828459045E1, ~0.123E4, 0.123E~2): ~0.33434854190046253E4 ~0.33434854190046253E4 +(0.2718281828459045E1, ~0.123E4, 0.22250738585072014E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.2718281828459045E1, ~0.123E4, 0.11125369292536007E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.2718281828459045E1, ~0.123E4, 0.5E~323): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.2718281828459045E1, ~0.123E4, 0.0): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.2718281828459045E1, ~0.123E4, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004625E4 +(0.2718281828459045E1, ~0.123E4, ~0.123E2): ~0.33557866490046254E4 ~0.33557866490046254E4 +(0.2718281828459045E1, ~0.123E4, ~0.3141592653589793E1): ~0.33466282416582153E4 ~0.33466282416582153E4 +(0.2718281828459045E1, ~0.123E4, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330843E4 +(0.2718281828459045E1, ~0.123E4, ~0.123E1): ~0.33447166490046257E4 ~0.33447166490046257E4 +(0.2718281828459045E1, ~0.123E4, ~0.123): ~0.33436096490046257E4 ~0.33436096490046257E4 +(0.2718281828459045E1, ~0.123E4, ~0.123E~2): ~0.33434878790046255E4 ~0.33434878790046255E4 +(0.2718281828459045E1, ~0.123E4, ~0.22250738585072014E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.2718281828459045E1, ~0.123E4, ~0.11125369292536007E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.2718281828459045E1, ~0.123E4, ~0.5E~323): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.2718281828459045E1, ~0.123E4, ~0.0): ~0.33434866490046256E4 ~0.33434866490046256E4 +(0.2718281828459045E1, ~0.123E2, 0.123E4): 0.11965651335099537E4 0.11965651335099537E4 +(0.2718281828459045E1, ~0.123E2, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046257E2 +(0.2718281828459045E1, ~0.123E2, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.30293273836456464E2 +(0.2718281828459045E1, ~0.123E2, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.30716584661587213E2 +(0.2718281828459045E1, ~0.123E2, 0.123E1): ~0.3220486649004626E2 ~0.3220486649004626E2 +(0.2718281828459045E1, ~0.123E2, 0.123): ~0.33311866490046256E2 ~0.33311866490046256E2 +(0.2718281828459045E1, ~0.123E2, 0.123E~2): ~0.33433636490046254E2 ~0.33433636490046254E2 +(0.2718281828459045E1, ~0.123E2, 0.22250738585072014E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.2718281828459045E1, ~0.123E2, 0.11125369292536007E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.2718281828459045E1, ~0.123E2, 0.5E~323): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.2718281828459045E1, ~0.123E2, 0.0): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.2718281828459045E1, ~0.123E2, ~0.123E4): ~0.12634348664900463E4 ~0.12634348664900463E4 +(0.2718281828459045E1, ~0.123E2, ~0.123E2): ~0.4573486649004626E2 ~0.4573486649004626E2 +(0.2718281828459045E1, ~0.123E2, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363605E2 +(0.2718281828459045E1, ~0.123E2, ~0.2718281828459045E1): ~0.361531483185053E2 ~0.361531483185053E2 +(0.2718281828459045E1, ~0.123E2, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004626E2 +(0.2718281828459045E1, ~0.123E2, ~0.123): ~0.3355786649004626E2 ~0.3355786649004626E2 +(0.2718281828459045E1, ~0.123E2, ~0.123E~2): ~0.3343609649004625E2 ~0.3343609649004625E2 +(0.2718281828459045E1, ~0.123E2, ~0.22250738585072014E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.2718281828459045E1, ~0.123E2, ~0.11125369292536007E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.2718281828459045E1, ~0.123E2, ~0.5E~323): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.2718281828459045E1, ~0.123E2, ~0.0): ~0.33434866490046254E2 ~0.33434866490046254E2 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.123E4): 0.12214602657773264E4 0.12214602657773264E4 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.123E2): 0.37602657773264343E1 0.37602657773264343E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.3141592653589793E1): ~0.5398141569083773E1 ~0.5398141569083773E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.2718281828459045E1): ~0.5821452394214521E1 ~0.5821452394214521E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.123E1): ~0.7309734222673566E1 ~0.7309734222673566E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.123): ~0.8416734222673567E1 ~0.8416734222673567E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.123E~2): ~0.8538504222673566E1 ~0.8538504222673566E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.22250738585072014E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.11125369292536007E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.5E~323): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.2718281828459045E1, ~0.3141592653589793E1, 0.0): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E4): ~0.12385397342226736E4 ~0.12385397342226736E4 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E2): ~0.20839734222673567E2 ~0.20839734222673567E2 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.11681326876263359E2 ~0.11681326876263359E2 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.1125801605113261E2 ~0.1125801605113261E2 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E1): ~0.9769734222673566E1 ~0.9769734222673566E1 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673567E1 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E~2): ~0.8540964222673566E1 ~0.8540964222673566E1 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.22250738585072014E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.11125369292536007E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.5E~323): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.2718281828459045E1, ~0.3141592653589793E1, ~0.0): ~0.8539734222673566E1 ~0.8539734222673566E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.123E4): 0.12226109439010693E4 0.12226109439010693E4 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.123E2): 0.4910943901069351E1 0.4910943901069351E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.4247463445340856E1 ~0.4247463445340856E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.2718281828459045E1): ~0.4670774270471604E1 ~0.4670774270471604E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.123E1): ~0.6159056098930649E1 ~0.6159056098930649E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.123): ~0.7266056098930649E1 ~0.7266056098930649E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.123E~2): ~0.7387826098930649E1 ~0.7387826098930649E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.22250738585072014E~307): ~0.73890560989306495E1 ~0.73890560989306495E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.11125369292536007E~307): ~0.73890560989306495E1 ~0.73890560989306495E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.5E~323): ~0.73890560989306495E1 ~0.73890560989306495E1 +(0.2718281828459045E1, ~0.2718281828459045E1, 0.0): ~0.73890560989306495E1 ~0.73890560989306495E1 +(0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E4): ~0.12373890560989307E4 ~0.12373890560989307E4 +(0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E2): ~0.1968905609893065E2 ~0.1968905609893065E2 +(0.2718281828459045E1, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.10530648752520442E2 ~0.10530648752520442E2 +(0.2718281828459045E1, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.10107337927389695E2 ~0.10107337927389695E2 +(0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E1): ~0.8619056098930649E1 ~0.8619056098930649E1 +(0.2718281828459045E1, ~0.2718281828459045E1, ~0.123): ~0.751205609893065E1 ~0.751205609893065E1 +(0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E~2): ~0.7390286098930649E1 ~0.7390286098930649E1 +(0.2718281828459045E1, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~0.73890560989306495E1 ~0.73890560989306495E1 +(0.2718281828459045E1, ~0.2718281828459045E1, ~0.11125369292536007E~307): ~0.73890560989306495E1 ~0.73890560989306495E1 +(0.2718281828459045E1, ~0.2718281828459045E1, ~0.5E~323): ~0.73890560989306495E1 ~0.73890560989306495E1 +(0.2718281828459045E1, ~0.2718281828459045E1, ~0.0): ~0.73890560989306495E1 ~0.73890560989306495E1 +(0.2718281828459045E1, ~0.123E1, 0.123E4): 0.12266565133509953E4 0.12266565133509953E4 +(0.2718281828459045E1, ~0.123E1, 0.123E2): 0.8956513350995376E1 0.8956513350995376E1 +(0.2718281828459045E1, ~0.123E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.2018939954148323 +(0.2718281828459045E1, ~0.123E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455804 +(0.2718281828459045E1, ~0.123E1, 0.123E1): ~0.21134866490046256E1 ~0.21134866490046256E1 +(0.2718281828459045E1, ~0.123E1, 0.123): ~0.32204866490046253E1 ~0.32204866490046253E1 +(0.2718281828459045E1, ~0.123E1, 0.123E~2): ~0.33422566490046255E1 ~0.33422566490046255E1 +(0.2718281828459045E1, ~0.123E1, 0.22250738585072014E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.2718281828459045E1, ~0.123E1, 0.11125369292536007E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.2718281828459045E1, ~0.123E1, 0.5E~323): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.2718281828459045E1, ~0.123E1, 0.0): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.2718281828459045E1, ~0.123E1, ~0.123E4): ~0.12333434866490047E4 ~0.12333434866490047E4 +(0.2718281828459045E1, ~0.123E1, ~0.123E2): ~0.15643486649004625E2 ~0.15643486649004625E2 +(0.2718281828459045E1, ~0.123E1, ~0.3141592653589793E1): ~0.6485079302594419E1 ~0.6485079302594419E1 +(0.2718281828459045E1, ~0.123E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.606176847746367E1 +(0.2718281828459045E1, ~0.123E1, ~0.123E1): ~0.4573486649004625E1 ~0.4573486649004625E1 +(0.2718281828459045E1, ~0.123E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046253E1 +(0.2718281828459045E1, ~0.123E1, ~0.123E~2): ~0.33447166490046256E1 ~0.33447166490046256E1 +(0.2718281828459045E1, ~0.123E1, ~0.22250738585072014E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.2718281828459045E1, ~0.123E1, ~0.11125369292536007E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.2718281828459045E1, ~0.123E1, ~0.5E~323): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.2718281828459045E1, ~0.123E1, ~0.0): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.2718281828459045E1, ~0.123, 0.123E4): 0.12296656513350995E4 0.12296656513350995E4 +(0.2718281828459045E1, ~0.123, 0.123E2): 0.11965651335099539E2 0.11965651335099539E2 +(0.2718281828459045E1, ~0.123, 0.3141592653589793E1): 0.28072439886893306E1 0.28072439886893306E1 +(0.2718281828459045E1, ~0.123, 0.2718281828459045E1): 0.23839331635585825E1 0.23839331635585825E1 +(0.2718281828459045E1, ~0.123, 0.123E1): 0.8956513350995374 0.8956513350995374 +(0.2718281828459045E1, ~0.123, 0.123): ~0.21134866490046253 ~0.21134866490046253 +(0.2718281828459045E1, ~0.123, 0.123E~2): ~0.33311866490046255 ~0.33311866490046255 +(0.2718281828459045E1, ~0.123, 0.22250738585072014E~307): ~0.33434866490046256 ~0.33434866490046256 +(0.2718281828459045E1, ~0.123, 0.11125369292536007E~307): ~0.33434866490046256 ~0.33434866490046256 +(0.2718281828459045E1, ~0.123, 0.5E~323): ~0.33434866490046256 ~0.33434866490046256 +(0.2718281828459045E1, ~0.123, 0.0): ~0.33434866490046256 ~0.33434866490046256 +(0.2718281828459045E1, ~0.123, ~0.123E4): ~0.12303343486649005E4 ~0.12303343486649005E4 +(0.2718281828459045E1, ~0.123, ~0.123E2): ~0.12634348664900463E2 ~0.12634348664900463E2 +(0.2718281828459045E1, ~0.123, ~0.3141592653589793E1): ~0.34759413184902557E1 ~0.34759413184902557E1 +(0.2718281828459045E1, ~0.123, ~0.2718281828459045E1): ~0.30526304933595076E1 ~0.30526304933595076E1 +(0.2718281828459045E1, ~0.123, ~0.123E1): ~0.15643486649004625E1 ~0.15643486649004625E1 +(0.2718281828459045E1, ~0.123, ~0.123): ~0.45734866490046255 ~0.45734866490046255 +(0.2718281828459045E1, ~0.123, ~0.123E~2): ~0.33557866490046256 ~0.33557866490046256 +(0.2718281828459045E1, ~0.123, ~0.22250738585072014E~307): ~0.33434866490046256 ~0.33434866490046256 +(0.2718281828459045E1, ~0.123, ~0.11125369292536007E~307): ~0.33434866490046256 ~0.33434866490046256 +(0.2718281828459045E1, ~0.123, ~0.5E~323): ~0.33434866490046256 ~0.33434866490046256 +(0.2718281828459045E1, ~0.123, ~0.0): ~0.33434866490046256 ~0.33434866490046256 +(0.2718281828459045E1, ~0.123E~2, 0.123E4): 0.1229996656513351E4 0.1229996656513351E4 +(0.2718281828459045E1, ~0.123E~2, 0.123E2): 0.12296656513350996E2 0.12296656513350996E2 +(0.2718281828459045E1, ~0.123E~2, 0.3141592653589793E1): 0.31382491669407884E1 0.31382491669407884E1 +(0.2718281828459045E1, ~0.123E~2, 0.2718281828459045E1): 0.27149383418100403E1 0.27149383418100403E1 +(0.2718281828459045E1, ~0.123E~2, 0.123E1): 0.12266565133509955E1 0.12266565133509955E1 +(0.2718281828459045E1, ~0.123E~2, 0.123): 0.11965651335099538 0.11965651335099538 +(0.2718281828459045E1, ~0.123E~2, 0.123E~2): ~0.21134866490046256E~2 ~0.21134866490046256E~2 +(0.2718281828459045E1, ~0.123E~2, 0.22250738585072014E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.2718281828459045E1, ~0.123E~2, 0.11125369292536007E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.2718281828459045E1, ~0.123E~2, 0.5E~323): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.2718281828459045E1, ~0.123E~2, 0.0): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.2718281828459045E1, ~0.123E~2, ~0.123E4): ~0.1230003343486649E4 ~0.1230003343486649E4 +(0.2718281828459045E1, ~0.123E~2, ~0.123E2): ~0.12303343486649005E2 ~0.12303343486649005E2 +(0.2718281828459045E1, ~0.123E~2, ~0.3141592653589793E1): ~0.3144936140238798E1 ~0.3144936140238798E1 +(0.2718281828459045E1, ~0.123E~2, ~0.2718281828459045E1): ~0.272162531510805E1 ~0.272162531510805E1 +(0.2718281828459045E1, ~0.123E~2, ~0.123E1): ~0.12333434866490045E1 ~0.12333434866490045E1 +(0.2718281828459045E1, ~0.123E~2, ~0.123): ~0.12634348664900463 ~0.12634348664900463 +(0.2718281828459045E1, ~0.123E~2, ~0.123E~2): ~0.4573486649004625E~2 ~0.4573486649004625E~2 +(0.2718281828459045E1, ~0.123E~2, ~0.22250738585072014E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.2718281828459045E1, ~0.123E~2, ~0.11125369292536007E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.2718281828459045E1, ~0.123E~2, ~0.5E~323): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.2718281828459045E1, ~0.123E~2, ~0.0): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.2718281828459045E1, ~0.22250738585072014E~307, 0.5E~323): ~0.6048377836559377E~307 ~0.6048377836559377E~307 +(0.2718281828459045E1, ~0.22250738585072014E~307, ~0.5E~323): ~0.6048377836559379E~307 ~0.6048377836559379E~307 +(0.2718281828459045E1, ~0.11125369292536007E~307, ~0.22250738585072014E~307): ~0.524926277678689E~307 ~0.524926277678689E~307 +(0.2718281828459045E1, ~0.5E~323, 0.22250738585072014E~307): 0.22250738585072E~307 0.22250738585072E~307 +(0.2718281828459045E1, ~0.5E~323, 0.11125369292536007E~307): 0.1112536929253599E~307 0.1112536929253599E~307 +(0.2718281828459045E1, ~0.5E~323, 0.5E~323): ~0.1E~322 ~0.1E~322 +(0.2718281828459045E1, ~0.5E~323, 0.0): ~0.15E~322 ~0.15E~322 +(0.2718281828459045E1, ~0.5E~323, ~0.22250738585072014E~307): ~0.2225073858507203E~307 ~0.2225073858507203E~307 +(0.2718281828459045E1, ~0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253602E~307 ~0.1112536929253602E~307 +(0.2718281828459045E1, ~0.5E~323, ~0.5E~323): ~0.2E~322 ~0.2E~322 +(0.2718281828459045E1, ~0.5E~323, ~0.0): ~0.15E~322 ~0.15E~322 +(0.123E1, 0.17976931348623157E309, 0.17976931348623157E309): inf inf +(0.123E1, 0.17976931348623157E309, 0.8988465674311579E308): inf inf +(0.123E1, 0.17976931348623157E309, 0.123E4): inf inf +(0.123E1, 0.17976931348623157E309, 0.123E2): inf inf +(0.123E1, 0.17976931348623157E309, 0.3141592653589793E1): inf inf +(0.123E1, 0.17976931348623157E309, 0.2718281828459045E1): inf inf +(0.123E1, 0.17976931348623157E309, 0.123E1): inf inf +(0.123E1, 0.17976931348623157E309, 0.123): inf inf +(0.123E1, 0.17976931348623157E309, 0.123E~2): inf inf +(0.123E1, 0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(0.123E1, 0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(0.123E1, 0.17976931348623157E309, 0.5E~323): inf inf +(0.123E1, 0.17976931348623157E309, 0.0): inf inf +(0.123E1, 0.17976931348623157E309, ~0.17976931348623157E309): 0.4134694210183326E308 0.4134694210183326E308 +(0.123E1, 0.17976931348623157E309, ~0.8988465674311579E308): 0.13123159884494904E309 0.13123159884494904E309 +(0.123E1, 0.17976931348623157E309, ~0.123E4): inf inf +(0.123E1, 0.17976931348623157E309, ~0.123E2): inf inf +(0.123E1, 0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(0.123E1, 0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(0.123E1, 0.17976931348623157E309, ~0.123E1): inf inf +(0.123E1, 0.17976931348623157E309, ~0.123): inf inf +(0.123E1, 0.17976931348623157E309, ~0.123E~2): inf inf +(0.123E1, 0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(0.123E1, 0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(0.123E1, 0.17976931348623157E309, ~0.5E~323): inf inf +(0.123E1, 0.17976931348623157E309, ~0.0): inf inf +(0.123E1, 0.8988465674311579E308, 0.17976931348623157E309): inf inf +(0.123E1, 0.8988465674311579E308, 0.8988465674311579E308): inf inf +(0.123E1, 0.8988465674311579E308, 0.123E4): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, 0.123E2): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, 0.3141592653589793E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, 0.2718281828459045E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, 0.123E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, 0.123): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, 0.123E~2): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, 0.22250738585072014E~307): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, 0.11125369292536007E~307): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, 0.5E~323): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, 0.0): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219915E308 +(0.123E1, 0.8988465674311579E308, ~0.8988465674311579E308): 0.2067347105091663E308 0.2067347105091663E308 +(0.123E1, 0.8988465674311579E308, ~0.123E4): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, ~0.123E2): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, ~0.3141592653589793E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, ~0.2718281828459045E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, ~0.123E1): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, ~0.123): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, ~0.123E~2): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, ~0.22250738585072014E~307): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, ~0.11125369292536007E~307): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, ~0.5E~323): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.8988465674311579E308, ~0.0): 0.1105581277940324E309 0.1105581277940324E309 +(0.123E1, 0.123E4, 0.123E4): 0.27429E4 0.27429E4 +(0.123E1, 0.123E4, 0.123E2): 0.15252E4 0.15252E4 +(0.123E1, 0.123E4, 0.3141592653589793E1): 0.15160415926535898E4 0.15160415926535898E4 +(0.123E1, 0.123E4, 0.2718281828459045E1): 0.1515618281828459E4 0.1515618281828459E4 +(0.123E1, 0.123E4, 0.123E1): 0.15141299999999999E4 0.15141299999999999E4 +(0.123E1, 0.123E4, 0.123): 0.1513023E4 0.1513023E4 +(0.123E1, 0.123E4, 0.123E~2): 0.151290123E4 0.151290123E4 +(0.123E1, 0.123E4, 0.22250738585072014E~307): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, 0.11125369292536007E~307): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, 0.5E~323): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, 0.0): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, ~0.123E4): 0.2829E3 0.2829E3 +(0.123E1, 0.123E4, ~0.123E2): 0.15006E4 0.15006E4 +(0.123E1, 0.123E4, ~0.3141592653589793E1): 0.15097584073464102E4 0.15097584073464102E4 +(0.123E1, 0.123E4, ~0.2718281828459045E1): 0.1510181718171541E4 0.1510181718171541E4 +(0.123E1, 0.123E4, ~0.123E1): 0.151167E4 0.151167E4 +(0.123E1, 0.123E4, ~0.123): 0.1512777E4 0.1512777E4 +(0.123E1, 0.123E4, ~0.123E~2): 0.151289877E4 0.151289877E4 +(0.123E1, 0.123E4, ~0.22250738585072014E~307): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, ~0.11125369292536007E~307): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, ~0.5E~323): 0.15129E4 0.15129E4 +(0.123E1, 0.123E4, ~0.0): 0.15129E4 0.15129E4 +(0.123E1, 0.123E2, 0.123E4): 0.1245129E4 0.1245129E4 +(0.123E1, 0.123E2, 0.123E2): 0.27429000000000002E2 0.27429000000000002E2 +(0.123E1, 0.123E2, 0.3141592653589793E1): 0.18270592653589794E2 0.18270592653589794E2 +(0.123E1, 0.123E2, 0.2718281828459045E1): 0.17847281828459046E2 0.17847281828459046E2 +(0.123E1, 0.123E2, 0.123E1): 0.16359E2 0.16359E2 +(0.123E1, 0.123E2, 0.123): 0.15252E2 0.15252E2 +(0.123E1, 0.123E2, 0.123E~2): 0.15130230000000001E2 0.15130230000000001E2 +(0.123E1, 0.123E2, 0.22250738585072014E~307): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E1, 0.123E2, 0.11125369292536007E~307): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E1, 0.123E2, 0.5E~323): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E1, 0.123E2, 0.0): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E1, 0.123E2, ~0.123E4): ~0.1214871E4 ~0.1214871E4 +(0.123E1, 0.123E2, ~0.123E2): 0.28289999999999997E1 0.28289999999999997E1 +(0.123E1, 0.123E2, ~0.3141592653589793E1): 0.11987407346410208E2 0.11987407346410208E2 +(0.123E1, 0.123E2, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540955E2 +(0.123E1, 0.123E2, ~0.123E1): 0.13899000000000001E2 0.13899000000000001E2 +(0.123E1, 0.123E2, ~0.123): 0.15006E2 0.15006E2 +(0.123E1, 0.123E2, ~0.123E~2): 0.1512777E2 0.1512777E2 +(0.123E1, 0.123E2, ~0.22250738585072014E~307): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E1, 0.123E2, ~0.11125369292536007E~307): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E1, 0.123E2, ~0.5E~323): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E1, 0.123E2, ~0.0): 0.15129000000000001E2 0.15129000000000001E2 +(0.123E1, 0.3141592653589793E1, 0.123E4): 0.12338641589639155E4 0.12338641589639155E4 +(0.123E1, 0.3141592653589793E1, 0.123E2): 0.16164158963915447E2 0.16164158963915447E2 +(0.123E1, 0.3141592653589793E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505239E1 +(0.123E1, 0.3141592653589793E1, 0.2718281828459045E1): 0.65824407923744905E1 0.65824407923744905E1 +(0.123E1, 0.3141592653589793E1, 0.123E1): 0.5094158963915445E1 0.5094158963915445E1 +(0.123E1, 0.3141592653589793E1, 0.123): 0.39871589639154457E1 0.39871589639154457E1 +(0.123E1, 0.3141592653589793E1, 0.123E~2): 0.38653889639154455E1 0.38653889639154455E1 +(0.123E1, 0.3141592653589793E1, 0.22250738585072014E~307): 0.38641589639154454E1 0.38641589639154454E1 +(0.123E1, 0.3141592653589793E1, 0.11125369292536007E~307): 0.38641589639154454E1 0.38641589639154454E1 +(0.123E1, 0.3141592653589793E1, 0.5E~323): 0.38641589639154454E1 0.38641589639154454E1 +(0.123E1, 0.3141592653589793E1, 0.0): 0.38641589639154454E1 0.38641589639154454E1 +(0.123E1, 0.3141592653589793E1, ~0.123E4): ~0.12261358410360845E4 ~0.12261358410360845E4 +(0.123E1, 0.3141592653589793E1, ~0.123E2): ~0.8435841036084556E1 ~0.8435841036084556E1 +(0.123E1, 0.3141592653589793E1, ~0.3141592653589793E1): 0.7225663103256523 0.7225663103256523 +(0.123E1, 0.3141592653589793E1, ~0.2718281828459045E1): 0.11458771354564004E1 0.11458771354564004E1 +(0.123E1, 0.3141592653589793E1, ~0.123E1): 0.26341589639154455E1 0.26341589639154455E1 +(0.123E1, 0.3141592653589793E1, ~0.123): 0.37411589639154457E1 0.37411589639154457E1 +(0.123E1, 0.3141592653589793E1, ~0.123E~2): 0.38629289639154454E1 0.38629289639154454E1 +(0.123E1, 0.3141592653589793E1, ~0.22250738585072014E~307): 0.38641589639154454E1 0.38641589639154454E1 +(0.123E1, 0.3141592653589793E1, ~0.11125369292536007E~307): 0.38641589639154454E1 0.38641589639154454E1 +(0.123E1, 0.3141592653589793E1, ~0.5E~323): 0.38641589639154454E1 0.38641589639154454E1 +(0.123E1, 0.3141592653589793E1, ~0.0): 0.38641589639154454E1 0.38641589639154454E1 +(0.123E1, 0.2718281828459045E1, 0.123E4): 0.12333434866490047E4 0.12333434866490047E4 +(0.123E1, 0.2718281828459045E1, 0.123E2): 0.15643486649004625E2 0.15643486649004625E2 +(0.123E1, 0.2718281828459045E1, 0.3141592653589793E1): 0.6485079302594419E1 0.6485079302594419E1 +(0.123E1, 0.2718281828459045E1, 0.2718281828459045E1): 0.606176847746367E1 0.606176847746367E1 +(0.123E1, 0.2718281828459045E1, 0.123E1): 0.4573486649004625E1 0.4573486649004625E1 +(0.123E1, 0.2718281828459045E1, 0.123): 0.34664866490046253E1 0.34664866490046253E1 +(0.123E1, 0.2718281828459045E1, 0.123E~2): 0.33447166490046256E1 0.33447166490046256E1 +(0.123E1, 0.2718281828459045E1, 0.22250738585072014E~307): 0.33434866490046256E1 0.33434866490046256E1 +(0.123E1, 0.2718281828459045E1, 0.11125369292536007E~307): 0.33434866490046256E1 0.33434866490046256E1 +(0.123E1, 0.2718281828459045E1, 0.5E~323): 0.33434866490046256E1 0.33434866490046256E1 +(0.123E1, 0.2718281828459045E1, 0.0): 0.33434866490046256E1 0.33434866490046256E1 +(0.123E1, 0.2718281828459045E1, ~0.123E4): ~0.12266565133509953E4 ~0.12266565133509953E4 +(0.123E1, 0.2718281828459045E1, ~0.123E2): ~0.8956513350995376E1 ~0.8956513350995376E1 +(0.123E1, 0.2718281828459045E1, ~0.3141592653589793E1): 0.2018939954148323 0.2018939954148323 +(0.123E1, 0.2718281828459045E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455804 +(0.123E1, 0.2718281828459045E1, ~0.123E1): 0.21134866490046256E1 0.21134866490046256E1 +(0.123E1, 0.2718281828459045E1, ~0.123): 0.32204866490046253E1 0.32204866490046253E1 +(0.123E1, 0.2718281828459045E1, ~0.123E~2): 0.33422566490046255E1 0.33422566490046255E1 +(0.123E1, 0.2718281828459045E1, ~0.22250738585072014E~307): 0.33434866490046256E1 0.33434866490046256E1 +(0.123E1, 0.2718281828459045E1, ~0.11125369292536007E~307): 0.33434866490046256E1 0.33434866490046256E1 +(0.123E1, 0.2718281828459045E1, ~0.5E~323): 0.33434866490046256E1 0.33434866490046256E1 +(0.123E1, 0.2718281828459045E1, ~0.0): 0.33434866490046256E1 0.33434866490046256E1 +(0.123E1, 0.123E1, 0.123E4): 0.12315129E4 0.12315129E4 +(0.123E1, 0.123E1, 0.123E2): 0.138129E2 0.138129E2 +(0.123E1, 0.123E1, 0.3141592653589793E1): 0.4654492653589793E1 0.4654492653589793E1 +(0.123E1, 0.123E1, 0.2718281828459045E1): 0.4231181828459045E1 0.4231181828459045E1 +(0.123E1, 0.123E1, 0.123E1): 0.27429E1 0.27429E1 +(0.123E1, 0.123E1, 0.123): 0.16359E1 0.16359E1 +(0.123E1, 0.123E1, 0.123E~2): 0.151413E1 0.151413E1 +(0.123E1, 0.123E1, 0.22250738585072014E~307): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, 0.11125369292536007E~307): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, 0.5E~323): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, 0.0): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, ~0.123E4): ~0.12284871E4 ~0.12284871E4 +(0.123E1, 0.123E1, ~0.123E2): ~0.107871E2 ~0.107871E2 +(0.123E1, 0.123E1, ~0.3141592653589793E1): ~0.16286926535897932E1 ~0.16286926535897932E1 +(0.123E1, 0.123E1, ~0.2718281828459045E1): ~0.12053818284590452E1 ~0.12053818284590452E1 +(0.123E1, 0.123E1, ~0.123E1): 0.2829 0.2829 +(0.123E1, 0.123E1, ~0.123): 0.13899E1 0.13899E1 +(0.123E1, 0.123E1, ~0.123E~2): 0.15116699999999998E1 0.15116699999999998E1 +(0.123E1, 0.123E1, ~0.22250738585072014E~307): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, ~0.11125369292536007E~307): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, ~0.5E~323): 0.15129E1 0.15129E1 +(0.123E1, 0.123E1, ~0.0): 0.15129E1 0.15129E1 +(0.123E1, 0.123, 0.123E4): 0.123015129E4 0.123015129E4 +(0.123E1, 0.123, 0.123E2): 0.1245129E2 0.1245129E2 +(0.123E1, 0.123, 0.3141592653589793E1): 0.3292882653589793E1 0.3292882653589793E1 +(0.123E1, 0.123, 0.2718281828459045E1): 0.2869571828459045E1 0.2869571828459045E1 +(0.123E1, 0.123, 0.123E1): 0.138129E1 0.138129E1 +(0.123E1, 0.123, 0.123): 0.27429 0.27429 +(0.123E1, 0.123, 0.123E~2): 0.15252 0.15252 +(0.123E1, 0.123, 0.22250738585072014E~307): 0.15129 0.15129 +(0.123E1, 0.123, 0.11125369292536007E~307): 0.15129 0.15129 +(0.123E1, 0.123, 0.5E~323): 0.15129 0.15129 +(0.123E1, 0.123, 0.0): 0.15129 0.15129 +(0.123E1, 0.123, ~0.123E4): ~0.122984871E4 ~0.122984871E4 +(0.123E1, 0.123, ~0.123E2): ~0.12148710000000001E2 ~0.12148710000000001E2 +(0.123E1, 0.123, ~0.3141592653589793E1): ~0.2990302653589793E1 ~0.2990302653589793E1 +(0.123E1, 0.123, ~0.2718281828459045E1): ~0.2566991828459045E1 ~0.2566991828459045E1 +(0.123E1, 0.123, ~0.123E1): ~0.107871E1 ~0.107871E1 +(0.123E1, 0.123, ~0.123): 0.28289999999999996E~1 0.28289999999999996E~1 +(0.123E1, 0.123, ~0.123E~2): 0.15006 0.15006 +(0.123E1, 0.123, ~0.22250738585072014E~307): 0.15129 0.15129 +(0.123E1, 0.123, ~0.11125369292536007E~307): 0.15129 0.15129 +(0.123E1, 0.123, ~0.5E~323): 0.15129 0.15129 +(0.123E1, 0.123, ~0.0): 0.15129 0.15129 +(0.123E1, 0.123E~2, 0.123E4): 0.12300015129E4 0.12300015129E4 +(0.123E1, 0.123E~2, 0.123E2): 0.123015129E2 0.123015129E2 +(0.123E1, 0.123E~2, 0.3141592653589793E1): 0.3143105553589793E1 0.3143105553589793E1 +(0.123E1, 0.123E~2, 0.2718281828459045E1): 0.2719794728459045E1 0.2719794728459045E1 +(0.123E1, 0.123E~2, 0.123E1): 0.12315129E1 0.12315129E1 +(0.123E1, 0.123E~2, 0.123): 0.1245129 0.1245129 +(0.123E1, 0.123E~2, 0.123E~2): 0.27429E~2 0.27429E~2 +(0.123E1, 0.123E~2, 0.22250738585072014E~307): 0.15129E~2 0.15129E~2 +(0.123E1, 0.123E~2, 0.11125369292536007E~307): 0.15129E~2 0.15129E~2 +(0.123E1, 0.123E~2, 0.5E~323): 0.15129E~2 0.15129E~2 +(0.123E1, 0.123E~2, 0.0): 0.15129E~2 0.15129E~2 +(0.123E1, 0.123E~2, ~0.123E4): ~0.12299984871E4 ~0.12299984871E4 +(0.123E1, 0.123E~2, ~0.123E2): ~0.12298487100000001E2 ~0.12298487100000001E2 +(0.123E1, 0.123E~2, ~0.3141592653589793E1): ~0.31400797535897933E1 ~0.31400797535897933E1 +(0.123E1, 0.123E~2, ~0.2718281828459045E1): ~0.27167689284590453E1 ~0.27167689284590453E1 +(0.123E1, 0.123E~2, ~0.123E1): ~0.12284871E1 ~0.12284871E1 +(0.123E1, 0.123E~2, ~0.123): ~0.1214871 ~0.1214871 +(0.123E1, 0.123E~2, ~0.123E~2): 0.2829E~3 0.2829E~3 +(0.123E1, 0.123E~2, ~0.22250738585072014E~307): 0.15129E~2 0.15129E~2 +(0.123E1, 0.123E~2, ~0.11125369292536007E~307): 0.15129E~2 0.15129E~2 +(0.123E1, 0.123E~2, ~0.5E~323): 0.15129E~2 0.15129E~2 +(0.123E1, 0.123E~2, ~0.0): 0.15129E~2 0.15129E~2 +(0.123E1, 0.5E~323, 0.22250738585072014E~307): 0.2225073858507202E~307 0.2225073858507202E~307 +(0.123E1, 0.5E~323, 0.11125369292536007E~307): 0.1112536929253601E~307 0.1112536929253601E~307 +(0.123E1, 0.5E~323, 0.5E~323): 0.1E~322 0.1E~322 +(0.123E1, 0.5E~323, 0.0): 0.5E~323 0.5E~323 +(0.123E1, 0.5E~323, ~0.22250738585072014E~307): ~0.2225073858507201E~307 ~0.2225073858507201E~307 +(0.123E1, 0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536E~307 ~0.11125369292536E~307 +(0.123E1, 0.5E~323, ~0.5E~323): 0.0 0.0 +(0.123E1, 0.5E~323, ~0.0): 0.5E~323 0.5E~323 +(0.123E1, ~0.17976931348623157E309, 0.17976931348623157E309): ~0.4134694210183326E308 ~0.4134694210183326E308 +(0.123E1, ~0.17976931348623157E309, 0.8988465674311579E308): ~0.13123159884494904E309 ~0.13123159884494904E309 +(0.123E1, ~0.17976931348623157E309, 0.123E4): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, 0.123E2): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, 0.123E1): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, 0.123): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, 0.123E~2): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, 0.5E~323): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, 0.0): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.123E4): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.123E2): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.123E1): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.123): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(0.123E1, ~0.17976931348623157E309, ~0.0): ~inf ~inf +(0.123E1, ~0.8988465674311579E308, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219915E308 +(0.123E1, ~0.8988465674311579E308, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.2067347105091663E308 +(0.123E1, ~0.8988465674311579E308, 0.123E4): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, 0.123E2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, 0.3141592653589793E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, 0.2718281828459045E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, 0.123E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, 0.123): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, 0.123E~2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, 0.22250738585072014E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, 0.11125369292536007E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, 0.5E~323): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, 0.0): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(0.123E1, ~0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(0.123E1, ~0.8988465674311579E308, ~0.123E4): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, ~0.123E2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, ~0.3141592653589793E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, ~0.2718281828459045E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, ~0.123E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, ~0.123): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, ~0.123E~2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, ~0.22250738585072014E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, ~0.11125369292536007E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, ~0.5E~323): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.8988465674311579E308, ~0.0): ~0.1105581277940324E309 ~0.1105581277940324E309 +(0.123E1, ~0.123E4, 0.123E4): ~0.2829E3 ~0.2829E3 +(0.123E1, ~0.123E4, 0.123E2): ~0.15006E4 ~0.15006E4 +(0.123E1, ~0.123E4, 0.3141592653589793E1): ~0.15097584073464102E4 ~0.15097584073464102E4 +(0.123E1, ~0.123E4, 0.2718281828459045E1): ~0.1510181718171541E4 ~0.1510181718171541E4 +(0.123E1, ~0.123E4, 0.123E1): ~0.151167E4 ~0.151167E4 +(0.123E1, ~0.123E4, 0.123): ~0.1512777E4 ~0.1512777E4 +(0.123E1, ~0.123E4, 0.123E~2): ~0.151289877E4 ~0.151289877E4 +(0.123E1, ~0.123E4, 0.22250738585072014E~307): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, 0.11125369292536007E~307): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, 0.5E~323): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, 0.0): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, ~0.123E4): ~0.27429E4 ~0.27429E4 +(0.123E1, ~0.123E4, ~0.123E2): ~0.15252E4 ~0.15252E4 +(0.123E1, ~0.123E4, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.15160415926535898E4 +(0.123E1, ~0.123E4, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.1515618281828459E4 +(0.123E1, ~0.123E4, ~0.123E1): ~0.15141299999999999E4 ~0.15141299999999999E4 +(0.123E1, ~0.123E4, ~0.123): ~0.1513023E4 ~0.1513023E4 +(0.123E1, ~0.123E4, ~0.123E~2): ~0.151290123E4 ~0.151290123E4 +(0.123E1, ~0.123E4, ~0.22250738585072014E~307): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, ~0.11125369292536007E~307): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, ~0.5E~323): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E4, ~0.0): ~0.15129E4 ~0.15129E4 +(0.123E1, ~0.123E2, 0.123E4): 0.1214871E4 0.1214871E4 +(0.123E1, ~0.123E2, 0.123E2): ~0.28289999999999997E1 ~0.28289999999999997E1 +(0.123E1, ~0.123E2, 0.3141592653589793E1): ~0.11987407346410208E2 ~0.11987407346410208E2 +(0.123E1, ~0.123E2, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540955E2 +(0.123E1, ~0.123E2, 0.123E1): ~0.13899000000000001E2 ~0.13899000000000001E2 +(0.123E1, ~0.123E2, 0.123): ~0.15006E2 ~0.15006E2 +(0.123E1, ~0.123E2, 0.123E~2): ~0.1512777E2 ~0.1512777E2 +(0.123E1, ~0.123E2, 0.22250738585072014E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E1, ~0.123E2, 0.11125369292536007E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E1, ~0.123E2, 0.5E~323): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E1, ~0.123E2, 0.0): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E1, ~0.123E2, ~0.123E4): ~0.1245129E4 ~0.1245129E4 +(0.123E1, ~0.123E2, ~0.123E2): ~0.27429000000000002E2 ~0.27429000000000002E2 +(0.123E1, ~0.123E2, ~0.3141592653589793E1): ~0.18270592653589794E2 ~0.18270592653589794E2 +(0.123E1, ~0.123E2, ~0.2718281828459045E1): ~0.17847281828459046E2 ~0.17847281828459046E2 +(0.123E1, ~0.123E2, ~0.123E1): ~0.16359E2 ~0.16359E2 +(0.123E1, ~0.123E2, ~0.123): ~0.15252E2 ~0.15252E2 +(0.123E1, ~0.123E2, ~0.123E~2): ~0.15130230000000001E2 ~0.15130230000000001E2 +(0.123E1, ~0.123E2, ~0.22250738585072014E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E1, ~0.123E2, ~0.11125369292536007E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E1, ~0.123E2, ~0.5E~323): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E1, ~0.123E2, ~0.0): ~0.15129000000000001E2 ~0.15129000000000001E2 +(0.123E1, ~0.3141592653589793E1, 0.123E4): 0.12261358410360845E4 0.12261358410360845E4 +(0.123E1, ~0.3141592653589793E1, 0.123E2): 0.8435841036084556E1 0.8435841036084556E1 +(0.123E1, ~0.3141592653589793E1, 0.3141592653589793E1): ~0.7225663103256523 ~0.7225663103256523 +(0.123E1, ~0.3141592653589793E1, 0.2718281828459045E1): ~0.11458771354564004E1 ~0.11458771354564004E1 +(0.123E1, ~0.3141592653589793E1, 0.123E1): ~0.26341589639154455E1 ~0.26341589639154455E1 +(0.123E1, ~0.3141592653589793E1, 0.123): ~0.37411589639154457E1 ~0.37411589639154457E1 +(0.123E1, ~0.3141592653589793E1, 0.123E~2): ~0.38629289639154454E1 ~0.38629289639154454E1 +(0.123E1, ~0.3141592653589793E1, 0.22250738585072014E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.123E1, ~0.3141592653589793E1, 0.11125369292536007E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.123E1, ~0.3141592653589793E1, 0.5E~323): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.123E1, ~0.3141592653589793E1, 0.0): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.123E1, ~0.3141592653589793E1, ~0.123E4): ~0.12338641589639155E4 ~0.12338641589639155E4 +(0.123E1, ~0.3141592653589793E1, ~0.123E2): ~0.16164158963915447E2 ~0.16164158963915447E2 +(0.123E1, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505239E1 +(0.123E1, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.65824407923744905E1 ~0.65824407923744905E1 +(0.123E1, ~0.3141592653589793E1, ~0.123E1): ~0.5094158963915445E1 ~0.5094158963915445E1 +(0.123E1, ~0.3141592653589793E1, ~0.123): ~0.39871589639154457E1 ~0.39871589639154457E1 +(0.123E1, ~0.3141592653589793E1, ~0.123E~2): ~0.38653889639154455E1 ~0.38653889639154455E1 +(0.123E1, ~0.3141592653589793E1, ~0.22250738585072014E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.123E1, ~0.3141592653589793E1, ~0.11125369292536007E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.123E1, ~0.3141592653589793E1, ~0.5E~323): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.123E1, ~0.3141592653589793E1, ~0.0): ~0.38641589639154454E1 ~0.38641589639154454E1 +(0.123E1, ~0.2718281828459045E1, 0.123E4): 0.12266565133509953E4 0.12266565133509953E4 +(0.123E1, ~0.2718281828459045E1, 0.123E2): 0.8956513350995376E1 0.8956513350995376E1 +(0.123E1, ~0.2718281828459045E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.2018939954148323 +(0.123E1, ~0.2718281828459045E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455804 +(0.123E1, ~0.2718281828459045E1, 0.123E1): ~0.21134866490046256E1 ~0.21134866490046256E1 +(0.123E1, ~0.2718281828459045E1, 0.123): ~0.32204866490046253E1 ~0.32204866490046253E1 +(0.123E1, ~0.2718281828459045E1, 0.123E~2): ~0.33422566490046255E1 ~0.33422566490046255E1 +(0.123E1, ~0.2718281828459045E1, 0.22250738585072014E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.123E1, ~0.2718281828459045E1, 0.11125369292536007E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.123E1, ~0.2718281828459045E1, 0.5E~323): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.123E1, ~0.2718281828459045E1, 0.0): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.123E1, ~0.2718281828459045E1, ~0.123E4): ~0.12333434866490047E4 ~0.12333434866490047E4 +(0.123E1, ~0.2718281828459045E1, ~0.123E2): ~0.15643486649004625E2 ~0.15643486649004625E2 +(0.123E1, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.6485079302594419E1 ~0.6485079302594419E1 +(0.123E1, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.606176847746367E1 +(0.123E1, ~0.2718281828459045E1, ~0.123E1): ~0.4573486649004625E1 ~0.4573486649004625E1 +(0.123E1, ~0.2718281828459045E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046253E1 +(0.123E1, ~0.2718281828459045E1, ~0.123E~2): ~0.33447166490046256E1 ~0.33447166490046256E1 +(0.123E1, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.123E1, ~0.2718281828459045E1, ~0.11125369292536007E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.123E1, ~0.2718281828459045E1, ~0.5E~323): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.123E1, ~0.2718281828459045E1, ~0.0): ~0.33434866490046256E1 ~0.33434866490046256E1 +(0.123E1, ~0.123E1, 0.123E4): 0.12284871E4 0.12284871E4 +(0.123E1, ~0.123E1, 0.123E2): 0.107871E2 0.107871E2 +(0.123E1, ~0.123E1, 0.3141592653589793E1): 0.16286926535897932E1 0.16286926535897932E1 +(0.123E1, ~0.123E1, 0.2718281828459045E1): 0.12053818284590452E1 0.12053818284590452E1 +(0.123E1, ~0.123E1, 0.123E1): ~0.2829 ~0.2829 +(0.123E1, ~0.123E1, 0.123): ~0.13899E1 ~0.13899E1 +(0.123E1, ~0.123E1, 0.123E~2): ~0.15116699999999998E1 ~0.15116699999999998E1 +(0.123E1, ~0.123E1, 0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, 0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, 0.5E~323): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, 0.0): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, ~0.123E4): ~0.12315129E4 ~0.12315129E4 +(0.123E1, ~0.123E1, ~0.123E2): ~0.138129E2 ~0.138129E2 +(0.123E1, ~0.123E1, ~0.3141592653589793E1): ~0.4654492653589793E1 ~0.4654492653589793E1 +(0.123E1, ~0.123E1, ~0.2718281828459045E1): ~0.4231181828459045E1 ~0.4231181828459045E1 +(0.123E1, ~0.123E1, ~0.123E1): ~0.27429E1 ~0.27429E1 +(0.123E1, ~0.123E1, ~0.123): ~0.16359E1 ~0.16359E1 +(0.123E1, ~0.123E1, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(0.123E1, ~0.123E1, ~0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, ~0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, ~0.5E~323): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123E1, ~0.0): ~0.15129E1 ~0.15129E1 +(0.123E1, ~0.123, 0.123E4): 0.122984871E4 0.122984871E4 +(0.123E1, ~0.123, 0.123E2): 0.12148710000000001E2 0.12148710000000001E2 +(0.123E1, ~0.123, 0.3141592653589793E1): 0.2990302653589793E1 0.2990302653589793E1 +(0.123E1, ~0.123, 0.2718281828459045E1): 0.2566991828459045E1 0.2566991828459045E1 +(0.123E1, ~0.123, 0.123E1): 0.107871E1 0.107871E1 +(0.123E1, ~0.123, 0.123): ~0.28289999999999996E~1 ~0.28289999999999996E~1 +(0.123E1, ~0.123, 0.123E~2): ~0.15006 ~0.15006 +(0.123E1, ~0.123, 0.22250738585072014E~307): ~0.15129 ~0.15129 +(0.123E1, ~0.123, 0.11125369292536007E~307): ~0.15129 ~0.15129 +(0.123E1, ~0.123, 0.5E~323): ~0.15129 ~0.15129 +(0.123E1, ~0.123, 0.0): ~0.15129 ~0.15129 +(0.123E1, ~0.123, ~0.123E4): ~0.123015129E4 ~0.123015129E4 +(0.123E1, ~0.123, ~0.123E2): ~0.1245129E2 ~0.1245129E2 +(0.123E1, ~0.123, ~0.3141592653589793E1): ~0.3292882653589793E1 ~0.3292882653589793E1 +(0.123E1, ~0.123, ~0.2718281828459045E1): ~0.2869571828459045E1 ~0.2869571828459045E1 +(0.123E1, ~0.123, ~0.123E1): ~0.138129E1 ~0.138129E1 +(0.123E1, ~0.123, ~0.123): ~0.27429 ~0.27429 +(0.123E1, ~0.123, ~0.123E~2): ~0.15252 ~0.15252 +(0.123E1, ~0.123, ~0.22250738585072014E~307): ~0.15129 ~0.15129 +(0.123E1, ~0.123, ~0.11125369292536007E~307): ~0.15129 ~0.15129 +(0.123E1, ~0.123, ~0.5E~323): ~0.15129 ~0.15129 +(0.123E1, ~0.123, ~0.0): ~0.15129 ~0.15129 +(0.123E1, ~0.123E~2, 0.123E4): 0.12299984871E4 0.12299984871E4 +(0.123E1, ~0.123E~2, 0.123E2): 0.12298487100000001E2 0.12298487100000001E2 +(0.123E1, ~0.123E~2, 0.3141592653589793E1): 0.31400797535897933E1 0.31400797535897933E1 +(0.123E1, ~0.123E~2, 0.2718281828459045E1): 0.27167689284590453E1 0.27167689284590453E1 +(0.123E1, ~0.123E~2, 0.123E1): 0.12284871E1 0.12284871E1 +(0.123E1, ~0.123E~2, 0.123): 0.1214871 0.1214871 +(0.123E1, ~0.123E~2, 0.123E~2): ~0.2829E~3 ~0.2829E~3 +(0.123E1, ~0.123E~2, 0.22250738585072014E~307): ~0.15129E~2 ~0.15129E~2 +(0.123E1, ~0.123E~2, 0.11125369292536007E~307): ~0.15129E~2 ~0.15129E~2 +(0.123E1, ~0.123E~2, 0.5E~323): ~0.15129E~2 ~0.15129E~2 +(0.123E1, ~0.123E~2, 0.0): ~0.15129E~2 ~0.15129E~2 +(0.123E1, ~0.123E~2, ~0.123E4): ~0.12300015129E4 ~0.12300015129E4 +(0.123E1, ~0.123E~2, ~0.123E2): ~0.123015129E2 ~0.123015129E2 +(0.123E1, ~0.123E~2, ~0.3141592653589793E1): ~0.3143105553589793E1 ~0.3143105553589793E1 +(0.123E1, ~0.123E~2, ~0.2718281828459045E1): ~0.2719794728459045E1 ~0.2719794728459045E1 +(0.123E1, ~0.123E~2, ~0.123E1): ~0.12315129E1 ~0.12315129E1 +(0.123E1, ~0.123E~2, ~0.123): ~0.1245129 ~0.1245129 +(0.123E1, ~0.123E~2, ~0.123E~2): ~0.27429E~2 ~0.27429E~2 +(0.123E1, ~0.123E~2, ~0.22250738585072014E~307): ~0.15129E~2 ~0.15129E~2 +(0.123E1, ~0.123E~2, ~0.11125369292536007E~307): ~0.15129E~2 ~0.15129E~2 +(0.123E1, ~0.123E~2, ~0.5E~323): ~0.15129E~2 ~0.15129E~2 +(0.123E1, ~0.123E~2, ~0.0): ~0.15129E~2 ~0.15129E~2 +(0.123E1, ~0.5E~323, 0.22250738585072014E~307): 0.2225073858507201E~307 0.2225073858507201E~307 +(0.123E1, ~0.5E~323, 0.11125369292536007E~307): 0.11125369292536E~307 0.11125369292536E~307 +(0.123E1, ~0.5E~323, 0.5E~323): ~0.0 ~0.0 +(0.123E1, ~0.5E~323, 0.0): ~0.5E~323 ~0.5E~323 +(0.123E1, ~0.5E~323, ~0.22250738585072014E~307): ~0.2225073858507202E~307 ~0.2225073858507202E~307 +(0.123E1, ~0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253601E~307 ~0.1112536929253601E~307 +(0.123E1, ~0.5E~323, ~0.5E~323): ~0.1E~322 ~0.1E~322 +(0.123E1, ~0.5E~323, ~0.0): ~0.5E~323 ~0.5E~323 +(0.123, 0.17976931348623157E309, 0.17976931348623157E309): inf inf +(0.123, 0.17976931348623157E309, 0.8988465674311579E308): 0.11199628230192226E309 0.11199628230192226E309 +(0.123, 0.17976931348623157E309, 0.123E4): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, 0.123E2): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, 0.3141592653589793E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, 0.2718281828459045E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, 0.123E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, 0.123): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, 0.123E~2): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, 0.22250738585072014E~307): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, 0.11125369292536007E~307): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, 0.5E~323): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, 0.0): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, ~0.17976931348623157E309): ~0.15765768792742509E309 ~0.15765768792742509E309 +(0.123, 0.17976931348623157E309, ~0.8988465674311579E308): ~0.677730311843093E308 ~0.677730311843093E308 +(0.123, 0.17976931348623157E309, ~0.123E4): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, ~0.123E2): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, ~0.3141592653589793E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, ~0.2718281828459045E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, ~0.123E1): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, ~0.123): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, ~0.123E~2): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, ~0.22250738585072014E~307): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, ~0.11125369292536007E~307): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, ~0.5E~323): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.17976931348623157E309, ~0.0): 0.22111625558806483E308 0.22111625558806483E308 +(0.123, 0.8988465674311579E308, 0.17976931348623157E309): inf inf +(0.123, 0.8988465674311579E308, 0.8988465674311579E308): 0.10094046952251902E309 0.10094046952251902E309 +(0.123, 0.8988465674311579E308, 0.123E4): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, 0.123E2): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, 0.3141592653589793E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, 0.2718281828459045E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, 0.123E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, 0.123): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, 0.123E~2): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, 0.22250738585072014E~307): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, 0.11125369292536007E~307): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, 0.5E~323): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, 0.0): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, ~0.17976931348623157E309): ~0.16871350070682833E309 ~0.16871350070682833E309 +(0.123, 0.8988465674311579E308, ~0.8988465674311579E308): ~0.7882884396371254E308 ~0.7882884396371254E308 +(0.123, 0.8988465674311579E308, ~0.123E4): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, ~0.123E2): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, ~0.3141592653589793E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, ~0.2718281828459045E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, ~0.123E1): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, ~0.123): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, ~0.123E~2): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, ~0.22250738585072014E~307): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, ~0.11125369292536007E~307): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, ~0.5E~323): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.8988465674311579E308, ~0.0): 0.11055812779403241E308 0.11055812779403241E308 +(0.123, 0.123E4, 0.123E4): 0.138129E4 0.138129E4 +(0.123, 0.123E4, 0.123E2): 0.16359E3 0.16359E3 +(0.123, 0.123E4, 0.3141592653589793E1): 0.1544315926535898E3 0.1544315926535898E3 +(0.123, 0.123E4, 0.2718281828459045E1): 0.15400828182845905E3 0.15400828182845905E3 +(0.123, 0.123E4, 0.123E1): 0.15252E3 0.15252E3 +(0.123, 0.123E4, 0.123): 0.151413E3 0.151413E3 +(0.123, 0.123E4, 0.123E~2): 0.15129122999999998E3 0.15129122999999998E3 +(0.123, 0.123E4, 0.22250738585072014E~307): 0.15129E3 0.15129E3 +(0.123, 0.123E4, 0.11125369292536007E~307): 0.15129E3 0.15129E3 +(0.123, 0.123E4, 0.5E~323): 0.15129E3 0.15129E3 +(0.123, 0.123E4, 0.0): 0.15129E3 0.15129E3 +(0.123, 0.123E4, ~0.123E4): ~0.107871E4 ~0.107871E4 +(0.123, 0.123E4, ~0.123E2): 0.13899E3 0.13899E3 +(0.123, 0.123E4, ~0.3141592653589793E1): 0.1481484073464102E3 0.1481484073464102E3 +(0.123, 0.123E4, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154097E3 +(0.123, 0.123E4, ~0.123E1): 0.15006E3 0.15006E3 +(0.123, 0.123E4, ~0.123): 0.151167E3 0.151167E3 +(0.123, 0.123E4, ~0.123E~2): 0.15128877E3 0.15128877E3 +(0.123, 0.123E4, ~0.22250738585072014E~307): 0.15129E3 0.15129E3 +(0.123, 0.123E4, ~0.11125369292536007E~307): 0.15129E3 0.15129E3 +(0.123, 0.123E4, ~0.5E~323): 0.15129E3 0.15129E3 +(0.123, 0.123E4, ~0.0): 0.15129E3 0.15129E3 +(0.123, 0.123E2, 0.123E4): 0.12315129E4 0.12315129E4 +(0.123, 0.123E2, 0.123E2): 0.138129E2 0.138129E2 +(0.123, 0.123E2, 0.3141592653589793E1): 0.4654492653589793E1 0.4654492653589793E1 +(0.123, 0.123E2, 0.2718281828459045E1): 0.4231181828459045E1 0.4231181828459045E1 +(0.123, 0.123E2, 0.123E1): 0.27429E1 0.27429E1 +(0.123, 0.123E2, 0.123): 0.16359000000000001E1 0.16359000000000001E1 +(0.123, 0.123E2, 0.123E~2): 0.151413E1 0.151413E1 +(0.123, 0.123E2, 0.22250738585072014E~307): 0.15129000000000001E1 0.15129000000000001E1 +(0.123, 0.123E2, 0.11125369292536007E~307): 0.15129000000000001E1 0.15129000000000001E1 +(0.123, 0.123E2, 0.5E~323): 0.15129000000000001E1 0.15129000000000001E1 +(0.123, 0.123E2, 0.0): 0.15129000000000001E1 0.15129000000000001E1 +(0.123, 0.123E2, ~0.123E4): ~0.12284871E4 ~0.12284871E4 +(0.123, 0.123E2, ~0.123E2): ~0.107871E2 ~0.107871E2 +(0.123, 0.123E2, ~0.3141592653589793E1): ~0.1628692653589793E1 ~0.1628692653589793E1 +(0.123, 0.123E2, ~0.2718281828459045E1): ~0.1205381828459045E1 ~0.1205381828459045E1 +(0.123, 0.123E2, ~0.123E1): 0.2829000000000001 0.2829000000000001 +(0.123, 0.123E2, ~0.123): 0.13899000000000001E1 0.13899000000000001E1 +(0.123, 0.123E2, ~0.123E~2): 0.151167E1 0.151167E1 +(0.123, 0.123E2, ~0.22250738585072014E~307): 0.15129000000000001E1 0.15129000000000001E1 +(0.123, 0.123E2, ~0.11125369292536007E~307): 0.15129000000000001E1 0.15129000000000001E1 +(0.123, 0.123E2, ~0.5E~323): 0.15129000000000001E1 0.15129000000000001E1 +(0.123, 0.123E2, ~0.0): 0.15129000000000001E1 0.15129000000000001E1 +(0.123, 0.3141592653589793E1, 0.123E4): 0.12303864158963916E4 0.12303864158963916E4 +(0.123, 0.3141592653589793E1, 0.123E2): 0.12686415896391546E2 0.12686415896391546E2 +(0.123, 0.3141592653589793E1, 0.3141592653589793E1): 0.35280085499813376E1 0.35280085499813376E1 +(0.123, 0.3141592653589793E1, 0.2718281828459045E1): 0.31046977248505896E1 0.31046977248505896E1 +(0.123, 0.3141592653589793E1, 0.123E1): 0.16164158963915445E1 0.16164158963915445E1 +(0.123, 0.3141592653589793E1, 0.123): 0.5094158963915445 0.5094158963915445 +(0.123, 0.3141592653589793E1, 0.123E~2): 0.38764589639154456 0.38764589639154456 +(0.123, 0.3141592653589793E1, 0.22250738585072014E~307): 0.38641589639154456 0.38641589639154456 +(0.123, 0.3141592653589793E1, 0.11125369292536007E~307): 0.38641589639154456 0.38641589639154456 +(0.123, 0.3141592653589793E1, 0.5E~323): 0.38641589639154456 0.38641589639154456 +(0.123, 0.3141592653589793E1, 0.0): 0.38641589639154456 0.38641589639154456 +(0.123, 0.3141592653589793E1, ~0.123E4): ~0.12296135841036084E4 ~0.12296135841036084E4 +(0.123, 0.3141592653589793E1, ~0.123E2): ~0.11913584103608455E2 ~0.11913584103608455E2 +(0.123, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.27551767571982486E1 ~0.27551767571982486E1 +(0.123, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.23318659320675006E1 ~0.23318659320675006E1 +(0.123, 0.3141592653589793E1, ~0.123E1): ~0.8435841036084555 ~0.8435841036084555 +(0.123, 0.3141592653589793E1, ~0.123): 0.26341589639154456 0.26341589639154456 +(0.123, 0.3141592653589793E1, ~0.123E~2): 0.38518589639154455 0.38518589639154455 +(0.123, 0.3141592653589793E1, ~0.22250738585072014E~307): 0.38641589639154456 0.38641589639154456 +(0.123, 0.3141592653589793E1, ~0.11125369292536007E~307): 0.38641589639154456 0.38641589639154456 +(0.123, 0.3141592653589793E1, ~0.5E~323): 0.38641589639154456 0.38641589639154456 +(0.123, 0.3141592653589793E1, ~0.0): 0.38641589639154456 0.38641589639154456 +(0.123, 0.2718281828459045E1, 0.123E4): 0.12303343486649005E4 0.12303343486649005E4 +(0.123, 0.2718281828459045E1, 0.123E2): 0.12634348664900463E2 0.12634348664900463E2 +(0.123, 0.2718281828459045E1, 0.3141592653589793E1): 0.34759413184902557E1 0.34759413184902557E1 +(0.123, 0.2718281828459045E1, 0.2718281828459045E1): 0.30526304933595076E1 0.30526304933595076E1 +(0.123, 0.2718281828459045E1, 0.123E1): 0.15643486649004625E1 0.15643486649004625E1 +(0.123, 0.2718281828459045E1, 0.123): 0.45734866490046255 0.45734866490046255 +(0.123, 0.2718281828459045E1, 0.123E~2): 0.33557866490046256 0.33557866490046256 +(0.123, 0.2718281828459045E1, 0.22250738585072014E~307): 0.33434866490046256 0.33434866490046256 +(0.123, 0.2718281828459045E1, 0.11125369292536007E~307): 0.33434866490046256 0.33434866490046256 +(0.123, 0.2718281828459045E1, 0.5E~323): 0.33434866490046256 0.33434866490046256 +(0.123, 0.2718281828459045E1, 0.0): 0.33434866490046256 0.33434866490046256 +(0.123, 0.2718281828459045E1, ~0.123E4): ~0.12296656513350995E4 ~0.12296656513350995E4 +(0.123, 0.2718281828459045E1, ~0.123E2): ~0.11965651335099539E2 ~0.11965651335099539E2 +(0.123, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.28072439886893306E1 ~0.28072439886893306E1 +(0.123, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.23839331635585825E1 ~0.23839331635585825E1 +(0.123, 0.2718281828459045E1, ~0.123E1): ~0.8956513350995374 ~0.8956513350995374 +(0.123, 0.2718281828459045E1, ~0.123): 0.21134866490046253 0.21134866490046253 +(0.123, 0.2718281828459045E1, ~0.123E~2): 0.33311866490046255 0.33311866490046255 +(0.123, 0.2718281828459045E1, ~0.22250738585072014E~307): 0.33434866490046256 0.33434866490046256 +(0.123, 0.2718281828459045E1, ~0.11125369292536007E~307): 0.33434866490046256 0.33434866490046256 +(0.123, 0.2718281828459045E1, ~0.5E~323): 0.33434866490046256 0.33434866490046256 +(0.123, 0.2718281828459045E1, ~0.0): 0.33434866490046256 0.33434866490046256 +(0.123, 0.123E1, 0.123E4): 0.123015129E4 0.123015129E4 +(0.123, 0.123E1, 0.123E2): 0.1245129E2 0.1245129E2 +(0.123, 0.123E1, 0.3141592653589793E1): 0.3292882653589793E1 0.3292882653589793E1 +(0.123, 0.123E1, 0.2718281828459045E1): 0.2869571828459045E1 0.2869571828459045E1 +(0.123, 0.123E1, 0.123E1): 0.138129E1 0.138129E1 +(0.123, 0.123E1, 0.123): 0.27429 0.27429 +(0.123, 0.123E1, 0.123E~2): 0.15252 0.15252 +(0.123, 0.123E1, 0.22250738585072014E~307): 0.15129 0.15129 +(0.123, 0.123E1, 0.11125369292536007E~307): 0.15129 0.15129 +(0.123, 0.123E1, 0.5E~323): 0.15129 0.15129 +(0.123, 0.123E1, 0.0): 0.15129 0.15129 +(0.123, 0.123E1, ~0.123E4): ~0.122984871E4 ~0.122984871E4 +(0.123, 0.123E1, ~0.123E2): ~0.12148710000000001E2 ~0.12148710000000001E2 +(0.123, 0.123E1, ~0.3141592653589793E1): ~0.2990302653589793E1 ~0.2990302653589793E1 +(0.123, 0.123E1, ~0.2718281828459045E1): ~0.2566991828459045E1 ~0.2566991828459045E1 +(0.123, 0.123E1, ~0.123E1): ~0.107871E1 ~0.107871E1 +(0.123, 0.123E1, ~0.123): 0.28289999999999996E~1 0.28289999999999996E~1 +(0.123, 0.123E1, ~0.123E~2): 0.15006 0.15006 +(0.123, 0.123E1, ~0.22250738585072014E~307): 0.15129 0.15129 +(0.123, 0.123E1, ~0.11125369292536007E~307): 0.15129 0.15129 +(0.123, 0.123E1, ~0.5E~323): 0.15129 0.15129 +(0.123, 0.123E1, ~0.0): 0.15129 0.15129 +(0.123, 0.123, 0.123E4): 0.1230015129E4 0.1230015129E4 +(0.123, 0.123, 0.123E2): 0.12315129E2 0.12315129E2 +(0.123, 0.123, 0.3141592653589793E1): 0.3156721653589793E1 0.3156721653589793E1 +(0.123, 0.123, 0.2718281828459045E1): 0.2733410828459045E1 0.2733410828459045E1 +(0.123, 0.123, 0.123E1): 0.1245129E1 0.1245129E1 +(0.123, 0.123, 0.123): 0.138129 0.138129 +(0.123, 0.123, 0.123E~2): 0.16359E~1 0.16359E~1 +(0.123, 0.123, 0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(0.123, 0.123, 0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(0.123, 0.123, 0.5E~323): 0.15129E~1 0.15129E~1 +(0.123, 0.123, 0.0): 0.15129E~1 0.15129E~1 +(0.123, 0.123, ~0.123E4): ~0.1229984871E4 ~0.1229984871E4 +(0.123, 0.123, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(0.123, 0.123, ~0.3141592653589793E1): ~0.3126463653589793E1 ~0.3126463653589793E1 +(0.123, 0.123, ~0.2718281828459045E1): ~0.2703152828459045E1 ~0.2703152828459045E1 +(0.123, 0.123, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(0.123, 0.123, ~0.123): ~0.107871 ~0.107871 +(0.123, 0.123, ~0.123E~2): 0.13899E~1 0.13899E~1 +(0.123, 0.123, ~0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(0.123, 0.123, ~0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(0.123, 0.123, ~0.5E~323): 0.15129E~1 0.15129E~1 +(0.123, 0.123, ~0.0): 0.15129E~1 0.15129E~1 +(0.123, 0.123E~2, 0.123E4): 0.123000015129E4 0.123000015129E4 +(0.123, 0.123E~2, 0.123E2): 0.1230015129E2 0.1230015129E2 +(0.123, 0.123E~2, 0.3141592653589793E1): 0.3141743943589793E1 0.3141743943589793E1 +(0.123, 0.123E~2, 0.2718281828459045E1): 0.2718433118459045E1 0.2718433118459045E1 +(0.123, 0.123E~2, 0.123E1): 0.123015129E1 0.123015129E1 +(0.123, 0.123E~2, 0.123): 0.12315129 0.12315129 +(0.123, 0.123E~2, 0.123E~2): 0.13812899999999999E~2 0.13812899999999999E~2 +(0.123, 0.123E~2, 0.22250738585072014E~307): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, 0.11125369292536007E~307): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, 0.5E~323): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, 0.0): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, ~0.123E4): ~0.122999984871E4 ~0.122999984871E4 +(0.123, 0.123E~2, ~0.123E2): ~0.12299848710000001E2 ~0.12299848710000001E2 +(0.123, 0.123E~2, ~0.3141592653589793E1): ~0.31414413635897933E1 ~0.31414413635897933E1 +(0.123, 0.123E~2, ~0.2718281828459045E1): ~0.27181305384590453E1 ~0.27181305384590453E1 +(0.123, 0.123E~2, ~0.123E1): ~0.122984871E1 ~0.122984871E1 +(0.123, 0.123E~2, ~0.123): ~0.12284871 ~0.12284871 +(0.123, 0.123E~2, ~0.123E~2): ~0.107871E~2 ~0.107871E~2 +(0.123, 0.123E~2, ~0.22250738585072014E~307): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, ~0.11125369292536007E~307): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, ~0.5E~323): 0.15129E~3 0.15129E~3 +(0.123, 0.123E~2, ~0.0): 0.15129E~3 0.15129E~3 +(0.123, 0.11125369292536007E~307, 0.22250738585072014E~307): 0.23619159008053945E~307 0.23619159008053945E~307 +(0.123, 0.11125369292536007E~307, 0.11125369292536007E~307): 0.1249378971551794E~307 0.1249378971551794E~307 +(0.123, 0.11125369292536007E~307, 0.5E~323): 0.136842042298193E~308 0.136842042298193E~308 +(0.123, 0.11125369292536007E~307, 0.0): 0.136842042298193E~308 0.136842042298193E~308 +(0.123, 0.11125369292536007E~307, ~0.22250738585072014E~307): ~0.20882318162090083E~307 ~0.20882318162090083E~307 +(0.123, 0.11125369292536007E~307, ~0.11125369292536007E~307): ~0.9756948869554076E~308 ~0.9756948869554076E~308 +(0.123, 0.11125369292536007E~307, ~0.5E~323): 0.136842042298192E~308 0.136842042298192E~308 +(0.123, 0.11125369292536007E~307, ~0.0): 0.136842042298193E~308 0.136842042298193E~308 +(0.123, 0.5E~323, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(0.123, 0.5E~323, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(0.123, 0.5E~323, 0.5E~323): 0.5E~323 0.5E~323 +(0.123, 0.5E~323, 0.0): 0.0 0.0 +(0.123, 0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(0.123, 0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(0.123, 0.5E~323, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(0.123, 0.5E~323, ~0.0): 0.0 0.0 +(0.123, ~0.17976931348623157E309, 0.17976931348623157E309): 0.15765768792742509E309 0.15765768792742509E309 +(0.123, ~0.17976931348623157E309, 0.8988465674311579E308): 0.677730311843093E308 0.677730311843093E308 +(0.123, ~0.17976931348623157E309, 0.123E4): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, 0.123E2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, 0.3141592653589793E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, 0.2718281828459045E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, 0.123E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, 0.123): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, 0.123E~2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, 0.22250738585072014E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, 0.11125369292536007E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, 0.5E~323): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, 0.0): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(0.123, ~0.17976931348623157E309, ~0.8988465674311579E308): ~0.11199628230192226E309 ~0.11199628230192226E309 +(0.123, ~0.17976931348623157E309, ~0.123E4): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, ~0.123E2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, ~0.3141592653589793E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, ~0.2718281828459045E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, ~0.123E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, ~0.123): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, ~0.123E~2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, ~0.22250738585072014E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, ~0.11125369292536007E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, ~0.5E~323): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.17976931348623157E309, ~0.0): ~0.22111625558806483E308 ~0.22111625558806483E308 +(0.123, ~0.8988465674311579E308, 0.17976931348623157E309): 0.16871350070682833E309 0.16871350070682833E309 +(0.123, ~0.8988465674311579E308, 0.8988465674311579E308): 0.7882884396371254E308 0.7882884396371254E308 +(0.123, ~0.8988465674311579E308, 0.123E4): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, 0.123E2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, 0.3141592653589793E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, 0.2718281828459045E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, 0.123E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, 0.123): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, 0.123E~2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, 0.22250738585072014E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, 0.11125369292536007E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, 0.5E~323): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, 0.0): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(0.123, ~0.8988465674311579E308, ~0.8988465674311579E308): ~0.10094046952251902E309 ~0.10094046952251902E309 +(0.123, ~0.8988465674311579E308, ~0.123E4): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, ~0.123E2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, ~0.3141592653589793E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, ~0.2718281828459045E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, ~0.123E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, ~0.123): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, ~0.123E~2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, ~0.22250738585072014E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, ~0.11125369292536007E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, ~0.5E~323): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.8988465674311579E308, ~0.0): ~0.11055812779403241E308 ~0.11055812779403241E308 +(0.123, ~0.123E4, 0.123E4): 0.107871E4 0.107871E4 +(0.123, ~0.123E4, 0.123E2): ~0.13899E3 ~0.13899E3 +(0.123, ~0.123E4, 0.3141592653589793E1): ~0.1481484073464102E3 ~0.1481484073464102E3 +(0.123, ~0.123E4, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154097E3 +(0.123, ~0.123E4, 0.123E1): ~0.15006E3 ~0.15006E3 +(0.123, ~0.123E4, 0.123): ~0.151167E3 ~0.151167E3 +(0.123, ~0.123E4, 0.123E~2): ~0.15128877E3 ~0.15128877E3 +(0.123, ~0.123E4, 0.22250738585072014E~307): ~0.15129E3 ~0.15129E3 +(0.123, ~0.123E4, 0.11125369292536007E~307): ~0.15129E3 ~0.15129E3 +(0.123, ~0.123E4, 0.5E~323): ~0.15129E3 ~0.15129E3 +(0.123, ~0.123E4, 0.0): ~0.15129E3 ~0.15129E3 +(0.123, ~0.123E4, ~0.123E4): ~0.138129E4 ~0.138129E4 +(0.123, ~0.123E4, ~0.123E2): ~0.16359E3 ~0.16359E3 +(0.123, ~0.123E4, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.1544315926535898E3 +(0.123, ~0.123E4, ~0.2718281828459045E1): ~0.15400828182845905E3 ~0.15400828182845905E3 +(0.123, ~0.123E4, ~0.123E1): ~0.15252E3 ~0.15252E3 +(0.123, ~0.123E4, ~0.123): ~0.151413E3 ~0.151413E3 +(0.123, ~0.123E4, ~0.123E~2): ~0.15129122999999998E3 ~0.15129122999999998E3 +(0.123, ~0.123E4, ~0.22250738585072014E~307): ~0.15129E3 ~0.15129E3 +(0.123, ~0.123E4, ~0.11125369292536007E~307): ~0.15129E3 ~0.15129E3 +(0.123, ~0.123E4, ~0.5E~323): ~0.15129E3 ~0.15129E3 +(0.123, ~0.123E4, ~0.0): ~0.15129E3 ~0.15129E3 +(0.123, ~0.123E2, 0.123E4): 0.12284871E4 0.12284871E4 +(0.123, ~0.123E2, 0.123E2): 0.107871E2 0.107871E2 +(0.123, ~0.123E2, 0.3141592653589793E1): 0.1628692653589793E1 0.1628692653589793E1 +(0.123, ~0.123E2, 0.2718281828459045E1): 0.1205381828459045E1 0.1205381828459045E1 +(0.123, ~0.123E2, 0.123E1): ~0.2829000000000001 ~0.2829000000000001 +(0.123, ~0.123E2, 0.123): ~0.13899000000000001E1 ~0.13899000000000001E1 +(0.123, ~0.123E2, 0.123E~2): ~0.151167E1 ~0.151167E1 +(0.123, ~0.123E2, 0.22250738585072014E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123, ~0.123E2, 0.11125369292536007E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123, ~0.123E2, 0.5E~323): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123, ~0.123E2, 0.0): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123, ~0.123E2, ~0.123E4): ~0.12315129E4 ~0.12315129E4 +(0.123, ~0.123E2, ~0.123E2): ~0.138129E2 ~0.138129E2 +(0.123, ~0.123E2, ~0.3141592653589793E1): ~0.4654492653589793E1 ~0.4654492653589793E1 +(0.123, ~0.123E2, ~0.2718281828459045E1): ~0.4231181828459045E1 ~0.4231181828459045E1 +(0.123, ~0.123E2, ~0.123E1): ~0.27429E1 ~0.27429E1 +(0.123, ~0.123E2, ~0.123): ~0.16359000000000001E1 ~0.16359000000000001E1 +(0.123, ~0.123E2, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(0.123, ~0.123E2, ~0.22250738585072014E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123, ~0.123E2, ~0.11125369292536007E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123, ~0.123E2, ~0.5E~323): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123, ~0.123E2, ~0.0): ~0.15129000000000001E1 ~0.15129000000000001E1 +(0.123, ~0.3141592653589793E1, 0.123E4): 0.12296135841036084E4 0.12296135841036084E4 +(0.123, ~0.3141592653589793E1, 0.123E2): 0.11913584103608455E2 0.11913584103608455E2 +(0.123, ~0.3141592653589793E1, 0.3141592653589793E1): 0.27551767571982486E1 0.27551767571982486E1 +(0.123, ~0.3141592653589793E1, 0.2718281828459045E1): 0.23318659320675006E1 0.23318659320675006E1 +(0.123, ~0.3141592653589793E1, 0.123E1): 0.8435841036084555 0.8435841036084555 +(0.123, ~0.3141592653589793E1, 0.123): ~0.26341589639154456 ~0.26341589639154456 +(0.123, ~0.3141592653589793E1, 0.123E~2): ~0.38518589639154455 ~0.38518589639154455 +(0.123, ~0.3141592653589793E1, 0.22250738585072014E~307): ~0.38641589639154456 ~0.38641589639154456 +(0.123, ~0.3141592653589793E1, 0.11125369292536007E~307): ~0.38641589639154456 ~0.38641589639154456 +(0.123, ~0.3141592653589793E1, 0.5E~323): ~0.38641589639154456 ~0.38641589639154456 +(0.123, ~0.3141592653589793E1, 0.0): ~0.38641589639154456 ~0.38641589639154456 +(0.123, ~0.3141592653589793E1, ~0.123E4): ~0.12303864158963916E4 ~0.12303864158963916E4 +(0.123, ~0.3141592653589793E1, ~0.123E2): ~0.12686415896391546E2 ~0.12686415896391546E2 +(0.123, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.35280085499813376E1 ~0.35280085499813376E1 +(0.123, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.31046977248505896E1 ~0.31046977248505896E1 +(0.123, ~0.3141592653589793E1, ~0.123E1): ~0.16164158963915445E1 ~0.16164158963915445E1 +(0.123, ~0.3141592653589793E1, ~0.123): ~0.5094158963915445 ~0.5094158963915445 +(0.123, ~0.3141592653589793E1, ~0.123E~2): ~0.38764589639154456 ~0.38764589639154456 +(0.123, ~0.3141592653589793E1, ~0.22250738585072014E~307): ~0.38641589639154456 ~0.38641589639154456 +(0.123, ~0.3141592653589793E1, ~0.11125369292536007E~307): ~0.38641589639154456 ~0.38641589639154456 +(0.123, ~0.3141592653589793E1, ~0.5E~323): ~0.38641589639154456 ~0.38641589639154456 +(0.123, ~0.3141592653589793E1, ~0.0): ~0.38641589639154456 ~0.38641589639154456 +(0.123, ~0.2718281828459045E1, 0.123E4): 0.12296656513350995E4 0.12296656513350995E4 +(0.123, ~0.2718281828459045E1, 0.123E2): 0.11965651335099539E2 0.11965651335099539E2 +(0.123, ~0.2718281828459045E1, 0.3141592653589793E1): 0.28072439886893306E1 0.28072439886893306E1 +(0.123, ~0.2718281828459045E1, 0.2718281828459045E1): 0.23839331635585825E1 0.23839331635585825E1 +(0.123, ~0.2718281828459045E1, 0.123E1): 0.8956513350995374 0.8956513350995374 +(0.123, ~0.2718281828459045E1, 0.123): ~0.21134866490046253 ~0.21134866490046253 +(0.123, ~0.2718281828459045E1, 0.123E~2): ~0.33311866490046255 ~0.33311866490046255 +(0.123, ~0.2718281828459045E1, 0.22250738585072014E~307): ~0.33434866490046256 ~0.33434866490046256 +(0.123, ~0.2718281828459045E1, 0.11125369292536007E~307): ~0.33434866490046256 ~0.33434866490046256 +(0.123, ~0.2718281828459045E1, 0.5E~323): ~0.33434866490046256 ~0.33434866490046256 +(0.123, ~0.2718281828459045E1, 0.0): ~0.33434866490046256 ~0.33434866490046256 +(0.123, ~0.2718281828459045E1, ~0.123E4): ~0.12303343486649005E4 ~0.12303343486649005E4 +(0.123, ~0.2718281828459045E1, ~0.123E2): ~0.12634348664900463E2 ~0.12634348664900463E2 +(0.123, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.34759413184902557E1 ~0.34759413184902557E1 +(0.123, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.30526304933595076E1 ~0.30526304933595076E1 +(0.123, ~0.2718281828459045E1, ~0.123E1): ~0.15643486649004625E1 ~0.15643486649004625E1 +(0.123, ~0.2718281828459045E1, ~0.123): ~0.45734866490046255 ~0.45734866490046255 +(0.123, ~0.2718281828459045E1, ~0.123E~2): ~0.33557866490046256 ~0.33557866490046256 +(0.123, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~0.33434866490046256 ~0.33434866490046256 +(0.123, ~0.2718281828459045E1, ~0.11125369292536007E~307): ~0.33434866490046256 ~0.33434866490046256 +(0.123, ~0.2718281828459045E1, ~0.5E~323): ~0.33434866490046256 ~0.33434866490046256 +(0.123, ~0.2718281828459045E1, ~0.0): ~0.33434866490046256 ~0.33434866490046256 +(0.123, ~0.123E1, 0.123E4): 0.122984871E4 0.122984871E4 +(0.123, ~0.123E1, 0.123E2): 0.12148710000000001E2 0.12148710000000001E2 +(0.123, ~0.123E1, 0.3141592653589793E1): 0.2990302653589793E1 0.2990302653589793E1 +(0.123, ~0.123E1, 0.2718281828459045E1): 0.2566991828459045E1 0.2566991828459045E1 +(0.123, ~0.123E1, 0.123E1): 0.107871E1 0.107871E1 +(0.123, ~0.123E1, 0.123): ~0.28289999999999996E~1 ~0.28289999999999996E~1 +(0.123, ~0.123E1, 0.123E~2): ~0.15006 ~0.15006 +(0.123, ~0.123E1, 0.22250738585072014E~307): ~0.15129 ~0.15129 +(0.123, ~0.123E1, 0.11125369292536007E~307): ~0.15129 ~0.15129 +(0.123, ~0.123E1, 0.5E~323): ~0.15129 ~0.15129 +(0.123, ~0.123E1, 0.0): ~0.15129 ~0.15129 +(0.123, ~0.123E1, ~0.123E4): ~0.123015129E4 ~0.123015129E4 +(0.123, ~0.123E1, ~0.123E2): ~0.1245129E2 ~0.1245129E2 +(0.123, ~0.123E1, ~0.3141592653589793E1): ~0.3292882653589793E1 ~0.3292882653589793E1 +(0.123, ~0.123E1, ~0.2718281828459045E1): ~0.2869571828459045E1 ~0.2869571828459045E1 +(0.123, ~0.123E1, ~0.123E1): ~0.138129E1 ~0.138129E1 +(0.123, ~0.123E1, ~0.123): ~0.27429 ~0.27429 +(0.123, ~0.123E1, ~0.123E~2): ~0.15252 ~0.15252 +(0.123, ~0.123E1, ~0.22250738585072014E~307): ~0.15129 ~0.15129 +(0.123, ~0.123E1, ~0.11125369292536007E~307): ~0.15129 ~0.15129 +(0.123, ~0.123E1, ~0.5E~323): ~0.15129 ~0.15129 +(0.123, ~0.123E1, ~0.0): ~0.15129 ~0.15129 +(0.123, ~0.123, 0.123E4): 0.1229984871E4 0.1229984871E4 +(0.123, ~0.123, 0.123E2): 0.12284871E2 0.12284871E2 +(0.123, ~0.123, 0.3141592653589793E1): 0.3126463653589793E1 0.3126463653589793E1 +(0.123, ~0.123, 0.2718281828459045E1): 0.2703152828459045E1 0.2703152828459045E1 +(0.123, ~0.123, 0.123E1): 0.1214871E1 0.1214871E1 +(0.123, ~0.123, 0.123): 0.107871 0.107871 +(0.123, ~0.123, 0.123E~2): ~0.13899E~1 ~0.13899E~1 +(0.123, ~0.123, 0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(0.123, ~0.123, 0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(0.123, ~0.123, 0.5E~323): ~0.15129E~1 ~0.15129E~1 +(0.123, ~0.123, 0.0): ~0.15129E~1 ~0.15129E~1 +(0.123, ~0.123, ~0.123E4): ~0.1230015129E4 ~0.1230015129E4 +(0.123, ~0.123, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(0.123, ~0.123, ~0.3141592653589793E1): ~0.3156721653589793E1 ~0.3156721653589793E1 +(0.123, ~0.123, ~0.2718281828459045E1): ~0.2733410828459045E1 ~0.2733410828459045E1 +(0.123, ~0.123, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(0.123, ~0.123, ~0.123): ~0.138129 ~0.138129 +(0.123, ~0.123, ~0.123E~2): ~0.16359E~1 ~0.16359E~1 +(0.123, ~0.123, ~0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(0.123, ~0.123, ~0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(0.123, ~0.123, ~0.5E~323): ~0.15129E~1 ~0.15129E~1 +(0.123, ~0.123, ~0.0): ~0.15129E~1 ~0.15129E~1 +(0.123, ~0.123E~2, 0.123E4): 0.122999984871E4 0.122999984871E4 +(0.123, ~0.123E~2, 0.123E2): 0.12299848710000001E2 0.12299848710000001E2 +(0.123, ~0.123E~2, 0.3141592653589793E1): 0.31414413635897933E1 0.31414413635897933E1 +(0.123, ~0.123E~2, 0.2718281828459045E1): 0.27181305384590453E1 0.27181305384590453E1 +(0.123, ~0.123E~2, 0.123E1): 0.122984871E1 0.122984871E1 +(0.123, ~0.123E~2, 0.123): 0.12284871 0.12284871 +(0.123, ~0.123E~2, 0.123E~2): 0.107871E~2 0.107871E~2 +(0.123, ~0.123E~2, 0.22250738585072014E~307): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, 0.11125369292536007E~307): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, 0.5E~323): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, 0.0): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, ~0.123E4): ~0.123000015129E4 ~0.123000015129E4 +(0.123, ~0.123E~2, ~0.123E2): ~0.1230015129E2 ~0.1230015129E2 +(0.123, ~0.123E~2, ~0.3141592653589793E1): ~0.3141743943589793E1 ~0.3141743943589793E1 +(0.123, ~0.123E~2, ~0.2718281828459045E1): ~0.2718433118459045E1 ~0.2718433118459045E1 +(0.123, ~0.123E~2, ~0.123E1): ~0.123015129E1 ~0.123015129E1 +(0.123, ~0.123E~2, ~0.123): ~0.12315129 ~0.12315129 +(0.123, ~0.123E~2, ~0.123E~2): ~0.13812899999999999E~2 ~0.13812899999999999E~2 +(0.123, ~0.123E~2, ~0.22250738585072014E~307): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, ~0.11125369292536007E~307): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, ~0.5E~323): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.123E~2, ~0.0): ~0.15129E~3 ~0.15129E~3 +(0.123, ~0.11125369292536007E~307, 0.22250738585072014E~307): 0.20882318162090083E~307 0.20882318162090083E~307 +(0.123, ~0.11125369292536007E~307, 0.11125369292536007E~307): 0.9756948869554076E~308 0.9756948869554076E~308 +(0.123, ~0.11125369292536007E~307, 0.5E~323): ~0.136842042298192E~308 ~0.136842042298192E~308 +(0.123, ~0.11125369292536007E~307, 0.0): ~0.136842042298193E~308 ~0.136842042298193E~308 +(0.123, ~0.11125369292536007E~307, ~0.22250738585072014E~307): ~0.23619159008053945E~307 ~0.23619159008053945E~307 +(0.123, ~0.11125369292536007E~307, ~0.11125369292536007E~307): ~0.1249378971551794E~307 ~0.1249378971551794E~307 +(0.123, ~0.11125369292536007E~307, ~0.5E~323): ~0.136842042298193E~308 ~0.136842042298193E~308 +(0.123, ~0.11125369292536007E~307, ~0.0): ~0.136842042298193E~308 ~0.136842042298193E~308 +(0.123, ~0.5E~323, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(0.123, ~0.5E~323, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(0.123, ~0.5E~323, 0.5E~323): 0.5E~323 0.5E~323 +(0.123, ~0.5E~323, 0.0): ~0.0 ~0.0 +(0.123, ~0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(0.123, ~0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(0.123, ~0.5E~323, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(0.123, ~0.5E~323, ~0.0): ~0.0 ~0.0 +(0.123E~2, 0.17976931348623157E309, 0.17976931348623157E309): inf inf +(0.123E~2, 0.17976931348623157E309, 0.8988465674311579E308): 0.9010577299870385E308 0.9010577299870385E308 +(0.123E~2, 0.17976931348623157E309, 0.123E4): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, 0.123E2): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, 0.3141592653589793E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, 0.2718281828459045E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, 0.123E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, 0.123): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, 0.123E~2): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, 0.22250738585072014E~307): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, 0.11125369292536007E~307): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, 0.5E~323): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, 0.0): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, ~0.17976931348623157E309): ~0.17954819723064351E309 ~0.17954819723064351E309 +(0.123E~2, 0.17976931348623157E309, ~0.8988465674311579E308): ~0.8966354048752772E308 ~0.8966354048752772E308 +(0.123E~2, 0.17976931348623157E309, ~0.123E4): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, ~0.123E2): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, ~0.3141592653589793E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, ~0.2718281828459045E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, ~0.123E1): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, ~0.123): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, ~0.123E~2): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, ~0.22250738585072014E~307): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, ~0.11125369292536007E~307): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, ~0.5E~323): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.17976931348623157E309, ~0.0): 0.2211162555880648E306 0.2211162555880648E306 +(0.123E~2, 0.8988465674311579E308, 0.17976931348623157E309): inf inf +(0.123E~2, 0.8988465674311579E308, 0.8988465674311579E308): 0.8999521487090981E308 0.8999521487090981E308 +(0.123E~2, 0.8988465674311579E308, 0.123E4): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, 0.123E2): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, 0.3141592653589793E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, 0.2718281828459045E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, 0.123E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, 0.123): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, 0.123E~2): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, 0.22250738585072014E~307): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, 0.11125369292536007E~307): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, 0.5E~323): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, 0.0): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, ~0.17976931348623157E309): ~0.17965875535843753E309 ~0.17965875535843753E309 +(0.123E~2, 0.8988465674311579E308, ~0.8988465674311579E308): ~0.8977409861532176E308 ~0.8977409861532176E308 +(0.123E~2, 0.8988465674311579E308, ~0.123E4): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, ~0.123E2): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, ~0.3141592653589793E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, ~0.2718281828459045E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, ~0.123E1): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, ~0.123): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, ~0.123E~2): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, ~0.22250738585072014E~307): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, ~0.11125369292536007E~307): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, ~0.5E~323): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.8988465674311579E308, ~0.0): 0.1105581277940324E306 0.1105581277940324E306 +(0.123E~2, 0.123E4, 0.123E4): 0.12315129E4 0.12315129E4 +(0.123E~2, 0.123E4, 0.123E2): 0.138129E2 0.138129E2 +(0.123E~2, 0.123E4, 0.3141592653589793E1): 0.4654492653589793E1 0.4654492653589793E1 +(0.123E~2, 0.123E4, 0.2718281828459045E1): 0.4231181828459045E1 0.4231181828459045E1 +(0.123E~2, 0.123E4, 0.123E1): 0.27429E1 0.27429E1 +(0.123E~2, 0.123E4, 0.123): 0.16359E1 0.16359E1 +(0.123E~2, 0.123E4, 0.123E~2): 0.151413E1 0.151413E1 +(0.123E~2, 0.123E4, 0.22250738585072014E~307): 0.15129E1 0.15129E1 +(0.123E~2, 0.123E4, 0.11125369292536007E~307): 0.15129E1 0.15129E1 +(0.123E~2, 0.123E4, 0.5E~323): 0.15129E1 0.15129E1 +(0.123E~2, 0.123E4, 0.0): 0.15129E1 0.15129E1 +(0.123E~2, 0.123E4, ~0.123E4): ~0.12284871E4 ~0.12284871E4 +(0.123E~2, 0.123E4, ~0.123E2): ~0.107871E2 ~0.107871E2 +(0.123E~2, 0.123E4, ~0.3141592653589793E1): ~0.16286926535897932E1 ~0.16286926535897932E1 +(0.123E~2, 0.123E4, ~0.2718281828459045E1): ~0.12053818284590452E1 ~0.12053818284590452E1 +(0.123E~2, 0.123E4, ~0.123E1): 0.2829 0.2829 +(0.123E~2, 0.123E4, ~0.123): 0.13899E1 0.13899E1 +(0.123E~2, 0.123E4, ~0.123E~2): 0.151167E1 0.151167E1 +(0.123E~2, 0.123E4, ~0.22250738585072014E~307): 0.15129E1 0.15129E1 +(0.123E~2, 0.123E4, ~0.11125369292536007E~307): 0.15129E1 0.15129E1 +(0.123E~2, 0.123E4, ~0.5E~323): 0.15129E1 0.15129E1 +(0.123E~2, 0.123E4, ~0.0): 0.15129E1 0.15129E1 +(0.123E~2, 0.123E2, 0.123E4): 0.1230015129E4 0.1230015129E4 +(0.123E~2, 0.123E2, 0.123E2): 0.12315129E2 0.12315129E2 +(0.123E~2, 0.123E2, 0.3141592653589793E1): 0.3156721653589793E1 0.3156721653589793E1 +(0.123E~2, 0.123E2, 0.2718281828459045E1): 0.2733410828459045E1 0.2733410828459045E1 +(0.123E~2, 0.123E2, 0.123E1): 0.1245129E1 0.1245129E1 +(0.123E~2, 0.123E2, 0.123): 0.138129 0.138129 +(0.123E~2, 0.123E2, 0.123E~2): 0.16359000000000002E~1 0.16359000000000002E~1 +(0.123E~2, 0.123E2, 0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(0.123E~2, 0.123E2, 0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(0.123E~2, 0.123E2, 0.5E~323): 0.15129E~1 0.15129E~1 +(0.123E~2, 0.123E2, 0.0): 0.15129E~1 0.15129E~1 +(0.123E~2, 0.123E2, ~0.123E4): ~0.1229984871E4 ~0.1229984871E4 +(0.123E~2, 0.123E2, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(0.123E~2, 0.123E2, ~0.3141592653589793E1): ~0.3126463653589793E1 ~0.3126463653589793E1 +(0.123E~2, 0.123E2, ~0.2718281828459045E1): ~0.2703152828459045E1 ~0.2703152828459045E1 +(0.123E~2, 0.123E2, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(0.123E~2, 0.123E2, ~0.123): ~0.107871 ~0.107871 +(0.123E~2, 0.123E2, ~0.123E~2): 0.13899E~1 0.13899E~1 +(0.123E~2, 0.123E2, ~0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(0.123E~2, 0.123E2, ~0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(0.123E~2, 0.123E2, ~0.5E~323): 0.15129E~1 0.15129E~1 +(0.123E~2, 0.123E2, ~0.0): 0.15129E~1 0.15129E~1 +(0.123E~2, 0.3141592653589793E1, 0.123E4): 0.1230003864158964E4 0.1230003864158964E4 +(0.123E~2, 0.3141592653589793E1, 0.123E2): 0.12303864158963917E2 0.12303864158963917E2 +(0.123E~2, 0.3141592653589793E1, 0.3141592653589793E1): 0.31454568125537086E1 0.31454568125537086E1 +(0.123E~2, 0.3141592653589793E1, 0.2718281828459045E1): 0.27221459874229605E1 0.27221459874229605E1 +(0.123E~2, 0.3141592653589793E1, 0.123E1): 0.12338641589639154E1 0.12338641589639154E1 +(0.123E~2, 0.3141592653589793E1, 0.123): 0.12686415896391545 0.12686415896391545 +(0.123E~2, 0.3141592653589793E1, 0.123E~2): 0.5094158963915445E~2 0.5094158963915445E~2 +(0.123E~2, 0.3141592653589793E1, 0.22250738585072014E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.123E~2, 0.3141592653589793E1, 0.11125369292536007E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.123E~2, 0.3141592653589793E1, 0.5E~323): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.123E~2, 0.3141592653589793E1, 0.0): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.123E~2, 0.3141592653589793E1, ~0.123E4): ~0.1229996135841036E4 ~0.1229996135841036E4 +(0.123E~2, 0.3141592653589793E1, ~0.123E2): ~0.12296135841036085E2 ~0.12296135841036085E2 +(0.123E~2, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.31377284946258777E1 ~0.31377284946258777E1 +(0.123E~2, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.27144176694951296E1 ~0.27144176694951296E1 +(0.123E~2, 0.3141592653589793E1, ~0.123E1): ~0.12261358410360845E1 ~0.12261358410360845E1 +(0.123E~2, 0.3141592653589793E1, ~0.123): ~0.11913584103608456 ~0.11913584103608456 +(0.123E~2, 0.3141592653589793E1, ~0.123E~2): 0.26341589639154455E~2 0.26341589639154455E~2 +(0.123E~2, 0.3141592653589793E1, ~0.22250738585072014E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.123E~2, 0.3141592653589793E1, ~0.11125369292536007E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.123E~2, 0.3141592653589793E1, ~0.5E~323): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.123E~2, 0.3141592653589793E1, ~0.0): 0.38641589639154456E~2 0.38641589639154456E~2 +(0.123E~2, 0.2718281828459045E1, 0.123E4): 0.1230003343486649E4 0.1230003343486649E4 +(0.123E~2, 0.2718281828459045E1, 0.123E2): 0.12303343486649005E2 0.12303343486649005E2 +(0.123E~2, 0.2718281828459045E1, 0.3141592653589793E1): 0.3144936140238798E1 0.3144936140238798E1 +(0.123E~2, 0.2718281828459045E1, 0.2718281828459045E1): 0.272162531510805E1 0.272162531510805E1 +(0.123E~2, 0.2718281828459045E1, 0.123E1): 0.12333434866490045E1 0.12333434866490045E1 +(0.123E~2, 0.2718281828459045E1, 0.123): 0.12634348664900463 0.12634348664900463 +(0.123E~2, 0.2718281828459045E1, 0.123E~2): 0.4573486649004625E~2 0.4573486649004625E~2 +(0.123E~2, 0.2718281828459045E1, 0.22250738585072014E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.123E~2, 0.2718281828459045E1, 0.11125369292536007E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.123E~2, 0.2718281828459045E1, 0.5E~323): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.123E~2, 0.2718281828459045E1, 0.0): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.123E~2, 0.2718281828459045E1, ~0.123E4): ~0.1229996656513351E4 ~0.1229996656513351E4 +(0.123E~2, 0.2718281828459045E1, ~0.123E2): ~0.12296656513350996E2 ~0.12296656513350996E2 +(0.123E~2, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.31382491669407884E1 ~0.31382491669407884E1 +(0.123E~2, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.27149383418100403E1 ~0.27149383418100403E1 +(0.123E~2, 0.2718281828459045E1, ~0.123E1): ~0.12266565133509955E1 ~0.12266565133509955E1 +(0.123E~2, 0.2718281828459045E1, ~0.123): ~0.11965651335099538 ~0.11965651335099538 +(0.123E~2, 0.2718281828459045E1, ~0.123E~2): 0.21134866490046256E~2 0.21134866490046256E~2 +(0.123E~2, 0.2718281828459045E1, ~0.22250738585072014E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.123E~2, 0.2718281828459045E1, ~0.11125369292536007E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.123E~2, 0.2718281828459045E1, ~0.5E~323): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.123E~2, 0.2718281828459045E1, ~0.0): 0.33434866490046253E~2 0.33434866490046253E~2 +(0.123E~2, 0.123E1, 0.123E4): 0.12300015129E4 0.12300015129E4 +(0.123E~2, 0.123E1, 0.123E2): 0.123015129E2 0.123015129E2 +(0.123E~2, 0.123E1, 0.3141592653589793E1): 0.3143105553589793E1 0.3143105553589793E1 +(0.123E~2, 0.123E1, 0.2718281828459045E1): 0.2719794728459045E1 0.2719794728459045E1 +(0.123E~2, 0.123E1, 0.123E1): 0.12315129E1 0.12315129E1 +(0.123E~2, 0.123E1, 0.123): 0.1245129 0.1245129 +(0.123E~2, 0.123E1, 0.123E~2): 0.27429E~2 0.27429E~2 +(0.123E~2, 0.123E1, 0.22250738585072014E~307): 0.15129E~2 0.15129E~2 +(0.123E~2, 0.123E1, 0.11125369292536007E~307): 0.15129E~2 0.15129E~2 +(0.123E~2, 0.123E1, 0.5E~323): 0.15129E~2 0.15129E~2 +(0.123E~2, 0.123E1, 0.0): 0.15129E~2 0.15129E~2 +(0.123E~2, 0.123E1, ~0.123E4): ~0.12299984871E4 ~0.12299984871E4 +(0.123E~2, 0.123E1, ~0.123E2): ~0.12298487100000001E2 ~0.12298487100000001E2 +(0.123E~2, 0.123E1, ~0.3141592653589793E1): ~0.31400797535897933E1 ~0.31400797535897933E1 +(0.123E~2, 0.123E1, ~0.2718281828459045E1): ~0.27167689284590453E1 ~0.27167689284590453E1 +(0.123E~2, 0.123E1, ~0.123E1): ~0.12284871E1 ~0.12284871E1 +(0.123E~2, 0.123E1, ~0.123): ~0.1214871 ~0.1214871 +(0.123E~2, 0.123E1, ~0.123E~2): 0.2829E~3 0.2829E~3 +(0.123E~2, 0.123E1, ~0.22250738585072014E~307): 0.15129E~2 0.15129E~2 +(0.123E~2, 0.123E1, ~0.11125369292536007E~307): 0.15129E~2 0.15129E~2 +(0.123E~2, 0.123E1, ~0.5E~323): 0.15129E~2 0.15129E~2 +(0.123E~2, 0.123E1, ~0.0): 0.15129E~2 0.15129E~2 +(0.123E~2, 0.123, 0.123E4): 0.123000015129E4 0.123000015129E4 +(0.123E~2, 0.123, 0.123E2): 0.1230015129E2 0.1230015129E2 +(0.123E~2, 0.123, 0.3141592653589793E1): 0.3141743943589793E1 0.3141743943589793E1 +(0.123E~2, 0.123, 0.2718281828459045E1): 0.2718433118459045E1 0.2718433118459045E1 +(0.123E~2, 0.123, 0.123E1): 0.123015129E1 0.123015129E1 +(0.123E~2, 0.123, 0.123): 0.12315129 0.12315129 +(0.123E~2, 0.123, 0.123E~2): 0.13812899999999999E~2 0.13812899999999999E~2 +(0.123E~2, 0.123, 0.22250738585072014E~307): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, 0.11125369292536007E~307): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, 0.5E~323): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, 0.0): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, ~0.123E4): ~0.122999984871E4 ~0.122999984871E4 +(0.123E~2, 0.123, ~0.123E2): ~0.12299848710000001E2 ~0.12299848710000001E2 +(0.123E~2, 0.123, ~0.3141592653589793E1): ~0.31414413635897933E1 ~0.31414413635897933E1 +(0.123E~2, 0.123, ~0.2718281828459045E1): ~0.27181305384590453E1 ~0.27181305384590453E1 +(0.123E~2, 0.123, ~0.123E1): ~0.122984871E1 ~0.122984871E1 +(0.123E~2, 0.123, ~0.123): ~0.12284871 ~0.12284871 +(0.123E~2, 0.123, ~0.123E~2): ~0.107871E~2 ~0.107871E~2 +(0.123E~2, 0.123, ~0.22250738585072014E~307): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, ~0.11125369292536007E~307): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, ~0.5E~323): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123, ~0.0): 0.15129E~3 0.15129E~3 +(0.123E~2, 0.123E~2, 0.123E4): 0.12300000015129E4 0.12300000015129E4 +(0.123E~2, 0.123E~2, 0.123E2): 0.12300001512900002E2 0.12300001512900002E2 +(0.123E~2, 0.123E~2, 0.3141592653589793E1): 0.3141594166489793E1 0.3141594166489793E1 +(0.123E~2, 0.123E~2, 0.2718281828459045E1): 0.2718283341359045E1 0.2718283341359045E1 +(0.123E~2, 0.123E~2, 0.123E1): 0.12300015129E1 0.12300015129E1 +(0.123E~2, 0.123E~2, 0.123): 0.1230015129 0.1230015129 +(0.123E~2, 0.123E~2, 0.123E~2): 0.12315129E~2 0.12315129E~2 +(0.123E~2, 0.123E~2, 0.22250738585072014E~307): 0.15129E~5 0.15129E~5 +(0.123E~2, 0.123E~2, 0.11125369292536007E~307): 0.15129E~5 0.15129E~5 +(0.123E~2, 0.123E~2, 0.5E~323): 0.15129E~5 0.15129E~5 +(0.123E~2, 0.123E~2, 0.0): 0.15129E~5 0.15129E~5 +(0.123E~2, 0.123E~2, ~0.123E4): ~0.12299999984871E4 ~0.12299999984871E4 +(0.123E~2, 0.123E~2, ~0.123E2): ~0.122999984871E2 ~0.122999984871E2 +(0.123E~2, 0.123E~2, ~0.3141592653589793E1): ~0.3141591140689793E1 ~0.3141591140689793E1 +(0.123E~2, 0.123E~2, ~0.2718281828459045E1): ~0.2718280315559045E1 ~0.2718280315559045E1 +(0.123E~2, 0.123E~2, ~0.123E1): ~0.12299984871E1 ~0.12299984871E1 +(0.123E~2, 0.123E~2, ~0.123): ~0.1229984871 ~0.1229984871 +(0.123E~2, 0.123E~2, ~0.123E~2): ~0.12284871E~2 ~0.12284871E~2 +(0.123E~2, 0.123E~2, ~0.22250738585072014E~307): 0.15129E~5 0.15129E~5 +(0.123E~2, 0.123E~2, ~0.11125369292536007E~307): 0.15129E~5 0.15129E~5 +(0.123E~2, 0.123E~2, ~0.5E~323): 0.15129E~5 0.15129E~5 +(0.123E~2, 0.123E~2, ~0.0): 0.15129E~5 0.15129E~5 +(0.123E~2, 0.22250738585072014E~307, 0.22250738585072014E~307): 0.22278106993531654E~307 0.22278106993531654E~307 +(0.123E~2, 0.22250738585072014E~307, 0.11125369292536007E~307): 0.11152737700995647E~307 0.11152737700995647E~307 +(0.123E~2, 0.22250738585072014E~307, 0.5E~323): 0.27368408459645E~310 0.27368408459645E~310 +(0.123E~2, 0.22250738585072014E~307, 0.0): 0.2736840845964E~310 0.2736840845964E~310 +(0.123E~2, 0.22250738585072014E~307, ~0.22250738585072014E~307): ~0.22223370176612374E~307 ~0.22223370176612374E~307 +(0.123E~2, 0.22250738585072014E~307, ~0.11125369292536007E~307): ~0.11098000884076367E~307 ~0.11098000884076367E~307 +(0.123E~2, 0.22250738585072014E~307, ~0.5E~323): 0.27368408459635E~310 0.27368408459635E~310 +(0.123E~2, 0.22250738585072014E~307, ~0.0): 0.2736840845964E~310 0.2736840845964E~310 +(0.123E~2, 0.11125369292536007E~307, 0.22250738585072014E~307): 0.22264422789301834E~307 0.22264422789301834E~307 +(0.123E~2, 0.11125369292536007E~307, 0.11125369292536007E~307): 0.11139053496765827E~307 0.11139053496765827E~307 +(0.123E~2, 0.11125369292536007E~307, 0.5E~323): 0.13684204229825E~310 0.13684204229825E~310 +(0.123E~2, 0.11125369292536007E~307, 0.0): 0.1368420422982E~310 0.1368420422982E~310 +(0.123E~2, 0.11125369292536007E~307, ~0.22250738585072014E~307): ~0.22237054380842194E~307 ~0.22237054380842194E~307 +(0.123E~2, 0.11125369292536007E~307, ~0.11125369292536007E~307): ~0.11111685088306187E~307 ~0.11111685088306187E~307 +(0.123E~2, 0.11125369292536007E~307, ~0.5E~323): 0.13684204229815E~310 0.13684204229815E~310 +(0.123E~2, 0.11125369292536007E~307, ~0.0): 0.1368420422982E~310 0.1368420422982E~310 +(0.123E~2, 0.5E~323, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(0.123E~2, 0.5E~323, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(0.123E~2, 0.5E~323, 0.5E~323): 0.5E~323 0.5E~323 +(0.123E~2, 0.5E~323, 0.0): 0.0 0.0 +(0.123E~2, 0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(0.123E~2, 0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(0.123E~2, 0.5E~323, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(0.123E~2, 0.5E~323, ~0.0): 0.0 0.0 +(0.123E~2, ~0.17976931348623157E309, 0.17976931348623157E309): 0.17954819723064351E309 0.17954819723064351E309 +(0.123E~2, ~0.17976931348623157E309, 0.8988465674311579E308): 0.8966354048752772E308 0.8966354048752772E308 +(0.123E~2, ~0.17976931348623157E309, 0.123E4): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, 0.123E2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, 0.3141592653589793E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, 0.2718281828459045E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, 0.123E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, 0.123): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, 0.123E~2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, 0.22250738585072014E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, 0.11125369292536007E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, 0.5E~323): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, 0.0): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(0.123E~2, ~0.17976931348623157E309, ~0.8988465674311579E308): ~0.9010577299870385E308 ~0.9010577299870385E308 +(0.123E~2, ~0.17976931348623157E309, ~0.123E4): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, ~0.123E2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, ~0.3141592653589793E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, ~0.2718281828459045E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, ~0.123E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, ~0.123): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, ~0.123E~2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, ~0.22250738585072014E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, ~0.11125369292536007E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, ~0.5E~323): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.17976931348623157E309, ~0.0): ~0.2211162555880648E306 ~0.2211162555880648E306 +(0.123E~2, ~0.8988465674311579E308, 0.17976931348623157E309): 0.17965875535843753E309 0.17965875535843753E309 +(0.123E~2, ~0.8988465674311579E308, 0.8988465674311579E308): 0.8977409861532176E308 0.8977409861532176E308 +(0.123E~2, ~0.8988465674311579E308, 0.123E4): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, 0.123E2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, 0.3141592653589793E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, 0.2718281828459045E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, 0.123E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, 0.123): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, 0.123E~2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, 0.22250738585072014E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, 0.11125369292536007E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, 0.5E~323): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, 0.0): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(0.123E~2, ~0.8988465674311579E308, ~0.8988465674311579E308): ~0.8999521487090981E308 ~0.8999521487090981E308 +(0.123E~2, ~0.8988465674311579E308, ~0.123E4): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, ~0.123E2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, ~0.3141592653589793E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, ~0.2718281828459045E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, ~0.123E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, ~0.123): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, ~0.123E~2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, ~0.22250738585072014E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, ~0.11125369292536007E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, ~0.5E~323): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.8988465674311579E308, ~0.0): ~0.1105581277940324E306 ~0.1105581277940324E306 +(0.123E~2, ~0.123E4, 0.123E4): 0.12284871E4 0.12284871E4 +(0.123E~2, ~0.123E4, 0.123E2): 0.107871E2 0.107871E2 +(0.123E~2, ~0.123E4, 0.3141592653589793E1): 0.16286926535897932E1 0.16286926535897932E1 +(0.123E~2, ~0.123E4, 0.2718281828459045E1): 0.12053818284590452E1 0.12053818284590452E1 +(0.123E~2, ~0.123E4, 0.123E1): ~0.2829 ~0.2829 +(0.123E~2, ~0.123E4, 0.123): ~0.13899E1 ~0.13899E1 +(0.123E~2, ~0.123E4, 0.123E~2): ~0.151167E1 ~0.151167E1 +(0.123E~2, ~0.123E4, 0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(0.123E~2, ~0.123E4, 0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(0.123E~2, ~0.123E4, 0.5E~323): ~0.15129E1 ~0.15129E1 +(0.123E~2, ~0.123E4, 0.0): ~0.15129E1 ~0.15129E1 +(0.123E~2, ~0.123E4, ~0.123E4): ~0.12315129E4 ~0.12315129E4 +(0.123E~2, ~0.123E4, ~0.123E2): ~0.138129E2 ~0.138129E2 +(0.123E~2, ~0.123E4, ~0.3141592653589793E1): ~0.4654492653589793E1 ~0.4654492653589793E1 +(0.123E~2, ~0.123E4, ~0.2718281828459045E1): ~0.4231181828459045E1 ~0.4231181828459045E1 +(0.123E~2, ~0.123E4, ~0.123E1): ~0.27429E1 ~0.27429E1 +(0.123E~2, ~0.123E4, ~0.123): ~0.16359E1 ~0.16359E1 +(0.123E~2, ~0.123E4, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(0.123E~2, ~0.123E4, ~0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(0.123E~2, ~0.123E4, ~0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(0.123E~2, ~0.123E4, ~0.5E~323): ~0.15129E1 ~0.15129E1 +(0.123E~2, ~0.123E4, ~0.0): ~0.15129E1 ~0.15129E1 +(0.123E~2, ~0.123E2, 0.123E4): 0.1229984871E4 0.1229984871E4 +(0.123E~2, ~0.123E2, 0.123E2): 0.12284871E2 0.12284871E2 +(0.123E~2, ~0.123E2, 0.3141592653589793E1): 0.3126463653589793E1 0.3126463653589793E1 +(0.123E~2, ~0.123E2, 0.2718281828459045E1): 0.2703152828459045E1 0.2703152828459045E1 +(0.123E~2, ~0.123E2, 0.123E1): 0.1214871E1 0.1214871E1 +(0.123E~2, ~0.123E2, 0.123): 0.107871 0.107871 +(0.123E~2, ~0.123E2, 0.123E~2): ~0.13899E~1 ~0.13899E~1 +(0.123E~2, ~0.123E2, 0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(0.123E~2, ~0.123E2, 0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(0.123E~2, ~0.123E2, 0.5E~323): ~0.15129E~1 ~0.15129E~1 +(0.123E~2, ~0.123E2, 0.0): ~0.15129E~1 ~0.15129E~1 +(0.123E~2, ~0.123E2, ~0.123E4): ~0.1230015129E4 ~0.1230015129E4 +(0.123E~2, ~0.123E2, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(0.123E~2, ~0.123E2, ~0.3141592653589793E1): ~0.3156721653589793E1 ~0.3156721653589793E1 +(0.123E~2, ~0.123E2, ~0.2718281828459045E1): ~0.2733410828459045E1 ~0.2733410828459045E1 +(0.123E~2, ~0.123E2, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(0.123E~2, ~0.123E2, ~0.123): ~0.138129 ~0.138129 +(0.123E~2, ~0.123E2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359000000000002E~1 +(0.123E~2, ~0.123E2, ~0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(0.123E~2, ~0.123E2, ~0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(0.123E~2, ~0.123E2, ~0.5E~323): ~0.15129E~1 ~0.15129E~1 +(0.123E~2, ~0.123E2, ~0.0): ~0.15129E~1 ~0.15129E~1 +(0.123E~2, ~0.3141592653589793E1, 0.123E4): 0.1229996135841036E4 0.1229996135841036E4 +(0.123E~2, ~0.3141592653589793E1, 0.123E2): 0.12296135841036085E2 0.12296135841036085E2 +(0.123E~2, ~0.3141592653589793E1, 0.3141592653589793E1): 0.31377284946258777E1 0.31377284946258777E1 +(0.123E~2, ~0.3141592653589793E1, 0.2718281828459045E1): 0.27144176694951296E1 0.27144176694951296E1 +(0.123E~2, ~0.3141592653589793E1, 0.123E1): 0.12261358410360845E1 0.12261358410360845E1 +(0.123E~2, ~0.3141592653589793E1, 0.123): 0.11913584103608456 0.11913584103608456 +(0.123E~2, ~0.3141592653589793E1, 0.123E~2): ~0.26341589639154455E~2 ~0.26341589639154455E~2 +(0.123E~2, ~0.3141592653589793E1, 0.22250738585072014E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.123E~2, ~0.3141592653589793E1, 0.11125369292536007E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.123E~2, ~0.3141592653589793E1, 0.5E~323): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.123E~2, ~0.3141592653589793E1, 0.0): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.123E~2, ~0.3141592653589793E1, ~0.123E4): ~0.1230003864158964E4 ~0.1230003864158964E4 +(0.123E~2, ~0.3141592653589793E1, ~0.123E2): ~0.12303864158963917E2 ~0.12303864158963917E2 +(0.123E~2, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.31454568125537086E1 ~0.31454568125537086E1 +(0.123E~2, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.27221459874229605E1 ~0.27221459874229605E1 +(0.123E~2, ~0.3141592653589793E1, ~0.123E1): ~0.12338641589639154E1 ~0.12338641589639154E1 +(0.123E~2, ~0.3141592653589793E1, ~0.123): ~0.12686415896391545 ~0.12686415896391545 +(0.123E~2, ~0.3141592653589793E1, ~0.123E~2): ~0.5094158963915445E~2 ~0.5094158963915445E~2 +(0.123E~2, ~0.3141592653589793E1, ~0.22250738585072014E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.123E~2, ~0.3141592653589793E1, ~0.11125369292536007E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.123E~2, ~0.3141592653589793E1, ~0.5E~323): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.123E~2, ~0.3141592653589793E1, ~0.0): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(0.123E~2, ~0.2718281828459045E1, 0.123E4): 0.1229996656513351E4 0.1229996656513351E4 +(0.123E~2, ~0.2718281828459045E1, 0.123E2): 0.12296656513350996E2 0.12296656513350996E2 +(0.123E~2, ~0.2718281828459045E1, 0.3141592653589793E1): 0.31382491669407884E1 0.31382491669407884E1 +(0.123E~2, ~0.2718281828459045E1, 0.2718281828459045E1): 0.27149383418100403E1 0.27149383418100403E1 +(0.123E~2, ~0.2718281828459045E1, 0.123E1): 0.12266565133509955E1 0.12266565133509955E1 +(0.123E~2, ~0.2718281828459045E1, 0.123): 0.11965651335099538 0.11965651335099538 +(0.123E~2, ~0.2718281828459045E1, 0.123E~2): ~0.21134866490046256E~2 ~0.21134866490046256E~2 +(0.123E~2, ~0.2718281828459045E1, 0.22250738585072014E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.123E~2, ~0.2718281828459045E1, 0.11125369292536007E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.123E~2, ~0.2718281828459045E1, 0.5E~323): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.123E~2, ~0.2718281828459045E1, 0.0): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.123E~2, ~0.2718281828459045E1, ~0.123E4): ~0.1230003343486649E4 ~0.1230003343486649E4 +(0.123E~2, ~0.2718281828459045E1, ~0.123E2): ~0.12303343486649005E2 ~0.12303343486649005E2 +(0.123E~2, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.3144936140238798E1 ~0.3144936140238798E1 +(0.123E~2, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.272162531510805E1 ~0.272162531510805E1 +(0.123E~2, ~0.2718281828459045E1, ~0.123E1): ~0.12333434866490045E1 ~0.12333434866490045E1 +(0.123E~2, ~0.2718281828459045E1, ~0.123): ~0.12634348664900463 ~0.12634348664900463 +(0.123E~2, ~0.2718281828459045E1, ~0.123E~2): ~0.4573486649004625E~2 ~0.4573486649004625E~2 +(0.123E~2, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.123E~2, ~0.2718281828459045E1, ~0.11125369292536007E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.123E~2, ~0.2718281828459045E1, ~0.5E~323): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.123E~2, ~0.2718281828459045E1, ~0.0): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(0.123E~2, ~0.123E1, 0.123E4): 0.12299984871E4 0.12299984871E4 +(0.123E~2, ~0.123E1, 0.123E2): 0.12298487100000001E2 0.12298487100000001E2 +(0.123E~2, ~0.123E1, 0.3141592653589793E1): 0.31400797535897933E1 0.31400797535897933E1 +(0.123E~2, ~0.123E1, 0.2718281828459045E1): 0.27167689284590453E1 0.27167689284590453E1 +(0.123E~2, ~0.123E1, 0.123E1): 0.12284871E1 0.12284871E1 +(0.123E~2, ~0.123E1, 0.123): 0.1214871 0.1214871 +(0.123E~2, ~0.123E1, 0.123E~2): ~0.2829E~3 ~0.2829E~3 +(0.123E~2, ~0.123E1, 0.22250738585072014E~307): ~0.15129E~2 ~0.15129E~2 +(0.123E~2, ~0.123E1, 0.11125369292536007E~307): ~0.15129E~2 ~0.15129E~2 +(0.123E~2, ~0.123E1, 0.5E~323): ~0.15129E~2 ~0.15129E~2 +(0.123E~2, ~0.123E1, 0.0): ~0.15129E~2 ~0.15129E~2 +(0.123E~2, ~0.123E1, ~0.123E4): ~0.12300015129E4 ~0.12300015129E4 +(0.123E~2, ~0.123E1, ~0.123E2): ~0.123015129E2 ~0.123015129E2 +(0.123E~2, ~0.123E1, ~0.3141592653589793E1): ~0.3143105553589793E1 ~0.3143105553589793E1 +(0.123E~2, ~0.123E1, ~0.2718281828459045E1): ~0.2719794728459045E1 ~0.2719794728459045E1 +(0.123E~2, ~0.123E1, ~0.123E1): ~0.12315129E1 ~0.12315129E1 +(0.123E~2, ~0.123E1, ~0.123): ~0.1245129 ~0.1245129 +(0.123E~2, ~0.123E1, ~0.123E~2): ~0.27429E~2 ~0.27429E~2 +(0.123E~2, ~0.123E1, ~0.22250738585072014E~307): ~0.15129E~2 ~0.15129E~2 +(0.123E~2, ~0.123E1, ~0.11125369292536007E~307): ~0.15129E~2 ~0.15129E~2 +(0.123E~2, ~0.123E1, ~0.5E~323): ~0.15129E~2 ~0.15129E~2 +(0.123E~2, ~0.123E1, ~0.0): ~0.15129E~2 ~0.15129E~2 +(0.123E~2, ~0.123, 0.123E4): 0.122999984871E4 0.122999984871E4 +(0.123E~2, ~0.123, 0.123E2): 0.12299848710000001E2 0.12299848710000001E2 +(0.123E~2, ~0.123, 0.3141592653589793E1): 0.31414413635897933E1 0.31414413635897933E1 +(0.123E~2, ~0.123, 0.2718281828459045E1): 0.27181305384590453E1 0.27181305384590453E1 +(0.123E~2, ~0.123, 0.123E1): 0.122984871E1 0.122984871E1 +(0.123E~2, ~0.123, 0.123): 0.12284871 0.12284871 +(0.123E~2, ~0.123, 0.123E~2): 0.107871E~2 0.107871E~2 +(0.123E~2, ~0.123, 0.22250738585072014E~307): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, 0.11125369292536007E~307): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, 0.5E~323): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, 0.0): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, ~0.123E4): ~0.123000015129E4 ~0.123000015129E4 +(0.123E~2, ~0.123, ~0.123E2): ~0.1230015129E2 ~0.1230015129E2 +(0.123E~2, ~0.123, ~0.3141592653589793E1): ~0.3141743943589793E1 ~0.3141743943589793E1 +(0.123E~2, ~0.123, ~0.2718281828459045E1): ~0.2718433118459045E1 ~0.2718433118459045E1 +(0.123E~2, ~0.123, ~0.123E1): ~0.123015129E1 ~0.123015129E1 +(0.123E~2, ~0.123, ~0.123): ~0.12315129 ~0.12315129 +(0.123E~2, ~0.123, ~0.123E~2): ~0.13812899999999999E~2 ~0.13812899999999999E~2 +(0.123E~2, ~0.123, ~0.22250738585072014E~307): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, ~0.11125369292536007E~307): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, ~0.5E~323): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123, ~0.0): ~0.15129E~3 ~0.15129E~3 +(0.123E~2, ~0.123E~2, 0.123E4): 0.12299999984871E4 0.12299999984871E4 +(0.123E~2, ~0.123E~2, 0.123E2): 0.122999984871E2 0.122999984871E2 +(0.123E~2, ~0.123E~2, 0.3141592653589793E1): 0.3141591140689793E1 0.3141591140689793E1 +(0.123E~2, ~0.123E~2, 0.2718281828459045E1): 0.2718280315559045E1 0.2718280315559045E1 +(0.123E~2, ~0.123E~2, 0.123E1): 0.12299984871E1 0.12299984871E1 +(0.123E~2, ~0.123E~2, 0.123): 0.1229984871 0.1229984871 +(0.123E~2, ~0.123E~2, 0.123E~2): 0.12284871E~2 0.12284871E~2 +(0.123E~2, ~0.123E~2, 0.22250738585072014E~307): ~0.15129E~5 ~0.15129E~5 +(0.123E~2, ~0.123E~2, 0.11125369292536007E~307): ~0.15129E~5 ~0.15129E~5 +(0.123E~2, ~0.123E~2, 0.5E~323): ~0.15129E~5 ~0.15129E~5 +(0.123E~2, ~0.123E~2, 0.0): ~0.15129E~5 ~0.15129E~5 +(0.123E~2, ~0.123E~2, ~0.123E4): ~0.12300000015129E4 ~0.12300000015129E4 +(0.123E~2, ~0.123E~2, ~0.123E2): ~0.12300001512900002E2 ~0.12300001512900002E2 +(0.123E~2, ~0.123E~2, ~0.3141592653589793E1): ~0.3141594166489793E1 ~0.3141594166489793E1 +(0.123E~2, ~0.123E~2, ~0.2718281828459045E1): ~0.2718283341359045E1 ~0.2718283341359045E1 +(0.123E~2, ~0.123E~2, ~0.123E1): ~0.12300015129E1 ~0.12300015129E1 +(0.123E~2, ~0.123E~2, ~0.123): ~0.1230015129 ~0.1230015129 +(0.123E~2, ~0.123E~2, ~0.123E~2): ~0.12315129E~2 ~0.12315129E~2 +(0.123E~2, ~0.123E~2, ~0.22250738585072014E~307): ~0.15129E~5 ~0.15129E~5 +(0.123E~2, ~0.123E~2, ~0.11125369292536007E~307): ~0.15129E~5 ~0.15129E~5 +(0.123E~2, ~0.123E~2, ~0.5E~323): ~0.15129E~5 ~0.15129E~5 +(0.123E~2, ~0.123E~2, ~0.0): ~0.15129E~5 ~0.15129E~5 +(0.123E~2, ~0.22250738585072014E~307, 0.22250738585072014E~307): 0.22223370176612374E~307 0.22223370176612374E~307 +(0.123E~2, ~0.22250738585072014E~307, 0.11125369292536007E~307): 0.11098000884076367E~307 0.11098000884076367E~307 +(0.123E~2, ~0.22250738585072014E~307, 0.5E~323): ~0.27368408459635E~310 ~0.27368408459635E~310 +(0.123E~2, ~0.22250738585072014E~307, 0.0): ~0.2736840845964E~310 ~0.2736840845964E~310 +(0.123E~2, ~0.22250738585072014E~307, ~0.22250738585072014E~307): ~0.22278106993531654E~307 ~0.22278106993531654E~307 +(0.123E~2, ~0.22250738585072014E~307, ~0.11125369292536007E~307): ~0.11152737700995647E~307 ~0.11152737700995647E~307 +(0.123E~2, ~0.22250738585072014E~307, ~0.5E~323): ~0.27368408459645E~310 ~0.27368408459645E~310 +(0.123E~2, ~0.22250738585072014E~307, ~0.0): ~0.2736840845964E~310 ~0.2736840845964E~310 +(0.123E~2, ~0.11125369292536007E~307, 0.22250738585072014E~307): 0.22237054380842194E~307 0.22237054380842194E~307 +(0.123E~2, ~0.11125369292536007E~307, 0.11125369292536007E~307): 0.11111685088306187E~307 0.11111685088306187E~307 +(0.123E~2, ~0.11125369292536007E~307, 0.5E~323): ~0.13684204229815E~310 ~0.13684204229815E~310 +(0.123E~2, ~0.11125369292536007E~307, 0.0): ~0.1368420422982E~310 ~0.1368420422982E~310 +(0.123E~2, ~0.11125369292536007E~307, ~0.22250738585072014E~307): ~0.22264422789301834E~307 ~0.22264422789301834E~307 +(0.123E~2, ~0.11125369292536007E~307, ~0.11125369292536007E~307): ~0.11139053496765827E~307 ~0.11139053496765827E~307 +(0.123E~2, ~0.11125369292536007E~307, ~0.5E~323): ~0.13684204229825E~310 ~0.13684204229825E~310 +(0.123E~2, ~0.11125369292536007E~307, ~0.0): ~0.1368420422982E~310 ~0.1368420422982E~310 +(0.123E~2, ~0.5E~323, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(0.123E~2, ~0.5E~323, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(0.123E~2, ~0.5E~323, 0.5E~323): 0.5E~323 0.5E~323 +(0.123E~2, ~0.5E~323, 0.0): ~0.0 ~0.0 +(0.123E~2, ~0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(0.123E~2, ~0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(0.123E~2, ~0.5E~323, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(0.123E~2, ~0.5E~323, ~0.0): ~0.0 ~0.0 +(0.22250738585072014E~307, 0.17976931348623157E309, 0.123E4): 0.1234E4 0.1234E4 +(0.22250738585072014E~307, 0.17976931348623157E309, 0.123E2): 0.163E2 0.163E2 +(0.22250738585072014E~307, 0.17976931348623157E309, 0.3141592653589793E1): 0.7141592653589793E1 0.7141592653589793E1 +(0.22250738585072014E~307, 0.17976931348623157E309, 0.123): 0.4122999999999999E1 0.4122999999999999E1 +(0.22250738585072014E~307, 0.17976931348623157E309, 0.123E~2): 0.400123E1 0.400123E1 +(0.22250738585072014E~307, 0.17976931348623157E309, ~0.123E4): ~0.1226E4 ~0.1226E4 +(0.22250738585072014E~307, 0.17976931348623157E309, ~0.123E2): ~0.83E1 ~0.83E1 +(0.22250738585072014E~307, 0.17976931348623157E309, ~0.123): 0.3877E1 0.3877E1 +(0.22250738585072014E~307, 0.17976931348623157E309, ~0.123E~2): 0.39987699999999995E1 0.39987699999999995E1 +(0.22250738585072014E~307, 0.8988465674311579E308, 0.123E4): 0.1232E4 0.1232E4 +(0.22250738585072014E~307, 0.8988465674311579E308, 0.123E2): 0.143E2 0.143E2 +(0.22250738585072014E~307, 0.8988465674311579E308, 0.3141592653589793E1): 0.5141592653589793E1 0.5141592653589793E1 +(0.22250738585072014E~307, 0.8988465674311579E308, 0.2718281828459045E1): 0.4718281828459045E1 0.4718281828459045E1 +(0.22250738585072014E~307, 0.8988465674311579E308, 0.123E1): 0.32299999999999995E1 0.32299999999999995E1 +(0.22250738585072014E~307, 0.8988465674311579E308, 0.123E~2): 0.20012299999999996E1 0.20012299999999996E1 +(0.22250738585072014E~307, 0.8988465674311579E308, ~0.123E4): ~0.1228E4 ~0.1228E4 +(0.22250738585072014E~307, 0.8988465674311579E308, ~0.123E2): ~0.103E2 ~0.103E2 +(0.22250738585072014E~307, 0.8988465674311579E308, ~0.123E~2): 0.19987699999999997E1 0.19987699999999997E1 +(0.22250738585072014E~307, 0.123E4, 0.5E~323): 0.27368408459638577E~304 0.27368408459638577E~304 +(0.22250738585072014E~307, 0.123E4, ~0.5E~323): 0.27368408459638577E~304 0.27368408459638577E~304 +(0.22250738585072014E~307, 0.123E2, 0.5E~323): 0.2736840845963858E~306 0.2736840845963858E~306 +(0.22250738585072014E~307, 0.123E2, ~0.5E~323): 0.2736840845963858E~306 0.2736840845963858E~306 +(0.22250738585072014E~307, 0.3141592653589793E1, 0.5E~323): 0.6990275687580919E~307 0.6990275687580919E~307 +(0.22250738585072014E~307, 0.3141592653589793E1, ~0.5E~323): 0.6990275687580919E~307 0.6990275687580919E~307 +(0.22250738585072014E~307, 0.2718281828459045E1, 0.5E~323): 0.6048377836559379E~307 0.6048377836559379E~307 +(0.22250738585072014E~307, 0.2718281828459045E1, ~0.5E~323): 0.6048377836559377E~307 0.6048377836559377E~307 +(0.22250738585072014E~307, 0.123E~2, 0.22250738585072014E~307): 0.22278106993531654E~307 0.22278106993531654E~307 +(0.22250738585072014E~307, 0.123E~2, 0.11125369292536007E~307): 0.11152737700995647E~307 0.11152737700995647E~307 +(0.22250738585072014E~307, 0.123E~2, 0.5E~323): 0.27368408459645E~310 0.27368408459645E~310 +(0.22250738585072014E~307, 0.123E~2, 0.0): 0.2736840845964E~310 0.2736840845964E~310 +(0.22250738585072014E~307, 0.123E~2, ~0.22250738585072014E~307): ~0.22223370176612374E~307 ~0.22223370176612374E~307 +(0.22250738585072014E~307, 0.123E~2, ~0.11125369292536007E~307): ~0.11098000884076367E~307 ~0.11098000884076367E~307 +(0.22250738585072014E~307, 0.123E~2, ~0.5E~323): 0.27368408459635E~310 0.27368408459635E~310 +(0.22250738585072014E~307, 0.123E~2, ~0.0): 0.2736840845964E~310 0.2736840845964E~310 +(0.22250738585072014E~307, 0.22250738585072014E~307, 0.0): 0.0 0.0 +(0.22250738585072014E~307, 0.22250738585072014E~307, ~0.0): 0.0 0.0 +(0.22250738585072014E~307, 0.11125369292536007E~307, 0.0): 0.0 0.0 +(0.22250738585072014E~307, 0.11125369292536007E~307, ~0.0): 0.0 0.0 +(0.22250738585072014E~307, 0.5E~323, 0.0): 0.0 0.0 +(0.22250738585072014E~307, 0.5E~323, ~0.0): 0.0 0.0 +(0.22250738585072014E~307, ~0.17976931348623157E309, 0.123E4): 0.1226E4 0.1226E4 +(0.22250738585072014E~307, ~0.17976931348623157E309, 0.123E2): 0.83E1 0.83E1 +(0.22250738585072014E~307, ~0.17976931348623157E309, 0.123): ~0.3877E1 ~0.3877E1 +(0.22250738585072014E~307, ~0.17976931348623157E309, 0.123E~2): ~0.39987699999999995E1 ~0.39987699999999995E1 +(0.22250738585072014E~307, ~0.17976931348623157E309, ~0.123E4): ~0.1234E4 ~0.1234E4 +(0.22250738585072014E~307, ~0.17976931348623157E309, ~0.123E2): ~0.163E2 ~0.163E2 +(0.22250738585072014E~307, ~0.17976931348623157E309, ~0.3141592653589793E1): ~0.7141592653589793E1 ~0.7141592653589793E1 +(0.22250738585072014E~307, ~0.17976931348623157E309, ~0.123): ~0.4122999999999999E1 ~0.4122999999999999E1 +(0.22250738585072014E~307, ~0.17976931348623157E309, ~0.123E~2): ~0.400123E1 ~0.400123E1 +(0.22250738585072014E~307, ~0.8988465674311579E308, 0.123E4): 0.1228E4 0.1228E4 +(0.22250738585072014E~307, ~0.8988465674311579E308, 0.123E2): 0.103E2 0.103E2 +(0.22250738585072014E~307, ~0.8988465674311579E308, 0.123E~2): ~0.19987699999999997E1 ~0.19987699999999997E1 +(0.22250738585072014E~307, ~0.8988465674311579E308, ~0.123E4): ~0.1232E4 ~0.1232E4 +(0.22250738585072014E~307, ~0.8988465674311579E308, ~0.123E2): ~0.143E2 ~0.143E2 +(0.22250738585072014E~307, ~0.8988465674311579E308, ~0.3141592653589793E1): ~0.5141592653589793E1 ~0.5141592653589793E1 +(0.22250738585072014E~307, ~0.8988465674311579E308, ~0.2718281828459045E1): ~0.4718281828459045E1 ~0.4718281828459045E1 +(0.22250738585072014E~307, ~0.8988465674311579E308, ~0.123E1): ~0.32299999999999995E1 ~0.32299999999999995E1 +(0.22250738585072014E~307, ~0.8988465674311579E308, ~0.123E~2): ~0.20012299999999996E1 ~0.20012299999999996E1 +(0.22250738585072014E~307, ~0.123E4, 0.5E~323): ~0.27368408459638577E~304 ~0.27368408459638577E~304 +(0.22250738585072014E~307, ~0.123E4, ~0.5E~323): ~0.27368408459638577E~304 ~0.27368408459638577E~304 +(0.22250738585072014E~307, ~0.123E2, 0.5E~323): ~0.2736840845963858E~306 ~0.2736840845963858E~306 +(0.22250738585072014E~307, ~0.123E2, ~0.5E~323): ~0.2736840845963858E~306 ~0.2736840845963858E~306 +(0.22250738585072014E~307, ~0.3141592653589793E1, 0.5E~323): ~0.6990275687580919E~307 ~0.6990275687580919E~307 +(0.22250738585072014E~307, ~0.3141592653589793E1, ~0.5E~323): ~0.6990275687580919E~307 ~0.6990275687580919E~307 +(0.22250738585072014E~307, ~0.2718281828459045E1, 0.5E~323): ~0.6048377836559377E~307 ~0.6048377836559377E~307 +(0.22250738585072014E~307, ~0.2718281828459045E1, ~0.5E~323): ~0.6048377836559379E~307 ~0.6048377836559379E~307 +(0.22250738585072014E~307, ~0.123E~2, 0.22250738585072014E~307): 0.22223370176612374E~307 0.22223370176612374E~307 +(0.22250738585072014E~307, ~0.123E~2, 0.11125369292536007E~307): 0.11098000884076367E~307 0.11098000884076367E~307 +(0.22250738585072014E~307, ~0.123E~2, 0.5E~323): ~0.27368408459635E~310 ~0.27368408459635E~310 +(0.22250738585072014E~307, ~0.123E~2, 0.0): ~0.2736840845964E~310 ~0.2736840845964E~310 +(0.22250738585072014E~307, ~0.123E~2, ~0.22250738585072014E~307): ~0.22278106993531654E~307 ~0.22278106993531654E~307 +(0.22250738585072014E~307, ~0.123E~2, ~0.11125369292536007E~307): ~0.11152737700995647E~307 ~0.11152737700995647E~307 +(0.22250738585072014E~307, ~0.123E~2, ~0.5E~323): ~0.27368408459645E~310 ~0.27368408459645E~310 +(0.22250738585072014E~307, ~0.123E~2, ~0.0): ~0.2736840845964E~310 ~0.2736840845964E~310 +(0.22250738585072014E~307, ~0.22250738585072014E~307, 0.0): ~0.0 ~0.0 +(0.22250738585072014E~307, ~0.22250738585072014E~307, ~0.0): ~0.0 ~0.0 +(0.22250738585072014E~307, ~0.11125369292536007E~307, 0.0): ~0.0 ~0.0 +(0.22250738585072014E~307, ~0.11125369292536007E~307, ~0.0): ~0.0 ~0.0 +(0.22250738585072014E~307, ~0.5E~323, 0.0): ~0.0 ~0.0 +(0.22250738585072014E~307, ~0.5E~323, ~0.0): ~0.0 ~0.0 +(0.11125369292536007E~307, 0.17976931348623157E309, 0.123E4): 0.1232E4 0.1232E4 +(0.11125369292536007E~307, 0.17976931348623157E309, 0.123E2): 0.143E2 0.143E2 +(0.11125369292536007E~307, 0.17976931348623157E309, 0.3141592653589793E1): 0.5141592653589793E1 0.5141592653589793E1 +(0.11125369292536007E~307, 0.17976931348623157E309, 0.2718281828459045E1): 0.4718281828459045E1 0.4718281828459045E1 +(0.11125369292536007E~307, 0.17976931348623157E309, 0.123E1): 0.32299999999999995E1 0.32299999999999995E1 +(0.11125369292536007E~307, 0.17976931348623157E309, 0.123E~2): 0.20012299999999996E1 0.20012299999999996E1 +(0.11125369292536007E~307, 0.17976931348623157E309, ~0.123E4): ~0.1228E4 ~0.1228E4 +(0.11125369292536007E~307, 0.17976931348623157E309, ~0.123E2): ~0.103E2 ~0.103E2 +(0.11125369292536007E~307, 0.17976931348623157E309, ~0.123E~2): 0.19987699999999997E1 0.19987699999999997E1 +(0.11125369292536007E~307, 0.8988465674311579E308, 0.123E4): 0.1231E4 0.1231E4 +(0.11125369292536007E~307, 0.8988465674311579E308, 0.123E2): 0.133E2 0.133E2 +(0.11125369292536007E~307, 0.8988465674311579E308, 0.3141592653589793E1): 0.4141592653589793E1 0.4141592653589793E1 +(0.11125369292536007E~307, 0.8988465674311579E308, 0.2718281828459045E1): 0.3718281828459045E1 0.3718281828459045E1 +(0.11125369292536007E~307, 0.8988465674311579E308, 0.123E1): 0.223E1 0.223E1 +(0.11125369292536007E~307, 0.8988465674311579E308, 0.123): 0.11229999999999998E1 0.11229999999999998E1 +(0.11125369292536007E~307, 0.8988465674311579E308, 0.123E~2): 0.10012299999999998E1 0.10012299999999998E1 +(0.11125369292536007E~307, 0.8988465674311579E308, ~0.123E4): ~0.1229E4 ~0.1229E4 +(0.11125369292536007E~307, 0.8988465674311579E308, ~0.123E2): ~0.113E2 ~0.113E2 +(0.11125369292536007E~307, 0.8988465674311579E308, ~0.3141592653589793E1): ~0.2141592653589793E1 ~0.2141592653589793E1 +(0.11125369292536007E~307, 0.8988465674311579E308, ~0.2718281828459045E1): ~0.1718281828459045E1 ~0.1718281828459045E1 +(0.11125369292536007E~307, 0.8988465674311579E308, ~0.123E~2): 0.9987699999999999 0.9987699999999999 +(0.11125369292536007E~307, 0.123E4, 0.5E~323): 0.13684204229819289E~304 0.13684204229819289E~304 +(0.11125369292536007E~307, 0.123E4, ~0.5E~323): 0.13684204229819289E~304 0.13684204229819289E~304 +(0.11125369292536007E~307, 0.123E2, 0.5E~323): 0.1368420422981929E~306 0.1368420422981929E~306 +(0.11125369292536007E~307, 0.123E2, ~0.5E~323): 0.1368420422981929E~306 0.1368420422981929E~306 +(0.11125369292536007E~307, 0.2718281828459045E1, 0.22250738585072014E~307): 0.524926277678689E~307 0.524926277678689E~307 +(0.11125369292536007E~307, 0.123, 0.22250738585072014E~307): 0.23619159008053945E~307 0.23619159008053945E~307 +(0.11125369292536007E~307, 0.123, 0.11125369292536007E~307): 0.1249378971551794E~307 0.1249378971551794E~307 +(0.11125369292536007E~307, 0.123, 0.5E~323): 0.136842042298193E~308 0.136842042298193E~308 +(0.11125369292536007E~307, 0.123, 0.0): 0.136842042298193E~308 0.136842042298193E~308 +(0.11125369292536007E~307, 0.123, ~0.22250738585072014E~307): ~0.20882318162090083E~307 ~0.20882318162090083E~307 +(0.11125369292536007E~307, 0.123, ~0.11125369292536007E~307): ~0.9756948869554076E~308 ~0.9756948869554076E~308 +(0.11125369292536007E~307, 0.123, ~0.5E~323): 0.136842042298192E~308 0.136842042298192E~308 +(0.11125369292536007E~307, 0.123, ~0.0): 0.136842042298193E~308 0.136842042298193E~308 +(0.11125369292536007E~307, 0.123E~2, 0.22250738585072014E~307): 0.22264422789301834E~307 0.22264422789301834E~307 +(0.11125369292536007E~307, 0.123E~2, 0.11125369292536007E~307): 0.11139053496765827E~307 0.11139053496765827E~307 +(0.11125369292536007E~307, 0.123E~2, 0.5E~323): 0.13684204229825E~310 0.13684204229825E~310 +(0.11125369292536007E~307, 0.123E~2, 0.0): 0.1368420422982E~310 0.1368420422982E~310 +(0.11125369292536007E~307, 0.123E~2, ~0.22250738585072014E~307): ~0.22237054380842194E~307 ~0.22237054380842194E~307 +(0.11125369292536007E~307, 0.123E~2, ~0.11125369292536007E~307): ~0.11111685088306187E~307 ~0.11111685088306187E~307 +(0.11125369292536007E~307, 0.123E~2, ~0.5E~323): 0.13684204229815E~310 0.13684204229815E~310 +(0.11125369292536007E~307, 0.123E~2, ~0.0): 0.1368420422982E~310 0.1368420422982E~310 +(0.11125369292536007E~307, 0.22250738585072014E~307, 0.0): 0.0 0.0 +(0.11125369292536007E~307, 0.22250738585072014E~307, ~0.0): 0.0 0.0 +(0.11125369292536007E~307, 0.11125369292536007E~307, 0.0): 0.0 0.0 +(0.11125369292536007E~307, 0.11125369292536007E~307, ~0.0): 0.0 0.0 +(0.11125369292536007E~307, 0.5E~323, 0.0): 0.0 0.0 +(0.11125369292536007E~307, 0.5E~323, ~0.0): 0.0 0.0 +(0.11125369292536007E~307, ~0.17976931348623157E309, 0.123E4): 0.1228E4 0.1228E4 +(0.11125369292536007E~307, ~0.17976931348623157E309, 0.123E2): 0.103E2 0.103E2 +(0.11125369292536007E~307, ~0.17976931348623157E309, 0.123E~2): ~0.19987699999999997E1 ~0.19987699999999997E1 +(0.11125369292536007E~307, ~0.17976931348623157E309, ~0.123E4): ~0.1232E4 ~0.1232E4 +(0.11125369292536007E~307, ~0.17976931348623157E309, ~0.123E2): ~0.143E2 ~0.143E2 +(0.11125369292536007E~307, ~0.17976931348623157E309, ~0.3141592653589793E1): ~0.5141592653589793E1 ~0.5141592653589793E1 +(0.11125369292536007E~307, ~0.17976931348623157E309, ~0.2718281828459045E1): ~0.4718281828459045E1 ~0.4718281828459045E1 +(0.11125369292536007E~307, ~0.17976931348623157E309, ~0.123E1): ~0.32299999999999995E1 ~0.32299999999999995E1 +(0.11125369292536007E~307, ~0.17976931348623157E309, ~0.123E~2): ~0.20012299999999996E1 ~0.20012299999999996E1 +(0.11125369292536007E~307, ~0.8988465674311579E308, 0.123E4): 0.1229E4 0.1229E4 +(0.11125369292536007E~307, ~0.8988465674311579E308, 0.123E2): 0.113E2 0.113E2 +(0.11125369292536007E~307, ~0.8988465674311579E308, 0.3141592653589793E1): 0.2141592653589793E1 0.2141592653589793E1 +(0.11125369292536007E~307, ~0.8988465674311579E308, 0.2718281828459045E1): 0.1718281828459045E1 0.1718281828459045E1 +(0.11125369292536007E~307, ~0.8988465674311579E308, 0.123E~2): ~0.9987699999999999 ~0.9987699999999999 +(0.11125369292536007E~307, ~0.8988465674311579E308, ~0.123E4): ~0.1231E4 ~0.1231E4 +(0.11125369292536007E~307, ~0.8988465674311579E308, ~0.123E2): ~0.133E2 ~0.133E2 +(0.11125369292536007E~307, ~0.8988465674311579E308, ~0.3141592653589793E1): ~0.4141592653589793E1 ~0.4141592653589793E1 +(0.11125369292536007E~307, ~0.8988465674311579E308, ~0.2718281828459045E1): ~0.3718281828459045E1 ~0.3718281828459045E1 +(0.11125369292536007E~307, ~0.8988465674311579E308, ~0.123E1): ~0.223E1 ~0.223E1 +(0.11125369292536007E~307, ~0.8988465674311579E308, ~0.123): ~0.11229999999999998E1 ~0.11229999999999998E1 +(0.11125369292536007E~307, ~0.8988465674311579E308, ~0.123E~2): ~0.10012299999999998E1 ~0.10012299999999998E1 +(0.11125369292536007E~307, ~0.123E4, 0.5E~323): ~0.13684204229819289E~304 ~0.13684204229819289E~304 +(0.11125369292536007E~307, ~0.123E4, ~0.5E~323): ~0.13684204229819289E~304 ~0.13684204229819289E~304 +(0.11125369292536007E~307, ~0.123E2, 0.5E~323): ~0.1368420422981929E~306 ~0.1368420422981929E~306 +(0.11125369292536007E~307, ~0.123E2, ~0.5E~323): ~0.1368420422981929E~306 ~0.1368420422981929E~306 +(0.11125369292536007E~307, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~0.524926277678689E~307 ~0.524926277678689E~307 +(0.11125369292536007E~307, ~0.123, 0.22250738585072014E~307): 0.20882318162090083E~307 0.20882318162090083E~307 +(0.11125369292536007E~307, ~0.123, 0.11125369292536007E~307): 0.9756948869554076E~308 0.9756948869554076E~308 +(0.11125369292536007E~307, ~0.123, 0.5E~323): ~0.136842042298192E~308 ~0.136842042298192E~308 +(0.11125369292536007E~307, ~0.123, 0.0): ~0.136842042298193E~308 ~0.136842042298193E~308 +(0.11125369292536007E~307, ~0.123, ~0.22250738585072014E~307): ~0.23619159008053945E~307 ~0.23619159008053945E~307 +(0.11125369292536007E~307, ~0.123, ~0.11125369292536007E~307): ~0.1249378971551794E~307 ~0.1249378971551794E~307 +(0.11125369292536007E~307, ~0.123, ~0.5E~323): ~0.136842042298193E~308 ~0.136842042298193E~308 +(0.11125369292536007E~307, ~0.123, ~0.0): ~0.136842042298193E~308 ~0.136842042298193E~308 +(0.11125369292536007E~307, ~0.123E~2, 0.22250738585072014E~307): 0.22237054380842194E~307 0.22237054380842194E~307 +(0.11125369292536007E~307, ~0.123E~2, 0.11125369292536007E~307): 0.11111685088306187E~307 0.11111685088306187E~307 +(0.11125369292536007E~307, ~0.123E~2, 0.5E~323): ~0.13684204229815E~310 ~0.13684204229815E~310 +(0.11125369292536007E~307, ~0.123E~2, 0.0): ~0.1368420422982E~310 ~0.1368420422982E~310 +(0.11125369292536007E~307, ~0.123E~2, ~0.22250738585072014E~307): ~0.22264422789301834E~307 ~0.22264422789301834E~307 +(0.11125369292536007E~307, ~0.123E~2, ~0.11125369292536007E~307): ~0.11139053496765827E~307 ~0.11139053496765827E~307 +(0.11125369292536007E~307, ~0.123E~2, ~0.5E~323): ~0.13684204229825E~310 ~0.13684204229825E~310 +(0.11125369292536007E~307, ~0.123E~2, ~0.0): ~0.1368420422982E~310 ~0.1368420422982E~310 +(0.11125369292536007E~307, ~0.22250738585072014E~307, 0.0): ~0.0 ~0.0 +(0.11125369292536007E~307, ~0.22250738585072014E~307, ~0.0): ~0.0 ~0.0 +(0.11125369292536007E~307, ~0.11125369292536007E~307, 0.0): ~0.0 ~0.0 +(0.11125369292536007E~307, ~0.11125369292536007E~307, ~0.0): ~0.0 ~0.0 +(0.11125369292536007E~307, ~0.5E~323, 0.0): ~0.0 ~0.0 +(0.11125369292536007E~307, ~0.5E~323, ~0.0): ~0.0 ~0.0 +(0.5E~323, 0.17976931348623157E309, 0.123E4): 0.123E4 0.123E4 +(0.5E~323, 0.17976931348623157E309, 0.123E2): 0.123E2 0.123E2 +(0.5E~323, 0.17976931348623157E309, ~0.123E4): ~0.123E4 ~0.123E4 +(0.5E~323, 0.17976931348623157E309, ~0.123E2): ~0.123E2 ~0.123E2 +(0.5E~323, 0.8988465674311579E308, 0.123E4): 0.123E4 0.123E4 +(0.5E~323, 0.8988465674311579E308, 0.123E2): 0.123E2 0.123E2 +(0.5E~323, 0.8988465674311579E308, ~0.123E4): ~0.123E4 ~0.123E4 +(0.5E~323, 0.8988465674311579E308, ~0.123E2): ~0.123E2 ~0.123E2 +(0.5E~323, 0.123E2, 0.22250738585072014E~307): 0.22250738585072073E~307 0.22250738585072073E~307 +(0.5E~323, 0.123E2, 0.11125369292536007E~307): 0.11125369292536066E~307 0.11125369292536066E~307 +(0.5E~323, 0.123E2, 0.5E~323): 0.64E~322 0.64E~322 +(0.5E~323, 0.123E2, 0.0): 0.6E~322 0.6E~322 +(0.5E~323, 0.123E2, ~0.22250738585072014E~307): ~0.22250738585071955E~307 ~0.22250738585071955E~307 +(0.5E~323, 0.123E2, ~0.11125369292536007E~307): ~0.1112536929253595E~307 ~0.1112536929253595E~307 +(0.5E~323, 0.123E2, ~0.5E~323): 0.54E~322 0.54E~322 +(0.5E~323, 0.123E2, ~0.0): 0.6E~322 0.6E~322 +(0.5E~323, 0.3141592653589793E1, 0.22250738585072014E~307): 0.2225073858507203E~307 0.2225073858507203E~307 +(0.5E~323, 0.3141592653589793E1, 0.11125369292536007E~307): 0.1112536929253602E~307 0.1112536929253602E~307 +(0.5E~323, 0.3141592653589793E1, 0.5E~323): 0.2E~322 0.2E~322 +(0.5E~323, 0.3141592653589793E1, 0.0): 0.15E~322 0.15E~322 +(0.5E~323, 0.3141592653589793E1, ~0.22250738585072014E~307): ~0.22250738585072E~307 ~0.22250738585072E~307 +(0.5E~323, 0.3141592653589793E1, ~0.11125369292536007E~307): ~0.1112536929253599E~307 ~0.1112536929253599E~307 +(0.5E~323, 0.3141592653589793E1, ~0.5E~323): 0.1E~322 0.1E~322 +(0.5E~323, 0.3141592653589793E1, ~0.0): 0.15E~322 0.15E~322 +(0.5E~323, 0.2718281828459045E1, 0.22250738585072014E~307): 0.2225073858507203E~307 0.2225073858507203E~307 +(0.5E~323, 0.2718281828459045E1, 0.11125369292536007E~307): 0.1112536929253602E~307 0.1112536929253602E~307 +(0.5E~323, 0.2718281828459045E1, 0.5E~323): 0.2E~322 0.2E~322 +(0.5E~323, 0.2718281828459045E1, 0.0): 0.15E~322 0.15E~322 +(0.5E~323, 0.2718281828459045E1, ~0.22250738585072014E~307): ~0.22250738585072E~307 ~0.22250738585072E~307 +(0.5E~323, 0.2718281828459045E1, ~0.11125369292536007E~307): ~0.1112536929253599E~307 ~0.1112536929253599E~307 +(0.5E~323, 0.2718281828459045E1, ~0.5E~323): 0.1E~322 0.1E~322 +(0.5E~323, 0.2718281828459045E1, ~0.0): 0.15E~322 0.15E~322 +(0.5E~323, 0.123E1, 0.22250738585072014E~307): 0.2225073858507202E~307 0.2225073858507202E~307 +(0.5E~323, 0.123E1, 0.11125369292536007E~307): 0.1112536929253601E~307 0.1112536929253601E~307 +(0.5E~323, 0.123E1, 0.5E~323): 0.1E~322 0.1E~322 +(0.5E~323, 0.123E1, 0.0): 0.5E~323 0.5E~323 +(0.5E~323, 0.123E1, ~0.22250738585072014E~307): ~0.2225073858507201E~307 ~0.2225073858507201E~307 +(0.5E~323, 0.123E1, ~0.11125369292536007E~307): ~0.11125369292536E~307 ~0.11125369292536E~307 +(0.5E~323, 0.123E1, ~0.5E~323): 0.0 0.0 +(0.5E~323, 0.123E1, ~0.0): 0.5E~323 0.5E~323 +(0.5E~323, 0.123, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(0.5E~323, 0.123, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(0.5E~323, 0.123, 0.5E~323): 0.5E~323 0.5E~323 +(0.5E~323, 0.123, 0.0): 0.0 0.0 +(0.5E~323, 0.123, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(0.5E~323, 0.123, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(0.5E~323, 0.123, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(0.5E~323, 0.123, ~0.0): 0.0 0.0 +(0.5E~323, 0.123E~2, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(0.5E~323, 0.123E~2, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(0.5E~323, 0.123E~2, 0.5E~323): 0.5E~323 0.5E~323 +(0.5E~323, 0.123E~2, 0.0): 0.0 0.0 +(0.5E~323, 0.123E~2, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(0.5E~323, 0.123E~2, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(0.5E~323, 0.123E~2, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(0.5E~323, 0.123E~2, ~0.0): 0.0 0.0 +(0.5E~323, 0.22250738585072014E~307, 0.0): 0.0 0.0 +(0.5E~323, 0.22250738585072014E~307, ~0.0): 0.0 0.0 +(0.5E~323, 0.11125369292536007E~307, 0.0): 0.0 0.0 +(0.5E~323, 0.11125369292536007E~307, ~0.0): 0.0 0.0 +(0.5E~323, 0.5E~323, 0.0): 0.0 0.0 +(0.5E~323, 0.5E~323, ~0.0): 0.0 0.0 +(0.5E~323, ~0.17976931348623157E309, 0.123E4): 0.123E4 0.123E4 +(0.5E~323, ~0.17976931348623157E309, 0.123E2): 0.123E2 0.123E2 +(0.5E~323, ~0.17976931348623157E309, ~0.123E4): ~0.123E4 ~0.123E4 +(0.5E~323, ~0.17976931348623157E309, ~0.123E2): ~0.123E2 ~0.123E2 +(0.5E~323, ~0.8988465674311579E308, 0.123E4): 0.123E4 0.123E4 +(0.5E~323, ~0.8988465674311579E308, 0.123E2): 0.123E2 0.123E2 +(0.5E~323, ~0.8988465674311579E308, ~0.123E4): ~0.123E4 ~0.123E4 +(0.5E~323, ~0.8988465674311579E308, ~0.123E2): ~0.123E2 ~0.123E2 +(0.5E~323, ~0.123E2, 0.22250738585072014E~307): 0.22250738585071955E~307 0.22250738585071955E~307 +(0.5E~323, ~0.123E2, 0.11125369292536007E~307): 0.1112536929253595E~307 0.1112536929253595E~307 +(0.5E~323, ~0.123E2, 0.5E~323): ~0.54E~322 ~0.54E~322 +(0.5E~323, ~0.123E2, 0.0): ~0.6E~322 ~0.6E~322 +(0.5E~323, ~0.123E2, ~0.22250738585072014E~307): ~0.22250738585072073E~307 ~0.22250738585072073E~307 +(0.5E~323, ~0.123E2, ~0.11125369292536007E~307): ~0.11125369292536066E~307 ~0.11125369292536066E~307 +(0.5E~323, ~0.123E2, ~0.5E~323): ~0.64E~322 ~0.64E~322 +(0.5E~323, ~0.123E2, ~0.0): ~0.6E~322 ~0.6E~322 +(0.5E~323, ~0.3141592653589793E1, 0.22250738585072014E~307): 0.22250738585072E~307 0.22250738585072E~307 +(0.5E~323, ~0.3141592653589793E1, 0.11125369292536007E~307): 0.1112536929253599E~307 0.1112536929253599E~307 +(0.5E~323, ~0.3141592653589793E1, 0.5E~323): ~0.1E~322 ~0.1E~322 +(0.5E~323, ~0.3141592653589793E1, 0.0): ~0.15E~322 ~0.15E~322 +(0.5E~323, ~0.3141592653589793E1, ~0.22250738585072014E~307): ~0.2225073858507203E~307 ~0.2225073858507203E~307 +(0.5E~323, ~0.3141592653589793E1, ~0.11125369292536007E~307): ~0.1112536929253602E~307 ~0.1112536929253602E~307 +(0.5E~323, ~0.3141592653589793E1, ~0.5E~323): ~0.2E~322 ~0.2E~322 +(0.5E~323, ~0.3141592653589793E1, ~0.0): ~0.15E~322 ~0.15E~322 +(0.5E~323, ~0.2718281828459045E1, 0.22250738585072014E~307): 0.22250738585072E~307 0.22250738585072E~307 +(0.5E~323, ~0.2718281828459045E1, 0.11125369292536007E~307): 0.1112536929253599E~307 0.1112536929253599E~307 +(0.5E~323, ~0.2718281828459045E1, 0.5E~323): ~0.1E~322 ~0.1E~322 +(0.5E~323, ~0.2718281828459045E1, 0.0): ~0.15E~322 ~0.15E~322 +(0.5E~323, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~0.2225073858507203E~307 ~0.2225073858507203E~307 +(0.5E~323, ~0.2718281828459045E1, ~0.11125369292536007E~307): ~0.1112536929253602E~307 ~0.1112536929253602E~307 +(0.5E~323, ~0.2718281828459045E1, ~0.5E~323): ~0.2E~322 ~0.2E~322 +(0.5E~323, ~0.2718281828459045E1, ~0.0): ~0.15E~322 ~0.15E~322 +(0.5E~323, ~0.123E1, 0.22250738585072014E~307): 0.2225073858507201E~307 0.2225073858507201E~307 +(0.5E~323, ~0.123E1, 0.11125369292536007E~307): 0.11125369292536E~307 0.11125369292536E~307 +(0.5E~323, ~0.123E1, 0.5E~323): ~0.0 ~0.0 +(0.5E~323, ~0.123E1, 0.0): ~0.5E~323 ~0.5E~323 +(0.5E~323, ~0.123E1, ~0.22250738585072014E~307): ~0.2225073858507202E~307 ~0.2225073858507202E~307 +(0.5E~323, ~0.123E1, ~0.11125369292536007E~307): ~0.1112536929253601E~307 ~0.1112536929253601E~307 +(0.5E~323, ~0.123E1, ~0.5E~323): ~0.1E~322 ~0.1E~322 +(0.5E~323, ~0.123E1, ~0.0): ~0.5E~323 ~0.5E~323 +(0.5E~323, ~0.123, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(0.5E~323, ~0.123, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(0.5E~323, ~0.123, 0.5E~323): 0.5E~323 0.5E~323 +(0.5E~323, ~0.123, 0.0): ~0.0 ~0.0 +(0.5E~323, ~0.123, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(0.5E~323, ~0.123, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(0.5E~323, ~0.123, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(0.5E~323, ~0.123, ~0.0): ~0.0 ~0.0 +(0.5E~323, ~0.123E~2, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(0.5E~323, ~0.123E~2, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(0.5E~323, ~0.123E~2, 0.5E~323): 0.5E~323 0.5E~323 +(0.5E~323, ~0.123E~2, 0.0): ~0.0 ~0.0 +(0.5E~323, ~0.123E~2, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(0.5E~323, ~0.123E~2, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(0.5E~323, ~0.123E~2, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(0.5E~323, ~0.123E~2, ~0.0): ~0.0 ~0.0 +(0.5E~323, ~0.22250738585072014E~307, 0.0): ~0.0 ~0.0 +(0.5E~323, ~0.22250738585072014E~307, ~0.0): ~0.0 ~0.0 +(0.5E~323, ~0.11125369292536007E~307, 0.0): ~0.0 ~0.0 +(0.5E~323, ~0.11125369292536007E~307, ~0.0): ~0.0 ~0.0 +(0.5E~323, ~0.5E~323, 0.0): ~0.0 ~0.0 +(0.5E~323, ~0.5E~323, ~0.0): ~0.0 ~0.0 +(~0.17976931348623157E309, 0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.123): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, 0.0): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.123): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.17976931348623157E309, ~0.0): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.123): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, 0.0): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.123): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.8988465674311579E308, ~0.0): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.123): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, 0.0): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.123): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.123E4, ~0.0): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.123): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, 0.0): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.123): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.123E2, ~0.0): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.123): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, 0.0): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.123): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.3141592653589793E1, ~0.0): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.123): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, 0.0): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.123): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.2718281828459045E1, ~0.0): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, 0.17976931348623157E309): ~0.4134694210183326E308 ~0.4134694210183326E308 +(~0.17976931348623157E309, 0.123E1, 0.8988465674311579E308): ~0.13123159884494904E309 ~0.13123159884494904E309 +(~0.17976931348623157E309, 0.123E1, 0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, 0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, 0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, 0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, 0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, 0.123): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, 0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, 0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, 0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, 0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, 0.0): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.8988465674311579E308): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.123E4): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.123E2): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.3141592653589793E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.2718281828459045E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.123E1): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.123): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.123E~2): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.22250738585072014E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.11125369292536007E~307): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.5E~323): ~inf ~inf +(~0.17976931348623157E309, 0.123E1, ~0.0): ~inf ~inf +(~0.17976931348623157E309, 0.123, 0.17976931348623157E309): 0.15765768792742509E309 0.15765768792742509E309 +(~0.17976931348623157E309, 0.123, 0.8988465674311579E308): 0.677730311843093E308 0.677730311843093E308 +(~0.17976931348623157E309, 0.123, 0.123E4): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, 0.123E2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, 0.3141592653589793E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, 0.2718281828459045E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, 0.123E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, 0.123): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, 0.123E~2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, 0.22250738585072014E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, 0.11125369292536007E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, 0.5E~323): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, 0.0): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, ~0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.123, ~0.8988465674311579E308): ~0.11199628230192226E309 ~0.11199628230192226E309 +(~0.17976931348623157E309, 0.123, ~0.123E4): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, ~0.123E2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, ~0.3141592653589793E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, ~0.2718281828459045E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, ~0.123E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, ~0.123): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, ~0.123E~2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, ~0.22250738585072014E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, ~0.11125369292536007E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, ~0.5E~323): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123, ~0.0): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.17976931348623157E309, 0.123E~2, 0.17976931348623157E309): 0.17954819723064351E309 0.17954819723064351E309 +(~0.17976931348623157E309, 0.123E~2, 0.8988465674311579E308): 0.8966354048752772E308 0.8966354048752772E308 +(~0.17976931348623157E309, 0.123E~2, 0.123E4): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, 0.123E2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, 0.3141592653589793E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, 0.2718281828459045E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, 0.123E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, 0.123): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, 0.123E~2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, 0.22250738585072014E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, 0.11125369292536007E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, 0.5E~323): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, 0.0): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, ~0.17976931348623157E309): ~inf ~inf +(~0.17976931348623157E309, 0.123E~2, ~0.8988465674311579E308): ~0.9010577299870385E308 ~0.9010577299870385E308 +(~0.17976931348623157E309, 0.123E~2, ~0.123E4): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, ~0.123E2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, ~0.3141592653589793E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, ~0.2718281828459045E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, ~0.123E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, ~0.123): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, ~0.123E~2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, ~0.22250738585072014E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, ~0.11125369292536007E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, ~0.5E~323): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.123E~2, ~0.0): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.17976931348623157E309, 0.22250738585072014E~307, 0.123E4): 0.1226E4 0.1226E4 +(~0.17976931348623157E309, 0.22250738585072014E~307, 0.123E2): 0.83E1 0.83E1 +(~0.17976931348623157E309, 0.22250738585072014E~307, 0.123): ~0.3877E1 ~0.3877E1 +(~0.17976931348623157E309, 0.22250738585072014E~307, 0.123E~2): ~0.39987699999999995E1 ~0.39987699999999995E1 +(~0.17976931348623157E309, 0.22250738585072014E~307, ~0.123E4): ~0.1234E4 ~0.1234E4 +(~0.17976931348623157E309, 0.22250738585072014E~307, ~0.123E2): ~0.163E2 ~0.163E2 +(~0.17976931348623157E309, 0.22250738585072014E~307, ~0.3141592653589793E1): ~0.7141592653589793E1 ~0.7141592653589793E1 +(~0.17976931348623157E309, 0.22250738585072014E~307, ~0.123): ~0.4122999999999999E1 ~0.4122999999999999E1 +(~0.17976931348623157E309, 0.22250738585072014E~307, ~0.123E~2): ~0.400123E1 ~0.400123E1 +(~0.17976931348623157E309, 0.11125369292536007E~307, 0.123E4): 0.1228E4 0.1228E4 +(~0.17976931348623157E309, 0.11125369292536007E~307, 0.123E2): 0.103E2 0.103E2 +(~0.17976931348623157E309, 0.11125369292536007E~307, 0.123E~2): ~0.19987699999999997E1 ~0.19987699999999997E1 +(~0.17976931348623157E309, 0.11125369292536007E~307, ~0.123E4): ~0.1232E4 ~0.1232E4 +(~0.17976931348623157E309, 0.11125369292536007E~307, ~0.123E2): ~0.143E2 ~0.143E2 +(~0.17976931348623157E309, 0.11125369292536007E~307, ~0.3141592653589793E1): ~0.5141592653589793E1 ~0.5141592653589793E1 +(~0.17976931348623157E309, 0.11125369292536007E~307, ~0.2718281828459045E1): ~0.4718281828459045E1 ~0.4718281828459045E1 +(~0.17976931348623157E309, 0.11125369292536007E~307, ~0.123E1): ~0.32299999999999995E1 ~0.32299999999999995E1 +(~0.17976931348623157E309, 0.11125369292536007E~307, ~0.123E~2): ~0.20012299999999996E1 ~0.20012299999999996E1 +(~0.17976931348623157E309, 0.5E~323, 0.123E4): 0.123E4 0.123E4 +(~0.17976931348623157E309, 0.5E~323, 0.123E2): 0.123E2 0.123E2 +(~0.17976931348623157E309, 0.5E~323, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.17976931348623157E309, 0.5E~323, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.123E4): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.123E2): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.123E1): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.123): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.123E~2): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.5E~323): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, 0.0): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.123E4): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.123E2): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.123E1): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.123): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.123E~2): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.5E~323): inf inf +(~0.17976931348623157E309, ~0.17976931348623157E309, ~0.0): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.123E4): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.123E2): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.123E1): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.123): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.123E~2): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.5E~323): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, 0.0): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.123E4): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.123E2): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.123E1): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.123): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.123E~2): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.5E~323): inf inf +(~0.17976931348623157E309, ~0.8988465674311579E308, ~0.0): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.123E4): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.123E2): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.123E1): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.123): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.123E~2): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.5E~323): inf inf +(~0.17976931348623157E309, ~0.123E4, 0.0): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.123E4): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.123E2): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.123E1): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.123): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.123E~2): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.5E~323): inf inf +(~0.17976931348623157E309, ~0.123E4, ~0.0): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.123E4): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.123E2): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.123E1): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.123): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.123E~2): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.5E~323): inf inf +(~0.17976931348623157E309, ~0.123E2, 0.0): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.123E4): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.123E2): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.123E1): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.123): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.123E~2): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.5E~323): inf inf +(~0.17976931348623157E309, ~0.123E2, ~0.0): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.123E4): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.123E2): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.123E1): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.123): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.123E~2): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.5E~323): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, 0.0): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.123E4): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.123E2): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.123E1): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.123): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.123E~2): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.5E~323): inf inf +(~0.17976931348623157E309, ~0.3141592653589793E1, ~0.0): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.123E4): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.123E2): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.123E1): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.123): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.123E~2): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.5E~323): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, 0.0): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.123E4): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.123E2): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.123E1): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.123): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.123E~2): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.5E~323): inf inf +(~0.17976931348623157E309, ~0.2718281828459045E1, ~0.0): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.8988465674311579E308): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.123E4): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.123E2): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.123E1): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.123): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.123E~2): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.5E~323): inf inf +(~0.17976931348623157E309, ~0.123E1, 0.0): inf inf +(~0.17976931348623157E309, ~0.123E1, ~0.17976931348623157E309): 0.4134694210183326E308 0.4134694210183326E308 +(~0.17976931348623157E309, ~0.123E1, ~0.8988465674311579E308): 0.13123159884494904E309 0.13123159884494904E309 +(~0.17976931348623157E309, ~0.123E1, ~0.123E4): inf inf +(~0.17976931348623157E309, ~0.123E1, ~0.123E2): inf inf +(~0.17976931348623157E309, ~0.123E1, ~0.3141592653589793E1): inf inf +(~0.17976931348623157E309, ~0.123E1, ~0.2718281828459045E1): inf inf +(~0.17976931348623157E309, ~0.123E1, ~0.123E1): inf inf +(~0.17976931348623157E309, ~0.123E1, ~0.123): inf inf +(~0.17976931348623157E309, ~0.123E1, ~0.123E~2): inf inf +(~0.17976931348623157E309, ~0.123E1, ~0.22250738585072014E~307): inf inf +(~0.17976931348623157E309, ~0.123E1, ~0.11125369292536007E~307): inf inf +(~0.17976931348623157E309, ~0.123E1, ~0.5E~323): inf inf +(~0.17976931348623157E309, ~0.123E1, ~0.0): inf inf +(~0.17976931348623157E309, ~0.123, 0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.123, 0.8988465674311579E308): 0.11199628230192226E309 0.11199628230192226E309 +(~0.17976931348623157E309, ~0.123, 0.123E4): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, 0.123E2): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, 0.3141592653589793E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, 0.2718281828459045E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, 0.123E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, 0.123): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, 0.123E~2): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, 0.22250738585072014E~307): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, 0.11125369292536007E~307): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, 0.5E~323): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, 0.0): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, ~0.17976931348623157E309): ~0.15765768792742509E309 ~0.15765768792742509E309 +(~0.17976931348623157E309, ~0.123, ~0.8988465674311579E308): ~0.677730311843093E308 ~0.677730311843093E308 +(~0.17976931348623157E309, ~0.123, ~0.123E4): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, ~0.123E2): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, ~0.3141592653589793E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, ~0.2718281828459045E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, ~0.123E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, ~0.123): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, ~0.123E~2): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, ~0.22250738585072014E~307): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, ~0.11125369292536007E~307): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, ~0.5E~323): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123, ~0.0): 0.22111625558806483E308 0.22111625558806483E308 +(~0.17976931348623157E309, ~0.123E~2, 0.17976931348623157E309): inf inf +(~0.17976931348623157E309, ~0.123E~2, 0.8988465674311579E308): 0.9010577299870385E308 0.9010577299870385E308 +(~0.17976931348623157E309, ~0.123E~2, 0.123E4): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, 0.123E2): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, 0.3141592653589793E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, 0.2718281828459045E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, 0.123E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, 0.123): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, 0.123E~2): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, 0.22250738585072014E~307): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, 0.11125369292536007E~307): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, 0.5E~323): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, 0.0): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, ~0.17976931348623157E309): ~0.17954819723064351E309 ~0.17954819723064351E309 +(~0.17976931348623157E309, ~0.123E~2, ~0.8988465674311579E308): ~0.8966354048752772E308 ~0.8966354048752772E308 +(~0.17976931348623157E309, ~0.123E~2, ~0.123E4): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, ~0.123E2): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, ~0.3141592653589793E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, ~0.2718281828459045E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, ~0.123E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, ~0.123): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, ~0.123E~2): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, ~0.22250738585072014E~307): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, ~0.11125369292536007E~307): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, ~0.5E~323): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.123E~2, ~0.0): 0.2211162555880648E306 0.2211162555880648E306 +(~0.17976931348623157E309, ~0.22250738585072014E~307, 0.123E4): 0.1234E4 0.1234E4 +(~0.17976931348623157E309, ~0.22250738585072014E~307, 0.123E2): 0.163E2 0.163E2 +(~0.17976931348623157E309, ~0.22250738585072014E~307, 0.3141592653589793E1): 0.7141592653589793E1 0.7141592653589793E1 +(~0.17976931348623157E309, ~0.22250738585072014E~307, 0.123): 0.4122999999999999E1 0.4122999999999999E1 +(~0.17976931348623157E309, ~0.22250738585072014E~307, 0.123E~2): 0.400123E1 0.400123E1 +(~0.17976931348623157E309, ~0.22250738585072014E~307, ~0.123E4): ~0.1226E4 ~0.1226E4 +(~0.17976931348623157E309, ~0.22250738585072014E~307, ~0.123E2): ~0.83E1 ~0.83E1 +(~0.17976931348623157E309, ~0.22250738585072014E~307, ~0.123): 0.3877E1 0.3877E1 +(~0.17976931348623157E309, ~0.22250738585072014E~307, ~0.123E~2): 0.39987699999999995E1 0.39987699999999995E1 +(~0.17976931348623157E309, ~0.11125369292536007E~307, 0.123E4): 0.1232E4 0.1232E4 +(~0.17976931348623157E309, ~0.11125369292536007E~307, 0.123E2): 0.143E2 0.143E2 +(~0.17976931348623157E309, ~0.11125369292536007E~307, 0.3141592653589793E1): 0.5141592653589793E1 0.5141592653589793E1 +(~0.17976931348623157E309, ~0.11125369292536007E~307, 0.2718281828459045E1): 0.4718281828459045E1 0.4718281828459045E1 +(~0.17976931348623157E309, ~0.11125369292536007E~307, 0.123E1): 0.32299999999999995E1 0.32299999999999995E1 +(~0.17976931348623157E309, ~0.11125369292536007E~307, 0.123E~2): 0.20012299999999996E1 0.20012299999999996E1 +(~0.17976931348623157E309, ~0.11125369292536007E~307, ~0.123E4): ~0.1228E4 ~0.1228E4 +(~0.17976931348623157E309, ~0.11125369292536007E~307, ~0.123E2): ~0.103E2 ~0.103E2 +(~0.17976931348623157E309, ~0.11125369292536007E~307, ~0.123E~2): 0.19987699999999997E1 0.19987699999999997E1 +(~0.17976931348623157E309, ~0.5E~323, 0.123E4): 0.123E4 0.123E4 +(~0.17976931348623157E309, ~0.5E~323, 0.123E2): 0.123E2 0.123E2 +(~0.17976931348623157E309, ~0.5E~323, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.17976931348623157E309, ~0.5E~323, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.8988465674311579E308, 0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.123): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, 0.0): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.123): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.17976931348623157E309, ~0.0): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.123): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, 0.0): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.123): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.8988465674311579E308, ~0.0): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.123): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, 0.0): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.123): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.123E4, ~0.0): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.123): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, 0.0): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.123): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.123E2, ~0.0): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.17976931348623157E309): ~0.10261166380838123E309 ~0.10261166380838123E309 +(~0.8988465674311579E308, 0.3141592653589793E1, 0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.123): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, 0.0): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.123): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.3141592653589793E1, ~0.0): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.17976931348623157E309): ~0.6456251559585884E308 ~0.6456251559585884E308 +(~0.8988465674311579E308, 0.2718281828459045E1, 0.8988465674311579E308): ~0.15444717233897463E309 ~0.15444717233897463E309 +(~0.8988465674311579E308, 0.2718281828459045E1, 0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.123): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, 0.0): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.123E4): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.123E2): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.3141592653589793E1): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.2718281828459045E1): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.123E1): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.123): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.123E~2): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.22250738585072014E~307): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.11125369292536007E~307): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.5E~323): ~inf ~inf +(~0.8988465674311579E308, 0.2718281828459045E1, ~0.0): ~inf ~inf +(~0.8988465674311579E308, 0.123E1, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219915E308 +(~0.8988465674311579E308, 0.123E1, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.2067347105091663E308 +(~0.8988465674311579E308, 0.123E1, 0.123E4): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, 0.123E2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, 0.3141592653589793E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, 0.2718281828459045E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, 0.123E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, 0.123): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, 0.123E~2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, 0.22250738585072014E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, 0.11125369292536007E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, 0.5E~323): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, 0.0): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, ~0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.123E1, ~0.8988465674311579E308): ~inf ~inf +(~0.8988465674311579E308, 0.123E1, ~0.123E4): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, ~0.123E2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, ~0.3141592653589793E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, ~0.2718281828459045E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, ~0.123E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, ~0.123): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, ~0.123E~2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, ~0.22250738585072014E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, ~0.11125369292536007E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, ~0.5E~323): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123E1, ~0.0): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.8988465674311579E308, 0.123, 0.17976931348623157E309): 0.16871350070682833E309 0.16871350070682833E309 +(~0.8988465674311579E308, 0.123, 0.8988465674311579E308): 0.7882884396371254E308 0.7882884396371254E308 +(~0.8988465674311579E308, 0.123, 0.123E4): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, 0.123E2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, 0.3141592653589793E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, 0.2718281828459045E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, 0.123E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, 0.123): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, 0.123E~2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, 0.22250738585072014E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, 0.11125369292536007E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, 0.5E~323): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, 0.0): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, ~0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.123, ~0.8988465674311579E308): ~0.10094046952251902E309 ~0.10094046952251902E309 +(~0.8988465674311579E308, 0.123, ~0.123E4): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, ~0.123E2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, ~0.3141592653589793E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, ~0.2718281828459045E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, ~0.123E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, ~0.123): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, ~0.123E~2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, ~0.22250738585072014E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, ~0.11125369292536007E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, ~0.5E~323): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123, ~0.0): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.8988465674311579E308, 0.123E~2, 0.17976931348623157E309): 0.17965875535843753E309 0.17965875535843753E309 +(~0.8988465674311579E308, 0.123E~2, 0.8988465674311579E308): 0.8977409861532176E308 0.8977409861532176E308 +(~0.8988465674311579E308, 0.123E~2, 0.123E4): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, 0.123E2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, 0.3141592653589793E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, 0.2718281828459045E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, 0.123E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, 0.123): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, 0.123E~2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, 0.22250738585072014E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, 0.11125369292536007E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, 0.5E~323): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, 0.0): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, ~0.17976931348623157E309): ~inf ~inf +(~0.8988465674311579E308, 0.123E~2, ~0.8988465674311579E308): ~0.8999521487090981E308 ~0.8999521487090981E308 +(~0.8988465674311579E308, 0.123E~2, ~0.123E4): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, ~0.123E2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, ~0.3141592653589793E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, ~0.2718281828459045E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, ~0.123E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, ~0.123): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, ~0.123E~2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, ~0.22250738585072014E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, ~0.11125369292536007E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, ~0.5E~323): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.123E~2, ~0.0): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.8988465674311579E308, 0.22250738585072014E~307, 0.123E4): 0.1228E4 0.1228E4 +(~0.8988465674311579E308, 0.22250738585072014E~307, 0.123E2): 0.103E2 0.103E2 +(~0.8988465674311579E308, 0.22250738585072014E~307, 0.123E~2): ~0.19987699999999997E1 ~0.19987699999999997E1 +(~0.8988465674311579E308, 0.22250738585072014E~307, ~0.123E4): ~0.1232E4 ~0.1232E4 +(~0.8988465674311579E308, 0.22250738585072014E~307, ~0.123E2): ~0.143E2 ~0.143E2 +(~0.8988465674311579E308, 0.22250738585072014E~307, ~0.3141592653589793E1): ~0.5141592653589793E1 ~0.5141592653589793E1 +(~0.8988465674311579E308, 0.22250738585072014E~307, ~0.2718281828459045E1): ~0.4718281828459045E1 ~0.4718281828459045E1 +(~0.8988465674311579E308, 0.22250738585072014E~307, ~0.123E1): ~0.32299999999999995E1 ~0.32299999999999995E1 +(~0.8988465674311579E308, 0.22250738585072014E~307, ~0.123E~2): ~0.20012299999999996E1 ~0.20012299999999996E1 +(~0.8988465674311579E308, 0.11125369292536007E~307, 0.123E4): 0.1229E4 0.1229E4 +(~0.8988465674311579E308, 0.11125369292536007E~307, 0.123E2): 0.113E2 0.113E2 +(~0.8988465674311579E308, 0.11125369292536007E~307, 0.3141592653589793E1): 0.2141592653589793E1 0.2141592653589793E1 +(~0.8988465674311579E308, 0.11125369292536007E~307, 0.2718281828459045E1): 0.1718281828459045E1 0.1718281828459045E1 +(~0.8988465674311579E308, 0.11125369292536007E~307, 0.123E~2): ~0.9987699999999999 ~0.9987699999999999 +(~0.8988465674311579E308, 0.11125369292536007E~307, ~0.123E4): ~0.1231E4 ~0.1231E4 +(~0.8988465674311579E308, 0.11125369292536007E~307, ~0.123E2): ~0.133E2 ~0.133E2 +(~0.8988465674311579E308, 0.11125369292536007E~307, ~0.3141592653589793E1): ~0.4141592653589793E1 ~0.4141592653589793E1 +(~0.8988465674311579E308, 0.11125369292536007E~307, ~0.2718281828459045E1): ~0.3718281828459045E1 ~0.3718281828459045E1 +(~0.8988465674311579E308, 0.11125369292536007E~307, ~0.123E1): ~0.223E1 ~0.223E1 +(~0.8988465674311579E308, 0.11125369292536007E~307, ~0.123): ~0.11229999999999998E1 ~0.11229999999999998E1 +(~0.8988465674311579E308, 0.11125369292536007E~307, ~0.123E~2): ~0.10012299999999998E1 ~0.10012299999999998E1 +(~0.8988465674311579E308, 0.5E~323, 0.123E4): 0.123E4 0.123E4 +(~0.8988465674311579E308, 0.5E~323, 0.123E2): 0.123E2 0.123E2 +(~0.8988465674311579E308, 0.5E~323, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.8988465674311579E308, 0.5E~323, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.123E4): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.123E2): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.123E1): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.123): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.123E~2): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.5E~323): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, 0.0): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.123E4): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.123E2): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.123E1): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.123): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.123E~2): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.5E~323): inf inf +(~0.8988465674311579E308, ~0.17976931348623157E309, ~0.0): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.123E4): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.123E2): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.123E1): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.123): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.123E~2): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.5E~323): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, 0.0): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.123E4): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.123E2): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.123E1): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.123): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.123E~2): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.5E~323): inf inf +(~0.8988465674311579E308, ~0.8988465674311579E308, ~0.0): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.123E4): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.123E2): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.123E1): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.123): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.123E~2): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.5E~323): inf inf +(~0.8988465674311579E308, ~0.123E4, 0.0): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.123E4): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.123E2): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.123E1): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.123): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.123E~2): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.5E~323): inf inf +(~0.8988465674311579E308, ~0.123E4, ~0.0): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.123E4): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.123E2): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.123E1): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.123): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.123E~2): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.5E~323): inf inf +(~0.8988465674311579E308, ~0.123E2, 0.0): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.123E4): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.123E2): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.123E1): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.123): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.123E~2): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.5E~323): inf inf +(~0.8988465674311579E308, ~0.123E2, ~0.0): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.123E4): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.123E2): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.123E1): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.123): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.123E~2): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.5E~323): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, 0.0): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.17976931348623157E309): 0.10261166380838123E309 0.10261166380838123E309 +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.123E4): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.123E2): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.123E1): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.123): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.123E~2): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.5E~323): inf inf +(~0.8988465674311579E308, ~0.3141592653589793E1, ~0.0): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.123E4): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.123E2): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.123E1): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.123): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.123E~2): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.5E~323): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, 0.0): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.17976931348623157E309): 0.6456251559585884E308 0.6456251559585884E308 +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.8988465674311579E308): 0.15444717233897463E309 0.15444717233897463E309 +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.123E4): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.123E2): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.3141592653589793E1): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.2718281828459045E1): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.123E1): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.123): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.123E~2): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.22250738585072014E~307): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.11125369292536007E~307): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.5E~323): inf inf +(~0.8988465674311579E308, ~0.2718281828459045E1, ~0.0): inf inf +(~0.8988465674311579E308, ~0.123E1, 0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.123E1, 0.8988465674311579E308): inf inf +(~0.8988465674311579E308, ~0.123E1, 0.123E4): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, 0.123E2): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, 0.3141592653589793E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, 0.2718281828459045E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, 0.123E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, 0.123): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, 0.123E~2): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, 0.22250738585072014E~307): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, 0.11125369292536007E~307): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, 0.5E~323): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, 0.0): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219915E308 +(~0.8988465674311579E308, ~0.123E1, ~0.8988465674311579E308): 0.2067347105091663E308 0.2067347105091663E308 +(~0.8988465674311579E308, ~0.123E1, ~0.123E4): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, ~0.123E2): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, ~0.3141592653589793E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, ~0.2718281828459045E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, ~0.123E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, ~0.123): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, ~0.123E~2): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, ~0.22250738585072014E~307): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, ~0.11125369292536007E~307): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, ~0.5E~323): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123E1, ~0.0): 0.1105581277940324E309 0.1105581277940324E309 +(~0.8988465674311579E308, ~0.123, 0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.123, 0.8988465674311579E308): 0.10094046952251902E309 0.10094046952251902E309 +(~0.8988465674311579E308, ~0.123, 0.123E4): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, 0.123E2): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, 0.3141592653589793E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, 0.2718281828459045E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, 0.123E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, 0.123): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, 0.123E~2): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, 0.22250738585072014E~307): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, 0.11125369292536007E~307): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, 0.5E~323): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, 0.0): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, ~0.17976931348623157E309): ~0.16871350070682833E309 ~0.16871350070682833E309 +(~0.8988465674311579E308, ~0.123, ~0.8988465674311579E308): ~0.7882884396371254E308 ~0.7882884396371254E308 +(~0.8988465674311579E308, ~0.123, ~0.123E4): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, ~0.123E2): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, ~0.3141592653589793E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, ~0.2718281828459045E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, ~0.123E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, ~0.123): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, ~0.123E~2): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, ~0.22250738585072014E~307): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, ~0.11125369292536007E~307): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, ~0.5E~323): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123, ~0.0): 0.11055812779403241E308 0.11055812779403241E308 +(~0.8988465674311579E308, ~0.123E~2, 0.17976931348623157E309): inf inf +(~0.8988465674311579E308, ~0.123E~2, 0.8988465674311579E308): 0.8999521487090981E308 0.8999521487090981E308 +(~0.8988465674311579E308, ~0.123E~2, 0.123E4): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, 0.123E2): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, 0.3141592653589793E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, 0.2718281828459045E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, 0.123E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, 0.123): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, 0.123E~2): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, 0.22250738585072014E~307): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, 0.11125369292536007E~307): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, 0.5E~323): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, 0.0): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, ~0.17976931348623157E309): ~0.17965875535843753E309 ~0.17965875535843753E309 +(~0.8988465674311579E308, ~0.123E~2, ~0.8988465674311579E308): ~0.8977409861532176E308 ~0.8977409861532176E308 +(~0.8988465674311579E308, ~0.123E~2, ~0.123E4): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, ~0.123E2): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, ~0.3141592653589793E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, ~0.2718281828459045E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, ~0.123E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, ~0.123): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, ~0.123E~2): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, ~0.22250738585072014E~307): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, ~0.11125369292536007E~307): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, ~0.5E~323): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.123E~2, ~0.0): 0.1105581277940324E306 0.1105581277940324E306 +(~0.8988465674311579E308, ~0.22250738585072014E~307, 0.123E4): 0.1232E4 0.1232E4 +(~0.8988465674311579E308, ~0.22250738585072014E~307, 0.123E2): 0.143E2 0.143E2 +(~0.8988465674311579E308, ~0.22250738585072014E~307, 0.3141592653589793E1): 0.5141592653589793E1 0.5141592653589793E1 +(~0.8988465674311579E308, ~0.22250738585072014E~307, 0.2718281828459045E1): 0.4718281828459045E1 0.4718281828459045E1 +(~0.8988465674311579E308, ~0.22250738585072014E~307, 0.123E1): 0.32299999999999995E1 0.32299999999999995E1 +(~0.8988465674311579E308, ~0.22250738585072014E~307, 0.123E~2): 0.20012299999999996E1 0.20012299999999996E1 +(~0.8988465674311579E308, ~0.22250738585072014E~307, ~0.123E4): ~0.1228E4 ~0.1228E4 +(~0.8988465674311579E308, ~0.22250738585072014E~307, ~0.123E2): ~0.103E2 ~0.103E2 +(~0.8988465674311579E308, ~0.22250738585072014E~307, ~0.123E~2): 0.19987699999999997E1 0.19987699999999997E1 +(~0.8988465674311579E308, ~0.11125369292536007E~307, 0.123E4): 0.1231E4 0.1231E4 +(~0.8988465674311579E308, ~0.11125369292536007E~307, 0.123E2): 0.133E2 0.133E2 +(~0.8988465674311579E308, ~0.11125369292536007E~307, 0.3141592653589793E1): 0.4141592653589793E1 0.4141592653589793E1 +(~0.8988465674311579E308, ~0.11125369292536007E~307, 0.2718281828459045E1): 0.3718281828459045E1 0.3718281828459045E1 +(~0.8988465674311579E308, ~0.11125369292536007E~307, 0.123E1): 0.223E1 0.223E1 +(~0.8988465674311579E308, ~0.11125369292536007E~307, 0.123): 0.11229999999999998E1 0.11229999999999998E1 +(~0.8988465674311579E308, ~0.11125369292536007E~307, 0.123E~2): 0.10012299999999998E1 0.10012299999999998E1 +(~0.8988465674311579E308, ~0.11125369292536007E~307, ~0.123E4): ~0.1229E4 ~0.1229E4 +(~0.8988465674311579E308, ~0.11125369292536007E~307, ~0.123E2): ~0.113E2 ~0.113E2 +(~0.8988465674311579E308, ~0.11125369292536007E~307, ~0.3141592653589793E1): ~0.2141592653589793E1 ~0.2141592653589793E1 +(~0.8988465674311579E308, ~0.11125369292536007E~307, ~0.2718281828459045E1): ~0.1718281828459045E1 ~0.1718281828459045E1 +(~0.8988465674311579E308, ~0.11125369292536007E~307, ~0.123E~2): 0.9987699999999999 0.9987699999999999 +(~0.8988465674311579E308, ~0.5E~323, 0.123E4): 0.123E4 0.123E4 +(~0.8988465674311579E308, ~0.5E~323, 0.123E2): 0.123E2 0.123E2 +(~0.8988465674311579E308, ~0.5E~323, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.8988465674311579E308, ~0.5E~323, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.123E4, 0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.123E4): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.123E2): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.123E1): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.123): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.123E~2): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.5E~323): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, 0.0): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.123E4): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.123E2): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.123E1): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.123): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(~0.123E4, 0.17976931348623157E309, ~0.0): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.17976931348623157E309): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.8988465674311579E308): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.123E4): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.123E2): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.123E1): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.123): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.123E~2): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.5E~323): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, 0.0): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.123E4): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.123E2): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.123E1): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.123): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(~0.123E4, 0.8988465674311579E308, ~0.0): ~inf ~inf +(~0.123E4, 0.123E4, 0.123E2): ~0.15128877E7 ~0.15128877E7 +(~0.123E4, 0.123E4, 0.3141592653589793E1): ~0.15128968584073463E7 ~0.15128968584073463E7 +(~0.123E4, 0.123E4, 0.2718281828459045E1): ~0.15128972817181714E7 ~0.15128972817181714E7 +(~0.123E4, 0.123E4, 0.123E1): ~0.151289877E7 ~0.151289877E7 +(~0.123E4, 0.123E4, 0.123): ~0.1512899877E7 ~0.1512899877E7 +(~0.123E4, 0.123E4, 0.123E~2): ~0.151289999877E7 ~0.151289999877E7 +(~0.123E4, 0.123E4, ~0.123E2): ~0.15129123E7 ~0.15129123E7 +(~0.123E4, 0.123E4, ~0.3141592653589793E1): ~0.15129031415926537E7 ~0.15129031415926537E7 +(~0.123E4, 0.123E4, ~0.2718281828459045E1): ~0.15129027182818286E7 ~0.15129027182818286E7 +(~0.123E4, 0.123E4, ~0.123E1): ~0.151290123E7 ~0.151290123E7 +(~0.123E4, 0.123E4, ~0.123): ~0.1512900123E7 ~0.1512900123E7 +(~0.123E4, 0.123E4, ~0.123E~2): ~0.151290000123E7 ~0.151290000123E7 +(~0.123E4, 0.123E2, 0.123E4): ~0.13899E5 ~0.13899E5 +(~0.123E4, 0.123E2, 0.123E2): ~0.151167E5 ~0.151167E5 +(~0.123E4, 0.123E2, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.15125858407346412E5 +(~0.123E4, 0.123E2, 0.2718281828459045E1): ~0.15126281718171542E5 ~0.15126281718171542E5 +(~0.123E4, 0.123E2, 0.123E1): ~0.1512777E5 ~0.1512777E5 +(~0.123E4, 0.123E2, 0.123): ~0.15128877E5 ~0.15128877E5 +(~0.123E4, 0.123E2, 0.123E~2): ~0.1512899877E5 ~0.1512899877E5 +(~0.123E4, 0.123E2, 0.22250738585072014E~307): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, 0.11125369292536007E~307): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, 0.5E~323): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, 0.0): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, ~0.123E4): ~0.16359E5 ~0.16359E5 +(~0.123E4, 0.123E2, ~0.123E2): ~0.15141300000000001E5 ~0.15141300000000001E5 +(~0.123E4, 0.123E2, ~0.3141592653589793E1): ~0.1513214159265359E5 ~0.1513214159265359E5 +(~0.123E4, 0.123E2, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.1513171828182846E5 +(~0.123E4, 0.123E2, ~0.123E1): ~0.15130230000000001E5 ~0.15130230000000001E5 +(~0.123E4, 0.123E2, ~0.123): ~0.15129123000000001E5 ~0.15129123000000001E5 +(~0.123E4, 0.123E2, ~0.123E~2): ~0.15129001230000002E5 ~0.15129001230000002E5 +(~0.123E4, 0.123E2, ~0.22250738585072014E~307): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, ~0.11125369292536007E~307): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, ~0.5E~323): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.123E2, ~0.0): ~0.15129E5 ~0.15129E5 +(~0.123E4, 0.3141592653589793E1, 0.123E4): ~0.26341589639154454E4 ~0.26341589639154454E4 +(~0.123E4, 0.3141592653589793E1, 0.123E2): ~0.38518589639154457E4 ~0.38518589639154457E4 +(~0.123E4, 0.3141592653589793E1, 0.3141592653589793E1): ~0.38610173712618557E4 ~0.38610173712618557E4 +(~0.123E4, 0.3141592653589793E1, 0.2718281828459045E1): ~0.38614406820869863E4 ~0.38614406820869863E4 +(~0.123E4, 0.3141592653589793E1, 0.123E1): ~0.38629289639154454E4 ~0.38629289639154454E4 +(~0.123E4, 0.3141592653589793E1, 0.123): ~0.38640359639154453E4 ~0.38640359639154453E4 +(~0.123E4, 0.3141592653589793E1, 0.123E~2): ~0.38641577339154455E4 ~0.38641577339154455E4 +(~0.123E4, 0.3141592653589793E1, 0.22250738585072014E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.123E4, 0.3141592653589793E1, 0.11125369292536007E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.123E4, 0.3141592653589793E1, 0.5E~323): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.123E4, 0.3141592653589793E1, 0.0): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.123E4, 0.3141592653589793E1, ~0.123E4): ~0.5094158963915445E4 ~0.5094158963915445E4 +(~0.123E4, 0.3141592653589793E1, ~0.123E2): ~0.38764589639154456E4 ~0.38764589639154456E4 +(~0.123E4, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.38673005565690355E4 +(~0.123E4, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.38668772457439045E4 ~0.38668772457439045E4 +(~0.123E4, 0.3141592653589793E1, ~0.123E1): ~0.38653889639154454E4 ~0.38653889639154454E4 +(~0.123E4, 0.3141592653589793E1, ~0.123): ~0.38642819639154454E4 ~0.38642819639154454E4 +(~0.123E4, 0.3141592653589793E1, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154457E4 +(~0.123E4, 0.3141592653589793E1, ~0.22250738585072014E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.123E4, 0.3141592653589793E1, ~0.11125369292536007E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.123E4, 0.3141592653589793E1, ~0.5E~323): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.123E4, 0.3141592653589793E1, ~0.0): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.123E4, 0.2718281828459045E1, 0.123E4): ~0.21134866490046256E4 ~0.21134866490046256E4 +(~0.123E4, 0.2718281828459045E1, 0.123E2): ~0.33311866490046255E4 ~0.33311866490046255E4 +(~0.123E4, 0.2718281828459045E1, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.33403450563510355E4 +(~0.123E4, 0.2718281828459045E1, 0.2718281828459045E1): ~0.33407683671761665E4 ~0.33407683671761665E4 +(~0.123E4, 0.2718281828459045E1, 0.123E1): ~0.33422566490046256E4 ~0.33422566490046256E4 +(~0.123E4, 0.2718281828459045E1, 0.123): ~0.33433636490046256E4 ~0.33433636490046256E4 +(~0.123E4, 0.2718281828459045E1, 0.123E~2): ~0.33434854190046253E4 ~0.33434854190046253E4 +(~0.123E4, 0.2718281828459045E1, 0.22250738585072014E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.123E4, 0.2718281828459045E1, 0.11125369292536007E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.123E4, 0.2718281828459045E1, 0.5E~323): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.123E4, 0.2718281828459045E1, 0.0): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.123E4, 0.2718281828459045E1, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004625E4 +(~0.123E4, 0.2718281828459045E1, ~0.123E2): ~0.33557866490046254E4 ~0.33557866490046254E4 +(~0.123E4, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.33466282416582153E4 ~0.33466282416582153E4 +(~0.123E4, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330843E4 +(~0.123E4, 0.2718281828459045E1, ~0.123E1): ~0.33447166490046257E4 ~0.33447166490046257E4 +(~0.123E4, 0.2718281828459045E1, ~0.123): ~0.33436096490046257E4 ~0.33436096490046257E4 +(~0.123E4, 0.2718281828459045E1, ~0.123E~2): ~0.33434878790046255E4 ~0.33434878790046255E4 +(~0.123E4, 0.2718281828459045E1, ~0.22250738585072014E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.123E4, 0.2718281828459045E1, ~0.11125369292536007E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.123E4, 0.2718281828459045E1, ~0.5E~323): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.123E4, 0.2718281828459045E1, ~0.0): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.123E4, 0.123E1, 0.123E4): ~0.2829E3 ~0.2829E3 +(~0.123E4, 0.123E1, 0.123E2): ~0.15006E4 ~0.15006E4 +(~0.123E4, 0.123E1, 0.3141592653589793E1): ~0.15097584073464102E4 ~0.15097584073464102E4 +(~0.123E4, 0.123E1, 0.2718281828459045E1): ~0.1510181718171541E4 ~0.1510181718171541E4 +(~0.123E4, 0.123E1, 0.123E1): ~0.151167E4 ~0.151167E4 +(~0.123E4, 0.123E1, 0.123): ~0.1512777E4 ~0.1512777E4 +(~0.123E4, 0.123E1, 0.123E~2): ~0.151289877E4 ~0.151289877E4 +(~0.123E4, 0.123E1, 0.22250738585072014E~307): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, 0.11125369292536007E~307): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, 0.5E~323): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, 0.0): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, ~0.123E4): ~0.27429E4 ~0.27429E4 +(~0.123E4, 0.123E1, ~0.123E2): ~0.15252E4 ~0.15252E4 +(~0.123E4, 0.123E1, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.15160415926535898E4 +(~0.123E4, 0.123E1, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.1515618281828459E4 +(~0.123E4, 0.123E1, ~0.123E1): ~0.15141299999999999E4 ~0.15141299999999999E4 +(~0.123E4, 0.123E1, ~0.123): ~0.1513023E4 ~0.1513023E4 +(~0.123E4, 0.123E1, ~0.123E~2): ~0.151290123E4 ~0.151290123E4 +(~0.123E4, 0.123E1, ~0.22250738585072014E~307): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, ~0.11125369292536007E~307): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, ~0.5E~323): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123E1, ~0.0): ~0.15129E4 ~0.15129E4 +(~0.123E4, 0.123, 0.123E4): 0.107871E4 0.107871E4 +(~0.123E4, 0.123, 0.123E2): ~0.13899E3 ~0.13899E3 +(~0.123E4, 0.123, 0.3141592653589793E1): ~0.1481484073464102E3 ~0.1481484073464102E3 +(~0.123E4, 0.123, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154097E3 +(~0.123E4, 0.123, 0.123E1): ~0.15006E3 ~0.15006E3 +(~0.123E4, 0.123, 0.123): ~0.151167E3 ~0.151167E3 +(~0.123E4, 0.123, 0.123E~2): ~0.15128877E3 ~0.15128877E3 +(~0.123E4, 0.123, 0.22250738585072014E~307): ~0.15129E3 ~0.15129E3 +(~0.123E4, 0.123, 0.11125369292536007E~307): ~0.15129E3 ~0.15129E3 +(~0.123E4, 0.123, 0.5E~323): ~0.15129E3 ~0.15129E3 +(~0.123E4, 0.123, 0.0): ~0.15129E3 ~0.15129E3 +(~0.123E4, 0.123, ~0.123E4): ~0.138129E4 ~0.138129E4 +(~0.123E4, 0.123, ~0.123E2): ~0.16359E3 ~0.16359E3 +(~0.123E4, 0.123, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.1544315926535898E3 +(~0.123E4, 0.123, ~0.2718281828459045E1): ~0.15400828182845905E3 ~0.15400828182845905E3 +(~0.123E4, 0.123, ~0.123E1): ~0.15252E3 ~0.15252E3 +(~0.123E4, 0.123, ~0.123): ~0.151413E3 ~0.151413E3 +(~0.123E4, 0.123, ~0.123E~2): ~0.15129122999999998E3 ~0.15129122999999998E3 +(~0.123E4, 0.123, ~0.22250738585072014E~307): ~0.15129E3 ~0.15129E3 +(~0.123E4, 0.123, ~0.11125369292536007E~307): ~0.15129E3 ~0.15129E3 +(~0.123E4, 0.123, ~0.5E~323): ~0.15129E3 ~0.15129E3 +(~0.123E4, 0.123, ~0.0): ~0.15129E3 ~0.15129E3 +(~0.123E4, 0.123E~2, 0.123E4): 0.12284871E4 0.12284871E4 +(~0.123E4, 0.123E~2, 0.123E2): 0.107871E2 0.107871E2 +(~0.123E4, 0.123E~2, 0.3141592653589793E1): 0.16286926535897932E1 0.16286926535897932E1 +(~0.123E4, 0.123E~2, 0.2718281828459045E1): 0.12053818284590452E1 0.12053818284590452E1 +(~0.123E4, 0.123E~2, 0.123E1): ~0.2829 ~0.2829 +(~0.123E4, 0.123E~2, 0.123): ~0.13899E1 ~0.13899E1 +(~0.123E4, 0.123E~2, 0.123E~2): ~0.151167E1 ~0.151167E1 +(~0.123E4, 0.123E~2, 0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(~0.123E4, 0.123E~2, 0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(~0.123E4, 0.123E~2, 0.5E~323): ~0.15129E1 ~0.15129E1 +(~0.123E4, 0.123E~2, 0.0): ~0.15129E1 ~0.15129E1 +(~0.123E4, 0.123E~2, ~0.123E4): ~0.12315129E4 ~0.12315129E4 +(~0.123E4, 0.123E~2, ~0.123E2): ~0.138129E2 ~0.138129E2 +(~0.123E4, 0.123E~2, ~0.3141592653589793E1): ~0.4654492653589793E1 ~0.4654492653589793E1 +(~0.123E4, 0.123E~2, ~0.2718281828459045E1): ~0.4231181828459045E1 ~0.4231181828459045E1 +(~0.123E4, 0.123E~2, ~0.123E1): ~0.27429E1 ~0.27429E1 +(~0.123E4, 0.123E~2, ~0.123): ~0.16359E1 ~0.16359E1 +(~0.123E4, 0.123E~2, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(~0.123E4, 0.123E~2, ~0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(~0.123E4, 0.123E~2, ~0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(~0.123E4, 0.123E~2, ~0.5E~323): ~0.15129E1 ~0.15129E1 +(~0.123E4, 0.123E~2, ~0.0): ~0.15129E1 ~0.15129E1 +(~0.123E4, 0.22250738585072014E~307, 0.5E~323): ~0.27368408459638577E~304 ~0.27368408459638577E~304 +(~0.123E4, 0.22250738585072014E~307, ~0.5E~323): ~0.27368408459638577E~304 ~0.27368408459638577E~304 +(~0.123E4, 0.11125369292536007E~307, 0.5E~323): ~0.13684204229819289E~304 ~0.13684204229819289E~304 +(~0.123E4, 0.11125369292536007E~307, ~0.5E~323): ~0.13684204229819289E~304 ~0.13684204229819289E~304 +(~0.123E4, ~0.17976931348623157E309, 0.17976931348623157E309): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.8988465674311579E308): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.123E4): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.123E2): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.3141592653589793E1): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.2718281828459045E1): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.123E1): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.123): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.123E~2): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.5E~323): inf inf +(~0.123E4, ~0.17976931348623157E309, 0.0): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.123E4): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.123E2): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.123E1): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.123): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.123E~2): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.5E~323): inf inf +(~0.123E4, ~0.17976931348623157E309, ~0.0): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.17976931348623157E309): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.8988465674311579E308): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.123E4): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.123E2): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.3141592653589793E1): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.2718281828459045E1): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.123E1): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.123): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.123E~2): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.5E~323): inf inf +(~0.123E4, ~0.8988465674311579E308, 0.0): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.17976931348623157E309): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.8988465674311579E308): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.123E4): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.123E2): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.123E1): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.123): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.123E~2): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.5E~323): inf inf +(~0.123E4, ~0.8988465674311579E308, ~0.0): inf inf +(~0.123E4, ~0.123E4, 0.123E2): 0.15129123E7 0.15129123E7 +(~0.123E4, ~0.123E4, 0.3141592653589793E1): 0.15129031415926537E7 0.15129031415926537E7 +(~0.123E4, ~0.123E4, 0.2718281828459045E1): 0.15129027182818286E7 0.15129027182818286E7 +(~0.123E4, ~0.123E4, 0.123E1): 0.151290123E7 0.151290123E7 +(~0.123E4, ~0.123E4, 0.123): 0.1512900123E7 0.1512900123E7 +(~0.123E4, ~0.123E4, 0.123E~2): 0.151290000123E7 0.151290000123E7 +(~0.123E4, ~0.123E4, ~0.123E2): 0.15128877E7 0.15128877E7 +(~0.123E4, ~0.123E4, ~0.3141592653589793E1): 0.15128968584073463E7 0.15128968584073463E7 +(~0.123E4, ~0.123E4, ~0.2718281828459045E1): 0.15128972817181714E7 0.15128972817181714E7 +(~0.123E4, ~0.123E4, ~0.123E1): 0.151289877E7 0.151289877E7 +(~0.123E4, ~0.123E4, ~0.123): 0.1512899877E7 0.1512899877E7 +(~0.123E4, ~0.123E4, ~0.123E~2): 0.151289999877E7 0.151289999877E7 +(~0.123E4, ~0.123E2, 0.123E4): 0.16359E5 0.16359E5 +(~0.123E4, ~0.123E2, 0.123E2): 0.15141300000000001E5 0.15141300000000001E5 +(~0.123E4, ~0.123E2, 0.3141592653589793E1): 0.1513214159265359E5 0.1513214159265359E5 +(~0.123E4, ~0.123E2, 0.2718281828459045E1): 0.1513171828182846E5 0.1513171828182846E5 +(~0.123E4, ~0.123E2, 0.123E1): 0.15130230000000001E5 0.15130230000000001E5 +(~0.123E4, ~0.123E2, 0.123): 0.15129123000000001E5 0.15129123000000001E5 +(~0.123E4, ~0.123E2, 0.123E~2): 0.15129001230000002E5 0.15129001230000002E5 +(~0.123E4, ~0.123E2, 0.22250738585072014E~307): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, 0.11125369292536007E~307): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, 0.5E~323): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, 0.0): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, ~0.123E4): 0.13899E5 0.13899E5 +(~0.123E4, ~0.123E2, ~0.123E2): 0.151167E5 0.151167E5 +(~0.123E4, ~0.123E2, ~0.3141592653589793E1): 0.15125858407346412E5 0.15125858407346412E5 +(~0.123E4, ~0.123E2, ~0.2718281828459045E1): 0.15126281718171542E5 0.15126281718171542E5 +(~0.123E4, ~0.123E2, ~0.123E1): 0.1512777E5 0.1512777E5 +(~0.123E4, ~0.123E2, ~0.123): 0.15128877E5 0.15128877E5 +(~0.123E4, ~0.123E2, ~0.123E~2): 0.1512899877E5 0.1512899877E5 +(~0.123E4, ~0.123E2, ~0.22250738585072014E~307): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, ~0.11125369292536007E~307): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, ~0.5E~323): 0.15129E5 0.15129E5 +(~0.123E4, ~0.123E2, ~0.0): 0.15129E5 0.15129E5 +(~0.123E4, ~0.3141592653589793E1, 0.123E4): 0.5094158963915445E4 0.5094158963915445E4 +(~0.123E4, ~0.3141592653589793E1, 0.123E2): 0.38764589639154456E4 0.38764589639154456E4 +(~0.123E4, ~0.3141592653589793E1, 0.3141592653589793E1): 0.38673005565690355E4 0.38673005565690355E4 +(~0.123E4, ~0.3141592653589793E1, 0.2718281828459045E1): 0.38668772457439045E4 0.38668772457439045E4 +(~0.123E4, ~0.3141592653589793E1, 0.123E1): 0.38653889639154454E4 0.38653889639154454E4 +(~0.123E4, ~0.3141592653589793E1, 0.123): 0.38642819639154454E4 0.38642819639154454E4 +(~0.123E4, ~0.3141592653589793E1, 0.123E~2): 0.38641601939154457E4 0.38641601939154457E4 +(~0.123E4, ~0.3141592653589793E1, 0.22250738585072014E~307): 0.38641589639154454E4 0.38641589639154454E4 +(~0.123E4, ~0.3141592653589793E1, 0.11125369292536007E~307): 0.38641589639154454E4 0.38641589639154454E4 +(~0.123E4, ~0.3141592653589793E1, 0.5E~323): 0.38641589639154454E4 0.38641589639154454E4 +(~0.123E4, ~0.3141592653589793E1, 0.0): 0.38641589639154454E4 0.38641589639154454E4 +(~0.123E4, ~0.3141592653589793E1, ~0.123E4): 0.26341589639154454E4 0.26341589639154454E4 +(~0.123E4, ~0.3141592653589793E1, ~0.123E2): 0.38518589639154457E4 0.38518589639154457E4 +(~0.123E4, ~0.3141592653589793E1, ~0.3141592653589793E1): 0.38610173712618557E4 0.38610173712618557E4 +(~0.123E4, ~0.3141592653589793E1, ~0.2718281828459045E1): 0.38614406820869863E4 0.38614406820869863E4 +(~0.123E4, ~0.3141592653589793E1, ~0.123E1): 0.38629289639154454E4 0.38629289639154454E4 +(~0.123E4, ~0.3141592653589793E1, ~0.123): 0.38640359639154453E4 0.38640359639154453E4 +(~0.123E4, ~0.3141592653589793E1, ~0.123E~2): 0.38641577339154455E4 0.38641577339154455E4 +(~0.123E4, ~0.3141592653589793E1, ~0.22250738585072014E~307): 0.38641589639154454E4 0.38641589639154454E4 +(~0.123E4, ~0.3141592653589793E1, ~0.11125369292536007E~307): 0.38641589639154454E4 0.38641589639154454E4 +(~0.123E4, ~0.3141592653589793E1, ~0.5E~323): 0.38641589639154454E4 0.38641589639154454E4 +(~0.123E4, ~0.3141592653589793E1, ~0.0): 0.38641589639154454E4 0.38641589639154454E4 +(~0.123E4, ~0.2718281828459045E1, 0.123E4): 0.4573486649004625E4 0.4573486649004625E4 +(~0.123E4, ~0.2718281828459045E1, 0.123E2): 0.33557866490046254E4 0.33557866490046254E4 +(~0.123E4, ~0.2718281828459045E1, 0.3141592653589793E1): 0.33466282416582153E4 0.33466282416582153E4 +(~0.123E4, ~0.2718281828459045E1, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330843E4 +(~0.123E4, ~0.2718281828459045E1, 0.123E1): 0.33447166490046257E4 0.33447166490046257E4 +(~0.123E4, ~0.2718281828459045E1, 0.123): 0.33436096490046257E4 0.33436096490046257E4 +(~0.123E4, ~0.2718281828459045E1, 0.123E~2): 0.33434878790046255E4 0.33434878790046255E4 +(~0.123E4, ~0.2718281828459045E1, 0.22250738585072014E~307): 0.33434866490046256E4 0.33434866490046256E4 +(~0.123E4, ~0.2718281828459045E1, 0.11125369292536007E~307): 0.33434866490046256E4 0.33434866490046256E4 +(~0.123E4, ~0.2718281828459045E1, 0.5E~323): 0.33434866490046256E4 0.33434866490046256E4 +(~0.123E4, ~0.2718281828459045E1, 0.0): 0.33434866490046256E4 0.33434866490046256E4 +(~0.123E4, ~0.2718281828459045E1, ~0.123E4): 0.21134866490046256E4 0.21134866490046256E4 +(~0.123E4, ~0.2718281828459045E1, ~0.123E2): 0.33311866490046255E4 0.33311866490046255E4 +(~0.123E4, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.33403450563510355E4 0.33403450563510355E4 +(~0.123E4, ~0.2718281828459045E1, ~0.2718281828459045E1): 0.33407683671761665E4 0.33407683671761665E4 +(~0.123E4, ~0.2718281828459045E1, ~0.123E1): 0.33422566490046256E4 0.33422566490046256E4 +(~0.123E4, ~0.2718281828459045E1, ~0.123): 0.33433636490046256E4 0.33433636490046256E4 +(~0.123E4, ~0.2718281828459045E1, ~0.123E~2): 0.33434854190046253E4 0.33434854190046253E4 +(~0.123E4, ~0.2718281828459045E1, ~0.22250738585072014E~307): 0.33434866490046256E4 0.33434866490046256E4 +(~0.123E4, ~0.2718281828459045E1, ~0.11125369292536007E~307): 0.33434866490046256E4 0.33434866490046256E4 +(~0.123E4, ~0.2718281828459045E1, ~0.5E~323): 0.33434866490046256E4 0.33434866490046256E4 +(~0.123E4, ~0.2718281828459045E1, ~0.0): 0.33434866490046256E4 0.33434866490046256E4 +(~0.123E4, ~0.123E1, 0.123E4): 0.27429E4 0.27429E4 +(~0.123E4, ~0.123E1, 0.123E2): 0.15252E4 0.15252E4 +(~0.123E4, ~0.123E1, 0.3141592653589793E1): 0.15160415926535898E4 0.15160415926535898E4 +(~0.123E4, ~0.123E1, 0.2718281828459045E1): 0.1515618281828459E4 0.1515618281828459E4 +(~0.123E4, ~0.123E1, 0.123E1): 0.15141299999999999E4 0.15141299999999999E4 +(~0.123E4, ~0.123E1, 0.123): 0.1513023E4 0.1513023E4 +(~0.123E4, ~0.123E1, 0.123E~2): 0.151290123E4 0.151290123E4 +(~0.123E4, ~0.123E1, 0.22250738585072014E~307): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, 0.11125369292536007E~307): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, 0.5E~323): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, 0.0): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, ~0.123E4): 0.2829E3 0.2829E3 +(~0.123E4, ~0.123E1, ~0.123E2): 0.15006E4 0.15006E4 +(~0.123E4, ~0.123E1, ~0.3141592653589793E1): 0.15097584073464102E4 0.15097584073464102E4 +(~0.123E4, ~0.123E1, ~0.2718281828459045E1): 0.1510181718171541E4 0.1510181718171541E4 +(~0.123E4, ~0.123E1, ~0.123E1): 0.151167E4 0.151167E4 +(~0.123E4, ~0.123E1, ~0.123): 0.1512777E4 0.1512777E4 +(~0.123E4, ~0.123E1, ~0.123E~2): 0.151289877E4 0.151289877E4 +(~0.123E4, ~0.123E1, ~0.22250738585072014E~307): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, ~0.11125369292536007E~307): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, ~0.5E~323): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123E1, ~0.0): 0.15129E4 0.15129E4 +(~0.123E4, ~0.123, 0.123E4): 0.138129E4 0.138129E4 +(~0.123E4, ~0.123, 0.123E2): 0.16359E3 0.16359E3 +(~0.123E4, ~0.123, 0.3141592653589793E1): 0.1544315926535898E3 0.1544315926535898E3 +(~0.123E4, ~0.123, 0.2718281828459045E1): 0.15400828182845905E3 0.15400828182845905E3 +(~0.123E4, ~0.123, 0.123E1): 0.15252E3 0.15252E3 +(~0.123E4, ~0.123, 0.123): 0.151413E3 0.151413E3 +(~0.123E4, ~0.123, 0.123E~2): 0.15129122999999998E3 0.15129122999999998E3 +(~0.123E4, ~0.123, 0.22250738585072014E~307): 0.15129E3 0.15129E3 +(~0.123E4, ~0.123, 0.11125369292536007E~307): 0.15129E3 0.15129E3 +(~0.123E4, ~0.123, 0.5E~323): 0.15129E3 0.15129E3 +(~0.123E4, ~0.123, 0.0): 0.15129E3 0.15129E3 +(~0.123E4, ~0.123, ~0.123E4): ~0.107871E4 ~0.107871E4 +(~0.123E4, ~0.123, ~0.123E2): 0.13899E3 0.13899E3 +(~0.123E4, ~0.123, ~0.3141592653589793E1): 0.1481484073464102E3 0.1481484073464102E3 +(~0.123E4, ~0.123, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154097E3 +(~0.123E4, ~0.123, ~0.123E1): 0.15006E3 0.15006E3 +(~0.123E4, ~0.123, ~0.123): 0.151167E3 0.151167E3 +(~0.123E4, ~0.123, ~0.123E~2): 0.15128877E3 0.15128877E3 +(~0.123E4, ~0.123, ~0.22250738585072014E~307): 0.15129E3 0.15129E3 +(~0.123E4, ~0.123, ~0.11125369292536007E~307): 0.15129E3 0.15129E3 +(~0.123E4, ~0.123, ~0.5E~323): 0.15129E3 0.15129E3 +(~0.123E4, ~0.123, ~0.0): 0.15129E3 0.15129E3 +(~0.123E4, ~0.123E~2, 0.123E4): 0.12315129E4 0.12315129E4 +(~0.123E4, ~0.123E~2, 0.123E2): 0.138129E2 0.138129E2 +(~0.123E4, ~0.123E~2, 0.3141592653589793E1): 0.4654492653589793E1 0.4654492653589793E1 +(~0.123E4, ~0.123E~2, 0.2718281828459045E1): 0.4231181828459045E1 0.4231181828459045E1 +(~0.123E4, ~0.123E~2, 0.123E1): 0.27429E1 0.27429E1 +(~0.123E4, ~0.123E~2, 0.123): 0.16359E1 0.16359E1 +(~0.123E4, ~0.123E~2, 0.123E~2): 0.151413E1 0.151413E1 +(~0.123E4, ~0.123E~2, 0.22250738585072014E~307): 0.15129E1 0.15129E1 +(~0.123E4, ~0.123E~2, 0.11125369292536007E~307): 0.15129E1 0.15129E1 +(~0.123E4, ~0.123E~2, 0.5E~323): 0.15129E1 0.15129E1 +(~0.123E4, ~0.123E~2, 0.0): 0.15129E1 0.15129E1 +(~0.123E4, ~0.123E~2, ~0.123E4): ~0.12284871E4 ~0.12284871E4 +(~0.123E4, ~0.123E~2, ~0.123E2): ~0.107871E2 ~0.107871E2 +(~0.123E4, ~0.123E~2, ~0.3141592653589793E1): ~0.16286926535897932E1 ~0.16286926535897932E1 +(~0.123E4, ~0.123E~2, ~0.2718281828459045E1): ~0.12053818284590452E1 ~0.12053818284590452E1 +(~0.123E4, ~0.123E~2, ~0.123E1): 0.2829 0.2829 +(~0.123E4, ~0.123E~2, ~0.123): 0.13899E1 0.13899E1 +(~0.123E4, ~0.123E~2, ~0.123E~2): 0.151167E1 0.151167E1 +(~0.123E4, ~0.123E~2, ~0.22250738585072014E~307): 0.15129E1 0.15129E1 +(~0.123E4, ~0.123E~2, ~0.11125369292536007E~307): 0.15129E1 0.15129E1 +(~0.123E4, ~0.123E~2, ~0.5E~323): 0.15129E1 0.15129E1 +(~0.123E4, ~0.123E~2, ~0.0): 0.15129E1 0.15129E1 +(~0.123E4, ~0.22250738585072014E~307, 0.5E~323): 0.27368408459638577E~304 0.27368408459638577E~304 +(~0.123E4, ~0.22250738585072014E~307, ~0.5E~323): 0.27368408459638577E~304 0.27368408459638577E~304 +(~0.123E4, ~0.11125369292536007E~307, 0.5E~323): 0.13684204229819289E~304 0.13684204229819289E~304 +(~0.123E4, ~0.11125369292536007E~307, ~0.5E~323): 0.13684204229819289E~304 0.13684204229819289E~304 +(~0.123E2, 0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.123E4): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.123E2): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.123E1): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.123): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.123E~2): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.5E~323): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, 0.0): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.123E4): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.123E2): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.123E1): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.123): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(~0.123E2, 0.17976931348623157E309, ~0.0): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.17976931348623157E309): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.8988465674311579E308): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.123E4): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.123E2): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.123E1): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.123): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.123E~2): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.5E~323): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, 0.0): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.123E4): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.123E2): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.123E1): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.123): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(~0.123E2, 0.8988465674311579E308, ~0.0): ~inf ~inf +(~0.123E2, 0.123E4, 0.123E4): ~0.13899E5 ~0.13899E5 +(~0.123E2, 0.123E4, 0.123E2): ~0.151167E5 ~0.151167E5 +(~0.123E2, 0.123E4, 0.3141592653589793E1): ~0.15125858407346412E5 ~0.15125858407346412E5 +(~0.123E2, 0.123E4, 0.2718281828459045E1): ~0.15126281718171542E5 ~0.15126281718171542E5 +(~0.123E2, 0.123E4, 0.123E1): ~0.1512777E5 ~0.1512777E5 +(~0.123E2, 0.123E4, 0.123): ~0.15128877E5 ~0.15128877E5 +(~0.123E2, 0.123E4, 0.123E~2): ~0.1512899877E5 ~0.1512899877E5 +(~0.123E2, 0.123E4, 0.22250738585072014E~307): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, 0.11125369292536007E~307): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, 0.5E~323): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, 0.0): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, ~0.123E4): ~0.16359E5 ~0.16359E5 +(~0.123E2, 0.123E4, ~0.123E2): ~0.15141300000000001E5 ~0.15141300000000001E5 +(~0.123E2, 0.123E4, ~0.3141592653589793E1): ~0.1513214159265359E5 ~0.1513214159265359E5 +(~0.123E2, 0.123E4, ~0.2718281828459045E1): ~0.1513171828182846E5 ~0.1513171828182846E5 +(~0.123E2, 0.123E4, ~0.123E1): ~0.15130230000000001E5 ~0.15130230000000001E5 +(~0.123E2, 0.123E4, ~0.123): ~0.15129123000000001E5 ~0.15129123000000001E5 +(~0.123E2, 0.123E4, ~0.123E~2): ~0.15129001230000002E5 ~0.15129001230000002E5 +(~0.123E2, 0.123E4, ~0.22250738585072014E~307): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, ~0.11125369292536007E~307): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, ~0.5E~323): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E4, ~0.0): ~0.15129E5 ~0.15129E5 +(~0.123E2, 0.123E2, 0.123E4): 0.107871E4 0.107871E4 +(~0.123E2, 0.123E2, 0.123E2): ~0.13899E3 ~0.13899E3 +(~0.123E2, 0.123E2, 0.3141592653589793E1): ~0.14814840734641024E3 ~0.14814840734641024E3 +(~0.123E2, 0.123E2, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154097E3 +(~0.123E2, 0.123E2, 0.123E1): ~0.15006000000000003E3 ~0.15006000000000003E3 +(~0.123E2, 0.123E2, 0.123): ~0.15116700000000003E3 ~0.15116700000000003E3 +(~0.123E2, 0.123E2, 0.123E~2): ~0.15128877000000003E3 ~0.15128877000000003E3 +(~0.123E2, 0.123E2, 0.22250738585072014E~307): ~0.15129000000000002E3 ~0.15129000000000002E3 +(~0.123E2, 0.123E2, 0.11125369292536007E~307): ~0.15129000000000002E3 ~0.15129000000000002E3 +(~0.123E2, 0.123E2, 0.5E~323): ~0.15129000000000002E3 ~0.15129000000000002E3 +(~0.123E2, 0.123E2, 0.0): ~0.15129000000000002E3 ~0.15129000000000002E3 +(~0.123E2, 0.123E2, ~0.123E4): ~0.138129E4 ~0.138129E4 +(~0.123E2, 0.123E2, ~0.123E2): ~0.16359000000000003E3 ~0.16359000000000003E3 +(~0.123E2, 0.123E2, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.1544315926535898E3 +(~0.123E2, 0.123E2, ~0.2718281828459045E1): ~0.15400828182845908E3 ~0.15400828182845908E3 +(~0.123E2, 0.123E2, ~0.123E1): ~0.15252E3 ~0.15252E3 +(~0.123E2, 0.123E2, ~0.123): ~0.151413E3 ~0.151413E3 +(~0.123E2, 0.123E2, ~0.123E~2): ~0.15129123E3 ~0.15129123E3 +(~0.123E2, 0.123E2, ~0.22250738585072014E~307): ~0.15129000000000002E3 ~0.15129000000000002E3 +(~0.123E2, 0.123E2, ~0.11125369292536007E~307): ~0.15129000000000002E3 ~0.15129000000000002E3 +(~0.123E2, 0.123E2, ~0.5E~323): ~0.15129000000000002E3 ~0.15129000000000002E3 +(~0.123E2, 0.123E2, ~0.0): ~0.15129000000000002E3 ~0.15129000000000002E3 +(~0.123E2, 0.3141592653589793E1, 0.123E4): 0.11913584103608455E4 0.11913584103608455E4 +(~0.123E2, 0.3141592653589793E1, 0.123E2): ~0.26341589639154456E2 ~0.26341589639154456E2 +(~0.123E2, 0.3141592653589793E1, 0.3141592653589793E1): ~0.35499996985564664E2 ~0.35499996985564664E2 +(~0.123E2, 0.3141592653589793E1, 0.2718281828459045E1): ~0.3592330781069541E2 ~0.3592330781069541E2 +(~0.123E2, 0.3141592653589793E1, 0.123E1): ~0.3741158963915446E2 ~0.3741158963915446E2 +(~0.123E2, 0.3141592653589793E1, 0.123): ~0.38518589639154456E2 ~0.38518589639154456E2 +(~0.123E2, 0.3141592653589793E1, 0.123E~2): ~0.3864035963915446E2 ~0.3864035963915446E2 +(~0.123E2, 0.3141592653589793E1, 0.22250738585072014E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.123E2, 0.3141592653589793E1, 0.11125369292536007E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.123E2, 0.3141592653589793E1, 0.5E~323): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.123E2, 0.3141592653589793E1, 0.0): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.123E2, 0.3141592653589793E1, ~0.123E4): ~0.12686415896391545E4 ~0.12686415896391545E4 +(~0.123E2, 0.3141592653589793E1, ~0.123E2): ~0.5094158963915446E2 ~0.5094158963915446E2 +(~0.123E2, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274425E2 +(~0.123E2, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.413598714676135E2 +(~0.123E2, 0.3141592653589793E1, ~0.123E1): ~0.3987158963915446E2 ~0.3987158963915446E2 +(~0.123E2, 0.3141592653589793E1, ~0.123): ~0.3876458963915446E2 ~0.3876458963915446E2 +(~0.123E2, 0.3141592653589793E1, ~0.123E~2): ~0.3864281963915446E2 ~0.3864281963915446E2 +(~0.123E2, 0.3141592653589793E1, ~0.22250738585072014E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.123E2, 0.3141592653589793E1, ~0.11125369292536007E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.123E2, 0.3141592653589793E1, ~0.5E~323): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.123E2, 0.3141592653589793E1, ~0.0): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.123E2, 0.2718281828459045E1, 0.123E4): 0.11965651335099537E4 0.11965651335099537E4 +(~0.123E2, 0.2718281828459045E1, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046257E2 +(~0.123E2, 0.2718281828459045E1, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.30293273836456464E2 +(~0.123E2, 0.2718281828459045E1, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.30716584661587213E2 +(~0.123E2, 0.2718281828459045E1, 0.123E1): ~0.3220486649004626E2 ~0.3220486649004626E2 +(~0.123E2, 0.2718281828459045E1, 0.123): ~0.33311866490046256E2 ~0.33311866490046256E2 +(~0.123E2, 0.2718281828459045E1, 0.123E~2): ~0.33433636490046254E2 ~0.33433636490046254E2 +(~0.123E2, 0.2718281828459045E1, 0.22250738585072014E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.123E2, 0.2718281828459045E1, 0.11125369292536007E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.123E2, 0.2718281828459045E1, 0.5E~323): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.123E2, 0.2718281828459045E1, 0.0): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.123E2, 0.2718281828459045E1, ~0.123E4): ~0.12634348664900463E4 ~0.12634348664900463E4 +(~0.123E2, 0.2718281828459045E1, ~0.123E2): ~0.4573486649004626E2 ~0.4573486649004626E2 +(~0.123E2, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363605E2 +(~0.123E2, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.361531483185053E2 ~0.361531483185053E2 +(~0.123E2, 0.2718281828459045E1, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004626E2 +(~0.123E2, 0.2718281828459045E1, ~0.123): ~0.3355786649004626E2 ~0.3355786649004626E2 +(~0.123E2, 0.2718281828459045E1, ~0.123E~2): ~0.3343609649004625E2 ~0.3343609649004625E2 +(~0.123E2, 0.2718281828459045E1, ~0.22250738585072014E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.123E2, 0.2718281828459045E1, ~0.11125369292536007E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.123E2, 0.2718281828459045E1, ~0.5E~323): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.123E2, 0.2718281828459045E1, ~0.0): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.123E2, 0.123E1, 0.123E4): 0.1214871E4 0.1214871E4 +(~0.123E2, 0.123E1, 0.123E2): ~0.28289999999999997E1 ~0.28289999999999997E1 +(~0.123E2, 0.123E1, 0.3141592653589793E1): ~0.11987407346410208E2 ~0.11987407346410208E2 +(~0.123E2, 0.123E1, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540955E2 +(~0.123E2, 0.123E1, 0.123E1): ~0.13899000000000001E2 ~0.13899000000000001E2 +(~0.123E2, 0.123E1, 0.123): ~0.15006E2 ~0.15006E2 +(~0.123E2, 0.123E1, 0.123E~2): ~0.1512777E2 ~0.1512777E2 +(~0.123E2, 0.123E1, 0.22250738585072014E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E2, 0.123E1, 0.11125369292536007E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E2, 0.123E1, 0.5E~323): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E2, 0.123E1, 0.0): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E2, 0.123E1, ~0.123E4): ~0.1245129E4 ~0.1245129E4 +(~0.123E2, 0.123E1, ~0.123E2): ~0.27429000000000002E2 ~0.27429000000000002E2 +(~0.123E2, 0.123E1, ~0.3141592653589793E1): ~0.18270592653589794E2 ~0.18270592653589794E2 +(~0.123E2, 0.123E1, ~0.2718281828459045E1): ~0.17847281828459046E2 ~0.17847281828459046E2 +(~0.123E2, 0.123E1, ~0.123E1): ~0.16359E2 ~0.16359E2 +(~0.123E2, 0.123E1, ~0.123): ~0.15252E2 ~0.15252E2 +(~0.123E2, 0.123E1, ~0.123E~2): ~0.15130230000000001E2 ~0.15130230000000001E2 +(~0.123E2, 0.123E1, ~0.22250738585072014E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E2, 0.123E1, ~0.11125369292536007E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E2, 0.123E1, ~0.5E~323): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E2, 0.123E1, ~0.0): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E2, 0.123, 0.123E4): 0.12284871E4 0.12284871E4 +(~0.123E2, 0.123, 0.123E2): 0.107871E2 0.107871E2 +(~0.123E2, 0.123, 0.3141592653589793E1): 0.1628692653589793E1 0.1628692653589793E1 +(~0.123E2, 0.123, 0.2718281828459045E1): 0.1205381828459045E1 0.1205381828459045E1 +(~0.123E2, 0.123, 0.123E1): ~0.2829000000000001 ~0.2829000000000001 +(~0.123E2, 0.123, 0.123): ~0.13899000000000001E1 ~0.13899000000000001E1 +(~0.123E2, 0.123, 0.123E~2): ~0.151167E1 ~0.151167E1 +(~0.123E2, 0.123, 0.22250738585072014E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123E2, 0.123, 0.11125369292536007E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123E2, 0.123, 0.5E~323): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123E2, 0.123, 0.0): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123E2, 0.123, ~0.123E4): ~0.12315129E4 ~0.12315129E4 +(~0.123E2, 0.123, ~0.123E2): ~0.138129E2 ~0.138129E2 +(~0.123E2, 0.123, ~0.3141592653589793E1): ~0.4654492653589793E1 ~0.4654492653589793E1 +(~0.123E2, 0.123, ~0.2718281828459045E1): ~0.4231181828459045E1 ~0.4231181828459045E1 +(~0.123E2, 0.123, ~0.123E1): ~0.27429E1 ~0.27429E1 +(~0.123E2, 0.123, ~0.123): ~0.16359000000000001E1 ~0.16359000000000001E1 +(~0.123E2, 0.123, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(~0.123E2, 0.123, ~0.22250738585072014E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123E2, 0.123, ~0.11125369292536007E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123E2, 0.123, ~0.5E~323): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123E2, 0.123, ~0.0): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123E2, 0.123E~2, 0.123E4): 0.1229984871E4 0.1229984871E4 +(~0.123E2, 0.123E~2, 0.123E2): 0.12284871E2 0.12284871E2 +(~0.123E2, 0.123E~2, 0.3141592653589793E1): 0.3126463653589793E1 0.3126463653589793E1 +(~0.123E2, 0.123E~2, 0.2718281828459045E1): 0.2703152828459045E1 0.2703152828459045E1 +(~0.123E2, 0.123E~2, 0.123E1): 0.1214871E1 0.1214871E1 +(~0.123E2, 0.123E~2, 0.123): 0.107871 0.107871 +(~0.123E2, 0.123E~2, 0.123E~2): ~0.13899E~1 ~0.13899E~1 +(~0.123E2, 0.123E~2, 0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123E2, 0.123E~2, 0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123E2, 0.123E~2, 0.5E~323): ~0.15129E~1 ~0.15129E~1 +(~0.123E2, 0.123E~2, 0.0): ~0.15129E~1 ~0.15129E~1 +(~0.123E2, 0.123E~2, ~0.123E4): ~0.1230015129E4 ~0.1230015129E4 +(~0.123E2, 0.123E~2, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(~0.123E2, 0.123E~2, ~0.3141592653589793E1): ~0.3156721653589793E1 ~0.3156721653589793E1 +(~0.123E2, 0.123E~2, ~0.2718281828459045E1): ~0.2733410828459045E1 ~0.2733410828459045E1 +(~0.123E2, 0.123E~2, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(~0.123E2, 0.123E~2, ~0.123): ~0.138129 ~0.138129 +(~0.123E2, 0.123E~2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359000000000002E~1 +(~0.123E2, 0.123E~2, ~0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123E2, 0.123E~2, ~0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123E2, 0.123E~2, ~0.5E~323): ~0.15129E~1 ~0.15129E~1 +(~0.123E2, 0.123E~2, ~0.0): ~0.15129E~1 ~0.15129E~1 +(~0.123E2, 0.22250738585072014E~307, 0.5E~323): ~0.2736840845963858E~306 ~0.2736840845963858E~306 +(~0.123E2, 0.22250738585072014E~307, ~0.5E~323): ~0.2736840845963858E~306 ~0.2736840845963858E~306 +(~0.123E2, 0.11125369292536007E~307, 0.5E~323): ~0.1368420422981929E~306 ~0.1368420422981929E~306 +(~0.123E2, 0.11125369292536007E~307, ~0.5E~323): ~0.1368420422981929E~306 ~0.1368420422981929E~306 +(~0.123E2, 0.5E~323, 0.22250738585072014E~307): 0.22250738585071955E~307 0.22250738585071955E~307 +(~0.123E2, 0.5E~323, 0.11125369292536007E~307): 0.1112536929253595E~307 0.1112536929253595E~307 +(~0.123E2, 0.5E~323, 0.5E~323): ~0.54E~322 ~0.54E~322 +(~0.123E2, 0.5E~323, 0.0): ~0.6E~322 ~0.6E~322 +(~0.123E2, 0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072073E~307 ~0.22250738585072073E~307 +(~0.123E2, 0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536066E~307 ~0.11125369292536066E~307 +(~0.123E2, 0.5E~323, ~0.5E~323): ~0.64E~322 ~0.64E~322 +(~0.123E2, 0.5E~323, ~0.0): ~0.6E~322 ~0.6E~322 +(~0.123E2, ~0.17976931348623157E309, 0.17976931348623157E309): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.8988465674311579E308): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.123E4): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.123E2): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.3141592653589793E1): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.2718281828459045E1): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.123E1): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.123): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.123E~2): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.5E~323): inf inf +(~0.123E2, ~0.17976931348623157E309, 0.0): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.123E4): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.123E2): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.123E1): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.123): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.123E~2): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.5E~323): inf inf +(~0.123E2, ~0.17976931348623157E309, ~0.0): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.17976931348623157E309): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.8988465674311579E308): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.123E4): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.123E2): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.3141592653589793E1): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.2718281828459045E1): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.123E1): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.123): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.123E~2): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.5E~323): inf inf +(~0.123E2, ~0.8988465674311579E308, 0.0): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.17976931348623157E309): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.8988465674311579E308): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.123E4): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.123E2): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.123E1): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.123): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.123E~2): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.5E~323): inf inf +(~0.123E2, ~0.8988465674311579E308, ~0.0): inf inf +(~0.123E2, ~0.123E4, 0.123E4): 0.16359E5 0.16359E5 +(~0.123E2, ~0.123E4, 0.123E2): 0.15141300000000001E5 0.15141300000000001E5 +(~0.123E2, ~0.123E4, 0.3141592653589793E1): 0.1513214159265359E5 0.1513214159265359E5 +(~0.123E2, ~0.123E4, 0.2718281828459045E1): 0.1513171828182846E5 0.1513171828182846E5 +(~0.123E2, ~0.123E4, 0.123E1): 0.15130230000000001E5 0.15130230000000001E5 +(~0.123E2, ~0.123E4, 0.123): 0.15129123000000001E5 0.15129123000000001E5 +(~0.123E2, ~0.123E4, 0.123E~2): 0.15129001230000002E5 0.15129001230000002E5 +(~0.123E2, ~0.123E4, 0.22250738585072014E~307): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, 0.11125369292536007E~307): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, 0.5E~323): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, 0.0): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, ~0.123E4): 0.13899E5 0.13899E5 +(~0.123E2, ~0.123E4, ~0.123E2): 0.151167E5 0.151167E5 +(~0.123E2, ~0.123E4, ~0.3141592653589793E1): 0.15125858407346412E5 0.15125858407346412E5 +(~0.123E2, ~0.123E4, ~0.2718281828459045E1): 0.15126281718171542E5 0.15126281718171542E5 +(~0.123E2, ~0.123E4, ~0.123E1): 0.1512777E5 0.1512777E5 +(~0.123E2, ~0.123E4, ~0.123): 0.15128877E5 0.15128877E5 +(~0.123E2, ~0.123E4, ~0.123E~2): 0.1512899877E5 0.1512899877E5 +(~0.123E2, ~0.123E4, ~0.22250738585072014E~307): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, ~0.11125369292536007E~307): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, ~0.5E~323): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E4, ~0.0): 0.15129E5 0.15129E5 +(~0.123E2, ~0.123E2, 0.123E4): 0.138129E4 0.138129E4 +(~0.123E2, ~0.123E2, 0.123E2): 0.16359000000000003E3 0.16359000000000003E3 +(~0.123E2, ~0.123E2, 0.3141592653589793E1): 0.1544315926535898E3 0.1544315926535898E3 +(~0.123E2, ~0.123E2, 0.2718281828459045E1): 0.15400828182845908E3 0.15400828182845908E3 +(~0.123E2, ~0.123E2, 0.123E1): 0.15252E3 0.15252E3 +(~0.123E2, ~0.123E2, 0.123): 0.151413E3 0.151413E3 +(~0.123E2, ~0.123E2, 0.123E~2): 0.15129123E3 0.15129123E3 +(~0.123E2, ~0.123E2, 0.22250738585072014E~307): 0.15129000000000002E3 0.15129000000000002E3 +(~0.123E2, ~0.123E2, 0.11125369292536007E~307): 0.15129000000000002E3 0.15129000000000002E3 +(~0.123E2, ~0.123E2, 0.5E~323): 0.15129000000000002E3 0.15129000000000002E3 +(~0.123E2, ~0.123E2, 0.0): 0.15129000000000002E3 0.15129000000000002E3 +(~0.123E2, ~0.123E2, ~0.123E4): ~0.107871E4 ~0.107871E4 +(~0.123E2, ~0.123E2, ~0.123E2): 0.13899E3 0.13899E3 +(~0.123E2, ~0.123E2, ~0.3141592653589793E1): 0.14814840734641024E3 0.14814840734641024E3 +(~0.123E2, ~0.123E2, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154097E3 +(~0.123E2, ~0.123E2, ~0.123E1): 0.15006000000000003E3 0.15006000000000003E3 +(~0.123E2, ~0.123E2, ~0.123): 0.15116700000000003E3 0.15116700000000003E3 +(~0.123E2, ~0.123E2, ~0.123E~2): 0.15128877000000003E3 0.15128877000000003E3 +(~0.123E2, ~0.123E2, ~0.22250738585072014E~307): 0.15129000000000002E3 0.15129000000000002E3 +(~0.123E2, ~0.123E2, ~0.11125369292536007E~307): 0.15129000000000002E3 0.15129000000000002E3 +(~0.123E2, ~0.123E2, ~0.5E~323): 0.15129000000000002E3 0.15129000000000002E3 +(~0.123E2, ~0.123E2, ~0.0): 0.15129000000000002E3 0.15129000000000002E3 +(~0.123E2, ~0.3141592653589793E1, 0.123E4): 0.12686415896391545E4 0.12686415896391545E4 +(~0.123E2, ~0.3141592653589793E1, 0.123E2): 0.5094158963915446E2 0.5094158963915446E2 +(~0.123E2, ~0.3141592653589793E1, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274425E2 +(~0.123E2, ~0.3141592653589793E1, 0.2718281828459045E1): 0.413598714676135E2 0.413598714676135E2 +(~0.123E2, ~0.3141592653589793E1, 0.123E1): 0.3987158963915446E2 0.3987158963915446E2 +(~0.123E2, ~0.3141592653589793E1, 0.123): 0.3876458963915446E2 0.3876458963915446E2 +(~0.123E2, ~0.3141592653589793E1, 0.123E~2): 0.3864281963915446E2 0.3864281963915446E2 +(~0.123E2, ~0.3141592653589793E1, 0.22250738585072014E~307): 0.3864158963915446E2 0.3864158963915446E2 +(~0.123E2, ~0.3141592653589793E1, 0.11125369292536007E~307): 0.3864158963915446E2 0.3864158963915446E2 +(~0.123E2, ~0.3141592653589793E1, 0.5E~323): 0.3864158963915446E2 0.3864158963915446E2 +(~0.123E2, ~0.3141592653589793E1, 0.0): 0.3864158963915446E2 0.3864158963915446E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123E4): ~0.11913584103608455E4 ~0.11913584103608455E4 +(~0.123E2, ~0.3141592653589793E1, ~0.123E2): 0.26341589639154456E2 0.26341589639154456E2 +(~0.123E2, ~0.3141592653589793E1, ~0.3141592653589793E1): 0.35499996985564664E2 0.35499996985564664E2 +(~0.123E2, ~0.3141592653589793E1, ~0.2718281828459045E1): 0.3592330781069541E2 0.3592330781069541E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123E1): 0.3741158963915446E2 0.3741158963915446E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123): 0.38518589639154456E2 0.38518589639154456E2 +(~0.123E2, ~0.3141592653589793E1, ~0.123E~2): 0.3864035963915446E2 0.3864035963915446E2 +(~0.123E2, ~0.3141592653589793E1, ~0.22250738585072014E~307): 0.3864158963915446E2 0.3864158963915446E2 +(~0.123E2, ~0.3141592653589793E1, ~0.11125369292536007E~307): 0.3864158963915446E2 0.3864158963915446E2 +(~0.123E2, ~0.3141592653589793E1, ~0.5E~323): 0.3864158963915446E2 0.3864158963915446E2 +(~0.123E2, ~0.3141592653589793E1, ~0.0): 0.3864158963915446E2 0.3864158963915446E2 +(~0.123E2, ~0.2718281828459045E1, 0.123E4): 0.12634348664900463E4 0.12634348664900463E4 +(~0.123E2, ~0.2718281828459045E1, 0.123E2): 0.4573486649004626E2 0.4573486649004626E2 +(~0.123E2, ~0.2718281828459045E1, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363605E2 +(~0.123E2, ~0.2718281828459045E1, 0.2718281828459045E1): 0.361531483185053E2 0.361531483185053E2 +(~0.123E2, ~0.2718281828459045E1, 0.123E1): 0.3466486649004626E2 0.3466486649004626E2 +(~0.123E2, ~0.2718281828459045E1, 0.123): 0.3355786649004626E2 0.3355786649004626E2 +(~0.123E2, ~0.2718281828459045E1, 0.123E~2): 0.3343609649004625E2 0.3343609649004625E2 +(~0.123E2, ~0.2718281828459045E1, 0.22250738585072014E~307): 0.33434866490046254E2 0.33434866490046254E2 +(~0.123E2, ~0.2718281828459045E1, 0.11125369292536007E~307): 0.33434866490046254E2 0.33434866490046254E2 +(~0.123E2, ~0.2718281828459045E1, 0.5E~323): 0.33434866490046254E2 0.33434866490046254E2 +(~0.123E2, ~0.2718281828459045E1, 0.0): 0.33434866490046254E2 0.33434866490046254E2 +(~0.123E2, ~0.2718281828459045E1, ~0.123E4): ~0.11965651335099537E4 ~0.11965651335099537E4 +(~0.123E2, ~0.2718281828459045E1, ~0.123E2): 0.21134866490046257E2 0.21134866490046257E2 +(~0.123E2, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.30293273836456464E2 0.30293273836456464E2 +(~0.123E2, ~0.2718281828459045E1, ~0.2718281828459045E1): 0.30716584661587213E2 0.30716584661587213E2 +(~0.123E2, ~0.2718281828459045E1, ~0.123E1): 0.3220486649004626E2 0.3220486649004626E2 +(~0.123E2, ~0.2718281828459045E1, ~0.123): 0.33311866490046256E2 0.33311866490046256E2 +(~0.123E2, ~0.2718281828459045E1, ~0.123E~2): 0.33433636490046254E2 0.33433636490046254E2 +(~0.123E2, ~0.2718281828459045E1, ~0.22250738585072014E~307): 0.33434866490046254E2 0.33434866490046254E2 +(~0.123E2, ~0.2718281828459045E1, ~0.11125369292536007E~307): 0.33434866490046254E2 0.33434866490046254E2 +(~0.123E2, ~0.2718281828459045E1, ~0.5E~323): 0.33434866490046254E2 0.33434866490046254E2 +(~0.123E2, ~0.2718281828459045E1, ~0.0): 0.33434866490046254E2 0.33434866490046254E2 +(~0.123E2, ~0.123E1, 0.123E4): 0.1245129E4 0.1245129E4 +(~0.123E2, ~0.123E1, 0.123E2): 0.27429000000000002E2 0.27429000000000002E2 +(~0.123E2, ~0.123E1, 0.3141592653589793E1): 0.18270592653589794E2 0.18270592653589794E2 +(~0.123E2, ~0.123E1, 0.2718281828459045E1): 0.17847281828459046E2 0.17847281828459046E2 +(~0.123E2, ~0.123E1, 0.123E1): 0.16359E2 0.16359E2 +(~0.123E2, ~0.123E1, 0.123): 0.15252E2 0.15252E2 +(~0.123E2, ~0.123E1, 0.123E~2): 0.15130230000000001E2 0.15130230000000001E2 +(~0.123E2, ~0.123E1, 0.22250738585072014E~307): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E2, ~0.123E1, 0.11125369292536007E~307): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E2, ~0.123E1, 0.5E~323): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E2, ~0.123E1, 0.0): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E2, ~0.123E1, ~0.123E4): ~0.1214871E4 ~0.1214871E4 +(~0.123E2, ~0.123E1, ~0.123E2): 0.28289999999999997E1 0.28289999999999997E1 +(~0.123E2, ~0.123E1, ~0.3141592653589793E1): 0.11987407346410208E2 0.11987407346410208E2 +(~0.123E2, ~0.123E1, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540955E2 +(~0.123E2, ~0.123E1, ~0.123E1): 0.13899000000000001E2 0.13899000000000001E2 +(~0.123E2, ~0.123E1, ~0.123): 0.15006E2 0.15006E2 +(~0.123E2, ~0.123E1, ~0.123E~2): 0.1512777E2 0.1512777E2 +(~0.123E2, ~0.123E1, ~0.22250738585072014E~307): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E2, ~0.123E1, ~0.11125369292536007E~307): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E2, ~0.123E1, ~0.5E~323): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E2, ~0.123E1, ~0.0): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E2, ~0.123, 0.123E4): 0.12315129E4 0.12315129E4 +(~0.123E2, ~0.123, 0.123E2): 0.138129E2 0.138129E2 +(~0.123E2, ~0.123, 0.3141592653589793E1): 0.4654492653589793E1 0.4654492653589793E1 +(~0.123E2, ~0.123, 0.2718281828459045E1): 0.4231181828459045E1 0.4231181828459045E1 +(~0.123E2, ~0.123, 0.123E1): 0.27429E1 0.27429E1 +(~0.123E2, ~0.123, 0.123): 0.16359000000000001E1 0.16359000000000001E1 +(~0.123E2, ~0.123, 0.123E~2): 0.151413E1 0.151413E1 +(~0.123E2, ~0.123, 0.22250738585072014E~307): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123E2, ~0.123, 0.11125369292536007E~307): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123E2, ~0.123, 0.5E~323): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123E2, ~0.123, 0.0): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123E2, ~0.123, ~0.123E4): ~0.12284871E4 ~0.12284871E4 +(~0.123E2, ~0.123, ~0.123E2): ~0.107871E2 ~0.107871E2 +(~0.123E2, ~0.123, ~0.3141592653589793E1): ~0.1628692653589793E1 ~0.1628692653589793E1 +(~0.123E2, ~0.123, ~0.2718281828459045E1): ~0.1205381828459045E1 ~0.1205381828459045E1 +(~0.123E2, ~0.123, ~0.123E1): 0.2829000000000001 0.2829000000000001 +(~0.123E2, ~0.123, ~0.123): 0.13899000000000001E1 0.13899000000000001E1 +(~0.123E2, ~0.123, ~0.123E~2): 0.151167E1 0.151167E1 +(~0.123E2, ~0.123, ~0.22250738585072014E~307): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123E2, ~0.123, ~0.11125369292536007E~307): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123E2, ~0.123, ~0.5E~323): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123E2, ~0.123, ~0.0): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123E2, ~0.123E~2, 0.123E4): 0.1230015129E4 0.1230015129E4 +(~0.123E2, ~0.123E~2, 0.123E2): 0.12315129E2 0.12315129E2 +(~0.123E2, ~0.123E~2, 0.3141592653589793E1): 0.3156721653589793E1 0.3156721653589793E1 +(~0.123E2, ~0.123E~2, 0.2718281828459045E1): 0.2733410828459045E1 0.2733410828459045E1 +(~0.123E2, ~0.123E~2, 0.123E1): 0.1245129E1 0.1245129E1 +(~0.123E2, ~0.123E~2, 0.123): 0.138129 0.138129 +(~0.123E2, ~0.123E~2, 0.123E~2): 0.16359000000000002E~1 0.16359000000000002E~1 +(~0.123E2, ~0.123E~2, 0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(~0.123E2, ~0.123E~2, 0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(~0.123E2, ~0.123E~2, 0.5E~323): 0.15129E~1 0.15129E~1 +(~0.123E2, ~0.123E~2, 0.0): 0.15129E~1 0.15129E~1 +(~0.123E2, ~0.123E~2, ~0.123E4): ~0.1229984871E4 ~0.1229984871E4 +(~0.123E2, ~0.123E~2, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(~0.123E2, ~0.123E~2, ~0.3141592653589793E1): ~0.3126463653589793E1 ~0.3126463653589793E1 +(~0.123E2, ~0.123E~2, ~0.2718281828459045E1): ~0.2703152828459045E1 ~0.2703152828459045E1 +(~0.123E2, ~0.123E~2, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(~0.123E2, ~0.123E~2, ~0.123): ~0.107871 ~0.107871 +(~0.123E2, ~0.123E~2, ~0.123E~2): 0.13899E~1 0.13899E~1 +(~0.123E2, ~0.123E~2, ~0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(~0.123E2, ~0.123E~2, ~0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(~0.123E2, ~0.123E~2, ~0.5E~323): 0.15129E~1 0.15129E~1 +(~0.123E2, ~0.123E~2, ~0.0): 0.15129E~1 0.15129E~1 +(~0.123E2, ~0.22250738585072014E~307, 0.5E~323): 0.2736840845963858E~306 0.2736840845963858E~306 +(~0.123E2, ~0.22250738585072014E~307, ~0.5E~323): 0.2736840845963858E~306 0.2736840845963858E~306 +(~0.123E2, ~0.11125369292536007E~307, 0.5E~323): 0.1368420422981929E~306 0.1368420422981929E~306 +(~0.123E2, ~0.11125369292536007E~307, ~0.5E~323): 0.1368420422981929E~306 0.1368420422981929E~306 +(~0.123E2, ~0.5E~323, 0.22250738585072014E~307): 0.22250738585072073E~307 0.22250738585072073E~307 +(~0.123E2, ~0.5E~323, 0.11125369292536007E~307): 0.11125369292536066E~307 0.11125369292536066E~307 +(~0.123E2, ~0.5E~323, 0.5E~323): 0.64E~322 0.64E~322 +(~0.123E2, ~0.5E~323, 0.0): 0.6E~322 0.6E~322 +(~0.123E2, ~0.5E~323, ~0.22250738585072014E~307): ~0.22250738585071955E~307 ~0.22250738585071955E~307 +(~0.123E2, ~0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253595E~307 ~0.1112536929253595E~307 +(~0.123E2, ~0.5E~323, ~0.5E~323): 0.54E~322 0.54E~322 +(~0.123E2, ~0.5E~323, ~0.0): 0.6E~322 0.6E~322 +(~0.3141592653589793E1, 0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.123E4): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.123E2): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.123E1): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.123): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.123E~2): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.5E~323): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, 0.0): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.123E4): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.123E2): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.123E1): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.123): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(~0.3141592653589793E1, 0.17976931348623157E309, ~0.0): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.17976931348623157E309): ~0.10261166380838123E309 ~0.10261166380838123E309 +(~0.3141592653589793E1, 0.8988465674311579E308, 0.8988465674311579E308): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.123E4): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.123E2): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.123E1): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.123): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.123E~2): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.5E~323): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, 0.0): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.123E4): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.123E2): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.123E1): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.123): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(~0.3141592653589793E1, 0.8988465674311579E308, ~0.0): ~inf ~inf +(~0.3141592653589793E1, 0.123E4, 0.123E4): ~0.26341589639154454E4 ~0.26341589639154454E4 +(~0.3141592653589793E1, 0.123E4, 0.123E2): ~0.38518589639154457E4 ~0.38518589639154457E4 +(~0.3141592653589793E1, 0.123E4, 0.3141592653589793E1): ~0.38610173712618557E4 ~0.38610173712618557E4 +(~0.3141592653589793E1, 0.123E4, 0.2718281828459045E1): ~0.38614406820869863E4 ~0.38614406820869863E4 +(~0.3141592653589793E1, 0.123E4, 0.123E1): ~0.38629289639154454E4 ~0.38629289639154454E4 +(~0.3141592653589793E1, 0.123E4, 0.123): ~0.38640359639154453E4 ~0.38640359639154453E4 +(~0.3141592653589793E1, 0.123E4, 0.123E~2): ~0.38641577339154455E4 ~0.38641577339154455E4 +(~0.3141592653589793E1, 0.123E4, 0.22250738585072014E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.3141592653589793E1, 0.123E4, 0.11125369292536007E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.3141592653589793E1, 0.123E4, 0.5E~323): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.3141592653589793E1, 0.123E4, 0.0): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.3141592653589793E1, 0.123E4, ~0.123E4): ~0.5094158963915445E4 ~0.5094158963915445E4 +(~0.3141592653589793E1, 0.123E4, ~0.123E2): ~0.38764589639154456E4 ~0.38764589639154456E4 +(~0.3141592653589793E1, 0.123E4, ~0.3141592653589793E1): ~0.38673005565690355E4 ~0.38673005565690355E4 +(~0.3141592653589793E1, 0.123E4, ~0.2718281828459045E1): ~0.38668772457439045E4 ~0.38668772457439045E4 +(~0.3141592653589793E1, 0.123E4, ~0.123E1): ~0.38653889639154454E4 ~0.38653889639154454E4 +(~0.3141592653589793E1, 0.123E4, ~0.123): ~0.38642819639154454E4 ~0.38642819639154454E4 +(~0.3141592653589793E1, 0.123E4, ~0.123E~2): ~0.38641601939154457E4 ~0.38641601939154457E4 +(~0.3141592653589793E1, 0.123E4, ~0.22250738585072014E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.3141592653589793E1, 0.123E4, ~0.11125369292536007E~307): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.3141592653589793E1, 0.123E4, ~0.5E~323): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.3141592653589793E1, 0.123E4, ~0.0): ~0.38641589639154454E4 ~0.38641589639154454E4 +(~0.3141592653589793E1, 0.123E2, 0.123E4): 0.11913584103608455E4 0.11913584103608455E4 +(~0.3141592653589793E1, 0.123E2, 0.123E2): ~0.26341589639154456E2 ~0.26341589639154456E2 +(~0.3141592653589793E1, 0.123E2, 0.3141592653589793E1): ~0.35499996985564664E2 ~0.35499996985564664E2 +(~0.3141592653589793E1, 0.123E2, 0.2718281828459045E1): ~0.3592330781069541E2 ~0.3592330781069541E2 +(~0.3141592653589793E1, 0.123E2, 0.123E1): ~0.3741158963915446E2 ~0.3741158963915446E2 +(~0.3141592653589793E1, 0.123E2, 0.123): ~0.38518589639154456E2 ~0.38518589639154456E2 +(~0.3141592653589793E1, 0.123E2, 0.123E~2): ~0.3864035963915446E2 ~0.3864035963915446E2 +(~0.3141592653589793E1, 0.123E2, 0.22250738585072014E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.3141592653589793E1, 0.123E2, 0.11125369292536007E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.3141592653589793E1, 0.123E2, 0.5E~323): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.3141592653589793E1, 0.123E2, 0.0): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.3141592653589793E1, 0.123E2, ~0.123E4): ~0.12686415896391545E4 ~0.12686415896391545E4 +(~0.3141592653589793E1, 0.123E2, ~0.123E2): ~0.5094158963915446E2 ~0.5094158963915446E2 +(~0.3141592653589793E1, 0.123E2, ~0.3141592653589793E1): ~0.4178318229274425E2 ~0.4178318229274425E2 +(~0.3141592653589793E1, 0.123E2, ~0.2718281828459045E1): ~0.413598714676135E2 ~0.413598714676135E2 +(~0.3141592653589793E1, 0.123E2, ~0.123E1): ~0.3987158963915446E2 ~0.3987158963915446E2 +(~0.3141592653589793E1, 0.123E2, ~0.123): ~0.3876458963915446E2 ~0.3876458963915446E2 +(~0.3141592653589793E1, 0.123E2, ~0.123E~2): ~0.3864281963915446E2 ~0.3864281963915446E2 +(~0.3141592653589793E1, 0.123E2, ~0.22250738585072014E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.3141592653589793E1, 0.123E2, ~0.11125369292536007E~307): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.3141592653589793E1, 0.123E2, ~0.5E~323): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.3141592653589793E1, 0.123E2, ~0.0): ~0.3864158963915446E2 ~0.3864158963915446E2 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.123E4): 0.12201303955989106E4 0.12201303955989106E4 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.123E2): 0.24303955989106427E1 0.24303955989106427E1 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.3141592653589793E1): ~0.6728011747499565E1 ~0.6728011747499565E1 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.2718281828459045E1): ~0.71513225726303125E1 ~0.71513225726303125E1 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.123E1): ~0.8639604401089358E1 ~0.8639604401089358E1 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.123): ~0.9746604401089359E1 ~0.9746604401089359E1 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.123E~2): ~0.9868374401089358E1 ~0.9868374401089358E1 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.22250738585072014E~307): ~0.9869604401089358E1 ~0.9869604401089358E1 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.11125369292536007E~307): ~0.9869604401089358E1 ~0.9869604401089358E1 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.5E~323): ~0.9869604401089358E1 ~0.9869604401089358E1 +(~0.3141592653589793E1, 0.3141592653589793E1, 0.0): ~0.9869604401089358E1 ~0.9869604401089358E1 +(~0.3141592653589793E1, 0.3141592653589793E1, ~0.123E4): ~0.12398696044010894E4 ~0.12398696044010894E4 +(~0.3141592653589793E1, 0.3141592653589793E1, ~0.123E2): ~0.2216960440108936E2 ~0.2216960440108936E2 +(~0.3141592653589793E1, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.13011197054679151E2 ~0.13011197054679151E2 +(~0.3141592653589793E1, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.12587886229548403E2 ~0.12587886229548403E2 +(~0.3141592653589793E1, 0.3141592653589793E1, ~0.123E1): ~0.11099604401089358E2 ~0.11099604401089358E2 +(~0.3141592653589793E1, 0.3141592653589793E1, ~0.123): ~0.9992604401089357E1 ~0.9992604401089357E1 +(~0.3141592653589793E1, 0.3141592653589793E1, ~0.123E~2): ~0.9870834401089358E1 ~0.9870834401089358E1 +(~0.3141592653589793E1, 0.3141592653589793E1, ~0.22250738585072014E~307): ~0.9869604401089358E1 ~0.9869604401089358E1 +(~0.3141592653589793E1, 0.3141592653589793E1, ~0.11125369292536007E~307): ~0.9869604401089358E1 ~0.9869604401089358E1 +(~0.3141592653589793E1, 0.3141592653589793E1, ~0.5E~323): ~0.9869604401089358E1 ~0.9869604401089358E1 +(~0.3141592653589793E1, 0.3141592653589793E1, ~0.0): ~0.9869604401089358E1 ~0.9869604401089358E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.123E4): 0.12214602657773264E4 0.12214602657773264E4 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.123E2): 0.37602657773264343E1 0.37602657773264343E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.3141592653589793E1): ~0.5398141569083773E1 ~0.5398141569083773E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.2718281828459045E1): ~0.5821452394214521E1 ~0.5821452394214521E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.123E1): ~0.7309734222673566E1 ~0.7309734222673566E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.123): ~0.8416734222673567E1 ~0.8416734222673567E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.123E~2): ~0.8538504222673566E1 ~0.8538504222673566E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.22250738585072014E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.11125369292536007E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.5E~323): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.3141592653589793E1, 0.2718281828459045E1, 0.0): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.123E4): ~0.12385397342226736E4 ~0.12385397342226736E4 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.123E2): ~0.20839734222673567E2 ~0.20839734222673567E2 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.11681326876263359E2 ~0.11681326876263359E2 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.1125801605113261E2 ~0.1125801605113261E2 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.123E1): ~0.9769734222673566E1 ~0.9769734222673566E1 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673567E1 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.123E~2): ~0.8540964222673566E1 ~0.8540964222673566E1 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.22250738585072014E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.11125369292536007E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.5E~323): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.3141592653589793E1, 0.2718281828459045E1, ~0.0): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.3141592653589793E1, 0.123E1, 0.123E4): 0.12261358410360845E4 0.12261358410360845E4 +(~0.3141592653589793E1, 0.123E1, 0.123E2): 0.8435841036084556E1 0.8435841036084556E1 +(~0.3141592653589793E1, 0.123E1, 0.3141592653589793E1): ~0.7225663103256523 ~0.7225663103256523 +(~0.3141592653589793E1, 0.123E1, 0.2718281828459045E1): ~0.11458771354564004E1 ~0.11458771354564004E1 +(~0.3141592653589793E1, 0.123E1, 0.123E1): ~0.26341589639154455E1 ~0.26341589639154455E1 +(~0.3141592653589793E1, 0.123E1, 0.123): ~0.37411589639154457E1 ~0.37411589639154457E1 +(~0.3141592653589793E1, 0.123E1, 0.123E~2): ~0.38629289639154454E1 ~0.38629289639154454E1 +(~0.3141592653589793E1, 0.123E1, 0.22250738585072014E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.3141592653589793E1, 0.123E1, 0.11125369292536007E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.3141592653589793E1, 0.123E1, 0.5E~323): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.3141592653589793E1, 0.123E1, 0.0): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.3141592653589793E1, 0.123E1, ~0.123E4): ~0.12338641589639155E4 ~0.12338641589639155E4 +(~0.3141592653589793E1, 0.123E1, ~0.123E2): ~0.16164158963915447E2 ~0.16164158963915447E2 +(~0.3141592653589793E1, 0.123E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505239E1 +(~0.3141592653589793E1, 0.123E1, ~0.2718281828459045E1): ~0.65824407923744905E1 ~0.65824407923744905E1 +(~0.3141592653589793E1, 0.123E1, ~0.123E1): ~0.5094158963915445E1 ~0.5094158963915445E1 +(~0.3141592653589793E1, 0.123E1, ~0.123): ~0.39871589639154457E1 ~0.39871589639154457E1 +(~0.3141592653589793E1, 0.123E1, ~0.123E~2): ~0.38653889639154455E1 ~0.38653889639154455E1 +(~0.3141592653589793E1, 0.123E1, ~0.22250738585072014E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.3141592653589793E1, 0.123E1, ~0.11125369292536007E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.3141592653589793E1, 0.123E1, ~0.5E~323): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.3141592653589793E1, 0.123E1, ~0.0): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.3141592653589793E1, 0.123, 0.123E4): 0.12296135841036084E4 0.12296135841036084E4 +(~0.3141592653589793E1, 0.123, 0.123E2): 0.11913584103608455E2 0.11913584103608455E2 +(~0.3141592653589793E1, 0.123, 0.3141592653589793E1): 0.27551767571982486E1 0.27551767571982486E1 +(~0.3141592653589793E1, 0.123, 0.2718281828459045E1): 0.23318659320675006E1 0.23318659320675006E1 +(~0.3141592653589793E1, 0.123, 0.123E1): 0.8435841036084555 0.8435841036084555 +(~0.3141592653589793E1, 0.123, 0.123): ~0.26341589639154456 ~0.26341589639154456 +(~0.3141592653589793E1, 0.123, 0.123E~2): ~0.38518589639154455 ~0.38518589639154455 +(~0.3141592653589793E1, 0.123, 0.22250738585072014E~307): ~0.38641589639154456 ~0.38641589639154456 +(~0.3141592653589793E1, 0.123, 0.11125369292536007E~307): ~0.38641589639154456 ~0.38641589639154456 +(~0.3141592653589793E1, 0.123, 0.5E~323): ~0.38641589639154456 ~0.38641589639154456 +(~0.3141592653589793E1, 0.123, 0.0): ~0.38641589639154456 ~0.38641589639154456 +(~0.3141592653589793E1, 0.123, ~0.123E4): ~0.12303864158963916E4 ~0.12303864158963916E4 +(~0.3141592653589793E1, 0.123, ~0.123E2): ~0.12686415896391546E2 ~0.12686415896391546E2 +(~0.3141592653589793E1, 0.123, ~0.3141592653589793E1): ~0.35280085499813376E1 ~0.35280085499813376E1 +(~0.3141592653589793E1, 0.123, ~0.2718281828459045E1): ~0.31046977248505896E1 ~0.31046977248505896E1 +(~0.3141592653589793E1, 0.123, ~0.123E1): ~0.16164158963915445E1 ~0.16164158963915445E1 +(~0.3141592653589793E1, 0.123, ~0.123): ~0.5094158963915445 ~0.5094158963915445 +(~0.3141592653589793E1, 0.123, ~0.123E~2): ~0.38764589639154456 ~0.38764589639154456 +(~0.3141592653589793E1, 0.123, ~0.22250738585072014E~307): ~0.38641589639154456 ~0.38641589639154456 +(~0.3141592653589793E1, 0.123, ~0.11125369292536007E~307): ~0.38641589639154456 ~0.38641589639154456 +(~0.3141592653589793E1, 0.123, ~0.5E~323): ~0.38641589639154456 ~0.38641589639154456 +(~0.3141592653589793E1, 0.123, ~0.0): ~0.38641589639154456 ~0.38641589639154456 +(~0.3141592653589793E1, 0.123E~2, 0.123E4): 0.1229996135841036E4 0.1229996135841036E4 +(~0.3141592653589793E1, 0.123E~2, 0.123E2): 0.12296135841036085E2 0.12296135841036085E2 +(~0.3141592653589793E1, 0.123E~2, 0.3141592653589793E1): 0.31377284946258777E1 0.31377284946258777E1 +(~0.3141592653589793E1, 0.123E~2, 0.2718281828459045E1): 0.27144176694951296E1 0.27144176694951296E1 +(~0.3141592653589793E1, 0.123E~2, 0.123E1): 0.12261358410360845E1 0.12261358410360845E1 +(~0.3141592653589793E1, 0.123E~2, 0.123): 0.11913584103608456 0.11913584103608456 +(~0.3141592653589793E1, 0.123E~2, 0.123E~2): ~0.26341589639154455E~2 ~0.26341589639154455E~2 +(~0.3141592653589793E1, 0.123E~2, 0.22250738585072014E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.3141592653589793E1, 0.123E~2, 0.11125369292536007E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.3141592653589793E1, 0.123E~2, 0.5E~323): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.3141592653589793E1, 0.123E~2, 0.0): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.3141592653589793E1, 0.123E~2, ~0.123E4): ~0.1230003864158964E4 ~0.1230003864158964E4 +(~0.3141592653589793E1, 0.123E~2, ~0.123E2): ~0.12303864158963917E2 ~0.12303864158963917E2 +(~0.3141592653589793E1, 0.123E~2, ~0.3141592653589793E1): ~0.31454568125537086E1 ~0.31454568125537086E1 +(~0.3141592653589793E1, 0.123E~2, ~0.2718281828459045E1): ~0.27221459874229605E1 ~0.27221459874229605E1 +(~0.3141592653589793E1, 0.123E~2, ~0.123E1): ~0.12338641589639154E1 ~0.12338641589639154E1 +(~0.3141592653589793E1, 0.123E~2, ~0.123): ~0.12686415896391545 ~0.12686415896391545 +(~0.3141592653589793E1, 0.123E~2, ~0.123E~2): ~0.5094158963915445E~2 ~0.5094158963915445E~2 +(~0.3141592653589793E1, 0.123E~2, ~0.22250738585072014E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.3141592653589793E1, 0.123E~2, ~0.11125369292536007E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.3141592653589793E1, 0.123E~2, ~0.5E~323): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.3141592653589793E1, 0.123E~2, ~0.0): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.3141592653589793E1, 0.22250738585072014E~307, 0.5E~323): ~0.6990275687580919E~307 ~0.6990275687580919E~307 +(~0.3141592653589793E1, 0.22250738585072014E~307, ~0.5E~323): ~0.6990275687580919E~307 ~0.6990275687580919E~307 +(~0.3141592653589793E1, 0.5E~323, 0.22250738585072014E~307): 0.22250738585072E~307 0.22250738585072E~307 +(~0.3141592653589793E1, 0.5E~323, 0.11125369292536007E~307): 0.1112536929253599E~307 0.1112536929253599E~307 +(~0.3141592653589793E1, 0.5E~323, 0.5E~323): ~0.1E~322 ~0.1E~322 +(~0.3141592653589793E1, 0.5E~323, 0.0): ~0.15E~322 ~0.15E~322 +(~0.3141592653589793E1, 0.5E~323, ~0.22250738585072014E~307): ~0.2225073858507203E~307 ~0.2225073858507203E~307 +(~0.3141592653589793E1, 0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253602E~307 ~0.1112536929253602E~307 +(~0.3141592653589793E1, 0.5E~323, ~0.5E~323): ~0.2E~322 ~0.2E~322 +(~0.3141592653589793E1, 0.5E~323, ~0.0): ~0.15E~322 ~0.15E~322 +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.17976931348623157E309): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.8988465674311579E308): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.123E4): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.123E2): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.3141592653589793E1): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.2718281828459045E1): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.123E1): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.123): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.123E~2): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.5E~323): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, 0.0): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.123E4): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.123E2): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.123E1): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.123): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.123E~2): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.5E~323): inf inf +(~0.3141592653589793E1, ~0.17976931348623157E309, ~0.0): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.17976931348623157E309): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.8988465674311579E308): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.123E4): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.123E2): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.3141592653589793E1): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.2718281828459045E1): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.123E1): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.123): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.123E~2): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.5E~323): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, 0.0): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.17976931348623157E309): 0.10261166380838123E309 0.10261166380838123E309 +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.8988465674311579E308): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.123E4): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.123E2): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.123E1): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.123): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.123E~2): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.5E~323): inf inf +(~0.3141592653589793E1, ~0.8988465674311579E308, ~0.0): inf inf +(~0.3141592653589793E1, ~0.123E4, 0.123E4): 0.5094158963915445E4 0.5094158963915445E4 +(~0.3141592653589793E1, ~0.123E4, 0.123E2): 0.38764589639154456E4 0.38764589639154456E4 +(~0.3141592653589793E1, ~0.123E4, 0.3141592653589793E1): 0.38673005565690355E4 0.38673005565690355E4 +(~0.3141592653589793E1, ~0.123E4, 0.2718281828459045E1): 0.38668772457439045E4 0.38668772457439045E4 +(~0.3141592653589793E1, ~0.123E4, 0.123E1): 0.38653889639154454E4 0.38653889639154454E4 +(~0.3141592653589793E1, ~0.123E4, 0.123): 0.38642819639154454E4 0.38642819639154454E4 +(~0.3141592653589793E1, ~0.123E4, 0.123E~2): 0.38641601939154457E4 0.38641601939154457E4 +(~0.3141592653589793E1, ~0.123E4, 0.22250738585072014E~307): 0.38641589639154454E4 0.38641589639154454E4 +(~0.3141592653589793E1, ~0.123E4, 0.11125369292536007E~307): 0.38641589639154454E4 0.38641589639154454E4 +(~0.3141592653589793E1, ~0.123E4, 0.5E~323): 0.38641589639154454E4 0.38641589639154454E4 +(~0.3141592653589793E1, ~0.123E4, 0.0): 0.38641589639154454E4 0.38641589639154454E4 +(~0.3141592653589793E1, ~0.123E4, ~0.123E4): 0.26341589639154454E4 0.26341589639154454E4 +(~0.3141592653589793E1, ~0.123E4, ~0.123E2): 0.38518589639154457E4 0.38518589639154457E4 +(~0.3141592653589793E1, ~0.123E4, ~0.3141592653589793E1): 0.38610173712618557E4 0.38610173712618557E4 +(~0.3141592653589793E1, ~0.123E4, ~0.2718281828459045E1): 0.38614406820869863E4 0.38614406820869863E4 +(~0.3141592653589793E1, ~0.123E4, ~0.123E1): 0.38629289639154454E4 0.38629289639154454E4 +(~0.3141592653589793E1, ~0.123E4, ~0.123): 0.38640359639154453E4 0.38640359639154453E4 +(~0.3141592653589793E1, ~0.123E4, ~0.123E~2): 0.38641577339154455E4 0.38641577339154455E4 +(~0.3141592653589793E1, ~0.123E4, ~0.22250738585072014E~307): 0.38641589639154454E4 0.38641589639154454E4 +(~0.3141592653589793E1, ~0.123E4, ~0.11125369292536007E~307): 0.38641589639154454E4 0.38641589639154454E4 +(~0.3141592653589793E1, ~0.123E4, ~0.5E~323): 0.38641589639154454E4 0.38641589639154454E4 +(~0.3141592653589793E1, ~0.123E4, ~0.0): 0.38641589639154454E4 0.38641589639154454E4 +(~0.3141592653589793E1, ~0.123E2, 0.123E4): 0.12686415896391545E4 0.12686415896391545E4 +(~0.3141592653589793E1, ~0.123E2, 0.123E2): 0.5094158963915446E2 0.5094158963915446E2 +(~0.3141592653589793E1, ~0.123E2, 0.3141592653589793E1): 0.4178318229274425E2 0.4178318229274425E2 +(~0.3141592653589793E1, ~0.123E2, 0.2718281828459045E1): 0.413598714676135E2 0.413598714676135E2 +(~0.3141592653589793E1, ~0.123E2, 0.123E1): 0.3987158963915446E2 0.3987158963915446E2 +(~0.3141592653589793E1, ~0.123E2, 0.123): 0.3876458963915446E2 0.3876458963915446E2 +(~0.3141592653589793E1, ~0.123E2, 0.123E~2): 0.3864281963915446E2 0.3864281963915446E2 +(~0.3141592653589793E1, ~0.123E2, 0.22250738585072014E~307): 0.3864158963915446E2 0.3864158963915446E2 +(~0.3141592653589793E1, ~0.123E2, 0.11125369292536007E~307): 0.3864158963915446E2 0.3864158963915446E2 +(~0.3141592653589793E1, ~0.123E2, 0.5E~323): 0.3864158963915446E2 0.3864158963915446E2 +(~0.3141592653589793E1, ~0.123E2, 0.0): 0.3864158963915446E2 0.3864158963915446E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123E4): ~0.11913584103608455E4 ~0.11913584103608455E4 +(~0.3141592653589793E1, ~0.123E2, ~0.123E2): 0.26341589639154456E2 0.26341589639154456E2 +(~0.3141592653589793E1, ~0.123E2, ~0.3141592653589793E1): 0.35499996985564664E2 0.35499996985564664E2 +(~0.3141592653589793E1, ~0.123E2, ~0.2718281828459045E1): 0.3592330781069541E2 0.3592330781069541E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123E1): 0.3741158963915446E2 0.3741158963915446E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123): 0.38518589639154456E2 0.38518589639154456E2 +(~0.3141592653589793E1, ~0.123E2, ~0.123E~2): 0.3864035963915446E2 0.3864035963915446E2 +(~0.3141592653589793E1, ~0.123E2, ~0.22250738585072014E~307): 0.3864158963915446E2 0.3864158963915446E2 +(~0.3141592653589793E1, ~0.123E2, ~0.11125369292536007E~307): 0.3864158963915446E2 0.3864158963915446E2 +(~0.3141592653589793E1, ~0.123E2, ~0.5E~323): 0.3864158963915446E2 0.3864158963915446E2 +(~0.3141592653589793E1, ~0.123E2, ~0.0): 0.3864158963915446E2 0.3864158963915446E2 +(~0.3141592653589793E1, ~0.3141592653589793E1, 0.123E4): 0.12398696044010894E4 0.12398696044010894E4 +(~0.3141592653589793E1, ~0.3141592653589793E1, 0.123E2): 0.2216960440108936E2 0.2216960440108936E2 +(~0.3141592653589793E1, ~0.3141592653589793E1, 0.3141592653589793E1): 0.13011197054679151E2 0.13011197054679151E2 +(~0.3141592653589793E1, ~0.3141592653589793E1, 0.2718281828459045E1): 0.12587886229548403E2 0.12587886229548403E2 +(~0.3141592653589793E1, ~0.3141592653589793E1, 0.123E1): 0.11099604401089358E2 0.11099604401089358E2 +(~0.3141592653589793E1, ~0.3141592653589793E1, 0.123): 0.9992604401089357E1 0.9992604401089357E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, 0.123E~2): 0.9870834401089358E1 0.9870834401089358E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, 0.22250738585072014E~307): 0.9869604401089358E1 0.9869604401089358E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, 0.11125369292536007E~307): 0.9869604401089358E1 0.9869604401089358E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, 0.5E~323): 0.9869604401089358E1 0.9869604401089358E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, 0.0): 0.9869604401089358E1 0.9869604401089358E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.123E4): ~0.12201303955989106E4 ~0.12201303955989106E4 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.123E2): ~0.24303955989106427E1 ~0.24303955989106427E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.3141592653589793E1): 0.6728011747499565E1 0.6728011747499565E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.2718281828459045E1): 0.71513225726303125E1 0.71513225726303125E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.123E1): 0.8639604401089358E1 0.8639604401089358E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.123): 0.9746604401089359E1 0.9746604401089359E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.123E~2): 0.9868374401089358E1 0.9868374401089358E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.22250738585072014E~307): 0.9869604401089358E1 0.9869604401089358E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.11125369292536007E~307): 0.9869604401089358E1 0.9869604401089358E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.5E~323): 0.9869604401089358E1 0.9869604401089358E1 +(~0.3141592653589793E1, ~0.3141592653589793E1, ~0.0): 0.9869604401089358E1 0.9869604401089358E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.123E4): 0.12385397342226736E4 0.12385397342226736E4 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.123E2): 0.20839734222673567E2 0.20839734222673567E2 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.3141592653589793E1): 0.11681326876263359E2 0.11681326876263359E2 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.2718281828459045E1): 0.1125801605113261E2 0.1125801605113261E2 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.123E1): 0.9769734222673566E1 0.9769734222673566E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.123): 0.8662734222673567E1 0.8662734222673567E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.123E~2): 0.8540964222673566E1 0.8540964222673566E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.22250738585072014E~307): 0.8539734222673566E1 0.8539734222673566E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.11125369292536007E~307): 0.8539734222673566E1 0.8539734222673566E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.5E~323): 0.8539734222673566E1 0.8539734222673566E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, 0.0): 0.8539734222673566E1 0.8539734222673566E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E4): ~0.12214602657773264E4 ~0.12214602657773264E4 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264343E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.5398141569083773E1 0.5398141569083773E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.2718281828459045E1): 0.5821452394214521E1 0.5821452394214521E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E1): 0.7309734222673566E1 0.7309734222673566E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.123): 0.8416734222673567E1 0.8416734222673567E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.123E~2): 0.8538504222673566E1 0.8538504222673566E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.22250738585072014E~307): 0.8539734222673566E1 0.8539734222673566E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.11125369292536007E~307): 0.8539734222673566E1 0.8539734222673566E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.5E~323): 0.8539734222673566E1 0.8539734222673566E1 +(~0.3141592653589793E1, ~0.2718281828459045E1, ~0.0): 0.8539734222673566E1 0.8539734222673566E1 +(~0.3141592653589793E1, ~0.123E1, 0.123E4): 0.12338641589639155E4 0.12338641589639155E4 +(~0.3141592653589793E1, ~0.123E1, 0.123E2): 0.16164158963915447E2 0.16164158963915447E2 +(~0.3141592653589793E1, ~0.123E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505239E1 +(~0.3141592653589793E1, ~0.123E1, 0.2718281828459045E1): 0.65824407923744905E1 0.65824407923744905E1 +(~0.3141592653589793E1, ~0.123E1, 0.123E1): 0.5094158963915445E1 0.5094158963915445E1 +(~0.3141592653589793E1, ~0.123E1, 0.123): 0.39871589639154457E1 0.39871589639154457E1 +(~0.3141592653589793E1, ~0.123E1, 0.123E~2): 0.38653889639154455E1 0.38653889639154455E1 +(~0.3141592653589793E1, ~0.123E1, 0.22250738585072014E~307): 0.38641589639154454E1 0.38641589639154454E1 +(~0.3141592653589793E1, ~0.123E1, 0.11125369292536007E~307): 0.38641589639154454E1 0.38641589639154454E1 +(~0.3141592653589793E1, ~0.123E1, 0.5E~323): 0.38641589639154454E1 0.38641589639154454E1 +(~0.3141592653589793E1, ~0.123E1, 0.0): 0.38641589639154454E1 0.38641589639154454E1 +(~0.3141592653589793E1, ~0.123E1, ~0.123E4): ~0.12261358410360845E4 ~0.12261358410360845E4 +(~0.3141592653589793E1, ~0.123E1, ~0.123E2): ~0.8435841036084556E1 ~0.8435841036084556E1 +(~0.3141592653589793E1, ~0.123E1, ~0.3141592653589793E1): 0.7225663103256523 0.7225663103256523 +(~0.3141592653589793E1, ~0.123E1, ~0.2718281828459045E1): 0.11458771354564004E1 0.11458771354564004E1 +(~0.3141592653589793E1, ~0.123E1, ~0.123E1): 0.26341589639154455E1 0.26341589639154455E1 +(~0.3141592653589793E1, ~0.123E1, ~0.123): 0.37411589639154457E1 0.37411589639154457E1 +(~0.3141592653589793E1, ~0.123E1, ~0.123E~2): 0.38629289639154454E1 0.38629289639154454E1 +(~0.3141592653589793E1, ~0.123E1, ~0.22250738585072014E~307): 0.38641589639154454E1 0.38641589639154454E1 +(~0.3141592653589793E1, ~0.123E1, ~0.11125369292536007E~307): 0.38641589639154454E1 0.38641589639154454E1 +(~0.3141592653589793E1, ~0.123E1, ~0.5E~323): 0.38641589639154454E1 0.38641589639154454E1 +(~0.3141592653589793E1, ~0.123E1, ~0.0): 0.38641589639154454E1 0.38641589639154454E1 +(~0.3141592653589793E1, ~0.123, 0.123E4): 0.12303864158963916E4 0.12303864158963916E4 +(~0.3141592653589793E1, ~0.123, 0.123E2): 0.12686415896391546E2 0.12686415896391546E2 +(~0.3141592653589793E1, ~0.123, 0.3141592653589793E1): 0.35280085499813376E1 0.35280085499813376E1 +(~0.3141592653589793E1, ~0.123, 0.2718281828459045E1): 0.31046977248505896E1 0.31046977248505896E1 +(~0.3141592653589793E1, ~0.123, 0.123E1): 0.16164158963915445E1 0.16164158963915445E1 +(~0.3141592653589793E1, ~0.123, 0.123): 0.5094158963915445 0.5094158963915445 +(~0.3141592653589793E1, ~0.123, 0.123E~2): 0.38764589639154456 0.38764589639154456 +(~0.3141592653589793E1, ~0.123, 0.22250738585072014E~307): 0.38641589639154456 0.38641589639154456 +(~0.3141592653589793E1, ~0.123, 0.11125369292536007E~307): 0.38641589639154456 0.38641589639154456 +(~0.3141592653589793E1, ~0.123, 0.5E~323): 0.38641589639154456 0.38641589639154456 +(~0.3141592653589793E1, ~0.123, 0.0): 0.38641589639154456 0.38641589639154456 +(~0.3141592653589793E1, ~0.123, ~0.123E4): ~0.12296135841036084E4 ~0.12296135841036084E4 +(~0.3141592653589793E1, ~0.123, ~0.123E2): ~0.11913584103608455E2 ~0.11913584103608455E2 +(~0.3141592653589793E1, ~0.123, ~0.3141592653589793E1): ~0.27551767571982486E1 ~0.27551767571982486E1 +(~0.3141592653589793E1, ~0.123, ~0.2718281828459045E1): ~0.23318659320675006E1 ~0.23318659320675006E1 +(~0.3141592653589793E1, ~0.123, ~0.123E1): ~0.8435841036084555 ~0.8435841036084555 +(~0.3141592653589793E1, ~0.123, ~0.123): 0.26341589639154456 0.26341589639154456 +(~0.3141592653589793E1, ~0.123, ~0.123E~2): 0.38518589639154455 0.38518589639154455 +(~0.3141592653589793E1, ~0.123, ~0.22250738585072014E~307): 0.38641589639154456 0.38641589639154456 +(~0.3141592653589793E1, ~0.123, ~0.11125369292536007E~307): 0.38641589639154456 0.38641589639154456 +(~0.3141592653589793E1, ~0.123, ~0.5E~323): 0.38641589639154456 0.38641589639154456 +(~0.3141592653589793E1, ~0.123, ~0.0): 0.38641589639154456 0.38641589639154456 +(~0.3141592653589793E1, ~0.123E~2, 0.123E4): 0.1230003864158964E4 0.1230003864158964E4 +(~0.3141592653589793E1, ~0.123E~2, 0.123E2): 0.12303864158963917E2 0.12303864158963917E2 +(~0.3141592653589793E1, ~0.123E~2, 0.3141592653589793E1): 0.31454568125537086E1 0.31454568125537086E1 +(~0.3141592653589793E1, ~0.123E~2, 0.2718281828459045E1): 0.27221459874229605E1 0.27221459874229605E1 +(~0.3141592653589793E1, ~0.123E~2, 0.123E1): 0.12338641589639154E1 0.12338641589639154E1 +(~0.3141592653589793E1, ~0.123E~2, 0.123): 0.12686415896391545 0.12686415896391545 +(~0.3141592653589793E1, ~0.123E~2, 0.123E~2): 0.5094158963915445E~2 0.5094158963915445E~2 +(~0.3141592653589793E1, ~0.123E~2, 0.22250738585072014E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.3141592653589793E1, ~0.123E~2, 0.11125369292536007E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.3141592653589793E1, ~0.123E~2, 0.5E~323): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.3141592653589793E1, ~0.123E~2, 0.0): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.3141592653589793E1, ~0.123E~2, ~0.123E4): ~0.1229996135841036E4 ~0.1229996135841036E4 +(~0.3141592653589793E1, ~0.123E~2, ~0.123E2): ~0.12296135841036085E2 ~0.12296135841036085E2 +(~0.3141592653589793E1, ~0.123E~2, ~0.3141592653589793E1): ~0.31377284946258777E1 ~0.31377284946258777E1 +(~0.3141592653589793E1, ~0.123E~2, ~0.2718281828459045E1): ~0.27144176694951296E1 ~0.27144176694951296E1 +(~0.3141592653589793E1, ~0.123E~2, ~0.123E1): ~0.12261358410360845E1 ~0.12261358410360845E1 +(~0.3141592653589793E1, ~0.123E~2, ~0.123): ~0.11913584103608456 ~0.11913584103608456 +(~0.3141592653589793E1, ~0.123E~2, ~0.123E~2): 0.26341589639154455E~2 0.26341589639154455E~2 +(~0.3141592653589793E1, ~0.123E~2, ~0.22250738585072014E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.3141592653589793E1, ~0.123E~2, ~0.11125369292536007E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.3141592653589793E1, ~0.123E~2, ~0.5E~323): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.3141592653589793E1, ~0.123E~2, ~0.0): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.3141592653589793E1, ~0.22250738585072014E~307, 0.5E~323): 0.6990275687580919E~307 0.6990275687580919E~307 +(~0.3141592653589793E1, ~0.22250738585072014E~307, ~0.5E~323): 0.6990275687580919E~307 0.6990275687580919E~307 +(~0.3141592653589793E1, ~0.5E~323, 0.22250738585072014E~307): 0.2225073858507203E~307 0.2225073858507203E~307 +(~0.3141592653589793E1, ~0.5E~323, 0.11125369292536007E~307): 0.1112536929253602E~307 0.1112536929253602E~307 +(~0.3141592653589793E1, ~0.5E~323, 0.5E~323): 0.2E~322 0.2E~322 +(~0.3141592653589793E1, ~0.5E~323, 0.0): 0.15E~322 0.15E~322 +(~0.3141592653589793E1, ~0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072E~307 ~0.22250738585072E~307 +(~0.3141592653589793E1, ~0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253599E~307 ~0.1112536929253599E~307 +(~0.3141592653589793E1, ~0.5E~323, ~0.5E~323): 0.1E~322 0.1E~322 +(~0.3141592653589793E1, ~0.5E~323, ~0.0): 0.15E~322 0.15E~322 +(~0.2718281828459045E1, 0.17976931348623157E309, 0.17976931348623157E309): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.8988465674311579E308): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.123E4): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.123E2): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.123E1): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.123): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.123E~2): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.5E~323): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, 0.0): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.123E4): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.123E2): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.123E1): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.123): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(~0.2718281828459045E1, 0.17976931348623157E309, ~0.0): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.17976931348623157E309): ~0.6456251559585884E308 ~0.6456251559585884E308 +(~0.2718281828459045E1, 0.8988465674311579E308, 0.8988465674311579E308): ~0.15444717233897463E309 ~0.15444717233897463E309 +(~0.2718281828459045E1, 0.8988465674311579E308, 0.123E4): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.123E2): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.3141592653589793E1): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.2718281828459045E1): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.123E1): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.123): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.123E~2): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.22250738585072014E~307): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.11125369292536007E~307): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.5E~323): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, 0.0): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.123E4): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.123E2): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.3141592653589793E1): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.2718281828459045E1): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.123E1): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.123): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.123E~2): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.22250738585072014E~307): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.11125369292536007E~307): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.5E~323): ~inf ~inf +(~0.2718281828459045E1, 0.8988465674311579E308, ~0.0): ~inf ~inf +(~0.2718281828459045E1, 0.123E4, 0.123E4): ~0.21134866490046256E4 ~0.21134866490046256E4 +(~0.2718281828459045E1, 0.123E4, 0.123E2): ~0.33311866490046255E4 ~0.33311866490046255E4 +(~0.2718281828459045E1, 0.123E4, 0.3141592653589793E1): ~0.33403450563510355E4 ~0.33403450563510355E4 +(~0.2718281828459045E1, 0.123E4, 0.2718281828459045E1): ~0.33407683671761665E4 ~0.33407683671761665E4 +(~0.2718281828459045E1, 0.123E4, 0.123E1): ~0.33422566490046256E4 ~0.33422566490046256E4 +(~0.2718281828459045E1, 0.123E4, 0.123): ~0.33433636490046256E4 ~0.33433636490046256E4 +(~0.2718281828459045E1, 0.123E4, 0.123E~2): ~0.33434854190046253E4 ~0.33434854190046253E4 +(~0.2718281828459045E1, 0.123E4, 0.22250738585072014E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.2718281828459045E1, 0.123E4, 0.11125369292536007E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.2718281828459045E1, 0.123E4, 0.5E~323): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.2718281828459045E1, 0.123E4, 0.0): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.2718281828459045E1, 0.123E4, ~0.123E4): ~0.4573486649004625E4 ~0.4573486649004625E4 +(~0.2718281828459045E1, 0.123E4, ~0.123E2): ~0.33557866490046254E4 ~0.33557866490046254E4 +(~0.2718281828459045E1, 0.123E4, ~0.3141592653589793E1): ~0.33466282416582153E4 ~0.33466282416582153E4 +(~0.2718281828459045E1, 0.123E4, ~0.2718281828459045E1): ~0.33462049308330843E4 ~0.33462049308330843E4 +(~0.2718281828459045E1, 0.123E4, ~0.123E1): ~0.33447166490046257E4 ~0.33447166490046257E4 +(~0.2718281828459045E1, 0.123E4, ~0.123): ~0.33436096490046257E4 ~0.33436096490046257E4 +(~0.2718281828459045E1, 0.123E4, ~0.123E~2): ~0.33434878790046255E4 ~0.33434878790046255E4 +(~0.2718281828459045E1, 0.123E4, ~0.22250738585072014E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.2718281828459045E1, 0.123E4, ~0.11125369292536007E~307): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.2718281828459045E1, 0.123E4, ~0.5E~323): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.2718281828459045E1, 0.123E4, ~0.0): ~0.33434866490046256E4 ~0.33434866490046256E4 +(~0.2718281828459045E1, 0.123E2, 0.123E4): 0.11965651335099537E4 0.11965651335099537E4 +(~0.2718281828459045E1, 0.123E2, 0.123E2): ~0.21134866490046257E2 ~0.21134866490046257E2 +(~0.2718281828459045E1, 0.123E2, 0.3141592653589793E1): ~0.30293273836456464E2 ~0.30293273836456464E2 +(~0.2718281828459045E1, 0.123E2, 0.2718281828459045E1): ~0.30716584661587213E2 ~0.30716584661587213E2 +(~0.2718281828459045E1, 0.123E2, 0.123E1): ~0.3220486649004626E2 ~0.3220486649004626E2 +(~0.2718281828459045E1, 0.123E2, 0.123): ~0.33311866490046256E2 ~0.33311866490046256E2 +(~0.2718281828459045E1, 0.123E2, 0.123E~2): ~0.33433636490046254E2 ~0.33433636490046254E2 +(~0.2718281828459045E1, 0.123E2, 0.22250738585072014E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.2718281828459045E1, 0.123E2, 0.11125369292536007E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.2718281828459045E1, 0.123E2, 0.5E~323): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.2718281828459045E1, 0.123E2, 0.0): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.2718281828459045E1, 0.123E2, ~0.123E4): ~0.12634348664900463E4 ~0.12634348664900463E4 +(~0.2718281828459045E1, 0.123E2, ~0.123E2): ~0.4573486649004626E2 ~0.4573486649004626E2 +(~0.2718281828459045E1, 0.123E2, ~0.3141592653589793E1): ~0.3657645914363605E2 ~0.3657645914363605E2 +(~0.2718281828459045E1, 0.123E2, ~0.2718281828459045E1): ~0.361531483185053E2 ~0.361531483185053E2 +(~0.2718281828459045E1, 0.123E2, ~0.123E1): ~0.3466486649004626E2 ~0.3466486649004626E2 +(~0.2718281828459045E1, 0.123E2, ~0.123): ~0.3355786649004626E2 ~0.3355786649004626E2 +(~0.2718281828459045E1, 0.123E2, ~0.123E~2): ~0.3343609649004625E2 ~0.3343609649004625E2 +(~0.2718281828459045E1, 0.123E2, ~0.22250738585072014E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.2718281828459045E1, 0.123E2, ~0.11125369292536007E~307): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.2718281828459045E1, 0.123E2, ~0.5E~323): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.2718281828459045E1, 0.123E2, ~0.0): ~0.33434866490046254E2 ~0.33434866490046254E2 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.123E4): 0.12214602657773264E4 0.12214602657773264E4 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.123E2): 0.37602657773264343E1 0.37602657773264343E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.3141592653589793E1): ~0.5398141569083773E1 ~0.5398141569083773E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.2718281828459045E1): ~0.5821452394214521E1 ~0.5821452394214521E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.123E1): ~0.7309734222673566E1 ~0.7309734222673566E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.123): ~0.8416734222673567E1 ~0.8416734222673567E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.123E~2): ~0.8538504222673566E1 ~0.8538504222673566E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.22250738585072014E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.11125369292536007E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.5E~323): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.2718281828459045E1, 0.3141592653589793E1, 0.0): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.123E4): ~0.12385397342226736E4 ~0.12385397342226736E4 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.123E2): ~0.20839734222673567E2 ~0.20839734222673567E2 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.11681326876263359E2 ~0.11681326876263359E2 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.1125801605113261E2 ~0.1125801605113261E2 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.123E1): ~0.9769734222673566E1 ~0.9769734222673566E1 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.123): ~0.8662734222673567E1 ~0.8662734222673567E1 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.123E~2): ~0.8540964222673566E1 ~0.8540964222673566E1 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.22250738585072014E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.11125369292536007E~307): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.5E~323): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.2718281828459045E1, 0.3141592653589793E1, ~0.0): ~0.8539734222673566E1 ~0.8539734222673566E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.123E4): 0.12226109439010693E4 0.12226109439010693E4 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.123E2): 0.4910943901069351E1 0.4910943901069351E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.3141592653589793E1): ~0.4247463445340856E1 ~0.4247463445340856E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.2718281828459045E1): ~0.4670774270471604E1 ~0.4670774270471604E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.123E1): ~0.6159056098930649E1 ~0.6159056098930649E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.123): ~0.7266056098930649E1 ~0.7266056098930649E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.123E~2): ~0.7387826098930649E1 ~0.7387826098930649E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.22250738585072014E~307): ~0.73890560989306495E1 ~0.73890560989306495E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.11125369292536007E~307): ~0.73890560989306495E1 ~0.73890560989306495E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.5E~323): ~0.73890560989306495E1 ~0.73890560989306495E1 +(~0.2718281828459045E1, 0.2718281828459045E1, 0.0): ~0.73890560989306495E1 ~0.73890560989306495E1 +(~0.2718281828459045E1, 0.2718281828459045E1, ~0.123E4): ~0.12373890560989307E4 ~0.12373890560989307E4 +(~0.2718281828459045E1, 0.2718281828459045E1, ~0.123E2): ~0.1968905609893065E2 ~0.1968905609893065E2 +(~0.2718281828459045E1, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.10530648752520442E2 ~0.10530648752520442E2 +(~0.2718281828459045E1, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.10107337927389695E2 ~0.10107337927389695E2 +(~0.2718281828459045E1, 0.2718281828459045E1, ~0.123E1): ~0.8619056098930649E1 ~0.8619056098930649E1 +(~0.2718281828459045E1, 0.2718281828459045E1, ~0.123): ~0.751205609893065E1 ~0.751205609893065E1 +(~0.2718281828459045E1, 0.2718281828459045E1, ~0.123E~2): ~0.7390286098930649E1 ~0.7390286098930649E1 +(~0.2718281828459045E1, 0.2718281828459045E1, ~0.22250738585072014E~307): ~0.73890560989306495E1 ~0.73890560989306495E1 +(~0.2718281828459045E1, 0.2718281828459045E1, ~0.11125369292536007E~307): ~0.73890560989306495E1 ~0.73890560989306495E1 +(~0.2718281828459045E1, 0.2718281828459045E1, ~0.5E~323): ~0.73890560989306495E1 ~0.73890560989306495E1 +(~0.2718281828459045E1, 0.2718281828459045E1, ~0.0): ~0.73890560989306495E1 ~0.73890560989306495E1 +(~0.2718281828459045E1, 0.123E1, 0.123E4): 0.12266565133509953E4 0.12266565133509953E4 +(~0.2718281828459045E1, 0.123E1, 0.123E2): 0.8956513350995376E1 0.8956513350995376E1 +(~0.2718281828459045E1, 0.123E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.2018939954148323 +(~0.2718281828459045E1, 0.123E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455804 +(~0.2718281828459045E1, 0.123E1, 0.123E1): ~0.21134866490046256E1 ~0.21134866490046256E1 +(~0.2718281828459045E1, 0.123E1, 0.123): ~0.32204866490046253E1 ~0.32204866490046253E1 +(~0.2718281828459045E1, 0.123E1, 0.123E~2): ~0.33422566490046255E1 ~0.33422566490046255E1 +(~0.2718281828459045E1, 0.123E1, 0.22250738585072014E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.2718281828459045E1, 0.123E1, 0.11125369292536007E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.2718281828459045E1, 0.123E1, 0.5E~323): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.2718281828459045E1, 0.123E1, 0.0): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.2718281828459045E1, 0.123E1, ~0.123E4): ~0.12333434866490047E4 ~0.12333434866490047E4 +(~0.2718281828459045E1, 0.123E1, ~0.123E2): ~0.15643486649004625E2 ~0.15643486649004625E2 +(~0.2718281828459045E1, 0.123E1, ~0.3141592653589793E1): ~0.6485079302594419E1 ~0.6485079302594419E1 +(~0.2718281828459045E1, 0.123E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.606176847746367E1 +(~0.2718281828459045E1, 0.123E1, ~0.123E1): ~0.4573486649004625E1 ~0.4573486649004625E1 +(~0.2718281828459045E1, 0.123E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046253E1 +(~0.2718281828459045E1, 0.123E1, ~0.123E~2): ~0.33447166490046256E1 ~0.33447166490046256E1 +(~0.2718281828459045E1, 0.123E1, ~0.22250738585072014E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.2718281828459045E1, 0.123E1, ~0.11125369292536007E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.2718281828459045E1, 0.123E1, ~0.5E~323): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.2718281828459045E1, 0.123E1, ~0.0): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.2718281828459045E1, 0.123, 0.123E4): 0.12296656513350995E4 0.12296656513350995E4 +(~0.2718281828459045E1, 0.123, 0.123E2): 0.11965651335099539E2 0.11965651335099539E2 +(~0.2718281828459045E1, 0.123, 0.3141592653589793E1): 0.28072439886893306E1 0.28072439886893306E1 +(~0.2718281828459045E1, 0.123, 0.2718281828459045E1): 0.23839331635585825E1 0.23839331635585825E1 +(~0.2718281828459045E1, 0.123, 0.123E1): 0.8956513350995374 0.8956513350995374 +(~0.2718281828459045E1, 0.123, 0.123): ~0.21134866490046253 ~0.21134866490046253 +(~0.2718281828459045E1, 0.123, 0.123E~2): ~0.33311866490046255 ~0.33311866490046255 +(~0.2718281828459045E1, 0.123, 0.22250738585072014E~307): ~0.33434866490046256 ~0.33434866490046256 +(~0.2718281828459045E1, 0.123, 0.11125369292536007E~307): ~0.33434866490046256 ~0.33434866490046256 +(~0.2718281828459045E1, 0.123, 0.5E~323): ~0.33434866490046256 ~0.33434866490046256 +(~0.2718281828459045E1, 0.123, 0.0): ~0.33434866490046256 ~0.33434866490046256 +(~0.2718281828459045E1, 0.123, ~0.123E4): ~0.12303343486649005E4 ~0.12303343486649005E4 +(~0.2718281828459045E1, 0.123, ~0.123E2): ~0.12634348664900463E2 ~0.12634348664900463E2 +(~0.2718281828459045E1, 0.123, ~0.3141592653589793E1): ~0.34759413184902557E1 ~0.34759413184902557E1 +(~0.2718281828459045E1, 0.123, ~0.2718281828459045E1): ~0.30526304933595076E1 ~0.30526304933595076E1 +(~0.2718281828459045E1, 0.123, ~0.123E1): ~0.15643486649004625E1 ~0.15643486649004625E1 +(~0.2718281828459045E1, 0.123, ~0.123): ~0.45734866490046255 ~0.45734866490046255 +(~0.2718281828459045E1, 0.123, ~0.123E~2): ~0.33557866490046256 ~0.33557866490046256 +(~0.2718281828459045E1, 0.123, ~0.22250738585072014E~307): ~0.33434866490046256 ~0.33434866490046256 +(~0.2718281828459045E1, 0.123, ~0.11125369292536007E~307): ~0.33434866490046256 ~0.33434866490046256 +(~0.2718281828459045E1, 0.123, ~0.5E~323): ~0.33434866490046256 ~0.33434866490046256 +(~0.2718281828459045E1, 0.123, ~0.0): ~0.33434866490046256 ~0.33434866490046256 +(~0.2718281828459045E1, 0.123E~2, 0.123E4): 0.1229996656513351E4 0.1229996656513351E4 +(~0.2718281828459045E1, 0.123E~2, 0.123E2): 0.12296656513350996E2 0.12296656513350996E2 +(~0.2718281828459045E1, 0.123E~2, 0.3141592653589793E1): 0.31382491669407884E1 0.31382491669407884E1 +(~0.2718281828459045E1, 0.123E~2, 0.2718281828459045E1): 0.27149383418100403E1 0.27149383418100403E1 +(~0.2718281828459045E1, 0.123E~2, 0.123E1): 0.12266565133509955E1 0.12266565133509955E1 +(~0.2718281828459045E1, 0.123E~2, 0.123): 0.11965651335099538 0.11965651335099538 +(~0.2718281828459045E1, 0.123E~2, 0.123E~2): ~0.21134866490046256E~2 ~0.21134866490046256E~2 +(~0.2718281828459045E1, 0.123E~2, 0.22250738585072014E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.2718281828459045E1, 0.123E~2, 0.11125369292536007E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.2718281828459045E1, 0.123E~2, 0.5E~323): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.2718281828459045E1, 0.123E~2, 0.0): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.2718281828459045E1, 0.123E~2, ~0.123E4): ~0.1230003343486649E4 ~0.1230003343486649E4 +(~0.2718281828459045E1, 0.123E~2, ~0.123E2): ~0.12303343486649005E2 ~0.12303343486649005E2 +(~0.2718281828459045E1, 0.123E~2, ~0.3141592653589793E1): ~0.3144936140238798E1 ~0.3144936140238798E1 +(~0.2718281828459045E1, 0.123E~2, ~0.2718281828459045E1): ~0.272162531510805E1 ~0.272162531510805E1 +(~0.2718281828459045E1, 0.123E~2, ~0.123E1): ~0.12333434866490045E1 ~0.12333434866490045E1 +(~0.2718281828459045E1, 0.123E~2, ~0.123): ~0.12634348664900463 ~0.12634348664900463 +(~0.2718281828459045E1, 0.123E~2, ~0.123E~2): ~0.4573486649004625E~2 ~0.4573486649004625E~2 +(~0.2718281828459045E1, 0.123E~2, ~0.22250738585072014E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.2718281828459045E1, 0.123E~2, ~0.11125369292536007E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.2718281828459045E1, 0.123E~2, ~0.5E~323): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.2718281828459045E1, 0.123E~2, ~0.0): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.2718281828459045E1, 0.22250738585072014E~307, 0.5E~323): ~0.6048377836559377E~307 ~0.6048377836559377E~307 +(~0.2718281828459045E1, 0.22250738585072014E~307, ~0.5E~323): ~0.6048377836559379E~307 ~0.6048377836559379E~307 +(~0.2718281828459045E1, 0.11125369292536007E~307, ~0.22250738585072014E~307): ~0.524926277678689E~307 ~0.524926277678689E~307 +(~0.2718281828459045E1, 0.5E~323, 0.22250738585072014E~307): 0.22250738585072E~307 0.22250738585072E~307 +(~0.2718281828459045E1, 0.5E~323, 0.11125369292536007E~307): 0.1112536929253599E~307 0.1112536929253599E~307 +(~0.2718281828459045E1, 0.5E~323, 0.5E~323): ~0.1E~322 ~0.1E~322 +(~0.2718281828459045E1, 0.5E~323, 0.0): ~0.15E~322 ~0.15E~322 +(~0.2718281828459045E1, 0.5E~323, ~0.22250738585072014E~307): ~0.2225073858507203E~307 ~0.2225073858507203E~307 +(~0.2718281828459045E1, 0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253602E~307 ~0.1112536929253602E~307 +(~0.2718281828459045E1, 0.5E~323, ~0.5E~323): ~0.2E~322 ~0.2E~322 +(~0.2718281828459045E1, 0.5E~323, ~0.0): ~0.15E~322 ~0.15E~322 +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.17976931348623157E309): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.8988465674311579E308): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.123E4): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.123E2): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.3141592653589793E1): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.2718281828459045E1): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.123E1): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.123): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.123E~2): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.5E~323): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, 0.0): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.17976931348623157E309): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.8988465674311579E308): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.123E4): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.123E2): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.123E1): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.123): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.123E~2): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.5E~323): inf inf +(~0.2718281828459045E1, ~0.17976931348623157E309, ~0.0): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.17976931348623157E309): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.8988465674311579E308): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.123E4): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.123E2): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.3141592653589793E1): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.2718281828459045E1): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.123E1): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.123): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.123E~2): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.22250738585072014E~307): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.11125369292536007E~307): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.5E~323): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, 0.0): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.17976931348623157E309): 0.6456251559585884E308 0.6456251559585884E308 +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.8988465674311579E308): 0.15444717233897463E309 0.15444717233897463E309 +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.123E4): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.123E2): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.3141592653589793E1): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.2718281828459045E1): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.123E1): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.123): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.123E~2): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.22250738585072014E~307): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.11125369292536007E~307): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.5E~323): inf inf +(~0.2718281828459045E1, ~0.8988465674311579E308, ~0.0): inf inf +(~0.2718281828459045E1, ~0.123E4, 0.123E4): 0.4573486649004625E4 0.4573486649004625E4 +(~0.2718281828459045E1, ~0.123E4, 0.123E2): 0.33557866490046254E4 0.33557866490046254E4 +(~0.2718281828459045E1, ~0.123E4, 0.3141592653589793E1): 0.33466282416582153E4 0.33466282416582153E4 +(~0.2718281828459045E1, ~0.123E4, 0.2718281828459045E1): 0.33462049308330843E4 0.33462049308330843E4 +(~0.2718281828459045E1, ~0.123E4, 0.123E1): 0.33447166490046257E4 0.33447166490046257E4 +(~0.2718281828459045E1, ~0.123E4, 0.123): 0.33436096490046257E4 0.33436096490046257E4 +(~0.2718281828459045E1, ~0.123E4, 0.123E~2): 0.33434878790046255E4 0.33434878790046255E4 +(~0.2718281828459045E1, ~0.123E4, 0.22250738585072014E~307): 0.33434866490046256E4 0.33434866490046256E4 +(~0.2718281828459045E1, ~0.123E4, 0.11125369292536007E~307): 0.33434866490046256E4 0.33434866490046256E4 +(~0.2718281828459045E1, ~0.123E4, 0.5E~323): 0.33434866490046256E4 0.33434866490046256E4 +(~0.2718281828459045E1, ~0.123E4, 0.0): 0.33434866490046256E4 0.33434866490046256E4 +(~0.2718281828459045E1, ~0.123E4, ~0.123E4): 0.21134866490046256E4 0.21134866490046256E4 +(~0.2718281828459045E1, ~0.123E4, ~0.123E2): 0.33311866490046255E4 0.33311866490046255E4 +(~0.2718281828459045E1, ~0.123E4, ~0.3141592653589793E1): 0.33403450563510355E4 0.33403450563510355E4 +(~0.2718281828459045E1, ~0.123E4, ~0.2718281828459045E1): 0.33407683671761665E4 0.33407683671761665E4 +(~0.2718281828459045E1, ~0.123E4, ~0.123E1): 0.33422566490046256E4 0.33422566490046256E4 +(~0.2718281828459045E1, ~0.123E4, ~0.123): 0.33433636490046256E4 0.33433636490046256E4 +(~0.2718281828459045E1, ~0.123E4, ~0.123E~2): 0.33434854190046253E4 0.33434854190046253E4 +(~0.2718281828459045E1, ~0.123E4, ~0.22250738585072014E~307): 0.33434866490046256E4 0.33434866490046256E4 +(~0.2718281828459045E1, ~0.123E4, ~0.11125369292536007E~307): 0.33434866490046256E4 0.33434866490046256E4 +(~0.2718281828459045E1, ~0.123E4, ~0.5E~323): 0.33434866490046256E4 0.33434866490046256E4 +(~0.2718281828459045E1, ~0.123E4, ~0.0): 0.33434866490046256E4 0.33434866490046256E4 +(~0.2718281828459045E1, ~0.123E2, 0.123E4): 0.12634348664900463E4 0.12634348664900463E4 +(~0.2718281828459045E1, ~0.123E2, 0.123E2): 0.4573486649004626E2 0.4573486649004626E2 +(~0.2718281828459045E1, ~0.123E2, 0.3141592653589793E1): 0.3657645914363605E2 0.3657645914363605E2 +(~0.2718281828459045E1, ~0.123E2, 0.2718281828459045E1): 0.361531483185053E2 0.361531483185053E2 +(~0.2718281828459045E1, ~0.123E2, 0.123E1): 0.3466486649004626E2 0.3466486649004626E2 +(~0.2718281828459045E1, ~0.123E2, 0.123): 0.3355786649004626E2 0.3355786649004626E2 +(~0.2718281828459045E1, ~0.123E2, 0.123E~2): 0.3343609649004625E2 0.3343609649004625E2 +(~0.2718281828459045E1, ~0.123E2, 0.22250738585072014E~307): 0.33434866490046254E2 0.33434866490046254E2 +(~0.2718281828459045E1, ~0.123E2, 0.11125369292536007E~307): 0.33434866490046254E2 0.33434866490046254E2 +(~0.2718281828459045E1, ~0.123E2, 0.5E~323): 0.33434866490046254E2 0.33434866490046254E2 +(~0.2718281828459045E1, ~0.123E2, 0.0): 0.33434866490046254E2 0.33434866490046254E2 +(~0.2718281828459045E1, ~0.123E2, ~0.123E4): ~0.11965651335099537E4 ~0.11965651335099537E4 +(~0.2718281828459045E1, ~0.123E2, ~0.123E2): 0.21134866490046257E2 0.21134866490046257E2 +(~0.2718281828459045E1, ~0.123E2, ~0.3141592653589793E1): 0.30293273836456464E2 0.30293273836456464E2 +(~0.2718281828459045E1, ~0.123E2, ~0.2718281828459045E1): 0.30716584661587213E2 0.30716584661587213E2 +(~0.2718281828459045E1, ~0.123E2, ~0.123E1): 0.3220486649004626E2 0.3220486649004626E2 +(~0.2718281828459045E1, ~0.123E2, ~0.123): 0.33311866490046256E2 0.33311866490046256E2 +(~0.2718281828459045E1, ~0.123E2, ~0.123E~2): 0.33433636490046254E2 0.33433636490046254E2 +(~0.2718281828459045E1, ~0.123E2, ~0.22250738585072014E~307): 0.33434866490046254E2 0.33434866490046254E2 +(~0.2718281828459045E1, ~0.123E2, ~0.11125369292536007E~307): 0.33434866490046254E2 0.33434866490046254E2 +(~0.2718281828459045E1, ~0.123E2, ~0.5E~323): 0.33434866490046254E2 0.33434866490046254E2 +(~0.2718281828459045E1, ~0.123E2, ~0.0): 0.33434866490046254E2 0.33434866490046254E2 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.123E4): 0.12385397342226736E4 0.12385397342226736E4 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.123E2): 0.20839734222673567E2 0.20839734222673567E2 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.3141592653589793E1): 0.11681326876263359E2 0.11681326876263359E2 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.2718281828459045E1): 0.1125801605113261E2 0.1125801605113261E2 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.123E1): 0.9769734222673566E1 0.9769734222673566E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.123): 0.8662734222673567E1 0.8662734222673567E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.123E~2): 0.8540964222673566E1 0.8540964222673566E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.22250738585072014E~307): 0.8539734222673566E1 0.8539734222673566E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.11125369292536007E~307): 0.8539734222673566E1 0.8539734222673566E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.5E~323): 0.8539734222673566E1 0.8539734222673566E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, 0.0): 0.8539734222673566E1 0.8539734222673566E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E4): ~0.12214602657773264E4 ~0.12214602657773264E4 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E2): ~0.37602657773264343E1 ~0.37602657773264343E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.3141592653589793E1): 0.5398141569083773E1 0.5398141569083773E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.2718281828459045E1): 0.5821452394214521E1 0.5821452394214521E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E1): 0.7309734222673566E1 0.7309734222673566E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.123): 0.8416734222673567E1 0.8416734222673567E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.123E~2): 0.8538504222673566E1 0.8538504222673566E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.22250738585072014E~307): 0.8539734222673566E1 0.8539734222673566E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.11125369292536007E~307): 0.8539734222673566E1 0.8539734222673566E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.5E~323): 0.8539734222673566E1 0.8539734222673566E1 +(~0.2718281828459045E1, ~0.3141592653589793E1, ~0.0): 0.8539734222673566E1 0.8539734222673566E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, 0.123E4): 0.12373890560989307E4 0.12373890560989307E4 +(~0.2718281828459045E1, ~0.2718281828459045E1, 0.123E2): 0.1968905609893065E2 0.1968905609893065E2 +(~0.2718281828459045E1, ~0.2718281828459045E1, 0.3141592653589793E1): 0.10530648752520442E2 0.10530648752520442E2 +(~0.2718281828459045E1, ~0.2718281828459045E1, 0.2718281828459045E1): 0.10107337927389695E2 0.10107337927389695E2 +(~0.2718281828459045E1, ~0.2718281828459045E1, 0.123E1): 0.8619056098930649E1 0.8619056098930649E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, 0.123): 0.751205609893065E1 0.751205609893065E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, 0.123E~2): 0.7390286098930649E1 0.7390286098930649E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, 0.22250738585072014E~307): 0.73890560989306495E1 0.73890560989306495E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, 0.11125369292536007E~307): 0.73890560989306495E1 0.73890560989306495E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, 0.5E~323): 0.73890560989306495E1 0.73890560989306495E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, 0.0): 0.73890560989306495E1 0.73890560989306495E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E4): ~0.12226109439010693E4 ~0.12226109439010693E4 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E2): ~0.4910943901069351E1 ~0.4910943901069351E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.4247463445340856E1 0.4247463445340856E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.2718281828459045E1): 0.4670774270471604E1 0.4670774270471604E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E1): 0.6159056098930649E1 0.6159056098930649E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.123): 0.7266056098930649E1 0.7266056098930649E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.123E~2): 0.7387826098930649E1 0.7387826098930649E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.22250738585072014E~307): 0.73890560989306495E1 0.73890560989306495E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.11125369292536007E~307): 0.73890560989306495E1 0.73890560989306495E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.5E~323): 0.73890560989306495E1 0.73890560989306495E1 +(~0.2718281828459045E1, ~0.2718281828459045E1, ~0.0): 0.73890560989306495E1 0.73890560989306495E1 +(~0.2718281828459045E1, ~0.123E1, 0.123E4): 0.12333434866490047E4 0.12333434866490047E4 +(~0.2718281828459045E1, ~0.123E1, 0.123E2): 0.15643486649004625E2 0.15643486649004625E2 +(~0.2718281828459045E1, ~0.123E1, 0.3141592653589793E1): 0.6485079302594419E1 0.6485079302594419E1 +(~0.2718281828459045E1, ~0.123E1, 0.2718281828459045E1): 0.606176847746367E1 0.606176847746367E1 +(~0.2718281828459045E1, ~0.123E1, 0.123E1): 0.4573486649004625E1 0.4573486649004625E1 +(~0.2718281828459045E1, ~0.123E1, 0.123): 0.34664866490046253E1 0.34664866490046253E1 +(~0.2718281828459045E1, ~0.123E1, 0.123E~2): 0.33447166490046256E1 0.33447166490046256E1 +(~0.2718281828459045E1, ~0.123E1, 0.22250738585072014E~307): 0.33434866490046256E1 0.33434866490046256E1 +(~0.2718281828459045E1, ~0.123E1, 0.11125369292536007E~307): 0.33434866490046256E1 0.33434866490046256E1 +(~0.2718281828459045E1, ~0.123E1, 0.5E~323): 0.33434866490046256E1 0.33434866490046256E1 +(~0.2718281828459045E1, ~0.123E1, 0.0): 0.33434866490046256E1 0.33434866490046256E1 +(~0.2718281828459045E1, ~0.123E1, ~0.123E4): ~0.12266565133509953E4 ~0.12266565133509953E4 +(~0.2718281828459045E1, ~0.123E1, ~0.123E2): ~0.8956513350995376E1 ~0.8956513350995376E1 +(~0.2718281828459045E1, ~0.123E1, ~0.3141592653589793E1): 0.2018939954148323 0.2018939954148323 +(~0.2718281828459045E1, ~0.123E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455804 +(~0.2718281828459045E1, ~0.123E1, ~0.123E1): 0.21134866490046256E1 0.21134866490046256E1 +(~0.2718281828459045E1, ~0.123E1, ~0.123): 0.32204866490046253E1 0.32204866490046253E1 +(~0.2718281828459045E1, ~0.123E1, ~0.123E~2): 0.33422566490046255E1 0.33422566490046255E1 +(~0.2718281828459045E1, ~0.123E1, ~0.22250738585072014E~307): 0.33434866490046256E1 0.33434866490046256E1 +(~0.2718281828459045E1, ~0.123E1, ~0.11125369292536007E~307): 0.33434866490046256E1 0.33434866490046256E1 +(~0.2718281828459045E1, ~0.123E1, ~0.5E~323): 0.33434866490046256E1 0.33434866490046256E1 +(~0.2718281828459045E1, ~0.123E1, ~0.0): 0.33434866490046256E1 0.33434866490046256E1 +(~0.2718281828459045E1, ~0.123, 0.123E4): 0.12303343486649005E4 0.12303343486649005E4 +(~0.2718281828459045E1, ~0.123, 0.123E2): 0.12634348664900463E2 0.12634348664900463E2 +(~0.2718281828459045E1, ~0.123, 0.3141592653589793E1): 0.34759413184902557E1 0.34759413184902557E1 +(~0.2718281828459045E1, ~0.123, 0.2718281828459045E1): 0.30526304933595076E1 0.30526304933595076E1 +(~0.2718281828459045E1, ~0.123, 0.123E1): 0.15643486649004625E1 0.15643486649004625E1 +(~0.2718281828459045E1, ~0.123, 0.123): 0.45734866490046255 0.45734866490046255 +(~0.2718281828459045E1, ~0.123, 0.123E~2): 0.33557866490046256 0.33557866490046256 +(~0.2718281828459045E1, ~0.123, 0.22250738585072014E~307): 0.33434866490046256 0.33434866490046256 +(~0.2718281828459045E1, ~0.123, 0.11125369292536007E~307): 0.33434866490046256 0.33434866490046256 +(~0.2718281828459045E1, ~0.123, 0.5E~323): 0.33434866490046256 0.33434866490046256 +(~0.2718281828459045E1, ~0.123, 0.0): 0.33434866490046256 0.33434866490046256 +(~0.2718281828459045E1, ~0.123, ~0.123E4): ~0.12296656513350995E4 ~0.12296656513350995E4 +(~0.2718281828459045E1, ~0.123, ~0.123E2): ~0.11965651335099539E2 ~0.11965651335099539E2 +(~0.2718281828459045E1, ~0.123, ~0.3141592653589793E1): ~0.28072439886893306E1 ~0.28072439886893306E1 +(~0.2718281828459045E1, ~0.123, ~0.2718281828459045E1): ~0.23839331635585825E1 ~0.23839331635585825E1 +(~0.2718281828459045E1, ~0.123, ~0.123E1): ~0.8956513350995374 ~0.8956513350995374 +(~0.2718281828459045E1, ~0.123, ~0.123): 0.21134866490046253 0.21134866490046253 +(~0.2718281828459045E1, ~0.123, ~0.123E~2): 0.33311866490046255 0.33311866490046255 +(~0.2718281828459045E1, ~0.123, ~0.22250738585072014E~307): 0.33434866490046256 0.33434866490046256 +(~0.2718281828459045E1, ~0.123, ~0.11125369292536007E~307): 0.33434866490046256 0.33434866490046256 +(~0.2718281828459045E1, ~0.123, ~0.5E~323): 0.33434866490046256 0.33434866490046256 +(~0.2718281828459045E1, ~0.123, ~0.0): 0.33434866490046256 0.33434866490046256 +(~0.2718281828459045E1, ~0.123E~2, 0.123E4): 0.1230003343486649E4 0.1230003343486649E4 +(~0.2718281828459045E1, ~0.123E~2, 0.123E2): 0.12303343486649005E2 0.12303343486649005E2 +(~0.2718281828459045E1, ~0.123E~2, 0.3141592653589793E1): 0.3144936140238798E1 0.3144936140238798E1 +(~0.2718281828459045E1, ~0.123E~2, 0.2718281828459045E1): 0.272162531510805E1 0.272162531510805E1 +(~0.2718281828459045E1, ~0.123E~2, 0.123E1): 0.12333434866490045E1 0.12333434866490045E1 +(~0.2718281828459045E1, ~0.123E~2, 0.123): 0.12634348664900463 0.12634348664900463 +(~0.2718281828459045E1, ~0.123E~2, 0.123E~2): 0.4573486649004625E~2 0.4573486649004625E~2 +(~0.2718281828459045E1, ~0.123E~2, 0.22250738585072014E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.2718281828459045E1, ~0.123E~2, 0.11125369292536007E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.2718281828459045E1, ~0.123E~2, 0.5E~323): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.2718281828459045E1, ~0.123E~2, 0.0): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.2718281828459045E1, ~0.123E~2, ~0.123E4): ~0.1229996656513351E4 ~0.1229996656513351E4 +(~0.2718281828459045E1, ~0.123E~2, ~0.123E2): ~0.12296656513350996E2 ~0.12296656513350996E2 +(~0.2718281828459045E1, ~0.123E~2, ~0.3141592653589793E1): ~0.31382491669407884E1 ~0.31382491669407884E1 +(~0.2718281828459045E1, ~0.123E~2, ~0.2718281828459045E1): ~0.27149383418100403E1 ~0.27149383418100403E1 +(~0.2718281828459045E1, ~0.123E~2, ~0.123E1): ~0.12266565133509955E1 ~0.12266565133509955E1 +(~0.2718281828459045E1, ~0.123E~2, ~0.123): ~0.11965651335099538 ~0.11965651335099538 +(~0.2718281828459045E1, ~0.123E~2, ~0.123E~2): 0.21134866490046256E~2 0.21134866490046256E~2 +(~0.2718281828459045E1, ~0.123E~2, ~0.22250738585072014E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.2718281828459045E1, ~0.123E~2, ~0.11125369292536007E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.2718281828459045E1, ~0.123E~2, ~0.5E~323): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.2718281828459045E1, ~0.123E~2, ~0.0): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.2718281828459045E1, ~0.22250738585072014E~307, 0.5E~323): 0.6048377836559379E~307 0.6048377836559379E~307 +(~0.2718281828459045E1, ~0.22250738585072014E~307, ~0.5E~323): 0.6048377836559377E~307 0.6048377836559377E~307 +(~0.2718281828459045E1, ~0.11125369292536007E~307, 0.22250738585072014E~307): 0.524926277678689E~307 0.524926277678689E~307 +(~0.2718281828459045E1, ~0.5E~323, 0.22250738585072014E~307): 0.2225073858507203E~307 0.2225073858507203E~307 +(~0.2718281828459045E1, ~0.5E~323, 0.11125369292536007E~307): 0.1112536929253602E~307 0.1112536929253602E~307 +(~0.2718281828459045E1, ~0.5E~323, 0.5E~323): 0.2E~322 0.2E~322 +(~0.2718281828459045E1, ~0.5E~323, 0.0): 0.15E~322 0.15E~322 +(~0.2718281828459045E1, ~0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072E~307 ~0.22250738585072E~307 +(~0.2718281828459045E1, ~0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253599E~307 ~0.1112536929253599E~307 +(~0.2718281828459045E1, ~0.5E~323, ~0.5E~323): 0.1E~322 0.1E~322 +(~0.2718281828459045E1, ~0.5E~323, ~0.0): 0.15E~322 0.15E~322 +(~0.123E1, 0.17976931348623157E309, 0.17976931348623157E309): ~0.4134694210183326E308 ~0.4134694210183326E308 +(~0.123E1, 0.17976931348623157E309, 0.8988465674311579E308): ~0.13123159884494904E309 ~0.13123159884494904E309 +(~0.123E1, 0.17976931348623157E309, 0.123E4): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, 0.123E2): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, 0.3141592653589793E1): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, 0.2718281828459045E1): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, 0.123E1): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, 0.123): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, 0.123E~2): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, 0.22250738585072014E~307): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, 0.11125369292536007E~307): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, 0.5E~323): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, 0.0): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.8988465674311579E308): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.123E4): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.123E2): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.3141592653589793E1): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.2718281828459045E1): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.123E1): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.123): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.123E~2): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.22250738585072014E~307): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.11125369292536007E~307): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.5E~323): ~inf ~inf +(~0.123E1, 0.17976931348623157E309, ~0.0): ~inf ~inf +(~0.123E1, 0.8988465674311579E308, 0.17976931348623157E309): 0.6921118569219915E308 0.6921118569219915E308 +(~0.123E1, 0.8988465674311579E308, 0.8988465674311579E308): ~0.2067347105091663E308 ~0.2067347105091663E308 +(~0.123E1, 0.8988465674311579E308, 0.123E4): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, 0.123E2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, 0.3141592653589793E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, 0.2718281828459045E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, 0.123E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, 0.123): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, 0.123E~2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, 0.22250738585072014E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, 0.11125369292536007E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, 0.5E~323): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, 0.0): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(~0.123E1, 0.8988465674311579E308, ~0.8988465674311579E308): ~inf ~inf +(~0.123E1, 0.8988465674311579E308, ~0.123E4): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, ~0.123E2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, ~0.3141592653589793E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, ~0.2718281828459045E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, ~0.123E1): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, ~0.123): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, ~0.123E~2): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, ~0.22250738585072014E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, ~0.11125369292536007E~307): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, ~0.5E~323): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.8988465674311579E308, ~0.0): ~0.1105581277940324E309 ~0.1105581277940324E309 +(~0.123E1, 0.123E4, 0.123E4): ~0.2829E3 ~0.2829E3 +(~0.123E1, 0.123E4, 0.123E2): ~0.15006E4 ~0.15006E4 +(~0.123E1, 0.123E4, 0.3141592653589793E1): ~0.15097584073464102E4 ~0.15097584073464102E4 +(~0.123E1, 0.123E4, 0.2718281828459045E1): ~0.1510181718171541E4 ~0.1510181718171541E4 +(~0.123E1, 0.123E4, 0.123E1): ~0.151167E4 ~0.151167E4 +(~0.123E1, 0.123E4, 0.123): ~0.1512777E4 ~0.1512777E4 +(~0.123E1, 0.123E4, 0.123E~2): ~0.151289877E4 ~0.151289877E4 +(~0.123E1, 0.123E4, 0.22250738585072014E~307): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, 0.11125369292536007E~307): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, 0.5E~323): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, 0.0): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, ~0.123E4): ~0.27429E4 ~0.27429E4 +(~0.123E1, 0.123E4, ~0.123E2): ~0.15252E4 ~0.15252E4 +(~0.123E1, 0.123E4, ~0.3141592653589793E1): ~0.15160415926535898E4 ~0.15160415926535898E4 +(~0.123E1, 0.123E4, ~0.2718281828459045E1): ~0.1515618281828459E4 ~0.1515618281828459E4 +(~0.123E1, 0.123E4, ~0.123E1): ~0.15141299999999999E4 ~0.15141299999999999E4 +(~0.123E1, 0.123E4, ~0.123): ~0.1513023E4 ~0.1513023E4 +(~0.123E1, 0.123E4, ~0.123E~2): ~0.151290123E4 ~0.151290123E4 +(~0.123E1, 0.123E4, ~0.22250738585072014E~307): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, ~0.11125369292536007E~307): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, ~0.5E~323): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E4, ~0.0): ~0.15129E4 ~0.15129E4 +(~0.123E1, 0.123E2, 0.123E4): 0.1214871E4 0.1214871E4 +(~0.123E1, 0.123E2, 0.123E2): ~0.28289999999999997E1 ~0.28289999999999997E1 +(~0.123E1, 0.123E2, 0.3141592653589793E1): ~0.11987407346410208E2 ~0.11987407346410208E2 +(~0.123E1, 0.123E2, 0.2718281828459045E1): ~0.12410718171540955E2 ~0.12410718171540955E2 +(~0.123E1, 0.123E2, 0.123E1): ~0.13899000000000001E2 ~0.13899000000000001E2 +(~0.123E1, 0.123E2, 0.123): ~0.15006E2 ~0.15006E2 +(~0.123E1, 0.123E2, 0.123E~2): ~0.1512777E2 ~0.1512777E2 +(~0.123E1, 0.123E2, 0.22250738585072014E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E1, 0.123E2, 0.11125369292536007E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E1, 0.123E2, 0.5E~323): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E1, 0.123E2, 0.0): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E1, 0.123E2, ~0.123E4): ~0.1245129E4 ~0.1245129E4 +(~0.123E1, 0.123E2, ~0.123E2): ~0.27429000000000002E2 ~0.27429000000000002E2 +(~0.123E1, 0.123E2, ~0.3141592653589793E1): ~0.18270592653589794E2 ~0.18270592653589794E2 +(~0.123E1, 0.123E2, ~0.2718281828459045E1): ~0.17847281828459046E2 ~0.17847281828459046E2 +(~0.123E1, 0.123E2, ~0.123E1): ~0.16359E2 ~0.16359E2 +(~0.123E1, 0.123E2, ~0.123): ~0.15252E2 ~0.15252E2 +(~0.123E1, 0.123E2, ~0.123E~2): ~0.15130230000000001E2 ~0.15130230000000001E2 +(~0.123E1, 0.123E2, ~0.22250738585072014E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E1, 0.123E2, ~0.11125369292536007E~307): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E1, 0.123E2, ~0.5E~323): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E1, 0.123E2, ~0.0): ~0.15129000000000001E2 ~0.15129000000000001E2 +(~0.123E1, 0.3141592653589793E1, 0.123E4): 0.12261358410360845E4 0.12261358410360845E4 +(~0.123E1, 0.3141592653589793E1, 0.123E2): 0.8435841036084556E1 0.8435841036084556E1 +(~0.123E1, 0.3141592653589793E1, 0.3141592653589793E1): ~0.7225663103256523 ~0.7225663103256523 +(~0.123E1, 0.3141592653589793E1, 0.2718281828459045E1): ~0.11458771354564004E1 ~0.11458771354564004E1 +(~0.123E1, 0.3141592653589793E1, 0.123E1): ~0.26341589639154455E1 ~0.26341589639154455E1 +(~0.123E1, 0.3141592653589793E1, 0.123): ~0.37411589639154457E1 ~0.37411589639154457E1 +(~0.123E1, 0.3141592653589793E1, 0.123E~2): ~0.38629289639154454E1 ~0.38629289639154454E1 +(~0.123E1, 0.3141592653589793E1, 0.22250738585072014E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.123E1, 0.3141592653589793E1, 0.11125369292536007E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.123E1, 0.3141592653589793E1, 0.5E~323): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.123E1, 0.3141592653589793E1, 0.0): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.123E1, 0.3141592653589793E1, ~0.123E4): ~0.12338641589639155E4 ~0.12338641589639155E4 +(~0.123E1, 0.3141592653589793E1, ~0.123E2): ~0.16164158963915447E2 ~0.16164158963915447E2 +(~0.123E1, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.7005751617505239E1 ~0.7005751617505239E1 +(~0.123E1, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.65824407923744905E1 ~0.65824407923744905E1 +(~0.123E1, 0.3141592653589793E1, ~0.123E1): ~0.5094158963915445E1 ~0.5094158963915445E1 +(~0.123E1, 0.3141592653589793E1, ~0.123): ~0.39871589639154457E1 ~0.39871589639154457E1 +(~0.123E1, 0.3141592653589793E1, ~0.123E~2): ~0.38653889639154455E1 ~0.38653889639154455E1 +(~0.123E1, 0.3141592653589793E1, ~0.22250738585072014E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.123E1, 0.3141592653589793E1, ~0.11125369292536007E~307): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.123E1, 0.3141592653589793E1, ~0.5E~323): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.123E1, 0.3141592653589793E1, ~0.0): ~0.38641589639154454E1 ~0.38641589639154454E1 +(~0.123E1, 0.2718281828459045E1, 0.123E4): 0.12266565133509953E4 0.12266565133509953E4 +(~0.123E1, 0.2718281828459045E1, 0.123E2): 0.8956513350995376E1 0.8956513350995376E1 +(~0.123E1, 0.2718281828459045E1, 0.3141592653589793E1): ~0.2018939954148323 ~0.2018939954148323 +(~0.123E1, 0.2718281828459045E1, 0.2718281828459045E1): ~0.6252048205455804 ~0.6252048205455804 +(~0.123E1, 0.2718281828459045E1, 0.123E1): ~0.21134866490046256E1 ~0.21134866490046256E1 +(~0.123E1, 0.2718281828459045E1, 0.123): ~0.32204866490046253E1 ~0.32204866490046253E1 +(~0.123E1, 0.2718281828459045E1, 0.123E~2): ~0.33422566490046255E1 ~0.33422566490046255E1 +(~0.123E1, 0.2718281828459045E1, 0.22250738585072014E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.123E1, 0.2718281828459045E1, 0.11125369292536007E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.123E1, 0.2718281828459045E1, 0.5E~323): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.123E1, 0.2718281828459045E1, 0.0): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.123E1, 0.2718281828459045E1, ~0.123E4): ~0.12333434866490047E4 ~0.12333434866490047E4 +(~0.123E1, 0.2718281828459045E1, ~0.123E2): ~0.15643486649004625E2 ~0.15643486649004625E2 +(~0.123E1, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.6485079302594419E1 ~0.6485079302594419E1 +(~0.123E1, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.606176847746367E1 ~0.606176847746367E1 +(~0.123E1, 0.2718281828459045E1, ~0.123E1): ~0.4573486649004625E1 ~0.4573486649004625E1 +(~0.123E1, 0.2718281828459045E1, ~0.123): ~0.34664866490046253E1 ~0.34664866490046253E1 +(~0.123E1, 0.2718281828459045E1, ~0.123E~2): ~0.33447166490046256E1 ~0.33447166490046256E1 +(~0.123E1, 0.2718281828459045E1, ~0.22250738585072014E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.123E1, 0.2718281828459045E1, ~0.11125369292536007E~307): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.123E1, 0.2718281828459045E1, ~0.5E~323): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.123E1, 0.2718281828459045E1, ~0.0): ~0.33434866490046256E1 ~0.33434866490046256E1 +(~0.123E1, 0.123E1, 0.123E4): 0.12284871E4 0.12284871E4 +(~0.123E1, 0.123E1, 0.123E2): 0.107871E2 0.107871E2 +(~0.123E1, 0.123E1, 0.3141592653589793E1): 0.16286926535897932E1 0.16286926535897932E1 +(~0.123E1, 0.123E1, 0.2718281828459045E1): 0.12053818284590452E1 0.12053818284590452E1 +(~0.123E1, 0.123E1, 0.123E1): ~0.2829 ~0.2829 +(~0.123E1, 0.123E1, 0.123): ~0.13899E1 ~0.13899E1 +(~0.123E1, 0.123E1, 0.123E~2): ~0.15116699999999998E1 ~0.15116699999999998E1 +(~0.123E1, 0.123E1, 0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, 0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, 0.5E~323): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, 0.0): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, ~0.123E4): ~0.12315129E4 ~0.12315129E4 +(~0.123E1, 0.123E1, ~0.123E2): ~0.138129E2 ~0.138129E2 +(~0.123E1, 0.123E1, ~0.3141592653589793E1): ~0.4654492653589793E1 ~0.4654492653589793E1 +(~0.123E1, 0.123E1, ~0.2718281828459045E1): ~0.4231181828459045E1 ~0.4231181828459045E1 +(~0.123E1, 0.123E1, ~0.123E1): ~0.27429E1 ~0.27429E1 +(~0.123E1, 0.123E1, ~0.123): ~0.16359E1 ~0.16359E1 +(~0.123E1, 0.123E1, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(~0.123E1, 0.123E1, ~0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, ~0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, ~0.5E~323): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123E1, ~0.0): ~0.15129E1 ~0.15129E1 +(~0.123E1, 0.123, 0.123E4): 0.122984871E4 0.122984871E4 +(~0.123E1, 0.123, 0.123E2): 0.12148710000000001E2 0.12148710000000001E2 +(~0.123E1, 0.123, 0.3141592653589793E1): 0.2990302653589793E1 0.2990302653589793E1 +(~0.123E1, 0.123, 0.2718281828459045E1): 0.2566991828459045E1 0.2566991828459045E1 +(~0.123E1, 0.123, 0.123E1): 0.107871E1 0.107871E1 +(~0.123E1, 0.123, 0.123): ~0.28289999999999996E~1 ~0.28289999999999996E~1 +(~0.123E1, 0.123, 0.123E~2): ~0.15006 ~0.15006 +(~0.123E1, 0.123, 0.22250738585072014E~307): ~0.15129 ~0.15129 +(~0.123E1, 0.123, 0.11125369292536007E~307): ~0.15129 ~0.15129 +(~0.123E1, 0.123, 0.5E~323): ~0.15129 ~0.15129 +(~0.123E1, 0.123, 0.0): ~0.15129 ~0.15129 +(~0.123E1, 0.123, ~0.123E4): ~0.123015129E4 ~0.123015129E4 +(~0.123E1, 0.123, ~0.123E2): ~0.1245129E2 ~0.1245129E2 +(~0.123E1, 0.123, ~0.3141592653589793E1): ~0.3292882653589793E1 ~0.3292882653589793E1 +(~0.123E1, 0.123, ~0.2718281828459045E1): ~0.2869571828459045E1 ~0.2869571828459045E1 +(~0.123E1, 0.123, ~0.123E1): ~0.138129E1 ~0.138129E1 +(~0.123E1, 0.123, ~0.123): ~0.27429 ~0.27429 +(~0.123E1, 0.123, ~0.123E~2): ~0.15252 ~0.15252 +(~0.123E1, 0.123, ~0.22250738585072014E~307): ~0.15129 ~0.15129 +(~0.123E1, 0.123, ~0.11125369292536007E~307): ~0.15129 ~0.15129 +(~0.123E1, 0.123, ~0.5E~323): ~0.15129 ~0.15129 +(~0.123E1, 0.123, ~0.0): ~0.15129 ~0.15129 +(~0.123E1, 0.123E~2, 0.123E4): 0.12299984871E4 0.12299984871E4 +(~0.123E1, 0.123E~2, 0.123E2): 0.12298487100000001E2 0.12298487100000001E2 +(~0.123E1, 0.123E~2, 0.3141592653589793E1): 0.31400797535897933E1 0.31400797535897933E1 +(~0.123E1, 0.123E~2, 0.2718281828459045E1): 0.27167689284590453E1 0.27167689284590453E1 +(~0.123E1, 0.123E~2, 0.123E1): 0.12284871E1 0.12284871E1 +(~0.123E1, 0.123E~2, 0.123): 0.1214871 0.1214871 +(~0.123E1, 0.123E~2, 0.123E~2): ~0.2829E~3 ~0.2829E~3 +(~0.123E1, 0.123E~2, 0.22250738585072014E~307): ~0.15129E~2 ~0.15129E~2 +(~0.123E1, 0.123E~2, 0.11125369292536007E~307): ~0.15129E~2 ~0.15129E~2 +(~0.123E1, 0.123E~2, 0.5E~323): ~0.15129E~2 ~0.15129E~2 +(~0.123E1, 0.123E~2, 0.0): ~0.15129E~2 ~0.15129E~2 +(~0.123E1, 0.123E~2, ~0.123E4): ~0.12300015129E4 ~0.12300015129E4 +(~0.123E1, 0.123E~2, ~0.123E2): ~0.123015129E2 ~0.123015129E2 +(~0.123E1, 0.123E~2, ~0.3141592653589793E1): ~0.3143105553589793E1 ~0.3143105553589793E1 +(~0.123E1, 0.123E~2, ~0.2718281828459045E1): ~0.2719794728459045E1 ~0.2719794728459045E1 +(~0.123E1, 0.123E~2, ~0.123E1): ~0.12315129E1 ~0.12315129E1 +(~0.123E1, 0.123E~2, ~0.123): ~0.1245129 ~0.1245129 +(~0.123E1, 0.123E~2, ~0.123E~2): ~0.27429E~2 ~0.27429E~2 +(~0.123E1, 0.123E~2, ~0.22250738585072014E~307): ~0.15129E~2 ~0.15129E~2 +(~0.123E1, 0.123E~2, ~0.11125369292536007E~307): ~0.15129E~2 ~0.15129E~2 +(~0.123E1, 0.123E~2, ~0.5E~323): ~0.15129E~2 ~0.15129E~2 +(~0.123E1, 0.123E~2, ~0.0): ~0.15129E~2 ~0.15129E~2 +(~0.123E1, 0.5E~323, 0.22250738585072014E~307): 0.2225073858507201E~307 0.2225073858507201E~307 +(~0.123E1, 0.5E~323, 0.11125369292536007E~307): 0.11125369292536E~307 0.11125369292536E~307 +(~0.123E1, 0.5E~323, 0.5E~323): ~0.0 ~0.0 +(~0.123E1, 0.5E~323, 0.0): ~0.5E~323 ~0.5E~323 +(~0.123E1, 0.5E~323, ~0.22250738585072014E~307): ~0.2225073858507202E~307 ~0.2225073858507202E~307 +(~0.123E1, 0.5E~323, ~0.11125369292536007E~307): ~0.1112536929253601E~307 ~0.1112536929253601E~307 +(~0.123E1, 0.5E~323, ~0.5E~323): ~0.1E~322 ~0.1E~322 +(~0.123E1, 0.5E~323, ~0.0): ~0.5E~323 ~0.5E~323 +(~0.123E1, ~0.17976931348623157E309, 0.17976931348623157E309): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.8988465674311579E308): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.123E4): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.123E2): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.3141592653589793E1): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.2718281828459045E1): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.123E1): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.123): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.123E~2): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.22250738585072014E~307): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.11125369292536007E~307): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.5E~323): inf inf +(~0.123E1, ~0.17976931348623157E309, 0.0): inf inf +(~0.123E1, ~0.17976931348623157E309, ~0.17976931348623157E309): 0.4134694210183326E308 0.4134694210183326E308 +(~0.123E1, ~0.17976931348623157E309, ~0.8988465674311579E308): 0.13123159884494904E309 0.13123159884494904E309 +(~0.123E1, ~0.17976931348623157E309, ~0.123E4): inf inf +(~0.123E1, ~0.17976931348623157E309, ~0.123E2): inf inf +(~0.123E1, ~0.17976931348623157E309, ~0.3141592653589793E1): inf inf +(~0.123E1, ~0.17976931348623157E309, ~0.2718281828459045E1): inf inf +(~0.123E1, ~0.17976931348623157E309, ~0.123E1): inf inf +(~0.123E1, ~0.17976931348623157E309, ~0.123): inf inf +(~0.123E1, ~0.17976931348623157E309, ~0.123E~2): inf inf +(~0.123E1, ~0.17976931348623157E309, ~0.22250738585072014E~307): inf inf +(~0.123E1, ~0.17976931348623157E309, ~0.11125369292536007E~307): inf inf +(~0.123E1, ~0.17976931348623157E309, ~0.5E~323): inf inf +(~0.123E1, ~0.17976931348623157E309, ~0.0): inf inf +(~0.123E1, ~0.8988465674311579E308, 0.17976931348623157E309): inf inf +(~0.123E1, ~0.8988465674311579E308, 0.8988465674311579E308): inf inf +(~0.123E1, ~0.8988465674311579E308, 0.123E4): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, 0.123E2): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, 0.3141592653589793E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, 0.2718281828459045E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, 0.123E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, 0.123): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, 0.123E~2): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, 0.22250738585072014E~307): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, 0.11125369292536007E~307): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, 0.5E~323): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, 0.0): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, ~0.17976931348623157E309): ~0.6921118569219915E308 ~0.6921118569219915E308 +(~0.123E1, ~0.8988465674311579E308, ~0.8988465674311579E308): 0.2067347105091663E308 0.2067347105091663E308 +(~0.123E1, ~0.8988465674311579E308, ~0.123E4): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, ~0.123E2): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, ~0.3141592653589793E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, ~0.2718281828459045E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, ~0.123E1): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, ~0.123): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, ~0.123E~2): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, ~0.22250738585072014E~307): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, ~0.11125369292536007E~307): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, ~0.5E~323): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.8988465674311579E308, ~0.0): 0.1105581277940324E309 0.1105581277940324E309 +(~0.123E1, ~0.123E4, 0.123E4): 0.27429E4 0.27429E4 +(~0.123E1, ~0.123E4, 0.123E2): 0.15252E4 0.15252E4 +(~0.123E1, ~0.123E4, 0.3141592653589793E1): 0.15160415926535898E4 0.15160415926535898E4 +(~0.123E1, ~0.123E4, 0.2718281828459045E1): 0.1515618281828459E4 0.1515618281828459E4 +(~0.123E1, ~0.123E4, 0.123E1): 0.15141299999999999E4 0.15141299999999999E4 +(~0.123E1, ~0.123E4, 0.123): 0.1513023E4 0.1513023E4 +(~0.123E1, ~0.123E4, 0.123E~2): 0.151290123E4 0.151290123E4 +(~0.123E1, ~0.123E4, 0.22250738585072014E~307): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, 0.11125369292536007E~307): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, 0.5E~323): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, 0.0): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, ~0.123E4): 0.2829E3 0.2829E3 +(~0.123E1, ~0.123E4, ~0.123E2): 0.15006E4 0.15006E4 +(~0.123E1, ~0.123E4, ~0.3141592653589793E1): 0.15097584073464102E4 0.15097584073464102E4 +(~0.123E1, ~0.123E4, ~0.2718281828459045E1): 0.1510181718171541E4 0.1510181718171541E4 +(~0.123E1, ~0.123E4, ~0.123E1): 0.151167E4 0.151167E4 +(~0.123E1, ~0.123E4, ~0.123): 0.1512777E4 0.1512777E4 +(~0.123E1, ~0.123E4, ~0.123E~2): 0.151289877E4 0.151289877E4 +(~0.123E1, ~0.123E4, ~0.22250738585072014E~307): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, ~0.11125369292536007E~307): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, ~0.5E~323): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E4, ~0.0): 0.15129E4 0.15129E4 +(~0.123E1, ~0.123E2, 0.123E4): 0.1245129E4 0.1245129E4 +(~0.123E1, ~0.123E2, 0.123E2): 0.27429000000000002E2 0.27429000000000002E2 +(~0.123E1, ~0.123E2, 0.3141592653589793E1): 0.18270592653589794E2 0.18270592653589794E2 +(~0.123E1, ~0.123E2, 0.2718281828459045E1): 0.17847281828459046E2 0.17847281828459046E2 +(~0.123E1, ~0.123E2, 0.123E1): 0.16359E2 0.16359E2 +(~0.123E1, ~0.123E2, 0.123): 0.15252E2 0.15252E2 +(~0.123E1, ~0.123E2, 0.123E~2): 0.15130230000000001E2 0.15130230000000001E2 +(~0.123E1, ~0.123E2, 0.22250738585072014E~307): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E1, ~0.123E2, 0.11125369292536007E~307): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E1, ~0.123E2, 0.5E~323): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E1, ~0.123E2, 0.0): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E1, ~0.123E2, ~0.123E4): ~0.1214871E4 ~0.1214871E4 +(~0.123E1, ~0.123E2, ~0.123E2): 0.28289999999999997E1 0.28289999999999997E1 +(~0.123E1, ~0.123E2, ~0.3141592653589793E1): 0.11987407346410208E2 0.11987407346410208E2 +(~0.123E1, ~0.123E2, ~0.2718281828459045E1): 0.12410718171540955E2 0.12410718171540955E2 +(~0.123E1, ~0.123E2, ~0.123E1): 0.13899000000000001E2 0.13899000000000001E2 +(~0.123E1, ~0.123E2, ~0.123): 0.15006E2 0.15006E2 +(~0.123E1, ~0.123E2, ~0.123E~2): 0.1512777E2 0.1512777E2 +(~0.123E1, ~0.123E2, ~0.22250738585072014E~307): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E1, ~0.123E2, ~0.11125369292536007E~307): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E1, ~0.123E2, ~0.5E~323): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E1, ~0.123E2, ~0.0): 0.15129000000000001E2 0.15129000000000001E2 +(~0.123E1, ~0.3141592653589793E1, 0.123E4): 0.12338641589639155E4 0.12338641589639155E4 +(~0.123E1, ~0.3141592653589793E1, 0.123E2): 0.16164158963915447E2 0.16164158963915447E2 +(~0.123E1, ~0.3141592653589793E1, 0.3141592653589793E1): 0.7005751617505239E1 0.7005751617505239E1 +(~0.123E1, ~0.3141592653589793E1, 0.2718281828459045E1): 0.65824407923744905E1 0.65824407923744905E1 +(~0.123E1, ~0.3141592653589793E1, 0.123E1): 0.5094158963915445E1 0.5094158963915445E1 +(~0.123E1, ~0.3141592653589793E1, 0.123): 0.39871589639154457E1 0.39871589639154457E1 +(~0.123E1, ~0.3141592653589793E1, 0.123E~2): 0.38653889639154455E1 0.38653889639154455E1 +(~0.123E1, ~0.3141592653589793E1, 0.22250738585072014E~307): 0.38641589639154454E1 0.38641589639154454E1 +(~0.123E1, ~0.3141592653589793E1, 0.11125369292536007E~307): 0.38641589639154454E1 0.38641589639154454E1 +(~0.123E1, ~0.3141592653589793E1, 0.5E~323): 0.38641589639154454E1 0.38641589639154454E1 +(~0.123E1, ~0.3141592653589793E1, 0.0): 0.38641589639154454E1 0.38641589639154454E1 +(~0.123E1, ~0.3141592653589793E1, ~0.123E4): ~0.12261358410360845E4 ~0.12261358410360845E4 +(~0.123E1, ~0.3141592653589793E1, ~0.123E2): ~0.8435841036084556E1 ~0.8435841036084556E1 +(~0.123E1, ~0.3141592653589793E1, ~0.3141592653589793E1): 0.7225663103256523 0.7225663103256523 +(~0.123E1, ~0.3141592653589793E1, ~0.2718281828459045E1): 0.11458771354564004E1 0.11458771354564004E1 +(~0.123E1, ~0.3141592653589793E1, ~0.123E1): 0.26341589639154455E1 0.26341589639154455E1 +(~0.123E1, ~0.3141592653589793E1, ~0.123): 0.37411589639154457E1 0.37411589639154457E1 +(~0.123E1, ~0.3141592653589793E1, ~0.123E~2): 0.38629289639154454E1 0.38629289639154454E1 +(~0.123E1, ~0.3141592653589793E1, ~0.22250738585072014E~307): 0.38641589639154454E1 0.38641589639154454E1 +(~0.123E1, ~0.3141592653589793E1, ~0.11125369292536007E~307): 0.38641589639154454E1 0.38641589639154454E1 +(~0.123E1, ~0.3141592653589793E1, ~0.5E~323): 0.38641589639154454E1 0.38641589639154454E1 +(~0.123E1, ~0.3141592653589793E1, ~0.0): 0.38641589639154454E1 0.38641589639154454E1 +(~0.123E1, ~0.2718281828459045E1, 0.123E4): 0.12333434866490047E4 0.12333434866490047E4 +(~0.123E1, ~0.2718281828459045E1, 0.123E2): 0.15643486649004625E2 0.15643486649004625E2 +(~0.123E1, ~0.2718281828459045E1, 0.3141592653589793E1): 0.6485079302594419E1 0.6485079302594419E1 +(~0.123E1, ~0.2718281828459045E1, 0.2718281828459045E1): 0.606176847746367E1 0.606176847746367E1 +(~0.123E1, ~0.2718281828459045E1, 0.123E1): 0.4573486649004625E1 0.4573486649004625E1 +(~0.123E1, ~0.2718281828459045E1, 0.123): 0.34664866490046253E1 0.34664866490046253E1 +(~0.123E1, ~0.2718281828459045E1, 0.123E~2): 0.33447166490046256E1 0.33447166490046256E1 +(~0.123E1, ~0.2718281828459045E1, 0.22250738585072014E~307): 0.33434866490046256E1 0.33434866490046256E1 +(~0.123E1, ~0.2718281828459045E1, 0.11125369292536007E~307): 0.33434866490046256E1 0.33434866490046256E1 +(~0.123E1, ~0.2718281828459045E1, 0.5E~323): 0.33434866490046256E1 0.33434866490046256E1 +(~0.123E1, ~0.2718281828459045E1, 0.0): 0.33434866490046256E1 0.33434866490046256E1 +(~0.123E1, ~0.2718281828459045E1, ~0.123E4): ~0.12266565133509953E4 ~0.12266565133509953E4 +(~0.123E1, ~0.2718281828459045E1, ~0.123E2): ~0.8956513350995376E1 ~0.8956513350995376E1 +(~0.123E1, ~0.2718281828459045E1, ~0.3141592653589793E1): 0.2018939954148323 0.2018939954148323 +(~0.123E1, ~0.2718281828459045E1, ~0.2718281828459045E1): 0.6252048205455804 0.6252048205455804 +(~0.123E1, ~0.2718281828459045E1, ~0.123E1): 0.21134866490046256E1 0.21134866490046256E1 +(~0.123E1, ~0.2718281828459045E1, ~0.123): 0.32204866490046253E1 0.32204866490046253E1 +(~0.123E1, ~0.2718281828459045E1, ~0.123E~2): 0.33422566490046255E1 0.33422566490046255E1 +(~0.123E1, ~0.2718281828459045E1, ~0.22250738585072014E~307): 0.33434866490046256E1 0.33434866490046256E1 +(~0.123E1, ~0.2718281828459045E1, ~0.11125369292536007E~307): 0.33434866490046256E1 0.33434866490046256E1 +(~0.123E1, ~0.2718281828459045E1, ~0.5E~323): 0.33434866490046256E1 0.33434866490046256E1 +(~0.123E1, ~0.2718281828459045E1, ~0.0): 0.33434866490046256E1 0.33434866490046256E1 +(~0.123E1, ~0.123E1, 0.123E4): 0.12315129E4 0.12315129E4 +(~0.123E1, ~0.123E1, 0.123E2): 0.138129E2 0.138129E2 +(~0.123E1, ~0.123E1, 0.3141592653589793E1): 0.4654492653589793E1 0.4654492653589793E1 +(~0.123E1, ~0.123E1, 0.2718281828459045E1): 0.4231181828459045E1 0.4231181828459045E1 +(~0.123E1, ~0.123E1, 0.123E1): 0.27429E1 0.27429E1 +(~0.123E1, ~0.123E1, 0.123): 0.16359E1 0.16359E1 +(~0.123E1, ~0.123E1, 0.123E~2): 0.151413E1 0.151413E1 +(~0.123E1, ~0.123E1, 0.22250738585072014E~307): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, 0.11125369292536007E~307): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, 0.5E~323): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, 0.0): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, ~0.123E4): ~0.12284871E4 ~0.12284871E4 +(~0.123E1, ~0.123E1, ~0.123E2): ~0.107871E2 ~0.107871E2 +(~0.123E1, ~0.123E1, ~0.3141592653589793E1): ~0.16286926535897932E1 ~0.16286926535897932E1 +(~0.123E1, ~0.123E1, ~0.2718281828459045E1): ~0.12053818284590452E1 ~0.12053818284590452E1 +(~0.123E1, ~0.123E1, ~0.123E1): 0.2829 0.2829 +(~0.123E1, ~0.123E1, ~0.123): 0.13899E1 0.13899E1 +(~0.123E1, ~0.123E1, ~0.123E~2): 0.15116699999999998E1 0.15116699999999998E1 +(~0.123E1, ~0.123E1, ~0.22250738585072014E~307): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, ~0.11125369292536007E~307): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, ~0.5E~323): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123E1, ~0.0): 0.15129E1 0.15129E1 +(~0.123E1, ~0.123, 0.123E4): 0.123015129E4 0.123015129E4 +(~0.123E1, ~0.123, 0.123E2): 0.1245129E2 0.1245129E2 +(~0.123E1, ~0.123, 0.3141592653589793E1): 0.3292882653589793E1 0.3292882653589793E1 +(~0.123E1, ~0.123, 0.2718281828459045E1): 0.2869571828459045E1 0.2869571828459045E1 +(~0.123E1, ~0.123, 0.123E1): 0.138129E1 0.138129E1 +(~0.123E1, ~0.123, 0.123): 0.27429 0.27429 +(~0.123E1, ~0.123, 0.123E~2): 0.15252 0.15252 +(~0.123E1, ~0.123, 0.22250738585072014E~307): 0.15129 0.15129 +(~0.123E1, ~0.123, 0.11125369292536007E~307): 0.15129 0.15129 +(~0.123E1, ~0.123, 0.5E~323): 0.15129 0.15129 +(~0.123E1, ~0.123, 0.0): 0.15129 0.15129 +(~0.123E1, ~0.123, ~0.123E4): ~0.122984871E4 ~0.122984871E4 +(~0.123E1, ~0.123, ~0.123E2): ~0.12148710000000001E2 ~0.12148710000000001E2 +(~0.123E1, ~0.123, ~0.3141592653589793E1): ~0.2990302653589793E1 ~0.2990302653589793E1 +(~0.123E1, ~0.123, ~0.2718281828459045E1): ~0.2566991828459045E1 ~0.2566991828459045E1 +(~0.123E1, ~0.123, ~0.123E1): ~0.107871E1 ~0.107871E1 +(~0.123E1, ~0.123, ~0.123): 0.28289999999999996E~1 0.28289999999999996E~1 +(~0.123E1, ~0.123, ~0.123E~2): 0.15006 0.15006 +(~0.123E1, ~0.123, ~0.22250738585072014E~307): 0.15129 0.15129 +(~0.123E1, ~0.123, ~0.11125369292536007E~307): 0.15129 0.15129 +(~0.123E1, ~0.123, ~0.5E~323): 0.15129 0.15129 +(~0.123E1, ~0.123, ~0.0): 0.15129 0.15129 +(~0.123E1, ~0.123E~2, 0.123E4): 0.12300015129E4 0.12300015129E4 +(~0.123E1, ~0.123E~2, 0.123E2): 0.123015129E2 0.123015129E2 +(~0.123E1, ~0.123E~2, 0.3141592653589793E1): 0.3143105553589793E1 0.3143105553589793E1 +(~0.123E1, ~0.123E~2, 0.2718281828459045E1): 0.2719794728459045E1 0.2719794728459045E1 +(~0.123E1, ~0.123E~2, 0.123E1): 0.12315129E1 0.12315129E1 +(~0.123E1, ~0.123E~2, 0.123): 0.1245129 0.1245129 +(~0.123E1, ~0.123E~2, 0.123E~2): 0.27429E~2 0.27429E~2 +(~0.123E1, ~0.123E~2, 0.22250738585072014E~307): 0.15129E~2 0.15129E~2 +(~0.123E1, ~0.123E~2, 0.11125369292536007E~307): 0.15129E~2 0.15129E~2 +(~0.123E1, ~0.123E~2, 0.5E~323): 0.15129E~2 0.15129E~2 +(~0.123E1, ~0.123E~2, 0.0): 0.15129E~2 0.15129E~2 +(~0.123E1, ~0.123E~2, ~0.123E4): ~0.12299984871E4 ~0.12299984871E4 +(~0.123E1, ~0.123E~2, ~0.123E2): ~0.12298487100000001E2 ~0.12298487100000001E2 +(~0.123E1, ~0.123E~2, ~0.3141592653589793E1): ~0.31400797535897933E1 ~0.31400797535897933E1 +(~0.123E1, ~0.123E~2, ~0.2718281828459045E1): ~0.27167689284590453E1 ~0.27167689284590453E1 +(~0.123E1, ~0.123E~2, ~0.123E1): ~0.12284871E1 ~0.12284871E1 +(~0.123E1, ~0.123E~2, ~0.123): ~0.1214871 ~0.1214871 +(~0.123E1, ~0.123E~2, ~0.123E~2): 0.2829E~3 0.2829E~3 +(~0.123E1, ~0.123E~2, ~0.22250738585072014E~307): 0.15129E~2 0.15129E~2 +(~0.123E1, ~0.123E~2, ~0.11125369292536007E~307): 0.15129E~2 0.15129E~2 +(~0.123E1, ~0.123E~2, ~0.5E~323): 0.15129E~2 0.15129E~2 +(~0.123E1, ~0.123E~2, ~0.0): 0.15129E~2 0.15129E~2 +(~0.123E1, ~0.5E~323, 0.22250738585072014E~307): 0.2225073858507202E~307 0.2225073858507202E~307 +(~0.123E1, ~0.5E~323, 0.11125369292536007E~307): 0.1112536929253601E~307 0.1112536929253601E~307 +(~0.123E1, ~0.5E~323, 0.5E~323): 0.1E~322 0.1E~322 +(~0.123E1, ~0.5E~323, 0.0): 0.5E~323 0.5E~323 +(~0.123E1, ~0.5E~323, ~0.22250738585072014E~307): ~0.2225073858507201E~307 ~0.2225073858507201E~307 +(~0.123E1, ~0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536E~307 ~0.11125369292536E~307 +(~0.123E1, ~0.5E~323, ~0.5E~323): 0.0 0.0 +(~0.123E1, ~0.5E~323, ~0.0): 0.5E~323 0.5E~323 +(~0.123, 0.17976931348623157E309, 0.17976931348623157E309): 0.15765768792742509E309 0.15765768792742509E309 +(~0.123, 0.17976931348623157E309, 0.8988465674311579E308): 0.677730311843093E308 0.677730311843093E308 +(~0.123, 0.17976931348623157E309, 0.123E4): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, 0.123E2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, 0.3141592653589793E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, 0.2718281828459045E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, 0.123E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, 0.123): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, 0.123E~2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, 0.22250738585072014E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, 0.11125369292536007E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, 0.5E~323): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, 0.0): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(~0.123, 0.17976931348623157E309, ~0.8988465674311579E308): ~0.11199628230192226E309 ~0.11199628230192226E309 +(~0.123, 0.17976931348623157E309, ~0.123E4): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, ~0.123E2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, ~0.3141592653589793E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, ~0.2718281828459045E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, ~0.123E1): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, ~0.123): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, ~0.123E~2): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, ~0.22250738585072014E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, ~0.11125369292536007E~307): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, ~0.5E~323): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.17976931348623157E309, ~0.0): ~0.22111625558806483E308 ~0.22111625558806483E308 +(~0.123, 0.8988465674311579E308, 0.17976931348623157E309): 0.16871350070682833E309 0.16871350070682833E309 +(~0.123, 0.8988465674311579E308, 0.8988465674311579E308): 0.7882884396371254E308 0.7882884396371254E308 +(~0.123, 0.8988465674311579E308, 0.123E4): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, 0.123E2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, 0.3141592653589793E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, 0.2718281828459045E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, 0.123E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, 0.123): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, 0.123E~2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, 0.22250738585072014E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, 0.11125369292536007E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, 0.5E~323): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, 0.0): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(~0.123, 0.8988465674311579E308, ~0.8988465674311579E308): ~0.10094046952251902E309 ~0.10094046952251902E309 +(~0.123, 0.8988465674311579E308, ~0.123E4): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, ~0.123E2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, ~0.3141592653589793E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, ~0.2718281828459045E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, ~0.123E1): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, ~0.123): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, ~0.123E~2): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, ~0.22250738585072014E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, ~0.11125369292536007E~307): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, ~0.5E~323): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.8988465674311579E308, ~0.0): ~0.11055812779403241E308 ~0.11055812779403241E308 +(~0.123, 0.123E4, 0.123E4): 0.107871E4 0.107871E4 +(~0.123, 0.123E4, 0.123E2): ~0.13899E3 ~0.13899E3 +(~0.123, 0.123E4, 0.3141592653589793E1): ~0.1481484073464102E3 ~0.1481484073464102E3 +(~0.123, 0.123E4, 0.2718281828459045E1): ~0.14857171817154097E3 ~0.14857171817154097E3 +(~0.123, 0.123E4, 0.123E1): ~0.15006E3 ~0.15006E3 +(~0.123, 0.123E4, 0.123): ~0.151167E3 ~0.151167E3 +(~0.123, 0.123E4, 0.123E~2): ~0.15128877E3 ~0.15128877E3 +(~0.123, 0.123E4, 0.22250738585072014E~307): ~0.15129E3 ~0.15129E3 +(~0.123, 0.123E4, 0.11125369292536007E~307): ~0.15129E3 ~0.15129E3 +(~0.123, 0.123E4, 0.5E~323): ~0.15129E3 ~0.15129E3 +(~0.123, 0.123E4, 0.0): ~0.15129E3 ~0.15129E3 +(~0.123, 0.123E4, ~0.123E4): ~0.138129E4 ~0.138129E4 +(~0.123, 0.123E4, ~0.123E2): ~0.16359E3 ~0.16359E3 +(~0.123, 0.123E4, ~0.3141592653589793E1): ~0.1544315926535898E3 ~0.1544315926535898E3 +(~0.123, 0.123E4, ~0.2718281828459045E1): ~0.15400828182845905E3 ~0.15400828182845905E3 +(~0.123, 0.123E4, ~0.123E1): ~0.15252E3 ~0.15252E3 +(~0.123, 0.123E4, ~0.123): ~0.151413E3 ~0.151413E3 +(~0.123, 0.123E4, ~0.123E~2): ~0.15129122999999998E3 ~0.15129122999999998E3 +(~0.123, 0.123E4, ~0.22250738585072014E~307): ~0.15129E3 ~0.15129E3 +(~0.123, 0.123E4, ~0.11125369292536007E~307): ~0.15129E3 ~0.15129E3 +(~0.123, 0.123E4, ~0.5E~323): ~0.15129E3 ~0.15129E3 +(~0.123, 0.123E4, ~0.0): ~0.15129E3 ~0.15129E3 +(~0.123, 0.123E2, 0.123E4): 0.12284871E4 0.12284871E4 +(~0.123, 0.123E2, 0.123E2): 0.107871E2 0.107871E2 +(~0.123, 0.123E2, 0.3141592653589793E1): 0.1628692653589793E1 0.1628692653589793E1 +(~0.123, 0.123E2, 0.2718281828459045E1): 0.1205381828459045E1 0.1205381828459045E1 +(~0.123, 0.123E2, 0.123E1): ~0.2829000000000001 ~0.2829000000000001 +(~0.123, 0.123E2, 0.123): ~0.13899000000000001E1 ~0.13899000000000001E1 +(~0.123, 0.123E2, 0.123E~2): ~0.151167E1 ~0.151167E1 +(~0.123, 0.123E2, 0.22250738585072014E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123, 0.123E2, 0.11125369292536007E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123, 0.123E2, 0.5E~323): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123, 0.123E2, 0.0): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123, 0.123E2, ~0.123E4): ~0.12315129E4 ~0.12315129E4 +(~0.123, 0.123E2, ~0.123E2): ~0.138129E2 ~0.138129E2 +(~0.123, 0.123E2, ~0.3141592653589793E1): ~0.4654492653589793E1 ~0.4654492653589793E1 +(~0.123, 0.123E2, ~0.2718281828459045E1): ~0.4231181828459045E1 ~0.4231181828459045E1 +(~0.123, 0.123E2, ~0.123E1): ~0.27429E1 ~0.27429E1 +(~0.123, 0.123E2, ~0.123): ~0.16359000000000001E1 ~0.16359000000000001E1 +(~0.123, 0.123E2, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(~0.123, 0.123E2, ~0.22250738585072014E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123, 0.123E2, ~0.11125369292536007E~307): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123, 0.123E2, ~0.5E~323): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123, 0.123E2, ~0.0): ~0.15129000000000001E1 ~0.15129000000000001E1 +(~0.123, 0.3141592653589793E1, 0.123E4): 0.12296135841036084E4 0.12296135841036084E4 +(~0.123, 0.3141592653589793E1, 0.123E2): 0.11913584103608455E2 0.11913584103608455E2 +(~0.123, 0.3141592653589793E1, 0.3141592653589793E1): 0.27551767571982486E1 0.27551767571982486E1 +(~0.123, 0.3141592653589793E1, 0.2718281828459045E1): 0.23318659320675006E1 0.23318659320675006E1 +(~0.123, 0.3141592653589793E1, 0.123E1): 0.8435841036084555 0.8435841036084555 +(~0.123, 0.3141592653589793E1, 0.123): ~0.26341589639154456 ~0.26341589639154456 +(~0.123, 0.3141592653589793E1, 0.123E~2): ~0.38518589639154455 ~0.38518589639154455 +(~0.123, 0.3141592653589793E1, 0.22250738585072014E~307): ~0.38641589639154456 ~0.38641589639154456 +(~0.123, 0.3141592653589793E1, 0.11125369292536007E~307): ~0.38641589639154456 ~0.38641589639154456 +(~0.123, 0.3141592653589793E1, 0.5E~323): ~0.38641589639154456 ~0.38641589639154456 +(~0.123, 0.3141592653589793E1, 0.0): ~0.38641589639154456 ~0.38641589639154456 +(~0.123, 0.3141592653589793E1, ~0.123E4): ~0.12303864158963916E4 ~0.12303864158963916E4 +(~0.123, 0.3141592653589793E1, ~0.123E2): ~0.12686415896391546E2 ~0.12686415896391546E2 +(~0.123, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.35280085499813376E1 ~0.35280085499813376E1 +(~0.123, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.31046977248505896E1 ~0.31046977248505896E1 +(~0.123, 0.3141592653589793E1, ~0.123E1): ~0.16164158963915445E1 ~0.16164158963915445E1 +(~0.123, 0.3141592653589793E1, ~0.123): ~0.5094158963915445 ~0.5094158963915445 +(~0.123, 0.3141592653589793E1, ~0.123E~2): ~0.38764589639154456 ~0.38764589639154456 +(~0.123, 0.3141592653589793E1, ~0.22250738585072014E~307): ~0.38641589639154456 ~0.38641589639154456 +(~0.123, 0.3141592653589793E1, ~0.11125369292536007E~307): ~0.38641589639154456 ~0.38641589639154456 +(~0.123, 0.3141592653589793E1, ~0.5E~323): ~0.38641589639154456 ~0.38641589639154456 +(~0.123, 0.3141592653589793E1, ~0.0): ~0.38641589639154456 ~0.38641589639154456 +(~0.123, 0.2718281828459045E1, 0.123E4): 0.12296656513350995E4 0.12296656513350995E4 +(~0.123, 0.2718281828459045E1, 0.123E2): 0.11965651335099539E2 0.11965651335099539E2 +(~0.123, 0.2718281828459045E1, 0.3141592653589793E1): 0.28072439886893306E1 0.28072439886893306E1 +(~0.123, 0.2718281828459045E1, 0.2718281828459045E1): 0.23839331635585825E1 0.23839331635585825E1 +(~0.123, 0.2718281828459045E1, 0.123E1): 0.8956513350995374 0.8956513350995374 +(~0.123, 0.2718281828459045E1, 0.123): ~0.21134866490046253 ~0.21134866490046253 +(~0.123, 0.2718281828459045E1, 0.123E~2): ~0.33311866490046255 ~0.33311866490046255 +(~0.123, 0.2718281828459045E1, 0.22250738585072014E~307): ~0.33434866490046256 ~0.33434866490046256 +(~0.123, 0.2718281828459045E1, 0.11125369292536007E~307): ~0.33434866490046256 ~0.33434866490046256 +(~0.123, 0.2718281828459045E1, 0.5E~323): ~0.33434866490046256 ~0.33434866490046256 +(~0.123, 0.2718281828459045E1, 0.0): ~0.33434866490046256 ~0.33434866490046256 +(~0.123, 0.2718281828459045E1, ~0.123E4): ~0.12303343486649005E4 ~0.12303343486649005E4 +(~0.123, 0.2718281828459045E1, ~0.123E2): ~0.12634348664900463E2 ~0.12634348664900463E2 +(~0.123, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.34759413184902557E1 ~0.34759413184902557E1 +(~0.123, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.30526304933595076E1 ~0.30526304933595076E1 +(~0.123, 0.2718281828459045E1, ~0.123E1): ~0.15643486649004625E1 ~0.15643486649004625E1 +(~0.123, 0.2718281828459045E1, ~0.123): ~0.45734866490046255 ~0.45734866490046255 +(~0.123, 0.2718281828459045E1, ~0.123E~2): ~0.33557866490046256 ~0.33557866490046256 +(~0.123, 0.2718281828459045E1, ~0.22250738585072014E~307): ~0.33434866490046256 ~0.33434866490046256 +(~0.123, 0.2718281828459045E1, ~0.11125369292536007E~307): ~0.33434866490046256 ~0.33434866490046256 +(~0.123, 0.2718281828459045E1, ~0.5E~323): ~0.33434866490046256 ~0.33434866490046256 +(~0.123, 0.2718281828459045E1, ~0.0): ~0.33434866490046256 ~0.33434866490046256 +(~0.123, 0.123E1, 0.123E4): 0.122984871E4 0.122984871E4 +(~0.123, 0.123E1, 0.123E2): 0.12148710000000001E2 0.12148710000000001E2 +(~0.123, 0.123E1, 0.3141592653589793E1): 0.2990302653589793E1 0.2990302653589793E1 +(~0.123, 0.123E1, 0.2718281828459045E1): 0.2566991828459045E1 0.2566991828459045E1 +(~0.123, 0.123E1, 0.123E1): 0.107871E1 0.107871E1 +(~0.123, 0.123E1, 0.123): ~0.28289999999999996E~1 ~0.28289999999999996E~1 +(~0.123, 0.123E1, 0.123E~2): ~0.15006 ~0.15006 +(~0.123, 0.123E1, 0.22250738585072014E~307): ~0.15129 ~0.15129 +(~0.123, 0.123E1, 0.11125369292536007E~307): ~0.15129 ~0.15129 +(~0.123, 0.123E1, 0.5E~323): ~0.15129 ~0.15129 +(~0.123, 0.123E1, 0.0): ~0.15129 ~0.15129 +(~0.123, 0.123E1, ~0.123E4): ~0.123015129E4 ~0.123015129E4 +(~0.123, 0.123E1, ~0.123E2): ~0.1245129E2 ~0.1245129E2 +(~0.123, 0.123E1, ~0.3141592653589793E1): ~0.3292882653589793E1 ~0.3292882653589793E1 +(~0.123, 0.123E1, ~0.2718281828459045E1): ~0.2869571828459045E1 ~0.2869571828459045E1 +(~0.123, 0.123E1, ~0.123E1): ~0.138129E1 ~0.138129E1 +(~0.123, 0.123E1, ~0.123): ~0.27429 ~0.27429 +(~0.123, 0.123E1, ~0.123E~2): ~0.15252 ~0.15252 +(~0.123, 0.123E1, ~0.22250738585072014E~307): ~0.15129 ~0.15129 +(~0.123, 0.123E1, ~0.11125369292536007E~307): ~0.15129 ~0.15129 +(~0.123, 0.123E1, ~0.5E~323): ~0.15129 ~0.15129 +(~0.123, 0.123E1, ~0.0): ~0.15129 ~0.15129 +(~0.123, 0.123, 0.123E4): 0.1229984871E4 0.1229984871E4 +(~0.123, 0.123, 0.123E2): 0.12284871E2 0.12284871E2 +(~0.123, 0.123, 0.3141592653589793E1): 0.3126463653589793E1 0.3126463653589793E1 +(~0.123, 0.123, 0.2718281828459045E1): 0.2703152828459045E1 0.2703152828459045E1 +(~0.123, 0.123, 0.123E1): 0.1214871E1 0.1214871E1 +(~0.123, 0.123, 0.123): 0.107871 0.107871 +(~0.123, 0.123, 0.123E~2): ~0.13899E~1 ~0.13899E~1 +(~0.123, 0.123, 0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123, 0.123, 0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123, 0.123, 0.5E~323): ~0.15129E~1 ~0.15129E~1 +(~0.123, 0.123, 0.0): ~0.15129E~1 ~0.15129E~1 +(~0.123, 0.123, ~0.123E4): ~0.1230015129E4 ~0.1230015129E4 +(~0.123, 0.123, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(~0.123, 0.123, ~0.3141592653589793E1): ~0.3156721653589793E1 ~0.3156721653589793E1 +(~0.123, 0.123, ~0.2718281828459045E1): ~0.2733410828459045E1 ~0.2733410828459045E1 +(~0.123, 0.123, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(~0.123, 0.123, ~0.123): ~0.138129 ~0.138129 +(~0.123, 0.123, ~0.123E~2): ~0.16359E~1 ~0.16359E~1 +(~0.123, 0.123, ~0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123, 0.123, ~0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123, 0.123, ~0.5E~323): ~0.15129E~1 ~0.15129E~1 +(~0.123, 0.123, ~0.0): ~0.15129E~1 ~0.15129E~1 +(~0.123, 0.123E~2, 0.123E4): 0.122999984871E4 0.122999984871E4 +(~0.123, 0.123E~2, 0.123E2): 0.12299848710000001E2 0.12299848710000001E2 +(~0.123, 0.123E~2, 0.3141592653589793E1): 0.31414413635897933E1 0.31414413635897933E1 +(~0.123, 0.123E~2, 0.2718281828459045E1): 0.27181305384590453E1 0.27181305384590453E1 +(~0.123, 0.123E~2, 0.123E1): 0.122984871E1 0.122984871E1 +(~0.123, 0.123E~2, 0.123): 0.12284871 0.12284871 +(~0.123, 0.123E~2, 0.123E~2): 0.107871E~2 0.107871E~2 +(~0.123, 0.123E~2, 0.22250738585072014E~307): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, 0.11125369292536007E~307): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, 0.5E~323): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, 0.0): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, ~0.123E4): ~0.123000015129E4 ~0.123000015129E4 +(~0.123, 0.123E~2, ~0.123E2): ~0.1230015129E2 ~0.1230015129E2 +(~0.123, 0.123E~2, ~0.3141592653589793E1): ~0.3141743943589793E1 ~0.3141743943589793E1 +(~0.123, 0.123E~2, ~0.2718281828459045E1): ~0.2718433118459045E1 ~0.2718433118459045E1 +(~0.123, 0.123E~2, ~0.123E1): ~0.123015129E1 ~0.123015129E1 +(~0.123, 0.123E~2, ~0.123): ~0.12315129 ~0.12315129 +(~0.123, 0.123E~2, ~0.123E~2): ~0.13812899999999999E~2 ~0.13812899999999999E~2 +(~0.123, 0.123E~2, ~0.22250738585072014E~307): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, ~0.11125369292536007E~307): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, ~0.5E~323): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.123E~2, ~0.0): ~0.15129E~3 ~0.15129E~3 +(~0.123, 0.11125369292536007E~307, 0.22250738585072014E~307): 0.20882318162090083E~307 0.20882318162090083E~307 +(~0.123, 0.11125369292536007E~307, 0.11125369292536007E~307): 0.9756948869554076E~308 0.9756948869554076E~308 +(~0.123, 0.11125369292536007E~307, 0.5E~323): ~0.136842042298192E~308 ~0.136842042298192E~308 +(~0.123, 0.11125369292536007E~307, 0.0): ~0.136842042298193E~308 ~0.136842042298193E~308 +(~0.123, 0.11125369292536007E~307, ~0.22250738585072014E~307): ~0.23619159008053945E~307 ~0.23619159008053945E~307 +(~0.123, 0.11125369292536007E~307, ~0.11125369292536007E~307): ~0.1249378971551794E~307 ~0.1249378971551794E~307 +(~0.123, 0.11125369292536007E~307, ~0.5E~323): ~0.136842042298193E~308 ~0.136842042298193E~308 +(~0.123, 0.11125369292536007E~307, ~0.0): ~0.136842042298193E~308 ~0.136842042298193E~308 +(~0.123, 0.5E~323, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(~0.123, 0.5E~323, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(~0.123, 0.5E~323, 0.5E~323): 0.5E~323 0.5E~323 +(~0.123, 0.5E~323, 0.0): ~0.0 ~0.0 +(~0.123, 0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(~0.123, 0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(~0.123, 0.5E~323, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(~0.123, 0.5E~323, ~0.0): ~0.0 ~0.0 +(~0.123, ~0.17976931348623157E309, 0.17976931348623157E309): inf inf +(~0.123, ~0.17976931348623157E309, 0.8988465674311579E308): 0.11199628230192226E309 0.11199628230192226E309 +(~0.123, ~0.17976931348623157E309, 0.123E4): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, 0.123E2): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, 0.3141592653589793E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, 0.2718281828459045E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, 0.123E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, 0.123): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, 0.123E~2): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, 0.22250738585072014E~307): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, 0.11125369292536007E~307): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, 0.5E~323): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, 0.0): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, ~0.17976931348623157E309): ~0.15765768792742509E309 ~0.15765768792742509E309 +(~0.123, ~0.17976931348623157E309, ~0.8988465674311579E308): ~0.677730311843093E308 ~0.677730311843093E308 +(~0.123, ~0.17976931348623157E309, ~0.123E4): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, ~0.123E2): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, ~0.3141592653589793E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, ~0.2718281828459045E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, ~0.123E1): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, ~0.123): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, ~0.123E~2): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, ~0.22250738585072014E~307): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, ~0.11125369292536007E~307): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, ~0.5E~323): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.17976931348623157E309, ~0.0): 0.22111625558806483E308 0.22111625558806483E308 +(~0.123, ~0.8988465674311579E308, 0.17976931348623157E309): inf inf +(~0.123, ~0.8988465674311579E308, 0.8988465674311579E308): 0.10094046952251902E309 0.10094046952251902E309 +(~0.123, ~0.8988465674311579E308, 0.123E4): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, 0.123E2): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, 0.3141592653589793E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, 0.2718281828459045E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, 0.123E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, 0.123): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, 0.123E~2): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, 0.22250738585072014E~307): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, 0.11125369292536007E~307): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, 0.5E~323): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, 0.0): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, ~0.17976931348623157E309): ~0.16871350070682833E309 ~0.16871350070682833E309 +(~0.123, ~0.8988465674311579E308, ~0.8988465674311579E308): ~0.7882884396371254E308 ~0.7882884396371254E308 +(~0.123, ~0.8988465674311579E308, ~0.123E4): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, ~0.123E2): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, ~0.3141592653589793E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, ~0.2718281828459045E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, ~0.123E1): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, ~0.123): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, ~0.123E~2): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, ~0.22250738585072014E~307): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, ~0.11125369292536007E~307): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, ~0.5E~323): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.8988465674311579E308, ~0.0): 0.11055812779403241E308 0.11055812779403241E308 +(~0.123, ~0.123E4, 0.123E4): 0.138129E4 0.138129E4 +(~0.123, ~0.123E4, 0.123E2): 0.16359E3 0.16359E3 +(~0.123, ~0.123E4, 0.3141592653589793E1): 0.1544315926535898E3 0.1544315926535898E3 +(~0.123, ~0.123E4, 0.2718281828459045E1): 0.15400828182845905E3 0.15400828182845905E3 +(~0.123, ~0.123E4, 0.123E1): 0.15252E3 0.15252E3 +(~0.123, ~0.123E4, 0.123): 0.151413E3 0.151413E3 +(~0.123, ~0.123E4, 0.123E~2): 0.15129122999999998E3 0.15129122999999998E3 +(~0.123, ~0.123E4, 0.22250738585072014E~307): 0.15129E3 0.15129E3 +(~0.123, ~0.123E4, 0.11125369292536007E~307): 0.15129E3 0.15129E3 +(~0.123, ~0.123E4, 0.5E~323): 0.15129E3 0.15129E3 +(~0.123, ~0.123E4, 0.0): 0.15129E3 0.15129E3 +(~0.123, ~0.123E4, ~0.123E4): ~0.107871E4 ~0.107871E4 +(~0.123, ~0.123E4, ~0.123E2): 0.13899E3 0.13899E3 +(~0.123, ~0.123E4, ~0.3141592653589793E1): 0.1481484073464102E3 0.1481484073464102E3 +(~0.123, ~0.123E4, ~0.2718281828459045E1): 0.14857171817154097E3 0.14857171817154097E3 +(~0.123, ~0.123E4, ~0.123E1): 0.15006E3 0.15006E3 +(~0.123, ~0.123E4, ~0.123): 0.151167E3 0.151167E3 +(~0.123, ~0.123E4, ~0.123E~2): 0.15128877E3 0.15128877E3 +(~0.123, ~0.123E4, ~0.22250738585072014E~307): 0.15129E3 0.15129E3 +(~0.123, ~0.123E4, ~0.11125369292536007E~307): 0.15129E3 0.15129E3 +(~0.123, ~0.123E4, ~0.5E~323): 0.15129E3 0.15129E3 +(~0.123, ~0.123E4, ~0.0): 0.15129E3 0.15129E3 +(~0.123, ~0.123E2, 0.123E4): 0.12315129E4 0.12315129E4 +(~0.123, ~0.123E2, 0.123E2): 0.138129E2 0.138129E2 +(~0.123, ~0.123E2, 0.3141592653589793E1): 0.4654492653589793E1 0.4654492653589793E1 +(~0.123, ~0.123E2, 0.2718281828459045E1): 0.4231181828459045E1 0.4231181828459045E1 +(~0.123, ~0.123E2, 0.123E1): 0.27429E1 0.27429E1 +(~0.123, ~0.123E2, 0.123): 0.16359000000000001E1 0.16359000000000001E1 +(~0.123, ~0.123E2, 0.123E~2): 0.151413E1 0.151413E1 +(~0.123, ~0.123E2, 0.22250738585072014E~307): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123, ~0.123E2, 0.11125369292536007E~307): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123, ~0.123E2, 0.5E~323): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123, ~0.123E2, 0.0): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123, ~0.123E2, ~0.123E4): ~0.12284871E4 ~0.12284871E4 +(~0.123, ~0.123E2, ~0.123E2): ~0.107871E2 ~0.107871E2 +(~0.123, ~0.123E2, ~0.3141592653589793E1): ~0.1628692653589793E1 ~0.1628692653589793E1 +(~0.123, ~0.123E2, ~0.2718281828459045E1): ~0.1205381828459045E1 ~0.1205381828459045E1 +(~0.123, ~0.123E2, ~0.123E1): 0.2829000000000001 0.2829000000000001 +(~0.123, ~0.123E2, ~0.123): 0.13899000000000001E1 0.13899000000000001E1 +(~0.123, ~0.123E2, ~0.123E~2): 0.151167E1 0.151167E1 +(~0.123, ~0.123E2, ~0.22250738585072014E~307): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123, ~0.123E2, ~0.11125369292536007E~307): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123, ~0.123E2, ~0.5E~323): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123, ~0.123E2, ~0.0): 0.15129000000000001E1 0.15129000000000001E1 +(~0.123, ~0.3141592653589793E1, 0.123E4): 0.12303864158963916E4 0.12303864158963916E4 +(~0.123, ~0.3141592653589793E1, 0.123E2): 0.12686415896391546E2 0.12686415896391546E2 +(~0.123, ~0.3141592653589793E1, 0.3141592653589793E1): 0.35280085499813376E1 0.35280085499813376E1 +(~0.123, ~0.3141592653589793E1, 0.2718281828459045E1): 0.31046977248505896E1 0.31046977248505896E1 +(~0.123, ~0.3141592653589793E1, 0.123E1): 0.16164158963915445E1 0.16164158963915445E1 +(~0.123, ~0.3141592653589793E1, 0.123): 0.5094158963915445 0.5094158963915445 +(~0.123, ~0.3141592653589793E1, 0.123E~2): 0.38764589639154456 0.38764589639154456 +(~0.123, ~0.3141592653589793E1, 0.22250738585072014E~307): 0.38641589639154456 0.38641589639154456 +(~0.123, ~0.3141592653589793E1, 0.11125369292536007E~307): 0.38641589639154456 0.38641589639154456 +(~0.123, ~0.3141592653589793E1, 0.5E~323): 0.38641589639154456 0.38641589639154456 +(~0.123, ~0.3141592653589793E1, 0.0): 0.38641589639154456 0.38641589639154456 +(~0.123, ~0.3141592653589793E1, ~0.123E4): ~0.12296135841036084E4 ~0.12296135841036084E4 +(~0.123, ~0.3141592653589793E1, ~0.123E2): ~0.11913584103608455E2 ~0.11913584103608455E2 +(~0.123, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.27551767571982486E1 ~0.27551767571982486E1 +(~0.123, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.23318659320675006E1 ~0.23318659320675006E1 +(~0.123, ~0.3141592653589793E1, ~0.123E1): ~0.8435841036084555 ~0.8435841036084555 +(~0.123, ~0.3141592653589793E1, ~0.123): 0.26341589639154456 0.26341589639154456 +(~0.123, ~0.3141592653589793E1, ~0.123E~2): 0.38518589639154455 0.38518589639154455 +(~0.123, ~0.3141592653589793E1, ~0.22250738585072014E~307): 0.38641589639154456 0.38641589639154456 +(~0.123, ~0.3141592653589793E1, ~0.11125369292536007E~307): 0.38641589639154456 0.38641589639154456 +(~0.123, ~0.3141592653589793E1, ~0.5E~323): 0.38641589639154456 0.38641589639154456 +(~0.123, ~0.3141592653589793E1, ~0.0): 0.38641589639154456 0.38641589639154456 +(~0.123, ~0.2718281828459045E1, 0.123E4): 0.12303343486649005E4 0.12303343486649005E4 +(~0.123, ~0.2718281828459045E1, 0.123E2): 0.12634348664900463E2 0.12634348664900463E2 +(~0.123, ~0.2718281828459045E1, 0.3141592653589793E1): 0.34759413184902557E1 0.34759413184902557E1 +(~0.123, ~0.2718281828459045E1, 0.2718281828459045E1): 0.30526304933595076E1 0.30526304933595076E1 +(~0.123, ~0.2718281828459045E1, 0.123E1): 0.15643486649004625E1 0.15643486649004625E1 +(~0.123, ~0.2718281828459045E1, 0.123): 0.45734866490046255 0.45734866490046255 +(~0.123, ~0.2718281828459045E1, 0.123E~2): 0.33557866490046256 0.33557866490046256 +(~0.123, ~0.2718281828459045E1, 0.22250738585072014E~307): 0.33434866490046256 0.33434866490046256 +(~0.123, ~0.2718281828459045E1, 0.11125369292536007E~307): 0.33434866490046256 0.33434866490046256 +(~0.123, ~0.2718281828459045E1, 0.5E~323): 0.33434866490046256 0.33434866490046256 +(~0.123, ~0.2718281828459045E1, 0.0): 0.33434866490046256 0.33434866490046256 +(~0.123, ~0.2718281828459045E1, ~0.123E4): ~0.12296656513350995E4 ~0.12296656513350995E4 +(~0.123, ~0.2718281828459045E1, ~0.123E2): ~0.11965651335099539E2 ~0.11965651335099539E2 +(~0.123, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.28072439886893306E1 ~0.28072439886893306E1 +(~0.123, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.23839331635585825E1 ~0.23839331635585825E1 +(~0.123, ~0.2718281828459045E1, ~0.123E1): ~0.8956513350995374 ~0.8956513350995374 +(~0.123, ~0.2718281828459045E1, ~0.123): 0.21134866490046253 0.21134866490046253 +(~0.123, ~0.2718281828459045E1, ~0.123E~2): 0.33311866490046255 0.33311866490046255 +(~0.123, ~0.2718281828459045E1, ~0.22250738585072014E~307): 0.33434866490046256 0.33434866490046256 +(~0.123, ~0.2718281828459045E1, ~0.11125369292536007E~307): 0.33434866490046256 0.33434866490046256 +(~0.123, ~0.2718281828459045E1, ~0.5E~323): 0.33434866490046256 0.33434866490046256 +(~0.123, ~0.2718281828459045E1, ~0.0): 0.33434866490046256 0.33434866490046256 +(~0.123, ~0.123E1, 0.123E4): 0.123015129E4 0.123015129E4 +(~0.123, ~0.123E1, 0.123E2): 0.1245129E2 0.1245129E2 +(~0.123, ~0.123E1, 0.3141592653589793E1): 0.3292882653589793E1 0.3292882653589793E1 +(~0.123, ~0.123E1, 0.2718281828459045E1): 0.2869571828459045E1 0.2869571828459045E1 +(~0.123, ~0.123E1, 0.123E1): 0.138129E1 0.138129E1 +(~0.123, ~0.123E1, 0.123): 0.27429 0.27429 +(~0.123, ~0.123E1, 0.123E~2): 0.15252 0.15252 +(~0.123, ~0.123E1, 0.22250738585072014E~307): 0.15129 0.15129 +(~0.123, ~0.123E1, 0.11125369292536007E~307): 0.15129 0.15129 +(~0.123, ~0.123E1, 0.5E~323): 0.15129 0.15129 +(~0.123, ~0.123E1, 0.0): 0.15129 0.15129 +(~0.123, ~0.123E1, ~0.123E4): ~0.122984871E4 ~0.122984871E4 +(~0.123, ~0.123E1, ~0.123E2): ~0.12148710000000001E2 ~0.12148710000000001E2 +(~0.123, ~0.123E1, ~0.3141592653589793E1): ~0.2990302653589793E1 ~0.2990302653589793E1 +(~0.123, ~0.123E1, ~0.2718281828459045E1): ~0.2566991828459045E1 ~0.2566991828459045E1 +(~0.123, ~0.123E1, ~0.123E1): ~0.107871E1 ~0.107871E1 +(~0.123, ~0.123E1, ~0.123): 0.28289999999999996E~1 0.28289999999999996E~1 +(~0.123, ~0.123E1, ~0.123E~2): 0.15006 0.15006 +(~0.123, ~0.123E1, ~0.22250738585072014E~307): 0.15129 0.15129 +(~0.123, ~0.123E1, ~0.11125369292536007E~307): 0.15129 0.15129 +(~0.123, ~0.123E1, ~0.5E~323): 0.15129 0.15129 +(~0.123, ~0.123E1, ~0.0): 0.15129 0.15129 +(~0.123, ~0.123, 0.123E4): 0.1230015129E4 0.1230015129E4 +(~0.123, ~0.123, 0.123E2): 0.12315129E2 0.12315129E2 +(~0.123, ~0.123, 0.3141592653589793E1): 0.3156721653589793E1 0.3156721653589793E1 +(~0.123, ~0.123, 0.2718281828459045E1): 0.2733410828459045E1 0.2733410828459045E1 +(~0.123, ~0.123, 0.123E1): 0.1245129E1 0.1245129E1 +(~0.123, ~0.123, 0.123): 0.138129 0.138129 +(~0.123, ~0.123, 0.123E~2): 0.16359E~1 0.16359E~1 +(~0.123, ~0.123, 0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(~0.123, ~0.123, 0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(~0.123, ~0.123, 0.5E~323): 0.15129E~1 0.15129E~1 +(~0.123, ~0.123, 0.0): 0.15129E~1 0.15129E~1 +(~0.123, ~0.123, ~0.123E4): ~0.1229984871E4 ~0.1229984871E4 +(~0.123, ~0.123, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(~0.123, ~0.123, ~0.3141592653589793E1): ~0.3126463653589793E1 ~0.3126463653589793E1 +(~0.123, ~0.123, ~0.2718281828459045E1): ~0.2703152828459045E1 ~0.2703152828459045E1 +(~0.123, ~0.123, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(~0.123, ~0.123, ~0.123): ~0.107871 ~0.107871 +(~0.123, ~0.123, ~0.123E~2): 0.13899E~1 0.13899E~1 +(~0.123, ~0.123, ~0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(~0.123, ~0.123, ~0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(~0.123, ~0.123, ~0.5E~323): 0.15129E~1 0.15129E~1 +(~0.123, ~0.123, ~0.0): 0.15129E~1 0.15129E~1 +(~0.123, ~0.123E~2, 0.123E4): 0.123000015129E4 0.123000015129E4 +(~0.123, ~0.123E~2, 0.123E2): 0.1230015129E2 0.1230015129E2 +(~0.123, ~0.123E~2, 0.3141592653589793E1): 0.3141743943589793E1 0.3141743943589793E1 +(~0.123, ~0.123E~2, 0.2718281828459045E1): 0.2718433118459045E1 0.2718433118459045E1 +(~0.123, ~0.123E~2, 0.123E1): 0.123015129E1 0.123015129E1 +(~0.123, ~0.123E~2, 0.123): 0.12315129 0.12315129 +(~0.123, ~0.123E~2, 0.123E~2): 0.13812899999999999E~2 0.13812899999999999E~2 +(~0.123, ~0.123E~2, 0.22250738585072014E~307): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, 0.11125369292536007E~307): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, 0.5E~323): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, 0.0): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, ~0.123E4): ~0.122999984871E4 ~0.122999984871E4 +(~0.123, ~0.123E~2, ~0.123E2): ~0.12299848710000001E2 ~0.12299848710000001E2 +(~0.123, ~0.123E~2, ~0.3141592653589793E1): ~0.31414413635897933E1 ~0.31414413635897933E1 +(~0.123, ~0.123E~2, ~0.2718281828459045E1): ~0.27181305384590453E1 ~0.27181305384590453E1 +(~0.123, ~0.123E~2, ~0.123E1): ~0.122984871E1 ~0.122984871E1 +(~0.123, ~0.123E~2, ~0.123): ~0.12284871 ~0.12284871 +(~0.123, ~0.123E~2, ~0.123E~2): ~0.107871E~2 ~0.107871E~2 +(~0.123, ~0.123E~2, ~0.22250738585072014E~307): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, ~0.11125369292536007E~307): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, ~0.5E~323): 0.15129E~3 0.15129E~3 +(~0.123, ~0.123E~2, ~0.0): 0.15129E~3 0.15129E~3 +(~0.123, ~0.11125369292536007E~307, 0.22250738585072014E~307): 0.23619159008053945E~307 0.23619159008053945E~307 +(~0.123, ~0.11125369292536007E~307, 0.11125369292536007E~307): 0.1249378971551794E~307 0.1249378971551794E~307 +(~0.123, ~0.11125369292536007E~307, 0.5E~323): 0.136842042298193E~308 0.136842042298193E~308 +(~0.123, ~0.11125369292536007E~307, 0.0): 0.136842042298193E~308 0.136842042298193E~308 +(~0.123, ~0.11125369292536007E~307, ~0.22250738585072014E~307): ~0.20882318162090083E~307 ~0.20882318162090083E~307 +(~0.123, ~0.11125369292536007E~307, ~0.11125369292536007E~307): ~0.9756948869554076E~308 ~0.9756948869554076E~308 +(~0.123, ~0.11125369292536007E~307, ~0.5E~323): 0.136842042298192E~308 0.136842042298192E~308 +(~0.123, ~0.11125369292536007E~307, ~0.0): 0.136842042298193E~308 0.136842042298193E~308 +(~0.123, ~0.5E~323, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(~0.123, ~0.5E~323, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(~0.123, ~0.5E~323, 0.5E~323): 0.5E~323 0.5E~323 +(~0.123, ~0.5E~323, 0.0): 0.0 0.0 +(~0.123, ~0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(~0.123, ~0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(~0.123, ~0.5E~323, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(~0.123, ~0.5E~323, ~0.0): 0.0 0.0 +(~0.123E~2, 0.17976931348623157E309, 0.17976931348623157E309): 0.17954819723064351E309 0.17954819723064351E309 +(~0.123E~2, 0.17976931348623157E309, 0.8988465674311579E308): 0.8966354048752772E308 0.8966354048752772E308 +(~0.123E~2, 0.17976931348623157E309, 0.123E4): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, 0.123E2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, 0.3141592653589793E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, 0.2718281828459045E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, 0.123E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, 0.123): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, 0.123E~2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, 0.22250738585072014E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, 0.11125369292536007E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, 0.5E~323): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, 0.0): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, ~0.17976931348623157E309): ~inf ~inf +(~0.123E~2, 0.17976931348623157E309, ~0.8988465674311579E308): ~0.9010577299870385E308 ~0.9010577299870385E308 +(~0.123E~2, 0.17976931348623157E309, ~0.123E4): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, ~0.123E2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, ~0.3141592653589793E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, ~0.2718281828459045E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, ~0.123E1): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, ~0.123): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, ~0.123E~2): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, ~0.22250738585072014E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, ~0.11125369292536007E~307): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, ~0.5E~323): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.17976931348623157E309, ~0.0): ~0.2211162555880648E306 ~0.2211162555880648E306 +(~0.123E~2, 0.8988465674311579E308, 0.17976931348623157E309): 0.17965875535843753E309 0.17965875535843753E309 +(~0.123E~2, 0.8988465674311579E308, 0.8988465674311579E308): 0.8977409861532176E308 0.8977409861532176E308 +(~0.123E~2, 0.8988465674311579E308, 0.123E4): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, 0.123E2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, 0.3141592653589793E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, 0.2718281828459045E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, 0.123E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, 0.123): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, 0.123E~2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, 0.22250738585072014E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, 0.11125369292536007E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, 0.5E~323): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, 0.0): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, ~0.17976931348623157E309): ~inf ~inf +(~0.123E~2, 0.8988465674311579E308, ~0.8988465674311579E308): ~0.8999521487090981E308 ~0.8999521487090981E308 +(~0.123E~2, 0.8988465674311579E308, ~0.123E4): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, ~0.123E2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, ~0.3141592653589793E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, ~0.2718281828459045E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, ~0.123E1): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, ~0.123): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, ~0.123E~2): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, ~0.22250738585072014E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, ~0.11125369292536007E~307): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, ~0.5E~323): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.8988465674311579E308, ~0.0): ~0.1105581277940324E306 ~0.1105581277940324E306 +(~0.123E~2, 0.123E4, 0.123E4): 0.12284871E4 0.12284871E4 +(~0.123E~2, 0.123E4, 0.123E2): 0.107871E2 0.107871E2 +(~0.123E~2, 0.123E4, 0.3141592653589793E1): 0.16286926535897932E1 0.16286926535897932E1 +(~0.123E~2, 0.123E4, 0.2718281828459045E1): 0.12053818284590452E1 0.12053818284590452E1 +(~0.123E~2, 0.123E4, 0.123E1): ~0.2829 ~0.2829 +(~0.123E~2, 0.123E4, 0.123): ~0.13899E1 ~0.13899E1 +(~0.123E~2, 0.123E4, 0.123E~2): ~0.151167E1 ~0.151167E1 +(~0.123E~2, 0.123E4, 0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(~0.123E~2, 0.123E4, 0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(~0.123E~2, 0.123E4, 0.5E~323): ~0.15129E1 ~0.15129E1 +(~0.123E~2, 0.123E4, 0.0): ~0.15129E1 ~0.15129E1 +(~0.123E~2, 0.123E4, ~0.123E4): ~0.12315129E4 ~0.12315129E4 +(~0.123E~2, 0.123E4, ~0.123E2): ~0.138129E2 ~0.138129E2 +(~0.123E~2, 0.123E4, ~0.3141592653589793E1): ~0.4654492653589793E1 ~0.4654492653589793E1 +(~0.123E~2, 0.123E4, ~0.2718281828459045E1): ~0.4231181828459045E1 ~0.4231181828459045E1 +(~0.123E~2, 0.123E4, ~0.123E1): ~0.27429E1 ~0.27429E1 +(~0.123E~2, 0.123E4, ~0.123): ~0.16359E1 ~0.16359E1 +(~0.123E~2, 0.123E4, ~0.123E~2): ~0.151413E1 ~0.151413E1 +(~0.123E~2, 0.123E4, ~0.22250738585072014E~307): ~0.15129E1 ~0.15129E1 +(~0.123E~2, 0.123E4, ~0.11125369292536007E~307): ~0.15129E1 ~0.15129E1 +(~0.123E~2, 0.123E4, ~0.5E~323): ~0.15129E1 ~0.15129E1 +(~0.123E~2, 0.123E4, ~0.0): ~0.15129E1 ~0.15129E1 +(~0.123E~2, 0.123E2, 0.123E4): 0.1229984871E4 0.1229984871E4 +(~0.123E~2, 0.123E2, 0.123E2): 0.12284871E2 0.12284871E2 +(~0.123E~2, 0.123E2, 0.3141592653589793E1): 0.3126463653589793E1 0.3126463653589793E1 +(~0.123E~2, 0.123E2, 0.2718281828459045E1): 0.2703152828459045E1 0.2703152828459045E1 +(~0.123E~2, 0.123E2, 0.123E1): 0.1214871E1 0.1214871E1 +(~0.123E~2, 0.123E2, 0.123): 0.107871 0.107871 +(~0.123E~2, 0.123E2, 0.123E~2): ~0.13899E~1 ~0.13899E~1 +(~0.123E~2, 0.123E2, 0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123E~2, 0.123E2, 0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123E~2, 0.123E2, 0.5E~323): ~0.15129E~1 ~0.15129E~1 +(~0.123E~2, 0.123E2, 0.0): ~0.15129E~1 ~0.15129E~1 +(~0.123E~2, 0.123E2, ~0.123E4): ~0.1230015129E4 ~0.1230015129E4 +(~0.123E~2, 0.123E2, ~0.123E2): ~0.12315129E2 ~0.12315129E2 +(~0.123E~2, 0.123E2, ~0.3141592653589793E1): ~0.3156721653589793E1 ~0.3156721653589793E1 +(~0.123E~2, 0.123E2, ~0.2718281828459045E1): ~0.2733410828459045E1 ~0.2733410828459045E1 +(~0.123E~2, 0.123E2, ~0.123E1): ~0.1245129E1 ~0.1245129E1 +(~0.123E~2, 0.123E2, ~0.123): ~0.138129 ~0.138129 +(~0.123E~2, 0.123E2, ~0.123E~2): ~0.16359000000000002E~1 ~0.16359000000000002E~1 +(~0.123E~2, 0.123E2, ~0.22250738585072014E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123E~2, 0.123E2, ~0.11125369292536007E~307): ~0.15129E~1 ~0.15129E~1 +(~0.123E~2, 0.123E2, ~0.5E~323): ~0.15129E~1 ~0.15129E~1 +(~0.123E~2, 0.123E2, ~0.0): ~0.15129E~1 ~0.15129E~1 +(~0.123E~2, 0.3141592653589793E1, 0.123E4): 0.1229996135841036E4 0.1229996135841036E4 +(~0.123E~2, 0.3141592653589793E1, 0.123E2): 0.12296135841036085E2 0.12296135841036085E2 +(~0.123E~2, 0.3141592653589793E1, 0.3141592653589793E1): 0.31377284946258777E1 0.31377284946258777E1 +(~0.123E~2, 0.3141592653589793E1, 0.2718281828459045E1): 0.27144176694951296E1 0.27144176694951296E1 +(~0.123E~2, 0.3141592653589793E1, 0.123E1): 0.12261358410360845E1 0.12261358410360845E1 +(~0.123E~2, 0.3141592653589793E1, 0.123): 0.11913584103608456 0.11913584103608456 +(~0.123E~2, 0.3141592653589793E1, 0.123E~2): ~0.26341589639154455E~2 ~0.26341589639154455E~2 +(~0.123E~2, 0.3141592653589793E1, 0.22250738585072014E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.123E~2, 0.3141592653589793E1, 0.11125369292536007E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.123E~2, 0.3141592653589793E1, 0.5E~323): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.123E~2, 0.3141592653589793E1, 0.0): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.123E~2, 0.3141592653589793E1, ~0.123E4): ~0.1230003864158964E4 ~0.1230003864158964E4 +(~0.123E~2, 0.3141592653589793E1, ~0.123E2): ~0.12303864158963917E2 ~0.12303864158963917E2 +(~0.123E~2, 0.3141592653589793E1, ~0.3141592653589793E1): ~0.31454568125537086E1 ~0.31454568125537086E1 +(~0.123E~2, 0.3141592653589793E1, ~0.2718281828459045E1): ~0.27221459874229605E1 ~0.27221459874229605E1 +(~0.123E~2, 0.3141592653589793E1, ~0.123E1): ~0.12338641589639154E1 ~0.12338641589639154E1 +(~0.123E~2, 0.3141592653589793E1, ~0.123): ~0.12686415896391545 ~0.12686415896391545 +(~0.123E~2, 0.3141592653589793E1, ~0.123E~2): ~0.5094158963915445E~2 ~0.5094158963915445E~2 +(~0.123E~2, 0.3141592653589793E1, ~0.22250738585072014E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.123E~2, 0.3141592653589793E1, ~0.11125369292536007E~307): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.123E~2, 0.3141592653589793E1, ~0.5E~323): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.123E~2, 0.3141592653589793E1, ~0.0): ~0.38641589639154456E~2 ~0.38641589639154456E~2 +(~0.123E~2, 0.2718281828459045E1, 0.123E4): 0.1229996656513351E4 0.1229996656513351E4 +(~0.123E~2, 0.2718281828459045E1, 0.123E2): 0.12296656513350996E2 0.12296656513350996E2 +(~0.123E~2, 0.2718281828459045E1, 0.3141592653589793E1): 0.31382491669407884E1 0.31382491669407884E1 +(~0.123E~2, 0.2718281828459045E1, 0.2718281828459045E1): 0.27149383418100403E1 0.27149383418100403E1 +(~0.123E~2, 0.2718281828459045E1, 0.123E1): 0.12266565133509955E1 0.12266565133509955E1 +(~0.123E~2, 0.2718281828459045E1, 0.123): 0.11965651335099538 0.11965651335099538 +(~0.123E~2, 0.2718281828459045E1, 0.123E~2): ~0.21134866490046256E~2 ~0.21134866490046256E~2 +(~0.123E~2, 0.2718281828459045E1, 0.22250738585072014E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.123E~2, 0.2718281828459045E1, 0.11125369292536007E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.123E~2, 0.2718281828459045E1, 0.5E~323): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.123E~2, 0.2718281828459045E1, 0.0): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.123E~2, 0.2718281828459045E1, ~0.123E4): ~0.1230003343486649E4 ~0.1230003343486649E4 +(~0.123E~2, 0.2718281828459045E1, ~0.123E2): ~0.12303343486649005E2 ~0.12303343486649005E2 +(~0.123E~2, 0.2718281828459045E1, ~0.3141592653589793E1): ~0.3144936140238798E1 ~0.3144936140238798E1 +(~0.123E~2, 0.2718281828459045E1, ~0.2718281828459045E1): ~0.272162531510805E1 ~0.272162531510805E1 +(~0.123E~2, 0.2718281828459045E1, ~0.123E1): ~0.12333434866490045E1 ~0.12333434866490045E1 +(~0.123E~2, 0.2718281828459045E1, ~0.123): ~0.12634348664900463 ~0.12634348664900463 +(~0.123E~2, 0.2718281828459045E1, ~0.123E~2): ~0.4573486649004625E~2 ~0.4573486649004625E~2 +(~0.123E~2, 0.2718281828459045E1, ~0.22250738585072014E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.123E~2, 0.2718281828459045E1, ~0.11125369292536007E~307): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.123E~2, 0.2718281828459045E1, ~0.5E~323): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.123E~2, 0.2718281828459045E1, ~0.0): ~0.33434866490046253E~2 ~0.33434866490046253E~2 +(~0.123E~2, 0.123E1, 0.123E4): 0.12299984871E4 0.12299984871E4 +(~0.123E~2, 0.123E1, 0.123E2): 0.12298487100000001E2 0.12298487100000001E2 +(~0.123E~2, 0.123E1, 0.3141592653589793E1): 0.31400797535897933E1 0.31400797535897933E1 +(~0.123E~2, 0.123E1, 0.2718281828459045E1): 0.27167689284590453E1 0.27167689284590453E1 +(~0.123E~2, 0.123E1, 0.123E1): 0.12284871E1 0.12284871E1 +(~0.123E~2, 0.123E1, 0.123): 0.1214871 0.1214871 +(~0.123E~2, 0.123E1, 0.123E~2): ~0.2829E~3 ~0.2829E~3 +(~0.123E~2, 0.123E1, 0.22250738585072014E~307): ~0.15129E~2 ~0.15129E~2 +(~0.123E~2, 0.123E1, 0.11125369292536007E~307): ~0.15129E~2 ~0.15129E~2 +(~0.123E~2, 0.123E1, 0.5E~323): ~0.15129E~2 ~0.15129E~2 +(~0.123E~2, 0.123E1, 0.0): ~0.15129E~2 ~0.15129E~2 +(~0.123E~2, 0.123E1, ~0.123E4): ~0.12300015129E4 ~0.12300015129E4 +(~0.123E~2, 0.123E1, ~0.123E2): ~0.123015129E2 ~0.123015129E2 +(~0.123E~2, 0.123E1, ~0.3141592653589793E1): ~0.3143105553589793E1 ~0.3143105553589793E1 +(~0.123E~2, 0.123E1, ~0.2718281828459045E1): ~0.2719794728459045E1 ~0.2719794728459045E1 +(~0.123E~2, 0.123E1, ~0.123E1): ~0.12315129E1 ~0.12315129E1 +(~0.123E~2, 0.123E1, ~0.123): ~0.1245129 ~0.1245129 +(~0.123E~2, 0.123E1, ~0.123E~2): ~0.27429E~2 ~0.27429E~2 +(~0.123E~2, 0.123E1, ~0.22250738585072014E~307): ~0.15129E~2 ~0.15129E~2 +(~0.123E~2, 0.123E1, ~0.11125369292536007E~307): ~0.15129E~2 ~0.15129E~2 +(~0.123E~2, 0.123E1, ~0.5E~323): ~0.15129E~2 ~0.15129E~2 +(~0.123E~2, 0.123E1, ~0.0): ~0.15129E~2 ~0.15129E~2 +(~0.123E~2, 0.123, 0.123E4): 0.122999984871E4 0.122999984871E4 +(~0.123E~2, 0.123, 0.123E2): 0.12299848710000001E2 0.12299848710000001E2 +(~0.123E~2, 0.123, 0.3141592653589793E1): 0.31414413635897933E1 0.31414413635897933E1 +(~0.123E~2, 0.123, 0.2718281828459045E1): 0.27181305384590453E1 0.27181305384590453E1 +(~0.123E~2, 0.123, 0.123E1): 0.122984871E1 0.122984871E1 +(~0.123E~2, 0.123, 0.123): 0.12284871 0.12284871 +(~0.123E~2, 0.123, 0.123E~2): 0.107871E~2 0.107871E~2 +(~0.123E~2, 0.123, 0.22250738585072014E~307): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, 0.11125369292536007E~307): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, 0.5E~323): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, 0.0): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, ~0.123E4): ~0.123000015129E4 ~0.123000015129E4 +(~0.123E~2, 0.123, ~0.123E2): ~0.1230015129E2 ~0.1230015129E2 +(~0.123E~2, 0.123, ~0.3141592653589793E1): ~0.3141743943589793E1 ~0.3141743943589793E1 +(~0.123E~2, 0.123, ~0.2718281828459045E1): ~0.2718433118459045E1 ~0.2718433118459045E1 +(~0.123E~2, 0.123, ~0.123E1): ~0.123015129E1 ~0.123015129E1 +(~0.123E~2, 0.123, ~0.123): ~0.12315129 ~0.12315129 +(~0.123E~2, 0.123, ~0.123E~2): ~0.13812899999999999E~2 ~0.13812899999999999E~2 +(~0.123E~2, 0.123, ~0.22250738585072014E~307): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, ~0.11125369292536007E~307): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, ~0.5E~323): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123, ~0.0): ~0.15129E~3 ~0.15129E~3 +(~0.123E~2, 0.123E~2, 0.123E4): 0.12299999984871E4 0.12299999984871E4 +(~0.123E~2, 0.123E~2, 0.123E2): 0.122999984871E2 0.122999984871E2 +(~0.123E~2, 0.123E~2, 0.3141592653589793E1): 0.3141591140689793E1 0.3141591140689793E1 +(~0.123E~2, 0.123E~2, 0.2718281828459045E1): 0.2718280315559045E1 0.2718280315559045E1 +(~0.123E~2, 0.123E~2, 0.123E1): 0.12299984871E1 0.12299984871E1 +(~0.123E~2, 0.123E~2, 0.123): 0.1229984871 0.1229984871 +(~0.123E~2, 0.123E~2, 0.123E~2): 0.12284871E~2 0.12284871E~2 +(~0.123E~2, 0.123E~2, 0.22250738585072014E~307): ~0.15129E~5 ~0.15129E~5 +(~0.123E~2, 0.123E~2, 0.11125369292536007E~307): ~0.15129E~5 ~0.15129E~5 +(~0.123E~2, 0.123E~2, 0.5E~323): ~0.15129E~5 ~0.15129E~5 +(~0.123E~2, 0.123E~2, 0.0): ~0.15129E~5 ~0.15129E~5 +(~0.123E~2, 0.123E~2, ~0.123E4): ~0.12300000015129E4 ~0.12300000015129E4 +(~0.123E~2, 0.123E~2, ~0.123E2): ~0.12300001512900002E2 ~0.12300001512900002E2 +(~0.123E~2, 0.123E~2, ~0.3141592653589793E1): ~0.3141594166489793E1 ~0.3141594166489793E1 +(~0.123E~2, 0.123E~2, ~0.2718281828459045E1): ~0.2718283341359045E1 ~0.2718283341359045E1 +(~0.123E~2, 0.123E~2, ~0.123E1): ~0.12300015129E1 ~0.12300015129E1 +(~0.123E~2, 0.123E~2, ~0.123): ~0.1230015129 ~0.1230015129 +(~0.123E~2, 0.123E~2, ~0.123E~2): ~0.12315129E~2 ~0.12315129E~2 +(~0.123E~2, 0.123E~2, ~0.22250738585072014E~307): ~0.15129E~5 ~0.15129E~5 +(~0.123E~2, 0.123E~2, ~0.11125369292536007E~307): ~0.15129E~5 ~0.15129E~5 +(~0.123E~2, 0.123E~2, ~0.5E~323): ~0.15129E~5 ~0.15129E~5 +(~0.123E~2, 0.123E~2, ~0.0): ~0.15129E~5 ~0.15129E~5 +(~0.123E~2, 0.22250738585072014E~307, 0.22250738585072014E~307): 0.22223370176612374E~307 0.22223370176612374E~307 +(~0.123E~2, 0.22250738585072014E~307, 0.11125369292536007E~307): 0.11098000884076367E~307 0.11098000884076367E~307 +(~0.123E~2, 0.22250738585072014E~307, 0.5E~323): ~0.27368408459635E~310 ~0.27368408459635E~310 +(~0.123E~2, 0.22250738585072014E~307, 0.0): ~0.2736840845964E~310 ~0.2736840845964E~310 +(~0.123E~2, 0.22250738585072014E~307, ~0.22250738585072014E~307): ~0.22278106993531654E~307 ~0.22278106993531654E~307 +(~0.123E~2, 0.22250738585072014E~307, ~0.11125369292536007E~307): ~0.11152737700995647E~307 ~0.11152737700995647E~307 +(~0.123E~2, 0.22250738585072014E~307, ~0.5E~323): ~0.27368408459645E~310 ~0.27368408459645E~310 +(~0.123E~2, 0.22250738585072014E~307, ~0.0): ~0.2736840845964E~310 ~0.2736840845964E~310 +(~0.123E~2, 0.11125369292536007E~307, 0.22250738585072014E~307): 0.22237054380842194E~307 0.22237054380842194E~307 +(~0.123E~2, 0.11125369292536007E~307, 0.11125369292536007E~307): 0.11111685088306187E~307 0.11111685088306187E~307 +(~0.123E~2, 0.11125369292536007E~307, 0.5E~323): ~0.13684204229815E~310 ~0.13684204229815E~310 +(~0.123E~2, 0.11125369292536007E~307, 0.0): ~0.1368420422982E~310 ~0.1368420422982E~310 +(~0.123E~2, 0.11125369292536007E~307, ~0.22250738585072014E~307): ~0.22264422789301834E~307 ~0.22264422789301834E~307 +(~0.123E~2, 0.11125369292536007E~307, ~0.11125369292536007E~307): ~0.11139053496765827E~307 ~0.11139053496765827E~307 +(~0.123E~2, 0.11125369292536007E~307, ~0.5E~323): ~0.13684204229825E~310 ~0.13684204229825E~310 +(~0.123E~2, 0.11125369292536007E~307, ~0.0): ~0.1368420422982E~310 ~0.1368420422982E~310 +(~0.123E~2, 0.5E~323, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(~0.123E~2, 0.5E~323, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(~0.123E~2, 0.5E~323, 0.5E~323): 0.5E~323 0.5E~323 +(~0.123E~2, 0.5E~323, 0.0): ~0.0 ~0.0 +(~0.123E~2, 0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(~0.123E~2, 0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(~0.123E~2, 0.5E~323, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(~0.123E~2, 0.5E~323, ~0.0): ~0.0 ~0.0 +(~0.123E~2, ~0.17976931348623157E309, 0.17976931348623157E309): inf inf +(~0.123E~2, ~0.17976931348623157E309, 0.8988465674311579E308): 0.9010577299870385E308 0.9010577299870385E308 +(~0.123E~2, ~0.17976931348623157E309, 0.123E4): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, 0.123E2): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, 0.3141592653589793E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, 0.2718281828459045E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, 0.123E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, 0.123): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, 0.123E~2): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, 0.22250738585072014E~307): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, 0.11125369292536007E~307): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, 0.5E~323): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, 0.0): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, ~0.17976931348623157E309): ~0.17954819723064351E309 ~0.17954819723064351E309 +(~0.123E~2, ~0.17976931348623157E309, ~0.8988465674311579E308): ~0.8966354048752772E308 ~0.8966354048752772E308 +(~0.123E~2, ~0.17976931348623157E309, ~0.123E4): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, ~0.123E2): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, ~0.3141592653589793E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, ~0.2718281828459045E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, ~0.123E1): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, ~0.123): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, ~0.123E~2): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, ~0.22250738585072014E~307): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, ~0.11125369292536007E~307): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, ~0.5E~323): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.17976931348623157E309, ~0.0): 0.2211162555880648E306 0.2211162555880648E306 +(~0.123E~2, ~0.8988465674311579E308, 0.17976931348623157E309): inf inf +(~0.123E~2, ~0.8988465674311579E308, 0.8988465674311579E308): 0.8999521487090981E308 0.8999521487090981E308 +(~0.123E~2, ~0.8988465674311579E308, 0.123E4): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, 0.123E2): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, 0.3141592653589793E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, 0.2718281828459045E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, 0.123E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, 0.123): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, 0.123E~2): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, 0.22250738585072014E~307): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, 0.11125369292536007E~307): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, 0.5E~323): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, 0.0): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, ~0.17976931348623157E309): ~0.17965875535843753E309 ~0.17965875535843753E309 +(~0.123E~2, ~0.8988465674311579E308, ~0.8988465674311579E308): ~0.8977409861532176E308 ~0.8977409861532176E308 +(~0.123E~2, ~0.8988465674311579E308, ~0.123E4): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, ~0.123E2): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, ~0.3141592653589793E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, ~0.2718281828459045E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, ~0.123E1): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, ~0.123): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, ~0.123E~2): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, ~0.22250738585072014E~307): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, ~0.11125369292536007E~307): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, ~0.5E~323): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.8988465674311579E308, ~0.0): 0.1105581277940324E306 0.1105581277940324E306 +(~0.123E~2, ~0.123E4, 0.123E4): 0.12315129E4 0.12315129E4 +(~0.123E~2, ~0.123E4, 0.123E2): 0.138129E2 0.138129E2 +(~0.123E~2, ~0.123E4, 0.3141592653589793E1): 0.4654492653589793E1 0.4654492653589793E1 +(~0.123E~2, ~0.123E4, 0.2718281828459045E1): 0.4231181828459045E1 0.4231181828459045E1 +(~0.123E~2, ~0.123E4, 0.123E1): 0.27429E1 0.27429E1 +(~0.123E~2, ~0.123E4, 0.123): 0.16359E1 0.16359E1 +(~0.123E~2, ~0.123E4, 0.123E~2): 0.151413E1 0.151413E1 +(~0.123E~2, ~0.123E4, 0.22250738585072014E~307): 0.15129E1 0.15129E1 +(~0.123E~2, ~0.123E4, 0.11125369292536007E~307): 0.15129E1 0.15129E1 +(~0.123E~2, ~0.123E4, 0.5E~323): 0.15129E1 0.15129E1 +(~0.123E~2, ~0.123E4, 0.0): 0.15129E1 0.15129E1 +(~0.123E~2, ~0.123E4, ~0.123E4): ~0.12284871E4 ~0.12284871E4 +(~0.123E~2, ~0.123E4, ~0.123E2): ~0.107871E2 ~0.107871E2 +(~0.123E~2, ~0.123E4, ~0.3141592653589793E1): ~0.16286926535897932E1 ~0.16286926535897932E1 +(~0.123E~2, ~0.123E4, ~0.2718281828459045E1): ~0.12053818284590452E1 ~0.12053818284590452E1 +(~0.123E~2, ~0.123E4, ~0.123E1): 0.2829 0.2829 +(~0.123E~2, ~0.123E4, ~0.123): 0.13899E1 0.13899E1 +(~0.123E~2, ~0.123E4, ~0.123E~2): 0.151167E1 0.151167E1 +(~0.123E~2, ~0.123E4, ~0.22250738585072014E~307): 0.15129E1 0.15129E1 +(~0.123E~2, ~0.123E4, ~0.11125369292536007E~307): 0.15129E1 0.15129E1 +(~0.123E~2, ~0.123E4, ~0.5E~323): 0.15129E1 0.15129E1 +(~0.123E~2, ~0.123E4, ~0.0): 0.15129E1 0.15129E1 +(~0.123E~2, ~0.123E2, 0.123E4): 0.1230015129E4 0.1230015129E4 +(~0.123E~2, ~0.123E2, 0.123E2): 0.12315129E2 0.12315129E2 +(~0.123E~2, ~0.123E2, 0.3141592653589793E1): 0.3156721653589793E1 0.3156721653589793E1 +(~0.123E~2, ~0.123E2, 0.2718281828459045E1): 0.2733410828459045E1 0.2733410828459045E1 +(~0.123E~2, ~0.123E2, 0.123E1): 0.1245129E1 0.1245129E1 +(~0.123E~2, ~0.123E2, 0.123): 0.138129 0.138129 +(~0.123E~2, ~0.123E2, 0.123E~2): 0.16359000000000002E~1 0.16359000000000002E~1 +(~0.123E~2, ~0.123E2, 0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(~0.123E~2, ~0.123E2, 0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(~0.123E~2, ~0.123E2, 0.5E~323): 0.15129E~1 0.15129E~1 +(~0.123E~2, ~0.123E2, 0.0): 0.15129E~1 0.15129E~1 +(~0.123E~2, ~0.123E2, ~0.123E4): ~0.1229984871E4 ~0.1229984871E4 +(~0.123E~2, ~0.123E2, ~0.123E2): ~0.12284871E2 ~0.12284871E2 +(~0.123E~2, ~0.123E2, ~0.3141592653589793E1): ~0.3126463653589793E1 ~0.3126463653589793E1 +(~0.123E~2, ~0.123E2, ~0.2718281828459045E1): ~0.2703152828459045E1 ~0.2703152828459045E1 +(~0.123E~2, ~0.123E2, ~0.123E1): ~0.1214871E1 ~0.1214871E1 +(~0.123E~2, ~0.123E2, ~0.123): ~0.107871 ~0.107871 +(~0.123E~2, ~0.123E2, ~0.123E~2): 0.13899E~1 0.13899E~1 +(~0.123E~2, ~0.123E2, ~0.22250738585072014E~307): 0.15129E~1 0.15129E~1 +(~0.123E~2, ~0.123E2, ~0.11125369292536007E~307): 0.15129E~1 0.15129E~1 +(~0.123E~2, ~0.123E2, ~0.5E~323): 0.15129E~1 0.15129E~1 +(~0.123E~2, ~0.123E2, ~0.0): 0.15129E~1 0.15129E~1 +(~0.123E~2, ~0.3141592653589793E1, 0.123E4): 0.1230003864158964E4 0.1230003864158964E4 +(~0.123E~2, ~0.3141592653589793E1, 0.123E2): 0.12303864158963917E2 0.12303864158963917E2 +(~0.123E~2, ~0.3141592653589793E1, 0.3141592653589793E1): 0.31454568125537086E1 0.31454568125537086E1 +(~0.123E~2, ~0.3141592653589793E1, 0.2718281828459045E1): 0.27221459874229605E1 0.27221459874229605E1 +(~0.123E~2, ~0.3141592653589793E1, 0.123E1): 0.12338641589639154E1 0.12338641589639154E1 +(~0.123E~2, ~0.3141592653589793E1, 0.123): 0.12686415896391545 0.12686415896391545 +(~0.123E~2, ~0.3141592653589793E1, 0.123E~2): 0.5094158963915445E~2 0.5094158963915445E~2 +(~0.123E~2, ~0.3141592653589793E1, 0.22250738585072014E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.123E~2, ~0.3141592653589793E1, 0.11125369292536007E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.123E~2, ~0.3141592653589793E1, 0.5E~323): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.123E~2, ~0.3141592653589793E1, 0.0): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.123E~2, ~0.3141592653589793E1, ~0.123E4): ~0.1229996135841036E4 ~0.1229996135841036E4 +(~0.123E~2, ~0.3141592653589793E1, ~0.123E2): ~0.12296135841036085E2 ~0.12296135841036085E2 +(~0.123E~2, ~0.3141592653589793E1, ~0.3141592653589793E1): ~0.31377284946258777E1 ~0.31377284946258777E1 +(~0.123E~2, ~0.3141592653589793E1, ~0.2718281828459045E1): ~0.27144176694951296E1 ~0.27144176694951296E1 +(~0.123E~2, ~0.3141592653589793E1, ~0.123E1): ~0.12261358410360845E1 ~0.12261358410360845E1 +(~0.123E~2, ~0.3141592653589793E1, ~0.123): ~0.11913584103608456 ~0.11913584103608456 +(~0.123E~2, ~0.3141592653589793E1, ~0.123E~2): 0.26341589639154455E~2 0.26341589639154455E~2 +(~0.123E~2, ~0.3141592653589793E1, ~0.22250738585072014E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.123E~2, ~0.3141592653589793E1, ~0.11125369292536007E~307): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.123E~2, ~0.3141592653589793E1, ~0.5E~323): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.123E~2, ~0.3141592653589793E1, ~0.0): 0.38641589639154456E~2 0.38641589639154456E~2 +(~0.123E~2, ~0.2718281828459045E1, 0.123E4): 0.1230003343486649E4 0.1230003343486649E4 +(~0.123E~2, ~0.2718281828459045E1, 0.123E2): 0.12303343486649005E2 0.12303343486649005E2 +(~0.123E~2, ~0.2718281828459045E1, 0.3141592653589793E1): 0.3144936140238798E1 0.3144936140238798E1 +(~0.123E~2, ~0.2718281828459045E1, 0.2718281828459045E1): 0.272162531510805E1 0.272162531510805E1 +(~0.123E~2, ~0.2718281828459045E1, 0.123E1): 0.12333434866490045E1 0.12333434866490045E1 +(~0.123E~2, ~0.2718281828459045E1, 0.123): 0.12634348664900463 0.12634348664900463 +(~0.123E~2, ~0.2718281828459045E1, 0.123E~2): 0.4573486649004625E~2 0.4573486649004625E~2 +(~0.123E~2, ~0.2718281828459045E1, 0.22250738585072014E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.123E~2, ~0.2718281828459045E1, 0.11125369292536007E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.123E~2, ~0.2718281828459045E1, 0.5E~323): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.123E~2, ~0.2718281828459045E1, 0.0): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.123E~2, ~0.2718281828459045E1, ~0.123E4): ~0.1229996656513351E4 ~0.1229996656513351E4 +(~0.123E~2, ~0.2718281828459045E1, ~0.123E2): ~0.12296656513350996E2 ~0.12296656513350996E2 +(~0.123E~2, ~0.2718281828459045E1, ~0.3141592653589793E1): ~0.31382491669407884E1 ~0.31382491669407884E1 +(~0.123E~2, ~0.2718281828459045E1, ~0.2718281828459045E1): ~0.27149383418100403E1 ~0.27149383418100403E1 +(~0.123E~2, ~0.2718281828459045E1, ~0.123E1): ~0.12266565133509955E1 ~0.12266565133509955E1 +(~0.123E~2, ~0.2718281828459045E1, ~0.123): ~0.11965651335099538 ~0.11965651335099538 +(~0.123E~2, ~0.2718281828459045E1, ~0.123E~2): 0.21134866490046256E~2 0.21134866490046256E~2 +(~0.123E~2, ~0.2718281828459045E1, ~0.22250738585072014E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.123E~2, ~0.2718281828459045E1, ~0.11125369292536007E~307): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.123E~2, ~0.2718281828459045E1, ~0.5E~323): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.123E~2, ~0.2718281828459045E1, ~0.0): 0.33434866490046253E~2 0.33434866490046253E~2 +(~0.123E~2, ~0.123E1, 0.123E4): 0.12300015129E4 0.12300015129E4 +(~0.123E~2, ~0.123E1, 0.123E2): 0.123015129E2 0.123015129E2 +(~0.123E~2, ~0.123E1, 0.3141592653589793E1): 0.3143105553589793E1 0.3143105553589793E1 +(~0.123E~2, ~0.123E1, 0.2718281828459045E1): 0.2719794728459045E1 0.2719794728459045E1 +(~0.123E~2, ~0.123E1, 0.123E1): 0.12315129E1 0.12315129E1 +(~0.123E~2, ~0.123E1, 0.123): 0.1245129 0.1245129 +(~0.123E~2, ~0.123E1, 0.123E~2): 0.27429E~2 0.27429E~2 +(~0.123E~2, ~0.123E1, 0.22250738585072014E~307): 0.15129E~2 0.15129E~2 +(~0.123E~2, ~0.123E1, 0.11125369292536007E~307): 0.15129E~2 0.15129E~2 +(~0.123E~2, ~0.123E1, 0.5E~323): 0.15129E~2 0.15129E~2 +(~0.123E~2, ~0.123E1, 0.0): 0.15129E~2 0.15129E~2 +(~0.123E~2, ~0.123E1, ~0.123E4): ~0.12299984871E4 ~0.12299984871E4 +(~0.123E~2, ~0.123E1, ~0.123E2): ~0.12298487100000001E2 ~0.12298487100000001E2 +(~0.123E~2, ~0.123E1, ~0.3141592653589793E1): ~0.31400797535897933E1 ~0.31400797535897933E1 +(~0.123E~2, ~0.123E1, ~0.2718281828459045E1): ~0.27167689284590453E1 ~0.27167689284590453E1 +(~0.123E~2, ~0.123E1, ~0.123E1): ~0.12284871E1 ~0.12284871E1 +(~0.123E~2, ~0.123E1, ~0.123): ~0.1214871 ~0.1214871 +(~0.123E~2, ~0.123E1, ~0.123E~2): 0.2829E~3 0.2829E~3 +(~0.123E~2, ~0.123E1, ~0.22250738585072014E~307): 0.15129E~2 0.15129E~2 +(~0.123E~2, ~0.123E1, ~0.11125369292536007E~307): 0.15129E~2 0.15129E~2 +(~0.123E~2, ~0.123E1, ~0.5E~323): 0.15129E~2 0.15129E~2 +(~0.123E~2, ~0.123E1, ~0.0): 0.15129E~2 0.15129E~2 +(~0.123E~2, ~0.123, 0.123E4): 0.123000015129E4 0.123000015129E4 +(~0.123E~2, ~0.123, 0.123E2): 0.1230015129E2 0.1230015129E2 +(~0.123E~2, ~0.123, 0.3141592653589793E1): 0.3141743943589793E1 0.3141743943589793E1 +(~0.123E~2, ~0.123, 0.2718281828459045E1): 0.2718433118459045E1 0.2718433118459045E1 +(~0.123E~2, ~0.123, 0.123E1): 0.123015129E1 0.123015129E1 +(~0.123E~2, ~0.123, 0.123): 0.12315129 0.12315129 +(~0.123E~2, ~0.123, 0.123E~2): 0.13812899999999999E~2 0.13812899999999999E~2 +(~0.123E~2, ~0.123, 0.22250738585072014E~307): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, 0.11125369292536007E~307): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, 0.5E~323): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, 0.0): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, ~0.123E4): ~0.122999984871E4 ~0.122999984871E4 +(~0.123E~2, ~0.123, ~0.123E2): ~0.12299848710000001E2 ~0.12299848710000001E2 +(~0.123E~2, ~0.123, ~0.3141592653589793E1): ~0.31414413635897933E1 ~0.31414413635897933E1 +(~0.123E~2, ~0.123, ~0.2718281828459045E1): ~0.27181305384590453E1 ~0.27181305384590453E1 +(~0.123E~2, ~0.123, ~0.123E1): ~0.122984871E1 ~0.122984871E1 +(~0.123E~2, ~0.123, ~0.123): ~0.12284871 ~0.12284871 +(~0.123E~2, ~0.123, ~0.123E~2): ~0.107871E~2 ~0.107871E~2 +(~0.123E~2, ~0.123, ~0.22250738585072014E~307): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, ~0.11125369292536007E~307): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, ~0.5E~323): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123, ~0.0): 0.15129E~3 0.15129E~3 +(~0.123E~2, ~0.123E~2, 0.123E4): 0.12300000015129E4 0.12300000015129E4 +(~0.123E~2, ~0.123E~2, 0.123E2): 0.12300001512900002E2 0.12300001512900002E2 +(~0.123E~2, ~0.123E~2, 0.3141592653589793E1): 0.3141594166489793E1 0.3141594166489793E1 +(~0.123E~2, ~0.123E~2, 0.2718281828459045E1): 0.2718283341359045E1 0.2718283341359045E1 +(~0.123E~2, ~0.123E~2, 0.123E1): 0.12300015129E1 0.12300015129E1 +(~0.123E~2, ~0.123E~2, 0.123): 0.1230015129 0.1230015129 +(~0.123E~2, ~0.123E~2, 0.123E~2): 0.12315129E~2 0.12315129E~2 +(~0.123E~2, ~0.123E~2, 0.22250738585072014E~307): 0.15129E~5 0.15129E~5 +(~0.123E~2, ~0.123E~2, 0.11125369292536007E~307): 0.15129E~5 0.15129E~5 +(~0.123E~2, ~0.123E~2, 0.5E~323): 0.15129E~5 0.15129E~5 +(~0.123E~2, ~0.123E~2, 0.0): 0.15129E~5 0.15129E~5 +(~0.123E~2, ~0.123E~2, ~0.123E4): ~0.12299999984871E4 ~0.12299999984871E4 +(~0.123E~2, ~0.123E~2, ~0.123E2): ~0.122999984871E2 ~0.122999984871E2 +(~0.123E~2, ~0.123E~2, ~0.3141592653589793E1): ~0.3141591140689793E1 ~0.3141591140689793E1 +(~0.123E~2, ~0.123E~2, ~0.2718281828459045E1): ~0.2718280315559045E1 ~0.2718280315559045E1 +(~0.123E~2, ~0.123E~2, ~0.123E1): ~0.12299984871E1 ~0.12299984871E1 +(~0.123E~2, ~0.123E~2, ~0.123): ~0.1229984871 ~0.1229984871 +(~0.123E~2, ~0.123E~2, ~0.123E~2): ~0.12284871E~2 ~0.12284871E~2 +(~0.123E~2, ~0.123E~2, ~0.22250738585072014E~307): 0.15129E~5 0.15129E~5 +(~0.123E~2, ~0.123E~2, ~0.11125369292536007E~307): 0.15129E~5 0.15129E~5 +(~0.123E~2, ~0.123E~2, ~0.5E~323): 0.15129E~5 0.15129E~5 +(~0.123E~2, ~0.123E~2, ~0.0): 0.15129E~5 0.15129E~5 +(~0.123E~2, ~0.22250738585072014E~307, 0.22250738585072014E~307): 0.22278106993531654E~307 0.22278106993531654E~307 +(~0.123E~2, ~0.22250738585072014E~307, 0.11125369292536007E~307): 0.11152737700995647E~307 0.11152737700995647E~307 +(~0.123E~2, ~0.22250738585072014E~307, 0.5E~323): 0.27368408459645E~310 0.27368408459645E~310 +(~0.123E~2, ~0.22250738585072014E~307, 0.0): 0.2736840845964E~310 0.2736840845964E~310 +(~0.123E~2, ~0.22250738585072014E~307, ~0.22250738585072014E~307): ~0.22223370176612374E~307 ~0.22223370176612374E~307 +(~0.123E~2, ~0.22250738585072014E~307, ~0.11125369292536007E~307): ~0.11098000884076367E~307 ~0.11098000884076367E~307 +(~0.123E~2, ~0.22250738585072014E~307, ~0.5E~323): 0.27368408459635E~310 0.27368408459635E~310 +(~0.123E~2, ~0.22250738585072014E~307, ~0.0): 0.2736840845964E~310 0.2736840845964E~310 +(~0.123E~2, ~0.11125369292536007E~307, 0.22250738585072014E~307): 0.22264422789301834E~307 0.22264422789301834E~307 +(~0.123E~2, ~0.11125369292536007E~307, 0.11125369292536007E~307): 0.11139053496765827E~307 0.11139053496765827E~307 +(~0.123E~2, ~0.11125369292536007E~307, 0.5E~323): 0.13684204229825E~310 0.13684204229825E~310 +(~0.123E~2, ~0.11125369292536007E~307, 0.0): 0.1368420422982E~310 0.1368420422982E~310 +(~0.123E~2, ~0.11125369292536007E~307, ~0.22250738585072014E~307): ~0.22237054380842194E~307 ~0.22237054380842194E~307 +(~0.123E~2, ~0.11125369292536007E~307, ~0.11125369292536007E~307): ~0.11111685088306187E~307 ~0.11111685088306187E~307 +(~0.123E~2, ~0.11125369292536007E~307, ~0.5E~323): 0.13684204229815E~310 0.13684204229815E~310 +(~0.123E~2, ~0.11125369292536007E~307, ~0.0): 0.1368420422982E~310 0.1368420422982E~310 +(~0.123E~2, ~0.5E~323, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(~0.123E~2, ~0.5E~323, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(~0.123E~2, ~0.5E~323, 0.5E~323): 0.5E~323 0.5E~323 +(~0.123E~2, ~0.5E~323, 0.0): 0.0 0.0 +(~0.123E~2, ~0.5E~323, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(~0.123E~2, ~0.5E~323, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(~0.123E~2, ~0.5E~323, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(~0.123E~2, ~0.5E~323, ~0.0): 0.0 0.0 +(~0.22250738585072014E~307, 0.17976931348623157E309, 0.123E4): 0.1226E4 0.1226E4 +(~0.22250738585072014E~307, 0.17976931348623157E309, 0.123E2): 0.83E1 0.83E1 +(~0.22250738585072014E~307, 0.17976931348623157E309, 0.123): ~0.3877E1 ~0.3877E1 +(~0.22250738585072014E~307, 0.17976931348623157E309, 0.123E~2): ~0.39987699999999995E1 ~0.39987699999999995E1 +(~0.22250738585072014E~307, 0.17976931348623157E309, ~0.123E4): ~0.1234E4 ~0.1234E4 +(~0.22250738585072014E~307, 0.17976931348623157E309, ~0.123E2): ~0.163E2 ~0.163E2 +(~0.22250738585072014E~307, 0.17976931348623157E309, ~0.3141592653589793E1): ~0.7141592653589793E1 ~0.7141592653589793E1 +(~0.22250738585072014E~307, 0.17976931348623157E309, ~0.123): ~0.4122999999999999E1 ~0.4122999999999999E1 +(~0.22250738585072014E~307, 0.17976931348623157E309, ~0.123E~2): ~0.400123E1 ~0.400123E1 +(~0.22250738585072014E~307, 0.8988465674311579E308, 0.123E4): 0.1228E4 0.1228E4 +(~0.22250738585072014E~307, 0.8988465674311579E308, 0.123E2): 0.103E2 0.103E2 +(~0.22250738585072014E~307, 0.8988465674311579E308, 0.123E~2): ~0.19987699999999997E1 ~0.19987699999999997E1 +(~0.22250738585072014E~307, 0.8988465674311579E308, ~0.123E4): ~0.1232E4 ~0.1232E4 +(~0.22250738585072014E~307, 0.8988465674311579E308, ~0.123E2): ~0.143E2 ~0.143E2 +(~0.22250738585072014E~307, 0.8988465674311579E308, ~0.3141592653589793E1): ~0.5141592653589793E1 ~0.5141592653589793E1 +(~0.22250738585072014E~307, 0.8988465674311579E308, ~0.2718281828459045E1): ~0.4718281828459045E1 ~0.4718281828459045E1 +(~0.22250738585072014E~307, 0.8988465674311579E308, ~0.123E1): ~0.32299999999999995E1 ~0.32299999999999995E1 +(~0.22250738585072014E~307, 0.8988465674311579E308, ~0.123E~2): ~0.20012299999999996E1 ~0.20012299999999996E1 +(~0.22250738585072014E~307, 0.123E4, 0.5E~323): ~0.27368408459638577E~304 ~0.27368408459638577E~304 +(~0.22250738585072014E~307, 0.123E4, ~0.5E~323): ~0.27368408459638577E~304 ~0.27368408459638577E~304 +(~0.22250738585072014E~307, 0.123E2, 0.5E~323): ~0.2736840845963858E~306 ~0.2736840845963858E~306 +(~0.22250738585072014E~307, 0.123E2, ~0.5E~323): ~0.2736840845963858E~306 ~0.2736840845963858E~306 +(~0.22250738585072014E~307, 0.3141592653589793E1, 0.5E~323): ~0.6990275687580919E~307 ~0.6990275687580919E~307 +(~0.22250738585072014E~307, 0.3141592653589793E1, ~0.5E~323): ~0.6990275687580919E~307 ~0.6990275687580919E~307 +(~0.22250738585072014E~307, 0.2718281828459045E1, 0.5E~323): ~0.6048377836559377E~307 ~0.6048377836559377E~307 +(~0.22250738585072014E~307, 0.2718281828459045E1, ~0.5E~323): ~0.6048377836559379E~307 ~0.6048377836559379E~307 +(~0.22250738585072014E~307, 0.123E~2, 0.22250738585072014E~307): 0.22223370176612374E~307 0.22223370176612374E~307 +(~0.22250738585072014E~307, 0.123E~2, 0.11125369292536007E~307): 0.11098000884076367E~307 0.11098000884076367E~307 +(~0.22250738585072014E~307, 0.123E~2, 0.5E~323): ~0.27368408459635E~310 ~0.27368408459635E~310 +(~0.22250738585072014E~307, 0.123E~2, 0.0): ~0.2736840845964E~310 ~0.2736840845964E~310 +(~0.22250738585072014E~307, 0.123E~2, ~0.22250738585072014E~307): ~0.22278106993531654E~307 ~0.22278106993531654E~307 +(~0.22250738585072014E~307, 0.123E~2, ~0.11125369292536007E~307): ~0.11152737700995647E~307 ~0.11152737700995647E~307 +(~0.22250738585072014E~307, 0.123E~2, ~0.5E~323): ~0.27368408459645E~310 ~0.27368408459645E~310 +(~0.22250738585072014E~307, 0.123E~2, ~0.0): ~0.2736840845964E~310 ~0.2736840845964E~310 +(~0.22250738585072014E~307, 0.22250738585072014E~307, 0.0): ~0.0 ~0.0 +(~0.22250738585072014E~307, 0.22250738585072014E~307, ~0.0): ~0.0 ~0.0 +(~0.22250738585072014E~307, 0.11125369292536007E~307, 0.0): ~0.0 ~0.0 +(~0.22250738585072014E~307, 0.11125369292536007E~307, ~0.0): ~0.0 ~0.0 +(~0.22250738585072014E~307, 0.5E~323, 0.0): ~0.0 ~0.0 +(~0.22250738585072014E~307, 0.5E~323, ~0.0): ~0.0 ~0.0 +(~0.22250738585072014E~307, ~0.17976931348623157E309, 0.123E4): 0.1234E4 0.1234E4 +(~0.22250738585072014E~307, ~0.17976931348623157E309, 0.123E2): 0.163E2 0.163E2 +(~0.22250738585072014E~307, ~0.17976931348623157E309, 0.3141592653589793E1): 0.7141592653589793E1 0.7141592653589793E1 +(~0.22250738585072014E~307, ~0.17976931348623157E309, 0.123): 0.4122999999999999E1 0.4122999999999999E1 +(~0.22250738585072014E~307, ~0.17976931348623157E309, 0.123E~2): 0.400123E1 0.400123E1 +(~0.22250738585072014E~307, ~0.17976931348623157E309, ~0.123E4): ~0.1226E4 ~0.1226E4 +(~0.22250738585072014E~307, ~0.17976931348623157E309, ~0.123E2): ~0.83E1 ~0.83E1 +(~0.22250738585072014E~307, ~0.17976931348623157E309, ~0.123): 0.3877E1 0.3877E1 +(~0.22250738585072014E~307, ~0.17976931348623157E309, ~0.123E~2): 0.39987699999999995E1 0.39987699999999995E1 +(~0.22250738585072014E~307, ~0.8988465674311579E308, 0.123E4): 0.1232E4 0.1232E4 +(~0.22250738585072014E~307, ~0.8988465674311579E308, 0.123E2): 0.143E2 0.143E2 +(~0.22250738585072014E~307, ~0.8988465674311579E308, 0.3141592653589793E1): 0.5141592653589793E1 0.5141592653589793E1 +(~0.22250738585072014E~307, ~0.8988465674311579E308, 0.2718281828459045E1): 0.4718281828459045E1 0.4718281828459045E1 +(~0.22250738585072014E~307, ~0.8988465674311579E308, 0.123E1): 0.32299999999999995E1 0.32299999999999995E1 +(~0.22250738585072014E~307, ~0.8988465674311579E308, 0.123E~2): 0.20012299999999996E1 0.20012299999999996E1 +(~0.22250738585072014E~307, ~0.8988465674311579E308, ~0.123E4): ~0.1228E4 ~0.1228E4 +(~0.22250738585072014E~307, ~0.8988465674311579E308, ~0.123E2): ~0.103E2 ~0.103E2 +(~0.22250738585072014E~307, ~0.8988465674311579E308, ~0.123E~2): 0.19987699999999997E1 0.19987699999999997E1 +(~0.22250738585072014E~307, ~0.123E4, 0.5E~323): 0.27368408459638577E~304 0.27368408459638577E~304 +(~0.22250738585072014E~307, ~0.123E4, ~0.5E~323): 0.27368408459638577E~304 0.27368408459638577E~304 +(~0.22250738585072014E~307, ~0.123E2, 0.5E~323): 0.2736840845963858E~306 0.2736840845963858E~306 +(~0.22250738585072014E~307, ~0.123E2, ~0.5E~323): 0.2736840845963858E~306 0.2736840845963858E~306 +(~0.22250738585072014E~307, ~0.3141592653589793E1, 0.5E~323): 0.6990275687580919E~307 0.6990275687580919E~307 +(~0.22250738585072014E~307, ~0.3141592653589793E1, ~0.5E~323): 0.6990275687580919E~307 0.6990275687580919E~307 +(~0.22250738585072014E~307, ~0.2718281828459045E1, 0.5E~323): 0.6048377836559379E~307 0.6048377836559379E~307 +(~0.22250738585072014E~307, ~0.2718281828459045E1, ~0.5E~323): 0.6048377836559377E~307 0.6048377836559377E~307 +(~0.22250738585072014E~307, ~0.123E~2, 0.22250738585072014E~307): 0.22278106993531654E~307 0.22278106993531654E~307 +(~0.22250738585072014E~307, ~0.123E~2, 0.11125369292536007E~307): 0.11152737700995647E~307 0.11152737700995647E~307 +(~0.22250738585072014E~307, ~0.123E~2, 0.5E~323): 0.27368408459645E~310 0.27368408459645E~310 +(~0.22250738585072014E~307, ~0.123E~2, 0.0): 0.2736840845964E~310 0.2736840845964E~310 +(~0.22250738585072014E~307, ~0.123E~2, ~0.22250738585072014E~307): ~0.22223370176612374E~307 ~0.22223370176612374E~307 +(~0.22250738585072014E~307, ~0.123E~2, ~0.11125369292536007E~307): ~0.11098000884076367E~307 ~0.11098000884076367E~307 +(~0.22250738585072014E~307, ~0.123E~2, ~0.5E~323): 0.27368408459635E~310 0.27368408459635E~310 +(~0.22250738585072014E~307, ~0.123E~2, ~0.0): 0.2736840845964E~310 0.2736840845964E~310 +(~0.22250738585072014E~307, ~0.22250738585072014E~307, 0.0): 0.0 0.0 +(~0.22250738585072014E~307, ~0.22250738585072014E~307, ~0.0): 0.0 0.0 +(~0.22250738585072014E~307, ~0.11125369292536007E~307, 0.0): 0.0 0.0 +(~0.22250738585072014E~307, ~0.11125369292536007E~307, ~0.0): 0.0 0.0 +(~0.22250738585072014E~307, ~0.5E~323, 0.0): 0.0 0.0 +(~0.22250738585072014E~307, ~0.5E~323, ~0.0): 0.0 0.0 +(~0.11125369292536007E~307, 0.17976931348623157E309, 0.123E4): 0.1228E4 0.1228E4 +(~0.11125369292536007E~307, 0.17976931348623157E309, 0.123E2): 0.103E2 0.103E2 +(~0.11125369292536007E~307, 0.17976931348623157E309, 0.123E~2): ~0.19987699999999997E1 ~0.19987699999999997E1 +(~0.11125369292536007E~307, 0.17976931348623157E309, ~0.123E4): ~0.1232E4 ~0.1232E4 +(~0.11125369292536007E~307, 0.17976931348623157E309, ~0.123E2): ~0.143E2 ~0.143E2 +(~0.11125369292536007E~307, 0.17976931348623157E309, ~0.3141592653589793E1): ~0.5141592653589793E1 ~0.5141592653589793E1 +(~0.11125369292536007E~307, 0.17976931348623157E309, ~0.2718281828459045E1): ~0.4718281828459045E1 ~0.4718281828459045E1 +(~0.11125369292536007E~307, 0.17976931348623157E309, ~0.123E1): ~0.32299999999999995E1 ~0.32299999999999995E1 +(~0.11125369292536007E~307, 0.17976931348623157E309, ~0.123E~2): ~0.20012299999999996E1 ~0.20012299999999996E1 +(~0.11125369292536007E~307, 0.8988465674311579E308, 0.123E4): 0.1229E4 0.1229E4 +(~0.11125369292536007E~307, 0.8988465674311579E308, 0.123E2): 0.113E2 0.113E2 +(~0.11125369292536007E~307, 0.8988465674311579E308, 0.3141592653589793E1): 0.2141592653589793E1 0.2141592653589793E1 +(~0.11125369292536007E~307, 0.8988465674311579E308, 0.2718281828459045E1): 0.1718281828459045E1 0.1718281828459045E1 +(~0.11125369292536007E~307, 0.8988465674311579E308, 0.123E~2): ~0.9987699999999999 ~0.9987699999999999 +(~0.11125369292536007E~307, 0.8988465674311579E308, ~0.123E4): ~0.1231E4 ~0.1231E4 +(~0.11125369292536007E~307, 0.8988465674311579E308, ~0.123E2): ~0.133E2 ~0.133E2 +(~0.11125369292536007E~307, 0.8988465674311579E308, ~0.3141592653589793E1): ~0.4141592653589793E1 ~0.4141592653589793E1 +(~0.11125369292536007E~307, 0.8988465674311579E308, ~0.2718281828459045E1): ~0.3718281828459045E1 ~0.3718281828459045E1 +(~0.11125369292536007E~307, 0.8988465674311579E308, ~0.123E1): ~0.223E1 ~0.223E1 +(~0.11125369292536007E~307, 0.8988465674311579E308, ~0.123): ~0.11229999999999998E1 ~0.11229999999999998E1 +(~0.11125369292536007E~307, 0.8988465674311579E308, ~0.123E~2): ~0.10012299999999998E1 ~0.10012299999999998E1 +(~0.11125369292536007E~307, 0.123E4, 0.5E~323): ~0.13684204229819289E~304 ~0.13684204229819289E~304 +(~0.11125369292536007E~307, 0.123E4, ~0.5E~323): ~0.13684204229819289E~304 ~0.13684204229819289E~304 +(~0.11125369292536007E~307, 0.123E2, 0.5E~323): ~0.1368420422981929E~306 ~0.1368420422981929E~306 +(~0.11125369292536007E~307, 0.123E2, ~0.5E~323): ~0.1368420422981929E~306 ~0.1368420422981929E~306 +(~0.11125369292536007E~307, 0.2718281828459045E1, ~0.22250738585072014E~307): ~0.524926277678689E~307 ~0.524926277678689E~307 +(~0.11125369292536007E~307, 0.123, 0.22250738585072014E~307): 0.20882318162090083E~307 0.20882318162090083E~307 +(~0.11125369292536007E~307, 0.123, 0.11125369292536007E~307): 0.9756948869554076E~308 0.9756948869554076E~308 +(~0.11125369292536007E~307, 0.123, 0.5E~323): ~0.136842042298192E~308 ~0.136842042298192E~308 +(~0.11125369292536007E~307, 0.123, 0.0): ~0.136842042298193E~308 ~0.136842042298193E~308 +(~0.11125369292536007E~307, 0.123, ~0.22250738585072014E~307): ~0.23619159008053945E~307 ~0.23619159008053945E~307 +(~0.11125369292536007E~307, 0.123, ~0.11125369292536007E~307): ~0.1249378971551794E~307 ~0.1249378971551794E~307 +(~0.11125369292536007E~307, 0.123, ~0.5E~323): ~0.136842042298193E~308 ~0.136842042298193E~308 +(~0.11125369292536007E~307, 0.123, ~0.0): ~0.136842042298193E~308 ~0.136842042298193E~308 +(~0.11125369292536007E~307, 0.123E~2, 0.22250738585072014E~307): 0.22237054380842194E~307 0.22237054380842194E~307 +(~0.11125369292536007E~307, 0.123E~2, 0.11125369292536007E~307): 0.11111685088306187E~307 0.11111685088306187E~307 +(~0.11125369292536007E~307, 0.123E~2, 0.5E~323): ~0.13684204229815E~310 ~0.13684204229815E~310 +(~0.11125369292536007E~307, 0.123E~2, 0.0): ~0.1368420422982E~310 ~0.1368420422982E~310 +(~0.11125369292536007E~307, 0.123E~2, ~0.22250738585072014E~307): ~0.22264422789301834E~307 ~0.22264422789301834E~307 +(~0.11125369292536007E~307, 0.123E~2, ~0.11125369292536007E~307): ~0.11139053496765827E~307 ~0.11139053496765827E~307 +(~0.11125369292536007E~307, 0.123E~2, ~0.5E~323): ~0.13684204229825E~310 ~0.13684204229825E~310 +(~0.11125369292536007E~307, 0.123E~2, ~0.0): ~0.1368420422982E~310 ~0.1368420422982E~310 +(~0.11125369292536007E~307, 0.22250738585072014E~307, 0.0): ~0.0 ~0.0 +(~0.11125369292536007E~307, 0.22250738585072014E~307, ~0.0): ~0.0 ~0.0 +(~0.11125369292536007E~307, 0.11125369292536007E~307, 0.0): ~0.0 ~0.0 +(~0.11125369292536007E~307, 0.11125369292536007E~307, ~0.0): ~0.0 ~0.0 +(~0.11125369292536007E~307, 0.5E~323, 0.0): ~0.0 ~0.0 +(~0.11125369292536007E~307, 0.5E~323, ~0.0): ~0.0 ~0.0 +(~0.11125369292536007E~307, ~0.17976931348623157E309, 0.123E4): 0.1232E4 0.1232E4 +(~0.11125369292536007E~307, ~0.17976931348623157E309, 0.123E2): 0.143E2 0.143E2 +(~0.11125369292536007E~307, ~0.17976931348623157E309, 0.3141592653589793E1): 0.5141592653589793E1 0.5141592653589793E1 +(~0.11125369292536007E~307, ~0.17976931348623157E309, 0.2718281828459045E1): 0.4718281828459045E1 0.4718281828459045E1 +(~0.11125369292536007E~307, ~0.17976931348623157E309, 0.123E1): 0.32299999999999995E1 0.32299999999999995E1 +(~0.11125369292536007E~307, ~0.17976931348623157E309, 0.123E~2): 0.20012299999999996E1 0.20012299999999996E1 +(~0.11125369292536007E~307, ~0.17976931348623157E309, ~0.123E4): ~0.1228E4 ~0.1228E4 +(~0.11125369292536007E~307, ~0.17976931348623157E309, ~0.123E2): ~0.103E2 ~0.103E2 +(~0.11125369292536007E~307, ~0.17976931348623157E309, ~0.123E~2): 0.19987699999999997E1 0.19987699999999997E1 +(~0.11125369292536007E~307, ~0.8988465674311579E308, 0.123E4): 0.1231E4 0.1231E4 +(~0.11125369292536007E~307, ~0.8988465674311579E308, 0.123E2): 0.133E2 0.133E2 +(~0.11125369292536007E~307, ~0.8988465674311579E308, 0.3141592653589793E1): 0.4141592653589793E1 0.4141592653589793E1 +(~0.11125369292536007E~307, ~0.8988465674311579E308, 0.2718281828459045E1): 0.3718281828459045E1 0.3718281828459045E1 +(~0.11125369292536007E~307, ~0.8988465674311579E308, 0.123E1): 0.223E1 0.223E1 +(~0.11125369292536007E~307, ~0.8988465674311579E308, 0.123): 0.11229999999999998E1 0.11229999999999998E1 +(~0.11125369292536007E~307, ~0.8988465674311579E308, 0.123E~2): 0.10012299999999998E1 0.10012299999999998E1 +(~0.11125369292536007E~307, ~0.8988465674311579E308, ~0.123E4): ~0.1229E4 ~0.1229E4 +(~0.11125369292536007E~307, ~0.8988465674311579E308, ~0.123E2): ~0.113E2 ~0.113E2 +(~0.11125369292536007E~307, ~0.8988465674311579E308, ~0.3141592653589793E1): ~0.2141592653589793E1 ~0.2141592653589793E1 +(~0.11125369292536007E~307, ~0.8988465674311579E308, ~0.2718281828459045E1): ~0.1718281828459045E1 ~0.1718281828459045E1 +(~0.11125369292536007E~307, ~0.8988465674311579E308, ~0.123E~2): 0.9987699999999999 0.9987699999999999 +(~0.11125369292536007E~307, ~0.123E4, 0.5E~323): 0.13684204229819289E~304 0.13684204229819289E~304 +(~0.11125369292536007E~307, ~0.123E4, ~0.5E~323): 0.13684204229819289E~304 0.13684204229819289E~304 +(~0.11125369292536007E~307, ~0.123E2, 0.5E~323): 0.1368420422981929E~306 0.1368420422981929E~306 +(~0.11125369292536007E~307, ~0.123E2, ~0.5E~323): 0.1368420422981929E~306 0.1368420422981929E~306 +(~0.11125369292536007E~307, ~0.2718281828459045E1, 0.22250738585072014E~307): 0.524926277678689E~307 0.524926277678689E~307 +(~0.11125369292536007E~307, ~0.123, 0.22250738585072014E~307): 0.23619159008053945E~307 0.23619159008053945E~307 +(~0.11125369292536007E~307, ~0.123, 0.11125369292536007E~307): 0.1249378971551794E~307 0.1249378971551794E~307 +(~0.11125369292536007E~307, ~0.123, 0.5E~323): 0.136842042298193E~308 0.136842042298193E~308 +(~0.11125369292536007E~307, ~0.123, 0.0): 0.136842042298193E~308 0.136842042298193E~308 +(~0.11125369292536007E~307, ~0.123, ~0.22250738585072014E~307): ~0.20882318162090083E~307 ~0.20882318162090083E~307 +(~0.11125369292536007E~307, ~0.123, ~0.11125369292536007E~307): ~0.9756948869554076E~308 ~0.9756948869554076E~308 +(~0.11125369292536007E~307, ~0.123, ~0.5E~323): 0.136842042298192E~308 0.136842042298192E~308 +(~0.11125369292536007E~307, ~0.123, ~0.0): 0.136842042298193E~308 0.136842042298193E~308 +(~0.11125369292536007E~307, ~0.123E~2, 0.22250738585072014E~307): 0.22264422789301834E~307 0.22264422789301834E~307 +(~0.11125369292536007E~307, ~0.123E~2, 0.11125369292536007E~307): 0.11139053496765827E~307 0.11139053496765827E~307 +(~0.11125369292536007E~307, ~0.123E~2, 0.5E~323): 0.13684204229825E~310 0.13684204229825E~310 +(~0.11125369292536007E~307, ~0.123E~2, 0.0): 0.1368420422982E~310 0.1368420422982E~310 +(~0.11125369292536007E~307, ~0.123E~2, ~0.22250738585072014E~307): ~0.22237054380842194E~307 ~0.22237054380842194E~307 +(~0.11125369292536007E~307, ~0.123E~2, ~0.11125369292536007E~307): ~0.11111685088306187E~307 ~0.11111685088306187E~307 +(~0.11125369292536007E~307, ~0.123E~2, ~0.5E~323): 0.13684204229815E~310 0.13684204229815E~310 +(~0.11125369292536007E~307, ~0.123E~2, ~0.0): 0.1368420422982E~310 0.1368420422982E~310 +(~0.11125369292536007E~307, ~0.22250738585072014E~307, 0.0): 0.0 0.0 +(~0.11125369292536007E~307, ~0.22250738585072014E~307, ~0.0): 0.0 0.0 +(~0.11125369292536007E~307, ~0.11125369292536007E~307, 0.0): 0.0 0.0 +(~0.11125369292536007E~307, ~0.11125369292536007E~307, ~0.0): 0.0 0.0 +(~0.11125369292536007E~307, ~0.5E~323, 0.0): 0.0 0.0 +(~0.11125369292536007E~307, ~0.5E~323, ~0.0): 0.0 0.0 +(~0.5E~323, 0.17976931348623157E309, 0.123E4): 0.123E4 0.123E4 +(~0.5E~323, 0.17976931348623157E309, 0.123E2): 0.123E2 0.123E2 +(~0.5E~323, 0.17976931348623157E309, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.5E~323, 0.17976931348623157E309, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.5E~323, 0.8988465674311579E308, 0.123E4): 0.123E4 0.123E4 +(~0.5E~323, 0.8988465674311579E308, 0.123E2): 0.123E2 0.123E2 +(~0.5E~323, 0.8988465674311579E308, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.5E~323, 0.8988465674311579E308, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.5E~323, 0.123E2, 0.22250738585072014E~307): 0.22250738585071955E~307 0.22250738585071955E~307 +(~0.5E~323, 0.123E2, 0.11125369292536007E~307): 0.1112536929253595E~307 0.1112536929253595E~307 +(~0.5E~323, 0.123E2, 0.5E~323): ~0.54E~322 ~0.54E~322 +(~0.5E~323, 0.123E2, 0.0): ~0.6E~322 ~0.6E~322 +(~0.5E~323, 0.123E2, ~0.22250738585072014E~307): ~0.22250738585072073E~307 ~0.22250738585072073E~307 +(~0.5E~323, 0.123E2, ~0.11125369292536007E~307): ~0.11125369292536066E~307 ~0.11125369292536066E~307 +(~0.5E~323, 0.123E2, ~0.5E~323): ~0.64E~322 ~0.64E~322 +(~0.5E~323, 0.123E2, ~0.0): ~0.6E~322 ~0.6E~322 +(~0.5E~323, 0.3141592653589793E1, 0.22250738585072014E~307): 0.22250738585072E~307 0.22250738585072E~307 +(~0.5E~323, 0.3141592653589793E1, 0.11125369292536007E~307): 0.1112536929253599E~307 0.1112536929253599E~307 +(~0.5E~323, 0.3141592653589793E1, 0.5E~323): ~0.1E~322 ~0.1E~322 +(~0.5E~323, 0.3141592653589793E1, 0.0): ~0.15E~322 ~0.15E~322 +(~0.5E~323, 0.3141592653589793E1, ~0.22250738585072014E~307): ~0.2225073858507203E~307 ~0.2225073858507203E~307 +(~0.5E~323, 0.3141592653589793E1, ~0.11125369292536007E~307): ~0.1112536929253602E~307 ~0.1112536929253602E~307 +(~0.5E~323, 0.3141592653589793E1, ~0.5E~323): ~0.2E~322 ~0.2E~322 +(~0.5E~323, 0.3141592653589793E1, ~0.0): ~0.15E~322 ~0.15E~322 +(~0.5E~323, 0.2718281828459045E1, 0.22250738585072014E~307): 0.22250738585072E~307 0.22250738585072E~307 +(~0.5E~323, 0.2718281828459045E1, 0.11125369292536007E~307): 0.1112536929253599E~307 0.1112536929253599E~307 +(~0.5E~323, 0.2718281828459045E1, 0.5E~323): ~0.1E~322 ~0.1E~322 +(~0.5E~323, 0.2718281828459045E1, 0.0): ~0.15E~322 ~0.15E~322 +(~0.5E~323, 0.2718281828459045E1, ~0.22250738585072014E~307): ~0.2225073858507203E~307 ~0.2225073858507203E~307 +(~0.5E~323, 0.2718281828459045E1, ~0.11125369292536007E~307): ~0.1112536929253602E~307 ~0.1112536929253602E~307 +(~0.5E~323, 0.2718281828459045E1, ~0.5E~323): ~0.2E~322 ~0.2E~322 +(~0.5E~323, 0.2718281828459045E1, ~0.0): ~0.15E~322 ~0.15E~322 +(~0.5E~323, 0.123E1, 0.22250738585072014E~307): 0.2225073858507201E~307 0.2225073858507201E~307 +(~0.5E~323, 0.123E1, 0.11125369292536007E~307): 0.11125369292536E~307 0.11125369292536E~307 +(~0.5E~323, 0.123E1, 0.5E~323): ~0.0 ~0.0 +(~0.5E~323, 0.123E1, 0.0): ~0.5E~323 ~0.5E~323 +(~0.5E~323, 0.123E1, ~0.22250738585072014E~307): ~0.2225073858507202E~307 ~0.2225073858507202E~307 +(~0.5E~323, 0.123E1, ~0.11125369292536007E~307): ~0.1112536929253601E~307 ~0.1112536929253601E~307 +(~0.5E~323, 0.123E1, ~0.5E~323): ~0.1E~322 ~0.1E~322 +(~0.5E~323, 0.123E1, ~0.0): ~0.5E~323 ~0.5E~323 +(~0.5E~323, 0.123, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(~0.5E~323, 0.123, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(~0.5E~323, 0.123, 0.5E~323): 0.5E~323 0.5E~323 +(~0.5E~323, 0.123, 0.0): ~0.0 ~0.0 +(~0.5E~323, 0.123, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(~0.5E~323, 0.123, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(~0.5E~323, 0.123, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(~0.5E~323, 0.123, ~0.0): ~0.0 ~0.0 +(~0.5E~323, 0.123E~2, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(~0.5E~323, 0.123E~2, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(~0.5E~323, 0.123E~2, 0.5E~323): 0.5E~323 0.5E~323 +(~0.5E~323, 0.123E~2, 0.0): ~0.0 ~0.0 +(~0.5E~323, 0.123E~2, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(~0.5E~323, 0.123E~2, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(~0.5E~323, 0.123E~2, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(~0.5E~323, 0.123E~2, ~0.0): ~0.0 ~0.0 +(~0.5E~323, 0.22250738585072014E~307, 0.0): ~0.0 ~0.0 +(~0.5E~323, 0.22250738585072014E~307, ~0.0): ~0.0 ~0.0 +(~0.5E~323, 0.11125369292536007E~307, 0.0): ~0.0 ~0.0 +(~0.5E~323, 0.11125369292536007E~307, ~0.0): ~0.0 ~0.0 +(~0.5E~323, 0.5E~323, 0.0): ~0.0 ~0.0 +(~0.5E~323, 0.5E~323, ~0.0): ~0.0 ~0.0 +(~0.5E~323, ~0.17976931348623157E309, 0.123E4): 0.123E4 0.123E4 +(~0.5E~323, ~0.17976931348623157E309, 0.123E2): 0.123E2 0.123E2 +(~0.5E~323, ~0.17976931348623157E309, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.5E~323, ~0.17976931348623157E309, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.5E~323, ~0.8988465674311579E308, 0.123E4): 0.123E4 0.123E4 +(~0.5E~323, ~0.8988465674311579E308, 0.123E2): 0.123E2 0.123E2 +(~0.5E~323, ~0.8988465674311579E308, ~0.123E4): ~0.123E4 ~0.123E4 +(~0.5E~323, ~0.8988465674311579E308, ~0.123E2): ~0.123E2 ~0.123E2 +(~0.5E~323, ~0.123E2, 0.22250738585072014E~307): 0.22250738585072073E~307 0.22250738585072073E~307 +(~0.5E~323, ~0.123E2, 0.11125369292536007E~307): 0.11125369292536066E~307 0.11125369292536066E~307 +(~0.5E~323, ~0.123E2, 0.5E~323): 0.64E~322 0.64E~322 +(~0.5E~323, ~0.123E2, 0.0): 0.6E~322 0.6E~322 +(~0.5E~323, ~0.123E2, ~0.22250738585072014E~307): ~0.22250738585071955E~307 ~0.22250738585071955E~307 +(~0.5E~323, ~0.123E2, ~0.11125369292536007E~307): ~0.1112536929253595E~307 ~0.1112536929253595E~307 +(~0.5E~323, ~0.123E2, ~0.5E~323): 0.54E~322 0.54E~322 +(~0.5E~323, ~0.123E2, ~0.0): 0.6E~322 0.6E~322 +(~0.5E~323, ~0.3141592653589793E1, 0.22250738585072014E~307): 0.2225073858507203E~307 0.2225073858507203E~307 +(~0.5E~323, ~0.3141592653589793E1, 0.11125369292536007E~307): 0.1112536929253602E~307 0.1112536929253602E~307 +(~0.5E~323, ~0.3141592653589793E1, 0.5E~323): 0.2E~322 0.2E~322 +(~0.5E~323, ~0.3141592653589793E1, 0.0): 0.15E~322 0.15E~322 +(~0.5E~323, ~0.3141592653589793E1, ~0.22250738585072014E~307): ~0.22250738585072E~307 ~0.22250738585072E~307 +(~0.5E~323, ~0.3141592653589793E1, ~0.11125369292536007E~307): ~0.1112536929253599E~307 ~0.1112536929253599E~307 +(~0.5E~323, ~0.3141592653589793E1, ~0.5E~323): 0.1E~322 0.1E~322 +(~0.5E~323, ~0.3141592653589793E1, ~0.0): 0.15E~322 0.15E~322 +(~0.5E~323, ~0.2718281828459045E1, 0.22250738585072014E~307): 0.2225073858507203E~307 0.2225073858507203E~307 +(~0.5E~323, ~0.2718281828459045E1, 0.11125369292536007E~307): 0.1112536929253602E~307 0.1112536929253602E~307 +(~0.5E~323, ~0.2718281828459045E1, 0.5E~323): 0.2E~322 0.2E~322 +(~0.5E~323, ~0.2718281828459045E1, 0.0): 0.15E~322 0.15E~322 +(~0.5E~323, ~0.2718281828459045E1, ~0.22250738585072014E~307): ~0.22250738585072E~307 ~0.22250738585072E~307 +(~0.5E~323, ~0.2718281828459045E1, ~0.11125369292536007E~307): ~0.1112536929253599E~307 ~0.1112536929253599E~307 +(~0.5E~323, ~0.2718281828459045E1, ~0.5E~323): 0.1E~322 0.1E~322 +(~0.5E~323, ~0.2718281828459045E1, ~0.0): 0.15E~322 0.15E~322 +(~0.5E~323, ~0.123E1, 0.22250738585072014E~307): 0.2225073858507202E~307 0.2225073858507202E~307 +(~0.5E~323, ~0.123E1, 0.11125369292536007E~307): 0.1112536929253601E~307 0.1112536929253601E~307 +(~0.5E~323, ~0.123E1, 0.5E~323): 0.1E~322 0.1E~322 +(~0.5E~323, ~0.123E1, 0.0): 0.5E~323 0.5E~323 +(~0.5E~323, ~0.123E1, ~0.22250738585072014E~307): ~0.2225073858507201E~307 ~0.2225073858507201E~307 +(~0.5E~323, ~0.123E1, ~0.11125369292536007E~307): ~0.11125369292536E~307 ~0.11125369292536E~307 +(~0.5E~323, ~0.123E1, ~0.5E~323): 0.0 0.0 +(~0.5E~323, ~0.123E1, ~0.0): 0.5E~323 0.5E~323 +(~0.5E~323, ~0.123, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(~0.5E~323, ~0.123, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(~0.5E~323, ~0.123, 0.5E~323): 0.5E~323 0.5E~323 +(~0.5E~323, ~0.123, 0.0): 0.0 0.0 +(~0.5E~323, ~0.123, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(~0.5E~323, ~0.123, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(~0.5E~323, ~0.123, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(~0.5E~323, ~0.123, ~0.0): 0.0 0.0 +(~0.5E~323, ~0.123E~2, 0.22250738585072014E~307): 0.22250738585072014E~307 0.22250738585072014E~307 +(~0.5E~323, ~0.123E~2, 0.11125369292536007E~307): 0.11125369292536007E~307 0.11125369292536007E~307 +(~0.5E~323, ~0.123E~2, 0.5E~323): 0.5E~323 0.5E~323 +(~0.5E~323, ~0.123E~2, 0.0): 0.0 0.0 +(~0.5E~323, ~0.123E~2, ~0.22250738585072014E~307): ~0.22250738585072014E~307 ~0.22250738585072014E~307 +(~0.5E~323, ~0.123E~2, ~0.11125369292536007E~307): ~0.11125369292536007E~307 ~0.11125369292536007E~307 +(~0.5E~323, ~0.123E~2, ~0.5E~323): ~0.5E~323 ~0.5E~323 +(~0.5E~323, ~0.123E~2, ~0.0): 0.0 0.0 +(~0.5E~323, ~0.22250738585072014E~307, 0.0): 0.0 0.0 +(~0.5E~323, ~0.22250738585072014E~307, ~0.0): 0.0 0.0 +(~0.5E~323, ~0.11125369292536007E~307, 0.0): 0.0 0.0 +(~0.5E~323, ~0.11125369292536007E~307, ~0.0): 0.0 0.0 +(~0.5E~323, ~0.5E~323, 0.0): 0.0 0.0 +(~0.5E~323, ~0.5E~323, ~0.0): 0.0 0.0 + +Testing Real.{realCeil,realFloor,realTrunc} +0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 0.17976931348623157E309 +0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 0.8988465674311579E308 +0.123E4 0.123E4 0.123E4 0.123E4 +0.123E2 0.13E2 0.12E2 0.12E2 +0.3141592653589793E1 0.4E1 0.3E1 0.3E1 +0.2718281828459045E1 0.3E1 0.2E1 0.2E1 +0.123E1 0.2E1 0.1E1 0.1E1 +0.123 0.1E1 0.0 0.0 +0.123E~2 0.1E1 0.0 0.0 +0.22250738585072014E~307 0.1E1 0.0 0.0 +0.11125369292536007E~307 0.1E1 0.0 0.0 +0.5E~323 0.1E1 0.0 0.0 +0.0 0.0 0.0 0.0 +~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 ~0.17976931348623157E309 +~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 ~0.8988465674311579E308 +~0.123E4 ~0.123E4 ~0.123E4 ~0.123E4 +~0.123E2 ~0.12E2 ~0.13E2 ~0.12E2 +~0.3141592653589793E1 ~0.3E1 ~0.4E1 ~0.3E1 +~0.2718281828459045E1 ~0.2E1 ~0.3E1 ~0.2E1 +~0.123E1 ~0.1E1 ~0.2E1 ~0.1E1 +~0.123 ~0.0 ~0.1E1 ~0.0 +~0.123E~2 ~0.0 ~0.1E1 ~0.0 +~0.22250738585072014E~307 ~0.0 ~0.1E1 ~0.0 +~0.11125369292536007E~307 ~0.0 ~0.1E1 ~0.0 +~0.5E~323 ~0.0 ~0.1E1 ~0.0 +~0.0 ~0.0 ~0.0 ~0.0 + +Testing Real.{<,<=,>,>=,==,!=,?=,unordered} +< (0.17976931348623157E309, 0.17976931348623157E309) = false +> (0.17976931348623157E309, 0.17976931348623157E309) = false +== (0.17976931348623157E309, 0.17976931348623157E309) = true +?= (0.17976931348623157E309, 0.17976931348623157E309) = true +< (0.17976931348623157E309, 0.8988465674311579E308) = false +> (0.17976931348623157E309, 0.8988465674311579E308) = true +== (0.17976931348623157E309, 0.8988465674311579E308) = false +?= (0.17976931348623157E309, 0.8988465674311579E308) = false +< (0.17976931348623157E309, 0.123E4) = false +> (0.17976931348623157E309, 0.123E4) = true +== (0.17976931348623157E309, 0.123E4) = false +?= (0.17976931348623157E309, 0.123E4) = false +< (0.17976931348623157E309, 0.123E2) = false +> (0.17976931348623157E309, 0.123E2) = true +== (0.17976931348623157E309, 0.123E2) = false +?= (0.17976931348623157E309, 0.123E2) = false +< (0.17976931348623157E309, 0.3141592653589793E1) = false +> (0.17976931348623157E309, 0.3141592653589793E1) = true +== (0.17976931348623157E309, 0.3141592653589793E1) = false +?= (0.17976931348623157E309, 0.3141592653589793E1) = false +< (0.17976931348623157E309, 0.2718281828459045E1) = false +> (0.17976931348623157E309, 0.2718281828459045E1) = true +== (0.17976931348623157E309, 0.2718281828459045E1) = false +?= (0.17976931348623157E309, 0.2718281828459045E1) = false +< (0.17976931348623157E309, 0.123E1) = false +> (0.17976931348623157E309, 0.123E1) = true +== (0.17976931348623157E309, 0.123E1) = false +?= (0.17976931348623157E309, 0.123E1) = false +< (0.17976931348623157E309, 0.123) = false +> (0.17976931348623157E309, 0.123) = true +== (0.17976931348623157E309, 0.123) = false +?= (0.17976931348623157E309, 0.123) = false +< (0.17976931348623157E309, 0.123E~2) = false +> (0.17976931348623157E309, 0.123E~2) = true +== (0.17976931348623157E309, 0.123E~2) = false +?= (0.17976931348623157E309, 0.123E~2) = false +< (0.17976931348623157E309, 0.22250738585072014E~307) = false +> (0.17976931348623157E309, 0.22250738585072014E~307) = true +== (0.17976931348623157E309, 0.22250738585072014E~307) = false +?= (0.17976931348623157E309, 0.22250738585072014E~307) = false +< (0.17976931348623157E309, 0.11125369292536007E~307) = false +> (0.17976931348623157E309, 0.11125369292536007E~307) = true +== (0.17976931348623157E309, 0.11125369292536007E~307) = false +?= (0.17976931348623157E309, 0.11125369292536007E~307) = false +< (0.17976931348623157E309, 0.5E~323) = false +> (0.17976931348623157E309, 0.5E~323) = true +== (0.17976931348623157E309, 0.5E~323) = false +?= (0.17976931348623157E309, 0.5E~323) = false +< (0.17976931348623157E309, 0.0) = false +> (0.17976931348623157E309, 0.0) = true +== (0.17976931348623157E309, 0.0) = false +?= (0.17976931348623157E309, 0.0) = false +< (0.17976931348623157E309, ~0.17976931348623157E309) = false +> (0.17976931348623157E309, ~0.17976931348623157E309) = true +== (0.17976931348623157E309, ~0.17976931348623157E309) = false +?= (0.17976931348623157E309, ~0.17976931348623157E309) = false +< (0.17976931348623157E309, ~0.8988465674311579E308) = false +> (0.17976931348623157E309, ~0.8988465674311579E308) = true +== (0.17976931348623157E309, ~0.8988465674311579E308) = false +?= (0.17976931348623157E309, ~0.8988465674311579E308) = false +< (0.17976931348623157E309, ~0.123E4) = false +> (0.17976931348623157E309, ~0.123E4) = true +== (0.17976931348623157E309, ~0.123E4) = false +?= (0.17976931348623157E309, ~0.123E4) = false +< (0.17976931348623157E309, ~0.123E2) = false +> (0.17976931348623157E309, ~0.123E2) = true +== (0.17976931348623157E309, ~0.123E2) = false +?= (0.17976931348623157E309, ~0.123E2) = false +< (0.17976931348623157E309, ~0.3141592653589793E1) = false +> (0.17976931348623157E309, ~0.3141592653589793E1) = true +== (0.17976931348623157E309, ~0.3141592653589793E1) = false +?= (0.17976931348623157E309, ~0.3141592653589793E1) = false +< (0.17976931348623157E309, ~0.2718281828459045E1) = false +> (0.17976931348623157E309, ~0.2718281828459045E1) = true +== (0.17976931348623157E309, ~0.2718281828459045E1) = false +?= (0.17976931348623157E309, ~0.2718281828459045E1) = false +< (0.17976931348623157E309, ~0.123E1) = false +> (0.17976931348623157E309, ~0.123E1) = true +== (0.17976931348623157E309, ~0.123E1) = false +?= (0.17976931348623157E309, ~0.123E1) = false +< (0.17976931348623157E309, ~0.123) = false +> (0.17976931348623157E309, ~0.123) = true +== (0.17976931348623157E309, ~0.123) = false +?= (0.17976931348623157E309, ~0.123) = false +< (0.17976931348623157E309, ~0.123E~2) = false +> (0.17976931348623157E309, ~0.123E~2) = true +== (0.17976931348623157E309, ~0.123E~2) = false +?= (0.17976931348623157E309, ~0.123E~2) = false +< (0.17976931348623157E309, ~0.22250738585072014E~307) = false +> (0.17976931348623157E309, ~0.22250738585072014E~307) = true +== (0.17976931348623157E309, ~0.22250738585072014E~307) = false +?= (0.17976931348623157E309, ~0.22250738585072014E~307) = false +< (0.17976931348623157E309, ~0.11125369292536007E~307) = false +> (0.17976931348623157E309, ~0.11125369292536007E~307) = true +== (0.17976931348623157E309, ~0.11125369292536007E~307) = false +?= (0.17976931348623157E309, ~0.11125369292536007E~307) = false +< (0.17976931348623157E309, ~0.5E~323) = false +> (0.17976931348623157E309, ~0.5E~323) = true +== (0.17976931348623157E309, ~0.5E~323) = false +?= (0.17976931348623157E309, ~0.5E~323) = false +< (0.17976931348623157E309, ~0.0) = false +> (0.17976931348623157E309, ~0.0) = true +== (0.17976931348623157E309, ~0.0) = false +?= (0.17976931348623157E309, ~0.0) = false +< (0.8988465674311579E308, 0.17976931348623157E309) = true +> (0.8988465674311579E308, 0.17976931348623157E309) = false +== (0.8988465674311579E308, 0.17976931348623157E309) = false +?= (0.8988465674311579E308, 0.17976931348623157E309) = false +< (0.8988465674311579E308, 0.8988465674311579E308) = false +> (0.8988465674311579E308, 0.8988465674311579E308) = false +== (0.8988465674311579E308, 0.8988465674311579E308) = true +?= (0.8988465674311579E308, 0.8988465674311579E308) = true +< (0.8988465674311579E308, 0.123E4) = false +> (0.8988465674311579E308, 0.123E4) = true +== (0.8988465674311579E308, 0.123E4) = false +?= (0.8988465674311579E308, 0.123E4) = false +< (0.8988465674311579E308, 0.123E2) = false +> (0.8988465674311579E308, 0.123E2) = true +== (0.8988465674311579E308, 0.123E2) = false +?= (0.8988465674311579E308, 0.123E2) = false +< (0.8988465674311579E308, 0.3141592653589793E1) = false +> (0.8988465674311579E308, 0.3141592653589793E1) = true +== (0.8988465674311579E308, 0.3141592653589793E1) = false +?= (0.8988465674311579E308, 0.3141592653589793E1) = false +< (0.8988465674311579E308, 0.2718281828459045E1) = false +> (0.8988465674311579E308, 0.2718281828459045E1) = true +== (0.8988465674311579E308, 0.2718281828459045E1) = false +?= (0.8988465674311579E308, 0.2718281828459045E1) = false +< (0.8988465674311579E308, 0.123E1) = false +> (0.8988465674311579E308, 0.123E1) = true +== (0.8988465674311579E308, 0.123E1) = false +?= (0.8988465674311579E308, 0.123E1) = false +< (0.8988465674311579E308, 0.123) = false +> (0.8988465674311579E308, 0.123) = true +== (0.8988465674311579E308, 0.123) = false +?= (0.8988465674311579E308, 0.123) = false +< (0.8988465674311579E308, 0.123E~2) = false +> (0.8988465674311579E308, 0.123E~2) = true +== (0.8988465674311579E308, 0.123E~2) = false +?= (0.8988465674311579E308, 0.123E~2) = false +< (0.8988465674311579E308, 0.22250738585072014E~307) = false +> (0.8988465674311579E308, 0.22250738585072014E~307) = true +== (0.8988465674311579E308, 0.22250738585072014E~307) = false +?= (0.8988465674311579E308, 0.22250738585072014E~307) = false +< (0.8988465674311579E308, 0.11125369292536007E~307) = false +> (0.8988465674311579E308, 0.11125369292536007E~307) = true +== (0.8988465674311579E308, 0.11125369292536007E~307) = false +?= (0.8988465674311579E308, 0.11125369292536007E~307) = false +< (0.8988465674311579E308, 0.5E~323) = false +> (0.8988465674311579E308, 0.5E~323) = true +== (0.8988465674311579E308, 0.5E~323) = false +?= (0.8988465674311579E308, 0.5E~323) = false +< (0.8988465674311579E308, 0.0) = false +> (0.8988465674311579E308, 0.0) = true +== (0.8988465674311579E308, 0.0) = false +?= (0.8988465674311579E308, 0.0) = false +< (0.8988465674311579E308, ~0.17976931348623157E309) = false +> (0.8988465674311579E308, ~0.17976931348623157E309) = true +== (0.8988465674311579E308, ~0.17976931348623157E309) = false +?= (0.8988465674311579E308, ~0.17976931348623157E309) = false +< (0.8988465674311579E308, ~0.8988465674311579E308) = false +> (0.8988465674311579E308, ~0.8988465674311579E308) = true +== (0.8988465674311579E308, ~0.8988465674311579E308) = false +?= (0.8988465674311579E308, ~0.8988465674311579E308) = false +< (0.8988465674311579E308, ~0.123E4) = false +> (0.8988465674311579E308, ~0.123E4) = true +== (0.8988465674311579E308, ~0.123E4) = false +?= (0.8988465674311579E308, ~0.123E4) = false +< (0.8988465674311579E308, ~0.123E2) = false +> (0.8988465674311579E308, ~0.123E2) = true +== (0.8988465674311579E308, ~0.123E2) = false +?= (0.8988465674311579E308, ~0.123E2) = false +< (0.8988465674311579E308, ~0.3141592653589793E1) = false +> (0.8988465674311579E308, ~0.3141592653589793E1) = true +== (0.8988465674311579E308, ~0.3141592653589793E1) = false +?= (0.8988465674311579E308, ~0.3141592653589793E1) = false +< (0.8988465674311579E308, ~0.2718281828459045E1) = false +> (0.8988465674311579E308, ~0.2718281828459045E1) = true +== (0.8988465674311579E308, ~0.2718281828459045E1) = false +?= (0.8988465674311579E308, ~0.2718281828459045E1) = false +< (0.8988465674311579E308, ~0.123E1) = false +> (0.8988465674311579E308, ~0.123E1) = true +== (0.8988465674311579E308, ~0.123E1) = false +?= (0.8988465674311579E308, ~0.123E1) = false +< (0.8988465674311579E308, ~0.123) = false +> (0.8988465674311579E308, ~0.123) = true +== (0.8988465674311579E308, ~0.123) = false +?= (0.8988465674311579E308, ~0.123) = false +< (0.8988465674311579E308, ~0.123E~2) = false +> (0.8988465674311579E308, ~0.123E~2) = true +== (0.8988465674311579E308, ~0.123E~2) = false +?= (0.8988465674311579E308, ~0.123E~2) = false +< (0.8988465674311579E308, ~0.22250738585072014E~307) = false +> (0.8988465674311579E308, ~0.22250738585072014E~307) = true +== (0.8988465674311579E308, ~0.22250738585072014E~307) = false +?= (0.8988465674311579E308, ~0.22250738585072014E~307) = false +< (0.8988465674311579E308, ~0.11125369292536007E~307) = false +> (0.8988465674311579E308, ~0.11125369292536007E~307) = true +== (0.8988465674311579E308, ~0.11125369292536007E~307) = false +?= (0.8988465674311579E308, ~0.11125369292536007E~307) = false +< (0.8988465674311579E308, ~0.5E~323) = false +> (0.8988465674311579E308, ~0.5E~323) = true +== (0.8988465674311579E308, ~0.5E~323) = false +?= (0.8988465674311579E308, ~0.5E~323) = false +< (0.8988465674311579E308, ~0.0) = false +> (0.8988465674311579E308, ~0.0) = true +== (0.8988465674311579E308, ~0.0) = false +?= (0.8988465674311579E308, ~0.0) = false +< (0.123E4, 0.17976931348623157E309) = true +> (0.123E4, 0.17976931348623157E309) = false +== (0.123E4, 0.17976931348623157E309) = false +?= (0.123E4, 0.17976931348623157E309) = false +< (0.123E4, 0.8988465674311579E308) = true +> (0.123E4, 0.8988465674311579E308) = false +== (0.123E4, 0.8988465674311579E308) = false +?= (0.123E4, 0.8988465674311579E308) = false +< (0.123E4, 0.123E4) = false +> (0.123E4, 0.123E4) = false +== (0.123E4, 0.123E4) = true +?= (0.123E4, 0.123E4) = true +< (0.123E4, 0.123E2) = false +> (0.123E4, 0.123E2) = true +== (0.123E4, 0.123E2) = false +?= (0.123E4, 0.123E2) = false +< (0.123E4, 0.3141592653589793E1) = false +> (0.123E4, 0.3141592653589793E1) = true +== (0.123E4, 0.3141592653589793E1) = false +?= (0.123E4, 0.3141592653589793E1) = false +< (0.123E4, 0.2718281828459045E1) = false +> (0.123E4, 0.2718281828459045E1) = true +== (0.123E4, 0.2718281828459045E1) = false +?= (0.123E4, 0.2718281828459045E1) = false +< (0.123E4, 0.123E1) = false +> (0.123E4, 0.123E1) = true +== (0.123E4, 0.123E1) = false +?= (0.123E4, 0.123E1) = false +< (0.123E4, 0.123) = false +> (0.123E4, 0.123) = true +== (0.123E4, 0.123) = false +?= (0.123E4, 0.123) = false +< (0.123E4, 0.123E~2) = false +> (0.123E4, 0.123E~2) = true +== (0.123E4, 0.123E~2) = false +?= (0.123E4, 0.123E~2) = false +< (0.123E4, 0.22250738585072014E~307) = false +> (0.123E4, 0.22250738585072014E~307) = true +== (0.123E4, 0.22250738585072014E~307) = false +?= (0.123E4, 0.22250738585072014E~307) = false +< (0.123E4, 0.11125369292536007E~307) = false +> (0.123E4, 0.11125369292536007E~307) = true +== (0.123E4, 0.11125369292536007E~307) = false +?= (0.123E4, 0.11125369292536007E~307) = false +< (0.123E4, 0.5E~323) = false +> (0.123E4, 0.5E~323) = true +== (0.123E4, 0.5E~323) = false +?= (0.123E4, 0.5E~323) = false +< (0.123E4, 0.0) = false +> (0.123E4, 0.0) = true +== (0.123E4, 0.0) = false +?= (0.123E4, 0.0) = false +< (0.123E4, ~0.17976931348623157E309) = false +> (0.123E4, ~0.17976931348623157E309) = true +== (0.123E4, ~0.17976931348623157E309) = false +?= (0.123E4, ~0.17976931348623157E309) = false +< (0.123E4, ~0.8988465674311579E308) = false +> (0.123E4, ~0.8988465674311579E308) = true +== (0.123E4, ~0.8988465674311579E308) = false +?= (0.123E4, ~0.8988465674311579E308) = false +< (0.123E4, ~0.123E4) = false +> (0.123E4, ~0.123E4) = true +== (0.123E4, ~0.123E4) = false +?= (0.123E4, ~0.123E4) = false +< (0.123E4, ~0.123E2) = false +> (0.123E4, ~0.123E2) = true +== (0.123E4, ~0.123E2) = false +?= (0.123E4, ~0.123E2) = false +< (0.123E4, ~0.3141592653589793E1) = false +> (0.123E4, ~0.3141592653589793E1) = true +== (0.123E4, ~0.3141592653589793E1) = false +?= (0.123E4, ~0.3141592653589793E1) = false +< (0.123E4, ~0.2718281828459045E1) = false +> (0.123E4, ~0.2718281828459045E1) = true +== (0.123E4, ~0.2718281828459045E1) = false +?= (0.123E4, ~0.2718281828459045E1) = false +< (0.123E4, ~0.123E1) = false +> (0.123E4, ~0.123E1) = true +== (0.123E4, ~0.123E1) = false +?= (0.123E4, ~0.123E1) = false +< (0.123E4, ~0.123) = false +> (0.123E4, ~0.123) = true +== (0.123E4, ~0.123) = false +?= (0.123E4, ~0.123) = false +< (0.123E4, ~0.123E~2) = false +> (0.123E4, ~0.123E~2) = true +== (0.123E4, ~0.123E~2) = false +?= (0.123E4, ~0.123E~2) = false +< (0.123E4, ~0.22250738585072014E~307) = false +> (0.123E4, ~0.22250738585072014E~307) = true +== (0.123E4, ~0.22250738585072014E~307) = false +?= (0.123E4, ~0.22250738585072014E~307) = false +< (0.123E4, ~0.11125369292536007E~307) = false +> (0.123E4, ~0.11125369292536007E~307) = true +== (0.123E4, ~0.11125369292536007E~307) = false +?= (0.123E4, ~0.11125369292536007E~307) = false +< (0.123E4, ~0.5E~323) = false +> (0.123E4, ~0.5E~323) = true +== (0.123E4, ~0.5E~323) = false +?= (0.123E4, ~0.5E~323) = false +< (0.123E4, ~0.0) = false +> (0.123E4, ~0.0) = true +== (0.123E4, ~0.0) = false +?= (0.123E4, ~0.0) = false +< (0.123E2, 0.17976931348623157E309) = true +> (0.123E2, 0.17976931348623157E309) = false +== (0.123E2, 0.17976931348623157E309) = false +?= (0.123E2, 0.17976931348623157E309) = false +< (0.123E2, 0.8988465674311579E308) = true +> (0.123E2, 0.8988465674311579E308) = false +== (0.123E2, 0.8988465674311579E308) = false +?= (0.123E2, 0.8988465674311579E308) = false +< (0.123E2, 0.123E4) = true +> (0.123E2, 0.123E4) = false +== (0.123E2, 0.123E4) = false +?= (0.123E2, 0.123E4) = false +< (0.123E2, 0.123E2) = false +> (0.123E2, 0.123E2) = false +== (0.123E2, 0.123E2) = true +?= (0.123E2, 0.123E2) = true +< (0.123E2, 0.3141592653589793E1) = false +> (0.123E2, 0.3141592653589793E1) = true +== (0.123E2, 0.3141592653589793E1) = false +?= (0.123E2, 0.3141592653589793E1) = false +< (0.123E2, 0.2718281828459045E1) = false +> (0.123E2, 0.2718281828459045E1) = true +== (0.123E2, 0.2718281828459045E1) = false +?= (0.123E2, 0.2718281828459045E1) = false +< (0.123E2, 0.123E1) = false +> (0.123E2, 0.123E1) = true +== (0.123E2, 0.123E1) = false +?= (0.123E2, 0.123E1) = false +< (0.123E2, 0.123) = false +> (0.123E2, 0.123) = true +== (0.123E2, 0.123) = false +?= (0.123E2, 0.123) = false +< (0.123E2, 0.123E~2) = false +> (0.123E2, 0.123E~2) = true +== (0.123E2, 0.123E~2) = false +?= (0.123E2, 0.123E~2) = false +< (0.123E2, 0.22250738585072014E~307) = false +> (0.123E2, 0.22250738585072014E~307) = true +== (0.123E2, 0.22250738585072014E~307) = false +?= (0.123E2, 0.22250738585072014E~307) = false +< (0.123E2, 0.11125369292536007E~307) = false +> (0.123E2, 0.11125369292536007E~307) = true +== (0.123E2, 0.11125369292536007E~307) = false +?= (0.123E2, 0.11125369292536007E~307) = false +< (0.123E2, 0.5E~323) = false +> (0.123E2, 0.5E~323) = true +== (0.123E2, 0.5E~323) = false +?= (0.123E2, 0.5E~323) = false +< (0.123E2, 0.0) = false +> (0.123E2, 0.0) = true +== (0.123E2, 0.0) = false +?= (0.123E2, 0.0) = false +< (0.123E2, ~0.17976931348623157E309) = false +> (0.123E2, ~0.17976931348623157E309) = true +== (0.123E2, ~0.17976931348623157E309) = false +?= (0.123E2, ~0.17976931348623157E309) = false +< (0.123E2, ~0.8988465674311579E308) = false +> (0.123E2, ~0.8988465674311579E308) = true +== (0.123E2, ~0.8988465674311579E308) = false +?= (0.123E2, ~0.8988465674311579E308) = false +< (0.123E2, ~0.123E4) = false +> (0.123E2, ~0.123E4) = true +== (0.123E2, ~0.123E4) = false +?= (0.123E2, ~0.123E4) = false +< (0.123E2, ~0.123E2) = false +> (0.123E2, ~0.123E2) = true +== (0.123E2, ~0.123E2) = false +?= (0.123E2, ~0.123E2) = false +< (0.123E2, ~0.3141592653589793E1) = false +> (0.123E2, ~0.3141592653589793E1) = true +== (0.123E2, ~0.3141592653589793E1) = false +?= (0.123E2, ~0.3141592653589793E1) = false +< (0.123E2, ~0.2718281828459045E1) = false +> (0.123E2, ~0.2718281828459045E1) = true +== (0.123E2, ~0.2718281828459045E1) = false +?= (0.123E2, ~0.2718281828459045E1) = false +< (0.123E2, ~0.123E1) = false +> (0.123E2, ~0.123E1) = true +== (0.123E2, ~0.123E1) = false +?= (0.123E2, ~0.123E1) = false +< (0.123E2, ~0.123) = false +> (0.123E2, ~0.123) = true +== (0.123E2, ~0.123) = false +?= (0.123E2, ~0.123) = false +< (0.123E2, ~0.123E~2) = false +> (0.123E2, ~0.123E~2) = true +== (0.123E2, ~0.123E~2) = false +?= (0.123E2, ~0.123E~2) = false +< (0.123E2, ~0.22250738585072014E~307) = false +> (0.123E2, ~0.22250738585072014E~307) = true +== (0.123E2, ~0.22250738585072014E~307) = false +?= (0.123E2, ~0.22250738585072014E~307) = false +< (0.123E2, ~0.11125369292536007E~307) = false +> (0.123E2, ~0.11125369292536007E~307) = true +== (0.123E2, ~0.11125369292536007E~307) = false +?= (0.123E2, ~0.11125369292536007E~307) = false +< (0.123E2, ~0.5E~323) = false +> (0.123E2, ~0.5E~323) = true +== (0.123E2, ~0.5E~323) = false +?= (0.123E2, ~0.5E~323) = false +< (0.123E2, ~0.0) = false +> (0.123E2, ~0.0) = true +== (0.123E2, ~0.0) = false +?= (0.123E2, ~0.0) = false +< (0.3141592653589793E1, 0.17976931348623157E309) = true +> (0.3141592653589793E1, 0.17976931348623157E309) = false +== (0.3141592653589793E1, 0.17976931348623157E309) = false +?= (0.3141592653589793E1, 0.17976931348623157E309) = false +< (0.3141592653589793E1, 0.8988465674311579E308) = true +> (0.3141592653589793E1, 0.8988465674311579E308) = false +== (0.3141592653589793E1, 0.8988465674311579E308) = false +?= (0.3141592653589793E1, 0.8988465674311579E308) = false +< (0.3141592653589793E1, 0.123E4) = true +> (0.3141592653589793E1, 0.123E4) = false +== (0.3141592653589793E1, 0.123E4) = false +?= (0.3141592653589793E1, 0.123E4) = false +< (0.3141592653589793E1, 0.123E2) = true +> (0.3141592653589793E1, 0.123E2) = false +== (0.3141592653589793E1, 0.123E2) = false +?= (0.3141592653589793E1, 0.123E2) = false +< (0.3141592653589793E1, 0.3141592653589793E1) = false +> (0.3141592653589793E1, 0.3141592653589793E1) = false +== (0.3141592653589793E1, 0.3141592653589793E1) = true +?= (0.3141592653589793E1, 0.3141592653589793E1) = true +< (0.3141592653589793E1, 0.2718281828459045E1) = false +> (0.3141592653589793E1, 0.2718281828459045E1) = true +== (0.3141592653589793E1, 0.2718281828459045E1) = false +?= (0.3141592653589793E1, 0.2718281828459045E1) = false +< (0.3141592653589793E1, 0.123E1) = false +> (0.3141592653589793E1, 0.123E1) = true +== (0.3141592653589793E1, 0.123E1) = false +?= (0.3141592653589793E1, 0.123E1) = false +< (0.3141592653589793E1, 0.123) = false +> (0.3141592653589793E1, 0.123) = true +== (0.3141592653589793E1, 0.123) = false +?= (0.3141592653589793E1, 0.123) = false +< (0.3141592653589793E1, 0.123E~2) = false +> (0.3141592653589793E1, 0.123E~2) = true +== (0.3141592653589793E1, 0.123E~2) = false +?= (0.3141592653589793E1, 0.123E~2) = false +< (0.3141592653589793E1, 0.22250738585072014E~307) = false +> (0.3141592653589793E1, 0.22250738585072014E~307) = true +== (0.3141592653589793E1, 0.22250738585072014E~307) = false +?= (0.3141592653589793E1, 0.22250738585072014E~307) = false +< (0.3141592653589793E1, 0.11125369292536007E~307) = false +> (0.3141592653589793E1, 0.11125369292536007E~307) = true +== (0.3141592653589793E1, 0.11125369292536007E~307) = false +?= (0.3141592653589793E1, 0.11125369292536007E~307) = false +< (0.3141592653589793E1, 0.5E~323) = false +> (0.3141592653589793E1, 0.5E~323) = true +== (0.3141592653589793E1, 0.5E~323) = false +?= (0.3141592653589793E1, 0.5E~323) = false +< (0.3141592653589793E1, 0.0) = false +> (0.3141592653589793E1, 0.0) = true +== (0.3141592653589793E1, 0.0) = false +?= (0.3141592653589793E1, 0.0) = false +< (0.3141592653589793E1, ~0.17976931348623157E309) = false +> (0.3141592653589793E1, ~0.17976931348623157E309) = true +== (0.3141592653589793E1, ~0.17976931348623157E309) = false +?= (0.3141592653589793E1, ~0.17976931348623157E309) = false +< (0.3141592653589793E1, ~0.8988465674311579E308) = false +> (0.3141592653589793E1, ~0.8988465674311579E308) = true +== (0.3141592653589793E1, ~0.8988465674311579E308) = false +?= (0.3141592653589793E1, ~0.8988465674311579E308) = false +< (0.3141592653589793E1, ~0.123E4) = false +> (0.3141592653589793E1, ~0.123E4) = true +== (0.3141592653589793E1, ~0.123E4) = false +?= (0.3141592653589793E1, ~0.123E4) = false +< (0.3141592653589793E1, ~0.123E2) = false +> (0.3141592653589793E1, ~0.123E2) = true +== (0.3141592653589793E1, ~0.123E2) = false +?= (0.3141592653589793E1, ~0.123E2) = false +< (0.3141592653589793E1, ~0.3141592653589793E1) = false +> (0.3141592653589793E1, ~0.3141592653589793E1) = true +== (0.3141592653589793E1, ~0.3141592653589793E1) = false +?= (0.3141592653589793E1, ~0.3141592653589793E1) = false +< (0.3141592653589793E1, ~0.2718281828459045E1) = false +> (0.3141592653589793E1, ~0.2718281828459045E1) = true +== (0.3141592653589793E1, ~0.2718281828459045E1) = false +?= (0.3141592653589793E1, ~0.2718281828459045E1) = false +< (0.3141592653589793E1, ~0.123E1) = false +> (0.3141592653589793E1, ~0.123E1) = true +== (0.3141592653589793E1, ~0.123E1) = false +?= (0.3141592653589793E1, ~0.123E1) = false +< (0.3141592653589793E1, ~0.123) = false +> (0.3141592653589793E1, ~0.123) = true +== (0.3141592653589793E1, ~0.123) = false +?= (0.3141592653589793E1, ~0.123) = false +< (0.3141592653589793E1, ~0.123E~2) = false +> (0.3141592653589793E1, ~0.123E~2) = true +== (0.3141592653589793E1, ~0.123E~2) = false +?= (0.3141592653589793E1, ~0.123E~2) = false +< (0.3141592653589793E1, ~0.22250738585072014E~307) = false +> (0.3141592653589793E1, ~0.22250738585072014E~307) = true +== (0.3141592653589793E1, ~0.22250738585072014E~307) = false +?= (0.3141592653589793E1, ~0.22250738585072014E~307) = false +< (0.3141592653589793E1, ~0.11125369292536007E~307) = false +> (0.3141592653589793E1, ~0.11125369292536007E~307) = true +== (0.3141592653589793E1, ~0.11125369292536007E~307) = false +?= (0.3141592653589793E1, ~0.11125369292536007E~307) = false +< (0.3141592653589793E1, ~0.5E~323) = false +> (0.3141592653589793E1, ~0.5E~323) = true +== (0.3141592653589793E1, ~0.5E~323) = false +?= (0.3141592653589793E1, ~0.5E~323) = false +< (0.3141592653589793E1, ~0.0) = false +> (0.3141592653589793E1, ~0.0) = true +== (0.3141592653589793E1, ~0.0) = false +?= (0.3141592653589793E1, ~0.0) = false +< (0.2718281828459045E1, 0.17976931348623157E309) = true +> (0.2718281828459045E1, 0.17976931348623157E309) = false +== (0.2718281828459045E1, 0.17976931348623157E309) = false +?= (0.2718281828459045E1, 0.17976931348623157E309) = false +< (0.2718281828459045E1, 0.8988465674311579E308) = true +> (0.2718281828459045E1, 0.8988465674311579E308) = false +== (0.2718281828459045E1, 0.8988465674311579E308) = false +?= (0.2718281828459045E1, 0.8988465674311579E308) = false +< (0.2718281828459045E1, 0.123E4) = true +> (0.2718281828459045E1, 0.123E4) = false +== (0.2718281828459045E1, 0.123E4) = false +?= (0.2718281828459045E1, 0.123E4) = false +< (0.2718281828459045E1, 0.123E2) = true +> (0.2718281828459045E1, 0.123E2) = false +== (0.2718281828459045E1, 0.123E2) = false +?= (0.2718281828459045E1, 0.123E2) = false +< (0.2718281828459045E1, 0.3141592653589793E1) = true +> (0.2718281828459045E1, 0.3141592653589793E1) = false +== (0.2718281828459045E1, 0.3141592653589793E1) = false +?= (0.2718281828459045E1, 0.3141592653589793E1) = false +< (0.2718281828459045E1, 0.2718281828459045E1) = false +> (0.2718281828459045E1, 0.2718281828459045E1) = false +== (0.2718281828459045E1, 0.2718281828459045E1) = true +?= (0.2718281828459045E1, 0.2718281828459045E1) = true +< (0.2718281828459045E1, 0.123E1) = false +> (0.2718281828459045E1, 0.123E1) = true +== (0.2718281828459045E1, 0.123E1) = false +?= (0.2718281828459045E1, 0.123E1) = false +< (0.2718281828459045E1, 0.123) = false +> (0.2718281828459045E1, 0.123) = true +== (0.2718281828459045E1, 0.123) = false +?= (0.2718281828459045E1, 0.123) = false +< (0.2718281828459045E1, 0.123E~2) = false +> (0.2718281828459045E1, 0.123E~2) = true +== (0.2718281828459045E1, 0.123E~2) = false +?= (0.2718281828459045E1, 0.123E~2) = false +< (0.2718281828459045E1, 0.22250738585072014E~307) = false +> (0.2718281828459045E1, 0.22250738585072014E~307) = true +== (0.2718281828459045E1, 0.22250738585072014E~307) = false +?= (0.2718281828459045E1, 0.22250738585072014E~307) = false +< (0.2718281828459045E1, 0.11125369292536007E~307) = false +> (0.2718281828459045E1, 0.11125369292536007E~307) = true +== (0.2718281828459045E1, 0.11125369292536007E~307) = false +?= (0.2718281828459045E1, 0.11125369292536007E~307) = false +< (0.2718281828459045E1, 0.5E~323) = false +> (0.2718281828459045E1, 0.5E~323) = true +== (0.2718281828459045E1, 0.5E~323) = false +?= (0.2718281828459045E1, 0.5E~323) = false +< (0.2718281828459045E1, 0.0) = false +> (0.2718281828459045E1, 0.0) = true +== (0.2718281828459045E1, 0.0) = false +?= (0.2718281828459045E1, 0.0) = false +< (0.2718281828459045E1, ~0.17976931348623157E309) = false +> (0.2718281828459045E1, ~0.17976931348623157E309) = true +== (0.2718281828459045E1, ~0.17976931348623157E309) = false +?= (0.2718281828459045E1, ~0.17976931348623157E309) = false +< (0.2718281828459045E1, ~0.8988465674311579E308) = false +> (0.2718281828459045E1, ~0.8988465674311579E308) = true +== (0.2718281828459045E1, ~0.8988465674311579E308) = false +?= (0.2718281828459045E1, ~0.8988465674311579E308) = false +< (0.2718281828459045E1, ~0.123E4) = false +> (0.2718281828459045E1, ~0.123E4) = true +== (0.2718281828459045E1, ~0.123E4) = false +?= (0.2718281828459045E1, ~0.123E4) = false +< (0.2718281828459045E1, ~0.123E2) = false +> (0.2718281828459045E1, ~0.123E2) = true +== (0.2718281828459045E1, ~0.123E2) = false +?= (0.2718281828459045E1, ~0.123E2) = false +< (0.2718281828459045E1, ~0.3141592653589793E1) = false +> (0.2718281828459045E1, ~0.3141592653589793E1) = true +== (0.2718281828459045E1, ~0.3141592653589793E1) = false +?= (0.2718281828459045E1, ~0.3141592653589793E1) = false +< (0.2718281828459045E1, ~0.2718281828459045E1) = false +> (0.2718281828459045E1, ~0.2718281828459045E1) = true +== (0.2718281828459045E1, ~0.2718281828459045E1) = false +?= (0.2718281828459045E1, ~0.2718281828459045E1) = false +< (0.2718281828459045E1, ~0.123E1) = false +> (0.2718281828459045E1, ~0.123E1) = true +== (0.2718281828459045E1, ~0.123E1) = false +?= (0.2718281828459045E1, ~0.123E1) = false +< (0.2718281828459045E1, ~0.123) = false +> (0.2718281828459045E1, ~0.123) = true +== (0.2718281828459045E1, ~0.123) = false +?= (0.2718281828459045E1, ~0.123) = false +< (0.2718281828459045E1, ~0.123E~2) = false +> (0.2718281828459045E1, ~0.123E~2) = true +== (0.2718281828459045E1, ~0.123E~2) = false +?= (0.2718281828459045E1, ~0.123E~2) = false +< (0.2718281828459045E1, ~0.22250738585072014E~307) = false +> (0.2718281828459045E1, ~0.22250738585072014E~307) = true +== (0.2718281828459045E1, ~0.22250738585072014E~307) = false +?= (0.2718281828459045E1, ~0.22250738585072014E~307) = false +< (0.2718281828459045E1, ~0.11125369292536007E~307) = false +> (0.2718281828459045E1, ~0.11125369292536007E~307) = true +== (0.2718281828459045E1, ~0.11125369292536007E~307) = false +?= (0.2718281828459045E1, ~0.11125369292536007E~307) = false +< (0.2718281828459045E1, ~0.5E~323) = false +> (0.2718281828459045E1, ~0.5E~323) = true +== (0.2718281828459045E1, ~0.5E~323) = false +?= (0.2718281828459045E1, ~0.5E~323) = false +< (0.2718281828459045E1, ~0.0) = false +> (0.2718281828459045E1, ~0.0) = true +== (0.2718281828459045E1, ~0.0) = false +?= (0.2718281828459045E1, ~0.0) = false +< (0.123E1, 0.17976931348623157E309) = true +> (0.123E1, 0.17976931348623157E309) = false +== (0.123E1, 0.17976931348623157E309) = false +?= (0.123E1, 0.17976931348623157E309) = false +< (0.123E1, 0.8988465674311579E308) = true +> (0.123E1, 0.8988465674311579E308) = false +== (0.123E1, 0.8988465674311579E308) = false +?= (0.123E1, 0.8988465674311579E308) = false +< (0.123E1, 0.123E4) = true +> (0.123E1, 0.123E4) = false +== (0.123E1, 0.123E4) = false +?= (0.123E1, 0.123E4) = false +< (0.123E1, 0.123E2) = true +> (0.123E1, 0.123E2) = false +== (0.123E1, 0.123E2) = false +?= (0.123E1, 0.123E2) = false +< (0.123E1, 0.3141592653589793E1) = true +> (0.123E1, 0.3141592653589793E1) = false +== (0.123E1, 0.3141592653589793E1) = false +?= (0.123E1, 0.3141592653589793E1) = false +< (0.123E1, 0.2718281828459045E1) = true +> (0.123E1, 0.2718281828459045E1) = false +== (0.123E1, 0.2718281828459045E1) = false +?= (0.123E1, 0.2718281828459045E1) = false +< (0.123E1, 0.123E1) = false +> (0.123E1, 0.123E1) = false +== (0.123E1, 0.123E1) = true +?= (0.123E1, 0.123E1) = true +< (0.123E1, 0.123) = false +> (0.123E1, 0.123) = true +== (0.123E1, 0.123) = false +?= (0.123E1, 0.123) = false +< (0.123E1, 0.123E~2) = false +> (0.123E1, 0.123E~2) = true +== (0.123E1, 0.123E~2) = false +?= (0.123E1, 0.123E~2) = false +< (0.123E1, 0.22250738585072014E~307) = false +> (0.123E1, 0.22250738585072014E~307) = true +== (0.123E1, 0.22250738585072014E~307) = false +?= (0.123E1, 0.22250738585072014E~307) = false +< (0.123E1, 0.11125369292536007E~307) = false +> (0.123E1, 0.11125369292536007E~307) = true +== (0.123E1, 0.11125369292536007E~307) = false +?= (0.123E1, 0.11125369292536007E~307) = false +< (0.123E1, 0.5E~323) = false +> (0.123E1, 0.5E~323) = true +== (0.123E1, 0.5E~323) = false +?= (0.123E1, 0.5E~323) = false +< (0.123E1, 0.0) = false +> (0.123E1, 0.0) = true +== (0.123E1, 0.0) = false +?= (0.123E1, 0.0) = false +< (0.123E1, ~0.17976931348623157E309) = false +> (0.123E1, ~0.17976931348623157E309) = true +== (0.123E1, ~0.17976931348623157E309) = false +?= (0.123E1, ~0.17976931348623157E309) = false +< (0.123E1, ~0.8988465674311579E308) = false +> (0.123E1, ~0.8988465674311579E308) = true +== (0.123E1, ~0.8988465674311579E308) = false +?= (0.123E1, ~0.8988465674311579E308) = false +< (0.123E1, ~0.123E4) = false +> (0.123E1, ~0.123E4) = true +== (0.123E1, ~0.123E4) = false +?= (0.123E1, ~0.123E4) = false +< (0.123E1, ~0.123E2) = false +> (0.123E1, ~0.123E2) = true +== (0.123E1, ~0.123E2) = false +?= (0.123E1, ~0.123E2) = false +< (0.123E1, ~0.3141592653589793E1) = false +> (0.123E1, ~0.3141592653589793E1) = true +== (0.123E1, ~0.3141592653589793E1) = false +?= (0.123E1, ~0.3141592653589793E1) = false +< (0.123E1, ~0.2718281828459045E1) = false +> (0.123E1, ~0.2718281828459045E1) = true +== (0.123E1, ~0.2718281828459045E1) = false +?= (0.123E1, ~0.2718281828459045E1) = false +< (0.123E1, ~0.123E1) = false +> (0.123E1, ~0.123E1) = true +== (0.123E1, ~0.123E1) = false +?= (0.123E1, ~0.123E1) = false +< (0.123E1, ~0.123) = false +> (0.123E1, ~0.123) = true +== (0.123E1, ~0.123) = false +?= (0.123E1, ~0.123) = false +< (0.123E1, ~0.123E~2) = false +> (0.123E1, ~0.123E~2) = true +== (0.123E1, ~0.123E~2) = false +?= (0.123E1, ~0.123E~2) = false +< (0.123E1, ~0.22250738585072014E~307) = false +> (0.123E1, ~0.22250738585072014E~307) = true +== (0.123E1, ~0.22250738585072014E~307) = false +?= (0.123E1, ~0.22250738585072014E~307) = false +< (0.123E1, ~0.11125369292536007E~307) = false +> (0.123E1, ~0.11125369292536007E~307) = true +== (0.123E1, ~0.11125369292536007E~307) = false +?= (0.123E1, ~0.11125369292536007E~307) = false +< (0.123E1, ~0.5E~323) = false +> (0.123E1, ~0.5E~323) = true +== (0.123E1, ~0.5E~323) = false +?= (0.123E1, ~0.5E~323) = false +< (0.123E1, ~0.0) = false +> (0.123E1, ~0.0) = true +== (0.123E1, ~0.0) = false +?= (0.123E1, ~0.0) = false +< (0.123, 0.17976931348623157E309) = true +> (0.123, 0.17976931348623157E309) = false +== (0.123, 0.17976931348623157E309) = false +?= (0.123, 0.17976931348623157E309) = false +< (0.123, 0.8988465674311579E308) = true +> (0.123, 0.8988465674311579E308) = false +== (0.123, 0.8988465674311579E308) = false +?= (0.123, 0.8988465674311579E308) = false +< (0.123, 0.123E4) = true +> (0.123, 0.123E4) = false +== (0.123, 0.123E4) = false +?= (0.123, 0.123E4) = false +< (0.123, 0.123E2) = true +> (0.123, 0.123E2) = false +== (0.123, 0.123E2) = false +?= (0.123, 0.123E2) = false +< (0.123, 0.3141592653589793E1) = true +> (0.123, 0.3141592653589793E1) = false +== (0.123, 0.3141592653589793E1) = false +?= (0.123, 0.3141592653589793E1) = false +< (0.123, 0.2718281828459045E1) = true +> (0.123, 0.2718281828459045E1) = false +== (0.123, 0.2718281828459045E1) = false +?= (0.123, 0.2718281828459045E1) = false +< (0.123, 0.123E1) = true +> (0.123, 0.123E1) = false +== (0.123, 0.123E1) = false +?= (0.123, 0.123E1) = false +< (0.123, 0.123) = false +> (0.123, 0.123) = false +== (0.123, 0.123) = true +?= (0.123, 0.123) = true +< (0.123, 0.123E~2) = false +> (0.123, 0.123E~2) = true +== (0.123, 0.123E~2) = false +?= (0.123, 0.123E~2) = false +< (0.123, 0.22250738585072014E~307) = false +> (0.123, 0.22250738585072014E~307) = true +== (0.123, 0.22250738585072014E~307) = false +?= (0.123, 0.22250738585072014E~307) = false +< (0.123, 0.11125369292536007E~307) = false +> (0.123, 0.11125369292536007E~307) = true +== (0.123, 0.11125369292536007E~307) = false +?= (0.123, 0.11125369292536007E~307) = false +< (0.123, 0.5E~323) = false +> (0.123, 0.5E~323) = true +== (0.123, 0.5E~323) = false +?= (0.123, 0.5E~323) = false +< (0.123, 0.0) = false +> (0.123, 0.0) = true +== (0.123, 0.0) = false +?= (0.123, 0.0) = false +< (0.123, ~0.17976931348623157E309) = false +> (0.123, ~0.17976931348623157E309) = true +== (0.123, ~0.17976931348623157E309) = false +?= (0.123, ~0.17976931348623157E309) = false +< (0.123, ~0.8988465674311579E308) = false +> (0.123, ~0.8988465674311579E308) = true +== (0.123, ~0.8988465674311579E308) = false +?= (0.123, ~0.8988465674311579E308) = false +< (0.123, ~0.123E4) = false +> (0.123, ~0.123E4) = true +== (0.123, ~0.123E4) = false +?= (0.123, ~0.123E4) = false +< (0.123, ~0.123E2) = false +> (0.123, ~0.123E2) = true +== (0.123, ~0.123E2) = false +?= (0.123, ~0.123E2) = false +< (0.123, ~0.3141592653589793E1) = false +> (0.123, ~0.3141592653589793E1) = true +== (0.123, ~0.3141592653589793E1) = false +?= (0.123, ~0.3141592653589793E1) = false +< (0.123, ~0.2718281828459045E1) = false +> (0.123, ~0.2718281828459045E1) = true +== (0.123, ~0.2718281828459045E1) = false +?= (0.123, ~0.2718281828459045E1) = false +< (0.123, ~0.123E1) = false +> (0.123, ~0.123E1) = true +== (0.123, ~0.123E1) = false +?= (0.123, ~0.123E1) = false +< (0.123, ~0.123) = false +> (0.123, ~0.123) = true +== (0.123, ~0.123) = false +?= (0.123, ~0.123) = false +< (0.123, ~0.123E~2) = false +> (0.123, ~0.123E~2) = true +== (0.123, ~0.123E~2) = false +?= (0.123, ~0.123E~2) = false +< (0.123, ~0.22250738585072014E~307) = false +> (0.123, ~0.22250738585072014E~307) = true +== (0.123, ~0.22250738585072014E~307) = false +?= (0.123, ~0.22250738585072014E~307) = false +< (0.123, ~0.11125369292536007E~307) = false +> (0.123, ~0.11125369292536007E~307) = true +== (0.123, ~0.11125369292536007E~307) = false +?= (0.123, ~0.11125369292536007E~307) = false +< (0.123, ~0.5E~323) = false +> (0.123, ~0.5E~323) = true +== (0.123, ~0.5E~323) = false +?= (0.123, ~0.5E~323) = false +< (0.123, ~0.0) = false +> (0.123, ~0.0) = true +== (0.123, ~0.0) = false +?= (0.123, ~0.0) = false +< (0.123E~2, 0.17976931348623157E309) = true +> (0.123E~2, 0.17976931348623157E309) = false +== (0.123E~2, 0.17976931348623157E309) = false +?= (0.123E~2, 0.17976931348623157E309) = false +< (0.123E~2, 0.8988465674311579E308) = true +> (0.123E~2, 0.8988465674311579E308) = false +== (0.123E~2, 0.8988465674311579E308) = false +?= (0.123E~2, 0.8988465674311579E308) = false +< (0.123E~2, 0.123E4) = true +> (0.123E~2, 0.123E4) = false +== (0.123E~2, 0.123E4) = false +?= (0.123E~2, 0.123E4) = false +< (0.123E~2, 0.123E2) = true +> (0.123E~2, 0.123E2) = false +== (0.123E~2, 0.123E2) = false +?= (0.123E~2, 0.123E2) = false +< (0.123E~2, 0.3141592653589793E1) = true +> (0.123E~2, 0.3141592653589793E1) = false +== (0.123E~2, 0.3141592653589793E1) = false +?= (0.123E~2, 0.3141592653589793E1) = false +< (0.123E~2, 0.2718281828459045E1) = true +> (0.123E~2, 0.2718281828459045E1) = false +== (0.123E~2, 0.2718281828459045E1) = false +?= (0.123E~2, 0.2718281828459045E1) = false +< (0.123E~2, 0.123E1) = true +> (0.123E~2, 0.123E1) = false +== (0.123E~2, 0.123E1) = false +?= (0.123E~2, 0.123E1) = false +< (0.123E~2, 0.123) = true +> (0.123E~2, 0.123) = false +== (0.123E~2, 0.123) = false +?= (0.123E~2, 0.123) = false +< (0.123E~2, 0.123E~2) = false +> (0.123E~2, 0.123E~2) = false +== (0.123E~2, 0.123E~2) = true +?= (0.123E~2, 0.123E~2) = true +< (0.123E~2, 0.22250738585072014E~307) = false +> (0.123E~2, 0.22250738585072014E~307) = true +== (0.123E~2, 0.22250738585072014E~307) = false +?= (0.123E~2, 0.22250738585072014E~307) = false +< (0.123E~2, 0.11125369292536007E~307) = false +> (0.123E~2, 0.11125369292536007E~307) = true +== (0.123E~2, 0.11125369292536007E~307) = false +?= (0.123E~2, 0.11125369292536007E~307) = false +< (0.123E~2, 0.5E~323) = false +> (0.123E~2, 0.5E~323) = true +== (0.123E~2, 0.5E~323) = false +?= (0.123E~2, 0.5E~323) = false +< (0.123E~2, 0.0) = false +> (0.123E~2, 0.0) = true +== (0.123E~2, 0.0) = false +?= (0.123E~2, 0.0) = false +< (0.123E~2, ~0.17976931348623157E309) = false +> (0.123E~2, ~0.17976931348623157E309) = true +== (0.123E~2, ~0.17976931348623157E309) = false +?= (0.123E~2, ~0.17976931348623157E309) = false +< (0.123E~2, ~0.8988465674311579E308) = false +> (0.123E~2, ~0.8988465674311579E308) = true +== (0.123E~2, ~0.8988465674311579E308) = false +?= (0.123E~2, ~0.8988465674311579E308) = false +< (0.123E~2, ~0.123E4) = false +> (0.123E~2, ~0.123E4) = true +== (0.123E~2, ~0.123E4) = false +?= (0.123E~2, ~0.123E4) = false +< (0.123E~2, ~0.123E2) = false +> (0.123E~2, ~0.123E2) = true +== (0.123E~2, ~0.123E2) = false +?= (0.123E~2, ~0.123E2) = false +< (0.123E~2, ~0.3141592653589793E1) = false +> (0.123E~2, ~0.3141592653589793E1) = true +== (0.123E~2, ~0.3141592653589793E1) = false +?= (0.123E~2, ~0.3141592653589793E1) = false +< (0.123E~2, ~0.2718281828459045E1) = false +> (0.123E~2, ~0.2718281828459045E1) = true +== (0.123E~2, ~0.2718281828459045E1) = false +?= (0.123E~2, ~0.2718281828459045E1) = false +< (0.123E~2, ~0.123E1) = false +> (0.123E~2, ~0.123E1) = true +== (0.123E~2, ~0.123E1) = false +?= (0.123E~2, ~0.123E1) = false +< (0.123E~2, ~0.123) = false +> (0.123E~2, ~0.123) = true +== (0.123E~2, ~0.123) = false +?= (0.123E~2, ~0.123) = false +< (0.123E~2, ~0.123E~2) = false +> (0.123E~2, ~0.123E~2) = true +== (0.123E~2, ~0.123E~2) = false +?= (0.123E~2, ~0.123E~2) = false +< (0.123E~2, ~0.22250738585072014E~307) = false +> (0.123E~2, ~0.22250738585072014E~307) = true +== (0.123E~2, ~0.22250738585072014E~307) = false +?= (0.123E~2, ~0.22250738585072014E~307) = false +< (0.123E~2, ~0.11125369292536007E~307) = false +> (0.123E~2, ~0.11125369292536007E~307) = true +== (0.123E~2, ~0.11125369292536007E~307) = false +?= (0.123E~2, ~0.11125369292536007E~307) = false +< (0.123E~2, ~0.5E~323) = false +> (0.123E~2, ~0.5E~323) = true +== (0.123E~2, ~0.5E~323) = false +?= (0.123E~2, ~0.5E~323) = false +< (0.123E~2, ~0.0) = false +> (0.123E~2, ~0.0) = true +== (0.123E~2, ~0.0) = false +?= (0.123E~2, ~0.0) = false +< (0.22250738585072014E~307, 0.17976931348623157E309) = true +> (0.22250738585072014E~307, 0.17976931348623157E309) = false +== (0.22250738585072014E~307, 0.17976931348623157E309) = false +?= (0.22250738585072014E~307, 0.17976931348623157E309) = false +< (0.22250738585072014E~307, 0.8988465674311579E308) = true +> (0.22250738585072014E~307, 0.8988465674311579E308) = false +== (0.22250738585072014E~307, 0.8988465674311579E308) = false +?= (0.22250738585072014E~307, 0.8988465674311579E308) = false +< (0.22250738585072014E~307, 0.123E4) = true +> (0.22250738585072014E~307, 0.123E4) = false +== (0.22250738585072014E~307, 0.123E4) = false +?= (0.22250738585072014E~307, 0.123E4) = false +< (0.22250738585072014E~307, 0.123E2) = true +> (0.22250738585072014E~307, 0.123E2) = false +== (0.22250738585072014E~307, 0.123E2) = false +?= (0.22250738585072014E~307, 0.123E2) = false +< (0.22250738585072014E~307, 0.3141592653589793E1) = true +> (0.22250738585072014E~307, 0.3141592653589793E1) = false +== (0.22250738585072014E~307, 0.3141592653589793E1) = false +?= (0.22250738585072014E~307, 0.3141592653589793E1) = false +< (0.22250738585072014E~307, 0.2718281828459045E1) = true +> (0.22250738585072014E~307, 0.2718281828459045E1) = false +== (0.22250738585072014E~307, 0.2718281828459045E1) = false +?= (0.22250738585072014E~307, 0.2718281828459045E1) = false +< (0.22250738585072014E~307, 0.123E1) = true +> (0.22250738585072014E~307, 0.123E1) = false +== (0.22250738585072014E~307, 0.123E1) = false +?= (0.22250738585072014E~307, 0.123E1) = false +< (0.22250738585072014E~307, 0.123) = true +> (0.22250738585072014E~307, 0.123) = false +== (0.22250738585072014E~307, 0.123) = false +?= (0.22250738585072014E~307, 0.123) = false +< (0.22250738585072014E~307, 0.123E~2) = true +> (0.22250738585072014E~307, 0.123E~2) = false +== (0.22250738585072014E~307, 0.123E~2) = false +?= (0.22250738585072014E~307, 0.123E~2) = false +< (0.22250738585072014E~307, 0.22250738585072014E~307) = false +> (0.22250738585072014E~307, 0.22250738585072014E~307) = false +== (0.22250738585072014E~307, 0.22250738585072014E~307) = true +?= (0.22250738585072014E~307, 0.22250738585072014E~307) = true +< (0.22250738585072014E~307, 0.11125369292536007E~307) = false +> (0.22250738585072014E~307, 0.11125369292536007E~307) = true +== (0.22250738585072014E~307, 0.11125369292536007E~307) = false +?= (0.22250738585072014E~307, 0.11125369292536007E~307) = false +< (0.22250738585072014E~307, 0.5E~323) = false +> (0.22250738585072014E~307, 0.5E~323) = true +== (0.22250738585072014E~307, 0.5E~323) = false +?= (0.22250738585072014E~307, 0.5E~323) = false +< (0.22250738585072014E~307, 0.0) = false +> (0.22250738585072014E~307, 0.0) = true +== (0.22250738585072014E~307, 0.0) = false +?= (0.22250738585072014E~307, 0.0) = false +< (0.22250738585072014E~307, ~0.17976931348623157E309) = false +> (0.22250738585072014E~307, ~0.17976931348623157E309) = true +== (0.22250738585072014E~307, ~0.17976931348623157E309) = false +?= (0.22250738585072014E~307, ~0.17976931348623157E309) = false +< (0.22250738585072014E~307, ~0.8988465674311579E308) = false +> (0.22250738585072014E~307, ~0.8988465674311579E308) = true +== (0.22250738585072014E~307, ~0.8988465674311579E308) = false +?= (0.22250738585072014E~307, ~0.8988465674311579E308) = false +< (0.22250738585072014E~307, ~0.123E4) = false +> (0.22250738585072014E~307, ~0.123E4) = true +== (0.22250738585072014E~307, ~0.123E4) = false +?= (0.22250738585072014E~307, ~0.123E4) = false +< (0.22250738585072014E~307, ~0.123E2) = false +> (0.22250738585072014E~307, ~0.123E2) = true +== (0.22250738585072014E~307, ~0.123E2) = false +?= (0.22250738585072014E~307, ~0.123E2) = false +< (0.22250738585072014E~307, ~0.3141592653589793E1) = false +> (0.22250738585072014E~307, ~0.3141592653589793E1) = true +== (0.22250738585072014E~307, ~0.3141592653589793E1) = false +?= (0.22250738585072014E~307, ~0.3141592653589793E1) = false +< (0.22250738585072014E~307, ~0.2718281828459045E1) = false +> (0.22250738585072014E~307, ~0.2718281828459045E1) = true +== (0.22250738585072014E~307, ~0.2718281828459045E1) = false +?= (0.22250738585072014E~307, ~0.2718281828459045E1) = false +< (0.22250738585072014E~307, ~0.123E1) = false +> (0.22250738585072014E~307, ~0.123E1) = true +== (0.22250738585072014E~307, ~0.123E1) = false +?= (0.22250738585072014E~307, ~0.123E1) = false +< (0.22250738585072014E~307, ~0.123) = false +> (0.22250738585072014E~307, ~0.123) = true +== (0.22250738585072014E~307, ~0.123) = false +?= (0.22250738585072014E~307, ~0.123) = false +< (0.22250738585072014E~307, ~0.123E~2) = false +> (0.22250738585072014E~307, ~0.123E~2) = true +== (0.22250738585072014E~307, ~0.123E~2) = false +?= (0.22250738585072014E~307, ~0.123E~2) = false +< (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +> (0.22250738585072014E~307, ~0.22250738585072014E~307) = true +== (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +?= (0.22250738585072014E~307, ~0.22250738585072014E~307) = false +< (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +> (0.22250738585072014E~307, ~0.11125369292536007E~307) = true +== (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +?= (0.22250738585072014E~307, ~0.11125369292536007E~307) = false +< (0.22250738585072014E~307, ~0.5E~323) = false +> (0.22250738585072014E~307, ~0.5E~323) = true +== (0.22250738585072014E~307, ~0.5E~323) = false +?= (0.22250738585072014E~307, ~0.5E~323) = false +< (0.22250738585072014E~307, ~0.0) = false +> (0.22250738585072014E~307, ~0.0) = true +== (0.22250738585072014E~307, ~0.0) = false +?= (0.22250738585072014E~307, ~0.0) = false +< (0.11125369292536007E~307, 0.17976931348623157E309) = true +> (0.11125369292536007E~307, 0.17976931348623157E309) = false +== (0.11125369292536007E~307, 0.17976931348623157E309) = false +?= (0.11125369292536007E~307, 0.17976931348623157E309) = false +< (0.11125369292536007E~307, 0.8988465674311579E308) = true +> (0.11125369292536007E~307, 0.8988465674311579E308) = false +== (0.11125369292536007E~307, 0.8988465674311579E308) = false +?= (0.11125369292536007E~307, 0.8988465674311579E308) = false +< (0.11125369292536007E~307, 0.123E4) = true +> (0.11125369292536007E~307, 0.123E4) = false +== (0.11125369292536007E~307, 0.123E4) = false +?= (0.11125369292536007E~307, 0.123E4) = false +< (0.11125369292536007E~307, 0.123E2) = true +> (0.11125369292536007E~307, 0.123E2) = false +== (0.11125369292536007E~307, 0.123E2) = false +?= (0.11125369292536007E~307, 0.123E2) = false +< (0.11125369292536007E~307, 0.3141592653589793E1) = true +> (0.11125369292536007E~307, 0.3141592653589793E1) = false +== (0.11125369292536007E~307, 0.3141592653589793E1) = false +?= (0.11125369292536007E~307, 0.3141592653589793E1) = false +< (0.11125369292536007E~307, 0.2718281828459045E1) = true +> (0.11125369292536007E~307, 0.2718281828459045E1) = false +== (0.11125369292536007E~307, 0.2718281828459045E1) = false +?= (0.11125369292536007E~307, 0.2718281828459045E1) = false +< (0.11125369292536007E~307, 0.123E1) = true +> (0.11125369292536007E~307, 0.123E1) = false +== (0.11125369292536007E~307, 0.123E1) = false +?= (0.11125369292536007E~307, 0.123E1) = false +< (0.11125369292536007E~307, 0.123) = true +> (0.11125369292536007E~307, 0.123) = false +== (0.11125369292536007E~307, 0.123) = false +?= (0.11125369292536007E~307, 0.123) = false +< (0.11125369292536007E~307, 0.123E~2) = true +> (0.11125369292536007E~307, 0.123E~2) = false +== (0.11125369292536007E~307, 0.123E~2) = false +?= (0.11125369292536007E~307, 0.123E~2) = false +< (0.11125369292536007E~307, 0.22250738585072014E~307) = true +> (0.11125369292536007E~307, 0.22250738585072014E~307) = false +== (0.11125369292536007E~307, 0.22250738585072014E~307) = false +?= (0.11125369292536007E~307, 0.22250738585072014E~307) = false +< (0.11125369292536007E~307, 0.11125369292536007E~307) = false +> (0.11125369292536007E~307, 0.11125369292536007E~307) = false +== (0.11125369292536007E~307, 0.11125369292536007E~307) = true +?= (0.11125369292536007E~307, 0.11125369292536007E~307) = true +< (0.11125369292536007E~307, 0.5E~323) = false +> (0.11125369292536007E~307, 0.5E~323) = true +== (0.11125369292536007E~307, 0.5E~323) = false +?= (0.11125369292536007E~307, 0.5E~323) = false +< (0.11125369292536007E~307, 0.0) = false +> (0.11125369292536007E~307, 0.0) = true +== (0.11125369292536007E~307, 0.0) = false +?= (0.11125369292536007E~307, 0.0) = false +< (0.11125369292536007E~307, ~0.17976931348623157E309) = false +> (0.11125369292536007E~307, ~0.17976931348623157E309) = true +== (0.11125369292536007E~307, ~0.17976931348623157E309) = false +?= (0.11125369292536007E~307, ~0.17976931348623157E309) = false +< (0.11125369292536007E~307, ~0.8988465674311579E308) = false +> (0.11125369292536007E~307, ~0.8988465674311579E308) = true +== (0.11125369292536007E~307, ~0.8988465674311579E308) = false +?= (0.11125369292536007E~307, ~0.8988465674311579E308) = false +< (0.11125369292536007E~307, ~0.123E4) = false +> (0.11125369292536007E~307, ~0.123E4) = true +== (0.11125369292536007E~307, ~0.123E4) = false +?= (0.11125369292536007E~307, ~0.123E4) = false +< (0.11125369292536007E~307, ~0.123E2) = false +> (0.11125369292536007E~307, ~0.123E2) = true +== (0.11125369292536007E~307, ~0.123E2) = false +?= (0.11125369292536007E~307, ~0.123E2) = false +< (0.11125369292536007E~307, ~0.3141592653589793E1) = false +> (0.11125369292536007E~307, ~0.3141592653589793E1) = true +== (0.11125369292536007E~307, ~0.3141592653589793E1) = false +?= (0.11125369292536007E~307, ~0.3141592653589793E1) = false +< (0.11125369292536007E~307, ~0.2718281828459045E1) = false +> (0.11125369292536007E~307, ~0.2718281828459045E1) = true +== (0.11125369292536007E~307, ~0.2718281828459045E1) = false +?= (0.11125369292536007E~307, ~0.2718281828459045E1) = false +< (0.11125369292536007E~307, ~0.123E1) = false +> (0.11125369292536007E~307, ~0.123E1) = true +== (0.11125369292536007E~307, ~0.123E1) = false +?= (0.11125369292536007E~307, ~0.123E1) = false +< (0.11125369292536007E~307, ~0.123) = false +> (0.11125369292536007E~307, ~0.123) = true +== (0.11125369292536007E~307, ~0.123) = false +?= (0.11125369292536007E~307, ~0.123) = false +< (0.11125369292536007E~307, ~0.123E~2) = false +> (0.11125369292536007E~307, ~0.123E~2) = true +== (0.11125369292536007E~307, ~0.123E~2) = false +?= (0.11125369292536007E~307, ~0.123E~2) = false +< (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +> (0.11125369292536007E~307, ~0.22250738585072014E~307) = true +== (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +?= (0.11125369292536007E~307, ~0.22250738585072014E~307) = false +< (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +> (0.11125369292536007E~307, ~0.11125369292536007E~307) = true +== (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +?= (0.11125369292536007E~307, ~0.11125369292536007E~307) = false +< (0.11125369292536007E~307, ~0.5E~323) = false +> (0.11125369292536007E~307, ~0.5E~323) = true +== (0.11125369292536007E~307, ~0.5E~323) = false +?= (0.11125369292536007E~307, ~0.5E~323) = false +< (0.11125369292536007E~307, ~0.0) = false +> (0.11125369292536007E~307, ~0.0) = true +== (0.11125369292536007E~307, ~0.0) = false +?= (0.11125369292536007E~307, ~0.0) = false +< (0.5E~323, 0.17976931348623157E309) = true +> (0.5E~323, 0.17976931348623157E309) = false +== (0.5E~323, 0.17976931348623157E309) = false +?= (0.5E~323, 0.17976931348623157E309) = false +< (0.5E~323, 0.8988465674311579E308) = true +> (0.5E~323, 0.8988465674311579E308) = false +== (0.5E~323, 0.8988465674311579E308) = false +?= (0.5E~323, 0.8988465674311579E308) = false +< (0.5E~323, 0.123E4) = true +> (0.5E~323, 0.123E4) = false +== (0.5E~323, 0.123E4) = false +?= (0.5E~323, 0.123E4) = false +< (0.5E~323, 0.123E2) = true +> (0.5E~323, 0.123E2) = false +== (0.5E~323, 0.123E2) = false +?= (0.5E~323, 0.123E2) = false +< (0.5E~323, 0.3141592653589793E1) = true +> (0.5E~323, 0.3141592653589793E1) = false +== (0.5E~323, 0.3141592653589793E1) = false +?= (0.5E~323, 0.3141592653589793E1) = false +< (0.5E~323, 0.2718281828459045E1) = true +> (0.5E~323, 0.2718281828459045E1) = false +== (0.5E~323, 0.2718281828459045E1) = false +?= (0.5E~323, 0.2718281828459045E1) = false +< (0.5E~323, 0.123E1) = true +> (0.5E~323, 0.123E1) = false +== (0.5E~323, 0.123E1) = false +?= (0.5E~323, 0.123E1) = false +< (0.5E~323, 0.123) = true +> (0.5E~323, 0.123) = false +== (0.5E~323, 0.123) = false +?= (0.5E~323, 0.123) = false +< (0.5E~323, 0.123E~2) = true +> (0.5E~323, 0.123E~2) = false +== (0.5E~323, 0.123E~2) = false +?= (0.5E~323, 0.123E~2) = false +< (0.5E~323, 0.22250738585072014E~307) = true +> (0.5E~323, 0.22250738585072014E~307) = false +== (0.5E~323, 0.22250738585072014E~307) = false +?= (0.5E~323, 0.22250738585072014E~307) = false +< (0.5E~323, 0.11125369292536007E~307) = true +> (0.5E~323, 0.11125369292536007E~307) = false +== (0.5E~323, 0.11125369292536007E~307) = false +?= (0.5E~323, 0.11125369292536007E~307) = false +< (0.5E~323, 0.5E~323) = false +> (0.5E~323, 0.5E~323) = false +== (0.5E~323, 0.5E~323) = true +?= (0.5E~323, 0.5E~323) = true +< (0.5E~323, 0.0) = false +> (0.5E~323, 0.0) = true +== (0.5E~323, 0.0) = false +?= (0.5E~323, 0.0) = false +< (0.5E~323, ~0.17976931348623157E309) = false +> (0.5E~323, ~0.17976931348623157E309) = true +== (0.5E~323, ~0.17976931348623157E309) = false +?= (0.5E~323, ~0.17976931348623157E309) = false +< (0.5E~323, ~0.8988465674311579E308) = false +> (0.5E~323, ~0.8988465674311579E308) = true +== (0.5E~323, ~0.8988465674311579E308) = false +?= (0.5E~323, ~0.8988465674311579E308) = false +< (0.5E~323, ~0.123E4) = false +> (0.5E~323, ~0.123E4) = true +== (0.5E~323, ~0.123E4) = false +?= (0.5E~323, ~0.123E4) = false +< (0.5E~323, ~0.123E2) = false +> (0.5E~323, ~0.123E2) = true +== (0.5E~323, ~0.123E2) = false +?= (0.5E~323, ~0.123E2) = false +< (0.5E~323, ~0.3141592653589793E1) = false +> (0.5E~323, ~0.3141592653589793E1) = true +== (0.5E~323, ~0.3141592653589793E1) = false +?= (0.5E~323, ~0.3141592653589793E1) = false +< (0.5E~323, ~0.2718281828459045E1) = false +> (0.5E~323, ~0.2718281828459045E1) = true +== (0.5E~323, ~0.2718281828459045E1) = false +?= (0.5E~323, ~0.2718281828459045E1) = false +< (0.5E~323, ~0.123E1) = false +> (0.5E~323, ~0.123E1) = true +== (0.5E~323, ~0.123E1) = false +?= (0.5E~323, ~0.123E1) = false +< (0.5E~323, ~0.123) = false +> (0.5E~323, ~0.123) = true +== (0.5E~323, ~0.123) = false +?= (0.5E~323, ~0.123) = false +< (0.5E~323, ~0.123E~2) = false +> (0.5E~323, ~0.123E~2) = true +== (0.5E~323, ~0.123E~2) = false +?= (0.5E~323, ~0.123E~2) = false +< (0.5E~323, ~0.22250738585072014E~307) = false +> (0.5E~323, ~0.22250738585072014E~307) = true +== (0.5E~323, ~0.22250738585072014E~307) = false +?= (0.5E~323, ~0.22250738585072014E~307) = false +< (0.5E~323, ~0.11125369292536007E~307) = false +> (0.5E~323, ~0.11125369292536007E~307) = true +== (0.5E~323, ~0.11125369292536007E~307) = false +?= (0.5E~323, ~0.11125369292536007E~307) = false +< (0.5E~323, ~0.5E~323) = false +> (0.5E~323, ~0.5E~323) = true +== (0.5E~323, ~0.5E~323) = false +?= (0.5E~323, ~0.5E~323) = false +< (0.5E~323, ~0.0) = false +> (0.5E~323, ~0.0) = true +== (0.5E~323, ~0.0) = false +?= (0.5E~323, ~0.0) = false +< (0.0, 0.17976931348623157E309) = true +> (0.0, 0.17976931348623157E309) = false +== (0.0, 0.17976931348623157E309) = false +?= (0.0, 0.17976931348623157E309) = false +< (0.0, 0.8988465674311579E308) = true +> (0.0, 0.8988465674311579E308) = false +== (0.0, 0.8988465674311579E308) = false +?= (0.0, 0.8988465674311579E308) = false +< (0.0, 0.123E4) = true +> (0.0, 0.123E4) = false +== (0.0, 0.123E4) = false +?= (0.0, 0.123E4) = false +< (0.0, 0.123E2) = true +> (0.0, 0.123E2) = false +== (0.0, 0.123E2) = false +?= (0.0, 0.123E2) = false +< (0.0, 0.3141592653589793E1) = true +> (0.0, 0.3141592653589793E1) = false +== (0.0, 0.3141592653589793E1) = false +?= (0.0, 0.3141592653589793E1) = false +< (0.0, 0.2718281828459045E1) = true +> (0.0, 0.2718281828459045E1) = false +== (0.0, 0.2718281828459045E1) = false +?= (0.0, 0.2718281828459045E1) = false +< (0.0, 0.123E1) = true +> (0.0, 0.123E1) = false +== (0.0, 0.123E1) = false +?= (0.0, 0.123E1) = false +< (0.0, 0.123) = true +> (0.0, 0.123) = false +== (0.0, 0.123) = false +?= (0.0, 0.123) = false +< (0.0, 0.123E~2) = true +> (0.0, 0.123E~2) = false +== (0.0, 0.123E~2) = false +?= (0.0, 0.123E~2) = false +< (0.0, 0.22250738585072014E~307) = true +> (0.0, 0.22250738585072014E~307) = false +== (0.0, 0.22250738585072014E~307) = false +?= (0.0, 0.22250738585072014E~307) = false +< (0.0, 0.11125369292536007E~307) = true +> (0.0, 0.11125369292536007E~307) = false +== (0.0, 0.11125369292536007E~307) = false +?= (0.0, 0.11125369292536007E~307) = false +< (0.0, 0.5E~323) = true +> (0.0, 0.5E~323) = false +== (0.0, 0.5E~323) = false +?= (0.0, 0.5E~323) = false +< (0.0, 0.0) = false +> (0.0, 0.0) = false +== (0.0, 0.0) = true +?= (0.0, 0.0) = true +< (0.0, ~0.17976931348623157E309) = false +> (0.0, ~0.17976931348623157E309) = true +== (0.0, ~0.17976931348623157E309) = false +?= (0.0, ~0.17976931348623157E309) = false +< (0.0, ~0.8988465674311579E308) = false +> (0.0, ~0.8988465674311579E308) = true +== (0.0, ~0.8988465674311579E308) = false +?= (0.0, ~0.8988465674311579E308) = false +< (0.0, ~0.123E4) = false +> (0.0, ~0.123E4) = true +== (0.0, ~0.123E4) = false +?= (0.0, ~0.123E4) = false +< (0.0, ~0.123E2) = false +> (0.0, ~0.123E2) = true +== (0.0, ~0.123E2) = false +?= (0.0, ~0.123E2) = false +< (0.0, ~0.3141592653589793E1) = false +> (0.0, ~0.3141592653589793E1) = true +== (0.0, ~0.3141592653589793E1) = false +?= (0.0, ~0.3141592653589793E1) = false +< (0.0, ~0.2718281828459045E1) = false +> (0.0, ~0.2718281828459045E1) = true +== (0.0, ~0.2718281828459045E1) = false +?= (0.0, ~0.2718281828459045E1) = false +< (0.0, ~0.123E1) = false +> (0.0, ~0.123E1) = true +== (0.0, ~0.123E1) = false +?= (0.0, ~0.123E1) = false +< (0.0, ~0.123) = false +> (0.0, ~0.123) = true +== (0.0, ~0.123) = false +?= (0.0, ~0.123) = false +< (0.0, ~0.123E~2) = false +> (0.0, ~0.123E~2) = true +== (0.0, ~0.123E~2) = false +?= (0.0, ~0.123E~2) = false +< (0.0, ~0.22250738585072014E~307) = false +> (0.0, ~0.22250738585072014E~307) = true +== (0.0, ~0.22250738585072014E~307) = false +?= (0.0, ~0.22250738585072014E~307) = false +< (0.0, ~0.11125369292536007E~307) = false +> (0.0, ~0.11125369292536007E~307) = true +== (0.0, ~0.11125369292536007E~307) = false +?= (0.0, ~0.11125369292536007E~307) = false +< (0.0, ~0.5E~323) = false +> (0.0, ~0.5E~323) = true +== (0.0, ~0.5E~323) = false +?= (0.0, ~0.5E~323) = false +< (0.0, ~0.0) = false +> (0.0, ~0.0) = false +== (0.0, ~0.0) = true +?= (0.0, ~0.0) = true +< (~0.17976931348623157E309, 0.17976931348623157E309) = true +> (~0.17976931348623157E309, 0.17976931348623157E309) = false +== (~0.17976931348623157E309, 0.17976931348623157E309) = false +?= (~0.17976931348623157E309, 0.17976931348623157E309) = false +< (~0.17976931348623157E309, 0.8988465674311579E308) = true +> (~0.17976931348623157E309, 0.8988465674311579E308) = false +== (~0.17976931348623157E309, 0.8988465674311579E308) = false +?= (~0.17976931348623157E309, 0.8988465674311579E308) = false +< (~0.17976931348623157E309, 0.123E4) = true +> (~0.17976931348623157E309, 0.123E4) = false +== (~0.17976931348623157E309, 0.123E4) = false +?= (~0.17976931348623157E309, 0.123E4) = false +< (~0.17976931348623157E309, 0.123E2) = true +> (~0.17976931348623157E309, 0.123E2) = false +== (~0.17976931348623157E309, 0.123E2) = false +?= (~0.17976931348623157E309, 0.123E2) = false +< (~0.17976931348623157E309, 0.3141592653589793E1) = true +> (~0.17976931348623157E309, 0.3141592653589793E1) = false +== (~0.17976931348623157E309, 0.3141592653589793E1) = false +?= (~0.17976931348623157E309, 0.3141592653589793E1) = false +< (~0.17976931348623157E309, 0.2718281828459045E1) = true +> (~0.17976931348623157E309, 0.2718281828459045E1) = false +== (~0.17976931348623157E309, 0.2718281828459045E1) = false +?= (~0.17976931348623157E309, 0.2718281828459045E1) = false +< (~0.17976931348623157E309, 0.123E1) = true +> (~0.17976931348623157E309, 0.123E1) = false +== (~0.17976931348623157E309, 0.123E1) = false +?= (~0.17976931348623157E309, 0.123E1) = false +< (~0.17976931348623157E309, 0.123) = true +> (~0.17976931348623157E309, 0.123) = false +== (~0.17976931348623157E309, 0.123) = false +?= (~0.17976931348623157E309, 0.123) = false +< (~0.17976931348623157E309, 0.123E~2) = true +> (~0.17976931348623157E309, 0.123E~2) = false +== (~0.17976931348623157E309, 0.123E~2) = false +?= (~0.17976931348623157E309, 0.123E~2) = false +< (~0.17976931348623157E309, 0.22250738585072014E~307) = true +> (~0.17976931348623157E309, 0.22250738585072014E~307) = false +== (~0.17976931348623157E309, 0.22250738585072014E~307) = false +?= (~0.17976931348623157E309, 0.22250738585072014E~307) = false +< (~0.17976931348623157E309, 0.11125369292536007E~307) = true +> (~0.17976931348623157E309, 0.11125369292536007E~307) = false +== (~0.17976931348623157E309, 0.11125369292536007E~307) = false +?= (~0.17976931348623157E309, 0.11125369292536007E~307) = false +< (~0.17976931348623157E309, 0.5E~323) = true +> (~0.17976931348623157E309, 0.5E~323) = false +== (~0.17976931348623157E309, 0.5E~323) = false +?= (~0.17976931348623157E309, 0.5E~323) = false +< (~0.17976931348623157E309, 0.0) = true +> (~0.17976931348623157E309, 0.0) = false +== (~0.17976931348623157E309, 0.0) = false +?= (~0.17976931348623157E309, 0.0) = false +< (~0.17976931348623157E309, ~0.17976931348623157E309) = false +> (~0.17976931348623157E309, ~0.17976931348623157E309) = false +== (~0.17976931348623157E309, ~0.17976931348623157E309) = true +?= (~0.17976931348623157E309, ~0.17976931348623157E309) = true +< (~0.17976931348623157E309, ~0.8988465674311579E308) = true +> (~0.17976931348623157E309, ~0.8988465674311579E308) = false +== (~0.17976931348623157E309, ~0.8988465674311579E308) = false +?= (~0.17976931348623157E309, ~0.8988465674311579E308) = false +< (~0.17976931348623157E309, ~0.123E4) = true +> (~0.17976931348623157E309, ~0.123E4) = false +== (~0.17976931348623157E309, ~0.123E4) = false +?= (~0.17976931348623157E309, ~0.123E4) = false +< (~0.17976931348623157E309, ~0.123E2) = true +> (~0.17976931348623157E309, ~0.123E2) = false +== (~0.17976931348623157E309, ~0.123E2) = false +?= (~0.17976931348623157E309, ~0.123E2) = false +< (~0.17976931348623157E309, ~0.3141592653589793E1) = true +> (~0.17976931348623157E309, ~0.3141592653589793E1) = false +== (~0.17976931348623157E309, ~0.3141592653589793E1) = false +?= (~0.17976931348623157E309, ~0.3141592653589793E1) = false +< (~0.17976931348623157E309, ~0.2718281828459045E1) = true +> (~0.17976931348623157E309, ~0.2718281828459045E1) = false +== (~0.17976931348623157E309, ~0.2718281828459045E1) = false +?= (~0.17976931348623157E309, ~0.2718281828459045E1) = false +< (~0.17976931348623157E309, ~0.123E1) = true +> (~0.17976931348623157E309, ~0.123E1) = false +== (~0.17976931348623157E309, ~0.123E1) = false +?= (~0.17976931348623157E309, ~0.123E1) = false +< (~0.17976931348623157E309, ~0.123) = true +> (~0.17976931348623157E309, ~0.123) = false +== (~0.17976931348623157E309, ~0.123) = false +?= (~0.17976931348623157E309, ~0.123) = false +< (~0.17976931348623157E309, ~0.123E~2) = true +> (~0.17976931348623157E309, ~0.123E~2) = false +== (~0.17976931348623157E309, ~0.123E~2) = false +?= (~0.17976931348623157E309, ~0.123E~2) = false +< (~0.17976931348623157E309, ~0.22250738585072014E~307) = true +> (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +== (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +?= (~0.17976931348623157E309, ~0.22250738585072014E~307) = false +< (~0.17976931348623157E309, ~0.11125369292536007E~307) = true +> (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +== (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +?= (~0.17976931348623157E309, ~0.11125369292536007E~307) = false +< (~0.17976931348623157E309, ~0.5E~323) = true +> (~0.17976931348623157E309, ~0.5E~323) = false +== (~0.17976931348623157E309, ~0.5E~323) = false +?= (~0.17976931348623157E309, ~0.5E~323) = false +< (~0.17976931348623157E309, ~0.0) = true +> (~0.17976931348623157E309, ~0.0) = false +== (~0.17976931348623157E309, ~0.0) = false +?= (~0.17976931348623157E309, ~0.0) = false +< (~0.8988465674311579E308, 0.17976931348623157E309) = true +> (~0.8988465674311579E308, 0.17976931348623157E309) = false +== (~0.8988465674311579E308, 0.17976931348623157E309) = false +?= (~0.8988465674311579E308, 0.17976931348623157E309) = false +< (~0.8988465674311579E308, 0.8988465674311579E308) = true +> (~0.8988465674311579E308, 0.8988465674311579E308) = false +== (~0.8988465674311579E308, 0.8988465674311579E308) = false +?= (~0.8988465674311579E308, 0.8988465674311579E308) = false +< (~0.8988465674311579E308, 0.123E4) = true +> (~0.8988465674311579E308, 0.123E4) = false +== (~0.8988465674311579E308, 0.123E4) = false +?= (~0.8988465674311579E308, 0.123E4) = false +< (~0.8988465674311579E308, 0.123E2) = true +> (~0.8988465674311579E308, 0.123E2) = false +== (~0.8988465674311579E308, 0.123E2) = false +?= (~0.8988465674311579E308, 0.123E2) = false +< (~0.8988465674311579E308, 0.3141592653589793E1) = true +> (~0.8988465674311579E308, 0.3141592653589793E1) = false +== (~0.8988465674311579E308, 0.3141592653589793E1) = false +?= (~0.8988465674311579E308, 0.3141592653589793E1) = false +< (~0.8988465674311579E308, 0.2718281828459045E1) = true +> (~0.8988465674311579E308, 0.2718281828459045E1) = false +== (~0.8988465674311579E308, 0.2718281828459045E1) = false +?= (~0.8988465674311579E308, 0.2718281828459045E1) = false +< (~0.8988465674311579E308, 0.123E1) = true +> (~0.8988465674311579E308, 0.123E1) = false +== (~0.8988465674311579E308, 0.123E1) = false +?= (~0.8988465674311579E308, 0.123E1) = false +< (~0.8988465674311579E308, 0.123) = true +> (~0.8988465674311579E308, 0.123) = false +== (~0.8988465674311579E308, 0.123) = false +?= (~0.8988465674311579E308, 0.123) = false +< (~0.8988465674311579E308, 0.123E~2) = true +> (~0.8988465674311579E308, 0.123E~2) = false +== (~0.8988465674311579E308, 0.123E~2) = false +?= (~0.8988465674311579E308, 0.123E~2) = false +< (~0.8988465674311579E308, 0.22250738585072014E~307) = true +> (~0.8988465674311579E308, 0.22250738585072014E~307) = false +== (~0.8988465674311579E308, 0.22250738585072014E~307) = false +?= (~0.8988465674311579E308, 0.22250738585072014E~307) = false +< (~0.8988465674311579E308, 0.11125369292536007E~307) = true +> (~0.8988465674311579E308, 0.11125369292536007E~307) = false +== (~0.8988465674311579E308, 0.11125369292536007E~307) = false +?= (~0.8988465674311579E308, 0.11125369292536007E~307) = false +< (~0.8988465674311579E308, 0.5E~323) = true +> (~0.8988465674311579E308, 0.5E~323) = false +== (~0.8988465674311579E308, 0.5E~323) = false +?= (~0.8988465674311579E308, 0.5E~323) = false +< (~0.8988465674311579E308, 0.0) = true +> (~0.8988465674311579E308, 0.0) = false +== (~0.8988465674311579E308, 0.0) = false +?= (~0.8988465674311579E308, 0.0) = false +< (~0.8988465674311579E308, ~0.17976931348623157E309) = false +> (~0.8988465674311579E308, ~0.17976931348623157E309) = true +== (~0.8988465674311579E308, ~0.17976931348623157E309) = false +?= (~0.8988465674311579E308, ~0.17976931348623157E309) = false +< (~0.8988465674311579E308, ~0.8988465674311579E308) = false +> (~0.8988465674311579E308, ~0.8988465674311579E308) = false +== (~0.8988465674311579E308, ~0.8988465674311579E308) = true +?= (~0.8988465674311579E308, ~0.8988465674311579E308) = true +< (~0.8988465674311579E308, ~0.123E4) = true +> (~0.8988465674311579E308, ~0.123E4) = false +== (~0.8988465674311579E308, ~0.123E4) = false +?= (~0.8988465674311579E308, ~0.123E4) = false +< (~0.8988465674311579E308, ~0.123E2) = true +> (~0.8988465674311579E308, ~0.123E2) = false +== (~0.8988465674311579E308, ~0.123E2) = false +?= (~0.8988465674311579E308, ~0.123E2) = false +< (~0.8988465674311579E308, ~0.3141592653589793E1) = true +> (~0.8988465674311579E308, ~0.3141592653589793E1) = false +== (~0.8988465674311579E308, ~0.3141592653589793E1) = false +?= (~0.8988465674311579E308, ~0.3141592653589793E1) = false +< (~0.8988465674311579E308, ~0.2718281828459045E1) = true +> (~0.8988465674311579E308, ~0.2718281828459045E1) = false +== (~0.8988465674311579E308, ~0.2718281828459045E1) = false +?= (~0.8988465674311579E308, ~0.2718281828459045E1) = false +< (~0.8988465674311579E308, ~0.123E1) = true +> (~0.8988465674311579E308, ~0.123E1) = false +== (~0.8988465674311579E308, ~0.123E1) = false +?= (~0.8988465674311579E308, ~0.123E1) = false +< (~0.8988465674311579E308, ~0.123) = true +> (~0.8988465674311579E308, ~0.123) = false +== (~0.8988465674311579E308, ~0.123) = false +?= (~0.8988465674311579E308, ~0.123) = false +< (~0.8988465674311579E308, ~0.123E~2) = true +> (~0.8988465674311579E308, ~0.123E~2) = false +== (~0.8988465674311579E308, ~0.123E~2) = false +?= (~0.8988465674311579E308, ~0.123E~2) = false +< (~0.8988465674311579E308, ~0.22250738585072014E~307) = true +> (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +== (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +?= (~0.8988465674311579E308, ~0.22250738585072014E~307) = false +< (~0.8988465674311579E308, ~0.11125369292536007E~307) = true +> (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +== (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +?= (~0.8988465674311579E308, ~0.11125369292536007E~307) = false +< (~0.8988465674311579E308, ~0.5E~323) = true +> (~0.8988465674311579E308, ~0.5E~323) = false +== (~0.8988465674311579E308, ~0.5E~323) = false +?= (~0.8988465674311579E308, ~0.5E~323) = false +< (~0.8988465674311579E308, ~0.0) = true +> (~0.8988465674311579E308, ~0.0) = false +== (~0.8988465674311579E308, ~0.0) = false +?= (~0.8988465674311579E308, ~0.0) = false +< (~0.123E4, 0.17976931348623157E309) = true +> (~0.123E4, 0.17976931348623157E309) = false +== (~0.123E4, 0.17976931348623157E309) = false +?= (~0.123E4, 0.17976931348623157E309) = false +< (~0.123E4, 0.8988465674311579E308) = true +> (~0.123E4, 0.8988465674311579E308) = false +== (~0.123E4, 0.8988465674311579E308) = false +?= (~0.123E4, 0.8988465674311579E308) = false +< (~0.123E4, 0.123E4) = true +> (~0.123E4, 0.123E4) = false +== (~0.123E4, 0.123E4) = false +?= (~0.123E4, 0.123E4) = false +< (~0.123E4, 0.123E2) = true +> (~0.123E4, 0.123E2) = false +== (~0.123E4, 0.123E2) = false +?= (~0.123E4, 0.123E2) = false +< (~0.123E4, 0.3141592653589793E1) = true +> (~0.123E4, 0.3141592653589793E1) = false +== (~0.123E4, 0.3141592653589793E1) = false +?= (~0.123E4, 0.3141592653589793E1) = false +< (~0.123E4, 0.2718281828459045E1) = true +> (~0.123E4, 0.2718281828459045E1) = false +== (~0.123E4, 0.2718281828459045E1) = false +?= (~0.123E4, 0.2718281828459045E1) = false +< (~0.123E4, 0.123E1) = true +> (~0.123E4, 0.123E1) = false +== (~0.123E4, 0.123E1) = false +?= (~0.123E4, 0.123E1) = false +< (~0.123E4, 0.123) = true +> (~0.123E4, 0.123) = false +== (~0.123E4, 0.123) = false +?= (~0.123E4, 0.123) = false +< (~0.123E4, 0.123E~2) = true +> (~0.123E4, 0.123E~2) = false +== (~0.123E4, 0.123E~2) = false +?= (~0.123E4, 0.123E~2) = false +< (~0.123E4, 0.22250738585072014E~307) = true +> (~0.123E4, 0.22250738585072014E~307) = false +== (~0.123E4, 0.22250738585072014E~307) = false +?= (~0.123E4, 0.22250738585072014E~307) = false +< (~0.123E4, 0.11125369292536007E~307) = true +> (~0.123E4, 0.11125369292536007E~307) = false +== (~0.123E4, 0.11125369292536007E~307) = false +?= (~0.123E4, 0.11125369292536007E~307) = false +< (~0.123E4, 0.5E~323) = true +> (~0.123E4, 0.5E~323) = false +== (~0.123E4, 0.5E~323) = false +?= (~0.123E4, 0.5E~323) = false +< (~0.123E4, 0.0) = true +> (~0.123E4, 0.0) = false +== (~0.123E4, 0.0) = false +?= (~0.123E4, 0.0) = false +< (~0.123E4, ~0.17976931348623157E309) = false +> (~0.123E4, ~0.17976931348623157E309) = true +== (~0.123E4, ~0.17976931348623157E309) = false +?= (~0.123E4, ~0.17976931348623157E309) = false +< (~0.123E4, ~0.8988465674311579E308) = false +> (~0.123E4, ~0.8988465674311579E308) = true +== (~0.123E4, ~0.8988465674311579E308) = false +?= (~0.123E4, ~0.8988465674311579E308) = false +< (~0.123E4, ~0.123E4) = false +> (~0.123E4, ~0.123E4) = false +== (~0.123E4, ~0.123E4) = true +?= (~0.123E4, ~0.123E4) = true +< (~0.123E4, ~0.123E2) = true +> (~0.123E4, ~0.123E2) = false +== (~0.123E4, ~0.123E2) = false +?= (~0.123E4, ~0.123E2) = false +< (~0.123E4, ~0.3141592653589793E1) = true +> (~0.123E4, ~0.3141592653589793E1) = false +== (~0.123E4, ~0.3141592653589793E1) = false +?= (~0.123E4, ~0.3141592653589793E1) = false +< (~0.123E4, ~0.2718281828459045E1) = true +> (~0.123E4, ~0.2718281828459045E1) = false +== (~0.123E4, ~0.2718281828459045E1) = false +?= (~0.123E4, ~0.2718281828459045E1) = false +< (~0.123E4, ~0.123E1) = true +> (~0.123E4, ~0.123E1) = false +== (~0.123E4, ~0.123E1) = false +?= (~0.123E4, ~0.123E1) = false +< (~0.123E4, ~0.123) = true +> (~0.123E4, ~0.123) = false +== (~0.123E4, ~0.123) = false +?= (~0.123E4, ~0.123) = false +< (~0.123E4, ~0.123E~2) = true +> (~0.123E4, ~0.123E~2) = false +== (~0.123E4, ~0.123E~2) = false +?= (~0.123E4, ~0.123E~2) = false +< (~0.123E4, ~0.22250738585072014E~307) = true +> (~0.123E4, ~0.22250738585072014E~307) = false +== (~0.123E4, ~0.22250738585072014E~307) = false +?= (~0.123E4, ~0.22250738585072014E~307) = false +< (~0.123E4, ~0.11125369292536007E~307) = true +> (~0.123E4, ~0.11125369292536007E~307) = false +== (~0.123E4, ~0.11125369292536007E~307) = false +?= (~0.123E4, ~0.11125369292536007E~307) = false +< (~0.123E4, ~0.5E~323) = true +> (~0.123E4, ~0.5E~323) = false +== (~0.123E4, ~0.5E~323) = false +?= (~0.123E4, ~0.5E~323) = false +< (~0.123E4, ~0.0) = true +> (~0.123E4, ~0.0) = false +== (~0.123E4, ~0.0) = false +?= (~0.123E4, ~0.0) = false +< (~0.123E2, 0.17976931348623157E309) = true +> (~0.123E2, 0.17976931348623157E309) = false +== (~0.123E2, 0.17976931348623157E309) = false +?= (~0.123E2, 0.17976931348623157E309) = false +< (~0.123E2, 0.8988465674311579E308) = true +> (~0.123E2, 0.8988465674311579E308) = false +== (~0.123E2, 0.8988465674311579E308) = false +?= (~0.123E2, 0.8988465674311579E308) = false +< (~0.123E2, 0.123E4) = true +> (~0.123E2, 0.123E4) = false +== (~0.123E2, 0.123E4) = false +?= (~0.123E2, 0.123E4) = false +< (~0.123E2, 0.123E2) = true +> (~0.123E2, 0.123E2) = false +== (~0.123E2, 0.123E2) = false +?= (~0.123E2, 0.123E2) = false +< (~0.123E2, 0.3141592653589793E1) = true +> (~0.123E2, 0.3141592653589793E1) = false +== (~0.123E2, 0.3141592653589793E1) = false +?= (~0.123E2, 0.3141592653589793E1) = false +< (~0.123E2, 0.2718281828459045E1) = true +> (~0.123E2, 0.2718281828459045E1) = false +== (~0.123E2, 0.2718281828459045E1) = false +?= (~0.123E2, 0.2718281828459045E1) = false +< (~0.123E2, 0.123E1) = true +> (~0.123E2, 0.123E1) = false +== (~0.123E2, 0.123E1) = false +?= (~0.123E2, 0.123E1) = false +< (~0.123E2, 0.123) = true +> (~0.123E2, 0.123) = false +== (~0.123E2, 0.123) = false +?= (~0.123E2, 0.123) = false +< (~0.123E2, 0.123E~2) = true +> (~0.123E2, 0.123E~2) = false +== (~0.123E2, 0.123E~2) = false +?= (~0.123E2, 0.123E~2) = false +< (~0.123E2, 0.22250738585072014E~307) = true +> (~0.123E2, 0.22250738585072014E~307) = false +== (~0.123E2, 0.22250738585072014E~307) = false +?= (~0.123E2, 0.22250738585072014E~307) = false +< (~0.123E2, 0.11125369292536007E~307) = true +> (~0.123E2, 0.11125369292536007E~307) = false +== (~0.123E2, 0.11125369292536007E~307) = false +?= (~0.123E2, 0.11125369292536007E~307) = false +< (~0.123E2, 0.5E~323) = true +> (~0.123E2, 0.5E~323) = false +== (~0.123E2, 0.5E~323) = false +?= (~0.123E2, 0.5E~323) = false +< (~0.123E2, 0.0) = true +> (~0.123E2, 0.0) = false +== (~0.123E2, 0.0) = false +?= (~0.123E2, 0.0) = false +< (~0.123E2, ~0.17976931348623157E309) = false +> (~0.123E2, ~0.17976931348623157E309) = true +== (~0.123E2, ~0.17976931348623157E309) = false +?= (~0.123E2, ~0.17976931348623157E309) = false +< (~0.123E2, ~0.8988465674311579E308) = false +> (~0.123E2, ~0.8988465674311579E308) = true +== (~0.123E2, ~0.8988465674311579E308) = false +?= (~0.123E2, ~0.8988465674311579E308) = false +< (~0.123E2, ~0.123E4) = false +> (~0.123E2, ~0.123E4) = true +== (~0.123E2, ~0.123E4) = false +?= (~0.123E2, ~0.123E4) = false +< (~0.123E2, ~0.123E2) = false +> (~0.123E2, ~0.123E2) = false +== (~0.123E2, ~0.123E2) = true +?= (~0.123E2, ~0.123E2) = true +< (~0.123E2, ~0.3141592653589793E1) = true +> (~0.123E2, ~0.3141592653589793E1) = false +== (~0.123E2, ~0.3141592653589793E1) = false +?= (~0.123E2, ~0.3141592653589793E1) = false +< (~0.123E2, ~0.2718281828459045E1) = true +> (~0.123E2, ~0.2718281828459045E1) = false +== (~0.123E2, ~0.2718281828459045E1) = false +?= (~0.123E2, ~0.2718281828459045E1) = false +< (~0.123E2, ~0.123E1) = true +> (~0.123E2, ~0.123E1) = false +== (~0.123E2, ~0.123E1) = false +?= (~0.123E2, ~0.123E1) = false +< (~0.123E2, ~0.123) = true +> (~0.123E2, ~0.123) = false +== (~0.123E2, ~0.123) = false +?= (~0.123E2, ~0.123) = false +< (~0.123E2, ~0.123E~2) = true +> (~0.123E2, ~0.123E~2) = false +== (~0.123E2, ~0.123E~2) = false +?= (~0.123E2, ~0.123E~2) = false +< (~0.123E2, ~0.22250738585072014E~307) = true +> (~0.123E2, ~0.22250738585072014E~307) = false +== (~0.123E2, ~0.22250738585072014E~307) = false +?= (~0.123E2, ~0.22250738585072014E~307) = false +< (~0.123E2, ~0.11125369292536007E~307) = true +> (~0.123E2, ~0.11125369292536007E~307) = false +== (~0.123E2, ~0.11125369292536007E~307) = false +?= (~0.123E2, ~0.11125369292536007E~307) = false +< (~0.123E2, ~0.5E~323) = true +> (~0.123E2, ~0.5E~323) = false +== (~0.123E2, ~0.5E~323) = false +?= (~0.123E2, ~0.5E~323) = false +< (~0.123E2, ~0.0) = true +> (~0.123E2, ~0.0) = false +== (~0.123E2, ~0.0) = false +?= (~0.123E2, ~0.0) = false +< (~0.3141592653589793E1, 0.17976931348623157E309) = true +> (~0.3141592653589793E1, 0.17976931348623157E309) = false +== (~0.3141592653589793E1, 0.17976931348623157E309) = false +?= (~0.3141592653589793E1, 0.17976931348623157E309) = false +< (~0.3141592653589793E1, 0.8988465674311579E308) = true +> (~0.3141592653589793E1, 0.8988465674311579E308) = false +== (~0.3141592653589793E1, 0.8988465674311579E308) = false +?= (~0.3141592653589793E1, 0.8988465674311579E308) = false +< (~0.3141592653589793E1, 0.123E4) = true +> (~0.3141592653589793E1, 0.123E4) = false +== (~0.3141592653589793E1, 0.123E4) = false +?= (~0.3141592653589793E1, 0.123E4) = false +< (~0.3141592653589793E1, 0.123E2) = true +> (~0.3141592653589793E1, 0.123E2) = false +== (~0.3141592653589793E1, 0.123E2) = false +?= (~0.3141592653589793E1, 0.123E2) = false +< (~0.3141592653589793E1, 0.3141592653589793E1) = true +> (~0.3141592653589793E1, 0.3141592653589793E1) = false +== (~0.3141592653589793E1, 0.3141592653589793E1) = false +?= (~0.3141592653589793E1, 0.3141592653589793E1) = false +< (~0.3141592653589793E1, 0.2718281828459045E1) = true +> (~0.3141592653589793E1, 0.2718281828459045E1) = false +== (~0.3141592653589793E1, 0.2718281828459045E1) = false +?= (~0.3141592653589793E1, 0.2718281828459045E1) = false +< (~0.3141592653589793E1, 0.123E1) = true +> (~0.3141592653589793E1, 0.123E1) = false +== (~0.3141592653589793E1, 0.123E1) = false +?= (~0.3141592653589793E1, 0.123E1) = false +< (~0.3141592653589793E1, 0.123) = true +> (~0.3141592653589793E1, 0.123) = false +== (~0.3141592653589793E1, 0.123) = false +?= (~0.3141592653589793E1, 0.123) = false +< (~0.3141592653589793E1, 0.123E~2) = true +> (~0.3141592653589793E1, 0.123E~2) = false +== (~0.3141592653589793E1, 0.123E~2) = false +?= (~0.3141592653589793E1, 0.123E~2) = false +< (~0.3141592653589793E1, 0.22250738585072014E~307) = true +> (~0.3141592653589793E1, 0.22250738585072014E~307) = false +== (~0.3141592653589793E1, 0.22250738585072014E~307) = false +?= (~0.3141592653589793E1, 0.22250738585072014E~307) = false +< (~0.3141592653589793E1, 0.11125369292536007E~307) = true +> (~0.3141592653589793E1, 0.11125369292536007E~307) = false +== (~0.3141592653589793E1, 0.11125369292536007E~307) = false +?= (~0.3141592653589793E1, 0.11125369292536007E~307) = false +< (~0.3141592653589793E1, 0.5E~323) = true +> (~0.3141592653589793E1, 0.5E~323) = false +== (~0.3141592653589793E1, 0.5E~323) = false +?= (~0.3141592653589793E1, 0.5E~323) = false +< (~0.3141592653589793E1, 0.0) = true +> (~0.3141592653589793E1, 0.0) = false +== (~0.3141592653589793E1, 0.0) = false +?= (~0.3141592653589793E1, 0.0) = false +< (~0.3141592653589793E1, ~0.17976931348623157E309) = false +> (~0.3141592653589793E1, ~0.17976931348623157E309) = true +== (~0.3141592653589793E1, ~0.17976931348623157E309) = false +?= (~0.3141592653589793E1, ~0.17976931348623157E309) = false +< (~0.3141592653589793E1, ~0.8988465674311579E308) = false +> (~0.3141592653589793E1, ~0.8988465674311579E308) = true +== (~0.3141592653589793E1, ~0.8988465674311579E308) = false +?= (~0.3141592653589793E1, ~0.8988465674311579E308) = false +< (~0.3141592653589793E1, ~0.123E4) = false +> (~0.3141592653589793E1, ~0.123E4) = true +== (~0.3141592653589793E1, ~0.123E4) = false +?= (~0.3141592653589793E1, ~0.123E4) = false +< (~0.3141592653589793E1, ~0.123E2) = false +> (~0.3141592653589793E1, ~0.123E2) = true +== (~0.3141592653589793E1, ~0.123E2) = false +?= (~0.3141592653589793E1, ~0.123E2) = false +< (~0.3141592653589793E1, ~0.3141592653589793E1) = false +> (~0.3141592653589793E1, ~0.3141592653589793E1) = false +== (~0.3141592653589793E1, ~0.3141592653589793E1) = true +?= (~0.3141592653589793E1, ~0.3141592653589793E1) = true +< (~0.3141592653589793E1, ~0.2718281828459045E1) = true +> (~0.3141592653589793E1, ~0.2718281828459045E1) = false +== (~0.3141592653589793E1, ~0.2718281828459045E1) = false +?= (~0.3141592653589793E1, ~0.2718281828459045E1) = false +< (~0.3141592653589793E1, ~0.123E1) = true +> (~0.3141592653589793E1, ~0.123E1) = false +== (~0.3141592653589793E1, ~0.123E1) = false +?= (~0.3141592653589793E1, ~0.123E1) = false +< (~0.3141592653589793E1, ~0.123) = true +> (~0.3141592653589793E1, ~0.123) = false +== (~0.3141592653589793E1, ~0.123) = false +?= (~0.3141592653589793E1, ~0.123) = false +< (~0.3141592653589793E1, ~0.123E~2) = true +> (~0.3141592653589793E1, ~0.123E~2) = false +== (~0.3141592653589793E1, ~0.123E~2) = false +?= (~0.3141592653589793E1, ~0.123E~2) = false +< (~0.3141592653589793E1, ~0.22250738585072014E~307) = true +> (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +== (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +?= (~0.3141592653589793E1, ~0.22250738585072014E~307) = false +< (~0.3141592653589793E1, ~0.11125369292536007E~307) = true +> (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +== (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +?= (~0.3141592653589793E1, ~0.11125369292536007E~307) = false +< (~0.3141592653589793E1, ~0.5E~323) = true +> (~0.3141592653589793E1, ~0.5E~323) = false +== (~0.3141592653589793E1, ~0.5E~323) = false +?= (~0.3141592653589793E1, ~0.5E~323) = false +< (~0.3141592653589793E1, ~0.0) = true +> (~0.3141592653589793E1, ~0.0) = false +== (~0.3141592653589793E1, ~0.0) = false +?= (~0.3141592653589793E1, ~0.0) = false +< (~0.2718281828459045E1, 0.17976931348623157E309) = true +> (~0.2718281828459045E1, 0.17976931348623157E309) = false +== (~0.2718281828459045E1, 0.17976931348623157E309) = false +?= (~0.2718281828459045E1, 0.17976931348623157E309) = false +< (~0.2718281828459045E1, 0.8988465674311579E308) = true +> (~0.2718281828459045E1, 0.8988465674311579E308) = false +== (~0.2718281828459045E1, 0.8988465674311579E308) = false +?= (~0.2718281828459045E1, 0.8988465674311579E308) = false +< (~0.2718281828459045E1, 0.123E4) = true +> (~0.2718281828459045E1, 0.123E4) = false +== (~0.2718281828459045E1, 0.123E4) = false +?= (~0.2718281828459045E1, 0.123E4) = false +< (~0.2718281828459045E1, 0.123E2) = true +> (~0.2718281828459045E1, 0.123E2) = false +== (~0.2718281828459045E1, 0.123E2) = false +?= (~0.2718281828459045E1, 0.123E2) = false +< (~0.2718281828459045E1, 0.3141592653589793E1) = true +> (~0.2718281828459045E1, 0.3141592653589793E1) = false +== (~0.2718281828459045E1, 0.3141592653589793E1) = false +?= (~0.2718281828459045E1, 0.3141592653589793E1) = false +< (~0.2718281828459045E1, 0.2718281828459045E1) = true +> (~0.2718281828459045E1, 0.2718281828459045E1) = false +== (~0.2718281828459045E1, 0.2718281828459045E1) = false +?= (~0.2718281828459045E1, 0.2718281828459045E1) = false +< (~0.2718281828459045E1, 0.123E1) = true +> (~0.2718281828459045E1, 0.123E1) = false +== (~0.2718281828459045E1, 0.123E1) = false +?= (~0.2718281828459045E1, 0.123E1) = false +< (~0.2718281828459045E1, 0.123) = true +> (~0.2718281828459045E1, 0.123) = false +== (~0.2718281828459045E1, 0.123) = false +?= (~0.2718281828459045E1, 0.123) = false +< (~0.2718281828459045E1, 0.123E~2) = true +> (~0.2718281828459045E1, 0.123E~2) = false +== (~0.2718281828459045E1, 0.123E~2) = false +?= (~0.2718281828459045E1, 0.123E~2) = false +< (~0.2718281828459045E1, 0.22250738585072014E~307) = true +> (~0.2718281828459045E1, 0.22250738585072014E~307) = false +== (~0.2718281828459045E1, 0.22250738585072014E~307) = false +?= (~0.2718281828459045E1, 0.22250738585072014E~307) = false +< (~0.2718281828459045E1, 0.11125369292536007E~307) = true +> (~0.2718281828459045E1, 0.11125369292536007E~307) = false +== (~0.2718281828459045E1, 0.11125369292536007E~307) = false +?= (~0.2718281828459045E1, 0.11125369292536007E~307) = false +< (~0.2718281828459045E1, 0.5E~323) = true +> (~0.2718281828459045E1, 0.5E~323) = false +== (~0.2718281828459045E1, 0.5E~323) = false +?= (~0.2718281828459045E1, 0.5E~323) = false +< (~0.2718281828459045E1, 0.0) = true +> (~0.2718281828459045E1, 0.0) = false +== (~0.2718281828459045E1, 0.0) = false +?= (~0.2718281828459045E1, 0.0) = false +< (~0.2718281828459045E1, ~0.17976931348623157E309) = false +> (~0.2718281828459045E1, ~0.17976931348623157E309) = true +== (~0.2718281828459045E1, ~0.17976931348623157E309) = false +?= (~0.2718281828459045E1, ~0.17976931348623157E309) = false +< (~0.2718281828459045E1, ~0.8988465674311579E308) = false +> (~0.2718281828459045E1, ~0.8988465674311579E308) = true +== (~0.2718281828459045E1, ~0.8988465674311579E308) = false +?= (~0.2718281828459045E1, ~0.8988465674311579E308) = false +< (~0.2718281828459045E1, ~0.123E4) = false +> (~0.2718281828459045E1, ~0.123E4) = true +== (~0.2718281828459045E1, ~0.123E4) = false +?= (~0.2718281828459045E1, ~0.123E4) = false +< (~0.2718281828459045E1, ~0.123E2) = false +> (~0.2718281828459045E1, ~0.123E2) = true +== (~0.2718281828459045E1, ~0.123E2) = false +?= (~0.2718281828459045E1, ~0.123E2) = false +< (~0.2718281828459045E1, ~0.3141592653589793E1) = false +> (~0.2718281828459045E1, ~0.3141592653589793E1) = true +== (~0.2718281828459045E1, ~0.3141592653589793E1) = false +?= (~0.2718281828459045E1, ~0.3141592653589793E1) = false +< (~0.2718281828459045E1, ~0.2718281828459045E1) = false +> (~0.2718281828459045E1, ~0.2718281828459045E1) = false +== (~0.2718281828459045E1, ~0.2718281828459045E1) = true +?= (~0.2718281828459045E1, ~0.2718281828459045E1) = true +< (~0.2718281828459045E1, ~0.123E1) = true +> (~0.2718281828459045E1, ~0.123E1) = false +== (~0.2718281828459045E1, ~0.123E1) = false +?= (~0.2718281828459045E1, ~0.123E1) = false +< (~0.2718281828459045E1, ~0.123) = true +> (~0.2718281828459045E1, ~0.123) = false +== (~0.2718281828459045E1, ~0.123) = false +?= (~0.2718281828459045E1, ~0.123) = false +< (~0.2718281828459045E1, ~0.123E~2) = true +> (~0.2718281828459045E1, ~0.123E~2) = false +== (~0.2718281828459045E1, ~0.123E~2) = false +?= (~0.2718281828459045E1, ~0.123E~2) = false +< (~0.2718281828459045E1, ~0.22250738585072014E~307) = true +> (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +== (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +?= (~0.2718281828459045E1, ~0.22250738585072014E~307) = false +< (~0.2718281828459045E1, ~0.11125369292536007E~307) = true +> (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +== (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +?= (~0.2718281828459045E1, ~0.11125369292536007E~307) = false +< (~0.2718281828459045E1, ~0.5E~323) = true +> (~0.2718281828459045E1, ~0.5E~323) = false +== (~0.2718281828459045E1, ~0.5E~323) = false +?= (~0.2718281828459045E1, ~0.5E~323) = false +< (~0.2718281828459045E1, ~0.0) = true +> (~0.2718281828459045E1, ~0.0) = false +== (~0.2718281828459045E1, ~0.0) = false +?= (~0.2718281828459045E1, ~0.0) = false +< (~0.123E1, 0.17976931348623157E309) = true +> (~0.123E1, 0.17976931348623157E309) = false +== (~0.123E1, 0.17976931348623157E309) = false +?= (~0.123E1, 0.17976931348623157E309) = false +< (~0.123E1, 0.8988465674311579E308) = true +> (~0.123E1, 0.8988465674311579E308) = false +== (~0.123E1, 0.8988465674311579E308) = false +?= (~0.123E1, 0.8988465674311579E308) = false +< (~0.123E1, 0.123E4) = true +> (~0.123E1, 0.123E4) = false +== (~0.123E1, 0.123E4) = false +?= (~0.123E1, 0.123E4) = false +< (~0.123E1, 0.123E2) = true +> (~0.123E1, 0.123E2) = false +== (~0.123E1, 0.123E2) = false +?= (~0.123E1, 0.123E2) = false +< (~0.123E1, 0.3141592653589793E1) = true +> (~0.123E1, 0.3141592653589793E1) = false +== (~0.123E1, 0.3141592653589793E1) = false +?= (~0.123E1, 0.3141592653589793E1) = false +< (~0.123E1, 0.2718281828459045E1) = true +> (~0.123E1, 0.2718281828459045E1) = false +== (~0.123E1, 0.2718281828459045E1) = false +?= (~0.123E1, 0.2718281828459045E1) = false +< (~0.123E1, 0.123E1) = true +> (~0.123E1, 0.123E1) = false +== (~0.123E1, 0.123E1) = false +?= (~0.123E1, 0.123E1) = false +< (~0.123E1, 0.123) = true +> (~0.123E1, 0.123) = false +== (~0.123E1, 0.123) = false +?= (~0.123E1, 0.123) = false +< (~0.123E1, 0.123E~2) = true +> (~0.123E1, 0.123E~2) = false +== (~0.123E1, 0.123E~2) = false +?= (~0.123E1, 0.123E~2) = false +< (~0.123E1, 0.22250738585072014E~307) = true +> (~0.123E1, 0.22250738585072014E~307) = false +== (~0.123E1, 0.22250738585072014E~307) = false +?= (~0.123E1, 0.22250738585072014E~307) = false +< (~0.123E1, 0.11125369292536007E~307) = true +> (~0.123E1, 0.11125369292536007E~307) = false +== (~0.123E1, 0.11125369292536007E~307) = false +?= (~0.123E1, 0.11125369292536007E~307) = false +< (~0.123E1, 0.5E~323) = true +> (~0.123E1, 0.5E~323) = false +== (~0.123E1, 0.5E~323) = false +?= (~0.123E1, 0.5E~323) = false +< (~0.123E1, 0.0) = true +> (~0.123E1, 0.0) = false +== (~0.123E1, 0.0) = false +?= (~0.123E1, 0.0) = false +< (~0.123E1, ~0.17976931348623157E309) = false +> (~0.123E1, ~0.17976931348623157E309) = true +== (~0.123E1, ~0.17976931348623157E309) = false +?= (~0.123E1, ~0.17976931348623157E309) = false +< (~0.123E1, ~0.8988465674311579E308) = false +> (~0.123E1, ~0.8988465674311579E308) = true +== (~0.123E1, ~0.8988465674311579E308) = false +?= (~0.123E1, ~0.8988465674311579E308) = false +< (~0.123E1, ~0.123E4) = false +> (~0.123E1, ~0.123E4) = true +== (~0.123E1, ~0.123E4) = false +?= (~0.123E1, ~0.123E4) = false +< (~0.123E1, ~0.123E2) = false +> (~0.123E1, ~0.123E2) = true +== (~0.123E1, ~0.123E2) = false +?= (~0.123E1, ~0.123E2) = false +< (~0.123E1, ~0.3141592653589793E1) = false +> (~0.123E1, ~0.3141592653589793E1) = true +== (~0.123E1, ~0.3141592653589793E1) = false +?= (~0.123E1, ~0.3141592653589793E1) = false +< (~0.123E1, ~0.2718281828459045E1) = false +> (~0.123E1, ~0.2718281828459045E1) = true +== (~0.123E1, ~0.2718281828459045E1) = false +?= (~0.123E1, ~0.2718281828459045E1) = false +< (~0.123E1, ~0.123E1) = false +> (~0.123E1, ~0.123E1) = false +== (~0.123E1, ~0.123E1) = true +?= (~0.123E1, ~0.123E1) = true +< (~0.123E1, ~0.123) = true +> (~0.123E1, ~0.123) = false +== (~0.123E1, ~0.123) = false +?= (~0.123E1, ~0.123) = false +< (~0.123E1, ~0.123E~2) = true +> (~0.123E1, ~0.123E~2) = false +== (~0.123E1, ~0.123E~2) = false +?= (~0.123E1, ~0.123E~2) = false +< (~0.123E1, ~0.22250738585072014E~307) = true +> (~0.123E1, ~0.22250738585072014E~307) = false +== (~0.123E1, ~0.22250738585072014E~307) = false +?= (~0.123E1, ~0.22250738585072014E~307) = false +< (~0.123E1, ~0.11125369292536007E~307) = true +> (~0.123E1, ~0.11125369292536007E~307) = false +== (~0.123E1, ~0.11125369292536007E~307) = false +?= (~0.123E1, ~0.11125369292536007E~307) = false +< (~0.123E1, ~0.5E~323) = true +> (~0.123E1, ~0.5E~323) = false +== (~0.123E1, ~0.5E~323) = false +?= (~0.123E1, ~0.5E~323) = false +< (~0.123E1, ~0.0) = true +> (~0.123E1, ~0.0) = false +== (~0.123E1, ~0.0) = false +?= (~0.123E1, ~0.0) = false +< (~0.123, 0.17976931348623157E309) = true +> (~0.123, 0.17976931348623157E309) = false +== (~0.123, 0.17976931348623157E309) = false +?= (~0.123, 0.17976931348623157E309) = false +< (~0.123, 0.8988465674311579E308) = true +> (~0.123, 0.8988465674311579E308) = false +== (~0.123, 0.8988465674311579E308) = false +?= (~0.123, 0.8988465674311579E308) = false +< (~0.123, 0.123E4) = true +> (~0.123, 0.123E4) = false +== (~0.123, 0.123E4) = false +?= (~0.123, 0.123E4) = false +< (~0.123, 0.123E2) = true +> (~0.123, 0.123E2) = false +== (~0.123, 0.123E2) = false +?= (~0.123, 0.123E2) = false +< (~0.123, 0.3141592653589793E1) = true +> (~0.123, 0.3141592653589793E1) = false +== (~0.123, 0.3141592653589793E1) = false +?= (~0.123, 0.3141592653589793E1) = false +< (~0.123, 0.2718281828459045E1) = true +> (~0.123, 0.2718281828459045E1) = false +== (~0.123, 0.2718281828459045E1) = false +?= (~0.123, 0.2718281828459045E1) = false +< (~0.123, 0.123E1) = true +> (~0.123, 0.123E1) = false +== (~0.123, 0.123E1) = false +?= (~0.123, 0.123E1) = false +< (~0.123, 0.123) = true +> (~0.123, 0.123) = false +== (~0.123, 0.123) = false +?= (~0.123, 0.123) = false +< (~0.123, 0.123E~2) = true +> (~0.123, 0.123E~2) = false +== (~0.123, 0.123E~2) = false +?= (~0.123, 0.123E~2) = false +< (~0.123, 0.22250738585072014E~307) = true +> (~0.123, 0.22250738585072014E~307) = false +== (~0.123, 0.22250738585072014E~307) = false +?= (~0.123, 0.22250738585072014E~307) = false +< (~0.123, 0.11125369292536007E~307) = true +> (~0.123, 0.11125369292536007E~307) = false +== (~0.123, 0.11125369292536007E~307) = false +?= (~0.123, 0.11125369292536007E~307) = false +< (~0.123, 0.5E~323) = true +> (~0.123, 0.5E~323) = false +== (~0.123, 0.5E~323) = false +?= (~0.123, 0.5E~323) = false +< (~0.123, 0.0) = true +> (~0.123, 0.0) = false +== (~0.123, 0.0) = false +?= (~0.123, 0.0) = false +< (~0.123, ~0.17976931348623157E309) = false +> (~0.123, ~0.17976931348623157E309) = true +== (~0.123, ~0.17976931348623157E309) = false +?= (~0.123, ~0.17976931348623157E309) = false +< (~0.123, ~0.8988465674311579E308) = false +> (~0.123, ~0.8988465674311579E308) = true +== (~0.123, ~0.8988465674311579E308) = false +?= (~0.123, ~0.8988465674311579E308) = false +< (~0.123, ~0.123E4) = false +> (~0.123, ~0.123E4) = true +== (~0.123, ~0.123E4) = false +?= (~0.123, ~0.123E4) = false +< (~0.123, ~0.123E2) = false +> (~0.123, ~0.123E2) = true +== (~0.123, ~0.123E2) = false +?= (~0.123, ~0.123E2) = false +< (~0.123, ~0.3141592653589793E1) = false +> (~0.123, ~0.3141592653589793E1) = true +== (~0.123, ~0.3141592653589793E1) = false +?= (~0.123, ~0.3141592653589793E1) = false +< (~0.123, ~0.2718281828459045E1) = false +> (~0.123, ~0.2718281828459045E1) = true +== (~0.123, ~0.2718281828459045E1) = false +?= (~0.123, ~0.2718281828459045E1) = false +< (~0.123, ~0.123E1) = false +> (~0.123, ~0.123E1) = true +== (~0.123, ~0.123E1) = false +?= (~0.123, ~0.123E1) = false +< (~0.123, ~0.123) = false +> (~0.123, ~0.123) = false +== (~0.123, ~0.123) = true +?= (~0.123, ~0.123) = true +< (~0.123, ~0.123E~2) = true +> (~0.123, ~0.123E~2) = false +== (~0.123, ~0.123E~2) = false +?= (~0.123, ~0.123E~2) = false +< (~0.123, ~0.22250738585072014E~307) = true +> (~0.123, ~0.22250738585072014E~307) = false +== (~0.123, ~0.22250738585072014E~307) = false +?= (~0.123, ~0.22250738585072014E~307) = false +< (~0.123, ~0.11125369292536007E~307) = true +> (~0.123, ~0.11125369292536007E~307) = false +== (~0.123, ~0.11125369292536007E~307) = false +?= (~0.123, ~0.11125369292536007E~307) = false +< (~0.123, ~0.5E~323) = true +> (~0.123, ~0.5E~323) = false +== (~0.123, ~0.5E~323) = false +?= (~0.123, ~0.5E~323) = false +< (~0.123, ~0.0) = true +> (~0.123, ~0.0) = false +== (~0.123, ~0.0) = false +?= (~0.123, ~0.0) = false +< (~0.123E~2, 0.17976931348623157E309) = true +> (~0.123E~2, 0.17976931348623157E309) = false +== (~0.123E~2, 0.17976931348623157E309) = false +?= (~0.123E~2, 0.17976931348623157E309) = false +< (~0.123E~2, 0.8988465674311579E308) = true +> (~0.123E~2, 0.8988465674311579E308) = false +== (~0.123E~2, 0.8988465674311579E308) = false +?= (~0.123E~2, 0.8988465674311579E308) = false +< (~0.123E~2, 0.123E4) = true +> (~0.123E~2, 0.123E4) = false +== (~0.123E~2, 0.123E4) = false +?= (~0.123E~2, 0.123E4) = false +< (~0.123E~2, 0.123E2) = true +> (~0.123E~2, 0.123E2) = false +== (~0.123E~2, 0.123E2) = false +?= (~0.123E~2, 0.123E2) = false +< (~0.123E~2, 0.3141592653589793E1) = true +> (~0.123E~2, 0.3141592653589793E1) = false +== (~0.123E~2, 0.3141592653589793E1) = false +?= (~0.123E~2, 0.3141592653589793E1) = false +< (~0.123E~2, 0.2718281828459045E1) = true +> (~0.123E~2, 0.2718281828459045E1) = false +== (~0.123E~2, 0.2718281828459045E1) = false +?= (~0.123E~2, 0.2718281828459045E1) = false +< (~0.123E~2, 0.123E1) = true +> (~0.123E~2, 0.123E1) = false +== (~0.123E~2, 0.123E1) = false +?= (~0.123E~2, 0.123E1) = false +< (~0.123E~2, 0.123) = true +> (~0.123E~2, 0.123) = false +== (~0.123E~2, 0.123) = false +?= (~0.123E~2, 0.123) = false +< (~0.123E~2, 0.123E~2) = true +> (~0.123E~2, 0.123E~2) = false +== (~0.123E~2, 0.123E~2) = false +?= (~0.123E~2, 0.123E~2) = false +< (~0.123E~2, 0.22250738585072014E~307) = true +> (~0.123E~2, 0.22250738585072014E~307) = false +== (~0.123E~2, 0.22250738585072014E~307) = false +?= (~0.123E~2, 0.22250738585072014E~307) = false +< (~0.123E~2, 0.11125369292536007E~307) = true +> (~0.123E~2, 0.11125369292536007E~307) = false +== (~0.123E~2, 0.11125369292536007E~307) = false +?= (~0.123E~2, 0.11125369292536007E~307) = false +< (~0.123E~2, 0.5E~323) = true +> (~0.123E~2, 0.5E~323) = false +== (~0.123E~2, 0.5E~323) = false +?= (~0.123E~2, 0.5E~323) = false +< (~0.123E~2, 0.0) = true +> (~0.123E~2, 0.0) = false +== (~0.123E~2, 0.0) = false +?= (~0.123E~2, 0.0) = false +< (~0.123E~2, ~0.17976931348623157E309) = false +> (~0.123E~2, ~0.17976931348623157E309) = true +== (~0.123E~2, ~0.17976931348623157E309) = false +?= (~0.123E~2, ~0.17976931348623157E309) = false +< (~0.123E~2, ~0.8988465674311579E308) = false +> (~0.123E~2, ~0.8988465674311579E308) = true +== (~0.123E~2, ~0.8988465674311579E308) = false +?= (~0.123E~2, ~0.8988465674311579E308) = false +< (~0.123E~2, ~0.123E4) = false +> (~0.123E~2, ~0.123E4) = true +== (~0.123E~2, ~0.123E4) = false +?= (~0.123E~2, ~0.123E4) = false +< (~0.123E~2, ~0.123E2) = false +> (~0.123E~2, ~0.123E2) = true +== (~0.123E~2, ~0.123E2) = false +?= (~0.123E~2, ~0.123E2) = false +< (~0.123E~2, ~0.3141592653589793E1) = false +> (~0.123E~2, ~0.3141592653589793E1) = true +== (~0.123E~2, ~0.3141592653589793E1) = false +?= (~0.123E~2, ~0.3141592653589793E1) = false +< (~0.123E~2, ~0.2718281828459045E1) = false +> (~0.123E~2, ~0.2718281828459045E1) = true +== (~0.123E~2, ~0.2718281828459045E1) = false +?= (~0.123E~2, ~0.2718281828459045E1) = false +< (~0.123E~2, ~0.123E1) = false +> (~0.123E~2, ~0.123E1) = true +== (~0.123E~2, ~0.123E1) = false +?= (~0.123E~2, ~0.123E1) = false +< (~0.123E~2, ~0.123) = false +> (~0.123E~2, ~0.123) = true +== (~0.123E~2, ~0.123) = false +?= (~0.123E~2, ~0.123) = false +< (~0.123E~2, ~0.123E~2) = false +> (~0.123E~2, ~0.123E~2) = false +== (~0.123E~2, ~0.123E~2) = true +?= (~0.123E~2, ~0.123E~2) = true +< (~0.123E~2, ~0.22250738585072014E~307) = true +> (~0.123E~2, ~0.22250738585072014E~307) = false +== (~0.123E~2, ~0.22250738585072014E~307) = false +?= (~0.123E~2, ~0.22250738585072014E~307) = false +< (~0.123E~2, ~0.11125369292536007E~307) = true +> (~0.123E~2, ~0.11125369292536007E~307) = false +== (~0.123E~2, ~0.11125369292536007E~307) = false +?= (~0.123E~2, ~0.11125369292536007E~307) = false +< (~0.123E~2, ~0.5E~323) = true +> (~0.123E~2, ~0.5E~323) = false +== (~0.123E~2, ~0.5E~323) = false +?= (~0.123E~2, ~0.5E~323) = false +< (~0.123E~2, ~0.0) = true +> (~0.123E~2, ~0.0) = false +== (~0.123E~2, ~0.0) = false +?= (~0.123E~2, ~0.0) = false +< (~0.22250738585072014E~307, 0.17976931348623157E309) = true +> (~0.22250738585072014E~307, 0.17976931348623157E309) = false +== (~0.22250738585072014E~307, 0.17976931348623157E309) = false +?= (~0.22250738585072014E~307, 0.17976931348623157E309) = false +< (~0.22250738585072014E~307, 0.8988465674311579E308) = true +> (~0.22250738585072014E~307, 0.8988465674311579E308) = false +== (~0.22250738585072014E~307, 0.8988465674311579E308) = false +?= (~0.22250738585072014E~307, 0.8988465674311579E308) = false +< (~0.22250738585072014E~307, 0.123E4) = true +> (~0.22250738585072014E~307, 0.123E4) = false +== (~0.22250738585072014E~307, 0.123E4) = false +?= (~0.22250738585072014E~307, 0.123E4) = false +< (~0.22250738585072014E~307, 0.123E2) = true +> (~0.22250738585072014E~307, 0.123E2) = false +== (~0.22250738585072014E~307, 0.123E2) = false +?= (~0.22250738585072014E~307, 0.123E2) = false +< (~0.22250738585072014E~307, 0.3141592653589793E1) = true +> (~0.22250738585072014E~307, 0.3141592653589793E1) = false +== (~0.22250738585072014E~307, 0.3141592653589793E1) = false +?= (~0.22250738585072014E~307, 0.3141592653589793E1) = false +< (~0.22250738585072014E~307, 0.2718281828459045E1) = true +> (~0.22250738585072014E~307, 0.2718281828459045E1) = false +== (~0.22250738585072014E~307, 0.2718281828459045E1) = false +?= (~0.22250738585072014E~307, 0.2718281828459045E1) = false +< (~0.22250738585072014E~307, 0.123E1) = true +> (~0.22250738585072014E~307, 0.123E1) = false +== (~0.22250738585072014E~307, 0.123E1) = false +?= (~0.22250738585072014E~307, 0.123E1) = false +< (~0.22250738585072014E~307, 0.123) = true +> (~0.22250738585072014E~307, 0.123) = false +== (~0.22250738585072014E~307, 0.123) = false +?= (~0.22250738585072014E~307, 0.123) = false +< (~0.22250738585072014E~307, 0.123E~2) = true +> (~0.22250738585072014E~307, 0.123E~2) = false +== (~0.22250738585072014E~307, 0.123E~2) = false +?= (~0.22250738585072014E~307, 0.123E~2) = false +< (~0.22250738585072014E~307, 0.22250738585072014E~307) = true +> (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +== (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +?= (~0.22250738585072014E~307, 0.22250738585072014E~307) = false +< (~0.22250738585072014E~307, 0.11125369292536007E~307) = true +> (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +== (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +?= (~0.22250738585072014E~307, 0.11125369292536007E~307) = false +< (~0.22250738585072014E~307, 0.5E~323) = true +> (~0.22250738585072014E~307, 0.5E~323) = false +== (~0.22250738585072014E~307, 0.5E~323) = false +?= (~0.22250738585072014E~307, 0.5E~323) = false +< (~0.22250738585072014E~307, 0.0) = true +> (~0.22250738585072014E~307, 0.0) = false +== (~0.22250738585072014E~307, 0.0) = false +?= (~0.22250738585072014E~307, 0.0) = false +< (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +> (~0.22250738585072014E~307, ~0.17976931348623157E309) = true +== (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +?= (~0.22250738585072014E~307, ~0.17976931348623157E309) = false +< (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +> (~0.22250738585072014E~307, ~0.8988465674311579E308) = true +== (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +?= (~0.22250738585072014E~307, ~0.8988465674311579E308) = false +< (~0.22250738585072014E~307, ~0.123E4) = false +> (~0.22250738585072014E~307, ~0.123E4) = true +== (~0.22250738585072014E~307, ~0.123E4) = false +?= (~0.22250738585072014E~307, ~0.123E4) = false +< (~0.22250738585072014E~307, ~0.123E2) = false +> (~0.22250738585072014E~307, ~0.123E2) = true +== (~0.22250738585072014E~307, ~0.123E2) = false +?= (~0.22250738585072014E~307, ~0.123E2) = false +< (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +> (~0.22250738585072014E~307, ~0.3141592653589793E1) = true +== (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +?= (~0.22250738585072014E~307, ~0.3141592653589793E1) = false +< (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +> (~0.22250738585072014E~307, ~0.2718281828459045E1) = true +== (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +?= (~0.22250738585072014E~307, ~0.2718281828459045E1) = false +< (~0.22250738585072014E~307, ~0.123E1) = false +> (~0.22250738585072014E~307, ~0.123E1) = true +== (~0.22250738585072014E~307, ~0.123E1) = false +?= (~0.22250738585072014E~307, ~0.123E1) = false +< (~0.22250738585072014E~307, ~0.123) = false +> (~0.22250738585072014E~307, ~0.123) = true +== (~0.22250738585072014E~307, ~0.123) = false +?= (~0.22250738585072014E~307, ~0.123) = false +< (~0.22250738585072014E~307, ~0.123E~2) = false +> (~0.22250738585072014E~307, ~0.123E~2) = true +== (~0.22250738585072014E~307, ~0.123E~2) = false +?= (~0.22250738585072014E~307, ~0.123E~2) = false +< (~0.22250738585072014E~307, ~0.22250738585072014E~307) = false +> (~0.22250738585072014E~307, ~0.22250738585072014E~307) = false +== (~0.22250738585072014E~307, ~0.22250738585072014E~307) = true +?= (~0.22250738585072014E~307, ~0.22250738585072014E~307) = true +< (~0.22250738585072014E~307, ~0.11125369292536007E~307) = true +> (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +== (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +?= (~0.22250738585072014E~307, ~0.11125369292536007E~307) = false +< (~0.22250738585072014E~307, ~0.5E~323) = true +> (~0.22250738585072014E~307, ~0.5E~323) = false +== (~0.22250738585072014E~307, ~0.5E~323) = false +?= (~0.22250738585072014E~307, ~0.5E~323) = false +< (~0.22250738585072014E~307, ~0.0) = true +> (~0.22250738585072014E~307, ~0.0) = false +== (~0.22250738585072014E~307, ~0.0) = false +?= (~0.22250738585072014E~307, ~0.0) = false +< (~0.11125369292536007E~307, 0.17976931348623157E309) = true +> (~0.11125369292536007E~307, 0.17976931348623157E309) = false +== (~0.11125369292536007E~307, 0.17976931348623157E309) = false +?= (~0.11125369292536007E~307, 0.17976931348623157E309) = false +< (~0.11125369292536007E~307, 0.8988465674311579E308) = true +> (~0.11125369292536007E~307, 0.8988465674311579E308) = false +== (~0.11125369292536007E~307, 0.8988465674311579E308) = false +?= (~0.11125369292536007E~307, 0.8988465674311579E308) = false +< (~0.11125369292536007E~307, 0.123E4) = true +> (~0.11125369292536007E~307, 0.123E4) = false +== (~0.11125369292536007E~307, 0.123E4) = false +?= (~0.11125369292536007E~307, 0.123E4) = false +< (~0.11125369292536007E~307, 0.123E2) = true +> (~0.11125369292536007E~307, 0.123E2) = false +== (~0.11125369292536007E~307, 0.123E2) = false +?= (~0.11125369292536007E~307, 0.123E2) = false +< (~0.11125369292536007E~307, 0.3141592653589793E1) = true +> (~0.11125369292536007E~307, 0.3141592653589793E1) = false +== (~0.11125369292536007E~307, 0.3141592653589793E1) = false +?= (~0.11125369292536007E~307, 0.3141592653589793E1) = false +< (~0.11125369292536007E~307, 0.2718281828459045E1) = true +> (~0.11125369292536007E~307, 0.2718281828459045E1) = false +== (~0.11125369292536007E~307, 0.2718281828459045E1) = false +?= (~0.11125369292536007E~307, 0.2718281828459045E1) = false +< (~0.11125369292536007E~307, 0.123E1) = true +> (~0.11125369292536007E~307, 0.123E1) = false +== (~0.11125369292536007E~307, 0.123E1) = false +?= (~0.11125369292536007E~307, 0.123E1) = false +< (~0.11125369292536007E~307, 0.123) = true +> (~0.11125369292536007E~307, 0.123) = false +== (~0.11125369292536007E~307, 0.123) = false +?= (~0.11125369292536007E~307, 0.123) = false +< (~0.11125369292536007E~307, 0.123E~2) = true +> (~0.11125369292536007E~307, 0.123E~2) = false +== (~0.11125369292536007E~307, 0.123E~2) = false +?= (~0.11125369292536007E~307, 0.123E~2) = false +< (~0.11125369292536007E~307, 0.22250738585072014E~307) = true +> (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +== (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +?= (~0.11125369292536007E~307, 0.22250738585072014E~307) = false +< (~0.11125369292536007E~307, 0.11125369292536007E~307) = true +> (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +== (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +?= (~0.11125369292536007E~307, 0.11125369292536007E~307) = false +< (~0.11125369292536007E~307, 0.5E~323) = true +> (~0.11125369292536007E~307, 0.5E~323) = false +== (~0.11125369292536007E~307, 0.5E~323) = false +?= (~0.11125369292536007E~307, 0.5E~323) = false +< (~0.11125369292536007E~307, 0.0) = true +> (~0.11125369292536007E~307, 0.0) = false +== (~0.11125369292536007E~307, 0.0) = false +?= (~0.11125369292536007E~307, 0.0) = false +< (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +> (~0.11125369292536007E~307, ~0.17976931348623157E309) = true +== (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +?= (~0.11125369292536007E~307, ~0.17976931348623157E309) = false +< (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +> (~0.11125369292536007E~307, ~0.8988465674311579E308) = true +== (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +?= (~0.11125369292536007E~307, ~0.8988465674311579E308) = false +< (~0.11125369292536007E~307, ~0.123E4) = false +> (~0.11125369292536007E~307, ~0.123E4) = true +== (~0.11125369292536007E~307, ~0.123E4) = false +?= (~0.11125369292536007E~307, ~0.123E4) = false +< (~0.11125369292536007E~307, ~0.123E2) = false +> (~0.11125369292536007E~307, ~0.123E2) = true +== (~0.11125369292536007E~307, ~0.123E2) = false +?= (~0.11125369292536007E~307, ~0.123E2) = false +< (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +> (~0.11125369292536007E~307, ~0.3141592653589793E1) = true +== (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +?= (~0.11125369292536007E~307, ~0.3141592653589793E1) = false +< (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +> (~0.11125369292536007E~307, ~0.2718281828459045E1) = true +== (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +?= (~0.11125369292536007E~307, ~0.2718281828459045E1) = false +< (~0.11125369292536007E~307, ~0.123E1) = false +> (~0.11125369292536007E~307, ~0.123E1) = true +== (~0.11125369292536007E~307, ~0.123E1) = false +?= (~0.11125369292536007E~307, ~0.123E1) = false +< (~0.11125369292536007E~307, ~0.123) = false +> (~0.11125369292536007E~307, ~0.123) = true +== (~0.11125369292536007E~307, ~0.123) = false +?= (~0.11125369292536007E~307, ~0.123) = false +< (~0.11125369292536007E~307, ~0.123E~2) = false +> (~0.11125369292536007E~307, ~0.123E~2) = true +== (~0.11125369292536007E~307, ~0.123E~2) = false +?= (~0.11125369292536007E~307, ~0.123E~2) = false +< (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +> (~0.11125369292536007E~307, ~0.22250738585072014E~307) = true +== (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +?= (~0.11125369292536007E~307, ~0.22250738585072014E~307) = false +< (~0.11125369292536007E~307, ~0.11125369292536007E~307) = false +> (~0.11125369292536007E~307, ~0.11125369292536007E~307) = false +== (~0.11125369292536007E~307, ~0.11125369292536007E~307) = true +?= (~0.11125369292536007E~307, ~0.11125369292536007E~307) = true +< (~0.11125369292536007E~307, ~0.5E~323) = true +> (~0.11125369292536007E~307, ~0.5E~323) = false +== (~0.11125369292536007E~307, ~0.5E~323) = false +?= (~0.11125369292536007E~307, ~0.5E~323) = false +< (~0.11125369292536007E~307, ~0.0) = true +> (~0.11125369292536007E~307, ~0.0) = false +== (~0.11125369292536007E~307, ~0.0) = false +?= (~0.11125369292536007E~307, ~0.0) = false +< (~0.5E~323, 0.17976931348623157E309) = true +> (~0.5E~323, 0.17976931348623157E309) = false +== (~0.5E~323, 0.17976931348623157E309) = false +?= (~0.5E~323, 0.17976931348623157E309) = false +< (~0.5E~323, 0.8988465674311579E308) = true +> (~0.5E~323, 0.8988465674311579E308) = false +== (~0.5E~323, 0.8988465674311579E308) = false +?= (~0.5E~323, 0.8988465674311579E308) = false +< (~0.5E~323, 0.123E4) = true +> (~0.5E~323, 0.123E4) = false +== (~0.5E~323, 0.123E4) = false +?= (~0.5E~323, 0.123E4) = false +< (~0.5E~323, 0.123E2) = true +> (~0.5E~323, 0.123E2) = false +== (~0.5E~323, 0.123E2) = false +?= (~0.5E~323, 0.123E2) = false +< (~0.5E~323, 0.3141592653589793E1) = true +> (~0.5E~323, 0.3141592653589793E1) = false +== (~0.5E~323, 0.3141592653589793E1) = false +?= (~0.5E~323, 0.3141592653589793E1) = false +< (~0.5E~323, 0.2718281828459045E1) = true +> (~0.5E~323, 0.2718281828459045E1) = false +== (~0.5E~323, 0.2718281828459045E1) = false +?= (~0.5E~323, 0.2718281828459045E1) = false +< (~0.5E~323, 0.123E1) = true +> (~0.5E~323, 0.123E1) = false +== (~0.5E~323, 0.123E1) = false +?= (~0.5E~323, 0.123E1) = false +< (~0.5E~323, 0.123) = true +> (~0.5E~323, 0.123) = false +== (~0.5E~323, 0.123) = false +?= (~0.5E~323, 0.123) = false +< (~0.5E~323, 0.123E~2) = true +> (~0.5E~323, 0.123E~2) = false +== (~0.5E~323, 0.123E~2) = false +?= (~0.5E~323, 0.123E~2) = false +< (~0.5E~323, 0.22250738585072014E~307) = true +> (~0.5E~323, 0.22250738585072014E~307) = false +== (~0.5E~323, 0.22250738585072014E~307) = false +?= (~0.5E~323, 0.22250738585072014E~307) = false +< (~0.5E~323, 0.11125369292536007E~307) = true +> (~0.5E~323, 0.11125369292536007E~307) = false +== (~0.5E~323, 0.11125369292536007E~307) = false +?= (~0.5E~323, 0.11125369292536007E~307) = false +< (~0.5E~323, 0.5E~323) = true +> (~0.5E~323, 0.5E~323) = false +== (~0.5E~323, 0.5E~323) = false +?= (~0.5E~323, 0.5E~323) = false +< (~0.5E~323, 0.0) = true +> (~0.5E~323, 0.0) = false +== (~0.5E~323, 0.0) = false +?= (~0.5E~323, 0.0) = false +< (~0.5E~323, ~0.17976931348623157E309) = false +> (~0.5E~323, ~0.17976931348623157E309) = true +== (~0.5E~323, ~0.17976931348623157E309) = false +?= (~0.5E~323, ~0.17976931348623157E309) = false +< (~0.5E~323, ~0.8988465674311579E308) = false +> (~0.5E~323, ~0.8988465674311579E308) = true +== (~0.5E~323, ~0.8988465674311579E308) = false +?= (~0.5E~323, ~0.8988465674311579E308) = false +< (~0.5E~323, ~0.123E4) = false +> (~0.5E~323, ~0.123E4) = true +== (~0.5E~323, ~0.123E4) = false +?= (~0.5E~323, ~0.123E4) = false +< (~0.5E~323, ~0.123E2) = false +> (~0.5E~323, ~0.123E2) = true +== (~0.5E~323, ~0.123E2) = false +?= (~0.5E~323, ~0.123E2) = false +< (~0.5E~323, ~0.3141592653589793E1) = false +> (~0.5E~323, ~0.3141592653589793E1) = true +== (~0.5E~323, ~0.3141592653589793E1) = false +?= (~0.5E~323, ~0.3141592653589793E1) = false +< (~0.5E~323, ~0.2718281828459045E1) = false +> (~0.5E~323, ~0.2718281828459045E1) = true +== (~0.5E~323, ~0.2718281828459045E1) = false +?= (~0.5E~323, ~0.2718281828459045E1) = false +< (~0.5E~323, ~0.123E1) = false +> (~0.5E~323, ~0.123E1) = true +== (~0.5E~323, ~0.123E1) = false +?= (~0.5E~323, ~0.123E1) = false +< (~0.5E~323, ~0.123) = false +> (~0.5E~323, ~0.123) = true +== (~0.5E~323, ~0.123) = false +?= (~0.5E~323, ~0.123) = false +< (~0.5E~323, ~0.123E~2) = false +> (~0.5E~323, ~0.123E~2) = true +== (~0.5E~323, ~0.123E~2) = false +?= (~0.5E~323, ~0.123E~2) = false +< (~0.5E~323, ~0.22250738585072014E~307) = false +> (~0.5E~323, ~0.22250738585072014E~307) = true +== (~0.5E~323, ~0.22250738585072014E~307) = false +?= (~0.5E~323, ~0.22250738585072014E~307) = false +< (~0.5E~323, ~0.11125369292536007E~307) = false +> (~0.5E~323, ~0.11125369292536007E~307) = true +== (~0.5E~323, ~0.11125369292536007E~307) = false +?= (~0.5E~323, ~0.11125369292536007E~307) = false +< (~0.5E~323, ~0.5E~323) = false +> (~0.5E~323, ~0.5E~323) = false +== (~0.5E~323, ~0.5E~323) = true +?= (~0.5E~323, ~0.5E~323) = true +< (~0.5E~323, ~0.0) = true +> (~0.5E~323, ~0.0) = false +== (~0.5E~323, ~0.0) = false +?= (~0.5E~323, ~0.0) = false +< (~0.0, 0.17976931348623157E309) = true +> (~0.0, 0.17976931348623157E309) = false +== (~0.0, 0.17976931348623157E309) = false +?= (~0.0, 0.17976931348623157E309) = false +< (~0.0, 0.8988465674311579E308) = true +> (~0.0, 0.8988465674311579E308) = false +== (~0.0, 0.8988465674311579E308) = false +?= (~0.0, 0.8988465674311579E308) = false +< (~0.0, 0.123E4) = true +> (~0.0, 0.123E4) = false +== (~0.0, 0.123E4) = false +?= (~0.0, 0.123E4) = false +< (~0.0, 0.123E2) = true +> (~0.0, 0.123E2) = false +== (~0.0, 0.123E2) = false +?= (~0.0, 0.123E2) = false +< (~0.0, 0.3141592653589793E1) = true +> (~0.0, 0.3141592653589793E1) = false +== (~0.0, 0.3141592653589793E1) = false +?= (~0.0, 0.3141592653589793E1) = false +< (~0.0, 0.2718281828459045E1) = true +> (~0.0, 0.2718281828459045E1) = false +== (~0.0, 0.2718281828459045E1) = false +?= (~0.0, 0.2718281828459045E1) = false +< (~0.0, 0.123E1) = true +> (~0.0, 0.123E1) = false +== (~0.0, 0.123E1) = false +?= (~0.0, 0.123E1) = false +< (~0.0, 0.123) = true +> (~0.0, 0.123) = false +== (~0.0, 0.123) = false +?= (~0.0, 0.123) = false +< (~0.0, 0.123E~2) = true +> (~0.0, 0.123E~2) = false +== (~0.0, 0.123E~2) = false +?= (~0.0, 0.123E~2) = false +< (~0.0, 0.22250738585072014E~307) = true +> (~0.0, 0.22250738585072014E~307) = false +== (~0.0, 0.22250738585072014E~307) = false +?= (~0.0, 0.22250738585072014E~307) = false +< (~0.0, 0.11125369292536007E~307) = true +> (~0.0, 0.11125369292536007E~307) = false +== (~0.0, 0.11125369292536007E~307) = false +?= (~0.0, 0.11125369292536007E~307) = false +< (~0.0, 0.5E~323) = true +> (~0.0, 0.5E~323) = false +== (~0.0, 0.5E~323) = false +?= (~0.0, 0.5E~323) = false +< (~0.0, 0.0) = false +> (~0.0, 0.0) = false +== (~0.0, 0.0) = true +?= (~0.0, 0.0) = true +< (~0.0, ~0.17976931348623157E309) = false +> (~0.0, ~0.17976931348623157E309) = true +== (~0.0, ~0.17976931348623157E309) = false +?= (~0.0, ~0.17976931348623157E309) = false +< (~0.0, ~0.8988465674311579E308) = false +> (~0.0, ~0.8988465674311579E308) = true +== (~0.0, ~0.8988465674311579E308) = false +?= (~0.0, ~0.8988465674311579E308) = false +< (~0.0, ~0.123E4) = false +> (~0.0, ~0.123E4) = true +== (~0.0, ~0.123E4) = false +?= (~0.0, ~0.123E4) = false +< (~0.0, ~0.123E2) = false +> (~0.0, ~0.123E2) = true +== (~0.0, ~0.123E2) = false +?= (~0.0, ~0.123E2) = false +< (~0.0, ~0.3141592653589793E1) = false +> (~0.0, ~0.3141592653589793E1) = true +== (~0.0, ~0.3141592653589793E1) = false +?= (~0.0, ~0.3141592653589793E1) = false +< (~0.0, ~0.2718281828459045E1) = false +> (~0.0, ~0.2718281828459045E1) = true +== (~0.0, ~0.2718281828459045E1) = false +?= (~0.0, ~0.2718281828459045E1) = false +< (~0.0, ~0.123E1) = false +> (~0.0, ~0.123E1) = true +== (~0.0, ~0.123E1) = false +?= (~0.0, ~0.123E1) = false +< (~0.0, ~0.123) = false +> (~0.0, ~0.123) = true +== (~0.0, ~0.123) = false +?= (~0.0, ~0.123) = false +< (~0.0, ~0.123E~2) = false +> (~0.0, ~0.123E~2) = true +== (~0.0, ~0.123E~2) = false +?= (~0.0, ~0.123E~2) = false +< (~0.0, ~0.22250738585072014E~307) = false +> (~0.0, ~0.22250738585072014E~307) = true +== (~0.0, ~0.22250738585072014E~307) = false +?= (~0.0, ~0.22250738585072014E~307) = false +< (~0.0, ~0.11125369292536007E~307) = false +> (~0.0, ~0.11125369292536007E~307) = true +== (~0.0, ~0.11125369292536007E~307) = false +?= (~0.0, ~0.11125369292536007E~307) = false +< (~0.0, ~0.5E~323) = false +> (~0.0, ~0.5E~323) = true +== (~0.0, ~0.5E~323) = false +?= (~0.0, ~0.5E~323) = false +< (~0.0, ~0.0) = false +> (~0.0, ~0.0) = false +== (~0.0, ~0.0) = true +?= (~0.0, ~0.0) = true + +Testing compare, compareReal +compare (0.17976931348623157E309, 0.17976931348623157E309) = EQUAL +compareReal (0.17976931348623157E309, 0.17976931348623157E309) = EQUAL +compare (0.17976931348623157E309, 0.8988465674311579E308) = GREATER +compareReal (0.17976931348623157E309, 0.8988465674311579E308) = GREATER +compare (0.17976931348623157E309, 0.123E4) = GREATER +compareReal (0.17976931348623157E309, 0.123E4) = GREATER +compare (0.17976931348623157E309, 0.123E2) = GREATER +compareReal (0.17976931348623157E309, 0.123E2) = GREATER +compare (0.17976931348623157E309, 0.3141592653589793E1) = GREATER +compareReal (0.17976931348623157E309, 0.3141592653589793E1) = GREATER +compare (0.17976931348623157E309, 0.2718281828459045E1) = GREATER +compareReal (0.17976931348623157E309, 0.2718281828459045E1) = GREATER +compare (0.17976931348623157E309, 0.123E1) = GREATER +compareReal (0.17976931348623157E309, 0.123E1) = GREATER +compare (0.17976931348623157E309, 0.123) = GREATER +compareReal (0.17976931348623157E309, 0.123) = GREATER +compare (0.17976931348623157E309, 0.123E~2) = GREATER +compareReal (0.17976931348623157E309, 0.123E~2) = GREATER +compare (0.17976931348623157E309, 0.22250738585072014E~307) = GREATER +compareReal (0.17976931348623157E309, 0.22250738585072014E~307) = GREATER +compare (0.17976931348623157E309, 0.11125369292536007E~307) = GREATER +compareReal (0.17976931348623157E309, 0.11125369292536007E~307) = GREATER +compare (0.17976931348623157E309, 0.5E~323) = GREATER +compareReal (0.17976931348623157E309, 0.5E~323) = GREATER +compare (0.17976931348623157E309, 0.0) = GREATER +compareReal (0.17976931348623157E309, 0.0) = GREATER +compare (0.17976931348623157E309, ~0.17976931348623157E309) = GREATER +compareReal (0.17976931348623157E309, ~0.17976931348623157E309) = GREATER +compare (0.17976931348623157E309, ~0.8988465674311579E308) = GREATER +compareReal (0.17976931348623157E309, ~0.8988465674311579E308) = GREATER +compare (0.17976931348623157E309, ~0.123E4) = GREATER +compareReal (0.17976931348623157E309, ~0.123E4) = GREATER +compare (0.17976931348623157E309, ~0.123E2) = GREATER +compareReal (0.17976931348623157E309, ~0.123E2) = GREATER +compare (0.17976931348623157E309, ~0.3141592653589793E1) = GREATER +compareReal (0.17976931348623157E309, ~0.3141592653589793E1) = GREATER +compare (0.17976931348623157E309, ~0.2718281828459045E1) = GREATER +compareReal (0.17976931348623157E309, ~0.2718281828459045E1) = GREATER +compare (0.17976931348623157E309, ~0.123E1) = GREATER +compareReal (0.17976931348623157E309, ~0.123E1) = GREATER +compare (0.17976931348623157E309, ~0.123) = GREATER +compareReal (0.17976931348623157E309, ~0.123) = GREATER +compare (0.17976931348623157E309, ~0.123E~2) = GREATER +compareReal (0.17976931348623157E309, ~0.123E~2) = GREATER +compare (0.17976931348623157E309, ~0.22250738585072014E~307) = GREATER +compareReal (0.17976931348623157E309, ~0.22250738585072014E~307) = GREATER +compare (0.17976931348623157E309, ~0.11125369292536007E~307) = GREATER +compareReal (0.17976931348623157E309, ~0.11125369292536007E~307) = GREATER +compare (0.17976931348623157E309, ~0.5E~323) = GREATER +compareReal (0.17976931348623157E309, ~0.5E~323) = GREATER +compare (0.17976931348623157E309, ~0.0) = GREATER +compareReal (0.17976931348623157E309, ~0.0) = GREATER +compare (0.8988465674311579E308, 0.17976931348623157E309) = LESS +compareReal (0.8988465674311579E308, 0.17976931348623157E309) = LESS +compare (0.8988465674311579E308, 0.8988465674311579E308) = EQUAL +compareReal (0.8988465674311579E308, 0.8988465674311579E308) = EQUAL +compare (0.8988465674311579E308, 0.123E4) = GREATER +compareReal (0.8988465674311579E308, 0.123E4) = GREATER +compare (0.8988465674311579E308, 0.123E2) = GREATER +compareReal (0.8988465674311579E308, 0.123E2) = GREATER +compare (0.8988465674311579E308, 0.3141592653589793E1) = GREATER +compareReal (0.8988465674311579E308, 0.3141592653589793E1) = GREATER +compare (0.8988465674311579E308, 0.2718281828459045E1) = GREATER +compareReal (0.8988465674311579E308, 0.2718281828459045E1) = GREATER +compare (0.8988465674311579E308, 0.123E1) = GREATER +compareReal (0.8988465674311579E308, 0.123E1) = GREATER +compare (0.8988465674311579E308, 0.123) = GREATER +compareReal (0.8988465674311579E308, 0.123) = GREATER +compare (0.8988465674311579E308, 0.123E~2) = GREATER +compareReal (0.8988465674311579E308, 0.123E~2) = GREATER +compare (0.8988465674311579E308, 0.22250738585072014E~307) = GREATER +compareReal (0.8988465674311579E308, 0.22250738585072014E~307) = GREATER +compare (0.8988465674311579E308, 0.11125369292536007E~307) = GREATER +compareReal (0.8988465674311579E308, 0.11125369292536007E~307) = GREATER +compare (0.8988465674311579E308, 0.5E~323) = GREATER +compareReal (0.8988465674311579E308, 0.5E~323) = GREATER +compare (0.8988465674311579E308, 0.0) = GREATER +compareReal (0.8988465674311579E308, 0.0) = GREATER +compare (0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compareReal (0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compare (0.8988465674311579E308, ~0.8988465674311579E308) = GREATER +compareReal (0.8988465674311579E308, ~0.8988465674311579E308) = GREATER +compare (0.8988465674311579E308, ~0.123E4) = GREATER +compareReal (0.8988465674311579E308, ~0.123E4) = GREATER +compare (0.8988465674311579E308, ~0.123E2) = GREATER +compareReal (0.8988465674311579E308, ~0.123E2) = GREATER +compare (0.8988465674311579E308, ~0.3141592653589793E1) = GREATER +compareReal (0.8988465674311579E308, ~0.3141592653589793E1) = GREATER +compare (0.8988465674311579E308, ~0.2718281828459045E1) = GREATER +compareReal (0.8988465674311579E308, ~0.2718281828459045E1) = GREATER +compare (0.8988465674311579E308, ~0.123E1) = GREATER +compareReal (0.8988465674311579E308, ~0.123E1) = GREATER +compare (0.8988465674311579E308, ~0.123) = GREATER +compareReal (0.8988465674311579E308, ~0.123) = GREATER +compare (0.8988465674311579E308, ~0.123E~2) = GREATER +compareReal (0.8988465674311579E308, ~0.123E~2) = GREATER +compare (0.8988465674311579E308, ~0.22250738585072014E~307) = GREATER +compareReal (0.8988465674311579E308, ~0.22250738585072014E~307) = GREATER +compare (0.8988465674311579E308, ~0.11125369292536007E~307) = GREATER +compareReal (0.8988465674311579E308, ~0.11125369292536007E~307) = GREATER +compare (0.8988465674311579E308, ~0.5E~323) = GREATER +compareReal (0.8988465674311579E308, ~0.5E~323) = GREATER +compare (0.8988465674311579E308, ~0.0) = GREATER +compareReal (0.8988465674311579E308, ~0.0) = GREATER +compare (0.123E4, 0.17976931348623157E309) = LESS +compareReal (0.123E4, 0.17976931348623157E309) = LESS +compare (0.123E4, 0.8988465674311579E308) = LESS +compareReal (0.123E4, 0.8988465674311579E308) = LESS +compare (0.123E4, 0.123E4) = EQUAL +compareReal (0.123E4, 0.123E4) = EQUAL +compare (0.123E4, 0.123E2) = GREATER +compareReal (0.123E4, 0.123E2) = GREATER +compare (0.123E4, 0.3141592653589793E1) = GREATER +compareReal (0.123E4, 0.3141592653589793E1) = GREATER +compare (0.123E4, 0.2718281828459045E1) = GREATER +compareReal (0.123E4, 0.2718281828459045E1) = GREATER +compare (0.123E4, 0.123E1) = GREATER +compareReal (0.123E4, 0.123E1) = GREATER +compare (0.123E4, 0.123) = GREATER +compareReal (0.123E4, 0.123) = GREATER +compare (0.123E4, 0.123E~2) = GREATER +compareReal (0.123E4, 0.123E~2) = GREATER +compare (0.123E4, 0.22250738585072014E~307) = GREATER +compareReal (0.123E4, 0.22250738585072014E~307) = GREATER +compare (0.123E4, 0.11125369292536007E~307) = GREATER +compareReal (0.123E4, 0.11125369292536007E~307) = GREATER +compare (0.123E4, 0.5E~323) = GREATER +compareReal (0.123E4, 0.5E~323) = GREATER +compare (0.123E4, 0.0) = GREATER +compareReal (0.123E4, 0.0) = GREATER +compare (0.123E4, ~0.17976931348623157E309) = GREATER +compareReal (0.123E4, ~0.17976931348623157E309) = GREATER +compare (0.123E4, ~0.8988465674311579E308) = GREATER +compareReal (0.123E4, ~0.8988465674311579E308) = GREATER +compare (0.123E4, ~0.123E4) = GREATER +compareReal (0.123E4, ~0.123E4) = GREATER +compare (0.123E4, ~0.123E2) = GREATER +compareReal (0.123E4, ~0.123E2) = GREATER +compare (0.123E4, ~0.3141592653589793E1) = GREATER +compareReal (0.123E4, ~0.3141592653589793E1) = GREATER +compare (0.123E4, ~0.2718281828459045E1) = GREATER +compareReal (0.123E4, ~0.2718281828459045E1) = GREATER +compare (0.123E4, ~0.123E1) = GREATER +compareReal (0.123E4, ~0.123E1) = GREATER +compare (0.123E4, ~0.123) = GREATER +compareReal (0.123E4, ~0.123) = GREATER +compare (0.123E4, ~0.123E~2) = GREATER +compareReal (0.123E4, ~0.123E~2) = GREATER +compare (0.123E4, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E4, ~0.22250738585072014E~307) = GREATER +compare (0.123E4, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E4, ~0.11125369292536007E~307) = GREATER +compare (0.123E4, ~0.5E~323) = GREATER +compareReal (0.123E4, ~0.5E~323) = GREATER +compare (0.123E4, ~0.0) = GREATER +compareReal (0.123E4, ~0.0) = GREATER +compare (0.123E2, 0.17976931348623157E309) = LESS +compareReal (0.123E2, 0.17976931348623157E309) = LESS +compare (0.123E2, 0.8988465674311579E308) = LESS +compareReal (0.123E2, 0.8988465674311579E308) = LESS +compare (0.123E2, 0.123E4) = LESS +compareReal (0.123E2, 0.123E4) = LESS +compare (0.123E2, 0.123E2) = EQUAL +compareReal (0.123E2, 0.123E2) = EQUAL +compare (0.123E2, 0.3141592653589793E1) = GREATER +compareReal (0.123E2, 0.3141592653589793E1) = GREATER +compare (0.123E2, 0.2718281828459045E1) = GREATER +compareReal (0.123E2, 0.2718281828459045E1) = GREATER +compare (0.123E2, 0.123E1) = GREATER +compareReal (0.123E2, 0.123E1) = GREATER +compare (0.123E2, 0.123) = GREATER +compareReal (0.123E2, 0.123) = GREATER +compare (0.123E2, 0.123E~2) = GREATER +compareReal (0.123E2, 0.123E~2) = GREATER +compare (0.123E2, 0.22250738585072014E~307) = GREATER +compareReal (0.123E2, 0.22250738585072014E~307) = GREATER +compare (0.123E2, 0.11125369292536007E~307) = GREATER +compareReal (0.123E2, 0.11125369292536007E~307) = GREATER +compare (0.123E2, 0.5E~323) = GREATER +compareReal (0.123E2, 0.5E~323) = GREATER +compare (0.123E2, 0.0) = GREATER +compareReal (0.123E2, 0.0) = GREATER +compare (0.123E2, ~0.17976931348623157E309) = GREATER +compareReal (0.123E2, ~0.17976931348623157E309) = GREATER +compare (0.123E2, ~0.8988465674311579E308) = GREATER +compareReal (0.123E2, ~0.8988465674311579E308) = GREATER +compare (0.123E2, ~0.123E4) = GREATER +compareReal (0.123E2, ~0.123E4) = GREATER +compare (0.123E2, ~0.123E2) = GREATER +compareReal (0.123E2, ~0.123E2) = GREATER +compare (0.123E2, ~0.3141592653589793E1) = GREATER +compareReal (0.123E2, ~0.3141592653589793E1) = GREATER +compare (0.123E2, ~0.2718281828459045E1) = GREATER +compareReal (0.123E2, ~0.2718281828459045E1) = GREATER +compare (0.123E2, ~0.123E1) = GREATER +compareReal (0.123E2, ~0.123E1) = GREATER +compare (0.123E2, ~0.123) = GREATER +compareReal (0.123E2, ~0.123) = GREATER +compare (0.123E2, ~0.123E~2) = GREATER +compareReal (0.123E2, ~0.123E~2) = GREATER +compare (0.123E2, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E2, ~0.22250738585072014E~307) = GREATER +compare (0.123E2, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E2, ~0.11125369292536007E~307) = GREATER +compare (0.123E2, ~0.5E~323) = GREATER +compareReal (0.123E2, ~0.5E~323) = GREATER +compare (0.123E2, ~0.0) = GREATER +compareReal (0.123E2, ~0.0) = GREATER +compare (0.3141592653589793E1, 0.17976931348623157E309) = LESS +compareReal (0.3141592653589793E1, 0.17976931348623157E309) = LESS +compare (0.3141592653589793E1, 0.8988465674311579E308) = LESS +compareReal (0.3141592653589793E1, 0.8988465674311579E308) = LESS +compare (0.3141592653589793E1, 0.123E4) = LESS +compareReal (0.3141592653589793E1, 0.123E4) = LESS +compare (0.3141592653589793E1, 0.123E2) = LESS +compareReal (0.3141592653589793E1, 0.123E2) = LESS +compare (0.3141592653589793E1, 0.3141592653589793E1) = EQUAL +compareReal (0.3141592653589793E1, 0.3141592653589793E1) = EQUAL +compare (0.3141592653589793E1, 0.2718281828459045E1) = GREATER +compareReal (0.3141592653589793E1, 0.2718281828459045E1) = GREATER +compare (0.3141592653589793E1, 0.123E1) = GREATER +compareReal (0.3141592653589793E1, 0.123E1) = GREATER +compare (0.3141592653589793E1, 0.123) = GREATER +compareReal (0.3141592653589793E1, 0.123) = GREATER +compare (0.3141592653589793E1, 0.123E~2) = GREATER +compareReal (0.3141592653589793E1, 0.123E~2) = GREATER +compare (0.3141592653589793E1, 0.22250738585072014E~307) = GREATER +compareReal (0.3141592653589793E1, 0.22250738585072014E~307) = GREATER +compare (0.3141592653589793E1, 0.11125369292536007E~307) = GREATER +compareReal (0.3141592653589793E1, 0.11125369292536007E~307) = GREATER +compare (0.3141592653589793E1, 0.5E~323) = GREATER +compareReal (0.3141592653589793E1, 0.5E~323) = GREATER +compare (0.3141592653589793E1, 0.0) = GREATER +compareReal (0.3141592653589793E1, 0.0) = GREATER +compare (0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compareReal (0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compare (0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compareReal (0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compare (0.3141592653589793E1, ~0.123E4) = GREATER +compareReal (0.3141592653589793E1, ~0.123E4) = GREATER +compare (0.3141592653589793E1, ~0.123E2) = GREATER +compareReal (0.3141592653589793E1, ~0.123E2) = GREATER +compare (0.3141592653589793E1, ~0.3141592653589793E1) = GREATER +compareReal (0.3141592653589793E1, ~0.3141592653589793E1) = GREATER +compare (0.3141592653589793E1, ~0.2718281828459045E1) = GREATER +compareReal (0.3141592653589793E1, ~0.2718281828459045E1) = GREATER +compare (0.3141592653589793E1, ~0.123E1) = GREATER +compareReal (0.3141592653589793E1, ~0.123E1) = GREATER +compare (0.3141592653589793E1, ~0.123) = GREATER +compareReal (0.3141592653589793E1, ~0.123) = GREATER +compare (0.3141592653589793E1, ~0.123E~2) = GREATER +compareReal (0.3141592653589793E1, ~0.123E~2) = GREATER +compare (0.3141592653589793E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.3141592653589793E1, ~0.22250738585072014E~307) = GREATER +compare (0.3141592653589793E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.3141592653589793E1, ~0.11125369292536007E~307) = GREATER +compare (0.3141592653589793E1, ~0.5E~323) = GREATER +compareReal (0.3141592653589793E1, ~0.5E~323) = GREATER +compare (0.3141592653589793E1, ~0.0) = GREATER +compareReal (0.3141592653589793E1, ~0.0) = GREATER +compare (0.2718281828459045E1, 0.17976931348623157E309) = LESS +compareReal (0.2718281828459045E1, 0.17976931348623157E309) = LESS +compare (0.2718281828459045E1, 0.8988465674311579E308) = LESS +compareReal (0.2718281828459045E1, 0.8988465674311579E308) = LESS +compare (0.2718281828459045E1, 0.123E4) = LESS +compareReal (0.2718281828459045E1, 0.123E4) = LESS +compare (0.2718281828459045E1, 0.123E2) = LESS +compareReal (0.2718281828459045E1, 0.123E2) = LESS +compare (0.2718281828459045E1, 0.3141592653589793E1) = LESS +compareReal (0.2718281828459045E1, 0.3141592653589793E1) = LESS +compare (0.2718281828459045E1, 0.2718281828459045E1) = EQUAL +compareReal (0.2718281828459045E1, 0.2718281828459045E1) = EQUAL +compare (0.2718281828459045E1, 0.123E1) = GREATER +compareReal (0.2718281828459045E1, 0.123E1) = GREATER +compare (0.2718281828459045E1, 0.123) = GREATER +compareReal (0.2718281828459045E1, 0.123) = GREATER +compare (0.2718281828459045E1, 0.123E~2) = GREATER +compareReal (0.2718281828459045E1, 0.123E~2) = GREATER +compare (0.2718281828459045E1, 0.22250738585072014E~307) = GREATER +compareReal (0.2718281828459045E1, 0.22250738585072014E~307) = GREATER +compare (0.2718281828459045E1, 0.11125369292536007E~307) = GREATER +compareReal (0.2718281828459045E1, 0.11125369292536007E~307) = GREATER +compare (0.2718281828459045E1, 0.5E~323) = GREATER +compareReal (0.2718281828459045E1, 0.5E~323) = GREATER +compare (0.2718281828459045E1, 0.0) = GREATER +compareReal (0.2718281828459045E1, 0.0) = GREATER +compare (0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compareReal (0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compare (0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compareReal (0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compare (0.2718281828459045E1, ~0.123E4) = GREATER +compareReal (0.2718281828459045E1, ~0.123E4) = GREATER +compare (0.2718281828459045E1, ~0.123E2) = GREATER +compareReal (0.2718281828459045E1, ~0.123E2) = GREATER +compare (0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compareReal (0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compare (0.2718281828459045E1, ~0.2718281828459045E1) = GREATER +compareReal (0.2718281828459045E1, ~0.2718281828459045E1) = GREATER +compare (0.2718281828459045E1, ~0.123E1) = GREATER +compareReal (0.2718281828459045E1, ~0.123E1) = GREATER +compare (0.2718281828459045E1, ~0.123) = GREATER +compareReal (0.2718281828459045E1, ~0.123) = GREATER +compare (0.2718281828459045E1, ~0.123E~2) = GREATER +compareReal (0.2718281828459045E1, ~0.123E~2) = GREATER +compare (0.2718281828459045E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.2718281828459045E1, ~0.22250738585072014E~307) = GREATER +compare (0.2718281828459045E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.2718281828459045E1, ~0.11125369292536007E~307) = GREATER +compare (0.2718281828459045E1, ~0.5E~323) = GREATER +compareReal (0.2718281828459045E1, ~0.5E~323) = GREATER +compare (0.2718281828459045E1, ~0.0) = GREATER +compareReal (0.2718281828459045E1, ~0.0) = GREATER +compare (0.123E1, 0.17976931348623157E309) = LESS +compareReal (0.123E1, 0.17976931348623157E309) = LESS +compare (0.123E1, 0.8988465674311579E308) = LESS +compareReal (0.123E1, 0.8988465674311579E308) = LESS +compare (0.123E1, 0.123E4) = LESS +compareReal (0.123E1, 0.123E4) = LESS +compare (0.123E1, 0.123E2) = LESS +compareReal (0.123E1, 0.123E2) = LESS +compare (0.123E1, 0.3141592653589793E1) = LESS +compareReal (0.123E1, 0.3141592653589793E1) = LESS +compare (0.123E1, 0.2718281828459045E1) = LESS +compareReal (0.123E1, 0.2718281828459045E1) = LESS +compare (0.123E1, 0.123E1) = EQUAL +compareReal (0.123E1, 0.123E1) = EQUAL +compare (0.123E1, 0.123) = GREATER +compareReal (0.123E1, 0.123) = GREATER +compare (0.123E1, 0.123E~2) = GREATER +compareReal (0.123E1, 0.123E~2) = GREATER +compare (0.123E1, 0.22250738585072014E~307) = GREATER +compareReal (0.123E1, 0.22250738585072014E~307) = GREATER +compare (0.123E1, 0.11125369292536007E~307) = GREATER +compareReal (0.123E1, 0.11125369292536007E~307) = GREATER +compare (0.123E1, 0.5E~323) = GREATER +compareReal (0.123E1, 0.5E~323) = GREATER +compare (0.123E1, 0.0) = GREATER +compareReal (0.123E1, 0.0) = GREATER +compare (0.123E1, ~0.17976931348623157E309) = GREATER +compareReal (0.123E1, ~0.17976931348623157E309) = GREATER +compare (0.123E1, ~0.8988465674311579E308) = GREATER +compareReal (0.123E1, ~0.8988465674311579E308) = GREATER +compare (0.123E1, ~0.123E4) = GREATER +compareReal (0.123E1, ~0.123E4) = GREATER +compare (0.123E1, ~0.123E2) = GREATER +compareReal (0.123E1, ~0.123E2) = GREATER +compare (0.123E1, ~0.3141592653589793E1) = GREATER +compareReal (0.123E1, ~0.3141592653589793E1) = GREATER +compare (0.123E1, ~0.2718281828459045E1) = GREATER +compareReal (0.123E1, ~0.2718281828459045E1) = GREATER +compare (0.123E1, ~0.123E1) = GREATER +compareReal (0.123E1, ~0.123E1) = GREATER +compare (0.123E1, ~0.123) = GREATER +compareReal (0.123E1, ~0.123) = GREATER +compare (0.123E1, ~0.123E~2) = GREATER +compareReal (0.123E1, ~0.123E~2) = GREATER +compare (0.123E1, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E1, ~0.22250738585072014E~307) = GREATER +compare (0.123E1, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E1, ~0.11125369292536007E~307) = GREATER +compare (0.123E1, ~0.5E~323) = GREATER +compareReal (0.123E1, ~0.5E~323) = GREATER +compare (0.123E1, ~0.0) = GREATER +compareReal (0.123E1, ~0.0) = GREATER +compare (0.123, 0.17976931348623157E309) = LESS +compareReal (0.123, 0.17976931348623157E309) = LESS +compare (0.123, 0.8988465674311579E308) = LESS +compareReal (0.123, 0.8988465674311579E308) = LESS +compare (0.123, 0.123E4) = LESS +compareReal (0.123, 0.123E4) = LESS +compare (0.123, 0.123E2) = LESS +compareReal (0.123, 0.123E2) = LESS +compare (0.123, 0.3141592653589793E1) = LESS +compareReal (0.123, 0.3141592653589793E1) = LESS +compare (0.123, 0.2718281828459045E1) = LESS +compareReal (0.123, 0.2718281828459045E1) = LESS +compare (0.123, 0.123E1) = LESS +compareReal (0.123, 0.123E1) = LESS +compare (0.123, 0.123) = EQUAL +compareReal (0.123, 0.123) = EQUAL +compare (0.123, 0.123E~2) = GREATER +compareReal (0.123, 0.123E~2) = GREATER +compare (0.123, 0.22250738585072014E~307) = GREATER +compareReal (0.123, 0.22250738585072014E~307) = GREATER +compare (0.123, 0.11125369292536007E~307) = GREATER +compareReal (0.123, 0.11125369292536007E~307) = GREATER +compare (0.123, 0.5E~323) = GREATER +compareReal (0.123, 0.5E~323) = GREATER +compare (0.123, 0.0) = GREATER +compareReal (0.123, 0.0) = GREATER +compare (0.123, ~0.17976931348623157E309) = GREATER +compareReal (0.123, ~0.17976931348623157E309) = GREATER +compare (0.123, ~0.8988465674311579E308) = GREATER +compareReal (0.123, ~0.8988465674311579E308) = GREATER +compare (0.123, ~0.123E4) = GREATER +compareReal (0.123, ~0.123E4) = GREATER +compare (0.123, ~0.123E2) = GREATER +compareReal (0.123, ~0.123E2) = GREATER +compare (0.123, ~0.3141592653589793E1) = GREATER +compareReal (0.123, ~0.3141592653589793E1) = GREATER +compare (0.123, ~0.2718281828459045E1) = GREATER +compareReal (0.123, ~0.2718281828459045E1) = GREATER +compare (0.123, ~0.123E1) = GREATER +compareReal (0.123, ~0.123E1) = GREATER +compare (0.123, ~0.123) = GREATER +compareReal (0.123, ~0.123) = GREATER +compare (0.123, ~0.123E~2) = GREATER +compareReal (0.123, ~0.123E~2) = GREATER +compare (0.123, ~0.22250738585072014E~307) = GREATER +compareReal (0.123, ~0.22250738585072014E~307) = GREATER +compare (0.123, ~0.11125369292536007E~307) = GREATER +compareReal (0.123, ~0.11125369292536007E~307) = GREATER +compare (0.123, ~0.5E~323) = GREATER +compareReal (0.123, ~0.5E~323) = GREATER +compare (0.123, ~0.0) = GREATER +compareReal (0.123, ~0.0) = GREATER +compare (0.123E~2, 0.17976931348623157E309) = LESS +compareReal (0.123E~2, 0.17976931348623157E309) = LESS +compare (0.123E~2, 0.8988465674311579E308) = LESS +compareReal (0.123E~2, 0.8988465674311579E308) = LESS +compare (0.123E~2, 0.123E4) = LESS +compareReal (0.123E~2, 0.123E4) = LESS +compare (0.123E~2, 0.123E2) = LESS +compareReal (0.123E~2, 0.123E2) = LESS +compare (0.123E~2, 0.3141592653589793E1) = LESS +compareReal (0.123E~2, 0.3141592653589793E1) = LESS +compare (0.123E~2, 0.2718281828459045E1) = LESS +compareReal (0.123E~2, 0.2718281828459045E1) = LESS +compare (0.123E~2, 0.123E1) = LESS +compareReal (0.123E~2, 0.123E1) = LESS +compare (0.123E~2, 0.123) = LESS +compareReal (0.123E~2, 0.123) = LESS +compare (0.123E~2, 0.123E~2) = EQUAL +compareReal (0.123E~2, 0.123E~2) = EQUAL +compare (0.123E~2, 0.22250738585072014E~307) = GREATER +compareReal (0.123E~2, 0.22250738585072014E~307) = GREATER +compare (0.123E~2, 0.11125369292536007E~307) = GREATER +compareReal (0.123E~2, 0.11125369292536007E~307) = GREATER +compare (0.123E~2, 0.5E~323) = GREATER +compareReal (0.123E~2, 0.5E~323) = GREATER +compare (0.123E~2, 0.0) = GREATER +compareReal (0.123E~2, 0.0) = GREATER +compare (0.123E~2, ~0.17976931348623157E309) = GREATER +compareReal (0.123E~2, ~0.17976931348623157E309) = GREATER +compare (0.123E~2, ~0.8988465674311579E308) = GREATER +compareReal (0.123E~2, ~0.8988465674311579E308) = GREATER +compare (0.123E~2, ~0.123E4) = GREATER +compareReal (0.123E~2, ~0.123E4) = GREATER +compare (0.123E~2, ~0.123E2) = GREATER +compareReal (0.123E~2, ~0.123E2) = GREATER +compare (0.123E~2, ~0.3141592653589793E1) = GREATER +compareReal (0.123E~2, ~0.3141592653589793E1) = GREATER +compare (0.123E~2, ~0.2718281828459045E1) = GREATER +compareReal (0.123E~2, ~0.2718281828459045E1) = GREATER +compare (0.123E~2, ~0.123E1) = GREATER +compareReal (0.123E~2, ~0.123E1) = GREATER +compare (0.123E~2, ~0.123) = GREATER +compareReal (0.123E~2, ~0.123) = GREATER +compare (0.123E~2, ~0.123E~2) = GREATER +compareReal (0.123E~2, ~0.123E~2) = GREATER +compare (0.123E~2, ~0.22250738585072014E~307) = GREATER +compareReal (0.123E~2, ~0.22250738585072014E~307) = GREATER +compare (0.123E~2, ~0.11125369292536007E~307) = GREATER +compareReal (0.123E~2, ~0.11125369292536007E~307) = GREATER +compare (0.123E~2, ~0.5E~323) = GREATER +compareReal (0.123E~2, ~0.5E~323) = GREATER +compare (0.123E~2, ~0.0) = GREATER +compareReal (0.123E~2, ~0.0) = GREATER +compare (0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compareReal (0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compare (0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compareReal (0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compare (0.22250738585072014E~307, 0.123E4) = LESS +compareReal (0.22250738585072014E~307, 0.123E4) = LESS +compare (0.22250738585072014E~307, 0.123E2) = LESS +compareReal (0.22250738585072014E~307, 0.123E2) = LESS +compare (0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compareReal (0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compare (0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compareReal (0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compare (0.22250738585072014E~307, 0.123E1) = LESS +compareReal (0.22250738585072014E~307, 0.123E1) = LESS +compare (0.22250738585072014E~307, 0.123) = LESS +compareReal (0.22250738585072014E~307, 0.123) = LESS +compare (0.22250738585072014E~307, 0.123E~2) = LESS +compareReal (0.22250738585072014E~307, 0.123E~2) = LESS +compare (0.22250738585072014E~307, 0.22250738585072014E~307) = EQUAL +compareReal (0.22250738585072014E~307, 0.22250738585072014E~307) = EQUAL +compare (0.22250738585072014E~307, 0.11125369292536007E~307) = GREATER +compareReal (0.22250738585072014E~307, 0.11125369292536007E~307) = GREATER +compare (0.22250738585072014E~307, 0.5E~323) = GREATER +compareReal (0.22250738585072014E~307, 0.5E~323) = GREATER +compare (0.22250738585072014E~307, 0.0) = GREATER +compareReal (0.22250738585072014E~307, 0.0) = GREATER +compare (0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compareReal (0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compare (0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compareReal (0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compare (0.22250738585072014E~307, ~0.123E4) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E4) = GREATER +compare (0.22250738585072014E~307, ~0.123E2) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E2) = GREATER +compare (0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compare (0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compare (0.22250738585072014E~307, ~0.123E1) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E1) = GREATER +compare (0.22250738585072014E~307, ~0.123) = GREATER +compareReal (0.22250738585072014E~307, ~0.123) = GREATER +compare (0.22250738585072014E~307, ~0.123E~2) = GREATER +compareReal (0.22250738585072014E~307, ~0.123E~2) = GREATER +compare (0.22250738585072014E~307, ~0.22250738585072014E~307) = GREATER +compareReal (0.22250738585072014E~307, ~0.22250738585072014E~307) = GREATER +compare (0.22250738585072014E~307, ~0.11125369292536007E~307) = GREATER +compareReal (0.22250738585072014E~307, ~0.11125369292536007E~307) = GREATER +compare (0.22250738585072014E~307, ~0.5E~323) = GREATER +compareReal (0.22250738585072014E~307, ~0.5E~323) = GREATER +compare (0.22250738585072014E~307, ~0.0) = GREATER +compareReal (0.22250738585072014E~307, ~0.0) = GREATER +compare (0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compareReal (0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compare (0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compareReal (0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compare (0.11125369292536007E~307, 0.123E4) = LESS +compareReal (0.11125369292536007E~307, 0.123E4) = LESS +compare (0.11125369292536007E~307, 0.123E2) = LESS +compareReal (0.11125369292536007E~307, 0.123E2) = LESS +compare (0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compareReal (0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compare (0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compareReal (0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compare (0.11125369292536007E~307, 0.123E1) = LESS +compareReal (0.11125369292536007E~307, 0.123E1) = LESS +compare (0.11125369292536007E~307, 0.123) = LESS +compareReal (0.11125369292536007E~307, 0.123) = LESS +compare (0.11125369292536007E~307, 0.123E~2) = LESS +compareReal (0.11125369292536007E~307, 0.123E~2) = LESS +compare (0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compareReal (0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compare (0.11125369292536007E~307, 0.11125369292536007E~307) = EQUAL +compareReal (0.11125369292536007E~307, 0.11125369292536007E~307) = EQUAL +compare (0.11125369292536007E~307, 0.5E~323) = GREATER +compareReal (0.11125369292536007E~307, 0.5E~323) = GREATER +compare (0.11125369292536007E~307, 0.0) = GREATER +compareReal (0.11125369292536007E~307, 0.0) = GREATER +compare (0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compareReal (0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compare (0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compareReal (0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compare (0.11125369292536007E~307, ~0.123E4) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E4) = GREATER +compare (0.11125369292536007E~307, ~0.123E2) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E2) = GREATER +compare (0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compare (0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compare (0.11125369292536007E~307, ~0.123E1) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E1) = GREATER +compare (0.11125369292536007E~307, ~0.123) = GREATER +compareReal (0.11125369292536007E~307, ~0.123) = GREATER +compare (0.11125369292536007E~307, ~0.123E~2) = GREATER +compareReal (0.11125369292536007E~307, ~0.123E~2) = GREATER +compare (0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compareReal (0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compare (0.11125369292536007E~307, ~0.11125369292536007E~307) = GREATER +compareReal (0.11125369292536007E~307, ~0.11125369292536007E~307) = GREATER +compare (0.11125369292536007E~307, ~0.5E~323) = GREATER +compareReal (0.11125369292536007E~307, ~0.5E~323) = GREATER +compare (0.11125369292536007E~307, ~0.0) = GREATER +compareReal (0.11125369292536007E~307, ~0.0) = GREATER +compare (0.5E~323, 0.17976931348623157E309) = LESS +compareReal (0.5E~323, 0.17976931348623157E309) = LESS +compare (0.5E~323, 0.8988465674311579E308) = LESS +compareReal (0.5E~323, 0.8988465674311579E308) = LESS +compare (0.5E~323, 0.123E4) = LESS +compareReal (0.5E~323, 0.123E4) = LESS +compare (0.5E~323, 0.123E2) = LESS +compareReal (0.5E~323, 0.123E2) = LESS +compare (0.5E~323, 0.3141592653589793E1) = LESS +compareReal (0.5E~323, 0.3141592653589793E1) = LESS +compare (0.5E~323, 0.2718281828459045E1) = LESS +compareReal (0.5E~323, 0.2718281828459045E1) = LESS +compare (0.5E~323, 0.123E1) = LESS +compareReal (0.5E~323, 0.123E1) = LESS +compare (0.5E~323, 0.123) = LESS +compareReal (0.5E~323, 0.123) = LESS +compare (0.5E~323, 0.123E~2) = LESS +compareReal (0.5E~323, 0.123E~2) = LESS +compare (0.5E~323, 0.22250738585072014E~307) = LESS +compareReal (0.5E~323, 0.22250738585072014E~307) = LESS +compare (0.5E~323, 0.11125369292536007E~307) = LESS +compareReal (0.5E~323, 0.11125369292536007E~307) = LESS +compare (0.5E~323, 0.5E~323) = EQUAL +compareReal (0.5E~323, 0.5E~323) = EQUAL +compare (0.5E~323, 0.0) = GREATER +compareReal (0.5E~323, 0.0) = GREATER +compare (0.5E~323, ~0.17976931348623157E309) = GREATER +compareReal (0.5E~323, ~0.17976931348623157E309) = GREATER +compare (0.5E~323, ~0.8988465674311579E308) = GREATER +compareReal (0.5E~323, ~0.8988465674311579E308) = GREATER +compare (0.5E~323, ~0.123E4) = GREATER +compareReal (0.5E~323, ~0.123E4) = GREATER +compare (0.5E~323, ~0.123E2) = GREATER +compareReal (0.5E~323, ~0.123E2) = GREATER +compare (0.5E~323, ~0.3141592653589793E1) = GREATER +compareReal (0.5E~323, ~0.3141592653589793E1) = GREATER +compare (0.5E~323, ~0.2718281828459045E1) = GREATER +compareReal (0.5E~323, ~0.2718281828459045E1) = GREATER +compare (0.5E~323, ~0.123E1) = GREATER +compareReal (0.5E~323, ~0.123E1) = GREATER +compare (0.5E~323, ~0.123) = GREATER +compareReal (0.5E~323, ~0.123) = GREATER +compare (0.5E~323, ~0.123E~2) = GREATER +compareReal (0.5E~323, ~0.123E~2) = GREATER +compare (0.5E~323, ~0.22250738585072014E~307) = GREATER +compareReal (0.5E~323, ~0.22250738585072014E~307) = GREATER +compare (0.5E~323, ~0.11125369292536007E~307) = GREATER +compareReal (0.5E~323, ~0.11125369292536007E~307) = GREATER +compare (0.5E~323, ~0.5E~323) = GREATER +compareReal (0.5E~323, ~0.5E~323) = GREATER +compare (0.5E~323, ~0.0) = GREATER +compareReal (0.5E~323, ~0.0) = GREATER +compare (0.0, 0.17976931348623157E309) = LESS +compareReal (0.0, 0.17976931348623157E309) = LESS +compare (0.0, 0.8988465674311579E308) = LESS +compareReal (0.0, 0.8988465674311579E308) = LESS +compare (0.0, 0.123E4) = LESS +compareReal (0.0, 0.123E4) = LESS +compare (0.0, 0.123E2) = LESS +compareReal (0.0, 0.123E2) = LESS +compare (0.0, 0.3141592653589793E1) = LESS +compareReal (0.0, 0.3141592653589793E1) = LESS +compare (0.0, 0.2718281828459045E1) = LESS +compareReal (0.0, 0.2718281828459045E1) = LESS +compare (0.0, 0.123E1) = LESS +compareReal (0.0, 0.123E1) = LESS +compare (0.0, 0.123) = LESS +compareReal (0.0, 0.123) = LESS +compare (0.0, 0.123E~2) = LESS +compareReal (0.0, 0.123E~2) = LESS +compare (0.0, 0.22250738585072014E~307) = LESS +compareReal (0.0, 0.22250738585072014E~307) = LESS +compare (0.0, 0.11125369292536007E~307) = LESS +compareReal (0.0, 0.11125369292536007E~307) = LESS +compare (0.0, 0.5E~323) = LESS +compareReal (0.0, 0.5E~323) = LESS +compare (0.0, 0.0) = EQUAL +compareReal (0.0, 0.0) = EQUAL +compare (0.0, ~0.17976931348623157E309) = GREATER +compareReal (0.0, ~0.17976931348623157E309) = GREATER +compare (0.0, ~0.8988465674311579E308) = GREATER +compareReal (0.0, ~0.8988465674311579E308) = GREATER +compare (0.0, ~0.123E4) = GREATER +compareReal (0.0, ~0.123E4) = GREATER +compare (0.0, ~0.123E2) = GREATER +compareReal (0.0, ~0.123E2) = GREATER +compare (0.0, ~0.3141592653589793E1) = GREATER +compareReal (0.0, ~0.3141592653589793E1) = GREATER +compare (0.0, ~0.2718281828459045E1) = GREATER +compareReal (0.0, ~0.2718281828459045E1) = GREATER +compare (0.0, ~0.123E1) = GREATER +compareReal (0.0, ~0.123E1) = GREATER +compare (0.0, ~0.123) = GREATER +compareReal (0.0, ~0.123) = GREATER +compare (0.0, ~0.123E~2) = GREATER +compareReal (0.0, ~0.123E~2) = GREATER +compare (0.0, ~0.22250738585072014E~307) = GREATER +compareReal (0.0, ~0.22250738585072014E~307) = GREATER +compare (0.0, ~0.11125369292536007E~307) = GREATER +compareReal (0.0, ~0.11125369292536007E~307) = GREATER +compare (0.0, ~0.5E~323) = GREATER +compareReal (0.0, ~0.5E~323) = GREATER +compare (0.0, ~0.0) = EQUAL +compareReal (0.0, ~0.0) = EQUAL +compare (~0.17976931348623157E309, 0.17976931348623157E309) = LESS +compareReal (~0.17976931348623157E309, 0.17976931348623157E309) = LESS +compare (~0.17976931348623157E309, 0.8988465674311579E308) = LESS +compareReal (~0.17976931348623157E309, 0.8988465674311579E308) = LESS +compare (~0.17976931348623157E309, 0.123E4) = LESS +compareReal (~0.17976931348623157E309, 0.123E4) = LESS +compare (~0.17976931348623157E309, 0.123E2) = LESS +compareReal (~0.17976931348623157E309, 0.123E2) = LESS +compare (~0.17976931348623157E309, 0.3141592653589793E1) = LESS +compareReal (~0.17976931348623157E309, 0.3141592653589793E1) = LESS +compare (~0.17976931348623157E309, 0.2718281828459045E1) = LESS +compareReal (~0.17976931348623157E309, 0.2718281828459045E1) = LESS +compare (~0.17976931348623157E309, 0.123E1) = LESS +compareReal (~0.17976931348623157E309, 0.123E1) = LESS +compare (~0.17976931348623157E309, 0.123) = LESS +compareReal (~0.17976931348623157E309, 0.123) = LESS +compare (~0.17976931348623157E309, 0.123E~2) = LESS +compareReal (~0.17976931348623157E309, 0.123E~2) = LESS +compare (~0.17976931348623157E309, 0.22250738585072014E~307) = LESS +compareReal (~0.17976931348623157E309, 0.22250738585072014E~307) = LESS +compare (~0.17976931348623157E309, 0.11125369292536007E~307) = LESS +compareReal (~0.17976931348623157E309, 0.11125369292536007E~307) = LESS +compare (~0.17976931348623157E309, 0.5E~323) = LESS +compareReal (~0.17976931348623157E309, 0.5E~323) = LESS +compare (~0.17976931348623157E309, 0.0) = LESS +compareReal (~0.17976931348623157E309, 0.0) = LESS +compare (~0.17976931348623157E309, ~0.17976931348623157E309) = EQUAL +compareReal (~0.17976931348623157E309, ~0.17976931348623157E309) = EQUAL +compare (~0.17976931348623157E309, ~0.8988465674311579E308) = LESS +compareReal (~0.17976931348623157E309, ~0.8988465674311579E308) = LESS +compare (~0.17976931348623157E309, ~0.123E4) = LESS +compareReal (~0.17976931348623157E309, ~0.123E4) = LESS +compare (~0.17976931348623157E309, ~0.123E2) = LESS +compareReal (~0.17976931348623157E309, ~0.123E2) = LESS +compare (~0.17976931348623157E309, ~0.3141592653589793E1) = LESS +compareReal (~0.17976931348623157E309, ~0.3141592653589793E1) = LESS +compare (~0.17976931348623157E309, ~0.2718281828459045E1) = LESS +compareReal (~0.17976931348623157E309, ~0.2718281828459045E1) = LESS +compare (~0.17976931348623157E309, ~0.123E1) = LESS +compareReal (~0.17976931348623157E309, ~0.123E1) = LESS +compare (~0.17976931348623157E309, ~0.123) = LESS +compareReal (~0.17976931348623157E309, ~0.123) = LESS +compare (~0.17976931348623157E309, ~0.123E~2) = LESS +compareReal (~0.17976931348623157E309, ~0.123E~2) = LESS +compare (~0.17976931348623157E309, ~0.22250738585072014E~307) = LESS +compareReal (~0.17976931348623157E309, ~0.22250738585072014E~307) = LESS +compare (~0.17976931348623157E309, ~0.11125369292536007E~307) = LESS +compareReal (~0.17976931348623157E309, ~0.11125369292536007E~307) = LESS +compare (~0.17976931348623157E309, ~0.5E~323) = LESS +compareReal (~0.17976931348623157E309, ~0.5E~323) = LESS +compare (~0.17976931348623157E309, ~0.0) = LESS +compareReal (~0.17976931348623157E309, ~0.0) = LESS +compare (~0.8988465674311579E308, 0.17976931348623157E309) = LESS +compareReal (~0.8988465674311579E308, 0.17976931348623157E309) = LESS +compare (~0.8988465674311579E308, 0.8988465674311579E308) = LESS +compareReal (~0.8988465674311579E308, 0.8988465674311579E308) = LESS +compare (~0.8988465674311579E308, 0.123E4) = LESS +compareReal (~0.8988465674311579E308, 0.123E4) = LESS +compare (~0.8988465674311579E308, 0.123E2) = LESS +compareReal (~0.8988465674311579E308, 0.123E2) = LESS +compare (~0.8988465674311579E308, 0.3141592653589793E1) = LESS +compareReal (~0.8988465674311579E308, 0.3141592653589793E1) = LESS +compare (~0.8988465674311579E308, 0.2718281828459045E1) = LESS +compareReal (~0.8988465674311579E308, 0.2718281828459045E1) = LESS +compare (~0.8988465674311579E308, 0.123E1) = LESS +compareReal (~0.8988465674311579E308, 0.123E1) = LESS +compare (~0.8988465674311579E308, 0.123) = LESS +compareReal (~0.8988465674311579E308, 0.123) = LESS +compare (~0.8988465674311579E308, 0.123E~2) = LESS +compareReal (~0.8988465674311579E308, 0.123E~2) = LESS +compare (~0.8988465674311579E308, 0.22250738585072014E~307) = LESS +compareReal (~0.8988465674311579E308, 0.22250738585072014E~307) = LESS +compare (~0.8988465674311579E308, 0.11125369292536007E~307) = LESS +compareReal (~0.8988465674311579E308, 0.11125369292536007E~307) = LESS +compare (~0.8988465674311579E308, 0.5E~323) = LESS +compareReal (~0.8988465674311579E308, 0.5E~323) = LESS +compare (~0.8988465674311579E308, 0.0) = LESS +compareReal (~0.8988465674311579E308, 0.0) = LESS +compare (~0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compareReal (~0.8988465674311579E308, ~0.17976931348623157E309) = GREATER +compare (~0.8988465674311579E308, ~0.8988465674311579E308) = EQUAL +compareReal (~0.8988465674311579E308, ~0.8988465674311579E308) = EQUAL +compare (~0.8988465674311579E308, ~0.123E4) = LESS +compareReal (~0.8988465674311579E308, ~0.123E4) = LESS +compare (~0.8988465674311579E308, ~0.123E2) = LESS +compareReal (~0.8988465674311579E308, ~0.123E2) = LESS +compare (~0.8988465674311579E308, ~0.3141592653589793E1) = LESS +compareReal (~0.8988465674311579E308, ~0.3141592653589793E1) = LESS +compare (~0.8988465674311579E308, ~0.2718281828459045E1) = LESS +compareReal (~0.8988465674311579E308, ~0.2718281828459045E1) = LESS +compare (~0.8988465674311579E308, ~0.123E1) = LESS +compareReal (~0.8988465674311579E308, ~0.123E1) = LESS +compare (~0.8988465674311579E308, ~0.123) = LESS +compareReal (~0.8988465674311579E308, ~0.123) = LESS +compare (~0.8988465674311579E308, ~0.123E~2) = LESS +compareReal (~0.8988465674311579E308, ~0.123E~2) = LESS +compare (~0.8988465674311579E308, ~0.22250738585072014E~307) = LESS +compareReal (~0.8988465674311579E308, ~0.22250738585072014E~307) = LESS +compare (~0.8988465674311579E308, ~0.11125369292536007E~307) = LESS +compareReal (~0.8988465674311579E308, ~0.11125369292536007E~307) = LESS +compare (~0.8988465674311579E308, ~0.5E~323) = LESS +compareReal (~0.8988465674311579E308, ~0.5E~323) = LESS +compare (~0.8988465674311579E308, ~0.0) = LESS +compareReal (~0.8988465674311579E308, ~0.0) = LESS +compare (~0.123E4, 0.17976931348623157E309) = LESS +compareReal (~0.123E4, 0.17976931348623157E309) = LESS +compare (~0.123E4, 0.8988465674311579E308) = LESS +compareReal (~0.123E4, 0.8988465674311579E308) = LESS +compare (~0.123E4, 0.123E4) = LESS +compareReal (~0.123E4, 0.123E4) = LESS +compare (~0.123E4, 0.123E2) = LESS +compareReal (~0.123E4, 0.123E2) = LESS +compare (~0.123E4, 0.3141592653589793E1) = LESS +compareReal (~0.123E4, 0.3141592653589793E1) = LESS +compare (~0.123E4, 0.2718281828459045E1) = LESS +compareReal (~0.123E4, 0.2718281828459045E1) = LESS +compare (~0.123E4, 0.123E1) = LESS +compareReal (~0.123E4, 0.123E1) = LESS +compare (~0.123E4, 0.123) = LESS +compareReal (~0.123E4, 0.123) = LESS +compare (~0.123E4, 0.123E~2) = LESS +compareReal (~0.123E4, 0.123E~2) = LESS +compare (~0.123E4, 0.22250738585072014E~307) = LESS +compareReal (~0.123E4, 0.22250738585072014E~307) = LESS +compare (~0.123E4, 0.11125369292536007E~307) = LESS +compareReal (~0.123E4, 0.11125369292536007E~307) = LESS +compare (~0.123E4, 0.5E~323) = LESS +compareReal (~0.123E4, 0.5E~323) = LESS +compare (~0.123E4, 0.0) = LESS +compareReal (~0.123E4, 0.0) = LESS +compare (~0.123E4, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E4, ~0.17976931348623157E309) = GREATER +compare (~0.123E4, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E4, ~0.8988465674311579E308) = GREATER +compare (~0.123E4, ~0.123E4) = EQUAL +compareReal (~0.123E4, ~0.123E4) = EQUAL +compare (~0.123E4, ~0.123E2) = LESS +compareReal (~0.123E4, ~0.123E2) = LESS +compare (~0.123E4, ~0.3141592653589793E1) = LESS +compareReal (~0.123E4, ~0.3141592653589793E1) = LESS +compare (~0.123E4, ~0.2718281828459045E1) = LESS +compareReal (~0.123E4, ~0.2718281828459045E1) = LESS +compare (~0.123E4, ~0.123E1) = LESS +compareReal (~0.123E4, ~0.123E1) = LESS +compare (~0.123E4, ~0.123) = LESS +compareReal (~0.123E4, ~0.123) = LESS +compare (~0.123E4, ~0.123E~2) = LESS +compareReal (~0.123E4, ~0.123E~2) = LESS +compare (~0.123E4, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E4, ~0.22250738585072014E~307) = LESS +compare (~0.123E4, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E4, ~0.11125369292536007E~307) = LESS +compare (~0.123E4, ~0.5E~323) = LESS +compareReal (~0.123E4, ~0.5E~323) = LESS +compare (~0.123E4, ~0.0) = LESS +compareReal (~0.123E4, ~0.0) = LESS +compare (~0.123E2, 0.17976931348623157E309) = LESS +compareReal (~0.123E2, 0.17976931348623157E309) = LESS +compare (~0.123E2, 0.8988465674311579E308) = LESS +compareReal (~0.123E2, 0.8988465674311579E308) = LESS +compare (~0.123E2, 0.123E4) = LESS +compareReal (~0.123E2, 0.123E4) = LESS +compare (~0.123E2, 0.123E2) = LESS +compareReal (~0.123E2, 0.123E2) = LESS +compare (~0.123E2, 0.3141592653589793E1) = LESS +compareReal (~0.123E2, 0.3141592653589793E1) = LESS +compare (~0.123E2, 0.2718281828459045E1) = LESS +compareReal (~0.123E2, 0.2718281828459045E1) = LESS +compare (~0.123E2, 0.123E1) = LESS +compareReal (~0.123E2, 0.123E1) = LESS +compare (~0.123E2, 0.123) = LESS +compareReal (~0.123E2, 0.123) = LESS +compare (~0.123E2, 0.123E~2) = LESS +compareReal (~0.123E2, 0.123E~2) = LESS +compare (~0.123E2, 0.22250738585072014E~307) = LESS +compareReal (~0.123E2, 0.22250738585072014E~307) = LESS +compare (~0.123E2, 0.11125369292536007E~307) = LESS +compareReal (~0.123E2, 0.11125369292536007E~307) = LESS +compare (~0.123E2, 0.5E~323) = LESS +compareReal (~0.123E2, 0.5E~323) = LESS +compare (~0.123E2, 0.0) = LESS +compareReal (~0.123E2, 0.0) = LESS +compare (~0.123E2, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E2, ~0.17976931348623157E309) = GREATER +compare (~0.123E2, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E2, ~0.8988465674311579E308) = GREATER +compare (~0.123E2, ~0.123E4) = GREATER +compareReal (~0.123E2, ~0.123E4) = GREATER +compare (~0.123E2, ~0.123E2) = EQUAL +compareReal (~0.123E2, ~0.123E2) = EQUAL +compare (~0.123E2, ~0.3141592653589793E1) = LESS +compareReal (~0.123E2, ~0.3141592653589793E1) = LESS +compare (~0.123E2, ~0.2718281828459045E1) = LESS +compareReal (~0.123E2, ~0.2718281828459045E1) = LESS +compare (~0.123E2, ~0.123E1) = LESS +compareReal (~0.123E2, ~0.123E1) = LESS +compare (~0.123E2, ~0.123) = LESS +compareReal (~0.123E2, ~0.123) = LESS +compare (~0.123E2, ~0.123E~2) = LESS +compareReal (~0.123E2, ~0.123E~2) = LESS +compare (~0.123E2, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E2, ~0.22250738585072014E~307) = LESS +compare (~0.123E2, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E2, ~0.11125369292536007E~307) = LESS +compare (~0.123E2, ~0.5E~323) = LESS +compareReal (~0.123E2, ~0.5E~323) = LESS +compare (~0.123E2, ~0.0) = LESS +compareReal (~0.123E2, ~0.0) = LESS +compare (~0.3141592653589793E1, 0.17976931348623157E309) = LESS +compareReal (~0.3141592653589793E1, 0.17976931348623157E309) = LESS +compare (~0.3141592653589793E1, 0.8988465674311579E308) = LESS +compareReal (~0.3141592653589793E1, 0.8988465674311579E308) = LESS +compare (~0.3141592653589793E1, 0.123E4) = LESS +compareReal (~0.3141592653589793E1, 0.123E4) = LESS +compare (~0.3141592653589793E1, 0.123E2) = LESS +compareReal (~0.3141592653589793E1, 0.123E2) = LESS +compare (~0.3141592653589793E1, 0.3141592653589793E1) = LESS +compareReal (~0.3141592653589793E1, 0.3141592653589793E1) = LESS +compare (~0.3141592653589793E1, 0.2718281828459045E1) = LESS +compareReal (~0.3141592653589793E1, 0.2718281828459045E1) = LESS +compare (~0.3141592653589793E1, 0.123E1) = LESS +compareReal (~0.3141592653589793E1, 0.123E1) = LESS +compare (~0.3141592653589793E1, 0.123) = LESS +compareReal (~0.3141592653589793E1, 0.123) = LESS +compare (~0.3141592653589793E1, 0.123E~2) = LESS +compareReal (~0.3141592653589793E1, 0.123E~2) = LESS +compare (~0.3141592653589793E1, 0.22250738585072014E~307) = LESS +compareReal (~0.3141592653589793E1, 0.22250738585072014E~307) = LESS +compare (~0.3141592653589793E1, 0.11125369292536007E~307) = LESS +compareReal (~0.3141592653589793E1, 0.11125369292536007E~307) = LESS +compare (~0.3141592653589793E1, 0.5E~323) = LESS +compareReal (~0.3141592653589793E1, 0.5E~323) = LESS +compare (~0.3141592653589793E1, 0.0) = LESS +compareReal (~0.3141592653589793E1, 0.0) = LESS +compare (~0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.3141592653589793E1, ~0.17976931348623157E309) = GREATER +compare (~0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.3141592653589793E1, ~0.8988465674311579E308) = GREATER +compare (~0.3141592653589793E1, ~0.123E4) = GREATER +compareReal (~0.3141592653589793E1, ~0.123E4) = GREATER +compare (~0.3141592653589793E1, ~0.123E2) = GREATER +compareReal (~0.3141592653589793E1, ~0.123E2) = GREATER +compare (~0.3141592653589793E1, ~0.3141592653589793E1) = EQUAL +compareReal (~0.3141592653589793E1, ~0.3141592653589793E1) = EQUAL +compare (~0.3141592653589793E1, ~0.2718281828459045E1) = LESS +compareReal (~0.3141592653589793E1, ~0.2718281828459045E1) = LESS +compare (~0.3141592653589793E1, ~0.123E1) = LESS +compareReal (~0.3141592653589793E1, ~0.123E1) = LESS +compare (~0.3141592653589793E1, ~0.123) = LESS +compareReal (~0.3141592653589793E1, ~0.123) = LESS +compare (~0.3141592653589793E1, ~0.123E~2) = LESS +compareReal (~0.3141592653589793E1, ~0.123E~2) = LESS +compare (~0.3141592653589793E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.3141592653589793E1, ~0.22250738585072014E~307) = LESS +compare (~0.3141592653589793E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.3141592653589793E1, ~0.11125369292536007E~307) = LESS +compare (~0.3141592653589793E1, ~0.5E~323) = LESS +compareReal (~0.3141592653589793E1, ~0.5E~323) = LESS +compare (~0.3141592653589793E1, ~0.0) = LESS +compareReal (~0.3141592653589793E1, ~0.0) = LESS +compare (~0.2718281828459045E1, 0.17976931348623157E309) = LESS +compareReal (~0.2718281828459045E1, 0.17976931348623157E309) = LESS +compare (~0.2718281828459045E1, 0.8988465674311579E308) = LESS +compareReal (~0.2718281828459045E1, 0.8988465674311579E308) = LESS +compare (~0.2718281828459045E1, 0.123E4) = LESS +compareReal (~0.2718281828459045E1, 0.123E4) = LESS +compare (~0.2718281828459045E1, 0.123E2) = LESS +compareReal (~0.2718281828459045E1, 0.123E2) = LESS +compare (~0.2718281828459045E1, 0.3141592653589793E1) = LESS +compareReal (~0.2718281828459045E1, 0.3141592653589793E1) = LESS +compare (~0.2718281828459045E1, 0.2718281828459045E1) = LESS +compareReal (~0.2718281828459045E1, 0.2718281828459045E1) = LESS +compare (~0.2718281828459045E1, 0.123E1) = LESS +compareReal (~0.2718281828459045E1, 0.123E1) = LESS +compare (~0.2718281828459045E1, 0.123) = LESS +compareReal (~0.2718281828459045E1, 0.123) = LESS +compare (~0.2718281828459045E1, 0.123E~2) = LESS +compareReal (~0.2718281828459045E1, 0.123E~2) = LESS +compare (~0.2718281828459045E1, 0.22250738585072014E~307) = LESS +compareReal (~0.2718281828459045E1, 0.22250738585072014E~307) = LESS +compare (~0.2718281828459045E1, 0.11125369292536007E~307) = LESS +compareReal (~0.2718281828459045E1, 0.11125369292536007E~307) = LESS +compare (~0.2718281828459045E1, 0.5E~323) = LESS +compareReal (~0.2718281828459045E1, 0.5E~323) = LESS +compare (~0.2718281828459045E1, 0.0) = LESS +compareReal (~0.2718281828459045E1, 0.0) = LESS +compare (~0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.2718281828459045E1, ~0.17976931348623157E309) = GREATER +compare (~0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.2718281828459045E1, ~0.8988465674311579E308) = GREATER +compare (~0.2718281828459045E1, ~0.123E4) = GREATER +compareReal (~0.2718281828459045E1, ~0.123E4) = GREATER +compare (~0.2718281828459045E1, ~0.123E2) = GREATER +compareReal (~0.2718281828459045E1, ~0.123E2) = GREATER +compare (~0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compareReal (~0.2718281828459045E1, ~0.3141592653589793E1) = GREATER +compare (~0.2718281828459045E1, ~0.2718281828459045E1) = EQUAL +compareReal (~0.2718281828459045E1, ~0.2718281828459045E1) = EQUAL +compare (~0.2718281828459045E1, ~0.123E1) = LESS +compareReal (~0.2718281828459045E1, ~0.123E1) = LESS +compare (~0.2718281828459045E1, ~0.123) = LESS +compareReal (~0.2718281828459045E1, ~0.123) = LESS +compare (~0.2718281828459045E1, ~0.123E~2) = LESS +compareReal (~0.2718281828459045E1, ~0.123E~2) = LESS +compare (~0.2718281828459045E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.2718281828459045E1, ~0.22250738585072014E~307) = LESS +compare (~0.2718281828459045E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.2718281828459045E1, ~0.11125369292536007E~307) = LESS +compare (~0.2718281828459045E1, ~0.5E~323) = LESS +compareReal (~0.2718281828459045E1, ~0.5E~323) = LESS +compare (~0.2718281828459045E1, ~0.0) = LESS +compareReal (~0.2718281828459045E1, ~0.0) = LESS +compare (~0.123E1, 0.17976931348623157E309) = LESS +compareReal (~0.123E1, 0.17976931348623157E309) = LESS +compare (~0.123E1, 0.8988465674311579E308) = LESS +compareReal (~0.123E1, 0.8988465674311579E308) = LESS +compare (~0.123E1, 0.123E4) = LESS +compareReal (~0.123E1, 0.123E4) = LESS +compare (~0.123E1, 0.123E2) = LESS +compareReal (~0.123E1, 0.123E2) = LESS +compare (~0.123E1, 0.3141592653589793E1) = LESS +compareReal (~0.123E1, 0.3141592653589793E1) = LESS +compare (~0.123E1, 0.2718281828459045E1) = LESS +compareReal (~0.123E1, 0.2718281828459045E1) = LESS +compare (~0.123E1, 0.123E1) = LESS +compareReal (~0.123E1, 0.123E1) = LESS +compare (~0.123E1, 0.123) = LESS +compareReal (~0.123E1, 0.123) = LESS +compare (~0.123E1, 0.123E~2) = LESS +compareReal (~0.123E1, 0.123E~2) = LESS +compare (~0.123E1, 0.22250738585072014E~307) = LESS +compareReal (~0.123E1, 0.22250738585072014E~307) = LESS +compare (~0.123E1, 0.11125369292536007E~307) = LESS +compareReal (~0.123E1, 0.11125369292536007E~307) = LESS +compare (~0.123E1, 0.5E~323) = LESS +compareReal (~0.123E1, 0.5E~323) = LESS +compare (~0.123E1, 0.0) = LESS +compareReal (~0.123E1, 0.0) = LESS +compare (~0.123E1, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E1, ~0.17976931348623157E309) = GREATER +compare (~0.123E1, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E1, ~0.8988465674311579E308) = GREATER +compare (~0.123E1, ~0.123E4) = GREATER +compareReal (~0.123E1, ~0.123E4) = GREATER +compare (~0.123E1, ~0.123E2) = GREATER +compareReal (~0.123E1, ~0.123E2) = GREATER +compare (~0.123E1, ~0.3141592653589793E1) = GREATER +compareReal (~0.123E1, ~0.3141592653589793E1) = GREATER +compare (~0.123E1, ~0.2718281828459045E1) = GREATER +compareReal (~0.123E1, ~0.2718281828459045E1) = GREATER +compare (~0.123E1, ~0.123E1) = EQUAL +compareReal (~0.123E1, ~0.123E1) = EQUAL +compare (~0.123E1, ~0.123) = LESS +compareReal (~0.123E1, ~0.123) = LESS +compare (~0.123E1, ~0.123E~2) = LESS +compareReal (~0.123E1, ~0.123E~2) = LESS +compare (~0.123E1, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E1, ~0.22250738585072014E~307) = LESS +compare (~0.123E1, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E1, ~0.11125369292536007E~307) = LESS +compare (~0.123E1, ~0.5E~323) = LESS +compareReal (~0.123E1, ~0.5E~323) = LESS +compare (~0.123E1, ~0.0) = LESS +compareReal (~0.123E1, ~0.0) = LESS +compare (~0.123, 0.17976931348623157E309) = LESS +compareReal (~0.123, 0.17976931348623157E309) = LESS +compare (~0.123, 0.8988465674311579E308) = LESS +compareReal (~0.123, 0.8988465674311579E308) = LESS +compare (~0.123, 0.123E4) = LESS +compareReal (~0.123, 0.123E4) = LESS +compare (~0.123, 0.123E2) = LESS +compareReal (~0.123, 0.123E2) = LESS +compare (~0.123, 0.3141592653589793E1) = LESS +compareReal (~0.123, 0.3141592653589793E1) = LESS +compare (~0.123, 0.2718281828459045E1) = LESS +compareReal (~0.123, 0.2718281828459045E1) = LESS +compare (~0.123, 0.123E1) = LESS +compareReal (~0.123, 0.123E1) = LESS +compare (~0.123, 0.123) = LESS +compareReal (~0.123, 0.123) = LESS +compare (~0.123, 0.123E~2) = LESS +compareReal (~0.123, 0.123E~2) = LESS +compare (~0.123, 0.22250738585072014E~307) = LESS +compareReal (~0.123, 0.22250738585072014E~307) = LESS +compare (~0.123, 0.11125369292536007E~307) = LESS +compareReal (~0.123, 0.11125369292536007E~307) = LESS +compare (~0.123, 0.5E~323) = LESS +compareReal (~0.123, 0.5E~323) = LESS +compare (~0.123, 0.0) = LESS +compareReal (~0.123, 0.0) = LESS +compare (~0.123, ~0.17976931348623157E309) = GREATER +compareReal (~0.123, ~0.17976931348623157E309) = GREATER +compare (~0.123, ~0.8988465674311579E308) = GREATER +compareReal (~0.123, ~0.8988465674311579E308) = GREATER +compare (~0.123, ~0.123E4) = GREATER +compareReal (~0.123, ~0.123E4) = GREATER +compare (~0.123, ~0.123E2) = GREATER +compareReal (~0.123, ~0.123E2) = GREATER +compare (~0.123, ~0.3141592653589793E1) = GREATER +compareReal (~0.123, ~0.3141592653589793E1) = GREATER +compare (~0.123, ~0.2718281828459045E1) = GREATER +compareReal (~0.123, ~0.2718281828459045E1) = GREATER +compare (~0.123, ~0.123E1) = GREATER +compareReal (~0.123, ~0.123E1) = GREATER +compare (~0.123, ~0.123) = EQUAL +compareReal (~0.123, ~0.123) = EQUAL +compare (~0.123, ~0.123E~2) = LESS +compareReal (~0.123, ~0.123E~2) = LESS +compare (~0.123, ~0.22250738585072014E~307) = LESS +compareReal (~0.123, ~0.22250738585072014E~307) = LESS +compare (~0.123, ~0.11125369292536007E~307) = LESS +compareReal (~0.123, ~0.11125369292536007E~307) = LESS +compare (~0.123, ~0.5E~323) = LESS +compareReal (~0.123, ~0.5E~323) = LESS +compare (~0.123, ~0.0) = LESS +compareReal (~0.123, ~0.0) = LESS +compare (~0.123E~2, 0.17976931348623157E309) = LESS +compareReal (~0.123E~2, 0.17976931348623157E309) = LESS +compare (~0.123E~2, 0.8988465674311579E308) = LESS +compareReal (~0.123E~2, 0.8988465674311579E308) = LESS +compare (~0.123E~2, 0.123E4) = LESS +compareReal (~0.123E~2, 0.123E4) = LESS +compare (~0.123E~2, 0.123E2) = LESS +compareReal (~0.123E~2, 0.123E2) = LESS +compare (~0.123E~2, 0.3141592653589793E1) = LESS +compareReal (~0.123E~2, 0.3141592653589793E1) = LESS +compare (~0.123E~2, 0.2718281828459045E1) = LESS +compareReal (~0.123E~2, 0.2718281828459045E1) = LESS +compare (~0.123E~2, 0.123E1) = LESS +compareReal (~0.123E~2, 0.123E1) = LESS +compare (~0.123E~2, 0.123) = LESS +compareReal (~0.123E~2, 0.123) = LESS +compare (~0.123E~2, 0.123E~2) = LESS +compareReal (~0.123E~2, 0.123E~2) = LESS +compare (~0.123E~2, 0.22250738585072014E~307) = LESS +compareReal (~0.123E~2, 0.22250738585072014E~307) = LESS +compare (~0.123E~2, 0.11125369292536007E~307) = LESS +compareReal (~0.123E~2, 0.11125369292536007E~307) = LESS +compare (~0.123E~2, 0.5E~323) = LESS +compareReal (~0.123E~2, 0.5E~323) = LESS +compare (~0.123E~2, 0.0) = LESS +compareReal (~0.123E~2, 0.0) = LESS +compare (~0.123E~2, ~0.17976931348623157E309) = GREATER +compareReal (~0.123E~2, ~0.17976931348623157E309) = GREATER +compare (~0.123E~2, ~0.8988465674311579E308) = GREATER +compareReal (~0.123E~2, ~0.8988465674311579E308) = GREATER +compare (~0.123E~2, ~0.123E4) = GREATER +compareReal (~0.123E~2, ~0.123E4) = GREATER +compare (~0.123E~2, ~0.123E2) = GREATER +compareReal (~0.123E~2, ~0.123E2) = GREATER +compare (~0.123E~2, ~0.3141592653589793E1) = GREATER +compareReal (~0.123E~2, ~0.3141592653589793E1) = GREATER +compare (~0.123E~2, ~0.2718281828459045E1) = GREATER +compareReal (~0.123E~2, ~0.2718281828459045E1) = GREATER +compare (~0.123E~2, ~0.123E1) = GREATER +compareReal (~0.123E~2, ~0.123E1) = GREATER +compare (~0.123E~2, ~0.123) = GREATER +compareReal (~0.123E~2, ~0.123) = GREATER +compare (~0.123E~2, ~0.123E~2) = EQUAL +compareReal (~0.123E~2, ~0.123E~2) = EQUAL +compare (~0.123E~2, ~0.22250738585072014E~307) = LESS +compareReal (~0.123E~2, ~0.22250738585072014E~307) = LESS +compare (~0.123E~2, ~0.11125369292536007E~307) = LESS +compareReal (~0.123E~2, ~0.11125369292536007E~307) = LESS +compare (~0.123E~2, ~0.5E~323) = LESS +compareReal (~0.123E~2, ~0.5E~323) = LESS +compare (~0.123E~2, ~0.0) = LESS +compareReal (~0.123E~2, ~0.0) = LESS +compare (~0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compareReal (~0.22250738585072014E~307, 0.17976931348623157E309) = LESS +compare (~0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compareReal (~0.22250738585072014E~307, 0.8988465674311579E308) = LESS +compare (~0.22250738585072014E~307, 0.123E4) = LESS +compareReal (~0.22250738585072014E~307, 0.123E4) = LESS +compare (~0.22250738585072014E~307, 0.123E2) = LESS +compareReal (~0.22250738585072014E~307, 0.123E2) = LESS +compare (~0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compareReal (~0.22250738585072014E~307, 0.3141592653589793E1) = LESS +compare (~0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compareReal (~0.22250738585072014E~307, 0.2718281828459045E1) = LESS +compare (~0.22250738585072014E~307, 0.123E1) = LESS +compareReal (~0.22250738585072014E~307, 0.123E1) = LESS +compare (~0.22250738585072014E~307, 0.123) = LESS +compareReal (~0.22250738585072014E~307, 0.123) = LESS +compare (~0.22250738585072014E~307, 0.123E~2) = LESS +compareReal (~0.22250738585072014E~307, 0.123E~2) = LESS +compare (~0.22250738585072014E~307, 0.22250738585072014E~307) = LESS +compareReal (~0.22250738585072014E~307, 0.22250738585072014E~307) = LESS +compare (~0.22250738585072014E~307, 0.11125369292536007E~307) = LESS +compareReal (~0.22250738585072014E~307, 0.11125369292536007E~307) = LESS +compare (~0.22250738585072014E~307, 0.5E~323) = LESS +compareReal (~0.22250738585072014E~307, 0.5E~323) = LESS +compare (~0.22250738585072014E~307, 0.0) = LESS +compareReal (~0.22250738585072014E~307, 0.0) = LESS +compare (~0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compareReal (~0.22250738585072014E~307, ~0.17976931348623157E309) = GREATER +compare (~0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compareReal (~0.22250738585072014E~307, ~0.8988465674311579E308) = GREATER +compare (~0.22250738585072014E~307, ~0.123E4) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E4) = GREATER +compare (~0.22250738585072014E~307, ~0.123E2) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E2) = GREATER +compare (~0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.3141592653589793E1) = GREATER +compare (~0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.2718281828459045E1) = GREATER +compare (~0.22250738585072014E~307, ~0.123E1) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E1) = GREATER +compare (~0.22250738585072014E~307, ~0.123) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123) = GREATER +compare (~0.22250738585072014E~307, ~0.123E~2) = GREATER +compareReal (~0.22250738585072014E~307, ~0.123E~2) = GREATER +compare (~0.22250738585072014E~307, ~0.22250738585072014E~307) = EQUAL +compareReal (~0.22250738585072014E~307, ~0.22250738585072014E~307) = EQUAL +compare (~0.22250738585072014E~307, ~0.11125369292536007E~307) = LESS +compareReal (~0.22250738585072014E~307, ~0.11125369292536007E~307) = LESS +compare (~0.22250738585072014E~307, ~0.5E~323) = LESS +compareReal (~0.22250738585072014E~307, ~0.5E~323) = LESS +compare (~0.22250738585072014E~307, ~0.0) = LESS +compareReal (~0.22250738585072014E~307, ~0.0) = LESS +compare (~0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compareReal (~0.11125369292536007E~307, 0.17976931348623157E309) = LESS +compare (~0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compareReal (~0.11125369292536007E~307, 0.8988465674311579E308) = LESS +compare (~0.11125369292536007E~307, 0.123E4) = LESS +compareReal (~0.11125369292536007E~307, 0.123E4) = LESS +compare (~0.11125369292536007E~307, 0.123E2) = LESS +compareReal (~0.11125369292536007E~307, 0.123E2) = LESS +compare (~0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compareReal (~0.11125369292536007E~307, 0.3141592653589793E1) = LESS +compare (~0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compareReal (~0.11125369292536007E~307, 0.2718281828459045E1) = LESS +compare (~0.11125369292536007E~307, 0.123E1) = LESS +compareReal (~0.11125369292536007E~307, 0.123E1) = LESS +compare (~0.11125369292536007E~307, 0.123) = LESS +compareReal (~0.11125369292536007E~307, 0.123) = LESS +compare (~0.11125369292536007E~307, 0.123E~2) = LESS +compareReal (~0.11125369292536007E~307, 0.123E~2) = LESS +compare (~0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compareReal (~0.11125369292536007E~307, 0.22250738585072014E~307) = LESS +compare (~0.11125369292536007E~307, 0.11125369292536007E~307) = LESS +compareReal (~0.11125369292536007E~307, 0.11125369292536007E~307) = LESS +compare (~0.11125369292536007E~307, 0.5E~323) = LESS +compareReal (~0.11125369292536007E~307, 0.5E~323) = LESS +compare (~0.11125369292536007E~307, 0.0) = LESS +compareReal (~0.11125369292536007E~307, 0.0) = LESS +compare (~0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compareReal (~0.11125369292536007E~307, ~0.17976931348623157E309) = GREATER +compare (~0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compareReal (~0.11125369292536007E~307, ~0.8988465674311579E308) = GREATER +compare (~0.11125369292536007E~307, ~0.123E4) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E4) = GREATER +compare (~0.11125369292536007E~307, ~0.123E2) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E2) = GREATER +compare (~0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.3141592653589793E1) = GREATER +compare (~0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.2718281828459045E1) = GREATER +compare (~0.11125369292536007E~307, ~0.123E1) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E1) = GREATER +compare (~0.11125369292536007E~307, ~0.123) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123) = GREATER +compare (~0.11125369292536007E~307, ~0.123E~2) = GREATER +compareReal (~0.11125369292536007E~307, ~0.123E~2) = GREATER +compare (~0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compareReal (~0.11125369292536007E~307, ~0.22250738585072014E~307) = GREATER +compare (~0.11125369292536007E~307, ~0.11125369292536007E~307) = EQUAL +compareReal (~0.11125369292536007E~307, ~0.11125369292536007E~307) = EQUAL +compare (~0.11125369292536007E~307, ~0.5E~323) = LESS +compareReal (~0.11125369292536007E~307, ~0.5E~323) = LESS +compare (~0.11125369292536007E~307, ~0.0) = LESS +compareReal (~0.11125369292536007E~307, ~0.0) = LESS +compare (~0.5E~323, 0.17976931348623157E309) = LESS +compareReal (~0.5E~323, 0.17976931348623157E309) = LESS +compare (~0.5E~323, 0.8988465674311579E308) = LESS +compareReal (~0.5E~323, 0.8988465674311579E308) = LESS +compare (~0.5E~323, 0.123E4) = LESS +compareReal (~0.5E~323, 0.123E4) = LESS +compare (~0.5E~323, 0.123E2) = LESS +compareReal (~0.5E~323, 0.123E2) = LESS +compare (~0.5E~323, 0.3141592653589793E1) = LESS +compareReal (~0.5E~323, 0.3141592653589793E1) = LESS +compare (~0.5E~323, 0.2718281828459045E1) = LESS +compareReal (~0.5E~323, 0.2718281828459045E1) = LESS +compare (~0.5E~323, 0.123E1) = LESS +compareReal (~0.5E~323, 0.123E1) = LESS +compare (~0.5E~323, 0.123) = LESS +compareReal (~0.5E~323, 0.123) = LESS +compare (~0.5E~323, 0.123E~2) = LESS +compareReal (~0.5E~323, 0.123E~2) = LESS +compare (~0.5E~323, 0.22250738585072014E~307) = LESS +compareReal (~0.5E~323, 0.22250738585072014E~307) = LESS +compare (~0.5E~323, 0.11125369292536007E~307) = LESS +compareReal (~0.5E~323, 0.11125369292536007E~307) = LESS +compare (~0.5E~323, 0.5E~323) = LESS +compareReal (~0.5E~323, 0.5E~323) = LESS +compare (~0.5E~323, 0.0) = LESS +compareReal (~0.5E~323, 0.0) = LESS +compare (~0.5E~323, ~0.17976931348623157E309) = GREATER +compareReal (~0.5E~323, ~0.17976931348623157E309) = GREATER +compare (~0.5E~323, ~0.8988465674311579E308) = GREATER +compareReal (~0.5E~323, ~0.8988465674311579E308) = GREATER +compare (~0.5E~323, ~0.123E4) = GREATER +compareReal (~0.5E~323, ~0.123E4) = GREATER +compare (~0.5E~323, ~0.123E2) = GREATER +compareReal (~0.5E~323, ~0.123E2) = GREATER +compare (~0.5E~323, ~0.3141592653589793E1) = GREATER +compareReal (~0.5E~323, ~0.3141592653589793E1) = GREATER +compare (~0.5E~323, ~0.2718281828459045E1) = GREATER +compareReal (~0.5E~323, ~0.2718281828459045E1) = GREATER +compare (~0.5E~323, ~0.123E1) = GREATER +compareReal (~0.5E~323, ~0.123E1) = GREATER +compare (~0.5E~323, ~0.123) = GREATER +compareReal (~0.5E~323, ~0.123) = GREATER +compare (~0.5E~323, ~0.123E~2) = GREATER +compareReal (~0.5E~323, ~0.123E~2) = GREATER +compare (~0.5E~323, ~0.22250738585072014E~307) = GREATER +compareReal (~0.5E~323, ~0.22250738585072014E~307) = GREATER +compare (~0.5E~323, ~0.11125369292536007E~307) = GREATER +compareReal (~0.5E~323, ~0.11125369292536007E~307) = GREATER +compare (~0.5E~323, ~0.5E~323) = EQUAL +compareReal (~0.5E~323, ~0.5E~323) = EQUAL +compare (~0.5E~323, ~0.0) = LESS +compareReal (~0.5E~323, ~0.0) = LESS +compare (~0.0, 0.17976931348623157E309) = LESS +compareReal (~0.0, 0.17976931348623157E309) = LESS +compare (~0.0, 0.8988465674311579E308) = LESS +compareReal (~0.0, 0.8988465674311579E308) = LESS +compare (~0.0, 0.123E4) = LESS +compareReal (~0.0, 0.123E4) = LESS +compare (~0.0, 0.123E2) = LESS +compareReal (~0.0, 0.123E2) = LESS +compare (~0.0, 0.3141592653589793E1) = LESS +compareReal (~0.0, 0.3141592653589793E1) = LESS +compare (~0.0, 0.2718281828459045E1) = LESS +compareReal (~0.0, 0.2718281828459045E1) = LESS +compare (~0.0, 0.123E1) = LESS +compareReal (~0.0, 0.123E1) = LESS +compare (~0.0, 0.123) = LESS +compareReal (~0.0, 0.123) = LESS +compare (~0.0, 0.123E~2) = LESS +compareReal (~0.0, 0.123E~2) = LESS +compare (~0.0, 0.22250738585072014E~307) = LESS +compareReal (~0.0, 0.22250738585072014E~307) = LESS +compare (~0.0, 0.11125369292536007E~307) = LESS +compareReal (~0.0, 0.11125369292536007E~307) = LESS +compare (~0.0, 0.5E~323) = LESS +compareReal (~0.0, 0.5E~323) = LESS +compare (~0.0, 0.0) = EQUAL +compareReal (~0.0, 0.0) = EQUAL +compare (~0.0, ~0.17976931348623157E309) = GREATER +compareReal (~0.0, ~0.17976931348623157E309) = GREATER +compare (~0.0, ~0.8988465674311579E308) = GREATER +compareReal (~0.0, ~0.8988465674311579E308) = GREATER +compare (~0.0, ~0.123E4) = GREATER +compareReal (~0.0, ~0.123E4) = GREATER +compare (~0.0, ~0.123E2) = GREATER +compareReal (~0.0, ~0.123E2) = GREATER +compare (~0.0, ~0.3141592653589793E1) = GREATER +compareReal (~0.0, ~0.3141592653589793E1) = GREATER +compare (~0.0, ~0.2718281828459045E1) = GREATER +compareReal (~0.0, ~0.2718281828459045E1) = GREATER +compare (~0.0, ~0.123E1) = GREATER +compareReal (~0.0, ~0.123E1) = GREATER +compare (~0.0, ~0.123) = GREATER +compareReal (~0.0, ~0.123) = GREATER +compare (~0.0, ~0.123E~2) = GREATER +compareReal (~0.0, ~0.123E~2) = GREATER +compare (~0.0, ~0.22250738585072014E~307) = GREATER +compareReal (~0.0, ~0.22250738585072014E~307) = GREATER +compare (~0.0, ~0.11125369292536007E~307) = GREATER +compareReal (~0.0, ~0.11125369292536007E~307) = GREATER +compare (~0.0, ~0.5E~323) = GREATER +compareReal (~0.0, ~0.5E~323) = GREATER +compare (~0.0, ~0.0) = EQUAL +compareReal (~0.0, ~0.0) = EQUAL + +Testing abs + +Testing {from,to}ManExp +0.17976931348623157E309 = 0.9999999999999999 * 2^1024 + = 0.17976931348623157E309 +0.8988465674311579E308 = 0.9999999999999999 * 2^1023 + = 0.8988465674311579E308 +0.123E4 = 0.6005859375 * 2^11 + = 0.123E4 +0.123E2 = 0.76875 * 2^4 + = 0.123E2 +0.3141592653589793E1 = 0.7853981633974483 * 2^2 + = 0.3141592653589793E1 +0.2718281828459045E1 = 0.6795704571147613 * 2^2 + = 0.2718281828459045E1 +0.123E1 = 0.615 * 2^1 + = 0.123E1 +0.123 = 0.984 * 2^~3 + = 0.123 +0.123E~2 = 0.62976 * 2^~9 + = 0.123E~2 +0.22250738585072014E~307 = 0.5 * 2^~1021 + = 0.22250738585072014E~307 +0.0 = 0.0 * 2^0 + = 0.0 +~0.17976931348623157E309 = ~0.9999999999999999 * 2^1024 + = ~0.17976931348623157E309 +~0.8988465674311579E308 = ~0.9999999999999999 * 2^1023 + = ~0.8988465674311579E308 +~0.123E4 = ~0.6005859375 * 2^11 + = ~0.123E4 +~0.123E2 = ~0.76875 * 2^4 + = ~0.123E2 +~0.3141592653589793E1 = ~0.7853981633974483 * 2^2 + = ~0.3141592653589793E1 +~0.2718281828459045E1 = ~0.6795704571147613 * 2^2 + = ~0.2718281828459045E1 +~0.123E1 = ~0.615 * 2^1 + = ~0.123E1 +~0.123 = ~0.984 * 2^~3 + = ~0.123 +~0.123E~2 = ~0.62976 * 2^~9 + = ~0.123E~2 +~0.22250738585072014E~307 = ~0.5 * 2^~1021 + = ~0.22250738585072014E~307 +~0.0 = ~0.0 * 2^0 + = ~0.0 + +Testing split + +Testing {from,to}Large diff -Nru mlton-20130715/regression/sharing.sml mlton-20210117+dfsg/regression/sharing.sml --- mlton-20130715/regression/sharing.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/sharing.sml 2021-12-28 17:19:36.000000000 +0000 @@ -36,6 +36,16 @@ val _: A.t -> C.t = fn x => x end +functor F (structure A: sig type t end + structure B: sig type u end + structure C: sig type t end + structure D: sig type u end + sharing A = B = C = D) = + struct + val _: A.t -> C.t = fn x => x + val _: B.u -> D.u = fn x => x + end + (* Check that sharing doesn't mistakenly share structures that only differ in * free flexible tycons. *) diff -Nru mlton-20130715/regression/size2.alpha-linux.ok mlton-20210117+dfsg/regression/size2.alpha-linux.ok --- mlton-20130715/regression/size2.alpha-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.alpha-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 96 bytes. -The size of a string of length 10 is = 40 bytes. -The size of an int array of length 10 is = 64 bytes. -The size of a double array of length 10 is = 104 bytes. -The size of a (word32 * double) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 184 bytes. -The size of a (word64 * double) array of length 10 is = 184 bytes. -The size of a (word16 * double) array of length 10 is = 184 bytes. -The size of a word64 array of length 10 is = 104 bytes. -The size of a (word32 * word64) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 184 bytes. -The size of a (word64 * word64) array of length 10 is = 184 bytes. -The size of a (word16 * word64) array of length 10 is = 184 bytes. -The size of an array of length 10 of 2-ples of ints is = 104 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 104 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1144 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 208 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.amd64-darwin.ok mlton-20210117+dfsg/regression/size2.amd64-darwin.ok --- mlton-20130715/regression/size2.amd64-darwin.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.amd64-darwin.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 96 bytes. -The size of a string of length 10 is = 40 bytes. -The size of an int array of length 10 is = 64 bytes. -The size of a double array of length 10 is = 104 bytes. -The size of a (word32 * double) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 184 bytes. -The size of a (word64 * double) array of length 10 is = 184 bytes. -The size of a (word16 * double) array of length 10 is = 184 bytes. -The size of a word64 array of length 10 is = 104 bytes. -The size of a (word32 * word64) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 184 bytes. -The size of a (word64 * word64) array of length 10 is = 184 bytes. -The size of a (word16 * word64) array of length 10 is = 184 bytes. -The size of an array of length 10 of 2-ples of ints is = 104 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 104 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1144 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 208 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.amd64-freebsd.ok mlton-20210117+dfsg/regression/size2.amd64-freebsd.ok --- mlton-20130715/regression/size2.amd64-freebsd.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.amd64-freebsd.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 96 bytes. -The size of a string of length 10 is = 40 bytes. -The size of an int array of length 10 is = 64 bytes. -The size of a double array of length 10 is = 104 bytes. -The size of a (word32 * double) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 184 bytes. -The size of a (word64 * double) array of length 10 is = 184 bytes. -The size of a (word16 * double) array of length 10 is = 184 bytes. -The size of a word64 array of length 10 is = 104 bytes. -The size of a (word32 * word64) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 184 bytes. -The size of a (word64 * word64) array of length 10 is = 184 bytes. -The size of a (word16 * word64) array of length 10 is = 184 bytes. -The size of an array of length 10 of 2-ples of ints is = 104 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 104 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1144 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 208 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.amd64-linux.ok mlton-20210117+dfsg/regression/size2.amd64-linux.ok --- mlton-20130715/regression/size2.amd64-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.amd64-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 96 bytes. -The size of a string of length 10 is = 40 bytes. -The size of an int array of length 10 is = 64 bytes. -The size of a double array of length 10 is = 104 bytes. -The size of a (word32 * double) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 184 bytes. -The size of a (word64 * double) array of length 10 is = 184 bytes. -The size of a (word16 * double) array of length 10 is = 184 bytes. -The size of a word64 array of length 10 is = 104 bytes. -The size of a (word32 * word64) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 184 bytes. -The size of a (word64 * word64) array of length 10 is = 184 bytes. -The size of a (word16 * word64) array of length 10 is = 184 bytes. -The size of an array of length 10 of 2-ples of ints is = 104 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 104 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1144 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 208 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.amd64-mingw.ok mlton-20210117+dfsg/regression/size2.amd64-mingw.ok --- mlton-20130715/regression/size2.amd64-mingw.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.amd64-mingw.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 96 bytes. -The size of a string of length 10 is = 40 bytes. -The size of an int array of length 10 is = 64 bytes. -The size of a double array of length 10 is = 104 bytes. -The size of a (word32 * double) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 184 bytes. -The size of a (word64 * double) array of length 10 is = 184 bytes. -The size of a (word16 * double) array of length 10 is = 184 bytes. -The size of a word64 array of length 10 is = 104 bytes. -The size of a (word32 * word64) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 184 bytes. -The size of a (word64 * word64) array of length 10 is = 184 bytes. -The size of a (word16 * word64) array of length 10 is = 184 bytes. -The size of an array of length 10 of 2-ples of ints is = 104 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 104 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1144 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 208 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.arm-linux.ok mlton-20210117+dfsg/regression/size2.arm-linux.ok --- mlton-20130715/regression/size2.arm-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.arm-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 64 bytes. -The size of a string of length 10 is = 24 bytes. -The size of an int array of length 10 is = 56 bytes. -The size of a double array of length 10 is = 96 bytes. -The size of a (word32 * double) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 176 bytes. -The size of a (word64 * double) array of length 10 is = 176 bytes. -The size of a (word16 * double) array of length 10 is = 176 bytes. -The size of a word64 array of length 10 is = 96 bytes. -The size of a (word32 * word64) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 176 bytes. -The size of a (word64 * word64) array of length 10 is = 176 bytes. -The size of a (word16 * word64) array of length 10 is = 176 bytes. -The size of an array of length 10 of 2-ples of ints is = 96 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 96 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1016 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 152 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.hppa-hpux.ok mlton-20210117+dfsg/regression/size2.hppa-hpux.ok --- mlton-20130715/regression/size2.hppa-hpux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.hppa-hpux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 64 bytes. -The size of a string of length 10 is = 24 bytes. -The size of an int array of length 10 is = 56 bytes. -The size of a double array of length 10 is = 96 bytes. -The size of a (word32 * double) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 176 bytes. -The size of a (word64 * double) array of length 10 is = 176 bytes. -The size of a (word16 * double) array of length 10 is = 176 bytes. -The size of a word64 array of length 10 is = 96 bytes. -The size of a (word32 * word64) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 176 bytes. -The size of a (word64 * word64) array of length 10 is = 176 bytes. -The size of a (word16 * word64) array of length 10 is = 176 bytes. -The size of an array of length 10 of 2-ples of ints is = 96 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 96 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1016 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 152 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.hppa-linux.ok mlton-20210117+dfsg/regression/size2.hppa-linux.ok --- mlton-20130715/regression/size2.hppa-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.hppa-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 64 bytes. -The size of a string of length 10 is = 24 bytes. -The size of an int array of length 10 is = 56 bytes. -The size of a double array of length 10 is = 96 bytes. -The size of a (word32 * double) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 176 bytes. -The size of a (word64 * double) array of length 10 is = 176 bytes. -The size of a (word16 * double) array of length 10 is = 176 bytes. -The size of a word64 array of length 10 is = 96 bytes. -The size of a (word32 * word64) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 176 bytes. -The size of a (word64 * word64) array of length 10 is = 176 bytes. -The size of a (word16 * word64) array of length 10 is = 176 bytes. -The size of an array of length 10 of 2-ples of ints is = 96 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 96 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1016 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 152 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.ia64-hpux.ok mlton-20210117+dfsg/regression/size2.ia64-hpux.ok --- mlton-20130715/regression/size2.ia64-hpux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.ia64-hpux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 64 bytes. -The size of a string of length 10 is = 24 bytes. -The size of an int array of length 10 is = 56 bytes. -The size of a double array of length 10 is = 96 bytes. -The size of a (word32 * double) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 176 bytes. -The size of a (word64 * double) array of length 10 is = 176 bytes. -The size of a (word16 * double) array of length 10 is = 176 bytes. -The size of a word64 array of length 10 is = 96 bytes. -The size of a (word32 * word64) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 176 bytes. -The size of a (word64 * word64) array of length 10 is = 176 bytes. -The size of a (word16 * word64) array of length 10 is = 176 bytes. -The size of an array of length 10 of 2-ples of ints is = 96 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 96 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1016 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 152 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.ia64-linux.ok mlton-20210117+dfsg/regression/size2.ia64-linux.ok --- mlton-20130715/regression/size2.ia64-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.ia64-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 96 bytes. -The size of a string of length 10 is = 40 bytes. -The size of an int array of length 10 is = 64 bytes. -The size of a double array of length 10 is = 104 bytes. -The size of a (word32 * double) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 184 bytes. -The size of a (word64 * double) array of length 10 is = 184 bytes. -The size of a (word16 * double) array of length 10 is = 184 bytes. -The size of a word64 array of length 10 is = 104 bytes. -The size of a (word32 * word64) array of length 10 is = 184 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 184 bytes. -The size of a (word64 * word64) array of length 10 is = 184 bytes. -The size of a (word16 * word64) array of length 10 is = 184 bytes. -The size of an array of length 10 of 2-ples of ints is = 104 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 104 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1144 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 208 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1224 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1224 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.mips-linux.ok mlton-20210117+dfsg/regression/size2.mips-linux.ok --- mlton-20130715/regression/size2.mips-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.mips-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 64 bytes. -The size of a string of length 10 is = 24 bytes. -The size of an int array of length 10 is = 56 bytes. -The size of a double array of length 10 is = 96 bytes. -The size of a (word32 * double) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 176 bytes. -The size of a (word64 * double) array of length 10 is = 176 bytes. -The size of a (word16 * double) array of length 10 is = 176 bytes. -The size of a word64 array of length 10 is = 96 bytes. -The size of a (word32 * word64) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 176 bytes. -The size of a (word64 * word64) array of length 10 is = 176 bytes. -The size of a (word16 * word64) array of length 10 is = 176 bytes. -The size of an array of length 10 of 2-ples of ints is = 96 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 96 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1016 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 152 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.ok mlton-20210117+dfsg/regression/size2.ok --- mlton-20130715/regression/size2.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 48 bytes. -The size of a string of length 10 is = 24 bytes. -The size of an int array of length 10 is = 52 bytes. -The size of a double array of length 10 is = 92 bytes. -The size of a (word32 * double) array of length 10 is = 132 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 172 bytes. -The size of a (word64 * double) array of length 10 is = 172 bytes. -The size of a (word16 * double) array of length 10 is = 132 bytes. -The size of a word64 array of length 10 is = 92 bytes. -The size of a (word32 * word64) array of length 10 is = 132 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 172 bytes. -The size of a (word64 * word64) array of length 10 is = 172 bytes. -The size of a (word16 * word64) array of length 10 is = 132 bytes. -The size of an array of length 10 of 2-ples of ints is = 92 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 92 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 972 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 144 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1012 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1012 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1052 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1012 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1052 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.s390-linux.ok mlton-20210117+dfsg/regression/size2.s390-linux.ok --- mlton-20130715/regression/size2.s390-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.s390-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 64 bytes. -The size of a string of length 10 is = 24 bytes. -The size of an int array of length 10 is = 56 bytes. -The size of a double array of length 10 is = 96 bytes. -The size of a (word32 * double) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 176 bytes. -The size of a (word64 * double) array of length 10 is = 176 bytes. -The size of a (word16 * double) array of length 10 is = 176 bytes. -The size of a word64 array of length 10 is = 96 bytes. -The size of a (word32 * word64) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 176 bytes. -The size of a (word64 * word64) array of length 10 is = 176 bytes. -The size of a (word16 * word64) array of length 10 is = 176 bytes. -The size of an array of length 10 of 2-ples of ints is = 96 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 96 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1016 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 152 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size2.sml mlton-20210117+dfsg/regression/size2.sml --- mlton-20130715/regression/size2.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -fun 'a printSize (name: string, value: 'a): unit= - (print "The size of " - ; print name - ; print " is = " - ; print (Int.toString (MLton.size value)) - ; print " bytes.\n") - -val l = [1, 2, 3, 4] - -val _ = - ( - printSize ("a char", #"c") - ; printSize ("an int list of length 4", l) - ; printSize ("a string of length 10", "0123456789") - ; printSize ("an int array of length 10", Array.tabulate (10, fn _ => 0)) - ; printSize ("a double array of length 10", - Array.tabulate (10, fn _ => 0.0)) - ; printSize ("a (word32 * double) array of length 10", - Array.tabulate (10, fn i => (Word32.fromInt i, 0.0))) - ; printSize ("a (word32 * word32 * double) array of length 10", - Array.tabulate (10, fn i => (Word32.fromInt (i + 1), - Word32.fromInt i, 0.0))) - ; printSize ("a (word64 * double) array of length 10", - Array.tabulate (10, fn i => (Word64.fromInt (i + 1), 0.0))) - ; printSize ("a (word16 * double) array of length 10", - Array.tabulate (10, fn i => (Word16.fromInt (i + 1), 0.0))) - ; printSize ("a word64 array of length 10", - Array.tabulate (10, fn i => Word64.fromInt i)) - ; printSize ("a (word32 * word64) array of length 10", - Array.tabulate (10, fn i => (Word32.fromInt i, - Word64.fromInt i))) - ; printSize ("a (word32 * word32 * word64) array of length 10", - Array.tabulate (10, fn i => (Word32.fromInt i, - Word32.fromInt (i + 1), - Word64.fromInt i))) - ; printSize ("a (word64 * word64) array of length 10", - Array.tabulate (10, fn i => (Word64.fromInt (i + 1), - Word64.fromInt i))) - ; printSize ("a (word16 * word64) array of length 10", - Array.tabulate (10, fn i => (Word16.fromInt (i + 1), - Word64.fromInt i))) - ; printSize ("an array of length 10 of 2-ples of ints", - Array.tabulate (10, fn i => (i, i + 1))) - ; printSize ("an array of length 10 of 2-ples of (shared) ints", - let val t = (0, 1) in - Array.tabulate (10, fn _ => t) - end) - ; printSize ("an array of length 10 of arrays of length 20 of ints", - Array.tabulate (10, fn i => Array.tabulate (20, fn j => i + j))) - ; printSize ("an array of length 10 of (shared) arrays of length 20 of ints", - let val a = Array.tabulate (20, fn j => j) - in Array.tabulate (10, fn i => a) - end) - ; printSize ("an array of length 10 of tuples of word16 * (arrays of length 20 of ints)", - Array.tabulate (10, fn i => (Word16.fromInt i, Array.tabulate (20, fn j => i + j)))) - ; printSize ("an array of length 10 of tuples of word32 * (arrays of length 20 of ints)", - Array.tabulate (10, fn i => (Word32.fromInt i, Array.tabulate (20, fn j => i + j)))) - ; printSize ("an array of length 10 of tuples of word64 * (arrays of length 20 of ints)", - Array.tabulate (10, fn i => (Word64.fromInt i, Array.tabulate (20, fn j => i + j)))) - ; printSize ("an array of length 10 of tuples of real32 * (arrays of length 20 of ints)", - Array.tabulate (10, fn i => (Real32.fromInt i, Array.tabulate (20, fn j => i + j)))) - ; printSize ("an array of length 10 of tuples of real64 * (arrays of length 20 of ints)", - Array.tabulate (10, fn i => (Real64.fromInt i, Array.tabulate (20, fn j => i + j)))) - ; printSize ("a useless function", fn _ => 13) - ) - -(* This is here so that the list is "useful". - * If it were removed, then the optimizer (remove-unused-constructors) - * would remove l entirely. - *) -val _ = if 10 = foldl (op +) 0 l - then () - else raise Fail "bug" diff -Nru mlton-20130715/regression/size2.sparc-linux.ok mlton-20210117+dfsg/regression/size2.sparc-linux.ok --- mlton-20130715/regression/size2.sparc-linux.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size2.sparc-linux.ok 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -The size of a char is = 0 bytes. -The size of an int list of length 4 is = 64 bytes. -The size of a string of length 10 is = 24 bytes. -The size of an int array of length 10 is = 56 bytes. -The size of a double array of length 10 is = 96 bytes. -The size of a (word32 * double) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * double) array of length 10 is = 176 bytes. -The size of a (word64 * double) array of length 10 is = 176 bytes. -The size of a (word16 * double) array of length 10 is = 176 bytes. -The size of a word64 array of length 10 is = 96 bytes. -The size of a (word32 * word64) array of length 10 is = 176 bytes. -The size of a (word32 * word32 * word64) array of length 10 is = 176 bytes. -The size of a (word64 * word64) array of length 10 is = 176 bytes. -The size of a (word16 * word64) array of length 10 is = 176 bytes. -The size of an array of length 10 of 2-ples of ints is = 96 bytes. -The size of an array of length 10 of 2-ples of (shared) ints is = 96 bytes. -The size of an array of length 10 of arrays of length 20 of ints is = 1016 bytes. -The size of an array of length 10 of (shared) arrays of length 20 of ints is = 152 bytes. -The size of an array of length 10 of tuples of word16 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of word64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of an array of length 10 of tuples of real32 * (arrays of length 20 of ints) is = 1056 bytes. -The size of an array of length 10 of tuples of real64 * (arrays of length 20 of ints) is = 1136 bytes. -The size of a useless function is = 0 bytes. diff -Nru mlton-20130715/regression/size.ok mlton-20210117+dfsg/regression/size.ok --- mlton-20130715/regression/size.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size.ok 2021-12-28 17:19:36.000000000 +0000 @@ -1,10 +1 @@ -The size of a char is >= 0 bytes. -The size of an int list of length 4 is >= 48 bytes. -The size of a string of length 10 is >= 24 bytes. -The size of an int array of length 10 is >= 52 bytes. -The size of a double array of length 10 is >= 92 bytes. -The size of an array of length 10 of 2-ples of ints is >= 92 bytes. -The size of a useless function is >= 0 bytes. -The size of a continuation option ref is > 1000. -13 -The size of a continuation option ref is < 1000. +size.???.ok missing diff -Nru mlton-20130715/regression/size.rep32a4.ok mlton-20210117+dfsg/regression/size.rep32a4.ok --- mlton-20130715/regression/size.rep32a4.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/size.rep32a4.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,12 @@ +The size of a char is = 0 bytes. +The size of an int list of length 4 is = 48 bytes. +The size of a string of length 10 is = 24 bytes. +The size of an int array of length 10 is = 52 bytes. +The size of a double array of length 10 is = 92 bytes. +The size of an array of length 10 of 2-ples of ints is = 92 bytes. +The size of a useless function is = 0 bytes. +The size of an int list option (SOME) is = 56 bytes. +The size of an int list option (NONE) is = 0 bytes. +The size of a continuation option ref is >= 4000 bytes and <= 6000 bytes. +13 +The size of a continuation option ref is = 8 bytes. diff -Nru mlton-20130715/regression/size.rep32a8.ok mlton-20210117+dfsg/regression/size.rep32a8.ok --- mlton-20130715/regression/size.rep32a8.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/size.rep32a8.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,12 @@ +The size of a char is = 0 bytes. +The size of an int list of length 4 is = 64 bytes. +The size of a string of length 10 is = 24 bytes. +The size of an int array of length 10 is = 56 bytes. +The size of a double array of length 10 is = 96 bytes. +The size of an array of length 10 of 2-ples of ints is = 96 bytes. +The size of a useless function is = 0 bytes. +The size of an int list option (SOME) is = 72 bytes. +The size of an int list option (NONE) is = 0 bytes. +The size of a continuation option ref is >= 4000 bytes and <= 6000 bytes. +13 +The size of a continuation option ref is = 8 bytes. diff -Nru mlton-20130715/regression/size.rep64a4.ok mlton-20210117+dfsg/regression/size.rep64a4.ok --- mlton-20130715/regression/size.rep64a4.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/size.rep64a4.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,12 @@ +The size of a char is = 0 bytes. +The size of an int list of length 4 is = 80 bytes. +The size of a string of length 10 is = 36 bytes. +The size of an int array of length 10 is = 64 bytes. +The size of a double array of length 10 is = 104 bytes. +The size of an array of length 10 of 2-ples of ints is = 104 bytes. +The size of a useless function is = 0 bytes. +The size of an int list option (SOME) is = 96 bytes. +The size of an int list option (NONE) is = 0 bytes. +The size of a continuation option ref is >= 4000 bytes and <= 6000 bytes. +13 +The size of a continuation option ref is = 16 bytes. diff -Nru mlton-20130715/regression/size.rep64a8.ok mlton-20210117+dfsg/regression/size.rep64a8.ok --- mlton-20130715/regression/size.rep64a8.ok 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/size.rep64a8.ok 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,12 @@ +The size of a char is = 0 bytes. +The size of an int list of length 4 is = 96 bytes. +The size of a string of length 10 is = 40 bytes. +The size of an int array of length 10 is = 64 bytes. +The size of a double array of length 10 is = 104 bytes. +The size of an array of length 10 of 2-ples of ints is = 104 bytes. +The size of a useless function is = 0 bytes. +The size of an int list option (SOME) is = 112 bytes. +The size of an int list option (NONE) is = 0 bytes. +The size of a continuation option ref is >= 4000 bytes and <= 6000 bytes. +13 +The size of a continuation option ref is = 16 bytes. diff -Nru mlton-20130715/regression/size.sml mlton-20210117+dfsg/regression/size.sml --- mlton-20130715/regression/size.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/size.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,35 +1,68 @@ -fun 'a printSize (name: string, min: int, value: 'a): unit= - if MLton.size value >= min - then - (print "The size of " - ; print name - ; print " is >= " - ; print (Int.toString min) - ; print " bytes.\n") - else () +fun 'a printSize (name: string, min_max: (IntInf.int * IntInf.int) option, + value: 'a, use: 'a -> unit): unit = + (print "The size of " + ; print name + ; print " is" + ; let + val size = MLton.size value + in + case min_max of + NONE => (print " = " + ; print (IntInf.toString size) + ; print " bytes.\n") + | SOME (min, max) => + if min <= size andalso size <= max + then (print " >= " + ; print (IntInf.toString min) + ; print " bytes and <= " + ; print (IntInf.toString max) + ; print " bytes.\n") + else (print " = " + ; print (IntInf.toString size) + ; print " bytes.\n") + end + ; use value) + +fun chk (x, y) = + if x = y + then () + else raise Fail "bug" val l = [1, 2, 3, 4] val _ = - ( - printSize ("a char", 0, #"c") - ; printSize ("an int list of length 4", 48, l) - ; printSize ("a string of length 10", 24, "0123456789") - ; printSize ("an int array of length 10", 52, Array.tabulate (10, fn _ => 0)) - ; printSize ("a double array of length 10", - 92, Array.tabulate (10, fn _ => 0.0)) - ; printSize ("an array of length 10 of 2-ples of ints", - 92, Array.tabulate (10, fn i => (i, i + 1))) - ; printSize ("a useless function", 0, fn _ => 13) - ) - -(* This is here so that the list is "useful". - * If it were removed, then the optimizer (remove-unused-constructors) - * would remove l entirely. - *) -val _ = if 10 = foldl (op +) 0 l - then () - else raise Fail "bug" + (printSize ("a char", NONE, #"c", fn _ => ()) + ; printSize ("an int list of length 4", NONE, + List.tabulate (4, fn i => i + 1), fn l => + chk (foldl (op +) 0 l, 10)) + ; printSize ("a string of length 10", NONE, + CharVector.tabulate (10, fn i => chr (ord #"0" + i)), fn s => + chk (CharVector.foldl (fn (c,s) => ord c + s) 0 s, 525)) + ; printSize ("an int array of length 10", NONE, + Array.tabulate (10, fn i => i), fn a => + chk (Array.foldl (op +) 0 a, 45)) + ; printSize ("a double array of length 10", NONE, + Array.tabulate (10, real), fn a => + chk (Real.floor (Array.foldl (op +) 0.0 a), 45)) + ; printSize ("an array of length 10 of 2-ples of ints", NONE, + Array.tabulate (10, fn i => (i, i + 1)), fn a => + chk (Array.foldl (fn ((a,b),s) => a + b + s) 0 a, 100)) + ; printSize ("a useless function", NONE, + fn _ => 13, fn f => ()) + ; let + val l = List.tabulate (8, fn i => + if i mod 2 = 1 + then NONE + else SOME (List.tabulate (i, fn i => i + 1))) + in + () + ; printSize ("an int list option (SOME)", NONE, + List.nth (l, 4), fn lo => + chk (case lo of NONE => 0 | SOME l => foldl (op +) 0 l, 10)) + ; printSize ("an int list option (NONE)", NONE, + List.nth (l, 5), fn lo => + chk (case lo of NONE => 0 | SOME l => foldl (op +) 0 l, 0)) + end) local open MLton.Cont @@ -41,13 +74,11 @@ | SOME i => print (concat [Int.toString i, "\n"]) end -val _ = - (print "The size of a continuation option ref is " - ; if MLton.size rc > 1000 - then print "> 1000.\n" - else print "< 1000.\n") - -val _ = - case !rc of - NONE => () - | SOME k => (rc := NONE; MLton.Cont.throw (k, SOME 13)) +val _ = printSize ("a continuation option ref", + case !rc of + NONE => NONE + | SOME _ => SOME (4000, 6000), + rc, fn rc => + case !rc of + NONE => () + | SOME k => (rc := NONE; MLton.Cont.throw (k, SOME 13))) diff -Nru mlton-20130715/regression/string.fromString.ok mlton-20210117+dfsg/regression/string.fromString.ok --- mlton-20130715/regression/string.fromString.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/string.fromString.ok 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -OK [abc] -OK [] -OK [a] -OK [a] -OK [] -OK [] -OK [] -OK [] +OK SOME [abc] +OK NONE +OK NONE +OK SOME [a] +OK SOME [a] +OK SOME [] +OK SOME [] +OK SOME [] +OK NONE diff -Nru mlton-20130715/regression/string.fromString.sml mlton-20210117+dfsg/regression/string.fromString.sml --- mlton-20130715/regression/string.fromString.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/string.fromString.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,18 +1,21 @@ +fun toString NONE = "NONE" + | toString (SOME s) = concat ["SOME [", s, "]"] fun check (s, s') = - case String.fromString s of - NONE => print "WRONG NONE\n" - | SOME s'' => - if s' = s'' - then print (concat ["OK [", s', "]\n"]) - else print (concat ["WRONG [", s', "] [", s'', "]\n"]) + let val s'' = String.fromString s + in if s'' = s' + then print (concat ["OK ", toString s'', "\n"]) + else print (concat ["WRONG ", toString s'', " ", toString s', "\n"]) + end val _ = List.app check - [("abc\"def", "abc"), - ("\\q", ""), - ("a\^D", "a"), - ("a\\ \\\\q", "a"), - ("\\ \\", ""), - ("", ""), - ("\\ \\\^D", ""), - ("\\ a", "")] + [("abc\"def", SOME "abc"), + ("\n", NONE), + (* from SML Basis manual example *) + ("\\q", NONE), + ("a\^D", SOME "a"), + ("a\\ \\\\q", SOME "a"), + ("\\ \\", SOME ""), + ("", SOME ""), + ("\\ \\\^D", SOME ""), + ("\\ a", NONE)] diff -Nru mlton-20130715/regression/string.sml mlton-20210117+dfsg/regression/string.sml --- mlton-20130715/regression/string.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/string.sml 2021-12-28 17:19:36.000000000 +0000 @@ -241,8 +241,8 @@ andalso fromString arg = SOME res) end; -val test20 = - tst' "test20" (fn _ => List.all (fn arg => isSome (fromString arg)) +val test20 = + tst' "test20" (fn _ => List.all (fn arg => not (isSome (fromString arg))) ["\\", "\\c", "\\F", @@ -260,8 +260,7 @@ "\\^a", "\\^z", "\\ a", - "\\ a\\B", - "\\ \\"]); + "\\ a\\B"]); (* Test cases for C string escape functions *) diff -Nru mlton-20130715/regression/thread-switch-size.sml mlton-20210117+dfsg/regression/thread-switch-size.sml --- mlton-20130715/regression/thread-switch-size.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/thread-switch-size.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ (* Access the current stack in the heap via a MLton.size object trace. *) val rt : MLton.Thread.Runnable.t option ref = ref NONE -val rs : int ref = ref 0 +val rs : IntInf.int ref = ref 0 fun stats () = let diff -Nru mlton-20130715/regression/warn/val-rec-constructor.2.sml mlton-20210117+dfsg/regression/warn/val-rec-constructor.2.sml --- mlton-20130715/regression/warn/val-rec-constructor.2.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/warn/val-rec-constructor.2.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +val rec SOME = fn _ => raise Fail "foo" diff -Nru mlton-20130715/regression/warn/val-rec-constructor.sml mlton-20210117+dfsg/regression/warn/val-rec-constructor.sml --- mlton-20130715/regression/warn/val-rec-constructor.sml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/warn/val-rec-constructor.sml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +val rec NONE = fn () => () diff -Nru mlton-20130715/regression/weak.2.ok mlton-20210117+dfsg/regression/weak.2.ok --- mlton-20130715/regression/weak.2.ok 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/weak.2.ok 2021-12-28 17:19:36.000000000 +0000 @@ -1 +1,5 @@ +18 +true +19 +20 true diff -Nru mlton-20130715/regression/weak.2.sml mlton-20210117+dfsg/regression/weak.2.sml --- mlton-20130715/regression/weak.2.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/regression/weak.2.sml 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,15 @@ val x = (13, ref 5) val wx = Weak.new x -fun isAlive () = isSome (Weak.get wx) + +fun use (v, r) = v + !r before r := !r + 1 +fun isAlive () = + case Weak.get wx of + NONE => false + | SOME p => (print (Int.toString (use p) ^ "\n"); true) + +val _ = print (Bool.toString (isAlive ()) ^ "\n") +val _ = print (Int.toString (use x) ^ "\n") val _ = MLton.GC.collect () val _ = print (Bool.toString (isAlive ()) ^ "\n") @@ -21,4 +29,4 @@ val _ = MLton.GC.collect () val _ = print (Bool.toString (isAlive ()) ^ "\n") val s1 = sum x -*) \ No newline at end of file +*) diff -Nru mlton-20130715/regression/whitelist mlton-20210117+dfsg/regression/whitelist --- mlton-20130715/regression/whitelist 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/regression/whitelist 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,7 @@ +real +world1 +world2 +world3 +world4 +world5 +world6 diff -Nru mlton-20130715/runtime/basis/coerce.c mlton-20210117+dfsg/runtime/basis/coerce.c --- mlton-20130715/runtime/basis/coerce.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/coerce.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ #include "platform.h" -#include "coerce.h" +#include "basis/coerce.h" /* Real coercions depend on rounding mode and can't be inlined where * gcc might constant-fold them. diff -Nru mlton-20130715/runtime/basis/coerce.h mlton-20210117+dfsg/runtime/basis/coerce.h --- mlton-20130715/runtime/basis/coerce.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/coerce.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,5 @@ - #define coerce(n, f, t) \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ t f##_##n##To##t (f x) { \ return (t)x; \ } @@ -36,7 +35,7 @@ #undef coerce #define cast(f, t) \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ t f##_castTo##t (f x) { \ t y; \ memcpy(&y, &x, sizeof(t)); \ diff -Nru mlton-20130715/runtime/basis/cpointer.c mlton-20210117+dfsg/runtime/basis/cpointer.c --- mlton-20130715/runtime/basis/cpointer.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/cpointer.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,3 +1,3 @@ #include "platform.h" -#include "cpointer.h" +#include "basis/cpointer.h" diff -Nru mlton-20130715/runtime/basis/cpointer.h mlton-20210117+dfsg/runtime/basis/cpointer.h --- mlton-20130715/runtime/basis/cpointer.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/cpointer.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,44 +1,43 @@ - -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE Pointer CPointer_add (Pointer p, C_Size_t s); -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE C_Size_t CPointer_diff (Pointer p1, Pointer p2); -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE Bool CPointer_equal (Pointer p1, Pointer p2); -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE Pointer CPointer_fromWord (C_Pointer_t x); -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE Bool CPointer_lt (Pointer p1, Pointer p2); -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE Pointer CPointer_sub (Pointer p, C_Size_t s); -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE C_Pointer_t CPointer_toWord (Pointer p); -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE Pointer CPointer_add (Pointer p, C_Size_t s) { return (p + s); } -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE C_Size_t CPointer_diff (Pointer p1, Pointer p2) { return (size_t)(p1 - p2); } -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE Bool CPointer_equal (Pointer p1, Pointer p2) { return (p1 == p2); } -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE Pointer CPointer_fromWord (C_Pointer_t x) { return (Pointer)x; } -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE Bool CPointer_lt (Pointer p1, Pointer p2) { return (p1 < p2); } -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE Pointer CPointer_sub (Pointer p, C_Size_t s) { return (p - s); } -MLTON_CODEGEN_STATIC_INLINE +PRIVATE INLINE C_Pointer_t CPointer_toWord (Pointer p) { return (C_Pointer_t)p; } diff -Nru mlton-20130715/runtime/basis/IntInf/int-inf.c mlton-20210117+dfsg/runtime/basis/IntInf/int-inf.c --- mlton-20130715/runtime/basis/IntInf/int-inf.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/IntInf/int-inf.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,130 @@ +#define MLTON_GC_INTERNAL_TYPES +#define MLTON_GC_INTERNAL_BASIS +#include "platform.h" + + +PRIVATE objptr IntInf_add (GC_state s, objptr lhs, objptr rhs, size_t bytes); +PRIVATE objptr IntInf_andb (GC_state s, objptr lhs, objptr rhs, size_t bytes); +PRIVATE objptr IntInf_gcd (GC_state s, objptr lhs, objptr rhs, size_t bytes); +PRIVATE objptr IntInf_mul (GC_state s, objptr lhs, objptr rhs, size_t bytes); +PRIVATE objptr IntInf_quot (GC_state s, objptr lhs, objptr rhs, size_t bytes); +PRIVATE objptr IntInf_orb (GC_state s, objptr lhs, objptr rhs, size_t bytes); +PRIVATE objptr IntInf_rem (GC_state s, objptr lhs, objptr rhs, size_t bytes); +PRIVATE objptr IntInf_sub (GC_state s, objptr lhs, objptr rhs, size_t bytes); +PRIVATE objptr IntInf_xorb (GC_state s, objptr lhs, objptr rhs, size_t bytes); +PRIVATE objptr IntInf_neg (GC_state s, objptr arg, size_t bytes); +PRIVATE objptr IntInf_notb (GC_state s, objptr arg, size_t bytes); +PRIVATE objptr IntInf_arshift (GC_state s, objptr arg, Word32_t shift, size_t bytes); +PRIVATE objptr IntInf_lshift (GC_state s, objptr arg, Word32_t shift, size_t bytes); +PRIVATE Int32_t IntInf_compare (GC_state s, objptr lhs, objptr rhs); +PRIVATE objptr IntInf_toString (GC_state s, objptr arg, Int32_t base, size_t bytes); + + +objptr IntInf_add (GC_state s, objptr lhs, objptr rhs, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_add ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", + lhs, rhs, (uintmax_t)bytes); + return IntInf_binop (s, lhs, rhs, bytes, &mpz_add); +} + +objptr IntInf_andb (GC_state s, objptr lhs, objptr rhs, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_andb ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", + lhs, rhs, (uintmax_t)bytes); + return IntInf_binop (s, lhs, rhs, bytes, &mpz_and); +} + +objptr IntInf_gcd (GC_state s, objptr lhs, objptr rhs, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_gcd ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", + lhs, rhs, (uintmax_t)bytes); + return IntInf_binop (s, lhs, rhs, bytes, &mpz_gcd); +} + +objptr IntInf_mul (GC_state s, objptr lhs, objptr rhs, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_mul ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", + lhs, rhs, (uintmax_t)bytes); + return IntInf_binop (s, lhs, rhs, bytes, &mpz_mul); +} + +objptr IntInf_quot (GC_state s, objptr lhs, objptr rhs, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_quot ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", + lhs, rhs, (uintmax_t)bytes); + return IntInf_binop (s, lhs, rhs, bytes, &mpz_tdiv_q); +} + +objptr IntInf_orb (GC_state s, objptr lhs, objptr rhs, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_orb ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", + lhs, rhs, (uintmax_t)bytes); + return IntInf_binop (s, lhs, rhs, bytes, &mpz_ior); +} + +objptr IntInf_rem (GC_state s, objptr lhs, objptr rhs, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_quot ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", + lhs, rhs, (uintmax_t)bytes); + return IntInf_binop (s, lhs, rhs, bytes, &mpz_tdiv_r); +} + +objptr IntInf_sub (GC_state s, objptr lhs, objptr rhs, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_sub ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", + lhs, rhs, (uintmax_t)bytes); + return IntInf_binop (s, lhs, rhs, bytes, &mpz_sub); +} + +objptr IntInf_xorb (GC_state s, objptr lhs, objptr rhs, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_xorb ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", + lhs, rhs, (uintmax_t)bytes); + return IntInf_binop (s, lhs, rhs, bytes, &mpz_xor); +} + + +objptr IntInf_neg (GC_state s, objptr arg, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_neg ("FMTOBJPTR", %"PRIuMAX")\n", + arg, (uintmax_t)bytes); + return IntInf_unop (s, arg, bytes, &mpz_neg); +} + +objptr IntInf_notb (GC_state s, objptr arg, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_notb ("FMTOBJPTR", %"PRIuMAX")\n", + arg, (uintmax_t)bytes); + return IntInf_unop (s, arg, bytes, &mpz_com); +} + + +objptr IntInf_arshift (GC_state s, objptr arg, Word32_t shift, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_arshift ("FMTOBJPTR", %"PRIu32", %"PRIuMAX")\n", + arg, shift, (uintmax_t)bytes); + return IntInf_shop (s, arg, shift, bytes, &mpz_fdiv_q_2exp); +} + +objptr IntInf_lshift (GC_state s, objptr arg, Word32_t shift, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_lshift ("FMTOBJPTR", %"PRIu32", %"PRIuMAX")\n", + arg, shift, (uintmax_t)bytes); + return IntInf_shop (s, arg, shift, bytes, &mpz_mul_2exp); +} + + +Int32_t IntInf_compare (GC_state s, objptr lhs, objptr rhs) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_compare ("FMTOBJPTR", "FMTOBJPTR")\n", + lhs, rhs); + return IntInf_cmpop (s, lhs, rhs, &mpz_cmp); +} + + +objptr IntInf_toString (GC_state s, objptr arg, Int32_t base, size_t bytes) { + if (DEBUG_INT_INF) + fprintf (stderr, "IntInf_toString ("FMTOBJPTR", %"PRId32", %"PRIuMAX")\n", + arg, base, (uintmax_t)bytes); + return IntInf_strop (s, arg, base, bytes, &mpz_get_str); +} diff -Nru mlton-20130715/runtime/basis/MLton/bug.c mlton-20210117+dfsg/runtime/basis/MLton/bug.c --- mlton-20130715/runtime/basis/MLton/bug.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/MLton/bug.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ /* print a bug message and exit (2) */ void MLton_bug (String8_t msg) { - uintmax_t size = GC_getArrayLength ((pointer)msg); + uintmax_t size = GC_getSequenceLength ((pointer)msg); fprintf (stderr, "MLton bug: "); fwrite ((const void*)msg, (size_t)size, 1, stderr); fprintf (stderr, "\nPlease send a bug report to MLton@mlton.org.\n"); diff -Nru mlton-20130715/runtime/basis/MLton/Process/spawne.c mlton-20210117+dfsg/runtime/basis/MLton/Process/spawne.c --- mlton-20130715/runtime/basis/MLton/Process/spawne.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/MLton/Process/spawne.c 2021-12-28 17:19:36.000000000 +0000 @@ -16,11 +16,11 @@ path = (const char *) pNStr; args = (char **) aStr; - aLen = GC_getArrayLength((pointer)aStr); + aLen = GC_getSequenceLength((pointer)aStr); aSaved = args[aLen - 1]; args[aLen - 1] = NULL; env = (char **) eStr; - eLen = GC_getArrayLength((pointer)eStr); + eLen = GC_getSequenceLength((pointer)eStr); eSaved = env[eLen - 1]; env[eLen - 1] = NULL; res = spawnve (SPAWN_MODE, path, diff -Nru mlton-20130715/runtime/basis/MLton/Process/spawnp.c mlton-20210117+dfsg/runtime/basis/MLton/Process/spawnp.c --- mlton-20130715/runtime/basis/MLton/Process/spawnp.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/MLton/Process/spawnp.c 2021-12-28 17:19:36.000000000 +0000 @@ -12,7 +12,7 @@ path = (const char *) pNStr; args = (char **) aStr; - aLen = GC_getArrayLength((pointer)aStr); + aLen = GC_getSequenceLength((pointer)aStr); aSaved = args[aLen - 1]; args[aLen - 1] = NULL; res = spawnvp (SPAWN_MODE, path, diff -Nru mlton-20130715/runtime/basis/MLton/Rusage/rusage.c mlton-20210117+dfsg/runtime/basis/MLton/Rusage/rusage.c --- mlton-20130715/runtime/basis/MLton/Rusage/rusage.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/MLton/Rusage/rusage.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,5 @@ #include "platform.h" -extern struct GC_state gcState; - static struct rusage MLton_Rusage_self; static struct rusage MLton_Rusage_children; static struct rusage MLton_Rusage_gc; @@ -54,8 +52,8 @@ return MLton_Rusage_gc.ru_stime.tv_usec; } -void MLton_Rusage_getrusage (void) { - MLton_Rusage_gc = *(GC_getRusageGCAddr (&gcState)); +void MLton_Rusage_getrusage (GCState_t s) { + MLton_Rusage_gc = *(GC_getRusageGCAddr (s)); getrusage (RUSAGE_SELF, &MLton_Rusage_self); getrusage (RUSAGE_CHILDREN, &MLton_Rusage_children); } diff -Nru mlton-20130715/runtime/basis/Net/Socket/select.c mlton-20210117+dfsg/runtime/basis/Net/Socket/select.c --- mlton-20130715/runtime/basis/Net/Socket/select.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Net/Socket/select.c 2021-12-28 17:19:36.000000000 +0000 @@ -29,7 +29,7 @@ fd_set *read_fds, *write_fds, *except_fds; int res; - read_len = GC_getArrayLength((pointer)read_vec); + read_len = GC_getSequenceLength((pointer)read_vec); if (read_len > 0) { read_fds = &read_fd_set; FD_ZERO(read_fds); @@ -40,7 +40,7 @@ } else { read_fds = NULL; } - write_len = GC_getArrayLength((pointer)write_vec); + write_len = GC_getSequenceLength((pointer)write_vec); if (write_len > 0) { write_fds = &write_fd_set; FD_ZERO(write_fds); @@ -51,7 +51,7 @@ } else { write_fds = NULL; } - except_len = GC_getArrayLength((pointer)except_vec); + except_len = GC_getSequenceLength((pointer)except_vec); if (except_len > 0) { except_fds = &except_fd_set; FD_ZERO(except_fds); diff -Nru mlton-20130715/runtime/basis/Posix/Process/exece.c mlton-20210117+dfsg/runtime/basis/Posix/Process/exece.c --- mlton-20130715/runtime/basis/Posix/Process/exece.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Posix/Process/exece.c 2021-12-28 17:19:36.000000000 +0000 @@ -14,11 +14,11 @@ path = (const char *) pNStr; args = (char **) aStr; - aLen = GC_getArrayLength((pointer)aStr); + aLen = GC_getSequenceLength((pointer)aStr); aSaved = args[aLen - 1]; args[aLen - 1] = NULL; env = (char **) eStr; - eLen = GC_getArrayLength((pointer)eStr); + eLen = GC_getSequenceLength((pointer)eStr); eSaved = env[eLen - 1]; env[eLen - 1] = NULL; res = EXECVE (path, diff -Nru mlton-20130715/runtime/basis/Posix/Process/execp.c mlton-20210117+dfsg/runtime/basis/Posix/Process/execp.c --- mlton-20130715/runtime/basis/Posix/Process/execp.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Posix/Process/execp.c 2021-12-28 17:19:36.000000000 +0000 @@ -10,7 +10,7 @@ file = (const char *) fNStr; args = (char **) aStr; - aLen = GC_getArrayLength((pointer)aStr); + aLen = GC_getSequenceLength((pointer)aStr); aSaved = args[aLen - 1]; args[aLen - 1] = NULL; res = EXECVP (file, diff -Nru mlton-20130715/runtime/basis/Posix/Process/fork.c mlton-20210117+dfsg/runtime/basis/Posix/Process/fork.c --- mlton-20130715/runtime/basis/Posix/Process/fork.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Posix/Process/fork.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,5 @@ #include "platform.h" -extern struct GC_state gcState; - C_Errno_t(C_PId_t) Posix_Process_fork (void) { pid_t pid = fork (); #if (defined (__Darwin__)) @@ -10,7 +8,7 @@ * stack. */ if (pid == 0) { - GC_initSignalStack(&gcState); + GC_initSignalStack(); } #endif return pid; diff -Nru mlton-20130715/runtime/basis/Posix/Signal.c mlton-20210117+dfsg/runtime/basis/Posix/Signal.c --- mlton-20130715/runtime/basis/Posix/Signal.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Posix/Signal.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,15 +1,9 @@ #include "platform.h" -extern struct GC_state gcState; - -static void handler (int signum) { - GC_handler (&gcState, signum); -} - -C_Errno_t(C_Int_t) Posix_Signal_default (C_Signal_t signum) { +C_Errno_t(C_Int_t) Posix_Signal_default (GCState_t s, C_Signal_t signum) { struct sigaction sa; - sigdelset (GC_getSignalsHandledAddr (&gcState), signum); + sigdelset (GC_getSignalsHandledAddr (s), signum); memset (&sa, 0, sizeof(sa)); sa.sa_handler = SIG_DFL; return sigaction (signum, &sa, NULL); @@ -25,10 +19,10 @@ return res; } -C_Errno_t(C_Int_t) Posix_Signal_ignore (C_Signal_t signum) { +C_Errno_t(C_Int_t) Posix_Signal_ignore (GCState_t s, C_Signal_t signum) { struct sigaction sa; - sigdelset (GC_getSignalsHandledAddr (&gcState), signum); + sigdelset (GC_getSignalsHandledAddr (s), signum); memset (&sa, 0, sizeof(sa)); sa.sa_handler = SIG_IGN; return sigaction (signum, &sa, NULL); @@ -44,10 +38,10 @@ return res; } -C_Errno_t(C_Int_t) Posix_Signal_handlee (C_Int_t signum) { - static struct sigaction sa; +C_Errno_t(C_Int_t) Posix_Signal_handlee (GCState_t s, C_Int_t signum) { + struct sigaction sa; - sigaddset (GC_getSignalsHandledAddr (&gcState), signum); + sigaddset (GC_getSignalsHandledAddr (s), signum); memset (&sa, 0, sizeof(sa)); /* The mask must be full because GC_handler reads and writes * s->signalsPending (else there is a race condition). @@ -56,51 +50,49 @@ #if HAS_SIGALTSTACK sa.sa_flags = SA_ONSTACK; #endif - sa.sa_handler = handler; + sa.sa_handler = GC_handler; return sigaction (signum, &sa, NULL); } -void Posix_Signal_handleGC (void) { - GC_setGCSignalHandled (&gcState, TRUE); +void Posix_Signal_handleGC (GCState_t s) { + GC_setGCSignalHandled (s, TRUE); } -C_Int_t Posix_Signal_isPending (C_Int_t signum) { - return sigismember (GC_getSignalsPendingAddr (&gcState), signum); +C_Int_t Posix_Signal_isPending (GCState_t s, C_Int_t signum) { + return sigismember (GC_getSignalsPendingAddr (s), signum); } -C_Int_t Posix_Signal_isPendingGC (void) { - return GC_getGCSignalPending (&gcState); +C_Int_t Posix_Signal_isPendingGC (GCState_t s) { + return GC_getGCSignalPending (s); } -void Posix_Signal_resetPending (void) { - sigemptyset (GC_getSignalsPendingAddr (&gcState)); - GC_setGCSignalPending (&gcState, FALSE); +void Posix_Signal_resetPending (GCState_t s) { + sigemptyset (GC_getSignalsPendingAddr (s)); + GC_setGCSignalPending (s, FALSE); } -static sigset_t Posix_Signal_sigset; - -C_Errno_t(C_Int_t) Posix_Signal_sigaddset (C_Signal_t signum) { - return sigaddset (&Posix_Signal_sigset, signum); +C_Errno_t(C_Int_t) Posix_Signal_sigaddset (Array(Word8_t) sigset, C_Signal_t signum) { + return sigaddset ((sigset_t*)sigset, signum); } -C_Errno_t(C_Int_t) Posix_Signal_sigdelset (C_Signal_t signum) { - return sigdelset (&Posix_Signal_sigset, signum); +C_Errno_t(C_Int_t) Posix_Signal_sigdelset (Array(Word8_t) sigset, C_Signal_t signum) { + return sigdelset ((sigset_t*)sigset, signum); } -C_Errno_t(C_Int_t) Posix_Signal_sigemptyset (void) { - return sigemptyset (&Posix_Signal_sigset); +C_Errno_t(C_Int_t) Posix_Signal_sigemptyset (Array(Word8_t) sigset) { + return sigemptyset ((sigset_t*)sigset); } -C_Errno_t(C_Int_t) Posix_Signal_sigfillset (void) { - return sigfillset (&Posix_Signal_sigset); +C_Errno_t(C_Int_t) Posix_Signal_sigfillset (Array(Word8_t) sigset) { + return sigfillset ((sigset_t*)sigset); } -C_Errno_t(C_Int_t) Posix_Signal_sigismember (C_Signal_t signum) { - return sigismember (&Posix_Signal_sigset, signum); +C_Errno_t(C_Int_t) Posix_Signal_sigismember (Vector(Word8_t) sigset, C_Signal_t signum) { + return sigismember ((sigset_t*)sigset, signum); } -C_Errno_t(C_Int_t) Posix_Signal_sigprocmask (C_Int_t how) { - return sigprocmask (how, &Posix_Signal_sigset, &Posix_Signal_sigset); +C_Errno_t(C_Int_t) Posix_Signal_sigprocmask (C_Int_t how, Vector(Word8_t) sigset, Array(Word8_t) oldsigset) { + return sigprocmask (how, (sigset_t*)sigset, (sigset_t*)oldsigset); } #if ASSERT @@ -109,9 +101,9 @@ #define LOCAL_USED_FOR_ASSERT __attribute__ ((unused)) #endif -void Posix_Signal_sigsuspend (void) { +void Posix_Signal_sigsuspend (Vector(Word8_t) sigset) { LOCAL_USED_FOR_ASSERT int res; - res = sigsuspend (&Posix_Signal_sigset); + res = sigsuspend ((sigset_t*)sigset); assert (-1 == res); } diff -Nru mlton-20130715/runtime/basis/Posix/Signal-consts.c mlton-20210117+dfsg/runtime/basis/Posix/Signal-consts.c --- mlton-20130715/runtime/basis/Posix/Signal-consts.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Posix/Signal-consts.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,5 +1,7 @@ #include "platform.h" +const C_Size_t Posix_Signal_sigSetLen = sizeof (sigset_t); + #if (defined (NSIG)) const C_Int_t Posix_Signal_NSIG = NSIG; #elif (defined (_NSIG)) diff -Nru mlton-20130715/runtime/basis/Real/Math.c mlton-20210117+dfsg/runtime/basis/Real/Math.c --- mlton-20130715/runtime/basis/Real/Math.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Real/Math.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -#include "platform.h" - -#include "Math-fns.h" diff -Nru mlton-20130715/runtime/basis/Real/Math-fns.h mlton-20210117+dfsg/runtime/basis/Real/Math-fns.h --- mlton-20130715/runtime/basis/Real/Math-fns.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Real/Math-fns.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,124 +0,0 @@ - -#define unaryReal(g, h) \ - MLTON_CODEGEN_MATHFN(Real64_t h(Real64_t x);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real64_t Real64_##g (Real64_t x) { \ - return h (x); \ - } \ - MLTON_CODEGEN_MATHFN(Real32_t h##f(Real32_t x);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real32_t Real32_##g (Real32_t x) { \ - return h##f (x); \ - } -unaryReal(abs, fabs) -unaryReal(realCeil, ceil) -unaryReal(realFloor, floor) -unaryReal(realTrunc, trunc) -unaryReal(round, rint) -#undef unaryReal - -#define binaryReal(g, h) \ - MLTON_CODEGEN_MATHFN(Real64_t h(Real64_t x, Real64_t y);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real64_t Real64_Math_##g (Real64_t x, Real64_t y) { \ - return h (x, y); \ - } \ - MLTON_CODEGEN_MATHFN(Real32_t h##f(Real32_t x, Real32_t y);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real32_t Real32_Math_##g (Real32_t x, Real32_t y) { \ - return h##f (x, y); \ - } -binaryReal(atan2, atan2) -binaryReal(pow, pow) -#undef binaryReal - -#define unaryReal(g, h) \ - MLTON_CODEGEN_MATHFN(Real64_t h(Real64_t x);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real64_t Real64_Math_##g (Real64_t x) { \ - return h (x); \ - } \ - MLTON_CODEGEN_MATHFN(Real32_t h##f(Real32_t x);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real32_t Real32_Math_##g (Real32_t x) { \ - return h##f (x); \ - } -unaryReal(acos, acos) -unaryReal(asin, asin) -unaryReal(atan, atan) -unaryReal(cos, cos) -unaryReal(cosh, cosh) -unaryReal(exp, exp) -unaryReal(ln, log) -unaryReal(log10, log10) -unaryReal(sin, sin) -unaryReal(sinh, sinh) -unaryReal(sqrt, sqrt) -unaryReal(tan, tan) -unaryReal(tanh, tanh) -#undef unaryReal - -#define binaryRealIntRef(g, h) \ - MLTON_CODEGEN_MATHFN(Real64_t h (Real64_t x, int* ip);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real64_t Real64_##g (Real64_t x, Ref(C_Int_t) i) { \ - return h (x, (int*)i); \ - } \ - MLTON_CODEGEN_MATHFN(Real32_t h##f (Real32_t x, int* ip);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real32_t Real32_##g (Real32_t x, Ref(C_Int_t) i) { \ - return h##f (x, (int*)i); \ - } -binaryRealIntRef(frexp, frexp) -#undef binaryRealIntRef - -#define binaryRealInt(g, h) \ - MLTON_CODEGEN_MATHFN(Real64_t h (Real64_t x, int i);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real64_t Real64_##g (Real64_t x, C_Int_t i) { \ - return h (x, i); \ - } \ - MLTON_CODEGEN_MATHFN(Real32_t h##f (Real32_t x, int i);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real32_t Real32_##g (Real32_t x, C_Int_t i) { \ - return h##f (x, i); \ - } -binaryRealInt(ldexp, ldexp) -#undef binaryRealInt - -#if (defined (__hppa__) || defined (__sparc__)) -#define binaryRealRealRef(g, h) \ - MLTON_CODEGEN_MATHFN(Real32_t h##f (Real32_t x, Real32_t *yp);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real32_t Real32_##g (Real32_t x, Ref(Real32_t) yp) { \ - /* Real32_t r, res; */ \ - /* r = Real32_fetch (yp); */ \ - /* res = h##f (x, &r); */ \ - /* Real32_store (yp, r); */ \ - /* return res; */ \ - return h##f (x, (Real32_t*)yp); \ - } \ - MLTON_CODEGEN_MATHFN(Real64_t h (Real64_t x, Real64_t *yp);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real64_t Real64_##g (Real64_t x, Ref(Real64_t) yp) { \ - Real64_t r, res; \ - /* r = Real64_fetch (yp); */ \ - res = h (x, &r); \ - Real64_store (yp, r); \ - return res; \ - } -#else -#define binaryRealRealRef(g, h) \ - MLTON_CODEGEN_MATHFN(Real32_t h##f (Real32_t x, Real32_t *yp);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real32_t Real32_##g (Real32_t x, Ref(Real32_t) yp) { \ - return h##f (x, (Real32_t*)yp); \ - } \ - MLTON_CODEGEN_MATHFN(Real64_t h (Real64_t x, Real64_t *yp);) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real64_t Real64_##g (Real64_t x, Ref(Real64_t) yp) { \ - return h (x, (Real64_t*)yp); \ - } -#endif -binaryRealRealRef(modf, modf) -#undef binaryRealRealRef diff -Nru mlton-20130715/runtime/basis/Real/Real.c mlton-20210117+dfsg/runtime/basis/Real/Real.c --- mlton-20130715/runtime/basis/Real/Real.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Real/Real.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,3 +1,3 @@ #include "platform.h" -#include "Real-ops.h" +#include "basis/Real/Real-ops.h" diff -Nru mlton-20130715/runtime/basis/Real/Real-consts.c mlton-20210117+dfsg/runtime/basis/Real/Real-consts.c --- mlton-20130715/runtime/basis/Real/Real-consts.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Real/Real-consts.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -#include "platform.h" - -Real32_t Real32_Math_pi = (Real32_t)3.14159265358979323846; -Real32_t Real32_Math_e = (Real32_t)2.71828182845904523536; - -Real64_t Real64_Math_pi = 3.14159265358979323846; -Real64_t Real64_Math_e = 2.71828182845904523536; diff -Nru mlton-20130715/runtime/basis/Real/Real-ops.h mlton-20210117+dfsg/runtime/basis/Real/Real-ops.h --- mlton-20130715/runtime/basis/Real/Real-ops.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Real/Real-ops.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,57 +1,120 @@ +#define FNSUF32 f +#define FNSUF64 -#define binary(size, name, op) \ - MLTON_CODEGEN_STATIC_INLINE \ +#define naryNameFnSufResArgsCall_(size, name, f, suf, rty, args, call) \ + PRIVATE INLINE \ + rty Real##size##_##name args { \ + return f##suf call; \ + } +#define naryNameFnSufResArgsCall(size, name, f, suf, rty, args, call) \ +naryNameFnSufResArgsCall_(size, name, f, suf, rty, args, call) +#define naryNameFnResArgsCall(size, name, f, rty, args, call) \ +naryNameFnSufResArgsCall(size, name, f, FNSUF##size, rty, args, call) + +#define binaryOp(size, name, op) \ + PRIVATE INLINE \ Real##size##_t Real##size##_##name (Real##size##_t r1, Real##size##_t r2) { \ return r1 op r2; \ } -#define compare(size, name, op) \ - MLTON_CODEGEN_STATIC_INLINE \ +#define binaryNameFn(size, name, f) \ +naryNameFnResArgsCall(size, name, f, Real##size##_t, (Real##size##_t r1, Real##size##_t r2), (r1, r2)) + +#define binaryFn(size, f) \ +binaryNameFn(size, f, f) + +#define binaryMathFn(size, f) \ +binaryNameFn(size, Math_##f, f) + +#define compareNameFn(size, name, f) \ + PRIVATE INLINE \ Bool Real##size##_##name (Real##size##_t r1, Real##size##_t r2) { \ - return r1 op r2; \ + return f (r1, r2); \ } -#define ternary(size, name, op) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real##size##_t Real##size##_mul##name (Real##size##_t r1, Real##size##_t r2, Real##size##_t r3) { \ - return r1 * r2 op r3; \ +#define equal(size) \ + PRIVATE INLINE \ + Bool Real##size##_equal (Real##size##_t r1, Real##size##_t r2) { \ + return r1 == r2; \ } -#define unary(size, name, op) \ - MLTON_CODEGEN_STATIC_INLINE \ - Real##size##_t Real##size##_##name (Real##size##_t r1) { \ - return op r1; \ +#define fmaNameOp(size, name, op) \ +naryNameFnResArgsCall(size, name, fma, Real##size##_t, (Real##size##_t r1, Real##size##_t r2, Real##size##_t r3), (r1, r2, op r3)) + +#define qequal(size) \ + PRIVATE INLINE \ + Bool Real##size##_qequal (Real##size##_t r1, Real##size##_t r2) { \ + return isunordered (r1, r2) || r1 == r2; \ + } + +#define unaryOp(size, name, op) \ + PRIVATE INLINE \ + Real##size##_t Real##size##_##name (Real##size##_t r) { \ + return op r; \ } +#define unaryNameFn(size, name, f) \ +naryNameFnResArgsCall(size, name, f, Real##size##_t, (Real##size##_t r), (r)) + +#define unaryFn(size, f) \ +unaryNameFn(size, f, f) + +#define unaryMathFn(size, f) \ +unaryNameFn(size, Math_##f, f) + #define misaligned(size) \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ Real##size##_t Real##size##_fetch (Ref(Real##size##_t) rp) { \ Real##size##_t r; \ memcpy(&r, rp, sizeof(Real##size##_t)); \ return r; \ } \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ void Real##size##_store (Ref(Real##size##_t) rp, Real##size##_t r) { \ memcpy(rp, &r, sizeof(Real##size##_t)); \ return; \ } \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ void Real##size##_move (Ref(Real##size##_t) dst, Ref(Real##size##_t) src) { \ memcpy(dst, src, sizeof(Real##size##_t)); \ return; \ } #define all(size) \ -binary(size, add, +) \ -binary(size, div, /) \ -binary(size, mul, *) \ -binary(size, sub, -) \ -compare(size, equal, ==) \ -compare(size, le, <=) \ -compare(size, lt, <) \ -ternary(size, add, +) \ -ternary(size, sub, -) \ -unary(size, neg, -) \ +unaryNameFn(size, abs, fabs) \ +binaryOp(size, add, +) \ +binaryOp(size, div, /) \ +equal(size) \ +naryNameFnResArgsCall(size, frexp, frexp, Real##size##_t, (Real##size##_t r, Ref(C_Int_t) ip), (r, (int*)ip)) \ +naryNameFnResArgsCall(size, ldexp, ldexp, Real##size##_t, (Real##size##_t r, C_Int_t i), (r, i)) \ +compareNameFn(size, le, islessequal) \ +compareNameFn(size, lt, isless) \ +naryNameFnResArgsCall(size, modf, modf, Real##size##_t, (Real##size##_t x, Ref(Real##size##_t) yp), (x, (Real##size##_t*)yp)) \ +binaryOp(size, mul, *) \ +fmaNameOp(size, muladd, ) \ +fmaNameOp(size, mulsub, -) \ +unaryOp(size, neg, -) \ +qequal(size) \ +unaryNameFn(size, realCeil, ceil) \ +unaryNameFn(size, realFloor, floor) \ +unaryNameFn(size, realTrunc, trunc) \ +unaryNameFn(size, round, rint) \ +binaryOp(size, sub, -) \ +unaryMathFn(size, acos) \ +unaryMathFn(size, asin) \ +unaryMathFn(size, atan) \ +binaryMathFn(size, atan2) \ +unaryMathFn(size, cos) \ +unaryMathFn(size, cosh) \ +unaryMathFn(size, exp) \ +unaryNameFn(size, Math_ln, log) \ +unaryMathFn(size, log10) \ +binaryMathFn(size, pow) \ +unaryMathFn(size, sin) \ +unaryMathFn(size, sinh) \ +unaryMathFn(size, sqrt) \ +unaryMathFn(size, tan) \ +unaryMathFn(size, tanh) \ misaligned(size) all(32) @@ -59,7 +122,20 @@ #undef all #undef misaligned -#undef unary -#undef ternary -#undef compare -#undef binary +#undef unaryMathFn +#undef unaryFn +#undef unaryNameFn +#undef unaryOp +#undef qequal +#undef fmaNameOp +#undef equal +#undef compareNameFn +#undef binaryMathFn +#undef binaryFn +#undef binaryNameFn +#undef binaryOp +#undef naryNameFnResArgsCall +#undef naryNameFnSufResArgsCall +#undef naryNameFnSufResArgsCall_ +#undef FNSUF64 +#undef FNSUF32 diff -Nru mlton-20130715/runtime/basis/Stdio.c mlton-20210117+dfsg/runtime/basis/Stdio.c --- mlton-20130715/runtime/basis/Stdio.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Stdio.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,12 +1,12 @@ #include "platform.h" void Stdio_printStderr (String8_t s) { - uintmax_t size = GC_getArrayLength ((pointer)s); + uintmax_t size = GC_getSequenceLength ((pointer)s); fwrite ((const void*)s, (size_t)size, 1, stderr); } void Stdio_printStdout (String8_t s) { - uintmax_t size = GC_getArrayLength ((pointer)s); + uintmax_t size = GC_getSequenceLength ((pointer)s); fwrite ((const void*)s, (size_t)size, 1, stdout); } diff -Nru mlton-20130715/runtime/basis/Word/Word.c mlton-20210117+dfsg/runtime/basis/Word/Word.c --- mlton-20130715/runtime/basis/Word/Word.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Word/Word.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,5 +1,3 @@ #include "platform.h" -#include "Word-consts.h" -#include "Word-ops.h" -#include "Word-check.h" +#include "basis/Word/Word-ops.h" diff -Nru mlton-20130715/runtime/basis/Word/Word-check.h mlton-20210117+dfsg/runtime/basis/Word/Word-check.h --- mlton-20130715/runtime/basis/Word/Word-check.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Word/Word-check.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,168 +0,0 @@ - -#define WordS_addCheckBody(size, x, y, doOverflow, doSuccess) \ - do { \ - if (x >= 0) { \ - if (y > WordS##size##_max - x) { \ - doOverflow; \ - } \ - } else if (y < WordS##size##_min - x) { \ - doOverflow; \ - } \ - doSuccess; \ - } while (0) -#define WordS_addCheckBodyCX(size, c, x, doOverflow, doSuccess) \ -WordS_addCheckBody(size, c, x, doOverflow, doSuccess) - -#define WordU_addCheckBody(size, x, y, doOverflow, doSuccess) \ - do { \ - if (y > Word##size##_max - x) { \ - doOverflow; \ - } \ - doSuccess; \ - } while (0) -#define WordU_addCheckBodyCX(size, c, x, doOverflow, doSuccess) \ -WordU_addCheckBody(size, c, x, doOverflow, doSuccess) - -#define WordS_mulCheckBody(size, x, y, doOverflow, doSuccess) \ - do { \ - if ((x == (WordS##size)0) || (y == (WordS##size)0)) { \ - } else \ - if (x > (WordS## size)0) { \ - if (y > (WordS##size)0) { \ - if (x > WordS##size##_quot (WordS##size##_max, y)) { \ - doOverflow; \ - } \ - } else /* (y < (WordS##size)0) */ { \ - if (y < WordS##size##_quot (WordS##size##_min, x)) { \ - doOverflow; \ - } \ - } \ - } else /* (x < (WordS##size)0) */ { \ - if (y > (WordS##size)0) { \ - if (x < WordS##size##_quot (WordS##size##_min, y)) { \ - doOverflow; \ - } \ - } else /* (y < (WordS##size)0) */ { \ - if (y < WordS##size##_quot (WordS##size##_max, x)) { \ - doOverflow; \ - } \ - } \ - } \ - doSuccess; \ - } while (0) -// #undef WordS_mulCheckBody -#define WordU_mulCheckBody(size, x, y, doOverflow, doSuccess) \ - do { \ - if ((x == (WordU##size)0) || (y == (WordU##size)0)) { \ - } else \ - if (x > WordU##size##_quot (Word##size##_max, y)) { \ - doOverflow; \ - } \ - doSuccess; \ - } while (0) -// #undef WordU_mulCheckBody -/* #define Word_mulCheckBody(small, large, x, y, doOverflow, doSuccess) \ */ -/* do { \ */ -/* Word##large tmp; \ */ -/* Word##small res; \ */ -/* tmp = ((Word##large)x) * ((Word##large)y); \ */ -/* res = (Word##small)tmp; \ */ -/* if (tmp != res) { \ */ -/* doOverflow; \ */ -/* } \ */ -/* doSuccess; \ */ -/* } while (0) */ -/* #define WordS_mulCheckBody(small, large, x, y, doOverflow, doSuccess) \ */ -/* Word_mulCheckBody(S##small, S##large, x, y, doOverflow, doSuccess) */ -/* #define WordU_mulCheckBody(small, large, x, y, doOverflow, doSuccess) \ */ -/* Word_mulCheckBody(U##small, U##large, x, y, doOverflow, doSuccess) */ - -#define WordS_negCheckBody(size, x, doOverflow, doSuccess) \ - do { \ - if (x == WordS##size##_min) { \ - doOverflow; \ - } \ - doSuccess; \ - } while (0) - -#define WordS_subCheckBodyCX(size, c, x, doOverflow, doSuccess) \ - do { \ - if (c >= 0) { \ - if (x < c - WordS##size##_max) { \ - doOverflow; \ - } \ - } else if (x > c - WordS##size##_min) { \ - doOverflow; \ - } \ - doSuccess; \ - } while (0) -#define WordS_subCheckBodyXC(size, x, c, doOverflow, doSuccess) \ - do { \ - if (c <= 0) { \ - if (x > WordS##size##_max + c) { \ - doOverflow; \ - } \ - } else if (x < WordS##size##_min + c) { \ - doOverflow; \ - } \ - doSuccess; \ - } while (0) -#define WordS_subCheckBody(size, x, y, doOverflow, doSuccess) \ -WordS_subCheckBodyCX(size, x, y, doOverflow, doSuccess) - - -#define WordS_addCheckOverflows(size) \ - MLTON_CODEGEN_STATIC_INLINE \ - Bool WordS##size##_addCheckOverflows (WordS##size x, WordS##size y) { \ - WordS_addCheckBody(size, x, y, return TRUE, return FALSE); \ - } - -#define WordU_addCheckOverflows(size) \ - MLTON_CODEGEN_STATIC_INLINE \ - Bool WordU##size##_addCheckOverflows (WordU##size x, WordU##size y) { \ - WordU_addCheckBody(size, x, y, return TRUE, return FALSE); \ - } - -#define WordS_mulCheckOverflows(size) \ - MLTON_CODEGEN_STATIC_INLINE \ - Bool WordS##size##_mulCheckOverflows (WordS##size x, WordS##size y) { \ - WordS_mulCheckBody(size, x, y, return TRUE, return FALSE); \ - } -#define WordU_mulCheckOverflows(size) \ - MLTON_CODEGEN_STATIC_INLINE \ - Bool WordU##size##_mulCheckOverflows (WordU##size x, WordU##size y) { \ - WordU_mulCheckBody(size, x, y, return TRUE, return FALSE); \ - } - -#define WordS_negCheckOverflows(size) \ - MLTON_CODEGEN_STATIC_INLINE \ - Bool WordS##size##_negCheckOverflows (WordS##size x) { \ - WordS_negCheckBody(size, x, return TRUE, return FALSE); \ - } - -#define WordS_subCheckOverflows(size) \ - MLTON_CODEGEN_STATIC_INLINE \ - Bool WordS##size##_subCheckOverflows (WordS##size x, WordS##size y) { \ - WordS_subCheckBody(size, x, y, return TRUE, return FALSE); \ - } - -#define all(size) \ -WordS_addCheckOverflows(size) \ -WordU_addCheckOverflows(size) \ -WordS_mulCheckOverflows(size) \ -WordU_mulCheckOverflows(size) \ -WordS_negCheckOverflows(size) \ -WordS_subCheckOverflows(size) - -all(8) -all(16) -all(32) -all(64) - -#undef all -#undef WordS_subCheckOverflows -#undef WordS_negCheckOverflows -#undef WordU_mulCheckOverflows -#undef WordS_mulCheckOverflows -#undef WordU_addCheckOverflows -#undef WordS_addCheckOverflows diff -Nru mlton-20130715/runtime/basis/Word/Word-consts.h mlton-20210117+dfsg/runtime/basis/Word/Word-consts.h --- mlton-20130715/runtime/basis/Word/Word-consts.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Word/Word-consts.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -#define WordS8_max (WordS8)0x7F -#define WordS8_min (WordS8)0x80 -#define WordS16_max (WordS16)0x7FFF -#define WordS16_min (WordS16)0x8000 -#define WordS32_max (WordS32)0x7FFFFFFF -#define WordS32_min (WordS32)0x80000000 -#define WordS64_max (WordS64)0x7FFFFFFFFFFFFFFFll -#define WordS64_min (WordS64)0x8000000000000000ll -#define Word8_max (Word8)0xFF -#define Word16_max (Word16)0xFFFF -#define Word32_max (Word32)0xFFFFFFFF -#define Word64_max (Word64)0xFFFFFFFFFFFFFFFFull diff -Nru mlton-20130715/runtime/basis/Word/Word-ops.h mlton-20210117+dfsg/runtime/basis/Word/Word-ops.h --- mlton-20130715/runtime/basis/Word/Word-ops.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis/Word/Word-ops.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,5 @@ - #define binary(kind, name, op) \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ Word##kind Word##kind##_##name (Word##kind w1, Word##kind w2) { \ return w1 op w2; \ } @@ -9,8 +8,45 @@ binary (S##size, name, op) \ binary (U##size, name, op) +/* Use `__builtin__overflow` for `Word_`, + * because it has defined semantics even if the operation overflows + * and to encourage fusing with matching `Word_CheckP`. + */ +#define binaryOvflOp(kind, name) \ + PRIVATE INLINE \ + Word##kind Word##kind##_##name (Word##kind w1, Word##kind w2) { \ + Word##kind res; \ + __builtin_##name##_overflow(w1, w2, &res); \ + return res; \ + } + +#define bothBinaryOvflOp(size, name) \ +binaryOvflOp (S##size, name) \ +binaryOvflOp (U##size, name) + +#define binaryOvflChk(kind, name) \ + PRIVATE INLINE \ + Bool Word##kind##_##name##CheckP (Word##kind w1, Word##kind w2) { \ + Word##kind res; \ + return __builtin_##name##_overflow(w1, w2, &res); \ + } + +#define bothBinaryOvflChk(size, name) \ +binaryOvflChk (S##size, name) \ +binaryOvflChk (U##size, name) + +#define binaryOvflOpAndChk(kind, name) \ + PRIVATE INLINE \ + void Word##kind##_##name##AndCheck (Word##kind w1, Word##kind w2, Word##kind *rw, Bool *rb) { \ + *rb = __builtin_##name##_overflow(w1, w2, rw); \ + } + +#define bothBinaryOvflOpAndChk(size, name) \ +binaryOvflOpAndChk (S##size, name) \ +binaryOvflOpAndChk (U##size, name) + #define compare(kind, name, op) \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ Bool Word##kind##_##name (Word##kind w1, Word##kind w2) { \ return w1 op w2; \ } @@ -19,50 +55,73 @@ compare (S##size, name, op) \ compare (U##size, name, op) +#define negOvflOp(kind) \ + PRIVATE INLINE \ + Word##kind Word##kind##_neg (Word##kind w) { \ + Word##kind res; \ + __builtin_sub_overflow(0, w, &res); \ + return res; \ + } + +#define negOvflChk(kind) \ + PRIVATE INLINE \ + Bool Word##kind##_negCheckP (Word##kind w) { \ + Word##kind res; \ + return __builtin_sub_overflow(0, w, &res); \ + } + +#define negOvflOpAndChk(kind) \ + PRIVATE INLINE \ + void Word##kind##_negAndCheck (Word##kind w, Word##kind *rw, Bool *rb) { \ + *rb = __builtin_sub_overflow(0, w, rw); \ + } + #define rol(size) \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ Word##size Word##size##_rol (Word##size w1, Word32 w2) { \ return (Word##size)(w1 >> (size - w2)) | (Word##size)(w1 << w2); \ } #define ror(size) \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ Word##size Word##size##_ror (Word##size w1, Word32 w2) { \ return (Word##size)(w1 >> w2) | (Word##size)(w1 << (size - w2)); \ } \ #define shift(kind, name, op) \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ Word##kind Word##kind##_##name (Word##kind w1, Word32 w2) { \ return (Word##kind)(w1 op w2); \ } #define unary(kind, name, op) \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ Word##kind Word##kind##_##name (Word##kind w) { \ return (Word##kind)(op w); \ } #define misaligned(size) \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ Word##size##_t Word##size##_fetch (Ref(Word##size##_t) wp) { \ Word##size##_t w; \ memcpy(&w, wp, sizeof(Word##size##_t)); \ return w; \ } \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ void Word##size##_store (Ref(Word##size##_t) wp, Word##size##_t w) { \ memcpy(wp, &w, sizeof(Word##size##_t)); \ return; \ } \ - MLTON_CODEGEN_STATIC_INLINE \ + PRIVATE INLINE \ void Word##size##_move (Ref(Word##size##_t) dst, Ref(Word##size##_t) src) { \ memcpy(dst, src, sizeof(Word##size##_t)); \ return; \ } #define all(size) \ -binary (size, add, +) \ +binaryOvflOp (size, add) \ +bothBinaryOvflChk (size, add) \ +bothBinaryOvflOpAndChk (size, add) \ binary (size, andb, &) \ compare (size, equal, ==) \ bothCompare (size, ge, >=) \ @@ -70,26 +129,32 @@ bothCompare (size, le, <=) \ shift (size, lshift, <<) \ bothCompare (size, lt, <) \ -bothBinary (size, mul, *) \ -unary (size, neg, -) \ +bothBinaryOvflOp (size, mul) \ +bothBinaryOvflChk (size, mul) \ +bothBinaryOvflOpAndChk (size, mul) \ +negOvflOp (size) \ +negOvflChk (S##size) \ +negOvflChk (U##size) \ +negOvflOpAndChk (S##size) \ +negOvflOpAndChk (U##size) \ unary (size, notb, ~) \ -/* WordS_quot and WordS_rem can't be inlined with the C-codegen, \ - * because the gcc optimizer sometimes produces incorrect results \ - * when one of the arguments is a constant. \ - */ \ -MLTON_CODEGEN_WORDSQUOTREM_IMPL(binary (S##size, quot, /)) \ -MLTON_CODEGEN_WORDSQUOTREM_IMPL(binary (S##size, rem, %)) \ -binary (U##size, quot, /) \ -binary (U##size, rem, %) \ +bothBinary (size, quot, /) \ +bothBinary (size, rem, %) \ binary (size, orb, |) \ rol(size) \ ror(size) \ -/* WordS_rshift isn't ANSI C, because ANSI doesn't guarantee sign \ - * extension. We use it anyway cause it always seems to work. \ - */ \ +/* WordS_rshift has implementation-defined behavior under C11. + * "The result of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has a + * signed type and a negative value, the resulting value is + * implementation-defined." + * However, gcc and clang implement signed '>>' on negative numbers by sign + * extension. + */ \ shift (S##size, rshift, >>) \ shift (U##size, rshift, >>) \ -binary (size, sub, -) \ +binaryOvflOp (size, sub) \ +bothBinaryOvflChk (size, sub) \ +bothBinaryOvflOpAndChk (size, sub) \ binary (size, xorb, ^) all (8) @@ -105,7 +170,16 @@ #undef shift #undef ror #undef rol +#undef negOvflOpAndChk +#undef negOvflChk +#undef negOvflOp #undef bothCompare #undef compare +#undef bothBinaryOvflOpAndChk +#undef binaryOvflOpAndChk +#undef bothBinaryOvflChk +#undef binaryOvflChk +#undef bothBinaryOvflOp +#undef binaryOvflOp #undef bothBinary #undef binary diff -Nru mlton-20130715/runtime/basis-ffi.h mlton-20210117+dfsg/runtime/basis-ffi.h --- mlton-20130715/runtime/basis-ffi.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/basis-ffi.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,10 +1,7 @@ /* This file is automatically generated. Do not edit. */ - #ifndef _MLTON_BASIS_FFI_H_ - #define _MLTON_BASIS_FFI_H_ - PRIVATE extern C_Int_t CommandLine_argc; PRIVATE extern C_StringArray_t CommandLine_argv; PRIVATE extern C_String_t CommandLine_commandName; @@ -72,7 +69,7 @@ PRIVATE C_SUSeconds_t MLton_Rusage_gc_stime_usec(void); PRIVATE C_Time_t MLton_Rusage_gc_utime_sec(void); PRIVATE C_SUSeconds_t MLton_Rusage_gc_utime_usec(void); -PRIVATE void MLton_Rusage_getrusage(void); +PRIVATE void MLton_Rusage_getrusage(GCState_t); PRIVATE C_Time_t MLton_Rusage_self_stime_sec(void); PRIVATE C_SUSeconds_t MLton_Rusage_self_stime_usec(void); PRIVATE C_Time_t MLton_Rusage_self_utime_sec(void); @@ -568,42 +565,43 @@ PRIVATE extern const C_Int_t Posix_Process_W_NOHANG; PRIVATE extern const C_Int_t Posix_Process_W_UNTRACED; PRIVATE C_Errno_t(C_PId_t) Posix_Process_waitpid(C_PId_t,Ref(C_Status_t),C_Int_t); -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_default(C_Signal_t); -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_handlee(C_Signal_t); -PRIVATE void Posix_Signal_handleGC(void); -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_ignore(C_Signal_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_default(GCState_t,C_Signal_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_handlee(GCState_t,C_Signal_t); +PRIVATE void Posix_Signal_handleGC(GCState_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_ignore(GCState_t,C_Signal_t); PRIVATE C_Errno_t(C_Int_t) Posix_Signal_isDefault(C_Signal_t,Ref(C_Int_t)); PRIVATE C_Errno_t(C_Int_t) Posix_Signal_isIgnore(C_Signal_t,Ref(C_Int_t)); -PRIVATE C_Int_t Posix_Signal_isPending(C_Signal_t); -PRIVATE C_Int_t Posix_Signal_isPendingGC(void); +PRIVATE C_Int_t Posix_Signal_isPending(GCState_t,C_Signal_t); +PRIVATE C_Int_t Posix_Signal_isPendingGC(GCState_t); PRIVATE extern const C_Int_t Posix_Signal_NSIG; -PRIVATE void Posix_Signal_resetPending(void); +PRIVATE void Posix_Signal_resetPending(GCState_t); PRIVATE extern const C_Int_t Posix_Signal_SIG_BLOCK; PRIVATE extern const C_Int_t Posix_Signal_SIG_SETMASK; PRIVATE extern const C_Int_t Posix_Signal_SIG_UNBLOCK; PRIVATE extern const C_Signal_t Posix_Signal_SIGABRT; -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigaddset(C_Signal_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigaddset(Array(Word8_t),C_Signal_t); PRIVATE extern const C_Signal_t Posix_Signal_SIGALRM; PRIVATE extern const C_Signal_t Posix_Signal_SIGBUS; PRIVATE extern const C_Signal_t Posix_Signal_SIGCHLD; PRIVATE extern const C_Signal_t Posix_Signal_SIGCONT; -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigdelset(C_Signal_t); -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigemptyset(void); -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigfillset(void); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigdelset(Array(Word8_t),C_Signal_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigemptyset(Array(Word8_t)); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigfillset(Array(Word8_t)); PRIVATE extern const C_Signal_t Posix_Signal_SIGFPE; PRIVATE extern const C_Signal_t Posix_Signal_SIGHUP; PRIVATE extern const C_Signal_t Posix_Signal_SIGILL; PRIVATE extern const C_Signal_t Posix_Signal_SIGINT; -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigismember(C_Signal_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigismember(Vector(Word8_t),C_Signal_t); PRIVATE extern const C_Signal_t Posix_Signal_SIGKILL; PRIVATE extern const C_Signal_t Posix_Signal_SIGPIPE; PRIVATE extern const C_Signal_t Posix_Signal_SIGPOLL; -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigprocmask(C_Int_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigprocmask(C_Int_t,Vector(Word8_t),Array(Word8_t)); PRIVATE extern const C_Signal_t Posix_Signal_SIGPROF; PRIVATE extern const C_Signal_t Posix_Signal_SIGQUIT; PRIVATE extern const C_Signal_t Posix_Signal_SIGSEGV; +PRIVATE extern const C_Size_t Posix_Signal_sigSetLen; PRIVATE extern const C_Signal_t Posix_Signal_SIGSTOP; -PRIVATE void Posix_Signal_sigsuspend(void); +PRIVATE void Posix_Signal_sigsuspend(Vector(Word8_t)); PRIVATE extern const C_Signal_t Posix_Signal_SIGSYS; PRIVATE extern const C_Signal_t Posix_Signal_SIGTERM; PRIVATE extern const C_Signal_t Posix_Signal_SIGTRAP; @@ -748,108 +746,104 @@ PRIVATE extern const C_Int_t Posix_TTY_V_VSTOP; PRIVATE extern const C_Int_t Posix_TTY_V_VSUSP; PRIVATE extern const C_Int_t Posix_TTY_V_VTIME; -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_abs(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_add(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Real32_castToWord32(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_div(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real32_equal(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_fetch(Ref(Real32_t)); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_frexp(Real32_t,Ref(C_Int_t)); +PRIVATE INLINE Real32_t Real32_abs(Real32_t); +PRIVATE INLINE Real32_t Real32_add(Real32_t,Real32_t); +PRIVATE INLINE Word32_t Real32_castToWord32(Real32_t); +PRIVATE INLINE Real32_t Real32_div(Real32_t,Real32_t); +PRIVATE INLINE Bool_t Real32_equal(Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_fetch(Ref(Real32_t)); +PRIVATE INLINE Real32_t Real32_frexp(Real32_t,Ref(C_Int_t)); PRIVATE C_String_t Real32_gdtoa(Real32_t,C_Int_t,C_Int_t,C_Int_t,Ref(C_Int_t)); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_ldexp(Real32_t,C_Int_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real32_le(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real32_lt(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_acos(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_asin(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_atan(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_atan2(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_cos(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_cosh(Real32_t); -PRIVATE extern Real32_t Real32_Math_e; -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_exp(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_ln(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_log10(Real32_t); -PRIVATE extern Real32_t Real32_Math_pi; -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_pow(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_sin(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_sinh(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_sqrt(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_tan(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_tanh(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_modf(Real32_t,Ref(Real32_t)); -MLTON_CODEGEN_STATIC_INLINE void Real32_move(Ref(Real32_t),Ref(Real32_t)); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_mul(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_muladd(Real32_t,Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_mulsub(Real32_t,Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_neg(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_realCeil(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_realFloor(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_realTrunc(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_rndToReal32(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real32_rndToReal64(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Int16_t Real32_rndToWordS16(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Int32_t Real32_rndToWordS32(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Int64_t Real32_rndToWordS64(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Int8_t Real32_rndToWordS8(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Real32_rndToWordU16(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Real32_rndToWordU32(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Real32_rndToWordU64(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Real32_rndToWordU8(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_round(Real32_t); -MLTON_CODEGEN_STATIC_INLINE void Real32_store(Ref(Real32_t),Real32_t); +PRIVATE INLINE Real32_t Real32_ldexp(Real32_t,C_Int_t); +PRIVATE INLINE Bool_t Real32_le(Real32_t,Real32_t); +PRIVATE INLINE Bool_t Real32_lt(Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_Math_acos(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_asin(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_atan(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_atan2(Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_Math_cos(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_cosh(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_exp(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_ln(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_log10(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_pow(Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_Math_sin(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_sinh(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_sqrt(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_tan(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_tanh(Real32_t); +PRIVATE INLINE Real32_t Real32_modf(Real32_t,Ref(Real32_t)); +PRIVATE INLINE void Real32_move(Ref(Real32_t),Ref(Real32_t)); +PRIVATE INLINE Real32_t Real32_mul(Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_muladd(Real32_t,Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_mulsub(Real32_t,Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_neg(Real32_t); +PRIVATE INLINE Real32_t Real32_realCeil(Real32_t); +PRIVATE INLINE Real32_t Real32_realFloor(Real32_t); +PRIVATE INLINE Real32_t Real32_realTrunc(Real32_t); +PRIVATE INLINE Real32_t Real32_rndToReal32(Real32_t); +PRIVATE INLINE Real64_t Real32_rndToReal64(Real32_t); +PRIVATE INLINE Int16_t Real32_rndToWordS16(Real32_t); +PRIVATE INLINE Int32_t Real32_rndToWordS32(Real32_t); +PRIVATE INLINE Int64_t Real32_rndToWordS64(Real32_t); +PRIVATE INLINE Int8_t Real32_rndToWordS8(Real32_t); +PRIVATE INLINE Word16_t Real32_rndToWordU16(Real32_t); +PRIVATE INLINE Word32_t Real32_rndToWordU32(Real32_t); +PRIVATE INLINE Word64_t Real32_rndToWordU64(Real32_t); +PRIVATE INLINE Word8_t Real32_rndToWordU8(Real32_t); +PRIVATE INLINE Real32_t Real32_round(Real32_t); +PRIVATE INLINE void Real32_store(Ref(Real32_t),Real32_t); PRIVATE Real32_t Real32_strtor(NullString8_t,C_Int_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_sub(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_abs(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_add(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Real64_castToWord64(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_div(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real64_equal(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_fetch(Ref(Real64_t)); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_frexp(Real64_t,Ref(C_Int_t)); +PRIVATE INLINE Real32_t Real32_sub(Real32_t,Real32_t); +PRIVATE INLINE Real64_t Real64_abs(Real64_t); +PRIVATE INLINE Real64_t Real64_add(Real64_t,Real64_t); +PRIVATE INLINE Word64_t Real64_castToWord64(Real64_t); +PRIVATE INLINE Real64_t Real64_div(Real64_t,Real64_t); +PRIVATE INLINE Bool_t Real64_equal(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_fetch(Ref(Real64_t)); +PRIVATE INLINE Real64_t Real64_frexp(Real64_t,Ref(C_Int_t)); PRIVATE C_String_t Real64_gdtoa(Real64_t,C_Int_t,C_Int_t,C_Int_t,Ref(C_Int_t)); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_ldexp(Real64_t,C_Int_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real64_le(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real64_lt(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_acos(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_asin(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_atan(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_atan2(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_cos(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_cosh(Real64_t); -PRIVATE extern Real64_t Real64_Math_e; -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_exp(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_ln(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_log10(Real64_t); -PRIVATE extern Real64_t Real64_Math_pi; -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_pow(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_sin(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_sinh(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_sqrt(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_tan(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_tanh(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_modf(Real64_t,Ref(Real64_t)); -MLTON_CODEGEN_STATIC_INLINE void Real64_move(Ref(Real64_t),Ref(Real64_t)); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_mul(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_muladd(Real64_t,Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_mulsub(Real64_t,Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_neg(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_realCeil(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_realFloor(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_realTrunc(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real64_rndToReal32(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_rndToReal64(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Int16_t Real64_rndToWordS16(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Int32_t Real64_rndToWordS32(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Int64_t Real64_rndToWordS64(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Int8_t Real64_rndToWordS8(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Real64_rndToWordU16(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Real64_rndToWordU32(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Real64_rndToWordU64(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Real64_rndToWordU8(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_round(Real64_t); -MLTON_CODEGEN_STATIC_INLINE void Real64_store(Ref(Real64_t),Real64_t); +PRIVATE INLINE Real64_t Real64_ldexp(Real64_t,C_Int_t); +PRIVATE INLINE Bool_t Real64_le(Real64_t,Real64_t); +PRIVATE INLINE Bool_t Real64_lt(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_Math_acos(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_asin(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_atan(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_atan2(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_Math_cos(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_cosh(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_exp(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_ln(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_log10(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_pow(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_Math_sin(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_sinh(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_sqrt(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_tan(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_tanh(Real64_t); +PRIVATE INLINE Real64_t Real64_modf(Real64_t,Ref(Real64_t)); +PRIVATE INLINE void Real64_move(Ref(Real64_t),Ref(Real64_t)); +PRIVATE INLINE Real64_t Real64_mul(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_muladd(Real64_t,Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_mulsub(Real64_t,Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_neg(Real64_t); +PRIVATE INLINE Real64_t Real64_realCeil(Real64_t); +PRIVATE INLINE Real64_t Real64_realFloor(Real64_t); +PRIVATE INLINE Real64_t Real64_realTrunc(Real64_t); +PRIVATE INLINE Real32_t Real64_rndToReal32(Real64_t); +PRIVATE INLINE Real64_t Real64_rndToReal64(Real64_t); +PRIVATE INLINE Int16_t Real64_rndToWordS16(Real64_t); +PRIVATE INLINE Int32_t Real64_rndToWordS32(Real64_t); +PRIVATE INLINE Int64_t Real64_rndToWordS64(Real64_t); +PRIVATE INLINE Int8_t Real64_rndToWordS8(Real64_t); +PRIVATE INLINE Word16_t Real64_rndToWordU16(Real64_t); +PRIVATE INLINE Word32_t Real64_rndToWordU32(Real64_t); +PRIVATE INLINE Word64_t Real64_rndToWordU64(Real64_t); +PRIVATE INLINE Word8_t Real64_rndToWordU8(Real64_t); +PRIVATE INLINE Real64_t Real64_round(Real64_t); +PRIVATE INLINE void Real64_store(Ref(Real64_t),Real64_t); PRIVATE Real64_t Real64_strtor(NullString8_t,C_Int_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_sub(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_sub(Real64_t,Real64_t); PRIVATE C_Errno_t(C_Int_t) Socket_accept(C_Sock_t,Array(Word8_t),Ref(C_Socklen_t)); PRIVATE extern const C_Int_t Socket_AF_INET; PRIVATE extern const C_Int_t Socket_AF_INET6; @@ -932,189 +926,197 @@ PRIVATE C_Errno_t(C_PId_t) Windows_Process_createNull(NullString8_t,NullString8_t,C_Fd_t,C_Fd_t,C_Fd_t); PRIVATE C_Errno_t(C_Int_t) Windows_Process_getexitcode(C_PId_t,Ref(C_Status_t)); PRIVATE C_Errno_t(C_Int_t) Windows_Process_terminate(C_PId_t,C_Signal_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_add(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_andb(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Word16_equal(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_lshift(Word16_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_neg(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_notb(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_orb(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_rol(Word16_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_ror(Word16_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_sub(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_xorb(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_add(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_andb(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Word32_castToReal32(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Word32_equal(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_lshift(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_neg(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_notb(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_orb(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_rol(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_ror(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_sub(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_xorb(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_add(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_andb(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Word64_castToReal64(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Word64_equal(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_fetch(Ref(Word64_t)); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_lshift(Word64_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE void Word64_move(Ref(Word64_t),Ref(Word64_t)); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_neg(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_notb(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_orb(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_rol(Word64_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_ror(Word64_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE void Word64_store(Ref(Word64_t),Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_sub(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_xorb(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_add(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_andb(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Word8_equal(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_lshift(Word8_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_neg(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_notb(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_orb(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_rol(Word8_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_ror(Word8_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_sub(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_xorb(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_addCheckOverflows(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordS16_extdToWord16(Int16_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordS16_extdToWord32(Int16_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordS16_extdToWord64(Int16_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordS16_extdToWord8(Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_ge(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_gt(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_le(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_lt(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Int16_t WordS16_mul(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_mulCheckOverflows(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_negCheckOverflows(Int16_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int16_t WordS16_quot(Int16_t,Int16_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int16_t WordS16_rem(Int16_t,Int16_t); +PRIVATE INLINE Word16_t Word16_add(Word16_t,Word16_t); +PRIVATE INLINE Word16_t Word16_andb(Word16_t,Word16_t); +PRIVATE INLINE Bool_t Word16_equal(Word16_t,Word16_t); +PRIVATE INLINE Word16_t Word16_lshift(Word16_t,Word32_t); +PRIVATE INLINE Word16_t Word16_neg(Word16_t); +PRIVATE INLINE Word16_t Word16_notb(Word16_t); +PRIVATE INLINE Word16_t Word16_orb(Word16_t,Word16_t); +PRIVATE INLINE Word16_t Word16_rol(Word16_t,Word32_t); +PRIVATE INLINE Word16_t Word16_ror(Word16_t,Word32_t); +PRIVATE INLINE Word16_t Word16_sub(Word16_t,Word16_t); +PRIVATE INLINE Word16_t Word16_xorb(Word16_t,Word16_t); +PRIVATE INLINE Word32_t Word32_add(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_andb(Word32_t,Word32_t); +PRIVATE INLINE Real32_t Word32_castToReal32(Word32_t); +PRIVATE INLINE Bool_t Word32_equal(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_lshift(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_neg(Word32_t); +PRIVATE INLINE Word32_t Word32_notb(Word32_t); +PRIVATE INLINE Word32_t Word32_orb(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_rol(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_ror(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_sub(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_xorb(Word32_t,Word32_t); +PRIVATE INLINE Word64_t Word64_add(Word64_t,Word64_t); +PRIVATE INLINE Word64_t Word64_andb(Word64_t,Word64_t); +PRIVATE INLINE Real64_t Word64_castToReal64(Word64_t); +PRIVATE INLINE Bool_t Word64_equal(Word64_t,Word64_t); +PRIVATE INLINE Word64_t Word64_fetch(Ref(Word64_t)); +PRIVATE INLINE Word64_t Word64_lshift(Word64_t,Word32_t); +PRIVATE INLINE void Word64_move(Ref(Word64_t),Ref(Word64_t)); +PRIVATE INLINE Word64_t Word64_neg(Word64_t); +PRIVATE INLINE Word64_t Word64_notb(Word64_t); +PRIVATE INLINE Word64_t Word64_orb(Word64_t,Word64_t); +PRIVATE INLINE Word64_t Word64_rol(Word64_t,Word32_t); +PRIVATE INLINE Word64_t Word64_ror(Word64_t,Word32_t); +PRIVATE INLINE void Word64_store(Ref(Word64_t),Word64_t); +PRIVATE INLINE Word64_t Word64_sub(Word64_t,Word64_t); +PRIVATE INLINE Word64_t Word64_xorb(Word64_t,Word64_t); +PRIVATE INLINE Word8_t Word8_add(Word8_t,Word8_t); +PRIVATE INLINE Word8_t Word8_andb(Word8_t,Word8_t); +PRIVATE INLINE Bool_t Word8_equal(Word8_t,Word8_t); +PRIVATE INLINE Word8_t Word8_lshift(Word8_t,Word32_t); +PRIVATE INLINE Word8_t Word8_neg(Word8_t); +PRIVATE INLINE Word8_t Word8_notb(Word8_t); +PRIVATE INLINE Word8_t Word8_orb(Word8_t,Word8_t); +PRIVATE INLINE Word8_t Word8_rol(Word8_t,Word32_t); +PRIVATE INLINE Word8_t Word8_ror(Word8_t,Word32_t); +PRIVATE INLINE Word8_t Word8_sub(Word8_t,Word8_t); +PRIVATE INLINE Word8_t Word8_xorb(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordS16_addCheckP(Int16_t,Int16_t); +PRIVATE INLINE Word16_t WordS16_extdToWord16(Int16_t); +PRIVATE INLINE Word32_t WordS16_extdToWord32(Int16_t); +PRIVATE INLINE Word64_t WordS16_extdToWord64(Int16_t); +PRIVATE INLINE Word8_t WordS16_extdToWord8(Int16_t); +PRIVATE INLINE Bool_t WordS16_ge(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS16_gt(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS16_le(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS16_lt(Int16_t,Int16_t); +PRIVATE INLINE Int16_t WordS16_mul(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS16_mulCheckP(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS16_negCheckP(Int16_t); +PRIVATE INLINE Int16_t WordS16_quot(Int16_t,Int16_t); +PRIVATE INLINE Int16_t WordS16_rem(Int16_t,Int16_t); PRIVATE Real32_t WordS16_rndToReal32(Int16_t); PRIVATE Real64_t WordS16_rndToReal64(Int16_t); -MLTON_CODEGEN_STATIC_INLINE Int16_t WordS16_rshift(Int16_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_subCheckOverflows(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_addCheckOverflows(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordS32_extdToWord16(Int32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordS32_extdToWord32(Int32_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordS32_extdToWord64(Int32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordS32_extdToWord8(Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_ge(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_gt(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_le(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_lt(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Int32_t WordS32_mul(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_mulCheckOverflows(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_negCheckOverflows(Int32_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int32_t WordS32_quot(Int32_t,Int32_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int32_t WordS32_rem(Int32_t,Int32_t); +PRIVATE INLINE Int16_t WordS16_rshift(Int16_t,Word32_t); +PRIVATE INLINE Bool_t WordS16_subCheckP(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS32_addCheckP(Int32_t,Int32_t); +PRIVATE INLINE Word16_t WordS32_extdToWord16(Int32_t); +PRIVATE INLINE Word32_t WordS32_extdToWord32(Int32_t); +PRIVATE INLINE Word64_t WordS32_extdToWord64(Int32_t); +PRIVATE INLINE Word8_t WordS32_extdToWord8(Int32_t); +PRIVATE INLINE Bool_t WordS32_ge(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS32_gt(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS32_le(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS32_lt(Int32_t,Int32_t); +PRIVATE INLINE Int32_t WordS32_mul(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS32_mulCheckP(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS32_negCheckP(Int32_t); +PRIVATE INLINE Int32_t WordS32_quot(Int32_t,Int32_t); +PRIVATE INLINE Int32_t WordS32_rem(Int32_t,Int32_t); PRIVATE Real32_t WordS32_rndToReal32(Int32_t); PRIVATE Real64_t WordS32_rndToReal64(Int32_t); -MLTON_CODEGEN_STATIC_INLINE Int32_t WordS32_rshift(Int32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_subCheckOverflows(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_addCheckOverflows(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordS64_extdToWord16(Int64_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordS64_extdToWord32(Int64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordS64_extdToWord64(Int64_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordS64_extdToWord8(Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_ge(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_gt(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_le(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_lt(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Int64_t WordS64_mul(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_mulCheckOverflows(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_negCheckOverflows(Int64_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int64_t WordS64_quot(Int64_t,Int64_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int64_t WordS64_rem(Int64_t,Int64_t); +PRIVATE INLINE Int32_t WordS32_rshift(Int32_t,Word32_t); +PRIVATE INLINE Bool_t WordS32_subCheckP(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS64_addCheckP(Int64_t,Int64_t); +PRIVATE INLINE Word16_t WordS64_extdToWord16(Int64_t); +PRIVATE INLINE Word32_t WordS64_extdToWord32(Int64_t); +PRIVATE INLINE Word64_t WordS64_extdToWord64(Int64_t); +PRIVATE INLINE Word8_t WordS64_extdToWord8(Int64_t); +PRIVATE INLINE Bool_t WordS64_ge(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS64_gt(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS64_le(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS64_lt(Int64_t,Int64_t); +PRIVATE INLINE Int64_t WordS64_mul(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS64_mulCheckP(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS64_negCheckP(Int64_t); +PRIVATE INLINE Int64_t WordS64_quot(Int64_t,Int64_t); +PRIVATE INLINE Int64_t WordS64_rem(Int64_t,Int64_t); PRIVATE Real32_t WordS64_rndToReal32(Int64_t); PRIVATE Real64_t WordS64_rndToReal64(Int64_t); -MLTON_CODEGEN_STATIC_INLINE Int64_t WordS64_rshift(Int64_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_subCheckOverflows(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_addCheckOverflows(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordS8_extdToWord16(Int8_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordS8_extdToWord32(Int8_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordS8_extdToWord64(Int8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordS8_extdToWord8(Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_ge(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_gt(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_le(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_lt(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Int8_t WordS8_mul(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_mulCheckOverflows(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_negCheckOverflows(Int8_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int8_t WordS8_quot(Int8_t,Int8_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int8_t WordS8_rem(Int8_t,Int8_t); +PRIVATE INLINE Int64_t WordS64_rshift(Int64_t,Word32_t); +PRIVATE INLINE Bool_t WordS64_subCheckP(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS8_addCheckP(Int8_t,Int8_t); +PRIVATE INLINE Word16_t WordS8_extdToWord16(Int8_t); +PRIVATE INLINE Word32_t WordS8_extdToWord32(Int8_t); +PRIVATE INLINE Word64_t WordS8_extdToWord64(Int8_t); +PRIVATE INLINE Word8_t WordS8_extdToWord8(Int8_t); +PRIVATE INLINE Bool_t WordS8_ge(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordS8_gt(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordS8_le(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordS8_lt(Int8_t,Int8_t); +PRIVATE INLINE Int8_t WordS8_mul(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordS8_mulCheckP(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordS8_negCheckP(Int8_t); +PRIVATE INLINE Int8_t WordS8_quot(Int8_t,Int8_t); +PRIVATE INLINE Int8_t WordS8_rem(Int8_t,Int8_t); PRIVATE Real32_t WordS8_rndToReal32(Int8_t); PRIVATE Real64_t WordS8_rndToReal64(Int8_t); -MLTON_CODEGEN_STATIC_INLINE Int8_t WordS8_rshift(Int8_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_subCheckOverflows(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_addCheckOverflows(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU16_extdToWord16(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU16_extdToWord32(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU16_extdToWord64(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU16_extdToWord8(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_ge(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_gt(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_le(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_lt(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU16_mul(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_mulCheckOverflows(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU16_quot(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU16_rem(Word16_t,Word16_t); +PRIVATE INLINE Int8_t WordS8_rshift(Int8_t,Word32_t); +PRIVATE INLINE Bool_t WordS8_subCheckP(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordU16_addCheckP(Word16_t,Word16_t); +PRIVATE INLINE Word16_t WordU16_extdToWord16(Word16_t); +PRIVATE INLINE Word32_t WordU16_extdToWord32(Word16_t); +PRIVATE INLINE Word64_t WordU16_extdToWord64(Word16_t); +PRIVATE INLINE Word8_t WordU16_extdToWord8(Word16_t); +PRIVATE INLINE Bool_t WordU16_ge(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU16_gt(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU16_le(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU16_lt(Word16_t,Word16_t); +PRIVATE INLINE Word16_t WordU16_mul(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU16_mulCheckP(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU16_negCheckP(Word16_t); +PRIVATE INLINE Word16_t WordU16_quot(Word16_t,Word16_t); +PRIVATE INLINE Word16_t WordU16_rem(Word16_t,Word16_t); PRIVATE Real32_t WordU16_rndToReal32(Word16_t); PRIVATE Real64_t WordU16_rndToReal64(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU16_rshift(Word16_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_addCheckOverflows(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU32_extdToWord16(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU32_extdToWord32(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU32_extdToWord64(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU32_extdToWord8(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_ge(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_gt(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_le(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_lt(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU32_mul(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_mulCheckOverflows(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU32_quot(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU32_rem(Word32_t,Word32_t); +PRIVATE INLINE Word16_t WordU16_rshift(Word16_t,Word32_t); +PRIVATE INLINE Bool_t WordU16_subCheckP(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU32_addCheckP(Word32_t,Word32_t); +PRIVATE INLINE Word16_t WordU32_extdToWord16(Word32_t); +PRIVATE INLINE Word32_t WordU32_extdToWord32(Word32_t); +PRIVATE INLINE Word64_t WordU32_extdToWord64(Word32_t); +PRIVATE INLINE Word8_t WordU32_extdToWord8(Word32_t); +PRIVATE INLINE Bool_t WordU32_ge(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_gt(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_le(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_lt(Word32_t,Word32_t); +PRIVATE INLINE Word32_t WordU32_mul(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_mulCheckP(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_negCheckP(Word32_t); +PRIVATE INLINE Word32_t WordU32_quot(Word32_t,Word32_t); +PRIVATE INLINE Word32_t WordU32_rem(Word32_t,Word32_t); PRIVATE Real32_t WordU32_rndToReal32(Word32_t); PRIVATE Real64_t WordU32_rndToReal64(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU32_rshift(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_addCheckOverflows(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU64_extdToWord16(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU64_extdToWord32(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU64_extdToWord64(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU64_extdToWord8(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_ge(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_gt(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_le(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_lt(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU64_mul(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_mulCheckOverflows(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU64_quot(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU64_rem(Word64_t,Word64_t); +PRIVATE INLINE Word32_t WordU32_rshift(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_subCheckP(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU64_addCheckP(Word64_t,Word64_t); +PRIVATE INLINE Word16_t WordU64_extdToWord16(Word64_t); +PRIVATE INLINE Word32_t WordU64_extdToWord32(Word64_t); +PRIVATE INLINE Word64_t WordU64_extdToWord64(Word64_t); +PRIVATE INLINE Word8_t WordU64_extdToWord8(Word64_t); +PRIVATE INLINE Bool_t WordU64_ge(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU64_gt(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU64_le(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU64_lt(Word64_t,Word64_t); +PRIVATE INLINE Word64_t WordU64_mul(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU64_mulCheckP(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU64_negCheckP(Word64_t); +PRIVATE INLINE Word64_t WordU64_quot(Word64_t,Word64_t); +PRIVATE INLINE Word64_t WordU64_rem(Word64_t,Word64_t); PRIVATE Real32_t WordU64_rndToReal32(Word64_t); PRIVATE Real64_t WordU64_rndToReal64(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU64_rshift(Word64_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_addCheckOverflows(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU8_extdToWord16(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU8_extdToWord32(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU8_extdToWord64(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU8_extdToWord8(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_ge(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_gt(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_le(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_lt(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU8_mul(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_mulCheckOverflows(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU8_quot(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU8_rem(Word8_t,Word8_t); +PRIVATE INLINE Word64_t WordU64_rshift(Word64_t,Word32_t); +PRIVATE INLINE Bool_t WordU64_subCheckP(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU8_addCheckP(Word8_t,Word8_t); +PRIVATE INLINE Word16_t WordU8_extdToWord16(Word8_t); +PRIVATE INLINE Word32_t WordU8_extdToWord32(Word8_t); +PRIVATE INLINE Word64_t WordU8_extdToWord64(Word8_t); +PRIVATE INLINE Word8_t WordU8_extdToWord8(Word8_t); +PRIVATE INLINE Bool_t WordU8_ge(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordU8_gt(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordU8_le(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordU8_lt(Word8_t,Word8_t); +PRIVATE INLINE Word8_t WordU8_mul(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordU8_mulCheckP(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordU8_negCheckP(Word8_t); +PRIVATE INLINE Word8_t WordU8_quot(Word8_t,Word8_t); +PRIVATE INLINE Word8_t WordU8_rem(Word8_t,Word8_t); PRIVATE Real32_t WordU8_rndToReal32(Word8_t); PRIVATE Real64_t WordU8_rndToReal64(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU8_rshift(Word8_t,Word32_t); +PRIVATE INLINE Word8_t WordU8_rshift(Word8_t,Word32_t); +PRIVATE INLINE Bool_t WordU8_subCheckP(Word8_t,Word8_t); #endif /* _MLTON_BASIS_FFI_H_ */ diff -Nru mlton-20130715/runtime/cenv.h mlton-20210117+dfsg/runtime/cenv.h --- mlton-20130715/runtime/cenv.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/cenv.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,25 +1,15 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2017 Matthew Fluet. * Copyright (C) 1999-2009 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #ifndef _MLTON_CENV_H_ #define _MLTON_CENV_H_ -/* GNU C Library Feature Macros */ -#define _ISOC99_SOURCE -#define _BSD_SOURCE -// #define _XOPEN_SOURCE 600 -/* Only enable _POSIX_C_SOURCE on platforms that don't have broken - * system headers. - */ -#if (defined (__linux__) || defined(__GNU__)) -#define _POSIX_C_SOURCE 200112L -#endif #define _FILE_OFFSET_BITS 64 #ifndef ASSERT @@ -117,6 +107,8 @@ #include "platform/powerpc64.h" #elif (defined (__ppc__)) || (defined (__powerpc__)) #include "platform/powerpc.h" +#elif (defined (__riscv)) +#include "platform/riscv.h" #elif (defined (__s390__)) #include "platform/s390.h" #elif (defined (__sparc__)) diff -Nru mlton-20130715/runtime/export.h mlton-20210117+dfsg/runtime/export.h --- mlton-20130715/runtime/export.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/export.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -31,15 +31,9 @@ #define PUBLIC __declspec(dllexport) #define PRIVATE #else -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) #define EXTERNAL __attribute__((visibility("default"))) #define PUBLIC __attribute__((visibility("default"))) #define PRIVATE __attribute__((visibility("hidden"))) -#else -#define EXTERNAL -#define PUBLIC -#define PRIVATE -#endif #endif #endif /* _MLTON_EXPORT_H_ */ diff -Nru mlton-20130715/runtime/gc/align.c mlton-20210117+dfsg/runtime/gc/align.c --- mlton-20130715/runtime/gc/align.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/align.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2016 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -13,16 +14,14 @@ #if ASSERT bool isFrontierAligned (GC_state s, pointer p) { - return isAligned ((size_t)p + GC_NORMAL_HEADER_SIZE, - s->alignment); + return isAligned ((size_t)p + GC_NORMAL_METADATA_SIZE, s->alignment); } #endif pointer alignFrontier (GC_state s, pointer p) { size_t res; - res = alignWithExtra (s, (size_t)p, GC_NORMAL_HEADER_SIZE); + res = alignWithExtra (s, (size_t)p, GC_NORMAL_METADATA_SIZE); assert (isFrontierAligned (s, (pointer)res)); return (pointer)res; } - diff -Nru mlton-20130715/runtime/gc/align.h mlton-20210117+dfsg/runtime/gc/align.h --- mlton-20130715/runtime/gc/align.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/align.h 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/array-allocate.c mlton-20210117+dfsg/runtime/gc/array-allocate.c --- mlton-20130715/runtime/gc/array-allocate.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/array-allocate.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,129 +0,0 @@ -/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - */ - -pointer GC_arrayAllocate (GC_state s, - size_t ensureBytesFree, - GC_arrayLength numElements, - GC_header header) { - size_t arraySize, arraySizeAligned; - size_t bytesPerElement; - uint16_t bytesNonObjptrs; - uint16_t numObjptrs; - pointer frontier; - pointer last; - pointer result; - - splitHeader(s, header, NULL, NULL, &bytesNonObjptrs, &numObjptrs); - if (DEBUG) - fprintf (stderr, "GC_arrayAllocate (%"PRIuMAX", "FMTARRLEN", "FMTHDR")\n", - (uintmax_t)ensureBytesFree, numElements, header); - bytesPerElement = bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE); - /* Check for overflow when computing arraySize. - * Note: bytesPerElement > 0 - */ - if (numElements > (SIZE_MAX / bytesPerElement)) { - goto doOverflow; - } - arraySize = bytesPerElement * numElements; - if (arraySize > SIZE_MAX - GC_ARRAY_HEADER_SIZE) { - goto doOverflow; - } - arraySize += GC_ARRAY_HEADER_SIZE; - arraySizeAligned = align (arraySize, s->alignment); - if (arraySizeAligned < arraySize) { - goto doOverflow; - } - if (arraySizeAligned < GC_ARRAY_HEADER_SIZE + OBJPTR_SIZE) { - /* Very small (including empty) arrays have OBJPTR_SIZE bytes - * space for the forwarding pointer. - */ - arraySize = GC_ARRAY_HEADER_SIZE; - arraySizeAligned = align(GC_ARRAY_HEADER_SIZE + OBJPTR_SIZE, s->alignment); - } - if (DEBUG_ARRAY) - fprintf (stderr, - "Array with "FMTARRLEN" elts of size %"PRIuMAX" and total size %s and total aligned size %s. " - "Ensure %s bytes free.\n", - numElements, (uintmax_t)bytesPerElement, - uintmaxToCommaString(arraySize), - uintmaxToCommaString(arraySizeAligned), - uintmaxToCommaString(ensureBytesFree)); - if (arraySizeAligned >= s->controls.oldGenArraySize) { - if (not hasHeapBytesFree (s, arraySizeAligned, ensureBytesFree)) { - enter (s); - performGC (s, arraySizeAligned, ensureBytesFree, FALSE, TRUE); - leave (s); - } - frontier = s->heap.start + s->heap.oldGenSize; - s->heap.oldGenSize += arraySizeAligned; - s->cumulativeStatistics.bytesAllocated += arraySizeAligned; - } else { - size_t bytesRequested; - pointer newFrontier; - - bytesRequested = arraySizeAligned + ensureBytesFree; - if (not hasHeapBytesFree (s, 0, bytesRequested)) { - enter (s); - performGC (s, 0, bytesRequested, FALSE, TRUE); - leave (s); - } - frontier = s->frontier; - newFrontier = frontier + arraySizeAligned; - assert (isFrontierAligned (s, newFrontier)); - s->frontier = newFrontier; - } - last = frontier + arraySize; - *((GC_arrayCounter*)(frontier)) = 0; - frontier = frontier + GC_ARRAY_COUNTER_SIZE; - *((GC_arrayLength*)(frontier)) = numElements; - frontier = frontier + GC_ARRAY_LENGTH_SIZE; - *((GC_header*)(frontier)) = header; - frontier = frontier + GC_HEADER_SIZE; - result = frontier; - assert (isAligned ((size_t)result, s->alignment)); - /* Initialize all pointers with BOGUS_OBJPTR. */ - if (1 <= numObjptrs and 0 < numElements) { - pointer p; - - if (0 == bytesNonObjptrs) - for (p = frontier; p < last; p += OBJPTR_SIZE) - *((objptr*)p) = BOGUS_OBJPTR; - else { - /* Array with a mix of pointers and non-pointers. */ - size_t bytesObjptrs; - - bytesObjptrs = numObjptrs * OBJPTR_SIZE; - - for (p = frontier; p < last; ) { - pointer next; - - p += bytesNonObjptrs; - next = p + bytesObjptrs; - assert (next <= last); - for ( ; p < next; p += OBJPTR_SIZE) - *((objptr*)p) = BOGUS_OBJPTR; - } - } - } - GC_profileAllocInc (s, arraySizeAligned); - if (DEBUG_ARRAY) { - fprintf (stderr, "GC_arrayAllocate done. result = "FMTPTR" frontier = "FMTPTR"\n", - (uintptr_t)result, (uintptr_t)s->frontier); - displayGCState (s, stderr); - } - assert (ensureBytesFree <= (size_t)(s->limitPlusSlop - s->frontier)); - /* Unfortunately, the invariant isn't quite true here, because - * unless we did the GC, we never set s->currentThread->stack->used - * to reflect what the mutator did with stackTop. - */ - return result; - -doOverflow: - die ("Out of memory. Unable to allocate array with "FMTARRLEN" elements and elements of size %"PRIuMAX" bytes.", - numElements, (uintmax_t)bytesPerElement); -} diff -Nru mlton-20130715/runtime/gc/array-allocate.h mlton-20210117+dfsg/runtime/gc/array-allocate.h --- mlton-20130715/runtime/gc/array-allocate.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/array-allocate.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -/* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - */ - -#if (defined (MLTON_GC_INTERNAL_BASIS)) - -PRIVATE pointer GC_arrayAllocate (GC_state s, - size_t ensureBytesFree, - GC_arrayLength numElements, - GC_header header); - -#endif /* (defined (MLTON_GC_INTERNAL_BASIS)) */ diff -Nru mlton-20130715/runtime/gc/array.c mlton-20210117+dfsg/runtime/gc/array.c --- mlton-20130715/runtime/gc/array.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/array.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ -/* Copyright (C) 2012 Matthew Fluet. - * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - */ - -/* getArrayLengthp (p) - * - * Returns a pointer to the length for the array pointed to by p. - */ -GC_arrayLength* getArrayLengthp (pointer a) { - return (GC_arrayLength*)(a - - GC_HEADER_SIZE - - GC_ARRAY_LENGTH_SIZE); -} - -/* getArrayLength (p) - * - * Returns the length for the array pointed to by p. - */ -GC_arrayLength getArrayLength (pointer a) { - return *(getArrayLengthp (a)); -} - -uintmax_t GC_getArrayLength (pointer a) { - return ((uintmax_t)(getArrayLength (a))); -} - -/* getArrayCounterp (p) - * - * Returns a pointer to the counter for the array pointed to by p. - */ -GC_arrayCounter* getArrayCounterp (pointer a) { - return (GC_arrayCounter*)(a - - GC_HEADER_SIZE - - GC_ARRAY_LENGTH_SIZE - - GC_ARRAY_COUNTER_SIZE); -} - -/* getArrayCounter (p) - * - * Returns the counter for the array pointed to by p. - */ -GC_arrayCounter getArrayCounter (pointer a) { - return *(getArrayCounterp (a)); -} - - -#if ASSERT -pointer indexArrayAtObjptrIndex (GC_state s, pointer a, - GC_arrayCounter arrayIndex, - uint32_t objptrIndex) { - GC_header header; - uint16_t bytesNonObjptrs; - uint16_t numObjptrs; - GC_objectTypeTag tag; - - header = getHeader (a); - splitHeader(s, header, &tag, NULL, &bytesNonObjptrs, &numObjptrs); - assert (tag == ARRAY_TAG); - - return a - + (arrayIndex * (bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE))) - + bytesNonObjptrs - + (objptrIndex * OBJPTR_SIZE); -} -#endif diff -Nru mlton-20130715/runtime/gc/array.h mlton-20210117+dfsg/runtime/gc/array.h --- mlton-20130715/runtime/gc/array.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/array.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -/* Copyright (C) 2012 Matthew Fluet. - * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * Copyright (C) 1997-2000 NEC Research Institute. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - */ - -#if (defined (MLTON_GC_INTERNAL_TYPES)) - -/* - * Array objects have the following layout: - * - * counter :: - * length :: - * header :: - * ( (non heap-pointers)* :: (heap pointers)* )* - * - * The counter word is used by mark compact GC. The length word is - * the number of elements in the array. Array elements have the same - * individual layout as normal objects, omitting the header word. - */ - -#define GC_ARRLEN_TYPE__(z) uint ## z ## _t -#define GC_ARRLEN_TYPE_(z) GC_ARRLEN_TYPE__(z) -#define GC_ARRLEN_TYPE GC_ARRLEN_TYPE_(GC_MODEL_ARRLEN_SIZE) -typedef GC_ARRLEN_TYPE GC_arrayLength; -#define GC_ARRAY_LENGTH_SIZE sizeof(GC_arrayLength) -#define PRIxARRLEN__(z) PRIx ## z -#define PRIxARRLEN_(z) PRIxARRLEN__(z) -#define PRIxARRLEN PRIxARRLEN_(GC_MODEL_ARRLEN_SIZE) -#define FMTARRLEN "%"PRIxARRLEN -typedef GC_arrayLength GC_arrayCounter; -#define GC_ARRAY_COUNTER_SIZE sizeof(GC_arrayCounter) -#define PRIxARRCTR PRIxARRLEN -#define FMTARRCTR "%"PRIxARRCTR -#define GC_ARRAY_HEADER_SIZE (GC_ARRAY_COUNTER_SIZE + GC_ARRAY_LENGTH_SIZE + GC_HEADER_SIZE) - -COMPILE_TIME_ASSERT(sizeof_header__le__sizeof_arrlen, - sizeof(GC_header) <= sizeof(GC_arrayLength)); -COMPILE_TIME_ASSERT(sizeof_arrlen__eq__sizeof_arrctr, - sizeof(GC_arrayLength) == sizeof(GC_arrayCounter)); - - -#endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ - -#if (defined (MLTON_GC_INTERNAL_FUNCS)) - -static inline GC_arrayLength* getArrayLengthp (pointer a); -static inline GC_arrayLength getArrayLength (pointer a); -static inline GC_arrayCounter* getArrayCounterp (pointer a); -static inline GC_arrayCounter getArrayCounter (pointer a); - -#if ASSERT -static inline pointer indexArrayAtObjptrIndex (GC_state s, pointer a, - GC_arrayCounter arrayIndex, - uint32_t objptrIndex); -#endif - -#endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ - -PRIVATE uintmax_t GC_getArrayLength (pointer a); diff -Nru mlton-20130715/runtime/gc/atomic.c mlton-20210117+dfsg/runtime/gc/atomic.c --- mlton-20130715/runtime/gc/atomic.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/atomic.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/atomic.h mlton-20210117+dfsg/runtime/gc/atomic.h --- mlton-20130715/runtime/gc/atomic.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/atomic.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/call-stack.c mlton-20210117+dfsg/runtime/gc/call-stack.c --- mlton-20130715/runtime/gc/call-stack.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/call-stack.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,44 +1,67 @@ -/* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ -void numStackFramesAux (GC_state s, - __attribute__ ((unused)) GC_frameIndex i) { - s->callStackState.numStackFrames++; +void numStackFramesAux (__attribute__ ((unused)) GC_state s, + __attribute__ ((unused)) GC_frameIndex frameIndex, + __attribute__ ((unused)) GC_frameInfo frameInfo, + __attribute__ ((unused)) pointer frameTop, + uint32_t *numStackFrames) { + *numStackFrames += 1; +} +void numStackFramesFun (GC_state s, + GC_frameIndex frameIndex, + GC_frameInfo frameInfo, + pointer frameTop, + void *env) { + numStackFramesAux (s, frameIndex, frameInfo, frameTop, env); } uint32_t GC_numStackFrames (GC_state s) { - s->callStackState.numStackFrames = 0; - foreachStackFrame (s, numStackFramesAux); + uint32_t numStackFrames = 0; + struct GC_foreachStackFrameClosure numStackFramesClosure = + {.fun = numStackFramesFun, .env = &numStackFrames}; + foreachStackFrame (s, &numStackFramesClosure); if (DEBUG_CALL_STACK) - fprintf (stderr, "%"PRIu32" = GC_numStackFrames\n", - s->callStackState.numStackFrames); - return s->callStackState.numStackFrames; + fprintf (stderr, "%"PRIu32" = GC_numStackFrames\n", + numStackFrames); + return numStackFrames; } -void callStackAux (GC_state s, GC_frameIndex i) { - if (DEBUG_CALL_STACK) - fprintf (stderr, "callStackAux ("FMTFI")\n", i); - s->callStackState.callStack[s->callStackState.numStackFrames] = i; - s->callStackState.numStackFrames++; +void callStackAux (__attribute__ ((unused)) GC_state s, + GC_frameIndex frameIndex, + __attribute__ ((unused)) GC_frameInfo frameInfo, + __attribute__ ((unused)) pointer frameTop, + GC_callStackState callStackState) { + callStackState->frameIndices[callStackState->index] = frameIndex; + callStackState->index++; +} +void callStackFun (GC_state s, + GC_frameIndex frameIndex, + GC_frameInfo frameInfo, + pointer frameTop, + void *env) { + callStackAux (s, frameIndex, frameInfo, frameTop, env); } void GC_callStack (GC_state s, pointer p) { if (DEBUG_CALL_STACK) fprintf (stderr, "GC_callStack\n"); - s->callStackState.numStackFrames = 0; - s->callStackState.callStack = (uint32_t*)p; - foreachStackFrame (s, callStackAux); + struct GC_callStackState callStackState = {.index = 0, .frameIndices = (uint32_t*)p}; + struct GC_foreachStackFrameClosure callStackClosure = + {.fun = callStackFun, .env = &callStackState}; + foreachStackFrame (s, &callStackClosure); } -uint32_t* GC_frameIndexSourceSeq (GC_state s, GC_frameIndex frameIndex) { - uint32_t *res; +const uint32_t * GC_frameIndexSourceSeq (GC_state s, GC_frameIndex frameIndex) { + const uint32_t *res; - res = s->sourceMaps.sourceSeqs[s->sourceMaps.frameSources[frameIndex]]; + res = s->sourceMaps.sourceSeqs[s->frameInfos[frameIndex].sourceSeqIndex]; if (DEBUG_CALL_STACK) fprintf (stderr, FMTPTR" = GC_frameIndexSourceSeq ("FMTFI")\n", (uintptr_t)res, frameIndex); diff -Nru mlton-20130715/runtime/gc/call-stack.h mlton-20210117+dfsg/runtime/gc/call-stack.h --- mlton-20130715/runtime/gc/call-stack.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/call-stack.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,24 +1,43 @@ -/* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #if (defined (MLTON_GC_INTERNAL_TYPES)) -struct GC_callStackState { - uint32_t numStackFrames; - uint32_t *callStack; -}; +typedef struct GC_callStackState { + uint32_t index; + uint32_t *frameIndices; +} *GC_callStackState; #endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ #if (defined (MLTON_GC_INTERNAL_FUNCS)) -static inline void numStackFramesAux (GC_state s, GC_frameIndex i); -static inline void callStackAux (GC_state s, GC_frameIndex i); +static inline void numStackFramesAux (GC_state s, + GC_frameIndex frameIndex, + GC_frameInfo frameInfo, + pointer frameTop, + uint32_t *numStackFrames); +static inline void numStackFramesFun (GC_state s, + GC_frameIndex frameIndex, + GC_frameInfo frameInfo, + pointer frameTop, + void *env); +static inline void callStackAux (GC_state s, + GC_frameIndex frameIndex, + GC_frameInfo frameInfo, + pointer frameTop, + GC_callStackState callStackState); +static inline void callStackFun (GC_state s, + GC_frameIndex frameIndex, + GC_frameInfo frameInfo, + pointer frameTop, + void *env); #endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ @@ -27,6 +46,6 @@ PRIVATE uint32_t GC_numStackFrames (GC_state s); PRIVATE void GC_callStack (GC_state s, pointer p); -PRIVATE uint32_t* GC_frameIndexSourceSeq (GC_state s, GC_frameIndex frameIndex); +PRIVATE const uint32_t * GC_frameIndexSourceSeq (GC_state s, GC_frameIndex frameIndex); #endif /* (defined (MLTON_GC_INTERNAL_BASIS)) */ diff -Nru mlton-20130715/runtime/gc/cheney-copy.c mlton-20210117+dfsg/runtime/gc/cheney-copy.c --- mlton-20130715/runtime/gc/cheney-copy.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/cheney-copy.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2016,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -21,12 +21,11 @@ if (DEBUG_WEAK) fprintf (stderr, "updateWeaksForCheneyCopy w = "FMTPTR" ", (uintptr_t)w); p = objptrToPointer (w->objptr, s->heap.start); - if (GC_FORWARDED == getHeader (p)) { + if (hasFwdPtr(p)) { if (DEBUG_WEAK) fprintf (stderr, "forwarded from "FMTOBJPTR" to "FMTOBJPTR"\n", - w->objptr, - *(objptr*)p); - w->objptr = *(objptr*)p; + w->objptr, getFwdPtr(p)); + w->objptr = getFwdPtr(p); } else { if (DEBUG_WEAK) fprintf (stderr, "cleared\n"); @@ -48,6 +47,8 @@ void majorCheneyCopyGC (GC_state s) { size_t bytesCopied; + struct GC_forwardState forwardState; + struct GC_foreachObjptrClosure forwardObjptrIfInHeapClosure; struct rusage ru_start; pointer toStart; @@ -55,7 +56,6 @@ if (detailedGCTime (s)) startTiming (&ru_start); s->cumulativeStatistics.numCopyingGCs++; - s->forwardState.amInMinorGC = FALSE; if (DEBUG or s->controls.messages) { fprintf (stderr, "[GC: Starting major Cheney-copy;]\n"); @@ -68,8 +68,6 @@ (uintptr_t)(s->secondaryHeap.start), uintmaxToCommaString(s->secondaryHeap.size)); } - s->forwardState.toStart = s->secondaryHeap.start; - s->forwardState.toLimit = s->secondaryHeap.start + s->secondaryHeap.size; assert (s->secondaryHeap.start != (pointer)NULL); /* The next assert ensures there is enough space for the copy to * succeed. It does not assert @@ -78,11 +76,17 @@ */ assert (s->secondaryHeap.size >= s->heap.oldGenSize); toStart = alignFrontier (s, s->secondaryHeap.start); - s->forwardState.back = toStart; - foreachGlobalObjptr (s, forwardObjptr); - foreachObjptrInRange (s, toStart, &s->forwardState.back, forwardObjptr, TRUE); + forwardState.amInMinorGC = FALSE; + forwardState.toStart = s->secondaryHeap.start; + forwardState.toLimit = s->secondaryHeap.start + s->secondaryHeap.size; + forwardState.back = toStart; + forwardObjptrIfInHeapClosure.fun = forwardObjptrIfInHeapFun; + forwardObjptrIfInHeapClosure.env = &forwardState; + foreachGlobalObjptr (s, &forwardObjptrIfInHeapClosure); + foreachObjptrInRange (s, toStart, &forwardState.back, + &forwardObjptrIfInHeapClosure, TRUE); updateWeaksForCheneyCopy (s); - s->secondaryHeap.oldGenSize = (size_t)(s->forwardState.back - s->secondaryHeap.start); + s->secondaryHeap.oldGenSize = (size_t)(forwardState.back - s->secondaryHeap.start); bytesCopied = s->secondaryHeap.oldGenSize; s->cumulativeStatistics.bytesCopied += bytesCopied; swapHeapsForCheneyCopy (s); @@ -102,6 +106,8 @@ void minorCheneyCopyGC (GC_state s) { size_t bytesAllocated; size_t bytesCopied; + struct GC_forwardState forwardState; + struct GC_foreachObjptrClosure forwardObjptrIfInNurseryClosure; struct rusage ru_start; if (DEBUG_GENERATIONAL) @@ -118,7 +124,6 @@ if (detailedGCTime (s)) startTiming (&ru_start); s->cumulativeStatistics.numMinorGCs++; - s->forwardState.amInMinorGC = TRUE; if (DEBUG_GENERATIONAL or s->controls.messages) { fprintf (stderr, "[GC: Starting minor Cheney-copy;]\n"); @@ -127,20 +132,23 @@ (uintptr_t)(s->heap.nursery), uintmaxToCommaString(bytesAllocated)); } - s->forwardState.toStart = s->heap.start + s->heap.oldGenSize; - assert (isFrontierAligned (s, s->forwardState.toStart)); - s->forwardState.toLimit = s->forwardState.toStart + bytesAllocated; assert (invariantForGC (s)); - s->forwardState.back = s->forwardState.toStart; + forwardState.amInMinorGC = TRUE; + forwardState.toStart = s->heap.start + s->heap.oldGenSize; + forwardState.toLimit = forwardState.toStart + bytesAllocated; + forwardState.back = forwardState.toStart; + forwardObjptrIfInNurseryClosure.fun = forwardObjptrIfInNurseryFun; + forwardObjptrIfInNurseryClosure.env = &forwardState; + assert (isFrontierAligned (s, forwardState.toStart)); /* Forward all globals. Would like to avoid doing this once all * the globals have been assigned. */ - foreachGlobalObjptr (s, forwardObjptrIfInNursery); - forwardInterGenerationalObjptrs (s); - foreachObjptrInRange (s, s->forwardState.toStart, &s->forwardState.back, - forwardObjptrIfInNursery, TRUE); + foreachGlobalObjptr (s, &forwardObjptrIfInNurseryClosure); + forwardInterGenerationalObjptrs (s, &forwardState); + foreachObjptrInRange (s, forwardState.toStart, &forwardState.back, + &forwardObjptrIfInNurseryClosure, TRUE); updateWeaksForCheneyCopy (s); - bytesCopied = (size_t)(s->forwardState.back - s->forwardState.toStart); + bytesCopied = (size_t)(forwardState.back - forwardState.toStart); s->cumulativeStatistics.bytesCopiedMinor += bytesCopied; s->heap.oldGenSize += bytesCopied; s->lastMajorStatistics.numMinorGCs++; diff -Nru mlton-20130715/runtime/gc/cheney-copy.h mlton-20210117+dfsg/runtime/gc/cheney-copy.h --- mlton-20130715/runtime/gc/cheney-copy.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/cheney-copy.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/controls.c mlton-20210117+dfsg/runtime/gc/controls.c --- mlton-20130715/runtime/gc/controls.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/controls.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/controls.h mlton-20210117+dfsg/runtime/gc/controls.h --- mlton-20130715/runtime/gc/controls.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/controls.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2017 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -46,10 +47,11 @@ bool mayPageHeap; /* Permit paging heap to disk during GC */ bool mayProcessAtMLton; bool messages; /* Print a message at the start and end of each gc. */ - size_t oldGenArraySize; /* Arrays larger are allocated in old gen, if possible. */ + size_t oldGenSequenceSize; /* Sequences larger are allocated in old gen, if possible. */ struct GC_ratios ratios; bool rusageMeasureGC; bool summary; /* Print a summary of gc info when program exits. */ + FILE* summaryFile; }; #endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ diff -Nru mlton-20130715/runtime/gc/copy-thread.c mlton-20210117+dfsg/runtime/gc/copy-thread.c --- mlton-20130715/runtime/gc/copy-thread.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/copy-thread.c 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/copy-thread.h mlton-20210117+dfsg/runtime/gc/copy-thread.h --- mlton-20130715/runtime/gc/copy-thread.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/copy-thread.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/current.c mlton-20210117+dfsg/runtime/gc/current.c --- mlton-20130715/runtime/gc/current.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/current.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/current.h mlton-20210117+dfsg/runtime/gc/current.h --- mlton-20130715/runtime/gc/current.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/current.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/debug.h mlton-20210117+dfsg/runtime/gc/debug.h --- mlton-20130715/runtime/gc/debug.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/debug.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -11,7 +11,6 @@ #endif enum { - DEBUG_ARRAY = FALSE, DEBUG_CALL_STACK = FALSE, DEBUG_CARD_MARKING = FALSE, DEBUG_DETAILED = FALSE, @@ -25,6 +24,7 @@ DEBUG_OBJPTR = FALSE, DEBUG_PROFILE = FALSE, DEBUG_RESIZING = FALSE, + DEBUG_SEQUENCE = FALSE, DEBUG_SHARE = FALSE, DEBUG_SIGNALS = FALSE, DEBUG_SIZE = FALSE, diff -Nru mlton-20130715/runtime/gc/dfs-mark.c mlton-20210117+dfsg/runtime/gc/dfs-mark.c --- mlton-20130715/runtime/gc/dfs-mark.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/dfs-mark.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2016,2019-2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -26,23 +26,24 @@ } } -/* dfsMarkByMode (s, r, m, shc, slw) +/* dfsMark (s, r, markState) * * Sets all the mark bits in the object graph pointed to by r. * - * If m is MARK_MODE, it sets the bits to 1. - * If m is UNMARK_MODE, it sets the bits to 0. + * If markState->markMode is MARK_MODE, it sets the bits to 1. + * If markState->markMode is UNMARK_MODE, it sets the bits to 0. * - * If shc, it hash-conses the objects marked. + * If markState->shouldHashCons, it hash-conses the objects marked. * - * If slw, it links the weak objects marked. + * If markState->shouldLinkWeaks, it links the weak objects marked. * - * It returns the total size in bytes of the objects marked. + * It adds to markState.size the total size in bytes of the objects marked. */ -size_t dfsMarkByMode (GC_state s, pointer root, - GC_markMode mode, - bool shouldHashCons, - bool shouldLinkWeaks) { +void dfsMark (GC_state s, pointer root, GC_markState markState) { + GC_markMode mode = markState->mode; + bool shouldHashCons = markState->shouldHashCons; + bool shouldLinkWeaks = markState->shouldLinkWeaks; + GC_header mark; /* Used to set or clear the mark bit. */ size_t size; /* Total number of bytes marked. */ pointer cur; /* The current object being marked. */ @@ -57,15 +58,17 @@ uint32_t objptrIndex; /* The i'th pointer in the object (element) being marked. */ GC_header nextHeader; GC_header* nextHeaderp; - GC_arrayCounter arrayIndex; + GC_sequenceCounter sequenceIndex; pointer top; /* The top of the next stack frame to mark. */ GC_returnAddress returnAddress; - GC_frameLayout frameLayout; + GC_frameInfo frameInfo; GC_frameOffsets frameOffsets; + if (not isPointerInHeap (s, root)) + return; if (isPointerMarkedByMode (root, mode)) /* Object has already been marked. */ - return 0; + return; mark = (MARK_MODE == mode) ? MARK_MASK : 0; size = 0; cur = root; @@ -112,6 +115,7 @@ assert (not isPointerMarkedByMode (cur, mode)); assert (header == getHeader (cur)); assert (headerp == getHeaderp (cur)); + assert (isPointerInHeap (s, cur)); header ^= MARK_MASK; /* Store the mark. In the case of an object that contains a pointer to * itself, it is essential that we store the marked header before marking @@ -122,7 +126,7 @@ splitHeader (s, header, &tag, NULL, &bytesNonObjptrs, &numObjptrs); if (NORMAL_TAG == tag) { size += - GC_NORMAL_HEADER_SIZE + GC_NORMAL_METADATA_SIZE + bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE); if (0 == numObjptrs) { @@ -138,9 +142,9 @@ if (DEBUG_DFS_MARK) fprintf (stderr, "markInNormal objptrIndex = %"PRIu32"\n", objptrIndex); assert (objptrIndex < numObjptrs); - // next = *(pointer*)todo; next = fetchObjptrToPointer (todo, s->heap.start); - if (not isPointer (next)) { + if (not isPointer (next) or + not isPointerInHeap (s, next)) { markNextInNormal: assert (objptrIndex < numObjptrs); objptrIndex++; @@ -170,7 +174,8 @@ if (DEBUG_WEAK) fprintf (stderr, "marking weak "FMTPTR" ", (uintptr_t)w); - if (isObjptr (w->objptr)) { + if (isObjptr (w->objptr) and + isObjptrInHeap (s, w->objptr)) { if (DEBUG_WEAK) fprintf (stderr, "linking\n"); w->link = s->weaks; @@ -181,73 +186,73 @@ } } goto ret; - } else if (ARRAY_TAG == tag) { - /* When marking arrays: - * arrayIndex is the index of the element to mark. - * cur is the pointer to the array. + } else if (SEQUENCE_TAG == tag) { + /* When marking sequences: + * sequenceIndex is the index of the element to mark. + * cur is the pointer to the sequence. * objptrIndex is the index of the pointer within the element * (i.e. the i'th pointer is at index i). * todo is the start of the element. */ size += - GC_ARRAY_HEADER_SIZE - + sizeofArrayNoHeader (s, getArrayLength (cur), bytesNonObjptrs, numObjptrs); - if (0 == numObjptrs or 0 == getArrayLength (cur)) { + GC_SEQUENCE_METADATA_SIZE + + sizeofSequenceNoMetaData (s, getSequenceLength (cur), bytesNonObjptrs, numObjptrs); + if (0 == numObjptrs or 0 == getSequenceLength (cur)) { /* There is nothing to mark. */ -arrayDone: +sequenceDone: if (shouldHashCons) cur = hashConsPointer (s, cur, TRUE); goto ret; } /* Begin marking first element. */ - arrayIndex = 0; + sequenceIndex = 0; todo = cur; -markArrayElt: - assert (arrayIndex < getArrayLength (cur)); +markSequenceElt: + assert (sequenceIndex < getSequenceLength (cur)); objptrIndex = 0; /* Skip to the first pointer. */ todo += bytesNonObjptrs; -markInArray: +markInSequence: if (DEBUG_DFS_MARK) - fprintf (stderr, "markInArray arrayIndex = %"PRIxARRCTR" objptrIndex = %"PRIu32"\n", - arrayIndex, objptrIndex); - assert (arrayIndex < getArrayLength (cur)); + fprintf (stderr, "markInSequence sequenceIndex = %"PRIxSEQCTR" objptrIndex = %"PRIu32"\n", + sequenceIndex, objptrIndex); + assert (sequenceIndex < getSequenceLength (cur)); assert (objptrIndex < numObjptrs); - assert (todo == indexArrayAtObjptrIndex (s, cur, arrayIndex, objptrIndex)); - // next = *(pointer*)todo; + assert (todo == indexSequenceAtObjptrIndex (s, cur, sequenceIndex, objptrIndex)); next = fetchObjptrToPointer (todo, s->heap.start); - if (not (isPointer(next))) { -markNextInArray: - assert (arrayIndex < getArrayLength (cur)); + if (not isPointer (next) or + not isPointerInHeap (s, next)) { +markNextInSequence: + assert (sequenceIndex < getSequenceLength (cur)); assert (objptrIndex < numObjptrs); - assert (todo == indexArrayAtObjptrIndex (s, cur, arrayIndex, objptrIndex)); + assert (todo == indexSequenceAtObjptrIndex (s, cur, sequenceIndex, objptrIndex)); todo += OBJPTR_SIZE; objptrIndex++; if (objptrIndex < numObjptrs) - goto markInArray; - arrayIndex++; - if (arrayIndex < getArrayLength (cur)) - goto markArrayElt; + goto markInSequence; + sequenceIndex++; + if (sequenceIndex < getSequenceLength (cur)) + goto markSequenceElt; /* Done. Clear out the counters and return. */ - *getArrayCounterp (cur) = 0; + *getSequenceCounterp (cur) = 0; *headerp = header & ~COUNTER_MASK; - goto arrayDone; + goto sequenceDone; } nextHeaderp = getHeaderp (next); nextHeader = *nextHeaderp; if (mark == (nextHeader & MARK_MASK)) { if (shouldHashCons) shareObjptr (s, (objptr*)todo); - goto markNextInArray; + goto markNextInSequence; } /* Recur and mark next. */ - *getArrayCounterp (cur) = arrayIndex; + *getSequenceCounterp (cur) = sequenceIndex; *headerp = (header & ~COUNTER_MASK) | (objptrIndex << COUNTER_SHIFT); goto markNext; } else { assert (STACK_TAG == tag); size += - GC_STACK_HEADER_SIZE + GC_STACK_METADATA_SIZE + sizeof (struct GC_stack) + ((GC_stack)cur)->reserved; top = getStackTop (s, (GC_stack)cur); assert (((GC_stack)cur)->used <= ((GC_stack)cur)->reserved); @@ -263,23 +268,23 @@ goto ret; objptrIndex = 0; returnAddress = *(GC_returnAddress*) (top - GC_RETURNADDRESS_SIZE); - frameLayout = getFrameLayoutFromReturnAddress (s, returnAddress); - frameOffsets = frameLayout->offsets; + frameInfo = getFrameInfoFromReturnAddress (s, returnAddress); + frameOffsets = frameInfo->offsets; ((GC_stack)cur)->markTop = top; markInFrame: if (objptrIndex == frameOffsets [0]) { - top -= frameLayout->size; + top -= frameInfo->size; goto markInStack; } - todo = top - frameLayout->size + frameOffsets [objptrIndex + 1]; - // next = *(pointer*)todo; + todo = top - frameInfo->size + frameOffsets [objptrIndex + 1]; next = fetchObjptrToPointer (todo, s->heap.start); if (DEBUG_DFS_MARK) fprintf (stderr, " offset %u todo "FMTPTR" next = "FMTPTR"\n", frameOffsets [objptrIndex + 1], (uintptr_t)todo, (uintptr_t)next); - if (not isPointer (next)) { + if (not isPointer (next) or + not isPointerInHeap (s, next)) { objptrIndex++; goto markInFrame; } @@ -304,8 +309,10 @@ fprintf (stderr, "return cur = "FMTPTR" prev = "FMTPTR"\n", (uintptr_t)cur, (uintptr_t)prev); assert (isPointerMarkedByMode (cur, mode)); - if (NULL == prev) - return size; + if (NULL == prev) { + markState->size += size; + return; + } next = cur; cur = prev; headerp = getHeaderp (cur); @@ -326,9 +333,9 @@ if (shouldHashCons) markIntergenerationalPointer (s, (pointer*)todo); goto markNextInNormal; - } else if (ARRAY_TAG == tag) { - arrayIndex = getArrayCounter (cur); - todo = cur + arrayIndex * (bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE)); + } else if (SEQUENCE_TAG == tag) { + sequenceIndex = getSequenceCounter (cur); + todo = cur + sequenceIndex * (bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE)); objptrIndex = (header & COUNTER_MASK) >> COUNTER_SHIFT; todo += bytesNonObjptrs + objptrIndex * OBJPTR_SIZE; // prev = *(pointer*)todo; @@ -337,16 +344,16 @@ storeObjptrFromPointer (todo, next, s->heap.start); if (shouldHashCons) markIntergenerationalPointer (s, (pointer*)todo); - goto markNextInArray; + goto markNextInSequence; } else { assert (STACK_TAG == tag); objptrIndex = ((GC_stack)cur)->markIndex; top = ((GC_stack)cur)->markTop; /* Invariant: top points just past a "return address". */ returnAddress = *(GC_returnAddress*) (top - GC_RETURNADDRESS_SIZE); - frameLayout = getFrameLayoutFromReturnAddress (s, returnAddress); - frameOffsets = frameLayout->offsets; - todo = top - frameLayout->size + frameOffsets [objptrIndex + 1]; + frameInfo = getFrameInfoFromReturnAddress (s, returnAddress); + frameOffsets = frameInfo->offsets; + todo = top - frameInfo->size + frameOffsets [objptrIndex + 1]; // prev = *(pointer*)todo; prev = fetchObjptrToPointer (todo, s->heap.start); // *(pointer*)todo = next; @@ -359,16 +366,13 @@ assert (FALSE); } -void dfsMarkWithHashConsWithLinkWeaks (GC_state s, objptr *opp) { +void dfsMarkObjptr (GC_state s, objptr *opp, GC_markState markState) { pointer p; p = objptrToPointer (*opp, s->heap.start); - dfsMarkByMode (s, p, MARK_MODE, TRUE, TRUE); + dfsMark (s, p, markState); } -void dfsMarkWithoutHashConsWithLinkWeaks (GC_state s, objptr *opp) { - pointer p; - - p = objptrToPointer (*opp, s->heap.start); - dfsMarkByMode (s, p, MARK_MODE, FALSE, TRUE); +void dfsMarkObjptrFun (GC_state s, objptr *opp, void *env) { + dfsMarkObjptr(s, opp, env); } diff -Nru mlton-20130715/runtime/gc/dfs-mark.h mlton-20210117+dfsg/runtime/gc/dfs-mark.h --- mlton-20130715/runtime/gc/dfs-mark.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/dfs-mark.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -14,17 +14,21 @@ UNMARK_MODE, } GC_markMode; +typedef struct GC_markState { + GC_markMode mode; + bool shouldHashCons; + bool shouldLinkWeaks; + size_t size; +} *GC_markState; + #endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ #if (defined (MLTON_GC_INTERNAL_FUNCS)) static inline bool isPointerMarked (pointer p); static inline bool isPointerMarkedByMode (pointer p, GC_markMode m); -static size_t dfsMarkByMode (GC_state s, pointer root, - GC_markMode mode, - bool shouldHashCons, - bool shouldLinkWeaks); -static inline void dfsMarkWithHashConsWithLinkWeaks (GC_state s, objptr *opp); -static inline void dfsMarkWithoutHashConsWithLinkWeaks (GC_state s, objptr *opp); +static void dfsMark (GC_state s, pointer root, GC_markState markState); +static void dfsMarkObjptr (GC_state s, objptr *root, GC_markState markState); +static void dfsMarkObjptrFun (GC_state s, objptr *root, void *env); #endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ diff -Nru mlton-20130715/runtime/gc/done.c mlton-20210117+dfsg/runtime/gc/done.c --- mlton-20130715/runtime/gc/done.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/done.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2017 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -42,7 +42,7 @@ enter (s); minorGC (s); - out = stderr; + out = s->controls.summaryFile; if (s->controls.summary) { struct rusage ru_total; uintmax_t gcTime; diff -Nru mlton-20130715/runtime/gc/done.h mlton-20210117+dfsg/runtime/gc/done.h --- mlton-20130715/runtime/gc/done.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/done.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/enter_leave.c mlton-20210117+dfsg/runtime/gc/enter_leave.c --- mlton-20130715/runtime/gc/enter_leave.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/enter_leave.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/enter_leave.h mlton-20210117+dfsg/runtime/gc/enter_leave.h --- mlton-20130715/runtime/gc/enter_leave.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/enter_leave.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/foreach.c mlton-20210117+dfsg/runtime/gc/foreach.c --- mlton-20130715/runtime/gc/foreach.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/foreach.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,26 +1,28 @@ -/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2016,2019-2020 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ -void callIfIsObjptr (GC_state s, GC_foreachObjptrFun f, objptr *opp) { +void callIfIsObjptr (GC_state s, GC_foreachObjptrClosure f, objptr *opp) { if (isObjptr (*opp)) - f (s, opp); + f->fun (s, opp, f->env); } /* foreachGlobalObjptr (s, f) * * Apply f to each global object pointer into the heap. */ -void foreachGlobalObjptr (GC_state s, GC_foreachObjptrFun f) { +void foreachGlobalObjptr (GC_state s, GC_foreachObjptrClosure f) { for (unsigned int i = 0; i < s->globalsLength; ++i) { if (DEBUG_DETAILED) fprintf (stderr, "foreachGlobal %u\n", i); callIfIsObjptr (s, f, &s->globals [i]); } + foreachObjptrInStaticHeap (s, &s->staticHeaps.root, f, TRUE); if (DEBUG_DETAILED) fprintf (stderr, "foreachGlobal threads\n"); callIfIsObjptr (s, f, &s->callFromCHandlerThread); @@ -38,7 +40,7 @@ * If skipWeaks, then the object pointer in weak objects is skipped. */ pointer foreachObjptrInObject (GC_state s, pointer p, - GC_foreachObjptrFun f, bool skipWeaks) { + GC_foreachObjptrClosure f, bool skipWeaks) { GC_header header; uint16_t bytesNonObjptrs; uint16_t numObjptrs; @@ -73,36 +75,31 @@ callIfIsObjptr (s, f, (objptr*)p); p += OBJPTR_SIZE; } - } else if (ARRAY_TAG == tag) { + } else if (SEQUENCE_TAG == tag) { size_t bytesPerElement; size_t dataBytes; pointer last; - GC_arrayLength numElements; + GC_sequenceLength numElements; - numElements = getArrayLength (p); + numElements = getSequenceLength (p); bytesPerElement = bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE); dataBytes = numElements * bytesPerElement; - if (dataBytes < OBJPTR_SIZE) { - /* Very small (including empty) arrays have OBJPTR_SIZE bytes - * space for the forwarding pointer. - */ - dataBytes = OBJPTR_SIZE; - } else if (0 == numObjptrs) { + if (0 == numObjptrs) { /* No objptrs to process. */ ; } else { last = p + dataBytes; if (0 == bytesNonObjptrs) - /* Array with only pointers. */ + /* Sequence with only pointers. */ for ( ; p < last; p += OBJPTR_SIZE) callIfIsObjptr (s, f, (objptr*)p); else { - /* Array with a mix of pointers and non-pointers. */ + /* Sequence with a mix of pointers and non-pointers. */ size_t bytesObjptrs; bytesObjptrs = numObjptrs * OBJPTR_SIZE; - /* For each array element. */ + /* For each sequence element. */ for ( ; p < last; ) { pointer next; @@ -117,13 +114,13 @@ assert (p == last); p -= dataBytes; } - p += alignWithExtra (s, dataBytes, GC_ARRAY_HEADER_SIZE); + p += alignWithExtra (s, dataBytes, GC_SEQUENCE_METADATA_SIZE); } else { /* stack */ GC_stack stack; pointer top, bottom; unsigned int i; GC_returnAddress returnAddress; - GC_frameLayout frameLayout; + GC_frameInfo frameInfo; GC_frameOffsets frameOffsets; assert (STACK_TAG == tag); @@ -142,9 +139,9 @@ fprintf (stderr, " top = "FMTPTR" return address = "FMTRA"\n", (uintptr_t)top, returnAddress); } - frameLayout = getFrameLayoutFromReturnAddress (s, returnAddress); - frameOffsets = frameLayout->offsets; - top -= frameLayout->size; + frameInfo = getFrameInfoFromReturnAddress (s, returnAddress); + frameOffsets = frameInfo->offsets; + top -= frameInfo->size; for (i = 0 ; i < frameOffsets[0] ; ++i) { if (DEBUG) fprintf(stderr, " offset %"PRIx16" address "FMTOBJPTR"\n", @@ -171,7 +168,7 @@ */ pointer foreachObjptrInRange (GC_state s, pointer front, pointer *back, - GC_foreachObjptrFun f, bool skipWeaks) { + GC_foreachObjptrClosure f, bool skipWeaks) { pointer b; assert (isFrontierAligned (s, front)); @@ -197,12 +194,20 @@ return front; } +void foreachObjptrInStaticHeap (GC_state s, + struct GC_staticHeap *staticHeap, + GC_foreachObjptrClosure f, + bool skipWeaks) { + pointer front = alignFrontier (s, staticHeap->start); + pointer back = staticHeap->start + staticHeap->size; + foreachObjptrInRange (s, front, &back, f, skipWeaks); +} /* Apply f to the frame index of each frame in the current thread's stack. */ -void foreachStackFrame (GC_state s, GC_foreachStackFrameFun f) { +void foreachStackFrame (GC_state s, GC_foreachStackFrameClosure f) { pointer bottom; - GC_frameIndex findex; - GC_frameLayout layout; + GC_frameIndex frameIndex; + GC_frameInfo frameInfo; GC_returnAddress returnAddress; pointer top; @@ -212,18 +217,20 @@ if (DEBUG_PROFILE) fprintf (stderr, " bottom = "FMTPTR" top = "FMTPTR".\n", (uintptr_t)bottom, (uintptr_t)s->stackTop); - for (top = s->stackTop; top > bottom; top -= layout->size) { + top = s->stackTop; + while (top > bottom) { returnAddress = *((GC_returnAddress*)(top - GC_RETURNADDRESS_SIZE)); - findex = getFrameIndexFromReturnAddress (s, returnAddress); + frameIndex = getFrameIndexFromReturnAddress (s, returnAddress); if (DEBUG_PROFILE) - fprintf (stderr, "top = "FMTPTR" findex = "FMTFI"\n", - (uintptr_t)top, findex); - unless (findex < s->frameLayoutsLength) - die ("top = "FMTPTR" returnAddress = "FMTRA" findex = "FMTFI"\n", - (uintptr_t)top, (uintptr_t)returnAddress, findex); - f (s, findex); - layout = &(s->frameLayouts[findex]); - assert (layout->size > 0); + fprintf (stderr, "top = "FMTPTR" frameIndex = "FMTFI"\n", + (uintptr_t)top, frameIndex); + unless (frameIndex < s->frameInfosLength) + die ("top = "FMTPTR" returnAddress = "FMTRA" frameIndex = "FMTFI"\n", + (uintptr_t)top, (uintptr_t)returnAddress, frameIndex); + frameInfo = &(s->frameInfos[frameIndex]); + assert (frameInfo->size > 0); + top -= frameInfo->size; + f->fun (s, frameIndex, frameInfo, top, f->env); } if (DEBUG_PROFILE) fprintf (stderr, "done foreachStackFrame\n"); diff -Nru mlton-20130715/runtime/gc/foreach.h mlton-20210117+dfsg/runtime/gc/foreach.h --- mlton-20130715/runtime/gc/foreach.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/foreach.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,21 +1,27 @@ -/* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #if (defined (MLTON_GC_INTERNAL_FUNCS)) -typedef void (*GC_foreachObjptrFun) (GC_state s, objptr *opp); +typedef void (*GC_foreachObjptrFun) (GC_state s, objptr *opp, void *env); -static inline void callIfIsObjptr (GC_state s, GC_foreachObjptrFun f, objptr *opp); +typedef struct GC_foreachObjptrClosure { + GC_foreachObjptrFun fun; + void *env; +} *GC_foreachObjptrClosure; + +static inline void callIfIsObjptr (GC_state s, GC_foreachObjptrClosure f, objptr *opp); /* foreachGlobalObjptr (s, f) * * Apply f to each global object pointer into the heap. */ -static inline void foreachGlobalObjptr (GC_state s, GC_foreachObjptrFun f); +static inline void foreachGlobalObjptr (GC_state s, GC_foreachObjptrClosure f); /* foreachObjptrInObject (s, p, skipWeaks, f) * * Applies f to each object pointer in the object pointed to by p. @@ -24,7 +30,7 @@ * If skipWeaks, then the object pointer in weak objects is skipped. */ static inline pointer foreachObjptrInObject (GC_state s, pointer p, - GC_foreachObjptrFun f, bool skipWeaks); + GC_foreachObjptrClosure f, bool skipWeaks); /* foreachObjptrInRange (s, front, back, f, skipWeaks) * * Apply f to each pointer between front and *back, which should be a @@ -37,15 +43,24 @@ * If skipWeaks, then the object pointer in weak objects is skipped. */ static inline pointer foreachObjptrInRange (GC_state s, pointer front, pointer *back, - GC_foreachObjptrFun f, bool skipWeaks); - + GC_foreachObjptrClosure f, bool skipWeaks); -typedef void (*GC_foreachStackFrameFun) (GC_state s, GC_frameIndex i); +static inline void foreachObjptrInStaticHeap (GC_state s, + struct GC_staticHeap *staticHeap, + GC_foreachObjptrClosure f, + bool skipWeaks); + +typedef void (*GC_foreachStackFrameFun) (GC_state s, GC_frameIndex i, GC_frameInfo frameInfo, pointer frameTop, void *env); + +typedef struct GC_foreachStackFrameClosure { + GC_foreachStackFrameFun fun; + void *env; +} *GC_foreachStackFrameClosure; /* foreachStackFrame (s, f); * * Apply f to the frame index of each frame in the current stack. */ -static inline void foreachStackFrame (GC_state s, GC_foreachStackFrameFun f); +static inline void foreachStackFrame (GC_state s, GC_foreachStackFrameClosure f); #endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ diff -Nru mlton-20130715/runtime/gc/forward.c mlton-20210117+dfsg/runtime/gc/forward.c --- mlton-20130715/runtime/gc/forward.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/forward.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,36 +1,59 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2016,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #if ASSERT -bool isPointerInToSpace (GC_state s, pointer p) { - return (not (isPointer (p)) - or (s->forwardState.toStart <= p and p < s->forwardState.toLimit)); +bool isPointerInToSpace (__attribute__((unused)) GC_state s, pointer p, GC_forwardState forwardState) { + return (not (isPointer (p)) + or (forwardState->toStart <= p and p < forwardState->toLimit)); } -bool isObjptrInToSpace (GC_state s, objptr op) { +bool isObjptrInToSpace (__attribute__((unused)) GC_state s, objptr op, GC_forwardState forwardState) { pointer p; if (not (isObjptr (op))) return TRUE; - p = objptrToPointer (op, s->forwardState.toStart); - return isPointerInToSpace (s, p); + p = objptrToPointer (op, forwardState->toStart); + return isPointerInToSpace (s, p, forwardState); } #endif +/* getFwdPtrp (p) + * + * Returns a pointer to the forwarding pointer for the object pointed to by p. + */ +objptr* getFwdPtrp (pointer p) { + return (objptr*)(getHeaderp(p)); +} + +/* getFwdPtr (p) + * + * Returns the forwarding pointer for the object pointed to by p. + */ +objptr getFwdPtr (pointer p) { + return *(getFwdPtrp(p)); +} + +/* hasFwdPtr (p) + * + * Returns true if the object pointed to by p has a valid forwarding pointer. + */ +bool hasFwdPtr (pointer p) { + return (not (GC_VALID_HEADER_MASK & getHeader(p))); +} + /* forward (s, opp) * Forwards the object pointed to by *opp and updates *opp to point to * the new object. */ -void forwardObjptr (GC_state s, objptr *opp) { +void forwardObjptr (GC_state s, objptr *opp, GC_forwardState forwardState) { objptr op; pointer p; - GC_header header; op = *opp; p = objptrToPointer (op, s->heap.start); @@ -39,27 +62,26 @@ "forwardObjptr opp = "FMTPTR" op = "FMTOBJPTR" p = "FMTPTR"\n", (uintptr_t)opp, op, (uintptr_t)p); assert (isObjptrInFromSpace (s, *opp)); - header = getHeader (p); - if (DEBUG_DETAILED and header == GC_FORWARDED) + if (DEBUG_DETAILED and hasFwdPtr(p)) fprintf (stderr, " already FORWARDED\n"); - if (header != GC_FORWARDED) { /* forward the object */ + if (not (hasFwdPtr(p))) { /* forward the object */ size_t size, skip; - size_t headerBytes, objectBytes; + size_t metaDataBytes, objectBytes; GC_objectTypeTag tag; uint16_t bytesNonObjptrs, numObjptrs; - splitHeader(s, header, &tag, NULL, &bytesNonObjptrs, &numObjptrs); + splitHeader(s, getHeader(p), &tag, NULL, &bytesNonObjptrs, &numObjptrs); /* Compute the space taken by the header and object body. */ if ((NORMAL_TAG == tag) or (WEAK_TAG == tag)) { /* Fixed size object. */ - headerBytes = GC_NORMAL_HEADER_SIZE; + metaDataBytes = GC_NORMAL_METADATA_SIZE; objectBytes = bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE); skip = 0; - } else if (ARRAY_TAG == tag) { - headerBytes = GC_ARRAY_HEADER_SIZE; - objectBytes = sizeofArrayNoHeader (s, getArrayLength (p), - bytesNonObjptrs, numObjptrs); + } else if (SEQUENCE_TAG == tag) { + metaDataBytes = GC_SEQUENCE_METADATA_SIZE; + objectBytes = sizeofSequenceNoMetaData (s, getSequenceLength (p), + bytesNonObjptrs, numObjptrs); skip = 0; } else { /* Stack. */ bool current; @@ -67,7 +89,7 @@ GC_stack stack; assert (STACK_TAG == tag); - headerBytes = GC_STACK_HEADER_SIZE; + metaDataBytes = GC_STACK_METADATA_SIZE; stack = (GC_stack)p; current = getStackCurrent(s) == stack; @@ -84,22 +106,22 @@ objectBytes = sizeof (struct GC_stack) + stack->used; skip = stack->reserved - stack->used; } - size = headerBytes + objectBytes; - assert (s->forwardState.back + size + skip <= s->forwardState.toLimit); + size = metaDataBytes + objectBytes; + assert (forwardState->back + size + skip <= forwardState->toLimit); /* Copy the object. */ - GC_memcpy (p - headerBytes, s->forwardState.back, size); + GC_memcpy (p - metaDataBytes, forwardState->back, size); /* If the object has a valid weak pointer, link it into the weaks * for update after the copying GC is done. */ if ((WEAK_TAG == tag) and (numObjptrs == 1)) { GC_weak w; - w = (GC_weak)(s->forwardState.back + GC_NORMAL_HEADER_SIZE + offsetofWeak (s)); + w = (GC_weak)(forwardState->back + GC_NORMAL_METADATA_SIZE + offsetofWeak (s)); if (DEBUG_WEAK) fprintf (stderr, "forwarding weak "FMTPTR" ", (uintptr_t)w); if (isObjptr (w->objptr) - and (not s->forwardState.amInMinorGC + and (not forwardState->amInMinorGC or isObjptrInNursery (s, w->objptr))) { if (DEBUG_WEAK) fprintf (stderr, "linking\n"); @@ -110,41 +132,64 @@ fprintf (stderr, "not linking\n"); } } - /* Store the forwarding pointer in the old object. */ - *((GC_header*)(p - GC_HEADER_SIZE)) = GC_FORWARDED; - *((objptr*)p) = pointerToObjptr (s->forwardState.back + headerBytes, - s->forwardState.toStart); + /* Store the forwarding pointer in the old object header. */ + *(getFwdPtrp(p)) = pointerToObjptr (forwardState->back + metaDataBytes, + forwardState->toStart); + assert (hasFwdPtr(p)); /* Update the back of the queue. */ - s->forwardState.back += size + skip; - assert (isAligned ((size_t)s->forwardState.back + GC_NORMAL_HEADER_SIZE, + forwardState->back += size + skip; + assert (isAligned ((size_t)forwardState->back + GC_NORMAL_METADATA_SIZE, s->alignment)); } - *opp = *((objptr*)p); + *opp = getFwdPtr(p); if (DEBUG_DETAILED) fprintf (stderr, "forwardObjptr --> *opp = "FMTPTR"\n", (uintptr_t)*opp); - assert (isObjptrInToSpace (s, *opp)); + assert (isObjptrInToSpace (s, *opp, forwardState)); } -void forwardObjptrIfInNursery (GC_state s, objptr *opp) { +void forwardObjptrIfInNursery (GC_state s, objptr *opp, GC_forwardState forwardState) { objptr op; pointer p; op = *opp; p = objptrToPointer (op, s->heap.start); - if (p < s->heap.nursery) + if ((p < s->heap.nursery) or (p > s->frontier)) return; if (DEBUG_GENERATIONAL) fprintf (stderr, "forwardObjptrIfInNursery opp = "FMTPTR" op = "FMTOBJPTR" p = "FMTPTR"\n", (uintptr_t)opp, op, (uintptr_t)p); assert (s->heap.nursery <= p and p < s->limitPlusSlop); - forwardObjptr (s, opp); + forwardObjptr (s, opp, forwardState); +} +void forwardObjptrIfInNurseryFun (GC_state s, objptr *opp, void *env) { + forwardObjptrIfInNursery(s, opp, env); +} + +void forwardObjptrIfInHeap (GC_state s, objptr *opp, GC_forwardState forwardState) { + objptr op; + pointer p; + + op = *opp; + p = objptrToPointer (op, s->heap.start); + + if ((p < s->heap.start) or (p > s->frontier)) + return; + if (DEBUG_DETAILED) + fprintf (stderr, + "forwardObjptrIfInHeap opp = "FMTPTR" op = "FMTOBJPTR" p = "FMTPTR"\n", + (uintptr_t)opp, op, (uintptr_t)p); + assert (s->heap.start <= p and p < s->limitPlusSlop); + forwardObjptr (s, opp, forwardState); +} +void forwardObjptrIfInHeapFun (GC_state s, objptr *opp, void *env) { + forwardObjptrIfInHeap(s, opp, env); } /* Walk through all the cards and forward all intergenerational pointers. */ -void forwardInterGenerationalObjptrs (GC_state s) { +void forwardInterGenerationalObjptrs (GC_state s, GC_forwardState forwardState) { GC_cardMapElem *cardMap; GC_crossMapElem *crossMap; pointer oldGenStart, oldGenEnd; @@ -153,6 +198,9 @@ pointer cardStart, cardEnd; pointer objectStart; + struct GC_foreachObjptrClosure forwardObjptrIfInNurseryClosure = + {.fun = forwardObjptrIfInNurseryFun, .env = forwardState}; + if (DEBUG_GENERATIONAL) fprintf (stderr, "Forwarding inter-generational pointers.\n"); updateCrossMap (s); @@ -196,7 +244,7 @@ * weaks, since the weak pointer will never be into the nursery. */ objectStart = foreachObjptrInRange (s, objectStart, &cardEnd, - forwardObjptrIfInNursery, FALSE); + &forwardObjptrIfInNurseryClosure, FALSE); s->cumulativeStatistics.bytesScannedMinor += (uintmax_t)(objectStart - lastObject); if (objectStart == oldGenEnd) goto done; diff -Nru mlton-20130715/runtime/gc/forward.h mlton-20210117+dfsg/runtime/gc/forward.h --- mlton-20130715/runtime/gc/forward.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/forward.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,34 +1,38 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2016,2019 Matthew Fluet. * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #if (defined (MLTON_GC_INTERNAL_TYPES)) -struct GC_forwardState { +typedef struct GC_forwardState { bool amInMinorGC; pointer back; pointer toStart; pointer toLimit; -}; - -#define GC_FORWARDED ~((GC_header)0) +} *GC_forwardState; #endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ #if (defined (MLTON_GC_INTERNAL_FUNCS)) #if ASSERT -static inline bool isPointerInToSpace (GC_state s, pointer p); -static inline bool isObjptrInToSpace (GC_state s, objptr op); +static inline bool isPointerInToSpace (GC_state s, pointer p, GC_forwardState forwardState); +static inline bool isObjptrInToSpace (GC_state s, objptr opp, GC_forwardState forwardState); #endif -static inline void forwardObjptr (GC_state s, objptr *opp); -static inline void forwardObjptrIfInNursery (GC_state s, objptr *opp); -static inline void forwardInterGenerationalObjptrs (GC_state s); +static inline objptr* getFwdPtrp (pointer p); +static inline objptr getFwdPtr (pointer p); +static inline bool hasFwdPtr (pointer p); +static inline void forwardObjptr (GC_state s, objptr *oppp, GC_forwardState forwardState); +static inline void forwardObjptrIfInHeap (GC_state s, objptr *oppp, GC_forwardState forwardState); +static inline void forwardObjptrIfInHeapFun (GC_state s, objptr *oppp, void *env); +static inline void forwardObjptrIfInNursery (GC_state s, objptr *oppp, GC_forwardState forwardState); +static inline void forwardObjptrIfInNurseryFun (GC_state s, objptr *oppp, void *env); +static inline void forwardInterGenerationalObjptrs (GC_state s, GC_forwardState forwardState); #endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ diff -Nru mlton-20130715/runtime/gc/frame.c mlton-20210117+dfsg/runtime/gc/frame.c --- mlton-20130715/runtime/gc/frame.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/frame.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -16,23 +17,23 @@ return res; } -GC_frameLayout getFrameLayoutFromFrameIndex (GC_state s, GC_frameIndex findex) { - GC_frameLayout layout; +GC_frameInfo getFrameInfoFromFrameIndex (GC_state s, GC_frameIndex frameIndex) { + GC_frameInfo frameInfo; if (DEBUG_DETAILED) - fprintf (stderr, "findex = "FMTFI" frameLayoutsLength = %"PRIu32"\n", - findex, s->frameLayoutsLength); - assert (findex < s->frameLayoutsLength); - layout = &(s->frameLayouts[findex]); - assert (layout->size > 0); - return layout; + fprintf (stderr, "frameIndex = "FMTFI" frameInfosLength = %"PRIu32"\n", + frameIndex, s->frameInfosLength); + assert (frameIndex < s->frameInfosLength); + frameInfo = &(s->frameInfos[frameIndex]); + assert (frameInfo->size > 0); + return frameInfo; } -GC_frameLayout getFrameLayoutFromReturnAddress (GC_state s, GC_returnAddress ra) { - GC_frameLayout layout; - GC_frameIndex findex; - - findex = getFrameIndexFromReturnAddress (s, ra); - layout = getFrameLayoutFromFrameIndex(s, findex); - return layout; +GC_frameInfo getFrameInfoFromReturnAddress (GC_state s, GC_returnAddress ra) { + GC_frameInfo frameInfo; + GC_frameIndex frameIndex; + + frameIndex = getFrameIndexFromReturnAddress (s, ra); + frameInfo = getFrameInfoFromFrameIndex(s, frameIndex); + return frameInfo; } diff -Nru mlton-20130715/runtime/gc/frame.h mlton-20210117+dfsg/runtime/gc/frame.h --- mlton-20130715/runtime/gc/frame.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/frame.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -10,35 +11,39 @@ /* * The "... reserved bytes ..." of a stack object constitute a linear - * sequence of frames. For the purposes of garbage collection, we - * must be able to recover the size and offsets of live heap-pointers - * for each frame. This data is declared as follows: + * sequence of frames. For the purposes of garbage collection and + * profiling, we must be able to recover information (e.g., the size + * and offsets of live heap-pointers) for each frame. This data is + * declared as follows: * - * GC_frameLayout *frameLayouts; + * GC_frameInfo *frameInfos; * - * The frameLayouts pointer is initialized to point to a static array - * of frame layouts that is emitted for each compiled program. The - * kind field identifies whether or not the frame is for a C call. - * (Note: The ML stack is distinct from the system stack. A C call - * executes on the system stack. The frame left on the ML stack is - * just a marker.) The size field indicates the size of the frame, - * including space for the return address. The offsets field points - * to an array (the zeroeth element recording the size of the array) - * whose elements record byte offsets from the bottom of the frame at - * which live heap pointers are located. + * The frameInfos pointer is initialized to point to a static array of + * frame infos that is emitted for each compiled program. The kind + * field identifies whether or not the frame is for a C call. (Note: + * The ML stack is distinct from the system stack. A C call executes + * on the system stack. The frame left on the ML stack is just a + * marker.) The offsets field points to an array (the zeroeth element + * recording the size of the array) whose elements record byte offsets + * from the bottom of the frame at which live heap pointers are + * located. The size field indicates the size of the frame, including + * space for the return address. The sourceSeqIndex field indicates + * the sequence of source names corresponding to the frame as an index + * into sourceSeqs; see sources.h. */ -typedef uint16_t *GC_frameOffsets; +typedef const uint16_t *GC_frameOffsets; typedef enum { C_FRAME, ML_FRAME } GC_frameKind; -typedef struct GC_frameLayout { - GC_frameKind kind; - GC_frameOffsets offsets; - uint16_t size; -} *GC_frameLayout; +typedef const struct GC_frameInfo { + const GC_frameKind kind; + const GC_frameOffsets offsets; + const uint16_t size; + const GC_sourceSeqIndex sourceSeqIndex; +} *GC_frameInfo; typedef uint32_t GC_frameIndex; #define PRIFI PRIu32 #define FMTFI "%"PRIFI @@ -52,7 +57,7 @@ #if (defined (MLTON_GC_INTERNAL_FUNCS)) static inline GC_frameIndex getFrameIndexFromReturnAddress (GC_state s, GC_returnAddress ra); -static inline GC_frameLayout getFrameLayoutFromFrameIndex (GC_state s, GC_frameIndex findex); -static inline GC_frameLayout getFrameLayoutFromReturnAddress (GC_state s, GC_returnAddress ra); +static inline GC_frameInfo getFrameInfoFromFrameIndex (GC_state s, GC_frameIndex findex); +static inline GC_frameInfo getFrameInfoFromReturnAddress (GC_state s, GC_returnAddress ra); #endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ diff -Nru mlton-20130715/runtime/gc/garbage-collection.c mlton-20210117+dfsg/runtime/gc/garbage-collection.c --- mlton-20130715/runtime/gc/garbage-collection.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/garbage-collection.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2009-2010,2012 Matthew Fluet. +/* Copyright (C) 2009-2010,2012,2016 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -61,7 +61,7 @@ uintmaxToCommaString(getStackCurrent(s)->reserved), uintmaxToCommaString(reserved), uintmaxToCommaString(getStackCurrent(s)->used)); - assert (hasHeapBytesFree (s, sizeofStackWithHeader (s, reserved), 0)); + assert (hasHeapBytesFree (s, sizeofStackWithMetaData (s, reserved), 0)); stack = newStack (s, reserved, TRUE); copyStack (s, getStackCurrent(s), stack); getThreadCurrent(s)->stack = pointerToObjptr ((pointer)stack, s->heap.start); @@ -138,7 +138,7 @@ stackBytesRequested = stackTopOk ? 0 - : sizeofStackWithHeader (s, sizeofStackGrowReserved (s, getStackCurrent (s))); + : sizeofStackWithMetaData (s, sizeofStackGrowReserved (s, getStackCurrent (s))); totalBytesRequested = oldGenBytesRequested + nurseryBytesRequested diff -Nru mlton-20130715/runtime/gc/garbage-collection.h mlton-20210117+dfsg/runtime/gc/garbage-collection.h --- mlton-20130715/runtime/gc/garbage-collection.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/garbage-collection.h 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/gc_state.c mlton-20210117+dfsg/runtime/gc/gc_state.c --- mlton-20130715/runtime/gc/gc_state.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/gc_state.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2009,2012 Matthew Fluet. +/* Copyright (C) 2009,2012,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -163,6 +163,10 @@ s->callFromCHandlerThread = op; } +pointer GC_getCallFromCOpArgsResPtr (GC_state s) { + return s->callFromCOpArgsResPtr; +} + pointer GC_getCurrentThread (GC_state s) { pointer p = objptrToPointer (s->currentThread, s->heap.start); return p; diff -Nru mlton-20130715/runtime/gc/gc_state.h mlton-20210117+dfsg/runtime/gc/gc_state.h --- mlton-20130715/runtime/gc/gc_state.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/gc_state.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2014,2019-2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -18,7 +18,7 @@ pointer limit; /* limit = heap.start + heap.size */ pointer stackTop; /* Top of stack in current thread. */ pointer stackLimit; /* stackBottom + stackSize - maxFrameSize */ - size_t exnStack; + ptrdiff_t exnStack; /* Alphabetized fields follow. */ size_t alignment; /* */ bool amInGC; @@ -27,21 +27,18 @@ int atMLtonsLength; uint32_t atomicState; objptr callFromCHandlerThread; /* Handler for exported C calls (in heap). */ - struct GC_callStackState callStackState; + pointer callFromCOpArgsResPtr; /* Pass op, args, and res from exported C call */ bool canMinor; /* TRUE iff there is space for a minor gc. */ struct GC_controls controls; struct GC_cumulativeStatistics cumulativeStatistics; objptr currentThread; /* Currently executing thread (in heap). */ - struct GC_forwardState forwardState; - GC_frameLayout frameLayouts; /* Array of frame layouts. */ - uint32_t frameLayoutsLength; /* Cardinality of frameLayouts array. */ + GC_frameInfo frameInfos; /* Array of frame infos. */ + uint32_t frameInfosLength; /* Cardinality of frameInfos array. */ struct GC_generationalMaps generationalMaps; objptr *globals; uint32_t globalsLength; bool hashConsDuringGC; struct GC_heap heap; - struct GC_intInfInit *intInfInits; - uint32_t intInfInitsLength; struct GC_lastMajorStatistics lastMajorStatistics; pointer limitPlusSlop; /* limit + GC_HEAP_LIMIT_SLOP */ int (*loadGlobals)(FILE *f); /* loads the globals from the file. */ @@ -63,10 +60,8 @@ struct GC_signalsInfo signalsInfo; struct GC_sourceMaps sourceMaps; pointer stackBottom; /* Bottom of stack in current thread. */ + struct GC_staticHeaps staticHeaps; struct GC_sysvals sysvals; - struct GC_translateState translateState; - struct GC_vectorInit *vectorInits; - uint32_t vectorInitsLength; GC_weak weaks; /* Linked list of (live) weak pointers */ }; @@ -101,6 +96,8 @@ PRIVATE pointer GC_getCallFromCHandlerThread (GC_state s); PRIVATE void GC_setCallFromCHandlerThread (GC_state s, pointer p); +PRIVATE pointer GC_getCallFromCOpArgsResPtr (GC_state s); + PRIVATE pointer GC_getCurrentThread (GC_state s); PRIVATE pointer GC_getSavedThread (GC_state s); PRIVATE void GC_setSavedThread (GC_state s, pointer p); @@ -115,3 +112,5 @@ PRIVATE void GC_setGCSignalHandled (GC_state s, bool b); PRIVATE bool GC_getGCSignalPending (GC_state s); PRIVATE void GC_setGCSignalPending (GC_state s, bool b); + +PRIVATE GC_state MLton_gcState (); diff -Nru mlton-20130715/runtime/gc/generational.c mlton-20210117+dfsg/runtime/gc/generational.c --- mlton-20130715/runtime/gc/generational.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/generational.c 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/generational.h mlton-20210117+dfsg/runtime/gc/generational.h --- mlton-20130715/runtime/gc/generational.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/generational.h 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/handler.c mlton-20210117+dfsg/runtime/gc/handler.c --- mlton-20130715/runtime/gc/handler.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/handler.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -56,7 +57,8 @@ * write of s->signalsInfo.signalsPending. The signals are blocked * by Posix_Signal_handle (see Posix/Signal/Signal.c). */ -void GC_handler (GC_state s, int signum) { +void GC_handler (int signum) { + GC_state s = MLton_gcState (); if (DEBUG_SIGNALS) fprintf (stderr, "GC_handler signum = %d\n", signum); assert (sigismember (&s->signalsInfo.signalsHandled, signum)); diff -Nru mlton-20130715/runtime/gc/handler.h mlton-20210117+dfsg/runtime/gc/handler.h --- mlton-20130715/runtime/gc/handler.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/handler.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -19,4 +20,4 @@ #endif /* (defined (MLTON_GC_INTERNAL_BASIS)) */ -PRIVATE void GC_handler (GC_state s, int signum); +PRIVATE void GC_handler (int signum); diff -Nru mlton-20130715/runtime/gc/hash-cons.c mlton-20210117+dfsg/runtime/gc/hash-cons.c --- mlton-20130715/runtime/gc/hash-cons.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/hash-cons.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2016 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -176,8 +176,8 @@ unless (*p1 == *p2) goto lookNext; splitHeader (s, header, &tag, NULL, NULL, NULL); - if (ARRAY_TAG == tag - and (getArrayLength (object) != getArrayLength (e->object))) + if (SEQUENCE_TAG == tag + and (getSequenceLength (object) != getSequenceLength (e->object))) goto lookNext; } /* object is equal to e->object. */ @@ -248,12 +248,12 @@ res = object; goto done; } - assert ((ARRAY_TAG == tag) or (NORMAL_TAG == tag)); + assert ((SEQUENCE_TAG == tag) or (NORMAL_TAG == tag)); max = object - + (ARRAY_TAG == tag - ? (sizeofArrayNoHeader (s, getArrayLength (object), - bytesNonObjptrs, numObjptrs)) + + (SEQUENCE_TAG == tag + ? (sizeofSequenceNoMetaData (s, getSequenceLength (object), + bytesNonObjptrs, numObjptrs)) : (bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE))); // Compute the hash. hash = (GC_hash)header; @@ -266,10 +266,10 @@ size_t amount; amount = (size_t)(max - object); - if (ARRAY_TAG == tag) - amount += GC_ARRAY_HEADER_SIZE; + if (SEQUENCE_TAG == tag) + amount += GC_SEQUENCE_METADATA_SIZE; else - amount += GC_NORMAL_HEADER_SIZE; + amount += GC_NORMAL_METADATA_SIZE; s->lastMajorStatistics.bytesHashConsed += amount; } done: diff -Nru mlton-20130715/runtime/gc/hash-cons.h mlton-20210117+dfsg/runtime/gc/hash-cons.h --- mlton-20130715/runtime/gc/hash-cons.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/hash-cons.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/heap.c mlton-20210117+dfsg/runtime/gc/heap.c --- mlton-20130715/runtime/gc/heap.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/heap.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2005-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/heap.h mlton-20210117+dfsg/runtime/gc/heap.h --- mlton-20130715/runtime/gc/heap.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/heap.h 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -37,15 +37,15 @@ #if (defined (MLTON_GC_INTERNAL_FUNCS)) -static inline bool isPointerInOldGen (GC_state s, pointer p); -static inline bool isPointerInNursery (GC_state s, pointer p); -#if ASSERT -static inline bool isObjptrInOldGen (GC_state s, objptr op); -#endif -static inline bool isObjptrInNursery (GC_state s, objptr op); -#if ASSERT static inline bool isObjptrInFromSpace (GC_state s, objptr op); -#endif +static inline bool isObjptrInHeap (GC_state s, objptr op); +static inline bool isObjptrInNursery (GC_state s, objptr op); +static inline bool isObjptrInOldGen (GC_state s, objptr op); +static inline bool isPointerInFromSpace (GC_state s, pointer p); +static inline bool isPointerInHeap (GC_state s, pointer p); +static inline bool isPointerInNursery (GC_state s, pointer p); +static inline bool isPointerInOldGen (GC_state s, pointer p); + static inline bool hasHeapBytesFree (GC_state s, size_t oldGen, size_t nursery); static inline bool isHeapInit (GC_heap h); diff -Nru mlton-20130715/runtime/gc/heap_predicates.c mlton-20210117+dfsg/runtime/gc/heap_predicates.c --- mlton-20130715/runtime/gc/heap_predicates.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/heap_predicates.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,23 +1,23 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2017,2019-2020 Matthew Fluet. * Copyright (C) 2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ bool isPointerInOldGen (GC_state s, pointer p) { return (not (isPointer (p)) or (s->heap.start <= p - and p < s->heap.start + s->heap.oldGenSize)); + and p <= s->heap.start + s->heap.oldGenSize)); } bool isPointerInNursery (GC_state s, pointer p) { return (not (isPointer (p)) - or (s->heap.nursery <= p and p < s->frontier)); + or (s->heap.nursery <= p + and p <= s->frontier)); } -#if ASSERT bool isObjptrInOldGen (GC_state s, objptr op) { pointer p; if (not (isObjptr(op))) @@ -25,7 +25,6 @@ p = objptrToPointer (op, s->heap.start); return isPointerInOldGen (s, p); } -#endif bool isObjptrInNursery (GC_state s, objptr op) { pointer p; @@ -35,12 +34,23 @@ return isPointerInNursery (s, p); } -#if ASSERT +bool isPointerInFromSpace (GC_state s, pointer p) { + return (isPointerInOldGen (s, p) + or isPointerInNursery (s, p)); +} + bool isObjptrInFromSpace (GC_state s, objptr op) { return (isObjptrInOldGen (s, op) or isObjptrInNursery (s, op)); } -#endif + +bool isPointerInHeap (GC_state s, pointer p) { + return isPointerInFromSpace(s, p); +} + +bool isObjptrInHeap (GC_state s, objptr op) { + return isObjptrInFromSpace(s, op); +} bool hasHeapBytesFree (GC_state s, size_t oldGen, size_t nursery) { size_t total; diff -Nru mlton-20130715/runtime/gc/init.c mlton-20210117+dfsg/runtime/gc/init.c --- mlton-20130715/runtime/gc/init.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/init.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2009,2012 Matthew Fluet. +/* Copyright (C) 2009,2012,2015,2017,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -71,11 +71,11 @@ /* GC_init */ /* ---------------------------------------------------------------- */ -int processAtMLton (GC_state s, int argc, char **argv, +int processAtMLton (GC_state s, int start, int argc, char **argv, char **worldFile) { int i; - i = 1; + i = start; while (s->controls.mayProcessAtMLton and i < argc and (0 == strcmp (argv [i], "@MLton"))) { @@ -92,21 +92,21 @@ arg = argv[i]; if (0 == strcmp (arg, "copy-generational-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton copy-generational-ratio missing argument."); s->controls.ratios.copyGenerational = stringToFloat (argv[i++]); unless (1.0 < s->controls.ratios.copyGenerational) die ("@MLton copy-generational-ratio argument must be greater than 1.0."); } else if (0 == strcmp (arg, "copy-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton copy-ratio missing argument."); s->controls.ratios.copy = stringToFloat (argv[i++]); unless (1.0 < s->controls.ratios.copy) die ("@MLton copy-ratio argument must be greater than 1.0."); } else if (0 == strcmp (arg, "fixed-heap")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton fixed-heap missing argument."); s->controls.fixedHeap = align (stringToBytes (argv[i++]), 2 * s->sysvals.pageSize); @@ -116,16 +116,25 @@ } else if (0 == strcmp (arg, "gc-summary")) { i++; s->controls.summary = TRUE; + } else if (0 == strcmp (arg, "gc-summary-file")) { + i++; + if (i == argc || (0 == strcmp (argv[i], "--"))) + die ("@MLton gc-summary-file missing argument."); + s->controls.summary = TRUE; + s->controls.summaryFile = fopen(argv[i++], "w"); + if (s->controls.summaryFile == NULL) { + die ("Invalid @MLton gc-summary-file %s (%s).", argv[i-1], strerror(errno)); + } } else if (0 == strcmp (arg, "grow-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton grow-ratio missing argument."); s->controls.ratios.grow = stringToFloat (argv[i++]); unless (1.0 < s->controls.ratios.grow) die ("@MLton grow-ratio argument must be greater than 1.0."); } else if (0 == strcmp (arg, "hash-cons")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton hash-cons missing argument."); s->controls.ratios.hashCons = stringToFloat (argv[i++]); unless (0.0 <= s->controls.ratios.hashCons @@ -133,7 +142,7 @@ die ("@MLton hash-cons argument must be between 0.0 and 1.0."); } else if (0 == strcmp (arg, "live-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton live-ratio missing argument."); s->controls.ratios.live = stringToFloat (argv[i++]); unless (1.0 < s->controls.ratios.live) @@ -143,32 +152,32 @@ die ("May not load world."); i++; s->amOriginal = FALSE; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton load-world missing argument."); *worldFile = argv[i++]; } else if (0 == strcmp (arg, "mark-compact-generational-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton mark-compact-generational-ratio missing argument."); s->controls.ratios.markCompactGenerational = stringToFloat (argv[i++]); unless (1.0 < s->controls.ratios.markCompactGenerational) die ("@MLton mark-compact-generational-ratio argument must be greater than 1.0."); } else if (0 == strcmp (arg, "mark-compact-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton mark-compact-ratio missing argument."); s->controls.ratios.markCompact = stringToFloat (argv[i++]); unless (1.0 < s->controls.ratios.markCompact) die ("@MLton mark-compact-ratio argument must be greater than 1.0."); } else if (0 == strcmp (arg, "max-heap")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton max-heap missing argument."); s->controls.maxHeap = align (stringToBytes (argv[i++]), 2 * s->sysvals.pageSize); } else if (0 == strcmp (arg, "may-page-heap")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton may-page-heap missing argument."); s->controls.mayPageHeap = stringToBool (argv[i++]); } else if (0 == strcmp (arg, "no-load-world")) { @@ -176,14 +185,14 @@ s->controls.mayLoadWorld = FALSE; } else if (0 == strcmp (arg, "nursery-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton nursery-ratio missing argument."); s->controls.ratios.nursery = stringToFloat (argv[i++]); unless (1.0 < s->controls.ratios.nursery) die ("@MLton nursery-ratio argument must be greater than 1.0."); } else if (0 == strcmp (arg, "ram-slop")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton ram-slop missing argument."); s->controls.ratios.ramSlop = stringToFloat (argv[i++]); } else if (0 == strcmp (arg, "show-sources")) { @@ -194,28 +203,28 @@ s->controls.mayProcessAtMLton = FALSE; } else if (0 == strcmp (arg, "stack-current-grow-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton stack-current-grow-ratio missing argument."); s->controls.ratios.stackCurrentGrow = stringToFloat (argv[i++]); unless (1.0 < s->controls.ratios.stackCurrentGrow) die ("@MLton stack-current-grow-ratio argument must greater than 1.0."); } else if (0 == strcmp (arg, "stack-current-max-reserved-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton stack-current-max-reserved-ratio missing argument."); s->controls.ratios.stackCurrentMaxReserved = stringToFloat (argv[i++]); unless (1.0 < s->controls.ratios.stackCurrentMaxReserved) die ("@MLton stack-current-max-reserved-ratio argument must greater than 1.0."); } else if (0 == strcmp (arg, "stack-current-permit-reserved-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton stack-current-permit-reserved-ratio missing argument."); s->controls.ratios.stackCurrentPermitReserved = stringToFloat (argv[i++]); unless (1.0 < s->controls.ratios.stackCurrentPermitReserved) die ("@MLton stack-current-permit-reserved-ratio argument must greater than 1.0."); } else if (0 == strcmp (arg, "stack-current-shrink-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton stack-current-shrink-ratio missing argument."); s->controls.ratios.stackCurrentShrink = stringToFloat (argv[i++]); unless (0.0 <= s->controls.ratios.stackCurrentShrink @@ -223,14 +232,14 @@ die ("@MLton stack-current-shrink-ratio argument must be between 0.0 and 1.0."); } else if (0 == strcmp (arg, "stack-max-reserved-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton stack-max-reserved-ratio missing argument."); s->controls.ratios.stackMaxReserved = stringToFloat (argv[i++]); unless (1.0 < s->controls.ratios.stackMaxReserved) die ("@MLton stack-max-reserved-ratio argument must greater than 1.0."); } else if (0 == strcmp (arg, "stack-shrink-ratio")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton stack-shrink-ratio missing argument."); s->controls.ratios.stackShrink = stringToFloat (argv[i++]); unless (0.0 <= s->controls.ratios.stackShrink @@ -238,7 +247,7 @@ die ("@MLton stack-shrink-ratio argument must be between 0.0 and 1.0."); } else if (0 == strcmp (arg, "use-mmap")) { i++; - if (i == argc) + if (i == argc || 0 == strcmp (argv[i], "--")) die ("@MLton use-mmap missing argument."); GC_setCygwinUseMmap (stringToBool (argv[i++])); } else if (0 == strcmp (arg, "--")) { @@ -274,7 +283,7 @@ s->controls.mayPageHeap = FALSE; s->controls.mayProcessAtMLton = TRUE; s->controls.messages = FALSE; - s->controls.oldGenArraySize = 0x100000; + s->controls.oldGenSequenceSize = 0x100000; s->controls.ratios.copy = 4.0f; s->controls.ratios.copyGenerational = 4.0f; s->controls.ratios.grow = 8.0f; @@ -291,6 +300,7 @@ s->controls.ratios.stackMaxReserved = 8.0f; s->controls.ratios.stackShrink = 0.5f; s->controls.summary = FALSE; + s->controls.summaryFile = stderr; s->cumulativeStatistics.bytesAllocated = 0; s->cumulativeStatistics.bytesCopied = 0; s->cumulativeStatistics.bytesCopiedMinor = 0; @@ -337,8 +347,8 @@ unless (isAligned (s->sysvals.pageSize, CARD_SIZE)) die ("Page size must be a multiple of card size."); - processAtMLton (s, s->atMLtonsLength, s->atMLtons, &worldFile); - res = processAtMLton (s, argc, argv, &worldFile); + processAtMLton (s, 0, s->atMLtonsLength, s->atMLtons, &worldFile); + res = processAtMLton (s, 1, argc, argv, &worldFile); if (s->controls.fixedHeap > 0 and s->controls.maxHeap > 0) die ("Cannot use both fixed-heap and max-heap."); unless (s->controls.ratios.markCompact <= s->controls.ratios.copy @@ -364,11 +374,11 @@ 100.0 * ((double)ram / (double)(s->sysvals.physMem))); if (DEBUG_SOURCES or DEBUG_PROFILE) { uint32_t i; - for (i = 0; i < s->sourceMaps.frameSourcesLength; i++) { + for (i = 0; i < s->frameInfosLength; i++) { uint32_t j; - uint32_t *sourceSeq; + const uint32_t *sourceSeq; fprintf (stderr, "%"PRIu32"\n", i); - sourceSeq = s->sourceMaps.sourceSeqs[s->sourceMaps.frameSources[i]]; + sourceSeq = s->sourceMaps.sourceSeqs[s->frameInfos[i].sourceSeqIndex]; for (j = 1; j <= sourceSeq[0]; j++) fprintf (stderr, "\t%s\n", s->sourceMaps.sourceNames[ @@ -390,8 +400,11 @@ assert (invariantForMutator (s, TRUE, FALSE)); } else { loadWorldFromFileName (s, worldFile); - if (s->profiling.isOn and s->profiling.stack) - foreachStackFrame (s, enterFrameForProfiling); + if (s->profiling.isOn and s->profiling.stack) { + struct GC_foreachStackFrameClosure enterFrameForProfilingClosure = + {.fun = enterFrameForProfiling, .env = NULL}; + foreachStackFrame (s, &enterFrameForProfilingClosure); + } assert (invariantForMutator (s, TRUE, TRUE)); } s->amInGC = FALSE; diff -Nru mlton-20130715/runtime/gc/init.h mlton-20210117+dfsg/runtime/gc/init.h --- mlton-20130715/runtime/gc/init.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/init.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,15 @@ -/* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2015 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #if (defined (MLTON_GC_INTERNAL_FUNCS)) -static int processAtMLton (GC_state s, int argc, +static int processAtMLton (GC_state s, int start, int argc, char **argv, char **worldFile); #endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ diff -Nru mlton-20130715/runtime/gc/init-world.c mlton-20210117+dfsg/runtime/gc/init-world.c --- mlton-20130715/runtime/gc/init-world.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/init-world.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2011-2012 Matthew Fluet. +/* Copyright (C) 2011-2012,2014,2016,2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -11,136 +11,19 @@ /* Initialization */ /* ---------------------------------------------------------------- */ -size_t sizeofIntInfFromString (GC_state s, const char *str) { - size_t slen = strlen (str); - - /* A slight overestimate. */ - double bytesPerChar = 0.415241011861 /* = ((log(10.0) / log(2.0)) / 8.0) */ ; - double bytes = ceil((double)slen * bytesPerChar); - return align (GC_ARRAY_HEADER_SIZE - + sizeof(mp_limb_t) // for the sign - + align((size_t)bytes, sizeof(mp_limb_t)), - s->alignment); -} - size_t sizeofInitialBytesLive (GC_state s) { - uint32_t i; - size_t dataBytes; size_t total; total = 0; - for (i = 0; i < s->intInfInitsLength; ++i) { - total += sizeofIntInfFromString (s, s->intInfInits[i].mlstr); - } - for (i = 0; i < s->vectorInitsLength; ++i) { - dataBytes = - s->vectorInits[i].bytesPerElement - * s->vectorInits[i].numElements; - total += align (GC_ARRAY_HEADER_SIZE - + ((dataBytes < OBJPTR_SIZE) - ? OBJPTR_SIZE - : dataBytes), - s->alignment); - } + total += s->staticHeaps.dynamic.size; + total += sizeofStackWithMetaData (s, sizeofStackInitialReserved (s)) + sizeofThread (s); return total; } -void initIntInfs (GC_state s) { - struct GC_intInfInit *inits; - uint32_t i; - const char *str; - size_t bytes; - bool neg; - __mpz_struct resmpz; - LOCAL_USED_FOR_ASSERT int ans; - - assert (isFrontierAligned (s, s->frontier)); - for (i = 0; i < s->intInfInitsLength; i++) { - inits = &(s->intInfInits[i]); - assert (inits->globalIndex < s->globalsLength); - str = inits->mlstr; - bytes = sizeofIntInfFromString (s, str); - neg = *str == '~'; - if (neg) - str++; - initIntInfRes (s, &resmpz, bytes); - ans = mpz_set_str (&resmpz, str, 10); - assert (ans == 0); - if (neg) - resmpz._mp_size = - resmpz._mp_size; - s->globals[inits->globalIndex] = finiIntInfRes (s, &resmpz, bytes); - } - assert (isFrontierAligned (s, s->frontier)); -} - -void initVectors (GC_state s) { - struct GC_vectorInit *inits; - pointer frontier; - uint32_t i; - - assert (isFrontierAligned (s, s->frontier)); - inits = s->vectorInits; - frontier = s->frontier; - for (i = 0; i < s->vectorInitsLength; i++) { - size_t bytesPerElement; - size_t dataBytes; - size_t objectSize; - uint32_t typeIndex; - - bytesPerElement = inits[i].bytesPerElement; - dataBytes = bytesPerElement * inits[i].numElements; - objectSize = align (GC_ARRAY_HEADER_SIZE - + ((dataBytes < OBJPTR_SIZE) - ? OBJPTR_SIZE - : dataBytes), - s->alignment); - assert (objectSize <= (size_t)(s->heap.start + s->heap.size - frontier)); - *((GC_arrayCounter*)(frontier)) = 0; - frontier = frontier + GC_ARRAY_COUNTER_SIZE; - *((GC_arrayLength*)(frontier)) = inits[i].numElements; - frontier = frontier + GC_ARRAY_LENGTH_SIZE; - switch (bytesPerElement) { - case 1: - typeIndex = WORD8_VECTOR_TYPE_INDEX; - break; - case 2: - typeIndex = WORD16_VECTOR_TYPE_INDEX; - break; - case 4: - typeIndex = WORD32_VECTOR_TYPE_INDEX; - break; - case 8: - typeIndex = WORD64_VECTOR_TYPE_INDEX; - break; - default: - die ("unknown bytes per element in vectorInit: %"PRIuMAX"", - (uintmax_t)bytesPerElement); - } - *((GC_header*)(frontier)) = buildHeaderFromTypeIndex (typeIndex); - frontier = frontier + GC_HEADER_SIZE; - s->globals[inits[i].globalIndex] = pointerToObjptr(frontier, s->heap.start); - if (DEBUG_DETAILED) - fprintf (stderr, "allocated vector at "FMTPTR"\n", - (uintptr_t)(s->globals[inits[i].globalIndex])); - memcpy (frontier, inits[i].bytes, dataBytes); - frontier += objectSize - GC_ARRAY_HEADER_SIZE; - } - if (DEBUG_DETAILED) - fprintf (stderr, "frontier after string allocation is "FMTPTR"\n", - (uintptr_t)frontier); - GC_profileAllocInc (s, (size_t)(frontier - s->frontier)); - s->cumulativeStatistics.bytesAllocated += (size_t)(frontier - s->frontier); - assert (isFrontierAligned (s, frontier)); - s->frontier = frontier; -} - void initWorld (GC_state s) { - uint32_t i; pointer start; GC_thread thread; - for (i = 0; i < s->globalsLength; ++i) - s->globals[i] = BOGUS_OBJPTR; s->lastMajorStatistics.bytesLive = sizeofInitialBytesLive (s); createHeap (s, &s->heap, sizeofHeapDesired (s, s->lastMajorStatistics.bytesLive, 0), @@ -150,8 +33,9 @@ s->frontier = start; s->limitPlusSlop = s->heap.start + s->heap.size; s->limit = s->limitPlusSlop - GC_HEAP_LIMIT_SLOP; - initIntInfs (s); - initVectors (s); + GC_memcpy (s->staticHeaps.dynamic.start, start, s->staticHeaps.dynamic.size); + s->frontier = start + s->staticHeaps.dynamic.size; + translateHeap (s, s->staticHeaps.dynamic.start, start, s->staticHeaps.dynamic.size); assert ((size_t)(s->frontier - start) <= s->lastMajorStatistics.bytesLive); s->heap.oldGenSize = (size_t)(s->frontier - s->heap.start); setGCStateCurrentHeap (s, 0, 0); diff -Nru mlton-20130715/runtime/gc/init-world.h mlton-20210117+dfsg/runtime/gc/init-world.h --- mlton-20130715/runtime/gc/init-world.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/init-world.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,45 +1,15 @@ -/* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2014,2020 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ -#if (defined (MLTON_GC_INTERNAL_TYPES)) - -/* GC_init uses the array of struct intInfInits in s at program start - * to allocate intInfs. - * The globalIndex'th entry of the globals array in s is set to the - * IntInf.int whose value corresponds to the mlstr string. - * - * The strings pointed to by the mlstr fields consist of - * an optional ~ - * one of [1-9] - * zero or more of [0-9] - * a trailing EOS - */ -struct GC_intInfInit { - uint32_t globalIndex; - const char *mlstr; -}; - -/* GC_init allocates a collection of arrays/vectors in the heap. */ -struct GC_vectorInit { - pointer bytes; - size_t bytesPerElement; - uint32_t globalIndex; - GC_arrayLength numElements; -}; - -#endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ - #if (defined (MLTON_GC_INTERNAL_FUNCS)) -static inline size_t sizeofIntInfFromString (GC_state s, const char *str); static inline size_t sizeofInitialBytesLive (GC_state s); -static void initIntInfs (GC_state s); -static void initVectors (GC_state s); static void initWorld (GC_state s); #endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ diff -Nru mlton-20130715/runtime/gc/int-inf.c mlton-20210117+dfsg/runtime/gc/int-inf.c --- mlton-20130715/runtime/gc/int-inf.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/int-inf.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2014 Matthew Fluet. * Copyright (C) 1999-2005, 2007-2008 Henry Cejtin, Matthew Fluet, * Suresh Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -14,10 +14,6 @@ return (arg & 1); } -static inline bool isEitherSmall (objptr arg1, objptr arg2) { - return ((arg1 | arg2) & (objptr)1); -} - static inline bool areSmall (objptr arg1, objptr arg2) { return ((arg1 & arg2) & (objptr)1); } @@ -59,21 +55,31 @@ const objptr highBitMask = (objptr)1 << (CHAR_BIT * OBJPTR_SIZE - 1); bool neg = (arg & highBitMask) != (objptr)0; if (neg) { - res->_mp_size = - LIMBS_PER_OBJPTR; arg = -((arg >> 1) | highBitMask); } else { - res->_mp_size = LIMBS_PER_OBJPTR; arg = (arg >> 1); } - for (int i = 0; i < LIMBS_PER_OBJPTR; i++) { - space[i] = (mp_limb_t)arg; - // The conditional below is to quell a gcc warning: - // right shift count >= width of type - // When 1 == LIMBS_PER_OBJPTR, the for loop will not continue, - // so the shift doesn't matter. - arg = arg >> (1 == LIMBS_PER_OBJPTR ? - 0 : CHAR_BIT * sizeof(mp_limb_t)); + int size; + if (sizeof(objptr) <= sizeof(mp_limb_t)) { + space[0] = (mp_limb_t)arg; + size = 1; + } else { + size = 0; + while (arg != 0) { + space[size] = (mp_limb_t)arg; + // The conditional below is to quell a gcc warning: + // right shift count >= width of type + // When (sizeof(objptr) <= sizeof(mp_limb_t)), + // this branch is unreachable, + // so the shift doesn't matter. + arg = arg >> (sizeof(objptr) <= sizeof(mp_limb_t) ? + 0 : CHAR_BIT * sizeof(mp_limb_t)); + size++; + } } + if (neg) + size = - size; + res->_mp_size = size; } } else { bp = toBignum (s, arg); @@ -123,7 +129,7 @@ * If the answer fits in a fixnum, we return that, with the frontier * rolled back. * If the answer doesn't need all of the space allocated, we adjust - * the array size and roll the frontier slightly back. + * the sequence size and roll the frontier slightly back. */ objptr finiIntInfRes (GC_state s, __mpz_struct *res, size_t bytes) { GC_intInf bp; @@ -150,204 +156,144 @@ } else bp->obj.isneg = FALSE; assert (size >= 0); - if (size <= 1) { - uintmax_t val, ans; - - if (size == 0) - val = 0; - else - val = bp->obj.limbs[0]; - if (bp->obj.isneg) { - /* - * We only fit if val in [1, 2^(CHAR_BIT * OBJPTR_SIZE - 2)]. - */ - ans = - val; - val = val - 1; - } else - /* - * We only fit if val in [0, 2^(CHAR_BIT * OBJPTR_SIZE - 2) - 1]. - */ - ans = val; - if (val < (uintmax_t)1<<(CHAR_BIT * OBJPTR_SIZE - 2)) { - return (objptr)(ans<<1 | 1); + if (size == 0) + return (objptr)1; + if (size <= LIMBS_PER_OBJPTR) { + if (sizeof(objptr) <= sizeof(mp_limb_t)) { + objptr ans; + mp_limb_t val = bp->obj.limbs[0]; + if (bp->obj.isneg) { + /* + * We only fit if val in [1, 2^(CHAR_BIT * OBJPTR_SIZE - 2)]. + */ + ans = (objptr)(- val); + val = val - 1; + } else + /* + * We only fit if val in [0, 2^(CHAR_BIT * OBJPTR_SIZE - 2) - 1]. + */ + ans = (objptr)val; + // The conditional below is to quell a gcc warning: + // right shift count >= width of type + // When (sizeof(objptr) > sizeof(mp_limb_t)), + // this branch is unreachable, + // so the shift doesn't matter. + if (val < (mp_limb_t)1<<(sizeof(objptr) > sizeof(mp_limb_t) ? + 0 : CHAR_BIT * OBJPTR_SIZE - 2)) + return (ans<<1 | 1); + } else { + objptr ans, val; + val = (objptr)(bp->obj.limbs[0]); + for (int i = 1; i < size; i++) { + // The conditional below is to quell a gcc warning: + // left shift count >= width of type + // When (sizeof(objptr) <= sizeof(mp_limb_t)), + // this branch is unreachable, + // so the shift doesn't matter. + val = val << (sizeof(objptr) <= sizeof(mp_limb_t) ? + 0 : CHAR_BIT * sizeof(mp_limb_t)); + val = val & (objptr)(bp->obj.limbs[i]); + } + if (bp->obj.isneg) { + /* + * We only fit if val in [1, 2^(CHAR_BIT * OBJPTR_SIZE - 2)]. + */ + ans = - val; + val = val - 1; + } else + /* + * We only fit if val in [0, 2^(CHAR_BIT * OBJPTR_SIZE - 2) - 1]. + */ + ans = val; + if (val < (objptr)1<<(CHAR_BIT * OBJPTR_SIZE - 2)) + return (ans<<1 | 1); } } setFrontier (s, (pointer)(&bp->obj.limbs[size]), bytes); - bp->counter = (GC_arrayCounter)0; - bp->length = (GC_arrayLength)(size + 1); /* +1 for isneg field */ + bp->counter = (GC_sequenceCounter)0; + bp->length = (GC_sequenceLength)(size + 1); /* +1 for isneg field */ bp->header = GC_INTINF_HEADER; return pointerToObjptr ((pointer)&bp->obj, s->heap.start); } -static inline objptr binary (objptr lhs, objptr rhs, size_t bytes, - void(*binop)(__mpz_struct *resmpz, - const __mpz_struct *lhsspace, - const __mpz_struct *rhsspace)) { +objptr IntInf_binop (GC_state s, + objptr lhs, objptr rhs, size_t bytes, + void(*binop)(__mpz_struct *resmpz, + const __mpz_struct *lhsspace, + const __mpz_struct *rhsspace)) { __mpz_struct lhsmpz, rhsmpz, resmpz; mp_limb_t lhsspace[LIMBS_PER_OBJPTR + 1], rhsspace[LIMBS_PER_OBJPTR + 1]; - initIntInfRes (&gcState, &resmpz, bytes); - fillIntInfArg (&gcState, lhs, &lhsmpz, lhsspace); - fillIntInfArg (&gcState, rhs, &rhsmpz, rhsspace); - binop (&resmpz, &lhsmpz, &rhsmpz); - return finiIntInfRes (&gcState, &resmpz, bytes); -} - -objptr IntInf_add (objptr lhs, objptr rhs, size_t bytes) { - if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_add ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", - lhs, rhs, (uintmax_t)bytes); - return binary (lhs, rhs, bytes, &mpz_add); -} - -objptr IntInf_andb (objptr lhs, objptr rhs, size_t bytes) { - if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_andb ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", - lhs, rhs, (uintmax_t)bytes); - return binary (lhs, rhs, bytes, &mpz_and); -} - -objptr IntInf_gcd (objptr lhs, objptr rhs, size_t bytes) { - if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_gcd ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", - lhs, rhs, (uintmax_t)bytes); - return binary (lhs, rhs, bytes, &mpz_gcd); -} - -objptr IntInf_mul (objptr lhs, objptr rhs, size_t bytes) { - if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_mul ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", - lhs, rhs, (uintmax_t)bytes); - return binary (lhs, rhs, bytes, &mpz_mul); -} - -objptr IntInf_quot (objptr lhs, objptr rhs, size_t bytes) { - if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_quot ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", - lhs, rhs, (uintmax_t)bytes); - return binary (lhs, rhs, bytes, &mpz_tdiv_q); -} - -objptr IntInf_orb (objptr lhs, objptr rhs, size_t bytes) { - if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_orb ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", - lhs, rhs, (uintmax_t)bytes); - return binary (lhs, rhs, bytes, &mpz_ior); -} - -objptr IntInf_rem (objptr lhs, objptr rhs, size_t bytes) { - if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_quot ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", - lhs, rhs, (uintmax_t)bytes); - return binary (lhs, rhs, bytes, &mpz_tdiv_r); -} - -objptr IntInf_sub (objptr lhs, objptr rhs, size_t bytes) { - if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_sub ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", - lhs, rhs, (uintmax_t)bytes); - return binary (lhs, rhs, bytes, &mpz_sub); -} - -objptr IntInf_xorb (objptr lhs, objptr rhs, size_t bytes) { if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_xorb ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", + fprintf (stderr, "IntInf_binop ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n", lhs, rhs, (uintmax_t)bytes); - return binary (lhs, rhs, bytes, &mpz_xor); + initIntInfRes (s, &resmpz, bytes); + fillIntInfArg (s, lhs, &lhsmpz, lhsspace); + fillIntInfArg (s, rhs, &rhsmpz, rhsspace); + binop (&resmpz, &lhsmpz, &rhsmpz); + return finiIntInfRes (s, &resmpz, bytes); } -static objptr unary (objptr arg, size_t bytes, - void(*unop)(__mpz_struct *resmpz, - const __mpz_struct *argspace)) { +objptr IntInf_unop (GC_state s, + objptr arg, size_t bytes, + void(*unop)(__mpz_struct *resmpz, + const __mpz_struct *argspace)) { __mpz_struct argmpz, resmpz; mp_limb_t argspace[LIMBS_PER_OBJPTR + 1]; - initIntInfRes (&gcState, &resmpz, bytes); - fillIntInfArg (&gcState, arg, &argmpz, argspace); - unop (&resmpz, &argmpz); - return finiIntInfRes (&gcState, &resmpz, bytes); -} - -objptr IntInf_neg (objptr arg, size_t bytes) { if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_neg ("FMTOBJPTR", %"PRIuMAX")\n", + fprintf (stderr, "IntInf_unop ("FMTOBJPTR", %"PRIuMAX")\n", arg, (uintmax_t)bytes); - return unary (arg, bytes, &mpz_neg); -} -objptr IntInf_notb (objptr arg, size_t bytes) { - if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_notb ("FMTOBJPTR", %"PRIuMAX")\n", - arg, (uintmax_t)bytes); - return unary (arg, bytes, &mpz_com); + initIntInfRes (s, &resmpz, bytes); + fillIntInfArg (s, arg, &argmpz, argspace); + unop (&resmpz, &argmpz); + return finiIntInfRes (s, &resmpz, bytes); } -static objptr shary (objptr arg, Word32_t shift, size_t bytes, - void(*shop)(__mpz_struct *resmpz, - const __mpz_struct *argspace, - unsigned long shift)) +objptr IntInf_shop (GC_state s, + objptr arg, Word32_t shift, size_t bytes, + void(*shop)(__mpz_struct *resmpz, + const __mpz_struct *argspace, + unsigned long shift)) { __mpz_struct argmpz, resmpz; mp_limb_t argspace[LIMBS_PER_OBJPTR + 1]; - initIntInfRes (&gcState, &resmpz, bytes); - fillIntInfArg (&gcState, arg, &argmpz, argspace); - shop (&resmpz, &argmpz, (unsigned long)shift); - return finiIntInfRes (&gcState, &resmpz, bytes); -} - -objptr IntInf_arshift (objptr arg, Word32_t shift, size_t bytes) { if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_arshift ("FMTOBJPTR", %"PRIu32", %"PRIuMAX")\n", + fprintf (stderr, "IntInf_shop ("FMTOBJPTR", %"PRIu32", %"PRIuMAX")\n", arg, shift, (uintmax_t)bytes); - return shary (arg, shift, bytes, &mpz_fdiv_q_2exp); -} -objptr IntInf_lshift (objptr arg, Word32_t shift, size_t bytes) { - if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_lshift ("FMTOBJPTR", %"PRIu32", %"PRIuMAX")\n", - arg, shift, (uintmax_t)bytes); - return shary(arg, shift, bytes, &mpz_mul_2exp); + initIntInfRes (s, &resmpz, bytes); + fillIntInfArg (s, arg, &argmpz, argspace); + shop (&resmpz, &argmpz, (unsigned long)shift); + return finiIntInfRes (s, &resmpz, bytes); } -/* - * Return an integer which compares to 0 as the two intInf args compare - * to each other. - */ -Int32_t IntInf_compare (objptr lhs, objptr rhs) { +Int32_t IntInf_cmpop (GC_state s, objptr lhs, objptr rhs, + int(*cmpop)(const __mpz_struct *lhsspace, + const __mpz_struct *rhsspace)) +{ __mpz_struct lhsmpz, rhsmpz; mp_limb_t lhsspace[LIMBS_PER_OBJPTR + 1], rhsspace[LIMBS_PER_OBJPTR + 1]; int res; if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_compare ("FMTOBJPTR", "FMTOBJPTR")\n", + fprintf (stderr, "IntInf_cmpop ("FMTOBJPTR", "FMTOBJPTR")\n", lhs, rhs); - fillIntInfArg (&gcState, lhs, &lhsmpz, lhsspace); - fillIntInfArg (&gcState, rhs, &rhsmpz, rhsspace); - res = mpz_cmp (&lhsmpz, &rhsmpz); + fillIntInfArg (s, lhs, &lhsmpz, lhsspace); + fillIntInfArg (s, rhs, &rhsmpz, rhsspace); + res = cmpop (&lhsmpz, &rhsmpz); if (res < 0) return -1; if (res > 0) return 1; return 0; } -/* - * Check if two IntInf.int's are equal. - */ -Bool_t IntInf_equal (objptr lhs, objptr rhs) { - if (lhs == rhs) - return TRUE; - if (isEitherSmall (lhs, rhs)) - return FALSE; - else - return 0 == IntInf_compare (lhs, rhs); -} - -/* - * Convert an intInf to a string. - * Arg is an intInf, base is the base to use (2, 8, 10 or 16) and - * space is a string (mutable) which is large enough. - */ -objptr IntInf_toString (objptr arg, int32_t base, size_t bytes) { +objptr IntInf_strop (GC_state s, objptr arg, Int32_t base, size_t bytes, + char*(*strop)(char *str, + int base, + const __mpz_struct *argspace)) +{ GC_string8 sp; __mpz_struct argmpz; mp_limb_t argspace[LIMBS_PER_OBJPTR + 1]; @@ -355,27 +301,22 @@ size_t size; if (DEBUG_INT_INF) - fprintf (stderr, "IntInf_toString ("FMTOBJPTR", %"PRId32", %"PRIuMAX")\n", + fprintf (stderr, "IntInf_strop ("FMTOBJPTR", %"PRId32", %"PRIuMAX")\n", arg, base, (uintmax_t)bytes); assert (base == 2 || base == 8 || base == 10 || base == 16); - fillIntInfArg (&gcState, arg, &argmpz, argspace); - sp = (GC_string8)gcState.frontier; - str = mpz_get_str((void*)&sp->obj, base, &argmpz); + fillIntInfArg (s, arg, &argmpz, argspace); + assert (bytes <= (size_t)(s->limitPlusSlop - s->frontier)); + sp = (GC_string8)s->frontier; + str = strop ((void*)&sp->obj, -base, &argmpz); assert (str == (char*)&sp->obj); size = strlen(str); if (sp->obj.chars[0] == '-') sp->obj.chars[0] = '~'; - if (base > 0) - for (unsigned int i = 0; i < size; i++) { - char c = sp->obj.chars[i]; - if (('a' <= c) && (c <= 'z')) - sp->obj.chars[i] = (char)(c + ('A' - 'a')); - } - setFrontier (&gcState, (pointer)&sp->obj + size, bytes); - sp->counter = 0; - sp->length = size; + setFrontier (s, (pointer)&sp->obj + size, bytes); + sp->counter = (GC_sequenceCounter)0; + sp->length = (GC_sequenceLength)size; sp->header = GC_STRING8_HEADER; - return pointerToObjptr ((pointer)&sp->obj, gcState.heap.start); + return pointerToObjptr ((pointer)&sp->obj, s->heap.start); } /* diff -Nru mlton-20130715/runtime/gc/int-inf.h mlton-20210117+dfsg/runtime/gc/int-inf.h --- mlton-20130715/runtime/gc/int-inf.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/int-inf.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2014 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -17,16 +17,16 @@ mp_limb_t limbs[1]; }; typedef struct GC_intInf { - GC_arrayCounter counter; - GC_arrayLength length; + GC_sequenceCounter counter; + GC_sequenceLength length; GC_header header; struct GC_intInf_obj obj; } __attribute__ ((packed)) *GC_intInf; COMPILE_TIME_ASSERT(GC_intInf__obj_packed, offsetof(struct GC_intInf, obj) == - sizeof(GC_arrayCounter) - + sizeof(GC_arrayLength) + sizeof(GC_sequenceCounter) + + sizeof(GC_sequenceLength) + sizeof(GC_header)); COMPILE_TIME_ASSERT(GC_intInf_obj__isneg_packed, offsetof(struct GC_intInf_obj, isneg) == @@ -47,9 +47,11 @@ CHAR_BIT * sizeof(mp_limb_t) == 64 ? \ GC_WORD64_VECTOR_HEADER : ( 0 ) ) ) -COMPILE_TIME_ASSERT(sizeof_mp_limb_t__compat__sizeof_objptr, - (sizeof(mp_limb_t) >= sizeof(objptr)) || - (sizeof(objptr) % sizeof(mp_limb_t) == 0)); +COMPILE_TIME_ASSERT(sizeof_mp_limb_t__compat__sizeof_objptr, + sizeof(objptr) <= sizeof(mp_limb_t) ? + sizeof(mp_limb_t) % sizeof(objptr) == 0 : + sizeof(objptr) % sizeof(mp_limb_t) == 0); + #define LIMBS_PER_OBJPTR ( \ sizeof(mp_limb_t) >= sizeof(objptr) ? \ 1 : (int)(sizeof(objptr) / sizeof(mp_limb_t))) @@ -64,21 +66,23 @@ #if (defined (MLTON_GC_INTERNAL_BASIS)) -PRIVATE objptr IntInf_add (objptr lhs, objptr rhs, size_t bytes); -PRIVATE objptr IntInf_andb (objptr lhs, objptr rhs, size_t bytes); -PRIVATE objptr IntInf_gcd (objptr lhs, objptr rhs, size_t bytes); -PRIVATE objptr IntInf_mul (objptr lhs, objptr rhs, size_t bytes); -PRIVATE objptr IntInf_quot (objptr lhs, objptr rhs, size_t bytes); -PRIVATE objptr IntInf_orb (objptr lhs, objptr rhs, size_t bytes); -PRIVATE objptr IntInf_rem (objptr lhs, objptr rhs, size_t bytes); -PRIVATE objptr IntInf_sub (objptr lhs, objptr rhs, size_t bytes); -PRIVATE objptr IntInf_xorb (objptr lhs, objptr rhs, size_t bytes); -PRIVATE objptr IntInf_neg (objptr arg, size_t bytes); -PRIVATE objptr IntInf_notb (objptr arg, size_t bytes); -PRIVATE objptr IntInf_arshift (objptr arg, Word32_t shift, size_t bytes); -PRIVATE objptr IntInf_lshift (objptr arg, Word32_t shift, size_t bytes); -PRIVATE Int32_t IntInf_compare (objptr lhs, objptr rhs); -PRIVATE Bool_t IntInf_equal (objptr lhs, objptr rhs); -PRIVATE objptr IntInf_toString (objptr arg, Int32_t base, size_t bytes); +PRIVATE objptr IntInf_binop (GC_state s, objptr lhs, objptr rhs, size_t bytes, + void(*binop)(__mpz_struct *resmpz, + const __mpz_struct *lhsspace, + const __mpz_struct *rhsspace)); +PRIVATE objptr IntInf_unop (GC_state s, objptr arg, size_t bytes, + void(*unop)(__mpz_struct *resmpz, + const __mpz_struct *argspace)); +PRIVATE objptr IntInf_shop (GC_state s, objptr arg, Word32_t shift, size_t bytes, + void(*shop)(__mpz_struct *resmpz, + const __mpz_struct *argspace, + unsigned long shift)); +PRIVATE Int32_t IntInf_cmpop (GC_state s, objptr lhs, objptr rhs, + int(*cmpop)(const __mpz_struct *lhsspace, + const __mpz_struct *rhsspace)); +PRIVATE objptr IntInf_strop (GC_state s, objptr arg, Int32_t base, size_t bytes, + char*(*strop)(char *str, + int base, + const __mpz_struct *argspace)); #endif /* (defined (MLTON_GC_INTERNAL_BASIS)) */ diff -Nru mlton-20130715/runtime/gc/invariant.c mlton-20210117+dfsg/runtime/gc/invariant.c --- mlton-20130715/runtime/gc/invariant.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/invariant.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,20 +1,25 @@ -/* Copyright (C) 2011-2012 Matthew Fluet. +/* Copyright (C) 2011-2012,2017,2019-2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #if ASSERT -void assertIsObjptrInFromSpace (GC_state s, objptr *opp) { - assert (isObjptrInFromSpace (s, *opp)); - unless (isObjptrInFromSpace (s, *opp)) +void assertIsObjptrInFromSpaceOrImmutableMutableOrRootStaticHeap (GC_state s, objptr *opp, + __attribute__((unused)) void *env) { + assert (isObjptrInFromSpace (s, *opp) + || isObjptrInImmutableMutableOrRootStaticHeap (s, *opp)); + unless (isObjptrInFromSpace (s, *opp) + || isObjptrInImmutableMutableOrRootStaticHeap (s, *opp)) { + displayGCState (s, stderr); die ("gc.c: assertIsObjptrInFromSpace " "opp = "FMTPTR" " "*opp = "FMTOBJPTR"\n", (uintptr_t)opp, *opp); + } /* The following checks that intergenerational pointers have the * appropriate card marked. Unfortunately, it doesn't work because * for stacks, the card containing the beginning of the stack is @@ -30,21 +35,26 @@ } } +void assertIsObjptrInImmutableMutableOrRootStaticHeap (GC_state s, objptr *opp, + __attribute__((unused)) void *env) { + assert (isObjptrInImmutableMutableOrRootStaticHeap (s, *opp)); +} + bool invariantForGC (GC_state s) { if (DEBUG) fprintf (stderr, "invariantForGC\n"); - /* Frame layouts */ - for (unsigned int i = 0; i < s->frameLayoutsLength; ++i) { - GC_frameLayout layout; + /* Frame sizes and offsets */ + for (GC_frameIndex frameIndex = 0; frameIndex < s->frameInfosLength; ++frameIndex) { + GC_frameInfo frameInfo; - layout = &(s->frameLayouts[i]); - if (layout->size > 0) { + frameInfo = &(s->frameInfos[frameIndex]); + if (frameInfo->size > 0) { GC_frameOffsets offsets; - assert (layout->size <= s->maxFrameSize); - offsets = layout->offsets; + assert (frameInfo->size <= s->maxFrameSize); + offsets = frameInfo->offsets; for (unsigned int j = 0; j < offsets[0]; ++j) - assert (offsets[j + 1] < layout->size); + assert (offsets[j + 1] < frameInfo->size); } } /* Generational */ @@ -72,18 +82,47 @@ } assert (s->secondaryHeap.start == NULL or s->heap.size == s->secondaryHeap.size); - /* Check that all pointers are into from space. */ - foreachGlobalObjptr (s, assertIsObjptrInFromSpace); + + struct GC_foreachObjptrClosure assertIsObjptrInImmutableMutableOrRootStaticHeapClosure = + {.fun = assertIsObjptrInImmutableMutableOrRootStaticHeap, .env = NULL}; + struct GC_foreachObjptrClosure assertIsObjptrInFromSpaceOrImmutableMutableOrRootStaticHeapClosure = + {.fun = assertIsObjptrInFromSpaceOrImmutableMutableOrRootStaticHeap, .env = NULL}; + + /* The immutable and mutable static heaps may only have pointers into static heaps. */ + if (DEBUG_DETAILED) + fprintf (stderr, "Checking immutable static heap.\n"); + foreachObjptrInStaticHeap (s, &s->staticHeaps.immutable, + &assertIsObjptrInImmutableMutableOrRootStaticHeapClosure, + FALSE); + if (DEBUG_DETAILED) + fprintf (stderr, "Checking mutable static heap.\n"); + foreachObjptrInStaticHeap (s, &s->staticHeaps.mutable, + &assertIsObjptrInImmutableMutableOrRootStaticHeapClosure, + FALSE); + /* The root static heap may have pointers into the runtime heap and static heaps. */ + if (DEBUG_DETAILED) + fprintf (stderr, "Checking root static heap.\n"); + foreachObjptrInStaticHeap (s, &s->staticHeaps.root, + &assertIsObjptrInFromSpaceOrImmutableMutableOrRootStaticHeapClosure, + FALSE); + /* Global objptrs may be into runtime heap. */ + if (DEBUG_DETAILED) + fprintf (stderr, "Checking global objptrs.\n"); + foreachGlobalObjptr (s, &assertIsObjptrInFromSpaceOrImmutableMutableOrRootStaticHeapClosure); + /* The runtime heap may have pointers into the runtime heap and static heaps. */ pointer back = s->heap.start + s->heap.oldGenSize; if (DEBUG_DETAILED) fprintf (stderr, "Checking old generation.\n"); foreachObjptrInRange (s, alignFrontier (s, s->heap.start), &back, - assertIsObjptrInFromSpace, FALSE); + &assertIsObjptrInFromSpaceOrImmutableMutableOrRootStaticHeapClosure, FALSE); if (DEBUG_DETAILED) fprintf (stderr, "Checking nursery.\n"); foreachObjptrInRange (s, s->heap.nursery, &s->frontier, - assertIsObjptrInFromSpace, FALSE); + &assertIsObjptrInFromSpaceOrImmutableMutableOrRootStaticHeapClosure, FALSE); + /* Current thread. */ + if (DEBUG_DETAILED) + fprintf (stderr, "Checking current thread/stack.\n"); GC_stack stack = getStackCurrent(s); assert (isStackReservedAligned (s, stack->reserved)); assert (s->stackBottom == getStackBottom (s, stack)); diff -Nru mlton-20130715/runtime/gc/invariant.h mlton-20210117+dfsg/runtime/gc/invariant.h --- mlton-20130715/runtime/gc/invariant.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/invariant.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,16 +1,17 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2019-2020 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #if (defined (MLTON_GC_INTERNAL_FUNCS)) #if ASSERT -static inline void assertIsObjptrInFromSpace (GC_state s, objptr *opp); +static inline void assertIsObjptrInFromSpaceOrImmutableMutableOrRootStaticHeap (GC_state s, objptr *opp, void *env); +static inline void assertIsObjptrInImmutableMutableOrRootStaticHeap (GC_state s, objptr *opp, void *env); static bool invariantForGC (GC_state s); #endif static inline bool invariantForMutatorFrontier (GC_state s); diff -Nru mlton-20130715/runtime/gc/major.h mlton-20210117+dfsg/runtime/gc/major.h --- mlton-20130715/runtime/gc/major.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/major.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/mark-compact.c mlton-20210117+dfsg/runtime/gc/mark-compact.c --- mlton-20130715/runtime/gc/mark-compact.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/mark-compact.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2010,2012 Matthew Fluet. +/* Copyright (C) 2010,2012,2016,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -45,13 +45,17 @@ } } -void threadInternalObjptr (GC_state s, objptr *opp) { +void threadInternalObjptr (GC_state s, objptr *opp, + __attribute__((unused)) void *env) { objptr opop; pointer p; GC_header *headerp; opop = pointerToObjptr ((pointer)opp, s->heap.start); p = objptrToPointer (*opp, s->heap.start); + if (not isPointerInHeap (s, p)) + return; + if (FALSE) fprintf (stderr, "threadInternal opp = "FMTPTR" p = "FMTPTR" header = "FMTHDR"\n", @@ -123,7 +127,7 @@ assert (GC_VALID_HEADER_MASK & header); assert (MARK_MASK & header); - size_t headerBytes, objectBytes; + size_t metaDataBytes, objectBytes; GC_objectTypeTag tag; uint16_t bytesNonObjptrs, numObjptrs; @@ -132,14 +136,14 @@ /* Compute the space taken by the header and object body. */ if ((NORMAL_TAG == tag) or (WEAK_TAG == tag)) { /* Fixed size object. */ - headerBytes = GC_NORMAL_HEADER_SIZE; + metaDataBytes = GC_NORMAL_METADATA_SIZE; objectBytes = bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE); skipFront = 0; skipGap = 0; - } else if (ARRAY_TAG == tag) { - headerBytes = GC_ARRAY_HEADER_SIZE; - objectBytes = sizeofArrayNoHeader (s, getArrayLength (p), - bytesNonObjptrs, numObjptrs); + } else if (SEQUENCE_TAG == tag) { + metaDataBytes = GC_SEQUENCE_METADATA_SIZE; + objectBytes = sizeofSequenceNoMetaData (s, getSequenceLength (p), + bytesNonObjptrs, numObjptrs); skipFront = 0; skipGap = 0; } else { /* Stack. */ @@ -148,7 +152,7 @@ GC_stack stack; assert (STACK_TAG == tag); - headerBytes = GC_STACK_HEADER_SIZE; + metaDataBytes = GC_STACK_METADATA_SIZE; stack = (GC_stack)p; current = currentStack == stack; @@ -158,36 +162,33 @@ skipFront = reservedOld - stack->used; skipGap = reservedOld - reservedNew; } - size = headerBytes + objectBytes; + size = metaDataBytes + objectBytes; if (DEBUG_MARK_COMPACT) fprintf (stderr, "threading "FMTPTR" of size %"PRIuMAX"\n", (uintptr_t)p, (uintmax_t)size); - if ((size_t)(front - endOfLastMarked) >= GC_ARRAY_HEADER_SIZE + OBJPTR_SIZE) { - pointer newArray = endOfLastMarked; - /* Compress all of the unmarked into one vector. We require - * (GC_ARRAY_HEADER_SIZE + OBJPTR_SIZE) space to be available - * because that is the smallest possible array. You cannot - * use GC_ARRAY_HEADER_SIZE because even very small (including - * zero-length) arrays require extra space for the forwarding - * pointer. If you did use GC_ARRAY_HEADER_SIZE, - * updateBackwardPointersAndSlideForMarkCompact would skip the - * extra space and be completely busted. + if ((size_t)(front - endOfLastMarked) >= GC_SEQUENCE_METADATA_SIZE) { + pointer newSequence = endOfLastMarked; + /* Compress all of the unmarked into one sequence. We require + * GC_SEQUENCE_METADATA_SIZE space to be available because that is + * the smallest possible sequence. */ if (DEBUG_MARK_COMPACT) fprintf (stderr, "compressing from "FMTPTR" to "FMTPTR" (length = %"PRIuMAX")\n", (uintptr_t)endOfLastMarked, (uintptr_t)front, (uintmax_t)(front - endOfLastMarked)); - *((GC_arrayCounter*)(newArray)) = 0; - newArray += GC_ARRAY_COUNTER_SIZE; - *((GC_arrayLength*)(newArray)) = - ((size_t)(front - endOfLastMarked)) - GC_ARRAY_HEADER_SIZE; - newArray += GC_ARRAY_LENGTH_SIZE; - *((GC_header*)(newArray)) = GC_WORD8_VECTOR_HEADER; + *((GC_sequenceCounter*)(newSequence)) = 0; + newSequence += GC_SEQUENCE_COUNTER_SIZE; + *((GC_sequenceLength*)(newSequence)) = + ((size_t)(front - endOfLastMarked)) - GC_SEQUENCE_METADATA_SIZE; + newSequence += GC_SEQUENCE_LENGTH_SIZE; + *((GC_header*)(newSequence)) = GC_WORD8_VECTOR_HEADER; } gap += skipGap; front += size + skipFront; endOfLastMarked = front; - foreachObjptrInObject (s, p, threadInternalObjptr, FALSE); + struct GC_foreachObjptrClosure threadInternalObjptrClosure = + {.fun = threadInternalObjptr, .env = NULL}; + foreachObjptrInObject (s, p, &threadInternalObjptrClosure, FALSE); goto updateObject; } else { /* It's not marked. */ @@ -201,6 +202,7 @@ objptr newObjptr; assert (not (GC_VALID_HEADER_MASK & header)); + assert (isPointerInHeap (s, (pointer)headerp)); /* It's a pointer. This object must be live. Fix all the forward * pointers to it, store its header, then thread its internal * pointers. @@ -259,7 +261,7 @@ assert (GC_VALID_HEADER_MASK & header); assert (MARK_MASK & header); - size_t headerBytes, objectBytes; + size_t metaDataBytes, objectBytes; GC_objectTypeTag tag; uint16_t bytesNonObjptrs, numObjptrs; @@ -268,14 +270,14 @@ /* Compute the space taken by the header and object body. */ if ((NORMAL_TAG == tag) or (WEAK_TAG == tag)) { /* Fixed size object. */ - headerBytes = GC_NORMAL_HEADER_SIZE; + metaDataBytes = GC_NORMAL_METADATA_SIZE; objectBytes = bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE); skipFront = 0; skipGap = 0; - } else if (ARRAY_TAG == tag) { - headerBytes = GC_ARRAY_HEADER_SIZE; - objectBytes = sizeofArrayNoHeader (s, getArrayLength (p), - bytesNonObjptrs, numObjptrs); + } else if (SEQUENCE_TAG == tag) { + metaDataBytes = GC_SEQUENCE_METADATA_SIZE; + objectBytes = sizeofSequenceNoMetaData (s, getSequenceLength (p), + bytesNonObjptrs, numObjptrs); skipFront = 0; skipGap = 0; } else { /* Stack. */ @@ -284,7 +286,7 @@ GC_stack stack; assert (STACK_TAG == tag); - headerBytes = GC_STACK_HEADER_SIZE; + metaDataBytes = GC_STACK_METADATA_SIZE; stack = (GC_stack)p; current = currentStack == stack; @@ -303,7 +305,7 @@ skipFront = reservedOld - stack->used; skipGap = reservedOld - reservedNew; } - size = headerBytes + objectBytes; + size = metaDataBytes + objectBytes; /* unmark */ if (DEBUG_MARK_COMPACT) fprintf (stderr, "unmarking "FMTPTR" of size %"PRIuMAX"\n", @@ -332,6 +334,7 @@ objptr newObjptr; assert (not (GC_VALID_HEADER_MASK & header)); + assert (isPointerInHeap (s, (pointer)headerp)); /* It's a pointer. This object must be live. Fix all the * backward pointers to it. Then unmark it. */ @@ -379,17 +382,28 @@ uintmaxToCommaString(s->heap.size)); } currentStack = getStackCurrent (s); + struct GC_markState markState; + markState.mode = MARK_MODE; + markState.size = 0; if (s->hashConsDuringGC) { s->lastMajorStatistics.bytesHashConsed = 0; s->cumulativeStatistics.numHashConsGCs++; s->objectHashTable = allocHashTable (s); - foreachGlobalObjptr (s, dfsMarkWithHashConsWithLinkWeaks); - freeHashTable (s->objectHashTable); + markState.shouldHashCons = TRUE; } else { - foreachGlobalObjptr (s, dfsMarkWithoutHashConsWithLinkWeaks); + markState.shouldHashCons = FALSE; + } + markState.shouldLinkWeaks = TRUE; + struct GC_foreachObjptrClosure dfsMarkObjptrClosure = + {.fun = dfsMarkObjptrFun, .env = &markState}; + foreachGlobalObjptr (s, &dfsMarkObjptrClosure); + if (s->hashConsDuringGC) { + freeHashTable (s->objectHashTable); } updateWeaksForMarkCompact (s); - foreachGlobalObjptr (s, threadInternalObjptr); + struct GC_foreachObjptrClosure threadInternalObjptrClosure = + {.fun = threadInternalObjptr, .env = NULL}; + foreachGlobalObjptr (s, &threadInternalObjptrClosure); updateForwardPointersForMarkCompact (s, currentStack); updateBackwardPointersAndSlideForMarkCompact (s, currentStack); bytesHashConsed = s->lastMajorStatistics.bytesHashConsed; diff -Nru mlton-20130715/runtime/gc/mark-compact.h mlton-20210117+dfsg/runtime/gc/mark-compact.h --- mlton-20130715/runtime/gc/mark-compact.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/mark-compact.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,15 +1,16 @@ -/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #if (defined (MLTON_GC_INTERNAL_FUNCS)) static inline void copyForThreadInternal (pointer dst, pointer src); -static inline void threadInternalObjptr (GC_state s, objptr *opp); +static inline void threadInternalObjptr (GC_state s, objptr *opp, void *env); static inline void updateWeaksForMarkCompact (GC_state s); static void updateForwardPointersForMarkCompact (GC_state s, GC_stack currentStack); static void updateBackwardPointersAndSlideForMarkCompact (GC_state s, GC_stack currentStack); diff -Nru mlton-20130715/runtime/gc/model.c mlton-20210117+dfsg/runtime/gc/model.c --- mlton-20130715/runtime/gc/model.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/model.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ /* Copyright (C) 2005-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/model.h mlton-20210117+dfsg/runtime/gc/model.h --- mlton-20130715/runtime/gc/model.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/model.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ /* Copyright (C) 2005-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -142,13 +142,13 @@ #define GC_MODEL_OBJPTR_SHIFT 0 #define GC_MODEL_OBJPTR_BASE 0 #define GC_MODEL_HEADER_SIZE 32 -#define GC_MODEL_ARRLEN_SIZE 32 +#define GC_MODEL_SEQLEN_SIZE 32 #elif defined (GC_MODEL_NATIVE64) #define GC_MODEL_OBJPTR_SIZE 64 #define GC_MODEL_OBJPTR_SHIFT 0 #define GC_MODEL_OBJPTR_BASE 0 #define GC_MODEL_HEADER_SIZE 64 -#define GC_MODEL_ARRLEN_SIZE 64 +#define GC_MODEL_SEQLEN_SIZE 64 #else #error GC_MODEL_* undefined #endif diff -Nru mlton-20130715/runtime/gc/new-object.c mlton-20210117+dfsg/runtime/gc/new-object.c --- mlton-20130715/runtime/gc/new-object.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/new-object.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2016 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -37,7 +37,7 @@ } GC_profileAllocInc (s, bytesRequested); *((GC_header*)frontier) = header; - result = frontier + GC_NORMAL_HEADER_SIZE; + result = frontier + GC_HEADER_SIZE; assert (isAligned ((size_t)result, s->alignment)); if (DEBUG) fprintf (stderr, FMTPTR " = newObject ("FMTHDR", %"PRIuMAX", %s)\n", @@ -57,7 +57,7 @@ if (reserved > s->cumulativeStatistics.maxStackSize) s->cumulativeStatistics.maxStackSize = reserved; stack = (GC_stack)(newObject (s, GC_STACK_HEADER, - sizeofStackWithHeader (s, reserved), + sizeofStackWithMetaData (s, reserved), allocInOldGen)); stack->reserved = reserved; stack->used = 0; @@ -74,7 +74,7 @@ pointer res; assert (isStackReservedAligned (s, reserved)); - ensureHasHeapBytesFree (s, 0, sizeofStackWithHeader (s, reserved) + sizeofThread (s)); + ensureHasHeapBytesFree (s, 0, sizeofStackWithMetaData (s, reserved) + sizeofThread (s)); stack = newStack (s, reserved, FALSE); res = newObject (s, GC_THREAD_HEADER, sizeofThread (s), diff -Nru mlton-20130715/runtime/gc/new-object.h mlton-20210117+dfsg/runtime/gc/new-object.h --- mlton-20130715/runtime/gc/new-object.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/new-object.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/object.c mlton-20210117+dfsg/runtime/gc/object.c --- mlton-20130715/runtime/gc/object.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/object.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,16 +1,16 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2016,2019 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ -const char* objectTypeTagToString (GC_objectTypeTag tag) { +const char * objectTypeTagToString (GC_objectTypeTag tag) { switch (tag) { - case ARRAY_TAG: - return "ARRAY"; + case SEQUENCE_TAG: + return "SEQUENCE"; case NORMAL_TAG: return "NORMAL"; case STACK_TAG: @@ -101,11 +101,11 @@ assert (isFrontierAligned (s, p)); header = *(GC_header*)p; if (0 == header) - /* Looking at the counter word in an array. */ - res = p + GC_ARRAY_HEADER_SIZE; + /* Looking at the counter word in a sequence. */ + res = p + GC_SEQUENCE_METADATA_SIZE; else /* Looking at a header word. */ - res = p + GC_NORMAL_HEADER_SIZE; + res = p + GC_NORMAL_METADATA_SIZE; assert (isAligned ((uintptr_t)res, s->alignment)); if (DEBUG_DETAILED) fprintf (stderr, FMTPTR" = advanceToObjectData ("FMTPTR")\n", diff -Nru mlton-20130715/runtime/gc/object.h mlton-20210117+dfsg/runtime/gc/object.h --- mlton-20130715/runtime/gc/object.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/object.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2016,2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -10,13 +11,13 @@ /* * There are four kinds of ML objects: - * array, normal (fixed size), stack, and weak. + * normal (fixed size), sequence, stack, and weak. */ typedef enum { /* The tag indices here must agree with those in declareObjectTypes() * in codegen/c-codegen/c-codegen.fun. */ - ARRAY_TAG = 0, - NORMAL_TAG = 1, + NORMAL_TAG = 0, + SEQUENCE_TAG = 1, STACK_TAG = 2, WEAK_TAG = 3, } GC_objectTypeTag; @@ -25,7 +26,7 @@ #if (defined (MLTON_GC_INTERNAL_FUNCS)) -static const char* objectTypeTagToString (GC_objectTypeTag tag); +static const char * objectTypeTagToString (GC_objectTypeTag tag); #endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ @@ -94,12 +95,12 @@ * Likewise, a primitive value may span multiple native words (e.g., * Word64.word on an x86). */ -#define GC_NORMAL_HEADER_SIZE GC_HEADER_SIZE +#define GC_NORMAL_METADATA_SIZE (GC_HEADER_SIZE) #endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ -/* Array objects are described in "array.h" */ +/* Sequence objects are described in "sequence.h" */ /* Stack objects are described in "stack.h" */ @@ -121,30 +122,32 @@ * fields, in which case it may not be hash-cons-ed. In a normal * object, the bytesNonObjptrs field indicates the number of bytes of * non heap-pointer data, while the numObjptrs field indicates the - * number of heap pointers. In an array object, the bytesNonObjptrs + * number of heap pointers. In a sequence object, the bytesNonObjptrs * field indicates the number of bytes of non heap-pointer data in a - * single array element, while the numObjptrs field indicates the - * number of heap pointers in a single array element. In a stack + * single sequence element, while the numObjptrs field indicates the + * number of heap pointers in a single sequence element. In a stack * object, the bytesNonObjptrs and numObjptrs fields are irrelevant. * In a weak object, the bytesNonObjptrs and numObjptrs fields are * interpreted as in a normal object. */ -typedef struct GC_objectType { +typedef const struct GC_objectType { /* Keep tag first, at zero offset, since it is referenced most often. */ - GC_objectTypeTag tag; - bool hasIdentity; - uint16_t bytesNonObjptrs; - uint16_t numObjptrs; + const GC_objectTypeTag tag; + const bool hasIdentity; + const uint16_t bytesNonObjptrs; + const uint16_t numObjptrs; } *GC_objectType; enum { /* The type indices here must agree with those in backend/rep-type.fun. */ STACK_TYPE_INDEX = 0, THREAD_TYPE_INDEX = 1, WEAK_GONE_TYPE_INDEX = 2, - WORD8_VECTOR_TYPE_INDEX = 3, - WORD32_VECTOR_TYPE_INDEX = 4, - WORD16_VECTOR_TYPE_INDEX = 5, - WORD64_VECTOR_TYPE_INDEX = 6, + REAL32_VECTOR_TYPE_INDEX = 3, + REAL64_VECTOR_TYPE_INDEX = 4, + WORD8_VECTOR_TYPE_INDEX = 5, + WORD32_VECTOR_TYPE_INDEX = 6, + WORD16_VECTOR_TYPE_INDEX = 7, + WORD64_VECTOR_TYPE_INDEX = 8, }; #endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ @@ -154,6 +157,8 @@ #define GC_STACK_HEADER buildHeaderFromTypeIndex (STACK_TYPE_INDEX) #define GC_THREAD_HEADER buildHeaderFromTypeIndex (THREAD_TYPE_INDEX) #define GC_WEAK_GONE_HEADER buildHeaderFromTypeIndex (WEAK_GONE_TYPE_INDEX) +#define GC_REAL32_VECTOR_HEADER buildHeaderFromTypeIndex (REAL32_VECTOR_TYPE_INDEX) +#define GC_REAL64_VECTOR_HEADER buildHeaderFromTypeIndex (REAL64_VECTOR_TYPE_INDEX) #define GC_WORD8_VECTOR_HEADER buildHeaderFromTypeIndex (WORD8_VECTOR_TYPE_INDEX) #define GC_WORD16_VECTOR_HEADER buildHeaderFromTypeIndex (WORD16_VECTOR_TYPE_INDEX) #define GC_WORD32_VECTOR_HEADER buildHeaderFromTypeIndex (WORD32_VECTOR_TYPE_INDEX) diff -Nru mlton-20130715/runtime/gc/object-size.c mlton-20210117+dfsg/runtime/gc/object-size.c --- mlton-20130715/runtime/gc/object-size.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/object-size.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,35 +1,30 @@ -/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2016-2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ -size_t sizeofArrayNoHeader (GC_state s, - GC_arrayLength numElements, - uint16_t bytesNonObjptrs, uint16_t numObjptrs) { +size_t sizeofSequenceNoMetaData (GC_state s, + GC_sequenceLength numElements, + uint16_t bytesNonObjptrs, uint16_t numObjptrs) { size_t result; result = numElements * (bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE)); - /* Very small (including empty) arrays have OBJPTR_SIZE bytes for - * the forwarding pointer. - */ - if (result < OBJPTR_SIZE) - result = OBJPTR_SIZE; - return alignWithExtra (s, result, GC_ARRAY_HEADER_SIZE); + return alignWithExtra (s, result, GC_SEQUENCE_METADATA_SIZE); } -size_t sizeofStackNoHeader (__attribute__ ((unused)) GC_state s, - GC_stack stack) { +size_t sizeofStackNoMetaData (__attribute__ ((unused)) GC_state s, + GC_stack stack) { size_t result; result = sizeof (struct GC_stack) + stack->reserved; return result; } -size_t sizeofObject (GC_state s, pointer p) { - size_t headerBytes, objectBytes; +void sizeofObjectAux (GC_state s, pointer p, size_t* metaDataBytes, size_t* objectBytes) { GC_header header; GC_objectTypeTag tag; uint16_t bytesNonObjptrs, numObjptrs; @@ -37,16 +32,27 @@ header = getHeader (p); splitHeader (s, header, &tag, NULL, &bytesNonObjptrs, &numObjptrs); if ((NORMAL_TAG == tag) or (WEAK_TAG == tag)) { - headerBytes = GC_NORMAL_HEADER_SIZE; - objectBytes = bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE); - } else if (ARRAY_TAG == tag) { - headerBytes = GC_ARRAY_HEADER_SIZE; - objectBytes = sizeofArrayNoHeader (s, getArrayLength (p), - bytesNonObjptrs, numObjptrs); + *metaDataBytes = GC_NORMAL_METADATA_SIZE; + *objectBytes = bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE); + } else if (SEQUENCE_TAG == tag) { + *metaDataBytes = GC_SEQUENCE_METADATA_SIZE; + *objectBytes = sizeofSequenceNoMetaData (s, getSequenceLength (p), + bytesNonObjptrs, numObjptrs); } else { /* Stack. */ assert (STACK_TAG == tag); - headerBytes = GC_STACK_HEADER_SIZE; - objectBytes = sizeofStackNoHeader (s, (GC_stack)p); + *metaDataBytes = GC_STACK_METADATA_SIZE; + *objectBytes = sizeofStackNoMetaData (s, (GC_stack)p); } - return headerBytes + objectBytes; +} + +size_t sizeofObject (GC_state s, pointer p) { + size_t metaDataBytes, objectBytes; + sizeofObjectAux(s, p, &metaDataBytes, &objectBytes); + return metaDataBytes + objectBytes; +} + +size_t sizeofObjectNoMetaData (GC_state s, pointer p) { + size_t metaDataBytes, objectBytes; + sizeofObjectAux(s, p, &metaDataBytes, &objectBytes); + return objectBytes; } diff -Nru mlton-20130715/runtime/gc/object-size.h mlton-20210117+dfsg/runtime/gc/object-size.h --- mlton-20130715/runtime/gc/object-size.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/object-size.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,17 +1,23 @@ -/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2016-2017 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #if (defined (MLTON_GC_INTERNAL_FUNCS)) -static inline size_t sizeofArrayNoHeader (GC_state s, GC_arrayLength numElements, - uint16_t bytesNonObjptrs, uint16_t numObjptrs); -static inline size_t sizeofStackNoHeader (GC_state s, GC_stack stack); +static inline size_t sizeofSequenceNoMetaData (GC_state s, GC_sequenceLength numElements, + uint16_t bytesNonObjptrs, uint16_t numObjptrs); +static inline size_t sizeofStackNoMetaData (GC_state s, GC_stack stack); + +static inline void sizeofObjectAux (GC_state s, pointer p, + size_t* metaDataBytes, size_t* objectBytes); static inline size_t sizeofObject (GC_state s, pointer p); +static inline size_t sizeofObjectNoMetaData (GC_state s, pointer p); + #endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ diff -Nru mlton-20130715/runtime/gc/objptr.c mlton-20210117+dfsg/runtime/gc/objptr.c --- mlton-20130715/runtime/gc/objptr.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/objptr.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ /* Copyright (C) 2005-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/objptr.h mlton-20210117+dfsg/runtime/gc/objptr.h --- mlton-20130715/runtime/gc/objptr.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/objptr.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ /* Copyright (C) 2005-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/pack.c mlton-20210117+dfsg/runtime/gc/pack.c --- mlton-20130715/runtime/gc/pack.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/pack.c 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/pack.h mlton-20210117+dfsg/runtime/gc/pack.h --- mlton-20130715/runtime/gc/pack.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/pack.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/pointer.c mlton-20210117+dfsg/runtime/gc/pointer.c --- mlton-20130715/runtime/gc/pointer.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/pointer.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/pointer.h mlton-20210117+dfsg/runtime/gc/pointer.h --- mlton-20130715/runtime/gc/pointer.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/pointer.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/profiling.c mlton-20210117+dfsg/runtime/gc/profiling.c --- mlton-20130715/runtime/gc/profiling.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/profiling.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2011-2012 Matthew Fluet. +/* Copyright (C) 2011-2012,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -23,8 +23,8 @@ return i - s->sourceMaps.sourcesLength; } -char* profileIndexSourceName (GC_state s, GC_sourceIndex i) { - char* res; +const char * profileIndexSourceName (GC_state s, GC_sourceIndex i) { + const char *res; if (i < s->sourceMaps.sourcesLength) res = getSourceName (s, i); @@ -76,7 +76,7 @@ void enterForProfiling (GC_state s, GC_sourceSeqIndex sourceSeqIndex) { uint32_t i; GC_sourceIndex sourceIndex; - uint32_t *sourceSeq; + const uint32_t *sourceSeq; if (DEBUG_PROFILE) fprintf (stderr, "enterForProfiling ("FMTSSI")\n", sourceSeqIndex); @@ -96,8 +96,12 @@ } } -void enterFrameForProfiling (GC_state s, GC_frameIndex i) { - enterForProfiling (s, s->sourceMaps.frameSources[i]); +void enterFrameForProfiling (GC_state s, + __attribute__((unused)) GC_frameIndex frameIndex, + GC_frameInfo frameInfo, + __attribute__((unused)) pointer frameTop, + __attribute__((unused)) void *env) { + enterForProfiling (s, frameInfo->sourceSeqIndex); } void GC_profileEnter (GC_state s) { @@ -132,7 +136,7 @@ void leaveForProfiling (GC_state s, GC_sourceSeqIndex sourceSeqIndex) { uint32_t i; GC_sourceIndex sourceIndex; - uint32_t *sourceSeq; + const uint32_t *sourceSeq; if (DEBUG_PROFILE) fprintf (stderr, "leaveForProfiling ("FMTSSI")\n", sourceSeqIndex); @@ -158,7 +162,7 @@ void incForProfiling (GC_state s, size_t amount, GC_sourceSeqIndex sourceSeqIndex) { - uint32_t *sourceSeq; + const uint32_t *sourceSeq; GC_sourceIndex topSourceIndex; if (DEBUG_PROFILE) @@ -169,7 +173,7 @@ topSourceIndex = sourceSeq[0] > 0 ? sourceSeq[sourceSeq[0]] - : SOURCES_INDEX_UNKNOWN; + : UNKNOWN_SOURCE_INDEX; if (DEBUG_PROFILE) { profileIndent (); fprintf (stderr, "bumping %s by %"PRIuMAX"\n", @@ -179,7 +183,7 @@ s->profiling.data->countTop[sourceIndexToProfileMasterIndex (s, topSourceIndex)] += amount; if (s->profiling.stack) enterForProfiling (s, sourceSeqIndex); - if (SOURCES_INDEX_GC == topSourceIndex) + if (GC_SOURCE_INDEX == topSourceIndex) s->profiling.data->totalGC += amount; else s->profiling.data->total += amount; @@ -192,7 +196,7 @@ fprintf (stderr, "GC_profileInc (%"PRIuMAX")\n", (uintmax_t)amount); incForProfiling (s, amount, s->amInGC - ? SOURCE_SEQ_GC + ? GC_SOURCE_SEQ_INDEX : getCachedStackTopFrameSourceSeqIndex (s)); } @@ -336,27 +340,27 @@ void GC_handleSigProf (code_pointer pc) { GC_frameIndex frameIndex; GC_state s; - GC_sourceSeqIndex sourceSeqsIndex; + GC_sourceSeqIndex sourceSeqIndex; s = handleSigProfState; if (DEBUG_PROFILE) fprintf (stderr, "GC_handleSigProf ("FMTPTR")\n", (uintptr_t)pc); if (s->amInGC) - sourceSeqsIndex = SOURCE_SEQ_GC; + sourceSeqIndex = GC_SOURCE_SEQ_INDEX; else { frameIndex = getCachedStackTopFrameIndex (s); - if (C_FRAME == s->frameLayouts[frameIndex].kind) - sourceSeqsIndex = s->sourceMaps.frameSources[frameIndex]; + if (C_FRAME == s->frameInfos[frameIndex].kind) + sourceSeqIndex = s->frameInfos[frameIndex].sourceSeqIndex; else { if (PROFILE_TIME_LABEL == s->profiling.kind) { uint32_t start, end, i; /* Binary search labels to find which method contains PC */ start = 0; - end = s->sourceMaps.sourceLabelsLength; + end = s->sourceMaps.profileLabelInfosLength; while (end - start > 1) { i = (start+end)/2; - if ((uintptr_t)s->sourceMaps.sourceLabels[i].label <= (uintptr_t)pc) + if ((uintptr_t)s->sourceMaps.profileLabelInfos[i].profileLabel <= (uintptr_t)pc) start = i; else end = i; @@ -366,21 +370,21 @@ /* The last label is dead code. Any address past it is thus unknown. * The first label is before all SML code. Before it is also unknown. */ - if (i-1 == s->sourceMaps.sourceLabelsLength || + if (i-1 == s->sourceMaps.profileLabelInfosLength || (i == 0 && - (uintptr_t)pc < (uintptr_t)s->sourceMaps.sourceLabels[i].label)) { + (uintptr_t)pc < (uintptr_t)s->sourceMaps.profileLabelInfos[i].profileLabel)) { if (DEBUG_PROFILE) fprintf (stderr, "pc out of bounds\n"); - sourceSeqsIndex = SOURCE_SEQ_UNKNOWN; + sourceSeqIndex = UNKNOWN_SOURCE_SEQ_INDEX; } else { - sourceSeqsIndex = s->sourceMaps.sourceLabels[start].sourceSeqIndex; + sourceSeqIndex = s->sourceMaps.profileLabelInfos[start].sourceSeqIndex; } } else { - sourceSeqsIndex = s->sourceMaps.curSourceSeqsIndex; + sourceSeqIndex = s->sourceMaps.curSourceSeqIndex; } } } - incForProfiling (s, 1, sourceSeqsIndex); + incForProfiling (s, 1, sourceSeqIndex); } static void initProfilingTime (GC_state s) { @@ -388,9 +392,9 @@ s->profiling.data = profileMalloc (s); if (PROFILE_TIME_LABEL == s->profiling.kind) { - initSourceLabels (s); + initProfileLabelInfos (s); } else { - s->sourceMaps.curSourceSeqsIndex = SOURCE_SEQ_UNKNOWN; + s->sourceMaps.curSourceSeqIndex = UNKNOWN_SOURCE_SEQ_INDEX; } /* * Install catcher, which handles SIGPROF and calls MLton_Profile_inc. @@ -440,7 +444,6 @@ s->profiling.isOn = FALSE; else { s->profiling.isOn = TRUE; - assert (s->sourceMaps.frameSourcesLength == s->frameLayoutsLength); switch (s->profiling.kind) { case PROFILE_ALLOC: case PROFILE_COUNT: diff -Nru mlton-20130715/runtime/gc/profiling.h mlton-20210117+dfsg/runtime/gc/profiling.h --- mlton-20130715/runtime/gc/profiling.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/profiling.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2019 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -88,7 +88,11 @@ static inline void addToStackForProfiling (GC_state s, GC_profileMasterIndex i); static inline void enterSourceForProfiling (GC_state s, GC_profileMasterIndex i); static inline void enterForProfiling (GC_state s, GC_sourceSeqIndex sourceSeqIndex); -static inline void enterFrameForProfiling (GC_state s, GC_frameIndex i); +static inline void enterFrameForProfiling (GC_state s, + GC_frameIndex frameIndex, + GC_frameInfo frameInfo, + pointer frameTop, + void *env); static inline void removeFromStackForProfiling (GC_state s, GC_profileMasterIndex i); static inline void leaveSourceForProfiling (GC_state s, GC_profileMasterIndex i); @@ -96,7 +100,7 @@ static inline void incForProfiling (GC_state s, size_t amount, GC_sourceSeqIndex sourceSeqIndex); -static inline char* profileIndexSourceName (GC_state s, GC_sourceIndex i); +static inline const char * profileIndexSourceName (GC_state s, GC_sourceIndex i); static void writeProfileCount (GC_state s, FILE *f, GC_profileData p, GC_profileMasterIndex i); @@ -130,4 +134,3 @@ #endif /* (defined (MLTON_GC_INTERNAL_BASIS)) */ PRIVATE void GC_handleSigProf (code_pointer pc); - diff -Nru mlton-20130715/runtime/gc/read_write.c mlton-20210117+dfsg/runtime/gc/read_write.c --- mlton-20130715/runtime/gc/read_write.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/read_write.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/rusage.c mlton-20210117+dfsg/runtime/gc/rusage.c --- mlton-20130715/runtime/gc/rusage.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/rusage.c 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/rusage.h mlton-20210117+dfsg/runtime/gc/rusage.h --- mlton-20130715/runtime/gc/rusage.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/rusage.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/sequence-allocate.c mlton-20210117+dfsg/runtime/gc/sequence-allocate.c --- mlton-20130715/runtime/gc/sequence-allocate.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/sequence-allocate.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,122 @@ +/* Copyright (C) 2016 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + */ + +pointer GC_sequenceAllocate (GC_state s, + size_t ensureBytesFree, + GC_sequenceLength numElements, + GC_header header) { + size_t sequenceSize, sequenceSizeAligned; + size_t bytesPerElement; + uint16_t bytesNonObjptrs; + uint16_t numObjptrs; + pointer frontier; + pointer last; + pointer result; + + splitHeader(s, header, NULL, NULL, &bytesNonObjptrs, &numObjptrs); + if (DEBUG) + fprintf (stderr, "GC_sequenceAllocate (%"PRIuMAX", "FMTSEQLEN", "FMTHDR")\n", + (uintmax_t)ensureBytesFree, numElements, header); + bytesPerElement = bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE); + /* Check for overflow when computing sequenceSize. + */ + if (bytesPerElement > 0 and numElements > (SIZE_MAX / bytesPerElement)) { + goto doOverflow; + } + sequenceSize = bytesPerElement * numElements; + if (sequenceSize > SIZE_MAX - GC_SEQUENCE_METADATA_SIZE) { + goto doOverflow; + } + sequenceSize += GC_SEQUENCE_METADATA_SIZE; + sequenceSizeAligned = align (sequenceSize, s->alignment); + if (sequenceSizeAligned < sequenceSize) { + goto doOverflow; + } + if (DEBUG_SEQUENCE) + fprintf (stderr, + "Sequence with "FMTSEQLEN" elts of size %"PRIuMAX" and total size %s and total aligned size %s. " + "Ensure %s bytes free.\n", + numElements, (uintmax_t)bytesPerElement, + uintmaxToCommaString(sequenceSize), + uintmaxToCommaString(sequenceSizeAligned), + uintmaxToCommaString(ensureBytesFree)); + if (sequenceSizeAligned >= s->controls.oldGenSequenceSize) { + if (not hasHeapBytesFree (s, sequenceSizeAligned, ensureBytesFree)) { + enter (s); + performGC (s, sequenceSizeAligned, ensureBytesFree, FALSE, TRUE); + leave (s); + } + frontier = s->heap.start + s->heap.oldGenSize; + s->heap.oldGenSize += sequenceSizeAligned; + s->cumulativeStatistics.bytesAllocated += sequenceSizeAligned; + } else { + size_t bytesRequested; + pointer newFrontier; + + bytesRequested = sequenceSizeAligned + ensureBytesFree; + if (not hasHeapBytesFree (s, 0, bytesRequested)) { + enter (s); + performGC (s, 0, bytesRequested, FALSE, TRUE); + leave (s); + } + frontier = s->frontier; + newFrontier = frontier + sequenceSizeAligned; + assert (isFrontierAligned (s, newFrontier)); + s->frontier = newFrontier; + } + last = frontier + sequenceSize; + *((GC_sequenceCounter*)(frontier)) = 0; + frontier = frontier + GC_SEQUENCE_COUNTER_SIZE; + *((GC_sequenceLength*)(frontier)) = numElements; + frontier = frontier + GC_SEQUENCE_LENGTH_SIZE; + *((GC_header*)(frontier)) = header; + frontier = frontier + GC_HEADER_SIZE; + result = frontier; + assert (isAligned ((size_t)result, s->alignment)); + /* Initialize all pointers with BOGUS_OBJPTR. */ + if (1 <= numObjptrs and 0 < numElements) { + pointer p; + + if (0 == bytesNonObjptrs) + for (p = frontier; p < last; p += OBJPTR_SIZE) + *((objptr*)p) = BOGUS_OBJPTR; + else { + /* Sequence with a mix of pointers and non-pointers. */ + size_t bytesObjptrs; + + bytesObjptrs = numObjptrs * OBJPTR_SIZE; + + for (p = frontier; p < last; ) { + pointer next; + + p += bytesNonObjptrs; + next = p + bytesObjptrs; + assert (next <= last); + for ( ; p < next; p += OBJPTR_SIZE) + *((objptr*)p) = BOGUS_OBJPTR; + } + } + } + GC_profileAllocInc (s, sequenceSizeAligned); + if (DEBUG_SEQUENCE) { + fprintf (stderr, "GC_sequenceAllocate done. result = "FMTPTR" frontier = "FMTPTR"\n", + (uintptr_t)result, (uintptr_t)s->frontier); + displayGCState (s, stderr); + } + assert (ensureBytesFree <= (size_t)(s->limitPlusSlop - s->frontier)); + /* Unfortunately, the invariant isn't quite true here, because + * unless we did the GC, we never set s->currentThread->stack->used + * to reflect what the mutator did with stackTop. + */ + return result; + +doOverflow: + die ("Out of memory. Unable to allocate sequence with "FMTSEQLEN" elements and elements of size %"PRIuMAX" bytes.", + numElements, (uintmax_t)bytesPerElement); +} diff -Nru mlton-20130715/runtime/gc/sequence-allocate.h mlton-20210117+dfsg/runtime/gc/sequence-allocate.h --- mlton-20130715/runtime/gc/sequence-allocate.h 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/sequence-allocate.h 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,16 @@ +/* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + */ + +#if (defined (MLTON_GC_INTERNAL_BASIS)) + +PRIVATE pointer GC_sequenceAllocate (GC_state s, + size_t ensureBytesFree, + GC_sequenceLength numElements, + GC_header header); + +#endif /* (defined (MLTON_GC_INTERNAL_BASIS)) */ diff -Nru mlton-20130715/runtime/gc/sequence.c mlton-20210117+dfsg/runtime/gc/sequence.c --- mlton-20130715/runtime/gc/sequence.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/sequence.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,90 @@ +/* Copyright (C) 2012 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + */ + +/* getSequenceLengthp (p) + * + * Returns a pointer to the length for the sequence pointed to by p. + */ +GC_sequenceLength* getSequenceLengthp (pointer a) { + return (GC_sequenceLength*)(a + - GC_HEADER_SIZE + - GC_SEQUENCE_LENGTH_SIZE); +} + +/* getSequenceLength (p) + * + * Returns the length for the sequence pointed to by p. + */ +GC_sequenceLength getSequenceLength (pointer a) { + return *(getSequenceLengthp (a)); +} + +uintmax_t GC_getSequenceLength (pointer a) { + return ((uintmax_t)(getSequenceLength (a))); +} + +/* getSequenceCounterp (p) + * + * Returns a pointer to the counter for the sequence pointed to by p. + */ +GC_sequenceCounter* getSequenceCounterp (pointer a) { + return (GC_sequenceCounter*)(a + - GC_HEADER_SIZE + - GC_SEQUENCE_LENGTH_SIZE + - GC_SEQUENCE_COUNTER_SIZE); +} + +/* getSequenceCounter (p) + * + * Returns the counter for the sequence pointed to by p. + */ +GC_sequenceCounter getSequenceCounter (pointer a) { + return *(getSequenceCounterp (a)); +} + + +#if ASSERT +pointer indexSequenceAtObjptrIndex (GC_state s, pointer a, + GC_sequenceCounter sequenceIndex, + uint32_t objptrIndex) { + GC_header header; + uint16_t bytesNonObjptrs; + uint16_t numObjptrs; + GC_objectTypeTag tag; + + header = getHeader (a); + splitHeader(s, header, &tag, NULL, &bytesNonObjptrs, &numObjptrs); + assert (tag == SEQUENCE_TAG); + + return a + + (sequenceIndex * (bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE))) + + bytesNonObjptrs + + (objptrIndex * OBJPTR_SIZE); +} +#endif + + +/* GC_sequenceCopy (ad, as, as, ss, l) + * + * Copy l elements of as starting at ss to ad starting at as. + */ +void GC_sequenceCopy (GC_state s, pointer ad, size_t ds, pointer as, size_t ss, size_t l) { + GC_header header; + uint16_t bytesNonObjptrs; + uint16_t numObjptrs; + GC_objectTypeTag tag; + size_t eltSize; + + header = getHeader (ad); + splitHeader(s, header, &tag, NULL, &bytesNonObjptrs, &numObjptrs); + assert (tag == SEQUENCE_TAG); + + eltSize = bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE); + GC_memmove (as + eltSize * ss, ad + eltSize * ds, eltSize * l); +} diff -Nru mlton-20130715/runtime/gc/sequence.h mlton-20210117+dfsg/runtime/gc/sequence.h --- mlton-20130715/runtime/gc/sequence.h 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/sequence.h 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,64 @@ +/* Copyright (C) 2012,2016 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * Copyright (C) 1997-2000 NEC Research Institute. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + */ + +#if (defined (MLTON_GC_INTERNAL_TYPES)) + +/* + * Sequence objects have the following layout: + * + * counter :: + * length :: + * header :: + * ( (non heap-pointers)* :: (heap pointers)* )* + * + * The counter word is used by mark compact GC. The length word is + * the number of elements in the sequence. Sequence elements have the same + * individual layout as normal objects, omitting the header word. + */ + +#define GC_SEQLEN_TYPE__(z) uint ## z ## _t +#define GC_SEQLEN_TYPE_(z) GC_SEQLEN_TYPE__(z) +#define GC_SEQLEN_TYPE GC_SEQLEN_TYPE_(GC_MODEL_SEQLEN_SIZE) +typedef GC_SEQLEN_TYPE GC_sequenceLength; +#define GC_SEQUENCE_LENGTH_SIZE sizeof(GC_sequenceLength) +#define PRIxSEQLEN__(z) PRIx ## z +#define PRIxSEQLEN_(z) PRIxSEQLEN__(z) +#define PRIxSEQLEN PRIxSEQLEN_(GC_MODEL_SEQLEN_SIZE) +#define FMTSEQLEN "%"PRIxSEQLEN +typedef GC_sequenceLength GC_sequenceCounter; +#define GC_SEQUENCE_COUNTER_SIZE sizeof(GC_sequenceCounter) +#define PRIxSEQCTR PRIxSEQLEN +#define FMTSEQCTR "%"PRIxSEQCTR +#define GC_SEQUENCE_METADATA_SIZE (GC_SEQUENCE_COUNTER_SIZE + GC_SEQUENCE_LENGTH_SIZE + GC_HEADER_SIZE) + +COMPILE_TIME_ASSERT(sizeof_header__le__sizeof_seqlen, + sizeof(GC_header) <= sizeof(GC_sequenceLength)); +COMPILE_TIME_ASSERT(sizeof_seqlen__eq__sizeof_seqctr, + sizeof(GC_sequenceLength) == sizeof(GC_sequenceCounter)); + + +#endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ + +#if (defined (MLTON_GC_INTERNAL_FUNCS)) + +static inline GC_sequenceLength* getSequenceLengthp (pointer a); +static inline GC_sequenceLength getSequenceLength (pointer a); +static inline GC_sequenceCounter* getSequenceCounterp (pointer a); +static inline GC_sequenceCounter getSequenceCounter (pointer a); + +#if ASSERT +static inline pointer indexSequenceAtObjptrIndex (GC_state s, pointer a, + GC_sequenceCounter sequenceIndex, + uint32_t objptrIndex); +#endif + +#endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ + +PRIVATE uintmax_t GC_getSequenceLength (pointer a); +PRIVATE void GC_sequenceCopy (GC_state s, pointer ad, size_t ds, pointer as, size_t ss, size_t l); diff -Nru mlton-20130715/runtime/gc/share.c mlton-20210117+dfsg/runtime/gc/share.c --- mlton-20130715/runtime/gc/share.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/share.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,14 +1,19 @@ -/* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ void GC_share (GC_state s, pointer object) { size_t bytesExamined; size_t bytesHashConsed; + struct GC_markState markState; + + if (not isPointer (object)) + return; enter (s); /* update stack in heap, in case it is reached */ if (DEBUG_SHARE) @@ -16,10 +21,18 @@ if (DEBUG_SHARE or s->controls.messages) s->lastMajorStatistics.bytesHashConsed = 0; // Don't hash cons during the first round of marking. - bytesExamined = dfsMarkByMode (s, object, MARK_MODE, FALSE, FALSE); + markState.mode = MARK_MODE; + markState.size = 0; + markState.shouldHashCons = FALSE; + markState.shouldLinkWeaks = FALSE; + dfsMark (s, object, &markState); + bytesExamined = markState.size; s->objectHashTable = allocHashTable (s); // Hash cons during the second round of (un)marking. - dfsMarkByMode (s, object, UNMARK_MODE, TRUE, FALSE); + markState.mode = UNMARK_MODE; + markState.size = 0; + markState.shouldHashCons = TRUE; + dfsMark (s, object, &markState); freeHashTable (s->objectHashTable); bytesHashConsed = s->lastMajorStatistics.bytesHashConsed; s->cumulativeStatistics.bytesHashConsed += bytesHashConsed; diff -Nru mlton-20130715/runtime/gc/share.h mlton-20210117+dfsg/runtime/gc/share.h --- mlton-20130715/runtime/gc/share.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/share.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/signals.c mlton-20210117+dfsg/runtime/gc/signals.c --- mlton-20130715/runtime/gc/signals.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/signals.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,37 +1,38 @@ -/* Copyright (C) 2010 Matthew Fluet. +/* Copyright (C) 2010,2016,2019 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #if not HAS_SIGALTSTACK -void initSignalStack (__attribute__ ((unused)) GC_state s) { +void initSignalStack () { } #else -void initSignalStack (GC_state s) { - static bool init = FALSE; - static stack_t altstack; - - if (! init) { - init = TRUE; - size_t ss_size = align (SIGSTKSZ, s->sysvals.pageSize); - size_t psize = s->sysvals.pageSize; - void *ss_sp = GC_mmapAnon_safe_protect (NULL, 2 * ss_size, psize, psize); +void initSignalStack () { + static stack_t altstack = { .ss_sp = NULL, .ss_size = 0, .ss_flags = 0 }; + + if (! altstack.ss_sp) { + size_t psize = GC_pageSize (); + size_t ss_size = align (SIGSTKSZ, psize); + int prot = PROT_READ | PROT_WRITE; +#if NEEDS_SIGALTSTACK_EXEC + prot = prot | PROT_EXEC; +#endif + void *ss_sp = GC_mmapAnonStack (NULL, 2 * ss_size, prot, psize, psize); altstack.ss_sp = (void*)((pointer)ss_sp + ss_size); altstack.ss_size = ss_size; - altstack.ss_flags = 0; } sigaltstack (&altstack, NULL); } #endif -void GC_initSignalStack (GC_state s) { - initSignalStack (s); +void GC_initSignalStack () { + initSignalStack (); } diff -Nru mlton-20130715/runtime/gc/signals.h mlton-20210117+dfsg/runtime/gc/signals.h --- mlton-20130715/runtime/gc/signals.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/signals.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2010 Matthew Fluet. +/* Copyright (C) 2010,2019 Matthew Fluet. * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -32,8 +32,8 @@ #if (defined (MLTON_GC_INTERNAL_FUNCS)) -static void initSignalStack (GC_state s); +static void initSignalStack (); #endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ -void GC_initSignalStack (GC_state s); +void GC_initSignalStack (); diff -Nru mlton-20130715/runtime/gc/size.c mlton-20210117+dfsg/runtime/gc/size.c --- mlton-20130715/runtime/gc/size.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/size.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,22 +1,60 @@ -/* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ size_t GC_size (GC_state s, pointer root) { + struct GC_markState markState; size_t res; + + if (not isPointer (root)) + return 0; enter (s); /* update stack in heap, in case it is reached */ if (DEBUG_SIZE) fprintf (stderr, "GC_size marking\n"); - res = dfsMarkByMode (s, root, MARK_MODE, FALSE, FALSE); + markState.mode = MARK_MODE; + markState.size = 0; + markState.shouldHashCons = FALSE; + markState.shouldLinkWeaks = FALSE; + dfsMark (s, root, &markState); + res = markState.size; if (DEBUG_SIZE) fprintf (stderr, "GC_size unmarking\n"); - dfsMarkByMode (s, root, UNMARK_MODE, FALSE, FALSE); + markState.mode = UNMARK_MODE; + markState.size = 0; + dfsMark (s, root, &markState); leave(s); - + + return res; +} + +size_t GC_sizeAll (GC_state s) { + struct GC_foreachObjptrClosure dfsMarkObjptrClosure; + struct GC_markState markState; + size_t res; + + enter (s); /* update stack in heap, in case it is reached */ + dfsMarkObjptrClosure.fun = dfsMarkObjptrFun; + dfsMarkObjptrClosure.env = &markState; + if (DEBUG_SIZE) + fprintf (stderr, "GC_sizeAll marking\n"); + markState.mode = MARK_MODE; + markState.size = 0; + markState.shouldHashCons = FALSE; + markState.shouldLinkWeaks = FALSE; + foreachGlobalObjptr (s, &dfsMarkObjptrClosure); + res = markState.size; + if (DEBUG_SIZE) + fprintf (stderr, "GC_sizeAll unmarking\n"); + markState.mode = UNMARK_MODE; + markState.size = 0; + foreachGlobalObjptr (s, &dfsMarkObjptrClosure); + leave(s); + return res; } diff -Nru mlton-20130715/runtime/gc/size.h mlton-20210117+dfsg/runtime/gc/size.h --- mlton-20130715/runtime/gc/size.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/size.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,13 +1,15 @@ -/* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #if (defined (MLTON_GC_INTERNAL_BASIS)) PRIVATE size_t GC_size (GC_state s, pointer root); +PRIVATE size_t GC_sizeAll (GC_state s); #endif /* (defined (MLTON_GC_INTERNAL_BASIS)) */ diff -Nru mlton-20130715/runtime/gc/sources.c mlton-20210117+dfsg/runtime/gc/sources.c --- mlton-20130715/runtime/gc/sources.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/sources.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -10,26 +11,26 @@ GC_frameIndex i; i = getCachedStackTopFrameIndex (s); - assert(i < s->sourceMaps.frameSourcesLength); - return s->sourceMaps.frameSources[i]; + assert(i < s->frameInfosLength); + return s->frameInfos[i].sourceSeqIndex; } -char* getSourceName (GC_state s, GC_sourceIndex i) { +const char * getSourceName (GC_state s, GC_sourceIndex i) { assert (i < s->sourceMaps.sourcesLength); return s->sourceMaps.sourceNames[s->sourceMaps.sources[i].sourceNameIndex]; } -char* GC_sourceName (GC_state s, GC_sourceIndex i) { +const char * GC_sourceName (GC_state s, GC_sourceIndex i) { return getSourceName (s, i); } #if HAS_TIME_PROFILING -int compareSourceLabels (const void *v1, const void *v2) { - const struct GC_sourceLabel* l1 = (const struct GC_sourceLabel*)v1; - const struct GC_sourceLabel* l2 = (const struct GC_sourceLabel*)v2; - uintptr_t ui1 = (uintptr_t)(l1->label); - uintptr_t ui2 = (uintptr_t)(l2->label); +int compareProfileLabelInfos (const void *v1, const void *v2) { + const struct GC_profileLabelInfo* l1 = (const struct GC_profileLabelInfo*)v1; + const struct GC_profileLabelInfo* l2 = (const struct GC_profileLabelInfo*)v2; + uintptr_t ui1 = (uintptr_t)(l1->profileLabel); + uintptr_t ui2 = (uintptr_t)(l2->profileLabel); if (ui1 < ui2) return -1; @@ -39,48 +40,48 @@ return 1; } -void sortSourceLabels (GC_state s) { - GC_sourceLabelIndex i; +void sortProfileLabelInfos (GC_state s) { + GC_profileLabelInfoIndex i; - /* Sort sourceLabels by address. */ - qsort (s->sourceMaps.sourceLabels, - s->sourceMaps.sourceLabelsLength, - sizeof (*s->sourceMaps.sourceLabels), - compareSourceLabels); - if (0 == s->sourceMaps.sourceLabels[s->sourceMaps.sourceLabelsLength - 1].label) + /* Sort profileLabelInfos by address. */ + qsort (s->sourceMaps.profileLabelInfos, + s->sourceMaps.profileLabelInfosLength, + sizeof (*s->sourceMaps.profileLabelInfos), + compareProfileLabelInfos); + if (0 == s->sourceMaps.profileLabelInfos[s->sourceMaps.profileLabelInfosLength - 1].profileLabel) die ("Max source label is 0 -- something is wrong."); if (ASSERT) - for (i = 1; i < s->sourceMaps.sourceLabelsLength; i++) - assert (s->sourceMaps.sourceLabels[i-1].label - <= s->sourceMaps.sourceLabels[i].label); + for (i = 1; i < s->sourceMaps.profileLabelInfosLength; i++) + assert (s->sourceMaps.profileLabelInfos[i-1].profileLabel + <= s->sourceMaps.profileLabelInfos[i].profileLabel); } -void compressSourceLabels (GC_state s) { - GC_sourceLabelIndex in, out, i; +void compressProfileLabelInfos (GC_state s) { + GC_profileLabelInfoIndex in, out, i; GC_sourceSeqIndex sourceSeqIndex; - /* Eliminate duplicate sourceLabels */ + /* Eliminate duplicate profileLabelInfos */ out = 0; - sourceSeqIndex = SOURCE_SEQ_UNKNOWN; - for (in = 0; in < s->sourceMaps.sourceLabelsLength; ++in) { - if (s->sourceMaps.sourceLabels[in].sourceSeqIndex != sourceSeqIndex) { - s->sourceMaps.sourceLabels[out++] = s->sourceMaps.sourceLabels[in]; - sourceSeqIndex = s->sourceMaps.sourceLabels[in].sourceSeqIndex; + sourceSeqIndex = UNKNOWN_SOURCE_SEQ_INDEX; + for (in = 0; in < s->sourceMaps.profileLabelInfosLength; ++in) { + if (s->sourceMaps.profileLabelInfos[in].sourceSeqIndex != sourceSeqIndex) { + s->sourceMaps.profileLabelInfos[out++] = s->sourceMaps.profileLabelInfos[in]; + sourceSeqIndex = s->sourceMaps.profileLabelInfos[in].sourceSeqIndex; } } - s->sourceMaps.sourceLabelsLength = out; + s->sourceMaps.profileLabelInfosLength = out; if (DEBUG_SOURCES) - for (i = 0; i < s->sourceMaps.sourceLabelsLength; i++) + for (i = 0; i < s->sourceMaps.profileLabelInfosLength; i++) fprintf (stderr, FMTPTR" "FMTSSI"\n", - (uintptr_t)s->sourceMaps.sourceLabels[i].label, - s->sourceMaps.sourceLabels[i].sourceSeqIndex); + (uintptr_t)s->sourceMaps.profileLabelInfos[i].profileLabel, + s->sourceMaps.profileLabelInfos[i].sourceSeqIndex); } -void initSourceLabels (GC_state s) { - sortSourceLabels (s); - compressSourceLabels (s); +void initProfileLabelInfos (GC_state s) { + sortProfileLabelInfos (s); + compressProfileLabelInfos (s); } #endif @@ -100,7 +101,7 @@ s->sourceMaps.sources[i].successorSourceSeqIndex); fprintf (stdout, "%"PRIu32"\n", s->sourceMaps.sourceSeqsLength); for (i = 0; i < s->sourceMaps.sourceSeqsLength; i++) { - uint32_t *sourceSeq; + const uint32_t *sourceSeq; sourceSeq = s->sourceMaps.sourceSeqs[i]; for (j = 1; j <= sourceSeq[0]; j++) diff -Nru mlton-20130715/runtime/gc/sources.h mlton-20210117+dfsg/runtime/gc/sources.h --- mlton-20130715/runtime/gc/sources.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/sources.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -12,56 +13,61 @@ #define PRISNI PRIu32 #define FMTSNI "%"PRISNI -typedef uint32_t GC_sourceLabelIndex; -#define PRISLI PRIu32 -#define FMTSLI "%"PRISLI +typedef uint32_t GC_sourceSeqIndex; +#define PRISSI PRIu32 +#define FMTSSI "%"PRISSI + +#define UNKNOWN_SOURCE_SEQ_INDEX 0 +#define GC_SOURCE_SEQ_INDEX 1 typedef uint32_t GC_sourceIndex; #define PRISI PRIu32 #define FMTSI "%"PRISI -#define SOURCES_INDEX_UNKNOWN 0 -#define SOURCES_INDEX_GC 1 +#define UNKNOWN_SOURCE_INDEX 0 +#define GC_SOURCE_INDEX 1 -typedef uint32_t GC_sourceSeqIndex; -#define PRISSI PRIu32 -#define FMTSSI "%"PRISSI - -#define SOURCE_SEQ_UNKNOWN 0 -#define SOURCE_SEQ_GC 1 - -typedef struct GC_source { - GC_sourceNameIndex sourceNameIndex; - GC_sourceSeqIndex successorSourceSeqIndex; +typedef const struct GC_source { + const GC_sourceNameIndex sourceNameIndex; + const GC_sourceSeqIndex successorSourceSeqIndex; } *GC_source; -typedef struct GC_sourceLabel { - code_pointer label; +typedef struct GC_profileLabelInfo { + code_pointer profileLabel; GC_sourceSeqIndex sourceSeqIndex; -} *GC_sourceLabel; +} *GC_profileLabelInfo; + +typedef uint32_t GC_profileLabelInfoIndex; +#define PRISLI PRIu32 +#define FMTSLI "%"PRISLI struct GC_sourceMaps { - volatile GC_sourceSeqIndex curSourceSeqsIndex; - /* frameSources is an array of cardinality frameLayoutsLength that - * for each stack frame, gives an index into sourceSeqs of the - * sequence of source functions corresponding to the frame. + volatile GC_sourceSeqIndex curSourceSeqIndex; + /* profileLabelInfos is an array of cardinality profileLabelInfosLength; + * the collection of profile labels embedded in output program + * paired with an index into sourceSeqs of the sequence of source + * names corresponding to the code pointer; only used with + * ProfileTimeLabel. + */ + GC_profileLabelInfo profileLabelInfos; + uint32_t profileLabelInfosLength; + /* sourceNames is an array of cardinality sourceNamesLength; + * the collection of source names from the program. */ - GC_sourceSeqIndex *frameSources; - uint32_t frameSourcesLength; - struct GC_sourceLabel *sourceLabels; - uint32_t sourceLabelsLength; - char **sourceNames; + const char * const *sourceNames; uint32_t sourceNamesLength; - /* Each entry in sourceSeqs is a vector, whose first element is a - * length, and subsequent elements index into sources. + /* sourceSeqs is an array of cardinality sourceSeqsLength; + * each entry describes a sequence of source names as a length + * followed by the sequence of indices into sources. */ - uint32_t **sourceSeqs; + const uint32_t * const *sourceSeqs; uint32_t sourceSeqsLength; - /* sources is an array of cardinality sourcesLength. Each entry - * specifies an index into sourceNames and an index into sourceSeqs, - * giving the name of the function and the successors, respectively. + /* sources is an array of cardinality sourcesLength; + * each entry describes a source name and successor sources as + * the pair of an index into sourceNames and an index into + * sourceSeqs. */ - struct GC_source *sources; + GC_source sources; uint32_t sourcesLength; }; @@ -71,13 +77,13 @@ static inline GC_sourceSeqIndex getCachedStackTopFrameSourceSeqIndex (GC_state s); -static inline char* getSourceName (GC_state s, GC_sourceIndex i); +static inline const char * getSourceName (GC_state s, GC_sourceIndex i); #if HAS_TIME_PROFILING -static inline int compareSourceLabels (const void *v1, const void *v2); -static void sortSourceLabels (GC_state s); -static void compressSourceLabels (GC_state s); -static void initSourceLabels (GC_state s); +static inline int compareProfileLabelInfos (const void *v1, const void *v2); +static void sortProfileLabelInfos (GC_state s); +static void compressProfileLabelInfos (GC_state s); +static void initProfileLabelInfos (GC_state s); #endif static void showSources (GC_state s); @@ -86,6 +92,6 @@ #if (defined (MLTON_GC_INTERNAL_BASIS)) -PRIVATE char* GC_sourceName (GC_state s, GC_sourceIndex i); +PRIVATE const char * GC_sourceName (GC_state s, GC_sourceIndex i); #endif /* (defined (MLTON_GC_INTERNAL_BASIS)) */ diff -Nru mlton-20130715/runtime/gc/stack.c mlton-20210117+dfsg/runtime/gc/stack.c --- mlton-20130715/runtime/gc/stack.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/stack.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2016,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -24,7 +24,7 @@ } bool isStackReservedAligned (GC_state s, size_t reserved) { - return isAligned (GC_STACK_HEADER_SIZE + sizeof (struct GC_stack) + reserved, + return isAligned (GC_STACK_METADATA_SIZE + sizeof (struct GC_stack) + reserved, s->alignment); } #endif @@ -91,26 +91,26 @@ return res; } -GC_frameLayout getStackTopFrameLayout (GC_state s, GC_stack stack) { - GC_frameLayout layout; +GC_frameInfo getStackTopFrameInfo (GC_state s, GC_stack stack) { + GC_frameInfo frameInfo; - layout = getFrameLayoutFromFrameIndex (s, getStackTopFrameIndex (s, stack)); - return layout; + frameInfo = getFrameInfoFromFrameIndex (s, getStackTopFrameIndex (s, stack)); + return frameInfo; } uint16_t getStackTopFrameSize (GC_state s, GC_stack stack) { - GC_frameLayout layout; + GC_frameInfo frameInfo; assert (not (isStackEmpty (stack))); - layout = getStackTopFrameLayout (s, stack); - return layout->size; + frameInfo = getStackTopFrameInfo (s, stack); + return frameInfo->size; } size_t alignStackReserved (GC_state s, size_t reserved) { size_t res; - res = alignWithExtra (s, reserved, GC_STACK_HEADER_SIZE + sizeof (struct GC_stack)); + res = alignWithExtra (s, reserved, GC_STACK_METADATA_SIZE + sizeof (struct GC_stack)); if (DEBUG_STACKS) fprintf (stderr, "%"PRIuMAX" = alignStackReserved (%"PRIuMAX")\n", (uintmax_t)res, (uintmax_t)reserved); @@ -118,13 +118,13 @@ return res; } -size_t sizeofStackWithHeader (ARG_USED_FOR_ASSERT GC_state s, size_t reserved) { +size_t sizeofStackWithMetaData (ARG_USED_FOR_ASSERT GC_state s, size_t reserved) { size_t res; assert (isStackReservedAligned (s, reserved)); - res = GC_STACK_HEADER_SIZE + sizeof (struct GC_stack) + reserved; + res = GC_STACK_METADATA_SIZE + sizeof (struct GC_stack) + reserved; if (DEBUG_STACKS) - fprintf (stderr, "%"PRIuMAX" = sizeofStackWithHeader (%"PRIuMAX")\n", + fprintf (stderr, "%"PRIuMAX" = sizeofStackWithMetaData (%"PRIuMAX")\n", (uintmax_t)res, (uintmax_t)reserved); assert (isAligned (res, s->alignment)); return res; diff -Nru mlton-20130715/runtime/gc/stack.h mlton-20210117+dfsg/runtime/gc/stack.h --- mlton-20130715/runtime/gc/stack.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/stack.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2016,2019 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -49,7 +49,7 @@ */ } *GC_stack; -#define GC_STACK_HEADER_SIZE GC_HEADER_SIZE +#define GC_STACK_METADATA_SIZE (GC_HEADER_SIZE) #endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ @@ -70,11 +70,11 @@ static inline pointer getStackLimit (GC_state s, GC_stack stack); static inline GC_frameIndex getCachedStackTopFrameIndex (GC_state s); static inline GC_frameIndex getStackTopFrameIndex (GC_state s, GC_stack stack); -static inline GC_frameLayout getStackTopFrameLayout (GC_state s, GC_stack stack); +static inline GC_frameInfo getStackTopFrameInfo (GC_state s, GC_stack stack); static inline uint16_t getStackTopFrameSize (GC_state s, GC_stack stack); static inline size_t alignStackReserved (GC_state s, size_t reserved); -static inline size_t sizeofStackWithHeader (GC_state s, size_t reserved); +static inline size_t sizeofStackWithMetaData (GC_state s, size_t reserved); static inline size_t sizeofStackInitialReserved (GC_state s); static inline size_t sizeofStackMinimumReserved (GC_state s, GC_stack stack); static inline size_t sizeofStackGrowReserved (GC_state s, GC_stack stack); diff -Nru mlton-20130715/runtime/gc/static-heaps.c mlton-20210117+dfsg/runtime/gc/static-heaps.c --- mlton-20130715/runtime/gc/static-heaps.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/static-heaps.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,59 @@ +/* Copyright (C) 2019-2020 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + */ + +bool isPointerInImmutableStaticHeap (GC_state s, pointer p) { + return (not (isPointer (p)) + or (s->staticHeaps.immutable.start <= p + and p <= s->staticHeaps.immutable.start + s->staticHeaps.immutable.size)); +} + +bool isObjptrInImmutableStaticHeap (GC_state s, objptr op) { + pointer p; + if (not (isObjptr(op))) + return TRUE; + p = objptrToPointer (op, s->heap.start); + return isPointerInImmutableStaticHeap (s, p); +} + +bool isPointerInMutableStaticHeap (GC_state s, pointer p) { + return (not (isPointer (p)) + or (s->staticHeaps.mutable.start <= p + and p <= s->staticHeaps.mutable.start + s->staticHeaps.mutable.size)); +} + +bool isObjptrInMutableStaticHeap (GC_state s, objptr op) { + pointer p; + if (not (isObjptr(op))) + return TRUE; + p = objptrToPointer (op, s->heap.start); + return isPointerInMutableStaticHeap (s, p); +} + +bool isPointerInRootStaticHeap (GC_state s, pointer p) { + return (not (isPointer (p)) + or (s->staticHeaps.root.start <= p + and p <= s->staticHeaps.root.start + s->staticHeaps.root.size)); +} + +bool isObjptrInRootStaticHeap (GC_state s, objptr op) { + pointer p; + if (not (isObjptr(op))) + return TRUE; + p = objptrToPointer (op, s->heap.start); + return isPointerInRootStaticHeap (s, p); +} + +bool isPointerInImmutableMutableOrRootStaticHeap (GC_state s, pointer p) { + return (isPointerInImmutableStaticHeap (s, p) + or isPointerInMutableStaticHeap (s, p) + or isPointerInRootStaticHeap (s, p)); +} + +bool isObjptrInImmutableMutableOrRootStaticHeap (GC_state s, objptr op) { + return (isObjptrInImmutableStaticHeap (s, op) + or isObjptrInMutableStaticHeap (s, op) + or isObjptrInRootStaticHeap (s, op)); +} diff -Nru mlton-20130715/runtime/gc/static-heaps.h mlton-20210117+dfsg/runtime/gc/static-heaps.h --- mlton-20130715/runtime/gc/static-heaps.h 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/static-heaps.h 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,44 @@ +/* Copyright (C) 2019-2020 Matthew Fluet. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + */ + +#if (defined (MLTON_GC_INTERNAL_TYPES)) + +struct GC_staticHeap { + pointer start; + size_t size; +}; + +/* + * Allowed references between heap objects: + * + * I -> {I,M,R} + * M -> {I,M,R} + * R -> {I,M,R,D[*],H} [*] only during initialization + * D -> {I,M,R,D} + * H -> {I,M,R,H} + */ + +struct GC_staticHeaps { + struct GC_staticHeap dynamic; + struct GC_staticHeap immutable; + struct GC_staticHeap mutable; + struct GC_staticHeap root; +}; + +#endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ + +#if (defined (MLTON_GC_INTERNAL_FUNCS)) + +static inline bool isObjptrInImmutableStaticHeap (GC_state s, objptr op); +static inline bool isObjptrInMutableStaticHeap (GC_state s, objptr op); +static inline bool isObjptrInRootStaticHeap (GC_state s, objptr op); +static inline bool isObjptrInImmutableMutableOrRootStaticHeap (GC_state s, objptr op); +static inline bool isPointerInImmutableStaticHeap (GC_state s, pointer p); +static inline bool isPointerInMutableStaticHeap (GC_state s, pointer p); +static inline bool isPointerInRootStaticHeap (GC_state s, pointer p); +static inline bool isPointerInImmutableMutableOrRootStaticHeap (GC_state s, pointer p); + +#endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ diff -Nru mlton-20130715/runtime/gc/statistics.c mlton-20210117+dfsg/runtime/gc/statistics.c --- mlton-20130715/runtime/gc/statistics.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/statistics.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,6 +2,6 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/statistics.h mlton-20210117+dfsg/runtime/gc/statistics.h --- mlton-20130715/runtime/gc/statistics.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/statistics.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/string.c mlton-20210117+dfsg/runtime/gc/string.c --- mlton-20130715/runtime/gc/string.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/string.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/string.h mlton-20210117+dfsg/runtime/gc/string.h --- mlton-20130715/runtime/gc/string.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/string.h 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -16,16 +16,16 @@ char chars[1]; }; typedef struct GC_string8 { - GC_arrayCounter counter; - GC_arrayLength length; + GC_sequenceCounter counter; + GC_sequenceLength length; GC_header header; struct GC_string8_obj obj; } __attribute__ ((packed)) *GC_string8; COMPILE_TIME_ASSERT(GC_string8__obj_packed, offsetof(struct GC_string8, obj) == - sizeof(GC_arrayCounter) - + sizeof(GC_arrayLength) + sizeof(GC_sequenceCounter) + + sizeof(GC_sequenceLength) + sizeof(GC_header)); COMPILE_TIME_ASSERT(GC_string8_obj__chars_packed, offsetof(struct GC_string8_obj, chars) == diff -Nru mlton-20130715/runtime/gc/switch-thread.c mlton-20210117+dfsg/runtime/gc/switch-thread.c --- mlton-20130715/runtime/gc/switch-thread.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/switch-thread.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/switch-thread.h mlton-20210117+dfsg/runtime/gc/switch-thread.h --- mlton-20130715/runtime/gc/switch-thread.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/switch-thread.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/sysvals.h mlton-20210117+dfsg/runtime/gc/sysvals.h --- mlton-20130715/runtime/gc/sysvals.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/sysvals.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/thread.c mlton-20210117+dfsg/runtime/gc/thread.c --- mlton-20130715/runtime/gc/thread.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/thread.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2016,2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -10,10 +11,10 @@ GC_thread thread, FILE *stream) { fprintf(stream, - "\t\texnStack = %"PRIuMAX"\n" + "\t\texnStack = %"PRIiMAX"\n" "\t\tbytesNeeded = %"PRIuMAX"\n" "\t\tstack = "FMTOBJPTR"\n", - (uintmax_t)thread->exnStack, + (intmax_t)thread->exnStack, (uintmax_t)thread->bytesNeeded, thread->stack); displayStack (s, (GC_stack)(objptrToPointer (thread->stack, s->heap.start)), @@ -23,14 +24,14 @@ size_t sizeofThread (GC_state s) { size_t res; - res = GC_NORMAL_HEADER_SIZE + sizeof (struct GC_thread); + res = GC_NORMAL_METADATA_SIZE + sizeof (struct GC_thread); res = align (res, s->alignment); if (DEBUG) { size_t check; uint16_t bytesNonObjptrs, numObjptrs; splitHeader (s, GC_THREAD_HEADER, NULL, NULL, &bytesNonObjptrs, &numObjptrs); - check = GC_NORMAL_HEADER_SIZE + (bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE)); + check = GC_NORMAL_METADATA_SIZE + (bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE)); if (DEBUG_DETAILED) fprintf (stderr, "sizeofThread: res = %"PRIuMAX" check = %"PRIuMAX"\n", @@ -42,5 +43,5 @@ } size_t offsetofThread (GC_state s) { - return (sizeofThread (s)) - (GC_NORMAL_HEADER_SIZE + sizeof (struct GC_thread)); + return (sizeofThread (s)) - (GC_NORMAL_METADATA_SIZE + sizeof (struct GC_thread)); } diff -Nru mlton-20130715/runtime/gc/thread.h mlton-20210117+dfsg/runtime/gc/thread.h --- mlton-20130715/runtime/gc/thread.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/thread.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -14,7 +15,7 @@ * header :: * padding :: * bytesNeeded (size_t) :: - * exnStack (size_t) :: + * exnStack (ptrdiff_t) :: * stack (object-pointer) * * There may be zero or more bytes of padding for alignment purposes. @@ -22,7 +23,7 @@ * The bytesNeeded size_t is the number of bytes needed when returning * to this thread. * - * The exnStack size_t is an offset added to stackBottom that + * The exnStack ptrdiff_t is an offset added to stackBottom that * specifies the top of the exnStack. * * The final component is the stack object-pointer. @@ -33,17 +34,17 @@ */ typedef struct GC_thread { size_t bytesNeeded; - size_t exnStack; + ptrdiff_t exnStack; objptr stack; } __attribute__ ((packed)) *GC_thread; COMPILE_TIME_ASSERT(GC_thread__packed, sizeof(struct GC_thread) == sizeof(size_t) - + sizeof(size_t) + + sizeof(ptrdiff_t) + sizeof(objptr)); -#define BOGUS_EXN_STACK ((size_t)(-1)) +#define BOGUS_EXN_STACK ((ptrdiff_t)(-1)) #else diff -Nru mlton-20130715/runtime/gc/translate.c mlton-20210117+dfsg/runtime/gc/translate.c --- mlton-20130715/runtime/gc/translate.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/translate.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2010 Matthew Fluet. +/* Copyright (C) 2010,2019-2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -11,16 +11,25 @@ /* translateHeap */ /* ---------------------------------------------------------------- */ -void translateObjptr (GC_state s, - objptr *opp) { +typedef struct GC_translateState { + pointer from; + pointer to; + size_t size; +} *GC_translateState; + +void translateFun (__attribute__((unused)) GC_state s, objptr *opp, void *env) { + GC_translateState translateState = env; pointer p; pointer from, to; - from = s->translateState.from; - to = s->translateState.to; + from = translateState->from; + to = translateState->to; p = objptrToPointer (*opp, from); - p = (p - from) + to; - *opp = pointerToObjptr (p, to); + if ((from <= p) and + (p < from + translateState->size)) { + p = (p - from) + to; + *opp = pointerToObjptr (p, to); + } } /* translateHeap (s, from, to, size) @@ -33,14 +42,14 @@ if (DEBUG or s->controls.messages) fprintf (stderr, - "[GC: Translating old-gen of size %s bytes of heap at "FMTPTR" from "FMTPTR".]\n", + "[GC: Translating %s bytes of heap at "FMTPTR" from "FMTPTR".]\n", uintmaxToCommaString(size), (uintptr_t)to, (uintptr_t)from); - s->translateState.from = from; - s->translateState.to = to; + struct GC_translateState translateState = {.from = from, .to = to, .size = size}; + struct GC_foreachObjptrClosure translateClosure = {.fun = translateFun, .env = &translateState}; /* Translate globals and heap. */ - foreachGlobalObjptr (s, translateObjptr); + foreachGlobalObjptr (s, &translateClosure); limit = to + size; - foreachObjptrInRange (s, alignFrontier (s, to), &limit, translateObjptr, FALSE); + foreachObjptrInRange (s, alignFrontier (s, to), &limit, &translateClosure, FALSE); } diff -Nru mlton-20130715/runtime/gc/translate.h mlton-20210117+dfsg/runtime/gc/translate.h --- mlton-20130715/runtime/gc/translate.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/translate.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,23 +1,15 @@ -/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ -#if (defined (MLTON_GC_INTERNAL_TYPES)) - -struct GC_translateState { - pointer from; - pointer to; -}; - -#endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */ - #if (defined (MLTON_GC_INTERNAL_FUNCS)) -static inline void translateObjptr (GC_state s, objptr *opp); +static inline void translateFun (GC_state s, objptr *opp, void *env); static void translateHeap (GC_state s, pointer from, pointer to, size_t size); #endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */ diff -Nru mlton-20130715/runtime/gc/virtual-memory.c mlton-20210117+dfsg/runtime/gc/virtual-memory.c --- mlton-20130715/runtime/gc/virtual-memory.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/virtual-memory.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,16 +1,16 @@ -/* Copyright (C) 2010 Matthew Fluet. +/* Copyright (C) 2010,2017 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ -void *GC_mmapAnon_safe (void *p, size_t length) { +void *GC_mmapAnonFlags_safe (void *p, size_t length, int flags) { void *result; - result = GC_mmapAnon (p, length); + result = GC_mmapAnonFlags (p, length, flags); if ((void*)-1 == result) { GC_displayMem (); die ("Out of memory. Unable to allocate %s bytes.\n", @@ -19,13 +19,14 @@ return result; } +void *GC_mmapAnon_safe (void *p, size_t length) { + return GC_mmapAnonFlags_safe (p, length, 0); +} + static inline void GC_memcpy (pointer src, pointer dst, size_t size) { if (DEBUG_DETAILED) fprintf (stderr, "GC_memcpy ("FMTPTR", "FMTPTR", %"PRIuMAX")\n", (uintptr_t)src, (uintptr_t)dst, (uintmax_t)size); - assert (isAligned ((size_t)src, sizeof(unsigned int))); - assert (isAligned ((size_t)dst, sizeof(unsigned int))); - assert (isAligned (size, sizeof(unsigned int))); assert (! (src <= dst and dst < src + size)); assert (! (dst <= src and src < dst + size)); memcpy (dst, src, size); @@ -35,9 +36,6 @@ if (DEBUG_DETAILED) fprintf (stderr, "GC_memmove ("FMTPTR", "FMTPTR", %"PRIuMAX")\n", (uintptr_t)src, (uintptr_t)dst, (uintmax_t)size); - assert (isAligned ((size_t)src, sizeof(unsigned int))); - assert (isAligned ((size_t)dst, sizeof(unsigned int))); - assert (isAligned (size, sizeof(unsigned int))); if (src == dst) return; memmove (dst, src, size); diff -Nru mlton-20130715/runtime/gc/weak.c mlton-20210117+dfsg/runtime/gc/weak.c --- mlton-20130715/runtime/gc/weak.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/weak.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,22 +1,23 @@ -/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2016 Matthew Fluet. + * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ size_t sizeofWeak (GC_state s) { size_t res; - res = GC_NORMAL_HEADER_SIZE + sizeof (struct GC_weak); + res = GC_NORMAL_METADATA_SIZE + sizeof (struct GC_weak); res = align (res, s->alignment); if (DEBUG) { size_t check; uint16_t bytesNonObjptrs, numObjptrs; splitHeader (s, GC_WEAK_GONE_HEADER, NULL, NULL, &bytesNonObjptrs, &numObjptrs); - check = GC_NORMAL_HEADER_SIZE + (bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE)); + check = GC_NORMAL_METADATA_SIZE + (bytesNonObjptrs + (numObjptrs * OBJPTR_SIZE)); if (DEBUG_DETAILED) fprintf (stderr, "sizeofWeak: res = %"PRIuMAX" check = %"PRIuMAX"\n", @@ -28,7 +29,7 @@ } size_t offsetofWeak (GC_state s) { - return (sizeofWeak (s)) - (GC_NORMAL_HEADER_SIZE + sizeof (struct GC_weak)); + return (sizeofWeak (s)) - (GC_NORMAL_METADATA_SIZE + sizeof (struct GC_weak)); } uint32_t GC_weakCanGet (__attribute__ ((unused)) GC_state s, pointer p) { diff -Nru mlton-20130715/runtime/gc/weak.h mlton-20210117+dfsg/runtime/gc/weak.h --- mlton-20130715/runtime/gc/weak.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/weak.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc/world.c mlton-20210117+dfsg/runtime/gc/world.c --- mlton-20130715/runtime/gc/world.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/world.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -16,6 +17,10 @@ magic = readUint32 (f); unless (s->magic == magic) die ("Invalid world: wrong magic number."); + unless ((uintptr_t)MLton_gcState == (uintptr_t)(readPointer (f))) + die ("Invalid world: wrong code address; load-world incompatible with PIE and/or ASLR"); + unless ((pointer)s == readPointer (f)) + die ("Invalid world: wrong static-data address; load-world incompatible with PIE and/or ASLR"); start = readPointer (f); s->heap.oldGenSize = readSize (f); s->atomicState = readUint32 (f); @@ -26,10 +31,13 @@ sizeofHeapDesired (s, s->heap.oldGenSize, 0), s->heap.oldGenSize); setCardMapAndCrossMap (s); + fread_safe (s->staticHeaps.mutable.start, 1, s->staticHeaps.mutable.size, f); + fread_safe (s->staticHeaps.root.start, 1, s->staticHeaps.root.size, f); fread_safe (s->heap.start, 1, s->heap.oldGenSize, f); - if ((*(s->loadGlobals)) (f) != 0) diee("couldn't load globals"); - // unless (EOF == fgetc (file)) - // die ("Invalid world: junk at end of file."); + if ((*(s->loadGlobals)) (f) != 0) + diee ("Invalid world: failed to load globals."); + unless (EOF == fgetc (f)) + die ("Invalid world: unexpected data at end of file."); /* translateHeap must occur after loading the heap and globals, * since it changes pointers in all of them. */ @@ -49,11 +57,12 @@ } /* Don't use 'safe' functions, because we don't want the ML program to die. - * Instead, check return values, and propogate them up to SML for an exception. + * Instead, check return values, and propagate them up to SML for an exception. */ int saveWorldToFILE (GC_state s, FILE *f) { char buf[128]; size_t len; + uintptr_t gcStateFn; if (DEBUG_WORLD) fprintf (stderr, "saveWorldToFILE\n"); @@ -67,6 +76,9 @@ if (fwrite (buf, 1, len, f) != len) return -1; if (fwrite (&s->magic, sizeof(uint32_t), 1, f) != 1) return -1; + gcStateFn = (uintptr_t)MLton_gcState; + if (fwrite (&gcStateFn, sizeof(uintptr_t), 1, f) != 1) return -1; + if (fwrite (&s, sizeof(uintptr_t), 1, f) != 1) return -1; if (fwrite (&s->heap.start, sizeof(uintptr_t), 1, f) != 1) return -1; if (fwrite (&s->heap.oldGenSize, sizeof(size_t), 1, f) != 1) return -1; @@ -79,6 +91,10 @@ if (fwrite (&s->currentThread, sizeof(objptr), 1, f) != 1) return -1; if (fwrite (&s->signalHandlerThread, sizeof(objptr), 1, f) != 1) return -1; + if (fwrite (s->staticHeaps.mutable.start, 1, s->staticHeaps.mutable.size, f) != s->staticHeaps.mutable.size) + return -1; + if (fwrite (s->staticHeaps.root.start, 1, s->staticHeaps.root.size, f) != s->staticHeaps.root.size) + return -1; if (fwrite (s->heap.start, 1, s->heap.oldGenSize, f) != s->heap.oldGenSize) return -1; if ((*(s->saveGlobals)) (f) != 0) diff -Nru mlton-20130715/runtime/gc/world.h mlton-20210117+dfsg/runtime/gc/world.h --- mlton-20130715/runtime/gc/world.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc/world.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/gc.c mlton-20210117+dfsg/runtime/gc.c --- mlton-20130715/runtime/gc.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2014,2020 Matthew Fluet. * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -24,11 +24,6 @@ #include "gc/align.c" #include "gc/read_write.c" -/* Import the global gcState (but try not to use it too much). */ -extern struct GC_state gcState; - -#include "gc/array-allocate.c" -#include "gc/array.c" #include "gc/atomic.c" #include "gc/call-stack.c" #include "gc/cheney-copy.c" @@ -62,11 +57,14 @@ #include "gc/pointer.c" #include "gc/profiling.c" #include "gc/rusage.c" +#include "gc/sequence-allocate.c" +#include "gc/sequence.c" #include "gc/share.c" #include "gc/signals.c" #include "gc/size.c" #include "gc/sources.c" #include "gc/stack.c" +#include "gc/static-heaps.c" #include "gc/switch-thread.c" #include "gc/thread.c" #include "gc/translate.c" diff -Nru mlton-20130715/runtime/gc.h mlton-20210117+dfsg/runtime/gc.h --- mlton-20130715/runtime/gc.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gc.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,8 +1,9 @@ -/* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh +/* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -30,8 +31,11 @@ #include "gc/pointer.h" #include "gc/objptr.h" #include "gc/object.h" -#include "gc/array.h" +#include "gc/sequence.h" +#include "gc/sources.h" #include "gc/frame.h" +#include "gc/static-heaps.h" +#include "gc/foreach.h" #include "gc/stack.h" #include "gc/thread.h" #include "gc/weak.h" @@ -41,7 +45,6 @@ #include "gc/generational.h" #include "gc/heap.h" #include "gc/current.h" -#include "gc/foreach.h" #include "gc/translate.h" #include "gc/sysvals.h" #include "gc/controls.h" @@ -60,8 +63,7 @@ #include "gc/switch-thread.h" #include "gc/garbage-collection.h" #include "gc/new-object.h" -#include "gc/array-allocate.h" -#include "gc/sources.h" +#include "gc/sequence-allocate.h" #include "gc/call-stack.h" #include "gc/profiling.h" #include "gc/rusage.h" diff -Nru mlton-20130715/runtime/gdtoa/arithchk.c mlton-20210117+dfsg/runtime/gdtoa/arithchk.c --- mlton-20130715/runtime/gdtoa/arithchk.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/arithchk.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,182 @@ +/**************************************************************** +Copyright (C) 1997, 1998 Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. +****************************************************************/ + +/* Try to deduce arith.h from arithmetic properties. */ + +#include + + static int dalign; + typedef struct +Akind { + char *name; + int kind; + } Akind; + + static Akind +IEEE_8087 = { "IEEE_8087", 1 }, +IEEE_MC68k = { "IEEE_MC68k", 2 }, +IBM = { "IBM", 3 }, +VAX = { "VAX", 4 }, +CRAY = { "CRAY", 5}; + + static Akind * +Lcheck(void) +{ + union { + double d; + long L[2]; + } __attribute__((__may_alias__)) u; + struct { + double d; + long L; + } x[2]; + + if (sizeof(x) > 2*(sizeof(double) + sizeof(long))) + dalign = 1; + u.L[0] = u.L[1] = 0; + u.d = 1e13; + if (u.L[0] == 1117925532 && u.L[1] == -448790528) + return &IEEE_MC68k; + if (u.L[1] == 1117925532 && u.L[0] == -448790528) + return &IEEE_8087; + if (u.L[0] == -2065213935 && u.L[1] == 10752) + return &VAX; + if (u.L[0] == 1267827943 && u.L[1] == 704643072) + return &IBM; + return 0; + } + + static Akind * +icheck(void) +{ + union { + double d; + int L[2]; + } __attribute__((__may_alias__)) u; + struct { + double d; + int L; + } x[2]; + + if (sizeof(x) > 2*(sizeof(double) + sizeof(int))) + dalign = 1; + u.L[0] = u.L[1] = 0; + u.d = 1e13; + if (u.L[0] == 1117925532 && u.L[1] == -448790528) + return &IEEE_MC68k; + if (u.L[1] == 1117925532 && u.L[0] == -448790528) + return &IEEE_8087; + if (u.L[0] == -2065213935 && u.L[1] == 10752) + return &VAX; + if (u.L[0] == 1267827943 && u.L[1] == 704643072) + return &IBM; + return 0; + } + + static Akind * +ccheck(int ac, char **av) +{ + union { + double d; + long L; + } __attribute__((__may_alias__)) u; + long Cray1; + + /* Cray1 = 4617762693716115456 -- without overflow on non-Crays */ + /* The next three tests should always be true. */ + Cray1 = ac >= -2 ? 4617762 : 0; + if (ac >= -1) + Cray1 = 1000000*Cray1 + 693716; + if (av || ac >= 0) + Cray1 = 1000000*Cray1 + 115456; + u.d = 1e13; + if (u.L == Cray1) + return &CRAY; + return 0; + } + + static int +fzcheck(void) +{ + double a, b; + int i; + + a = 1.; + b = .1; + for(i = 155;; b *= b, i >>= 1) { + if (i & 1) { + a *= b; + if (i == 1) + break; + } + } + b = a * a; + return b == 0.; + } + + int +main(int argc, char **argv) +{ + Akind *a = 0; + int Ldef = 0; + FILE *f; + +#ifdef WRITE_ARITH_H /* for Symantec's buggy "make" */ + f = fopen("arith.h", "w"); + if (!f) { + printf("Cannot open arith.h\n"); + return 1; + } +#else + f = stdout; +#endif + + if (sizeof(double) == 2*sizeof(long)) + a = Lcheck(); + else if (sizeof(double) == 2*sizeof(int)) { + Ldef = 1; + a = icheck(); + } + else if (sizeof(double) == sizeof(long)) + a = ccheck(argc, argv); + if (a) { + fprintf(f, "#define %s\n#define Arith_Kind_ASL %d\n", + a->name, a->kind); + if (Ldef) + fprintf(f, "#define Long int\n#define Intcast (int)(long)\n"); + if (dalign) + fprintf(f, "#define Double_Align\n"); + if (sizeof(char*) == 8) + fprintf(f, "#define X64_bit_pointers\n"); +#ifndef NO_LONG_LONG + if (sizeof(long long) < 8) +#endif + fprintf(f, "#define NO_LONG_LONG\n"); + if (a->kind <= 2 && fzcheck()) + fprintf(f, "#define Sudden_Underflow\n"); + return 0; + } + fprintf(f, "/* Unknown arithmetic */\n"); + return 1; + } diff -Nru mlton-20130715/runtime/gdtoa/dmisc.c mlton-20210117+dfsg/runtime/gdtoa/dmisc.c --- mlton-20130715/runtime/gdtoa/dmisc.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/dmisc.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,219 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#ifndef MULTIPLE_THREADS + char *dtoa_result; +#endif + + char * +#ifdef KR_headers +rv_alloc(i MTa) int i; MTk +#else +rv_alloc(int i MTd) +#endif +{ + int j, k, *r; + + j = sizeof(ULong); + for(k = 0; + (int)(sizeof(Bigint) - sizeof(ULong) - sizeof(int)) + j <= i; + j <<= 1) + k++; + r = (int*)Balloc(k MTa); + *r = k; + return +#ifndef MULTIPLE_THREADS + dtoa_result = +#endif + (char *)(r+1); + } + + char * +#ifdef KR_headers +nrv_alloc(s, rve, n MTa) char *s, **rve; int n; MTk +#else +nrv_alloc(char *s, char **rve, int n MTd) +#endif +{ + char *rv, *t; + + t = rv = rv_alloc(n MTa); + while((*t = *s++) !=0) + t++; + if (rve) + *rve = t; + return rv; + } + +/* freedtoa(s) must be used to free values s returned by dtoa + * when MULTIPLE_THREADS is #defined. It should be used in all cases, + * but for consistency with earlier versions of dtoa, it is optional + * when MULTIPLE_THREADS is not defined. + */ + + void +#ifdef KR_headers +gdtoa__freedtoa(s) char *s; +#else +gdtoa__freedtoa(char *s) +#endif +{ +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif + Bigint *b = (Bigint *)((int *)s - 1); + b->maxwds = 1 << (b->k = *(int*)b); + Bfree(b MTb); +#ifndef MULTIPLE_THREADS + if (s == dtoa_result) + dtoa_result = 0; +#endif + } + + int +quorem +#ifdef KR_headers + (b, S) Bigint *b, *S; +#else + (Bigint *b, Bigint *S) +#endif +{ + int n; + ULong *bx, *bxe, q, *sx, *sxe; +#ifdef ULLong + ULLong borrow, carry, y, ys; +#else + ULong borrow, carry, y, ys; +#ifdef Pack_32 + ULong si, z, zs; +#endif +#endif + + n = S->wds; +#ifdef DEBUG + /*debug*/ if (b->wds > n) + /*debug*/ Bug("oversize b in quorem"); +#endif + if (b->wds < n) + return 0; + sx = S->x; + sxe = sx + --n; + bx = b->x; + bxe = bx + n; + q = *bxe / (*sxe + 1); /* ensure q <= true quotient */ +#ifdef DEBUG + /*debug*/ if (q > 9) + /*debug*/ Bug("oversized quotient in quorem"); +#endif + if (q) { + borrow = 0; + carry = 0; + do { +#ifdef ULLong + ys = *sx++ * (ULLong)q + carry; + carry = ys >> 32; + y = *bx - (ys & 0xffffffffUL) - borrow; + borrow = y >> 32 & 1UL; + *bx++ = y & 0xffffffffUL; +#else +#ifdef Pack_32 + si = *sx++; + ys = (si & 0xffff) * q + carry; + zs = (si >> 16) * q + (ys >> 16); + carry = zs >> 16; + y = (*bx & 0xffff) - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*bx >> 16) - (zs & 0xffff) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(bx, z, y); +#else + ys = *sx++ * q + carry; + carry = ys >> 16; + y = *bx - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + *bx++ = y & 0xffff; +#endif +#endif + } + while(sx <= sxe); + if (!*bxe) { + bx = b->x; + while(--bxe > bx && !*bxe) + --n; + b->wds = n; + } + } + if (cmp(b, S) >= 0) { + q++; + borrow = 0; + carry = 0; + bx = b->x; + sx = S->x; + do { +#ifdef ULLong + ys = *sx++ + carry; + carry = ys >> 32; + y = *bx - (ys & 0xffffffffUL) - borrow; + borrow = y >> 32 & 1UL; + *bx++ = y & 0xffffffffUL; +#else +#ifdef Pack_32 + si = *sx++; + ys = (si & 0xffff) + carry; + zs = (si >> 16) + (ys >> 16); + carry = zs >> 16; + y = (*bx & 0xffff) - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*bx >> 16) - (zs & 0xffff) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(bx, z, y); +#else + ys = *sx++ + carry; + carry = ys >> 16; + y = *bx - (ys & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + *bx++ = y & 0xffff; +#endif +#endif + } + while(sx <= sxe); + bx = b->x; + bxe = bx + n; + if (!*bxe) { + while(--bxe > bx && !*bxe) + --n; + b->wds = n; + } + } + return q; + } diff -Nru mlton-20130715/runtime/gdtoa/dtoa.c mlton-20210117+dfsg/runtime/gdtoa/dtoa.c --- mlton-20130715/runtime/gdtoa/dtoa.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/dtoa.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,799 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 1999 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string. + * + * Inspired by "How to Print Floating-Point Numbers Accurately" by + * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126]. + * + * Modifications: + * 1. Rather than iterating, we use a simple numeric overestimate + * to determine k = floor(log10(d)). We scale relevant + * quantities using O(log2(k)) rather than O(k) multiplications. + * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't + * try to generate digits strictly left to right. Instead, we + * compute with fewer bits and propagate the carry if necessary + * when rounding the final digit up. This is often faster. + * 3. Under the assumption that input will be rounded nearest, + * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22. + * That is, we allow equality in stopping tests when the + * round-nearest rule will give the same floating-point value + * as would satisfaction of the stopping test with strict + * inequality. + * 4. We remove common factors of powers of 2 from relevant + * quantities. + * 5. When converting floating-point integers less than 1e16, + * we use floating-point arithmetic rather than resorting + * to multiple-precision integers. + * 6. When asked to produce fewer than 15 digits, we first try + * to get by with floating-point arithmetic; we resort to + * multiple-precision integer arithmetic only if we cannot + * guarantee that the floating-point calculation has given + * the correctly rounded result. For k requested digits and + * "uniformly" distributed input, the probability is + * something like 10^(k-15) that we must resort to the Long + * calculation. + */ + +#ifdef Honor_FLT_ROUNDS +#undef Check_FLT_ROUNDS +#define Check_FLT_ROUNDS +#else +#define Rounding Flt_Rounds +#endif + + char * +gdtoa__dtoa +#ifdef KR_headers + (d0, mode, ndigits, decpt, sign, rve) + double d0; int mode, ndigits, *decpt, *sign; char **rve; +#else + (double d0, int mode, int ndigits, int *decpt, int *sign, char **rve) +#endif +{ + /* Arguments ndigits, decpt, sign are similar to those + of ecvt and fcvt; trailing zeros are suppressed from + the returned string. If not null, *rve is set to point + to the end of the return value. If d is +-Infinity or NaN, + then *decpt is set to 9999. + + mode: + 0 ==> shortest string that yields d when read in + and rounded to nearest. + 1 ==> like 0, but with Steele & White stopping rule; + e.g. with IEEE P754 arithmetic , mode 0 gives + 1e23 whereas mode 1 gives 9.999999999999999e22. + 2 ==> max(1,ndigits) significant digits. This gives a + return value similar to that of ecvt, except + that trailing zeros are suppressed. + 3 ==> through ndigits past the decimal point. This + gives a return value similar to that from fcvt, + except that trailing zeros are suppressed, and + ndigits can be negative. + 4,5 ==> similar to 2 and 3, respectively, but (in + round-nearest mode) with the tests of mode 0 to + possibly return a shorter string that rounds to d. + With IEEE arithmetic and compilation with + -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same + as modes 2 and 3 when FLT_ROUNDS != 1. + 6-9 ==> Debugging modes similar to mode - 4: don't try + fast floating-point estimate (if applicable). + + Values of mode other than 0-9 are treated as mode 0. + + Sufficient space is allocated to the return value + to hold the suppressed trailing zeros. + */ + +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif + int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1, + j, j1, k, k0, k_check, leftright, m2, m5, s2, s5, + spec_case, try_quick; + Long L; +#ifndef Sudden_Underflow + int denorm; + ULong x; +#endif + Bigint *b, *b1, *delta, *mlo, *mhi, *S; + U d, d2, eps, eps1; + double ds; + char *s, *s0; +#ifdef SET_INEXACT + int inexact, oldinexact; +#endif +#ifdef Honor_FLT_ROUNDS /*{*/ + int Rounding; +#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */ + Rounding = Flt_Rounds; +#else /*}{*/ + Rounding = 1; + switch(fegetround()) { + case FE_TOWARDZERO: Rounding = 0; break; + case FE_UPWARD: Rounding = 2; break; + case FE_DOWNWARD: Rounding = 3; + } +#endif /*}}*/ +#endif /*}*/ + +#ifndef MULTIPLE_THREADS + if (dtoa_result) { + gdtoa__freedtoa(dtoa_result); + dtoa_result = 0; + } +#endif + d.d = d0; + if (word0(&d) & Sign_bit) { + /* set sign for everything, including 0's and NaNs */ + *sign = 1; + word0(&d) &= ~Sign_bit; /* clear sign bit */ + } + else + *sign = 0; + +#if defined(IEEE_Arith) + defined(VAX) +#ifdef IEEE_Arith + if ((word0(&d) & Exp_mask) == Exp_mask) +#else + if (word0(&d) == 0x8000) +#endif + { + /* Infinity or NaN */ + *decpt = 9999; +#ifdef IEEE_Arith + if (!word1(&d) && !(word0(&d) & 0xfffff)) + return nrv_alloc("Infinity", rve, 8 MTb); +#endif + return nrv_alloc("NaN", rve, 3 MTb); + } +#endif +#ifdef IBM + dval(&d) += 0; /* normalize */ +#endif + if (!dval(&d)) { + *decpt = 1; + return nrv_alloc("0", rve, 1 MTb); + } + +#ifdef SET_INEXACT + try_quick = oldinexact = get_inexact(); + inexact = 1; +#endif +#ifdef Honor_FLT_ROUNDS + if (Rounding >= 2) { + if (*sign) + Rounding = Rounding == 2 ? 0 : 2; + else + if (Rounding != 2) + Rounding = 0; + } +#endif + + b = d2b(dval(&d), &be, &bbits MTb); +#ifdef Sudden_Underflow + i = (int)(word0(&d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)); +#else + if (( i = (int)(word0(&d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)) )!=0) { +#endif + dval(&d2) = dval(&d); + word0(&d2) &= Frac_mask1; + word0(&d2) |= Exp_11; +#ifdef IBM + if (( j = 11 - hi0bits(word0(&d2) & Frac_mask) )!=0) + dval(&d2) /= 1 << j; +#endif + + /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 + * log10(x) = log(x) / log(10) + * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10)) + * log10(&d) = (i-Bias)*log(2)/log(10) + log10(&d2) + * + * This suggests computing an approximation k to log10(&d) by + * + * k = (i - Bias)*0.301029995663981 + * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 ); + * + * We want k to be too large rather than too small. + * The error in the first-order Taylor series approximation + * is in our favor, so we just round up the constant enough + * to compensate for any error in the multiplication of + * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077, + * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14, + * adding 1e-13 to the constant term more than suffices. + * Hence we adjust the constant term to 0.1760912590558. + * (We could get a more accurate k by invoking log10, + * but this is probably not worthwhile.) + */ + + i -= Bias; +#ifdef IBM + i <<= 2; + i += j; +#endif +#ifndef Sudden_Underflow + denorm = 0; + } + else { + /* d is denormalized */ + + i = bbits + be + (Bias + (P-1) - 1); + x = i > 32 ? word0(&d) << (64 - i) | word1(&d) >> (i - 32) + : word1(&d) << (32 - i); + dval(&d2) = x; + word0(&d2) -= 31*Exp_msk1; /* adjust exponent */ + i -= (Bias + (P-1) - 1) + 1; + denorm = 1; + } +#endif + ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981; + k = (int)ds; + if (ds < 0. && ds != k) + k--; /* want k = floor(ds) */ + k_check = 1; + if (k >= 0 && k <= Ten_pmax) { + if (dval(&d) < tens[k]) + k--; + k_check = 0; + } + j = bbits - i - 1; + if (j >= 0) { + b2 = 0; + s2 = j; + } + else { + b2 = -j; + s2 = 0; + } + if (k >= 0) { + b5 = 0; + s5 = k; + s2 += k; + } + else { + b2 -= k; + b5 = -k; + s5 = 0; + } + if (mode < 0 || mode > 9) + mode = 0; + +#ifndef SET_INEXACT +#ifdef Check_FLT_ROUNDS + try_quick = Rounding == 1; +#else + try_quick = 1; +#endif +#endif /*SET_INEXACT*/ + + if (mode > 5) { + mode -= 4; + try_quick = 0; + } + leftright = 1; + ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */ + /* silence erroneous "gcc -Wall" warning. */ + switch(mode) { + case 0: + case 1: + i = 18; + ndigits = 0; + break; + case 2: + leftright = 0; + /* no break */ + case 4: + if (ndigits <= 0) + ndigits = 1; + ilim = ilim1 = i = ndigits; + break; + case 3: + leftright = 0; + /* no break */ + case 5: + i = ndigits + k + 1; + ilim = i; + ilim1 = i - 1; + if (i <= 0) + i = 1; + } + s = s0 = rv_alloc(i MTb); + +#ifdef Honor_FLT_ROUNDS + if (mode > 1 && Rounding != 1) + leftright = 0; +#endif + + if (ilim >= 0 && ilim <= Quick_max && try_quick) { + + /* Try to get by with floating-point arithmetic. */ + + i = 0; + dval(&d2) = dval(&d); + k0 = k; + ilim0 = ilim; + ieps = 2; /* conservative */ + if (k > 0) { + ds = tens[k&0xf]; + j = k >> 4; + if (j & Bletch) { + /* prevent overflows */ + j &= Bletch - 1; + dval(&d) /= bigtens[n_bigtens-1]; + ieps++; + } + for(; j; j >>= 1, i++) + if (j & 1) { + ieps++; + ds *= bigtens[i]; + } + dval(&d) /= ds; + } + else if (( j1 = -k )!=0) { + dval(&d) *= tens[j1 & 0xf]; + for(j = j1 >> 4; j; j >>= 1, i++) + if (j & 1) { + ieps++; + dval(&d) *= bigtens[i]; + } + } + if (k_check && dval(&d) < 1. && ilim > 0) { + if (ilim1 <= 0) + goto fast_failed; + ilim = ilim1; + k--; + dval(&d) *= 10.; + ieps++; + } + dval(&eps) = ieps*dval(&d) + 7.; + word0(&eps) -= (P-1)*Exp_msk1; + if (ilim == 0) { + S = mhi = 0; + dval(&d) -= 5.; + if (dval(&d) > dval(&eps)) + goto one_digit; + if (dval(&d) < -dval(&eps)) + goto no_digits; + goto fast_failed; + } +#ifndef No_leftright + if (leftright) { + /* Use Steele & White method of only + * generating digits needed. + */ + dval(&eps) = 0.5/tens[ilim-1] - dval(&eps); + if (k0 < 0 && j1 >= 307) { + eps1.d = 1.01e256; /* 1.01 allows roundoff in the next few lines */ + word0(&eps1) -= Exp_msk1 * (Bias+P-1); + dval(&eps1) *= tens[j1 & 0xf]; + for(i = 0, j = (j1-256) >> 4; j; j >>= 1, i++) + if (j & 1) + dval(&eps1) *= bigtens[i]; + if (eps.d < eps1.d) + eps.d = eps1.d; + if (10. - d.d < 10.*eps.d && eps.d < 1.) { + /* eps.d < 1. excludes trouble with the tiniest denormal */ + *s++ = '1'; + ++k; + goto ret1; + } + } + for(i = 0;;) { + L = dval(&d); + dval(&d) -= L; + *s++ = '0' + (int)L; + if (dval(&d) < dval(&eps)) + goto retc; + if (1. - dval(&d) < dval(&eps)) + goto bump_up; + if (++i >= ilim) + break; + dval(&eps) *= 10.; + dval(&d) *= 10.; + } + } + else { +#endif + /* Generate ilim digits, then fix them up. */ + dval(&eps) *= tens[ilim-1]; + for(i = 1;; i++, dval(&d) *= 10.) { + L = (Long)(dval(&d)); + if (!(dval(&d) -= L)) + ilim = i; + *s++ = '0' + (int)L; + if (i == ilim) { + if (dval(&d) > 0.5 + dval(&eps)) + goto bump_up; + else if (dval(&d) < 0.5 - dval(&eps)) + goto retc; + break; + } + } +#ifndef No_leftright + } +#endif + fast_failed: + s = s0; + dval(&d) = dval(&d2); + k = k0; + ilim = ilim0; + } + + /* Do we have a "small" integer? */ + + if (be >= 0 && k <= Int_max) { + /* Yes. */ + ds = tens[k]; + if (ndigits < 0 && ilim <= 0) { + S = mhi = 0; + if (ilim < 0 || dval(&d) <= 5*ds) + goto no_digits; + goto one_digit; + } + for(i = 1;; i++, dval(&d) *= 10.) { + L = (Long)(dval(&d) / ds); + dval(&d) -= L*ds; +#ifdef Check_FLT_ROUNDS + /* If FLT_ROUNDS == 2, L will usually be high by 1 */ + if (dval(&d) < 0) { + L--; + dval(&d) += ds; + } +#endif + *s++ = '0' + (int)L; + if (!dval(&d)) { +#ifdef SET_INEXACT + inexact = 0; +#endif + break; + } + if (i == ilim) { +#ifdef Honor_FLT_ROUNDS + if (mode > 1) + switch(Rounding) { + case 0: goto retc; + case 2: goto bump_up; + } +#endif + dval(&d) += dval(&d); +#ifdef ROUND_BIASED + if (dval(&d) >= ds) +#else + if (dval(&d) > ds || (dval(&d) == ds && L & 1)) +#endif + { + bump_up: + while(*--s == '9') + if (s == s0) { + k++; + *s = '0'; + break; + } + ++*s++; + } + break; + } + } + goto retc; + } + + m2 = b2; + m5 = b5; + mhi = mlo = 0; + if (leftright) { + i = +#ifndef Sudden_Underflow + denorm ? be + (Bias + (P-1) - 1 + 1) : +#endif +#ifdef IBM + 1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3); +#else + 1 + P - bbits; +#endif + b2 += i; + s2 += i; + mhi = i2b(1 MTb); + } + if (m2 > 0 && s2 > 0) { + i = m2 < s2 ? m2 : s2; + b2 -= i; + m2 -= i; + s2 -= i; + } + if (b5 > 0) { + if (leftright) { + if (m5 > 0) { + mhi = pow5mult(mhi, m5 MTb); + b1 = mult(mhi, b MTb); + Bfree(b MTb); + b = b1; + } + if (( j = b5 - m5 )!=0) + b = pow5mult(b, j MTb); + } + else + b = pow5mult(b, b5 MTb); + } + S = i2b(1 MTb); + if (s5 > 0) + S = pow5mult(S, s5 MTb); + + /* Check for special case that d is a normalized power of 2. */ + + spec_case = 0; + if ((mode < 2 || leftright) +#ifdef Honor_FLT_ROUNDS + && Rounding == 1 +#endif + ) { + if (!word1(&d) && !(word0(&d) & Bndry_mask) +#ifndef Sudden_Underflow + && word0(&d) & (Exp_mask & ~Exp_msk1) +#endif + ) { + /* The special case */ + b2 += Log2P; + s2 += Log2P; + spec_case = 1; + } + } + + /* Arrange for convenient computation of quotients: + * shift left if necessary so divisor has 4 leading 0 bits. + * + * Perhaps we should just compute leading 28 bits of S once + * and for all and pass them and a shift to quorem, so it + * can do shifts and ors to compute the numerator for q. + */ +#ifdef Pack_32 + if (( i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f )!=0) + i = 32 - i; +#else + if (( i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf )!=0) + i = 16 - i; +#endif + if (i > 4) { + i -= 4; + b2 += i; + m2 += i; + s2 += i; + } + else if (i < 4) { + i += 28; + b2 += i; + m2 += i; + s2 += i; + } + if (b2 > 0) + b = lshift(b, b2 MTb); + if (s2 > 0) + S = lshift(S, s2 MTb); + if (k_check) { + if (cmp(b,S) < 0) { + k--; + b = multadd(b, 10, 0 MTb); /* we botched the k estimate */ + if (leftright) + mhi = multadd(mhi, 10, 0 MTb); + ilim = ilim1; + } + } + if (ilim <= 0 && (mode == 3 || mode == 5)) { + if (ilim < 0 || cmp(b,S = multadd(S,5,0 MTb)) <= 0) { + /* no digits, fcvt style */ + no_digits: + k = -1 - ndigits; + goto ret; + } + one_digit: + *s++ = '1'; + k++; + goto ret; + } + if (leftright) { + if (m2 > 0) + mhi = lshift(mhi, m2 MTb); + + /* Compute mlo -- check for special case + * that d is a normalized power of 2. + */ + + mlo = mhi; + if (spec_case) { + mhi = Balloc(mhi->k MTb); + Bcopy(mhi, mlo); + mhi = lshift(mhi, Log2P MTb); + } + + for(i = 1;;i++) { + dig = quorem(b,S) + '0'; + /* Do we yet have the shortest decimal string + * that will round to d? + */ + j = cmp(b, mlo); + delta = diff(S, mhi MTb); + j1 = delta->sign ? 1 : cmp(b, delta); + Bfree(delta MTb); +#ifndef ROUND_BIASED + if (j1 == 0 && mode != 1 && !(word1(&d) & 1) +#ifdef Honor_FLT_ROUNDS + && Rounding >= 1 +#endif + ) { + if (dig == '9') + goto round_9_up; + if (j > 0) + dig++; +#ifdef SET_INEXACT + else if (!b->x[0] && b->wds <= 1) + inexact = 0; +#endif + *s++ = dig; + goto ret; + } +#endif + if (j < 0 || (j == 0 && mode != 1 +#ifndef ROUND_BIASED + && !(word1(&d) & 1) +#endif + )) { + if (!b->x[0] && b->wds <= 1) { +#ifdef SET_INEXACT + inexact = 0; +#endif + goto accept_dig; + } +#ifdef Honor_FLT_ROUNDS + if (mode > 1) + switch(Rounding) { + case 0: goto accept_dig; + case 2: goto keep_dig; + } +#endif /*Honor_FLT_ROUNDS*/ + if (j1 > 0) { + b = lshift(b, 1 MTb); + j1 = cmp(b, S); +#ifdef ROUND_BIASED + if (j1 >= 0 /*)*/ +#else + if ((j1 > 0 || (j1 == 0 && dig & 1)) +#endif + && dig++ == '9') + goto round_9_up; + } + accept_dig: + *s++ = dig; + goto ret; + } + if (j1 > 0) { +#ifdef Honor_FLT_ROUNDS + if (!Rounding && mode > 1) + goto accept_dig; +#endif + if (dig == '9') { /* possible if i == 1 */ + round_9_up: + *s++ = '9'; + goto roundoff; + } + *s++ = dig + 1; + goto ret; + } +#ifdef Honor_FLT_ROUNDS + keep_dig: +#endif + *s++ = dig; + if (i == ilim) + break; + b = multadd(b, 10, 0 MTb); + if (mlo == mhi) + mlo = mhi = multadd(mhi, 10, 0 MTb); + else { + mlo = multadd(mlo, 10, 0 MTb); + mhi = multadd(mhi, 10, 0 MTb); + } + } + } + else + for(i = 1;; i++) { + *s++ = dig = quorem(b,S) + '0'; + if (!b->x[0] && b->wds <= 1) { +#ifdef SET_INEXACT + inexact = 0; +#endif + goto ret; + } + if (i >= ilim) + break; + b = multadd(b, 10, 0 MTb); + } + + /* Round off last digit */ + +#ifdef Honor_FLT_ROUNDS + switch(Rounding) { + case 0: goto trimzeros; + case 2: goto roundoff; + } +#endif + b = lshift(b, 1 MTb); + j = cmp(b, S); +#ifdef ROUND_BIASED + if (j >= 0) +#else + if (j > 0 || (j == 0 && dig & 1)) +#endif + { + roundoff: + while(*--s == '9') + if (s == s0) { + k++; + *s++ = '1'; + goto ret; + } + ++*s++; + } + else { +#ifdef Honor_FLT_ROUNDS + trimzeros: +#endif + while(*--s == '0'); + s++; + } + ret: + Bfree(S MTb); + if (mhi) { + if (mlo && mlo != mhi) + Bfree(mlo MTb); + Bfree(mhi MTb); + } + retc: + while(s > s0 && s[-1] == '0') + --s; + ret1: +#ifdef SET_INEXACT + if (inexact) { + if (!oldinexact) { + word0(&d) = Exp_1 + (70 << Exp_shift); + word1(&d) = 0; + dval(&d) += 1.; + } + } + else if (!oldinexact) + clear_inexact(); +#endif + Bfree(b MTb); + *s = 0; + *decpt = k + 1; + if (rve) + *rve = s; + return s0; + } diff -Nru mlton-20130715/runtime/gdtoa/g_ddfmt.c mlton-20210117+dfsg/runtime/gdtoa/g_ddfmt.c --- mlton-20130715/runtime/gdtoa/g_ddfmt.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_ddfmt.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,174 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg@acm.org). */ + +#include "gdtoa/gdtoaimp.h" +#include + + char * +#ifdef KR_headers +gdtoa__g_ddfmt(buf, dd0, ndig, bufsize) char *buf; double *dd0; int ndig; size_t bufsize; +#else +gdtoa__g_ddfmt(char *buf, double *dd0, int ndig, size_t bufsize) +#endif +{ + FPI fpi; + char *b, *s, *se; + ULong *L, bits0[4], *bits, *zx; + int bx, by, decpt, ex, ey, i, j, mode; + Bigint *x, *y, *z; + U *dd, ddx[2]; +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif +#ifdef Honor_FLT_ROUNDS /*{{*/ + int Rounding; +#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */ + Rounding = Flt_Rounds; +#else /*}{*/ + Rounding = 1; + switch(fegetround()) { + case FE_TOWARDZERO: Rounding = 0; break; + case FE_UPWARD: Rounding = 2; break; + case FE_DOWNWARD: Rounding = 3; + } +#endif /*}}*/ +#else /*}{*/ +#define Rounding FPI_Round_near +#endif /*}}*/ + + if (bufsize < 10 || bufsize < (size_t)(ndig + 8)) + return 0; + + dd = (U*)dd0; + L = dd->L; + if ((L[_0] & 0x7ff00000L) == 0x7ff00000L) { + /* Infinity or NaN */ + if (L[_0] & 0xfffff || L[_1]) { + nanret: + return strcp(buf, "NaN"); + } + if ((L[2+_0] & 0x7ff00000) == 0x7ff00000) { + if (L[2+_0] & 0xfffff || L[2+_1]) + goto nanret; + if ((L[_0] ^ L[2+_0]) & 0x80000000L) + goto nanret; /* Infinity - Infinity */ + } + infret: + b = buf; + if (L[_0] & 0x80000000L) + *b++ = '-'; + return strcp(b, "Infinity"); + } + if ((L[2+_0] & 0x7ff00000) == 0x7ff00000) { + L += 2; + if (L[_0] & 0xfffff || L[_1]) + goto nanret; + goto infret; + } + if (dval(&dd[0]) + dval(&dd[1]) == 0.) { + b = buf; +#ifndef IGNORE_ZERO_SIGN + if (L[_0] & L[2+_0] & 0x80000000L) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + if ((L[_0] & 0x7ff00000L) < (L[2+_0] & 0x7ff00000L)) { + dval(&ddx[1]) = dval(&dd[0]); + dval(&ddx[0]) = dval(&dd[1]); + dd = ddx; + L = dd->L; + } + z = d2b(dval(&dd[0]), &ex, &bx MTb); + if (dval(&dd[1]) == 0.) + goto no_y; + x = z; + y = d2b(dval(&dd[1]), &ey, &by MTb); + if ( (i = ex - ey) !=0) { + if (i > 0) { + x = lshift(x, i MTb); + ex = ey; + } + else + y = lshift(y, -i MTb); + } + if ((L[_0] ^ L[2+_0]) & 0x80000000L) { + z = diff(x, y MTb); + if (L[_0] & 0x80000000L) + z->sign = 1 - z->sign; + } + else { + z = sum(x, y MTb); + if (L[_0] & 0x80000000L) + z->sign = 1; + } + Bfree(x MTb); + Bfree(y MTb); + no_y: + bits = zx = z->x; + for(i = 0; !*zx; zx++) + i += 32; + i += lo0bits(zx); + if (i) { + rshift(z, i); + ex += i; + } + fpi.nbits = z->wds * 32 - hi0bits(z->x[j = z->wds-1]); + if (fpi.nbits < 106) { + fpi.nbits = 106; + if (j < 3) { + for(i = 0; i <= j; i++) + bits0[i] = bits[i]; + while(i < 4) + bits0[i++] = 0; + bits = bits0; + } + } + mode = 2; + if (ndig <= 0) { + if (bufsize < (size_t)(fpi.nbits * .301029995664) + 10) { + Bfree(z MTb); + return 0; + } + mode = 0; + } + fpi.emin = 1-1023-53+1; + fpi.emax = 2046-1023-106+1; + fpi.rounding = Rounding; + fpi.sudden_underflow = 0; + fpi.int_max = Int_max; + i = STRTOG_Normal; + s = gdtoa__gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se); + b = g__fmt(buf, s, se, decpt, z->sign, bufsize); + Bfree(z MTb); + return b; + } diff -Nru mlton-20130715/runtime/gdtoa/g_ddfmt_p.c mlton-20210117+dfsg/runtime/gdtoa/g_ddfmt_p.c --- mlton-20130715/runtime/gdtoa/g_ddfmt_p.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_ddfmt_p.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,194 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg@acm.org). */ + +#include "gdtoa/gdtoaimp.h" +#include + + extern ULong NanDflt_d_D2A[2]; + + char * +#ifdef KR_headers +gdtoa__g_ddfmt_p(buf, dd0, ndig, bufsize, nik) char *buf; double *dd0; int ndig; size_t bufsize; int nik; +#else +gdtoa__g_ddfmt_p(char *buf, double *dd0, int ndig, size_t bufsize, int nik) +#endif +{ + FPI fpi; + char *b, *s, *se; + ULong *L, bits0[4], *bits, sign, *zx; + int bx, by, decpt, ex, ey, i, j, mode; + Bigint *x, *y, *z; + U *dd, ddx[2]; +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif +#ifdef Honor_FLT_ROUNDS /*{{*/ + int Rounding; +#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */ + Rounding = Flt_Rounds; +#else /*}{*/ + Rounding = 1; + switch(fegetround()) { + case FE_TOWARDZERO: Rounding = 0; break; + case FE_UPWARD: Rounding = 2; break; + case FE_DOWNWARD: Rounding = 3; + } +#endif /*}}*/ +#else /*}{*/ +#define Rounding FPI_Round_near +#endif /*}}*/ + + if (bufsize < 10 || bufsize < (size_t)(ndig + 8)) + return 0; + + dd = (U*)dd0; + L = dd->L; + sign = L[_0] & L[2+_0] & 0x80000000L; + if (nik < 0 || nik > 35) + nik = 0; + if ((L[_0] & 0x7ff00000L) == 0x7ff00000L) { + /* Infinity or NaN */ + if (L[_0] & 0xfffff || L[_1]) { + nanret: + b = buf; + if (sign && nik < 18) + *b++ = '-'; + b = strcp(b, NanName[nik%3]); + if (nik > 5 && (nik < 12 + || L[_1] != NanDflt_d_D2A[0] + || (L[_0] ^ NanDflt_d_D2A[1]) & 0xfffff + || L[2+_1] != NanDflt_d_D2A[0] + || (L[2+_0] ^ NanDflt_d_D2A[1]) & 0xfffff)) { + bits0[0] = L[2+_1]; + bits0[1] = (L[2+_0] & 0xfffff) | (L[_1] << 20); + bits0[2] = (L[_1] >> 12) | (L[_0] << 20); + bits0[3] = (L[_0] >> 12) & 0xff; + b = add_nanbits(b, bufsize - (b-buf), bits0, 4); + } + return b; + } + if ((L[2+_0] & 0x7ff00000) == 0x7ff00000) { + if (L[2+_0] & 0xfffff || L[2+_1]) + goto nanret; + if ((L[_0] ^ L[2+_0]) & 0x80000000L) + goto nanret; /* Infinity - Infinity */ + } + infret: + b = buf; + if (L[_0] & 0x80000000L) + *b++ = '-'; + return strcp(b, InfName[nik%6]); + } + if ((L[2+_0] & 0x7ff00000) == 0x7ff00000) { + L += 2; + if (L[_0] & 0xfffff || L[_1]) + goto nanret; + goto infret; + } + if (dval(&dd[0]) + dval(&dd[1]) == 0.) { + b = buf; +#ifndef IGNORE_ZERO_SIGN + if (sign) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + if ((L[_0] & 0x7ff00000L) < (L[2+_0] & 0x7ff00000L)) { + dval(&ddx[1]) = dval(&dd[0]); + dval(&ddx[0]) = dval(&dd[1]); + dd = ddx; + L = dd->L; + } + z = d2b(dval(&dd[0]), &ex, &bx MTb); + if (dval(&dd[1]) == 0.) + goto no_y; + x = z; + y = d2b(dval(&dd[1]), &ey, &by MTb); + if ( (i = ex - ey) !=0) { + if (i > 0) { + x = lshift(x, i MTb); + ex = ey; + } + else + y = lshift(y, -i MTb); + } + if ((L[_0] ^ L[2+_0]) & 0x80000000L) { + z = diff(x, y MTb); + if (L[_0] & 0x80000000L) + z->sign = 1 - z->sign; + } + else { + z = sum(x, y MTb); + if (L[_0] & 0x80000000L) + z->sign = 1; + } + Bfree(x MTb); + Bfree(y MTb); + no_y: + bits = zx = z->x; + for(i = 0; !*zx; zx++) + i += 32; + i += lo0bits(zx); + if (i) { + rshift(z, i); + ex += i; + } + fpi.nbits = z->wds * 32 - hi0bits(z->x[j = z->wds-1]); + if (fpi.nbits < 106) { + fpi.nbits = 106; + if (j < 3) { + for(i = 0; i <= j; i++) + bits0[i] = bits[i]; + while(i < 4) + bits0[i++] = 0; + bits = bits0; + } + } + mode = 2; + if (ndig <= 0) { + if (bufsize < (size_t)(fpi.nbits * .301029995664) + 10) { + Bfree(z MTb); + return 0; + } + mode = 0; + } + fpi.emin = 1-1023-53+1; + fpi.emax = 2046-1023-106+1; + fpi.rounding = Rounding; + fpi.sudden_underflow = 0; + fpi.int_max = Int_max; + i = STRTOG_Normal; + s = gdtoa__gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se); + b = g__fmt(buf, s, se, decpt, z->sign, bufsize); + Bfree(z MTb); + return b; + } diff -Nru mlton-20130715/runtime/gdtoa/g_dfmt.c mlton-20210117+dfsg/runtime/gdtoa/g_dfmt.c --- mlton-20130715/runtime/gdtoa/g_dfmt.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_dfmt.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,95 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + char* +#ifdef KR_headers +gdtoa__g_dfmt(buf, d, ndig, bufsize) char *buf; double *d; int ndig; size_t bufsize; +#else +gdtoa__g_dfmt(char *buf, double *d, int ndig, size_t bufsize) +#endif +{ + static FPI fpi0 = { 53, 1-1023-53+1, 2046-1023-53+1, 1, 0, Int_max }; + char *b, *s, *se; + ULong bits[2], *L, sign; + int decpt, ex, i, mode; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + if (ndig < 0) + ndig = 0; + if (bufsize < (size_t)(ndig + 10)) + return 0; + + L = (ULong*)d; + sign = L[_0] & 0x80000000L; + if ((L[_0] & 0x7ff00000) == 0x7ff00000) { + /* Infinity or NaN */ + if (bufsize < 10) + return 0; + if (L[_0] & 0xfffff || L[_1]) { + return strcp(buf, "NaN"); + } + b = buf; + if (sign) + *b++ = '-'; + return strcp(b, "Infinity"); + } + if (L[_1] == 0 && (L[_0] ^ sign) == 0 /*d == 0.*/) { + b = buf; +#ifndef IGNORE_ZERO_SIGN + if (L[_0] & 0x80000000L) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + bits[0] = L[_1]; + bits[1] = L[_0] & 0xfffff; + if ( (ex = (L[_0] >> 20) & 0x7ff) !=0) + bits[1] |= 0x100000; + else + ex = 1; + ex -= 0x3ff + 52; + mode = 2; + if (ndig <= 0) + mode = 0; + i = STRTOG_Normal; + if (sign) + i = STRTOG_Normal | STRTOG_Neg; + s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); + return g__fmt(buf, s, se, decpt, sign, bufsize); + } diff -Nru mlton-20130715/runtime/gdtoa/g_dfmt_p.c mlton-20210117+dfsg/runtime/gdtoa/g_dfmt_p.c --- mlton-20130715/runtime/gdtoa/g_dfmt_p.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_dfmt_p.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,110 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + extern ULong NanDflt_d_D2A[2]; + + char* +#ifdef KR_headers +gdtoa__g_dfmt_p(buf, d, ndig, bufsize, nik) char *buf; double *d; int ndig; size_t bufsize; int nik; +#else +gdtoa__g_dfmt_p(char *buf, double *d, int ndig, size_t bufsize, int nik) +#endif +{ + static FPI fpi0 = { 53, 1-1023-53+1, 2046-1023-53+1, 1, 0, Int_max }; + char *b, *s, *se; + ULong bits[2], *L, sign; + int decpt, ex, i, mode; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + if (ndig < 0) + ndig = 0; + if (bufsize < (size_t)(ndig + 10)) + return 0; + + L = (ULong*)d; + sign = L[_0] & 0x80000000L; + if ((L[_0] & 0x7ff00000) == 0x7ff00000) { + /* Infinity or NaN */ + if (nik < 0 || nik > 35) + nik = 0; + if (bufsize < 10) + return 0; + if (L[_0] & 0xfffff || L[_1]) { + b = buf; + if (L[_0] & 0x80000000L && nik < 18) + *b++ = '-'; + b = strcp(b, NanName[nik%3]); + if (nik > 5 && (nik < 12 + || bits[0] != NanDflt_d_D2A[0] + || (bits[1] ^ NanDflt_d_D2A[1]) & 0xfffff)) { + bits[0] = L[_1]; + bits[1] = L[_0] & 0xfffff; + b = add_nanbits(b, bufsize - (b-buf), bits, 2); + } + return b; + } + b = buf; + if (sign) + *b++ = '-'; + return strcp(b, InfName[nik%6]); + } + if (L[_1] == 0 && (L[_0] ^ sign) == 0 /*d == 0.*/) { + b = buf; +#ifndef IGNORE_ZERO_SIGN + if (L[_0] & 0x80000000L) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + bits[0] = L[_1]; + bits[1] = L[_0] & 0xfffff; + if ( (ex = (L[_0] >> 20) & 0x7ff) !=0) + bits[1] |= 0x100000; + else + ex = 1; + ex -= 0x3ff + 52; + mode = 2; + if (ndig <= 0) + mode = 0; + i = STRTOG_Normal; + if (sign) + i = STRTOG_Normal | STRTOG_Neg; + s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); + return g__fmt(buf, s, se, decpt, sign, bufsize); + } diff -Nru mlton-20130715/runtime/gdtoa/gdtoa.c mlton-20210117+dfsg/runtime/gdtoa/gdtoa.c --- mlton-20130715/runtime/gdtoa/gdtoa.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/gdtoa.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,758 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 1999 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + static Bigint * +#ifdef KR_headers +bitstob(bits, nbits, bbits MTa) ULong *bits; int nbits; int *bbits; MTk +#else +bitstob(ULong *bits, int nbits, int *bbits MTd) +#endif +{ + int i, k; + Bigint *b; + ULong *be, *x, *x0; + + i = ULbits; + k = 0; + while(i < nbits) { + i <<= 1; + k++; + } +#ifndef Pack_32 + if (!k) + k = 1; +#endif + b = Balloc(k MTa); + be = bits + ((nbits - 1) >> kshift); + x = x0 = b->x; + do { + *x++ = *bits & ALL_ON; +#ifdef Pack_16 + *x++ = (*bits >> 16) & ALL_ON; +#endif + } while(++bits <= be); + i = x - x0; + while(!x0[--i]) + if (!i) { + b->wds = 0; + *bbits = 0; + goto ret; + } + b->wds = i + 1; + *bbits = i*ULbits + 32 - hi0bits(b->x[i]); + ret: + return b; + } + +/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string. + * + * Inspired by "How to Print Floating-Point Numbers Accurately" by + * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126]. + * + * Modifications: + * 1. Rather than iterating, we use a simple numeric overestimate + * to determine k = floor(log10(d)). We scale relevant + * quantities using O(log2(k)) rather than O(k) multiplications. + * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't + * try to generate digits strictly left to right. Instead, we + * compute with fewer bits and propagate the carry if necessary + * when rounding the final digit up. This is often faster. + * 3. Under the assumption that input will be rounded nearest, + * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22. + * That is, we allow equality in stopping tests when the + * round-nearest rule will give the same floating-point value + * as would satisfaction of the stopping test with strict + * inequality. + * 4. We remove common factors of powers of 2 from relevant + * quantities. + * 5. When converting floating-point integers less than 1e16, + * we use floating-point arithmetic rather than resorting + * to multiple-precision integers. + * 6. When asked to produce fewer than 15 digits, we first try + * to get by with floating-point arithmetic; we resort to + * multiple-precision integer arithmetic only if we cannot + * guarantee that the floating-point calculation has given + * the correctly rounded result. For k requested digits and + * "uniformly" distributed input, the probability is + * something like 10^(k-15) that we must resort to the Long + * calculation. + */ + + char * +gdtoa__gdtoa +#ifdef KR_headers + (fpi, be, bits, kindp, mode, ndigits, decpt, rve) + CONST FPI *fpi; int be; ULong *bits; + int *kindp, mode, ndigits, *decpt; char **rve; +#else + (CONST FPI *fpi, int be, ULong *bits, int *kindp, int mode, int ndigits, int *decpt, char **rve) +#endif +{ + /* Arguments ndigits and decpt are similar to the second and third + arguments of ecvt and fcvt; trailing zeros are suppressed from + the returned string. If not null, *rve is set to point + to the end of the return value. If d is +-Infinity or NaN, + then *decpt is set to 9999. + be = exponent: value = (integer represented by bits) * (2 to the power of be). + + mode: + 0 ==> shortest string that yields d when read in + and rounded to nearest. + 1 ==> like 0, but with Steele & White stopping rule; + e.g. with IEEE P754 arithmetic , mode 0 gives + 1e23 whereas mode 1 gives 9.999999999999999e22. + 2 ==> max(1,ndigits) significant digits. This gives a + return value similar to that of ecvt, except + that trailing zeros are suppressed. + 3 ==> through ndigits past the decimal point. This + gives a return value similar to that from fcvt, + except that trailing zeros are suppressed, and + ndigits can be negative. + 4-9 should give the same return values as 2-3, i.e., + 4 <= mode <= 9 ==> same return as mode + 2 + (mode & 1). These modes are mainly for + debugging; often they run slower but sometimes + faster than modes 2-3. + 4,5,8,9 ==> left-to-right digit generation. + 6-9 ==> don't try fast floating-point estimate + (if applicable). + + Values of mode other than 0-9 are treated as mode 0. + + Sufficient space is allocated to the return value + to hold the suppressed trailing zeros. + */ + +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif + int bbits, b2, b5, be0, dig, i, ieps, ilim, ilim0, ilim1, inex; + int j, j1, k, k0, k_check, kind, leftright, m2, m5, nbits; + int rdir, s2, s5, spec_case, try_quick; + Long L; + Bigint *b, *b1, *delta, *mlo, *mhi, *mhi1, *S; + double d2, ds; + char *s, *s0; + U d, eps; + +#ifndef MULTIPLE_THREADS + if (dtoa_result) { + gdtoa__freedtoa(dtoa_result); + dtoa_result = 0; + } +#endif + inex = 0; + kind = *kindp &= ~STRTOG_Inexact; + switch(kind & STRTOG_Retmask) { + case STRTOG_Zero: + goto ret_zero; + case STRTOG_Normal: + case STRTOG_Denormal: + break; + case STRTOG_Infinite: + *decpt = -32768; + return nrv_alloc("Infinity", rve, 8 MTb); + case STRTOG_NaN: + *decpt = -32768; + return nrv_alloc("NaN", rve, 3 MTb); + default: + return 0; + } + b = bitstob(bits, nbits = fpi->nbits, &bbits MTb); + be0 = be; + if ( (i = trailz(b)) !=0) { + rshift(b, i); + be += i; + bbits -= i; + } + if (!b->wds) { + Bfree(b MTb); + ret_zero: + *decpt = 1; + return nrv_alloc("0", rve, 1 MTb); + } + + dval(&d) = b2d(b, &i); + i = be + bbits - 1; + word0(&d) &= Frac_mask1; + word0(&d) |= Exp_11; +#ifdef IBM + if ( (j = 11 - hi0bits(word0(&d) & Frac_mask)) !=0) + dval(&d) /= 1 << j; +#endif + + /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 + * log10(x) = log(x) / log(10) + * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10)) + * log10(&d) = (i-Bias)*log(2)/log(10) + log10(d2) + * + * This suggests computing an approximation k to log10(&d) by + * + * k = (i - Bias)*0.301029995663981 + * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 ); + * + * We want k to be too large rather than too small. + * The error in the first-order Taylor series approximation + * is in our favor, so we just round up the constant enough + * to compensate for any error in the multiplication of + * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077, + * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14, + * adding 1e-13 to the constant term more than suffices. + * Hence we adjust the constant term to 0.1760912590558. + * (We could get a more accurate k by invoking log10, + * but this is probably not worthwhile.) + */ + + ds = (dval(&d)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981; + + /* correct assumption about exponent range */ + if ((j = i) < 0) + j = -j; + if ((j -= 1077) > 0) + ds += j * 7e-17; + + k = (int)ds; + if (ds < 0. && ds != k) + k--; /* want k = floor(ds) */ + k_check = 1; +#ifdef IBM + j = be + bbits - 1; + if ( (j1 = j & 3) !=0) + dval(&d) *= 1 << j1; + word0(&d) += j << Exp_shift - 2 & Exp_mask; +#else + word0(&d) += (be + bbits - 1) << Exp_shift; +#endif + if (k >= 0 && k <= Ten_pmax) { + if (dval(&d) < tens[k]) + k--; + k_check = 0; + } + j = bbits - i - 1; + if (j >= 0) { + b2 = 0; + s2 = j; + } + else { + b2 = -j; + s2 = 0; + } + if (k >= 0) { + b5 = 0; + s5 = k; + s2 += k; + } + else { + b2 -= k; + b5 = -k; + s5 = 0; + } + if (mode < 0 || mode > 9) + mode = 0; + try_quick = 1; + if (mode > 5) { + mode -= 4; + try_quick = 0; + } + else if (i >= -4 - Emin || i < Emin) + try_quick = 0; + leftright = 1; + ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */ + /* silence erroneous "gcc -Wall" warning. */ + switch(mode) { + case 0: + case 1: + i = (int)(nbits * .30103) + 3; + ndigits = 0; + break; + case 2: + leftright = 0; + /* no break */ + case 4: + if (ndigits <= 0) + ndigits = 1; + ilim = ilim1 = i = ndigits; + break; + case 3: + leftright = 0; + /* no break */ + case 5: + i = ndigits + k + 1; + ilim = i; + ilim1 = i - 1; + if (i <= 0) + i = 1; + } + s = s0 = rv_alloc(i MTb); + + if (mode <= 1) + rdir = 0; + else if ( (rdir = fpi->rounding - 1) !=0) { + if (rdir < 0) + rdir = 2; + if (kind & STRTOG_Neg) + rdir = 3 - rdir; + } + + /* Now rdir = 0 ==> round near, 1 ==> round up, 2 ==> round down. */ + + if (ilim >= 0 && ilim <= Quick_max && try_quick && !rdir +#ifndef IMPRECISE_INEXACT + && k == 0 +#endif + ) { + + /* Try to get by with floating-point arithmetic. */ + + i = 0; + d2 = dval(&d); + k0 = k; + ilim0 = ilim; + ieps = 2; /* conservative */ + if (k > 0) { + ds = tens[k&0xf]; + j = k >> 4; + if (j & Bletch) { + /* prevent overflows */ + j &= Bletch - 1; + dval(&d) /= bigtens[n_bigtens-1]; + ieps++; + } + for(; j; j >>= 1, i++) + if (j & 1) { + ieps++; + ds *= bigtens[i]; + } + } + else { + ds = 1.; + if ( (j1 = -k) !=0) { + dval(&d) *= tens[j1 & 0xf]; + for(j = j1 >> 4; j; j >>= 1, i++) + if (j & 1) { + ieps++; + dval(&d) *= bigtens[i]; + } + } + } + if (k_check && dval(&d) < 1. && ilim > 0) { + if (ilim1 <= 0) + goto fast_failed; + ilim = ilim1; + k--; + dval(&d) *= 10.; + ieps++; + } + dval(&eps) = ieps*dval(&d) + 7.; + word0(&eps) -= (P-1)*Exp_msk1; + if (ilim == 0) { + S = mhi = 0; + dval(&d) -= 5.; + if (dval(&d) > dval(&eps)) + goto one_digit; + if (dval(&d) < -dval(&eps)) + goto no_digits; + goto fast_failed; + } +#ifndef No_leftright + if (leftright) { + /* Use Steele & White method of only + * generating digits needed. + */ + dval(&eps) = ds*0.5/tens[ilim-1] - dval(&eps); + for(i = 0;;) { + L = (Long)(dval(&d)/ds); + dval(&d) -= L*ds; + *s++ = '0' + (int)L; + if (dval(&d) < dval(&eps)) { + if (dval(&d)) + inex = STRTOG_Inexlo; + goto ret1; + } + if (ds - dval(&d) < dval(&eps)) + goto bump_up; + if (++i >= ilim) + break; + dval(&eps) *= 10.; + dval(&d) *= 10.; + } + } + else { +#endif + /* Generate ilim digits, then fix them up. */ + dval(&eps) *= tens[ilim-1]; + for(i = 1;; i++, dval(&d) *= 10.) { + if ( (L = (Long)(dval(&d)/ds)) !=0) + dval(&d) -= L*ds; + *s++ = '0' + (int)L; + if (i == ilim) { + ds *= 0.5; + if (dval(&d) > ds + dval(&eps)) + goto bump_up; + else if (dval(&d) < ds - dval(&eps)) { + if (dval(&d)) + inex = STRTOG_Inexlo; + goto ret1; + } + break; + } + } +#ifndef No_leftright + } +#endif + fast_failed: + s = s0; + dval(&d) = d2; + k = k0; + ilim = ilim0; + } + + /* Do we have a "small" integer? */ + + if (be >= 0 && k <= fpi->int_max) { + /* Yes. */ + ds = tens[k]; + if (ndigits < 0 && ilim <= 0) { + S = mhi = 0; + if (ilim < 0 || dval(&d) <= 5*ds) + goto no_digits; + goto one_digit; + } + for(i = 1;; i++, dval(&d) *= 10.) { + L = dval(&d) / ds; + dval(&d) -= L*ds; +#ifdef Check_FLT_ROUNDS + /* If FLT_ROUNDS == 2, L will usually be high by 1 */ + if (dval(&d) < 0) { + L--; + dval(&d) += ds; + } +#endif + *s++ = '0' + (int)L; + if (dval(&d) == 0.) + break; + if (i == ilim) { + if (rdir) { + if (rdir == 1) + goto bump_up; + inex = STRTOG_Inexlo; + goto ret1; + } + dval(&d) += dval(&d); +#ifdef ROUND_BIASED + if (dval(&d) >= ds) +#else + if (dval(&d) > ds || (dval(&d) == ds && L & 1)) +#endif + { + bump_up: + inex = STRTOG_Inexhi; + while(*--s == '9') + if (s == s0) { + k++; + *s = '0'; + break; + } + ++*s++; + } + else + inex = STRTOG_Inexlo; + break; + } + } + goto ret1; + } + + m2 = b2; + m5 = b5; + mhi = mlo = 0; + if (leftright) { + i = nbits - bbits; + if (be - i++ < fpi->emin && mode != 3 && mode != 5) { + /* denormal */ + i = be - fpi->emin + 1; + if (mode >= 2 && ilim > 0 && ilim < i) + goto small_ilim; + } + else if (mode >= 2) { + small_ilim: + j = ilim - 1; + if (m5 >= j) + m5 -= j; + else { + s5 += j -= m5; + b5 += j; + m5 = 0; + } + if ((i = ilim) < 0) { + m2 -= i; + i = 0; + } + } + b2 += i; + s2 += i; + mhi = i2b(1 MTb); + } + if (m2 > 0 && s2 > 0) { + i = m2 < s2 ? m2 : s2; + b2 -= i; + m2 -= i; + s2 -= i; + } + if (b5 > 0) { + if (leftright) { + if (m5 > 0) { + mhi = pow5mult(mhi, m5 MTb); + b1 = mult(mhi, b MTb); + Bfree(b MTb); + b = b1; + } + if ( (j = b5 - m5) !=0) + b = pow5mult(b, j MTb); + } + else + b = pow5mult(b, b5 MTb); + } + S = i2b(1 MTb); + if (s5 > 0) + S = pow5mult(S, s5 MTb); + + /* Check for special case that d is a normalized power of 2. */ + + spec_case = 0; + if (mode < 2) { + if (bbits == 1 && be0 > fpi->emin + 1) { + /* The special case */ + b2++; + s2++; + spec_case = 1; + } + } + + /* Arrange for convenient computation of quotients: + * shift left if necessary so divisor has 4 leading 0 bits. + * + * Perhaps we should just compute leading 28 bits of S once + * and for all and pass them and a shift to quorem, so it + * can do shifts and ors to compute the numerator for q. + */ + i = ((s5 ? hi0bits(S->x[S->wds-1]) : ULbits - 1) - s2 - 4) & kmask; + m2 += i; + if ((b2 += i) > 0) + b = lshift(b, b2 MTb); + if ((s2 += i) > 0) + S = lshift(S, s2 MTb); + if (k_check) { + if (cmp(b,S) < 0) { + k--; + b = multadd(b, 10, 0 MTb); /* we botched the k estimate */ + if (leftright) + mhi = multadd(mhi, 10, 0 MTb); + ilim = ilim1; + } + } + if (ilim <= 0 && mode > 2) { + if (ilim < 0 || cmp(b,S = multadd(S,5,0 MTb)) <= 0) { + /* no digits, fcvt style */ + no_digits: + k = -1 - ndigits; + inex = STRTOG_Inexlo; + goto ret; + } + one_digit: + inex = STRTOG_Inexhi; + *s++ = '1'; + k++; + goto ret; + } + if (leftright) { + if (m2 > 0) + mhi = lshift(mhi, m2 MTb); + + /* Compute mlo -- check for special case + * that d is a normalized power of 2. + */ + + mlo = mhi; + if (spec_case) { + mhi = Balloc(mhi->k MTb); + Bcopy(mhi, mlo); + mhi = lshift(mhi, 1 MTb); + } + + for(i = 1;;i++) { + dig = quorem(b,S) + '0'; + /* Do we yet have the shortest decimal string + * that will round to d? + */ + j = cmp(b, mlo); + delta = diff(S, mhi MTb); + j1 = delta->sign ? 1 : cmp(b, delta); + Bfree(delta MTb); +#ifndef ROUND_BIASED + if (j1 == 0 && !mode && !(bits[0] & 1) && !rdir) { + if (dig == '9') + goto round_9_up; + if (j <= 0) { + if (b->wds > 1 || b->x[0]) + inex = STRTOG_Inexlo; + } + else { + dig++; + inex = STRTOG_Inexhi; + } + *s++ = dig; + goto ret; + } +#endif + if (j < 0 || (j == 0 && !mode +#ifndef ROUND_BIASED + && !(bits[0] & 1) +#endif + )) { + if (rdir && (b->wds > 1 || b->x[0])) { + if (rdir == 2) { + inex = STRTOG_Inexlo; + goto accept; + } + while (cmp(S,mhi) > 0) { + *s++ = dig; + mhi1 = multadd(mhi, 10, 0 MTb); + if (mlo == mhi) + mlo = mhi1; + mhi = mhi1; + b = multadd(b, 10, 0 MTb); + dig = quorem(b,S) + '0'; + } + if (dig++ == '9') + goto round_9_up; + inex = STRTOG_Inexhi; + goto accept; + } + if (j1 > 0) { + b = lshift(b, 1 MTb); + j1 = cmp(b, S); +#ifdef ROUND_BIASED + if (j1 >= 0 /*)*/ +#else + if ((j1 > 0 || (j1 == 0 && dig & 1)) +#endif + && dig++ == '9') + goto round_9_up; + inex = STRTOG_Inexhi; + } + if (b->wds > 1 || b->x[0]) + inex = STRTOG_Inexlo; + accept: + *s++ = dig; + goto ret; + } + if (j1 > 0 && rdir != 2) { + if (dig == '9') { /* possible if i == 1 */ + round_9_up: + *s++ = '9'; + inex = STRTOG_Inexhi; + goto roundoff; + } + inex = STRTOG_Inexhi; + *s++ = dig + 1; + goto ret; + } + *s++ = dig; + if (i == ilim) + break; + b = multadd(b, 10, 0 MTb); + if (mlo == mhi) + mlo = mhi = multadd(mhi, 10, 0 MTb); + else { + mlo = multadd(mlo, 10, 0 MTb); + mhi = multadd(mhi, 10, 0 MTb); + } + } + } + else + for(i = 1;; i++) { + *s++ = dig = quorem(b,S) + '0'; + if (i >= ilim) + break; + b = multadd(b, 10, 0 MTb); + } + + /* Round off last digit */ + + if (rdir) { + if (rdir == 2 || (b->wds <= 1 && !b->x[0])) + goto chopzeros; + goto roundoff; + } + b = lshift(b, 1 MTb); + j = cmp(b, S); +#ifdef ROUND_BIASED + if (j >= 0) +#else + if (j > 0 || (j == 0 && dig & 1)) +#endif + { + roundoff: + inex = STRTOG_Inexhi; + while(*--s == '9') + if (s == s0) { + k++; + *s++ = '1'; + goto ret; + } + ++*s++; + } + else { + chopzeros: + if (b->wds > 1 || b->x[0]) + inex = STRTOG_Inexlo; + } + ret: + Bfree(S MTb); + if (mhi) { + if (mlo && mlo != mhi) + Bfree(mlo MTb); + Bfree(mhi MTb); + } + ret1: + while(s > s0 && s[-1] == '0') + --s; + Bfree(b MTb); + *s = 0; + *decpt = k + 1; + if (rve) + *rve = s; + *kindp |= inex; + return s0; + } diff -Nru mlton-20130715/runtime/gdtoa/gdtoa_fltrnds.h mlton-20210117+dfsg/runtime/gdtoa/gdtoa_fltrnds.h --- mlton-20130715/runtime/gdtoa/gdtoa_fltrnds.h 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/gdtoa_fltrnds.h 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,18 @@ + FPI *fpi, fpi1; + int Rounding; +#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */ + Rounding = Flt_Rounds; +#else /*}{*/ + Rounding = 1; + switch(fegetround()) { + case FE_TOWARDZERO: Rounding = 0; break; + case FE_UPWARD: Rounding = 2; break; + case FE_DOWNWARD: Rounding = 3; + } +#endif /*}}*/ + fpi = &fpi0; + if (Rounding != 1) { + fpi1 = fpi0; + fpi = &fpi1; + fpi1.rounding = Rounding; + } diff -Nru mlton-20130715/runtime/gdtoa/gdtoa.h mlton-20210117+dfsg/runtime/gdtoa/gdtoa.h --- mlton-20130715/runtime/gdtoa/gdtoa.h 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/gdtoa.h 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,162 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#ifndef GDTOA_H_INCLUDED +#define GDTOA_H_INCLUDED + +#include "gdtoa/arith.h" +#include /* for size_t */ +#include "export.h" + +#ifndef Long +#define Long int +#endif +#ifndef ULong +typedef unsigned Long ULong; +#endif +#ifndef UShort +typedef unsigned short UShort; +#endif + +#ifndef ANSI +#ifdef KR_headers +#define ANSI(x) () +#define Void /*nothing*/ +#else +#define ANSI(x) x +#define Void void +#endif +#endif /* ANSI */ + +#ifndef CONST +#ifdef KR_headers +#define CONST /* blank */ +#else +#define CONST const +#endif +#endif /* CONST */ + + enum { /* return values from strtodg */ + STRTOG_Zero = 0, + STRTOG_Normal = 1, + STRTOG_Denormal = 2, + STRTOG_Infinite = 3, + STRTOG_NaN = 4, + STRTOG_NaNbits = 5, + STRTOG_NoNumber = 6, + STRTOG_Retmask = 7, + + /* The following may be or-ed into one of the above values. */ + + STRTOG_Neg = 0x08, /* does not affect STRTOG_Inexlo or STRTOG_Inexhi */ + STRTOG_Inexlo = 0x10, /* returned result rounded toward zero */ + STRTOG_Inexhi = 0x20, /* returned result rounded away from zero */ + STRTOG_Inexact = 0x30, + STRTOG_Underflow= 0x40, + STRTOG_Overflow = 0x80 + }; + + typedef struct +FPI { + int nbits; + int emin; + int emax; + int rounding; + int sudden_underflow; + int int_max; + } FPI; + +enum { /* FPI.rounding values: same as FLT_ROUNDS */ + FPI_Round_zero = 0, + FPI_Round_near = 1, + FPI_Round_up = 2, + FPI_Round_down = 3 + }; + +#ifdef __cplusplus +extern "C" { +#endif + +PRIVATE extern char* gdtoa__dtoa ANSI((double d, int mode, int ndigits, int *decpt, + int *sign, char **rve)); +PRIVATE extern char* gdtoa__gdtoa ANSI((CONST FPI *fpi, int be, ULong *bits, int *kindp, + int mode, int ndigits, int *decpt, char **rve)); +PRIVATE extern void gdtoa__freedtoa ANSI((char*)); +PRIVATE extern float gdtoa__strtof ANSI((CONST char *, char **)); +PRIVATE extern double gdtoa__strtod ANSI((CONST char *, char **)); +PRIVATE extern int gdtoa__strtodg ANSI((CONST char*, char**, CONST FPI*, Long*, ULong*)); + +PRIVATE extern char* gdtoa__g_ddfmt ANSI((char*, double*, int, size_t)); +PRIVATE extern char* gdtoa__g_ddfmt_p ANSI((char*, double*, int, size_t, int)); +PRIVATE extern char* gdtoa__g_dfmt ANSI((char*, double*, int, size_t)); +PRIVATE extern char* gdtoa__g_dfmt_p ANSI((char*, double*, int, size_t, int)); +PRIVATE extern char* gdtoa__g_ffmt ANSI((char*, float*, int, size_t)); +PRIVATE extern char* gdtoa__g_ffmt_p ANSI((char*, float*, int, size_t, int)); +PRIVATE extern char* gdtoa__g_Qfmt ANSI((char*, void*, int, size_t)); +PRIVATE extern char* gdtoa__g_Qfmt_p ANSI((char*, void*, int, size_t, int)); +PRIVATE extern char* gdtoa__g_xfmt ANSI((char*, void*, int, size_t)); +PRIVATE extern char* gdtoa__g_xfmt_p ANSI((char*, void*, int, size_t, int)); +PRIVATE extern char* gdtoa__g_xLfmt ANSI((char*, void*, int, size_t)); +PRIVATE extern char* gdtoa__g_xLfmt_p ANSI((char*, void*, int, size_t, int)); + +PRIVATE extern int gdtoa__strtoId ANSI((CONST char*, char**, double*, double*)); +PRIVATE extern int gdtoa__strtoIdd ANSI((CONST char*, char**, double*, double*)); +PRIVATE extern int gdtoa__strtoIf ANSI((CONST char*, char**, float*, float*)); +PRIVATE extern int gdtoa__strtoIQ ANSI((CONST char*, char**, void*, void*)); +PRIVATE extern int gdtoa__strtoIx ANSI((CONST char*, char**, void*, void*)); +PRIVATE extern int gdtoa__strtoIxL ANSI((CONST char*, char**, void*, void*)); +PRIVATE extern int gdtoa__strtord ANSI((CONST char*, char**, int, double*)); +PRIVATE extern int gdtoa__strtordd ANSI((CONST char*, char**, int, double*)); +PRIVATE extern int gdtoa__strtorf ANSI((CONST char*, char**, int, float*)); +PRIVATE extern int gdtoa__strtorQ ANSI((CONST char*, char**, int, void*)); +PRIVATE extern int gdtoa__strtorx ANSI((CONST char*, char**, int, void*)); +PRIVATE extern int gdtoa__strtorxL ANSI((CONST char*, char**, int, void*)); +#if 1 +PRIVATE extern int gdtoa__strtodI ANSI((CONST char*, char**, double*)); +PRIVATE extern int gdtoa__strtopd ANSI((CONST char*, char**, double*)); +PRIVATE extern int gdtoa__strtopdd ANSI((CONST char*, char**, double*)); +PRIVATE extern int gdtoa__strtopf ANSI((CONST char*, char**, float*)); +PRIVATE extern int gdtoa__strtopQ ANSI((CONST char*, char**, void*)); +PRIVATE extern int gdtoa__strtopx ANSI((CONST char*, char**, void*)); +PRIVATE extern int gdtoa__strtopxL ANSI((CONST char*, char**, void*)); +#else +#define gdtoa__strtopd(s,se,x) gdtoa__strtord(s,se,1,x) +#define gdtoa__strtopdd(s,se,x) gdtoa__strtordd(s,se,1,x) +#define gdtoa__strtopf(s,se,x) gdtoa__strtorf(s,se,1,x) +#define gdtoa__strtopQ(s,se,x) gdtoa__strtorQ(s,se,1,x) +#define gdtoa__strtopx(s,se,x) gdtoa__strtorx(s,se,1,x) +#define gdtoa__strtopxL(s,se,x) gdtoa__strtorxL(s,se,1,x) +#endif + +#ifdef __cplusplus +} +#endif +#endif /* GDTOA_H_INCLUDED */ diff -Nru mlton-20130715/runtime/gdtoa/gdtoaimp.h mlton-20210117+dfsg/runtime/gdtoa/gdtoaimp.h --- mlton-20130715/runtime/gdtoa/gdtoaimp.h 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/gdtoaimp.h 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,677 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998-2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* This is a variation on dtoa.c that converts arbitary binary + floating-point formats to and from decimal notation. It uses + double-precision arithmetic internally, so there are still + various #ifdefs that adapt the calculations to the native + double-precision arithmetic (any of IEEE, VAX D_floating, + or IBM mainframe arithmetic). + + Please send bug reports to David M. Gay (dmg at acm dot org, + with " at " changed at "@" and " dot " changed to "."). + */ + +/* On a machine with IEEE extended-precision registers, it is + * necessary to specify double-precision (53-bit) rounding precision + * before invoking strtod or dtoa. If the machine uses (the equivalent + * of) Intel 80x87 arithmetic, the call + * _control87(PC_53, MCW_PC); + * does this with many compilers. Whether this or another call is + * appropriate depends on the compiler; for this to work, it may be + * necessary to #include "float.h" or another system-dependent header + * file. + */ + +/* strtod for IEEE-, VAX-, and IBM-arithmetic machines. + * + * This strtod returns a nearest machine number to the input decimal + * string (or sets errno to ERANGE). With IEEE arithmetic, ties are + * broken by the IEEE round-even rule. Otherwise ties are broken by + * biased rounding (add half and chop). + * + * Inspired loosely by William D. Clinger's paper "How to Read Floating + * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 112-126]. + * + * Modifications: + * + * 1. We only require IEEE, IBM, or VAX double-precision + * arithmetic (not IEEE double-extended). + * 2. We get by with floating-point arithmetic in a case that + * Clinger missed -- when we're computing d * 10^n + * for a small integer d and the integer n is not too + * much larger than 22 (the maximum integer k for which + * we can represent 10^k exactly), we may be able to + * compute (d*10^k) * 10^(e-k) with just one roundoff. + * 3. Rather than a bit-at-a-time adjustment of the binary + * result in the hard case, we use floating-point + * arithmetic to determine the adjustment to within + * one bit; only in really hard cases do we need to + * compute a second residual. + * 4. Because of 3., we don't need a large table of powers of 10 + * for ten-to-e (just some small tables, e.g. of 10^k + * for 0 <= k <= 22). + */ + +/* + * #define IEEE_8087 for IEEE-arithmetic machines where the least + * significant byte has the lowest address. + * #define IEEE_MC68k for IEEE-arithmetic machines where the most + * significant byte has the lowest address. + * #define Long int on machines with 32-bit ints and 64-bit longs. + * #define Sudden_Underflow for IEEE-format machines without gradual + * underflow (i.e., that flush to zero on underflow). + * #define IBM for IBM mainframe-style floating-point arithmetic. + * #define VAX for VAX-style floating-point arithmetic (D_floating). + * #define No_leftright to omit left-right logic in fast floating-point + * computation of dtoa and gdtoa. This will cause modes 4 and 5 to be + * treated the same as modes 2 and 3 for some inputs. + * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3. + * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines + * that use extended-precision instructions to compute rounded + * products and quotients) with IBM. + * #define ROUND_BIASED for IEEE-format with biased rounding and arithmetic + * that rounds toward +Infinity. + * #define ROUND_BIASED_without_Round_Up for IEEE-format with biased + * rounding when the underlying floating-point arithmetic uses + * unbiased rounding. This prevent using ordinary floating-point + * arithmetic when the result could be computed with one rounding error. + * #define Inaccurate_Divide for IEEE-format with correctly rounded + * products but inaccurate quotients, e.g., for Intel i860. + * #define NO_LONG_LONG on machines that do not have a "long long" + * integer type (of >= 64 bits). On such machines, you can + * #define Just_16 to store 16 bits per 32-bit Long when doing + * high-precision integer arithmetic. Whether this speeds things + * up or slows things down depends on the machine and the number + * being converted. If long long is available and the name is + * something other than "long long", #define Llong to be the name, + * and if "unsigned Llong" does not work as an unsigned version of + * Llong, #define #ULLong to be the corresponding unsigned type. + * #define KR_headers for old-style C function headers. + * #define Bad_float_h if your system lacks a float.h or if it does not + * define some or all of DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP, + * FLT_RADIX, FLT_ROUNDS, and DBL_MAX. + * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n) + * if memory is available and otherwise does something you deem + * appropriate. If MALLOC is undefined, malloc will be invoked + * directly -- and assumed always to succeed. Similarly, if you + * want something other than the system's free() to be called to + * recycle memory acquired from MALLOC, #define FREE to be the + * name of the alternate routine. (FREE or free is only called in + * pathological cases, e.g., in a gdtoa call after a gdtoa return in + * mode 3 with thousands of digits requested.) + * #define Omit_Private_Memory to omit logic (added Jan. 1998) for making + * memory allocations from a private pool of memory when possible. + * When used, the private pool is PRIVATE_MEM bytes long: 2304 bytes, + * unless #defined to be a different length. This default length + * suffices to get rid of MALLOC calls except for unusual cases, + * such as decimal-to-binary conversion of a very long string of + * digits. When converting IEEE double precision values, the + * longest string gdtoa can return is about 751 bytes long. For + * conversions by strtod of strings of 800 digits and all gdtoa + * conversions of IEEE doubles in single-threaded executions with + * 8-byte pointers, PRIVATE_MEM >= 7400 appears to suffice; with + * 4-byte pointers, PRIVATE_MEM >= 7112 appears adequate. + * #define NO_INFNAN_CHECK if you do not wish to have INFNAN_CHECK + * #defined automatically on IEEE systems. On such systems, + * when INFNAN_CHECK is #defined, strtod checks + * for Infinity and NaN (case insensitively). + * When INFNAN_CHECK is #defined and No_Hex_NaN is not #defined, + * strtodg also accepts (case insensitively) strings of the form + * NaN(x), where x is a string of hexadecimal digits (optionally + * preceded by 0x or 0X) and spaces; if there is only one string + * of hexadecimal digits, it is taken for the fraction bits of the + * resulting NaN; if there are two or more strings of hexadecimal + * digits, each string is assigned to the next available sequence + * of 32-bit words of fractions bits (starting with the most + * significant), right-aligned in each sequence. + * Unless GDTOA_NON_PEDANTIC_NANCHECK is #defined, input "NaN(...)" + * is consumed even when ... has the wrong form (in which case the + * "(...)" is consumed but ignored). + * #define MULTIPLE_THREADS if the system offers preemptively scheduled + * multiple threads. In this case, you must provide (or suitably + * #define) two locks, acquired by ACQUIRE_DTOA_LOCK(n) and freed + * by FREE_DTOA_LOCK(n) for n = 0 or 1. (The second lock, accessed + * in pow5mult, ensures lazy evaluation of only one copy of high + * powers of 5; omitting this lock would introduce a small + * probability of wasting memory, but would otherwise be harmless.) + * You must also invoke freedtoa(s) to free the value s returned by + * dtoa. You may do so whether or not MULTIPLE_THREADS is #defined. + + * When MULTIPLE_THREADS is #defined, source file misc.c provides + * void set_max_gdtoa_threads(unsigned int n); + * and expects + * unsigned int dtoa_get_threadno(void); + * to be available (possibly provided by + * #define dtoa_get_threadno omp_get_thread_num + * if OpenMP is in use or by + * #define dtoa_get_threadno pthread_self + * if Pthreads is in use), to return the current thread number. + * If set_max_dtoa_threads(n) was called and the current thread + * number is k with k < n, then calls on ACQUIRE_DTOA_LOCK(...) and + * FREE_DTOA_LOCK(...) are avoided; instead each thread with thread + * number < n has a separate copy of relevant data structures. + * After set_max_dtoa_threads(n), a call set_max_dtoa_threads(m) + * with m <= n has has no effect, but a call with m > n is honored. + * Such a call invokes REALLOC (assumed to be "realloc" if REALLOC + * is not #defined) to extend the size of the relevant array. + + * #define IMPRECISE_INEXACT if you do not care about the setting of + * the STRTOG_Inexact bits in the special case of doing IEEE double + * precision conversions (which could also be done by the strtod in + * dtoa.c). + * #define NO_HEX_FP to disable recognition of C9x's hexadecimal + * floating-point constants. + * #define -DNO_ERRNO to suppress setting errno (in strtod.c and + * strtodg.c). + * #define NO_STRING_H to use private versions of memcpy. + * On some K&R systems, it may also be necessary to + * #define DECLARE_SIZE_T in this case. + * #define USE_LOCALE to use the current locale's decimal_point value. + */ + +#ifndef GDTOAIMP_H_INCLUDED +#define GDTOAIMP_H_INCLUDED +#include "gdtoa/gdtoa.h" +#include "gdtoa/gd_qnan.h" +#ifdef Honor_FLT_ROUNDS +#include +#endif + +#ifdef DEBUG +#include +#define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);} +#endif + +#include +#include + +#ifdef KR_headers +#define Char char +#else +#define Char void +#endif + +#ifdef MALLOC +extern Char *MALLOC ANSI((size_t)); +#else +#define MALLOC malloc +#endif + +#ifdef REALLOC +extern Char *REALLOC ANSI((Char*, size_t)); +#else +#define REALLOC realloc +#endif + +#undef IEEE_Arith +#undef Avoid_Underflow +#ifdef IEEE_MC68k +#define IEEE_Arith +#endif +#ifdef IEEE_8087 +#define IEEE_Arith +#endif + +#include +#ifdef Bad_float_h + +#ifdef IEEE_Arith +#define DBL_DIG 15 +#define DBL_MAX_10_EXP 308 +#define DBL_MAX_EXP 1024 +#define FLT_RADIX 2 +#define DBL_MAX 1.7976931348623157e+308 +#endif + +#ifdef IBM +#define DBL_DIG 16 +#define DBL_MAX_10_EXP 75 +#define DBL_MAX_EXP 63 +#define FLT_RADIX 16 +#define DBL_MAX 7.2370055773322621e+75 +#endif + +#ifdef VAX +#define DBL_DIG 16 +#define DBL_MAX_10_EXP 38 +#define DBL_MAX_EXP 127 +#define FLT_RADIX 2 +#define DBL_MAX 1.7014118346046923e+38 +#define n_bigtens 2 +#endif + +#ifndef LONG_MAX +#define LONG_MAX 2147483647 +#endif + +#else /* ifndef Bad_float_h */ +#include +#endif /* Bad_float_h */ + +#ifdef IEEE_Arith +#define Scale_Bit 0x10 +#define n_bigtens 5 +#endif + +#ifdef IBM +#define n_bigtens 3 +#endif + +#ifdef VAX +#define n_bigtens 2 +#endif + +#ifndef __MATH_H__ +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1 +Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined. +#endif + +typedef union { double d; ULong L[2]; } __attribute__((__may_alias__)) U; + +#ifdef IEEE_8087 +#define word0(x) (x)->L[1] +#define word1(x) (x)->L[0] +#else +#define word0(x) (x)->L[0] +#define word1(x) (x)->L[1] +#endif +#define dval(x) (x)->d + +/* The following definition of Storeinc is appropriate for MIPS processors. + * An alternative that might be better on some machines is + * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff) + */ +#if defined(IEEE_8087) + defined(VAX) +#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \ +((unsigned short *)a)[0] = (unsigned short)c, a++) +#else +#define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \ +((unsigned short *)a)[1] = (unsigned short)c, a++) +#endif + +/* #define P DBL_MANT_DIG */ +/* Ten_pmax = floor(P*log(2)/log(5)) */ +/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */ +/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */ +/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */ + +#ifdef IEEE_Arith +#define Exp_shift 20 +#define Exp_shift1 20 +#define Exp_msk1 0x100000 +#define Exp_msk11 0x100000 +#define Exp_mask 0x7ff00000 +#define P 53 +#define Bias 1023 +#define Emin (-1022) +#define Exp_1 0x3ff00000 +#define Exp_11 0x3ff00000 +#define Ebits 11 +#define Frac_mask 0xfffff +#define Frac_mask1 0xfffff +#define Ten_pmax 22 +#define Bletch 0x10 +#define Bndry_mask 0xfffff +#define Bndry_mask1 0xfffff +#define LSB 1 +#define Sign_bit 0x80000000 +#define Log2P 1 +#define Tiny0 0 +#define Tiny1 1 +#define Quick_max 14 +#define Int_max 14 + +#ifndef Flt_Rounds +#ifdef FLT_ROUNDS +#define Flt_Rounds FLT_ROUNDS +#else +#define Flt_Rounds 1 +#endif +#endif /*Flt_Rounds*/ + +#else /* ifndef IEEE_Arith */ +#undef Sudden_Underflow +#define Sudden_Underflow +#ifdef IBM +#undef Flt_Rounds +#define Flt_Rounds 0 +#define Exp_shift 24 +#define Exp_shift1 24 +#define Exp_msk1 0x1000000 +#define Exp_msk11 0x1000000 +#define Exp_mask 0x7f000000 +#define P 14 +#define Bias 65 +#define Exp_1 0x41000000 +#define Exp_11 0x41000000 +#define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */ +#define Frac_mask 0xffffff +#define Frac_mask1 0xffffff +#define Bletch 4 +#define Ten_pmax 22 +#define Bndry_mask 0xefffff +#define Bndry_mask1 0xffffff +#define LSB 1 +#define Sign_bit 0x80000000 +#define Log2P 4 +#define Tiny0 0x100000 +#define Tiny1 0 +#define Quick_max 14 +#define Int_max 15 +#else /* VAX */ +#undef Flt_Rounds +#define Flt_Rounds 1 +#define Exp_shift 23 +#define Exp_shift1 7 +#define Exp_msk1 0x80 +#define Exp_msk11 0x800000 +#define Exp_mask 0x7f80 +#define P 56 +#define Bias 129 +#define Exp_1 0x40800000 +#define Exp_11 0x4080 +#define Ebits 8 +#define Frac_mask 0x7fffff +#define Frac_mask1 0xffff007f +#define Ten_pmax 24 +#define Bletch 2 +#define Bndry_mask 0xffff007f +#define Bndry_mask1 0xffff007f +#define LSB 0x10000 +#define Sign_bit 0x8000 +#define Log2P 1 +#define Tiny0 0x80 +#define Tiny1 0 +#define Quick_max 15 +#define Int_max 15 +#endif /* IBM, VAX */ +#endif /* IEEE_Arith */ + +#ifndef IEEE_Arith +#define ROUND_BIASED +#else +#ifdef ROUND_BIASED_without_Round_Up +#undef ROUND_BIASED +#define ROUND_BIASED +#endif +#endif + +#ifdef RND_PRODQUOT +#define rounded_product(a,b) a = rnd_prod(a, b) +#define rounded_quotient(a,b) a = rnd_quot(a, b) +#ifdef KR_headers +extern double rnd_prod(), rnd_quot(); +#else +extern double rnd_prod(double, double), rnd_quot(double, double); +#endif +#else +#define rounded_product(a,b) a *= b +#define rounded_quotient(a,b) a /= b +#endif + +#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) +#define Big1 0xffffffff + +#undef Pack_16 +#ifndef Pack_32 +#define Pack_32 +#endif + +#ifdef NO_LONG_LONG +#undef ULLong +#ifdef Just_16 +#undef Pack_32 +#define Pack_16 +/* When Pack_32 is not defined, we store 16 bits per 32-bit Long. + * This makes some inner loops simpler and sometimes saves work + * during multiplications, but it often seems to make things slightly + * slower. Hence the default is now to store 32 bits per Long. + */ +#endif +#else /* long long available */ +#ifndef Llong +#define Llong long long +#endif +#ifndef ULLong +#define ULLong unsigned Llong +#endif +#endif /* NO_LONG_LONG */ + +#ifdef Pack_32 +#define ULbits 32 +#define kshift 5 +#define kmask 31 +#define ALL_ON 0xffffffff +#else +#define ULbits 16 +#define kshift 4 +#define kmask 15 +#define ALL_ON 0xffff +#endif + +#ifdef MULTIPLE_THREADS /*{{*/ +#define MTa , PTI +#define MTb , &TI +#define MTd , ThInfo **PTI +#define MTk ThInfo **PTI; +extern void ACQUIRE_DTOA_LOCK ANSI((unsigned int)); +extern void FREE_DTOA_LOCK ANSI((unsigned int)); +extern unsigned int dtoa_get_threadno ANSI((void)); +#else /*}{*/ +#define ACQUIRE_DTOA_LOCK(n) /*nothing*/ +#define FREE_DTOA_LOCK(n) /*nothing*/ +#define MTa /*nothing*/ +#define MTb /*nothing*/ +#define MTd /*nothing*/ +#define MTk /*nothing*/ +#endif /*}}*/ + +#define Kmax 9 + + struct +Bigint { + struct Bigint *next; + int k, maxwds, sign, wds; + ULong x[1]; + }; + + typedef struct Bigint Bigint; + + typedef struct +ThInfo { + Bigint *Freelist[Kmax+1]; + Bigint *P5s; + } ThInfo; + +#ifdef NO_STRING_H +#ifdef DECLARE_SIZE_T +typedef unsigned int size_t; +#endif +extern void memcpy_D2A ANSI((void*, const void*, size_t)); +#define Bcopy(x,y) memcpy_D2A(&x->sign,&y->sign,y->wds*sizeof(ULong) + 2*sizeof(int)) +#else /* !NO_STRING_H */ +#define Bcopy(x,y) memcpy(&x->sign,&y->sign,y->wds*sizeof(ULong) + 2*sizeof(int)) +#endif /* NO_STRING_H */ + +#define Balloc Balloc_D2A +#define Bfree Bfree_D2A +#define InfName InfName_D2A +#define NanName NanName_D2A +#define ULtoQ ULtoQ_D2A +#define ULtof ULtof_D2A +#define ULtod ULtod_D2A +#define ULtodd ULtodd_D2A +#define ULtox ULtox_D2A +#define ULtoxL ULtoxL_D2A +#define add_nanbits add_nanbits_D2A +#define any_on any_on_D2A +#define b2d b2d_D2A +#define bigtens bigtens_D2A +#define cmp cmp_D2A +#define copybits copybits_D2A +#define d2b d2b_D2A +#define decrement decrement_D2A +#define diff diff_D2A +#define dtoa_result dtoa_result_D2A +#define g__fmt g__fmt_D2A +#define gethex gethex_D2A +#define hexdig hexdig_D2A +#define hexdig_init hexdig_init_D2A +#define hexnan hexnan_D2A +#define hi0bits(x) hi0bits_D2A((ULong)(x)) +#define i2b i2b_D2A +#define increment increment_D2A +#define lo0bits lo0bits_D2A +#define lshift lshift_D2A +#define match match_D2A +#define mult mult_D2A +#define multadd multadd_D2A +#define nrv_alloc nrv_alloc_D2A +#define pow5mult pow5mult_D2A +#define quorem quorem_D2A +#define ratio ratio_D2A +#define rshift rshift_D2A +#define rv_alloc rv_alloc_D2A +#define s2b s2b_D2A +#define set_ones set_ones_D2A +#define strcp strcp_D2A +#define strtoIg strtoIg_D2A +#define strtod strtod_D2A +#define sum sum_D2A +#define tens tens_D2A +#define tinytens tinytens_D2A +#define tinytens tinytens_D2A +#define trailz trailz_D2A +#define ulp ulp_D2A + + PRIVATE extern char *add_nanbits ANSI((char*, size_t, ULong*, int)); + PRIVATE extern char *dtoa_result; + PRIVATE extern CONST double bigtens[], tens[], tinytens[]; + PRIVATE extern unsigned char hexdig[]; + PRIVATE extern const char *InfName[6], *NanName[3]; + + PRIVATE extern Bigint *Balloc ANSI((int MTd)); + PRIVATE extern void Bfree ANSI((Bigint* MTd)); + PRIVATE extern void ULtof ANSI((ULong*, ULong*, Long, int)); + PRIVATE extern void ULtod ANSI((ULong*, ULong*, Long, int)); + PRIVATE extern void ULtodd ANSI((ULong*, ULong*, Long, int)); + PRIVATE extern void ULtoQ ANSI((ULong*, ULong*, Long, int)); + PRIVATE extern void ULtox ANSI((UShort*, ULong*, Long, int)); + PRIVATE extern void ULtoxL ANSI((ULong*, ULong*, Long, int)); + PRIVATE extern ULong any_on ANSI((Bigint*, int)); + PRIVATE extern double b2d ANSI((Bigint*, int*)); + PRIVATE extern int cmp ANSI((Bigint*, Bigint*)); + PRIVATE extern void copybits ANSI((ULong*, int, Bigint*)); + PRIVATE extern Bigint *d2b ANSI((double, int*, int* MTd)); + PRIVATE extern void decrement ANSI((Bigint*)); + PRIVATE extern Bigint *diff ANSI((Bigint*, Bigint* MTd)); + PRIVATE extern char *dtoa ANSI((double d, int mode, int ndigits, + int *decpt, int *sign, char **rve)); + PRIVATE extern char *g__fmt ANSI((char*, char*, char*, int, ULong, size_t)); + PRIVATE extern int gethex ANSI((CONST char**, CONST FPI*, Long*, Bigint**, int MTd)); + /* PRIVATE extern void hexdig_init ANSI((Void)); */ + PRIVATE extern int hexnan ANSI((CONST char**, CONST FPI*, ULong*)); + PRIVATE extern int hi0bits_D2A ANSI((ULong)); + PRIVATE extern Bigint *i2b ANSI((int MTd)); + PRIVATE extern Bigint *increment ANSI((Bigint* MTd)); + PRIVATE extern int lo0bits ANSI((ULong*)); + PRIVATE extern Bigint *lshift ANSI((Bigint*, int MTd)); + PRIVATE extern int match ANSI((CONST char**, char*)); + PRIVATE extern Bigint *mult ANSI((Bigint*, Bigint* MTd)); + PRIVATE extern Bigint *multadd ANSI((Bigint*, int, int MTd)); + PRIVATE extern char *nrv_alloc ANSI((char*, char **, int MTd)); + PRIVATE extern Bigint *pow5mult ANSI((Bigint*, int MTd)); + PRIVATE extern int quorem ANSI((Bigint*, Bigint*)); + PRIVATE extern double ratio ANSI((Bigint*, Bigint*)); + PRIVATE extern void rshift ANSI((Bigint*, int)); + PRIVATE extern char *rv_alloc ANSI((int MTd)); + PRIVATE extern Bigint *s2b ANSI((CONST char*, int, int, ULong, int MTd)); + PRIVATE extern Bigint *set_ones ANSI((Bigint*, int MTd)); + PRIVATE extern char *strcp ANSI((char*, const char*)); + PRIVATE extern int strtoIg ANSI((CONST char*, char**, CONST FPI*, Long*, Bigint**, int*)); + PRIVATE extern double strtod ANSI((const char *s00, char **se)); + PRIVATE extern Bigint *sum ANSI((Bigint*, Bigint* MTd)); + PRIVATE extern int trailz ANSI((Bigint*)); + PRIVATE extern double ulp ANSI((U*)); + +#ifdef __cplusplus +} +#endif +/* + * NAN_WORD0 and NAN_WORD1 are only referenced in strtod.c. Prior to + * 20050115, they used to be hard-wired here (to 0x7ff80000 and 0, + * respectively), but now are determined by compiling and running + * qnan.c to generate gd_qnan.h, which specifies d_QNAN0 and d_QNAN1. + * Formerly gdtoaimp.h recommended supplying suitable -DNAN_WORD0=... + * and -DNAN_WORD1=... values if necessary. This should still work. + * (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.) + */ +#ifdef IEEE_Arith +#ifndef NO_INFNAN_CHECK +#undef INFNAN_CHECK +#define INFNAN_CHECK +#endif +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#ifndef NAN_WORD0 +#define NAN_WORD0 d_QNAN0 +#endif +#ifndef NAN_WORD1 +#define NAN_WORD1 d_QNAN1 +#endif +#else +#define _0 1 +#define _1 0 +#ifndef NAN_WORD0 +#define NAN_WORD0 d_QNAN1 +#endif +#ifndef NAN_WORD1 +#define NAN_WORD1 d_QNAN0 +#endif +#endif +#else +#undef INFNAN_CHECK +#endif + +#undef SI +#ifdef Sudden_Underflow +#define SI 1 +#else +#define SI 0 +#endif + +#endif /* GDTOAIMP_H_INCLUDED */ diff -Nru mlton-20130715/runtime/gdtoa/gethex.c mlton-20210117+dfsg/runtime/gdtoa/gethex.c --- mlton-20130715/runtime/gdtoa/gethex.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/gethex.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,359 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#ifdef USE_LOCALE +#include +#endif + + int +#ifdef KR_headers +gethex(sp, fpi, exp, bp, sign MTa) + CONST char **sp; CONST FPI *fpi; Long *exp; Bigint **bp; int sign; MTk +#else +gethex( CONST char **sp, CONST FPI *fpi, Long *exp, Bigint **bp, int sign MTd) +#endif +{ + Bigint *b; + CONST unsigned char *decpt, *s0, *s, *s1; + int big, esign, havedig, irv, j, k, n, n0, nbits, up, zret; + ULong L, lostbits, *x; + Long e, e1; +#ifdef USE_LOCALE + int i; +#ifdef NO_LOCALE_CACHE + const unsigned char *decimalpoint = (unsigned char*)localeconv()->decimal_point; +#else + const unsigned char *decimalpoint; + static unsigned char *decimalpoint_cache; + if (!(s0 = decimalpoint_cache)) { + s0 = (unsigned char*)localeconv()->decimal_point; + if ((decimalpoint_cache = (char*)MALLOC(strlen(s0) + 1))) { + strcpy(decimalpoint_cache, s0); + s0 = decimalpoint_cache; + } + } + decimalpoint = s0; +#endif +#endif + + /**** if (!hexdig['0']) hexdig_init(); ****/ + *bp = 0; + havedig = 0; + s0 = *(CONST unsigned char **)sp + 2; + while(s0[havedig] == '0') + havedig++; + s0 += havedig; + s = s0; + decpt = 0; + zret = 0; + e = 0; + if (hexdig[*s]) + havedig++; + else { + zret = 1; +#ifdef USE_LOCALE + for(i = 0; decimalpoint[i]; ++i) { + if (s[i] != decimalpoint[i]) + goto pcheck; + } + decpt = s += i; +#else + if (*s != '.') + goto pcheck; + decpt = ++s; +#endif + if (!hexdig[*s]) + goto pcheck; + while(*s == '0') + s++; + if (hexdig[*s]) + zret = 0; + havedig = 1; + s0 = s; + } + while(hexdig[*s]) + s++; +#ifdef USE_LOCALE + if (*s == *decimalpoint && !decpt) { + for(i = 1; decimalpoint[i]; ++i) { + if (s[i] != decimalpoint[i]) + goto pcheck; + } + decpt = s += i; +#else + if (*s == '.' && !decpt) { + decpt = ++s; +#endif + while(hexdig[*s]) + s++; + }/*}*/ + if (decpt) + e = -(((Long)(s-decpt)) << 2); + pcheck: + s1 = s; + big = esign = 0; + switch(*s) { + case 'p': + case 'P': + switch(*++s) { + case '-': + esign = 1; + /* no break */ + case '+': + s++; + } + if ((n = hexdig[*s]) == 0 || n > 0x19) { + s = s1; + break; + } + e1 = n - 0x10; + while((n = hexdig[*++s]) !=0 && n <= 0x19) { + if (e1 & 0xf8000000) + big = 1; + e1 = 10*e1 + n - 0x10; + } + if (esign) + e1 = -e1; + e += e1; + } + *sp = (char*)s; + if (!havedig) + *sp = (char*)s0 - 1; + if (zret) + return STRTOG_Zero; + if (big) { + if (esign) { + switch(fpi->rounding) { + case FPI_Round_up: + if (sign) + break; + goto ret_tiny; + case FPI_Round_down: + if (!sign) + break; + goto ret_tiny; + } + goto retz; + ret_tiny: + b = Balloc(0 MTa); + b->wds = 1; + b->x[0] = 1; + goto dret; + } + switch(fpi->rounding) { + case FPI_Round_near: + goto ovfl1; + case FPI_Round_up: + if (!sign) + goto ovfl1; + goto ret_big; + case FPI_Round_down: + if (sign) + goto ovfl1; + } + ret_big: + nbits = fpi->nbits; + n0 = n = nbits >> kshift; + if (nbits & kmask) + ++n; + for(j = n, k = 0; j >>= 1; ++k); + *bp = b = Balloc(k MTa); + b->wds = n; + for(j = 0; j < n0; ++j) + b->x[j] = ALL_ON; + if (n > n0) + b->x[j] = ALL_ON >> (ULbits - (nbits & kmask)); + *exp = fpi->emax; + return STRTOG_Normal | STRTOG_Inexlo; + } + n = s1 - s0 - 1; + for(k = 0; n > (1 << (kshift-2)) - 1; n >>= 1) + k++; + b = Balloc(k MTa); + x = b->x; + n = 0; + L = 0; +#ifdef USE_LOCALE + for(i = 0; decimalpoint[i+1]; ++i); +#endif + while(s1 > s0) { +#ifdef USE_LOCALE + if (*--s1 == decimalpoint[i]) { + s1 -= i; + continue; + } +#else + if (*--s1 == '.') + continue; +#endif + if (n == ULbits) { + *x++ = L; + L = 0; + n = 0; + } + L |= (hexdig[*s1] & 0x0f) << n; + n += 4; + } + *x++ = L; + b->wds = n = x - b->x; + n = ULbits*n - hi0bits(L); + nbits = fpi->nbits; + lostbits = 0; + x = b->x; + if (n > nbits) { + n -= nbits; + if (any_on(b,n)) { + lostbits = 1; + k = n - 1; + if (x[k>>kshift] & 1 << (k & kmask)) { + lostbits = 2; + if (k > 0 && any_on(b,k)) + lostbits = 3; + } + } + rshift(b, n); + e += n; + } + else if (n < nbits) { + n = nbits - n; + b = lshift(b, n MTa); + e -= n; + x = b->x; + } + if (e > fpi->emax) { + ovfl: + Bfree(b MTa); + ovfl1: +#ifndef NO_ERRNO + errno = ERANGE; +#endif + switch (fpi->rounding) { + case FPI_Round_zero: + goto ret_big; + case FPI_Round_down: + if (!sign) + goto ret_big; + break; + case FPI_Round_up: + if (sign) + goto ret_big; + } + return STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi; + } + irv = STRTOG_Normal; + if (e < fpi->emin) { + irv = STRTOG_Denormal; + n = fpi->emin - e; + if (n >= nbits) { + switch (fpi->rounding) { + case FPI_Round_near: + if (n == nbits && (n < 2 || lostbits || any_on(b,n-1))) + goto one_bit; + break; + case FPI_Round_up: + if (!sign) + goto one_bit; + break; + case FPI_Round_down: + if (sign) { + one_bit: + x[0] = b->wds = 1; + dret: + *bp = b; + *exp = fpi->emin; +#ifndef NO_ERRNO + errno = ERANGE; +#endif + return STRTOG_Denormal | STRTOG_Inexhi + | STRTOG_Underflow; + } + } + Bfree(b MTa); + retz: +#ifndef NO_ERRNO + errno = ERANGE; +#endif + return STRTOG_Zero | STRTOG_Inexlo | STRTOG_Underflow; + } + k = n - 1; + if (lostbits) + lostbits = 1; + else if (k > 0) + lostbits = any_on(b,k); + if (x[k>>kshift] & 1 << (k & kmask)) + lostbits |= 2; + nbits -= n; + rshift(b,n); + e = fpi->emin; + } + if (lostbits) { + up = 0; + switch(fpi->rounding) { + case FPI_Round_zero: + break; + case FPI_Round_near: + if (lostbits & 2 + && (lostbits | x[0]) & 1) + up = 1; + break; + case FPI_Round_up: + up = 1 - sign; + break; + case FPI_Round_down: + up = sign; + } + if (up) { + k = b->wds; + b = increment(b MTa); + x = b->x; + if (irv == STRTOG_Denormal) { + if (nbits == fpi->nbits - 1 + && x[nbits >> kshift] & 1 << (nbits & kmask)) + irv = STRTOG_Normal; + } + else if (b->wds > k + || ((n = nbits & kmask) !=0 + && hi0bits(x[k-1]) < 32-n)) { + rshift(b,1); + if (++e > fpi->emax) + goto ovfl; + } + irv |= STRTOG_Inexhi; + } + else + irv |= STRTOG_Inexlo; + } + *bp = b; + *exp = e; + return irv; + } diff -Nru mlton-20130715/runtime/gdtoa/g_ffmt.c mlton-20210117+dfsg/runtime/gdtoa/g_ffmt.c --- mlton-20130715/runtime/gdtoa/g_ffmt.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_ffmt.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,93 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + char* +#ifdef KR_headers +gdtoa__g_ffmt(buf, f, ndig, bufsize) char *buf; float *f; int ndig; size_t bufsize; +#else +gdtoa__g_ffmt(char *buf, float *f, int ndig, size_t bufsize) +#endif +{ + static FPI fpi0 = { 24, 1-127-24+1, 254-127-24+1, 1, 0, 6 }; + char *b, *s, *se; + ULong bits[1], *L, sign; + int decpt, ex, i, mode; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + if (ndig < 0) + ndig = 0; + if (bufsize < (size_t)(ndig + 10)) + return 0; + + L = (ULong*)f; + sign = L[0] & 0x80000000L; + if ((L[0] & 0x7f800000) == 0x7f800000) { + /* Infinity or NaN */ + if (L[0] & 0x7fffff) { + return strcp(buf, "NaN"); + } + b = buf; + if (sign) + *b++ = '-'; + return strcp(b, "Infinity"); + } + if (*f == 0.) { + b = buf; +#ifndef IGNORE_ZERO_SIGN + if (L[0] & 0x80000000L) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + bits[0] = L[0] & 0x7fffff; + if ( (ex = (L[0] >> 23) & 0xff) !=0) + bits[0] |= 0x800000; + else + ex = 1; + ex -= 0x7f + 23; + mode = 2; + if (ndig <= 0) { + if (bufsize < 16) + return 0; + mode = 0; + } + i = STRTOG_Normal; + s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); + return g__fmt(buf, s, se, decpt, sign, bufsize); + } diff -Nru mlton-20130715/runtime/gdtoa/g_ffmt_p.c mlton-20210117+dfsg/runtime/gdtoa/g_ffmt_p.c --- mlton-20130715/runtime/gdtoa/g_ffmt_p.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_ffmt_p.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,104 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + extern ULong NanDflt_f_D2A[1]; + + char* +#ifdef KR_headers +gdtoa__g_ffmt_p(buf, f, ndig, bufsize, nik) char *buf; float *f; int ndig; size_t bufsize; int nik; +#else +gdtoa__g_ffmt_p(char *buf, float *f, int ndig, size_t bufsize, int nik) +#endif +{ + static FPI fpi0 = { 24, 1-127-24+1, 254-127-24+1, 1, 0, 6 }; + char *b, *s, *se; + ULong bits[1], *L, sign; + int decpt, ex, i, mode; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + if (ndig < 0) + ndig = 0; + if (bufsize < (size_t)(ndig + 10)) + return 0; + + L = (ULong*)f; + sign = L[0] & 0x80000000L; + if ((L[0] & 0x7f800000) == 0x7f800000) { + /* Infinity or NaN */ + if (nik < 0 || nik > 35) + nik = 0; + if ((bits[0] = L[0] & 0x7fffff)) { + b = buf; + if (sign && nik < 18) + *b++ = '-'; + b = strcp(b, NanName[nik%3]); + if (nik > 5 && (nik < 12 + || (bits[0] ^ NanDflt_f_D2A[0]) & 0x7fffff)) + b = add_nanbits(b, bufsize - (b-buf), bits, 1); + return b; + } + b = buf; + if (sign) + *b++ = '-'; + return strcp(b, InfName[nik%6]); + } + if (*f == 0.) { + b = buf; +#ifndef IGNORE_ZERO_SIGN + if (L[0] & 0x80000000L) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + bits[0] = L[0] & 0x7fffff; + if ( (ex = (L[0] >> 23) & 0xff) !=0) + bits[0] |= 0x800000; + else + ex = 1; + ex -= 0x7f + 23; + mode = 2; + if (ndig <= 0) { + if (bufsize < 16) + return 0; + mode = 0; + } + i = STRTOG_Normal; + s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); + return g__fmt(buf, s, se, decpt, sign, bufsize); + } diff -Nru mlton-20130715/runtime/gdtoa/g__fmt.c mlton-20210117+dfsg/runtime/gdtoa/g__fmt.c --- mlton-20130715/runtime/gdtoa/g__fmt.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g__fmt.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,203 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#ifdef USE_LOCALE +#include +#endif + +#ifndef ldus_QNAN0 +#define ldus_QNAN0 0x7fff +#endif +#ifndef ldus_QNAN1 +#define ldus_QNAN1 0xc000 +#endif +#ifndef ldus_QNAN2 +#define ldus_QNAN2 0 +#endif +#ifndef ldus_QNAN3 +#define ldus_QNAN3 0 +#endif +#ifndef ldus_QNAN4 +#define ldus_QNAN4 0 +#endif + + const char *InfName[6] = { "Infinity", "infinity", "INFINITY", "Inf", "inf", "INF" }; + const char *NanName[3] = { "NaN", "nan", "NAN" }; + ULong NanDflt_Q_D2A[4] = { 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff }; + ULong NanDflt_d_D2A[2] = { d_QNAN1, d_QNAN0 }; + ULong NanDflt_f_D2A[1] = { f_QNAN }; + ULong NanDflt_xL_D2A[3] = { 1, 0x80000000, 0x7fff0000 }; + UShort NanDflt_ldus_D2A[5] = { ldus_QNAN4, ldus_QNAN3, ldus_QNAN2, ldus_QNAN1, ldus_QNAN0 }; + + char * +#ifdef KR_headers +g__fmt(b, s, se, decpt, sign, blen) char *b; char *s; char *se; int decpt; ULong sign; size_t blen; +#else +g__fmt(char *b, char *s, char *se, int decpt, ULong sign, size_t blen) +#endif +{ + int i, j, k; + char *be, *s0; + size_t len; +#ifdef USE_LOCALE +#ifdef NO_LOCALE_CACHE + char *decimalpoint = localeconv()->decimal_point; + size_t dlen = strlen(decimalpoint); +#else + char *decimalpoint; + static char *decimalpoint_cache; + static size_t dlen; + if (!(s0 = decimalpoint_cache)) { + s0 = localeconv()->decimal_point; + dlen = strlen(s0); + if ((decimalpoint_cache = (char*)MALLOC(strlen(s0) + 1))) { + strcpy(decimalpoint_cache, s0); + s0 = decimalpoint_cache; + } + } + decimalpoint = s0; +#endif +#else +#define dlen 0 +#endif + s0 = s; + len = (se-s) + dlen + 6; /* 6 = sign + e+dd + trailing null */ + if (blen < len) + goto ret0; + be = b + blen - 1; + if (sign) + *b++ = '-'; + if (decpt <= -4 || decpt > se - s + 5) { + *b++ = *s++; + if (*s) { +#ifdef USE_LOCALE + while((*b = *decimalpoint++)) + ++b; +#else + *b++ = '.'; +#endif + while((*b = *s++) !=0) + b++; + } + *b++ = 'e'; + /* sprintf(b, "%+.2d", decpt - 1); */ + if (--decpt < 0) { + *b++ = '-'; + decpt = -decpt; + } + else + *b++ = '+'; + for(j = 2, k = 10; 10*k <= decpt; j++, k *= 10){} + for(;;) { + i = decpt / k; + if (b >= be) + goto ret0; + *b++ = i + '0'; + if (--j <= 0) + break; + decpt -= i*k; + decpt *= 10; + } + *b = 0; + } + else if (decpt <= 0) { +#ifdef USE_LOCALE + while((*b = *decimalpoint++)) + ++b; +#else + *b++ = '.'; +#endif + if (be < b - decpt + (se - s)) + goto ret0; + for(; decpt < 0; decpt++) + *b++ = '0'; + while((*b = *s++) != 0) + b++; + } + else { + while((*b = *s++) != 0) { + b++; + if (--decpt == 0 && *s) { +#ifdef USE_LOCALE + while(*b = *decimalpoint++) + ++b; +#else + *b++ = '.'; +#endif + } + } + if (b + decpt > be) { + ret0: + b = 0; + goto ret; + } + for(; decpt > 0; decpt--) + *b++ = '0'; + *b = 0; + } + ret: + gdtoa__freedtoa(s0); + return b; + } + + char * +add_nanbits_D2A(char *b, size_t blen, ULong *bits, int nb) +{ + ULong t; + char *rv; + int i, j; + size_t L; + static char Hexdig[16] = "0123456789abcdef"; + + while(!bits[--nb]) + if (!nb) + return b; + L = 8*nb + 3; + t = bits[nb]; + do ++L; while((t >>= 4)); + if (L > blen) + return b; + b += L; + *--b = 0; + rv = b; + *--b = /*(*/ ')'; + for(i = 0; i < nb; ++i) { + t = bits[i]; + for(j = 0; j < 8; ++j, t >>= 4) + *--b = Hexdig[t & 0xf]; + } + t = bits[nb]; + do *--b = Hexdig[t & 0xf]; while(t >>= 4); + *--b = '('; /*)*/ + return rv; + } diff -Nru mlton-20130715/runtime/gdtoa/gmisc.c mlton-20210117+dfsg/runtime/gdtoa/gmisc.c --- mlton-20130715/runtime/gdtoa/gmisc.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/gmisc.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,86 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + void +#ifdef KR_headers +rshift(b, k) Bigint *b; int k; +#else +rshift(Bigint *b, int k) +#endif +{ + ULong *x, *x1, *xe, y; + int n; + + x = x1 = b->x; + n = k >> kshift; + if (n < b->wds) { + xe = x + b->wds; + x += n; + if (k &= kmask) { + n = ULbits - k; + y = *x++ >> k; + while(x < xe) { + *x1++ = (y | (*x << n)) & ALL_ON; + y = *x++ >> k; + } + if ((*x1 = y) !=0) + x1++; + } + else + while(x < xe) + *x1++ = *x++; + } + if ((b->wds = x1 - b->x) == 0) + b->x[0] = 0; + } + + int +#ifdef KR_headers +trailz(b) Bigint *b; +#else +trailz(Bigint *b) +#endif +{ + ULong L, *x, *xe; + int n = 0; + + x = b->x; + xe = x + b->wds; + for(n = 0; x < xe && !*x; x++) + n += ULbits; + if (x < xe) { + L = *x; + n += lo0bits(&L); + } + return n; + } diff -Nru mlton-20130715/runtime/gdtoa/g_Qfmt.c mlton-20210117+dfsg/runtime/gdtoa/g_Qfmt.c --- mlton-20130715/runtime/gdtoa/g_Qfmt.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_Qfmt.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,119 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#endif +#ifdef IEEE_8087 +#define _0 3 +#define _1 2 +#define _2 1 +#define _3 0 +#endif + + char* +#ifdef KR_headers +gdtoa__g_Qfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; size_t bufsize; +#else +gdtoa__g_Qfmt(char *buf, void *V, int ndig, size_t bufsize) +#endif +{ + static FPI fpi0 = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, 0, Int_max }; + char *b, *s, *se; + ULong bits[4], *L, sign; + int decpt, ex, i, mode; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + if (ndig < 0) + ndig = 0; + if (bufsize < (size_t)(ndig + 10)) + return 0; + + L = (ULong*)V; + sign = L[_0] & 0x80000000L; + bits[3] = L[_0] & 0xffff; + bits[2] = L[_1]; + bits[1] = L[_2]; + bits[0] = L[_3]; + b = buf; + if ( (ex = (L[_0] & 0x7fff0000L) >> 16) !=0) { + if (ex == 0x7fff) { + /* Infinity or NaN */ + if (bits[0] | bits[1] | bits[2] | bits[3]) + b = strcp(b, "NaN"); + else { + b = buf; + if (sign) + *b++ = '-'; + b = strcp(b, "Infinity"); + } + return b; + } + i = STRTOG_Normal; + bits[3] |= 0x10000; + } + else if (bits[0] | bits[1] | bits[2] | bits[3]) { + i = STRTOG_Denormal; + ex = 1; + } + else { +#ifndef IGNORE_ZERO_SIGN + if (sign) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + ex -= 0x3fff + 112; + mode = 2; + if (ndig <= 0) { + if (bufsize < 48) + return 0; + mode = 0; + } + s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); + return g__fmt(buf, s, se, decpt, sign, bufsize); + } diff -Nru mlton-20130715/runtime/gdtoa/g_Qfmt_p.c mlton-20210117+dfsg/runtime/gdtoa/g_Qfmt_p.c --- mlton-20130715/runtime/gdtoa/g_Qfmt_p.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_Qfmt_p.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,132 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + extern ULong NanDflt_Q_D2A[4]; + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#endif +#ifdef IEEE_8087 +#define _0 3 +#define _1 2 +#define _2 1 +#define _3 0 +#endif + + char* +#ifdef KR_headers +gdtoa__g_Qfmt_p(buf, V, ndig, bufsize, nik) char *buf; char *V; int ndig; size_t bufsize; int nik; +#else +gdtoa__g_Qfmt_p(char *buf, void *V, int ndig, size_t bufsize, int nik) +#endif +{ + static FPI fpi0 = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, 0, Int_max }; + char *b, *s, *se; + ULong bits[4], *L, sign; + int decpt, ex, i, mode; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + if (ndig < 0) + ndig = 0; + if (bufsize < (size_t)(ndig + 10)) + return 0; + + L = (ULong*)V; + sign = L[_0] & 0x80000000L; + bits[3] = L[_0] & 0xffff; + bits[2] = L[_1]; + bits[1] = L[_2]; + bits[0] = L[_3]; + b = buf; + if ( (ex = (L[_0] & 0x7fff0000L) >> 16) !=0) { + if (ex == 0x7fff) { + /* Infinity or NaN */ + if (nik < 0 || nik > 35) + nik = 0; + if (bits[0] | bits[1] | bits[2] | bits[3]) { + if (sign && nik < 18) + *b++ = '-'; + b = strcp(b, NanName[nik%3]); + if (nik > 5 && (nik < 12 + || bits[0] != NanDflt_Q_D2A[0] + || bits[1] != NanDflt_Q_D2A[1] + || bits[2] != NanDflt_Q_D2A[2] + || (bits[2] ^ NanDflt_Q_D2A[2]) & 0xffff)) + b = add_nanbits(b, bufsize - (b-buf), bits, 4); + } + else { + b = buf; + if (sign) + *b++ = '-'; + b = strcp(b, InfName[nik%6]); + } + return b; + } + i = STRTOG_Normal; + bits[3] |= 0x10000; + } + else if (bits[0] | bits[1] | bits[2] | bits[3]) { + i = STRTOG_Denormal; + ex = 1; + } + else { +#ifndef IGNORE_ZERO_SIGN + if (sign) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + ex -= 0x3fff + 112; + mode = 2; + if (ndig <= 0) { + if (bufsize < 48) + return 0; + mode = 0; + } + s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); + return g__fmt(buf, s, se, decpt, sign, bufsize); + } diff -Nru mlton-20130715/runtime/gdtoa/g_xfmt.c mlton-20210117+dfsg/runtime/gdtoa/g_xfmt.c --- mlton-20130715/runtime/gdtoa/g_xfmt.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_xfmt.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,119 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#define _4 4 +#endif +#ifdef IEEE_8087 +#define _0 4 +#define _1 3 +#define _2 2 +#define _3 1 +#define _4 0 +#endif + + char* +#ifdef KR_headers +gdtoa__g_xfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; size_t bufsize; +#else +gdtoa__g_xfmt(char *buf, void *V, int ndig, size_t bufsize) +#endif +{ + static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0, Int_max }; + char *b, *s, *se; + ULong bits[2], sign; + UShort *L; + int decpt, ex, i, mode; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + if (ndig < 0) + ndig = 0; + if (bufsize < (size_t)(ndig + 10)) + return 0; + + L = (UShort *)V; + sign = L[_0] & 0x8000; + bits[1] = (L[_1] << 16) | L[_2]; + bits[0] = (L[_3] << 16) | L[_4]; + if ( (ex = L[_0] & 0x7fff) !=0) { + if (ex == 0x7fff) { + /* Infinity or NaN */ + if (!bits[0] && bits[1]== 0x80000000) { + b = buf; + if (sign) + *b++ = '-'; + b = strcp(b, "Infinity"); + } + else + b = strcp(buf, "NaN"); + return b; + } + i = STRTOG_Normal; + } + else if (bits[0] | bits[1]) { + i = STRTOG_Denormal; + ex = 1; + } + else { + b = buf; +#ifndef IGNORE_ZERO_SIGN + if (sign) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + ex -= 0x3fff + 63; + mode = 2; + if (ndig <= 0) { + if (bufsize < 32) + return 0; + mode = 0; + } + s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); + return g__fmt(buf, s, se, decpt, sign, bufsize); + } diff -Nru mlton-20130715/runtime/gdtoa/g_xfmt_p.c mlton-20210117+dfsg/runtime/gdtoa/g_xfmt_p.c --- mlton-20130715/runtime/gdtoa/g_xfmt_p.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_xfmt_p.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,135 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + extern UShort NanDflt_ldus_D2A[5]; + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#define _4 4 +#endif +#ifdef IEEE_8087 +#define _0 4 +#define _1 3 +#define _2 2 +#define _3 1 +#define _4 0 +#endif + + char* +#ifdef KR_headers +gdtoa__g_xfmt_p(buf, V, ndig, bufsize, nik) char *buf; char *V; int ndig; size_t bufsize; int nik; +#else +gdtoa__g_xfmt_p(char *buf, void *V, int ndig, size_t bufsize, int nik) +#endif +{ + static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0, Int_max }; + char *b, *s, *se; + ULong bits[2], sign; + UShort *L; + int decpt, ex, i, mode; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + if (ndig < 0) + ndig = 0; + if (bufsize < (size_t)(ndig + 10)) + return 0; + + L = (UShort *)V; + sign = L[_0] & 0x8000; + bits[1] = (L[_1] << 16) | L[_2]; + bits[0] = (L[_3] << 16) | L[_4]; + if ( (ex = L[_0] & 0x7fff) !=0) { + if (ex == 0x7fff) { + /* Infinity or NaN */ + if (nik < 0 || nik > 35) + nik = 0; + if (!bits[0] && bits[1]== 0x80000000) { + b = buf; + if (sign) + *b++ = '-'; + b = strcp(b, InfName[nik%6]); + } + else { + b = buf; + if (sign && nik < 18) + *b++ = '-'; + b = strcp(b, NanName[nik%3]); + if (nik > 5 && (nik < 12 + || L[_1] != NanDflt_ldus_D2A[3] + || L[_2] != NanDflt_ldus_D2A[2] + || L[_3] != NanDflt_ldus_D2A[1] + || L[_4] != NanDflt_ldus_D2A[0])) { + bits[1] &= 0x7fffffff; + b = add_nanbits(b, bufsize - (b-buf), bits, 2); + } + } + return b; + } + i = STRTOG_Normal; + } + else if (bits[0] | bits[1]) { + i = STRTOG_Denormal; + ex = 1; + } + else { + b = buf; +#ifndef IGNORE_ZERO_SIGN + if (sign) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + ex -= 0x3fff + 63; + mode = 2; + if (ndig <= 0) { + if (bufsize < 32) + return 0; + mode = 0; + } + s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); + return g__fmt(buf, s, se, decpt, sign, bufsize); + } diff -Nru mlton-20130715/runtime/gdtoa/g_xLfmt.c mlton-20210117+dfsg/runtime/gdtoa/g_xLfmt.c --- mlton-20130715/runtime/gdtoa/g_xLfmt.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_xLfmt.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,113 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#endif +#ifdef IEEE_8087 +#define _0 2 +#define _1 1 +#define _2 0 +#endif + + char* +#ifdef KR_headers +gdtoa__g_xLfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; size_t bufsize; +#else +gdtoa__g_xLfmt(char *buf, void *V, int ndig, size_t bufsize) +#endif +{ + static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0, Int_max }; + char *b, *s, *se; + ULong bits[2], *L, sign; + int decpt, ex, i, mode; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + if (ndig < 0) + ndig = 0; + if (bufsize < (size_t)(ndig + 10)) + return 0; + + L = (ULong*)V; + sign = L[_0] & 0x80000000L; + bits[1] = L[_1]; + bits[0] = L[_2]; + if ( (ex = (L[_0] >> 16) & 0x7fff) !=0) { + if (ex == 0x7fff) { + /* Infinity or NaN */ + if (bits[0] | bits[1]) + b = strcp(buf, "NaN"); + else { + b = buf; + if (sign) + *b++ = '-'; + b = strcp(b, "Infinity"); + } + return b; + } + i = STRTOG_Normal; + } + else if (bits[0] | bits[1]) { + i = STRTOG_Denormal; + } + else { + b = buf; +#ifndef IGNORE_ZERO_SIGN + if (sign) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + ex -= 0x3fff + 63; + mode = 2; + if (ndig <= 0) { + if (bufsize < 32) + return 0; + mode = 0; + } + s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); + return g__fmt(buf, s, se, decpt, sign, bufsize); + } diff -Nru mlton-20130715/runtime/gdtoa/g_xLfmt_p.c mlton-20210117+dfsg/runtime/gdtoa/g_xLfmt_p.c --- mlton-20130715/runtime/gdtoa/g_xLfmt_p.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/g_xLfmt_p.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,125 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + extern ULong NanDflt_xL_D2A[3]; + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#endif +#ifdef IEEE_8087 +#define _0 2 +#define _1 1 +#define _2 0 +#endif + + char* +#ifdef KR_headers +gdtoa__g_xLfmt_p(buf, V, ndig, bufsize, nik) char *buf; char *V; int ndig; size_t bufsize; int nik; +#else +gdtoa__g_xLfmt_p(char *buf, void *V, int ndig, size_t bufsize, int nik) +#endif +{ + static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0, Int_max }; + char *b, *s, *se; + ULong bits[2], *L, sign; + int decpt, ex, i, mode; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + if (ndig < 0) + ndig = 0; + if (bufsize < (size_t)(ndig + 10)) + return 0; + + L = (ULong*)V; + sign = L[_0] & 0x80000000L; + bits[1] = L[_1]; + bits[0] = L[_2]; + if ( (ex = (L[_0] >> 16) & 0x7fff) !=0) { + if (ex == 0x7fff) { + /* Infinity or NaN */ + if (nik < 0 || nik > 35) + nik = 0; + if (!bits[0] && bits[1] == 0x80000000) { + b = buf; + if (sign) + *b++ = '-'; + b = strcp(b, InfName[nik%6]); + } + else { + b = buf; + if (sign && nik < 18) + *b++ = '-'; + b = strcp(b, NanName[nik%3]); + if (nik > 5 && (nik < 12 + || bits[0] != NanDflt_xL_D2A[0] + || bits[1] != NanDflt_xL_D2A[1])) + b = add_nanbits(b, bufsize - (b-buf), bits, 2); + } + return b; + } + i = STRTOG_Normal; + } + else if (bits[0] | bits[1]) { + i = STRTOG_Denormal; + } + else { + b = buf; +#ifndef IGNORE_ZERO_SIGN + if (sign) + *b++ = '-'; +#endif + *b++ = '0'; + *b = 0; + return b; + } + ex -= 0x3fff + 63; + mode = 2; + if (ndig <= 0) { + if (bufsize < 32) + return 0; + mode = 0; + } + s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); + return g__fmt(buf, s, se, decpt, sign, bufsize); + } diff -Nru mlton-20130715/runtime/gdtoa/hd_init.c mlton-20210117+dfsg/runtime/gdtoa/hd_init.c --- mlton-20130715/runtime/gdtoa/hd_init.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/hd_init.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,77 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#if 0 + unsigned char hexdig[256]; + + static void +#ifdef KR_headers +htinit(h, s, inc) unsigned char *h; unsigned char *s; int inc; +#else +htinit(unsigned char *h, unsigned char *s, int inc) +#endif +{ + int i, j; + for(i = 0; (j = s[i]) !=0; i++) + h[j] = i + inc; + } + + void +hexdig_init(Void) /* Use of hexdig_init omitted 20121220 to avoid a */ + /* race condition when multiple threads are used. */ +{ +#define USC (unsigned char *) + htinit(hexdig, USC "0123456789", 0x10); + htinit(hexdig, USC "abcdef", 0x10 + 10); + htinit(hexdig, USC "ABCDEF", 0x10 + 10); + } +#else + unsigned char hexdig[256] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0, + 0,26,27,28,29,30,31,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,26,27,28,29,30,31,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + }; +#endif diff -Nru mlton-20130715/runtime/gdtoa/hexnan.c mlton-20210117+dfsg/runtime/gdtoa/hexnan.c --- mlton-20130715/runtime/gdtoa/hexnan.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/hexnan.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,159 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + static void +#ifdef KR_headers +L_shift(x, x1, i) ULong *x; ULong *x1; int i; +#else +L_shift(ULong *x, ULong *x1, int i) +#endif +{ + int j; + + i = 8 - i; + i <<= 2; + j = ULbits - i; + do { + *x |= x[1] << j; + x[1] >>= i; + } while(++x < x1); + } + + int +#ifdef KR_headers +hexnan(sp, fpi, x0) + CONST char **sp; CONST FPI *fpi; ULong *x0; +#else +hexnan( CONST char **sp, CONST FPI *fpi, ULong *x0) +#endif +{ + ULong c, h, *x, *x1, *xe; + CONST char *s; + int havedig, hd0, i, nbits; + + /**** if (!hexdig['0']) hexdig_init(); ****/ + nbits = fpi->nbits; + x = x0 + (nbits >> kshift); + if (nbits & kmask) + x++; + *--x = 0; + x1 = xe = x; + havedig = hd0 = i = 0; + s = *sp; + /* allow optional initial 0x or 0X */ + while((c = *(CONST unsigned char*)(s+1)) && c <= ' ') { + if (!c) + goto retnan; + ++s; + } + if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X') + && *(CONST unsigned char*)(s+3) > ' ') + s += 2; + while((c = *(CONST unsigned char*)++s)) { + if (!(h = hexdig[c])) { + if (c <= ' ') { + if (hd0 < havedig) { + if (x < x1 && i < 8) + L_shift(x, x1, i); + if (x <= x0) { + i = 8; + continue; + } + hd0 = havedig; + *--x = 0; + x1 = x; + i = 0; + } + while((c = *(CONST unsigned char*)(s+1)) <= ' ') { + if (!c) + goto retnan; + ++s; + } + if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X') + && *(CONST unsigned char*)(s+3) > ' ') + s += 2; + continue; + } + if (/*(*/ c == ')' && havedig) { + *sp = s + 1; + break; + } +#ifndef GDTOA_NON_PEDANTIC_NANCHECK + do { + if (/*(*/ c == ')') { + *sp = s + 1; + goto break2; + } + } while((c = *++s)); +#endif + retnan: + return STRTOG_NaN; + } + havedig++; + if (++i > 8) { + if (x <= x0) + continue; + i = 1; + *--x = 0; + } + *x = (*x << 4) | (h & 0xf); + } +#ifndef GDTOA_NON_PEDANTIC_NANCHECK + break2: +#endif + if (!havedig) + return STRTOG_NaN; + if (x < x1 && i < 8) + L_shift(x, x1, i); + if (x > x0) { + x1 = x0; + do *x1++ = *x++; + while(x <= xe); + do *x1++ = 0; + while(x1 <= xe); + } + else { + /* truncate high-order word if necessary */ + if ( (i = nbits & (ULbits-1)) !=0) + *xe &= ((ULong)0xffffffff) >> (ULbits - i); + } + for(x1 = xe;; --x1) { + if (*x1 != 0) + break; + if (x1 == x0) { + *x1 = 1; + break; + } + } + return STRTOG_NaNbits; + } diff -Nru mlton-20130715/runtime/gdtoa/makefile mlton-20210117+dfsg/runtime/gdtoa/makefile --- mlton-20130715/runtime/gdtoa/makefile 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/makefile 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,174 @@ +# /**************************************************************** +# Copyright (C) 1998 by Lucent Technologies +# All Rights Reserved +# +# Permission to use, copy, modify, and distribute this software and +# its documentation for any purpose and without fee is hereby +# granted, provided that the above copyright notice appear in all +# copies and that both that the copyright notice and this +# permission notice and warranty disclaimer appear in supporting +# documentation, and that the name of Lucent or any of its entities +# not be used in advertising or publicity pertaining to +# distribution of the software without specific, written prior +# permission. +# +# LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +# IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +# SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +# THIS SOFTWARE. +# +# ****************************************************************/ + +.SUFFIXES: .c .o +CC = cc +CFLAGS = -g + +.c.o: + $(CC) -c $(CFLAGS) $*.c + +# invoke "make Printf" to add printf.o to gdtoa.a (if desired) + +all: arith.h gd_qnan.h gdtoa.a + +arith.h: arithchk.c + $(CC) $(CFLAGS) arithchk.c || $(CC) -DNO_LONG_LONG $(CFLAGS) arithchk.c + ./a.out >arith.h + rm -f a.out arithchk.o + +gd_qnan.h: arith.h qnan.c + $(CC) $(CFLAGS) qnan.c + ./a.out >gd_qnan.h + rm -f a.out qnan.o + +gdtoa.a: dmisc.c\ + dtoa.c\ + g_Qfmt.c\ + g_Qfmt_p.c\ + g__fmt.c\ + g_ddfmt.c\ + g_ddfmt_p.c\ + g_dfmt.c\ + g_dfmt_p.c\ + g_ffmt.c\ + g_ffmt_p.c\ + g_xLfmt.c\ + g_xLfmt_p.c\ + g_xfmt.c\ + g_xfmt_p.c\ + gdtoa.c\ + gethex.c\ + gmisc.c\ + hd_init.c\ + hexnan.c\ + misc.c\ + smisc.c\ + strtoIQ.c\ + strtoId.c\ + strtoIdd.c\ + strtoIf.c\ + strtoIg.c\ + strtoIx.c\ + strtoIxL.c\ + strtod.c\ + strtodI.c\ + strtodg.c\ + strtof.c\ + strtopQ.c\ + strtopd.c\ + strtopdd.c\ + strtopf.c\ + strtopx.c\ + strtopxL.c\ + strtorQ.c\ + strtord.c\ + strtordd.c\ + strtorf.c\ + strtorx.c\ + strtorxL.c\ + sum.c\ + ulp.c + $(CC) -c $(CFLAGS) $? + x=`echo $? | sed 's/\.c/.o/g'` && ar ruv gdtoa.a $$x && rm $$x + ranlib gdtoa.a || true + +Printf: all printf.c + $(CC) -c $(CFLAGS) printf.c + ar ruv gdtoa.a printf.o + rm printf.o + touch Printf + +# If your system lacks ranlib, you do not need it. + +xs0 = README\ + arithchk.c\ + dmisc.c\ + dtoa.c\ + g_Qfmt.c\ + g_Qfmt_p.c\ + g__fmt.c\ + g_ddfmt.c\ + g_ddfmt_p.c\ + g_dfmt.c\ + g_dfmt_p.c\ + g_ffmt.c\ + g_ffmt_p.c\ + g_xLfmt.c\ + g_xLfmt_p.c\ + g_xfmt.c\ + g_xfmt_p.c\ + gdtoa.c\ + gdtoa.h\ + gdtoa_fltrnds.h\ + gdtoaimp.h\ + gethex.c\ + gmisc.c\ + hd_init.c\ + hexnan.c\ + makefile\ + misc.c\ + printf.c\ + printf.c0\ + qnan.c\ + smisc.c\ + stdio1.h\ + strtoIQ.c\ + strtoId.c\ + strtoIdd.c\ + strtoIf.c\ + strtoIg.c\ + strtoIx.c\ + strtoIxL.c\ + strtod.c\ + strtodI.c\ + strtodg.c\ + strtodnrp.c\ + strtof.c\ + strtopQ.c\ + strtopd.c\ + strtopdd.c\ + strtopf.c\ + strtopx.c\ + strtopxL.c\ + strtorQ.c\ + strtord.c\ + strtordd.c\ + strtorf.c\ + strtorx.c\ + strtorxL.c\ + sum.c\ + ulp.c + +# "make -r xsum.out" to check for transmission errors; source for xsum is +# netlib's "xsum.c from f2c", e.g., +# ftp://netlib.bell-labs.com/netlib/f2c/xsum.c.gz + +xsum.out: xsum0.out $(xs0) + xsum $(xs0) >xsum1.out + cmp xsum0.out xsum1.out && mv xsum1.out xsum.out || diff xsum[01].out + +clean: + rm -f arith.h gd_qnan.h *.[ao] Printf xsum.out xsum1.out diff -Nru mlton-20130715/runtime/gdtoa/misc.c mlton-20210117+dfsg/runtime/gdtoa/misc.c --- mlton-20130715/runtime/gdtoa/misc.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/misc.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,962 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 1999 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#ifndef Omit_Private_Memory +#ifndef PRIVATE_MEM +#define PRIVATE_MEM 2304 +#endif +#define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) +static double private_mem[PRIVATE_mem], *pmem_next = private_mem; +#endif + + static ThInfo TI0; + +#ifdef MULTIPLE_THREADS /*{{*/ + static unsigned int maxthreads = 0; + static ThInfo *TI1; + static int TI0_used; + + void +set_max_gdtoa_threads(unsigned int n) +{ + size_t L; + + if (n > maxthreads) { + L = n*sizeof(ThInfo); + if (TI1) { + TI1 = (ThInfo*)REALLOC(TI1, L); + memset(TI1 + maxthreads, 0, (n-maxthreads)*sizeof(ThInfo)); + } + else { + TI1 = (ThInfo*)MALLOC(L); + if (TI0_used) { + memcpy(TI1, &TI0, sizeof(ThInfo)); + if (n > 1) + memset(TI1 + 1, 0, L - sizeof(ThInfo)); + memset(&TI0, 0, sizeof(ThInfo)); + } + else + memset(TI1, 0, L); + } + maxthreads = n; + } + } + + static ThInfo* +get_TI(void) +{ + unsigned int thno = dtoa_get_threadno(); + if (thno < maxthreads) + return TI1 + thno; + if (thno == 0) + TI0_used = 1; + return &TI0; + } +#define freelist TI->Freelist +#define p5s TI->P5s +#else /*}{*/ +#define freelist TI0.Freelist +#define p5s TI0.P5s +#endif /*}}*/ + + Bigint * +Balloc +#ifdef KR_headers + (k MTa) int k; MTk +#else + (int k MTd) +#endif +{ + int x; + Bigint *rv; +#ifndef Omit_Private_Memory + unsigned int len; +#endif + +#ifdef MULTIPLE_THREADS + ThInfo *TI; + + if (!(TI = *PTI)) + *PTI = TI = get_TI(); + if (TI == &TI0) + ACQUIRE_DTOA_LOCK(0); +#endif + /* The k > Kmax case does not need ACQUIRE_DTOA_LOCK(0), */ + /* but this case seems very unlikely. */ + if (k <= Kmax && (rv = freelist[k]) !=0) { + freelist[k] = rv->next; + } + else { + x = 1 << k; +#ifdef Omit_Private_Memory + rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(ULong)); +#else + len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1) + /sizeof(double); + if (k <= Kmax && pmem_next - private_mem + len - PRIVATE_mem <= 0 +#ifdef MULTIPLE_THREADS + && TI == TI1 +#endif + ) { + rv = (Bigint*)pmem_next; + pmem_next += len; + } + else + rv = (Bigint*)MALLOC(len*sizeof(double)); +#endif + rv->k = k; + rv->maxwds = x; + } +#ifdef MULTIPLE_THREADS + if (TI == &TI0) + FREE_DTOA_LOCK(0); +#endif + rv->sign = rv->wds = 0; + return rv; + } + + void +Bfree +#ifdef KR_headers + (v MTa) Bigint *v; MTk +#else + (Bigint *v MTd) +#endif +{ +#ifdef MULTIPLE_THREADS + ThInfo *TI; +#endif + if (v) { + if (v->k > Kmax) +#ifdef FREE + FREE((void*)v); +#else + free((void*)v); +#endif + else { +#ifdef MULTIPLE_THREADS + if (!(TI = *PTI)) + *PTI = TI = get_TI(); + if (TI == &TI0) + ACQUIRE_DTOA_LOCK(0); +#endif + v->next = freelist[v->k]; + freelist[v->k] = v; +#ifdef MULTIPLE_THREADS + if (TI == &TI0) + FREE_DTOA_LOCK(0); +#endif + } + } + } + + int +lo0bits +#ifdef KR_headers + (y) ULong *y; +#else + (ULong *y) +#endif +{ + int k; + ULong x = *y; + + if (x & 7) { + if (x & 1) + return 0; + if (x & 2) { + *y = x >> 1; + return 1; + } + *y = x >> 2; + return 2; + } + k = 0; + if (!(x & 0xffff)) { + k = 16; + x >>= 16; + } + if (!(x & 0xff)) { + k += 8; + x >>= 8; + } + if (!(x & 0xf)) { + k += 4; + x >>= 4; + } + if (!(x & 0x3)) { + k += 2; + x >>= 2; + } + if (!(x & 1)) { + k++; + x >>= 1; + if (!x) + return 32; + } + *y = x; + return k; + } + + Bigint * +multadd +#ifdef KR_headers + (b, m, a MTa) Bigint *b; int m, a; MTk +#else + (Bigint *b, int m, int a MTd) /* multiply by m and add a */ +#endif +{ + int i, wds; +#ifdef ULLong + ULong *x; + ULLong carry, y; +#else + ULong carry, *x, y; +#ifdef Pack_32 + ULong xi, z; +#endif +#endif + Bigint *b1; + + wds = b->wds; + x = b->x; + i = 0; + carry = a; + do { +#ifdef ULLong + y = *x * (ULLong)m + carry; + carry = y >> 32; + *x++ = y & 0xffffffffUL; +#else +#ifdef Pack_32 + xi = *x; + y = (xi & 0xffff) * m + carry; + z = (xi >> 16) * m + (y >> 16); + carry = z >> 16; + *x++ = (z << 16) + (y & 0xffff); +#else + y = *x * m + carry; + carry = y >> 16; + *x++ = y & 0xffff; +#endif +#endif + } + while(++i < wds); + if (carry) { + if (wds >= b->maxwds) { + b1 = Balloc(b->k+1 MTa); + Bcopy(b1, b); + Bfree(b MTa); + b = b1; + } + b->x[wds++] = carry; + b->wds = wds; + } + return b; + } + + int +hi0bits_D2A +#ifdef KR_headers + (x) ULong x; +#else + (ULong x) +#endif +{ + int k = 0; + + if (!(x & 0xffff0000)) { + k = 16; + x <<= 16; + } + if (!(x & 0xff000000)) { + k += 8; + x <<= 8; + } + if (!(x & 0xf0000000)) { + k += 4; + x <<= 4; + } + if (!(x & 0xc0000000)) { + k += 2; + x <<= 2; + } + if (!(x & 0x80000000)) { + k++; + if (!(x & 0x40000000)) + return 32; + } + return k; + } + + Bigint * +i2b +#ifdef KR_headers + (i MTa) int i; MTk +#else + (int i MTd) +#endif +{ + Bigint *b; + + b = Balloc(1 MTa); + b->x[0] = i; + b->wds = 1; + return b; + } + + Bigint * +mult +#ifdef KR_headers + (a, b MTa) Bigint *a, *b; MTk +#else + (Bigint *a, Bigint *b MTd) +#endif +{ + Bigint *c; + int k, wa, wb, wc; + ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0; + ULong y; +#ifdef ULLong + ULLong carry, z; +#else + ULong carry, z; +#ifdef Pack_32 + ULong z2; +#endif +#endif + + if (a->wds < b->wds) { + c = a; + a = b; + b = c; + } + k = a->k; + wa = a->wds; + wb = b->wds; + wc = wa + wb; + if (wc > a->maxwds) + k++; + c = Balloc(k MTa); + for(x = c->x, xa = x + wc; x < xa; x++) + *x = 0; + xa = a->x; + xae = xa + wa; + xb = b->x; + xbe = xb + wb; + xc0 = c->x; +#ifdef ULLong + for(; xb < xbe; xc0++) { + if ( (y = *xb++) !=0) { + x = xa; + xc = xc0; + carry = 0; + do { + z = *x++ * (ULLong)y + *xc + carry; + carry = z >> 32; + *xc++ = z & 0xffffffffUL; + } + while(x < xae); + *xc = carry; + } + } +#else +#ifdef Pack_32 + for(; xb < xbe; xb++, xc0++) { + if ( (y = *xb & 0xffff) !=0) { + x = xa; + xc = xc0; + carry = 0; + do { + z = (*x & 0xffff) * y + (*xc & 0xffff) + carry; + carry = z >> 16; + z2 = (*x++ >> 16) * y + (*xc >> 16) + carry; + carry = z2 >> 16; + Storeinc(xc, z2, z); + } + while(x < xae); + *xc = carry; + } + if ( (y = *xb >> 16) !=0) { + x = xa; + xc = xc0; + carry = 0; + z2 = *xc; + do { + z = (*x & 0xffff) * y + (*xc >> 16) + carry; + carry = z >> 16; + Storeinc(xc, z, z2); + z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry; + carry = z2 >> 16; + } + while(x < xae); + *xc = z2; + } + } +#else + for(; xb < xbe; xc0++) { + if ( (y = *xb++) !=0) { + x = xa; + xc = xc0; + carry = 0; + do { + z = *x++ * y + *xc + carry; + carry = z >> 16; + *xc++ = z & 0xffff; + } + while(x < xae); + *xc = carry; + } + } +#endif +#endif + for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ; + c->wds = wc; + return c; + } + + Bigint * +pow5mult +#ifdef KR_headers + (b, k MTa) Bigint *b; int k; MTk +#else + (Bigint *b, int k MTd) +#endif +{ + Bigint *b1, *p5, *p51; +#ifdef MULTIPLE_THREADS + ThInfo *TI; +#endif + int i; + static int p05[3] = { 5, 25, 125 }; + + if ( (i = k & 3) !=0) + b = multadd(b, p05[i-1], 0 MTa); + + if (!(k >>= 2)) + return b; +#ifdef MULTIPLE_THREADS + if (!(TI = *PTI)) + *PTI = TI = get_TI(); +#endif + if ((p5 = p5s) == 0) { + /* first time */ +#ifdef MULTIPLE_THREADS + if (!(TI = *PTI)) + *PTI = TI = get_TI(); + if (TI == &TI0) + ACQUIRE_DTOA_LOCK(1); + if (!(p5 = p5s)) { + p5 = p5s = i2b(625 MTa); + p5->next = 0; + } + if (TI == &TI0) + FREE_DTOA_LOCK(1); +#else + p5 = p5s = i2b(625); + p5->next = 0; +#endif + } + for(;;) { + if (k & 1) { + b1 = mult(b, p5 MTa); + Bfree(b MTa); + b = b1; + } + if (!(k >>= 1)) + break; + if ((p51 = p5->next) == 0) { +#ifdef MULTIPLE_THREADS + if (!TI && !(TI = *PTI)) + *PTI = TI = get_TI(); + if (TI == &TI0) + ACQUIRE_DTOA_LOCK(1); + if (!(p51 = p5->next)) { + p51 = p5->next = mult(p5,p5 MTa); + p51->next = 0; + } + if (TI == &TI0) + FREE_DTOA_LOCK(1); +#else + p51 = p5->next = mult(p5,p5 MTa); + p51->next = 0; +#endif + } + p5 = p51; + } + return b; + } + + Bigint * +lshift +#ifdef KR_headers + (b, k MTa) Bigint *b; int k; MTk +#else + (Bigint *b, int k MTd) +#endif +{ + int i, k1, n, n1; + Bigint *b1; + ULong *x, *x1, *xe, z; + + n = k >> kshift; + k1 = b->k; + n1 = n + b->wds + 1; + for(i = b->maxwds; n1 > i; i <<= 1) + k1++; + b1 = Balloc(k1 MTa); + x1 = b1->x; + for(i = 0; i < n; i++) + *x1++ = 0; + x = b->x; + xe = x + b->wds; + if (k &= kmask) { +#ifdef Pack_32 + k1 = 32 - k; + z = 0; + do { + *x1++ = *x << k | z; + z = *x++ >> k1; + } + while(x < xe); + if ((*x1 = z) !=0) + ++n1; +#else + k1 = 16 - k; + z = 0; + do { + *x1++ = *x << k & 0xffff | z; + z = *x++ >> k1; + } + while(x < xe); + if (*x1 = z) + ++n1; +#endif + } + else do + *x1++ = *x++; + while(x < xe); + b1->wds = n1 - 1; + Bfree(b MTa); + return b1; + } + + int +cmp +#ifdef KR_headers + (a, b) Bigint *a, *b; +#else + (Bigint *a, Bigint *b) +#endif +{ + ULong *xa, *xa0, *xb, *xb0; + int i, j; + + i = a->wds; + j = b->wds; +#ifdef DEBUG + if (i > 1 && !a->x[i-1]) + Bug("cmp called with a->x[a->wds-1] == 0"); + if (j > 1 && !b->x[j-1]) + Bug("cmp called with b->x[b->wds-1] == 0"); +#endif + if (i -= j) + return i; + xa0 = a->x; + xa = xa0 + j; + xb0 = b->x; + xb = xb0 + j; + for(;;) { + if (*--xa != *--xb) + return *xa < *xb ? -1 : 1; + if (xa <= xa0) + break; + } + return 0; + } + + Bigint * +diff +#ifdef KR_headers + (a, b MTa) Bigint *a, *b; MTk +#else + (Bigint *a, Bigint *b MTd) +#endif +{ + Bigint *c; + int i, wa, wb; + ULong *xa, *xae, *xb, *xbe, *xc; +#ifdef ULLong + ULLong borrow, y; +#else + ULong borrow, y; +#ifdef Pack_32 + ULong z; +#endif +#endif + + i = cmp(a,b); + if (!i) { + c = Balloc(0 MTa); + c->wds = 1; + c->x[0] = 0; + return c; + } + if (i < 0) { + c = a; + a = b; + b = c; + i = 1; + } + else + i = 0; + c = Balloc(a->k MTa); + c->sign = i; + wa = a->wds; + xa = a->x; + xae = xa + wa; + wb = b->wds; + xb = b->x; + xbe = xb + wb; + xc = c->x; + borrow = 0; +#ifdef ULLong + do { + y = (ULLong)*xa++ - *xb++ - borrow; + borrow = y >> 32 & 1UL; + *xc++ = y & 0xffffffffUL; + } + while(xb < xbe); + while(xa < xae) { + y = *xa++ - borrow; + borrow = y >> 32 & 1UL; + *xc++ = y & 0xffffffffUL; + } +#else +#ifdef Pack_32 + do { + y = (*xa & 0xffff) - (*xb & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*xa++ >> 16) - (*xb++ >> 16) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(xc, z, y); + } + while(xb < xbe); + while(xa < xae) { + y = (*xa & 0xffff) - borrow; + borrow = (y & 0x10000) >> 16; + z = (*xa++ >> 16) - borrow; + borrow = (z & 0x10000) >> 16; + Storeinc(xc, z, y); + } +#else + do { + y = *xa++ - *xb++ - borrow; + borrow = (y & 0x10000) >> 16; + *xc++ = y & 0xffff; + } + while(xb < xbe); + while(xa < xae) { + y = *xa++ - borrow; + borrow = (y & 0x10000) >> 16; + *xc++ = y & 0xffff; + } +#endif +#endif + while(!*--xc) + wa--; + c->wds = wa; + return c; + } + + double +b2d +#ifdef KR_headers + (a, e) Bigint *a; int *e; +#else + (Bigint *a, int *e) +#endif +{ + ULong *xa, *xa0, w, y, z; + int k; + U d; +#ifdef VAX + ULong d0, d1; +#else +#define d0 word0(&d) +#define d1 word1(&d) +#endif + + xa0 = a->x; + xa = xa0 + a->wds; + y = *--xa; +#ifdef DEBUG + if (!y) Bug("zero y in b2d"); +#endif + k = hi0bits(y); + *e = 32 - k; +#ifdef Pack_32 + if (k < Ebits) { + d0 = Exp_1 | y >> (Ebits - k); + w = xa > xa0 ? *--xa : 0; + d1 = y << ((32-Ebits) + k) | w >> (Ebits - k); + goto ret_d; + } + z = xa > xa0 ? *--xa : 0; + if (k -= Ebits) { + d0 = Exp_1 | y << k | z >> (32 - k); + y = xa > xa0 ? *--xa : 0; + d1 = z << k | y >> (32 - k); + } + else { + d0 = Exp_1 | y; + d1 = z; + } +#else + if (k < Ebits + 16) { + z = xa > xa0 ? *--xa : 0; + d0 = Exp_1 | y << k - Ebits | z >> Ebits + 16 - k; + w = xa > xa0 ? *--xa : 0; + y = xa > xa0 ? *--xa : 0; + d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k; + goto ret_d; + } + z = xa > xa0 ? *--xa : 0; + w = xa > xa0 ? *--xa : 0; + k -= Ebits + 16; + d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k; + y = xa > xa0 ? *--xa : 0; + d1 = w << k + 16 | y << k; +#endif + ret_d: +#ifdef VAX + word0(&d) = d0 >> 16 | d0 << 16; + word1(&d) = d1 >> 16 | d1 << 16; +#endif + return dval(&d); + } +#undef d0 +#undef d1 + + Bigint * +d2b +#ifdef KR_headers + (dd, e, bits MTa) double dd; int *e, *bits; MTk +#else + (double dd, int *e, int *bits MTd) +#endif +{ + Bigint *b; + U d; +#ifndef Sudden_Underflow + int i; +#endif + int de, k; + ULong *x, y, z; +#ifdef VAX + ULong d0, d1; +#else +#define d0 word0(&d) +#define d1 word1(&d) +#endif + d.d = dd; +#ifdef VAX + d0 = word0(&d) >> 16 | word0(&d) << 16; + d1 = word1(&d) >> 16 | word1(&d) << 16; +#endif + +#ifdef Pack_32 + b = Balloc(1 MTa); +#else + b = Balloc(2 MTa); +#endif + x = b->x; + + z = d0 & Frac_mask; + d0 &= 0x7fffffff; /* clear sign bit, which we ignore */ +#ifdef Sudden_Underflow + de = (int)(d0 >> Exp_shift); +#ifndef IBM + z |= Exp_msk11; +#endif +#else + if ( (de = (int)(d0 >> Exp_shift)) !=0) + z |= Exp_msk1; +#endif +#ifdef Pack_32 + if ( (y = d1) !=0) { + if ( (k = lo0bits(&y)) !=0) { + x[0] = y | z << (32 - k); + z >>= k; + } + else + x[0] = y; +#ifndef Sudden_Underflow + i = +#endif + b->wds = (x[1] = z) !=0 ? 2 : 1; + } + else { + k = lo0bits(&z); + x[0] = z; +#ifndef Sudden_Underflow + i = +#endif + b->wds = 1; + k += 32; + } +#else + if ( (y = d1) !=0) { + if ( (k = lo0bits(&y)) !=0) + if (k >= 16) { + x[0] = y | z << 32 - k & 0xffff; + x[1] = z >> k - 16 & 0xffff; + x[2] = z >> k; + i = 2; + } + else { + x[0] = y & 0xffff; + x[1] = y >> 16 | z << 16 - k & 0xffff; + x[2] = z >> k & 0xffff; + x[3] = z >> k+16; + i = 3; + } + else { + x[0] = y & 0xffff; + x[1] = y >> 16; + x[2] = z & 0xffff; + x[3] = z >> 16; + i = 3; + } + } + else { +#ifdef DEBUG + if (!z) + Bug("Zero passed to d2b"); +#endif + k = lo0bits(&z); + if (k >= 16) { + x[0] = z; + i = 0; + } + else { + x[0] = z & 0xffff; + x[1] = z >> 16; + i = 1; + } + k += 32; + } + while(!x[i]) + --i; + b->wds = i + 1; +#endif +#ifndef Sudden_Underflow + if (de) { +#endif +#ifdef IBM + *e = (de - Bias - (P-1) << 2) + k; + *bits = 4*P + 8 - k - hi0bits(word0(&d) & Frac_mask); +#else + *e = de - Bias - (P-1) + k; + *bits = P - k; +#endif +#ifndef Sudden_Underflow + } + else { + *e = de - Bias - (P-1) + 1 + k; +#ifdef Pack_32 + *bits = 32*i - hi0bits(x[i-1]); +#else + *bits = (i+2)*16 - hi0bits(x[i]); +#endif + } +#endif + return b; + } +#undef d0 +#undef d1 + + CONST double +#ifdef IEEE_Arith +bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 }; +CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, 1e-256 + }; +#else +#ifdef IBM +bigtens[] = { 1e16, 1e32, 1e64 }; +CONST double tinytens[] = { 1e-16, 1e-32, 1e-64 }; +#else +bigtens[] = { 1e16, 1e32 }; +CONST double tinytens[] = { 1e-16, 1e-32 }; +#endif +#endif + + CONST double +tens[] = { + 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, + 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, + 1e20, 1e21, 1e22 +#ifdef VAX + , 1e23, 1e24 +#endif + }; + + char * +#ifdef KR_headers +strcp_D2A(a, b) char *a; char *b; +#else +strcp_D2A(char *a, CONST char *b) +#endif +{ + while((*a = *b++)) + a++; + return a; + } + +#ifdef NO_STRING_H + + Char * +#ifdef KR_headers +memcpy_D2A(a, b, len) Char *a; Char *b; size_t len; +#else +memcpy_D2A(void *a1, void *b1, size_t len) +#endif +{ + char *a = (char*)a1, *ae = a + len; + char *b = (char*)b1, *a0 = a; + while(a < ae) + *a++ = *b++; + return a0; + } + +#endif /* NO_STRING_H */ diff -Nru mlton-20130715/runtime/gdtoa/printf.c mlton-20210117+dfsg/runtime/gdtoa/printf.c --- mlton-20130715/runtime/gdtoa/printf.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/printf.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,8 @@ +#ifdef __sun +#define Use_GDTOA_Qtype +#else +#if defined(__i386) || defined(__x86_64) +#define Use_GDTOA_for_i386_long_double +#endif +#endif +#include "printf.c0" diff -Nru mlton-20130715/runtime/gdtoa/printf.c0 mlton-20210117+dfsg/runtime/gdtoa/printf.c0 --- mlton-20130715/runtime/gdtoa/printf.c0 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/printf.c0 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1674 @@ +/**************************************************************** +Copyright (C) 1997, 1999, 2001 Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. +****************************************************************/ + +/* This implements most of ANSI C's printf, fprintf, and sprintf, + * omitting L, with %.0g and %.0G giving the shortest decimal string + * that rounds to the number being converted, and with negative + * precisions allowed for %f. + */ + +#ifdef KR_headers +#include "varargs.h" +#else +#include "stddef.h" +#include "stdarg.h" +#include "stdlib.h" +#endif + +#ifdef Use_GDTOA_for_i386_long_double /*{{*/ +#include "gdtoa.h" +#else /*}{*/ +#ifndef NO_PRINTF_A_FMT /*{*/ +#include "gdtoa.h" +#endif /*}*/ +#endif /*}}*/ + +#ifdef __i386 +#define NO_GDTOA_i386_Quad +#endif + +#ifdef Use_GDTOA_for_i386_long_double /*{*/ +#ifndef NO_GDTOA_i386_Quad /*{*/ +#define GDTOA_both +#define Use_GDTOA_Qtype +#ifdef __ICC__ /* or __INTEL_COMPILER__ or __INTEL_COMPILER ?? */ +#define GDTOA_Qtype _Quad +#else /*{*/ +#ifdef __linux +#define GDTOA_Qtype __float128 +#else +#undef GDTOA_both +#undef Use_GDTOA_Qtype +#endif +#endif /*}*/ +#endif /*} NO_GDTOA_i386_Quad */ +#endif /*} Use_GDTOA_for_i386_long_double */ + +#ifdef Use_GDTOA_Qtype /*{*/ +#ifndef GDTOA_H_INCLUDED +#include "gdtoa.h" +#endif +#ifndef GDTOA_Qtype +#define GDTOA_Qtype long double +#endif +#endif /*}*/ + +#ifndef GDTOA_H_INCLUDED /*{*/ + + enum { /* return values from strtodg */ + STRTOG_Zero = 0, + STRTOG_Normal = 1, + STRTOG_Denormal = 2, + STRTOG_Infinite = 3, + STRTOG_NaN = 4, + STRTOG_NaNbits = 5, + STRTOG_NoNumber = 6, + STRTOG_Retmask = 7}; + + typedef struct +FPI { + int nbits; + int emin; + int emax; + int rounding; + int sudden_underflow; + } FPI; + +enum { /* FPI.rounding values: same as FLT_ROUNDS */ + FPI_Round_zero = 0, + FPI_Round_near = 1, + FPI_Round_up = 2, + FPI_Round_down = 3 + }; +#endif /*}*/ + +#ifdef NO_PRINTF_A_FMT /*{{*/ +#define WANT_A_FMT(x) /*nothing*/ +#else /*}{*/ +#define WANT_A_FMT(x) x +#endif /*}}*/ + +#include "stdio1.h" +#include "string.h" +#include "errno.h" + + typedef struct +Finfo { + union { FILE *cf; char *sf; } u; + char *ob0, *obe1; + size_t lastlen; + } Finfo; + + typedef char *(*pgdtoa) ANSI((CONST FPI*, int be, ULong *bits, int *kind, int mode, int ndigits, int *decpt, char **rve)); + + typedef struct +FPBits { + ULong bits[4]; /* sufficient for quad; modify if considering wider types */ + FPI *fpi; + pgdtoa gdtoa; + int sign; + int ex; /* exponent */ + int kind; + } FPBits; + + typedef union U +{ + double d; + long double ld; +#ifdef GDTOA_Qtype + GDTOA_Qtype Qd; +#endif + unsigned int ui[4]; + unsigned short us[5]; + } U; + + typedef char *(*Putfunc) ANSI((Finfo*, int*)); + typedef void (*Fpbits) ANSI((U*, FPBits*)); + +/* Would have preferred typedef void (*Fpbits)(va_list*, FPBits*) + * but gcc is buggy in this regard. + */ + +#ifdef Use_GDTOA_for_i386_long_double /*{*/ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#define _4 4 +#endif +#ifdef IEEE_8087 +#define _0 4 +#define _1 3 +#define _2 2 +#define _3 1 +#define _4 0 +#endif + + static void +xfpbits(U *u, FPBits *b) +{ + ULong *bits; + int ex, i; + static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0, 0 /*not used*/ }; + + b->fpi = &fpi0; + b->gdtoa = gdtoa; + b->sign = u->us[_0] & 0x8000; + bits = b->bits; + bits[1] = (u->us[_1] << 16) | u->us[_2]; + bits[0] = (u->us[_3] << 16) | u->us[_4]; + if ( (ex = u->us[_0] & 0x7fff) !=0) { + i = STRTOG_Normal; + if (ex == 0x7fff) + /* Infinity or NaN */ + i = bits[0] | bits[1] ? STRTOG_NaN : STRTOG_Infinite; + } + else if (bits[0] | bits[1]) { + i = STRTOG_Denormal; + ex = 1; + } + else + i = STRTOG_Zero; + b->kind = i; + b->ex = ex - (0x3fff + 63); + } + +#undef _0 +#undef _1 +#undef _2 +#undef _3 +#undef _4 +#define GDTOA_LD_fpbits xfpbits +#endif /*} Use_GDTOA_for_i386_long_double */ + +#ifdef Use_GDTOA_Qtype /*{*/ +#include "gdtoa.h" +#ifndef GDTOA_Qtype +#define GDTOA_Qtype long double +#endif +#ifdef GDTOA_LD_fpbits +#define GDTOA_Q_fpbits Qfpbits +#else +#define GDTOA_LD_fpbits Qfpbits +#endif + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#endif +#ifdef IEEE_8087 +#define _0 3 +#define _1 2 +#define _2 1 +#define _3 0 +#endif + + static void +Qfpbits(U *u, FPBits *b) +{ + ULong *bits; + int ex, i; + static FPI fpi0 = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, 0, 0 /*not used*/ }; + + b->fpi = &fpi0; + b->gdtoa = gdtoa; + b->sign = u->ui[_0] & 0x80000000L; + bits = b->bits; + bits[3] = u->ui[_0] & 0xffff; + bits[2] = u->ui[_1]; + bits[1] = u->ui[_2]; + bits[0] = u->ui[_3]; + if ( (ex = (u->ui[_0] & 0x7fff0000L) >> 16) !=0) { + if (ex == 0x7fff) { + /* Infinity or NaN */ + i = bits[0] | bits[1] | bits[2] | bits[3] + ? STRTOG_NaN : STRTOG_Infinite; + } + else { + i = STRTOG_Normal; + bits[3] |= 0x10000; + } + } + else if (bits[0] | bits[1] | bits[2] | bits[3]) { + i = STRTOG_Denormal; + ex = 1; + } + else + i = STRTOG_Zero; + b->kind = i; + b->ex = ex - (0x3fff + 112); + } + +#undef _0 +#undef _1 +#undef _2 +#undef _3 +#endif /*} GDTOA_Qtype */ + +#ifdef KR_headers +#define Const /* const */ +#define Voidptr char* +#ifndef size_t__ +#define size_t int +#define size_t__ +#endif + +#else + +#define Const const +#define Voidptr void* + +#endif + +#undef MESS +#ifndef Stderr +#define Stderr stderr +#endif + +#ifdef _windows_ +#undef PF_BUF +#define MESS +#include "mux0.h" +#define stdout_or_err(f) (f == stdout) +#else +#define stdout_or_err(f) (f == Stderr || f == stdout) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + extern char *dtoa ANSI((double, int, int, int*, int*, char **)); + extern void freedtoa ANSI((char*)); + + + +#ifdef USE_ULDIV +/* This is for avoiding 64-bit divisions on the DEC Alpha, since */ +/* they are not portable among variants of OSF1 (DEC's Unix). */ + +#define ULDIV(a,b) uldiv_ASL(a,(unsigned long)(b)) + +#ifndef LLBITS +#define LLBITS 6 +#endif +#ifndef ULONG +#define ULONG unsigned long +#endif + + static int +klog(ULONG x) +{ + int k, rv = 0; + + if (x > 1L) + for(k = 1 << LLBITS-1;;) { + if (x >= (1L << k)) { + rv |= k; + x >>= k; + } + if (!(k >>= 1)) + break; + } + return rv; + } + + ULONG +uldiv_ASL(ULONG a, ULONG b) +{ + int ka; + ULONG c, k; + static ULONG b0; + static int kb; + + if (a < b) + return 0; + if (b != b0) { + b0 = b; + kb = klog(b); + } + k = 1; + if ((ka = klog(a) - kb) > 0) { + k <<= ka; + b <<= ka; + } + c = 0; + for(;;) { + if (a >= b) { + a -= b; + c |= k; + } + if (!(k >>= 1)) + break; + a <<= 1; + } + return c; + } + +#else +#define ULDIV(a,b) a / b +#endif /* USE_ULDIV */ + +#ifdef PF_BUF +FILE *stderr_ASL = (FILE*)&stderr_ASL; +void (*pfbuf_print_ASL) ANSI((char*)); +char *pfbuf_ASL; +static char *pfbuf_next; +static size_t pfbuf_len; +extern Char *mymalloc_ASL ANSI((size_t)); +extern Char *myralloc_ASL ANSI((void *, size_t)); + +#undef fflush +#ifdef old_fflush_ASL +#define fflush old_fflush_ASL +#endif + + void +fflush_ASL(FILE *f) +{ + if (f == stderr_ASL) { + if (pfbuf_ASL && pfbuf_print_ASL) { + (*pfbuf_print_ASL)(pfbuf_ASL); + free(pfbuf_ASL); + pfbuf_ASL = 0; + } + } + else + fflush(f); + } + + static void +pf_put(char *buf, int len) +{ + size_t x, y; + if (!pfbuf_ASL) { + x = len + 256; + if (x < 512) + x = 512; + pfbuf_ASL = pfbuf_next = (char*)mymalloc_ASL(pfbuf_len = x); + } + else if ((y = (pfbuf_next - pfbuf_ASL) + len) >= pfbuf_len) { + x = pfbuf_len; + while((x <<= 1) <= y); + y = pfbuf_next - pfbuf_ASL; + pfbuf_ASL = (char*)myralloc_ASL(pfbuf_ASL, x); + pfbuf_next = pfbuf_ASL + y; + pfbuf_len = x; + } + memcpy(pfbuf_next, buf, len); + pfbuf_next += len; + *pfbuf_next = 0; + } + + static char * +pfput(Finfo *f, int *rvp) +{ + int n; + char *ob0 = f->ob0; + *rvp += n = (int)(f->obe1 - ob0); + pf_put(ob0, n); + return ob0; + } +#endif /* PF_BUF */ + + static char * +Fput +#ifdef KR_headers + (f, rvp) Finfo *f; int *rvp; +#else + (Finfo *f, int *rvp) +#endif +{ + char *ob0 = f->ob0; + + *rvp += f->obe1 - ob0; + *f->obe1 = 0; + fputs(ob0, f->u.cf); + return ob0; + } + + +#ifdef _windows_ +int stdout_fileno_ASL = 1; + + static char * +Wput +#ifdef KR_headers + (f, rvp) Finfo *f; int *rvp; +#else + (Finfo *f, int *rvp) +#endif +{ + char *ob0 = f->ob0; + + *rvp += f->obe1 - ob0; + *f->obe1 = 0; + mwrite(ob0, f->obe1 - ob0); + return ob0; + } +#endif /*_windows_*/ + + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#endif +#ifdef IEEE_8087 +#define _0 1 +#define _1 0 +#endif + + static void +dfpbits(U *u, FPBits *b) +{ + ULong *bits; + int ex, i; + static FPI fpi0 = { 53, 1-1023-53+1, 2046-1023-53+1, 1, 0, 0 /*not used*/ }; + + b->fpi = &fpi0; + b->gdtoa = gdtoa; + b->sign = u->ui[_0] & 0x80000000L; + bits = b->bits; + bits[1] = u->ui[_0] & 0xfffff; + bits[0] = u->ui[_1]; + if ( (ex = (u->ui[_0] & 0x7ff00000L) >> 20) !=0) { + if (ex == 0x7ff) { + /* Infinity or NaN */ + i = bits[0] | bits[1] ? STRTOG_NaN : STRTOG_Infinite; + } + else { + i = STRTOG_Normal; + bits[1] |= 0x100000; + } + } + else if (bits[0] | bits[1]) { + i = STRTOG_Denormal; + ex = 1; + } + else + i = STRTOG_Zero; + b->kind = i; + b->ex = ex - (0x3ff + 52); + } + +#undef _0 +#undef _1 + +#ifdef Honor_FLT_ROUNDS /*{{*/ +#ifdef Trust_FLT_ROUNDS /*{{*/ +#define RoundCheck if (Rounding == -1) Rounding = Flt_Rounds; if (Rounding != 1){\ + fpi1 = *fpb.fpi; fpi1.rounding = Rounding; fpb.fpi = &fpi1;} +#else /*}{*/ +#define RoundCheck if (Rounding == -1) { Rounding = 1; switch((fegetround()) {\ + case FE_TOWARDZERO: Rounding = 0; break;\ + case FE_UPWARD: Rounding = 2; break;\ + case FE_DOWNWARD: Rounding = 3; }}\ + if (Rounding != 1){\ + fpi1 = *fpb.fpi; fpi1.rounding = Rounding; fpb.fpi = &fpi1;} +#endif /*}}*/ +#else /*}{*/ +#define RoundCheck /*nothing*/ +#endif /*}}*/ + +#ifndef NO_PRINTF_A_FMT /*{*/ + static int +fpiprec(FPBits *b) /* return number of hex digits minus 1, or 0 for zero */ +{ + FPI *fpi; + ULong *bits; + int i, j, k, m; + + if (b->kind == STRTOG_Zero) + return b->ex = 0; + fpi = b->fpi; + bits = b->bits; + for(k = (fpi->nbits - 1) >> 2; k > 0; --k) + if ((bits[k >> 3] >> 4*(k & 7)) & 0xf) { + m = k >> 3; + for(i = 0; i <= m; ++i) + if (bits[i]) { + if (i > 0) { + k -= 8*i; + b->ex += 32*i; + for(j = i; j <= m; ++j) + bits[j-i] = bits[j]; + } + break; + } + for(i = 0; i < 28 && !((bits[0] >> i) & 0xf); i += 4); + if (i) { + b->ex += i; + m = k >> 3; + k -= (i >> 2); + for(j = 0;;++j) { + bits[j] >>= i; + if (j == m) + break; + bits[j] |= bits[j+1] << (32 - i); + } + } + break; + } + return k; + } + + static int +bround(FPBits *b, int prec, int prec1) /* round to prec hex digits after the "." */ +{ /* prec1 = incoming precision (after ".") */ + ULong *bits, t; + int i, inc, j, k, m, n; +#ifdef Honor_FLT_ROUNDS + int rounding = fpi->rounding; + + if (rounding > FPI_Round_near && b->sign) + rounding = FPI_Round_up + FPI_Round_down - rounding; + if (rounding == FPI_Round_down) + rounding = FPI_Round_zero; +#endif + m = prec1 - prec; + bits = b->bits; + inc = 0; +#ifdef Honor_FLT_ROUNDS + switch(rounding) { + case FPI_Round_up: + for(i = 0; i < m; i += 8) + if (bits[i>>3]) + goto inc1; + if ((j = i - m) > 0 && bits[(i-8)>>3] << j*4) + goto inc1; + break; + case FPI_Round_near: +#endif + k = m - 1; + if ((t = bits[k >> 3] >> (j = (k&7)*4)) & 8) { + if (t & 7) + goto inc1; + if (j && bits[k >> 3] << (32 - j)) + goto inc1; + while(k >= 8) { + k -= 8; + if (bits[k>>3]) { + inc1: + inc = 1; + goto haveinc; + } + } + } +#ifdef Honor_FLT_ROUNDS + } +#endif + haveinc: + b->ex += m*4; + i = m >> 3; + k = prec1 >> 3; + j = i; + if ((n = 4*(m & 7))) + for(;; ++j) { + bits[j-i] = bits[j] >> n; + if (j == k) + break; + bits[j-i] |= bits[j+1] << (32-n); + } + else + for(;; ++j) { + bits[j-i] = bits[j]; + if (j == k) + break; + } + k = prec >> 3; + if (inc) { + for(j = 0; !(++bits[j] & 0xffffffff); ++j); + if (j > k) { + onebit: + bits[0] = 1; + b->ex += 4*prec; + return 1; + } + if ((j = prec & 7) < 7 && bits[k] >> (j+1)*4) + goto onebit; + } + for(i = 0; !(bits[i >> 3] & (0xf << 4*(i&7))); ++i); + if (i) { + b->ex += 4*i; + prec -= i; + j = i >> 3; + i &= 7; + i *= 4; + for(m = j; ; ++m) { + bits[m-j] = bits[m] >> i; + if (m == k) + break; + bits[m-j] |= bits[m+1] << (32 - i); + } + } + return prec; + } +#endif /*}NO_PRINTF_A_FMT*/ + +#define put(x) { *outbuf++ = x; if (outbuf == obe) outbuf = (*fput)(f,&rv); } + + static int +x_sprintf +#ifdef KR_headers + (obe, fput, f, fmt, ap) + char *obe, *fmt; Finfo *f; Putfunc fput; va_list ap; +#else + (char *obe, Putfunc fput, Finfo *f, const char *fmt, va_list ap) +#endif +{ + FPBits fpb; + Fpbits fpbits; + U u; + char *digits, *ob0, *outbuf, *s, *s0, *se; + Const char *fmt0; + char buf[32]; + long i; + unsigned long j, ul; + double x; + int alt, base, c, decpt, dot, conv, i1, k, lead0, left, + len, prec, prec1, psign, rv, sign, width; + long Ltmp, *ip; + short sh; + unsigned short us; + unsigned int ui; +#ifdef Honor_FLT_ROUNDS + FPI fpi1; + int Rounding = -1; +#endif +#ifndef NO_PRINTF_A_FMT /*{*/ + int bex, bw; +#endif /*} NO_PRINTF_A_FMT */ + static char hex[] = "0123456789abcdefpx"; + static char Hex[] = "0123456789ABCDEFPX"; + + ob0 = outbuf = f->ob0; + rv = 0; + for(;;) { + for(;;) { + switch(c = *fmt++) { + case 0: + goto done; + case '%': + break; + default: + put(c) + continue; + } + break; + } + alt=dot=lead0=left=len=prec=psign=sign=width=0; + fpbits = dfpbits; + fmt0 = fmt; + fmtloop: + switch(conv = *fmt++) { + case ' ': + case '+': + sign = conv; + goto fmtloop; + case '-': + if (dot) + psign = 1; + else + left = 1; + goto fmtloop; + case '#': + alt = 1; + goto fmtloop; + case '0': + if (!lead0 && !dot) { + lead0 = 1; + goto fmtloop; + } + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + k = conv - '0'; + while((c = *fmt) >= '0' && c <= '9') { + k = 10*k + c - '0'; + fmt++; + } + if (dot) + prec = psign ? -k : k; + else + width = k; + goto fmtloop; + case 'h': + len = 2; + goto fmtloop; + case 'L': +#ifdef GDTOA_LD_fpbits /*{*/ + fpbits = GDTOA_LD_fpbits; +#ifdef GDTOA_Q_fpbits + if (*fmt == 'q') { + ++fmt; + fpbits = Qfpbits; + } +#endif +#endif /*}*/ + goto fmtloop; + case 'l': + len = 1; + goto fmtloop; + case '.': + dot = 1; + goto fmtloop; + case '*': + k = va_arg(ap, int); + if (dot) + prec = k; + else { + if (k < 0) { + sign = '-'; + k = -k; + } + width = k; + } + goto fmtloop; + case 'c': + c = va_arg(ap, int); + put(c) + continue; + case '%': + put(conv) + continue; + case 'u': + switch(len) { + case 0: + ui = va_arg(ap, int); + i = ui; + break; + case 1: + i = va_arg(ap, long); + break; + case 2: + us = va_arg(ap, int); + i = us; + } + sign = 0; + goto have_i; + case 'i': + case 'd': + switch(len) { + case 0: + k = va_arg(ap, int); + i = k; + break; + case 1: + i = va_arg(ap, long); + break; + case 2: + sh = va_arg(ap, int); + i = sh; + } + if (i < 0) { + sign = '-'; + i = -i; + } + have_i: + base = 10; + ul = i; + digits = hex; + baseloop: + if (dot) + lead0 = 0; + s = buf; + if (!ul) + alt = 0; + do { + j = ULDIV(ul, base); + *s++ = digits[ul - base*j]; + } + while((ul = j)); + prec -= c = s - buf; + if (alt && conv == 'o' && prec <= 0) + prec = 1; + if ((width -= c) > 0) { + if (prec > 0) + width -= prec; + if (sign) + width--; + if (alt == 2) + width--; + } + if (left) { + if (alt == 2) + put('0') /* for 0x */ + if (sign) + put(sign) + while(--prec >= 0) + put('0') + do put(*--s) + while(s > buf); + while(--width >= 0) + put(' ') + continue; + } + if (width > 0) { + if (lead0) { + if (alt == 2) + put('0') + if (sign) + put(sign) + while(--width >= 0) + put('0') + goto s_loop; + } + else + while(--width >= 0) + put(' ') + } + if (alt == 2) + put('0') + if (sign) + put(sign) + s_loop: + while(--prec >= 0) + put('0') + do put(*--s) + while(s > buf); + continue; + case 'n': + ip = va_arg(ap, long*); + if (!ip) + ip = &Ltmp; + c = outbuf - ob0 + rv; + switch(len) { + case 0: + *(int*)ip = c; + break; + case 1: + *ip = c; + break; + case 2: + *(short*)ip = c; + } + break; + case 'p': + len = alt = 1; + /* no break */ + case 'x': + digits = hex; + goto more_x; + case 'X': + digits = Hex; + more_x: + if (alt) { + alt = 2; + sign = conv; + } + else + sign = 0; + base = 16; + get_u: + switch(len) { + case 0: + ui = va_arg(ap, int); + ul = ui; + break; + case 1: + ul = va_arg(ap, long); + break; + case 2: + us = va_arg(ap, int); + ul = us; + } + if (!ul) + sign = alt = 0; + goto baseloop; + case 'o': + base = 8; + digits = hex; + goto get_u; + case 's': + s0 = 0; + s = va_arg(ap, char*); + if (!s) + s = ""; + if (prec < 0) + prec = 0; + have_s: + if (dot) { + for(c = 0; c < prec; c++) + if (!s[c]) + break; + prec = c; + } + else + prec = strlen(s); + width -= prec; + if (!left) + while(--width >= 0) + put(' ') + while(--prec >= 0) + put(*s++) + while(--width >= 0) + put(' ') + if (s0) + freedtoa(s0); + continue; + case 'f': + if (!dot) + prec = 6; +#ifdef GDTOA_H_INCLUDED + if (fpbits == dfpbits) { +#endif + x = va_arg(ap, double); + s = s0 = dtoa(x, 3, prec, &decpt, &fpb.sign, &se); +#ifdef GDTOA_H_INCLUDED + } + else { +#ifdef GDTOA_both + if (fpbits == GDTOA_LD_fpbits) + u.ld = va_arg(ap, long double); + else + u.Qd = va_arg(ap, GDTOA_Qtype); +#else + u.ld = va_arg(ap, long double); +#endif + fpbits(&u, &fpb); + RoundCheck + s = s0 = fpb.gdtoa(fpb.fpi, fpb.ex, fpb.bits, + &fpb.kind, 3, prec, &decpt, &se); + } +#endif + if (decpt == 9999) { + fmt9999: + dot = prec = alt = 0; + if (*s == 'N') + goto have_s; + decpt = strlen(s); + } + f_fmt: + if (fpb.sign && (x||sign)) + sign = '-'; + if (prec > 0) + width -= prec; + if (width > 0) { + if (sign) + --width; + if (decpt <= 0) { + --width; + if (prec > 0) + --width; + } + else { + if (s == se) + decpt = 1; + width -= decpt; + if (prec > 0 || alt) + --width; + } + } + if (width > 0 && !left) { + if (lead0) { + if (sign) + put(sign) + sign = 0; + do put('0') + while(--width > 0); + } + else do put(' ') + while(--width > 0); + } + if (sign) + put(sign) + if (decpt <= 0) { + put('0') + if (prec > 0 || alt) + put('.') + while(decpt < 0) { + put('0') + prec--; + decpt++; + } + } + else { + do { + if ((c = *s)) + s++; + else + c = '0'; + put(c) + } + while(--decpt > 0); + if (prec > 0 || alt) + put('.') + } + while(--prec >= 0) { + if ((c = *s)) + s++; + else + c = '0'; + put(c) + } + while(--width >= 0) + put(' ') + if (s0) + freedtoa(s0); + continue; + case 'G': + case 'g': + if (!dot) + prec = 6; + if (prec < 0) + prec = 0; +#ifdef GDTOA_H_INCLUDED + if (fpbits == dfpbits) { +#endif + x = va_arg(ap, double); + s = s0 = dtoa(x, prec ? 2 : 0, prec, &decpt, + &fpb.sign, &se); +#ifdef GDTOA_H_INCLUDED + } + else { +#ifdef GDTOA_both + if (fpbits == GDTOA_LD_fpbits) + u.ld = va_arg(ap, long double); + else + u.Qd = va_arg(ap, GDTOA_Qtype); +#else + u.ld = va_arg(ap, long double); +#endif + fpbits(&u, &fpb); + RoundCheck + s = s0 = fpb.gdtoa(fpb.fpi, fpb.ex, fpb.bits, + &fpb.kind, prec ? 2 : 0, prec, &decpt, &se); + } +#endif + if (decpt == 9999) + goto fmt9999; + c = se - s; + prec1 = prec; + if (!prec) { + prec = c; + prec1 = c + (s[1] || alt ? 5 : 4); + /* %.0g gives 10 rather than 1e1 */ + } + if (decpt > -4 && decpt <= prec1) { + if (alt) + prec -= decpt; + else + prec = c - decpt; + if (prec < 0) + prec = 0; + goto f_fmt; + } + conv -= 2; + if (!alt && prec > c) + prec = c; + --prec; + goto e_fmt; + case 'e': + case 'E': + if (!dot) + prec = 6; + if (prec < 0) + prec = 0; +#ifdef GDTOA_H_INCLUDED + if (fpbits == dfpbits) { +#endif + x = va_arg(ap, double); + s = s0 = dtoa(x, prec ? 2 : 0, prec+1, &decpt, + &fpb.sign, &se); +#ifdef GDTOA_H_INCLUDED + } + else { +#ifdef GDTOA_both + if (fpbits == GDTOA_LD_fpbits) + u.ld = va_arg(ap, long double); + else + u.Qd = va_arg(ap, GDTOA_Qtype); +#else + u.ld = va_arg(ap, long double); +#endif + fpbits(&u, &fpb); + RoundCheck + s = s0 = fpb.gdtoa(fpb.fpi, fpb.ex, fpb.bits, + &fpb.kind, prec ? 2 : 0, prec, &decpt, &se); + } +#endif + if (decpt == 9999) + goto fmt9999; + e_fmt: + if (fpb.sign && (x||sign)) + sign = '-'; + if ((width -= prec + 5) > 0) { + if (sign) + --width; + if (prec || alt) + --width; + } + if ((c = --decpt) < 0) + c = -c; + while(c >= 100) { + --width; + c /= 10; + } + if (width > 0 && !left) { + if (lead0) { + if (sign) + put(sign) + sign = 0; + do put('0') + while(--width > 0); + } + else do put(' ') + while(--width > 0); + } + if (sign) + put(sign) + put(*s++) + if (prec || alt) + put('.') + while(--prec >= 0) { + if ((c = *s)) + s++; + else + c = '0'; + put(c) + } + put(conv) + if (decpt < 0) { + put('-') + decpt = -decpt; + } + else + put('+') + for(c = 2, k = 10; 10*k <= decpt; c++, k *= 10); + for(;;) { + i1 = decpt / k; + put(i1 + '0') + if (--c <= 0) + break; + decpt -= i1*k; + decpt *= 10; + } + while(--width >= 0) + put(' ') + freedtoa(s0); + continue; +#ifndef NO_PRINTF_A_FMT + case 'a': + digits = hex; + goto more_a; + case 'A': + digits = Hex; + more_a: +#ifdef GDTOA_H_INCLUDED /*{{*/ + if (fpbits == dfpbits) + u.d = va_arg(ap, double); +#ifdef GDTOA_both /*{*/ + else if (fpbits == GDTOA_LD_fpbits) + u.ld = va_arg(ap, long double); + else + u.Qd = va_arg(ap, GDTOA_Qtype); +#else + else + u.ld = va_arg(ap, long double); +#endif /*}*/ +#else /*}{*/ + u.d = va_arg(ap, double); +#endif /*}}*/ + fpbits(&u, &fpb); + if (fpb.kind == STRTOG_Infinite) { + s = "Infinity"; + s0 = 0; + goto fmt9999; + } + if (fpb.kind == STRTOG_NaN) { + s = "NaN"; + s0 = 0; + goto fmt9999; + } + prec1 = fpiprec(&fpb); + if (dot && prec < prec1) + prec1 = bround(&fpb, prec, prec1); + bw = 1; + bex = fpb.ex + 4*prec1; + if (bex) { + if ((i1 = bex) < 0) + i1 = -i1; + while(i1 >= 10) { + ++bw; + i1 /= 10; + } + } + if (fpb.sign && (sign || fpb.kind != STRTOG_Zero)) + sign = '-'; + if ((width -= bw + 5) > 0) { + if (sign) + --width; + if (prec1 || alt) + --width; + } + if ((width -= prec1) > 0 && !left && !lead0) { + do put(' ') + while(--width > 0); + } + if (sign) + put(sign) + put('0') + put(digits[17]) + if (lead0 && width > 0 && !left) { + do put('0') + while(--width > 0); + } + i1 = prec1 & 7; + k = prec1 >> 3; + put(digits[(fpb.bits[k] >> 4*i1) & 0xf]) + if (prec1 > 0 || alt) + put('.') + if (prec1 > 0) { + prec -= prec1; + while(prec1 > 0) { + if (--i1 < 0) { + if (--k < 0) + break; + i1 = 7; + } + put(digits[(fpb.bits[k] >> 4*i1) & 0xf]) + --prec1; + } + if (alt && prec > 0) + do put(0) + while(--prec > 0); + } + put(digits[16]) + if (bex < 0) { + put('-') + bex = -bex; + } + else + put('+') + for(c = 1; 10*c <= bex; c *= 10); + for(;;) { + i1 = bex / c; + put('0' + i1) + if (!--bw) + break; + bex -= i1 * c; + bex *= 10; + } + while(--width >= 0) + put(' ') + continue; +#endif /* NO_PRINTF_A_FMT */ + default: + put('%') + while(fmt0 < fmt) + put(*fmt0++) + continue; + } + } + done: + *outbuf = 0; + return (f->lastlen = outbuf - ob0) + rv; + } + +#define Bsize 256 + + int +Printf +#ifdef KR_headers + (va_alist) + va_dcl +{ + char *fmt; + + va_list ap; + int rv; + Finfo f; + char buf[Bsize]; + + va_start(ap); + fmt = va_arg(ap, char*); + /*}*/ +#else + (const char *fmt, ...) +{ + va_list ap; + int rv; + Finfo f; + char buf[Bsize]; + + va_start(ap, fmt); +#endif + f.u.cf = stdout; + f.ob0 = buf; + f.obe1 = buf + Bsize - 1; +#ifdef _windows_ + if (fileno(stdout) == stdout_fileno_ASL) { + rv = x_sprintf(f.obe1, Wput, &f, fmt, ap); + mwrite(buf, f.lastlen); + } + else +#endif +#ifdef PF_BUF + if (stdout == stderr_ASL) { + rv = x_sprintf(f.obe1, pfput, &f, fmt, ap); + pf_put(buf, f.lastlen); + } + else +#endif + { + rv = x_sprintf(f.obe1, Fput, &f, fmt, ap); + fputs(buf, stdout); + } + va_end(ap); + return rv; + } + + static char * +Sput +#ifdef KR_headers + (f, rvp) Finfo *f; int *rvp; +#else + (Finfo *f, int *rvp) +#endif +{ + if (Printf("\nBUG! Sput called!\n", f, rvp)) + /* pass vp, rvp and return 0 to shut diagnostics off */ + exit(250); + return 0; + } + + int +Sprintf +#ifdef KR_headers + (va_alist) + va_dcl +{ + char *s, *fmt; + va_list ap; + int rv; + Finfo f; + + va_start(ap); + s = va_arg(ap, char*); + fmt = va_arg(ap, char*); + /*}*/ +#else + (char *s, const char *fmt, ...) +{ + va_list ap; + int rv; + Finfo f; + + va_start(ap, fmt); +#endif + f.ob0 = s; + rv = x_sprintf(s, Sput, &f, fmt, ap); + va_end(ap); + return rv; + } + + int +Fprintf +#ifdef KR_headers + (va_alist) + va_dcl +{ + FILE *F; + char *s, *fmt; + va_list ap; + int rv; + Finfo f; + char buf[Bsize]; + + va_start(ap); + F = va_arg(ap, FILE*); + fmt = va_arg(ap, char*); + /*}*/ +#else + (FILE *F, const char *fmt, ...) +{ + va_list ap; + int rv; + Finfo f; + char buf[Bsize]; + + va_start(ap, fmt); +#endif + f.u.cf = F; + f.ob0 = buf; + f.obe1 = buf + Bsize - 1; +#ifdef MESS + if (stdout_or_err(F)) { +#ifdef _windows_ + if (fileno(stdout) == stdout_fileno_ASL) { + rv = x_sprintf(f.obe1, Wput, &f, fmt, ap); + mwrite(buf, f.lastlen); + } + else +#endif +#ifdef PF_BUF + if (F == stderr_ASL) { + rv = x_sprintf(f.obe1, pfput, &f, fmt, ap); + pf_put(buf, f.lastlen); + } + else +#endif + { + rv = x_sprintf(f.obe1, Fput, &f, fmt, ap); + fputs(buf, F); + } + } + else +#endif /*MESS*/ + { +#ifdef PF_BUF + if (F == stderr_ASL) { + rv = x_sprintf(f.obe1, pfput, &f, fmt, ap); + pf_put(buf, f.lastlen); + } + else +#endif + { + rv = x_sprintf(f.obe1, Fput, &f, fmt, ap); + fputs(buf, F); + } + } + va_end(ap); + return rv; + } + + int +Vsprintf +#ifdef KR_headers + (s, fmt, ap) char *s, *fmt; va_list ap; +#else + (char *s, const char *fmt, va_list ap) +#endif +{ + Finfo f; + return x_sprintf(f.ob0 = s, Sput, &f, fmt, ap); + } + + int +Vfprintf +#ifdef KR_headers + (F, fmt, ap) FILE *F; char *fmt; va_list ap; +#else + (FILE *F, const char *fmt, va_list ap) +#endif +{ + char buf[Bsize]; + int rv; + Finfo f; + + f.u.cf = F; + f.ob0 = buf; + f.obe1 = buf + Bsize - 1; +#ifdef MESS + if (stdout_or_err(F)) { +#ifdef _windows_ + if (fileno(stdout) == stdout_fileno_ASL) { + rv = x_sprintf(f.obe1, Wput, &f, fmt, ap); + mwrite(buf, f.lastlen); + } + else +#endif +#ifdef PF_BUF + if (F == stderr_ASL) { + rv = x_sprintf(f.obe1, pfput, &f, fmt, ap); + pf_put(buf, f.lastlen); + } + else +#endif + { + rv = x_sprintf(f.obe1, Fput, &f, fmt, ap); + fputs(buf, F); + } + } + else +#endif /*MESS*/ + { +#ifdef PF_BUF + if (F == stderr_ASL) { + rv = x_sprintf(f.obe1, pfput, &f, fmt, ap); + pf_put(buf, f.lastlen); + } + else +#endif + { + rv = x_sprintf(f.obe1, Fput, &f, fmt, ap); + fputs(buf, F); + } + } + va_end(ap); + return rv; + } + + void +Perror +#ifdef KR_headers + (s) char *s; +#else + (const char *s) +#endif +{ + if (s && *s) + Fprintf(Stderr, "%s: ", s); + Fprintf(Stderr, "%s\n", strerror(errno)); + } + + static char * +Snput +#ifdef KR_headers + (f, rvp) Finfo *f; int *rvp; +#else + (Finfo *f, int *rvp) +#endif +{ + char *s, *s0; + size_t L; + + *rvp += Bsize; + s0 = f->ob0; + s = f->u.sf; + if ((L = f->obe1 - s) > Bsize) { + L = Bsize; + goto copy; + } + if (L > 0) { + copy: + memcpy(s, s0, L); + f->u.sf = s + L; + } + return s0; + } + + int +Vsnprintf +#ifdef KR_headers + (s, n, fmt, ap) char *s; size_t n; char *fmt; va_list ap; +#else + (char *s, size_t n, const char *fmt, va_list ap) +#endif +{ + Finfo f; + char buf[Bsize]; + int rv; + size_t L; + + if (n <= 0 || !s) { + n = 1; + s = buf; + } + f.u.sf = s; + f.ob0 = buf; + f.obe1 = s + n - 1; + rv = x_sprintf(buf + Bsize, Snput, &f, fmt, ap); + if (f.lastlen > (L = f.obe1 - f.u.sf)) + f.lastlen = L; + if (f.lastlen > 0) { + memcpy(f.u.sf, buf, f.lastlen); + f.u.sf += f.lastlen; + } + *f.u.sf = 0; + return rv; + } + int +Snprintf +#ifdef KR_headers + (va_alist) + va_dcl +{ + char *s, *fmt; + int rv; + size_t n; + va_list ap; + + va_start(ap); + s = va_arg(ap, char*); + n = va_arg(ap, size_t); + fmt = va_arg(ap, char*); + /*}*/ +#else + (char *s, size_t n, const char *fmt, ...) +{ + int rv; + va_list ap; + + va_start(ap, fmt); +#endif + rv = Vsnprintf(s, n, fmt, ap); + va_end(ap); + return rv; + } + + +#ifdef __cplusplus +} +#endif diff -Nru mlton-20130715/runtime/gdtoa/qnan.c mlton-20210117+dfsg/runtime/gdtoa/qnan.c --- mlton-20130715/runtime/gdtoa/qnan.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/qnan.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,121 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 2005 by David M. Gay +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that the copyright notice and this permission notice and warranty +disclaimer appear in supporting documentation, and that the name of +the author or any of his current or former employers not be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. + +THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN +NO EVENT SHALL THE AUTHOR OR ANY OF HIS CURRENT OR FORMER EMPLOYERS BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* Program to compute quiet NaNs of various precisions (float, */ +/* double, and perhaps long double) on the current system, */ +/* provided the system uses binary IEEE (P754) arithmetic. */ +/* Note that one system's quiet NaN may be a signaling NaN on */ +/* another system. The IEEE arithmetic standards (P754, P854) */ +/* do not specify how to distinguish signaling NaNs from quiet */ +/* ones, and this detail varies across systems. The computed */ +/* NaN values are encoded in #defines for values for an */ +/* unsigned 32-bit integer type, called Ulong below, and */ +/* (for long double) perhaps as unsigned short values. Once */ +/* upon a time, there were PC compilers for Intel CPUs that */ +/* had sizeof(long double) = 10. Are such compilers still */ +/* distributed? */ + +#include +#include "gdtoa/arith.h" + +#ifndef Long +#define Long long +#endif + +typedef unsigned Long Ulong; + +#ifdef NO_LONG_LONG +#undef Gen_ld_QNAN +#endif + +#undef HAVE_IEEE +#ifdef IEEE_8087 +#define _0 1 +#define _1 0 +#ifdef Gen_ld_QNAN +#define _3 3 +static int perm[4] = { 0, 1, 2, 3 }; +#endif +#define HAVE_IEEE +#endif +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#ifdef Gen_ld_QNAN +#define _3 0 +static int perm[4] = { 3, 2, 1, 0 }; +#endif +#define HAVE_IEEE +#endif + +#define UL (unsigned long) + + int +main(void) +{ +#ifdef HAVE_IEEE + typedef union { + float f; + double d; + Ulong L[4]; +#ifndef NO_LONG_LONG + unsigned short u[5]; + long double D; +#endif + } __attribute__((__may_alias__)) U; + U a, b, c; +#ifdef Gen_ld_QNAN + int i; +#endif + + a.L[0] = b.L[0] = 0x7f800000; + c.f = a.f - b.f; + printf("#define f_QNAN 0x%lx\n", UL (c.L[0] & 0x7fffffff)); + a.L[_0] = b.L[_0] = 0x7ff00000; + a.L[_1] = b.L[_1] = 0; + c.d = a.d - b.d; /* quiet NaN */ + c.L[_0] &= 0x7fffffff; + printf("#define d_QNAN0 0x%lx\n", UL c.L[_0]); + printf("#define d_QNAN1 0x%lx\n", UL c.L[_1]); +#ifdef Gen_ld_QNAN + if (sizeof(a.D) >= 16) { + b.D = c.D = a.d; + if (printf("") < 0) + c.D = 37; /* never executed; just defeat optimization */ + a.L[0] = a.L[1] = a.L[2] = a.L[3] = 0; + a.D = b.D - c.D; + a.L[_3] &= 0x7fffffff; + for(i = 0; i < 4; i++) + printf("#define ld_QNAN%d 0x%lx\n", i, UL a.L[perm[i]]); + } +#endif +#endif /* HAVE_IEEE */ + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/README mlton-20210117+dfsg/runtime/gdtoa/README --- mlton-20130715/runtime/gdtoa/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,419 @@ +This directory contains source for a library of binary -> decimal +and decimal -> binary conversion routines, for single-, double-, +and extended-precision IEEE binary floating-point arithmetic, and +other IEEE-like binary floating-point, including "double double", +as in + + T. J. Dekker, "A Floating-Point Technique for Extending the + Available Precision", Numer. Math. 18 (1971), pp. 224-242 + +and + + "Inside Macintosh: PowerPC Numerics", Addison-Wesley, 1994 + +The conversion routines use double-precision floating-point arithmetic +and, where necessary, high precision integer arithmetic. The routines +are generalizations of the strtod and dtoa routines described in + + David M. Gay, "Correctly Rounded Binary-Decimal and + Decimal-Binary Conversions", Numerical Analysis Manuscript + No. 90-10, Bell Labs, Murray Hill, 1990; + http://cm.bell-labs.com/cm/cs/what/ampl/REFS/rounding.ps.gz + +(based in part on papers by Clinger and Steele & White: see the +references in the above paper). + +The present conversion routines should be able to use any of IEEE binary, +VAX, or IBM-mainframe double-precision arithmetic internally, but I (dmg) +have so far only had a chance to test them with IEEE double precision +arithmetic. + +The core conversion routines are strtodg for decimal -> binary conversions +and gdtoa for binary -> decimal conversions. These routines operate +on arrays of unsigned 32-bit integers of type ULong, a signed 32-bit +exponent of type Long, and arithmetic characteristics described in +struct FPI; FPI, Long, and ULong are defined in gdtoa.h. File arith.h +is supposed to provide #defines that cause gdtoa.h to define its +types correctly. File arithchk.c is source for a program that +generates a suitable arith.h on all systems where I've been able to +test it. + +The core conversion routines are meant to be called by helper routines +that know details of the particular binary arithmetic of interest and +convert. The present directory provides helper routines for 5 variants +of IEEE binary floating-point arithmetic, each indicated by one or +two letters: + + f IEEE single precision + d IEEE double precision + x IEEE extended precision, as on Intel 80x87 + and software emulations of Motorola 68xxx chips + that do not pad the way the 68xxx does, but + only store 80 bits + xL IEEE extended precision, as on Motorola 68xxx chips + Q quad precision, as on Sun Sparc chips + dd double double, pairs of IEEE double numbers + whose sum is the desired value + +For decimal -> binary conversions, there are three families of +helper routines: one for round-nearest (or the current rounding +mode on IEEE-arithmetic systems that provide the C99 fegetround() +function, if compiled with -DHonor_FLT_ROUNDS): + + strtof + strtod + strtodd + strtopd + strtopf + strtopx + strtopxL + strtopQ + +one with rounding direction specified: + + strtorf + strtord + strtordd + strtorx + strtorxL + strtorQ + +and one for computing an interval (at most one bit wide) that contains +the decimal number: + + strtoIf + strtoId + strtoIdd + strtoIx + strtoIxL + strtoIQ + +The latter call strtoIg, which makes one call on strtodg and adjusts +the result to provide the desired interval. On systems where native +arithmetic can easily make one-ulp adjustments on values in the +desired floating-point format, it might be more efficient to use the +native arithmetic. Routine strtodI is a variant of strtoId that +illustrates one way to do this for IEEE binary double-precision +arithmetic -- but whether this is more efficient remains to be seen. + +Functions strtod and strtof have "natural" return types, float and +double -- strtod is specified by the C standard, and strtof appears +in the stdlib.h of some systems, such as (at least some) Linux systems. +The other functions write their results to their final argument(s): +to the final two argument for the strtoI... (interval) functions, +and to the final argument for the others (strtop... and strtor...). +Where possible, these arguments have "natural" return types (double* +or float*), to permit at least some type checking. In reality, they +are viewed as arrays of ULong (or, for the "x" functions, UShort) +values. On systems where long double is the appropriate type, one can +pass long double* final argument(s) to these routines. The int value +that these routines return is the return value from the call they make +on strtodg; see the enum of possible return values in gdtoa.h. + +Source files g_ddfmt.c, misc.c, smisc.c, strtod.c, strtodg.c, and ulp.c +should use true IEEE double arithmetic (not, e.g., double extended), +at least for storing (and viewing the bits of) the variables declared +"double" within them. + +One detail indicated in struct FPI is whether the target binary +arithmetic departs from the IEEE standard by flushing denormalized +numbers to 0. On systems that do this, the helper routines for +conversion to double-double format (when compiled with +Sudden_Underflow #defined) penalize the bottom of the exponent +range so that they return a nonzero result only when the least +significant bit of the less significant member of the pair of +double values returned can be expressed as a normalized double +value. An alternative would be to drop to 53-bit precision near +the bottom of the exponent range. To get correct rounding, this +would (in general) require two calls on strtodg (one specifying +126-bit arithmetic, then, if necessary, one specifying 53-bit +arithmetic). + +By default, the core routine strtodg and strtod set errno to ERANGE +if the result overflows to +Infinity or underflows to 0. Compile +these routines with NO_ERRNO #defined to inhibit errno assignments. + +Routine strtod is based on netlib's "dtoa.c from fp", and +(f = strtod(s,se)) is more efficient for some conversions than, say, +strtord(s,se,1,&f). Parts of strtod require true IEEE double +arithmetic with the default rounding mode (round-to-nearest) and, on +systems with IEEE extended-precision registers, double-precision +(53-bit) rounding precision. If the machine uses (the equivalent of) +Intel 80x87 arithmetic, the call + _control87(PC_53, MCW_PC); +does this with many compilers. Whether this or another call is +appropriate depends on the compiler; for this to work, it may be +necessary to #include "float.h" or another system-dependent header +file. + +Source file strtodnrp.c gives a strtod that does not require 53-bit +rounding precision on systems (such as Intel IA32 systems) that may +suffer double rounding due to use of extended-precision registers. +For some conversions this variant of strtod is less efficient than the +one in strtod.c when the latter is run with 53-bit rounding precision. + +When float or double are involved, the values that the strto* routines +return for NaNs are determined by gd_qnan.h, which the makefile +generates by running the program whose source is qnan.c. For other +types, default NaN values are specified in g__fmt.c and may need +adjusting. Note that the rules for distinguishing signaling from +quiet NaNs are system-dependent. For cross-compilation, you need to +determine arith.h and gd_qnan.h suitably, e.g., using the arithmetic +of the target machine. + +C99's hexadecimal floating-point constants are recognized by the +strto* routines (but this feature has not yet been heavily tested). +Compiling with NO_HEX_FP #defined disables this feature. + +When compiled with -DINFNAN_CHECK, the strto* routines recognize C99's +NaN and Infinity syntax. Moreover, unless No_Hex_NaN is #defined, the +strto* routines also recognize C99's NaN(...) syntax: they accept +(case insensitively) strings of the form NaN(x), where x is a string +of hexadecimal digits and spaces; if there is only one string of +hexadecimal digits, it is taken for the fraction bits of the resulting +NaN; if there are two or more strings of hexadecimal digits, each +string is assigned to the next available sequence of 32-bit words of +fractions bits (starting with the most significant), right-aligned in +each sequence. Strings of hexadecimal digits may be preceded by "0x" +or "0X". + +For binary -> decimal conversions, I've provided a family of helper +routines: + + g_ffmt + g_dfmt + g_ddfmt + g_xfmt + g_xLfmt + g_Qfmt + g_ffmt_p + g_dfmt_p + g_ddfmt_p + g_xfmt_p + g_xLfmt_p + g_Qfmt_p + +which do a "%g" style conversion either to a specified number of decimal +places (if their ndig argument is positive), or to the shortest +decimal string that rounds to the given binary floating-point value +(if ndig <= 0). They write into a buffer supplied as an argument +and return either a pointer to the end of the string (a null character) +in the buffer, if the buffer was long enough, or 0. Other forms of +conversion are easily done with the help of gdtoa(), such as %e or %f +style and conversions with direction of rounding specified (so that, if +desired, the decimal value is either >= or <= the binary value). +On IEEE-arithmetic systems that provide the C99 fegetround() function, +if compiled with -DHonor_FLT_ROUNDS, these routines honor the current +rounding mode. For pedants, the ...fmt_p() routines are similar to the +...fmt() routines, but have an additional final int argument, nik, +that for conversions of Infinity or NaN, determines whether upper, +lower, or mixed case is used, whether (...) is added to NaN values, +and whether the sign of a NaN is reported or suppressed: + + nik = ic + 6*(nb + 3*ns), + +where ic with 0 <= ic < 6 controls the rendering of Infinity and NaN: + + 0 ==> Infinity or NaN + 1 ==> infinity or nan + 2 ==> INFINITY or NAN + 3 ==> Inf or NaN + 4 ==> inf or nan + 5 ==> INF or NAN + +nb with 0 <= nb < 3 determines whether NaN values are rendered +as NaN(...): + + 0 ==> no + 1 ==> yes + 2 ==> no for default NaN values; yes otherwise + +ns = 0 or 1 determines whether the sign of NaN values reported: + + 0 ==> distinguish NaN and -NaN + 1 ==> report both as NaN + +For an example of more general conversions based on dtoa(), see +netlib's "printf.c from ampl/solvers". + +For double-double -> decimal, g_ddfmt() assumes IEEE-like arithmetic +of precision max(126, #bits(input)) bits, where #bits(input) is the +number of mantissa bits needed to represent the sum of the two double +values in the input. + +The makefile creates a library, gdtoa.a. To use the helper +routines, a program only needs to include gdtoa.h. All the +source files for gdtoa.a include a more extensive gdtoaimp.h; +among other things, gdtoaimp.h has #defines that make "internal" +names end in _D2A. To make a "system" library, one could modify +these #defines to make the names start with __. + +Various comments about possible #defines appear in gdtoaimp.h, +but for most purposes, arith.h should set suitable #defines. + +Systems with preemptive scheduling of multiple threads require some +manual intervention. On such systems, it's necessary to compile +dmisc.c, dtoa.c gdota.c, and misc.c with MULTIPLE_THREADS #defined, +and to provide (or suitably #define) two locks, acquired by +ACQUIRE_DTOA_LOCK(n) and freed by FREE_DTOA_LOCK(n) for n = 0 or 1. +(The second lock, accessed in pow5mult, ensures lazy evaluation of +only one copy of high powers of 5; omitting this lock would introduce +a small probability of wasting memory, but would otherwise be harmless.) +Routines that call dtoa or gdtoa directly must also invoke freedtoa(s) +to free the value s returned by dtoa or gdtoa. It's OK to do so whether +or not MULTIPLE_THREADS is #defined, and the helper g_*fmt routines +listed above all do this indirectly (in gfmt_D2A(), which they all call). + +When MULTIPLE_THREADS is #defined, source file misc.c provides + void set_max_gdtoa_threads(unsigned int n); +and expects + unsigned int dtoa_get_threadno(void); +to be available (possibly provided by + #define dtoa_get_threadno omp_get_thread_num +if OpenMP is in use or by + #define dtoa_get_threadno pthread_self +if Pthreads is in use), to return the current thread number. If +set_max_gdtoa_threads(n) was called and the current thread number is +k with k < n, then calls on ACQUIRE_DTOA_LOCK(...) and +FREE_DTOA_LOCK(...) are avoided; instead each thread with thread +number < n has a separate copy of relevant data structures. After +set_max_gdtoa_threads(n), a call set_max_gdtoa_threads(m) with m <= n +has has no effect, but a call with m > n is honored. Such a call +invokes REALLOC (assumed to be "realloc" if REALLOC is not #defined) +to extend the size of the relevant array. + +By default, there is a private pool of memory of length 2304 bytes +for intermediate quantities, and MALLOC (see gdtoaimp.h) is called only +if the private pool does not suffice. 2304 is large enough that MALLOC +is called only under very unusual circumstances (decimal -> binary +conversion of very long strings) for conversions to and from double +precision. For systems with preemptively scheduled multiple threads +or for conversions to extended or quad, it may be appropriate to +#define PRIVATE_MEM nnnn, where nnnn is a suitable value > 2304. +For extended and quad precisions, -DPRIVATE_MEM=20000 is probably +plenty even for many digits at the ends of the exponent range. +Use of the private pool avoids some overhead. When MULTIPLE_THREADS +is #defined, only thread 0 uses PRIVATE_MEM. + +Directory test provides some test routines. See its README. +I've also tested this stuff (except double double conversions) +with Vern Paxson's testbase program: see + + V. Paxson and W. Kahan, "A Program for Testing IEEE Binary-Decimal + Conversion", manuscript, May 1991, + ftp://ftp.ee.lbl.gov/testbase-report.ps.Z . + +(The same ftp directory has source for testbase.) + +Some system-dependent additions to CFLAGS in the makefile: + + HP-UX: -Aa -Ae + OSF (DEC Unix): -ieee_with_no_inexact + SunOS 4.1x: -DKR_headers -DBad_float_h + +If you want to put this stuff into a shared library and your +operating system requires export lists for shared libraries, +the following would be an appropriate export list: + + dtoa + freedtoa + g_Qfmt + g_ddfmt + g_dfmt + g_ffmt + g_xLfmt + g_xfmt + gdtoa + strtoIQ + strtoId + strtoIdd + strtoIf + strtoIx + strtoIxL + strtod + strtodI + strtodg + strtof + strtopQ + strtopd + strtopdd + strtopf + strtopx + strtopxL + strtorQ + strtord + strtordd + strtorf + strtorx + strtorxL + +When time permits, I (dmg) hope to write in more detail about the +present conversion routines; for now, this README file must suffice. +Meanwhile, if you wish to write helper functions for other kinds of +IEEE-like arithmetic, some explanation of struct FPI and the bits +array may be helpful. Both gdtoa and strtodg operate on a bits array +described by FPI *fpi. The bits array is of type ULong, a 32-bit +unsigned integer type. Floating-point numbers have fpi->nbits bits, +with the least significant 32 bits in bits[0], the next 32 bits in +bits[1], etc. These numbers are regarded as integers multiplied by +2^e (i.e., 2 to the power of the exponent e), where e is the second +argument (be) to gdtoa and is stored in *exp by strtodg. The minimum +and maximum exponent values fpi->emin and fpi->emax for normalized +floating-point numbers reflect this arrangement. For example, the +P754 standard for binary IEEE arithmetic specifies doubles as having +53 bits, with normalized values of the form 1.xxxxx... times 2^(b-1023), +with 52 bits (the x's) and the biased exponent b represented explicitly; +b is an unsigned integer in the range 1 <= b <= 2046 for normalized +finite doubles, b = 0 for denormals, and b = 2047 for Infinities and NaNs. +To turn an IEEE double into the representation used by strtodg and gdtoa, +we multiply 1.xxxx... by 2^52 (to make it an integer) and reduce the +exponent e = (b-1023) by 52: + + fpi->emin = 1 - 1023 - 52 + fpi->emax = 1046 - 1023 - 52 + +In various wrappers for IEEE double, we actually write -53 + 1 rather +than -52, to emphasize that there are 53 bits including one implicit bit. +Field fpi->rounding indicates the desired rounding direction, with +possible values + FPI_Round_zero = toward 0, + FPI_Round_near = unbiased rounding -- the IEEE default, + FPI_Round_up = toward +Infinity, and + FPI_Round_down = toward -Infinity +given in gdtoa.h. + +Field fpi->sudden_underflow indicates whether strtodg should return +denormals or flush them to zero. Normal floating-point numbers have +bit fpi->nbits in the bits array on. Denormals have it off, with +exponent = fpi->emin. Strtodg provides distinct return values for normals +and denormals; see gdtoa.h. + +Compiling g__fmt.c, strtod.c, and strtodg.c with -DUSE_LOCALE causes +the decimal-point character to be taken from the current locale; otherwise +it is '.'. + +Source files dtoa.c and strtod.c in this directory are derived from +netlib's "dtoa.c from fp" and are meant to function equivalently. +When compiled with Honor_FLT_ROUNDS #defined (on systems that provide +FLT_ROUNDS and fegetround() as specified in the C99 standard), they +honor the current rounding mode. Because FLT_ROUNDS is buggy on some +(Linux) systems -- not reflecting calls on fesetround(), as the C99 +standard says it should -- when Honor_FLT_ROUNDS is #defined, the +current rounding mode is obtained from fegetround() rather than from +FLT_ROUNDS, unless Trust_FLT_ROUNDS is also #defined. + +Compile with -DUSE_LOCALE to use the current locale; otherwise +decimal points are assumed to be '.'. With -DUSE_LOCALE, unless +you also compile with -DNO_LOCALE_CACHE, the details about the +current "decimal point" character string are cached and assumed not +to change during the program's execution. + +On machines with a 64-bit long double and perhaps a 113-bit "quad" +type, you can invoke "make Printf" to add Printf (and variants, such +as Fprintf) to gdtoa.a. These are analogs, declared in stdio1.h, of +printf and fprintf, etc. in which %La, %Le, %Lf, and %Lg are for long +double and (if appropriate) %Lqa, %Lqe, %Lqf, and %Lqg are for quad +precision printing. + +Please send comments to David M. Gay (dmg at acm dot org, with " at " +changed at "@" and " dot " changed to "."). diff -Nru mlton-20130715/runtime/gdtoa/smisc.c mlton-20210117+dfsg/runtime/gdtoa/smisc.c --- mlton-20130715/runtime/gdtoa/smisc.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/smisc.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,191 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 1999 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + Bigint * +s2b +#ifdef KR_headers + (s, nd0, nd, y9, dplen MTa) CONST char *s; int dplen, nd0, nd; ULong y9; MTk +#else + (CONST char *s, int nd0, int nd, ULong y9, int dplen MTd) +#endif +{ + Bigint *b; + int i, k; + Long x, y; + + x = (nd + 8) / 9; + for(k = 0, y = 1; x > y; y <<= 1, k++) ; +#ifdef Pack_32 + b = Balloc(k MTa); + b->x[0] = y9; + b->wds = 1; +#else + b = Balloc(k+1 MTa); + b->x[0] = y9 & 0xffff; + b->wds = (b->x[1] = y9 >> 16) ? 2 : 1; +#endif + + i = 9; + if (9 < nd0) { + s += 9; + do b = multadd(b, 10, *s++ - '0' MTa); + while(++i < nd0); + s += dplen; + } + else + s += dplen + 9; + for(; i < nd; i++) + b = multadd(b, 10, *s++ - '0' MTa); + return b; + } + + double +ratio +#ifdef KR_headers + (a, b) Bigint *a, *b; +#else + (Bigint *a, Bigint *b) +#endif +{ + U da, db; + int k, ka, kb; + + dval(&da) = b2d(a, &ka); + dval(&db) = b2d(b, &kb); + k = ka - kb + ULbits*(a->wds - b->wds); +#ifdef IBM + if (k > 0) { + word0(&da) += (k >> 2)*Exp_msk1; + if (k &= 3) + dval(&da) *= 1 << k; + } + else { + k = -k; + word0(&db) += (k >> 2)*Exp_msk1; + if (k &= 3) + dval(&db) *= 1 << k; + } +#else + if (k > 0) + word0(&da) += k*Exp_msk1; + else { + k = -k; + word0(&db) += k*Exp_msk1; + } +#endif + return dval(&da) / dval(&db); + } + +#ifdef INFNAN_CHECK + + int +match +#ifdef KR_headers + (sp, t) char **sp, *t; +#else + (CONST char **sp, char *t) +#endif +{ + int c, d; + CONST char *s = *sp; + + while( (d = *t++) !=0) { + if ((c = *++s) >= 'A' && c <= 'Z') + c += 'a' - 'A'; + if (c != d) + return 0; + } + *sp = s + 1; + return 1; + } +#endif /* INFNAN_CHECK */ + + void +#ifdef KR_headers +copybits(c, n, b) ULong *c; int n; Bigint *b; +#else +copybits(ULong *c, int n, Bigint *b) +#endif +{ + ULong *ce, *x, *xe; +#ifdef Pack_16 + int nw, nw1; +#endif + + ce = c + ((n-1) >> kshift) + 1; + x = b->x; +#ifdef Pack_32 + xe = x + b->wds; + while(x < xe) + *c++ = *x++; +#else + nw = b->wds; + nw1 = nw & 1; + for(xe = x + (nw - nw1); x < xe; x += 2) + Storeinc(c, x[1], x[0]); + if (nw1) + *c++ = *x; +#endif + while(c < ce) + *c++ = 0; + } + + ULong +#ifdef KR_headers +any_on(b, k) Bigint *b; int k; +#else +any_on(Bigint *b, int k) +#endif +{ + int n, nwds; + ULong *x, *x0, x1, x2; + + x = b->x; + nwds = b->wds; + n = k >> kshift; + if (n > nwds) + n = nwds; + else if (n < nwds && (k &= kmask)) { + x1 = x2 = x[n]; + x1 >>= k; + x1 <<= k; + if (x1 != x2) + return 1; + } + x0 = x; + x += n; + while(x > x0) + if (*--x) + return 1; + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/stdio1.h mlton-20210117+dfsg/runtime/gdtoa/stdio1.h --- mlton-20130715/runtime/gdtoa/stdio1.h 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/stdio1.h 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,108 @@ +/**************************************************************** +Copyright (C) 1997-1999 Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. +****************************************************************/ + +/* stdio1.h -- for using Printf, Fprintf, Sprintf while + * retaining the system-supplied printf, fprintf, sprintf. + */ + +#ifndef STDIO1_H_included +#define STDIO1_H_included +#ifndef STDIO_H_included /* allow suppressing stdio.h */ +#include /* in case it's already included, */ +#endif /* e.g., by cplex.h */ + +#ifdef KR_headers +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif +#define ANSI(x) () +#include "varargs.h" +#ifndef Char +#define Char char +#endif +#else +#define ANSI(x) x +#include "stdarg.h" +#ifndef Char +#define Char void +#endif +#endif + +#ifndef NO_STDIO1 +#ifdef _WIN32 +/* Avoid Microsoft bug that perrror may appear in stdlib.h. */ +/* It should only be declared in stdio.h. */ +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +extern int Fprintf ANSI((FILE*, const char*, ...)); +extern int Printf ANSI((const char*, ...)); +extern int Sprintf ANSI((char*, const char*, ...)); +extern int Snprintf ANSI((char*, size_t, const char*, ...)); +extern void Perror ANSI((const char*)); +extern int Vfprintf ANSI((FILE*, const char*, va_list)); +extern int Vsprintf ANSI((char*, const char*, va_list)); +extern int Vsnprintf ANSI((char*, size_t, const char*, va_list)); + +#ifdef PF_BUF +extern FILE *stderr_ASL; +extern void (*pfbuf_print_ASL) ANSI((char*)); +extern char *pfbuf_ASL; +extern void fflush_ASL ANSI((FILE*)); +#ifdef fflush +#define old_fflush_ASL fflush +#undef fflush +#endif +#define fflush fflush_ASL +#endif + +#ifdef __cplusplus + } +#endif + +#undef printf +#undef fprintf +#undef sprintf +#undef perror +#undef vfprintf +#undef vsprintf +#define printf Printf +#define fprintf Fprintf +#undef snprintf /* for MacOSX */ +#undef vsnprintf /* for MacOSX */ +#define snprintf Snprintf +#define sprintf Sprintf +#define perror Perror +#define vfprintf Vfprintf +#define vsnprintf Vsnprintf +#define vsprintf Vsprintf + +#endif /* NO_STDIO1 */ + +#endif /* STDIO1_H_included */ diff -Nru mlton-20130715/runtime/gdtoa/strtod.c mlton-20210117+dfsg/runtime/gdtoa/strtod.c --- mlton-20130715/runtime/gdtoa/strtod.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtod.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1081 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998-2001 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" +#ifndef NO_FENV_H +#include +#endif + +#ifdef USE_LOCALE +#include +#endif + +#ifdef IEEE_Arith +#ifndef NO_IEEE_Scale +#define Avoid_Underflow +#undef tinytens +/* The factor of 2^106 in tinytens[4] helps us avoid setting the underflow */ +/* flag unnecessarily. It leads to a song and dance at the end of strtod. */ +static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, + 9007199254740992.*9007199254740992.e-256 + }; +#endif +#endif + +#ifdef Honor_FLT_ROUNDS +#undef Check_FLT_ROUNDS +#define Check_FLT_ROUNDS +#else +#define Rounding Flt_Rounds +#endif + +#ifdef Avoid_Underflow /*{*/ + static double +sulp +#ifdef KR_headers + (x, scale) U *x; int scale; +#else + (U *x, int scale) +#endif +{ + U u; + double rv; + int i; + + rv = ulp(x); + if (!scale || (i = 2*P + 1 - ((word0(x) & Exp_mask) >> Exp_shift)) <= 0) + return rv; /* Is there an example where i <= 0 ? */ + word0(&u) = Exp_1 + (i << Exp_shift); + word1(&u) = 0; + return rv * u.d; + } +#endif /*}*/ + + double +gdtoa__strtod +#ifdef KR_headers + (s00, se) CONST char *s00; char **se; +#else + (CONST char *s00, char **se) +#endif +{ +#ifdef Avoid_Underflow + int scale; +#endif + int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, decpt, dsign, + e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign; + CONST char *s, *s0, *s1; + double aadj; + Long L; + U adj, aadj1, rv, rv0; + ULong y, z; + Bigint *bb, *bb1, *bd, *bd0, *bs, *delta; +#ifdef Avoid_Underflow + ULong Lsb, Lsb1; +#endif +#ifdef SET_INEXACT + int inexact, oldinexact; +#endif +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif +#ifdef USE_LOCALE /*{{*/ +#ifdef NO_LOCALE_CACHE + char *decimalpoint = localeconv()->decimal_point; + int dplen = strlen(decimalpoint); +#else + char *decimalpoint; + static char *decimalpoint_cache; + static int dplen; + if (!(s0 = decimalpoint_cache)) { + s0 = localeconv()->decimal_point; + if ((decimalpoint_cache = (char*)MALLOC(strlen(s0) + 1))) { + strcpy(decimalpoint_cache, s0); + s0 = decimalpoint_cache; + } + dplen = strlen(s0); + } + decimalpoint = (char*)s0; +#endif /*NO_LOCALE_CACHE*/ +#else /*USE_LOCALE}{*/ +#define dplen 1 +#endif /*USE_LOCALE}}*/ + +#ifdef Honor_FLT_ROUNDS /*{*/ + int Rounding; +#ifdef Trust_FLT_ROUNDS /*{{ only define this if FLT_ROUNDS really works! */ + Rounding = Flt_Rounds; +#else /*}{*/ + Rounding = 1; + switch(fegetround()) { + case FE_TOWARDZERO: Rounding = 0; break; + case FE_UPWARD: Rounding = 2; break; + case FE_DOWNWARD: Rounding = 3; + } +#endif /*}}*/ +#endif /*}*/ + + sign = nz0 = nz = decpt = 0; + dval(&rv) = 0.; + for(s = s00;;s++) switch(*s) { + case '-': + sign = 1; + /* no break */ + case '+': + if (*++s) + goto break2; + /* no break */ + case 0: + goto ret0; + case '\t': + case '\n': + case '\v': + case '\f': + case '\r': + case ' ': + continue; + default: + goto break2; + } + break2: + if (*s == '0') { +#ifndef NO_HEX_FP /*{*/ + { + static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI, 0 /*unused*/ }; + Long exp; + ULong bits[2]; + switch(s[1]) { + case 'x': + case 'X': + { +#ifdef Honor_FLT_ROUNDS + FPI fpi1 = fpi; + fpi1.rounding = Rounding; +#else +#define fpi1 fpi +#endif + switch((i = gethex(&s, &fpi1, &exp, &bb, sign MTb)) & STRTOG_Retmask) { + case STRTOG_NoNumber: + s = s00; + sign = 0; + case STRTOG_Zero: + break; + default: + if (bb) { + copybits(bits, fpi.nbits, bb); + Bfree(bb MTb); + } + ULtod(((U*)&rv)->L, bits, exp, i); + }} + goto ret; + } + } +#endif /*}*/ + nz0 = 1; + while(*++s == '0') ; + if (!*s) + goto ret; + } + s0 = s; + y = z = 0; + for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++) + if (nd < 9) + y = 10*y + c - '0'; + else if (nd < DBL_DIG + 2) + z = 10*z + c - '0'; + nd0 = nd; +#ifdef USE_LOCALE + if (c == *decimalpoint) { + for(i = 1; decimalpoint[i]; ++i) + if (s[i] != decimalpoint[i]) + goto dig_done; + s += i; + c = *s; +#else + if (c == '.') { + c = *++s; +#endif + decpt = 1; + if (!nd) { + for(; c == '0'; c = *++s) + nz++; + if (c > '0' && c <= '9') { + s0 = s; + nf += nz; + nz = 0; + goto have_dig; + } + goto dig_done; + } + for(; c >= '0' && c <= '9'; c = *++s) { + have_dig: + nz++; + if (c -= '0') { + nf += nz; + for(i = 1; i < nz; i++) + if (nd++ < 9) + y *= 10; + else if (nd <= DBL_DIG + 2) + z *= 10; + if (nd++ < 9) + y = 10*y + c; + else if (nd <= DBL_DIG + 2) + z = 10*z + c; + nz = 0; + } + } + }/*}*/ + dig_done: + e = 0; + if (c == 'e' || c == 'E') { + if (!nd && !nz && !nz0) { + goto ret0; + } + s00 = s; + esign = 0; + switch(c = *++s) { + case '-': + esign = 1; + case '+': + c = *++s; + } + if (c >= '0' && c <= '9') { + while(c == '0') + c = *++s; + if (c > '0' && c <= '9') { + L = c - '0'; + s1 = s; + while((c = *++s) >= '0' && c <= '9') + L = 10*L + c - '0'; + if (s - s1 > 8 || L > 19999) + /* Avoid confusion from exponents + * so large that e might overflow. + */ + e = 19999; /* safe for 16 bit ints */ + else + e = (int)L; + if (esign) + e = -e; + } + else + e = 0; + } + else + s = s00; + } + if (!nd) { + if (!nz && !nz0) { +#ifdef INFNAN_CHECK + /* Check for Nan and Infinity */ + ULong bits[2]; + static FPI fpinan = /* only 52 explicit bits */ + { 52, 1-1023-53+1, 2046-1023-53+1, 1, SI, 0 /*unused*/ }; + if (!decpt) + switch(c) { + case 'i': + case 'I': + if (match(&s,"nf")) { + --s; + if (!match(&s,"inity")) + ++s; + word0(&rv) = 0x7ff00000; + word1(&rv) = 0; + goto ret; + } + break; + case 'n': + case 'N': + if (match(&s, "an")) { +#ifndef No_Hex_NaN + if (*s == '(' /*)*/ + && hexnan(&s, &fpinan, bits) + == STRTOG_NaNbits) { + word0(&rv) = 0x7ff00000 | bits[1]; + word1(&rv) = bits[0]; + } + else { +#endif + word0(&rv) = NAN_WORD0; + word1(&rv) = NAN_WORD1; +#ifndef No_Hex_NaN + } +#endif + goto ret; + } + } +#endif /* INFNAN_CHECK */ + ret0: + s = s00; + sign = 0; + } + goto ret; + } + e1 = e -= nf; + + /* Now we have nd0 digits, starting at s0, followed by a + * decimal point, followed by nd-nd0 digits. The number we're + * after is the integer represented by those digits times + * 10**e */ + + if (!nd0) + nd0 = nd; + k = nd < DBL_DIG + 2 ? nd : DBL_DIG + 2; + dval(&rv) = y; + if (k > 9) { +#ifdef SET_INEXACT + if (k > DBL_DIG) + oldinexact = get_inexact(); +#endif + dval(&rv) = tens[k - 9] * dval(&rv) + z; + } + bd0 = 0; + if (nd <= DBL_DIG +#ifndef RND_PRODQUOT +#ifndef Honor_FLT_ROUNDS + && Flt_Rounds == 1 +#endif +#endif + ) { + if (!e) + goto ret; +#ifndef ROUND_BIASED_without_Round_Up + if (e > 0) { + if (e <= Ten_pmax) { +#ifdef VAX + goto vax_ovfl_check; +#else +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) { + rv.d = -rv.d; + sign = 0; + } +#endif + /* rv = */ rounded_product(dval(&rv), tens[e]); + goto ret; +#endif + } + i = DBL_DIG - nd; + if (e <= Ten_pmax + i) { + /* A fancier test would sometimes let us do + * this for larger i values. + */ +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) { + rv.d = -rv.d; + sign = 0; + } +#endif + e -= i; + dval(&rv) *= tens[i]; +#ifdef VAX + /* VAX exponent range is so narrow we must + * worry about overflow here... + */ + vax_ovfl_check: + word0(&rv) -= P*Exp_msk1; + /* rv = */ rounded_product(dval(&rv), tens[e]); + if ((word0(&rv) & Exp_mask) + > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) + goto ovfl; + word0(&rv) += P*Exp_msk1; +#else + /* rv = */ rounded_product(dval(&rv), tens[e]); +#endif + goto ret; + } + } +#ifndef Inaccurate_Divide + else if (e >= -Ten_pmax) { +#ifdef Honor_FLT_ROUNDS + /* round correctly FLT_ROUNDS = 2 or 3 */ + if (sign) { + rv.d = -rv.d; + sign = 0; + } +#endif + /* rv = */ rounded_quotient(dval(&rv), tens[-e]); + goto ret; + } +#endif +#endif /* ROUND_BIASED_without_Round_Up */ + } + e1 += nd - k; + +#ifdef IEEE_Arith +#ifdef SET_INEXACT + inexact = 1; + if (k <= DBL_DIG) + oldinexact = get_inexact(); +#endif +#ifdef Avoid_Underflow + scale = 0; +#endif +#ifdef Honor_FLT_ROUNDS + if (Rounding >= 2) { + if (sign) + Rounding = Rounding == 2 ? 0 : 2; + else + if (Rounding != 2) + Rounding = 0; + } +#endif +#endif /*IEEE_Arith*/ + + /* Get starting approximation = rv * 10**e1 */ + + if (e1 > 0) { + if ( (i = e1 & 15) !=0) + dval(&rv) *= tens[i]; + if (e1 &= ~15) { + if (e1 > DBL_MAX_10_EXP) { + ovfl: + /* Can't trust HUGE_VAL */ +#ifdef IEEE_Arith +#ifdef Honor_FLT_ROUNDS + switch(Rounding) { + case 0: /* toward 0 */ + case 3: /* toward -infinity */ + word0(&rv) = Big0; + word1(&rv) = Big1; + break; + default: + word0(&rv) = Exp_mask; + word1(&rv) = 0; + } +#else /*Honor_FLT_ROUNDS*/ + word0(&rv) = Exp_mask; + word1(&rv) = 0; +#endif /*Honor_FLT_ROUNDS*/ +#ifdef SET_INEXACT + /* set overflow bit */ + dval(&rv0) = 1e300; + dval(&rv0) *= dval(&rv0); +#endif +#else /*IEEE_Arith*/ + word0(&rv) = Big0; + word1(&rv) = Big1; +#endif /*IEEE_Arith*/ + range_err: + if (bd0) { + Bfree(bb MTb); + Bfree(bd MTb); + Bfree(bs MTb); + Bfree(bd0 MTb); + Bfree(delta MTb); + } +#ifndef NO_ERRNO + errno = ERANGE; +#endif + goto ret; + } + e1 >>= 4; + for(j = 0; e1 > 1; j++, e1 >>= 1) + if (e1 & 1) + dval(&rv) *= bigtens[j]; + /* The last multiplication could overflow. */ + word0(&rv) -= P*Exp_msk1; + dval(&rv) *= bigtens[j]; + if ((z = word0(&rv) & Exp_mask) + > Exp_msk1*(DBL_MAX_EXP+Bias-P)) + goto ovfl; + if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) { + /* set to largest number */ + /* (Can't trust DBL_MAX) */ + word0(&rv) = Big0; + word1(&rv) = Big1; + } + else + word0(&rv) += P*Exp_msk1; + } + } + else if (e1 < 0) { + e1 = -e1; + if ( (i = e1 & 15) !=0) + dval(&rv) /= tens[i]; + if (e1 >>= 4) { + if (e1 >= 1 << n_bigtens) + goto undfl; +#ifdef Avoid_Underflow + if (e1 & Scale_Bit) + scale = 2*P; + for(j = 0; e1 > 0; j++, e1 >>= 1) + if (e1 & 1) + dval(&rv) *= tinytens[j]; + if (scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask) + >> Exp_shift)) > 0) { + /* scaled rv is denormal; zap j low bits */ + if (j >= 32) { + word1(&rv) = 0; + if (j >= 53) + word0(&rv) = (P+2)*Exp_msk1; + else + word0(&rv) &= 0xffffffff << (j-32); + } + else + word1(&rv) &= 0xffffffff << j; + } +#else + for(j = 0; e1 > 1; j++, e1 >>= 1) + if (e1 & 1) + dval(&rv) *= tinytens[j]; + /* The last multiplication could underflow. */ + dval(&rv0) = dval(&rv); + dval(&rv) *= tinytens[j]; + if (!dval(&rv)) { + dval(&rv) = 2.*dval(&rv0); + dval(&rv) *= tinytens[j]; +#endif + if (!dval(&rv)) { + undfl: + dval(&rv) = 0.; +#ifdef Honor_FLT_ROUNDS + if (Rounding == 2) + word1(&rv) = 1; +#endif + goto range_err; + } +#ifndef Avoid_Underflow + word0(&rv) = Tiny0; + word1(&rv) = Tiny1; + /* The refinement below will clean + * this approximation up. + */ + } +#endif + } + } + + /* Now the hard part -- adjusting rv to the correct value.*/ + + /* Put digits into bd: true value = bd * 10^e */ + + bd0 = s2b(s0, nd0, nd, y, dplen MTb); + + for(;;) { + bd = Balloc(bd0->k MTb); + Bcopy(bd, bd0); + bb = d2b(dval(&rv), &bbe, &bbbits MTb); /* rv = bb * 2^bbe */ + bs = i2b(1 MTb); + + if (e >= 0) { + bb2 = bb5 = 0; + bd2 = bd5 = e; + } + else { + bb2 = bb5 = -e; + bd2 = bd5 = 0; + } + if (bbe >= 0) + bb2 += bbe; + else + bd2 -= bbe; + bs2 = bb2; +#ifdef Honor_FLT_ROUNDS + if (Rounding != 1) + bs2++; +#endif +#ifdef Avoid_Underflow + Lsb = LSB; + Lsb1 = 0; + j = bbe - scale; + i = j + bbbits - 1; /* logb(rv) */ + j = P + 1 - bbbits; + if (i < Emin) { /* denormal */ + i = Emin - i; + j -= i; + if (i < 32) + Lsb <<= i; + else + Lsb1 = Lsb << (i-32); + } +#else /*Avoid_Underflow*/ +#ifdef Sudden_Underflow +#ifdef IBM + j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3); +#else + j = P + 1 - bbbits; +#endif +#else /*Sudden_Underflow*/ + j = bbe; + i = j + bbbits - 1; /* logb(&rv) */ + if (i < Emin) /* denormal */ + j += P - Emin; + else + j = P + 1 - bbbits; +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow*/ + bb2 += j; + bd2 += j; +#ifdef Avoid_Underflow + bd2 += scale; +#endif + i = bb2 < bd2 ? bb2 : bd2; + if (i > bs2) + i = bs2; + if (i > 0) { + bb2 -= i; + bd2 -= i; + bs2 -= i; + } + if (bb5 > 0) { + bs = pow5mult(bs, bb5 MTb); + bb1 = mult(bs, bb MTb); + Bfree(bb MTb); + bb = bb1; + } + if (bb2 > 0) + bb = lshift(bb, bb2 MTb); + if (bd5 > 0) + bd = pow5mult(bd, bd5 MTb); + if (bd2 > 0) + bd = lshift(bd, bd2 MTb); + if (bs2 > 0) + bs = lshift(bs, bs2 MTb); + delta = diff(bb, bd MTb); + dsign = delta->sign; + delta->sign = 0; + i = cmp(delta, bs); +#ifdef Honor_FLT_ROUNDS + if (Rounding != 1) { + if (i < 0) { + /* Error is less than an ulp */ + if (!delta->x[0] && delta->wds <= 1) { + /* exact */ +#ifdef SET_INEXACT + inexact = 0; +#endif + break; + } + if (Rounding) { + if (dsign) { + dval(&adj) = 1.; + goto apply_adj; + } + } + else if (!dsign) { + dval(&adj) = -1.; + if (!word1(&rv) + && !(word0(&rv) & Frac_mask)) { + y = word0(&rv) & Exp_mask; +#ifdef Avoid_Underflow + if (!scale || y > 2*P*Exp_msk1) +#else + if (y) +#endif + { + delta = lshift(delta,Log2P MTb); + if (cmp(delta, bs) <= 0) + dval(&adj) = -0.5; + } + } + apply_adj: +#ifdef Avoid_Underflow + if (scale && (y = word0(&rv) & Exp_mask) + <= 2*P*Exp_msk1) + word0(&adj) += (2*P+1)*Exp_msk1 - y; +#else +#ifdef Sudden_Underflow + if ((word0(&rv) & Exp_mask) <= + P*Exp_msk1) { + word0(&rv) += P*Exp_msk1; + dval(&rv) += adj*ulp(&rv); + word0(&rv) -= P*Exp_msk1; + } + else +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow*/ + dval(&rv) += adj.d*ulp(&rv); + } + break; + } + dval(&adj) = ratio(delta, bs); + if (adj.d < 1.) + dval(&adj) = 1.; + if (adj.d <= 0x7ffffffe) { + /* dval(&adj) = Rounding ? ceil(&adj) : floor(&adj); */ + y = adj.d; + if (y != adj.d) { + if (!((Rounding>>1) ^ dsign)) + y++; + dval(&adj) = y; + } + } +#ifdef Avoid_Underflow + if (scale && (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) + word0(&adj) += (2*P+1)*Exp_msk1 - y; +#else +#ifdef Sudden_Underflow + if ((word0(&rv) & Exp_mask) <= P*Exp_msk1) { + word0(&rv) += P*Exp_msk1; + dval(&adj) *= ulp(&rv); + if (dsign) + dval(&rv) += adj; + else + dval(&rv) -= adj; + word0(&rv) -= P*Exp_msk1; + goto cont; + } +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow*/ + dval(&adj) *= ulp(&rv); + if (dsign) { + if (word0(&rv) == Big0 && word1(&rv) == Big1) + goto ovfl; + dval(&rv) += adj.d; + } + else + dval(&rv) -= adj.d; + goto cont; + } +#endif /*Honor_FLT_ROUNDS*/ + + if (i < 0) { + /* Error is less than half an ulp -- check for + * special case of mantissa a power of two. + */ + if (dsign || word1(&rv) || word0(&rv) & Bndry_mask +#ifdef IEEE_Arith +#ifdef Avoid_Underflow + || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1 +#else + || (word0(&rv) & Exp_mask) <= Exp_msk1 +#endif +#endif + ) { +#ifdef SET_INEXACT + if (!delta->x[0] && delta->wds <= 1) + inexact = 0; +#endif + break; + } + if (!delta->x[0] && delta->wds <= 1) { + /* exact result */ +#ifdef SET_INEXACT + inexact = 0; +#endif + break; + } + delta = lshift(delta,Log2P MTb); + if (cmp(delta, bs) > 0) + goto drop_down; + break; + } + if (i == 0) { + /* exactly half-way between */ + if (dsign) { + if ((word0(&rv) & Bndry_mask1) == Bndry_mask1 + && word1(&rv) == ( +#ifdef Avoid_Underflow + (scale && (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) + ? (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) : +#endif + 0xffffffff)) { + /*boundary case -- increment exponent*/ + if (word0(&rv) == Big0 && word1(&rv) == Big1) + goto ovfl; + word0(&rv) = (word0(&rv) & Exp_mask) + + Exp_msk1 +#ifdef IBM + | Exp_msk1 >> 4 +#endif + ; + word1(&rv) = 0; +#ifdef Avoid_Underflow + dsign = 0; +#endif + break; + } + } + else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) { + drop_down: + /* boundary case -- decrement exponent */ +#ifdef Sudden_Underflow /*{{*/ + L = word0(&rv) & Exp_mask; +#ifdef IBM + if (L < Exp_msk1) +#else +#ifdef Avoid_Underflow + if (L <= (scale ? (2*P+1)*Exp_msk1 : Exp_msk1)) +#else + if (L <= Exp_msk1) +#endif /*Avoid_Underflow*/ +#endif /*IBM*/ + goto undfl; + L -= Exp_msk1; +#else /*Sudden_Underflow}{*/ +#ifdef Avoid_Underflow + if (scale) { + L = word0(&rv) & Exp_mask; + if (L <= (2*P+1)*Exp_msk1) { + if (L > (P+2)*Exp_msk1) + /* round even ==> */ + /* accept rv */ + break; + /* rv = smallest denormal */ + goto undfl; + } + } +#endif /*Avoid_Underflow*/ + L = (word0(&rv) & Exp_mask) - Exp_msk1; +#endif /*Sudden_Underflow}}*/ + word0(&rv) = L | Bndry_mask1; + word1(&rv) = 0xffffffff; +#ifdef IBM + goto cont; +#else + break; +#endif + } +#ifndef ROUND_BIASED +#ifdef Avoid_Underflow + if (Lsb1) { + if (!(word0(&rv) & Lsb1)) + break; + } + else if (!(word1(&rv) & Lsb)) + break; +#else + if (!(word1(&rv) & LSB)) + break; +#endif +#endif + if (dsign) +#ifdef Avoid_Underflow + dval(&rv) += sulp(&rv, scale); +#else + dval(&rv) += ulp(&rv); +#endif +#ifndef ROUND_BIASED + else { +#ifdef Avoid_Underflow + dval(&rv) -= sulp(&rv, scale); +#else + dval(&rv) -= ulp(&rv); +#endif +#ifndef Sudden_Underflow + if (!dval(&rv)) + goto undfl; +#endif + } +#ifdef Avoid_Underflow + dsign = 1 - dsign; +#endif +#endif + break; + } + if ((aadj = ratio(delta, bs)) <= 2.) { + if (dsign) + aadj = dval(&aadj1) = 1.; + else if (word1(&rv) || word0(&rv) & Bndry_mask) { +#ifndef Sudden_Underflow + if (word1(&rv) == Tiny1 && !word0(&rv)) + goto undfl; +#endif + aadj = 1.; + dval(&aadj1) = -1.; + } + else { + /* special case -- power of FLT_RADIX to be */ + /* rounded down... */ + + if (aadj < 2./FLT_RADIX) + aadj = 1./FLT_RADIX; + else + aadj *= 0.5; + dval(&aadj1) = -aadj; + } + } + else { + aadj *= 0.5; + dval(&aadj1) = dsign ? aadj : -aadj; +#ifdef Check_FLT_ROUNDS + switch(Rounding) { + case 2: /* towards +infinity */ + dval(&aadj1) -= 0.5; + break; + case 0: /* towards 0 */ + case 3: /* towards -infinity */ + dval(&aadj1) += 0.5; + } +#else + if (Flt_Rounds == 0) + dval(&aadj1) += 0.5; +#endif /*Check_FLT_ROUNDS*/ + } + y = word0(&rv) & Exp_mask; + + /* Check for overflow */ + + if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) { + dval(&rv0) = dval(&rv); + word0(&rv) -= P*Exp_msk1; + dval(&adj) = dval(&aadj1) * ulp(&rv); + dval(&rv) += dval(&adj); + if ((word0(&rv) & Exp_mask) >= + Exp_msk1*(DBL_MAX_EXP+Bias-P)) { + if (word0(&rv0) == Big0 && word1(&rv0) == Big1) + goto ovfl; + word0(&rv) = Big0; + word1(&rv) = Big1; + goto cont; + } + else + word0(&rv) += P*Exp_msk1; + } + else { +#ifdef Avoid_Underflow + if (scale && y <= 2*P*Exp_msk1) { + if (aadj <= 0x7fffffff) { + if ((z = aadj) <= 0) + z = 1; + aadj = z; + dval(&aadj1) = dsign ? aadj : -aadj; + } + word0(&aadj1) += (2*P+1)*Exp_msk1 - y; + } + dval(&adj) = dval(&aadj1) * ulp(&rv); + dval(&rv) += dval(&adj); +#else +#ifdef Sudden_Underflow + if ((word0(&rv) & Exp_mask) <= P*Exp_msk1) { + dval(&rv0) = dval(&rv); + word0(&rv) += P*Exp_msk1; + dval(&adj) = dval(&aadj1) * ulp(&rv); + dval(&rv) += adj; +#ifdef IBM + if ((word0(&rv) & Exp_mask) < P*Exp_msk1) +#else + if ((word0(&rv) & Exp_mask) <= P*Exp_msk1) +#endif + { + if (word0(&rv0) == Tiny0 + && word1(&rv0) == Tiny1) + goto undfl; + word0(&rv) = Tiny0; + word1(&rv) = Tiny1; + goto cont; + } + else + word0(&rv) -= P*Exp_msk1; + } + else { + dval(&adj) = dval(&aadj1) * ulp(&rv); + dval(&rv) += adj; + } +#else /*Sudden_Underflow*/ + /* Compute dval(&adj) so that the IEEE rounding rules will + * correctly round rv + dval(&adj) in some half-way cases. + * If rv * ulp(&rv) is denormalized (i.e., + * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid + * trouble from bits lost to denormalization; + * example: 1.2e-307 . + */ + if (y <= (P-1)*Exp_msk1 && aadj > 1.) { + dval(&aadj1) = (double)(int)(aadj + 0.5); + if (!dsign) + dval(&aadj1) = -dval(&aadj1); + } + dval(&adj) = dval(&aadj1) * ulp(&rv); + dval(&rv) += adj; +#endif /*Sudden_Underflow*/ +#endif /*Avoid_Underflow*/ + } + z = word0(&rv) & Exp_mask; +#ifndef SET_INEXACT +#ifdef Avoid_Underflow + if (!scale) +#endif + if (y == z) { + /* Can we stop now? */ + L = (Long)aadj; + aadj -= L; + /* The tolerances below are conservative. */ + if (dsign || word1(&rv) || word0(&rv) & Bndry_mask) { + if (aadj < .4999999 || aadj > .5000001) + break; + } + else if (aadj < .4999999/FLT_RADIX) + break; + } +#endif + cont: + Bfree(bb MTb); + Bfree(bd MTb); + Bfree(bs MTb); + Bfree(delta MTb); + } + Bfree(bb MTb); + Bfree(bd MTb); + Bfree(bs MTb); + Bfree(bd0 MTb); + Bfree(delta MTb); +#ifdef SET_INEXACT + if (inexact) { + if (!oldinexact) { + word0(&rv0) = Exp_1 + (70 << Exp_shift); + word1(&rv0) = 0; + dval(&rv0) += 1.; + } + } + else if (!oldinexact) + clear_inexact(); +#endif +#ifdef Avoid_Underflow + if (scale) { + word0(&rv0) = Exp_1 - 2*P*Exp_msk1; + word1(&rv0) = 0; + dval(&rv) *= dval(&rv0); +#ifndef NO_ERRNO + /* try to avoid the bug of testing an 8087 register value */ +#ifdef IEEE_Arith + if (!(word0(&rv) & Exp_mask)) +#else + if (word0(&rv) == 0 && word1(&rv) == 0) +#endif + errno = ERANGE; +#endif + } +#endif /* Avoid_Underflow */ +#ifdef SET_INEXACT + if (inexact && !(word0(&rv) & Exp_mask)) { + /* set underflow bit */ + dval(&rv0) = 1e-300; + dval(&rv0) *= dval(&rv0); + } +#endif + ret: + if (se) + *se = (char *)s; + return sign ? -dval(&rv) : dval(&rv); + } + diff -Nru mlton-20130715/runtime/gdtoa/strtodg.c mlton-20210117+dfsg/runtime/gdtoa/strtodg.c --- mlton-20130715/runtime/gdtoa/strtodg.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtodg.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1087 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998-2001 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#ifdef USE_LOCALE +#include +#endif + + static CONST int +fivesbits[] = { 0, 3, 5, 7, 10, 12, 14, 17, 19, 21, + 24, 26, 28, 31, 33, 35, 38, 40, 42, 45, + 47, 49, 52 +#ifdef VAX + , 54, 56 +#endif + }; + + Bigint * +#ifdef KR_headers +increment(b MTa) Bigint *b; MTk +#else +increment(Bigint *b MTd) +#endif +{ + ULong *x, *xe; + Bigint *b1; +#ifdef Pack_16 + ULong carry = 1, y; +#endif + + x = b->x; + xe = x + b->wds; +#ifdef Pack_32 + do { + if (*x < (ULong)0xffffffffL) { + ++*x; + return b; + } + *x++ = 0; + } while(x < xe); +#else + do { + y = *x + carry; + carry = y >> 16; + *x++ = y & 0xffff; + if (!carry) + return b; + } while(x < xe); + if (carry) +#endif + { + if (b->wds >= b->maxwds) { + b1 = Balloc(b->k+1 MTa); + Bcopy(b1,b); + Bfree(b MTa); + b = b1; + } + b->x[b->wds++] = 1; + } + return b; + } + + void +#ifdef KR_headers +decrement(b) Bigint *b; +#else +decrement(Bigint *b) +#endif +{ + ULong *x, *xe; +#ifdef Pack_16 + ULong borrow = 1, y; +#endif + + x = b->x; + xe = x + b->wds; +#ifdef Pack_32 + do { + if (*x) { + --*x; + break; + } + *x++ = 0xffffffffL; + } + while(x < xe); +#else + do { + y = *x - borrow; + borrow = (y & 0x10000) >> 16; + *x++ = y & 0xffff; + } while(borrow && x < xe); +#endif + } + + static int +#ifdef KR_headers +all_on(b, n) Bigint *b; int n; +#else +all_on(Bigint *b, int n) +#endif +{ + ULong *x, *xe; + + x = b->x; + xe = x + (n >> kshift); + while(x < xe) + if ((*x++ & ALL_ON) != ALL_ON) + return 0; + if (n &= kmask) + return ((*x | (ALL_ON << n)) & ALL_ON) == ALL_ON; + return 1; + } + + Bigint * +#ifdef KR_headers +set_ones(b, n MTa) Bigint *b; int n; MTk +#else +set_ones(Bigint *b, int n MTd) +#endif +{ + int k; + ULong *x, *xe; + + k = (n + ((1 << kshift) - 1)) >> kshift; + if (b->k < k) { + Bfree(b MTa); + b = Balloc(k MTa); + } + k = n >> kshift; + if (n &= kmask) + k++; + b->wds = k; + x = b->x; + xe = x + k; + while(x < xe) + *x++ = ALL_ON; + if (n) + x[-1] >>= ULbits - n; + return b; + } + + static int +rvOK +#ifdef KR_headers + (d, fpi, exp, bits, exact, rd, irv MTa) + U *d; CONST FPI *fpi; Long *exp; ULong *bits; int exact, rd, *irv; MTk +#else + (U *d, CONST FPI *fpi, Long *exp, ULong *bits, int exact, int rd, int *irv MTd) +#endif +{ + Bigint *b; + ULong carry, inex, lostbits; + int bdif, e, j, k, k1, nb, rv; + + carry = rv = 0; + b = d2b(dval(d), &e, &bdif MTa); + bdif -= nb = fpi->nbits; + e += bdif; + if (bdif <= 0) { + if (exact) + goto trunc; + goto ret; + } + if (P == nb) { + if ( +#ifndef IMPRECISE_INEXACT + exact && +#endif + fpi->rounding == +#ifdef RND_PRODQUOT + FPI_Round_near +#else + Flt_Rounds +#endif + ) goto trunc; + goto ret; + } + switch(rd) { + case 1: /* round down (toward -Infinity) */ + goto trunc; + case 2: /* round up (toward +Infinity) */ + break; + default: /* round near */ + k = bdif - 1; + if (k < 0) + goto trunc; + if (!k) { + if (!exact) + goto ret; + if (b->x[0] & 2) + break; + goto trunc; + } + if (b->x[k>>kshift] & ((ULong)1 << (k & kmask))) + break; + goto trunc; + } + /* "break" cases: round up 1 bit, then truncate; bdif > 0 */ + carry = 1; + trunc: + inex = lostbits = 0; + if (bdif > 0) { + if ( (lostbits = any_on(b, bdif)) !=0) + inex = STRTOG_Inexlo; + rshift(b, bdif); + if (carry) { + inex = STRTOG_Inexhi; + b = increment(b MTa); + if ( (j = nb & kmask) !=0) + j = ULbits - j; + if (hi0bits(b->x[b->wds - 1]) != j) { + if (!lostbits) + lostbits = b->x[0] & 1; + rshift(b, 1); + e++; + } + } + } + else if (bdif < 0) + b = lshift(b, -bdif MTa); + if (e < fpi->emin) { + k = fpi->emin - e; + e = fpi->emin; + if (k > nb || fpi->sudden_underflow) { + b->wds = inex = 0; + *irv = STRTOG_Underflow | STRTOG_Inexlo; + } + else { + k1 = k - 1; + if (k1 > 0 && !lostbits) + lostbits = any_on(b, k1); + if (!lostbits && !exact) + goto ret; + lostbits |= + carry = b->x[k1>>kshift] & (1 << (k1 & kmask)); + rshift(b, k); + *irv = STRTOG_Denormal; + if (carry) { + b = increment(b MTa); + inex = STRTOG_Inexhi | STRTOG_Underflow; + } + else if (lostbits) + inex = STRTOG_Inexlo | STRTOG_Underflow; + } + } + else if (e > fpi->emax) { + e = fpi->emax + 1; + *irv = STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi; +#ifndef NO_ERRNO + errno = ERANGE; +#endif + b->wds = inex = 0; + } + *exp = e; + copybits(bits, nb, b); + *irv |= inex; + rv = 1; + ret: + Bfree(b MTa); + return rv; + } + + static int +#ifdef KR_headers +mantbits(d) U *d; +#else +mantbits(U *d) +#endif +{ + ULong L; +#ifdef VAX + L = word1(d) << 16 | word1(d) >> 16; + if (L) +#else + if ( (L = word1(d)) !=0) +#endif + return P - lo0bits(&L); +#ifdef VAX + L = word0(d) << 16 | word0(d) >> 16 | Exp_msk11; +#else + L = word0(d) | Exp_msk1; +#endif + return P - 32 - lo0bits(&L); + } + + int +gdtoa__strtodg +#ifdef KR_headers + (s00, se, fpi, exp, bits) + CONST char *s00; char **se; CONST FPI *fpi; Long *exp; ULong *bits; +#else + (CONST char *s00, char **se, CONST FPI *fpi, Long *exp, ULong *bits) +#endif +{ + int abe, abits, asub; + int bb0, bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, decpt, denorm; + int dsign, e, e1, e2, emin, esign, finished, i, inex, irv, j, k; + int nbits, nd, nd0, nf, nz, nz0, rd, rvbits, rve, rve1, sign; + int sudden_underflow; + CONST char *s, *s0, *s1; + double adj0, tol; + Long L; + U adj, rv; + ULong *b, *be, y, z; + Bigint *ab, *bb, *bb1, *bd, *bd0, *bs, *delta, *rvb, *rvb0; +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif +#ifdef USE_LOCALE /*{{*/ +#ifdef NO_LOCALE_CACHE + char *decimalpoint = localeconv()->decimal_point; + int dplen = strlen(decimalpoint); +#else + char *decimalpoint; + static char *decimalpoint_cache; + static int dplen; + if (!(s0 = decimalpoint_cache)) { + s0 = localeconv()->decimal_point; + if ((decimalpoint_cache = (char*)MALLOC(strlen(s0) + 1))) { + strcpy(decimalpoint_cache, s0); + s0 = decimalpoint_cache; + } + dplen = strlen(s0); + } + decimalpoint = (char*)s0; +#endif /*NO_LOCALE_CACHE*/ +#else /*USE_LOCALE}{*/ +#define dplen 1 +#endif /*USE_LOCALE}}*/ + + irv = STRTOG_Zero; + denorm = sign = nz0 = nz = 0; + dval(&rv) = 0.; + rvb = 0; + nbits = fpi->nbits; + for(s = s00;;s++) switch(*s) { + case '-': + sign = 1; + /* no break */ + case '+': + if (*++s) + goto break2; + /* no break */ + case 0: + sign = 0; + irv = STRTOG_NoNumber; + s = s00; + goto ret; + case '\t': + case '\n': + case '\v': + case '\f': + case '\r': + case ' ': + continue; + default: + goto break2; + } + break2: + if (*s == '0') { +#ifndef NO_HEX_FP + switch(s[1]) { + case 'x': + case 'X': + irv = gethex(&s, fpi, exp, &rvb, sign MTb); + if (irv == STRTOG_NoNumber) { + s = s00; + sign = 0; + } + goto ret; + } +#endif + nz0 = 1; + while(*++s == '0') ; + if (!*s) + goto ret; + } + sudden_underflow = fpi->sudden_underflow; + s0 = s; + y = z = 0; + for(decpt = nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++) + if (nd < 9) + y = 10*y + c - '0'; + else if (nd < DBL_DIG + 2) + z = 10*z + c - '0'; + nd0 = nd; +#ifdef USE_LOCALE + if (c == *decimalpoint) { + for(i = 1; decimalpoint[i]; ++i) + if (s[i] != decimalpoint[i]) + goto dig_done; + s += i; + c = *s; +#else + if (c == '.') { + c = *++s; +#endif + decpt = 1; + if (!nd) { + for(; c == '0'; c = *++s) + nz++; + if (c > '0' && c <= '9') { + s0 = s; + nf += nz; + nz = 0; + goto have_dig; + } + goto dig_done; + } + for(; c >= '0' && c <= '9'; c = *++s) { + have_dig: + nz++; + if (c -= '0') { + nf += nz; + for(i = 1; i < nz; i++) + if (nd++ < 9) + y *= 10; + else if (nd <= DBL_DIG + 2) + z *= 10; + if (nd++ < 9) + y = 10*y + c; + else if (nd <= DBL_DIG + 2) + z = 10*z + c; + nz = 0; + } + } + }/*}*/ + dig_done: + e = 0; + if (c == 'e' || c == 'E') { + if (!nd && !nz && !nz0) { + irv = STRTOG_NoNumber; + s = s00; + goto ret; + } + s00 = s; + esign = 0; + switch(c = *++s) { + case '-': + esign = 1; + case '+': + c = *++s; + } + if (c >= '0' && c <= '9') { + while(c == '0') + c = *++s; + if (c > '0' && c <= '9') { + L = c - '0'; + s1 = s; + while((c = *++s) >= '0' && c <= '9') + L = 10*L + c - '0'; + if (s - s1 > 8 || L > 19999) + /* Avoid confusion from exponents + * so large that e might overflow. + */ + e = 19999; /* safe for 16 bit ints */ + else + e = (int)L; + if (esign) + e = -e; + } + else + e = 0; + } + else + s = s00; + } + if (!nd) { + if (!nz && !nz0) { +#ifdef INFNAN_CHECK + /* Check for Nan and Infinity */ + if (!decpt) + switch(c) { + case 'i': + case 'I': + if (match(&s,"nf")) { + --s; + if (!match(&s,"inity")) + ++s; + irv = STRTOG_Infinite; + goto infnanexp; + } + break; + case 'n': + case 'N': + if (match(&s, "an")) { + irv = STRTOG_NaN; + *exp = fpi->emax + 1; +#ifndef No_Hex_NaN + if (*s == '(') /*)*/ + irv = hexnan(&s, fpi, bits); +#endif + goto infnanexp; + } + } +#endif /* INFNAN_CHECK */ + irv = STRTOG_NoNumber; + s = s00; + } + goto ret; + } + + irv = STRTOG_Normal; + e1 = e -= nf; + rd = 0; + switch(fpi->rounding & 3) { + case FPI_Round_up: + rd = 2 - sign; + break; + case FPI_Round_zero: + rd = 1; + break; + case FPI_Round_down: + rd = 1 + sign; + } + + /* Now we have nd0 digits, starting at s0, followed by a + * decimal point, followed by nd-nd0 digits. The number we're + * after is the integer represented by those digits times + * 10**e */ + + if (!nd0) + nd0 = nd; + k = nd < DBL_DIG + 2 ? nd : DBL_DIG + 2; + dval(&rv) = y; + if (k > 9) + dval(&rv) = tens[k - 9] * dval(&rv) + z; + bd0 = 0; + if (nbits <= P && nd <= DBL_DIG) { + if (!e) { + if (rvOK(&rv, fpi, exp, bits, 1, rd, &irv MTb)) + goto ret; + } + else if (e > 0) { + if (e <= Ten_pmax) { +#ifdef VAX + goto vax_ovfl_check; +#else + i = fivesbits[e] + mantbits(&rv) <= P; + /* rv = */ rounded_product(dval(&rv), tens[e]); + if (rvOK(&rv, fpi, exp, bits, i, rd, &irv MTb)) + goto ret; + e1 -= e; + goto rv_notOK; +#endif + } + i = DBL_DIG - nd; + if (e <= Ten_pmax + i) { + /* A fancier test would sometimes let us do + * this for larger i values. + */ + e2 = e - i; + e1 -= i; + dval(&rv) *= tens[i]; +#ifdef VAX + /* VAX exponent range is so narrow we must + * worry about overflow here... + */ + vax_ovfl_check: + dval(&adj) = dval(&rv); + word0(&adj) -= P*Exp_msk1; + /* adj = */ rounded_product(dval(&adj), tens[e2]); + if ((word0(&adj) & Exp_mask) + > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) + goto rv_notOK; + word0(&adj) += P*Exp_msk1; + dval(&rv) = dval(&adj); +#else + /* rv = */ rounded_product(dval(&rv), tens[e2]); +#endif + if (rvOK(&rv, fpi, exp, bits, 0, rd, &irv MTb)) + goto ret; + e1 -= e2; + } + } +#ifndef Inaccurate_Divide + else if (e >= -Ten_pmax) { + /* rv = */ rounded_quotient(dval(&rv), tens[-e]); + if (rvOK(&rv, fpi, exp, bits, 0, rd, &irv MTb)) + goto ret; + e1 -= e; + } +#endif + } + rv_notOK: + e1 += nd - k; + + /* Get starting approximation = rv * 10**e1 */ + + e2 = 0; + if (e1 > 0) { + if ( (i = e1 & 15) !=0) + dval(&rv) *= tens[i]; + if (e1 &= ~15) { + e1 >>= 4; + while(e1 >= (1 << (n_bigtens-1))) { + e2 += ((word0(&rv) & Exp_mask) + >> Exp_shift1) - Bias; + word0(&rv) &= ~Exp_mask; + word0(&rv) |= Bias << Exp_shift1; + dval(&rv) *= bigtens[n_bigtens-1]; + e1 -= 1 << (n_bigtens-1); + } + e2 += ((word0(&rv) & Exp_mask) >> Exp_shift1) - Bias; + word0(&rv) &= ~Exp_mask; + word0(&rv) |= Bias << Exp_shift1; + for(j = 0; e1 > 0; j++, e1 >>= 1) + if (e1 & 1) + dval(&rv) *= bigtens[j]; + } + } + else if (e1 < 0) { + e1 = -e1; + if ( (i = e1 & 15) !=0) + dval(&rv) /= tens[i]; + if (e1 &= ~15) { + e1 >>= 4; + while(e1 >= (1 << (n_bigtens-1))) { + e2 += ((word0(&rv) & Exp_mask) + >> Exp_shift1) - Bias; + word0(&rv) &= ~Exp_mask; + word0(&rv) |= Bias << Exp_shift1; + dval(&rv) *= tinytens[n_bigtens-1]; + e1 -= 1 << (n_bigtens-1); + } + e2 += ((word0(&rv) & Exp_mask) >> Exp_shift1) - Bias; + word0(&rv) &= ~Exp_mask; + word0(&rv) |= Bias << Exp_shift1; + for(j = 0; e1 > 0; j++, e1 >>= 1) + if (e1 & 1) + dval(&rv) *= tinytens[j]; + } + } +#ifdef IBM + /* e2 is a correction to the (base 2) exponent of the return + * value, reflecting adjustments above to avoid overflow in the + * native arithmetic. For native IBM (base 16) arithmetic, we + * must multiply e2 by 4 to change from base 16 to 2. + */ + e2 <<= 2; +#endif + rvb = d2b(dval(&rv), &rve, &rvbits MTb); /* rv = rvb * 2^rve */ + rve += e2; + if ((j = rvbits - nbits) > 0) { + rshift(rvb, j); + rvbits = nbits; + rve += j; + } + bb0 = 0; /* trailing zero bits in rvb */ + e2 = rve + rvbits - nbits; + if (e2 > fpi->emax + 1) + goto huge; + rve1 = rve + rvbits - nbits; + if (e2 < (emin = fpi->emin)) { + denorm = 1; + j = rve - emin; + if (j > 0) { + rvb = lshift(rvb, j MTb); + rvbits += j; + } + else if (j < 0) { + rvbits += j; + if (rvbits <= 0) { + if (rvbits < -1) { + ufl: + rvb->wds = 0; + rvb->x[0] = 0; + switch(fpi->rounding) { + case FPI_Round_up: + if (!sign) + goto ret_tiny; + break; + case FPI_Round_down: + if (sign) { + ret_tiny: + rvb->wds = rvb->x[0] = 1; + } + } + *exp = emin; + irv = STRTOG_Underflow | STRTOG_Inexlo; + goto ret; + } + rvb->x[0] = rvb->wds = rvbits = 1; + } + else + rshift(rvb, -j); + } + rve = rve1 = emin; + if (sudden_underflow && e2 + 1 < emin) + goto ufl; + } + + /* Now the hard part -- adjusting rv to the correct value.*/ + + /* Put digits into bd: true value = bd * 10^e */ + + bd0 = s2b(s0, nd0, nd, y, dplen MTb); + + for(;;) { + bd = Balloc(bd0->k MTb); + Bcopy(bd, bd0); + bb = Balloc(rvb->k MTb); + Bcopy(bb, rvb); + bbbits = rvbits - bb0; + bbe = rve + bb0; + bs = i2b(1 MTb); + + if (e >= 0) { + bb2 = bb5 = 0; + bd2 = bd5 = e; + } + else { + bb2 = bb5 = -e; + bd2 = bd5 = 0; + } + if (bbe >= 0) + bb2 += bbe; + else + bd2 -= bbe; + bs2 = bb2; + j = nbits + 1 - bbbits; + i = bbe + bbbits - nbits; + if (i < emin) /* denormal */ + j += i - emin; + bb2 += j; + bd2 += j; + i = bb2 < bd2 ? bb2 : bd2; + if (i > bs2) + i = bs2; + if (i > 0) { + bb2 -= i; + bd2 -= i; + bs2 -= i; + } + if (bb5 > 0) { + bs = pow5mult(bs, bb5 MTb); + bb1 = mult(bs, bb MTb); + Bfree(bb MTb); + bb = bb1; + } + bb2 -= bb0; + if (bb2 > 0) + bb = lshift(bb, bb2 MTb); + else if (bb2 < 0) + rshift(bb, -bb2); + if (bd5 > 0) + bd = pow5mult(bd, bd5 MTb); + if (bd2 > 0) + bd = lshift(bd, bd2 MTb); + if (bs2 > 0) + bs = lshift(bs, bs2 MTb); + asub = 1; + inex = STRTOG_Inexhi; + delta = diff(bb, bd MTb); + if (delta->wds <= 1 && !delta->x[0]) + break; + dsign = delta->sign; + delta->sign = finished = 0; + L = 0; + i = cmp(delta, bs); + if (rd && i <= 0) { + irv = STRTOG_Normal; + if ( (finished = dsign ^ (rd&1)) !=0) { + if (dsign != 0) { + irv |= STRTOG_Inexhi; + goto adj1; + } + irv |= STRTOG_Inexlo; + if (rve1 == emin) + goto adj1; + for(i = 0, j = nbits; j >= ULbits; + i++, j -= ULbits) { + if (rvb->x[i] & ALL_ON) + goto adj1; + } + if (j > 1 && lo0bits(rvb->x + i) < j - 1) + goto adj1; + rve = rve1 - 1; + rvb = set_ones(rvb, rvbits = nbits MTb); + break; + } + irv |= dsign ? STRTOG_Inexlo : STRTOG_Inexhi; + break; + } + if (i < 0) { + /* Error is less than half an ulp -- check for + * special case of mantissa a power of two. + */ + irv = dsign + ? STRTOG_Normal | STRTOG_Inexlo + : STRTOG_Normal | STRTOG_Inexhi; + if (dsign || bbbits > 1 || denorm || rve1 == emin) + break; + delta = lshift(delta,1 MTb); + if (cmp(delta, bs) > 0) { + irv = STRTOG_Normal | STRTOG_Inexlo; + goto drop_down; + } + break; + } + if (i == 0) { + /* exactly half-way between */ + if (dsign) { + if (denorm && all_on(rvb, rvbits)) { + /*boundary case -- increment exponent*/ + rvb->wds = 1; + rvb->x[0] = 1; + rve = emin + nbits - (rvbits = 1); + irv = STRTOG_Normal | STRTOG_Inexhi; + denorm = 0; + break; + } + irv = STRTOG_Normal | STRTOG_Inexlo; + } + else if (bbbits == 1) { + irv = STRTOG_Normal; + drop_down: + /* boundary case -- decrement exponent */ + if (rve1 == emin) { + irv = STRTOG_Normal | STRTOG_Inexhi; + if (rvb->wds == 1 && rvb->x[0] == 1) + sudden_underflow = 1; + break; + } + rve -= nbits; + rvb = set_ones(rvb, rvbits = nbits MTb); + break; + } + else + irv = STRTOG_Normal | STRTOG_Inexhi; + if ((bbbits < nbits && !denorm) || !(rvb->x[0] & 1)) + break; + if (dsign) { + rvb = increment(rvb MTb); + j = kmask & (ULbits - (rvbits & kmask)); + if (hi0bits(rvb->x[rvb->wds - 1]) != j) + rvbits++; + irv = STRTOG_Normal | STRTOG_Inexhi; + } + else { + if (bbbits == 1) + goto undfl; + decrement(rvb); + irv = STRTOG_Normal | STRTOG_Inexlo; + } + break; + } + if ((dval(&adj) = ratio(delta, bs)) <= 2.) { + adj1: + inex = STRTOG_Inexlo; + if (dsign) { + asub = 0; + inex = STRTOG_Inexhi; + } + else if (denorm && bbbits <= 1) { + undfl: + rvb->wds = 0; + rve = emin; + irv = STRTOG_Underflow | STRTOG_Inexlo; + if (fpi->rounding == 2) { + rvb->wds = 1; + rvb->x[0] = 1; + irv = STRTOG_Underflow | STRTOG_Inexhi; + } + break; + } + adj0 = dval(&adj) = 1.; + } + else { + adj0 = dval(&adj) *= 0.5; + if (dsign) { + asub = 0; + inex = STRTOG_Inexlo; + } + if (dval(&adj) < 2147483647.) { + L = adj0; + adj0 -= L; + switch(rd) { + case 0: + if (adj0 >= .5) + goto inc_L; + break; + case 1: + if (asub && adj0 > 0.) + goto inc_L; + break; + case 2: + if (!asub && adj0 > 0.) { + inc_L: + L++; + inex = STRTOG_Inexact - inex; + } + } + dval(&adj) = L; + } + } + y = rve + rvbits; + + /* adj *= ulp(dval(&rv)); */ + /* if (asub) rv -= adj; else rv += adj; */ + + if (!denorm && rvbits < nbits) { + rvb = lshift(rvb, j = nbits - rvbits MTb); + rve -= j; + rvbits = nbits; + } + ab = d2b(dval(&adj), &abe, &abits MTb); + if (abe < 0) + rshift(ab, -abe); + else if (abe > 0) + ab = lshift(ab, abe MTb); + rvb0 = rvb; + if (asub) { + /* rv -= adj; */ + j = hi0bits(rvb->x[rvb->wds-1]); + rvb = diff(rvb, ab MTb); + k = rvb0->wds - 1; + if (denorm) + /* do nothing */; + else if (rvb->wds <= k + || hi0bits( rvb->x[k]) > + hi0bits(rvb0->x[k])) { + /* unlikely; can only have lost 1 high bit */ + if (rve1 == emin) { + --rvbits; + denorm = 1; + } + else { + rvb = lshift(rvb, 1 MTb); + --rve; + --rve1; + L = finished = 0; + } + } + } + else { + rvb = sum(rvb, ab MTb); + k = rvb->wds - 1; + if (k >= rvb0->wds + || hi0bits(rvb->x[k]) < hi0bits(rvb0->x[k])) { + if (denorm) { + if (++rvbits == nbits) + denorm = 0; + } + else { + rshift(rvb, 1); + rve++; + rve1++; + L = 0; + } + } + } + Bfree(ab MTb); + Bfree(rvb0 MTb); + if (finished) + break; + + z = rve + rvbits; + if (y == z && L) { + /* Can we stop now? */ + tol = dval(&adj) * 5e-16; /* > max rel error */ + dval(&adj) = adj0 - .5; + if (dval(&adj) < -tol) { + if (adj0 > tol) { + irv |= inex; + break; + } + } + else if (dval(&adj) > tol && adj0 < 1. - tol) { + irv |= inex; + break; + } + } + bb0 = denorm ? 0 : trailz(rvb); + Bfree(bb MTb); + Bfree(bd MTb); + Bfree(bs MTb); + Bfree(delta MTb); + } + if (!denorm && (j = nbits - rvbits)) { + if (j > 0) + rvb = lshift(rvb, j MTb); + else + rshift(rvb, -j); + rve -= j; + } + *exp = rve; + Bfree(bb MTb); + Bfree(bd MTb); + Bfree(bs MTb); + Bfree(bd0 MTb); + Bfree(delta MTb); + if (rve > fpi->emax) { + huge: + Bfree(rvb MTb); + rvb = 0; +#ifndef NO_ERRNO + errno = ERANGE; +#endif + switch(fpi->rounding & 3) { + case FPI_Round_up: + if (!sign) + goto ret_inf; + break; + case FPI_Round_down: + if (!sign) + break; + case FPI_Round_near: + ret_inf: + irv = STRTOG_Infinite | STRTOG_Overflow | STRTOG_Inexhi; + k = nbits >> kshift; + if (nbits & kmask) + ++k; + memset(bits, 0, k*sizeof(ULong)); + infnanexp: + *exp = fpi->emax + 1; + goto ret; + } + /* Round to largest representable magnitude */ + irv = STRTOG_Normal | STRTOG_Inexlo; + *exp = fpi->emax; + b = bits; + be = b + ((fpi->nbits + 31) >> 5); + while(b < be) + *b++ = -1; + if ((j = fpi->nbits & 0x1f)) + *--be >>= (32 - j); + } + ret: + if (denorm) { + if (sudden_underflow) { + rvb->wds = 0; + irv = STRTOG_Underflow | STRTOG_Inexlo; +#ifndef NO_ERRNO + errno = ERANGE; +#endif + } + else { + irv = (irv & ~STRTOG_Retmask) | + (rvb->wds > 0 ? STRTOG_Denormal : STRTOG_Zero); + if (irv & STRTOG_Inexact) { + irv |= STRTOG_Underflow; +#ifndef NO_ERRNO + errno = ERANGE; +#endif + } + } + } + if (se) + *se = (char *)s; + if (sign) + irv |= STRTOG_Neg; + if (rvb) { + copybits(bits, nbits, rvb); + Bfree(rvb MTb); + } + return irv; + } diff -Nru mlton-20130715/runtime/gdtoa/strtodI.c mlton-20210117+dfsg/runtime/gdtoa/strtodI.c --- mlton-20130715/runtime/gdtoa/strtodI.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtodI.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,163 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + static double +#ifdef KR_headers +ulpdown(d) U *d; +#else +ulpdown(U *d) +#endif +{ + double u; + ULong *L = d->L; + + u = ulp(d); + if (!(L[_1] | (L[_0] & 0xfffff)) + && (L[_0] & 0x7ff00000) > 0x00100000) + u *= 0.5; + return u; + } + + int +#ifdef KR_headers +gdtoa__strtodI(s, sp, dd) CONST char *s; char **sp; double *dd; +#else +gdtoa__strtodI(CONST char *s, char **sp, double *dd) +#endif +{ + static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI, 0 /*unused*/ }; + ULong bits[2], sign; + Long exp; + int j, k; + U *u; + + k = gdtoa__strtodg(s, sp, &fpi, &exp, bits); + u = (U*)dd; + sign = k & STRTOG_Neg ? 0x80000000L : 0; + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + dval(&u[0]) = dval(&u[1]) = 0.; + break; + + case STRTOG_Zero: + dval(&u[0]) = dval(&u[1]) = 0.; +#ifdef Sudden_Underflow + if (k & STRTOG_Inexact) { + if (sign) + word0(&u[0]) = 0x80100000L; + else + word0(&u[1]) = 0x100000L; + } + break; +#else + goto contain; +#endif + + case STRTOG_Denormal: + word1(&u[0]) = bits[0]; + word0(&u[0]) = bits[1]; + goto contain; + + case STRTOG_Normal: + word1(&u[0]) = bits[0]; + word0(&u[0]) = (bits[1] & ~0x100000) | ((exp + 0x3ff + 52) << 20); + contain: + j = k & STRTOG_Inexact; + if (sign) { + word0(&u[0]) |= sign; + j = STRTOG_Inexact - j; + } + switch(j) { + case STRTOG_Inexlo: +#ifdef Sudden_Underflow + if ((u->L[_0] & 0x7ff00000) < 0x3500000) { + word0(&u[1]) = word0(&u[0]) + 0x3500000; + word1(&u[1]) = word1(&u[0]); + dval(&u[1]) += ulp(&u[1]); + word0(&u[1]) -= 0x3500000; + if (!(word0(&u[1]) & 0x7ff00000)) { + word0(&u[1]) = sign; + word1(&u[1]) = 0; + } + } + else +#endif + dval(&u[1]) = dval(&u[0]) + ulp(&u[0]); + break; + case STRTOG_Inexhi: + dval(&u[1]) = dval(&u[0]); +#ifdef Sudden_Underflow + if ((word0(&u[0]) & 0x7ff00000) < 0x3500000) { + word0(&u[0]) += 0x3500000; + dval(&u[0]) -= ulpdown(u); + word0(&u[0]) -= 0x3500000; + if (!(word0(&u[0]) & 0x7ff00000)) { + word0(&u[0]) = sign; + word1(&u[0]) = 0; + } + } + else +#endif + dval(&u[0]) -= ulpdown(u); + break; + default: + dval(&u[1]) = dval(&u[0]); + } + break; + + case STRTOG_Infinite: + word0(&u[0]) = word0(&u[1]) = sign | 0x7ff00000; + word1(&u[0]) = word1(&u[1]) = 0; + if (k & STRTOG_Inexact) { + if (sign) { + word0(&u[1]) = 0xffefffffL; + word1(&u[1]) = 0xffffffffL; + } + else { + word0(&u[0]) = 0x7fefffffL; + word1(&u[0]) = 0xffffffffL; + } + } + break; + + case STRTOG_NaN: + u->L[0] = (u+1)->L[0] = d_QNAN0; + u->L[1] = (u+1)->L[1] = d_QNAN1; + break; + + case STRTOG_NaNbits: + word0(&u[0]) = word0(&u[1]) = 0x7ff00000 | sign | bits[1]; + word1(&u[0]) = word1(&u[1]) = bits[0]; + } + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtodnrp.c mlton-20210117+dfsg/runtime/gdtoa/strtodnrp.c --- mlton-20130715/runtime/gdtoa/strtodnrp.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtodnrp.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,87 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 2004 by David M. Gay. +All Rights Reserved +Based on material in the rest of /netlib/fp/gdota.tar.gz, +which is copyright (C) 1998, 2000 by Lucent Technologies. + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* This is a variant of strtod that works on Intel ia32 systems */ +/* with the default extended-precision arithmetic -- it does not */ +/* require setting the precision control to 53 bits. */ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoaimp.h" + + double +#ifdef KR_headers +strtod(s, sp) CONST char *s; char **sp; +#else +strtod(CONST char *s, char **sp) +#endif +{ + static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI, 0 /*unused*/ }; + ULong bits[2]; + Long exp; + int k; + union { ULong L[2]; double d; } __attribute__((__may_alias__)) u; + + k = strtodg(s, sp, &fpi, &exp, bits); + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + u.L[0] = u.L[1] = 0; + break; + + case STRTOG_Normal: + u.L[_1] = bits[0]; + u.L[_0] = (bits[1] & ~0x100000) | ((exp + 0x3ff + 52) << 20); + break; + + case STRTOG_Denormal: + u.L[_1] = bits[0]; + u.L[_0] = bits[1]; + break; + + case STRTOG_Infinite: + u.L[_0] = 0x7ff00000; + u.L[_1] = 0; + break; + + case STRTOG_NaN: + u.L[0] = d_QNAN0; + u.L[1] = d_QNAN1; + break; + + case STRTOG_NaNbits: + u.L[_0] = 0x7ff00000 | bits[1]; + u.L[_1] = bits[0]; + } + if (k & STRTOG_Neg) + u.L[_0] |= 0x80000000L; + return u.d; + } diff -Nru mlton-20130715/runtime/gdtoa/strtof.c mlton-20210117+dfsg/runtime/gdtoa/strtof.c --- mlton-20130715/runtime/gdtoa/strtof.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtof.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,79 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + float +#ifdef KR_headers +gdtoa__strtof(s, sp) CONST char *s; char **sp; +#else +gdtoa__strtof(CONST char *s, char **sp) +#endif +{ + static FPI fpi0 = { 24, 1-127-24+1, 254-127-24+1, 1, SI, 0 /*unused*/ }; + ULong bits[1]; + Long exp; + int k; + union { ULong L[1]; float f; } __attribute__((__may_alias__)) u; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + switch(k & STRTOG_Retmask) { + default: /* unused */ + case STRTOG_NoNumber: + case STRTOG_Zero: + u.L[0] = 0; + break; + + case STRTOG_Normal: + case STRTOG_NaNbits: + u.L[0] = (bits[0] & 0x7fffff) | ((exp + 0x7f + 23) << 23); + break; + + case STRTOG_Denormal: + u.L[0] = bits[0]; + break; + + case STRTOG_Infinite: + u.L[0] = 0x7f800000; + break; + + case STRTOG_NaN: + u.L[0] = f_QNAN; + } + if (k & STRTOG_Neg) + u.L[0] |= 0x80000000L; + return u.f; + } diff -Nru mlton-20130715/runtime/gdtoa/strtoId.c mlton-20210117+dfsg/runtime/gdtoa/strtoId.c --- mlton-20130715/runtime/gdtoa/strtoId.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtoId.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,63 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + int +#ifdef KR_headers +gdtoa__strtoId(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1; +#else +gdtoa__strtoId(CONST char *s, char **sp, double *f0, double *f1) +#endif +{ + static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI, 0 /*unused*/ }; + Long exp[2]; + Bigint *B[2]; + int k, rv[2]; +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif + + B[0] = Balloc(1 MTb); + B[0]->wds = 2; + k = strtoIg(s, sp, &fpi, exp, B, rv); + ULtod((ULong*)f0, B[0]->x, exp[0], rv[0]); + Bfree(B[0] MTb); + if (B[1]) { + ULtod((ULong*)f1, B[1]->x, exp[1], rv[1]); + Bfree(B[1] MTb); + } + else { + ((ULong*)f1)[0] = ((ULong*)f0)[0]; + ((ULong*)f1)[1] = ((ULong*)f0)[1]; + } + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtoIdd.c mlton-20210117+dfsg/runtime/gdtoa/strtoIdd.c --- mlton-20130715/runtime/gdtoa/strtoIdd.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtoIdd.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,69 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + int +#ifdef KR_headers +gdtoa__strtoIdd(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1; +#else +gdtoa__strtoIdd(CONST char *s, char **sp, double *f0, double *f1) +#endif +{ +#ifdef Sudden_Underflow + static FPI fpi = { 106, 1-1023, 2046-1023-106+1, 1, 1, 0 /*unused*/ }; +#else + static FPI fpi = { 106, 1-1023-53+1, 2046-1023-106+1, 1, 0, 0 /*unused*/ }; +#endif + Long exp[2]; + Bigint *B[2]; + int k, rv[2]; +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif + + B[0] = Balloc(2 MTb); + B[0]->wds = 4; + k = strtoIg(s, sp, &fpi, exp, B, rv); + ULtodd((ULong*)f0, B[0]->x, exp[0], rv[0]); + Bfree(B[0] MTb); + if (B[1]) { + ULtodd((ULong*)f1, B[1]->x, exp[1], rv[1]); + Bfree(B[1] MTb); + } + else { + ((ULong*)f1)[0] = ((ULong*)f0)[0]; + ((ULong*)f1)[1] = ((ULong*)f0)[1]; + ((ULong*)f1)[2] = ((ULong*)f0)[2]; + ((ULong*)f1)[3] = ((ULong*)f0)[3]; + } + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtoIf.c mlton-20210117+dfsg/runtime/gdtoa/strtoIf.c --- mlton-20130715/runtime/gdtoa/strtoIf.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtoIf.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,61 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + int +#ifdef KR_headers +gdtoa__strtoIf(s, sp, f0, f1) CONST char *s; char **sp; float *f0, *f1; +#else +gdtoa__strtoIf(CONST char *s, char **sp, float *f0, float *f1) +#endif +{ + static FPI fpi = { 24, 1-127-24+1, 254-127-24+1, 1, SI, 0 /*unused*/ }; + Long exp[2]; + Bigint *B[2]; + int k, rv[2]; +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif + + B[0] = Balloc(0 MTb); + B[0]->wds = 1; + k = strtoIg(s, sp, &fpi, exp, B, rv); + ULtof((ULong*)f0, B[0]->x, exp[0], rv[0]); + Bfree(B[0] MTb); + if (B[1]) { + ULtof((ULong*)f1, B[1]->x, exp[1], rv[1]); + Bfree(B[1] MTb); + } + else + *(ULong*)f1 = *(ULong*)f0; + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtoIg.c mlton-20210117+dfsg/runtime/gdtoa/strtoIg.c --- mlton-20130715/runtime/gdtoa/strtoIg.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtoIg.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,140 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + int +#ifdef KR_headers +strtoIg(s00, se, fpi, exp, B, rvp) CONST char *s00; char **se; CONST FPI *fpi; Long *exp; Bigint **B; int *rvp; +#else +strtoIg(CONST char *s00, char **se, CONST FPI *fpi, Long *exp, Bigint **B, int *rvp) +#endif +{ + Bigint *b, *b1; + int i, nb, nw, nw1, rv, rv1, swap; + unsigned int nb1, nb11; + Long e1; +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif + + b = *B; + rv = gdtoa__strtodg(s00, se, fpi, exp, b->x); + if (!(rv & STRTOG_Inexact)) { + B[1] = 0; + return *rvp = rv; + } + e1 = exp[0]; + rv1 = rv ^ STRTOG_Inexact; + b1 = Balloc(b->k MTb); + Bcopy(b1, b); + nb = fpi->nbits; + nb1 = nb & 31; + nb11 = (nb1 - 1) & 31; + nw = b->wds; + nw1 = nw - 1; + if (rv & STRTOG_Inexlo) { + swap = 0; + b1 = increment(b1 MTb); + if ((rv & STRTOG_Retmask) == STRTOG_Zero) { + if (fpi->sudden_underflow) { + b1->x[0] = 0; + b1->x[nw1] = 1L << nb11; + rv1 += STRTOG_Normal - STRTOG_Zero; + rv1 &= ~STRTOG_Underflow; + goto swapcheck; + } + rv1 &= STRTOG_Inexlo | STRTOG_Underflow | STRTOG_Zero | STRTOG_Neg; + rv1 |= STRTOG_Inexhi | STRTOG_Denormal; + goto swapcheck; + } + if (b1->wds > nw + || (nb1 && b1->x[nw1] & 1L << nb1)) { + if (++e1 > fpi->emax) + rv1 = STRTOG_Infinite | STRTOG_Inexhi; + rshift(b1, 1); + } + else if ((rv & STRTOG_Retmask) == STRTOG_Denormal) { + if (b1->x[nw1] & 1L << nb11) { + rv1 += STRTOG_Normal - STRTOG_Denormal; + rv1 &= ~STRTOG_Underflow; + } + } + } + else { + swap = STRTOG_Neg; + if ((rv & STRTOG_Retmask) == STRTOG_Infinite) { + b1 = set_ones(b1, nb MTb); + e1 = fpi->emax; + rv1 = STRTOG_Normal | STRTOG_Inexlo | (rv & STRTOG_Neg); + goto swapcheck; + } + decrement(b1); + if ((rv & STRTOG_Retmask) == STRTOG_Denormal) { + for(i = nw1; !b1->x[i]; --i) + if (!i) { + rv1 = STRTOG_Zero | STRTOG_Inexlo | (rv & STRTOG_Neg); + break; + } + goto swapcheck; + } + if (!(b1->x[nw1] & 1L << nb11)) { + if (e1 == fpi->emin) { + if (fpi->sudden_underflow) + rv1 += STRTOG_Zero - STRTOG_Normal; + else + rv1 += STRTOG_Denormal - STRTOG_Normal; + rv1 |= STRTOG_Underflow; + } + else { + b1 = lshift(b1, 1 MTb); + b1->x[0] |= 1; + --e1; + } + } + } + swapcheck: + if (swap ^ (rv & STRTOG_Neg)) { + rvp[0] = rv1; + rvp[1] = rv; + B[0] = b1; + B[1] = b; + exp[1] = exp[0]; + exp[0] = e1; + } + else { + rvp[0] = rv; + rvp[1] = rv1; + B[1] = b1; + exp[1] = e1; + } + return rv; + } diff -Nru mlton-20130715/runtime/gdtoa/strtoIQ.c mlton-20210117+dfsg/runtime/gdtoa/strtoIQ.c --- mlton-20130715/runtime/gdtoa/strtoIQ.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtoIQ.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,66 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + int +#ifdef KR_headers +gdtoa__strtoIQ(s, sp, a, b) CONST char *s; char **sp; void *a; void *b; +#else +gdtoa__strtoIQ(CONST char *s, char **sp, void *a, void *b) +#endif +{ + static FPI fpi = { 113, 1-16383-113+1, 32766-16383-113+1, 1, SI, 0 /*unused*/ }; + Long exp[2]; + Bigint *B[2]; + int k, rv[2]; + ULong *L = (ULong *)a, *M = (ULong *)b; +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif + + B[0] = Balloc(2 MTb); + B[0]->wds = 4; + k = strtoIg(s, sp, &fpi, exp, B, rv); + ULtoQ(L, B[0]->x, exp[0], rv[0]); + Bfree(B[0] MTb); + if (B[1]) { + ULtoQ(M, B[1]->x, exp[1], rv[1]); + Bfree(B[1] MTb); + } + else { + M[0] = L[0]; + M[1] = L[1]; + M[2] = L[2]; + M[3] = L[3]; + } + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtoIx.c mlton-20210117+dfsg/runtime/gdtoa/strtoIx.c --- mlton-20130715/runtime/gdtoa/strtoIx.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtoIx.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,67 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + int +#ifdef KR_headers +gdtoa__strtoIx(s, sp, a, b) CONST char *s; char **sp; void *a; void *b; +#else +gdtoa__strtoIx(CONST char *s, char **sp, void *a, void *b) +#endif +{ + static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI, 0 /*unused*/ }; + Long exp[2]; + Bigint *B[2]; + int k, rv[2]; + UShort *L = (UShort *)a, *M = (UShort *)b; +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif + + B[0] = Balloc(1 MTb); + B[0]->wds = 2; + k = strtoIg(s, sp, &fpi, exp, B, rv); + ULtox(L, B[0]->x, exp[0], rv[0]); + Bfree(B[0] MTb); + if (B[1]) { + ULtox(M, B[1]->x, exp[1], rv[1]); + Bfree(B[1] MTb); + } + else { + M[0] = L[0]; + M[1] = L[1]; + M[2] = L[2]; + M[3] = L[3]; + M[4] = L[4]; + } + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtoIxL.c mlton-20210117+dfsg/runtime/gdtoa/strtoIxL.c --- mlton-20130715/runtime/gdtoa/strtoIxL.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtoIxL.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,65 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + int +#ifdef KR_headers +gdtoa__strtoIxL(s, sp, a, b) CONST char *s; char **sp; void *a; void *b; +#else +gdtoa__strtoIxL(CONST char *s, char **sp, void *a, void *b) +#endif +{ + static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI, 0 /*unused*/ }; + Long exp[2]; + Bigint *B[2]; + int k, rv[2]; + ULong *L = (ULong *)a, *M = (ULong *)b; +#ifdef MULTIPLE_THREADS + ThInfo *TI = 0; +#endif + + B[0] = Balloc(1 MTb); + B[0]->wds = 2; + k = strtoIg(s, sp, &fpi, exp, B, rv); + ULtoxL(L, B[0]->x, exp[0], rv[0]); + Bfree(B[0] MTb); + if (B[1]) { + ULtoxL(M, B[1]->x, exp[1], rv[1]); + Bfree(B[1] MTb); + } + else { + M[0] = L[0]; + M[1] = L[1]; + M[2] = L[2]; + } + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtopd.c mlton-20210117+dfsg/runtime/gdtoa/strtopd.c --- mlton-20130715/runtime/gdtoa/strtopd.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtopd.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,54 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + int +#ifdef KR_headers +gdtoa__strtopd(s, sp, d) char *s; char **sp; double *d; +#else +gdtoa__strtopd(CONST char *s, char **sp, double *d) +#endif +{ + static FPI fpi0 = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI, 0 /*unused*/ }; + ULong bits[2]; + Long exp; + int k; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + ULtod((ULong*)d, bits, exp, k); + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtopdd.c mlton-20210117+dfsg/runtime/gdtoa/strtopdd.c --- mlton-20130715/runtime/gdtoa/strtopdd.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtopdd.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,183 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + int +#ifdef KR_headers +gdtoa__strtopdd(s, sp, dd) CONST char *s; char **sp; double *dd; +#else +gdtoa__strtopdd(CONST char *s, char **sp, double *dd) +#endif +{ +#ifdef Sudden_Underflow + static FPI fpi0 = { 106, 1-1023, 2046-1023-106+1, 1, 1, 0 /*unused*/ }; +#else + static FPI fpi0 = { 106, 1-1023-53+1, 2046-1023-106+1, 1, 0, 0 /*unused*/ }; +#endif + ULong bits[4]; + Long exp; + int i, j, rv; + typedef union { + double d[2]; + ULong L[4]; + } __attribute__((__may_alias__)) U; + U *u; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + rv = gdtoa__strtodg(s, sp, fpi, &exp, bits); + u = (U*)dd; + switch(rv & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + u->d[0] = u->d[1] = 0.; + break; + + case STRTOG_Normal: + u->L[_1] = (bits[1] >> 21 | bits[2] << 11) & 0xffffffffL; + u->L[_0] = (bits[2] >> 21) | ((bits[3] << 11) & 0xfffff) + | ((exp + 0x3ff + 105) << 20); + exp += 0x3ff + 52; + if (bits[1] &= 0x1fffff) { + i = hi0bits(bits[1]) - 11; + if (i >= exp) { + i = exp - 1; + exp = 0; + } + else + exp -= i; + if (i > 0) { + bits[1] = bits[1] << i | bits[0] >> (32-i); + bits[0] = bits[0] << i & 0xffffffffL; + } + } + else if (bits[0]) { + i = hi0bits(bits[0]) + 21; + if (i >= exp) { + i = exp - 1; + exp = 0; + } + else + exp -= i; + if (i < 32) { + bits[1] = bits[0] >> (32 - i); + bits[0] = bits[0] << i & 0xffffffffL; + } + else { + bits[1] = bits[0] << (i - 32); + bits[0] = 0; + } + } + else { + u->L[2] = u->L[3] = 0; + break; + } + u->L[2+_1] = bits[0]; + u->L[2+_0] = (bits[1] & 0xfffff) | (exp << 20); + break; + + case STRTOG_Denormal: + if (bits[3]) + goto nearly_normal; + if (bits[2]) + goto partly_normal; + if (bits[1] & 0xffe00000) + goto hardly_normal; + /* completely denormal */ + u->L[2] = u->L[3] = 0; + u->L[_1] = bits[0]; + u->L[_0] = bits[1]; + break; + + nearly_normal: + i = hi0bits(bits[3]) - 11; /* i >= 12 */ + j = 32 - i; + u->L[_0] = ((bits[3] << i | bits[2] >> j) & 0xfffff) + | ((65 - i) << 20); + u->L[_1] = (bits[2] << i | bits[1] >> j) & 0xffffffffL; + u->L[2+_0] = bits[1] & ((1L << j) - 1); + u->L[2+_1] = bits[0]; + break; + + partly_normal: + i = hi0bits(bits[2]) - 11; + if (i < 0) { + j = -i; + i += 32; + u->L[_0] = (bits[2] >> j & 0xfffff) | (33 + j) << 20; + u->L[_1] = ((bits[2] << i) | (bits[1] >> j)) & 0xffffffffL; + u->L[2+_0] = bits[1] & ((1L << j) - 1); + u->L[2+_1] = bits[0]; + break; + } + if (i == 0) { + u->L[_0] = (bits[2] & 0xfffff) | (33 << 20); + u->L[_1] = bits[1]; + u->L[2+_0] = 0; + u->L[2+_1] = bits[0]; + break; + } + j = 32 - i; + u->L[_0] = (((bits[2] << i) | (bits[1] >> j)) & 0xfffff) + | ((j + 1) << 20); + u->L[_1] = (bits[1] << i | bits[0] >> j) & 0xffffffffL; + u->L[2+_0] = 0; + u->L[2+_1] = bits[0] & ((1L << j) - 1); + break; + + hardly_normal: + j = 11 - hi0bits(bits[1]); + i = 32 - j; + u->L[_0] = (bits[1] >> j & 0xfffff) | ((j + 1) << 20); + u->L[_1] = (bits[1] << i | bits[0] >> j) & 0xffffffffL; + u->L[2+_0] = 0; + u->L[2+_1] = bits[0] & ((1L << j) - 1); + break; + + case STRTOG_Infinite: + u->L[_0] = u->L[2+_0] = 0x7ff00000; + u->L[_1] = u->L[2+_1] = 0; + break; + + case STRTOG_NaN: + u->L[0] = u->L[2] = d_QNAN0; + u->L[1] = u->L[3] = d_QNAN1; + } + if (rv & STRTOG_Neg) { + u->L[ _0] |= 0x80000000L; + u->L[2+_0] |= 0x80000000L; + } + return rv; + } diff -Nru mlton-20130715/runtime/gdtoa/strtopf.c mlton-20210117+dfsg/runtime/gdtoa/strtopf.c --- mlton-20130715/runtime/gdtoa/strtopf.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtopf.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,78 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + int +#ifdef KR_headers +gdtoa__strtopf(s, sp, f) CONST char *s; char **sp; float *f; +#else +gdtoa__strtopf(CONST char *s, char **sp, float *f) +#endif +{ + static FPI fpi0 = { 24, 1-127-24+1, 254-127-24+1, 1, SI, 0 /*unused*/ }; + ULong bits[1], *L; + Long exp; + int k; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + L = (ULong*)f; + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + L[0] = 0; + break; + + case STRTOG_Normal: + case STRTOG_NaNbits: + L[0] = (bits[0] & 0x7fffff) | ((exp + 0x7f + 23) << 23); + break; + + case STRTOG_Denormal: + L[0] = bits[0]; + break; + + case STRTOG_Infinite: + L[0] = 0x7f800000; + break; + + case STRTOG_NaN: + L[0] = f_QNAN; + } + if (k & STRTOG_Neg) + L[0] |= 0x80000000L; + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtopQ.c mlton-20210117+dfsg/runtime/gdtoa/strtopQ.c --- mlton-20130715/runtime/gdtoa/strtopQ.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtopQ.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,109 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#endif +#ifdef IEEE_8087 +#define _0 3 +#define _1 2 +#define _2 1 +#define _3 0 +#endif + + extern ULong NanDflt_Q_D2A[4]; + + + int +#ifdef KR_headers +gdtoa__strtopQ(s, sp, V) CONST char *s; char **sp; void *V; +#else +gdtoa__strtopQ(CONST char *s, char **sp, void *V) +#endif +{ + static FPI fpi0 = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, SI, 0 /*unused*/ }; + ULong bits[4]; + Long exp; + int k; + ULong *L = (ULong*)V; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + L[0] = L[1] = L[2] = L[3] = 0; + break; + + case STRTOG_Normal: + case STRTOG_NaNbits: + L[_3] = bits[0]; + L[_2] = bits[1]; + L[_1] = bits[2]; + L[_0] = (bits[3] & ~0x10000) | ((exp + 0x3fff + 112) << 16); + break; + + case STRTOG_Denormal: + L[_3] = bits[0]; + L[_2] = bits[1]; + L[_1] = bits[2]; + L[_0] = bits[3]; + break; + + case STRTOG_Infinite: + L[_0] = 0x7fff0000; + L[_1] = L[_2] = L[_3] = 0; + break; + + case STRTOG_NaN: + L[_0] = NanDflt_Q_D2A[3]; + L[_1] = NanDflt_Q_D2A[2]; + L[_2] = NanDflt_Q_D2A[1]; + L[_3] = NanDflt_Q_D2A[0]; + } + if (k & STRTOG_Neg) + L[_0] |= 0x80000000L; + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtopx.c mlton-20210117+dfsg/runtime/gdtoa/strtopx.c --- mlton-20130715/runtime/gdtoa/strtopx.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtopx.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,111 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + extern UShort NanDflt_ldus_D2A[5]; + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#define _4 4 +#endif +#ifdef IEEE_8087 +#define _0 4 +#define _1 3 +#define _2 2 +#define _3 1 +#define _4 0 +#endif + + int +#ifdef KR_headers +gdtoa__strtopx(s, sp, V) CONST char *s; char **sp; void *V; +#else +gdtoa__strtopx(CONST char *s, char **sp, void *V) +#endif +{ + static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI, 0 /*unused*/ }; + ULong bits[2]; + Long exp; + int k; + UShort *L = (UShort*)V; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + L[0] = L[1] = L[2] = L[3] = L[4] = 0; + break; + + case STRTOG_Denormal: + L[_0] = 0; + goto normal_bits; + + case STRTOG_Normal: + case STRTOG_NaNbits: + L[_0] = exp + 0x3fff + 63; + normal_bits: + L[_4] = (UShort)bits[0]; + L[_3] = (UShort)(bits[0] >> 16); + L[_2] = (UShort)bits[1]; + L[_1] = (UShort)(bits[1] >> 16); + break; + + case STRTOG_Infinite: + L[_0] = 0x7fff; + L[_1] = 0x8000; + L[_2] = L[_3] = L[_4] = 0; + break; + + case STRTOG_NaN: + L[_4] = NanDflt_ldus_D2A[0]; + L[_3] = NanDflt_ldus_D2A[1]; + L[_2] = NanDflt_ldus_D2A[2]; + L[_1] = NanDflt_ldus_D2A[3]; + L[_0] = NanDflt_ldus_D2A[4]; + } + if (k & STRTOG_Neg) + L[_0] |= 0x8000; + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtopxL.c mlton-20210117+dfsg/runtime/gdtoa/strtopxL.c --- mlton-20130715/runtime/gdtoa/strtopxL.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtopxL.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,99 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + extern ULong NanDflt_xL_D2A[3]; + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#endif +#ifdef IEEE_8087 +#define _0 2 +#define _1 1 +#define _2 0 +#endif + + int +#ifdef KR_headers +gdtoa__strtopxL(s, sp, V) CONST char *s; char **sp; void *V; +#else +gdtoa__strtopxL(CONST char *s, char **sp, void *V) +#endif +{ + static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI, 0 /*unused*/ }; + ULong bits[2]; + Long exp; + int k; + ULong *L = (ULong*)V; +#ifdef Honor_FLT_ROUNDS +#include "gdtoa/gdtoa_fltrnds.h" +#else +#define fpi &fpi0 +#endif + + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + L[0] = L[1] = L[2] = 0; + break; + + case STRTOG_Normal: + case STRTOG_Denormal: + case STRTOG_NaNbits: + L[_2] = bits[0]; + L[_1] = bits[1]; + L[_0] = (exp + 0x3fff + 63) << 16; + break; + + case STRTOG_Infinite: + L[_0] = 0x7fff << 16; + L[_1] = 0x80000000; + L[_2] = 0; + break; + + case STRTOG_NaN: + L[_0] = NanDflt_xL_D2A[2]; + L[_1] = NanDflt_xL_D2A[1]; + L[_2] = NanDflt_xL_D2A[0]; + } + if (k & STRTOG_Neg) + L[_0] |= 0x80000000L; + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtord.c mlton-20210117+dfsg/runtime/gdtoa/strtord.c --- mlton-20130715/runtime/gdtoa/strtord.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtord.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,95 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + extern ULong NanDflt_d_D2A[2]; + + void +#ifdef KR_headers +ULtod(L, bits, exp, k) ULong *L; ULong *bits; Long exp; int k; +#else +ULtod(ULong *L, ULong *bits, Long exp, int k) +#endif +{ + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + L[0] = L[1] = 0; + break; + + case STRTOG_Denormal: + L[_1] = bits[0]; + L[_0] = bits[1]; + break; + + case STRTOG_Normal: + case STRTOG_NaNbits: + L[_1] = bits[0]; + L[_0] = (bits[1] & ~0x100000) | ((exp + 0x3ff + 52) << 20); + break; + + case STRTOG_Infinite: + L[_0] = 0x7ff00000; + L[_1] = 0; + break; + + case STRTOG_NaN: + L[_0] = NanDflt_d_D2A[1]; + L[_1] = NanDflt_d_D2A[0]; + } + if (k & STRTOG_Neg) + L[_0] |= 0x80000000L; + } + + int +#ifdef KR_headers +gdtoa__strtord(s, sp, rounding, d) CONST char *s; char **sp; int rounding; double *d; +#else +gdtoa__strtord(CONST char *s, char **sp, int rounding, double *d) +#endif +{ + static FPI fpi0 = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI, 0 /*unused*/ }; + FPI *fpi, fpi1; + ULong bits[2]; + Long exp; + int k; + + fpi = &fpi0; + if (rounding != FPI_Round_near) { + fpi1 = fpi0; + fpi1.rounding = rounding; + fpi = &fpi1; + } + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + ULtod((ULong*)d, bits, exp, k); + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtordd.c mlton-20210117+dfsg/runtime/gdtoa/strtordd.c --- mlton-20130715/runtime/gdtoa/strtordd.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtordd.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,202 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + extern ULong NanDflt_d_D2A[2]; + + void +#ifdef KR_headers +ULtodd(L, bits, exp, k) ULong *L; ULong *bits; Long exp; int k; +#else +ULtodd(ULong *L, ULong *bits, Long exp, int k) +#endif +{ + int i, j; + + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + L[0] = L[1] = L[2] = L[3] = 0; + break; + + case STRTOG_Normal: + L[_1] = (bits[1] >> 21 | bits[2] << 11) & (ULong)0xffffffffL; + L[_0] = (bits[2] >> 21) | (bits[3] << 11 & 0xfffff) + | ((exp + 0x3ff + 105) << 20); + exp += 0x3ff + 52; + if (bits[1] &= 0x1fffff) { + i = hi0bits(bits[1]) - 11; + if (i >= exp) { + i = exp - 1; + exp = 0; + } + else + exp -= i; + if (i > 0) { + bits[1] = bits[1] << i | bits[0] >> (32-i); + bits[0] = bits[0] << i & (ULong)0xffffffffL; + } + } + else if (bits[0]) { + i = hi0bits(bits[0]) + 21; + if (i >= exp) { + i = exp - 1; + exp = 0; + } + else + exp -= i; + if (i < 32) { + bits[1] = bits[0] >> (32 - i); + bits[0] = bits[0] << i & (ULong)0xffffffffL; + } + else { + bits[1] = bits[0] << (i - 32); + bits[0] = 0; + } + } + else { + L[2] = L[3] = 0; + break; + } + L[2+_1] = bits[0]; + L[2+_0] = (bits[1] & 0xfffff) | (exp << 20); + break; + + case STRTOG_Denormal: + if (bits[3]) + goto nearly_normal; + if (bits[2]) + goto partly_normal; + if (bits[1] & 0xffe00000) + goto hardly_normal; + /* completely denormal */ + L[2] = L[3] = 0; + L[_1] = bits[0]; + L[_0] = bits[1]; + break; + + nearly_normal: + i = hi0bits(bits[3]) - 11; /* i >= 12 */ + j = 32 - i; + L[_0] = ((bits[3] << i | bits[2] >> j) & 0xfffff) + | ((65 - i) << 20); + L[_1] = (bits[2] << i | bits[1] >> j) & 0xffffffffL; + L[2+_0] = bits[1] & (((ULong)1L << j) - 1); + L[2+_1] = bits[0]; + break; + + partly_normal: + i = hi0bits(bits[2]) - 11; + if (i < 0) { + j = -i; + i += 32; + L[_0] = (bits[2] >> j & 0xfffff) | ((33 + j) << 20); + L[_1] = (bits[2] << i | bits[1] >> j) & 0xffffffffL; + L[2+_0] = bits[1] & (((ULong)1L << j) - 1); + L[2+_1] = bits[0]; + break; + } + if (i == 0) { + L[_0] = (bits[2] & 0xfffff) | (33 << 20); + L[_1] = bits[1]; + L[2+_0] = 0; + L[2+_1] = bits[0]; + break; + } + j = 32 - i; + L[_0] = (((bits[2] << i) | (bits[1] >> j)) & 0xfffff) + | ((j + 1) << 20); + L[_1] = (bits[1] << i | bits[0] >> j) & 0xffffffffL; + L[2+_0] = 0; + L[2+_1] = bits[0] & ((1L << j) - 1); + break; + + hardly_normal: + j = 11 - hi0bits(bits[1]); + i = 32 - j; + L[_0] = (bits[1] >> j & 0xfffff) | ((j + 1) << 20); + L[_1] = (bits[1] << i | bits[0] >> j) & 0xffffffffL; + L[2+_0] = 0; + L[2+_1] = bits[0] & (((ULong)1L << j) - 1); + break; + + case STRTOG_Infinite: + L[_0] = L[2+_0] = 0x7ff00000; + L[_1] = L[2+_1] = 0; + break; + + case STRTOG_NaN: + L[_0] = L[_0+2] = NanDflt_d_D2A[1]; + L[_1] = L[_1+2] = NanDflt_d_D2A[0]; + break; + + case STRTOG_NaNbits: + L[_1] = (bits[1] >> 20 | bits[2] << 12) & (ULong)0xffffffffL; + L[_0] = bits[2] >> 20 | bits[3] << 12; + L[_0] |= (L[_1] | L[_0]) ? (ULong)0x7ff00000L : (ULong)0x7ff80000L; + L[2+_1] = bits[0] & (ULong)0xffffffffL; + L[2+_0] = bits[1] & 0xfffffL; + L[2+_0] |= (L[2+_1] | L[2+_0]) ? (ULong)0x7ff00000L : (ULong)0x7ff80000L; + } + if (k & STRTOG_Neg) { + L[_0] |= 0x80000000L; + L[2+_0] |= 0x80000000L; + } + } + + int +#ifdef KR_headers +gdtoa__strtordd(s, sp, rounding, dd) CONST char *s; char **sp; int rounding; double *dd; +#else +gdtoa__strtordd(CONST char *s, char **sp, int rounding, double *dd) +#endif +{ +#ifdef Sudden_Underflow + static FPI fpi0 = { 106, 1-1023, 2046-1023-106+1, 1, 1, 0 /*unused*/ }; +#else + static FPI fpi0 = { 106, 1-1023-53+1, 2046-1023-106+1, 1, 0, 0 /*unused*/ }; +#endif + FPI *fpi, fpi1; + ULong bits[4]; + Long exp; + int k; + + fpi = &fpi0; + if (rounding != FPI_Round_near) { + fpi1 = fpi0; + fpi1.rounding = rounding; + fpi = &fpi1; + } + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + ULtodd((ULong*)dd, bits, exp, k); + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtorf.c mlton-20210117+dfsg/runtime/gdtoa/strtorf.c --- mlton-20130715/runtime/gdtoa/strtorf.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtorf.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,91 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + extern ULong NanDflt_f_D2A[1]; + + void +#ifdef KR_headers +ULtof(L, bits, exp, k) ULong *L; ULong *bits; Long exp; int k; +#else +ULtof(ULong *L, ULong *bits, Long exp, int k) +#endif +{ + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + *L = 0; + break; + + case STRTOG_Normal: + case STRTOG_NaNbits: + L[0] = (bits[0] & 0x7fffff) | ((exp + 0x7f + 23) << 23); + break; + + case STRTOG_Denormal: + L[0] = bits[0]; + break; + + case STRTOG_Infinite: + L[0] = 0x7f800000; + break; + + case STRTOG_NaN: + L[0] = NanDflt_f_D2A[0]; + } + if (k & STRTOG_Neg) + L[0] |= 0x80000000L; + } + + int +#ifdef KR_headers +gdtoa__strtorf(s, sp, rounding, f) CONST char *s; char **sp; int rounding; float *f; +#else +gdtoa__strtorf(CONST char *s, char **sp, int rounding, float *f) +#endif +{ + static FPI fpi0 = { 24, 1-127-24+1, 254-127-24+1, 1, SI, 0 /*unused*/ }; + FPI *fpi, fpi1; + ULong bits[1]; + Long exp; + int k; + + fpi = &fpi0; + if (rounding != FPI_Round_near) { + fpi1 = fpi0; + fpi1.rounding = rounding; + fpi = &fpi1; + } + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + ULtof((ULong*)f, bits, exp, k); + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtorQ.c mlton-20210117+dfsg/runtime/gdtoa/strtorQ.c --- mlton-20130715/runtime/gdtoa/strtorQ.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtorQ.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,119 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#endif +#ifdef IEEE_8087 +#define _0 3 +#define _1 2 +#define _2 1 +#define _3 0 +#endif + + extern ULong NanDflt_Q_D2A[4]; + + void +#ifdef KR_headers +ULtoQ(L, bits, exp, k) ULong *L; ULong *bits; Long exp; int k; +#else +ULtoQ(ULong *L, ULong *bits, Long exp, int k) +#endif +{ + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + L[0] = L[1] = L[2] = L[3] = 0; + break; + + case STRTOG_Normal: + case STRTOG_NaNbits: + L[_3] = bits[0]; + L[_2] = bits[1]; + L[_1] = bits[2]; + L[_0] = (bits[3] & ~0x10000) | ((exp + 0x3fff + 112) << 16); + break; + + case STRTOG_Denormal: + L[_3] = bits[0]; + L[_2] = bits[1]; + L[_1] = bits[2]; + L[_0] = bits[3]; + break; + + case STRTOG_Infinite: + L[_0] = 0x7fff0000; + L[_1] = L[_2] = L[_3] = 0; + break; + + case STRTOG_NaN: + L[_0] = NanDflt_Q_D2A[3]; + L[_1] = NanDflt_Q_D2A[2]; + L[_2] = NanDflt_Q_D2A[1]; + L[_3] = NanDflt_Q_D2A[0]; + } + if (k & STRTOG_Neg) + L[_0] |= 0x80000000L; + } + + int +#ifdef KR_headers +gdtoa__strtorQ(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L; +#else +gdtoa__strtorQ(CONST char *s, char **sp, int rounding, void *L) +#endif +{ + static FPI fpi0 = { 113, 1-16383-113+1, 32766-16383-113+1, 1, SI, 0 /*unused*/ }; + FPI *fpi, fpi1; + ULong bits[4]; + Long exp; + int k; + + fpi = &fpi0; + if (rounding != FPI_Round_near) { + fpi1 = fpi0; + fpi1.rounding = rounding; + fpi = &fpi1; + } + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + ULtoQ((ULong*)L, bits, exp, k); + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtorx.c mlton-20210117+dfsg/runtime/gdtoa/strtorx.c --- mlton-20130715/runtime/gdtoa/strtorx.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtorx.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,122 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#define _4 4 +#endif +#ifdef IEEE_8087 +#define _0 4 +#define _1 3 +#define _2 2 +#define _3 1 +#define _4 0 +#endif + + extern UShort NanDflt_ldus_D2A[5]; + + void +#ifdef KR_headers +ULtox(L, bits, exp, k) UShort *L; ULong *bits; Long exp; int k; +#else +ULtox(UShort *L, ULong *bits, Long exp, int k) +#endif +{ + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + L[0] = L[1] = L[2] = L[3] = L[4] = 0; + break; + + case STRTOG_Denormal: + L[_0] = 0; + goto normal_bits; + + case STRTOG_Normal: + case STRTOG_NaNbits: + L[_0] = exp + 0x3fff + 63; + normal_bits: + L[_4] = (UShort)bits[0]; + L[_3] = (UShort)(bits[0] >> 16); + L[_2] = (UShort)bits[1]; + L[_1] = (UShort)(bits[1] >> 16); + break; + + case STRTOG_Infinite: + L[_0] = 0x7fff; + L[_1] = 0x8000; + L[_2] = L[_3] = L[_4] = 0; + break; + + case STRTOG_NaN: + L[_4] = NanDflt_ldus_D2A[0]; + L[_3] = NanDflt_ldus_D2A[1]; + L[_2] = NanDflt_ldus_D2A[2]; + L[_1] = NanDflt_ldus_D2A[3]; + L[_0] = NanDflt_ldus_D2A[4]; + } + if (k & STRTOG_Neg) + L[_0] |= 0x8000; + } + + int +#ifdef KR_headers +gdtoa__strtorx(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L; +#else +gdtoa__strtorx(CONST char *s, char **sp, int rounding, void *L) +#endif +{ + static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI, 0 /*unused*/ }; + FPI *fpi, fpi1; + ULong bits[2]; + Long exp; + int k; + + fpi = &fpi0; + if (rounding != FPI_Round_near) { + fpi1 = fpi0; + fpi1.rounding = rounding; + fpi = &fpi1; + } + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + ULtox((UShort*)L, bits, exp, k); + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/strtorxL.c mlton-20210117+dfsg/runtime/gdtoa/strtorxL.c --- mlton-20130715/runtime/gdtoa/strtorxL.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/strtorxL.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,110 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2000 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#endif +#ifdef IEEE_8087 +#define _0 2 +#define _1 1 +#define _2 0 +#endif + + extern ULong NanDflt_xL_D2A[3]; + + void +#ifdef KR_headers +ULtoxL(L, bits, exp, k) ULong *L; ULong *bits; Long exp; int k; +#else +ULtoxL(ULong *L, ULong *bits, Long exp, int k) +#endif +{ + switch(k & STRTOG_Retmask) { + case STRTOG_NoNumber: + case STRTOG_Zero: + L[0] = L[1] = L[2] = 0; + break; + + case STRTOG_Normal: + case STRTOG_Denormal: + case STRTOG_NaNbits: + L[_0] = (exp + 0x3fff + 63) << 16; + L[_1] = bits[1]; + L[_2] = bits[0]; + break; + + case STRTOG_Infinite: + L[_0] = 0x7fff0000; + L[_1] = 0x80000000; + L[_2] = 0; + break; + + case STRTOG_NaN: + L[_0] = NanDflt_xL_D2A[2]; + L[_1] = NanDflt_xL_D2A[1]; + L[_2] = NanDflt_xL_D2A[0]; + } + if (k & STRTOG_Neg) + L[_0] |= 0x80000000L; + } + + int +#ifdef KR_headers +gdtoa__strtorxL(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L; +#else +gdtoa__strtorxL(CONST char *s, char **sp, int rounding, void *L) +#endif +{ + static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI, 0 /*unused*/ }; + FPI *fpi, fpi1; + ULong bits[2]; + Long exp; + int k; + + fpi = &fpi0; + if (rounding != FPI_Round_near) { + fpi1 = fpi0; + fpi1.rounding = rounding; + fpi = &fpi1; + } + k = gdtoa__strtodg(s, sp, fpi, &exp, bits); + ULtoxL((ULong*)L, bits, exp, k); + return k; + } diff -Nru mlton-20130715/runtime/gdtoa/sum.c mlton-20210117+dfsg/runtime/gdtoa/sum.c --- mlton-20130715/runtime/gdtoa/sum.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/sum.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,98 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + Bigint * +#ifdef KR_headers +sum(a, b MTa) Bigint *a; Bigint *b; MTk +#else +sum(Bigint *a, Bigint *b MTd) +#endif +{ + Bigint *c; + ULong carry, *xc, *xa, *xb, *xe, y; +#ifdef Pack_32 + ULong z; +#endif + + if (a->wds < b->wds) { + c = b; b = a; a = c; + } + c = Balloc(a->k MTa); + c->wds = a->wds; + carry = 0; + xa = a->x; + xb = b->x; + xc = c->x; + xe = xc + b->wds; +#ifdef Pack_32 + do { + y = (*xa & 0xffff) + (*xb & 0xffff) + carry; + carry = (y & 0x10000) >> 16; + z = (*xa++ >> 16) + (*xb++ >> 16) + carry; + carry = (z & 0x10000) >> 16; + Storeinc(xc, z, y); + } + while(xc < xe); + xe += a->wds - b->wds; + while(xc < xe) { + y = (*xa & 0xffff) + carry; + carry = (y & 0x10000) >> 16; + z = (*xa++ >> 16) + carry; + carry = (z & 0x10000) >> 16; + Storeinc(xc, z, y); + } +#else + do { + y = *xa++ + *xb++ + carry; + carry = (y & 0x10000) >> 16; + *xc++ = y & 0xffff; + } + while(xc < xe); + xe += a->wds - b->wds; + while(xc < xe) { + y = *xa++ + carry; + carry = (y & 0x10000) >> 16; + *xc++ = y & 0xffff; + } +#endif + if (carry) { + if (c->wds == c->maxwds) { + b = Balloc(c->k + 1 MTa); + Bcopy(b, c); + Bfree(c MTa); + c = b; + } + c->x[c->wds++] = 1; + } + return c; + } diff -Nru mlton-20130715/runtime/gdtoa/test/dd.out mlton-20210117+dfsg/runtime/gdtoa/test/dd.out --- mlton-20130715/runtime/gdtoa/test/dd.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/dd.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1372 @@ + +Input: 1.23 +strtopdd consumes 4 bytes and returns 17 +dd[0] = 1.23 = #3ff3ae14 7ae147ae +dd[1] = 1.7763568394002496e-17 = #3c747ae1 47ae1478 +g_ddfmt(0) gives 4 bytes: "1.23" + +strtoIdd returns 17, consuming 4 bytes. +ddI[0] = #3ff3ae14 7ae147ae + 3c747ae1 47ae1478 += 1.23 + 1.7763568394002496e-17 +ddI[1] = #3ff3ae14 7ae147ae + 3c747ae1 47ae1480 += 1.23 + 1.776356839400252e-17 +ddI[0] == strtod + + +Input: 1.23e+20 +strtopdd consumes 8 bytes and returns 1 +dd[0] = 1.23e+20 = #441aabdf 2145b430 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 8 bytes: "1.23e+20" + +strtoIdd returns 1, consuming 8 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1.23e-20 +strtopdd consumes 8 bytes and returns 33 +dd[0] = 1.2299999999999999e-20 = #3bcd0ae4 cf767530 +dd[1] = 9.304023318521521e-37 = #3873c997 955b2691 +g_ddfmt(0) gives 8 bytes: "1.23e-20" + +strtoIdd returns 33, consuming 8 bytes. +ddI[0] = #3bcd0ae4 cf767530 + 3873c997 955b2690 += 1.2299999999999999e-20 + 9.3040233185215194e-37 +ddI[1] = #3bcd0ae4 cf767530 + 3873c997 955b2691 += 1.2299999999999999e-20 + 9.3040233185215211e-37 +ddI[1] == strtod + + +Input: 1.23456789 +strtopdd consumes 10 bytes and returns 17 +dd[0] = 1.23456789 = #3ff3c0ca 4283de1b +dd[1] = 1.0990618193318369e-16 = #3c9fada5 144c1252 +g_ddfmt(0) gives 10 bytes: "1.23456789" + +strtoIdd returns 17, consuming 10 bytes. +ddI[0] = #3ff3c0ca 4283de1b + 3c9fada5 144c1252 += 1.2345678899999999 + 1.0990618193318369e-16 +ddI[1] = #3ff3c0ca 4283de1b + 3c9fada5 144c1254 += 1.2345678899999999 + 1.0990618193318371e-16 +ddI[0] == strtod + + +Input: 1.23456589e+20 +strtopdd consumes 14 bytes and returns 1 +dd[0] = 1.23456589e+20 = #441ac537 a660b997 +dd[1] = 4096 = #40b00000 0 +g_ddfmt(0) gives 14 bytes: "1.23456589e+20" + +strtoIdd returns 1, consuming 14 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1.23e+30 +strtopdd consumes 8 bytes and returns 1 +dd[0] = 1.23e+30 = #462f0cb0 4e8fb790 +dd[1] = 40281156091904 = #42c25158 0 +g_ddfmt(0) gives 8 bytes: "1.23e+30" + +strtoIdd returns 1, consuming 8 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1.23e-30 +strtopdd consumes 8 bytes and returns 17 +dd[0] = 1.2299999999999999e-30 = #39b8f286 6f5010aa +dd[1] = 1.076909723013918e-46 = #3663ac7f 3dafd174 +g_ddfmt(0) gives 8 bytes: "1.23e-30" + +strtoIdd returns 17, consuming 8 bytes. +ddI[0] = #39b8f286 6f5010aa + 3663ac7f 3dafd174 += 1.2299999999999999e-30 + 1.076909723013918e-46 +ddI[1] = #39b8f286 6f5010aa + 3663ac7f 3dafd175 += 1.2299999999999999e-30 + 1.0769097230139181e-46 +ddI[0] == strtod + + +Input: 1.23456789e-20 +strtopdd consumes 14 bytes and returns 17 +dd[0] = 1.23456789e-20 = #3bcd2681 471e7ada +dd[1] = 6.247111971663133e-37 = #386a9280 a761b07e +g_ddfmt(0) gives 14 bytes: "1.23456789e-20" + +strtoIdd returns 17, consuming 14 bytes. +ddI[0] = #3bcd2681 471e7ada + 386a9280 a761b07e += 1.2345678899999999e-20 + 6.2471119716631328e-37 +ddI[1] = #3bcd2681 471e7ada + 386a9280 a761b080 += 1.2345678899999999e-20 + 6.2471119716631345e-37 +ddI[0] == strtod + + +Input: 1.23456789e-30 +strtopdd consumes 14 bytes and returns 33 +dd[0] = 1.23456789e-30 = #39b90a3e 33bbd995 +dd[1] = 2.1567930523648577e-47 = #363f8585 55a6b1a0 +g_ddfmt(0) gives 14 bytes: "1.23456789e-30" + +strtoIdd returns 33, consuming 14 bytes. +ddI[0] = #39b90a3e 33bbd995 + 363f8585 55a6b198 += 1.23456789e-30 + 2.1567930523648558e-47 +ddI[1] = #39b90a3e 33bbd995 + 363f8585 55a6b1a0 += 1.23456789e-30 + 2.1567930523648577e-47 +ddI[1] == strtod + + +Input: 1.234567890123456789 +strtopdd consumes 20 bytes and returns 33 +dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb +dd[1] = 9.856786452588859e-17 = #3c9c6906 51a3745e +g_ddfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIdd returns 33, consuming 20 bytes. +ddI[0] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745c += 1.2345678901234567 + 9.8567864525888563e-17 +ddI[1] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745e += 1.2345678901234567 + 9.8567864525888588e-17 +ddI[1] == strtod + + +Input: 1.23456789012345678901234567890123456789 +strtopdd consumes 40 bytes and returns 33 +dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb +dd[1] = 9.858021020478982e-17 = #3c9c69ef 85adadb6 +g_ddfmt(0) gives 34 bytes: "1.23456789012345678901234567890124" + +strtoIdd returns 33, consuming 40 bytes. +ddI[0] = #3ff3c0ca 428c59fb + 3c9c69ef 85adadb4 += 1.2345678901234567 + 9.8580210204789798e-17 +ddI[1] = #3ff3c0ca 428c59fb + 3c9c69ef 85adadb6 += 1.2345678901234567 + 9.8580210204789823e-17 +ddI[1] == strtod + + +Input: 1.23e306 +strtopdd consumes 8 bytes and returns 33 +dd[0] = 1.2299999999999999e+306 = #7f7c0676 cd1c61f4 +dd[1] = 1.3319001448659015e+290 = #7c2b558b e3d3f477 +g_ddfmt(0) gives 9 bytes: "1.23e+306" + +strtoIdd returns 33, consuming 8 bytes. +ddI[0] = #7f7c0676 cd1c61f4 + 7c2b558b e3d3f476 += 1.2299999999999999e+306 + 1.3319001448659013e+290 +ddI[1] = #7f7c0676 cd1c61f4 + 7c2b558b e3d3f477 += 1.2299999999999999e+306 + 1.3319001448659015e+290 +ddI[1] == strtod + + +Input: 1.23e-306 +strtopdd consumes 9 bytes and returns 98 +dd[0] = 1.2299999999999999e-306 = #6ba3b8 5da396e7 +dd[1] = 1.43e-322 = #0 1d +g_ddfmt(0) gives 9 bytes: "1.23e-306" + +strtoIdd returns 98, consuming 9 bytes. +ddI[0] = #6ba3b8 5da396e7 + 0 1c += 1.2299999999999999e-306 + 1.3833838083554903e-322 +ddI[1] = #6ba3b8 5da396e7 + 0 1d += 1.2299999999999999e-306 + 1.432790372939615e-322 +ddI[1] == strtod + + +Input: 1.23e-320 +strtopdd consumes 9 bytes and returns 98 +dd[0] = 1.23e-320 = #0 9ba +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 9 bytes: "1.23e-320" + +strtoIdd returns 98, consuming 9 bytes. +ddI[0] = #0 9b9 + 0 0 += 1.2297293924988626e-320 + 0 +ddI[1] = #0 9ba + 0 0 += 1.2302234581447039e-320 + 0 +ddI[1] == strtod + + +Input: 1.23e-20 +strtopdd consumes 8 bytes and returns 33 +dd[0] = 1.2299999999999999e-20 = #3bcd0ae4 cf767530 +dd[1] = 9.304023318521521e-37 = #3873c997 955b2691 +g_ddfmt(0) gives 8 bytes: "1.23e-20" + +strtoIdd returns 33, consuming 8 bytes. +ddI[0] = #3bcd0ae4 cf767530 + 3873c997 955b2690 += 1.2299999999999999e-20 + 9.3040233185215194e-37 +ddI[1] = #3bcd0ae4 cf767530 + 3873c997 955b2691 += 1.2299999999999999e-20 + 9.3040233185215211e-37 +ddI[1] == strtod + + +Input: 1.23456789e307 +strtopdd consumes 14 bytes and returns 33 +dd[0] = 1.2345678899999998e+307 = #7fb194b1 4bdaecdb +dd[1] = 2.0137933598720243e+291 = #7c69d48d 192048ca +g_ddfmt(0) gives 15 bytes: "1.23456789e+307" + +strtoIdd returns 33, consuming 14 bytes. +ddI[0] = #7fb194b1 4bdaecdb + 7c69d48d 192048c9 += 1.2345678899999998e+307 + 2.013793359872024e+291 +ddI[1] = #7fb194b1 4bdaecdb + 7c69d48d 192048ca += 1.2345678899999998e+307 + 2.0137933598720243e+291 +ddI[1] == strtod + + +Input: 1.23456589e-307 +strtopdd consumes 15 bytes and returns 98 +dd[0] = 1.23456589e-307 = #363196 bb9845fa +dd[1] = 1e-323 = #0 2 +g_ddfmt(0) gives 15 bytes: "1.23456589e-307" + +strtoIdd returns 98, consuming 15 bytes. +ddI[0] = #363196 bb9845fa + 0 1 += 1.2345658899999999e-307 + 4.9406564584124654e-324 +ddI[1] = #363196 bb9845fa + 0 2 += 1.2345658899999999e-307 + 9.8813129168249309e-324 +ddI[1] == strtod + + +Input: 1.234567890123456789 +strtopdd consumes 20 bytes and returns 33 +dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb +dd[1] = 9.856786452588859e-17 = #3c9c6906 51a3745e +g_ddfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIdd returns 33, consuming 20 bytes. +ddI[0] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745c += 1.2345678901234567 + 9.8567864525888563e-17 +ddI[1] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745e += 1.2345678901234567 + 9.8567864525888588e-17 +ddI[1] == strtod + + +Input: 1.234567890123456789e301 +strtopdd consumes 24 bytes and returns 33 +dd[0] = 1.2345678901234568e+301 = #7e726f51 75f56413 +dd[1] = 1.3892003943918827e+283 = #7ab7ea80 76399100 +g_ddfmt(0) gives 25 bytes: "1.234567890123456789e+301" + +strtoIdd returns 33, consuming 24 bytes. +ddI[0] = #7e726f51 75f56413 + 7ab7ea80 76399080 += 1.2345678901234568e+301 + 1.3892003943918563e+283 +ddI[1] = #7e726f51 75f56413 + 7ab7ea80 76399100 += 1.2345678901234568e+301 + 1.3892003943918827e+283 +ddI[1] == strtod + + +Input: 1.234567890123456789e-301 +strtopdd consumes 25 bytes and returns 82 +dd[0] = 1.2345678901234567e-301 = #1752a64 e34ba0d3 +dd[1] = 7.374365e-318 = #0 16c66c +g_ddfmt(0) gives 25 bytes: "1.234567890123456789e-301" + +strtoIdd returns 82, consuming 25 bytes. +ddI[0] = #1752a64 e34ba0d3 + 0 16c66c += 1.2345678901234567e-301 + 7.374364541948945e-318 +ddI[1] = #1752a64 e34ba0d3 + 0 16c66d += 1.2345678901234567e-301 + 7.3743694826054034e-318 +ddI[0] == strtod + + +Input: 1.234567890123456789e-321 +strtopdd consumes 25 bytes and returns 98 +dd[0] = 1.235e-321 = #0 fa +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 10 bytes: "1.235e-321" + +strtoIdd returns 98, consuming 25 bytes. +ddI[0] = #0 f9 + 0 0 += 1.2302234581447039e-321 + 0 +ddI[1] = #0 fa + 0 0 += 1.2351641146031164e-321 + 0 +ddI[1] == strtod + + +Input: 1e23 +strtopdd consumes 4 bytes and returns 1 +dd[0] = 1e+23 = #44b52d02 c7e14af6 +dd[1] = 8388608 = #41600000 0 +g_ddfmt(0) gives 5 bytes: "1e+23" + +strtoIdd returns 1, consuming 4 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1e310 +strtopdd consumes 5 bytes and returns 163 +dd[0] = Infinity = #7ff00000 0 +dd[1] = Infinity = #7ff00000 0 +g_ddfmt(0) gives 8 bytes: "Infinity" + +strtoIdd returns 163, consuming 5 bytes. +ddI[0] = #7fefffff ffffffff + 7c9fffff ffffffff += 1.7976931348623157e+308 + 1.9958403095347196e+292 +ddI[1] = #7ff00000 0 + 7ff00000 0 += Infinity + Infinity +ddI[1] == strtod +g_ddfmt_p(...,0): "Infinity" +g_ddfmt_p(...,1): "Infinity" +g_ddfmt_p(...,2): "Infinity" +g_ddfmt_p(...,3): "Infinity" +g_ddfmt_p(...,4): "Infinity" +g_ddfmt_p(...,5): "Infinity" + + +Input: 9.0259718793241475e-277 +strtopdd consumes 23 bytes and returns 33 +dd[0] = 9.025971879324147e-277 = #69fffff ffffffff +dd[1] = 6.217378695986177e-293 = #343daae f3582320 +g_ddfmt(0) gives 23 bytes: "9.0259718793241475e-277" + +strtoIdd returns 33, consuming 23 bytes. +ddI[0] = #69fffff ffffffff + 343daae f358231f += 9.0259718793241469e-277 + 6.2173786959861757e-293 +ddI[1] = #69fffff ffffffff + 343daae f3582320 += 9.0259718793241469e-277 + 6.2173786959861768e-293 +ddI[1] == strtod + + +Input: 9.025971879324147880346310405869e-277 +strtopdd consumes 37 bytes and returns 17 +dd[0] = 9.025971879324148e-277 = #6a00000 0 +dd[1] = 2.2250738585072014e-308 = #100000 0 +g_ddfmt(0) gives 37 bytes: "9.025971879324147880346310405869e-277" + +strtoIdd returns 17, consuming 37 bytes. +ddI[0] = #6a00000 0 + 100000 0 += 9.0259718793241479e-277 + 2.2250738585072014e-308 +ddI[1] = #6a00000 0 + 200000 0 += 9.0259718793241479e-277 + 4.4501477170144028e-308 +ddI[0] == strtod + + +Input: 9.025971879324147880346310405868e-277 +strtopdd consumes 37 bytes and returns 17 +dd[0] = 9.025971879324147e-277 = #69fffff ffffffff +dd[1] = 1.0020841800044856e-292 = #34fffff fffffff9 +g_ddfmt(0) gives 37 bytes: "9.025971879324147880346310405868e-277" + +strtoIdd returns 17, consuming 37 bytes. +ddI[0] = #69fffff ffffffff + 34fffff fffffff9 += 9.0259718793241469e-277 + 1.0020841800044856e-292 +ddI[1] = #69fffff ffffffff + 34fffff fffffffa += 9.0259718793241469e-277 + 1.0020841800044857e-292 +ddI[0] == strtod + + +Input: 2.2250738585072014e-308 +strtopdd consumes 23 bytes and returns 82 +dd[0] = 2.2250738585072014e-308 = #100000 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 23 bytes: "2.2250738585072014e-308" + +strtoIdd returns 82, consuming 23 bytes. +ddI[0] = #100000 0 + 0 0 += 2.2250738585072014e-308 + 0 +ddI[1] = #100000 1 + 0 0 += 2.2250738585072019e-308 + 0 +ddI[0] == strtod + + +Input: 2.2250738585072013e-308 +strtopdd consumes 23 bytes and returns 98 +dd[0] = 2.2250738585072014e-308 = #100000 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 23 bytes: "2.2250738585072014e-308" + +strtoIdd returns 98, consuming 23 bytes. +ddI[0] = #fffff ffffffff + 0 0 += 2.2250738585072009e-308 + 0 +ddI[1] = #100000 0 + 0 0 += 2.2250738585072014e-308 + 0 +ddI[1] == strtod + + +Input: 3.2649476e14 +strtopdd consumes 12 bytes and returns 1 +dd[0] = 3.2649476e+14 = #42f28f1f c30da000 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 13 bytes: "3.2649476e+14" + +strtoIdd returns 1, consuming 12 bytes. +ddI[0] == ddI[1] == strtopdd + +Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero) + +Input: 1.1 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.0999999999999999 = #3ff19999 99999999 +dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333 +g_ddfmt(0) gives 3 bytes: "1.1" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff19999 99999999 + 3ca33333 33333333 += 1.0999999999999999 + 1.3322676295501878e-16 +ddI[1] = #3ff19999 99999999 + 3ca33333 33333334 += 1.0999999999999999 + 1.332267629550188e-16 +ddI[0] == strtod + + +Input: -1.1 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.0999999999999999 = #bff19999 99999999 +dd[1] = -1.3322676295501878e-16 = #bca33333 33333333 +g_ddfmt(0) gives 4 bytes: "-1.1" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff19999 99999999 + bca33333 33333334 += -1.0999999999999999 + -1.332267629550188e-16 +ddI[1] = #bff19999 99999999 + bca33333 33333333 += -1.0999999999999999 + -1.3322676295501878e-16 +ddI[1] == strtod + + +Input: 1.2 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.2 = #3ff33333 33333333 +dd[1] = 4.440892098500625e-17 = #3c899999 99999998 +g_ddfmt(0) gives 3 bytes: "1.2" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff33333 33333333 + 3c899999 99999998 += 1.2 + 4.4408920985006252e-17 +ddI[1] = #3ff33333 33333333 + 3c899999 9999999c += 1.2 + 4.4408920985006276e-17 +ddI[0] == strtod + + +Input: -1.2 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.2 = #bff33333 33333333 +dd[1] = -4.440892098500625e-17 = #bc899999 99999998 +g_ddfmt(0) gives 4 bytes: "-1.2" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff33333 33333333 + bc899999 9999999c += -1.2 + -4.4408920985006276e-17 +ddI[1] = #bff33333 33333333 + bc899999 99999998 += -1.2 + -4.4408920985006252e-17 +ddI[1] == strtod + + +Input: 1.3 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.2999999999999998 = #3ff4cccc cccccccc +dd[1] = 1.7763568394002503e-16 = #3ca99999 99999999 +g_ddfmt(0) gives 34 bytes: "1.29999999999999999999999999999999" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ff4cccc cccccccc + 3ca99999 99999999 += 1.2999999999999998 + 1.7763568394002503e-16 +ddI[1] = #3ff4cccc cccccccc + 3ca99999 9999999a += 1.2999999999999998 + 1.7763568394002506e-16 +ddI[0] == strtod + + +Input: -1.3 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.2999999999999998 = #bff4cccc cccccccc +dd[1] = -1.7763568394002503e-16 = #bca99999 99999999 +g_ddfmt(0) gives 35 bytes: "-1.29999999999999999999999999999999" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bff4cccc cccccccc + bca99999 9999999a += -1.2999999999999998 + -1.7763568394002506e-16 +ddI[1] = #bff4cccc cccccccc + bca99999 99999999 += -1.2999999999999998 + -1.7763568394002503e-16 +ddI[1] == strtod + + +Input: 1.4 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.4 = #3ff66666 66666666 +dd[1] = 8.88178419700125e-17 = #3c999999 99999998 +g_ddfmt(0) gives 34 bytes: "1.39999999999999999999999999999998" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ff66666 66666666 + 3c999999 99999998 += 1.3999999999999999 + 8.8817841970012504e-17 +ddI[1] = #3ff66666 66666666 + 3c999999 9999999a += 1.3999999999999999 + 8.8817841970012528e-17 +ddI[0] == strtod + + +Input: -1.4 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.4 = #bff66666 66666666 +dd[1] = -8.88178419700125e-17 = #bc999999 99999998 +g_ddfmt(0) gives 35 bytes: "-1.39999999999999999999999999999998" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bff66666 66666666 + bc999999 9999999a += -1.3999999999999999 + -8.8817841970012528e-17 +ddI[1] = #bff66666 66666666 + bc999999 99999998 += -1.3999999999999999 + -8.8817841970012504e-17 +ddI[1] == strtod + + +Input: 1.5 +strtopdd consumes 3 bytes and returns 1 +dd[0] = 1.5 = #3ff80000 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 3 bytes: "1.5" + +strtoIdd returns 1, consuming 3 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: -1.5 +strtopdd consumes 4 bytes and returns 9 +dd[0] = -1.5 = #bff80000 0 +dd[1] = -0 = #80000000 0 +g_ddfmt(0) gives 3 bytes: "1.5" + +strtoIdd returns 9, consuming 4 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1.6 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.5999999999999999 = #3ff99999 99999999 +dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333 +g_ddfmt(0) gives 3 bytes: "1.6" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff99999 99999999 + 3ca33333 33333333 += 1.5999999999999999 + 1.3322676295501878e-16 +ddI[1] = #3ff99999 99999999 + 3ca33333 33333334 += 1.5999999999999999 + 1.332267629550188e-16 +ddI[0] == strtod + + +Input: -1.6 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.5999999999999999 = #bff99999 99999999 +dd[1] = -1.3322676295501878e-16 = #bca33333 33333333 +g_ddfmt(0) gives 4 bytes: "-1.6" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff99999 99999999 + bca33333 33333334 += -1.5999999999999999 + -1.332267629550188e-16 +ddI[1] = #bff99999 99999999 + bca33333 33333333 += -1.5999999999999999 + -1.3322676295501878e-16 +ddI[1] == strtod + + +Input: 1.7 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.7 = #3ffb3333 33333333 +dd[1] = 4.440892098500625e-17 = #3c899999 99999998 +g_ddfmt(0) gives 3 bytes: "1.7" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ffb3333 33333333 + 3c899999 99999998 += 1.7 + 4.4408920985006252e-17 +ddI[1] = #3ffb3333 33333333 + 3c899999 9999999c += 1.7 + 4.4408920985006276e-17 +ddI[0] == strtod + + +Input: -1.7 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.7 = #bffb3333 33333333 +dd[1] = -4.440892098500625e-17 = #bc899999 99999998 +g_ddfmt(0) gives 4 bytes: "-1.7" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bffb3333 33333333 + bc899999 9999999c += -1.7 + -4.4408920985006276e-17 +ddI[1] = #bffb3333 33333333 + bc899999 99999998 += -1.7 + -4.4408920985006252e-17 +ddI[1] == strtod + + +Input: 1.8 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.7999999999999998 = #3ffccccc cccccccc +dd[1] = 1.7763568394002503e-16 = #3ca99999 99999999 +g_ddfmt(0) gives 34 bytes: "1.79999999999999999999999999999999" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ffccccc cccccccc + 3ca99999 99999999 += 1.7999999999999998 + 1.7763568394002503e-16 +ddI[1] = #3ffccccc cccccccc + 3ca99999 9999999a += 1.7999999999999998 + 1.7763568394002506e-16 +ddI[0] == strtod + + +Input: -1.8 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.7999999999999998 = #bffccccc cccccccc +dd[1] = -1.7763568394002503e-16 = #bca99999 99999999 +g_ddfmt(0) gives 35 bytes: "-1.79999999999999999999999999999999" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bffccccc cccccccc + bca99999 9999999a += -1.7999999999999998 + -1.7763568394002506e-16 +ddI[1] = #bffccccc cccccccc + bca99999 99999999 += -1.7999999999999998 + -1.7763568394002503e-16 +ddI[1] == strtod + + +Input: 1.9 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.9 = #3ffe6666 66666666 +dd[1] = 8.88178419700125e-17 = #3c999999 99999998 +g_ddfmt(0) gives 34 bytes: "1.89999999999999999999999999999998" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ffe6666 66666666 + 3c999999 99999998 += 1.8999999999999999 + 8.8817841970012504e-17 +ddI[1] = #3ffe6666 66666666 + 3c999999 9999999a += 1.8999999999999999 + 8.8817841970012528e-17 +ddI[0] == strtod + + +Input: -1.9 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.9 = #bffe6666 66666666 +dd[1] = -8.88178419700125e-17 = #bc999999 99999998 +g_ddfmt(0) gives 35 bytes: "-1.89999999999999999999999999999998" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bffe6666 66666666 + bc999999 9999999a += -1.8999999999999999 + -8.8817841970012528e-17 +ddI[1] = #bffe6666 66666666 + bc999999 99999998 += -1.8999999999999999 + -8.8817841970012504e-17 +ddI[1] == strtod + +Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest) + +Input: 1.1 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.0999999999999999 = #3ff19999 99999999 +dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333 +g_ddfmt(0) gives 3 bytes: "1.1" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff19999 99999999 + 3ca33333 33333333 += 1.0999999999999999 + 1.3322676295501878e-16 +ddI[1] = #3ff19999 99999999 + 3ca33333 33333334 += 1.0999999999999999 + 1.332267629550188e-16 +ddI[0] == strtod + + +Input: -1.1 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.0999999999999999 = #bff19999 99999999 +dd[1] = -1.3322676295501878e-16 = #bca33333 33333333 +g_ddfmt(0) gives 4 bytes: "-1.1" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff19999 99999999 + bca33333 33333334 += -1.0999999999999999 + -1.332267629550188e-16 +ddI[1] = #bff19999 99999999 + bca33333 33333333 += -1.0999999999999999 + -1.3322676295501878e-16 +ddI[1] == strtod + + +Input: 1.2 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.2 = #3ff33333 33333333 +dd[1] = 4.440892098500625e-17 = #3c899999 99999998 +g_ddfmt(0) gives 3 bytes: "1.2" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff33333 33333333 + 3c899999 99999998 += 1.2 + 4.4408920985006252e-17 +ddI[1] = #3ff33333 33333333 + 3c899999 9999999c += 1.2 + 4.4408920985006276e-17 +ddI[0] == strtod + + +Input: -1.2 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.2 = #bff33333 33333333 +dd[1] = -4.440892098500625e-17 = #bc899999 99999998 +g_ddfmt(0) gives 4 bytes: "-1.2" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff33333 33333333 + bc899999 9999999c += -1.2 + -4.4408920985006276e-17 +ddI[1] = #bff33333 33333333 + bc899999 99999998 += -1.2 + -4.4408920985006252e-17 +ddI[1] == strtod + + +Input: 1.3 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.2999999999999998 = #3ff4cccc cccccccc +dd[1] = 1.7763568394002506e-16 = #3ca99999 9999999a +g_ddfmt(0) gives 3 bytes: "1.3" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ff4cccc cccccccc + 3ca99999 99999999 += 1.2999999999999998 + 1.7763568394002503e-16 +ddI[1] = #3ff4cccc cccccccc + 3ca99999 9999999a += 1.2999999999999998 + 1.7763568394002506e-16 +ddI[1] == strtod + + +Input: -1.3 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.2999999999999998 = #bff4cccc cccccccc +dd[1] = -1.7763568394002506e-16 = #bca99999 9999999a +g_ddfmt(0) gives 4 bytes: "-1.3" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bff4cccc cccccccc + bca99999 9999999a += -1.2999999999999998 + -1.7763568394002506e-16 +ddI[1] = #bff4cccc cccccccc + bca99999 99999999 += -1.2999999999999998 + -1.7763568394002503e-16 +ddI[0] == strtod + + +Input: 1.4 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.4 = #3ff66666 66666666 +dd[1] = 8.881784197001253e-17 = #3c999999 9999999a +g_ddfmt(0) gives 3 bytes: "1.4" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ff66666 66666666 + 3c999999 99999998 += 1.3999999999999999 + 8.8817841970012504e-17 +ddI[1] = #3ff66666 66666666 + 3c999999 9999999a += 1.3999999999999999 + 8.8817841970012528e-17 +ddI[1] == strtod + + +Input: -1.4 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.4 = #bff66666 66666666 +dd[1] = -8.881784197001253e-17 = #bc999999 9999999a +g_ddfmt(0) gives 4 bytes: "-1.4" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bff66666 66666666 + bc999999 9999999a += -1.3999999999999999 + -8.8817841970012528e-17 +ddI[1] = #bff66666 66666666 + bc999999 99999998 += -1.3999999999999999 + -8.8817841970012504e-17 +ddI[0] == strtod + + +Input: 1.5 +strtopdd consumes 3 bytes and returns 1 +dd[0] = 1.5 = #3ff80000 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 3 bytes: "1.5" + +strtoIdd returns 1, consuming 3 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: -1.5 +strtopdd consumes 4 bytes and returns 9 +dd[0] = -1.5 = #bff80000 0 +dd[1] = -0 = #80000000 0 +g_ddfmt(0) gives 3 bytes: "1.5" + +strtoIdd returns 9, consuming 4 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1.6 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.5999999999999999 = #3ff99999 99999999 +dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333 +g_ddfmt(0) gives 3 bytes: "1.6" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff99999 99999999 + 3ca33333 33333333 += 1.5999999999999999 + 1.3322676295501878e-16 +ddI[1] = #3ff99999 99999999 + 3ca33333 33333334 += 1.5999999999999999 + 1.332267629550188e-16 +ddI[0] == strtod + + +Input: -1.6 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.5999999999999999 = #bff99999 99999999 +dd[1] = -1.3322676295501878e-16 = #bca33333 33333333 +g_ddfmt(0) gives 4 bytes: "-1.6" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff99999 99999999 + bca33333 33333334 += -1.5999999999999999 + -1.332267629550188e-16 +ddI[1] = #bff99999 99999999 + bca33333 33333333 += -1.5999999999999999 + -1.3322676295501878e-16 +ddI[1] == strtod + + +Input: 1.7 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.7 = #3ffb3333 33333333 +dd[1] = 4.440892098500625e-17 = #3c899999 99999998 +g_ddfmt(0) gives 3 bytes: "1.7" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ffb3333 33333333 + 3c899999 99999998 += 1.7 + 4.4408920985006252e-17 +ddI[1] = #3ffb3333 33333333 + 3c899999 9999999c += 1.7 + 4.4408920985006276e-17 +ddI[0] == strtod + + +Input: -1.7 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.7 = #bffb3333 33333333 +dd[1] = -4.440892098500625e-17 = #bc899999 99999998 +g_ddfmt(0) gives 4 bytes: "-1.7" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bffb3333 33333333 + bc899999 9999999c += -1.7 + -4.4408920985006276e-17 +ddI[1] = #bffb3333 33333333 + bc899999 99999998 += -1.7 + -4.4408920985006252e-17 +ddI[1] == strtod + + +Input: 1.8 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.7999999999999998 = #3ffccccc cccccccc +dd[1] = 1.7763568394002506e-16 = #3ca99999 9999999a +g_ddfmt(0) gives 3 bytes: "1.8" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ffccccc cccccccc + 3ca99999 99999999 += 1.7999999999999998 + 1.7763568394002503e-16 +ddI[1] = #3ffccccc cccccccc + 3ca99999 9999999a += 1.7999999999999998 + 1.7763568394002506e-16 +ddI[1] == strtod + + +Input: -1.8 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.7999999999999998 = #bffccccc cccccccc +dd[1] = -1.7763568394002506e-16 = #bca99999 9999999a +g_ddfmt(0) gives 4 bytes: "-1.8" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bffccccc cccccccc + bca99999 9999999a += -1.7999999999999998 + -1.7763568394002506e-16 +ddI[1] = #bffccccc cccccccc + bca99999 99999999 += -1.7999999999999998 + -1.7763568394002503e-16 +ddI[0] == strtod + + +Input: 1.9 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.9 = #3ffe6666 66666666 +dd[1] = 8.881784197001253e-17 = #3c999999 9999999a +g_ddfmt(0) gives 3 bytes: "1.9" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ffe6666 66666666 + 3c999999 99999998 += 1.8999999999999999 + 8.8817841970012504e-17 +ddI[1] = #3ffe6666 66666666 + 3c999999 9999999a += 1.8999999999999999 + 8.8817841970012528e-17 +ddI[1] == strtod + + +Input: -1.9 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.9 = #bffe6666 66666666 +dd[1] = -8.881784197001253e-17 = #bc999999 9999999a +g_ddfmt(0) gives 4 bytes: "-1.9" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bffe6666 66666666 + bc999999 9999999a += -1.8999999999999999 + -8.8817841970012528e-17 +ddI[1] = #bffe6666 66666666 + bc999999 99999998 += -1.8999999999999999 + -8.8817841970012504e-17 +ddI[0] == strtod + +Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity) + +Input: 1.1 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.0999999999999999 = #3ff19999 99999999 +dd[1] = 1.332267629550188e-16 = #3ca33333 33333334 +g_ddfmt(0) gives 34 bytes: "1.10000000000000000000000000000002" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff19999 99999999 + 3ca33333 33333333 += 1.0999999999999999 + 1.3322676295501878e-16 +ddI[1] = #3ff19999 99999999 + 3ca33333 33333334 += 1.0999999999999999 + 1.332267629550188e-16 +ddI[1] == strtod + + +Input: -1.1 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.0999999999999999 = #bff19999 99999999 +dd[1] = -1.3322676295501878e-16 = #bca33333 33333333 +g_ddfmt(0) gives 4 bytes: "-1.1" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff19999 99999999 + bca33333 33333334 += -1.0999999999999999 + -1.332267629550188e-16 +ddI[1] = #bff19999 99999999 + bca33333 33333333 += -1.0999999999999999 + -1.3322676295501878e-16 +ddI[1] == strtod + + +Input: 1.2 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.2 = #3ff33333 33333333 +dd[1] = 4.4408920985006276e-17 = #3c899999 9999999c +g_ddfmt(0) gives 34 bytes: "1.20000000000000000000000000000001" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff33333 33333333 + 3c899999 99999998 += 1.2 + 4.4408920985006252e-17 +ddI[1] = #3ff33333 33333333 + 3c899999 9999999c += 1.2 + 4.4408920985006276e-17 +ddI[1] == strtod + + +Input: -1.2 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.2 = #bff33333 33333333 +dd[1] = -4.440892098500625e-17 = #bc899999 99999998 +g_ddfmt(0) gives 4 bytes: "-1.2" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff33333 33333333 + bc899999 9999999c += -1.2 + -4.4408920985006276e-17 +ddI[1] = #bff33333 33333333 + bc899999 99999998 += -1.2 + -4.4408920985006252e-17 +ddI[1] == strtod + + +Input: 1.3 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.2999999999999998 = #3ff4cccc cccccccc +dd[1] = 1.7763568394002506e-16 = #3ca99999 9999999a +g_ddfmt(0) gives 3 bytes: "1.3" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ff4cccc cccccccc + 3ca99999 99999999 += 1.2999999999999998 + 1.7763568394002503e-16 +ddI[1] = #3ff4cccc cccccccc + 3ca99999 9999999a += 1.2999999999999998 + 1.7763568394002506e-16 +ddI[1] == strtod + + +Input: -1.3 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.2999999999999998 = #bff4cccc cccccccc +dd[1] = -1.7763568394002503e-16 = #bca99999 99999999 +g_ddfmt(0) gives 35 bytes: "-1.29999999999999999999999999999999" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bff4cccc cccccccc + bca99999 9999999a += -1.2999999999999998 + -1.7763568394002506e-16 +ddI[1] = #bff4cccc cccccccc + bca99999 99999999 += -1.2999999999999998 + -1.7763568394002503e-16 +ddI[1] == strtod + + +Input: 1.4 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.4 = #3ff66666 66666666 +dd[1] = 8.881784197001253e-17 = #3c999999 9999999a +g_ddfmt(0) gives 3 bytes: "1.4" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ff66666 66666666 + 3c999999 99999998 += 1.3999999999999999 + 8.8817841970012504e-17 +ddI[1] = #3ff66666 66666666 + 3c999999 9999999a += 1.3999999999999999 + 8.8817841970012528e-17 +ddI[1] == strtod + + +Input: -1.4 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.4 = #bff66666 66666666 +dd[1] = -8.88178419700125e-17 = #bc999999 99999998 +g_ddfmt(0) gives 35 bytes: "-1.39999999999999999999999999999998" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bff66666 66666666 + bc999999 9999999a += -1.3999999999999999 + -8.8817841970012528e-17 +ddI[1] = #bff66666 66666666 + bc999999 99999998 += -1.3999999999999999 + -8.8817841970012504e-17 +ddI[1] == strtod + + +Input: 1.5 +strtopdd consumes 3 bytes and returns 1 +dd[0] = 1.5 = #3ff80000 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 3 bytes: "1.5" + +strtoIdd returns 1, consuming 3 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: -1.5 +strtopdd consumes 4 bytes and returns 9 +dd[0] = -1.5 = #bff80000 0 +dd[1] = -0 = #80000000 0 +g_ddfmt(0) gives 3 bytes: "1.5" + +strtoIdd returns 9, consuming 4 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1.6 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.5999999999999999 = #3ff99999 99999999 +dd[1] = 1.332267629550188e-16 = #3ca33333 33333334 +g_ddfmt(0) gives 34 bytes: "1.60000000000000000000000000000002" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff99999 99999999 + 3ca33333 33333333 += 1.5999999999999999 + 1.3322676295501878e-16 +ddI[1] = #3ff99999 99999999 + 3ca33333 33333334 += 1.5999999999999999 + 1.332267629550188e-16 +ddI[1] == strtod + + +Input: -1.6 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.5999999999999999 = #bff99999 99999999 +dd[1] = -1.3322676295501878e-16 = #bca33333 33333333 +g_ddfmt(0) gives 4 bytes: "-1.6" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff99999 99999999 + bca33333 33333334 += -1.5999999999999999 + -1.332267629550188e-16 +ddI[1] = #bff99999 99999999 + bca33333 33333333 += -1.5999999999999999 + -1.3322676295501878e-16 +ddI[1] == strtod + + +Input: 1.7 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.7 = #3ffb3333 33333333 +dd[1] = 4.4408920985006276e-17 = #3c899999 9999999c +g_ddfmt(0) gives 34 bytes: "1.70000000000000000000000000000001" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ffb3333 33333333 + 3c899999 99999998 += 1.7 + 4.4408920985006252e-17 +ddI[1] = #3ffb3333 33333333 + 3c899999 9999999c += 1.7 + 4.4408920985006276e-17 +ddI[1] == strtod + + +Input: -1.7 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.7 = #bffb3333 33333333 +dd[1] = -4.440892098500625e-17 = #bc899999 99999998 +g_ddfmt(0) gives 4 bytes: "-1.7" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bffb3333 33333333 + bc899999 9999999c += -1.7 + -4.4408920985006276e-17 +ddI[1] = #bffb3333 33333333 + bc899999 99999998 += -1.7 + -4.4408920985006252e-17 +ddI[1] == strtod + + +Input: 1.8 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.7999999999999998 = #3ffccccc cccccccc +dd[1] = 1.7763568394002506e-16 = #3ca99999 9999999a +g_ddfmt(0) gives 3 bytes: "1.8" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ffccccc cccccccc + 3ca99999 99999999 += 1.7999999999999998 + 1.7763568394002503e-16 +ddI[1] = #3ffccccc cccccccc + 3ca99999 9999999a += 1.7999999999999998 + 1.7763568394002506e-16 +ddI[1] == strtod + + +Input: -1.8 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.7999999999999998 = #bffccccc cccccccc +dd[1] = -1.7763568394002503e-16 = #bca99999 99999999 +g_ddfmt(0) gives 35 bytes: "-1.79999999999999999999999999999999" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bffccccc cccccccc + bca99999 9999999a += -1.7999999999999998 + -1.7763568394002506e-16 +ddI[1] = #bffccccc cccccccc + bca99999 99999999 += -1.7999999999999998 + -1.7763568394002503e-16 +ddI[1] == strtod + + +Input: 1.9 +strtopdd consumes 3 bytes and returns 33 +dd[0] = 1.9 = #3ffe6666 66666666 +dd[1] = 8.881784197001253e-17 = #3c999999 9999999a +g_ddfmt(0) gives 3 bytes: "1.9" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ffe6666 66666666 + 3c999999 99999998 += 1.8999999999999999 + 8.8817841970012504e-17 +ddI[1] = #3ffe6666 66666666 + 3c999999 9999999a += 1.8999999999999999 + 8.8817841970012528e-17 +ddI[1] == strtod + + +Input: -1.9 +strtopdd consumes 4 bytes and returns 25 +dd[0] = -1.9 = #bffe6666 66666666 +dd[1] = -8.88178419700125e-17 = #bc999999 99999998 +g_ddfmt(0) gives 35 bytes: "-1.89999999999999999999999999999998" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bffe6666 66666666 + bc999999 9999999a += -1.8999999999999999 + -8.8817841970012528e-17 +ddI[1] = #bffe6666 66666666 + bc999999 99999998 += -1.8999999999999999 + -8.8817841970012504e-17 +ddI[1] == strtod + +Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity) + +Input: 1.1 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.0999999999999999 = #3ff19999 99999999 +dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333 +g_ddfmt(0) gives 3 bytes: "1.1" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff19999 99999999 + 3ca33333 33333333 += 1.0999999999999999 + 1.3322676295501878e-16 +ddI[1] = #3ff19999 99999999 + 3ca33333 33333334 += 1.0999999999999999 + 1.332267629550188e-16 +ddI[0] == strtod + + +Input: -1.1 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.0999999999999999 = #bff19999 99999999 +dd[1] = -1.332267629550188e-16 = #bca33333 33333334 +g_ddfmt(0) gives 35 bytes: "-1.10000000000000000000000000000002" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff19999 99999999 + bca33333 33333334 += -1.0999999999999999 + -1.332267629550188e-16 +ddI[1] = #bff19999 99999999 + bca33333 33333333 += -1.0999999999999999 + -1.3322676295501878e-16 +ddI[0] == strtod + + +Input: 1.2 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.2 = #3ff33333 33333333 +dd[1] = 4.440892098500625e-17 = #3c899999 99999998 +g_ddfmt(0) gives 3 bytes: "1.2" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff33333 33333333 + 3c899999 99999998 += 1.2 + 4.4408920985006252e-17 +ddI[1] = #3ff33333 33333333 + 3c899999 9999999c += 1.2 + 4.4408920985006276e-17 +ddI[0] == strtod + + +Input: -1.2 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.2 = #bff33333 33333333 +dd[1] = -4.4408920985006276e-17 = #bc899999 9999999c +g_ddfmt(0) gives 35 bytes: "-1.20000000000000000000000000000001" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff33333 33333333 + bc899999 9999999c += -1.2 + -4.4408920985006276e-17 +ddI[1] = #bff33333 33333333 + bc899999 99999998 += -1.2 + -4.4408920985006252e-17 +ddI[0] == strtod + + +Input: 1.3 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.2999999999999998 = #3ff4cccc cccccccc +dd[1] = 1.7763568394002503e-16 = #3ca99999 99999999 +g_ddfmt(0) gives 34 bytes: "1.29999999999999999999999999999999" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ff4cccc cccccccc + 3ca99999 99999999 += 1.2999999999999998 + 1.7763568394002503e-16 +ddI[1] = #3ff4cccc cccccccc + 3ca99999 9999999a += 1.2999999999999998 + 1.7763568394002506e-16 +ddI[0] == strtod + + +Input: -1.3 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.2999999999999998 = #bff4cccc cccccccc +dd[1] = -1.7763568394002506e-16 = #bca99999 9999999a +g_ddfmt(0) gives 4 bytes: "-1.3" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bff4cccc cccccccc + bca99999 9999999a += -1.2999999999999998 + -1.7763568394002506e-16 +ddI[1] = #bff4cccc cccccccc + bca99999 99999999 += -1.2999999999999998 + -1.7763568394002503e-16 +ddI[0] == strtod + + +Input: 1.4 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.4 = #3ff66666 66666666 +dd[1] = 8.88178419700125e-17 = #3c999999 99999998 +g_ddfmt(0) gives 34 bytes: "1.39999999999999999999999999999998" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ff66666 66666666 + 3c999999 99999998 += 1.3999999999999999 + 8.8817841970012504e-17 +ddI[1] = #3ff66666 66666666 + 3c999999 9999999a += 1.3999999999999999 + 8.8817841970012528e-17 +ddI[0] == strtod + + +Input: -1.4 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.4 = #bff66666 66666666 +dd[1] = -8.881784197001253e-17 = #bc999999 9999999a +g_ddfmt(0) gives 4 bytes: "-1.4" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bff66666 66666666 + bc999999 9999999a += -1.3999999999999999 + -8.8817841970012528e-17 +ddI[1] = #bff66666 66666666 + bc999999 99999998 += -1.3999999999999999 + -8.8817841970012504e-17 +ddI[0] == strtod + + +Input: 1.5 +strtopdd consumes 3 bytes and returns 1 +dd[0] = 1.5 = #3ff80000 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 3 bytes: "1.5" + +strtoIdd returns 1, consuming 3 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: -1.5 +strtopdd consumes 4 bytes and returns 9 +dd[0] = -1.5 = #bff80000 0 +dd[1] = -0 = #80000000 0 +g_ddfmt(0) gives 3 bytes: "1.5" + +strtoIdd returns 9, consuming 4 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1.6 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.5999999999999999 = #3ff99999 99999999 +dd[1] = 1.3322676295501878e-16 = #3ca33333 33333333 +g_ddfmt(0) gives 3 bytes: "1.6" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ff99999 99999999 + 3ca33333 33333333 += 1.5999999999999999 + 1.3322676295501878e-16 +ddI[1] = #3ff99999 99999999 + 3ca33333 33333334 += 1.5999999999999999 + 1.332267629550188e-16 +ddI[0] == strtod + + +Input: -1.6 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.5999999999999999 = #bff99999 99999999 +dd[1] = -1.332267629550188e-16 = #bca33333 33333334 +g_ddfmt(0) gives 35 bytes: "-1.60000000000000000000000000000002" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bff99999 99999999 + bca33333 33333334 += -1.5999999999999999 + -1.332267629550188e-16 +ddI[1] = #bff99999 99999999 + bca33333 33333333 += -1.5999999999999999 + -1.3322676295501878e-16 +ddI[0] == strtod + + +Input: 1.7 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.7 = #3ffb3333 33333333 +dd[1] = 4.440892098500625e-17 = #3c899999 99999998 +g_ddfmt(0) gives 3 bytes: "1.7" + +strtoIdd returns 17, consuming 3 bytes. +ddI[0] = #3ffb3333 33333333 + 3c899999 99999998 += 1.7 + 4.4408920985006252e-17 +ddI[1] = #3ffb3333 33333333 + 3c899999 9999999c += 1.7 + 4.4408920985006276e-17 +ddI[0] == strtod + + +Input: -1.7 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.7 = #bffb3333 33333333 +dd[1] = -4.4408920985006276e-17 = #bc899999 9999999c +g_ddfmt(0) gives 35 bytes: "-1.70000000000000000000000000000001" + +strtoIdd returns 25, consuming 4 bytes. +ddI[0] = #bffb3333 33333333 + bc899999 9999999c += -1.7 + -4.4408920985006276e-17 +ddI[1] = #bffb3333 33333333 + bc899999 99999998 += -1.7 + -4.4408920985006252e-17 +ddI[0] == strtod + + +Input: 1.8 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.7999999999999998 = #3ffccccc cccccccc +dd[1] = 1.7763568394002503e-16 = #3ca99999 99999999 +g_ddfmt(0) gives 34 bytes: "1.79999999999999999999999999999999" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ffccccc cccccccc + 3ca99999 99999999 += 1.7999999999999998 + 1.7763568394002503e-16 +ddI[1] = #3ffccccc cccccccc + 3ca99999 9999999a += 1.7999999999999998 + 1.7763568394002506e-16 +ddI[0] == strtod + + +Input: -1.8 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.7999999999999998 = #bffccccc cccccccc +dd[1] = -1.7763568394002506e-16 = #bca99999 9999999a +g_ddfmt(0) gives 4 bytes: "-1.8" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bffccccc cccccccc + bca99999 9999999a += -1.7999999999999998 + -1.7763568394002506e-16 +ddI[1] = #bffccccc cccccccc + bca99999 99999999 += -1.7999999999999998 + -1.7763568394002503e-16 +ddI[0] == strtod + + +Input: 1.9 +strtopdd consumes 3 bytes and returns 17 +dd[0] = 1.9 = #3ffe6666 66666666 +dd[1] = 8.88178419700125e-17 = #3c999999 99999998 +g_ddfmt(0) gives 34 bytes: "1.89999999999999999999999999999998" + +strtoIdd returns 33, consuming 3 bytes. +ddI[0] = #3ffe6666 66666666 + 3c999999 99999998 += 1.8999999999999999 + 8.8817841970012504e-17 +ddI[1] = #3ffe6666 66666666 + 3c999999 9999999a += 1.8999999999999999 + 8.8817841970012528e-17 +ddI[0] == strtod + + +Input: -1.9 +strtopdd consumes 4 bytes and returns 41 +dd[0] = -1.9 = #bffe6666 66666666 +dd[1] = -8.881784197001253e-17 = #bc999999 9999999a +g_ddfmt(0) gives 4 bytes: "-1.9" + +strtoIdd returns 41, consuming 4 bytes. +ddI[0] = #bffe6666 66666666 + bc999999 9999999a += -1.8999999999999999 + -8.8817841970012528e-17 +ddI[1] = #bffe6666 66666666 + bc999999 99999998 += -1.8999999999999999 + -8.8817841970012504e-17 +ddI[0] == strtod + diff -Nru mlton-20130715/runtime/gdtoa/test/ddsi.out mlton-20210117+dfsg/runtime/gdtoa/test/ddsi.out --- mlton-20130715/runtime/gdtoa/test/ddsi.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/ddsi.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,392 @@ + +Input: 1.23 +strtopdd consumes 4 bytes and returns 17 +dd[0] = 1.23 = #3ff3ae14 7ae147ae +dd[1] = 1.7763568394002496e-17 = #3c747ae1 47ae1478 +g_ddfmt(0) gives 4 bytes: "1.23" + +strtoIdd returns 17, consuming 4 bytes. +ddI[0] = #3ff3ae14 7ae147ae + 3c747ae1 47ae1478 += 1.23 + 1.7763568394002496e-17 +ddI[1] = #3ff3ae14 7ae147ae + 3c747ae1 47ae1480 += 1.23 + 1.776356839400252e-17 +ddI[0] == strtod + + +Input: 1.23e+20 +strtopdd consumes 8 bytes and returns 1 +dd[0] = 1.23e+20 = #441aabdf 2145b430 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 8 bytes: "1.23e+20" + +strtoIdd returns 1, consuming 8 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1.23e-20 +strtopdd consumes 8 bytes and returns 33 +dd[0] = 1.2299999999999999e-20 = #3bcd0ae4 cf767530 +dd[1] = 9.304023318521521e-37 = #3873c997 955b2691 +g_ddfmt(0) gives 8 bytes: "1.23e-20" + +strtoIdd returns 33, consuming 8 bytes. +ddI[0] = #3bcd0ae4 cf767530 + 3873c997 955b2690 += 1.2299999999999999e-20 + 9.3040233185215194e-37 +ddI[1] = #3bcd0ae4 cf767530 + 3873c997 955b2691 += 1.2299999999999999e-20 + 9.3040233185215211e-37 +ddI[1] == strtod + + +Input: 1.23456789 +strtopdd consumes 10 bytes and returns 17 +dd[0] = 1.23456789 = #3ff3c0ca 4283de1b +dd[1] = 1.0990618193318369e-16 = #3c9fada5 144c1252 +g_ddfmt(0) gives 10 bytes: "1.23456789" + +strtoIdd returns 17, consuming 10 bytes. +ddI[0] = #3ff3c0ca 4283de1b + 3c9fada5 144c1252 += 1.2345678899999999 + 1.0990618193318369e-16 +ddI[1] = #3ff3c0ca 4283de1b + 3c9fada5 144c1254 += 1.2345678899999999 + 1.0990618193318371e-16 +ddI[0] == strtod + + +Input: 1.23456589e+20 +strtopdd consumes 14 bytes and returns 1 +dd[0] = 1.23456589e+20 = #441ac537 a660b997 +dd[1] = 4096 = #40b00000 0 +g_ddfmt(0) gives 14 bytes: "1.23456589e+20" + +strtoIdd returns 1, consuming 14 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1.23e+30 +strtopdd consumes 8 bytes and returns 1 +dd[0] = 1.23e+30 = #462f0cb0 4e8fb790 +dd[1] = 40281156091904 = #42c25158 0 +g_ddfmt(0) gives 8 bytes: "1.23e+30" + +strtoIdd returns 1, consuming 8 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1.23e-30 +strtopdd consumes 8 bytes and returns 17 +dd[0] = 1.2299999999999999e-30 = #39b8f286 6f5010aa +dd[1] = 1.076909723013918e-46 = #3663ac7f 3dafd174 +g_ddfmt(0) gives 8 bytes: "1.23e-30" + +strtoIdd returns 17, consuming 8 bytes. +ddI[0] = #39b8f286 6f5010aa + 3663ac7f 3dafd174 += 1.2299999999999999e-30 + 1.076909723013918e-46 +ddI[1] = #39b8f286 6f5010aa + 3663ac7f 3dafd175 += 1.2299999999999999e-30 + 1.0769097230139181e-46 +ddI[0] == strtod + + +Input: 1.23456789e-20 +strtopdd consumes 14 bytes and returns 17 +dd[0] = 1.23456789e-20 = #3bcd2681 471e7ada +dd[1] = 6.247111971663133e-37 = #386a9280 a761b07e +g_ddfmt(0) gives 14 bytes: "1.23456789e-20" + +strtoIdd returns 17, consuming 14 bytes. +ddI[0] = #3bcd2681 471e7ada + 386a9280 a761b07e += 1.2345678899999999e-20 + 6.2471119716631328e-37 +ddI[1] = #3bcd2681 471e7ada + 386a9280 a761b080 += 1.2345678899999999e-20 + 6.2471119716631345e-37 +ddI[0] == strtod + + +Input: 1.23456789e-30 +strtopdd consumes 14 bytes and returns 33 +dd[0] = 1.23456789e-30 = #39b90a3e 33bbd995 +dd[1] = 2.1567930523648577e-47 = #363f8585 55a6b1a0 +g_ddfmt(0) gives 14 bytes: "1.23456789e-30" + +strtoIdd returns 33, consuming 14 bytes. +ddI[0] = #39b90a3e 33bbd995 + 363f8585 55a6b198 += 1.23456789e-30 + 2.1567930523648558e-47 +ddI[1] = #39b90a3e 33bbd995 + 363f8585 55a6b1a0 += 1.23456789e-30 + 2.1567930523648577e-47 +ddI[1] == strtod + + +Input: 1.234567890123456789 +strtopdd consumes 20 bytes and returns 33 +dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb +dd[1] = 9.856786452588859e-17 = #3c9c6906 51a3745e +g_ddfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIdd returns 33, consuming 20 bytes. +ddI[0] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745c += 1.2345678901234567 + 9.8567864525888563e-17 +ddI[1] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745e += 1.2345678901234567 + 9.8567864525888588e-17 +ddI[1] == strtod + + +Input: 1.23456789012345678901234567890123456789 +strtopdd consumes 40 bytes and returns 33 +dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb +dd[1] = 9.858021020478982e-17 = #3c9c69ef 85adadb6 +g_ddfmt(0) gives 34 bytes: "1.23456789012345678901234567890124" + +strtoIdd returns 33, consuming 40 bytes. +ddI[0] = #3ff3c0ca 428c59fb + 3c9c69ef 85adadb4 += 1.2345678901234567 + 9.8580210204789798e-17 +ddI[1] = #3ff3c0ca 428c59fb + 3c9c69ef 85adadb6 += 1.2345678901234567 + 9.8580210204789823e-17 +ddI[1] == strtod + + +Input: 1.23e306 +strtopdd consumes 8 bytes and returns 33 +dd[0] = 1.2299999999999999e+306 = #7f7c0676 cd1c61f4 +dd[1] = 1.3319001448659015e+290 = #7c2b558b e3d3f477 +g_ddfmt(0) gives 9 bytes: "1.23e+306" + +strtoIdd returns 33, consuming 8 bytes. +ddI[0] = #7f7c0676 cd1c61f4 + 7c2b558b e3d3f476 += 1.2299999999999999e+306 + 1.3319001448659013e+290 +ddI[1] = #7f7c0676 cd1c61f4 + 7c2b558b e3d3f477 += 1.2299999999999999e+306 + 1.3319001448659015e+290 +ddI[1] == strtod + + +Input: 1.23e-306 +strtopdd consumes 9 bytes and returns 80 +dd[0] = 0 = #0 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 1 bytes: "0" + +strtoIdd returns 80, consuming 9 bytes. +ddI[0] = #0 0 + 0 0 += 0 + 0 +ddI[1] = #6a00000 0 + 0 0 += 9.0259718793241479e-277 + 0 +ddI[0] == strtod + + +Input: 1.23e-320 +strtopdd consumes 9 bytes and returns 80 +dd[0] = 0 = #0 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 1 bytes: "0" + +strtoIdd returns 80, consuming 9 bytes. +ddI[0] = #0 0 + 0 0 += 0 + 0 +ddI[1] = #6a00000 0 + 0 0 += 9.0259718793241479e-277 + 0 +ddI[0] == strtod + + +Input: 1.23e-20 +strtopdd consumes 8 bytes and returns 33 +dd[0] = 1.2299999999999999e-20 = #3bcd0ae4 cf767530 +dd[1] = 9.304023318521521e-37 = #3873c997 955b2691 +g_ddfmt(0) gives 8 bytes: "1.23e-20" + +strtoIdd returns 33, consuming 8 bytes. +ddI[0] = #3bcd0ae4 cf767530 + 3873c997 955b2690 += 1.2299999999999999e-20 + 9.3040233185215194e-37 +ddI[1] = #3bcd0ae4 cf767530 + 3873c997 955b2691 += 1.2299999999999999e-20 + 9.3040233185215211e-37 +ddI[1] == strtod + + +Input: 1.23456789e307 +strtopdd consumes 14 bytes and returns 33 +dd[0] = 1.2345678899999998e+307 = #7fb194b1 4bdaecdb +dd[1] = 2.0137933598720243e+291 = #7c69d48d 192048ca +g_ddfmt(0) gives 15 bytes: "1.23456789e+307" + +strtoIdd returns 33, consuming 14 bytes. +ddI[0] = #7fb194b1 4bdaecdb + 7c69d48d 192048c9 += 1.2345678899999998e+307 + 2.013793359872024e+291 +ddI[1] = #7fb194b1 4bdaecdb + 7c69d48d 192048ca += 1.2345678899999998e+307 + 2.0137933598720243e+291 +ddI[1] == strtod + + +Input: 1.23456589e-307 +strtopdd consumes 15 bytes and returns 80 +dd[0] = 0 = #0 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 1 bytes: "0" + +strtoIdd returns 80, consuming 15 bytes. +ddI[0] = #0 0 + 0 0 += 0 + 0 +ddI[1] = #6a00000 0 + 0 0 += 9.0259718793241479e-277 + 0 +ddI[0] == strtod + + +Input: 1.234567890123456789 +strtopdd consumes 20 bytes and returns 33 +dd[0] = 1.2345678901234567 = #3ff3c0ca 428c59fb +dd[1] = 9.856786452588859e-17 = #3c9c6906 51a3745e +g_ddfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIdd returns 33, consuming 20 bytes. +ddI[0] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745c += 1.2345678901234567 + 9.8567864525888563e-17 +ddI[1] = #3ff3c0ca 428c59fb + 3c9c6906 51a3745e += 1.2345678901234567 + 9.8567864525888588e-17 +ddI[1] == strtod + + +Input: 1.234567890123456789e301 +strtopdd consumes 24 bytes and returns 33 +dd[0] = 1.2345678901234568e+301 = #7e726f51 75f56413 +dd[1] = 1.3892003943918827e+283 = #7ab7ea80 76399100 +g_ddfmt(0) gives 25 bytes: "1.234567890123456789e+301" + +strtoIdd returns 33, consuming 24 bytes. +ddI[0] = #7e726f51 75f56413 + 7ab7ea80 76399080 += 1.2345678901234568e+301 + 1.3892003943918563e+283 +ddI[1] = #7e726f51 75f56413 + 7ab7ea80 76399100 += 1.2345678901234568e+301 + 1.3892003943918827e+283 +ddI[1] == strtod + + +Input: 1.234567890123456789e-301 +strtopdd consumes 25 bytes and returns 80 +dd[0] = 0 = #0 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 1 bytes: "0" + +strtoIdd returns 80, consuming 25 bytes. +ddI[0] = #0 0 + 0 0 += 0 + 0 +ddI[1] = #6a00000 0 + 0 0 += 9.0259718793241479e-277 + 0 +ddI[0] == strtod + + +Input: 1.234567890123456789e-321 +strtopdd consumes 25 bytes and returns 80 +dd[0] = 0 = #0 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 1 bytes: "0" + +strtoIdd returns 80, consuming 25 bytes. +ddI[0] = #0 0 + 0 0 += 0 + 0 +ddI[1] = #6a00000 0 + 0 0 += 9.0259718793241479e-277 + 0 +ddI[0] == strtod + + +Input: 1e23 +strtopdd consumes 4 bytes and returns 1 +dd[0] = 1e+23 = #44b52d02 c7e14af6 +dd[1] = 8388608 = #41600000 0 +g_ddfmt(0) gives 5 bytes: "1e+23" + +strtoIdd returns 1, consuming 4 bytes. +ddI[0] == ddI[1] == strtopdd + + +Input: 1e310 +strtopdd consumes 5 bytes and returns 163 +dd[0] = Infinity = #7ff00000 0 +dd[1] = Infinity = #7ff00000 0 +g_ddfmt(0) gives 8 bytes: "Infinity" + +strtoIdd returns 163, consuming 5 bytes. +ddI[0] = #7fefffff ffffffff + 7c9fffff ffffffff += 1.7976931348623157e+308 + 1.9958403095347196e+292 +ddI[1] = #7ff00000 0 + 7ff00000 0 += Infinity + Infinity +ddI[1] == strtod +g_ddfmt_p(...,0): "Infinity" +g_ddfmt_p(...,1): "Infinity" +g_ddfmt_p(...,2): "Infinity" +g_ddfmt_p(...,3): "Infinity" +g_ddfmt_p(...,4): "Infinity" +g_ddfmt_p(...,5): "Infinity" + + +Input: 9.0259718793241475e-277 +strtopdd consumes 23 bytes and returns 80 +dd[0] = 0 = #0 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 1 bytes: "0" + +strtoIdd returns 80, consuming 23 bytes. +ddI[0] = #0 0 + 0 0 += 0 + 0 +ddI[1] = #6a00000 0 + 0 0 += 9.0259718793241479e-277 + 0 +ddI[0] == strtod + + +Input: 9.025971879324147880346310405869e-277 +strtopdd consumes 37 bytes and returns 17 +dd[0] = 9.025971879324148e-277 = #6a00000 0 +dd[1] = 2.2250738585072014e-308 = #100000 0 +g_ddfmt(0) gives 37 bytes: "9.025971879324147880346310405869e-277" + +strtoIdd returns 17, consuming 37 bytes. +ddI[0] = #6a00000 0 + 100000 0 += 9.0259718793241479e-277 + 2.2250738585072014e-308 +ddI[1] = #6a00000 0 + 200000 0 += 9.0259718793241479e-277 + 4.4501477170144028e-308 +ddI[0] == strtod + + +Input: 9.025971879324147880346310405868e-277 +strtopdd consumes 37 bytes and returns 80 +dd[0] = 0 = #0 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 1 bytes: "0" + +strtoIdd returns 80, consuming 37 bytes. +ddI[0] = #0 0 + 0 0 += 0 + 0 +ddI[1] = #6a00000 0 + 0 0 += 9.0259718793241479e-277 + 0 +ddI[0] == strtod + + +Input: 2.2250738585072014e-308 +strtopdd consumes 23 bytes and returns 80 +dd[0] = 0 = #0 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 1 bytes: "0" + +strtoIdd returns 80, consuming 23 bytes. +ddI[0] = #0 0 + 0 0 += 0 + 0 +ddI[1] = #6a00000 0 + 0 0 += 9.0259718793241479e-277 + 0 +ddI[0] == strtod + + +Input: 2.2250738585072013e-308 +strtopdd consumes 23 bytes and returns 80 +dd[0] = 0 = #0 0 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 1 bytes: "0" + +strtoIdd returns 80, consuming 23 bytes. +ddI[0] = #0 0 + 0 0 += 0 + 0 +ddI[1] = #6a00000 0 + 0 0 += 9.0259718793241479e-277 + 0 +ddI[0] == strtod + + +Input: 3.2649476e14 +strtopdd consumes 12 bytes and returns 1 +dd[0] = 3.2649476e+14 = #42f28f1f c30da000 +dd[1] = 0 = #0 0 +g_ddfmt(0) gives 13 bytes: "3.2649476e+14" + +strtoIdd returns 1, consuming 12 bytes. +ddI[0] == ddI[1] == strtopdd + diff -Nru mlton-20130715/runtime/gdtoa/test/ddtest.c mlton-20210117+dfsg/runtime/gdtoa/test/ddtest.c --- mlton-20130715/runtime/gdtoa/test/ddtest.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/ddtest.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,196 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998-2001 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* Test program for g_ddfmt, strtoIdd, strtopdd, and strtordd. + * + * Inputs (on stdin): + * r rounding_mode + * n ndig + * number + * #hex0 hex1 hex2 hex3 + * + * rounding_mode values: + * 0 = toward zero + * 1 = nearest + * 2 = toward +Infinity + * 3 = toward -Infinity + * + * where number is a decimal floating-point number, + * hex0 is a string of <= 8 Hex digits for the most significant + * word of the number, hex1 is a similar string for the next + * word, etc., and ndig is a parameters to g_ddfmt. + */ + +#include "gdtoaimp.h" +#include +#include + + extern int getround ANSI((int,char*)); + + static char ibuf[2048], obuf[1024], obuf1[2048]; + +#define UL (unsigned long) + + static void +#ifdef KR_headers +dprint(what, d) char *what; double d; +#else +dprint(char *what, double d) +#endif +{ + U u; + char buf[32]; + + u.d = d; + g_dfmt(buf,&d,0,sizeof(buf)); + printf("%s = %s = #%lx %lx\n", what, buf, UL u.L[_0], UL u.L[_1]); + } + + int +main(Void) +{ + U ddI[4], u[2]; + char *s, *s1, *se, *se1; + int dItry, i, j, nik, nike, r = 1, ndig = 0; + long LL[4]; + + while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) { + while(*s <= ' ') + if (!*s++) + continue; + dItry = 0; + switch(*s) { + case 'r': + r = getround(r, s); + continue; + case 'n': + i = s[1]; + if (i <= ' ' || (i >= '0' && i <= '9')) { + ndig = atoi(s+1); + continue; + } + break; /* nan? */ + case '#': + LL[0] = u[0].L[_0]; + LL[1] = u[0].L[_1]; + LL[2] = u[1].L[_0]; + LL[3] = u[1].L[_1]; + sscanf(s+1, "%lx %lx %lx %lx", &LL[0], &LL[1], + &LL[2], &LL[3]); + u[0].L[_0] = LL[0]; + u[0].L[_1] = LL[1]; + u[1].L[_0] = LL[2]; + u[1].L[_1] = LL[3]; + printf("\nInput: %s", ibuf); + printf(" --> f = #%lx %lx %lx %lx\n", + LL[0],LL[1],LL[2],LL[3]); + i = 0; + goto fmt_test; + } + printf("\nInput: %s", ibuf); + for(s1 = s; *s1 > ' '; s1++){}; + while(*s1 <= ' ' && *s1) s1++; + if (!*s1) { + dItry = 1; + i = strtordd(ibuf, &se, r, &u[0].d); + if (r == 1) { + j = strtopdd(ibuf, &se1, &ddI[0].d); + if (i != j || u[0].d != ddI[0].d + || u[1].d != ddI[1].d || se != se1) + printf("***strtopdd and strtordd disagree!!\n:"); + } + printf("strtopdd consumes %d bytes and returns %d\n", + (int)(se-ibuf), i); + } + else { + u[0].d = strtod(s, &se); + u[1].d = strtod(se, &se); + } + fmt_test: + dprint("dd[0]", u[0].d); + dprint("dd[1]", u[1].d); + se = g_ddfmt(obuf, &u[0].d, ndig, sizeof(obuf)); + printf("g_ddfmt(%d) gives %d bytes: \"%s\"\n\n", + ndig, (int)(se-obuf), se ? obuf : ""); + se1 = g_ddfmt_p(obuf1, &u[0].d, ndig, sizeof(obuf1), 0); + if (se1 - obuf1 != se - obuf || strcmp(obuf, obuf1)) + printf("Botch: g_ddfmt_p gives \"%s\" rather than \"%s\"\n", + obuf1, obuf); + if (!dItry) + continue; + printf("strtoIdd returns %d,", strtoIdd(ibuf, &se, &ddI[0].d, &ddI[2].d)); + printf(" consuming %d bytes.\n", (int)(se-ibuf)); + if (ddI[0].d == ddI[2].d && ddI[1].d == ddI[3].d) { + if (ddI[0].d == u[0].d && ddI[1].d == u[1].d) + printf("ddI[0] == ddI[1] == strtopdd\n"); + else + printf("ddI[0] == ddI[1] = #%lx %lx + %lx %lx\n= %.17g + %17.g\n", + UL ddI[0].L[_0], + UL ddI[0].L[_1], + UL ddI[1].L[_0], + UL ddI[1].L[_1], + ddI[0].d, ddI[1].d); + } + else { + printf("ddI[0] = #%lx %lx + %lx %lx\n= %.17g + %.17g\n", + UL ddI[0].L[_0], UL ddI[0].L[_1], + UL ddI[1].L[_0],UL ddI[1].L[_1], + ddI[0].d, ddI[1].d); + printf("ddI[1] = #%lx %lx + %lx %lx\n= %.17g + %.17g\n", + UL ddI[2].L[_0], UL ddI[2].L[_1], + UL ddI[3].L[_0],UL ddI[3].L[_1], + ddI[2].d, ddI[3].d); + if (ddI[0].d == u[0].d && ddI[1].d == u[1].d) + printf("ddI[0] == strtod\n"); + else if (ddI[2].d == u[0].d && ddI[3].d == u[1].d) + printf("ddI[1] == strtod\n"); + else + printf("**** Both differ from strtopdd ****\n"); + } + switch(i & STRTOG_Retmask) { + case STRTOG_Infinite: + for(nik = 0; nik < 6; ++nik) { + se1 = g_ddfmt_p(obuf1, &u[0].d, ndig, sizeof(obuf1), nik); + printf("g_ddfmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + break; + case STRTOG_NaN: + case STRTOG_NaNbits: + for(i = 0; i < 3; ++i) + for(nik = 6*i, nike = nik + 3; nik < nike; ++nik) { + se1 = g_ddfmt_p(obuf1, &u[0].d, ndig, sizeof(obuf1), nik); + printf("g_ddfmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + } + printf("\n"); + } + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/test/dI.out mlton-20210117+dfsg/runtime/gdtoa/test/dI.out --- mlton-20130715/runtime/gdtoa/test/dI.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/dI.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,174 @@ + +Input: 1.23 +strtodI consumes 4 bytes and returns 17 +dd[0] = #3ff3ae14 7ae147ae = 1.23 +dd[1] = #3ff3ae14 7ae147af = 1.2300000000000002 + + +Input: 1.23e+20 +strtodI consumes 8 bytes and returns 1 +dd[0] = #441aabdf 2145b430 = 1.23e+20 +dd[1] = #441aabdf 2145b430 = 1.23e+20 + + +Input: 1.23e-20 +strtodI consumes 8 bytes and returns 33 +dd[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20 +dd[1] = #3bcd0ae4 cf767531 = 1.23e-20 + + +Input: 1.23456789 +strtodI consumes 10 bytes and returns 17 +dd[0] = #3ff3c0ca 4283de1b = 1.23456789 +dd[1] = #3ff3c0ca 4283de1c = 1.2345678900000001 + + +Input: 1.23456589e+20 +strtodI consumes 14 bytes and returns 17 +dd[0] = #441ac537 a660b997 = 1.23456589e+20 +dd[1] = #441ac537 a660b998 = 123456589000000010000 + + +Input: 1.23e+30 +strtodI consumes 8 bytes and returns 17 +dd[0] = #462f0cb0 4e8fb790 = 1.23e+30 +dd[1] = #462f0cb0 4e8fb791 = 1.2300000000000001e+30 + + +Input: 1.23e-30 +strtodI consumes 8 bytes and returns 33 +dd[0] = #39b8f286 6f5010aa = 1.2299999999999999e-30 +dd[1] = #39b8f286 6f5010ab = 1.23e-30 + + +Input: 1.23456789e-20 +strtodI consumes 14 bytes and returns 17 +dd[0] = #3bcd2681 471e7ada = 1.23456789e-20 +dd[1] = #3bcd2681 471e7adb = 1.2345678900000001e-20 + + +Input: 1.23456789e-30 +strtodI consumes 14 bytes and returns 17 +dd[0] = #39b90a3e 33bbd995 = 1.23456789e-30 +dd[1] = #39b90a3e 33bbd996 = 1.2345678900000002e-30 + + +Input: 1.234567890123456789 +strtodI consumes 20 bytes and returns 17 +dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567 +dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457 + + +Input: 1.23456789012345678901234567890123456789 +strtodI consumes 40 bytes and returns 17 +dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567 +dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457 + + +Input: 1.23e306 +strtodI consumes 8 bytes and returns 33 +dd[0] = #7f7c0676 cd1c61f4 = 1.2299999999999999e+306 +dd[1] = #7f7c0676 cd1c61f5 = 1.23e+306 + + +Input: 1.23e-306 +strtodI consumes 9 bytes and returns 33 +dd[0] = #6ba3b8 5da396e7 = 1.2299999999999999e-306 +dd[1] = #6ba3b8 5da396e8 = 1.23e-306 + + +Input: 1.23e-320 +strtodI consumes 9 bytes and returns 98 +dd[0] = #0 9b9 = 1.2297e-320 +dd[1] = #0 9ba = 1.23e-320 + + +Input: 1.23e-20 +strtodI consumes 8 bytes and returns 33 +dd[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20 +dd[1] = #3bcd0ae4 cf767531 = 1.23e-20 + + +Input: 1.23456789e307 +strtodI consumes 14 bytes and returns 33 +dd[0] = #7fb194b1 4bdaecdb = 1.2345678899999998e+307 +dd[1] = #7fb194b1 4bdaecdc = 1.23456789e+307 + + +Input: 1.23456589e-307 +strtodI consumes 15 bytes and returns 17 +dd[0] = #363196 bb9845fa = 1.23456589e-307 +dd[1] = #363196 bb9845fb = 1.2345658900000001e-307 + + +Input: 1.234567890123456789 +strtodI consumes 20 bytes and returns 17 +dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567 +dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457 + + +Input: 1.234567890123456789e301 +strtodI consumes 24 bytes and returns 17 +dd[0] = #7e726f51 75f56413 = 1.2345678901234568e+301 +dd[1] = #7e726f51 75f56414 = 1.234567890123457e+301 + + +Input: 1.234567890123456789e-301 +strtodI consumes 25 bytes and returns 17 +dd[0] = #1752a64 e34ba0d3 = 1.2345678901234567e-301 +dd[1] = #1752a64 e34ba0d4 = 1.234567890123457e-301 + + +Input: 1.234567890123456789e-321 +strtodI consumes 25 bytes and returns 98 +dd[0] = #0 f9 = 1.23e-321 +dd[1] = #0 fa = 1.235e-321 + + +Input: 1e23 +strtodI consumes 4 bytes and returns 17 +dd[0] = #44b52d02 c7e14af6 = 1e+23 +dd[1] = #44b52d02 c7e14af7 = 1.0000000000000001e+23 + + +Input: 1e310 +strtodI consumes 5 bytes and returns 163 +dd[0] = #7fefffff ffffffff = 1.7976931348623157e+308 +dd[1] = #7ff00000 0 = Infinity + + +Input: 9.0259718793241475e-277 +strtodI consumes 23 bytes and returns 33 +dd[0] = #69fffff ffffffff = 9.025971879324147e-277 +dd[1] = #6a00000 0 = 9.025971879324148e-277 + + +Input: 9.025971879324147880346310405869e-277 +strtodI consumes 37 bytes and returns 17 +dd[0] = #6a00000 0 = 9.025971879324148e-277 +dd[1] = #6a00000 1 = 9.02597187932415e-277 + + +Input: 9.025971879324147880346310405868e-277 +strtodI consumes 37 bytes and returns 33 +dd[0] = #69fffff ffffffff = 9.025971879324147e-277 +dd[1] = #6a00000 0 = 9.025971879324148e-277 + + +Input: 2.2250738585072014e-308 +strtodI consumes 23 bytes and returns 17 +dd[0] = #100000 0 = 2.2250738585072014e-308 +dd[1] = #100000 1 = 2.225073858507202e-308 + + +Input: 2.2250738585072013e-308 +strtodI consumes 23 bytes and returns 33 +dd[0] = #fffff ffffffff = 2.225073858507201e-308 +dd[1] = #100000 0 = 2.2250738585072014e-308 + + +Input: 3.2649476e14 +strtodI consumes 12 bytes and returns 1 +dd[0] = #42f28f1f c30da000 = 3.2649476e+14 +dd[1] = #42f28f1f c30da000 = 3.2649476e+14 + diff -Nru mlton-20130715/runtime/gdtoa/test/dIsi.out mlton-20210117+dfsg/runtime/gdtoa/test/dIsi.out --- mlton-20130715/runtime/gdtoa/test/dIsi.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/dIsi.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,174 @@ + +Input: 1.23 +strtodI consumes 4 bytes and returns 17 +dd[0] = #3ff3ae14 7ae147ae = 1.23 +dd[1] = #3ff3ae14 7ae147af = 1.2300000000000002 + + +Input: 1.23e+20 +strtodI consumes 8 bytes and returns 1 +dd[0] = #441aabdf 2145b430 = 1.23e+20 +dd[1] = #441aabdf 2145b430 = 1.23e+20 + + +Input: 1.23e-20 +strtodI consumes 8 bytes and returns 33 +dd[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20 +dd[1] = #3bcd0ae4 cf767531 = 1.23e-20 + + +Input: 1.23456789 +strtodI consumes 10 bytes and returns 17 +dd[0] = #3ff3c0ca 4283de1b = 1.23456789 +dd[1] = #3ff3c0ca 4283de1c = 1.2345678900000001 + + +Input: 1.23456589e+20 +strtodI consumes 14 bytes and returns 17 +dd[0] = #441ac537 a660b997 = 1.23456589e+20 +dd[1] = #441ac537 a660b998 = 123456589000000010000 + + +Input: 1.23e+30 +strtodI consumes 8 bytes and returns 17 +dd[0] = #462f0cb0 4e8fb790 = 1.23e+30 +dd[1] = #462f0cb0 4e8fb791 = 1.2300000000000001e+30 + + +Input: 1.23e-30 +strtodI consumes 8 bytes and returns 33 +dd[0] = #39b8f286 6f5010aa = 1.2299999999999999e-30 +dd[1] = #39b8f286 6f5010ab = 1.23e-30 + + +Input: 1.23456789e-20 +strtodI consumes 14 bytes and returns 17 +dd[0] = #3bcd2681 471e7ada = 1.23456789e-20 +dd[1] = #3bcd2681 471e7adb = 1.2345678900000001e-20 + + +Input: 1.23456789e-30 +strtodI consumes 14 bytes and returns 17 +dd[0] = #39b90a3e 33bbd995 = 1.23456789e-30 +dd[1] = #39b90a3e 33bbd996 = 1.2345678900000002e-30 + + +Input: 1.234567890123456789 +strtodI consumes 20 bytes and returns 17 +dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567 +dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457 + + +Input: 1.23456789012345678901234567890123456789 +strtodI consumes 40 bytes and returns 17 +dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567 +dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457 + + +Input: 1.23e306 +strtodI consumes 8 bytes and returns 33 +dd[0] = #7f7c0676 cd1c61f4 = 1.2299999999999999e+306 +dd[1] = #7f7c0676 cd1c61f5 = 1.23e+306 + + +Input: 1.23e-306 +strtodI consumes 9 bytes and returns 33 +dd[0] = #6ba3b8 5da396e7 = 1.2299999999999999e-306 +dd[1] = #6ba3b8 5da396e8 = 1.23e-306 + + +Input: 1.23e-320 +strtodI consumes 9 bytes and returns 80 +dd[0] = #0 0 = 0 +dd[1] = #100000 0 = 2.2250738585072014e-308 + + +Input: 1.23e-20 +strtodI consumes 8 bytes and returns 33 +dd[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20 +dd[1] = #3bcd0ae4 cf767531 = 1.23e-20 + + +Input: 1.23456789e307 +strtodI consumes 14 bytes and returns 33 +dd[0] = #7fb194b1 4bdaecdb = 1.2345678899999998e+307 +dd[1] = #7fb194b1 4bdaecdc = 1.23456789e+307 + + +Input: 1.23456589e-307 +strtodI consumes 15 bytes and returns 17 +dd[0] = #363196 bb9845fa = 1.23456589e-307 +dd[1] = #363196 bb9845fb = 1.2345658900000001e-307 + + +Input: 1.234567890123456789 +strtodI consumes 20 bytes and returns 17 +dd[0] = #3ff3c0ca 428c59fb = 1.2345678901234567 +dd[1] = #3ff3c0ca 428c59fc = 1.234567890123457 + + +Input: 1.234567890123456789e301 +strtodI consumes 24 bytes and returns 17 +dd[0] = #7e726f51 75f56413 = 1.2345678901234568e+301 +dd[1] = #7e726f51 75f56414 = 1.234567890123457e+301 + + +Input: 1.234567890123456789e-301 +strtodI consumes 25 bytes and returns 17 +dd[0] = #1752a64 e34ba0d3 = 1.2345678901234567e-301 +dd[1] = #1752a64 e34ba0d4 = 1.234567890123457e-301 + + +Input: 1.234567890123456789e-321 +strtodI consumes 25 bytes and returns 80 +dd[0] = #0 0 = 0 +dd[1] = #100000 0 = 2.2250738585072014e-308 + + +Input: 1e23 +strtodI consumes 4 bytes and returns 17 +dd[0] = #44b52d02 c7e14af6 = 1e+23 +dd[1] = #44b52d02 c7e14af7 = 1.0000000000000001e+23 + + +Input: 1e310 +strtodI consumes 5 bytes and returns 163 +dd[0] = #7fefffff ffffffff = 1.7976931348623157e+308 +dd[1] = #7ff00000 0 = Infinity + + +Input: 9.0259718793241475e-277 +strtodI consumes 23 bytes and returns 33 +dd[0] = #69fffff ffffffff = 9.025971879324147e-277 +dd[1] = #6a00000 0 = 9.025971879324148e-277 + + +Input: 9.025971879324147880346310405869e-277 +strtodI consumes 37 bytes and returns 17 +dd[0] = #6a00000 0 = 9.025971879324148e-277 +dd[1] = #6a00000 1 = 9.02597187932415e-277 + + +Input: 9.025971879324147880346310405868e-277 +strtodI consumes 37 bytes and returns 33 +dd[0] = #69fffff ffffffff = 9.025971879324147e-277 +dd[1] = #6a00000 0 = 9.025971879324148e-277 + + +Input: 2.2250738585072014e-308 +strtodI consumes 23 bytes and returns 17 +dd[0] = #100000 0 = 2.2250738585072014e-308 +dd[1] = #100000 1 = 2.225073858507202e-308 + + +Input: 2.2250738585072013e-308 +strtodI consumes 23 bytes and returns 33 +dd[0] = #0 0 = 0 +dd[1] = #100000 0 = 2.2250738585072014e-308 + + +Input: 3.2649476e14 +strtodI consumes 12 bytes and returns 1 +dd[0] = #42f28f1f c30da000 = 3.2649476e+14 +dd[1] = #42f28f1f c30da000 = 3.2649476e+14 + diff -Nru mlton-20130715/runtime/gdtoa/test/dItest.c mlton-20210117+dfsg/runtime/gdtoa/test/dItest.c --- mlton-20130715/runtime/gdtoa/test/dItest.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/dItest.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,82 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 2001 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoaimp.h" +#include +#include + + static char ibuf[2048]; + +#define UL (unsigned long) + + static void +#ifdef KR_headers +dshow(what, d) char *what; double d; +#else +dshow(char *what, double d) +#endif +{ + char buf[32]; + g_dfmt(buf, &d, 0, sizeof(buf)); + printf("%s = #%lx %lx = %s\n", what, + UL ((U*)&d)->L[_0], UL ((U*)&d)->L[_1], buf); + } + + int +main(Void) +{ + /* Input: one number per line */ + + char *s, *se, *se1; + int i, j; + double dd[2], dd1, dd2; + static char cfmt[] = "%s consumes %d bytes and returns %d\n"; + + while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) { + while(*s <= ' ') + if (!*s++) + continue; + printf("\nInput: %s", ibuf); + i = strtodI(ibuf, &se, dd); + printf(cfmt, "strtodI", (int)(se-ibuf), i); + dshow("dd[0]", dd[0]); + dshow("dd[1]", dd[1]); + printf("\n"); + j = strtoId(ibuf, &se1, &dd1, &dd2); + if (j != i || se != se1 + || dd[0] != dd1 || dd[1] != dd2) { + printf(cfmt, "**** strtoId", (int)(se-ibuf), j); + dshow("dd1", dd1); + dshow("dd2", dd2); + } + } + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/test/d.out mlton-20210117+dfsg/runtime/gdtoa/test/d.out --- mlton-20130715/runtime/gdtoa/test/d.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/d.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1000 @@ + +Input: 1.23 +strtord consumes 4 bytes and returns 17 with f = 1.23 = #3ff3ae14 7ae147ae +g_dfmt(0) gives 4 bytes: "1.23" + +strtoId returns 17, consuming 4 bytes. +fI[0] = #3ff3ae14 7ae147ae = 1.23 +fI[1] = #3ff3ae14 7ae147af = 1.2300000000000002 +fI[0] == strtod + + +Input: 1.23e+20 +strtord consumes 8 bytes and returns 1 with f = 1.23e+20 = #441aabdf 2145b430 +g_dfmt(0) gives 8 bytes: "1.23e+20" + +strtoId returns 1, consuming 8 bytes. +fI[0] == fI[1] == strtod + + +Input: 1.23e-20 +strtord consumes 8 bytes and returns 33 with f = 1.2300000000000001e-20 = #3bcd0ae4 cf767531 +g_dfmt(0) gives 8 bytes: "1.23e-20" + +strtoId returns 33, consuming 8 bytes. +fI[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20 +fI[1] = #3bcd0ae4 cf767531 = 1.2300000000000001e-20 +fI[1] == strtod + + +Input: 1.23456789 +strtord consumes 10 bytes and returns 17 with f = 1.2345678899999999 = #3ff3c0ca 4283de1b +g_dfmt(0) gives 10 bytes: "1.23456789" + +strtoId returns 17, consuming 10 bytes. +fI[0] = #3ff3c0ca 4283de1b = 1.2345678899999999 +fI[1] = #3ff3c0ca 4283de1c = 1.2345678900000001 +fI[0] == strtod + + +Input: 1.23456589e+20 +strtord consumes 14 bytes and returns 17 with f = 1.23456589e+20 = #441ac537 a660b997 +g_dfmt(0) gives 14 bytes: "1.23456589e+20" + +strtoId returns 17, consuming 14 bytes. +fI[0] = #441ac537 a660b997 = 1.23456589e+20 +fI[1] = #441ac537 a660b998 = 1.2345658900000001e+20 +fI[0] == strtod + + +Input: 1.23e+30 +strtord consumes 8 bytes and returns 17 with f = 1.23e+30 = #462f0cb0 4e8fb790 +g_dfmt(0) gives 8 bytes: "1.23e+30" + +strtoId returns 17, consuming 8 bytes. +fI[0] = #462f0cb0 4e8fb790 = 1.23e+30 +fI[1] = #462f0cb0 4e8fb791 = 1.2300000000000001e+30 +fI[0] == strtod + + +Input: 1.23e-30 +strtord consumes 8 bytes and returns 33 with f = 1.2300000000000001e-30 = #39b8f286 6f5010ab +g_dfmt(0) gives 8 bytes: "1.23e-30" + +strtoId returns 33, consuming 8 bytes. +fI[0] = #39b8f286 6f5010aa = 1.2299999999999999e-30 +fI[1] = #39b8f286 6f5010ab = 1.2300000000000001e-30 +fI[1] == strtod + + +Input: 1.23456789e-20 +strtord consumes 14 bytes and returns 17 with f = 1.2345678899999999e-20 = #3bcd2681 471e7ada +g_dfmt(0) gives 14 bytes: "1.23456789e-20" + +strtoId returns 17, consuming 14 bytes. +fI[0] = #3bcd2681 471e7ada = 1.2345678899999999e-20 +fI[1] = #3bcd2681 471e7adb = 1.2345678900000001e-20 +fI[0] == strtod + + +Input: 1.23456789e-30 +strtord consumes 14 bytes and returns 17 with f = 1.23456789e-30 = #39b90a3e 33bbd995 +g_dfmt(0) gives 14 bytes: "1.23456789e-30" + +strtoId returns 17, consuming 14 bytes. +fI[0] = #39b90a3e 33bbd995 = 1.23456789e-30 +fI[1] = #39b90a3e 33bbd996 = 1.2345678900000002e-30 +fI[0] == strtod + + +Input: 1.234567890123456789 +strtord consumes 20 bytes and returns 17 with f = 1.2345678901234567 = #3ff3c0ca 428c59fb +g_dfmt(0) gives 18 bytes: "1.2345678901234567" + +strtoId returns 17, consuming 20 bytes. +fI[0] = #3ff3c0ca 428c59fb = 1.2345678901234567 +fI[1] = #3ff3c0ca 428c59fc = 1.2345678901234569 +fI[0] == strtod + + +Input: 1.23456789012345678901234567890123456789 +strtord consumes 40 bytes and returns 17 with f = 1.2345678901234567 = #3ff3c0ca 428c59fb +g_dfmt(0) gives 18 bytes: "1.2345678901234567" + +strtoId returns 17, consuming 40 bytes. +fI[0] = #3ff3c0ca 428c59fb = 1.2345678901234567 +fI[1] = #3ff3c0ca 428c59fc = 1.2345678901234569 +fI[0] == strtod + + +Input: 1.23e306 +strtord consumes 8 bytes and returns 33 with f = 1.23e+306 = #7f7c0676 cd1c61f5 +g_dfmt(0) gives 9 bytes: "1.23e+306" + +strtoId returns 33, consuming 8 bytes. +fI[0] = #7f7c0676 cd1c61f4 = 1.2299999999999999e+306 +fI[1] = #7f7c0676 cd1c61f5 = 1.23e+306 +fI[1] == strtod + + +Input: 1.23e-306 +strtord consumes 9 bytes and returns 33 with f = 1.23e-306 = #6ba3b8 5da396e8 +g_dfmt(0) gives 9 bytes: "1.23e-306" + +strtoId returns 33, consuming 9 bytes. +fI[0] = #6ba3b8 5da396e7 = 1.2299999999999999e-306 +fI[1] = #6ba3b8 5da396e8 = 1.23e-306 +fI[1] == strtod + + +Input: 1.23e-320 +strtord consumes 9 bytes and returns 98 with f = 1.2302234581447039e-320 = #0 9ba +g_dfmt(0) gives 9 bytes: "1.23e-320" + +strtoId returns 98, consuming 9 bytes. +fI[0] = #0 9b9 = 1.2297293924988626e-320 +fI[1] = #0 9ba = 1.2302234581447039e-320 +fI[1] == strtod + + +Input: 1.23e-20 +strtord consumes 8 bytes and returns 33 with f = 1.2300000000000001e-20 = #3bcd0ae4 cf767531 +g_dfmt(0) gives 8 bytes: "1.23e-20" + +strtoId returns 33, consuming 8 bytes. +fI[0] = #3bcd0ae4 cf767530 = 1.2299999999999999e-20 +fI[1] = #3bcd0ae4 cf767531 = 1.2300000000000001e-20 +fI[1] == strtod + + +Input: 1.23456789e307 +strtord consumes 14 bytes and returns 33 with f = 1.23456789e+307 = #7fb194b1 4bdaecdc +g_dfmt(0) gives 15 bytes: "1.23456789e+307" + +strtoId returns 33, consuming 14 bytes. +fI[0] = #7fb194b1 4bdaecdb = 1.2345678899999998e+307 +fI[1] = #7fb194b1 4bdaecdc = 1.23456789e+307 +fI[1] == strtod + + +Input: 1.23456589e-307 +strtord consumes 15 bytes and returns 17 with f = 1.2345658899999999e-307 = #363196 bb9845fa +g_dfmt(0) gives 15 bytes: "1.23456589e-307" + +strtoId returns 17, consuming 15 bytes. +fI[0] = #363196 bb9845fa = 1.2345658899999999e-307 +fI[1] = #363196 bb9845fb = 1.2345658900000001e-307 +fI[0] == strtod + + +Input: 1.234567890123456789 +strtord consumes 20 bytes and returns 17 with f = 1.2345678901234567 = #3ff3c0ca 428c59fb +g_dfmt(0) gives 18 bytes: "1.2345678901234567" + +strtoId returns 17, consuming 20 bytes. +fI[0] = #3ff3c0ca 428c59fb = 1.2345678901234567 +fI[1] = #3ff3c0ca 428c59fc = 1.2345678901234569 +fI[0] == strtod + + +Input: 1.234567890123456789e301 +strtord consumes 24 bytes and returns 17 with f = 1.2345678901234568e+301 = #7e726f51 75f56413 +g_dfmt(0) gives 23 bytes: "1.2345678901234568e+301" + +strtoId returns 17, consuming 24 bytes. +fI[0] = #7e726f51 75f56413 = 1.2345678901234568e+301 +fI[1] = #7e726f51 75f56414 = 1.234567890123457e+301 +fI[0] == strtod + + +Input: 1.234567890123456789e-301 +strtord consumes 25 bytes and returns 17 with f = 1.2345678901234567e-301 = #1752a64 e34ba0d3 +g_dfmt(0) gives 23 bytes: "1.2345678901234567e-301" + +strtoId returns 17, consuming 25 bytes. +fI[0] = #1752a64 e34ba0d3 = 1.2345678901234567e-301 +fI[1] = #1752a64 e34ba0d4 = 1.2345678901234569e-301 +fI[0] == strtod + + +Input: 1.234567890123456789e-321 +strtord consumes 25 bytes and returns 98 with f = 1.2351641146031164e-321 = #0 fa +g_dfmt(0) gives 10 bytes: "1.235e-321" + +strtoId returns 98, consuming 25 bytes. +fI[0] = #0 f9 = 1.2302234581447039e-321 +fI[1] = #0 fa = 1.2351641146031164e-321 +fI[1] == strtod + + +Input: 1e23 +strtord consumes 4 bytes and returns 17 with f = 9.9999999999999992e+22 = #44b52d02 c7e14af6 +g_dfmt(0) gives 5 bytes: "1e+23" + +strtoId returns 17, consuming 4 bytes. +fI[0] = #44b52d02 c7e14af6 = 9.9999999999999992e+22 +fI[1] = #44b52d02 c7e14af7 = 1.0000000000000001e+23 +fI[0] == strtod + + +Input: 1e310 +strtord consumes 5 bytes and returns 163 with f = Infinity = #7ff00000 0 +g_dfmt(0) gives 8 bytes: "Infinity" + +strtoId returns 163, consuming 5 bytes. +fI[0] = #7fefffff ffffffff = 1.7976931348623157e+308 +fI[1] = #7ff00000 0 = Infinity +fI[1] == strtod + +g_dfmt_p(...,0): "Infinity" +g_dfmt_p(...,1): "Infinity" +g_dfmt_p(...,2): "Infinity" +g_dfmt_p(...,3): "Infinity" +g_dfmt_p(...,4): "Infinity" +g_dfmt_p(...,5): "Infinity" + +Input: 9.0259718793241475e-277 +strtord consumes 23 bytes and returns 33 with f = 9.0259718793241479e-277 = #6a00000 0 +g_dfmt(0) gives 22 bytes: "9.025971879324148e-277" + +strtoId returns 33, consuming 23 bytes. +fI[0] = #69fffff ffffffff = 9.0259718793241469e-277 +fI[1] = #6a00000 0 = 9.0259718793241479e-277 +fI[1] == strtod + + +Input: 9.025971879324147880346310405869e-277 +strtord consumes 37 bytes and returns 17 with f = 9.0259718793241479e-277 = #6a00000 0 +g_dfmt(0) gives 22 bytes: "9.025971879324148e-277" + +strtoId returns 17, consuming 37 bytes. +fI[0] = #6a00000 0 = 9.0259718793241479e-277 +fI[1] = #6a00000 1 = 9.0259718793241499e-277 +fI[0] == strtod + + +Input: 9.025971879324147880346310405868e-277 +strtord consumes 37 bytes and returns 33 with f = 9.0259718793241479e-277 = #6a00000 0 +g_dfmt(0) gives 22 bytes: "9.025971879324148e-277" + +strtoId returns 33, consuming 37 bytes. +fI[0] = #69fffff ffffffff = 9.0259718793241469e-277 +fI[1] = #6a00000 0 = 9.0259718793241479e-277 +fI[1] == strtod + + +Input: 2.2250738585072014e-308 +strtord consumes 23 bytes and returns 17 with f = 2.2250738585072014e-308 = #100000 0 +g_dfmt(0) gives 23 bytes: "2.2250738585072014e-308" + +strtoId returns 17, consuming 23 bytes. +fI[0] = #100000 0 = 2.2250738585072014e-308 +fI[1] = #100000 1 = 2.2250738585072019e-308 +fI[0] == strtod + + +Input: 2.2250738585072013e-308 +strtord consumes 23 bytes and returns 33 with f = 2.2250738585072014e-308 = #100000 0 +g_dfmt(0) gives 23 bytes: "2.2250738585072014e-308" + +strtoId returns 33, consuming 23 bytes. +fI[0] = #fffff ffffffff = 2.2250738585072009e-308 +fI[1] = #100000 0 = 2.2250738585072014e-308 +fI[1] == strtod + + +Input: 3.2649476e14 +strtord consumes 12 bytes and returns 1 with f = 326494760000000 = #42f28f1f c30da000 +g_dfmt(0) gives 13 bytes: "3.2649476e+14" + +strtoId returns 1, consuming 12 bytes. +fI[0] == fI[1] == strtod + +Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero) + +Input: 1.1 +strtord consumes 3 bytes and returns 17 with f = 1.0999999999999999 = #3ff19999 99999999 +g_dfmt(0) gives 18 bytes: "1.0999999999999999" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff19999 99999999 = 1.0999999999999999 +fI[1] = #3ff19999 9999999a = 1.1000000000000001 +fI[0] == strtod + + +Input: -1.1 +strtord consumes 4 bytes and returns 25 with f = -1.0999999999999999 = #bff19999 99999999 +g_dfmt(0) gives 19 bytes: "-1.0999999999999999" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff19999 9999999a = -1.1000000000000001 +fI[1] = #bff19999 99999999 = -1.0999999999999999 +fI[1] == strtod + + +Input: 1.2 +strtord consumes 3 bytes and returns 17 with f = 1.2 = #3ff33333 33333333 +g_dfmt(0) gives 3 bytes: "1.2" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ff33333 33333333 = 1.2 +fI[1] = #3ff33333 33333334 = 1.2000000000000002 +fI[0] == strtod + + +Input: -1.2 +strtord consumes 4 bytes and returns 25 with f = -1.2 = #bff33333 33333333 +g_dfmt(0) gives 4 bytes: "-1.2" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bff33333 33333334 = -1.2000000000000002 +fI[1] = #bff33333 33333333 = -1.2 +fI[1] == strtod + + +Input: 1.3 +strtord consumes 3 bytes and returns 17 with f = 1.2999999999999998 = #3ff4cccc cccccccc +g_dfmt(0) gives 18 bytes: "1.2999999999999998" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff4cccc cccccccc = 1.2999999999999998 +fI[1] = #3ff4cccc cccccccd = 1.3 +fI[0] == strtod + + +Input: -1.3 +strtord consumes 4 bytes and returns 25 with f = -1.2999999999999998 = #bff4cccc cccccccc +g_dfmt(0) gives 19 bytes: "-1.2999999999999998" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff4cccc cccccccd = -1.3 +fI[1] = #bff4cccc cccccccc = -1.2999999999999998 +fI[1] == strtod + + +Input: 1.4 +strtord consumes 3 bytes and returns 17 with f = 1.3999999999999999 = #3ff66666 66666666 +g_dfmt(0) gives 3 bytes: "1.4" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ff66666 66666666 = 1.3999999999999999 +fI[1] = #3ff66666 66666667 = 1.4000000000000001 +fI[0] == strtod + + +Input: -1.4 +strtord consumes 4 bytes and returns 25 with f = -1.3999999999999999 = #bff66666 66666666 +g_dfmt(0) gives 4 bytes: "-1.4" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bff66666 66666667 = -1.4000000000000001 +fI[1] = #bff66666 66666666 = -1.3999999999999999 +fI[1] == strtod + + +Input: 1.5 +strtord consumes 3 bytes and returns 1 with f = 1.5 = #3ff80000 0 +g_dfmt(0) gives 3 bytes: "1.5" + +strtoId returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtod + + +Input: -1.5 +strtord consumes 4 bytes and returns 9 with f = -1.5 = #bff80000 0 +g_dfmt(0) gives 4 bytes: "-1.5" + +strtoId returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtod + + +Input: 1.6 +strtord consumes 3 bytes and returns 17 with f = 1.5999999999999999 = #3ff99999 99999999 +g_dfmt(0) gives 18 bytes: "1.5999999999999999" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff99999 99999999 = 1.5999999999999999 +fI[1] = #3ff99999 9999999a = 1.6000000000000001 +fI[0] == strtod + + +Input: -1.6 +strtord consumes 4 bytes and returns 25 with f = -1.5999999999999999 = #bff99999 99999999 +g_dfmt(0) gives 19 bytes: "-1.5999999999999999" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff99999 9999999a = -1.6000000000000001 +fI[1] = #bff99999 99999999 = -1.5999999999999999 +fI[1] == strtod + + +Input: 1.7 +strtord consumes 3 bytes and returns 17 with f = 1.7 = #3ffb3333 33333333 +g_dfmt(0) gives 3 bytes: "1.7" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ffb3333 33333333 = 1.7 +fI[1] = #3ffb3333 33333334 = 1.7000000000000002 +fI[0] == strtod + + +Input: -1.7 +strtord consumes 4 bytes and returns 25 with f = -1.7 = #bffb3333 33333333 +g_dfmt(0) gives 4 bytes: "-1.7" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bffb3333 33333334 = -1.7000000000000002 +fI[1] = #bffb3333 33333333 = -1.7 +fI[1] == strtod + + +Input: 1.8 +strtord consumes 3 bytes and returns 17 with f = 1.7999999999999998 = #3ffccccc cccccccc +g_dfmt(0) gives 18 bytes: "1.7999999999999998" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ffccccc cccccccc = 1.7999999999999998 +fI[1] = #3ffccccc cccccccd = 1.8 +fI[0] == strtod + + +Input: -1.8 +strtord consumes 4 bytes and returns 25 with f = -1.7999999999999998 = #bffccccc cccccccc +g_dfmt(0) gives 19 bytes: "-1.7999999999999998" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bffccccc cccccccd = -1.8 +fI[1] = #bffccccc cccccccc = -1.7999999999999998 +fI[1] == strtod + + +Input: 1.9 +strtord consumes 3 bytes and returns 17 with f = 1.8999999999999999 = #3ffe6666 66666666 +g_dfmt(0) gives 3 bytes: "1.9" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ffe6666 66666666 = 1.8999999999999999 +fI[1] = #3ffe6666 66666667 = 1.9000000000000001 +fI[0] == strtod + + +Input: -1.9 +strtord consumes 4 bytes and returns 25 with f = -1.8999999999999999 = #bffe6666 66666666 +g_dfmt(0) gives 4 bytes: "-1.9" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bffe6666 66666667 = -1.9000000000000001 +fI[1] = #bffe6666 66666666 = -1.8999999999999999 +fI[1] == strtod + +Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest) + +Input: 1.1 +strtord consumes 3 bytes and returns 33 with f = 1.1000000000000001 = #3ff19999 9999999a +g_dfmt(0) gives 3 bytes: "1.1" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff19999 99999999 = 1.0999999999999999 +fI[1] = #3ff19999 9999999a = 1.1000000000000001 +fI[1] == strtod + + +Input: -1.1 +strtord consumes 4 bytes and returns 41 with f = -1.1000000000000001 = #bff19999 9999999a +g_dfmt(0) gives 4 bytes: "-1.1" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff19999 9999999a = -1.1000000000000001 +fI[1] = #bff19999 99999999 = -1.0999999999999999 +fI[0] == strtod + + +Input: 1.2 +strtord consumes 3 bytes and returns 17 with f = 1.2 = #3ff33333 33333333 +g_dfmt(0) gives 3 bytes: "1.2" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ff33333 33333333 = 1.2 +fI[1] = #3ff33333 33333334 = 1.2000000000000002 +fI[0] == strtod + + +Input: -1.2 +strtord consumes 4 bytes and returns 25 with f = -1.2 = #bff33333 33333333 +g_dfmt(0) gives 4 bytes: "-1.2" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bff33333 33333334 = -1.2000000000000002 +fI[1] = #bff33333 33333333 = -1.2 +fI[1] == strtod + + +Input: 1.3 +strtord consumes 3 bytes and returns 33 with f = 1.3 = #3ff4cccc cccccccd +g_dfmt(0) gives 3 bytes: "1.3" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff4cccc cccccccc = 1.2999999999999998 +fI[1] = #3ff4cccc cccccccd = 1.3 +fI[1] == strtod + + +Input: -1.3 +strtord consumes 4 bytes and returns 41 with f = -1.3 = #bff4cccc cccccccd +g_dfmt(0) gives 4 bytes: "-1.3" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff4cccc cccccccd = -1.3 +fI[1] = #bff4cccc cccccccc = -1.2999999999999998 +fI[0] == strtod + + +Input: 1.4 +strtord consumes 3 bytes and returns 17 with f = 1.3999999999999999 = #3ff66666 66666666 +g_dfmt(0) gives 3 bytes: "1.4" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ff66666 66666666 = 1.3999999999999999 +fI[1] = #3ff66666 66666667 = 1.4000000000000001 +fI[0] == strtod + + +Input: -1.4 +strtord consumes 4 bytes and returns 25 with f = -1.3999999999999999 = #bff66666 66666666 +g_dfmt(0) gives 4 bytes: "-1.4" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bff66666 66666667 = -1.4000000000000001 +fI[1] = #bff66666 66666666 = -1.3999999999999999 +fI[1] == strtod + + +Input: 1.5 +strtord consumes 3 bytes and returns 1 with f = 1.5 = #3ff80000 0 +g_dfmt(0) gives 3 bytes: "1.5" + +strtoId returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtod + + +Input: -1.5 +strtord consumes 4 bytes and returns 9 with f = -1.5 = #bff80000 0 +g_dfmt(0) gives 4 bytes: "-1.5" + +strtoId returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtod + + +Input: 1.6 +strtord consumes 3 bytes and returns 33 with f = 1.6000000000000001 = #3ff99999 9999999a +g_dfmt(0) gives 3 bytes: "1.6" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff99999 99999999 = 1.5999999999999999 +fI[1] = #3ff99999 9999999a = 1.6000000000000001 +fI[1] == strtod + + +Input: -1.6 +strtord consumes 4 bytes and returns 41 with f = -1.6000000000000001 = #bff99999 9999999a +g_dfmt(0) gives 4 bytes: "-1.6" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff99999 9999999a = -1.6000000000000001 +fI[1] = #bff99999 99999999 = -1.5999999999999999 +fI[0] == strtod + + +Input: 1.7 +strtord consumes 3 bytes and returns 17 with f = 1.7 = #3ffb3333 33333333 +g_dfmt(0) gives 3 bytes: "1.7" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ffb3333 33333333 = 1.7 +fI[1] = #3ffb3333 33333334 = 1.7000000000000002 +fI[0] == strtod + + +Input: -1.7 +strtord consumes 4 bytes and returns 25 with f = -1.7 = #bffb3333 33333333 +g_dfmt(0) gives 4 bytes: "-1.7" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bffb3333 33333334 = -1.7000000000000002 +fI[1] = #bffb3333 33333333 = -1.7 +fI[1] == strtod + + +Input: 1.8 +strtord consumes 3 bytes and returns 33 with f = 1.8 = #3ffccccc cccccccd +g_dfmt(0) gives 3 bytes: "1.8" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ffccccc cccccccc = 1.7999999999999998 +fI[1] = #3ffccccc cccccccd = 1.8 +fI[1] == strtod + + +Input: -1.8 +strtord consumes 4 bytes and returns 41 with f = -1.8 = #bffccccc cccccccd +g_dfmt(0) gives 4 bytes: "-1.8" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bffccccc cccccccd = -1.8 +fI[1] = #bffccccc cccccccc = -1.7999999999999998 +fI[0] == strtod + + +Input: 1.9 +strtord consumes 3 bytes and returns 17 with f = 1.8999999999999999 = #3ffe6666 66666666 +g_dfmt(0) gives 3 bytes: "1.9" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ffe6666 66666666 = 1.8999999999999999 +fI[1] = #3ffe6666 66666667 = 1.9000000000000001 +fI[0] == strtod + + +Input: -1.9 +strtord consumes 4 bytes and returns 25 with f = -1.8999999999999999 = #bffe6666 66666666 +g_dfmt(0) gives 4 bytes: "-1.9" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bffe6666 66666667 = -1.9000000000000001 +fI[1] = #bffe6666 66666666 = -1.8999999999999999 +fI[1] == strtod + +Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity) + +Input: 1.1 +strtord consumes 3 bytes and returns 33 with f = 1.1000000000000001 = #3ff19999 9999999a +g_dfmt(0) gives 3 bytes: "1.1" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff19999 99999999 = 1.0999999999999999 +fI[1] = #3ff19999 9999999a = 1.1000000000000001 +fI[1] == strtod + + +Input: -1.1 +strtord consumes 4 bytes and returns 25 with f = -1.0999999999999999 = #bff19999 99999999 +g_dfmt(0) gives 19 bytes: "-1.0999999999999999" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff19999 9999999a = -1.1000000000000001 +fI[1] = #bff19999 99999999 = -1.0999999999999999 +fI[1] == strtod + + +Input: 1.2 +strtord consumes 3 bytes and returns 33 with f = 1.2000000000000002 = #3ff33333 33333334 +g_dfmt(0) gives 18 bytes: "1.2000000000000002" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ff33333 33333333 = 1.2 +fI[1] = #3ff33333 33333334 = 1.2000000000000002 +fI[1] == strtod + + +Input: -1.2 +strtord consumes 4 bytes and returns 25 with f = -1.2 = #bff33333 33333333 +g_dfmt(0) gives 4 bytes: "-1.2" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bff33333 33333334 = -1.2000000000000002 +fI[1] = #bff33333 33333333 = -1.2 +fI[1] == strtod + + +Input: 1.3 +strtord consumes 3 bytes and returns 33 with f = 1.3 = #3ff4cccc cccccccd +g_dfmt(0) gives 3 bytes: "1.3" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff4cccc cccccccc = 1.2999999999999998 +fI[1] = #3ff4cccc cccccccd = 1.3 +fI[1] == strtod + + +Input: -1.3 +strtord consumes 4 bytes and returns 25 with f = -1.2999999999999998 = #bff4cccc cccccccc +g_dfmt(0) gives 19 bytes: "-1.2999999999999998" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff4cccc cccccccd = -1.3 +fI[1] = #bff4cccc cccccccc = -1.2999999999999998 +fI[1] == strtod + + +Input: 1.4 +strtord consumes 3 bytes and returns 33 with f = 1.4000000000000001 = #3ff66666 66666667 +g_dfmt(0) gives 18 bytes: "1.4000000000000001" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ff66666 66666666 = 1.3999999999999999 +fI[1] = #3ff66666 66666667 = 1.4000000000000001 +fI[1] == strtod + + +Input: -1.4 +strtord consumes 4 bytes and returns 25 with f = -1.3999999999999999 = #bff66666 66666666 +g_dfmt(0) gives 4 bytes: "-1.4" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bff66666 66666667 = -1.4000000000000001 +fI[1] = #bff66666 66666666 = -1.3999999999999999 +fI[1] == strtod + + +Input: 1.5 +strtord consumes 3 bytes and returns 1 with f = 1.5 = #3ff80000 0 +g_dfmt(0) gives 3 bytes: "1.5" + +strtoId returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtod + + +Input: -1.5 +strtord consumes 4 bytes and returns 9 with f = -1.5 = #bff80000 0 +g_dfmt(0) gives 4 bytes: "-1.5" + +strtoId returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtod + + +Input: 1.6 +strtord consumes 3 bytes and returns 33 with f = 1.6000000000000001 = #3ff99999 9999999a +g_dfmt(0) gives 3 bytes: "1.6" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff99999 99999999 = 1.5999999999999999 +fI[1] = #3ff99999 9999999a = 1.6000000000000001 +fI[1] == strtod + + +Input: -1.6 +strtord consumes 4 bytes and returns 25 with f = -1.5999999999999999 = #bff99999 99999999 +g_dfmt(0) gives 19 bytes: "-1.5999999999999999" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff99999 9999999a = -1.6000000000000001 +fI[1] = #bff99999 99999999 = -1.5999999999999999 +fI[1] == strtod + + +Input: 1.7 +strtord consumes 3 bytes and returns 33 with f = 1.7000000000000002 = #3ffb3333 33333334 +g_dfmt(0) gives 18 bytes: "1.7000000000000002" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ffb3333 33333333 = 1.7 +fI[1] = #3ffb3333 33333334 = 1.7000000000000002 +fI[1] == strtod + + +Input: -1.7 +strtord consumes 4 bytes and returns 25 with f = -1.7 = #bffb3333 33333333 +g_dfmt(0) gives 4 bytes: "-1.7" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bffb3333 33333334 = -1.7000000000000002 +fI[1] = #bffb3333 33333333 = -1.7 +fI[1] == strtod + + +Input: 1.8 +strtord consumes 3 bytes and returns 33 with f = 1.8 = #3ffccccc cccccccd +g_dfmt(0) gives 3 bytes: "1.8" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ffccccc cccccccc = 1.7999999999999998 +fI[1] = #3ffccccc cccccccd = 1.8 +fI[1] == strtod + + +Input: -1.8 +strtord consumes 4 bytes and returns 25 with f = -1.7999999999999998 = #bffccccc cccccccc +g_dfmt(0) gives 19 bytes: "-1.7999999999999998" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bffccccc cccccccd = -1.8 +fI[1] = #bffccccc cccccccc = -1.7999999999999998 +fI[1] == strtod + + +Input: 1.9 +strtord consumes 3 bytes and returns 33 with f = 1.9000000000000001 = #3ffe6666 66666667 +g_dfmt(0) gives 18 bytes: "1.9000000000000001" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ffe6666 66666666 = 1.8999999999999999 +fI[1] = #3ffe6666 66666667 = 1.9000000000000001 +fI[1] == strtod + + +Input: -1.9 +strtord consumes 4 bytes and returns 25 with f = -1.8999999999999999 = #bffe6666 66666666 +g_dfmt(0) gives 4 bytes: "-1.9" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bffe6666 66666667 = -1.9000000000000001 +fI[1] = #bffe6666 66666666 = -1.8999999999999999 +fI[1] == strtod + +Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity) + +Input: 1.1 +strtord consumes 3 bytes and returns 17 with f = 1.0999999999999999 = #3ff19999 99999999 +g_dfmt(0) gives 18 bytes: "1.0999999999999999" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff19999 99999999 = 1.0999999999999999 +fI[1] = #3ff19999 9999999a = 1.1000000000000001 +fI[0] == strtod + + +Input: -1.1 +strtord consumes 4 bytes and returns 41 with f = -1.1000000000000001 = #bff19999 9999999a +g_dfmt(0) gives 4 bytes: "-1.1" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff19999 9999999a = -1.1000000000000001 +fI[1] = #bff19999 99999999 = -1.0999999999999999 +fI[0] == strtod + + +Input: 1.2 +strtord consumes 3 bytes and returns 17 with f = 1.2 = #3ff33333 33333333 +g_dfmt(0) gives 3 bytes: "1.2" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ff33333 33333333 = 1.2 +fI[1] = #3ff33333 33333334 = 1.2000000000000002 +fI[0] == strtod + + +Input: -1.2 +strtord consumes 4 bytes and returns 41 with f = -1.2000000000000002 = #bff33333 33333334 +g_dfmt(0) gives 19 bytes: "-1.2000000000000002" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bff33333 33333334 = -1.2000000000000002 +fI[1] = #bff33333 33333333 = -1.2 +fI[0] == strtod + + +Input: 1.3 +strtord consumes 3 bytes and returns 17 with f = 1.2999999999999998 = #3ff4cccc cccccccc +g_dfmt(0) gives 18 bytes: "1.2999999999999998" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff4cccc cccccccc = 1.2999999999999998 +fI[1] = #3ff4cccc cccccccd = 1.3 +fI[0] == strtod + + +Input: -1.3 +strtord consumes 4 bytes and returns 41 with f = -1.3 = #bff4cccc cccccccd +g_dfmt(0) gives 4 bytes: "-1.3" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff4cccc cccccccd = -1.3 +fI[1] = #bff4cccc cccccccc = -1.2999999999999998 +fI[0] == strtod + + +Input: 1.4 +strtord consumes 3 bytes and returns 17 with f = 1.3999999999999999 = #3ff66666 66666666 +g_dfmt(0) gives 3 bytes: "1.4" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ff66666 66666666 = 1.3999999999999999 +fI[1] = #3ff66666 66666667 = 1.4000000000000001 +fI[0] == strtod + + +Input: -1.4 +strtord consumes 4 bytes and returns 41 with f = -1.4000000000000001 = #bff66666 66666667 +g_dfmt(0) gives 19 bytes: "-1.4000000000000001" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bff66666 66666667 = -1.4000000000000001 +fI[1] = #bff66666 66666666 = -1.3999999999999999 +fI[0] == strtod + + +Input: 1.5 +strtord consumes 3 bytes and returns 1 with f = 1.5 = #3ff80000 0 +g_dfmt(0) gives 3 bytes: "1.5" + +strtoId returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtod + + +Input: -1.5 +strtord consumes 4 bytes and returns 9 with f = -1.5 = #bff80000 0 +g_dfmt(0) gives 4 bytes: "-1.5" + +strtoId returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtod + + +Input: 1.6 +strtord consumes 3 bytes and returns 17 with f = 1.5999999999999999 = #3ff99999 99999999 +g_dfmt(0) gives 18 bytes: "1.5999999999999999" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ff99999 99999999 = 1.5999999999999999 +fI[1] = #3ff99999 9999999a = 1.6000000000000001 +fI[0] == strtod + + +Input: -1.6 +strtord consumes 4 bytes and returns 41 with f = -1.6000000000000001 = #bff99999 9999999a +g_dfmt(0) gives 4 bytes: "-1.6" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bff99999 9999999a = -1.6000000000000001 +fI[1] = #bff99999 99999999 = -1.5999999999999999 +fI[0] == strtod + + +Input: 1.7 +strtord consumes 3 bytes and returns 17 with f = 1.7 = #3ffb3333 33333333 +g_dfmt(0) gives 3 bytes: "1.7" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ffb3333 33333333 = 1.7 +fI[1] = #3ffb3333 33333334 = 1.7000000000000002 +fI[0] == strtod + + +Input: -1.7 +strtord consumes 4 bytes and returns 41 with f = -1.7000000000000002 = #bffb3333 33333334 +g_dfmt(0) gives 19 bytes: "-1.7000000000000002" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bffb3333 33333334 = -1.7000000000000002 +fI[1] = #bffb3333 33333333 = -1.7 +fI[0] == strtod + + +Input: 1.8 +strtord consumes 3 bytes and returns 17 with f = 1.7999999999999998 = #3ffccccc cccccccc +g_dfmt(0) gives 18 bytes: "1.7999999999999998" + +strtoId returns 33, consuming 3 bytes. +fI[0] = #3ffccccc cccccccc = 1.7999999999999998 +fI[1] = #3ffccccc cccccccd = 1.8 +fI[0] == strtod + + +Input: -1.8 +strtord consumes 4 bytes and returns 41 with f = -1.8 = #bffccccc cccccccd +g_dfmt(0) gives 4 bytes: "-1.8" + +strtoId returns 41, consuming 4 bytes. +fI[0] = #bffccccc cccccccd = -1.8 +fI[1] = #bffccccc cccccccc = -1.7999999999999998 +fI[0] == strtod + + +Input: 1.9 +strtord consumes 3 bytes and returns 17 with f = 1.8999999999999999 = #3ffe6666 66666666 +g_dfmt(0) gives 3 bytes: "1.9" + +strtoId returns 17, consuming 3 bytes. +fI[0] = #3ffe6666 66666666 = 1.8999999999999999 +fI[1] = #3ffe6666 66666667 = 1.9000000000000001 +fI[0] == strtod + + +Input: -1.9 +strtord consumes 4 bytes and returns 41 with f = -1.9000000000000001 = #bffe6666 66666667 +g_dfmt(0) gives 19 bytes: "-1.9000000000000001" + +strtoId returns 25, consuming 4 bytes. +fI[0] = #bffe6666 66666667 = -1.9000000000000001 +fI[1] = #bffe6666 66666666 = -1.8999999999999999 +fI[0] == strtod + diff -Nru mlton-20130715/runtime/gdtoa/test/dt.c mlton-20210117+dfsg/runtime/gdtoa/test/dt.c --- mlton-20130715/runtime/gdtoa/test/dt.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/dt.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,301 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* Test program for strtod and dtoa. + * + * Inputs (on stdin): + * number[: mode [ndigits]] + * or + * #hex0 hex1[: mode [ndigits]] + * where number is a decimal floating-point number, + * hex0 is a string of Hex digits for the most significant + * word of the number, hex1 is a similar string for the other + * (least significant) word, and mode and ndigits are + * parameters to dtoa. + */ + +#include +#include "gdtoa.h" +int STRTOD_DIGLIM = 24; +#ifdef KR_headers +#define Void /*void*/ +#else +#define Void void +#endif + +#ifdef __STDC__ +#include +#else +#ifdef __cplusplus +extern "C" double atof(const char*); +#else +extern double atof ANSI((char*)); +#endif +#endif + +typedef union { double d; ULong L[2]; } U; + +#ifdef IEEE_8087 +#define word0(x) (x)->L[1] +#define word1(x) (x)->L[0] +#else +#define word0(x) (x)->L[0] +#define word1(x) (x)->L[1] +#endif +#define dval(x) (x)->d + +#include "errno.h" + +#ifdef __cplusplus +extern "C" char *dtoa(double, int, int, int*, int*, char **); +#else +extern char *dtoa ANSI((double, int, int, int*, int*, char **)); +#endif + + static void +#ifdef KR_headers +g_fmt(b, x) char *b; double x; +#else +g_fmt(char *b, double x) +#endif +{ + char *s, *se; + int decpt, i, j, k, sign; + + if (!x) { + *b++ = '0'; + *b = 0; + return; + } + s = dtoa(x, 0, 0, &decpt, &sign, &se); + if (sign) + *b++ = '-'; + if (decpt == 9999) /* Infinity or Nan */ { + while((*b++ = *s++)); + return; + } + if (decpt <= -4 || decpt > se - s + 5) { + *b++ = *s++; + if (*s) { + *b++ = '.'; + while((*b = *s++)) + b++; + } + *b++ = 'e'; + /* sprintf(b, "%+.2d", decpt - 1); */ + if (--decpt < 0) { + *b++ = '-'; + decpt = -decpt; + } + else + *b++ = '+'; + for(j = 2, k = 10; 10*k <= decpt; j++, k *= 10){}; + for(;;) { + i = decpt / k; + *b++ = i + '0'; + if (--j <= 0) + break; + decpt -= i*k; + decpt *= 10; + } + *b = 0; + } + else if (decpt <= 0) { + *b++ = '.'; + for(; decpt < 0; decpt++) + *b++ = '0'; + while((*b++ = *s++)); + } + else { + while((*b = *s++)) { + b++; + if (--decpt == 0 && *s) + *b++ = '.'; + } + for(; decpt > 0; decpt--) + *b++ = '0'; + *b = 0; + } + } + + static void +baderrno(Void) +{ + fflush(stdout); + perror("\nerrno strtod"); + fflush(stderr); + } + +#define UL (unsigned long) + + static void +#ifdef KR_headers +check(d) U *d; +#else +check(U *d) +#endif +{ + char buf[64]; + int decpt, sign; + char *s, *se; + U d1; + + s = dtoa(dval(d), 0, 0, &decpt, &sign, &se); + sprintf(buf, "%s%s%se%d", sign ? "-" : "", + decpt == 9999 ? "" : ".", s, decpt); + errno = 0; + dval(&d1) = strtod(buf, (char **)0); + if (errno) + baderrno(); + if (dval(d) != dval(&d1)) { + printf("sent d = %.17g = 0x%lx %lx, buf = %s\n", + dval(d), UL word0(d), UL word1(d), buf); + printf("got d1 = %.17g = 0x%lx %lx\n", + dval(&d1), UL word0(&d1), UL word1(&d1)); + } + } + +#ifdef USE_fpinit +extern void fpinit_ASL(); +/* fpinit_ASL() appears in the AMPL/solver interface library and with */ +/* Intel 80x87-style processing, sets the rounding precision to 53 bits. */ +#else +#define fpinit_ASL() /*nothing*/ +#endif + + int +main(Void) +{ + U d, d1; + char buf[2048], buf1[32]; + char *fmt, *s, *s1, *se; + int decpt, sign; + int mode = 0, ndigits = 17; + ULong x, y; +#ifdef VAX + ULong z; +#endif + + fpinit_ASL(); + d.d = 0.; + while(fgets(buf, sizeof(buf), stdin)) { + if (*buf == '*') { + printf("%s", buf); + continue; + } + printf("Input: %s", buf); + if (*buf == '#') { + x = word0(&d); + y = word1(&d); + /* sscanf(buf+1, "%lx %lx:%d %d", &x, &y, &mode, &ndigits); */ + x = (ULong)strtoul(s1 = buf+1, &se, 16); + if (se > s1) { + y = (ULong)strtoul(s1 = se, &se, 16); + if (se > s1) + sscanf(se, ":%d %d", &mode, &ndigits); + } + word0(&d) = x; + word1(&d) = y; + fmt = "Output: d =\n%.17g = 0x%lx %lx\n"; + } + else if (*buf == '*') { + x = strtoul(buf,&s,10); + if (!*s && x > 18) + STRTOD_DIGLIM = (int)x; + printf("STRTOD_DIGLIM = %lu\n", UL x); + continue; + } + else { + errno = 0; + dval(&d) = strtod(buf,&se); + if (*se == ':') + sscanf(se+1,"%d %d", &mode, &ndigits); + dval(&d1) = atof(buf); + fmt = "Output: d =\n%.17g = 0x%lx %lx, se = %s"; + if (errno) + baderrno(); + } + printf(fmt, dval(&d), UL word0(&d), UL word1(&d), se); + g_fmt(buf1, dval(&d)); + printf("\tg_fmt gives \"%s\"\n", buf1); + if (*buf != '#' && dval(&d) != dval(&d1)) + printf("atof gives\n\ + d1 = %.17g = 0x%lx %lx\nversus\n\ + d = %.17g = 0x%lx %lx\n", dval(&d1), UL word0(&d1), UL word1(&d1), + dval(&d), UL word0(&d), UL word1(&d)); + check(&d); + s = dtoa(dval(&d), mode, ndigits, &decpt, &sign, &se); + printf("\tdtoa(mode = %d, ndigits = %d):\n", mode, ndigits); + printf("\tdtoa returns sign = %d, decpt = %d, %d digits:\n%s\n", + sign, decpt, (int)(se-s), s); + x = word1(&d); + if (x != 0xffffffff + && (word0(&d) & 0x7ff00000) != 0x7ff00000) { +#ifdef VAX + z = x << 16 | x >> 16; + z++; + z = z << 16 | z >> 16; + word1(&d) = z; +#else + word1(&d) = x + 1; +#endif + printf("\tnextafter(d,+Inf) = %.17g = 0x%lx %lx:\n", + dval(&d), UL word0(&d), UL word1(&d)); + g_fmt(buf1, dval(&d)); + printf("\tg_fmt gives \"%s\"\n", buf1); + s = dtoa(dval(&d), mode, ndigits, &decpt, &sign, &se); + printf( + "\tdtoa returns sign = %d, decpt = %d, %d digits:\n%s\n", + sign, decpt, (int)(se-s), s); + check(&d); + } + if (x) { +#ifdef VAX + z = x << 16 | x >> 16; + z--; + z = z << 16 | z >> 16; + word1(&d) = z; +#else + word1(&d) = x - 1; +#endif + printf("\tnextafter(d,-Inf) = %.17g = 0x%lx %lx:\n", + dval(&d), UL word0(&d), UL word1(&d)); + g_fmt(buf1, dval(&d)); + printf("\tg_fmt gives \"%s\"\n", buf1); + s = dtoa(dval(&d), mode, ndigits, &decpt, &sign, &se); + printf( + "\tdtoa returns sign = %d, decpt = %d, %d digits:\n%s\n", + sign, decpt, (int)(se-s), s); + check(&d); + } + } + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/test/dtest.c mlton-20210117+dfsg/runtime/gdtoa/test/dtest.c --- mlton-20130715/runtime/gdtoa/test/dtest.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/dtest.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,157 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998-2001 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* Test program for g_dfmt, strtoId, strtod, strtopd, and strtord. + * + * Inputs (on stdin): + * r rounding_mode + * n ndig + * number + * #hex0 hex1 + * + * rounding_mode values: + * 0 = toward zero + * 1 = nearest + * 2 = toward +Infinity + * 3 = toward -Infinity + * + * where number is a decimal floating-point number, + * hex0 is a string of Hex <= 8 digits for the most significant + * word of the number, hex1 is a similar string for the other + * (least significant) word, and ndig is a parameters to g_dfmt. + */ + +#include "gdtoaimp.h" +#include +#include + + extern int getround ANSI((int,char*)); + + static char ibuf[2048], obuf[2048], obuf1[2048]; + +#define UL (unsigned long) + + int +main(Void) +{ + U fI[2], u; + char *s, *se, *se1; + double f1; + int i, i1, ndig = 0, nik, nike, r = 1; + long LL[2]; + + while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) { + while(*s <= ' ') + if (!*s++) + continue; + switch(*s) { + case 'r': + r = getround(r, s); + continue; + case 'n': + i = s[1]; + if (i <= ' ' || (i >= '0' && i <= '9')) { + ndig = atoi(s+1); + continue; + } + break; /* nan? */ + case '#': + LL[0] = u.L[_0]; + LL[1] = u.L[_1]; + sscanf(s+1, "%lx %lx", &LL[0], &LL[1]); + u.L[_0] = LL[0]; + u.L[_1] = LL[1]; + printf("\nInput: %s", ibuf); + printf("--> f = #%lx %lx\n", (long)u.L[_0], (long)u.L[_1]); + i = 0; + goto fmt_test; + } + printf("\nInput: %s", ibuf); + i = strtord(ibuf, &se, r, &u.d); + if (r == 1) { + if ((u.d != strtod(ibuf, &se1) || se1 != se)) + printf("***strtod and strtord disagree!!\n"); + i1 = strtopd(ibuf, &se, &f1); + if (i != i1 || u.d != f1 || se != se1) + printf("***strtord and strtopd disagree!!\n"); + } + printf("strtord consumes %d bytes and returns %d with f = %.17g = #%lx %lx\n", + (int)(se-ibuf), i, u.d, UL u.L[_0], UL u.L[_1]); + fmt_test: + se = g_dfmt(obuf, &u.d, ndig, sizeof(obuf)); + printf("g_dfmt(%d) gives %d bytes: \"%s\"\n\n", + ndig, (int)(se-obuf), se ? obuf : ""); + se1 = g_dfmt_p(obuf1, &u.d, ndig, sizeof(obuf1), 0); + if (se1 - obuf1 != se - obuf || strcmp(obuf, obuf1)) + printf("Botch: g_dfmt_p gives \"%s\" rather than \"%s\"\n", + obuf1, obuf); + if (*s == '#') + continue; + printf("strtoId returns %d,", strtoId(ibuf, &se, &fI[0].d, &fI[1].d)); + printf(" consuming %d bytes.\n", (int)(se-ibuf)); + if (fI[0].d == fI[1].d) { + if (fI[0].d == u.d) + printf("fI[0] == fI[1] == strtod\n"); + else + printf("fI[0] == fI[1] = #%lx %lx = %.17g\n", + UL fI[0].L[_0], UL fI[0].L[_1], fI[0].d); + } + else { + printf("fI[0] = #%lx %lx = %.17g\n", + UL fI[0].L[_0], UL fI[0].L[_1], fI[0].d); + printf("fI[1] = #%lx %lx = %.17g\n", + UL fI[1].L[_0], UL fI[1].L[_1], fI[1].d); + if (fI[0].d == u.d) + printf("fI[0] == strtod\n"); + else if (fI[1].d == u.d) + printf("fI[1] == strtod\n"); + else + printf("**** Both differ from strtod ****\n"); + } + printf("\n"); + switch(i & STRTOG_Retmask) { + case STRTOG_Infinite: + for(nik = 0; nik < 6; ++nik) { + se1 = g_dfmt_p(obuf1, &u.d, ndig, sizeof(obuf1), nik); + printf("g_dfmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + break; + case STRTOG_NaN: + case STRTOG_NaNbits: + for(i = 0; i < 3; ++i) + for(nik = 6*i, nike = nik + 3; nik < nike; ++nik) { + se1 = g_dfmt_p(obuf1, &u.d, ndig, sizeof(obuf1), nik); + printf("g_dfmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + } + } + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/test/dtst.out mlton-20210117+dfsg/runtime/gdtoa/test/dtst.out --- mlton-20130715/runtime/gdtoa/test/dtst.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/dtst.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,699 @@ +Input: 1.23 +Output: d = +1.23 = 0x3ff3ae14 7ae147ae, se = + g_fmt gives "1.23" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 1, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002 = 0x3ff3ae14 7ae147af: + g_fmt gives "1.2300000000000002" + dtoa returns sign = 0, decpt = 1, 17 digits: +12300000000000002 + nextafter(d,-Infinity) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad: + g_fmt gives "1.2299999999999998" + dtoa returns sign = 0, decpt = 1, 17 digits: +12299999999999998 +Input: 1.23e+20 +Output: d = +1.23e+20 = 0x441aabdf 2145b430, se = + g_fmt gives "1.23e+20" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 21, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002e+20 = 0x441aabdf 2145b431: + g_fmt gives "123000000000000020000" + dtoa returns sign = 0, decpt = 21, 17 digits: +12300000000000002 + nextafter(d,-Infinity) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f: + g_fmt gives "122999999999999980000" + dtoa returns sign = 0, decpt = 21, 17 digits: +12299999999999998 +Input: 1.23e-20 +Output: d = +1.2300000000000001e-20 = 0x3bcd0ae4 cf767531, se = + g_fmt gives "1.23e-20" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -19, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532: + g_fmt gives "1.2300000000000002e-20" + dtoa returns sign = 0, decpt = -19, 17 digits: +12300000000000002 + nextafter(d,-Infinity) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530: + g_fmt gives "1.2299999999999999e-20" + dtoa returns sign = 0, decpt = -19, 17 digits: +12299999999999999 +Input: 1.23456789 +Output: d = +1.2345678899999999 = 0x3ff3c0ca 4283de1b, se = + g_fmt gives "1.23456789" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 1, 9 digits: +123456789 + nextafter(d,+Infinity) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c: + g_fmt gives "1.2345678900000001" + dtoa returns sign = 0, decpt = 1, 17 digits: +12345678900000001 + nextafter(d,-Infinity) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a: + g_fmt gives "1.2345678899999997" + dtoa returns sign = 0, decpt = 1, 17 digits: +12345678899999997 +Input: 1.23456589e+20 +Output: d = +1.23456589e+20 = 0x441ac537 a660b997, se = + g_fmt gives "1.23456589e+20" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 21, 9 digits: +123456589 + nextafter(d,+Infinity) = 1.2345658900000001e+20 = 0x441ac537 a660b998: + g_fmt gives "123456589000000010000" + dtoa returns sign = 0, decpt = 21, 17 digits: +12345658900000001 + nextafter(d,-Infinity) = 1.2345658899999998e+20 = 0x441ac537 a660b996: + g_fmt gives "123456588999999980000" + dtoa returns sign = 0, decpt = 21, 17 digits: +12345658899999998 +Input: 1.23e+30 +Output: d = +1.23e+30 = 0x462f0cb0 4e8fb790, se = + g_fmt gives "1.23e+30" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 31, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000001e+30 = 0x462f0cb0 4e8fb791: + g_fmt gives "1.2300000000000001e+30" + dtoa returns sign = 0, decpt = 31, 17 digits: +12300000000000001 + nextafter(d,-Infinity) = 1.2299999999999998e+30 = 0x462f0cb0 4e8fb78f: + g_fmt gives "1.2299999999999998e+30" + dtoa returns sign = 0, decpt = 31, 17 digits: +12299999999999998 +Input: 1.23e-30 +Output: d = +1.2300000000000001e-30 = 0x39b8f286 6f5010ab, se = + g_fmt gives "1.23e-30" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -29, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002e-30 = 0x39b8f286 6f5010ac: + g_fmt gives "1.2300000000000002e-30" + dtoa returns sign = 0, decpt = -29, 17 digits: +12300000000000002 + nextafter(d,-Infinity) = 1.2299999999999999e-30 = 0x39b8f286 6f5010aa: + g_fmt gives "1.2299999999999999e-30" + dtoa returns sign = 0, decpt = -29, 17 digits: +12299999999999999 +Input: 1.23456789e-20 +Output: d = +1.2345678899999999e-20 = 0x3bcd2681 471e7ada, se = + g_fmt gives "1.23456789e-20" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -19, 9 digits: +123456789 + nextafter(d,+Infinity) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb: + g_fmt gives "1.2345678900000001e-20" + dtoa returns sign = 0, decpt = -19, 17 digits: +12345678900000001 + nextafter(d,-Infinity) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9: + g_fmt gives "1.2345678899999998e-20" + dtoa returns sign = 0, decpt = -19, 17 digits: +12345678899999998 +Input: 1.23456789e-30 +Output: d = +1.23456789e-30 = 0x39b90a3e 33bbd995, se = + g_fmt gives "1.23456789e-30" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -29, 9 digits: +123456789 + nextafter(d,+Infinity) = 1.2345678900000002e-30 = 0x39b90a3e 33bbd996: + g_fmt gives "1.2345678900000002e-30" + dtoa returns sign = 0, decpt = -29, 17 digits: +12345678900000002 + nextafter(d,-Infinity) = 1.2345678899999998e-30 = 0x39b90a3e 33bbd994: + g_fmt gives "1.2345678899999998e-30" + dtoa returns sign = 0, decpt = -29, 17 digits: +12345678899999998 +Input: 1.234567890123456789 +Output: d = +1.2345678901234567 = 0x3ff3c0ca 428c59fb, se = + g_fmt gives "1.2345678901234567" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 1, 17 digits: +12345678901234567 + nextafter(d,+Infinity) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc: + g_fmt gives "1.234567890123457" + dtoa returns sign = 0, decpt = 1, 16 digits: +1234567890123457 + nextafter(d,-Infinity) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa: + g_fmt gives "1.2345678901234565" + dtoa returns sign = 0, decpt = 1, 17 digits: +12345678901234565 +Input: 1.23456789012345678901234567890123456789 +Output: d = +1.2345678901234567 = 0x3ff3c0ca 428c59fb, se = + g_fmt gives "1.2345678901234567" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 1, 17 digits: +12345678901234567 + nextafter(d,+Infinity) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc: + g_fmt gives "1.234567890123457" + dtoa returns sign = 0, decpt = 1, 16 digits: +1234567890123457 + nextafter(d,-Infinity) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa: + g_fmt gives "1.2345678901234565" + dtoa returns sign = 0, decpt = 1, 17 digits: +12345678901234565 +Input: 1.23e306 +Output: d = +1.23e+306 = 0x7f7c0676 cd1c61f5, se = + g_fmt gives "1.23e+306" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 307, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002e+306 = 0x7f7c0676 cd1c61f6: + g_fmt gives "1.2300000000000002e+306" + dtoa returns sign = 0, decpt = 307, 17 digits: +12300000000000002 + nextafter(d,-Infinity) = 1.2299999999999999e+306 = 0x7f7c0676 cd1c61f4: + g_fmt gives "1.2299999999999999e+306" + dtoa returns sign = 0, decpt = 307, 17 digits: +12299999999999999 +Input: 1.23e-306 +Output: d = +1.23e-306 = 0x6ba3b8 5da396e8, se = + g_fmt gives "1.23e-306" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -305, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002e-306 = 0x6ba3b8 5da396e9: + g_fmt gives "1.2300000000000002e-306" + dtoa returns sign = 0, decpt = -305, 17 digits: +12300000000000002 + nextafter(d,-Infinity) = 1.2299999999999999e-306 = 0x6ba3b8 5da396e7: + g_fmt gives "1.2299999999999999e-306" + dtoa returns sign = 0, decpt = -305, 17 digits: +12299999999999999 +Input: 1.23e-320 +Output: d = +1.2302234581447039e-320 = 0x0 9ba, se = + g_fmt gives "1.23e-320" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -319, 3 digits: +123 + nextafter(d,+Infinity) = 1.2307175237905451e-320 = 0x0 9bb: + g_fmt gives "1.2307e-320" + dtoa returns sign = 0, decpt = -319, 5 digits: +12307 + nextafter(d,-Infinity) = 1.2297293924988626e-320 = 0x0 9b9: + g_fmt gives "1.2297e-320" + dtoa returns sign = 0, decpt = -319, 5 digits: +12297 +Input: 1.23e-20 +Output: d = +1.2300000000000001e-20 = 0x3bcd0ae4 cf767531, se = + g_fmt gives "1.23e-20" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -19, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532: + g_fmt gives "1.2300000000000002e-20" + dtoa returns sign = 0, decpt = -19, 17 digits: +12300000000000002 + nextafter(d,-Infinity) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530: + g_fmt gives "1.2299999999999999e-20" + dtoa returns sign = 0, decpt = -19, 17 digits: +12299999999999999 +Input: 1.23456789e307 +Output: d = +1.23456789e+307 = 0x7fb194b1 4bdaecdc, se = + g_fmt gives "1.23456789e+307" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 308, 9 digits: +123456789 + nextafter(d,+Infinity) = 1.2345678900000003e+307 = 0x7fb194b1 4bdaecdd: + g_fmt gives "1.2345678900000003e+307" + dtoa returns sign = 0, decpt = 308, 17 digits: +12345678900000003 + nextafter(d,-Infinity) = 1.2345678899999998e+307 = 0x7fb194b1 4bdaecdb: + g_fmt gives "1.2345678899999998e+307" + dtoa returns sign = 0, decpt = 308, 17 digits: +12345678899999998 +Input: 1.23456589e-307 +Output: d = +1.2345658899999999e-307 = 0x363196 bb9845fa, se = + g_fmt gives "1.23456589e-307" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -306, 9 digits: +123456589 + nextafter(d,+Infinity) = 1.2345658900000001e-307 = 0x363196 bb9845fb: + g_fmt gives "1.2345658900000001e-307" + dtoa returns sign = 0, decpt = -306, 17 digits: +12345658900000001 + nextafter(d,-Infinity) = 1.2345658899999997e-307 = 0x363196 bb9845f9: + g_fmt gives "1.2345658899999997e-307" + dtoa returns sign = 0, decpt = -306, 17 digits: +12345658899999997 +Input: 1.234567890123456789 +Output: d = +1.2345678901234567 = 0x3ff3c0ca 428c59fb, se = + g_fmt gives "1.2345678901234567" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 1, 17 digits: +12345678901234567 + nextafter(d,+Infinity) = 1.2345678901234569 = 0x3ff3c0ca 428c59fc: + g_fmt gives "1.234567890123457" + dtoa returns sign = 0, decpt = 1, 16 digits: +1234567890123457 + nextafter(d,-Infinity) = 1.2345678901234565 = 0x3ff3c0ca 428c59fa: + g_fmt gives "1.2345678901234565" + dtoa returns sign = 0, decpt = 1, 17 digits: +12345678901234565 +Input: 1.234567890123456789e301 +Output: d = +1.2345678901234568e+301 = 0x7e726f51 75f56413, se = + g_fmt gives "1.2345678901234568e+301" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 302, 17 digits: +12345678901234568 + nextafter(d,+Infinity) = 1.234567890123457e+301 = 0x7e726f51 75f56414: + g_fmt gives "1.234567890123457e+301" + dtoa returns sign = 0, decpt = 302, 16 digits: +1234567890123457 + nextafter(d,-Infinity) = 1.2345678901234565e+301 = 0x7e726f51 75f56412: + g_fmt gives "1.2345678901234565e+301" + dtoa returns sign = 0, decpt = 302, 17 digits: +12345678901234565 +Input: 1.234567890123456789e-301 +Output: d = +1.2345678901234567e-301 = 0x1752a64 e34ba0d3, se = + g_fmt gives "1.2345678901234567e-301" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -300, 17 digits: +12345678901234567 + nextafter(d,+Infinity) = 1.2345678901234569e-301 = 0x1752a64 e34ba0d4: + g_fmt gives "1.234567890123457e-301" + dtoa returns sign = 0, decpt = -300, 16 digits: +1234567890123457 + nextafter(d,-Infinity) = 1.2345678901234565e-301 = 0x1752a64 e34ba0d2: + g_fmt gives "1.2345678901234565e-301" + dtoa returns sign = 0, decpt = -300, 17 digits: +12345678901234565 +Input: 1.234567890123456789e-321 +Output: d = +1.2351641146031164e-321 = 0x0 fa, se = + g_fmt gives "1.235e-321" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -320, 4 digits: +1235 + nextafter(d,+Infinity) = 1.2401047710615288e-321 = 0x0 fb: + g_fmt gives "1.24e-321" + dtoa returns sign = 0, decpt = -320, 3 digits: +124 + nextafter(d,-Infinity) = 1.2302234581447039e-321 = 0x0 f9: + g_fmt gives "1.23e-321" + dtoa returns sign = 0, decpt = -320, 3 digits: +123 +Input: 1e23 +Output: d = +9.9999999999999992e+22 = 0x44b52d02 c7e14af6, se = + g_fmt gives "1e+23" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 24, 1 digits: +1 + nextafter(d,+Infinity) = 1.0000000000000001e+23 = 0x44b52d02 c7e14af7: + g_fmt gives "1.0000000000000001e+23" + dtoa returns sign = 0, decpt = 24, 17 digits: +10000000000000001 + nextafter(d,-Infinity) = 9.9999999999999975e+22 = 0x44b52d02 c7e14af5: + g_fmt gives "9.999999999999997e+22" + dtoa returns sign = 0, decpt = 23, 16 digits: +9999999999999997 +Input: 1e310 +Output: d = +Infinity = 0x7ff00000 0, se = + g_fmt gives "Infinity" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 9999, 8 digits: +Infinity +Input: 9.0259718793241475e-277 +Output: d = +9.0259718793241479e-277 = 0x6a00000 0, se = + g_fmt gives "9.025971879324148e-277" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -276, 16 digits: +9025971879324148 + nextafter(d,+Infinity) = 9.0259718793241499e-277 = 0x6a00000 1: + g_fmt gives "9.02597187932415e-277" + dtoa returns sign = 0, decpt = -276, 15 digits: +902597187932415 +Input: 9.025971879324147880346310405869e-277 +Output: d = +9.0259718793241479e-277 = 0x6a00000 0, se = + g_fmt gives "9.025971879324148e-277" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -276, 16 digits: +9025971879324148 + nextafter(d,+Infinity) = 9.0259718793241499e-277 = 0x6a00000 1: + g_fmt gives "9.02597187932415e-277" + dtoa returns sign = 0, decpt = -276, 15 digits: +902597187932415 +Input: 9.025971879324147880346310405868e-277 +Output: d = +9.0259718793241479e-277 = 0x6a00000 0, se = + g_fmt gives "9.025971879324148e-277" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -276, 16 digits: +9025971879324148 + nextafter(d,+Infinity) = 9.0259718793241499e-277 = 0x6a00000 1: + g_fmt gives "9.02597187932415e-277" + dtoa returns sign = 0, decpt = -276, 15 digits: +902597187932415 +Input: 2.2250738585072014e-308 +Output: d = +2.2250738585072014e-308 = 0x100000 0, se = + g_fmt gives "2.2250738585072014e-308" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -307, 17 digits: +22250738585072014 + nextafter(d,+Infinity) = 2.2250738585072019e-308 = 0x100000 1: + g_fmt gives "2.225073858507202e-308" + dtoa returns sign = 0, decpt = -307, 16 digits: +2225073858507202 +Input: 2.2250738585072013e-308 +Output: d = +2.2250738585072014e-308 = 0x100000 0, se = + g_fmt gives "2.2250738585072014e-308" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = -307, 17 digits: +22250738585072014 + nextafter(d,+Infinity) = 2.2250738585072019e-308 = 0x100000 1: + g_fmt gives "2.225073858507202e-308" + dtoa returns sign = 0, decpt = -307, 16 digits: +2225073858507202 +Input: 3.2649476e14 +Output: d = +326494760000000 = 0x42f28f1f c30da000, se = + g_fmt gives "3.2649476e+14" + dtoa(mode = 0, ndigits = 17): + dtoa returns sign = 0, decpt = 15, 8 digits: +32649476 + nextafter(d,+Infinity) = 326494760000000.06 = 0x42f28f1f c30da001: + g_fmt gives "326494760000000.06" + dtoa returns sign = 0, decpt = 15, 17 digits: +32649476000000006 + nextafter(d,-Infinity) = 326494759999999.94 = 0x42f28f1f c30d9fff: + g_fmt gives "326494759999999.94" + dtoa returns sign = 0, decpt = 15, 17 digits: +32649475999999994 +Input: 1.23:2 6 +Output: d = +1.23 = 0x3ff3ae14 7ae147ae, se = :2 6 + g_fmt gives "1.23" + dtoa(mode = 2, ndigits = 6): + dtoa returns sign = 0, decpt = 1, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002 = 0x3ff3ae14 7ae147af: + g_fmt gives "1.2300000000000002" + dtoa returns sign = 0, decpt = 1, 3 digits: +123 + nextafter(d,-Infinity) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad: + g_fmt gives "1.2299999999999998" + dtoa returns sign = 0, decpt = 1, 3 digits: +123 +Input: 1.23:4 6 +Output: d = +1.23 = 0x3ff3ae14 7ae147ae, se = :4 6 + g_fmt gives "1.23" + dtoa(mode = 4, ndigits = 6): + dtoa returns sign = 0, decpt = 1, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002 = 0x3ff3ae14 7ae147af: + g_fmt gives "1.2300000000000002" + dtoa returns sign = 0, decpt = 1, 3 digits: +123 + nextafter(d,-Infinity) = 1.2299999999999998 = 0x3ff3ae14 7ae147ad: + g_fmt gives "1.2299999999999998" + dtoa returns sign = 0, decpt = 1, 3 digits: +123 +Input: 1.23e+20:2 6 +Output: d = +1.23e+20 = 0x441aabdf 2145b430, se = :2 6 + g_fmt gives "1.23e+20" + dtoa(mode = 2, ndigits = 6): + dtoa returns sign = 0, decpt = 21, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002e+20 = 0x441aabdf 2145b431: + g_fmt gives "123000000000000020000" + dtoa returns sign = 0, decpt = 21, 3 digits: +123 + nextafter(d,-Infinity) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f: + g_fmt gives "122999999999999980000" + dtoa returns sign = 0, decpt = 21, 3 digits: +123 +Input: 1.23e+20:4 6 +Output: d = +1.23e+20 = 0x441aabdf 2145b430, se = :4 6 + g_fmt gives "1.23e+20" + dtoa(mode = 4, ndigits = 6): + dtoa returns sign = 0, decpt = 21, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002e+20 = 0x441aabdf 2145b431: + g_fmt gives "123000000000000020000" + dtoa returns sign = 0, decpt = 21, 3 digits: +123 + nextafter(d,-Infinity) = 1.2299999999999998e+20 = 0x441aabdf 2145b42f: + g_fmt gives "122999999999999980000" + dtoa returns sign = 0, decpt = 21, 3 digits: +123 +Input: 1.23e-20:2 6 +Output: d = +1.2300000000000001e-20 = 0x3bcd0ae4 cf767531, se = :2 6 + g_fmt gives "1.23e-20" + dtoa(mode = 2, ndigits = 6): + dtoa returns sign = 0, decpt = -19, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532: + g_fmt gives "1.2300000000000002e-20" + dtoa returns sign = 0, decpt = -19, 3 digits: +123 + nextafter(d,-Infinity) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530: + g_fmt gives "1.2299999999999999e-20" + dtoa returns sign = 0, decpt = -19, 3 digits: +123 +Input: 1.23e-20:4 6 +Output: d = +1.2300000000000001e-20 = 0x3bcd0ae4 cf767531, se = :4 6 + g_fmt gives "1.23e-20" + dtoa(mode = 4, ndigits = 6): + dtoa returns sign = 0, decpt = -19, 3 digits: +123 + nextafter(d,+Infinity) = 1.2300000000000002e-20 = 0x3bcd0ae4 cf767532: + g_fmt gives "1.2300000000000002e-20" + dtoa returns sign = 0, decpt = -19, 3 digits: +123 + nextafter(d,-Infinity) = 1.2299999999999999e-20 = 0x3bcd0ae4 cf767530: + g_fmt gives "1.2299999999999999e-20" + dtoa returns sign = 0, decpt = -19, 3 digits: +123 +Input: 1.23456789:2 6 +Output: d = +1.2345678899999999 = 0x3ff3c0ca 4283de1b, se = :2 6 + g_fmt gives "1.23456789" + dtoa(mode = 2, ndigits = 6): + dtoa returns sign = 0, decpt = 1, 6 digits: +123457 + nextafter(d,+Infinity) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c: + g_fmt gives "1.2345678900000001" + dtoa returns sign = 0, decpt = 1, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a: + g_fmt gives "1.2345678899999997" + dtoa returns sign = 0, decpt = 1, 6 digits: +123457 +Input: 1.23456789:4 6 +Output: d = +1.2345678899999999 = 0x3ff3c0ca 4283de1b, se = :4 6 + g_fmt gives "1.23456789" + dtoa(mode = 4, ndigits = 6): + dtoa returns sign = 0, decpt = 1, 6 digits: +123457 + nextafter(d,+Infinity) = 1.2345678900000001 = 0x3ff3c0ca 4283de1c: + g_fmt gives "1.2345678900000001" + dtoa returns sign = 0, decpt = 1, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345678899999997 = 0x3ff3c0ca 4283de1a: + g_fmt gives "1.2345678899999997" + dtoa returns sign = 0, decpt = 1, 6 digits: +123457 +Input: 1.23456589e+20:2 6 +Output: d = +1.23456589e+20 = 0x441ac537 a660b997, se = :2 6 + g_fmt gives "1.23456589e+20" + dtoa(mode = 2, ndigits = 6): + dtoa returns sign = 0, decpt = 21, 6 digits: +123457 + nextafter(d,+Infinity) = 1.2345658900000001e+20 = 0x441ac537 a660b998: + g_fmt gives "123456589000000010000" + dtoa returns sign = 0, decpt = 21, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345658899999998e+20 = 0x441ac537 a660b996: + g_fmt gives "123456588999999980000" + dtoa returns sign = 0, decpt = 21, 6 digits: +123457 +Input: 1.23456589e+20:4 6 +Output: d = +1.23456589e+20 = 0x441ac537 a660b997, se = :4 6 + g_fmt gives "1.23456589e+20" + dtoa(mode = 4, ndigits = 6): + dtoa returns sign = 0, decpt = 21, 6 digits: +123457 + nextafter(d,+Infinity) = 1.2345658900000001e+20 = 0x441ac537 a660b998: + g_fmt gives "123456589000000010000" + dtoa returns sign = 0, decpt = 21, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345658899999998e+20 = 0x441ac537 a660b996: + g_fmt gives "123456588999999980000" + dtoa returns sign = 0, decpt = 21, 6 digits: +123457 +Input: 1.23456789e-20:2 6 +Output: d = +1.2345678899999999e-20 = 0x3bcd2681 471e7ada, se = :2 6 + g_fmt gives "1.23456789e-20" + dtoa(mode = 2, ndigits = 6): + dtoa returns sign = 0, decpt = -19, 6 digits: +123457 + nextafter(d,+Infinity) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb: + g_fmt gives "1.2345678900000001e-20" + dtoa returns sign = 0, decpt = -19, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9: + g_fmt gives "1.2345678899999998e-20" + dtoa returns sign = 0, decpt = -19, 6 digits: +123457 +Input: 1.23456789e-20:4 6 +Output: d = +1.2345678899999999e-20 = 0x3bcd2681 471e7ada, se = :4 6 + g_fmt gives "1.23456789e-20" + dtoa(mode = 4, ndigits = 6): + dtoa returns sign = 0, decpt = -19, 6 digits: +123457 + nextafter(d,+Infinity) = 1.2345678900000001e-20 = 0x3bcd2681 471e7adb: + g_fmt gives "1.2345678900000001e-20" + dtoa returns sign = 0, decpt = -19, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345678899999998e-20 = 0x3bcd2681 471e7ad9: + g_fmt gives "1.2345678899999998e-20" + dtoa returns sign = 0, decpt = -19, 6 digits: +123457 +Input: 1234565:2 6 +Output: d = +1234565 = 0x4132d685 0, se = :2 6 + g_fmt gives "1234565" + dtoa(mode = 2, ndigits = 6): + dtoa returns sign = 0, decpt = 7, 6 digits: +123456 + nextafter(d,+Infinity) = 1234565.0000000002 = 0x4132d685 1: + g_fmt gives "1234565.0000000002" + dtoa returns sign = 0, decpt = 7, 6 digits: +123457 +Input: 1234565:4 6 +Output: d = +1234565 = 0x4132d685 0, se = :4 6 + g_fmt gives "1234565" + dtoa(mode = 4, ndigits = 6): + dtoa returns sign = 0, decpt = 7, 6 digits: +123456 + nextafter(d,+Infinity) = 1234565.0000000002 = 0x4132d685 1: + g_fmt gives "1234565.0000000002" + dtoa returns sign = 0, decpt = 7, 6 digits: +123457 +Input: 1.234565:2 6 +Output: d = +1.2345649999999999 = 0x3ff3c0c7 3abc9470, se = :2 6 + g_fmt gives "1.234565" + dtoa(mode = 2, ndigits = 6): + dtoa returns sign = 0, decpt = 1, 6 digits: +123456 + nextafter(d,+Infinity) = 1.2345650000000001 = 0x3ff3c0c7 3abc9471: + g_fmt gives "1.2345650000000001" + dtoa returns sign = 0, decpt = 1, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345649999999997 = 0x3ff3c0c7 3abc946f: + g_fmt gives "1.2345649999999997" + dtoa returns sign = 0, decpt = 1, 6 digits: +123456 +Input: 1.234565:4 6 +Output: d = +1.2345649999999999 = 0x3ff3c0c7 3abc9470, se = :4 6 + g_fmt gives "1.234565" + dtoa(mode = 4, ndigits = 6): + dtoa returns sign = 0, decpt = 1, 6 digits: +123456 + nextafter(d,+Infinity) = 1.2345650000000001 = 0x3ff3c0c7 3abc9471: + g_fmt gives "1.2345650000000001" + dtoa returns sign = 0, decpt = 1, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345649999999997 = 0x3ff3c0c7 3abc946f: + g_fmt gives "1.2345649999999997" + dtoa returns sign = 0, decpt = 1, 6 digits: +123456 +Input: 1.234565e+20:2 6 +Output: d = +1.234565e+20 = 0x441ac536 6299040d, se = :2 6 + g_fmt gives "1.234565e+20" + dtoa(mode = 2, ndigits = 6): + dtoa returns sign = 0, decpt = 21, 6 digits: +123456 + nextafter(d,+Infinity) = 1.2345650000000002e+20 = 0x441ac536 6299040e: + g_fmt gives "123456500000000020000" + dtoa returns sign = 0, decpt = 21, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345649999999998e+20 = 0x441ac536 6299040c: + g_fmt gives "123456499999999980000" + dtoa returns sign = 0, decpt = 21, 6 digits: +123456 +Input: 1.234565e+20:4 6 +Output: d = +1.234565e+20 = 0x441ac536 6299040d, se = :4 6 + g_fmt gives "1.234565e+20" + dtoa(mode = 4, ndigits = 6): + dtoa returns sign = 0, decpt = 21, 6 digits: +123456 + nextafter(d,+Infinity) = 1.2345650000000002e+20 = 0x441ac536 6299040e: + g_fmt gives "123456500000000020000" + dtoa returns sign = 0, decpt = 21, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345649999999998e+20 = 0x441ac536 6299040c: + g_fmt gives "123456499999999980000" + dtoa returns sign = 0, decpt = 21, 6 digits: +123456 +Input: 1.234565e-20:2 6 +Output: d = +1.234565e-20 = 0x3bcd267c ce45a93f, se = :2 6 + g_fmt gives "1.234565e-20" + dtoa(mode = 2, ndigits = 6): + dtoa returns sign = 0, decpt = -19, 6 digits: +123456 + nextafter(d,+Infinity) = 1.2345650000000001e-20 = 0x3bcd267c ce45a940: + g_fmt gives "1.2345650000000001e-20" + dtoa returns sign = 0, decpt = -19, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345649999999998e-20 = 0x3bcd267c ce45a93e: + g_fmt gives "1.2345649999999998e-20" + dtoa returns sign = 0, decpt = -19, 6 digits: +123456 +Input: 1.234565e-20:4 6 +Output: d = +1.234565e-20 = 0x3bcd267c ce45a93f, se = :4 6 + g_fmt gives "1.234565e-20" + dtoa(mode = 4, ndigits = 6): + dtoa returns sign = 0, decpt = -19, 6 digits: +123456 + nextafter(d,+Infinity) = 1.2345650000000001e-20 = 0x3bcd267c ce45a940: + g_fmt gives "1.2345650000000001e-20" + dtoa returns sign = 0, decpt = -19, 6 digits: +123457 + nextafter(d,-Infinity) = 1.2345649999999998e-20 = 0x3bcd267c ce45a93e: + g_fmt gives "1.2345649999999998e-20" + dtoa returns sign = 0, decpt = -19, 6 digits: +123456 diff -Nru mlton-20130715/runtime/gdtoa/test/f.out mlton-20210117+dfsg/runtime/gdtoa/test/f.out --- mlton-20130715/runtime/gdtoa/test/f.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/f.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1022 @@ + +Input: 1.23 +strtof consumes 4 bytes and returns 1.23 = #3f9d70a4 +g_ffmt(0) gives 4 bytes: "1.23" + +strtoIf returns 33, consuming 4 bytes. +fI[0] = #3f9d70a3 = 1.2299999 +fI[1] = #3f9d70a4 = 1.23 +fI[1] == strtof + + +Input: 1.23e+20 +strtof consumes 8 bytes and returns 1.23e+20 = #60d55ef9 +g_ffmt(0) gives 8 bytes: "1.23e+20" + +strtoIf returns 17, consuming 8 bytes. +fI[0] = #60d55ef9 = 1.23e+20 +fI[1] = #60d55efa = 1.2300001e+20 +fI[0] == strtof + + +Input: 1.23e-20 +strtof consumes 8 bytes and returns 1.23e-20 = #1e685726 +g_ffmt(0) gives 8 bytes: "1.23e-20" + +strtoIf returns 17, consuming 8 bytes. +fI[0] = #1e685726 = 1.23e-20 +fI[1] = #1e685727 = 1.23e-20 +fI[0] == strtof + + +Input: 1.23456789 +strtof consumes 10 bytes and returns 1.2345679 = #3f9e0652 +g_ffmt(0) gives 9 bytes: "1.2345679" + +strtoIf returns 17, consuming 10 bytes. +fI[0] = #3f9e0652 = 1.2345679 +fI[1] = #3f9e0653 = 1.234568 +fI[0] == strtof + + +Input: 1.23456589e+20 +strtof consumes 14 bytes and returns 1.2345659e+20 = #60d629bd +g_ffmt(0) gives 13 bytes: "1.2345659e+20" + +strtoIf returns 17, consuming 14 bytes. +fI[0] = #60d629bd = 1.2345659e+20 +fI[1] = #60d629be = 1.234566e+20 +fI[0] == strtof + + +Input: 1.23e+30 +strtof consumes 8 bytes and returns 1.23e+30 = #71786582 +g_ffmt(0) gives 8 bytes: "1.23e+30" + +strtoIf returns 17, consuming 8 bytes. +fI[0] = #71786582 = 1.23e+30 +fI[1] = #71786583 = 1.23e+30 +fI[0] == strtof + + +Input: 1.23e-30 +strtof consumes 8 bytes and returns 1.23e-30 = #dc79433 +g_ffmt(0) gives 8 bytes: "1.23e-30" + +strtoIf returns 17, consuming 8 bytes. +fI[0] = #dc79433 = 1.23e-30 +fI[1] = #dc79434 = 1.23e-30 +fI[0] == strtof + + +Input: 1.23456789e-20 +strtof consumes 14 bytes and returns 1.2345679e-20 = #1e69340a +g_ffmt(0) gives 13 bytes: "1.2345679e-20" + +strtoIf returns 17, consuming 14 bytes. +fI[0] = #1e69340a = 1.2345679e-20 +fI[1] = #1e69340b = 1.234568e-20 +fI[0] == strtof + + +Input: 1.23456789e-30 +strtof consumes 14 bytes and returns 1.2345679e-30 = #dc851f2 +g_ffmt(0) gives 13 bytes: "1.2345679e-30" + +strtoIf returns 33, consuming 14 bytes. +fI[0] = #dc851f1 = 1.2345678e-30 +fI[1] = #dc851f2 = 1.2345679e-30 +fI[1] == strtof + + +Input: 1.234567890123456789 +strtof consumes 20 bytes and returns 1.2345679 = #3f9e0652 +g_ffmt(0) gives 9 bytes: "1.2345679" + +strtoIf returns 17, consuming 20 bytes. +fI[0] = #3f9e0652 = 1.2345679 +fI[1] = #3f9e0653 = 1.234568 +fI[0] == strtof + + +Input: 1.23456789012345678901234567890123456789 +strtof consumes 40 bytes and returns 1.2345679 = #3f9e0652 +g_ffmt(0) gives 9 bytes: "1.2345679" + +strtoIf returns 17, consuming 40 bytes. +fI[0] = #3f9e0652 = 1.2345679 +fI[1] = #3f9e0653 = 1.234568 +fI[0] == strtof + + +Input: 1.23e306 +strtof consumes 8 bytes and returns Infinity = #7f800000 +g_ffmt(0) gives 8 bytes: "Infinity" + +strtoIf returns 163, consuming 8 bytes. +fI[0] = #7f7fffff = 3.4028235e+38 +fI[1] = #7f800000 = Infinity +fI[1] == strtof + +g_ffmt_p(...,0): "Infinity" +g_ffmt_p(...,1): "Infinity" +g_ffmt_p(...,2): "Infinity" +g_ffmt_p(...,3): "Infinity" +g_ffmt_p(...,4): "Infinity" +g_ffmt_p(...,5): "Infinity" + +Input: 1.23e-306 +strtof consumes 9 bytes and returns 0 = #0 +g_ffmt(0) gives 1 bytes: "0" + +strtoIf returns 80, consuming 9 bytes. +fI[0] = #0 = 0 +fI[1] = #1 = 1.4012985e-45 +fI[0] == strtof + + +Input: 1.23e-320 +strtof consumes 9 bytes and returns 0 = #0 +g_ffmt(0) gives 1 bytes: "0" + +strtoIf returns 80, consuming 9 bytes. +fI[0] = #0 = 0 +fI[1] = #1 = 1.4012985e-45 +fI[0] == strtof + + +Input: 1.23e-20 +strtof consumes 8 bytes and returns 1.23e-20 = #1e685726 +g_ffmt(0) gives 8 bytes: "1.23e-20" + +strtoIf returns 17, consuming 8 bytes. +fI[0] = #1e685726 = 1.23e-20 +fI[1] = #1e685727 = 1.23e-20 +fI[0] == strtof + + +Input: 1.23456789e307 +strtof consumes 14 bytes and returns Infinity = #7f800000 +g_ffmt(0) gives 8 bytes: "Infinity" + +strtoIf returns 163, consuming 14 bytes. +fI[0] = #7f7fffff = 3.4028235e+38 +fI[1] = #7f800000 = Infinity +fI[1] == strtof + +g_ffmt_p(...,0): "Infinity" +g_ffmt_p(...,1): "Infinity" +g_ffmt_p(...,2): "Infinity" +g_ffmt_p(...,3): "Infinity" +g_ffmt_p(...,4): "Infinity" +g_ffmt_p(...,5): "Infinity" + +Input: 1.23456589e-307 +strtof consumes 15 bytes and returns 0 = #0 +g_ffmt(0) gives 1 bytes: "0" + +strtoIf returns 80, consuming 15 bytes. +fI[0] = #0 = 0 +fI[1] = #1 = 1.4012985e-45 +fI[0] == strtof + + +Input: 1.234567890123456789 +strtof consumes 20 bytes and returns 1.2345679 = #3f9e0652 +g_ffmt(0) gives 9 bytes: "1.2345679" + +strtoIf returns 17, consuming 20 bytes. +fI[0] = #3f9e0652 = 1.2345679 +fI[1] = #3f9e0653 = 1.234568 +fI[0] == strtof + + +Input: 1.234567890123456789e301 +strtof consumes 24 bytes and returns Infinity = #7f800000 +g_ffmt(0) gives 8 bytes: "Infinity" + +strtoIf returns 163, consuming 24 bytes. +fI[0] = #7f7fffff = 3.4028235e+38 +fI[1] = #7f800000 = Infinity +fI[1] == strtof + +g_ffmt_p(...,0): "Infinity" +g_ffmt_p(...,1): "Infinity" +g_ffmt_p(...,2): "Infinity" +g_ffmt_p(...,3): "Infinity" +g_ffmt_p(...,4): "Infinity" +g_ffmt_p(...,5): "Infinity" + +Input: 1.234567890123456789e-301 +strtof consumes 25 bytes and returns 0 = #0 +g_ffmt(0) gives 1 bytes: "0" + +strtoIf returns 80, consuming 25 bytes. +fI[0] = #0 = 0 +fI[1] = #1 = 1.4012985e-45 +fI[0] == strtof + + +Input: 1.234567890123456789e-321 +strtof consumes 25 bytes and returns 0 = #0 +g_ffmt(0) gives 1 bytes: "0" + +strtoIf returns 80, consuming 25 bytes. +fI[0] = #0 = 0 +fI[1] = #1 = 1.4012985e-45 +fI[0] == strtof + + +Input: 1e23 +strtof consumes 4 bytes and returns 9.9999998e+22 = #65a96816 +g_ffmt(0) gives 5 bytes: "1e+23" + +strtoIf returns 17, consuming 4 bytes. +fI[0] = #65a96816 = 9.9999998e+22 +fI[1] = #65a96817 = 1.0000001e+23 +fI[0] == strtof + + +Input: 1e310 +strtof consumes 5 bytes and returns Infinity = #7f800000 +g_ffmt(0) gives 8 bytes: "Infinity" + +strtoIf returns 163, consuming 5 bytes. +fI[0] = #7f7fffff = 3.4028235e+38 +fI[1] = #7f800000 = Infinity +fI[1] == strtof + +g_ffmt_p(...,0): "Infinity" +g_ffmt_p(...,1): "Infinity" +g_ffmt_p(...,2): "Infinity" +g_ffmt_p(...,3): "Infinity" +g_ffmt_p(...,4): "Infinity" +g_ffmt_p(...,5): "Infinity" + +Input: 9.0259718793241475e-277 +strtof consumes 23 bytes and returns 0 = #0 +g_ffmt(0) gives 1 bytes: "0" + +strtoIf returns 80, consuming 23 bytes. +fI[0] = #0 = 0 +fI[1] = #1 = 1.4012985e-45 +fI[0] == strtof + + +Input: 9.025971879324147880346310405869e-277 +strtof consumes 37 bytes and returns 0 = #0 +g_ffmt(0) gives 1 bytes: "0" + +strtoIf returns 80, consuming 37 bytes. +fI[0] = #0 = 0 +fI[1] = #1 = 1.4012985e-45 +fI[0] == strtof + + +Input: 9.025971879324147880346310405868e-277 +strtof consumes 37 bytes and returns 0 = #0 +g_ffmt(0) gives 1 bytes: "0" + +strtoIf returns 80, consuming 37 bytes. +fI[0] = #0 = 0 +fI[1] = #1 = 1.4012985e-45 +fI[0] == strtof + + +Input: 2.2250738585072014e-308 +strtof consumes 23 bytes and returns 0 = #0 +g_ffmt(0) gives 1 bytes: "0" + +strtoIf returns 80, consuming 23 bytes. +fI[0] = #0 = 0 +fI[1] = #1 = 1.4012985e-45 +fI[0] == strtof + + +Input: 2.2250738585072013e-308 +strtof consumes 23 bytes and returns 0 = #0 +g_ffmt(0) gives 1 bytes: "0" + +strtoIf returns 80, consuming 23 bytes. +fI[0] = #0 = 0 +fI[1] = #1 = 1.4012985e-45 +fI[0] == strtof + + +Input: 3.2649476e14 +strtof consumes 12 bytes and returns 3.2649476e+14 = #579478fe +g_ffmt(0) gives 13 bytes: "3.2649476e+14" + +strtoIf returns 17, consuming 12 bytes. +fI[0] = #579478fe = 3.2649476e+14 +fI[1] = #579478ff = 3.2649479e+14 +fI[0] == strtof + +Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero) + +Input: 1.1 +strtof consumes 3 bytes and returns 1.0999999 = #3f8ccccc +g_ffmt(0) gives 9 bytes: "1.0999999" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3f8ccccc = 1.0999999 +fI[1] = #3f8ccccd = 1.1 +fI[0] == strtof + + +Input: -1.1 +strtof consumes 4 bytes and returns -1.0999999 = #bf8ccccc +g_ffmt(0) gives 10 bytes: "-1.0999999" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bf8ccccd = -1.1 +fI[1] = #bf8ccccc = -1.0999999 +fI[1] == strtof + + +Input: 1.2 +strtof consumes 3 bytes and returns 1.1999999 = #3f999999 +g_ffmt(0) gives 9 bytes: "1.1999999" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3f999999 = 1.1999999 +fI[1] = #3f99999a = 1.2 +fI[0] == strtof + + +Input: -1.2 +strtof consumes 4 bytes and returns -1.1999999 = #bf999999 +g_ffmt(0) gives 10 bytes: "-1.1999999" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bf99999a = -1.2 +fI[1] = #bf999999 = -1.1999999 +fI[1] == strtof + + +Input: 1.3 +strtof consumes 3 bytes and returns 1.3 = #3fa66666 +g_ffmt(0) gives 3 bytes: "1.3" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fa66666 = 1.3 +fI[1] = #3fa66667 = 1.3000001 +fI[0] == strtof + + +Input: -1.3 +strtof consumes 4 bytes and returns -1.3 = #bfa66666 +g_ffmt(0) gives 4 bytes: "-1.3" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfa66667 = -1.3000001 +fI[1] = #bfa66666 = -1.3 +fI[1] == strtof + + +Input: 1.4 +strtof consumes 3 bytes and returns 1.4 = #3fb33333 +g_ffmt(0) gives 3 bytes: "1.4" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fb33333 = 1.4 +fI[1] = #3fb33334 = 1.4000001 +fI[0] == strtof + + +Input: -1.4 +strtof consumes 4 bytes and returns -1.4 = #bfb33333 +g_ffmt(0) gives 4 bytes: "-1.4" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfb33334 = -1.4000001 +fI[1] = #bfb33333 = -1.4 +fI[1] == strtof + + +Input: 1.5 +strtof consumes 3 bytes and returns 1.5 = #3fc00000 +g_ffmt(0) gives 3 bytes: "1.5" + +strtoIf returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtof + + +Input: -1.5 +strtof consumes 4 bytes and returns -1.5 = #bfc00000 +g_ffmt(0) gives 4 bytes: "-1.5" + +strtoIf returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtof + + +Input: 1.6 +strtof consumes 3 bytes and returns 1.5999999 = #3fcccccc +g_ffmt(0) gives 9 bytes: "1.5999999" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3fcccccc = 1.5999999 +fI[1] = #3fcccccd = 1.6 +fI[0] == strtof + + +Input: -1.6 +strtof consumes 4 bytes and returns -1.5999999 = #bfcccccc +g_ffmt(0) gives 10 bytes: "-1.5999999" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bfcccccd = -1.6 +fI[1] = #bfcccccc = -1.5999999 +fI[1] == strtof + + +Input: 1.7 +strtof consumes 3 bytes and returns 1.6999999 = #3fd99999 +g_ffmt(0) gives 9 bytes: "1.6999999" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3fd99999 = 1.6999999 +fI[1] = #3fd9999a = 1.7 +fI[0] == strtof + + +Input: -1.7 +strtof consumes 4 bytes and returns -1.6999999 = #bfd99999 +g_ffmt(0) gives 10 bytes: "-1.6999999" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bfd9999a = -1.7 +fI[1] = #bfd99999 = -1.6999999 +fI[1] == strtof + + +Input: 1.8 +strtof consumes 3 bytes and returns 1.8 = #3fe66666 +g_ffmt(0) gives 3 bytes: "1.8" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fe66666 = 1.8 +fI[1] = #3fe66667 = 1.8000001 +fI[0] == strtof + + +Input: -1.8 +strtof consumes 4 bytes and returns -1.8 = #bfe66666 +g_ffmt(0) gives 4 bytes: "-1.8" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfe66667 = -1.8000001 +fI[1] = #bfe66666 = -1.8 +fI[1] == strtof + + +Input: 1.9 +strtof consumes 3 bytes and returns 1.9 = #3ff33333 +g_ffmt(0) gives 3 bytes: "1.9" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3ff33333 = 1.9 +fI[1] = #3ff33334 = 1.9000001 +fI[0] == strtof + + +Input: -1.9 +strtof consumes 4 bytes and returns -1.9 = #bff33333 +g_ffmt(0) gives 4 bytes: "-1.9" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bff33334 = -1.9000001 +fI[1] = #bff33333 = -1.9 +fI[1] == strtof + +Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest) + +Input: 1.1 +strtof consumes 3 bytes and returns 1.1 = #3f8ccccd +g_ffmt(0) gives 3 bytes: "1.1" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3f8ccccc = 1.0999999 +fI[1] = #3f8ccccd = 1.1 +fI[1] == strtof + + +Input: -1.1 +strtof consumes 4 bytes and returns -1.1 = #bf8ccccd +g_ffmt(0) gives 4 bytes: "-1.1" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bf8ccccd = -1.1 +fI[1] = #bf8ccccc = -1.0999999 +fI[0] == strtof + + +Input: 1.2 +strtof consumes 3 bytes and returns 1.2 = #3f99999a +g_ffmt(0) gives 3 bytes: "1.2" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3f999999 = 1.1999999 +fI[1] = #3f99999a = 1.2 +fI[1] == strtof + + +Input: -1.2 +strtof consumes 4 bytes and returns -1.2 = #bf99999a +g_ffmt(0) gives 4 bytes: "-1.2" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bf99999a = -1.2 +fI[1] = #bf999999 = -1.1999999 +fI[0] == strtof + + +Input: 1.3 +strtof consumes 3 bytes and returns 1.3 = #3fa66666 +g_ffmt(0) gives 3 bytes: "1.3" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fa66666 = 1.3 +fI[1] = #3fa66667 = 1.3000001 +fI[0] == strtof + + +Input: -1.3 +strtof consumes 4 bytes and returns -1.3 = #bfa66666 +g_ffmt(0) gives 4 bytes: "-1.3" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfa66667 = -1.3000001 +fI[1] = #bfa66666 = -1.3 +fI[1] == strtof + + +Input: 1.4 +strtof consumes 3 bytes and returns 1.4 = #3fb33333 +g_ffmt(0) gives 3 bytes: "1.4" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fb33333 = 1.4 +fI[1] = #3fb33334 = 1.4000001 +fI[0] == strtof + + +Input: -1.4 +strtof consumes 4 bytes and returns -1.4 = #bfb33333 +g_ffmt(0) gives 4 bytes: "-1.4" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfb33334 = -1.4000001 +fI[1] = #bfb33333 = -1.4 +fI[1] == strtof + + +Input: 1.5 +strtof consumes 3 bytes and returns 1.5 = #3fc00000 +g_ffmt(0) gives 3 bytes: "1.5" + +strtoIf returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtof + + +Input: -1.5 +strtof consumes 4 bytes and returns -1.5 = #bfc00000 +g_ffmt(0) gives 4 bytes: "-1.5" + +strtoIf returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtof + + +Input: 1.6 +strtof consumes 3 bytes and returns 1.6 = #3fcccccd +g_ffmt(0) gives 3 bytes: "1.6" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3fcccccc = 1.5999999 +fI[1] = #3fcccccd = 1.6 +fI[1] == strtof + + +Input: -1.6 +strtof consumes 4 bytes and returns -1.6 = #bfcccccd +g_ffmt(0) gives 4 bytes: "-1.6" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bfcccccd = -1.6 +fI[1] = #bfcccccc = -1.5999999 +fI[0] == strtof + + +Input: 1.7 +strtof consumes 3 bytes and returns 1.7 = #3fd9999a +g_ffmt(0) gives 3 bytes: "1.7" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3fd99999 = 1.6999999 +fI[1] = #3fd9999a = 1.7 +fI[1] == strtof + + +Input: -1.7 +strtof consumes 4 bytes and returns -1.7 = #bfd9999a +g_ffmt(0) gives 4 bytes: "-1.7" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bfd9999a = -1.7 +fI[1] = #bfd99999 = -1.6999999 +fI[0] == strtof + + +Input: 1.8 +strtof consumes 3 bytes and returns 1.8 = #3fe66666 +g_ffmt(0) gives 3 bytes: "1.8" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fe66666 = 1.8 +fI[1] = #3fe66667 = 1.8000001 +fI[0] == strtof + + +Input: -1.8 +strtof consumes 4 bytes and returns -1.8 = #bfe66666 +g_ffmt(0) gives 4 bytes: "-1.8" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfe66667 = -1.8000001 +fI[1] = #bfe66666 = -1.8 +fI[1] == strtof + + +Input: 1.9 +strtof consumes 3 bytes and returns 1.9 = #3ff33333 +g_ffmt(0) gives 3 bytes: "1.9" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3ff33333 = 1.9 +fI[1] = #3ff33334 = 1.9000001 +fI[0] == strtof + + +Input: -1.9 +strtof consumes 4 bytes and returns -1.9 = #bff33333 +g_ffmt(0) gives 4 bytes: "-1.9" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bff33334 = -1.9000001 +fI[1] = #bff33333 = -1.9 +fI[1] == strtof + +Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity) + +Input: 1.1 +strtof consumes 3 bytes and returns 1.1 = #3f8ccccd +g_ffmt(0) gives 3 bytes: "1.1" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3f8ccccc = 1.0999999 +fI[1] = #3f8ccccd = 1.1 +fI[1] == strtof + + +Input: -1.1 +strtof consumes 4 bytes and returns -1.0999999 = #bf8ccccc +g_ffmt(0) gives 10 bytes: "-1.0999999" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bf8ccccd = -1.1 +fI[1] = #bf8ccccc = -1.0999999 +fI[1] == strtof + + +Input: 1.2 +strtof consumes 3 bytes and returns 1.2 = #3f99999a +g_ffmt(0) gives 3 bytes: "1.2" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3f999999 = 1.1999999 +fI[1] = #3f99999a = 1.2 +fI[1] == strtof + + +Input: -1.2 +strtof consumes 4 bytes and returns -1.1999999 = #bf999999 +g_ffmt(0) gives 10 bytes: "-1.1999999" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bf99999a = -1.2 +fI[1] = #bf999999 = -1.1999999 +fI[1] == strtof + + +Input: 1.3 +strtof consumes 3 bytes and returns 1.3000001 = #3fa66667 +g_ffmt(0) gives 9 bytes: "1.3000001" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fa66666 = 1.3 +fI[1] = #3fa66667 = 1.3000001 +fI[1] == strtof + + +Input: -1.3 +strtof consumes 4 bytes and returns -1.3 = #bfa66666 +g_ffmt(0) gives 4 bytes: "-1.3" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfa66667 = -1.3000001 +fI[1] = #bfa66666 = -1.3 +fI[1] == strtof + + +Input: 1.4 +strtof consumes 3 bytes and returns 1.4000001 = #3fb33334 +g_ffmt(0) gives 9 bytes: "1.4000001" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fb33333 = 1.4 +fI[1] = #3fb33334 = 1.4000001 +fI[1] == strtof + + +Input: -1.4 +strtof consumes 4 bytes and returns -1.4 = #bfb33333 +g_ffmt(0) gives 4 bytes: "-1.4" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfb33334 = -1.4000001 +fI[1] = #bfb33333 = -1.4 +fI[1] == strtof + + +Input: 1.5 +strtof consumes 3 bytes and returns 1.5 = #3fc00000 +g_ffmt(0) gives 3 bytes: "1.5" + +strtoIf returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtof + + +Input: -1.5 +strtof consumes 4 bytes and returns -1.5 = #bfc00000 +g_ffmt(0) gives 4 bytes: "-1.5" + +strtoIf returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtof + + +Input: 1.6 +strtof consumes 3 bytes and returns 1.6 = #3fcccccd +g_ffmt(0) gives 3 bytes: "1.6" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3fcccccc = 1.5999999 +fI[1] = #3fcccccd = 1.6 +fI[1] == strtof + + +Input: -1.6 +strtof consumes 4 bytes and returns -1.5999999 = #bfcccccc +g_ffmt(0) gives 10 bytes: "-1.5999999" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bfcccccd = -1.6 +fI[1] = #bfcccccc = -1.5999999 +fI[1] == strtof + + +Input: 1.7 +strtof consumes 3 bytes and returns 1.7 = #3fd9999a +g_ffmt(0) gives 3 bytes: "1.7" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3fd99999 = 1.6999999 +fI[1] = #3fd9999a = 1.7 +fI[1] == strtof + + +Input: -1.7 +strtof consumes 4 bytes and returns -1.6999999 = #bfd99999 +g_ffmt(0) gives 10 bytes: "-1.6999999" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bfd9999a = -1.7 +fI[1] = #bfd99999 = -1.6999999 +fI[1] == strtof + + +Input: 1.8 +strtof consumes 3 bytes and returns 1.8000001 = #3fe66667 +g_ffmt(0) gives 9 bytes: "1.8000001" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fe66666 = 1.8 +fI[1] = #3fe66667 = 1.8000001 +fI[1] == strtof + + +Input: -1.8 +strtof consumes 4 bytes and returns -1.8 = #bfe66666 +g_ffmt(0) gives 4 bytes: "-1.8" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfe66667 = -1.8000001 +fI[1] = #bfe66666 = -1.8 +fI[1] == strtof + + +Input: 1.9 +strtof consumes 3 bytes and returns 1.9000001 = #3ff33334 +g_ffmt(0) gives 9 bytes: "1.9000001" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3ff33333 = 1.9 +fI[1] = #3ff33334 = 1.9000001 +fI[1] == strtof + + +Input: -1.9 +strtof consumes 4 bytes and returns -1.9 = #bff33333 +g_ffmt(0) gives 4 bytes: "-1.9" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bff33334 = -1.9000001 +fI[1] = #bff33333 = -1.9 +fI[1] == strtof + +Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity) + +Input: 1.1 +strtof consumes 3 bytes and returns 1.0999999 = #3f8ccccc +g_ffmt(0) gives 9 bytes: "1.0999999" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3f8ccccc = 1.0999999 +fI[1] = #3f8ccccd = 1.1 +fI[0] == strtof + + +Input: -1.1 +strtof consumes 4 bytes and returns -1.1 = #bf8ccccd +g_ffmt(0) gives 4 bytes: "-1.1" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bf8ccccd = -1.1 +fI[1] = #bf8ccccc = -1.0999999 +fI[0] == strtof + + +Input: 1.2 +strtof consumes 3 bytes and returns 1.1999999 = #3f999999 +g_ffmt(0) gives 9 bytes: "1.1999999" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3f999999 = 1.1999999 +fI[1] = #3f99999a = 1.2 +fI[0] == strtof + + +Input: -1.2 +strtof consumes 4 bytes and returns -1.2 = #bf99999a +g_ffmt(0) gives 4 bytes: "-1.2" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bf99999a = -1.2 +fI[1] = #bf999999 = -1.1999999 +fI[0] == strtof + + +Input: 1.3 +strtof consumes 3 bytes and returns 1.3 = #3fa66666 +g_ffmt(0) gives 3 bytes: "1.3" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fa66666 = 1.3 +fI[1] = #3fa66667 = 1.3000001 +fI[0] == strtof + + +Input: -1.3 +strtof consumes 4 bytes and returns -1.3000001 = #bfa66667 +g_ffmt(0) gives 10 bytes: "-1.3000001" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfa66667 = -1.3000001 +fI[1] = #bfa66666 = -1.3 +fI[0] == strtof + + +Input: 1.4 +strtof consumes 3 bytes and returns 1.4 = #3fb33333 +g_ffmt(0) gives 3 bytes: "1.4" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fb33333 = 1.4 +fI[1] = #3fb33334 = 1.4000001 +fI[0] == strtof + + +Input: -1.4 +strtof consumes 4 bytes and returns -1.4000001 = #bfb33334 +g_ffmt(0) gives 10 bytes: "-1.4000001" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfb33334 = -1.4000001 +fI[1] = #bfb33333 = -1.4 +fI[0] == strtof + + +Input: 1.5 +strtof consumes 3 bytes and returns 1.5 = #3fc00000 +g_ffmt(0) gives 3 bytes: "1.5" + +strtoIf returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtof + + +Input: -1.5 +strtof consumes 4 bytes and returns -1.5 = #bfc00000 +g_ffmt(0) gives 4 bytes: "-1.5" + +strtoIf returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtof + + +Input: 1.6 +strtof consumes 3 bytes and returns 1.5999999 = #3fcccccc +g_ffmt(0) gives 9 bytes: "1.5999999" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3fcccccc = 1.5999999 +fI[1] = #3fcccccd = 1.6 +fI[0] == strtof + + +Input: -1.6 +strtof consumes 4 bytes and returns -1.6 = #bfcccccd +g_ffmt(0) gives 4 bytes: "-1.6" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bfcccccd = -1.6 +fI[1] = #bfcccccc = -1.5999999 +fI[0] == strtof + + +Input: 1.7 +strtof consumes 3 bytes and returns 1.6999999 = #3fd99999 +g_ffmt(0) gives 9 bytes: "1.6999999" + +strtoIf returns 33, consuming 3 bytes. +fI[0] = #3fd99999 = 1.6999999 +fI[1] = #3fd9999a = 1.7 +fI[0] == strtof + + +Input: -1.7 +strtof consumes 4 bytes and returns -1.7 = #bfd9999a +g_ffmt(0) gives 4 bytes: "-1.7" + +strtoIf returns 41, consuming 4 bytes. +fI[0] = #bfd9999a = -1.7 +fI[1] = #bfd99999 = -1.6999999 +fI[0] == strtof + + +Input: 1.8 +strtof consumes 3 bytes and returns 1.8 = #3fe66666 +g_ffmt(0) gives 3 bytes: "1.8" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3fe66666 = 1.8 +fI[1] = #3fe66667 = 1.8000001 +fI[0] == strtof + + +Input: -1.8 +strtof consumes 4 bytes and returns -1.8000001 = #bfe66667 +g_ffmt(0) gives 10 bytes: "-1.8000001" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bfe66667 = -1.8000001 +fI[1] = #bfe66666 = -1.8 +fI[0] == strtof + + +Input: 1.9 +strtof consumes 3 bytes and returns 1.9 = #3ff33333 +g_ffmt(0) gives 3 bytes: "1.9" + +strtoIf returns 17, consuming 3 bytes. +fI[0] = #3ff33333 = 1.9 +fI[1] = #3ff33334 = 1.9000001 +fI[0] == strtof + + +Input: -1.9 +strtof consumes 4 bytes and returns -1.9000001 = #bff33334 +g_ffmt(0) gives 10 bytes: "-1.9000001" + +strtoIf returns 25, consuming 4 bytes. +fI[0] = #bff33334 = -1.9000001 +fI[1] = #bff33333 = -1.9 +fI[0] == strtof + diff -Nru mlton-20130715/runtime/gdtoa/test/ftest.c mlton-20210117+dfsg/runtime/gdtoa/test/ftest.c --- mlton-20130715/runtime/gdtoa/test/ftest.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/ftest.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,162 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998-2001 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* Test program for g_ffmt, strtof, strtoIf, strtopf, and strtorf. + * + * Inputs (on stdin): + * r rounding_mode + * n ndig + * number + * #hex + * + * rounding_mode values: + * 0 = toward zero + * 1 = nearest + * 2 = toward +Infinity + * 3 = toward -Infinity + * + * where number is a decimal floating-point number, + * hex is a string of <= 8 Hex digits for the internal representation + * of the number, and ndig is a parameters to g_ffmt. + */ + +#include "gdtoa.h" +#include +#include +#include + + extern int getround ANSI((int,char*)); + + static char ibuf[2048], obuf[2048], obuf1[2048]; + +#define UL (unsigned long) +typedef union { float f; ULong L; } Uf; + + int +main(Void) +{ + Uf fI[2], u; + char *s, *se, *se1; + float f1; + int dItry, i, i1, ndig = 0, nik, nike, r = 1; + + while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) { + while(*s <= ' ') + if (!*s++) + continue; + dItry = 0; + switch(*s) { + case 'r': + r = getround(r, s); + continue; + case 'n': + i = s[1]; + if (i <= ' ' || (i >= '0' && i <= '9')) { + ndig = atoi(s+1); + continue; + } + break; /* nan? */ + case '#': + /* sscanf(s+1, "%lx", &u.L); */ + u.L = (ULong)strtoul(s+1, &se, 16); + printf("\nInput: %s", ibuf); + printf(" --> f = #%lx\n", UL u.L); + i = 0; + goto fmt_test; + } + dItry = 1; + printf("\nInput: %s", ibuf); + i = strtorf(ibuf, &se, r, &u.f); + if (r == 1) { + if (u.f != (i1 = strtopf(ibuf, &se1, &f1), f1) + || se != se1 || i != i1) { + printf("***strtopf and strtorf disagree!!\n"); + if (u.f != f1) + printf("\tf1 = %g\n", (double)f1); + if (i != i1) + printf("\ti = %d but i1 = %d\n", i, i1); + if (se != se1) + printf("se - se1 = %d\n", (int)(se-se1)); + } + if (u.f != strtof(ibuf, &se1) || se != se1) + printf("***strtof and strtorf disagree!\n"); + } + printf("strtof consumes %d bytes and returns %.8g = #%lx\n", + (int)(se-ibuf), u.f, UL u.L); + fmt_test: + se = g_ffmt(obuf, &u.f, ndig, sizeof(obuf)); + printf("g_ffmt(%d) gives %d bytes: \"%s\"\n\n", + ndig, (int)(se-obuf), se ? obuf : ""); + se1 = g_ffmt_p(obuf1, &u.f, ndig, sizeof(obuf1), 0); + if (se1 - obuf1 != se - obuf || strcmp(obuf, obuf1)) + printf("Botch: g_ffmt_p gives \"%s\" rather than \"%s\"\n", + obuf1, obuf); + if (!dItry) + continue; + printf("strtoIf returns %d,", strtoIf(ibuf, &se, &fI[0].f, &fI[1].f)); + printf(" consuming %d bytes.\n", (int)(se-ibuf)); + if (fI[0].f == fI[1].f) { + if (fI[0].f == u.f) + printf("fI[0] == fI[1] == strtof\n"); + else + printf("fI[0] == fI[1] = #%lx = %.8g\n", + UL fI[0].L, fI[0].f); + } + else { + printf("fI[0] = #%lx = %.8g\nfI[1] = #%lx = %.8g\n", + UL fI[0].L, fI[0].f, + UL fI[1].L, fI[1].f); + if (fI[0].f == u.f) + printf("fI[0] == strtof\n"); + else if (fI[1].f == u.f) + printf("fI[1] == strtof\n"); + else + printf("**** Both differ from strtof ****\n"); + } + printf("\n"); + switch(i & STRTOG_Retmask) { + case STRTOG_Infinite: + for(nik = 0; nik < 6; ++nik) { + se1 = g_ffmt_p(obuf1, &u.f, ndig, sizeof(obuf1), nik); + printf("g_ffmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + break; + case STRTOG_NaN: + case STRTOG_NaNbits: + for(i = 0; i < 3; ++i) + for(nik = 6*i, nike = nik + 3; nik < nike; ++nik) { + se1 = g_ffmt_p(obuf1, &u.f, ndig, sizeof(obuf1), nik); + printf("g_ffmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + } + } + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/test/getround.c mlton-20210117+dfsg/runtime/gdtoa/test/getround.c --- mlton-20130715/runtime/gdtoa/test/getround.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/getround.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,90 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include +#include + +static char *dir[4] = { "toward zero", "nearest", "toward +Infinity", + "toward -Infinity" }; + +#ifdef Honor_FLT_ROUNDS +#include +static int fe_conv[4] = {FE_TOWARDZERO, FE_TONEAREST, FE_UPWARD, FE_DOWNWARD }; +#endif + + int +#ifdef KR_headers +getround(r, s) int r; char *s; +#else +getround(int r, char *s) +#endif +{ + int i; + + while(*++s <= ' ') { + if (!*s) { + printf("Current round mode for strtor... is %d (%s).\n", + r, dir[r]); + return r; + } + } + i = atoi(s); + if (i >= 0 && i < 4) { + printf("Rounding mode for strtor... "); + if (i == r) + printf("was and is %d (%s)\n", i, dir[i]); + else + printf("changed from %d (%s) to %d (%s)\n", + r, dir[r], i, dir[i]); +#ifdef Honor_FLT_ROUNDS + fesetround(fe_conv[i]); +#endif + return i; + } + printf("Bad rounding direction %d: choose among\n", i); + for(i = 0; i < 4; i++) + printf("\t%d (%s)\n", i, dir[i]); + printf("Leaving rounding mode for strtor... at %d (%s)\n", r, dir[r]); + return r; + } + +#ifdef USE_MY_LOCALE +#include + + struct lconv * +localeconv(void) +{ + static struct lconv mylocale; + mylocale.decimal_point = ""; + return &mylocale; + } +#endif + diff -Nru mlton-20130715/runtime/gdtoa/test/makefile mlton-20210117+dfsg/runtime/gdtoa/test/makefile --- mlton-20130715/runtime/gdtoa/test/makefile 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/makefile 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,172 @@ +# /**************************************************************** +# Copyright (C) 1998, 2000 by Lucent Technologies +# All Rights Reserved +# +# Permission to use, copy, modify, and distribute this software and +# its documentation for any purpose and without fee is hereby +# granted, provided that the above copyright notice appear in all +# copies and that both that the copyright notice and this +# permission notice and warranty disclaimer appear in supporting +# documentation, and that the name of Lucent or any of its entities +# not be used in advertising or publicity pertaining to +# distribution of the software without specific, written prior +# permission. +# +# LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +# IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +# SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +# THIS SOFTWARE. +# +# ****************************************************************/ + +.SUFFIXES: .c .o +CC = cc +CFLAGS = -g -I.. +A = ../gdtoa.a +L = -lm +L1 = +#use "L1=-lm" when compiled with -DHonor_FLTP_ROUNDS or -DUSE_LOCALE +INFFIX = | sed 's/[Ii][Nn][Ff][intyINTY]*/Infinity/g' + +.c.o: + $(CC) -c $(CFLAGS) $*.c + +all: dt dItest ddtest dtest ftest Qtest xLtest xtest ddtestsi dItestsi tests + +dt = dt.o $A +dt: $(dt) + $(CC) -o dt $(dt) $L + +dItest = dItest.o getround.o $A +dItest: $(dItest) + $(CC) -o dItest $(dItest) $(L1) + +ddtest = ddtest.o getround.o $A +ddtest: $(ddtest) + $(CC) -o ddtest $(ddtest) $L + +dtest = dtest.o getround.o $A +dtest: $(dtest) + $(CC) -o dtest $(dtest) $L + +ftest = ftest.o getround.o $A +ftest: $(ftest) + $(CC) -o ftest $(ftest) $(L1) + +Qtest = Qtest.o getround.o $A +Qtest: $(Qtest) + $(CC) -o Qtest $(Qtest) $(L1) + +xtest = xtest.o getround.o $A +xtest: $(xtest) + $(CC) -o xtest $(xtest) $(L1) + +xLtest = xLtest.o getround.o $A +xLtest: $(xLtest) + $(CC) -o xLtest $(xLtest) $(L1) + +strtopddSI.o: strtopddSI.c ../strtopdd.c + +strtorddSI.o: strtorddSI.c ../strtordd.c + +strtodISI.o: strtodISI.c ../strtodI.c + +strtoIddSI.o: strtoIddSI.c ../strtoIdd.c + +strtoIdSI.o: strtoIdSI.c ../strtoId.c + +ddtestsi = ddtest.o strtopddSI.o strtorddSI.o strtoIddSI.o getround.o $A +ddtestsi: $(ddtestsi) + $(CC) -o ddtestsi $(ddtestsi) $L + +dItestsi = dItest.o strtodISI.o strtoIdSI.o getround.o $A +dItestsi: $(dItestsi) + $(CC) -o dItestsi $(dItestsi) $(L1) + +strtodt = strtodt.o $A +strtodt: $(strtodt) + $(CC) -o strtodt $(strtodt) $L + +pftest = pftest.o $A +pftest: ../Printf $(pftest) + $(CC) -o pftest $(pftest) $L + +## On Intel (and Intel-like) systems using extended-precision registers +## for double-precision (C type double) computations that sometimes suffer +## double rounding errors, the test below involving strtodt generally shows +## five lines of unexpected results. Variant strtodtnrp uses ../strtodrnp.c +## (which does all computations in integer arithmetic) and should show no +## unexpected results. + +strtodtnrp = strtodt.o ../strtodnrp.c $A +strtodtnrp: $(strtodtnrp) + $(CC) -o strtodtnrp $(strtodtnrp) + +# xQtest generates cp commands that depend on sizeof(long double). +# See the source for details. If you know better, create Q.out, +# x.out and xL.out by copying the relevant *.ou0 or *.ou1 files +# to the corresponding .out files. In short, the *.ou0 files are +# for long double == double; x.ou1 and xL.ou1 are for +# long double == extended (a la 80x87 and MC680x0), and Q.ou1 is +# for long double == quad. + +Q.out x.out xL.out: + $(CC) -o xQtest xQtest.c + ./xQtest | sh + rm -f xQtest xQtest.o + +## The rmdir below will fail if any test results differ. + +tests: Q.out x.out xL.out dt dItest ddtest dtest ftest Qtest xLtest xtest ddtestsi dItestsi strtodt strtodtnrp + mkdir bad + cat testnos testnos1 | ./dt $(INFFIX) >zap 2>&1 + cmp dtst.out zap || mv zap bad/dtst.out + ./dItest zap 2>&1 + cmp dI.out zap || mv zap bad/dI.out + ./dItestsi zap 2>&1 + cmp dIsi.out zap || mv zap bad/dIsi.out + ./ddtestsi zap 2>&1 + cmp ddsi.out zap || mv zap bad/ddsi.out + for i in dd d f x xL Q; do cat testnos rtestnos | \ + ./"$$i"test $(INFFIX) >zap 2>&1;\ + cmp $$i.out zap || mv zap bad/$$i.out; done + ./strtodt testnos3 >bad/strtodt.out && rm bad/strtodt.out || \ + cat bad/strtodt.out + ./strtodtnrp testnos3 >bad/strtodtnrp.out && rm bad/strtodtnrp.out || \ + cat bad/strtodtnrp.out + rmdir bad 2>/dev/null || \ + (cd bad; for i in *; do cmp -s $$i ../obad/$$i && rm $$i;done; cd ..; rmdir bad) + touch tests + +# To test Printf in ../gdtoa.a, "make pf_test" and perhaps "make pf_testLq" +# (if both long double and quad are desired and available). + +pf_test: pftest + ./pftest zap + cmp pftest.out zap && rm zap + +pf_testLq: pftest + ./pftest zap + cmp pftestLq.out zap && rm zap + +xs0 = README Q.ou0 Q.ou1 Qtest.c d.out dI.out dIsi.out dItest.c dd.out\ + ddsi.out ddtest.c dt.c dtest.c dtst.out f.out ftest.c\ + getround.c makefile pfLqtestnos pftest.c pftestQ.out\ + pftestx.out pftestLq.out pftestnos rtestnos strtoIdSI.c\ + strtoIddSI.c strtodISI.c strtodt.c strtopddSI.c strtorddSI.c\ + testnos testnos1 testnos3 x.ou0 x.ou1 xL.ou0 xL.ou1 xLtest.c\ + xQtest.c xtest.c + +# invoke "make -r xsum.out" +xsum.out: xsum0.out $(xs0) + xsum $(xs0) >xsum1.out + cmp xsum0.out xsum1.out && mv xsum1.out xsum.out || diff xsum[01].out + +clean: + rm -f *.[ao] dt *test *testsi pftest.out strtodt strtodtnrp xsum.out\ + xsum1.out tests zap x.out xL.out Q.out + rm -rf bad diff -Nru mlton-20130715/runtime/gdtoa/test/obad/strtodt.out mlton-20210117+dfsg/runtime/gdtoa/test/obad/strtodt.out --- mlton-20130715/runtime/gdtoa/test/obad/strtodt.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/obad/strtodt.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,6 @@ +Line 31 of testnos3: got 4585747a b143e354; expected 4585747a b143e353 +Line 46 of testnos3: got 64fdcf7d f8f573b8; expected 64fdcf7d f8f573b7 +Line 47 of testnos3: got 650dcf7d f8f573b8; expected 650dcf7d f8f573b7 +Line 72 of testnos3: got 3cc70385 6844bdbe; expected 3cc70385 6844bdbf +Line 73 of testnos3: got 3cb70385 6844bdbe; expected 3cb70385 6844bdbf +5 bad conversions diff -Nru mlton-20130715/runtime/gdtoa/test/obad/xL.out mlton-20210117+dfsg/runtime/gdtoa/test/obad/xL.out --- mlton-20130715/runtime/gdtoa/test/obad/xL.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/obad/xL.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1471 @@ + +Input: 1.23 + +strtoxL consumes 4 bytes and returns 33 +with bits = #3fff0000 9d70a3d7 a3d70a4 +printf("%.21Lg") gives 7.73283722915781506499e-4933 +g_xLfmt(0) gives 4 bytes: "1.23" + +strtoIxL returns 33, consuming 4 bytes. +fI[0] = #3fff0000 9d70a3d7 a3d70a3 += 7.73283722915781506134e-4933 +fI[1] = #3fff0000 9d70a3d7 a3d70a4 += 7.73283722915781506499e-4933 +fI[1] == strtoxL + + +Input: 1.23e+20 + +strtoxL consumes 8 bytes and returns 1 +with bits = #40410000 d55ef90a 2da18000 +printf("%.21Lg") gives 2.24239113715721119512e-4932 +g_xLfmt(0) gives 8 bytes: "1.23e+20" + +strtoIxL returns 1, consuming 8 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.23e-20 + +strtoxL consumes 8 bytes and returns 17 +with bits = #3fbc0000 e857267b b3a984f2 +printf("%.21Lg") gives 2.74065070995958800375e-4932 +g_xLfmt(0) gives 8 bytes: "1.23e-20" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #3fbc0000 e857267b b3a984f2 += 2.74065070995958800375e-4932 +fI[1] = #3fbc0000 e857267b b3a984f3 += 2.74065070995958800411e-4932 +fI[0] == strtoxL + + +Input: 1.23456789 + +strtoxL consumes 10 bytes and returns 33 +with bits = #3fff0000 9e065214 1ef0dbf6 +printf("%.21Lg") gives 7.88641440242171807354e-4933 +g_xLfmt(0) gives 10 bytes: "1.23456789" + +strtoIxL returns 33, consuming 10 bytes. +fI[0] = #3fff0000 9e065214 1ef0dbf5 += 7.8864144024217180699e-4933 +fI[1] = #3fff0000 9e065214 1ef0dbf6 += 7.88641440242171807354e-4933 +fI[1] == strtoxL + + +Input: 1.23456589e+20 + +strtoxL consumes 14 bytes and returns 1 +with bits = #40410000 d629bd33 5ccba00 +printf("%.21Lg") gives 2.26319561227049478508e-4932 +g_xLfmt(0) gives 14 bytes: "1.23456589e+20" + +strtoIxL returns 1, consuming 14 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.23e+30 + +strtoxL consumes 8 bytes and returns 17 +with bits = #40620000 f8658274 7dbc824a +printf("%.21Lg") gives 3.16238691003557160385e-4932 +g_xLfmt(0) gives 8 bytes: "1.23e+30" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #40620000 f8658274 7dbc824a += 3.16238691003557160385e-4932 +fI[1] = #40620000 f8658274 7dbc824b += 3.16238691003557160421e-4932 +fI[0] == strtoxL + + +Input: 1.23e-30 + +strtoxL consumes 8 bytes and returns 17 +with bits = #3f9b0000 c794337a 808554eb +printf("%.21Lg") gives 1.88012249978407873966e-4932 +g_xLfmt(0) gives 8 bytes: "1.23e-30" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #3f9b0000 c794337a 808554eb += 1.88012249978407873966e-4932 +fI[1] = #3f9b0000 c794337a 808554ec += 1.88012249978407874003e-4932 +fI[0] == strtoxL + + +Input: 1.23456789e-20 + +strtoxL consumes 14 bytes and returns 17 +with bits = #3fbc0000 e9340a38 f3d6d352 +printf("%.21Lg") gives 2.76331470044569174626e-4932 +g_xLfmt(0) gives 14 bytes: "1.23456789e-20" + +strtoIxL returns 17, consuming 14 bytes. +fI[0] = #3fbc0000 e9340a38 f3d6d352 += 2.76331470044569174626e-4932 +fI[1] = #3fbc0000 e9340a38 f3d6d353 += 2.76331470044569174663e-4932 +fI[0] == strtoxL + + +Input: 1.23456789e-30 + +strtoxL consumes 14 bytes and returns 17 +with bits = #3f9b0000 c851f19d decca8fc +printf("%.21Lg") gives 1.89959071937101288293e-4932 +g_xLfmt(0) gives 14 bytes: "1.23456789e-30" + +strtoIxL returns 17, consuming 14 bytes. +fI[0] = #3f9b0000 c851f19d decca8fc += 1.89959071937101288293e-4932 +fI[1] = #3f9b0000 c851f19d decca8fd += 1.89959071937101288329e-4932 +fI[0] == strtoxL + + +Input: 1.234567890123456789 + +strtoxL consumes 20 bytes and returns 17 +with bits = #3fff0000 9e065214 62cfdb8d +printf("%.21Lg") gives 7.88641440657246265535e-4933 +g_xLfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIxL returns 17, consuming 20 bytes. +fI[0] = #3fff0000 9e065214 62cfdb8d += 7.88641440657246265535e-4933 +fI[1] = #3fff0000 9e065214 62cfdb8e += 7.886414406572462659e-4933 +fI[0] == strtoxL + + +Input: 1.23456789012345678901234567890123456789 + +strtoxL consumes 40 bytes and returns 17 +with bits = #3fff0000 9e065214 62cfdb8d +printf("%.21Lg") gives 7.88641440657246265535e-4933 +g_xLfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIxL returns 17, consuming 40 bytes. +fI[0] = #3fff0000 9e065214 62cfdb8d += 7.88641440657246265535e-4933 +fI[1] = #3fff0000 9e065214 62cfdb8e += 7.886414406572462659e-4933 +fI[0] == strtoxL + + +Input: 1.23e306 + +strtoxL consumes 8 bytes and returns 17 +with bits = #43f70000 e033b668 e30fa6d5 +printf("%.21Lg") gives 2.52688323155200052759e-4932 +g_xLfmt(0) gives 9 bytes: "1.23e+306" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #43f70000 e033b668 e30fa6d5 += 2.52688323155200052759e-4932 +fI[1] = #43f70000 e033b668 e30fa6d6 += 2.52688323155200052796e-4932 +fI[0] == strtoxL + + +Input: 1.23e-306 + +strtoxL consumes 9 bytes and returns 33 +with bits = #3c060000 dd1dc2ed 1cb73f25 +printf("%.21Lg") gives 2.44583168427704605801e-4932 +g_xLfmt(0) gives 9 bytes: "1.23e-306" + +strtoIxL returns 33, consuming 9 bytes. +fI[0] = #3c060000 dd1dc2ed 1cb73f24 += 2.44583168427704605765e-4932 +fI[1] = #3c060000 dd1dc2ed 1cb73f25 += 2.44583168427704605801e-4932 +fI[1] == strtoxL + + +Input: 1.23e-320 + +strtoxL consumes 9 bytes and returns 33 +with bits = #3bd80000 9b98c371 844c3f1a +printf("%.21Lg") gives 7.24867657578821329238e-4933 +g_xLfmt(0) gives 9 bytes: "1.23e-320" + +strtoIxL returns 33, consuming 9 bytes. +fI[0] = #3bd80000 9b98c371 844c3f19 += 7.24867657578821328874e-4933 +fI[1] = #3bd80000 9b98c371 844c3f1a += 7.24867657578821329238e-4933 +fI[1] == strtoxL + + +Input: 1.23e-20 + +strtoxL consumes 8 bytes and returns 17 +with bits = #3fbc0000 e857267b b3a984f2 +printf("%.21Lg") gives 2.74065070995958800375e-4932 +g_xLfmt(0) gives 8 bytes: "1.23e-20" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #3fbc0000 e857267b b3a984f2 += 2.74065070995958800375e-4932 +fI[1] = #3fbc0000 e857267b b3a984f3 += 2.74065070995958800411e-4932 +fI[0] == strtoxL + + +Input: 1.23456789e307 + +strtoxL consumes 14 bytes and returns 17 +with bits = #43fb0000 8ca58a5e d766de75 +printf("%.21Lg") gives 3.32182163192682931854e-4933 +g_xLfmt(0) gives 15 bytes: "1.23456789e+307" + +strtoIxL returns 17, consuming 14 bytes. +fI[0] = #43fb0000 8ca58a5e d766de75 += 3.32182163192682931854e-4933 +fI[1] = #43fb0000 8ca58a5e d766de76 += 3.32182163192682932219e-4933 +fI[0] == strtoxL + + +Input: 1.23456589e-307 + +strtoxL consumes 15 bytes and returns 17 +with bits = #3c030000 b18cb5dc c22fd369 +printf("%.21Lg") gives 1.30149245314004923345e-4932 +g_xLfmt(0) gives 15 bytes: "1.23456589e-307" + +strtoIxL returns 17, consuming 15 bytes. +fI[0] = #3c030000 b18cb5dc c22fd369 += 1.30149245314004923345e-4932 +fI[1] = #3c030000 b18cb5dc c22fd36a += 1.30149245314004923382e-4932 +fI[0] == strtoxL + + +Input: 1.234567890123456789 + +strtoxL consumes 20 bytes and returns 17 +with bits = #3fff0000 9e065214 62cfdb8d +printf("%.21Lg") gives 7.88641440657246265535e-4933 +g_xLfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIxL returns 17, consuming 20 bytes. +fI[0] = #3fff0000 9e065214 62cfdb8d += 7.88641440657246265535e-4933 +fI[1] = #3fff0000 9e065214 62cfdb8e += 7.886414406572462659e-4933 +fI[0] == strtoxL + + +Input: 1.234567890123456789e301 + +strtoxL consumes 24 bytes and returns 33 +with bits = #43e70000 937a8baf ab20980c +printf("%.21Lg") gives 5.11635766619117643114e-4933 +g_xLfmt(0) gives 25 bytes: "1.234567890123456789e+301" + +strtoIxL returns 33, consuming 24 bytes. +fI[0] = #43e70000 937a8baf ab20980b += 5.1163576661911764275e-4933 +fI[1] = #43e70000 937a8baf ab20980c += 5.11635766619117643114e-4933 +fI[1] == strtoxL + + +Input: 1.234567890123456789e-301 + +strtoxL consumes 25 bytes and returns 33 +with bits = #3c170000 a953271a 5d069ad9 +printf("%.21Lg") gives 1.08545540462853463561e-4932 +g_xLfmt(0) gives 25 bytes: "1.234567890123456789e-301" + +strtoIxL returns 33, consuming 25 bytes. +fI[0] = #3c170000 a953271a 5d069ad8 += 1.08545540462853463524e-4932 +fI[1] = #3c170000 a953271a 5d069ad9 += 1.08545540462853463561e-4932 +fI[1] == strtoxL + + +Input: 1.234567890123456789e-321 + +strtoxL consumes 25 bytes and returns 33 +with bits = #3bd40000 f9e11b4c ea6dcce9 +printf("%.21Lg") gives 3.20133479952876185942e-4932 +g_xLfmt(0) gives 25 bytes: "1.234567890123456789e-321" + +strtoIxL returns 33, consuming 25 bytes. +fI[0] = #3bd40000 f9e11b4c ea6dcce8 += 3.20133479952876185905e-4932 +fI[1] = #3bd40000 f9e11b4c ea6dcce9 += 3.20133479952876185942e-4932 +fI[1] == strtoxL + + +Input: 1e23 + +strtoxL consumes 4 bytes and returns 1 +with bits = #404b0000 a968163f a57b400 +printf("%.21Lg") gives 1.08760331670538037378e-4932 +g_xLfmt(0) gives 5 bytes: "1e+23" + +strtoIxL returns 1, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1e310 + +strtoxL consumes 5 bytes and returns 33 +with bits = #44040000 de81e40a 34bcf50 +printf("%.21Lg") gives 2.48237171106260601618e-4932 +g_xLfmt(0) gives 6 bytes: "1e+310" + +strtoIxL returns 33, consuming 5 bytes. +fI[0] = #44040000 de81e40a 34bcf4f += 2.48237171106260601582e-4932 +fI[1] = #44040000 de81e40a 34bcf50 += 2.48237171106260601618e-4932 +fI[1] == strtoxL + + +Input: 9.0259718793241475e-277 + +strtoxL consumes 23 bytes and returns 33 +with bits = #3c690000 ffffffff fffffcf7 +printf("%.21Lg") gives 3.36210314311209322303e-4932 +g_xLfmt(0) gives 23 bytes: "9.0259718793241475e-277" + +strtoIxL returns 33, consuming 23 bytes. +fI[0] = #3c690000 ffffffff fffffcf6 += 3.36210314311209322267e-4932 +fI[1] = #3c690000 ffffffff fffffcf7 += 3.36210314311209322303e-4932 +fI[1] == strtoxL + + +Input: 9.025971879324147880346310405869e-277 + +strtoxL consumes 37 bytes and returns 17 +with bits = #3c6a0000 80000000 0 +printf("%.21Lg") gives 3.36210314311209350626e-4932 +g_xLfmt(0) gives 26 bytes: "9.0259718793241478803e-277" + +strtoIxL returns 17, consuming 37 bytes. +fI[0] = #3c6a0000 80000000 0 += 3.36210314311209350626e-4932 +fI[1] = #3c6a0000 80000000 1 += 3.64519953188247460253e-4951 +fI[0] == strtoxL + + +Input: 9.025971879324147880346310405868e-277 + +strtoxL consumes 37 bytes and returns 33 +with bits = #3c6a0000 80000000 0 +printf("%.21Lg") gives 3.36210314311209350626e-4932 +g_xLfmt(0) gives 26 bytes: "9.0259718793241478803e-277" + +strtoIxL returns 33, consuming 37 bytes. +fI[0] = #3c690000 ffffffff ffffffff += 3.3621031431120935059e-4932 +fI[1] = #3c6a0000 80000000 0 += 3.36210314311209350626e-4932 +fI[1] == strtoxL + + +Input: 2.2250738585072014e-308 + +strtoxL consumes 23 bytes and returns 17 +with bits = #3c010000 80000000 46 +printf("%.21Lg") gives 2.55163967231773222177e-4949 +g_xLfmt(0) gives 23 bytes: "2.2250738585072014e-308" + +strtoIxL returns 17, consuming 23 bytes. +fI[0] = #3c010000 80000000 46 += 2.55163967231773222177e-4949 +fI[1] = #3c010000 80000000 47 += 2.5880916676365569678e-4949 +fI[0] == strtoxL + + +Input: 2.2250738585072013e-308 + +strtoxL consumes 23 bytes and returns 17 +with bits = #3c000000 ffffffff fffffd4f +printf("%.21Lg") gives 3.36210314311209325511e-4932 +g_xLfmt(0) gives 23 bytes: "2.2250738585072013e-308" + +strtoIxL returns 17, consuming 23 bytes. +fI[0] = #3c000000 ffffffff fffffd4f += 3.36210314311209325511e-4932 +fI[1] = #3c000000 ffffffff fffffd50 += 3.36210314311209325547e-4932 +fI[0] == strtoxL + + +Input: 3.2649476e14 + +strtoxL consumes 12 bytes and returns 1 +with bits = #402f0000 9478fe18 6d000000 +printf("%.21Lg") gives 5.3774284544988676575e-4933 +g_xLfmt(0) gives 13 bytes: "3.2649476e+14" + +strtoIxL returns 1, consuming 12 bytes. +fI[0] == fI[1] == strtoxL + +Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 8ccccccc cccccccc +printf("%.21Lg") gives 3.36210314311209350335e-4933 +g_xLfmt(0) gives 21 bytes: "1.0999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] = #3fff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[0] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 8ccccccc cccccccc +printf("%.21Lg") gives 3.36210314311209350335e-4933 +g_xLfmt(0) gives 22 bytes: "-1.0999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] = #bfff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 99999999 99999999 +printf("%.21Lg") gives 6.72420628622418701034e-4933 +g_xLfmt(0) gives 21 bytes: "1.1999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] = #3fff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[0] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 99999999 99999999 +printf("%.21Lg") gives 6.72420628622418701034e-4933 +g_xLfmt(0) gives 22 bytes: "-1.1999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] = #bfff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 3 bytes: "1.3" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] = #3fff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[0] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 4 bytes: "-1.3" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[1] = #bfff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 3 bytes: "1.4" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] = #3fff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[0] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 4 bytes: "-1.4" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[1] = #bfff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 cccccccc cccccccc +printf("%.21Lg") gives 2.01726188586725610347e-4932 +g_xLfmt(0) gives 21 bytes: "1.5999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] = #3fff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[0] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 cccccccc cccccccc +printf("%.21Lg") gives 2.01726188586725610347e-4932 +g_xLfmt(0) gives 22 bytes: "-1.5999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] = #bfff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 d9999999 99999999 +printf("%.21Lg") gives 2.35347220017846545417e-4932 +g_xLfmt(0) gives 21 bytes: "1.6999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] = #3fff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[0] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 d9999999 99999999 +printf("%.21Lg") gives 2.35347220017846545417e-4932 +g_xLfmt(0) gives 22 bytes: "-1.6999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] = #bfff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 3 bytes: "1.8" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] = #3fff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[0] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 4 bytes: "-1.8" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[1] = #bfff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 3 bytes: "1.9" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] = #3fff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[0] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 4 bytes: "-1.9" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[1] = #bfff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] == strtoxL + +Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 8ccccccc cccccccd +printf("%.21Lg") gives 3.36210314311209350699e-4933 +g_xLfmt(0) gives 3 bytes: "1.1" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] = #3fff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 8ccccccc cccccccd +printf("%.21Lg") gives 3.36210314311209350699e-4933 +g_xLfmt(0) gives 4 bytes: "-1.1" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] = #bfff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[0] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 99999999 9999999a +printf("%.21Lg") gives 6.72420628622418701398e-4933 +g_xLfmt(0) gives 3 bytes: "1.2" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] = #3fff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 99999999 9999999a +printf("%.21Lg") gives 6.72420628622418701398e-4933 +g_xLfmt(0) gives 4 bytes: "-1.2" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] = #bfff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[0] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 3 bytes: "1.3" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] = #3fff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[0] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 4 bytes: "-1.3" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[1] = #bfff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 3 bytes: "1.4" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] = #3fff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[0] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 4 bytes: "-1.4" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[1] = #bfff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 cccccccc cccccccd +printf("%.21Lg") gives 2.01726188586725610383e-4932 +g_xLfmt(0) gives 3 bytes: "1.6" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] = #3fff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 cccccccc cccccccd +printf("%.21Lg") gives 2.01726188586725610383e-4932 +g_xLfmt(0) gives 4 bytes: "-1.6" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] = #bfff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[0] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 d9999999 9999999a +printf("%.21Lg") gives 2.35347220017846545453e-4932 +g_xLfmt(0) gives 3 bytes: "1.7" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] = #3fff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 d9999999 9999999a +printf("%.21Lg") gives 2.35347220017846545453e-4932 +g_xLfmt(0) gives 4 bytes: "-1.7" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] = #bfff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[0] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 3 bytes: "1.8" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] = #3fff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[0] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 4 bytes: "-1.8" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[1] = #bfff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 3 bytes: "1.9" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] = #3fff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[0] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 4 bytes: "-1.9" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[1] = #bfff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] == strtoxL + +Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 8ccccccc cccccccd +printf("%.21Lg") gives 3.36210314311209350699e-4933 +g_xLfmt(0) gives 3 bytes: "1.1" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] = #3fff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 8ccccccc cccccccc +printf("%.21Lg") gives 3.36210314311209350335e-4933 +g_xLfmt(0) gives 22 bytes: "-1.0999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] = #bfff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 99999999 9999999a +printf("%.21Lg") gives 6.72420628622418701398e-4933 +g_xLfmt(0) gives 3 bytes: "1.2" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] = #3fff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 99999999 99999999 +printf("%.21Lg") gives 6.72420628622418701034e-4933 +g_xLfmt(0) gives 22 bytes: "-1.1999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] = #bfff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 a6666666 66666667 +printf("%.21Lg") gives 1.0086309429336280521e-4932 +g_xLfmt(0) gives 21 bytes: "1.3000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] = #3fff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[1] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 4 bytes: "-1.3" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[1] = #bfff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 b3333333 33333334 +printf("%.21Lg") gives 1.3448412572448374028e-4932 +g_xLfmt(0) gives 21 bytes: "1.4000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] = #3fff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[1] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 4 bytes: "-1.4" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[1] = #bfff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 cccccccc cccccccd +printf("%.21Lg") gives 2.01726188586725610383e-4932 +g_xLfmt(0) gives 3 bytes: "1.6" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] = #3fff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 cccccccc cccccccc +printf("%.21Lg") gives 2.01726188586725610347e-4932 +g_xLfmt(0) gives 22 bytes: "-1.5999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] = #bfff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 d9999999 9999999a +printf("%.21Lg") gives 2.35347220017846545453e-4932 +g_xLfmt(0) gives 3 bytes: "1.7" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] = #3fff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 d9999999 99999999 +printf("%.21Lg") gives 2.35347220017846545417e-4932 +g_xLfmt(0) gives 22 bytes: "-1.6999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] = #bfff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 e6666666 66666667 +printf("%.21Lg") gives 2.68968251448967480523e-4932 +g_xLfmt(0) gives 21 bytes: "1.8000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] = #3fff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[1] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 4 bytes: "-1.8" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[1] = #bfff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 f3333333 33333334 +printf("%.21Lg") gives 3.02589282880088415593e-4932 +g_xLfmt(0) gives 21 bytes: "1.9000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] = #3fff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[1] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 4 bytes: "-1.9" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[1] = #bfff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] == strtoxL + +Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 8ccccccc cccccccc +printf("%.21Lg") gives 3.36210314311209350335e-4933 +g_xLfmt(0) gives 21 bytes: "1.0999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] = #3fff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[0] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 8ccccccc cccccccd +printf("%.21Lg") gives 3.36210314311209350699e-4933 +g_xLfmt(0) gives 4 bytes: "-1.1" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] = #bfff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[0] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 99999999 99999999 +printf("%.21Lg") gives 6.72420628622418701034e-4933 +g_xLfmt(0) gives 21 bytes: "1.1999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] = #3fff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[0] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 99999999 9999999a +printf("%.21Lg") gives 6.72420628622418701398e-4933 +g_xLfmt(0) gives 4 bytes: "-1.2" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] = #bfff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[0] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 3 bytes: "1.3" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] = #3fff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[0] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 a6666666 66666667 +printf("%.21Lg") gives 1.0086309429336280521e-4932 +g_xLfmt(0) gives 22 bytes: "-1.3000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[1] = #bfff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[0] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 3 bytes: "1.4" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] = #3fff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[0] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 b3333333 33333334 +printf("%.21Lg") gives 1.3448412572448374028e-4932 +g_xLfmt(0) gives 22 bytes: "-1.4000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[1] = #bfff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[0] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 cccccccc cccccccc +printf("%.21Lg") gives 2.01726188586725610347e-4932 +g_xLfmt(0) gives 21 bytes: "1.5999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] = #3fff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[0] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 cccccccc cccccccd +printf("%.21Lg") gives 2.01726188586725610383e-4932 +g_xLfmt(0) gives 4 bytes: "-1.6" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] = #bfff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[0] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 d9999999 99999999 +printf("%.21Lg") gives 2.35347220017846545417e-4932 +g_xLfmt(0) gives 21 bytes: "1.6999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] = #3fff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[0] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 d9999999 9999999a +printf("%.21Lg") gives 2.35347220017846545453e-4932 +g_xLfmt(0) gives 4 bytes: "-1.7" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] = #bfff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[0] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 3 bytes: "1.8" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] = #3fff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[0] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 e6666666 66666667 +printf("%.21Lg") gives 2.68968251448967480523e-4932 +g_xLfmt(0) gives 22 bytes: "-1.8000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[1] = #bfff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[0] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 3 bytes: "1.9" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] = #3fff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[0] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 f3333333 33333334 +printf("%.21Lg") gives 3.02589282880088415593e-4932 +g_xLfmt(0) gives 22 bytes: "-1.9000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[1] = #bfff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[0] == strtoxL + diff -Nru mlton-20130715/runtime/gdtoa/test/pfLqtestnos mlton-20210117+dfsg/runtime/gdtoa/test/pfLqtestnos --- mlton-20130715/runtime/gdtoa/test/pfLqtestnos 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/pfLqtestnos 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,13 @@ +%.8a 1.23 +%.7a +%.2a +%.La 1.23 +%.20Lqa 1.23 +%La 3e27 +%La 1.7e27 +%Lqa 3e48 +%Lqa 1e49 +1.5 +2.5 +4.5 +8.5 diff -Nru mlton-20130715/runtime/gdtoa/test/pftest.c mlton-20210117+dfsg/runtime/gdtoa/test/pftest.c --- mlton-20130715/runtime/gdtoa/test/pftest.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/pftest.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,158 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 2009 by David M. Gay +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +source-code copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation. + +THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +****************************************************************/ +#include "stdio1.h" +#include "gdtoa.h" +#include + +#undef allow_Quad +#undef want_Quad +#undef want_Ux +#define want_LD +typedef union Ud {double x; unsigned int u[2]; } Ud; +#ifdef __x86_64 /*{{*/ +#define want_Ux +#ifndef NO_GDTOA_i386_Quad /*{*/ +typedef union UQ {__float128 x; unsigned int u[4]; } UQ; +#define allow_Quad(x) x +#define want_Quad +#endif /*}*/ +#else /*}{*/ +#ifdef __i386 /*{{*/ +#define want_Ux +#else /*}{*/ +#ifdef __sparc /*{{*/ +typedef union UQ {long double x; unsigned int u[4]; } Ux; +#else /*}{*/ +#ifdef __INTEL_COMPILER /*{*/ +#undef want_Quad +#undef want_Ux +#undef want_LD +#endif /*}*/ +#endif /*}}*/ +#endif /*}}*/ +#endif /*}}*/ + +#ifndef allow_Quad +#define allow_Quad(x) /*nothing*/ +#endif + +#ifdef want_Ux /*{{*/ +typedef union Ux {long double x; unsigned short u[5]; } Ux; +#else /*}{*/ +#ifdef __sparc +#define want_Ux +#endif +#endif /*}}*/ + + int +main(void) +{ + Ud d; + allow_Quad(UQ q;) + char *b, buf[256], fmt[32], *s; +#ifdef want_Ux + Ux x; + x.x = 0.; +#endif + int k; + + k = 0; + strcpy(fmt, "%.g"); + d.x = 0.; + allow_Quad(q.x = 0.;) + while(fgets(buf, sizeof(buf), stdin)) { + for(b = buf; *b && *b != '\n'; ++b); + *b = 0; + if (b == buf) + continue; + b = buf; + if (*b == '%') { + for(k = 0; *b > ' '; ++b) +#ifdef want_LD /*{{*/ + switch(*b) { + case 'L': + k = 1; +#ifdef want_Quad + break; + case 'q': + if (k >= 1) + k = 2; +#endif + } +#else /*}{*/ + ; +#endif /*}}*/ + if (*b) + *b++ = 0; + if (b - buf < sizeof(fmt)) { + strcpy(fmt, buf); + } + } + if (*b) { + switch(k) { + case 0: + d.x = strtod(b,&s); + break; + case 1: +#ifdef want_Ux +#ifdef __sparc + strtopQ(b,&s,&x.x); +#else + strtopx(b,&s,&x.x); +#endif +#else + strtopQ(b,&s,&q.x); +#endif + break; + allow_Quad(case 2: strtopQ(b,&s,&q.x);) + } + if (*s) + printf("Ignoring \"%s\"\n", s); + } + switch(k) { + case 0: + printf("d.x = %.g = #%x %x; %s ==> ", d.x, d.u[1], d.u[0], fmt); + printf(fmt, d.x); + break; + case 1: +#ifdef __sparc + printf("x.x = %.Lg = #%x %x %x %x; %s ==> ", x.x, + x.u[0], x.u[1], x.u[2], x.u[3], fmt); +#else + printf("x.x = %.Lg = #%x %x %x %x %x; %s ==> ", x.x, + x.u[4], x.u[3], x.u[2], x.u[1], x.u[0], fmt); +#endif + printf(fmt, x.x); +#ifdef want_Quad + break; + case 2: + printf("q.x = %.Lqg = #%x %x %x %x; %s ==> ", q.x, + q.u[3], q.u[2], q.u[1], q.u[0], fmt); + printf(fmt, q.x); +#endif + } + putchar('\n'); + } + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/test/pftestLq.out mlton-20210117+dfsg/runtime/gdtoa/test/pftestLq.out --- mlton-20130715/runtime/gdtoa/test/pftestLq.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/pftestLq.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,13 @@ +d.x = 1.23 = #3ff3ae14 7ae147ae; %.8a ==> 0x1.3ae147aep+0 +d.x = 1.23 = #3ff3ae14 7ae147ae; %.7a ==> 0x1.3ae147bp+0 +d.x = 1.23 = #3ff3ae14 7ae147ae; %.2a ==> 0x1.3bp+0 +x.x = 1.23 = #3fff 9d70 a3d7 a3d 70a4; %.La ==> 0xap-3 +q.x = 1.23 = #3fff3ae1 47ae147a e147ae14 7ae147ae; %.20Lqa ==> 0x1.3ae147ae147ae147ae14p+0 +x.x = 3e+27 = #405a 9b18 ab5d f718 b6c; %La ==> 0x9.b18ab5df7180b6cp+88 +x.x = 1.7e+27 = #4059 afc6 a015 291b 4024; %La ==> 0xa.fc6a015291b4024p+87 +q.x = 3e+48 = #40a006be 53879565 60c1e1a9 9c13ee2; %Lqa ==> 0x1.06be5387956560c1e1a909c13ee2p+161 +q.x = 1e+49 = #40a1b5e7 e08ca3a8 f6987819 baecbe22; %Lqa ==> 0x1.b5e7e08ca3a8f6987819baecbe22p+162 +q.x = 1.5 = #3fff8000 0 0 0; %Lqa ==> 0x1.8p+0 +q.x = 2.5 = #40004000 0 0 0; %Lqa ==> 0x1.4p+1 +q.x = 4.5 = #40012000 0 0 0; %Lqa ==> 0x1.2p+2 +q.x = 8.5 = #40021000 0 0 0; %Lqa ==> 0x1.1p+3 diff -Nru mlton-20130715/runtime/gdtoa/test/pftestnos mlton-20210117+dfsg/runtime/gdtoa/test/pftestnos --- mlton-20130715/runtime/gdtoa/test/pftestnos 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/pftestnos 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,15 @@ +%.8a 1.23 +%.7a +%.2a +%.La 1.23 +%.20La 1.23 +%La 3e27 +%La 1.7e27 +%a 1.5 +2.5 +4.5 +8.5 +%La 1.5 +2.5 +4.5 +8.5 diff -Nru mlton-20130715/runtime/gdtoa/test/pftestQ.out mlton-20210117+dfsg/runtime/gdtoa/test/pftestQ.out --- mlton-20130715/runtime/gdtoa/test/pftestQ.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/pftestQ.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,15 @@ +d.x = 1.23 = #7ae147ae 3ff3ae14; %.8a ==> 0x1.3ae147aep+0 +d.x = 1.23 = #7ae147ae 3ff3ae14; %.7a ==> 0x1.3ae147bp+0 +d.x = 1.23 = #7ae147ae 3ff3ae14; %.2a ==> 0x1.3bp+0 +x.x = 1.23 = #3fff3ae1 47ae147a e147ae14 7ae147ae; %.La ==> 0x1p+0 +x.x = 1.23 = #3fff3ae1 47ae147a e147ae14 7ae147ae; %.20La ==> 0x1.3ae147ae147ae147ae14p+0 +x.x = 3e+27 = #405a3631 56bbee30 16d70000 0; %La ==> 0x1.363156bbee3016d7p+91 +x.x = 1.7e+27 = #40595f8d 402a5236 80490000 0; %La ==> 0x1.5f8d402a52368049p+90 +d.x = 1.5 = #0 3ff80000; %a ==> 0x1.8p+0 +d.x = 2.5 = #0 40040000; %a ==> 0x1.4p+1 +d.x = 4.5 = #0 40120000; %a ==> 0x1.2p+2 +d.x = 8.5 = #0 40210000; %a ==> 0x1.1p+3 +x.x = 1.5 = #3fff8000 0 0 0; %La ==> 0x1.8p+0 +x.x = 2.5 = #40004000 0 0 0; %La ==> 0x1.4p+1 +x.x = 4.5 = #40012000 0 0 0; %La ==> 0x1.2p+2 +x.x = 8.5 = #40021000 0 0 0; %La ==> 0x1.1p+3 diff -Nru mlton-20130715/runtime/gdtoa/test/pftestx.out mlton-20210117+dfsg/runtime/gdtoa/test/pftestx.out --- mlton-20130715/runtime/gdtoa/test/pftestx.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/pftestx.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,15 @@ +d.x = 1.23 = #3ff3ae14 7ae147ae; %.8a ==> 0x1.3ae147aep+0 +d.x = 1.23 = #3ff3ae14 7ae147ae; %.7a ==> 0x1.3ae147bp+0 +d.x = 1.23 = #3ff3ae14 7ae147ae; %.2a ==> 0x1.3bp+0 +x.x = 1.23 = #3fff 9d70 a3d7 a3d 70a4; %.La ==> 0xap-3 +x.x = 1.23 = #3fff 9d70 a3d7 a3d 70a4; %.20La ==> 0x9.d70a3d70a3d70a4p-3 +x.x = 3e+27 = #405a 9b18 ab5d f718 b6c; %La ==> 0x9.b18ab5df7180b6cp+88 +x.x = 1.7e+27 = #4059 afc6 a015 291b 4024; %La ==> 0xa.fc6a015291b4024p+87 +d.x = 1.5 = #3ff80000 0; %a ==> 0x1.8p+0 +d.x = 2.5 = #40040000 0; %a ==> 0x1.4p+1 +d.x = 4.5 = #40120000 0; %a ==> 0x1.2p+2 +d.x = 8.5 = #40210000 0; %a ==> 0x1.1p+3 +x.x = 1.5 = #3fff c000 0 0 0; %La ==> 0xcp-3 +x.x = 2.5 = #4000 a000 0 0 0; %La ==> 0xap-2 +x.x = 4.5 = #4001 9000 0 0 0; %La ==> 0x9p-1 +x.x = 8.5 = #4002 8800 0 0 0; %La ==> 0x8.8p+0 diff -Nru mlton-20130715/runtime/gdtoa/test/Q.ou0 mlton-20210117+dfsg/runtime/gdtoa/test/Q.ou0 --- mlton-20130715/runtime/gdtoa/test/Q.ou0 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/Q.ou0 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1190 @@ + +Input: 1.23 + +strtoQ consumes 4 bytes and returns 17 +with bits = #3fff3ae1 47ae147a e147ae14 7ae147ae +g_Qfmt(0) gives 4 bytes: "1.23" + +strtoIQ returns 17, consuming 4 bytes. +fI[0] = #3fff3ae1 47ae147a e147ae14 7ae147ae +fI[1] = #3fff3ae1 47ae147a e147ae14 7ae147af +fI[0] == strtod + + +Input: 1.23e+20 + +strtoQ consumes 8 bytes and returns 1 +with bits = #4041aabd f2145b43 0 0 +g_Qfmt(0) gives 8 bytes: "1.23e+20" + +strtoIQ returns 1, consuming 8 bytes. +fI[0] == fI[1] = #4041aabd f2145b43 0 0 + + +Input: 1.23e-20 + +strtoQ consumes 8 bytes and returns 17 +with bits = #3fbcd0ae 4cf76753 9e4cbca ad934841 +g_Qfmt(0) gives 8 bytes: "1.23e-20" + +strtoIQ returns 17, consuming 8 bytes. +fI[0] = #3fbcd0ae 4cf76753 9e4cbca ad934841 +fI[1] = #3fbcd0ae 4cf76753 9e4cbca ad934842 +fI[0] == strtod + + +Input: 1.23456789 + +strtoQ consumes 10 bytes and returns 17 +with bits = #3fff3c0c a4283de1 b7eb6945 1304948f +g_Qfmt(0) gives 10 bytes: "1.23456789" + +strtoIQ returns 17, consuming 10 bytes. +fI[0] = #3fff3c0c a4283de1 b7eb6945 1304948f +fI[1] = #3fff3c0c a4283de1 b7eb6945 13049490 +fI[0] == strtod + + +Input: 1.23456589e+20 + +strtoQ consumes 14 bytes and returns 1 +with bits = #4041ac53 7a660b99 74000000 0 +g_Qfmt(0) gives 14 bytes: "1.23456589e+20" + +strtoIQ returns 1, consuming 14 bytes. +fI[0] == fI[1] = #4041ac53 7a660b99 74000000 0 + + +Input: 1.23e+30 + +strtoQ consumes 8 bytes and returns 1 +with bits = #4062f0cb 4e8fb79 4945600 0 +g_Qfmt(0) gives 8 bytes: "1.23e+30" + +strtoIQ returns 1, consuming 8 bytes. +fI[0] == fI[1] = #4062f0cb 4e8fb79 4945600 0 + + +Input: 1.23e-30 + +strtoQ consumes 8 bytes and returns 17 +with bits = #3f9b8f28 66f5010a a9d63f9e d7e8ba14 +g_Qfmt(0) gives 8 bytes: "1.23e-30" + +strtoIQ returns 17, consuming 8 bytes. +fI[0] = #3f9b8f28 66f5010a a9d63f9e d7e8ba14 +fI[1] = #3f9b8f28 66f5010a a9d63f9e d7e8ba15 +fI[0] == strtod + + +Input: 1.23456789e-20 + +strtoQ consumes 14 bytes and returns 33 +with bits = #3fbcd268 1471e7ad a6a4a029 d86c1fa2 +g_Qfmt(0) gives 14 bytes: "1.23456789e-20" + +strtoIQ returns 33, consuming 14 bytes. +fI[0] = #3fbcd268 1471e7ad a6a4a029 d86c1fa1 +fI[1] = #3fbcd268 1471e7ad a6a4a029 d86c1fa2 +fI[1] == strtod + + +Input: 1.23456789e-30 + +strtoQ consumes 14 bytes and returns 17 +with bits = #3f9b90a3 e33bbd99 51f85855 5a6b19d4 +g_Qfmt(0) gives 14 bytes: "1.23456789e-30" + +strtoIQ returns 17, consuming 14 bytes. +fI[0] = #3f9b90a3 e33bbd99 51f85855 5a6b19d4 +fI[1] = #3f9b90a3 e33bbd99 51f85855 5a6b19d5 +fI[0] == strtod + + +Input: 1.234567890123456789 + +strtoQ consumes 20 bytes and returns 17 +with bits = #3fff3c0c a428c59f b71a4194 68dd175b +g_Qfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIQ returns 17, consuming 20 bytes. +fI[0] = #3fff3c0c a428c59f b71a4194 68dd175b +fI[1] = #3fff3c0c a428c59f b71a4194 68dd175c +fI[0] == strtod + + +Input: 1.23456789012345678901234567890123456789 + +strtoQ consumes 40 bytes and returns 17 +with bits = #3fff3c0c a428c59f b71a7be1 6b6b6d5b +g_Qfmt(0) gives 36 bytes: "1.2345678901234567890123456789012346" + +strtoIQ returns 17, consuming 40 bytes. +fI[0] = #3fff3c0c a428c59f b71a7be1 6b6b6d5b +fI[1] = #3fff3c0c a428c59f b71a7be1 6b6b6d5c +fI[0] == strtod + + +Input: 1.23e306 + +strtoQ consumes 8 bytes and returns 33 +with bits = #43f7c067 6cd1c61f 4daac5f1 e9fa3b55 +g_Qfmt(0) gives 9 bytes: "1.23e+306" + +strtoIQ returns 33, consuming 8 bytes. +fI[0] = #43f7c067 6cd1c61f 4daac5f1 e9fa3b54 +fI[1] = #43f7c067 6cd1c61f 4daac5f1 e9fa3b55 +fI[1] == strtod + + +Input: 1.23e-306 + +strtoQ consumes 9 bytes and returns 17 +with bits = #3c06ba3b 85da396e 7e496ab7 d233c3dd +g_Qfmt(0) gives 9 bytes: "1.23e-306" + +strtoIQ returns 17, consuming 9 bytes. +fI[0] = #3c06ba3b 85da396e 7e496ab7 d233c3dd +fI[1] = #3c06ba3b 85da396e 7e496ab7 d233c3de +fI[0] == strtod + + +Input: 1.23e-320 + +strtoQ consumes 9 bytes and returns 33 +with bits = #3bd83731 86e30898 7e33b2e8 355f847b +g_Qfmt(0) gives 9 bytes: "1.23e-320" + +strtoIQ returns 33, consuming 9 bytes. +fI[0] = #3bd83731 86e30898 7e33b2e8 355f847a +fI[1] = #3bd83731 86e30898 7e33b2e8 355f847b +fI[1] == strtod + + +Input: 1.23e-20 + +strtoQ consumes 8 bytes and returns 17 +with bits = #3fbcd0ae 4cf76753 9e4cbca ad934841 +g_Qfmt(0) gives 8 bytes: "1.23e-20" + +strtoIQ returns 17, consuming 8 bytes. +fI[0] = #3fbcd0ae 4cf76753 9e4cbca ad934841 +fI[1] = #3fbcd0ae 4cf76753 9e4cbca ad934842 +fI[0] == strtod + + +Input: 1.23456789e307 + +strtoQ consumes 14 bytes and returns 17 +with bits = #43fb194b 14bdaecd bcea468c 902464cf +g_Qfmt(0) gives 15 bytes: "1.23456789e+307" + +strtoIQ returns 17, consuming 14 bytes. +fI[0] = #43fb194b 14bdaecd bcea468c 902464cf +fI[1] = #43fb194b 14bdaecd bcea468c 902464d0 +fI[0] == strtod + + +Input: 1.23456589e-307 + +strtoQ consumes 15 bytes and returns 17 +with bits = #3c036319 6bb9845f a6d234e3 39163574 +g_Qfmt(0) gives 15 bytes: "1.23456589e-307" + +strtoIQ returns 17, consuming 15 bytes. +fI[0] = #3c036319 6bb9845f a6d234e3 39163574 +fI[1] = #3c036319 6bb9845f a6d234e3 39163575 +fI[0] == strtod + + +Input: 1.234567890123456789 + +strtoQ consumes 20 bytes and returns 17 +with bits = #3fff3c0c a428c59f b71a4194 68dd175b +g_Qfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIQ returns 17, consuming 20 bytes. +fI[0] = #3fff3c0c a428c59f b71a4194 68dd175b +fI[1] = #3fff3c0c a428c59f b71a4194 68dd175c +fI[0] == strtod + + +Input: 1.234567890123456789e301 + +strtoQ consumes 24 bytes and returns 33 +with bits = #43e726f5 175f5641 3017ea80 763990ef +g_Qfmt(0) gives 25 bytes: "1.234567890123456789e+301" + +strtoIQ returns 33, consuming 24 bytes. +fI[0] = #43e726f5 175f5641 3017ea80 763990ee +fI[1] = #43e726f5 175f5641 3017ea80 763990ef +fI[1] == strtod + + +Input: 1.234567890123456789e-301 + +strtoQ consumes 25 bytes and returns 17 +with bits = #3c1752a6 4e34ba0d 35b19b04 3222fce5 +g_Qfmt(0) gives 25 bytes: "1.234567890123456789e-301" + +strtoIQ returns 17, consuming 25 bytes. +fI[0] = #3c1752a6 4e34ba0d 35b19b04 3222fce5 +fI[1] = #3c1752a6 4e34ba0d 35b19b04 3222fce6 +fI[0] == strtod + + +Input: 1.234567890123456789e-321 + +strtoQ consumes 25 bytes and returns 17 +with bits = #3bd4f3c2 3699d4db 99d1ea94 2fecd7de +g_Qfmt(0) gives 25 bytes: "1.234567890123456789e-321" + +strtoIQ returns 17, consuming 25 bytes. +fI[0] = #3bd4f3c2 3699d4db 99d1ea94 2fecd7de +fI[1] = #3bd4f3c2 3699d4db 99d1ea94 2fecd7df +fI[0] == strtod + + +Input: 1e23 + +strtoQ consumes 4 bytes and returns 1 +with bits = #404b52d0 2c7e14af 68000000 0 +g_Qfmt(0) gives 5 bytes: "1e+23" + +strtoIQ returns 1, consuming 4 bytes. +fI[0] == fI[1] = #404b52d0 2c7e14af 68000000 0 + + +Input: 1e310 + +strtoQ consumes 5 bytes and returns 33 +with bits = #4404bd03 c8140697 9e9ff00e fefd4cbd +g_Qfmt(0) gives 6 bytes: "1e+310" + +strtoIQ returns 33, consuming 5 bytes. +fI[0] = #4404bd03 c8140697 9e9ff00e fefd4cbc +fI[1] = #4404bd03 c8140697 9e9ff00e fefd4cbd +fI[1] == strtod + + +Input: 9.0259718793241475e-277 + +strtoQ consumes 23 bytes and returns 17 +with bits = #3c69ffff ffffffff f9ed5779 ac118fe1 +g_Qfmt(0) gives 23 bytes: "9.0259718793241475e-277" + +strtoIQ returns 17, consuming 23 bytes. +fI[0] = #3c69ffff ffffffff f9ed5779 ac118fe1 +fI[1] = #3c69ffff ffffffff f9ed5779 ac118fe2 +fI[0] == strtod + + +Input: 9.025971879324147880346310405869e-277 + +strtoQ consumes 37 bytes and returns 33 +with bits = #3c6a0000 0 0 9a +g_Qfmt(0) gives 37 bytes: "9.025971879324147880346310405869e-277" + +strtoIQ returns 33, consuming 37 bytes. +fI[0] = #3c6a0000 0 0 99 +fI[1] = #3c6a0000 0 0 9a +fI[1] == strtod + + +Input: 9.025971879324147880346310405868e-277 + +strtoQ consumes 37 bytes and returns 17 +with bits = #3c69ffff ffffffff ffffffff fffffcb5 +g_Qfmt(0) gives 37 bytes: "9.025971879324147880346310405868e-277" + +strtoIQ returns 17, consuming 37 bytes. +fI[0] = #3c69ffff ffffffff ffffffff fffffcb5 +fI[1] = #3c69ffff ffffffff ffffffff fffffcb6 +fI[0] == strtod + + +Input: 2.2250738585072014e-308 + +strtoQ consumes 23 bytes and returns 33 +with bits = #3c010000 0 8c304c cf867de0 +g_Qfmt(0) gives 23 bytes: "2.2250738585072014e-308" + +strtoIQ returns 33, consuming 23 bytes. +fI[0] = #3c010000 0 8c304c cf867ddf +fI[1] = #3c010000 0 8c304c cf867de0 +fI[1] == strtod + + +Input: 2.2250738585072013e-308 + +strtoQ consumes 23 bytes and returns 33 +with bits = #3c00ffff ffffffff fa9e4c4f 4c1e8a10 +g_Qfmt(0) gives 23 bytes: "2.2250738585072013e-308" + +strtoIQ returns 33, consuming 23 bytes. +fI[0] = #3c00ffff ffffffff fa9e4c4f 4c1e8a0f +fI[1] = #3c00ffff ffffffff fa9e4c4f 4c1e8a10 +fI[1] == strtod + + +Input: 3.2649476e14 + +strtoQ consumes 12 bytes and returns 1 +with bits = #402f28f1 fc30da00 0 0 +g_Qfmt(0) gives 13 bytes: "3.2649476e+14" + +strtoIQ returns 1, consuming 12 bytes. +fI[0] == fI[1] = #402f28f1 fc30da00 0 0 + +Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero) + +Input: 1.1 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff1999 99999999 99999999 99999999 +g_Qfmt(0) gives 36 bytes: "1.0999999999999999999999999999999999" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff1999 99999999 99999999 99999999 +fI[1] = #3fff1999 99999999 99999999 9999999a +fI[0] == strtod + + +Input: -1.1 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff1999 99999999 99999999 99999999 +g_Qfmt(0) gives 37 bytes: "-1.0999999999999999999999999999999999" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff1999 99999999 99999999 9999999a +fI[1] = #bfff1999 99999999 99999999 99999999 +fI[1] == strtod + + +Input: 1.2 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff3333 33333333 33333333 33333333 +g_Qfmt(0) gives 3 bytes: "1.2" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff3333 33333333 33333333 33333333 +fI[1] = #3fff3333 33333333 33333333 33333334 +fI[0] == strtod + + +Input: -1.2 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff3333 33333333 33333333 33333333 +g_Qfmt(0) gives 4 bytes: "-1.2" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff3333 33333333 33333333 33333334 +fI[1] = #bfff3333 33333333 33333333 33333333 +fI[1] == strtod + + +Input: 1.3 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff4ccc cccccccc cccccccc cccccccc +g_Qfmt(0) gives 36 bytes: "1.2999999999999999999999999999999998" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff4ccc cccccccc cccccccc cccccccc +fI[1] = #3fff4ccc cccccccc cccccccc cccccccd +fI[0] == strtod + + +Input: -1.3 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff4ccc cccccccc cccccccc cccccccc +g_Qfmt(0) gives 37 bytes: "-1.2999999999999999999999999999999998" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff4ccc cccccccc cccccccc cccccccd +fI[1] = #bfff4ccc cccccccc cccccccc cccccccc +fI[1] == strtod + + +Input: 1.4 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff6666 66666666 66666666 66666666 +g_Qfmt(0) gives 3 bytes: "1.4" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff6666 66666666 66666666 66666666 +fI[1] = #3fff6666 66666666 66666666 66666667 +fI[0] == strtod + + +Input: -1.4 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff6666 66666666 66666666 66666666 +g_Qfmt(0) gives 4 bytes: "-1.4" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff6666 66666666 66666666 66666667 +fI[1] = #bfff6666 66666666 66666666 66666666 +fI[1] == strtod + + +Input: 1.5 + +strtoQ consumes 3 bytes and returns 1 +with bits = #3fff8000 0 0 0 +g_Qfmt(0) gives 3 bytes: "1.5" + +strtoIQ returns 1, consuming 3 bytes. +fI[0] == fI[1] = #3fff8000 0 0 0 + + +Input: -1.5 + +strtoQ consumes 4 bytes and returns 9 +with bits = #bfff8000 0 0 0 +g_Qfmt(0) gives 4 bytes: "-1.5" + +strtoIQ returns 9, consuming 4 bytes. +fI[0] == fI[1] = #bfff8000 0 0 0 + + +Input: 1.6 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff9999 99999999 99999999 99999999 +g_Qfmt(0) gives 36 bytes: "1.5999999999999999999999999999999999" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff9999 99999999 99999999 99999999 +fI[1] = #3fff9999 99999999 99999999 9999999a +fI[0] == strtod + + +Input: -1.6 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff9999 99999999 99999999 99999999 +g_Qfmt(0) gives 37 bytes: "-1.5999999999999999999999999999999999" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff9999 99999999 99999999 9999999a +fI[1] = #bfff9999 99999999 99999999 99999999 +fI[1] == strtod + + +Input: 1.7 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffb333 33333333 33333333 33333333 +g_Qfmt(0) gives 3 bytes: "1.7" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffb333 33333333 33333333 33333333 +fI[1] = #3fffb333 33333333 33333333 33333334 +fI[0] == strtod + + +Input: -1.7 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffb333 33333333 33333333 33333333 +g_Qfmt(0) gives 4 bytes: "-1.7" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffb333 33333333 33333333 33333334 +fI[1] = #bfffb333 33333333 33333333 33333333 +fI[1] == strtod + + +Input: 1.8 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffcccc cccccccc cccccccc cccccccc +g_Qfmt(0) gives 36 bytes: "1.7999999999999999999999999999999998" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fffcccc cccccccc cccccccc cccccccc +fI[1] = #3fffcccc cccccccc cccccccc cccccccd +fI[0] == strtod + + +Input: -1.8 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffcccc cccccccc cccccccc cccccccc +g_Qfmt(0) gives 37 bytes: "-1.7999999999999999999999999999999998" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfffcccc cccccccc cccccccc cccccccd +fI[1] = #bfffcccc cccccccc cccccccc cccccccc +fI[1] == strtod + + +Input: 1.9 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffe666 66666666 66666666 66666666 +g_Qfmt(0) gives 3 bytes: "1.9" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffe666 66666666 66666666 66666666 +fI[1] = #3fffe666 66666666 66666666 66666667 +fI[0] == strtod + + +Input: -1.9 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffe666 66666666 66666666 66666666 +g_Qfmt(0) gives 4 bytes: "-1.9" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffe666 66666666 66666666 66666667 +fI[1] = #bfffe666 66666666 66666666 66666666 +fI[1] == strtod + +Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest) + +Input: 1.1 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff1999 99999999 99999999 9999999a +g_Qfmt(0) gives 3 bytes: "1.1" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff1999 99999999 99999999 99999999 +fI[1] = #3fff1999 99999999 99999999 9999999a +fI[1] == strtod + + +Input: -1.1 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff1999 99999999 99999999 9999999a +g_Qfmt(0) gives 4 bytes: "-1.1" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff1999 99999999 99999999 9999999a +fI[1] = #bfff1999 99999999 99999999 99999999 +fI[0] == strtod + + +Input: 1.2 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff3333 33333333 33333333 33333333 +g_Qfmt(0) gives 3 bytes: "1.2" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff3333 33333333 33333333 33333333 +fI[1] = #3fff3333 33333333 33333333 33333334 +fI[0] == strtod + + +Input: -1.2 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff3333 33333333 33333333 33333333 +g_Qfmt(0) gives 4 bytes: "-1.2" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff3333 33333333 33333333 33333334 +fI[1] = #bfff3333 33333333 33333333 33333333 +fI[1] == strtod + + +Input: 1.3 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff4ccc cccccccc cccccccc cccccccd +g_Qfmt(0) gives 3 bytes: "1.3" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff4ccc cccccccc cccccccc cccccccc +fI[1] = #3fff4ccc cccccccc cccccccc cccccccd +fI[1] == strtod + + +Input: -1.3 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff4ccc cccccccc cccccccc cccccccd +g_Qfmt(0) gives 4 bytes: "-1.3" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff4ccc cccccccc cccccccc cccccccd +fI[1] = #bfff4ccc cccccccc cccccccc cccccccc +fI[0] == strtod + + +Input: 1.4 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff6666 66666666 66666666 66666666 +g_Qfmt(0) gives 3 bytes: "1.4" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff6666 66666666 66666666 66666666 +fI[1] = #3fff6666 66666666 66666666 66666667 +fI[0] == strtod + + +Input: -1.4 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff6666 66666666 66666666 66666666 +g_Qfmt(0) gives 4 bytes: "-1.4" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff6666 66666666 66666666 66666667 +fI[1] = #bfff6666 66666666 66666666 66666666 +fI[1] == strtod + + +Input: 1.5 + +strtoQ consumes 3 bytes and returns 1 +with bits = #3fff8000 0 0 0 +g_Qfmt(0) gives 3 bytes: "1.5" + +strtoIQ returns 1, consuming 3 bytes. +fI[0] == fI[1] = #3fff8000 0 0 0 + + +Input: -1.5 + +strtoQ consumes 4 bytes and returns 9 +with bits = #bfff8000 0 0 0 +g_Qfmt(0) gives 4 bytes: "-1.5" + +strtoIQ returns 9, consuming 4 bytes. +fI[0] == fI[1] = #bfff8000 0 0 0 + + +Input: 1.6 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff9999 99999999 99999999 9999999a +g_Qfmt(0) gives 3 bytes: "1.6" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff9999 99999999 99999999 99999999 +fI[1] = #3fff9999 99999999 99999999 9999999a +fI[1] == strtod + + +Input: -1.6 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff9999 99999999 99999999 9999999a +g_Qfmt(0) gives 4 bytes: "-1.6" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff9999 99999999 99999999 9999999a +fI[1] = #bfff9999 99999999 99999999 99999999 +fI[0] == strtod + + +Input: 1.7 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffb333 33333333 33333333 33333333 +g_Qfmt(0) gives 3 bytes: "1.7" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffb333 33333333 33333333 33333333 +fI[1] = #3fffb333 33333333 33333333 33333334 +fI[0] == strtod + + +Input: -1.7 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffb333 33333333 33333333 33333333 +g_Qfmt(0) gives 4 bytes: "-1.7" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffb333 33333333 33333333 33333334 +fI[1] = #bfffb333 33333333 33333333 33333333 +fI[1] == strtod + + +Input: 1.8 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fffcccc cccccccc cccccccc cccccccd +g_Qfmt(0) gives 3 bytes: "1.8" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fffcccc cccccccc cccccccc cccccccc +fI[1] = #3fffcccc cccccccc cccccccc cccccccd +fI[1] == strtod + + +Input: -1.8 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfffcccc cccccccc cccccccc cccccccd +g_Qfmt(0) gives 4 bytes: "-1.8" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfffcccc cccccccc cccccccc cccccccd +fI[1] = #bfffcccc cccccccc cccccccc cccccccc +fI[0] == strtod + + +Input: 1.9 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffe666 66666666 66666666 66666666 +g_Qfmt(0) gives 3 bytes: "1.9" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffe666 66666666 66666666 66666666 +fI[1] = #3fffe666 66666666 66666666 66666667 +fI[0] == strtod + + +Input: -1.9 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffe666 66666666 66666666 66666666 +g_Qfmt(0) gives 4 bytes: "-1.9" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffe666 66666666 66666666 66666667 +fI[1] = #bfffe666 66666666 66666666 66666666 +fI[1] == strtod + +Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity) + +Input: 1.1 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff1999 99999999 99999999 9999999a +g_Qfmt(0) gives 3 bytes: "1.1" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff1999 99999999 99999999 99999999 +fI[1] = #3fff1999 99999999 99999999 9999999a +fI[1] == strtod + + +Input: -1.1 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff1999 99999999 99999999 99999999 +g_Qfmt(0) gives 37 bytes: "-1.0999999999999999999999999999999999" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff1999 99999999 99999999 9999999a +fI[1] = #bfff1999 99999999 99999999 99999999 +fI[1] == strtod + + +Input: 1.2 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff3333 33333333 33333333 33333334 +g_Qfmt(0) gives 36 bytes: "1.2000000000000000000000000000000002" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff3333 33333333 33333333 33333333 +fI[1] = #3fff3333 33333333 33333333 33333334 +fI[1] == strtod + + +Input: -1.2 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff3333 33333333 33333333 33333333 +g_Qfmt(0) gives 4 bytes: "-1.2" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff3333 33333333 33333333 33333334 +fI[1] = #bfff3333 33333333 33333333 33333333 +fI[1] == strtod + + +Input: 1.3 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff4ccc cccccccc cccccccc cccccccd +g_Qfmt(0) gives 3 bytes: "1.3" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff4ccc cccccccc cccccccc cccccccc +fI[1] = #3fff4ccc cccccccc cccccccc cccccccd +fI[1] == strtod + + +Input: -1.3 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff4ccc cccccccc cccccccc cccccccc +g_Qfmt(0) gives 37 bytes: "-1.2999999999999999999999999999999998" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff4ccc cccccccc cccccccc cccccccd +fI[1] = #bfff4ccc cccccccc cccccccc cccccccc +fI[1] == strtod + + +Input: 1.4 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff6666 66666666 66666666 66666667 +g_Qfmt(0) gives 36 bytes: "1.4000000000000000000000000000000001" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff6666 66666666 66666666 66666666 +fI[1] = #3fff6666 66666666 66666666 66666667 +fI[1] == strtod + + +Input: -1.4 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff6666 66666666 66666666 66666666 +g_Qfmt(0) gives 4 bytes: "-1.4" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff6666 66666666 66666666 66666667 +fI[1] = #bfff6666 66666666 66666666 66666666 +fI[1] == strtod + + +Input: 1.5 + +strtoQ consumes 3 bytes and returns 1 +with bits = #3fff8000 0 0 0 +g_Qfmt(0) gives 3 bytes: "1.5" + +strtoIQ returns 1, consuming 3 bytes. +fI[0] == fI[1] = #3fff8000 0 0 0 + + +Input: -1.5 + +strtoQ consumes 4 bytes and returns 9 +with bits = #bfff8000 0 0 0 +g_Qfmt(0) gives 4 bytes: "-1.5" + +strtoIQ returns 9, consuming 4 bytes. +fI[0] == fI[1] = #bfff8000 0 0 0 + + +Input: 1.6 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff9999 99999999 99999999 9999999a +g_Qfmt(0) gives 3 bytes: "1.6" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff9999 99999999 99999999 99999999 +fI[1] = #3fff9999 99999999 99999999 9999999a +fI[1] == strtod + + +Input: -1.6 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff9999 99999999 99999999 99999999 +g_Qfmt(0) gives 37 bytes: "-1.5999999999999999999999999999999999" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff9999 99999999 99999999 9999999a +fI[1] = #bfff9999 99999999 99999999 99999999 +fI[1] == strtod + + +Input: 1.7 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fffb333 33333333 33333333 33333334 +g_Qfmt(0) gives 36 bytes: "1.7000000000000000000000000000000002" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffb333 33333333 33333333 33333333 +fI[1] = #3fffb333 33333333 33333333 33333334 +fI[1] == strtod + + +Input: -1.7 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffb333 33333333 33333333 33333333 +g_Qfmt(0) gives 4 bytes: "-1.7" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffb333 33333333 33333333 33333334 +fI[1] = #bfffb333 33333333 33333333 33333333 +fI[1] == strtod + + +Input: 1.8 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fffcccc cccccccc cccccccc cccccccd +g_Qfmt(0) gives 3 bytes: "1.8" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fffcccc cccccccc cccccccc cccccccc +fI[1] = #3fffcccc cccccccc cccccccc cccccccd +fI[1] == strtod + + +Input: -1.8 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffcccc cccccccc cccccccc cccccccc +g_Qfmt(0) gives 37 bytes: "-1.7999999999999999999999999999999998" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfffcccc cccccccc cccccccc cccccccd +fI[1] = #bfffcccc cccccccc cccccccc cccccccc +fI[1] == strtod + + +Input: 1.9 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fffe666 66666666 66666666 66666667 +g_Qfmt(0) gives 36 bytes: "1.9000000000000000000000000000000001" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffe666 66666666 66666666 66666666 +fI[1] = #3fffe666 66666666 66666666 66666667 +fI[1] == strtod + + +Input: -1.9 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffe666 66666666 66666666 66666666 +g_Qfmt(0) gives 4 bytes: "-1.9" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffe666 66666666 66666666 66666667 +fI[1] = #bfffe666 66666666 66666666 66666666 +fI[1] == strtod + +Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity) + +Input: 1.1 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff1999 99999999 99999999 99999999 +g_Qfmt(0) gives 36 bytes: "1.0999999999999999999999999999999999" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff1999 99999999 99999999 99999999 +fI[1] = #3fff1999 99999999 99999999 9999999a +fI[0] == strtod + + +Input: -1.1 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff1999 99999999 99999999 9999999a +g_Qfmt(0) gives 4 bytes: "-1.1" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff1999 99999999 99999999 9999999a +fI[1] = #bfff1999 99999999 99999999 99999999 +fI[0] == strtod + + +Input: 1.2 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff3333 33333333 33333333 33333333 +g_Qfmt(0) gives 3 bytes: "1.2" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff3333 33333333 33333333 33333333 +fI[1] = #3fff3333 33333333 33333333 33333334 +fI[0] == strtod + + +Input: -1.2 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff3333 33333333 33333333 33333334 +g_Qfmt(0) gives 37 bytes: "-1.2000000000000000000000000000000002" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff3333 33333333 33333333 33333334 +fI[1] = #bfff3333 33333333 33333333 33333333 +fI[0] == strtod + + +Input: 1.3 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff4ccc cccccccc cccccccc cccccccc +g_Qfmt(0) gives 36 bytes: "1.2999999999999999999999999999999998" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff4ccc cccccccc cccccccc cccccccc +fI[1] = #3fff4ccc cccccccc cccccccc cccccccd +fI[0] == strtod + + +Input: -1.3 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff4ccc cccccccc cccccccc cccccccd +g_Qfmt(0) gives 4 bytes: "-1.3" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff4ccc cccccccc cccccccc cccccccd +fI[1] = #bfff4ccc cccccccc cccccccc cccccccc +fI[0] == strtod + + +Input: 1.4 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff6666 66666666 66666666 66666666 +g_Qfmt(0) gives 3 bytes: "1.4" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff6666 66666666 66666666 66666666 +fI[1] = #3fff6666 66666666 66666666 66666667 +fI[0] == strtod + + +Input: -1.4 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff6666 66666666 66666666 66666667 +g_Qfmt(0) gives 37 bytes: "-1.4000000000000000000000000000000001" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff6666 66666666 66666666 66666667 +fI[1] = #bfff6666 66666666 66666666 66666666 +fI[0] == strtod + + +Input: 1.5 + +strtoQ consumes 3 bytes and returns 1 +with bits = #3fff8000 0 0 0 +g_Qfmt(0) gives 3 bytes: "1.5" + +strtoIQ returns 1, consuming 3 bytes. +fI[0] == fI[1] = #3fff8000 0 0 0 + + +Input: -1.5 + +strtoQ consumes 4 bytes and returns 9 +with bits = #bfff8000 0 0 0 +g_Qfmt(0) gives 4 bytes: "-1.5" + +strtoIQ returns 9, consuming 4 bytes. +fI[0] == fI[1] = #bfff8000 0 0 0 + + +Input: 1.6 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff9999 99999999 99999999 99999999 +g_Qfmt(0) gives 36 bytes: "1.5999999999999999999999999999999999" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff9999 99999999 99999999 99999999 +fI[1] = #3fff9999 99999999 99999999 9999999a +fI[0] == strtod + + +Input: -1.6 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff9999 99999999 99999999 9999999a +g_Qfmt(0) gives 4 bytes: "-1.6" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff9999 99999999 99999999 9999999a +fI[1] = #bfff9999 99999999 99999999 99999999 +fI[0] == strtod + + +Input: 1.7 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffb333 33333333 33333333 33333333 +g_Qfmt(0) gives 3 bytes: "1.7" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffb333 33333333 33333333 33333333 +fI[1] = #3fffb333 33333333 33333333 33333334 +fI[0] == strtod + + +Input: -1.7 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfffb333 33333333 33333333 33333334 +g_Qfmt(0) gives 37 bytes: "-1.7000000000000000000000000000000002" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffb333 33333333 33333333 33333334 +fI[1] = #bfffb333 33333333 33333333 33333333 +fI[0] == strtod + + +Input: 1.8 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffcccc cccccccc cccccccc cccccccc +g_Qfmt(0) gives 36 bytes: "1.7999999999999999999999999999999998" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fffcccc cccccccc cccccccc cccccccc +fI[1] = #3fffcccc cccccccc cccccccc cccccccd +fI[0] == strtod + + +Input: -1.8 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfffcccc cccccccc cccccccc cccccccd +g_Qfmt(0) gives 4 bytes: "-1.8" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfffcccc cccccccc cccccccc cccccccd +fI[1] = #bfffcccc cccccccc cccccccc cccccccc +fI[0] == strtod + + +Input: 1.9 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffe666 66666666 66666666 66666666 +g_Qfmt(0) gives 3 bytes: "1.9" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffe666 66666666 66666666 66666666 +fI[1] = #3fffe666 66666666 66666666 66666667 +fI[0] == strtod + + +Input: -1.9 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfffe666 66666666 66666666 66666667 +g_Qfmt(0) gives 37 bytes: "-1.9000000000000000000000000000000001" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffe666 66666666 66666666 66666667 +fI[1] = #bfffe666 66666666 66666666 66666666 +fI[0] == strtod + diff -Nru mlton-20130715/runtime/gdtoa/test/Q.ou1 mlton-20210117+dfsg/runtime/gdtoa/test/Q.ou1 --- mlton-20130715/runtime/gdtoa/test/Q.ou1 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/Q.ou1 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1480 @@ + +Input: 1.23 + +strtoQ consumes 4 bytes and returns 17 +with bits = #3fff3ae1 47ae147a e147ae14 7ae147ae +printf("%.35Lg") gives 1.23 +g_Qfmt(0) gives 4 bytes: "1.23" + +strtoIQ returns 17, consuming 4 bytes. +fI[0] = #3fff3ae1 47ae147a e147ae14 7ae147ae += 1.23 +fI[1] = #3fff3ae1 47ae147a e147ae14 7ae147af += 1.2300000000000000000000000000000002 +fI[0] == strtod + + +Input: 1.23e+20 + +strtoQ consumes 8 bytes and returns 1 +with bits = #4041aabd f2145b43 0 0 +printf("%.35Lg") gives 123000000000000000000 +g_Qfmt(0) gives 8 bytes: "1.23e+20" + +strtoIQ returns 1, consuming 8 bytes. +fI[0] == fI[1] = #4041aabd f2145b43 0 0 += 123000000000000000000 + + +Input: 1.23e-20 + +strtoQ consumes 8 bytes and returns 17 +with bits = #3fbcd0ae 4cf76753 9e4cbca ad934841 +printf("%.35Lg") gives 1.2299999999999999999999999999999999e-20 +g_Qfmt(0) gives 8 bytes: "1.23e-20" + +strtoIQ returns 17, consuming 8 bytes. +fI[0] = #3fbcd0ae 4cf76753 9e4cbca ad934841 += 1.2299999999999999999999999999999999e-20 +fI[1] = #3fbcd0ae 4cf76753 9e4cbca ad934842 += 1.2300000000000000000000000000000001e-20 +fI[0] == strtod + + +Input: 1.23456789 + +strtoQ consumes 10 bytes and returns 17 +with bits = #3fff3c0c a4283de1 b7eb6945 1304948f +printf("%.35Lg") gives 1.2345678899999999999999999999999999 +g_Qfmt(0) gives 10 bytes: "1.23456789" + +strtoIQ returns 17, consuming 10 bytes. +fI[0] = #3fff3c0c a4283de1 b7eb6945 1304948f += 1.2345678899999999999999999999999999 +fI[1] = #3fff3c0c a4283de1 b7eb6945 13049490 += 1.2345678900000000000000000000000001 +fI[0] == strtod + + +Input: 1.23456589e+20 + +strtoQ consumes 14 bytes and returns 1 +with bits = #4041ac53 7a660b99 74000000 0 +printf("%.35Lg") gives 123456589000000000000 +g_Qfmt(0) gives 14 bytes: "1.23456589e+20" + +strtoIQ returns 1, consuming 14 bytes. +fI[0] == fI[1] = #4041ac53 7a660b99 74000000 0 += 123456589000000000000 + + +Input: 1.23e+30 + +strtoQ consumes 8 bytes and returns 1 +with bits = #4062f0cb 4e8fb79 4945600 0 +printf("%.35Lg") gives 1230000000000000000000000000000 +g_Qfmt(0) gives 8 bytes: "1.23e+30" + +strtoIQ returns 1, consuming 8 bytes. +fI[0] == fI[1] = #4062f0cb 4e8fb79 4945600 0 += 1230000000000000000000000000000 + + +Input: 1.23e-30 + +strtoQ consumes 8 bytes and returns 17 +with bits = #3f9b8f28 66f5010a a9d63f9e d7e8ba14 +printf("%.35Lg") gives 1.2299999999999999999999999999999999e-30 +g_Qfmt(0) gives 8 bytes: "1.23e-30" + +strtoIQ returns 17, consuming 8 bytes. +fI[0] = #3f9b8f28 66f5010a a9d63f9e d7e8ba14 += 1.2299999999999999999999999999999999e-30 +fI[1] = #3f9b8f28 66f5010a a9d63f9e d7e8ba15 += 1.2300000000000000000000000000000001e-30 +fI[0] == strtod + + +Input: 1.23456789e-20 + +strtoQ consumes 14 bytes and returns 33 +with bits = #3fbcd268 1471e7ad a6a4a029 d86c1fa2 +printf("%.35Lg") gives 1.2345678900000000000000000000000001e-20 +g_Qfmt(0) gives 14 bytes: "1.23456789e-20" + +strtoIQ returns 33, consuming 14 bytes. +fI[0] = #3fbcd268 1471e7ad a6a4a029 d86c1fa1 += 1.2345678899999999999999999999999999e-20 +fI[1] = #3fbcd268 1471e7ad a6a4a029 d86c1fa2 += 1.2345678900000000000000000000000001e-20 +fI[1] == strtod + + +Input: 1.23456789e-30 + +strtoQ consumes 14 bytes and returns 17 +with bits = #3f9b90a3 e33bbd99 51f85855 5a6b19d4 +printf("%.35Lg") gives 1.23456789e-30 +g_Qfmt(0) gives 14 bytes: "1.23456789e-30" + +strtoIQ returns 17, consuming 14 bytes. +fI[0] = #3f9b90a3 e33bbd99 51f85855 5a6b19d4 += 1.23456789e-30 +fI[1] = #3f9b90a3 e33bbd99 51f85855 5a6b19d5 += 1.2345678900000000000000000000000001e-30 +fI[0] == strtod + + +Input: 1.234567890123456789 + +strtoQ consumes 20 bytes and returns 17 +with bits = #3fff3c0c a428c59f b71a4194 68dd175b +printf("%.35Lg") gives 1.234567890123456789 +g_Qfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIQ returns 17, consuming 20 bytes. +fI[0] = #3fff3c0c a428c59f b71a4194 68dd175b += 1.234567890123456789 +fI[1] = #3fff3c0c a428c59f b71a4194 68dd175c += 1.2345678901234567890000000000000002 +fI[0] == strtod + + +Input: 1.23456789012345678901234567890123456789 + +strtoQ consumes 40 bytes and returns 17 +with bits = #3fff3c0c a428c59f b71a7be1 6b6b6d5b +printf("%.35Lg") gives 1.2345678901234567890123456789012346 +g_Qfmt(0) gives 36 bytes: "1.2345678901234567890123456789012346" + +strtoIQ returns 17, consuming 40 bytes. +fI[0] = #3fff3c0c a428c59f b71a7be1 6b6b6d5b += 1.2345678901234567890123456789012346 +fI[1] = #3fff3c0c a428c59f b71a7be1 6b6b6d5c += 1.2345678901234567890123456789012347 +fI[0] == strtod + + +Input: 1.23e306 + +strtoQ consumes 8 bytes and returns 33 +with bits = #43f7c067 6cd1c61f 4daac5f1 e9fa3b55 +printf("%.35Lg") gives 1.23e+306 +g_Qfmt(0) gives 9 bytes: "1.23e+306" + +strtoIQ returns 33, consuming 8 bytes. +fI[0] = #43f7c067 6cd1c61f 4daac5f1 e9fa3b54 += 1.2299999999999999999999999999999999e+306 +fI[1] = #43f7c067 6cd1c61f 4daac5f1 e9fa3b55 += 1.23e+306 +fI[1] == strtod + + +Input: 1.23e-306 + +strtoQ consumes 9 bytes and returns 17 +with bits = #3c06ba3b 85da396e 7e496ab7 d233c3dd +printf("%.35Lg") gives 1.23e-306 +g_Qfmt(0) gives 9 bytes: "1.23e-306" + +strtoIQ returns 17, consuming 9 bytes. +fI[0] = #3c06ba3b 85da396e 7e496ab7 d233c3dd += 1.23e-306 +fI[1] = #3c06ba3b 85da396e 7e496ab7 d233c3de += 1.2300000000000000000000000000000001e-306 +fI[0] == strtod + + +Input: 1.23e-320 + +strtoQ consumes 9 bytes and returns 33 +with bits = #3bd83731 86e30898 7e33b2e8 355f847b +printf("%.35Lg") gives 1.2300000000000000000000000000000001e-320 +g_Qfmt(0) gives 9 bytes: "1.23e-320" + +strtoIQ returns 33, consuming 9 bytes. +fI[0] = #3bd83731 86e30898 7e33b2e8 355f847a += 1.2299999999999999999999999999999999e-320 +fI[1] = #3bd83731 86e30898 7e33b2e8 355f847b += 1.2300000000000000000000000000000001e-320 +fI[1] == strtod + + +Input: 1.23e-20 + +strtoQ consumes 8 bytes and returns 17 +with bits = #3fbcd0ae 4cf76753 9e4cbca ad934841 +printf("%.35Lg") gives 1.2299999999999999999999999999999999e-20 +g_Qfmt(0) gives 8 bytes: "1.23e-20" + +strtoIQ returns 17, consuming 8 bytes. +fI[0] = #3fbcd0ae 4cf76753 9e4cbca ad934841 += 1.2299999999999999999999999999999999e-20 +fI[1] = #3fbcd0ae 4cf76753 9e4cbca ad934842 += 1.2300000000000000000000000000000001e-20 +fI[0] == strtod + + +Input: 1.23456789e307 + +strtoQ consumes 14 bytes and returns 17 +with bits = #43fb194b 14bdaecd bcea468c 902464cf +printf("%.35Lg") gives 1.2345678899999999999999999999999999e+307 +g_Qfmt(0) gives 15 bytes: "1.23456789e+307" + +strtoIQ returns 17, consuming 14 bytes. +fI[0] = #43fb194b 14bdaecd bcea468c 902464cf += 1.2345678899999999999999999999999999e+307 +fI[1] = #43fb194b 14bdaecd bcea468c 902464d0 += 1.2345678900000000000000000000000001e+307 +fI[0] == strtod + + +Input: 1.23456589e-307 + +strtoQ consumes 15 bytes and returns 17 +with bits = #3c036319 6bb9845f a6d234e3 39163574 +printf("%.35Lg") gives 1.23456589e-307 +g_Qfmt(0) gives 15 bytes: "1.23456589e-307" + +strtoIQ returns 17, consuming 15 bytes. +fI[0] = #3c036319 6bb9845f a6d234e3 39163574 += 1.23456589e-307 +fI[1] = #3c036319 6bb9845f a6d234e3 39163575 += 1.2345658900000000000000000000000002e-307 +fI[0] == strtod + + +Input: 1.234567890123456789 + +strtoQ consumes 20 bytes and returns 17 +with bits = #3fff3c0c a428c59f b71a4194 68dd175b +printf("%.35Lg") gives 1.234567890123456789 +g_Qfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIQ returns 17, consuming 20 bytes. +fI[0] = #3fff3c0c a428c59f b71a4194 68dd175b += 1.234567890123456789 +fI[1] = #3fff3c0c a428c59f b71a4194 68dd175c += 1.2345678901234567890000000000000002 +fI[0] == strtod + + +Input: 1.234567890123456789e301 + +strtoQ consumes 24 bytes and returns 33 +with bits = #43e726f5 175f5641 3017ea80 763990ef +printf("%.35Lg") gives 1.2345678901234567890000000000000001e+301 +g_Qfmt(0) gives 25 bytes: "1.234567890123456789e+301" + +strtoIQ returns 33, consuming 24 bytes. +fI[0] = #43e726f5 175f5641 3017ea80 763990ee += 1.2345678901234567889999999999999999e+301 +fI[1] = #43e726f5 175f5641 3017ea80 763990ef += 1.2345678901234567890000000000000001e+301 +fI[1] == strtod + + +Input: 1.234567890123456789e-301 + +strtoQ consumes 25 bytes and returns 17 +with bits = #3c1752a6 4e34ba0d 35b19b04 3222fce5 +printf("%.35Lg") gives 1.234567890123456789e-301 +g_Qfmt(0) gives 25 bytes: "1.234567890123456789e-301" + +strtoIQ returns 17, consuming 25 bytes. +fI[0] = #3c1752a6 4e34ba0d 35b19b04 3222fce5 += 1.234567890123456789e-301 +fI[1] = #3c1752a6 4e34ba0d 35b19b04 3222fce6 += 1.2345678901234567890000000000000002e-301 +fI[0] == strtod + + +Input: 1.234567890123456789e-321 + +strtoQ consumes 25 bytes and returns 17 +with bits = #3bd4f3c2 3699d4db 99d1ea94 2fecd7de +printf("%.35Lg") gives 1.234567890123456789e-321 +g_Qfmt(0) gives 25 bytes: "1.234567890123456789e-321" + +strtoIQ returns 17, consuming 25 bytes. +fI[0] = #3bd4f3c2 3699d4db 99d1ea94 2fecd7de += 1.234567890123456789e-321 +fI[1] = #3bd4f3c2 3699d4db 99d1ea94 2fecd7df += 1.2345678901234567890000000000000001e-321 +fI[0] == strtod + + +Input: 1e23 + +strtoQ consumes 4 bytes and returns 1 +with bits = #404b52d0 2c7e14af 68000000 0 +printf("%.35Lg") gives 100000000000000000000000 +g_Qfmt(0) gives 5 bytes: "1e+23" + +strtoIQ returns 1, consuming 4 bytes. +fI[0] == fI[1] = #404b52d0 2c7e14af 68000000 0 += 100000000000000000000000 + + +Input: 1e310 + +strtoQ consumes 5 bytes and returns 33 +with bits = #4404bd03 c8140697 9e9ff00e fefd4cbd +printf("%.35Lg") gives 1e+310 +g_Qfmt(0) gives 6 bytes: "1e+310" + +strtoIQ returns 33, consuming 5 bytes. +fI[0] = #4404bd03 c8140697 9e9ff00e fefd4cbc += 9.9999999999999999999999999999999992e+309 +fI[1] = #4404bd03 c8140697 9e9ff00e fefd4cbd += 1e+310 +fI[1] == strtod + + +Input: 9.0259718793241475e-277 + +strtoQ consumes 23 bytes and returns 17 +with bits = #3c69ffff ffffffff f9ed5779 ac118fe1 +printf("%.35Lg") gives 9.0259718793241474999999999999999997e-277 +g_Qfmt(0) gives 23 bytes: "9.0259718793241475e-277" + +strtoIQ returns 17, consuming 23 bytes. +fI[0] = #3c69ffff ffffffff f9ed5779 ac118fe1 += 9.0259718793241474999999999999999997e-277 +fI[1] = #3c69ffff ffffffff f9ed5779 ac118fe2 += 9.0259718793241475000000000000000006e-277 +fI[0] == strtod + + +Input: 9.025971879324147880346310405869e-277 + +strtoQ consumes 37 bytes and returns 33 +with bits = #3c6a0000 0 0 9a +printf("%.35Lg") gives 9.0259718793241478803463104058690004e-277 +g_Qfmt(0) gives 37 bytes: "9.025971879324147880346310405869e-277" + +strtoIQ returns 33, consuming 37 bytes. +fI[0] = #3c6a0000 0 0 99 += 9.0259718793241478803463104058689987e-277 +fI[1] = #3c6a0000 0 0 9a += 9.0259718793241478803463104058690004e-277 +fI[1] == strtod + + +Input: 9.025971879324147880346310405868e-277 + +strtoQ consumes 37 bytes and returns 17 +with bits = #3c69ffff ffffffff ffffffff fffffcb5 +printf("%.35Lg") gives 9.025971879324147880346310405868e-277 +g_Qfmt(0) gives 37 bytes: "9.025971879324147880346310405868e-277" + +strtoIQ returns 17, consuming 37 bytes. +fI[0] = #3c69ffff ffffffff ffffffff fffffcb5 += 9.025971879324147880346310405868e-277 +fI[1] = #3c69ffff ffffffff ffffffff fffffcb6 += 9.0259718793241478803463104058680009e-277 +fI[0] == strtod + + +Input: 2.2250738585072014e-308 + +strtoQ consumes 23 bytes and returns 33 +with bits = #3c010000 0 8c304c cf867de0 +printf("%.35Lg") gives 2.2250738585072014000000000000000001e-308 +g_Qfmt(0) gives 23 bytes: "2.2250738585072014e-308" + +strtoIQ returns 33, consuming 23 bytes. +fI[0] = #3c010000 0 8c304c cf867ddf += 2.2250738585072013999999999999999997e-308 +fI[1] = #3c010000 0 8c304c cf867de0 += 2.2250738585072014000000000000000001e-308 +fI[1] == strtod + + +Input: 2.2250738585072013e-308 + +strtoQ consumes 23 bytes and returns 33 +with bits = #3c00ffff ffffffff fa9e4c4f 4c1e8a10 +printf("%.35Lg") gives 2.2250738585072013e-308 +g_Qfmt(0) gives 23 bytes: "2.2250738585072013e-308" + +strtoIQ returns 33, consuming 23 bytes. +fI[0] = #3c00ffff ffffffff fa9e4c4f 4c1e8a0f += 2.2250738585072012999999999999999998e-308 +fI[1] = #3c00ffff ffffffff fa9e4c4f 4c1e8a10 += 2.2250738585072013e-308 +fI[1] == strtod + + +Input: 3.2649476e14 + +strtoQ consumes 12 bytes and returns 1 +with bits = #402f28f1 fc30da00 0 0 +printf("%.35Lg") gives 326494760000000 +g_Qfmt(0) gives 13 bytes: "3.2649476e+14" + +strtoIQ returns 1, consuming 12 bytes. +fI[0] == fI[1] = #402f28f1 fc30da00 0 0 += 326494760000000 + +Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero) + +Input: 1.1 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff1999 99999999 99999999 99999999 +printf("%.35Lg") gives 1.0999999999999999999999999999999999 +g_Qfmt(0) gives 36 bytes: "1.0999999999999999999999999999999999" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff1999 99999999 99999999 99999999 += 1.0999999999999999999999999999999999 +fI[1] = #3fff1999 99999999 99999999 9999999a += 1.1000000000000000000000000000000001 +fI[0] == strtod + + +Input: -1.1 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff1999 99999999 99999999 99999999 +printf("%.35Lg") gives -1.0999999999999999999999999999999999 +g_Qfmt(0) gives 37 bytes: "-1.0999999999999999999999999999999999" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff1999 99999999 99999999 9999999a += -1.1000000000000000000000000000000001 +fI[1] = #bfff1999 99999999 99999999 99999999 += -1.0999999999999999999999999999999999 +fI[1] == strtod + + +Input: 1.2 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff3333 33333333 33333333 33333333 +printf("%.35Lg") gives 1.2 +g_Qfmt(0) gives 3 bytes: "1.2" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff3333 33333333 33333333 33333333 += 1.2 +fI[1] = #3fff3333 33333333 33333333 33333334 += 1.2000000000000000000000000000000002 +fI[0] == strtod + + +Input: -1.2 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff3333 33333333 33333333 33333333 +printf("%.35Lg") gives -1.2 +g_Qfmt(0) gives 4 bytes: "-1.2" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff3333 33333333 33333333 33333334 += -1.2000000000000000000000000000000002 +fI[1] = #bfff3333 33333333 33333333 33333333 += -1.2 +fI[1] == strtod + + +Input: 1.3 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff4ccc cccccccc cccccccc cccccccc +printf("%.35Lg") gives 1.2999999999999999999999999999999998 +g_Qfmt(0) gives 36 bytes: "1.2999999999999999999999999999999998" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff4ccc cccccccc cccccccc cccccccc += 1.2999999999999999999999999999999998 +fI[1] = #3fff4ccc cccccccc cccccccc cccccccd += 1.3 +fI[0] == strtod + + +Input: -1.3 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff4ccc cccccccc cccccccc cccccccc +printf("%.35Lg") gives -1.2999999999999999999999999999999998 +g_Qfmt(0) gives 37 bytes: "-1.2999999999999999999999999999999998" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff4ccc cccccccc cccccccc cccccccd += -1.3 +fI[1] = #bfff4ccc cccccccc cccccccc cccccccc += -1.2999999999999999999999999999999998 +fI[1] == strtod + + +Input: 1.4 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff6666 66666666 66666666 66666666 +printf("%.35Lg") gives 1.3999999999999999999999999999999999 +g_Qfmt(0) gives 3 bytes: "1.4" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff6666 66666666 66666666 66666666 += 1.3999999999999999999999999999999999 +fI[1] = #3fff6666 66666666 66666666 66666667 += 1.4000000000000000000000000000000001 +fI[0] == strtod + + +Input: -1.4 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff6666 66666666 66666666 66666666 +printf("%.35Lg") gives -1.3999999999999999999999999999999999 +g_Qfmt(0) gives 4 bytes: "-1.4" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff6666 66666666 66666666 66666667 += -1.4000000000000000000000000000000001 +fI[1] = #bfff6666 66666666 66666666 66666666 += -1.3999999999999999999999999999999999 +fI[1] == strtod + + +Input: 1.5 + +strtoQ consumes 3 bytes and returns 1 +with bits = #3fff8000 0 0 0 +printf("%.35Lg") gives 1.5 +g_Qfmt(0) gives 3 bytes: "1.5" + +strtoIQ returns 1, consuming 3 bytes. +fI[0] == fI[1] = #3fff8000 0 0 0 += 1.5 + + +Input: -1.5 + +strtoQ consumes 4 bytes and returns 9 +with bits = #bfff8000 0 0 0 +printf("%.35Lg") gives -1.5 +g_Qfmt(0) gives 4 bytes: "-1.5" + +strtoIQ returns 9, consuming 4 bytes. +fI[0] == fI[1] = #bfff8000 0 0 0 += -1.5 + + +Input: 1.6 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff9999 99999999 99999999 99999999 +printf("%.35Lg") gives 1.5999999999999999999999999999999999 +g_Qfmt(0) gives 36 bytes: "1.5999999999999999999999999999999999" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff9999 99999999 99999999 99999999 += 1.5999999999999999999999999999999999 +fI[1] = #3fff9999 99999999 99999999 9999999a += 1.6000000000000000000000000000000001 +fI[0] == strtod + + +Input: -1.6 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff9999 99999999 99999999 99999999 +printf("%.35Lg") gives -1.5999999999999999999999999999999999 +g_Qfmt(0) gives 37 bytes: "-1.5999999999999999999999999999999999" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff9999 99999999 99999999 9999999a += -1.6000000000000000000000000000000001 +fI[1] = #bfff9999 99999999 99999999 99999999 += -1.5999999999999999999999999999999999 +fI[1] == strtod + + +Input: 1.7 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffb333 33333333 33333333 33333333 +printf("%.35Lg") gives 1.7 +g_Qfmt(0) gives 3 bytes: "1.7" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffb333 33333333 33333333 33333333 += 1.7 +fI[1] = #3fffb333 33333333 33333333 33333334 += 1.7000000000000000000000000000000002 +fI[0] == strtod + + +Input: -1.7 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffb333 33333333 33333333 33333333 +printf("%.35Lg") gives -1.7 +g_Qfmt(0) gives 4 bytes: "-1.7" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffb333 33333333 33333333 33333334 += -1.7000000000000000000000000000000002 +fI[1] = #bfffb333 33333333 33333333 33333333 += -1.7 +fI[1] == strtod + + +Input: 1.8 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffcccc cccccccc cccccccc cccccccc +printf("%.35Lg") gives 1.7999999999999999999999999999999998 +g_Qfmt(0) gives 36 bytes: "1.7999999999999999999999999999999998" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fffcccc cccccccc cccccccc cccccccc += 1.7999999999999999999999999999999998 +fI[1] = #3fffcccc cccccccc cccccccc cccccccd += 1.8 +fI[0] == strtod + + +Input: -1.8 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffcccc cccccccc cccccccc cccccccc +printf("%.35Lg") gives -1.7999999999999999999999999999999998 +g_Qfmt(0) gives 37 bytes: "-1.7999999999999999999999999999999998" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfffcccc cccccccc cccccccc cccccccd += -1.8 +fI[1] = #bfffcccc cccccccc cccccccc cccccccc += -1.7999999999999999999999999999999998 +fI[1] == strtod + + +Input: 1.9 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffe666 66666666 66666666 66666666 +printf("%.35Lg") gives 1.8999999999999999999999999999999999 +g_Qfmt(0) gives 3 bytes: "1.9" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffe666 66666666 66666666 66666666 += 1.8999999999999999999999999999999999 +fI[1] = #3fffe666 66666666 66666666 66666667 += 1.9000000000000000000000000000000001 +fI[0] == strtod + + +Input: -1.9 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffe666 66666666 66666666 66666666 +printf("%.35Lg") gives -1.8999999999999999999999999999999999 +g_Qfmt(0) gives 4 bytes: "-1.9" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffe666 66666666 66666666 66666667 += -1.9000000000000000000000000000000001 +fI[1] = #bfffe666 66666666 66666666 66666666 += -1.8999999999999999999999999999999999 +fI[1] == strtod + +Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest) + +Input: 1.1 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff1999 99999999 99999999 9999999a +printf("%.35Lg") gives 1.1000000000000000000000000000000001 +g_Qfmt(0) gives 3 bytes: "1.1" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff1999 99999999 99999999 99999999 += 1.0999999999999999999999999999999999 +fI[1] = #3fff1999 99999999 99999999 9999999a += 1.1000000000000000000000000000000001 +fI[1] == strtod + + +Input: -1.1 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff1999 99999999 99999999 9999999a +printf("%.35Lg") gives -1.1000000000000000000000000000000001 +g_Qfmt(0) gives 4 bytes: "-1.1" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff1999 99999999 99999999 9999999a += -1.1000000000000000000000000000000001 +fI[1] = #bfff1999 99999999 99999999 99999999 += -1.0999999999999999999999999999999999 +fI[0] == strtod + + +Input: 1.2 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff3333 33333333 33333333 33333333 +printf("%.35Lg") gives 1.2 +g_Qfmt(0) gives 3 bytes: "1.2" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff3333 33333333 33333333 33333333 += 1.2 +fI[1] = #3fff3333 33333333 33333333 33333334 += 1.2000000000000000000000000000000002 +fI[0] == strtod + + +Input: -1.2 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff3333 33333333 33333333 33333333 +printf("%.35Lg") gives -1.2 +g_Qfmt(0) gives 4 bytes: "-1.2" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff3333 33333333 33333333 33333334 += -1.2000000000000000000000000000000002 +fI[1] = #bfff3333 33333333 33333333 33333333 += -1.2 +fI[1] == strtod + + +Input: 1.3 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff4ccc cccccccc cccccccc cccccccd +printf("%.35Lg") gives 1.3 +g_Qfmt(0) gives 3 bytes: "1.3" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff4ccc cccccccc cccccccc cccccccc += 1.2999999999999999999999999999999998 +fI[1] = #3fff4ccc cccccccc cccccccc cccccccd += 1.3 +fI[1] == strtod + + +Input: -1.3 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff4ccc cccccccc cccccccc cccccccd +printf("%.35Lg") gives -1.3 +g_Qfmt(0) gives 4 bytes: "-1.3" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff4ccc cccccccc cccccccc cccccccd += -1.3 +fI[1] = #bfff4ccc cccccccc cccccccc cccccccc += -1.2999999999999999999999999999999998 +fI[0] == strtod + + +Input: 1.4 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff6666 66666666 66666666 66666666 +printf("%.35Lg") gives 1.3999999999999999999999999999999999 +g_Qfmt(0) gives 3 bytes: "1.4" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff6666 66666666 66666666 66666666 += 1.3999999999999999999999999999999999 +fI[1] = #3fff6666 66666666 66666666 66666667 += 1.4000000000000000000000000000000001 +fI[0] == strtod + + +Input: -1.4 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff6666 66666666 66666666 66666666 +printf("%.35Lg") gives -1.3999999999999999999999999999999999 +g_Qfmt(0) gives 4 bytes: "-1.4" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff6666 66666666 66666666 66666667 += -1.4000000000000000000000000000000001 +fI[1] = #bfff6666 66666666 66666666 66666666 += -1.3999999999999999999999999999999999 +fI[1] == strtod + + +Input: 1.5 + +strtoQ consumes 3 bytes and returns 1 +with bits = #3fff8000 0 0 0 +printf("%.35Lg") gives 1.5 +g_Qfmt(0) gives 3 bytes: "1.5" + +strtoIQ returns 1, consuming 3 bytes. +fI[0] == fI[1] = #3fff8000 0 0 0 += 1.5 + + +Input: -1.5 + +strtoQ consumes 4 bytes and returns 9 +with bits = #bfff8000 0 0 0 +printf("%.35Lg") gives -1.5 +g_Qfmt(0) gives 4 bytes: "-1.5" + +strtoIQ returns 9, consuming 4 bytes. +fI[0] == fI[1] = #bfff8000 0 0 0 += -1.5 + + +Input: 1.6 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff9999 99999999 99999999 9999999a +printf("%.35Lg") gives 1.6000000000000000000000000000000001 +g_Qfmt(0) gives 3 bytes: "1.6" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff9999 99999999 99999999 99999999 += 1.5999999999999999999999999999999999 +fI[1] = #3fff9999 99999999 99999999 9999999a += 1.6000000000000000000000000000000001 +fI[1] == strtod + + +Input: -1.6 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff9999 99999999 99999999 9999999a +printf("%.35Lg") gives -1.6000000000000000000000000000000001 +g_Qfmt(0) gives 4 bytes: "-1.6" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff9999 99999999 99999999 9999999a += -1.6000000000000000000000000000000001 +fI[1] = #bfff9999 99999999 99999999 99999999 += -1.5999999999999999999999999999999999 +fI[0] == strtod + + +Input: 1.7 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffb333 33333333 33333333 33333333 +printf("%.35Lg") gives 1.7 +g_Qfmt(0) gives 3 bytes: "1.7" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffb333 33333333 33333333 33333333 += 1.7 +fI[1] = #3fffb333 33333333 33333333 33333334 += 1.7000000000000000000000000000000002 +fI[0] == strtod + + +Input: -1.7 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffb333 33333333 33333333 33333333 +printf("%.35Lg") gives -1.7 +g_Qfmt(0) gives 4 bytes: "-1.7" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffb333 33333333 33333333 33333334 += -1.7000000000000000000000000000000002 +fI[1] = #bfffb333 33333333 33333333 33333333 += -1.7 +fI[1] == strtod + + +Input: 1.8 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fffcccc cccccccc cccccccc cccccccd +printf("%.35Lg") gives 1.8 +g_Qfmt(0) gives 3 bytes: "1.8" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fffcccc cccccccc cccccccc cccccccc += 1.7999999999999999999999999999999998 +fI[1] = #3fffcccc cccccccc cccccccc cccccccd += 1.8 +fI[1] == strtod + + +Input: -1.8 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfffcccc cccccccc cccccccc cccccccd +printf("%.35Lg") gives -1.8 +g_Qfmt(0) gives 4 bytes: "-1.8" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfffcccc cccccccc cccccccc cccccccd += -1.8 +fI[1] = #bfffcccc cccccccc cccccccc cccccccc += -1.7999999999999999999999999999999998 +fI[0] == strtod + + +Input: 1.9 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffe666 66666666 66666666 66666666 +printf("%.35Lg") gives 1.8999999999999999999999999999999999 +g_Qfmt(0) gives 3 bytes: "1.9" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffe666 66666666 66666666 66666666 += 1.8999999999999999999999999999999999 +fI[1] = #3fffe666 66666666 66666666 66666667 += 1.9000000000000000000000000000000001 +fI[0] == strtod + + +Input: -1.9 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffe666 66666666 66666666 66666666 +printf("%.35Lg") gives -1.8999999999999999999999999999999999 +g_Qfmt(0) gives 4 bytes: "-1.9" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffe666 66666666 66666666 66666667 += -1.9000000000000000000000000000000001 +fI[1] = #bfffe666 66666666 66666666 66666666 += -1.8999999999999999999999999999999999 +fI[1] == strtod + +Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity) + +Input: 1.1 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff1999 99999999 99999999 9999999a +printf("%.35Lg") gives 1.1000000000000000000000000000000001 +g_Qfmt(0) gives 3 bytes: "1.1" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff1999 99999999 99999999 99999999 += 1.0999999999999999999999999999999999 +fI[1] = #3fff1999 99999999 99999999 9999999a += 1.1000000000000000000000000000000001 +fI[1] == strtod + + +Input: -1.1 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff1999 99999999 99999999 99999999 +printf("%.35Lg") gives -1.0999999999999999999999999999999999 +g_Qfmt(0) gives 37 bytes: "-1.0999999999999999999999999999999999" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff1999 99999999 99999999 9999999a += -1.1000000000000000000000000000000001 +fI[1] = #bfff1999 99999999 99999999 99999999 += -1.0999999999999999999999999999999999 +fI[1] == strtod + + +Input: 1.2 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff3333 33333333 33333333 33333334 +printf("%.35Lg") gives 1.2000000000000000000000000000000002 +g_Qfmt(0) gives 36 bytes: "1.2000000000000000000000000000000002" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff3333 33333333 33333333 33333333 += 1.2 +fI[1] = #3fff3333 33333333 33333333 33333334 += 1.2000000000000000000000000000000002 +fI[1] == strtod + + +Input: -1.2 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff3333 33333333 33333333 33333333 +printf("%.35Lg") gives -1.2 +g_Qfmt(0) gives 4 bytes: "-1.2" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff3333 33333333 33333333 33333334 += -1.2000000000000000000000000000000002 +fI[1] = #bfff3333 33333333 33333333 33333333 += -1.2 +fI[1] == strtod + + +Input: 1.3 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff4ccc cccccccc cccccccc cccccccd +printf("%.35Lg") gives 1.3 +g_Qfmt(0) gives 3 bytes: "1.3" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff4ccc cccccccc cccccccc cccccccc += 1.2999999999999999999999999999999998 +fI[1] = #3fff4ccc cccccccc cccccccc cccccccd += 1.3 +fI[1] == strtod + + +Input: -1.3 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff4ccc cccccccc cccccccc cccccccc +printf("%.35Lg") gives -1.2999999999999999999999999999999998 +g_Qfmt(0) gives 37 bytes: "-1.2999999999999999999999999999999998" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff4ccc cccccccc cccccccc cccccccd += -1.3 +fI[1] = #bfff4ccc cccccccc cccccccc cccccccc += -1.2999999999999999999999999999999998 +fI[1] == strtod + + +Input: 1.4 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff6666 66666666 66666666 66666667 +printf("%.35Lg") gives 1.4000000000000000000000000000000001 +g_Qfmt(0) gives 36 bytes: "1.4000000000000000000000000000000001" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff6666 66666666 66666666 66666666 += 1.3999999999999999999999999999999999 +fI[1] = #3fff6666 66666666 66666666 66666667 += 1.4000000000000000000000000000000001 +fI[1] == strtod + + +Input: -1.4 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff6666 66666666 66666666 66666666 +printf("%.35Lg") gives -1.3999999999999999999999999999999999 +g_Qfmt(0) gives 4 bytes: "-1.4" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff6666 66666666 66666666 66666667 += -1.4000000000000000000000000000000001 +fI[1] = #bfff6666 66666666 66666666 66666666 += -1.3999999999999999999999999999999999 +fI[1] == strtod + + +Input: 1.5 + +strtoQ consumes 3 bytes and returns 1 +with bits = #3fff8000 0 0 0 +printf("%.35Lg") gives 1.5 +g_Qfmt(0) gives 3 bytes: "1.5" + +strtoIQ returns 1, consuming 3 bytes. +fI[0] == fI[1] = #3fff8000 0 0 0 += 1.5 + + +Input: -1.5 + +strtoQ consumes 4 bytes and returns 9 +with bits = #bfff8000 0 0 0 +printf("%.35Lg") gives -1.5 +g_Qfmt(0) gives 4 bytes: "-1.5" + +strtoIQ returns 9, consuming 4 bytes. +fI[0] == fI[1] = #bfff8000 0 0 0 += -1.5 + + +Input: 1.6 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fff9999 99999999 99999999 9999999a +printf("%.35Lg") gives 1.6000000000000000000000000000000001 +g_Qfmt(0) gives 3 bytes: "1.6" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff9999 99999999 99999999 99999999 += 1.5999999999999999999999999999999999 +fI[1] = #3fff9999 99999999 99999999 9999999a += 1.6000000000000000000000000000000001 +fI[1] == strtod + + +Input: -1.6 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfff9999 99999999 99999999 99999999 +printf("%.35Lg") gives -1.5999999999999999999999999999999999 +g_Qfmt(0) gives 37 bytes: "-1.5999999999999999999999999999999999" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff9999 99999999 99999999 9999999a += -1.6000000000000000000000000000000001 +fI[1] = #bfff9999 99999999 99999999 99999999 += -1.5999999999999999999999999999999999 +fI[1] == strtod + + +Input: 1.7 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fffb333 33333333 33333333 33333334 +printf("%.35Lg") gives 1.7000000000000000000000000000000002 +g_Qfmt(0) gives 36 bytes: "1.7000000000000000000000000000000002" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffb333 33333333 33333333 33333333 += 1.7 +fI[1] = #3fffb333 33333333 33333333 33333334 += 1.7000000000000000000000000000000002 +fI[1] == strtod + + +Input: -1.7 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffb333 33333333 33333333 33333333 +printf("%.35Lg") gives -1.7 +g_Qfmt(0) gives 4 bytes: "-1.7" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffb333 33333333 33333333 33333334 += -1.7000000000000000000000000000000002 +fI[1] = #bfffb333 33333333 33333333 33333333 += -1.7 +fI[1] == strtod + + +Input: 1.8 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fffcccc cccccccc cccccccc cccccccd +printf("%.35Lg") gives 1.8 +g_Qfmt(0) gives 3 bytes: "1.8" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fffcccc cccccccc cccccccc cccccccc += 1.7999999999999999999999999999999998 +fI[1] = #3fffcccc cccccccc cccccccc cccccccd += 1.8 +fI[1] == strtod + + +Input: -1.8 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffcccc cccccccc cccccccc cccccccc +printf("%.35Lg") gives -1.7999999999999999999999999999999998 +g_Qfmt(0) gives 37 bytes: "-1.7999999999999999999999999999999998" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfffcccc cccccccc cccccccc cccccccd += -1.8 +fI[1] = #bfffcccc cccccccc cccccccc cccccccc += -1.7999999999999999999999999999999998 +fI[1] == strtod + + +Input: 1.9 + +strtoQ consumes 3 bytes and returns 33 +with bits = #3fffe666 66666666 66666666 66666667 +printf("%.35Lg") gives 1.9000000000000000000000000000000001 +g_Qfmt(0) gives 36 bytes: "1.9000000000000000000000000000000001" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffe666 66666666 66666666 66666666 += 1.8999999999999999999999999999999999 +fI[1] = #3fffe666 66666666 66666666 66666667 += 1.9000000000000000000000000000000001 +fI[1] == strtod + + +Input: -1.9 + +strtoQ consumes 4 bytes and returns 25 +with bits = #bfffe666 66666666 66666666 66666666 +printf("%.35Lg") gives -1.8999999999999999999999999999999999 +g_Qfmt(0) gives 4 bytes: "-1.9" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffe666 66666666 66666666 66666667 += -1.9000000000000000000000000000000001 +fI[1] = #bfffe666 66666666 66666666 66666666 += -1.8999999999999999999999999999999999 +fI[1] == strtod + +Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity) + +Input: 1.1 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff1999 99999999 99999999 99999999 +printf("%.35Lg") gives 1.0999999999999999999999999999999999 +g_Qfmt(0) gives 36 bytes: "1.0999999999999999999999999999999999" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff1999 99999999 99999999 99999999 += 1.0999999999999999999999999999999999 +fI[1] = #3fff1999 99999999 99999999 9999999a += 1.1000000000000000000000000000000001 +fI[0] == strtod + + +Input: -1.1 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff1999 99999999 99999999 9999999a +printf("%.35Lg") gives -1.1000000000000000000000000000000001 +g_Qfmt(0) gives 4 bytes: "-1.1" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff1999 99999999 99999999 9999999a += -1.1000000000000000000000000000000001 +fI[1] = #bfff1999 99999999 99999999 99999999 += -1.0999999999999999999999999999999999 +fI[0] == strtod + + +Input: 1.2 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff3333 33333333 33333333 33333333 +printf("%.35Lg") gives 1.2 +g_Qfmt(0) gives 3 bytes: "1.2" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff3333 33333333 33333333 33333333 += 1.2 +fI[1] = #3fff3333 33333333 33333333 33333334 += 1.2000000000000000000000000000000002 +fI[0] == strtod + + +Input: -1.2 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff3333 33333333 33333333 33333334 +printf("%.35Lg") gives -1.2000000000000000000000000000000002 +g_Qfmt(0) gives 37 bytes: "-1.2000000000000000000000000000000002" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff3333 33333333 33333333 33333334 += -1.2000000000000000000000000000000002 +fI[1] = #bfff3333 33333333 33333333 33333333 += -1.2 +fI[0] == strtod + + +Input: 1.3 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff4ccc cccccccc cccccccc cccccccc +printf("%.35Lg") gives 1.2999999999999999999999999999999998 +g_Qfmt(0) gives 36 bytes: "1.2999999999999999999999999999999998" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff4ccc cccccccc cccccccc cccccccc += 1.2999999999999999999999999999999998 +fI[1] = #3fff4ccc cccccccc cccccccc cccccccd += 1.3 +fI[0] == strtod + + +Input: -1.3 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff4ccc cccccccc cccccccc cccccccd +printf("%.35Lg") gives -1.3 +g_Qfmt(0) gives 4 bytes: "-1.3" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff4ccc cccccccc cccccccc cccccccd += -1.3 +fI[1] = #bfff4ccc cccccccc cccccccc cccccccc += -1.2999999999999999999999999999999998 +fI[0] == strtod + + +Input: 1.4 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff6666 66666666 66666666 66666666 +printf("%.35Lg") gives 1.3999999999999999999999999999999999 +g_Qfmt(0) gives 3 bytes: "1.4" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fff6666 66666666 66666666 66666666 += 1.3999999999999999999999999999999999 +fI[1] = #3fff6666 66666666 66666666 66666667 += 1.4000000000000000000000000000000001 +fI[0] == strtod + + +Input: -1.4 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff6666 66666666 66666666 66666667 +printf("%.35Lg") gives -1.4000000000000000000000000000000001 +g_Qfmt(0) gives 37 bytes: "-1.4000000000000000000000000000000001" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfff6666 66666666 66666666 66666667 += -1.4000000000000000000000000000000001 +fI[1] = #bfff6666 66666666 66666666 66666666 += -1.3999999999999999999999999999999999 +fI[0] == strtod + + +Input: 1.5 + +strtoQ consumes 3 bytes and returns 1 +with bits = #3fff8000 0 0 0 +printf("%.35Lg") gives 1.5 +g_Qfmt(0) gives 3 bytes: "1.5" + +strtoIQ returns 1, consuming 3 bytes. +fI[0] == fI[1] = #3fff8000 0 0 0 += 1.5 + + +Input: -1.5 + +strtoQ consumes 4 bytes and returns 9 +with bits = #bfff8000 0 0 0 +printf("%.35Lg") gives -1.5 +g_Qfmt(0) gives 4 bytes: "-1.5" + +strtoIQ returns 9, consuming 4 bytes. +fI[0] == fI[1] = #bfff8000 0 0 0 += -1.5 + + +Input: 1.6 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fff9999 99999999 99999999 99999999 +printf("%.35Lg") gives 1.5999999999999999999999999999999999 +g_Qfmt(0) gives 36 bytes: "1.5999999999999999999999999999999999" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fff9999 99999999 99999999 99999999 += 1.5999999999999999999999999999999999 +fI[1] = #3fff9999 99999999 99999999 9999999a += 1.6000000000000000000000000000000001 +fI[0] == strtod + + +Input: -1.6 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfff9999 99999999 99999999 9999999a +printf("%.35Lg") gives -1.6000000000000000000000000000000001 +g_Qfmt(0) gives 4 bytes: "-1.6" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfff9999 99999999 99999999 9999999a += -1.6000000000000000000000000000000001 +fI[1] = #bfff9999 99999999 99999999 99999999 += -1.5999999999999999999999999999999999 +fI[0] == strtod + + +Input: 1.7 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffb333 33333333 33333333 33333333 +printf("%.35Lg") gives 1.7 +g_Qfmt(0) gives 3 bytes: "1.7" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffb333 33333333 33333333 33333333 += 1.7 +fI[1] = #3fffb333 33333333 33333333 33333334 += 1.7000000000000000000000000000000002 +fI[0] == strtod + + +Input: -1.7 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfffb333 33333333 33333333 33333334 +printf("%.35Lg") gives -1.7000000000000000000000000000000002 +g_Qfmt(0) gives 37 bytes: "-1.7000000000000000000000000000000002" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffb333 33333333 33333333 33333334 += -1.7000000000000000000000000000000002 +fI[1] = #bfffb333 33333333 33333333 33333333 += -1.7 +fI[0] == strtod + + +Input: 1.8 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffcccc cccccccc cccccccc cccccccc +printf("%.35Lg") gives 1.7999999999999999999999999999999998 +g_Qfmt(0) gives 36 bytes: "1.7999999999999999999999999999999998" + +strtoIQ returns 33, consuming 3 bytes. +fI[0] = #3fffcccc cccccccc cccccccc cccccccc += 1.7999999999999999999999999999999998 +fI[1] = #3fffcccc cccccccc cccccccc cccccccd += 1.8 +fI[0] == strtod + + +Input: -1.8 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfffcccc cccccccc cccccccc cccccccd +printf("%.35Lg") gives -1.8 +g_Qfmt(0) gives 4 bytes: "-1.8" + +strtoIQ returns 41, consuming 4 bytes. +fI[0] = #bfffcccc cccccccc cccccccc cccccccd += -1.8 +fI[1] = #bfffcccc cccccccc cccccccc cccccccc += -1.7999999999999999999999999999999998 +fI[0] == strtod + + +Input: 1.9 + +strtoQ consumes 3 bytes and returns 17 +with bits = #3fffe666 66666666 66666666 66666666 +printf("%.35Lg") gives 1.8999999999999999999999999999999999 +g_Qfmt(0) gives 3 bytes: "1.9" + +strtoIQ returns 17, consuming 3 bytes. +fI[0] = #3fffe666 66666666 66666666 66666666 += 1.8999999999999999999999999999999999 +fI[1] = #3fffe666 66666666 66666666 66666667 += 1.9000000000000000000000000000000001 +fI[0] == strtod + + +Input: -1.9 + +strtoQ consumes 4 bytes and returns 41 +with bits = #bfffe666 66666666 66666666 66666667 +printf("%.35Lg") gives -1.9000000000000000000000000000000001 +g_Qfmt(0) gives 37 bytes: "-1.9000000000000000000000000000000001" + +strtoIQ returns 25, consuming 4 bytes. +fI[0] = #bfffe666 66666666 66666666 66666667 += -1.9000000000000000000000000000000001 +fI[1] = #bfffe666 66666666 66666666 66666666 += -1.8999999999999999999999999999999999 +fI[0] == strtod + diff -Nru mlton-20130715/runtime/gdtoa/test/Qtest.c mlton-20210117+dfsg/runtime/gdtoa/test/Qtest.c --- mlton-20130715/runtime/gdtoa/test/Qtest.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/Qtest.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,198 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998-2001 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* Test program for g_Qfmt, strtoIQ, strtopQ, and strtorQ. + * + * Inputs (on stdin): + * r rounding_mode + * n ndig + * number + * #hex0 hex1 hex2 hex3 + * + * rounding_mode values: + * 0 = toward zero + * 1 = nearest + * 2 = toward +Infinity + * 3 = toward -Infinity + * + * where number is a decimal floating-point number, + * hex0 is a string of <= 8 Hex digits for the most significant + * word of the number, hex1 is a similar string for the next + * word, etc., and ndig is a parameters to g_Qfmt. + */ + +#include "gdtoa.h" +#include +#include +#include + + extern int getround ANSI((int,char*)); + + static char ibuf[2048], obuf[2048], obuf1[2048]; +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#endif +#ifdef IEEE_8087 +#define _0 3 +#define _1 2 +#define _2 1 +#define _3 0 +#endif + +#define U (unsigned long) + + int +main(Void) +{ + char *s, *s1, *se, *se1; + int Ltest, i, dItry, ndig = 0, nik, nike, r = 1; + union { long double d; ULong bits[4]; } u, v[2], w; + + w.bits[0] = w.bits[3] = 0; + w.d = 1.; + u.d = 3.; + w.d = w.d / u.d; + Ltest = sizeof(long double) == 16 && w.bits[0] && w.bits[3]; + while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) { + while(*s <= ' ') + if (!*s++) + continue; + dItry = 0; + switch(*s) { + case 'r': + r = getround(r, s); + continue; + case 'n': + i = s[1]; + if (i <= ' ' || (i >= '0' && i <= '9')) { + ndig = atoi(s+1); + continue; + } + break; /* nan? */ + case '#': + /* sscanf(s+1, "%lx %lx %lx %lx", &u.bits[_0], */ + /* &u.bits[_1], &u.bits[_2], &u.bits[_3]); */ + u.bits[_0] = (ULong)strtoul(s1 = s+1, &se, 16); + if (se > s1) { + u.bits[_1] = (ULong)strtoul(s1 = se, &se, 16); + if (se > s1) { + u.bits[_2] = (ULong)strtoul(s1 = se, &se, 16); + if (se > s1) + u.bits[_3] = (ULong)strtoul(s1 = se, &se, 16); + } + } + printf("\nInput: %s", ibuf); + printf(" --> f = #%lx %lx %lx %lx\n", U u.bits[_0], + U u.bits[_1], U u.bits[_2], U u.bits[_3]); + i = 0; + goto fmt_test; + } + dItry = 1; + printf("\nInput: %s", ibuf); + i = strtorQ(ibuf, &se, r, u.bits); + if (r == 1 && (strtopQ(ibuf,&se1,v[0].bits) != i + || se != se1 || memcmp(u.bits, v[0].bits, 16))) + printf("***strtoQ and strtorQ disagree!!\n:"); + printf("\nstrtoQ consumes %d bytes and returns %d\n", + (int)(se-ibuf), i); + printf("with bits = #%lx %lx %lx %lx\n", + U u.bits[_0], U u.bits[_1], U u.bits[_2], U u.bits[_3]); + fmt_test: + if (Ltest) + printf("printf(\"%%.35Lg\") gives %.35Lg\n", u.d); + se = g_Qfmt(obuf, u.bits, ndig, sizeof(obuf)); + printf("g_Qfmt(%d) gives %d bytes: \"%s\"\n\n", ndig, + (int)(se-obuf), se ? obuf : ""); + se1 = g_Qfmt_p(obuf1, u.bits, ndig, sizeof(obuf1), 0); + if (se1 - obuf1 != se - obuf || strcmp(obuf, obuf1)) + printf("Botch: g_Qfmt_p gives \"%s\" rather than \"%s\"\n", + obuf1, obuf); + if (!dItry) + continue; + printf("strtoIQ returns %d,", + strtoIQ(ibuf, &se, v[0].bits, v[1].bits)); + printf(" consuming %d bytes.\n", (int)(se-ibuf)); + if (!memcmp(v[0].bits, v[1].bits, 16)) { + if (!memcpy(u.bits, v[0].bits, 16)) + printf("fI[0] == fI[1] == strtoQ\n"); + else { + printf("fI[0] == fI[1] = #%lx %lx %lx %lx\n", + U v[0].bits[_0], U v[0].bits[_1], + U v[0].bits[_2], U v[0].bits[_3]); + if (Ltest) + printf("= %.35Lg\n", v[0].d); + } + } + else { + printf("fI[0] = #%lx %lx %lx %lx\n", + U v[0].bits[_0], U v[0].bits[_1], + U v[0].bits[_2], U v[0].bits[_3]); + if (Ltest) + printf("= %.35Lg\n", v[0].d); + printf("fI[1] = #%lx %lx %lx %lx\n", + U v[1].bits[_0], U v[1].bits[_1], + U v[1].bits[_2], U v[1].bits[_3]); + if (Ltest) + printf("= %.35Lg\n", v[1].d); + if (!memcmp(v[0].bits, u.bits, 16)) + printf("fI[0] == strtod\n"); + else if (!memcmp(v[1].bits, u.bits, 16)) + printf("fI[1] == strtod\n"); + else + printf("**** Both differ from strtod ****\n"); + } + printf("\n"); + switch(i & STRTOG_Retmask) { + case STRTOG_Infinite: + for(nik = 0; nik < 6; ++nik) { + se1 = g_Qfmt_p(obuf1, u.bits, ndig, sizeof(obuf1), nik); + printf("g_Qfmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + break; + case STRTOG_NaN: + case STRTOG_NaNbits: + for(i = 0; i < 3; ++i) + for(nik = 6*i, nike = nik + 3; nik < nike; ++nik) { + se1 = g_Qfmt_p(obuf1, u.bits, ndig, sizeof(obuf1), nik); + printf("g_Qfmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + } + } + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/test/README mlton-20210117+dfsg/runtime/gdtoa/test/README --- mlton-20130715/runtime/gdtoa/test/README 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/README 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,81 @@ +This directory contains source for several test programs: + +dt is for conversion to/from double; it permits input of pairs of +32-bit hex integers as #hhhhhhhh hhhhhhhh (i.e., the initial '#' +indicates hex input). No initial # ==> decimal input. +After the input number is an optional : mode ndigits +(colon, and decimal integers for parameters "mode" and "ndigits" +to gdtoa). + +Qtest, ddtest, dtest, ftest, xLtest and xtest are for conversion to/from + + f IEEE single precision + d IEEE double precision + xL IEEE extended precision, as on Motorola 680x0 chips + x IEEE extended precision, as on Intel 80x87 chips or + software emulation of Motorola 680x0 chips + Q quad precision, as on Sun Sparc chips + dd double double, pairs of IEEE double numbers + whose sum is the desired value + +They're all similar, except for the precision. They test both +directed roundings and interval input (the strtoI* routines). +Lines that begin with "r" specify or interrogate the desired rounding +direction: + + 0 = toward 0 + 1 = nearest (default) + 2 = toward +Infinity + 3 = toward -Infinity + +These are the FPI_Round_* values in gdota.h. The "r" value is sticky: +it stays in effect til changed. To change the value, give a line that +starts with r followed by 0, 1, 2, or 3. To check the value, give "r" +by itself. + +Lines that begin with n followed by a number specify the ndig +argument for subsequent calls to the relevant g_*fmt routine. + +Lines that start with # followed by the appropriate number of +hexadecimal strings (see the comments) give the big-endian +internal representation of the desired number. + +When routines Qtest, xLtest, and xtest are used on machines whose +long double is of type "quad" (for Qtest) or "extended" (for x*test), +they try to print with %Lg as another way to show binary values. + +Program ddtest also accepts (white-space separated) pairs of decimal +input numbers; it converts both with strtod and feeds the result +to g_ddfmt. + +Program dItest exercises strtodI and strtoId. + +Programs dItestsi and ddtestsi are for testing the sudden-underflow +logic (on double and double-double conversions). + +Program strtodt tests strtod on some hard cases (in file testnos3) +posted by Fred Tydeman to comp.arch.arithmetic on 26 Feb. 1996. +To get correct results on Intel (x86) systems, the rounding precision +must be set to 53 bits. This can be done, e.g., by invoking +fpinit_ASL(), whose source appears in +http://www.netlib.org/ampl/solvers/fpinit.c . + +The obad directory shows results expected on (at least some) Intel x86 +Linux systems and may not be relevant to other systems. + +You can optionally compile getround.c with -DHonor_FLT_ROUNDS +to manually test strtof, strtod, etc., using fegetround(). +You can also or alternatively compile getround.c with +-DUSE_MY_LOCALE (when ../gdtoa.a is compiled with -DUSE_LOCALE) +to test multi-byte decimal points. + +If in the parent directory, you have sucessfully invoked "make Printf" +to add a "printf" (called Printf and accessed via ../stdio1.h), then +here you can use "make pf_test" and (if you have both a 64-bit long +double and a 113-bit "quad" double type) "make pf_testLq" for a brief +test of %g and %a variants in Printf. + +These are simple test programs, not meant for exhaustive testing, +but for manually testing "interesting" cases. Paxson's testbase +is good for more exhaustive testing, in part with random inputs. +See ftp://ftp.ee.lbl.gov/testbase-report.ps.Z . diff -Nru mlton-20130715/runtime/gdtoa/test/rtestnos mlton-20210117+dfsg/runtime/gdtoa/test/rtestnos --- mlton-20130715/runtime/gdtoa/test/rtestnos 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/rtestnos 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,76 @@ +r0 +1.1 +-1.1 +1.2 +-1.2 +1.3 +-1.3 +1.4 +-1.4 +1.5 +-1.5 +1.6 +-1.6 +1.7 +-1.7 +1.8 +-1.8 +1.9 +-1.9 +r1 +1.1 +-1.1 +1.2 +-1.2 +1.3 +-1.3 +1.4 +-1.4 +1.5 +-1.5 +1.6 +-1.6 +1.7 +-1.7 +1.8 +-1.8 +1.9 +-1.9 +r2 +1.1 +-1.1 +1.2 +-1.2 +1.3 +-1.3 +1.4 +-1.4 +1.5 +-1.5 +1.6 +-1.6 +1.7 +-1.7 +1.8 +-1.8 +1.9 +-1.9 +r3 +1.1 +-1.1 +1.2 +-1.2 +1.3 +-1.3 +1.4 +-1.4 +1.5 +-1.5 +1.6 +-1.6 +1.7 +-1.7 +1.8 +-1.8 +1.9 +-1.9 diff -Nru mlton-20130715/runtime/gdtoa/test/strtodISI.c mlton-20210117+dfsg/runtime/gdtoa/test/strtodISI.c --- mlton-20130715/runtime/gdtoa/test/strtodISI.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/strtodISI.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2 @@ +#define Sudden_Underflow +#include "../strtodI.c" diff -Nru mlton-20130715/runtime/gdtoa/test/strtodt.c mlton-20210117+dfsg/runtime/gdtoa/test/strtodt.c --- mlton-20130715/runtime/gdtoa/test/strtodt.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/strtodt.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,138 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 2001 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* Test strtod. */ + +/* On stdin, read triples: d x y: + * d = decimal string + * x = high-order Hex value expected from strtod + * y = low-order Hex value + * Complain about errors. + */ + +#include "gdtoa.h" /* for ULong */ +#include +#include +#include + + static int W0, W1; + typedef union { + double d; + ULong L[2]; + } U; + +#define UL (unsigned long) + + static int +process(char *fname, FILE *f) +{ + U a, b; + char buf[2048]; + char *s, *s1, *se; + int line, n; + + line = n = 0; + + top: + while(fgets(s = buf, sizeof(buf), f)) { + line++; + while(*s <= ' ') + if (!*s++) + goto top; /* break 2 */ + if (*s == '#') + continue; + while(*s > ' ') + s++; + /* if (sscanf(s,"\t%lx\t%lx", &a.L[0], &a.L[1]) != 2) */ + if ((a.L[0] = (ULong)strtoul(s, &s1,16), s1 <= s) + || (a.L[1] = (ULong)strtoul(s1,&se,16), se <= s1)) { + printf("Badly formatted line %d of %s\n", + line, fname); + n++; + continue; + } + b.d = strtod(buf,0); + if (b.L[W0] != a.L[0] || b.L[W1] != a.L[1]) { + n++; + printf("Line %d of %s: got %lx %lx; expected %lx %lx\n", + line, fname, UL b.L[W0], UL b.L[W1], UL a.L[0], UL a.L[1]); + } + } + return n; + } + + int +main(int argc, char **argv) +{ + FILE *f; + char *prog, *s; + int n, rc; + U u; + + prog = argv[0]; + if (argc == 2 && !strcmp(argv[1],"-?")) { + fprintf(stderr, "Usage: %s [file [file...]]\n" + "\tto read data file(s) of tab-separated triples d x y with\n" + "\t\td decimal string\n" + "\t\tx = high-order Hex value expected from strtod\n" + "\t\ty = low-order Hex value\n" + "\tComplain about errors by strtod.\n" + "\tIf no files, read triples from stdin.\n", + prog); + return 0; + } + + /* determine endian-ness */ + + u.d = 1.; + W0 = u.L[0] == 0; + W1 = 1 - W0; + + /* test */ + + n = rc = 0; + if (argc <= 1) + n = process("", stdin); + else + while((s = *++argv)) + if ((f = fopen(s,"r"))) { + n += process(s, f); + fclose(f); + } + else { + rc = 2; + fprintf(stderr, "Cannot open %s\n", s); + } + printf("%d bad conversions\n", n); + if (n) + rc |= 1; + return rc; + } diff -Nru mlton-20130715/runtime/gdtoa/test/strtoIddSI.c mlton-20210117+dfsg/runtime/gdtoa/test/strtoIddSI.c --- mlton-20130715/runtime/gdtoa/test/strtoIddSI.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/strtoIddSI.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2 @@ +#define Sudden_Underflow +#include "../strtoIdd.c" diff -Nru mlton-20130715/runtime/gdtoa/test/strtoIdSI.c mlton-20210117+dfsg/runtime/gdtoa/test/strtoIdSI.c --- mlton-20130715/runtime/gdtoa/test/strtoIdSI.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/strtoIdSI.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2 @@ +#define Sudden_Underflow +#include "../strtoId.c" diff -Nru mlton-20130715/runtime/gdtoa/test/strtopddSI.c mlton-20210117+dfsg/runtime/gdtoa/test/strtopddSI.c --- mlton-20130715/runtime/gdtoa/test/strtopddSI.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/strtopddSI.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2 @@ +#define Sudden_Underflow +#include "../strtopdd.c" diff -Nru mlton-20130715/runtime/gdtoa/test/strtorddSI.c mlton-20210117+dfsg/runtime/gdtoa/test/strtorddSI.c --- mlton-20130715/runtime/gdtoa/test/strtorddSI.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/strtorddSI.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,2 @@ +#define Sudden_Underflow +#include "../strtordd.c" diff -Nru mlton-20130715/runtime/gdtoa/test/testnos mlton-20210117+dfsg/runtime/gdtoa/test/testnos --- mlton-20130715/runtime/gdtoa/test/testnos 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/testnos 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,29 @@ +1.23 +1.23e+20 +1.23e-20 +1.23456789 +1.23456589e+20 +1.23e+30 +1.23e-30 +1.23456789e-20 +1.23456789e-30 +1.234567890123456789 +1.23456789012345678901234567890123456789 +1.23e306 +1.23e-306 +1.23e-320 +1.23e-20 +1.23456789e307 +1.23456589e-307 +1.234567890123456789 +1.234567890123456789e301 +1.234567890123456789e-301 +1.234567890123456789e-321 +1e23 +1e310 +9.0259718793241475e-277 +9.025971879324147880346310405869e-277 +9.025971879324147880346310405868e-277 +2.2250738585072014e-308 +2.2250738585072013e-308 +3.2649476e14 diff -Nru mlton-20130715/runtime/gdtoa/test/testnos1 mlton-20210117+dfsg/runtime/gdtoa/test/testnos1 --- mlton-20130715/runtime/gdtoa/test/testnos1 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/testnos1 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,20 @@ +1.23:2 6 +1.23:4 6 +1.23e+20:2 6 +1.23e+20:4 6 +1.23e-20:2 6 +1.23e-20:4 6 +1.23456789:2 6 +1.23456789:4 6 +1.23456589e+20:2 6 +1.23456589e+20:4 6 +1.23456789e-20:2 6 +1.23456789e-20:4 6 +1234565:2 6 +1234565:4 6 +1.234565:2 6 +1.234565:4 6 +1.234565e+20:2 6 +1.234565e+20:4 6 +1.234565e-20:2 6 +1.234565e-20:4 6 diff -Nru mlton-20130715/runtime/gdtoa/test/testnos3 mlton-20210117+dfsg/runtime/gdtoa/test/testnos3 --- mlton-20130715/runtime/gdtoa/test/testnos3 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/testnos3 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,352 @@ +# Test triples for strtodt, derived from Fred Tydeman's posting +# of 26 February 1996 to comp.arch.arithmetic. + +9e0306 7fa9a202 8368022e +4e-079 2fa7b6d7 1d20b96c +7e-261 9eb8d7e 32be6396 +6e-025 3ae7361c b863de62 +7e-161 1eaf7e0d b3799aa3 +7e0289 7c1cbb54 7777a285 +5e0079 507afcef 51f0fb5f +1e0080 508afcef 51f0fb5f +7e-303 1333391 31c46f8b +5e0152 5fa317e5 ef3ab327 +5e0125 5a07a2ec c414a03f +2e0126 5a27a2ec c414a03f +7e-141 22d5570f 59bd178c +4e-192 18323ff0 6eea847a +9e0043 49102498 ea6df0c4 +1e0303 7ed754e3 1cd072da +95e-089 2dde3cbc 9907fdc8 +85e0194 689d1c26 db7d0dae +69e0267 77c0b7cb 60c994da +97e-019 3c665dde 8e688ba6 +37e0046 49d033d7 eca0adef +74e0046 49e033d7 eca0adef +61e-099 2bc0ad83 6f269a17 +53e-208 151b39ae 1909c31b +93e-234 fc27b2e 4f210075 +79e-095 2c9a5db8 12948281 +87e-274 772d36c f48e7abd +83e0025 4585747a b143e353 +17e-036 38b698cc dc60015a +53e0033 47246a34 18629ef6 +51e-074 30ecd5be e57763e6 +63e-022 3bbdc03b 8fd7016a +839e0143 5e3ae03f 245703e2 +749e-182 1abf1472 7744c63e +999e-026 3b282782 afe1869e +345e0266 77b0b7cb 60c994da +914e-102 2b5ffc81 bc29f02b +829e0102 55b7221a 79cdd1d9 +307e0090 5322d6b1 83fe4b55 +859e0182 6654374d 8b87ac63 +283e0085 5216c309 24bab4b +589e0187 675526be 9c22eb17 +302e0176 64fdcf7d f8f573b7 +604e0176 650dcf7d f8f573b7 +761e-244 de03cea 3586452e +647e0230 7044d64d 4079150c +755e0174 64a7d931 93f78fc6 +255e-075 30dcd5be e57763e6 +3391e0055 4c159bd3 ad46e346 +4147e-015 3d923d1b 5eb1d778 +3996e-026 3b482782 afe1869e +1998e-026 3b382782 afe1869e +3338e-296 335519a c5142aab +1669e-296 325519a c5142aab +8699e-276 772d2df 246ecd2d +5311e0243 73284e91 f4aa0fdb +7903e-096 2cd07c2d 27a5b989 +7611e-226 11d19b87 44033457 +3257e0058 4cb444b3 4a6fb3eb +6514e0058 4cc444b3 4a6fb3eb +3571e0263 77462644 c61d41aa +7142e0263 77562644 c61d41aa +5311e0242 72f3720e 5d54d97c +1617e-063 3384c98f ce16152e +51881e0037 4897d295 dc76da4 +31441e-118 285ef890 f5de4c86 +30179e0079 5143e272 a77478e8 +60358e0079 5153e272 a77478e8 +63876e-020 3cc70385 6844bdbf +31938e-020 3cb70385 6844bdbf +46073e-032 3a42405b 773fbdf3 +32941e0051 4b757eb8 ad52a5c9 +82081e0041 49770105 df3d47cb +38701e-215 1440492a 4a8a37fd +62745e0047 4ab0c52f e6dc6a1b +12549e0048 4ac0c52f e6dc6a1b +64009e-183 1af099b3 93b84832 +89275e0261 77262644 c61d41aa +75859e0025 46232645 e1ba93f0 +57533e0287 7c8272ed 2307f56a +584169e0229 70ad6570 59dc79aa +940189e-112 29eb99d6 240c1a28 +416121e0197 6a00fd07 ed297f80 +832242e0197 6a10fd07 ed297f80 +584738e0076 50e8a85e b277e645 +933587e-140 241b2487 28b9c117 +252601e0121 5a2dda59 2e398dd7 +358423e0274 79f9463b 59b8f2bd +892771e-213 14f25818 c7294f27 +410405e0040 49670105 df3d47cb +928609e-261 afbe2dd 66200bef +302276e-254 c55a462 d91c6ab3 +920657e-023 3c653a99 85dbde6c +609019e-025 3bf1f99e 11ea0a24 +252601e0120 59f7e1e0 f1c7a4ac +654839e-060 34b00e7d b3b3f242 +8823691e0130 5c5e597c b94b7ae +2920845e0228 709d6570 59dc79aa +9210917e0080 51fda232 347e6032 +5800419e-303 26e58ff a48f4fce +6119898e-243 ee3ecf2 2ea07863 +3059949e-243 ed3ecf2 2ea07863 +2572231e0223 6f90f73b e1dff9ad +5444097e-021 3cf8849d d33c95af +5783893e-127 26f7e590 2ce0e151 +3865421e-225 1295d4fe 53afec65 +4590831e0156 61b4689b 4a5fa201 +9181662e0156 61c4689b 4a5fa201 +5906361e-027 3bbbe45a 312d08a0 +7315057e0235 7225f0d4 8362a72 +9088115e0106 5762e51a 84a3c6a0 +1817623e0107 5772e51a 84a3c6a0 +44118455e0129 5c4e597c b94b7ae +35282041e0293 7e5512d5 273e62e8 +31279898e-291 5129b01 b6885d36 +15639949e-291 5029b01 b6885d36 +27966061e0145 5f955bcf 72fd10f9 +55932122e0145 5fa55bcf 72fd10f9 +70176353e-053 36900683 a21de855 +40277543e-032 3adf29ca ff893b1 +50609263e0157 622193af f1f1c8e3 +66094077e0077 518b37c4 b7928317 +84863171e0114 59406e98 f5ec8f37 +89396333e0264 786526f0 61ca9053 +87575437e-309 16e0732 602056c +78693511e-044 3870bc7b 7603a2ca +90285923e-206 16d14700 83f89d48 +30155207e-030 3b423a4a d20748a2 +245540327e0121 5acc569e 968e0944 +263125459e0287 7d44997a 298b2f2e +566446538e-257 c64472b a9550e86 +283223269e-257 c54472b a9550e86 +245540327e0122 5b01b623 1e18c5cb +491080654e0122 5b11b623 1e18c5cb +971212611e-126 27a397d3 c9745d2f +229058583e0052 4c76ce94 febdc7a5 +325270231e0039 49cc7ccf 90c9f8ab +989648089e-035 3a8880a3 d515e849 +653777767e0273 7a720223 f2b3a881 +923091487e0209 6d30bc60 e6896717 +526250918e0288 7d89bfd8 b3edfafa +350301748e-309 18e0732 602056c +741111169e-203 17a14fe7 daf8f3ae +667284113e-240 ff09355 f8050c02 +1227701635e0120 5abc569e 968e0944 +9981396317e-182 1c38afe1 a2a66aa +5232604057e-298 41465b8 96c24520 +5572170023e-088 2fb08478 22f765b2 +1964322616e0122 5b31b623 1e18c5cb +3928645232e0122 5b41b623 1e18c5cb +8715380633e-058 35f4614c 3219891f +4856063055e-127 279397d3 c9745d2f +8336960483e-153 223a06a1 24b95e1 +1007046393e-155 21a01891 fc4717fd +5378822089e-176 1d695fd4 c88d4b1b +5981342308e-190 1a83db11 ac608107 +7214782613e-086 3020b552 d2edcdea +5458466829e0142 5f70acde 6a98eb4c +9078555839e-109 2b5fc575 867314ee +6418488827e0079 526021f1 4ed7b3fa +65325840981e0069 5081a151 ddbd3c4a +49573485983e0089 54a221bd 871d2cf4 +46275205733e0074 51830e6c 7d4e3480 +92550411466e0074 51930e6c 7d4e3480 +41129842097e-202 1832c3e7 2d179607 +93227267727e-049 380960fe 8d5847f +41297294357e0185 688c4943 7fccfadb +41534892987e-067 343a1266 6477886d +42333842451e0201 6be0189a 26df575f +78564021519e-227 13115551 5fd37265 +53587107423e-061 35800a19 a3ffd981 +53827010643e-200 18a32fa6 9a69bd6d +83356057653e0193 6a4544e6 daee2a18 +45256834646e-118 29a541ec dfd48694 +45392779195e-110 2b4fc575 867314ee +23934638219e0291 7e81deaf 40ead9a0 +995779191233e0113 59e2d44e dcc51304 +997422852243e-265 b676688 faee99bc +653532977297e-123 28d925a0 aabcdc68 +938885684947e0147 60f11894 b202e9f4 +619534293513e0124 5c210c20 303fe0f1 +539879452414e-042 39a5e66d c3d6bdb5 +742522891517e0259 782c1c35 2fc3c309 +254901016865e-022 3dbc06d3 66394441 +685763015669e0280 7c85fd7a a44d9477 +384865004907e-285 72aa65b 58639e69 +286556458711e0081 5321958b 36c5102b +573112917422e0081 5331958b 36c5102b +769525178383e-150 234253ec e161420 +416780288265e0192 6a3544e6 daee2a18 +226963895975e-111 2b3fc575 867314ee +665592809339e0063 4f778b65 16c2b478 +3891901811465e0217 6f99ab82 61990292 +4764593340755e0069 50e4177a 9915fbf8 +6336156586177e0269 7a7173f7 6c63b792 +8233559360849e0095 56566fee 5649a7a +3662265515198e-107 2c538e6e dd48f2a3 +1831132757599e-107 2c438e6e dd48f2a3 +7812878489261e-179 1d726dae 7bbeda75 +6363857920591e0145 60b28a61 cf9483b7 +8811915538555e0082 53a51f50 8b287ae7 +9997878507563e-195 1a253db2 fea1ea31 +9224786422069e-291 634ee5d 56b32957 +6284426329974e-294 58d3409 dfbca26f +9199302046091e-062 35c13597 2630774c +6070482281213e-122 29423fa9 e6fcf47e +2780161250963e-301 405acc2 53064c2 +8233559360849e0094 5621f324 d11d4862 +72027097041701e0206 6d946778 12d3a606 +97297545286625e0215 6f79ab82 61990292 +99021992302453e-025 3da5c671 4def374c +54104687080198e-022 3e373cdf 8db7a7bc +33519685743233e0089 5537f203 339c9629 +67039371486466e0089 5547f203 339c9629 +39064392446305e-180 1d626dae 7bbeda75 +17796979903653e0261 78e072f3 819c1321 +28921916763211e0038 4a9eebab e0957af3 +87605699161665e0155 6302920f 96e7f9ef +41921560615349e-067 34d9b2a5 c4041e4b +80527976643809e0061 4f7c7c5a ea080a49 +72335858886654e-159 21cce77c 2b3328fc +52656615219377e0102 57f561de f4a9ee32 +15400733123779e-072 33b8bf7e 7fa6f02a +77003665618895e-073 33a8bf7e 7fa6f02a +475603213226859e-042 3a42d730 88f4050a +972708181182949e0116 5b218a7f 36172332 +246411729980464e-071 342eef5e 1f90ac34 +123205864990232e-071 341eef5e 1f90ac34 +609610927149051e-255 e104273 b18918b1 +475603213226859e-041 3a778cfc ab31064d +672574798934795e0065 508226c6 84c87261 +134514959786959e0066 509226c6 84c87261 +294897574603217e-151 2395f2df 5e675a0f +723047919080275e0036 4a7eebab e0957af3 +660191429952702e-088 30bddc7e 975c5045 +330095714976351e-088 30addc7e 975c5045 +578686871093232e-159 21fce77c 2b3328fc +144671717773308e-159 21dce77c 2b3328fc +385018328094475e-074 3398bf7e 7fa6f02a +330095714976351e-089 3077e398 7916a69e +2215901545757777e-212 171a80a6 e566428c +1702061899637397e-276 9cacc46 749dccfe +1864950924021923e0213 6f53ae60 753af6ca +3729901848043846e0213 6f63ae60 753af6ca +7487252720986826e-165 20f8823a 57adbef9 +3743626360493413e-165 20e8823a 57adbef9 +4988915232824583e0119 5be5f6de 9d5d6b5b +3771476185376383e0277 7cae3c14 d6916ce9 +6182410494241627e-119 2a81b964 58445d07 +2572981889477453e0142 609dfc11 fbf46087 +7793560217139653e0051 4dd28046 1b856ec5 +9163942927285259e-202 194fe601 457dce4d +6353227084707473e0155 63650aff 653ffe8a +4431803091515554e-211 17609068 4f5fe998 +9324754620109615e0211 6f0f7d67 21f7f144 +8870461176410409e0263 79d90529 a37b7e22 +90372559027740405e0143 612491da ad0ba280 +18074511805548081e0146 61a011f2 d73116f4 +54897030182071313e0029 496ec556 66d8f9ec +76232626624829156e-032 3ccb7738 11e75fe +59898021767894608e-165 2128823a 57adbef9 +29949010883947304e-165 2118823a 57adbef9 +26153245263757307e0049 4d83de00 5bd620df +27176258005319167e-261 d27c074 7bd76fa1 +18074511805548081e0147 61d4166f 8cfd5cb1 +24691002732654881e-115 2b759a27 83ce70ab +58483921078398283e0057 4f408ce4 99519ce3 +64409240769861689e-159 22692238 f7987779 +94080055902682397e-242 11364981 e39e66ca +31766135423537365e0154 63550aff 653ffe8a +68985865317742005e0164 657a999d dec72aca +13797173063548401e0165 658a999d dec72aca +902042358290366539e-281 9522dc0 1ca1cb8c +238296178309629163e0272 7c038fd9 3f1f5342 +783308178698887621e0226 72925ae6 2cb346d8 +439176241456570504e0029 499ec556 66d8f9ec +899810892172646163e0283 7e6adf51 fa055e03 +926145344610700019e-225 14f307a6 7f1f69ff +653831131593932675e0047 4d63de00 5bd620df +130766226318786535e0048 4d73de00 5bd620df +557035730189854663e-294 693bfac 6bc4767b +902042358290366539e-280 986b930 23ca3e6f +272104041512242479e0200 6d13bbb4 bf05f087 +544208083024484958e0200 6d23bbb4 bf05f087 +680429695511221511e0192 6b808ebc 116f8a20 +308975121073410857e0236 7490db75 cc001072 +792644927852378159e0078 53d7bff3 36d8ff06 +783308178698887621e0223 71f2cbac 35f71140 +8396094300569779681e-252 f8ab223 efcee35a +3507665085003296281e-074 346b85c0 26a264e4 +7322325862592278999e0074 5336775b 6caa5ae0 +6014546754280072926e0209 6f396397 b06732a4 +7120190517612959703e0120 5cc3220d cd5899fd +3507665085003296281e-073 34a13398 18257f0f +4345544743100783551e-218 168a9c42 e5b6d89f +9778613303868468131e-090 313146fe 1075e1ef +7539204280836061195e-082 32d3d969 e3dbe723 +7862637540082247119e-202 19eaba32 62ee707b +2176832332097939832e0200 6d43bbb4 bf05f087 +8643988913946659879e0115 5bbe71ec 1ed0a4f9 +5529436763613147623e0138 6079c677 be6f236e +6764958008109694533e-173 1fed0669 2e6f5ef6 +6802601037806061975e0197 6cbf92ba cb3cb40c +1360520207561212395e0198 6ccf92ba cb3cb40c +62259110684423957791e0047 4dcd8f2c fc20d6e8 +88800290202542652011e-226 1526cec5 1a43f41a +41010852717673354694e-221 16201295 4b6aabba +20505426358836677347e-221 16101295 4b6aabba +66102447903809911604e0055 4f776206 8a24fd55 +35600952588064798515e0119 5cb3220d cd5899fd +14371240869903838702e0205 6e78d92d 2bcc7a81 +57500690832492901689e0043 4cf65d3e 2acd616b +23432630639573022093e-107 2dbdd54c 40a2f25f +62259110684423957791e0048 4e02797c 1d948651 +35620497849450218807e-306 475b220 82529425 +69658634627134074624e0200 6d93bbb4 bf05f087 +99440755792436956989e-062 37362d10 462a26f4 +55277197169490210673e0081 54d945bf a911e32a +36992084760177624177e-318 1f8c5f9 551c2f9a +30888265282878466443e-111 2cf01b8e f28251fc + +# examples of bugs introduced 20001113, fixed 20010207 +# first is 2^-1075 (half the smallest denormal) +2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125e-324 0 0 +2.47032822920623272e-324 0 0 + +# examples reported by Mark Dickinson of bugs in the bigcomp() logic introduced +# 20090316 in dtoa.c to speed handling of absurdly long input: +12579816049008305546974391768996369464963024663104e-357 90bbd 7412d19f +17489628565202117263145367596028389348922981857013e-357 c938e 9000492f +18487398785991994634182916638542680759613590482273e-357 d4b3a ee198863 +32002864200581033134358724675198044527469366773928e-358 24d1e ed8448e3 +99999999999999994487665465554760717039532578546e-47 3ff00000 0 +1.0000000000000000100000000000000000000001e44 4911efc6 59cf7d4c +1000000000000000000000000000000000000000e-16 44b52d02 c7e14af6 +10000000000000000000000000000000000000000e-17 44b52d02 c7e14af6 +10.900000000000000012345678912345678912345 4025cccc cccccccd +104308485241983990666713401708072175773165034278685682646111762292409330928739751702404658197872319129036519947435319418387839758990478549477777586673075945844895981012024387992135617064532141489278815239849108105951619997829153633535314849999674266169258928940692239684771590065027025835804863585454872499320500023126142553932654370362024104462255244034053203998964360882487378334860197725139151265590832887433736189468858614521708567646743455601905935595381852723723645799866672558576993978025033590728687206296379801363024094048327273913079612469982585674824156000783167963081616214710691759864332339239688734656548790656486646106983450809073750535624894296242072010195710276073042036425579852459556183541199012652571123898996574563824424330960027873516082763671875e-1075 78026 65fd9600 +99037485700245683102805043437346965248029601286431e-373 0 2 +99617639833743863161109961162881027406769510558457e-373 0 2 +98852915025769345295749278351563179840130565591462e-372 0 14 +99059944827693569659153042769690930905148015876788e-373 0 2 +98914979205069368270421829889078356254059760327101e-372 0 14 +0.999999999999999999999999999999999999999999999e23 44b52d02 c7e14af6 +991633793189150720000000000000000000000000000000000000000e-33 44ea3f92 6bad90c6 +37652435753827922121470370984740152789920e234 78f1667a c9e75d61 +999999999999999996790597280027956716285163e-42 3ff00000 0 +9483973038658180570348795755328802873667739881500874740826641664593613312413122937394311083577538394191754403820631172036846773125424639263833553383990195662207006139342261292777056851379062046720e0 68a03d69 82f2f936 +20209005503919489280000000000000000000000000000000000000000e-40 43bc0bae 57e880e6 diff -Nru mlton-20130715/runtime/gdtoa/test/xL.ou0 mlton-20210117+dfsg/runtime/gdtoa/test/xL.ou0 --- mlton-20130715/runtime/gdtoa/test/xL.ou0 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/xL.ou0 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1192 @@ + +Input: 1.23 + +strtoxL consumes 4 bytes and returns 33 +with bits = #3fff0000 9d70a3d7 a3d70a4 +g_xLfmt(0) gives 4 bytes: "1.23" + +strtoIxL returns 33, consuming 4 bytes. +fI[0] = #3fff0000 9d70a3d7 a3d70a3 +fI[1] = #3fff0000 9d70a3d7 a3d70a4 +fI[1] == strtoxL + + +Input: 1.23e+20 + +strtoxL consumes 8 bytes and returns 1 +with bits = #40410000 d55ef90a 2da18000 +g_xLfmt(0) gives 8 bytes: "1.23e+20" + +strtoIxL returns 1, consuming 8 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.23e-20 + +strtoxL consumes 8 bytes and returns 17 +with bits = #3fbc0000 e857267b b3a984f2 +g_xLfmt(0) gives 8 bytes: "1.23e-20" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #3fbc0000 e857267b b3a984f2 +fI[1] = #3fbc0000 e857267b b3a984f3 +fI[0] == strtoxL + + +Input: 1.23456789 + +strtoxL consumes 10 bytes and returns 33 +with bits = #3fff0000 9e065214 1ef0dbf6 +g_xLfmt(0) gives 10 bytes: "1.23456789" + +strtoIxL returns 33, consuming 10 bytes. +fI[0] = #3fff0000 9e065214 1ef0dbf5 +fI[1] = #3fff0000 9e065214 1ef0dbf6 +fI[1] == strtoxL + + +Input: 1.23456589e+20 + +strtoxL consumes 14 bytes and returns 1 +with bits = #40410000 d629bd33 5ccba00 +g_xLfmt(0) gives 14 bytes: "1.23456589e+20" + +strtoIxL returns 1, consuming 14 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.23e+30 + +strtoxL consumes 8 bytes and returns 17 +with bits = #40620000 f8658274 7dbc824a +g_xLfmt(0) gives 8 bytes: "1.23e+30" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #40620000 f8658274 7dbc824a +fI[1] = #40620000 f8658274 7dbc824b +fI[0] == strtoxL + + +Input: 1.23e-30 + +strtoxL consumes 8 bytes and returns 17 +with bits = #3f9b0000 c794337a 808554eb +g_xLfmt(0) gives 8 bytes: "1.23e-30" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #3f9b0000 c794337a 808554eb +fI[1] = #3f9b0000 c794337a 808554ec +fI[0] == strtoxL + + +Input: 1.23456789e-20 + +strtoxL consumes 14 bytes and returns 17 +with bits = #3fbc0000 e9340a38 f3d6d352 +g_xLfmt(0) gives 14 bytes: "1.23456789e-20" + +strtoIxL returns 17, consuming 14 bytes. +fI[0] = #3fbc0000 e9340a38 f3d6d352 +fI[1] = #3fbc0000 e9340a38 f3d6d353 +fI[0] == strtoxL + + +Input: 1.23456789e-30 + +strtoxL consumes 14 bytes and returns 17 +with bits = #3f9b0000 c851f19d decca8fc +g_xLfmt(0) gives 14 bytes: "1.23456789e-30" + +strtoIxL returns 17, consuming 14 bytes. +fI[0] = #3f9b0000 c851f19d decca8fc +fI[1] = #3f9b0000 c851f19d decca8fd +fI[0] == strtoxL + + +Input: 1.234567890123456789 + +strtoxL consumes 20 bytes and returns 17 +with bits = #3fff0000 9e065214 62cfdb8d +g_xLfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIxL returns 17, consuming 20 bytes. +fI[0] = #3fff0000 9e065214 62cfdb8d +fI[1] = #3fff0000 9e065214 62cfdb8e +fI[0] == strtoxL + + +Input: 1.23456789012345678901234567890123456789 + +strtoxL consumes 40 bytes and returns 17 +with bits = #3fff0000 9e065214 62cfdb8d +g_xLfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIxL returns 17, consuming 40 bytes. +fI[0] = #3fff0000 9e065214 62cfdb8d +fI[1] = #3fff0000 9e065214 62cfdb8e +fI[0] == strtoxL + + +Input: 1.23e306 + +strtoxL consumes 8 bytes and returns 17 +with bits = #43f70000 e033b668 e30fa6d5 +g_xLfmt(0) gives 9 bytes: "1.23e+306" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #43f70000 e033b668 e30fa6d5 +fI[1] = #43f70000 e033b668 e30fa6d6 +fI[0] == strtoxL + + +Input: 1.23e-306 + +strtoxL consumes 9 bytes and returns 33 +with bits = #3c060000 dd1dc2ed 1cb73f25 +g_xLfmt(0) gives 9 bytes: "1.23e-306" + +strtoIxL returns 33, consuming 9 bytes. +fI[0] = #3c060000 dd1dc2ed 1cb73f24 +fI[1] = #3c060000 dd1dc2ed 1cb73f25 +fI[1] == strtoxL + + +Input: 1.23e-320 + +strtoxL consumes 9 bytes and returns 33 +with bits = #3bd80000 9b98c371 844c3f1a +g_xLfmt(0) gives 9 bytes: "1.23e-320" + +strtoIxL returns 33, consuming 9 bytes. +fI[0] = #3bd80000 9b98c371 844c3f19 +fI[1] = #3bd80000 9b98c371 844c3f1a +fI[1] == strtoxL + + +Input: 1.23e-20 + +strtoxL consumes 8 bytes and returns 17 +with bits = #3fbc0000 e857267b b3a984f2 +g_xLfmt(0) gives 8 bytes: "1.23e-20" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #3fbc0000 e857267b b3a984f2 +fI[1] = #3fbc0000 e857267b b3a984f3 +fI[0] == strtoxL + + +Input: 1.23456789e307 + +strtoxL consumes 14 bytes and returns 17 +with bits = #43fb0000 8ca58a5e d766de75 +g_xLfmt(0) gives 15 bytes: "1.23456789e+307" + +strtoIxL returns 17, consuming 14 bytes. +fI[0] = #43fb0000 8ca58a5e d766de75 +fI[1] = #43fb0000 8ca58a5e d766de76 +fI[0] == strtoxL + + +Input: 1.23456589e-307 + +strtoxL consumes 15 bytes and returns 17 +with bits = #3c030000 b18cb5dc c22fd369 +g_xLfmt(0) gives 15 bytes: "1.23456589e-307" + +strtoIxL returns 17, consuming 15 bytes. +fI[0] = #3c030000 b18cb5dc c22fd369 +fI[1] = #3c030000 b18cb5dc c22fd36a +fI[0] == strtoxL + + +Input: 1.234567890123456789 + +strtoxL consumes 20 bytes and returns 17 +with bits = #3fff0000 9e065214 62cfdb8d +g_xLfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIxL returns 17, consuming 20 bytes. +fI[0] = #3fff0000 9e065214 62cfdb8d +fI[1] = #3fff0000 9e065214 62cfdb8e +fI[0] == strtoxL + + +Input: 1.234567890123456789e301 + +strtoxL consumes 24 bytes and returns 33 +with bits = #43e70000 937a8baf ab20980c +g_xLfmt(0) gives 25 bytes: "1.234567890123456789e+301" + +strtoIxL returns 33, consuming 24 bytes. +fI[0] = #43e70000 937a8baf ab20980b +fI[1] = #43e70000 937a8baf ab20980c +fI[1] == strtoxL + + +Input: 1.234567890123456789e-301 + +strtoxL consumes 25 bytes and returns 33 +with bits = #3c170000 a953271a 5d069ad9 +g_xLfmt(0) gives 25 bytes: "1.234567890123456789e-301" + +strtoIxL returns 33, consuming 25 bytes. +fI[0] = #3c170000 a953271a 5d069ad8 +fI[1] = #3c170000 a953271a 5d069ad9 +fI[1] == strtoxL + + +Input: 1.234567890123456789e-321 + +strtoxL consumes 25 bytes and returns 33 +with bits = #3bd40000 f9e11b4c ea6dcce9 +g_xLfmt(0) gives 25 bytes: "1.234567890123456789e-321" + +strtoIxL returns 33, consuming 25 bytes. +fI[0] = #3bd40000 f9e11b4c ea6dcce8 +fI[1] = #3bd40000 f9e11b4c ea6dcce9 +fI[1] == strtoxL + + +Input: 1e23 + +strtoxL consumes 4 bytes and returns 1 +with bits = #404b0000 a968163f a57b400 +g_xLfmt(0) gives 5 bytes: "1e+23" + +strtoIxL returns 1, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1e310 + +strtoxL consumes 5 bytes and returns 33 +with bits = #44040000 de81e40a 34bcf50 +g_xLfmt(0) gives 6 bytes: "1e+310" + +strtoIxL returns 33, consuming 5 bytes. +fI[0] = #44040000 de81e40a 34bcf4f +fI[1] = #44040000 de81e40a 34bcf50 +fI[1] == strtoxL + + +Input: 9.0259718793241475e-277 + +strtoxL consumes 23 bytes and returns 33 +with bits = #3c690000 ffffffff fffffcf7 +g_xLfmt(0) gives 23 bytes: "9.0259718793241475e-277" + +strtoIxL returns 33, consuming 23 bytes. +fI[0] = #3c690000 ffffffff fffffcf6 +fI[1] = #3c690000 ffffffff fffffcf7 +fI[1] == strtoxL + + +Input: 9.025971879324147880346310405869e-277 + +strtoxL consumes 37 bytes and returns 17 +with bits = #3c6a0000 80000000 0 +g_xLfmt(0) gives 26 bytes: "9.0259718793241478803e-277" + +strtoIxL returns 17, consuming 37 bytes. +fI[0] = #3c6a0000 80000000 0 +fI[1] = #3c6a0000 80000000 1 +fI[0] == strtoxL + + +Input: 9.025971879324147880346310405868e-277 + +strtoxL consumes 37 bytes and returns 33 +with bits = #3c6a0000 80000000 0 +g_xLfmt(0) gives 26 bytes: "9.0259718793241478803e-277" + +strtoIxL returns 33, consuming 37 bytes. +fI[0] = #3c690000 ffffffff ffffffff +fI[1] = #3c6a0000 80000000 0 +fI[1] == strtoxL + + +Input: 2.2250738585072014e-308 + +strtoxL consumes 23 bytes and returns 17 +with bits = #3c010000 80000000 46 +g_xLfmt(0) gives 23 bytes: "2.2250738585072014e-308" + +strtoIxL returns 17, consuming 23 bytes. +fI[0] = #3c010000 80000000 46 +fI[1] = #3c010000 80000000 47 +fI[0] == strtoxL + + +Input: 2.2250738585072013e-308 + +strtoxL consumes 23 bytes and returns 17 +with bits = #3c000000 ffffffff fffffd4f +g_xLfmt(0) gives 23 bytes: "2.2250738585072013e-308" + +strtoIxL returns 17, consuming 23 bytes. +fI[0] = #3c000000 ffffffff fffffd4f +fI[1] = #3c000000 ffffffff fffffd50 +fI[0] == strtoxL + + +Input: 3.2649476e14 + +strtoxL consumes 12 bytes and returns 1 +with bits = #402f0000 9478fe18 6d000000 +g_xLfmt(0) gives 13 bytes: "3.2649476e+14" + +strtoIxL returns 1, consuming 12 bytes. +fI[0] == fI[1] == strtoxL + +Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 8ccccccc cccccccc +g_xLfmt(0) gives 21 bytes: "1.0999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc +fI[1] = #3fff0000 8ccccccc cccccccd +fI[0] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 8ccccccc cccccccc +g_xLfmt(0) gives 22 bytes: "-1.0999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd +fI[1] = #bfff0000 8ccccccc cccccccc +fI[1] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 99999999 99999999 +g_xLfmt(0) gives 21 bytes: "1.1999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 +fI[1] = #3fff0000 99999999 9999999a +fI[0] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 99999999 99999999 +g_xLfmt(0) gives 22 bytes: "-1.1999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a +fI[1] = #bfff0000 99999999 99999999 +fI[1] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 a6666666 66666666 +g_xLfmt(0) gives 3 bytes: "1.3" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 +fI[1] = #3fff0000 a6666666 66666667 +fI[0] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 a6666666 66666666 +g_xLfmt(0) gives 4 bytes: "-1.3" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 +fI[1] = #bfff0000 a6666666 66666666 +fI[1] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 b3333333 33333333 +g_xLfmt(0) gives 3 bytes: "1.4" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 +fI[1] = #3fff0000 b3333333 33333334 +fI[0] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 b3333333 33333333 +g_xLfmt(0) gives 4 bytes: "-1.4" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 +fI[1] = #bfff0000 b3333333 33333333 +fI[1] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 cccccccc cccccccc +g_xLfmt(0) gives 21 bytes: "1.5999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc +fI[1] = #3fff0000 cccccccc cccccccd +fI[0] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 cccccccc cccccccc +g_xLfmt(0) gives 22 bytes: "-1.5999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd +fI[1] = #bfff0000 cccccccc cccccccc +fI[1] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 d9999999 99999999 +g_xLfmt(0) gives 21 bytes: "1.6999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 +fI[1] = #3fff0000 d9999999 9999999a +fI[0] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 d9999999 99999999 +g_xLfmt(0) gives 22 bytes: "-1.6999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a +fI[1] = #bfff0000 d9999999 99999999 +fI[1] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 e6666666 66666666 +g_xLfmt(0) gives 3 bytes: "1.8" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 +fI[1] = #3fff0000 e6666666 66666667 +fI[0] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 e6666666 66666666 +g_xLfmt(0) gives 4 bytes: "-1.8" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 +fI[1] = #bfff0000 e6666666 66666666 +fI[1] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 f3333333 33333333 +g_xLfmt(0) gives 3 bytes: "1.9" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 +fI[1] = #3fff0000 f3333333 33333334 +fI[0] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 f3333333 33333333 +g_xLfmt(0) gives 4 bytes: "-1.9" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 +fI[1] = #bfff0000 f3333333 33333333 +fI[1] == strtoxL + +Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 8ccccccc cccccccd +g_xLfmt(0) gives 3 bytes: "1.1" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc +fI[1] = #3fff0000 8ccccccc cccccccd +fI[1] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 8ccccccc cccccccd +g_xLfmt(0) gives 4 bytes: "-1.1" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd +fI[1] = #bfff0000 8ccccccc cccccccc +fI[0] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 99999999 9999999a +g_xLfmt(0) gives 3 bytes: "1.2" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 +fI[1] = #3fff0000 99999999 9999999a +fI[1] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 99999999 9999999a +g_xLfmt(0) gives 4 bytes: "-1.2" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a +fI[1] = #bfff0000 99999999 99999999 +fI[0] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 a6666666 66666666 +g_xLfmt(0) gives 3 bytes: "1.3" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 +fI[1] = #3fff0000 a6666666 66666667 +fI[0] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 a6666666 66666666 +g_xLfmt(0) gives 4 bytes: "-1.3" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 +fI[1] = #bfff0000 a6666666 66666666 +fI[1] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 b3333333 33333333 +g_xLfmt(0) gives 3 bytes: "1.4" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 +fI[1] = #3fff0000 b3333333 33333334 +fI[0] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 b3333333 33333333 +g_xLfmt(0) gives 4 bytes: "-1.4" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 +fI[1] = #bfff0000 b3333333 33333333 +fI[1] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 cccccccc cccccccd +g_xLfmt(0) gives 3 bytes: "1.6" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc +fI[1] = #3fff0000 cccccccc cccccccd +fI[1] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 cccccccc cccccccd +g_xLfmt(0) gives 4 bytes: "-1.6" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd +fI[1] = #bfff0000 cccccccc cccccccc +fI[0] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 d9999999 9999999a +g_xLfmt(0) gives 3 bytes: "1.7" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 +fI[1] = #3fff0000 d9999999 9999999a +fI[1] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 d9999999 9999999a +g_xLfmt(0) gives 4 bytes: "-1.7" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a +fI[1] = #bfff0000 d9999999 99999999 +fI[0] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 e6666666 66666666 +g_xLfmt(0) gives 3 bytes: "1.8" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 +fI[1] = #3fff0000 e6666666 66666667 +fI[0] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 e6666666 66666666 +g_xLfmt(0) gives 4 bytes: "-1.8" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 +fI[1] = #bfff0000 e6666666 66666666 +fI[1] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 f3333333 33333333 +g_xLfmt(0) gives 3 bytes: "1.9" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 +fI[1] = #3fff0000 f3333333 33333334 +fI[0] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 f3333333 33333333 +g_xLfmt(0) gives 4 bytes: "-1.9" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 +fI[1] = #bfff0000 f3333333 33333333 +fI[1] == strtoxL + +Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 8ccccccc cccccccd +g_xLfmt(0) gives 3 bytes: "1.1" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc +fI[1] = #3fff0000 8ccccccc cccccccd +fI[1] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 8ccccccc cccccccc +g_xLfmt(0) gives 22 bytes: "-1.0999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd +fI[1] = #bfff0000 8ccccccc cccccccc +fI[1] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 99999999 9999999a +g_xLfmt(0) gives 3 bytes: "1.2" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 +fI[1] = #3fff0000 99999999 9999999a +fI[1] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 99999999 99999999 +g_xLfmt(0) gives 22 bytes: "-1.1999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a +fI[1] = #bfff0000 99999999 99999999 +fI[1] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 a6666666 66666667 +g_xLfmt(0) gives 21 bytes: "1.3000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 +fI[1] = #3fff0000 a6666666 66666667 +fI[1] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 a6666666 66666666 +g_xLfmt(0) gives 4 bytes: "-1.3" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 +fI[1] = #bfff0000 a6666666 66666666 +fI[1] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 b3333333 33333334 +g_xLfmt(0) gives 21 bytes: "1.4000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 +fI[1] = #3fff0000 b3333333 33333334 +fI[1] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 b3333333 33333333 +g_xLfmt(0) gives 4 bytes: "-1.4" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 +fI[1] = #bfff0000 b3333333 33333333 +fI[1] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 cccccccc cccccccd +g_xLfmt(0) gives 3 bytes: "1.6" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc +fI[1] = #3fff0000 cccccccc cccccccd +fI[1] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 cccccccc cccccccc +g_xLfmt(0) gives 22 bytes: "-1.5999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd +fI[1] = #bfff0000 cccccccc cccccccc +fI[1] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 d9999999 9999999a +g_xLfmt(0) gives 3 bytes: "1.7" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 +fI[1] = #3fff0000 d9999999 9999999a +fI[1] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 d9999999 99999999 +g_xLfmt(0) gives 22 bytes: "-1.6999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a +fI[1] = #bfff0000 d9999999 99999999 +fI[1] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 e6666666 66666667 +g_xLfmt(0) gives 21 bytes: "1.8000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 +fI[1] = #3fff0000 e6666666 66666667 +fI[1] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 e6666666 66666666 +g_xLfmt(0) gives 4 bytes: "-1.8" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 +fI[1] = #bfff0000 e6666666 66666666 +fI[1] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 f3333333 33333334 +g_xLfmt(0) gives 21 bytes: "1.9000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 +fI[1] = #3fff0000 f3333333 33333334 +fI[1] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 f3333333 33333333 +g_xLfmt(0) gives 4 bytes: "-1.9" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 +fI[1] = #bfff0000 f3333333 33333333 +fI[1] == strtoxL + +Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 8ccccccc cccccccc +g_xLfmt(0) gives 21 bytes: "1.0999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc +fI[1] = #3fff0000 8ccccccc cccccccd +fI[0] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 8ccccccc cccccccd +g_xLfmt(0) gives 4 bytes: "-1.1" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd +fI[1] = #bfff0000 8ccccccc cccccccc +fI[0] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 99999999 99999999 +g_xLfmt(0) gives 21 bytes: "1.1999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 +fI[1] = #3fff0000 99999999 9999999a +fI[0] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 99999999 9999999a +g_xLfmt(0) gives 4 bytes: "-1.2" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a +fI[1] = #bfff0000 99999999 99999999 +fI[0] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 a6666666 66666666 +g_xLfmt(0) gives 3 bytes: "1.3" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 +fI[1] = #3fff0000 a6666666 66666667 +fI[0] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 a6666666 66666667 +g_xLfmt(0) gives 22 bytes: "-1.3000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 +fI[1] = #bfff0000 a6666666 66666666 +fI[0] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 b3333333 33333333 +g_xLfmt(0) gives 3 bytes: "1.4" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 +fI[1] = #3fff0000 b3333333 33333334 +fI[0] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 b3333333 33333334 +g_xLfmt(0) gives 22 bytes: "-1.4000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 +fI[1] = #bfff0000 b3333333 33333333 +fI[0] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 cccccccc cccccccc +g_xLfmt(0) gives 21 bytes: "1.5999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc +fI[1] = #3fff0000 cccccccc cccccccd +fI[0] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 cccccccc cccccccd +g_xLfmt(0) gives 4 bytes: "-1.6" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd +fI[1] = #bfff0000 cccccccc cccccccc +fI[0] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 d9999999 99999999 +g_xLfmt(0) gives 21 bytes: "1.6999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 +fI[1] = #3fff0000 d9999999 9999999a +fI[0] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 d9999999 9999999a +g_xLfmt(0) gives 4 bytes: "-1.7" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a +fI[1] = #bfff0000 d9999999 99999999 +fI[0] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 e6666666 66666666 +g_xLfmt(0) gives 3 bytes: "1.8" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 +fI[1] = #3fff0000 e6666666 66666667 +fI[0] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 e6666666 66666667 +g_xLfmt(0) gives 22 bytes: "-1.8000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 +fI[1] = #bfff0000 e6666666 66666666 +fI[0] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 f3333333 33333333 +g_xLfmt(0) gives 3 bytes: "1.9" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 +fI[1] = #3fff0000 f3333333 33333334 +fI[0] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 f3333333 33333334 +g_xLfmt(0) gives 22 bytes: "-1.9000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 +fI[1] = #bfff0000 f3333333 33333333 +fI[0] == strtoxL + diff -Nru mlton-20130715/runtime/gdtoa/test/xL.ou1 mlton-20210117+dfsg/runtime/gdtoa/test/xL.ou1 --- mlton-20130715/runtime/gdtoa/test/xL.ou1 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/xL.ou1 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1473 @@ +***** This file is not right. It needs to be generated on a +***** system with a Motorla 68881 or the equivalent. + +Input: 1.23 + +strtoxL consumes 4 bytes and returns 33 +with bits = #3fff0000 9d70a3d7 a3d70a4 +printf("%.21Lg") gives 7.73283722915781506499e-4933 +g_xLfmt(0) gives 4 bytes: "1.23" + +strtoIxL returns 33, consuming 4 bytes. +fI[0] = #3fff0000 9d70a3d7 a3d70a3 += 7.73283722915781506134e-4933 +fI[1] = #3fff0000 9d70a3d7 a3d70a4 += 7.73283722915781506499e-4933 +fI[1] == strtoxL + + +Input: 1.23e+20 + +strtoxL consumes 8 bytes and returns 1 +with bits = #40410000 d55ef90a 2da18000 +printf("%.21Lg") gives 2.24239113715721119512e-4932 +g_xLfmt(0) gives 8 bytes: "1.23e+20" + +strtoIxL returns 1, consuming 8 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.23e-20 + +strtoxL consumes 8 bytes and returns 17 +with bits = #3fbc0000 e857267b b3a984f2 +printf("%.21Lg") gives 2.74065070995958800375e-4932 +g_xLfmt(0) gives 8 bytes: "1.23e-20" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #3fbc0000 e857267b b3a984f2 += 2.74065070995958800375e-4932 +fI[1] = #3fbc0000 e857267b b3a984f3 += 2.74065070995958800411e-4932 +fI[0] == strtoxL + + +Input: 1.23456789 + +strtoxL consumes 10 bytes and returns 33 +with bits = #3fff0000 9e065214 1ef0dbf6 +printf("%.21Lg") gives 7.88641440242171807354e-4933 +g_xLfmt(0) gives 10 bytes: "1.23456789" + +strtoIxL returns 33, consuming 10 bytes. +fI[0] = #3fff0000 9e065214 1ef0dbf5 += 7.8864144024217180699e-4933 +fI[1] = #3fff0000 9e065214 1ef0dbf6 += 7.88641440242171807354e-4933 +fI[1] == strtoxL + + +Input: 1.23456589e+20 + +strtoxL consumes 14 bytes and returns 1 +with bits = #40410000 d629bd33 5ccba00 +printf("%.21Lg") gives 2.26319561227049478508e-4932 +g_xLfmt(0) gives 14 bytes: "1.23456589e+20" + +strtoIxL returns 1, consuming 14 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.23e+30 + +strtoxL consumes 8 bytes and returns 17 +with bits = #40620000 f8658274 7dbc824a +printf("%.21Lg") gives 3.16238691003557160385e-4932 +g_xLfmt(0) gives 8 bytes: "1.23e+30" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #40620000 f8658274 7dbc824a += 3.16238691003557160385e-4932 +fI[1] = #40620000 f8658274 7dbc824b += 3.16238691003557160421e-4932 +fI[0] == strtoxL + + +Input: 1.23e-30 + +strtoxL consumes 8 bytes and returns 17 +with bits = #3f9b0000 c794337a 808554eb +printf("%.21Lg") gives 1.88012249978407873966e-4932 +g_xLfmt(0) gives 8 bytes: "1.23e-30" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #3f9b0000 c794337a 808554eb += 1.88012249978407873966e-4932 +fI[1] = #3f9b0000 c794337a 808554ec += 1.88012249978407874003e-4932 +fI[0] == strtoxL + + +Input: 1.23456789e-20 + +strtoxL consumes 14 bytes and returns 17 +with bits = #3fbc0000 e9340a38 f3d6d352 +printf("%.21Lg") gives 2.76331470044569174626e-4932 +g_xLfmt(0) gives 14 bytes: "1.23456789e-20" + +strtoIxL returns 17, consuming 14 bytes. +fI[0] = #3fbc0000 e9340a38 f3d6d352 += 2.76331470044569174626e-4932 +fI[1] = #3fbc0000 e9340a38 f3d6d353 += 2.76331470044569174663e-4932 +fI[0] == strtoxL + + +Input: 1.23456789e-30 + +strtoxL consumes 14 bytes and returns 17 +with bits = #3f9b0000 c851f19d decca8fc +printf("%.21Lg") gives 1.89959071937101288293e-4932 +g_xLfmt(0) gives 14 bytes: "1.23456789e-30" + +strtoIxL returns 17, consuming 14 bytes. +fI[0] = #3f9b0000 c851f19d decca8fc += 1.89959071937101288293e-4932 +fI[1] = #3f9b0000 c851f19d decca8fd += 1.89959071937101288329e-4932 +fI[0] == strtoxL + + +Input: 1.234567890123456789 + +strtoxL consumes 20 bytes and returns 17 +with bits = #3fff0000 9e065214 62cfdb8d +printf("%.21Lg") gives 7.88641440657246265535e-4933 +g_xLfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIxL returns 17, consuming 20 bytes. +fI[0] = #3fff0000 9e065214 62cfdb8d += 7.88641440657246265535e-4933 +fI[1] = #3fff0000 9e065214 62cfdb8e += 7.886414406572462659e-4933 +fI[0] == strtoxL + + +Input: 1.23456789012345678901234567890123456789 + +strtoxL consumes 40 bytes and returns 17 +with bits = #3fff0000 9e065214 62cfdb8d +printf("%.21Lg") gives 7.88641440657246265535e-4933 +g_xLfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIxL returns 17, consuming 40 bytes. +fI[0] = #3fff0000 9e065214 62cfdb8d += 7.88641440657246265535e-4933 +fI[1] = #3fff0000 9e065214 62cfdb8e += 7.886414406572462659e-4933 +fI[0] == strtoxL + + +Input: 1.23e306 + +strtoxL consumes 8 bytes and returns 17 +with bits = #43f70000 e033b668 e30fa6d5 +printf("%.21Lg") gives 2.52688323155200052759e-4932 +g_xLfmt(0) gives 9 bytes: "1.23e+306" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #43f70000 e033b668 e30fa6d5 += 2.52688323155200052759e-4932 +fI[1] = #43f70000 e033b668 e30fa6d6 += 2.52688323155200052796e-4932 +fI[0] == strtoxL + + +Input: 1.23e-306 + +strtoxL consumes 9 bytes and returns 33 +with bits = #3c060000 dd1dc2ed 1cb73f25 +printf("%.21Lg") gives 2.44583168427704605801e-4932 +g_xLfmt(0) gives 9 bytes: "1.23e-306" + +strtoIxL returns 33, consuming 9 bytes. +fI[0] = #3c060000 dd1dc2ed 1cb73f24 += 2.44583168427704605765e-4932 +fI[1] = #3c060000 dd1dc2ed 1cb73f25 += 2.44583168427704605801e-4932 +fI[1] == strtoxL + + +Input: 1.23e-320 + +strtoxL consumes 9 bytes and returns 33 +with bits = #3bd80000 9b98c371 844c3f1a +printf("%.21Lg") gives 7.24867657578821329238e-4933 +g_xLfmt(0) gives 9 bytes: "1.23e-320" + +strtoIxL returns 33, consuming 9 bytes. +fI[0] = #3bd80000 9b98c371 844c3f19 += 7.24867657578821328874e-4933 +fI[1] = #3bd80000 9b98c371 844c3f1a += 7.24867657578821329238e-4933 +fI[1] == strtoxL + + +Input: 1.23e-20 + +strtoxL consumes 8 bytes and returns 17 +with bits = #3fbc0000 e857267b b3a984f2 +printf("%.21Lg") gives 2.74065070995958800375e-4932 +g_xLfmt(0) gives 8 bytes: "1.23e-20" + +strtoIxL returns 17, consuming 8 bytes. +fI[0] = #3fbc0000 e857267b b3a984f2 += 2.74065070995958800375e-4932 +fI[1] = #3fbc0000 e857267b b3a984f3 += 2.74065070995958800411e-4932 +fI[0] == strtoxL + + +Input: 1.23456789e307 + +strtoxL consumes 14 bytes and returns 17 +with bits = #43fb0000 8ca58a5e d766de75 +printf("%.21Lg") gives 3.32182163192682931854e-4933 +g_xLfmt(0) gives 15 bytes: "1.23456789e+307" + +strtoIxL returns 17, consuming 14 bytes. +fI[0] = #43fb0000 8ca58a5e d766de75 += 3.32182163192682931854e-4933 +fI[1] = #43fb0000 8ca58a5e d766de76 += 3.32182163192682932219e-4933 +fI[0] == strtoxL + + +Input: 1.23456589e-307 + +strtoxL consumes 15 bytes and returns 17 +with bits = #3c030000 b18cb5dc c22fd369 +printf("%.21Lg") gives 1.30149245314004923345e-4932 +g_xLfmt(0) gives 15 bytes: "1.23456589e-307" + +strtoIxL returns 17, consuming 15 bytes. +fI[0] = #3c030000 b18cb5dc c22fd369 += 1.30149245314004923345e-4932 +fI[1] = #3c030000 b18cb5dc c22fd36a += 1.30149245314004923382e-4932 +fI[0] == strtoxL + + +Input: 1.234567890123456789 + +strtoxL consumes 20 bytes and returns 17 +with bits = #3fff0000 9e065214 62cfdb8d +printf("%.21Lg") gives 7.88641440657246265535e-4933 +g_xLfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIxL returns 17, consuming 20 bytes. +fI[0] = #3fff0000 9e065214 62cfdb8d += 7.88641440657246265535e-4933 +fI[1] = #3fff0000 9e065214 62cfdb8e += 7.886414406572462659e-4933 +fI[0] == strtoxL + + +Input: 1.234567890123456789e301 + +strtoxL consumes 24 bytes and returns 33 +with bits = #43e70000 937a8baf ab20980c +printf("%.21Lg") gives 5.11635766619117643114e-4933 +g_xLfmt(0) gives 25 bytes: "1.234567890123456789e+301" + +strtoIxL returns 33, consuming 24 bytes. +fI[0] = #43e70000 937a8baf ab20980b += 5.1163576661911764275e-4933 +fI[1] = #43e70000 937a8baf ab20980c += 5.11635766619117643114e-4933 +fI[1] == strtoxL + + +Input: 1.234567890123456789e-301 + +strtoxL consumes 25 bytes and returns 33 +with bits = #3c170000 a953271a 5d069ad9 +printf("%.21Lg") gives 1.08545540462853463561e-4932 +g_xLfmt(0) gives 25 bytes: "1.234567890123456789e-301" + +strtoIxL returns 33, consuming 25 bytes. +fI[0] = #3c170000 a953271a 5d069ad8 += 1.08545540462853463524e-4932 +fI[1] = #3c170000 a953271a 5d069ad9 += 1.08545540462853463561e-4932 +fI[1] == strtoxL + + +Input: 1.234567890123456789e-321 + +strtoxL consumes 25 bytes and returns 33 +with bits = #3bd40000 f9e11b4c ea6dcce9 +printf("%.21Lg") gives 3.20133479952876185942e-4932 +g_xLfmt(0) gives 25 bytes: "1.234567890123456789e-321" + +strtoIxL returns 33, consuming 25 bytes. +fI[0] = #3bd40000 f9e11b4c ea6dcce8 += 3.20133479952876185905e-4932 +fI[1] = #3bd40000 f9e11b4c ea6dcce9 += 3.20133479952876185942e-4932 +fI[1] == strtoxL + + +Input: 1e23 + +strtoxL consumes 4 bytes and returns 1 +with bits = #404b0000 a968163f a57b400 +printf("%.21Lg") gives 1.08760331670538037378e-4932 +g_xLfmt(0) gives 5 bytes: "1e+23" + +strtoIxL returns 1, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1e310 + +strtoxL consumes 5 bytes and returns 33 +with bits = #44040000 de81e40a 34bcf50 +printf("%.21Lg") gives 2.48237171106260601618e-4932 +g_xLfmt(0) gives 6 bytes: "1e+310" + +strtoIxL returns 33, consuming 5 bytes. +fI[0] = #44040000 de81e40a 34bcf4f += 2.48237171106260601582e-4932 +fI[1] = #44040000 de81e40a 34bcf50 += 2.48237171106260601618e-4932 +fI[1] == strtoxL + + +Input: 9.0259718793241475e-277 + +strtoxL consumes 23 bytes and returns 33 +with bits = #3c690000 ffffffff fffffcf7 +printf("%.21Lg") gives 3.36210314311209322303e-4932 +g_xLfmt(0) gives 23 bytes: "9.0259718793241475e-277" + +strtoIxL returns 33, consuming 23 bytes. +fI[0] = #3c690000 ffffffff fffffcf6 += 3.36210314311209322267e-4932 +fI[1] = #3c690000 ffffffff fffffcf7 += 3.36210314311209322303e-4932 +fI[1] == strtoxL + + +Input: 9.025971879324147880346310405869e-277 + +strtoxL consumes 37 bytes and returns 17 +with bits = #3c6a0000 80000000 0 +printf("%.21Lg") gives 3.36210314311209350626e-4932 +g_xLfmt(0) gives 26 bytes: "9.0259718793241478803e-277" + +strtoIxL returns 17, consuming 37 bytes. +fI[0] = #3c6a0000 80000000 0 += 3.36210314311209350626e-4932 +fI[1] = #3c6a0000 80000000 1 += 3.64519953188247460253e-4951 +fI[0] == strtoxL + + +Input: 9.025971879324147880346310405868e-277 + +strtoxL consumes 37 bytes and returns 33 +with bits = #3c6a0000 80000000 0 +printf("%.21Lg") gives 3.36210314311209350626e-4932 +g_xLfmt(0) gives 26 bytes: "9.0259718793241478803e-277" + +strtoIxL returns 33, consuming 37 bytes. +fI[0] = #3c690000 ffffffff ffffffff += 3.3621031431120935059e-4932 +fI[1] = #3c6a0000 80000000 0 += 3.36210314311209350626e-4932 +fI[1] == strtoxL + + +Input: 2.2250738585072014e-308 + +strtoxL consumes 23 bytes and returns 17 +with bits = #3c010000 80000000 46 +printf("%.21Lg") gives 2.55163967231773222177e-4949 +g_xLfmt(0) gives 23 bytes: "2.2250738585072014e-308" + +strtoIxL returns 17, consuming 23 bytes. +fI[0] = #3c010000 80000000 46 += 2.55163967231773222177e-4949 +fI[1] = #3c010000 80000000 47 += 2.5880916676365569678e-4949 +fI[0] == strtoxL + + +Input: 2.2250738585072013e-308 + +strtoxL consumes 23 bytes and returns 17 +with bits = #3c000000 ffffffff fffffd4f +printf("%.21Lg") gives 3.36210314311209325511e-4932 +g_xLfmt(0) gives 23 bytes: "2.2250738585072013e-308" + +strtoIxL returns 17, consuming 23 bytes. +fI[0] = #3c000000 ffffffff fffffd4f += 3.36210314311209325511e-4932 +fI[1] = #3c000000 ffffffff fffffd50 += 3.36210314311209325547e-4932 +fI[0] == strtoxL + + +Input: 3.2649476e14 + +strtoxL consumes 12 bytes and returns 1 +with bits = #402f0000 9478fe18 6d000000 +printf("%.21Lg") gives 5.3774284544988676575e-4933 +g_xLfmt(0) gives 13 bytes: "3.2649476e+14" + +strtoIxL returns 1, consuming 12 bytes. +fI[0] == fI[1] == strtoxL + +Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 8ccccccc cccccccc +printf("%.21Lg") gives 3.36210314311209350335e-4933 +g_xLfmt(0) gives 21 bytes: "1.0999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] = #3fff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[0] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 8ccccccc cccccccc +printf("%.21Lg") gives 3.36210314311209350335e-4933 +g_xLfmt(0) gives 22 bytes: "-1.0999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] = #bfff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 99999999 99999999 +printf("%.21Lg") gives 6.72420628622418701034e-4933 +g_xLfmt(0) gives 21 bytes: "1.1999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] = #3fff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[0] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 99999999 99999999 +printf("%.21Lg") gives 6.72420628622418701034e-4933 +g_xLfmt(0) gives 22 bytes: "-1.1999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] = #bfff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 3 bytes: "1.3" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] = #3fff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[0] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 4 bytes: "-1.3" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[1] = #bfff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 3 bytes: "1.4" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] = #3fff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[0] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 4 bytes: "-1.4" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[1] = #bfff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 cccccccc cccccccc +printf("%.21Lg") gives 2.01726188586725610347e-4932 +g_xLfmt(0) gives 21 bytes: "1.5999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] = #3fff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[0] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 cccccccc cccccccc +printf("%.21Lg") gives 2.01726188586725610347e-4932 +g_xLfmt(0) gives 22 bytes: "-1.5999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] = #bfff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 d9999999 99999999 +printf("%.21Lg") gives 2.35347220017846545417e-4932 +g_xLfmt(0) gives 21 bytes: "1.6999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] = #3fff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[0] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 d9999999 99999999 +printf("%.21Lg") gives 2.35347220017846545417e-4932 +g_xLfmt(0) gives 22 bytes: "-1.6999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] = #bfff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 3 bytes: "1.8" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] = #3fff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[0] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 4 bytes: "-1.8" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[1] = #bfff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 3 bytes: "1.9" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] = #3fff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[0] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 4 bytes: "-1.9" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[1] = #bfff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] == strtoxL + +Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 8ccccccc cccccccd +printf("%.21Lg") gives 3.36210314311209350699e-4933 +g_xLfmt(0) gives 3 bytes: "1.1" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] = #3fff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 8ccccccc cccccccd +printf("%.21Lg") gives 3.36210314311209350699e-4933 +g_xLfmt(0) gives 4 bytes: "-1.1" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] = #bfff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[0] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 99999999 9999999a +printf("%.21Lg") gives 6.72420628622418701398e-4933 +g_xLfmt(0) gives 3 bytes: "1.2" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] = #3fff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 99999999 9999999a +printf("%.21Lg") gives 6.72420628622418701398e-4933 +g_xLfmt(0) gives 4 bytes: "-1.2" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] = #bfff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[0] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 3 bytes: "1.3" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] = #3fff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[0] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 4 bytes: "-1.3" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[1] = #bfff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 3 bytes: "1.4" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] = #3fff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[0] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 4 bytes: "-1.4" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[1] = #bfff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 cccccccc cccccccd +printf("%.21Lg") gives 2.01726188586725610383e-4932 +g_xLfmt(0) gives 3 bytes: "1.6" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] = #3fff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 cccccccc cccccccd +printf("%.21Lg") gives 2.01726188586725610383e-4932 +g_xLfmt(0) gives 4 bytes: "-1.6" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] = #bfff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[0] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 d9999999 9999999a +printf("%.21Lg") gives 2.35347220017846545453e-4932 +g_xLfmt(0) gives 3 bytes: "1.7" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] = #3fff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 d9999999 9999999a +printf("%.21Lg") gives 2.35347220017846545453e-4932 +g_xLfmt(0) gives 4 bytes: "-1.7" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] = #bfff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[0] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 3 bytes: "1.8" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] = #3fff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[0] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 4 bytes: "-1.8" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[1] = #bfff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 3 bytes: "1.9" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] = #3fff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[0] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 4 bytes: "-1.9" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[1] = #bfff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] == strtoxL + +Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 8ccccccc cccccccd +printf("%.21Lg") gives 3.36210314311209350699e-4933 +g_xLfmt(0) gives 3 bytes: "1.1" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] = #3fff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 8ccccccc cccccccc +printf("%.21Lg") gives 3.36210314311209350335e-4933 +g_xLfmt(0) gives 22 bytes: "-1.0999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] = #bfff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 99999999 9999999a +printf("%.21Lg") gives 6.72420628622418701398e-4933 +g_xLfmt(0) gives 3 bytes: "1.2" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] = #3fff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 99999999 99999999 +printf("%.21Lg") gives 6.72420628622418701034e-4933 +g_xLfmt(0) gives 22 bytes: "-1.1999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] = #bfff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 a6666666 66666667 +printf("%.21Lg") gives 1.0086309429336280521e-4932 +g_xLfmt(0) gives 21 bytes: "1.3000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] = #3fff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[1] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 4 bytes: "-1.3" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[1] = #bfff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 b3333333 33333334 +printf("%.21Lg") gives 1.3448412572448374028e-4932 +g_xLfmt(0) gives 21 bytes: "1.4000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] = #3fff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[1] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 4 bytes: "-1.4" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[1] = #bfff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 cccccccc cccccccd +printf("%.21Lg") gives 2.01726188586725610383e-4932 +g_xLfmt(0) gives 3 bytes: "1.6" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] = #3fff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 cccccccc cccccccc +printf("%.21Lg") gives 2.01726188586725610347e-4932 +g_xLfmt(0) gives 22 bytes: "-1.5999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] = #bfff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 d9999999 9999999a +printf("%.21Lg") gives 2.35347220017846545453e-4932 +g_xLfmt(0) gives 3 bytes: "1.7" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] = #3fff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 d9999999 99999999 +printf("%.21Lg") gives 2.35347220017846545417e-4932 +g_xLfmt(0) gives 22 bytes: "-1.6999999999999999999" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] = #bfff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 e6666666 66666667 +printf("%.21Lg") gives 2.68968251448967480523e-4932 +g_xLfmt(0) gives 21 bytes: "1.8000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] = #3fff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[1] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 4 bytes: "-1.8" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[1] = #bfff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 33 +with bits = #3fff0000 f3333333 33333334 +printf("%.21Lg") gives 3.02589282880088415593e-4932 +g_xLfmt(0) gives 21 bytes: "1.9000000000000000001" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] = #3fff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[1] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 25 +with bits = #bfff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 4 bytes: "-1.9" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[1] = #bfff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] == strtoxL + +Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity) + +Input: 1.1 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 8ccccccc cccccccc +printf("%.21Lg") gives 3.36210314311209350335e-4933 +g_xLfmt(0) gives 21 bytes: "1.0999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[1] = #3fff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[0] == strtoxL + + +Input: -1.1 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 8ccccccc cccccccd +printf("%.21Lg") gives 3.36210314311209350699e-4933 +g_xLfmt(0) gives 4 bytes: "-1.1" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 8ccccccc cccccccd += 3.36210314311209350699e-4933 +fI[1] = #bfff0000 8ccccccc cccccccc += 3.36210314311209350335e-4933 +fI[0] == strtoxL + + +Input: 1.2 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 99999999 99999999 +printf("%.21Lg") gives 6.72420628622418701034e-4933 +g_xLfmt(0) gives 21 bytes: "1.1999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[1] = #3fff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[0] == strtoxL + + +Input: -1.2 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 99999999 9999999a +printf("%.21Lg") gives 6.72420628622418701398e-4933 +g_xLfmt(0) gives 4 bytes: "-1.2" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 99999999 9999999a += 6.72420628622418701398e-4933 +fI[1] = #bfff0000 99999999 99999999 += 6.72420628622418701034e-4933 +fI[0] == strtoxL + + +Input: 1.3 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 a6666666 66666666 +printf("%.21Lg") gives 1.00863094293362805173e-4932 +g_xLfmt(0) gives 3 bytes: "1.3" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[1] = #3fff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[0] == strtoxL + + +Input: -1.3 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 a6666666 66666667 +printf("%.21Lg") gives 1.0086309429336280521e-4932 +g_xLfmt(0) gives 22 bytes: "-1.3000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 a6666666 66666667 += 1.0086309429336280521e-4932 +fI[1] = #bfff0000 a6666666 66666666 += 1.00863094293362805173e-4932 +fI[0] == strtoxL + + +Input: 1.4 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 b3333333 33333333 +printf("%.21Lg") gives 1.34484125724483740243e-4932 +g_xLfmt(0) gives 3 bytes: "1.4" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[1] = #3fff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[0] == strtoxL + + +Input: -1.4 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 b3333333 33333334 +printf("%.21Lg") gives 1.3448412572448374028e-4932 +g_xLfmt(0) gives 22 bytes: "-1.4000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 b3333333 33333334 += 1.3448412572448374028e-4932 +fI[1] = #bfff0000 b3333333 33333333 += 1.34484125724483740243e-4932 +fI[0] == strtoxL + + +Input: 1.5 + +strtoxL consumes 3 bytes and returns 1 +with bits = #3fff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 3 bytes: "1.5" + +strtoIxL returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtoxL + + +Input: -1.5 + +strtoxL consumes 4 bytes and returns 9 +with bits = #bfff0000 c0000000 0 +printf("%.21Lg") gives 1.68105157155604675313e-4932 +g_xLfmt(0) gives 4 bytes: "-1.5" + +strtoIxL returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtoxL + + +Input: 1.6 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 cccccccc cccccccc +printf("%.21Lg") gives 2.01726188586725610347e-4932 +g_xLfmt(0) gives 21 bytes: "1.5999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[1] = #3fff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[0] == strtoxL + + +Input: -1.6 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 cccccccc cccccccd +printf("%.21Lg") gives 2.01726188586725610383e-4932 +g_xLfmt(0) gives 4 bytes: "-1.6" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 cccccccc cccccccd += 2.01726188586725610383e-4932 +fI[1] = #bfff0000 cccccccc cccccccc += 2.01726188586725610347e-4932 +fI[0] == strtoxL + + +Input: 1.7 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 d9999999 99999999 +printf("%.21Lg") gives 2.35347220017846545417e-4932 +g_xLfmt(0) gives 21 bytes: "1.6999999999999999999" + +strtoIxL returns 33, consuming 3 bytes. +fI[0] = #3fff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[1] = #3fff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[0] == strtoxL + + +Input: -1.7 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 d9999999 9999999a +printf("%.21Lg") gives 2.35347220017846545453e-4932 +g_xLfmt(0) gives 4 bytes: "-1.7" + +strtoIxL returns 41, consuming 4 bytes. +fI[0] = #bfff0000 d9999999 9999999a += 2.35347220017846545453e-4932 +fI[1] = #bfff0000 d9999999 99999999 += 2.35347220017846545417e-4932 +fI[0] == strtoxL + + +Input: 1.8 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 e6666666 66666666 +printf("%.21Lg") gives 2.68968251448967480486e-4932 +g_xLfmt(0) gives 3 bytes: "1.8" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[1] = #3fff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[0] == strtoxL + + +Input: -1.8 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 e6666666 66666667 +printf("%.21Lg") gives 2.68968251448967480523e-4932 +g_xLfmt(0) gives 22 bytes: "-1.8000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 e6666666 66666667 += 2.68968251448967480523e-4932 +fI[1] = #bfff0000 e6666666 66666666 += 2.68968251448967480486e-4932 +fI[0] == strtoxL + + +Input: 1.9 + +strtoxL consumes 3 bytes and returns 17 +with bits = #3fff0000 f3333333 33333333 +printf("%.21Lg") gives 3.02589282880088415556e-4932 +g_xLfmt(0) gives 3 bytes: "1.9" + +strtoIxL returns 17, consuming 3 bytes. +fI[0] = #3fff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[1] = #3fff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[0] == strtoxL + + +Input: -1.9 + +strtoxL consumes 4 bytes and returns 41 +with bits = #bfff0000 f3333333 33333334 +printf("%.21Lg") gives 3.02589282880088415593e-4932 +g_xLfmt(0) gives 22 bytes: "-1.9000000000000000001" + +strtoIxL returns 25, consuming 4 bytes. +fI[0] = #bfff0000 f3333333 33333334 += 3.02589282880088415593e-4932 +fI[1] = #bfff0000 f3333333 33333333 += 3.02589282880088415556e-4932 +fI[0] == strtoxL + diff -Nru mlton-20130715/runtime/gdtoa/test/xLtest.c mlton-20210117+dfsg/runtime/gdtoa/test/xLtest.c --- mlton-20130715/runtime/gdtoa/test/xLtest.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/xLtest.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,189 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998-2001 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* Test program for g_xLfmt, strtoIxL, strtopxL, and strtorxL. + * + * Inputs (on stdin): + * r rounding_mode + * n ndig + * number + * #hex0 hex1 hex2 + * + * rounding_mode values: + * 0 = toward zero + * 1 = nearest + * 2 = toward +Infinity + * 3 = toward -Infinity + * + * where number is a decimal floating-point number, + * hex0 is a string of <= 8 Hex digits for the most significant + * word of the number, hex1 is a similar string for the next + * word, etc., and ndig is a parameters to g_xLfmt. + */ + +#include "gdtoa.h" +#include +#include +#include + + extern int getround ANSI((int,char*)); + + static char ibuf[2048], obuf[2048], obuf1[2048]; + +#define U (unsigned long) + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#endif +#ifdef IEEE_8087 +#define _0 2 +#define _1 1 +#define _2 0 +#endif + + int +main(Void) +{ + char *s, *s1, *se, *se1; + int dItry, i, ndig = 0, nik, nike, r = 1; + union { long double d; ULong bits[3]; } u, v[2]; + + while((s = fgets(ibuf, sizeof(ibuf), stdin))) { + while(*s <= ' ') + if (!*s++) + continue; + dItry = 0; + switch(*s) { + case 'r': + r = getround(r, s); + continue; + case 'n': + i = s[1]; + if (i <= ' ' || (i >= '0' && i <= '9')) { + ndig = atoi(s+1); + continue; + } + break; /* nan? */ + case '#': + /* sscanf(s+1, "%lx %lx %lx", &u.bits[_0], */ + /* &u.bits[_1], &u.bits[_2]); */ + u.bits[_0] = (ULong)strtoul(s1 = s+1, &se, 16); + if (se > s1) { + u.bits[_1] = (ULong)strtoul(s1=se, &se, 16); + if (se > s1) + u.bits[_2] = (ULong)strtoul(s1=se, &se, 16); + } + printf("\nInput: %s", ibuf); + printf(" --> f = #%lx %lx %lx\n", U u.bits[_0], + U u.bits[_1], U u.bits[_2]); + i = 0; + goto fmt_test; + } + dItry = 1; + printf("\nInput: %s", ibuf); + i = strtorxL(ibuf, &se, r, u.bits); + if (r == 1 && (i != strtopxL(ibuf, &se1, v[0].bits) || se1 != se + || memcmp(u.bits, v[0].bits, 12))) + printf("***strtoxL and strtorxL disagree!!\n:"); + printf("\nstrtoxL consumes %d bytes and returns %d\n", + (int)(se-ibuf), i); + printf("with bits = #%lx %lx %lx\n", + U u.bits[_0], U u.bits[_1], U u.bits[_2]); + if (sizeof(long double) == 12) + printf("printf(\"%%.21Lg\") gives %.21Lg\n", u.d); + fmt_test: + se = g_xLfmt(obuf, u.bits, ndig, sizeof(obuf)); + printf("g_xLfmt(%d) gives %d bytes: \"%s\"\n\n", + ndig, (int)(se-obuf), se ? obuf : ""); + se1 = g_xLfmt_p(obuf1, u.bits, ndig, sizeof(obuf1), 0); + if (se1 - obuf1 != se - obuf || strcmp(obuf, obuf1)) + printf("Botch: g_xLfmt_p gives \"%s\" rather than \"%s\"\n", + obuf1, obuf); + if (!dItry) + continue; + printf("strtoIxL returns %d,", + strtoIxL(ibuf, &se, v[0].bits, v[1].bits)); + printf(" consuming %d bytes.\n", (int)(se-ibuf)); + if (!memcmp(v[0].bits, v[1].bits, 12)) { + if (!memcmp(u.bits, v[0].bits, 12)) + printf("fI[0] == fI[1] == strtoxL\n"); + else { + printf("fI[0] == fI[1] = #%lx %lx %lx\n", + U v[0].bits[_0], U v[0].bits[_1], + U v[0].bits[_2]); + if (sizeof(long double) == 12) + printf("= %.21Lg\n", v[0].d); + } + } + else { + printf("fI[0] = #%lx %lx %lx\n", + U v[0].bits[_0], U v[0].bits[_1], + U v[0].bits[_2]); + if (sizeof(long double) == 12) + printf("= %.21Lg\n", v[0].d); + printf("fI[1] = #%lx %lx %lx\n", + U v[1].bits[_0], U v[1].bits[_1], + U v[1].bits[_2]); + if (sizeof(long double) == 12) + printf("= %.21Lg\n", v[1].d); + if (!memcmp(v[0].bits, u.bits, 12)) + printf("fI[0] == strtoxL\n"); + else if (!memcmp(v[1].bits, u.bits, 12)) + printf("fI[1] == strtoxL\n"); + else + printf("**** Both differ from strtod ****\n"); + } + printf("\n"); + switch(i & STRTOG_Retmask) { + case STRTOG_Infinite: + for(nik = 0; nik < 6; ++nik) { + se1 = g_xLfmt_p(obuf1, u.bits, ndig, sizeof(obuf1), nik); + printf("g_xLfmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + break; + case STRTOG_NaN: + case STRTOG_NaNbits: + for(i = 0; i < 3; ++i) + for(nik = 6*i, nike = nik + 3; nik < nike; ++nik) { + se1 = g_xLfmt_p(obuf1, u.bits, ndig, sizeof(obuf1), nik); + printf("g_xLfmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + } + } + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/test/x.ou0 mlton-20210117+dfsg/runtime/gdtoa/test/x.ou0 --- mlton-20130715/runtime/gdtoa/test/x.ou0 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/x.ou0 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1192 @@ + +Input: 1.23 + +strtox consumes 4 bytes and returns 33 +with bits = #3fff 9d70 a3d7 a3d 70a4 +g_xfmt(0) gives 4 bytes: "1.23" + +strtoIx returns 33, consuming 4 bytes. +fI[0] = #3fff 9d70 a3d7 a3d 70a3 +fI[1] = #3fff 9d70 a3d7 a3d 70a4 +fI[1] == strtox + + +Input: 1.23e+20 + +strtox consumes 8 bytes and returns 1 +with bits = #4041 d55e f90a 2da1 8000 +g_xfmt(0) gives 8 bytes: "1.23e+20" + +strtoIx returns 1, consuming 8 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.23e-20 + +strtox consumes 8 bytes and returns 17 +with bits = #3fbc e857 267b b3a9 84f2 +g_xfmt(0) gives 8 bytes: "1.23e-20" + +strtoIx returns 17, consuming 8 bytes. +fI[0] = #3fbc e857 267b b3a9 84f2 +fI[1] = #3fbc e857 267b b3a9 84f3 +fI[0] == strtox + + +Input: 1.23456789 + +strtox consumes 10 bytes and returns 33 +with bits = #3fff 9e06 5214 1ef0 dbf6 +g_xfmt(0) gives 10 bytes: "1.23456789" + +strtoIx returns 33, consuming 10 bytes. +fI[0] = #3fff 9e06 5214 1ef0 dbf5 +fI[1] = #3fff 9e06 5214 1ef0 dbf6 +fI[1] == strtox + + +Input: 1.23456589e+20 + +strtox consumes 14 bytes and returns 1 +with bits = #4041 d629 bd33 5cc ba00 +g_xfmt(0) gives 14 bytes: "1.23456589e+20" + +strtoIx returns 1, consuming 14 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.23e+30 + +strtox consumes 8 bytes and returns 17 +with bits = #4062 f865 8274 7dbc 824a +g_xfmt(0) gives 8 bytes: "1.23e+30" + +strtoIx returns 17, consuming 8 bytes. +fI[0] = #4062 f865 8274 7dbc 824a +fI[1] = #4062 f865 8274 7dbc 824b +fI[0] == strtox + + +Input: 1.23e-30 + +strtox consumes 8 bytes and returns 17 +with bits = #3f9b c794 337a 8085 54eb +g_xfmt(0) gives 8 bytes: "1.23e-30" + +strtoIx returns 17, consuming 8 bytes. +fI[0] = #3f9b c794 337a 8085 54eb +fI[1] = #3f9b c794 337a 8085 54ec +fI[0] == strtox + + +Input: 1.23456789e-20 + +strtox consumes 14 bytes and returns 17 +with bits = #3fbc e934 a38 f3d6 d352 +g_xfmt(0) gives 14 bytes: "1.23456789e-20" + +strtoIx returns 17, consuming 14 bytes. +fI[0] = #3fbc e934 a38 f3d6 d352 +fI[1] = #3fbc e934 a38 f3d6 d353 +fI[0] == strtox + + +Input: 1.23456789e-30 + +strtox consumes 14 bytes and returns 17 +with bits = #3f9b c851 f19d decc a8fc +g_xfmt(0) gives 14 bytes: "1.23456789e-30" + +strtoIx returns 17, consuming 14 bytes. +fI[0] = #3f9b c851 f19d decc a8fc +fI[1] = #3f9b c851 f19d decc a8fd +fI[0] == strtox + + +Input: 1.234567890123456789 + +strtox consumes 20 bytes and returns 17 +with bits = #3fff 9e06 5214 62cf db8d +g_xfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIx returns 17, consuming 20 bytes. +fI[0] = #3fff 9e06 5214 62cf db8d +fI[1] = #3fff 9e06 5214 62cf db8e +fI[0] == strtox + + +Input: 1.23456789012345678901234567890123456789 + +strtox consumes 40 bytes and returns 17 +with bits = #3fff 9e06 5214 62cf db8d +g_xfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIx returns 17, consuming 40 bytes. +fI[0] = #3fff 9e06 5214 62cf db8d +fI[1] = #3fff 9e06 5214 62cf db8e +fI[0] == strtox + + +Input: 1.23e306 + +strtox consumes 8 bytes and returns 17 +with bits = #43f7 e033 b668 e30f a6d5 +g_xfmt(0) gives 9 bytes: "1.23e+306" + +strtoIx returns 17, consuming 8 bytes. +fI[0] = #43f7 e033 b668 e30f a6d5 +fI[1] = #43f7 e033 b668 e30f a6d6 +fI[0] == strtox + + +Input: 1.23e-306 + +strtox consumes 9 bytes and returns 33 +with bits = #3c06 dd1d c2ed 1cb7 3f25 +g_xfmt(0) gives 9 bytes: "1.23e-306" + +strtoIx returns 33, consuming 9 bytes. +fI[0] = #3c06 dd1d c2ed 1cb7 3f24 +fI[1] = #3c06 dd1d c2ed 1cb7 3f25 +fI[1] == strtox + + +Input: 1.23e-320 + +strtox consumes 9 bytes and returns 33 +with bits = #3bd8 9b98 c371 844c 3f1a +g_xfmt(0) gives 9 bytes: "1.23e-320" + +strtoIx returns 33, consuming 9 bytes. +fI[0] = #3bd8 9b98 c371 844c 3f19 +fI[1] = #3bd8 9b98 c371 844c 3f1a +fI[1] == strtox + + +Input: 1.23e-20 + +strtox consumes 8 bytes and returns 17 +with bits = #3fbc e857 267b b3a9 84f2 +g_xfmt(0) gives 8 bytes: "1.23e-20" + +strtoIx returns 17, consuming 8 bytes. +fI[0] = #3fbc e857 267b b3a9 84f2 +fI[1] = #3fbc e857 267b b3a9 84f3 +fI[0] == strtox + + +Input: 1.23456789e307 + +strtox consumes 14 bytes and returns 17 +with bits = #43fb 8ca5 8a5e d766 de75 +g_xfmt(0) gives 15 bytes: "1.23456789e+307" + +strtoIx returns 17, consuming 14 bytes. +fI[0] = #43fb 8ca5 8a5e d766 de75 +fI[1] = #43fb 8ca5 8a5e d766 de76 +fI[0] == strtox + + +Input: 1.23456589e-307 + +strtox consumes 15 bytes and returns 17 +with bits = #3c03 b18c b5dc c22f d369 +g_xfmt(0) gives 15 bytes: "1.23456589e-307" + +strtoIx returns 17, consuming 15 bytes. +fI[0] = #3c03 b18c b5dc c22f d369 +fI[1] = #3c03 b18c b5dc c22f d36a +fI[0] == strtox + + +Input: 1.234567890123456789 + +strtox consumes 20 bytes and returns 17 +with bits = #3fff 9e06 5214 62cf db8d +g_xfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIx returns 17, consuming 20 bytes. +fI[0] = #3fff 9e06 5214 62cf db8d +fI[1] = #3fff 9e06 5214 62cf db8e +fI[0] == strtox + + +Input: 1.234567890123456789e301 + +strtox consumes 24 bytes and returns 33 +with bits = #43e7 937a 8baf ab20 980c +g_xfmt(0) gives 25 bytes: "1.234567890123456789e+301" + +strtoIx returns 33, consuming 24 bytes. +fI[0] = #43e7 937a 8baf ab20 980b +fI[1] = #43e7 937a 8baf ab20 980c +fI[1] == strtox + + +Input: 1.234567890123456789e-301 + +strtox consumes 25 bytes and returns 33 +with bits = #3c17 a953 271a 5d06 9ad9 +g_xfmt(0) gives 25 bytes: "1.234567890123456789e-301" + +strtoIx returns 33, consuming 25 bytes. +fI[0] = #3c17 a953 271a 5d06 9ad8 +fI[1] = #3c17 a953 271a 5d06 9ad9 +fI[1] == strtox + + +Input: 1.234567890123456789e-321 + +strtox consumes 25 bytes and returns 33 +with bits = #3bd4 f9e1 1b4c ea6d cce9 +g_xfmt(0) gives 25 bytes: "1.234567890123456789e-321" + +strtoIx returns 33, consuming 25 bytes. +fI[0] = #3bd4 f9e1 1b4c ea6d cce8 +fI[1] = #3bd4 f9e1 1b4c ea6d cce9 +fI[1] == strtox + + +Input: 1e23 + +strtox consumes 4 bytes and returns 1 +with bits = #404b a968 163f a57 b400 +g_xfmt(0) gives 5 bytes: "1e+23" + +strtoIx returns 1, consuming 4 bytes. +fI[0] == fI[1] == strtox + + +Input: 1e310 + +strtox consumes 5 bytes and returns 33 +with bits = #4404 de81 e40a 34b cf50 +g_xfmt(0) gives 6 bytes: "1e+310" + +strtoIx returns 33, consuming 5 bytes. +fI[0] = #4404 de81 e40a 34b cf4f +fI[1] = #4404 de81 e40a 34b cf50 +fI[1] == strtox + + +Input: 9.0259718793241475e-277 + +strtox consumes 23 bytes and returns 33 +with bits = #3c69 ffff ffff ffff fcf7 +g_xfmt(0) gives 23 bytes: "9.0259718793241475e-277" + +strtoIx returns 33, consuming 23 bytes. +fI[0] = #3c69 ffff ffff ffff fcf6 +fI[1] = #3c69 ffff ffff ffff fcf7 +fI[1] == strtox + + +Input: 9.025971879324147880346310405869e-277 + +strtox consumes 37 bytes and returns 17 +with bits = #3c6a 8000 0 0 0 +g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277" + +strtoIx returns 17, consuming 37 bytes. +fI[0] = #3c6a 8000 0 0 0 +fI[1] = #3c6a 8000 0 0 1 +fI[0] == strtox + + +Input: 9.025971879324147880346310405868e-277 + +strtox consumes 37 bytes and returns 33 +with bits = #3c6a 8000 0 0 0 +g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277" + +strtoIx returns 33, consuming 37 bytes. +fI[0] = #3c69 ffff ffff ffff ffff +fI[1] = #3c6a 8000 0 0 0 +fI[1] == strtox + + +Input: 2.2250738585072014e-308 + +strtox consumes 23 bytes and returns 17 +with bits = #3c01 8000 0 0 46 +g_xfmt(0) gives 23 bytes: "2.2250738585072014e-308" + +strtoIx returns 17, consuming 23 bytes. +fI[0] = #3c01 8000 0 0 46 +fI[1] = #3c01 8000 0 0 47 +fI[0] == strtox + + +Input: 2.2250738585072013e-308 + +strtox consumes 23 bytes and returns 17 +with bits = #3c00 ffff ffff ffff fd4f +g_xfmt(0) gives 23 bytes: "2.2250738585072013e-308" + +strtoIx returns 17, consuming 23 bytes. +fI[0] = #3c00 ffff ffff ffff fd4f +fI[1] = #3c00 ffff ffff ffff fd50 +fI[0] == strtox + + +Input: 3.2649476e14 + +strtox consumes 12 bytes and returns 1 +with bits = #402f 9478 fe18 6d00 0 +g_xfmt(0) gives 13 bytes: "3.2649476e+14" + +strtoIx returns 1, consuming 12 bytes. +fI[0] == fI[1] == strtox + +Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero) + +Input: 1.1 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff 8ccc cccc cccc cccc +g_xfmt(0) gives 21 bytes: "1.0999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 8ccc cccc cccc cccc +fI[1] = #3fff 8ccc cccc cccc cccd +fI[0] == strtox + + +Input: -1.1 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff 8ccc cccc cccc cccc +g_xfmt(0) gives 22 bytes: "-1.0999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 8ccc cccc cccc cccd +fI[1] = #bfff 8ccc cccc cccc cccc +fI[1] == strtox + + +Input: 1.2 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff 9999 9999 9999 9999 +g_xfmt(0) gives 21 bytes: "1.1999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 9999 9999 9999 9999 +fI[1] = #3fff 9999 9999 9999 999a +fI[0] == strtox + + +Input: -1.2 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff 9999 9999 9999 9999 +g_xfmt(0) gives 22 bytes: "-1.1999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 9999 9999 9999 999a +fI[1] = #bfff 9999 9999 9999 9999 +fI[1] == strtox + + +Input: 1.3 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff a666 6666 6666 6666 +g_xfmt(0) gives 3 bytes: "1.3" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff a666 6666 6666 6666 +fI[1] = #3fff a666 6666 6666 6667 +fI[0] == strtox + + +Input: -1.3 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff a666 6666 6666 6666 +g_xfmt(0) gives 4 bytes: "-1.3" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff a666 6666 6666 6667 +fI[1] = #bfff a666 6666 6666 6666 +fI[1] == strtox + + +Input: 1.4 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff b333 3333 3333 3333 +g_xfmt(0) gives 3 bytes: "1.4" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff b333 3333 3333 3333 +fI[1] = #3fff b333 3333 3333 3334 +fI[0] == strtox + + +Input: -1.4 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff b333 3333 3333 3333 +g_xfmt(0) gives 4 bytes: "-1.4" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff b333 3333 3333 3334 +fI[1] = #bfff b333 3333 3333 3333 +fI[1] == strtox + + +Input: 1.5 + +strtox consumes 3 bytes and returns 1 +with bits = #3fff c000 0 0 0 +g_xfmt(0) gives 3 bytes: "1.5" + +strtoIx returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtox + + +Input: -1.5 + +strtox consumes 4 bytes and returns 9 +with bits = #bfff c000 0 0 0 +g_xfmt(0) gives 4 bytes: "-1.5" + +strtoIx returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.6 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff cccc cccc cccc cccc +g_xfmt(0) gives 21 bytes: "1.5999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff cccc cccc cccc cccc +fI[1] = #3fff cccc cccc cccc cccd +fI[0] == strtox + + +Input: -1.6 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff cccc cccc cccc cccc +g_xfmt(0) gives 22 bytes: "-1.5999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff cccc cccc cccc cccd +fI[1] = #bfff cccc cccc cccc cccc +fI[1] == strtox + + +Input: 1.7 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff d999 9999 9999 9999 +g_xfmt(0) gives 21 bytes: "1.6999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff d999 9999 9999 9999 +fI[1] = #3fff d999 9999 9999 999a +fI[0] == strtox + + +Input: -1.7 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff d999 9999 9999 9999 +g_xfmt(0) gives 22 bytes: "-1.6999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff d999 9999 9999 999a +fI[1] = #bfff d999 9999 9999 9999 +fI[1] == strtox + + +Input: 1.8 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff e666 6666 6666 6666 +g_xfmt(0) gives 3 bytes: "1.8" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff e666 6666 6666 6666 +fI[1] = #3fff e666 6666 6666 6667 +fI[0] == strtox + + +Input: -1.8 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff e666 6666 6666 6666 +g_xfmt(0) gives 4 bytes: "-1.8" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff e666 6666 6666 6667 +fI[1] = #bfff e666 6666 6666 6666 +fI[1] == strtox + + +Input: 1.9 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff f333 3333 3333 3333 +g_xfmt(0) gives 3 bytes: "1.9" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff f333 3333 3333 3333 +fI[1] = #3fff f333 3333 3333 3334 +fI[0] == strtox + + +Input: -1.9 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff f333 3333 3333 3333 +g_xfmt(0) gives 4 bytes: "-1.9" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff f333 3333 3333 3334 +fI[1] = #bfff f333 3333 3333 3333 +fI[1] == strtox + +Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest) + +Input: 1.1 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff 8ccc cccc cccc cccd +g_xfmt(0) gives 3 bytes: "1.1" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 8ccc cccc cccc cccc +fI[1] = #3fff 8ccc cccc cccc cccd +fI[1] == strtox + + +Input: -1.1 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff 8ccc cccc cccc cccd +g_xfmt(0) gives 4 bytes: "-1.1" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 8ccc cccc cccc cccd +fI[1] = #bfff 8ccc cccc cccc cccc +fI[0] == strtox + + +Input: 1.2 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff 9999 9999 9999 999a +g_xfmt(0) gives 3 bytes: "1.2" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 9999 9999 9999 9999 +fI[1] = #3fff 9999 9999 9999 999a +fI[1] == strtox + + +Input: -1.2 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff 9999 9999 9999 999a +g_xfmt(0) gives 4 bytes: "-1.2" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 9999 9999 9999 999a +fI[1] = #bfff 9999 9999 9999 9999 +fI[0] == strtox + + +Input: 1.3 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff a666 6666 6666 6666 +g_xfmt(0) gives 3 bytes: "1.3" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff a666 6666 6666 6666 +fI[1] = #3fff a666 6666 6666 6667 +fI[0] == strtox + + +Input: -1.3 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff a666 6666 6666 6666 +g_xfmt(0) gives 4 bytes: "-1.3" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff a666 6666 6666 6667 +fI[1] = #bfff a666 6666 6666 6666 +fI[1] == strtox + + +Input: 1.4 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff b333 3333 3333 3333 +g_xfmt(0) gives 3 bytes: "1.4" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff b333 3333 3333 3333 +fI[1] = #3fff b333 3333 3333 3334 +fI[0] == strtox + + +Input: -1.4 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff b333 3333 3333 3333 +g_xfmt(0) gives 4 bytes: "-1.4" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff b333 3333 3333 3334 +fI[1] = #bfff b333 3333 3333 3333 +fI[1] == strtox + + +Input: 1.5 + +strtox consumes 3 bytes and returns 1 +with bits = #3fff c000 0 0 0 +g_xfmt(0) gives 3 bytes: "1.5" + +strtoIx returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtox + + +Input: -1.5 + +strtox consumes 4 bytes and returns 9 +with bits = #bfff c000 0 0 0 +g_xfmt(0) gives 4 bytes: "-1.5" + +strtoIx returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.6 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff cccc cccc cccc cccd +g_xfmt(0) gives 3 bytes: "1.6" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff cccc cccc cccc cccc +fI[1] = #3fff cccc cccc cccc cccd +fI[1] == strtox + + +Input: -1.6 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff cccc cccc cccc cccd +g_xfmt(0) gives 4 bytes: "-1.6" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff cccc cccc cccc cccd +fI[1] = #bfff cccc cccc cccc cccc +fI[0] == strtox + + +Input: 1.7 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff d999 9999 9999 999a +g_xfmt(0) gives 3 bytes: "1.7" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff d999 9999 9999 9999 +fI[1] = #3fff d999 9999 9999 999a +fI[1] == strtox + + +Input: -1.7 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff d999 9999 9999 999a +g_xfmt(0) gives 4 bytes: "-1.7" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff d999 9999 9999 999a +fI[1] = #bfff d999 9999 9999 9999 +fI[0] == strtox + + +Input: 1.8 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff e666 6666 6666 6666 +g_xfmt(0) gives 3 bytes: "1.8" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff e666 6666 6666 6666 +fI[1] = #3fff e666 6666 6666 6667 +fI[0] == strtox + + +Input: -1.8 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff e666 6666 6666 6666 +g_xfmt(0) gives 4 bytes: "-1.8" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff e666 6666 6666 6667 +fI[1] = #bfff e666 6666 6666 6666 +fI[1] == strtox + + +Input: 1.9 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff f333 3333 3333 3333 +g_xfmt(0) gives 3 bytes: "1.9" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff f333 3333 3333 3333 +fI[1] = #3fff f333 3333 3333 3334 +fI[0] == strtox + + +Input: -1.9 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff f333 3333 3333 3333 +g_xfmt(0) gives 4 bytes: "-1.9" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff f333 3333 3333 3334 +fI[1] = #bfff f333 3333 3333 3333 +fI[1] == strtox + +Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity) + +Input: 1.1 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff 8ccc cccc cccc cccd +g_xfmt(0) gives 3 bytes: "1.1" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 8ccc cccc cccc cccc +fI[1] = #3fff 8ccc cccc cccc cccd +fI[1] == strtox + + +Input: -1.1 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff 8ccc cccc cccc cccc +g_xfmt(0) gives 22 bytes: "-1.0999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 8ccc cccc cccc cccd +fI[1] = #bfff 8ccc cccc cccc cccc +fI[1] == strtox + + +Input: 1.2 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff 9999 9999 9999 999a +g_xfmt(0) gives 3 bytes: "1.2" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 9999 9999 9999 9999 +fI[1] = #3fff 9999 9999 9999 999a +fI[1] == strtox + + +Input: -1.2 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff 9999 9999 9999 9999 +g_xfmt(0) gives 22 bytes: "-1.1999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 9999 9999 9999 999a +fI[1] = #bfff 9999 9999 9999 9999 +fI[1] == strtox + + +Input: 1.3 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff a666 6666 6666 6667 +g_xfmt(0) gives 21 bytes: "1.3000000000000000001" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff a666 6666 6666 6666 +fI[1] = #3fff a666 6666 6666 6667 +fI[1] == strtox + + +Input: -1.3 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff a666 6666 6666 6666 +g_xfmt(0) gives 4 bytes: "-1.3" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff a666 6666 6666 6667 +fI[1] = #bfff a666 6666 6666 6666 +fI[1] == strtox + + +Input: 1.4 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff b333 3333 3333 3334 +g_xfmt(0) gives 21 bytes: "1.4000000000000000001" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff b333 3333 3333 3333 +fI[1] = #3fff b333 3333 3333 3334 +fI[1] == strtox + + +Input: -1.4 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff b333 3333 3333 3333 +g_xfmt(0) gives 4 bytes: "-1.4" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff b333 3333 3333 3334 +fI[1] = #bfff b333 3333 3333 3333 +fI[1] == strtox + + +Input: 1.5 + +strtox consumes 3 bytes and returns 1 +with bits = #3fff c000 0 0 0 +g_xfmt(0) gives 3 bytes: "1.5" + +strtoIx returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtox + + +Input: -1.5 + +strtox consumes 4 bytes and returns 9 +with bits = #bfff c000 0 0 0 +g_xfmt(0) gives 4 bytes: "-1.5" + +strtoIx returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.6 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff cccc cccc cccc cccd +g_xfmt(0) gives 3 bytes: "1.6" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff cccc cccc cccc cccc +fI[1] = #3fff cccc cccc cccc cccd +fI[1] == strtox + + +Input: -1.6 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff cccc cccc cccc cccc +g_xfmt(0) gives 22 bytes: "-1.5999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff cccc cccc cccc cccd +fI[1] = #bfff cccc cccc cccc cccc +fI[1] == strtox + + +Input: 1.7 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff d999 9999 9999 999a +g_xfmt(0) gives 3 bytes: "1.7" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff d999 9999 9999 9999 +fI[1] = #3fff d999 9999 9999 999a +fI[1] == strtox + + +Input: -1.7 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff d999 9999 9999 9999 +g_xfmt(0) gives 22 bytes: "-1.6999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff d999 9999 9999 999a +fI[1] = #bfff d999 9999 9999 9999 +fI[1] == strtox + + +Input: 1.8 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff e666 6666 6666 6667 +g_xfmt(0) gives 21 bytes: "1.8000000000000000001" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff e666 6666 6666 6666 +fI[1] = #3fff e666 6666 6666 6667 +fI[1] == strtox + + +Input: -1.8 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff e666 6666 6666 6666 +g_xfmt(0) gives 4 bytes: "-1.8" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff e666 6666 6666 6667 +fI[1] = #bfff e666 6666 6666 6666 +fI[1] == strtox + + +Input: 1.9 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff f333 3333 3333 3334 +g_xfmt(0) gives 21 bytes: "1.9000000000000000001" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff f333 3333 3333 3333 +fI[1] = #3fff f333 3333 3333 3334 +fI[1] == strtox + + +Input: -1.9 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff f333 3333 3333 3333 +g_xfmt(0) gives 4 bytes: "-1.9" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff f333 3333 3333 3334 +fI[1] = #bfff f333 3333 3333 3333 +fI[1] == strtox + +Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity) + +Input: 1.1 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff 8ccc cccc cccc cccc +g_xfmt(0) gives 21 bytes: "1.0999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 8ccc cccc cccc cccc +fI[1] = #3fff 8ccc cccc cccc cccd +fI[0] == strtox + + +Input: -1.1 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff 8ccc cccc cccc cccd +g_xfmt(0) gives 4 bytes: "-1.1" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 8ccc cccc cccc cccd +fI[1] = #bfff 8ccc cccc cccc cccc +fI[0] == strtox + + +Input: 1.2 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff 9999 9999 9999 9999 +g_xfmt(0) gives 21 bytes: "1.1999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 9999 9999 9999 9999 +fI[1] = #3fff 9999 9999 9999 999a +fI[0] == strtox + + +Input: -1.2 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff 9999 9999 9999 999a +g_xfmt(0) gives 4 bytes: "-1.2" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 9999 9999 9999 999a +fI[1] = #bfff 9999 9999 9999 9999 +fI[0] == strtox + + +Input: 1.3 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff a666 6666 6666 6666 +g_xfmt(0) gives 3 bytes: "1.3" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff a666 6666 6666 6666 +fI[1] = #3fff a666 6666 6666 6667 +fI[0] == strtox + + +Input: -1.3 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff a666 6666 6666 6667 +g_xfmt(0) gives 22 bytes: "-1.3000000000000000001" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff a666 6666 6666 6667 +fI[1] = #bfff a666 6666 6666 6666 +fI[0] == strtox + + +Input: 1.4 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff b333 3333 3333 3333 +g_xfmt(0) gives 3 bytes: "1.4" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff b333 3333 3333 3333 +fI[1] = #3fff b333 3333 3333 3334 +fI[0] == strtox + + +Input: -1.4 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff b333 3333 3333 3334 +g_xfmt(0) gives 22 bytes: "-1.4000000000000000001" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff b333 3333 3333 3334 +fI[1] = #bfff b333 3333 3333 3333 +fI[0] == strtox + + +Input: 1.5 + +strtox consumes 3 bytes and returns 1 +with bits = #3fff c000 0 0 0 +g_xfmt(0) gives 3 bytes: "1.5" + +strtoIx returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtox + + +Input: -1.5 + +strtox consumes 4 bytes and returns 9 +with bits = #bfff c000 0 0 0 +g_xfmt(0) gives 4 bytes: "-1.5" + +strtoIx returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.6 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff cccc cccc cccc cccc +g_xfmt(0) gives 21 bytes: "1.5999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff cccc cccc cccc cccc +fI[1] = #3fff cccc cccc cccc cccd +fI[0] == strtox + + +Input: -1.6 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff cccc cccc cccc cccd +g_xfmt(0) gives 4 bytes: "-1.6" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff cccc cccc cccc cccd +fI[1] = #bfff cccc cccc cccc cccc +fI[0] == strtox + + +Input: 1.7 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff d999 9999 9999 9999 +g_xfmt(0) gives 21 bytes: "1.6999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff d999 9999 9999 9999 +fI[1] = #3fff d999 9999 9999 999a +fI[0] == strtox + + +Input: -1.7 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff d999 9999 9999 999a +g_xfmt(0) gives 4 bytes: "-1.7" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff d999 9999 9999 999a +fI[1] = #bfff d999 9999 9999 9999 +fI[0] == strtox + + +Input: 1.8 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff e666 6666 6666 6666 +g_xfmt(0) gives 3 bytes: "1.8" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff e666 6666 6666 6666 +fI[1] = #3fff e666 6666 6666 6667 +fI[0] == strtox + + +Input: -1.8 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff e666 6666 6666 6667 +g_xfmt(0) gives 22 bytes: "-1.8000000000000000001" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff e666 6666 6666 6667 +fI[1] = #bfff e666 6666 6666 6666 +fI[0] == strtox + + +Input: 1.9 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff f333 3333 3333 3333 +g_xfmt(0) gives 3 bytes: "1.9" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff f333 3333 3333 3333 +fI[1] = #3fff f333 3333 3333 3334 +fI[0] == strtox + + +Input: -1.9 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff f333 3333 3333 3334 +g_xfmt(0) gives 22 bytes: "-1.9000000000000000001" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff f333 3333 3333 3334 +fI[1] = #bfff f333 3333 3333 3333 +fI[0] == strtox + diff -Nru mlton-20130715/runtime/gdtoa/test/x.ou1 mlton-20210117+dfsg/runtime/gdtoa/test/x.ou1 --- mlton-20130715/runtime/gdtoa/test/x.ou1 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/x.ou1 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,1471 @@ + +Input: 1.23 + +strtox consumes 4 bytes and returns 33 +with bits = #3fff 9d70 a3d7 a3d 70a4 +printf("%.21Lg") gives 1.23000000000000000002 +g_xfmt(0) gives 4 bytes: "1.23" + +strtoIx returns 33, consuming 4 bytes. +fI[0] = #3fff 9d70 a3d7 a3d 70a3 += 1.22999999999999999991 +fI[1] = #3fff 9d70 a3d7 a3d 70a4 += 1.23000000000000000002 +fI[1] == strtox + + +Input: 1.23e+20 + +strtox consumes 8 bytes and returns 1 +with bits = #4041 d55e f90a 2da1 8000 +printf("%.21Lg") gives 123000000000000000000 +g_xfmt(0) gives 8 bytes: "1.23e+20" + +strtoIx returns 1, consuming 8 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.23e-20 + +strtox consumes 8 bytes and returns 17 +with bits = #3fbc e857 267b b3a9 84f2 +printf("%.21Lg") gives 1.22999999999999999997e-20 +g_xfmt(0) gives 8 bytes: "1.23e-20" + +strtoIx returns 17, consuming 8 bytes. +fI[0] = #3fbc e857 267b b3a9 84f2 += 1.22999999999999999997e-20 +fI[1] = #3fbc e857 267b b3a9 84f3 += 1.23000000000000000004e-20 +fI[0] == strtox + + +Input: 1.23456789 + +strtox consumes 10 bytes and returns 33 +with bits = #3fff 9e06 5214 1ef0 dbf6 +printf("%.21Lg") gives 1.23456789000000000003 +g_xfmt(0) gives 10 bytes: "1.23456789" + +strtoIx returns 33, consuming 10 bytes. +fI[0] = #3fff 9e06 5214 1ef0 dbf5 += 1.23456788999999999992 +fI[1] = #3fff 9e06 5214 1ef0 dbf6 += 1.23456789000000000003 +fI[1] == strtox + + +Input: 1.23456589e+20 + +strtox consumes 14 bytes and returns 1 +with bits = #4041 d629 bd33 5cc ba00 +printf("%.21Lg") gives 123456589000000000000 +g_xfmt(0) gives 14 bytes: "1.23456589e+20" + +strtoIx returns 1, consuming 14 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.23e+30 + +strtox consumes 8 bytes and returns 17 +with bits = #4062 f865 8274 7dbc 824a +printf("%.21Lg") gives 1.22999999999999999999e+30 +g_xfmt(0) gives 8 bytes: "1.23e+30" + +strtoIx returns 17, consuming 8 bytes. +fI[0] = #4062 f865 8274 7dbc 824a += 1.22999999999999999999e+30 +fI[1] = #4062 f865 8274 7dbc 824b += 1.23000000000000000006e+30 +fI[0] == strtox + + +Input: 1.23e-30 + +strtox consumes 8 bytes and returns 17 +with bits = #3f9b c794 337a 8085 54eb +printf("%.21Lg") gives 1.22999999999999999999e-30 +g_xfmt(0) gives 8 bytes: "1.23e-30" + +strtoIx returns 17, consuming 8 bytes. +fI[0] = #3f9b c794 337a 8085 54eb += 1.22999999999999999999e-30 +fI[1] = #3f9b c794 337a 8085 54ec += 1.23000000000000000007e-30 +fI[0] == strtox + + +Input: 1.23456789e-20 + +strtox consumes 14 bytes and returns 17 +with bits = #3fbc e934 a38 f3d6 d352 +printf("%.21Lg") gives 1.23456788999999999998e-20 +g_xfmt(0) gives 14 bytes: "1.23456789e-20" + +strtoIx returns 17, consuming 14 bytes. +fI[0] = #3fbc e934 a38 f3d6 d352 += 1.23456788999999999998e-20 +fI[1] = #3fbc e934 a38 f3d6 d353 += 1.23456789000000000005e-20 +fI[0] == strtox + + +Input: 1.23456789e-30 + +strtox consumes 14 bytes and returns 17 +with bits = #3f9b c851 f19d decc a8fc +printf("%.21Lg") gives 1.23456788999999999999e-30 +g_xfmt(0) gives 14 bytes: "1.23456789e-30" + +strtoIx returns 17, consuming 14 bytes. +fI[0] = #3f9b c851 f19d decc a8fc += 1.23456788999999999999e-30 +fI[1] = #3f9b c851 f19d decc a8fd += 1.23456789000000000007e-30 +fI[0] == strtox + + +Input: 1.234567890123456789 + +strtox consumes 20 bytes and returns 17 +with bits = #3fff 9e06 5214 62cf db8d +printf("%.21Lg") gives 1.23456789012345678899 +g_xfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIx returns 17, consuming 20 bytes. +fI[0] = #3fff 9e06 5214 62cf db8d += 1.23456789012345678899 +fI[1] = #3fff 9e06 5214 62cf db8e += 1.23456789012345678909 +fI[0] == strtox + + +Input: 1.23456789012345678901234567890123456789 + +strtox consumes 40 bytes and returns 17 +with bits = #3fff 9e06 5214 62cf db8d +printf("%.21Lg") gives 1.23456789012345678899 +g_xfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIx returns 17, consuming 40 bytes. +fI[0] = #3fff 9e06 5214 62cf db8d += 1.23456789012345678899 +fI[1] = #3fff 9e06 5214 62cf db8e += 1.23456789012345678909 +fI[0] == strtox + + +Input: 1.23e306 + +strtox consumes 8 bytes and returns 17 +with bits = #43f7 e033 b668 e30f a6d5 +printf("%.21Lg") gives 1.22999999999999999997e+306 +g_xfmt(0) gives 9 bytes: "1.23e+306" + +strtoIx returns 17, consuming 8 bytes. +fI[0] = #43f7 e033 b668 e30f a6d5 += 1.22999999999999999997e+306 +fI[1] = #43f7 e033 b668 e30f a6d6 += 1.23000000000000000005e+306 +fI[0] == strtox + + +Input: 1.23e-306 + +strtox consumes 9 bytes and returns 33 +with bits = #3c06 dd1d c2ed 1cb7 3f25 +printf("%.21Lg") gives 1.23000000000000000002e-306 +g_xfmt(0) gives 9 bytes: "1.23e-306" + +strtoIx returns 33, consuming 9 bytes. +fI[0] = #3c06 dd1d c2ed 1cb7 3f24 += 1.22999999999999999995e-306 +fI[1] = #3c06 dd1d c2ed 1cb7 3f25 += 1.23000000000000000002e-306 +fI[1] == strtox + + +Input: 1.23e-320 + +strtox consumes 9 bytes and returns 33 +with bits = #3bd8 9b98 c371 844c 3f1a +printf("%.21Lg") gives 1.23000000000000000002e-320 +g_xfmt(0) gives 9 bytes: "1.23e-320" + +strtoIx returns 33, consuming 9 bytes. +fI[0] = #3bd8 9b98 c371 844c 3f19 += 1.22999999999999999991e-320 +fI[1] = #3bd8 9b98 c371 844c 3f1a += 1.23000000000000000002e-320 +fI[1] == strtox + + +Input: 1.23e-20 + +strtox consumes 8 bytes and returns 17 +with bits = #3fbc e857 267b b3a9 84f2 +printf("%.21Lg") gives 1.22999999999999999997e-20 +g_xfmt(0) gives 8 bytes: "1.23e-20" + +strtoIx returns 17, consuming 8 bytes. +fI[0] = #3fbc e857 267b b3a9 84f2 += 1.22999999999999999997e-20 +fI[1] = #3fbc e857 267b b3a9 84f3 += 1.23000000000000000004e-20 +fI[0] == strtox + + +Input: 1.23456789e307 + +strtox consumes 14 bytes and returns 17 +with bits = #43fb 8ca5 8a5e d766 de75 +printf("%.21Lg") gives 1.23456788999999999998e+307 +g_xfmt(0) gives 15 bytes: "1.23456789e+307" + +strtoIx returns 17, consuming 14 bytes. +fI[0] = #43fb 8ca5 8a5e d766 de75 += 1.23456788999999999998e+307 +fI[1] = #43fb 8ca5 8a5e d766 de76 += 1.23456789000000000011e+307 +fI[0] == strtox + + +Input: 1.23456589e-307 + +strtox consumes 15 bytes and returns 17 +with bits = #3c03 b18c b5dc c22f d369 +printf("%.21Lg") gives 1.23456588999999999999e-307 +g_xfmt(0) gives 15 bytes: "1.23456589e-307" + +strtoIx returns 17, consuming 15 bytes. +fI[0] = #3c03 b18c b5dc c22f d369 += 1.23456588999999999999e-307 +fI[1] = #3c03 b18c b5dc c22f d36a += 1.23456589000000000009e-307 +fI[0] == strtox + + +Input: 1.234567890123456789 + +strtox consumes 20 bytes and returns 17 +with bits = #3fff 9e06 5214 62cf db8d +printf("%.21Lg") gives 1.23456789012345678899 +g_xfmt(0) gives 20 bytes: "1.234567890123456789" + +strtoIx returns 17, consuming 20 bytes. +fI[0] = #3fff 9e06 5214 62cf db8d += 1.23456789012345678899 +fI[1] = #3fff 9e06 5214 62cf db8e += 1.23456789012345678909 +fI[0] == strtox + + +Input: 1.234567890123456789e301 + +strtox consumes 24 bytes and returns 33 +with bits = #43e7 937a 8baf ab20 980c +printf("%.21Lg") gives 1.234567890123456789e+301 +g_xfmt(0) gives 25 bytes: "1.234567890123456789e+301" + +strtoIx returns 33, consuming 24 bytes. +fI[0] = #43e7 937a 8baf ab20 980b += 1.23456789012345678889e+301 +fI[1] = #43e7 937a 8baf ab20 980c += 1.234567890123456789e+301 +fI[1] == strtox + + +Input: 1.234567890123456789e-301 + +strtox consumes 25 bytes and returns 33 +with bits = #3c17 a953 271a 5d06 9ad9 +printf("%.21Lg") gives 1.23456789012345678902e-301 +g_xfmt(0) gives 25 bytes: "1.234567890123456789e-301" + +strtoIx returns 33, consuming 25 bytes. +fI[0] = #3c17 a953 271a 5d06 9ad8 += 1.23456789012345678892e-301 +fI[1] = #3c17 a953 271a 5d06 9ad9 += 1.23456789012345678902e-301 +fI[1] == strtox + + +Input: 1.234567890123456789e-321 + +strtox consumes 25 bytes and returns 33 +with bits = #3bd4 f9e1 1b4c ea6d cce9 +printf("%.21Lg") gives 1.234567890123456789e-321 +g_xfmt(0) gives 25 bytes: "1.234567890123456789e-321" + +strtoIx returns 33, consuming 25 bytes. +fI[0] = #3bd4 f9e1 1b4c ea6d cce8 += 1.23456789012345678893e-321 +fI[1] = #3bd4 f9e1 1b4c ea6d cce9 += 1.234567890123456789e-321 +fI[1] == strtox + + +Input: 1e23 + +strtox consumes 4 bytes and returns 1 +with bits = #404b a968 163f a57 b400 +printf("%.21Lg") gives 1e+23 +g_xfmt(0) gives 5 bytes: "1e+23" + +strtoIx returns 1, consuming 4 bytes. +fI[0] == fI[1] == strtox + + +Input: 1e310 + +strtox consumes 5 bytes and returns 33 +with bits = #4404 de81 e40a 34b cf50 +printf("%.21Lg") gives 1e+310 +g_xfmt(0) gives 6 bytes: "1e+310" + +strtoIx returns 33, consuming 5 bytes. +fI[0] = #4404 de81 e40a 34b cf4f += 9.9999999999999999994e+309 +fI[1] = #4404 de81 e40a 34b cf50 += 1e+310 +fI[1] == strtox + + +Input: 9.0259718793241475e-277 + +strtox consumes 23 bytes and returns 33 +with bits = #3c69 ffff ffff ffff fcf7 +printf("%.21Lg") gives 9.02597187932414750016e-277 +g_xfmt(0) gives 23 bytes: "9.0259718793241475e-277" + +strtoIx returns 33, consuming 23 bytes. +fI[0] = #3c69 ffff ffff ffff fcf6 += 9.02597187932414749967e-277 +fI[1] = #3c69 ffff ffff ffff fcf7 += 9.02597187932414750016e-277 +fI[1] == strtox + + +Input: 9.025971879324147880346310405869e-277 + +strtox consumes 37 bytes and returns 17 +with bits = #3c6a 8000 0 0 0 +printf("%.21Lg") gives 9.02597187932414788035e-277 +g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277" + +strtoIx returns 17, consuming 37 bytes. +fI[0] = #3c6a 8000 0 0 0 += 9.02597187932414788035e-277 +fI[1] = #3c6a 8000 0 0 1 += 9.02597187932414788132e-277 +fI[0] == strtox + + +Input: 9.025971879324147880346310405868e-277 + +strtox consumes 37 bytes and returns 33 +with bits = #3c6a 8000 0 0 0 +printf("%.21Lg") gives 9.02597187932414788035e-277 +g_xfmt(0) gives 26 bytes: "9.0259718793241478803e-277" + +strtoIx returns 33, consuming 37 bytes. +fI[0] = #3c69 ffff ffff ffff ffff += 9.02597187932414787986e-277 +fI[1] = #3c6a 8000 0 0 0 += 9.02597187932414788035e-277 +fI[1] == strtox + + +Input: 2.2250738585072014e-308 + +strtox consumes 23 bytes and returns 17 +with bits = #3c01 8000 0 0 46 +printf("%.21Lg") gives 2.22507385850720139998e-308 +g_xfmt(0) gives 23 bytes: "2.2250738585072014e-308" + +strtoIx returns 17, consuming 23 bytes. +fI[0] = #3c01 8000 0 0 46 += 2.22507385850720139998e-308 +fI[1] = #3c01 8000 0 0 47 += 2.22507385850720140022e-308 +fI[0] == strtox + + +Input: 2.2250738585072013e-308 + +strtox consumes 23 bytes and returns 17 +with bits = #3c00 ffff ffff ffff fd4f +printf("%.21Lg") gives 2.22507385850720129998e-308 +g_xfmt(0) gives 23 bytes: "2.2250738585072013e-308" + +strtoIx returns 17, consuming 23 bytes. +fI[0] = #3c00 ffff ffff ffff fd4f += 2.22507385850720129998e-308 +fI[1] = #3c00 ffff ffff ffff fd50 += 2.2250738585072013001e-308 +fI[0] == strtox + + +Input: 3.2649476e14 + +strtox consumes 12 bytes and returns 1 +with bits = #402f 9478 fe18 6d00 0 +printf("%.21Lg") gives 326494760000000 +g_xfmt(0) gives 13 bytes: "3.2649476e+14" + +strtoIx returns 1, consuming 12 bytes. +fI[0] == fI[1] == strtox + +Rounding mode for strtor... changed from 1 (nearest) to 0 (toward zero) + +Input: 1.1 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff 8ccc cccc cccc cccc +printf("%.21Lg") gives 1.09999999999999999991 +g_xfmt(0) gives 21 bytes: "1.0999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 8ccc cccc cccc cccc += 1.09999999999999999991 +fI[1] = #3fff 8ccc cccc cccc cccd += 1.10000000000000000002 +fI[0] == strtox + + +Input: -1.1 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff 8ccc cccc cccc cccc +printf("%.21Lg") gives -1.09999999999999999991 +g_xfmt(0) gives 22 bytes: "-1.0999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 8ccc cccc cccc cccd += -1.10000000000000000002 +fI[1] = #bfff 8ccc cccc cccc cccc += -1.09999999999999999991 +fI[1] == strtox + + +Input: 1.2 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff 9999 9999 9999 9999 +printf("%.21Lg") gives 1.19999999999999999993 +g_xfmt(0) gives 21 bytes: "1.1999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 9999 9999 9999 9999 += 1.19999999999999999993 +fI[1] = #3fff 9999 9999 9999 999a += 1.20000000000000000004 +fI[0] == strtox + + +Input: -1.2 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff 9999 9999 9999 9999 +printf("%.21Lg") gives -1.19999999999999999993 +g_xfmt(0) gives 22 bytes: "-1.1999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 9999 9999 9999 999a += -1.20000000000000000004 +fI[1] = #bfff 9999 9999 9999 9999 += -1.19999999999999999993 +fI[1] == strtox + + +Input: 1.3 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff a666 6666 6666 6666 +printf("%.21Lg") gives 1.29999999999999999996 +g_xfmt(0) gives 3 bytes: "1.3" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff a666 6666 6666 6666 += 1.29999999999999999996 +fI[1] = #3fff a666 6666 6666 6667 += 1.30000000000000000007 +fI[0] == strtox + + +Input: -1.3 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff a666 6666 6666 6666 +printf("%.21Lg") gives -1.29999999999999999996 +g_xfmt(0) gives 4 bytes: "-1.3" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff a666 6666 6666 6667 += -1.30000000000000000007 +fI[1] = #bfff a666 6666 6666 6666 += -1.29999999999999999996 +fI[1] == strtox + + +Input: 1.4 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff b333 3333 3333 3333 +printf("%.21Lg") gives 1.39999999999999999998 +g_xfmt(0) gives 3 bytes: "1.4" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff b333 3333 3333 3333 += 1.39999999999999999998 +fI[1] = #3fff b333 3333 3333 3334 += 1.40000000000000000009 +fI[0] == strtox + + +Input: -1.4 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff b333 3333 3333 3333 +printf("%.21Lg") gives -1.39999999999999999998 +g_xfmt(0) gives 4 bytes: "-1.4" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff b333 3333 3333 3334 += -1.40000000000000000009 +fI[1] = #bfff b333 3333 3333 3333 += -1.39999999999999999998 +fI[1] == strtox + + +Input: 1.5 + +strtox consumes 3 bytes and returns 1 +with bits = #3fff c000 0 0 0 +printf("%.21Lg") gives 1.5 +g_xfmt(0) gives 3 bytes: "1.5" + +strtoIx returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtox + + +Input: -1.5 + +strtox consumes 4 bytes and returns 9 +with bits = #bfff c000 0 0 0 +printf("%.21Lg") gives -1.5 +g_xfmt(0) gives 4 bytes: "-1.5" + +strtoIx returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.6 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff cccc cccc cccc cccc +printf("%.21Lg") gives 1.59999999999999999991 +g_xfmt(0) gives 21 bytes: "1.5999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff cccc cccc cccc cccc += 1.59999999999999999991 +fI[1] = #3fff cccc cccc cccc cccd += 1.60000000000000000002 +fI[0] == strtox + + +Input: -1.6 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff cccc cccc cccc cccc +printf("%.21Lg") gives -1.59999999999999999991 +g_xfmt(0) gives 22 bytes: "-1.5999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff cccc cccc cccc cccd += -1.60000000000000000002 +fI[1] = #bfff cccc cccc cccc cccc += -1.59999999999999999991 +fI[1] == strtox + + +Input: 1.7 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff d999 9999 9999 9999 +printf("%.21Lg") gives 1.69999999999999999993 +g_xfmt(0) gives 21 bytes: "1.6999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff d999 9999 9999 9999 += 1.69999999999999999993 +fI[1] = #3fff d999 9999 9999 999a += 1.70000000000000000004 +fI[0] == strtox + + +Input: -1.7 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff d999 9999 9999 9999 +printf("%.21Lg") gives -1.69999999999999999993 +g_xfmt(0) gives 22 bytes: "-1.6999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff d999 9999 9999 999a += -1.70000000000000000004 +fI[1] = #bfff d999 9999 9999 9999 += -1.69999999999999999993 +fI[1] == strtox + + +Input: 1.8 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff e666 6666 6666 6666 +printf("%.21Lg") gives 1.79999999999999999996 +g_xfmt(0) gives 3 bytes: "1.8" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff e666 6666 6666 6666 += 1.79999999999999999996 +fI[1] = #3fff e666 6666 6666 6667 += 1.80000000000000000007 +fI[0] == strtox + + +Input: -1.8 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff e666 6666 6666 6666 +printf("%.21Lg") gives -1.79999999999999999996 +g_xfmt(0) gives 4 bytes: "-1.8" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff e666 6666 6666 6667 += -1.80000000000000000007 +fI[1] = #bfff e666 6666 6666 6666 += -1.79999999999999999996 +fI[1] == strtox + + +Input: 1.9 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff f333 3333 3333 3333 +printf("%.21Lg") gives 1.89999999999999999998 +g_xfmt(0) gives 3 bytes: "1.9" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff f333 3333 3333 3333 += 1.89999999999999999998 +fI[1] = #3fff f333 3333 3333 3334 += 1.90000000000000000009 +fI[0] == strtox + + +Input: -1.9 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff f333 3333 3333 3333 +printf("%.21Lg") gives -1.89999999999999999998 +g_xfmt(0) gives 4 bytes: "-1.9" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff f333 3333 3333 3334 += -1.90000000000000000009 +fI[1] = #bfff f333 3333 3333 3333 += -1.89999999999999999998 +fI[1] == strtox + +Rounding mode for strtor... changed from 0 (toward zero) to 1 (nearest) + +Input: 1.1 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff 8ccc cccc cccc cccd +printf("%.21Lg") gives 1.10000000000000000002 +g_xfmt(0) gives 3 bytes: "1.1" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 8ccc cccc cccc cccc += 1.09999999999999999991 +fI[1] = #3fff 8ccc cccc cccc cccd += 1.10000000000000000002 +fI[1] == strtox + + +Input: -1.1 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff 8ccc cccc cccc cccd +printf("%.21Lg") gives -1.10000000000000000002 +g_xfmt(0) gives 4 bytes: "-1.1" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 8ccc cccc cccc cccd += -1.10000000000000000002 +fI[1] = #bfff 8ccc cccc cccc cccc += -1.09999999999999999991 +fI[0] == strtox + + +Input: 1.2 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff 9999 9999 9999 999a +printf("%.21Lg") gives 1.20000000000000000004 +g_xfmt(0) gives 3 bytes: "1.2" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 9999 9999 9999 9999 += 1.19999999999999999993 +fI[1] = #3fff 9999 9999 9999 999a += 1.20000000000000000004 +fI[1] == strtox + + +Input: -1.2 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff 9999 9999 9999 999a +printf("%.21Lg") gives -1.20000000000000000004 +g_xfmt(0) gives 4 bytes: "-1.2" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 9999 9999 9999 999a += -1.20000000000000000004 +fI[1] = #bfff 9999 9999 9999 9999 += -1.19999999999999999993 +fI[0] == strtox + + +Input: 1.3 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff a666 6666 6666 6666 +printf("%.21Lg") gives 1.29999999999999999996 +g_xfmt(0) gives 3 bytes: "1.3" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff a666 6666 6666 6666 += 1.29999999999999999996 +fI[1] = #3fff a666 6666 6666 6667 += 1.30000000000000000007 +fI[0] == strtox + + +Input: -1.3 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff a666 6666 6666 6666 +printf("%.21Lg") gives -1.29999999999999999996 +g_xfmt(0) gives 4 bytes: "-1.3" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff a666 6666 6666 6667 += -1.30000000000000000007 +fI[1] = #bfff a666 6666 6666 6666 += -1.29999999999999999996 +fI[1] == strtox + + +Input: 1.4 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff b333 3333 3333 3333 +printf("%.21Lg") gives 1.39999999999999999998 +g_xfmt(0) gives 3 bytes: "1.4" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff b333 3333 3333 3333 += 1.39999999999999999998 +fI[1] = #3fff b333 3333 3333 3334 += 1.40000000000000000009 +fI[0] == strtox + + +Input: -1.4 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff b333 3333 3333 3333 +printf("%.21Lg") gives -1.39999999999999999998 +g_xfmt(0) gives 4 bytes: "-1.4" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff b333 3333 3333 3334 += -1.40000000000000000009 +fI[1] = #bfff b333 3333 3333 3333 += -1.39999999999999999998 +fI[1] == strtox + + +Input: 1.5 + +strtox consumes 3 bytes and returns 1 +with bits = #3fff c000 0 0 0 +printf("%.21Lg") gives 1.5 +g_xfmt(0) gives 3 bytes: "1.5" + +strtoIx returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtox + + +Input: -1.5 + +strtox consumes 4 bytes and returns 9 +with bits = #bfff c000 0 0 0 +printf("%.21Lg") gives -1.5 +g_xfmt(0) gives 4 bytes: "-1.5" + +strtoIx returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.6 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff cccc cccc cccc cccd +printf("%.21Lg") gives 1.60000000000000000002 +g_xfmt(0) gives 3 bytes: "1.6" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff cccc cccc cccc cccc += 1.59999999999999999991 +fI[1] = #3fff cccc cccc cccc cccd += 1.60000000000000000002 +fI[1] == strtox + + +Input: -1.6 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff cccc cccc cccc cccd +printf("%.21Lg") gives -1.60000000000000000002 +g_xfmt(0) gives 4 bytes: "-1.6" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff cccc cccc cccc cccd += -1.60000000000000000002 +fI[1] = #bfff cccc cccc cccc cccc += -1.59999999999999999991 +fI[0] == strtox + + +Input: 1.7 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff d999 9999 9999 999a +printf("%.21Lg") gives 1.70000000000000000004 +g_xfmt(0) gives 3 bytes: "1.7" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff d999 9999 9999 9999 += 1.69999999999999999993 +fI[1] = #3fff d999 9999 9999 999a += 1.70000000000000000004 +fI[1] == strtox + + +Input: -1.7 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff d999 9999 9999 999a +printf("%.21Lg") gives -1.70000000000000000004 +g_xfmt(0) gives 4 bytes: "-1.7" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff d999 9999 9999 999a += -1.70000000000000000004 +fI[1] = #bfff d999 9999 9999 9999 += -1.69999999999999999993 +fI[0] == strtox + + +Input: 1.8 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff e666 6666 6666 6666 +printf("%.21Lg") gives 1.79999999999999999996 +g_xfmt(0) gives 3 bytes: "1.8" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff e666 6666 6666 6666 += 1.79999999999999999996 +fI[1] = #3fff e666 6666 6666 6667 += 1.80000000000000000007 +fI[0] == strtox + + +Input: -1.8 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff e666 6666 6666 6666 +printf("%.21Lg") gives -1.79999999999999999996 +g_xfmt(0) gives 4 bytes: "-1.8" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff e666 6666 6666 6667 += -1.80000000000000000007 +fI[1] = #bfff e666 6666 6666 6666 += -1.79999999999999999996 +fI[1] == strtox + + +Input: 1.9 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff f333 3333 3333 3333 +printf("%.21Lg") gives 1.89999999999999999998 +g_xfmt(0) gives 3 bytes: "1.9" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff f333 3333 3333 3333 += 1.89999999999999999998 +fI[1] = #3fff f333 3333 3333 3334 += 1.90000000000000000009 +fI[0] == strtox + + +Input: -1.9 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff f333 3333 3333 3333 +printf("%.21Lg") gives -1.89999999999999999998 +g_xfmt(0) gives 4 bytes: "-1.9" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff f333 3333 3333 3334 += -1.90000000000000000009 +fI[1] = #bfff f333 3333 3333 3333 += -1.89999999999999999998 +fI[1] == strtox + +Rounding mode for strtor... changed from 1 (nearest) to 2 (toward +Infinity) + +Input: 1.1 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff 8ccc cccc cccc cccd +printf("%.21Lg") gives 1.10000000000000000002 +g_xfmt(0) gives 3 bytes: "1.1" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 8ccc cccc cccc cccc += 1.09999999999999999991 +fI[1] = #3fff 8ccc cccc cccc cccd += 1.10000000000000000002 +fI[1] == strtox + + +Input: -1.1 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff 8ccc cccc cccc cccc +printf("%.21Lg") gives -1.09999999999999999991 +g_xfmt(0) gives 22 bytes: "-1.0999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 8ccc cccc cccc cccd += -1.10000000000000000002 +fI[1] = #bfff 8ccc cccc cccc cccc += -1.09999999999999999991 +fI[1] == strtox + + +Input: 1.2 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff 9999 9999 9999 999a +printf("%.21Lg") gives 1.20000000000000000004 +g_xfmt(0) gives 3 bytes: "1.2" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 9999 9999 9999 9999 += 1.19999999999999999993 +fI[1] = #3fff 9999 9999 9999 999a += 1.20000000000000000004 +fI[1] == strtox + + +Input: -1.2 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff 9999 9999 9999 9999 +printf("%.21Lg") gives -1.19999999999999999993 +g_xfmt(0) gives 22 bytes: "-1.1999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 9999 9999 9999 999a += -1.20000000000000000004 +fI[1] = #bfff 9999 9999 9999 9999 += -1.19999999999999999993 +fI[1] == strtox + + +Input: 1.3 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff a666 6666 6666 6667 +printf("%.21Lg") gives 1.30000000000000000007 +g_xfmt(0) gives 21 bytes: "1.3000000000000000001" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff a666 6666 6666 6666 += 1.29999999999999999996 +fI[1] = #3fff a666 6666 6666 6667 += 1.30000000000000000007 +fI[1] == strtox + + +Input: -1.3 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff a666 6666 6666 6666 +printf("%.21Lg") gives -1.29999999999999999996 +g_xfmt(0) gives 4 bytes: "-1.3" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff a666 6666 6666 6667 += -1.30000000000000000007 +fI[1] = #bfff a666 6666 6666 6666 += -1.29999999999999999996 +fI[1] == strtox + + +Input: 1.4 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff b333 3333 3333 3334 +printf("%.21Lg") gives 1.40000000000000000009 +g_xfmt(0) gives 21 bytes: "1.4000000000000000001" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff b333 3333 3333 3333 += 1.39999999999999999998 +fI[1] = #3fff b333 3333 3333 3334 += 1.40000000000000000009 +fI[1] == strtox + + +Input: -1.4 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff b333 3333 3333 3333 +printf("%.21Lg") gives -1.39999999999999999998 +g_xfmt(0) gives 4 bytes: "-1.4" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff b333 3333 3333 3334 += -1.40000000000000000009 +fI[1] = #bfff b333 3333 3333 3333 += -1.39999999999999999998 +fI[1] == strtox + + +Input: 1.5 + +strtox consumes 3 bytes and returns 1 +with bits = #3fff c000 0 0 0 +printf("%.21Lg") gives 1.5 +g_xfmt(0) gives 3 bytes: "1.5" + +strtoIx returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtox + + +Input: -1.5 + +strtox consumes 4 bytes and returns 9 +with bits = #bfff c000 0 0 0 +printf("%.21Lg") gives -1.5 +g_xfmt(0) gives 4 bytes: "-1.5" + +strtoIx returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.6 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff cccc cccc cccc cccd +printf("%.21Lg") gives 1.60000000000000000002 +g_xfmt(0) gives 3 bytes: "1.6" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff cccc cccc cccc cccc += 1.59999999999999999991 +fI[1] = #3fff cccc cccc cccc cccd += 1.60000000000000000002 +fI[1] == strtox + + +Input: -1.6 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff cccc cccc cccc cccc +printf("%.21Lg") gives -1.59999999999999999991 +g_xfmt(0) gives 22 bytes: "-1.5999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff cccc cccc cccc cccd += -1.60000000000000000002 +fI[1] = #bfff cccc cccc cccc cccc += -1.59999999999999999991 +fI[1] == strtox + + +Input: 1.7 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff d999 9999 9999 999a +printf("%.21Lg") gives 1.70000000000000000004 +g_xfmt(0) gives 3 bytes: "1.7" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff d999 9999 9999 9999 += 1.69999999999999999993 +fI[1] = #3fff d999 9999 9999 999a += 1.70000000000000000004 +fI[1] == strtox + + +Input: -1.7 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff d999 9999 9999 9999 +printf("%.21Lg") gives -1.69999999999999999993 +g_xfmt(0) gives 22 bytes: "-1.6999999999999999999" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff d999 9999 9999 999a += -1.70000000000000000004 +fI[1] = #bfff d999 9999 9999 9999 += -1.69999999999999999993 +fI[1] == strtox + + +Input: 1.8 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff e666 6666 6666 6667 +printf("%.21Lg") gives 1.80000000000000000007 +g_xfmt(0) gives 21 bytes: "1.8000000000000000001" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff e666 6666 6666 6666 += 1.79999999999999999996 +fI[1] = #3fff e666 6666 6666 6667 += 1.80000000000000000007 +fI[1] == strtox + + +Input: -1.8 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff e666 6666 6666 6666 +printf("%.21Lg") gives -1.79999999999999999996 +g_xfmt(0) gives 4 bytes: "-1.8" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff e666 6666 6666 6667 += -1.80000000000000000007 +fI[1] = #bfff e666 6666 6666 6666 += -1.79999999999999999996 +fI[1] == strtox + + +Input: 1.9 + +strtox consumes 3 bytes and returns 33 +with bits = #3fff f333 3333 3333 3334 +printf("%.21Lg") gives 1.90000000000000000009 +g_xfmt(0) gives 21 bytes: "1.9000000000000000001" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff f333 3333 3333 3333 += 1.89999999999999999998 +fI[1] = #3fff f333 3333 3333 3334 += 1.90000000000000000009 +fI[1] == strtox + + +Input: -1.9 + +strtox consumes 4 bytes and returns 25 +with bits = #bfff f333 3333 3333 3333 +printf("%.21Lg") gives -1.89999999999999999998 +g_xfmt(0) gives 4 bytes: "-1.9" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff f333 3333 3333 3334 += -1.90000000000000000009 +fI[1] = #bfff f333 3333 3333 3333 += -1.89999999999999999998 +fI[1] == strtox + +Rounding mode for strtor... changed from 2 (toward +Infinity) to 3 (toward -Infinity) + +Input: 1.1 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff 8ccc cccc cccc cccc +printf("%.21Lg") gives 1.09999999999999999991 +g_xfmt(0) gives 21 bytes: "1.0999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 8ccc cccc cccc cccc += 1.09999999999999999991 +fI[1] = #3fff 8ccc cccc cccc cccd += 1.10000000000000000002 +fI[0] == strtox + + +Input: -1.1 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff 8ccc cccc cccc cccd +printf("%.21Lg") gives -1.10000000000000000002 +g_xfmt(0) gives 4 bytes: "-1.1" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 8ccc cccc cccc cccd += -1.10000000000000000002 +fI[1] = #bfff 8ccc cccc cccc cccc += -1.09999999999999999991 +fI[0] == strtox + + +Input: 1.2 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff 9999 9999 9999 9999 +printf("%.21Lg") gives 1.19999999999999999993 +g_xfmt(0) gives 21 bytes: "1.1999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff 9999 9999 9999 9999 += 1.19999999999999999993 +fI[1] = #3fff 9999 9999 9999 999a += 1.20000000000000000004 +fI[0] == strtox + + +Input: -1.2 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff 9999 9999 9999 999a +printf("%.21Lg") gives -1.20000000000000000004 +g_xfmt(0) gives 4 bytes: "-1.2" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff 9999 9999 9999 999a += -1.20000000000000000004 +fI[1] = #bfff 9999 9999 9999 9999 += -1.19999999999999999993 +fI[0] == strtox + + +Input: 1.3 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff a666 6666 6666 6666 +printf("%.21Lg") gives 1.29999999999999999996 +g_xfmt(0) gives 3 bytes: "1.3" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff a666 6666 6666 6666 += 1.29999999999999999996 +fI[1] = #3fff a666 6666 6666 6667 += 1.30000000000000000007 +fI[0] == strtox + + +Input: -1.3 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff a666 6666 6666 6667 +printf("%.21Lg") gives -1.30000000000000000007 +g_xfmt(0) gives 22 bytes: "-1.3000000000000000001" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff a666 6666 6666 6667 += -1.30000000000000000007 +fI[1] = #bfff a666 6666 6666 6666 += -1.29999999999999999996 +fI[0] == strtox + + +Input: 1.4 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff b333 3333 3333 3333 +printf("%.21Lg") gives 1.39999999999999999998 +g_xfmt(0) gives 3 bytes: "1.4" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff b333 3333 3333 3333 += 1.39999999999999999998 +fI[1] = #3fff b333 3333 3333 3334 += 1.40000000000000000009 +fI[0] == strtox + + +Input: -1.4 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff b333 3333 3333 3334 +printf("%.21Lg") gives -1.40000000000000000009 +g_xfmt(0) gives 22 bytes: "-1.4000000000000000001" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff b333 3333 3333 3334 += -1.40000000000000000009 +fI[1] = #bfff b333 3333 3333 3333 += -1.39999999999999999998 +fI[0] == strtox + + +Input: 1.5 + +strtox consumes 3 bytes and returns 1 +with bits = #3fff c000 0 0 0 +printf("%.21Lg") gives 1.5 +g_xfmt(0) gives 3 bytes: "1.5" + +strtoIx returns 1, consuming 3 bytes. +fI[0] == fI[1] == strtox + + +Input: -1.5 + +strtox consumes 4 bytes and returns 9 +with bits = #bfff c000 0 0 0 +printf("%.21Lg") gives -1.5 +g_xfmt(0) gives 4 bytes: "-1.5" + +strtoIx returns 9, consuming 4 bytes. +fI[0] == fI[1] == strtox + + +Input: 1.6 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff cccc cccc cccc cccc +printf("%.21Lg") gives 1.59999999999999999991 +g_xfmt(0) gives 21 bytes: "1.5999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff cccc cccc cccc cccc += 1.59999999999999999991 +fI[1] = #3fff cccc cccc cccc cccd += 1.60000000000000000002 +fI[0] == strtox + + +Input: -1.6 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff cccc cccc cccc cccd +printf("%.21Lg") gives -1.60000000000000000002 +g_xfmt(0) gives 4 bytes: "-1.6" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff cccc cccc cccc cccd += -1.60000000000000000002 +fI[1] = #bfff cccc cccc cccc cccc += -1.59999999999999999991 +fI[0] == strtox + + +Input: 1.7 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff d999 9999 9999 9999 +printf("%.21Lg") gives 1.69999999999999999993 +g_xfmt(0) gives 21 bytes: "1.6999999999999999999" + +strtoIx returns 33, consuming 3 bytes. +fI[0] = #3fff d999 9999 9999 9999 += 1.69999999999999999993 +fI[1] = #3fff d999 9999 9999 999a += 1.70000000000000000004 +fI[0] == strtox + + +Input: -1.7 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff d999 9999 9999 999a +printf("%.21Lg") gives -1.70000000000000000004 +g_xfmt(0) gives 4 bytes: "-1.7" + +strtoIx returns 41, consuming 4 bytes. +fI[0] = #bfff d999 9999 9999 999a += -1.70000000000000000004 +fI[1] = #bfff d999 9999 9999 9999 += -1.69999999999999999993 +fI[0] == strtox + + +Input: 1.8 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff e666 6666 6666 6666 +printf("%.21Lg") gives 1.79999999999999999996 +g_xfmt(0) gives 3 bytes: "1.8" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff e666 6666 6666 6666 += 1.79999999999999999996 +fI[1] = #3fff e666 6666 6666 6667 += 1.80000000000000000007 +fI[0] == strtox + + +Input: -1.8 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff e666 6666 6666 6667 +printf("%.21Lg") gives -1.80000000000000000007 +g_xfmt(0) gives 22 bytes: "-1.8000000000000000001" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff e666 6666 6666 6667 += -1.80000000000000000007 +fI[1] = #bfff e666 6666 6666 6666 += -1.79999999999999999996 +fI[0] == strtox + + +Input: 1.9 + +strtox consumes 3 bytes and returns 17 +with bits = #3fff f333 3333 3333 3333 +printf("%.21Lg") gives 1.89999999999999999998 +g_xfmt(0) gives 3 bytes: "1.9" + +strtoIx returns 17, consuming 3 bytes. +fI[0] = #3fff f333 3333 3333 3333 += 1.89999999999999999998 +fI[1] = #3fff f333 3333 3333 3334 += 1.90000000000000000009 +fI[0] == strtox + + +Input: -1.9 + +strtox consumes 4 bytes and returns 41 +with bits = #bfff f333 3333 3333 3334 +printf("%.21Lg") gives -1.90000000000000000009 +g_xfmt(0) gives 22 bytes: "-1.9000000000000000001" + +strtoIx returns 25, consuming 4 bytes. +fI[0] = #bfff f333 3333 3333 3334 += -1.90000000000000000009 +fI[1] = #bfff f333 3333 3333 3333 += -1.89999999999999999998 +fI[0] == strtox + diff -Nru mlton-20130715/runtime/gdtoa/test/xQtest.c mlton-20210117+dfsg/runtime/gdtoa/test/xQtest.c --- mlton-20130715/runtime/gdtoa/test/xQtest.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/xQtest.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,58 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 2002 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +#include + + int +main(void) +{ + union { long double d; unsigned int bits[4]; } u, w; + switch(sizeof(long double)) { + case 16: + w.bits[0] = w.bits[3] = 0; + w.d = 1.; + u.d = 3.; + w.d = w.d / u.d; + if (w.bits[0] && w.bits[3]) + printf("cp x.ou0 x.out; cp xL.ou0 xL.out;" + " cp Q.ou1 Q.out; cp pftestQ.out pftest.out\n"); + else + printf("cp x.ou0 x.out; cp xL.ou0 xL.out;" + " cp Q.ou0 Q.out; cp pftestx.out pftest.out\n"); + break; + case 10: + case 12: + printf("cp x.ou1 x.out; cp xL.ou1 xL.out; cp Q.ou0 Q.out;" + " cp pftestx.out pftest.out\n"); + break; + default: + printf("cp x.ou0 x.out; cp xL.ou0 xL.out; cp Q.ou0 Q.out;" + " cp pftestx.out pftest.out\n"); + } + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/test/xsum0.out mlton-20210117+dfsg/runtime/gdtoa/test/xsum0.out --- mlton-20130715/runtime/gdtoa/test/xsum0.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/xsum0.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,41 @@ +README efba0d5d 3412 +Q.ou0 e5903210 28961 +Q.ou1 c0a0cec 39848 +Qtest.c 39c7381 5823 +d.out fbd2cc70 28614 +dI.out 12d50f0d 4517 +dIsi.out 1ecb6a38 4498 +dItest.c 375fe4e 2372 +dd.out feae6ba5 41333 +ddsi.out 1dba4cfd 10661 +ddtest.c f664a218 5631 +dt.c a240b56 7074 +dtest.c fa7324f5 4738 +dtst.out 71e63d3 24237 +f.out ea035e24 22461 +ftest.c fe6ae5f0 4736 +getround.c ee95ed1 2502 +makefile f714a641 5634 +pfLqtestnos ffb9723 99 +pftest.c ea314d7f 3452 +pftestQ.out 198434fd 830 +pftestx.out 1ccea5dd 788 +pftestLq.out 1691dbfc 845 +pftestnos ecbc9be6 101 +rtestnos f94bcdf6 336 +strtoIdSI.c 7bfb88b 49 +strtoIddSI.c 72e8852 50 +strtodISI.c ed08b740 49 +strtodt.c f1aa53af 3374 +strtopddSI.c 13e7138d 50 +strtorddSI.c f7e4b1d5 50 +testnos fb521644 498 +testnos1 7e16229 294 +testnos3 f5ae7ef3 14403 +x.ou0 1426698f 25576 +x.ou1 e196c6c1 34824 +xL.ou0 f85f5eb6 26576 +xL.ou1 1550d69c 37429 +xLtest.c f1964154 5556 +xQtest.c efbe29be 1912 +xtest.c 1b76bf93 5541 diff -Nru mlton-20130715/runtime/gdtoa/test/xtest.c mlton-20210117+dfsg/runtime/gdtoa/test/xtest.c --- mlton-20130715/runtime/gdtoa/test/xtest.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/test/xtest.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,190 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998-2001 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +/* Test program for g_xfmt, strtoIx, strtopx, and strtorx. + * + * Inputs (on stdin): + * r rounding_mode + * n ndig + * number + * #hex0 hex1 hex2 hex3 hex4 + * + * rounding_mode values: + * 0 = toward zero + * 1 = nearest + * 2 = toward +Infinity + * 3 = toward -Infinity + * + * where number is a decimal floating-point number, + * hex0 is a string of <= 4 Hex digits for the most significant + * half-word of the number, hex1 is a similar string for the next + * half-word, etc., and ndig is a parameters to g_xfmt. + */ + +#include "gdtoa.h" +#include +#include +#include + + extern int getround ANSI((int,char*)); + + static char ibuf[2048], obuf[2048], obuf1[2048]; + +#undef _0 +#undef _1 + +/* one or the other of IEEE_MC68k or IEEE_8087 should be #defined */ + +#ifdef IEEE_MC68k +#define _0 0 +#define _1 1 +#define _2 2 +#define _3 3 +#define _4 4 +#endif +#ifdef IEEE_8087 +#define _0 4 +#define _1 3 +#define _2 2 +#define _3 1 +#define _4 0 +#endif + + int +main(Void) +{ + char *s, *se, *se1; + int i, dItry, ndig = 0, nik, nike, r = 1; + union { long double d; UShort bits[5]; } u, v[2]; + + while((s = fgets(ibuf, sizeof(ibuf), stdin))) { + while(*s <= ' ') + if (!*s++) + continue; + dItry = 0; + switch(*s) { + case 'r': + r = getround(r, s); + continue; + case 'n': + i = s[1]; + if (i <= ' ' || (i >= '0' && i <= '9')) { + ndig = atoi(s+1); + continue; + } + break; /* nan? */ + case '#': + sscanf(s+1, "%hx %hx %hx %hx %hx", &u.bits[_0], + &u.bits[_1], &u.bits[_2], &u.bits[_3], + &u.bits[_4]); + printf("\nInput: %s", ibuf); + printf(" --> f = #%x %x %x %x %x\n", u.bits[_0], + u.bits[_1], u.bits[_2], u.bits[_3], u.bits[_4]); + i = 0; + goto fmt_test; + } + dItry = 1; + printf("\nInput: %s", ibuf); + i = strtorx(ibuf, &se, r, u.bits); + if (r == 1 && (i != strtopx(ibuf, &se1, v[0].bits) || se1 != se + || memcmp(u.bits, v[0].bits, 10))) + printf("***strtox and strtorx disagree!!\n:"); + printf("\nstrtox consumes %d bytes and returns %d\n", + (int)(se-ibuf), i); + printf("with bits = #%x %x %x %x %x\n", + u.bits[_0], u.bits[_1], u.bits[_2], + u.bits[_3], u.bits[_4]); + if (sizeof(long double) == 12) + printf("printf(\"%%.21Lg\") gives %.21Lg\n", u.d); + fmt_test: + se = g_xfmt(obuf, u.bits, ndig, sizeof(obuf)); + printf("g_xfmt(%d) gives %d bytes: \"%s\"\n\n", + ndig, (int)(se-obuf), se ? obuf : ""); + se1 = g_xfmt_p(obuf1, u.bits, ndig, sizeof(obuf1), 0); + if (se1 - obuf1 != se - obuf || strcmp(obuf, obuf1)) + printf("Botch: g_xfmt_p gives \"%s\" rather than \"%s\"\n", + obuf1, obuf); + if (!dItry) + continue; + printf("strtoIx returns %d,", + strtoIx(ibuf, &se, v[0].bits, v[1].bits)); + printf(" consuming %d bytes.\n", (int)(se-ibuf)); + if (!memcmp(v[0].bits, v[1].bits, 10)) { + if (!memcmp(u.bits, v[0].bits, 10)) + printf("fI[0] == fI[1] == strtox\n"); + else { + printf("fI[0] == fI[1] = #%x %x %x %x %x\n", + v[0].bits[_0], v[0].bits[_1], + v[0].bits[_2], v[0].bits[_3], + v[0].bits[_4]); + if (sizeof(long double) == 12) + printf("= %.21Lg\n", v[0].d); + } + } + else { + printf("fI[0] = #%x %x %x %x %x\n", + v[0].bits[_0], v[0].bits[_1], + v[0].bits[_2], v[0].bits[_3], + v[0].bits[_4]); + if (sizeof(long double) == 12) + printf("= %.21Lg\n", v[0].d); + printf("fI[1] = #%x %x %x %x %x\n", + v[1].bits[_0], v[1].bits[_1], + v[1].bits[_2], v[1].bits[_3], + v[1].bits[_4]); + if (sizeof(long double) == 12) + printf("= %.21Lg\n", v[1].d); + if (!memcmp(v[0].bits, u.bits, 10)) + printf("fI[0] == strtox\n"); + else if (!memcmp(v[1].bits, u.bits, 10)) + printf("fI[1] == strtox\n"); + else + printf("**** Both differ from strtod ****\n"); + } + printf("\n"); + switch(i & STRTOG_Retmask) { + case STRTOG_Infinite: + for(nik = 0; nik < 6; ++nik) { + se1 = g_xfmt_p(obuf1, u.bits, ndig, sizeof(obuf1), nik); + printf("g_xfmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + break; + case STRTOG_NaN: + case STRTOG_NaNbits: + for(i = 0; i < 3; ++i) + for(nik = 6*i, nike = nik + 3; nik < nike; ++nik) { + se1 = g_xfmt_p(obuf1, u.bits, ndig, sizeof(obuf1), nik); + printf("g_xfmt_p(...,%d): \"%s\"\n", nik, obuf1); + } + } + } + return 0; + } diff -Nru mlton-20130715/runtime/gdtoa/ulp.c mlton-20210117+dfsg/runtime/gdtoa/ulp.c --- mlton-20130715/runtime/gdtoa/ulp.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/ulp.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,70 @@ +/**************************************************************** + +The author of this software is David M. Gay. + +Copyright (C) 1998, 1999 by Lucent Technologies +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that the copyright notice and this +permission notice and warranty disclaimer appear in supporting +documentation, and that the name of Lucent or any of its entities +not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +****************************************************************/ + +/* Please send bug reports to David M. Gay (dmg at acm dot org, + * with " at " changed at "@" and " dot " changed to "."). */ + +#include "gdtoa/gdtoaimp.h" + + double +ulp +#ifdef KR_headers + (x) U *x; +#else + (U *x) +#endif +{ + Long L; + U a; + + L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1; +#ifndef Sudden_Underflow + if (L > 0) { +#endif +#ifdef IBM + L |= Exp_msk1 >> 4; +#endif + word0(&a) = L; + word1(&a) = 0; +#ifndef Sudden_Underflow + } + else { + L = -L >> Exp_shift; + if (L < Exp_shift) { + word0(&a) = 0x80000 >> L; + word1(&a) = 0; + } + else { + word0(&a) = 0; + L -= Exp_shift; + word1(&a) = L >= 31 ? 1 : 1 << (31 - L); + } + } +#endif + return dval(&a); + } diff -Nru mlton-20130715/runtime/gdtoa/xsum0.out mlton-20210117+dfsg/runtime/gdtoa/xsum0.out --- mlton-20130715/runtime/gdtoa/xsum0.out 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa/xsum0.out 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,58 @@ +README fbd27a99 17749 +arithchk.c 4bb1e54 4064 +dmisc.c e0d5f990 4773 +dtoa.c f59614cc 18235 +g_Qfmt.c ce0dd69 2945 +g_Qfmt_p.c fb5c0391 3352 +g__fmt.c 1ce54774 4638 +g_ddfmt.c cb78a82 4286 +g_ddfmt_p.c e8060288 4890 +g_dfmt.c ebdfd6b1 2648 +g_dfmt_p.c 32b3862 3061 +g_ffmt.c f037fcc2 2529 +g_ffmt_p.c 7edb123 2844 +g_xLfmt.c eee688e 2792 +g_xLfmt_p.c e4f82595 3145 +g_xfmt.c 7a908f5 2896 +g_xfmt_p.c 1907a7a5 3349 +gdtoa.c 15f30219 17420 +gdtoa.h eaadc6a8 5359 +gdtoa_fltrnds.h 1aaf5112 421 +gdtoaimp.h 131b5d0d 21889 +gethex.c e16371ae 7360 +gmisc.c 1859d016 2084 +hd_init.c f561fe9c 2525 +hexnan.c e337dab 3636 +makefile 1d70a257 3551 +misc.c 1d181bfd 16141 +printf.c 15c97ab 158 +printf.c0 f8fda84b 29819 +qnan.c f8e9e8cf 3547 +smisc.c 1d9fbad 3727 +stdio1.h b6acbbe 3058 +strtoIQ.c f3272d6f 2013 +strtoId.c fabd9105 2005 +strtoIdd.c 11248808 2193 +strtoIf.c 16750d29 1949 +strtoIg.c a0bcf2 3720 +strtoIx.c e7af77b4 2034 +strtoIxL.c a83e84a 2005 +strtod.c 6a63adb 23026 +strtodI.c 1e8708d3 4018 +strtodg.c 189daf00 21924 +strtodnrp.c 1489d0a1 2552 +strtof.c efc8e192 2200 +strtopQ.c e8127161 2729 +strtopd.c e17050bd 1765 +strtopdd.c e7851577 4668 +strtopf.c e8c661a1 2169 +strtopx.c f4cd73b2 2811 +strtopxL.c 1fe9ea0f 2547 +strtorQ.c 125fffcb 2968 +strtord.c f943330 2558 +strtordd.c 9cf5b6b 5210 +strtorf.c 1d26a04f 2459 +strtorx.c 4055fd4 3058 +strtorxL.c fa548382 2794 +sum.c 2bcf893 2518 +ulp.c edb56c0b 1866 diff -Nru mlton-20130715/runtime/gdtoa.hide-private-fns.patch mlton-20210117+dfsg/runtime/gdtoa.hide-private-fns.patch --- mlton-20130715/runtime/gdtoa.hide-private-fns.patch 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa.hide-private-fns.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -diff -P -C 2 -r gdtoa/gdtoa.h gdtoa-new/gdtoa.h -*** gdtoa/gdtoa.h 2013-06-20 10:17:15.000000000 -0400 ---- gdtoa-new/gdtoa.h 2013-06-20 10:18:07.000000000 -0400 -*************** -*** 35,38 **** ---- 35,39 ---- - #include "arith.h" - #include /* for size_t */ -+ #include "../export.h" - - #ifndef Long -diff -P -C 2 -r gdtoa/gdtoaimp.h gdtoa-new/gdtoaimp.h -*** gdtoa/gdtoaimp.h 2013-06-20 10:17:15.000000000 -0400 ---- gdtoa-new/gdtoaimp.h 2013-06-20 10:18:36.000000000 -0400 -*************** -*** 535,587 **** - #define ulp ulp_D2A - -! extern char *add_nanbits ANSI((char*, size_t, ULong*, int)); -! extern char *dtoa_result; -! extern CONST double bigtens[], tens[], tinytens[]; -! extern unsigned char hexdig[]; -! extern const char *InfName[6], *NanName[3]; - -! extern Bigint *Balloc ANSI((int)); -! extern void Bfree ANSI((Bigint*)); -! extern void ULtof ANSI((ULong*, ULong*, Long, int)); -! extern void ULtod ANSI((ULong*, ULong*, Long, int)); -! extern void ULtodd ANSI((ULong*, ULong*, Long, int)); -! extern void ULtoQ ANSI((ULong*, ULong*, Long, int)); -! extern void ULtox ANSI((UShort*, ULong*, Long, int)); -! extern void ULtoxL ANSI((ULong*, ULong*, Long, int)); -! extern ULong any_on ANSI((Bigint*, int)); -! extern double b2d ANSI((Bigint*, int*)); -! extern int cmp ANSI((Bigint*, Bigint*)); -! extern void copybits ANSI((ULong*, int, Bigint*)); -! extern Bigint *d2b ANSI((double, int*, int*)); -! extern void decrement ANSI((Bigint*)); -! extern Bigint *diff ANSI((Bigint*, Bigint*)); -! extern char *dtoa ANSI((double d, int mode, int ndigits, - int *decpt, int *sign, char **rve)); -! extern char *g__fmt ANSI((char*, char*, char*, int, ULong, size_t)); -! extern int gethex ANSI((CONST char**, FPI*, Long*, Bigint**, int)); -! /* extern void hexdig_init ANSI((Void)); */ -! extern int hexnan ANSI((CONST char**, FPI*, ULong*)); -! extern int hi0bits_D2A ANSI((ULong)); -! extern Bigint *i2b ANSI((int)); -! extern Bigint *increment ANSI((Bigint*)); -! extern int lo0bits ANSI((ULong*)); -! extern Bigint *lshift ANSI((Bigint*, int)); -! extern int match ANSI((CONST char**, char*)); -! extern Bigint *mult ANSI((Bigint*, Bigint*)); -! extern Bigint *multadd ANSI((Bigint*, int, int)); -! extern char *nrv_alloc ANSI((char*, char **, int)); -! extern Bigint *pow5mult ANSI((Bigint*, int)); -! extern int quorem ANSI((Bigint*, Bigint*)); -! extern double ratio ANSI((Bigint*, Bigint*)); -! extern void rshift ANSI((Bigint*, int)); -! extern char *rv_alloc ANSI((int)); -! extern Bigint *s2b ANSI((CONST char*, int, int, ULong, int)); -! extern Bigint *set_ones ANSI((Bigint*, int)); -! extern char *strcp ANSI((char*, const char*)); -! extern int strtoIg ANSI((CONST char*, char**, FPI*, Long*, Bigint**, int*)); -! extern double strtod ANSI((const char *s00, char **se)); -! extern Bigint *sum ANSI((Bigint*, Bigint*)); -! extern int trailz ANSI((Bigint*)); -! extern double ulp ANSI((U*)); - - #ifdef __cplusplus ---- 535,587 ---- - #define ulp ulp_D2A - -! PRIVATE extern char *add_nanbits ANSI((char*, size_t, ULong*, int)); -! PRIVATE extern char *dtoa_result; -! PRIVATE extern CONST double bigtens[], tens[], tinytens[]; -! PRIVATE extern unsigned char hexdig[]; -! PRIVATE extern const char *InfName[6], *NanName[3]; - -! PRIVATE extern Bigint *Balloc ANSI((int)); -! PRIVATE extern void Bfree ANSI((Bigint*)); -! PRIVATE extern void ULtof ANSI((ULong*, ULong*, Long, int)); -! PRIVATE extern void ULtod ANSI((ULong*, ULong*, Long, int)); -! PRIVATE extern void ULtodd ANSI((ULong*, ULong*, Long, int)); -! PRIVATE extern void ULtoQ ANSI((ULong*, ULong*, Long, int)); -! PRIVATE extern void ULtox ANSI((UShort*, ULong*, Long, int)); -! PRIVATE extern void ULtoxL ANSI((ULong*, ULong*, Long, int)); -! PRIVATE extern ULong any_on ANSI((Bigint*, int)); -! PRIVATE extern double b2d ANSI((Bigint*, int*)); -! PRIVATE extern int cmp ANSI((Bigint*, Bigint*)); -! PRIVATE extern void copybits ANSI((ULong*, int, Bigint*)); -! PRIVATE extern Bigint *d2b ANSI((double, int*, int*)); -! PRIVATE extern void decrement ANSI((Bigint*)); -! PRIVATE extern Bigint *diff ANSI((Bigint*, Bigint*)); -! PRIVATE extern char *dtoa ANSI((double d, int mode, int ndigits, - int *decpt, int *sign, char **rve)); -! PRIVATE extern char *g__fmt ANSI((char*, char*, char*, int, ULong, size_t)); -! PRIVATE extern int gethex ANSI((CONST char**, FPI*, Long*, Bigint**, int)); -! /* PRIVATE extern void hexdig_init ANSI((Void)); */ -! PRIVATE extern int hexnan ANSI((CONST char**, FPI*, ULong*)); -! PRIVATE extern int hi0bits_D2A ANSI((ULong)); -! PRIVATE extern Bigint *i2b ANSI((int)); -! PRIVATE extern Bigint *increment ANSI((Bigint*)); -! PRIVATE extern int lo0bits ANSI((ULong*)); -! PRIVATE extern Bigint *lshift ANSI((Bigint*, int)); -! PRIVATE extern int match ANSI((CONST char**, char*)); -! PRIVATE extern Bigint *mult ANSI((Bigint*, Bigint*)); -! PRIVATE extern Bigint *multadd ANSI((Bigint*, int, int)); -! PRIVATE extern char *nrv_alloc ANSI((char*, char **, int)); -! PRIVATE extern Bigint *pow5mult ANSI((Bigint*, int)); -! PRIVATE extern int quorem ANSI((Bigint*, Bigint*)); -! PRIVATE extern double ratio ANSI((Bigint*, Bigint*)); -! PRIVATE extern void rshift ANSI((Bigint*, int)); -! PRIVATE extern char *rv_alloc ANSI((int)); -! PRIVATE extern Bigint *s2b ANSI((CONST char*, int, int, ULong, int)); -! PRIVATE extern Bigint *set_ones ANSI((Bigint*, int)); -! PRIVATE extern char *strcp ANSI((char*, const char*)); -! PRIVATE extern int strtoIg ANSI((CONST char*, char**, FPI*, Long*, Bigint**, int*)); -! PRIVATE extern double strtod ANSI((const char *s00, char **se)); -! PRIVATE extern Bigint *sum ANSI((Bigint*, Bigint*)); -! PRIVATE extern int trailz ANSI((Bigint*)); -! PRIVATE extern double ulp ANSI((U*)); - - #ifdef __cplusplus diff -Nru mlton-20130715/runtime/gdtoa.hide-public-fns.patch mlton-20210117+dfsg/runtime/gdtoa.hide-public-fns.patch --- mlton-20130715/runtime/gdtoa.hide-public-fns.patch 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa.hide-public-fns.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -diff -P -C 2 -r gdtoa/gdtoa.h gdtoa-new/gdtoa.h -*** gdtoa/gdtoa.h 2013-06-20 10:20:00.000000000 -0400 ---- gdtoa-new/gdtoa.h 2013-06-20 10:20:28.000000000 -0400 -*************** -*** 106,151 **** - #endif - -! extern char* gdtoa__dtoa ANSI((double d, int mode, int ndigits, int *decpt, - int *sign, char **rve)); -! extern char* gdtoa__gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp, - int mode, int ndigits, int *decpt, char **rve)); -! extern void gdtoa__freedtoa ANSI((char*)); -! extern float gdtoa__strtof ANSI((CONST char *, char **)); -! extern double gdtoa__strtod ANSI((CONST char *, char **)); -! extern int gdtoa__strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*)); - -! extern char* gdtoa__g_ddfmt ANSI((char*, double*, int, size_t)); -! extern char* gdtoa__g_ddfmt_p ANSI((char*, double*, int, size_t, int)); -! extern char* gdtoa__g_dfmt ANSI((char*, double*, int, size_t)); -! extern char* gdtoa__g_dfmt_p ANSI((char*, double*, int, size_t, int)); -! extern char* gdtoa__g_ffmt ANSI((char*, float*, int, size_t)); -! extern char* gdtoa__g_ffmt_p ANSI((char*, float*, int, size_t, int)); -! extern char* gdtoa__g_Qfmt ANSI((char*, void*, int, size_t)); -! extern char* gdtoa__g_Qfmt_p ANSI((char*, void*, int, size_t, int)); -! extern char* gdtoa__g_xfmt ANSI((char*, void*, int, size_t)); -! extern char* gdtoa__g_xfmt_p ANSI((char*, void*, int, size_t, int)); -! extern char* gdtoa__g_xLfmt ANSI((char*, void*, int, size_t)); -! extern char* gdtoa__g_xLfmt_p ANSI((char*, void*, int, size_t, int)); - -! extern int gdtoa__strtoId ANSI((CONST char*, char**, double*, double*)); -! extern int gdtoa__strtoIdd ANSI((CONST char*, char**, double*, double*)); -! extern int gdtoa__strtoIf ANSI((CONST char*, char**, float*, float*)); -! extern int gdtoa__strtoIQ ANSI((CONST char*, char**, void*, void*)); -! extern int gdtoa__strtoIx ANSI((CONST char*, char**, void*, void*)); -! extern int gdtoa__strtoIxL ANSI((CONST char*, char**, void*, void*)); -! extern int gdtoa__strtord ANSI((CONST char*, char**, int, double*)); -! extern int gdtoa__strtordd ANSI((CONST char*, char**, int, double*)); -! extern int gdtoa__strtorf ANSI((CONST char*, char**, int, float*)); -! extern int gdtoa__strtorQ ANSI((CONST char*, char**, int, void*)); -! extern int gdtoa__strtorx ANSI((CONST char*, char**, int, void*)); -! extern int gdtoa__strtorxL ANSI((CONST char*, char**, int, void*)); - #if 1 -! extern int gdtoa__strtodI ANSI((CONST char*, char**, double*)); -! extern int gdtoa__strtopd ANSI((CONST char*, char**, double*)); -! extern int gdtoa__strtopdd ANSI((CONST char*, char**, double*)); -! extern int gdtoa__strtopf ANSI((CONST char*, char**, float*)); -! extern int gdtoa__strtopQ ANSI((CONST char*, char**, void*)); -! extern int gdtoa__strtopx ANSI((CONST char*, char**, void*)); -! extern int gdtoa__strtopxL ANSI((CONST char*, char**, void*)); - #else - #define gdtoa__strtopd(s,se,x) gdtoa__strtord(s,se,1,x) ---- 106,151 ---- - #endif - -! PRIVATE extern char* gdtoa__dtoa ANSI((double d, int mode, int ndigits, int *decpt, - int *sign, char **rve)); -! PRIVATE extern char* gdtoa__gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp, - int mode, int ndigits, int *decpt, char **rve)); -! PRIVATE extern void gdtoa__freedtoa ANSI((char*)); -! PRIVATE extern float gdtoa__strtof ANSI((CONST char *, char **)); -! PRIVATE extern double gdtoa__strtod ANSI((CONST char *, char **)); -! PRIVATE extern int gdtoa__strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*)); - -! PRIVATE extern char* gdtoa__g_ddfmt ANSI((char*, double*, int, size_t)); -! PRIVATE extern char* gdtoa__g_ddfmt_p ANSI((char*, double*, int, size_t, int)); -! PRIVATE extern char* gdtoa__g_dfmt ANSI((char*, double*, int, size_t)); -! PRIVATE extern char* gdtoa__g_dfmt_p ANSI((char*, double*, int, size_t, int)); -! PRIVATE extern char* gdtoa__g_ffmt ANSI((char*, float*, int, size_t)); -! PRIVATE extern char* gdtoa__g_ffmt_p ANSI((char*, float*, int, size_t, int)); -! PRIVATE extern char* gdtoa__g_Qfmt ANSI((char*, void*, int, size_t)); -! PRIVATE extern char* gdtoa__g_Qfmt_p ANSI((char*, void*, int, size_t, int)); -! PRIVATE extern char* gdtoa__g_xfmt ANSI((char*, void*, int, size_t)); -! PRIVATE extern char* gdtoa__g_xfmt_p ANSI((char*, void*, int, size_t, int)); -! PRIVATE extern char* gdtoa__g_xLfmt ANSI((char*, void*, int, size_t)); -! PRIVATE extern char* gdtoa__g_xLfmt_p ANSI((char*, void*, int, size_t, int)); - -! PRIVATE extern int gdtoa__strtoId ANSI((CONST char*, char**, double*, double*)); -! PRIVATE extern int gdtoa__strtoIdd ANSI((CONST char*, char**, double*, double*)); -! PRIVATE extern int gdtoa__strtoIf ANSI((CONST char*, char**, float*, float*)); -! PRIVATE extern int gdtoa__strtoIQ ANSI((CONST char*, char**, void*, void*)); -! PRIVATE extern int gdtoa__strtoIx ANSI((CONST char*, char**, void*, void*)); -! PRIVATE extern int gdtoa__strtoIxL ANSI((CONST char*, char**, void*, void*)); -! PRIVATE extern int gdtoa__strtord ANSI((CONST char*, char**, int, double*)); -! PRIVATE extern int gdtoa__strtordd ANSI((CONST char*, char**, int, double*)); -! PRIVATE extern int gdtoa__strtorf ANSI((CONST char*, char**, int, float*)); -! PRIVATE extern int gdtoa__strtorQ ANSI((CONST char*, char**, int, void*)); -! PRIVATE extern int gdtoa__strtorx ANSI((CONST char*, char**, int, void*)); -! PRIVATE extern int gdtoa__strtorxL ANSI((CONST char*, char**, int, void*)); - #if 1 -! PRIVATE extern int gdtoa__strtodI ANSI((CONST char*, char**, double*)); -! PRIVATE extern int gdtoa__strtopd ANSI((CONST char*, char**, double*)); -! PRIVATE extern int gdtoa__strtopdd ANSI((CONST char*, char**, double*)); -! PRIVATE extern int gdtoa__strtopf ANSI((CONST char*, char**, float*)); -! PRIVATE extern int gdtoa__strtopQ ANSI((CONST char*, char**, void*)); -! PRIVATE extern int gdtoa__strtopx ANSI((CONST char*, char**, void*)); -! PRIVATE extern int gdtoa__strtopxL ANSI((CONST char*, char**, void*)); - #else - #define gdtoa__strtopd(s,se,x) gdtoa__strtord(s,se,1,x) diff -Nru mlton-20130715/runtime/gdtoa.may_alias-unions.patch mlton-20210117+dfsg/runtime/gdtoa.may_alias-unions.patch --- mlton-20130715/runtime/gdtoa.may_alias-unions.patch 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa.may_alias-unions.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -diff -P -C 2 -r gdtoa/arithchk.c gdtoa-new/arithchk.c -*** gdtoa/arithchk.c 2005-01-05 13:05:47.000000000 -0500 ---- gdtoa-new/arithchk.c 2013-06-20 10:51:38.000000000 -0400 -*************** -*** 47,51 **** - double d; - long L[2]; -! } u; - struct { - double d; ---- 47,51 ---- - double d; - long L[2]; -! } __attribute__((__may_alias__)) u; - struct { - double d; -*************** -*** 74,78 **** - double d; - int L[2]; -! } u; - struct { - double d; ---- 74,78 ---- - double d; - int L[2]; -! } __attribute__((__may_alias__)) u; - struct { - double d; -*************** -*** 103,107 **** - double d; - long L; -! } u; - long Cray1; - ---- 103,107 ---- - double d; - long L; -! } __attribute__((__may_alias__)) u; - long Cray1; - -diff -P -C 2 -r gdtoa/gdtoaimp.h gdtoa-new/gdtoaimp.h -*** gdtoa/gdtoaimp.h 2012-12-23 20:34:38.000000000 -0500 ---- gdtoa-new/gdtoaimp.h 2013-06-20 10:51:00.000000000 -0400 -*************** -*** 275,279 **** - #endif - -! typedef union { double d; ULong L[2]; } U; - - #ifdef IEEE_8087 ---- 275,279 ---- - #endif - -! typedef union { double d; ULong L[2]; } __attribute__((__may_alias__)) U; - - #ifdef IEEE_8087 -diff -P -C 2 -r gdtoa/qnan.c gdtoa-new/qnan.c -*** gdtoa/qnan.c 2012-12-21 14:26:58.000000000 -0500 ---- gdtoa-new/qnan.c 2013-06-20 10:51:21.000000000 -0400 -*************** -*** 82,86 **** - long double D; - #endif -! } U; - U a, b, c; - int i; ---- 82,86 ---- - long double D; - #endif -! } __attribute__((__may_alias__)) U; - U a, b, c; - int i; -diff -P -C 2 -r gdtoa/strtodnrp.c gdtoa-new/strtodnrp.c -*** gdtoa/strtodnrp.c 2005-01-12 01:47:38.000000000 -0500 ---- gdtoa-new/strtodnrp.c 2013-06-20 10:51:15.000000000 -0400 -*************** -*** 49,53 **** - Long exp; - int k; -! union { ULong L[2]; double d; } u; - - k = strtodg(s, sp, &fpi, &exp, bits); ---- 49,53 ---- - Long exp; - int k; -! union { ULong L[2]; double d; } __attribute__((__may_alias__)) u; - - k = strtodg(s, sp, &fpi, &exp, bits); -diff -P -C 2 -r gdtoa/strtof.c gdtoa-new/strtof.c -*** gdtoa/strtof.c 2009-03-16 00:57:44.000000000 -0400 ---- gdtoa-new/strtof.c 2013-06-20 10:51:11.000000000 -0400 -*************** -*** 43,47 **** - Long exp; - int k; -! union { ULong L[1]; float f; } u; - #ifdef Honor_FLT_ROUNDS - #include "gdtoa_fltrnds.h" ---- 43,47 ---- - Long exp; - int k; -! union { ULong L[1]; float f; } __attribute__((__may_alias__)) u; - #ifdef Honor_FLT_ROUNDS - #include "gdtoa_fltrnds.h" -diff -P -C 2 -r gdtoa/strtopdd.c gdtoa-new/strtopdd.c -*** gdtoa/strtopdd.c 2009-03-16 01:32:44.000000000 -0400 ---- gdtoa-new/strtopdd.c 2013-06-20 10:51:06.000000000 -0400 -*************** -*** 50,54 **** - double d[2]; - ULong L[4]; -! } U; - U *u; - #ifdef Honor_FLT_ROUNDS ---- 50,54 ---- - double d[2]; - ULong L[4]; -! } __attribute__((__may_alias__)) U; - U *u; - #ifdef Honor_FLT_ROUNDS diff -Nru mlton-20130715/runtime/gdtoa.rename-public-fns.patch mlton-20210117+dfsg/runtime/gdtoa.rename-public-fns.patch --- mlton-20130715/runtime/gdtoa.rename-public-fns.patch 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gdtoa.rename-public-fns.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,1312 +0,0 @@ -diff -P -C 2 -r gdtoa/dmisc.c gdtoa-new/dmisc.c -*** gdtoa/dmisc.c 2004-04-11 23:39:50.000000000 -0400 ---- gdtoa-new/dmisc.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 84,90 **** - void - #ifdef KR_headers -! freedtoa(s) char *s; - #else -! freedtoa(char *s) - #endif - { ---- 84,90 ---- - void - #ifdef KR_headers -! gdtoa__freedtoa(s) char *s; - #else -! gdtoa__freedtoa(char *s) - #endif - { -diff -P -C 2 -r gdtoa/dtoa.c gdtoa-new/dtoa.c -*** gdtoa/dtoa.c 2010-09-15 10:59:11.000000000 -0400 ---- gdtoa-new/dtoa.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 74,78 **** - - char * -! dtoa - #ifdef KR_headers - (d0, mode, ndigits, decpt, sign, rve) ---- 74,78 ---- - - char * -! gdtoa__dtoa - #ifdef KR_headers - (d0, mode, ndigits, decpt, sign, rve) -*************** -*** 147,151 **** - #ifndef MULTIPLE_THREADS - if (dtoa_result) { -! freedtoa(dtoa_result); - dtoa_result = 0; - } ---- 147,151 ---- - #ifndef MULTIPLE_THREADS - if (dtoa_result) { -! gdtoa__freedtoa(dtoa_result); - dtoa_result = 0; - } -diff -P -C 2 -r gdtoa/g_Qfmt.c gdtoa-new/g_Qfmt.c -*** gdtoa/g_Qfmt.c 2011-11-02 11:46:29.000000000 -0400 ---- gdtoa-new/g_Qfmt.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 52,58 **** - char* - #ifdef KR_headers -! g_Qfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; size_t bufsize; - #else -! g_Qfmt(char *buf, void *V, int ndig, size_t bufsize) - #endif - { ---- 52,58 ---- - char* - #ifdef KR_headers -! gdtoa__g_Qfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; size_t bufsize; - #else -! gdtoa__g_Qfmt(char *buf, void *V, int ndig, size_t bufsize) - #endif - { -*************** -*** 115,119 **** - mode = 0; - } -! s = gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } ---- 115,119 ---- - mode = 0; - } -! s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } -diff -P -C 2 -r gdtoa/g_Qfmt_p.c gdtoa-new/g_Qfmt_p.c -*** gdtoa/g_Qfmt_p.c 2012-12-23 20:31:33.000000000 -0500 ---- gdtoa-new/g_Qfmt_p.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 54,60 **** - char* - #ifdef KR_headers -! g_Qfmt_p(buf, V, ndig, bufsize, nik) char *buf; char *V; int ndig; size_t bufsize; int nik; - #else -! g_Qfmt_p(char *buf, void *V, int ndig, size_t bufsize, int nik) - #endif - { ---- 54,60 ---- - char* - #ifdef KR_headers -! gdtoa__g_Qfmt_p(buf, V, ndig, bufsize, nik) char *buf; char *V; int ndig; size_t bufsize; int nik; - #else -! gdtoa__g_Qfmt_p(char *buf, void *V, int ndig, size_t bufsize, int nik) - #endif - { -*************** -*** 128,132 **** - mode = 0; - } -! s = gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } ---- 128,132 ---- - mode = 0; - } -! s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } -diff -P -C 2 -r gdtoa/g__fmt.c gdtoa-new/g__fmt.c -*** gdtoa/g__fmt.c 2012-12-23 20:41:26.000000000 -0500 ---- gdtoa-new/g__fmt.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 167,171 **** - } - ret: -! freedtoa(s0); - return b; - } ---- 167,171 ---- - } - ret: -! gdtoa__freedtoa(s0); - return b; - } -diff -P -C 2 -r gdtoa/g_ddfmt.c gdtoa-new/g_ddfmt.c -*** gdtoa/g_ddfmt.c 2011-11-02 11:46:29.000000000 -0400 ---- gdtoa-new/g_ddfmt.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 34,40 **** - char * - #ifdef KR_headers -! g_ddfmt(buf, dd0, ndig, bufsize) char *buf; double *dd0; int ndig; size_t bufsize; - #else -! g_ddfmt(char *buf, double *dd0, int ndig, size_t bufsize) - #endif - { ---- 34,40 ---- - char * - #ifdef KR_headers -! gdtoa__g_ddfmt(buf, dd0, ndig, bufsize) char *buf; double *dd0; int ndig; size_t bufsize; - #else -! gdtoa__g_ddfmt(char *buf, double *dd0, int ndig, size_t bufsize) - #endif - { -*************** -*** 165,169 **** - fpi.int_max = Int_max; - i = STRTOG_Normal; -! s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se); - b = g__fmt(buf, s, se, decpt, z->sign, bufsize); - Bfree(z); ---- 165,169 ---- - fpi.int_max = Int_max; - i = STRTOG_Normal; -! s = gdtoa__gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se); - b = g__fmt(buf, s, se, decpt, z->sign, bufsize); - Bfree(z); -diff -P -C 2 -r gdtoa/g_ddfmt_p.c gdtoa-new/g_ddfmt_p.c -*** gdtoa/g_ddfmt_p.c 2012-12-23 20:45:12.000000000 -0500 ---- gdtoa-new/g_ddfmt_p.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 36,42 **** - char * - #ifdef KR_headers -! g_ddfmt_p(buf, dd0, ndig, bufsize, nik) char *buf; double *dd0; int ndig; size_t bufsize; int nik; - #else -! g_ddfmt_p(char *buf, double *dd0, int ndig, size_t bufsize, int nik) - #endif - { ---- 36,42 ---- - char * - #ifdef KR_headers -! gdtoa__g_ddfmt_p(buf, dd0, ndig, bufsize, nik) char *buf; double *dd0; int ndig; size_t bufsize; int nik; - #else -! gdtoa__g_ddfmt_p(char *buf, double *dd0, int ndig, size_t bufsize, int nik) - #endif - { -*************** -*** 185,189 **** - fpi.int_max = Int_max; - i = STRTOG_Normal; -! s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se); - b = g__fmt(buf, s, se, decpt, z->sign, bufsize); - Bfree(z); ---- 185,189 ---- - fpi.int_max = Int_max; - i = STRTOG_Normal; -! s = gdtoa__gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se); - b = g__fmt(buf, s, se, decpt, z->sign, bufsize); - Bfree(z); -diff -P -C 2 -r gdtoa/g_dfmt.c gdtoa-new/g_dfmt.c -*** gdtoa/g_dfmt.c 2011-11-02 11:46:29.000000000 -0400 ---- gdtoa-new/g_dfmt.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 34,40 **** - char* - #ifdef KR_headers -! g_dfmt(buf, d, ndig, bufsize) char *buf; double *d; int ndig; size_t bufsize; - #else -! g_dfmt(char *buf, double *d, int ndig, size_t bufsize) - #endif - { ---- 34,40 ---- - char* - #ifdef KR_headers -! gdtoa__g_dfmt(buf, d, ndig, bufsize) char *buf; double *d; int ndig; size_t bufsize; - #else -! gdtoa__g_dfmt(char *buf, double *d, int ndig, size_t bufsize) - #endif - { -*************** -*** 91,95 **** - if (sign) - i = STRTOG_Normal | STRTOG_Neg; -! s = gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } ---- 91,95 ---- - if (sign) - i = STRTOG_Normal | STRTOG_Neg; -! s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } -diff -P -C 2 -r gdtoa/g_dfmt_p.c gdtoa-new/g_dfmt_p.c -*** gdtoa/g_dfmt_p.c 2012-12-23 20:45:12.000000000 -0500 ---- gdtoa-new/g_dfmt_p.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 36,42 **** - char* - #ifdef KR_headers -! g_dfmt_p(buf, d, ndig, bufsize, nik) char *buf; double *d; int ndig; size_t bufsize; int nik; - #else -! g_dfmt_p(char *buf, double *d, int ndig, size_t bufsize, int nik) - #endif - { ---- 36,42 ---- - char* - #ifdef KR_headers -! gdtoa__g_dfmt_p(buf, d, ndig, bufsize, nik) char *buf; double *d; int ndig; size_t bufsize; int nik; - #else -! gdtoa__g_dfmt_p(char *buf, double *d, int ndig, size_t bufsize, int nik) - #endif - { -*************** -*** 106,110 **** - if (sign) - i = STRTOG_Normal | STRTOG_Neg; -! s = gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } ---- 106,110 ---- - if (sign) - i = STRTOG_Normal | STRTOG_Neg; -! s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } -diff -P -C 2 -r gdtoa/g_ffmt.c gdtoa-new/g_ffmt.c -*** gdtoa/g_ffmt.c 2011-11-02 11:46:29.000000000 -0400 ---- gdtoa-new/g_ffmt.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 34,40 **** - char* - #ifdef KR_headers -! g_ffmt(buf, f, ndig, bufsize) char *buf; float *f; int ndig; size_t bufsize; - #else -! g_ffmt(char *buf, float *f, int ndig, size_t bufsize) - #endif - { ---- 34,40 ---- - char* - #ifdef KR_headers -! gdtoa__g_ffmt(buf, f, ndig, bufsize) char *buf; float *f; int ndig; size_t bufsize; - #else -! gdtoa__g_ffmt(char *buf, float *f, int ndig, size_t bufsize) - #endif - { -*************** -*** 89,93 **** - } - i = STRTOG_Normal; -! s = gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } ---- 89,93 ---- - } - i = STRTOG_Normal; -! s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } -diff -P -C 2 -r gdtoa/g_ffmt_p.c gdtoa-new/g_ffmt_p.c -*** gdtoa/g_ffmt_p.c 2012-12-23 20:45:12.000000000 -0500 ---- gdtoa-new/g_ffmt_p.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 36,42 **** - char* - #ifdef KR_headers -! g_ffmt_p(buf, f, ndig, bufsize, nik) char *buf; float *f; int ndig; size_t bufsize; int nik; - #else -! g_ffmt_p(char *buf, float *f, int ndig, size_t bufsize, int nik) - #endif - { ---- 36,42 ---- - char* - #ifdef KR_headers -! gdtoa__g_ffmt_p(buf, f, ndig, bufsize, nik) char *buf; float *f; int ndig; size_t bufsize; int nik; - #else -! gdtoa__g_ffmt_p(char *buf, float *f, int ndig, size_t bufsize, int nik) - #endif - { -*************** -*** 100,104 **** - } - i = STRTOG_Normal; -! s = gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } ---- 100,104 ---- - } - i = STRTOG_Normal; -! s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } -diff -P -C 2 -r gdtoa/g_xLfmt.c gdtoa-new/g_xLfmt.c -*** gdtoa/g_xLfmt.c 2011-11-02 11:46:29.000000000 -0400 ---- gdtoa-new/g_xLfmt.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 50,56 **** - char* - #ifdef KR_headers -! g_xLfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; size_t bufsize; - #else -! g_xLfmt(char *buf, void *V, int ndig, size_t bufsize) - #endif - { ---- 50,56 ---- - char* - #ifdef KR_headers -! gdtoa__g_xLfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; size_t bufsize; - #else -! gdtoa__g_xLfmt(char *buf, void *V, int ndig, size_t bufsize) - #endif - { -*************** -*** 109,113 **** - mode = 0; - } -! s = gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } ---- 109,113 ---- - mode = 0; - } -! s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } -diff -P -C 2 -r gdtoa/g_xLfmt_p.c gdtoa-new/g_xLfmt_p.c -*** gdtoa/g_xLfmt_p.c 2012-12-23 20:45:12.000000000 -0500 ---- gdtoa-new/g_xLfmt_p.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 52,58 **** - char* - #ifdef KR_headers -! g_xLfmt_p(buf, V, ndig, bufsize, nik) char *buf; char *V; int ndig; size_t bufsize; int nik; - #else -! g_xLfmt_p(char *buf, void *V, int ndig, size_t bufsize, int nik) - #endif - { ---- 52,58 ---- - char* - #ifdef KR_headers -! gdtoa__g_xLfmt_p(buf, V, ndig, bufsize, nik) char *buf; char *V; int ndig; size_t bufsize; int nik; - #else -! gdtoa__g_xLfmt_p(char *buf, void *V, int ndig, size_t bufsize, int nik) - #endif - { -*************** -*** 121,125 **** - mode = 0; - } -! s = gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } ---- 121,125 ---- - mode = 0; - } -! s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } -diff -P -C 2 -r gdtoa/g_xfmt.c gdtoa-new/g_xfmt.c -*** gdtoa/g_xfmt.c 2012-12-20 20:02:55.000000000 -0500 ---- gdtoa-new/g_xfmt.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 54,60 **** - char* - #ifdef KR_headers -! g_xfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; size_t bufsize; - #else -! g_xfmt(char *buf, void *V, int ndig, size_t bufsize) - #endif - { ---- 54,60 ---- - char* - #ifdef KR_headers -! gdtoa__g_xfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; size_t bufsize; - #else -! gdtoa__g_xfmt(char *buf, void *V, int ndig, size_t bufsize) - #endif - { -*************** -*** 115,119 **** - mode = 0; - } -! s = gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } ---- 115,119 ---- - mode = 0; - } -! s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } -diff -P -C 2 -r gdtoa/g_xfmt_p.c gdtoa-new/g_xfmt_p.c -*** gdtoa/g_xfmt_p.c 2012-12-23 20:45:12.000000000 -0500 ---- gdtoa-new/g_xfmt_p.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 56,62 **** - char* - #ifdef KR_headers -! g_xfmt_p(buf, V, ndig, bufsize, nik) char *buf; char *V; int ndig; size_t bufsize; int nik; - #else -! g_xfmt_p(char *buf, void *V, int ndig, size_t bufsize, int nik) - #endif - { ---- 56,62 ---- - char* - #ifdef KR_headers -! gdtoa__g_xfmt_p(buf, V, ndig, bufsize, nik) char *buf; char *V; int ndig; size_t bufsize; int nik; - #else -! gdtoa__g_xfmt_p(char *buf, void *V, int ndig, size_t bufsize, int nik) - #endif - { -*************** -*** 131,135 **** - mode = 0; - } -! s = gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } ---- 131,135 ---- - mode = 0; - } -! s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se); - return g__fmt(buf, s, se, decpt, sign, bufsize); - } -diff -P -C 2 -r gdtoa/gdtoa.c gdtoa-new/gdtoa.c -*** gdtoa/gdtoa.c 2011-11-02 11:46:29.000000000 -0400 ---- gdtoa-new/gdtoa.c 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 110,114 **** - - char * -! gdtoa - #ifdef KR_headers - (fpi, be, bits, kindp, mode, ndigits, decpt, rve) ---- 110,114 ---- - - char * -! gdtoa__gdtoa - #ifdef KR_headers - (fpi, be, bits, kindp, mode, ndigits, decpt, rve) -*************** -*** 165,169 **** - #ifndef MULTIPLE_THREADS - if (dtoa_result) { -! freedtoa(dtoa_result); - dtoa_result = 0; - } ---- 165,169 ---- - #ifndef MULTIPLE_THREADS - if (dtoa_result) { -! gdtoa__freedtoa(dtoa_result); - dtoa_result = 0; - } -diff -P -C 2 -r gdtoa/gdtoa.h gdtoa-new/gdtoa.h -*** gdtoa/gdtoa.h 2012-12-20 12:24:26.000000000 -0500 ---- gdtoa-new/gdtoa.h 2013-06-20 10:54:02.000000000 -0400 -*************** -*** 105,157 **** - #endif - -! extern char* dtoa ANSI((double d, int mode, int ndigits, int *decpt, - int *sign, char **rve)); -! extern char* gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp, - int mode, int ndigits, int *decpt, char **rve)); -! extern void freedtoa ANSI((char*)); -! extern float strtof ANSI((CONST char *, char **)); -! extern double strtod ANSI((CONST char *, char **)); -! extern int strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*)); - -! extern char* g_ddfmt ANSI((char*, double*, int, size_t)); -! extern char* g_ddfmt_p ANSI((char*, double*, int, size_t, int)); -! extern char* g_dfmt ANSI((char*, double*, int, size_t)); -! extern char* g_dfmt_p ANSI((char*, double*, int, size_t, int)); -! extern char* g_ffmt ANSI((char*, float*, int, size_t)); -! extern char* g_ffmt_p ANSI((char*, float*, int, size_t, int)); -! extern char* g_Qfmt ANSI((char*, void*, int, size_t)); -! extern char* g_Qfmt_p ANSI((char*, void*, int, size_t, int)); -! extern char* g_xfmt ANSI((char*, void*, int, size_t)); -! extern char* g_xfmt_p ANSI((char*, void*, int, size_t, int)); -! extern char* g_xLfmt ANSI((char*, void*, int, size_t)); -! extern char* g_xLfmt_p ANSI((char*, void*, int, size_t, int)); - -! extern int strtoId ANSI((CONST char*, char**, double*, double*)); -! extern int strtoIdd ANSI((CONST char*, char**, double*, double*)); -! extern int strtoIf ANSI((CONST char*, char**, float*, float*)); -! extern int strtoIQ ANSI((CONST char*, char**, void*, void*)); -! extern int strtoIx ANSI((CONST char*, char**, void*, void*)); -! extern int strtoIxL ANSI((CONST char*, char**, void*, void*)); -! extern int strtord ANSI((CONST char*, char**, int, double*)); -! extern int strtordd ANSI((CONST char*, char**, int, double*)); -! extern int strtorf ANSI((CONST char*, char**, int, float*)); -! extern int strtorQ ANSI((CONST char*, char**, int, void*)); -! extern int strtorx ANSI((CONST char*, char**, int, void*)); -! extern int strtorxL ANSI((CONST char*, char**, int, void*)); - #if 1 -! extern int strtodI ANSI((CONST char*, char**, double*)); -! extern int strtopd ANSI((CONST char*, char**, double*)); -! extern int strtopdd ANSI((CONST char*, char**, double*)); -! extern int strtopf ANSI((CONST char*, char**, float*)); -! extern int strtopQ ANSI((CONST char*, char**, void*)); -! extern int strtopx ANSI((CONST char*, char**, void*)); -! extern int strtopxL ANSI((CONST char*, char**, void*)); - #else -! #define strtopd(s,se,x) strtord(s,se,1,x) -! #define strtopdd(s,se,x) strtordd(s,se,1,x) -! #define strtopf(s,se,x) strtorf(s,se,1,x) -! #define strtopQ(s,se,x) strtorQ(s,se,1,x) -! #define strtopx(s,se,x) strtorx(s,se,1,x) -! #define strtopxL(s,se,x) strtorxL(s,se,1,x) - #endif - ---- 105,157 ---- - #endif - -! extern char* gdtoa__dtoa ANSI((double d, int mode, int ndigits, int *decpt, - int *sign, char **rve)); -! extern char* gdtoa__gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp, - int mode, int ndigits, int *decpt, char **rve)); -! extern void gdtoa__freedtoa ANSI((char*)); -! extern float gdtoa__strtof ANSI((CONST char *, char **)); -! extern double gdtoa__strtod ANSI((CONST char *, char **)); -! extern int gdtoa__strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*)); - -! extern char* gdtoa__g_ddfmt ANSI((char*, double*, int, size_t)); -! extern char* gdtoa__g_ddfmt_p ANSI((char*, double*, int, size_t, int)); -! extern char* gdtoa__g_dfmt ANSI((char*, double*, int, size_t)); -! extern char* gdtoa__g_dfmt_p ANSI((char*, double*, int, size_t, int)); -! extern char* gdtoa__g_ffmt ANSI((char*, float*, int, size_t)); -! extern char* gdtoa__g_ffmt_p ANSI((char*, float*, int, size_t, int)); -! extern char* gdtoa__g_Qfmt ANSI((char*, void*, int, size_t)); -! extern char* gdtoa__g_Qfmt_p ANSI((char*, void*, int, size_t, int)); -! extern char* gdtoa__g_xfmt ANSI((char*, void*, int, size_t)); -! extern char* gdtoa__g_xfmt_p ANSI((char*, void*, int, size_t, int)); -! extern char* gdtoa__g_xLfmt ANSI((char*, void*, int, size_t)); -! extern char* gdtoa__g_xLfmt_p ANSI((char*, void*, int, size_t, int)); - -! extern int gdtoa__strtoId ANSI((CONST char*, char**, double*, double*)); -! extern int gdtoa__strtoIdd ANSI((CONST char*, char**, double*, double*)); -! extern int gdtoa__strtoIf ANSI((CONST char*, char**, float*, float*)); -! extern int gdtoa__strtoIQ ANSI((CONST char*, char**, void*, void*)); -! extern int gdtoa__strtoIx ANSI((CONST char*, char**, void*, void*)); -! extern int gdtoa__strtoIxL ANSI((CONST char*, char**, void*, void*)); -! extern int gdtoa__strtord ANSI((CONST char*, char**, int, double*)); -! extern int gdtoa__strtordd ANSI((CONST char*, char**, int, double*)); -! extern int gdtoa__strtorf ANSI((CONST char*, char**, int, float*)); -! extern int gdtoa__strtorQ ANSI((CONST char*, char**, int, void*)); -! extern int gdtoa__strtorx ANSI((CONST char*, char**, int, void*)); -! extern int gdtoa__strtorxL ANSI((CONST char*, char**, int, void*)); - #if 1 -! extern int gdtoa__strtodI ANSI((CONST char*, char**, double*)); -! extern int gdtoa__strtopd ANSI((CONST char*, char**, double*)); -! extern int gdtoa__strtopdd ANSI((CONST char*, char**, double*)); -! extern int gdtoa__strtopf ANSI((CONST char*, char**, float*)); -! extern int gdtoa__strtopQ ANSI((CONST char*, char**, void*)); -! extern int gdtoa__strtopx ANSI((CONST char*, char**, void*)); -! extern int gdtoa__strtopxL ANSI((CONST char*, char**, void*)); - #else -! #define gdtoa__strtopd(s,se,x) gdtoa__strtord(s,se,1,x) -! #define gdtoa__strtopdd(s,se,x) gdtoa__strtordd(s,se,1,x) -! #define gdtoa__strtopf(s,se,x) gdtoa__strtorf(s,se,1,x) -! #define gdtoa__strtopQ(s,se,x) gdtoa__strtorQ(s,se,1,x) -! #define gdtoa__strtopx(s,se,x) gdtoa__strtorx(s,se,1,x) -! #define gdtoa__strtopxL(s,se,x) gdtoa__strtorxL(s,se,1,x) - #endif - -diff -P -C 2 -r gdtoa/gdtoaimp.h gdtoa-new/gdtoaimp.h -*** gdtoa/gdtoaimp.h 2013-06-20 10:52:22.000000000 -0400 ---- gdtoa-new/gdtoaimp.h 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 507,510 **** ---- 507,511 ---- - #define gethex gethex_D2A - #define hexdig hexdig_D2A -+ #define hexdig_init hexdig_init_D2A - #define hexnan hexnan_D2A - #define hi0bits(x) hi0bits_D2A((ULong)(x)) -*************** -*** 526,529 **** ---- 527,531 ---- - #define strcp strcp_D2A - #define strtoIg strtoIg_D2A -+ #define strtod strtod_D2A - #define sum sum_D2A - #define tens tens_D2A -*************** -*** 558,562 **** - extern char *g__fmt ANSI((char*, char*, char*, int, ULong, size_t)); - extern int gethex ANSI((CONST char**, FPI*, Long*, Bigint**, int)); -! extern void hexdig_init_D2A(Void); - extern int hexnan ANSI((CONST char**, FPI*, ULong*)); - extern int hi0bits_D2A ANSI((ULong)); ---- 560,564 ---- - extern char *g__fmt ANSI((char*, char*, char*, int, ULong, size_t)); - extern int gethex ANSI((CONST char**, FPI*, Long*, Bigint**, int)); -! /* extern void hexdig_init ANSI((Void)); */ - extern int hexnan ANSI((CONST char**, FPI*, ULong*)); - extern int hi0bits_D2A ANSI((ULong)); -diff -P -C 2 -r gdtoa/gethex.c gdtoa-new/gethex.c -*** gdtoa/gethex.c 2012-12-20 11:45:01.000000000 -0500 ---- gdtoa-new/gethex.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 67,71 **** - #endif - -! /**** if (!hexdig['0']) hexdig_init_D2A(); ****/ - *bp = 0; - havedig = 0; ---- 67,71 ---- - #endif - -! /**** if (!hexdig['0']) hexdig_init(); ****/ - *bp = 0; - havedig = 0; -diff -P -C 2 -r gdtoa/hd_init.c gdtoa-new/hd_init.c -*** gdtoa/hd_init.c 2012-12-20 16:20:25.000000000 -0500 ---- gdtoa-new/hd_init.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 48,52 **** - - void -! hexdig_init_D2A(Void) /* Use of hexdig_init omitted 20121220 to avoid a */ - /* race condition when multiple threads are used. */ - { ---- 48,52 ---- - - void -! hexdig_init(Void) /* Use of hexdig_init omitted 20121220 to avoid a */ - /* race condition when multiple threads are used. */ - { -diff -P -C 2 -r gdtoa/hexnan.c gdtoa-new/hexnan.c -*** gdtoa/hexnan.c 2012-12-20 22:29:15.000000000 -0500 ---- gdtoa-new/hexnan.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 62,66 **** - int havedig, hd0, i, nbits; - -! /**** if (!hexdig['0']) hexdig_init_D2A(); ****/ - nbits = fpi->nbits; - x = x0 + (nbits >> kshift); ---- 62,66 ---- - int havedig, hd0, i, nbits; - -! /**** if (!hexdig['0']) hexdig_init(); ****/ - nbits = fpi->nbits; - x = x0 + (nbits >> kshift); -diff -P -C 2 -r gdtoa/strtoIQ.c gdtoa-new/strtoIQ.c -*** gdtoa/strtoIQ.c 2004-04-11 23:39:50.000000000 -0400 ---- gdtoa-new/strtoIQ.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 34,40 **** - int - #ifdef KR_headers -! strtoIQ(s, sp, a, b) CONST char *s; char **sp; void *a; void *b; - #else -! strtoIQ(CONST char *s, char **sp, void *a, void *b) - #endif - { ---- 34,40 ---- - int - #ifdef KR_headers -! gdtoa__strtoIQ(s, sp, a, b) CONST char *s; char **sp; void *a; void *b; - #else -! gdtoa__strtoIQ(CONST char *s, char **sp, void *a, void *b) - #endif - { -diff -P -C 2 -r gdtoa/strtoId.c gdtoa-new/strtoId.c -*** gdtoa/strtoId.c 2004-04-11 23:39:50.000000000 -0400 ---- gdtoa-new/strtoId.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 34,40 **** - int - #ifdef KR_headers -! strtoId(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1; - #else -! strtoId(CONST char *s, char **sp, double *f0, double *f1) - #endif - { ---- 34,40 ---- - int - #ifdef KR_headers -! gdtoa__strtoId(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1; - #else -! gdtoa__strtoId(CONST char *s, char **sp, double *f0, double *f1) - #endif - { -diff -P -C 2 -r gdtoa/strtoIdd.c gdtoa-new/strtoIdd.c -*** gdtoa/strtoIdd.c 2004-04-11 23:39:50.000000000 -0400 ---- gdtoa-new/strtoIdd.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 34,40 **** - int - #ifdef KR_headers -! strtoIdd(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1; - #else -! strtoIdd(CONST char *s, char **sp, double *f0, double *f1) - #endif - { ---- 34,40 ---- - int - #ifdef KR_headers -! gdtoa__strtoIdd(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1; - #else -! gdtoa__strtoIdd(CONST char *s, char **sp, double *f0, double *f1) - #endif - { -diff -P -C 2 -r gdtoa/strtoIf.c gdtoa-new/strtoIf.c -*** gdtoa/strtoIf.c 2004-04-11 23:39:50.000000000 -0400 ---- gdtoa-new/strtoIf.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 34,40 **** - int - #ifdef KR_headers -! strtoIf(s, sp, f0, f1) CONST char *s; char **sp; float *f0, *f1; - #else -! strtoIf(CONST char *s, char **sp, float *f0, float *f1) - #endif - { ---- 34,40 ---- - int - #ifdef KR_headers -! gdtoa__strtoIf(s, sp, f0, f1) CONST char *s; char **sp; float *f0, *f1; - #else -! gdtoa__strtoIf(CONST char *s, char **sp, float *f0, float *f1) - #endif - { -diff -P -C 2 -r gdtoa/strtoIg.c gdtoa-new/strtoIg.c -*** gdtoa/strtoIg.c 2009-03-16 00:55:05.000000000 -0400 ---- gdtoa-new/strtoIg.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 45,49 **** - - b = *B; -! rv = strtodg(s00, se, fpi, exp, b->x); - if (!(rv & STRTOG_Inexact)) { - B[1] = 0; ---- 45,49 ---- - - b = *B; -! rv = gdtoa__strtodg(s00, se, fpi, exp, b->x); - if (!(rv & STRTOG_Inexact)) { - B[1] = 0; -diff -P -C 2 -r gdtoa/strtoIx.c gdtoa-new/strtoIx.c -*** gdtoa/strtoIx.c 2004-04-11 23:39:50.000000000 -0400 ---- gdtoa-new/strtoIx.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 34,40 **** - int - #ifdef KR_headers -! strtoIx(s, sp, a, b) CONST char *s; char **sp; void *a; void *b; - #else -! strtoIx(CONST char *s, char **sp, void *a, void *b) - #endif - { ---- 34,40 ---- - int - #ifdef KR_headers -! gdtoa__strtoIx(s, sp, a, b) CONST char *s; char **sp; void *a; void *b; - #else -! gdtoa__strtoIx(CONST char *s, char **sp, void *a, void *b) - #endif - { -diff -P -C 2 -r gdtoa/strtoIxL.c gdtoa-new/strtoIxL.c -*** gdtoa/strtoIxL.c 2004-04-11 23:39:50.000000000 -0400 ---- gdtoa-new/strtoIxL.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 34,40 **** - int - #ifdef KR_headers -! strtoIxL(s, sp, a, b) CONST char *s; char **sp; void *a; void *b; - #else -! strtoIxL(CONST char *s, char **sp, void *a, void *b) - #endif - { ---- 34,40 ---- - int - #ifdef KR_headers -! gdtoa__strtoIxL(s, sp, a, b) CONST char *s; char **sp; void *a; void *b; - #else -! gdtoa__strtoIxL(CONST char *s, char **sp, void *a, void *b) - #endif - { -diff -P -C 2 -r gdtoa/strtod.c gdtoa-new/strtod.c -*** gdtoa/strtod.c 2011-03-04 13:15:00.000000000 -0500 ---- gdtoa-new/strtod.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 81,85 **** - - double -! strtod - #ifdef KR_headers - (s00, se) CONST char *s00; char **se; ---- 81,85 ---- - - double -! gdtoa__strtod - #ifdef KR_headers - (s00, se) CONST char *s00; char **se; -diff -P -C 2 -r gdtoa/strtodI.c gdtoa-new/strtodI.c -*** gdtoa/strtodI.c 2009-10-21 19:49:32.000000000 -0400 ---- gdtoa-new/strtodI.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 51,57 **** - int - #ifdef KR_headers -! strtodI(s, sp, dd) CONST char *s; char **sp; double *dd; - #else -! strtodI(CONST char *s, char **sp, double *dd) - #endif - { ---- 51,57 ---- - int - #ifdef KR_headers -! gdtoa__strtodI(s, sp, dd) CONST char *s; char **sp; double *dd; - #else -! gdtoa__strtodI(CONST char *s, char **sp, double *dd) - #endif - { -*************** -*** 62,66 **** - U *u; - -! k = strtodg(s, sp, &fpi, &exp, bits); - u = (U*)dd; - sign = k & STRTOG_Neg ? 0x80000000L : 0; ---- 62,66 ---- - U *u; - -! k = gdtoa__strtodg(s, sp, &fpi, &exp, bits); - u = (U*)dd; - sign = k & STRTOG_Neg ? 0x80000000L : 0; -diff -P -C 2 -r gdtoa/strtodg.c gdtoa-new/strtodg.c -*** gdtoa/strtodg.c 2009-04-11 23:11:05.000000000 -0400 ---- gdtoa-new/strtodg.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 314,318 **** - - int -! strtodg - #ifdef KR_headers - (s00, se, fpi, exp, bits) ---- 314,318 ---- - - int -! gdtoa__strtodg - #ifdef KR_headers - (s00, se, fpi, exp, bits) -diff -P -C 2 -r gdtoa/strtof.c gdtoa-new/strtof.c -*** gdtoa/strtof.c 2013-06-20 10:52:22.000000000 -0400 ---- gdtoa-new/strtof.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 34,40 **** - float - #ifdef KR_headers -! strtof(s, sp) CONST char *s; char **sp; - #else -! strtof(CONST char *s, char **sp) - #endif - { ---- 34,40 ---- - float - #ifdef KR_headers -! gdtoa__strtof(s, sp) CONST char *s; char **sp; - #else -! gdtoa__strtof(CONST char *s, char **sp) - #endif - { -*************** -*** 50,54 **** - #endif - -! k = strtodg(s, sp, fpi, &exp, bits); - switch(k & STRTOG_Retmask) { - case STRTOG_NoNumber: ---- 50,54 ---- - #endif - -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - switch(k & STRTOG_Retmask) { - case STRTOG_NoNumber: -diff -P -C 2 -r gdtoa/strtopQ.c gdtoa-new/strtopQ.c -*** gdtoa/strtopQ.c 2012-12-21 19:25:30.000000000 -0500 ---- gdtoa-new/strtopQ.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 55,61 **** - int - #ifdef KR_headers -! strtopQ(s, sp, V) CONST char *s; char **sp; void *V; - #else -! strtopQ(CONST char *s, char **sp, void *V) - #endif - { ---- 55,61 ---- - int - #ifdef KR_headers -! gdtoa__strtopQ(s, sp, V) CONST char *s; char **sp; void *V; - #else -! gdtoa__strtopQ(CONST char *s, char **sp, void *V) - #endif - { -*************** -*** 71,75 **** - #endif - -! k = strtodg(s, sp, fpi, &exp, bits); - switch(k & STRTOG_Retmask) { - case STRTOG_NoNumber: ---- 71,75 ---- - #endif - -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - switch(k & STRTOG_Retmask) { - case STRTOG_NoNumber: -diff -P -C 2 -r gdtoa/strtopd.c gdtoa-new/strtopd.c -*** gdtoa/strtopd.c 2008-09-09 00:44:56.000000000 -0400 ---- gdtoa-new/strtopd.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 34,40 **** - int - #ifdef KR_headers -! strtopd(s, sp, d) char *s; char **sp; double *d; - #else -! strtopd(CONST char *s, char **sp, double *d) - #endif - { ---- 34,40 ---- - int - #ifdef KR_headers -! gdtoa__strtopd(s, sp, d) char *s; char **sp; double *d; - #else -! gdtoa__strtopd(CONST char *s, char **sp, double *d) - #endif - { -*************** -*** 49,53 **** - #endif - -! k = strtodg(s, sp, fpi, &exp, bits); - ULtod((ULong*)d, bits, exp, k); - return k; ---- 49,53 ---- - #endif - -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - ULtod((ULong*)d, bits, exp, k); - return k; -diff -P -C 2 -r gdtoa/strtopdd.c gdtoa-new/strtopdd.c -*** gdtoa/strtopdd.c 2013-06-20 10:52:22.000000000 -0400 ---- gdtoa-new/strtopdd.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 34,40 **** - int - #ifdef KR_headers -! strtopdd(s, sp, dd) CONST char *s; char **sp; double *dd; - #else -! strtopdd(CONST char *s, char **sp, double *dd) - #endif - { ---- 34,40 ---- - int - #ifdef KR_headers -! gdtoa__strtopdd(s, sp, dd) CONST char *s; char **sp; double *dd; - #else -! gdtoa__strtopdd(CONST char *s, char **sp, double *dd) - #endif - { -*************** -*** 58,62 **** - #endif - -! rv = strtodg(s, sp, fpi, &exp, bits); - u = (U*)dd; - switch(rv & STRTOG_Retmask) { ---- 58,62 ---- - #endif - -! rv = gdtoa__strtodg(s, sp, fpi, &exp, bits); - u = (U*)dd; - switch(rv & STRTOG_Retmask) { -diff -P -C 2 -r gdtoa/strtopf.c gdtoa-new/strtopf.c -*** gdtoa/strtopf.c 2009-03-16 01:30:33.000000000 -0400 ---- gdtoa-new/strtopf.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 34,40 **** - int - #ifdef KR_headers -! strtopf(s, sp, f) CONST char *s; char **sp; float *f; - #else -! strtopf(CONST char *s, char **sp, float *f) - #endif - { ---- 34,40 ---- - int - #ifdef KR_headers -! gdtoa__strtopf(s, sp, f) CONST char *s; char **sp; float *f; - #else -! gdtoa__strtopf(CONST char *s, char **sp, float *f) - #endif - { -*************** -*** 49,53 **** - #endif - -! k = strtodg(s, sp, fpi, &exp, bits); - L = (ULong*)f; - switch(k & STRTOG_Retmask) { ---- 49,53 ---- - #endif - -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - L = (ULong*)f; - switch(k & STRTOG_Retmask) { -diff -P -C 2 -r gdtoa/strtopx.c gdtoa-new/strtopx.c -*** gdtoa/strtopx.c 2012-12-21 19:28:56.000000000 -0500 ---- gdtoa-new/strtopx.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 56,62 **** - int - #ifdef KR_headers -! strtopx(s, sp, V) CONST char *s; char **sp; void *V; - #else -! strtopx(CONST char *s, char **sp, void *V) - #endif - { ---- 56,62 ---- - int - #ifdef KR_headers -! gdtoa__strtopx(s, sp, V) CONST char *s; char **sp; void *V; - #else -! gdtoa__strtopx(CONST char *s, char **sp, void *V) - #endif - { -*************** -*** 72,76 **** - #endif - -! k = strtodg(s, sp, fpi, &exp, bits); - switch(k & STRTOG_Retmask) { - case STRTOG_NoNumber: ---- 72,76 ---- - #endif - -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - switch(k & STRTOG_Retmask) { - case STRTOG_NoNumber: -diff -P -C 2 -r gdtoa/strtopxL.c gdtoa-new/strtopxL.c -*** gdtoa/strtopxL.c 2012-12-21 19:32:41.000000000 -0500 ---- gdtoa-new/strtopxL.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 52,58 **** - int - #ifdef KR_headers -! strtopxL(s, sp, V) CONST char *s; char **sp; void *V; - #else -! strtopxL(CONST char *s, char **sp, void *V) - #endif - { ---- 52,58 ---- - int - #ifdef KR_headers -! gdtoa__strtopxL(s, sp, V) CONST char *s; char **sp; void *V; - #else -! gdtoa__strtopxL(CONST char *s, char **sp, void *V) - #endif - { -*************** -*** 68,72 **** - #endif - -! k = strtodg(s, sp, fpi, &exp, bits); - switch(k & STRTOG_Retmask) { - case STRTOG_NoNumber: ---- 68,72 ---- - #endif - -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - switch(k & STRTOG_Retmask) { - case STRTOG_NoNumber: -diff -P -C 2 -r gdtoa/strtorQ.c gdtoa-new/strtorQ.c -*** gdtoa/strtorQ.c 2012-12-23 20:40:18.000000000 -0500 ---- gdtoa-new/strtorQ.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 97,103 **** - int - #ifdef KR_headers -! strtorQ(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L; - #else -! strtorQ(CONST char *s, char **sp, int rounding, void *L) - #endif - { ---- 97,103 ---- - int - #ifdef KR_headers -! gdtoa__strtorQ(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L; - #else -! gdtoa__strtorQ(CONST char *s, char **sp, int rounding, void *L) - #endif - { -*************** -*** 114,118 **** - fpi = &fpi1; - } -! k = strtodg(s, sp, fpi, &exp, bits); - ULtoQ((ULong*)L, bits, exp, k); - return k; ---- 114,118 ---- - fpi = &fpi1; - } -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - ULtoQ((ULong*)L, bits, exp, k); - return k; -diff -P -C 2 -r gdtoa/strtord.c gdtoa-new/strtord.c -*** gdtoa/strtord.c 2012-12-23 20:40:18.000000000 -0500 ---- gdtoa-new/strtord.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 73,79 **** - int - #ifdef KR_headers -! strtord(s, sp, rounding, d) CONST char *s; char **sp; int rounding; double *d; - #else -! strtord(CONST char *s, char **sp, int rounding, double *d) - #endif - { ---- 73,79 ---- - int - #ifdef KR_headers -! gdtoa__strtord(s, sp, rounding, d) CONST char *s; char **sp; int rounding; double *d; - #else -! gdtoa__strtord(CONST char *s, char **sp, int rounding, double *d) - #endif - { -*************** -*** 90,94 **** - fpi = &fpi1; - } -! k = strtodg(s, sp, fpi, &exp, bits); - ULtod((ULong*)d, bits, exp, k); - return k; ---- 90,94 ---- - fpi = &fpi1; - } -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - ULtod((ULong*)d, bits, exp, k); - return k; -diff -P -C 2 -r gdtoa/strtordd.c gdtoa-new/strtordd.c -*** gdtoa/strtordd.c 2012-12-21 18:12:22.000000000 -0500 ---- gdtoa-new/strtordd.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 176,182 **** - int - #ifdef KR_headers -! strtordd(s, sp, rounding, dd) CONST char *s; char **sp; int rounding; double *dd; - #else -! strtordd(CONST char *s, char **sp, int rounding, double *dd) - #endif - { ---- 176,182 ---- - int - #ifdef KR_headers -! gdtoa__strtordd(s, sp, rounding, dd) CONST char *s; char **sp; int rounding; double *dd; - #else -! gdtoa__strtordd(CONST char *s, char **sp, int rounding, double *dd) - #endif - { -*************** -*** 197,201 **** - fpi = &fpi1; - } -! k = strtodg(s, sp, fpi, &exp, bits); - ULtodd((ULong*)dd, bits, exp, k); - return k; ---- 197,201 ---- - fpi = &fpi1; - } -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - ULtodd((ULong*)dd, bits, exp, k); - return k; -diff -P -C 2 -r gdtoa/strtorf.c gdtoa-new/strtorf.c -*** gdtoa/strtorf.c 2012-12-23 20:40:18.000000000 -0500 ---- gdtoa-new/strtorf.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 69,75 **** - int - #ifdef KR_headers -! strtorf(s, sp, rounding, f) CONST char *s; char **sp; int rounding; float *f; - #else -! strtorf(CONST char *s, char **sp, int rounding, float *f) - #endif - { ---- 69,75 ---- - int - #ifdef KR_headers -! gdtoa__strtorf(s, sp, rounding, f) CONST char *s; char **sp; int rounding; float *f; - #else -! gdtoa__strtorf(CONST char *s, char **sp, int rounding, float *f) - #endif - { -*************** -*** 86,90 **** - fpi = &fpi1; - } -! k = strtodg(s, sp, fpi, &exp, bits); - ULtof((ULong*)f, bits, exp, k); - return k; ---- 86,90 ---- - fpi = &fpi1; - } -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - ULtof((ULong*)f, bits, exp, k); - return k; -diff -P -C 2 -r gdtoa/strtorx.c gdtoa-new/strtorx.c -*** gdtoa/strtorx.c 2012-12-23 20:41:26.000000000 -0500 ---- gdtoa-new/strtorx.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 100,106 **** - int - #ifdef KR_headers -! strtorx(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L; - #else -! strtorx(CONST char *s, char **sp, int rounding, void *L) - #endif - { ---- 100,106 ---- - int - #ifdef KR_headers -! gdtoa__strtorx(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L; - #else -! gdtoa__strtorx(CONST char *s, char **sp, int rounding, void *L) - #endif - { -*************** -*** 117,121 **** - fpi = &fpi1; - } -! k = strtodg(s, sp, fpi, &exp, bits); - ULtox((UShort*)L, bits, exp, k); - return k; ---- 117,121 ---- - fpi = &fpi1; - } -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - ULtox((UShort*)L, bits, exp, k); - return k; -diff -P -C 2 -r gdtoa/strtorxL.c gdtoa-new/strtorxL.c -*** gdtoa/strtorxL.c 2012-12-23 20:40:18.000000000 -0500 ---- gdtoa-new/strtorxL.c 2013-06-20 10:54:06.000000000 -0400 -*************** -*** 88,94 **** - int - #ifdef KR_headers -! strtorxL(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L; - #else -! strtorxL(CONST char *s, char **sp, int rounding, void *L) - #endif - { ---- 88,94 ---- - int - #ifdef KR_headers -! gdtoa__strtorxL(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L; - #else -! gdtoa__strtorxL(CONST char *s, char **sp, int rounding, void *L) - #endif - { -*************** -*** 105,109 **** - fpi = &fpi1; - } -! k = strtodg(s, sp, fpi, &exp, bits); - ULtoxL((ULong*)L, bits, exp, k); - return k; ---- 105,109 ---- - fpi = &fpi1; - } -! k = gdtoa__strtodg(s, sp, fpi, &exp, bits); - ULtoxL((ULong*)L, bits, exp, k); - return k; Binary files /tmp/tmpeijleaj1/J0IhGCp1bz/mlton-20130715/runtime/gdtoa.tgz and /tmp/tmpeijleaj1/Onfiehphu5/mlton-20210117+dfsg/runtime/gdtoa.tgz differ diff -Nru mlton-20130715/runtime/gen/basis-ffi.def mlton-20210117+dfsg/runtime/gen/basis-ffi.def --- mlton-20130715/runtime/gen/basis-ffi.def 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/basis-ffi.def 2021-12-28 17:19:36.000000000 +0000 @@ -1,44 +1,44 @@ CommandLine.argc = _symbol : C_Int.t CommandLine.argv = _symbol : C_StringArray.t CommandLine.commandName = _symbol : C_String.t -Cygwin.toFullWindowsPath = _import PRIVATE : NullString8.t -> C_String.t -Date.Tm.getHour = _import PRIVATE : unit -> C_Int.t -Date.Tm.getIsDst = _import PRIVATE : unit -> C_Int.t -Date.Tm.getMDay = _import PRIVATE : unit -> C_Int.t -Date.Tm.getMin = _import PRIVATE : unit -> C_Int.t -Date.Tm.getMon = _import PRIVATE : unit -> C_Int.t -Date.Tm.getSec = _import PRIVATE : unit -> C_Int.t -Date.Tm.getWDay = _import PRIVATE : unit -> C_Int.t -Date.Tm.getYDay = _import PRIVATE : unit -> C_Int.t -Date.Tm.getYear = _import PRIVATE : unit -> C_Int.t -Date.Tm.setHour = _import PRIVATE : C_Int.t -> unit -Date.Tm.setIsDst = _import PRIVATE : C_Int.t -> unit -Date.Tm.setMDay = _import PRIVATE : C_Int.t -> unit -Date.Tm.setMin = _import PRIVATE : C_Int.t -> unit -Date.Tm.setMon = _import PRIVATE : C_Int.t -> unit -Date.Tm.setSec = _import PRIVATE : C_Int.t -> unit -Date.Tm.setWDay = _import PRIVATE : C_Int.t -> unit -Date.Tm.setYDay = _import PRIVATE : C_Int.t -> unit -Date.Tm.setYear = _import PRIVATE : C_Int.t -> unit -Date.gmTime = _import PRIVATE : C_Time.t ref -> C_Int.t C_Errno.t -Date.localOffset = _import PRIVATE : unit -> C_Double.t -Date.localTime = _import PRIVATE : C_Time.t ref -> C_Int.t C_Errno.t -Date.mkTime = _import PRIVATE : unit -> C_Time.t C_Errno.t -Date.strfTime = _import PRIVATE : Char8.t array * C_Size.t * NullString8.t -> C_Size.t +Cygwin.toFullWindowsPath = _import : NullString8.t -> C_String.t +Date.Tm.getHour = _import : unit -> C_Int.t +Date.Tm.getIsDst = _import : unit -> C_Int.t +Date.Tm.getMDay = _import : unit -> C_Int.t +Date.Tm.getMin = _import : unit -> C_Int.t +Date.Tm.getMon = _import : unit -> C_Int.t +Date.Tm.getSec = _import : unit -> C_Int.t +Date.Tm.getWDay = _import : unit -> C_Int.t +Date.Tm.getYDay = _import : unit -> C_Int.t +Date.Tm.getYear = _import : unit -> C_Int.t +Date.Tm.setHour = _import : C_Int.t -> unit +Date.Tm.setIsDst = _import : C_Int.t -> unit +Date.Tm.setMDay = _import : C_Int.t -> unit +Date.Tm.setMin = _import : C_Int.t -> unit +Date.Tm.setMon = _import : C_Int.t -> unit +Date.Tm.setSec = _import : C_Int.t -> unit +Date.Tm.setWDay = _import : C_Int.t -> unit +Date.Tm.setYDay = _import : C_Int.t -> unit +Date.Tm.setYear = _import : C_Int.t -> unit +Date.gmTime = _import : C_Time.t ref -> C_Int.t C_Errno.t +Date.localOffset = _import : unit -> C_Double.t +Date.localTime = _import : C_Time.t ref -> C_Int.t C_Errno.t +Date.mkTime = _import : unit -> C_Time.t C_Errno.t +Date.strfTime = _import : Char8.t array * C_Size.t * NullString8.t -> C_Size.t IEEEReal.RoundingMode.FE_DOWNWARD = _const : C_Int.t IEEEReal.RoundingMode.FE_NOSUPPORT = _const : C_Int.t IEEEReal.RoundingMode.FE_TONEAREST = _const : C_Int.t IEEEReal.RoundingMode.FE_TOWARDZERO = _const : C_Int.t IEEEReal.RoundingMode.FE_UPWARD = _const : C_Int.t -IEEEReal.getRoundingMode = _import PRIVATE : unit -> C_Int.t -IEEEReal.setRoundingMode = _import PRIVATE : C_Int.t -> C_Int.t -MLton.bug = _import PRIVATE __attribute__((noreturn)) : String8.t -> unit +IEEEReal.getRoundingMode = _import : unit -> C_Int.t +IEEEReal.setRoundingMode = _import : C_Int.t -> C_Int.t +MLton.bug = _import __attribute__((noreturn)) : String8.t -> unit MLton.Itimer.PROF = _const : C_Int.t MLton.Itimer.REAL = _const : C_Int.t MLton.Itimer.VIRTUAL = _const : C_Int.t -MLton.Itimer.set = _import PRIVATE : C_Int.t * C_Time.t * C_SUSeconds.t * C_Time.t * C_SUSeconds.t -> C_Int.t C_Errno.t -MLton.Process.spawne = _import PRIVATE : NullString8.t * NullString8.t array * NullString8.t array -> C_PId.t C_Errno.t -MLton.Process.spawnp = _import PRIVATE : NullString8.t * NullString8.t array -> C_PId.t C_Errno.t +MLton.Itimer.set = _import : C_Int.t * C_Time.t * C_SUSeconds.t * C_Time.t * C_SUSeconds.t -> C_Int.t C_Errno.t +MLton.Process.spawne = _import : NullString8.t * NullString8.t array * NullString8.t array -> C_PId.t C_Errno.t +MLton.Process.spawnp = _import : NullString8.t * NullString8.t array -> C_PId.t C_Errno.t MLton.Rlimit.AS = _const : C_Int.t MLton.Rlimit.CORE = _const : C_Int.t MLton.Rlimit.CPU = _const : C_Int.t @@ -50,23 +50,23 @@ MLton.Rlimit.NPROC = _const : C_Int.t MLton.Rlimit.RSS = _const : C_Int.t MLton.Rlimit.STACK = _const : C_Int.t -MLton.Rlimit.get = _import PRIVATE : C_Int.t -> C_Int.t C_Errno.t -MLton.Rlimit.getHard = _import PRIVATE : unit -> C_RLim.t -MLton.Rlimit.getSoft = _import PRIVATE : unit -> C_RLim.t -MLton.Rlimit.set = _import PRIVATE : C_Int.t * C_RLim.t * C_RLim.t -> C_Int.t C_Errno.t -MLton.Rusage.children_stime_sec = _import PRIVATE : unit -> C_Time.t -MLton.Rusage.children_stime_usec = _import PRIVATE : unit -> C_SUSeconds.t -MLton.Rusage.children_utime_sec = _import PRIVATE : unit -> C_Time.t -MLton.Rusage.children_utime_usec = _import PRIVATE : unit -> C_SUSeconds.t -MLton.Rusage.gc_stime_sec = _import PRIVATE : unit -> C_Time.t -MLton.Rusage.gc_stime_usec = _import PRIVATE : unit -> C_SUSeconds.t -MLton.Rusage.gc_utime_sec = _import PRIVATE : unit -> C_Time.t -MLton.Rusage.gc_utime_usec = _import PRIVATE : unit -> C_SUSeconds.t -MLton.Rusage.getrusage = _import PRIVATE : unit -> unit -MLton.Rusage.self_stime_sec = _import PRIVATE : unit -> C_Time.t -MLton.Rusage.self_stime_usec = _import PRIVATE : unit -> C_SUSeconds.t -MLton.Rusage.self_utime_sec = _import PRIVATE : unit -> C_Time.t -MLton.Rusage.self_utime_usec = _import PRIVATE : unit -> C_SUSeconds.t +MLton.Rlimit.get = _import : C_Int.t -> C_Int.t C_Errno.t +MLton.Rlimit.getHard = _import : unit -> C_RLim.t +MLton.Rlimit.getSoft = _import : unit -> C_RLim.t +MLton.Rlimit.set = _import : C_Int.t * C_RLim.t * C_RLim.t -> C_Int.t C_Errno.t +MLton.Rusage.children_stime_sec = _import : unit -> C_Time.t +MLton.Rusage.children_stime_usec = _import : unit -> C_SUSeconds.t +MLton.Rusage.children_utime_sec = _import : unit -> C_Time.t +MLton.Rusage.children_utime_usec = _import : unit -> C_SUSeconds.t +MLton.Rusage.gc_stime_sec = _import : unit -> C_Time.t +MLton.Rusage.gc_stime_usec = _import : unit -> C_SUSeconds.t +MLton.Rusage.gc_utime_sec = _import : unit -> C_Time.t +MLton.Rusage.gc_utime_usec = _import : unit -> C_SUSeconds.t +MLton.Rusage.getrusage = _import : GCState.t -> unit +MLton.Rusage.self_stime_sec = _import : unit -> C_Time.t +MLton.Rusage.self_stime_usec = _import : unit -> C_SUSeconds.t +MLton.Rusage.self_utime_sec = _import : unit -> C_Time.t +MLton.Rusage.self_utime_usec = _import : unit -> C_SUSeconds.t MLton.Syslog.Facility.LOG_AUTH = _const : C_Int.t MLton.Syslog.Facility.LOG_CRON = _const : C_Int.t MLton.Syslog.Facility.LOG_DAEMON = _const : C_Int.t @@ -99,47 +99,47 @@ MLton.Syslog.Severity.LOG_INFO = _const : C_Int.t MLton.Syslog.Severity.LOG_NOTICE = _const : C_Int.t MLton.Syslog.Severity.LOG_WARNING = _const : C_Int.t -MLton.Syslog.closelog = _import PRIVATE : unit -> unit -MLton.Syslog.openlog = _import PRIVATE : NullString8.t * C_Int.t * C_Int.t -> unit -MLton.Syslog.syslog = _import PRIVATE : C_Int.t * NullString8.t -> unit -MinGW.getTempPath = _import PRIVATE : C_Size.t * Char8.t array -> C_Size.t -MinGW.setNonBlock = _import PRIVATE : C_Fd.t -> unit -MinGW.clearNonBlock = _import PRIVATE : C_Fd.t -> unit -Net.htonl = _import PRIVATE : Word32.t -> Word32.t -Net.htons = _import PRIVATE : Word16.t -> Word16.t -Net.ntohl = _import PRIVATE : Word32.t -> Word32.t -Net.ntohs = _import PRIVATE : Word16.t -> Word16.t +MLton.Syslog.closelog = _import : unit -> unit +MLton.Syslog.openlog = _import : NullString8.t * C_Int.t * C_Int.t -> unit +MLton.Syslog.syslog = _import : C_Int.t * NullString8.t -> unit +MinGW.getTempPath = _import : C_Size.t * Char8.t array -> C_Size.t +MinGW.setNonBlock = _import : C_Fd.t -> unit +MinGW.clearNonBlock = _import : C_Fd.t -> unit +Net.htonl = _import : Word32.t -> Word32.t +Net.htons = _import : Word16.t -> Word16.t +Net.ntohl = _import : Word32.t -> Word32.t +Net.ntohs = _import : Word16.t -> Word16.t NetHostDB.INADDR_ANY = _const : C_Int.t -NetHostDB.getByAddress = _import PRIVATE : Word8.t vector * C_Socklen.t -> C_Int.t -NetHostDB.getByName = _import PRIVATE : NullString8.t -> C_Int.t -NetHostDB.getEntryAddrType = _import PRIVATE : unit -> C_Int.t -NetHostDB.getEntryAddrsN = _import PRIVATE : C_Int.t * Word8.t array -> unit -NetHostDB.getEntryAddrsNum = _import PRIVATE : unit -> C_Int.t -NetHostDB.getEntryAliasesN = _import PRIVATE : C_Int.t -> C_String.t -NetHostDB.getEntryAliasesNum = _import PRIVATE : unit -> C_Int.t -NetHostDB.getEntryLength = _import PRIVATE : unit -> C_Int.t -NetHostDB.getEntryName = _import PRIVATE : unit -> C_String.t -NetHostDB.getHostName = _import PRIVATE : Char8.t array * C_Size.t -> C_Int.t C_Errno.t +NetHostDB.getByAddress = _import : Word8.t vector * C_Socklen.t -> C_Int.t +NetHostDB.getByName = _import : NullString8.t -> C_Int.t +NetHostDB.getEntryAddrType = _import : unit -> C_Int.t +NetHostDB.getEntryAddrsN = _import : C_Int.t * Word8.t array -> unit +NetHostDB.getEntryAddrsNum = _import : unit -> C_Int.t +NetHostDB.getEntryAliasesN = _import : C_Int.t -> C_String.t +NetHostDB.getEntryAliasesNum = _import : unit -> C_Int.t +NetHostDB.getEntryLength = _import : unit -> C_Int.t +NetHostDB.getEntryName = _import : unit -> C_String.t +NetHostDB.getHostName = _import : Char8.t array * C_Size.t -> C_Int.t C_Errno.t NetHostDB.inAddrSize = _const : C_Size.t -NetProtDB.getByName = _import PRIVATE : NullString8.t -> C_Int.t -NetProtDB.getByNumber = _import PRIVATE : C_Int.t -> C_Int.t -NetProtDB.getEntryAliasesN = _import PRIVATE : C_Int.t -> C_String.t -NetProtDB.getEntryAliasesNum = _import PRIVATE : unit -> C_Int.t -NetProtDB.getEntryName = _import PRIVATE : unit -> C_String.t -NetProtDB.getEntryProto = _import PRIVATE : unit -> C_Int.t -NetServDB.getByName = _import PRIVATE : NullString8.t * NullString8.t -> C_Int.t -NetServDB.getByNameNull = _import PRIVATE : NullString8.t -> C_Int.t -NetServDB.getByPort = _import PRIVATE : C_Int.t * NullString8.t -> C_Int.t -NetServDB.getByPortNull = _import PRIVATE : C_Int.t -> C_Int.t -NetServDB.getEntryAliasesN = _import PRIVATE : C_Int.t -> C_String.t -NetServDB.getEntryAliasesNum = _import PRIVATE : unit -> C_Int.t -NetServDB.getEntryName = _import PRIVATE : unit -> C_String.t -NetServDB.getEntryPort = _import PRIVATE : unit -> C_Int.t -NetServDB.getEntryProto = _import PRIVATE : unit -> C_String.t +NetProtDB.getByName = _import : NullString8.t -> C_Int.t +NetProtDB.getByNumber = _import : C_Int.t -> C_Int.t +NetProtDB.getEntryAliasesN = _import : C_Int.t -> C_String.t +NetProtDB.getEntryAliasesNum = _import : unit -> C_Int.t +NetProtDB.getEntryName = _import : unit -> C_String.t +NetProtDB.getEntryProto = _import : unit -> C_Int.t +NetServDB.getByName = _import : NullString8.t * NullString8.t -> C_Int.t +NetServDB.getByNameNull = _import : NullString8.t -> C_Int.t +NetServDB.getByPort = _import : C_Int.t * NullString8.t -> C_Int.t +NetServDB.getByPortNull = _import : C_Int.t -> C_Int.t +NetServDB.getEntryAliasesN = _import : C_Int.t -> C_String.t +NetServDB.getEntryAliasesNum = _import : unit -> C_Int.t +NetServDB.getEntryName = _import : unit -> C_String.t +NetServDB.getEntryPort = _import : unit -> C_Int.t +NetServDB.getEntryProto = _import : unit -> C_String.t OS.IO.POLLIN = _const : C_Short.t OS.IO.POLLOUT = _const : C_Short.t OS.IO.POLLPRI = _const : C_Short.t -OS.IO.poll = _import PRIVATE : C_Fd.t vector * C_Short.t vector * C_NFds.t * C_Int.t * C_Short.t array -> C_Int.t C_Errno.t +OS.IO.poll = _import : C_Fd.t vector * C_Short.t vector * C_NFds.t * C_Int.t * C_Short.t array -> C_Int.t C_Errno.t Posix.Error.E2BIG = _const : C_Int.t Posix.Error.EACCES = _const : C_Int.t Posix.Error.EADDRINUSE = _const : C_Int.t @@ -219,17 +219,17 @@ Posix.Error.ETXTBSY = _const : C_Int.t Posix.Error.EWOULDBLOCK = _const : C_Int.t Posix.Error.EXDEV = _const : C_Int.t -Posix.Error.clearErrno = _import PRIVATE : unit -> unit -Posix.Error.getErrno = _import PRIVATE : unit -> C_Int.t -Posix.Error.strError = _import PRIVATE : C_Int.t -> C_String.t +Posix.Error.clearErrno = _import : unit -> unit +Posix.Error.getErrno = _import : unit -> C_Int.t +Posix.Error.strError = _import : C_Int.t -> C_String.t Posix.FileSys.A.F_OK = _const : C_Int.t Posix.FileSys.A.R_OK = _const : C_Int.t Posix.FileSys.A.W_OK = _const : C_Int.t Posix.FileSys.A.X_OK = _const : C_Int.t -Posix.FileSys.Dirstream.closeDir = _import PRIVATE : C_DirP.t -> C_Int.t C_Errno.t -Posix.FileSys.Dirstream.openDir = _import PRIVATE : NullString8.t -> C_DirP.t C_Errno.t -Posix.FileSys.Dirstream.readDir = _import PRIVATE : C_DirP.t -> C_String.t C_Errno.t -Posix.FileSys.Dirstream.rewindDir = _import PRIVATE : C_DirP.t -> unit +Posix.FileSys.Dirstream.closeDir = _import : C_DirP.t -> C_Int.t C_Errno.t +Posix.FileSys.Dirstream.openDir = _import : NullString8.t -> C_DirP.t C_Errno.t +Posix.FileSys.Dirstream.readDir = _import : C_DirP.t -> C_String.t C_Errno.t +Posix.FileSys.Dirstream.rewindDir = _import : C_DirP.t -> unit Posix.FileSys.O.APPEND = _const : C_Int.t Posix.FileSys.O.BINARY = _const : C_Int.t Posix.FileSys.O.CREAT = _const : C_Int.t @@ -287,55 +287,55 @@ Posix.FileSys.S.IXGRP = _const : C_Mode.t Posix.FileSys.S.IXOTH = _const : C_Mode.t Posix.FileSys.S.IXUSR = _const : C_Mode.t -Posix.FileSys.ST.isBlk = _import PRIVATE : C_Mode.t -> C_Int.t -Posix.FileSys.ST.isChr = _import PRIVATE : C_Mode.t -> C_Int.t -Posix.FileSys.ST.isDir = _import PRIVATE : C_Mode.t -> C_Int.t -Posix.FileSys.ST.isFIFO = _import PRIVATE : C_Mode.t -> C_Int.t -Posix.FileSys.ST.isLink = _import PRIVATE : C_Mode.t -> C_Int.t -Posix.FileSys.ST.isReg = _import PRIVATE : C_Mode.t -> C_Int.t -Posix.FileSys.ST.isSock = _import PRIVATE : C_Mode.t -> C_Int.t -Posix.FileSys.Stat.fstat = _import PRIVATE : C_Fd.t -> C_Int.t C_Errno.t -Posix.FileSys.Stat.getATime = _import PRIVATE : unit -> C_Time.t -# Posix.FileSys.Stat.getBlkCnt = _import PRIVATE : unit -> C_BlkCnt.t -# Posix.FileSys.Stat.getBlkSize = _import PRIVATE : unit -> C_BlkSize.t -Posix.FileSys.Stat.getCTime = _import PRIVATE : unit -> C_Time.t -Posix.FileSys.Stat.getDev = _import PRIVATE : unit -> C_Dev.t -Posix.FileSys.Stat.getGId = _import PRIVATE : unit -> C_GId.t -Posix.FileSys.Stat.getINo = _import PRIVATE : unit -> C_INo.t -Posix.FileSys.Stat.getMTime = _import PRIVATE : unit -> C_Time.t -Posix.FileSys.Stat.getMode = _import PRIVATE : unit -> C_Mode.t -Posix.FileSys.Stat.getNLink = _import PRIVATE : unit -> C_NLink.t -Posix.FileSys.Stat.getRDev = _import PRIVATE : unit -> C_Dev.t -Posix.FileSys.Stat.getSize = _import PRIVATE : unit -> C_Off.t -Posix.FileSys.Stat.getUId = _import PRIVATE : unit -> C_UId.t -Posix.FileSys.Stat.lstat = _import PRIVATE : NullString8.t -> C_Int.t C_Errno.t -Posix.FileSys.Stat.stat = _import PRIVATE : NullString8.t -> C_Int.t C_Errno.t -Posix.FileSys.Utimbuf.setAcTime = _import PRIVATE : C_Time.t -> unit -Posix.FileSys.Utimbuf.setModTime = _import PRIVATE : C_Time.t -> unit -Posix.FileSys.Utimbuf.utime = _import PRIVATE : NullString8.t -> C_Int.t C_Errno.t -Posix.FileSys.access = _import PRIVATE : NullString8.t * C_Int.t -> C_Int.t C_Errno.t -Posix.FileSys.chdir = _import PRIVATE : NullString8.t -> C_Int.t C_Errno.t -Posix.FileSys.chmod = _import PRIVATE : NullString8.t * C_Mode.t -> C_Int.t C_Errno.t -Posix.FileSys.chown = _import PRIVATE : NullString8.t * C_UId.t * C_GId.t -> C_Int.t C_Errno.t -Posix.FileSys.fchdir = _import PRIVATE : C_Fd.t -> C_Int.t C_Errno.t -Posix.FileSys.fchmod = _import PRIVATE : C_Fd.t * C_Mode.t -> C_Int.t C_Errno.t -Posix.FileSys.fchown = _import PRIVATE : C_Fd.t * C_UId.t * C_GId.t -> C_Int.t C_Errno.t -Posix.FileSys.fpathconf = _import PRIVATE : C_Fd.t * C_Int.t -> C_Long.t C_Errno.t -Posix.FileSys.ftruncate = _import PRIVATE : C_Fd.t * C_Off.t -> C_Int.t C_Errno.t -Posix.FileSys.getcwd = _import PRIVATE : Char8.t array * C_Size.t -> C_String.t C_Errno.t -Posix.FileSys.link = _import PRIVATE : NullString8.t * NullString8.t -> C_Int.t C_Errno.t -Posix.FileSys.mkdir = _import PRIVATE : NullString8.t * C_Mode.t -> C_Int.t C_Errno.t -Posix.FileSys.mkfifo = _import PRIVATE : NullString8.t * C_Mode.t -> C_Int.t C_Errno.t -Posix.FileSys.open2 = _import PRIVATE : NullString8.t * C_Int.t -> C_Fd.t C_Errno.t -Posix.FileSys.open3 = _import PRIVATE : NullString8.t * C_Int.t * C_Mode.t -> C_Fd.t C_Errno.t -Posix.FileSys.pathconf = _import PRIVATE : NullString8.t * C_Int.t -> C_Long.t C_Errno.t -Posix.FileSys.readlink = _import PRIVATE : NullString8.t * Char8.t array * C_Size.t -> C_SSize.t C_Errno.t -Posix.FileSys.rename = _import PRIVATE : NullString8.t * NullString8.t -> C_Int.t C_Errno.t -Posix.FileSys.rmdir = _import PRIVATE : NullString8.t -> C_Int.t C_Errno.t -Posix.FileSys.symlink = _import PRIVATE : NullString8.t * NullString8.t -> C_Int.t C_Errno.t -Posix.FileSys.truncate = _import PRIVATE : NullString8.t * C_Off.t -> C_Int.t C_Errno.t -Posix.FileSys.umask = _import PRIVATE : C_Mode.t -> C_Mode.t -Posix.FileSys.unlink = _import PRIVATE : NullString8.t -> C_Int.t C_Errno.t +Posix.FileSys.ST.isBlk = _import : C_Mode.t -> C_Int.t +Posix.FileSys.ST.isChr = _import : C_Mode.t -> C_Int.t +Posix.FileSys.ST.isDir = _import : C_Mode.t -> C_Int.t +Posix.FileSys.ST.isFIFO = _import : C_Mode.t -> C_Int.t +Posix.FileSys.ST.isLink = _import : C_Mode.t -> C_Int.t +Posix.FileSys.ST.isReg = _import : C_Mode.t -> C_Int.t +Posix.FileSys.ST.isSock = _import : C_Mode.t -> C_Int.t +Posix.FileSys.Stat.fstat = _import : C_Fd.t -> C_Int.t C_Errno.t +Posix.FileSys.Stat.getATime = _import : unit -> C_Time.t +# Posix.FileSys.Stat.getBlkCnt = _import : unit -> C_BlkCnt.t +# Posix.FileSys.Stat.getBlkSize = _import : unit -> C_BlkSize.t +Posix.FileSys.Stat.getCTime = _import : unit -> C_Time.t +Posix.FileSys.Stat.getDev = _import : unit -> C_Dev.t +Posix.FileSys.Stat.getGId = _import : unit -> C_GId.t +Posix.FileSys.Stat.getINo = _import : unit -> C_INo.t +Posix.FileSys.Stat.getMTime = _import : unit -> C_Time.t +Posix.FileSys.Stat.getMode = _import : unit -> C_Mode.t +Posix.FileSys.Stat.getNLink = _import : unit -> C_NLink.t +Posix.FileSys.Stat.getRDev = _import : unit -> C_Dev.t +Posix.FileSys.Stat.getSize = _import : unit -> C_Off.t +Posix.FileSys.Stat.getUId = _import : unit -> C_UId.t +Posix.FileSys.Stat.lstat = _import : NullString8.t -> C_Int.t C_Errno.t +Posix.FileSys.Stat.stat = _import : NullString8.t -> C_Int.t C_Errno.t +Posix.FileSys.Utimbuf.setAcTime = _import : C_Time.t -> unit +Posix.FileSys.Utimbuf.setModTime = _import : C_Time.t -> unit +Posix.FileSys.Utimbuf.utime = _import : NullString8.t -> C_Int.t C_Errno.t +Posix.FileSys.access = _import : NullString8.t * C_Int.t -> C_Int.t C_Errno.t +Posix.FileSys.chdir = _import : NullString8.t -> C_Int.t C_Errno.t +Posix.FileSys.chmod = _import : NullString8.t * C_Mode.t -> C_Int.t C_Errno.t +Posix.FileSys.chown = _import : NullString8.t * C_UId.t * C_GId.t -> C_Int.t C_Errno.t +Posix.FileSys.fchdir = _import : C_Fd.t -> C_Int.t C_Errno.t +Posix.FileSys.fchmod = _import : C_Fd.t * C_Mode.t -> C_Int.t C_Errno.t +Posix.FileSys.fchown = _import : C_Fd.t * C_UId.t * C_GId.t -> C_Int.t C_Errno.t +Posix.FileSys.fpathconf = _import : C_Fd.t * C_Int.t -> C_Long.t C_Errno.t +Posix.FileSys.ftruncate = _import : C_Fd.t * C_Off.t -> C_Int.t C_Errno.t +Posix.FileSys.getcwd = _import : Char8.t array * C_Size.t -> C_String.t C_Errno.t +Posix.FileSys.link = _import : NullString8.t * NullString8.t -> C_Int.t C_Errno.t +Posix.FileSys.mkdir = _import : NullString8.t * C_Mode.t -> C_Int.t C_Errno.t +Posix.FileSys.mkfifo = _import : NullString8.t * C_Mode.t -> C_Int.t C_Errno.t +Posix.FileSys.open2 = _import : NullString8.t * C_Int.t -> C_Fd.t C_Errno.t +Posix.FileSys.open3 = _import : NullString8.t * C_Int.t * C_Mode.t -> C_Fd.t C_Errno.t +Posix.FileSys.pathconf = _import : NullString8.t * C_Int.t -> C_Long.t C_Errno.t +Posix.FileSys.readlink = _import : NullString8.t * Char8.t array * C_Size.t -> C_SSize.t C_Errno.t +Posix.FileSys.rename = _import : NullString8.t * NullString8.t -> C_Int.t C_Errno.t +Posix.FileSys.rmdir = _import : NullString8.t -> C_Int.t C_Errno.t +Posix.FileSys.symlink = _import : NullString8.t * NullString8.t -> C_Int.t C_Errno.t +Posix.FileSys.truncate = _import : NullString8.t * C_Off.t -> C_Int.t C_Errno.t +Posix.FileSys.umask = _import : C_Mode.t -> C_Mode.t +Posix.FileSys.unlink = _import : NullString8.t -> C_Int.t C_Errno.t Posix.IO.FD.CLOEXEC = _const : C_Int.t Posix.IO.FLock.F_GETLK = _const : C_Int.t Posix.IO.FLock.F_RDLCK = _const : C_Short.t @@ -346,17 +346,17 @@ Posix.IO.FLock.SEEK_CUR = _const : C_Short.t Posix.IO.FLock.SEEK_END= _const : C_Short.t Posix.IO.FLock.SEEK_SET = _const : C_Short.t -Posix.IO.FLock.fcntl = _import PRIVATE : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t -Posix.IO.FLock.getLen = _import PRIVATE : unit -> C_Off.t -Posix.IO.FLock.getPId = _import PRIVATE : unit -> C_PId.t -Posix.IO.FLock.getStart = _import PRIVATE : unit -> C_Off.t -Posix.IO.FLock.getType = _import PRIVATE : unit -> C_Short.t -Posix.IO.FLock.getWhence = _import PRIVATE : unit -> C_Short.t -Posix.IO.FLock.setLen = _import PRIVATE : C_Off.t -> unit -Posix.IO.FLock.setPId = _import PRIVATE : C_PId.t -> unit -Posix.IO.FLock.setStart = _import PRIVATE : C_Off.t -> unit -Posix.IO.FLock.setType = _import PRIVATE : C_Short.t -> unit -Posix.IO.FLock.setWhence = _import PRIVATE : C_Short.t -> unit +Posix.IO.FLock.fcntl = _import : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t +Posix.IO.FLock.getLen = _import : unit -> C_Off.t +Posix.IO.FLock.getPId = _import : unit -> C_PId.t +Posix.IO.FLock.getStart = _import : unit -> C_Off.t +Posix.IO.FLock.getType = _import : unit -> C_Short.t +Posix.IO.FLock.getWhence = _import : unit -> C_Short.t +Posix.IO.FLock.setLen = _import : C_Off.t -> unit +Posix.IO.FLock.setPId = _import : C_PId.t -> unit +Posix.IO.FLock.setStart = _import : C_Off.t -> unit +Posix.IO.FLock.setType = _import : C_Short.t -> unit +Posix.IO.FLock.setWhence = _import : C_Short.t -> unit Posix.IO.F_DUPFD = _const : C_Int.t Posix.IO.F_GETFD = _const : C_Int.t Posix.IO.F_GETFL = _const : C_Int.t @@ -368,22 +368,22 @@ Posix.IO.SEEK_CUR = _const : C_Int.t Posix.IO.SEEK_END= _const : C_Int.t Posix.IO.SEEK_SET = _const : C_Int.t -Posix.IO.close = _import PRIVATE : C_Fd.t -> C_Int.t C_Errno.t -Posix.IO.dup = _import PRIVATE : C_Fd.t -> C_Fd.t C_Errno.t -Posix.IO.dup2 = _import PRIVATE : C_Fd.t * C_Fd.t -> C_Fd.t C_Errno.t -Posix.IO.fcntl2 = _import PRIVATE : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t -Posix.IO.fcntl3 = _import PRIVATE : C_Fd.t * C_Int.t * C_Int.t -> C_Int.t C_Errno.t -Posix.IO.fsync = _import PRIVATE : C_Fd.t -> C_Int.t C_Errno.t -Posix.IO.lseek = _import PRIVATE : C_Fd.t * C_Off.t * C_Int.t -> C_Off.t C_Errno.t -Posix.IO.pipe = _import PRIVATE : C_Fd.t array -> C_Int.t C_Errno.t -Posix.IO.readChar8 = _import PRIVATE : C_Fd.t * Char8.t array * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t -Posix.IO.readWord8 = _import PRIVATE : C_Fd.t * Word8.t array * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t -Posix.IO.setbin = _import PRIVATE : C_Fd.t -> unit -Posix.IO.settext = _import PRIVATE : C_Fd.t -> unit -Posix.IO.writeChar8Arr = _import PRIVATE : C_Fd.t * Char8.t array * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t -Posix.IO.writeChar8Vec = _import PRIVATE : C_Fd.t * Char8.t vector * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t -Posix.IO.writeWord8Arr = _import PRIVATE : C_Fd.t * Word8.t array * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t -Posix.IO.writeWord8Vec = _import PRIVATE : C_Fd.t * Word8.t vector * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t +Posix.IO.close = _import : C_Fd.t -> C_Int.t C_Errno.t +Posix.IO.dup = _import : C_Fd.t -> C_Fd.t C_Errno.t +Posix.IO.dup2 = _import : C_Fd.t * C_Fd.t -> C_Fd.t C_Errno.t +Posix.IO.fcntl2 = _import : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t +Posix.IO.fcntl3 = _import : C_Fd.t * C_Int.t * C_Int.t -> C_Int.t C_Errno.t +Posix.IO.fsync = _import : C_Fd.t -> C_Int.t C_Errno.t +Posix.IO.lseek = _import : C_Fd.t * C_Off.t * C_Int.t -> C_Off.t C_Errno.t +Posix.IO.pipe = _import : C_Fd.t array -> C_Int.t C_Errno.t +Posix.IO.readChar8 = _import : C_Fd.t * Char8.t array * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t +Posix.IO.readWord8 = _import : C_Fd.t * Word8.t array * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t +Posix.IO.setbin = _import : C_Fd.t -> unit +Posix.IO.settext = _import : C_Fd.t -> unit +Posix.IO.writeChar8Arr = _import : C_Fd.t * Char8.t array * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t +Posix.IO.writeChar8Vec = _import : C_Fd.t * Char8.t vector * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t +Posix.IO.writeWord8Arr = _import : C_Fd.t * Word8.t array * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t +Posix.IO.writeWord8Vec = _import : C_Fd.t * Word8.t vector * C_Int.t * C_Size.t -> C_SSize.t C_Errno.t Posix.ProcEnv.SC_2_CHAR_TERM = _const : C_Int.t Posix.ProcEnv.SC_2_C_BIND = _const : C_Int.t Posix.ProcEnv.SC_2_C_DEV = _const : C_Int.t @@ -511,59 +511,60 @@ Posix.ProcEnv.SC_XOPEN_STREAMS = _const : C_Int.t Posix.ProcEnv.SC_XOPEN_UNIX = _const : C_Int.t Posix.ProcEnv.SC_XOPEN_VERSION = _const : C_Int.t -Posix.ProcEnv.Times.getCSTime = _import PRIVATE : unit -> C_Clock.t -Posix.ProcEnv.Times.getCUTime = _import PRIVATE : unit -> C_Clock.t -Posix.ProcEnv.Times.getSTime = _import PRIVATE : unit -> C_Clock.t -Posix.ProcEnv.Times.getUTime = _import PRIVATE : unit -> C_Clock.t -Posix.ProcEnv.Uname.getMachine = _import PRIVATE : unit -> C_String.t -Posix.ProcEnv.Uname.getNodeName = _import PRIVATE : unit -> C_String.t -Posix.ProcEnv.Uname.getRelease = _import PRIVATE : unit -> C_String.t -Posix.ProcEnv.Uname.getSysName = _import PRIVATE : unit -> C_String.t -Posix.ProcEnv.Uname.getVersion = _import PRIVATE : unit -> C_String.t -Posix.ProcEnv.ctermid = _import PRIVATE : unit -> C_String.t +Posix.ProcEnv.Times.getCSTime = _import : unit -> C_Clock.t +Posix.ProcEnv.Times.getCUTime = _import : unit -> C_Clock.t +Posix.ProcEnv.Times.getSTime = _import : unit -> C_Clock.t +Posix.ProcEnv.Times.getUTime = _import : unit -> C_Clock.t +Posix.ProcEnv.Uname.getMachine = _import : unit -> C_String.t +Posix.ProcEnv.Uname.getNodeName = _import : unit -> C_String.t +Posix.ProcEnv.Uname.getRelease = _import : unit -> C_String.t +Posix.ProcEnv.Uname.getSysName = _import : unit -> C_String.t +Posix.ProcEnv.Uname.getVersion = _import : unit -> C_String.t +Posix.ProcEnv.ctermid = _import : unit -> C_String.t Posix.ProcEnv.environ = _symbol : C_StringArray.t -Posix.ProcEnv.getegid = _import PRIVATE : unit -> C_GId.t -Posix.ProcEnv.getenv = _import PRIVATE : NullString8.t -> C_String.t -Posix.ProcEnv.geteuid = _import PRIVATE : unit -> C_UId.t -Posix.ProcEnv.getgid = _import PRIVATE : unit -> C_GId.t -Posix.ProcEnv.getgroups = _import PRIVATE : C_Int.t * C_GId.t array -> C_Int.t C_Errno.t -Posix.ProcEnv.getgroupsN = _import PRIVATE : unit -> C_Int.t -Posix.ProcEnv.getlogin = _import PRIVATE : unit -> C_String.t C_Errno.t -Posix.ProcEnv.getpgrp = _import PRIVATE : unit -> C_PId.t -Posix.ProcEnv.getpid = _import PRIVATE : unit -> C_PId.t -Posix.ProcEnv.getppid = _import PRIVATE : unit -> C_PId.t -Posix.ProcEnv.getuid = _import PRIVATE : unit -> C_UId.t -Posix.ProcEnv.isatty = _import PRIVATE : C_Fd.t -> C_Int.t -Posix.ProcEnv.setenv = _import PRIVATE : NullString8.t * NullString8.t -> C_Int.t C_Errno.t -Posix.ProcEnv.setgid = _import PRIVATE : C_GId.t -> C_Int.t C_Errno.t -Posix.ProcEnv.setgroups = _import PRIVATE : C_Int.t * C_GId.t vector -> C_Int.t C_Errno.t -Posix.ProcEnv.setpgid = _import PRIVATE : C_PId.t * C_PId.t -> C_Int.t C_Errno.t -Posix.ProcEnv.setsid = _import PRIVATE : unit -> C_PId.t C_Errno.t -Posix.ProcEnv.setuid = _import PRIVATE : C_UId.t -> C_Int.t C_Errno.t -Posix.ProcEnv.sysconf = _import PRIVATE : C_Int.t -> C_Long.t C_Errno.t -Posix.ProcEnv.times = _import PRIVATE : unit -> C_Clock.t C_Errno.t -Posix.ProcEnv.ttyname = _import PRIVATE : C_Fd.t -> C_String.t C_Errno.t -Posix.ProcEnv.uname = _import PRIVATE : unit -> C_Int.t C_Errno.t +Posix.ProcEnv.getegid = _import : unit -> C_GId.t +Posix.ProcEnv.getenv = _import : NullString8.t -> C_String.t +Posix.ProcEnv.geteuid = _import : unit -> C_UId.t +Posix.ProcEnv.getgid = _import : unit -> C_GId.t +Posix.ProcEnv.getgroups = _import : C_Int.t * C_GId.t array -> C_Int.t C_Errno.t +Posix.ProcEnv.getgroupsN = _import : unit -> C_Int.t +Posix.ProcEnv.getlogin = _import : unit -> C_String.t C_Errno.t +Posix.ProcEnv.getpgrp = _import : unit -> C_PId.t +Posix.ProcEnv.getpid = _import : unit -> C_PId.t +Posix.ProcEnv.getppid = _import : unit -> C_PId.t +Posix.ProcEnv.getuid = _import : unit -> C_UId.t +Posix.ProcEnv.isatty = _import : C_Fd.t -> C_Int.t +Posix.ProcEnv.setenv = _import : NullString8.t * NullString8.t -> C_Int.t C_Errno.t +Posix.ProcEnv.setgid = _import : C_GId.t -> C_Int.t C_Errno.t +Posix.ProcEnv.setgroups = _import : C_Int.t * C_GId.t vector -> C_Int.t C_Errno.t +Posix.ProcEnv.setpgid = _import : C_PId.t * C_PId.t -> C_Int.t C_Errno.t +Posix.ProcEnv.setsid = _import : unit -> C_PId.t C_Errno.t +Posix.ProcEnv.setuid = _import : C_UId.t -> C_Int.t C_Errno.t +Posix.ProcEnv.sysconf = _import : C_Int.t -> C_Long.t C_Errno.t +Posix.ProcEnv.times = _import : unit -> C_Clock.t C_Errno.t +Posix.ProcEnv.ttyname = _import : C_Fd.t -> C_String.t C_Errno.t +Posix.ProcEnv.uname = _import : unit -> C_Int.t C_Errno.t # Posix.Process.W.CONTINUED = _const : C_Int.t Posix.Process.W.NOHANG = _const : C_Int.t Posix.Process.W.UNTRACED = _const : C_Int.t -Posix.Process.alarm = _import PRIVATE : C_UInt.t -> C_UInt.t -Posix.Process.exece = _import PRIVATE : NullString8.t * NullString8.t array * NullString8.t array -> C_Int.t C_Errno.t -Posix.Process.execp = _import PRIVATE : NullString8.t * NullString8.t array -> C_Int.t C_Errno.t -Posix.Process.exit = _import PRIVATE __attribute__((noreturn)) : C_Status.t -> unit -Posix.Process.exitStatus = _import PRIVATE : C_Status.t -> C_Int.t -Posix.Process.fork = _import PRIVATE : unit -> C_PId.t C_Errno.t -Posix.Process.ifExited = _import PRIVATE : C_Status.t -> C_Int.t -Posix.Process.ifSignaled = _import PRIVATE : C_Status.t -> C_Int.t -Posix.Process.ifStopped = _import PRIVATE : C_Status.t -> C_Int.t -Posix.Process.kill = _import PRIVATE : C_PId.t * C_Signal.t -> C_Int.t C_Errno.t -Posix.Process.nanosleep = _import PRIVATE : C_Time.t ref * C_Long.t ref -> C_Int.t C_Errno.t -Posix.Process.pause = _import PRIVATE : unit -> C_Int.t C_Errno.t -Posix.Process.sleep = _import PRIVATE : C_UInt.t -> C_UInt.t -Posix.Process.stopSig = _import PRIVATE : C_Status.t -> C_Signal.t -Posix.Process.system = _import PRIVATE : NullString8.t -> C_Status.t C_Errno.t -Posix.Process.termSig = _import PRIVATE : C_Status.t -> C_Signal.t -Posix.Process.waitpid = _import PRIVATE : C_PId.t * C_Status.t ref * C_Int.t -> C_PId.t C_Errno.t +Posix.Process.alarm = _import : C_UInt.t -> C_UInt.t +Posix.Process.exece = _import : NullString8.t * NullString8.t array * NullString8.t array -> C_Int.t C_Errno.t +Posix.Process.execp = _import : NullString8.t * NullString8.t array -> C_Int.t C_Errno.t +Posix.Process.exit = _import __attribute__((noreturn)) : C_Status.t -> unit +Posix.Process.exitStatus = _import : C_Status.t -> C_Int.t +Posix.Process.fork = _import : unit -> C_PId.t C_Errno.t +Posix.Process.ifExited = _import : C_Status.t -> C_Int.t +Posix.Process.ifSignaled = _import : C_Status.t -> C_Int.t +Posix.Process.ifStopped = _import : C_Status.t -> C_Int.t +Posix.Process.kill = _import : C_PId.t * C_Signal.t -> C_Int.t C_Errno.t +Posix.Process.nanosleep = _import : C_Time.t ref * C_Long.t ref -> C_Int.t C_Errno.t +Posix.Process.pause = _import : unit -> C_Int.t C_Errno.t +Posix.Process.sleep = _import : C_UInt.t -> C_UInt.t +Posix.Process.stopSig = _import : C_Status.t -> C_Signal.t +Posix.Process.system = _import : NullString8.t -> C_Status.t C_Errno.t +Posix.Process.termSig = _import : C_Status.t -> C_Signal.t +Posix.Process.waitpid = _import : C_PId.t * C_Status.t ref * C_Int.t -> C_PId.t C_Errno.t +Posix.Signal.sigSetLen = _const : C_Size.t Posix.Signal.NSIG = _const : C_Int.t Posix.Signal.SIGABRT = _const : C_Signal.t Posix.Signal.SIGALRM = _const : C_Signal.t @@ -596,34 +597,34 @@ Posix.Signal.SIG_BLOCK = _const : C_Int.t Posix.Signal.SIG_SETMASK = _const : C_Int.t Posix.Signal.SIG_UNBLOCK = _const : C_Int.t -Posix.Signal.default = _import PRIVATE : C_Signal.t -> C_Int.t C_Errno.t -Posix.Signal.handleGC = _import PRIVATE : unit -> unit -Posix.Signal.handlee = _import PRIVATE : C_Signal.t -> C_Int.t C_Errno.t -Posix.Signal.ignore = _import PRIVATE : C_Signal.t -> C_Int.t C_Errno.t -Posix.Signal.isDefault = _import PRIVATE : C_Signal.t * C_Int.t ref -> C_Int.t C_Errno.t -Posix.Signal.isIgnore = _import PRIVATE : C_Signal.t * C_Int.t ref -> C_Int.t C_Errno.t -Posix.Signal.isPending = _import PRIVATE : C_Signal.t -> C_Int.t -Posix.Signal.isPendingGC = _import PRIVATE : unit -> C_Int.t -Posix.Signal.resetPending = _import PRIVATE :unit -> unit -Posix.Signal.sigaddset = _import PRIVATE : C_Signal.t -> C_Int.t C_Errno.t -Posix.Signal.sigdelset = _import PRIVATE : C_Signal.t -> C_Int.t C_Errno.t -Posix.Signal.sigemptyset = _import PRIVATE : unit -> C_Int.t C_Errno.t -Posix.Signal.sigfillset = _import PRIVATE : unit -> C_Int.t C_Errno.t -Posix.Signal.sigismember = _import PRIVATE : C_Signal.t -> C_Int.t C_Errno.t -Posix.Signal.sigprocmask = _import PRIVATE : C_Int.t -> C_Int.t C_Errno.t -Posix.Signal.sigsuspend = _import PRIVATE : unit -> unit -Posix.SysDB.Group.getGId = _import PRIVATE : unit -> C_GId.t -Posix.SysDB.Group.getMem = _import PRIVATE : unit -> C_StringArray.t -Posix.SysDB.Group.getName = _import PRIVATE : unit -> C_String.t -Posix.SysDB.Passwd.getDir = _import PRIVATE : unit -> C_String.t -Posix.SysDB.Passwd.getGId = _import PRIVATE : unit -> C_GId.t -Posix.SysDB.Passwd.getName = _import PRIVATE : unit -> C_String.t -Posix.SysDB.Passwd.getShell = _import PRIVATE : unit -> C_String.t -Posix.SysDB.Passwd.getUId = _import PRIVATE : unit -> C_UId.t -Posix.SysDB.getgrgid = _import PRIVATE : C_GId.t -> C_Int.t C_Errno.t -Posix.SysDB.getgrnam = _import PRIVATE : NullString8.t -> C_Int.t C_Errno.t -Posix.SysDB.getpwnam = _import PRIVATE : NullString8.t -> C_Int.t C_Errno.t -Posix.SysDB.getpwuid = _import PRIVATE : C_GId.t -> C_Int.t C_Errno.t +Posix.Signal.default = _import : GCState.t * C_Signal.t -> C_Int.t C_Errno.t +Posix.Signal.handleGC = _import : GCState.t -> unit +Posix.Signal.handlee = _import : GCState.t * C_Signal.t -> C_Int.t C_Errno.t +Posix.Signal.ignore = _import : GCState.t * C_Signal.t -> C_Int.t C_Errno.t +Posix.Signal.isDefault = _import : C_Signal.t * C_Int.t ref -> C_Int.t C_Errno.t +Posix.Signal.isIgnore = _import : C_Signal.t * C_Int.t ref -> C_Int.t C_Errno.t +Posix.Signal.isPending = _import : GCState.t * C_Signal.t -> C_Int.t +Posix.Signal.isPendingGC = _import : GCState.t -> C_Int.t +Posix.Signal.resetPending = _import : GCState.t -> unit +Posix.Signal.sigaddset = _import : Word8.t array * C_Signal.t -> C_Int.t C_Errno.t +Posix.Signal.sigdelset = _import : Word8.t array * C_Signal.t -> C_Int.t C_Errno.t +Posix.Signal.sigemptyset = _import : Word8.t array -> C_Int.t C_Errno.t +Posix.Signal.sigfillset = _import : Word8.t array -> C_Int.t C_Errno.t +Posix.Signal.sigismember = _import : Word8.t vector * C_Signal.t -> C_Int.t C_Errno.t +Posix.Signal.sigprocmask = _import : C_Int.t * Word8.t vector * Word8.t array -> C_Int.t C_Errno.t +Posix.Signal.sigsuspend = _import : Word8.t vector -> unit +Posix.SysDB.Group.getGId = _import : unit -> C_GId.t +Posix.SysDB.Group.getMem = _import : unit -> C_StringArray.t +Posix.SysDB.Group.getName = _import : unit -> C_String.t +Posix.SysDB.Passwd.getDir = _import : unit -> C_String.t +Posix.SysDB.Passwd.getGId = _import : unit -> C_GId.t +Posix.SysDB.Passwd.getName = _import : unit -> C_String.t +Posix.SysDB.Passwd.getShell = _import : unit -> C_String.t +Posix.SysDB.Passwd.getUId = _import : unit -> C_UId.t +Posix.SysDB.getgrgid = _import : C_GId.t -> C_Int.t C_Errno.t +Posix.SysDB.getgrnam = _import : NullString8.t -> C_Int.t C_Errno.t +Posix.SysDB.getpwnam = _import : NullString8.t -> C_Int.t C_Errno.t +Posix.SysDB.getpwuid = _import : C_GId.t -> C_Int.t C_Errno.t Posix.TTY.B0 = _const : C_Speed.t Posix.TTY.B110 = _const : C_Speed.t Posix.TTY.B1200 = _const : C_Speed.t @@ -710,28 +711,28 @@ Posix.TTY.TC.TCSADRAIN = _const : C_Int.t Posix.TTY.TC.TCSAFLUSH = _const : C_Int.t Posix.TTY.TC.TCSANOW = _const : C_Int.t -Posix.TTY.TC.drain = _import PRIVATE : C_Fd.t -> C_Int.t C_Errno.t -Posix.TTY.TC.flow = _import PRIVATE : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t -Posix.TTY.TC.flush = _import PRIVATE : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t -Posix.TTY.TC.getattr = _import PRIVATE : C_Fd.t -> C_Int.t C_Errno.t -Posix.TTY.TC.getpgrp = _import PRIVATE : C_Fd.t -> C_PId.t C_Errno.t -Posix.TTY.TC.sendbreak = _import PRIVATE : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t -Posix.TTY.TC.setattr = _import PRIVATE : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t -Posix.TTY.TC.setpgrp = _import PRIVATE : C_Fd.t * C_PId.t -> C_Int.t C_Errno.t -Posix.TTY.Termios.cfGetISpeed = _import PRIVATE : unit -> C_Speed.t -Posix.TTY.Termios.cfGetOSpeed = _import PRIVATE : unit -> C_Speed.t -Posix.TTY.Termios.cfSetISpeed = _import PRIVATE : C_Speed.t -> C_Int.t C_Errno.t -Posix.TTY.Termios.cfSetOSpeed = _import PRIVATE : C_Speed.t -> C_Int.t C_Errno.t -Posix.TTY.Termios.getCC = _import PRIVATE : C_CC.t array -> unit -Posix.TTY.Termios.getCFlag = _import PRIVATE : unit -> C_TCFlag.t -Posix.TTY.Termios.getIFlag = _import PRIVATE : unit -> C_TCFlag.t -Posix.TTY.Termios.getLFlag = _import PRIVATE : unit -> C_TCFlag.t -Posix.TTY.Termios.getOFlag = _import PRIVATE : unit -> C_TCFlag.t -Posix.TTY.Termios.setCC = _import PRIVATE : C_CC.t array -> unit -Posix.TTY.Termios.setCFlag = _import PRIVATE : C_TCFlag.t -> unit -Posix.TTY.Termios.setIFlag = _import PRIVATE : C_TCFlag.t -> unit -Posix.TTY.Termios.setLFlag = _import PRIVATE : C_TCFlag.t -> unit -Posix.TTY.Termios.setOFlag = _import PRIVATE : C_TCFlag.t -> unit +Posix.TTY.TC.drain = _import : C_Fd.t -> C_Int.t C_Errno.t +Posix.TTY.TC.flow = _import : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t +Posix.TTY.TC.flush = _import : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t +Posix.TTY.TC.getattr = _import : C_Fd.t -> C_Int.t C_Errno.t +Posix.TTY.TC.getpgrp = _import : C_Fd.t -> C_PId.t C_Errno.t +Posix.TTY.TC.sendbreak = _import : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t +Posix.TTY.TC.setattr = _import : C_Fd.t * C_Int.t -> C_Int.t C_Errno.t +Posix.TTY.TC.setpgrp = _import : C_Fd.t * C_PId.t -> C_Int.t C_Errno.t +Posix.TTY.Termios.cfGetISpeed = _import : unit -> C_Speed.t +Posix.TTY.Termios.cfGetOSpeed = _import : unit -> C_Speed.t +Posix.TTY.Termios.cfSetISpeed = _import : C_Speed.t -> C_Int.t C_Errno.t +Posix.TTY.Termios.cfSetOSpeed = _import : C_Speed.t -> C_Int.t C_Errno.t +Posix.TTY.Termios.getCC = _import : C_CC.t array -> unit +Posix.TTY.Termios.getCFlag = _import : unit -> C_TCFlag.t +Posix.TTY.Termios.getIFlag = _import : unit -> C_TCFlag.t +Posix.TTY.Termios.getLFlag = _import : unit -> C_TCFlag.t +Posix.TTY.Termios.getOFlag = _import : unit -> C_TCFlag.t +Posix.TTY.Termios.setCC = _import : C_CC.t array -> unit +Posix.TTY.Termios.setCFlag = _import : C_TCFlag.t -> unit +Posix.TTY.Termios.setIFlag = _import : C_TCFlag.t -> unit +Posix.TTY.Termios.setLFlag = _import : C_TCFlag.t -> unit +Posix.TTY.Termios.setOFlag = _import : C_TCFlag.t -> unit Posix.TTY.V.NCCS = _const : C_Int.t Posix.TTY.V.VEOF = _const : C_Int.t Posix.TTY.V.VEOL = _const : C_Int.t @@ -765,22 +766,22 @@ Socket.Ctl.SO_SNDLOWAT = _const : C_Int.t Socket.Ctl.SO_SNDTIMEO = _const : C_Int.t Socket.Ctl.SO_TYPE = _const : C_Int.t -Socket.Ctl.getATMARK = _import PRIVATE : C_Sock.t * C_Int.t ref -> C_Int.t C_Errno.t -Socket.Ctl.getNREAD = _import PRIVATE : C_Sock.t * C_Int.t ref -> C_Int.t C_Errno.t -Socket.Ctl.getPeerName = _import PRIVATE : C_Sock.t * Word8.t array * C_Socklen.t ref -> C_Int.t C_Errno.t -Socket.Ctl.getSockName = _import PRIVATE : C_Sock.t * Word8.t array * C_Socklen.t ref -> C_Int.t C_Errno.t -Socket.Ctl.getSockOptC_Int = _import PRIVATE : C_Sock.t * C_Int.t * C_Int.t * C_Int.t ref -> C_Int.t C_Errno.t -Socket.Ctl.getSockOptC_Linger = _import PRIVATE : C_Sock.t * C_Int.t * C_Int.t * C_Int.t ref * C_Int.t ref -> C_Int.t C_Errno.t -Socket.Ctl.setSockOptC_Int = _import PRIVATE : C_Sock.t * C_Int.t * C_Int.t * C_Int.t -> C_Int.t C_Errno.t -Socket.Ctl.setSockOptC_Linger = _import PRIVATE : C_Sock.t * C_Int.t * C_Int.t * C_Int.t * C_Int.t -> C_Int.t C_Errno.t -Socket.GenericSock.socket = _import PRIVATE : C_Int.t * C_Int.t * C_Int.t -> C_Int.t C_Errno.t -Socket.GenericSock.socketPair = _import PRIVATE : C_Int.t * C_Int.t * C_Int.t * C_Int.t array -> C_Int.t C_Errno.t +Socket.Ctl.getATMARK = _import : C_Sock.t * C_Int.t ref -> C_Int.t C_Errno.t +Socket.Ctl.getNREAD = _import : C_Sock.t * C_Int.t ref -> C_Int.t C_Errno.t +Socket.Ctl.getPeerName = _import : C_Sock.t * Word8.t array * C_Socklen.t ref -> C_Int.t C_Errno.t +Socket.Ctl.getSockName = _import : C_Sock.t * Word8.t array * C_Socklen.t ref -> C_Int.t C_Errno.t +Socket.Ctl.getSockOptC_Int = _import : C_Sock.t * C_Int.t * C_Int.t * C_Int.t ref -> C_Int.t C_Errno.t +Socket.Ctl.getSockOptC_Linger = _import : C_Sock.t * C_Int.t * C_Int.t * C_Int.t ref * C_Int.t ref -> C_Int.t C_Errno.t +Socket.Ctl.setSockOptC_Int = _import : C_Sock.t * C_Int.t * C_Int.t * C_Int.t -> C_Int.t C_Errno.t +Socket.Ctl.setSockOptC_Linger = _import : C_Sock.t * C_Int.t * C_Int.t * C_Int.t * C_Int.t -> C_Int.t C_Errno.t +Socket.GenericSock.socket = _import : C_Int.t * C_Int.t * C_Int.t -> C_Int.t C_Errno.t +Socket.GenericSock.socketPair = _import : C_Int.t * C_Int.t * C_Int.t * C_Int.t array -> C_Int.t C_Errno.t Socket.INetSock.Ctl.IPPROTO_TCP = _const : C_Int.t Socket.INetSock.Ctl.TCP_NODELAY = _const : C_Int.t -Socket.INetSock.fromAddr = _import PRIVATE : Word8.t vector -> unit -Socket.INetSock.getInAddr = _import PRIVATE : Word8.t array -> unit -Socket.INetSock.getPort = _import PRIVATE : unit -> Word16.t -Socket.INetSock.toAddr = _import PRIVATE : Word8.t vector * Word16.t * Word8.t array * C_Socklen.t ref -> unit +Socket.INetSock.fromAddr = _import : Word8.t vector -> unit +Socket.INetSock.getInAddr = _import : Word8.t array -> unit +Socket.INetSock.getPort = _import : unit -> Word16.t +Socket.INetSock.toAddr = _import : Word8.t vector * Word16.t * Word8.t array * C_Socklen.t ref -> unit Socket.MSG_CTRUNC = _const : C_Int.t Socket.MSG_DONTROUTE = _const : C_Int.t Socket.MSG_DONTWAIT = _const : C_Int.t @@ -796,321 +797,325 @@ Socket.SOCK.RAW = _const : C_Int.t Socket.SOCK.SEQPACKET = _const : C_Int.t Socket.SOCK.STREAM = _const : C_Int.t -Socket.UnixSock.fromAddr = _import PRIVATE : Word8.t vector * Char8.t array * C_Size.t -> unit -Socket.UnixSock.pathLen = _import PRIVATE : Word8.t vector -> C_Size.t -Socket.UnixSock.toAddr = _import PRIVATE : NullString8.t * C_Size.t * Word8.t array * C_Socklen.t ref -> unit -Socket.accept = _import PRIVATE : C_Sock.t * Word8.t array * C_Socklen.t ref -> C_Int.t C_Errno.t -Socket.bind = _import PRIVATE : C_Sock.t * Word8.t vector * C_Socklen.t -> C_Int.t C_Errno.t -Socket.close = _import PRIVATE : C_Sock.t -> C_Int.t C_Errno.t -Socket.connect = _import PRIVATE : C_Sock.t * Word8.t vector * C_Socklen.t -> C_Int.t C_Errno.t -Socket.familyOfAddr = _import PRIVATE : Word8.t vector -> C_Int.t -Socket.getTimeout_sec = _import PRIVATE : unit -> C_Time.t -Socket.getTimeout_usec = _import PRIVATE : unit -> C_SUSeconds.t -Socket.listen = _import PRIVATE : C_Sock.t * C_Int.t -> C_Int.t C_Errno.t -Socket.recv = _import PRIVATE : C_Sock.t * Word8.t array * C_Int.t * C_Size.t * C_Int.t -> C_SSize.t C_Errno.t -Socket.recvFrom = _import PRIVATE : C_Sock.t * Word8.t array * C_Int.t * C_Size.t * C_Int.t * Word8.t array * C_Socklen.t ref -> C_SSize.t C_Errno.t -Socket.select = _import PRIVATE : C_Fd.t vector * C_Fd.t vector * C_Fd.t vector * C_Int.t array * C_Int.t array * C_Int.t array -> C_Int.t C_Errno.t -Socket.sendArr = _import PRIVATE : C_Sock.t * Word8.t array * C_Int.t * C_Size.t * C_Int.t -> C_SSize.t C_Errno.t -Socket.sendArrTo = _import PRIVATE : C_Sock.t * Word8.t array * C_Int.t * C_Size.t * C_Int.t * Word8.t vector * C_Socklen.t -> C_SSize.t C_Errno.t -Socket.sendVec = _import PRIVATE : C_Sock.t * Word8.t vector * C_Int.t * C_Size.t * C_Int.t -> C_SSize.t C_Errno.t -Socket.sendVecTo = _import PRIVATE : C_Sock.t * Word8.t vector * C_Int.t * C_Size.t * C_Int.t * Word8.t vector * C_Socklen.t -> C_SSize.t C_Errno.t -Socket.setTimeout = _import PRIVATE : C_Time.t * C_SUSeconds.t -> unit -Socket.setTimeoutNull = _import PRIVATE : unit -> unit -Socket.shutdown = _import PRIVATE : C_Sock.t * C_Int.t -> C_Int.t C_Errno.t +Socket.UnixSock.fromAddr = _import : Word8.t vector * Char8.t array * C_Size.t -> unit +Socket.UnixSock.pathLen = _import : Word8.t vector -> C_Size.t +Socket.UnixSock.toAddr = _import : NullString8.t * C_Size.t * Word8.t array * C_Socklen.t ref -> unit +Socket.accept = _import : C_Sock.t * Word8.t array * C_Socklen.t ref -> C_Int.t C_Errno.t +Socket.bind = _import : C_Sock.t * Word8.t vector * C_Socklen.t -> C_Int.t C_Errno.t +Socket.close = _import : C_Sock.t -> C_Int.t C_Errno.t +Socket.connect = _import : C_Sock.t * Word8.t vector * C_Socklen.t -> C_Int.t C_Errno.t +Socket.familyOfAddr = _import : Word8.t vector -> C_Int.t +Socket.getTimeout_sec = _import : unit -> C_Time.t +Socket.getTimeout_usec = _import : unit -> C_SUSeconds.t +Socket.listen = _import : C_Sock.t * C_Int.t -> C_Int.t C_Errno.t +Socket.recv = _import : C_Sock.t * Word8.t array * C_Int.t * C_Size.t * C_Int.t -> C_SSize.t C_Errno.t +Socket.recvFrom = _import : C_Sock.t * Word8.t array * C_Int.t * C_Size.t * C_Int.t * Word8.t array * C_Socklen.t ref -> C_SSize.t C_Errno.t +Socket.select = _import : C_Fd.t vector * C_Fd.t vector * C_Fd.t vector * C_Int.t array * C_Int.t array * C_Int.t array -> C_Int.t C_Errno.t +Socket.sendArr = _import : C_Sock.t * Word8.t array * C_Int.t * C_Size.t * C_Int.t -> C_SSize.t C_Errno.t +Socket.sendArrTo = _import : C_Sock.t * Word8.t array * C_Int.t * C_Size.t * C_Int.t * Word8.t vector * C_Socklen.t -> C_SSize.t C_Errno.t +Socket.sendVec = _import : C_Sock.t * Word8.t vector * C_Int.t * C_Size.t * C_Int.t -> C_SSize.t C_Errno.t +Socket.sendVecTo = _import : C_Sock.t * Word8.t vector * C_Int.t * C_Size.t * C_Int.t * Word8.t vector * C_Socklen.t -> C_SSize.t C_Errno.t +Socket.setTimeout = _import : C_Time.t * C_SUSeconds.t -> unit +Socket.setTimeoutNull = _import : unit -> unit +Socket.shutdown = _import : C_Sock.t * C_Int.t -> C_Int.t C_Errno.t Socket.sockAddrStorageLen = _const : C_Size.t -Stdio.print = _import PRIVATE : String8.t -> unit -Stdio.printStderr = _import PRIVATE : String8.t -> unit -Stdio.printStdout = _import PRIVATE : String8.t -> unit -Time.getTimeOfDay = _import PRIVATE : C_Time.t ref * C_SUSeconds.t ref -> C_Int.t -Windows.Process.create = _import PRIVATE : NullString8.t * NullString8.t * NullString8.t * C_Fd.t * C_Fd.t * C_Fd.t -> C_PId.t C_Errno.t -Windows.Process.createNull = _import PRIVATE : NullString8.t * NullString8.t * C_Fd.t * C_Fd.t * C_Fd.t -> C_PId.t C_Errno.t -Windows.Process.getexitcode = _import PRIVATE : C_PId.t * C_Status.t ref -> C_Int.t C_Errno.t -Windows.Process.terminate = _import PRIVATE : C_PId.t * C_Signal.t -> C_Int.t C_Errno.t +Stdio.print = _import : String8.t -> unit +Stdio.printStderr = _import : String8.t -> unit +Stdio.printStdout = _import : String8.t -> unit +Time.getTimeOfDay = _import : C_Time.t ref * C_SUSeconds.t ref -> C_Int.t +Windows.Process.create = _import : NullString8.t * NullString8.t * NullString8.t * C_Fd.t * C_Fd.t * C_Fd.t -> C_PId.t C_Errno.t +Windows.Process.createNull = _import : NullString8.t * NullString8.t * C_Fd.t * C_Fd.t * C_Fd.t -> C_PId.t C_Errno.t +Windows.Process.getexitcode = _import : C_PId.t * C_Status.t ref -> C_Int.t C_Errno.t +Windows.Process.terminate = _import : C_PId.t * C_Signal.t -> C_Int.t C_Errno.t ## -Real32.Math.acos = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.asin = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.atan = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.atan2 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t -> Real32.t -Real32.Math.cos = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.cosh = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.e = _symbol : Real32.t -Real32.Math.exp = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.ln = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.log10 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.pi = _symbol : Real32.t -Real32.Math.pow = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t -> Real32.t -Real32.Math.sin = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.sinh = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.sqrt = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.tan = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.Math.tanh = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.abs = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.add = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t -> Real32.t -Real32.castToWord32 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Word32.t -Real32.div = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t -> Real32.t -Real32.equal = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t -> Bool.t -Real32.fetch = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t ref -> Real32.t -Real32.frexp = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * C_Int.t ref -> Real32.t -Real32.gdtoa = _import PRIVATE : Real32.t * C_Int.t * C_Int.t * C_Int.t * C_Int.t ref -> C_String.t -Real32.ldexp = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * C_Int.t -> Real32.t -Real32.le = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t -> Bool.t -Real32.lt = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t -> Bool.t -Real32.modf = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t ref -> Real32.t -Real32.move = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t ref * Real32.t ref -> unit -Real32.mul = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t -> Real32.t -Real32.muladd = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t * Real32.t -> Real32.t -Real32.mulsub = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t * Real32.t -> Real32.t -Real32.neg = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.realCeil = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.realFloor = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.realTrunc = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.rndToReal32 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.rndToReal64 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real64.t -Real32.rndToWordS16 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Int16.t -Real32.rndToWordS32 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Int32.t -Real32.rndToWordS64 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Int64.t -Real32.rndToWordS8 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Int8.t -Real32.rndToWordU16 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Word16.t -Real32.rndToWordU32 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Word32.t -Real32.rndToWordU64 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Word64.t -Real32.rndToWordU8 = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Word8.t -Real32.round = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t -> Real32.t -Real32.store = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t ref * Real32.t -> unit -Real32.strtor = _import PRIVATE : NullString8.t * C_Int.t -> Real32.t -Real32.sub = _import MLTON_CODEGEN_STATIC_INLINE : Real32.t * Real32.t -> Real32.t -Real64.Math.acos = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.asin = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.atan = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.atan2 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t -> Real64.t -Real64.Math.cos = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.cosh = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.e = _symbol : Real64.t -Real64.Math.exp = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.ln = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.log10 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.pi = _symbol : Real64.t -Real64.Math.pow = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t -> Real64.t -Real64.Math.sin = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.sinh = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.sqrt = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.tan = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.Math.tanh = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.abs = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.add = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t -> Real64.t -Real64.castToWord64 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Word64.t -Real64.div = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t -> Real64.t -Real64.equal = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t -> Bool.t -Real64.fetch = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t ref -> Real64.t -Real64.frexp = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * C_Int.t ref -> Real64.t -Real64.gdtoa = _import PRIVATE : Real64.t * C_Int.t * C_Int.t * C_Int.t * C_Int.t ref -> C_String.t -Real64.ldexp = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * C_Int.t -> Real64.t -Real64.le = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t -> Bool.t -Real64.lt = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t -> Bool.t -Real64.modf = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t ref -> Real64.t -Real64.move = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t ref * Real64.t ref -> unit -Real64.mul = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t -> Real64.t -Real64.muladd = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t * Real64.t -> Real64.t -Real64.mulsub = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t * Real64.t -> Real64.t -Real64.neg = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.realCeil = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.realFloor = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.realTrunc = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.rndToReal32 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real32.t -Real64.rndToReal64 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.rndToWordS16 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Int16.t -Real64.rndToWordS32 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Int32.t -Real64.rndToWordS64 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Int64.t -Real64.rndToWordS8 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Int8.t -Real64.rndToWordU16 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Word16.t -Real64.rndToWordU32 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Word32.t -Real64.rndToWordU64 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Word64.t -Real64.rndToWordU8 = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Word8.t -Real64.round = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t -> Real64.t -Real64.store = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t ref * Real64.t -> unit -Real64.strtor = _import PRIVATE : NullString8.t * C_Int.t -> Real64.t -Real64.sub = _import MLTON_CODEGEN_STATIC_INLINE : Real64.t * Real64.t -> Real64.t -Word16.add = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Word16.t -Word16.andb = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Word16.t -Word16.equal = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Bool.t -Word16.lshift = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word32.t -> Word16.t -Word16.neg = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t -> Word16.t -Word16.notb = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t -> Word16.t -Word16.orb = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Word16.t -Word16.rol = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word32.t -> Word16.t -Word16.ror = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word32.t -> Word16.t -Word16.sub = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Word16.t -Word16.xorb = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Word16.t -Word32.add = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -Word32.andb = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -Word32.castToReal32 = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t -> Real32.t -Word32.equal = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Bool.t -Word32.lshift = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -Word32.neg = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t -> Word32.t -Word32.notb = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t -> Word32.t -Word32.orb = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -Word32.rol = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -Word32.ror = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -Word32.sub = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -Word32.xorb = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -Word64.add = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Word64.t -Word64.andb = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Word64.t -Word64.castToReal64 = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t -> Real64.t -Word64.equal = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Bool.t -Word64.fetch = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t ref -> Word64.t -Word64.lshift = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word32.t -> Word64.t -Word64.move = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t ref * Word64.t ref -> unit -Word64.neg = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t -> Word64.t -Word64.notb = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t -> Word64.t -Word64.orb = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Word64.t -Word64.rol = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word32.t -> Word64.t -Word64.ror = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word32.t -> Word64.t -Word64.store = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t ref * Word64.t -> unit -Word64.sub = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Word64.t -Word64.xorb = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Word64.t -Word8.add = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Word8.t -Word8.andb = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Word8.t -Word8.equal = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Bool.t -Word8.lshift = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word32.t -> Word8.t -Word8.neg = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t -> Word8.t -Word8.notb = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t -> Word8.t -Word8.orb = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Word8.t -Word8.rol = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word32.t -> Word8.t -Word8.ror = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word32.t -> Word8.t -Word8.sub = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Word8.t -Word8.xorb = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Word8.t -WordS16.addCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t * Int16.t -> Bool.t -WordS16.extdToWord16 = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t -> Word16.t -WordS16.extdToWord32 = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t -> Word32.t -WordS16.extdToWord64 = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t -> Word64.t -WordS16.extdToWord8 = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t -> Word8.t -WordS16.ge = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t * Int16.t -> Bool.t -WordS16.gt = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t * Int16.t -> Bool.t -WordS16.le = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t * Int16.t -> Bool.t -WordS16.lt = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t * Int16.t -> Bool.t -WordS16.mul = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t * Int16.t -> Int16.t -WordS16.mulCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t * Int16.t -> Bool.t -WordS16.negCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t -> Bool.t -WordS16.quot = _import MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) : Int16.t * Int16.t -> Int16.t -WordS16.rem = _import MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) : Int16.t * Int16.t -> Int16.t -WordS16.rndToReal32 = _import PRIVATE : Int16.t -> Real32.t -WordS16.rndToReal64 = _import PRIVATE : Int16.t -> Real64.t -WordS16.rshift = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t * Word32.t -> Int16.t -WordS16.subCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int16.t * Int16.t -> Bool.t -WordS32.addCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t * Int32.t -> Bool.t -WordS32.extdToWord16 = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t -> Word16.t -WordS32.extdToWord32 = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t -> Word32.t -WordS32.extdToWord64 = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t -> Word64.t -WordS32.extdToWord8 = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t -> Word8.t -WordS32.ge = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t * Int32.t -> Bool.t -WordS32.gt = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t * Int32.t -> Bool.t -WordS32.le = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t * Int32.t -> Bool.t -WordS32.lt = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t * Int32.t -> Bool.t -WordS32.mul = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t * Int32.t -> Int32.t -WordS32.mulCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t * Int32.t -> Bool.t -WordS32.negCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t -> Bool.t -WordS32.quot = _import MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) : Int32.t * Int32.t -> Int32.t -WordS32.rem = _import MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) : Int32.t * Int32.t -> Int32.t -WordS32.rndToReal32 = _import PRIVATE : Int32.t -> Real32.t -WordS32.rndToReal64 = _import PRIVATE : Int32.t -> Real64.t -WordS32.rshift = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t * Word32.t -> Int32.t -WordS32.subCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int32.t * Int32.t -> Bool.t -WordS64.addCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t * Int64.t -> Bool.t -WordS64.extdToWord16 = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t -> Word16.t -WordS64.extdToWord32 = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t -> Word32.t -WordS64.extdToWord64 = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t -> Word64.t -WordS64.extdToWord8 = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t -> Word8.t -WordS64.ge = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t * Int64.t -> Bool.t -WordS64.gt = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t * Int64.t -> Bool.t -WordS64.le = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t * Int64.t -> Bool.t -WordS64.lt = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t * Int64.t -> Bool.t -WordS64.mul = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t * Int64.t -> Int64.t -WordS64.mulCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t * Int64.t -> Bool.t -WordS64.negCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t -> Bool.t -WordS64.quot = _import MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) : Int64.t * Int64.t -> Int64.t -WordS64.rem = _import MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) : Int64.t * Int64.t -> Int64.t -WordS64.rndToReal32 = _import PRIVATE : Int64.t -> Real32.t -WordS64.rndToReal64 = _import PRIVATE : Int64.t -> Real64.t -WordS64.rshift = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t * Word32.t -> Int64.t -WordS64.subCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int64.t * Int64.t -> Bool.t -WordS8.addCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t * Int8.t -> Bool.t -WordS8.extdToWord16 = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t -> Word16.t -WordS8.extdToWord32 = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t -> Word32.t -WordS8.extdToWord64 = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t -> Word64.t -WordS8.extdToWord8 = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t -> Word8.t -WordS8.ge = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t * Int8.t -> Bool.t -WordS8.gt = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t * Int8.t -> Bool.t -WordS8.le = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t * Int8.t -> Bool.t -WordS8.lt = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t * Int8.t -> Bool.t -WordS8.mul = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t * Int8.t -> Int8.t -WordS8.mulCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t * Int8.t -> Bool.t -WordS8.negCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t -> Bool.t -WordS8.quot = _import MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) : Int8.t * Int8.t -> Int8.t -WordS8.rem = _import MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) : Int8.t * Int8.t -> Int8.t -WordS8.rndToReal32 = _import PRIVATE : Int8.t -> Real32.t -WordS8.rndToReal64 = _import PRIVATE : Int8.t -> Real64.t -WordS8.rshift = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t * Word32.t -> Int8.t -WordS8.subCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Int8.t * Int8.t -> Bool.t -WordU16.addCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Bool.t -WordU16.extdToWord16 = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t -> Word16.t -WordU16.extdToWord32 = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t -> Word32.t -WordU16.extdToWord64 = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t -> Word64.t -WordU16.extdToWord8 = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t -> Word8.t -WordU16.ge = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Bool.t -WordU16.gt = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Bool.t -WordU16.le = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Bool.t -WordU16.lt = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Bool.t -WordU16.mul = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Word16.t -WordU16.mulCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Bool.t -WordU16.quot = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Word16.t -WordU16.rem = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word16.t -> Word16.t -WordU16.rndToReal32 = _import PRIVATE : Word16.t -> Real32.t -WordU16.rndToReal64 = _import PRIVATE : Word16.t -> Real64.t -WordU16.rshift = _import MLTON_CODEGEN_STATIC_INLINE : Word16.t * Word32.t -> Word16.t -WordU32.addCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Bool.t -WordU32.extdToWord16 = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t -> Word16.t -WordU32.extdToWord32 = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t -> Word32.t -WordU32.extdToWord64 = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t -> Word64.t -WordU32.extdToWord8 = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t -> Word8.t -WordU32.ge = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Bool.t -WordU32.gt = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Bool.t -WordU32.le = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Bool.t -WordU32.lt = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Bool.t -WordU32.mul = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -WordU32.mulCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Bool.t -WordU32.quot = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -WordU32.rem = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -WordU32.rndToReal32 = _import PRIVATE : Word32.t -> Real32.t -WordU32.rndToReal64 = _import PRIVATE : Word32.t -> Real64.t -WordU32.rshift = _import MLTON_CODEGEN_STATIC_INLINE : Word32.t * Word32.t -> Word32.t -WordU64.addCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Bool.t -WordU64.extdToWord16 = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t -> Word16.t -WordU64.extdToWord32 = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t -> Word32.t -WordU64.extdToWord64 = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t -> Word64.t -WordU64.extdToWord8 = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t -> Word8.t -WordU64.ge = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Bool.t -WordU64.gt = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Bool.t -WordU64.le = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Bool.t -WordU64.lt = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Bool.t -WordU64.mul = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Word64.t -WordU64.mulCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Bool.t -WordU64.quot = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Word64.t -WordU64.rem = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word64.t -> Word64.t -WordU64.rndToReal32 = _import PRIVATE : Word64.t -> Real32.t -WordU64.rndToReal64 = _import PRIVATE : Word64.t -> Real64.t -WordU64.rshift = _import MLTON_CODEGEN_STATIC_INLINE : Word64.t * Word32.t -> Word64.t -WordU8.addCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Bool.t -WordU8.extdToWord16 = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t -> Word16.t -WordU8.extdToWord32 = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t -> Word32.t -WordU8.extdToWord64 = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t -> Word64.t -WordU8.extdToWord8 = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t -> Word8.t -WordU8.ge = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Bool.t -WordU8.gt = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Bool.t -WordU8.le = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Bool.t -WordU8.lt = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Bool.t -WordU8.mul = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Word8.t -WordU8.mulCheckOverflows = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Bool.t -WordU8.quot = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Word8.t -WordU8.rem = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word8.t -> Word8.t -WordU8.rndToReal32 = _import PRIVATE : Word8.t -> Real32.t -WordU8.rndToReal64 = _import PRIVATE : Word8.t -> Real64.t -WordU8.rshift = _import MLTON_CODEGEN_STATIC_INLINE : Word8.t * Word32.t -> Word8.t +Real32.Math.acos = _import INLINE : Real32.t -> Real32.t +Real32.Math.asin = _import INLINE : Real32.t -> Real32.t +Real32.Math.atan = _import INLINE : Real32.t -> Real32.t +Real32.Math.atan2 = _import INLINE : Real32.t * Real32.t -> Real32.t +Real32.Math.cos = _import INLINE : Real32.t -> Real32.t +Real32.Math.cosh = _import INLINE : Real32.t -> Real32.t +Real32.Math.exp = _import INLINE : Real32.t -> Real32.t +Real32.Math.ln = _import INLINE : Real32.t -> Real32.t +Real32.Math.log10 = _import INLINE : Real32.t -> Real32.t +Real32.Math.pow = _import INLINE : Real32.t * Real32.t -> Real32.t +Real32.Math.sin = _import INLINE : Real32.t -> Real32.t +Real32.Math.sinh = _import INLINE : Real32.t -> Real32.t +Real32.Math.sqrt = _import INLINE : Real32.t -> Real32.t +Real32.Math.tan = _import INLINE : Real32.t -> Real32.t +Real32.Math.tanh = _import INLINE : Real32.t -> Real32.t +Real32.abs = _import INLINE : Real32.t -> Real32.t +Real32.add = _import INLINE : Real32.t * Real32.t -> Real32.t +Real32.castToWord32 = _import INLINE : Real32.t -> Word32.t +Real32.div = _import INLINE : Real32.t * Real32.t -> Real32.t +Real32.equal = _import INLINE : Real32.t * Real32.t -> Bool.t +Real32.fetch = _import INLINE : Real32.t ref -> Real32.t +Real32.frexp = _import INLINE : Real32.t * C_Int.t ref -> Real32.t +Real32.gdtoa = _import : Real32.t * C_Int.t * C_Int.t * C_Int.t * C_Int.t ref -> C_String.t +Real32.ldexp = _import INLINE : Real32.t * C_Int.t -> Real32.t +Real32.le = _import INLINE : Real32.t * Real32.t -> Bool.t +Real32.lt = _import INLINE : Real32.t * Real32.t -> Bool.t +Real32.modf = _import INLINE : Real32.t * Real32.t ref -> Real32.t +Real32.move = _import INLINE : Real32.t ref * Real32.t ref -> unit +Real32.mul = _import INLINE : Real32.t * Real32.t -> Real32.t +Real32.muladd = _import INLINE : Real32.t * Real32.t * Real32.t -> Real32.t +Real32.mulsub = _import INLINE : Real32.t * Real32.t * Real32.t -> Real32.t +Real32.neg = _import INLINE : Real32.t -> Real32.t +Real32.realCeil = _import INLINE : Real32.t -> Real32.t +Real32.realFloor = _import INLINE : Real32.t -> Real32.t +Real32.realTrunc = _import INLINE : Real32.t -> Real32.t +Real32.rndToReal32 = _import INLINE : Real32.t -> Real32.t +Real32.rndToReal64 = _import INLINE : Real32.t -> Real64.t +Real32.rndToWordS16 = _import INLINE : Real32.t -> Int16.t +Real32.rndToWordS32 = _import INLINE : Real32.t -> Int32.t +Real32.rndToWordS64 = _import INLINE : Real32.t -> Int64.t +Real32.rndToWordS8 = _import INLINE : Real32.t -> Int8.t +Real32.rndToWordU16 = _import INLINE : Real32.t -> Word16.t +Real32.rndToWordU32 = _import INLINE : Real32.t -> Word32.t +Real32.rndToWordU64 = _import INLINE : Real32.t -> Word64.t +Real32.rndToWordU8 = _import INLINE : Real32.t -> Word8.t +Real32.round = _import INLINE : Real32.t -> Real32.t +Real32.store = _import INLINE : Real32.t ref * Real32.t -> unit +Real32.strtor = _import : NullString8.t * C_Int.t -> Real32.t +Real32.sub = _import INLINE : Real32.t * Real32.t -> Real32.t +Real64.Math.acos = _import INLINE : Real64.t -> Real64.t +Real64.Math.asin = _import INLINE : Real64.t -> Real64.t +Real64.Math.atan = _import INLINE : Real64.t -> Real64.t +Real64.Math.atan2 = _import INLINE : Real64.t * Real64.t -> Real64.t +Real64.Math.cos = _import INLINE : Real64.t -> Real64.t +Real64.Math.cosh = _import INLINE : Real64.t -> Real64.t +Real64.Math.exp = _import INLINE : Real64.t -> Real64.t +Real64.Math.ln = _import INLINE : Real64.t -> Real64.t +Real64.Math.log10 = _import INLINE : Real64.t -> Real64.t +Real64.Math.pow = _import INLINE : Real64.t * Real64.t -> Real64.t +Real64.Math.sin = _import INLINE : Real64.t -> Real64.t +Real64.Math.sinh = _import INLINE : Real64.t -> Real64.t +Real64.Math.sqrt = _import INLINE : Real64.t -> Real64.t +Real64.Math.tan = _import INLINE : Real64.t -> Real64.t +Real64.Math.tanh = _import INLINE : Real64.t -> Real64.t +Real64.abs = _import INLINE : Real64.t -> Real64.t +Real64.add = _import INLINE : Real64.t * Real64.t -> Real64.t +Real64.castToWord64 = _import INLINE : Real64.t -> Word64.t +Real64.div = _import INLINE : Real64.t * Real64.t -> Real64.t +Real64.equal = _import INLINE : Real64.t * Real64.t -> Bool.t +Real64.fetch = _import INLINE : Real64.t ref -> Real64.t +Real64.frexp = _import INLINE : Real64.t * C_Int.t ref -> Real64.t +Real64.gdtoa = _import : Real64.t * C_Int.t * C_Int.t * C_Int.t * C_Int.t ref -> C_String.t +Real64.ldexp = _import INLINE : Real64.t * C_Int.t -> Real64.t +Real64.le = _import INLINE : Real64.t * Real64.t -> Bool.t +Real64.lt = _import INLINE : Real64.t * Real64.t -> Bool.t +Real64.modf = _import INLINE : Real64.t * Real64.t ref -> Real64.t +Real64.move = _import INLINE : Real64.t ref * Real64.t ref -> unit +Real64.mul = _import INLINE : Real64.t * Real64.t -> Real64.t +Real64.muladd = _import INLINE : Real64.t * Real64.t * Real64.t -> Real64.t +Real64.mulsub = _import INLINE : Real64.t * Real64.t * Real64.t -> Real64.t +Real64.neg = _import INLINE : Real64.t -> Real64.t +Real64.realCeil = _import INLINE : Real64.t -> Real64.t +Real64.realFloor = _import INLINE : Real64.t -> Real64.t +Real64.realTrunc = _import INLINE : Real64.t -> Real64.t +Real64.rndToReal32 = _import INLINE : Real64.t -> Real32.t +Real64.rndToReal64 = _import INLINE : Real64.t -> Real64.t +Real64.rndToWordS16 = _import INLINE : Real64.t -> Int16.t +Real64.rndToWordS32 = _import INLINE : Real64.t -> Int32.t +Real64.rndToWordS64 = _import INLINE : Real64.t -> Int64.t +Real64.rndToWordS8 = _import INLINE : Real64.t -> Int8.t +Real64.rndToWordU16 = _import INLINE : Real64.t -> Word16.t +Real64.rndToWordU32 = _import INLINE : Real64.t -> Word32.t +Real64.rndToWordU64 = _import INLINE : Real64.t -> Word64.t +Real64.rndToWordU8 = _import INLINE : Real64.t -> Word8.t +Real64.round = _import INLINE : Real64.t -> Real64.t +Real64.store = _import INLINE : Real64.t ref * Real64.t -> unit +Real64.strtor = _import : NullString8.t * C_Int.t -> Real64.t +Real64.sub = _import INLINE : Real64.t * Real64.t -> Real64.t +Word16.add = _import INLINE : Word16.t * Word16.t -> Word16.t +Word16.andb = _import INLINE : Word16.t * Word16.t -> Word16.t +Word16.equal = _import INLINE : Word16.t * Word16.t -> Bool.t +Word16.lshift = _import INLINE : Word16.t * Word32.t -> Word16.t +Word16.neg = _import INLINE : Word16.t -> Word16.t +Word16.notb = _import INLINE : Word16.t -> Word16.t +Word16.orb = _import INLINE : Word16.t * Word16.t -> Word16.t +Word16.rol = _import INLINE : Word16.t * Word32.t -> Word16.t +Word16.ror = _import INLINE : Word16.t * Word32.t -> Word16.t +Word16.sub = _import INLINE : Word16.t * Word16.t -> Word16.t +Word16.xorb = _import INLINE : Word16.t * Word16.t -> Word16.t +Word32.add = _import INLINE : Word32.t * Word32.t -> Word32.t +Word32.andb = _import INLINE : Word32.t * Word32.t -> Word32.t +Word32.castToReal32 = _import INLINE : Word32.t -> Real32.t +Word32.equal = _import INLINE : Word32.t * Word32.t -> Bool.t +Word32.lshift = _import INLINE : Word32.t * Word32.t -> Word32.t +Word32.neg = _import INLINE : Word32.t -> Word32.t +Word32.notb = _import INLINE : Word32.t -> Word32.t +Word32.orb = _import INLINE : Word32.t * Word32.t -> Word32.t +Word32.rol = _import INLINE : Word32.t * Word32.t -> Word32.t +Word32.ror = _import INLINE : Word32.t * Word32.t -> Word32.t +Word32.sub = _import INLINE : Word32.t * Word32.t -> Word32.t +Word32.xorb = _import INLINE : Word32.t * Word32.t -> Word32.t +Word64.add = _import INLINE : Word64.t * Word64.t -> Word64.t +Word64.andb = _import INLINE : Word64.t * Word64.t -> Word64.t +Word64.castToReal64 = _import INLINE : Word64.t -> Real64.t +Word64.equal = _import INLINE : Word64.t * Word64.t -> Bool.t +Word64.fetch = _import INLINE : Word64.t ref -> Word64.t +Word64.lshift = _import INLINE : Word64.t * Word32.t -> Word64.t +Word64.move = _import INLINE : Word64.t ref * Word64.t ref -> unit +Word64.neg = _import INLINE : Word64.t -> Word64.t +Word64.notb = _import INLINE : Word64.t -> Word64.t +Word64.orb = _import INLINE : Word64.t * Word64.t -> Word64.t +Word64.rol = _import INLINE : Word64.t * Word32.t -> Word64.t +Word64.ror = _import INLINE : Word64.t * Word32.t -> Word64.t +Word64.store = _import INLINE : Word64.t ref * Word64.t -> unit +Word64.sub = _import INLINE : Word64.t * Word64.t -> Word64.t +Word64.xorb = _import INLINE : Word64.t * Word64.t -> Word64.t +Word8.add = _import INLINE : Word8.t * Word8.t -> Word8.t +Word8.andb = _import INLINE : Word8.t * Word8.t -> Word8.t +Word8.equal = _import INLINE : Word8.t * Word8.t -> Bool.t +Word8.lshift = _import INLINE : Word8.t * Word32.t -> Word8.t +Word8.neg = _import INLINE : Word8.t -> Word8.t +Word8.notb = _import INLINE : Word8.t -> Word8.t +Word8.orb = _import INLINE : Word8.t * Word8.t -> Word8.t +Word8.rol = _import INLINE : Word8.t * Word32.t -> Word8.t +Word8.ror = _import INLINE : Word8.t * Word32.t -> Word8.t +Word8.sub = _import INLINE : Word8.t * Word8.t -> Word8.t +Word8.xorb = _import INLINE : Word8.t * Word8.t -> Word8.t +WordS16.addCheckP = _import INLINE : Int16.t * Int16.t -> Bool.t +WordS16.extdToWord16 = _import INLINE : Int16.t -> Word16.t +WordS16.extdToWord32 = _import INLINE : Int16.t -> Word32.t +WordS16.extdToWord64 = _import INLINE : Int16.t -> Word64.t +WordS16.extdToWord8 = _import INLINE : Int16.t -> Word8.t +WordS16.ge = _import INLINE : Int16.t * Int16.t -> Bool.t +WordS16.gt = _import INLINE : Int16.t * Int16.t -> Bool.t +WordS16.le = _import INLINE : Int16.t * Int16.t -> Bool.t +WordS16.lt = _import INLINE : Int16.t * Int16.t -> Bool.t +WordS16.mul = _import INLINE : Int16.t * Int16.t -> Int16.t +WordS16.mulCheckP = _import INLINE : Int16.t * Int16.t -> Bool.t +WordS16.negCheckP = _import INLINE : Int16.t -> Bool.t +WordS16.quot = _import INLINE : Int16.t * Int16.t -> Int16.t +WordS16.rem = _import INLINE : Int16.t * Int16.t -> Int16.t +WordS16.rndToReal32 = _import : Int16.t -> Real32.t +WordS16.rndToReal64 = _import : Int16.t -> Real64.t +WordS16.rshift = _import INLINE : Int16.t * Word32.t -> Int16.t +WordS16.subCheckP = _import INLINE : Int16.t * Int16.t -> Bool.t +WordS32.addCheckP = _import INLINE : Int32.t * Int32.t -> Bool.t +WordS32.extdToWord16 = _import INLINE : Int32.t -> Word16.t +WordS32.extdToWord32 = _import INLINE : Int32.t -> Word32.t +WordS32.extdToWord64 = _import INLINE : Int32.t -> Word64.t +WordS32.extdToWord8 = _import INLINE : Int32.t -> Word8.t +WordS32.ge = _import INLINE : Int32.t * Int32.t -> Bool.t +WordS32.gt = _import INLINE : Int32.t * Int32.t -> Bool.t +WordS32.le = _import INLINE : Int32.t * Int32.t -> Bool.t +WordS32.lt = _import INLINE : Int32.t * Int32.t -> Bool.t +WordS32.mul = _import INLINE : Int32.t * Int32.t -> Int32.t +WordS32.mulCheckP = _import INLINE : Int32.t * Int32.t -> Bool.t +WordS32.negCheckP = _import INLINE : Int32.t -> Bool.t +WordS32.quot = _import INLINE : Int32.t * Int32.t -> Int32.t +WordS32.rem = _import INLINE : Int32.t * Int32.t -> Int32.t +WordS32.rndToReal32 = _import : Int32.t -> Real32.t +WordS32.rndToReal64 = _import : Int32.t -> Real64.t +WordS32.rshift = _import INLINE : Int32.t * Word32.t -> Int32.t +WordS32.subCheckP = _import INLINE : Int32.t * Int32.t -> Bool.t +WordS64.addCheckP = _import INLINE : Int64.t * Int64.t -> Bool.t +WordS64.extdToWord16 = _import INLINE : Int64.t -> Word16.t +WordS64.extdToWord32 = _import INLINE : Int64.t -> Word32.t +WordS64.extdToWord64 = _import INLINE : Int64.t -> Word64.t +WordS64.extdToWord8 = _import INLINE : Int64.t -> Word8.t +WordS64.ge = _import INLINE : Int64.t * Int64.t -> Bool.t +WordS64.gt = _import INLINE : Int64.t * Int64.t -> Bool.t +WordS64.le = _import INLINE : Int64.t * Int64.t -> Bool.t +WordS64.lt = _import INLINE : Int64.t * Int64.t -> Bool.t +WordS64.mul = _import INLINE : Int64.t * Int64.t -> Int64.t +WordS64.mulCheckP = _import INLINE : Int64.t * Int64.t -> Bool.t +WordS64.negCheckP = _import INLINE : Int64.t -> Bool.t +WordS64.quot = _import INLINE : Int64.t * Int64.t -> Int64.t +WordS64.rem = _import INLINE : Int64.t * Int64.t -> Int64.t +WordS64.rndToReal32 = _import : Int64.t -> Real32.t +WordS64.rndToReal64 = _import : Int64.t -> Real64.t +WordS64.rshift = _import INLINE : Int64.t * Word32.t -> Int64.t +WordS64.subCheckP = _import INLINE : Int64.t * Int64.t -> Bool.t +WordS8.addCheckP = _import INLINE : Int8.t * Int8.t -> Bool.t +WordS8.extdToWord16 = _import INLINE : Int8.t -> Word16.t +WordS8.extdToWord32 = _import INLINE : Int8.t -> Word32.t +WordS8.extdToWord64 = _import INLINE : Int8.t -> Word64.t +WordS8.extdToWord8 = _import INLINE : Int8.t -> Word8.t +WordS8.ge = _import INLINE : Int8.t * Int8.t -> Bool.t +WordS8.gt = _import INLINE : Int8.t * Int8.t -> Bool.t +WordS8.le = _import INLINE : Int8.t * Int8.t -> Bool.t +WordS8.lt = _import INLINE : Int8.t * Int8.t -> Bool.t +WordS8.mul = _import INLINE : Int8.t * Int8.t -> Int8.t +WordS8.mulCheckP = _import INLINE : Int8.t * Int8.t -> Bool.t +WordS8.negCheckP = _import INLINE : Int8.t -> Bool.t +WordS8.quot = _import INLINE : Int8.t * Int8.t -> Int8.t +WordS8.rem = _import INLINE : Int8.t * Int8.t -> Int8.t +WordS8.rndToReal32 = _import : Int8.t -> Real32.t +WordS8.rndToReal64 = _import : Int8.t -> Real64.t +WordS8.rshift = _import INLINE : Int8.t * Word32.t -> Int8.t +WordS8.subCheckP = _import INLINE : Int8.t * Int8.t -> Bool.t +WordU16.addCheckP = _import INLINE : Word16.t * Word16.t -> Bool.t +WordU16.extdToWord16 = _import INLINE : Word16.t -> Word16.t +WordU16.extdToWord32 = _import INLINE : Word16.t -> Word32.t +WordU16.extdToWord64 = _import INLINE : Word16.t -> Word64.t +WordU16.extdToWord8 = _import INLINE : Word16.t -> Word8.t +WordU16.ge = _import INLINE : Word16.t * Word16.t -> Bool.t +WordU16.gt = _import INLINE : Word16.t * Word16.t -> Bool.t +WordU16.le = _import INLINE : Word16.t * Word16.t -> Bool.t +WordU16.lt = _import INLINE : Word16.t * Word16.t -> Bool.t +WordU16.mul = _import INLINE : Word16.t * Word16.t -> Word16.t +WordU16.mulCheckP = _import INLINE : Word16.t * Word16.t -> Bool.t +WordU16.negCheckP = _import INLINE : Word16.t -> Bool.t +WordU16.quot = _import INLINE : Word16.t * Word16.t -> Word16.t +WordU16.rem = _import INLINE : Word16.t * Word16.t -> Word16.t +WordU16.rndToReal32 = _import : Word16.t -> Real32.t +WordU16.rndToReal64 = _import : Word16.t -> Real64.t +WordU16.rshift = _import INLINE : Word16.t * Word32.t -> Word16.t +WordU16.subCheckP = _import INLINE : Word16.t * Word16.t -> Bool.t +WordU32.addCheckP = _import INLINE : Word32.t * Word32.t -> Bool.t +WordU32.extdToWord16 = _import INLINE : Word32.t -> Word16.t +WordU32.extdToWord32 = _import INLINE : Word32.t -> Word32.t +WordU32.extdToWord64 = _import INLINE : Word32.t -> Word64.t +WordU32.extdToWord8 = _import INLINE : Word32.t -> Word8.t +WordU32.ge = _import INLINE : Word32.t * Word32.t -> Bool.t +WordU32.gt = _import INLINE : Word32.t * Word32.t -> Bool.t +WordU32.le = _import INLINE : Word32.t * Word32.t -> Bool.t +WordU32.lt = _import INLINE : Word32.t * Word32.t -> Bool.t +WordU32.mul = _import INLINE : Word32.t * Word32.t -> Word32.t +WordU32.mulCheckP = _import INLINE : Word32.t * Word32.t -> Bool.t +WordU32.negCheckP = _import INLINE : Word32.t -> Bool.t +WordU32.quot = _import INLINE : Word32.t * Word32.t -> Word32.t +WordU32.rem = _import INLINE : Word32.t * Word32.t -> Word32.t +WordU32.rndToReal32 = _import : Word32.t -> Real32.t +WordU32.rndToReal64 = _import : Word32.t -> Real64.t +WordU32.rshift = _import INLINE : Word32.t * Word32.t -> Word32.t +WordU32.subCheckP = _import INLINE : Word32.t * Word32.t -> Bool.t +WordU64.addCheckP = _import INLINE : Word64.t * Word64.t -> Bool.t +WordU64.extdToWord16 = _import INLINE : Word64.t -> Word16.t +WordU64.extdToWord32 = _import INLINE : Word64.t -> Word32.t +WordU64.extdToWord64 = _import INLINE : Word64.t -> Word64.t +WordU64.extdToWord8 = _import INLINE : Word64.t -> Word8.t +WordU64.ge = _import INLINE : Word64.t * Word64.t -> Bool.t +WordU64.gt = _import INLINE : Word64.t * Word64.t -> Bool.t +WordU64.le = _import INLINE : Word64.t * Word64.t -> Bool.t +WordU64.lt = _import INLINE : Word64.t * Word64.t -> Bool.t +WordU64.mul = _import INLINE : Word64.t * Word64.t -> Word64.t +WordU64.mulCheckP = _import INLINE : Word64.t * Word64.t -> Bool.t +WordU64.negCheckP = _import INLINE : Word64.t -> Bool.t +WordU64.quot = _import INLINE : Word64.t * Word64.t -> Word64.t +WordU64.rem = _import INLINE : Word64.t * Word64.t -> Word64.t +WordU64.rndToReal32 = _import : Word64.t -> Real32.t +WordU64.rndToReal64 = _import : Word64.t -> Real64.t +WordU64.rshift = _import INLINE : Word64.t * Word32.t -> Word64.t +WordU64.subCheckP = _import INLINE : Word64.t * Word64.t -> Bool.t +WordU8.addCheckP = _import INLINE : Word8.t * Word8.t -> Bool.t +WordU8.extdToWord16 = _import INLINE : Word8.t -> Word16.t +WordU8.extdToWord32 = _import INLINE : Word8.t -> Word32.t +WordU8.extdToWord64 = _import INLINE : Word8.t -> Word64.t +WordU8.extdToWord8 = _import INLINE : Word8.t -> Word8.t +WordU8.ge = _import INLINE : Word8.t * Word8.t -> Bool.t +WordU8.gt = _import INLINE : Word8.t * Word8.t -> Bool.t +WordU8.le = _import INLINE : Word8.t * Word8.t -> Bool.t +WordU8.lt = _import INLINE : Word8.t * Word8.t -> Bool.t +WordU8.mul = _import INLINE : Word8.t * Word8.t -> Word8.t +WordU8.mulCheckP = _import INLINE : Word8.t * Word8.t -> Bool.t +WordU8.negCheckP = _import INLINE : Word8.t -> Bool.t +WordU8.quot = _import INLINE : Word8.t * Word8.t -> Word8.t +WordU8.rem = _import INLINE : Word8.t * Word8.t -> Word8.t +WordU8.rndToReal32 = _import : Word8.t -> Real32.t +WordU8.rndToReal64 = _import : Word8.t -> Real64.t +WordU8.rshift = _import INLINE : Word8.t * Word32.t -> Word8.t +WordU8.subCheckP = _import INLINE : Word8.t * Word8.t -> Bool.t diff -Nru mlton-20130715/runtime/gen/basis-ffi.h mlton-20210117+dfsg/runtime/gen/basis-ffi.h --- mlton-20130715/runtime/gen/basis-ffi.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/basis-ffi.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,10 +1,7 @@ /* This file is automatically generated. Do not edit. */ - #ifndef _MLTON_BASIS_FFI_H_ - #define _MLTON_BASIS_FFI_H_ - PRIVATE extern C_Int_t CommandLine_argc; PRIVATE extern C_StringArray_t CommandLine_argv; PRIVATE extern C_String_t CommandLine_commandName; @@ -72,7 +69,7 @@ PRIVATE C_SUSeconds_t MLton_Rusage_gc_stime_usec(void); PRIVATE C_Time_t MLton_Rusage_gc_utime_sec(void); PRIVATE C_SUSeconds_t MLton_Rusage_gc_utime_usec(void); -PRIVATE void MLton_Rusage_getrusage(void); +PRIVATE void MLton_Rusage_getrusage(GCState_t); PRIVATE C_Time_t MLton_Rusage_self_stime_sec(void); PRIVATE C_SUSeconds_t MLton_Rusage_self_stime_usec(void); PRIVATE C_Time_t MLton_Rusage_self_utime_sec(void); @@ -568,42 +565,43 @@ PRIVATE extern const C_Int_t Posix_Process_W_NOHANG; PRIVATE extern const C_Int_t Posix_Process_W_UNTRACED; PRIVATE C_Errno_t(C_PId_t) Posix_Process_waitpid(C_PId_t,Ref(C_Status_t),C_Int_t); -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_default(C_Signal_t); -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_handlee(C_Signal_t); -PRIVATE void Posix_Signal_handleGC(void); -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_ignore(C_Signal_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_default(GCState_t,C_Signal_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_handlee(GCState_t,C_Signal_t); +PRIVATE void Posix_Signal_handleGC(GCState_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_ignore(GCState_t,C_Signal_t); PRIVATE C_Errno_t(C_Int_t) Posix_Signal_isDefault(C_Signal_t,Ref(C_Int_t)); PRIVATE C_Errno_t(C_Int_t) Posix_Signal_isIgnore(C_Signal_t,Ref(C_Int_t)); -PRIVATE C_Int_t Posix_Signal_isPending(C_Signal_t); -PRIVATE C_Int_t Posix_Signal_isPendingGC(void); +PRIVATE C_Int_t Posix_Signal_isPending(GCState_t,C_Signal_t); +PRIVATE C_Int_t Posix_Signal_isPendingGC(GCState_t); PRIVATE extern const C_Int_t Posix_Signal_NSIG; -PRIVATE void Posix_Signal_resetPending(void); +PRIVATE void Posix_Signal_resetPending(GCState_t); PRIVATE extern const C_Int_t Posix_Signal_SIG_BLOCK; PRIVATE extern const C_Int_t Posix_Signal_SIG_SETMASK; PRIVATE extern const C_Int_t Posix_Signal_SIG_UNBLOCK; PRIVATE extern const C_Signal_t Posix_Signal_SIGABRT; -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigaddset(C_Signal_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigaddset(Array(Word8_t),C_Signal_t); PRIVATE extern const C_Signal_t Posix_Signal_SIGALRM; PRIVATE extern const C_Signal_t Posix_Signal_SIGBUS; PRIVATE extern const C_Signal_t Posix_Signal_SIGCHLD; PRIVATE extern const C_Signal_t Posix_Signal_SIGCONT; -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigdelset(C_Signal_t); -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigemptyset(void); -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigfillset(void); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigdelset(Array(Word8_t),C_Signal_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigemptyset(Array(Word8_t)); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigfillset(Array(Word8_t)); PRIVATE extern const C_Signal_t Posix_Signal_SIGFPE; PRIVATE extern const C_Signal_t Posix_Signal_SIGHUP; PRIVATE extern const C_Signal_t Posix_Signal_SIGILL; PRIVATE extern const C_Signal_t Posix_Signal_SIGINT; -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigismember(C_Signal_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigismember(Vector(Word8_t),C_Signal_t); PRIVATE extern const C_Signal_t Posix_Signal_SIGKILL; PRIVATE extern const C_Signal_t Posix_Signal_SIGPIPE; PRIVATE extern const C_Signal_t Posix_Signal_SIGPOLL; -PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigprocmask(C_Int_t); +PRIVATE C_Errno_t(C_Int_t) Posix_Signal_sigprocmask(C_Int_t,Vector(Word8_t),Array(Word8_t)); PRIVATE extern const C_Signal_t Posix_Signal_SIGPROF; PRIVATE extern const C_Signal_t Posix_Signal_SIGQUIT; PRIVATE extern const C_Signal_t Posix_Signal_SIGSEGV; +PRIVATE extern const C_Size_t Posix_Signal_sigSetLen; PRIVATE extern const C_Signal_t Posix_Signal_SIGSTOP; -PRIVATE void Posix_Signal_sigsuspend(void); +PRIVATE void Posix_Signal_sigsuspend(Vector(Word8_t)); PRIVATE extern const C_Signal_t Posix_Signal_SIGSYS; PRIVATE extern const C_Signal_t Posix_Signal_SIGTERM; PRIVATE extern const C_Signal_t Posix_Signal_SIGTRAP; @@ -748,108 +746,104 @@ PRIVATE extern const C_Int_t Posix_TTY_V_VSTOP; PRIVATE extern const C_Int_t Posix_TTY_V_VSUSP; PRIVATE extern const C_Int_t Posix_TTY_V_VTIME; -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_abs(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_add(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Real32_castToWord32(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_div(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real32_equal(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_fetch(Ref(Real32_t)); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_frexp(Real32_t,Ref(C_Int_t)); +PRIVATE INLINE Real32_t Real32_abs(Real32_t); +PRIVATE INLINE Real32_t Real32_add(Real32_t,Real32_t); +PRIVATE INLINE Word32_t Real32_castToWord32(Real32_t); +PRIVATE INLINE Real32_t Real32_div(Real32_t,Real32_t); +PRIVATE INLINE Bool_t Real32_equal(Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_fetch(Ref(Real32_t)); +PRIVATE INLINE Real32_t Real32_frexp(Real32_t,Ref(C_Int_t)); PRIVATE C_String_t Real32_gdtoa(Real32_t,C_Int_t,C_Int_t,C_Int_t,Ref(C_Int_t)); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_ldexp(Real32_t,C_Int_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real32_le(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real32_lt(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_acos(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_asin(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_atan(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_atan2(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_cos(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_cosh(Real32_t); -PRIVATE extern Real32_t Real32_Math_e; -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_exp(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_ln(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_log10(Real32_t); -PRIVATE extern Real32_t Real32_Math_pi; -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_pow(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_sin(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_sinh(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_sqrt(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_tan(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_Math_tanh(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_modf(Real32_t,Ref(Real32_t)); -MLTON_CODEGEN_STATIC_INLINE void Real32_move(Ref(Real32_t),Ref(Real32_t)); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_mul(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_muladd(Real32_t,Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_mulsub(Real32_t,Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_neg(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_realCeil(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_realFloor(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_realTrunc(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_rndToReal32(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real32_rndToReal64(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Int16_t Real32_rndToWordS16(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Int32_t Real32_rndToWordS32(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Int64_t Real32_rndToWordS64(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Int8_t Real32_rndToWordS8(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Real32_rndToWordU16(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Real32_rndToWordU32(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Real32_rndToWordU64(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Real32_rndToWordU8(Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_round(Real32_t); -MLTON_CODEGEN_STATIC_INLINE void Real32_store(Ref(Real32_t),Real32_t); +PRIVATE INLINE Real32_t Real32_ldexp(Real32_t,C_Int_t); +PRIVATE INLINE Bool_t Real32_le(Real32_t,Real32_t); +PRIVATE INLINE Bool_t Real32_lt(Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_Math_acos(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_asin(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_atan(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_atan2(Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_Math_cos(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_cosh(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_exp(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_ln(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_log10(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_pow(Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_Math_sin(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_sinh(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_sqrt(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_tan(Real32_t); +PRIVATE INLINE Real32_t Real32_Math_tanh(Real32_t); +PRIVATE INLINE Real32_t Real32_modf(Real32_t,Ref(Real32_t)); +PRIVATE INLINE void Real32_move(Ref(Real32_t),Ref(Real32_t)); +PRIVATE INLINE Real32_t Real32_mul(Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_muladd(Real32_t,Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_mulsub(Real32_t,Real32_t,Real32_t); +PRIVATE INLINE Real32_t Real32_neg(Real32_t); +PRIVATE INLINE Real32_t Real32_realCeil(Real32_t); +PRIVATE INLINE Real32_t Real32_realFloor(Real32_t); +PRIVATE INLINE Real32_t Real32_realTrunc(Real32_t); +PRIVATE INLINE Real32_t Real32_rndToReal32(Real32_t); +PRIVATE INLINE Real64_t Real32_rndToReal64(Real32_t); +PRIVATE INLINE Int16_t Real32_rndToWordS16(Real32_t); +PRIVATE INLINE Int32_t Real32_rndToWordS32(Real32_t); +PRIVATE INLINE Int64_t Real32_rndToWordS64(Real32_t); +PRIVATE INLINE Int8_t Real32_rndToWordS8(Real32_t); +PRIVATE INLINE Word16_t Real32_rndToWordU16(Real32_t); +PRIVATE INLINE Word32_t Real32_rndToWordU32(Real32_t); +PRIVATE INLINE Word64_t Real32_rndToWordU64(Real32_t); +PRIVATE INLINE Word8_t Real32_rndToWordU8(Real32_t); +PRIVATE INLINE Real32_t Real32_round(Real32_t); +PRIVATE INLINE void Real32_store(Ref(Real32_t),Real32_t); PRIVATE Real32_t Real32_strtor(NullString8_t,C_Int_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real32_sub(Real32_t,Real32_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_abs(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_add(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Real64_castToWord64(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_div(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real64_equal(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_fetch(Ref(Real64_t)); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_frexp(Real64_t,Ref(C_Int_t)); +PRIVATE INLINE Real32_t Real32_sub(Real32_t,Real32_t); +PRIVATE INLINE Real64_t Real64_abs(Real64_t); +PRIVATE INLINE Real64_t Real64_add(Real64_t,Real64_t); +PRIVATE INLINE Word64_t Real64_castToWord64(Real64_t); +PRIVATE INLINE Real64_t Real64_div(Real64_t,Real64_t); +PRIVATE INLINE Bool_t Real64_equal(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_fetch(Ref(Real64_t)); +PRIVATE INLINE Real64_t Real64_frexp(Real64_t,Ref(C_Int_t)); PRIVATE C_String_t Real64_gdtoa(Real64_t,C_Int_t,C_Int_t,C_Int_t,Ref(C_Int_t)); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_ldexp(Real64_t,C_Int_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real64_le(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Real64_lt(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_acos(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_asin(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_atan(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_atan2(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_cos(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_cosh(Real64_t); -PRIVATE extern Real64_t Real64_Math_e; -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_exp(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_ln(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_log10(Real64_t); -PRIVATE extern Real64_t Real64_Math_pi; -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_pow(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_sin(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_sinh(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_sqrt(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_tan(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_Math_tanh(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_modf(Real64_t,Ref(Real64_t)); -MLTON_CODEGEN_STATIC_INLINE void Real64_move(Ref(Real64_t),Ref(Real64_t)); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_mul(Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_muladd(Real64_t,Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_mulsub(Real64_t,Real64_t,Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_neg(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_realCeil(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_realFloor(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_realTrunc(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Real64_rndToReal32(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_rndToReal64(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Int16_t Real64_rndToWordS16(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Int32_t Real64_rndToWordS32(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Int64_t Real64_rndToWordS64(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Int8_t Real64_rndToWordS8(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Real64_rndToWordU16(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Real64_rndToWordU32(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Real64_rndToWordU64(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Real64_rndToWordU8(Real64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_round(Real64_t); -MLTON_CODEGEN_STATIC_INLINE void Real64_store(Ref(Real64_t),Real64_t); +PRIVATE INLINE Real64_t Real64_ldexp(Real64_t,C_Int_t); +PRIVATE INLINE Bool_t Real64_le(Real64_t,Real64_t); +PRIVATE INLINE Bool_t Real64_lt(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_Math_acos(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_asin(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_atan(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_atan2(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_Math_cos(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_cosh(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_exp(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_ln(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_log10(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_pow(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_Math_sin(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_sinh(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_sqrt(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_tan(Real64_t); +PRIVATE INLINE Real64_t Real64_Math_tanh(Real64_t); +PRIVATE INLINE Real64_t Real64_modf(Real64_t,Ref(Real64_t)); +PRIVATE INLINE void Real64_move(Ref(Real64_t),Ref(Real64_t)); +PRIVATE INLINE Real64_t Real64_mul(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_muladd(Real64_t,Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_mulsub(Real64_t,Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_neg(Real64_t); +PRIVATE INLINE Real64_t Real64_realCeil(Real64_t); +PRIVATE INLINE Real64_t Real64_realFloor(Real64_t); +PRIVATE INLINE Real64_t Real64_realTrunc(Real64_t); +PRIVATE INLINE Real32_t Real64_rndToReal32(Real64_t); +PRIVATE INLINE Real64_t Real64_rndToReal64(Real64_t); +PRIVATE INLINE Int16_t Real64_rndToWordS16(Real64_t); +PRIVATE INLINE Int32_t Real64_rndToWordS32(Real64_t); +PRIVATE INLINE Int64_t Real64_rndToWordS64(Real64_t); +PRIVATE INLINE Int8_t Real64_rndToWordS8(Real64_t); +PRIVATE INLINE Word16_t Real64_rndToWordU16(Real64_t); +PRIVATE INLINE Word32_t Real64_rndToWordU32(Real64_t); +PRIVATE INLINE Word64_t Real64_rndToWordU64(Real64_t); +PRIVATE INLINE Word8_t Real64_rndToWordU8(Real64_t); +PRIVATE INLINE Real64_t Real64_round(Real64_t); +PRIVATE INLINE void Real64_store(Ref(Real64_t),Real64_t); PRIVATE Real64_t Real64_strtor(NullString8_t,C_Int_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Real64_sub(Real64_t,Real64_t); +PRIVATE INLINE Real64_t Real64_sub(Real64_t,Real64_t); PRIVATE C_Errno_t(C_Int_t) Socket_accept(C_Sock_t,Array(Word8_t),Ref(C_Socklen_t)); PRIVATE extern const C_Int_t Socket_AF_INET; PRIVATE extern const C_Int_t Socket_AF_INET6; @@ -932,189 +926,197 @@ PRIVATE C_Errno_t(C_PId_t) Windows_Process_createNull(NullString8_t,NullString8_t,C_Fd_t,C_Fd_t,C_Fd_t); PRIVATE C_Errno_t(C_Int_t) Windows_Process_getexitcode(C_PId_t,Ref(C_Status_t)); PRIVATE C_Errno_t(C_Int_t) Windows_Process_terminate(C_PId_t,C_Signal_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_add(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_andb(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Word16_equal(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_lshift(Word16_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_neg(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_notb(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_orb(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_rol(Word16_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_ror(Word16_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_sub(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t Word16_xorb(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_add(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_andb(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Real32_t Word32_castToReal32(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Word32_equal(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_lshift(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_neg(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_notb(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_orb(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_rol(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_ror(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_sub(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t Word32_xorb(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_add(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_andb(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Real64_t Word64_castToReal64(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Word64_equal(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_fetch(Ref(Word64_t)); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_lshift(Word64_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE void Word64_move(Ref(Word64_t),Ref(Word64_t)); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_neg(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_notb(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_orb(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_rol(Word64_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_ror(Word64_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE void Word64_store(Ref(Word64_t),Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_sub(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t Word64_xorb(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_add(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_andb(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t Word8_equal(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_lshift(Word8_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_neg(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_notb(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_orb(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_rol(Word8_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_ror(Word8_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_sub(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t Word8_xorb(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_addCheckOverflows(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordS16_extdToWord16(Int16_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordS16_extdToWord32(Int16_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordS16_extdToWord64(Int16_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordS16_extdToWord8(Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_ge(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_gt(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_le(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_lt(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Int16_t WordS16_mul(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_mulCheckOverflows(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_negCheckOverflows(Int16_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int16_t WordS16_quot(Int16_t,Int16_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int16_t WordS16_rem(Int16_t,Int16_t); +PRIVATE INLINE Word16_t Word16_add(Word16_t,Word16_t); +PRIVATE INLINE Word16_t Word16_andb(Word16_t,Word16_t); +PRIVATE INLINE Bool_t Word16_equal(Word16_t,Word16_t); +PRIVATE INLINE Word16_t Word16_lshift(Word16_t,Word32_t); +PRIVATE INLINE Word16_t Word16_neg(Word16_t); +PRIVATE INLINE Word16_t Word16_notb(Word16_t); +PRIVATE INLINE Word16_t Word16_orb(Word16_t,Word16_t); +PRIVATE INLINE Word16_t Word16_rol(Word16_t,Word32_t); +PRIVATE INLINE Word16_t Word16_ror(Word16_t,Word32_t); +PRIVATE INLINE Word16_t Word16_sub(Word16_t,Word16_t); +PRIVATE INLINE Word16_t Word16_xorb(Word16_t,Word16_t); +PRIVATE INLINE Word32_t Word32_add(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_andb(Word32_t,Word32_t); +PRIVATE INLINE Real32_t Word32_castToReal32(Word32_t); +PRIVATE INLINE Bool_t Word32_equal(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_lshift(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_neg(Word32_t); +PRIVATE INLINE Word32_t Word32_notb(Word32_t); +PRIVATE INLINE Word32_t Word32_orb(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_rol(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_ror(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_sub(Word32_t,Word32_t); +PRIVATE INLINE Word32_t Word32_xorb(Word32_t,Word32_t); +PRIVATE INLINE Word64_t Word64_add(Word64_t,Word64_t); +PRIVATE INLINE Word64_t Word64_andb(Word64_t,Word64_t); +PRIVATE INLINE Real64_t Word64_castToReal64(Word64_t); +PRIVATE INLINE Bool_t Word64_equal(Word64_t,Word64_t); +PRIVATE INLINE Word64_t Word64_fetch(Ref(Word64_t)); +PRIVATE INLINE Word64_t Word64_lshift(Word64_t,Word32_t); +PRIVATE INLINE void Word64_move(Ref(Word64_t),Ref(Word64_t)); +PRIVATE INLINE Word64_t Word64_neg(Word64_t); +PRIVATE INLINE Word64_t Word64_notb(Word64_t); +PRIVATE INLINE Word64_t Word64_orb(Word64_t,Word64_t); +PRIVATE INLINE Word64_t Word64_rol(Word64_t,Word32_t); +PRIVATE INLINE Word64_t Word64_ror(Word64_t,Word32_t); +PRIVATE INLINE void Word64_store(Ref(Word64_t),Word64_t); +PRIVATE INLINE Word64_t Word64_sub(Word64_t,Word64_t); +PRIVATE INLINE Word64_t Word64_xorb(Word64_t,Word64_t); +PRIVATE INLINE Word8_t Word8_add(Word8_t,Word8_t); +PRIVATE INLINE Word8_t Word8_andb(Word8_t,Word8_t); +PRIVATE INLINE Bool_t Word8_equal(Word8_t,Word8_t); +PRIVATE INLINE Word8_t Word8_lshift(Word8_t,Word32_t); +PRIVATE INLINE Word8_t Word8_neg(Word8_t); +PRIVATE INLINE Word8_t Word8_notb(Word8_t); +PRIVATE INLINE Word8_t Word8_orb(Word8_t,Word8_t); +PRIVATE INLINE Word8_t Word8_rol(Word8_t,Word32_t); +PRIVATE INLINE Word8_t Word8_ror(Word8_t,Word32_t); +PRIVATE INLINE Word8_t Word8_sub(Word8_t,Word8_t); +PRIVATE INLINE Word8_t Word8_xorb(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordS16_addCheckP(Int16_t,Int16_t); +PRIVATE INLINE Word16_t WordS16_extdToWord16(Int16_t); +PRIVATE INLINE Word32_t WordS16_extdToWord32(Int16_t); +PRIVATE INLINE Word64_t WordS16_extdToWord64(Int16_t); +PRIVATE INLINE Word8_t WordS16_extdToWord8(Int16_t); +PRIVATE INLINE Bool_t WordS16_ge(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS16_gt(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS16_le(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS16_lt(Int16_t,Int16_t); +PRIVATE INLINE Int16_t WordS16_mul(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS16_mulCheckP(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS16_negCheckP(Int16_t); +PRIVATE INLINE Int16_t WordS16_quot(Int16_t,Int16_t); +PRIVATE INLINE Int16_t WordS16_rem(Int16_t,Int16_t); PRIVATE Real32_t WordS16_rndToReal32(Int16_t); PRIVATE Real64_t WordS16_rndToReal64(Int16_t); -MLTON_CODEGEN_STATIC_INLINE Int16_t WordS16_rshift(Int16_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS16_subCheckOverflows(Int16_t,Int16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_addCheckOverflows(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordS32_extdToWord16(Int32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordS32_extdToWord32(Int32_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordS32_extdToWord64(Int32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordS32_extdToWord8(Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_ge(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_gt(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_le(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_lt(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Int32_t WordS32_mul(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_mulCheckOverflows(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_negCheckOverflows(Int32_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int32_t WordS32_quot(Int32_t,Int32_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int32_t WordS32_rem(Int32_t,Int32_t); +PRIVATE INLINE Int16_t WordS16_rshift(Int16_t,Word32_t); +PRIVATE INLINE Bool_t WordS16_subCheckP(Int16_t,Int16_t); +PRIVATE INLINE Bool_t WordS32_addCheckP(Int32_t,Int32_t); +PRIVATE INLINE Word16_t WordS32_extdToWord16(Int32_t); +PRIVATE INLINE Word32_t WordS32_extdToWord32(Int32_t); +PRIVATE INLINE Word64_t WordS32_extdToWord64(Int32_t); +PRIVATE INLINE Word8_t WordS32_extdToWord8(Int32_t); +PRIVATE INLINE Bool_t WordS32_ge(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS32_gt(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS32_le(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS32_lt(Int32_t,Int32_t); +PRIVATE INLINE Int32_t WordS32_mul(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS32_mulCheckP(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS32_negCheckP(Int32_t); +PRIVATE INLINE Int32_t WordS32_quot(Int32_t,Int32_t); +PRIVATE INLINE Int32_t WordS32_rem(Int32_t,Int32_t); PRIVATE Real32_t WordS32_rndToReal32(Int32_t); PRIVATE Real64_t WordS32_rndToReal64(Int32_t); -MLTON_CODEGEN_STATIC_INLINE Int32_t WordS32_rshift(Int32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS32_subCheckOverflows(Int32_t,Int32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_addCheckOverflows(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordS64_extdToWord16(Int64_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordS64_extdToWord32(Int64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordS64_extdToWord64(Int64_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordS64_extdToWord8(Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_ge(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_gt(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_le(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_lt(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Int64_t WordS64_mul(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_mulCheckOverflows(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_negCheckOverflows(Int64_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int64_t WordS64_quot(Int64_t,Int64_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int64_t WordS64_rem(Int64_t,Int64_t); +PRIVATE INLINE Int32_t WordS32_rshift(Int32_t,Word32_t); +PRIVATE INLINE Bool_t WordS32_subCheckP(Int32_t,Int32_t); +PRIVATE INLINE Bool_t WordS64_addCheckP(Int64_t,Int64_t); +PRIVATE INLINE Word16_t WordS64_extdToWord16(Int64_t); +PRIVATE INLINE Word32_t WordS64_extdToWord32(Int64_t); +PRIVATE INLINE Word64_t WordS64_extdToWord64(Int64_t); +PRIVATE INLINE Word8_t WordS64_extdToWord8(Int64_t); +PRIVATE INLINE Bool_t WordS64_ge(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS64_gt(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS64_le(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS64_lt(Int64_t,Int64_t); +PRIVATE INLINE Int64_t WordS64_mul(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS64_mulCheckP(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS64_negCheckP(Int64_t); +PRIVATE INLINE Int64_t WordS64_quot(Int64_t,Int64_t); +PRIVATE INLINE Int64_t WordS64_rem(Int64_t,Int64_t); PRIVATE Real32_t WordS64_rndToReal32(Int64_t); PRIVATE Real64_t WordS64_rndToReal64(Int64_t); -MLTON_CODEGEN_STATIC_INLINE Int64_t WordS64_rshift(Int64_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS64_subCheckOverflows(Int64_t,Int64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_addCheckOverflows(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordS8_extdToWord16(Int8_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordS8_extdToWord32(Int8_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordS8_extdToWord64(Int8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordS8_extdToWord8(Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_ge(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_gt(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_le(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_lt(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Int8_t WordS8_mul(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_mulCheckOverflows(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_negCheckOverflows(Int8_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int8_t WordS8_quot(Int8_t,Int8_t); -MLTON_CODEGEN_WORDSQUOTREM(MLTON_CODEGEN_STATIC_INLINE) Int8_t WordS8_rem(Int8_t,Int8_t); +PRIVATE INLINE Int64_t WordS64_rshift(Int64_t,Word32_t); +PRIVATE INLINE Bool_t WordS64_subCheckP(Int64_t,Int64_t); +PRIVATE INLINE Bool_t WordS8_addCheckP(Int8_t,Int8_t); +PRIVATE INLINE Word16_t WordS8_extdToWord16(Int8_t); +PRIVATE INLINE Word32_t WordS8_extdToWord32(Int8_t); +PRIVATE INLINE Word64_t WordS8_extdToWord64(Int8_t); +PRIVATE INLINE Word8_t WordS8_extdToWord8(Int8_t); +PRIVATE INLINE Bool_t WordS8_ge(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordS8_gt(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordS8_le(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordS8_lt(Int8_t,Int8_t); +PRIVATE INLINE Int8_t WordS8_mul(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordS8_mulCheckP(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordS8_negCheckP(Int8_t); +PRIVATE INLINE Int8_t WordS8_quot(Int8_t,Int8_t); +PRIVATE INLINE Int8_t WordS8_rem(Int8_t,Int8_t); PRIVATE Real32_t WordS8_rndToReal32(Int8_t); PRIVATE Real64_t WordS8_rndToReal64(Int8_t); -MLTON_CODEGEN_STATIC_INLINE Int8_t WordS8_rshift(Int8_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordS8_subCheckOverflows(Int8_t,Int8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_addCheckOverflows(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU16_extdToWord16(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU16_extdToWord32(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU16_extdToWord64(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU16_extdToWord8(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_ge(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_gt(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_le(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_lt(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU16_mul(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU16_mulCheckOverflows(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU16_quot(Word16_t,Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU16_rem(Word16_t,Word16_t); +PRIVATE INLINE Int8_t WordS8_rshift(Int8_t,Word32_t); +PRIVATE INLINE Bool_t WordS8_subCheckP(Int8_t,Int8_t); +PRIVATE INLINE Bool_t WordU16_addCheckP(Word16_t,Word16_t); +PRIVATE INLINE Word16_t WordU16_extdToWord16(Word16_t); +PRIVATE INLINE Word32_t WordU16_extdToWord32(Word16_t); +PRIVATE INLINE Word64_t WordU16_extdToWord64(Word16_t); +PRIVATE INLINE Word8_t WordU16_extdToWord8(Word16_t); +PRIVATE INLINE Bool_t WordU16_ge(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU16_gt(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU16_le(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU16_lt(Word16_t,Word16_t); +PRIVATE INLINE Word16_t WordU16_mul(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU16_mulCheckP(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU16_negCheckP(Word16_t); +PRIVATE INLINE Word16_t WordU16_quot(Word16_t,Word16_t); +PRIVATE INLINE Word16_t WordU16_rem(Word16_t,Word16_t); PRIVATE Real32_t WordU16_rndToReal32(Word16_t); PRIVATE Real64_t WordU16_rndToReal64(Word16_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU16_rshift(Word16_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_addCheckOverflows(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU32_extdToWord16(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU32_extdToWord32(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU32_extdToWord64(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU32_extdToWord8(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_ge(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_gt(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_le(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_lt(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU32_mul(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU32_mulCheckOverflows(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU32_quot(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU32_rem(Word32_t,Word32_t); +PRIVATE INLINE Word16_t WordU16_rshift(Word16_t,Word32_t); +PRIVATE INLINE Bool_t WordU16_subCheckP(Word16_t,Word16_t); +PRIVATE INLINE Bool_t WordU32_addCheckP(Word32_t,Word32_t); +PRIVATE INLINE Word16_t WordU32_extdToWord16(Word32_t); +PRIVATE INLINE Word32_t WordU32_extdToWord32(Word32_t); +PRIVATE INLINE Word64_t WordU32_extdToWord64(Word32_t); +PRIVATE INLINE Word8_t WordU32_extdToWord8(Word32_t); +PRIVATE INLINE Bool_t WordU32_ge(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_gt(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_le(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_lt(Word32_t,Word32_t); +PRIVATE INLINE Word32_t WordU32_mul(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_mulCheckP(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_negCheckP(Word32_t); +PRIVATE INLINE Word32_t WordU32_quot(Word32_t,Word32_t); +PRIVATE INLINE Word32_t WordU32_rem(Word32_t,Word32_t); PRIVATE Real32_t WordU32_rndToReal32(Word32_t); PRIVATE Real64_t WordU32_rndToReal64(Word32_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU32_rshift(Word32_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_addCheckOverflows(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU64_extdToWord16(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU64_extdToWord32(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU64_extdToWord64(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU64_extdToWord8(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_ge(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_gt(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_le(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_lt(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU64_mul(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU64_mulCheckOverflows(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU64_quot(Word64_t,Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU64_rem(Word64_t,Word64_t); +PRIVATE INLINE Word32_t WordU32_rshift(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU32_subCheckP(Word32_t,Word32_t); +PRIVATE INLINE Bool_t WordU64_addCheckP(Word64_t,Word64_t); +PRIVATE INLINE Word16_t WordU64_extdToWord16(Word64_t); +PRIVATE INLINE Word32_t WordU64_extdToWord32(Word64_t); +PRIVATE INLINE Word64_t WordU64_extdToWord64(Word64_t); +PRIVATE INLINE Word8_t WordU64_extdToWord8(Word64_t); +PRIVATE INLINE Bool_t WordU64_ge(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU64_gt(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU64_le(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU64_lt(Word64_t,Word64_t); +PRIVATE INLINE Word64_t WordU64_mul(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU64_mulCheckP(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU64_negCheckP(Word64_t); +PRIVATE INLINE Word64_t WordU64_quot(Word64_t,Word64_t); +PRIVATE INLINE Word64_t WordU64_rem(Word64_t,Word64_t); PRIVATE Real32_t WordU64_rndToReal32(Word64_t); PRIVATE Real64_t WordU64_rndToReal64(Word64_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU64_rshift(Word64_t,Word32_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_addCheckOverflows(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word16_t WordU8_extdToWord16(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word32_t WordU8_extdToWord32(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word64_t WordU8_extdToWord64(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU8_extdToWord8(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_ge(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_gt(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_le(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_lt(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU8_mul(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Bool_t WordU8_mulCheckOverflows(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU8_quot(Word8_t,Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU8_rem(Word8_t,Word8_t); +PRIVATE INLINE Word64_t WordU64_rshift(Word64_t,Word32_t); +PRIVATE INLINE Bool_t WordU64_subCheckP(Word64_t,Word64_t); +PRIVATE INLINE Bool_t WordU8_addCheckP(Word8_t,Word8_t); +PRIVATE INLINE Word16_t WordU8_extdToWord16(Word8_t); +PRIVATE INLINE Word32_t WordU8_extdToWord32(Word8_t); +PRIVATE INLINE Word64_t WordU8_extdToWord64(Word8_t); +PRIVATE INLINE Word8_t WordU8_extdToWord8(Word8_t); +PRIVATE INLINE Bool_t WordU8_ge(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordU8_gt(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordU8_le(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordU8_lt(Word8_t,Word8_t); +PRIVATE INLINE Word8_t WordU8_mul(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordU8_mulCheckP(Word8_t,Word8_t); +PRIVATE INLINE Bool_t WordU8_negCheckP(Word8_t); +PRIVATE INLINE Word8_t WordU8_quot(Word8_t,Word8_t); +PRIVATE INLINE Word8_t WordU8_rem(Word8_t,Word8_t); PRIVATE Real32_t WordU8_rndToReal32(Word8_t); PRIVATE Real64_t WordU8_rndToReal64(Word8_t); -MLTON_CODEGEN_STATIC_INLINE Word8_t WordU8_rshift(Word8_t,Word32_t); +PRIVATE INLINE Word8_t WordU8_rshift(Word8_t,Word32_t); +PRIVATE INLINE Bool_t WordU8_subCheckP(Word8_t,Word8_t); #endif /* _MLTON_BASIS_FFI_H_ */ diff -Nru mlton-20130715/runtime/gen/basis-ffi.h.chk mlton-20210117+dfsg/runtime/gen/basis-ffi.h.chk --- mlton-20130715/runtime/gen/basis-ffi.h.chk 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/basis-ffi.h.chk 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +cbda5224b17ce17c781e794dbcb904e68e40f458 diff -Nru mlton-20130715/runtime/gen/basis-ffi.sml mlton-20210117+dfsg/runtime/gen/basis-ffi.sml --- mlton-20130715/runtime/gen/basis-ffi.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/basis-ffi.sml 2021-12-28 17:19:36.000000000 +0000 @@ -104,7 +104,7 @@ val gc_stime_usec = _import "MLton_Rusage_gc_stime_usec" private : unit -> C_SUSeconds.t; val gc_utime_sec = _import "MLton_Rusage_gc_utime_sec" private : unit -> C_Time.t; val gc_utime_usec = _import "MLton_Rusage_gc_utime_usec" private : unit -> C_SUSeconds.t; -val getrusage = _import "MLton_Rusage_getrusage" private : unit -> unit; +val getrusage = _import "MLton_Rusage_getrusage" private : GCState.t -> unit; val self_stime_sec = _import "MLton_Rusage_self_stime_sec" private : unit -> C_Time.t; val self_stime_usec = _import "MLton_Rusage_self_stime_usec" private : unit -> C_SUSeconds.t; val self_utime_sec = _import "MLton_Rusage_self_utime_sec" private : unit -> C_Time.t; @@ -690,42 +690,43 @@ end structure Signal = struct -val default = _import "Posix_Signal_default" private : C_Signal.t -> (C_Int.t) C_Errno.t; -val handlee = _import "Posix_Signal_handlee" private : C_Signal.t -> (C_Int.t) C_Errno.t; -val handleGC = _import "Posix_Signal_handleGC" private : unit -> unit; -val ignore = _import "Posix_Signal_ignore" private : C_Signal.t -> (C_Int.t) C_Errno.t; +val default = _import "Posix_Signal_default" private : GCState.t * C_Signal.t -> (C_Int.t) C_Errno.t; +val handlee = _import "Posix_Signal_handlee" private : GCState.t * C_Signal.t -> (C_Int.t) C_Errno.t; +val handleGC = _import "Posix_Signal_handleGC" private : GCState.t -> unit; +val ignore = _import "Posix_Signal_ignore" private : GCState.t * C_Signal.t -> (C_Int.t) C_Errno.t; val isDefault = _import "Posix_Signal_isDefault" private : C_Signal.t * (C_Int.t) ref -> (C_Int.t) C_Errno.t; val isIgnore = _import "Posix_Signal_isIgnore" private : C_Signal.t * (C_Int.t) ref -> (C_Int.t) C_Errno.t; -val isPending = _import "Posix_Signal_isPending" private : C_Signal.t -> C_Int.t; -val isPendingGC = _import "Posix_Signal_isPendingGC" private : unit -> C_Int.t; +val isPending = _import "Posix_Signal_isPending" private : GCState.t * C_Signal.t -> C_Int.t; +val isPendingGC = _import "Posix_Signal_isPendingGC" private : GCState.t -> C_Int.t; val NSIG = _const "Posix_Signal_NSIG" : C_Int.t; -val resetPending = _import "Posix_Signal_resetPending" private : unit -> unit; +val resetPending = _import "Posix_Signal_resetPending" private : GCState.t -> unit; val SIG_BLOCK = _const "Posix_Signal_SIG_BLOCK" : C_Int.t; val SIG_SETMASK = _const "Posix_Signal_SIG_SETMASK" : C_Int.t; val SIG_UNBLOCK = _const "Posix_Signal_SIG_UNBLOCK" : C_Int.t; val SIGABRT = _const "Posix_Signal_SIGABRT" : C_Signal.t; -val sigaddset = _import "Posix_Signal_sigaddset" private : C_Signal.t -> (C_Int.t) C_Errno.t; +val sigaddset = _import "Posix_Signal_sigaddset" private : (Word8.t) array * C_Signal.t -> (C_Int.t) C_Errno.t; val SIGALRM = _const "Posix_Signal_SIGALRM" : C_Signal.t; val SIGBUS = _const "Posix_Signal_SIGBUS" : C_Signal.t; val SIGCHLD = _const "Posix_Signal_SIGCHLD" : C_Signal.t; val SIGCONT = _const "Posix_Signal_SIGCONT" : C_Signal.t; -val sigdelset = _import "Posix_Signal_sigdelset" private : C_Signal.t -> (C_Int.t) C_Errno.t; -val sigemptyset = _import "Posix_Signal_sigemptyset" private : unit -> (C_Int.t) C_Errno.t; -val sigfillset = _import "Posix_Signal_sigfillset" private : unit -> (C_Int.t) C_Errno.t; +val sigdelset = _import "Posix_Signal_sigdelset" private : (Word8.t) array * C_Signal.t -> (C_Int.t) C_Errno.t; +val sigemptyset = _import "Posix_Signal_sigemptyset" private : (Word8.t) array -> (C_Int.t) C_Errno.t; +val sigfillset = _import "Posix_Signal_sigfillset" private : (Word8.t) array -> (C_Int.t) C_Errno.t; val SIGFPE = _const "Posix_Signal_SIGFPE" : C_Signal.t; val SIGHUP = _const "Posix_Signal_SIGHUP" : C_Signal.t; val SIGILL = _const "Posix_Signal_SIGILL" : C_Signal.t; val SIGINT = _const "Posix_Signal_SIGINT" : C_Signal.t; -val sigismember = _import "Posix_Signal_sigismember" private : C_Signal.t -> (C_Int.t) C_Errno.t; +val sigismember = _import "Posix_Signal_sigismember" private : (Word8.t) vector * C_Signal.t -> (C_Int.t) C_Errno.t; val SIGKILL = _const "Posix_Signal_SIGKILL" : C_Signal.t; val SIGPIPE = _const "Posix_Signal_SIGPIPE" : C_Signal.t; val SIGPOLL = _const "Posix_Signal_SIGPOLL" : C_Signal.t; -val sigprocmask = _import "Posix_Signal_sigprocmask" private : C_Int.t -> (C_Int.t) C_Errno.t; +val sigprocmask = _import "Posix_Signal_sigprocmask" private : C_Int.t * (Word8.t) vector * (Word8.t) array -> (C_Int.t) C_Errno.t; val SIGPROF = _const "Posix_Signal_SIGPROF" : C_Signal.t; val SIGQUIT = _const "Posix_Signal_SIGQUIT" : C_Signal.t; val SIGSEGV = _const "Posix_Signal_SIGSEGV" : C_Signal.t; +val sigSetLen = _const "Posix_Signal_sigSetLen" : C_Size.t; val SIGSTOP = _const "Posix_Signal_SIGSTOP" : C_Signal.t; -val sigsuspend = _import "Posix_Signal_sigsuspend" private : unit -> unit; +val sigsuspend = _import "Posix_Signal_sigsuspend" private : (Word8.t) vector -> unit; val SIGSYS = _const "Posix_Signal_SIGSYS" : C_Signal.t; val SIGTERM = _const "Posix_Signal_SIGTERM" : C_Signal.t; val SIGTRAP = _const "Posix_Signal_SIGTRAP" : C_Signal.t; @@ -908,118 +909,114 @@ structure Real32 = struct type t = Real32.t -val abs = _import "Real32_abs" private : Real32.t -> Real32.t; -val add = _import "Real32_add" private : Real32.t * Real32.t -> Real32.t; -val castToWord32 = _import "Real32_castToWord32" private : Real32.t -> Word32.t; -val div = _import "Real32_div" private : Real32.t * Real32.t -> Real32.t; -val equal = _import "Real32_equal" private : Real32.t * Real32.t -> Bool.t; -val fetch = _import "Real32_fetch" private : (Real32.t) ref -> Real32.t; -val frexp = _import "Real32_frexp" private : Real32.t * (C_Int.t) ref -> Real32.t; +val abs = _import "Real32_abs" private inline : Real32.t -> Real32.t; +val add = _import "Real32_add" private inline : Real32.t * Real32.t -> Real32.t; +val castToWord32 = _import "Real32_castToWord32" private inline : Real32.t -> Word32.t; +val div = _import "Real32_div" private inline : Real32.t * Real32.t -> Real32.t; +val equal = _import "Real32_equal" private inline : Real32.t * Real32.t -> Bool.t; +val fetch = _import "Real32_fetch" private inline : (Real32.t) ref -> Real32.t; +val frexp = _import "Real32_frexp" private inline : Real32.t * (C_Int.t) ref -> Real32.t; val gdtoa = _import "Real32_gdtoa" private : Real32.t * C_Int.t * C_Int.t * C_Int.t * (C_Int.t) ref -> C_String.t; -val ldexp = _import "Real32_ldexp" private : Real32.t * C_Int.t -> Real32.t; -val le = _import "Real32_le" private : Real32.t * Real32.t -> Bool.t; -val lt = _import "Real32_lt" private : Real32.t * Real32.t -> Bool.t; +val ldexp = _import "Real32_ldexp" private inline : Real32.t * C_Int.t -> Real32.t; +val le = _import "Real32_le" private inline : Real32.t * Real32.t -> Bool.t; +val lt = _import "Real32_lt" private inline : Real32.t * Real32.t -> Bool.t; structure Math = struct -val acos = _import "Real32_Math_acos" private : Real32.t -> Real32.t; -val asin = _import "Real32_Math_asin" private : Real32.t -> Real32.t; -val atan = _import "Real32_Math_atan" private : Real32.t -> Real32.t; -val atan2 = _import "Real32_Math_atan2" private : Real32.t * Real32.t -> Real32.t; -val cos = _import "Real32_Math_cos" private : Real32.t -> Real32.t; -val cosh = _import "Real32_Math_cosh" private : Real32.t -> Real32.t; -val (eGet, eSet) = _symbol "Real32_Math_e" private : (unit -> (Real32.t)) * ((Real32.t) -> unit); -val exp = _import "Real32_Math_exp" private : Real32.t -> Real32.t; -val ln = _import "Real32_Math_ln" private : Real32.t -> Real32.t; -val log10 = _import "Real32_Math_log10" private : Real32.t -> Real32.t; -val (piGet, piSet) = _symbol "Real32_Math_pi" private : (unit -> (Real32.t)) * ((Real32.t) -> unit); -val pow = _import "Real32_Math_pow" private : Real32.t * Real32.t -> Real32.t; -val sin = _import "Real32_Math_sin" private : Real32.t -> Real32.t; -val sinh = _import "Real32_Math_sinh" private : Real32.t -> Real32.t; -val sqrt = _import "Real32_Math_sqrt" private : Real32.t -> Real32.t; -val tan = _import "Real32_Math_tan" private : Real32.t -> Real32.t; -val tanh = _import "Real32_Math_tanh" private : Real32.t -> Real32.t; -end -val modf = _import "Real32_modf" private : Real32.t * (Real32.t) ref -> Real32.t; -val move = _import "Real32_move" private : (Real32.t) ref * (Real32.t) ref -> unit; -val mul = _import "Real32_mul" private : Real32.t * Real32.t -> Real32.t; -val muladd = _import "Real32_muladd" private : Real32.t * Real32.t * Real32.t -> Real32.t; -val mulsub = _import "Real32_mulsub" private : Real32.t * Real32.t * Real32.t -> Real32.t; -val neg = _import "Real32_neg" private : Real32.t -> Real32.t; -val realCeil = _import "Real32_realCeil" private : Real32.t -> Real32.t; -val realFloor = _import "Real32_realFloor" private : Real32.t -> Real32.t; -val realTrunc = _import "Real32_realTrunc" private : Real32.t -> Real32.t; -val rndToReal32 = _import "Real32_rndToReal32" private : Real32.t -> Real32.t; -val rndToReal64 = _import "Real32_rndToReal64" private : Real32.t -> Real64.t; -val rndToWordS16 = _import "Real32_rndToWordS16" private : Real32.t -> Int16.t; -val rndToWordS32 = _import "Real32_rndToWordS32" private : Real32.t -> Int32.t; -val rndToWordS64 = _import "Real32_rndToWordS64" private : Real32.t -> Int64.t; -val rndToWordS8 = _import "Real32_rndToWordS8" private : Real32.t -> Int8.t; -val rndToWordU16 = _import "Real32_rndToWordU16" private : Real32.t -> Word16.t; -val rndToWordU32 = _import "Real32_rndToWordU32" private : Real32.t -> Word32.t; -val rndToWordU64 = _import "Real32_rndToWordU64" private : Real32.t -> Word64.t; -val rndToWordU8 = _import "Real32_rndToWordU8" private : Real32.t -> Word8.t; -val round = _import "Real32_round" private : Real32.t -> Real32.t; -val store = _import "Real32_store" private : (Real32.t) ref * Real32.t -> unit; +val acos = _import "Real32_Math_acos" private inline : Real32.t -> Real32.t; +val asin = _import "Real32_Math_asin" private inline : Real32.t -> Real32.t; +val atan = _import "Real32_Math_atan" private inline : Real32.t -> Real32.t; +val atan2 = _import "Real32_Math_atan2" private inline : Real32.t * Real32.t -> Real32.t; +val cos = _import "Real32_Math_cos" private inline : Real32.t -> Real32.t; +val cosh = _import "Real32_Math_cosh" private inline : Real32.t -> Real32.t; +val exp = _import "Real32_Math_exp" private inline : Real32.t -> Real32.t; +val ln = _import "Real32_Math_ln" private inline : Real32.t -> Real32.t; +val log10 = _import "Real32_Math_log10" private inline : Real32.t -> Real32.t; +val pow = _import "Real32_Math_pow" private inline : Real32.t * Real32.t -> Real32.t; +val sin = _import "Real32_Math_sin" private inline : Real32.t -> Real32.t; +val sinh = _import "Real32_Math_sinh" private inline : Real32.t -> Real32.t; +val sqrt = _import "Real32_Math_sqrt" private inline : Real32.t -> Real32.t; +val tan = _import "Real32_Math_tan" private inline : Real32.t -> Real32.t; +val tanh = _import "Real32_Math_tanh" private inline : Real32.t -> Real32.t; +end +val modf = _import "Real32_modf" private inline : Real32.t * (Real32.t) ref -> Real32.t; +val move = _import "Real32_move" private inline : (Real32.t) ref * (Real32.t) ref -> unit; +val mul = _import "Real32_mul" private inline : Real32.t * Real32.t -> Real32.t; +val muladd = _import "Real32_muladd" private inline : Real32.t * Real32.t * Real32.t -> Real32.t; +val mulsub = _import "Real32_mulsub" private inline : Real32.t * Real32.t * Real32.t -> Real32.t; +val neg = _import "Real32_neg" private inline : Real32.t -> Real32.t; +val realCeil = _import "Real32_realCeil" private inline : Real32.t -> Real32.t; +val realFloor = _import "Real32_realFloor" private inline : Real32.t -> Real32.t; +val realTrunc = _import "Real32_realTrunc" private inline : Real32.t -> Real32.t; +val rndToReal32 = _import "Real32_rndToReal32" private inline : Real32.t -> Real32.t; +val rndToReal64 = _import "Real32_rndToReal64" private inline : Real32.t -> Real64.t; +val rndToWordS16 = _import "Real32_rndToWordS16" private inline : Real32.t -> Int16.t; +val rndToWordS32 = _import "Real32_rndToWordS32" private inline : Real32.t -> Int32.t; +val rndToWordS64 = _import "Real32_rndToWordS64" private inline : Real32.t -> Int64.t; +val rndToWordS8 = _import "Real32_rndToWordS8" private inline : Real32.t -> Int8.t; +val rndToWordU16 = _import "Real32_rndToWordU16" private inline : Real32.t -> Word16.t; +val rndToWordU32 = _import "Real32_rndToWordU32" private inline : Real32.t -> Word32.t; +val rndToWordU64 = _import "Real32_rndToWordU64" private inline : Real32.t -> Word64.t; +val rndToWordU8 = _import "Real32_rndToWordU8" private inline : Real32.t -> Word8.t; +val round = _import "Real32_round" private inline : Real32.t -> Real32.t; +val store = _import "Real32_store" private inline : (Real32.t) ref * Real32.t -> unit; val strtor = _import "Real32_strtor" private : NullString8.t * C_Int.t -> Real32.t; -val sub = _import "Real32_sub" private : Real32.t * Real32.t -> Real32.t; +val sub = _import "Real32_sub" private inline : Real32.t * Real32.t -> Real32.t; end structure Real64 = struct type t = Real64.t -val abs = _import "Real64_abs" private : Real64.t -> Real64.t; -val add = _import "Real64_add" private : Real64.t * Real64.t -> Real64.t; -val castToWord64 = _import "Real64_castToWord64" private : Real64.t -> Word64.t; -val div = _import "Real64_div" private : Real64.t * Real64.t -> Real64.t; -val equal = _import "Real64_equal" private : Real64.t * Real64.t -> Bool.t; -val fetch = _import "Real64_fetch" private : (Real64.t) ref -> Real64.t; -val frexp = _import "Real64_frexp" private : Real64.t * (C_Int.t) ref -> Real64.t; +val abs = _import "Real64_abs" private inline : Real64.t -> Real64.t; +val add = _import "Real64_add" private inline : Real64.t * Real64.t -> Real64.t; +val castToWord64 = _import "Real64_castToWord64" private inline : Real64.t -> Word64.t; +val div = _import "Real64_div" private inline : Real64.t * Real64.t -> Real64.t; +val equal = _import "Real64_equal" private inline : Real64.t * Real64.t -> Bool.t; +val fetch = _import "Real64_fetch" private inline : (Real64.t) ref -> Real64.t; +val frexp = _import "Real64_frexp" private inline : Real64.t * (C_Int.t) ref -> Real64.t; val gdtoa = _import "Real64_gdtoa" private : Real64.t * C_Int.t * C_Int.t * C_Int.t * (C_Int.t) ref -> C_String.t; -val ldexp = _import "Real64_ldexp" private : Real64.t * C_Int.t -> Real64.t; -val le = _import "Real64_le" private : Real64.t * Real64.t -> Bool.t; -val lt = _import "Real64_lt" private : Real64.t * Real64.t -> Bool.t; +val ldexp = _import "Real64_ldexp" private inline : Real64.t * C_Int.t -> Real64.t; +val le = _import "Real64_le" private inline : Real64.t * Real64.t -> Bool.t; +val lt = _import "Real64_lt" private inline : Real64.t * Real64.t -> Bool.t; structure Math = struct -val acos = _import "Real64_Math_acos" private : Real64.t -> Real64.t; -val asin = _import "Real64_Math_asin" private : Real64.t -> Real64.t; -val atan = _import "Real64_Math_atan" private : Real64.t -> Real64.t; -val atan2 = _import "Real64_Math_atan2" private : Real64.t * Real64.t -> Real64.t; -val cos = _import "Real64_Math_cos" private : Real64.t -> Real64.t; -val cosh = _import "Real64_Math_cosh" private : Real64.t -> Real64.t; -val (eGet, eSet) = _symbol "Real64_Math_e" private : (unit -> (Real64.t)) * ((Real64.t) -> unit); -val exp = _import "Real64_Math_exp" private : Real64.t -> Real64.t; -val ln = _import "Real64_Math_ln" private : Real64.t -> Real64.t; -val log10 = _import "Real64_Math_log10" private : Real64.t -> Real64.t; -val (piGet, piSet) = _symbol "Real64_Math_pi" private : (unit -> (Real64.t)) * ((Real64.t) -> unit); -val pow = _import "Real64_Math_pow" private : Real64.t * Real64.t -> Real64.t; -val sin = _import "Real64_Math_sin" private : Real64.t -> Real64.t; -val sinh = _import "Real64_Math_sinh" private : Real64.t -> Real64.t; -val sqrt = _import "Real64_Math_sqrt" private : Real64.t -> Real64.t; -val tan = _import "Real64_Math_tan" private : Real64.t -> Real64.t; -val tanh = _import "Real64_Math_tanh" private : Real64.t -> Real64.t; -end -val modf = _import "Real64_modf" private : Real64.t * (Real64.t) ref -> Real64.t; -val move = _import "Real64_move" private : (Real64.t) ref * (Real64.t) ref -> unit; -val mul = _import "Real64_mul" private : Real64.t * Real64.t -> Real64.t; -val muladd = _import "Real64_muladd" private : Real64.t * Real64.t * Real64.t -> Real64.t; -val mulsub = _import "Real64_mulsub" private : Real64.t * Real64.t * Real64.t -> Real64.t; -val neg = _import "Real64_neg" private : Real64.t -> Real64.t; -val realCeil = _import "Real64_realCeil" private : Real64.t -> Real64.t; -val realFloor = _import "Real64_realFloor" private : Real64.t -> Real64.t; -val realTrunc = _import "Real64_realTrunc" private : Real64.t -> Real64.t; -val rndToReal32 = _import "Real64_rndToReal32" private : Real64.t -> Real32.t; -val rndToReal64 = _import "Real64_rndToReal64" private : Real64.t -> Real64.t; -val rndToWordS16 = _import "Real64_rndToWordS16" private : Real64.t -> Int16.t; -val rndToWordS32 = _import "Real64_rndToWordS32" private : Real64.t -> Int32.t; -val rndToWordS64 = _import "Real64_rndToWordS64" private : Real64.t -> Int64.t; -val rndToWordS8 = _import "Real64_rndToWordS8" private : Real64.t -> Int8.t; -val rndToWordU16 = _import "Real64_rndToWordU16" private : Real64.t -> Word16.t; -val rndToWordU32 = _import "Real64_rndToWordU32" private : Real64.t -> Word32.t; -val rndToWordU64 = _import "Real64_rndToWordU64" private : Real64.t -> Word64.t; -val rndToWordU8 = _import "Real64_rndToWordU8" private : Real64.t -> Word8.t; -val round = _import "Real64_round" private : Real64.t -> Real64.t; -val store = _import "Real64_store" private : (Real64.t) ref * Real64.t -> unit; +val acos = _import "Real64_Math_acos" private inline : Real64.t -> Real64.t; +val asin = _import "Real64_Math_asin" private inline : Real64.t -> Real64.t; +val atan = _import "Real64_Math_atan" private inline : Real64.t -> Real64.t; +val atan2 = _import "Real64_Math_atan2" private inline : Real64.t * Real64.t -> Real64.t; +val cos = _import "Real64_Math_cos" private inline : Real64.t -> Real64.t; +val cosh = _import "Real64_Math_cosh" private inline : Real64.t -> Real64.t; +val exp = _import "Real64_Math_exp" private inline : Real64.t -> Real64.t; +val ln = _import "Real64_Math_ln" private inline : Real64.t -> Real64.t; +val log10 = _import "Real64_Math_log10" private inline : Real64.t -> Real64.t; +val pow = _import "Real64_Math_pow" private inline : Real64.t * Real64.t -> Real64.t; +val sin = _import "Real64_Math_sin" private inline : Real64.t -> Real64.t; +val sinh = _import "Real64_Math_sinh" private inline : Real64.t -> Real64.t; +val sqrt = _import "Real64_Math_sqrt" private inline : Real64.t -> Real64.t; +val tan = _import "Real64_Math_tan" private inline : Real64.t -> Real64.t; +val tanh = _import "Real64_Math_tanh" private inline : Real64.t -> Real64.t; +end +val modf = _import "Real64_modf" private inline : Real64.t * (Real64.t) ref -> Real64.t; +val move = _import "Real64_move" private inline : (Real64.t) ref * (Real64.t) ref -> unit; +val mul = _import "Real64_mul" private inline : Real64.t * Real64.t -> Real64.t; +val muladd = _import "Real64_muladd" private inline : Real64.t * Real64.t * Real64.t -> Real64.t; +val mulsub = _import "Real64_mulsub" private inline : Real64.t * Real64.t * Real64.t -> Real64.t; +val neg = _import "Real64_neg" private inline : Real64.t -> Real64.t; +val realCeil = _import "Real64_realCeil" private inline : Real64.t -> Real64.t; +val realFloor = _import "Real64_realFloor" private inline : Real64.t -> Real64.t; +val realTrunc = _import "Real64_realTrunc" private inline : Real64.t -> Real64.t; +val rndToReal32 = _import "Real64_rndToReal32" private inline : Real64.t -> Real32.t; +val rndToReal64 = _import "Real64_rndToReal64" private inline : Real64.t -> Real64.t; +val rndToWordS16 = _import "Real64_rndToWordS16" private inline : Real64.t -> Int16.t; +val rndToWordS32 = _import "Real64_rndToWordS32" private inline : Real64.t -> Int32.t; +val rndToWordS64 = _import "Real64_rndToWordS64" private inline : Real64.t -> Int64.t; +val rndToWordS8 = _import "Real64_rndToWordS8" private inline : Real64.t -> Int8.t; +val rndToWordU16 = _import "Real64_rndToWordU16" private inline : Real64.t -> Word16.t; +val rndToWordU32 = _import "Real64_rndToWordU32" private inline : Real64.t -> Word32.t; +val rndToWordU64 = _import "Real64_rndToWordU64" private inline : Real64.t -> Word64.t; +val rndToWordU8 = _import "Real64_rndToWordU8" private inline : Real64.t -> Word8.t; +val round = _import "Real64_round" private inline : Real64.t -> Real64.t; +val store = _import "Real64_store" private inline : (Real64.t) ref * Real64.t -> unit; val strtor = _import "Real64_strtor" private : NullString8.t * C_Int.t -> Real64.t; -val sub = _import "Real64_sub" private : Real64.t * Real64.t -> Real64.t; +val sub = _import "Real64_sub" private inline : Real64.t * Real64.t -> Real64.t; end structure Socket = struct @@ -1142,227 +1139,235 @@ structure Word16 = struct type t = Word16.t -val add = _import "Word16_add" private : Word16.t * Word16.t -> Word16.t; -val andb = _import "Word16_andb" private : Word16.t * Word16.t -> Word16.t; -val equal = _import "Word16_equal" private : Word16.t * Word16.t -> Bool.t; -val lshift = _import "Word16_lshift" private : Word16.t * Word32.t -> Word16.t; -val neg = _import "Word16_neg" private : Word16.t -> Word16.t; -val notb = _import "Word16_notb" private : Word16.t -> Word16.t; -val orb = _import "Word16_orb" private : Word16.t * Word16.t -> Word16.t; -val rol = _import "Word16_rol" private : Word16.t * Word32.t -> Word16.t; -val ror = _import "Word16_ror" private : Word16.t * Word32.t -> Word16.t; -val sub = _import "Word16_sub" private : Word16.t * Word16.t -> Word16.t; -val xorb = _import "Word16_xorb" private : Word16.t * Word16.t -> Word16.t; +val add = _import "Word16_add" private inline : Word16.t * Word16.t -> Word16.t; +val andb = _import "Word16_andb" private inline : Word16.t * Word16.t -> Word16.t; +val equal = _import "Word16_equal" private inline : Word16.t * Word16.t -> Bool.t; +val lshift = _import "Word16_lshift" private inline : Word16.t * Word32.t -> Word16.t; +val neg = _import "Word16_neg" private inline : Word16.t -> Word16.t; +val notb = _import "Word16_notb" private inline : Word16.t -> Word16.t; +val orb = _import "Word16_orb" private inline : Word16.t * Word16.t -> Word16.t; +val rol = _import "Word16_rol" private inline : Word16.t * Word32.t -> Word16.t; +val ror = _import "Word16_ror" private inline : Word16.t * Word32.t -> Word16.t; +val sub = _import "Word16_sub" private inline : Word16.t * Word16.t -> Word16.t; +val xorb = _import "Word16_xorb" private inline : Word16.t * Word16.t -> Word16.t; end structure Word32 = struct type t = Word32.t -val add = _import "Word32_add" private : Word32.t * Word32.t -> Word32.t; -val andb = _import "Word32_andb" private : Word32.t * Word32.t -> Word32.t; -val castToReal32 = _import "Word32_castToReal32" private : Word32.t -> Real32.t; -val equal = _import "Word32_equal" private : Word32.t * Word32.t -> Bool.t; -val lshift = _import "Word32_lshift" private : Word32.t * Word32.t -> Word32.t; -val neg = _import "Word32_neg" private : Word32.t -> Word32.t; -val notb = _import "Word32_notb" private : Word32.t -> Word32.t; -val orb = _import "Word32_orb" private : Word32.t * Word32.t -> Word32.t; -val rol = _import "Word32_rol" private : Word32.t * Word32.t -> Word32.t; -val ror = _import "Word32_ror" private : Word32.t * Word32.t -> Word32.t; -val sub = _import "Word32_sub" private : Word32.t * Word32.t -> Word32.t; -val xorb = _import "Word32_xorb" private : Word32.t * Word32.t -> Word32.t; +val add = _import "Word32_add" private inline : Word32.t * Word32.t -> Word32.t; +val andb = _import "Word32_andb" private inline : Word32.t * Word32.t -> Word32.t; +val castToReal32 = _import "Word32_castToReal32" private inline : Word32.t -> Real32.t; +val equal = _import "Word32_equal" private inline : Word32.t * Word32.t -> Bool.t; +val lshift = _import "Word32_lshift" private inline : Word32.t * Word32.t -> Word32.t; +val neg = _import "Word32_neg" private inline : Word32.t -> Word32.t; +val notb = _import "Word32_notb" private inline : Word32.t -> Word32.t; +val orb = _import "Word32_orb" private inline : Word32.t * Word32.t -> Word32.t; +val rol = _import "Word32_rol" private inline : Word32.t * Word32.t -> Word32.t; +val ror = _import "Word32_ror" private inline : Word32.t * Word32.t -> Word32.t; +val sub = _import "Word32_sub" private inline : Word32.t * Word32.t -> Word32.t; +val xorb = _import "Word32_xorb" private inline : Word32.t * Word32.t -> Word32.t; end structure Word64 = struct type t = Word64.t -val add = _import "Word64_add" private : Word64.t * Word64.t -> Word64.t; -val andb = _import "Word64_andb" private : Word64.t * Word64.t -> Word64.t; -val castToReal64 = _import "Word64_castToReal64" private : Word64.t -> Real64.t; -val equal = _import "Word64_equal" private : Word64.t * Word64.t -> Bool.t; -val fetch = _import "Word64_fetch" private : (Word64.t) ref -> Word64.t; -val lshift = _import "Word64_lshift" private : Word64.t * Word32.t -> Word64.t; -val move = _import "Word64_move" private : (Word64.t) ref * (Word64.t) ref -> unit; -val neg = _import "Word64_neg" private : Word64.t -> Word64.t; -val notb = _import "Word64_notb" private : Word64.t -> Word64.t; -val orb = _import "Word64_orb" private : Word64.t * Word64.t -> Word64.t; -val rol = _import "Word64_rol" private : Word64.t * Word32.t -> Word64.t; -val ror = _import "Word64_ror" private : Word64.t * Word32.t -> Word64.t; -val store = _import "Word64_store" private : (Word64.t) ref * Word64.t -> unit; -val sub = _import "Word64_sub" private : Word64.t * Word64.t -> Word64.t; -val xorb = _import "Word64_xorb" private : Word64.t * Word64.t -> Word64.t; +val add = _import "Word64_add" private inline : Word64.t * Word64.t -> Word64.t; +val andb = _import "Word64_andb" private inline : Word64.t * Word64.t -> Word64.t; +val castToReal64 = _import "Word64_castToReal64" private inline : Word64.t -> Real64.t; +val equal = _import "Word64_equal" private inline : Word64.t * Word64.t -> Bool.t; +val fetch = _import "Word64_fetch" private inline : (Word64.t) ref -> Word64.t; +val lshift = _import "Word64_lshift" private inline : Word64.t * Word32.t -> Word64.t; +val move = _import "Word64_move" private inline : (Word64.t) ref * (Word64.t) ref -> unit; +val neg = _import "Word64_neg" private inline : Word64.t -> Word64.t; +val notb = _import "Word64_notb" private inline : Word64.t -> Word64.t; +val orb = _import "Word64_orb" private inline : Word64.t * Word64.t -> Word64.t; +val rol = _import "Word64_rol" private inline : Word64.t * Word32.t -> Word64.t; +val ror = _import "Word64_ror" private inline : Word64.t * Word32.t -> Word64.t; +val store = _import "Word64_store" private inline : (Word64.t) ref * Word64.t -> unit; +val sub = _import "Word64_sub" private inline : Word64.t * Word64.t -> Word64.t; +val xorb = _import "Word64_xorb" private inline : Word64.t * Word64.t -> Word64.t; end structure Word8 = struct type t = Word8.t -val add = _import "Word8_add" private : Word8.t * Word8.t -> Word8.t; -val andb = _import "Word8_andb" private : Word8.t * Word8.t -> Word8.t; -val equal = _import "Word8_equal" private : Word8.t * Word8.t -> Bool.t; -val lshift = _import "Word8_lshift" private : Word8.t * Word32.t -> Word8.t; -val neg = _import "Word8_neg" private : Word8.t -> Word8.t; -val notb = _import "Word8_notb" private : Word8.t -> Word8.t; -val orb = _import "Word8_orb" private : Word8.t * Word8.t -> Word8.t; -val rol = _import "Word8_rol" private : Word8.t * Word32.t -> Word8.t; -val ror = _import "Word8_ror" private : Word8.t * Word32.t -> Word8.t; -val sub = _import "Word8_sub" private : Word8.t * Word8.t -> Word8.t; -val xorb = _import "Word8_xorb" private : Word8.t * Word8.t -> Word8.t; +val add = _import "Word8_add" private inline : Word8.t * Word8.t -> Word8.t; +val andb = _import "Word8_andb" private inline : Word8.t * Word8.t -> Word8.t; +val equal = _import "Word8_equal" private inline : Word8.t * Word8.t -> Bool.t; +val lshift = _import "Word8_lshift" private inline : Word8.t * Word32.t -> Word8.t; +val neg = _import "Word8_neg" private inline : Word8.t -> Word8.t; +val notb = _import "Word8_notb" private inline : Word8.t -> Word8.t; +val orb = _import "Word8_orb" private inline : Word8.t * Word8.t -> Word8.t; +val rol = _import "Word8_rol" private inline : Word8.t * Word32.t -> Word8.t; +val ror = _import "Word8_ror" private inline : Word8.t * Word32.t -> Word8.t; +val sub = _import "Word8_sub" private inline : Word8.t * Word8.t -> Word8.t; +val xorb = _import "Word8_xorb" private inline : Word8.t * Word8.t -> Word8.t; end structure WordS16 = struct -val addCheckOverflows = _import "WordS16_addCheckOverflows" private : Int16.t * Int16.t -> Bool.t; -val extdToWord16 = _import "WordS16_extdToWord16" private : Int16.t -> Word16.t; -val extdToWord32 = _import "WordS16_extdToWord32" private : Int16.t -> Word32.t; -val extdToWord64 = _import "WordS16_extdToWord64" private : Int16.t -> Word64.t; -val extdToWord8 = _import "WordS16_extdToWord8" private : Int16.t -> Word8.t; -val ge = _import "WordS16_ge" private : Int16.t * Int16.t -> Bool.t; -val gt = _import "WordS16_gt" private : Int16.t * Int16.t -> Bool.t; -val le = _import "WordS16_le" private : Int16.t * Int16.t -> Bool.t; -val lt = _import "WordS16_lt" private : Int16.t * Int16.t -> Bool.t; -val mul = _import "WordS16_mul" private : Int16.t * Int16.t -> Int16.t; -val mulCheckOverflows = _import "WordS16_mulCheckOverflows" private : Int16.t * Int16.t -> Bool.t; -val negCheckOverflows = _import "WordS16_negCheckOverflows" private : Int16.t -> Bool.t; -val quot = _import "WordS16_quot" private : Int16.t * Int16.t -> Int16.t; -val rem = _import "WordS16_rem" private : Int16.t * Int16.t -> Int16.t; +val addCheckP = _import "WordS16_addCheckP" private inline : Int16.t * Int16.t -> Bool.t; +val extdToWord16 = _import "WordS16_extdToWord16" private inline : Int16.t -> Word16.t; +val extdToWord32 = _import "WordS16_extdToWord32" private inline : Int16.t -> Word32.t; +val extdToWord64 = _import "WordS16_extdToWord64" private inline : Int16.t -> Word64.t; +val extdToWord8 = _import "WordS16_extdToWord8" private inline : Int16.t -> Word8.t; +val ge = _import "WordS16_ge" private inline : Int16.t * Int16.t -> Bool.t; +val gt = _import "WordS16_gt" private inline : Int16.t * Int16.t -> Bool.t; +val le = _import "WordS16_le" private inline : Int16.t * Int16.t -> Bool.t; +val lt = _import "WordS16_lt" private inline : Int16.t * Int16.t -> Bool.t; +val mul = _import "WordS16_mul" private inline : Int16.t * Int16.t -> Int16.t; +val mulCheckP = _import "WordS16_mulCheckP" private inline : Int16.t * Int16.t -> Bool.t; +val negCheckP = _import "WordS16_negCheckP" private inline : Int16.t -> Bool.t; +val quot = _import "WordS16_quot" private inline : Int16.t * Int16.t -> Int16.t; +val rem = _import "WordS16_rem" private inline : Int16.t * Int16.t -> Int16.t; val rndToReal32 = _import "WordS16_rndToReal32" private : Int16.t -> Real32.t; val rndToReal64 = _import "WordS16_rndToReal64" private : Int16.t -> Real64.t; -val rshift = _import "WordS16_rshift" private : Int16.t * Word32.t -> Int16.t; -val subCheckOverflows = _import "WordS16_subCheckOverflows" private : Int16.t * Int16.t -> Bool.t; +val rshift = _import "WordS16_rshift" private inline : Int16.t * Word32.t -> Int16.t; +val subCheckP = _import "WordS16_subCheckP" private inline : Int16.t * Int16.t -> Bool.t; end structure WordS32 = struct -val addCheckOverflows = _import "WordS32_addCheckOverflows" private : Int32.t * Int32.t -> Bool.t; -val extdToWord16 = _import "WordS32_extdToWord16" private : Int32.t -> Word16.t; -val extdToWord32 = _import "WordS32_extdToWord32" private : Int32.t -> Word32.t; -val extdToWord64 = _import "WordS32_extdToWord64" private : Int32.t -> Word64.t; -val extdToWord8 = _import "WordS32_extdToWord8" private : Int32.t -> Word8.t; -val ge = _import "WordS32_ge" private : Int32.t * Int32.t -> Bool.t; -val gt = _import "WordS32_gt" private : Int32.t * Int32.t -> Bool.t; -val le = _import "WordS32_le" private : Int32.t * Int32.t -> Bool.t; -val lt = _import "WordS32_lt" private : Int32.t * Int32.t -> Bool.t; -val mul = _import "WordS32_mul" private : Int32.t * Int32.t -> Int32.t; -val mulCheckOverflows = _import "WordS32_mulCheckOverflows" private : Int32.t * Int32.t -> Bool.t; -val negCheckOverflows = _import "WordS32_negCheckOverflows" private : Int32.t -> Bool.t; -val quot = _import "WordS32_quot" private : Int32.t * Int32.t -> Int32.t; -val rem = _import "WordS32_rem" private : Int32.t * Int32.t -> Int32.t; +val addCheckP = _import "WordS32_addCheckP" private inline : Int32.t * Int32.t -> Bool.t; +val extdToWord16 = _import "WordS32_extdToWord16" private inline : Int32.t -> Word16.t; +val extdToWord32 = _import "WordS32_extdToWord32" private inline : Int32.t -> Word32.t; +val extdToWord64 = _import "WordS32_extdToWord64" private inline : Int32.t -> Word64.t; +val extdToWord8 = _import "WordS32_extdToWord8" private inline : Int32.t -> Word8.t; +val ge = _import "WordS32_ge" private inline : Int32.t * Int32.t -> Bool.t; +val gt = _import "WordS32_gt" private inline : Int32.t * Int32.t -> Bool.t; +val le = _import "WordS32_le" private inline : Int32.t * Int32.t -> Bool.t; +val lt = _import "WordS32_lt" private inline : Int32.t * Int32.t -> Bool.t; +val mul = _import "WordS32_mul" private inline : Int32.t * Int32.t -> Int32.t; +val mulCheckP = _import "WordS32_mulCheckP" private inline : Int32.t * Int32.t -> Bool.t; +val negCheckP = _import "WordS32_negCheckP" private inline : Int32.t -> Bool.t; +val quot = _import "WordS32_quot" private inline : Int32.t * Int32.t -> Int32.t; +val rem = _import "WordS32_rem" private inline : Int32.t * Int32.t -> Int32.t; val rndToReal32 = _import "WordS32_rndToReal32" private : Int32.t -> Real32.t; val rndToReal64 = _import "WordS32_rndToReal64" private : Int32.t -> Real64.t; -val rshift = _import "WordS32_rshift" private : Int32.t * Word32.t -> Int32.t; -val subCheckOverflows = _import "WordS32_subCheckOverflows" private : Int32.t * Int32.t -> Bool.t; +val rshift = _import "WordS32_rshift" private inline : Int32.t * Word32.t -> Int32.t; +val subCheckP = _import "WordS32_subCheckP" private inline : Int32.t * Int32.t -> Bool.t; end structure WordS64 = struct -val addCheckOverflows = _import "WordS64_addCheckOverflows" private : Int64.t * Int64.t -> Bool.t; -val extdToWord16 = _import "WordS64_extdToWord16" private : Int64.t -> Word16.t; -val extdToWord32 = _import "WordS64_extdToWord32" private : Int64.t -> Word32.t; -val extdToWord64 = _import "WordS64_extdToWord64" private : Int64.t -> Word64.t; -val extdToWord8 = _import "WordS64_extdToWord8" private : Int64.t -> Word8.t; -val ge = _import "WordS64_ge" private : Int64.t * Int64.t -> Bool.t; -val gt = _import "WordS64_gt" private : Int64.t * Int64.t -> Bool.t; -val le = _import "WordS64_le" private : Int64.t * Int64.t -> Bool.t; -val lt = _import "WordS64_lt" private : Int64.t * Int64.t -> Bool.t; -val mul = _import "WordS64_mul" private : Int64.t * Int64.t -> Int64.t; -val mulCheckOverflows = _import "WordS64_mulCheckOverflows" private : Int64.t * Int64.t -> Bool.t; -val negCheckOverflows = _import "WordS64_negCheckOverflows" private : Int64.t -> Bool.t; -val quot = _import "WordS64_quot" private : Int64.t * Int64.t -> Int64.t; -val rem = _import "WordS64_rem" private : Int64.t * Int64.t -> Int64.t; +val addCheckP = _import "WordS64_addCheckP" private inline : Int64.t * Int64.t -> Bool.t; +val extdToWord16 = _import "WordS64_extdToWord16" private inline : Int64.t -> Word16.t; +val extdToWord32 = _import "WordS64_extdToWord32" private inline : Int64.t -> Word32.t; +val extdToWord64 = _import "WordS64_extdToWord64" private inline : Int64.t -> Word64.t; +val extdToWord8 = _import "WordS64_extdToWord8" private inline : Int64.t -> Word8.t; +val ge = _import "WordS64_ge" private inline : Int64.t * Int64.t -> Bool.t; +val gt = _import "WordS64_gt" private inline : Int64.t * Int64.t -> Bool.t; +val le = _import "WordS64_le" private inline : Int64.t * Int64.t -> Bool.t; +val lt = _import "WordS64_lt" private inline : Int64.t * Int64.t -> Bool.t; +val mul = _import "WordS64_mul" private inline : Int64.t * Int64.t -> Int64.t; +val mulCheckP = _import "WordS64_mulCheckP" private inline : Int64.t * Int64.t -> Bool.t; +val negCheckP = _import "WordS64_negCheckP" private inline : Int64.t -> Bool.t; +val quot = _import "WordS64_quot" private inline : Int64.t * Int64.t -> Int64.t; +val rem = _import "WordS64_rem" private inline : Int64.t * Int64.t -> Int64.t; val rndToReal32 = _import "WordS64_rndToReal32" private : Int64.t -> Real32.t; val rndToReal64 = _import "WordS64_rndToReal64" private : Int64.t -> Real64.t; -val rshift = _import "WordS64_rshift" private : Int64.t * Word32.t -> Int64.t; -val subCheckOverflows = _import "WordS64_subCheckOverflows" private : Int64.t * Int64.t -> Bool.t; +val rshift = _import "WordS64_rshift" private inline : Int64.t * Word32.t -> Int64.t; +val subCheckP = _import "WordS64_subCheckP" private inline : Int64.t * Int64.t -> Bool.t; end structure WordS8 = struct -val addCheckOverflows = _import "WordS8_addCheckOverflows" private : Int8.t * Int8.t -> Bool.t; -val extdToWord16 = _import "WordS8_extdToWord16" private : Int8.t -> Word16.t; -val extdToWord32 = _import "WordS8_extdToWord32" private : Int8.t -> Word32.t; -val extdToWord64 = _import "WordS8_extdToWord64" private : Int8.t -> Word64.t; -val extdToWord8 = _import "WordS8_extdToWord8" private : Int8.t -> Word8.t; -val ge = _import "WordS8_ge" private : Int8.t * Int8.t -> Bool.t; -val gt = _import "WordS8_gt" private : Int8.t * Int8.t -> Bool.t; -val le = _import "WordS8_le" private : Int8.t * Int8.t -> Bool.t; -val lt = _import "WordS8_lt" private : Int8.t * Int8.t -> Bool.t; -val mul = _import "WordS8_mul" private : Int8.t * Int8.t -> Int8.t; -val mulCheckOverflows = _import "WordS8_mulCheckOverflows" private : Int8.t * Int8.t -> Bool.t; -val negCheckOverflows = _import "WordS8_negCheckOverflows" private : Int8.t -> Bool.t; -val quot = _import "WordS8_quot" private : Int8.t * Int8.t -> Int8.t; -val rem = _import "WordS8_rem" private : Int8.t * Int8.t -> Int8.t; +val addCheckP = _import "WordS8_addCheckP" private inline : Int8.t * Int8.t -> Bool.t; +val extdToWord16 = _import "WordS8_extdToWord16" private inline : Int8.t -> Word16.t; +val extdToWord32 = _import "WordS8_extdToWord32" private inline : Int8.t -> Word32.t; +val extdToWord64 = _import "WordS8_extdToWord64" private inline : Int8.t -> Word64.t; +val extdToWord8 = _import "WordS8_extdToWord8" private inline : Int8.t -> Word8.t; +val ge = _import "WordS8_ge" private inline : Int8.t * Int8.t -> Bool.t; +val gt = _import "WordS8_gt" private inline : Int8.t * Int8.t -> Bool.t; +val le = _import "WordS8_le" private inline : Int8.t * Int8.t -> Bool.t; +val lt = _import "WordS8_lt" private inline : Int8.t * Int8.t -> Bool.t; +val mul = _import "WordS8_mul" private inline : Int8.t * Int8.t -> Int8.t; +val mulCheckP = _import "WordS8_mulCheckP" private inline : Int8.t * Int8.t -> Bool.t; +val negCheckP = _import "WordS8_negCheckP" private inline : Int8.t -> Bool.t; +val quot = _import "WordS8_quot" private inline : Int8.t * Int8.t -> Int8.t; +val rem = _import "WordS8_rem" private inline : Int8.t * Int8.t -> Int8.t; val rndToReal32 = _import "WordS8_rndToReal32" private : Int8.t -> Real32.t; val rndToReal64 = _import "WordS8_rndToReal64" private : Int8.t -> Real64.t; -val rshift = _import "WordS8_rshift" private : Int8.t * Word32.t -> Int8.t; -val subCheckOverflows = _import "WordS8_subCheckOverflows" private : Int8.t * Int8.t -> Bool.t; +val rshift = _import "WordS8_rshift" private inline : Int8.t * Word32.t -> Int8.t; +val subCheckP = _import "WordS8_subCheckP" private inline : Int8.t * Int8.t -> Bool.t; end structure WordU16 = struct -val addCheckOverflows = _import "WordU16_addCheckOverflows" private : Word16.t * Word16.t -> Bool.t; -val extdToWord16 = _import "WordU16_extdToWord16" private : Word16.t -> Word16.t; -val extdToWord32 = _import "WordU16_extdToWord32" private : Word16.t -> Word32.t; -val extdToWord64 = _import "WordU16_extdToWord64" private : Word16.t -> Word64.t; -val extdToWord8 = _import "WordU16_extdToWord8" private : Word16.t -> Word8.t; -val ge = _import "WordU16_ge" private : Word16.t * Word16.t -> Bool.t; -val gt = _import "WordU16_gt" private : Word16.t * Word16.t -> Bool.t; -val le = _import "WordU16_le" private : Word16.t * Word16.t -> Bool.t; -val lt = _import "WordU16_lt" private : Word16.t * Word16.t -> Bool.t; -val mul = _import "WordU16_mul" private : Word16.t * Word16.t -> Word16.t; -val mulCheckOverflows = _import "WordU16_mulCheckOverflows" private : Word16.t * Word16.t -> Bool.t; -val quot = _import "WordU16_quot" private : Word16.t * Word16.t -> Word16.t; -val rem = _import "WordU16_rem" private : Word16.t * Word16.t -> Word16.t; +val addCheckP = _import "WordU16_addCheckP" private inline : Word16.t * Word16.t -> Bool.t; +val extdToWord16 = _import "WordU16_extdToWord16" private inline : Word16.t -> Word16.t; +val extdToWord32 = _import "WordU16_extdToWord32" private inline : Word16.t -> Word32.t; +val extdToWord64 = _import "WordU16_extdToWord64" private inline : Word16.t -> Word64.t; +val extdToWord8 = _import "WordU16_extdToWord8" private inline : Word16.t -> Word8.t; +val ge = _import "WordU16_ge" private inline : Word16.t * Word16.t -> Bool.t; +val gt = _import "WordU16_gt" private inline : Word16.t * Word16.t -> Bool.t; +val le = _import "WordU16_le" private inline : Word16.t * Word16.t -> Bool.t; +val lt = _import "WordU16_lt" private inline : Word16.t * Word16.t -> Bool.t; +val mul = _import "WordU16_mul" private inline : Word16.t * Word16.t -> Word16.t; +val mulCheckP = _import "WordU16_mulCheckP" private inline : Word16.t * Word16.t -> Bool.t; +val negCheckP = _import "WordU16_negCheckP" private inline : Word16.t -> Bool.t; +val quot = _import "WordU16_quot" private inline : Word16.t * Word16.t -> Word16.t; +val rem = _import "WordU16_rem" private inline : Word16.t * Word16.t -> Word16.t; val rndToReal32 = _import "WordU16_rndToReal32" private : Word16.t -> Real32.t; val rndToReal64 = _import "WordU16_rndToReal64" private : Word16.t -> Real64.t; -val rshift = _import "WordU16_rshift" private : Word16.t * Word32.t -> Word16.t; +val rshift = _import "WordU16_rshift" private inline : Word16.t * Word32.t -> Word16.t; +val subCheckP = _import "WordU16_subCheckP" private inline : Word16.t * Word16.t -> Bool.t; end structure WordU32 = struct -val addCheckOverflows = _import "WordU32_addCheckOverflows" private : Word32.t * Word32.t -> Bool.t; -val extdToWord16 = _import "WordU32_extdToWord16" private : Word32.t -> Word16.t; -val extdToWord32 = _import "WordU32_extdToWord32" private : Word32.t -> Word32.t; -val extdToWord64 = _import "WordU32_extdToWord64" private : Word32.t -> Word64.t; -val extdToWord8 = _import "WordU32_extdToWord8" private : Word32.t -> Word8.t; -val ge = _import "WordU32_ge" private : Word32.t * Word32.t -> Bool.t; -val gt = _import "WordU32_gt" private : Word32.t * Word32.t -> Bool.t; -val le = _import "WordU32_le" private : Word32.t * Word32.t -> Bool.t; -val lt = _import "WordU32_lt" private : Word32.t * Word32.t -> Bool.t; -val mul = _import "WordU32_mul" private : Word32.t * Word32.t -> Word32.t; -val mulCheckOverflows = _import "WordU32_mulCheckOverflows" private : Word32.t * Word32.t -> Bool.t; -val quot = _import "WordU32_quot" private : Word32.t * Word32.t -> Word32.t; -val rem = _import "WordU32_rem" private : Word32.t * Word32.t -> Word32.t; +val addCheckP = _import "WordU32_addCheckP" private inline : Word32.t * Word32.t -> Bool.t; +val extdToWord16 = _import "WordU32_extdToWord16" private inline : Word32.t -> Word16.t; +val extdToWord32 = _import "WordU32_extdToWord32" private inline : Word32.t -> Word32.t; +val extdToWord64 = _import "WordU32_extdToWord64" private inline : Word32.t -> Word64.t; +val extdToWord8 = _import "WordU32_extdToWord8" private inline : Word32.t -> Word8.t; +val ge = _import "WordU32_ge" private inline : Word32.t * Word32.t -> Bool.t; +val gt = _import "WordU32_gt" private inline : Word32.t * Word32.t -> Bool.t; +val le = _import "WordU32_le" private inline : Word32.t * Word32.t -> Bool.t; +val lt = _import "WordU32_lt" private inline : Word32.t * Word32.t -> Bool.t; +val mul = _import "WordU32_mul" private inline : Word32.t * Word32.t -> Word32.t; +val mulCheckP = _import "WordU32_mulCheckP" private inline : Word32.t * Word32.t -> Bool.t; +val negCheckP = _import "WordU32_negCheckP" private inline : Word32.t -> Bool.t; +val quot = _import "WordU32_quot" private inline : Word32.t * Word32.t -> Word32.t; +val rem = _import "WordU32_rem" private inline : Word32.t * Word32.t -> Word32.t; val rndToReal32 = _import "WordU32_rndToReal32" private : Word32.t -> Real32.t; val rndToReal64 = _import "WordU32_rndToReal64" private : Word32.t -> Real64.t; -val rshift = _import "WordU32_rshift" private : Word32.t * Word32.t -> Word32.t; +val rshift = _import "WordU32_rshift" private inline : Word32.t * Word32.t -> Word32.t; +val subCheckP = _import "WordU32_subCheckP" private inline : Word32.t * Word32.t -> Bool.t; end structure WordU64 = struct -val addCheckOverflows = _import "WordU64_addCheckOverflows" private : Word64.t * Word64.t -> Bool.t; -val extdToWord16 = _import "WordU64_extdToWord16" private : Word64.t -> Word16.t; -val extdToWord32 = _import "WordU64_extdToWord32" private : Word64.t -> Word32.t; -val extdToWord64 = _import "WordU64_extdToWord64" private : Word64.t -> Word64.t; -val extdToWord8 = _import "WordU64_extdToWord8" private : Word64.t -> Word8.t; -val ge = _import "WordU64_ge" private : Word64.t * Word64.t -> Bool.t; -val gt = _import "WordU64_gt" private : Word64.t * Word64.t -> Bool.t; -val le = _import "WordU64_le" private : Word64.t * Word64.t -> Bool.t; -val lt = _import "WordU64_lt" private : Word64.t * Word64.t -> Bool.t; -val mul = _import "WordU64_mul" private : Word64.t * Word64.t -> Word64.t; -val mulCheckOverflows = _import "WordU64_mulCheckOverflows" private : Word64.t * Word64.t -> Bool.t; -val quot = _import "WordU64_quot" private : Word64.t * Word64.t -> Word64.t; -val rem = _import "WordU64_rem" private : Word64.t * Word64.t -> Word64.t; +val addCheckP = _import "WordU64_addCheckP" private inline : Word64.t * Word64.t -> Bool.t; +val extdToWord16 = _import "WordU64_extdToWord16" private inline : Word64.t -> Word16.t; +val extdToWord32 = _import "WordU64_extdToWord32" private inline : Word64.t -> Word32.t; +val extdToWord64 = _import "WordU64_extdToWord64" private inline : Word64.t -> Word64.t; +val extdToWord8 = _import "WordU64_extdToWord8" private inline : Word64.t -> Word8.t; +val ge = _import "WordU64_ge" private inline : Word64.t * Word64.t -> Bool.t; +val gt = _import "WordU64_gt" private inline : Word64.t * Word64.t -> Bool.t; +val le = _import "WordU64_le" private inline : Word64.t * Word64.t -> Bool.t; +val lt = _import "WordU64_lt" private inline : Word64.t * Word64.t -> Bool.t; +val mul = _import "WordU64_mul" private inline : Word64.t * Word64.t -> Word64.t; +val mulCheckP = _import "WordU64_mulCheckP" private inline : Word64.t * Word64.t -> Bool.t; +val negCheckP = _import "WordU64_negCheckP" private inline : Word64.t -> Bool.t; +val quot = _import "WordU64_quot" private inline : Word64.t * Word64.t -> Word64.t; +val rem = _import "WordU64_rem" private inline : Word64.t * Word64.t -> Word64.t; val rndToReal32 = _import "WordU64_rndToReal32" private : Word64.t -> Real32.t; val rndToReal64 = _import "WordU64_rndToReal64" private : Word64.t -> Real64.t; -val rshift = _import "WordU64_rshift" private : Word64.t * Word32.t -> Word64.t; +val rshift = _import "WordU64_rshift" private inline : Word64.t * Word32.t -> Word64.t; +val subCheckP = _import "WordU64_subCheckP" private inline : Word64.t * Word64.t -> Bool.t; end structure WordU8 = struct -val addCheckOverflows = _import "WordU8_addCheckOverflows" private : Word8.t * Word8.t -> Bool.t; -val extdToWord16 = _import "WordU8_extdToWord16" private : Word8.t -> Word16.t; -val extdToWord32 = _import "WordU8_extdToWord32" private : Word8.t -> Word32.t; -val extdToWord64 = _import "WordU8_extdToWord64" private : Word8.t -> Word64.t; -val extdToWord8 = _import "WordU8_extdToWord8" private : Word8.t -> Word8.t; -val ge = _import "WordU8_ge" private : Word8.t * Word8.t -> Bool.t; -val gt = _import "WordU8_gt" private : Word8.t * Word8.t -> Bool.t; -val le = _import "WordU8_le" private : Word8.t * Word8.t -> Bool.t; -val lt = _import "WordU8_lt" private : Word8.t * Word8.t -> Bool.t; -val mul = _import "WordU8_mul" private : Word8.t * Word8.t -> Word8.t; -val mulCheckOverflows = _import "WordU8_mulCheckOverflows" private : Word8.t * Word8.t -> Bool.t; -val quot = _import "WordU8_quot" private : Word8.t * Word8.t -> Word8.t; -val rem = _import "WordU8_rem" private : Word8.t * Word8.t -> Word8.t; +val addCheckP = _import "WordU8_addCheckP" private inline : Word8.t * Word8.t -> Bool.t; +val extdToWord16 = _import "WordU8_extdToWord16" private inline : Word8.t -> Word16.t; +val extdToWord32 = _import "WordU8_extdToWord32" private inline : Word8.t -> Word32.t; +val extdToWord64 = _import "WordU8_extdToWord64" private inline : Word8.t -> Word64.t; +val extdToWord8 = _import "WordU8_extdToWord8" private inline : Word8.t -> Word8.t; +val ge = _import "WordU8_ge" private inline : Word8.t * Word8.t -> Bool.t; +val gt = _import "WordU8_gt" private inline : Word8.t * Word8.t -> Bool.t; +val le = _import "WordU8_le" private inline : Word8.t * Word8.t -> Bool.t; +val lt = _import "WordU8_lt" private inline : Word8.t * Word8.t -> Bool.t; +val mul = _import "WordU8_mul" private inline : Word8.t * Word8.t -> Word8.t; +val mulCheckP = _import "WordU8_mulCheckP" private inline : Word8.t * Word8.t -> Bool.t; +val negCheckP = _import "WordU8_negCheckP" private inline : Word8.t -> Bool.t; +val quot = _import "WordU8_quot" private inline : Word8.t * Word8.t -> Word8.t; +val rem = _import "WordU8_rem" private inline : Word8.t * Word8.t -> Word8.t; val rndToReal32 = _import "WordU8_rndToReal32" private : Word8.t -> Real32.t; val rndToReal64 = _import "WordU8_rndToReal64" private : Word8.t -> Real64.t; -val rshift = _import "WordU8_rshift" private : Word8.t * Word32.t -> Word8.t; +val rshift = _import "WordU8_rshift" private inline : Word8.t * Word32.t -> Word8.t; +val subCheckP = _import "WordU8_subCheckP" private inline : Word8.t * Word8.t -> Bool.t; end end end diff -Nru mlton-20130715/runtime/gen/basis-ffi.sml.chk mlton-20210117+dfsg/runtime/gen/basis-ffi.sml.chk --- mlton-20130715/runtime/gen/basis-ffi.sml.chk 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/basis-ffi.sml.chk 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +bc01909c7cc0c5df9406990d2022296a6ca1d354 diff -Nru mlton-20130715/runtime/gen/gen-basis-ffi-consts.c mlton-20210117+dfsg/runtime/gen/gen-basis-ffi-consts.c --- mlton-20130715/runtime/gen/gen-basis-ffi-consts.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/gen-basis-ffi-consts.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,518 @@ +/* This file is automatically generated. Do not edit. */ + +MkNumConst (IEEEReal_RoundingMode_FE_DOWNWARD, C_Int_t); +MkNumConst (IEEEReal_RoundingMode_FE_NOSUPPORT, C_Int_t); +MkNumConst (IEEEReal_RoundingMode_FE_TONEAREST, C_Int_t); +MkNumConst (IEEEReal_RoundingMode_FE_TOWARDZERO, C_Int_t); +MkNumConst (IEEEReal_RoundingMode_FE_UPWARD, C_Int_t); +MkNumConst (MLton_Itimer_PROF, C_Int_t); +MkNumConst (MLton_Itimer_REAL, C_Int_t); +MkNumConst (MLton_Itimer_VIRTUAL, C_Int_t); +MkNumConst (MLton_Rlimit_AS, C_Int_t); +MkNumConst (MLton_Rlimit_CORE, C_Int_t); +MkNumConst (MLton_Rlimit_CPU, C_Int_t); +MkNumConst (MLton_Rlimit_DATA, C_Int_t); +MkNumConst (MLton_Rlimit_FSIZE, C_Int_t); +MkNumConst (MLton_Rlimit_INFINITY, C_RLim_t); +MkNumConst (MLton_Rlimit_MEMLOCK, C_Int_t); +MkNumConst (MLton_Rlimit_NOFILE, C_Int_t); +MkNumConst (MLton_Rlimit_NPROC, C_Int_t); +MkNumConst (MLton_Rlimit_RSS, C_Int_t); +MkNumConst (MLton_Rlimit_STACK, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_AUTH, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_CRON, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_DAEMON, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_KERN, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_LOCAL0, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_LOCAL1, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_LOCAL2, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_LOCAL3, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_LOCAL4, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_LOCAL5, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_LOCAL6, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_LOCAL7, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_LPR, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_MAIL, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_NEWS, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_SYSLOG, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_USER, C_Int_t); +MkNumConst (MLton_Syslog_Facility_LOG_UUCP, C_Int_t); +MkNumConst (MLton_Syslog_Logopt_LOG_CONS, C_Int_t); +MkNumConst (MLton_Syslog_Logopt_LOG_NDELAY, C_Int_t); +MkNumConst (MLton_Syslog_Logopt_LOG_NOWAIT, C_Int_t); +MkNumConst (MLton_Syslog_Logopt_LOG_ODELAY, C_Int_t); +MkNumConst (MLton_Syslog_Logopt_LOG_PERROR, C_Int_t); +MkNumConst (MLton_Syslog_Logopt_LOG_PID, C_Int_t); +MkNumConst (MLton_Syslog_Severity_LOG_ALERT, C_Int_t); +MkNumConst (MLton_Syslog_Severity_LOG_CRIT, C_Int_t); +MkNumConst (MLton_Syslog_Severity_LOG_DEBUG, C_Int_t); +MkNumConst (MLton_Syslog_Severity_LOG_EMERG, C_Int_t); +MkNumConst (MLton_Syslog_Severity_LOG_ERR, C_Int_t); +MkNumConst (MLton_Syslog_Severity_LOG_INFO, C_Int_t); +MkNumConst (MLton_Syslog_Severity_LOG_NOTICE, C_Int_t); +MkNumConst (MLton_Syslog_Severity_LOG_WARNING, C_Int_t); +MkNumConst (NetHostDB_INADDR_ANY, C_Int_t); +MkNumConst (NetHostDB_inAddrSize, C_Size_t); +MkNumConst (OS_IO_POLLIN, C_Short_t); +MkNumConst (OS_IO_POLLOUT, C_Short_t); +MkNumConst (OS_IO_POLLPRI, C_Short_t); +MkNumConst (Posix_Error_E2BIG, C_Int_t); +MkNumConst (Posix_Error_EACCES, C_Int_t); +MkNumConst (Posix_Error_EADDRINUSE, C_Int_t); +MkNumConst (Posix_Error_EADDRNOTAVAIL, C_Int_t); +MkNumConst (Posix_Error_EAFNOSUPPORT, C_Int_t); +MkNumConst (Posix_Error_EAGAIN, C_Int_t); +MkNumConst (Posix_Error_EALREADY, C_Int_t); +MkNumConst (Posix_Error_EBADF, C_Int_t); +MkNumConst (Posix_Error_EBADMSG, C_Int_t); +MkNumConst (Posix_Error_EBUSY, C_Int_t); +MkNumConst (Posix_Error_ECANCELED, C_Int_t); +MkNumConst (Posix_Error_ECHILD, C_Int_t); +MkNumConst (Posix_Error_ECONNABORTED, C_Int_t); +MkNumConst (Posix_Error_ECONNREFUSED, C_Int_t); +MkNumConst (Posix_Error_ECONNRESET, C_Int_t); +MkNumConst (Posix_Error_EDEADLK, C_Int_t); +MkNumConst (Posix_Error_EDESTADDRREQ, C_Int_t); +MkNumConst (Posix_Error_EDOM, C_Int_t); +MkNumConst (Posix_Error_EDQUOT, C_Int_t); +MkNumConst (Posix_Error_EEXIST, C_Int_t); +MkNumConst (Posix_Error_EFAULT, C_Int_t); +MkNumConst (Posix_Error_EFBIG, C_Int_t); +MkNumConst (Posix_Error_EHOSTUNREACH, C_Int_t); +MkNumConst (Posix_Error_EIDRM, C_Int_t); +MkNumConst (Posix_Error_EILSEQ, C_Int_t); +MkNumConst (Posix_Error_EINPROGRESS, C_Int_t); +MkNumConst (Posix_Error_EINTR, C_Int_t); +MkNumConst (Posix_Error_EINVAL, C_Int_t); +MkNumConst (Posix_Error_EIO, C_Int_t); +MkNumConst (Posix_Error_EISCONN, C_Int_t); +MkNumConst (Posix_Error_EISDIR, C_Int_t); +MkNumConst (Posix_Error_ELOOP, C_Int_t); +MkNumConst (Posix_Error_EMFILE, C_Int_t); +MkNumConst (Posix_Error_EMLINK, C_Int_t); +MkNumConst (Posix_Error_EMSGSIZE, C_Int_t); +MkNumConst (Posix_Error_EMULTIHOP, C_Int_t); +MkNumConst (Posix_Error_ENAMETOOLONG, C_Int_t); +MkNumConst (Posix_Error_ENETDOWN, C_Int_t); +MkNumConst (Posix_Error_ENETRESET, C_Int_t); +MkNumConst (Posix_Error_ENETUNREACH, C_Int_t); +MkNumConst (Posix_Error_ENFILE, C_Int_t); +MkNumConst (Posix_Error_ENOBUFS, C_Int_t); +MkNumConst (Posix_Error_ENODATA, C_Int_t); +MkNumConst (Posix_Error_ENODEV, C_Int_t); +MkNumConst (Posix_Error_ENOENT, C_Int_t); +MkNumConst (Posix_Error_ENOEXEC, C_Int_t); +MkNumConst (Posix_Error_ENOLCK, C_Int_t); +MkNumConst (Posix_Error_ENOLINK, C_Int_t); +MkNumConst (Posix_Error_ENOMEM, C_Int_t); +MkNumConst (Posix_Error_ENOMSG, C_Int_t); +MkNumConst (Posix_Error_ENOPROTOOPT, C_Int_t); +MkNumConst (Posix_Error_ENOSPC, C_Int_t); +MkNumConst (Posix_Error_ENOSR, C_Int_t); +MkNumConst (Posix_Error_ENOSTR, C_Int_t); +MkNumConst (Posix_Error_ENOSYS, C_Int_t); +MkNumConst (Posix_Error_ENOTCONN, C_Int_t); +MkNumConst (Posix_Error_ENOTDIR, C_Int_t); +MkNumConst (Posix_Error_ENOTEMPTY, C_Int_t); +MkNumConst (Posix_Error_ENOTSOCK, C_Int_t); +MkNumConst (Posix_Error_ENOTSUP, C_Int_t); +MkNumConst (Posix_Error_ENOTTY, C_Int_t); +MkNumConst (Posix_Error_ENXIO, C_Int_t); +MkNumConst (Posix_Error_EOPNOTSUPP, C_Int_t); +MkNumConst (Posix_Error_EOVERFLOW, C_Int_t); +MkNumConst (Posix_Error_EPERM, C_Int_t); +MkNumConst (Posix_Error_EPIPE, C_Int_t); +MkNumConst (Posix_Error_EPROTO, C_Int_t); +MkNumConst (Posix_Error_EPROTONOSUPPORT, C_Int_t); +MkNumConst (Posix_Error_EPROTOTYPE, C_Int_t); +MkNumConst (Posix_Error_ERANGE, C_Int_t); +MkNumConst (Posix_Error_EROFS, C_Int_t); +MkNumConst (Posix_Error_ESPIPE, C_Int_t); +MkNumConst (Posix_Error_ESRCH, C_Int_t); +MkNumConst (Posix_Error_ESTALE, C_Int_t); +MkNumConst (Posix_Error_ETIME, C_Int_t); +MkNumConst (Posix_Error_ETIMEDOUT, C_Int_t); +MkNumConst (Posix_Error_ETXTBSY, C_Int_t); +MkNumConst (Posix_Error_EWOULDBLOCK, C_Int_t); +MkNumConst (Posix_Error_EXDEV, C_Int_t); +MkNumConst (Posix_FileSys_A_F_OK, C_Int_t); +MkNumConst (Posix_FileSys_A_R_OK, C_Int_t); +MkNumConst (Posix_FileSys_A_W_OK, C_Int_t); +MkNumConst (Posix_FileSys_A_X_OK, C_Int_t); +MkNumConst (Posix_FileSys_O_APPEND, C_Int_t); +MkNumConst (Posix_FileSys_O_BINARY, C_Int_t); +MkNumConst (Posix_FileSys_O_CREAT, C_Int_t); +MkNumConst (Posix_FileSys_O_DSYNC, C_Int_t); +MkNumConst (Posix_FileSys_O_EXCL, C_Int_t); +MkNumConst (Posix_FileSys_O_NOCTTY, C_Int_t); +MkNumConst (Posix_FileSys_O_NONBLOCK, C_Int_t); +MkNumConst (Posix_FileSys_O_RDONLY, C_Int_t); +MkNumConst (Posix_FileSys_O_RDWR, C_Int_t); +MkNumConst (Posix_FileSys_O_RSYNC, C_Int_t); +MkNumConst (Posix_FileSys_O_SYNC, C_Int_t); +MkNumConst (Posix_FileSys_O_TEXT, C_Int_t); +MkNumConst (Posix_FileSys_O_TRUNC, C_Int_t); +MkNumConst (Posix_FileSys_O_WRONLY, C_Int_t); +MkNumConst (Posix_FileSys_PC_ALLOC_SIZE_MIN, C_Int_t); +MkNumConst (Posix_FileSys_PC_ASYNC_IO, C_Int_t); +MkNumConst (Posix_FileSys_PC_CHOWN_RESTRICTED, C_Int_t); +MkNumConst (Posix_FileSys_PC_FILESIZEBITS, C_Int_t); +MkNumConst (Posix_FileSys_PC_LINK_MAX, C_Int_t); +MkNumConst (Posix_FileSys_PC_MAX_CANON, C_Int_t); +MkNumConst (Posix_FileSys_PC_MAX_INPUT, C_Int_t); +MkNumConst (Posix_FileSys_PC_NAME_MAX, C_Int_t); +MkNumConst (Posix_FileSys_PC_NO_TRUNC, C_Int_t); +MkNumConst (Posix_FileSys_PC_PATH_MAX, C_Int_t); +MkNumConst (Posix_FileSys_PC_PIPE_BUF, C_Int_t); +MkNumConst (Posix_FileSys_PC_PRIO_IO, C_Int_t); +MkNumConst (Posix_FileSys_PC_REC_INCR_XFER_SIZE, C_Int_t); +MkNumConst (Posix_FileSys_PC_REC_MAX_XFER_SIZE, C_Int_t); +MkNumConst (Posix_FileSys_PC_REC_MIN_XFER_SIZE, C_Int_t); +MkNumConst (Posix_FileSys_PC_REC_XFER_ALIGN, C_Int_t); +MkNumConst (Posix_FileSys_PC_SYMLINK_MAX, C_Int_t); +MkNumConst (Posix_FileSys_PC_SYNC_IO, C_Int_t); +MkNumConst (Posix_FileSys_PC_TWO_SYMLINKS, C_Int_t); +MkNumConst (Posix_FileSys_PC_VDISABLE, C_Int_t); +MkNumConst (Posix_FileSys_S_IFBLK, C_Mode_t); +MkNumConst (Posix_FileSys_S_IFCHR, C_Mode_t); +MkNumConst (Posix_FileSys_S_IFDIR, C_Mode_t); +MkNumConst (Posix_FileSys_S_IFIFO, C_Mode_t); +MkNumConst (Posix_FileSys_S_IFLNK, C_Mode_t); +MkNumConst (Posix_FileSys_S_IFMT, C_Mode_t); +MkNumConst (Posix_FileSys_S_IFREG, C_Mode_t); +MkNumConst (Posix_FileSys_S_IFSOCK, C_Mode_t); +MkNumConst (Posix_FileSys_S_IRGRP, C_Mode_t); +MkNumConst (Posix_FileSys_S_IROTH, C_Mode_t); +MkNumConst (Posix_FileSys_S_IRUSR, C_Mode_t); +MkNumConst (Posix_FileSys_S_IRWXG, C_Mode_t); +MkNumConst (Posix_FileSys_S_IRWXO, C_Mode_t); +MkNumConst (Posix_FileSys_S_IRWXU, C_Mode_t); +MkNumConst (Posix_FileSys_S_ISGID, C_Mode_t); +MkNumConst (Posix_FileSys_S_ISUID, C_Mode_t); +MkNumConst (Posix_FileSys_S_ISVTX, C_Mode_t); +MkNumConst (Posix_FileSys_S_IWGRP, C_Mode_t); +MkNumConst (Posix_FileSys_S_IWOTH, C_Mode_t); +MkNumConst (Posix_FileSys_S_IWUSR, C_Mode_t); +MkNumConst (Posix_FileSys_S_IXGRP, C_Mode_t); +MkNumConst (Posix_FileSys_S_IXOTH, C_Mode_t); +MkNumConst (Posix_FileSys_S_IXUSR, C_Mode_t); +MkNumConst (Posix_IO_F_DUPFD, C_Int_t); +MkNumConst (Posix_IO_F_GETFD, C_Int_t); +MkNumConst (Posix_IO_F_GETFL, C_Int_t); +MkNumConst (Posix_IO_F_GETOWN, C_Int_t); +MkNumConst (Posix_IO_F_SETFD, C_Int_t); +MkNumConst (Posix_IO_F_SETFL, C_Int_t); +MkNumConst (Posix_IO_F_SETOWN, C_Int_t); +MkNumConst (Posix_IO_FD_CLOEXEC, C_Int_t); +MkNumConst (Posix_IO_FLock_F_GETLK, C_Int_t); +MkNumConst (Posix_IO_FLock_F_RDLCK, C_Short_t); +MkNumConst (Posix_IO_FLock_F_SETLK, C_Int_t); +MkNumConst (Posix_IO_FLock_F_SETLKW, C_Int_t); +MkNumConst (Posix_IO_FLock_F_UNLCK, C_Short_t); +MkNumConst (Posix_IO_FLock_F_WRLCK, C_Short_t); +MkNumConst (Posix_IO_FLock_SEEK_CUR, C_Short_t); +MkNumConst (Posix_IO_FLock_SEEK_END, C_Short_t); +MkNumConst (Posix_IO_FLock_SEEK_SET, C_Short_t); +MkNumConst (Posix_IO_O_ACCMODE, C_Int_t); +MkNumConst (Posix_IO_SEEK_CUR, C_Int_t); +MkNumConst (Posix_IO_SEEK_END, C_Int_t); +MkNumConst (Posix_IO_SEEK_SET, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_C_BIND, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_C_DEV, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_CHAR_TERM, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_FORT_DEV, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_FORT_RUN, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_LOCALEDEF, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_PBS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_PBS_ACCOUNTING, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_PBS_CHECKPOINT, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_PBS_LOCATE, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_PBS_MESSAGE, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_PBS_TRACK, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_SW_DEV, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_UPE, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_2_VERSION, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_ADVISORY_INFO, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_AIO_LISTIO_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_AIO_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_AIO_PRIO_DELTA_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_ARG_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_ASYNCHRONOUS_IO, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_ATEXIT_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_AVPHYS_PAGES, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_BARRIERS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_BC_BASE_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_BC_DIM_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_BC_SCALE_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_BC_STRING_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_CHILD_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_CLK_TCK, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_CLOCK_SELECTION, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_COLL_WEIGHTS_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_CPUTIME, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_DELAYTIMER_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_EXPR_NEST_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_FSYNC, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_GETGR_R_SIZE_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_GETPW_R_SIZE_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_HOST_NAME_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_IOV_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_IPV6, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_JOB_CONTROL, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_LINE_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_LOGIN_NAME_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_MAPPED_FILES, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_MEMLOCK, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_MEMLOCK_RANGE, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_MEMORY_PROTECTION, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_MESSAGE_PASSING, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_MONOTONIC_CLOCK, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_MQ_OPEN_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_MQ_PRIO_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_NGROUPS_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_NPROCESSORS_CONF, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_NPROCESSORS_ONLN, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_OPEN_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_PAGE_SIZE, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_PAGESIZE, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_PHYS_PAGES, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_PRIORITIZED_IO, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_PRIORITY_SCHEDULING, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_RAW_SOCKETS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_RE_DUP_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_READER_WRITER_LOCKS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_REALTIME_SIGNALS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_REGEXP, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_RTSIG_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SAVED_IDS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SEM_NSEMS_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SEM_VALUE_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SEMAPHORES, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SHARED_MEMORY_OBJECTS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SHELL, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SIGQUEUE_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SPAWN, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SPIN_LOCKS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SPORADIC_SERVER, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SS_REPL_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_STREAM_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SYMLOOP_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_SYNCHRONIZED_IO, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_ATTR_STACKADDR, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_ATTR_STACKSIZE, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_CPUTIME, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_DESTRUCTOR_ITERATIONS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_KEYS_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_PRIO_INHERIT, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_PRIO_PROTECT, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_PRIORITY_SCHEDULING, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_PROCESS_SHARED, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_SAFE_FUNCTIONS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_SPORADIC_SERVER, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_STACK_MIN, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREAD_THREADS_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_THREADS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TIMEOUTS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TIMER_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TIMERS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TRACE, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TRACE_EVENT_FILTER, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TRACE_EVENT_NAME_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TRACE_INHERIT, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TRACE_LOG, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TRACE_NAME_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TRACE_SYS_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TRACE_USER_EVENT_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TTY_NAME_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TYPED_MEMORY_OBJECTS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_TZNAME_MAX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_V6_ILP32_OFF32, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_V6_ILP32_OFFBIG, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_V6_LP64_OFF64, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_V6_LPBIG_OFFBIG, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_VERSION, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XBS5_ILP32_OFF32, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XBS5_ILP32_OFFBIG, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XBS5_LP64_OFF64, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XBS5_LPBIG_OFFBIG, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XOPEN_CRYPT, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XOPEN_ENH_I18N, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XOPEN_LEGACY, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XOPEN_REALTIME, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XOPEN_REALTIME_THREADS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XOPEN_SHM, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XOPEN_STREAMS, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XOPEN_UNIX, C_Int_t); +MkNumConst (Posix_ProcEnv_SC_XOPEN_VERSION, C_Int_t); +MkNumConst (Posix_Process_W_NOHANG, C_Int_t); +MkNumConst (Posix_Process_W_UNTRACED, C_Int_t); +MkNumConst (Posix_Signal_NSIG, C_Int_t); +MkNumConst (Posix_Signal_SIG_BLOCK, C_Int_t); +MkNumConst (Posix_Signal_SIG_SETMASK, C_Int_t); +MkNumConst (Posix_Signal_SIG_UNBLOCK, C_Int_t); +MkNumConst (Posix_Signal_SIGABRT, C_Signal_t); +MkNumConst (Posix_Signal_SIGALRM, C_Signal_t); +MkNumConst (Posix_Signal_SIGBUS, C_Signal_t); +MkNumConst (Posix_Signal_SIGCHLD, C_Signal_t); +MkNumConst (Posix_Signal_SIGCONT, C_Signal_t); +MkNumConst (Posix_Signal_SIGFPE, C_Signal_t); +MkNumConst (Posix_Signal_SIGHUP, C_Signal_t); +MkNumConst (Posix_Signal_SIGILL, C_Signal_t); +MkNumConst (Posix_Signal_SIGINT, C_Signal_t); +MkNumConst (Posix_Signal_SIGKILL, C_Signal_t); +MkNumConst (Posix_Signal_SIGPIPE, C_Signal_t); +MkNumConst (Posix_Signal_SIGPOLL, C_Signal_t); +MkNumConst (Posix_Signal_SIGPROF, C_Signal_t); +MkNumConst (Posix_Signal_SIGQUIT, C_Signal_t); +MkNumConst (Posix_Signal_SIGSEGV, C_Signal_t); +MkNumConst (Posix_Signal_sigSetLen, C_Size_t); +MkNumConst (Posix_Signal_SIGSTOP, C_Signal_t); +MkNumConst (Posix_Signal_SIGSYS, C_Signal_t); +MkNumConst (Posix_Signal_SIGTERM, C_Signal_t); +MkNumConst (Posix_Signal_SIGTRAP, C_Signal_t); +MkNumConst (Posix_Signal_SIGTSTP, C_Signal_t); +MkNumConst (Posix_Signal_SIGTTIN, C_Signal_t); +MkNumConst (Posix_Signal_SIGTTOU, C_Signal_t); +MkNumConst (Posix_Signal_SIGURG, C_Signal_t); +MkNumConst (Posix_Signal_SIGUSR1, C_Signal_t); +MkNumConst (Posix_Signal_SIGUSR2, C_Signal_t); +MkNumConst (Posix_Signal_SIGVTALRM, C_Signal_t); +MkNumConst (Posix_Signal_SIGXCPU, C_Signal_t); +MkNumConst (Posix_Signal_SIGXFSZ, C_Signal_t); +MkNumConst (Posix_TTY_B0, C_Speed_t); +MkNumConst (Posix_TTY_B110, C_Speed_t); +MkNumConst (Posix_TTY_B1200, C_Speed_t); +MkNumConst (Posix_TTY_B134, C_Speed_t); +MkNumConst (Posix_TTY_B150, C_Speed_t); +MkNumConst (Posix_TTY_B1800, C_Speed_t); +MkNumConst (Posix_TTY_B19200, C_Speed_t); +MkNumConst (Posix_TTY_B200, C_Speed_t); +MkNumConst (Posix_TTY_B2400, C_Speed_t); +MkNumConst (Posix_TTY_B300, C_Speed_t); +MkNumConst (Posix_TTY_B38400, C_Speed_t); +MkNumConst (Posix_TTY_B4800, C_Speed_t); +MkNumConst (Posix_TTY_B50, C_Speed_t); +MkNumConst (Posix_TTY_B600, C_Speed_t); +MkNumConst (Posix_TTY_B75, C_Speed_t); +MkNumConst (Posix_TTY_B9600, C_Speed_t); +MkNumConst (Posix_TTY_C_CLOCAL, C_TCFlag_t); +MkNumConst (Posix_TTY_C_CREAD, C_TCFlag_t); +MkNumConst (Posix_TTY_C_CS5, C_TCFlag_t); +MkNumConst (Posix_TTY_C_CS6, C_TCFlag_t); +MkNumConst (Posix_TTY_C_CS7, C_TCFlag_t); +MkNumConst (Posix_TTY_C_CS8, C_TCFlag_t); +MkNumConst (Posix_TTY_C_CSIZE, C_TCFlag_t); +MkNumConst (Posix_TTY_C_CSTOPB, C_TCFlag_t); +MkNumConst (Posix_TTY_C_HUPCL, C_TCFlag_t); +MkNumConst (Posix_TTY_C_PARENB, C_TCFlag_t); +MkNumConst (Posix_TTY_C_PARODD, C_TCFlag_t); +MkNumConst (Posix_TTY_I_BRKINT, C_TCFlag_t); +MkNumConst (Posix_TTY_I_ICRNL, C_TCFlag_t); +MkNumConst (Posix_TTY_I_IGNBRK, C_TCFlag_t); +MkNumConst (Posix_TTY_I_IGNCR, C_TCFlag_t); +MkNumConst (Posix_TTY_I_IGNPAR, C_TCFlag_t); +MkNumConst (Posix_TTY_I_INLCR, C_TCFlag_t); +MkNumConst (Posix_TTY_I_INPCK, C_TCFlag_t); +MkNumConst (Posix_TTY_I_ISTRIP, C_TCFlag_t); +MkNumConst (Posix_TTY_I_IXANY, C_TCFlag_t); +MkNumConst (Posix_TTY_I_IXOFF, C_TCFlag_t); +MkNumConst (Posix_TTY_I_IXON, C_TCFlag_t); +MkNumConst (Posix_TTY_I_PARMRK, C_TCFlag_t); +MkNumConst (Posix_TTY_L_ECHO, C_TCFlag_t); +MkNumConst (Posix_TTY_L_ECHOE, C_TCFlag_t); +MkNumConst (Posix_TTY_L_ECHOK, C_TCFlag_t); +MkNumConst (Posix_TTY_L_ECHONL, C_TCFlag_t); +MkNumConst (Posix_TTY_L_ICANON, C_TCFlag_t); +MkNumConst (Posix_TTY_L_IEXTEN, C_TCFlag_t); +MkNumConst (Posix_TTY_L_ISIG, C_TCFlag_t); +MkNumConst (Posix_TTY_L_NOFLSH, C_TCFlag_t); +MkNumConst (Posix_TTY_L_TOSTOP, C_TCFlag_t); +MkNumConst (Posix_TTY_O_BS0, C_TCFlag_t); +MkNumConst (Posix_TTY_O_BS1, C_TCFlag_t); +MkNumConst (Posix_TTY_O_BSDLY, C_TCFlag_t); +MkNumConst (Posix_TTY_O_CR0, C_TCFlag_t); +MkNumConst (Posix_TTY_O_CR1, C_TCFlag_t); +MkNumConst (Posix_TTY_O_CR2, C_TCFlag_t); +MkNumConst (Posix_TTY_O_CR3, C_TCFlag_t); +MkNumConst (Posix_TTY_O_CRDLY, C_TCFlag_t); +MkNumConst (Posix_TTY_O_FF0, C_TCFlag_t); +MkNumConst (Posix_TTY_O_FF1, C_TCFlag_t); +MkNumConst (Posix_TTY_O_FFDLY, C_TCFlag_t); +MkNumConst (Posix_TTY_O_NL0, C_TCFlag_t); +MkNumConst (Posix_TTY_O_NL1, C_TCFlag_t); +MkNumConst (Posix_TTY_O_NLDLY, C_TCFlag_t); +MkNumConst (Posix_TTY_O_OCRNL, C_TCFlag_t); +MkNumConst (Posix_TTY_O_OFILL, C_TCFlag_t); +MkNumConst (Posix_TTY_O_ONLCR, C_TCFlag_t); +MkNumConst (Posix_TTY_O_ONLRET, C_TCFlag_t); +MkNumConst (Posix_TTY_O_ONOCR, C_TCFlag_t); +MkNumConst (Posix_TTY_O_OPOST, C_TCFlag_t); +MkNumConst (Posix_TTY_O_TAB0, C_TCFlag_t); +MkNumConst (Posix_TTY_O_TAB1, C_TCFlag_t); +MkNumConst (Posix_TTY_O_TAB2, C_TCFlag_t); +MkNumConst (Posix_TTY_O_TAB3, C_TCFlag_t); +MkNumConst (Posix_TTY_O_TABDLY, C_TCFlag_t); +MkNumConst (Posix_TTY_O_VT0, C_TCFlag_t); +MkNumConst (Posix_TTY_O_VT1, C_TCFlag_t); +MkNumConst (Posix_TTY_O_VTDLY, C_TCFlag_t); +MkNumConst (Posix_TTY_TC_TCIFLUSH, C_Int_t); +MkNumConst (Posix_TTY_TC_TCIOFF, C_Int_t); +MkNumConst (Posix_TTY_TC_TCIOFLUSH, C_Int_t); +MkNumConst (Posix_TTY_TC_TCION, C_Int_t); +MkNumConst (Posix_TTY_TC_TCOFLUSH, C_Int_t); +MkNumConst (Posix_TTY_TC_TCOOFF, C_Int_t); +MkNumConst (Posix_TTY_TC_TCOON, C_Int_t); +MkNumConst (Posix_TTY_TC_TCSADRAIN, C_Int_t); +MkNumConst (Posix_TTY_TC_TCSAFLUSH, C_Int_t); +MkNumConst (Posix_TTY_TC_TCSANOW, C_Int_t); +MkNumConst (Posix_TTY_V_NCCS, C_Int_t); +MkNumConst (Posix_TTY_V_VEOF, C_Int_t); +MkNumConst (Posix_TTY_V_VEOL, C_Int_t); +MkNumConst (Posix_TTY_V_VERASE, C_Int_t); +MkNumConst (Posix_TTY_V_VINTR, C_Int_t); +MkNumConst (Posix_TTY_V_VKILL, C_Int_t); +MkNumConst (Posix_TTY_V_VMIN, C_Int_t); +MkNumConst (Posix_TTY_V_VQUIT, C_Int_t); +MkNumConst (Posix_TTY_V_VSTART, C_Int_t); +MkNumConst (Posix_TTY_V_VSTOP, C_Int_t); +MkNumConst (Posix_TTY_V_VSUSP, C_Int_t); +MkNumConst (Posix_TTY_V_VTIME, C_Int_t); +MkNumConst (Socket_AF_INET, C_Int_t); +MkNumConst (Socket_AF_INET6, C_Int_t); +MkNumConst (Socket_AF_UNIX, C_Int_t); +MkNumConst (Socket_AF_UNSPEC, C_Int_t); +MkNumConst (Socket_Ctl_SO_ACCEPTCONN, C_Int_t); +MkNumConst (Socket_Ctl_SO_BROADCAST, C_Int_t); +MkNumConst (Socket_Ctl_SO_DEBUG, C_Int_t); +MkNumConst (Socket_Ctl_SO_DONTROUTE, C_Int_t); +MkNumConst (Socket_Ctl_SO_ERROR, C_Int_t); +MkNumConst (Socket_Ctl_SO_KEEPALIVE, C_Int_t); +MkNumConst (Socket_Ctl_SO_LINGER, C_Int_t); +MkNumConst (Socket_Ctl_SO_OOBINLINE, C_Int_t); +MkNumConst (Socket_Ctl_SO_RCVBUF, C_Int_t); +MkNumConst (Socket_Ctl_SO_RCVLOWAT, C_Int_t); +MkNumConst (Socket_Ctl_SO_RCVTIMEO, C_Int_t); +MkNumConst (Socket_Ctl_SO_REUSEADDR, C_Int_t); +MkNumConst (Socket_Ctl_SO_SNDBUF, C_Int_t); +MkNumConst (Socket_Ctl_SO_SNDLOWAT, C_Int_t); +MkNumConst (Socket_Ctl_SO_SNDTIMEO, C_Int_t); +MkNumConst (Socket_Ctl_SO_TYPE, C_Int_t); +MkNumConst (Socket_Ctl_SOL_SOCKET, C_Int_t); +MkNumConst (Socket_INetSock_Ctl_IPPROTO_TCP, C_Int_t); +MkNumConst (Socket_INetSock_Ctl_TCP_NODELAY, C_Int_t); +MkNumConst (Socket_MSG_CTRUNC, C_Int_t); +MkNumConst (Socket_MSG_DONTROUTE, C_Int_t); +MkNumConst (Socket_MSG_DONTWAIT, C_Int_t); +MkNumConst (Socket_MSG_EOR, C_Int_t); +MkNumConst (Socket_MSG_OOB, C_Int_t); +MkNumConst (Socket_MSG_PEEK, C_Int_t); +MkNumConst (Socket_MSG_TRUNC, C_Int_t); +MkNumConst (Socket_MSG_WAITALL, C_Int_t); +MkNumConst (Socket_SHUT_RD, C_Int_t); +MkNumConst (Socket_SHUT_RDWR, C_Int_t); +MkNumConst (Socket_SHUT_WR, C_Int_t); +MkNumConst (Socket_SOCK_DGRAM, C_Int_t); +MkNumConst (Socket_SOCK_RAW, C_Int_t); +MkNumConst (Socket_SOCK_SEQPACKET, C_Int_t); +MkNumConst (Socket_SOCK_STREAM, C_Int_t); +MkNumConst (Socket_sockAddrStorageLen, C_Size_t); diff -Nru mlton-20130715/runtime/gen/gen-basis-ffi-consts.c.chk mlton-20210117+dfsg/runtime/gen/gen-basis-ffi-consts.c.chk --- mlton-20130715/runtime/gen/gen-basis-ffi-consts.c.chk 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/gen-basis-ffi-consts.c.chk 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +4a0e02080b7bdc2d2117952d219978e74f303aff diff -Nru mlton-20130715/runtime/gen/gen-basis-ffi.sml mlton-20210117+dfsg/runtime/gen/gen-basis-ffi.sml --- mlton-20130715/runtime/gen/gen-basis-ffi.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/gen-basis-ffi.sml 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,8 @@ -(* Copyright (C) 2004-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh +(* Copyright (C) 2019-2020 Matthew Fluet. + * Copyright (C) 2004-2006, 2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. *) @@ -95,6 +96,17 @@ | Unit | Vector of t + local + fun make s t = + case t of + Base name => + Name.compare (name, Name.T [s, "t"]) = EQUAL + | _ => false + in + val isString = make "String8" + val isBool = make "Bool" + end + fun toC t = case t of Array t => concat ["Array(", toC t, ")"] @@ -165,6 +177,8 @@ name: Name.t, ty: {args: Type.t list, ret: Type.t}} + | SymConst of {name: Name.t, + ty: Type.t} | Symbol of {name: Name.t, ty: Type.t} @@ -172,6 +186,7 @@ case entry of Const {name,...} => name | Import {name,...} => name + | SymConst {name, ...} => name | Symbol {name,...} => name fun compare (entry1, entry2) = @@ -188,7 +203,8 @@ ";"] | Import {attrs, name, ty = {args, ret}} => String.concat - [attrs, + ["PRIVATE ", + attrs, if String.size attrs > 0 then " " else "", Type.toC ret, " ", @@ -196,6 +212,13 @@ "(", String.concatWith "," (List.map Type.toC args), ");"] + | SymConst {name, ty} => + String.concat + ["PRIVATE extern const ", + Type.toC ty, + " ", + Name.toC name, + ";"] | Symbol {name, ty} => String.concat ["PRIVATE extern ", @@ -220,11 +243,25 @@ Name.last name, " = _import \"", Name.toC name, - "\" private : ", + "\" private ", + if List.exists (fn s => s = "INLINE") (String.tokens Char.isSpace attrs) + then "inline " else "", + ": ", String.concatWith " * " (List.map Type.toML args), " -> ", Type.toML ret, ";"] + | SymConst {name, ty} => + String.concat + ["val ", + Name.last name, + " = #1 (_symbol \"", + Name.toC name, + "\" private : (unit -> (", + Type.toML ty, + ")) * ((", + Type.toML ty, + ") -> unit);) ()"] | Symbol {name, ty} => String.concat ["val (", @@ -239,20 +276,28 @@ Type.toML ty, ") -> unit);"] - fun parseConst (s, name) = + fun parseType (s, kw) = let - val s = #2 (Substring.splitAt (s, 6)) + val s = #2 (Substring.splitAt (s, 1 + String.size kw)) val s = Substring.droplSpace s val s = if Substring.isPrefix ":" s - then #2 (Substring.splitAt (s, 1)) - else raise Fail (concat ["Entry.parseConst: \"", Substring.string s, "\""]) + then #2 (Substring.splitAt (s, 1)) + else raise Fail (concat ["Entry.parse", kw, ": \"", Substring.string s, "\""]) val (ret, rest) = Type.parse s val () = if Substring.isEmpty rest then () - else raise Fail (concat ["Entry.parseConst: \"", Substring.string s, "\""]) + else raise Fail (concat ["Entry.parse", kw, ": \"", Substring.string s, "\""]) + in + ret + end + + + fun parseConst (s, name) = + let + val ty = parseType (s, "Const") in Const {name = name, - ty = ret} + ty = ty} end fun parseImport (s, name) = @@ -277,20 +322,20 @@ ty = {args = args, ret = ret}} end + fun parseSymConst (s, name) = + let + val ty = parseType (s, "SymConst") + in + SymConst {name = name, + ty = ty} + end + fun parseSymbol (s, name) = let - val s = #2 (Substring.splitAt (s, 7)) - val s = Substring.droplSpace s - val s = if Substring.isPrefix ":" s - then #2 (Substring.splitAt (s, 1)) - else raise Fail (concat ["Entry.parseSymbol: \"", Substring.string s, "\""]) - val (ret, rest) = Type.parse s - val () = if Substring.isEmpty rest - then () - else raise Fail (concat ["Entry.parseSymbol: \"", Substring.string s, "\""]) + val ty = parseType (s, "Symbol") in Symbol {name = name, - ty = ret} + ty = ty} end fun parse s = @@ -306,6 +351,8 @@ then parseConst (rest, name) else if Substring.isPrefix "_import" rest then parseImport (rest, name) + else if Substring.isPrefix "_symconst" rest + then parseSymConst (rest, name) else if Substring.isPrefix "_symbol" rest then parseSymbol (rest, name) else raise Fail (concat ["Entry.parse: \"", Substring.string s, "\""]) @@ -315,7 +362,7 @@ val entries = let - val f = TextIO.openIn "basis-ffi.def" + val f = TextIO.stdIn fun loop entries = case TextIO.inputLine f of NONE => List.rev entries @@ -336,24 +383,19 @@ fun outputC entries = let - val f = TextIO.openOut "basis-ffi.h" - fun print s = TextIO.output (f, s) fun println s = if s <> "" then (print s; print "\n") else () - val () = println "/* This file is automatically generated. Do not edit. */\n\n" - val () = println "#ifndef _MLTON_BASIS_FFI_H_\n" - val () = println "#define _MLTON_BASIS_FFI_H_\n" + val () = println "/* This file is automatically generated. Do not edit. */\n" + val () = println "#ifndef _MLTON_BASIS_FFI_H_" + val () = println "#define _MLTON_BASIS_FFI_H_" val () = List.app (fn entry => println (Entry.toC entry)) entries val () = println "#endif /* _MLTON_BASIS_FFI_H_ */" - val () = TextIO.closeOut f in () end fun outputML entries = let - val f = TextIO.openOut "basis-ffi.sml" - fun print s = TextIO.output (f, s) fun println s = if s <> "" then (print s; print "\n") else () val primStrs = @@ -400,10 +442,44 @@ val () = List.app (fn _ => println "end") cur val () = println "end" val () = println "end" - val () = TextIO.closeOut f in () end -val () = outputC entries -val () = outputML entries +fun outputGenConsts entries = + let + fun println s = if s <> "" then (print s; print "\n") else () + + val () = println "/* This file is automatically generated. Do not edit. */\n" + val () = List.app (fn entry => + case entry of + Entry.Const {name, ty} => + if Type.isBool ty + then println (concat ["MkBoolConst (", + Name.toC name, + ");"]) + else if Type.isString ty + then println (concat ["MkStrConst (", + Name.toC name, + ");"]) + else println (concat ["MkNumConst (", + Name.toC name, + ", ", + Type.toC ty, + ");"]) + | _ => ()) + entries + in + () + end + +val () = + case CommandLine.arguments () of + ["basis-ffi.h"] => outputC entries + | ["basis-ffi.sml"] => outputML entries + | ["gen-basis-ffi-consts.c"] => outputGenConsts entries + | _ => (TextIO.output (TextIO.stdErr, + concat ["usage: ", + CommandLine.name (), + " basis-ffi.h|basis-ffi.sml|gen-basis-ffi-consts.c\n"]) + ; OS.Process.exit OS.Process.failure) diff -Nru mlton-20130715/runtime/gen/gen-constants.c mlton-20210117+dfsg/runtime/gen/gen-constants.c --- mlton-20130715/runtime/gen/gen-constants.c 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/gen-constants.c 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,78 @@ +/* Copyright (C) 2016-2017,2020 Matthew Fluet. + * Copyright (C) 2007 Henry Cejtin, Matthew Fluet, Suresh + * Jagannathan, and Stephen Weeks. + * + * MLton is released under a HPND-style license. + * See the file MLton-LICENSE for details. + */ + +#define MLTON_GC_INTERNAL_TYPES +#include "platform.h" + +#define MkSize(name, value) \ + fprintf (stdout, "size::" #name " = %"PRIuMAX"\n", (uintmax_t)(value)) + +#define MkGCFieldOffset(field) \ + fprintf (stdout, "offset::gcState." #field " = %"PRIuMAX"\n", (uintmax_t)(offsetof (struct GC_state, field))) + +#define MkBoolConst(name) \ + fprintf (stdout, "const::" #name " = %s\n", name ? "true" : "false") + +#define MkNumConst(name, ty) \ + do { \ + if ((double)((ty)(0.25)) > 0) { \ + fprintf (stdout, "const::" #name " = %.20f\n", (double)name); \ + } else if ((double)((ty)(-1)) > 0) { \ + fprintf (stdout, "const::" #name " = %"PRIuMAX"\n", (uintmax_t)name); \ + } else { \ + fprintf (stdout, "const::" #name " = %"PRIdMAX"\n", (intmax_t)name); \ + } \ + } while (0) + +#define MkStrConst(name) \ + fprintf (stdout, "const::" #name " = %s\n", name) + +int main (__attribute__ ((unused)) int argc, + __attribute__ ((unused)) char* argv[]) { + +#ifdef __pie__ + fprintf (stdout, "default::pie = %d\n", __pie__); +#else + fprintf (stdout, "default::pie = %d\n", 0); +#endif +#ifdef __pic__ + fprintf (stdout, "default::pic = %d\n", __pic__); +#else + fprintf (stdout, "default::pic = %d\n", 0); +#endif + + MkSize (cint, sizeof(C_Int_t)); + MkSize (cpointer, sizeof(C_Pointer_t)); + MkSize (cptrdiff, sizeof(C_Ptrdiff_t)); + MkSize (csize, sizeof(C_Size_t)); + MkSize (header, sizeof(GC_header)); + MkSize (mplimb, sizeof(C_MPLimb_t)); + MkSize (normalMetaData, GC_NORMAL_METADATA_SIZE); + MkSize (objptr, sizeof(objptr)); + MkSize (seqIndex, sizeof(GC_sequenceLength)); + MkSize (sequenceMetaData, GC_SEQUENCE_METADATA_SIZE); + + MkGCFieldOffset (atomicState); + MkGCFieldOffset (exnStack); + MkGCFieldOffset (frontier); + MkGCFieldOffset (generationalMaps.cardMapAbsolute); + MkGCFieldOffset (limit); + MkGCFieldOffset (limitPlusSlop); + MkGCFieldOffset (signalsInfo.signalIsPending); + MkGCFieldOffset (sourceMaps.curSourceSeqIndex); + MkGCFieldOffset (stackBottom); + MkGCFieldOffset (stackLimit); + MkGCFieldOffset (stackTop); + + MkStrConst (MLton_Platform_Arch_host); + MkStrConst (MLton_Platform_OS_host); + MkBoolConst (MLton_Platform_Arch_bigendian); + #include "gen/gen-basis-ffi-consts.c" + + return 0; +} diff -Nru mlton-20130715/runtime/gen/gen-sizes.c mlton-20210117+dfsg/runtime/gen/gen-sizes.c --- mlton-20130715/runtime/gen/gen-sizes.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/gen-sizes.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -/* Copyright (C) 2007 Henry Cejtin, Matthew Fluet, Suresh - * Jagannathan, and Stephen Weeks. - * - * MLton is released under a BSD-style license. - * See the file MLton-LICENSE for details. - */ - -#define MLTON_GC_INTERNAL_TYPES -#include "platform.h" -struct GC_state gcState; - -int main (__attribute__ ((unused)) int argc, - __attribute__ ((unused)) char* argv[]) { - FILE *sizesFd; - - sizesFd = fopen_safe ("sizes", "w"); - - fprintf (sizesFd, "cint = %"PRIuMAX"\n", (uintmax_t)sizeof(C_Int_t)); - fprintf (sizesFd, "cpointer = %"PRIuMAX"\n", (uintmax_t)sizeof(C_Pointer_t)); - fprintf (sizesFd, "cptrdiff = %"PRIuMAX"\n", (uintmax_t)sizeof(C_Ptrdiff_t)); - fprintf (sizesFd, "csize = %"PRIuMAX"\n", (uintmax_t)sizeof(C_Size_t)); - fprintf (sizesFd, "header = %"PRIuMAX"\n", (uintmax_t)sizeof(GC_header)); - fprintf (sizesFd, "mplimb = %"PRIuMAX"\n", (uintmax_t)sizeof(C_MPLimb_t)); - fprintf (sizesFd, "objptr = %"PRIuMAX"\n", (uintmax_t)sizeof(objptr)); - fprintf (sizesFd, "seqIndex = %"PRIuMAX"\n", (uintmax_t)sizeof(GC_arrayLength)); - - fclose_safe(sizesFd); - - return 0; -} diff -Nru mlton-20130715/runtime/gen/gen-types.c mlton-20210117+dfsg/runtime/gen/gen-types.c --- mlton-20130715/runtime/gen/gen-types.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/gen-types.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,19 +1,21 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2012,2017,2020 Matthew Fluet. * Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ #include "cenv.h" #include "util.h" +enum tgt {mlTypesH, cTypesH, cTypesSML}; + static const char* mlTypesHPrefix[] = { "/* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh", " * Jagannathan, and Stephen Weeks.", " *", - " * MLton is released under a BSD-style license.", + " * MLton is released under a HPND-style license.", " * See the file MLton-LICENSE for details.", " */", "", @@ -23,9 +25,6 @@ "/* We need these because in header files for exported SML functions, ", " * types.h is included without cenv.h.", " */", - "#ifndef _ISOC99_SOURCE", - "#define _ISOC99_SOURCE", - "#endif", "#if (defined (_AIX) || defined (__hpux__) || defined (__OpenBSD__))", "#include ", "#elif (defined (__sun__))", @@ -41,7 +40,7 @@ "/* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh", " * Jagannathan, and Stephen Weeks.", " *", - " * MLton is released under a BSD-style license.", + " * MLton is released under a HPND-style license.", " * See the file MLton-LICENSE for details.", " */", "", @@ -55,7 +54,7 @@ "(* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh", " * Jagannathan, and Stephen Weeks.", " *", - " * MLton is released under a BSD-style license.", + " * MLton is released under a HPND-style license.", " * See the file MLton-LICENSE for details.", " *)", "", @@ -151,31 +150,38 @@ #define booltype(t, bt, name) \ do { \ - writeString (cTypesHFd, "typedef"); \ - writeString (cTypesHFd, " /* "); \ - writeString (cTypesHFd, #t); \ - writeString (cTypesHFd, " */ "); \ - writeString (cTypesHFd, bt); \ - writeUintmaxU (cTypesHFd, CHAR_BIT * sizeof(t)); \ - writeString (cTypesHFd, "_t"); \ - writeString (cTypesHFd, " "); \ - writeString (cTypesHFd, "C_"); \ - writeString (cTypesHFd, name); \ - writeString (cTypesHFd, "_t;"); \ - writeNewline (cTypesHFd); \ - writeString (cTypesSMLFd, "structure C_"); \ - writeString (cTypesSMLFd, name); \ - writeString (cTypesSMLFd, " = WordToBool ("); \ - writeString (cTypesSMLFd, "type t = "); \ - writeString (cTypesSMLFd, "Word"); \ - writeUintmaxU (cTypesSMLFd, CHAR_BIT * sizeof(t));\ - writeString (cTypesSMLFd, ".word"); \ - writeString (cTypesSMLFd, " "); \ - writeString (cTypesSMLFd, "val zero: t = 0wx0"); \ - writeString (cTypesSMLFd, " "); \ - writeString (cTypesSMLFd, "val one: t = 0wx1"); \ - writeString (cTypesSMLFd, ")"); \ - writeNewline (cTypesSMLFd); \ + switch (tgt) { \ + case mlTypesH: \ + break; \ + case cTypesH: \ + writeString (stdout, "typedef"); \ + writeString (stdout, " /* "); \ + writeString (stdout, #t); \ + writeString (stdout, " */ "); \ + writeString (stdout, bt); \ + writeUintmaxU (stdout, CHAR_BIT * sizeof(t)); \ + writeString (stdout, "_t"); \ + writeString (stdout, " "); \ + writeString (stdout, "C_"); \ + writeString (stdout, name); \ + writeString (stdout, "_t;"); \ + break; \ + case cTypesSML: \ + writeString (stdout, "structure C_"); \ + writeString (stdout, name); \ + writeString (stdout, " = WordToBool ("); \ + writeString (stdout, "type t = "); \ + writeString (stdout, "Word"); \ + writeUintmaxU (stdout, CHAR_BIT * sizeof(t)); \ + writeString (stdout, ".word"); \ + writeString (stdout, " "); \ + writeString (stdout, "val zero: t = 0wx0"); \ + writeString (stdout, " "); \ + writeString (stdout, "val one: t = 0wx1"); \ + writeString (stdout, ")"); \ + break; \ + } \ + writeNewline (stdout); \ } while (0) #define systype(t, bt, name) \ do { \ @@ -185,51 +191,58 @@ char *btUpper = strdup(bt); \ for (size_t i = 0; i < strlen(btUpper); i++) \ btUpper[i] = (char)(toupper((int)(bt[i]))); \ - writeString (cTypesHFd, "typedef"); \ - writeString (cTypesHFd, " /* "); \ - writeString (cTypesHFd, #t); \ - writeString (cTypesHFd, " */ "); \ - writeString (cTypesHFd, bt); \ - writeUintmaxU (cTypesHFd, CHAR_BIT * sizeof(t)); \ - writeString (cTypesHFd, "_t"); \ - writeString (cTypesHFd, " "); \ - writeString (cTypesHFd, "C_"); \ - writeString (cTypesHFd, name); \ - writeString (cTypesHFd, "_t;"); \ - writeNewline (cTypesHFd); \ - writeString (cTypesSMLFd, "structure C_"); \ - writeString (cTypesSMLFd, name); \ - writeString (cTypesSMLFd, " = struct open "); \ - writeString (cTypesSMLFd, bt); \ - writeUintmaxU (cTypesSMLFd, CHAR_BIT * sizeof(t));\ - writeString (cTypesSMLFd, " type t = "); \ - writeString (cTypesSMLFd, btLower); \ - writeString (cTypesSMLFd, " end"); \ - writeNewline (cTypesSMLFd); \ - writeString (cTypesSMLFd, "functor C_"); \ - writeString (cTypesSMLFd, name); \ - writeString (cTypesSMLFd, "_Choose"); \ - writeString (cTypesSMLFd, bt); \ - writeString (cTypesSMLFd, "N (A: CHOOSE_"); \ - writeString (cTypesSMLFd, btUpper); \ - writeString (cTypesSMLFd, "N_ARG) = Choose"); \ - writeString (cTypesSMLFd, bt); \ - writeString (cTypesSMLFd, "N_"); \ - writeString (cTypesSMLFd, bt); \ - writeUintmaxU (cTypesSMLFd, CHAR_BIT * sizeof(t));\ - writeString (cTypesSMLFd, " (A)"); \ - writeNewline (cTypesSMLFd); \ + switch (tgt) { \ + case mlTypesH: \ + break; \ + case cTypesH: \ + writeString (stdout, "typedef"); \ + writeString (stdout, " /* "); \ + writeString (stdout, #t); \ + writeString (stdout, " */ "); \ + writeString (stdout, bt); \ + writeUintmaxU (stdout, CHAR_BIT * sizeof(t)); \ + writeString (stdout, "_t"); \ + writeString (stdout, " "); \ + writeString (stdout, "C_"); \ + writeString (stdout, name); \ + writeString (stdout, "_t;"); \ + break; \ + case cTypesSML: \ + writeString (stdout, "structure C_"); \ + writeString (stdout, name); \ + writeString (stdout, " = struct open "); \ + writeString (stdout, bt); \ + writeUintmaxU (stdout, CHAR_BIT * sizeof(t)); \ + writeString (stdout, " type t = "); \ + writeString (stdout, btLower); \ + writeString (stdout, " end"); \ + writeNewline (stdout); \ + writeString (stdout, "functor C_"); \ + writeString (stdout, name); \ + writeString (stdout, "_Choose"); \ + writeString (stdout, bt); \ + writeString (stdout, "N (A: CHOOSE_"); \ + writeString (stdout, btUpper); \ + writeString (stdout, "N_ARG) = Choose"); \ + writeString (stdout, bt); \ + writeString (stdout, "N_"); \ + writeString (stdout, bt); \ + writeUintmaxU (stdout, CHAR_BIT * sizeof(t)); \ + writeString (stdout, " (A)"); \ + break; \ + } \ + writeNewline (stdout); \ free (btLower); \ free (btUpper); \ } while (0) -#define chksystype(t, name) \ - do { \ - if ((double)((t)(0.25)) > 0) \ - systype(t, "Real", name); \ - else if ((double)((t)(-1)) > 0) \ - systype(t, "Word", name); \ - else \ - systype(t, "Int", name); \ +#define chksystype(t, name) \ + do { \ + if ((double)((t)(0.25)) > 0) \ + systype(t, "Real", name); \ + else if ((double)((t)(-1)) > 0) \ + systype(t, "Word", name); \ + else \ + systype(t, "Int", name); \ } while (0) #define ptrtype(t, name) \ do { \ @@ -244,41 +257,50 @@ char *btUpper = strdup(bt); \ for (size_t i = 0; i < strlen(btUpper); i++) \ btUpper[i] = (char)(toupper((int)(bt[i]))); \ - writeString (cTypesHFd, "typedef "); \ - writeString (cTypesHFd, "C_"); \ - writeString (cTypesHFd, name1); \ - writeString (cTypesHFd, "_t "); \ - writeString (cTypesHFd, "C_"); \ - writeString (cTypesHFd, name2); \ - writeString (cTypesHFd, "_t;"); \ - writeNewline (cTypesHFd); \ - writeString (cTypesSMLFd, "structure C_"); \ - writeString (cTypesSMLFd, name2); \ - writeString (cTypesSMLFd, " = C_"); \ - writeString (cTypesSMLFd, name1); \ - writeNewline (cTypesSMLFd); \ - writeString (cTypesSMLFd, "functor C_"); \ - writeString (cTypesSMLFd, name2); \ - writeString (cTypesSMLFd, "_Choose"); \ - writeString (cTypesSMLFd, bt); \ - writeString (cTypesSMLFd, "N (A: CHOOSE_"); \ - writeString (cTypesSMLFd, btUpper); \ - writeString (cTypesSMLFd, "N_ARG) = C_"); \ - writeString (cTypesSMLFd, name1); \ - writeString (cTypesSMLFd, "_Choose"); \ - writeString (cTypesSMLFd, bt); \ - writeString (cTypesSMLFd, "N (A)"); \ - writeNewline (cTypesSMLFd); \ + switch (tgt) { \ + case mlTypesH: \ + break; \ + case cTypesH: \ + writeString (stdout, "typedef "); \ + writeString (stdout, "C_"); \ + writeString (stdout, name1); \ + writeString (stdout, "_t "); \ + writeString (stdout, "C_"); \ + writeString (stdout, name2); \ + writeString (stdout, "_t;"); \ + break; \ + case cTypesSML: \ + writeString (stdout, "structure C_"); \ + writeString (stdout, name2); \ + writeString (stdout, " = C_"); \ + writeString (stdout, name1); \ + writeNewline (stdout); \ + writeString (stdout, "functor C_"); \ + writeString (stdout, name2); \ + writeString (stdout, "_Choose"); \ + writeString (stdout, bt); \ + writeString (stdout, "N (A: CHOOSE_"); \ + writeString (stdout, btUpper); \ + writeString (stdout, "N_ARG) = C_"); \ + writeString (stdout, name1); \ + writeString (stdout, "_Choose"); \ + writeString (stdout, bt); \ + writeString (stdout, "N (A)"); \ + break; \ + } \ + writeNewline (stdout); \ free (btLower); \ free (btUpper); \ } while (0) static const char* mlTypesHSuffix[] = { + "", "#endif /* _MLTON_MLTYPES_H_ */", NULL }; static const char* cTypesHSuffix[] = { + "", "#define C_Errno_t(t) t", "", "#endif /* _MLTON_CTYPES_H_ */", @@ -289,137 +311,149 @@ NULL }; -int main (__attribute__ ((unused)) int argc, - __attribute__ ((unused)) char* argv[]) { - FILE *mlTypesHFd; - FILE *cTypesHFd; - FILE *cTypesSMLFd; - - mlTypesHFd = fopen_safe ("ml-types.h", "w"); - for (int i = 0; mlTypesHPrefix[i] != NULL; i++) - writeStringWithNewline (mlTypesHFd, mlTypesHPrefix[i]); - for (int i = 0; mlTypesHStd[i] != NULL; i++) - writeStringWithNewline (mlTypesHFd, mlTypesHStd[i]); - for (int i = 0; mlTypesHSuffix[i] != NULL; i++) - writeStringWithNewline (mlTypesHFd, mlTypesHSuffix[i]); - - cTypesHFd = fopen_safe ("c-types.h", "w"); - cTypesSMLFd = fopen_safe ("c-types.sml", "w"); - - for (int i = 0; cTypesHPrefix[i] != NULL; i++) - writeStringWithNewline (cTypesHFd, cTypesHPrefix[i]); - for (int i = 0; cTypesSMLPrefix[i] != NULL; i++) - writeStringWithNewline (cTypesSMLFd, cTypesSMLPrefix[i]); - - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - writeStringWithNewline (cTypesHFd, "/* C */"); - writeStringWithNewline (cTypesSMLFd, "(* C *)"); - booltype(_Bool, "Word", "Bool"); - chksystype(char, "Char"); - chksystype(signed char, "SChar"); - chksystype(unsigned char, "UChar"); - chksystype(short, "Short"); - chksystype(signed short, "SShort"); - chksystype(unsigned short, "UShort"); - chksystype(int, "Int"); - chksystype(signed int, "SInt"); - chksystype(unsigned int, "UInt"); - chksystype(long, "Long"); - chksystype(signed long, "SLong"); - chksystype(unsigned long, "ULong"); - chksystype(long long, "LongLong"); - chksystype(signed long long, "SLongLong"); - chksystype(unsigned long long, "ULongLong"); - chksystype(float, "Float"); - chksystype(double, "Double"); - // chksystype(long double, "LongDouble"); - chksystype(size_t, "Size"); - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - ptrtype(unsigned char*, "Pointer"); - // ptrtype(void*, "Pointer"); - // ptrtype(uintptr_t, "Pointer"); - ptrtype(char*, "String"); - ptrtype(char**, "StringArray"); - - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - writeStringWithNewline (cTypesHFd, "/* Generic integers */"); - writeStringWithNewline (cTypesSMLFd, "(* Generic integers *)"); - aliastype("Int", "Int", "Fd"); - aliastype("Int", "Int", "Signal"); - aliastype("Int", "Int", "Status"); - aliastype("Int", "Int", "Sock"); - - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - writeStringWithNewline (cTypesHFd, "/* C99 */"); - writeStringWithNewline (cTypesSMLFd, "(* C99 *)"); - chksystype(ptrdiff_t, "Ptrdiff"); - chksystype(intmax_t, "Intmax"); - chksystype(uintmax_t, "UIntmax"); - chksystype(intptr_t, "Intptr"); - chksystype(uintptr_t, "UIntptr"); - - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - writeStringWithNewline (cTypesHFd, "/* from */"); - writeStringWithNewline (cTypesSMLFd, "(* from *)"); - // ptrtype(DIR*, "DirP"); - systype(DIR*, "Word", "DirP"); - - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - writeStringWithNewline (cTypesHFd, "/* from */"); - writeStringWithNewline (cTypesSMLFd, "(* from *)"); - chksystype(nfds_t, "NFds"); - - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - writeStringWithNewline (cTypesHFd, "/* from */"); - writeStringWithNewline (cTypesSMLFd, "(* from *)"); - chksystype(rlim_t, "RLim"); - - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - writeStringWithNewline (cTypesHFd, "/* from */"); - writeStringWithNewline (cTypesSMLFd, "(* from *)"); - // chksystype(blkcnt_t, "BlkCnt"); - // chksystype(blksize_t, "BlkSize"); - chksystype(clock_t, "Clock"); - chksystype(dev_t, "Dev"); - chksystype(gid_t, "GId"); - // chksystype(id_t, "Id"); - chksystype(ino_t, "INo"); - chksystype(mode_t, "Mode"); - chksystype(nlink_t, "NLink"); - chksystype(off_t, "Off"); - chksystype(pid_t, "PId"); - chksystype(ssize_t, "SSize"); - chksystype(suseconds_t, "SUSeconds"); - chksystype(time_t, "Time"); - chksystype(uid_t, "UId"); - // chksystype(useconds_t, "USeconds"); - - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - writeStringWithNewline (cTypesHFd, "/* from */"); - writeStringWithNewline (cTypesSMLFd, "(* from *)"); - chksystype(socklen_t, "Socklen"); - - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - writeStringWithNewline (cTypesHFd, "/* from */"); - writeStringWithNewline (cTypesSMLFd, "(* from *)"); - chksystype(cc_t, "CC"); - chksystype(speed_t, "Speed"); - chksystype(tcflag_t, "TCFlag"); - - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - writeStringWithNewline (cTypesHFd, "/* from \"gmp.h\" */"); - writeStringWithNewline (cTypesSMLFd, "(* from \"gmp.h\" *)"); - chksystype(mp_limb_t, "MPLimb"); - - writeNewline (cTypesHFd);writeNewline (cTypesSMLFd); - for (int i = 0; cTypesHSuffix[i] != NULL; i++) - writeStringWithNewline (cTypesHFd, cTypesHSuffix[i]); - for (int i = 0; cTypesSMLSuffix[i] != NULL; i++) - writeStringWithNewline (cTypesSMLFd, cTypesSMLSuffix[i]); - - fclose_safe(mlTypesHFd); - fclose_safe(cTypesHFd); - fclose_safe(cTypesSMLFd); +#define tgtCom(com) \ + (tgt == cTypesH ? "/* " com " */" : "(* " com " *)") + +int main (int argc, char* argv[]) { + + enum tgt tgt; + + if (argc != 2) + die ("usage: %s ml-types.h|c-types.h|c-types.sml", argv[0]); + if (strcmp(argv[1], "ml-types.h") == 0) + tgt = mlTypesH; + else if (strcmp(argv[1], "c-types.h") == 0) + tgt = cTypesH; + else if (strcmp(argv[1], "c-types.sml") == 0) + tgt = cTypesSML; + else + die ("usage: %s ml-types.h|c-types.h|c-types.sml", argv[0]); + + switch (tgt) { + case mlTypesH: + for (int i = 0; mlTypesHPrefix[i] != NULL; i++) + writeStringWithNewline (stdout, mlTypesHPrefix[i]); + for (int i = 0; mlTypesHStd[i] != NULL; i++) + writeStringWithNewline (stdout, mlTypesHStd[i]); + for (int i = 0; mlTypesHSuffix[i] != NULL; i++) + writeStringWithNewline (stdout, mlTypesHSuffix[i]); + break; + case cTypesH: + case cTypesSML: { + const char* *cTypesPrefix = NULL; + const char* *cTypesSuffix = NULL; + + switch (tgt) { + case mlTypesH: + break; + case cTypesH: + cTypesPrefix = cTypesHPrefix; + cTypesSuffix = cTypesHSuffix; + break; + case cTypesSML: + cTypesPrefix = cTypesSMLPrefix; + cTypesSuffix = cTypesSMLSuffix; + break; + } + + for (int i = 0; cTypesPrefix[i] != NULL; i++) + writeStringWithNewline (stdout, cTypesPrefix[i]); + + writeStringWithNewline (stdout, tgtCom ("C")); + booltype(_Bool, "Word", "Bool"); + chksystype(char, "Char"); + chksystype(signed char, "SChar"); + chksystype(unsigned char, "UChar"); + chksystype(short, "Short"); + chksystype(signed short, "SShort"); + chksystype(unsigned short, "UShort"); + chksystype(int, "Int"); + chksystype(signed int, "SInt"); + chksystype(unsigned int, "UInt"); + chksystype(long, "Long"); + chksystype(signed long, "SLong"); + chksystype(unsigned long, "ULong"); + chksystype(long long, "LongLong"); + chksystype(signed long long, "SLongLong"); + chksystype(unsigned long long, "ULongLong"); + chksystype(float, "Float"); + chksystype(double, "Double"); + // chksystype(long double, "LongDouble"); + chksystype(size_t, "Size"); + + writeNewline (stdout); + ptrtype(unsigned char*, "Pointer"); + // ptrtype(void*, "Pointer"); + // ptrtype(uintptr_t, "Pointer"); + ptrtype(char*, "String"); + ptrtype(char**, "StringArray"); + + writeNewline (stdout); + writeStringWithNewline (stdout, tgtCom ("Generic integers")); + aliastype("Int", "Int", "Fd"); + aliastype("Int", "Int", "Signal"); + aliastype("Int", "Int", "Status"); + aliastype("Int", "Int", "Sock"); + + writeNewline (stdout); + writeStringWithNewline (stdout, tgtCom ("C99")); + chksystype(ptrdiff_t, "Ptrdiff"); + chksystype(intmax_t, "Intmax"); + chksystype(uintmax_t, "UIntmax"); + chksystype(intptr_t, "Intptr"); + chksystype(uintptr_t, "UIntptr"); + + writeNewline (stdout); + writeStringWithNewline (stdout, tgtCom ("from ")); + // ptrtype(DIR*, "DirP"); + systype(DIR*, "Word", "DirP"); + + writeNewline (stdout); + writeStringWithNewline (stdout, tgtCom ("from ")); + chksystype(nfds_t, "NFds"); + + writeNewline (stdout); + writeStringWithNewline (stdout, tgtCom ("from ")); + chksystype(rlim_t, "RLim"); + + writeNewline (stdout); + writeStringWithNewline (stdout, tgtCom ("from ")); + // chksystype(blkcnt_t, "BlkCnt"); + // chksystype(blksize_t, "BlkSize"); + chksystype(clock_t, "Clock"); + chksystype(dev_t, "Dev"); + chksystype(gid_t, "GId"); + // chksystype(id_t, "Id"); + chksystype(ino_t, "INo"); + chksystype(mode_t, "Mode"); + chksystype(nlink_t, "NLink"); + chksystype(off_t, "Off"); + chksystype(pid_t, "PId"); + chksystype(ssize_t, "SSize"); + chksystype(suseconds_t, "SUSeconds"); + chksystype(time_t, "Time"); + chksystype(uid_t, "UId"); + // chksystype(useconds_t, "USeconds"); + + writeNewline (stdout); + writeStringWithNewline (stdout, tgtCom ("from ")); + chksystype(socklen_t, "Socklen"); + + writeNewline (stdout); + writeStringWithNewline (stdout, tgtCom ("from ")); + chksystype(cc_t, "CC"); + chksystype(speed_t, "Speed"); + chksystype(tcflag_t, "TCFlag"); + + writeNewline (stdout); + writeStringWithNewline (stdout, tgtCom ("from \"gmp.h\"")); + chksystype(mp_limb_t, "MPLimb"); + + for (int i = 0; cTypesSuffix[i] != NULL; i++) + writeStringWithNewline (stdout, cTypesSuffix[i]); + + break; } + } return 0; } diff -Nru mlton-20130715/runtime/gen/.gitignore mlton-20210117+dfsg/runtime/gen/.gitignore --- mlton-20130715/runtime/gen/.gitignore 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/gen/.gitignore 2021-12-28 17:19:36.000000000 +0000 @@ -1,12 +1,10 @@ /c-types.h /c-types.sml +/constants /gen-basis-ffi /gen-basis-ffi.exe -/gen-sizes -/gen-sizes.exe -/gen-sizes.stamp +/gen-constants +/gen-constants.exe /gen-types /gen-types.exe -/gen-types.stamp /ml-types.h -/sizes diff -Nru mlton-20130715/runtime/.gitignore mlton-20210117+dfsg/runtime/.gitignore --- mlton-20130715/runtime/.gitignore 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/.gitignore 2021-12-28 17:19:36.000000000 +0000 @@ -1,5 +1,6 @@ -## Ignore all *.a and *.o files +## Ignore all *.a, *.d, and *.o files *.a +*.d *.o /gdtoa/ diff -Nru mlton-20130715/runtime/Makefile mlton-20210117+dfsg/runtime/Makefile --- mlton-20130715/runtime/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,399 +1,384 @@ -## Copyright (C) 2010-2013 Matthew Fluet. +## Copyright (C) 2010-2013,2018,2019-2020 Matthew Fluet. # Copyright (C) 1999-2009 Henry Cejtin, Matthew Fluet, Suresh # Jagannathan, and Stephen Weeks. # Copyright (C) 1997-2000 NEC Research Institute. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## -PATH := ../bin:$(shell echo $$PATH) +ROOT := .. +include $(ROOT)/Makefile.config -TARGET := self +###################################################################### ifeq ($(TARGET), self) -CC := gcc -std=gnu99 -AR := ar rc -RANLIB := ranlib +CROSS_PREFIX := else -CC := $(TARGET)-gcc -std=gnu99 -AR := $(TARGET)-ar rc -RANLIB := $(TARGET)-ranlib +CROSS_PREFIX := $(TARGET)- endif -TARGET_ARCH := $(shell ../bin/host-arch) -TARGET_OS := $(shell ../bin/host-os) -GCC_MAJOR_VERSION := \ - $(shell $(CC) -v 2>&1 | grep 'gcc version' | \ - sed 's/.*gcc version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1/') -GCC_MINOR_VERSION := \ - $(shell $(CC) -v 2>&1 | grep 'gcc version' | \ - sed 's/.*gcc version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\2/') -GCC_VERSION := $(GCC_MAJOR_VERSION).$(GCC_MINOR_VERSION) - EXE := +MDVARIANTS := OPT DBG +PIVARIANTS := DPI NPI PIC PIE + +OPTSUFFIX := +DBGSUFFIX := -dbg +DPISUFFIX := +NPISUFFIX := -npi +PICSUFFIX := -pic +PIESUFFIX := -pie + +WITH_OPT_RUNTIME := true +WITH_DBG_RUNTIME := true +WITH_DPI_RUNTIME := true +WITH_NPI_RUNTIME := $(or $(findstring true,$(RELEASE) $(WITH_ALL_RUNTIME)),false) +WITH_PIC_RUNTIME := $(or $(findstring true,$(RELEASE) $(WITH_ALL_RUNTIME)),false) +WITH_PIE_RUNTIME := $(or $(findstring true,$(RELEASE) $(WITH_ALL_RUNTIME)),false) + # These flags can be overridden by the user +CCFLAGS := +MFLAGS := CPPFLAGS := CFLAGS := +LDFLAGS := + +XCCFLAGS := -std=gnu11 +XMFLAGS := +XCPPFLAGS := +XCFLAGS := -fno-common -pedantic -Wall -Wextra +OPTXCFLAGS := -Wdisabled-optimization -O2 +DBGXCFLAGS := -g -DASSERT=1 -Wno-uninitialized -O0 +DPIXCFLAGS := +NPIXCFLAGS := -fno-pic -fno-pie +PICXCFLAGS := -fPIC +PIEXCFLAGS := -fPIE +XLDFLAGS := + +ifneq ($(WITH_GMP_INC_DIR),) +XCPPFLAGS += -I$(WITH_GMP_INC_DIR) +endif + +ifneq ($(WITH_GMP_LIB_DIR),) +XLDFLAGS += -L$(WITH_GMP_LIB_DIR) +endif -WARNXCFLAGS := -WARNXCFLAGS += -pedantic -Wall -ifeq ($(findstring $(GCC_MAJOR_VERSION), 3),$(GCC_MAJOR_VERSION)) -WARNXCFLAGS += -W -endif -ifeq ($(findstring $(GCC_MAJOR_VERSION), 4),$(GCC_MAJOR_VERSION)) -WARNXCFLAGS += -Wextra -endif -WARNXCFLAGS += -Wformat=2 -ifeq ($(findstring $(GCC_MAJOR_VERSION), 4),$(GCC_MAJOR_VERSION)) -WARNXCFLAGS += -Wswitch-default -Wswitch-enum -endif -WARNXCFLAGS += -Wuninitialized -ifeq ($(findstring $(GCC_MAJOR_VERSION), 4),$(GCC_MAJOR_VERSION)) -WARNXCFLAGS += -Winit-self -endif -ifeq ($(findstring $(GCC_MAJOR_VERSION), 4),$(GCC_MAJOR_VERSION)) -WARNXCFLAGS += -Wstrict-aliasing=2 -endif -WARNXCFLAGS += -Wfloat-equal -WARNXCFLAGS += -Wundef -WARNXCFLAGS += -Wshadow -WARNXCFLAGS += -Wpointer-arith -WARNXCFLAGS += -Wbad-function-cast -Wcast-qual -WARNXCFLAGS += -Wwrite-strings -# WARNXCFLAGS += -Wconversion -WARNXCFLAGS += -Waggregate-return -WARNXCFLAGS += -Wstrict-prototypes -ifeq ($(findstring $(GCC_MAJOR_VERSION), 4),$(GCC_MAJOR_VERSION)) -WARNXCFLAGS += -Wold-style-definition -endif -WARNXCFLAGS += -Wmissing-prototypes -Wmissing-declarations -ifeq ($(findstring $(GCC_MAJOR_VERSION), 4),$(GCC_MAJOR_VERSION)) -WARNXCFLAGS += -Wmissing-field-initializers -endif -WARNXCFLAGS += -Wmissing-noreturn -WARNXCFLAGS += -Wmissing-format-attribute -# WARNXCFLAGS += -Wpacked -# WARNXCFLAGS += -Wpadded -WARNXCFLAGS += -Wredundant-decls -WARNXCFLAGS += -Wnested-externs -# WARNXCFLAGS += -Wunreachable-code - -XCFLAGS := -fno-common $(WARNXCFLAGS) -OPTXCFLAGS := -Wdisabled-optimization -O2 -fomit-frame-pointer -DEBUGXCFLAGS := -DASSERT=1 -Wno-uninitialized -O0 -g -PICXCFLAGS := +XCPPFLAGS += -I. # Win32&64 don't use PIC code, all other platforms do -ifeq ($(findstring $(TARGET_OS), mingw cygwin),) -PICXCFLAGS += -fPIC +ifeq ($(findstring $(TARGET_OS), mingw cygwin),$(TARGET_OS)) +WITH_PIC_RUNTIME := false +WITH_PIE_RUNTIME := false endif # Make mlton library symbols private (win32&64 use another technique) -ifeq ($(findstring $(GCC_MAJOR_VERSION), 4),$(GCC_MAJOR_VERSION)) ifeq ($(findstring $(TARGET_OS), mingw cygwin),) XCFLAGS += -fvisibility=hidden endif -endif ifeq ($(TARGET_ARCH), alpha) -XCFLAGS += -mieee -mbwx -mtune=ev6 -mfp-rounding-mode=d +XMFLAGS += -mieee -mbwx -mtune=ev6 -mfp-rounding-mode=d endif ifeq ($(TARGET_ARCH), amd64) -XCFLAGS += -m64 -endif - -ifeq ($(findstring $(TARGET_ARCH), hppa ia64 powerpc sparc),$(TARGET_ARCH)) -ifeq (4.2, $(firstword $(sort $(GCC_VERSION) 4.2))) -# GMP headers contain C99 inline functions which generate warnings -# with a suggestion to use this flag to disable the warnings. -XCFLAGS += -fgnu89-inline -endif +XMFLAGS += -m64 endif ifeq ($(TARGET_ARCH), ia64) -XCFLAGS += -mtune=itanium2 +XMFLAGS += -mtune=itanium2 ifeq ($(TARGET_OS), hpux) -XCFLAGS += -mlp64 +XMFLAGS += -mlp64 endif endif ifeq ($(TARGET_OS)-$(TARGET_ARCH), aix-powerpc64) -XCFLAGS += -maix64 +XMFLAGS += -maix64 AR := ar -X 64 rc endif ifeq ($(TARGET_ARCH), sparc) -XCFLAGS += -m32 -mcpu=v8 -Wa,-xarch=v8plusa +XMFLAGS += -m32 -mcpu=v8 +XCFLAGS := -Wa,-xarch=v8plusa endif ifeq ($(TARGET_ARCH), x86) -XCFLAGS += -m32 -ifeq (3, $(firstword $(sort $(GCC_MAJOR_VERSION) 3))) -OPTXCFLAGS += -falign-loops=2 -falign-jumps=2 -falign-functions=5 -else -OPTXCFLAGS += -malign-loops=2 -malign-jumps=2 -malign-functions=5 -endif +XMFLAGS += -m32 endif ifeq ($(TARGET_OS), cygwin) EXE := .exe endif -ifeq ($(TARGET_OS), darwin) -XCFLAGS += -I/usr/local/include -I/sw/include -I/opt/local/include -endif - -ifeq ($(TARGET_OS), freebsd) -XCFLAGS += -I/usr/local/include -endif - ifeq ($(TARGET_OS), mingw) EXE := .exe # GCC doesn't recognize the %I64 format specifier which means %ll on windows XCFLAGS += -Wno-format -Wno-missing-format-attribute endif -ifeq ($(TARGET_OS), netbsd) -XCFLAGS += -I/usr/pkg/include +ifeq ($(TARGET_OS), solaris) +XCFLAGS += -funroll-all-loops +endif + +### MK_FLAGS ### + +## MK_FLAGS (SRC,PHASE[,KS]) +define MK_FLAGS +$(strip \ +$(XCCFLAGS) $($(1)_XCCFLAGS) $(CCFLAGS) \ +$(XMFLAGS) $($(1)_XMFLAGS) $(MFLAGS) \ +$(if $(findstring $(2),CPP C),$(CPPFLAGS) $(XCPPFLAGS) $($(1)_XCPPFLAGS)) \ +$(if $(findstring $(2),C), \ +$(CFLAGS) \ +$(XCFLAGS) \ +$(foreach K,$(3),$($(K)XCFLAGS)) \ +$($(1)_XCFLAGS) \ +$(foreach K,$(3),$($(1)_$(K)XCFLAGS))) \ +$(if $(findstring $(2),LD),$(LDFLAGS) $(XLDFLAGS) $($(1)_XLDFLAGS)) \ +) +endef + +### Position-independent (or not) ### + +ifeq ($(shell echo "__pie__" | $(CROSS_PREFIX)$(CC) $(call MK_FLAGS,-,C,PIE) -P -E -),2) +HAVE_PIE := true +ifeq ($(shell echo "__pie__" | $(CROSS_PREFIX)$(CC) $(call MK_FLAGS,-,C) -P -E -),2) +WITH_DEFAULT_PIE := true +else +WITH_DEFAULT_PIE := false +endif +else +HAVE_PIE := false +WITH_PIE_RUNTIME := false +WITH_DEFAULT_PIE := false endif -ifeq ($(TARGET_OS), openbsd) -XCFLAGS += -I/usr/local/include +ifeq ($(shell echo "__pic__" | $(CROSS_PREFIX)$(CC) $(call MK_FLAGS,-,C,PIC) -P -E -),2) +HAVE_PIC := true +ifeq ($(WITH_DEFAULT_PIE),true) +WITH_DEFAULT_PIC := false +else ifeq ($(shell echo "__pic__" | $(CROSS_PREFIX)$(CC) $(call MK_FLAGS,-,C) -P -E -),2) +WITH_DEFAULT_PIC := true +else +WITH_DEFAULT_PIC := false +endif +else +HAVE_PIC := false +WITH_PIC_RUNTIME := false +WITH_DEFAULT_PIC := false endif -ifeq ($(TARGET_OS), solaris) -XCFLAGS += -funroll-all-loops +ifeq ($(shell echo "__pic__" | $(CROSS_PREFIX)$(CC) $(call MK_FLAGS,-,C,NPI) -P -E -),__pic__) +HAVE_NPI := true +ifeq ($(shell echo "__pic__" | $(CROSS_PREFIX)$(CC) $(call MK_FLAGS,-,C) -P -E -),__pic__) +WITH_DEFAULT_NPI := true +else +WITH_DEFAULT_NPI := false +endif +else +HAVE_NPI := false +WITH_NPI_RUNTIME := false +WITH_DEFAULT_NPI := false endif +### pattern rules ### -XCFLAGS += -I. -Iplatform -OPTCFLAGS := $(CFLAGS) $(CPPFLAGS) $(XCFLAGS) $(OPTXCFLAGS) -DEBUGCFLAGS := $(CFLAGS) $(CPPFLAGS) $(XCFLAGS) $(DEBUGXCFLAGS) -PICCFLAGS := $(OPTCFLAGS) $(PICXCFLAGS) - -ALL := libgdtoa.a libgdtoa-gdb.a libgdtoa-pic.a \ - libmlton.a libmlton-gdb.a libmlton-pic.a -ALL += gen/c-types.sml gen/basis-ffi.sml gen/sizes +%.d: %.c + $(CROSS_PREFIX)$(CC) $(call MK_FLAGS,$<,CPP) -MM -MG $(foreach MD,$(MDVARIANTS),$(foreach PI,$(PIVARIANTS),-MT $(subst .d,$($(MD)SUFFIX)$($(PI)SUFFIX).o,$@))) -MT $@ -MM -MG -MF $@ $< -all: $(ALL) +## O_C_TEMPLATE (MD,PI) +define O_C_TEMPLATE +%$($(1)SUFFIX)$($(2)SUFFIX).o: %.c + $$(CROSS_PREFIX)$$(CC) $$(call MK_FLAGS,$$<,C,$(1) $(2)) -c -o $$@ $$< +endef +$(foreach MD,$(MDVARIANTS),$(foreach PI,$(PIVARIANTS), \ +$(eval $(call O_C_TEMPLATE,$(MD),$(PI))))) -### util ### +%$(EXE): %.o + $(CROSS_PREFIX)$(CC) $(call MK_FLAGS,$<,LD) -o $@ $^ -UTILHFILES := \ - util.h \ - $(shell find util -type f | grep '\.h$$') -UTILCFILES := \ - $(shell find util -type f | grep '\.c$$') - -util-pic.o: util.c $(UTILCFILES) cenv.h $(UTILHFILES) - $(CC) $(PICCFLAGS) -c -o $@ $< -util-gdb.o: util.c $(UTILCFILES) cenv.h $(UTILHFILES) - $(CC) $(DEBUGCFLAGS) -c -o $@ $< -util.o: util.c $(UTILCFILES) cenv.h $(UTILHFILES) - $(CC) $(OPTCFLAGS) -c -o $@ $< +%.a: + $(RM) $@ + $(CROSS_PREFIX)$(AR) rc $@ $^ + $(CROSS_PREFIX)$(RANLIB) $@ + +define A_TEMPLATE +$(foreach MD,$(MDVARIANTS),$(foreach PI,$(PIVARIANTS), \ +ifeq ($(and $(findstring DPI,$(PI)),$(findstring true,$(foreach PIX,$(PIVARIANTS),$(WITH_DEFAULT_$(PIX))))),true) +$(foreach PIX,$(PIVARIANTS), \ +ifeq ($(WITH_DEFAULT_$(PIX)),true) +lib$(1)$($(MD)SUFFIX).a: lib$(1)$($(MD)SUFFIX)$($(PIX)SUFFIX).a + $$(CP) $$< $$@ +endif +) +else +lib$(1)$($(MD)SUFFIX)$($(PI)SUFFIX).a: $(patsubst %.o,%$($(MD)SUFFIX)$($(PI)SUFFIX).o,$($(2)_OBJS)) +endif +)) +endef + +### all ### + +LIBS := \ +$(foreach MD,$(MDVARIANTS), \ +$(if $(findstring true,$(WITH_$(MD)_RUNTIME)),\ +$(foreach PI,$(PIVARIANTS), \ +$(if $(findstring true,$(WITH_$(PI)_RUNTIME)),\ +$(patsubst %.a,%$($(MD)SUFFIX)$($(PI)SUFFIX).a,libgdtoa.a libmlton.a))))) +ALL += $(LIBS) gen/constants gen/c-types.sml gen/basis-ffi.sml + +.PHONY: all +all: $(ALL) ### c-types.h ml-types.h gen/c-types.sml ### c-types.h: gen/c-types.h - cp $< $@ + $(CP) $< $@ ml-types.h: gen/ml-types.h - cp $< $@ -gen/c-types.h gen/c-types.sml gen/ml-types.h: gen/gen-types.stamp - @touch $@ -gen/gen-types.stamp: gen/gen-types.c util.h util.o - $(CC) $(OPTCFLAGS) -o gen/gen-types gen/gen-types.c util.o - rm -f gen/c-types.h gen/c-types.sml gen/ml-types.h gen/gen-types.stamp - cd gen && ./gen-types - rm -f gen/gen-types$(EXE) gen/gen-types - touch $@ + $(CP) $< $@ + +gen/ml-types.h: gen/gen-types$(EXE) + ./gen/gen-types$(EXE) ml-types.h > gen/ml-types.h +gen/c-types.h: gen/gen-types$(EXE) + ./gen/gen-types$(EXE) c-types.h > gen/c-types.h +gen/c-types.sml: gen/gen-types$(EXE) + ./gen/gen-types$(EXE) c-types.sml > gen/c-types.sml + +ifneq ($(MAKECMDGOALS),clean) +-include gen/gen-types.d +endif + +gen/gen-types$(EXE): util.o ### basis-ffi.h gen/basis-ffi.sml ### basis-ffi.h: gen/basis-ffi.h - cp $< $@ -gen/basis-ffi.h gen/basis-ffi.sml: gen/gen-basis-ffi.stamp - @touch $@ -gen/gen-basis-ffi.stamp: gen/gen-basis-ffi.sml gen/basis-ffi.def - mlton -output gen/gen-basis-ffi gen/gen-basis-ffi.sml - rm -f gen/basis-ffi.h gen/basis-ffi.sml gen/gen-basis-ffi.stamp - cd gen && ./gen-basis-ffi - rm -f gen/gen-basis-ffi - touch $@ + $(CP) $< $@ + +define BASIS_FFI_TEMPLATE +ifeq ($(shell cat gen/gen-basis-ffi.sml gen/basis-ffi.def gen/$(1) | $(SHA1DGST)),$(shell cat gen/$(1).chk)) +gen/$(1): gen/gen-basis-ffi.sml gen/basis-ffi.def + touch gen/$(1) +else +gen/$(1): gen/gen-basis-ffi$(EXE) gen/basis-ffi.def + ./gen/gen-basis-ffi$(EXE) $(1) < gen/basis-ffi.def > gen/$(1) + cat gen/gen-basis-ffi.sml gen/basis-ffi.def gen/$(1) | $(SHA1DGST) > gen/$(1).chk +endif +endef + +$(eval $(call BASIS_FFI_TEMPLATE,basis-ffi.h)) +$(eval $(call BASIS_FFI_TEMPLATE,basis-ffi.sml)) +$(eval $(call BASIS_FFI_TEMPLATE,gen-basis-ffi-consts.c)) + +gen/gen-basis-ffi$(EXE): gen/gen-basis-ffi.sml + $(RUN_MLTON) -output gen/gen-basis-ffi$(EXE) gen/gen-basis-ffi.sml ### libgdtoa ### -GDTOAHFILES := arith.h gdtoa.h -GDTOAHFILES := $(patsubst %,gdtoa/%,$(GDTOAHFILES)) -GDTOACFILES := \ +GDTOA_CFILES := \ dmisc.c g_ddfmt.c g_ffmt_p.c gdtoa.c misc.c strtoIf.c strtodI.c strtopdd.c strtord.c sum.c \ dtoa.c g_ddfmt_p.c g_xLfmt.c gethex.c smisc.c strtoIg.c strtodg.c strtopf.c strtordd.c ulp.c \ g_Qfmt.c g_dfmt.c g_xLfmt_p.c gmisc.c strtoIQ.c strtoIx.c strtof.c strtopx.c strtorf.c \ g_Qfmt_p.c g_dfmt_p.c g_xfmt.c hd_init.c strtoId.c strtoIxL.c strtopQ.c strtopxL.c strtorx.c \ g__fmt.c g_ffmt.c g_xfmt_p.c hexnan.c strtoIdd.c strtod.c strtopd.c strtorQ.c strtorxL.c -GDTOACFILES := $(patsubst %,gdtoa/%,$(GDTOACFILES)) +GDTOA_CFILES := $(patsubst %,gdtoa/%,$(GDTOA_CFILES)) -GDTOA_OBJS := $(patsubst %.c,%.o,$(GDTOACFILES)) -GDTOA_DEBUG_OBJS := $(patsubst %.c,%-gdb.o,$(GDTOACFILES)) -GDTOA_PIC_OBJS := $(patsubst %.c,%-pic.o,$(GDTOACFILES)) - -gdtoa/README: gdtoa.tgz gdtoa.may_alias-unions.patch gdtoa.rename-public-fns.patch gdtoa.hide-private-fns.patch gdtoa.hide-public-fns.patch - gzip -dc gdtoa.tgz | tar xf - - patch -s -p0 gdtoa/arith.h + gdtoa/arithchk.c: gdtoa/README @touch $@ -gdtoa/arithchk.out: gdtoa/arithchk.c - cd gdtoa && $(CC) $(OPTCFLAGS) -w -O1 -o arithchk.out arithchk.c +gdtoa/arithchk.c_XCFLAGS := -w -O1 + +ifneq ($(MAKECMDGOALS),clean) +-include gdtoa/arithchk.d +endif -gdtoa/arith.h: gdtoa/arithchk.out - cd gdtoa && ./arithchk.out >arith.h +gdtoa/gd_qnan.h: gdtoa/qnan$(EXE) + ./gdtoa/qnan$(EXE) > gdtoa/gd_qnan.h gdtoa/qnan.c: gdtoa/README @touch $@ -gdtoa/qnan.out: gdtoa/arith.h gdtoa/qnan.c - cd gdtoa && $(CC) $(OPTCFLAGS) -w -O1 -o qnan.out qnan.c +gdtoa/qnan.c_XCFLAGS := -w -O1 -gdtoa/gd_qnan.h: gdtoa/qnan.out - cd gdtoa && ./qnan.out >gd_qnan.h - -gdtoa/%-pic.o: gdtoa/%.c gdtoa/arith.h gdtoa/gd_qnan.h - $(CC) $(PICCFLAGS) -w -DINFNAN_CHECK -c -o $@ $< -gdtoa/%-gdb.o: gdtoa/%.c gdtoa/arith.h gdtoa/gd_qnan.h - $(CC) $(DEBUGCFLAGS) -w -DINFNAN_CHECK -c -o $@ $< -gdtoa/%.o: gdtoa/%.c gdtoa/arith.h gdtoa/gd_qnan.h - $(CC) $(OPTCFLAGS) -w -DINFNAN_CHECK -c -o $@ $< - -libgdtoa.a: $(GDTOA_OBJS) -libgdtoa-gdb.a: $(GDTOA_DEBUG_OBJS) -libgdtoa-pic.a: $(GDTOA_PIC_OBJS) +ifneq ($(MAKECMDGOALS),clean) +-include gdtoa/qnan.d +endif ### libmlton ### -PLATFORMHFILES := \ - platform.h \ - $(shell find platform -type f | grep '\.h$$') -PLATFORMCFILES := \ - $(shell find platform -type f | grep '\.c$$') - -GCHFILES := \ - gc.h \ - $(shell find gc -type f | grep '\.h$$') -GCCFILES := \ - $(shell find gc -type f | grep '\.c$$') - -BASISCFILES := \ - $(shell find basis -type f | grep '\.c$$') - -HFILES := \ - cenv.h \ - $(UTILHFILES) \ - ml-types.h \ - c-types.h \ - basis-ffi.h \ - $(PLATFORMHFILES) \ - $(GCHFILES) - -MLTON_OBJS := \ - util.o \ - platform.o \ - platform/$(TARGET_OS).o \ - gc.o -MLTON_OBJS += $(foreach f, $(basename $(BASISCFILES)), $(f).o) -MLTON_DEBUG_OBJS := $(patsubst %.o,%-gdb.o,$(MLTON_OBJS)) -MLTON_PIC_OBJS := $(patsubst %.o,%-pic.o,$(MLTON_OBJS)) - -platform/$(TARGET_OS)-pic.o: $(PLATFORMCFILES) -platform/$(TARGET_OS)-gdb.o: $(PLATFORMCFILES) -platform/$(TARGET_OS).o: $(PLATFORMCFILES) - -gc-pic.o: $(GCCFILES) -gc-gdb.o: $(GCCFILES) -gc.o: $(GCCFILES) - -gc.c_XCFLAGS := -Wno-unreachable-code - -basis/Real/Math-pic.o: basis/Real/Math-fns.h -basis/Real/Math-gdb.o: basis/Real/Math-fns.h -basis/Real/Math.o: basis/Real/Math-fns.h -basis/Real/Real-pic.o: basis/Real/Real-ops.h -basis/Real/Real-gdb.o: basis/Real/Real-ops.h -basis/Real/Real.o: basis/Real/Real-ops.h -basis/Real/Real.c_XCFLAGS := -Wno-float-equal -basis/Real/gdtoa-pic.o: $(GDTOAHFILES) -basis/Real/gdtoa-gdb.o: $(GDTOAHFILES) -basis/Real/gdtoa.o: $(GDTOAHFILES) -basis/Real/strto-pic.o: $(GDTOAHFILES) -basis/Real/strto-gdb.o: $(GDTOAHFILES) -basis/Real/strto.o: $(GDTOAHFILES) -basis/System/Date.c_XCFLAGS := -Wno-format-nonliteral -basis/Word/Word-pic.o: basis/Word/Word-consts.h basis/Word/Word-ops.h basis/Word/Word-check.h -basis/Word/Word-gdb.o: basis/Word/Word-consts.h basis/Word/Word-ops.h basis/Word/Word-check.h -basis/Word/Word.o: basis/Word/Word-consts.h basis/Word/Word-ops.h basis/Word/Word-check.h -basis/coerce-pic.o: basis/coerce.h -basis/coerce-gdb.o: basis/coerce.h -basis/coerce.o: basis/coerce.h -basis/cpointer-pic.o: basis/cpointer.h -basis/cpointer-gdb.o: basis/cpointer.h -basis/cpointer.o: basis/cpointer.h - -%-pic.o: %.c $(HFILES) - $(CC) $(PICCFLAGS) $($(<)_XCFLAGS) -c -o $@ $< -%-gdb.o: %.c $(HFILES) - $(CC) $(DEBUGCFLAGS) $($(<)_XCFLAGS) -c -o $@ $< -%.o: %.c $(HFILES) - $(CC) $(OPTCFLAGS) $($(<)_XCFLAGS) -c -o $@ $< - -libmlton.a: $(MLTON_OBJS) -libmlton-gdb.a: $(MLTON_DEBUG_OBJS) -libmlton-pic.a: $(MLTON_PIC_OBJS) +BASIS_CFILES := $(shell $(FIND) basis -type f -name '*.c') -### gen/sizes ### +MLTON_OBJS := gc.o platform.o platform/$(TARGET_OS).o util.o +MLTON_OBJS += $(patsubst %.c,%.o,$(BASIS_CFILES)) -gen/sizes: gen/gen-sizes.stamp - @touch $@ -gen/gen-sizes.stamp: gen/gen-sizes.c libmlton.a $(HFILES) - $(CC) $(OPTCFLAGS) -o gen/gen-sizes gen/gen-sizes.c -L. -lmlton - rm -f gen/sizes - cd gen && ./gen-sizes - rm -f gen/gen-sizes$(EXE) gen/gen-sizes - touch $@ +gc.c_XCFLAGS := -Wno-address-of-packed-member +ifneq ($(MAKECMDGOALS),clean) +-include $(patsubst %.o,%.d,$(MLTON_OBJS)) +endif -###### +$(eval $(call A_TEMPLATE,mlton,MLTON)) +### gen/constants ### -%.a: - rm -f $@ - $(AR) $@ $^ - $(RANLIB) $@ +gen/constants: gen/gen-constants$(EXE) + ./gen/gen-constants > gen/constants +ifneq ($(MAKECMDGOALS),clean) +-include gen/gen-constants.d +endif + +gen/gen-constants$(EXE): libmlton.a + +### bootstrap ### + +ifeq (true,$(shell if [ -d bootstrap ]; then echo true; else echo false; fi)) +BOOTSTRAP_CFILES := $(shell $(FIND) bootstrap -type f -name '*.c') + +BOOTSTRAP_OBJS := $(patsubst %.c,%.o,$(BOOTSTRAP_CFILES)) + +bootstrap/$(MLTON_OUTPUT)$(EXE): $(BOOTSTRAP_OBJS) libmlton.a libgdtoa.a + $(CC) $(call MK_FLAGS,-,LD) -L. -o $@ $(BOOTSTRAP_OBJS) -lmlton -lgdtoa -lgmp -lm + +bootstrap/%.o: bootstrap/%.c + $(CC) $(call MK_FLAGS,-,C) -O1 -fno-strict-aliasing -foptimize-sibling-calls -w -I$(ROOT)/include -w -c -o $@ $< +endif + +###### +SHOW_VARS += TARGET TARGET_ARCH TARGET_OS +SHOW_VARS += WITH_OPT_RUNTIME WITH_DBG_RUNTIME WITH_DPI_RUNTIME WITH_NPI_RUNTIME WITH_PIC_RUNTIME WITH_PIE_RUNTIME +SHOW_VARS += XCCFLAGS XMFLAGS XCPPFLAGS XCFLAGS OPTXCFLAGS DBGXCFLAGS DPIXCFLAGS NPIXCFLAGS PICXCFLAGS PIEXCFLAGS XLDFLAGS +SHOW_VARS += HAVE_NPI WITH_DEFAULT_NPI HAVE_PIE WITH_DEFAULT_PIE HAVE_PIC WITH_DEFAULT_PIC +SHOW_VARS += LIBS -.PHONY: flags -flags: - echo TARGET = $(TARGET) - echo TARGET_ARCH = $(TARGET_ARCH) - echo TARGET_OS = $(TARGET_OS) - echo GCC_MAJOR_VERSION = $(GCC_MAJOR_VERSION) - echo GCC_MINOR_VERSION = $(GCC_MINOR_VERSION) - echo GCC_VERSION = $(GCC_VERSION) - echo EXE = $(EXE) - echo OPTXCFLAGS = $(OPTXCFLAGS) - echo DEBUGXCFLAGS = $(DEBUGXCFLAGS) - echo PICXCFLAGS = $(PICXCFLAGS) +$(eval $(MK_SHOW_CONFIG)) .PHONY: clean diff -Nru mlton-20130715/runtime/platform/aix.c mlton-20210117+dfsg/runtime/platform/aix.c --- mlton-20130715/runtime/platform/aix.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/aix.c 2021-12-28 17:19:36.000000000 +0000 @@ -4,11 +4,11 @@ #include #include -#include "diskBack.unix.c" -#include "mmap-protect.c" -#include "nonwin.c" -#include "recv.nonblock.c" -#include "use-mmap.c" +#include "platform/diskBack.unix.c" +#include "platform/mmap-protect.c" +#include "platform/nonwin.c" +#include "platform/recv.nonblock.c" +#include "platform/use-mmap.c" size_t GC_pageSize (void) { long pageSize; diff -Nru mlton-20130715/runtime/platform/aix.h mlton-20210117+dfsg/runtime/platform/aix.h --- mlton-20130715/runtime/platform/aix.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/aix.h 2021-12-28 17:19:36.000000000 +0000 @@ -35,6 +35,7 @@ #define HAS_PTRACE FALSE #define HAS_REMAP FALSE #define HAS_SIGALTSTACK TRUE +#define NEEDS_SIGALTSTACK_EXEC FALSE #define HAS_SPAWN FALSE #define HAS_TIME_PROFILING FALSE diff -Nru mlton-20130715/runtime/platform/arm64.h mlton-20210117+dfsg/runtime/platform/arm64.h --- mlton-20130715/runtime/platform/arm64.h 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/arm64.h 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +#define MLton_Platform_Arch_host "arm64" diff -Nru mlton-20130715/runtime/platform/cygwin.c mlton-20210117+dfsg/runtime/platform/cygwin.c --- mlton-20130715/runtime/platform/cygwin.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/cygwin.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,12 +2,12 @@ #include "platform.h" -#include "mmap.c" +#include "platform/mmap.c" #if not HAS_MSG_DONTWAIT -#include "recv.nonblock.c" +#include "platform/recv.nonblock.c" #endif -#include "windows.c" -#include "mremap.c" +#include "platform/windows.c" +#include "platform/mremap.c" /* * The sysconf(_SC_PAGESIZE) is the necessary alignment for using @@ -77,6 +77,10 @@ return Windows_mmapAnon (start, length); } +void *GC_mmapAnonFlags (void *start, size_t length, __attribute__ ((unused)) int flags) { + return GC_mmapAnon(start, length); +} + void GC_release (void *base, size_t length) { if (MLton_Platform_CygwinUseMmap) munmap_safe (base, length); diff -Nru mlton-20130715/runtime/platform/cygwin.h mlton-20210117+dfsg/runtime/platform/cygwin.h --- mlton-20130715/runtime/platform/cygwin.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/cygwin.h 2021-12-28 17:19:36.000000000 +0000 @@ -36,6 +36,7 @@ #define HAS_FEROUND FALSE #define HAS_REMAP TRUE #define HAS_SIGALTSTACK FALSE +#define NEEDS_SIGALTSTACK_EXEC FALSE #define HAS_SPAWN TRUE #define HAS_TIME_PROFILING FALSE diff -Nru mlton-20130715/runtime/platform/darwin.c mlton-20210117+dfsg/runtime/platform/darwin.c --- mlton-20130715/runtime/platform/darwin.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/darwin.c 2021-12-28 17:19:36.000000000 +0000 @@ -3,11 +3,11 @@ #include #include -#include "diskBack.unix.c" -#include "mmap-protect.c" -#include "nonwin.c" -#include "sysctl.c" -#include "use-mmap.c" +#include "platform/diskBack.unix.c" +#include "platform/mmap-protect.c" +#include "platform/nonwin.c" +#include "platform/sysctl.c" +#include "platform/use-mmap.c" void GC_displayMem (void) { static char buffer[256]; @@ -38,6 +38,12 @@ #else GC_handleSigProf ((code_pointer) ucp->uc_mcontext->ss.rip); #endif +#elif (defined(__aarch64__)) +#if __DARWIN_UNIX03 + GC_handleSigProf ((code_pointer) ucp->uc_mcontext->__ss.__pc); +#else + GC_handleSigProf ((code_pointer) ucp->uc_mcontext->ss.pc); +#endif #else #error Unsupported darwin CPU architecture #endif diff -Nru mlton-20130715/runtime/platform/darwin.h mlton-20210117+dfsg/runtime/platform/darwin.h --- mlton-20130715/runtime/platform/darwin.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/darwin.h 2021-12-28 17:19:36.000000000 +0000 @@ -36,6 +36,7 @@ #define HAS_MSG_DONTWAIT TRUE #define HAS_REMAP FALSE #define HAS_SIGALTSTACK TRUE +#define NEEDS_SIGALTSTACK_EXEC FALSE #define HAS_SPAWN FALSE #define HAS_TIME_PROFILING TRUE diff -Nru mlton-20130715/runtime/platform/float-math.c mlton-20210117+dfsg/runtime/platform/float-math.c --- mlton-20130715/runtime/platform/float-math.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/float-math.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -#define unaryReal(func) \ -float func##f (float x) { \ - return (float)(func((double)x)); \ -} -unaryReal(acos) -unaryReal(asin) -unaryReal(atan) -unaryReal(cos) -unaryReal(cosh) -unaryReal(exp) -unaryReal(fabs) -unaryReal(log) -unaryReal(log10) -unaryReal(rint) -unaryReal(sin) -unaryReal(sinh) -unaryReal(sqrt) -unaryReal(tan) -unaryReal(tanh) -#undef unaryReal - -#define binaryReal(func) \ -float func##f (float x, float y) { \ - return (float)(func((double)x, (double)y)); \ -} -binaryReal(atan2) -binaryReal(pow) -#undef binaryReal - -float frexpf(float x, int *e) { - return (float)frexp((double)x, e); -} - -float ldexpf (float x, int i) { - return (float)ldexp((double)x, i); -} diff -Nru mlton-20130715/runtime/platform/float-math.h mlton-20210117+dfsg/runtime/platform/float-math.h --- mlton-20130715/runtime/platform/float-math.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/float-math.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -#define unaryReal(func) float func##f (float x); -unaryReal(acos) -unaryReal(asin) -unaryReal(atan) -unaryReal(cos) -unaryReal(cosh) -unaryReal(exp) -unaryReal(fabs) -unaryReal(log) -unaryReal(log10) -unaryReal(rint) -unaryReal(sin) -unaryReal(sinh) -unaryReal(sqrt) -unaryReal(tan) -unaryReal(tanh) -#undef unaryReal - -#define binaryReal(func) float func##f (float x, float y); -binaryReal(atan2) -binaryReal(pow) -#undef binaryReal - -float frexpf(float x, int *e); -float ldexpf (float x, int i); diff -Nru mlton-20130715/runtime/platform/freebsd.c mlton-20210117+dfsg/runtime/platform/freebsd.c --- mlton-20130715/runtime/platform/freebsd.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/freebsd.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,10 +1,10 @@ #include "platform.h" -#include "diskBack.unix.c" -#include "mmap-protect.c" -#include "nonwin.c" -#include "sysctl.c" -#include "use-mmap.c" +#include "platform/diskBack.unix.c" +#include "platform/mmap-protect.c" +#include "platform/nonwin.c" +#include "platform/sysctl.c" +#include "platform/use-mmap.c" void GC_displayMem (void) { static char buffer[256]; @@ -21,6 +21,10 @@ GC_handleSigProf ((code_pointer) ucp->uc_mcontext.mc_rip); #elif (defined (__i386__)) GC_handleSigProf ((code_pointer) ucp->uc_mcontext.mc_eip); +#elif (defined (__arm__)) + GC_handleSigProf ((code_pointer) ucp->uc_mcontext.__gregs[_REG_PC]); +#elif (defined (__aarch64__)) + GC_handleSigProf ((code_pointer) ucp->uc_mcontext.mc_gpregs.gp_elr); #else #error Profiling handler is missing for this architecture #endif diff -Nru mlton-20130715/runtime/platform/freebsd.h mlton-20210117+dfsg/runtime/platform/freebsd.h --- mlton-20130715/runtime/platform/freebsd.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/freebsd.h 2021-12-28 17:19:36.000000000 +0000 @@ -32,6 +32,7 @@ #define HAS_MSG_DONTWAIT TRUE #define HAS_REMAP FALSE #define HAS_SIGALTSTACK TRUE +#define NEEDS_SIGALTSTACK_EXEC FALSE #define HAS_SPAWN FALSE #define HAS_TIME_PROFILING TRUE diff -Nru mlton-20130715/runtime/platform/hpux.c mlton-20210117+dfsg/runtime/platform/hpux.c --- mlton-20130715/runtime/platform/hpux.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/hpux.c 2021-12-28 17:19:36.000000000 +0000 @@ -7,12 +7,12 @@ #define MAP_ANON MAP_ANONYMOUS -#include "diskBack.unix.c" -#include "mmap-protect.c" -#include "nonwin.c" -#include "recv.nonblock.c" -#include "setenv.putenv.c" -#include "use-mmap.c" +#include "platform/diskBack.unix.c" +#include "platform/mmap-protect.c" +#include "platform/nonwin.c" +#include "platform/recv.nonblock.c" +#include "platform/setenv.putenv.c" +#include "platform/use-mmap.c" struct pstnames { int type; diff -Nru mlton-20130715/runtime/platform/hpux.h mlton-20210117+dfsg/runtime/platform/hpux.h --- mlton-20130715/runtime/platform/hpux.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/hpux.h 2021-12-28 17:19:36.000000000 +0000 @@ -30,7 +30,7 @@ #include #include -#include "setenv.h" +#include "platform/setenv.h" #if defined(SO_TOE) #define HPUX_VERSION 1123 @@ -53,13 +53,16 @@ #define HAS_MSG_DONTWAIT FALSE #define HAS_REMAP FALSE #define HAS_SIGALTSTACK TRUE +#define NEEDS_SIGALTSTACK_EXEC FALSE #define HAS_SPAWN FALSE #define HAS_TIME_PROFILING TRUE #define MLton_Platform_OS_host "hpux" #define LOG_PERROR 0 +#ifndef LOG_AUTHPRIV #define LOG_AUTHPRIV LOG_AUTH +#endif /* This should not conflict with existing flags. */ #define MSG_DONTWAIT 0x1000000 diff -Nru mlton-20130715/runtime/platform/hurd.c mlton-20210117+dfsg/runtime/platform/hurd.c --- mlton-20130715/runtime/platform/hurd.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/hurd.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,13 +2,13 @@ #include "platform.h" -#include "diskBack.unix.c" -#include "displayMem.proc.c" -#include "mmap-protect.c" -#include "nonwin.c" -#include "use-mmap.c" -#include "sysconf.c" -#include "mremap.c" +#include "platform/diskBack.unix.c" +#include "platform/displayMem.proc.c" +#include "platform/mmap-protect.c" +#include "platform/nonwin.c" +#include "platform/use-mmap.c" +#include "platform/sysconf.c" +#include "platform/mremap.c" void* GC_extendHead (void *base, size_t length) { return mmapAnon (base, length); diff -Nru mlton-20130715/runtime/platform/hurd.h mlton-20210117+dfsg/runtime/platform/hurd.h --- mlton-20130715/runtime/platform/hurd.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/hurd.h 2021-12-28 17:19:36.000000000 +0000 @@ -31,6 +31,7 @@ #define HAS_MSG_DONTWAIT TRUE #define HAS_REMAP TRUE #define HAS_SIGALTSTACK TRUE +#define NEEDS_SIGALTSTACK_EXEC FALSE #define HAS_SPAWN FALSE #define HAS_TIME_PROFILING FALSE diff -Nru mlton-20130715/runtime/platform/linux.c mlton-20210117+dfsg/runtime/platform/linux.c --- mlton-20130715/runtime/platform/linux.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/linux.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,12 +1,13 @@ +// For `mremap` and `MREMAP_MAYMOVE` #define _GNU_SOURCE #include "platform.h" -#include "diskBack.unix.c" -#include "displayMem.proc.c" -#include "mmap-protect.c" -#include "nonwin.c" -#include "use-mmap.c" +#include "platform/diskBack.unix.c" +#include "platform/displayMem.proc.c" +#include "platform/mmap-protect.c" +#include "platform/nonwin.c" +#include "platform/use-mmap.c" static void catcher (__attribute__ ((unused)) int signo, __attribute__ ((unused)) siginfo_t* info, @@ -59,6 +60,9 @@ #elif (defined (__s390__)) ucontext_t* ucp = (ucontext_t*)context; GC_handleSigProf ((code_pointer) ucp->uc_mcontext.psw.addr); +#elif (defined (__riscv)) + ucontext_t* ucp = (ucontext_t*)context; + GC_handleSigProf ((code_pointer) ucp->uc_mcontext.__gregs[REG_PC]); #else #error Profiling handler is missing for this architecture #endif @@ -69,15 +73,6 @@ sa->sa_sigaction = (void (*)(int, siginfo_t*, void*))catcher; } -/* We need the value of MREMAP_MAYMOVE, which should come from sys/mman.h, but - * isn't there. It is in linux/mman.h, but we can't #include that here, because - * kernel headers don't mix with system headers. We could create a separate - * file, include the kernel headers there, and define a global. But there - * sometimes seem to be problems including kernel headers, so the easiest thing - * to do is just define MREMAP_MAYMOVE. - */ -#define MREMAP_MAYMOVE 1 - void *GC_mremap (void *start, size_t oldLength, size_t newLength) { return mremap (start, oldLength, newLength, MREMAP_MAYMOVE); } diff -Nru mlton-20130715/runtime/platform/linux.h mlton-20210117+dfsg/runtime/platform/linux.h --- mlton-20130715/runtime/platform/linux.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/linux.h 2021-12-28 17:19:36.000000000 +0000 @@ -39,6 +39,11 @@ #define HAS_MSG_DONTWAIT TRUE #define HAS_REMAP TRUE #define HAS_SIGALTSTACK TRUE +#if (defined (__hppa__)) +#define NEEDS_SIGALTSTACK_EXEC TRUE +#else +#define NEEDS_SIGALTSTACK_EXEC FALSE +#endif #define HAS_SPAWN FALSE #define HAS_TIME_PROFILING TRUE diff -Nru mlton-20130715/runtime/platform/mingw.c mlton-20210117+dfsg/runtime/platform/mingw.c --- mlton-20130715/runtime/platform/mingw.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/mingw.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,13 +2,17 @@ #include "platform.h" -#include "windows.c" -#include "mremap.c" +#include "platform/windows.c" +#include "platform/mremap.c" void *GC_mmapAnon (void *start, size_t length) { return Windows_mmapAnon (start, length); } +void *GC_mmapAnonFlags (void *start, size_t length, __attribute__ ((unused)) int flags) { + return GC_mmapAnon(start, length); +} + void GC_release (void *base, size_t length) { Windows_release (base, length); } diff -Nru mlton-20130715/runtime/platform/mingw.h mlton-20210117+dfsg/runtime/platform/mingw.h --- mlton-20130715/runtime/platform/mingw.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/mingw.h 2021-12-28 17:19:36.000000000 +0000 @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -23,7 +24,6 @@ #include #include //#include -#include #include #include @@ -34,6 +34,7 @@ #define HAS_MSG_DONTWAIT FALSE #define HAS_REMAP TRUE #define HAS_SIGALTSTACK FALSE +#define NEEDS_SIGALTSTACK_EXEC FALSE #define HAS_SPAWN TRUE #define HAS_TIME_PROFILING TRUE diff -Nru mlton-20130715/runtime/platform/mmap.c mlton-20210117+dfsg/runtime/platform/mmap.c --- mlton-20130715/runtime/platform/mmap.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/mmap.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,10 @@ -static inline void *mmapAnon (void *start, size_t length) { +static inline void *mmapAnonFlags (void *start, size_t length, int flags) { return mmap (start, length, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANON, -1, 0); + MAP_PRIVATE | MAP_ANON | flags, -1, 0); +} + +static inline void *mmapAnon (void *start, size_t length) { + return mmapAnonFlags (start, length, 0); } static void munmap_safe (void *base, size_t length) { diff -Nru mlton-20130715/runtime/platform/mmap-protect.c mlton-20210117+dfsg/runtime/platform/mmap-protect.c --- mlton-20130715/runtime/platform/mmap-protect.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/mmap-protect.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,16 +1,27 @@ -void *GC_mmapAnon_safe_protect (void *start, size_t length, - size_t dead_low, size_t dead_high) { +void *GC_mmapAnonFlags_safe_protect (void *start, size_t length, + int prot, int flags, + size_t dead_low, + size_t dead_high) { void *base,*low,*result,*high; + size_t totlen; - base = GC_mmapAnon_safe (start, length + dead_low + dead_high); + totlen = length + dead_low + dead_high; + base = GC_mmapAnonFlags_safe (start, totlen, flags); low = base; if (mprotect (low, dead_low, PROT_NONE)) diee ("mprotect failed"); result = (void*)((pointer)low + dead_low); - if (mprotect (result, length, PROT_READ | PROT_WRITE | PROT_EXEC)) + if (mprotect (result, length, prot)) diee ("mprotect failed"); high = (void*)((pointer)result + length); if (mprotect (high, dead_high, PROT_NONE)) diee ("mprotect failed"); return result; } + +void *GC_mmapAnon_safe_protect (void *start, size_t length, int prot, + size_t dead_low, size_t dead_high) { + return GC_mmapAnonFlags_safe_protect (start, length, + prot, 0, + dead_low, dead_high); +} diff -Nru mlton-20130715/runtime/platform/netbsd.c mlton-20210117+dfsg/runtime/platform/netbsd.c --- mlton-20130715/runtime/platform/netbsd.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/netbsd.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,11 +1,11 @@ #include "platform.h" -#include "diskBack.unix.c" -#include "displayMem.proc.c" -#include "mmap-protect.c" -#include "nonwin.c" -#include "sysctl.c" -#include "use-mmap.c" +#include "platform/diskBack.unix.c" +#include "platform/displayMem.proc.c" +#include "platform/mmap-protect.c" +#include "platform/nonwin.c" +#include "platform/sysctl.c" +#include "platform/use-mmap.c" static void catcher (__attribute__ ((unused)) int signo, __attribute__ ((unused)) siginfo_t* info, diff -Nru mlton-20130715/runtime/platform/netbsd.h mlton-20210117+dfsg/runtime/platform/netbsd.h --- mlton-20130715/runtime/platform/netbsd.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/netbsd.h 2021-12-28 17:19:36.000000000 +0000 @@ -31,6 +31,7 @@ #define HAS_MSG_DONTWAIT TRUE #define HAS_REMAP FALSE #define HAS_SIGALTSTACK TRUE +#define NEEDS_SIGALTSTACK_EXEC FALSE #define HAS_SPAWN FALSE #define HAS_TIME_PROFILING TRUE diff -Nru mlton-20130715/runtime/platform/openbsd.c mlton-20210117+dfsg/runtime/platform/openbsd.c --- mlton-20130715/runtime/platform/openbsd.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/openbsd.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,17 +1,47 @@ #include "platform.h" -#include "diskBack.unix.c" -#include "displayMem.proc.c" -#include "mmap-protect.c" -#include "nonwin.c" -#include "sysctl.c" -#include "use-mmap.c" +#include "platform/diskBack.unix.c" +#include "platform/displayMem.proc.c" +#include "platform/mmap-protect.c" +#include "platform/nonwin.c" +#include "platform/sysctl.c" +#include "platform/mmap.c" + +void GC_release (void *base, size_t length) { + munmap_safe (base, length); +} + +void *GC_mmapAnon (void *start, size_t length) { + return mmapAnonFlags (start, length, MAP_STACK); +} + +void *GC_mmapAnonFlags (void *start, size_t length, int flags) { + return mmapAnonFlags (start, length, flags | MAP_STACK); +} + +void *GC_mmapAnonStack (void *start, size_t length, int prot, + size_t dead_low, size_t dead_high) { + int flags = 0; +#ifdef MAP_STACK + flags |= MAP_STACK; +#endif + return GC_mmapAnonFlags_safe_protect (start, length, prot, flags, + dead_low, dead_high); +} static void catcher (__attribute__ ((unused)) int signo, __attribute__ ((unused)) siginfo_t* info, void* context) { ucontext_t* ucp = (ucontext_t*)context; + +#if (defined (__x86_64__)) + GC_handleSigProf ((code_pointer) ucp->sc_rip); +#elif (defined (__i386__)) GC_handleSigProf ((code_pointer) ucp->sc_eip); +#else +#error Profiling handler is missing for this architecture +#endif + } void GC_setSigProfHandler (struct sigaction *sa) { diff -Nru mlton-20130715/runtime/platform/openbsd.h mlton-20210117+dfsg/runtime/platform/openbsd.h --- mlton-20130715/runtime/platform/openbsd.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/openbsd.h 2021-12-28 17:19:36.000000000 +0000 @@ -31,6 +31,7 @@ #define HAS_MSG_DONTWAIT TRUE #define HAS_REMAP FALSE #define HAS_SIGALTSTACK TRUE +#define NEEDS_SIGALTSTACK_EXEC FALSE #define HAS_SPAWN FALSE #define HAS_TIME_PROFILING TRUE diff -Nru mlton-20130715/runtime/platform/riscv.h mlton-20210117+dfsg/runtime/platform/riscv.h --- mlton-20130715/runtime/platform/riscv.h 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/riscv.h 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1 @@ +#define MLton_Platform_Arch_host "riscv" diff -Nru mlton-20130715/runtime/platform/solaris.c mlton-20210117+dfsg/runtime/platform/solaris.c --- mlton-20130715/runtime/platform/solaris.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/solaris.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,44 +1,11 @@ #include "platform.h" -#include - -#include "diskBack.unix.c" -#include "float-math.c" -#include "mmap.c" -#include "mmap-protect.c" -#include "nonwin.c" -#include "sysconf.c" -#include "setenv.putenv.c" - -#ifdef __sparc__ -int fegetround (void) { - int mode; - - mode = fpgetround (); - switch (mode) { - case FP_RN: mode = 0; break; - case FP_RM: mode = 1; break; - case FP_RP: mode = 2; break; - case FP_RZ: mode = 3; break; - default: - die ("fegetround: invalid mode %d\n", mode); - } - return mode; -} - -int fesetround (int mode) { - switch (mode) { - case 0: mode = FP_RN; break; - case 1: mode = FP_RM; break; - case 2: mode = FP_RP; break; - case 3: mode = FP_RZ; break; - default: - die ("fesetround: invalid mode %d\n", mode); - } - fpsetround (mode); - return 0; -} -#endif /* __sparc__ */ +#include "platform/diskBack.unix.c" +#include "platform/mmap-protect.c" +#include "platform/nonwin.c" +#include "platform/sysconf.c" +#include "platform/setenv.putenv.c" +#include "platform/use-mmap.c" /* ------------------------------------------------- */ /* GC */ @@ -61,17 +28,3 @@ sa->sa_flags = SA_ONSTACK | SA_RESTART | SA_SIGINFO; sa->sa_sigaction = (void (*)(int, siginfo_t*, void*))catcher; } - -/* On Solaris 5.7, MAP_ANON causes EINVAL and mmap requires a file descriptor. - */ -void *GC_mmapAnon (void *start, size_t length) { - static int fd = -1; - - if (-1 == fd) - fd = open ("/dev/zero", O_RDONLY); - return mmap (start, length, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); -} - -void GC_release (void *base, size_t length) { - munmap_safe (base, length); -} diff -Nru mlton-20130715/runtime/platform/solaris.h mlton-20210117+dfsg/runtime/platform/solaris.h --- mlton-20130715/runtime/platform/solaris.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/solaris.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,4 +1,6 @@ #include +#include +#include #include @@ -11,14 +13,11 @@ #include #include #include -#include #include /* For FIONBIO, FIONREAD. */ #include #include /* This is defined in , bet we'll redefine it in export.h. */ #undef PRIVATE -#include -#include #include #include #include /* For SIOCATMARK. */ @@ -31,78 +30,29 @@ #include #include #include -#include #include -#ifdef __sparc__ -#include "float-math.h" -#include "setenv.h" -#endif - +#define HAS_FEROUND TRUE #define HAS_MSG_DONTWAIT TRUE #define HAS_REMAP FALSE #define HAS_SIGALTSTACK TRUE +#define NEEDS_SIGALTSTACK_EXEC FALSE #define HAS_SPAWN FALSE #define HAS_TIME_PROFILING TRUE #define MLton_Platform_OS_host "solaris" -#ifndef PRIxPTR -#define PRIxPTR "x" -#endif - -/* Solaris 8 and older do not define a value for UINTPTR_MAX, so - we redefine it with a value. */ -#ifdef UINTPTR_MAX -#undef UINTPTR_MAX -#if defined(_LP64) || defined(_I32LPx) -#define UINTPTR_MAX UINT64_MAX -#else -#define UINTPTR_MAX UINT32_MAX -#endif -#endif - - /* ------------------------------------------------- */ /* Posix.ProcEnv */ /* ------------------------------------------------- */ extern char **environ; - /* ------------------------------------------------- */ /* MLton.Syslog */ /* ------------------------------------------------- */ +#ifndef LOG_AUTHPRIV #define LOG_AUTHPRIV LOG_AUTH -#define LOG_PERROR 0 - - -/* ------------------------------------------------- */ -/* Real */ -/* ------------------------------------------------- */ - -#ifdef __sparc__ -#undef fegetround -#undef fesetround -#define fegetround MLton_fegetround -#define fesetround MLton_fesetround -int fegetround(void); -int fesetround(int rounding_mode); -#endif - -#define FE_TONEAREST 0 -#define FE_DOWNWARD 1 -#define FE_UPWARD 2 -#define FE_TOWARDZERO 3 - -#define HAS_FEROUND TRUE - -/* These are not predefined on Solaris 8. */ -#ifndef NAN -#define NAN (__builtin_nanf ("")) -#endif - -#ifndef INFINITY -#define INFINITY (__builtin_inff()) #endif +#define LOG_PERROR 0 diff -Nru mlton-20130715/runtime/platform/use-mmap.c mlton-20210117+dfsg/runtime/platform/use-mmap.c --- mlton-20130715/runtime/platform/use-mmap.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform/use-mmap.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,4 +1,4 @@ -#include "mmap.c" +#include "platform/mmap.c" void GC_release (void *base, size_t length) { munmap_safe (base, length); @@ -7,3 +7,13 @@ void *GC_mmapAnon (void *start, size_t length) { return mmapAnon (start, length); } + +void *GC_mmapAnonFlags (void *start, size_t length, int flags) { + return mmapAnonFlags(start, length, flags); +} + +void *GC_mmapAnonStack (void *start, size_t length, int prot, + size_t dead_low, size_t dead_high) { + return GC_mmapAnonFlags_safe_protect (start, length, prot, 0, + dead_low, dead_high); +} diff -Nru mlton-20130715/runtime/platform.c mlton-20210117+dfsg/runtime/platform.c --- mlton-20130715/runtime/platform.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ /* Copyright (C) 2004-2009 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/platform.h mlton-20210117+dfsg/runtime/platform.h --- mlton-20130715/runtime/platform.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/platform.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,9 +1,9 @@ -/* Copyright (C) 2010,2012 Matthew Fluet. +/* Copyright (C) 2010,2012,2016,2019 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ @@ -37,6 +37,10 @@ #ifndef HAS_SIGALTSTACK #error HAS_SIGALTSTACK not defined +#else +#ifndef NEEDS_SIGALTSTACK_EXEC +#error NEEDS_SIGALTSTACK_EXEC not defined +#endif #endif #ifndef HAS_SPAWN @@ -84,22 +88,13 @@ #define FE_TOWARDZERO 3 #endif -#ifndef MLTON_CODEGEN_STATIC_INLINE -#define MLTON_CODEGEN_STATIC_INLINE PRIVATE -#endif -#ifndef MLTON_CODEGEN_MATHFN -#define MLTON_CODEGEN_MATHFN(decl) -#endif -#ifndef MLTON_CODEGEN_WORDSQUOTREM -#define MLTON_CODEGEN_WORDSQUOTREM(func) func -#endif -#ifndef MLTON_CODEGEN_WORDSQUOTREM_IMPL -#define MLTON_CODEGEN_WORDSQUOTREM_IMPL(func) func +#include "gc.h" + +#ifndef INLINE +#define INLINE #endif #include "basis-ffi.h" -#include "gc.h" - /* ---------------------------------------------------------------- */ /* Runtime Init/Exit/Alloc */ /* ---------------------------------------------------------------- */ @@ -126,9 +121,17 @@ PRIVATE void GC_displayMem (void); PRIVATE void *GC_mmapAnon (void *start, size_t length); +PRIVATE void *GC_mmapAnonFlags (void *start, size_t length, int flags); PRIVATE void *GC_mmapAnon_safe (void *start, size_t length); -PRIVATE void *GC_mmapAnon_safe_protect (void *start, size_t length, - size_t dead_low, size_t dead_high); +PRIVATE void *GC_mmapAnonFlags_safe (void *start, size_t length, int flags); +PRIVATE void *GC_mmapAnon_safe_protect (void *start, size_t length, int prot, + size_t dead_low, size_t dead_high); +PRIVATE void *GC_mmapAnonStack (void *start, size_t length, int prot, + size_t dead_low, size_t dead_high); +PRIVATE void *GC_mmapAnonFlags_safe_protect (void *start, size_t length, + int prot, int flags, + size_t dead_low, + size_t dead_high); PRIVATE void *GC_mremap (void *start, size_t oldLength, size_t newLength); PRIVATE void GC_release (void *base, size_t length); diff -Nru mlton-20130715/runtime/util/align.h mlton-20210117+dfsg/runtime/util/align.h --- mlton-20130715/runtime/util/align.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/util/align.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/util/die.c mlton-20210117+dfsg/runtime/util/die.c --- mlton-20130715/runtime/util/die.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/util/die.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ /* Copyright (C) 2004-2006 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/util/die.h mlton-20210117+dfsg/runtime/util/die.h --- mlton-20130715/runtime/util/die.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/util/die.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/util/endian.h mlton-20210117+dfsg/runtime/util/endian.h --- mlton-20130715/runtime/util/endian.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/util/endian.h 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/util/pointer.h mlton-20210117+dfsg/runtime/util/pointer.h --- mlton-20130715/runtime/util/pointer.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/util/pointer.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/util/read_write.h mlton-20210117+dfsg/runtime/util/read_write.h --- mlton-20130715/runtime/util/read_write.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/util/read_write.h 2021-12-28 17:19:36.000000000 +0000 @@ -3,7 +3,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/util/safe.h mlton-20210117+dfsg/runtime/util/safe.h --- mlton-20130715/runtime/util/safe.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/util/safe.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/util/to-string.c mlton-20210117+dfsg/runtime/util/to-string.c --- mlton-20130715/runtime/util/to-string.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/util/to-string.c 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/util/to-string.h mlton-20210117+dfsg/runtime/util/to-string.h --- mlton-20130715/runtime/util/to-string.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/util/to-string.h 2021-12-28 17:19:36.000000000 +0000 @@ -1,7 +1,7 @@ /* Copyright (C) 2004-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/runtime/util.c mlton-20210117+dfsg/runtime/util.c --- mlton-20130715/runtime/util.c 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/util.c 2021-12-28 17:19:36.000000000 +0000 @@ -1,10 +1,13 @@ -/* Copyright (C) 2012 Matthew Fluet. +/* Copyright (C) 2018,2020 Matthew Fluet. * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh * Jagannathan, and Stephen Weeks. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ +#define MLTON_UTIL +#include "util.h" + #include "util/die.c" #include "util/to-string.c" diff -Nru mlton-20130715/runtime/util.h mlton-20210117+dfsg/runtime/util.h --- mlton-20130715/runtime/util.h 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/runtime/util.h 2021-12-28 17:19:36.000000000 +0000 @@ -2,7 +2,7 @@ * Jagannathan, and Stephen Weeks. * Copyright (C) 1997-2000 NEC Research Institute. * - * MLton is released under a BSD-style license. + * MLton is released under a HPND-style license. * See the file MLton-LICENSE for details. */ diff -Nru mlton-20130715/.travis.yml mlton-20210117+dfsg/.travis.yml --- mlton-20130715/.travis.yml 1970-01-01 00:00:00.000000000 +0000 +++ mlton-20210117+dfsg/.travis.yml 2021-12-28 17:19:36.000000000 +0000 @@ -0,0 +1,42 @@ +language: shell +os: linux +arch: amd64 + +addons: + apt: + packages: mlton + homebrew: + packages: mlton + +jobs: + include: + - os: linux + dist: bionic + arch: amd64 + env: CC=gcc MLTON_COMPILE_ARGS="-codegen amd64" REGRESSION=true + - os: linux + dist: bionic + arch: amd64 + env: CC=gcc MLTON_COMPILE_ARGS="-codegen c" REGRESSION=false + - os: linux + dist: bionic + arch: amd64 + env: CC=clang MLTON_COMPILE_ARGS="-codegen c" REGRESSION=false + - os: linux + dist: bionic + arch: amd64 + env: CC=clang MLTON_COMPILE_ARGS="-codegen llvm" REGRESSION=false + - os: osx + osx_image: xcode11 + arch: amd64 + env: CC=clang MLTON_COMPILE_ARGS="-codegen amd64" REGRESSION=false + - os: osx + osx_image: xcode11 + arch: amd64 + env: CC=clang MLTON_COMPILE_ARGS="-codegen c" REGRESSION=false + +script: + - ./bin/travis-ci + +notifications: + email: false diff -Nru mlton-20130715/util/cm2mlb/cm2mlb-map mlton-20210117+dfsg/util/cm2mlb/cm2mlb-map --- mlton-20130715/util/cm2mlb/cm2mlb-map 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/util/cm2mlb/cm2mlb-map 2021-12-28 17:19:36.000000000 +0000 @@ -44,3 +44,4 @@ $sexp-lib.cm $(SML_LIB)/smlnj-lib/SExp $smlnj-lib.cm $(SML_LIB)/smlnj-lib/Util $unix-lib.cm $(SML_LIB)/smlnj-lib/Unix +$xml-lib.cm $(SML_LIB)/smlnj-lib/XML diff -Nru mlton-20130715/util/cm2mlb/cm2mlb.sml mlton-20210117+dfsg/util/cm2mlb/cm2mlb.sml --- mlton-20130715/util/cm2mlb/cm2mlb.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/util/cm2mlb/cm2mlb.sml 2021-12-28 17:19:36.000000000 +0000 @@ -9,6 +9,7 @@ * * To use from the REPL, do the following: * CM2MLB.cm2mlb {defines = ["MLton"], + * binds = [], * maps = [], * sources = "sources.cm", * out = TextIO.stdOut} @@ -23,15 +24,17 @@ * 3. mv cm2mlb.x86-linux /bin/.heap * * Once it is installed, the usage is as follows: - * cm2mlb [-Dsym ...] [-map file] sources.cm + * cm2mlb [-Dsym ...] [-bind file] [-map file] sources.cm * * -Dsym can be used to define CM preprocessor symbols. + * -bind file can be used to add cm anchor bindings. * -map file can be used to add cm2mlb mappings. *) structure CM2MLB : sig val cm2mlb : {defines: string list, + binds: string list, maps: string list, out: TextIO.outstream, sources: string} -> unit @@ -58,6 +61,44 @@ end end + structure AnchorBind = + struct + + fun make (file : string) = + if OS.FileSys.access (file, [OS.FileSys.A_READ]) + then + let + val lines = + let + val f = TextIO.openIn file + in + let + fun loop lines = + case TextIO.inputLine f of + NONE => List.rev lines + | SOME l => loop (l::lines) + in + loop [] + before TextIO.closeIn f + end handle e => (TextIO.closeIn f; raise e) + end handle _ => [] + in + List.mapPartial + (fn line => + if CharVector.all Char.isSpace line + orelse CharVector.sub (line, 0) = #"#" + then NONE + else + case String.tokens Char.isSpace line of + [anchor, value] => + SOME {anchor = anchor, value = value} + | _ => die (concat ["strange anchor->value mapping: ", + file, ":: ", line])) + lines + end + else [] + end + structure AnchorMap = struct @@ -98,7 +139,7 @@ val default = make "cm2mlb-map" end - fun cm2mlb {defines, maps, out, sources} = + fun cm2mlb {defines, binds, maps, out, sources} = let (* Define preprocessor symbols *) val _ = @@ -110,11 +151,10 @@ val _ = Control.printWarnings := false val _ = - if OS.FileSys.access (sources, [OS.FileSys.A_READ]) - then () - else die (concat ["file not found: ", sources]) - val {dir, file = sources} = OS.Path.splitDirFile sources - val () = if dir <> "" then OS.FileSys.chDir dir else () + List.app + (fn {anchor, value} => + #set (CM.Anchor.anchor anchor) (SOME value)) + (List.concat (List.map AnchorBind.make binds)) local val anchorMap = @@ -129,6 +169,13 @@ in val peekAnchorMap = peekAnchorMap end + + val _ = + if OS.FileSys.access (sources, [OS.FileSys.A_READ]) + then () + else die (concat ["file not found: ", sources]) + val {dir, file = sources} = OS.Path.splitDirFile sources + val () = if dir <> "" then OS.FileSys.chDir dir else () in case CM.Graph.graph sources of SOME {graph as PG.GRAPH {imports, ...}, imports = importLibs, nativesrc} => @@ -211,17 +258,19 @@ end fun usage msg = - (message "Usage: cm2mlb [-Dsym ...] [-map file] sources.cm" + (message "Usage: cm2mlb [-Dsym ...] [-bind file] [-map file] sources.cm" ; die msg) fun main (_, args) = let val defines = ref ["MLton"] + val binds = ref [] val maps = ref [] fun loop args = case args of [file] => cm2mlb {defines = !defines, + binds = !binds, maps = !maps, out = TextIO.stdOut, sources = file} @@ -230,6 +279,11 @@ then (defines := String.extract (flag, 2, NONE) :: !defines ; loop args) + else if "-bind" = flag + then case args of + file :: args => (binds := file :: !binds + ; loop args) + | _ => usage "missing map file" else if "-map" = flag then case args of file :: args => (maps := file :: !maps diff -Nru mlton-20130715/util/cm2mlb/Makefile mlton-20210117+dfsg/util/cm2mlb/Makefile --- mlton-20130715/util/cm2mlb/Makefile 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/util/cm2mlb/Makefile 2021-12-28 17:19:36.000000000 +0000 @@ -1,6 +1,6 @@ ## Copyright (C) 2010 Matthew Fluet. # - # MLton is released under a BSD-style license. + # MLton is released under a HPND-style license. # See the file MLton-LICENSE for details. ## diff -Nru mlton-20130715/util/cmcat/cmcat.sml mlton-20210117+dfsg/util/cmcat/cmcat.sml --- mlton-20130715/util/cmcat/cmcat.sml 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/util/cmcat/cmcat.sml 1970-01-01 00:00:00.000000000 +0000 @@ -1,654 +0,0 @@ -(* - * Authors: Stephen Weeks (sweeks@sweeks.com) - * Matthew Fluet (fluet@cs.cornell.edu) - * - * This requires that you have SML/NJ installed. - * It works with SML/NJ 110.44 and may require changes to work with other - * versions, since it depends on the CM structure. - * - * cmcat takes a ".cm" file and prints on stdout a list of files in the order - * deduced by CM. - * - * To use from the REPL, do the following: - * CMcat.cmcat {comments = true, - * defines = [], - * sources = "sources.cm", - * out = TextIO.stdOut} - * - * Before using from the shell, you must do the following, where is - * the root directory of the SML/NJ installation. You may need to be root in - * order to do these. - * 1. From the SML/NJ REPL: - * CM.make "sources.cm"; - * CMcat.export (); - * 2. ln -s /bin/.run-sml /bin/cmcat - * 3. mv cmcat.x86-linux /bin/.heap - * - * Once it is installed, the usage is as follows: - * cmcat [-comments] [-Dsym ...] sources.cm - * - * -comments can be used to add comments to the output, including import dependencies. - * -Dsym can be used to define CM preprocessor symbols. - *) - -structure CMcat : -sig - val cmcat : {comments: bool, - defines: String.t list, - out: Out.t, - sources: String.t} -> unit - val export : unit -> unit -end = -struct - structure PG = PortableGraph - structure Graph = DirectedGraph - structure Node = Graph.Node - structure Edge = Graph.Edge - - fun message s = Out.output (Out.error, s ^ "\n") - - structure CM = - struct - open CM - - structure Graph = - struct - val graph = fn src => - (Graph.graph src) - handle _ => NONE - end - end - - structure SrcDescr :> - sig - type t - val make : String.t * String.t -> t - val src : t -> String.t - val descr : t -> String.t - val equals : t * t -> bool - val hash : t -> Word.t - val toString : t -> String.t - end = - struct - datatype t = T of String.t * String.t - - fun make (src,descr) = T (src,descr) - fun src (T (s,_)) = s - fun descr (T (_,d)) = d - - fun equals (T (src1,descr1), T (src2,descr2)) = - String.equals(src1, src2) - fun hash (T (src, descr)) = - String.hash src - fun toString (T (src, descr)) = - concat [descr, ":", src] - end - - structure Closure = - struct - fun topoSortImportGraph source = - let - datatype t = T of {graph: {graph: PG.graph, - imports: SrcDescr.t List.t, - nativesrc: String.t -> String.t} option, - hash: Word.t, - node: t Node.t, - srcdescr: SrcDescr.t} - - val g : t Graph.t = Graph.new () - val m : t HashSet.t = - HashSet.new {hash = fn T {hash, ...} => hash} - val {get : t Node.t -> t, - set, rem} = - Property.getSetOnce - (Node.plist, Property.initRaise ("topoSortImportGraph:get", Node.layout)) - - val todo = ref [(SrcDescr.make (source,source),fn _ => ())]; - - fun closure () = - if List.length (!todo) = 0 - then () - else Exn.withEscape - (fn esc => - let - val (srcdescr,finish) = List.pop todo - val hash = SrcDescr.hash srcdescr - - val T {node, ...} = - HashSet.lookupOrInsert - (m, hash, fn T {srcdescr = srcdescr', ...} => - SrcDescr.equals(srcdescr, srcdescr'), - fn () => - case CM.Graph.graph (SrcDescr.src srcdescr) of - NONE => let - val node = Graph.newNode g - val result = - T {graph = NONE, - hash = hash, - node = node, - srcdescr = srcdescr} - val _ = set(node, result) - in - result - end - | SOME {graph, imports, nativesrc, ...} => - let - val node = Graph.newNode g - val imports = - List.map - (imports, fn lib => - let - val descr = CM.Library.descr lib - val descr = List.last (String.split(descr, #":")) - val src = CM.Library.osstring lib - val finish = fn import_node => - (ignore o Graph.addEdge) - (g, {from = import_node, to = node}) - in - List.push(todo, (SrcDescr.make (src, descr), finish)) ; - SrcDescr.make (src, descr) - end) - val result = - T {graph = SOME {graph = graph, - imports = imports, - nativesrc = nativesrc}, - hash = hash, - node = node, - srcdescr = srcdescr} - in - set (node, result) ; - result - end) - val _ = finish node - in - closure () - end) - val _ = closure () - - val libs = - case Graph.topologicalSort g of - NONE => raise Fail "topologicalSort of import graph failed" - | SOME nodes => - let - val libs = - List.map - (nodes, fn n => - let - val T {graph, srcdescr, ...} = get n - in - {graph = graph, - srcdescr = srcdescr} - end) - in - libs - end - in - libs - end - - fun filter (libs : {graph: {graph: PG.graph, - imports: SrcDescr.t List.t, - nativesrc: String.t -> String.t} option, - srcdescr: SrcDescr.t} List.t) = - let - datatype t = T of {hash: Word.t, - lhs: SrcDescr.t * PG.varname, - syms: (SrcDescr.t * PG.namespace * String.t * t Node.t) list} - val symsNodesDefs : t HashSet.t = - HashSet.new {hash = fn T {hash, ...} => hash} - - datatype s = S of {hash: Word.t, - known: Bool.t, - srcdescr: SrcDescr.t, - syms: (SrcDescr.t * PG.namespace * String.t * t Node.t) list ref} - val exports : s HashSet.t = - HashSet.new {hash = fn S {hash, ...} => hash} - - val g : t Graph.t = Graph.new () - val {get : t Node.t -> (unit -> unit), - set, rem} = - Property.getSetOnce - (Node.plist, Property.initRaise ("filter:get", Node.layout)) - - datatype w = W of {hash: Word.t, - lhs: SrcDescr.t * PG.varname} - val keep : w HashSet.t = - HashSet.new {hash = fn W {hash, ...} => hash} - val addKeep = - fn (srcdescr,vn) => - let - val hash = Word.xorb(SrcDescr.hash srcdescr, String.hash vn) - val result = W {hash = hash, - lhs = (srcdescr, vn)} - in - fn () => - (HashSet.insertIfNew - (keep, hash, fn W {lhs = (srcdescr',vn'), ...} => - SrcDescr.equals(srcdescr, srcdescr') andalso - vn = vn', fn () => result, - fn _ => raise Fail "keep") ; - ()) - end - - datatype x = X of {hash: Word.t, - srcdescr: SrcDescr.t, - syms: (PG.namespace * String.t) list ref} - val imports : x HashSet.t = - HashSet.new {hash = fn X {hash, ...} => hash} - val addImport = - fn (srcdescr,ns,s) => - let - val hash = SrcDescr.hash srcdescr - in - fn () => - let - val X {syms, ...} = - HashSet.lookupOrInsert - (imports, hash, fn X {srcdescr = srcdescr', ...} => - SrcDescr.equals(srcdescr, srcdescr'), fn () => - X {hash = hash, - srcdescr = srcdescr, - syms = ref []}) - in - List.push(syms,(ns,s)) - end - end - - val _ = - List.foreach - (libs, - fn {graph = NONE, srcdescr, ...} => - let - val hash = SrcDescr.hash srcdescr - val _ = - HashSet.insertIfNew - (exports, hash, - fn S {srcdescr = srcdescr', ...} => - SrcDescr.equals(srcdescr, srcdescr'), - fn () => S {hash = hash, - known = false, - srcdescr = srcdescr, - syms = ref []}, - fn _ => raise Fail (concat ["srcdescr: ", - SrcDescr.toString srcdescr, - " repeated"])) - in - () - end - | {graph = SOME {graph = PG.GRAPH {defs, export, imports}, - imports = imports', ...}, - srcdescr, ...} => - let - val srcdescr_hash = SrcDescr.hash srcdescr - - local - val imports = - List.map2(imports, imports', fn (vn,import) => - (vn, - let - val hash = SrcDescr.hash import - val S {known, syms as envSyms, ...} = - case HashSet.peek - (exports, hash, fn S {srcdescr, ...} => - SrcDescr.equals(import, srcdescr)) of - NONE => raise Fail (concat ["srcdescr: ", - SrcDescr.toString srcdescr, - " unknown"]) - | SOME s => s - in - if known - then - fn symsSyms => - List.keepAll - (!envSyms, fn (srcdescr,ns,v,node) => - List.contains(symsSyms,(ns,v),(op =))) - else - fn symsSyms => - List.map - (symsSyms, fn (ns,s) => - case List.peek(!syms, fn (_,ns',s',_) => (ns,s) = (ns',s')) of - SOME z => z - | NONE => let - val node = Graph.newNode g - val _ = set(node,addImport (import,ns,s)) - val z = (import,ns,s,node) - in - List.push(syms,z) ; - z - end) - end)) - in - val importFn = - String.memoizeList(fn _ => raise Fail "importFn", - imports) - end - - datatype u = U of {hash: Word.t, - lhs: PG.varname, - sym: PG.namespace * String.t} - val symDefs : u HashSet.t = - HashSet.new {hash = fn U {hash, ...} => hash} - datatype v = V of {hash: Word.t, - lhs: PG.varname, - syms: (PG.namespace * String.t) list} - val symsDefs : v HashSet.t = - HashSet.new {hash = fn V {hash, ...} => hash} - - val _ = - List.foreach - (defs, fn PG.DEF {lhs, rhs} => - case rhs of - PG.SYM (ns,s) => - let - val hash = String.hash lhs - val result = U {hash = hash, - lhs = lhs, - sym = (ns,s)} - in - HashSet.insertIfNew - (symDefs, hash, fn U {lhs = lhs', ...} => - lhs = lhs', fn () => result, - fn _ => raise Fail (concat ["lhs: ", lhs, " violates VARNAME_ONCE"])) ; - () - end - | PG.SYMS vns => - let - val hash = String.hash lhs - val syms = - List.foldr - (vns, [], fn (vn,symsAcc) => - let val hash = String.hash vn - in - case HashSet.peek - (symDefs, hash, fn U {lhs, ...} => - vn = lhs) of - NONE => raise Fail (concat ["lhs: ", lhs, " violates SYM_TYPE"]) - | SOME (U {sym, ...}) => sym::symsAcc - end) - val result = - V {hash = hash, - lhs = lhs, - syms = syms} - in - HashSet.insertIfNew - (symsDefs, hash, fn V {lhs = lhs', ...} => - lhs = lhs', fn () => result, - fn _ => raise Fail (concat ["lhs: ", lhs, " violates VARNAME_ONCE"])) ; - () - end - | PG.IMPORT {lib, syms} => - let - val hash = Word.xorb(srcdescr_hash, String.hash lhs) - - val symsSyms = - let val hash = String.hash syms - in - case HashSet.peek - (symsDefs, hash, fn V {lhs, ...} => - syms = lhs) of - NONE => raise Fail (concat ["lhs: ", lhs, " violates SYMS_TYPE"]) - | SOME (V {syms, ...}) => syms - end - val syms = importFn lib symsSyms - val result = - T {hash = hash, - lhs = (srcdescr, lhs), - syms = syms} - in - HashSet.insertIfNew - (symsNodesDefs, hash, fn T {lhs = (srcdescr',lhs'), ...} => - SrcDescr.equals(srcdescr, srcdescr') andalso - lhs = lhs', fn () => result, - fn _ => raise Fail (concat ["lhs: ", lhs, " violates VARNAME_ONCE"])) ; - () - end - | PG.COMPILE {src, env, syms} => - let - val hash = Word.xorb(srcdescr_hash, String.hash lhs) - val envSyms = - let val hash = Word.xorb(srcdescr_hash, String.hash env) - in - case HashSet.peek - (symsNodesDefs, hash, fn T {lhs = (srcdescr',env'), ...} => - SrcDescr.equals(srcdescr, srcdescr') andalso - env = env') of - NONE => raise Fail (concat ["lhs: ", lhs, " violates ENV_TYPE"]) - | SOME (T {syms, ...}) => syms - end - val symsSyms = - let val hash = String.hash syms - in - case HashSet.peek - (symsDefs, hash, fn V {lhs, ...} => - syms = lhs) of - NONE => raise Fail (concat ["lhs: ", lhs, " violates SYMS_TYPE"]) - | SOME (V {syms, ...}) => syms - end - val node = Graph.newNode g - val _ = set(node, addKeep (srcdescr, lhs)) - val _ = - List.foreach - (envSyms, fn (_,_,_,node') => - ignore(Graph.addEdge(g, {from = node, to = node'}))) - val syms = - List.map - (symsSyms, fn (ns,v) => - (srcdescr,ns,v,node)) - val result = - T {hash = hash, - lhs = (srcdescr, lhs), - syms = syms} - in - HashSet.insertIfNew - (symsNodesDefs, hash, fn T {lhs = (srcdescr',lhs'), ...} => - SrcDescr.equals(srcdescr, srcdescr') andalso - lhs = lhs', fn () => result, - fn _ => raise Fail (concat ["lhs: ", lhs, " violates VARNAME_ONCE"])) ; - () - end - | PG.FILTER {env, syms} => - let - val hash = Word.xorb(srcdescr_hash, String.hash lhs) - val envSyms = - let val hash = Word.xorb(srcdescr_hash, String.hash env) - in - case HashSet.peek - (symsNodesDefs, hash, fn T {lhs = (srcdescr',env'), ...} => - SrcDescr.equals(srcdescr, srcdescr') andalso - env = env') of - NONE => raise Fail (concat ["lhs: ", lhs, " violates ENV_TYPE"]) - | SOME (T {syms, ...}) => syms - end - val symsSyms = - let val hash = String.hash syms - in - case HashSet.peek - (symsDefs, hash, fn V {lhs, ...} => - syms = lhs) of - NONE => raise Fail (concat ["lhs: ", lhs, " violates SYMS_TYPE"]) - | SOME (V {syms, ...}) => syms - end - val syms = - List.keepAll - (envSyms, fn (srcdescr,ns,v,node) => - List.contains(symsSyms,(ns,v),(op =))) - val result = - T {hash = hash, - lhs = (srcdescr, lhs), - syms = syms} - in - HashSet.insertIfNew - (symsNodesDefs, hash, fn T {lhs = (srcdescr',lhs'), ...} => - SrcDescr.equals(srcdescr, srcdescr') andalso - lhs = lhs', fn () => result, - fn _ => raise Fail (concat ["lhs: ", lhs, " violates VARNAME_ONCE"])) ; - () - end - | PG.MERGE vns => - let - val hash = Word.xorb(srcdescr_hash, String.hash lhs) - val syms = - List.foldr - (vns, [], fn (vn,symsAcc) => - let val hash = Word.xorb(srcdescr_hash, String.hash vn) - in - case HashSet.peek - (symsNodesDefs, hash, fn T {lhs = (srcdescr',vn'), ...} => - SrcDescr.equals(srcdescr, srcdescr') andalso - vn = vn') of - NONE => raise Fail (concat ["lhs: ", lhs, " violates ENV_TYPE"]) - | SOME (T {syms, ...}) => symsAcc @ syms - end) - val result = - T {hash = hash, - lhs = (srcdescr, lhs), - syms = syms} - in - HashSet.insertIfNew - (symsNodesDefs, hash, fn T {lhs = (srcdescr',lhs'), ...} => - SrcDescr.equals(srcdescr, srcdescr') andalso - lhs = lhs', fn () => result, - fn _ => raise Fail (concat ["lhs: ", lhs, " violates VARNAME_ONCE"])) ; - () - end) - - val exportSyms = - let val hash = Word.xorb(srcdescr_hash, String.hash export) - in - case HashSet.peek - (symsNodesDefs, hash, fn T {lhs = (srcdescr',export'), ...} => - SrcDescr.equals(srcdescr, srcdescr') andalso - export = export') of - NONE => raise Fail (concat ["lhs: ", export, " violates ENV_TYPE"]) - | SOME (T {syms, ...}) => syms - end - val result = S {hash = srcdescr_hash, - known = true, - srcdescr = srcdescr, - syms = ref exportSyms} - val _ = - HashSet.insertIfNew - (exports, srcdescr_hash, fn S {srcdescr = srcdescr', ...} => - SrcDescr.equals(srcdescr, srcdescr'), fn () => result, - fn _ => raise Fail (concat ["srcdescr: ", - SrcDescr.toString srcdescr, - " repeated"])) - - in - () - end) - - val {srcdescr, ...} = List.last libs - val nodes = - case HashSet.peek - (exports, SrcDescr.hash srcdescr, fn S {srcdescr = srcdescr', ...} => - SrcDescr.equals(srcdescr, srcdescr')) of - NONE => raise Fail "nodes" - | SOME (S {syms , ...}) => - List.map(!syms,fn (_,_,_,n) => n) - val _ = - Graph.dfsNodes - (g, nodes, - Graph.DfsParam.startNode - (fn node => (get node) ())) - - val keep = fn (srcdescr, vn) => - Option.isSome - (HashSet.peek - (keep, Word.xorb(SrcDescr.hash srcdescr, String.hash vn), - fn W {lhs = (srcdescr',vn'), ...} => - SrcDescr.equals(srcdescr, srcdescr') andalso - vn = vn')) - - val imports = fn import => - case HashSet.peek - (imports, SrcDescr.hash import, fn X {srcdescr, ...} => - SrcDescr.equals(import, srcdescr)) of - NONE => [] - | SOME (X {syms, ...}) => !syms - in - (keep, imports) - end - end - - fun cmcat {comments, defines, out, sources} = - let - (* Define preprocessor symbols *) - val _ = List.foreach(defines, fn sym => - (#set (CM.symval sym)) (SOME 1)) - val _ = (#set CM.Control.verbose) false - val _ = (#set CM.Control.warn_obsolete) false - val _ = Control.printWarnings := false - val dir = OS.FileSys.getDir () - val libs = Closure.topoSortImportGraph sources - val (keep,imports) = Closure.filter libs - in - List.foreach - (libs, - fn {graph = NONE, srcdescr, ...} => - if comments - then (Out.output (out, "(* " ^ (SrcDescr.descr srcdescr) ^ "\n"); - List.foreach - (imports srcdescr, fn (ns,s) => - Out.output (out, " * " ^ (case ns of - PG.SGN => "signature " - | PG.STR => "structure " - | PG.FCT => "functor ") ^ - s ^ "\n")); - Out.output (out, " *)\n")) - else () - | {graph = SOME {graph, nativesrc, ...}, srcdescr, ...} => - (if comments - then Out.output (out, - "(* " ^ - (OS.Path.mkRelative {path = SrcDescr.src srcdescr, relativeTo = dir}) ^ - " *)\n") - else (); - let val PG.GRAPH {defs, ...} = graph - in - List.foreach - (defs, fn def => - case def of - PG.DEF {lhs, rhs = PG.COMPILE {src = (src, native), ...}, ...} => - if keep(srcdescr,lhs) - then Out.output(out, (if native then src else nativesrc src) ^ "\n") - else () - | _ => ()) - end)) - end - - fun die msg = - (message "Usage: cmcat [-comments] [-Dsym ...] sources.cm" - ; message ("Error: " ^ msg) - ; OS.Process.exit OS.Process.failure) - - fun export () = - SMLofNJ.exportFn - ("cmcat", fn (_, args) => - let - val comments = ref false - val defines = ref ["MLton"] - fun loop args = - case args of - [file] => - cmcat {comments = !comments, - defines = !defines, - out = Out.standard, - sources = file} - | flag :: args => - if String.equals (flag, "-comments") - then - (comments := true; - loop args) - else if String.hasPrefix (flag, {prefix = "-D"}) - then - (defines := String.extract (flag, 2, NONE) :: !defines - ; loop args) - else die (String.concat ["invalid flag ", flag]) - | _ => die "wrong number of arguments" - in - loop args (* handle _ => die "cmcat failed" *) - ; 0 - end) - -end diff -Nru mlton-20130715/util/cmcat/sources.cm mlton-20210117+dfsg/util/cmcat/sources.cm --- mlton-20130715/util/cmcat/sources.cm 2013-07-15 19:59:09.000000000 +0000 +++ mlton-20210117+dfsg/util/cmcat/sources.cm 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -Group - structure CMcat -is - $/pgraph.cm - $smlnj/cm.cm - $smlnj/viscomp/core.cm - ../../lib/mlton/sources.cm - cmcat.sml